Index: tches/vim-7.3-branch_update-6.patch
===================================================================
--- patches/vim-7.3-branch_update-6.patch	(revision 90d546890a2e80dc1728058f83274818eed2d095)
+++ 	(revision )
@@ -1,90790 +1,0 @@
-Submitted By: William Harrington (kb0iic at gmail dot com)
-Date: 11-01-2012
-Initial Package Version: 7.3
-Origin: Upstream
-Upstream Status: Applied
-Description: Contains all upstream patches up to 7.3.712.
-
-diff -Naur vim73.orig/Filelist vim73/Filelist
---- vim73.orig/Filelist	2010-08-07 11:04:57.000000000 +0000
-+++ vim73/Filelist	2012-11-01 20:35:48.000000000 +0000
-@@ -39,6 +39,7 @@
- 		src/mark.c \
- 		src/mbyte.c \
- 		src/memfile.c \
-+		src/memfile_test.c \
- 		src/memline.c \
- 		src/menu.c \
- 		src/message.c \
-@@ -80,6 +81,7 @@
- 		src/testdir/test[0-9]*.ok \
- 		src/testdir/test49.vim \
- 		src/testdir/test60.vim \
-+		src/testdir/test83-tags? \
- 		src/proto.h \
- 		src/proto/blowfish.pro \
- 		src/proto/buffer.pro \
-@@ -259,8 +261,10 @@
- 		src/Make_mvc.mak \
- 		src/Make_w16.mak \
- 		src/bigvim.bat \
-+		src/bigvim64.bat \
- 		src/msvcsetup.bat \
- 		src/msvc2008.bat \
-+		src/msvc2010.bat \
- 		src/dimm.idl \
- 		src/dlldata.c \
- 		src/dosinst.c \
-@@ -311,6 +315,7 @@
- 		src/xxd/Make_bc5.mak \
- 		src/xxd/Make_cyg.mak \
- 		src/xxd/Make_djg.mak \
-+		src/xxd/Make_ming.mak \
- 		src/xxd/Make_mvc.mak \
- 		nsis/gvim.nsi \
- 		nsis/README.txt \
-@@ -345,6 +350,13 @@
- 		src/vim*.ico \
- 		src/vim.tlb \
- 		src/vimtbar.lib \
-+		src/xpm/COPYRIGHT \
-+		src/xpm/README.txt \
-+		src/xpm/include/*.h \
-+		src/xpm/x64/lib/libXpm.a \
-+		src/xpm/x64/lib/libXpm.lib \
-+		src/xpm/x86/lib/libXpm.a \
-+		src/xpm/x86/lib/libXpm.lib \
- 		src/vimtbar.dll \
- 		nsis/icons/*.bmp \
- 		nsis/icons/*.ico \
-@@ -426,9 +438,6 @@
- 		$(SRC_VMS) \
- 		README_os390.txt \
- 		src/Make_mint.mak \
--		src/Make_ro.mak \
--		src/gui_riscos.c \
--		src/gui_riscos.h \
- 		src/if_sniff.c \
- 		src/infplist.xml \
- 		src/link.390 \
-@@ -436,10 +445,6 @@
- 		src/os_beos.h \
- 		src/os_beos.rsrc \
- 		src/os_mint.h \
--		src/os_riscos.c \
--		src/os_riscos.h \
--		src/proto/gui_riscos.pro \
--		src/proto/os_riscos.pro \
- 		src/os_vms_fix.com \
- 		src/toolbar.phi \
- 
-@@ -466,6 +471,7 @@
- 		runtime/macros/hanoi/hanoi.vim \
- 		runtime/macros/hanoi/poster \
- 		runtime/macros/justify.vim \
-+		runtime/macros/less.bat \
- 		runtime/macros/less.sh \
- 		runtime/macros/less.vim \
- 		runtime/macros/life/click.me \
-@@ -669,6 +675,8 @@
- 
- # generic language files
- LANG_GEN = \
-+		runtime/doc/*-de.1 \
-+		runtime/doc/*-de.UTF-8.1 \
- 		runtime/doc/*-fr.1 \
- 		runtime/doc/*-fr.UTF-8.1 \
- 		runtime/doc/*-it.1 \
-@@ -685,7 +693,17 @@
- 		runtime/tutor/Makefile \
- 		runtime/tutor/tutor.utf-8 \
- 		runtime/tutor/tutor.?? \
--		runtime/tutor/tutor.??.* \
-+		runtime/tutor/tutor.??.utf-8 \
-+		runtime/tutor/tutor.??.euc \
-+		runtime/tutor/tutor.??.sjis \
-+		runtime/tutor/tutor.??.iso9 \
-+		runtime/tutor/tutor.??.big5 \
-+		runtime/tutor/tutor.??.cp1250 \
-+		runtime/tutor/tutor.??.cp1251 \
-+		runtime/tutor/tutor.??.cp737 \
-+		runtime/tutor/tutor.??_??.utf-8 \
-+		runtime/tutor/tutor.bar \
-+		runtime/tutor/tutor.bar.utf-8 \
- 		runtime/spell/README.txt \
- 		runtime/spell/??/*.diff \
- 		runtime/spell/??/main.aap \
-diff -Naur vim73.orig/Makefile vim73/Makefile
---- vim73.orig/Makefile	2010-08-15 12:23:34.000000000 +0000
-+++ vim73/Makefile	2012-11-01 20:35:41.000000000 +0000
-@@ -23,6 +23,9 @@
- # has run can result in compiling with $(CC) empty.
- 
- first:
-+	@if test ! -f src/auto/config.mk; then \
-+		cp src/config.mk.dist src/auto/config.mk; \
-+	fi
- 	@echo "Starting make in the src directory."
- 	@echo "If there are problems, cd to the src directory and run make there"
- 	cd src && $(MAKE) $@
-@@ -30,6 +33,9 @@
- # Some make programs use the last target for the $@ default; put the other
- # targets separately to always let $@ expand to "first" by default.
- all install uninstall tools config configure reconfig proto depend lint tags types test testclean clean distclean:
-+	@if test ! -f src/auto/config.mk; then \
-+		cp src/config.mk.dist src/auto/config.mk; \
-+	fi
- 	@echo "Starting make in the src directory."
- 	@echo "If there are problems, cd to the src directory and run make there"
- 	cd src && $(MAKE) $@
-diff -Naur vim73.orig/README_extra.txt vim73/README_extra.txt
---- vim73.orig/README_extra.txt	2010-08-15 12:23:19.000000000 +0000
-+++ vim73/README_extra.txt	2012-11-01 20:35:42.000000000 +0000
-@@ -13,9 +13,6 @@
- 
- src/os_amiga.*		Files for the Amiga port.
- 
--src/gui_riscos.*
--src/os_riscos.*		Files for the RISC OS port.
--
- src/gui_beos.*
- src/os_beos.*		Files for the BeOS port.
- 
-diff -Naur vim73.orig/runtime/doc/autocmd.txt vim73/runtime/doc/autocmd.txt
---- vim73.orig/runtime/doc/autocmd.txt	2010-08-15 12:23:19.000000000 +0000
-+++ vim73/runtime/doc/autocmd.txt	2012-11-01 20:35:45.000000000 +0000
-@@ -299,6 +299,8 @@
- |InsertEnter|		starting Insert mode
- |InsertChange|		when typing <Insert> while in Insert or Replace mode
- |InsertLeave|		when leaving Insert mode
-+|InsertCharPre|		when a character was typed in Insert mode, before
-+			inserting it
- 
- |ColorScheme|		after loading a color scheme
- 
-@@ -657,6 +659,17 @@
- 				indicates the new mode.
- 				Be careful not to move the cursor or do
- 				anything else that the user does not expect.
-+							*InsertCharPre*
-+InsertCharPre			When a character is typed in Insert mode,
-+				before inserting the char.
-+				The |v:char| variable indicates the char typed
-+				and can be changed during the event to insert
-+				a different character.  When |v:char| is set
-+				to more than one character this text is
-+				inserted literally.
-+				It is not allowed to change the text |textlock|.
-+				The event is not triggered when 'paste' is
-+				set.
- 							*InsertEnter*
- InsertEnter			Just before starting Insert mode.  Also for
- 				Replace mode and Virtual Replace mode.  The
-@@ -682,7 +695,10 @@
- QuickFixCmdPre			Before a quickfix command is run (|:make|,
- 				|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
- 				|:lgrepadd|, |:vimgrep|, |:lvimgrep|,
--				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
-+				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
-+				|:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
-+				|:lgetfile|, |:laddfile|, |:helpgrep|,
-+				|:lhelpgrep|).
- 				The pattern is matched against the command
- 				being run.  When |:grep| is used but 'grepprg'
- 				is set to "internal" it still matches "grep".
-@@ -693,7 +709,10 @@
- 							*QuickFixCmdPost*
- QuickFixCmdPost			Like QuickFixCmdPre, but after a quickfix
- 				command is run, before jumping to the first
--				location.  See |QuickFixCmdPost-example|.
-+				location. For |:cfile| and |:lfile| commands
-+				it is run after error file is read and before
-+				moving to the first error. 
-+				See |QuickFixCmdPost-example|.
- 							*RemoteReply*
- RemoteReply			When a reply from a Vim that functions as
- 				server was received |server2client()|.  The
-@@ -1051,14 +1070,17 @@
- 			argument is included, Vim executes only the matching
- 			autocommands for that group.  Note: if you use an
- 			undefined group name, Vim gives you an error message.
--
-+							*<nomodeline>*
- 			After applying the autocommands the modelines are
- 			processed, so that their settings overrule the
- 			settings from autocommands, like what happens when
--			editing a file.
-+			editing a file. This is skipped when the <nomodeline>
-+			argument is present. You probably want to use
-+			<nomodeline> for events that are not used when loading
-+			a buffer, such as |User|.
- 
- 						*:doautoa* *:doautoall*
--:doautoa[ll] [group] {event} [fname]
-+:doautoa[ll] [<nomodeline>] [group] {event} [fname]
- 			Like ":doautocmd", but apply the autocommands to each
- 			loaded buffer.  Note that [fname] is used to select
- 			the autocommands, not the buffers to which they are
-diff -Naur vim73.orig/runtime/doc/change.txt vim73/runtime/doc/change.txt
---- vim73.orig/runtime/doc/change.txt	2010-08-15 12:23:19.000000000 +0000
-+++ vim73/runtime/doc/change.txt	2012-11-01 20:35:46.000000000 +0000
-@@ -916,8 +916,10 @@
- {Visual}["x]Y		Yank the highlighted lines [into register x] (for
- 			{Visual} see |Visual-mode|).  {not in Vi}
- 
--							*:y* *:yank*
--:[range]y[ank] [x]	Yank [range] lines [into register x].
-+							*:y* *:yank* *E850*
-+:[range]y[ank] [x]	Yank [range] lines [into register x]. Yanking to the
-+			"* or "+ registers is possible only in GUI versions or
-+			when the |+xterm_clipboard| feature is included.
- 
- :[range]y[ank] [x] {count}
- 			Yank {count} lines, starting with last line number
-@@ -1493,6 +1495,12 @@
- 	characters.  Overruled by the 'M' flag.
- 1	Don't break a line after a one-letter word.  It's broken before it
- 	instead (if possible).
-+j	Where it makes sense, remove a comment leader when joining lines.  For
-+	example, joining:
-+		int i;   // the index ~
-+		         // in the list ~
-+	Becomes:
-+		int i;   // the index in the list ~
- 
- 
- With 't' and 'c' you can specify when Vim performs auto-wrapping:
-diff -Naur vim73.orig/runtime/doc/cmdline.txt vim73/runtime/doc/cmdline.txt
---- vim73.orig/runtime/doc/cmdline.txt	2010-08-15 12:23:19.000000000 +0000
-+++ vim73/runtime/doc/cmdline.txt	2012-11-01 20:35:46.000000000 +0000
-@@ -330,12 +330,12 @@
- 
- :his[tory] [{name}] [{first}][, [{last}]]
- 		List the contents of history {name} which can be:
--		c[md]	 or :	command-line history
--		s[earch] or /	search string history
--		e[xpr]	 or =	expression register history
--		i[nput]	 or @	input line history
--		d[ebug]	 or >	debug command history
--		a[ll]		all of the above
-+		c[md]	 or :		command-line history
-+		s[earch] or / or ?	search string history
-+		e[xpr]	 or =		expression register history
-+		i[nput]	 or @		input line history
-+		d[ebug]	 or >		debug command history
-+		a[ll]			all of the above
- 		{not in Vi}
- 
- 		If the numbers {first} and/or {last} are given, the respective
-diff -Naur vim73.orig/runtime/doc/diff.txt vim73/runtime/doc/diff.txt
---- vim73.orig/runtime/doc/diff.txt	2010-08-15 12:23:20.000000000 +0000
-+++ vim73/runtime/doc/diff.txt	2012-11-01 20:35:46.000000000 +0000
-@@ -178,7 +178,7 @@
- nodiff" before hiding it.
- 
- 							*:diffu* *:diffupdate*
--:diffu[pdate]			Update the diff highlighting and folds.
-+:diffu[pdate][!]		Update the diff highlighting and folds.
- 
- Vim attempts to keep the differences updated when you make changes to the
- text.  This mostly takes care of inserted and deleted lines.  Changes within a
-@@ -187,6 +187,9 @@
- 
- 	:diffupdate
- 
-+If the ! is included Vim will check if the file was changed externally and
-+needs to be reloaded.  It will prompt for each changed file, like `:checktime`
-+was used.
- 
- Vim will show filler lines for lines that are missing in one window but are
- present in another.  These lines were inserted in another file or deleted in
-diff -Naur vim73.orig/runtime/doc/eval.txt vim73/runtime/doc/eval.txt
---- vim73.orig/runtime/doc/eval.txt	2010-08-15 12:23:20.000000000 +0000
-+++ vim73/runtime/doc/eval.txt	2012-11-01 20:35:48.000000000 +0000
-@@ -798,11 +798,12 @@
- For |Lists| only "+" is possible and then both expr6 must be a list.  The
- result is a new list with the two lists Concatenated.
- 
--expr7 *	 expr7 ..	number multiplication			*expr-star*
--expr7 /	 expr7 ..	number division				*expr-/*
--expr7 %	 expr7 ..	number modulo				*expr-%*
-+expr7 *	 expr7 ..	Number multiplication			*expr-star*
-+expr7 /	 expr7 ..	Number division				*expr-/*
-+expr7 %	 expr7 ..	Number modulo				*expr-%*
- 
- For all, except ".", Strings are converted to Numbers.
-+For bitwise operators see |and()|, |or()| and |xor()|.
- 
- Note the difference between "+" and ".":
- 	"123" + "456" = 579
-@@ -1291,6 +1292,7 @@
- 					*v:char* *char-variable*
- v:char		Argument for evaluating 'formatexpr' and used for the typed
- 		character when using <expr> in an abbreviation |:map-<expr>|.
-+		It is also used by the |InsertPreChar| event.
- 
- 			*v:charconvert_from* *charconvert_from-variable*
- v:charconvert_from
-@@ -1657,6 +1659,15 @@
- 					*v:warningmsg* *warningmsg-variable*
- v:warningmsg	Last given warning message.  It's allowed to set this variable.
- 
-+					*v:windowid* *windowid-variable*
-+v:windowid	When any X11 based GUI is running or when running in a
-+		terminal and Vim connects to the X server (|-X|) this will be
-+		set to the window ID.
-+		When an MS-Windows GUI is running this will be set to the
-+		window handle.
-+		Otherwise the value is zero.
-+		Note: for windows inside Vim use |winnr()|.
-+
- ==============================================================================
- 4. Builtin Functions					*functions*
- 
-@@ -1669,6 +1680,7 @@
- abs( {expr})			Float or Number  absolute value of {expr}
- acos( {expr})			Float	arc cosine of {expr}
- add( {list}, {item})		List	append {item} to |List| {list}
-+and( {expr}, {expr})		Number  bitwise AND
- append( {lnum}, {string})	Number	append {string} below line {lnum}
- append( {lnum}, {list})		Number	append lines {list} below line {lnum}
- argc()				Number	number of files in the argument list
-@@ -1726,7 +1738,8 @@
- extend( {expr1}, {expr2} [, {expr3}])
- 				List/Dict insert items of {expr2} into {expr1}
- exp( {expr})			Float	exponential of {expr}
--expand( {expr} [, {flag}])	String	expand special keywords in {expr}
-+expand( {expr} [, {nosuf} [, {list}]])
-+				any	expand special keywords in {expr}
- feedkeys( {string} [, {mode}])	Number	add key sequence to typeahead buffer
- filereadable( {file})		Number	TRUE if {file} is a readable file
- filewritable( {file})		Number	TRUE if {file} is a writable file
-@@ -1780,7 +1793,8 @@
- getwinposx()			Number	X coord in pixels of GUI Vim window
- getwinposy()			Number	Y coord in pixels of GUI Vim window
- getwinvar( {nr}, {varname})	any	variable {varname} in window {nr}
--glob( {expr} [, {flag}])	String	expand file wildcards in {expr}
-+glob( {expr} [, {nosuf} [, {list}]])
-+				any	expand file wildcards in {expr}
- globpath( {path}, {expr} [, {flag}])
- 				String	do glob({expr}) for all dirs in {path}
- has( {feature})			Number	TRUE if feature {feature} supported
-@@ -1807,6 +1821,7 @@
- inputsave()			Number	save and clear typeahead
- inputsecret( {prompt} [, {text}]) String  like input() but hiding the text
- insert( {list}, {item} [, {idx}]) List	insert {item} in {list} [before {idx}]
-+invert( {expr})			Number  bitwise invert
- isdirectory( {directory})	Number	TRUE if {directory} is a directory
- islocked( {expr})		Number	TRUE if {expr} is locked
- items( {dict})			List	key-value pairs in {dict}
-@@ -1821,9 +1836,11 @@
- localtime()			Number	current time
- log( {expr})			Float	natural logarithm (base e) of {expr}
- log10( {expr})			Float	logarithm of Float {expr} to base 10
-+luaeval( {expr}[, {expr}])	any	evaluate |Lua| expression
- map( {expr}, {string})		List/Dict  change each item in {expr} to {expr}
--maparg( {name}[, {mode} [, {abbr}]])
--				String	rhs of mapping {name} in mode {mode}
-+maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
-+				String or Dict
-+					rhs of mapping {name} in mode {mode}
- mapcheck( {name}[, {mode} [, {abbr}]])
- 				String	check for mappings matching {name}
- match( {expr}, {pat}[, {start}[, {count}]])
-@@ -1846,11 +1863,14 @@
- mzeval( {expr})			any	evaluate |MzScheme| expression
- nextnonblank( {lnum})		Number	line nr of non-blank line >= {lnum}
- nr2char( {expr})		String	single char with ASCII value {expr}
-+or( {expr}, {expr})		Number  bitwise OR
- pathshorten( {expr})		String	shorten directory names in a path
- pow( {x}, {y})			Float	{x} to the power of {y}
- prevnonblank( {lnum})		Number	line nr of non-blank line <= {lnum}
- printf( {fmt}, {expr1}...)	String	format text
- pumvisible()			Number	whether popup menu is visible
-+pyeval( {expr})			any	evaluate |Python| expression
-+py3eval( {expr})		any	evaluate |python3| expression
- range( {expr} [, {max} [, {stride}]])
- 				List	items from {expr} to {max}
- readfile( {fname} [, {binary} [, {max}]])
-@@ -1901,10 +1921,12 @@
- shellescape( {string} [, {special}])
- 				String	escape {string} for use as shell
- 					command argument
-+shiftwidth()			Number	effective value of 'shiftwidth'
- simplify( {filename})		String	simplify filename as much as possible
- sin( {expr})			Float	sine of {expr}
- sinh( {expr})			Float	hyperbolic sine of {expr}
--sort( {list} [, {func}])	List	sort {list}, using {func} to compare
-+sort( {list} [, {func} [, {dict}]])
-+				List	sort {list}, using {func} to compare
- soundfold( {word})		String	sound-fold {word}
- spellbadword()			String	badly spelled word at cursor
- spellsuggest( {word} [, {max} [, {capital}]])
-@@ -1967,6 +1989,7 @@
- winwidth( {nr})			Number	width of window {nr}
- writefile( {list}, {fname} [, {binary}])
- 				Number	write list of lines to file {fname}
-+xor( {expr}, {expr})		Number  bitwise XOR
- 
- abs({expr})							*abs()*
- 		Return the absolute value of {expr}.  When {expr} evaluates to
-@@ -2006,6 +2029,13 @@
- 		Use |insert()| to add an item at another position.
- 
- 
-+and({expr}, {expr})					*and()*
-+		Bitwise AND on the two arguments.  The arguments are converted
-+		to a number.  A List, Dict or Float argument causes an error.
-+		Example: >
-+			:let flag = and(bits, 0x80)
-+
-+
- append({lnum}, {expr})					*append()*
- 		When {expr} is a |List|: Append each item of the |List| as a
- 		text line below line {lnum} in the current buffer.
-@@ -2708,13 +2738,15 @@
- 		{only available when compiled with the |+float| feature}
- 
- 
--expand({expr} [, {flag}])				*expand()*
-+expand({expr} [, {nosuf} [, {list}]])				*expand()*
- 		Expand wildcards and the following special keywords in {expr}.
--		The result is a String.
-+		'wildignorecase' applies.
- 
--		When there are several matches, they are separated by <NL>
--		characters.  [Note: in version 5.0 a space was used, which
--		caused problems when a file name contains a space]
-+		If {list} is given and it is non-zero, a List will be returned.
-+		Otherwise the result is a String and when there are several
-+		matches, they are separated by <NL> characters.  [Note: in
-+		version 5.0 a space was used, which caused problems when a
-+		file name contains a space]
- 
- 		If the expansion fails, the result is an empty string.	A name
- 		for a non-existing file is not included.
-@@ -2731,6 +2763,7 @@
- 			<abuf>		autocmd buffer number (as a String!)
- 			<amatch>	autocmd matched name
- 			<sfile>		sourced script file name
-+			<slnum>		sourced script file line number
- 			<cword>		word under the cursor
- 			<cWORD>		WORD under the cursor
- 			<client>	the {clientid} of the last received
-@@ -2767,10 +2800,10 @@
- 		When {expr} does not start with '%', '#' or '<', it is
- 		expanded like a file name is expanded on the command line.
- 		'suffixes' and 'wildignore' are used, unless the optional
--		{flag} argument is given and it is non-zero.  Names for
--		non-existing files are included.  The "**" item can be used to
--		search in a directory tree.  For example, to find all "README"
--		files in the current directory and below: >
-+		{nosuf} argument is given and it is non-zero.
-+		Names for non-existing files are included.  The "**" item can
-+		be used to search in a directory tree.  For example, to find
-+		all "README" files in the current directory and below: >
- 			:echo expand("**/README")
- <
- 		Expand() can also be used to expand variables and environment
-@@ -3414,17 +3447,23 @@
- 			:let list_is_on = getwinvar(2, '&list')
- 			:echo "myvar = " . getwinvar(1, 'myvar')
- <
--glob({expr} [, {flag}])					*glob()*
-+glob({expr} [, {nosuf} [, {list}]])				*glob()*
- 		Expand the file wildcards in {expr}.  See |wildcards| for the
- 		use of special characters.
--		The result is a String.
--		When there are several matches, they are separated by <NL>
--		characters.
--		Unless the optional {flag} argument is given and is non-zero,
-+
-+		Unless the optional {nosuf} argument is given and is non-zero,
- 		the 'suffixes' and 'wildignore' options apply: Names matching
- 		one of the patterns in 'wildignore' will be skipped and
- 		'suffixes' affect the ordering of matches.
--		If the expansion fails, the result is an empty string.
-+		'wildignorecase' always applies.
-+
-+		When {list} is present and it is non-zero the result is a List
-+		with all matching files. The advantage of using a List is,
-+		you also get filenames containing newlines correctly.
-+		Otherwise the result is a String and when there are several
-+		matches, they are separated by <NL> characters.
-+
-+		If the expansion fails, the result is an empty String or List.
- 		A name for a non-existing file is not included.
- 
- 		For most systems backticks can be used to get files names from
-@@ -3694,10 +3733,10 @@
- 		Like |input()|, but when the GUI is running and text dialogs
- 		are supported, a dialog window pops up to input the text.
- 		Example: >
--			:let n = inputdialog("value for shiftwidth", &sw)
--			:if n != ""
--			:  let &sw = n
--			:endif
-+		   :let n = inputdialog("value for shiftwidth", shiftwidth())
-+		   :if n != ""
-+		   :  let &sw = n
-+		   :endif
- <		When the dialog is cancelled {cancelreturn} is returned.  When
- 		omitted an empty string is returned.
- 		Hitting <Enter> works like pressing the OK button.  Hitting
-@@ -3759,6 +3798,11 @@
- 		Note that when {item} is a |List| it is inserted as a single
- 		item.  Use |extend()| to concatenate |Lists|.
- 
-+invert({expr})						*invert()*
-+		Bitwise invert.  The argument is converted to a number.  A
-+		List, Dict or Float argument causes an error.  Example: >
-+			:let bits = invert(bits)
-+
- isdirectory({directory})				*isdirectory()*
- 		The result is a Number, which is non-zero when a directory
- 		with the name {directory} exists.  If {directory} doesn't
-@@ -3941,6 +3985,20 @@
- <			-2.0
- 		{only available when compiled with the |+float| feature}
- 		
-+luaeval({expr}[, {expr}])					*luaeval()*
-+		Evaluate Lua expression {expr} and return its result converted 
-+		to Vim data structures. Second {expr} may hold additional 
-+		argument accessible as _A inside first {expr}.
-+		Strings are returned as they are.
-+		Boolean objects are converted to numbers.
-+		Numbers are converted to |Float| values if vim was compiled 
-+		with |+float| and to numbers otherwise.
-+		Dictionaries and lists obtained by vim.eval() are returned 
-+		as-is.
-+		Other objects are returned as zero without any errors.
-+		See |lua-luaeval| for more details.
-+		{only available when compiled with the |+lua| feature}
-+
- map({expr}, {string})					*map()*
- 		{expr} must be a |List| or a |Dictionary|.
- 		Replace each item in {expr} with the result of evaluating
-@@ -3966,23 +4024,51 @@
- 		further items in {expr} are processed.
- 
- 
--maparg({name}[, {mode} [, {abbr}]])			*maparg()*
--		Return the rhs of mapping {name} in mode {mode}.  When there
--		is no mapping for {name}, an empty String is returned.
-+maparg({name}[, {mode} [, {abbr} [, {dict}]]])			*maparg()*
-+		When {dict} is omitted or zero: Return the rhs of mapping
-+		{name} in mode {mode}.  The returned String has special
-+		characters translated like in the output of the ":map" command
-+		listing.
-+		
-+		When there is no mapping for {name}, an empty String is
-+		returned.
-+
-+		The {name} can have special key names, like in the ":map"
-+		command.
-+
- 		{mode} can be one of these strings:
- 			"n"	Normal
--			"v"	Visual
-+			"v"	Visual (including Select)
- 			"o"	Operator-pending
- 			"i"	Insert
- 			"c"	Cmd-line
-+			"s"	Select
-+			"x"	Visual
- 			"l"	langmap |language-mapping|
- 			""	Normal, Visual and Operator-pending
- 		When {mode} is omitted, the modes for "" are used.
-+
- 		When {abbr} is there and it is non-zero use abbreviations
- 		instead of mappings.
--		The {name} can have special key names, like in the ":map"
--		command.  The returned String has special characters
--		translated like in the output of the ":map" command listing.
-+
-+		When {dict} is there and it is non-zero return a dictionary
-+		containing all the information of the mapping with the
-+		following items:
-+		  "lhs"	     The {lhs} of the mapping.
-+		  "rhs"	     The {rhs} of the mapping as typed.
-+		  "silent"   1 for a |:map-silent| mapping, else 0.
-+		  "noremap"  1 if the {rhs} of the mapping is remappable.
-+		  "expr"     1 for an expression mapping (|:map-<expr>|).
-+		  "buffer"   1 for a buffer local mapping (|:map-local|).
-+		  "mode"     Modes for which the mapping is defined. In
-+			     addition to the modes mentioned above, these
-+			     characters will be used:
-+			     " "     Normal, Visual and Operator-pending
-+			     "!"     Insert and Commandline mode
-+				     (|mapmpde-ic|)
-+		  "sid"	     the Script local ID, used for <sid> mappings
-+			     (|<SID>|)
-+
- 		The mappings local to the current buffer are checked first,
- 		then the global mappings.
- 		This function can be used to map a key even when it's already
-@@ -4295,6 +4381,13 @@
- 			call setpos('.', save_cursor)
- <		Also see |setpos()|.
- 
-+or({expr}, {expr})					*or()*
-+		Bitwise OR on the two arguments.  The arguments are converted
-+		to a number.  A List, Dict or Float argument causes an error.
-+		Example: >
-+			:let bits = or(bits, 0x80)
-+
-+
- pathshorten({expr})					*pathshorten()*
- 		Shorten directory names in the path {expr} and return the
- 		result.  The tail, the file name, is kept as-is.  The other
-@@ -4500,6 +4593,29 @@
- 		This can be used to avoid some things that would remove the
- 		popup menu.
- 
-+							*E860* *E861*
-+py3eval({expr})						*py3eval()*
-+		Evaluate Python expression {expr} and return its result
-+		converted to Vim data structures.
-+		Numbers and strings are returned as they are (strings are 
-+		copied though, unicode strings are additionally converted to 
-+		'encoding').
-+		Lists are represented as Vim |List| type.
-+		Dictionaries are represented as Vim |Dictionary| type with 
-+		keys converted to strings.
-+		{only available when compiled with the |+python3| feature}
-+
-+							*E858* *E859*
-+pyeval({expr})						*pyeval()*
-+		Evaluate Python expression {expr} and return its result
-+		converted to Vim data structures.
-+		Numbers and strings are returned as they are (strings are 
-+		copied though).
-+		Lists are represented as Vim |List| type.
-+		Dictionaries are represented as Vim |Dictionary| type with 
-+		keys converted to strings.
-+		{only available when compiled with the |+python| feature}
-+
- 							*E726* *E727*
- range({expr} [, {max} [, {stride}]])				*range()*
- 		Returns a |List| with Numbers:
-@@ -4733,6 +4849,10 @@
- 		Search for regexp pattern {pattern}.  The search starts at the
- 		cursor position (you can use |cursor()| to set it).
- 
-+		If there is no match a 0 is returned and the cursor doesn't
-+		move.  No error message is given.
-+		When a match has been found its line number is returned.
-+
- 		{flags} is a String, which can contain these character flags:
- 		'b'	search backward instead of forward
- 		'c'	accept a match at the cursor position
-@@ -5189,6 +5309,23 @@
- 		    :call system("chmod +w -- " . shellescape(expand("%")))
- 
- 
-+shiftwidth()						*shiftwidth()*
-+		Returns the effective value of 'shiftwidth'. This is the
-+		'shiftwidth' value unless it is zero, in which case it is the
-+		'tabstop' value.  To be backwards compatible in indent
-+		plugins, use this: >
-+			if exists('*shiftwidth')
-+			  func s:sw()
-+			    return shiftwidth()
-+			  endfunc
-+			else
-+			  func s:sw()
-+			    return &sw
-+			  endfunc
-+			endif
-+<		And then use s:sw() instead of &sw.
-+
-+
- simplify({filename})					*simplify()*
- 		Simplify the file name as much as possible without changing
- 		the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
-@@ -5228,7 +5365,7 @@
- 		{only available when compiled with the |+float| feature}
- 
- 
--sort({list} [, {func}])					*sort()* *E702*
-+sort({list} [, {func} [, {dict}]])			*sort()* *E702*
- 		Sort the items in {list} in-place.  Returns {list}.  If you
- 		want a list to remain unmodified make a copy first: >
- 			:let sortedlist = sort(copy(mylist))
-@@ -5236,6 +5373,8 @@
- 		Numbers sort after Strings, |Lists| after Numbers.
- 		For sorting text in the current buffer use |:sort|.
- 		When {func} is given and it is one then case is ignored.
-+		{dict} is for functions with the "dict" attribute.  It will be
-+		used to set the local variable "self". |Dictionary-function|
- 		When {func} is a |Funcref| or a function name, this function
- 		is called to compare items.  The function is invoked with two
- 		items as argument and must return zero if they are equal, 1 or
-@@ -6056,7 +6195,15 @@
- 		To copy a file byte for byte: >
- 			:let fl = readfile("foo", "b")
- 			:call writefile(fl, "foocopy", "b")
--<
-+
-+
-+xor({expr}, {expr})					*xor()*
-+		Bitwise XOR on the two arguments.  The arguments are converted
-+		to a number.  A List, Dict or Float argument causes an error.
-+		Example: >
-+			:let bits = xor(bits, 0x80)
-+
-+
- 
- 							*feature-list*
- There are three types of features:
-diff -Naur vim73.orig/runtime/doc/eval.txt~ vim73/runtime/doc/eval.txt~
---- vim73.orig/runtime/doc/eval.txt~	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/runtime/doc/eval.txt~	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,8362 @@
-+*eval.txt*	For Vim version 7.3.  Last change: 2010 Aug 15
-+
-+
-+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
-+
-+
-+Expression evaluation			*expression* *expr* *E15* *eval*
-+
-+Using expressions is introduced in chapter 41 of the user manual |usr_41.txt|.
-+
-+Note: Expression evaluation can be disabled at compile time.  If this has been
-+done, the features in this document are not available.	See |+eval| and
-+|no-eval-feature|.
-+
-+1.  Variables			|variables|
-+    1.1 Variable types
-+    1.2 Function references		|Funcref|
-+    1.3 Lists				|Lists|
-+    1.4 Dictionaries			|Dictionaries|
-+    1.5 More about variables		|more-variables|
-+2.  Expression syntax		|expression-syntax|
-+3.  Internal variable		|internal-variables|
-+4.  Builtin Functions		|functions|
-+5.  Defining functions		|user-functions|
-+6.  Curly braces names		|curly-braces-names|
-+7.  Commands			|expression-commands|
-+8.  Exception handling		|exception-handling|
-+9.  Examples			|eval-examples|
-+10. No +eval feature		|no-eval-feature|
-+11. The sandbox			|eval-sandbox|
-+12. Textlock			|textlock|
-+
-+{Vi does not have any of these commands}
-+
-+==============================================================================
-+1. Variables						*variables*
-+
-+1.1 Variable types ~
-+							*E712*
-+There are six types of variables:
-+
-+Number		A 32 bit signed number.  |expr-number| *Number*
-+		Examples:  -123  0x10  0177
-+
-+Float		A floating point number. |floating-point-format| *Float*
-+		{only when compiled with the |+float| feature}
-+		Examples: 123.456  1.15e-6  -1.1e3
-+
-+String		A NUL terminated string of 8-bit unsigned characters (bytes).
-+		|expr-string| Examples: "ab\txx\"--"  'x-z''a,c'
-+
-+Funcref		A reference to a function |Funcref|.
-+		Example: function("strlen")
-+
-+List		An ordered sequence of items |List|.
-+		Example: [1, 2, ['a', 'b']]
-+
-+Dictionary	An associative, unordered array: Each entry has a key and a
-+		value. |Dictionary|
-+		Example: {'blue': "#0000ff", 'red': "#ff0000"}
-+
-+The Number and String types are converted automatically, depending on how they
-+are used.
-+
-+Conversion from a Number to a String is by making the ASCII representation of
-+the Number.  Examples: >
-+	Number 123	-->	String "123"
-+	Number 0	-->	String "0"
-+	Number -1	-->	String "-1"
-+							*octal*
-+Conversion from a String to a Number is done by converting the first digits
-+to a number.  Hexadecimal "0xf9" and Octal "017" numbers are recognized.  If
-+the String doesn't start with digits, the result is zero.  Examples: >
-+	String "456"	-->	Number 456
-+	String "6bar"	-->	Number 6
-+	String "foo"	-->	Number 0
-+	String "0xf1"	-->	Number 241
-+	String "0100"	-->	Number 64
-+	String "-8"	-->	Number -8
-+	String "+8"	-->	Number 0
-+
-+To force conversion from String to Number, add zero to it: >
-+	:echo "0100" + 0
-+<	64 ~
-+
-+To avoid a leading zero to cause octal conversion, or for using a different
-+base, use |str2nr()|.
-+
-+For boolean operators Numbers are used.  Zero is FALSE, non-zero is TRUE.
-+
-+Note that in the command >
-+	:if "foo"
-+"foo" is converted to 0, which means FALSE.  To test for a non-empty string,
-+use strlen(): >
-+	:if strlen("foo")
-+<				*E745* *E728* *E703* *E729* *E730* *E731*
-+List, Dictionary and Funcref types are not automatically converted.
-+
-+							*E805* *E806* *E808*
-+When mixing Number and Float the Number is converted to Float.	Otherwise
-+there is no automatic conversion of Float.  You can use str2float() for String
-+to Float, printf() for Float to String and float2nr() for Float to Number.
-+
-+						*E706* *sticky-type-checking*
-+You will get an error if you try to change the type of a variable.  You need
-+to |:unlet| it first to avoid this error.  String and Number are considered
-+equivalent though, as well are Float and Number.  Consider this sequence of
-+commands: >
-+	:let l = "string"
-+	:let l = 44		" changes type from String to Number
-+	:let l = [1, 2, 3]	" error!  l is still a Number
-+	:let l = 4.4		" changes type from Number to Float
-+	:let l = "string"	" error!
-+
-+
-+1.2 Function references ~
-+					*Funcref* *E695* *E718*
-+A Funcref variable is obtained with the |function()| function.	It can be used
-+in an expression in the place of a function name, before the parenthesis
-+around the arguments, to invoke the function it refers to.  Example: >
-+
-+	:let Fn = function("MyFunc")
-+	:echo Fn()
-+<							*E704* *E705* *E707*
-+A Funcref variable must start with a capital, "s:", "w:", "t:" or "b:".  You
-+cannot have both a Funcref variable and a function with the same name.
-+
-+A special case is defining a function and directly assigning its Funcref to a
-+Dictionary entry.  Example: >
-+	:function dict.init() dict
-+	:   let self.val = 0
-+	:endfunction
-+
-+The key of the Dictionary can start with a lower case letter.  The actual
-+function name is not used here.  Also see |numbered-function|.
-+
-+A Funcref can also be used with the |:call| command: >
-+	:call Fn()
-+	:call dict.init()
-+
-+The name of the referenced function can be obtained with |string()|. >
-+	:let func = string(Fn)
-+
-+You can use |call()| to invoke a Funcref and use a list variable for the
-+arguments: >
-+	:let r = call(Fn, mylist)
-+
-+
-+1.3 Lists ~
-+							*List* *Lists* *E686*
-+A List is an ordered sequence of items.  An item can be of any type.  Items
-+can be accessed by their index number.	Items can be added and removed at any
-+position in the sequence.
-+
-+
-+List creation ~
-+							*E696* *E697*
-+A List is created with a comma separated list of items in square brackets.
-+Examples: >
-+	:let mylist = [1, two, 3, "four"]
-+	:let emptylist = []
-+
-+An item can be any expression.	Using a List for an item creates a
-+List of Lists: >
-+	:let nestlist = [[11, 12], [21, 22], [31, 32]]
-+
-+An extra comma after the last item is ignored.
-+
-+
-+List index ~
-+							*list-index* *E684*
-+An item in the List can be accessed by putting the index in square brackets
-+after the List.  Indexes are zero-based, thus the first item has index zero. >
-+	:let item = mylist[0]		" get the first item: 1
-+	:let item = mylist[2]		" get the third item: 3
-+
-+When the resulting item is a list this can be repeated: >
-+	:let item = nestlist[0][1]	" get the first list, second item: 12
-+<
-+A negative index is counted from the end.  Index -1 refers to the last item in
-+the List, -2 to the last but one item, etc. >
-+	:let last = mylist[-1]		" get the last item: "four"
-+
-+To avoid an error for an invalid index use the |get()| function.  When an item
-+is not available it returns zero or the default value you specify: >
-+	:echo get(mylist, idx)
-+	:echo get(mylist, idx, "NONE")
-+
-+
-+List concatenation ~
-+
-+Two lists can be concatenated with the "+" operator: >
-+	:let longlist = mylist + [5, 6]
-+	:let mylist += [7, 8]
-+
-+To prepend or append an item turn the item into a list by putting [] around
-+it.  To change a list in-place see |list-modification| below.
-+
-+
-+Sublist ~
-+
-+A part of the List can be obtained by specifying the first and last index,
-+separated by a colon in square brackets: >
-+	:let shortlist = mylist[2:-1]	" get List [3, "four"]
-+
-+Omitting the first index is similar to zero.  Omitting the last index is
-+similar to -1. >
-+	:let endlist = mylist[2:]	" from item 2 to the end: [3, "four"]
-+	:let shortlist = mylist[2:2]	" List with one item: [3]
-+	:let otherlist = mylist[:]	" make a copy of the List
-+
-+If the first index is beyond the last item of the List or the second item is
-+before the first item, the result is an empty list.  There is no error
-+message.
-+
-+If the second index is equal to or greater than the length of the list the
-+length minus one is used: >
-+	:let mylist = [0, 1, 2, 3]
-+	:echo mylist[2:8]		" result: [2, 3]
-+
-+NOTE: mylist[s:e] means using the variable "s:e" as index.  Watch out for
-+using a single letter variable before the ":".	Insert a space when needed:
-+mylist[s : e].
-+
-+
-+List identity ~
-+							*list-identity*
-+When variable "aa" is a list and you assign it to another variable "bb", both
-+variables refer to the same list.  Thus changing the list "aa" will also
-+change "bb": >
-+	:let aa = [1, 2, 3]
-+	:let bb = aa
-+	:call add(aa, 4)
-+	:echo bb
-+<	[1, 2, 3, 4]
-+
-+Making a copy of a list is done with the |copy()| function.  Using [:] also
-+works, as explained above.  This creates a shallow copy of the list: Changing
-+a list item in the list will also change the item in the copied list: >
-+	:let aa = [[1, 'a'], 2, 3]
-+	:let bb = copy(aa)
-+	:call add(aa, 4)
-+	:let aa[0][1] = 'aaa'
-+	:echo aa
-+<	[[1, aaa], 2, 3, 4] >
-+	:echo bb
-+<	[[1, aaa], 2, 3]
-+
-+To make a completely independent list use |deepcopy()|.  This also makes a
-+copy of the values in the list, recursively.  Up to a hundred levels deep.
-+
-+The operator "is" can be used to check if two variables refer to the same
-+List.  "isnot" does the opposite.  In contrast "==" compares if two lists have
-+the same value. >
-+	:let alist = [1, 2, 3]
-+	:let blist = [1, 2, 3]
-+	:echo alist is blist
-+<	0 >
-+	:echo alist == blist
-+<	1
-+
-+Note about comparing lists: Two lists are considered equal if they have the
-+same length and all items compare equal, as with using "==".  There is one
-+exception: When comparing a number with a string they are considered
-+different.  There is no automatic type conversion, as with using "==" on
-+variables.  Example: >
-+	echo 4 == "4"
-+<	1 >
-+	echo [4] == ["4"]
-+<	0
-+
-+Thus comparing Lists is more strict than comparing numbers and strings.  You
-+can compare simple values this way too by putting them in a list: >
-+
-+	:let a = 5
-+	:let b = "5"
-+	:echo a == b
-+<	1 >
-+	:echo [a] == [b]
-+<	0
-+
-+
-+List unpack ~
-+
-+To unpack the items in a list to individual variables, put the variables in
-+square brackets, like list items: >
-+	:let [var1, var2] = mylist
-+
-+When the number of variables does not match the number of items in the list
-+this produces an error.  To handle any extra items from the list append ";"
-+and a variable name: >
-+	:let [var1, var2; rest] = mylist
-+
-+This works like: >
-+	:let var1 = mylist[0]
-+	:let var2 = mylist[1]
-+	:let rest = mylist[2:]
-+
-+Except that there is no error if there are only two items.  "rest" will be an
-+empty list then.
-+
-+
-+List modification ~
-+							*list-modification*
-+To change a specific item of a list use |:let| this way: >
-+	:let list[4] = "four"
-+	:let listlist[0][3] = item
-+
-+To change part of a list you can specify the first and last item to be
-+modified.  The value must at least have the number of items in the range: >
-+	:let list[3:5] = [3, 4, 5]
-+
-+Adding and removing items from a list is done with functions.  Here are a few
-+examples: >
-+	:call insert(list, 'a')		" prepend item 'a'
-+	:call insert(list, 'a', 3)	" insert item 'a' before list[3]
-+	:call add(list, "new")		" append String item
-+	:call add(list, [1, 2])		" append a List as one new item
-+	:call extend(list, [1, 2])	" extend the list with two more items
-+	:let i = remove(list, 3)	" remove item 3
-+	:unlet list[3]			" idem
-+	:let l = remove(list, 3, -1)	" remove items 3 to last item
-+	:unlet list[3 : ]		" idem
-+	:call filter(list, 'v:val !~ "x"')  " remove items with an 'x'
-+
-+Changing the order of items in a list: >
-+	:call sort(list)		" sort a list alphabetically
-+	:call reverse(list)		" reverse the order of items
-+
-+
-+For loop ~
-+
-+The |:for| loop executes commands for each item in a list.  A variable is set
-+to each item in the list in sequence.  Example: >
-+	:for item in mylist
-+	:   call Doit(item)
-+	:endfor
-+
-+This works like: >
-+	:let index = 0
-+	:while index < len(mylist)
-+	:   let item = mylist[index]
-+	:   :call Doit(item)
-+	:   let index = index + 1
-+	:endwhile
-+
-+Note that all items in the list should be of the same type, otherwise this
-+results in error |E706|.  To avoid this |:unlet| the variable at the end of
-+the loop.
-+
-+If all you want to do is modify each item in the list then the |map()|
-+function will be a simpler method than a for loop.
-+
-+Just like the |:let| command, |:for| also accepts a list of variables.	This
-+requires the argument to be a list of lists. >
-+	:for [lnum, col] in [[1, 3], [2, 8], [3, 0]]
-+	:   call Doit(lnum, col)
-+	:endfor
-+
-+This works like a |:let| command is done for each list item.  Again, the types
-+must remain the same to avoid an error.
-+
-+It is also possible to put remaining items in a List variable: >
-+	:for [i, j; rest] in listlist
-+	:   call Doit(i, j)
-+	:   if !empty(rest)
-+	:      echo "remainder: " . string(rest)
-+	:   endif
-+	:endfor
-+
-+
-+List functions ~
-+						*E714*
-+Functions that are useful with a List: >
-+	:let r = call(funcname, list)	" call a function with an argument list
-+	:if empty(list)			" check if list is empty
-+	:let l = len(list)		" number of items in list
-+	:let big = max(list)		" maximum value in list
-+	:let small = min(list)		" minimum value in list
-+	:let xs = count(list, 'x')	" count nr of times 'x' appears in list
-+	:let i = index(list, 'x')	" index of first 'x' in list
-+	:let lines = getline(1, 10)	" get ten text lines from buffer
-+	:call append('$', lines)	" append text lines in buffer
-+	:let list = split("a b c")	" create list from items in a string
-+	:let string = join(list, ', ')	" create string from list items
-+	:let s = string(list)		" String representation of list
-+	:call map(list, '">> " . v:val')  " prepend ">> " to each item
-+
-+Don't forget that a combination of features can make things simple.  For
-+example, to add up all the numbers in a list: >
-+	:exe 'let sum = ' . join(nrlist, '+')
-+
-+
-+1.4 Dictionaries ~
-+						*Dictionaries* *Dictionary*
-+A Dictionary is an associative array: Each entry has a key and a value.  The
-+entry can be located with the key.  The entries are stored without a specific
-+ordering.
-+
-+
-+Dictionary creation ~
-+						*E720* *E721* *E722* *E723*
-+A Dictionary is created with a comma separated list of entries in curly
-+braces.  Each entry has a key and a value, separated by a colon.  Each key can
-+only appear once.  Examples: >
-+	:let mydict = {1: 'one', 2: 'two', 3: 'three'}
-+	:let emptydict = {}
-+<							*E713* *E716* *E717*
-+A key is always a String.  You can use a Number, it will be converted to a
-+String automatically.  Thus the String '4' and the number 4 will find the same
-+entry.	Note that the String '04' and the Number 04 are different, since the
-+Number will be converted to the String '4'.
-+
-+A value can be any expression.	Using a Dictionary for a value creates a
-+nested Dictionary: >
-+	:let nestdict = {1: {11: 'a', 12: 'b'}, 2: {21: 'c'}}
-+
-+An extra comma after the last entry is ignored.
-+
-+
-+Accessing entries ~
-+
-+The normal way to access an entry is by putting the key in square brackets: >
-+	:let val = mydict["one"]
-+	:let mydict["four"] = 4
-+
-+You can add new entries to an existing Dictionary this way, unlike Lists.
-+
-+For keys that consist entirely of letters, digits and underscore the following
-+form can be used |expr-entry|: >
-+	:let val = mydict.one
-+	:let mydict.four = 4
-+
-+Since an entry can be any type, also a List and a Dictionary, the indexing and
-+key lookup can be repeated: >
-+	:echo dict.key[idx].key
-+
-+
-+Dictionary to List conversion ~
-+
-+You may want to loop over the entries in a dictionary.	For this you need to
-+turn the Dictionary into a List and pass it to |:for|.
-+
-+Most often you want to loop over the keys, using the |keys()| function: >
-+	:for key in keys(mydict)
-+	:   echo key . ': ' . mydict[key]
-+	:endfor
-+
-+The List of keys is unsorted.  You may want to sort them first: >
-+	:for key in sort(keys(mydict))
-+
-+To loop over the values use the |values()| function:  >
-+	:for v in values(mydict)
-+	:   echo "value: " . v
-+	:endfor
-+
-+If you want both the key and the value use the |items()| function.  It returns
-+a List in which each item is a	List with two items, the key and the value: >
-+	:for [key, value] in items(mydict)
-+	:   echo key . ': ' . value
-+	:endfor
-+
-+
-+Dictionary identity ~
-+							*dict-identity*
-+Just like Lists you need to use |copy()| and |deepcopy()| to make a copy of a
-+Dictionary.  Otherwise, assignment results in referring to the same
-+Dictionary: >
-+	:let onedict = {'a': 1, 'b': 2}
-+	:let adict = onedict
-+	:let adict['a'] = 11
-+	:echo onedict['a']
-+	11
-+
-+Two Dictionaries compare equal if all the key-value pairs compare equal.  For
-+more info see |list-identity|.
-+
-+
-+Dictionary modification ~
-+							*dict-modification*
-+To change an already existing entry of a Dictionary, or to add a new entry,
-+use |:let| this way: >
-+	:let dict[4] = "four"
-+	:let dict['one'] = item
-+
-+Removing an entry from a Dictionary is done with |remove()| or |:unlet|.
-+Three ways to remove the entry with key "aaa" from dict: >
-+	:let i = remove(dict, 'aaa')
-+	:unlet dict.aaa
-+	:unlet dict['aaa']
-+
-+Merging a Dictionary with another is done with |extend()|: >
-+	:call extend(adict, bdict)
-+This extends adict with all entries from bdict.  Duplicate keys cause entries
-+in adict to be overwritten.  An optional third argument can change this.
-+Note that the order of entries in a Dictionary is irrelevant, thus don't
-+expect ":echo adict" to show the items from bdict after the older entries in
-+adict.
-+
-+Weeding out entries from a Dictionary can be done with |filter()|: >
-+	:call filter(dict, 'v:val =~ "x"')
-+This removes all entries from "dict" with a value not matching 'x'.
-+
-+
-+Dictionary function ~
-+					*Dictionary-function* *self* *E725*
-+When a function is defined with the "dict" attribute it can be used in a
-+special way with a dictionary.	Example: >
-+	:function Mylen() dict
-+	:   return len(self.data)
-+	:endfunction
-+	:let mydict = {'data': [0, 1, 2, 3], 'len': function("Mylen")}
-+	:echo mydict.len()
-+
-+This is like a method in object oriented programming.  The entry in the
-+Dictionary is a |Funcref|.  The local variable "self" refers to the dictionary
-+the function was invoked from.
-+
-+It is also possible to add a function without the "dict" attribute as a
-+Funcref to a Dictionary, but the "self" variable is not available then.
-+
-+				*numbered-function* *anonymous-function*
-+To avoid the extra name for the function it can be defined and directly
-+assigned to a Dictionary in this way: >
-+	:let mydict = {'data': [0, 1, 2, 3]}
-+	:function mydict.len() dict
-+	:   return len(self.data)
-+	:endfunction
-+	:echo mydict.len()
-+
-+The function will then get a number and the value of dict.len is a |Funcref|
-+that references this function.	The function can only be used through a
-+|Funcref|.  It will automatically be deleted when there is no |Funcref|
-+remaining that refers to it.
-+
-+It is not necessary to use the "dict" attribute for a numbered function.
-+
-+If you get an error for a numbered function, you can find out what it is with
-+a trick.  Assuming the function is 42, the command is: >
-+	:function {42}
-+
-+
-+Functions for Dictionaries ~
-+							*E715*
-+Functions that can be used with a Dictionary: >
-+	:if has_key(dict, 'foo')	" TRUE if dict has entry with key "foo"
-+	:if empty(dict)			" TRUE if dict is empty
-+	:let l = len(dict)		" number of items in dict
-+	:let big = max(dict)		" maximum value in dict
-+	:let small = min(dict)		" minimum value in dict
-+	:let xs = count(dict, 'x')	" count nr of times 'x' appears in dict
-+	:let s = string(dict)		" String representation of dict
-+	:call map(dict, '">> " . v:val')  " prepend ">> " to each item
-+
-+
-+1.5 More about variables ~
-+							*more-variables*
-+If you need to know the type of a variable or expression, use the |type()|
-+function.
-+
-+When the '!' flag is included in the 'viminfo' option, global variables that
-+start with an uppercase letter, and don't contain a lowercase letter, are
-+stored in the viminfo file |viminfo-file|.
-+
-+When the 'sessionoptions' option contains "global", global variables that
-+start with an uppercase letter and contain at least one lowercase letter are
-+stored in the session file |session-file|.
-+
-+variable name		can be stored where ~
-+my_var_6		not
-+My_Var_6		session file
-+MY_VAR_6		viminfo file
-+
-+
-+It's possible to form a variable name with curly braces, see
-+|curly-braces-names|.
-+
-+==============================================================================
-+2. Expression syntax					*expression-syntax*
-+
-+Expression syntax summary, from least to most significant:
-+
-+|expr1| expr2 ? expr1 : expr1	if-then-else
-+
-+|expr2|	expr3 || expr3 ..	logical OR
-+
-+|expr3|	expr4 && expr4 ..	logical AND
-+
-+|expr4|	expr5 == expr5		equal
-+	expr5 != expr5		not equal
-+	expr5 >	 expr5		greater than
-+	expr5 >= expr5		greater than or equal
-+	expr5 <	 expr5		smaller than
-+	expr5 <= expr5		smaller than or equal
-+	expr5 =~ expr5		regexp matches
-+	expr5 !~ expr5		regexp doesn't match
-+
-+	expr5 ==? expr5		equal, ignoring case
-+	expr5 ==# expr5		equal, match case
-+	etc.			As above, append ? for ignoring case, # for
-+				matching case
-+
-+	expr5 is expr5		same |List| instance
-+	expr5 isnot expr5	different |List| instance
-+
-+|expr5|	expr6 +	 expr6 ..	number addition or list concatenation
-+	expr6 -	 expr6 ..	number subtraction
-+	expr6 .	 expr6 ..	string concatenation
-+
-+|expr6|	expr7 *	 expr7 ..	number multiplication
-+	expr7 /	 expr7 ..	number division
-+	expr7 %	 expr7 ..	number modulo
-+
-+|expr7|	! expr7			logical NOT
-+	- expr7			unary minus
-+	+ expr7			unary plus
-+
-+
-+|expr8|	expr8[expr1]		byte of a String or item of a |List|
-+	expr8[expr1 : expr1]	substring of a String or sublist of a |List|
-+	expr8.name		entry in a |Dictionary|
-+	expr8(expr1, ...)	function call with |Funcref| variable
-+
-+|expr9| number			number constant
-+	"string"		string constant, backslash is special
-+	'string'		string constant, ' is doubled
-+	[expr1, ...]		|List|
-+	{expr1: expr1, ...}	|Dictionary|
-+	&option			option value
-+	(expr1)			nested expression
-+	variable		internal variable
-+	va{ria}ble		internal variable with curly braces
-+	$VAR			environment variable
-+	@r			contents of register 'r'
-+	function(expr1, ...)	function call
-+	func{ti}on(expr1, ...)	function call with curly braces
-+
-+
-+".." indicates that the operations in this level can be concatenated.
-+Example: >
-+	&nu || &list && &shell == "csh"
-+
-+All expressions within one level are parsed from left to right.
-+
-+
-+expr1							*expr1* *E109*
-+-----
-+
-+expr2 ? expr1 : expr1
-+
-+The expression before the '?' is evaluated to a number.  If it evaluates to
-+non-zero, the result is the value of the expression between the '?' and ':',
-+otherwise the result is the value of the expression after the ':'.
-+Example: >
-+	:echo lnum == 1 ? "top" : lnum
-+
-+Since the first expression is an "expr2", it cannot contain another ?:.  The
-+other two expressions can, thus allow for recursive use of ?:.
-+Example: >
-+	:echo lnum == 1 ? "top" : lnum == 1000 ? "last" : lnum
-+
-+To keep this readable, using |line-continuation| is suggested: >
-+	:echo lnum == 1
-+	:\	? "top"
-+	:\	: lnum == 1000
-+	:\		? "last"
-+	:\		: lnum
-+
-+You should always put a space before the ':', otherwise it can be mistaken for
-+use in a variable such as "a:1".
-+
-+
-+expr2 and expr3						*expr2* *expr3*
-+---------------
-+
-+					*expr-barbar* *expr-&&*
-+The "||" and "&&" operators take one argument on each side.  The arguments
-+are (converted to) Numbers.  The result is:
-+
-+	 input				 output ~
-+n1		n2		n1 || n2	n1 && n2 ~
-+zero		zero		zero		zero
-+zero		non-zero	non-zero	zero
-+non-zero	zero		non-zero	zero
-+non-zero	non-zero	non-zero	non-zero
-+
-+The operators can be concatenated, for example: >
-+
-+	&nu || &list && &shell == "csh"
-+
-+Note that "&&" takes precedence over "||", so this has the meaning of: >
-+
-+	&nu || (&list && &shell == "csh")
-+
-+Once the result is known, the expression "short-circuits", that is, further
-+arguments are not evaluated.  This is like what happens in C.  For example: >
-+
-+	let a = 1
-+	echo a || b
-+
-+This is valid even if there is no variable called "b" because "a" is non-zero,
-+so the result must be non-zero.  Similarly below: >
-+
-+	echo exists("b") && b == "yes"
-+
-+This is valid whether "b" has been defined or not.  The second clause will
-+only be evaluated if "b" has been defined.
-+
-+
-+expr4							*expr4*
-+-----
-+
-+expr5 {cmp} expr5
-+
-+Compare two expr5 expressions, resulting in a 0 if it evaluates to false, or 1
-+if it evaluates to true.
-+
-+			*expr-==*  *expr-!=*  *expr->*	 *expr->=*
-+			*expr-<*   *expr-<=*  *expr-=~*  *expr-!~*
-+			*expr-==#* *expr-!=#* *expr->#*  *expr->=#*
-+			*expr-<#*  *expr-<=#* *expr-=~#* *expr-!~#*
-+			*expr-==?* *expr-!=?* *expr->?*  *expr->=?*
-+			*expr-<?*  *expr-<=?* *expr-=~?* *expr-!~?*
-+			*expr-is*
-+		use 'ignorecase'    match case	   ignore case ~
-+equal			==		==#		==?
-+not equal		!=		!=#		!=?
-+greater than		>		>#		>?
-+greater than or equal	>=		>=#		>=?
-+smaller than		<		<#		<?
-+smaller than or equal	<=		<=#		<=?
-+regexp matches		=~		=~#		=~?
-+regexp doesn't match	!~		!~#		!~?
-+same instance		is
-+different instance	isnot
-+
-+Examples:
-+"abc" ==# "Abc"	  evaluates to 0
-+"abc" ==? "Abc"	  evaluates to 1
-+"abc" == "Abc"	  evaluates to 1 if 'ignorecase' is set, 0 otherwise
-+
-+							*E691* *E692*
-+A |List| can only be compared with a |List| and only "equal", "not equal" and
-+"is" can be used.  This compares the values of the list, recursively.
-+Ignoring case means case is ignored when comparing item values.
-+
-+							*E735* *E736*
-+A |Dictionary| can only be compared with a |Dictionary| and only "equal", "not
-+equal" and "is" can be used.  This compares the key/values of the |Dictionary|
-+recursively.  Ignoring case means case is ignored when comparing item values.
-+
-+							*E693* *E694*
-+A |Funcref| can only be compared with a |Funcref| and only "equal" and "not
-+equal" can be used.  Case is never ignored.
-+
-+When using "is" or "isnot" with a |List| this checks if the expressions are
-+referring to the same |List| instance.	A copy of a |List| is different from
-+the original |List|.  When using "is" without a |List| it is equivalent to
-+using "equal", using "isnot" equivalent to using "not equal".  Except that a
-+different type means the values are different.	"4 == '4'" is true, "4 is '4'"
-+is false.
-+
-+When comparing a String with a Number, the String is converted to a Number,
-+and the comparison is done on Numbers.	This means that "0 == 'x'" is TRUE,
-+because 'x' converted to a Number is zero.
-+
-+When comparing two Strings, this is done with strcmp() or stricmp().  This
-+results in the mathematical difference (comparing byte values), not
-+necessarily the alphabetical difference in the local language.
-+
-+When using the operators with a trailing '#', or the short version and
-+'ignorecase' is off, the comparing is done with strcmp(): case matters.
-+
-+When using the operators with a trailing '?', or the short version and
-+'ignorecase' is set, the comparing is done with stricmp(): case is ignored.
-+
-+'smartcase' is not used.
-+
-+The "=~" and "!~" operators match the lefthand argument with the righthand
-+argument, which is used as a pattern.  See |pattern| for what a pattern is.
-+This matching is always done like 'magic' was set and 'cpoptions' is empty, no
-+matter what the actual value of 'magic' or 'cpoptions' is.  This makes scripts
-+portable.  To avoid backslashes in the regexp pattern to be doubled, use a
-+single-quote string, see |literal-string|.
-+Since a string is considered to be a single line, a multi-line pattern
-+(containing \n, backslash-n) will not match.  However, a literal NL character
-+can be matched like an ordinary character.  Examples:
-+	"foo\nbar" =~ "\n"	evaluates to 1
-+	"foo\nbar" =~ "\\n"	evaluates to 0
-+
-+
-+expr5 and expr6						*expr5* *expr6*
-+---------------
-+expr6 +	 expr6 ..	Number addition or |List| concatenation	*expr-+*
-+expr6 -	 expr6 ..	Number subtraction			*expr--*
-+expr6 .	 expr6 ..	String concatenation			*expr-.*
-+
-+For |Lists| only "+" is possible and then both expr6 must be a list.  The
-+result is a new list with the two lists Concatenated.
-+
-+expr7 *	 expr7 ..	number multiplication			*expr-star*
-+expr7 /	 expr7 ..	number division				*expr-/*
-+expr7 %	 expr7 ..	number modulo				*expr-%*
-+
-+For all, except ".", Strings are converted to Numbers.
-+
-+Note the difference between "+" and ".":
-+	"123" + "456" = 579
-+	"123" . "456" = "123456"
-+
-+Since '.' has the same precedence as '+' and '-', you need to read: >
-+	1 . 90 + 90.0
-+As: >
-+	(1 . 90) + 90.0
-+That works, since the String "190" is automatically converted to the Number
-+190, which can be added to the Float 90.0.  However: >
-+	1 . 90 * 90.0
-+Should be read as: >
-+	1 . (90 * 90.0)
-+Since '.' has lower precedence than '*'.  This does NOT work, since this
-+attempts to concatenate a Float and a String.
-+
-+When dividing a Number by zero the result depends on the value:
-+	  0 / 0  = -0x80000000	(like NaN for Float)
-+	 >0 / 0  =  0x7fffffff	(like positive infinity)
-+	 <0 / 0  = -0x7fffffff	(like negative infinity)
-+	(before Vim 7.2 it was always 0x7fffffff)
-+
-+When the righthand side of '%' is zero, the result is 0.
-+
-+None of these work for |Funcref|s.
-+
-+. and % do not work for Float. *E804*
-+
-+
-+expr7							*expr7*
-+-----
-+! expr7			logical NOT		*expr-!*
-+- expr7			unary minus		*expr-unary--*
-++ expr7			unary plus		*expr-unary-+*
-+
-+For '!' non-zero becomes zero, zero becomes one.
-+For '-' the sign of the number is changed.
-+For '+' the number is unchanged.
-+
-+A String will be converted to a Number first.
-+
-+These three can be repeated and mixed.	Examples:
-+	!-1	    == 0
-+	!!8	    == 1
-+	--9	    == 9
-+
-+
-+expr8							*expr8*
-+-----
-+expr8[expr1]		item of String or |List|	*expr-[]* *E111*
-+
-+If expr8 is a Number or String this results in a String that contains the
-+expr1'th single byte from expr8.  expr8 is used as a String, expr1 as a
-+Number.  This doesn't recognize multi-byte encodings, see |byteidx()| for
-+an alternative.
-+
-+Index zero gives the first character.  This is like it works in C.  Careful:
-+text column numbers start with one!  Example, to get the character under the
-+cursor: >
-+	:let c = getline(".")[col(".") - 1]
-+
-+If the length of the String is less than the index, the result is an empty
-+String.  A negative index always results in an empty string (reason: backwards
-+compatibility).  Use [-1:] to get the last byte.
-+
-+If expr8 is a |List| then it results the item at index expr1.  See |list-index|
-+for possible index values.  If the index is out of range this results in an
-+error.	Example: >
-+	:let item = mylist[-1]		" get last item
-+
-+Generally, if a |List| index is equal to or higher than the length of the
-+|List|, or more negative than the length of the |List|, this results in an
-+error.
-+
-+
-+expr8[expr1a : expr1b]	substring or sublist		*expr-[:]*
-+
-+If expr8 is a Number or String this results in the substring with the bytes
-+from expr1a to and including expr1b.  expr8 is used as a String, expr1a and
-+expr1b are used as a Number.  This doesn't recognize multi-byte encodings, see
-+|byteidx()| for computing the indexes.
-+
-+If expr1a is omitted zero is used.  If expr1b is omitted the length of the
-+string minus one is used.
-+
-+A negative number can be used to measure from the end of the string.  -1 is
-+the last character, -2 the last but one, etc.
-+
-+If an index goes out of range for the string characters are omitted.  If
-+expr1b is smaller than expr1a the result is an empty string.
-+
-+Examples: >
-+	:let c = name[-1:]		" last byte of a string
-+	:let c = name[-2:-2]		" last but one byte of a string
-+	:let s = line(".")[4:]		" from the fifth byte to the end
-+	:let s = s[:-3]			" remove last two bytes
-+<
-+							*sublist* *slice*
-+If expr8 is a |List| this results in a new |List| with the items indicated by
-+the indexes expr1a and expr1b.	This works like with a String, as explained
-+just above, except that indexes out of range cause an error.  Examples: >
-+	:let l = mylist[:3]		" first four items
-+	:let l = mylist[4:4]		" List with one item
-+	:let l = mylist[:]		" shallow copy of a List
-+
-+Using expr8[expr1] or expr8[expr1a : expr1b] on a |Funcref| results in an
-+error.
-+
-+
-+expr8.name		entry in a |Dictionary|		*expr-entry*
-+
-+If expr8 is a |Dictionary| and it is followed by a dot, then the following
-+name will be used as a key in the |Dictionary|.  This is just like:
-+expr8[name].
-+
-+The name must consist of alphanumeric characters, just like a variable name,
-+but it may start with a number.  Curly braces cannot be used.
-+
-+There must not be white space before or after the dot.
-+
-+Examples: >
-+	:let dict = {"one": 1, 2: "two"}
-+	:echo dict.one
-+	:echo dict .2
-+
-+Note that the dot is also used for String concatenation.  To avoid confusion
-+always put spaces around the dot for String concatenation.
-+
-+
-+expr8(expr1, ...)	|Funcref| function call
-+
-+When expr8 is a |Funcref| type variable, invoke the function it refers to.
-+
-+
-+
-+							*expr9*
-+number
-+------
-+number			number constant		*expr-number*
-+
-+Decimal, Hexadecimal (starting with 0x or 0X), or Octal (starting with 0).
-+
-+						*floating-point-format*
-+Floating point numbers can be written in two forms:
-+
-+	[-+]{N}.{M}
-+	[-+]{N}.{M}e[-+]{exp}
-+
-+{N} and {M} are numbers.  Both {N} and {M} must be present and can only
-+contain digits.
-+[-+] means there is an optional plus or minus sign.
-+{exp} is the exponent, power of 10.
-+Only a decimal point is accepted, not a comma.	No matter what the current
-+locale is.
-+{only when compiled with the |+float| feature}
-+
-+Examples:
-+	123.456
-+	+0.0001
-+	55.0
-+	-0.123
-+	1.234e03
-+	1.0E-6
-+	-3.1416e+88
-+
-+These are INVALID:
-+	3.		empty {M}
-+	1e40		missing .{M}
-+
-+							*float-pi* *float-e*
-+A few useful values to copy&paste: >
-+	:let pi = 3.14159265359
-+	:let e  = 2.71828182846
-+
-+Rationale:
-+Before floating point was introduced, the text "123.456" was interpreted as
-+the two numbers "123" and "456", both converted to a string and concatenated,
-+resulting in the string "123456".  Since this was considered pointless, and we
-+could not find it intentionally being used in Vim scripts, this backwards
-+incompatibility was accepted in favor of being able to use the normal notation
-+for floating point numbers.
-+
-+						*floating-point-precision*
-+The precision and range of floating points numbers depends on what "double"
-+means in the library Vim was compiled with.  There is no way to change this at
-+runtime.
-+
-+The default for displaying a |Float| is to use 6 decimal places, like using
-+printf("%g", f).  You can select something else when using the |printf()|
-+function.  Example: >
-+	:echo printf('%.15e', atan(1))
-+<	7.853981633974483e-01
-+
-+
-+
-+string							*expr-string* *E114*
-+------
-+"string"		string constant		*expr-quote*
-+
-+Note that double quotes are used.
-+
-+A string constant accepts these special characters:
-+\...	three-digit octal number (e.g., "\316")
-+\..	two-digit octal number (must be followed by non-digit)
-+\.	one-digit octal number (must be followed by non-digit)
-+\x..	byte specified with two hex numbers (e.g., "\x1f")
-+\x.	byte specified with one hex number (must be followed by non-hex char)
-+\X..	same as \x..
-+\X.	same as \x.
-+\u....	character specified with up to 4 hex numbers, stored according to the
-+	current value of 'encoding' (e.g., "\u02a4")
-+\U....	same as \u....
-+\b	backspace <BS>
-+\e	escape <Esc>
-+\f	formfeed <FF>
-+\n	newline <NL>
-+\r	return <CR>
-+\t	tab <Tab>
-+\\	backslash
-+\"	double quote
-+\<xxx>	Special key named "xxx".  e.g. "\<C-W>" for CTRL-W.  This is for use
-+	in mappings, the 0x80 byte is escaped.  Don't use <Char-xxxx> to get a
-+	utf-8 character, use \uxxxx as mentioned above.
-+
-+Note that "\xff" is stored as the byte 255, which may be invalid in some
-+encodings.  Use "\u00ff" to store character 255 according to the current value
-+of 'encoding'.
-+
-+Note that "\000" and "\x00" force the end of the string.
-+
-+
-+literal-string						*literal-string* *E115*
-+---------------
-+'string'		string constant			*expr-'*
-+
-+Note that single quotes are used.
-+
-+This string is taken as it is.	No backslashes are removed or have a special
-+meaning.  The only exception is that two quotes stand for one quote.
-+
-+Single quoted strings are useful for patterns, so that backslashes do not need
-+to be doubled.	These two commands are equivalent: >
-+	if a =~ "\\s*"
-+	if a =~ '\s*'
-+
-+
-+option						*expr-option* *E112* *E113*
-+------
-+&option			option value, local value if possible
-+&g:option		global option value
-+&l:option		local option value
-+
-+Examples: >
-+	echo "tabstop is " . &tabstop
-+	if &insertmode
-+
-+Any option name can be used here.  See |options|.  When using the local value
-+and there is no buffer-local or window-local value, the global value is used
-+anyway.
-+
-+
-+register						*expr-register* *@r*
-+--------
-+@r			contents of register 'r'
-+
-+The result is the contents of the named register, as a single string.
-+Newlines are inserted where required.  To get the contents of the unnamed
-+register use @" or @@.	See |registers| for an explanation of the available
-+registers.
-+
-+When using the '=' register you get the expression itself, not what it
-+evaluates to.  Use |eval()| to evaluate it.
-+
-+
-+nesting							*expr-nesting* *E110*
-+-------
-+(expr1)			nested expression
-+
-+
-+environment variable					*expr-env*
-+--------------------
-+$VAR			environment variable
-+
-+The String value of any environment variable.  When it is not defined, the
-+result is an empty string.
-+						*expr-env-expand*
-+Note that there is a difference between using $VAR directly and using
-+expand("$VAR").  Using it directly will only expand environment variables that
-+are known inside the current Vim session.  Using expand() will first try using
-+the environment variables known inside the current Vim session.  If that
-+fails, a shell will be used to expand the variable.  This can be slow, but it
-+does expand all variables that the shell knows about.  Example: >
-+	:echo $version
-+	:echo expand("$version")
-+The first one probably doesn't echo anything, the second echoes the $version
-+variable (if your shell supports it).
-+
-+
-+internal variable					*expr-variable*
-+-----------------
-+variable		internal variable
-+See below |internal-variables|.
-+
-+
-+function call		*expr-function* *E116* *E118* *E119* *E120*
-+-------------
-+function(expr1, ...)	function call
-+See below |functions|.
-+
-+
-+==============================================================================
-+3. Internal variable				*internal-variables* *E121*
-+									*E461*
-+An internal variable name can be made up of letters, digits and '_'.  But it
-+cannot start with a digit.  It's also possible to use curly braces, see
-+|curly-braces-names|.
-+
-+An internal variable is created with the ":let" command |:let|.
-+An internal variable is explicitly destroyed with the ":unlet" command
-+|:unlet|.
-+Using a name that is not an internal variable or refers to a variable that has
-+been destroyed results in an error.
-+
-+There are several name spaces for variables.  Which one is to be used is
-+specified by what is prepended:
-+
-+		(nothing) In a function: local to a function; otherwise: global
-+|buffer-variable|    b:	  Local to the current buffer.
-+|window-variable|    w:	  Local to the current window.
-+|tabpage-variable|   t:	  Local to the current tab page.
-+|global-variable|    g:	  Global.
-+|local-variable|     l:	  Local to a function.
-+|script-variable|    s:	  Local to a |:source|'ed Vim script.
-+|function-argument|  a:	  Function argument (only inside a function).
-+|vim-variable|	     v:	  Global, predefined by Vim.
-+
-+The scope name by itself can be used as a |Dictionary|.  For example, to
-+delete all script-local variables: >
-+	:for k in keys(s:)
-+	:    unlet s:[k]
-+	:endfor
-+<
-+						*buffer-variable* *b:var*
-+A variable name that is preceded with "b:" is local to the current buffer.
-+Thus you can have several "b:foo" variables, one for each buffer.
-+This kind of variable is deleted when the buffer is wiped out or deleted with
-+|:bdelete|.
-+
-+One local buffer variable is predefined:
-+					*b:changedtick-variable* *changetick*
-+b:changedtick	The total number of changes to the current buffer.  It is
-+		incremented for each change.  An undo command is also a change
-+		in this case.  This can be used to perform an action only when
-+		the buffer has changed.  Example: >
-+		    :if my_changedtick != b:changedtick
-+		    :	let my_changedtick = b:changedtick
-+		    :	call My_Update()
-+		    :endif
-+<
-+						*window-variable* *w:var*
-+A variable name that is preceded with "w:" is local to the current window.  It
-+is deleted when the window is closed.
-+
-+						*tabpage-variable* *t:var*
-+A variable name that is preceded with "t:" is local to the current tab page,
-+It is deleted when the tab page is closed. {not available when compiled
-+without the |+windows| feature}
-+
-+						*global-variable* *g:var*
-+Inside functions global variables are accessed with "g:".  Omitting this will
-+access a variable local to a function.	But "g:" can also be used in any other
-+place if you like.
-+
-+						*local-variable* *l:var*
-+Inside functions local variables are accessed without prepending anything.
-+But you can also prepend "l:" if you like.  However, without prepending "l:"
-+you may run into reserved variable names.  For example "count".  By itself it
-+refers to "v:count".  Using "l:count" you can have a local variable with the
-+same name.
-+
-+						*script-variable* *s:var*
-+In a Vim script variables starting with "s:" can be used.  They cannot be
-+accessed from outside of the scripts, thus are local to the script.
-+
-+They can be used in:
-+- commands executed while the script is sourced
-+- functions defined in the script
-+- autocommands defined in the script
-+- functions and autocommands defined in functions and autocommands which were
-+  defined in the script (recursively)
-+- user defined commands defined in the script
-+Thus not in:
-+- other scripts sourced from this one
-+- mappings
-+- menus
-+- etc.
-+
-+Script variables can be used to avoid conflicts with global variable names.
-+Take this example: >
-+
-+	let s:counter = 0
-+	function MyCounter()
-+	  let s:counter = s:counter + 1
-+	  echo s:counter
-+	endfunction
-+	command Tick call MyCounter()
-+
-+You can now invoke "Tick" from any script, and the "s:counter" variable in
-+that script will not be changed, only the "s:counter" in the script where
-+"Tick" was defined is used.
-+
-+Another example that does the same: >
-+
-+	let s:counter = 0
-+	command Tick let s:counter = s:counter + 1 | echo s:counter
-+
-+When calling a function and invoking a user-defined command, the context for
-+script variables is set to the script where the function or command was
-+defined.
-+
-+The script variables are also available when a function is defined inside a
-+function that is defined in a script.  Example: >
-+
-+	let s:counter = 0
-+	function StartCounting(incr)
-+	  if a:incr
-+	    function MyCounter()
-+	      let s:counter = s:counter + 1
-+	    endfunction
-+	  else
-+	    function MyCounter()
-+	      let s:counter = s:counter - 1
-+	    endfunction
-+	  endif
-+	endfunction
-+
-+This defines the MyCounter() function either for counting up or counting down
-+when calling StartCounting().  It doesn't matter from where StartCounting() is
-+called, the s:counter variable will be accessible in MyCounter().
-+
-+When the same script is sourced again it will use the same script variables.
-+They will remain valid as long as Vim is running.  This can be used to
-+maintain a counter: >
-+
-+	if !exists("s:counter")
-+	  let s:counter = 1
-+	  echo "script executed for the first time"
-+	else
-+	  let s:counter = s:counter + 1
-+	  echo "script executed " . s:counter . " times now"
-+	endif
-+
-+Note that this means that filetype plugins don't get a different set of script
-+variables for each buffer.  Use local buffer variables instead |b:var|.
-+
-+
-+Predefined Vim variables:			*vim-variable* *v:var*
-+
-+					*v:beval_col* *beval_col-variable*
-+v:beval_col	The number of the column, over which the mouse pointer is.
-+		This is the byte index in the |v:beval_lnum| line.
-+		Only valid while evaluating the 'balloonexpr' option.
-+
-+					*v:beval_bufnr* *beval_bufnr-variable*
-+v:beval_bufnr	The number of the buffer, over which the mouse pointer is. Only
-+		valid while evaluating the 'balloonexpr' option.
-+
-+					*v:beval_lnum* *beval_lnum-variable*
-+v:beval_lnum	The number of the line, over which the mouse pointer is. Only
-+		valid while evaluating the 'balloonexpr' option.
-+
-+					*v:beval_text* *beval_text-variable*
-+v:beval_text	The text under or after the mouse pointer.  Usually a word as
-+		it is useful for debugging a C program.  'iskeyword' applies,
-+		but a dot and "->" before the position is included.  When on a
-+		']' the text before it is used, including the matching '[' and
-+		word before it.  When on a Visual area within one line the
-+		highlighted text is used.
-+		Only valid while evaluating the 'balloonexpr' option.
-+
-+					*v:beval_winnr* *beval_winnr-variable*
-+v:beval_winnr	The number of the window, over which the mouse pointer is. Only
-+		valid while evaluating the 'balloonexpr' option.
-+
-+					*v:char* *char-variable*
-+v:char		Argument for evaluating 'formatexpr' and used for the typed
-+		character when using <expr> in an abbreviation |:map-<expr>|.
-+		It is also used by the |InsertPreChar| event.
-+
-+			*v:charconvert_from* *charconvert_from-variable*
-+v:charconvert_from
-+		The name of the character encoding of a file to be converted.
-+		Only valid while evaluating the 'charconvert' option.
-+
-+			*v:charconvert_to* *charconvert_to-variable*
-+v:charconvert_to
-+		The name of the character encoding of a file after conversion.
-+		Only valid while evaluating the 'charconvert' option.
-+
-+					*v:cmdarg* *cmdarg-variable*
-+v:cmdarg	This variable is used for two purposes:
-+		1. The extra arguments given to a file read/write command.
-+		   Currently these are "++enc=" and "++ff=".  This variable is
-+		   set before an autocommand event for a file read/write
-+		   command is triggered.  There is a leading space to make it
-+		   possible to append this variable directly after the
-+		   read/write command.	Note: The "+cmd" argument isn't
-+		   included here, because it will be executed anyway.
-+		2. When printing a PostScript file with ":hardcopy" this is
-+		   the argument for the ":hardcopy" command.  This can be used
-+		   in 'printexpr'.
-+
-+					*v:cmdbang* *cmdbang-variable*
-+v:cmdbang	Set like v:cmdarg for a file read/write command.  When a "!"
-+		was used the value is 1, otherwise it is 0.  Note that this
-+		can only be used in autocommands.  For user commands |<bang>|
-+		can be used.
-+
-+					*v:count* *count-variable*
-+v:count		The count given for the last Normal mode command.  Can be used
-+		to get the count before a mapping.  Read-only.	Example: >
-+	:map _x :<C-U>echo "the count is " . v:count<CR>
-+<		Note: The <C-U> is required to remove the line range that you
-+		get when typing ':' after a count.
-+		When there are two counts, as in "3d2w", they are multiplied,
-+		just like what happens in the command, "d6w" for the example.
-+		Also used for evaluating the 'formatexpr' option.
-+		"count" also works, for backwards compatibility.
-+
-+					*v:count1* *count1-variable*
-+v:count1	Just like "v:count", but defaults to one when no count is
-+		used.
-+
-+						*v:ctype* *ctype-variable*
-+v:ctype		The current locale setting for characters of the runtime
-+		environment.  This allows Vim scripts to be aware of the
-+		current locale encoding.  Technical: it's the value of
-+		LC_CTYPE.  When not using a locale the value is "C".
-+		This variable can not be set directly, use the |:language|
-+		command.
-+		See |multi-lang|.
-+
-+					*v:dying* *dying-variable*
-+v:dying		Normally zero.	When a deadly signal is caught it's set to
-+		one.  When multiple signals are caught the number increases.
-+		Can be used in an autocommand to check if Vim didn't
-+		terminate normally. {only works on Unix}
-+		Example: >
-+	:au VimLeave * if v:dying | echo "\nAAAAaaaarrrggghhhh!!!\n" | endif
-+<		Note: if another deadly signal is caught when v:dying is one,
-+		VimLeave autocommands will not be executed.
-+
-+					*v:errmsg* *errmsg-variable*
-+v:errmsg	Last given error message.  It's allowed to set this variable.
-+		Example: >
-+	:let v:errmsg = ""
-+	:silent! next
-+	:if v:errmsg != ""
-+	:  ... handle error
-+<		"errmsg" also works, for backwards compatibility.
-+
-+					*v:exception* *exception-variable*
-+v:exception	The value of the exception most recently caught and not
-+		finished.  See also |v:throwpoint| and |throw-variables|.
-+		Example: >
-+	:try
-+	:  throw "oops"
-+	:catch /.*/
-+	:  echo "caught" v:exception
-+	:endtry
-+<		Output: "caught oops".
-+
-+					*v:fcs_reason* *fcs_reason-variable*
-+v:fcs_reason	The reason why the |FileChangedShell| event was triggered.
-+		Can be used in an autocommand to decide what to do and/or what
-+		to set v:fcs_choice to.  Possible values:
-+			deleted		file no longer exists
-+			conflict	file contents, mode or timestamp was
-+					changed and buffer is modified
-+			changed		file contents has changed
-+			mode		mode of file changed
-+			time		only file timestamp changed
-+
-+					*v:fcs_choice* *fcs_choice-variable*
-+v:fcs_choice	What should happen after a |FileChangedShell| event was
-+		triggered.  Can be used in an autocommand to tell Vim what to
-+		do with the affected buffer:
-+			reload		Reload the buffer (does not work if
-+					the file was deleted).
-+			ask		Ask the user what to do, as if there
-+					was no autocommand.  Except that when
-+					only the timestamp changed nothing
-+					will happen.
-+			<empty>		Nothing, the autocommand should do
-+					everything that needs to be done.
-+		The default is empty.  If another (invalid) value is used then
-+		Vim behaves like it is empty, there is no warning message.
-+
-+					*v:fname_in* *fname_in-variable*
-+v:fname_in	The name of the input file.  Valid while evaluating:
-+			option		used for ~
-+			'charconvert'	file to be converted
-+			'diffexpr'	original file
-+			'patchexpr'	original file
-+			'printexpr'	file to be printed
-+		And set to the swap file name for |SwapExists|.
-+
-+					*v:fname_out* *fname_out-variable*
-+v:fname_out	The name of the output file.  Only valid while
-+		evaluating:
-+			option		used for ~
-+			'charconvert'	resulting converted file (*)
-+			'diffexpr'	output of diff
-+			'patchexpr'	resulting patched file
-+		(*) When doing conversion for a write command (e.g., ":w
-+		file") it will be equal to v:fname_in.	When doing conversion
-+		for a read command (e.g., ":e file") it will be a temporary
-+		file and different from v:fname_in.
-+
-+					*v:fname_new* *fname_new-variable*
-+v:fname_new	The name of the new version of the file.  Only valid while
-+		evaluating 'diffexpr'.
-+
-+					*v:fname_diff* *fname_diff-variable*
-+v:fname_diff	The name of the diff (patch) file.  Only valid while
-+		evaluating 'patchexpr'.
-+
-+					*v:folddashes* *folddashes-variable*
-+v:folddashes	Used for 'foldtext': dashes representing foldlevel of a closed
-+		fold.
-+		Read-only in the |sandbox|. |fold-foldtext|
-+
-+					*v:foldlevel* *foldlevel-variable*
-+v:foldlevel	Used for 'foldtext': foldlevel of closed fold.
-+		Read-only in the |sandbox|. |fold-foldtext|
-+
-+					*v:foldend* *foldend-variable*
-+v:foldend	Used for 'foldtext': last line of closed fold.
-+		Read-only in the |sandbox|. |fold-foldtext|
-+
-+					*v:foldstart* *foldstart-variable*
-+v:foldstart	Used for 'foldtext': first line of closed fold.
-+		Read-only in the |sandbox|. |fold-foldtext|
-+
-+					*v:insertmode* *insertmode-variable*
-+v:insertmode	Used for the |InsertEnter| and |InsertChange| autocommand
-+		events.  Values:
-+			i	Insert mode
-+			r	Replace mode
-+			v	Virtual Replace mode
-+
-+						*v:key* *key-variable*
-+v:key		Key of the current item of a |Dictionary|.  Only valid while
-+		evaluating the expression used with |map()| and |filter()|.
-+		Read-only.
-+
-+						*v:lang* *lang-variable*
-+v:lang		The current locale setting for messages of the runtime
-+		environment.  This allows Vim scripts to be aware of the
-+		current language.  Technical: it's the value of LC_MESSAGES.
-+		The value is system dependent.
-+		This variable can not be set directly, use the |:language|
-+		command.
-+		It can be different from |v:ctype| when messages are desired
-+		in a different language than what is used for character
-+		encoding.  See |multi-lang|.
-+
-+						*v:lc_time* *lc_time-variable*
-+v:lc_time	The current locale setting for time messages of the runtime
-+		environment.  This allows Vim scripts to be aware of the
-+		current language.  Technical: it's the value of LC_TIME.
-+		This variable can not be set directly, use the |:language|
-+		command.  See |multi-lang|.
-+
-+						*v:lnum* *lnum-variable*
-+v:lnum		Line number for the 'foldexpr' |fold-expr|, 'formatexpr' and
-+		'indentexpr' expressions, tab page number for 'guitablabel'
-+		and 'guitabtooltip'.  Only valid while one of these
-+		expressions is being evaluated.  Read-only when in the
-+		|sandbox|.
-+
-+					*v:mouse_win* *mouse_win-variable*
-+v:mouse_win	Window number for a mouse click obtained with |getchar()|.
-+		First window has number 1, like with |winnr()|.  The value is
-+		zero when there was no mouse button click.
-+
-+					*v:mouse_lnum* *mouse_lnum-variable*
-+v:mouse_lnum	Line number for a mouse click obtained with |getchar()|.
-+		This is the text line number, not the screen line number.  The
-+		value is zero when there was no mouse button click.
-+
-+					*v:mouse_col* *mouse_col-variable*
-+v:mouse_col	Column number for a mouse click obtained with |getchar()|.
-+		This is the screen column number, like with |virtcol()|.  The
-+		value is zero when there was no mouse button click.
-+
-+					*v:oldfiles* *oldfiles-variable*
-+v:oldfiles	List of file names that is loaded from the |viminfo| file on
-+		startup.  These are the files that Vim remembers marks for.
-+		The length of the List is limited by the ' argument of the
-+		'viminfo' option (default is 100).
-+		Also see |:oldfiles| and |c_#<|.
-+		The List can be modified, but this has no effect on what is
-+		stored in the |viminfo| file later.  If you use values other
-+		than String this will cause trouble.
-+		{only when compiled with the |+viminfo| feature}
-+
-+					*v:operator* *operator-variable*
-+v:operator	The last operator given in Normal mode.  This is a single
-+		character except for commands starting with <g> or <z>,
-+		in which case it is two characters.  Best used alongside
-+		|v:prevcount| and |v:register|.  Useful if you want to cancel
-+		Operator-pending mode and then use the operator, e.g.: >
-+			:omap O <Esc>:call MyMotion(v:operator)<CR>
-+<		The value remains set until another operator is entered, thus
-+		don't expect it to be empty.
-+		v:operator is not set for |:delete|, |:yank| or other Ex
-+		commands.
-+		Read-only.
-+
-+					*v:prevcount* *prevcount-variable*
-+v:prevcount	The count given for the last but one Normal mode command.
-+		This is the v:count value of the previous command.  Useful if
-+		you want to cancel Visual or Operator-pending mode and then
-+		use the count, e.g.: >
-+			:vmap % <Esc>:call MyFilter(v:prevcount)<CR>
-+<		Read-only.
-+
-+					*v:profiling* *profiling-variable*
-+v:profiling	Normally zero.	Set to one after using ":profile start".
-+		See |profiling|.
-+
-+					*v:progname* *progname-variable*
-+v:progname	Contains the name (with path removed) with which Vim was
-+		invoked.  Allows you to do special initialisations for "view",
-+		"evim" etc., or any other name you might symlink to Vim.
-+		Read-only.
-+
-+					*v:register* *register-variable*
-+v:register	The name of the register supplied to the last normal mode
-+		command.  Empty if none were supplied. |getreg()| |setreg()|
-+
-+					*v:scrollstart* *scrollstart-variable*
-+v:scrollstart	String describing the script or function that caused the
-+		screen to scroll up.  It's only set when it is empty, thus the
-+		first reason is remembered.  It is set to "Unknown" for a
-+		typed command.
-+		This can be used to find out why your script causes the
-+		hit-enter prompt.
-+
-+					*v:servername* *servername-variable*
-+v:servername	The resulting registered |x11-clientserver| name if any.
-+		Read-only.
-+
-+		
-+v:searchforward			*v:searchforward* *searchforward-variable*
-+		Search direction:  1 after a forward search, 0 after a
-+		backward search.  It is reset to forward when directly setting
-+		the last search pattern, see |quote/|.
-+		Note that the value is restored when returning from a
-+		function. |function-search-undo|.
-+		Read-write.
-+
-+					*v:shell_error* *shell_error-variable*
-+v:shell_error	Result of the last shell command.  When non-zero, the last
-+		shell command had an error.  When zero, there was no problem.
-+		This only works when the shell returns the error code to Vim.
-+		The value -1 is often used when the command could not be
-+		executed.  Read-only.
-+		Example: >
-+	:!mv foo bar
-+	:if v:shell_error
-+	:  echo 'could not rename "foo" to "bar"!'
-+	:endif
-+<		"shell_error" also works, for backwards compatibility.
-+
-+					*v:statusmsg* *statusmsg-variable*
-+v:statusmsg	Last given status message.  It's allowed to set this variable.
-+
-+					*v:swapname* *swapname-variable*
-+v:swapname	Only valid when executing |SwapExists| autocommands: Name of
-+		the swap file found.  Read-only.
-+
-+					*v:swapchoice* *swapchoice-variable*
-+v:swapchoice	|SwapExists| autocommands can set this to the selected choice
-+		for handling an existing swap file:
-+			'o'	Open read-only
-+			'e'	Edit anyway
-+			'r'	Recover
-+			'd'	Delete swapfile
-+			'q'	Quit
-+			'a'	Abort
-+		The value should be a single-character string.	An empty value
-+		results in the user being asked, as would happen when there is
-+		no SwapExists autocommand.  The default is empty.
-+
-+					*v:swapcommand* *swapcommand-variable*
-+v:swapcommand	Normal mode command to be executed after a file has been
-+		opened.  Can be used for a |SwapExists| autocommand to have
-+		another Vim open the file and jump to the right place.	For
-+		example, when jumping to a tag the value is ":tag tagname\r".
-+		For ":edit +cmd file" the value is ":cmd\r".
-+
-+				*v:termresponse* *termresponse-variable*
-+v:termresponse	The escape sequence returned by the terminal for the |t_RV|
-+		termcap entry.	It is set when Vim receives an escape sequence
-+		that starts with ESC [ or CSI and ends in a 'c', with only
-+		digits, ';' and '.' in between.
-+		When this option is set, the TermResponse autocommand event is
-+		fired, so that you can react to the response from the
-+		terminal.
-+		The response from a new xterm is: "<Esc>[ Pp ; Pv ; Pc c".  Pp
-+		is the terminal type: 0 for vt100 and 1 for vt220.  Pv is the
-+		patch level (since this was introduced in patch 95, it's
-+		always 95 or bigger).  Pc is always zero.
-+		{only when compiled with |+termresponse| feature}
-+
-+				*v:this_session* *this_session-variable*
-+v:this_session	Full filename of the last loaded or saved session file.  See
-+		|:mksession|.  It is allowed to set this variable.  When no
-+		session file has been saved, this variable is empty.
-+		"this_session" also works, for backwards compatibility.
-+
-+					*v:throwpoint* *throwpoint-variable*
-+v:throwpoint	The point where the exception most recently caught and not
-+		finished was thrown.  Not set when commands are typed.	See
-+		also |v:exception| and |throw-variables|.
-+		Example: >
-+	:try
-+	:  throw "oops"
-+	:catch /.*/
-+	:  echo "Exception from" v:throwpoint
-+	:endtry
-+<		Output: "Exception from test.vim, line 2"
-+
-+						*v:val* *val-variable*
-+v:val		Value of the current item of a |List| or |Dictionary|.	Only
-+		valid while evaluating the expression used with |map()| and
-+		|filter()|.  Read-only.
-+
-+					*v:version* *version-variable*
-+v:version	Version number of Vim: Major version number times 100 plus
-+		minor version number.  Version 5.0 is 500.  Version 5.1 (5.01)
-+		is 501.  Read-only.  "version" also works, for backwards
-+		compatibility.
-+		Use |has()| to check if a certain patch was included, e.g.: >
-+			if has("patch123")
-+<		Note that patch numbers are specific to the version, thus both
-+		version 5.0 and 5.1 may have a patch 123, but these are
-+		completely different.
-+
-+					*v:warningmsg* *warningmsg-variable*
-+v:warningmsg	Last given warning message.  It's allowed to set this variable.
-+
-+					*v:windowid* *windowid-variable*
-+v:windowid	When any X11 based GUI is running or when running in a
-+		terminal and Vim connects to the X server (|-X|) this will be
-+		set to the window ID.
-+		When an MS-Windows GUI is running this will be set to the
-+		window handle.
-+		Otherwise the value is zero.
-+		Note: for windows inside Vim use |winnr()|.
-+
-+==============================================================================
-+4. Builtin Functions					*functions*
-+
-+See |function-list| for a list grouped by what the function is used for.
-+
-+(Use CTRL-] on the function name to jump to the full explanation.)
-+
-+USAGE				RESULT	DESCRIPTION	~
-+
-+abs( {expr})			Float or Number  absolute value of {expr}
-+acos( {expr})			Float	arc cosine of {expr}
-+add( {list}, {item})		List	append {item} to |List| {list}
-+append( {lnum}, {string})	Number	append {string} below line {lnum}
-+append( {lnum}, {list})		Number	append lines {list} below line {lnum}
-+argc()				Number	number of files in the argument list
-+argidx()			Number	current index in the argument list
-+argv( {nr})			String	{nr} entry of the argument list
-+argv( )				List	the argument list
-+asin( {expr})			Float	arc sine of {expr}
-+atan( {expr})			Float	arc tangent of {expr}
-+atan2( {expr}, {expr})		Float   arc tangent of {expr1} / {expr2}
-+browse( {save}, {title}, {initdir}, {default})
-+				String	put up a file requester
-+browsedir( {title}, {initdir})	String	put up a directory requester
-+bufexists( {expr})		Number	TRUE if buffer {expr} exists
-+buflisted( {expr})		Number	TRUE if buffer {expr} is listed
-+bufloaded( {expr})		Number	TRUE if buffer {expr} is loaded
-+bufname( {expr})		String	Name of the buffer {expr}
-+bufnr( {expr})			Number	Number of the buffer {expr}
-+bufwinnr( {expr})		Number	window number of buffer {expr}
-+byte2line( {byte})		Number	line number at byte count {byte}
-+byteidx( {expr}, {nr})		Number	byte index of {nr}'th char in {expr}
-+call( {func}, {arglist} [, {dict}])
-+				any	call {func} with arguments {arglist}
-+ceil( {expr})			Float	round {expr} up
-+changenr()			Number	current change number
-+char2nr( {expr})		Number	ASCII value of first char in {expr}
-+cindent( {lnum})		Number	C indent for line {lnum}
-+clearmatches()			none	clear all matches
-+col( {expr})			Number	column nr of cursor or mark
-+complete( {startcol}, {matches}) none	set Insert mode completion
-+complete_add( {expr})		Number	add completion match
-+complete_check()		Number	check for key typed during completion
-+confirm( {msg} [, {choices} [, {default} [, {type}]]])
-+				Number	number of choice picked by user
-+copy( {expr})			any	make a shallow copy of {expr}
-+cos( {expr})			Float	cosine of {expr}
-+cosh( {expr})			Float	hyperbolic cosine of {expr}
-+count( {list}, {expr} [, {start} [, {ic}]])
-+				Number	 count how many {expr} are in {list}
-+cscope_connection( [{num} , {dbpath} [, {prepend}]])
-+				Number	checks existence of cscope connection
-+cursor( {lnum}, {col} [, {coladd}])
-+				Number	move cursor to {lnum}, {col}, {coladd}
-+cursor( {list})			Number	move cursor to position in {list}
-+deepcopy( {expr})		any	make a full copy of {expr}
-+delete( {fname})		Number	delete file {fname}
-+did_filetype()			Number	TRUE if FileType autocommand event used
-+diff_filler( {lnum})		Number	diff filler lines about {lnum}
-+diff_hlID( {lnum}, {col})	Number	diff highlighting at {lnum}/{col}
-+empty( {expr})			Number	TRUE if {expr} is empty
-+escape( {string}, {chars})	String	escape {chars} in {string} with '\'
-+eval( {string})			any	evaluate {string} into its value
-+eventhandler( )			Number	TRUE if inside an event handler
-+executable( {expr})		Number	1 if executable {expr} exists
-+exists( {expr})			Number	TRUE if {expr} exists
-+extend( {expr1}, {expr2} [, {expr3}])
-+				List/Dict insert items of {expr2} into {expr1}
-+exp( {expr})			Float	exponential of {expr}
-+expand( {expr} [, {flag}])	String	expand special keywords in {expr}
-+feedkeys( {string} [, {mode}])	Number	add key sequence to typeahead buffer
-+filereadable( {file})		Number	TRUE if {file} is a readable file
-+filewritable( {file})		Number	TRUE if {file} is a writable file
-+filter( {expr}, {string})	List/Dict  remove items from {expr} where
-+					{string} is 0
-+finddir( {name}[, {path}[, {count}]])
-+				String	find directory {name} in {path}
-+findfile( {name}[, {path}[, {count}]])
-+				String	find file {name} in {path}
-+float2nr( {expr})		Number	convert Float {expr} to a Number
-+floor( {expr})			Float	round {expr} down
-+fmod( {expr1}, {expr2})		Float	remainder of {expr1} / {expr2}
-+fnameescape( {fname})		String	escape special characters in {fname}
-+fnamemodify( {fname}, {mods})	String	modify file name
-+foldclosed( {lnum})		Number	first line of fold at {lnum} if closed
-+foldclosedend( {lnum})		Number	last line of fold at {lnum} if closed
-+foldlevel( {lnum})		Number	fold level at {lnum}
-+foldtext( )			String	line displayed for closed fold
-+foldtextresult( {lnum})		String	text for closed fold at {lnum}
-+foreground( )			Number	bring the Vim window to the foreground
-+function( {name})		Funcref reference to function {name}
-+garbagecollect( [at_exit])	none	free memory, breaking cyclic references
-+get( {list}, {idx} [, {def}])	any	get item {idx} from {list} or {def}
-+get( {dict}, {key} [, {def}])	any	get item {key} from {dict} or {def}
-+getbufline( {expr}, {lnum} [, {end}])
-+				List	lines {lnum} to {end} of buffer {expr}
-+getbufvar( {expr}, {varname})	any	variable {varname} in buffer {expr}
-+getchar( [expr])		Number	get one character from the user
-+getcharmod( )			Number	modifiers for the last typed character
-+getcmdline()			String	return the current command-line
-+getcmdpos()			Number	return cursor position in command-line
-+getcmdtype()			String	return the current command-line type
-+getcwd()			String	the current working directory
-+getfperm( {fname})		String	file permissions of file {fname}
-+getfsize( {fname})		Number	size in bytes of file {fname}
-+getfontname( [{name}])		String	name of font being used
-+getftime( {fname})		Number	last modification time of file
-+getftype( {fname})		String	description of type of file {fname}
-+getline( {lnum})		String	line {lnum} of current buffer
-+getline( {lnum}, {end})		List	lines {lnum} to {end} of current buffer
-+getloclist( {nr})		List	list of location list items
-+getmatches()			List	list of current matches
-+getpid()			Number	process ID of Vim
-+getpos( {expr})			List	position of cursor, mark, etc.
-+getqflist()			List	list of quickfix items
-+getreg( [{regname} [, 1]])	String	contents of register
-+getregtype( [{regname}])	String	type of register
-+gettabvar( {nr}, {varname})	any	variable {varname} in tab {nr}
-+gettabwinvar( {tabnr}, {winnr}, {name})
-+				any	{name} in {winnr} in tab page {tabnr}
-+getwinposx()			Number	X coord in pixels of GUI Vim window
-+getwinposy()			Number	Y coord in pixels of GUI Vim window
-+getwinvar( {nr}, {varname})	any	variable {varname} in window {nr}
-+glob( {expr} [, {flag}])	String	expand file wildcards in {expr}
-+globpath( {path}, {expr} [, {flag}])
-+				String	do glob({expr}) for all dirs in {path}
-+has( {feature})			Number	TRUE if feature {feature} supported
-+has_key( {dict}, {key})		Number	TRUE if {dict} has entry {key}
-+haslocaldir()			Number	TRUE if current window executed |:lcd|
-+hasmapto( {what} [, {mode} [, {abbr}]])
-+				Number	TRUE if mapping to {what} exists
-+histadd( {history},{item})	String	add an item to a history
-+histdel( {history} [, {item}])	String	remove an item from a history
-+histget( {history} [, {index}])	String	get the item {index} from a history
-+histnr( {history})		Number	highest index of a history
-+hlexists( {name})		Number	TRUE if highlight group {name} exists
-+hlID( {name})			Number	syntax ID of highlight group {name}
-+hostname()			String	name of the machine Vim is running on
-+iconv( {expr}, {from}, {to})	String	convert encoding of {expr}
-+indent( {lnum})			Number	indent of line {lnum}
-+index( {list}, {expr} [, {start} [, {ic}]])
-+				Number	index in {list} where {expr} appears
-+input( {prompt} [, {text} [, {completion}]])
-+				String	get input from the user
-+inputdialog( {p} [, {t} [, {c}]]) String  like input() but in a GUI dialog
-+inputlist( {textlist})		Number	let the user pick from a choice list
-+inputrestore()			Number	restore typeahead
-+inputsave()			Number	save and clear typeahead
-+inputsecret( {prompt} [, {text}]) String  like input() but hiding the text
-+insert( {list}, {item} [, {idx}]) List	insert {item} in {list} [before {idx}]
-+isdirectory( {directory})	Number	TRUE if {directory} is a directory
-+islocked( {expr})		Number	TRUE if {expr} is locked
-+items( {dict})			List	key-value pairs in {dict}
-+join( {list} [, {sep}])		String	join {list} items into one String
-+keys( {dict})			List	keys in {dict}
-+len( {expr})			Number	the length of {expr}
-+libcall( {lib}, {func}, {arg})	String	call {func} in library {lib} with {arg}
-+libcallnr( {lib}, {func}, {arg})  Number  idem, but return a Number
-+line( {expr})			Number	line nr of cursor, last line or mark
-+line2byte( {lnum})		Number	byte count of line {lnum}
-+lispindent( {lnum})		Number	Lisp indent for line {lnum}
-+localtime()			Number	current time
-+log( {expr})			Float	natural logarithm (base e) of {expr}
-+log10( {expr})			Float	logarithm of Float {expr} to base 10
-+map( {expr}, {string})		List/Dict  change each item in {expr} to {expr}
-+maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
-+				String	rhs of mapping {name} in mode {mode}
-+mapcheck( {name}[, {mode} [, {abbr}]])
-+				String	check for mappings matching {name}
-+match( {expr}, {pat}[, {start}[, {count}]])
-+				Number	position where {pat} matches in {expr}
-+matchadd( {group}, {pattern}[, {priority}[, {id}]])
-+				Number	highlight {pattern} with {group}
-+matcharg( {nr})			List	arguments of |:match|
-+matchdelete( {id})		Number	delete match identified by {id}
-+matchend( {expr}, {pat}[, {start}[, {count}]])
-+				Number	position where {pat} ends in {expr}
-+matchlist( {expr}, {pat}[, {start}[, {count}]])
-+				List	match and submatches of {pat} in {expr}
-+matchstr( {expr}, {pat}[, {start}[, {count}]])
-+				String	{count}'th match of {pat} in {expr}
-+max( {list})			Number	maximum value of items in {list}
-+min( {list})			Number	minimum value of items in {list}
-+mkdir( {name} [, {path} [, {prot}]])
-+				Number	create directory {name}
-+mode( [expr])			String	current editing mode
-+mzeval( {expr})			any	evaluate |MzScheme| expression
-+nextnonblank( {lnum})		Number	line nr of non-blank line >= {lnum}
-+nr2char( {expr})		String	single char with ASCII value {expr}
-+pathshorten( {expr})		String	shorten directory names in a path
-+pow( {x}, {y})			Float	{x} to the power of {y}
-+prevnonblank( {lnum})		Number	line nr of non-blank line <= {lnum}
-+printf( {fmt}, {expr1}...)	String	format text
-+pumvisible()			Number	whether popup menu is visible
-+range( {expr} [, {max} [, {stride}]])
-+				List	items from {expr} to {max}
-+readfile( {fname} [, {binary} [, {max}]])
-+				List	get list of lines from file {fname}
-+reltime( [{start} [, {end}]])	List	get time value
-+reltimestr( {time})		String	turn time value into a String
-+remote_expr( {server}, {string} [, {idvar}])
-+				String	send expression
-+remote_foreground( {server})	Number	bring Vim server to the foreground
-+remote_peek( {serverid} [, {retvar}])
-+				Number	check for reply string
-+remote_read( {serverid})	String	read reply string
-+remote_send( {server}, {string} [, {idvar}])
-+				String	send key sequence
-+remove( {list}, {idx} [, {end}])  any	remove items {idx}-{end} from {list}
-+remove( {dict}, {key})		any	remove entry {key} from {dict}
-+rename( {from}, {to})		Number	rename (move) file from {from} to {to}
-+repeat( {expr}, {count})	String	repeat {expr} {count} times
-+resolve( {filename})		String	get filename a shortcut points to
-+reverse( {list})		List	reverse {list} in-place
-+round( {expr})			Float	round off {expr}
-+search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
-+				Number	search for {pattern}
-+searchdecl( {name} [, {global} [, {thisblock}]])
-+				Number	search for variable declaration
-+searchpair( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
-+				Number	search for other end of start/end pair
-+searchpairpos( {start}, {middle}, {end} [, {flags} [, {skip} [...]]])
-+				List	search for other end of start/end pair
-+searchpos( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
-+				List	search for {pattern}
-+server2client( {clientid}, {string})
-+				Number	send reply string
-+serverlist()			String	get a list of available servers
-+setbufvar( {expr}, {varname}, {val})	set {varname} in buffer {expr} to {val}
-+setcmdpos( {pos})		Number	set cursor position in command-line
-+setline( {lnum}, {line})	Number	set line {lnum} to {line}
-+setloclist( {nr}, {list}[, {action}])
-+				Number	modify location list using {list}
-+setmatches( {list})		Number	restore a list of matches
-+setpos( {expr}, {list})		Number	set the {expr} position to {list}
-+setqflist( {list}[, {action}])	Number	modify quickfix list using {list}
-+setreg( {n}, {v}[, {opt}])	Number	set register to value and type
-+settabvar( {nr}, {varname}, {val})	set {varname} in tab page {nr} to {val}
-+settabwinvar( {tabnr}, {winnr}, {varname}, {val})    set {varname} in window
-+					{winnr} in tab page {tabnr} to {val}
-+setwinvar( {nr}, {varname}, {val})	set {varname} in window {nr} to {val}
-+shellescape( {string} [, {special}])
-+				String	escape {string} for use as shell
-+					command argument
-+simplify( {filename})		String	simplify filename as much as possible
-+sin( {expr})			Float	sine of {expr}
-+sinh( {expr})			Float	hyperbolic sine of {expr}
-+sort( {list} [, {func}])	List	sort {list}, using {func} to compare
-+soundfold( {word})		String	sound-fold {word}
-+spellbadword()			String	badly spelled word at cursor
-+spellsuggest( {word} [, {max} [, {capital}]])
-+				List	spelling suggestions
-+split( {expr} [, {pat} [, {keepempty}]])
-+				List	make |List| from {pat} separated {expr}
-+sqrt( {expr}			Float	squar root of {expr}
-+str2float( {expr})		Float	convert String to Float
-+str2nr( {expr} [, {base}])	Number	convert String to Number
-+strchars( {expr})		Number	character length of the String {expr}
-+strdisplaywidth( {expr} [, {col}]) Number display length of the String {expr}
-+strftime( {format}[, {time}])	String	time in specified format
-+stridx( {haystack}, {needle}[, {start}])
-+				Number	index of {needle} in {haystack}
-+string( {expr})			String	String representation of {expr} value
-+strlen( {expr})			Number	length of the String {expr}
-+strpart( {src}, {start}[, {len}])
-+				String	{len} characters of {src} at {start}
-+strridx( {haystack}, {needle} [, {start}])
-+				Number	last index of {needle} in {haystack}
-+strtrans( {expr})		String	translate string to make it printable
-+strwidth( {expr})		Number	display cell length of the String {expr}
-+submatch( {nr})			String	specific match in ":substitute"
-+substitute( {expr}, {pat}, {sub}, {flags})
-+				String	all {pat} in {expr} replaced with {sub}
-+synID( {lnum}, {col}, {trans})	Number	syntax ID at {lnum} and {col}
-+synIDattr( {synID}, {what} [, {mode}])
-+				String	attribute {what} of syntax ID {synID}
-+synIDtrans( {synID})		Number	translated syntax ID of {synID}
-+synstack( {lnum}, {col})	List	stack of syntax IDs at {lnum} and {col}
-+system( {expr} [, {input}])	String	output of shell command/filter {expr}
-+tabpagebuflist( [{arg}])	List	list of buffer numbers in tab page
-+tabpagenr( [{arg}])		Number	number of current or last tab page
-+tabpagewinnr( {tabarg}[, {arg}])
-+				Number	number of current window in tab page
-+taglist( {expr})		List	list of tags matching {expr}
-+tagfiles()			List	tags files used
-+tempname()			String	name for a temporary file
-+tan( {expr})			Float	tangent of {expr}
-+tanh( {expr})			Float	hyperbolic tangent of {expr}
-+tolower( {expr})		String	the String {expr} switched to lowercase
-+toupper( {expr})		String	the String {expr} switched to uppercase
-+tr( {src}, {fromstr}, {tostr})	String	translate chars of {src} in {fromstr}
-+					to chars in {tostr}
-+trunc( {expr}			Float	truncate Float {expr}
-+type( {name})			Number	type of variable {name}
-+undofile( {name})		String	undo file name for {name}
-+undotree()			List	undo file tree
-+values( {dict})			List	values in {dict}
-+virtcol( {expr})		Number	screen column of cursor or mark
-+visualmode( [expr])		String	last visual mode used
-+winbufnr( {nr})			Number	buffer number of window {nr}
-+wincol()			Number	window column of the cursor
-+winheight( {nr})		Number	height of window {nr}
-+winline()			Number	window line of the cursor
-+winnr( [{expr}])		Number	number of current window
-+winrestcmd()			String	returns command to restore window sizes
-+winrestview( {dict})		none	restore view of current window
-+winsaveview()			Dict	save view of current window
-+winwidth( {nr})			Number	width of window {nr}
-+writefile( {list}, {fname} [, {binary}])
-+				Number	write list of lines to file {fname}
-+
-+abs({expr})							*abs()*
-+		Return the absolute value of {expr}.  When {expr} evaluates to
-+		a |Float| abs() returns a |Float|.  When {expr} can be
-+		converted to a |Number| abs() returns a |Number|.  Otherwise
-+		abs() gives an error message and returns -1.
-+		Examples: >
-+			echo abs(1.456)
-+<			1.456  >
-+			echo abs(-5.456)
-+<			5.456  >
-+			echo abs(-4)
-+<			4
-+		{only available when compiled with the |+float| feature}
-+
-+
-+acos({expr})							*acos()*
-+		Return the arc cosine of {expr} measured in radians, as a
-+		|Float| in the range of [0, pi].
-+		{expr} must evaluate to a |Float| or a |Number| in the range
-+		[-1, 1].
-+		Examples: >
-+			:echo acos(0)
-+<			1.570796 >
-+			:echo acos(-0.5)
-+<			2.094395
-+		{only available when compiled with the |+float| feature}
-+
-+
-+add({list}, {expr})					*add()*
-+		Append the item {expr} to |List| {list}.  Returns the
-+		resulting |List|.  Examples: >
-+			:let alist = add([1, 2, 3], item)
-+			:call add(mylist, "woodstock")
-+<		Note that when {expr} is a |List| it is appended as a single
-+		item.  Use |extend()| to concatenate |Lists|.
-+		Use |insert()| to add an item at another position.
-+
-+
-+append({lnum}, {expr})					*append()*
-+		When {expr} is a |List|: Append each item of the |List| as a
-+		text line below line {lnum} in the current buffer.
-+		Otherwise append {expr} as one text line below line {lnum} in
-+		the current buffer.
-+		{lnum} can be zero to insert a line before the first one.
-+		Returns 1 for failure ({lnum} out of range or out of memory),
-+		0 for success.	Example: >
-+			:let failed = append(line('$'), "# THE END")
-+			:let failed = append(0, ["Chapter 1", "the beginning"])
-+<
-+							*argc()*
-+argc()		The result is the number of files in the argument list of the
-+		current window.  See |arglist|.
-+
-+							*argidx()*
-+argidx()	The result is the current index in the argument list.  0 is
-+		the first file.  argc() - 1 is the last one.  See |arglist|.
-+
-+							*argv()*
-+argv([{nr}])	The result is the {nr}th file in the argument list of the
-+		current window.  See |arglist|.  "argv(0)" is the first one.
-+		Example: >
-+	:let i = 0
-+	:while i < argc()
-+	:  let f = escape(fnameescape(argv(i)), '.')
-+	:  exe 'amenu Arg.' . f . ' :e ' . f . '<CR>'
-+	:  let i = i + 1
-+	:endwhile
-+<		Without the {nr} argument a |List| with the whole |arglist| is
-+		returned.
-+
-+asin({expr})						*asin()*
-+		Return the arc sine of {expr} measured in radians, as a |Float|
-+		in the range of [-pi/2, pi/2].
-+		{expr} must evaluate to a |Float| or a |Number| in the range
-+		[-1, 1].
-+		Examples: >
-+			:echo asin(0.8)
-+<			0.927295 >
-+			:echo asin(-0.5)
-+<			-0.523599
-+		{only available when compiled with the |+float| feature}
-+
-+
-+atan({expr})						*atan()*
-+		Return the principal value of the arc tangent of {expr}, in
-+		the range [-pi/2, +pi/2] radians, as a |Float|.
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo atan(100)
-+<			1.560797 >
-+			:echo atan(-4.01)
-+<			-1.326405
-+		{only available when compiled with the |+float| feature}
-+
-+
-+atan2({expr1}, {expr2})					*atan2()*
-+		Return the arc tangent of {expr1} / {expr2}, measured in
-+		radians, as a |Float| in the range [-pi, pi].
-+		{expr1} and {expr2} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo atan2(-1, 1)
-+<			-0.785398 >
-+			:echo atan2(1, -1)
-+<			2.356194
-+		{only available when compiled with the |+float| feature}
-+
-+
-+							*browse()*
-+browse({save}, {title}, {initdir}, {default})
-+		Put up a file requester.  This only works when "has("browse")"
-+		returns non-zero (only in some GUI versions).
-+		The input fields are:
-+		    {save}	when non-zero, select file to write
-+		    {title}	title for the requester
-+		    {initdir}	directory to start browsing in
-+		    {default}	default file name
-+		When the "Cancel" button is hit, something went wrong, or
-+		browsing is not possible, an empty string is returned.
-+
-+							*browsedir()*
-+browsedir({title}, {initdir})
-+		Put up a directory requester.  This only works when
-+		"has("browse")" returns non-zero (only in some GUI versions).
-+		On systems where a directory browser is not supported a file
-+		browser is used.  In that case: select a file in the directory
-+		to be used.
-+		The input fields are:
-+		    {title}	title for the requester
-+		    {initdir}	directory to start browsing in
-+		When the "Cancel" button is hit, something went wrong, or
-+		browsing is not possible, an empty string is returned.
-+
-+bufexists({expr})					*bufexists()*
-+		The result is a Number, which is non-zero if a buffer called
-+		{expr} exists.
-+		If the {expr} argument is a number, buffer numbers are used.
-+		If the {expr} argument is a string it must match a buffer name
-+		exactly.  The name can be:
-+		- Relative to the current directory.
-+		- A full path.
-+		- The name of a buffer with 'buftype' set to "nofile".
-+		- A URL name.
-+		Unlisted buffers will be found.
-+		Note that help files are listed by their short name in the
-+		output of |:buffers|, but bufexists() requires using their
-+		long name to be able to find them.
-+		bufexists() may report a buffer exists, but to use the name
-+		with a |:buffer| command you may need to use |expand()|.  Esp
-+		for MS-Windows 8.3 names in the form "c:\DOCUME~1"
-+		Use "bufexists(0)" to test for the existence of an alternate
-+		file name.
-+							*buffer_exists()*
-+		Obsolete name: buffer_exists().
-+
-+buflisted({expr})					*buflisted()*
-+		The result is a Number, which is non-zero if a buffer called
-+		{expr} exists and is listed (has the 'buflisted' option set).
-+		The {expr} argument is used like with |bufexists()|.
-+
-+bufloaded({expr})					*bufloaded()*
-+		The result is a Number, which is non-zero if a buffer called
-+		{expr} exists and is loaded (shown in a window or hidden).
-+		The {expr} argument is used like with |bufexists()|.
-+
-+bufname({expr})						*bufname()*
-+		The result is the name of a buffer, as it is displayed by the
-+		":ls" command.
-+		If {expr} is a Number, that buffer number's name is given.
-+		Number zero is the alternate buffer for the current window.
-+		If {expr} is a String, it is used as a |file-pattern| to match
-+		with the buffer names.	This is always done like 'magic' is
-+		set and 'cpoptions' is empty.  When there is more than one
-+		match an empty string is returned.
-+		"" or "%" can be used for the current buffer, "#" for the
-+		alternate buffer.
-+		A full match is preferred, otherwise a match at the start, end
-+		or middle of the buffer name is accepted.  If you only want a
-+		full match then put "^" at the start and "$" at the end of the
-+		pattern.
-+		Listed buffers are found first.  If there is a single match
-+		with a listed buffer, that one is returned.  Next unlisted
-+		buffers are searched for.
-+		If the {expr} is a String, but you want to use it as a buffer
-+		number, force it to be a Number by adding zero to it: >
-+			:echo bufname("3" + 0)
-+<		If the buffer doesn't exist, or doesn't have a name, an empty
-+		string is returned. >
-+	bufname("#")		alternate buffer name
-+	bufname(3)		name of buffer 3
-+	bufname("%")		name of current buffer
-+	bufname("file2")	name of buffer where "file2" matches.
-+<							*buffer_name()*
-+		Obsolete name: buffer_name().
-+
-+							*bufnr()*
-+bufnr({expr} [, {create}])
-+		The result is the number of a buffer, as it is displayed by
-+		the ":ls" command.  For the use of {expr}, see |bufname()|
-+		above.
-+		If the buffer doesn't exist, -1 is returned.  Or, if the
-+		{create} argument is present and not zero, a new, unlisted,
-+		buffer is created and its number is returned.
-+		bufnr("$") is the last buffer: >
-+	:let last_buffer = bufnr("$")
-+<		The result is a Number, which is the highest buffer number
-+		of existing buffers.  Note that not all buffers with a smaller
-+		number necessarily exist, because ":bwipeout" may have removed
-+		them.  Use bufexists() to test for the existence of a buffer.
-+							*buffer_number()*
-+		Obsolete name: buffer_number().
-+							*last_buffer_nr()*
-+		Obsolete name for bufnr("$"): last_buffer_nr().
-+
-+bufwinnr({expr})					*bufwinnr()*
-+		The result is a Number, which is the number of the first
-+		window associated with buffer {expr}.  For the use of {expr},
-+		see |bufname()| above.	If buffer {expr} doesn't exist or
-+		there is no such window, -1 is returned.  Example: >
-+
-+	echo "A window containing buffer 1 is " . (bufwinnr(1))
-+
-+<		The number can be used with |CTRL-W_w| and ":wincmd w"
-+		|:wincmd|.
-+		Only deals with the current tab page.
-+
-+
-+byte2line({byte})					*byte2line()*
-+		Return the line number that contains the character at byte
-+		count {byte} in the current buffer.  This includes the
-+		end-of-line character, depending on the 'fileformat' option
-+		for the current buffer.  The first character has byte count
-+		one.
-+		Also see |line2byte()|, |go| and |:goto|.
-+		{not available when compiled without the |+byte_offset|
-+		feature}
-+
-+byteidx({expr}, {nr})					*byteidx()*
-+		Return byte index of the {nr}'th character in the string
-+		{expr}.  Use zero for the first character, it returns zero.
-+		This function is only useful when there are multibyte
-+		characters, otherwise the returned value is equal to {nr}.
-+		Composing characters are counted as a separate character.
-+		Example : >
-+			echo matchstr(str, ".", byteidx(str, 3))
-+<		will display the fourth character.  Another way to do the
-+		same: >
-+			let s = strpart(str, byteidx(str, 3))
-+			echo strpart(s, 0, byteidx(s, 1))
-+<		If there are less than {nr} characters -1 is returned.
-+		If there are exactly {nr} characters the length of the string
-+		is returned.
-+
-+call({func}, {arglist} [, {dict}])			*call()* *E699*
-+		Call function {func} with the items in |List| {arglist} as
-+		arguments.
-+		{func} can either be a |Funcref| or the name of a function.
-+		a:firstline and a:lastline are set to the cursor line.
-+		Returns the return value of the called function.
-+		{dict} is for functions with the "dict" attribute.  It will be
-+		used to set the local variable "self". |Dictionary-function|
-+
-+ceil({expr})							*ceil()*
-+		Return the smallest integral value greater than or equal to
-+		{expr} as a |Float| (round up).
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			echo ceil(1.456)
-+<			2.0  >
-+			echo ceil(-5.456)
-+<			-5.0  >
-+			echo ceil(4.0)
-+<			4.0
-+		{only available when compiled with the |+float| feature}
-+
-+changenr()						*changenr()*
-+		Return the number of the most recent change.  This is the same
-+		number as what is displayed with |:undolist| and can be used
-+		with the |:undo| command.
-+		When a change was made it is the number of that change.  After
-+		redo it is the number of the redone change.  After undo it is
-+		one less than the number of the undone change.
-+
-+char2nr({expr})						*char2nr()*
-+		Return number value of the first char in {expr}.  Examples: >
-+			char2nr(" ")		returns 32
-+			char2nr("ABC")		returns 65
-+<		The current 'encoding' is used.  Example for "utf-8": >
-+			char2nr("á")		returns 225
-+			char2nr("á"[0])		returns 195
-+<		|nr2char()| does the opposite.
-+
-+cindent({lnum})						*cindent()*
-+		Get the amount of indent for line {lnum} according the C
-+		indenting rules, as with 'cindent'.
-+		The indent is counted in spaces, the value of 'tabstop' is
-+		relevant.  {lnum} is used just like in |getline()|.
-+		When {lnum} is invalid or Vim was not compiled the |+cindent|
-+		feature, -1 is returned.
-+		See |C-indenting|.
-+
-+clearmatches()						*clearmatches()*
-+		Clears all matches previously defined by |matchadd()| and the
-+		|:match| commands.
-+
-+							*col()*
-+col({expr})	The result is a Number, which is the byte index of the column
-+		position given with {expr}.  The accepted positions are:
-+		    .	    the cursor position
-+		    $	    the end of the cursor line (the result is the
-+			    number of characters in the cursor line plus one)
-+		    'x	    position of mark x (if the mark is not set, 0 is
-+			    returned)
-+		Additionally {expr} can be [lnum, col]: a |List| with the line
-+		and column number. Most useful when the column is "$", to get
-+		the last column of a specific line.  When "lnum" or "col" is
-+		out of range then col() returns zero.
-+		To get the line number use |line()|.  To get both use
-+		|getpos()|.
-+		For the screen column position use |virtcol()|.
-+		Note that only marks in the current file can be used.
-+		Examples: >
-+			col(".")		column of cursor
-+			col("$")		length of cursor line plus one
-+			col("'t")		column of mark t
-+			col("'" . markname)	column of mark markname
-+<		The first column is 1.	0 is returned for an error.
-+		For an uppercase mark the column may actually be in another
-+		buffer.
-+		For the cursor position, when 'virtualedit' is active, the
-+		column is one higher if the cursor is after the end of the
-+		line.  This can be used to obtain the column in Insert mode: >
-+			:imap <F2> <C-O>:let save_ve = &ve<CR>
-+				\<C-O>:set ve=all<CR>
-+				\<C-O>:echo col(".") . "\n" <Bar>
-+				\let &ve = save_ve<CR>
-+<
-+
-+complete({startcol}, {matches})			*complete()* *E785*
-+		Set the matches for Insert mode completion.
-+		Can only be used in Insert mode.  You need to use a mapping
-+		with CTRL-R = |i_CTRL-R|.  It does not work after CTRL-O or
-+		with an expression mapping.
-+		{startcol} is the byte offset in the line where the completed
-+		text start.  The text up to the cursor is the original text
-+		that will be replaced by the matches.  Use col('.') for an
-+		empty string.  "col('.') - 1" will replace one character by a
-+		match.
-+		{matches} must be a |List|.  Each |List| item is one match.
-+		See |complete-items| for the kind of items that are possible.
-+		Note that the after calling this function you need to avoid
-+		inserting anything that would cause completion to stop.
-+		The match can be selected with CTRL-N and CTRL-P as usual with
-+		Insert mode completion.  The popup menu will appear if
-+		specified, see |ins-completion-menu|.
-+		Example: >
-+	inoremap <F5> <C-R>=ListMonths()<CR>
-+
-+	func! ListMonths()
-+	  call complete(col('.'), ['January', 'February', 'March',
-+		\ 'April', 'May', 'June', 'July', 'August', 'September',
-+		\ 'October', 'November', 'December'])
-+	  return ''
-+	endfunc
-+<		This isn't very useful, but it shows how it works.  Note that
-+		an empty string is returned to avoid a zero being inserted.
-+
-+complete_add({expr})				*complete_add()*
-+		Add {expr} to the list of matches.  Only to be used by the
-+		function specified with the 'completefunc' option.
-+		Returns 0 for failure (empty string or out of memory),
-+		1 when the match was added, 2 when the match was already in
-+		the list.
-+		See |complete-functions| for an explanation of {expr}.	It is
-+		the same as one item in the list that 'omnifunc' would return.
-+
-+complete_check()				*complete_check()*
-+		Check for a key typed while looking for completion matches.
-+		This is to be used when looking for matches takes some time.
-+		Returns non-zero when searching for matches is to be aborted,
-+		zero otherwise.
-+		Only to be used by the function specified with the
-+		'completefunc' option.
-+
-+						*confirm()*
-+confirm({msg} [, {choices} [, {default} [, {type}]]])
-+		Confirm() offers the user a dialog, from which a choice can be
-+		made.  It returns the number of the choice.  For the first
-+		choice this is 1.
-+		Note: confirm() is only supported when compiled with dialog
-+		support, see |+dialog_con| and |+dialog_gui|.
-+
-+		{msg} is displayed in a |dialog| with {choices} as the
-+		alternatives.  When {choices} is missing or empty, "&OK" is
-+		used (and translated).
-+		{msg} is a String, use '\n' to include a newline.  Only on
-+		some systems the string is wrapped when it doesn't fit.
-+
-+		{choices} is a String, with the individual choices separated
-+		by '\n', e.g. >
-+			confirm("Save changes?", "&Yes\n&No\n&Cancel")
-+<		The letter after the '&' is the shortcut key for that choice.
-+		Thus you can type 'c' to select "Cancel".  The shortcut does
-+		not need to be the first letter: >
-+			confirm("file has been modified", "&Save\nSave &All")
-+<		For the console, the first letter of each choice is used as
-+		the default shortcut key.
-+
-+		The optional {default} argument is the number of the choice
-+		that is made if the user hits <CR>.  Use 1 to make the first
-+		choice the default one.  Use 0 to not set a default.  If
-+		{default} is omitted, 1 is used.
-+
-+		The optional {type} argument gives the type of dialog.  This
-+		is only used for the icon of the GTK, Mac, Motif and Win32
-+		GUI.  It can be one of these values: "Error", "Question",
-+		"Info", "Warning" or "Generic".  Only the first character is
-+		relevant.  When {type} is omitted, "Generic" is used.
-+
-+		If the user aborts the dialog by pressing <Esc>, CTRL-C,
-+		or another valid interrupt key, confirm() returns 0.
-+
-+		An example: >
-+   :let choice = confirm("What do you want?", "&Apples\n&Oranges\n&Bananas", 2)
-+   :if choice == 0
-+   :	echo "make up your mind!"
-+   :elseif choice == 3
-+   :	echo "tasteful"
-+   :else
-+   :	echo "I prefer bananas myself."
-+   :endif
-+<		In a GUI dialog, buttons are used.  The layout of the buttons
-+		depends on the 'v' flag in 'guioptions'.  If it is included,
-+		the buttons are always put vertically.	Otherwise,  confirm()
-+		tries to put the buttons in one horizontal line.  If they
-+		don't fit, a vertical layout is used anyway.  For some systems
-+		the horizontal layout is always used.
-+
-+							*copy()*
-+copy({expr})	Make a copy of {expr}.	For Numbers and Strings this isn't
-+		different from using {expr} directly.
-+		When {expr} is a |List| a shallow copy is created.  This means
-+		that the original |List| can be changed without changing the
-+		copy, and vice versa.  But the items are identical, thus
-+		changing an item changes the contents of both |Lists|.	Also
-+		see |deepcopy()|.
-+
-+cos({expr})						*cos()*
-+		Return the cosine of {expr}, measured in radians, as a |Float|.
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo cos(100)
-+<			0.862319 >
-+			:echo cos(-4.01)
-+<			-0.646043
-+		{only available when compiled with the |+float| feature}
-+
-+
-+cosh({expr})						*cosh()*
-+		Return the hyperbolic cosine of {expr} as a |Float| in the range
-+		[1, inf].
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo cosh(0.5)
-+<			1.127626 >
-+			:echo cosh(-0.5)
-+<			-1.127626
-+		{only available when compiled with the |+float| feature}
-+
-+		
-+count({comp}, {expr} [, {ic} [, {start}]])			*count()*
-+		Return the number of times an item with value {expr} appears
-+		in |List| or |Dictionary| {comp}.
-+		If {start} is given then start with the item with this index.
-+		{start} can only be used with a |List|.
-+		When {ic} is given and it's non-zero then case is ignored.
-+
-+
-+							*cscope_connection()*
-+cscope_connection([{num} , {dbpath} [, {prepend}]])
-+		Checks for the existence of a |cscope| connection.  If no
-+		parameters are specified, then the function returns:
-+			0, if cscope was not available (not compiled in), or
-+			   if there are no cscope connections;
-+			1, if there is at least one cscope connection.
-+
-+		If parameters are specified, then the value of {num}
-+		determines how existence of a cscope connection is checked:
-+
-+		{num}	Description of existence check
-+		-----	------------------------------
-+		0	Same as no parameters (e.g., "cscope_connection()").
-+		1	Ignore {prepend}, and use partial string matches for
-+			{dbpath}.
-+		2	Ignore {prepend}, and use exact string matches for
-+			{dbpath}.
-+		3	Use {prepend}, use partial string matches for both
-+			{dbpath} and {prepend}.
-+		4	Use {prepend}, use exact string matches for both
-+			{dbpath} and {prepend}.
-+
-+		Note: All string comparisons are case sensitive!
-+
-+		Examples.  Suppose we had the following (from ":cs show"): >
-+
-+  # pid    database name			prepend path
-+  0 27664  cscope.out				/usr/local
-+<
-+		Invocation					Return Val ~
-+		----------					---------- >
-+		cscope_connection()					1
-+		cscope_connection(1, "out")				1
-+		cscope_connection(2, "out")				0
-+		cscope_connection(3, "out")				0
-+		cscope_connection(3, "out", "local")			1
-+		cscope_connection(4, "out")				0
-+		cscope_connection(4, "out", "local")			0
-+		cscope_connection(4, "cscope.out", "/usr/local")	1
-+<
-+cursor({lnum}, {col} [, {off}])				*cursor()*
-+cursor({list})
-+		Positions the cursor at the column (byte count) {col} in the
-+		line {lnum}.  The first column is one.
-+		When there is one argument {list} this is used as a |List|
-+		with two or three items {lnum}, {col} and {off}.  This is like
-+		the return value of |getpos()|, but without the first item.
-+		Does not change the jumplist.
-+		If {lnum} is greater than the number of lines in the buffer,
-+		the cursor will be positioned at the last line in the buffer.
-+		If {lnum} is zero, the cursor will stay in the current line.
-+		If {col} is greater than the number of bytes in the line,
-+		the cursor will be positioned at the last character in the
-+		line.
-+		If {col} is zero, the cursor will stay in the current column.
-+		When 'virtualedit' is used {off} specifies the offset in
-+		screen columns from the start of the character.  E.g., a
-+		position within a <Tab> or after the last character.
-+		Returns 0 when the position could be set, -1 otherwise.
-+
-+
-+deepcopy({expr}[, {noref}])				*deepcopy()* *E698*
-+		Make a copy of {expr}.	For Numbers and Strings this isn't
-+		different from using {expr} directly.
-+		When {expr} is a |List| a full copy is created.  This means
-+		that the original |List| can be changed without changing the
-+		copy, and vice versa.  When an item is a |List|, a copy for it
-+		is made, recursively.  Thus changing an item in the copy does
-+		not change the contents of the original |List|.
-+		When {noref} is omitted or zero a contained |List| or
-+		|Dictionary| is only copied once.  All references point to
-+		this single copy.  With {noref} set to 1 every occurrence of a
-+		|List| or |Dictionary| results in a new copy.  This also means
-+		that a cyclic reference causes deepcopy() to fail.
-+								*E724*
-+		Nesting is possible up to 100 levels.  When there is an item
-+		that refers back to a higher level making a deep copy with
-+		{noref} set to 1 will fail.
-+		Also see |copy()|.
-+
-+delete({fname})							*delete()*
-+		Deletes the file by the name {fname}.  The result is a Number,
-+		which is 0 if the file was deleted successfully, and non-zero
-+		when the deletion failed.
-+		Use |remove()| to delete an item from a |List|.
-+
-+							*did_filetype()*
-+did_filetype()	Returns non-zero when autocommands are being executed and the
-+		FileType event has been triggered at least once.  Can be used
-+		to avoid triggering the FileType event again in the scripts
-+		that detect the file type. |FileType|
-+		When editing another file, the counter is reset, thus this
-+		really checks if the FileType event has been triggered for the
-+		current buffer.  This allows an autocommand that starts
-+		editing another buffer to set 'filetype' and load a syntax
-+		file.
-+
-+diff_filler({lnum})					*diff_filler()*
-+		Returns the number of filler lines above line {lnum}.
-+		These are the lines that were inserted at this point in
-+		another diff'ed window.  These filler lines are shown in the
-+		display but don't exist in the buffer.
-+		{lnum} is used like with |getline()|.  Thus "." is the current
-+		line, "'m" mark m, etc.
-+		Returns 0 if the current window is not in diff mode.
-+
-+diff_hlID({lnum}, {col})				*diff_hlID()*
-+		Returns the highlight ID for diff mode at line {lnum} column
-+		{col} (byte index).  When the current line does not have a
-+		diff change zero is returned.
-+		{lnum} is used like with |getline()|.  Thus "." is the current
-+		line, "'m" mark m, etc.
-+		{col} is 1 for the leftmost column, {lnum} is 1 for the first
-+		line.
-+		The highlight ID can be used with |synIDattr()| to obtain
-+		syntax information about the highlighting.
-+
-+empty({expr})						*empty()*
-+		Return the Number 1 if {expr} is empty, zero otherwise.
-+		A |List| or |Dictionary| is empty when it does not have any
-+		items.	A Number is empty when its value is zero.
-+		For a long |List| this is much faster than comparing the
-+		length with zero.
-+
-+escape({string}, {chars})				*escape()*
-+		Escape the characters in {chars} that occur in {string} with a
-+		backslash.  Example: >
-+			:echo escape('c:\program files\vim', ' \')
-+<		results in: >
-+			c:\\program\ files\\vim
-+<		Also see |shellescape()|.
-+
-+							*eval()*
-+eval({string})	Evaluate {string} and return the result.  Especially useful to
-+		turn the result of |string()| back into the original value.
-+		This works for Numbers, Floats, Strings and composites of
-+		them.  Also works for |Funcref|s that refer to existing
-+		functions.
-+
-+eventhandler()						*eventhandler()*
-+		Returns 1 when inside an event handler.  That is that Vim got
-+		interrupted while waiting for the user to type a character,
-+		e.g., when dropping a file on Vim.  This means interactive
-+		commands cannot be used.  Otherwise zero is returned.
-+
-+executable({expr})					*executable()*
-+		This function checks if an executable with the name {expr}
-+		exists.  {expr} must be the name of the program without any
-+		arguments.
-+		executable() uses the value of $PATH and/or the normal
-+		searchpath for programs.		*PATHEXT*
-+		On MS-DOS and MS-Windows the ".exe", ".bat", etc. can
-+		optionally be included.  Then the extensions in $PATHEXT are
-+		tried.	Thus if "foo.exe" does not exist, "foo.exe.bat" can be
-+		found.	If $PATHEXT is not set then ".exe;.com;.bat;.cmd" is
-+		used.  A dot by itself can be used in $PATHEXT to try using
-+		the name without an extension.	When 'shell' looks like a
-+		Unix shell, then the name is also tried without adding an
-+		extension.
-+		On MS-DOS and MS-Windows it only checks if the file exists and
-+		is not a directory, not if it's really executable.
-+		On MS-Windows an executable in the same directory as Vim is
-+		always found.  Since this directory is added to $PATH it
-+		should also work to execute it |win32-PATH|.
-+		The result is a Number:
-+			1	exists
-+			0	does not exist
-+			-1	not implemented on this system
-+
-+							*exists()*
-+exists({expr})	The result is a Number, which is non-zero if {expr} is
-+		defined, zero otherwise.  The {expr} argument is a string,
-+		which contains one of these:
-+			&option-name	Vim option (only checks if it exists,
-+					not if it really works)
-+			+option-name	Vim option that works.
-+			$ENVNAME	environment variable (could also be
-+					done by comparing with an empty
-+					string)
-+			*funcname	built-in function (see |functions|)
-+					or user defined function (see
-+					|user-functions|).
-+			varname		internal variable (see
-+					|internal-variables|).	Also works
-+					for |curly-braces-names|, |Dictionary|
-+					entries, |List| items, etc.  Beware
-+					that evaluating an index may cause an
-+					error message for an invalid
-+					expression.  E.g.: >
-+					   :let l = [1, 2, 3]
-+					   :echo exists("l[5]")
-+<					   0 >
-+					   :echo exists("l[xx]")
-+<					   E121: Undefined variable: xx
-+					   0
-+			:cmdname	Ex command: built-in command, user
-+					command or command modifier |:command|.
-+					Returns:
-+					1  for match with start of a command
-+					2  full match with a command
-+					3  matches several user commands
-+					To check for a supported command
-+					always check the return value to be 2.
-+			:2match		The |:2match| command.
-+			:3match		The |:3match| command.
-+			#event		autocommand defined for this event
-+			#event#pattern	autocommand defined for this event and
-+					pattern (the pattern is taken
-+					literally and compared to the
-+					autocommand patterns character by
-+					character)
-+			#group		autocommand group exists
-+			#group#event	autocommand defined for this group and
-+					event.
-+			#group#event#pattern
-+					autocommand defined for this group,
-+					event and pattern.
-+			##event		autocommand for this event is
-+					supported.
-+		For checking for a supported feature use |has()|.
-+
-+		Examples: >
-+			exists("&shortname")
-+			exists("$HOSTNAME")
-+			exists("*strftime")
-+			exists("*s:MyFunc")
-+			exists("bufcount")
-+			exists(":Make")
-+			exists("#CursorHold")
-+			exists("#BufReadPre#*.gz")
-+			exists("#filetypeindent")
-+			exists("#filetypeindent#FileType")
-+			exists("#filetypeindent#FileType#*")
-+			exists("##ColorScheme")
-+<		There must be no space between the symbol (&/$/*/#) and the
-+		name.
-+		There must be no extra characters after the name, although in
-+		a few cases this is ignored.  That may become more strict in
-+		the future, thus don't count on it!
-+		Working example: >
-+			exists(":make")
-+<		NOT working example: >
-+			exists(":make install")
-+
-+<		Note that the argument must be a string, not the name of the
-+		variable itself.  For example: >
-+			exists(bufcount)
-+<		This doesn't check for existence of the "bufcount" variable,
-+		but gets the value of "bufcount", and checks if that exists.
-+
-+exp({expr})						*exp()*
-+		Return the exponential of {expr} as a |Float| in the range
-+		[0, inf].
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo exp(2)
-+<			7.389056 >
-+			:echo exp(-1)
-+<			0.367879
-+		{only available when compiled with the |+float| feature}
-+
-+
-+expand({expr} [, {flag}])				*expand()*
-+		Expand wildcards and the following special keywords in {expr}.
-+		The result is a String.
-+
-+		When there are several matches, they are separated by <NL>
-+		characters.  [Note: in version 5.0 a space was used, which
-+		caused problems when a file name contains a space]
-+
-+		If the expansion fails, the result is an empty string.	A name
-+		for a non-existing file is not included.
-+
-+		When {expr} starts with '%', '#' or '<', the expansion is done
-+		like for the |cmdline-special| variables with their associated
-+		modifiers.  Here is a short overview:
-+
-+			%		current file name
-+			#		alternate file name
-+			#n		alternate file name n
-+			<cfile>		file name under the cursor
-+			<afile>		autocmd file name
-+			<abuf>		autocmd buffer number (as a String!)
-+			<amatch>	autocmd matched name
-+			<sfile>		sourced script file name
-+			<cword>		word under the cursor
-+			<cWORD>		WORD under the cursor
-+			<client>	the {clientid} of the last received
-+					message |server2client()|
-+		Modifiers:
-+			:p		expand to full path
-+			:h		head (last path component removed)
-+			:t		tail (last path component only)
-+			:r		root (one extension removed)
-+			:e		extension only
-+
-+		Example: >
-+			:let &tags = expand("%:p:h") . "/tags"
-+<		Note that when expanding a string that starts with '%', '#' or
-+		'<', any following text is ignored.  This does NOT work: >
-+			:let doesntwork = expand("%:h.bak")
-+<		Use this: >
-+			:let doeswork = expand("%:h") . ".bak"
-+<		Also note that expanding "<cfile>" and others only returns the
-+		referenced file name without further expansion.  If "<cfile>"
-+		is "~/.cshrc", you need to do another expand() to have the
-+		"~/" expanded into the path of the home directory: >
-+			:echo expand(expand("<cfile>"))
-+<
-+		There cannot be white space between the variables and the
-+		following modifier.  The |fnamemodify()| function can be used
-+		to modify normal file names.
-+
-+		When using '%' or '#', and the current or alternate file name
-+		is not defined, an empty string is used.  Using "%:p" in a
-+		buffer with no name, results in the current directory, with a
-+		'/' added.
-+
-+		When {expr} does not start with '%', '#' or '<', it is
-+		expanded like a file name is expanded on the command line.
-+		'suffixes' and 'wildignore' are used, unless the optional
-+		{flag} argument is given and it is non-zero.  Names for
-+		non-existing files are included.  The "**" item can be used to
-+		search in a directory tree.  For example, to find all "README"
-+		files in the current directory and below: >
-+			:echo expand("**/README")
-+<
-+		Expand() can also be used to expand variables and environment
-+		variables that are only known in a shell.  But this can be
-+		slow, because a shell must be started.	See |expr-env-expand|.
-+		The expanded variable is still handled like a list of file
-+		names.	When an environment variable cannot be expanded, it is
-+		left unchanged.  Thus ":echo expand('$FOOBAR')" results in
-+		"$FOOBAR".
-+
-+		See |glob()| for finding existing files.  See |system()| for
-+		getting the raw output of an external command.
-+
-+extend({expr1}, {expr2} [, {expr3}])			*extend()*
-+		{expr1} and {expr2} must be both |Lists| or both
-+		|Dictionaries|.
-+
-+		If they are |Lists|: Append {expr2} to {expr1}.
-+		If {expr3} is given insert the items of {expr2} before item
-+		{expr3} in {expr1}.  When {expr3} is zero insert before the
-+		first item.  When {expr3} is equal to len({expr1}) then
-+		{expr2} is appended.
-+		Examples: >
-+			:echo sort(extend(mylist, [7, 5]))
-+			:call extend(mylist, [2, 3], 1)
-+<		When {expr1} is the same List as {expr2} then the number of
-+		items copied is equal to the original length of the List.
-+		E.g., when {expr3} is 1 you get N new copies of the first item
-+		(where N is the original length of the List).
-+		Use |add()| to concatenate one item to a list.	To concatenate
-+		two lists into a new list use the + operator: >
-+			:let newlist = [1, 2, 3] + [4, 5]
-+<
-+		If they are |Dictionaries|:
-+		Add all entries from {expr2} to {expr1}.
-+		If a key exists in both {expr1} and {expr2} then {expr3} is
-+		used to decide what to do:
-+		{expr3} = "keep": keep the value of {expr1}
-+		{expr3} = "force": use the value of {expr2}
-+		{expr3} = "error": give an error message		*E737*
-+		When {expr3} is omitted then "force" is assumed.
-+
-+		{expr1} is changed when {expr2} is not empty.  If necessary
-+		make a copy of {expr1} first.
-+		{expr2} remains unchanged.
-+		Returns {expr1}.
-+
-+
-+feedkeys({string} [, {mode}])				*feedkeys()*
-+		Characters in {string} are queued for processing as if they
-+		come from a mapping or were typed by the user.	They are added
-+		to the end of the typeahead buffer, thus if a mapping is still
-+		being executed these characters come after them.
-+		The function does not wait for processing of keys contained in
-+		{string}.
-+		To include special keys into {string}, use double-quotes
-+		and "\..." notation |expr-quote|. For example,
-+		feedkeys("\<CR>") simulates pressing of the <Enter> key. But
-+		feedkeys('\<CR>') pushes 5 characters.
-+		If {mode} is absent, keys are remapped.
-+		{mode} is a String, which can contain these character flags:
-+		'm'	Remap keys. This is default.
-+		'n'	Do not remap keys.
-+		't'	Handle keys as if typed; otherwise they are handled as
-+			if coming from a mapping.  This matters for undo,
-+			opening folds, etc.
-+		Return value is always 0.
-+
-+filereadable({file})					*filereadable()*
-+		The result is a Number, which is TRUE when a file with the
-+		name {file} exists, and can be read.  If {file} doesn't exist,
-+		or is a directory, the result is FALSE.  {file} is any
-+		expression, which is used as a String.
-+		If you don't care about the file being readable you can use
-+		|glob()|.
-+							*file_readable()*
-+		Obsolete name: file_readable().
-+
-+
-+filewritable({file})					*filewritable()*
-+		The result is a Number, which is 1 when a file with the
-+		name {file} exists, and can be written.  If {file} doesn't
-+		exist, or is not writable, the result is 0.  If {file} is a
-+		directory, and we can write to it, the result is 2.
-+
-+
-+filter({expr}, {string})					*filter()*
-+		{expr} must be a |List| or a |Dictionary|.
-+		For each item in {expr} evaluate {string} and when the result
-+		is zero remove the item from the |List| or |Dictionary|.
-+		Inside {string} |v:val| has the value of the current item.
-+		For a |Dictionary| |v:key| has the key of the current item.
-+		Examples: >
-+			:call filter(mylist, 'v:val !~ "OLD"')
-+<		Removes the items where "OLD" appears. >
-+			:call filter(mydict, 'v:key >= 8')
-+<		Removes the items with a key below 8. >
-+			:call filter(var, 0)
-+<		Removes all the items, thus clears the |List| or |Dictionary|.
-+
-+		Note that {string} is the result of expression and is then
-+		used as an expression again.  Often it is good to use a
-+		|literal-string| to avoid having to double backslashes.
-+
-+		The operation is done in-place.  If you want a |List| or
-+		|Dictionary| to remain unmodified make a copy first: >
-+			:let l = filter(copy(mylist), 'v:val =~ "KEEP"')
-+
-+<		Returns {expr}, the |List| or |Dictionary| that was filtered.
-+		When an error is encountered while evaluating {string} no
-+		further items in {expr} are processed.
-+
-+
-+finddir({name}[, {path}[, {count}]])				*finddir()*
-+		Find directory {name} in {path}.  Supports both downwards and
-+		upwards recursive directory searches.  See |file-searching|
-+		for the syntax of {path}.
-+		Returns the path of the first found match.  When the found
-+		directory is below the current directory a relative path is
-+		returned.  Otherwise a full path is returned.
-+		If {path} is omitted or empty then 'path' is used.
-+		If the optional {count} is given, find {count}'s occurrence of
-+		{name} in {path} instead of the first one.
-+		When {count} is negative return all the matches in a |List|.
-+		This is quite similar to the ex-command |:find|.
-+		{only available when compiled with the |+file_in_path|
-+		feature}
-+
-+findfile({name}[, {path}[, {count}]])				*findfile()*
-+		Just like |finddir()|, but find a file instead of a directory.
-+		Uses 'suffixesadd'.
-+		Example: >
-+			:echo findfile("tags.vim", ".;")
-+<		Searches from the directory of the current file upwards until
-+		it finds the file "tags.vim".
-+
-+float2nr({expr})					*float2nr()*
-+		Convert {expr} to a Number by omitting the part after the
-+		decimal point.
-+		{expr} must evaluate to a |Float| or a Number.
-+		When the value of {expr} is out of range for a |Number| the
-+		result is truncated to 0x7fffffff or -0x7fffffff.  NaN results
-+		in -0x80000000.
-+		Examples: >
-+			echo float2nr(3.95)
-+<			3  >
-+			echo float2nr(-23.45)
-+<			-23  >
-+			echo float2nr(1.0e100)
-+<			2147483647  >
-+			echo float2nr(-1.0e150)
-+<			-2147483647  >
-+			echo float2nr(1.0e-100)
-+<			0
-+		{only available when compiled with the |+float| feature}
-+
-+
-+floor({expr})							*floor()*
-+		Return the largest integral value less than or equal to
-+		{expr} as a |Float| (round down).
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			echo floor(1.856)
-+<			1.0  >
-+			echo floor(-5.456)
-+<			-6.0  >
-+			echo floor(4.0)
-+<			4.0
-+		{only available when compiled with the |+float| feature}
-+		
-+
-+fmod({expr1}, {expr2})					*fmod()*
-+		Return the remainder of {expr1} / {expr2}, even if the
-+		division is not representable.  Returns {expr1} - i * {expr2}
-+		for some integer i such that if {expr2} is non-zero, the
-+		result has the same sign as {expr1} and magnitude less than
-+		the magnitude of {expr2}.  If {expr2} is zero, the value
-+		returned is zero.  The value returned is a |Float|.
-+		{expr1} and {expr2} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo fmod(12.33, 1.22)
-+<			0.13 >
-+			:echo fmod(-12.33, 1.22)
-+<			-0.13
-+		{only available when compiled with |+float| feature}
-+
-+
-+fnameescape({string})					*fnameescape()*
-+		Escape {string} for use as file name command argument.	All
-+		characters that have a special meaning, such as '%' and '|'
-+		are escaped with a backslash.
-+		For most systems the characters escaped are
-+		" \t\n*?[{`$\\%#'\"|!<".  For systems where a backslash
-+		appears in a filename, it depends on the value of 'isfname'.
-+		A leading '+' and '>' is also escaped (special after |:edit|
-+		and |:write|).  And a "-" by itself (special after |:cd|).
-+		Example: >
-+			:let fname = '+some str%nge|name'
-+			:exe "edit " . fnameescape(fname)
-+<		results in executing: >
-+			edit \+some\ str\%nge\|name
-+
-+fnamemodify({fname}, {mods})				*fnamemodify()*
-+		Modify file name {fname} according to {mods}.  {mods} is a
-+		string of characters like it is used for file names on the
-+		command line.  See |filename-modifiers|.
-+		Example: >
-+			:echo fnamemodify("main.c", ":p:h")
-+<		results in: >
-+			/home/mool/vim/vim/src
-+<		Note: Environment variables don't work in {fname}, use
-+		|expand()| first then.
-+
-+foldclosed({lnum})					*foldclosed()*
-+		The result is a Number.  If the line {lnum} is in a closed
-+		fold, the result is the number of the first line in that fold.
-+		If the line {lnum} is not in a closed fold, -1 is returned.
-+
-+foldclosedend({lnum})					*foldclosedend()*
-+		The result is a Number.  If the line {lnum} is in a closed
-+		fold, the result is the number of the last line in that fold.
-+		If the line {lnum} is not in a closed fold, -1 is returned.
-+
-+foldlevel({lnum})					*foldlevel()*
-+		The result is a Number, which is the foldlevel of line {lnum}
-+		in the current buffer.	For nested folds the deepest level is
-+		returned.  If there is no fold at line {lnum}, zero is
-+		returned.  It doesn't matter if the folds are open or closed.
-+		When used while updating folds (from 'foldexpr') -1 is
-+		returned for lines where folds are still to be updated and the
-+		foldlevel is unknown.  As a special case the level of the
-+		previous line is usually available.
-+
-+							*foldtext()*
-+foldtext()	Returns a String, to be displayed for a closed fold.  This is
-+		the default function used for the 'foldtext' option and should
-+		only be called from evaluating 'foldtext'.  It uses the
-+		|v:foldstart|, |v:foldend| and |v:folddashes| variables.
-+		The returned string looks like this: >
-+			+-- 45 lines: abcdef
-+<		The number of dashes depends on the foldlevel.	The "45" is
-+		the number of lines in the fold.  "abcdef" is the text in the
-+		first non-blank line of the fold.  Leading white space, "//"
-+		or "/*" and the text from the 'foldmarker' and 'commentstring'
-+		options is removed.
-+		{not available when compiled without the |+folding| feature}
-+
-+foldtextresult({lnum})					*foldtextresult()*
-+		Returns the text that is displayed for the closed fold at line
-+		{lnum}.  Evaluates 'foldtext' in the appropriate context.
-+		When there is no closed fold at {lnum} an empty string is
-+		returned.
-+		{lnum} is used like with |getline()|.  Thus "." is the current
-+		line, "'m" mark m, etc.
-+		Useful when exporting folded text, e.g., to HTML.
-+		{not available when compiled without the |+folding| feature}
-+
-+							*foreground()*
-+foreground()	Move the Vim window to the foreground.	Useful when sent from
-+		a client to a Vim server. |remote_send()|
-+		On Win32 systems this might not work, the OS does not always
-+		allow a window to bring itself to the foreground.  Use
-+		|remote_foreground()| instead.
-+		{only in the Win32, Athena, Motif and GTK GUI versions and the
-+		Win32 console version}
-+
-+
-+function({name})					*function()* *E700*
-+		Return a |Funcref| variable that refers to function {name}.
-+		{name} can be a user defined function or an internal function.
-+
-+
-+garbagecollect([at_exit])				*garbagecollect()*
-+		Cleanup unused |Lists| and |Dictionaries| that have circular
-+		references.  There is hardly ever a need to invoke this
-+		function, as it is automatically done when Vim runs out of
-+		memory or is waiting for the user to press a key after
-+		'updatetime'.  Items without circular references are always
-+		freed when they become unused.
-+		This is useful if you have deleted a very big |List| and/or
-+		|Dictionary| with circular references in a script that runs
-+		for a long time.
-+		When the optional "at_exit" argument is one, garbage
-+		collection will also be done when exiting Vim, if it wasn't
-+		done before.  This is useful when checking for memory leaks.
-+
-+get({list}, {idx} [, {default}])			*get()*
-+		Get item {idx} from |List| {list}.  When this item is not
-+		available return {default}.  Return zero when {default} is
-+		omitted.
-+get({dict}, {key} [, {default}])
-+		Get item with key {key} from |Dictionary| {dict}.  When this
-+		item is not available return {default}.  Return zero when
-+		{default} is omitted.
-+
-+							*getbufline()*
-+getbufline({expr}, {lnum} [, {end}])
-+		Return a |List| with the lines starting from {lnum} to {end}
-+		(inclusive) in the buffer {expr}.  If {end} is omitted, a
-+		|List| with only the line {lnum} is returned.
-+
-+		For the use of {expr}, see |bufname()| above.
-+
-+		For {lnum} and {end} "$" can be used for the last line of the
-+		buffer.  Otherwise a number must be used.
-+
-+		When {lnum} is smaller than 1 or bigger than the number of
-+		lines in the buffer, an empty |List| is returned.
-+
-+		When {end} is greater than the number of lines in the buffer,
-+		it is treated as {end} is set to the number of lines in the
-+		buffer.  When {end} is before {lnum} an empty |List| is
-+		returned.
-+
-+		This function works only for loaded buffers.  For unloaded and
-+		non-existing buffers, an empty |List| is returned.
-+
-+		Example: >
-+			:let lines = getbufline(bufnr("myfile"), 1, "$")
-+
-+getbufvar({expr}, {varname})				*getbufvar()*
-+		The result is the value of option or local buffer variable
-+		{varname} in buffer {expr}.  Note that the name without "b:"
-+		must be used.
-+		When {varname} is empty returns a dictionary with all the
-+		buffer-local variables.
-+		This also works for a global or buffer-local option, but it
-+		doesn't work for a global variable, window-local variable or
-+		window-local option.
-+		For the use of {expr}, see |bufname()| above.
-+		When the buffer or variable doesn't exist an empty string is
-+		returned, there is no error message.
-+		Examples: >
-+			:let bufmodified = getbufvar(1, "&mod")
-+			:echo "todo myvar = " . getbufvar("todo", "myvar")
-+<
-+getchar([expr])						*getchar()*
-+		Get a single character from the user or input stream.
-+		If [expr] is omitted, wait until a character is available.
-+		If [expr] is 0, only get a character when one is available.
-+			Return zero otherwise.
-+		If [expr] is 1, only check if a character is available, it is
-+			not consumed.  Return zero if no character available.
-+
-+		Without {expr} and when {expr} is 0 a whole character or
-+		special key is returned.  If it is an 8-bit character, the
-+		result is a number.  Use nr2char() to convert it to a String.
-+		Otherwise a String is returned with the encoded character.
-+		For a special key it's a sequence of bytes starting with 0x80
-+		(decimal: 128).  This is the same value as the string
-+		"\<Key>", e.g., "\<Left>".  The returned value is also a
-+		String when a modifier (shift, control, alt) was used that is
-+		not included in the character.
-+
-+		When {expr} is 1 only the first byte is returned.  For a
-+		one-byte character it is the character itself as a number.
-+		Use nr2char() to convert it to a String.
-+
-+		When the user clicks a mouse button, the mouse event will be
-+		returned.  The position can then be found in |v:mouse_col|,
-+		|v:mouse_lnum| and |v:mouse_win|.  This example positions the
-+		mouse as it would normally happen: >
-+			let c = getchar()
-+			if c == "\<LeftMouse>" && v:mouse_win > 0
-+			  exe v:mouse_win . "wincmd w"
-+			  exe v:mouse_lnum
-+			  exe "normal " . v:mouse_col . "|"
-+			endif
-+<
-+		There is no prompt, you will somehow have to make clear to the
-+		user that a character has to be typed.
-+		There is no mapping for the character.
-+		Key codes are replaced, thus when the user presses the <Del>
-+		key you get the code for the <Del> key, not the raw character
-+		sequence.  Examples: >
-+			getchar() == "\<Del>"
-+			getchar() == "\<S-Left>"
-+<		This example redefines "f" to ignore case: >
-+			:nmap f :call FindChar()<CR>
-+			:function FindChar()
-+			:  let c = nr2char(getchar())
-+			:  while col('.') < col('$') - 1
-+			:    normal l
-+			:    if getline('.')[col('.') - 1] ==? c
-+			:      break
-+			:    endif
-+			:  endwhile
-+			:endfunction
-+
-+getcharmod()						*getcharmod()*
-+		The result is a Number which is the state of the modifiers for
-+		the last obtained character with getchar() or in another way.
-+		These values are added together:
-+			2	shift
-+			4	control
-+			8	alt (meta)
-+			16	mouse double click
-+			32	mouse triple click
-+			64	mouse quadruple click
-+			128	Macintosh only: command
-+		Only the modifiers that have not been included in the
-+		character itself are obtained.	Thus Shift-a results in "A"
-+		without a modifier.
-+
-+getcmdline()						*getcmdline()*
-+		Return the current command-line.  Only works when the command
-+		line is being edited, thus requires use of |c_CTRL-\_e| or
-+		|c_CTRL-R_=|.
-+		Example: >
-+			:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
-+<		Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
-+
-+getcmdpos()						*getcmdpos()*
-+		Return the position of the cursor in the command line as a
-+		byte count.  The first column is 1.
-+		Only works when editing the command line, thus requires use of
-+		|c_CTRL-\_e| or |c_CTRL-R_=|.  Returns 0 otherwise.
-+		Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
-+
-+getcmdtype()						*getcmdtype()*
-+		Return the current command-line type. Possible return values
-+		are:
-+		    :	normal Ex command
-+		    >	debug mode command |debug-mode|
-+		    /	forward search command
-+		    ?	backward search command
-+		    @	|input()| command
-+		    -	|:insert| or |:append| command
-+		Only works when editing the command line, thus requires use of
-+		|c_CTRL-\_e| or |c_CTRL-R_=|.  Returns an empty string
-+		otherwise.
-+		Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
-+
-+							*getcwd()*
-+getcwd()	The result is a String, which is the name of the current
-+		working directory.
-+
-+getfsize({fname})					*getfsize()*
-+		The result is a Number, which is the size in bytes of the
-+		given file {fname}.
-+		If {fname} is a directory, 0 is returned.
-+		If the file {fname} can't be found, -1 is returned.
-+		If the size of {fname} is too big to fit in a Number then -2
-+		is returned.
-+
-+getfontname([{name}])					*getfontname()*
-+		Without an argument returns the name of the normal font being
-+		used.  Like what is used for the Normal highlight group
-+		|hl-Normal|.
-+		With an argument a check is done whether {name} is a valid
-+		font name.  If not then an empty string is returned.
-+		Otherwise the actual font name is returned, or {name} if the
-+		GUI does not support obtaining the real name.
-+		Only works when the GUI is running, thus not in your vimrc or
-+		gvimrc file.  Use the |GUIEnter| autocommand to use this
-+		function just after the GUI has started.
-+		Note that the GTK 2 GUI accepts any font name, thus checking
-+		for a valid name does not work.
-+
-+getfperm({fname})					*getfperm()*
-+		The result is a String, which is the read, write, and execute
-+		permissions of the given file {fname}.
-+		If {fname} does not exist or its directory cannot be read, an
-+		empty string is returned.
-+		The result is of the form "rwxrwxrwx", where each group of
-+		"rwx" flags represent, in turn, the permissions of the owner
-+		of the file, the group the file belongs to, and other users.
-+		If a user does not have a given permission the flag for this
-+		is replaced with the string "-".  Example: >
-+			:echo getfperm("/etc/passwd")
-+<		This will hopefully (from a security point of view) display
-+		the string "rw-r--r--" or even "rw-------".
-+
-+getftime({fname})					*getftime()*
-+		The result is a Number, which is the last modification time of
-+		the given file {fname}.  The value is measured as seconds
-+		since 1st Jan 1970, and may be passed to strftime().  See also
-+		|localtime()| and |strftime()|.
-+		If the file {fname} can't be found -1 is returned.
-+
-+getftype({fname})					*getftype()*
-+		The result is a String, which is a description of the kind of
-+		file of the given file {fname}.
-+		If {fname} does not exist an empty string is returned.
-+		Here is a table over different kinds of files and their
-+		results:
-+			Normal file		"file"
-+			Directory		"dir"
-+			Symbolic link		"link"
-+			Block device		"bdev"
-+			Character device	"cdev"
-+			Socket			"socket"
-+			FIFO			"fifo"
-+			All other		"other"
-+		Example: >
-+			getftype("/home")
-+<		Note that a type such as "link" will only be returned on
-+		systems that support it.  On some systems only "dir" and
-+		"file" are returned.
-+
-+							*getline()*
-+getline({lnum} [, {end}])
-+		Without {end} the result is a String, which is line {lnum}
-+		from the current buffer.  Example: >
-+			getline(1)
-+<		When {lnum} is a String that doesn't start with a
-+		digit, line() is called to translate the String into a Number.
-+		To get the line under the cursor: >
-+			getline(".")
-+<		When {lnum} is smaller than 1 or bigger than the number of
-+		lines in the buffer, an empty string is returned.
-+
-+		When {end} is given the result is a |List| where each item is
-+		a line from the current buffer in the range {lnum} to {end},
-+		including line {end}.
-+		{end} is used in the same way as {lnum}.
-+		Non-existing lines are silently omitted.
-+		When {end} is before {lnum} an empty |List| is returned.
-+		Example: >
-+			:let start = line('.')
-+			:let end = search("^$") - 1
-+			:let lines = getline(start, end)
-+
-+<		To get lines from another buffer see |getbufline()|
-+
-+getloclist({nr})					*getloclist()*
-+		Returns a list with all the entries in the location list for
-+		window {nr}. When {nr} is zero the current window is used.
-+		For a location list window, the displayed location list is
-+		returned.  For an invalid window number {nr}, an empty list is
-+		returned. Otherwise, same as |getqflist()|.
-+
-+getmatches()						*getmatches()*
-+		Returns a |List| with all matches previously defined by
-+		|matchadd()| and the |:match| commands.  |getmatches()| is
-+		useful in combination with |setmatches()|, as |setmatches()|
-+		can restore a list of matches saved by |getmatches()|.
-+		Example: >
-+			:echo getmatches()
-+<			[{'group': 'MyGroup1', 'pattern': 'TODO',
-+			'priority': 10, 'id': 1}, {'group': 'MyGroup2',
-+			'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
-+			:let m = getmatches()
-+			:call clearmatches()
-+			:echo getmatches()
-+<			[] >
-+			:call setmatches(m)
-+			:echo getmatches()
-+<			[{'group': 'MyGroup1', 'pattern': 'TODO',
-+			'priority': 10, 'id': 1}, {'group': 'MyGroup2',
-+			'pattern': 'FIXME', 'priority': 10, 'id': 2}] >
-+			:unlet m
-+<
-+
-+getqflist()						*getqflist()*
-+		Returns a list with all the current quickfix errors.  Each
-+		list item is a dictionary with these entries:
-+			bufnr	number of buffer that has the file name, use
-+				bufname() to get the name
-+			lnum	line number in the buffer (first line is 1)
-+			col	column number (first column is 1)
-+			vcol	non-zero: "col" is visual column
-+				zero: "col" is byte index
-+			nr	error number
-+			pattern	search pattern used to locate the error
-+			text	description of the error
-+			type	type of the error, 'E', '1', etc.
-+			valid	non-zero: recognized error message
-+
-+		When there is no error list or it's empty an empty list is
-+		returned. Quickfix list entries with non-existing buffer
-+		number are returned with "bufnr" set to zero.
-+
-+		Useful application: Find pattern matches in multiple files and
-+		do something with them: >
-+			:vimgrep /theword/jg *.c
-+			:for d in getqflist()
-+			:   echo bufname(d.bufnr) ':' d.lnum '=' d.text
-+			:endfor
-+
-+
-+getreg([{regname} [, 1]])				*getreg()*
-+		The result is a String, which is the contents of register
-+		{regname}.  Example: >
-+			:let cliptext = getreg('*')
-+<		getreg('=') returns the last evaluated value of the expression
-+		register.  (For use in maps.)
-+		getreg('=', 1) returns the expression itself, so that it can
-+		be restored with |setreg()|.  For other registers the extra
-+		argument is ignored, thus you can always give it.
-+		If {regname} is not specified, |v:register| is used.
-+
-+
-+getregtype([{regname}])					*getregtype()*
-+		The result is a String, which is type of register {regname}.
-+		The value will be one of:
-+		    "v"			for |characterwise| text
-+		    "V"			for |linewise| text
-+		    "<CTRL-V>{width}"	for |blockwise-visual| text
-+		    0			for an empty or unknown register
-+		<CTRL-V> is one character with value 0x16.
-+		If {regname} is not specified, |v:register| is used.
-+
-+gettabvar({tabnr}, {varname})				*gettabvar()*
-+		Get the value of a tab-local variable {varname} in tab page
-+		{tabnr}. |t:var|
-+		Tabs are numbered starting with one.
-+		Note that the name without "t:" must be used.
-+
-+gettabwinvar({tabnr}, {winnr}, {varname})		*gettabwinvar()*
-+		Get the value of window-local variable {varname} in window
-+		{winnr} in tab page {tabnr}.
-+		When {varname} starts with "&" get the value of a window-local
-+		option.
-+		Tabs are numbered starting with one.  For the current tabpage
-+		use |getwinvar()|.
-+		When {winnr} is zero the current window is used.
-+		This also works for a global option, buffer-local option and
-+		window-local option, but it doesn't work for a global variable
-+		or buffer-local variable.
-+		When {varname} is empty a dictionary with all window-local
-+		variables is returned.
-+		Note that {varname} must be the name without "w:".
-+		Examples: >
-+			:let list_is_on = gettabwinvar(1, 2, '&list')
-+			:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
-+<
-+							*getwinposx()*
-+getwinposx()	The result is a Number, which is the X coordinate in pixels of
-+		the left hand side of the GUI Vim window.  The result will be
-+		-1 if the information is not available.
-+
-+							*getwinposy()*
-+getwinposy()	The result is a Number, which is the Y coordinate in pixels of
-+		the top of the GUI Vim window.	The result will be -1 if the
-+		information is not available.
-+
-+getwinvar({winnr}, {varname})				*getwinvar()*
-+		Like |gettabwinvar()| for the current tabpage.
-+		Examples: >
-+			:let list_is_on = getwinvar(2, '&list')
-+			:echo "myvar = " . getwinvar(1, 'myvar')
-+<
-+glob({expr} [, {flag}])					*glob()*
-+		Expand the file wildcards in {expr}.  See |wildcards| for the
-+		use of special characters.
-+		The result is a String.
-+		When there are several matches, they are separated by <NL>
-+		characters.
-+		Unless the optional {flag} argument is given and is non-zero,
-+		the 'suffixes' and 'wildignore' options apply: Names matching
-+		one of the patterns in 'wildignore' will be skipped and
-+		'suffixes' affect the ordering of matches.
-+		If the expansion fails, the result is an empty string.
-+		A name for a non-existing file is not included.
-+
-+		For most systems backticks can be used to get files names from
-+		any external command.  Example: >
-+			:let tagfiles = glob("`find . -name tags -print`")
-+			:let &tags = substitute(tagfiles, "\n", ",", "g")
-+<		The result of the program inside the backticks should be one
-+		item per line.	Spaces inside an item are allowed.
-+
-+		See |expand()| for expanding special Vim variables.  See
-+		|system()| for getting the raw output of an external command.
-+
-+globpath({path}, {expr} [, {flag}])			*globpath()*
-+		Perform glob() on all directories in {path} and concatenate
-+		the results.  Example: >
-+			:echo globpath(&rtp, "syntax/c.vim")
-+<		{path} is a comma-separated list of directory names.  Each
-+		directory name is prepended to {expr} and expanded like with
-+		|glob()|.  A path separator is inserted when needed.
-+		To add a comma inside a directory name escape it with a
-+		backslash.  Note that on MS-Windows a directory may have a
-+		trailing backslash, remove it if you put a comma after it.
-+		If the expansion fails for one of the directories, there is no
-+		error message.
-+		Unless the optional {flag} argument is given and is non-zero,
-+		the 'suffixes' and 'wildignore' options apply: Names matching
-+		one of the patterns in 'wildignore' will be skipped and
-+		'suffixes' affect the ordering of matches.
-+
-+		The "**" item can be used to search in a directory tree.
-+		For example, to find all "README.txt" files in the directories
-+		in 'runtimepath' and below: >
-+			:echo globpath(&rtp, "**/README.txt")
-+<		Upwards search and limiting the depth of "**" is not
-+		supported, thus using 'path' will not always work properly.
-+
-+							*has()*
-+has({feature})	The result is a Number, which is 1 if the feature {feature} is
-+		supported, zero otherwise.  The {feature} argument is a
-+		string.  See |feature-list| below.
-+		Also see |exists()|.
-+
-+
-+has_key({dict}, {key})					*has_key()*
-+		The result is a Number, which is 1 if |Dictionary| {dict} has
-+		an entry with key {key}.  Zero otherwise.
-+
-+haslocaldir()						*haslocaldir()*
-+		The result is a Number, which is 1 when the current
-+		window has set a local path via |:lcd|, and 0 otherwise.
-+
-+hasmapto({what} [, {mode} [, {abbr}]])			*hasmapto()*
-+		The result is a Number, which is 1 if there is a mapping that
-+		contains {what} in somewhere in the rhs (what it is mapped to)
-+		and this mapping exists in one of the modes indicated by
-+		{mode}.
-+		When {abbr} is there and it is non-zero use abbreviations
-+		instead of mappings.  Don't forget to specify Insert and/or
-+		Command-line mode.
-+		Both the global mappings and the mappings local to the current
-+		buffer are checked for a match.
-+		If no matching mapping is found 0 is returned.
-+		The following characters are recognized in {mode}:
-+			n	Normal mode
-+			v	Visual mode
-+			o	Operator-pending mode
-+			i	Insert mode
-+			l	Language-Argument ("r", "f", "t", etc.)
-+			c	Command-line mode
-+		When {mode} is omitted, "nvo" is used.
-+
-+		This function is useful to check if a mapping already exists
-+		to a function in a Vim script.	Example: >
-+			:if !hasmapto('\ABCdoit')
-+			:   map <Leader>d \ABCdoit
-+			:endif
-+<		This installs the mapping to "\ABCdoit" only if there isn't
-+		already a mapping to "\ABCdoit".
-+
-+histadd({history}, {item})				*histadd()*
-+		Add the String {item} to the history {history} which can be
-+		one of:					*hist-names*
-+			"cmd"	 or ":"	  command line history
-+			"search" or "/"   search pattern history
-+			"expr"	 or "="   typed expression history
-+			"input"  or "@"	  input line history
-+		If {item} does already exist in the history, it will be
-+		shifted to become the newest entry.
-+		The result is a Number: 1 if the operation was successful,
-+		otherwise 0 is returned.
-+
-+		Example: >
-+			:call histadd("input", strftime("%Y %b %d"))
-+			:let date=input("Enter date: ")
-+<		This function is not available in the |sandbox|.
-+
-+histdel({history} [, {item}])				*histdel()*
-+		Clear {history}, i.e. delete all its entries.  See |hist-names|
-+		for the possible values of {history}.
-+
-+		If the parameter {item} evaluates to a String, it is used as a
-+		regular expression.  All entries matching that expression will
-+		be removed from the history (if there are any).
-+		Upper/lowercase must match, unless "\c" is used |/\c|.
-+		If {item} evaluates to a Number, it will be interpreted as
-+		an index, see |:history-indexing|.  The respective entry will
-+		be removed if it exists.
-+
-+		The result is a Number: 1 for a successful operation,
-+		otherwise 0 is returned.
-+
-+		Examples:
-+		Clear expression register history: >
-+			:call histdel("expr")
-+<
-+		Remove all entries starting with "*" from the search history: >
-+			:call histdel("/", '^\*')
-+<
-+		The following three are equivalent: >
-+			:call histdel("search", histnr("search"))
-+			:call histdel("search", -1)
-+			:call histdel("search", '^'.histget("search", -1).'$')
-+<
-+		To delete the last search pattern and use the last-but-one for
-+		the "n" command and 'hlsearch': >
-+			:call histdel("search", -1)
-+			:let @/ = histget("search", -1)
-+
-+histget({history} [, {index}])				*histget()*
-+		The result is a String, the entry with Number {index} from
-+		{history}.  See |hist-names| for the possible values of
-+		{history}, and |:history-indexing| for {index}.  If there is
-+		no such entry, an empty String is returned.  When {index} is
-+		omitted, the most recent item from the history is used.
-+
-+		Examples:
-+		Redo the second last search from history. >
-+			:execute '/' . histget("search", -2)
-+
-+<		Define an Ex command ":H {num}" that supports re-execution of
-+		the {num}th entry from the output of |:history|. >
-+			:command -nargs=1 H execute histget("cmd", 0+<args>)
-+<
-+histnr({history})					*histnr()*
-+		The result is the Number of the current entry in {history}.
-+		See |hist-names| for the possible values of {history}.
-+		If an error occurred, -1 is returned.
-+
-+		Example: >
-+			:let inp_index = histnr("expr")
-+<
-+hlexists({name})					*hlexists()*
-+		The result is a Number, which is non-zero if a highlight group
-+		called {name} exists.  This is when the group has been
-+		defined in some way.  Not necessarily when highlighting has
-+		been defined for it, it may also have been used for a syntax
-+		item.
-+							*highlight_exists()*
-+		Obsolete name: highlight_exists().
-+
-+							*hlID()*
-+hlID({name})	The result is a Number, which is the ID of the highlight group
-+		with name {name}.  When the highlight group doesn't exist,
-+		zero is returned.
-+		This can be used to retrieve information about the highlight
-+		group.	For example, to get the background color of the
-+		"Comment" group: >
-+	:echo synIDattr(synIDtrans(hlID("Comment")), "bg")
-+<							*highlightID()*
-+		Obsolete name: highlightID().
-+
-+hostname()						*hostname()*
-+		The result is a String, which is the name of the machine on
-+		which Vim is currently running.  Machine names greater than
-+		256 characters long are truncated.
-+
-+iconv({expr}, {from}, {to})				*iconv()*
-+		The result is a String, which is the text {expr} converted
-+		from encoding {from} to encoding {to}.
-+		When the conversion completely fails an empty string is
-+		returned.  When some characters could not be converted they
-+		are replaced with "?".
-+		The encoding names are whatever the iconv() library function
-+		can accept, see ":!man 3 iconv".
-+		Most conversions require Vim to be compiled with the |+iconv|
-+		feature.  Otherwise only UTF-8 to latin1 conversion and back
-+		can be done.
-+		This can be used to display messages with special characters,
-+		no matter what 'encoding' is set to.  Write the message in
-+		UTF-8 and use: >
-+			echo iconv(utf8_str, "utf-8", &enc)
-+<		Note that Vim uses UTF-8 for all Unicode encodings, conversion
-+		from/to UCS-2 is automatically changed to use UTF-8.  You
-+		cannot use UCS-2 in a string anyway, because of the NUL bytes.
-+		{only available when compiled with the |+multi_byte| feature}
-+
-+							*indent()*
-+indent({lnum})	The result is a Number, which is indent of line {lnum} in the
-+		current buffer.  The indent is counted in spaces, the value
-+		of 'tabstop' is relevant.  {lnum} is used just like in
-+		|getline()|.
-+		When {lnum} is invalid -1 is returned.
-+
-+
-+index({list}, {expr} [, {start} [, {ic}]])			*index()*
-+		Return the lowest index in |List| {list} where the item has a
-+		value equal to {expr}.  There is no automatic conversion, so
-+		the String "4" is different from the Number 4.  And the number
-+		4 is different from the Float 4.0.  The value of 'ignorecase'
-+		is not used here, case always matters.
-+		If {start} is given then start looking at the item with index
-+		{start} (may be negative for an item relative to the end).
-+		When {ic} is given and it is non-zero, ignore case.  Otherwise
-+		case must match.
-+		-1 is returned when {expr} is not found in {list}.
-+		Example: >
-+			:let idx = index(words, "the")
-+			:if index(numbers, 123) >= 0
-+
-+
-+input({prompt} [, {text} [, {completion}]])		*input()*
-+		The result is a String, which is whatever the user typed on
-+		the command-line.  The {prompt} argument is either a prompt
-+		string, or a blank string (for no prompt).  A '\n' can be used
-+		in the prompt to start a new line.
-+		The highlighting set with |:echohl| is used for the prompt.
-+		The input is entered just like a command-line, with the same
-+		editing commands and mappings.	There is a separate history
-+		for lines typed for input().
-+		Example: >
-+			:if input("Coffee or beer? ") == "beer"
-+			:  echo "Cheers!"
-+			:endif
-+<
-+		If the optional {text} argument is present and not empty, this
-+		is used for the default reply, as if the user typed this.
-+		Example: >
-+			:let color = input("Color? ", "white")
-+
-+<		The optional {completion} argument specifies the type of
-+		completion supported for the input.  Without it completion is
-+		not performed.	The supported completion types are the same as
-+		that can be supplied to a user-defined command using the
-+		"-complete=" argument.	Refer to |:command-completion| for
-+		more information.  Example: >
-+			let fname = input("File: ", "", "file")
-+<
-+		NOTE: This function must not be used in a startup file, for
-+		the versions that only run in GUI mode (e.g., the Win32 GUI).
-+		Note: When input() is called from within a mapping it will
-+		consume remaining characters from that mapping, because a
-+		mapping is handled like the characters were typed.
-+		Use |inputsave()| before input() and |inputrestore()|
-+		after input() to avoid that.  Another solution is to avoid
-+		that further characters follow in the mapping, e.g., by using
-+		|:execute| or |:normal|.
-+
-+		Example with a mapping: >
-+			:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
-+			:function GetFoo()
-+			:  call inputsave()
-+			:  let g:Foo = input("enter search pattern: ")
-+			:  call inputrestore()
-+			:endfunction
-+
-+inputdialog({prompt} [, {text} [, {cancelreturn}]])		*inputdialog()*
-+		Like |input()|, but when the GUI is running and text dialogs
-+		are supported, a dialog window pops up to input the text.
-+		Example: >
-+			:let n = inputdialog("value for shiftwidth", &sw)
-+			:if n != ""
-+			:  let &sw = n
-+			:endif
-+<		When the dialog is cancelled {cancelreturn} is returned.  When
-+		omitted an empty string is returned.
-+		Hitting <Enter> works like pressing the OK button.  Hitting
-+		<Esc> works like pressing the Cancel button.
-+		NOTE: Command-line completion is not supported.
-+
-+inputlist({textlist})					*inputlist()*
-+		{textlist} must be a |List| of strings.  This |List| is
-+		displayed, one string per line.  The user will be prompted to
-+		enter a number, which is returned.
-+		The user can also select an item by clicking on it with the
-+		mouse.	For the first string 0 is returned.  When clicking
-+		above the first item a negative number is returned.  When
-+		clicking on the prompt one more than the length of {textlist}
-+		is returned.
-+		Make sure {textlist} has less than 'lines' entries, otherwise
-+		it won't work.	It's a good idea to put the entry number at
-+		the start of the string.  And put a prompt in the first item.
-+		Example: >
-+			let color = inputlist(['Select color:', '1. red',
-+				\ '2. green', '3. blue'])
-+
-+inputrestore()						*inputrestore()*
-+		Restore typeahead that was saved with a previous |inputsave()|.
-+		Should be called the same number of times inputsave() is
-+		called.  Calling it more often is harmless though.
-+		Returns 1 when there is nothing to restore, 0 otherwise.
-+
-+inputsave()						*inputsave()*
-+		Preserve typeahead (also from mappings) and clear it, so that
-+		a following prompt gets input from the user.  Should be
-+		followed by a matching inputrestore() after the prompt.  Can
-+		be used several times, in which case there must be just as
-+		many inputrestore() calls.
-+		Returns 1 when out of memory, 0 otherwise.
-+
-+inputsecret({prompt} [, {text}])			*inputsecret()*
-+		This function acts much like the |input()| function with but
-+		two exceptions:
-+		a) the user's response will be displayed as a sequence of
-+		asterisks ("*") thereby keeping the entry secret, and
-+		b) the user's response will not be recorded on the input
-+		|history| stack.
-+		The result is a String, which is whatever the user actually
-+		typed on the command-line in response to the issued prompt.
-+		NOTE: Command-line completion is not supported.
-+
-+insert({list}, {item} [, {idx}])			*insert()*
-+		Insert {item} at the start of |List| {list}.
-+		If {idx} is specified insert {item} before the item with index
-+		{idx}.	If {idx} is zero it goes before the first item, just
-+		like omitting {idx}.  A negative {idx} is also possible, see
-+		|list-index|.  -1 inserts just before the last item.
-+		Returns the resulting |List|.  Examples: >
-+			:let mylist = insert([2, 3, 5], 1)
-+			:call insert(mylist, 4, -1)
-+			:call insert(mylist, 6, len(mylist))
-+<		The last example can be done simpler with |add()|.
-+		Note that when {item} is a |List| it is inserted as a single
-+		item.  Use |extend()| to concatenate |Lists|.
-+
-+isdirectory({directory})				*isdirectory()*
-+		The result is a Number, which is non-zero when a directory
-+		with the name {directory} exists.  If {directory} doesn't
-+		exist, or isn't a directory, the result is FALSE.  {directory}
-+		is any expression, which is used as a String.
-+
-+islocked({expr})					*islocked()* *E786*
-+		The result is a Number, which is non-zero when {expr} is the
-+		name of a locked variable.
-+		{expr} must be the name of a variable, |List| item or
-+		|Dictionary| entry, not the variable itself!  Example: >
-+			:let alist = [0, ['a', 'b'], 2, 3]
-+			:lockvar 1 alist
-+			:echo islocked('alist')		" 1
-+			:echo islocked('alist[1]')	" 0
-+
-+<		When {expr} is a variable that does not exist you get an error
-+		message.  Use |exists()| to check for existence.
-+
-+items({dict})						*items()*
-+		Return a |List| with all the key-value pairs of {dict}.  Each
-+		|List| item is a list with two items: the key of a {dict}
-+		entry and the value of this entry.  The |List| is in arbitrary
-+		order.
-+
-+
-+join({list} [, {sep}])					*join()*
-+		Join the items in {list} together into one String.
-+		When {sep} is specified it is put in between the items.  If
-+		{sep} is omitted a single space is used.
-+		Note that {sep} is not added at the end.  You might want to
-+		add it there too: >
-+			let lines = join(mylist, "\n") . "\n"
-+<		String items are used as-is.  |Lists| and |Dictionaries| are
-+		converted into a string like with |string()|.
-+		The opposite function is |split()|.
-+
-+keys({dict})						*keys()*
-+		Return a |List| with all the keys of {dict}.  The |List| is in
-+		arbitrary order.
-+
-+							*len()* *E701*
-+len({expr})	The result is a Number, which is the length of the argument.
-+		When {expr} is a String or a Number the length in bytes is
-+		used, as with |strlen()|.
-+		When {expr} is a |List| the number of items in the |List| is
-+		returned.
-+		When {expr} is a |Dictionary| the number of entries in the
-+		|Dictionary| is returned.
-+		Otherwise an error is given.
-+
-+						*libcall()* *E364* *E368*
-+libcall({libname}, {funcname}, {argument})
-+		Call function {funcname} in the run-time library {libname}
-+		with single argument {argument}.
-+		This is useful to call functions in a library that you
-+		especially made to be used with Vim.  Since only one argument
-+		is possible, calling standard library functions is rather
-+		limited.
-+		The result is the String returned by the function.  If the
-+		function returns NULL, this will appear as an empty string ""
-+		to Vim.
-+		If the function returns a number, use libcallnr()!
-+		If {argument} is a number, it is passed to the function as an
-+		int; if {argument} is a string, it is passed as a
-+		null-terminated string.
-+		This function will fail in |restricted-mode|.
-+
-+		libcall() allows you to write your own 'plug-in' extensions to
-+		Vim without having to recompile the program.  It is NOT a
-+		means to call system functions!  If you try to do so Vim will
-+		very probably crash.
-+
-+		For Win32, the functions you write must be placed in a DLL
-+		and use the normal C calling convention (NOT Pascal which is
-+		used in Windows System DLLs).  The function must take exactly
-+		one parameter, either a character pointer or a long integer,
-+		and must return a character pointer or NULL.  The character
-+		pointer returned must point to memory that will remain valid
-+		after the function has returned (e.g. in static data in the
-+		DLL).  If it points to allocated memory, that memory will
-+		leak away.  Using a static buffer in the function should work,
-+		it's then freed when the DLL is unloaded.
-+
-+		WARNING: If the function returns a non-valid pointer, Vim may
-+		crash!	This also happens if the function returns a number,
-+		because Vim thinks it's a pointer.
-+		For Win32 systems, {libname} should be the filename of the DLL
-+		without the ".DLL" suffix.  A full path is only required if
-+		the DLL is not in the usual places.
-+		For Unix: When compiling your own plugins, remember that the
-+		object code must be compiled as position-independent ('PIC').
-+		{only in Win32 and some Unix versions, when the |+libcall|
-+		feature is present}
-+		Examples: >
-+			:echo libcall("libc.so", "getenv", "HOME")
-+<
-+							*libcallnr()*
-+libcallnr({libname}, {funcname}, {argument})
-+		Just like |libcall()|, but used for a function that returns an
-+		int instead of a string.
-+		{only in Win32 on some Unix versions, when the |+libcall|
-+		feature is present}
-+		Examples: >
-+			:echo libcallnr("/usr/lib/libc.so", "getpid", "")
-+			:call libcallnr("libc.so", "printf", "Hello World!\n")
-+			:call libcallnr("libc.so", "sleep", 10)
-+<
-+							*line()*
-+line({expr})	The result is a Number, which is the line number of the file
-+		position given with {expr}.  The accepted positions are:
-+		    .	    the cursor position
-+		    $	    the last line in the current buffer
-+		    'x	    position of mark x (if the mark is not set, 0 is
-+			    returned)
-+		    w0	    first line visible in current window
-+		    w$	    last line visible in current window
-+		    v	    In Visual mode: the start of the Visual area (the
-+			    cursor is the end).  When not in Visual mode
-+			    returns the cursor position.  Differs from |'<| in
-+			    that it's updated right away.
-+		Note that a mark in another file can be used.  The line number
-+		then applies to another buffer.
-+		To get the column number use |col()|.  To get both use
-+		|getpos()|.
-+		Examples: >
-+			line(".")		line number of the cursor
-+			line("'t")		line number of mark t
-+			line("'" . marker)	line number of mark marker
-+<							*last-position-jump*
-+		This autocommand jumps to the last known position in a file
-+		just after opening it, if the '" mark is set: >
-+	:au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g`\"" | endif
-+
-+line2byte({lnum})					*line2byte()*
-+		Return the byte count from the start of the buffer for line
-+		{lnum}.  This includes the end-of-line character, depending on
-+		the 'fileformat' option for the current buffer.  The first
-+		line returns 1.
-+		This can also be used to get the byte count for the line just
-+		below the last line: >
-+			line2byte(line("$") + 1)
-+<		This is the file size plus one.
-+		When {lnum} is invalid, or the |+byte_offset| feature has been
-+		disabled at compile time, -1 is returned.
-+		Also see |byte2line()|, |go| and |:goto|.
-+
-+lispindent({lnum})					*lispindent()*
-+		Get the amount of indent for line {lnum} according the lisp
-+		indenting rules, as with 'lisp'.
-+		The indent is counted in spaces, the value of 'tabstop' is
-+		relevant.  {lnum} is used just like in |getline()|.
-+		When {lnum} is invalid or Vim was not compiled the
-+		|+lispindent| feature, -1 is returned.
-+
-+localtime()						*localtime()*
-+		Return the current time, measured as seconds since 1st Jan
-+		1970.  See also |strftime()| and |getftime()|.
-+
-+
-+log({expr})						*log()*
-+		Return the natural logarithm (base e) of {expr} as a |Float|.
-+		{expr} must evaluate to a |Float| or a |Number| in the range
-+		(0, inf].
-+		Examples: >
-+			:echo log(10)
-+<			2.302585 >
-+			:echo log(exp(5))
-+<			5.0
-+		{only available when compiled with the |+float| feature}
-+
-+
-+log10({expr})						*log10()*
-+		Return the logarithm of Float {expr} to base 10 as a |Float|.
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo log10(1000)
-+<			3.0 >
-+			:echo log10(0.01)
-+<			-2.0
-+		{only available when compiled with the |+float| feature}
-+		
-+map({expr}, {string})					*map()*
-+		{expr} must be a |List| or a |Dictionary|.
-+		Replace each item in {expr} with the result of evaluating
-+		{string}.
-+		Inside {string} |v:val| has the value of the current item.
-+		For a |Dictionary| |v:key| has the key of the current item
-+		and for a |List| |v:key| has the index of the current item.
-+		Example: >
-+			:call map(mylist, '"> " . v:val . " <"')
-+<		This puts "> " before and " <" after each item in "mylist".
-+
-+		Note that {string} is the result of an expression and is then
-+		used as an expression again.  Often it is good to use a
-+		|literal-string| to avoid having to double backslashes.  You
-+		still have to double ' quotes
-+
-+		The operation is done in-place.  If you want a |List| or
-+		|Dictionary| to remain unmodified make a copy first: >
-+			:let tlist = map(copy(mylist), ' & . "\t"')
-+
-+<		Returns {expr}, the |List| or |Dictionary| that was filtered.
-+		When an error is encountered while evaluating {string} no
-+		further items in {expr} are processed.
-+
-+
-+maparg({name}[, {mode} [, {abbr} [, {dict}]]])			*maparg()*
-+		When {dict} is omitted or zero: Return the rhs of mapping
-+		{name} in mode {mode}.  The returned String has special
-+		characters translated like in the output of the ":map" command
-+		listing.
-+		
-+		When there is no mapping for {name}, an empty String is
-+		returned.
-+
-+		The {name} can have special key names, like in the ":map"
-+		command.
-+
-+		{mode} can be one of these strings:
-+			"n"	Normal
-+			"v"	Visual (including Select)
-+			"o"	Operator-pending
-+			"i"	Insert
-+			"c"	Cmd-line
-+			"s"	Select
-+			"x"	Visual
-+			"l"	langmap |language-mapping|
-+			""	Normal, Visual and Operator-pending
-+		When {mode} is omitted, the modes for "" are used.
-+
-+		When {abbr} is there and it is non-zero use abbreviations
-+		instead of mappings.
-+
-+		When {dict} is there and it is non-zero return a dictionary
-+		containing all the information of the mapping with the
-+		following items:
-+		  "lhs"	     The {lhs} of the mapping.
-+		  "rhs"	     The {rhs} of the mapping as typed.
-+		  "silent"   1 for a |:map-silent| mapping, else 0.
-+		  "noremap"  1 if the {rhs} of the mapping is remappable.
-+		  "expr"     1 for an expression mapping (|:map-<expr>|).
-+		  "buffer"   1 for a buffer local mapping (|:map-local|).
-+		  "mode"     Modes for which the mapping is defined. In
-+			     addition to the modes mentioned above, these
-+			     characters will be used:
-+			     " "     Normal, Visual and Operator-pending
-+			     "!"     Insert and Commandline mode
-+				     (|mapmpde-ic|)
-+		  "sid"	     the Script local ID, used for <sid> mappings
-+			     (|<SID>|)
-+
-+		The mappings local to the current buffer are checked first,
-+		then the global mappings.
-+		This function can be used to map a key even when it's already
-+		mapped, and have it do the original mapping too.  Sketch: >
-+			exe 'nnoremap <Tab> ==' . maparg('<Tab>', 'n')
-+
-+
-+mapcheck({name}[, {mode} [, {abbr}]])			*mapcheck()*
-+		Check if there is a mapping that matches with {name} in mode
-+		{mode}.  See |maparg()| for {mode} and special names in
-+		{name}.
-+		When {abbr} is there and it is non-zero use abbreviations
-+		instead of mappings.
-+		A match happens with a mapping that starts with {name} and
-+		with a mapping which is equal to the start of {name}.
-+
-+			matches mapping "a"	"ab"	"abc" ~
-+		   mapcheck("a")	yes	yes	 yes
-+		   mapcheck("abc")	yes	yes	 yes
-+		   mapcheck("ax")	yes	no	 no
-+		   mapcheck("b")	no	no	 no
-+
-+		The difference with maparg() is that mapcheck() finds a
-+		mapping that matches with {name}, while maparg() only finds a
-+		mapping for {name} exactly.
-+		When there is no mapping that starts with {name}, an empty
-+		String is returned.  If there is one, the rhs of that mapping
-+		is returned.  If there are several mappings that start with
-+		{name}, the rhs of one of them is returned.
-+		The mappings local to the current buffer are checked first,
-+		then the global mappings.
-+		This function can be used to check if a mapping can be added
-+		without being ambiguous.  Example: >
-+	:if mapcheck("_vv") == ""
-+	:   map _vv :set guifont=7x13<CR>
-+	:endif
-+<		This avoids adding the "_vv" mapping when there already is a
-+		mapping for "_v" or for "_vvv".
-+
-+match({expr}, {pat}[, {start}[, {count}]])			*match()*
-+		When {expr} is a |List| then this returns the index of the
-+		first item where {pat} matches.  Each item is used as a
-+		String, |Lists| and |Dictionaries| are used as echoed.
-+		Otherwise, {expr} is used as a String.	The result is a
-+		Number, which gives the index (byte offset) in {expr} where
-+		{pat} matches.
-+		A match at the first character or |List| item returns zero.
-+		If there is no match -1 is returned.
-+		Example: >
-+			:echo match("testing", "ing")	" results in 4
-+			:echo match([1, 'x'], '\a')	" results in 1
-+<		See |string-match| for how {pat} is used.
-+								*strpbrk()*
-+		Vim doesn't have a strpbrk() function.	But you can do: >
-+			:let sepidx = match(line, '[.,;: \t]')
-+<								*strcasestr()*
-+		Vim doesn't have a strcasestr() function.  But you can add
-+		"\c" to the pattern to ignore case: >
-+			:let idx = match(haystack, '\cneedle')
-+<
-+		If {start} is given, the search starts from byte index
-+		{start} in a String or item {start} in a |List|.
-+		The result, however, is still the index counted from the
-+		first character/item.  Example: >
-+			:echo match("testing", "ing", 2)
-+<		result is again "4". >
-+			:echo match("testing", "ing", 4)
-+<		result is again "4". >
-+			:echo match("testing", "t", 2)
-+<		result is "3".
-+		For a String, if {start} > 0 then it is like the string starts
-+		{start} bytes later, thus "^" will match at {start}.  Except
-+		when {count} is given, then it's like matches before the
-+		{start} byte are ignored (this is a bit complicated to keep it
-+		backwards compatible).
-+		For a String, if {start} < 0, it will be set to 0.  For a list
-+		the index is counted from the end.
-+		If {start} is out of range ({start} > strlen({expr}) for a
-+		String or {start} > len({expr}) for a |List|) -1 is returned.
-+
-+		When {count} is given use the {count}'th match.  When a match
-+		is found in a String the search for the next one starts one
-+		character further.  Thus this example results in 1: >
-+			echo match("testing", "..", 0, 2)
-+<		In a |List| the search continues in the next item.
-+		Note that when {count} is added the way {start} works changes,
-+		see above.
-+
-+		See |pattern| for the patterns that are accepted.
-+		The 'ignorecase' option is used to set the ignore-caseness of
-+		the pattern.  'smartcase' is NOT used.	The matching is always
-+		done like 'magic' is set and 'cpoptions' is empty.
-+
-+					*matchadd()* *E798* *E799* *E801*
-+matchadd({group}, {pattern}[, {priority}[, {id}]])
-+		Defines a pattern to be highlighted in the current window (a
-+		"match").  It will be highlighted with {group}.  Returns an
-+		identification number (ID), which can be used to delete the
-+		match using |matchdelete()|.
-+
-+		The optional {priority} argument assigns a priority to the
-+		match.	A match with a high priority will have its
-+		highlighting overrule that of a match with a lower priority.
-+		A priority is specified as an integer (negative numbers are no
-+		exception).  If the {priority} argument is not specified, the
-+		default priority is 10.  The priority of 'hlsearch' is zero,
-+		hence all matches with a priority greater than zero will
-+		overrule it.  Syntax highlighting (see 'syntax') is a separate
-+		mechanism, and regardless of the chosen priority a match will
-+		always overrule syntax highlighting.
-+
-+		The optional {id} argument allows the request for a specific
-+		match ID.  If a specified ID is already taken, an error
-+		message will appear and the match will not be added.  An ID
-+		is specified as a positive integer (zero excluded).  IDs 1, 2
-+		and 3 are reserved for |:match|, |:2match| and |:3match|,
-+		respectively.  If the {id} argument is not specified,
-+		|matchadd()| automatically chooses a free ID.
-+
-+		The number of matches is not limited, as it is the case with
-+		the |:match| commands.
-+
-+		Example: >
-+			:highlight MyGroup ctermbg=green guibg=green
-+			:let m = matchadd("MyGroup", "TODO")
-+<		Deletion of the pattern: >
-+			:call matchdelete(m)
-+
-+<		A list of matches defined by |matchadd()| and |:match| are
-+		available from |getmatches()|.	All matches can be deleted in
-+		one operation by |clearmatches()|.
-+
-+matcharg({nr})							*matcharg()*
-+		Selects the {nr} match item, as set with a |:match|,
-+		|:2match| or |:3match| command.
-+		Return a |List| with two elements:
-+			The name of the highlight group used
-+			The pattern used.
-+		When {nr} is not 1, 2 or 3 returns an empty |List|.
-+		When there is no match item set returns ['', ''].
-+		This is useful to save and restore a |:match|.
-+		Highlighting matches using the |:match| commands are limited
-+		to three matches. |matchadd()| does not have this limitation.
-+
-+matchdelete({id})			       *matchdelete()* *E802* *E803*
-+		Deletes a match with ID {id} previously defined by |matchadd()|
-+		or one of the |:match| commands.  Returns 0 if successful,
-+		otherwise -1.  See example for |matchadd()|.  All matches can
-+		be deleted in one operation by |clearmatches()|.
-+
-+matchend({expr}, {pat}[, {start}[, {count}]])			*matchend()*
-+		Same as |match()|, but return the index of first character
-+		after the match.  Example: >
-+			:echo matchend("testing", "ing")
-+<		results in "7".
-+							*strspn()* *strcspn()*
-+		Vim doesn't have a strspn() or strcspn() function, but you can
-+		do it with matchend(): >
-+			:let span = matchend(line, '[a-zA-Z]')
-+			:let span = matchend(line, '[^a-zA-Z]')
-+<		Except that -1 is returned when there are no matches.
-+
-+		The {start}, if given, has the same meaning as for |match()|. >
-+			:echo matchend("testing", "ing", 2)
-+<		results in "7". >
-+			:echo matchend("testing", "ing", 5)
-+<		result is "-1".
-+		When {expr} is a |List| the result is equal to |match()|.
-+
-+matchlist({expr}, {pat}[, {start}[, {count}]])			*matchlist()*
-+		Same as |match()|, but return a |List|.  The first item in the
-+		list is the matched string, same as what matchstr() would
-+		return.  Following items are submatches, like "\1", "\2", etc.
-+		in |:substitute|.  When an optional submatch didn't match an
-+		empty string is used.  Example: >
-+			echo matchlist('acd', '\(a\)\?\(b\)\?\(c\)\?\(.*\)')
-+<		Results in: ['acd', 'a', '', 'c', 'd', '', '', '', '', '']
-+		When there is no match an empty list is returned.
-+
-+matchstr({expr}, {pat}[, {start}[, {count}]])			*matchstr()*
-+		Same as |match()|, but return the matched string.  Example: >
-+			:echo matchstr("testing", "ing")
-+<		results in "ing".
-+		When there is no match "" is returned.
-+		The {start}, if given, has the same meaning as for |match()|. >
-+			:echo matchstr("testing", "ing", 2)
-+<		results in "ing". >
-+			:echo matchstr("testing", "ing", 5)
-+<		result is "".
-+		When {expr} is a |List| then the matching item is returned.
-+		The type isn't changed, it's not necessarily a String.
-+
-+							*max()*
-+max({list})	Return the maximum value of all items in {list}.
-+		If {list} is not a list or one of the items in {list} cannot
-+		be used as a Number this results in an error.
-+		An empty |List| results in zero.
-+
-+							*min()*
-+min({list})	Return the minimum value of all items in {list}.
-+		If {list} is not a list or one of the items in {list} cannot
-+		be used as a Number this results in an error.
-+		An empty |List| results in zero.
-+
-+							*mkdir()* *E739*
-+mkdir({name} [, {path} [, {prot}]])
-+		Create directory {name}.
-+		If {path} is "p" then intermediate directories are created as
-+		necessary.  Otherwise it must be "".
-+		If {prot} is given it is used to set the protection bits of
-+		the new directory.  The default is 0755 (rwxr-xr-x: r/w for
-+		the user readable for others).	Use 0700 to make it unreadable
-+		for others.  This is only used for the last part of {name}.
-+		Thus if you create /tmp/foo/bar then /tmp/foo will be created
-+		with 0755.
-+		Example: >
-+			:call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
-+<		This function is not available in the |sandbox|.
-+		Not available on all systems.  To check use: >
-+			:if exists("*mkdir")
-+<
-+							*mode()*
-+mode([expr])	Return a string that indicates the current mode.
-+		If [expr] is supplied and it evaluates to a non-zero Number or
-+		a non-empty String (|non-zero-arg|), then the full mode is
-+		returned, otherwise only the first letter is returned.  Note
-+		that " " and "0" are also non-empty strings.
-+
-+			n	Normal
-+			no	Operator-pending
-+			v	Visual by character
-+			V	Visual by line
-+			CTRL-V	Visual blockwise
-+			s	Select by character
-+			S	Select by line
-+			CTRL-S	Select blockwise
-+			i	Insert
-+			R	Replace |R|
-+			Rv	Virtual Replace |gR|
-+			c	Command-line
-+			cv	Vim Ex mode |gQ|
-+			ce	Normal Ex mode |Q|
-+			r	Hit-enter prompt
-+			rm	The -- more -- prompt
-+			r?	A |:confirm| query of some sort
-+			!	Shell or external command is executing
-+		This is useful in the 'statusline' option or when used
-+		with |remote_expr()| In most other places it always returns
-+		"c" or "n".
-+		Also see |visualmode()|.
-+
-+mzeval({expr})							*mzeval()*
-+		Evaluate MzScheme expression {expr} and return its result
-+		convert to Vim data structures.
-+		Numbers and strings are returned as they are.
-+		Pairs (including lists and improper lists) and vectors are
-+		returned as Vim |Lists|.
-+		Hash tables are represented as Vim |Dictionary| type with keys
-+		converted to strings.
-+		All other types are converted to string with display function.
-+		Examples: >
-+		    :mz (define l (list 1 2 3))
-+		    :mz (define h (make-hash)) (hash-set! h "list" l)
-+		    :echo mzeval("l")
-+		    :echo mzeval("h")
-+<
-+		{only available when compiled with the |+mzscheme| feature}
-+
-+nextnonblank({lnum})					*nextnonblank()*
-+		Return the line number of the first line at or below {lnum}
-+		that is not blank.  Example: >
-+			if getline(nextnonblank(1)) =~ "Java"
-+<		When {lnum} is invalid or there is no non-blank line at or
-+		below it, zero is returned.
-+		See also |prevnonblank()|.
-+
-+nr2char({expr})						*nr2char()*
-+		Return a string with a single character, which has the number
-+		value {expr}.  Examples: >
-+			nr2char(64)		returns "@"
-+			nr2char(32)		returns " "
-+<		The current 'encoding' is used.  Example for "utf-8": >
-+			nr2char(300)		returns I with bow character
-+<		Note that a NUL character in the file is specified with
-+		nr2char(10), because NULs are represented with newline
-+		characters.  nr2char(0) is a real NUL and terminates the
-+		string, thus results in an empty string.
-+
-+							*getpid()*
-+getpid()	Return a Number which is the process ID of the Vim process.
-+		On Unix and MS-Windows this is a unique number, until Vim
-+		exits.	On MS-DOS it's always zero.
-+
-+							*getpos()*
-+getpos({expr})	Get the position for {expr}.  For possible values of {expr}
-+		see |line()|.
-+		The result is a |List| with four numbers:
-+		    [bufnum, lnum, col, off]
-+		"bufnum" is zero, unless a mark like '0 or 'A is used, then it
-+		is the buffer number of the mark.
-+		"lnum" and "col" are the position in the buffer.  The first
-+		column is 1.
-+		The "off" number is zero, unless 'virtualedit' is used.  Then
-+		it is the offset in screen columns from the start of the
-+		character.  E.g., a position within a <Tab> or after the last
-+		character.
-+		This can be used to save and restore the cursor position: >
-+			let save_cursor = getpos(".")
-+			MoveTheCursorAround
-+			call setpos('.', save_cursor)
-+<		Also see |setpos()|.
-+
-+pathshorten({expr})					*pathshorten()*
-+		Shorten directory names in the path {expr} and return the
-+		result.  The tail, the file name, is kept as-is.  The other
-+		components in the path are reduced to single letters.  Leading
-+		'~' and '.' characters are kept.  Example: >
-+			:echo pathshorten('~/.vim/autoload/myfile.vim')
-+<			~/.v/a/myfile.vim ~
-+		It doesn't matter if the path exists or not.
-+
-+pow({x}, {y})						*pow()*
-+		Return the power of {x} to the exponent {y} as a |Float|.
-+		{x} and {y} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo pow(3, 3)
-+<			27.0 >
-+			:echo pow(2, 16)
-+<			65536.0 >
-+			:echo pow(32, 0.20)
-+<			2.0
-+		{only available when compiled with the |+float| feature}
-+		
-+prevnonblank({lnum})					*prevnonblank()*
-+		Return the line number of the first line at or above {lnum}
-+		that is not blank.  Example: >
-+			let ind = indent(prevnonblank(v:lnum - 1))
-+<		When {lnum} is invalid or there is no non-blank line at or
-+		above it, zero is returned.
-+		Also see |nextnonblank()|.
-+
-+
-+printf({fmt}, {expr1} ...)				*printf()*
-+		Return a String with {fmt}, where "%" items are replaced by
-+		the formatted form of their respective arguments.  Example: >
-+			printf("%4d: E%d %.30s", lnum, errno, msg)
-+<		May result in:
-+			"  99: E42 asdfasdfasdfasdfasdfasdfasdfas" ~
-+
-+		Often used items are:
-+		  %s	string
-+		  %6s	string right-aligned in 6 bytes
-+		  %.9s	string truncated to 9 bytes
-+		  %c	single byte
-+		  %d	decimal number
-+		  %5d	decimal number padded with spaces to 5 characters
-+		  %x	hex number
-+		  %04x	hex number padded with zeros to at least 4 characters
-+		  %X	hex number using upper case letters
-+		  %o	octal number
-+		  %f	floating point number in the form 123.456
-+		  %e	floating point number in the form 1.234e3
-+		  %E	floating point number in the form 1.234E3
-+		  %g	floating point number, as %f or %e depending on value
-+		  %G	floating point number, as %f or %E depending on value
-+		  %%	the % character itself
-+
-+		Conversion specifications start with '%' and end with the
-+		conversion type.  All other characters are copied unchanged to
-+		the result.
-+
-+		The "%" starts a conversion specification.  The following
-+		arguments appear in sequence:
-+
-+			%  [flags]  [field-width]  [.precision]  type
-+
-+		flags
-+			Zero or more of the following flags:
-+
-+		    #	      The value should be converted to an "alternate
-+			      form".  For c, d, and s conversions, this option
-+			      has no effect.  For o conversions, the precision
-+			      of the number is increased to force the first
-+			      character of the output string to a zero (except
-+			      if a zero value is printed with an explicit
-+			      precision of zero).
-+			      For x and X conversions, a non-zero result has
-+			      the string "0x" (or "0X" for X conversions)
-+			      prepended to it.
-+
-+		    0 (zero)  Zero padding.  For all conversions the converted
-+			      value is padded on the left with zeros rather
-+			      than blanks.  If a precision is given with a
-+			      numeric conversion (d, o, x, and X), the 0 flag
-+			      is ignored.
-+
-+		    -	      A negative field width flag; the converted value
-+			      is to be left adjusted on the field boundary.
-+			      The converted value is padded on the right with
-+			      blanks, rather than on the left with blanks or
-+			      zeros.  A - overrides a 0 if both are given.
-+
-+		    ' ' (space)  A blank should be left before a positive
-+			      number produced by a signed conversion (d).
-+
-+		    +	      A sign must always be placed before a number
-+			      produced by a signed conversion.	A + overrides
-+			      a space if both are used.
-+
-+		field-width
-+			An optional decimal digit string specifying a minimum
-+			field width.  If the converted value has fewer bytes
-+			than the field width, it will be padded with spaces on
-+			the left (or right, if the left-adjustment flag has
-+			been given) to fill out the field width.
-+
-+		.precision
-+			An optional precision, in the form of a period '.'
-+			followed by an optional digit string.  If the digit
-+			string is omitted, the precision is taken as zero.
-+			This gives the minimum number of digits to appear for
-+			d, o, x, and X conversions, or the maximum number of
-+			bytes to be printed from a string for s conversions.
-+			For floating point it is the number of digits after
-+			the decimal point.
-+
-+		type
-+			A character that specifies the type of conversion to
-+			be applied, see below.
-+
-+		A field width or precision, or both, may be indicated by an
-+		asterisk '*' instead of a digit string.  In this case, a
-+		Number argument supplies the field width or precision.	A
-+		negative field width is treated as a left adjustment flag
-+		followed by a positive field width; a negative precision is
-+		treated as though it were missing.  Example: >
-+			:echo printf("%d: %.*s", nr, width, line)
-+<		This limits the length of the text used from "line" to
-+		"width" bytes.
-+
-+		The conversion specifiers and their meanings are:
-+
-+				*printf-d* *printf-o* *printf-x* *printf-X*
-+		doxX	The Number argument is converted to signed decimal
-+			(d), unsigned octal (o), or unsigned hexadecimal (x
-+			and X) notation.  The letters "abcdef" are used for
-+			x conversions; the letters "ABCDEF" are used for X
-+			conversions.
-+			The precision, if any, gives the minimum number of
-+			digits that must appear; if the converted value
-+			requires fewer digits, it is padded on the left with
-+			zeros.
-+			In no case does a non-existent or small field width
-+			cause truncation of a numeric field; if the result of
-+			a conversion is wider than the field width, the field
-+			is expanded to contain the conversion result.
-+
-+							*printf-c*
-+		c	The Number argument is converted to a byte, and the
-+			resulting character is written.
-+
-+							*printf-s*
-+		s	The text of the String argument is used.  If a
-+			precision is specified, no more bytes than the number
-+			specified are used.
-+
-+							*printf-f* *E807*
-+		f	The Float argument is converted into a string of the 
-+			form 123.456.  The precision specifies the number of
-+			digits after the decimal point.  When the precision is
-+			zero the decimal point is omitted.  When the precision
-+			is not specified 6 is used.  A really big number
-+			(out of range or dividing by zero) results in "inf".
-+			"0.0 / 0.0" results in "nan".
-+			Example: >
-+				echo printf("%.2f", 12.115)
-+<				12.12
-+			Note that roundoff depends on the system libraries.
-+			Use |round()| when in doubt.
-+
-+							*printf-e* *printf-E*
-+		e E	The Float argument is converted into a string of the
-+			form 1.234e+03 or 1.234E+03 when using 'E'.  The
-+			precision specifies the number of digits after the
-+			decimal point, like with 'f'.
-+
-+							*printf-g* *printf-G*
-+		g G	The Float argument is converted like with 'f' if the
-+			value is between 0.001 (inclusive) and 10000000.0
-+			(exclusive).  Otherwise 'e' is used for 'g' and 'E'
-+			for 'G'.  When no precision is specified superfluous
-+			zeroes and '+' signs are removed, except for the zero
-+			immediately after the decimal point.  Thus 10000000.0
-+			results in 1.0e7.
-+
-+							*printf-%*
-+		%	A '%' is written.  No argument is converted.  The
-+			complete conversion specification is "%%".
-+
-+		When a Number argument is expected a String argument is also
-+		accepted and automatically converted.
-+		When a Float or String argument is expected a Number argument
-+		is also accepted and automatically converted.
-+		Any other argument type results in an error message.
-+
-+							*E766* *E767*
-+		The number of {exprN} arguments must exactly match the number
-+		of "%" items.  If there are not sufficient or too many
-+		arguments an error is given.  Up to 18 arguments can be used.
-+
-+
-+pumvisible()						*pumvisible()*
-+		Returns non-zero when the popup menu is visible, zero
-+		otherwise.  See |ins-completion-menu|.
-+		This can be used to avoid some things that would remove the
-+		popup menu.
-+
-+							*E726* *E727*
-+range({expr} [, {max} [, {stride}]])				*range()*
-+		Returns a |List| with Numbers:
-+		- If only {expr} is specified: [0, 1, ..., {expr} - 1]
-+		- If {max} is specified: [{expr}, {expr} + 1, ..., {max}]
-+		- If {stride} is specified: [{expr}, {expr} + {stride}, ...,
-+		  {max}] (increasing {expr} with {stride} each time, not
-+		  producing a value past {max}).
-+		When the maximum is one before the start the result is an
-+		empty list.  When the maximum is more than one before the
-+		start this is an error.
-+		Examples: >
-+			range(4)		" [0, 1, 2, 3]
-+			range(2, 4)		" [2, 3, 4]
-+			range(2, 9, 3)		" [2, 5, 8]
-+			range(2, -2, -1)	" [2, 1, 0, -1, -2]
-+			range(0)		" []
-+			range(2, 0)		" error!
-+<
-+							*readfile()*
-+readfile({fname} [, {binary} [, {max}]])
-+		Read file {fname} and return a |List|, each line of the file
-+		as an item.  Lines broken at NL characters.  Macintosh files
-+		separated with CR will result in a single long line (unless a
-+		NL appears somewhere).
-+		All NUL characters are replaced with a NL character.
-+		When {binary} is equal to "b" binary mode is used:
-+		- When the last line ends in a NL an extra empty list item is
-+		  added.
-+		- No CR characters are removed.
-+		Otherwise:
-+		- CR characters that appear before a NL are removed.
-+		- Whether the last line ends in a NL or not does not matter.
-+		- When 'encoding' is Unicode any UTF-8 byte order mark is
-+		  removed from the text.
-+		When {max} is given this specifies the maximum number of lines
-+		to be read.  Useful if you only want to check the first ten
-+		lines of a file: >
-+			:for line in readfile(fname, '', 10)
-+			:  if line =~ 'Date' | echo line | endif
-+			:endfor
-+<		When {max} is negative -{max} lines from the end of the file
-+		are returned, or as many as there are.
-+		When {max} is zero the result is an empty list.
-+		Note that without {max} the whole file is read into memory.
-+		Also note that there is no recognition of encoding.  Read a
-+		file into a buffer if you need to.
-+		When the file can't be opened an error message is given and
-+		the result is an empty list.
-+		Also see |writefile()|.
-+
-+reltime([{start} [, {end}]])				*reltime()*
-+		Return an item that represents a time value.  The format of
-+		the item depends on the system.  It can be passed to
-+		|reltimestr()| to convert it to a string.
-+		Without an argument it returns the current time.
-+		With one argument is returns the time passed since the time
-+		specified in the argument.
-+		With two arguments it returns the time passed between {start}
-+		and {end}.
-+		The {start} and {end} arguments must be values returned by
-+		reltime().
-+		{only available when compiled with the |+reltime| feature}
-+
-+reltimestr({time})				*reltimestr()*
-+		Return a String that represents the time value of {time}.
-+		This is the number of seconds, a dot and the number of
-+		microseconds.  Example: >
-+			let start = reltime()
-+			call MyFunction()
-+			echo reltimestr(reltime(start))
-+<		Note that overhead for the commands will be added to the time.
-+		The accuracy depends on the system.
-+		Leading spaces are used to make the string align nicely.  You
-+		can use split() to remove it. >
-+			echo split(reltimestr(reltime(start)))[0]
-+<		Also see |profiling|.
-+		{only available when compiled with the |+reltime| feature}
-+
-+							*remote_expr()* *E449*
-+remote_expr({server}, {string} [, {idvar}])
-+		Send the {string} to {server}.	The string is sent as an
-+		expression and the result is returned after evaluation.
-+		The result must be a String or a |List|.  A |List| is turned
-+		into a String by joining the items with a line break in
-+		between (not at the end), like with join(expr, "\n").
-+		If {idvar} is present, it is taken as the name of a
-+		variable and a {serverid} for later use with
-+		remote_read() is stored there.
-+		See also |clientserver| |RemoteReply|.
-+		This function is not available in the |sandbox|.
-+		{only available when compiled with the |+clientserver| feature}
-+		Note: Any errors will cause a local error message to be issued
-+		and the result will be the empty string.
-+		Examples: >
-+			:echo remote_expr("gvim", "2+2")
-+			:echo remote_expr("gvim1", "b:current_syntax")
-+<
-+
-+remote_foreground({server})				*remote_foreground()*
-+		Move the Vim server with the name {server} to the foreground.
-+		This works like: >
-+			remote_expr({server}, "foreground()")
-+<		Except that on Win32 systems the client does the work, to work
-+		around the problem that the OS doesn't always allow the server
-+		to bring itself to the foreground.
-+		Note: This does not restore the window if it was minimized,
-+		like foreground() does.
-+		This function is not available in the |sandbox|.
-+		{only in the Win32, Athena, Motif and GTK GUI versions and the
-+		Win32 console version}
-+
-+
-+remote_peek({serverid} [, {retvar}])		*remote_peek()*
-+		Returns a positive number if there are available strings
-+		from {serverid}.  Copies any reply string into the variable
-+		{retvar} if specified.	{retvar} must be a string with the
-+		name of a variable.
-+		Returns zero if none are available.
-+		Returns -1 if something is wrong.
-+		See also |clientserver|.
-+		This function is not available in the |sandbox|.
-+		{only available when compiled with the |+clientserver| feature}
-+		Examples: >
-+			:let repl = ""
-+			:echo "PEEK: ".remote_peek(id, "repl").": ".repl
-+
-+remote_read({serverid})				*remote_read()*
-+		Return the oldest available reply from {serverid} and consume
-+		it.  It blocks until a reply is available.
-+		See also |clientserver|.
-+		This function is not available in the |sandbox|.
-+		{only available when compiled with the |+clientserver| feature}
-+		Example: >
-+			:echo remote_read(id)
-+<
-+							*remote_send()* *E241*
-+remote_send({server}, {string} [, {idvar}])
-+		Send the {string} to {server}.	The string is sent as input
-+		keys and the function returns immediately.  At the Vim server
-+		the keys are not mapped |:map|.
-+		If {idvar} is present, it is taken as the name of a variable
-+		and a {serverid} for later use with remote_read() is stored
-+		there.
-+		See also |clientserver| |RemoteReply|.
-+		This function is not available in the |sandbox|.
-+		{only available when compiled with the |+clientserver| feature}
-+		Note: Any errors will be reported in the server and may mess
-+		up the display.
-+		Examples: >
-+		:echo remote_send("gvim", ":DropAndReply ".file, "serverid").
-+		 \ remote_read(serverid)
-+
-+		:autocmd NONE RemoteReply *
-+		 \ echo remote_read(expand("<amatch>"))
-+		:echo remote_send("gvim", ":sleep 10 | echo ".
-+		 \ 'server2client(expand("<client>"), "HELLO")<CR>')
-+<
-+remove({list}, {idx} [, {end}])				*remove()*
-+		Without {end}: Remove the item at {idx} from |List| {list} and
-+		return the item.
-+		With {end}: Remove items from {idx} to {end} (inclusive) and
-+		return a List with these items.  When {idx} points to the same
-+		item as {end} a list with one item is returned.  When {end}
-+		points to an item before {idx} this is an error.
-+		See |list-index| for possible values of {idx} and {end}.
-+		Example: >
-+			:echo "last item: " . remove(mylist, -1)
-+			:call remove(mylist, 0, 9)
-+remove({dict}, {key})
-+		Remove the entry from {dict} with key {key}.  Example: >
-+			:echo "removed " . remove(dict, "one")
-+<		If there is no {key} in {dict} this is an error.
-+
-+		Use |delete()| to remove a file.
-+
-+rename({from}, {to})					*rename()*
-+		Rename the file by the name {from} to the name {to}.  This
-+		should also work to move files across file systems.  The
-+		result is a Number, which is 0 if the file was renamed
-+		successfully, and non-zero when the renaming failed.
-+		NOTE: If {to} exists it is overwritten without warning.
-+		This function is not available in the |sandbox|.
-+
-+repeat({expr}, {count})					*repeat()*
-+		Repeat {expr} {count} times and return the concatenated
-+		result.  Example: >
-+			:let separator = repeat('-', 80)
-+<		When {count} is zero or negative the result is empty.
-+		When {expr} is a |List| the result is {expr} concatenated
-+		{count} times.	Example: >
-+			:let longlist = repeat(['a', 'b'], 3)
-+<		Results in ['a', 'b', 'a', 'b', 'a', 'b'].
-+
-+
-+resolve({filename})					*resolve()* *E655*
-+		On MS-Windows, when {filename} is a shortcut (a .lnk file),
-+		returns the path the shortcut points to in a simplified form.
-+		On Unix, repeat resolving symbolic links in all path
-+		components of {filename} and return the simplified result.
-+		To cope with link cycles, resolving of symbolic links is
-+		stopped after 100 iterations.
-+		On other systems, return the simplified {filename}.
-+		The simplification step is done as by |simplify()|.
-+		resolve() keeps a leading path component specifying the
-+		current directory (provided the result is still a relative
-+		path name) and also keeps a trailing path separator.
-+
-+							*reverse()*
-+reverse({list})	Reverse the order of items in {list} in-place.	Returns
-+		{list}.
-+		If you want a list to remain unmodified make a copy first: >
-+			:let revlist = reverse(copy(mylist))
-+
-+round({expr})							*round()*
-+		Round off {expr} to the nearest integral value and return it
-+		as a |Float|.  If {expr} lies halfway between two integral
-+		values, then use the larger one (away from zero).
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			echo round(0.456)
-+<			0.0  >
-+			echo round(4.5)
-+<			5.0 >
-+			echo round(-4.5)
-+<			-5.0
-+		{only available when compiled with the |+float| feature}
-+		
-+		
-+search({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*search()*
-+		Search for regexp pattern {pattern}.  The search starts at the
-+		cursor position (you can use |cursor()| to set it).
-+
-+		{flags} is a String, which can contain these character flags:
-+		'b'	search backward instead of forward
-+		'c'	accept a match at the cursor position
-+		'e'	move to the End of the match
-+		'n'	do Not move the cursor
-+		'p'	return number of matching sub-pattern (see below)
-+		's'	set the ' mark at the previous location of the cursor
-+		'w'	wrap around the end of the file
-+		'W'	don't wrap around the end of the file
-+		If neither 'w' or 'W' is given, the 'wrapscan' option applies.
-+
-+		If the 's' flag is supplied, the ' mark is set, only if the
-+		cursor is moved. The 's' flag cannot be combined with the 'n'
-+		flag.
-+
-+		'ignorecase', 'smartcase' and 'magic' are used.
-+
-+		When the {stopline} argument is given then the search stops
-+		after searching this line.  This is useful to restrict the
-+		search to a range of lines.  Examples: >
-+			let match = search('(', 'b', line("w0"))
-+			let end = search('END', '', line("w$"))
-+<		When {stopline} is used and it is not zero this also implies
-+		that the search does not wrap around the end of the file.
-+		A zero value is equal to not giving the argument.
-+
-+		When the {timeout} argument is given the search stops when
-+		more than this many milli seconds have passed.	Thus when
-+		{timeout} is 500 the search stops after half a second.
-+		The value must not be negative.  A zero value is like not
-+		giving the argument.
-+		{only available when compiled with the |+reltime| feature}
-+
-+		If there is no match a 0 is returned and the cursor doesn't
-+		move.  No error message is given.
-+		When a match has been found its line number is returned.
-+							*search()-sub-match*
-+		With the 'p' flag the returned value is one more than the
-+		first sub-match in \(\).  One if none of them matched but the
-+		whole pattern did match.
-+		To get the column number too use |searchpos()|.
-+
-+		The cursor will be positioned at the match, unless the 'n'
-+		flag is used.
-+
-+		Example (goes over all files in the argument list): >
-+		    :let n = 1
-+		    :while n <= argc()	    " loop over all files in arglist
-+		    :  exe "argument " . n
-+		    :  " start at the last char in the file and wrap for the
-+		    :  " first search to find match at start of file
-+		    :  normal G$
-+		    :  let flags = "w"
-+		    :  while search("foo", flags) > 0
-+		    :	 s/foo/bar/g
-+		    :	 let flags = "W"
-+		    :  endwhile
-+		    :  update		    " write the file if modified
-+		    :  let n = n + 1
-+		    :endwhile
-+<
-+		Example for using some flags: >
-+		    :echo search('\<if\|\(else\)\|\(endif\)', 'ncpe')
-+<		This will search for the keywords "if", "else", and "endif"
-+		under or after the cursor.  Because of the 'p' flag, it
-+		returns 1, 2, or 3 depending on which keyword is found, or 0
-+		if the search fails.  With the cursor on the first word of the
-+		line:
-+		    if (foo == 0) | let foo = foo + 1 | endif ~
-+		the function returns 1.  Without the 'c' flag, the function
-+		finds the "endif" and returns 3.  The same thing happens
-+		without the 'e' flag if the cursor is on the "f" of "if".
-+		The 'n' flag tells the function not to move the cursor.
-+
-+
-+searchdecl({name} [, {global} [, {thisblock}]])			*searchdecl()*
-+		Search for the declaration of {name}.
-+
-+		With a non-zero {global} argument it works like |gD|, find
-+		first match in the file.  Otherwise it works like |gd|, find
-+		first match in the function.
-+
-+		With a non-zero {thisblock} argument matches in a {} block
-+		that ends before the cursor position are ignored.  Avoids
-+		finding variable declarations only valid in another scope.
-+
-+		Moves the cursor to the found match.
-+		Returns zero for success, non-zero for failure.
-+		Example: >
-+			if searchdecl('myvar') == 0
-+			   echo getline('.')
-+			endif
-+<
-+							*searchpair()*
-+searchpair({start}, {middle}, {end} [, {flags} [, {skip}
-+				[, {stopline} [, {timeout}]]]])
-+		Search for the match of a nested start-end pair.  This can be
-+		used to find the "endif" that matches an "if", while other
-+		if/endif pairs in between are ignored.
-+		The search starts at the cursor.  The default is to search
-+		forward, include 'b' in {flags} to search backward.
-+		If a match is found, the cursor is positioned at it and the
-+		line number is returned.  If no match is found 0 or -1 is
-+		returned and the cursor doesn't move.  No error message is
-+		given.
-+
-+		{start}, {middle} and {end} are patterns, see |pattern|.  They
-+		must not contain \( \) pairs.  Use of \%( \) is allowed.  When
-+		{middle} is not empty, it is found when searching from either
-+		direction, but only when not in a nested start-end pair.  A
-+		typical use is: >
-+			searchpair('\<if\>', '\<else\>', '\<endif\>')
-+<		By leaving {middle} empty the "else" is skipped.
-+
-+		{flags} 'b', 'c', 'n', 's', 'w' and 'W' are used like with
-+		|search()|.  Additionally:
-+		'r'	Repeat until no more matches found; will find the
-+			outer pair.  Implies the 'W' flag.
-+		'm'	Return number of matches instead of line number with
-+			the match; will be > 1 when 'r' is used.
-+		Note: it's nearly always a good idea to use the 'W' flag, to
-+		avoid wrapping around the end of the file.
-+
-+		When a match for {start}, {middle} or {end} is found, the
-+		{skip} expression is evaluated with the cursor positioned on
-+		the start of the match.  It should return non-zero if this
-+		match is to be skipped.  E.g., because it is inside a comment
-+		or a string.
-+		When {skip} is omitted or empty, every match is accepted.
-+		When evaluating {skip} causes an error the search is aborted
-+		and -1 returned.
-+
-+		For {stopline} and {timeout} see |search()|.
-+
-+		The value of 'ignorecase' is used.  'magic' is ignored, the
-+		patterns are used like it's on.
-+
-+		The search starts exactly at the cursor.  A match with
-+		{start}, {middle} or {end} at the next character, in the
-+		direction of searching, is the first one found.  Example: >
-+			if 1
-+			  if 2
-+			  endif 2
-+			endif 1
-+<		When starting at the "if 2", with the cursor on the "i", and
-+		searching forwards, the "endif 2" is found.  When starting on
-+		the character just before the "if 2", the "endif 1" will be
-+		found.	That's because the "if 2" will be found first, and
-+		then this is considered to be a nested if/endif from "if 2" to
-+		"endif 2".
-+		When searching backwards and {end} is more than one character,
-+		it may be useful to put "\zs" at the end of the pattern, so
-+		that when the cursor is inside a match with the end it finds
-+		the matching start.
-+
-+		Example, to find the "endif" command in a Vim script: >
-+
-+	:echo searchpair('\<if\>', '\<el\%[seif]\>', '\<en\%[dif]\>', 'W',
-+			\ 'getline(".") =~ "^\\s*\""')
-+
-+<		The cursor must be at or after the "if" for which a match is
-+		to be found.  Note that single-quote strings are used to avoid
-+		having to double the backslashes.  The skip expression only
-+		catches comments at the start of a line, not after a command.
-+		Also, a word "en" or "if" halfway a line is considered a
-+		match.
-+		Another example, to search for the matching "{" of a "}": >
-+
-+	:echo searchpair('{', '', '}', 'bW')
-+
-+<		This works when the cursor is at or before the "}" for which a
-+		match is to be found.  To reject matches that syntax
-+		highlighting recognized as strings: >
-+
-+	:echo searchpair('{', '', '}', 'bW',
-+	     \ 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string"')
-+<
-+							*searchpairpos()*
-+searchpairpos({start}, {middle}, {end} [, {flags} [, {skip}
-+				[, {stopline} [, {timeout}]]]])
-+		Same as |searchpair()|, but returns a |List| with the line and
-+		column position of the match. The first element of the |List|
-+		is the line number and the second element is the byte index of
-+		the column position of the match.  If no match is found,
-+		returns [0, 0]. >
-+
-+			:let [lnum,col] = searchpairpos('{', '', '}', 'n')
-+<
-+		See |match-parens| for a bigger and more useful example.
-+
-+searchpos({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*searchpos()*
-+		Same as |search()|, but returns a |List| with the line and
-+		column position of the match. The first element of the |List|
-+		is the line number and the second element is the byte index of
-+		the column position of the match. If no match is found,
-+		returns [0, 0].
-+		Example: >
-+	:let [lnum, col] = searchpos('mypattern', 'n')
-+
-+<		When the 'p' flag is given then there is an extra item with
-+		the sub-pattern match number |search()-sub-match|.  Example: >
-+	:let [lnum, col, submatch] = searchpos('\(\l\)\|\(\u\)', 'np')
-+<		In this example "submatch" is 2 when a lowercase letter is
-+		found |/\l|, 3 when an uppercase letter is found |/\u|.
-+
-+server2client( {clientid}, {string})			*server2client()*
-+		Send a reply string to {clientid}.  The most recent {clientid}
-+		that sent a string can be retrieved with expand("<client>").
-+		{only available when compiled with the |+clientserver| feature}
-+		Note:
-+		This id has to be stored before the next command can be
-+		received.  I.e. before returning from the received command and
-+		before calling any commands that waits for input.
-+		See also |clientserver|.
-+		Example: >
-+			:echo server2client(expand("<client>"), "HELLO")
-+<
-+serverlist()					*serverlist()*
-+		Return a list of available server names, one per line.
-+		When there are no servers or the information is not available
-+		an empty string is returned.  See also |clientserver|.
-+		{only available when compiled with the |+clientserver| feature}
-+		Example: >
-+			:echo serverlist()
-+<
-+setbufvar({expr}, {varname}, {val})			*setbufvar()*
-+		Set option or local variable {varname} in buffer {expr} to
-+		{val}.
-+		This also works for a global or local window option, but it
-+		doesn't work for a global or local window variable.
-+		For a local window option the global value is unchanged.
-+		For the use of {expr}, see |bufname()| above.
-+		Note that the variable name without "b:" must be used.
-+		Examples: >
-+			:call setbufvar(1, "&mod", 1)
-+			:call setbufvar("todo", "myvar", "foobar")
-+<		This function is not available in the |sandbox|.
-+
-+setcmdpos({pos})					*setcmdpos()*
-+		Set the cursor position in the command line to byte position
-+		{pos}.	The first position is 1.
-+		Use |getcmdpos()| to obtain the current position.
-+		Only works while editing the command line, thus you must use
-+		|c_CTRL-\_e|, |c_CTRL-R_=| or |c_CTRL-R_CTRL-R| with '='.  For
-+		|c_CTRL-\_e| and |c_CTRL-R_CTRL-R| with '=' the position is
-+		set after the command line is set to the expression.  For
-+		|c_CTRL-R_=| it is set after evaluating the expression but
-+		before inserting the resulting text.
-+		When the number is too big the cursor is put at the end of the
-+		line.  A number smaller than one has undefined results.
-+		Returns 0 when successful, 1 when not editing the command
-+		line.
-+
-+setline({lnum}, {text})					*setline()*
-+		Set line {lnum} of the current buffer to {text}.
-+		{lnum} is used like with |getline()|.
-+		When {lnum} is just below the last line the {text} will be
-+		added as a new line.
-+		If this succeeds, 0 is returned.  If this fails (most likely
-+		because {lnum} is invalid) 1 is returned.  Example: >
-+			:call setline(5, strftime("%c"))
-+<		When {text} is a |List| then line {lnum} and following lines
-+		will be set to the items in the list.  Example: >
-+			:call setline(5, ['aaa', 'bbb', 'ccc'])
-+<		This is equivalent to: >
-+			:for [n, l] in [[5, 6, 7], ['aaa', 'bbb', 'ccc']]
-+			:  call setline(n, l)
-+			:endfor
-+<		Note: The '[ and '] marks are not set.
-+
-+setloclist({nr}, {list} [, {action}])			*setloclist()*
-+		Create or replace or add to the location list for window {nr}.
-+		When {nr} is zero the current window is used. For a location
-+		list window, the displayed location list is modified.  For an
-+		invalid window number {nr}, -1 is returned.
-+		Otherwise, same as |setqflist()|.
-+		Also see |location-list|.
-+
-+setmatches({list})					*setmatches()*
-+		Restores a list of matches saved by |getmatches()|.  Returns 0
-+		if successful, otherwise -1.  All current matches are cleared
-+		before the list is restored.  See example for |getmatches()|.
-+
-+							*setpos()*
-+setpos({expr}, {list})
-+		Set the position for {expr}.  Possible values:
-+			.	the cursor
-+			'x	mark x
-+
-+		{list} must be a |List| with four numbers:
-+		    [bufnum, lnum, col, off]
-+
-+		"bufnum" is the buffer number.	Zero can be used for the
-+		current buffer.  Setting the cursor is only possible for
-+		the current buffer.  To set a mark in another buffer you can
-+		use the |bufnr()| function to turn a file name into a buffer
-+		number.
-+		Does not change the jumplist.
-+
-+		"lnum" and "col" are the position in the buffer.  The first
-+		column is 1.  Use a zero "lnum" to delete a mark.  If "col" is
-+		smaller than 1 then 1 is used.
-+
-+		The "off" number is only used when 'virtualedit' is set. Then
-+		it is the offset in screen columns from the start of the
-+		character.  E.g., a position within a <Tab> or after the last
-+		character.
-+
-+		Returns 0 when the position could be set, -1 otherwise.
-+		An error message is given if {expr} is invalid.
-+
-+		Also see |getpos()|
-+
-+		This does not restore the preferred column for moving
-+		vertically.  See |winrestview()| for that.
-+
-+
-+setqflist({list} [, {action}])				*setqflist()*
-+		Create or replace or add to the quickfix list using the items
-+		in {list}.  Each item in {list} is a dictionary.
-+		Non-dictionary items in {list} are ignored.  Each dictionary
-+		item can contain the following entries:
-+
-+		    bufnr	buffer number; must be the number of a valid
-+				buffer
-+		    filename	name of a file; only used when "bufnr" is not
-+				present or it is invalid.
-+		    lnum	line number in the file
-+		    pattern	search pattern used to locate the error
-+		    col		column number
-+		    vcol	when non-zero: "col" is visual column
-+				when zero: "col" is byte index
-+		    nr		error number
-+		    text	description of the error
-+		    type	single-character error type, 'E', 'W', etc.
-+
-+		The "col", "vcol", "nr", "type" and "text" entries are
-+		optional.  Either "lnum" or "pattern" entry can be used to
-+		locate a matching error line.
-+		If the "filename" and "bufnr" entries are not present or
-+		neither the "lnum" or "pattern" entries are present, then the
-+		item will not be handled as an error line.
-+		If both "pattern" and "lnum" are present then "pattern" will
-+		be used.
-+		If you supply an empty {list}, the quickfix list will be
-+		cleared.
-+		Note that the list is not exactly the same as what
-+		|getqflist()| returns.
-+
-+		If {action} is set to 'a', then the items from {list} are
-+		added to the existing quickfix list. If there is no existing
-+		list, then a new list is created. If {action} is set to 'r',
-+		then the items from the current quickfix list are replaced
-+		with the items from {list}. If {action} is not present or is
-+		set to ' ', then a new list is created.
-+
-+		Returns zero for success, -1 for failure.
-+
-+		This function can be used to create a quickfix list
-+		independent of the 'errorformat' setting.  Use a command like
-+		":cc 1" to jump to the first position.
-+
-+
-+							*setreg()*
-+setreg({regname}, {value} [,{options}])
-+		Set the register {regname} to {value}.
-+		If {options} contains "a" or {regname} is upper case,
-+		then the value is appended.
-+		{options} can also contain a register type specification:
-+		    "c" or "v"	      |characterwise| mode
-+		    "l" or "V"	      |linewise| mode
-+		    "b" or "<CTRL-V>" |blockwise-visual| mode
-+		If a number immediately follows "b" or "<CTRL-V>" then this is
-+		used as the width of the selection - if it is not specified
-+		then the width of the block is set to the number of characters
-+		in the longest line (counting a <Tab> as 1 character).
-+
-+		If {options} contains no register settings, then the default
-+		is to use character mode unless {value} ends in a <NL>.
-+		Setting the '=' register is not possible.
-+		Returns zero for success, non-zero for failure.
-+
-+		Examples: >
-+			:call setreg(v:register, @*)
-+			:call setreg('*', @%, 'ac')
-+			:call setreg('a', "1\n2\n3", 'b5')
-+
-+<		This example shows using the functions to save and restore a
-+		register. >
-+			:let var_a = getreg('a', 1)
-+			:let var_amode = getregtype('a')
-+			    ....
-+			:call setreg('a', var_a, var_amode)
-+
-+<		You can also change the type of a register by appending
-+		nothing: >
-+			:call setreg('a', '', 'al')
-+
-+settabvar({tabnr}, {varname}, {val})			*settabvar()*
-+		Set tab-local variable {varname} to {val} in tab page {tabnr}.
-+		|t:var|
-+		Note that the variable name without "t:" must be used.
-+		Tabs are numbered starting with one.
-+		Vim briefly goes to the tab page {tabnr}, this may trigger
-+		TabLeave and TabEnter autocommands.
-+		This function is not available in the |sandbox|.
-+
-+settabwinvar({tabnr}, {winnr}, {varname}, {val})	*settabwinvar()*
-+		Set option or local variable {varname} in window {winnr} to
-+		{val}.
-+		Tabs are numbered starting with one.  For the current tabpage
-+		use |setwinvar()|.
-+		When {winnr} is zero the current window is used.
-+		This also works for a global or local buffer option, but it
-+		doesn't work for a global or local buffer variable.
-+		For a local buffer option the global value is unchanged.
-+		Note that the variable name without "w:" must be used.
-+		Vim briefly goes to the tab page {tabnr}, this may trigger
-+		TabLeave and TabEnter autocommands.
-+		Examples: >
-+			:call settabwinvar(1, 1, "&list", 0)
-+			:call settabwinvar(3, 2, "myvar", "foobar")
-+<		This function is not available in the |sandbox|.
-+
-+setwinvar({nr}, {varname}, {val})			*setwinvar()*
-+		Like |settabwinvar()| for the current tab page.
-+		Examples: >
-+			:call setwinvar(1, "&list", 0)
-+			:call setwinvar(2, "myvar", "foobar")
-+
-+shellescape({string} [, {special}])			*shellescape()*
-+		Escape {string} for use as a shell command argument.
-+		On MS-Windows and MS-DOS, when 'shellslash' is not set, it
-+		will enclose {string} in double quotes and double all double
-+		quotes within {string}.
-+		For other systems, it will enclose {string} in single quotes
-+		and replace all "'" with "'\''".
-+		When the {special} argument is present and it's a non-zero
-+		Number or a non-empty String (|non-zero-arg|), then special
-+		items such as "!", "%", "#" and "<cword>" will be preceded by
-+		a backslash.  This backslash will be removed again by the |:!|
-+		command.
-+		The "!" character will be escaped (again with a |non-zero-arg|
-+		{special}) when 'shell' contains "csh" in the tail.  That is
-+		because for csh and tcsh "!" is used for history replacement
-+		even when inside single quotes.
-+		The <NL> character is also escaped.  With a |non-zero-arg|
-+		{special} and 'shell' containing "csh" in the tail it's
-+		escaped a second time.
-+		Example of use with a |:!| command: >
-+		    :exe '!dir ' . shellescape(expand('<cfile>'), 1)
-+<		This results in a directory listing for the file under the
-+		cursor.  Example of use with |system()|: >
-+		    :call system("chmod +w -- " . shellescape(expand("%")))
-+
-+
-+simplify({filename})					*simplify()*
-+		Simplify the file name as much as possible without changing
-+		the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
-+		Unix) are not resolved.  If the first path component in
-+		{filename} designates the current directory, this will be
-+		valid for the result as well.  A trailing path separator is
-+		not removed either.
-+		Example: >
-+			simplify("./dir/.././/file/") == "./file/"
-+<		Note: The combination "dir/.." is only removed if "dir" is
-+		a searchable directory or does not exist.  On Unix, it is also
-+		removed when "dir" is a symbolic link within the same
-+		directory.  In order to resolve all the involved symbolic
-+		links before simplifying the path name, use |resolve()|.
-+
-+
-+sin({expr})						*sin()*
-+		Return the sine of {expr}, measured in radians, as a |Float|.
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo sin(100)
-+<			-0.506366 >
-+			:echo sin(-4.01)
-+<			0.763301
-+		{only available when compiled with the |+float| feature}
-+		
-+
-+sinh({expr})						*sinh()*
-+		Return the hyperbolic sine of {expr} as a |Float| in the range
-+		[-inf, inf].
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo sinh(0.5)
-+<			0.521095 >
-+			:echo sinh(-0.9)
-+<			-1.026517
-+		{only available when compiled with the |+float| feature}
-+
-+
-+sort({list} [, {func}])					*sort()* *E702*
-+		Sort the items in {list} in-place.  Returns {list}.  If you
-+		want a list to remain unmodified make a copy first: >
-+			:let sortedlist = sort(copy(mylist))
-+<		Uses the string representation of each item to sort on.
-+		Numbers sort after Strings, |Lists| after Numbers.
-+		For sorting text in the current buffer use |:sort|.
-+		When {func} is given and it is one then case is ignored.
-+		When {func} is a |Funcref| or a function name, this function
-+		is called to compare items.  The function is invoked with two
-+		items as argument and must return zero if they are equal, 1 or
-+		bigger if the first one sorts after the second one, -1 or
-+		smaller if the first one sorts before the second one.
-+		Example: >
-+			func MyCompare(i1, i2)
-+			   return a:i1 == a:i2 ? 0 : a:i1 > a:i2 ? 1 : -1
-+			endfunc
-+			let sortedlist = sort(mylist, "MyCompare")
-+<		A shorter compare version for this specific simple case, which
-+		ignores overflow: >
-+			func MyCompare(i1, i2)
-+			   return a:i1 - a:i2
-+			endfunc
-+<
-+							*soundfold()*
-+soundfold({word})
-+		Return the sound-folded equivalent of {word}.  Uses the first
-+		language in 'spelllang' for the current window that supports
-+		soundfolding.  'spell' must be set.  When no sound folding is
-+		possible the {word} is returned unmodified.
-+		This can be used for making spelling suggestions.  Note that
-+		the method can be quite slow.
-+
-+							*spellbadword()*
-+spellbadword([{sentence}])
-+		Without argument: The result is the badly spelled word under
-+		or after the cursor.  The cursor is moved to the start of the
-+		bad word.  When no bad word is found in the cursor line the
-+		result is an empty string and the cursor doesn't move.
-+
-+		With argument: The result is the first word in {sentence} that
-+		is badly spelled.  If there are no spelling mistakes the
-+		result is an empty string.
-+
-+		The return value is a list with two items:
-+		- The badly spelled word or an empty string.
-+		- The type of the spelling error:
-+			"bad"		spelling mistake
-+			"rare"		rare word
-+			"local"		word only valid in another region
-+			"caps"		word should start with Capital
-+		Example: >
-+			echo spellbadword("the quik brown fox")
-+<			['quik', 'bad'] ~
-+
-+		The spelling information for the current window is used.  The
-+		'spell' option must be set and the value of 'spelllang' is
-+		used.
-+
-+							*spellsuggest()*
-+spellsuggest({word} [, {max} [, {capital}]])
-+		Return a |List| with spelling suggestions to replace {word}.
-+		When {max} is given up to this number of suggestions are
-+		returned.  Otherwise up to 25 suggestions are returned.
-+
-+		When the {capital} argument is given and it's non-zero only
-+		suggestions with a leading capital will be given.  Use this
-+		after a match with 'spellcapcheck'.
-+
-+		{word} can be a badly spelled word followed by other text.
-+		This allows for joining two words that were split.  The
-+		suggestions also include the following text, thus you can
-+		replace a line.
-+
-+		{word} may also be a good word.  Similar words will then be
-+		returned.  {word} itself is not included in the suggestions,
-+		although it may appear capitalized.
-+
-+		The spelling information for the current window is used.  The
-+		'spell' option must be set and the values of 'spelllang' and
-+		'spellsuggest' are used.
-+
-+
-+split({expr} [, {pattern} [, {keepempty}]])			*split()*
-+		Make a |List| out of {expr}.  When {pattern} is omitted or
-+		empty each white-separated sequence of characters becomes an
-+		item.
-+		Otherwise the string is split where {pattern} matches,
-+		removing the matched characters.
-+		When the first or last item is empty it is omitted, unless the
-+		{keepempty} argument is given and it's non-zero.
-+		Other empty items are kept when {pattern} matches at least one
-+		character or when {keepempty} is non-zero.
-+		Example: >
-+			:let words = split(getline('.'), '\W\+')
-+<		To split a string in individual characters: >
-+			:for c in split(mystring, '\zs')
-+<		If you want to keep the separator you can also use '\zs': >
-+			:echo split('abc:def:ghi', ':\zs')
-+<			['abc:', 'def:', 'ghi'] ~
-+		Splitting a table where the first element can be empty: >
-+			:let items = split(line, ':', 1)
-+<		The opposite function is |join()|.
-+
-+
-+sqrt({expr})						*sqrt()*
-+		Return the non-negative square root of Float {expr} as a
-+		|Float|.
-+		{expr} must evaluate to a |Float| or a |Number|.  When {expr}
-+		is negative the result is NaN (Not a Number).
-+		Examples: >
-+			:echo sqrt(100)
-+<			10.0 >
-+			:echo sqrt(-4.01)
-+<			nan
-+		"nan" may be different, it depends on system libraries.
-+		{only available when compiled with the |+float| feature}
-+		
-+
-+str2float( {expr})					*str2float()*
-+		Convert String {expr} to a Float.  This mostly works the same
-+		as when using a floating point number in an expression, see
-+		|floating-point-format|.  But it's a bit more permissive.
-+		E.g., "1e40" is accepted, while in an expression you need to
-+		write "1.0e40".
-+		Text after the number is silently ignored.
-+		The decimal point is always '.', no matter what the locale is
-+		set to.  A comma ends the number: "12,345.67" is converted to
-+		12.0.  You can strip out thousands separators with
-+		|substitute()|: >
-+			let f = str2float(substitute(text, ',', '', 'g'))
-+<		{only available when compiled with the |+float| feature}
-+
-+
-+str2nr( {expr} [, {base}])				*str2nr()*
-+		Convert string {expr} to a number.
-+		{base} is the conversion base, it can be 8, 10 or 16.
-+		When {base} is omitted base 10 is used.  This also means that
-+		a leading zero doesn't cause octal conversion to be used, as
-+		with the default String to Number conversion.
-+		When {base} is 16 a leading "0x" or "0X" is ignored.  With a
-+		different base the result will be zero.
-+		Text after the number is silently ignored.
-+
-+
-+strchars({expr})					*strchars()*
-+		The result is a Number, which is the number of characters
-+		String {expr} occupies.  Composing characters are counted
-+		separately.
-+		Also see |strlen()|, |strdisplaywidth()| and |strwidth()|.
-+
-+strdisplaywidth({expr}[, {col}])			*strdisplaywidth()*
-+		The result is a Number, which is the number of display cells
-+		String {expr} occupies on the screen.
-+		When {col} is omitted zero is used.  Otherwise it is the
-+		screen column where to start.  This matters for Tab
-+		characters.
-+		The option settings of the current window are used.  This
-+		matters for anything that's displayed differently, such as
-+		'tabstop' and 'display'.
-+		When {expr} contains characters with East Asian Width Class
-+		Ambiguous, this function's return value depends on 'ambiwidth'.
-+		Also see |strlen()|, |strwidth()| and |strchars()|.
-+
-+strftime({format} [, {time}])				*strftime()*
-+		The result is a String, which is a formatted date and time, as
-+		specified by the {format} string.  The given {time} is used,
-+		or the current time if no time is given.  The accepted
-+		{format} depends on your system, thus this is not portable!
-+		See the manual page of the C function strftime() for the
-+		format.  The maximum length of the result is 80 characters.
-+		See also |localtime()| and |getftime()|.
-+		The language can be changed with the |:language| command.
-+		Examples: >
-+		  :echo strftime("%c")		   Sun Apr 27 11:49:23 1997
-+		  :echo strftime("%Y %b %d %X")	   1997 Apr 27 11:53:25
-+		  :echo strftime("%y%m%d %T")	   970427 11:53:55
-+		  :echo strftime("%H:%M")	   11:55
-+		  :echo strftime("%c", getftime("file.c"))
-+						   Show mod time of file.c.
-+<		Not available on all systems.  To check use: >
-+			:if exists("*strftime")
-+
-+stridx({haystack}, {needle} [, {start}])		*stridx()*
-+		The result is a Number, which gives the byte index in
-+		{haystack} of the first occurrence of the String {needle}.
-+		If {start} is specified, the search starts at index {start}.
-+		This can be used to find a second match: >
-+			:let comma1 = stridx(line, ",")
-+			:let comma2 = stridx(line, ",", comma1 + 1)
-+<		The search is done case-sensitive.
-+		For pattern searches use |match()|.
-+		-1 is returned if the {needle} does not occur in {haystack}.
-+		See also |strridx()|.
-+		Examples: >
-+		  :echo stridx("An Example", "Example")	     3
-+		  :echo stridx("Starting point", "Start")    0
-+		  :echo stridx("Starting point", "start")   -1
-+<						*strstr()* *strchr()*
-+		stridx() works similar to the C function strstr().  When used
-+		with a single character it works similar to strchr().
-+
-+							*string()*
-+string({expr})	Return {expr} converted to a String.  If {expr} is a Number,
-+		Float, String or a composition of them, then the result can be
-+		parsed back with |eval()|.
-+			{expr} type	result ~
-+			String		'string'
-+			Number		123
-+			Float		123.123456 or 1.123456e8
-+			Funcref		function('name')
-+			List		[item, item]
-+			Dictionary	{key: value, key: value}
-+		Note that in String values the ' character is doubled.
-+		Also see |strtrans()|.
-+
-+							*strlen()*
-+strlen({expr})	The result is a Number, which is the length of the String
-+		{expr} in bytes.
-+		If you want to count the number of multi-byte characters (not
-+		counting composing characters) use something like this: >
-+
-+			:let len = strlen(substitute(str, ".", "x", "g"))
-+<
-+		If the argument is a Number it is first converted to a String.
-+		For other types an error is given.
-+		Also see |len()|, |strchars()|, |strdisplaywidth()| and
-+		|strwidth()|.
-+
-+strpart({src}, {start}[, {len}])			*strpart()*
-+		The result is a String, which is part of {src}, starting from
-+		byte {start}, with the byte length {len}.
-+		When non-existing bytes are included, this doesn't result in
-+		an error, the bytes are simply omitted.
-+		If {len} is missing, the copy continues from {start} till the
-+		end of the {src}. >
-+			strpart("abcdefg", 3, 2)    == "de"
-+			strpart("abcdefg", -2, 4)   == "ab"
-+			strpart("abcdefg", 5, 4)    == "fg"
-+			strpart("abcdefg", 3)	    == "defg"
-+<		Note: To get the first character, {start} must be 0.  For
-+		example, to get three bytes under and after the cursor: >
-+			strpart(getline("."), col(".") - 1, 3)
-+<
-+strridx({haystack}, {needle} [, {start}])			*strridx()*
-+		The result is a Number, which gives the byte index in
-+		{haystack} of the last occurrence of the String {needle}.
-+		When {start} is specified, matches beyond this index are
-+		ignored.  This can be used to find a match before a previous
-+		match: >
-+			:let lastcomma = strridx(line, ",")
-+			:let comma2 = strridx(line, ",", lastcomma - 1)
-+<		The search is done case-sensitive.
-+		For pattern searches use |match()|.
-+		-1 is returned if the {needle} does not occur in {haystack}.
-+		If the {needle} is empty the length of {haystack} is returned.
-+		See also |stridx()|.  Examples: >
-+		  :echo strridx("an angry armadillo", "an")	     3
-+<							*strrchr()*
-+		When used with a single character it works similar to the C
-+		function strrchr().
-+
-+strtrans({expr})					*strtrans()*
-+		The result is a String, which is {expr} with all unprintable
-+		characters translated into printable characters |'isprint'|.
-+		Like they are shown in a window.  Example: >
-+			echo strtrans(@a)
-+<		This displays a newline in register a as "^@" instead of
-+		starting a new line.
-+
-+strwidth({expr})					*strwidth()*
-+		The result is a Number, which is the number of display cells
-+		String {expr} occupies.  A Tab character is counted as one
-+		cell, alternatively use |strdisplaywidth()|.
-+		When {expr} contains characters with East Asian Width Class
-+		Ambiguous, this function's return value depends on 'ambiwidth'.
-+		Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
-+
-+submatch({nr})						*submatch()*
-+		Only for an expression in a |:substitute| command.  Returns
-+		the {nr}'th submatch of the matched text.  When {nr} is 0
-+		the whole matched text is returned.
-+		Example: >
-+			:s/\d\+/\=submatch(0) + 1/
-+<		This finds the first number in the line and adds one to it.
-+		A line break is included as a newline character.
-+
-+substitute({expr}, {pat}, {sub}, {flags})		*substitute()*
-+		The result is a String, which is a copy of {expr}, in which
-+		the first match of {pat} is replaced with {sub}.  This works
-+		like the ":substitute" command (without any flags).  But the
-+		matching with {pat} is always done like the 'magic' option is
-+		set and 'cpoptions' is empty (to make scripts portable).
-+		'ignorecase' is still relevant.  'smartcase' is not used.
-+		See |string-match| for how {pat} is used.
-+		And a "~" in {sub} is not replaced with the previous {sub}.
-+		Note that some codes in {sub} have a special meaning
-+		|sub-replace-special|.	For example, to replace something with
-+		"\n" (two characters), use "\\\\n" or '\\n'.
-+		When {pat} does not match in {expr}, {expr} is returned
-+		unmodified.
-+		When {flags} is "g", all matches of {pat} in {expr} are
-+		replaced.  Otherwise {flags} should be "".
-+		Example: >
-+			:let &path = substitute(&path, ",\\=[^,]*$", "", "")
-+<		This removes the last component of the 'path' option. >
-+			:echo substitute("testing", ".*", "\\U\\0", "")
-+<		results in "TESTING".
-+
-+synID({lnum}, {col}, {trans})				*synID()*
-+		The result is a Number, which is the syntax ID at the position
-+		{lnum} and {col} in the current window.
-+		The syntax ID can be used with |synIDattr()| and
-+		|synIDtrans()| to obtain syntax information about text.
-+
-+		{col} is 1 for the leftmost column, {lnum} is 1 for the first
-+		line.  'synmaxcol' applies, in a longer line zero is returned.
-+
-+		When {trans} is non-zero, transparent items are reduced to the
-+		item that they reveal.	This is useful when wanting to know
-+		the effective color.  When {trans} is zero, the transparent
-+		item is returned.  This is useful when wanting to know which
-+		syntax item is effective (e.g. inside parens).
-+		Warning: This function can be very slow.  Best speed is
-+		obtained by going through the file in forward direction.
-+
-+		Example (echoes the name of the syntax item under the cursor): >
-+			:echo synIDattr(synID(line("."), col("."), 1), "name")
-+<
-+
-+synconcealed({lnum}, {col})				*synconcealed()*
-+		The result is a List. The first item in the list is 0 if the
-+		character at the position {lnum} and {col} is not part of a
-+		concealable region, 1 if it is. The second item in the list is
-+		a string. If the first item is 1, the second item contains the
-+		text which will be displayed in place of the concealed text,
-+		depending on the current setting of 'conceallevel'. The third
-+		and final item in the list is a unique number representing the
-+		specific syntax region matched. This allows detection of the
-+		beginning of a new concealable region if there are two
-+		consecutive regions with the same replacement character.
-+		For an example use see $VIMRUNTIME/syntax/2html.vim .
-+
-+
-+synIDattr({synID}, {what} [, {mode}])			*synIDattr()*
-+		The result is a String, which is the {what} attribute of
-+		syntax ID {synID}.  This can be used to obtain information
-+		about a syntax item.
-+		{mode} can be "gui", "cterm" or "term", to get the attributes
-+		for that mode.	When {mode} is omitted, or an invalid value is
-+		used, the attributes for the currently active highlighting are
-+		used (GUI, cterm or term).
-+		Use synIDtrans() to follow linked highlight groups.
-+		{what}		result
-+		"name"		the name of the syntax item
-+		"fg"		foreground color (GUI: color name used to set
-+				the color, cterm: color number as a string,
-+				term: empty string)
-+		"bg"		background color (as with "fg")
-+		"font"		font name (only available in the GUI)
-+				|highlight-font|
-+		"sp"		special color (as with "fg") |highlight-guisp|
-+		"fg#"		like "fg", but for the GUI and the GUI is
-+				running the name in "#RRGGBB" form
-+		"bg#"		like "fg#" for "bg"
-+		"sp#"		like "fg#" for "sp"
-+		"bold"		"1" if bold
-+		"italic"	"1" if italic
-+		"reverse"	"1" if reverse
-+		"inverse"	"1" if inverse (= reverse)
-+		"standout"	"1" if standout
-+		"underline"	"1" if underlined
-+		"undercurl"	"1" if undercurled
-+
-+		Example (echoes the color of the syntax item under the
-+		cursor): >
-+	:echo synIDattr(synIDtrans(synID(line("."), col("."), 1)), "fg")
-+<
-+synIDtrans({synID})					*synIDtrans()*
-+		The result is a Number, which is the translated syntax ID of
-+		{synID}.  This is the syntax group ID of what is being used to
-+		highlight the character.  Highlight links given with
-+		":highlight link" are followed.
-+
-+synstack({lnum}, {col})					*synstack()*
-+		Return a |List|, which is the stack of syntax items at the
-+		position {lnum} and {col} in the current window.  Each item in
-+		the List is an ID like what |synID()| returns.
-+		The first item in the List is the outer region, following are
-+		items contained in that one.  The last one is what |synID()|
-+		returns, unless not the whole item is highlighted or it is a
-+		transparent item.
-+		This function is useful for debugging a syntax file.
-+		Example that shows the syntax stack under the cursor: >
-+			for id in synstack(line("."), col("."))
-+			   echo synIDattr(id, "name")
-+			endfor
-+<		When the position specified with {lnum} and {col} is invalid
-+		nothing is returned.  The position just after the last
-+		character in a line and the first column in an empty line are
-+		valid positions.
-+
-+system({expr} [, {input}])				*system()* *E677*
-+		Get the output of the shell command {expr}.
-+		When {input} is given, this string is written to a file and
-+		passed as stdin to the command.  The string is written as-is,
-+		you need to take care of using the correct line separators
-+		yourself.  Pipes are not used.
-+		Note: Use |shellescape()| to escape special characters in a
-+		command argument.  Newlines in {expr} may cause the command to
-+		fail.  The characters in 'shellquote' and 'shellxquote' may
-+		also cause trouble.
-+		This is not to be used for interactive commands.
-+
-+		The result is a String.  Example: >
-+		    :let files = system("ls " .  shellescape(expand('%:h')))
-+
-+<		To make the result more system-independent, the shell output
-+		is filtered to replace <CR> with <NL> for Macintosh, and
-+		<CR><NL> with <NL> for DOS-like systems.
-+		The command executed is constructed using several options:
-+	'shell' 'shellcmdflag' 'shellxquote' {expr} 'shellredir' {tmp} 'shellxquote'
-+		({tmp} is an automatically generated file name).
-+		For Unix and OS/2 braces are put around {expr} to allow for
-+		concatenated commands.
-+
-+		The command will be executed in "cooked" mode, so that a
-+		CTRL-C will interrupt the command (on Unix at least).
-+
-+		The resulting error code can be found in |v:shell_error|.
-+		This function will fail in |restricted-mode|.
-+
-+		Note that any wrong value in the options mentioned above may
-+		make the function fail.  It has also been reported to fail
-+		when using a security agent application.
-+		Unlike ":!cmd" there is no automatic check for changed files.
-+		Use |:checktime| to force a check.
-+
-+
-+tabpagebuflist([{arg}])					*tabpagebuflist()*
-+		The result is a |List|, where each item is the number of the
-+		buffer associated with each window in the current tab page.
-+		{arg} specifies the number of tab page to be used.  When
-+		omitted the current tab page is used.
-+		When {arg} is invalid the number zero is returned.
-+		To get a list of all buffers in all tabs use this: >
-+			tablist = []
-+			for i in range(tabpagenr('$'))
-+			   call extend(tablist, tabpagebuflist(i + 1))
-+			endfor
-+<		Note that a buffer may appear in more than one window.
-+
-+
-+tabpagenr([{arg}])					*tabpagenr()*
-+		The result is a Number, which is the number of the current
-+		tab page.  The first tab page has number 1.
-+		When the optional argument is "$", the number of the last tab
-+		page is returned (the tab page count).
-+		The number can be used with the |:tab| command.
-+
-+
-+tabpagewinnr({tabarg}, [{arg}])				*tabpagewinnr()*
-+		Like |winnr()| but for tab page {tabarg}.
-+		{tabarg} specifies the number of tab page to be used.
-+		{arg} is used like with |winnr()|:
-+		- When omitted the current window number is returned.  This is
-+		  the window which will be used when going to this tab page.
-+		- When "$" the number of windows is returned.
-+		- When "#" the previous window nr is returned.
-+		Useful examples: >
-+		    tabpagewinnr(1)	    " current window of tab page 1
-+		    tabpagewinnr(4, '$')    " number of windows in tab page 4
-+<		When {tabarg} is invalid zero is returned.
-+
-+							*tagfiles()*
-+tagfiles()	Returns a |List| with the file names used to search for tags
-+		for the current buffer.  This is the 'tags' option expanded.
-+
-+
-+taglist({expr})							*taglist()*
-+		Returns a list of tags matching the regular expression {expr}.
-+		Each list item is a dictionary with at least the following
-+		entries:
-+			name		Name of the tag.
-+			filename	Name of the file where the tag is
-+					defined.  It is either relative to the
-+					current directory or a full path.
-+			cmd		Ex command used to locate the tag in
-+					the file.
-+			kind		Type of the tag.  The value for this
-+					entry depends on the language specific
-+					kind values.  Only available when
-+					using a tags file generated by
-+					Exuberant ctags or hdrtag.
-+			static		A file specific tag.  Refer to
-+					|static-tag| for more information.
-+		More entries may be present, depending on the content of the
-+		tags file: access, implementation, inherits and signature.
-+		Refer to the ctags documentation for information about these
-+		fields.  For C code the fields "struct", "class" and "enum"
-+		may appear, they give the name of the entity the tag is
-+		contained in.
-+
-+		The ex-command 'cmd' can be either an ex search pattern, a
-+		line number or a line number followed by a byte number.
-+
-+		If there are no matching tags, then an empty list is returned.
-+
-+		To get an exact tag match, the anchors '^' and '$' should be
-+		used in {expr}.  Refer to |tag-regexp| for more information
-+		about the tag search regular expression pattern.
-+
-+		Refer to |'tags'| for information about how the tags file is
-+		located by Vim. Refer to |tags-file-format| for the format of
-+		the tags file generated by the different ctags tools.
-+
-+tempname()					*tempname()* *temp-file-name*
-+		The result is a String, which is the name of a file that
-+		doesn't exist.	It can be used for a temporary file.  The name
-+		is different for at least 26 consecutive calls.  Example: >
-+			:let tmpfile = tempname()
-+			:exe "redir > " . tmpfile
-+<		For Unix, the file will be in a private directory |tempfile|.
-+		For MS-Windows forward slashes are used when the 'shellslash'
-+		option is set or when 'shellcmdflag' starts with '-'.
-+
-+
-+tan({expr})						*tan()*
-+		Return the tangent of {expr}, measured in radians, as a |Float|
-+		in the range [-inf, inf].
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo tan(10)
-+<			0.648361 >
-+			:echo tan(-4.01)
-+<			-1.181502
-+		{only available when compiled with the |+float| feature}
-+
-+
-+tanh({expr})						*tanh()*
-+		Return the hyperbolic tangent of {expr} as a |Float| in the
-+		range [-1, 1].
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			:echo tanh(0.5)
-+<			0.462117 >
-+			:echo tanh(-1)
-+<			-0.761594
-+		{only available when compiled with the |+float| feature}
-+
-+
-+tolower({expr})						*tolower()*
-+		The result is a copy of the String given, with all uppercase
-+		characters turned into lowercase (just like applying |gu| to
-+		the string).
-+
-+toupper({expr})						*toupper()*
-+		The result is a copy of the String given, with all lowercase
-+		characters turned into uppercase (just like applying |gU| to
-+		the string).
-+
-+tr({src}, {fromstr}, {tostr})				*tr()*
-+		The result is a copy of the {src} string with all characters
-+		which appear in {fromstr} replaced by the character in that
-+		position in the {tostr} string.  Thus the first character in
-+		{fromstr} is translated into the first character in {tostr}
-+		and so on.  Exactly like the unix "tr" command.
-+		This code also deals with multibyte characters properly.
-+
-+		Examples: >
-+			echo tr("hello there", "ht", "HT")
-+<		returns "Hello THere" >
-+			echo tr("<blob>", "<>", "{}")
-+<		returns "{blob}"
-+
-+trunc({expr})							*trunc()*
-+		Return the largest integral value with magnitude less than or
-+		equal to {expr} as a |Float| (truncate towards zero).
-+		{expr} must evaluate to a |Float| or a |Number|.
-+		Examples: >
-+			echo trunc(1.456)
-+<			1.0  >
-+			echo trunc(-5.456)
-+<			-5.0  >
-+			echo trunc(4.0)
-+<			4.0
-+		{only available when compiled with the |+float| feature}
-+		
-+							*type()*
-+type({expr})	The result is a Number, depending on the type of {expr}:
-+			Number:	    0
-+			String:	    1
-+			Funcref:    2
-+			List:	    3
-+			Dictionary: 4
-+			Float:	    5
-+		To avoid the magic numbers it should be used this way: >
-+			:if type(myvar) == type(0)
-+			:if type(myvar) == type("")
-+			:if type(myvar) == type(function("tr"))
-+			:if type(myvar) == type([])
-+			:if type(myvar) == type({})
-+			:if type(myvar) == type(0.0)
-+
-+undofile({name})					*undofile()*
-+		Return the name of the undo file that would be used for a file
-+		with name {name} when writing.  This uses the 'undodir'
-+		option, finding directories that exist.  It does not check if
-+		the undo file exists.
-+		{name} is always expanded to the full path, since that is what
-+		is used internally.
-+		Useful in combination with |:wundo| and |:rundo|.
-+		When compiled without the +persistent_undo option this always
-+		returns an empty string.
-+
-+undotree()						*undotree()*
-+		Return the current state of the undo tree in a dictionary with
-+		the following items:
-+		  "seq_last"	The highest undo sequence number used.
-+		  "seq_cur"	The sequence number of the current position in
-+				the undo tree.  This differs from "seq_last"
-+				when some changes were undone.
-+		  "time_cur"	Time last used for |:earlier| and related
-+				commands.  Use |strftime()| to convert to
-+				something readable.
-+		  "save_last"	Number of the last file write.  Zero when no
-+				write yet.
-+		  "save_cur"	Number of the current position in the undo
-+				tree.  
-+		  "synced"	Non-zero when the last undo block was synced.
-+				This happens when waiting from input from the
-+				user.  See |undo-blocks|.
-+		  "entries"	A list of dictionaries with information about
-+				undo blocks.
-+
-+		The first item in the "entries" list is the oldest undo item.
-+		Each List item is a Dictionary with these items:
-+		  "seq"		Undo sequence number.  Same as what appears in
-+				|:undolist|.
-+		  "time"	Timestamp when the change happened.  Use
-+				|strftime()| to convert to something readable.
-+		  "newhead"	Only appears in the item that is the last one
-+				that was added.  This marks the last change
-+				and where further changes will be added.
-+		  "curhead"	Only appears in the item that is the last one
-+				that was undone.  This marks the current
-+				position in the undo tree, the block that will
-+				be used by a redo command.  When nothing was
-+				undone after the last change this item will
-+				not appear anywhere.
-+		  "save"	Only appears on the last block before a file
-+				write.  The number is the write count.  The
-+				first write has number 1, the last one the
-+				"save_last" mentioned above.
-+		  "alt"		Alternate entry.  This is again a List of undo
-+				blocks.  Each item may again have an "alt"
-+				item.
-+
-+values({dict})						*values()*
-+		Return a |List| with all the values of {dict}.	The |List| is
-+		in arbitrary order.
-+
-+
-+virtcol({expr})						*virtcol()*
-+		The result is a Number, which is the screen column of the file
-+		position given with {expr}.  That is, the last screen position
-+		occupied by the character at that position, when the screen
-+		would be of unlimited width.  When there is a <Tab> at the
-+		position, the returned Number will be the column at the end of
-+		the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
-+		set to 8, it returns 8.
-+		For the byte position use |col()|.
-+		For the use of {expr} see |col()|.
-+		When 'virtualedit' is used {expr} can be [lnum, col, off], where
-+		"off" is the offset in screen columns from the start of the
-+		character.  E.g., a position within a <Tab> or after the last
-+		character.
-+		When Virtual editing is active in the current mode, a position
-+		beyond the end of the line can be returned. |'virtualedit'|
-+		The accepted positions are:
-+		    .	    the cursor position
-+		    $	    the end of the cursor line (the result is the
-+			    number of displayed characters in the cursor line
-+			    plus one)
-+		    'x	    position of mark x (if the mark is not set, 0 is
-+			    returned)
-+		Note that only marks in the current file can be used.
-+		Examples: >
-+  virtcol(".")	   with text "foo^Lbar", with cursor on the "^L", returns 5
-+  virtcol("$")	   with text "foo^Lbar", returns 9
-+  virtcol("'t")    with text "	  there", with 't at 'h', returns 6
-+<		The first column is 1.	0 is returned for an error.
-+		A more advanced example that echoes the maximum length of
-+		all lines: >
-+		    echo max(map(range(1, line('$')), "virtcol([v:val, '$'])"))
-+
-+
-+visualmode([expr])						*visualmode()*
-+		The result is a String, which describes the last Visual mode
-+		used in the current buffer.  Initially it returns an empty
-+		string, but once Visual mode has been used, it returns "v",
-+		"V", or "<CTRL-V>" (a single CTRL-V character) for
-+		character-wise, line-wise, or block-wise Visual mode
-+		respectively.
-+		Example: >
-+			:exe "normal " . visualmode()
-+<		This enters the same Visual mode as before.  It is also useful
-+		in scripts if you wish to act differently depending on the
-+		Visual mode that was used.
-+		If Visual mode is active, use |mode()| to get the Visual mode
-+		(e.g., in a |:vmap|).
-+							*non-zero-arg*
-+		If [expr] is supplied and it evaluates to a non-zero Number or
-+		a non-empty String, then the Visual mode will be cleared and
-+		the old value is returned.  Note that " " and "0" are also
-+		non-empty strings, thus cause the mode to be cleared.  A List,
-+		Dictionary or Float is not a Number or String, thus does not
-+		cause the mode to be cleared.
-+
-+							*winbufnr()*
-+winbufnr({nr})	The result is a Number, which is the number of the buffer
-+		associated with window {nr}.  When {nr} is zero, the number of
-+		the buffer in the current window is returned.  When window
-+		{nr} doesn't exist, -1 is returned.
-+		Example: >
-+  :echo "The file in the current window is " . bufname(winbufnr(0))
-+<
-+							*wincol()*
-+wincol()	The result is a Number, which is the virtual column of the
-+		cursor in the window.  This is counting screen cells from the
-+		left side of the window.  The leftmost column is one.
-+
-+winheight({nr})						*winheight()*
-+		The result is a Number, which is the height of window {nr}.
-+		When {nr} is zero, the height of the current window is
-+		returned.  When window {nr} doesn't exist, -1 is returned.
-+		An existing window always has a height of zero or more.
-+		Examples: >
-+  :echo "The current window has " . winheight(0) . " lines."
-+<
-+							*winline()*
-+winline()	The result is a Number, which is the screen line of the cursor
-+		in the window.	This is counting screen lines from the top of
-+		the window.  The first line is one.
-+		If the cursor was moved the view on the file will be updated
-+		first, this may cause a scroll.
-+
-+							*winnr()*
-+winnr([{arg}])	The result is a Number, which is the number of the current
-+		window.  The top window has number 1.
-+		When the optional argument is "$", the number of the
-+		last window is returned (the window count).
-+		When the optional argument is "#", the number of the last
-+		accessed window is returned (where |CTRL-W_p| goes to).
-+		If there is no previous window or it is in another tab page 0
-+		is returned.
-+		The number can be used with |CTRL-W_w| and ":wincmd w"
-+		|:wincmd|.
-+		Also see |tabpagewinnr()|.
-+
-+							*winrestcmd()*
-+winrestcmd()	Returns a sequence of |:resize| commands that should restore
-+		the current window sizes.  Only works properly when no windows
-+		are opened or closed and the current window and tab page is
-+		unchanged.
-+		Example: >
-+			:let cmd = winrestcmd()
-+			:call MessWithWindowSizes()
-+			:exe cmd
-+<
-+							*winrestview()*
-+winrestview({dict})
-+		Uses the |Dictionary| returned by |winsaveview()| to restore
-+		the view of the current window.
-+		If you have changed the values the result is unpredictable.
-+		If the window size changed the result won't be the same.
-+
-+							*winsaveview()*
-+winsaveview()	Returns a |Dictionary| that contains information to restore
-+		the view of the current window.  Use |winrestview()| to
-+		restore the view.
-+		This is useful if you have a mapping that jumps around in the
-+		buffer and you want to go back to the original view.
-+		This does not save fold information.  Use the 'foldenable'
-+		option to temporarily switch off folding, so that folds are
-+		not opened when moving around.
-+		The return value includes:
-+			lnum		cursor line number
-+			col		cursor column
-+			coladd		cursor column offset for 'virtualedit'
-+			curswant	column for vertical movement
-+			topline		first line in the window
-+			topfill		filler lines, only in diff mode
-+			leftcol		first column displayed
-+			skipcol		columns skipped
-+		Note that no option values are saved.
-+
-+
-+winwidth({nr})						*winwidth()*
-+		The result is a Number, which is the width of window {nr}.
-+		When {nr} is zero, the width of the current window is
-+		returned.  When window {nr} doesn't exist, -1 is returned.
-+		An existing window always has a width of zero or more.
-+		Examples: >
-+  :echo "The current window has " . winwidth(0) . " columns."
-+  :if winwidth(0) <= 50
-+  :  exe "normal 50\<C-W>|"
-+  :endif
-+<
-+							*writefile()*
-+writefile({list}, {fname} [, {binary}])
-+		Write |List| {list} to file {fname}.  Each list item is
-+		separated with a NL.  Each list item must be a String or
-+		Number.
-+		When {binary} is equal to "b" binary mode is used: There will
-+		not be a NL after the last list item.  An empty item at the
-+		end does cause the last line in the file to end in a NL.
-+		All NL characters are replaced with a NUL character.
-+		Inserting CR characters needs to be done before passing {list}
-+		to writefile().
-+		An existing file is overwritten, if possible.
-+		When the write fails -1 is returned, otherwise 0.  There is an
-+		error message if the file can't be created or when writing
-+		fails.
-+		Also see |readfile()|.
-+		To copy a file byte for byte: >
-+			:let fl = readfile("foo", "b")
-+			:call writefile(fl, "foocopy", "b")
-+<
-+
-+							*feature-list*
-+There are three types of features:
-+1.  Features that are only supported when they have been enabled when Vim
-+    was compiled |+feature-list|.  Example: >
-+	:if has("cindent")
-+2.  Features that are only supported when certain conditions have been met.
-+    Example: >
-+	:if has("gui_running")
-+<							*has-patch*
-+3.  Included patches.  First check |v:version| for the version of Vim.
-+    Then the "patch123" feature means that patch 123 has been included for
-+    this version.  Example (checking version 6.2.148 or later): >
-+	:if v:version > 602 || v:version == 602 && has("patch148")
-+<   Note that it's possible for patch 147 to be omitted even though 148 is
-+    included.
-+
-+all_builtin_terms	Compiled with all builtin terminals enabled.
-+amiga			Amiga version of Vim.
-+arabic			Compiled with Arabic support |Arabic|.
-+arp			Compiled with ARP support (Amiga).
-+autocmd			Compiled with autocommand support. |autocommand|
-+balloon_eval		Compiled with |balloon-eval| support.
-+balloon_multiline	GUI supports multiline balloons.
-+beos			BeOS version of Vim.
-+browse			Compiled with |:browse| support, and browse() will
-+			work.
-+builtin_terms		Compiled with some builtin terminals.
-+byte_offset		Compiled with support for 'o' in 'statusline'
-+cindent			Compiled with 'cindent' support.
-+clientserver		Compiled with remote invocation support |clientserver|.
-+clipboard		Compiled with 'clipboard' support.
-+cmdline_compl		Compiled with |cmdline-completion| support.
-+cmdline_hist		Compiled with |cmdline-history| support.
-+cmdline_info		Compiled with 'showcmd' and 'ruler' support.
-+comments		Compiled with |'comments'| support.
-+cryptv			Compiled with encryption support |encryption|.
-+cscope			Compiled with |cscope| support.
-+compatible		Compiled to be very Vi compatible.
-+debug			Compiled with "DEBUG" defined.
-+dialog_con		Compiled with console dialog support.
-+dialog_gui		Compiled with GUI dialog support.
-+diff			Compiled with |vimdiff| and 'diff' support.
-+digraphs		Compiled with support for digraphs.
-+dnd			Compiled with support for the "~ register |quote_~|.
-+dos32			32 bits DOS (DJGPP) version of Vim.
-+dos16			16 bits DOS version of Vim.
-+ebcdic			Compiled on a machine with ebcdic character set.
-+emacs_tags		Compiled with support for Emacs tags.
-+eval			Compiled with expression evaluation support.  Always
-+			true, of course!
-+ex_extra		Compiled with extra Ex commands |+ex_extra|.
-+extra_search		Compiled with support for |'incsearch'| and
-+			|'hlsearch'|
-+farsi			Compiled with Farsi support |farsi|.
-+file_in_path		Compiled with support for |gf| and |<cfile>|
-+filterpipe		When 'shelltemp' is off pipes are used for shell
-+			read/write/filter commands
-+find_in_path		Compiled with support for include file searches
-+			|+find_in_path|.
-+float			Compiled with support for |Float|.
-+fname_case		Case in file names matters (for Amiga, MS-DOS, and
-+			Windows this is not present).
-+folding			Compiled with |folding| support.
-+footer			Compiled with GUI footer support. |gui-footer|
-+fork			Compiled to use fork()/exec() instead of system().
-+gettext			Compiled with message translation |multi-lang|
-+gui			Compiled with GUI enabled.
-+gui_athena		Compiled with Athena GUI.
-+gui_gtk			Compiled with GTK+ GUI (any version).
-+gui_gtk2		Compiled with GTK+ 2 GUI (gui_gtk is also defined).
-+gui_gnome		Compiled with Gnome support (gui_gtk is also defined).
-+gui_mac			Compiled with Macintosh GUI.
-+gui_motif		Compiled with Motif GUI.
-+gui_photon		Compiled with Photon GUI.
-+gui_win32		Compiled with MS Windows Win32 GUI.
-+gui_win32s		idem, and Win32s system being used (Windows 3.1)
-+gui_running		Vim is running in the GUI, or it will start soon.
-+hangul_input		Compiled with Hangul input support. |hangul|
-+iconv			Can use iconv() for conversion.
-+insert_expand		Compiled with support for CTRL-X expansion commands in
-+			Insert mode.
-+jumplist		Compiled with |jumplist| support.
-+keymap			Compiled with 'keymap' support.
-+langmap			Compiled with 'langmap' support.
-+libcall			Compiled with |libcall()| support.
-+linebreak		Compiled with 'linebreak', 'breakat' and 'showbreak'
-+			support.
-+lispindent		Compiled with support for lisp indenting.
-+listcmds		Compiled with commands for the buffer list |:files|
-+			and the argument list |arglist|.
-+localmap		Compiled with local mappings and abbr. |:map-local|
-+lua			Compiled with Lua interface |Lua|.
-+mac			Macintosh version of Vim.
-+macunix			Macintosh version of Vim, using Unix files (OS-X).
-+menu			Compiled with support for |:menu|.
-+mksession		Compiled with support for |:mksession|.
-+modify_fname		Compiled with file name modifiers. |filename-modifiers|
-+mouse			Compiled with support mouse.
-+mouseshape		Compiled with support for 'mouseshape'.
-+mouse_dec		Compiled with support for Dec terminal mouse.
-+mouse_gpm		Compiled with support for gpm (Linux console mouse)
-+mouse_netterm		Compiled with support for netterm mouse.
-+mouse_pterm		Compiled with support for qnx pterm mouse.
-+mouse_sysmouse		Compiled with support for sysmouse (*BSD console mouse)
-+mouse_xterm		Compiled with support for xterm mouse.
-+multi_byte		Compiled with support for 'encoding'
-+multi_byte_encoding	'encoding' is set to a multi-byte encoding.
-+multi_byte_ime		Compiled with support for IME input method.
-+multi_lang		Compiled with support for multiple languages.
-+mzscheme		Compiled with MzScheme interface |mzscheme|.
-+netbeans_intg		Compiled with support for |netbeans|.
-+netbeans_enabled	Compiled with support for |netbeans| and connected.
-+ole			Compiled with OLE automation support for Win32.
-+os2			OS/2 version of Vim.
-+osfiletype		Compiled with support for osfiletypes |+osfiletype|
-+path_extra		Compiled with up/downwards search in 'path' and 'tags'
-+perl			Compiled with Perl interface.
-+persistent_undo		Compiled with support for persistent undo history.
-+postscript		Compiled with PostScript file printing.
-+printer			Compiled with |:hardcopy| support.
-+profile			Compiled with |:profile| support.
-+python			Compiled with Python interface.
-+qnx			QNX version of Vim.
-+quickfix		Compiled with |quickfix| support.
-+reltime			Compiled with |reltime()| support.
-+rightleft		Compiled with 'rightleft' support.
-+ruby			Compiled with Ruby interface |ruby|.
-+scrollbind		Compiled with 'scrollbind' support.
-+showcmd			Compiled with 'showcmd' support.
-+signs			Compiled with |:sign| support.
-+smartindent		Compiled with 'smartindent' support.
-+sniff			Compiled with SNiFF interface support.
-+startuptime		Compiled with |--startuptime| support.
-+statusline		Compiled with support for 'statusline', 'rulerformat'
-+			and special formats of 'titlestring' and 'iconstring'.
-+sun_workshop		Compiled with support for Sun |workshop|.
-+spell			Compiled with spell checking support |spell|.
-+syntax			Compiled with syntax highlighting support |syntax|.
-+syntax_items		There are active syntax highlighting items for the
-+			current buffer.
-+system			Compiled to use system() instead of fork()/exec().
-+tag_binary		Compiled with binary searching in tags files
-+			|tag-binary-search|.
-+tag_old_static		Compiled with support for old static tags
-+			|tag-old-static|.
-+tag_any_white		Compiled with support for any white characters in tags
-+			files |tag-any-white|.
-+tcl			Compiled with Tcl interface.
-+terminfo		Compiled with terminfo instead of termcap.
-+termresponse		Compiled with support for |t_RV| and |v:termresponse|.
-+textobjects		Compiled with support for |text-objects|.
-+tgetent			Compiled with tgetent support, able to use a termcap
-+			or terminfo file.
-+title			Compiled with window title support |'title'|.
-+toolbar			Compiled with support for |gui-toolbar|.
-+unix			Unix version of Vim.
-+user_commands		User-defined commands.
-+viminfo			Compiled with viminfo support.
-+vim_starting		True while initial source'ing takes place.
-+vertsplit		Compiled with vertically split windows |:vsplit|.
-+virtualedit		Compiled with 'virtualedit' option.
-+visual			Compiled with Visual mode.
-+visualextra		Compiled with extra Visual mode commands.
-+			|blockwise-operators|.
-+vms			VMS version of Vim.
-+vreplace		Compiled with |gR| and |gr| commands.
-+wildignore		Compiled with 'wildignore' option.
-+wildmenu		Compiled with 'wildmenu' option.
-+windows			Compiled with support for more than one window.
-+winaltkeys		Compiled with 'winaltkeys' option.
-+win16			Win16 version of Vim (MS-Windows 3.1).
-+win32			Win32 version of Vim (MS-Windows 95/98/ME/NT/2000/XP).
-+win64			Win64 version of Vim (MS-Windows 64 bit).
-+win32unix		Win32 version of Vim, using Unix files (Cygwin)
-+win95			Win32 version for MS-Windows 95/98/ME.
-+writebackup		Compiled with 'writebackup' default on.
-+xfontset		Compiled with X fontset support |xfontset|.
-+xim			Compiled with X input method support |xim|.
-+xsmp			Compiled with X session management support.
-+xsmp_interact		Compiled with interactive X session management support.
-+xterm_clipboard		Compiled with support for xterm clipboard.
-+xterm_save		Compiled with support for saving and restoring the
-+			xterm screen.
-+x11			Compiled with X11 support.
-+
-+							*string-match*
-+Matching a pattern in a String
-+
-+A regexp pattern as explained at |pattern| is normally used to find a match in
-+the buffer lines.  When a pattern is used to find a match in a String, almost
-+everything works in the same way.  The difference is that a String is handled
-+like it is one line.  When it contains a "\n" character, this is not seen as a
-+line break for the pattern.  It can be matched with a "\n" in the pattern, or
-+with ".".  Example: >
-+	:let a = "aaaa\nxxxx"
-+	:echo matchstr(a, "..\n..")
-+	aa
-+	xx
-+	:echo matchstr(a, "a.x")
-+	a
-+	x
-+
-+Don't forget that "^" will only match at the first character of the String and
-+"$" at the last character of the string.  They don't match after or before a
-+"\n".
-+
-+==============================================================================
-+5. Defining functions					*user-functions*
-+
-+New functions can be defined.  These can be called just like builtin
-+functions.  The function executes a sequence of Ex commands.  Normal mode
-+commands can be executed with the |:normal| command.
-+
-+The function name must start with an uppercase letter, to avoid confusion with
-+builtin functions.  To prevent from using the same name in different scripts
-+avoid obvious, short names.  A good habit is to start the function name with
-+the name of the script, e.g., "HTMLcolor()".
-+
-+It's also possible to use curly braces, see |curly-braces-names|.  And the
-+|autoload| facility is useful to define a function only when it's called.
-+
-+							*local-function*
-+A function local to a script must start with "s:".  A local script function
-+can only be called from within the script and from functions, user commands
-+and autocommands defined in the script.  It is also possible to call the
-+function from a mapping defined in the script, but then |<SID>| must be used
-+instead of "s:" when the mapping is expanded outside of the script.
-+
-+					*:fu* *:function* *E128* *E129* *E123*
-+:fu[nction]		List all functions and their arguments.
-+
-+:fu[nction] {name}	List function {name}.
-+			{name} can also be a |Dictionary| entry that is a
-+			|Funcref|: >
-+				:function dict.init
-+
-+:fu[nction] /{pattern}	List functions with a name matching {pattern}.
-+			Example that lists all functions ending with "File": >
-+				:function /File$
-+<
-+							*:function-verbose*
-+When 'verbose' is non-zero, listing a function will also display where it was
-+last defined. Example: >
-+
-+    :verbose function SetFileTypeSH
-+	function SetFileTypeSH(name)
-+	    Last set from /usr/share/vim/vim-7.0/filetype.vim
-+<
-+See |:verbose-cmd| for more information.
-+
-+							*E124* *E125*
-+:fu[nction][!] {name}([arguments]) [range] [abort] [dict]
-+			Define a new function by the name {name}.  The name
-+			must be made of alphanumeric characters and '_', and
-+			must start with a capital or "s:" (see above).
-+
-+			{name} can also be a |Dictionary| entry that is a
-+			|Funcref|: >
-+				:function dict.init(arg)
-+<			"dict" must be an existing dictionary.	The entry
-+			"init" is added if it didn't exist yet.  Otherwise [!]
-+			is required to overwrite an existing function.	The
-+			result is a |Funcref| to a numbered function.  The
-+			function can only be used with a |Funcref| and will be
-+			deleted if there are no more references to it.
-+								*E127* *E122*
-+			When a function by this name already exists and [!] is
-+			not used an error message is given.  When [!] is used,
-+			an existing function is silently replaced.  Unless it
-+			is currently being executed, that is an error.
-+
-+			For the {arguments} see |function-argument|.
-+
-+						*a:firstline* *a:lastline*
-+			When the [range] argument is added, the function is
-+			expected to take care of a range itself.  The range is
-+			passed as "a:firstline" and "a:lastline".  If [range]
-+			is excluded, ":{range}call" will call the function for
-+			each line in the range, with the cursor on the start
-+			of each line.  See |function-range-example|.
-+
-+			When the [abort] argument is added, the function will
-+			abort as soon as an error is detected.
-+
-+			When the [dict] argument is added, the function must
-+			be invoked through an entry in a |Dictionary|.	The
-+			local variable "self" will then be set to the
-+			dictionary.  See |Dictionary-function|.
-+
-+						*function-search-undo*
-+			The last used search pattern and the redo command "."
-+			will not be changed by the function.  This also
-+			implies that the effect of |:nohlsearch| is undone
-+			when the function returns.
-+
-+					*:endf* *:endfunction* *E126* *E193*
-+:endf[unction]		The end of a function definition.  Must be on a line
-+			by its own, without other commands.
-+
-+					*:delf* *:delfunction* *E130* *E131*
-+:delf[unction] {name}	Delete function {name}.
-+			{name} can also be a |Dictionary| entry that is a
-+			|Funcref|: >
-+				:delfunc dict.init
-+<			This will remove the "init" entry from "dict".	The
-+			function is deleted if there are no more references to
-+			it.
-+							*:retu* *:return* *E133*
-+:retu[rn] [expr]	Return from a function.  When "[expr]" is given, it is
-+			evaluated and returned as the result of the function.
-+			If "[expr]" is not given, the number 0 is returned.
-+			When a function ends without an explicit ":return",
-+			the number 0 is returned.
-+			Note that there is no check for unreachable lines,
-+			thus there is no warning if commands follow ":return".
-+
-+			If the ":return" is used after a |:try| but before the
-+			matching |:finally| (if present), the commands
-+			following the ":finally" up to the matching |:endtry|
-+			are executed first.  This process applies to all
-+			nested ":try"s inside the function.  The function
-+			returns at the outermost ":endtry".
-+
-+						*function-argument* *a:var*
-+An argument can be defined by giving its name.	In the function this can then
-+be used as "a:name" ("a:" for argument).
-+					*a:0* *a:1* *a:000* *E740* *...*
-+Up to 20 arguments can be given, separated by commas.  After the named
-+arguments an argument "..." can be specified, which means that more arguments
-+may optionally be following.  In the function the extra arguments can be used
-+as "a:1", "a:2", etc.  "a:0" is set to the number of extra arguments (which
-+can be 0).  "a:000" is set to a |List| that contains these arguments.  Note
-+that "a:1" is the same as "a:000[0]".
-+								*E742*
-+The a: scope and the variables in it cannot be changed, they are fixed.
-+However, if a |List| or |Dictionary| is used, you can change their contents.
-+Thus you can pass a |List| to a function and have the function add an item to
-+it.  If you want to make sure the function cannot change a |List| or
-+|Dictionary| use |:lockvar|.
-+
-+When not using "...", the number of arguments in a function call must be equal
-+to the number of named arguments.  When using "...", the number of arguments
-+may be larger.
-+
-+It is also possible to define a function without any arguments.  You must
-+still supply the () then.  The body of the function follows in the next lines,
-+until the matching |:endfunction|.  It is allowed to define another function
-+inside a function body.
-+
-+							*local-variables*
-+Inside a function variables can be used.  These are local variables, which
-+will disappear when the function returns.  Global variables need to be
-+accessed with "g:".
-+
-+Example: >
-+  :function Table(title, ...)
-+  :  echohl Title
-+  :  echo a:title
-+  :  echohl None
-+  :  echo a:0 . " items:"
-+  :  for s in a:000
-+  :    echon ' ' . s
-+  :  endfor
-+  :endfunction
-+
-+This function can then be called with: >
-+  call Table("Table", "line1", "line2")
-+  call Table("Empty Table")
-+
-+To return more than one value, return a |List|: >
-+  :function Compute(n1, n2)
-+  :  if a:n2 == 0
-+  :    return ["fail", 0]
-+  :  endif
-+  :  return ["ok", a:n1 / a:n2]
-+  :endfunction
-+
-+This function can then be called with: >
-+  :let [success, div] = Compute(102, 6)
-+  :if success == "ok"
-+  :  echo div
-+  :endif
-+<
-+						*:cal* *:call* *E107* *E117*
-+:[range]cal[l] {name}([arguments])
-+		Call a function.  The name of the function and its arguments
-+		are as specified with |:function|.  Up to 20 arguments can be
-+		used.  The returned value is discarded.
-+		Without a range and for functions that accept a range, the
-+		function is called once.  When a range is given the cursor is
-+		positioned at the start of the first line before executing the
-+		function.
-+		When a range is given and the function doesn't handle it
-+		itself, the function is executed for each line in the range,
-+		with the cursor in the first column of that line.  The cursor
-+		is left at the last line (possibly moved by the last function
-+		call).	The arguments are re-evaluated for each line.  Thus
-+		this works:
-+						*function-range-example*  >
-+	:function Mynumber(arg)
-+	:  echo line(".") . " " . a:arg
-+	:endfunction
-+	:1,5call Mynumber(getline("."))
-+<
-+		The "a:firstline" and "a:lastline" are defined anyway, they
-+		can be used to do something different at the start or end of
-+		the range.
-+
-+		Example of a function that handles the range itself: >
-+
-+	:function Cont() range
-+	:  execute (a:firstline + 1) . "," . a:lastline . 's/^/\t\\ '
-+	:endfunction
-+	:4,8call Cont()
-+<
-+		This function inserts the continuation character "\" in front
-+		of all the lines in the range, except the first one.
-+
-+		When the function returns a composite value it can be further
-+		dereferenced, but the range will not be used then.  Example: >
-+	:4,8call GetDict().method()
-+<		Here GetDict() gets the range but method() does not.
-+
-+								*E132*
-+The recursiveness of user functions is restricted with the |'maxfuncdepth'|
-+option.
-+
-+
-+AUTOMATICALLY LOADING FUNCTIONS ~
-+							*autoload-functions*
-+When using many or large functions, it's possible to automatically define them
-+only when they are used.  There are two methods: with an autocommand and with
-+the "autoload" directory in 'runtimepath'.
-+
-+
-+Using an autocommand ~
-+
-+This is introduced in the user manual, section |41.14|.
-+
-+The autocommand is useful if you have a plugin that is a long Vim script file.
-+You can define the autocommand and quickly quit the script with |:finish|.
-+That makes Vim startup faster.	The autocommand should then load the same file
-+again, setting a variable to skip the |:finish| command.
-+
-+Use the FuncUndefined autocommand event with a pattern that matches the
-+function(s) to be defined.  Example: >
-+
-+	:au FuncUndefined BufNet* source ~/vim/bufnetfuncs.vim
-+
-+The file "~/vim/bufnetfuncs.vim" should then define functions that start with
-+"BufNet".  Also see |FuncUndefined|.
-+
-+
-+Using an autoload script ~
-+							*autoload* *E746*
-+This is introduced in the user manual, section |41.15|.
-+
-+Using a script in the "autoload" directory is simpler, but requires using
-+exactly the right file name.  A function that can be autoloaded has a name
-+like this: >
-+
-+	:call filename#funcname()
-+
-+When such a function is called, and it is not defined yet, Vim will search the
-+"autoload" directories in 'runtimepath' for a script file called
-+"filename.vim".  For example "~/.vim/autoload/filename.vim".  That file should
-+then define the function like this: >
-+
-+	function filename#funcname()
-+	   echo "Done!"
-+	endfunction
-+
-+The file name and the name used before the # in the function must match
-+exactly, and the defined function must have the name exactly as it will be
-+called.
-+
-+It is possible to use subdirectories.  Every # in the function name works like
-+a path separator.  Thus when calling a function: >
-+
-+	:call foo#bar#func()
-+
-+Vim will look for the file "autoload/foo/bar.vim" in 'runtimepath'.
-+
-+This also works when reading a variable that has not been set yet: >
-+
-+	:let l = foo#bar#lvar
-+
-+However, when the autoload script was already loaded it won't be loaded again
-+for an unknown variable.
-+
-+When assigning a value to such a variable nothing special happens.  This can
-+be used to pass settings to the autoload script before it's loaded: >
-+
-+	:let foo#bar#toggle = 1
-+	:call foo#bar#func()
-+
-+Note that when you make a mistake and call a function that is supposed to be
-+defined in an autoload script, but the script doesn't actually define the
-+function, the script will be sourced every time you try to call the function.
-+And you will get an error message every time.
-+
-+Also note that if you have two script files, and one calls a function in the
-+other and vice versa, before the used function is defined, it won't work.
-+Avoid using the autoload functionality at the toplevel.
-+
-+Hint: If you distribute a bunch of scripts you can pack them together with the
-+|vimball| utility.  Also read the user manual |distribute-script|.
-+
-+==============================================================================
-+6. Curly braces names					*curly-braces-names*
-+
-+Wherever you can use a variable, you can use a "curly braces name" variable.
-+This is a regular variable name with one or more expressions wrapped in braces
-+{} like this: >
-+	my_{adjective}_variable
-+
-+When Vim encounters this, it evaluates the expression inside the braces, puts
-+that in place of the expression, and re-interprets the whole as a variable
-+name.  So in the above example, if the variable "adjective" was set to
-+"noisy", then the reference would be to "my_noisy_variable", whereas if
-+"adjective" was set to "quiet", then it would be to "my_quiet_variable".
-+
-+One application for this is to create a set of variables governed by an option
-+value.	For example, the statement >
-+	echo my_{&background}_message
-+
-+would output the contents of "my_dark_message" or "my_light_message" depending
-+on the current value of 'background'.
-+
-+You can use multiple brace pairs: >
-+	echo my_{adverb}_{adjective}_message
-+..or even nest them: >
-+	echo my_{ad{end_of_word}}_message
-+where "end_of_word" is either "verb" or "jective".
-+
-+However, the expression inside the braces must evaluate to a valid single
-+variable name, e.g. this is invalid: >
-+	:let foo='a + b'
-+	:echo c{foo}d
-+.. since the result of expansion is "ca + bd", which is not a variable name.
-+
-+						*curly-braces-function-names*
-+You can call and define functions by an evaluated name in a similar way.
-+Example: >
-+	:let func_end='whizz'
-+	:call my_func_{func_end}(parameter)
-+
-+This would call the function "my_func_whizz(parameter)".
-+
-+==============================================================================
-+7. Commands						*expression-commands*
-+
-+:let {var-name} = {expr1}				*:let* *E18*
-+			Set internal variable {var-name} to the result of the
-+			expression {expr1}.  The variable will get the type
-+			from the {expr}.  If {var-name} didn't exist yet, it
-+			is created.
-+
-+:let {var-name}[{idx}] = {expr1}			*E689*
-+			Set a list item to the result of the expression
-+			{expr1}.  {var-name} must refer to a list and {idx}
-+			must be a valid index in that list.  For nested list
-+			the index can be repeated.
-+			This cannot be used to add an item to a |List|.
-+			This cannot be used to set a byte in a String.	You
-+			can do that like this: >
-+				:let var = var[0:2] . 'X' . var[4:]
-+<
-+							*E711* *E719*
-+:let {var-name}[{idx1}:{idx2}] = {expr1}		*E708* *E709* *E710*
-+			Set a sequence of items in a |List| to the result of
-+			the expression {expr1}, which must be a list with the
-+			correct number of items.
-+			{idx1} can be omitted, zero is used instead.
-+			{idx2} can be omitted, meaning the end of the list.
-+			When the selected range of items is partly past the
-+			end of the list, items will be added.
-+
-+					*:let+=* *:let-=* *:let.=* *E734*
-+:let {var} += {expr1}	Like ":let {var} = {var} + {expr1}".
-+:let {var} -= {expr1}	Like ":let {var} = {var} - {expr1}".
-+:let {var} .= {expr1}	Like ":let {var} = {var} . {expr1}".
-+			These fail if {var} was not set yet and when the type
-+			of {var} and {expr1} don't fit the operator.
-+
-+
-+:let ${env-name} = {expr1}			*:let-environment* *:let-$*
-+			Set environment variable {env-name} to the result of
-+			the expression {expr1}.  The type is always String.
-+:let ${env-name} .= {expr1}
-+			Append {expr1} to the environment variable {env-name}.
-+			If the environment variable didn't exist yet this
-+			works like "=".
-+
-+:let @{reg-name} = {expr1}			*:let-register* *:let-@*
-+			Write the result of the expression {expr1} in register
-+			{reg-name}.  {reg-name} must be a single letter, and
-+			must be the name of a writable register (see
-+			|registers|).  "@@" can be used for the unnamed
-+			register, "@/" for the search pattern.
-+			If the result of {expr1} ends in a <CR> or <NL>, the
-+			register will be linewise, otherwise it will be set to
-+			characterwise.
-+			This can be used to clear the last search pattern: >
-+				:let @/ = ""
-+<			This is different from searching for an empty string,
-+			that would match everywhere.
-+
-+:let @{reg-name} .= {expr1}
-+			Append {expr1} to register {reg-name}.	If the
-+			register was empty it's like setting it to {expr1}.
-+
-+:let &{option-name} = {expr1}			*:let-option* *:let-&*
-+			Set option {option-name} to the result of the
-+			expression {expr1}.  A String or Number value is
-+			always converted to the type of the option.
-+			For an option local to a window or buffer the effect
-+			is just like using the |:set| command: both the local
-+			value and the global value are changed.
-+			Example: >
-+				:let &path = &path . ',/usr/local/include'
-+
-+:let &{option-name} .= {expr1}
-+			For a string option: Append {expr1} to the value.
-+			Does not insert a comma like |:set+=|.
-+
-+:let &{option-name} += {expr1}
-+:let &{option-name} -= {expr1}
-+			For a number or boolean option: Add or subtract
-+			{expr1}.
-+
-+:let &l:{option-name} = {expr1}
-+:let &l:{option-name} .= {expr1}
-+:let &l:{option-name} += {expr1}
-+:let &l:{option-name} -= {expr1}
-+			Like above, but only set the local value of an option
-+			(if there is one).  Works like |:setlocal|.
-+
-+:let &g:{option-name} = {expr1}
-+:let &g:{option-name} .= {expr1}
-+:let &g:{option-name} += {expr1}
-+:let &g:{option-name} -= {expr1}
-+			Like above, but only set the global value of an option
-+			(if there is one).  Works like |:setglobal|.
-+
-+:let [{name1}, {name2}, ...] = {expr1}		*:let-unpack* *E687* *E688*
-+			{expr1} must evaluate to a |List|.  The first item in
-+			the list is assigned to {name1}, the second item to
-+			{name2}, etc.
-+			The number of names must match the number of items in
-+			the |List|.
-+			Each name can be one of the items of the ":let"
-+			command as mentioned above.
-+			Example: >
-+				:let [s, item] = GetItem(s)
-+<			Detail: {expr1} is evaluated first, then the
-+			assignments are done in sequence.  This matters if
-+			{name2} depends on {name1}.  Example: >
-+				:let x = [0, 1]
-+				:let i = 0
-+				:let [i, x[i]] = [1, 2]
-+				:echo x
-+<			The result is [0, 2].
-+
-+:let [{name1}, {name2}, ...] .= {expr1}
-+:let [{name1}, {name2}, ...] += {expr1}
-+:let [{name1}, {name2}, ...] -= {expr1}
-+			Like above, but append/add/subtract the value for each
-+			|List| item.
-+
-+:let [{name}, ..., ; {lastname}] = {expr1}
-+			Like |:let-unpack| above, but the |List| may have more
-+			items than there are names.  A list of the remaining
-+			items is assigned to {lastname}.  If there are no
-+			remaining items {lastname} is set to an empty list.
-+			Example: >
-+				:let [a, b; rest] = ["aval", "bval", 3, 4]
-+<
-+:let [{name}, ..., ; {lastname}] .= {expr1}
-+:let [{name}, ..., ; {lastname}] += {expr1}
-+:let [{name}, ..., ; {lastname}] -= {expr1}
-+			Like above, but append/add/subtract the value for each
-+			|List| item.
-+							*E106*
-+:let {var-name}	..	List the value of variable {var-name}.	Multiple
-+			variable names may be given.  Special names recognized
-+			here:				*E738*
-+			  g:	global variables
-+			  b:	local buffer variables
-+			  w:	local window variables
-+			  t:	local tab page variables
-+			  s:	script-local variables
-+			  l:	local function variables
-+			  v:	Vim variables.
-+
-+:let			List the values of all variables.  The type of the
-+			variable is indicated before the value:
-+			    <nothing>	String
-+				#	Number
-+				*	Funcref
-+
-+
-+:unl[et][!] {name} ...				*:unlet* *:unl* *E108* *E795*
-+			Remove the internal variable {name}.  Several variable
-+			names can be given, they are all removed.  The name
-+			may also be a |List| or |Dictionary| item.
-+			With [!] no error message is given for non-existing
-+			variables.
-+			One or more items from a |List| can be removed: >
-+				:unlet list[3]	  " remove fourth item
-+				:unlet list[3:]   " remove fourth item to last
-+<			One item from a |Dictionary| can be removed at a time: >
-+				:unlet dict['two']
-+				:unlet dict.two
-+<			This is especially useful to clean up used global
-+			variables and script-local variables (these are not
-+			deleted when the script ends).  Function-local
-+			variables are automatically deleted when the function
-+			ends.
-+
-+:lockv[ar][!] [depth] {name} ...			*:lockvar* *:lockv*
-+			Lock the internal variable {name}.  Locking means that
-+			it can no longer be changed (until it is unlocked).
-+			A locked variable can be deleted: >
-+				:lockvar v
-+				:let v = 'asdf'		" fails!
-+				:unlet v
-+<							*E741*
-+			If you try to change a locked variable you get an
-+			error message: "E741: Value of {name} is locked"
-+
-+			[depth] is relevant when locking a |List| or
-+			|Dictionary|.  It specifies how deep the locking goes:
-+				1	Lock the |List| or |Dictionary| itself,
-+					cannot add or remove items, but can
-+					still change their values.
-+				2	Also lock the values, cannot change
-+					the items.  If an item is a |List| or
-+					|Dictionary|, cannot add or remove
-+					items, but can still change the
-+					values.
-+				3	Like 2 but for the |List| /
-+					|Dictionary| in the |List| /
-+					|Dictionary|, one level deeper.
-+			The default [depth] is 2, thus when {name} is a |List|
-+			or |Dictionary| the values cannot be changed.
-+								*E743*
-+			For unlimited depth use [!] and omit [depth].
-+			However, there is a maximum depth of 100 to catch
-+			loops.
-+
-+			Note that when two variables refer to the same |List|
-+			and you lock one of them, the |List| will also be
-+			locked when used through the other variable.
-+			Example: >
-+				:let l = [0, 1, 2, 3]
-+				:let cl = l
-+				:lockvar l
-+				:let cl[1] = 99		" won't work!
-+<			You may want to make a copy of a list to avoid this.
-+			See |deepcopy()|.
-+
-+
-+:unlo[ckvar][!] [depth] {name} ...			*:unlockvar* *:unlo*
-+			Unlock the internal variable {name}.  Does the
-+			opposite of |:lockvar|.
-+
-+
-+:if {expr1}			*:if* *:endif* *:en* *E171* *E579* *E580*
-+:en[dif]		Execute the commands until the next matching ":else"
-+			or ":endif" if {expr1} evaluates to non-zero.
-+
-+			From Vim version 4.5 until 5.0, every Ex command in
-+			between the ":if" and ":endif" is ignored.  These two
-+			commands were just to allow for future expansions in a
-+			backwards compatible way.  Nesting was allowed.  Note
-+			that any ":else" or ":elseif" was ignored, the "else"
-+			part was not executed either.
-+
-+			You can use this to remain compatible with older
-+			versions: >
-+				:if version >= 500
-+				:  version-5-specific-commands
-+				:endif
-+<			The commands still need to be parsed to find the
-+			"endif".  Sometimes an older Vim has a problem with a
-+			new command.  For example, ":silent" is recognized as
-+			a ":substitute" command.  In that case ":execute" can
-+			avoid problems: >
-+				:if version >= 600
-+				:  execute "silent 1,$delete"
-+				:endif
-+<
-+			NOTE: The ":append" and ":insert" commands don't work
-+			properly in between ":if" and ":endif".
-+
-+						*:else* *:el* *E581* *E583*
-+:el[se]			Execute the commands until the next matching ":else"
-+			or ":endif" if they previously were not being
-+			executed.
-+
-+					*:elseif* *:elsei* *E582* *E584*
-+:elsei[f] {expr1}	Short for ":else" ":if", with the addition that there
-+			is no extra ":endif".
-+
-+:wh[ile] {expr1}			*:while* *:endwhile* *:wh* *:endw*
-+						*E170* *E585* *E588* *E733*
-+:endw[hile]		Repeat the commands between ":while" and ":endwhile",
-+			as long as {expr1} evaluates to non-zero.
-+			When an error is detected from a command inside the
-+			loop, execution continues after the "endwhile".
-+			Example: >
-+				:let lnum = 1
-+				:while lnum <= line("$")
-+				   :call FixLine(lnum)
-+				   :let lnum = lnum + 1
-+				:endwhile
-+<
-+			NOTE: The ":append" and ":insert" commands don't work
-+			properly inside a ":while" and ":for" loop.
-+
-+:for {var} in {list}					*:for* *E690* *E732*
-+:endfo[r]						*:endfo* *:endfor*
-+			Repeat the commands between ":for" and ":endfor" for
-+			each item in {list}.  Variable {var} is set to the
-+			value of each item.
-+			When an error is detected for a command inside the
-+			loop, execution continues after the "endfor".
-+			Changing {list} inside the loop affects what items are
-+			used.  Make a copy if this is unwanted: >
-+				:for item in copy(mylist)
-+<			When not making a copy, Vim stores a reference to the
-+			next item in the list, before executing the commands
-+			with the current item.	Thus the current item can be
-+			removed without effect.  Removing any later item means
-+			it will not be found.  Thus the following example
-+			works (an inefficient way to make a list empty): >
-+				for item in mylist
-+				   call remove(mylist, 0)
-+				endfor
-+<			Note that reordering the list (e.g., with sort() or
-+			reverse()) may have unexpected effects.
-+			Note that the type of each list item should be
-+			identical to avoid errors for the type of {var}
-+			changing.  Unlet the variable at the end of the loop
-+			to allow multiple item types: >
-+				for item in ["foo", ["bar"]]
-+				   echo item
-+				   unlet item  " E706 without this
-+				endfor
-+
-+:for [{var1}, {var2}, ...] in {listlist}
-+:endfo[r]
-+			Like ":for" above, but each item in {listlist} must be
-+			a list, of which each item is assigned to {var1},
-+			{var2}, etc.  Example: >
-+				:for [lnum, col] in [[1, 3], [2, 5], [3, 8]]
-+				   :echo getline(lnum)[col]
-+				:endfor
-+<
-+						*:continue* *:con* *E586*
-+:con[tinue]		When used inside a ":while" or ":for" loop, jumps back
-+			to the start of the loop.
-+			If it is used after a |:try| inside the loop but
-+			before the matching |:finally| (if present), the
-+			commands following the ":finally" up to the matching
-+			|:endtry| are executed first.  This process applies to
-+			all nested ":try"s inside the loop.  The outermost
-+			":endtry" then jumps back to the start of the loop.
-+
-+						*:break* *:brea* *E587*
-+:brea[k]		When used inside a ":while" or ":for" loop, skips to
-+			the command after the matching ":endwhile" or
-+			":endfor".
-+			If it is used after a |:try| inside the loop but
-+			before the matching |:finally| (if present), the
-+			commands following the ":finally" up to the matching
-+			|:endtry| are executed first.  This process applies to
-+			all nested ":try"s inside the loop.  The outermost
-+			":endtry" then jumps to the command after the loop.
-+
-+:try				*:try* *:endt* *:endtry* *E600* *E601* *E602*
-+:endt[ry]		Change the error handling for the commands between
-+			":try" and ":endtry" including everything being
-+			executed across ":source" commands, function calls,
-+			or autocommand invocations.
-+
-+			When an error or interrupt is detected and there is
-+			a |:finally| command following, execution continues
-+			after the ":finally".  Otherwise, or when the
-+			":endtry" is reached thereafter, the next
-+			(dynamically) surrounding ":try" is checked for
-+			a corresponding ":finally" etc.  Then the script
-+			processing is terminated.  (Whether a function
-+			definition has an "abort" argument does not matter.)
-+			Example: >
-+		:try | edit too much | finally | echo "cleanup" | endtry
-+		:echo "impossible"	" not reached, script terminated above
-+<
-+			Moreover, an error or interrupt (dynamically) inside
-+			":try" and ":endtry" is converted to an exception.  It
-+			can be caught as if it were thrown by a |:throw|
-+			command (see |:catch|).  In this case, the script
-+			processing is not terminated.
-+
-+			The value "Vim:Interrupt" is used for an interrupt
-+			exception.  An error in a Vim command is converted
-+			to a value of the form "Vim({command}):{errmsg}",
-+			other errors are converted to a value of the form
-+			"Vim:{errmsg}".  {command} is the full command name,
-+			and {errmsg} is the message that is displayed if the
-+			error exception is not caught, always beginning with
-+			the error number.
-+			Examples: >
-+		:try | sleep 100 | catch /^Vim:Interrupt$/ | endtry
-+		:try | edit | catch /^Vim(edit):E\d\+/ | echo "error" | endtry
-+<
-+					*:cat* *:catch* *E603* *E604* *E605*
-+:cat[ch] /{pattern}/	The following commands until the next |:catch|,
-+			|:finally|, or |:endtry| that belongs to the same
-+			|:try| as the ":catch" are executed when an exception
-+			matching {pattern} is being thrown and has not yet
-+			been caught by a previous ":catch".  Otherwise, these
-+			commands are skipped.
-+			When {pattern} is omitted all errors are caught.
-+			Examples: >
-+		:catch /^Vim:Interrupt$/	" catch interrupts (CTRL-C)
-+		:catch /^Vim\%((\a\+)\)\=:E/	" catch all Vim errors
-+		:catch /^Vim\%((\a\+)\)\=:/	" catch errors and interrupts
-+		:catch /^Vim(write):/		" catch all errors in :write
-+		:catch /^Vim\%((\a\+)\)\=:E123/	" catch error E123
-+		:catch /my-exception/		" catch user exception
-+		:catch /.*/			" catch everything
-+		:catch				" same as /.*/
-+<
-+			Another character can be used instead of / around the
-+			{pattern}, so long as it does not have a special
-+			meaning (e.g., '|' or '"') and doesn't occur inside
-+			{pattern}.
-+			NOTE: It is not reliable to ":catch" the TEXT of
-+			an error message because it may vary in different
-+			locales.
-+
-+					*:fina* *:finally* *E606* *E607*
-+:fina[lly]		The following commands until the matching |:endtry|
-+			are executed whenever the part between the matching
-+			|:try| and the ":finally" is left:  either by falling
-+			through to the ":finally" or by a |:continue|,
-+			|:break|, |:finish|, or |:return|, or by an error or
-+			interrupt or exception (see |:throw|).
-+
-+							*:th* *:throw* *E608*
-+:th[row] {expr1}	The {expr1} is evaluated and thrown as an exception.
-+			If the ":throw" is used after a |:try| but before the
-+			first corresponding |:catch|, commands are skipped
-+			until the first ":catch" matching {expr1} is reached.
-+			If there is no such ":catch" or if the ":throw" is
-+			used after a ":catch" but before the |:finally|, the
-+			commands following the ":finally" (if present) up to
-+			the matching |:endtry| are executed.  If the ":throw"
-+			is after the ":finally", commands up to the ":endtry"
-+			are skipped.  At the ":endtry", this process applies
-+			again for the next dynamically surrounding ":try"
-+			(which may be found in a calling function or sourcing
-+			script), until a matching ":catch" has been found.
-+			If the exception is not caught, the command processing
-+			is terminated.
-+			Example: >
-+		:try | throw "oops" | catch /^oo/ | echo "caught" | endtry
-+<
-+
-+							*:ec* *:echo*
-+:ec[ho] {expr1} ..	Echoes each {expr1}, with a space in between.  The
-+			first {expr1} starts on a new line.
-+			Also see |:comment|.
-+			Use "\n" to start a new line.  Use "\r" to move the
-+			cursor to the first column.
-+			Uses the highlighting set by the |:echohl| command.
-+			Cannot be followed by a comment.
-+			Example: >
-+		:echo "the value of 'shell' is" &shell
-+<							*:echo-redraw*
-+			A later redraw may make the message disappear again.
-+			And since Vim mostly postpones redrawing until it's
-+			finished with a sequence of commands this happens
-+			quite often.  To avoid that a command from before the
-+			":echo" causes a redraw afterwards (redraws are often
-+			postponed until you type something), force a redraw
-+			with the |:redraw| command.  Example: >
-+		:new | redraw | echo "there is a new window"
-+<
-+							*:echon*
-+:echon {expr1} ..	Echoes each {expr1}, without anything added.  Also see
-+			|:comment|.
-+			Uses the highlighting set by the |:echohl| command.
-+			Cannot be followed by a comment.
-+			Example: >
-+				:echon "the value of 'shell' is " &shell
-+<
-+			Note the difference between using ":echo", which is a
-+			Vim command, and ":!echo", which is an external shell
-+			command: >
-+		:!echo %		--> filename
-+<			The arguments of ":!" are expanded, see |:_%|. >
-+		:!echo "%"		--> filename or "filename"
-+<			Like the previous example.  Whether you see the double
-+			quotes or not depends on your 'shell'. >
-+		:echo %			--> nothing
-+<			The '%' is an illegal character in an expression. >
-+		:echo "%"		--> %
-+<			This just echoes the '%' character. >
-+		:echo expand("%")	--> filename
-+<			This calls the expand() function to expand the '%'.
-+
-+							*:echoh* *:echohl*
-+:echoh[l] {name}	Use the highlight group {name} for the following
-+			|:echo|, |:echon| and |:echomsg| commands.  Also used
-+			for the |input()| prompt.  Example: >
-+		:echohl WarningMsg | echo "Don't panic!" | echohl None
-+<			Don't forget to set the group back to "None",
-+			otherwise all following echo's will be highlighted.
-+
-+							*:echom* *:echomsg*
-+:echom[sg] {expr1} ..	Echo the expression(s) as a true message, saving the
-+			message in the |message-history|.
-+			Spaces are placed between the arguments as with the
-+			|:echo| command.  But unprintable characters are
-+			displayed, not interpreted.
-+			The parsing works slightly different from |:echo|,
-+			more like |:execute|.  All the expressions are first
-+			evaluated and concatenated before echoing anything.
-+			The expressions must evaluate to a Number or String, a
-+			Dictionary or List causes an error.
-+			Uses the highlighting set by the |:echohl| command.
-+			Example: >
-+		:echomsg "It's a Zizzer Zazzer Zuzz, as you can plainly see."
-+<			See |:echo-redraw| to avoid the message disappearing
-+			when the screen is redrawn.
-+							*:echoe* *:echoerr*
-+:echoe[rr] {expr1} ..	Echo the expression(s) as an error message, saving the
-+			message in the |message-history|.  When used in a
-+			script or function the line number will be added.
-+			Spaces are placed between the arguments as with the
-+			:echo command.	When used inside a try conditional,
-+			the message is raised as an error exception instead
-+			(see |try-echoerr|).
-+			Example: >
-+		:echoerr "This script just failed!"
-+<			If you just want a highlighted message use |:echohl|.
-+			And to get a beep: >
-+		:exe "normal \<Esc>"
-+<
-+							*:exe* *:execute*
-+:exe[cute] {expr1} ..	Executes the string that results from the evaluation
-+			of {expr1} as an Ex command.
-+			Multiple arguments are concatenated, with a space in
-+			between.  To avoid the extra space use the "."
-+			operator to concatenate strings into one argument.
-+			{expr1} is used as the processed command, command line
-+			editing keys are not recognized.
-+			Cannot be followed by a comment.
-+			Examples: >
-+		:execute "buffer" nextbuf
-+		:execute "normal" count . "w"
-+<
-+			":execute" can be used to append a command to commands
-+			that don't accept a '|'.  Example: >
-+		:execute '!ls' | echo "theend"
-+
-+<			":execute" is also a nice way to avoid having to type
-+			control characters in a Vim script for a ":normal"
-+			command: >
-+		:execute "normal ixxx\<Esc>"
-+<			This has an <Esc> character, see |expr-string|.
-+
-+			Be careful to correctly escape special characters in
-+			file names.  The |fnameescape()| function can be used
-+			for Vim commands, |shellescape()| for |:!| commands.
-+			Examples: >
-+		:execute "e " . fnameescape(filename)
-+		:execute "!ls " . shellescape(expand('%:h'), 1)
-+<
-+			Note: The executed string may be any command-line, but
-+			you cannot start or end a "while", "for" or "if"
-+			command.  Thus this is illegal: >
-+		:execute 'while i > 5'
-+		:execute 'echo "test" | break'
-+<
-+			It is allowed to have a "while" or "if" command
-+			completely in the executed string: >
-+		:execute 'while i < 5 | echo i | let i = i + 1 | endwhile'
-+<
-+
-+							*:exe-comment*
-+			":execute", ":echo" and ":echon" cannot be followed by
-+			a comment directly, because they see the '"' as the
-+			start of a string.  But, you can use '|' followed by a
-+			comment.  Example: >
-+		:echo "foo" | "this is a comment
-+
-+==============================================================================
-+8. Exception handling					*exception-handling*
-+
-+The Vim script language comprises an exception handling feature.  This section
-+explains how it can be used in a Vim script.
-+
-+Exceptions may be raised by Vim on an error or on interrupt, see
-+|catch-errors| and |catch-interrupt|.  You can also explicitly throw an
-+exception by using the ":throw" command, see |throw-catch|.
-+
-+
-+TRY CONDITIONALS					*try-conditionals*
-+
-+Exceptions can be caught or can cause cleanup code to be executed.  You can
-+use a try conditional to specify catch clauses (that catch exceptions) and/or
-+a finally clause (to be executed for cleanup).
-+   A try conditional begins with a |:try| command and ends at the matching
-+|:endtry| command.  In between, you can use a |:catch| command to start
-+a catch clause, or a |:finally| command to start a finally clause.  There may
-+be none or multiple catch clauses, but there is at most one finally clause,
-+which must not be followed by any catch clauses.  The lines before the catch
-+clauses and the finally clause is called a try block. >
-+
-+     :try
-+     :	...
-+     :	...				TRY BLOCK
-+     :	...
-+     :catch /{pattern}/
-+     :	...
-+     :	...				CATCH CLAUSE
-+     :	...
-+     :catch /{pattern}/
-+     :	...
-+     :	...				CATCH CLAUSE
-+     :	...
-+     :finally
-+     :	...
-+     :	...				FINALLY CLAUSE
-+     :	...
-+     :endtry
-+
-+The try conditional allows to watch code for exceptions and to take the
-+appropriate actions.  Exceptions from the try block may be caught.  Exceptions
-+from the try block and also the catch clauses may cause cleanup actions.
-+   When no exception is thrown during execution of the try block, the control
-+is transferred to the finally clause, if present.  After its execution, the
-+script continues with the line following the ":endtry".
-+   When an exception occurs during execution of the try block, the remaining
-+lines in the try block are skipped.  The exception is matched against the
-+patterns specified as arguments to the ":catch" commands.  The catch clause
-+after the first matching ":catch" is taken, other catch clauses are not
-+executed.  The catch clause ends when the next ":catch", ":finally", or
-+":endtry" command is reached - whatever is first.  Then, the finally clause
-+(if present) is executed.  When the ":endtry" is reached, the script execution
-+continues in the following line as usual.
-+   When an exception that does not match any of the patterns specified by the
-+":catch" commands is thrown in the try block, the exception is not caught by
-+that try conditional and none of the catch clauses is executed.  Only the
-+finally clause, if present, is taken.  The exception pends during execution of
-+the finally clause.  It is resumed at the ":endtry", so that commands after
-+the ":endtry" are not executed and the exception might be caught elsewhere,
-+see |try-nesting|.
-+   When during execution of a catch clause another exception is thrown, the
-+remaining lines in that catch clause are not executed.	The new exception is
-+not matched against the patterns in any of the ":catch" commands of the same
-+try conditional and none of its catch clauses is taken.  If there is, however,
-+a finally clause, it is executed, and the exception pends during its
-+execution.  The commands following the ":endtry" are not executed.  The new
-+exception might, however, be caught elsewhere, see |try-nesting|.
-+   When during execution of the finally clause (if present) an exception is
-+thrown, the remaining lines in the finally clause are skipped.	If the finally
-+clause has been taken because of an exception from the try block or one of the
-+catch clauses, the original (pending) exception is discarded.  The commands
-+following the ":endtry" are not executed, and the exception from the finally
-+clause is propagated and can be caught elsewhere, see |try-nesting|.
-+
-+The finally clause is also executed, when a ":break" or ":continue" for
-+a ":while" loop enclosing the complete try conditional is executed from the
-+try block or a catch clause.  Or when a ":return" or ":finish" is executed
-+from the try block or a catch clause of a try conditional in a function or
-+sourced script, respectively.  The ":break", ":continue", ":return", or
-+":finish" pends during execution of the finally clause and is resumed when the
-+":endtry" is reached.  It is, however, discarded when an exception is thrown
-+from the finally clause.
-+   When a ":break" or ":continue" for a ":while" loop enclosing the complete
-+try conditional or when a ":return" or ":finish" is encountered in the finally
-+clause, the rest of the finally clause is skipped, and the ":break",
-+":continue", ":return" or ":finish" is executed as usual.  If the finally
-+clause has been taken because of an exception or an earlier ":break",
-+":continue", ":return", or ":finish" from the try block or a catch clause,
-+this pending exception or command is discarded.
-+
-+For examples see |throw-catch| and |try-finally|.
-+
-+
-+NESTING	OF TRY CONDITIONALS				*try-nesting*
-+
-+Try conditionals can be nested arbitrarily.  That is, a complete try
-+conditional can be put into the try block, a catch clause, or the finally
-+clause of another try conditional.  If the inner try conditional does not
-+catch an exception thrown in its try block or throws a new exception from one
-+of its catch clauses or its finally clause, the outer try conditional is
-+checked according to the rules above.  If the inner try conditional is in the
-+try block of the outer try conditional, its catch clauses are checked, but
-+otherwise only the finally clause is executed.	It does not matter for
-+nesting, whether the inner try conditional is directly contained in the outer
-+one, or whether the outer one sources a script or calls a function containing
-+the inner try conditional.
-+
-+When none of the active try conditionals catches an exception, just their
-+finally clauses are executed.  Thereafter, the script processing terminates.
-+An error message is displayed in case of an uncaught exception explicitly
-+thrown by a ":throw" command.  For uncaught error and interrupt exceptions
-+implicitly raised by Vim, the error message(s) or interrupt message are shown
-+as usual.
-+
-+For examples see |throw-catch|.
-+
-+
-+EXAMINING EXCEPTION HANDLING CODE			*except-examine*
-+
-+Exception handling code can get tricky.  If you are in doubt what happens, set
-+'verbose' to 13 or use the ":13verbose" command modifier when sourcing your
-+script file.  Then you see when an exception is thrown, discarded, caught, or
-+finished.  When using a verbosity level of at least 14, things pending in
-+a finally clause are also shown.  This information is also given in debug mode
-+(see |debug-scripts|).
-+
-+
-+THROWING AND CATCHING EXCEPTIONS			*throw-catch*
-+
-+You can throw any number or string as an exception.  Use the |:throw| command
-+and pass the value to be thrown as argument: >
-+	:throw 4711
-+	:throw "string"
-+<							*throw-expression*
-+You can also specify an expression argument.  The expression is then evaluated
-+first, and the result is thrown: >
-+	:throw 4705 + strlen("string")
-+	:throw strpart("strings", 0, 6)
-+
-+An exception might be thrown during evaluation of the argument of the ":throw"
-+command.  Unless it is caught there, the expression evaluation is abandoned.
-+The ":throw" command then does not throw a new exception.
-+   Example: >
-+
-+	:function! Foo(arg)
-+	:  try
-+	:    throw a:arg
-+	:  catch /foo/
-+	:  endtry
-+	:  return 1
-+	:endfunction
-+	:
-+	:function! Bar()
-+	:  echo "in Bar"
-+	:  return 4710
-+	:endfunction
-+	:
-+	:throw Foo("arrgh") + Bar()
-+
-+This throws "arrgh", and "in Bar" is not displayed since Bar() is not
-+executed. >
-+	:throw Foo("foo") + Bar()
-+however displays "in Bar" and throws 4711.
-+
-+Any other command that takes an expression as argument might also be
-+abandoned by an (uncaught) exception during the expression evaluation.	The
-+exception is then propagated to the caller of the command.
-+   Example: >
-+
-+	:if Foo("arrgh")
-+	:  echo "then"
-+	:else
-+	:  echo "else"
-+	:endif
-+
-+Here neither of "then" or "else" is displayed.
-+
-+							*catch-order*
-+Exceptions can be caught by a try conditional with one or more |:catch|
-+commands, see |try-conditionals|.   The values to be caught by each ":catch"
-+command can be specified as a pattern argument.  The subsequent catch clause
-+gets executed when a matching exception is caught.
-+   Example: >
-+
-+	:function! Foo(value)
-+	:  try
-+	:    throw a:value
-+	:  catch /^\d\+$/
-+	:    echo "Number thrown"
-+	:  catch /.*/
-+	:    echo "String thrown"
-+	:  endtry
-+	:endfunction
-+	:
-+	:call Foo(0x1267)
-+	:call Foo('string')
-+
-+The first call to Foo() displays "Number thrown", the second "String thrown".
-+An exception is matched against the ":catch" commands in the order they are
-+specified.  Only the first match counts.  So you should place the more
-+specific ":catch" first.  The following order does not make sense: >
-+
-+	:  catch /.*/
-+	:    echo "String thrown"
-+	:  catch /^\d\+$/
-+	:    echo "Number thrown"
-+
-+The first ":catch" here matches always, so that the second catch clause is
-+never taken.
-+
-+							*throw-variables*
-+If you catch an exception by a general pattern, you may access the exact value
-+in the variable |v:exception|: >
-+
-+	:  catch /^\d\+$/
-+	:    echo "Number thrown.  Value is" v:exception
-+
-+You may also be interested where an exception was thrown.  This is stored in
-+|v:throwpoint|.  Note that "v:exception" and "v:throwpoint" are valid for the
-+exception most recently caught as long it is not finished.
-+   Example: >
-+
-+	:function! Caught()
-+	:  if v:exception != ""
-+	:    echo 'Caught "' . v:exception . '" in ' . v:throwpoint
-+	:  else
-+	:    echo 'Nothing caught'
-+	:  endif
-+	:endfunction
-+	:
-+	:function! Foo()
-+	:  try
-+	:    try
-+	:      try
-+	:	 throw 4711
-+	:      finally
-+	:	 call Caught()
-+	:      endtry
-+	:    catch /.*/
-+	:      call Caught()
-+	:      throw "oops"
-+	:    endtry
-+	:  catch /.*/
-+	:    call Caught()
-+	:  finally
-+	:    call Caught()
-+	:  endtry
-+	:endfunction
-+	:
-+	:call Foo()
-+
-+This displays >
-+
-+	Nothing caught
-+	Caught "4711" in function Foo, line 4
-+	Caught "oops" in function Foo, line 10
-+	Nothing caught
-+
-+A practical example:  The following command ":LineNumber" displays the line
-+number in the script or function where it has been used: >
-+
-+	:function! LineNumber()
-+	:    return substitute(v:throwpoint, '.*\D\(\d\+\).*', '\1', "")
-+	:endfunction
-+	:command! LineNumber try | throw "" | catch | echo LineNumber() | endtry
-+<
-+							*try-nested*
-+An exception that is not caught by a try conditional can be caught by
-+a surrounding try conditional: >
-+
-+	:try
-+	:  try
-+	:    throw "foo"
-+	:  catch /foobar/
-+	:    echo "foobar"
-+	:  finally
-+	:    echo "inner finally"
-+	:  endtry
-+	:catch /foo/
-+	:  echo "foo"
-+	:endtry
-+
-+The inner try conditional does not catch the exception, just its finally
-+clause is executed.  The exception is then caught by the outer try
-+conditional.  The example displays "inner finally" and then "foo".
-+
-+							*throw-from-catch*
-+You can catch an exception and throw a new one to be caught elsewhere from the
-+catch clause: >
-+
-+	:function! Foo()
-+	:  throw "foo"
-+	:endfunction
-+	:
-+	:function! Bar()
-+	:  try
-+	:    call Foo()
-+	:  catch /foo/
-+	:    echo "Caught foo, throw bar"
-+	:    throw "bar"
-+	:  endtry
-+	:endfunction
-+	:
-+	:try
-+	:  call Bar()
-+	:catch /.*/
-+	:  echo "Caught" v:exception
-+	:endtry
-+
-+This displays "Caught foo, throw bar" and then "Caught bar".
-+
-+							*rethrow*
-+There is no real rethrow in the Vim script language, but you may throw
-+"v:exception" instead: >
-+
-+	:function! Bar()
-+	:  try
-+	:    call Foo()
-+	:  catch /.*/
-+	:    echo "Rethrow" v:exception
-+	:    throw v:exception
-+	:  endtry
-+	:endfunction
-+<							*try-echoerr*
-+Note that this method cannot be used to "rethrow" Vim error or interrupt
-+exceptions, because it is not possible to fake Vim internal exceptions.
-+Trying so causes an error exception.  You should throw your own exception
-+denoting the situation.  If you want to cause a Vim error exception containing
-+the original error exception value, you can use the |:echoerr| command: >
-+
-+	:try
-+	:  try
-+	:    asdf
-+	:  catch /.*/
-+	:    echoerr v:exception
-+	:  endtry
-+	:catch /.*/
-+	:  echo v:exception
-+	:endtry
-+
-+This code displays
-+
-+	Vim(echoerr):Vim:E492: Not an editor command:	asdf ~
-+
-+
-+CLEANUP CODE						*try-finally*
-+
-+Scripts often change global settings and restore them at their end.  If the
-+user however interrupts the script by pressing CTRL-C, the settings remain in
-+an inconsistent state.	The same may happen to you in the development phase of
-+a script when an error occurs or you explicitly throw an exception without
-+catching it.  You can solve these problems by using a try conditional with
-+a finally clause for restoring the settings.  Its execution is guaranteed on
-+normal control flow, on error, on an explicit ":throw", and on interrupt.
-+(Note that errors and interrupts from inside the try conditional are converted
-+to exceptions.	When not caught, they terminate the script after the finally
-+clause has been executed.)
-+Example: >
-+
-+	:try
-+	:  let s:saved_ts = &ts
-+	:  set ts=17
-+	:
-+	:  " Do the hard work here.
-+	:
-+	:finally
-+	:  let &ts = s:saved_ts
-+	:  unlet s:saved_ts
-+	:endtry
-+
-+This method should be used locally whenever a function or part of a script
-+changes global settings which need to be restored on failure or normal exit of
-+that function or script part.
-+
-+							*break-finally*
-+Cleanup code works also when the try block or a catch clause is left by
-+a ":continue", ":break", ":return", or ":finish".
-+   Example: >
-+
-+	:let first = 1
-+	:while 1
-+	:  try
-+	:    if first
-+	:      echo "first"
-+	:      let first = 0
-+	:      continue
-+	:    else
-+	:      throw "second"
-+	:    endif
-+	:  catch /.*/
-+	:    echo v:exception
-+	:    break
-+	:  finally
-+	:    echo "cleanup"
-+	:  endtry
-+	:  echo "still in while"
-+	:endwhile
-+	:echo "end"
-+
-+This displays "first", "cleanup", "second", "cleanup", and "end". >
-+
-+	:function! Foo()
-+	:  try
-+	:    return 4711
-+	:  finally
-+	:    echo "cleanup\n"
-+	:  endtry
-+	:  echo "Foo still active"
-+	:endfunction
-+	:
-+	:echo Foo() "returned by Foo"
-+
-+This displays "cleanup" and "4711 returned by Foo".  You don't need to add an
-+extra ":return" in the finally clause.	(Above all, this would override the
-+return value.)
-+
-+							*except-from-finally*
-+Using either of ":continue", ":break", ":return", ":finish", or ":throw" in
-+a finally clause is possible, but not recommended since it abandons the
-+cleanup actions for the try conditional.  But, of course, interrupt and error
-+exceptions might get raised from a finally clause.
-+   Example where an error in the finally clause stops an interrupt from
-+working correctly: >
-+
-+	:try
-+	:  try
-+	:    echo "Press CTRL-C for interrupt"
-+	:    while 1
-+	:    endwhile
-+	:  finally
-+	:    unlet novar
-+	:  endtry
-+	:catch /novar/
-+	:endtry
-+	:echo "Script still running"
-+	:sleep 1
-+
-+If you need to put commands that could fail into a finally clause, you should
-+think about catching or ignoring the errors in these commands, see
-+|catch-errors| and |ignore-errors|.
-+
-+
-+CATCHING ERRORS						*catch-errors*
-+
-+If you want to catch specific errors, you just have to put the code to be
-+watched in a try block and add a catch clause for the error message.  The
-+presence of the try conditional causes all errors to be converted to an
-+exception.  No message is displayed and |v:errmsg| is not set then.  To find
-+the right pattern for the ":catch" command, you have to know how the format of
-+the error exception is.
-+   Error exceptions have the following format: >
-+
-+	Vim({cmdname}):{errmsg}
-+or >
-+	Vim:{errmsg}
-+
-+{cmdname} is the name of the command that failed; the second form is used when
-+the command name is not known.	{errmsg} is the error message usually produced
-+when the error occurs outside try conditionals.  It always begins with
-+a capital "E", followed by a two or three-digit error number, a colon, and
-+a space.
-+
-+Examples:
-+
-+The command >
-+	:unlet novar
-+normally produces the error message >
-+	E108: No such variable: "novar"
-+which is converted inside try conditionals to an exception >
-+	Vim(unlet):E108: No such variable: "novar"
-+
-+The command >
-+	:dwim
-+normally produces the error message >
-+	E492: Not an editor command: dwim
-+which is converted inside try conditionals to an exception >
-+	Vim:E492: Not an editor command: dwim
-+
-+You can catch all ":unlet" errors by a >
-+	:catch /^Vim(unlet):/
-+or all errors for misspelled command names by a >
-+	:catch /^Vim:E492:/
-+
-+Some error messages may be produced by different commands: >
-+	:function nofunc
-+and >
-+	:delfunction nofunc
-+both produce the error message >
-+	E128: Function name must start with a capital: nofunc
-+which is converted inside try conditionals to an exception >
-+	Vim(function):E128: Function name must start with a capital: nofunc
-+or >
-+	Vim(delfunction):E128: Function name must start with a capital: nofunc
-+respectively.  You can catch the error by its number independently on the
-+command that caused it if you use the following pattern: >
-+	:catch /^Vim(\a\+):E128:/
-+
-+Some commands like >
-+	:let x = novar
-+produce multiple error messages, here: >
-+	E121: Undefined variable: novar
-+	E15: Invalid expression:  novar
-+Only the first is used for the exception value, since it is the most specific
-+one (see |except-several-errors|).  So you can catch it by >
-+	:catch /^Vim(\a\+):E121:/
-+
-+You can catch all errors related to the name "nofunc" by >
-+	:catch /\<nofunc\>/
-+
-+You can catch all Vim errors in the ":write" and ":read" commands by >
-+	:catch /^Vim(\(write\|read\)):E\d\+:/
-+
-+You can catch all Vim errors by the pattern >
-+	:catch /^Vim\((\a\+)\)\=:E\d\+:/
-+<
-+							*catch-text*
-+NOTE: You should never catch the error message text itself: >
-+	:catch /No such variable/
-+only works in the english locale, but not when the user has selected
-+a different language by the |:language| command.  It is however helpful to
-+cite the message text in a comment: >
-+	:catch /^Vim(\a\+):E108:/   " No such variable
-+
-+
-+IGNORING ERRORS						*ignore-errors*
-+
-+You can ignore errors in a specific Vim command by catching them locally: >
-+
-+	:try
-+	:  write
-+	:catch
-+	:endtry
-+
-+But you are strongly recommended NOT to use this simple form, since it could
-+catch more than you want.  With the ":write" command, some autocommands could
-+be executed and cause errors not related to writing, for instance: >
-+
-+	:au BufWritePre * unlet novar
-+
-+There could even be such errors you are not responsible for as a script
-+writer: a user of your script might have defined such autocommands.  You would
-+then hide the error from the user.
-+   It is much better to use >
-+
-+	:try
-+	:  write
-+	:catch /^Vim(write):/
-+	:endtry
-+
-+which only catches real write errors.  So catch only what you'd like to ignore
-+intentionally.
-+
-+For a single command that does not cause execution of autocommands, you could
-+even suppress the conversion of errors to exceptions by the ":silent!"
-+command: >
-+	:silent! nunmap k
-+This works also when a try conditional is active.
-+
-+
-+CATCHING INTERRUPTS					*catch-interrupt*
-+
-+When there are active try conditionals, an interrupt (CTRL-C) is converted to
-+the exception "Vim:Interrupt".	You can catch it like every exception.	The
-+script is not terminated, then.
-+   Example: >
-+
-+	:function! TASK1()
-+	:  sleep 10
-+	:endfunction
-+
-+	:function! TASK2()
-+	:  sleep 20
-+	:endfunction
-+
-+	:while 1
-+	:  let command = input("Type a command: ")
-+	:  try
-+	:    if command == ""
-+	:      continue
-+	:    elseif command == "END"
-+	:      break
-+	:    elseif command == "TASK1"
-+	:      call TASK1()
-+	:    elseif command == "TASK2"
-+	:      call TASK2()
-+	:    else
-+	:      echo "\nIllegal command:" command
-+	:      continue
-+	:    endif
-+	:  catch /^Vim:Interrupt$/
-+	:    echo "\nCommand interrupted"
-+	:    " Caught the interrupt.  Continue with next prompt.
-+	:  endtry
-+	:endwhile
-+
-+You can interrupt a task here by pressing CTRL-C; the script then asks for
-+a new command.	If you press CTRL-C at the prompt, the script is terminated.
-+
-+For testing what happens when CTRL-C would be pressed on a specific line in
-+your script, use the debug mode and execute the |>quit| or |>interrupt|
-+command on that line.  See |debug-scripts|.
-+
-+
-+CATCHING ALL						*catch-all*
-+
-+The commands >
-+
-+	:catch /.*/
-+	:catch //
-+	:catch
-+
-+catch everything, error exceptions, interrupt exceptions and exceptions
-+explicitly thrown by the |:throw| command.  This is useful at the top level of
-+a script in order to catch unexpected things.
-+   Example: >
-+
-+	:try
-+	:
-+	:  " do the hard work here
-+	:
-+	:catch /MyException/
-+	:
-+	:  " handle known problem
-+	:
-+	:catch /^Vim:Interrupt$/
-+	:    echo "Script interrupted"
-+	:catch /.*/
-+	:  echo "Internal error (" . v:exception . ")"
-+	:  echo " - occurred at " . v:throwpoint
-+	:endtry
-+	:" end of script
-+
-+Note: Catching all might catch more things than you want.  Thus, you are
-+strongly encouraged to catch only for problems that you can really handle by
-+specifying a pattern argument to the ":catch".
-+   Example: Catching all could make it nearly impossible to interrupt a script
-+by pressing CTRL-C: >
-+
-+	:while 1
-+	:  try
-+	:    sleep 1
-+	:  catch
-+	:  endtry
-+	:endwhile
-+
-+
-+EXCEPTIONS AND AUTOCOMMANDS				*except-autocmd*
-+
-+Exceptions may be used during execution of autocommands.  Example: >
-+
-+	:autocmd User x try
-+	:autocmd User x   throw "Oops!"
-+	:autocmd User x catch
-+	:autocmd User x   echo v:exception
-+	:autocmd User x endtry
-+	:autocmd User x throw "Arrgh!"
-+	:autocmd User x echo "Should not be displayed"
-+	:
-+	:try
-+	:  doautocmd User x
-+	:catch
-+	:  echo v:exception
-+	:endtry
-+
-+This displays "Oops!" and "Arrgh!".
-+
-+							*except-autocmd-Pre*
-+For some commands, autocommands get executed before the main action of the
-+command takes place.  If an exception is thrown and not caught in the sequence
-+of autocommands, the sequence and the command that caused its execution are
-+abandoned and the exception is propagated to the caller of the command.
-+   Example: >
-+
-+	:autocmd BufWritePre * throw "FAIL"
-+	:autocmd BufWritePre * echo "Should not be displayed"
-+	:
-+	:try
-+	:  write
-+	:catch
-+	:  echo "Caught:" v:exception "from" v:throwpoint
-+	:endtry
-+
-+Here, the ":write" command does not write the file currently being edited (as
-+you can see by checking 'modified'), since the exception from the BufWritePre
-+autocommand abandons the ":write".  The exception is then caught and the
-+script displays: >
-+
-+	Caught: FAIL from BufWrite Auto commands for "*"
-+<
-+							*except-autocmd-Post*
-+For some commands, autocommands get executed after the main action of the
-+command has taken place.  If this main action fails and the command is inside
-+an active try conditional, the autocommands are skipped and an error exception
-+is thrown that can be caught by the caller of the command.
-+   Example: >
-+
-+	:autocmd BufWritePost * echo "File successfully written!"
-+	:
-+	:try
-+	:  write /i/m/p/o/s/s/i/b/l/e
-+	:catch
-+	:  echo v:exception
-+	:endtry
-+
-+This just displays: >
-+
-+	Vim(write):E212: Can't open file for writing (/i/m/p/o/s/s/i/b/l/e)
-+
-+If you really need to execute the autocommands even when the main action
-+fails, trigger the event from the catch clause.
-+   Example: >
-+
-+	:autocmd BufWritePre  * set noreadonly
-+	:autocmd BufWritePost * set readonly
-+	:
-+	:try
-+	:  write /i/m/p/o/s/s/i/b/l/e
-+	:catch
-+	:  doautocmd BufWritePost /i/m/p/o/s/s/i/b/l/e
-+	:endtry
-+<
-+You can also use ":silent!": >
-+
-+	:let x = "ok"
-+	:let v:errmsg = ""
-+	:autocmd BufWritePost * if v:errmsg != ""
-+	:autocmd BufWritePost *   let x = "after fail"
-+	:autocmd BufWritePost * endif
-+	:try
-+	:  silent! write /i/m/p/o/s/s/i/b/l/e
-+	:catch
-+	:endtry
-+	:echo x
-+
-+This displays "after fail".
-+
-+If the main action of the command does not fail, exceptions from the
-+autocommands will be catchable by the caller of the command:  >
-+
-+	:autocmd BufWritePost * throw ":-("
-+	:autocmd BufWritePost * echo "Should not be displayed"
-+	:
-+	:try
-+	:  write
-+	:catch
-+	:  echo v:exception
-+	:endtry
-+<
-+							*except-autocmd-Cmd*
-+For some commands, the normal action can be replaced by a sequence of
-+autocommands.  Exceptions from that sequence will be catchable by the caller
-+of the command.
-+   Example:  For the ":write" command, the caller cannot know whether the file
-+had actually been written when the exception occurred.	You need to tell it in
-+some way. >
-+
-+	:if !exists("cnt")
-+	:  let cnt = 0
-+	:
-+	:  autocmd BufWriteCmd * if &modified
-+	:  autocmd BufWriteCmd *   let cnt = cnt + 1
-+	:  autocmd BufWriteCmd *   if cnt % 3 == 2
-+	:  autocmd BufWriteCmd *     throw "BufWriteCmdError"
-+	:  autocmd BufWriteCmd *   endif
-+	:  autocmd BufWriteCmd *   write | set nomodified
-+	:  autocmd BufWriteCmd *   if cnt % 3 == 0
-+	:  autocmd BufWriteCmd *     throw "BufWriteCmdError"
-+	:  autocmd BufWriteCmd *   endif
-+	:  autocmd BufWriteCmd *   echo "File successfully written!"
-+	:  autocmd BufWriteCmd * endif
-+	:endif
-+	:
-+	:try
-+	:	write
-+	:catch /^BufWriteCmdError$/
-+	:  if &modified
-+	:    echo "Error on writing (file contents not changed)"
-+	:  else
-+	:    echo "Error after writing"
-+	:  endif
-+	:catch /^Vim(write):/
-+	:    echo "Error on writing"
-+	:endtry
-+
-+When this script is sourced several times after making changes, it displays
-+first >
-+	File successfully written!
-+then >
-+	Error on writing (file contents not changed)
-+then >
-+	Error after writing
-+etc.
-+
-+							*except-autocmd-ill*
-+You cannot spread a try conditional over autocommands for different events.
-+The following code is ill-formed: >
-+
-+	:autocmd BufWritePre  * try
-+	:
-+	:autocmd BufWritePost * catch
-+	:autocmd BufWritePost *   echo v:exception
-+	:autocmd BufWritePost * endtry
-+	:
-+	:write
-+
-+
-+EXCEPTION HIERARCHIES AND PARAMETERIZED EXCEPTIONS	*except-hier-param*
-+
-+Some programming languages allow to use hierarchies of exception classes or to
-+pass additional information with the object of an exception class.  You can do
-+similar things in Vim.
-+   In order to throw an exception from a hierarchy, just throw the complete
-+class name with the components separated by a colon, for instance throw the
-+string "EXCEPT:MATHERR:OVERFLOW" for an overflow in a mathematical library.
-+   When you want to pass additional information with your exception class, add
-+it in parentheses, for instance throw the string "EXCEPT:IO:WRITEERR(myfile)"
-+for an error when writing "myfile".
-+   With the appropriate patterns in the ":catch" command, you can catch for
-+base classes or derived classes of your hierarchy.  Additional information in
-+parentheses can be cut out from |v:exception| with the ":substitute" command.
-+   Example: >
-+
-+	:function! CheckRange(a, func)
-+	:  if a:a < 0
-+	:    throw "EXCEPT:MATHERR:RANGE(" . a:func . ")"
-+	:  endif
-+	:endfunction
-+	:
-+	:function! Add(a, b)
-+	:  call CheckRange(a:a, "Add")
-+	:  call CheckRange(a:b, "Add")
-+	:  let c = a:a + a:b
-+	:  if c < 0
-+	:    throw "EXCEPT:MATHERR:OVERFLOW"
-+	:  endif
-+	:  return c
-+	:endfunction
-+	:
-+	:function! Div(a, b)
-+	:  call CheckRange(a:a, "Div")
-+	:  call CheckRange(a:b, "Div")
-+	:  if (a:b == 0)
-+	:    throw "EXCEPT:MATHERR:ZERODIV"
-+	:  endif
-+	:  return a:a / a:b
-+	:endfunction
-+	:
-+	:function! Write(file)
-+	:  try
-+	:    execute "write" fnameescape(a:file)
-+	:  catch /^Vim(write):/
-+	:    throw "EXCEPT:IO(" . getcwd() . ", " . a:file . "):WRITEERR"
-+	:  endtry
-+	:endfunction
-+	:
-+	:try
-+	:
-+	:  " something with arithmetics and I/O
-+	:
-+	:catch /^EXCEPT:MATHERR:RANGE/
-+	:  let function = substitute(v:exception, '.*(\(\a\+\)).*', '\1', "")
-+	:  echo "Range error in" function
-+	:
-+	:catch /^EXCEPT:MATHERR/	" catches OVERFLOW and ZERODIV
-+	:  echo "Math error"
-+	:
-+	:catch /^EXCEPT:IO/
-+	:  let dir = substitute(v:exception, '.*(\(.\+\),\s*.\+).*', '\1', "")
-+	:  let file = substitute(v:exception, '.*(.\+,\s*\(.\+\)).*', '\1', "")
-+	:  if file !~ '^/'
-+	:    let file = dir . "/" . file
-+	:  endif
-+	:  echo 'I/O error for "' . file . '"'
-+	:
-+	:catch /^EXCEPT/
-+	:  echo "Unspecified error"
-+	:
-+	:endtry
-+
-+The exceptions raised by Vim itself (on error or when pressing CTRL-C) use
-+a flat hierarchy:  they are all in the "Vim" class.  You cannot throw yourself
-+exceptions with the "Vim" prefix; they are reserved for Vim.
-+   Vim error exceptions are parameterized with the name of the command that
-+failed, if known.  See |catch-errors|.
-+
-+
-+PECULIARITIES
-+							*except-compat*
-+The exception handling concept requires that the command sequence causing the
-+exception is aborted immediately and control is transferred to finally clauses
-+and/or a catch clause.
-+
-+In the Vim script language there are cases where scripts and functions
-+continue after an error: in functions without the "abort" flag or in a command
-+after ":silent!", control flow goes to the following line, and outside
-+functions, control flow goes to the line following the outermost ":endwhile"
-+or ":endif".  On the other hand, errors should be catchable as exceptions
-+(thus, requiring the immediate abortion).
-+
-+This problem has been solved by converting errors to exceptions and using
-+immediate abortion (if not suppressed by ":silent!") only when a try
-+conditional is active.	This is no restriction since an (error) exception can
-+be caught only from an active try conditional.	If you want an immediate
-+termination without catching the error, just use a try conditional without
-+catch clause.  (You can cause cleanup code being executed before termination
-+by specifying a finally clause.)
-+
-+When no try conditional is active, the usual abortion and continuation
-+behavior is used instead of immediate abortion.  This ensures compatibility of
-+scripts written for Vim 6.1 and earlier.
-+
-+However, when sourcing an existing script that does not use exception handling
-+commands (or when calling one of its functions) from inside an active try
-+conditional of a new script, you might change the control flow of the existing
-+script on error.  You get the immediate abortion on error and can catch the
-+error in the new script.  If however the sourced script suppresses error
-+messages by using the ":silent!" command (checking for errors by testing
-+|v:errmsg| if appropriate), its execution path is not changed.	The error is
-+not converted to an exception.	(See |:silent|.)  So the only remaining cause
-+where this happens is for scripts that don't care about errors and produce
-+error messages.  You probably won't want to use such code from your new
-+scripts.
-+
-+							*except-syntax-err*
-+Syntax errors in the exception handling commands are never caught by any of
-+the ":catch" commands of the try conditional they belong to.  Its finally
-+clauses, however, is executed.
-+   Example: >
-+
-+	:try
-+	:  try
-+	:    throw 4711
-+	:  catch /\(/
-+	:    echo "in catch with syntax error"
-+	:  catch
-+	:    echo "inner catch-all"
-+	:  finally
-+	:    echo "inner finally"
-+	:  endtry
-+	:catch
-+	:  echo 'outer catch-all caught "' . v:exception . '"'
-+	:  finally
-+	:    echo "outer finally"
-+	:endtry
-+
-+This displays: >
-+    inner finally
-+    outer catch-all caught "Vim(catch):E54: Unmatched \("
-+    outer finally
-+The original exception is discarded and an error exception is raised, instead.
-+
-+							*except-single-line*
-+The ":try", ":catch", ":finally", and ":endtry" commands can be put on
-+a single line, but then syntax errors may make it difficult to recognize the
-+"catch" line, thus you better avoid this.
-+   Example: >
-+	:try | unlet! foo # | catch | endtry
-+raises an error exception for the trailing characters after the ":unlet!"
-+argument, but does not see the ":catch" and ":endtry" commands, so that the
-+error exception is discarded and the "E488: Trailing characters" message gets
-+displayed.
-+
-+							*except-several-errors*
-+When several errors appear in a single command, the first error message is
-+usually the most specific one and therefor converted to the error exception.
-+   Example: >
-+	echo novar
-+causes >
-+	E121: Undefined variable: novar
-+	E15: Invalid expression: novar
-+The value of the error exception inside try conditionals is: >
-+	Vim(echo):E121: Undefined variable: novar
-+<							*except-syntax-error*
-+But when a syntax error is detected after a normal error in the same command,
-+the syntax error is used for the exception being thrown.
-+   Example: >
-+	unlet novar #
-+causes >
-+	E108: No such variable: "novar"
-+	E488: Trailing characters
-+The value of the error exception inside try conditionals is: >
-+	Vim(unlet):E488: Trailing characters
-+This is done because the syntax error might change the execution path in a way
-+not intended by the user.  Example: >
-+	try
-+	    try | unlet novar # | catch | echo v:exception | endtry
-+	catch /.*/
-+	    echo "outer catch:" v:exception
-+	endtry
-+This displays "outer catch: Vim(unlet):E488: Trailing characters", and then
-+a "E600: Missing :endtry" error message is given, see |except-single-line|.
-+
-+==============================================================================
-+9. Examples						*eval-examples*
-+
-+Printing in Binary ~
-+>
-+  :" The function Nr2Bin() returns the binary string representation of a number.
-+  :func Nr2Bin(nr)
-+  :  let n = a:nr
-+  :  let r = ""
-+  :  while n
-+  :    let r = '01'[n % 2] . r
-+  :    let n = n / 2
-+  :  endwhile
-+  :  return r
-+  :endfunc
-+
-+  :" The function String2Bin() converts each character in a string to a
-+  :" binary string, separated with dashes.
-+  :func String2Bin(str)
-+  :  let out = ''
-+  :  for ix in range(strlen(a:str))
-+  :    let out = out . '-' . Nr2Bin(char2nr(a:str[ix]))
-+  :  endfor
-+  :  return out[1:]
-+  :endfunc
-+
-+Example of its use: >
-+  :echo Nr2Bin(32)
-+result: "100000" >
-+  :echo String2Bin("32")
-+result: "110011-110010"
-+
-+
-+Sorting lines ~
-+
-+This example sorts lines with a specific compare function. >
-+
-+  :func SortBuffer()
-+  :  let lines = getline(1, '$')
-+  :  call sort(lines, function("Strcmp"))
-+  :  call setline(1, lines)
-+  :endfunction
-+
-+As a one-liner: >
-+  :call setline(1, sort(getline(1, '$'), function("Strcmp")))
-+
-+
-+scanf() replacement ~
-+							*sscanf*
-+There is no sscanf() function in Vim.  If you need to extract parts from a
-+line, you can use matchstr() and substitute() to do it.  This example shows
-+how to get the file name, line number and column number out of a line like
-+"foobar.txt, 123, 45". >
-+   :" Set up the match bit
-+   :let mx='\(\f\+\),\s*\(\d\+\),\s*\(\d\+\)'
-+   :"get the part matching the whole expression
-+   :let l = matchstr(line, mx)
-+   :"get each item out of the match
-+   :let file = substitute(l, mx, '\1', '')
-+   :let lnum = substitute(l, mx, '\2', '')
-+   :let col = substitute(l, mx, '\3', '')
-+
-+The input is in the variable "line", the results in the variables "file",
-+"lnum" and "col". (idea from Michael Geddes)
-+
-+
-+getting the scriptnames in a Dictionary ~
-+						*scriptnames-dictionary*
-+The |:scriptnames| command can be used to get a list of all script files that
-+have been sourced.  There is no equivalent function or variable for this
-+(because it's rarely needed).  In case you need to manipulate the list this
-+code can be used: >
-+    " Get the output of ":scriptnames" in the scriptnames_output variable.
-+    let scriptnames_output = ''
-+    redir => scriptnames_output
-+    silent scriptnames
-+    redir END
-+    
-+    " Split the output into lines and parse each line.	Add an entry to the
-+    " "scripts" dictionary.
-+    let scripts = {}
-+    for line in split(scriptnames_output, "\n")
-+      " Only do non-blank lines.
-+      if line =~ '\S'
-+	" Get the first number in the line.
-+	let nr = matchstr(line, '\d\+')
-+	" Get the file name, remove the script number " 123: ".
-+	let name = substitute(line, '.\+:\s*', '', '')
-+	" Add an item to the Dictionary
-+	let scripts[nr] = name
-+      endif
-+    endfor
-+    unlet scriptnames_output
-+
-+==============================================================================
-+10. No +eval feature				*no-eval-feature*
-+
-+When the |+eval| feature was disabled at compile time, none of the expression
-+evaluation commands are available.  To prevent this from causing Vim scripts
-+to generate all kinds of errors, the ":if" and ":endif" commands are still
-+recognized, though the argument of the ":if" and everything between the ":if"
-+and the matching ":endif" is ignored.  Nesting of ":if" blocks is allowed, but
-+only if the commands are at the start of the line.  The ":else" command is not
-+recognized.
-+
-+Example of how to avoid executing commands when the |+eval| feature is
-+missing: >
-+
-+	:if 1
-+	:  echo "Expression evaluation is compiled in"
-+	:else
-+	:  echo "You will _never_ see this message"
-+	:endif
-+
-+==============================================================================
-+11. The sandbox					*eval-sandbox* *sandbox* *E48*
-+
-+The 'foldexpr', 'formatexpr', 'includeexpr', 'indentexpr', 'statusline' and
-+'foldtext' options may be evaluated in a sandbox.  This means that you are
-+protected from these expressions having nasty side effects.  This gives some
-+safety for when these options are set from a modeline.  It is also used when
-+the command from a tags file is executed and for CTRL-R = in the command line.
-+The sandbox is also used for the |:sandbox| command.
-+
-+These items are not allowed in the sandbox:
-+	- changing the buffer text
-+	- defining or changing mapping, autocommands, functions, user commands
-+	- setting certain options (see |option-summary|)
-+	- setting certain v: variables (see |v:var|)  *E794*
-+	- executing a shell command
-+	- reading or writing a file
-+	- jumping to another buffer or editing a file
-+	- executing Python, Perl, etc. commands
-+This is not guaranteed 100% secure, but it should block most attacks.
-+
-+							*:san* *:sandbox*
-+:san[dbox] {cmd}	Execute {cmd} in the sandbox.  Useful to evaluate an
-+			option that may have been set from a modeline, e.g.
-+			'foldexpr'.
-+
-+							*sandbox-option*
-+A few options contain an expression.  When this expression is evaluated it may
-+have to be done in the sandbox to avoid a security risk.  But the sandbox is
-+restrictive, thus this only happens when the option was set from an insecure
-+location.  Insecure in this context are:
-+- sourcing a .vimrc or .exrc in the current directory
-+- while executing in the sandbox
-+- value coming from a modeline
-+
-+Note that when in the sandbox and saving an option value and restoring it, the
-+option will still be marked as it was set in the sandbox.
-+
-+==============================================================================
-+12. Textlock							*textlock*
-+
-+In a few situations it is not allowed to change the text in the buffer, jump
-+to another window and some other things that might confuse or break what Vim
-+is currently doing.  This mostly applies to things that happen when Vim is
-+actually doing something else.	For example, evaluating the 'balloonexpr' may
-+happen any moment the mouse cursor is resting at some position.
-+
-+This is not allowed when the textlock is active:
-+	- changing the buffer text
-+	- jumping to another buffer or window
-+	- editing another file
-+	- closing a window or quitting Vim
-+	- etc.
-+
-+
-+ vim:tw=78:ts=8:ft=help:norl:
-diff -Naur vim73.orig/runtime/doc/if_cscop.txt vim73/runtime/doc/if_cscop.txt
---- vim73.orig/runtime/doc/if_cscop.txt	2010-08-15 12:23:20.000000000 +0000
-+++ vim73/runtime/doc/if_cscop.txt	2012-11-01 20:35:42.000000000 +0000
-@@ -272,6 +272,15 @@
- 	:set cst
- 	:set nocst
- <
-+							*cscoperelative* *csre*
-+If 'cscoperelative' set, then in absence of a prefix given to cscope (prefx
-+is the argument to -P option of cscope), basename of cscope.out location
-+(usually the project root directory) will be used as the prefix to construt
-+absolute path.The default is off. Note: This option is only effective when
-+cscope (cscopeprg) is initialized without a prefix path (-P). Examples: >
-+	:set csre
-+	:set nocsre
-+<
- 							*cscopetagorder* *csto*
- The value of 'csto' determines the order in which |:cstag| performs a search.
- If 'csto' is set to zero, cscope database(s) are searched first, followed
-diff -Naur vim73.orig/runtime/doc/if_cscop.txt~ vim73/runtime/doc/if_cscop.txt~
---- vim73.orig/runtime/doc/if_cscop.txt~	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/runtime/doc/if_cscop.txt~	2010-08-15 12:23:20.000000000 +0000
-@@ -0,0 +1,490 @@
-+*if_cscop.txt*  For Vim version 7.3.  Last change: 2009 Mar 18
-+
-+
-+		  VIM REFERENCE MANUAL    by Andy Kahn
-+
-+							*cscope* *Cscope*
-+This document explains how to use Vim's cscope interface.
-+
-+Cscope is a tool like ctags, but think of it as ctags on steroids since it
-+does a lot more than what ctags provides.  In Vim, jumping to a result from
-+a cscope query is just like jumping to any tag; it is saved on the tag stack
-+so that with the right keyboard mappings, you can jump back and forth between
-+functions as you normally would with |tags|.
-+
-+1. Cscope introduction		|cscope-intro|
-+2. Cscope related commands	|cscope-commands|
-+3. Cscope options		|cscope-options|
-+4. How to use cscope in Vim	|cscope-howtouse|
-+5. Limitations			|cscope-limitations|
-+6. Suggested usage		|cscope-suggestions|
-+7. Availability & Information	|cscope-info|
-+
-+This is currently for Unix and Win32 only.
-+{Vi does not have any of these commands}
-+
-+==============================================================================
-+1. Cscope introduction					*cscope-intro*
-+
-+The following text is taken from a version of the cscope man page:
-+
-+				    -----
-+
-+  Cscope is an interactive screen-oriented tool that helps you:
-+
-+       Learn how a C program works without endless flipping through a thick
-+       listing.
-+
-+       Locate the section of code to change to fix a bug without having to
-+       learn the entire program.
-+
-+       Examine the effect of a proposed change such as adding a value to an
-+       enum variable.
-+
-+       Verify that a change has been made in all source files such as adding
-+       an argument to an existing function.
-+
-+       Rename a global variable in all source files.
-+
-+       Change a constant to a preprocessor symbol in selected lines of files.
-+
-+  It is designed to answer questions like:
-+       Where is this symbol used?
-+       Where is it defined?
-+       Where did this variable get its value?
-+       What is this global symbol's definition?
-+       Where is this function in the source files?
-+       What functions call this function?
-+       What functions are called by this function?
-+       Where does the message "out of space" come from?
-+       Where is this source file in the directory structure?
-+       What files include this header file?
-+
-+  Cscope answers these questions from a symbol database that it builds the
-+  first time it is used on the source files.  On a subsequent call, cscope
-+  rebuilds the database only if a source file has changed or the list of
-+  source files is different.  When the database is rebuilt the data for the
-+  unchanged files is copied from the old database, which makes rebuilding
-+  much faster than the initial build.
-+
-+				    -----
-+
-+When cscope is normally invoked, you will get a full-screen selection
-+screen allowing you to make a query for one of the above questions.
-+However, once a match is found to your query and you have entered your
-+text editor to edit the source file containing match, you cannot simply
-+jump from tag to tag as you normally would with vi's Ctrl-] or :tag
-+command.
-+
-+Vim's cscope interface is done by invoking cscope with its line-oriented
-+interface, and then parsing the output returned from a query.  The end
-+result is that cscope query results become just like regular tags, so
-+you can jump to them just like you do with normal tags (Ctrl-] or :tag)
-+and then go back by popping off the tagstack with Ctrl-T.  (Please note
-+however, that you don't actually jump to a cscope tag simply by doing
-+Ctrl-] or :tag without remapping these commands or setting an option.
-+See the remaining sections on how the cscope interface works and for
-+suggested use.)
-+
-+
-+==============================================================================
-+2. Cscope related commands				*cscope-commands*
-+
-+		*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
-+All cscope commands are accessed through suboptions to the main cscope
-+command ":cscope".  The shortest abbreviation is ":cs".  The ":scscope"
-+command does the same and also splits the window (short: "scs").
-+
-+The available subcommands are:
-+
-+			*E563* *E564* *E566* *E568* *E569* *E622* *E623*
-+			*E625* *E626* *E609*
-+    add   : Add a new cscope database/connection.
-+
-+	USAGE	:cs add {file|dir} [pre-path] [flags]
-+
-+	    [pre-path] is the pathname used with the -P command to cscope.
-+
-+	    [flags] are any additional flags you want to pass to cscope.
-+
-+	EXAMPLES >
-+	    :cscope add /usr/local/cdb/cscope.out
-+	    :cscope add /projects/vim/cscope.out /usr/local/vim
-+	    :cscope add cscope.out /usr/local/vim -C
-+<
-+				      *cscope-find* *cs-find*
-+						*E565* *E567*
-+    find  : Query cscope.  All cscope query options are available
-+	    except option #5 ("Change this grep pattern").
-+
-+	USAGE	:cs find {querytype} {name}
-+
-+	    {querytype} corresponds to the actual cscope line
-+	    interface numbers as well as default nvi commands:
-+
-+		0 or s: Find this C symbol
-+		1 or g: Find this definition
-+		2 or d: Find functions called by this function
-+		3 or c: Find functions calling this function
-+		4 or t: Find this text string
-+		6 or e: Find this egrep pattern
-+		7 or f: Find this file
-+		8 or i: Find files #including this file
-+
-+	For all types, except 4 and 6, leading white space for {name} is
-+	removed.  For 4 and 6 there is exactly one space between {querytype}
-+	and {name}.  Further white space is included in {name}.
-+
-+	EXAMPLES >
-+	    :cscope find c vim_free
-+	    :cscope find 3  vim_free
-+<
-+	    These two examples perform the same query: functions calling
-+	    "vim_free". >
-+
-+	    :cscope find t initOnce
-+	    :cscope find t  initOnce
-+<
-+	    The first one searches for the text "initOnce", the second one for
-+	    " initOnce". >
-+
-+	    :cscope find 0 DEFAULT_TERM
-+<
-+	    Executing this example on the source code for Vim 5.1 produces the
-+	    following output:
-+
-+	    Cscope tag: DEFAULT_TERM
-+	       #   line  filename / context / line
-+	       1   1009  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"amiga"
-+	       2   1013  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"win32"
-+	       3   1017  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"pcterm"
-+	       4   1021  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"ansi"
-+	       5   1025  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"vt52"
-+	       6   1029  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"os2ansi"
-+	       7   1033  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"ansi"
-+	       8   1037  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 # undef DEFAULT_TERM
-+	       9   1038  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"beos-ansi"
-+	      10   1042  vim-5.1-gtk/src/term.c <<GLOBAL>>
-+			 #define DEFAULT_TERM (char_u *)"mac-ansi"
-+	      11   1335  vim-5.1-gtk/src/term.c <<set_termname>>
-+			 term = DEFAULT_TERM;
-+	      12   1459  vim-5.1-gtk/src/term.c <<set_termname>>
-+			 if (STRCMP(term, DEFAULT_TERM))
-+	      13   1826  vim-5.1-gtk/src/term.c <<termcapinit>>
-+			 term = DEFAULT_TERM;
-+	      14   1833  vim-5.1-gtk/src/term.c <<termcapinit>>
-+			 term = DEFAULT_TERM;
-+	      15   3635  vim-5.1-gtk/src/term.c <<update_tcap>>
-+			 p = find_builtin_term(DEFAULT_TERM);
-+	    Enter nr of choice (<CR> to abort):
-+
-+	    The output shows several pieces of information:
-+	    1. The tag number (there are 15 in this example).
-+	    2. The line number where the tag occurs.
-+	    3. The filename where the tag occurs.
-+	    4. The context of the tag (e.g., global, or the function name).
-+	    5. The line from the file itself.
-+
-+    help  : Show a brief synopsis.
-+
-+	    USAGE   :cs help
-+
-+						*E260* *E261*
-+    kill  : Kill a cscope connection (or kill all cscope connections).
-+
-+	    USAGE   :cs kill {num|partial_name}
-+
-+	    To kill a cscope connection, the connection number or a partial
-+	    name must be specified.  The partial name is simply any part of
-+	    the pathname of the cscope database.  Kill a cscope connection
-+	    using the partial name with caution!
-+
-+	    If the specified connection number is -1, then _ALL_ cscope
-+	    connections will be killed.
-+
-+    reset : Reinit all cscope connections.
-+
-+	    USAGE   :cs reset
-+
-+    show  : Show cscope connections.
-+
-+	    USAGE   :cs show
-+
-+							*:lcscope* *:lcs*
-+This command is same as the ":cscope" command, except when the
-+'cscopequickfix' option is set, the location list for the current window is
-+used instead of the quickfix list to show the cscope results.
-+
-+							*:cstag* *E257* *E562*
-+If you use cscope as well as ctags, |:cstag| allows you to search one or
-+the other before making a jump.  For example, you can choose to first
-+search your cscope database(s) for a match, and if one is not found, then
-+your tags file(s) will be searched.  The order in which this happens
-+is determined by the value of |csto|.  See |cscope-options| for more
-+details.
-+
-+|:cstag| performs the equivalent of ":cs find g" on the identifier when
-+searching through the cscope database(s).
-+
-+|:cstag| performs the equivalent of |:tjump| on the identifier when searching
-+through your tags file(s).
-+
-+
-+==============================================================================
-+3. Cscope options					*cscope-options*
-+
-+Use the |:set| command to set all cscope options.  Ideally, you would do
-+this in one of your startup files (e.g., .vimrc).  Some cscope related
-+variables are only valid within |.vimrc|.  Setting them after vim has
-+started will have no effect!
-+
-+							*cscopeprg* *csprg*
-+'cscopeprg' specifies the command to execute cscope.  The default is
-+"cscope".  For example: >
-+	:set csprg=/usr/local/bin/cscope
-+<
-+					    *cscopequickfix* *csqf* *E469*
-+{not available when compiled without the |+quickfix| feature}
-+'cscopequickfix' specifies whether to use quickfix window to show cscope
-+results.  This is a list of comma-separated values. Each item consists of
-+|cscope-find| command (s, g, d, c, t, e, f or i) and flag (+, - or 0).
-+'+' indicates that results must be appended to quickfix window,
-+'-' implies previous results clearance, '0' or command absence - don't use
-+quickfix.  Search is performed from start until first command occurrence.
-+The default value is "" (don't use quickfix anyway).  The following value
-+seems to be useful: >
-+	:set cscopequickfix=s-,c-,d-,i-,t-,e-
-+<
-+							*cscopetag* *cst*
-+If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will
-+always use |:cstag| instead of the default :tag behavior.  Effectively, by
-+setting 'cst', you will always search your cscope databases as well as your
-+tag files.  The default is off.  Examples: >
-+	:set cst
-+	:set nocst
-+<
-+							*cscopetagorder* *csto*
-+The value of 'csto' determines the order in which |:cstag| performs a search.
-+If 'csto' is set to zero, cscope database(s) are searched first, followed
-+by tag file(s) if cscope did not return any matches.  If 'csto' is set to
-+one, tag file(s) are searched before cscope database(s).  The default is zero.
-+Examples: >
-+	:set csto=0
-+	:set csto=1
-+<
-+						*cscopeverbose* *csverb*
-+If 'cscopeverbose' is not set (the default), messages will not be printed
-+indicating success or failure when adding a cscope database.  Ideally, you
-+should reset this option in your |.vimrc| before adding any cscope databases,
-+and after adding them, set it.  From then on, when you add more databases
-+within Vim, you will get a (hopefully) useful message should the database fail
-+to be added.  Examples: >
-+	:set csverb
-+	:set nocsverb
-+<
-+						      *cscopepathcomp* *cspc*
-+The value of 'cspc' determines how many components of a file's path to
-+display.  With the default value of zero the entire path will be displayed.
-+The value one will display only the filename with no path.  Other values
-+display that many components.  For example: >
-+	:set cspc=3
-+will display the last 3 components of the file's path, including the file
-+name itself.
-+
-+==============================================================================
-+4. How to use cscope in Vim				*cscope-howtouse*
-+
-+The first thing you need to do is to build a cscope database for your
-+source files.  For the most basic case, simply do "cscope -b".  Please
-+refer to the cscope man page for more details.
-+
-+Assuming you have a cscope database, you need to "add" the database to Vim.
-+This establishes a cscope "connection" and makes it available for Vim to use.
-+You can do this in your .vimrc file, or you can do it manually after starting
-+vim.  For example, to add the cscope database "cscope.out", you would do:
-+
-+	:cs add cscope.out
-+
-+You can double-check the result of this by executing ":cs show".  This will
-+produce output which looks like this:
-+
-+ # pid	  database name			      prepend path
-+ 0 28806  cscope.out			      <none>
-+
-+Note:
-+Because of the Microsoft RTL limitations, Win32 version shows 0 instead
-+of the real pid.
-+
-+Once a cscope connection is established, you can make queries to cscope and
-+the results will be printed to you.  Queries are made using the command
-+":cs find".  For example:
-+
-+	:cs find g ALIGN_SIZE
-+
-+This can get a little cumbersome since one ends up doing a significant
-+amount of typing.  Fortunately, there are ways around this by mapping
-+shortcut keys.  See |cscope-suggestions| for suggested usage.
-+
-+If the results return only one match, you will automatically be taken to it.
-+If there is more than one match, you will be given a selection screen to pick
-+the match you want to go to.  After you have jumped to the new location,
-+simply hit Ctrl-T to get back to the previous one.
-+
-+
-+==============================================================================
-+5. Limitations						*cscope-limitations*
-+
-+Cscope support for Vim is only available on systems that support these four
-+system calls: fork(), pipe(), execl(), waitpid().  This means it is mostly
-+limited to Unix systems.
-+
-+Additionally Cscope support works for Win32.  For more information and a
-+cscope version for Win32 see:
-+
-+	http://iamphet.nm.ru/cscope/index.html
-+
-+The DJGPP-built version from http://cscope.sourceforge.net is known to not
-+work with Vim.
-+
-+Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
-+is not configurable (e.g., you can't do a tselect instead).
-+
-+==============================================================================
-+6. Suggested usage					*cscope-suggestions*
-+
-+Put these entries in your .vimrc (adjust the pathname accordingly to your
-+setup): >
-+
-+	if has("cscope")
-+		set csprg=/usr/local/bin/cscope
-+		set csto=0
-+		set cst
-+		set nocsverb
-+		" add any database in current directory
-+		if filereadable("cscope.out")
-+		    cs add cscope.out
-+		" else add database pointed to by environment
-+		elseif $CSCOPE_DB != ""
-+		    cs add $CSCOPE_DB
-+		endif
-+		set csverb
-+	endif
-+
-+By setting 'cscopetag', we have effectively replaced all instances of the :tag
-+command with :cstag.  This includes :tag, Ctrl-], and "vim -t".  In doing
-+this, the regular tag command not only searches your ctags generated tag
-+files, but your cscope databases as well.
-+
-+Some users may want to keep the regular tag behavior and have a different
-+shortcut to access :cstag.  For example, one could map Ctrl-_  (underscore)
-+to :cstag with the following command: >
-+
-+	map <C-_> :cstag <C-R>=expand("<cword>")<CR><CR>
-+
-+A couple of very commonly used cscope queries (using ":cs find") is to
-+find all functions calling a certain function and to find all occurrences
-+of a particular C symbol.  To do this, you can use these mappings as an
-+example: >
-+
-+	map g<C-]> :cs find 3 <C-R>=expand("<cword>")<CR><CR>
-+	map g<C-\> :cs find 0 <C-R>=expand("<cword>")<CR><CR>
-+
-+These mappings for Ctrl-] (right bracket) and Ctrl-\ (backslash) allow you to
-+place your cursor over the function name or C symbol and quickly query cscope
-+for any matches.
-+
-+Or you may use the following scheme, inspired by Vim/Cscope tutorial from
-+Cscope Home Page (http://cscope.sourceforge.net/): >
-+
-+	nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
-+	nmap <C-_>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
-+	nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR>
-+
-+	" Using 'CTRL-spacebar' then a search type makes the vim window
-+	" split horizontally, with search result displayed in
-+	" the new window.
-+
-+	nmap <C-Space>s :scs find s <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space>g :scs find g <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space>c :scs find c <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space>t :scs find t <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space>e :scs find e <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space>f :scs find f <C-R>=expand("<cfile>")<CR><CR>
-+	nmap <C-Space>i :scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
-+	nmap <C-Space>d :scs find d <C-R>=expand("<cword>")<CR><CR>
-+
-+	" Hitting CTRL-space *twice* before the search type does a vertical
-+	" split instead of a horizontal one
-+
-+	nmap <C-Space><C-Space>s
-+		\:vert scs find s <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space><C-Space>g
-+		\:vert scs find g <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space><C-Space>c
-+		\:vert scs find c <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space><C-Space>t
-+		\:vert scs find t <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space><C-Space>e
-+		\:vert scs find e <C-R>=expand("<cword>")<CR><CR>
-+	nmap <C-Space><C-Space>i
-+		\:vert scs find i ^<C-R>=expand("<cfile>")<CR>$<CR>
-+	nmap <C-Space><C-Space>d
-+		\:vert scs find d <C-R>=expand("<cword>")<CR><CR>
-+
-+==============================================================================
-+7. Cscope availability and information			*cscope-info*
-+
-+If you do not already have cscope (it did not come with your compiler
-+license or OS distribution), then you can download it for free from:
-+	http://cscope.sourceforge.net/
-+This is released by SCO under the BSD license.
-+
-+If you want a newer version of cscope, you will probably have to buy it.
-+According to the (old) nvi documentation:
-+
-+	You can buy version 13.3 source with an unrestricted license
-+	for $400 from AT&T Software Solutions by calling +1-800-462-8146.
-+
-+Also you can download cscope 13.x and mlcscope 14.x (multi-lingual cscope
-+which supports C, C++, Java, lex, yacc, breakpoint listing, Ingres, and SDL)
-+from World-Wide Exptools Open Source packages page:
-+	http://www.bell-labs.com/project/wwexptools/packages.html
-+
-+In Solaris 2.x, if you have the C compiler license, you will also have
-+cscope.  Both are usually located under /opt/SUNWspro/bin
-+
-+SGI developers can also get it.  Search for Cscope on this page:
-+	http://freeware.sgi.com/index-by-alpha.html
-+	https://toolbox.sgi.com/toolbox/utilities/cscope/
-+The second one is for those who have a password for the SGI toolbox.
-+
-+There is source to an older version of a cscope clone (called "cs") available
-+on the net.  Due to various reasons, this is not supported with Vim.
-+
-+The cscope interface/support for Vim was originally written by
-+Andy Kahn <ackahn@netapp.com>.  The original structure (as well as a tiny
-+bit of code) was adapted from the cscope interface in nvi.  Please report
-+any problems, suggestions, patches, et al., you have for the usage of
-+cscope within Vim to him.
-+							*cscope-win32*
-+For a cscope version for Win32 see:
-+	http://code.google.com/p/cscope-win32/
-+
-+Win32 support was added by Sergey Khorev <sergey.khorev@gmail.com>.  Contact
-+him if you have Win32-specific issues.
-+
-+ vim:tw=78:ts=8:ft=help:norl:
-diff -Naur vim73.orig/runtime/doc/if_lua.txt vim73/runtime/doc/if_lua.txt
---- vim73.orig/runtime/doc/if_lua.txt	2010-08-15 12:23:20.000000000 +0000
-+++ vim73/runtime/doc/if_lua.txt	2012-11-01 20:35:45.000000000 +0000
-@@ -1,4 +1,4 @@
--*if_lua.txt*    For Vim version 7.3.  Last change: 2010 Jul 22
-+*if_lua.txt*    For Vim version 7.3.  Last change: 2012 Jan 16
- 
- 
- 		  VIM REFERENCE MANUAL    by Luis Carvalho
-@@ -8,8 +8,11 @@
- 
- 1. Commands			|lua-commands|
- 2. The vim module		|lua-vim|
--3. Buffer userdata		|lua-buffer|
--4. Window userdata		|lua-window|
-+3. List userdata		|lua-list|
-+4. Dict userdata		|lua-dict|
-+5. Buffer userdata		|lua-buffer|
-+6. Window userdata		|lua-window|
-+7. The luaeval function		|lua-luaeval|
- 
- {Vi does not have any of these commands}
- 
-@@ -88,11 +91,9 @@
- All these commands execute a Lua chunk from either the command line (:lua and
- :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
- interpreter, each chunk has its own scope and so only global variables are
--shared between command calls. Lua default libraries "table", "string", "math",
--and "package" are available, "io" and "debug" are not, and "os" is restricted
--to functions "date", "clock", "time", "difftime", and "getenv". In addition,
--Lua "print" function has its output redirected to the Vim message area, with
--arguments separated by a white space instead of a tab.
-+shared between command calls. All Lua default libraries are available. In
-+addition, Lua "print" function has its output redirected to the Vim message
-+area, with arguments separated by a white space instead of a tab.
- 
- Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
- and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
-@@ -108,9 +109,9 @@
- module also includes routines for buffer, window, and current line queries,
- Vim evaluation and command execution, and others.
- 
--	vim.isbuffer(value)	Returns 'true' (boolean, not string) if
--				"value" is a buffer userdata and 'false'
--				otherwise (see |lua-buffer|).
-+	vim.list()		Returns an empty list (see |List|).
-+
-+	vim.dict()		Returns an empty dictionary (see |Dictionary|).
- 
- 	vim.buffer([arg])	If "arg" is a number, returns buffer with
- 				number "arg" in the buffer list or, if "arg"
-@@ -121,16 +122,21 @@
- 				'true' returns the first buffer in the buffer
- 				list or else the current buffer.
- 
--	vim.iswindow(value)	Returns 'true' (boolean, not string) if
--				"value" is a window userdata and
--				'false' otherwise (see |lua-window|).
--
- 	vim.window([arg])	If "arg" is a number, returns window with
- 				number "arg" or 'nil' (nil value, not string)
- 				if not found. Otherwise, if "toboolean(arg)"
- 				is 'true' returns the first window or else the
- 				current window.
- 
-+	vim.type({arg})		Returns the type of {arg}. It is equivalent to
-+				Lua's "type" function, but returns "list",
-+				"dict", "buffer", or "window" if {arg} is a
-+				list, dictionary, buffer, or window,
-+				respectively. Examples: >
-+					:lua l = vim.list()
-+					:lua print(type(l), vim.type(l))
-+					:" userdata list
-+<
- 	vim.command({cmd})	Executes the vim (ex-mode) command {cmd}.
- 				Examples: >
- 					:lua vim.command"set tw=60"
-@@ -141,7 +147,7 @@
- 				Vim strings and numbers are directly converted
- 				to Lua strings and numbers respectively. Vim
- 				lists and dictionaries are converted to Lua
--				tables (lists become integer-keyed tables).
-+				userdata (see |lua-list| and |lua-dict|).
- 				Examples: >
- 					:lua tw = vim.eval"&tw"
- 					:lua print(vim.eval"{'a': 'one'}".a)
-@@ -157,7 +163,72 @@
- 
- 
- ==============================================================================
--3. Buffer userdata					*lua-buffer*
-+3. List userdata					*lua-list*
-+
-+List userdata represent vim lists, and the interface tries to follow closely
-+Vim's syntax for lists. Since lists are objects, changes in list references in
-+Lua are reflected in Vim and vice-versa. A list "l" has the following
-+properties and methods:
-+
-+Properties
-+----------
-+	o "#l" is the number of items in list "l", equivalent to "len(l)"
-+	    in Vim.
-+	o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
-+	    To modify the k-th item, simply do "l[k] = newitem"; in
-+	    particular, "l[k] = nil" removes the k-th item from "l".
-+	o "l()" returns an iterator for "l".
-+
-+Methods
-+-------
-+	o "l:add(item)" appends "item" to the end of "l".
-+	o "l:insert(item[, pos])" inserts "item" at (optional)
-+	    position "pos" in the list. The default value for "pos" is 0.
-+
-+Examples:
-+>
-+	:let l = [1, 'item']
-+	:lua l = vim.eval('l') -- same 'l'
-+	:lua l:add(vim.list())
-+	:lua l[0] = math.pi
-+	:echo l[0] " 3.141593
-+	:lua l[0] = nil -- remove first item
-+	:lua l:insert(true, 1)
-+	:lua print(l, #l, l[0], l[1], l[-1])
-+	:lua for item in l() do print(item) end
-+<
-+
-+==============================================================================
-+4. Dict userdata					*lua-dict*
-+
-+Similarly to list userdata, dict userdata represent vim dictionaries; since
-+dictionaries are also objects, references are kept between Lua and Vim. A dict
-+"d" has the following properties:
-+
-+Properties
-+----------
-+	o "#d" is the number of items in dict "d", equivalent to "len(d)"
-+	    in Vim.
-+	o "d.key" or "d['key']" returns the value at entry "key" in "d".
-+	    To modify the entry at this key, simply do "d.key = newvalue"; in
-+	    particular, "d.key = nil" removes the entry from "d".
-+	o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
-+	    Vim.
-+
-+Examples:
-+>
-+	:let d = {'n':10}
-+	:lua d = vim.eval('d') -- same 'd'
-+	:lua print(d, d.n, #d)
-+	:let d.self = d
-+	:lua for k, v in d() do print(d, k, v) end
-+	:lua d.x = math.pi
-+	:lua d.self = nil -- remove entry
-+	:echo d
-+<
-+
-+==============================================================================
-+5. Buffer userdata					*lua-buffer*
- 
- Buffer userdata represent vim buffers. A buffer userdata "b" has the following
- properties and methods:
-@@ -209,7 +280,7 @@
- <
- 
- ==============================================================================
--4. Window userdata					*lua-window*
-+6. Window userdata					*lua-window*
- 
- Window objects represent vim windows. A window userdata "w" has the following
- properties and methods:
-@@ -241,4 +312,29 @@
- <
- 
- ==============================================================================
-- vim:tw=78:ts=8:ft=help:norl:
-+7. The luaeval function					*lua-luaeval*
-+
-+The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
-+"luaeval". "luaeval" takes an expression string and an optional argument and
-+returns the result of the expression. It is semantically equivalent in Lua to:
-+>
-+	local chunkheader = "local _A = select(1, ...) return "
-+	function luaeval (expstr, arg)
-+	    local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
-+	    return chunk(arg) -- return typval
-+	end
-+<
-+Note that "_A" receives the argument to "luaeval". Examples: >
-+
-+	:echo luaeval('math.pi')
-+	:lua a = vim.list():add('newlist')
-+	:let a = luaeval('a')
-+	:echo a[0] " 'newlist'
-+	:function Rand(x,y) " random uniform between x and y
-+	:  return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
-+	:  endfunction
-+	:echo Rand(1,10)
-+
-+
-+==============================================================================
-+ vim:tw=78:ts=8:noet:ft=help:norl:
-diff -Naur vim73.orig/runtime/doc/if_pyth.txt vim73/runtime/doc/if_pyth.txt
---- vim73.orig/runtime/doc/if_pyth.txt	2010-08-15 12:23:20.000000000 +0000
-+++ vim73/runtime/doc/if_pyth.txt	2012-11-01 20:35:48.000000000 +0000
-@@ -1,4 +1,4 @@
--*if_pyth.txt*   For Vim version 7.3.  Last change: 2010 Aug 13
-+*if_pyth.txt*   For Vim version 7.3.  Last change: 2012 Feb 04
- 
- 
- 		  VIM REFERENCE MANUAL    by Paul Moore
-@@ -6,13 +6,14 @@
- 
- The Python Interface to Vim				*python* *Python*
- 
--1. Commands			|python-commands|
--2. The vim module		|python-vim|
--3. Buffer objects		|python-buffer|
--4. Range objects		|python-range|
--5. Window objects		|python-window|
--6. Dynamic loading		|python-dynamic|
--7. Python 3			|python3|
-+1. Commands					|python-commands|
-+2. The vim module				|python-vim|
-+3. Buffer objects				|python-buffer|
-+4. Range objects				|python-range|
-+5. Window objects				|python-window|
-+6. pyeval(), py3eval() Vim functions		|python-pyeval|
-+7. Dynamic loading				|python-dynamic|
-+8. Python 3					|python3|
- 
- {Vi does not have any of these commands}
- 
-@@ -26,7 +27,9 @@
- 
- 					*:python* *:py* *E205* *E263* *E264*
- :[range]py[thon] {stmt}
--			Execute Python statement {stmt}.
-+			Execute Python statement {stmt}.  A simple check if
-+			the `:python` command is working: >
-+				:python print "Hello"
- 
- :[range]py[thon] << {endmarker}
- {script}
-@@ -150,6 +153,42 @@
- 	[{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
- 	'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
- 
-+vim.bindeval(str)					*python-bindeval*
-+	Like |python-eval|, but
-+	1. if expression evaluates to |List| or |Dictionary| it is returned as 
-+	   vimlist or vimdictionary python type that are connected to original 
-+	   list or dictionary. Thus modifications to these objects imply 
-+	   modifications of the original.
-+
-+	   Additionally, vimlist and vimdictionary type have read-write 
-+	   `.locked` attribute that returns
-+	     Value           Meaning ~
-+	     zero            Variable is not locked
-+	     vim.VAR_LOCKED  Variable is locked, but can be unlocked
-+	     vim.VAR_FIXED   Variable is locked and canât be unlocked
-+	   integer constants. If variable is not fixed, you can do 
-+	   `var.locked=True` to lock it and `var.locked=False` to unlock. 
-+	   There is no recursive locking like |:lockvar|! does. There is also 
-+	   no way to lock a specific key or check whether it is locked (in any 
-+	   case these locks are ignored by anything except |:let|: |extend()| 
-+	   does not care, neither does python interface).
-+
-+	   Vimdictionary type also supports `.scope` attribute which is one of
-+	     Value              Meaning ~
-+	     zero               Dictionary is not a scope one
-+	     vim.VAR_DEF_SCOPE  Function-local or global scope dictionary
-+	     vim.VAR_SCOPE      Other scope dictionary
-+
-+	2. if expression evaluates to a function reference, then it returns 
-+	   callable vimfunction object. Use self keyword argument to assign 
-+	   |self| object for dictionary functions.
-+
-+	Note: this function has the same behavior as |lua-eval| (except that 
-+	      lua does not support running vim functions), |python-eval| is 
-+	      kept for backwards compatibility in order not to make scripts 
-+	      relying on outputs of vim.eval() being a copy of original or 
-+	      vim.eval("1") returning a string.
-+
- 
- 
- Error object of the "vim" module
-@@ -222,8 +261,9 @@
- 	- from indexing vim.buffers (|python-buffers|)
- 	- from the "buffer" attribute of a window (|python-window|)
- 
--Buffer objects have one read-only attribute - name - the full file name for
--the buffer.  They also have three methods (append, mark, and range; see below).
-+Buffer objects have two read-only attributes - name - the full file name for
-+the buffer, and number - the buffer number.  They also have three methods
-+(append, mark, and range; see below).
- 
- You can also treat buffer objects as sequence objects.  In this context, they
- act as if they were lists (yes, they are mutable) of strings, with each
-@@ -318,7 +358,13 @@
- The width attribute is writable only if the screen is split vertically.
- 
- ==============================================================================
--6. Dynamic loading					*python-dynamic*
-+6. pyeval() and py3eval() Vim functions			*python-pyeval*
-+
-+To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 
-+functions to evaluate Python expressions and pass their values to VimL.
-+
-+==============================================================================
-+7. Dynamic loading					*python-dynamic*
- 
- On MS-Windows the Python library can be loaded dynamically.  The |:version|
- output then includes |+python/dyn|.
-@@ -335,13 +381,16 @@
- sure edit "gvim.exe" and search for "python\d*.dll\c".
- 
- ==============================================================================
--7. Python 3						*python3*
-+8. Python 3						*python3*
- 
- 							*:py3* *:python3*
--The |:py3| and |:python3| commands work similar to |:python|.
--							*:py3file*
-+The |:py3| and |:python3| commands work similar to |:python|.  A simple check
-+if the `:py3` command is wrong: >
-+	:py3 print("Hello")
-+<							*:py3file*
- The |:py3file| command works similar to |:pyfile|.
- 
-+
- Vim can be built in four ways (:version output):
- 1. No Python support	    (-python, -python3)
- 2. Python 2 support only    (+python or +python/dyn, -python3)
-@@ -355,7 +404,7 @@
- When doing this on Linux/Unix systems and importing global symbols, this leads
- to a crash when the second Python version is used.  So either global symbols
- are loaded but only one Python version is activated, or no global symbols are
--loaded. The latter makes Python's "import" fail on libaries that expect the
-+loaded. The latter makes Python's "import" fail on libraries that expect the
- symbols to be provided by Vim.
- 							*E836* *E837*
- Vim's configuration script makes a guess for all libraries based on one
-@@ -377,6 +426,18 @@
- 3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
-    may crash Vim though.
- 
-+							*has-python*
-+You can test what Python version is available with: >
-+	if has('python')
-+	  echo 'there is Python 2.x'
-+  	elseif has('python3')
-+	  echo 'there is Python 3.x'
-+	endif
-+
-+Note however, that when Python 2 and 3 are both available and loaded
-+dynamically, these has() calls will try to load them.  If only one can be
-+loaded at a time, just checking if Python 2 or 3 are available will prevent
-+the other one from being available.
- 
- ==============================================================================
-  vim:tw=78:ts=8:ft=help:norl:
-diff -Naur vim73.orig/runtime/doc/indent.txt vim73/runtime/doc/indent.txt
---- vim73.orig/runtime/doc/indent.txt	2010-08-15 12:23:20.000000000 +0000
-+++ vim73/runtime/doc/indent.txt	2012-11-01 20:35:45.000000000 +0000
-@@ -128,13 +128,20 @@
- used CTRL-T or CTRL-D.
- 
- 						*cinoptions-values*
--The 'cinoptions' option sets how Vim performs indentation.  In the list below,
-+The 'cinoptions' option sets how Vim performs indentation.  The value after
-+the option character can be one of these (N is any number):
-+	N	indent N spaces
-+	-N	indent N spaces to the left
-+	Ns	N times 'shiftwidth spaces
-+	-Ns	N times 'shiftwidth spaces to the left
-+
-+In the list below,
- "N" represents a number of your choice (the number can be negative).  When
- there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
- "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc.  You can use a
--decimal point, too: "-0.5s" is minus half a 'shiftwidth'.  The examples below
--assume a 'shiftwidth' of 4.
--
-+decimal point, too: "-0.5s" is minus half a 'shiftwidth'.
-+The examples below assume a 'shiftwidth' of 4.
-+							*cino->*
- 	>N    Amount added for "normal" indent.  Used after a line that should
- 	      increase the indent (lines starting with "if", an opening brace,
- 	      etc.).  (default 'shiftwidth').
-@@ -145,6 +152,7 @@
- 		      foo;		foo;			  foo;
- 		  }		      }			  }
- <
-+							*cino-e*
- 	eN    Add N to the prevailing indent inside a set of braces if the
- 	      opening brace at the End of the line (more precise: is not the
- 	      first character in a line).  This is useful if you want a
-@@ -160,6 +168,7 @@
- 		      bar;		  bar;		      bar;
- 		  }		      }			  }
- <
-+							*cino-n*
- 	nN    Add N to the prevailing indent for a statement after an "if",
- 	      "while", etc., if it is NOT inside a set of braces.  This is
- 	      useful if you want a different indent when there is no '{'
-@@ -174,6 +183,7 @@
- 		      bar;		  bar;		      bar;
- 		  }		      }			  }
- <
-+							*cino-f*
- 	fN    Place the first opening brace of a function or other block in
- 	      column N.  This applies only for an opening brace that is not
- 	      inside other braces and is at the start of the line.  What comes
-@@ -184,6 +194,7 @@
- 		  {			{		      {
- 		      int foo;		    int foo;		  int foo;
- <
-+							*cino-{*
- 	{N    Place opening braces N characters from the prevailing indent.
- 	      This applies only for opening braces that are inside other
- 	      braces.  (default 0).
-@@ -193,6 +204,7 @@
- 		  {			{		      {
- 		      foo;		  foo;		      foo;
- <
-+							*cino-}*
- 	}N    Place closing braces N characters from the matching opening
- 	      brace.  (default 0).
- 
-@@ -202,6 +214,7 @@
- 		      foo;		  foo;		      foo;
- 		  }		      }			    }
- <
-+							*cino-^*
- 	^N    Add N to the prevailing indent inside a set of braces if the
- 	      opening brace is in column 0.  This can specify a different
- 	      indent for whole of a function (some may like to set it to a
-@@ -216,6 +229,7 @@
- 		      }			}		  }
- 		  }		      }			  }
- <
-+							*cino-L*
- 	LN    Controls placement of jump labels. If N is negative, the label
- 	      will be placed at column 1. If N is non-negative, the indent of
- 	      the label will be the prevailing indent minus N.  (default -1).
-@@ -229,6 +243,7 @@
- 		      }                   }                   }
- 		  }                   }                   }
- <
-+							*cino-:*
- 	:N    Place case labels N characters from the indent of the switch().
- 	      (default 'shiftwidth').
- 
-@@ -240,6 +255,7 @@
- 		      default:	      default:
- 		  }		      }
- <
-+							*cino-=*
- 	=N    Place statements occurring after a case label N characters from
- 	      the indent of the label.  (default 'shiftwidth').
- 
-@@ -247,6 +263,7 @@
- 		   case 11:		case 11:  a = a + 1;
- 		       a = a + 1;		  b = b + 1;
- <
-+							*cino-l*
- 	lN    If N != 0 Vim will align with a case label instead of the
- 	      statement after it in the same line.
- 
-@@ -256,6 +273,7 @@
- 				    break;	      break;
- 				}		  }
- <
-+							*cino-b*
- 	bN    If N != 0 Vim will align a final "break" with the case label,
- 	      so that case..break looks like a sort of block.  (default: 0).
- 
-@@ -271,6 +289,7 @@
- 			  break;	  break;
- 		  }		      }
- <
-+							*cino-g*
- 	gN    Place C++ scope declarations N characters from the indent of the
- 	      block they are in.  (default 'shiftwidth').  A scope declaration
- 	      can be "public:", "protected:" or "private:".
-@@ -282,6 +301,7 @@
- 		      private:	      private:
- 		  }		      }
- <
-+							*cino-h*
- 	hN    Place statements occurring after a C++ scope declaration N
- 	      characters from the indent of the label.  (default
- 	      'shiftwidth').
-@@ -290,6 +310,21 @@
- 		   public:		public:   a = a + 1;
- 		       a = a + 1;		  b = b + 1;
- <
-+							*cino-N*
-+	NN    Indent inside C++ namespace N characters extra compared to a
-+	      normal block.  (default 0).
-+
-+		cino=			   cino=N-s >
-+		  namespace {                namespace {
-+		      void function();       void function();
-+		  }                          }
-+
-+		  namespace my               namespace my
-+		  {                          {
-+		      void function();       void function();
-+		  }                          }
-+<
-+							*cino-p*
- 	pN    Parameter declarations for K&R-style function declarations will
- 	      be indented N characters from the margin.  (default
- 	      'shiftwidth').
-@@ -299,6 +334,7 @@
- 		      int a;	      int a;			  int a;
- 		      char b;	      char b;			  char b;
- <
-+							*cino-t*
- 	tN    Indent a function return type declaration N characters from the
- 	      margin.  (default 'shiftwidth').
- 
-@@ -306,6 +342,7 @@
- 		      int	      int			 int
- 		  func()	      func()		  func()
- <
-+							*cino-i*
- 	iN    Indent C++ base class declarations and constructor
- 	      initializations, if they start in a new line (otherwise they
- 	      are aligned at the right side of the ':').
-@@ -319,13 +356,18 @@
- 		      BaseClass(3)	    BaseClass(3)
- 		  {}			    {}
- <
--	+N    Indent a continuation line (a line that spills onto the next) N
--	      additional characters.  (default 'shiftwidth').
-+							*cino-+*
-+	+N    Indent a continuation line (a line that spills onto the next)
-+              inside a function N additional characters.  (default
-+              'shiftwidth').
-+              Outside of a function, when the previous line ended in a
-+              backslash, the 2 * N is used.
- 
- 		cino=			  cino=+10 >
- 		  a = b + 9 *		    a = b + 9 *
- 		      c;			      c;
- <
-+							*cino-c*
- 	cN    Indent comment lines after the comment opener, when there is no
- 	      other text with which to align, N characters from the comment
- 	      opener.  (default 3).  See also |format-comments|.
-@@ -335,6 +377,7 @@
- 		     text.			 text.
- 		   */			     */
- <
-+							*cino-C*
- 	CN    When N is non-zero, indent comment lines by the amount specified
- 	      with the c flag above even if there is other text behind the
- 	      comment opener.  (default 0).
-@@ -345,12 +388,14 @@
- 		  ********/		    ********/
- <	      (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
- 
-+							*cino-/*
- 	/N    Indent comment lines N characters extra.  (default 0).
- 		cino=			  cino=/4 >
- 		  a = b;		    a = b;
- 		  /* comment */			/* comment */
- 		  c = d;		    c = d;
- <
-+							*cino-(*
- 	(N    When in unclosed parentheses, indent N characters from the line
- 	      with the unclosed parentheses.  Add a 'shiftwidth' for every
- 	      unclosed parentheses.  When N is 0 or the unclosed parentheses
-@@ -366,6 +411,7 @@
- 			  (c2 || c3))		(c2 || c3))
- 		     {			       {
- <
-+							*cino-u*
- 	uN    Same as (N, but for one level deeper.  (default 'shiftwidth').
- 
- 		cino=			  cino=u2 >
-@@ -373,6 +419,7 @@
- 			  && (c22345		    && (c22345
- 			      || c3))		      || c3))
- <
-+							*cino-U*
- 	UN    When N is non-zero, do not ignore the indenting specified by
- 	      ( or u in case that the unclosed parentheses is the first
- 	      non-white character in its line.  (default 0).
-@@ -384,6 +431,7 @@
- 		       c3			    c3
- 		      ) && c4;			) && c4;
- <
-+							*cino-2*
- 	wN    When in unclosed parentheses and N is non-zero and either
- 	      using "(0" or "u0", respectively, or using "U0" and the unclosed
- 	      parentheses is the first non-white character in its line, line
-@@ -396,6 +444,7 @@
- 				|| c3))		    || c3))
- 		      foo;			foo;
- <
-+							*cino-W*
- 	WN    When in unclosed parentheses and N is non-zero and either
- 	      using "(0" or "u0", respectively and the unclosed parentheses is
- 	      the last non-white character in its line and it is not the
-@@ -410,6 +459,23 @@
- 		  a_short_line(argument,    a_short_line(argument,
- 			       argument);		 argument);
- <
-+							*cino-k*
-+	kN    When in unclosed parentheses which follow "if", "for" or
-+	      "while" and N is non-zero, overrides the behaviour defined by
-+	      "(N": causes the indent to be N characters relative to the outer
-+	      context (i.e. the line where "if", "for" or "while" is).  Has
-+	      no effect on deeper levels of nesting.  Affects flags like "wN"
-+	      only for the "if", "for" and "while" conditions.  If 0, defaults
-+	      to behaviour defined by the "(N" flag.  (default: 0).
-+
-+		cino=(0			   cino=(0,ks >
-+		  if (condition1	    if (condition1
-+		      && condition2)		    && condition2)
-+		      action();			action();
-+		  function(argument1	    function(argument1
-+			   && argument2);	     && argument2);
-+<
-+							*cino-m*
- 	mN    When N is non-zero, line up a line starting with a closing
- 	      parentheses with the first character of the line with the
- 	      matching opening parentheses.  (default 0).
-@@ -424,6 +490,7 @@
- 		     )			    )
- 		      foo;			foo;
- <
-+							*cino-M*
- 	MN    When N is non-zero, line up a line starting with a closing
- 	      parentheses with the first character of the previous line.
- 	      (default 0).
-@@ -433,7 +500,7 @@
- 			 cond2			   cond2
- 		     )				   )
- <
--					*java-cinoptions* *java-indenting*
-+				*java-cinoptions* *java-indenting* *cino-j*
- 	jN    Indent java anonymous classes correctly.  The value 'N' is
- 	      currently unused but must be non-zero (e.g. 'j1').  'j1' will
- 	      indent for example the following code snippet correctly: >
-@@ -444,7 +511,7 @@
- 		    }
- 		});
- <
--				*javascript-cinoptions* *javascript-indenting*
-+			*javascript-cinoptions* *javascript-indenting* *cino-J*
- 	JN    Indent JavaScript object declarations correctly by not confusing
- 	      them with labels.  The value 'N' is currently unused but must be 
- 	      non-zero (e.g. 'J1'). >
-@@ -462,23 +529,28 @@
- 		    }
- 		}
- <
-+								*cino-)*
- 	)N    Vim searches for unclosed parentheses at most N lines away.
- 	      This limits the time needed to search for parentheses.  (default
- 	      20 lines).
- 
-+								*cino-star*
- 	*N    Vim searches for unclosed comments at most N lines away.  This
- 	      limits the time needed to search for the start of a comment.
-+	      If your /* */ comments stop indenting afer N lines this is the
-+	      value you will want to change.
- 	      (default 70 lines).
- 
-+								*cino-#*
- 	#N    When N is non-zero recognize shell/Perl comments, starting with
--	      '#'.  Default N is zero: don't recognizes '#' comments.  Note
-+	      '#'.  Default N is zero: don't recognize '#' comments.  Note
- 	      that lines starting with # will still be seen as preprocessor
- 	      lines.
- 
- 
- The defaults, spelled out in full, are:
--	cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
--			c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
-+	cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
-+			c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
- 
- Vim puts a line in column 1 if:
- - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
-diff -Naur vim73.orig/runtime/doc/indent.txt~ vim73/runtime/doc/indent.txt~
---- vim73.orig/runtime/doc/indent.txt~	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/runtime/doc/indent.txt~	2010-08-15 12:23:20.000000000 +0000
-@@ -0,0 +1,811 @@
-+*indent.txt*    For Vim version 7.3.  Last change: 2010 Jul 30
-+
-+
-+		  VIM REFERENCE MANUAL    by Bram Moolenaar
-+
-+
-+This file is about indenting C programs and other files.
-+
-+1. Indenting C style programs	|C-indenting|
-+2. Indenting by expression	|indent-expression|
-+
-+==============================================================================
-+1. Indenting C style programs				*C-indenting*
-+
-+The basics for C style indenting are explained in section |30.2| of the user
-+manual.
-+
-+Vim has options for automatically indenting C style program files. Many
-+programming languages including Java and C++ follow very closely the
-+formatting conventions established with C.  These options affect only the
-+indent and do not perform other formatting.  There are additional options that
-+affect other kinds of formatting as well as indenting, see |format-comments|,
-+|fo-table|, |gq| and |formatting| for the main ones.
-+
-+Note that this will not work when the |+smartindent| or |+cindent| features
-+have been disabled at compile time.
-+
-+There are in fact four main methods available for indentation, each one
-+overrides the previous if it is enabled, or non-empty for 'indentexpr':
-+'autoindent'	uses the indent from the previous line.
-+'smartindent'	is like 'autoindent' but also recognizes some C syntax to
-+		increase/reduce the indent where appropriate.
-+'cindent'	Works more cleverly than the other two and is configurable to
-+		different indenting styles.
-+'indentexpr'	The most flexible of all: Evaluates an expression to compute
-+		the indent of a line.  When non-empty this method overrides
-+		the other ones.  See |indent-expression|.
-+The rest of this section describes the 'cindent' option.
-+
-+Note that 'cindent' indenting does not work for every code scenario.  Vim
-+is not a C compiler: it does not recognize all syntax.  One requirement is
-+that toplevel functions have a '{' in the first column.  Otherwise they are
-+easily confused with declarations.
-+
-+These four options control C program indenting:
-+'cindent'	Enables Vim to perform C program indenting automatically.
-+'cinkeys'	Specifies which keys trigger reindenting in insert mode.
-+'cinoptions'	Sets your preferred indent style.
-+'cinwords'	Defines keywords that start an extra indent in the next line.
-+
-+If 'lisp' is not on and 'equalprg' is empty, the "=" operator indents using
-+Vim's built-in algorithm rather than calling an external program.
-+
-+See |autocommand| for how to set the 'cindent' option automatically for C code
-+files and reset it for others.
-+
-+					*cinkeys-format* *indentkeys-format*
-+The 'cinkeys' option is a string that controls Vim's indenting in response to
-+typing certain characters or commands in certain contexts.  Note that this not
-+only triggers C-indenting.  When 'indentexpr' is not empty 'indentkeys' is
-+used instead.  The format of 'cinkeys' and 'indentkeys' is equal.
-+
-+The default is "0{,0},0),:,0#,!^F,o,O,e" which specifies that indenting occurs
-+as follows:
-+
-+	"0{"	if you type '{' as the first character in a line
-+	"0}"	if you type '}' as the first character in a line
-+	"0)"	if you type ')' as the first character in a line
-+	":"	if you type ':' after a label or case statement
-+	"0#"	if you type '#' as the first character in a line
-+	"!^F"	if you type CTRL-F (which is not inserted)
-+	"o"	if you type a <CR> anywhere or use the "o" command (not in
-+		insert mode!)
-+	"O"	if you use the "O" command (not in insert mode!)
-+	"e"	if you type the second 'e' for an "else" at the start of a
-+		line
-+
-+Characters that can precede each key:				*i_CTRL-F*
-+!	When a '!' precedes the key, Vim will not insert the key but will
-+	instead reindent the current line.  This allows you to define a
-+	command key for reindenting the current line.  CTRL-F is the default
-+	key for this.  Be careful if you define CTRL-I for this because CTRL-I
-+	is the ASCII code for <Tab>.
-+*	When a '*' precedes the key, Vim will reindent the line before
-+	inserting the key.  If 'cinkeys' contains "*<Return>", Vim reindents
-+	the current line before opening a new line.
-+0	When a zero precedes the key (but appears after '!' or '*') Vim will
-+	reindent the line only if the key is the first character you type in
-+	the line.  When used before "=" Vim will only reindent the line if
-+	there is only white space before the word.
-+
-+When neither '!' nor '*' precedes the key, Vim reindents the line after you
-+type the key.  So ';' sets the indentation of a line which includes the ';'.
-+
-+Special key names:
-+<>	Angle brackets mean spelled-out names of keys.  For example: "<Up>",
-+	"<Ins>" (see |key-notation|).
-+^	Letters preceded by a caret (^) are control characters.  For example:
-+	"^F" is CTRL-F.
-+o	Reindent a line when you use the "o" command or when Vim opens a new
-+	line below the current one (e.g., when you type <Enter> in insert
-+	mode).
-+O	Reindent a line when you use the "O" command.
-+e	Reindent a line that starts with "else" when you type the second 'e'.
-+:	Reindent a line when a ':' is typed which is after a label or case
-+	statement.  Don't reindent for a ":" in "class::method" for C++.  To
-+	Reindent for any ":", use "<:>".
-+=word	Reindent when typing the last character of "word".  "word" may
-+	actually be part of another word.  Thus "=end" would cause reindenting
-+	when typing the "d" in "endif" or "endwhile".  But not when typing
-+	"bend".  Also reindent when completion produces a word that starts
-+	with "word".  "0=word" reindents when there is only white space before
-+	the word.
-+=~word	Like =word, but ignore case.
-+
-+If you really want to reindent when you type 'o', 'O', 'e', '0', '<', '>',
-+'*', ':' or '!', use "<o>", "<O>", "<e>", "<0>", "<<>", "<>>", "<*>", "<:>" or
-+"<!>", respectively, for those keys.
-+
-+For an emacs-style indent mode where lines aren't indented every time you
-+press <Enter> but only if you press <Tab>, I suggest:
-+	:set cinkeys=0{,0},:,0#,!<Tab>,!^F
-+You might also want to switch off 'autoindent' then.
-+
-+Note: If you change the current line's indentation manually, Vim ignores the
-+cindent settings for that line.  This prevents vim from reindenting after you
-+have changed the indent by typing <BS>, <Tab>, or <Space> in the indent or
-+used CTRL-T or CTRL-D.
-+
-+						*cinoptions-values*
-+The 'cinoptions' option sets how Vim performs indentation.  In the list below,
-+"N" represents a number of your choice (the number can be negative).  When
-+there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
-+"1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc.  You can use a
-+decimal point, too: "-0.5s" is minus half a 'shiftwidth'.  The examples below
-+assume a 'shiftwidth' of 4.
-+
-+	>N    Amount added for "normal" indent.  Used after a line that should
-+	      increase the indent (lines starting with "if", an opening brace,
-+	      etc.).  (default 'shiftwidth').
-+
-+		cino=		    cino=>2		cino=>2s >
-+		  if (cond)	      if (cond)		  if (cond)
-+		  {		      {			  {
-+		      foo;		foo;			  foo;
-+		  }		      }			  }
-+<
-+	eN    Add N to the prevailing indent inside a set of braces if the
-+	      opening brace at the End of the line (more precise: is not the
-+	      first character in a line).  This is useful if you want a
-+	      different indent when the '{' is at the start of the line from
-+	      when '{' is at the end of the line.  (default 0).
-+
-+		cino=		    cino=e2		cino=e-2 >
-+		  if (cond) {	      if (cond) {	  if (cond) {
-+		      foo;		    foo;	    foo;
-+		  }		      }			  }
-+		  else		      else		  else
-+		  {		      {			  {
-+		      bar;		  bar;		      bar;
-+		  }		      }			  }
-+<
-+	nN    Add N to the prevailing indent for a statement after an "if",
-+	      "while", etc., if it is NOT inside a set of braces.  This is
-+	      useful if you want a different indent when there is no '{'
-+	      before the statement from when there is a '{' before it.
-+	      (default 0).
-+
-+		cino=		    cino=n2		cino=n-2 >
-+		  if (cond)	      if (cond)		  if (cond)
-+		      foo;		    foo;	    foo;
-+		  else		      else		  else
-+		  {		      {			  {
-+		      bar;		  bar;		      bar;
-+		  }		      }			  }
-+<
-+	fN    Place the first opening brace of a function or other block in
-+	      column N.  This applies only for an opening brace that is not
-+	      inside other braces and is at the start of the line.  What comes
-+	      after the brace is put relative to this brace.  (default 0).
-+
-+		cino=		    cino=f.5s		cino=f1s >
-+		  func()	      func()		  func()
-+		  {			{		      {
-+		      int foo;		    int foo;		  int foo;
-+<
-+	{N    Place opening braces N characters from the prevailing indent.
-+	      This applies only for opening braces that are inside other
-+	      braces.  (default 0).
-+
-+		cino=		    cino={.5s		cino={1s >
-+		  if (cond)	      if (cond)		  if (cond)
-+		  {			{		      {
-+		      foo;		  foo;		      foo;
-+<
-+	}N    Place closing braces N characters from the matching opening
-+	      brace.  (default 0).
-+
-+		cino=		    cino={2,}-0.5s	cino=}2 >
-+		  if (cond)	      if (cond)		  if (cond)
-+		  {			{		  {
-+		      foo;		  foo;		      foo;
-+		  }		      }			    }
-+<
-+	^N    Add N to the prevailing indent inside a set of braces if the
-+	      opening brace is in column 0.  This can specify a different
-+	      indent for whole of a function (some may like to set it to a
-+	      negative number).  (default 0).
-+
-+		cino=		    cino=^-2		cino=^-s >
-+		  func()	      func()		  func()
-+		  {		      {			  {
-+		      if (cond)		if (cond)	  if (cond)
-+		      {			{		  {
-+			  a = b;	    a = b;	      a = b;
-+		      }			}		  }
-+		  }		      }			  }
-+<
-+	LN    Controls placement of jump labels. If N is negative, the label
-+	      will be placed at column 1. If N is non-negative, the indent of
-+	      the label will be the prevailing indent minus N.  (default -1).
-+
-+		cino=               cino=L2             cino=Ls >
-+		  func()              func()              func()
-+		  {                   {                   {
-+		      {                   {                   {
-+		          stmt;               stmt;               stmt;
-+		  LABEL:                    LABEL:            LABEL:
-+		      }                   }                   }
-+		  }                   }                   }
-+<
-+	:N    Place case labels N characters from the indent of the switch().
-+	      (default 'shiftwidth').
-+
-+		cino=		    cino=:0 >
-+		  switch (x)	      switch(x)
-+		  {		      {
-+		      case 1:	      case 1:
-+			  a = b;	  a = b;
-+		      default:	      default:
-+		  }		      }
-+<
-+	=N    Place statements occurring after a case label N characters from
-+	      the indent of the label.  (default 'shiftwidth').
-+
-+		cino=		    cino==10 >
-+		   case 11:		case 11:  a = a + 1;
-+		       a = a + 1;		  b = b + 1;
-+<
-+	lN    If N != 0 Vim will align with a case label instead of the
-+	      statement after it in the same line.
-+
-+		cino=			    cino=l1 >
-+		    switch (a) {	      switch (a) {
-+			case 1: {		  case 1: {
-+				    break;	      break;
-+				}		  }
-+<
-+	bN    If N != 0 Vim will align a final "break" with the case label,
-+	      so that case..break looks like a sort of block.  (default: 0).
-+
-+		cino=		    cino=b1 >
-+		  switch (x)	      switch(x)
-+		  {		      {
-+		      case 1:		  case 1:
-+			  a = b;	      a = b;
-+			  break;	  break;
-+
-+		      default:		  default:
-+			  a = 0;	      a = 0;
-+			  break;	  break;
-+		  }		      }
-+<
-+	gN    Place C++ scope declarations N characters from the indent of the
-+	      block they are in.  (default 'shiftwidth').  A scope declaration
-+	      can be "public:", "protected:" or "private:".
-+
-+		cino=		    cino=g0 >
-+		  {		      {
-+		      public:	      public:
-+			  a = b;	  a = b;
-+		      private:	      private:
-+		  }		      }
-+<
-+	hN    Place statements occurring after a C++ scope declaration N
-+	      characters from the indent of the label.  (default
-+	      'shiftwidth').
-+
-+		cino=		    cino=h10 >
-+		   public:		public:   a = a + 1;
-+		       a = a + 1;		  b = b + 1;
-+<
-+	pN    Parameter declarations for K&R-style function declarations will
-+	      be indented N characters from the margin.  (default
-+	      'shiftwidth').
-+
-+		cino=		    cino=p0		cino=p2s >
-+		  func(a, b)	      func(a, b)	  func(a, b)
-+		      int a;	      int a;			  int a;
-+		      char b;	      char b;			  char b;
-+<
-+	tN    Indent a function return type declaration N characters from the
-+	      margin.  (default 'shiftwidth').
-+
-+		cino=		    cino=t0		cino=t7 >
-+		      int	      int			 int
-+		  func()	      func()		  func()
-+<
-+	iN    Indent C++ base class declarations and constructor
-+	      initializations, if they start in a new line (otherwise they
-+	      are aligned at the right side of the ':').
-+	      (default 'shiftwidth').
-+
-+		cino=			  cino=i0 >
-+		  class MyClass :	    class MyClass :
-+		      public BaseClass      public BaseClass
-+		  {}			    {}
-+		  MyClass::MyClass() :	    MyClass::MyClass() :
-+		      BaseClass(3)	    BaseClass(3)
-+		  {}			    {}
-+<
-+	+N    Indent a continuation line (a line that spills onto the next) N
-+	      additional characters.  (default 'shiftwidth').
-+
-+		cino=			  cino=+10 >
-+		  a = b + 9 *		    a = b + 9 *
-+		      c;			      c;
-+<
-+	cN    Indent comment lines after the comment opener, when there is no
-+	      other text with which to align, N characters from the comment
-+	      opener.  (default 3).  See also |format-comments|.
-+
-+		cino=			  cino=c5 >
-+		  /*			    /*
-+		     text.			 text.
-+		   */			     */
-+<
-+	CN    When N is non-zero, indent comment lines by the amount specified
-+	      with the c flag above even if there is other text behind the
-+	      comment opener.  (default 0).
-+
-+		cino=c0			  cino=c0,C1 >
-+		  /********		    /********
-+		    text.		    text.
-+		  ********/		    ********/
-+<	      (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
-+
-+	/N    Indent comment lines N characters extra.  (default 0).
-+		cino=			  cino=/4 >
-+		  a = b;		    a = b;
-+		  /* comment */			/* comment */
-+		  c = d;		    c = d;
-+<
-+	(N    When in unclosed parentheses, indent N characters from the line
-+	      with the unclosed parentheses.  Add a 'shiftwidth' for every
-+	      unclosed parentheses.  When N is 0 or the unclosed parentheses
-+	      is the first non-white character in its line, line up with the
-+	      next non-white character after the unclosed parentheses.
-+	      (default 'shiftwidth' * 2).
-+
-+		cino=			  cino=(0 >
-+		  if (c1 && (c2 ||	    if (c1 && (c2 ||
-+			      c3))		       c3))
-+		      foo;			foo;
-+		  if (c1 &&		    if (c1 &&
-+			  (c2 || c3))		(c2 || c3))
-+		     {			       {
-+<
-+	uN    Same as (N, but for one level deeper.  (default 'shiftwidth').
-+
-+		cino=			  cino=u2 >
-+		  if (c123456789	    if (c123456789
-+			  && (c22345		    && (c22345
-+			      || c3))		      || c3))
-+<
-+	UN    When N is non-zero, do not ignore the indenting specified by
-+	      ( or u in case that the unclosed parentheses is the first
-+	      non-white character in its line.  (default 0).
-+
-+		cino= or cino=(s	  cino=(s,U1 >
-+		  c = c1 &&		    c = c1 &&
-+		      (				(
-+		       c2 ||			    c2 ||
-+		       c3			    c3
-+		      ) && c4;			) && c4;
-+<
-+	wN    When in unclosed parentheses and N is non-zero and either
-+	      using "(0" or "u0", respectively, or using "U0" and the unclosed
-+	      parentheses is the first non-white character in its line, line
-+	      up with the character immediately after the unclosed parentheses
-+	      rather than the first non-white character.  (default 0).
-+
-+		cino=(0			  cino=(0,w1 >
-+		  if (   c1		    if (   c1
-+			 && (   c2		&& (   c2
-+				|| c3))		    || c3))
-+		      foo;			foo;
-+<
-+	WN    When in unclosed parentheses and N is non-zero and either
-+	      using "(0" or "u0", respectively and the unclosed parentheses is
-+	      the last non-white character in its line and it is not the
-+	      closing parentheses, indent the following line N characters
-+	      relative to the outer context (i.e. start of the line or the
-+	      next unclosed parentheses).  (default: 0).
-+
-+		cino=(0			   cino=(0,W4 >
-+		  a_long_line(		    a_long_line(
-+			      argument,		argument,
-+			      argument);	argument);
-+		  a_short_line(argument,    a_short_line(argument,
-+			       argument);		 argument);
-+<
-+	mN    When N is non-zero, line up a line starting with a closing
-+	      parentheses with the first character of the line with the
-+	      matching opening parentheses.  (default 0).
-+
-+		cino=(s			  cino=(s,m1 >
-+		  c = c1 && (		    c = c1 && (
-+		      c2 ||			c2 ||
-+		      c3			c3
-+		      ) && c4;		    ) && c4;
-+		  if (			    if (
-+		      c1 && c2			c1 && c2
-+		     )			    )
-+		      foo;			foo;
-+<
-+	MN    When N is non-zero, line up a line starting with a closing
-+	      parentheses with the first character of the previous line.
-+	      (default 0).
-+
-+		cino=			  cino=M1 >
-+		  if (cond1 &&		    if (cond1 &&
-+			 cond2			   cond2
-+		     )				   )
-+<
-+					*java-cinoptions* *java-indenting*
-+	jN    Indent java anonymous classes correctly.  The value 'N' is
-+	      currently unused but must be non-zero (e.g. 'j1').  'j1' will
-+	      indent for example the following code snippet correctly: >
-+
-+		object.add(new ChangeListener() {
-+		    public void stateChanged(ChangeEvent e) {
-+			do_something();
-+		    }
-+		});
-+<
-+				*javascript-cinoptions* *javascript-indenting*
-+	JN    Indent JavaScript object declarations correctly by not confusing
-+	      them with labels.  The value 'N' is currently unused but must be 
-+	      non-zero (e.g. 'J1'). >
-+
-+		var bar = {
-+		    foo: {
-+			that: this,
-+			some: ok,
-+		    },
-+		    "bar":{ 
-+			a : 2,
-+			b: "123abc",
-+			x: 4,
-+			"y": 5
-+		    }
-+		}
-+<
-+	)N    Vim searches for unclosed parentheses at most N lines away.
-+	      This limits the time needed to search for parentheses.  (default
-+	      20 lines).
-+
-+	*N    Vim searches for unclosed comments at most N lines away.  This
-+	      limits the time needed to search for the start of a comment.
-+	      (default 70 lines).
-+
-+	#N    When N is non-zero recognize shell/Perl comments, starting with
-+	      '#'.  Default N is zero: don't recognizes '#' comments.  Note
-+	      that lines starting with # will still be seen as preprocessor
-+	      lines.
-+
-+
-+The defaults, spelled out in full, are:
-+	cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
-+			c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
-+
-+Vim puts a line in column 1 if:
-+- It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
-+- It starts with a label (a keyword followed by ':', other than "case" and
-+  "default") and 'cinoptions' does not contain an 'L' entry with a positive
-+  value.
-+- Any combination of indentations causes the line to have less than 0
-+  indentation.
-+
-+==============================================================================
-+2. Indenting by expression				*indent-expression*
-+
-+The basics for using flexible indenting are explained in section |30.3| of the
-+user manual.
-+
-+If you want to write your own indent file, it must set the 'indentexpr'
-+option.  Setting the 'indentkeys' option is often useful.  See the
-+$VIMRUNTIME/indent directory for examples.
-+
-+
-+REMARKS ABOUT SPECIFIC INDENT FILES ~
-+
-+
-+FORTRAN							*ft-fortran-indent*
-+
-+Block if, select case, and where constructs are indented.  Comments, labelled
-+statements and continuation lines are indented if the Fortran is in free
-+source form, whereas they are not indented if the Fortran is in fixed source
-+form because of the left margin requirements.  Hence manual indent corrections
-+will be necessary for labelled statements and continuation lines when fixed
-+source form is being used.  For further discussion of the method used for the
-+detection of source format see |ft-fortran-syntax|.
-+
-+Do loops ~
-+All do loops are left unindented by default.  Do loops can be unstructured in
-+Fortran with (possibly multiple) loops ending on a labelled executable
-+statement of almost arbitrary type.  Correct indentation requires
-+compiler-quality parsing.  Old code with do loops ending on labelled statements
-+of arbitrary type can be indented with elaborate programs such as Tidy
-+(http://www.unb.ca/chem/ajit/f_tidy.htm).  Structured do/continue loops are
-+also left unindented because continue statements are also used for purposes
-+other than ending a do loop.  Programs such as Tidy can convert structured
-+do/continue loops to the do/enddo form.  Do loops of the do/enddo variety can
-+be indented.  If you use only structured loops of the do/enddo form, you should
-+declare this by setting the fortran_do_enddo variable in your .vimrc as
-+follows >
-+
-+   let fortran_do_enddo=1
-+
-+in which case do loops will be indented.  If all your loops are of do/enddo
-+type only in, say, .f90 files, then you should set a buffer flag with an
-+autocommand such as >
-+
-+  au! BufRead,BufNewFile *.f90 let b:fortran_do_enddo=1
-+
-+to get do loops indented in .f90 files and left alone in Fortran files with
-+other extensions such as .for.
-+
-+
-+PHP				*ft-php-indent* *php-indent* *php-indenting*
-+
-+NOTE:	PHP files will be indented correctly only if PHP |syntax| is active.
-+
-+If you are editing a file in Unix 'fileformat' and '\r' characters are present
-+before new lines, indentation won't proceed correctly ; you have to remove
-+those useless characters first with a command like: >
-+
-+    :%s /\r$//g
-+
-+Or, you can simply |:let| the variable PHP_removeCRwhenUnix to 1 and the
-+script will silently remove them when Vim loads a PHP file (at each|BufRead|).
-+
-+OPTIONS: ~
-+
-+PHP indenting can be altered in several ways by modifying the values of some
-+variables:
-+
-+								*php-comment*
-+To not enable auto-formating of comments by default (if you want to use your
-+own 'formatoptions'): >
-+    :let g:PHP_autoformatcomment = 0
-+
-+Else, 't' will be removed from the 'formatoptions' string and "qrowcb" will be
-+added, see|fo-table|for more information.
-+-------------
-+
-+To add an extra indent to every PHP lines with N being the number of
-+'shiftwidth' to add: >
-+    :let g:PHP_default_indenting = N
-+
-+For example, with N = 1, this will give:
-+>
-+    <?php
-+	if (!isset($History_lst_sel))
-+	    if (!isset($History_lst_sel))
-+		if (!isset($History_lst_sel)) {
-+		    $History_lst_sel=0;
-+		} else
-+		    $foo="bar";
-+
-+	$command_hist = TRUE;
-+    ?>
-+(Notice the extra indent between the PHP container markers and the code)
-+-------------
-+
-+To indent PHP tags as the surrounding code: >
-+    :let g:PHP_outdentphpescape = 0
-+-------------
-+
-+To automatically remove '\r' characters when the 'fileformat' is set to Unix: >
-+    :let g:PHP_removeCRwhenUnix = 1
-+-------------
-+
-+To indent braces at the same level than the code they contain: >
-+    :let g:PHP_BracesAtCodeLevel = 1
-+    
-+This will give the following result: >
-+    if ($foo)
-+	{
-+	foo();
-+	}
-+Instead of: >
-+    if ($foo)
-+    {
-+	foo();
-+    }
-+
-+NOTE:	Indenting will be a bit slower if this option is used because some
-+	optimizations won't be available.
-+-------------
-+
-+To indent 'case:' and 'default:' statements in switch() blocks: >
-+    :let g:PHP_vintage_case_default_indent = 1
-+
-+(Since in PHP braces are not required inside 'case/default' blocks, by default they are indented at the same level than the 'switch()' to avoid
-+unnecessary indentation)
-+
-+
-+PYTHON							*ft-python-indent*
-+
-+The amount of indent can be set for the following situations.  The examples
-+given are the defaults.  Note that the variables are set to an expression, so
-+that you can change the value of 'shiftwidth' later.
-+
-+Indent after an open paren: >
-+	let g:pyindent_open_paren = '&sw * 2'
-+Indent after a nested paren: >
-+	let g:pyindent_nested_paren = '&sw'
-+Indent for a continuation line: >
-+	let g:pyindent_continue = '&sw * 2'
-+
-+
-+SHELL							*ft-sh-indent*
-+
-+The amount of indent applied under various circumstances in a shell file can
-+be configured by setting the following keys in the |Dictionary|
-+b:sh_indent_defaults to a specific amount or to a |Funcref| that references a
-+function that will return the amount desired:
-+
-+b:sh_indent_options['default']	Default amount of indent.
-+
-+b:sh_indent_options['continuation-line']
-+				Amount of indent to add to a continued line.
-+
-+b:sh_indent_options['case-labels']
-+				Amount of indent to add for case labels.
-+				(not actually implemented)
-+
-+b:sh_indent_options['case-statements']
-+				Amount of indent to add for case statements.
-+
-+b:sh_indent_options['case-breaks']
-+				Amount of indent to add (or more likely
-+				remove) for case breaks.
-+
-+VERILOG							*ft-verilog-indent*
-+
-+General block statements such as if, for, case, always, initial, function,
-+specify and begin, etc., are indented.  The module block statements (first
-+level blocks) are not indented by default.  you can turn on the indent with
-+setting a variable in the .vimrc as follows: >
-+
-+  let b:verilog_indent_modules = 1
-+
-+then the module blocks will be indented.  To stop this, remove the variable: >
-+
-+  :unlet b:verilog_indent_modules
-+
-+To set the variable only for Verilog file.  The following statements can be
-+used: >
-+
-+  au BufReadPost * if exists("b:current_syntax")
-+  au BufReadPost *   if b:current_syntax == "verilog"
-+  au BufReadPost *     let b:verilog_indent_modules = 1
-+  au BufReadPost *   endif
-+  au BufReadPost * endif
-+
-+Furthermore, setting the variable b:verilog_indent_width to change the
-+indenting width (default is 'shiftwidth'): >
-+
-+  let b:verilog_indent_width = 4
-+  let b:verilog_indent_width = &sw * 2
-+
-+In addition, you can turn the verbose mode for debug issue: >
-+
-+  let b:verilog_indent_verbose = 1
-+
-+Make sure to do ":set cmdheight=2" first to allow the display of the message.
-+
-+
-+VHDL							*ft-vhdl-indent*
-+
-+Alignment of generic/port mapping statements are performed by default. This
-+causes the following alignment example: >
-+
-+  ENTITY sync IS
-+  PORT (
-+         clk        : IN  STD_LOGIC;
-+         reset_n    : IN  STD_LOGIC;
-+         data_input : IN  STD_LOGIC;
-+         data_out   : OUT STD_LOGIC
-+       );
-+  END ENTITY sync;
-+
-+To turn this off, add >
-+
-+  let g:vhdl_indent_genportmap = 0
-+
-+to the .vimrc file, which causes the previous alignment example to change: >
-+
-+  ENTITY sync IS
-+  PORT (
-+    clk        : IN  STD_LOGIC;
-+    reset_n    : IN  STD_LOGIC;
-+    data_input : IN  STD_LOGIC;
-+    data_out   : OUT STD_LOGIC
-+  );
-+  END ENTITY sync;
-+
-+----------------------------------------
-+
-+Alignment of right-hand side assignment "<=" statements are performed by
-+default. This causes the following alignment example: >
-+
-+  sig_out <= (bus_a(1) AND
-+             (sig_b OR sig_c)) OR
-+             (bus_a(0) AND sig_d);
-+
-+To turn this off, add >
-+
-+  let g:vhdl_indent_rhsassign = 0
-+
-+to the .vimrc file, which causes the previous alignment example to change: >
-+
-+  sig_out <= (bus_a(1) AND
-+    (sig_b OR sig_c)) OR
-+    (bus_a(0) AND sig_d);
-+
-+----------------------------------------
-+
-+Full-line comments (lines that begin with "--") are indented to be aligned with
-+the very previous line's comment, PROVIDED that a whitespace follows after
-+"--".
-+
-+For example: >
-+
-+  sig_a <= sig_b; -- start of a comment
-+                  -- continuation of the comment
-+                  -- more of the same comment
-+
-+While in Insert mode, after typing "-- " (note the space " "), hitting CTRL-F
-+will align the current "-- " with the previous line's "--".
-+
-+If the very previous line does not contain "--", THEN the full-line comment
-+will be aligned with the start of the next non-blank line that is NOT a
-+full-line comment.
-+
-+Indenting the following code: >
-+
-+  sig_c <= sig_d; -- comment 0
-+         -- comment 1
-+               -- comment 2
-+    --debug_code:
-+    --PROCESS(debug_in)
-+         --BEGIN
-+            --  FOR i IN 15 DOWNTO 0 LOOP
-+             --    debug_out(8*i+7 DOWNTO 8*i) <= debug_in(15-i);
-+            --  END LOOP;
-+     --END PROCESS debug_code;
-+
-+      -- comment 3
-+  sig_e <= sig_f; -- comment 4
-+           -- comment 5
-+
-+results in: >
-+
-+  sig_c <= sig_d; -- comment 0
-+                  -- comment 1
-+                  -- comment 2
-+  --debug_code:
-+  --PROCESS(debug_in)
-+  --BEGIN
-+  --  FOR i IN 15 DOWNTO 0 LOOP
-+  --    debug_out(8*i+7 DOWNTO 8*i) <= debug_in(15-i);
-+  --  END LOOP;
-+  --END PROCESS debug_code;
-+
-+  -- comment 3
-+  sig_e <= sig_f; -- comment 4
-+                  -- comment 5
-+
-+Notice that "--debug_code:" does not align with "-- comment 2"
-+because there is no whitespace that follows after "--" in "--debug_code:".
-+
-+Given the dynamic nature of indenting comments, indenting should be done TWICE.
-+On the first pass, code will be indented. On the second pass, full-line
-+comments will be indented according to the correctly indented code.
-+
-+
-+VIM							*ft-vim-indent*
-+
-+For indenting Vim scripts there is one variable that specifies the amount of
-+indent for a continuation line, a line that starts with a backslash: >
-+
-+	:let g:vim_indent_cont = &sw * 3
-+
-+Three times shiftwidth is the default value.
-+
-+
-+ vim:tw=78:ts=8:ft=help:norl:
-diff -Naur vim73.orig/runtime/doc/index.txt vim73/runtime/doc/index.txt
---- vim73.orig/runtime/doc/index.txt	2010-08-15 12:23:20.000000000 +0000
-+++ vim73/runtime/doc/index.txt	2012-11-01 20:35:47.000000000 +0000
-@@ -719,8 +719,11 @@
- |gH|		gH		   start Select line mode
- |gI|		gI		2  like "I", but always start in column 1
- |gJ|		gJ		2  join lines without inserting space
-+|gN|		gN	      1,2  find the previous match with the last used
-+				   search pattern and Visually select it
- |gP|		["x]gP		2  put the text [from register x] before the
- 				   cursor N times, leave the cursor after it
-+|gQ|		gQ		    switch to "Ex" mode with Vim editing
- |gR|		gR		2  enter Virtual Replace mode
- |gU|		gU{motion}	2  make Nmove text uppercase
- |gV|		gV		   don't reselect the previous Visual area
-@@ -750,6 +753,8 @@
- 				   lines down
- |gk|		gk		1  like "k", but when 'wrap' on go N screen
- 				   lines up
-+|gn|		gn	      1,2  find the next match with the last used
-+				   search pattern and Visually select it
- |gm|		gm		1  go to character at middle of the screenline
- |go|		go		1  cursor to byte N in the buffer
- |gp|		["x]gp		2  put the text [from register x] after the
-diff -Naur vim73.orig/runtime/doc/map.txt vim73/runtime/doc/map.txt
---- vim73.orig/runtime/doc/map.txt	2010-08-15 12:23:21.000000000 +0000
-+++ vim73/runtime/doc/map.txt	2012-11-01 20:35:47.000000000 +0000
-@@ -226,7 +226,7 @@
- 
- For abbreviations |v:char| is set to the character that was typed to trigger
- the abbreviation.  You can use this to decide how to expand the {lhs}.  You
--can't change v:char and you should not insert it.
-+you should not either insert or change the v:char.
- 
- Be very careful about side effects!  The expression is evaluated while
- obtaining characters, you may very well make the command dysfunctional.
-@@ -1202,23 +1202,32 @@
- 
- 	-complete=augroup	autocmd groups
- 	-complete=buffer	buffer names
-+	-complete=behave	:behave suboptions
-+	-complete=color		color schemes
- 	-complete=command	Ex command (and arguments)
-+	-complete=compiler	compilers
-+	-complete=cscope	|:cscope| suboptions
- 	-complete=dir		directory names
- 	-complete=environment	environment variable names
- 	-complete=event		autocommand events
- 	-complete=expression	Vim expression
- 	-complete=file		file and directory names
-+	-complete=file_in_path	file and directory names in |'path'|
- 	-complete=filetype	filetype names |'filetype'|
- 	-complete=function	function name
- 	-complete=help		help subjects
- 	-complete=highlight	highlight groups
-+	-complete=history	:history suboptions
-+	-complete=locale	locale names (as output of locale -a)
- 	-complete=mapping	mapping name
- 	-complete=menu		menus
- 	-complete=option	options
- 	-complete=shellcmd	Shell command
-+	-complete=sign		|:sign| suboptions
- 	-complete=syntax	syntax file names |'syntax'|
- 	-complete=tag		tags
- 	-complete=tag_listfiles	tags, file names are shown when CTRL-D is hit
-+	-complete=user		user names
- 	-complete=var		user variables
- 	-complete=custom,{func} custom completion, defined via {func}
- 	-complete=customlist,{func} custom completion, defined via {func}
-diff -Naur vim73.orig/runtime/doc/motion.txt vim73/runtime/doc/motion.txt
---- vim73.orig/runtime/doc/motion.txt	2010-08-15 12:23:21.000000000 +0000
-+++ vim73/runtime/doc/motion.txt	2012-11-01 20:35:42.000000000 +0000
-@@ -269,11 +269,11 @@
- 			{char} can be entered like with the |f| command.
- 
- 							*;*
--;			Repeat latest f, t, F or T [count] times.
-+;			Repeat latest f, t, F or T [count] times. See |cpo-;|
- 
- 							*,*
- ,			Repeat latest f, t, F or T in opposite direction
--			[count] times.
-+			[count] times. See also |cpo-;|
- 
- ==============================================================================
- 3. Up-down motions					*up-down-motions*
-diff -Naur vim73.orig/runtime/doc/netbeans.txt vim73/runtime/doc/netbeans.txt
---- vim73.orig/runtime/doc/netbeans.txt	2010-08-15 12:23:21.000000000 +0000
-+++ vim73/runtime/doc/netbeans.txt	2012-11-01 20:35:43.000000000 +0000
-@@ -1,4 +1,4 @@
--*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
-+*netbeans.txt*  For Vim version 7.3.  Last change: 2011 Oct 20
- 
- 
- 		  VIM REFERENCE MANUAL    by Gordon Prieur et al.
-@@ -118,7 +118,8 @@
- uncommenting a line with "--disable-netbeans" in the Makefile.
- 
- Currently the NetBeans interface is supported by Vim running in a terminal and
--by GVim when it is run with one of the following GUIs: GTK, GNOME, and Motif.
-+by GVim when it is run with one of the following GUIs: GTK, GNOME, Windows,
-+Athena and Motif.
- 
- If Motif support is required the user must supply XPM libraries.  See
- |workshop-xpm| for details on obtaining the latest version of XPM.
-@@ -262,6 +263,12 @@
- plain UTF-8 text this protocol could also be used with any other communication
- mechanism.
- 
-+Netbeans messages are processed when Vim is idle, waiting for user input.
-+When Vim is run in non-interactive mode, for example when running an automated
-+test case that sources a Vim script, the idle loop may not be called often
-+enough. In that case, insert |sleep| commands in the Vim script. The |sleep|
-+command does invoke Netbeans messages processing.
-+
- 6.1 Kinds of messages		|nb-messages|
- 6.2 Terms			|nb-terms|
- 6.3 Commands			|nb-commands|
-@@ -819,7 +826,7 @@
- ==============================================================================
- 7. NetBeans commands					*netbeans-commands*
- 
--							*:nbstart* *E511*
-+							*:nbstart* *E511* *E838*
- :nbs[tart] {connection}	Start a new Netbeans session with {connection} as the
- 			socket connection parameters.  The format of
- 			{connection} is described in |netbeans-parameters|.
-@@ -832,11 +839,16 @@
- 			signs.
- 
- 							*:nbkey*
--:nb[key] {key}		Pass the {key} to the Vim Controller for processing
--
--When a hot-key has been installed with the specialKeys command, this command
--can be used to generate a hotkey messages to the Vim Controller. The events
--newDotAndMark, keyCommand and keyAtPos are generated (in this order).
-+:nb[key] {key}		Pass the {key} to the Vim Controller for processing.
-+			When a hot-key has been installed with the specialKeys
-+			command, this command can be used to generate a hotkey
-+			message to the Vim Controller.
-+			This command can also be used to pass any text to the
-+			Vim  Controller. It is used by Pyclewn, for example,
-+			to build the complete set of gdb commands as Vim user
-+			commands.
-+			The events newDotAndMark, keyCommand and keyAtPos are
-+			generated (in this order).
- 
- 
- ==============================================================================
-diff -Naur vim73.orig/runtime/doc/options.txt vim73/runtime/doc/options.txt
---- vim73.orig/runtime/doc/options.txt	2010-08-15 12:23:21.000000000 +0000
-+++ vim73/runtime/doc/options.txt	2012-11-01 20:35:48.000000000 +0000
-@@ -150,6 +150,18 @@
- (the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
- The advantage over a mapping is that it works in all situations.
- 
-+You can define any key codes, e.g.: >
-+	:set t_xy=^[foo;
-+There is no warning for using a name that isn't recognized.  You can map these
-+codes as you like: >
-+	:map <t_xy> something
-+<								*E846*
-+When a key code is not set, it's like it does not exist.  Trying to get its
-+value will result in an error: >
-+	:set t_kb=
-+	:set t_kb
-+	E846: Key code not set: t_kb
-+
- The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
- security reasons.
- 
-@@ -1425,6 +1437,7 @@
- 	This option is a list of comma separated names.
- 	These names are recognized:
- 
-+						*clipboard-unnamed*
- 	unnamed		When included, Vim will use the clipboard register '*'
- 			for all yank, delete, change and put operations which
- 			would normally go to the unnamed register.  When a
-@@ -1434,6 +1447,17 @@
- 			explicitly accessed using the "* notation.  Also see
- 			|gui-clipboard|.
- 
-+						*clipboard-unnamedplus*
-+	unnamedplus	A variant of "unnamed" flag which uses the clipboard
-+			register '+' (|quoteplus|) instead of register '*' for
-+			all operations except yank.  Yank shall copy the text
-+			into register '+' and also into '*' when "unnamed" is
-+			included.
-+			Only available with the |+X11| feature.
-+			Availability can be checked with: >
-+				if has('unnamedplus')
-+<
-+						*clipboard-autoselect*
- 	autoselect	Works like the 'a' flag in 'guioptions': If present,
- 			then whenever Visual mode is started, or the Visual
- 			area extended, Vim tries to become the owner of the
-@@ -1445,9 +1469,16 @@
- 			"autoselect" flag is used.
- 			Also applies to the modeless selection.
- 
-+						*clipboard-autoselectplus*
-+	autoselectplus  Like "autoselect" but using the + register instead of
-+			the * register.  Compare to the 'P' flag in
-+			'guioptions'.
-+
-+						*clipboard-autoselectml*
- 	autoselectml	Like "autoselect", but for the modeless selection
- 			only.  Compare to the 'A' flag in 'guioptions'.
- 
-+						*clipboard-html*
- 	html		When the clipboard contains HTML, use this when
- 			pasting.  When putting text on the clipboard, mark it
- 			as HTML.  This works to copy rendered HTML from
-@@ -1458,6 +1489,7 @@
- 			Only supported for GTK version 2 and later.
- 			Only available with the |+multi_byte| feature.
- 
-+						*clipboard-exclude*
- 	exclude:{pattern}
- 			Defines a pattern that is matched against the name of
- 			the terminal 'term'.  If there is a match, no
-@@ -2069,6 +2101,12 @@
- 								*cpo->*
- 		>	When appending to a register, put a line break before
- 			the appended text.
-+								*cpo-;*
-+		;	When using |,| or |;| to repeat the last |t| search
-+			and the cursor is right in front of the searched
-+			character, the cursor won't move. When not included,
-+			the cursor would skip over it and jump to the
-+			following occurence.
- 
- 	POSIX flags.  These are not included in the Vi default value, except
- 	when $VIM_POSIX was set on startup. |posix|
-@@ -2161,6 +2199,16 @@
- 	Specifies whether to use quickfix window to show cscope results.
- 	See |cscopequickfix|.
- 
-+						*'cscoperelative'* *'csre'*
-+'cscoperelative' 'csre' boolean (default off)
-+			global
-+			{not available when compiled without the |+cscope|
-+			feature}
-+			{not in Vi}
-+	In the absence of a prefix (-P) for cscope. setting this option enables
-+	to use the basename of cscope.out path as the prefix.
-+	See |cscoperelative|.
-+
- 				*'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
- 'cscopetag' 'cst'	boolean (default off)
- 			global
-@@ -3510,6 +3558,9 @@
- 		windowing system's global selection unless explicitly told to
- 		by a yank or delete operation for the "* register.
- 		The same applies to the modeless selection.
-+								*'go-P'*
-+	  'P'	Like autoselect but using the "+ register instead of the "*
-+	  	register.
- 								*'go-A'*
- 	  'A'	Autoselect for the modeless selection.  Like 'a', but only
- 		applies to the modeless selection.
-@@ -5843,16 +5894,21 @@
- 	security reasons.
- 
- 						*'shellcmdflag'* *'shcf'*
--'shellcmdflag' 'shcf'	string	(default: "-c", MS-DOS and Win32, when 'shell'
--					does not contain "sh" somewhere: "/c")
-+'shellcmdflag' 'shcf'	string	(default: "-c";
-+				 Win32, when 'shell' is cmd.exe: "/s /c";
-+				 MS-DOS and Win32, when 'shell' neither is
-+				 cmd.exe nor contains "sh" somewhere: "/c")
- 			global
- 			{not in Vi}
- 	Flag passed to the shell to execute "!" and ":!" commands; e.g.,
- 	"bash.exe -c ls" or "command.com /c dir".  For the MS-DOS-like
- 	systems, the default is set according to the value of 'shell', to
- 	reduce the need to set this option by the user.  It's not used for
--	OS/2 (EMX figures this out itself).  See |option-backslash| about
--	including spaces and backslashes.  See |dos-shell|.
-+	OS/2 (EMX figures this out itself).
-+	On Unix it can have more than one flag.  Each white space separated
-+	part is passed as an argument to the shell command.
-+	See |option-backslash| about including spaces and backslashes.
-+	Also see |dos-shell| for MS-DOS and MS-Windows.
- 	This option cannot be set from a |modeline| or in the |sandbox|, for
- 	security reasons.
- 
-@@ -5873,9 +5929,10 @@
- 	For Unix the default it "| tee".  The stdout of the compiler is saved
- 	in a file and echoed to the screen.  If the 'shell' option is "csh" or
- 	"tcsh" after initializations, the default becomes "|& tee".  If the
--	'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
--	"2>&1| tee".  This means that stderr is also included.  Before using
--	the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
-+	'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh" or "bash" the
-+	default becomes "2>&1| tee".  This means that stderr is also included.
-+	Before using the 'shell' option a path is removed, thus "/bin/sh" uses
-+	"sh".
- 	The initialization of this option is done after reading the ".vimrc"
- 	and the other initializations, so that when the 'shell' option is set
- 	there, the 'shellpipe' option changes automatically, unless it was
-@@ -5980,6 +6037,7 @@
- 
- 						*'shellxquote'* *'sxq'*
- 'shellxquote' 'sxq'	string	(default: "";
-+					for Win32, when 'shell' is cmd.exe: "("
- 					for Win32, when 'shell' contains "sh"
- 					somewhere: "\""
- 					for Unix, when using system(): "\"")
-@@ -5989,14 +6047,28 @@
- 	the "!" and ":!" commands.  Includes the redirection.  See
- 	'shellquote' to exclude the redirection.  It's probably not useful
- 	to set both options.
--	This is an empty string by default.  Known to be useful for
--	third-party shells when using the Win32 version, such as the MKS Korn
--	Shell or bash, where it should be "\"".  The default is adjusted
--	according the value of 'shell', to reduce the need to set this option
--	by the user.  See |dos-shell|.
-+	When the value is '(' then ')' is appended. When the value is '"('
-+	then ')"' is appended.
-+	When the value is '(' then also see 'shellxescape'.
-+	This is an empty string by default on most systems, but is known to be
-+	useful for on Win32 version, either for cmd.exe which automatically
-+	strips off the first and last quote on a command, or 3rd-party shells
-+	such as the MKS Korn Shell or bash, where it should be "\"".  The
-+	default is adjusted according the value of 'shell', to reduce the need
-+	to set this option by the user.  See |dos-shell|.
- 	This option cannot be set from a |modeline| or in the |sandbox|, for
- 	security reasons.
- 
-+						*'shellxescape'* *'sxe'*
-+'shellxescape' 'sxe'	string	(default: "";
-+				 for MS-DOS and MS-Windows: "\"&|<>()@^")
-+			global
-+			{not in Vi}
-+	When 'shellxquote' is set to "(" then the characters listed in this
-+	option will be escaped with a '^' character.  This makes it possible
-+	to execute most external commands with cmd.exe.
-+
-+
- 			*'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
- 'shiftround' 'sr'	boolean	(default off)
- 			global
-@@ -7311,6 +7383,12 @@
- 	   jsbterm	JSB term mouse handling.
- 							*pterm-mouse*
- 	   pterm	QNX pterm mouse handling.
-+							*urxvt-mouse*
-+	   urxvt	Mouse handling for the urxvt (rxvt-unicode) terminal.
-+							*sgr-mouse*
-+	   sgr		Mouse handling for the terminal that emits SGR-styled
-+			mouse reporting. Works with xterm version 277 or
-+			later.
- 
- 	The mouse handling must be enabled at compile time |+mouse_xterm|
- 	|+mouse_dec| |+mouse_netterm|.
-@@ -7323,6 +7401,7 @@
- 	or "xterm2" already.  The main use of this option is to set it to
- 	"xterm", when the terminal name doesn't start with "xterm", but it can
- 	handle xterm mouse codes.
-+	The "sgr" value will be set if the xterm version is 277 or later.
- 	The "xterm2" value will be set if the xterm version is reported to be
- 	95 or higher.  This only works when compiled with the |+termresponse|
- 	feature and if |t_RV| is set to the escape sequence to request the
-@@ -7530,8 +7609,9 @@
- 	!	When included, save and restore global variables that start
- 		with an uppercase letter, and don't contain a lowercase
- 		letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
--		and "_K_L_M" are not.  Only String and Number types are
--		stored.
-+		and "_K_L_M" are not.  Nested List and Dict items may not be
-+		read back correctly, you end up with a string representation
-+		instead.
- 	"	Maximum number of lines saved for each register.  Old name of
- 		the '<' item, with the disadvantage that you need to put a
- 		backslash before the ", otherwise it will be recognized as the
-@@ -7747,6 +7827,17 @@
- 	a pattern from the list.  This avoids problems when a future version
- 	uses another default.
- 
-+
-+			*'wildignorecase* *'wic'* *'nowildignorecase* *'nowic'*
-+'wildignorecase' 'wic'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	When set case is ignored when completing file names and directories.
-+	Has no effect on systems where file name case is generally ignored.
-+	Does not apply when the shell is used to expand wildcards, which
-+	happens when there are special characters.
-+
-+
- 				*'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
- 'wildmenu' 'wmnu'	boolean	(default off)
- 			global
-diff -Naur vim73.orig/runtime/doc/options.txt~ vim73/runtime/doc/options.txt~
---- vim73.orig/runtime/doc/options.txt~	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/runtime/doc/options.txt~	2012-11-01 20:35:41.000000000 +0000
-@@ -0,0 +1,8079 @@
-+*options.txt*	For Vim version 7.3.  Last change: 2010 Aug 15
-+
-+
-+		  VIM REFERENCE MANUAL	  by Bram Moolenaar
-+
-+
-+Options							*options*
-+
-+1. Setting options			|set-option|
-+2. Automatically setting options	|auto-setting|
-+3. Options summary			|option-summary|
-+
-+For an overview of options see help.txt |option-list|.
-+
-+Vim has a number of internal variables and switches which can be set to
-+achieve special effects.  These options come in three forms:
-+	boolean		can only be on or off		*boolean* *toggle*
-+	number		has a numeric value
-+	string		has a string value
-+
-+==============================================================================
-+1. Setting options					*set-option* *E764*
-+
-+							*:se* *:set*
-+:se[t]			Show all options that differ from their default value.
-+
-+:se[t] all		Show all but terminal options.
-+
-+:se[t] termcap		Show all terminal options.  Note that in the GUI the
-+			key codes are not shown, because they are generated
-+			internally and can't be changed.  Changing the terminal
-+			codes in the GUI is not useful either...
-+
-+								*E518* *E519*
-+:se[t] {option}?	Show value of {option}.
-+
-+:se[t] {option}		Toggle option: set, switch it on.
-+			Number option: show value.
-+			String option: show value.
-+
-+:se[t] no{option}	Toggle option: Reset, switch it off.
-+
-+							   *:set-!* *:set-inv*
-+:se[t] {option}!   or
-+:se[t] inv{option}	Toggle option: Invert value. {not in Vi}
-+
-+				*:set-default* *:set-&* *:set-&vi* *:set-&vim*
-+:se[t] {option}&	Reset option to its default value.  May depend on the
-+			current value of 'compatible'. {not in Vi}
-+:se[t] {option}&vi	Reset option to its Vi default value. {not in Vi}
-+:se[t] {option}&vim	Reset option to its Vim default value. {not in Vi}
-+
-+:se[t] all&		Set all options, except terminal options, to their
-+			default value.  The values of 'term', 'lines' and
-+			'columns' are not changed. {not in Vi}
-+
-+						*:set-args* *E487* *E521*
-+:se[t] {option}={value}		or
-+:se[t] {option}:{value}
-+			Set string or number option to {value}.
-+			For numeric options the value can be given in decimal,
-+			hex (preceded with 0x) or octal (preceded with '0')
-+			(hex and octal are only available for machines which
-+			have the strtol() function).
-+			The old value can be inserted by typing 'wildchar' (by
-+			default this is a <Tab> or CTRL-E if 'compatible' is
-+			set).  See |cmdline-completion|.
-+			White space between {option} and '=' is allowed and
-+			will be ignored.  White space between '=' and {value}
-+			is not allowed.
-+			See |option-backslash| for using white space and
-+			backslashes in {value}.
-+
-+:se[t] {option}+={value}				*:set+=*
-+			Add the {value} to a number option, or append the
-+			{value} to a string option.  When the option is a
-+			comma separated list, a comma is added, unless the
-+			value was empty.
-+			If the option is a list of flags, superfluous flags
-+			are removed.  When adding a flag that was already
-+			present the option value doesn't change.
-+			Also see |:set-args| above.
-+			{not in Vi}
-+
-+:se[t] {option}^={value}				*:set^=*
-+			Multiply the {value} to a number option, or prepend
-+			the {value} to a string option.  When the option is a
-+			comma separated list, a comma is added, unless the
-+			value was empty.
-+			Also see |:set-args| above.
-+			{not in Vi}
-+
-+:se[t] {option}-={value}				*:set-=*
-+			Subtract the {value} from a number option, or remove
-+			the {value} from a string option, if it is there.
-+			If the {value} is not found in a string option, there
-+			is no error or warning.  When the option is a comma
-+			separated list, a comma is deleted, unless the option
-+			becomes empty.
-+			When the option is a list of flags, {value} must be
-+			exactly as they appear in the option.  Remove flags
-+			one by one to avoid problems.
-+			Also see |:set-args| above.
-+			{not in Vi}
-+
-+The {option} arguments to ":set" may be repeated.  For example: >
-+	:set ai nosi sw=3 ts=3
-+If you make an error in one of the arguments, an error message will be given
-+and the following arguments will be ignored.
-+
-+							*:set-verbose*
-+When 'verbose' is non-zero, displaying an option value will also tell where it
-+was last set.  Example: >
-+	:verbose set shiftwidth cindent?
-+<	  shiftwidth=4 ~
-+		  Last set from modeline ~
-+	  cindent ~
-+		  Last set from /usr/local/share/vim/vim60/ftplugin/c.vim ~
-+This is only done when specific option values are requested, not for ":verbose
-+set all" or ":verbose set" without an argument.
-+When the option was set by hand there is no "Last set" message.
-+When the option was set while executing a function, user command or
-+autocommand, the script in which it was defined is reported.
-+Note that an option may also have been set as a side effect of setting
-+'compatible'.
-+A few special texts:
-+	Last set from modeline ~
-+		Option was set in a |modeline|.
-+	Last set from --cmd argument ~
-+		Option was set with command line argument |--cmd| or +.
-+	Last set from -c argument ~
-+		Option was set with command line argument |-c|, +, |-S| or
-+		|-q|.
-+	Last set from environment variable ~
-+		Option was set from an environment variable, $VIMINIT,
-+		$GVIMINIT or $EXINIT.
-+	Last set from error handler ~
-+		Option was cleared when evaluating it resulted in an error.
-+
-+{not available when compiled without the |+eval| feature}
-+
-+							*:set-termcap* *E522*
-+For {option} the form "t_xx" may be used to set a terminal option.  This will
-+override the value from the termcap.  You can then use it in a mapping.  If
-+the "xx" part contains special characters, use the <t_xx> form: >
-+	:set <t_#4>=^[Ot
-+This can also be used to translate a special code for a normal key.  For
-+example, if Alt-b produces <Esc>b, use this: >
-+	:set <M-b>=^[b
-+(the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
-+The advantage over a mapping is that it works in all situations.
-+
-+You can define any key codes, e.g.: >
-+	:set t_xy=^[foo;
-+There is no warning for using a name that isn't recognized.  You can map these
-+codes as you like: >
-+	:map <t_xy> something
-+<								*E846*
-+When a key code is not set, it's like it does not exist.  Trying to get its
-+value will result in an error: >
-+	:set t_kb=
-+	:set t_kb
-+	E846: Key code not set: t_kb
-+
-+The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
-+security reasons.
-+
-+The listing from ":set" looks different from Vi.  Long string options are put
-+at the end of the list.  The number of options is quite large.  The output of
-+"set all" probably does not fit on the screen, causing Vim to give the
-+|more-prompt|.
-+
-+							*option-backslash*
-+To include white space in a string option value it has to be preceded with a
-+backslash.  To include a backslash you have to use two.  Effectively this
-+means that the number of backslashes in an option value is halved (rounded
-+down).
-+A few examples: >
-+   :set tags=tags\ /usr/tags	    results in "tags /usr/tags"
-+   :set tags=tags\\,file	    results in "tags\,file"
-+   :set tags=tags\\\ file	    results in "tags\ file"
-+
-+The "|" character separates a ":set" command from a following command.  To
-+include the "|" in the option value, use "\|" instead.  This example sets the
-+'titlestring' option to "hi|there": >
-+   :set titlestring=hi\|there
-+This sets the 'titlestring' option to "hi" and 'iconstring' to "there": >
-+   :set titlestring=hi|set iconstring=there
-+
-+Similarly, the double quote character starts a comment.  To include the '"' in
-+the option value, use '\"' instead.  This example sets the 'titlestring'
-+option to 'hi "there"': >
-+   :set titlestring=hi\ \"there\"
-+
-+For MS-DOS and WIN32 backslashes in file names are mostly not removed.  More
-+precise: For options that expect a file name (those where environment
-+variables are expanded) a backslash before a normal file name character is not
-+removed.  But a backslash before a special character (space, backslash, comma,
-+etc.) is used like explained above.
-+There is one special situation, when the value starts with "\\": >
-+   :set dir=\\machine\path	    results in "\\machine\path"
-+   :set dir=\\\\machine\\path	    results in "\\machine\path"
-+   :set dir=\\path\\file	    results in "\\path\file" (wrong!)
-+For the first one the start is kept, but for the second one the backslashes
-+are halved.  This makes sure it works both when you expect backslashes to be
-+halved and when you expect the backslashes to be kept.  The third gives a
-+result which is probably not what you want.  Avoid it.
-+
-+				*add-option-flags* *remove-option-flags*
-+				*E539* *E550* *E551* *E552*
-+Some options are a list of flags.  When you want to add a flag to such an
-+option, without changing the existing ones, you can do it like this: >
-+   :set guioptions+=a
-+Remove a flag from an option like this: >
-+   :set guioptions-=a
-+This removes the 'a' flag from 'guioptions'.
-+Note that you should add or remove one flag at a time.  If 'guioptions' has
-+the value "ab", using "set guioptions-=ba" won't work, because the string "ba"
-+doesn't appear.
-+
-+			   *:set_env* *expand-env* *expand-environment-var*
-+Environment variables in specific string options will be expanded.  If the
-+environment variable exists the '$' and the following environment variable
-+name is replaced with its value.  If it does not exist the '$' and the name
-+are not modified.  Any non-id character (not a letter, digit or '_') may
-+follow the environment variable name.  That character and what follows is
-+appended to the value of the environment variable.  Examples: >
-+   :set term=$TERM.new
-+   :set path=/usr/$INCLUDE,$HOME/include,.
-+When adding or removing a string from an option with ":set opt-=val" or ":set
-+opt+=val" the expansion is done before the adding or removing.
-+
-+
-+Handling of local options			*local-options*
-+
-+Some of the options only apply to a window or buffer.  Each window or buffer
-+has its own copy of this option, thus can each have their own value.  This
-+allows you to set 'list' in one window but not in another.  And set
-+'shiftwidth' to 3 in one buffer and 4 in another.
-+
-+The following explains what happens to these local options in specific
-+situations.  You don't really need to know all of this, since Vim mostly uses
-+the option values you would expect.  Unfortunately, doing what the user
-+expects is a bit complicated...
-+
-+When splitting a window, the local options are copied to the new window.  Thus
-+right after the split the contents of the two windows look the same.
-+
-+When editing a new buffer, its local option values must be initialized.  Since
-+the local options of the current buffer might be specifically for that buffer,
-+these are not used.  Instead, for each buffer-local option there also is a
-+global value, which is used for new buffers.  With ":set" both the local and
-+global value is changed.  With "setlocal" only the local value is changed,
-+thus this value is not used when editing a new buffer.
-+
-+When editing a buffer that has been edited before, the last used window
-+options are used again.  If this buffer has been edited in this window, the
-+values from back then are used.  Otherwise the values from the window where
-+the buffer was edited last are used.
-+
-+It's possible to set a local window option specifically for a type of buffer.
-+When you edit another buffer in the same window, you don't want to keep
-+using these local window options.  Therefore Vim keeps a global value of the
-+local window options, which is used when editing another buffer.  Each window
-+has its own copy of these values.  Thus these are local to the window, but
-+global to all buffers in the window.  With this you can do: >
-+	:e one
-+	:set list
-+	:e two
-+Now the 'list' option will also be set in "two", since with the ":set list"
-+command you have also set the global value. >
-+	:set nolist
-+	:e one
-+	:setlocal list
-+	:e two
-+Now the 'list' option is not set, because ":set nolist" resets the global
-+value, ":setlocal list" only changes the local value and ":e two" gets the
-+global value.  Note that if you do this next: >
-+	:e one
-+You will not get back the 'list' value as it was the last time you edited
-+"one".  The options local to a window are not remembered for each buffer.
-+
-+							*:setl* *:setlocal*
-+:setl[ocal] ...		Like ":set" but set only the value local to the
-+			current buffer or window.  Not all options have a
-+			local value.  If the option does not have a local
-+			value the global value is set.
-+			With the "all" argument: display local values for all
-+			local options.
-+			Without argument: Display local values for all local
-+			options which are different from the default.
-+			When displaying a specific local option, show the
-+			local value.  For a global/local boolean option, when
-+			the global value is being used, "--" is displayed
-+			before the option name.
-+			For a global option the global value is
-+			shown (but that might change in the future).
-+			{not in Vi}
-+
-+:setl[ocal] {option}<	Set the local value of {option} to its global value by
-+			copying the value.
-+			{not in Vi}
-+
-+:se[t] {option}<	Set the local value of {option} to its global value by
-+			making it empty.  Only makes sense for |global-local|
-+			options.
-+			{not in Vi}
-+
-+							*:setg* *:setglobal*
-+:setg[lobal] ...	Like ":set" but set only the global value for a local
-+			option without changing the local value.
-+			When displaying an option, the global value is shown.
-+			With the "all" argument: display global values for all
-+			local options.
-+			Without argument: display global values for all local
-+			options which are different from the default.
-+			{not in Vi}
-+
-+For buffer-local and window-local options:
-+	Command		 global value	    local value ~
-+      :set option=value	     set		set
-+ :setlocal option=value	      -			set
-+:setglobal option=value	     set		 -
-+      :set option?	      -		       display
-+ :setlocal option?	      -		       display
-+:setglobal option?	    display		 -
-+
-+
-+Global options with a local value			*global-local*
-+
-+Options are global when you mostly use one value for all buffers and windows.
-+For some global options it's useful to sometimes have a different local value.
-+You can set the local value with ":setlocal".  That buffer or window will then
-+use the local value, while other buffers and windows continue using the global
-+value.
-+
-+For example, you have two windows, both on C source code.  They use the global
-+'makeprg' option.  If you do this in one of the two windows: >
-+	:set makeprg=gmake
-+then the other window will switch to the same value.  There is no need to set
-+the 'makeprg' option in the other C source window too.
-+However, if you start editing a Perl file in a new window, you want to use
-+another 'makeprg' for it, without changing the value used for the C source
-+files.  You use this command: >
-+	:setlocal makeprg=perlmake
-+You can switch back to using the global value by making the local value empty: >
-+	:setlocal makeprg=
-+This only works for a string option.  For a boolean option you need to use the
-+"<" flag, like this: >
-+	:setlocal autoread<
-+Note that for non-boolean options using "<" copies the global value to the
-+local value, it doesn't switch back to using the global value (that matters
-+when the global value changes later).  You can also use: >
-+	:set path<
-+This will make the local value of 'path' empty, so that the global value is
-+used.  Thus it does the same as: >
-+	:setlocal path=
-+Note: In the future more global options can be made global-local.  Using
-+":setlocal" on a global option might work differently then.
-+
-+
-+Setting the filetype
-+
-+:setf[iletype] {filetype}			*:setf* *:setfiletype*
-+			Set the 'filetype' option to {filetype}, but only if
-+			not done yet in a sequence of (nested) autocommands.
-+			This is short for: >
-+				:if !did_filetype()
-+				:  setlocal filetype={filetype}
-+				:endif
-+<			This command is used in a filetype.vim file to avoid
-+			setting the 'filetype' option twice, causing different
-+			settings and syntax files to be loaded.
-+			{not in Vi}
-+
-+:bro[wse] se[t]			*:set-browse* *:browse-set* *:opt* *:options*
-+:opt[ions]		Open a window for viewing and setting all options.
-+			Options are grouped by function.
-+			Offers short help for each option.  Hit <CR> on the
-+			short help to open a help window with more help for
-+			the option.
-+			Modify the value of the option and hit <CR> on the
-+			"set" line to set the new value.  For window and
-+			buffer specific options, the last accessed window is
-+			used to set the option value in, unless this is a help
-+			window, in which case the window below help window is
-+			used (skipping the option-window).
-+			{not available when compiled without the |+eval| or
-+			|+autocmd| features}
-+
-+								*$HOME*
-+Using "~" is like using "$HOME", but it is only recognized at the start of an
-+option and after a space or comma.
-+
-+On Unix systems "~user" can be used too.  It is replaced by the home directory
-+of user "user".  Example: >
-+    :set path=~mool/include,/usr/include,.
-+
-+On Unix systems the form "${HOME}" can be used too.  The name between {} can
-+contain non-id characters then.  Note that if you want to use this for the
-+"gf" command, you need to add the '{' and '}' characters to 'isfname'.
-+
-+NOTE: expanding environment variables and "~/" is only done with the ":set"
-+command, not when assigning a value to an option with ":let".
-+
-+
-+Note the maximum length of an expanded option is limited.  How much depends on
-+the system, mostly it is something like 256 or 1024 characters.
-+
-+							*:fix* *:fixdel*
-+:fix[del]		Set the value of 't_kD':
-+				't_kb' is     't_kD' becomes	~
-+				  CTRL-?	CTRL-H
-+				not CTRL-?	CTRL-?
-+
-+			(CTRL-? is 0177 octal, 0x7f hex) {not in Vi}
-+
-+			If your delete key terminal code is wrong, but the
-+			code for backspace is alright, you can put this in
-+			your .vimrc: >
-+				:fixdel
-+<			This works no matter what the actual code for
-+			backspace is.
-+
-+			If the backspace key terminal code is wrong you can
-+			use this: >
-+				:if &term == "termname"
-+				:  set t_kb=^V<BS>
-+				:  fixdel
-+				:endif
-+<			Where "^V" is CTRL-V and "<BS>" is the backspace key
-+			(don't type four characters!).  Replace "termname"
-+			with your terminal name.
-+
-+			If your <Delete> key sends a strange key sequence (not
-+			CTRL-? or CTRL-H) you cannot use ":fixdel".  Then use: >
-+				:if &term == "termname"
-+				:  set t_kD=^V<Delete>
-+				:endif
-+<			Where "^V" is CTRL-V and "<Delete>" is the delete key
-+			(don't type eight characters!).  Replace "termname"
-+			with your terminal name.
-+
-+							*Linux-backspace*
-+			Note about Linux: By default the backspace key
-+			produces CTRL-?, which is wrong.  You can fix it by
-+			putting this line in your rc.local: >
-+				echo "keycode 14 = BackSpace" | loadkeys
-+<
-+							*NetBSD-backspace*
-+			Note about NetBSD: If your backspace doesn't produce
-+			the right code, try this: >
-+				xmodmap -e "keycode 22 = BackSpace"
-+<			If this works, add this in your .Xmodmap file: >
-+				keysym 22 = BackSpace
-+<			You need to restart for this to take effect.
-+
-+==============================================================================
-+2. Automatically setting options			*auto-setting*
-+
-+Besides changing options with the ":set" command, there are three alternatives
-+to set options automatically for one or more files:
-+
-+1. When starting Vim initializations are read from various places.  See
-+   |initialization|.  Most of them are performed for all editing sessions,
-+   and some of them depend on the directory where Vim is started.
-+   You can create an initialization file with |:mkvimrc|, |:mkview| and
-+   |:mksession|.
-+2. If you start editing a new file, the automatic commands are executed.
-+   This can be used to set options for files matching a particular pattern and
-+   many other things.  See |autocommand|.
-+3. If you start editing a new file, and the 'modeline' option is on, a
-+   number of lines at the beginning and end of the file are checked for
-+   modelines.  This is explained here.
-+
-+					*modeline* *vim:* *vi:* *ex:* *E520*
-+There are two forms of modelines.  The first form:
-+	[text]{white}{vi:|vim:|ex:}[white]{options}
-+
-+[text]		any text or empty
-+{white}		at least one blank character (<Space> or <Tab>)
-+{vi:|vim:|ex:}	the string "vi:", "vim:" or "ex:"
-+[white]		optional white space
-+{options}	a list of option settings, separated with white space or ':',
-+		where each part between ':' is the argument for a ":set"
-+		command (can be empty)
-+
-+Example:
-+   vi:noai:sw=3 ts=6 ~
-+
-+The second form (this is compatible with some versions of Vi):
-+
-+	[text]{white}{vi:|vim:|ex:}[white]se[t] {options}:[text]
-+
-+[text]		any text or empty
-+{white}		at least one blank character (<Space> or <Tab>)
-+{vi:|vim:|ex:}	the string "vi:", "vim:" or "ex:"
-+[white]		optional white space
-+se[t]		the string "set " or "se " (note the space)
-+{options}	a list of options, separated with white space, which is the
-+		argument for a ":set" command
-+:		a colon
-+[text]		any text or empty
-+
-+Example:
-+   /* vim: set ai tw=75: */ ~
-+
-+The white space before {vi:|vim:|ex:} is required.  This minimizes the chance
-+that a normal word like "lex:" is caught.  There is one exception: "vi:" and
-+"vim:" can also be at the start of the line (for compatibility with version
-+3.0).  Using "ex:" at the start of the line will be ignored (this could be
-+short for "example:").
-+
-+							*modeline-local*
-+The options are set like with ":setlocal": The new value only applies to the
-+buffer and window that contain the file.  Although it's possible to set global
-+options from a modeline, this is unusual.  If you have two windows open and
-+the files in it set the same global option to a different value, the result
-+depends on which one was opened last.
-+
-+When editing a file that was already loaded, only the window-local options
-+from the modeline are used.  Thus if you manually changed a buffer-local
-+option after opening the file, it won't be changed if you edit the same buffer
-+in another window.  But window-local options will be set.
-+
-+							*modeline-version*
-+If the modeline is only to be used for some versions of Vim, the version
-+number can be specified where "vim:" is used:
-+	vim{vers}:	version {vers} or later
-+	vim<{vers}:	version before {vers}
-+	vim={vers}:	version {vers}
-+	vim>{vers}:	version after {vers}
-+{vers} is 600 for Vim 6.0 (hundred times the major version plus minor).
-+For example, to use a modeline only for Vim 6.0 and later:
-+	/* vim600: set foldmethod=marker: */ ~
-+To use a modeline for Vim before version 5.7:
-+	/* vim<570: set sw=4: */ ~
-+There can be no blanks between "vim" and the ":".
-+
-+
-+The number of lines that are checked can be set with the 'modelines' option.
-+If 'modeline' is off or 'modelines' is 0 no lines are checked.
-+
-+Note that for the first form all of the rest of the line is used, thus a line
-+like:
-+   /* vi:ts=4: */ ~
-+will give an error message for the trailing "*/".  This line is OK:
-+   /* vi:set ts=4: */ ~
-+
-+If an error is detected the rest of the line is skipped.
-+
-+If you want to include a ':' in a set command precede it with a '\'.  The
-+backslash in front of the ':' will be removed.  Example:
-+   /* vi:set dir=c\:\tmp: */ ~
-+This sets the 'dir' option to "c:\tmp".  Only a single backslash before the
-+':' is removed.  Thus to include "\:" you have to specify "\\:".
-+
-+No other commands than "set" are supported, for security reasons (somebody
-+might create a Trojan horse text file with modelines).  And not all options
-+can be set.  For some options a flag is set, so that when it's used the
-+|sandbox| is effective.  Still, there is always a small risk that a modeline
-+causes trouble.  E.g., when some joker sets 'textwidth' to 5 all your lines
-+are wrapped unexpectedly.  So disable modelines before editing untrusted text.
-+The mail ftplugin does this, for example.
-+
-+Hint: If you would like to do something else than setting an option, you could
-+define an autocommand that checks the file for a specific string.  For
-+example: >
-+	au BufReadPost * if getline(1) =~ "VAR" | call SetVar() | endif
-+And define a function SetVar() that does something with the line containing
-+"VAR".
-+
-+==============================================================================
-+3. Options summary					*option-summary*
-+
-+In the list below all the options are mentioned with their full name and with
-+an abbreviation if there is one.  Both forms may be used.
-+
-+In this document when a boolean option is "set" that means that ":set option"
-+is entered.  When an option is "reset", ":set nooption" is used.
-+
-+For some options there are two default values: The "Vim default", which is
-+used when 'compatible' is not set, and the "Vi default", which is used when
-+'compatible' is set.
-+
-+Most options are the same in all windows and buffers.  There are a few that
-+are specific to how the text is presented in a window.  These can be set to a
-+different value in each window.  For example the 'list' option can be set in
-+one window and reset in another for the same text, giving both types of view
-+at the same time.  There are a few options that are specific to a certain
-+file.  These can have a different value for each file or buffer.  For example
-+the 'textwidth' option can be 78 for a normal text file and 0 for a C
-+program.
-+
-+	global			one option for all buffers and windows
-+	local to window		each window has its own copy of this option
-+	local to buffer		each buffer has its own copy of this option
-+
-+When creating a new window the option values from the currently active window
-+are used as a default value for the window-specific options.  For the
-+buffer-specific options this depends on the 's' and 'S' flags in the
-+'cpoptions' option.  If 's' is included (which is the default) the values for
-+buffer options are copied from the currently active buffer when a buffer is
-+first entered.  If 'S' is present the options are copied each time the buffer
-+is entered, this is almost like having global options.  If 's' and 'S' are not
-+present, the options are copied from the currently active buffer when the
-+buffer is created.
-+
-+Hidden options						*hidden-options*
-+
-+Not all options are supported in all versions.  This depends on the supported
-+features and sometimes on the system.  A remark about this is in curly braces
-+below.  When an option is not supported it may still be set without getting an
-+error, this is called a hidden option.  You can't get the value of a hidden
-+option though, it is not stored.
-+
-+To test if option "foo" can be used with ":set" use something like this: >
-+	if exists('&foo')
-+This also returns true for a hidden option.  To test if option "foo" is really
-+supported use something like this: >
-+	if exists('+foo')
-+<
-+							*E355*
-+A jump table for the options with a short description can be found at |Q_op|.
-+
-+					*'aleph'* *'al'* *aleph* *Aleph*
-+'aleph' 'al'		number	(default 128 for MS-DOS, 224 otherwise)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	The ASCII code for the first letter of the Hebrew alphabet.  The
-+	routine that maps the keyboard in Hebrew mode, both in Insert mode
-+	(when hkmap is set) and on the command-line (when hitting CTRL-_)
-+	outputs the Hebrew characters in the range [aleph..aleph+26].
-+	aleph=128 applies to PC code, and aleph=224 applies to ISO 8859-8.
-+	See |rileft.txt|.
-+
-+			*'allowrevins'* *'ari'* *'noallowrevins'* *'noari'*
-+'allowrevins' 'ari'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	Allow CTRL-_ in Insert and Command-line mode.  This is default off, to
-+	avoid that users that accidentally type CTRL-_ instead of SHIFT-_ get
-+	into reverse Insert mode, and don't know how to get out.  See
-+	'revins'.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+			 *'altkeymap'* *'akm'* *'noaltkeymap'* *'noakm'*
-+'altkeymap' 'akm'	boolean (default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+farsi|
-+			feature}
-+	When on, the second language is Farsi.  In editing mode CTRL-_ toggles
-+	the keyboard map between Farsi and English, when 'allowrevins' set.
-+
-+	When off, the keyboard map toggles between Hebrew and English.  This
-+	is useful to start the Vim in native mode i.e. English (left-to-right
-+	mode) and have default second language Farsi or Hebrew (right-to-left
-+	mode).  See |farsi.txt|.
-+
-+						*'ambiwidth'* *'ambw'*
-+'ambiwidth' 'ambw'	string (default: "single")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+	Only effective when 'encoding' is "utf-8" or another Unicode encoding.
-+	Tells Vim what to do with characters with East Asian Width Class
-+	Ambiguous (such as Euro, Registered Sign, Copyright Sign, Greek
-+	letters, Cyrillic letters).
-+
-+	There are currently two possible values:
-+	"single":	Use the same width as characters in US-ASCII.  This is
-+			expected by most users.
-+	"double":	Use twice the width of ASCII characters.
-+							*E834* *E835*
-+	The value "double" cannot be used if 'listchars' or 'fillchars'
-+	contains a character that would be double width.
-+
-+	There are a number of CJK fonts for which the width of glyphs for
-+	those characters are solely based on how many octets they take in
-+	legacy/traditional CJK encodings.  In those encodings, Euro,
-+	Registered sign, Greek/Cyrillic letters are represented by two octets,
-+	therefore those fonts have "wide" glyphs for them.  This is also
-+	true of some line drawing characters used to make tables in text
-+	file.  Therefore, when a CJK font is used for GUI Vim or
-+	Vim is running inside a terminal (emulators) that uses a CJK font
-+	(or Vim is run inside an xterm invoked with "-cjkwidth" option.),
-+	this option should be set to "double" to match the width perceived
-+	by Vim with the width of glyphs in the font.  Perhaps it also has
-+	to be set to "double" under CJK Windows 9x/ME or Windows 2k/XP
-+	when the system locale is set to one of CJK locales.  See Unicode
-+	Standard Annex #11 (http://www.unicode.org/reports/tr11).
-+
-+			*'antialias'* *'anti'* *'noantialias'* *'noanti'*
-+'antialias' 'anti'	boolean (default: off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled
-+			on Mac OS X}
-+	This option only has an effect in the GUI version of Vim on Mac OS X
-+	v10.2 or later.  When on, Vim will use smooth ("antialiased") fonts,
-+	which can be easier to read at certain sizes on certain displays.
-+	Setting this option can sometimes cause problems if 'guifont' is set
-+	to its default (empty string).
-+
-+			*'autochdir'* *'acd'* *'noautochdir'* *'noacd'*
-+'autochdir' 'acd'	boolean (default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with it, use
-+			exists("+autochdir") to check}
-+	When on, Vim will change the current working directory whenever you
-+	open a file, switch buffers, delete a buffer or open/close a window.
-+	It will change to the directory containing the file which was opened
-+	or selected.
-+	This option is provided for backward compatibility with the Vim
-+	released with Sun ONE Studio 4 Enterprise Edition.
-+	Note: When this option is on some plugins may not work.
-+
-+				*'arabic'* *'arab'* *'noarabic'* *'noarab'*
-+'arabic' 'arab'		boolean (default off)
-+			local to window
-+			{not in Vi}
-+			{only available when compiled with the |+arabic|
-+			feature}
-+	This option can be set to start editing Arabic text.
-+	Setting this option will:
-+	- Set the 'rightleft' option, unless 'termbidi' is set.
-+	- Set the 'arabicshape' option, unless 'termbidi' is set.
-+	- Set the 'keymap' option to "arabic"; in Insert mode CTRL-^ toggles
-+	  between typing English and Arabic key mapping.
-+	- Set the 'delcombine' option
-+	Note that 'encoding' must be "utf-8" for working with Arabic text.
-+
-+	Resetting this option will:
-+	- Reset the 'rightleft' option.
-+	- Disable the use of 'keymap' (without changing its value).
-+	Note that 'arabicshape' and 'delcombine' are not reset (it is a global
-+	option.
-+	Also see |arabic.txt|.
-+
-+					*'arabicshape'* *'arshape'*
-+					*'noarabicshape'* *'noarshape'*
-+'arabicshape' 'arshape'	boolean (default on)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+arabic|
-+			feature}
-+	When on and 'termbidi' is off, the required visual character
-+	corrections that need to take place for displaying the Arabic language
-+	take affect.  Shaping, in essence, gets enabled; the term is a broad
-+	one which encompasses:
-+	  a) the changing/morphing of characters based on their location
-+	     within a word (initial, medial, final and stand-alone).
-+	  b) the enabling of the ability to compose characters
-+	  c) the enabling of the required combining of some characters
-+	When disabled the display shows each character's true stand-alone
-+	form.
-+	Arabic is a complex language which requires other settings, for
-+	further details see |arabic.txt|.
-+
-+			*'autoindent'* *'ai'* *'noautoindent'* *'noai'*
-+'autoindent' 'ai'	boolean	(default off)
-+			local to buffer
-+	Copy indent from current line when starting a new line (typing <CR>
-+	in Insert mode or when using the "o" or "O" command).  If you do not
-+	type anything on the new line except <BS> or CTRL-D and then type
-+	<Esc>, CTRL-O or <CR>, the indent is deleted again.  Moving the cursor
-+	to another line has the same effect, unless the 'I' flag is included
-+	in 'cpoptions'.
-+	When autoindent is on, formatting (with the "gq" command or when you
-+	reach 'textwidth' in Insert mode) uses the indentation of the first
-+	line.
-+	When 'smartindent' or 'cindent' is on the indent is changed in
-+	a different way.
-+	The 'autoindent' option is reset when the 'paste' option is set.
-+	{small difference from Vi: After the indent is deleted when typing
-+	<Esc> or <CR>, the cursor position when moving up or down is after the
-+	deleted indent; Vi puts the cursor somewhere in the deleted indent}.
-+
-+				 *'autoread'* *'ar'* *'noautoread'* *'noar'*
-+'autoread' 'ar'		boolean	(default off)
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	When a file has been detected to have been changed outside of Vim and
-+	it has not been changed inside of Vim, automatically read it again.
-+	When the file has been deleted this is not done.  |timestamp|
-+	If this option has a local value, use this command to switch back to
-+	using the global value: >
-+		:set autoread<
-+<
-+				 *'autowrite'* *'aw'* *'noautowrite'* *'noaw'*
-+'autowrite' 'aw'	boolean	(default off)
-+			global
-+	Write the contents of the file, if it has been modified, on each
-+	:next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,
-+	:make, CTRL-] and CTRL-^ command; and when a :buffer, CTRL-O, CTRL-I,
-+	'{A-Z0-9}, or `{A-Z0-9} command takes one to another file.
-+	Note that for some commands the 'autowrite' option is not used, see
-+	'autowriteall' for that.
-+
-+			 *'autowriteall'* *'awa'* *'noautowriteall'* *'noawa'*
-+'autowriteall' 'awa'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	Like 'autowrite', but also used for commands ":edit", ":enew", ":quit",
-+	":qall", ":exit", ":xit", ":recover" and closing the Vim window.
-+	Setting this option also implies that Vim behaves like 'autowrite' has
-+	been set.
-+
-+							*'background'* *'bg'*
-+'background' 'bg'	string	(default "dark" or "light")
-+			global
-+			{not in Vi}
-+	When set to "dark", Vim will try to use colors that look good on a
-+	dark background.  When set to "light", Vim will try to use colors that
-+	look good on a light background.  Any other value is illegal.
-+	Vim tries to set the default value according to the terminal used.
-+	This will not always be correct.
-+	Setting this option does not change the background color, it tells Vim
-+	what the background color looks like.  For changing the background
-+	color, see |:hi-normal|.
-+
-+	When 'background' is set Vim will adjust the default color groups for
-+	the new value.  But the colors used for syntax highlighting will not
-+	change.					*g:colors_name*
-+	When a color scheme is loaded (the "g:colors_name" variable is set)
-+	setting 'background' will cause the color scheme to be reloaded.  If
-+	the color scheme adjusts to the value of 'background' this will work.
-+	However, if the color scheme sets 'background' itself the effect may
-+	be undone.  First delete the "g:colors_name" variable when needed.
-+
-+	When setting 'background' to the default value with: >
-+		:set background&
-+<	Vim will guess the value.  In the GUI this should work correctly,
-+	in other cases Vim might not be able to guess the right value.
-+
-+	When starting the GUI, the default value for 'background' will be
-+	"light".  When the value is not set in the .gvimrc, and Vim detects
-+	that the background is actually quite dark, 'background' is set to
-+	"dark".  But this happens only AFTER the .gvimrc file has been read
-+	(because the window needs to be opened to find the actual background
-+	color).  To get around this, force the GUI window to be opened by
-+	putting a ":gui" command in the .gvimrc file, before where the value
-+	of 'background' is used (e.g., before ":syntax on").
-+	Normally this option would be set in the .vimrc file.  Possibly
-+	depending on the terminal name.  Example: >
-+		:if &term == "pcterm"
-+		:  set background=dark
-+		:endif
-+<	When this option is set, the default settings for the highlight groups
-+	will change.  To use other settings, place ":highlight" commands AFTER
-+	the setting of the 'background' option.
-+	This option is also used in the "$VIMRUNTIME/syntax/syntax.vim" file
-+	to select the colors for syntax highlighting.  After changing this
-+	option, you must load syntax.vim again to see the result.  This can be
-+	done with ":syntax on".
-+
-+							*'backspace'* *'bs'*
-+'backspace' 'bs'	string	(default "")
-+			global
-+			{not in Vi}
-+	Influences the working of <BS>, <Del>, CTRL-W and CTRL-U in Insert
-+	mode.  This is a list of items, separated by commas.  Each item allows
-+	a way to backspace over something:
-+	value	effect	~
-+	indent	allow backspacing over autoindent
-+	eol	allow backspacing over line breaks (join lines)
-+	start	allow backspacing over the start of insert; CTRL-W and CTRL-U
-+		stop once at the start of insert.
-+
-+	When the value is empty, Vi compatible backspacing is used.
-+
-+	For backwards compatibility with version 5.4 and earlier:
-+	value	effect	~
-+	  0	same as ":set backspace=" (Vi compatible)
-+	  1	same as ":set backspace=indent,eol"
-+	  2	same as ":set backspace=indent,eol,start"
-+
-+	See |:fixdel| if your <BS> or <Del> key does not do what you want.
-+	NOTE: This option is set to "" when 'compatible' is set.
-+
-+				*'backup'* *'bk'* *'nobackup'* *'nobk'*
-+'backup' 'bk'		boolean	(default off)
-+			global
-+			{not in Vi}
-+	Make a backup before overwriting a file.  Leave it around after the
-+	file has been successfully written.  If you do not want to keep the
-+	backup file, but you do want a backup while the file is being
-+	written, reset this option and set the 'writebackup' option (this is
-+	the default).  If you do not want a backup file at all reset both
-+	options (use this if your file system is almost full).  See the
-+	|backup-table| for more explanations.
-+	When the 'backupskip' pattern matches, a backup is not made anyway.
-+	When 'patchmode' is set, the backup may be renamed to become the
-+	oldest version of a file.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'backupcopy'* *'bkc'*
-+'backupcopy' 'bkc'	string	(Vi default for Unix: "yes", otherwise: "auto")
-+			global
-+			{not in Vi}
-+	When writing a file and a backup is made, this option tells how it's
-+	done.  This is a comma separated list of words.
-+
-+	The main values are:
-+	"yes"	make a copy of the file and overwrite the original one
-+	"no"	rename the file and write a new one
-+	"auto"	one of the previous, what works best
-+
-+	Extra values that can be combined with the ones above are:
-+	"breaksymlink"	always break symlinks when writing
-+	"breakhardlink"	always break hardlinks when writing
-+
-+	Making a copy and overwriting the original file:
-+	- Takes extra time to copy the file.
-+	+ When the file has special attributes, is a (hard/symbolic) link or
-+	  has a resource fork, all this is preserved.
-+	- When the file is a link the backup will have the name of the link,
-+	  not of the real file.
-+
-+	Renaming the file and writing a new one:
-+	+ It's fast.
-+	- Sometimes not all attributes of the file can be copied to the new
-+	  file.
-+	- When the file is a link the new file will not be a link.
-+
-+	The "auto" value is the middle way: When Vim sees that renaming file
-+	is possible without side effects (the attributes can be passed on and
-+	the file is not a link) that is used.  When problems are expected, a
-+	copy will be made.
-+
-+	The "breaksymlink" and "breakhardlink" values can be used in
-+	combination with any of "yes", "no" and "auto".  When included, they
-+	force Vim to always break either symbolic or hard links by doing
-+	exactly what the "no" option does, renaming the original file to
-+	become the backup and writing a new file in its place.  This can be
-+	useful for example in source trees where all the files are symbolic or
-+	hard links and any changes should stay in the local source tree, not
-+	be propagated back to the original source.
-+							*crontab*
-+	One situation where "no" and "auto" will cause problems: A program
-+	that opens a file, invokes Vim to edit that file, and then tests if
-+	the open file was changed (through the file descriptor) will check the
-+	backup file instead of the newly created file.  "crontab -e" is an
-+	example.
-+
-+	When a copy is made, the original file is truncated and then filled
-+	with the new text.  This means that protection bits, owner and
-+	symbolic links of the original file are unmodified.  The backup file
-+	however, is a new file, owned by the user who edited the file.  The
-+	group of the backup is set to the group of the original file.  If this
-+	fails, the protection bits for the group are made the same as for
-+	others.
-+
-+	When the file is renamed this is the other way around: The backup has
-+	the same attributes of the original file, and the newly written file
-+	is owned by the current user.  When the file was a (hard/symbolic)
-+	link, the new file will not!  That's why the "auto" value doesn't
-+	rename when the file is a link.  The owner and group of the newly
-+	written file will be set to the same ones as the original file, but
-+	the system may refuse to do this.  In that case the "auto" value will
-+	again not rename the file.
-+
-+						*'backupdir'* *'bdir'*
-+'backupdir' 'bdir'	string	(default for Amiga: ".,t:",
-+				 for MS-DOS and Win32: ".,c:/tmp,c:/temp"
-+				 for Unix: ".,~/tmp,~/")
-+			global
-+			{not in Vi}
-+	List of directories for the backup file, separated with commas.
-+	- The backup file will be created in the first directory in the list
-+	  where this is possible.  The directory must exist, Vim will not
-+	  create it for you.
-+	- Empty means that no backup file will be created ('patchmode' is
-+	  impossible!).  Writing may fail because of this.
-+	- A directory "." means to put the backup file in the same directory
-+	  as the edited file.
-+	- A directory starting with "./" (or ".\" for MS-DOS et al.) means to
-+	  put the backup file relative to where the edited file is.  The
-+	  leading "." is replaced with the path name of the edited file.
-+	  ("." inside a directory name has no special meaning).
-+	- Spaces after the comma are ignored, other spaces are considered part
-+	  of the directory name.  To have a space at the start of a directory
-+	  name, precede it with a backslash.
-+	- To include a comma in a directory name precede it with a backslash.
-+	- A directory name may end in an '/'.
-+	- Environment variables are expanded |:set_env|.
-+	- Careful with '\' characters, type one before a space, type two to
-+	  get one in the option (see |option-backslash|), for example: >
-+	    :set bdir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
-+<	- For backwards compatibility with Vim version 3.0 a '>' at the start
-+	  of the option is removed.
-+	See also 'backup' and 'writebackup' options.
-+	If you want to hide your backup files on Unix, consider this value: >
-+		:set backupdir=./.backup,~/.backup,.,/tmp
-+<	You must create a ".backup" directory in each directory and in your
-+	home directory for this to work properly.
-+	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	directories from the list.  This avoids problems when a future version
-+	uses another default.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'backupext'* *'bex'* *E589*
-+'backupext' 'bex'	string	(default "~", for VMS: "_")
-+			global
-+			{not in Vi}
-+	String which is appended to a file name to make the name of the
-+	backup file.  The default is quite unusual, because this avoids
-+	accidentally overwriting existing files with a backup file.  You might
-+	prefer using ".bak", but make sure that you don't have files with
-+	".bak" that you want to keep.
-+	Only normal file name characters can be used, "/\*?[|<>" are illegal.
-+
-+	If you like to keep a lot of backups, you could use a BufWritePre
-+	autocommand to change 'backupext' just before writing the file to
-+	include a timestamp. >
-+		:au BufWritePre * let &bex = '-' . strftime("%Y%b%d%X") . '~'
-+<	Use 'backupdir' to put the backup in a different directory.
-+
-+						*'backupskip'* *'bsk'*
-+'backupskip' 'bsk'	string	(default: "/tmp/*,$TMPDIR/*,$TMP/*,$TEMP/*")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+wildignore|
-+			feature}
-+	A list of file patterns.  When one of the patterns matches with the
-+	name of the file which is written, no backup file is created.  Both
-+	the specified file name and the full path name of the file are used.
-+	The pattern is used like with |:autocmd|, see |autocmd-patterns|.
-+	Watch out for special characters, see |option-backslash|.
-+	When $TMPDIR, $TMP or $TEMP is not defined, it is not used for the
-+	default value.  "/tmp/*" is only used for Unix.
-+
-+	Note that environment variables are not expanded.  If you want to use
-+	$HOME you must expand it explicitly, e.g.: >
-+		:let backupskip = escape(expand('$HOME'), '\') . '/tmp/*'
-+
-+<	Note that the default also makes sure that "crontab -e" works (when a
-+	backup would be made by renaming the original file crontab won't see
-+	the newly created file).  Also see 'backupcopy' and |crontab|.
-+
-+						*'balloondelay'* *'bdlay'*
-+'balloondelay' 'bdlay'	number	(default: 600)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+balloon_eval|
-+			feature}
-+	Delay in milliseconds before a balloon may pop up.  See |balloon-eval|.
-+
-+		       *'ballooneval'* *'beval'* *'noballooneval'* *'nobeval'*
-+'ballooneval' 'beval'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+balloon_eval|
-+			feature}
-+	Switch on the |balloon-eval| functionality.
-+
-+						     *'balloonexpr'* *'bexpr'*
-+'balloonexpr' 'bexpr'	string	(default "")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+			{only available when compiled with the |+balloon_eval|
-+			feature}
-+	Expression for text to show in evaluation balloon.  It is only used
-+	when 'ballooneval' is on.  These variables can be used:
-+
-+	v:beval_bufnr	number of the buffer in which balloon is going to show
-+	v:beval_winnr	number of the window
-+	v:beval_lnum	line number
-+	v:beval_col	column number (byte index)
-+	v:beval_text	word under or after the mouse pointer
-+
-+	The evaluation of the expression must not have side effects!
-+	Example: >
-+    function! MyBalloonExpr()
-+	return 'Cursor is at line ' . v:beval_lnum .
-+		\', column ' . v:beval_col .
-+		\ ' of file ' .  bufname(v:beval_bufnr) .
-+		\ ' on word "' . v:beval_text . '"'
-+    endfunction
-+    set bexpr=MyBalloonExpr()
-+    set ballooneval
-+<
-+	NOTE: The balloon is displayed only if the cursor is on a text
-+	character.  If the result of evaluating 'balloonexpr' is not empty,
-+	Vim does not try to send a message to an external debugger (Netbeans
-+	or Sun Workshop).
-+
-+	The expression may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+
-+	It is not allowed to change text or jump to another window while
-+	evaluating 'balloonexpr' |textlock|.
-+
-+	To check whether line breaks in the balloon text work use this check: >
-+		if has("balloon_multiline")
-+<	When they are supported "\n" characters will start a new line.  If the
-+	expression evaluates to a |List| this is equal to using each List item
-+	as a string and putting "\n" in between them.
-+
-+				     *'binary'* *'bin'* *'nobinary'* *'nobin'*
-+'binary' 'bin'		boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+	This option should be set before editing a binary file.  You can also
-+	use the |-b| Vim argument.  When this option is switched on a few
-+	options will be changed (also when it already was on):
-+		'textwidth'  will be set to 0
-+		'wrapmargin' will be set to 0
-+		'modeline'   will be off
-+		'expandtab'  will be off
-+	Also, 'fileformat' and 'fileformats' options will not be used, the
-+	file is read and written like 'fileformat' was "unix" (a single <NL>
-+	separates lines).
-+	The 'fileencoding' and 'fileencodings' options will not be used, the
-+	file is read without conversion.
-+	NOTE: When you start editing a(nother) file while the 'bin' option is
-+	on, settings from autocommands may change the settings again (e.g.,
-+	'textwidth'), causing trouble when editing.  You might want to set
-+	'bin' again when the file has been loaded.
-+	The previous values of these options are remembered and restored when
-+	'bin' is switched from on to off.  Each buffer has its own set of
-+	saved option values.
-+	To edit a file with 'binary' set you can use the |++bin| argument.
-+	This avoids you have to do ":set bin", which would have effect for all
-+	files you edit.
-+	When writing a file the <EOL> for the last line is only written if
-+	there was one in the original file (normally Vim appends an <EOL> to
-+	the last line if there is none; this would make the file longer).  See
-+	the 'endofline' option.
-+
-+			*'bioskey'* *'biosk'* *'nobioskey'* *'nobiosk'*
-+'bioskey' 'biosk'	boolean	(default on)
-+			global
-+			{not in Vi}  {only for MS-DOS}
-+	When on the BIOS is called to obtain a keyboard character.  This works
-+	better to detect CTRL-C, but only works for the console.  When using a
-+	terminal over a serial port reset this option.
-+	Also see |'conskey'|.
-+
-+							*'bomb'* *'nobomb'*
-+'bomb'			boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+	When writing a file and the following conditions are met, a BOM (Byte
-+	Order Mark) is prepended to the file:
-+	- this option is on
-+	- the 'binary' option is off
-+	- 'fileencoding' is "utf-8", "ucs-2", "ucs-4" or one of the little/big
-+	  endian variants.
-+	Some applications use the BOM to recognize the encoding of the file.
-+	Often used for UCS-2 files on MS-Windows.  For other applications it
-+	causes trouble, for example: "cat file1 file2" makes the BOM of file2
-+	appear halfway the resulting file.  Gcc doesn't accept a BOM.
-+	When Vim reads a file and 'fileencodings' starts with "ucs-bom", a
-+	check for the presence of the BOM is done and 'bomb' set accordingly.
-+	Unless 'binary' is set, it is removed from the first line, so that you
-+	don't see it when editing.  When you don't change the options, the BOM
-+	will be restored when writing the file.
-+
-+						*'breakat'* *'brk'*
-+'breakat' 'brk'		string	(default " ^I!@*-+;:,./?")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+linebreak|
-+			feature}
-+	This option lets you choose which characters might cause a line
-+	break if 'linebreak' is on.  Only works for ASCII and also for 8-bit
-+	characters when 'encoding' is an 8-bit encoding.
-+
-+						*'browsedir'* *'bsdir'*
-+'browsedir' 'bsdir'	string	(default: "last")
-+			global
-+			{not in Vi} {only for Motif, Athena, GTK, Mac and
-+			Win32 GUI}
-+	Which directory to use for the file browser:
-+	   last		Use same directory as with last file browser, where a
-+			file was opened or saved.
-+	   buffer	Use the directory of the related buffer.
-+	   current	Use the current directory.
-+	   {path}	Use the specified directory
-+
-+						*'bufhidden'* *'bh'*
-+'bufhidden' 'bh'	string (default: "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+quickfix|
-+			feature}
-+	This option specifies what happens when a buffer is no longer
-+	displayed in a window:
-+	  <empty>	follow the global 'hidden' option
-+	  hide		hide the buffer (don't unload it), also when 'hidden'
-+			is not set
-+	  unload	unload the buffer, also when 'hidden' is set or using
-+			|:hide|
-+	  delete	delete the buffer from the buffer list, also when
-+			'hidden' is set or using |:hide|, like using
-+			|:bdelete|
-+	  wipe		wipe out the buffer from the buffer list, also when
-+			'hidden' is set or using |:hide|, like using
-+			|:bwipeout|
-+
-+	CAREFUL: when "unload", "delete" or "wipe" is used changes in a buffer
-+	are lost without a warning.
-+	This option is used together with 'buftype' and 'swapfile' to specify
-+	special kinds of buffers.   See |special-buffers|.
-+
-+			*'buflisted'* *'bl'* *'nobuflisted'* *'nobl'* *E85*
-+'buflisted' 'bl'	boolean (default: on)
-+			local to buffer
-+			{not in Vi}
-+	When this option is set, the buffer shows up in the buffer list.  If
-+	it is reset it is not used for ":bnext", "ls", the Buffers menu, etc.
-+	This option is reset by Vim for buffers that are only used to remember
-+	a file name or marks.  Vim sets it when starting to edit a buffer.
-+	But not when moving to a buffer with ":buffer".
-+
-+						*'buftype'* *'bt'* *E382*
-+'buftype' 'bt'		string (default: "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+quickfix|
-+			feature}
-+	The value of this option specifies the type of a buffer:
-+	  <empty>	normal buffer
-+	  nofile	buffer which is not related to a file and will not be
-+			written
-+	  nowrite	buffer which will not be written
-+	  acwrite	buffer which will always be written with BufWriteCmd
-+			autocommands. {not available when compiled without the
-+			|+autocmd| feature}
-+	  quickfix	quickfix buffer, contains list of errors |:cwindow|
-+			or list of locations |:lwindow|
-+	  help		help buffer (you are not supposed to set this
-+			manually)
-+
-+	This option is used together with 'bufhidden' and 'swapfile' to
-+	specify special kinds of buffers.   See |special-buffers|.
-+
-+	Be careful with changing this option, it can have many side effects!
-+
-+	A "quickfix" buffer is only used for the error list and the location
-+	list.  This value is set by the |:cwindow| and |:lwindow| commands and
-+	you are not supposed to change it.
-+
-+	"nofile" and "nowrite" buffers are similar:
-+	both:		The buffer is not to be written to disk, ":w" doesn't
-+			work (":w filename" does work though).
-+	both:		The buffer is never considered to be |'modified'|.
-+			There is no warning when the changes will be lost, for
-+			example when you quit Vim.
-+	both:		A swap file is only created when using too much memory
-+			(when 'swapfile' has been reset there is never a swap
-+			file).
-+	nofile only:	The buffer name is fixed, it is not handled like a
-+			file name.  It is not modified in response to a |:cd|
-+			command.
-+							*E676*
-+	"acwrite" implies that the buffer name is not related to a file, like
-+	"nofile", but it will be written.  Thus, in contrast to "nofile" and
-+	"nowrite", ":w" does work and a modified buffer can't be abandoned
-+	without saving.  For writing there must be matching |BufWriteCmd|,
-+	|FileWriteCmd| or |FileAppendCmd| autocommands.
-+
-+						*'casemap'* *'cmp'*
-+'casemap' 'cmp'		string	(default: "internal,keepascii")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+	Specifies details about changing the case of letters.  It may contain
-+	these words, separated by a comma:
-+	internal	Use internal case mapping functions, the current
-+			locale does not change the case mapping.  This only
-+			matters when 'encoding' is a Unicode encoding,
-+			"latin1" or "iso-8859-15".  When "internal" is
-+			omitted, the towupper() and towlower() system library
-+			functions are used when available.
-+	keepascii	For the ASCII characters (0x00 to 0x7f) use the US
-+			case mapping, the current locale is not effective.
-+			This probably only matters for Turkish.
-+
-+						*'cdpath'* *'cd'* *E344* *E346*
-+'cdpath' 'cd'		string	(default: equivalent to $CDPATH or ",,")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+file_in_path| feature}
-+	This is a list of directories which will be searched when using the
-+	|:cd| and |:lcd| commands, provided that the directory being searched
-+	for has a relative path, not an absolute part starting with "/", "./"
-+	or "../", the 'cdpath' option is not used then.
-+	The 'cdpath' option's value has the same form and semantics as
-+	|'path'|.  Also see |file-searching|.
-+	The default value is taken from $CDPATH, with a "," prepended to look
-+	in the current directory first.
-+	If the default value taken from $CDPATH is not what you want, include
-+	a modified version of the following command in your vimrc file to
-+	override it: >
-+	  :let &cdpath = ',' . substitute(substitute($CDPATH, '[, ]', '\\\0', 'g'), ':', ',', 'g')
-+<	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+	(parts of 'cdpath' can be passed to the shell to expand file names).
-+
-+						*'cedit'*
-+'cedit'			string	(Vi default: "", Vim default: CTRL-F)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+vertsplit|
-+			feature}
-+	The key used in Command-line Mode to open the command-line window.
-+	The default is CTRL-F when 'compatible' is off.
-+	Only non-printable keys are allowed.
-+	The key can be specified as a single character, but it is difficult to
-+	type.  The preferred way is to use the <> notation.  Examples: >
-+		:set cedit=<C-Y>
-+		:set cedit=<Esc>
-+<	|Nvi| also has this option, but it only uses the first character.
-+	See |cmdwin|.
-+
-+				*'charconvert'* *'ccv'* *E202* *E214* *E513*
-+'charconvert' 'ccv'	string (default "")
-+			global
-+			{only available when compiled with the |+multi_byte|
-+			and |+eval| features}
-+			{not in Vi}
-+	An expression that is used for character encoding conversion.  It is
-+	evaluated when a file that is to be read or has been written has a
-+	different encoding from what is desired.
-+	'charconvert' is not used when the internal iconv() function is
-+	supported and is able to do the conversion.  Using iconv() is
-+	preferred, because it is much faster.
-+	'charconvert' is not used when reading stdin |--|, because there is no
-+	file to convert from.  You will have to save the text in a file first.
-+	The expression must return zero or an empty string for success,
-+	non-zero for failure.
-+	The possible encoding names encountered are in 'encoding'.
-+	Additionally, names given in 'fileencodings' and 'fileencoding' are
-+	used.
-+	Conversion between "latin1", "unicode", "ucs-2", "ucs-4" and "utf-8"
-+	is done internally by Vim, 'charconvert' is not used for this.
-+	'charconvert' is also used to convert the viminfo file, if the 'c'
-+	flag is present in 'viminfo'.  Also used for Unicode conversion.
-+	Example: >
-+		set charconvert=CharConvert()
-+		fun CharConvert()
-+		  system("recode "
-+			\ . v:charconvert_from . ".." . v:charconvert_to
-+			\ . " <" . v:fname_in . " >" v:fname_out)
-+		  return v:shell_error
-+		endfun
-+<	The related Vim variables are:
-+		v:charconvert_from	name of the current encoding
-+		v:charconvert_to	name of the desired encoding
-+		v:fname_in		name of the input file
-+		v:fname_out		name of the output file
-+	Note that v:fname_in and v:fname_out will never be the same.
-+	Note that v:charconvert_from and v:charconvert_to may be different
-+	from 'encoding'.  Vim internally uses UTF-8 instead of UCS-2 or UCS-4.
-+	Encryption is not done by Vim when using 'charconvert'.  If you want
-+	to encrypt the file after conversion, 'charconvert' should take care
-+	of this.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+				   *'cindent'* *'cin'* *'nocindent'* *'nocin'*
-+'cindent' 'cin'		boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+cindent|
-+			feature}
-+	Enables automatic C program indenting.  See 'cinkeys' to set the keys
-+	that trigger reindenting in insert mode and 'cinoptions' to set your
-+	preferred indent style.
-+	If 'indentexpr' is not empty, it overrules 'cindent'.
-+	If 'lisp' is not on and both 'indentexpr' and 'equalprg' are empty,
-+	the "=" operator indents using this algorithm rather than calling an
-+	external program.
-+	See |C-indenting|.
-+	When you don't like the way 'cindent' works, try the 'smartindent'
-+	option or 'indentexpr'.
-+	This option is not used when 'paste' is set.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+							*'cinkeys'* *'cink'*
-+'cinkeys' 'cink'	string	(default "0{,0},0),:,0#,!^F,o,O,e")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+cindent|
-+			feature}
-+	A list of keys that, when typed in Insert mode, cause reindenting of
-+	the current line.  Only used if 'cindent' is on and 'indentexpr' is
-+	empty.
-+	For the format of this option see |cinkeys-format|.
-+	See |C-indenting|.
-+
-+						*'cinoptions'* *'cino'*
-+'cinoptions' 'cino'	string	(default "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+cindent|
-+			feature}
-+	The 'cinoptions' affect the way 'cindent' reindents lines in a C
-+	program.  See |cinoptions-values| for the values of this option, and
-+	|C-indenting| for info on C indenting in general.
-+
-+
-+						*'cinwords'* *'cinw'*
-+'cinwords' 'cinw'	string	(default "if,else,while,do,for,switch")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without both the
-+			|+cindent| and the |+smartindent| features}
-+	These keywords start an extra indent in the next line when
-+	'smartindent' or 'cindent' is set.  For 'cindent' this is only done at
-+	an appropriate place (inside {}).
-+	Note that 'ignorecase' isn't used for 'cinwords'.  If case doesn't
-+	matter, include the keyword both the uppercase and lowercase:
-+	"if,If,IF".
-+
-+						*'clipboard'* *'cb'*
-+'clipboard' 'cb'	string	(default "autoselect,exclude:cons\|linux"
-+						  for X-windows, "" otherwise)
-+			global
-+			{not in Vi}
-+			{only in GUI versions or when the |+xterm_clipboard|
-+			feature is included}
-+	This option is a list of comma separated names.
-+	These names are recognized:
-+
-+	unnamed		When included, Vim will use the clipboard register '*'
-+			for all yank, delete, change and put operations which
-+			would normally go to the unnamed register.  When a
-+			register is explicitly specified, it will always be
-+			used regardless of whether "unnamed" is in 'clipboard'
-+			or not.  The clipboard register can always be
-+			explicitly accessed using the "* notation.  Also see
-+			|gui-clipboard|.
-+
-+	unnamedplus	A variant of "unnamed" flag which uses the clipboard
-+			register '+' (|quoteplus|) instead of register '*' for
-+			all operations except yank.  Yank shall copy the text
-+			into register '+' and also into '*' when "unnamed" is
-+			included.
-+			Only available with the |+x11| feature.
-+			Availability can be checked with: >
-+				if has('unnamedplus')
-+<
-+	autoselect	Works like the 'a' flag in 'guioptions': If present,
-+			then whenever Visual mode is started, or the Visual
-+			area extended, Vim tries to become the owner of the
-+			windowing system's global selection or put the
-+			selected text on the clipboard used by the selection
-+			register "*.  See |guioptions_a| and |quotestar| for
-+			details.  When the GUI is active, the 'a' flag in
-+			'guioptions' is used, when the GUI is not active, this
-+			"autoselect" flag is used.
-+			Also applies to the modeless selection.
-+
-+	autoselectml	Like "autoselect", but for the modeless selection
-+			only.  Compare to the 'A' flag in 'guioptions'.
-+
-+	html		When the clipboard contains HTML, use this when
-+			pasting.  When putting text on the clipboard, mark it
-+			as HTML.  This works to copy rendered HTML from
-+			Firefox, paste it as raw HTML in Vim, select the HTML
-+			in Vim and paste it in a rich edit box in Firefox.
-+			You probably want to add this only temporarily,
-+			possibly use BufEnter autocommands.
-+			Only supported for GTK version 2 and later.
-+			Only available with the |+multi_byte| feature.
-+
-+	exclude:{pattern}
-+			Defines a pattern that is matched against the name of
-+			the terminal 'term'.  If there is a match, no
-+			connection will be made to the X server.  This is
-+			useful in this situation:
-+			- Running Vim in a console.
-+			- $DISPLAY is set to start applications on another
-+			  display.
-+			- You do not want to connect to the X server in the
-+			  console, but do want this in a terminal emulator.
-+			To never connect to the X server use: >
-+				exclude:.*
-+<			This has the same effect as using the |-X| argument.
-+			Note that when there is no connection to the X server
-+			the window title won't be restored and the clipboard
-+			cannot be accessed.
-+			The value of 'magic' is ignored, {pattern} is
-+			interpreted as if 'magic' was on.
-+			The rest of the option value will be used for
-+			{pattern}, this must be the last entry.
-+
-+						*'cmdheight'* *'ch'*
-+'cmdheight' 'ch'	number	(default 1)
-+			global
-+			{not in Vi}
-+	Number of screen lines to use for the command-line.  Helps avoiding
-+	|hit-enter| prompts.
-+	The value of this option is stored with the tab page, so that each tab
-+	page can have a different value.
-+
-+						*'cmdwinheight'* *'cwh'*
-+'cmdwinheight' 'cwh'	number	(default 7)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+vertsplit|
-+			feature}
-+	Number of screen lines to use for the command-line window. |cmdwin|
-+
-+						*'columns'* *'co'* *E594*
-+'columns' 'co'		number	(default 80 or terminal width)
-+			global
-+			{not in Vi}
-+	Number of columns of the screen.  Normally this is set by the terminal
-+	initialization and does not have to be set by hand.  Also see
-+	|posix-screen-size|.
-+	When Vim is running in the GUI or in a resizable window, setting this
-+	option will cause the window size to be changed.  When you only want
-+	to use the size for the GUI, put the command in your |gvimrc| file.
-+	When you set this option and Vim is unable to change the physical
-+	number of columns of the display, the display may be messed up.  For
-+	the GUI it is always possible and Vim limits the number of columns to
-+	what fits on the screen.  You can use this command to get the widest
-+	window possible: >
-+		:set columns=9999
-+<	Minimum value is 12, maximum value is 10000.
-+
-+					*'comments'* *'com'* *E524* *E525*
-+'comments' 'com'	string	(default
-+				"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+comments|
-+			feature}
-+	A comma separated list of strings that can start a comment line.  See
-+	|format-comments|.  See |option-backslash| about using backslashes to
-+	insert a space.
-+
-+					*'commentstring'* *'cms'* *E537*
-+'commentstring' 'cms'	string	(default "/*%s*/")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	A template for a comment.  The "%s" in the value is replaced with the
-+	comment text.  Currently only used to add markers for folding, see
-+	|fold-marker|.
-+
-+			*'compatible'* *'cp'* *'nocompatible'* *'nocp'*
-+'compatible' 'cp'	boolean	(default on, off when a |vimrc| or |gvimrc|
-+								file is found)
-+			global
-+			{not in Vi}
-+	This option has the effect of making Vim either more Vi-compatible, or
-+	make Vim behave in a more useful way.
-+	This is a special kind of option, because when it's set or reset,
-+	other options are also changed as a side effect.  CAREFUL: Setting or
-+	resetting this option can have a lot of unexpected effects: Mappings
-+	are interpreted in another way, undo behaves differently, etc.  If you
-+	set this option in your vimrc file, you should probably put it at the
-+	very start.
-+	By default this option is on and the Vi defaults are used for the
-+	options.  This default was chosen for those people who want to use Vim
-+	just like Vi, and don't even (want to) know about the 'compatible'
-+	option.
-+	When a |vimrc| or |gvimrc| file is found while Vim is starting up,
-+	this option is switched off, and all options that have not been
-+	modified will be set to the Vim defaults.  Effectively, this means
-+	that when a |vimrc| or |gvimrc| file exists, Vim will use the Vim
-+	defaults, otherwise it will use the Vi defaults.  (Note: This doesn't
-+	happen for the system-wide vimrc or gvimrc file, nor for a file given
-+	with the |-u| argument).  Also see |compatible-default| and
-+	|posix-compliance|.
-+	You can also set this option with the "-C" argument, and reset it with
-+	"-N".  See |-C| and |-N|.
-+	Switching this option off makes the Vim defaults be used for options
-+	that have a different Vi and Vim default value.  See the options
-+	marked with a '+' below.  Other options are not modified.
-+	At the moment this option is set, several other options will be set
-+	or reset to make Vim as Vi-compatible as possible.  See the table
-+	below.  This can be used if you want to revert to Vi compatible
-+	editing.
-+	See also 'cpoptions'.
-+
-+	option		+ set value	effect	~
-+
-+	'allowrevins'	  off		no CTRL-_ command
-+	'backupcopy'	  Unix: "yes"	  backup file is a copy
-+			  others: "auto"  copy or rename backup file
-+	'backspace'	  ""		normal backspace
-+	'backup'	  off		no backup file
-+	'cindent'	  off		no C code indentation
-+	'cedit'		+ ""		no key to open the |cmdwin|
-+	'cpoptions'	+ (all flags)	Vi-compatible flags
-+	'cscopetag'	  off		don't use cscope for ":tag"
-+	'cscopetagorder'  0		see |cscopetagorder|
-+	'cscopeverbose'	  off		see |cscopeverbose|
-+	'digraph'	  off		no digraphs
-+	'esckeys'	+ off		no <Esc>-keys in Insert mode
-+	'expandtab'	  off		tabs not expanded to spaces
-+	'fileformats'	+ ""		no automatic file format detection,
-+			  "dos,unix"	except for DOS, Windows and OS/2
-+	'formatoptions'	+ "vt"		Vi compatible formatting
-+	'gdefault'	  off		no default 'g' flag for ":s"
-+	'history'	+ 0		no commandline history
-+	'hkmap'		  off		no Hebrew keyboard mapping
-+	'hkmapp'	  off		no phonetic Hebrew keyboard mapping
-+	'hlsearch'	  off		no highlighting of search matches
-+	'incsearch'	  off		no incremental searching
-+	'indentexpr'	  ""		no indenting by expression
-+	'insertmode'	  off		do not start in Insert mode
-+	'iskeyword'	+ "@,48-57,_"	keywords contain alphanumeric
-+						characters and '_'
-+	'joinspaces'	  on		insert 2 spaces after period
-+	'modeline'	+ off		no modelines
-+	'more'		+ off		no pauses in listings
-+	'revins'	  off		no reverse insert
-+	'ruler'		  off		no ruler
-+	'scrolljump'	  1		no jump scroll
-+	'scrolloff'	  0		no scroll offset
-+	'shiftround'	  off		indent not rounded to shiftwidth
-+	'shortmess'	+ ""		no shortening of messages
-+	'showcmd'	+ off		command characters not shown
-+	'showmode'	+ off		current mode not shown
-+	'smartcase'	  off		no automatic ignore case switch
-+	'smartindent'	  off		no smart indentation
-+	'smarttab'	  off		no smart tab size
-+	'softtabstop'	  0		tabs are always 'tabstop' positions
-+	'startofline'	  on		goto startofline with some commands
-+	'tagrelative'	+ off		tag file names are not relative
-+	'textauto'	+ off		no automatic textmode detection
-+	'textwidth'	  0		no automatic line wrap
-+	'tildeop'	  off		tilde is not an operator
-+	'ttimeout'	  off		no terminal timeout
-+	'whichwrap'	+ ""		left-right movements don't wrap
-+	'wildchar'	+ CTRL-E	only when the current value is <Tab>
-+					use CTRL-E for cmdline completion
-+	'writebackup'	  on or off	depends on the |+writebackup| feature
-+
-+						*'complete'* *'cpt'* *E535*
-+'complete' 'cpt'	string	(default: ".,w,b,u,t,i")
-+			local to buffer
-+			{not in Vi}
-+	This option specifies how keyword completion |ins-completion| works
-+	when CTRL-P or CTRL-N are used.  It is also used for whole-line
-+	completion |i_CTRL-X_CTRL-L|.  It indicates the type of completion
-+	and the places to scan.  It is a comma separated list of flags:
-+	.	scan the current buffer ('wrapscan' is ignored)
-+	w	scan buffers from other windows
-+	b	scan other loaded buffers that are in the buffer list
-+	u	scan the unloaded buffers that are in the buffer list
-+	U	scan the buffers that are not in the buffer list
-+	k	scan the files given with the 'dictionary' option
-+	kspell  use the currently active spell checking |spell|
-+	k{dict}	scan the file {dict}.  Several "k" flags can be given,
-+		patterns are valid too.  For example: >
-+			:set cpt=k/usr/dict/*,k~/spanish
-+<	s	scan the files given with the 'thesaurus' option
-+	s{tsr}	scan the file {tsr}.  Several "s" flags can be given, patterns
-+		are valid too.
-+	i	scan current and included files
-+	d	scan current and included files for defined name or macro
-+		|i_CTRL-X_CTRL-D|
-+	]	tag completion
-+	t	same as "]"
-+
-+	Unloaded buffers are not loaded, thus their autocmds |:autocmd| are
-+	not executed, this may lead to unexpected completions from some files
-+	(gzipped files for example).  Unloaded buffers are not scanned for
-+	whole-line completion.
-+
-+	The default is ".,w,b,u,t,i", which means to scan:
-+	   1. the current buffer
-+	   2. buffers in other windows
-+	   3. other loaded buffers
-+	   4. unloaded buffers
-+	   5. tags
-+	   6. included files
-+
-+	As you can see, CTRL-N and CTRL-P can be used to do any 'iskeyword'-
-+	based expansion (e.g., dictionary |i_CTRL-X_CTRL-K|, included patterns
-+	|i_CTRL-X_CTRL-I|, tags |i_CTRL-X_CTRL-]| and normal expansions).
-+
-+						*'completefunc'* *'cfu'*
-+'completefunc' 'cfu'	string	(default: empty)
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+eval|
-+			or |+insert_expand| features}
-+	This option specifies a function to be used for Insert mode completion
-+	with CTRL-X CTRL-U. |i_CTRL-X_CTRL-U|
-+	See |complete-functions| for an explanation of how the function is
-+	invoked and what it should return.
-+
-+
-+						*'completeopt'* *'cot'*
-+'completeopt' 'cot'	string	(default: "menu,preview")
-+			global
-+			{not available when compiled without the
-+			|+insert_expand| feature}
-+			{not in Vi}
-+	A comma separated list of options for Insert mode completion
-+	|ins-completion|.  The supported values are:
-+
-+	   menu	    Use a popup menu to show the possible completions.  The
-+		    menu is only shown when there is more than one match and
-+		    sufficient colors are available.  |ins-completion-menu|
-+
-+	   menuone  Use the popup menu also when there is only one match.
-+		    Useful when there is additional information about the
-+		    match, e.g., what file it comes from.
-+
-+	   longest  Only insert the longest common text of the matches.  If
-+		    the menu is displayed you can use CTRL-L to add more
-+		    characters.  Whether case is ignored depends on the kind
-+		    of completion.  For buffer text the 'ignorecase' option is
-+		    used.
-+
-+	   preview  Show extra information about the currently selected
-+		    completion in the preview window.  Only works in
-+		    combination with "menu" or "menuone".
-+
-+
-+						*'concealcursor'* *'cocu'*
-+'concealcursor' 'cocu'	string (default: "")
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+conceal|
-+			feature}
-+	Sets the modes in which text in the cursor line can also be concealed.
-+	When the current mode is listed then concealing happens just like in
-+	other lines.
-+	  n		Normal mode
-+	  v		Visual mode
-+	  i		Insert mode
-+	  c		Command line editing, for 'incsearch'
-+
-+	'v' applies to all lines in the Visual area, not only the cursor.
-+	A useful value is "nc".  This is used in help files.  So long as you
-+	are moving around text is concealed, but when starting to insert text
-+	or selecting a Visual area the concealed text is displayed, so that
-+	you can see what you are doing.
-+	Keep in mind that the cursor position is not always where it's
-+	displayed.  E.g., when moving vertically it may change column.
-+
-+
-+'conceallevel' 'cole'		*'conceallevel'* *'cole'*
-+			number (default 0)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+conceal|
-+			feature}
-+	Determine how text with the "conceal" syntax attribute |:syn-conceal|
-+	is shown:
-+
-+	Value		Effect ~
-+	0		Text is shown normally
-+	1		Each block of concealed text is replaced with one
-+			character.  If the syntax item does not have a custom
-+			replacement character defined (see |:syn-cchar|) the
-+			character defined in 'listchars' is used (default is a
-+			space).
-+			It is highlighted with the "Conceal" highlight group.
-+	2		Concealed text is completely hidden unless it has a
-+			custom replacement character defined (see
-+			|:syn-cchar|).
-+	3		Concealed text is completely hidden.
-+
-+	Note: in the cursor line concealed text is not hidden, so that you can
-+	edit and copy the text.  This can be changed with the 'concealcursor'
-+	option.
-+
-+				*'confirm'* *'cf'* *'noconfirm'* *'nocf'*
-+'confirm' 'cf'		boolean (default off)
-+			global
-+			{not in Vi}
-+	When 'confirm' is on, certain operations that would normally
-+	fail because of unsaved changes to a buffer, e.g. ":q" and ":e",
-+	instead raise a |dialog| asking if you wish to save the current
-+	file(s).  You can still use a ! to unconditionally |abandon| a buffer.
-+	If 'confirm' is off you can still activate confirmation for one
-+	command only (this is most useful in mappings) with the |:confirm|
-+	command.
-+	Also see the |confirm()| function and the 'v' flag in 'guioptions'.
-+
-+			*'conskey'* *'consk'* *'noconskey'* *'noconsk'*
-+'conskey' 'consk'	boolean	(default off)
-+			global
-+			{not in Vi}  {only for MS-DOS}
-+	When on direct console I/O is used to obtain a keyboard character.
-+	This should work in most cases.  Also see |'bioskey'|.  Together,
-+	three methods of console input are available:
-+	'conskey'   'bioskey'	    action ~
-+	   on	     on or off	    direct console input
-+	   off		on	    BIOS
-+	   off		off	    STDIN
-+
-+			*'copyindent'* *'ci'* *'nocopyindent'* *'noci'*
-+'copyindent' 'ci'	boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+	Copy the structure of the existing lines indent when autoindenting a
-+	new line.  Normally the new indent is reconstructed by a series of
-+	tabs followed by spaces as required (unless |'expandtab'| is enabled,
-+	in which case only spaces are used).  Enabling this option makes the
-+	new line copy whatever characters were used for indenting on the
-+	existing line.  'expandtab' has no effect on these characters, a Tab
-+	remains a Tab.  If the new indent is greater than on the existing
-+	line, the remaining space is filled in the normal manner.
-+	NOTE: 'copyindent' is reset when 'compatible' is set.
-+	Also see 'preserveindent'.
-+
-+						*'cpoptions'* *'cpo'*
-+'cpoptions' 'cpo'	string	(Vim default: "aABceFs",
-+				 Vi default:  all flags)
-+			global
-+			{not in Vi}
-+	A sequence of single character flags.  When a character is present
-+	this indicates vi-compatible behavior.  This is used for things where
-+	not being vi-compatible is mostly or sometimes preferred.
-+	'cpoptions' stands for "compatible-options".
-+	Commas can be added for readability.
-+	To avoid problems with flags that are added in the future, use the
-+	"+=" and "-=" feature of ":set" |add-option-flags|.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+	NOTE: This option is set to the POSIX default value at startup when
-+	the Vi default value would be used and the $VIM_POSIX environment
-+	variable exists |posix|.  This means Vim tries to behave like the
-+	POSIX specification.
-+
-+	    contains	behavior	~
-+								*cpo-a*
-+		a	When included, a ":read" command with a file name
-+			argument will set the alternate file name for the
-+			current window.
-+								*cpo-A*
-+		A	When included, a ":write" command with a file name
-+			argument will set the alternate file name for the
-+			current window.
-+								*cpo-b*
-+		b	"\|" in a ":map" command is recognized as the end of
-+			the map command.  The '\' is included in the mapping,
-+			the text after the '|' is interpreted as the next
-+			command.  Use a CTRL-V instead of a backslash to
-+			include the '|' in the mapping.  Applies to all
-+			mapping, abbreviation, menu and autocmd commands.
-+			See also |map_bar|.
-+								*cpo-B*
-+		B	A backslash has no special meaning in mappings,
-+			abbreviations and the "to" part of the menu commands.
-+			Remove this flag to be able to use a backslash like a
-+			CTRL-V.  For example, the command ":map X \<Esc>"
-+			results in X being mapped to:
-+				'B' included:	"\^["	 (^[ is a real <Esc>)
-+				'B' excluded:	"<Esc>"  (5 characters)
-+				('<' excluded in both cases)
-+								*cpo-c*
-+		c	Searching continues at the end of any match at the
-+			cursor position, but not further than the start of the
-+			next line.  When not present searching continues
-+			one character from the cursor position.  With 'c'
-+			"abababababab" only gets three matches when repeating
-+			"/abab", without 'c' there are five matches.
-+								*cpo-C*
-+		C	Do not concatenate sourced lines that start with a
-+			backslash.  See |line-continuation|.
-+								*cpo-d*
-+		d	Using "./" in the 'tags' option doesn't mean to use
-+			the tags file relative to the current file, but the
-+			tags file in the current directory.
-+								*cpo-D*
-+		D	Can't use CTRL-K to enter a digraph after Normal mode
-+			commands with a character argument, like |r|, |f| and
-+			|t|.
-+								*cpo-e*
-+		e	When executing a register with ":@r", always add a
-+			<CR> to the last line, also when the register is not
-+			linewise.  If this flag is not present, the register
-+			is not linewise and the last line does not end in a
-+			<CR>, then the last line is put on the command-line
-+			and can be edited before hitting <CR>.
-+								*cpo-E*
-+		E	It is an error when using "y", "d", "c", "g~", "gu" or
-+			"gU" on an Empty region.  The operators only work when
-+			at least one character is to be operate on.  Example:
-+			This makes "y0" fail in the first column.
-+								*cpo-f*
-+		f	When included, a ":read" command with a file name
-+			argument will set the file name for the current buffer,
-+			if the current buffer doesn't have a file name yet.
-+								*cpo-F*
-+		F	When included, a ":write" command with a file name
-+			argument will set the file name for the current
-+			buffer, if the current buffer doesn't have a file name
-+			yet.  Also see |cpo-P|.
-+								*cpo-g*
-+		g	Goto line 1 when using ":edit" without argument.
-+								*cpo-H*
-+		H	When using "I" on a line with only blanks, insert
-+			before the last blank.  Without this flag insert after
-+			the last blank.
-+								*cpo-i*
-+		i	When included, interrupting the reading of a file will
-+			leave it modified.
-+								*cpo-I*
-+		I	When moving the cursor up or down just after inserting
-+			indent for 'autoindent', do not delete the indent.
-+								*cpo-j*
-+		j	When joining lines, only add two spaces after a '.',
-+			not after '!' or '?'.  Also see 'joinspaces'.
-+								*cpo-J*
-+		J	A |sentence| has to be followed by two spaces after
-+			the '.', '!' or '?'.  A <Tab> is not recognized as
-+			white space.
-+								*cpo-k*
-+		k	Disable the recognition of raw key codes in
-+			mappings, abbreviations, and the "to" part of menu
-+			commands.  For example, if <Key> sends ^[OA (where ^[
-+			is <Esc>), the command ":map X ^[OA" results in X
-+			being mapped to:
-+				'k' included:	"^[OA"	 (3 characters)
-+				'k' excluded:	"<Key>"  (one key code)
-+			Also see the '<' flag below.
-+								*cpo-K*
-+		K	Don't wait for a key code to complete when it is
-+			halfway a mapping.  This breaks mapping <F1><F1> when
-+			only part of the second <F1> has been read.  It
-+			enables cancelling the mapping by typing <F1><Esc>.
-+								*cpo-l*
-+		l	Backslash in a [] range in a search pattern is taken
-+			literally, only "\]", "\^", "\-" and "\\" are special.
-+			See |/[]|
-+			   'l' included: "/[ \t]"  finds <Space>, '\' and 't'
-+			   'l' excluded: "/[ \t]"  finds <Space> and <Tab>
-+			Also see |cpo-\|.
-+								*cpo-L*
-+		L	When the 'list' option is set, 'wrapmargin',
-+			'textwidth', 'softtabstop' and Virtual Replace mode
-+			(see |gR|) count a <Tab> as two characters, instead of
-+			the normal behavior of a <Tab>.
-+								*cpo-m*
-+		m	When included, a showmatch will always wait half a
-+			second.  When not included, a showmatch will wait half
-+			a second or until a character is typed.  |'showmatch'|
-+								*cpo-M*
-+		M	When excluded, "%" matching will take backslashes into
-+			account.  Thus in "( \( )" and "\( ( \)" the outer
-+			parenthesis match.  When included "%" ignores
-+			backslashes, which is Vi compatible.
-+								*cpo-n*
-+		n	When included, the column used for 'number' and
-+			'relativenumber' will also be used for text of wrapped
-+			lines.
-+								*cpo-o*
-+		o	Line offset to search command is not remembered for
-+			next search.
-+								*cpo-O*
-+		O	Don't complain if a file is being overwritten, even
-+			when it didn't exist when editing it.  This is a
-+			protection against a file unexpectedly created by
-+			someone else.  Vi didn't complain about this.
-+								*cpo-p*
-+		p	Vi compatible Lisp indenting.  When not present, a
-+			slightly better algorithm is used.
-+								*cpo-P*
-+		P	When included, a ":write" command that appends to a
-+			file will set the file name for the current buffer, if
-+			the current buffer doesn't have a file name yet and
-+			the 'F' flag is also included |cpo-F|.
-+								*cpo-q*
-+		q	When joining multiple lines leave the cursor at the
-+			position where it would be when joining two lines.
-+								*cpo-r*
-+		r	Redo ("." command) uses "/" to repeat a search
-+			command, instead of the actually used search string.
-+								*cpo-R*
-+		R	Remove marks from filtered lines.  Without this flag
-+			marks are kept like |:keepmarks| was used.
-+								*cpo-s*
-+		s	Set buffer options when entering the buffer for the
-+			first time.  This is like it is in Vim version 3.0.
-+			And it is the default.  If not present the options are
-+			set when the buffer is created.
-+								*cpo-S*
-+		S	Set buffer options always when entering a buffer
-+			(except 'readonly', 'fileformat', 'filetype' and
-+			'syntax').  This is the (most) Vi compatible setting.
-+			The options are set to the values in the current
-+			buffer.  When you change an option and go to another
-+			buffer, the value is copied.  Effectively makes the
-+			buffer options global to all buffers.
-+
-+			's'    'S'     copy buffer options
-+			no     no      when buffer created
-+			yes    no      when buffer first entered (default)
-+			 X     yes     each time when buffer entered (vi comp.)
-+								*cpo-t*
-+		t	Search pattern for the tag command is remembered for
-+			"n" command.  Otherwise Vim only puts the pattern in
-+			the history for search pattern, but doesn't change the
-+			last used search pattern.
-+								*cpo-u*
-+		u	Undo is Vi compatible.  See |undo-two-ways|.
-+								*cpo-v*
-+		v	Backspaced characters remain visible on the screen in
-+			Insert mode.  Without this flag the characters are
-+			erased from the screen right away.  With this flag the
-+			screen newly typed text overwrites backspaced
-+			characters.
-+								*cpo-w*
-+		w	When using "cw" on a blank character, only change one
-+			character and not all blanks until the start of the
-+			next word.
-+								*cpo-W*
-+		W	Don't overwrite a readonly file.  When omitted, ":w!"
-+			overwrites a readonly file, if possible.
-+								*cpo-x*
-+		x	<Esc> on the command-line executes the command-line.
-+			The default in Vim is to abandon the command-line,
-+			because <Esc> normally aborts a command.  |c_<Esc>|
-+								*cpo-X*
-+		X	When using a count with "R" the replaced text is
-+			deleted only once.  Also when repeating "R" with "."
-+			and a count.
-+								*cpo-y*
-+		y	A yank command can be redone with ".".
-+								*cpo-Z*
-+		Z	When using "w!" while the 'readonly' option is set,
-+			don't reset 'readonly'.
-+								*cpo-!*
-+		!	When redoing a filter command, use the last used
-+			external command, whatever it was.  Otherwise the last
-+			used -filter- command is used.
-+								*cpo-$*
-+		$	When making a change to one line, don't redisplay the
-+			line, but put a '$' at the end of the changed text.
-+			The changed text will be overwritten when you type the
-+			new text.  The line is redisplayed if you type any
-+			command that moves the cursor from the insertion
-+			point.
-+								*cpo-%*
-+		%	Vi-compatible matching is done for the "%" command.
-+			Does not recognize "#if", "#endif", etc.
-+			Does not recognize "/*" and "*/".
-+			Parens inside single and double quotes are also
-+			counted, causing a string that contains a paren to
-+			disturb the matching.  For example, in a line like
-+			"if (strcmp("foo(", s))" the first paren does not
-+			match the last one.  When this flag is not included,
-+			parens inside single and double quotes are treated
-+			specially.  When matching a paren outside of quotes,
-+			everything inside quotes is ignored.  When matching a
-+			paren inside quotes, it will find the matching one (if
-+			there is one).  This works very well for C programs.
-+			This flag is also used for other features, such as
-+			C-indenting.
-+								*cpo--*
-+		-	When included, a vertical movement command fails when
-+			it would go above the first line or below the last
-+			line.  Without it the cursor moves to the first or
-+			last line, unless it already was in that line.
-+			Applies to the commands "-", "k", CTRL-P, "+", "j",
-+			CTRL-N, CTRL-J and ":1234".
-+								*cpo-+*
-+		+	When included, a ":write file" command will reset the
-+			'modified' flag of the buffer, even though the buffer
-+			itself may still be different from its file.
-+								*cpo-star*
-+		*	Use ":*" in the same way as ":@".  When not included,
-+			":*" is an alias for ":'<,'>", select the Visual area.
-+								*cpo-<*
-+		<	Disable the recognition of special key codes in |<>|
-+			form in mappings, abbreviations, and the "to" part of
-+			menu commands.  For example, the command
-+			":map X <Tab>" results in X being mapped to:
-+				'<' included:	"<Tab>"  (5 characters)
-+				'<' excluded:	"^I"	 (^I is a real <Tab>)
-+			Also see the 'k' flag above.
-+								*cpo->*
-+		>	When appending to a register, put a line break before
-+			the appended text.
-+
-+	POSIX flags.  These are not included in the Vi default value, except
-+	when $VIM_POSIX was set on startup. |posix|
-+
-+	    contains	behavior	~
-+								*cpo-#*
-+		#	A count before "D", "o" and "O" has no effect.
-+								*cpo-&*
-+		&	When ":preserve" was used keep the swap file when
-+			exiting normally while this buffer is still loaded.
-+			This flag is tested when exiting.
-+								*cpo-\*
-+		\	Backslash in a [] range in a search pattern is taken
-+			literally, only "\]" is special  See |/[]|
-+			   '\' included: "/[ \-]"  finds <Space>, '\' and '-'
-+			   '\' excluded: "/[ \-]"  finds <Space> and '-'
-+			Also see |cpo-l|.
-+								*cpo-/*
-+		/	When "%" is used as the replacement string in a |:s|
-+			command, use the previous replacement string. |:s%|
-+								*cpo-{*
-+		{	The |{| and |}| commands also stop at a "{" character
-+			at the start of a line.
-+								*cpo-.*
-+		.	The ":chdir" and ":cd" commands fail if the current
-+			buffer is modified, unless ! is used.  Vim doesn't
-+			need this, since it remembers the full path of an
-+			opened file.
-+								*cpo-bar*
-+		|	The value of the $LINES and $COLUMNS environment
-+			variables overrule the terminal size values obtained
-+			with system specific functions.
-+
-+
-+						*'cryptmethod'* *'cm'*
-+'cryptmethod'		string	(default "zip")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	Method used for encryption when the buffer is written to a file:
-+							*pkzip*
-+	   zip		PkZip compatible method.  A weak kind of encryption.
-+			Backwards compatible with Vim 7.2 and older.
-+							*blowfish*
-+	   blowfish	Blowfish method.  Strong encryption.  Requires Vim 7.3
-+			or later, files can NOT be read by Vim 7.2 and older.
-+			This adds a "seed" to the file, every time you write
-+			the file the encrypted bytes will be different.
-+
-+	When reading an encrypted file 'cryptmethod' will be set automatically
-+	to the detected method of the file being read.  Thus if you write it
-+	without changing 'cryptmethod' the same method will be used.
-+	Changing 'cryptmethod' does not mark the file as modified, you have to
-+	explicitly write it, you don't get a warning unless there are other
-+	modifications.  Also see |:X|.
-+
-+	When setting the global value to an empty string, it will end up with
-+	the value "zip".  When setting the local value to an empty string the
-+	buffer will use the global value.
-+
-+	When a new encryption method is added in a later version of Vim, and
-+	the current version does not recognize it, you will get	*E821* .
-+	You need to edit this file with the later version of Vim.
-+
-+
-+						*'cscopepathcomp'* *'cspc'*
-+'cscopepathcomp' 'cspc'	number	(default 0)
-+			global
-+			{not available when compiled without the |+cscope|
-+			feature}
-+			{not in Vi}
-+	Determines how many components of the path to show in a list of tags.
-+	See |cscopepathcomp|.
-+
-+						*'cscopeprg'* *'csprg'*
-+'cscopeprg' 'csprg'	string	(default "cscope")
-+			global
-+			{not available when compiled without the |+cscope|
-+			feature}
-+			{not in Vi}
-+	Specifies the command to execute cscope.  See |cscopeprg|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'cscopequickfix'* *'csqf'*
-+'cscopequickfix' 'csqf' string	(default "")
-+			global
-+			{not available when compiled without the |+cscope|
-+			or |+quickfix| features}
-+			{not in Vi}
-+	Specifies whether to use quickfix window to show cscope results.
-+	See |cscopequickfix|.
-+
-+				*'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
-+'cscopetag' 'cst'	boolean (default off)
-+			global
-+			{not available when compiled without the |+cscope|
-+			feature}
-+			{not in Vi}
-+	Use cscope for tag commands.  See |cscope-options|.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'cscopetagorder'* *'csto'*
-+'cscopetagorder' 'csto'	number	(default 0)
-+			global
-+			{not available when compiled without the |+cscope|
-+			feature}
-+			{not in Vi}
-+	Determines the order in which ":cstag" performs a search.  See
-+	|cscopetagorder|.
-+	NOTE: This option is set to 0 when 'compatible' is set.
-+
-+					*'cscopeverbose'* *'csverb'*
-+					*'nocscopeverbose'* *'nocsverb'*
-+'cscopeverbose' 'csverb' boolean (default off)
-+			global
-+			{not available when compiled without the |+cscope|
-+			feature}
-+			{not in Vi}
-+	Give messages when adding a cscope database.  See |cscopeverbose|.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+			*'cursorbind'* *'crb'* *'nocursorbind'* *'nocrb'*
-+'cursorbind' 'crb'	boolean  (default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+cursorbind|
-+			feature}
-+	When this option is set, as the cursor in the current
-+	window moves other cursorbound windows (windows that also have
-+	this option set) move their cursors to the corresponding line and
-+	column.  This option is useful for viewing the
-+	differences between two versions of a file (see 'diff'); in diff mode,
-+	inserted and deleted lines (though not characters within a line) are
-+	taken into account.
-+
-+
-+			*'cursorcolumn'* *'cuc'* *'nocursorcolumn'* *'nocuc'*
-+'cursorcolumn' 'cuc'	boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	Highlight the screen column of the cursor with CursorColumn
-+	|hl-CursorColumn|.  Useful to align text.  Will make screen redrawing
-+	slower.
-+	If you only want the highlighting in the current window you can use
-+	these autocommands: >
-+		au WinLeave * set nocursorline nocursorcolumn
-+		au WinEnter * set cursorline cursorcolumn
-+<
-+
-+			*'cursorline'* *'cul'* *'nocursorline'* *'nocul'*
-+'cursorline' 'cul'	boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	Highlight the screen line of the cursor with CursorLine
-+	|hl-CursorLine|.  Useful to easily spot the cursor.  Will make screen
-+	redrawing slower.
-+	When Visual mode is active the highlighting isn't used to make it
-+	easier to see the selected text.
-+
-+
-+						*'debug'*
-+'debug'			string	(default "")
-+			global
-+			{not in Vi}
-+	These values can be used:
-+	msg	Error messages that would otherwise be omitted will be given
-+		anyway.
-+	throw	Error messages that would otherwise be omitted will be given
-+		anyway and also throw an exception and set |v:errmsg|.
-+	beep	A message will be given when otherwise only a beep would be
-+		produced.
-+	The values can be combined, separated by a comma.
-+	"msg" and "throw" are useful for debugging 'foldexpr', 'formatexpr' or
-+	'indentexpr'.
-+
-+						*'define'* *'def'*
-+'define' 'def'		string	(default "^\s*#\s*define")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	Pattern to be used to find a macro definition.  It is a search
-+	pattern, just like for the "/" command.  This option is used for the
-+	commands like "[i" and "[d" |include-search|.  The 'isident' option is
-+	used to recognize the defined name after the match:
-+		{match with 'define'}{non-ID chars}{defined name}{non-ID char}
-+	See |option-backslash| about inserting backslashes to include a space
-+	or backslash.
-+	The default value is for C programs.  For C++ this value would be
-+	useful, to include const type declarations: >
-+		^\(#\s*define\|[a-z]*\s*const\s*[a-z]*\)
-+<	When using the ":set" command, you need to double the backslashes!
-+
-+			*'delcombine'* *'deco'* *'nodelcombine'* *'nodeco'*
-+'delcombine' 'deco'	boolean (default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+	If editing Unicode and this option is set, backspace and Normal mode
-+	"x" delete each combining character on its own.  When it is off (the
-+	default) the character along with its combining characters are
-+	deleted.
-+	Note: When 'delcombine' is set "xx" may work different from "2x"!
-+
-+	This is useful for Arabic, Hebrew and many other languages where one
-+	may have combining characters overtop of base characters, and want
-+	to remove only the combining ones.
-+
-+						*'dictionary'* *'dict'*
-+'dictionary' 'dict'	string	(default "")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	List of file names, separated by commas, that are used to lookup words
-+	for keyword completion commands |i_CTRL-X_CTRL-K|.  Each file should
-+	contain a list of words.  This can be one word per line, or several
-+	words per line, separated by non-keyword characters (white space is
-+	preferred).  Maximum line length is 510 bytes.
-+	When this option is empty, or an entry "spell" is present, spell
-+	checking is enabled the currently active spelling is used. |spell|
-+	To include a comma in a file name precede it with a backslash.  Spaces
-+	after a comma are ignored, otherwise spaces are included in the file
-+	name.  See |option-backslash| about using backslashes.
-+	This has nothing to do with the |Dictionary| variable type.
-+	Where to find a list of words?
-+	- On FreeBSD, there is the file "/usr/share/dict/words".
-+	- In the Simtel archive, look in the "msdos/linguist" directory.
-+	- In "miscfiles" of the GNU collection.
-+	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	directories from the list.  This avoids problems when a future version
-+	uses another default.
-+	Backticks cannot be used in this option for security reasons.
-+
-+							*'diff'* *'nodiff'*
-+'diff'			boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+diff|
-+			feature}
-+	Join the current window in the group of windows that shows differences
-+	between files.  See |vimdiff|.
-+
-+						*'dex'* *'diffexpr'*
-+'diffexpr' 'dex'	string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+diff|
-+			feature}
-+	Expression which is evaluated to obtain an ed-style diff file from two
-+	versions of a file.  See |diff-diffexpr|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'dip'* *'diffopt'*
-+'diffopt' 'dip'		string	(default "filler")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+diff|
-+			feature}
-+	Option settings for diff mode.  It can consist of the following items.
-+	All are optional.  Items must be separated by a comma.
-+
-+		filler		Show filler lines, to keep the text
-+				synchronized with a window that has inserted
-+				lines at the same position.  Mostly useful
-+				when windows are side-by-side and 'scrollbind'
-+				is set.
-+
-+		context:{n}	Use a context of {n} lines between a change
-+				and a fold that contains unchanged lines.
-+				When omitted a context of six lines is used.
-+				See |fold-diff|.
-+
-+		icase		Ignore changes in case of text.  "a" and "A"
-+				are considered the same.  Adds the "-i" flag
-+				to the "diff" command if 'diffexpr' is empty.
-+
-+		iwhite		Ignore changes in amount of white space.  Adds
-+				the "-b" flag to the "diff" command if
-+				'diffexpr' is empty.  Check the documentation
-+				of the "diff" command for what this does
-+				exactly.  It should ignore adding trailing
-+				white space, but not leading white space.
-+
-+		horizontal	Start diff mode with horizontal splits (unless
-+				explicitly specified otherwise).
-+
-+		vertical	Start diff mode with vertical splits (unless
-+				explicitly specified otherwise).
-+
-+		foldcolumn:{n}	Set the 'foldcolumn' option to {n} when
-+				starting diff mode.  Without this 2 is used.
-+
-+	Examples: >
-+
-+		:set diffopt=filler,context:4
-+		:set diffopt=
-+		:set diffopt=filler,foldcolumn:3
-+<
-+				     *'digraph'* *'dg'* *'nodigraph'* *'nodg'*
-+'digraph' 'dg'		boolean	(default off)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+digraphs|
-+			feature}
-+	Enable the entering of digraphs in Insert mode with {char1} <BS>
-+	{char2}.  See |digraphs|.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'directory'* *'dir'*
-+'directory' 'dir'	string	(default for Amiga: ".,t:",
-+				 for MS-DOS and Win32: ".,c:\tmp,c:\temp"
-+				 for Unix: ".,~/tmp,/var/tmp,/tmp")
-+			global
-+	List of directory names for the swap file, separated with commas.
-+	- The swap file will be created in the first directory where this is
-+	  possible.
-+	- Empty means that no swap file will be used (recovery is
-+	  impossible!).
-+	- A directory "." means to put the swap file in the same directory as
-+	  the edited file.  On Unix, a dot is prepended to the file name, so
-+	  it doesn't show in a directory listing.  On MS-Windows the "hidden"
-+	  attribute is set and a dot prepended if possible.
-+	- A directory starting with "./" (or ".\" for MS-DOS et al.) means to
-+	  put the swap file relative to where the edited file is.  The leading
-+	  "." is replaced with the path name of the edited file.
-+	- For Unix and Win32, if a directory ends in two path separators "//"
-+	  or "\\", the swap file name will be built from the complete path to
-+	  the file with all path separators substituted to percent '%' signs.
-+	  This will ensure file name uniqueness in the preserve directory.
-+	  On Win32, when a separating comma is following, you must use "//",
-+	  since "\\" will include the comma in the file name.
-+	- Spaces after the comma are ignored, other spaces are considered part
-+	  of the directory name.  To have a space at the start of a directory
-+	  name, precede it with a backslash.
-+	- To include a comma in a directory name precede it with a backslash.
-+	- A directory name may end in an ':' or '/'.
-+	- Environment variables are expanded |:set_env|.
-+	- Careful with '\' characters, type one before a space, type two to
-+	  get one in the option (see |option-backslash|), for example: >
-+	    :set dir=c:\\tmp,\ dir\\,with\\,commas,\\\ dir\ with\ spaces
-+<	- For backwards compatibility with Vim version 3.0 a '>' at the start
-+	  of the option is removed.
-+	Using "." first in the list is recommended.  This means that editing
-+	the same file twice will result in a warning.  Using "/tmp" on Unix is
-+	discouraged: When the system crashes you lose the swap file.
-+	"/var/tmp" is often not cleared when rebooting, thus is a better
-+	choice than "/tmp".  But it can contain a lot of files, your swap
-+	files get lost in the crowd.  That is why a "tmp" directory in your
-+	home directory is tried first.
-+	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	directories from the list.  This avoids problems when a future version
-+	uses another default.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+	{Vi: directory to put temp file in, defaults to "/tmp"}
-+
-+					*'display'* *'dy'*
-+'display' 'dy'		string	(default "")
-+			global
-+			{not in Vi}
-+	Change the way text is displayed.  This is comma separated list of
-+	flags:
-+	lastline	When included, as much as possible of the last line
-+			in a window will be displayed.  When not included, a
-+			last line that doesn't fit is replaced with "@" lines.
-+	uhex		Show unprintable characters hexadecimal as <xx>
-+			instead of using ^C and ~C.
-+
-+						*'eadirection'* *'ead'*
-+'eadirection' 'ead'	string	(default "both")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+vertsplit|
-+			feature}
-+	Tells when the 'equalalways' option applies:
-+		ver	vertically, width of windows is not affected
-+		hor	horizontally, height of windows is not affected
-+		both	width and height of windows is affected
-+
-+			   *'ed'* *'edcompatible'* *'noed'* *'noedcompatible'*
-+'edcompatible' 'ed'	boolean	(default off)
-+			global
-+	Makes the 'g' and 'c' flags of the ":substitute" command to be
-+	toggled each time the flag is given.  See |complex-change|.  See
-+	also 'gdefault' option.
-+	Switching this option on is discouraged!
-+
-+					*'encoding'* *'enc'* *E543*
-+'encoding' 'enc'	string (default: "latin1" or value from $LANG)
-+			global
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+			{not in Vi}
-+	Sets the character encoding used inside Vim.  It applies to text in
-+	the buffers, registers, Strings in expressions, text stored in the
-+	viminfo file, etc.  It sets the kind of characters which Vim can work
-+	with.  See |encoding-names| for the possible values.
-+
-+	NOTE: Changing this option will not change the encoding of the
-+	existing text in Vim.  It may cause non-ASCII text to become invalid.
-+	It should normally be kept at its default value, or set when Vim
-+	starts up.  See |multibyte|.  To reload the menus see |:menutrans|.
-+
-+	This option cannot be set from a |modeline|.  It would most likely
-+	corrupt the text.
-+
-+	NOTE: For GTK+ 2 it is highly recommended to set 'encoding' to
-+	"utf-8".  Although care has been taken to allow different values of
-+	'encoding', "utf-8" is the natural choice for the environment and
-+	avoids unnecessary conversion overhead.  "utf-8" has not been made
-+	the default to prevent different behavior of the GUI and terminal
-+	versions, and to avoid changing the encoding of newly created files
-+	without your knowledge (in case 'fileencodings' is empty).
-+
-+	The character encoding of files can be different from 'encoding'.
-+	This is specified with 'fileencoding'.  The conversion is done with
-+	iconv() or as specified with 'charconvert'.
-+
-+	If you need to know whether 'encoding' is a multi-byte encoding, you
-+	can use: >
-+		if has("multi_byte_encoding")
-+<
-+	Normally 'encoding' will be equal to your current locale.  This will
-+	be the default if Vim recognizes your environment settings.  If
-+	'encoding' is not set to the current locale, 'termencoding' must be
-+	set to convert typed and displayed text.  See |encoding-table|.
-+
-+	When you set this option, it fires the |EncodingChanged| autocommand
-+	event so that you can set up fonts if necessary.
-+
-+	When the option is set, the value is converted to lowercase.  Thus
-+	you can set it with uppercase values too.  Underscores are translated
-+	to '-' signs.
-+	When the encoding is recognized, it is changed to the standard name.
-+	For example "Latin-1" becomes "latin1", "ISO_88592" becomes
-+	"iso-8859-2" and "utf8" becomes "utf-8".
-+
-+	Note: "latin1" is also used when the encoding could not be detected.
-+	This only works when editing files in the same encoding!  When the
-+	actual character set is not latin1, make sure 'fileencoding' and
-+	'fileencodings' are empty.  When conversion is needed, switch to using
-+	utf-8.
-+
-+	When "unicode", "ucs-2" or "ucs-4" is used, Vim internally uses utf-8.
-+	You don't notice this while editing, but it does matter for the
-+	|viminfo-file|.  And Vim expects the terminal to use utf-8 too.  Thus
-+	setting 'encoding' to one of these values instead of utf-8 only has
-+	effect for encoding used for files when 'fileencoding' is empty.
-+
-+	When 'encoding' is set to a Unicode encoding, and 'fileencodings' was
-+	not set yet, the default for 'fileencodings' is changed.
-+
-+			*'endofline'* *'eol'* *'noendofline'* *'noeol'*
-+'endofline' 'eol'	boolean	(default on)
-+			local to buffer
-+			{not in Vi}
-+	When writing a file and this option is off and the 'binary' option
-+	is on, no <EOL> will be written for the last line in the file.  This
-+	option is automatically set when starting to edit a new file, unless
-+	the file does not have an <EOL> for the last line in the file, in
-+	which case it is reset.  Normally you don't have to set or reset this
-+	option.  When 'binary' is off the value is not used when writing the
-+	file.  When 'binary' is on it is used to remember the presence of a
-+	<EOL> for the last line in the file, so that when you write the file
-+	the situation from the original file can be kept.  But you can change
-+	it if you want to.
-+
-+			     *'equalalways'* *'ea'* *'noequalalways'* *'noea'*
-+'equalalways' 'ea'	boolean	(default on)
-+			global
-+			{not in Vi}
-+	When on, all the windows are automatically made the same size after
-+	splitting or closing a window.  This also happens the moment the
-+	option is switched on.  When off, splitting a window will reduce the
-+	size of the current window and leave the other windows the same.  When
-+	closing a window the extra lines are given to the window next to it
-+	(depending on 'splitbelow' and 'splitright').
-+	When mixing vertically and horizontally split windows, a minimal size
-+	is computed and some windows may be larger if there is room.  The
-+	'eadirection' option tells in which direction the size is affected.
-+	Changing the height and width of a window can be avoided by setting
-+	'winfixheight' and 'winfixwidth', respectively.
-+	If a window size is specified when creating a new window sizes are
-+	currently not equalized (it's complicated, but may be implemented in
-+	the future).
-+
-+						*'equalprg'* *'ep'*
-+'equalprg' 'ep'		string	(default "")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	External program to use for "=" command.  When this option is empty
-+	the internal formatting functions are used; either 'lisp', 'cindent'
-+	or 'indentexpr'.  When Vim was compiled without internal formatting,
-+	the "indent" program is used.
-+	Environment variables are expanded |:set_env|.  See |option-backslash|
-+	about including spaces and backslashes.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+			*'errorbells'* *'eb'* *'noerrorbells'* *'noeb'*
-+'errorbells' 'eb'	boolean	(default off)
-+			global
-+	Ring the bell (beep or screen flash) for error messages.  This only
-+	makes a difference for error messages, the bell will be used always
-+	for a lot of errors without a message (e.g., hitting <Esc> in Normal
-+	mode).  See 'visualbell' on how to make the bell behave like a beep,
-+	screen flash or do nothing.
-+
-+						*'errorfile'* *'ef'*
-+'errorfile' 'ef'	string	(Amiga default: "AztecC.Err",
-+					others: "errors.err")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+quickfix|
-+			feature}
-+	Name of the errorfile for the QuickFix mode (see |:cf|).
-+	When the "-q" command-line argument is used, 'errorfile' is set to the
-+	following argument.  See |-q|.
-+	NOT used for the ":make" command.  See 'makeef' for that.
-+	Environment variables are expanded |:set_env|.
-+	See |option-backslash| about including spaces and backslashes.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'errorformat'* *'efm'*
-+'errorformat' 'efm'	string	(default is very long)
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+			{not available when compiled without the |+quickfix|
-+			feature}
-+	Scanf-like description of the format for the lines in the error file
-+	(see |errorformat|).
-+
-+				     *'esckeys'* *'ek'* *'noesckeys'* *'noek'*
-+'esckeys' 'ek'		boolean	(Vim default: on, Vi default: off)
-+			global
-+			{not in Vi}
-+	Function keys that start with an <Esc> are recognized in Insert
-+	mode.  When this option is off, the cursor and function keys cannot be
-+	used in Insert mode if they start with an <Esc>.  The advantage of
-+	this is that the single <Esc> is recognized immediately, instead of
-+	after one second.  Instead of resetting this option, you might want to
-+	try changing the values for 'timeoutlen' and 'ttimeoutlen'.  Note that
-+	when 'esckeys' is off, you can still map anything, but the cursor keys
-+	won't work by default.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+						*'eventignore'* *'ei'*
-+'eventignore' 'ei'	string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+autocmd|
-+			feature}
-+	A list of autocommand event names, which are to be ignored.
-+	When set to "all" or when "all" is one of the items, all autocommand
-+	events are ignored, autocommands will not be executed.
-+	Otherwise this is a comma separated list of event names.  Example: >
-+	    :set ei=WinEnter,WinLeave
-+<
-+				 *'expandtab'* *'et'* *'noexpandtab'* *'noet'*
-+'expandtab' 'et'	boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+	In Insert mode: Use the appropriate number of spaces to insert a
-+	<Tab>.  Spaces are used in indents with the '>' and '<' commands and
-+	when 'autoindent' is on.  To insert a real tab when 'expandtab' is
-+	on, use CTRL-V<Tab>.  See also |:retab| and |ins-expandtab|.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+					*'exrc'* *'ex'* *'noexrc'* *'noex'*
-+'exrc' 'ex'		boolean (default off)
-+			global
-+			{not in Vi}
-+	Enables the reading of .vimrc, .exrc and .gvimrc in the current
-+	directory.  If you switch this option on you should also consider
-+	setting the 'secure' option (see |initialization|).  Using a local
-+	.exrc, .vimrc or .gvimrc is a potential security leak, use with care!
-+	also see |.vimrc| and |gui-init|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+				*'fileencoding'* *'fenc'* *E213*
-+'fileencoding' 'fenc'	string (default: "")
-+			local to buffer
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+			{not in Vi}
-+	Sets the character encoding for the file of this buffer.
-+
-+	When 'fileencoding' is different from 'encoding', conversion will be
-+	done when writing the file.  For reading see below.
-+	When 'fileencoding' is empty, the same value as 'encoding' will be
-+	used (no conversion when reading or writing a file).
-+	Conversion will also be done when 'encoding' and 'fileencoding' are
-+	both a Unicode encoding and 'fileencoding' is not utf-8.  That's
-+	because internally Unicode is always stored as utf-8.
-+		WARNING: Conversion can cause loss of information!  When
-+		'encoding' is "utf-8" or another Unicode encoding, conversion
-+		is most likely done in a way that the reverse conversion
-+		results in the same text.  When 'encoding' is not "utf-8" some
-+		characters may be lost!
-+
-+	See 'encoding' for the possible values.  Additionally, values may be
-+	specified that can be handled by the converter, see
-+	|mbyte-conversion|.
-+
-+	When reading a file 'fileencoding' will be set from 'fileencodings'.
-+	To read a file in a certain encoding it won't work by setting
-+	'fileencoding', use the |++enc| argument.  One exception: when
-+	'fileencodings' is empty the value of 'fileencoding' is used.
-+	For a new file the global value of 'fileencoding' is used.
-+
-+	Prepending "8bit-" and "2byte-" has no meaning here, they are ignored.
-+	When the option is set, the value is converted to lowercase.  Thus
-+	you can set it with uppercase values too.  '_' characters are
-+	replaced with '-'.  If a name is recognized from the list for
-+	'encoding', it is replaced by the standard name.  For example
-+	"ISO8859-2" becomes "iso-8859-2".
-+
-+	When this option is set, after starting to edit a file, the 'modified'
-+	option is set, because the file would be different when written.
-+
-+	Keep in mind that changing 'fenc' from a modeline happens
-+	AFTER the text has been read, thus it applies to when the file will be
-+	written.  If you do set 'fenc' in a modeline, you might want to set
-+	'nomodified' to avoid not being able to ":q".
-+
-+	This option can not be changed when 'modifiable' is off.
-+
-+							*'fe'*
-+	NOTE: Before version 6.0 this option specified the encoding for the
-+	whole of Vim, this was a mistake.  Now use 'encoding' instead.  The
-+	old short name was 'fe', which is no longer used.
-+
-+					*'fileencodings'* *'fencs'*
-+'fileencodings' 'fencs'	string (default: "ucs-bom",
-+				    "ucs-bom,utf-8,default,latin1" when
-+				    'encoding' is set to a Unicode value)
-+			global
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+			{not in Vi}
-+	This is a list of character encodings considered when starting to edit
-+	an existing file.  When a file is read, Vim tries to use the first
-+	mentioned character encoding.  If an error is detected, the next one
-+	in the list is tried.  When an encoding is found that works,
-+	'fileencoding' is set to it.  If all fail, 'fileencoding' is set to
-+	an empty string, which means the value of 'encoding' is used.
-+		WARNING: Conversion can cause loss of information!  When
-+		'encoding' is "utf-8" (or one of the other Unicode variants)
-+		conversion is most likely done in a way that the reverse
-+		conversion results in the same text.  When 'encoding' is not
-+		"utf-8" some non-ASCII characters may be lost!  You can use
-+		the |++bad| argument to specify what is done with characters
-+		that can't be converted.
-+	For an empty file or a file with only ASCII characters most encodings
-+	will work and the first entry of 'fileencodings' will be used (except
-+	"ucs-bom", which requires the BOM to be present).  If you prefer
-+	another encoding use an BufReadPost autocommand event to test if your
-+	preferred encoding is to be used.  Example: >
-+		au BufReadPost * if search('\S', 'w') == 0 |
-+			\ set fenc=iso-2022-jp | endif
-+<	This sets 'fileencoding' to "iso-2022-jp" if the file does not contain
-+	non-blank characters.
-+	When the |++enc| argument is used then the value of 'fileencodings' is
-+	not used.
-+	Note that 'fileencodings' is not used for a new file, the global value
-+	of 'fileencoding' is used instead.  You can set it with: >
-+		:setglobal fenc=iso-8859-2
-+<	This means that a non-existing file may get a different encoding than
-+	an empty file.
-+	The special value "ucs-bom" can be used to check for a Unicode BOM
-+	(Byte Order Mark) at the start of the file.  It must not be preceded
-+	by "utf-8" or another Unicode encoding for this to work properly.
-+	An entry for an 8-bit encoding (e.g., "latin1") should be the last,
-+	because Vim cannot detect an error, thus the encoding is always
-+	accepted.
-+	The special value "default" can be used for the encoding from the
-+	environment.  This is the default value for 'encoding'.  It is useful
-+	when 'encoding' is set to "utf-8" and your environment uses a
-+	non-latin1 encoding, such as Russian.
-+	When 'encoding' is "utf-8" and a file contains an illegal byte
-+	sequence it won't be recognized as UTF-8.  You can use the |8g8|
-+	command to find the illegal byte sequence.
-+	WRONG VALUES:			WHAT'S WRONG:
-+		latin1,utf-8		"latin1" will always be used
-+		utf-8,ucs-bom,latin1	BOM won't be recognized in an utf-8
-+					file
-+		cp1250,latin1		"cp1250" will always be used
-+	If 'fileencodings' is empty, 'fileencoding' is not modified.
-+	See 'fileencoding' for the possible values.
-+	Setting this option does not have an effect until the next time a file
-+	is read.
-+
-+					*'fileformat'* *'ff'*
-+'fileformat' 'ff'	string (MS-DOS, MS-Windows, OS/2 default: "dos",
-+				Unix default: "unix",
-+				Macintosh default: "mac")
-+			local to buffer
-+			{not in Vi}
-+	This gives the <EOL> of the current buffer, which is used for
-+	reading/writing the buffer from/to a file:
-+	    dos	    <CR> <NL>
-+	    unix    <NL>
-+	    mac	    <CR>
-+	When "dos" is used, CTRL-Z at the end of a file is ignored.
-+	See |file-formats| and |file-read|.
-+	For the character encoding of the file see 'fileencoding'.
-+	When 'binary' is set, the value of 'fileformat' is ignored, file I/O
-+	works like it was set to "unix'.
-+	This option is set automatically when starting to edit a file and
-+	'fileformats' is not empty and 'binary' is off.
-+	When this option is set, after starting to edit a file, the 'modified'
-+	option is set, because the file would be different when written.
-+	This option can not be changed when 'modifiable' is off.
-+	For backwards compatibility: When this option is set to "dos",
-+	'textmode' is set, otherwise 'textmode' is reset.
-+
-+					*'fileformats'* *'ffs'*
-+'fileformats' 'ffs'	string (default:
-+				Vim+Vi	MS-DOS, MS-Windows OS/2: "dos,unix",
-+				Vim	Unix: "unix,dos",
-+				Vim	Mac: "mac,unix,dos",
-+				Vi	Cygwin: "unix,dos",
-+				Vi	others: "")
-+			global
-+			{not in Vi}
-+	This gives the end-of-line (<EOL>) formats that will be tried when
-+	starting to edit a new buffer and when reading a file into an existing
-+	buffer:
-+	- When empty, the format defined with 'fileformat' will be used
-+	  always.  It is not set automatically.
-+	- When set to one name, that format will be used whenever a new buffer
-+	  is opened.  'fileformat' is set accordingly for that buffer.  The
-+	  'fileformats' name will be used when a file is read into an existing
-+	  buffer, no matter what 'fileformat' for that buffer is set to.
-+	- When more than one name is present, separated by commas, automatic
-+	  <EOL> detection will be done when reading a file.  When starting to
-+	  edit a file, a check is done for the <EOL>:
-+	  1. If all lines end in <CR><NL>, and 'fileformats' includes "dos",
-+	     'fileformat' is set to "dos".
-+	  2. If a <NL> is found and 'fileformats' includes "unix", 'fileformat'
-+	     is set to "unix".  Note that when a <NL> is found without a
-+	     preceding <CR>, "unix" is preferred over "dos".
-+	  3. If 'fileformats' includes "mac", 'fileformat' is set to "mac".
-+	     This means that "mac" is only chosen when "unix" is not present,
-+	     or when no <NL> is found in the file, and when "dos" is not
-+	     present, or no <CR><NL> is present in the file.
-+	     Also if "unix" was first chosen, but the first <CR> is before
-+	     the first <NL> and there appears to be more <CR>'s than <NL>'s in
-+	     the file, then 'fileformat' is set to "mac".
-+	  4. If 'fileformat' is still not set, the first name from
-+	     'fileformats' is used.
-+	  When reading a file into an existing buffer, the same is done, but
-+	  this happens like 'fileformat' has been set appropriately for that
-+	  file only, the option is not changed.
-+	When 'binary' is set, the value of 'fileformats' is not used.
-+
-+	For systems with a Dos-like <EOL> (<CR><NL>), when reading files that
-+	are ":source"ed and for vimrc files, automatic <EOL> detection may be
-+	done:
-+	- When 'fileformats' is empty, there is no automatic detection.  Dos
-+	  format will be used.
-+	- When 'fileformats' is set to one or more names, automatic detection
-+	  is done.  This is based on the first <NL> in the file: If there is a
-+	  <CR> in front of it, Dos format is used, otherwise Unix format is
-+	  used.
-+	Also see |file-formats|.
-+	For backwards compatibility: When this option is set to an empty
-+	string or one format (no comma is included), 'textauto' is reset,
-+	otherwise 'textauto' is set.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+					*'filetype'* *'ft'*
-+'filetype' 'ft'		string (default: "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+autocmd|
-+			feature}
-+	When this option is set, the FileType autocommand event is triggered.
-+	All autocommands that match with the value of this option will be
-+	executed.  Thus the value of 'filetype' is used in place of the file
-+	name.
-+	Otherwise this option does not always reflect the current file type.
-+	This option is normally set when the file type is detected.  To enable
-+	this use the ":filetype on" command. |:filetype|
-+	Setting this option to a different value is most useful in a modeline,
-+	for a file for which the file type is not automatically recognized.
-+	Example, for in an IDL file:
-+		/* vim: set filetype=idl : */ ~
-+	|FileType| |filetypes|
-+	When a dot appears in the value then this separates two filetype
-+	names.  Example:
-+		/* vim: set filetype=c.doxygen : */ ~
-+	This will use the "c" filetype first, then the "doxygen" filetype.
-+	This works both for filetype plugins and for syntax files.  More than
-+	one dot may appear.
-+	Do not confuse this option with 'osfiletype', which is for the file
-+	type that is actually stored with the file.
-+	This option is not copied to another buffer, independent of the 's' or
-+	'S' flag in 'cpoptions'.
-+	Only normal file name characters can be used, "/\*?[|<>" are illegal.
-+
-+						*'fillchars'* *'fcs'*
-+'fillchars' 'fcs'	string	(default "vert:|,fold:-")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			and |+folding| features}
-+	Characters to fill the statuslines and vertical separators.
-+	It is a comma separated list of items:
-+
-+	  item		default		Used for ~
-+	  stl:c		' ' or '^'	statusline of the current window
-+	  stlnc:c	' ' or '-'	statusline of the non-current windows
-+	  vert:c	'|'		vertical separators |:vsplit|
-+	  fold:c	'-'		filling 'foldtext'
-+	  diff:c	'-'		deleted lines of the 'diff' option
-+
-+	Any one that is omitted will fall back to the default.  For "stl" and
-+	"stlnc" the space will be used when there is highlighting, '^' or '-'
-+	otherwise.
-+
-+	Example: >
-+	    :set fillchars=stl:^,stlnc:-,vert:\|,fold:-,diff:-
-+<	This is similar to the default, except that these characters will also
-+	be used when there is highlighting.
-+
-+	for "stl" and "stlnc" only single-byte values are supported.
-+
-+	The highlighting used for these items:
-+	  item		highlight group ~
-+	  stl:c		StatusLine		|hl-StatusLine|
-+	  stlnc:c	StatusLineNC		|hl-StatusLineNC|
-+	  vert:c	VertSplit		|hl-VertSplit|
-+	  fold:c	Folded			|hl-Folded|
-+	  diff:c	DiffDelete		|hl-DiffDelete|
-+
-+					*'fkmap'* *'fk'* *'nofkmap'* *'nofk'*
-+'fkmap' 'fk'		boolean (default off)			*E198*
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	When on, the keyboard is mapped for the Farsi character set.
-+	Normally you would set 'allowrevins' and use CTRL-_ in insert mode to
-+	toggle this option |i_CTRL-_|.  See |farsi.txt|.
-+
-+						*'foldclose'* *'fcl'*
-+'foldclose' 'fcl'	string (default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	When set to "all", a fold is closed when the cursor isn't in it and
-+	its level is higher than 'foldlevel'.  Useful if you want folds to
-+	automatically close when moving out of them.
-+
-+						*'foldcolumn'* *'fdc'*
-+'foldcolumn' 'fdc'	number (default 0)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	When non-zero, a column with the specified width is shown at the side
-+	of the window which indicates open and closed folds.  The maximum
-+	value is 12.
-+	See |folding|.
-+
-+			*'foldenable'* *'fen'* *'nofoldenable'* *'nofen'*
-+'foldenable' 'fen'	boolean (default on)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	When off, all folds are open.  This option can be used to quickly
-+	switch between showing all text unfolded and viewing the text with
-+	folds (including manually opened or closed folds).  It can be toggled
-+	with the |zi| command.  The 'foldcolumn' will remain blank when
-+	'foldenable' is off.
-+	This option is set by commands that create a new fold or close a fold.
-+	See |folding|.
-+
-+						*'foldexpr'* *'fde'*
-+'foldexpr' 'fde'	string (default: "0")
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			or |+eval| features}
-+	The expression used for when 'foldmethod' is "expr".  It is evaluated
-+	for each line to obtain its fold level.  See |fold-expr|.
-+
-+	The expression may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+	This option can't be set from a |modeline| when the 'diff' option is
-+	on.
-+
-+	It is not allowed to change text or jump to another window while
-+	evaluating 'foldexpr' |textlock|.
-+
-+						*'foldignore'* *'fdi'*
-+'foldignore' 'fdi'	string (default: "#")
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	Used only when 'foldmethod' is "indent".  Lines starting with
-+	characters in 'foldignore' will get their fold level from surrounding
-+	lines.  White space is skipped before checking for this character.
-+	The default "#" works well for C programs.  See |fold-indent|.
-+
-+						*'foldlevel'* *'fdl'*
-+'foldlevel' 'fdl'	number (default: 0)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	Sets the fold level: Folds with a higher level will be closed.
-+	Setting this option to zero will close all folds.  Higher numbers will
-+	close fewer folds.
-+	This option is set by commands like |zm|, |zM| and |zR|.
-+	See |fold-foldlevel|.
-+
-+						*'foldlevelstart'* *'fdls'*
-+'foldlevelstart' 'fdls'	number (default: -1)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	Sets 'foldlevel' when starting to edit another buffer in a window.
-+	Useful to always start editing with all folds closed (value zero),
-+	some folds closed (one) or no folds closed (99).
-+	This is done before reading any modeline, thus a setting in a modeline
-+	overrules this option.  Starting to edit a file for |diff-mode| also
-+	ignores this option and closes all folds.
-+	It is also done before BufReadPre autocommands, to allow an autocmd to
-+	overrule the 'foldlevel' value for specific files.
-+	When the value is negative, it is not used.
-+
-+						*'foldmarker'* *'fmr'* *E536*
-+'foldmarker' 'fmr'	string (default: "{{{,}}}")
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	The start and end marker used when 'foldmethod' is "marker".  There
-+	must be one comma, which separates the start and end marker.  The
-+	marker is a literal string (a regular expression would be too slow).
-+	See |fold-marker|.
-+
-+						*'foldmethod'* *'fdm'*
-+'foldmethod' 'fdm'	string (default: "manual")
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	The kind of folding used for the current window.  Possible values:
-+	|fold-manual|	manual	    Folds are created manually.
-+	|fold-indent|	indent	    Lines with equal indent form a fold.
-+	|fold-expr|	expr	    'foldexpr' gives the fold level of a line.
-+	|fold-marker|	marker	    Markers are used to specify folds.
-+	|fold-syntax|	syntax	    Syntax highlighting items specify folds.
-+	|fold-diff|	diff	    Fold text that is not changed.
-+
-+						*'foldminlines'* *'fml'*
-+'foldminlines' 'fml'	number (default: 1)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	Sets the minimum number of screen lines for a fold to be displayed
-+	closed.  Also for manually closed folds.
-+	Note that this only has an effect of what is displayed.  After using
-+	"zc" to close a fold, which is displayed open because it's smaller
-+	than 'foldminlines', a following "zc" may close a containing fold.
-+
-+						*'foldnestmax'* *'fdn'*
-+'foldnestmax' 'fdn'	number (default: 20)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	Sets the maximum nesting of folds for the "indent" and "syntax"
-+	methods.  This avoids that too many folds will be created.  Using more
-+	than 20 doesn't work, because the internal limit is 20.
-+
-+						*'foldopen'* *'fdo'*
-+'foldopen' 'fdo'	string (default: "block,hor,mark,percent,quickfix,
-+							     search,tag,undo")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	Specifies for which type of commands folds will be opened, if the
-+	command moves the cursor into a closed fold.  It is a comma separated
-+	list of items.
-+		item		commands ~
-+		all		any
-+		block		"(", "{", "[[", "[{", etc.
-+		hor		horizontal movements: "l", "w", "fx", etc.
-+		insert		any command in Insert mode
-+		jump		far jumps: "G", "gg", etc.
-+		mark		jumping to a mark: "'m", CTRL-O, etc.
-+		percent		"%"
-+		quickfix	":cn", ":crew", ":make", etc.
-+		search		search for a pattern: "/", "n", "*", "gd", etc.
-+				(not for a search pattern in a ":" command)
-+				Also for |[s| and |]s|.
-+		tag		jumping to a tag: ":ta", CTRL-T, etc.
-+		undo		undo or redo: "u" and CTRL-R
-+	When the command is part of a mapping this option is not used.  Add
-+	the |zv| command to the mapping to get the same effect.
-+	When a movement command is used for an operator (e.g., "dl" or "y%")
-+	this option is not used.  This means the operator will include the
-+	whole closed fold.
-+	Note that vertical movements are not here, because it would make it
-+	very difficult to move onto a closed fold.
-+	In insert mode the folds containing the cursor will always be open
-+	when text is inserted.
-+	To close folds you can re-apply 'foldlevel' with the |zx| command or
-+	set the 'foldclose' option to "all".
-+
-+						*'foldtext'* *'fdt'*
-+'foldtext' 'fdt'	string (default: "foldtext()")
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+folding|
-+			feature}
-+	An expression which is used to specify the text displayed for a closed
-+	fold.  See |fold-foldtext|.
-+
-+	The expression may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+
-+	It is not allowed to change text or jump to another window while
-+	evaluating 'foldtext' |textlock|.
-+
-+					*'formatoptions'* *'fo'*
-+'formatoptions' 'fo'	string (Vim default: "tcq", Vi default: "vt")
-+			local to buffer
-+			{not in Vi}
-+	This is a sequence of letters which describes how automatic
-+	formatting is to be done.  See |fo-table|.  When the 'paste' option is
-+	on, no formatting is done (like 'formatoptions' is empty).  Commas can
-+	be inserted for readability.
-+	To avoid problems with flags that are added in the future, use the
-+	"+=" and "-=" feature of ":set" |add-option-flags|.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+					*'formatlistpat'* *'flp'*
-+'formatlistpat' 'flp'	string (default: "^\s*\d\+[\]:.)}\t ]\s*")
-+			local to buffer
-+			{not in Vi}
-+	A pattern that is used to recognize a list header.  This is used for
-+	the "n" flag in 'formatoptions'.
-+	The pattern must match exactly the text that will be the indent for
-+	the line below it.  You can use |/\ze| to mark the end of the match
-+	while still checking more characters.  There must be a character
-+	following the pattern, when it matches the whole line it is handled
-+	like there is no match.
-+	The default recognizes a number, followed by an optional punctuation
-+	character and white space.
-+
-+						*'formatprg'* *'fp'*
-+'formatprg' 'fp'	string (default "")
-+			global
-+			{not in Vi}
-+	The name of an external program that will be used to format the lines
-+	selected with the |gq| operator.  The program must take the input on
-+	stdin and produce the output on stdout.  The Unix program "fmt" is
-+	such a program.
-+	If the 'formatexpr' option is not empty it will be used instead.
-+	Otherwise, if 'formatprg' option is an empty string, the internal
-+	format function will be used |C-indenting|.
-+	Environment variables are expanded |:set_env|.  See |option-backslash|
-+	about including spaces and backslashes.
-+	The expression may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+
-+						*'formatexpr'* *'fex'*
-+'formatexpr' 'fex'	string (default "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+eval|
-+			feature}
-+	Expression which is evaluated to format a range of lines for the |gq|
-+	operator or automatic formatting (see 'formatoptions').  When this
-+	option is empty 'formatprg' is used.
-+
-+	The |v:lnum|  variable holds the first line to be formatted.
-+	The |v:count| variable holds the number of lines to be formatted.
-+	The |v:char|  variable holds the character that is going to be
-+		      inserted if the expression is being evaluated due to
-+		      automatic formatting.  This can be empty.  Don't insert
-+		      it yet!
-+
-+	Example: >
-+		:set formatexpr=mylang#Format()
-+<	This will invoke the mylang#Format() function in the
-+	autoload/mylang.vim file in 'runtimepath'. |autoload|
-+
-+	The expression is also evaluated when 'textwidth' is set and adding
-+	text beyond that limit.  This happens under the same conditions as
-+	when internal formatting is used.  Make sure the cursor is kept in the
-+	same spot relative to the text then!  The |mode()| function will
-+	return "i" or "R" in this situation.
-+	
-+	When the expression evaluates to non-zero Vim will fall back to using
-+	the internal format mechanism.
-+
-+	The expression may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+
-+						*'fsync'* *'fs'*
-+'fsync' 'fs'		boolean	(default on)
-+			global
-+			{not in Vi}
-+	When on, the library function fsync() will be called after writing a
-+	file.  This will flush a file to disk, ensuring that it is safely
-+	written even on filesystems which do metadata-only journaling.  This
-+	will force the harddrive to spin up on Linux systems running in laptop
-+	mode, so it may be undesirable in some situations.  Be warned that
-+	turning this off increases the chances of data loss after a crash.  On
-+	systems without an fsync() implementation, this variable is always
-+	off.
-+	Also see 'swapsync' for controlling fsync() on swap files.
-+
-+				   *'gdefault'* *'gd'* *'nogdefault'* *'nogd'*
-+'gdefault' 'gd'		boolean	(default off)
-+			global
-+			{not in Vi}
-+	When on, the ":substitute" flag 'g' is default on.  This means that
-+	all matches in a line are substituted instead of one.  When a 'g' flag
-+	is given to a ":substitute" command, this will toggle the substitution
-+	of all or one match.  See |complex-change|.
-+
-+		command		'gdefault' on	'gdefault' off	~
-+		:s///		  subst. all	  subst. one
-+		:s///g		  subst. one	  subst. all
-+		:s///gg		  subst. all	  subst. one
-+
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'grepformat'* *'gfm'*
-+'grepformat' 'gfm'	string	(default "%f:%l%m,%f  %l%m")
-+			global
-+			{not in Vi}
-+	Format to recognize for the ":grep" command output.
-+	This is a scanf-like string that uses the same format as the
-+	'errorformat' option: see |errorformat|.
-+
-+						*'grepprg'* *'gp'*
-+'grepprg' 'gp'		string	(default "grep -n ",
-+					Unix: "grep -n $* /dev/null",
-+					Win32: "findstr /n" or "grep -n",
-+						      VMS: "SEARCH/NUMBERS ")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	Program to use for the |:grep| command.  This option may contain '%'
-+	and '#' characters, which are expanded like when used in a command-
-+	line.  The placeholder "$*" is allowed to specify where the arguments
-+	will be included.  Environment variables are expanded |:set_env|.  See
-+	|option-backslash| about including spaces and backslashes.
-+	When your "grep" accepts the "-H" argument, use this to make ":grep"
-+	also work well with a single file: >
-+		:set grepprg=grep\ -nH
-+<	Special value: When 'grepprg' is set to "internal" the |:grep| command
-+	works like |:vimgrep|, |:lgrep| like |:lvimgrep|, |:grepadd| like
-+	|:vimgrepadd| and |:lgrepadd| like |:lvimgrepadd|.
-+	See also the section |:make_makeprg|, since most of the comments there
-+	apply equally to 'grepprg'.
-+	For Win32, the default is "findstr /n" if "findstr.exe" can be found,
-+	otherwise it's "grep -n".
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+			*'guicursor'* *'gcr'* *E545* *E546* *E548* *E549*
-+'guicursor' 'gcr'	string	(default "n-v-c:block-Cursor/lCursor,
-+					ve:ver35-Cursor,
-+					o:hor50-Cursor,
-+					i-ci:ver25-Cursor/lCursor,
-+					r-cr:hor20-Cursor/lCursor,
-+					sm:block-Cursor
-+					-blinkwait175-blinkoff150-blinkon175",
-+				for MS-DOS and Win32 console:
-+					"n-v-c:block,o:hor50,i-ci:hor15,
-+					r-cr:hor30,sm:block")
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled, and
-+			for MS-DOS and Win32 console}
-+	This option tells Vim what the cursor should look like in different
-+	modes.  It fully works in the GUI.  In an MSDOS or Win32 console, only
-+	the height of the cursor can be changed.  This can be done by
-+	specifying a block cursor, or a percentage for a vertical or
-+	horizontal cursor.
-+	For a console the 't_SI' and 't_EI' escape sequences are used.
-+
-+	The option is a comma separated list of parts.  Each part consist of a
-+	mode-list and an argument-list:
-+		mode-list:argument-list,mode-list:argument-list,..
-+	The mode-list is a dash separated list of these modes:
-+		n	Normal mode
-+		v	Visual mode
-+		ve	Visual mode with 'selection' "exclusive" (same as 'v',
-+			if not specified)
-+		o	Operator-pending mode
-+		i	Insert mode
-+		r	Replace mode
-+		c	Command-line Normal (append) mode
-+		ci	Command-line Insert mode
-+		cr	Command-line Replace mode
-+		sm	showmatch in Insert mode
-+		a	all modes
-+	The argument-list is a dash separated list of these arguments:
-+		hor{N}	horizontal bar, {N} percent of the character height
-+		ver{N}	vertical bar, {N} percent of the character width
-+		block	block cursor, fills the whole character
-+			[only one of the above three should be present]
-+		blinkwait{N}				*cursor-blinking*
-+		blinkon{N}
-+		blinkoff{N}
-+			blink times for cursor: blinkwait is the delay before
-+			the cursor starts blinking, blinkon is the time that
-+			the cursor is shown and blinkoff is the time that the
-+			cursor is not shown.  The times are in msec.  When one
-+			of the numbers is zero, there is no blinking.  The
-+			default is: "blinkwait700-blinkon400-blinkoff250".
-+			These numbers are used for a missing entry.  This
-+			means that blinking is enabled by default.  To switch
-+			blinking off you can use "blinkon0".  The cursor only
-+			blinks when Vim is waiting for input, not while
-+			executing a command.
-+			To make the cursor blink in an xterm, see
-+			|xterm-blink|.
-+		{group-name}
-+			a highlight group name, that sets the color and font
-+			for the cursor
-+		{group-name}/{group-name}
-+			Two highlight group names, the first is used when
-+			no language mappings are used, the other when they
-+			are. |language-mapping|
-+
-+	Examples of parts:
-+	   n-c-v:block-nCursor	in Normal, Command-line and Visual mode, use a
-+				block cursor with colors from the "nCursor"
-+				highlight group
-+	   i-ci:ver30-iCursor-blinkwait300-blinkon200-blinkoff150
-+				In Insert and Command-line Insert mode, use a
-+				30% vertical bar cursor with colors from the
-+				"iCursor" highlight group.  Blink a bit
-+				faster.
-+
-+	The 'a' mode is different.  It will set the given argument-list for
-+	all modes.  It does not reset anything to defaults.  This can be used
-+	to do a common setting for all modes.  For example, to switch off
-+	blinking: "a:blinkon0"
-+
-+	Examples of cursor highlighting: >
-+	    :highlight Cursor gui=reverse guifg=NONE guibg=NONE
-+	    :highlight Cursor gui=NONE guifg=bg guibg=fg
-+<
-+					*'guifont'* *'gfn'*
-+						   *E235* *E596* *E610* *E611*
-+'guifont' 'gfn'		string	(default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled}
-+	This is a list of fonts which will be used for the GUI version of Vim.
-+	In its simplest form the value is just one font name.  When
-+	the font cannot be found you will get an error message.  To try other
-+	font names a list can be specified, font names separated with commas.
-+	The first valid font is used.
-+
-+	On systems where 'guifontset' is supported (X11) and 'guifontset' is
-+	not empty, then 'guifont' is not used.
-+
-+	Spaces after a comma are ignored.  To include a comma in a font name
-+	precede it with a backslash.  Setting an option requires an extra
-+	backslash before a space and a backslash.  See also
-+	|option-backslash|.  For example: >
-+	    :set guifont=Screen15,\ 7x13,font\\,with\\,commas
-+<	will make Vim try to use the font "Screen15" first, and if it fails it
-+	will try to use "7x13" and then "font,with,commas" instead.
-+
-+	If none of the fonts can be loaded, Vim will keep the current setting.
-+	If an empty font list is given, Vim will try using other resource
-+	settings (for X, it will use the Vim.font resource), and finally it
-+	will try some builtin default which should always be there ("7x13" in
-+	the case of X).  The font names given should be "normal" fonts.  Vim
-+	will try to find the related bold and italic fonts.
-+
-+	For Win32, GTK, Motif, Mac OS and Photon: >
-+	    :set guifont=*
-+<	will bring up a font requester, where you can pick the font you want.
-+
-+	The font name depends on the GUI used.  See |setting-guifont| for a
-+	way to set 'guifont' for various systems.
-+
-+	For the GTK+ 2 GUI the font name looks like this: >
-+	    :set guifont=Andale\ Mono\ 11
-+<	That's all.  XLFDs are not used.  For Chinese this is reported to work
-+	well: >
-+	    if has("gui_gtk2")
-+	      set guifont=Bitstream\ Vera\ Sans\ Mono\ 12,Fixed\ 12
-+	      set guifontwide=Microsoft\ Yahei\ 12,WenQuanYi\ Zen\ Hei\ 12
-+	    endif
-+<
-+	For Mac OSX you can use something like this: >
-+	    :set guifont=Monaco:h10
-+<	Also see 'macatsui', it can help fix display problems.
-+								*E236*
-+	Note that the fonts must be mono-spaced (all characters have the same
-+	width).  An exception is GTK 2: all fonts are accepted, but
-+	mono-spaced fonts look best.
-+
-+	To preview a font on X11, you might be able to use the "xfontsel"
-+	program.  The "xlsfonts" program gives a list of all available fonts.
-+
-+	For the Win32 GUI					*E244* *E245*
-+	- takes these options in the font name:
-+		hXX - height is XX (points, can be floating-point)
-+		wXX - width is XX (points, can be floating-point)
-+		b   - bold
-+		i   - italic
-+		u   - underline
-+		s   - strikeout
-+		cXX - character set XX.  Valid charsets are: ANSI, ARABIC,
-+		      BALTIC, CHINESEBIG5, DEFAULT, EASTEUROPE, GB2312, GREEK,
-+		      HANGEUL, HEBREW, JOHAB, MAC, OEM, RUSSIAN, SHIFTJIS,
-+		      SYMBOL, THAI, TURKISH, VIETNAMESE ANSI and BALTIC.
-+		      Normally you would use "cDEFAULT".
-+
-+	  Use a ':' to separate the options.
-+	- A '_' can be used in the place of a space, so you don't need to use
-+	  backslashes to escape the spaces.
-+	- Examples: >
-+	    :set guifont=courier_new:h12:w5:b:cRUSSIAN
-+	    :set guifont=Andale_Mono:h7.5:w4.5
-+<	See also |font-sizes|.
-+
-+					*'guifontset'* *'gfs'*
-+					*E250* *E252* *E234* *E597* *E598*
-+'guifontset' 'gfs'	string	(default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled and
-+			with the |+xfontset| feature}
-+			{not available in the GTK+ 2 GUI}
-+	When not empty, specifies two (or more) fonts to be used.  The first
-+	one for normal English, the second one for your special language.  See
-+	|xfontset|.
-+	Setting this option also means that all font names will be handled as
-+	a fontset name.  Also the ones used for the "font" argument of the
-+	|:highlight| command.
-+	The fonts must match with the current locale.  If fonts for the
-+	character sets that the current locale uses are not included, setting
-+	'guifontset' will fail.
-+	Note the difference between 'guifont' and 'guifontset': In 'guifont'
-+	the comma-separated names are alternative names, one of which will be
-+	used.  In 'guifontset' the whole string is one fontset name,
-+	including the commas.  It is not possible to specify alternative
-+	fontset names.
-+	This example works on many X11 systems: >
-+		:set guifontset=-*-*-medium-r-normal--16-*-*-*-c-*-*-*
-+<
-+				*'guifontwide'* *'gfw'* *E231* *E533* *E534*
-+'guifontwide' 'gfw'	string	(default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled}
-+	When not empty, specifies a comma-separated list of fonts to be used
-+	for double-width characters.  The first font that can be loaded is
-+	used.
-+	Note: The size of these fonts must be exactly twice as wide as the one
-+	specified with 'guifont' and the same height.
-+
-+	All GUI versions but GTK+ 2:
-+
-+	'guifontwide' is only used when 'encoding' is set to "utf-8" and
-+	'guifontset' is empty or invalid.
-+	When 'guifont' is set and a valid font is found in it and
-+	'guifontwide' is empty Vim will attempt to find a matching
-+	double-width font and set 'guifontwide' to it.
-+
-+	GTK+ 2 GUI only:			*guifontwide_gtk2*
-+
-+	If set and valid, 'guifontwide' is always used for double width
-+	characters, even if 'encoding' is not set to "utf-8".
-+	Vim does not attempt to find an appropriate value for 'guifontwide'
-+	automatically.  If 'guifontwide' is empty Pango/Xft will choose the
-+	font for characters not available in 'guifont'.  Thus you do not need
-+	to set 'guifontwide' at all unless you want to override the choice
-+	made by Pango/Xft.
-+
-+						*'guiheadroom'* *'ghr'*
-+'guiheadroom' 'ghr'	number	(default 50)
-+			global
-+			{not in Vi} {only for GTK and X11 GUI}
-+	The number of pixels subtracted from the screen height when fitting
-+	the GUI window on the screen.  Set this before the GUI is started,
-+	e.g., in your |gvimrc| file.  When zero, the whole screen height will
-+	be used by the window.  When positive, the specified number of pixel
-+	lines will be left for window decorations and other items on the
-+	screen.  Set it to a negative value to allow windows taller than the
-+	screen.
-+
-+						*'guioptions'* *'go'*
-+'guioptions' 'go'	string	(default "gmrLtT"   (MS-Windows),
-+					 "agimrLtT" (GTK, Motif and Athena))
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled}
-+	This option only has an effect in the GUI version of Vim.  It is a
-+	sequence of letters which describes what components and options of the
-+	GUI should be used.
-+	To avoid problems with flags that are added in the future, use the
-+	"+=" and "-=" feature of ":set" |add-option-flags|.
-+
-+	Valid letters are as follows:
-+							*guioptions_a* *'go-a'*
-+	  'a'	Autoselect:  If present, then whenever VISUAL mode is started,
-+		or the Visual area extended, Vim tries to become the owner of
-+		the windowing system's global selection.  This means that the
-+		Visually highlighted text is available for pasting into other
-+		applications as well as into Vim itself.  When the Visual mode
-+		ends, possibly due to an operation on the text, or when an
-+		application wants to paste the selection, the highlighted text
-+		is automatically yanked into the "* selection register.
-+		Thus the selection is still available for pasting into other
-+		applications after the VISUAL mode has ended.
-+		    If not present, then Vim won't become the owner of the
-+		windowing system's global selection unless explicitly told to
-+		by a yank or delete operation for the "* register.
-+		The same applies to the modeless selection.
-+								*'go-A'*
-+	  'A'	Autoselect for the modeless selection.  Like 'a', but only
-+		applies to the modeless selection.
-+
-+		    'guioptions'   autoselect Visual  autoselect modeless ~
-+			 ""		 -			 -
-+			 "a"		yes			yes
-+			 "A"		 -			yes
-+			 "aA"		yes			yes
-+
-+								*'go-c'*
-+	  'c'	Use console dialogs instead of popup dialogs for simple
-+		choices.
-+								*'go-e'*
-+	  'e'	Add tab pages when indicated with 'showtabline'.
-+		'guitablabel' can be used to change the text in the labels.
-+		When 'e' is missing a non-GUI tab pages line may be used.
-+		The GUI tabs are only supported on some systems, currently
-+		GTK, Motif, Mac OS/X and MS-Windows.
-+								*'go-f'*
-+	  'f'	Foreground: Don't use fork() to detach the GUI from the shell
-+		where it was started.  Use this for programs that wait for the
-+		editor to finish (e.g., an e-mail program).  Alternatively you
-+		can use "gvim -f" or ":gui -f" to start the GUI in the
-+		foreground.  |gui-fork|
-+		Note: Set this option in the vimrc file.  The forking may have
-+		happened already when the |gvimrc| file is read.
-+								*'go-i'*
-+	  'i'	Use a Vim icon.  For GTK with KDE it is used in the left-upper
-+		corner of the window.  It's black&white on non-GTK, because of
-+		limitations of X11.  For a color icon, see |X11-icon|.
-+								*'go-m'*
-+	  'm'	Menu bar is present.
-+								*'go-M'*
-+	  'M'	The system menu "$VIMRUNTIME/menu.vim" is not sourced.  Note
-+		that this flag must be added in the .vimrc file, before
-+		switching on syntax or filetype recognition (when the |gvimrc|
-+		file is sourced the system menu has already been loaded; the
-+		":syntax on" and ":filetype on" commands load the menu too).
-+								*'go-g'*
-+	  'g'	Grey menu items: Make menu items that are not active grey.  If
-+		'g' is not included inactive menu items are not shown at all.
-+		Exception: Athena will always use grey menu items.
-+								*'go-t'*
-+	  't'	Include tearoff menu items.  Currently only works for Win32,
-+		GTK+, and Motif 1.2 GUI.
-+								*'go-T'*
-+	  'T'	Include Toolbar.  Currently only in Win32, GTK+, Motif, Photon
-+		and Athena GUIs.
-+								*'go-r'*
-+	  'r'	Right-hand scrollbar is always present.
-+								*'go-R'*
-+	  'R'	Right-hand scrollbar is present when there is a vertically
-+		split window.
-+								*'go-l'*
-+	  'l'	Left-hand scrollbar is always present.
-+								*'go-L'*
-+	  'L'	Left-hand scrollbar is present when there is a vertically
-+		split window.
-+								*'go-b'*
-+	  'b'	Bottom (horizontal) scrollbar is present.  Its size depends on
-+		the longest visible line, or on the cursor line if the 'h'
-+		flag is included. |gui-horiz-scroll|
-+								*'go-h'*
-+	  'h'	Limit horizontal scrollbar size to the length of the cursor
-+		line.  Reduces computations. |gui-horiz-scroll|
-+
-+	And yes, you may even have scrollbars on the left AND the right if
-+	you really want to :-).  See |gui-scrollbars| for more information.
-+
-+								*'go-v'*
-+	  'v'	Use a vertical button layout for dialogs.  When not included,
-+		a horizontal layout is preferred, but when it doesn't fit a
-+		vertical layout is used anyway.
-+								*'go-p'*
-+	  'p'	Use Pointer callbacks for X11 GUI.  This is required for some
-+		window managers.  If the cursor is not blinking or hollow at
-+		the right moment, try adding this flag.  This must be done
-+		before starting the GUI.  Set it in your |gvimrc|.  Adding or
-+		removing it after the GUI has started has no effect.
-+								*'go-F'*
-+	  'F'	Add a footer.  Only for Motif.  See |gui-footer|.
-+
-+
-+						*'guipty'* *'noguipty'*
-+'guipty'		boolean	(default on)
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled}
-+	Only in the GUI: If on, an attempt is made to open a pseudo-tty for
-+	I/O to/from shell commands.  See |gui-pty|.
-+
-+						*'guitablabel'* *'gtl'*
-+'guitablabel' 'gtl'	string	(default empty)
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled and
-+			with the |+windows| feature}
-+	When nonempty describes the text to use in a label of the GUI tab
-+	pages line.  When empty and when the result is empty Vim will use a
-+	default label.  See |setting-guitablabel| for more info.
-+
-+	The format of this option is like that of 'statusline'.
-+	'guitabtooltip' is used for the tooltip, see below.
-+
-+	Only used when the GUI tab pages line is displayed.  'e' must be
-+	present in 'guioptions'.  For the non-GUI tab pages line 'tabline' is
-+	used.
-+
-+						*'guitabtooltip'* *'gtt'*
-+'guitabtooltip' 'gtt'	string	(default empty)
-+			global
-+			{not in Vi}
-+			{only available when compiled with GUI enabled and
-+			with the |+windows| feature}
-+	When nonempty describes the text to use in a tooltip for the GUI tab
-+	pages line.  When empty Vim will use a default tooltip.
-+	This option is otherwise just like 'guitablabel' above.
-+	You can include a line break.  Simplest method is to use |:let|: >
-+		:let &guitabtooltip = "line one\nline two"
-+<
-+
-+						*'helpfile'* *'hf'*
-+'helpfile' 'hf'		string	(default (MSDOS)  "$VIMRUNTIME\doc\help.txt"
-+					 (others) "$VIMRUNTIME/doc/help.txt")
-+			global
-+			{not in Vi}
-+	Name of the main help file.  All distributed help files should be
-+	placed together in one directory.  Additionally, all "doc" directories
-+	in 'runtimepath' will be used.
-+	Environment variables are expanded |:set_env|.  For example:
-+	"$VIMRUNTIME/doc/help.txt".  If $VIMRUNTIME is not set, $VIM is also
-+	tried.  Also see |$VIMRUNTIME| and |option-backslash| about including
-+	spaces and backslashes.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'helpheight'* *'hh'*
-+'helpheight' 'hh'	number	(default 20)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	Minimal initial height of the help window when it is opened with the
-+	":help" command.  The initial height of the help window is half of the
-+	current window, or (when the 'ea' option is on) the same as other
-+	windows.  When the height is less than 'helpheight', the height is
-+	set to 'helpheight'.  Set to zero to disable.
-+
-+						*'helplang'* *'hlg'*
-+'helplang' 'hlg'	string	(default: messages language or empty)
-+			global
-+			{only available when compiled with the |+multi_lang|
-+			feature}
-+			{not in Vi}
-+	Comma separated list of languages.  Vim will use the first language
-+	for which the desired help can be found.  The English help will always
-+	be used as a last resort.  You can add "en" to prefer English over
-+	another language, but that will only find tags that exist in that
-+	language and not in the English help.
-+	Example: >
-+		:set helplang=de,it
-+<	This will first search German, then Italian and finally English help
-+	files.
-+	When using |CTRL-]| and ":help!" in a non-English help file Vim will
-+	try to find the tag in the current language before using this option.
-+	See |help-translated|.
-+
-+				     *'hidden'* *'hid'* *'nohidden'* *'nohid'*
-+'hidden' 'hid'		boolean	(default off)
-+			global
-+			{not in Vi}
-+	When off a buffer is unloaded when it is |abandon|ed.  When on a
-+	buffer becomes hidden when it is |abandon|ed.  If the buffer is still
-+	displayed in another window, it does not become hidden, of course.
-+	The commands that move through the buffer list sometimes make a buffer
-+	hidden although the 'hidden' option is off: When the buffer is
-+	modified, 'autowrite' is off or writing is not possible, and the '!'
-+	flag was used.  See also |windows.txt|.
-+	To only make one buffer hidden use the 'bufhidden' option.
-+	This option is set for one command with ":hide {command}" |:hide|.
-+	WARNING: It's easy to forget that you have changes in hidden buffers.
-+	Think twice when using ":q!" or ":qa!".
-+
-+						*'highlight'* *'hl'*
-+'highlight' 'hl'	string	(default (as a single string):
-+				     "8:SpecialKey,@:NonText,d:Directory,
-+				     e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,
-+				     M:ModeMsg,n:LineNr,r:Question,
-+				     s:StatusLine,S:StatusLineNC,c:VertSplit,
-+				     t:Title,v:Visual,w:WarningMsg,W:WildMenu,
-+				     f:Folded,F:FoldColumn,A:DiffAdd,
-+				     C:DiffChange,D:DiffDelete,T:DiffText,
-+				     >:SignColumn,B:SpellBad,P:SpellCap,
-+				     R:SpellRare,L:SpellLocal,-:Conceal,
-+				     +:Pmenu,=:PmenuSel,
-+				     x:PmenuSbar,X:PmenuThumb")
-+			global
-+			{not in Vi}
-+	This option can be used to set highlighting mode for various
-+	occasions.  It is a comma separated list of character pairs.  The
-+	first character in a pair gives the occasion, the second the mode to
-+	use for that occasion.  The occasions are:
-+	|hl-SpecialKey|	 8  Meta and special keys listed with ":map"
-+	|hl-NonText|	 @  '~' and '@' at the end of the window and
-+			    characters from 'showbreak'
-+	|hl-Directory|	 d  directories in CTRL-D listing and other special
-+			    things in listings
-+	|hl-ErrorMsg|	 e  error messages
-+			 h  (obsolete, ignored)
-+	|hl-IncSearch|	 i  'incsearch' highlighting
-+	|hl-Search|	 l  last search pattern highlighting (see 'hlsearch')
-+	|hl-MoreMsg|	 m  |more-prompt|
-+	|hl-ModeMsg|	 M  Mode (e.g., "-- INSERT --")
-+	|hl-LineNr|	 n  line number for ":number" and ":#" commands, and
-+			    when 'number' or 'relativenumber' option is set.
-+	|hl-Question|	 r  |hit-enter| prompt and yes/no questions
-+	|hl-StatusLine|	 s  status line of current window |status-line|
-+	|hl-StatusLineNC| S  status lines of not-current windows
-+	|hl-Title|	 t  Titles for output from ":set all", ":autocmd" etc.
-+	|hl-VertSplit|	 c  column used to separate vertically split windows
-+	|hl-Visual|	 v  Visual mode
-+	|hl-VisualNOS|	 V  Visual mode when Vim does is "Not Owning the
-+			    Selection" Only X11 Gui's |gui-x11| and
-+			    |xterm-clipboard|.
-+	|hl-WarningMsg|	 w  warning messages
-+	|hl-WildMenu|	 W  wildcard matches displayed for 'wildmenu'
-+	|hl-Folded|	 f  line used for closed folds
-+	|hl-FoldColumn|	 F  'foldcolumn'
-+	|hl-DiffAdd|	 A  added line in diff mode
-+	|hl-DiffChange|	 C  changed line in diff mode
-+	|hl-DiffDelete|	 D  deleted line in diff mode
-+	|hl-DiffText|	 T  inserted text in diff mode
-+	|hl-SignColumn|	 >  column used for |signs|
-+	|hl-SpellBad|	 B  misspelled word |spell|
-+	|hl-SpellCap|	 P  word that should start with capital |spell|
-+	|hl-SpellRare|	 R  rare word |spell|
-+	|hl-SpellLocal|	 L  word from other region |spell|
-+	|hl-Conceal|	 -  the placeholders used for concealed characters
-+			    (see 'conceallevel')
-+	|hl-Pmenu|       +  popup menu normal line
-+	|hl-PmenuSel|    =  popup menu normal line
-+	|hl-PmenuSbar|   x  popup menu scrollbar
-+	|hl-PmenuThumb|  X  popup menu scrollbar thumb
-+
-+	The display modes are:
-+		r	reverse		(termcap entry "mr" and "me")
-+		i	italic		(termcap entry "ZH" and "ZR")
-+		b	bold		(termcap entry "md" and "me")
-+		s	standout	(termcap entry "so" and "se")
-+		u	underline	(termcap entry "us" and "ue")
-+		c	undercurl	(termcap entry "Cs" and "Ce")
-+		n	no highlighting
-+		-	no highlighting
-+		:	use a highlight group
-+	The default is used for occasions that are not included.
-+	If you want to change what the display modes do, see |dos-colors|
-+	for an example.
-+	When using the ':' display mode, this must be followed by the name of
-+	a highlight group.  A highlight group can be used to define any type
-+	of highlighting, including using color.  See |:highlight| on how to
-+	define one.  The default uses a different group for each occasion.
-+	See |highlight-default| for the default highlight groups.
-+
-+				 *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
-+'hlsearch' 'hls'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+extra_search| feature}
-+	When there is a previous search pattern, highlight all its matches.
-+	The type of highlighting used can be set with the 'l' occasion in the
-+	'highlight' option.  This uses the "Search" highlight group by
-+	default.  Note that only the matching text is highlighted, any offsets
-+	are not applied.
-+	See also: 'incsearch' and |:match|.
-+	When you get bored looking at the highlighted matches, you can turn it
-+	off with |:nohlsearch|.  As soon as you use a search command, the
-+	highlighting comes back.
-+	'redrawtime' specifies the maximum time spent on finding matches.
-+	When the search pattern can match an end-of-line, Vim will try to
-+	highlight all of the matched text.  However, this depends on where the
-+	search starts.  This will be the first line in the window or the first
-+	line below a closed fold.  A match in a previous line which is not
-+	drawn may not continue in a newly drawn line.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'history'* *'hi'*
-+'history' 'hi'		number	(Vim default: 20, Vi default: 0)
-+			global
-+			{not in Vi}
-+	A history of ":" commands, and a history of previous search patterns
-+	are remembered.  This option decides how many entries may be stored in
-+	each of these histories (see |cmdline-editing|).
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+					 *'hkmap'* *'hk'* *'nohkmap'* *'nohk'*
-+'hkmap' 'hk'		boolean (default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	When on, the keyboard is mapped for the Hebrew character set.
-+	Normally you would set 'allowrevins' and use CTRL-_ in insert mode to
-+	toggle this option.  See |rileft.txt|.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+				 *'hkmapp'* *'hkp'* *'nohkmapp'* *'nohkp'*
-+'hkmapp' 'hkp'		boolean (default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	When on, phonetic keyboard mapping is used.  'hkmap' must also be on.
-+	This is useful if you have a non-Hebrew keyboard.
-+	See |rileft.txt|.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'icon'* *'noicon'*
-+'icon'			boolean	(default off, on when title can be restored)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+title|
-+			feature}
-+	When on, the icon text of the window will be set to the value of
-+	'iconstring' (if it is not empty), or to the name of the file
-+	currently being edited.  Only the last part of the name is used.
-+	Overridden by the 'iconstring' option.
-+	Only works if the terminal supports setting window icons (currently
-+	only X11 GUI and terminals with a non-empty 't_IS' option - these are
-+	Unix xterm and iris-ansi by default, where 't_IS' is taken from the
-+	builtin termcap).
-+	When Vim was compiled with HAVE_X11 defined, the original icon will be
-+	restored if possible |X11|.  See |X11-icon| for changing the icon on
-+	X11.
-+
-+						*'iconstring'*
-+'iconstring'		string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+title|
-+			feature}
-+	When this option is not empty, it will be used for the icon text of
-+	the window.  This happens only when the 'icon' option is on.
-+	Only works if the terminal supports setting window icon text
-+	(currently only X11 GUI and terminals with a non-empty 't_IS' option).
-+	Does not work for MS Windows.
-+	When Vim was compiled with HAVE_X11 defined, the original icon will be
-+	restored if possible |X11|.
-+	When this option contains printf-style '%' items, they will be
-+	expanded according to the rules used for 'statusline'.  See
-+	'titlestring' for example settings.
-+	{not available when compiled without the |+statusline| feature}
-+
-+			*'ignorecase'* *'ic'* *'noignorecase'* *'noic'*
-+'ignorecase' 'ic'	boolean	(default off)
-+			global
-+	Ignore case in search patterns.  Also used when searching in the tags
-+	file.
-+	Also see 'smartcase'.
-+	Can be overruled by using "\c" or "\C" in the pattern, see
-+	|/ignorecase|.
-+
-+						*'imactivatekey'* *'imak'*
-+'imactivatekey' 'imak'	string (default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with |+xim| and
-+			|+GUI_GTK|}				*E599*
-+	Specifies the key that your Input Method in X-Windows uses for
-+	activation.  When this is specified correctly, vim can fully control
-+	IM with 'imcmdline', 'iminsert' and 'imsearch'.
-+	You can't use this option to change the activation key, the option
-+	tells Vim what the key is.
-+	Format:
-+		[MODIFIER_FLAG-]KEY_STRING
-+
-+	These characters can be used for MODIFIER_FLAG (case is ignored):
-+		S	    Shift key
-+		L	    Lock key
-+		C	    Control key
-+		1	    Mod1 key
-+		2	    Mod2 key
-+		3	    Mod3 key
-+		4	    Mod4 key
-+		5	    Mod5 key
-+	Combinations are allowed, for example "S-C-space" or "SC-space" are
-+	both shift+ctrl+space.
-+	See <X11/keysymdef.h> and XStringToKeysym for KEY_STRING.
-+
-+	Example: >
-+		:set imactivatekey=S-space
-+<	"S-space" means shift+space.  This is the activation key for kinput2 +
-+	canna (Japanese), and ami (Korean).
-+
-+				*'imcmdline'* *'imc'* *'noimcmdline'* *'noimc'*
-+'imcmdline' 'imc'	boolean (default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+xim|,
-+			|+multi_byte_ime| or |global-ime| features}
-+	When set the Input Method is always on when starting to edit a command
-+	line, unless entering a search pattern (see 'imsearch' for that).
-+	Setting this option is useful when your input method allows entering
-+	English characters directly, e.g., when it's used to type accented
-+	characters with dead keys.
-+
-+				*'imdisable'* *'imd'* *'noimdisable'* *'noimd'*
-+'imdisable' 'imd'	boolean (default off, on for some systems (SGI))
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+xim|,
-+			|+multi_byte_ime| or |global-ime| features}
-+	When set the Input Method is never used.  This is useful to disable
-+	the IM when it doesn't work properly.
-+	Currently this option is on by default for SGI/IRIX machines.  This
-+	may change in later releases.
-+
-+						*'iminsert'* *'imi'*
-+'iminsert' 'imi'	number (default 0, 2 when an input method is supported)
-+			local to buffer
-+			{not in Vi}
-+	Specifies whether :lmap or an Input Method (IM) is to be used in
-+	Insert mode.  Valid values:
-+		0	:lmap is off and IM is off
-+		1	:lmap is ON and IM is off
-+		2	:lmap is off and IM is ON
-+	2 is available only when compiled with the |+multi_byte_ime|, |+xim|
-+	or |global-ime|.
-+	To always reset the option to zero when leaving Insert mode with <Esc>
-+	this can be used: >
-+		:inoremap <ESC> <ESC>:set iminsert=0<CR>
-+<	This makes :lmap and IM turn off automatically when leaving Insert
-+	mode.
-+	Note that this option changes when using CTRL-^ in Insert mode
-+	|i_CTRL-^|.
-+	The value is set to 1 when setting 'keymap' to a valid keymap name.
-+	It is also used for the argument of commands like "r" and "f".
-+	The value 0 may not work correctly with Athena and Motif with some XIM
-+	methods.  Use 'imdisable' to disable XIM then.
-+
-+						*'imsearch'* *'ims'*
-+'imsearch' 'ims'	number (default 0, 2 when an input method is supported)
-+			local to buffer
-+			{not in Vi}
-+	Specifies whether :lmap or an Input Method (IM) is to be used when
-+	entering a search pattern.  Valid values:
-+		-1	the value of 'iminsert' is used, makes it look like
-+			'iminsert' is also used when typing a search pattern
-+		0	:lmap is off and IM is off
-+		1	:lmap is ON and IM is off
-+		2	:lmap is off and IM is ON
-+	Note that this option changes when using CTRL-^ in Command-line mode
-+	|c_CTRL-^|.
-+	The value is set to 1 when it is not -1 and setting the 'keymap'
-+	option to a valid keymap name.
-+	The value 0 may not work correctly with Athena and Motif with some XIM
-+	methods.  Use 'imdisable' to disable XIM then.
-+
-+						*'include'* *'inc'*
-+'include' 'inc'		string	(default "^\s*#\s*include")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+find_in_path| feature}
-+	Pattern to be used to find an include command.  It is a search
-+	pattern, just like for the "/" command (See |pattern|).  The default
-+	value is for C programs.  This option is used for the commands "[i",
-+	"]I", "[d", etc.
-+	Normally the 'isfname' option is used to recognize the file name that
-+	comes after the matched pattern.  But if "\zs" appears in the pattern
-+	then the text matched from "\zs" to the end, or until "\ze" if it
-+	appears, is used as the file name.  Use this to include characters
-+	that are not in 'isfname', such as a space.  You can then use
-+	'includeexpr' to process the matched text.
-+	See |option-backslash| about including spaces and backslashes.
-+
-+						*'includeexpr'* *'inex'*
-+'includeexpr' 'inex'	string	(default "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+find_in_path| or |+eval| features}
-+	Expression to be used to transform the string found with the 'include'
-+	option to a file name.  Mostly useful to change "." to "/" for Java: >
-+		:set includeexpr=substitute(v:fname,'\\.','/','g')
-+<	The "v:fname" variable will be set to the file name that was detected.
-+
-+	Also used for the |gf| command if an unmodified file name can't be
-+	found.  Allows doing "gf" on the name after an 'include' statement.
-+	Also used for |<cfile>|.
-+
-+	The expression may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+
-+	It is not allowed to change text or jump to another window while
-+	evaluating 'includeexpr' |textlock|.
-+
-+				 *'incsearch'* *'is'* *'noincsearch'* *'nois'*
-+'incsearch' 'is'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+extra_search| features}
-+	While typing a search command, show where the pattern, as it was typed
-+	so far, matches.  The matched string is highlighted.  If the pattern
-+	is invalid or not found, nothing is shown.  The screen will be updated
-+	often, this is only useful on fast terminals.
-+	Note that the match will be shown, but the cursor will return to its
-+	original position when no match is found and when pressing <Esc>.  You
-+	still need to finish the search command with <Enter> to move the
-+	cursor to the match.
-+	When compiled with the |+reltime| feature Vim only searches for about
-+	half a second.  With a complicated pattern and/or a lot of text the
-+	match may not be found.  This is to avoid that Vim hangs while you
-+	are typing the pattern.
-+	The highlighting can be set with the 'i' flag in 'highlight'.
-+	See also: 'hlsearch'.
-+	CTRL-L can be used to add one character from after the current match
-+	to the command line.  If 'ignorecase' and 'smartcase' are set and the
-+	command line has no uppercase characters, the added character is
-+	converted to lowercase.
-+	CTRL-R CTRL-W can be used to add the word at the end of the current
-+	match, excluding the characters that were already typed.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'indentexpr'* *'inde'*
-+'indentexpr' 'inde'	string	(default "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+cindent|
-+			or |+eval| features}
-+	Expression which is evaluated to obtain the proper indent for a line.
-+	It is used when a new line is created, for the |=| operator and
-+	in Insert mode as specified with the 'indentkeys' option.
-+	When this option is not empty, it overrules the 'cindent' and
-+	'smartindent' indenting.
-+	When 'paste' is set this option is not used for indenting.
-+	The expression is evaluated with |v:lnum| set to the line number for
-+	which the indent is to be computed.  The cursor is also in this line
-+	when the expression is evaluated (but it may be moved around).
-+	The expression must return the number of spaces worth of indent.  It
-+	can return "-1" to keep the current indent (this means 'autoindent' is
-+	used for the indent).
-+	Functions useful for computing the indent are |indent()|, |cindent()|
-+	and |lispindent()|.
-+	The evaluation of the expression must not have side effects!  It must
-+	not change the text, jump to another window, etc.  Afterwards the
-+	cursor position is always restored, thus the cursor may be moved.
-+	Normally this option would be set to call a function: >
-+		:set indentexpr=GetMyIndent()
-+<	Error messages will be suppressed, unless the 'debug' option contains
-+	"msg".
-+	See |indent-expression|.
-+	NOTE: This option is made empty when 'compatible' is set.
-+
-+	The expression may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+
-+	It is not allowed to change text or jump to another window while
-+	evaluating 'indentexpr' |textlock|.
-+
-+
-+						*'indentkeys'* *'indk'*
-+'indentkeys' 'indk'	string	(default "0{,0},:,0#,!^F,o,O,e")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+cindent|
-+			feature}
-+	A list of keys that, when typed in Insert mode, cause reindenting of
-+	the current line.  Only happens if 'indentexpr' isn't empty.
-+	The format is identical to 'cinkeys', see |indentkeys-format|.
-+	See |C-indenting| and |indent-expression|.
-+
-+			*'infercase'* *'inf'* *'noinfercase'* *'noinf'*
-+'infercase' 'inf'	boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+	When doing keyword completion in insert mode |ins-completion|, and
-+	'ignorecase' is also on, the case of the match is adjusted depending
-+	on the typed text.  If the typed text contains a lowercase letter
-+	where the match has an upper case letter, the completed part is made
-+	lowercase.  If the typed text has no lowercase letters and the match
-+	has a lowercase letter where the typed text has an uppercase letter,
-+	and there is a letter before it, the completed part is made uppercase.
-+	With 'noinfercase' the match is used as-is.
-+
-+			*'insertmode'* *'im'* *'noinsertmode'* *'noim'*
-+'insertmode' 'im'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	Makes Vim work in a way that Insert mode is the default mode.  Useful
-+	if you want to use Vim as a modeless editor.  Used for |evim|.
-+	These Insert mode commands will be useful:
-+	- Use the cursor keys to move around.
-+	- Use CTRL-O to execute one Normal mode command |i_CTRL-O|).  When
-+	  this is a mapping, it is executed as if 'insertmode' was off.
-+	  Normal mode remains active until the mapping is finished.
-+	- Use CTRL-L to execute a number of Normal mode commands, then use
-+	  <Esc> to get back to Insert mode.  Note that CTRL-L moves the cursor
-+	  left, like <Esc> does when 'insertmode' isn't set.  |i_CTRL-L|
-+
-+	These items change when 'insertmode' is set:
-+	- when starting to edit of a file, Vim goes to Insert mode.
-+	- <Esc> in Insert mode is a no-op and beeps.
-+	- <Esc> in Normal mode makes Vim go to Insert mode.
-+	- CTRL-L in Insert mode is a command, it is not inserted.
-+	- CTRL-Z in Insert mode suspends Vim, see |CTRL-Z|.	*i_CTRL-Z*
-+	However, when <Esc> is used inside a mapping, it behaves like
-+	'insertmode' was not set.  This was done to be able to use the same
-+	mappings with 'insertmode' set or not set.
-+	When executing commands with |:normal| 'insertmode' is not used.
-+
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'isfname'* *'isf'*
-+'isfname' 'isf'		string	(default for MS-DOS, Win32 and OS/2:
-+			     "@,48-57,/,\,.,-,_,+,,,#,$,%,{,},[,],:,@-@,!,~,="
-+			    for AMIGA: "@,48-57,/,.,-,_,+,,,$,:"
-+			    for VMS: "@,48-57,/,.,-,_,+,,,#,$,%,<,>,[,],:,;,~"
-+			    for OS/390: "@,240-249,/,.,-,_,+,,,#,$,%,~,="
-+			    otherwise: "@,48-57,/,.,-,_,+,,,#,$,%,~,=")
-+			global
-+			{not in Vi}
-+	The characters specified by this option are included in file names and
-+	path names.  Filenames are used for commands like "gf", "[i" and in
-+	the tags file.  It is also used for "\f" in a |pattern|.
-+	Multi-byte characters 256 and above are always included, only the
-+	characters up to 255 are specified with this option.
-+	For UTF-8 the characters 0xa0 to 0xff are included as well.
-+	Think twice before adding white space to this option.  Although a
-+	space may appear inside a file name, the effect will be that Vim
-+	doesn't know where a file name starts or ends when doing completion.
-+	It most likely works better without a space in 'isfname'.
-+
-+	Note that on systems using a backslash as path separator, Vim tries to
-+	do its best to make it work as you would expect.  That is a bit
-+	tricky, since Vi originally used the backslash to escape special
-+	characters.  Vim will not remove a backslash in front of a normal file
-+	name character on these systems, but it will on Unix and alikes.  The
-+	'&' and '^' are not included by default, because these are special for
-+	cmd.exe.
-+
-+	The format of this option is a list of parts, separated with commas.
-+	Each part can be a single character number or a range.  A range is two
-+	character numbers with '-' in between.  A character number can be a
-+	decimal number between 0 and 255 or the ASCII character itself (does
-+	not work for digits).  Example:
-+		"_,-,128-140,#-43"	(include '_' and '-' and the range
-+					128 to 140 and '#' to 43)
-+	If a part starts with '^', the following character number or range
-+	will be excluded from the option.  The option is interpreted from left
-+	to right.  Put the excluded character after the range where it is
-+	included.  To include '^' itself use it as the last character of the
-+	option or the end of a range.  Example:
-+		"^a-z,#,^"	(exclude 'a' to 'z', include '#' and '^')
-+	If the character is '@', all characters where isalpha() returns TRUE
-+	are included.  Normally these are the characters a to z and A to Z,
-+	plus accented characters.  To include '@' itself use "@-@".  Examples:
-+		"@,^a-z"	All alphabetic characters, excluding lower
-+				case ASCII letters.
-+		"a-z,A-Z,@-@"	All letters plus the '@' character.
-+	A comma can be included by using it where a character number is
-+	expected.  Example:
-+		"48-57,,,_"	Digits, comma and underscore.
-+	A comma can be excluded by prepending a '^'.  Example:
-+		" -~,^,,9"	All characters from space to '~', excluding
-+				comma, plus <Tab>.
-+	See |option-backslash| about including spaces and backslashes.
-+
-+						*'isident'* *'isi'*
-+'isident' 'isi'		string	(default for MS-DOS, Win32 and OS/2:
-+					   "@,48-57,_,128-167,224-235"
-+				otherwise: "@,48-57,_,192-255")
-+			global
-+			{not in Vi}
-+	The characters given by this option are included in identifiers.
-+	Identifiers are used in recognizing environment variables and after a
-+	match of the 'define' option.  It is also used for "\i" in a
-+	|pattern|.  See 'isfname' for a description of the format of this
-+	option.
-+	Careful: If you change this option, it might break expanding
-+	environment variables.  E.g., when '/' is included and Vim tries to
-+	expand "$HOME/.viminfo".  Maybe you should change 'iskeyword' instead.
-+
-+						*'iskeyword'* *'isk'*
-+'iskeyword' 'isk'	string (Vim default for MS-DOS and Win32:
-+					    "@,48-57,_,128-167,224-235"
-+				   otherwise:  "@,48-57,_,192-255"
-+				Vi default: "@,48-57,_")
-+			local to buffer
-+			{not in Vi}
-+	Keywords are used in searching and recognizing with many commands:
-+	"w", "*", "[i", etc.  It is also used for "\k" in a |pattern|.  See
-+	'isfname' for a description of the format of this option.  For C
-+	programs you could use "a-z,A-Z,48-57,_,.,-,>".
-+	For a help file it is set to all non-blank printable characters except
-+	'*', '"' and '|' (so that CTRL-] on a command finds the help for that
-+	command).
-+	When the 'lisp' option is on the '-' character is always included.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+						*'isprint'* *'isp'*
-+'isprint' 'isp'	string	(default for MS-DOS, Win32, OS/2 and Macintosh:
-+				"@,~-255"; otherwise: "@,161-255")
-+			global
-+			{not in Vi}
-+	The characters given by this option are displayed directly on the
-+	screen.  It is also used for "\p" in a |pattern|.  The characters from
-+	space (ASCII 32) to '~' (ASCII 126) are always displayed directly,
-+	even when they are not included in 'isprint' or excluded.  See
-+	'isfname' for a description of the format of this option.
-+
-+	Non-printable characters are displayed with two characters:
-+		  0 -  31	"^@" - "^_"
-+		 32 - 126	always single characters
-+		   127		"^?"
-+		128 - 159	"~@" - "~_"
-+		160 - 254	"| " - "|~"
-+		   255		"~?"
-+	When 'encoding' is a Unicode one, illegal bytes from 128 to 255 are
-+	displayed as <xx>, with the hexadecimal value of the byte.
-+	When 'display' contains "uhex" all unprintable characters are
-+	displayed as <xx>.
-+	The SpecialKey highlighting will be used for unprintable characters.
-+	|hl-SpecialKey|
-+
-+	Multi-byte characters 256 and above are always included, only the
-+	characters up to 255 are specified with this option.  When a character
-+	is printable but it is not available in the current font, a
-+	replacement character will be shown.
-+	Unprintable and zero-width Unicode characters are displayed as <xxxx>.
-+	There is no option to specify these characters.
-+
-+			*'joinspaces'* *'js'* *'nojoinspaces'* *'nojs'*
-+'joinspaces' 'js'	boolean	(default on)
-+			global
-+			{not in Vi}
-+	Insert two spaces after a '.', '?' and '!' with a join command.
-+	When 'cpoptions' includes the 'j' flag, only do this after a '.'.
-+	Otherwise only one space is inserted.
-+	NOTE: This option is set when 'compatible' is set.
-+
-+							*'key'*
-+'key'			string	(default "")
-+			local to buffer
-+			{not in Vi}
-+			{only available when compiled with the |+cryptv|
-+			feature}
-+	The key that is used for encrypting and decrypting the current buffer.
-+	See |encryption| and 'cryptmethod'.
-+	Careful: Do not set the key value by hand, someone might see the typed
-+	key.  Use the |:X| command.  But you can make 'key' empty: >
-+		:set key=
-+<	It is not possible to get the value of this option with ":set key" or
-+	"echo &key".  This is to avoid showing it to someone who shouldn't
-+	know.  It also means you cannot see it yourself once you have set it,
-+	be careful not to make a typing error!
-+
-+					*'keymap'* *'kmp'* *E544*
-+'keymap' 'kmp'		string	(default "")
-+			local to buffer
-+			{not in Vi}
-+			{only available when compiled with the |+keymap|
-+			feature}
-+	Name of a keyboard mapping.  See |mbyte-keymap|.
-+	Setting this option to a valid keymap name has the side effect of
-+	setting 'iminsert' to one, so that the keymap becomes effective.
-+	'imsearch' is also set to one, unless it was -1
-+	Only normal file name characters can be used, "/\*?[|<>" are illegal.
-+
-+					*'keymodel'* *'km'*
-+'keymodel' 'km'		string	(default "")
-+			global
-+			{not in Vi}
-+	List of comma separated words, which enable special things that keys
-+	can do.  These values can be used:
-+	   startsel	Using a shifted special key starts selection (either
-+			Select mode or Visual mode, depending on "key" being
-+			present in 'selectmode').
-+	   stopsel	Using a not-shifted special key stops selection.
-+	Special keys in this context are the cursor keys, <End>, <Home>,
-+	<PageUp> and <PageDown>.
-+	The 'keymodel' option is set by the |:behave| command.
-+
-+					*'keywordprg'* *'kp'*
-+'keywordprg' 'kp'	string	(default "man" or "man -s",  DOS: ":help",
-+						OS/2: "view /", VMS: "help")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	Program to use for the |K| command.  Environment variables are
-+	expanded |:set_env|.  ":help" may be used to access the Vim internal
-+	help.  (Note that previously setting the global option to the empty
-+	value did this, which is now deprecated.)
-+	When "man" is used, Vim will automatically translate a count for the
-+	"K" command to a section number.  Also for "man -s", in which case the
-+	"-s" is removed when there is no count.
-+	See |option-backslash| about including spaces and backslashes.
-+	Example: >
-+		:set keywordprg=man\ -s
-+<	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+					*'langmap'* *'lmap'* *E357* *E358*
-+'langmap' 'lmap'	string	(default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+langmap|
-+			feature}
-+	This option allows switching your keyboard into a special language
-+	mode.  When you are typing text in Insert mode the characters are
-+	inserted directly.  When in command mode the 'langmap' option takes
-+	care of translating these special characters to the original meaning
-+	of the key.  This means you don't have to change the keyboard mode to
-+	be able to execute Normal mode commands.
-+	This is the opposite of the 'keymap' option, where characters are
-+	mapped in Insert mode.
-+
-+	Example (for Greek, in UTF-8):				*greek*  >
-+	    :set langmap=ÎA,ÎB,ÎšC,ÎD,ÎE,ÎŠF,ÎG,ÎH,ÎI,ÎJ,ÎK,ÎL,ÎM,ÎN,ÎO,Î P,QQ,Î¡R,Î£S,Î€T,ÎU,Î©V,WW,Î§X,Î¥Y,ÎZ,Î±a,Î²b,Ïc,ÎŽd,Îµe,Ïf,Î³g,Î·h,Î¹i,ÎŸj,Îºk,Î»l,ÎŒm,Îœn,Î¿o,Ïp,qq,Ïr,Ïs,Ït,Îžu,Ïv,Ïw,Ïx,Ï
-y,Î¶z
-+<	Example (exchanges meaning of z and y for commands): >
-+	    :set langmap=zy,yz,ZY,YZ
-+<
-+	The 'langmap' option is a list of parts, separated with commas.  Each
-+	part can be in one of two forms:
-+	1.  A list of pairs.  Each pair is a "from" character immediately
-+	    followed by the "to" character.  Examples: "aA", "aAbBcC".
-+	2.  A list of "from" characters, a semi-colon and a list of "to"
-+	    characters.  Example: "abc;ABC"
-+	Example: "aA,fgh;FGH,cCdDeE"
-+	Special characters need to be preceded with a backslash.  These are
-+	";", ',' and backslash itself.
-+
-+	This will allow you to activate vim actions without having to switch
-+	back and forth between the languages.  Your language characters will
-+	be understood as normal vim English characters (according to the
-+	langmap mappings) in the following cases:
-+	 o Normal/Visual mode (commands, buffer/register names, user mappings)
-+	 o Insert/Replace Mode: Register names after CTRL-R
-+	 o Insert/Replace Mode: Mappings
-+	Characters entered in Command-line mode will NOT be affected by
-+	this option.   Note that this option can be changed at any time
-+	allowing to switch between mappings for different languages/encodings.
-+	Use a mapping to avoid having to type it each time!
-+
-+					*'langmenu'* *'lm'*
-+'langmenu' 'lm'		string	(default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+menu| and
-+			|+multi_lang| features}
-+	Language to use for menu translation.  Tells which file is loaded
-+	from the "lang" directory in 'runtimepath': >
-+		"lang/menu_" . &langmenu . ".vim"
-+<	(without the spaces).  For example, to always use the Dutch menus, no
-+	matter what $LANG is set to: >
-+		:set langmenu=nl_NL.ISO_8859-1
-+<	When 'langmenu' is empty, |v:lang| is used.
-+	Only normal file name characters can be used, "/\*?[|<>" are illegal.
-+	If your $LANG is set to a non-English language but you do want to use
-+	the English menus: >
-+		:set langmenu=none
-+<	This option must be set before loading menus, switching on filetype
-+	detection or syntax highlighting.  Once the menus are defined setting
-+	this option has no effect.  But you could do this: >
-+		:source $VIMRUNTIME/delmenu.vim
-+		:set langmenu=de_DE.ISO_8859-1
-+		:source $VIMRUNTIME/menu.vim
-+<	Warning: This deletes all menus that you defined yourself!
-+
-+					*'laststatus'* *'ls'*
-+'laststatus' 'ls'	number	(default 1)
-+			global
-+			{not in Vi}
-+	The value of this option influences when the last window will have a
-+	status line:
-+		0: never
-+		1: only if there are at least two windows
-+		2: always
-+	The screen looks nicer with a status line if you have several
-+	windows, but it takes another screen line. |status-line|
-+
-+			*'lazyredraw'* *'lz'* *'nolazyredraw'* *'nolz'*
-+'lazyredraw' 'lz'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	When this option is set, the screen will not be redrawn while
-+	executing macros, registers and other commands that have not been
-+	typed.  Also, updating the window title is postponed.  To force an
-+	update use |:redraw|.
-+
-+			*'linebreak'* *'lbr'* *'nolinebreak'* *'nolbr'*
-+'linebreak' 'lbr'	boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+linebreak|
-+			feature}
-+	If on Vim will wrap long lines at a character in 'breakat' rather
-+	than at the last character that fits on the screen.  Unlike
-+	'wrapmargin' and 'textwidth', this does not insert <EOL>s in the file,
-+	it only affects the way the file is displayed, not its contents.  The
-+	value of 'showbreak' is used to put in front of wrapped lines.
-+	This option is not used when the 'wrap' option is off or 'list' is on.
-+	Note that <Tab> characters after an <EOL> are mostly not displayed
-+	with the right amount of white space.
-+
-+						*'lines'* *E593*
-+'lines'			number	(default 24 or terminal height)
-+			global
-+	Number of lines of the Vim window.
-+	Normally you don't need to set this.  It is done automatically by the
-+	terminal initialization code.  Also see |posix-screen-size|.
-+	When Vim is running in the GUI or in a resizable window, setting this
-+	option will cause the window size to be changed.  When you only want
-+	to use the size for the GUI, put the command in your |gvimrc| file.
-+	Vim limits the number of lines to what fits on the screen.  You can
-+	use this command to get the tallest window possible: >
-+		:set lines=999
-+<	Minimum value is 2, maximum value is 1000.
-+	If you get less lines than expected, check the 'guiheadroom' option.
-+	When you set this option and Vim is unable to change the physical
-+	number of lines of the display, the display may be messed up.
-+
-+						*'linespace'* *'lsp'*
-+'linespace' 'lsp'	number	(default 0, 1 for Win32 GUI)
-+			global
-+			{not in Vi}
-+			{only in the GUI}
-+	Number of pixel lines inserted between characters.  Useful if the font
-+	uses the full character cell height, making lines touch each other.
-+	When non-zero there is room for underlining.
-+	With some fonts there can be too much room between lines (to have
-+	space for ascents and descents).  Then it makes sense to set
-+	'linespace' to a negative value.  This may cause display problems
-+	though!
-+
-+						*'lisp'* *'nolisp'*
-+'lisp'			boolean	(default off)
-+			local to buffer
-+			{not available when compiled without the |+lispindent|
-+			feature}
-+	Lisp mode: When <Enter> is typed in insert mode set the indent for
-+	the next line to Lisp standards (well, sort of).  Also happens with
-+	"cc" or "S".  'autoindent' must also be on for this to work.  The 'p'
-+	flag in 'cpoptions' changes the method of indenting: Vi compatible or
-+	better.  Also see 'lispwords'.
-+	The '-' character is included in keyword characters.  Redefines the
-+	"=" operator to use this same indentation algorithm rather than
-+	calling an external program if 'equalprg' is empty.
-+	This option is not used when 'paste' is set.
-+	{Vi: Does it a little bit differently}
-+
-+						*'lispwords'* *'lw'*
-+'lispwords' 'lw'	string	(default is very long)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+lispindent|
-+			feature}
-+	Comma separated list of words that influence the Lisp indenting.
-+	|'lisp'|
-+
-+						*'list'* *'nolist'*
-+'list'			boolean	(default off)
-+			local to window
-+	List mode: Show tabs as CTRL-I is displayed, display $ after end of
-+	line.  Useful to see the difference between tabs and spaces and for
-+	trailing blanks.  Further changed by the 'listchars' option.
-+
-+	The cursor is displayed at the start of the space a Tab character
-+	occupies, not at the end as usual in Normal mode.  To get this cursor
-+	position while displaying Tabs with spaces, use: >
-+		:set list lcs=tab\ \ 
-+<
-+	Note that list mode will also affect formatting (set with 'textwidth'
-+	or 'wrapmargin') when 'cpoptions' includes 'L'.  See 'listchars' for
-+	changing the way tabs are displayed.
-+
-+						*'listchars'* *'lcs'*
-+'listchars' 'lcs'	string	(default "eol:$")
-+			global
-+			{not in Vi}
-+	Strings to use in 'list' mode and for the |:list| command.  It is a
-+	comma separated list of string settings.
-+	  eol:c		Character to show at the end of each line.  When
-+			omitted, there is no extra character at the end of the
-+			line.
-+	  tab:xy	Two characters to be used to show a tab.  The first
-+			char is used once.  The second char is repeated to
-+			fill the space that the tab normally occupies.
-+			"tab:>-" will show a tab that takes four spaces as
-+			">---".  When omitted, a tab is show as ^I.
-+	  trail:c	Character to show for trailing spaces.  When omitted,
-+			trailing spaces are blank.
-+	  extends:c	Character to show in the last column, when 'wrap' is
-+			off and the line continues beyond the right of the
-+			screen.
-+	  precedes:c	Character to show in the first column, when 'wrap'
-+			is off and there is text preceding the character
-+			visible in the first column.
-+	  conceal:c	Character to show in place of concealed text, when
-+			'conceallevel' is set to 1.
-+	  nbsp:c	Character to show for a non-breakable space (character
-+			0xA0, 160).  Left blank when omitted.
-+
-+	The characters ':' and ',' should not be used.  UTF-8 characters can
-+	be used when 'encoding' is "utf-8", otherwise only printable
-+	characters are allowed.  All characters must be single width.
-+
-+	Examples: >
-+	    :set lcs=tab:>-,trail:-
-+	    :set lcs=tab:>-,eol:<,nbsp:%
-+	    :set lcs=extends:>,precedes:<
-+<	The "NonText" highlighting will be used for "eol", "extends" and
-+	"precedes".  "SpecialKey" for "nbsp", "tab" and "trail".
-+	|hl-NonText| |hl-SpecialKey|
-+
-+			*'lpl'* *'nolpl'* *'loadplugins'* *'noloadplugins'*
-+'loadplugins' 'lpl'	boolean	(default on)
-+			global
-+			{not in Vi}
-+	When on the plugin scripts are loaded when starting up |load-plugins|.
-+	This option can be reset in your |vimrc| file to disable the loading
-+	of plugins.
-+	Note that using the "-u NONE" and "--noplugin" command line arguments
-+	reset this option. |-u| |--noplugin|
-+
-+						*'macatsui'* *'nomacatsui'*
-+'macatsui'		boolean	(default on)
-+			global
-+			{only available in Mac GUI version}
-+	This is a workaround for when drawing doesn't work properly.  When set
-+	and compiled with multi-byte support ATSUI text drawing is used.  When
-+	not set ATSUI text drawing is not used.  Switch this option off when
-+	you experience drawing problems.  In a future version the problems may
-+	be solved and this option becomes obsolete.  Therefore use this method
-+	to unset it: >
-+		if exists('&macatsui')
-+		   set nomacatsui
-+		endif
-+<	Another option to check if you have drawing problems is
-+	'termencoding'.
-+
-+						*'magic'* *'nomagic'*
-+'magic'			boolean	(default on)
-+			global
-+	Changes the special characters that can be used in search patterns.
-+	See |pattern|.
-+	NOTE: To avoid portability problems with using patterns, always keep
-+	this option at the default "on".  Only switch it off when working with
-+	old Vi scripts.  In any other situation write patterns that work when
-+	'magic' is on.  Include "\M" when you want to |/\M|.
-+
-+						*'makeef'* *'mef'*
-+'makeef' 'mef'		string	(default: "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+quickfix|
-+			feature}
-+	Name of the errorfile for the |:make| command (see |:make_makeprg|)
-+	and the |:grep| command.
-+	When it is empty, an internally generated temp file will be used.
-+	When "##" is included, it is replaced by a number to make the name
-+	unique.  This makes sure that the ":make" command doesn't overwrite an
-+	existing file.
-+	NOT used for the ":cf" command.  See 'errorfile' for that.
-+	Environment variables are expanded |:set_env|.
-+	See |option-backslash| about including spaces and backslashes.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'makeprg'* *'mp'*
-+'makeprg' 'mp'		string	(default "make", VMS: "MMS")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	Program to use for the ":make" command.  See |:make_makeprg|.
-+	This option may contain '%' and '#' characters, which are expanded to
-+	the current and alternate file name. |:_%| |:_#|
-+	Environment variables are expanded |:set_env|.  See |option-backslash|
-+	about including spaces and backslashes.
-+	Note that a '|' must be escaped twice: once for ":set" and once for
-+	the interpretation of a command.  When you use a filter called
-+	"myfilter" do it like this: >
-+	    :set makeprg=gmake\ \\\|\ myfilter
-+<	The placeholder "$*" can be given (even multiple times) to specify
-+	where the arguments will be included, for example: >
-+	    :set makeprg=latex\ \\\\nonstopmode\ \\\\input\\{$*}
-+<	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'colorcolumn'* *'cc'*
-+'colorcolumn' 'cc'	string	(default "")
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	'colorcolumn' is a comma separated list of screen columns that are
-+	highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
-+	text.  Will make screen redrawing slower.
-+	The screen column can be an absolute number, or a number preceded with
-+	'+' or '-', which is added to or subtracted from 'textwidth'. >
-+
-+		:set cc=+1  " highlight column after 'textwidth'
-+		:set cc=+1,+2,+3  " highlight three columns after 'textwidth'
-+		:hi ColorColumn ctermbg=lightgrey guibg=lightgrey
-+<
-+	When 'textwidth' is zero then the items with '-' and '+' are not used.
-+	A maximum of 256 columns are highlighted.
-+
-+						*'matchpairs'* *'mps'*
-+'matchpairs' 'mps'	string	(default "(:),{:},[:]")
-+			local to buffer
-+			{not in Vi}
-+	Characters that form pairs.  The |%| command jumps from one to the
-+	other.  Currently only single byte character pairs are allowed, and
-+	they must be different.  The characters must be separated by a colon.
-+	The pairs must be separated by a comma.  Example for including '<' and
-+	'>' (HTML): >
-+		:set mps+=<:>
-+
-+<	A more exotic example, to jump between the '=' and ';' in an
-+	assignment, useful for languages like C and Java: >
-+		:au FileType c,cpp,java set mps+==:;
-+
-+<	For a more advanced way of using "%", see the matchit.vim plugin in
-+	the $VIMRUNTIME/macros directory. |add-local-help|
-+
-+						*'matchtime'* *'mat'*
-+'matchtime' 'mat'	number	(default 5)
-+			global
-+			{not in Vi}{in Nvi}
-+	Tenths of a second to show the matching paren, when 'showmatch' is
-+	set.  Note that this is not in milliseconds, like other options that
-+	set a time.  This is to be compatible with Nvi.
-+
-+						*'maxcombine'* *'mco'*
-+'maxcombine' 'mco'	number (default 2)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+	The maximum number of combining characters supported for displaying.
-+	Only used when 'encoding' is "utf-8".
-+	The default is OK for most languages.  Hebrew may require 4.
-+	Maximum value is 6.
-+	Even when this option is set to 2 you can still edit text with more
-+	combining characters, you just can't see them.  Use |g8| or |ga|.
-+	See |mbyte-combining|.
-+
-+						*'maxfuncdepth'* *'mfd'*
-+'maxfuncdepth' 'mfd'	number	(default 100)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+eval|
-+			feature}
-+	Maximum depth of function calls for user functions.  This normally
-+	catches endless recursion.  When using a recursive function with
-+	more depth, set 'maxfuncdepth' to a bigger number.  But this will use
-+	more memory, there is the danger of failing when memory is exhausted.
-+	See also |:function|.
-+
-+						*'maxmapdepth'* *'mmd'* *E223*
-+'maxmapdepth' 'mmd'	number	(default 1000)
-+			global
-+			{not in Vi}
-+	Maximum number of times a mapping is done without resulting in a
-+	character to be used.  This normally catches endless mappings, like
-+	":map x y" with ":map y x".  It still does not catch ":map g wg",
-+	because the 'w' is used before the next mapping is done.  See also
-+	|key-mapping|.
-+
-+						*'maxmem'* *'mm'*
-+'maxmem' 'mm'		number	(default between 256 to 5120 (system
-+				 dependent) or half the amount of memory
-+				 available)
-+			global
-+			{not in Vi}
-+	Maximum amount of memory (in Kbyte) to use for one buffer.  When this
-+	limit is reached allocating extra memory for a buffer will cause
-+	other memory to be freed.  The maximum usable value is about 2000000.
-+	Use this to work without a limit.  Also see 'maxmemtot'.
-+
-+						*'maxmempattern'* *'mmp'*
-+'maxmempattern' 'mmp'	number	(default 1000)
-+			global
-+			{not in Vi}
-+	Maximum amount of memory (in Kbyte) to use for pattern matching.
-+	The maximum value is about 2000000.  Use this to work without a limit.
-+							*E363*
-+	When Vim runs into the limit it gives an error message and mostly
-+	behaves like CTRL-C was typed.
-+	Running into the limit often means that the pattern is very
-+	inefficient or too complex.  This may already happen with the pattern
-+	"\(.\)*" on a very long line.  ".*" works much better.
-+	Vim may run out of memory before hitting the 'maxmempattern' limit.
-+
-+						*'maxmemtot'* *'mmt'*
-+'maxmemtot' 'mmt'	number	(default between 2048 and 10240 (system
-+				 dependent) or half the amount of memory
-+				 available)
-+			global
-+			{not in Vi}
-+	Maximum amount of memory in Kbyte to use for all buffers together.
-+	The maximum usable value is about 2000000 (2 Gbyte).  Use this to work
-+	without a limit.  On 64 bit machines higher values might work.  But
-+	hey, do you really need more than 2 Gbyte for text editing?
-+	Also see 'maxmem'.
-+
-+						*'menuitems'* *'mis'*
-+'menuitems' 'mis'	number	(default 25)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+menu|
-+			feature}
-+	Maximum number of items to use in a menu.  Used for menus that are
-+	generated from a list of items, e.g., the Buffers menu.  Changing this
-+	option has no direct effect, the menu must be refreshed first.
-+
-+						*'mkspellmem'* *'msm'*
-+'mkspellmem' 'msm'	string	(default "460000,2000,500")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	Parameters for |:mkspell|.  This tunes when to start compressing the
-+	word tree.  Compression can be slow when there are many words, but
-+	it's needed to avoid running out of memory.  The amount of memory used
-+	per word depends very much on how similar the words are, that's why
-+	this tuning is complicated.
-+
-+	There are three numbers, separated by commas:
-+		{start},{inc},{added}
-+
-+	For most languages the uncompressed word tree fits in memory.  {start}
-+	gives the amount of memory in Kbyte that can be used before any
-+	compression is done.  It should be a bit smaller than the amount of
-+	memory that is available to Vim.
-+
-+	When going over the {start} limit the {inc} number specifies the
-+	amount of memory in Kbyte that can be allocated before another
-+	compression is done.  A low number means compression is done after
-+	less words are added, which is slow.  A high number means more memory
-+	will be allocated.
-+
-+	After doing compression, {added} times 1024 words can be added before
-+	the {inc} limit is ignored and compression is done when any extra
-+	amount of memory is needed.  A low number means there is a smaller
-+	chance of hitting the {inc} limit, less memory is used but it's
-+	slower.
-+
-+	The languages for which these numbers are important are Italian and
-+	Hungarian.  The default works for when you have about 512 Mbyte.  If
-+	you have 1 Gbyte you could use: >
-+		:set mkspellmem=900000,3000,800
-+<	If you have less than 512 Mbyte |:mkspell| may fail for some
-+	languages, no matter what you set 'mkspellmem' to.
-+
-+				   *'modeline'* *'ml'* *'nomodeline'* *'noml'*
-+'modeline' 'ml'		boolean	(Vim default: on (off for root),
-+				 Vi default: off)
-+			local to buffer
-+						*'modelines'* *'mls'*
-+'modelines' 'mls'	number	(default 5)
-+			global
-+			{not in Vi}
-+	If 'modeline' is on 'modelines' gives the number of lines that is
-+	checked for set commands.  If 'modeline' is off or 'modelines' is zero
-+	no lines are checked.  See |modeline|.
-+	NOTE: 'modeline' is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+				*'modifiable'* *'ma'* *'nomodifiable'* *'noma'*
-+'modifiable' 'ma'	boolean	(default on)
-+			local to buffer
-+			{not in Vi}		*E21*
-+	When off the buffer contents cannot be changed.  The 'fileformat' and
-+	'fileencoding' options also can't be changed.
-+	Can be reset with the |-M| command line argument.
-+
-+				*'modified'* *'mod'* *'nomodified'* *'nomod'*
-+'modified' 'mod'	boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+	When on, the buffer is considered to be modified.  This option is set
-+	when:
-+	1. A change was made to the text since it was last written.  Using the
-+	   |undo| command to go back to the original text will reset the
-+	   option.  But undoing changes that were made before writing the
-+	   buffer will set the option again, since the text is different from
-+	   when it was written.
-+	2. 'fileformat' or 'fileencoding' is different from its original
-+	   value.  The original value is set when the buffer is read or
-+	   written.  A ":set nomodified" command also resets the original
-+	   values to the current values and the 'modified' option will be
-+	   reset.
-+	When 'buftype' is "nowrite" or "nofile" this option may be set, but
-+	will be ignored.
-+
-+						*'more'* *'nomore'*
-+'more'			boolean	(Vim default: on, Vi default: off)
-+			global
-+			{not in Vi}
-+	When on, listings pause when the whole screen is filled.  You will get
-+	the |more-prompt|.  When this option is off there are no pauses, the
-+	listing continues until finished.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+						*'mouse'* *E538*
-+'mouse'			string	(default "", "a" for GUI, MS-DOS and Win32)
-+			global
-+			{not in Vi}
-+	Enable the use of the mouse.  Only works for certain terminals
-+	(xterm, MS-DOS, Win32 |win32-mouse|, QNX pterm, *BSD console with
-+	sysmouse and Linux console with gpm).  For using the mouse in the
-+	GUI, see |gui-mouse|.
-+	The mouse can be enabled for different modes:
-+		n	Normal mode
-+		v	Visual mode
-+		i	Insert mode
-+		c	Command-line mode
-+		h	all previous modes when editing a help file
-+		a	all previous modes
-+		r	for |hit-enter| and |more-prompt| prompt
-+	Normally you would enable the mouse in all four modes with: >
-+		:set mouse=a
-+<	When the mouse is not enabled, the GUI will still use the mouse for
-+	modeless selection.  This doesn't move the text cursor.
-+
-+	See |mouse-using|.  Also see |'clipboard'|.
-+
-+	Note: When enabling the mouse in a terminal, copy/paste will use the
-+	"* register if there is access to an X-server.  The xterm handling of
-+	the mouse buttons can still be used by keeping the shift key pressed.
-+	Also see the 'clipboard' option.
-+
-+			*'mousefocus'* *'mousef'* *'nomousefocus'* *'nomousef'*
-+'mousefocus' 'mousef'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{only works in the GUI}
-+	The window that the mouse pointer is on is automatically activated.
-+	When changing the window layout or window focus in another way, the
-+	mouse pointer is moved to the window with keyboard focus.  Off is the
-+	default because it makes using the pull down menus a little goofy, as
-+	a pointer transit may activate a window unintentionally.
-+
-+			*'mousehide'* *'mh'* *'nomousehide'* *'nomh'*
-+'mousehide' 'mh'	boolean	(default on)
-+			global
-+			{not in Vi}
-+			{only works in the GUI}
-+	When on, the mouse pointer is hidden when characters are typed.
-+	The mouse pointer is restored when the mouse is moved.
-+
-+						*'mousemodel'* *'mousem'*
-+'mousemodel' 'mousem'	string	(default "extend", "popup" for MS-DOS and Win32)
-+			global
-+			{not in Vi}
-+	Sets the model to use for the mouse.  The name mostly specifies what
-+	the right mouse button is used for:
-+	   extend	Right mouse button extends a selection.  This works
-+			like in an xterm.
-+	   popup	Right mouse button pops up a menu.  The shifted left
-+			mouse button extends a selection.  This works like
-+			with Microsoft Windows.
-+	   popup_setpos Like "popup", but the cursor will be moved to the
-+			position where the mouse was clicked, and thus the
-+			selected operation will act upon the clicked object.
-+			If clicking inside a selection, that selection will
-+			be acted upon, i.e. no cursor move.  This implies of
-+			course, that right clicking outside a selection will
-+			end Visual mode.
-+	Overview of what button does what for each model:
-+	mouse		    extend		popup(_setpos) ~
-+	left click	    place cursor	place cursor
-+	left drag	    start selection	start selection
-+	shift-left	    search word		extend selection
-+	right click	    extend selection	popup menu (place cursor)
-+	right drag	    extend selection	-
-+	middle click	    paste		paste
-+
-+	In the "popup" model the right mouse button produces a pop-up menu.
-+	You need to define this first, see |popup-menu|.
-+
-+	Note that you can further refine the meaning of buttons with mappings.
-+	See |gui-mouse-mapping|.  But mappings are NOT used for modeless
-+	selection (because that's handled in the GUI code directly).
-+
-+	The 'mousemodel' option is set by the |:behave| command.
-+
-+					*'mouseshape'* *'mouses'* *E547*
-+'mouseshape' 'mouses'	string	(default "i:beam,r:beam,s:updown,sd:cross,
-+					m:no,ml:up-arrow,v:rightup-arrow")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+mouseshape|
-+			feature}
-+	This option tells Vim what the mouse pointer should look like in
-+	different modes.  The option is a comma separated list of parts, much
-+	like used for 'guicursor'.  Each part consist of a mode/location-list
-+	and an argument-list:
-+		mode-list:shape,mode-list:shape,..
-+	The mode-list is a dash separated list of these modes/locations:
-+			In a normal window: ~
-+		n	Normal mode
-+		v	Visual mode
-+		ve	Visual mode with 'selection' "exclusive" (same as 'v',
-+			if not specified)
-+		o	Operator-pending mode
-+		i	Insert mode
-+		r	Replace mode
-+
-+			Others: ~
-+		c	appending to the command-line
-+		ci	inserting in the command-line
-+		cr	replacing in the command-line
-+		m	at the 'Hit ENTER' or 'More' prompts
-+		ml	idem, but cursor in the last line
-+		e	any mode, pointer below last window
-+		s	any mode, pointer on a status line
-+		sd	any mode, while dragging a status line
-+		vs	any mode, pointer on a vertical separator line
-+		vd	any mode, while dragging a vertical separator line
-+		a	everywhere
-+
-+	The shape is one of the following:
-+	avail	name		looks like ~
-+	w x	arrow		Normal mouse pointer
-+	w x	blank		no pointer at all (use with care!)
-+	w x	beam		I-beam
-+	w x	updown		up-down sizing arrows
-+	w x	leftright	left-right sizing arrows
-+	w x	busy		The system's usual busy pointer
-+	w x	no		The system's usual 'no input' pointer
-+	  x	udsizing	indicates up-down resizing
-+	  x	lrsizing	indicates left-right resizing
-+	  x	crosshair	like a big thin +
-+	  x	hand1		black hand
-+	  x	hand2		white hand
-+	  x	pencil		what you write with
-+	  x	question	big ?
-+	  x	rightup-arrow	arrow pointing right-up
-+	w x	up-arrow	arrow pointing up
-+	  x	<number>	any X11 pointer number (see X11/cursorfont.h)
-+
-+	The "avail" column contains a 'w' if the shape is available for Win32,
-+	x for X11.
-+	Any modes not specified or shapes not available use the normal mouse
-+	pointer.
-+
-+	Example: >
-+		:set mouseshape=s:udsizing,m:no
-+<	will make the mouse turn to a sizing arrow over the status lines and
-+	indicate no input when the hit-enter prompt is displayed (since
-+	clicking the mouse has no effect in this state.)
-+
-+						*'mousetime'* *'mouset'*
-+'mousetime' 'mouset'	number	(default 500)
-+			global
-+			{not in Vi}
-+	Only for GUI, MS-DOS, Win32 and Unix with xterm.  Defines the maximum
-+	time in msec between two mouse clicks for the second click to be
-+	recognized as a multi click.
-+
-+						    *'mzquantum'* *'mzq'*
-+'mzquantum' 'mzq'	number	(default 100)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+mzscheme|
-+			feature}
-+	The number of milliseconds between polls for MzScheme threads.
-+	Negative or zero value means no thread scheduling.
-+
-+							*'nrformats'* *'nf'*
-+'nrformats' 'nf'	string	(default "octal,hex")
-+			local to buffer
-+			{not in Vi}
-+	This defines what bases Vim will consider for numbers when using the
-+	CTRL-A and CTRL-X commands for adding to and subtracting from a number
-+	respectively; see |CTRL-A| for more info on these commands.
-+	alpha	If included, single alphabetical characters will be
-+		incremented or decremented.  This is useful for a list with a
-+		letter index a), b), etc.			*octal-number*
-+	octal	If included, numbers that start with a zero will be considered
-+		to be octal.  Example: Using CTRL-A on "007" results in "010".
-+	hex	If included, numbers starting with "0x" or "0X" will be
-+		considered to be hexadecimal.  Example: Using CTRL-X on
-+		"0x100" results in "0x0ff".
-+	Numbers which simply begin with a digit in the range 1-9 are always
-+	considered decimal.  This also happens for numbers that are not
-+	recognized as octal or hex.
-+
-+				*'number'* *'nu'* *'nonumber'* *'nonu'*
-+'number' 'nu'		boolean	(default off)
-+			local to window
-+	Print the line number in front of each line.  When the 'n' option is
-+	excluded from 'cpoptions' a wrapped line will not use the column of
-+	line numbers (this is the default when 'compatible' isn't set).
-+	The 'numberwidth' option can be used to set the room used for the line
-+	number.
-+	When a long, wrapped line doesn't start with the first character, '-'
-+	characters are put before the number.
-+	See |hl-LineNr| for the highlighting used for the number.
-+	When setting this option, 'relativenumber' is reset.
-+
-+						*'numberwidth'* *'nuw'*
-+'numberwidth' 'nuw'	number	(Vim default: 4  Vi default: 8)
-+			local to window
-+			{not in Vi}
-+			{only available when compiled with the |+linebreak|
-+			feature}
-+	Minimal number of columns to use for the line number.  Only relevant
-+	when the 'number' or 'relativenumber' option is set or printing lines
-+	with a line number. Since one space is always between the number and
-+	the text, there is one less character for the number itself.
-+	The value is the minimum width.  A bigger width is used when needed to
-+	fit the highest line number in the buffer respectively the number of
-+	rows in the window, depending on whether 'number' or 'relativenumber'
-+	is set. Thus with the Vim default of 4 there is room for a line number
-+	up to 999. When the buffer has 1000 lines five columns will be used.
-+	The minimum value is 1, the maximum value is 10.
-+	NOTE: 'numberwidth' is reset to 8 when 'compatible' is set.
-+
-+						*'omnifunc'* *'ofu'*
-+'omnifunc' 'ofu'	string	(default: empty)
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+eval|
-+			or |+insert_expand| features}
-+	This option specifies a function to be used for Insert mode omni
-+	completion with CTRL-X CTRL-O. |i_CTRL-X_CTRL-O|
-+	See |complete-functions| for an explanation of how the function is
-+	invoked and what it should return.
-+	This option is usually set by a filetype plugin:
-+	|:filetype-plugin-on|
-+
-+
-+			    *'opendevice'* *'odev'* *'noopendevice'* *'noodev'*
-+'opendevice' 'odev'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{only for MS-DOS, MS-Windows and OS/2}
-+	Enable reading and writing from devices.  This may get Vim stuck on a
-+	device that can be opened but doesn't actually do the I/O.  Therefore
-+	it is off by default.
-+	Note that on MS-Windows editing "aux.h", "lpt1.txt" and the like also
-+	result in editing a device.
-+
-+
-+						*'operatorfunc'* *'opfunc'*
-+'operatorfunc' 'opfunc'	string	(default: empty)
-+			global
-+			{not in Vi}
-+	This option specifies a function to be called by the |g@| operator.
-+	See |:map-operator| for more info and an example.
-+
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+
-+					*'osfiletype'* *'oft'* *E366*
-+'osfiletype' 'oft'	string (RISC-OS default: "Text",
-+				others default: "")
-+			local to buffer
-+			{not in Vi}
-+			{only available when compiled with the |+osfiletype|
-+			feature}
-+	Some operating systems store extra information about files besides
-+	name, datestamp and permissions.  This option contains the extra
-+	information, the nature of which will vary between systems.
-+	The value of this option is usually set when the file is loaded, and
-+	is used to set the operating system file type when file is written.
-+	It can affect the pattern matching of the automatic commands.
-+	|autocmd-osfiletypes|
-+
-+						*'paragraphs'* *'para'*
-+'paragraphs' 'para'	string	(default "IPLPPPQPP TPHPLIPpLpItpplpipbp")
-+			global
-+	Specifies the nroff macros that separate paragraphs.  These are pairs
-+	of two letters (see |object-motions|).
-+
-+						*'paste'* *'nopaste'*
-+'paste'			boolean	(default off)
-+			global
-+			{not in Vi}
-+	Put Vim in Paste mode.  This is useful if you want to cut or copy
-+	some text from one window and paste it in Vim.  This will avoid
-+	unexpected effects.
-+	Setting this option is useful when using Vim in a terminal, where Vim
-+	cannot distinguish between typed text and pasted text.  In the GUI, Vim
-+	knows about pasting and will mostly do the right thing without 'paste'
-+	being set.  The same is true for a terminal where Vim handles the
-+	mouse clicks itself.
-+	This option is reset when starting the GUI.  Thus if you set it in
-+	your .vimrc it will work in a terminal, but not in the GUI.  Setting
-+	'paste' in the GUI has side effects: e.g., the Paste toolbar button
-+	will no longer work in Insert mode, because it uses a mapping.
-+	When the 'paste' option is switched on (also when it was already on):
-+		- mapping in Insert mode and Command-line mode is disabled
-+		- abbreviations are disabled
-+		- 'textwidth' is set to 0
-+		- 'wrapmargin' is set to 0
-+		- 'autoindent' is reset
-+		- 'smartindent' is reset
-+		- 'softtabstop' is set to 0
-+		- 'revins' is reset
-+		- 'ruler' is reset
-+		- 'showmatch' is reset
-+		- 'formatoptions' is used like it is empty
-+	These options keep their value, but their effect is disabled:
-+		- 'lisp'
-+		- 'indentexpr'
-+		- 'cindent'
-+	NOTE: When you start editing another file while the 'paste' option is
-+	on, settings from the modelines or autocommands may change the
-+	settings again, causing trouble when pasting text.  You might want to
-+	set the 'paste' option again.
-+	When the 'paste' option is reset the mentioned options are restored to
-+	the value before the moment 'paste' was switched from off to on.
-+	Resetting 'paste' before ever setting it does not have any effect.
-+	Since mapping doesn't work while 'paste' is active, you need to use
-+	the 'pastetoggle' option to toggle the 'paste' option with some key.
-+
-+						*'pastetoggle'* *'pt'*
-+'pastetoggle' 'pt'	string	(default "")
-+			global
-+			{not in Vi}
-+	When non-empty, specifies the key sequence that toggles the 'paste'
-+	option.  This is like specifying a mapping: >
-+	    :map {keys} :set invpaste<CR>
-+<	Where {keys} is the value of 'pastetoggle'.
-+	The difference is that it will work even when 'paste' is set.
-+	'pastetoggle' works in Insert mode and Normal mode, but not in
-+	Command-line mode.
-+	Mappings are checked first, thus overrule 'pastetoggle'.  However,
-+	when 'paste' is on mappings are ignored in Insert mode, thus you can do
-+	this: >
-+	    :map <F10> :set paste<CR>
-+	    :map <F11> :set nopaste<CR>
-+	    :imap <F10> <C-O>:set paste<CR>
-+	    :imap <F11> <nop>
-+	    :set pastetoggle=<F11>
-+<	This will make <F10> start paste mode and <F11> stop paste mode.
-+	Note that typing <F10> in paste mode inserts "<F10>", since in paste
-+	mode everything is inserted literally, except the 'pastetoggle' key
-+	sequence.
-+	When the value has several bytes 'ttimeoutlen' applies.
-+
-+						*'pex'* *'patchexpr'*
-+'patchexpr' 'pex'	string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+diff|
-+			feature}
-+	Expression which is evaluated to apply a patch to a file and generate
-+	the resulting new version of the file.  See |diff-patchexpr|.
-+
-+						*'patchmode'* *'pm'* *E206*
-+'patchmode' 'pm'	string	(default "")
-+			global
-+			{not in Vi}
-+	When non-empty the oldest version of a file is kept.  This can be used
-+	to keep the original version of a file if you are changing files in a
-+	source distribution.  Only the first time that a file is written a
-+	copy of the original file will be kept.  The name of the copy is the
-+	name of the original file with the string in the 'patchmode' option
-+	appended.  This option should start with a dot.  Use a string like
-+	".org".  'backupdir' must not be empty for this to work (Detail: The
-+	backup file is renamed to the patchmode file after the new file has
-+	been successfully written, that's why it must be possible to write a
-+	backup file).  If there was no file to be backed up, an empty file is
-+	created.
-+	When the 'backupskip' pattern matches, a patchmode file is not made.
-+	Using 'patchmode' for compressed files appends the extension at the
-+	end (e.g., "file.gz.orig"), thus the resulting name isn't always
-+	recognized as a compressed file.
-+	Only normal file name characters can be used, "/\*?[|<>" are illegal.
-+
-+					*'path'* *'pa'* *E343* *E345* *E347*
-+'path' 'pa'		string	(default on Unix: ".,/usr/include,,"
-+				   on OS/2:	  ".,/emx/include,,"
-+				   other systems: ".,,")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	This is a list of directories which will be searched when using the
-+	|gf|, [f, ]f, ^Wf, |:find|, |:sfind|, |:tabfind| and other commands,
-+	provided that the file being searched for has a relative path (not
-+	starting with "/", "./" or "../").  The directories in the 'path'
-+	option may be relative or absolute.
-+	- Use commas to separate directory names: >
-+		:set path=.,/usr/local/include,/usr/include
-+<	- Spaces can also be used to separate directory names (for backwards
-+	  compatibility with version 3.0).  To have a space in a directory
-+	  name, precede it with an extra backslash, and escape the space: >
-+		:set path=.,/dir/with\\\ space
-+<	- To include a comma in a directory name precede it with an extra
-+	  backslash: >
-+		:set path=.,/dir/with\\,comma
-+<	- To search relative to the directory of the current file, use: >
-+		:set path=.
-+<	- To search in the current directory use an empty string between two
-+	  commas: >
-+		:set path=,,
-+<	- A directory name may end in a ':' or '/'.
-+	- Environment variables are expanded |:set_env|.
-+	- When using |netrw.vim| URLs can be used.  For example, adding
-+	  "http://www.vim.org" will make ":find index.html" work.
-+	- Search upwards and downwards in a directory tree using "*", "**" and
-+	  ";".  See |file-searching| for info and syntax.
-+	  {not available when compiled without the |+path_extra| feature}
-+	- Careful with '\' characters, type two to get one in the option: >
-+		:set path=.,c:\\include
-+<	  Or just use '/' instead: >
-+		:set path=.,c:/include
-+<	Don't forget "." or files won't even be found in the same directory as
-+	the file!
-+	The maximum length is limited.  How much depends on the system, mostly
-+	it is something like 256 or 1024 characters.
-+	You can check if all the include files are found, using the value of
-+	'path', see |:checkpath|.
-+	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	directories from the list.  This avoids problems when a future version
-+	uses another default.  To remove the current directory use: >
-+		:set path-=
-+<	To add the current directory use: >
-+		:set path+=
-+<	To use an environment variable, you probably need to replace the
-+	separator.  Here is an example to append $INCL, in which directory
-+	names are separated with a semi-colon: >
-+		:let &path = &path . "," . substitute($INCL, ';', ',', 'g')
-+<	Replace the ';' with a ':' or whatever separator is used.  Note that
-+	this doesn't work when $INCL contains a comma or white space.
-+
-+			*'preserveindent'* *'pi'* *'nopreserveindent'* *'nopi'*
-+'preserveindent' 'pi'	boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+	When changing the indent of the current line, preserve as much of the
-+	indent structure as possible.  Normally the indent is replaced by a
-+	series of tabs followed by spaces as required (unless |'expandtab'| is
-+	enabled, in which case only spaces are used).  Enabling this option
-+	means the indent will preserve as many existing characters as possible
-+	for indenting, and only add additional tabs or spaces as required.
-+	'expandtab' does not apply to the preserved white space, a Tab remains
-+	a Tab.
-+	NOTE: When using ">>" multiple times the resulting indent is a mix of
-+	tabs and spaces.  You might not like this.
-+	NOTE: 'preserveindent' is reset when 'compatible' is set.
-+	Also see 'copyindent'.
-+	Use |:retab| to clean up white space.
-+
-+					*'previewheight'* *'pvh'*
-+'previewheight' 'pvh'	number (default 12)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows| or
-+			|+quickfix| features}
-+	Default height for a preview window.  Used for |:ptag| and associated
-+	commands.  Used for |CTRL-W_}| when no count is given.
-+
-+					*'previewwindow'* *'nopreviewwindow'*
-+					*'pvw'* *'nopvw'* *E590*
-+'previewwindow' 'pvw'	boolean (default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+windows| or
-+			|+quickfix| features}
-+	Identifies the preview window.  Only one window can have this option
-+	set.  It's normally not set directly, but by using one of the commands
-+	|:ptag|, |:pedit|, etc.
-+
-+						*'printdevice'* *'pdev'*
-+'printdevice' 'pdev'	string	(default empty)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+printer|
-+			feature}
-+	The name of the printer to be used for |:hardcopy|.
-+	See |pdev-option|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'printencoding'* *'penc'*
-+'printencoding' 'penc'	String	(default empty, except for some systems)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+printer|
-+			and |+postscript| features}
-+	Sets the character encoding used when printing.
-+	See |penc-option|.
-+
-+						*'printexpr'* *'pexpr'*
-+'printexpr' 'pexpr'	String	(default: see below)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+printer|
-+			and |+postscript| features}
-+	Expression used to print the PostScript produced with |:hardcopy|.
-+	See |pexpr-option|.
-+
-+						*'printfont'* *'pfn'*
-+'printfont' 'pfn'	string	(default "courier")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+printer|
-+			feature}
-+	The name of the font that will be used for |:hardcopy|.
-+	See |pfn-option|.
-+
-+						*'printheader'* *'pheader'*
-+'printheader' 'pheader'  string  (default "%<%f%h%m%=Page %N")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+printer|
-+			feature}
-+	The format of the header produced in |:hardcopy| output.
-+	See |pheader-option|.
-+
-+						*'printmbcharset'* *'pmbcs'*
-+'printmbcharset' 'pmbcs'  string (default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+printer|,
-+			|+postscript| and |+multi_byte| features}
-+	The CJK character set to be used for CJK output from |:hardcopy|.
-+	See |pmbcs-option|.
-+
-+						*'printmbfont'* *'pmbfn'*
-+'printmbfont' 'pmbfn'	string (default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+printer|,
-+			|+postscript| and |+multi_byte| features}
-+	List of font names to be used for CJK output from |:hardcopy|.
-+	See |pmbfn-option|.
-+
-+						*'printoptions'* *'popt'*
-+'printoptions' 'popt' string (default "")
-+			global
-+			{not in Vi}
-+			{only available when compiled with |+printer| feature}
-+	List of items that control the format of the output of |:hardcopy|.
-+	See |popt-option|.
-+
-+						*'prompt'* *'noprompt'*
-+'prompt'		boolean	(default on)
-+			global
-+	When on a ":" prompt is used in Ex mode.
-+
-+						*'pumheight'* *'ph'*
-+'pumheight' 'ph'	number	(default 0)
-+			global
-+			{not available when compiled without the
-+			|+insert_expand| feature}
-+			{not in Vi}
-+	Determines the maximum number of items to show in the popup menu for
-+	Insert mode completion.  When zero as much space as available is used.
-+	|ins-completion-menu|.
-+
-+
-+						*'quoteescape'* *'qe'*
-+'quoteescape' 'qe'	string	(default "\")
-+			local to buffer
-+			{not in Vi}
-+	The characters that are used to escape quotes in a string.  Used for
-+	objects like a', a" and a` |a'|.
-+	When one of the characters in this option is found inside a string,
-+	the following character will be skipped.  The default value makes the
-+	text "foo\"bar\\" considered to be one string.
-+
-+				   *'readonly'* *'ro'* *'noreadonly'* *'noro'*
-+'readonly' 'ro'		boolean	(default off)
-+			local to buffer
-+	If on, writes fail unless you use a '!'.  Protects you from
-+	accidentally overwriting a file.  Default on when Vim is started
-+	in read-only mode ("vim -R") or when the executable is called "view".
-+	When using ":w!" the 'readonly' option is reset for the current
-+	buffer, unless the 'Z' flag is in 'cpoptions'.
-+	{not in Vi:}  When using the ":view" command the 'readonly' option is
-+	set for the newly edited buffer.
-+
-+						*'redrawtime'* *'rdt'*
-+'redrawtime' 'rdt'	number	(default 2000)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+reltime|
-+			feature}
-+	The time in milliseconds for redrawing the display.  This applies to
-+	searching for patterns for 'hlsearch' and |:match| highlighting.
-+	When redrawing takes more than this many milliseconds no further
-+	matches will be highlighted.  This is used to avoid that Vim hangs
-+	when using a very complicated pattern.
-+
-+		*'relativenumber'* *'rnu'* *'norelativenumber'* *'nornu'*
-+'relativenumber' 'rnu'	boolean	(default off)
-+			local to window
-+			{not in Vi}
-+	Show the line number relative to the line with the cursor in front of
-+	each line. Relative line numbers help you use the |count| you can
-+	precede some vertical motion commands (e.g. j k + -) with, without
-+	having to calculate it yourself. Especially useful in combination with
-+	other commands (e.g. y d c < > gq gw =).
-+	When the 'n' option is excluded from 'cpoptions' a wrapped
-+	line will not use the column of line numbers (this is the default when
-+	'compatible' isn't set).
-+	The 'numberwidth' option can be used to set the room used for the line
-+	number.
-+	When a long, wrapped line doesn't start with the first character, '-'
-+	characters are put before the number.
-+	See |hl-LineNr| for the highlighting used for the number.
-+	When setting this option, 'number' is reset.
-+
-+						*'remap'* *'noremap'*
-+'remap'			boolean	(default on)
-+			global
-+	Allows for mappings to work recursively.  If you do not want this for
-+	a single entry, use the :noremap[!] command.
-+	NOTE: To avoid portability problems with Vim scripts, always keep
-+	this option at the default "on".  Only switch it off when working with
-+	old Vi scripts.
-+
-+						*'report'*
-+'report'		number	(default 2)
-+			global
-+	Threshold for reporting number of lines changed.  When the number of
-+	changed lines is more than 'report' a message will be given for most
-+	":" commands.  If you want it always, set 'report' to 0.
-+	For the ":substitute" command the number of substitutions is used
-+	instead of the number of lines.
-+
-+			 *'restorescreen'* *'rs'* *'norestorescreen'* *'nors'*
-+'restorescreen' 'rs'	boolean	(default on)
-+			global
-+			{not in Vi}  {only in Windows 95/NT console version}
-+	When set, the screen contents is restored when exiting Vim.  This also
-+	happens when executing external commands.
-+
-+	For non-Windows Vim: You can set or reset the 't_ti' and 't_te'
-+	options in your .vimrc.  To disable restoring:
-+		set t_ti= t_te=
-+	To enable restoring (for an xterm):
-+		set t_ti=^[7^[[r^[[?47h t_te=^[[?47l^[8
-+	(Where ^[ is an <Esc>, type CTRL-V <Esc> to insert it)
-+
-+				*'revins'* *'ri'* *'norevins'* *'nori'*
-+'revins' 'ri'		boolean	(default off)
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	Inserting characters in Insert mode will work backwards.  See "typing
-+	backwards" |ins-reverse|.  This option can be toggled with the CTRL-_
-+	command in Insert mode, when 'allowrevins' is set.
-+	NOTE: This option is reset when 'compatible' or 'paste' is set.
-+
-+				 *'rightleft'* *'rl'* *'norightleft'* *'norl'*
-+'rightleft' 'rl'	boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	When on, display orientation becomes right-to-left, i.e., characters
-+	that are stored in the file appear from the right to the left.
-+	Using this option, it is possible to edit files for languages that
-+	are written from the right to the left such as Hebrew and Arabic.
-+	This option is per window, so it is possible to edit mixed files
-+	simultaneously, or to view the same file in both ways (this is
-+	useful whenever you have a mixed text file with both right-to-left
-+	and left-to-right strings so that both sets are displayed properly
-+	in different windows).  Also see |rileft.txt|.
-+
-+			*'rightleftcmd'* *'rlc'*
-+'rightleftcmd' 'rlc'	string	(default "search")
-+			local to window
-+			{not in Vi}
-+			{only available when compiled with the |+rightleft|
-+			feature}
-+	Each word in this option enables the command line editing to work in
-+	right-to-left mode for a group of commands:
-+
-+		search		"/" and "?" commands
-+
-+	This is useful for languages such as Hebrew, Arabic and Farsi.
-+	The 'rightleft' option must be set for 'rightleftcmd' to take effect.
-+
-+					 *'ruler'* *'ru'* *'noruler'* *'noru'*
-+'ruler' 'ru'		boolean	(default off)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+cmdline_info| feature}
-+	Show the line and column number of the cursor position, separated by a
-+	comma.  When there is room, the relative position of the displayed
-+	text in the file is shown on the far right:
-+		Top	first line is visible
-+		Bot	last line is visible
-+		All	first and last line are visible
-+		45%	relative position in the file
-+	If 'rulerformat' is set, it will determine the contents of the ruler.
-+	Each window has its own ruler.  If a window has a status line, the
-+	ruler is shown there.  Otherwise it is shown in the last line of the
-+	screen.  If the statusline is given by 'statusline' (i.e. not empty),
-+	this option takes precedence over 'ruler' and 'rulerformat'
-+	If the number of characters displayed is different from the number of
-+	bytes in the text (e.g., for a TAB or a multi-byte character), both
-+	the text column (byte number) and the screen column are shown,
-+	separated with a dash.
-+	For an empty line "0-1" is shown.
-+	For an empty buffer the line number will also be zero: "0,0-1".
-+	This option is reset when the 'paste' option is set.
-+	If you don't want to see the ruler all the time but want to know where
-+	you are, use "g CTRL-G" |g_CTRL-G|.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'rulerformat'* *'ruf'*
-+'rulerformat' 'ruf'	string	(default empty)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+statusline|
-+			feature}
-+	When this option is not empty, it determines the content of the ruler
-+	string, as displayed for the 'ruler' option.
-+	The format of this option is like that of 'statusline'.
-+	The default ruler width is 17 characters.  To make the ruler 15
-+	characters wide, put "%15(" at the start and "%)" at the end.
-+	Example: >
-+		:set rulerformat=%15(%c%V\ %p%%%)
-+<
-+				*'runtimepath'* *'rtp'* *vimfiles*
-+'runtimepath' 'rtp'	string	(default:
-+					Unix: "$HOME/.vim,
-+						$VIM/vimfiles,
-+						$VIMRUNTIME,
-+						$VIM/vimfiles/after,
-+						$HOME/.vim/after"
-+					Amiga: "home:vimfiles,
-+						$VIM/vimfiles,
-+						$VIMRUNTIME,
-+						$VIM/vimfiles/after,
-+						home:vimfiles/after"
-+					PC, OS/2: "$HOME/vimfiles,
-+						$VIM/vimfiles,
-+						$VIMRUNTIME,
-+						$VIM/vimfiles/after,
-+						$HOME/vimfiles/after"
-+					Macintosh: "$VIM:vimfiles,
-+						$VIMRUNTIME,
-+						$VIM:vimfiles:after"
-+					RISC-OS: "Choices:vimfiles,
-+						$VIMRUNTIME,
-+						Choices:vimfiles/after"
-+					VMS: "sys$login:vimfiles,
-+						$VIM/vimfiles,
-+						$VIMRUNTIME,
-+						$VIM/vimfiles/after,
-+						sys$login:vimfiles/after")
-+			global
-+			{not in Vi}
-+	This is a list of directories which will be searched for runtime
-+	files:
-+	  filetype.vim	filetypes by file name |new-filetype|
-+	  scripts.vim	filetypes by file contents |new-filetype-scripts|
-+	  autoload/	automatically loaded scripts |autoload-functions|
-+	  colors/	color scheme files |:colorscheme|
-+	  compiler/	compiler files |:compiler|
-+	  doc/		documentation |write-local-help|
-+	  ftplugin/	filetype plugins |write-filetype-plugin|
-+	  indent/	indent scripts |indent-expression|
-+	  keymap/	key mapping files |mbyte-keymap|
-+	  lang/		menu translations |:menutrans|
-+	  menu.vim	GUI menus |menu.vim|
-+	  plugin/	plugin scripts |write-plugin|
-+	  print/	files for printing |postscript-print-encoding|
-+	  spell/	spell checking files |spell|
-+	  syntax/	syntax files |mysyntaxfile|
-+	  tutor/	files for vimtutor |tutor|
-+
-+	And any other file searched for with the |:runtime| command.
-+
-+	The defaults for most systems are setup to search five locations:
-+	1. In your home directory, for your personal preferences.
-+	2. In a system-wide Vim directory, for preferences from the system
-+	   administrator.
-+	3. In $VIMRUNTIME, for files distributed with Vim.
-+							*after-directory*
-+	4. In the "after" directory in the system-wide Vim directory.  This is
-+	   for the system administrator to overrule or add to the distributed
-+	   defaults (rarely needed)
-+	5. In the "after" directory in your home directory.  This is for
-+	   personal preferences to overrule or add to the distributed defaults
-+	   or system-wide settings (rarely needed).
-+
-+	Note that, unlike 'path', no wildcards like "**" are allowed.  Normal
-+	wildcards are allowed, but can significantly slow down searching for
-+	runtime files.  For speed, use as few items as possible and avoid
-+	wildcards.
-+	See |:runtime|.
-+	Example: >
-+		:set runtimepath=~/vimruntime,/mygroup/vim,$VIMRUNTIME
-+<	This will use the directory "~/vimruntime" first (containing your
-+	personal Vim runtime files), then "/mygroup/vim" (shared between a
-+	group of people) and finally "$VIMRUNTIME" (the distributed runtime
-+	files).
-+	You probably should always include $VIMRUNTIME somewhere, to use the
-+	distributed runtime files.  You can put a directory before $VIMRUNTIME
-+	to find files which replace a distributed runtime files.  You can put
-+	a directory after $VIMRUNTIME to find files which add to distributed
-+	runtime files.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'scroll'* *'scr'*
-+'scroll' 'scr'		number	(default: half the window height)
-+			local to window
-+	Number of lines to scroll with CTRL-U and CTRL-D commands.  Will be
-+	set to half the number of lines in the window when the window size
-+	changes.  If you give a count to the CTRL-U or CTRL-D command it will
-+	be used as the new value for 'scroll'.  Reset to half the window
-+	height with ":set scroll=0".   {Vi is a bit different: 'scroll' gives
-+	the number of screen lines instead of file lines, makes a difference
-+	when lines wrap}
-+
-+			*'scrollbind'* *'scb'* *'noscrollbind'* *'noscb'*
-+'scrollbind' 'scb'	boolean  (default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+scrollbind|
-+			feature}
-+	See also |scroll-binding|.  When this option is set, the current
-+	window scrolls as other scrollbind windows (windows that also have
-+	this option set) scroll.  This option is useful for viewing the
-+	differences between two versions of a file, see 'diff'.
-+	See |'scrollopt'| for options that determine how this option should be
-+	interpreted.
-+	This option is mostly reset when splitting a window to edit another
-+	file.  This means that ":split | edit file" results in two windows
-+	with scroll-binding, but ":split file" does not.
-+
-+						*'scrolljump'* *'sj'*
-+'scrolljump' 'sj'	number	(default 1)
-+			global
-+			{not in Vi}
-+	Minimal number of lines to scroll when the cursor gets off the
-+	screen (e.g., with "j").  Not used for scroll commands (e.g., CTRL-E,
-+	CTRL-D).  Useful if your terminal scrolls very slowly.
-+	When set to a negative number from -1 to -100 this is used as the
-+	percentage of the window height.  Thus -50 scrolls half the window
-+	height.
-+	NOTE: This option is set to 1 when 'compatible' is set.
-+
-+						*'scrolloff'* *'so'*
-+'scrolloff' 'so'	number	(default 0)
-+			global
-+			{not in Vi}
-+	Minimal number of screen lines to keep above and below the cursor.
-+	This will make some context visible around where you are working.  If
-+	you set it to a very large value (999) the cursor line will always be
-+	in the middle of the window (except at the start or end of the file or
-+	when long lines wrap).
-+	For scrolling horizontally see 'sidescrolloff'.
-+	NOTE: This option is set to 0 when 'compatible' is set.
-+
-+						*'scrollopt'* *'sbo'*
-+'scrollopt' 'sbo'	string	(default "ver,jump")
-+			global
-+			{not available when compiled without the |+scrollbind|
-+			feature}
-+			{not in Vi}
-+	This is a comma-separated list of words that specifies how
-+	'scrollbind' windows should behave.  'sbo' stands for ScrollBind
-+	Options.
-+	The following words are available:
-+	    ver		Bind vertical scrolling for 'scrollbind' windows
-+	    hor		Bind horizontal scrolling for 'scrollbind' windows
-+	    jump	Applies to the offset between two windows for vertical
-+			scrolling.  This offset is the difference in the first
-+			displayed line of the bound windows.  When moving
-+			around in a window, another 'scrollbind' window may
-+			reach a position before the start or after the end of
-+			the buffer.  The offset is not changed though, when
-+			moving back the 'scrollbind' window will try to scroll
-+			to the desired position when possible.
-+			When now making that window the current one, two
-+			things can be done with the relative offset:
-+			1. When "jump" is not included, the relative offset is
-+			   adjusted for the scroll position in the new current
-+			   window.  When going back to the other window, the
-+			   new relative offset will be used.
-+			2. When "jump" is included, the other windows are
-+			   scrolled to keep the same relative offset.  When
-+			   going back to the other window, it still uses the
-+			   same relative offset.
-+	Also see |scroll-binding|.
-+	When 'diff' mode is active there always is vertical scroll binding,
-+	even when "ver" isn't there.
-+
-+						*'sections'* *'sect'*
-+'sections' 'sect'	string	(default "SHNHH HUnhsh")
-+			global
-+	Specifies the nroff macros that separate sections.  These are pairs of
-+	two letters (See |object-motions|).  The default makes a section start
-+	at the nroff macros ".SH", ".NH", ".H", ".HU", ".nh" and ".sh".
-+
-+						*'secure'* *'nosecure'* *E523*
-+'secure'		boolean	(default off)
-+			global
-+			{not in Vi}
-+	When on, ":autocmd", shell and write commands are not allowed in
-+	".vimrc" and ".exrc" in the current directory and map commands are
-+	displayed.  Switch it off only if you know that you will not run into
-+	problems, or when the 'exrc' option is off.  On Unix this option is
-+	only used if the ".vimrc" or ".exrc" is not owned by you.  This can be
-+	dangerous if the systems allows users to do a "chown".  You better set
-+	'secure' at the end of your ~/.vimrc then.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'selection'* *'sel'*
-+'selection' 'sel'	string	(default "inclusive")
-+			global
-+			{not in Vi}
-+	This option defines the behavior of the selection.  It is only used
-+	in Visual and Select mode.
-+	Possible values:
-+	   value	past line     inclusive ~
-+	   old		   no		yes
-+	   inclusive	   yes		yes
-+	   exclusive	   yes		no
-+	"past line" means that the cursor is allowed to be positioned one
-+	character past the line.
-+	"inclusive" means that the last character of the selection is included
-+	in an operation.  For example, when "x" is used to delete the
-+	selection.
-+	Note that when "exclusive" is used and selecting from the end
-+	backwards, you cannot include the last character of a line, when
-+	starting in Normal mode and 'virtualedit' empty.
-+
-+	The 'selection' option is set by the |:behave| command.
-+
-+						*'selectmode'* *'slm'*
-+'selectmode' 'slm'	string	(default "")
-+			global
-+			{not in Vi}
-+	This is a comma separated list of words, which specifies when to start
-+	Select mode instead of Visual mode, when a selection is started.
-+	Possible values:
-+	   mouse	when using the mouse
-+	   key		when using shifted special keys
-+	   cmd		when using "v", "V" or CTRL-V
-+	See |Select-mode|.
-+	The 'selectmode' option is set by the |:behave| command.
-+
-+						*'sessionoptions'* *'ssop'*
-+'sessionoptions' 'ssop'	string	(default: "blank,buffers,curdir,folds,
-+					       help,options,tabpages,winsize")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+mksession|
-+			feature}
-+	Changes the effect of the |:mksession| command.  It is a comma
-+	separated list of words.  Each word enables saving and restoring
-+	something:
-+	   word		save and restore ~
-+	   blank	empty windows
-+	   buffers	hidden and unloaded buffers, not just those in windows
-+	   curdir	the current directory
-+	   folds	manually created folds, opened/closed folds and local
-+			fold options
-+	   globals	global variables that start with an uppercase letter
-+			and contain at least one lowercase letter.  Only
-+			String and Number types are stored.
-+	   help		the help window
-+	   localoptions	options and mappings local to a window or buffer (not
-+			global values for local options)
-+	   options	all options and mappings (also global values for local
-+			options)
-+	   resize	size of the Vim window: 'lines' and 'columns'
-+	   sesdir	the directory in which the session file is located
-+			will become the current directory (useful with
-+			projects accessed over a network from different
-+			systems)
-+	   slash	backslashes in file names replaced with forward
-+			slashes
-+	   tabpages	all tab pages; without this only the current tab page
-+			is restored, so that you can make a session for each
-+			tab page separately
-+	   unix		with Unix end-of-line format (single <NL>), even when
-+			on Windows or DOS
-+	   winpos	position of the whole Vim window
-+	   winsize	window sizes
-+
-+	Don't include both "curdir" and "sesdir".
-+	When neither "curdir" nor "sesdir" is included, file names are stored
-+	with absolute paths.
-+	"slash" and "unix" are useful on Windows when sharing session files
-+	with Unix.  The Unix version of Vim cannot source dos format scripts,
-+	but the Windows version of Vim can source unix format scripts.
-+
-+						*'shell'* *'sh'* *E91*
-+'shell' 'sh'		string	(default $SHELL or "sh",
-+					MS-DOS and Win32: "command.com" or
-+					"cmd.exe", OS/2: "cmd")
-+			global
-+	Name of the shell to use for ! and :! commands.  When changing the
-+	value also check these options: 'shelltype', 'shellpipe', 'shellslash'
-+	'shellredir', 'shellquote', 'shellxquote' and 'shellcmdflag'.
-+	It is allowed to give an argument to the command, e.g.  "csh -f".
-+	See |option-backslash| about including spaces and backslashes.
-+	Environment variables are expanded |:set_env|.
-+	If the name of the shell contains a space, you might need to enclose
-+	it in quotes.  Example: >
-+		:set shell=\"c:\program\ files\unix\sh.exe\"\ -f
-+<	Note the backslash before each quote (to avoid starting a comment) and
-+	each space (to avoid ending the option value).  Also note that the
-+	"-f" is not inside the quotes, because it is not part of the command
-+	name.  And Vim automagically recognizes the backslashes that are path
-+	separators.
-+	For Dos 32 bits (DJGPP), you can set the $DJSYSFLAGS environment
-+	variable to change the way external commands are executed.  See the
-+	libc.inf file of DJGPP.
-+	Under MS-Windows, when the executable ends in ".com" it must be
-+	included.  Thus setting the shell to "command.com" or "4dos.com"
-+	works, but "command" and "4dos" do not work for all commands (e.g.,
-+	filtering).
-+	For unknown reasons, when using "4dos.com" the current directory is
-+	changed to "C:\".  To avoid this set 'shell' like this: >
-+		:set shell=command.com\ /c\ 4dos
-+<	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'shellcmdflag'* *'shcf'*
-+'shellcmdflag' 'shcf'	string	(default: "-c", MS-DOS and Win32, when 'shell'
-+					does not contain "sh" somewhere: "/c")
-+			global
-+			{not in Vi}
-+	Flag passed to the shell to execute "!" and ":!" commands; e.g.,
-+	"bash.exe -c ls" or "command.com /c dir".  For the MS-DOS-like
-+	systems, the default is set according to the value of 'shell', to
-+	reduce the need to set this option by the user.  It's not used for
-+	OS/2 (EMX figures this out itself).  See |option-backslash| about
-+	including spaces and backslashes.  See |dos-shell|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'shellpipe'* *'sp'*
-+'shellpipe' 'sp'	string	(default ">", "| tee", "|& tee" or "2>&1| tee")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+quickfix|
-+			feature}
-+	String to be used to put the output of the ":make" command in the
-+	error file.  See also |:make_makeprg|.  See |option-backslash| about
-+	including spaces and backslashes.
-+	The name of the temporary file can be represented by "%s" if necessary
-+	(the file name is appended automatically if no %s appears in the value
-+	of this option).
-+	For the Amiga and MS-DOS the default is ">".  The output is directly
-+	saved in a file and not echoed to the screen.
-+	For Unix the default it "| tee".  The stdout of the compiler is saved
-+	in a file and echoed to the screen.  If the 'shell' option is "csh" or
-+	"tcsh" after initializations, the default becomes "|& tee".  If the
-+	'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
-+	"2>&1| tee".  This means that stderr is also included.  Before using
-+	the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
-+	The initialization of this option is done after reading the ".vimrc"
-+	and the other initializations, so that when the 'shell' option is set
-+	there, the 'shellpipe' option changes automatically, unless it was
-+	explicitly set before.
-+	When 'shellpipe' is set to an empty string, no redirection of the
-+	":make" output will be done.  This is useful if you use a 'makeprg'
-+	that writes to 'makeef' by itself.  If you want no piping, but do
-+	want to include the 'makeef', set 'shellpipe' to a single space.
-+	Don't forget to precede the space with a backslash: ":set sp=\ ".
-+	In the future pipes may be used for filtering and this option will
-+	become obsolete (at least for Unix).
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'shellquote'* *'shq'*
-+'shellquote' 'shq'	string	(default: ""; MS-DOS and Win32, when 'shell'
-+					contains "sh" somewhere: "\"")
-+			global
-+			{not in Vi}
-+	Quoting character(s), put around the command passed to the shell, for
-+	the "!" and ":!" commands.  The redirection is kept outside of the
-+	quoting.  See 'shellxquote' to include the redirection.  It's
-+	probably not useful to set both options.
-+	This is an empty string by default.  Only known to be useful for
-+	third-party shells on MS-DOS-like systems, such as the MKS Korn Shell
-+	or bash, where it should be "\"".  The default is adjusted according
-+	the value of 'shell', to reduce the need to set this option by the
-+	user.  See |dos-shell|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'shellredir'* *'srr'*
-+'shellredir' 'srr'	string	(default ">", ">&" or ">%s 2>&1")
-+			global
-+			{not in Vi}
-+	String to be used to put the output of a filter command in a temporary
-+	file.  See also |:!|.  See |option-backslash| about including spaces
-+	and backslashes.
-+	The name of the temporary file can be represented by "%s" if necessary
-+	(the file name is appended automatically if no %s appears in the value
-+	of this option).
-+	The default is ">".  For Unix, if the 'shell' option is "csh", "tcsh"
-+	or "zsh" during initializations, the default becomes ">&".  If the
-+	'shell' option is "sh", "ksh" or "bash" the default becomes
-+	">%s 2>&1".  This means that stderr is also included.
-+	For Win32, the Unix checks are done and additionally "cmd" is checked
-+	for, which makes the default ">%s 2>&1".  Also, the same names with
-+	".exe" appended are checked for.
-+	The initialization of this option is done after reading the ".vimrc"
-+	and the other initializations, so that when the 'shell' option is set
-+	there, the 'shellredir' option changes automatically unless it was
-+	explicitly set before.
-+	In the future pipes may be used for filtering and this option will
-+	become obsolete (at least for Unix).
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+			*'shellslash'* *'ssl'* *'noshellslash'* *'nossl'*
-+'shellslash' 'ssl'	boolean	(default off)
-+			global
-+			{not in Vi} {only for MSDOS, MS-Windows and OS/2}
-+	When set, a forward slash is used when expanding file names.  This is
-+	useful when a Unix-like shell is used instead of command.com or
-+	cmd.exe.  Backward slashes can still be typed, but they are changed to
-+	forward slashes by Vim.
-+	Note that setting or resetting this option has no effect for some
-+	existing file names, thus this option needs to be set before opening
-+	any file for best results.  This might change in the future.
-+	'shellslash' only works when a backslash can be used as a path
-+	separator.  To test if this is so use: >
-+		if exists('+shellslash')
-+<
-+			*'shelltemp'* *'stmp'* *'noshelltemp'* *'nostmp'*
-+'shelltemp' 'stmp'	boolean	(Vi default off, Vim default on)
-+			global
-+			{not in Vi}
-+	When on, use temp files for shell commands.  When off use a pipe.
-+	When using a pipe is not possible temp files are used anyway.
-+	Currently a pipe is only supported on Unix.  You can check it with: >
-+		:if has("filterpipe")
-+<	The advantage of using a pipe is that nobody can read the temp file
-+	and the 'shell' command does not need to support redirection.
-+	The advantage of using a temp file is that the file type and encoding
-+	can be detected.
-+	The |FilterReadPre|, |FilterReadPost| and |FilterWritePre|,
-+	|FilterWritePost| autocommands event are not triggered when
-+	'shelltemp' is off.
-+
-+						*'shelltype'* *'st'*
-+'shelltype' 'st'	number	(default 0)
-+			global
-+			{not in Vi} {only for the Amiga}
-+	On the Amiga this option influences the way how the commands work
-+	which use a shell.
-+	0 and 1: always use the shell
-+	2 and 3: use the shell only to filter lines
-+	4 and 5: use shell only for ':sh' command
-+	When not using the shell, the command is executed directly.
-+
-+	0 and 2: use "shell 'shellcmdflag' cmd" to start external commands
-+	1 and 3: use "shell cmd" to start external commands
-+
-+						*'shellxquote'* *'sxq'*
-+'shellxquote' 'sxq'	string	(default: "";
-+					for Win32, when 'shell' contains "sh"
-+					somewhere: "\""
-+					for Unix, when using system(): "\"")
-+			global
-+			{not in Vi}
-+	Quoting character(s), put around the command passed to the shell, for
-+	the "!" and ":!" commands.  Includes the redirection.  See
-+	'shellquote' to exclude the redirection.  It's probably not useful
-+	to set both options.
-+	This is an empty string by default.  Known to be useful for
-+	third-party shells when using the Win32 version, such as the MKS Korn
-+	Shell or bash, where it should be "\"".  The default is adjusted
-+	according the value of 'shell', to reduce the need to set this option
-+	by the user.  See |dos-shell|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+			*'shiftround'* *'sr'* *'noshiftround'* *'nosr'*
-+'shiftround' 'sr'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	Round indent to multiple of 'shiftwidth'.  Applies to > and <
-+	commands.  CTRL-T and CTRL-D in Insert mode always round the indent to
-+	a multiple of 'shiftwidth' (this is Vi compatible).
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+						*'shiftwidth'* *'sw'*
-+'shiftwidth' 'sw'	number	(default 8)
-+			local to buffer
-+	Number of spaces to use for each step of (auto)indent.  Used for
-+	|'cindent'|, |>>|, |<<|, etc.
-+
-+						*'shortmess'* *'shm'*
-+'shortmess' 'shm'	string	(Vim default "filnxtToO", Vi default: "",
-+							POSIX default: "A")
-+			global
-+			{not in Vi}
-+	This option helps to avoid all the |hit-enter| prompts caused by file
-+	messages, for example  with CTRL-G, and to avoid some other messages.
-+	It is a list of flags:
-+	 flag	meaning when present	~
-+	  f	use "(3 of 5)" instead of "(file 3 of 5)"
-+	  i	use "[noeol]" instead of "[Incomplete last line]"
-+	  l	use "999L, 888C" instead of "999 lines, 888 characters"
-+	  m	use "[+]" instead of "[Modified]"
-+	  n	use "[New]" instead of "[New File]"
-+	  r	use "[RO]" instead of "[readonly]"
-+	  w	use "[w]" instead of "written" for file write message
-+		and "[a]" instead of "appended" for ':w >> file' command
-+	  x	use "[dos]" instead of "[dos format]", "[unix]" instead of
-+		"[unix format]" and "[mac]" instead of "[mac format]".
-+	  a	all of the above abbreviations
-+
-+	  o	overwrite message for writing a file with subsequent message
-+		for reading a file (useful for ":wn" or when 'autowrite' on)
-+	  O	message for reading a file overwrites any previous message.
-+		Also for quickfix message (e.g., ":cn").
-+	  s	don't give "search hit BOTTOM, continuing at TOP" or "search
-+		hit TOP, continuing at BOTTOM" messages
-+	  t	truncate file message at the start if it is too long to fit
-+		on the command-line, "<" will appear in the left most column.
-+		Ignored in Ex mode.
-+	  T	truncate other messages in the middle if they are too long to
-+		fit on the command line.  "..." will appear in the middle.
-+		Ignored in Ex mode.
-+	  W	don't give "written" or "[w]" when writing a file
-+	  A	don't give the "ATTENTION" message when an existing swap file
-+		is found.
-+	  I	don't give the intro message when starting Vim |:intro|.
-+
-+	This gives you the opportunity to avoid that a change between buffers
-+	requires you to hit <Enter>, but still gives as useful a message as
-+	possible for the space available.  To get the whole message that you
-+	would have got with 'shm' empty, use ":file!"
-+	Useful values:
-+	    shm=	No abbreviation of message.
-+	    shm=a	Abbreviation, but no loss of information.
-+	    shm=at	Abbreviation, and truncate message when necessary.
-+
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+				 *'shortname'* *'sn'* *'noshortname'* *'nosn'*
-+'shortname' 'sn'	boolean	(default off)
-+			local to buffer
-+			{not in Vi, not in MS-DOS versions}
-+	Filenames are assumed to be 8 characters plus one extension of 3
-+	characters.  Multiple dots in file names are not allowed.  When this
-+	option is on, dots in file names are replaced with underscores when
-+	adding an extension (".~" or ".swp").  This option is not available
-+	for MS-DOS, because then it would always be on.  This option is useful
-+	when editing files on an MS-DOS compatible filesystem, e.g., messydos
-+	or crossdos.  When running the Win32 GUI version under Win32s, this
-+	option is always on by default.
-+
-+						*'showbreak'* *'sbr'* *E595*
-+'showbreak' 'sbr'	string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+linebreak|
-+			feature}
-+	String to put at the start of lines that have been wrapped.  Useful
-+	values are "> " or "+++ ": >
-+		:set showbreak=>\ 
-+<	Note the backslash to escape the trailing space.  It's easier like
-+	this: >
-+		:let &showbreak = '+++ '
-+<	Only printable single-cell characters are allowed, excluding <Tab> and
-+	comma (in a future version the comma might be used to separate the
-+	part that is shown at the end and at the start of a line).
-+	The characters are highlighted according to the '@' flag in
-+	'highlight'.
-+	Note that tabs after the showbreak will be displayed differently.
-+	If you want the 'showbreak' to appear in between line numbers, add the
-+	"n" flag to 'cpoptions'.
-+
-+				     *'showcmd'* *'sc'* *'noshowcmd'* *'nosc'*
-+'showcmd' 'sc'		boolean	(Vim default: on, off for Unix, Vi default:
-+				 off)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+cmdline_info| feature}
-+	Show (partial) command in the last line of the screen.  Set this
-+	option off if your terminal is slow.
-+	In Visual mode the size of the selected area is shown:
-+	- When selecting characters within a line, the number of characters.
-+	  If the number of bytes is different it is also displayed: "2-6"
-+	  means two characters and six bytes.
-+	- When selecting more than one line, the number of lines.
-+	- When selecting a block, the size in screen characters:
-+	  {lines}x{columns}.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+			*'showfulltag'* *'sft'* *'noshowfulltag'* *'nosft'*
-+'showfulltag' 'sft'	boolean (default off)
-+			global
-+			{not in Vi}
-+	When completing a word in insert mode (see |ins-completion|) from the
-+	tags file, show both the tag name and a tidied-up form of the search
-+	pattern (if there is one) as possible matches.  Thus, if you have
-+	matched a C function, you can see a template for what arguments are
-+	required (coding style permitting).
-+	Note that this doesn't work well together with having "longest" in
-+	'completeopt', because the completion from the search pattern may not
-+	match the typed text.
-+
-+				 *'showmatch'* *'sm'* *'noshowmatch'* *'nosm'*
-+'showmatch' 'sm'	boolean	(default off)
-+			global
-+	When a bracket is inserted, briefly jump to the matching one.  The
-+	jump is only done if the match can be seen on the screen.  The time to
-+	show the match can be set with 'matchtime'.
-+	A Beep is given if there is no match (no matter if the match can be
-+	seen or not).  This option is reset when the 'paste' option is set.
-+	When the 'm' flag is not included in 'cpoptions', typing a character
-+	will immediately move the cursor back to where it belongs.
-+	See the "sm" field in 'guicursor' for setting the cursor shape and
-+	blinking when showing the match.
-+	The 'matchpairs' option can be used to specify the characters to show
-+	matches for.  'rightleft' and 'revins' are used to look for opposite
-+	matches.
-+	Also see the matchparen plugin for highlighting the match when moving
-+	around |pi_paren.txt|.
-+	Note: Use of the short form is rated PG.
-+
-+				 *'showmode'* *'smd'* *'noshowmode'* *'nosmd'*
-+'showmode' 'smd'	boolean	(Vim default: on, Vi default: off)
-+			global
-+	If in Insert, Replace or Visual mode put a message on the last line.
-+	Use the 'M' flag in 'highlight' to set the type of highlighting for
-+	this message.
-+	When |XIM| may be used the message will include "XIM".  But this
-+	doesn't mean XIM is really active, especially when 'imactivatekey' is
-+	not set.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+						*'showtabline'* *'stal'*
-+'showtabline' 'stal'	number	(default 1)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	The value of this option specifies when the line with tab page labels
-+	will be displayed:
-+		0: never
-+		1: only if there are at least two tab pages
-+		2: always
-+	This is both for the GUI and non-GUI implementation of the tab pages
-+	line.
-+	See |tab-page| for more information about tab pages.
-+
-+						*'sidescroll'* *'ss'*
-+'sidescroll' 'ss'	number	(default 0)
-+			global
-+			{not in Vi}
-+	The minimal number of columns to scroll horizontally.  Used only when
-+	the 'wrap' option is off and the cursor is moved off of the screen.
-+	When it is zero the cursor will be put in the middle of the screen.
-+	When using a slow terminal set it to a large number or 0.  When using
-+	a fast terminal use a small number or 1.  Not used for "zh" and "zl"
-+	commands.
-+
-+						*'sidescrolloff'* *'siso'*
-+'sidescrolloff' 'siso'	number (default 0)
-+			global
-+			{not in Vi}
-+	The minimal number of screen columns to keep to the left and to the
-+	right of the cursor if 'nowrap' is set.  Setting this option to a
-+	value greater than 0 while having |'sidescroll'| also at a non-zero
-+	value makes some context visible in the line you are scrolling in
-+	horizontally (except at beginning of the line).  Setting this option
-+	to a large value (like 999) has the effect of keeping the cursor
-+	horizontally centered in the window, as long as one does not come too
-+	close to the beginning of the line.
-+	NOTE: This option is set to 0 when 'compatible' is set.
-+
-+	Example: Try this together with 'sidescroll' and 'listchars' as
-+		 in the following example to never allow the cursor to move
-+		 onto the "extends" character:
-+
-+		 :set nowrap sidescroll=1 listchars=extends:>,precedes:<
-+		 :set sidescrolloff=1
-+
-+
-+			*'smartcase'* *'scs'* *'nosmartcase'* *'noscs'*
-+'smartcase' 'scs'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	Override the 'ignorecase' option if the search pattern contains upper
-+	case characters.  Only used when the search pattern is typed and
-+	'ignorecase' option is on.  Used for the commands "/", "?", "n", "N",
-+	":g" and ":s".  Not used for "*", "#", "gd", tag search, etc..  After
-+	"*" and "#" you can make 'smartcase' used by doing a "/" command,
-+	recalling the search pattern from history and hitting <Enter>.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+			     *'smartindent'* *'si'* *'nosmartindent'* *'nosi'*
-+'smartindent' 'si'	boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+smartindent| feature}
-+	Do smart autoindenting when starting a new line.  Works for C-like
-+	programs, but can also be used for other languages.  'cindent' does
-+	something like this, works better in most cases, but is more strict,
-+	see |C-indenting|.  When 'cindent' is on, setting 'si' has no effect.
-+	'indentexpr' is a more advanced alternative.
-+	Normally 'autoindent' should also be on when using 'smartindent'.
-+	An indent is automatically inserted:
-+	- After a line ending in '{'.
-+	- After a line starting with a keyword from 'cinwords'.
-+	- Before a line starting with '}' (only with the "O" command).
-+	When typing '}' as the first character in a new line, that line is
-+	given the same indent as the matching '{'.
-+	When typing '#' as the first character in a new line, the indent for
-+	that line is removed, the '#' is put in the first column.  The indent
-+	is restored for the next line.  If you don't want this, use this
-+	mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
-+	When using the ">>" command, lines starting with '#' are not shifted
-+	right.
-+	NOTE: 'smartindent' is reset when 'compatible' is set.  When 'paste'
-+	is set smart indenting is disabled.
-+
-+				 *'smarttab'* *'sta'* *'nosmarttab'* *'nosta'*
-+'smarttab' 'sta'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	When on, a <Tab> in front of a line inserts blanks according to
-+	'shiftwidth'.  'tabstop' or 'softtabstop' is used in other places.  A
-+	<BS> will delete a 'shiftwidth' worth of space at the start of the
-+	line.
-+	When off, a <Tab> always inserts blanks according to 'tabstop' or
-+	'softtabstop'.  'shiftwidth' is only used for shifting text left or
-+	right |shift-left-right|.
-+	What gets inserted (a <Tab> or spaces) depends on the 'expandtab'
-+	option.  Also see |ins-expandtab|.  When 'expandtab' is not set, the
-+	number of spaces is minimized by using <Tab>s.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+					*'softtabstop'* *'sts'*
-+'softtabstop' 'sts'	number	(default 0)
-+			local to buffer
-+			{not in Vi}
-+	Number of spaces that a <Tab> counts for while performing editing
-+	operations, like inserting a <Tab> or using <BS>.  It "feels" like
-+	<Tab>s are being inserted, while in fact a mix of spaces and <Tab>s is
-+	used.  This is useful to keep the 'ts' setting at its standard value
-+	of 8, while being able to edit like it is set to 'sts'.  However,
-+	commands like "x" still work on the actual characters.
-+	When 'sts' is zero, this feature is off.
-+	'softtabstop' is set to 0 when the 'paste' option is set.
-+	See also |ins-expandtab|.  When 'expandtab' is not set, the number of
-+	spaces is minimized by using <Tab>s.
-+	The 'L' flag in 'cpoptions' changes how tabs are used when 'list' is
-+	set.
-+	NOTE: This option is set to 0 when 'compatible' is set.
-+
-+						*'spell'* *'nospell'*
-+'spell'			boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	When on spell checking will be done.  See |spell|.
-+	The languages are specified with 'spelllang'.
-+
-+						*'spellcapcheck'* *'spc'*
-+'spellcapcheck' 'spc'	string	(default "[.?!]\_[\])'" \t]\+")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	Pattern to locate the end of a sentence.  The following word will be
-+	checked to start with a capital letter.  If not then it is highlighted
-+	with SpellCap |hl-SpellCap| (unless the word is also badly spelled).
-+	When this check is not wanted make this option empty.
-+	Only used when 'spell' is set.
-+	Be careful with special characters, see |option-backslash| about
-+	including spaces and backslashes.
-+	To set this option automatically depending on the language, see
-+	|set-spc-auto|.
-+
-+						*'spellfile'* *'spf'*
-+'spellfile' 'spf'	string	(default empty)
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	Name of the word list file where words are added for the |zg| and |zw|
-+	commands.  It must end in ".{encoding}.add".  You need to include the
-+	path, otherwise the file is placed in the current directory.
-+								*E765*
-+	It may also be a comma separated list of names.  A count before the
-+	|zg| and |zw| commands can be used to access each.  This allows using
-+	a personal word list file and a project word list file.
-+	When a word is added while this option is empty Vim will set it for
-+	you: Using the first directory in 'runtimepath' that is writable.  If
-+	there is no "spell" directory yet it will be created.  For the file
-+	name the first language name that appears in 'spelllang' is used,
-+	ignoring the region.
-+	The resulting ".spl" file will be used for spell checking, it does not
-+	have to appear in 'spelllang'.
-+	Normally one file is used for all regions, but you can add the region
-+	name if you want to.  However, it will then only be used when
-+	'spellfile' is set to it, for entries in 'spelllang' only files
-+	without region name will be found.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'spelllang'* *'spl'*
-+'spelllang' 'spl'	string	(default "en")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	A comma separated list of word list names.  When the 'spell' option is
-+	on spellchecking will be done for these languages.  Example: >
-+		set spelllang=en_us,nl,medical
-+<	This means US English, Dutch and medical words are recognized.  Words
-+	that are not recognized will be highlighted.
-+	The word list name must not include a comma or dot.  Using a dash is
-+	recommended to separate the two letter language name from a
-+	specification.  Thus "en-rare" is used for rare English words.
-+	A region name must come last and have the form "_xx", where "xx" is
-+	the two-letter, lower case region name.  You can use more than one
-+	region by listing them: "en_us,en_ca" supports both US and Canadian
-+	English, but not words specific for Australia, New Zealand or Great
-+	Britain.
-+							*E757*
-+	As a special case the name of a .spl file can be given as-is.  The
-+	first "_xx" in the name is removed and used as the region name
-+	(_xx is an underscore, two letters and followed by a non-letter).
-+	This is mainly for testing purposes.  You must make sure the correct
-+	encoding is used, Vim doesn't check it.
-+	When 'encoding' is set the word lists are reloaded.  Thus it's a good
-+	idea to set 'spelllang' after setting 'encoding' to avoid loading the
-+	files twice.
-+	How the related spell files are found is explained here: |spell-load|.
-+
-+	If the |spellfile.vim| plugin is active and you use a language name
-+	for which Vim cannot find the .spl file in 'runtimepath' the plugin
-+	will ask you if you want to download the file.
-+
-+	After this option has been set successfully, Vim will source the files
-+	"spell/LANG.vim" in 'runtimepath'.  "LANG" is the value of 'spelllang'
-+	up to the first comma, dot or underscore.
-+	Also see |set-spc-auto|.
-+
-+
-+						*'spellsuggest'* *'sps'*
-+'spellsuggest' 'sps'	string	(default "best")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	Methods used for spelling suggestions.  Both for the |z=| command and
-+	the |spellsuggest()| function.  This is a comma-separated list of
-+	items:
-+
-+	best		Internal method that works best for English.  Finds
-+			changes like "fast" and uses a bit of sound-a-like
-+			scoring to improve the ordering.
-+
-+	double		Internal method that uses two methods and mixes the
-+			results.  The first method is "fast", the other method
-+			computes how much the suggestion sounds like the bad
-+			word.  That only works when the language specifies
-+			sound folding.  Can be slow and doesn't always give
-+			better results.
-+
-+	fast		Internal method that only checks for simple changes:
-+			character inserts/deletes/swaps.  Works well for
-+			simple typing mistakes.
-+
-+	{number}	The maximum number of suggestions listed for |z=|.
-+			Not used for |spellsuggest()|.  The number of
-+			suggestions is never more than the value of 'lines'
-+			minus two.
-+
-+	file:{filename} Read file {filename}, which must have two columns,
-+			separated by a slash.  The first column contains the
-+			bad word, the second column the suggested good word.
-+			Example:
-+				theribal/terrible ~
-+			Use this for common mistakes that do not appear at the
-+			top of the suggestion list with the internal methods.
-+			Lines without a slash are ignored, use this for
-+			comments.
-+			The file is used for all languages.
-+
-+	expr:{expr}	Evaluate expression {expr}.  Use a function to avoid
-+			trouble with spaces.  |v:val| holds the badly spelled
-+			word.  The expression must evaluate to a List of
-+			Lists, each with a suggestion and a score.
-+			Example:
-+				[['the', 33], ['that', 44]]
-+			Set 'verbose' and use |z=| to see the scores that the
-+			internal methods use.  A lower score is better.
-+			This may invoke |spellsuggest()| if you temporarily
-+			set 'spellsuggest' to exclude the "expr:" part.
-+			Errors are silently ignored, unless you set the
-+			'verbose' option to a non-zero value.
-+
-+	Only one of "best", "double" or "fast" may be used.  The others may
-+	appear several times in any order.  Example: >
-+		:set sps=file:~/.vim/sugg,best,expr:MySuggest()
-+<
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+
-+			*'splitbelow'* *'sb'* *'nosplitbelow'* *'nosb'*
-+'splitbelow' 'sb'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	When on, splitting a window will put the new window below the current
-+	one. |:split|
-+
-+			*'splitright'* *'spr'* *'nosplitright'* *'nospr'*
-+'splitright' 'spr'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+vertsplit|
-+			feature}
-+	When on, splitting a window will put the new window right of the
-+	current one. |:vsplit|
-+
-+			   *'startofline'* *'sol'* *'nostartofline'* *'nosol'*
-+'startofline' 'sol'	boolean	(default on)
-+			global
-+			{not in Vi}
-+	When "on" the commands listed below move the cursor to the first
-+	non-blank of the line.  When off the cursor is kept in the same column
-+	(if possible).  This applies to the commands: CTRL-D, CTRL-U, CTRL-B,
-+	CTRL-F, "G", "H", "M", "L", gg, and to the commands "d", "<<" and ">>"
-+	with a linewise operator, with "%" with a count and to buffer changing
-+	commands (CTRL-^, :bnext, :bNext, etc.).  Also for an Ex command that
-+	only has a line number, e.g., ":25" or ":+".
-+	In case of buffer changing commands the cursor is placed at the column
-+	where it was the last time the buffer was edited.
-+	NOTE: This option is set when 'compatible' is set.
-+
-+			   *'statusline'* *'stl'* *E540* *E541* *E542*
-+'statusline' 'stl'	string	(default empty)
-+			global or local to window |global-local|
-+			{not in Vi}
-+			{not available when compiled without the |+statusline|
-+			feature}
-+	When nonempty, this option determines the content of the status line.
-+	Also see |status-line|.
-+
-+	The option consists of printf style '%' items interspersed with
-+	normal text.  Each status line item is of the form:
-+	  %-0{minwid}.{maxwid}{item}
-+	All fields except the {item} is optional.  A single percent sign can
-+	be given as "%%".  Up to 80 items can be specified.
-+
-+	When the option starts with "%!" then it is used as an expression,
-+	evaluated and the result is used as the option value.  Example: >
-+		:set statusline=%!MyStatusLine()
-+<	The result can contain %{} items that will be evaluated too.
-+
-+	When there is error while evaluating the option then it will be made
-+	empty to avoid further errors.  Otherwise screen updating would loop.
-+
-+	Note that the only effect of 'ruler' when this option is set (and
-+	'laststatus' is 2) is controlling the output of |CTRL-G|.
-+
-+	field	    meaning ~
-+	-	    Left justify the item.  The default is right justified
-+		    when minwid is larger than the length of the item.
-+	0	    Leading zeroes in numeric items.  Overridden by '-'.
-+	minwid	    Minimum width of the item, padding as set by '-' & '0'.
-+		    Value must be 50 or less.
-+	maxwid	    Maximum width of the item.  Truncation occurs with a '<'
-+		    on the left for text items.  Numeric items will be
-+		    shifted down to maxwid-2 digits followed by '>'number
-+		    where number is the amount of missing digits, much like
-+		    an exponential notation.
-+	item	    A one letter code as described below.
-+
-+	Following is a description of the possible statusline items.  The
-+	second character in "item" is the type:
-+		N for number
-+		S for string
-+		F for flags as described below
-+		- not applicable
-+
-+	item  meaning ~
-+	f S   Path to the file in the buffer, as typed or relative to current
-+	      directory.
-+	F S   Full path to the file in the buffer.
-+	t S   File name (tail) of file in the buffer.
-+	m F   Modified flag, text is "[+]"; "[-]" if 'modifiable' is off.
-+	M F   Modified flag, text is ",+" or ",-".
-+	r F   Readonly flag, text is "[RO]".
-+	R F   Readonly flag, text is ",RO".
-+	h F   Help buffer flag, text is "[help]".
-+	H F   Help buffer flag, text is ",HLP".
-+	w F   Preview window flag, text is "[Preview]".
-+	W F   Preview window flag, text is ",PRV".
-+	y F   Type of file in the buffer, e.g., "[vim]".  See 'filetype'.
-+	Y F   Type of file in the buffer, e.g., ",VIM".  See 'filetype'.
-+	      {not available when compiled without |+autocmd| feature}
-+	q S   "[Quickfix List]", "[Location List]" or empty.
-+	k S   Value of "b:keymap_name" or 'keymap' when |:lmap| mappings are
-+	      being used: "<keymap>"
-+	n N   Buffer number.
-+	b N   Value of byte under cursor.
-+	B N   As above, in hexadecimal.
-+	o N   Byte number in file of byte under cursor, first byte is 1.
-+	      Mnemonic: Offset from start of file (with one added)
-+	      {not available when compiled without |+byte_offset| feature}
-+	O N   As above, in hexadecimal.
-+	N N   Printer page number.  (Only works in the 'printheader' option.)
-+	l N   Line number.
-+	L N   Number of lines in buffer.
-+	c N   Column number.
-+	v N   Virtual column number.
-+	V N   Virtual column number as -{num}.  Not displayed if equal to 'c'.
-+	p N   Percentage through file in lines as in |CTRL-G|.
-+	P S   Percentage through file of displayed window.  This is like the
-+	      percentage described for 'ruler'.  Always 3 in length.
-+	a S   Argument list status as in default title.  ({current} of {max})
-+	      Empty if the argument file count is zero or one.
-+	{ NF  Evaluate expression between '%{' and '}' and substitute result.
-+	      Note that there is no '%' before the closing '}'.
-+	( -   Start of item group.  Can be used for setting the width and
-+	      alignment of a section.  Must be followed by %) somewhere.
-+	) -   End of item group.  No width fields allowed.
-+	T N   For 'tabline': start of tab page N label.  Use %T after the last
-+	      label.  This information is used for mouse clicks.
-+	X N   For 'tabline': start of close tab N label.  Use %X after the
-+	      label, e.g.: %3Xclose%X.  Use %999X for a "close current tab"
-+	      mark.  This information is used for mouse clicks.
-+	< -   Where to truncate line if too long.  Default is at the start.
-+	      No width fields allowed.
-+	= -   Separation point between left and right aligned items.
-+	      No width fields allowed.
-+	# -   Set highlight group.  The name must follow and then a # again.
-+	      Thus use %#HLname# for highlight group HLname.  The same
-+	      highlighting is used, also for the statusline of non-current
-+	      windows.
-+	* -   Set highlight group to User{N}, where {N} is taken from the
-+	      minwid field, e.g. %1*.  Restore normal highlight with %* or %0*.
-+	      The difference between User{N} and StatusLine  will be applied
-+	      to StatusLineNC for the statusline of non-current windows.
-+	      The number N must be between 1 and 9.  See |hl-User1..9|
-+
-+	When displaying a flag, Vim removes the leading comma, if any, when
-+	that flag comes right after plaintext.  This will make a nice display
-+	when flags are used like in the examples below.
-+
-+	When all items in a group becomes an empty string (i.e. flags that are
-+	not set) and a minwid is not set for the group, the whole group will
-+	become empty.  This will make a group like the following disappear
-+	completely from the statusline when none of the flags are set. >
-+		:set statusline=...%(\ [%M%R%H]%)...
-+<
-+	Beware that an expression is evaluated each and every time the status
-+	line is displayed.  The current buffer and current window will be set
-+	temporarily to that of the window (and buffer) whose statusline is
-+	currently being drawn.  The expression will evaluate in this context.
-+	The variable "actual_curbuf" is set to the 'bufnr()' number of the
-+	real current buffer.
-+
-+	The 'statusline' option may be evaluated in the |sandbox|, see
-+	|sandbox-option|.
-+
-+	It is not allowed to change text or jump to another window while
-+	evaluating 'statusline' |textlock|.
-+
-+	If the statusline is not updated when you want it (e.g., after setting
-+	a variable that's used in an expression), you can force an update by
-+	setting an option without changing its value.  Example: >
-+		:let &ro = &ro
-+
-+<	A result of all digits is regarded a number for display purposes.
-+	Otherwise the result is taken as flag text and applied to the rules
-+	described above.
-+
-+	Watch out for errors in expressions.  They may render Vim unusable!
-+	If you are stuck, hold down ':' or 'Q' to get a prompt, then quit and
-+	edit your .vimrc or whatever with "vim -u NONE" to get it right.
-+
-+	Examples:
-+	Emulate standard status line with 'ruler' set >
-+	  :set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
-+<	Similar, but add ASCII value of char under the cursor (like "ga") >
-+	  :set statusline=%<%f%h%m%r%=%b\ 0x%B\ \ %l,%c%V\ %P
-+<	Display byte count and byte value, modified flag in red. >
-+	  :set statusline=%<%f%=\ [%1*%M%*%n%R%H]\ %-19(%3l,%02c%03V%)%O'%02b'
-+	  :hi User1 term=inverse,bold cterm=inverse,bold ctermfg=red
-+<	Display a ,GZ flag if a compressed file is loaded >
-+	  :set statusline=...%r%{VarExists('b:gzflag','\ [GZ]')}%h...
-+<	In the |:autocmd|'s: >
-+	  :let b:gzflag = 1
-+<	And: >
-+	  :unlet b:gzflag
-+<	And define this function: >
-+	  :function VarExists(var, val)
-+	  :    if exists(a:var) | return a:val | else | return '' | endif
-+	  :endfunction
-+<
-+						*'suffixes'* *'su'*
-+'suffixes' 'su'		string	(default ".bak,~,.o,.h,.info,.swp,.obj")
-+			global
-+			{not in Vi}
-+	Files with these suffixes get a lower priority when multiple files
-+	match a wildcard.  See |suffixes|.  Commas can be used to separate the
-+	suffixes.  Spaces after the comma are ignored.  A dot is also seen as
-+	the start of a suffix.  To avoid a dot or comma being recognized as a
-+	separator, precede it with a backslash (see |option-backslash| about
-+	including spaces and backslashes).
-+	See 'wildignore' for completely ignoring files.
-+	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	suffixes from the list.  This avoids problems when a future version
-+	uses another default.
-+
-+						*'suffixesadd'* *'sua'*
-+'suffixesadd' 'sua'	string	(default "")
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+file_in_path| feature}
-+	Comma separated list of suffixes, which are used when searching for a
-+	file for the "gf", "[I", etc. commands.  Example: >
-+		:set suffixesadd=.java
-+<
-+				*'swapfile'* *'swf'* *'noswapfile'* *'noswf'*
-+'swapfile' 'swf'	boolean (default on)
-+			local to buffer
-+			{not in Vi}
-+	Use a swapfile for the buffer.  This option can be reset when a
-+	swapfile is not wanted for a specific buffer.  For example, with
-+	confidential information that even root must not be able to access.
-+	Careful: All text will be in memory:
-+		- Don't use this for big files.
-+		- Recovery will be impossible!
-+	A swapfile will only be present when |'updatecount'| is non-zero and
-+	'swapfile' is set.
-+	When 'swapfile' is reset, the swap file for the current buffer is
-+	immediately deleted.  When 'swapfile' is set, and 'updatecount' is
-+	non-zero, a swap file is immediately created.
-+	Also see |swap-file| and |'swapsync'|.
-+
-+	This option is used together with 'bufhidden' and 'buftype' to
-+	specify special kinds of buffers.   See |special-buffers|.
-+
-+						*'swapsync'* *'sws'*
-+'swapsync' 'sws'	string	(default "fsync")
-+			global
-+			{not in Vi}
-+	When this option is not empty a swap file is synced to disk after
-+	writing to it.  This takes some time, especially on busy unix systems.
-+	When this option is empty parts of the swap file may be in memory and
-+	not written to disk.  When the system crashes you may lose more work.
-+	On Unix the system does a sync now and then without Vim asking for it,
-+	so the disadvantage of setting this option off is small.  On some
-+	systems the swap file will not be written at all.  For a unix system
-+	setting it to "sync" will use the sync() call instead of the default
-+	fsync(), which may work better on some systems.
-+	The 'fsync' option is used for the actual file.
-+
-+						*'switchbuf'* *'swb'*
-+'switchbuf' 'swb'	string	(default "")
-+			global
-+			{not in Vi}
-+	This option controls the behavior when switching between buffers.
-+	Possible values (comma separated list):
-+	   useopen	If included, jump to the first open window that
-+			contains the specified buffer (if there is one).
-+			Otherwise: Do not examine other windows.
-+			This setting is checked with |quickfix| commands, when
-+			jumping to errors (":cc", ":cn", "cp", etc.).  It is
-+			also used in all buffer related split commands, for
-+			example ":sbuffer", ":sbnext", or ":sbrewind".
-+	   usetab	Like "useopen", but also consider windows in other tab
-+			pages.
-+	   split	If included, split the current window before loading
-+			a buffer.  Otherwise: do not split, use current window.
-+			Supported in |quickfix| commands that display errors.
-+	   newtab	Like "split", but open a new tab page.  Overrules
-+			"split" when both are present.
-+
-+						*'synmaxcol'* *'smc'*
-+'synmaxcol' 'smc'	number	(default 3000)
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	Maximum column in which to search for syntax items.  In long lines the
-+	text after this column is not highlighted and following lines may not
-+	be highlighted correctly, because the syntax state is cleared.
-+	This helps to avoid very slow redrawing for an XML file that is one
-+	long line.
-+	Set to zero to remove the limit.
-+
-+						*'syntax'* *'syn'*
-+'syntax' 'syn'		string	(default empty)
-+			local to buffer
-+			{not in Vi}
-+			{not available when compiled without the |+syntax|
-+			feature}
-+	When this option is set, the syntax with this name is loaded, unless
-+	syntax highlighting has been switched off with ":syntax off".
-+	Otherwise this option does not always reflect the current syntax (the
-+	b:current_syntax variable does).
-+	This option is most useful in a modeline, for a file which syntax is
-+	not automatically recognized.  Example, in an IDL file:
-+		/* vim: set syntax=idl : */ ~
-+	When a dot appears in the value then this separates two filetype
-+	names.  Example:
-+		/* vim: set syntax=c.doxygen : */ ~
-+	This will use the "c" syntax first, then the "doxygen" syntax.
-+	Note that the second one must be prepared to be loaded as an addition,
-+	otherwise it will be skipped.  More than one dot may appear.
-+	To switch off syntax highlighting for the current file, use: >
-+		:set syntax=OFF
-+<	To switch syntax highlighting on according to the current value of the
-+	'filetype' option: >
-+		:set syntax=ON
-+<	What actually happens when setting the 'syntax' option is that the
-+	Syntax autocommand event is triggered with the value as argument.
-+	This option is not copied to another buffer, independent of the 's' or
-+	'S' flag in 'cpoptions'.
-+	Only normal file name characters can be used, "/\*?[|<>" are illegal.
-+
-+						*'tabline'* *'tal'*
-+'tabline' 'tal'		string	(default empty)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	When nonempty, this option determines the content of the tab pages
-+	line at the top of the Vim window.  When empty Vim will use a default
-+	tab pages line.  See |setting-tabline| for more info.
-+
-+	The tab pages line only appears as specified with the 'showtabline'
-+	option and only when there is no GUI tab line.  When 'e' is in
-+	'guioptions' and the GUI supports a tab line 'guitablabel' is used
-+	instead.  Note that the two tab pages lines are very different.
-+
-+	The value is evaluated like with 'statusline'.  You can use
-+	|tabpagenr()|, |tabpagewinnr()| and |tabpagebuflist()| to figure out
-+	the text to be displayed.  Use "%1T" for the first label, "%2T" for
-+	the second one, etc.  Use "%X" items for closing labels.
-+
-+	Keep in mind that only one of the tab pages is the current one, others
-+	are invisible and you can't jump to their windows.
-+
-+
-+						*'tabpagemax'* *'tpm'*
-+'tabpagemax' 'tpm'	number	(default 10)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	Maximum number of tab pages to be opened by the |-p| command line
-+	argument or the ":tab all" command. |tabpage|
-+
-+
-+						*'tabstop'* *'ts'*
-+'tabstop' 'ts'		number	(default 8)
-+			local to buffer
-+	Number of spaces that a <Tab> in the file counts for.  Also see
-+	|:retab| command, and 'softtabstop' option.
-+
-+	Note: Setting 'tabstop' to any other value than 8 can make your file
-+	appear wrong in many places (e.g., when printing it).
-+
-+	There are four main ways to use tabs in Vim:
-+	1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
-+	   (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
-+	   will use a mix of tabs and spaces, but typing <Tab> and <BS> will
-+	   behave like a tab appears every 4 (or 3) characters.
-+	2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
-+	   'expandtab'.  This way you will always insert spaces.  The
-+	   formatting will never be messed up when 'tabstop' is changed.
-+	3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
-+	   |modeline| to set these values when editing the file again.  Only
-+	   works when using Vim to edit the file.
-+	4. Always set 'tabstop' and 'shiftwidth' to the same value, and
-+	   'noexpandtab'.  This should then work (for initial indents only)
-+	   for any tabstop setting that people use.  It might be nice to have
-+	   tabs after the first non-blank inserted as spaces if you do this
-+	   though.  Otherwise aligned comments will be wrong when 'tabstop' is
-+	   changed.
-+
-+			*'tagbsearch'* *'tbs'* *'notagbsearch'* *'notbs'*
-+'tagbsearch' 'tbs'	boolean	(default on)
-+			global
-+			{not in Vi}
-+	When searching for a tag (e.g., for the |:ta| command), Vim can either
-+	use a binary search or a linear search in a tags file.  Binary
-+	searching makes searching for a tag a LOT faster, but a linear search
-+	will find more tags if the tags file wasn't properly sorted.
-+	Vim normally assumes that your tags files are sorted, or indicate that
-+	they are not sorted.  Only when this is not the case does the
-+	'tagbsearch' option need to be switched off.
-+
-+	When 'tagbsearch' is on, binary searching is first used in the tags
-+	files.  In certain situations, Vim will do a linear search instead for
-+	certain files, or retry all files with a linear search.  When
-+	'tagbsearch' is off, only a linear search is done.
-+
-+	Linear searching is done anyway, for one file, when Vim finds a line
-+	at the start of the file indicating that it's not sorted: >
-+   !_TAG_FILE_SORTED	0	/some comment/
-+<	[The whitespace before and after the '0' must be a single <Tab>]
-+
-+	When a binary search was done and no match was found in any of the
-+	files listed in 'tags', and 'ignorecase' is set or a pattern is used
-+	instead of a normal tag name, a retry is done with a linear search.
-+	Tags in unsorted tags files, and matches with different case will only
-+	be found in the retry.
-+
-+	If a tag file indicates that it is case-fold sorted, the second,
-+	linear search can be avoided for the 'ignorecase' case.  Use a value
-+	of '2' in the "!_TAG_FILE_SORTED" line for this.  A tag file can be
-+	case-fold sorted with the -f switch to "sort" in most unices, as in
-+	the command: "sort -f -o tags tags".  For "Exuberant ctags" version
-+	5.x or higher (at least 5.5) the --sort=foldcase switch can be used
-+	for this as well.  Note that case must be folded to uppercase for this
-+	to work.
-+
-+	When 'tagbsearch' is off, tags searching is slower when a full match
-+	exists, but faster when no full match exists.  Tags in unsorted tags
-+	files may only be found with 'tagbsearch' off.
-+	When the tags file is not sorted, or sorted in a wrong way (not on
-+	ASCII byte value), 'tagbsearch' should be off, or the line given above
-+	must be included in the tags file.
-+	This option doesn't affect commands that find all matching tags (e.g.,
-+	command-line completion and ":help").
-+	{Vi: always uses binary search in some versions}
-+
-+						*'taglength'* *'tl'*
-+'taglength' 'tl'	number	(default 0)
-+			global
-+	If non-zero, tags are significant up to this number of characters.
-+
-+			*'tagrelative'* *'tr'* *'notagrelative'* *'notr'*
-+'tagrelative' 'tr'	boolean	(Vim default: on, Vi default: off)
-+			global
-+			{not in Vi}
-+	If on and using a tags file in another directory, file names in that
-+	tags file are relative to the directory where the tags file is.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+						*'tags'* *'tag'* *E433*
-+'tags' 'tag'		string	(default "./tags,tags", when compiled with
-+				|+emacs_tags|: "./tags,./TAGS,tags,TAGS")
-+			global or local to buffer |global-local|
-+	Filenames for the tag command, separated by spaces or commas.  To
-+	include a space or comma in a file name, precede it with a backslash
-+	(see |option-backslash| about including spaces and backslashes).
-+	When a file name starts with "./", the '.' is replaced with the path
-+	of the current file.  But only when the 'd' flag is not included in
-+	'cpoptions'.  Environment variables are expanded |:set_env|.  Also see
-+	|tags-option|.
-+	"*", "**" and other wildcards can be used to search for tags files in
-+	a directory tree.  See |file-searching|.  E.g., "/lib/**/tags" will
-+	find all files named "tags" below "/lib".  The filename itself cannot
-+	contain wildcards, it is used as-is.  E.g., "/lib/**/tags?" will find
-+	files called "tags?".  {not available when compiled without the
-+	|+path_extra| feature}
-+	The |tagfiles()| function can be used to get a list of the file names
-+	actually used.
-+	If Vim was compiled with the |+emacs_tags| feature, Emacs-style tag
-+	files are also supported.  They are automatically recognized.  The
-+	default value becomes "./tags,./TAGS,tags,TAGS", unless case
-+	differences are ignored (MS-Windows).  |emacs-tags|
-+	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	file names from the list.  This avoids problems when a future version
-+	uses another default.
-+	{Vi: default is "tags /usr/lib/tags"}
-+
-+				*'tagstack'* *'tgst'* *'notagstack'* *'notgst'*
-+'tagstack' 'tgst'	boolean	(default on)
-+			global
-+			{not in all versions of Vi}
-+	When on, the |tagstack| is used normally.  When off, a ":tag" or
-+	":tselect" command with an argument will not push the tag onto the
-+	tagstack.  A following ":tag" without an argument, a ":pop" command or
-+	any other command that uses the tagstack will use the unmodified
-+	tagstack, but does change the pointer to the active entry.
-+	Resetting this option is useful when using a ":tag" command in a
-+	mapping which should not change the tagstack.
-+
-+						*'term'* *E529* *E530* *E531*
-+'term'			string	(default is $TERM, if that fails:
-+				      in the GUI: "builtin_gui"
-+					on Amiga: "amiga"
-+					 on BeOS: "beos-ansi"
-+					  on Mac: "mac-ansi"
-+					 on MiNT: "vt52"
-+				       on MS-DOS: "pcterm"
-+					 on OS/2: "os2ansi"
-+					 on Unix: "ansi"
-+					  on VMS: "ansi"
-+				       on Win 32: "win32")
-+			global
-+	Name of the terminal.  Used for choosing the terminal control
-+	characters.  Environment variables are expanded |:set_env|.
-+	For example: >
-+		:set term=$TERM
-+<	See |termcap|.
-+
-+						*'termbidi'* *'tbidi'*
-+						*'notermbidi'* *'notbidi'*
-+'termbidi' 'tbidi'	boolean (default off, on for "mlterm")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+arabic|
-+			feature}
-+	The terminal is in charge of Bi-directionality of text (as specified
-+	by Unicode).  The terminal is also expected to do the required shaping
-+	that some languages (such as Arabic) require.
-+	Setting this option implies that 'rightleft' will not be set when
-+	'arabic' is set and the value of 'arabicshape' will be ignored.
-+	Note that setting 'termbidi' has the immediate effect that
-+	'arabicshape' is ignored, but 'rightleft' isn't changed automatically.
-+	This option is reset when the GUI is started.
-+	For further details see |arabic.txt|.
-+
-+					*'termencoding'* *'tenc'*
-+'termencoding' 'tenc'	string	(default ""; with GTK+ 2 GUI: "utf-8"; with
-+						    Macintosh GUI: "macroman")
-+			global
-+			{only available when compiled with the |+multi_byte|
-+			feature}
-+			{not in Vi}
-+	Encoding used for the terminal.  This specifies what character
-+	encoding the keyboard produces and the display will understand.  For
-+	the GUI it only applies to the keyboard ('encoding' is used for the
-+	display).  Except for the Mac when 'macatsui' is off, then
-+	'termencoding' should be "macroman".
-+	In the Win32 console version the default value is the console codepage
-+	when it differs from the ANSI codepage.
-+								*E617*
-+	Note: This does not apply to the GTK+ 2 GUI.  After the GUI has been
-+	successfully initialized, 'termencoding' is forcibly set to "utf-8".
-+	Any attempts to set a different value will be rejected, and an error
-+	message is shown.
-+	For the Win32 GUI 'termencoding' is not used for typed characters,
-+	because the Win32 system always passes Unicode characters.
-+	When empty, the same encoding is used as for the 'encoding' option.
-+	This is the normal value.
-+	Not all combinations for 'termencoding' and 'encoding' are valid.  See
-+	|encoding-table|.
-+	The value for this option must be supported by internal conversions or
-+	iconv().  When this is not possible no conversion will be done and you
-+	will probably experience problems with non-ASCII characters.
-+	Example: You are working with the locale set to euc-jp (Japanese) and
-+	want to edit a UTF-8 file: >
-+		:let &termencoding = &encoding
-+		:set encoding=utf-8
-+<	You need to do this when your system has no locale support for UTF-8.
-+
-+						*'terse'* *'noterse'*
-+'terse'			boolean	(default off)
-+			global
-+	When set: Add 's' flag to 'shortmess' option (this makes the message
-+	for a search that hits the start or end of the file not being
-+	displayed).  When reset: Remove 's' flag from 'shortmess' option.  {Vi
-+	shortens a lot of messages}
-+
-+				   *'textauto'* *'ta'* *'notextauto'* *'nota'*
-+'textauto' 'ta'		boolean	(Vim default: on, Vi default: off)
-+			global
-+			{not in Vi}
-+	This option is obsolete.  Use 'fileformats'.
-+	For backwards compatibility, when 'textauto' is set, 'fileformats' is
-+	set to the default value for the current system.  When 'textauto' is
-+	reset, 'fileformats' is made empty.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+				   *'textmode'* *'tx'* *'notextmode'* *'notx'*
-+'textmode' 'tx'		boolean	(MS-DOS, Win32 and OS/2: default on,
-+				 others: default off)
-+			local to buffer
-+			{not in Vi}
-+	This option is obsolete.  Use 'fileformat'.
-+	For backwards compatibility, when 'textmode' is set, 'fileformat' is
-+	set to "dos".  When 'textmode' is reset, 'fileformat' is set to
-+	"unix".
-+
-+						*'textwidth'* *'tw'*
-+'textwidth' 'tw'	number	(default 0)
-+			local to buffer
-+			{not in Vi}
-+	Maximum width of text that is being inserted.  A longer line will be
-+	broken after white space to get this width.  A zero value disables
-+	this.  'textwidth' is set to 0 when the 'paste' option is set.  When
-+	'textwidth' is zero, 'wrapmargin' may be used.  See also
-+	'formatoptions' and |ins-textwidth|.
-+	When 'formatexpr' is set it will be used to break the line.
-+	NOTE: This option is set to 0 when 'compatible' is set.
-+
-+						*'thesaurus'* *'tsr'*
-+'thesaurus' 'tsr'	string	(default "")
-+			global or local to buffer |global-local|
-+			{not in Vi}
-+	List of file names, separated by commas, that are used to lookup words
-+	for thesaurus completion commands |i_CTRL-X_CTRL-T|.  Each line in
-+	the file should contain words with similar meaning, separated by
-+	non-keyword characters (white space is preferred).  Maximum line
-+	length is 510 bytes.
-+	To obtain a file to be used here, check out the wordlist FAQ at
-+	http://www.hyphenologist.co.uk .
-+	To include a comma in a file name precede it with a backslash.  Spaces
-+	after a comma are ignored, otherwise spaces are included in the file
-+	name.  See |option-backslash| about using backslashes.
-+	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	directories from the list.  This avoids problems when a future version
-+	uses another default.
-+	Backticks cannot be used in this option for security reasons.
-+
-+			     *'tildeop'* *'top'* *'notildeop'* *'notop'*
-+'tildeop' 'top'		boolean	(default off)
-+			global
-+			{not in Vi}
-+	When on: The tilde command "~" behaves like an operator.
-+	NOTE: This option is reset when 'compatible' is set.
-+
-+				*'timeout'* *'to'* *'notimeout'* *'noto'*
-+'timeout' 'to'		boolean (default on)
-+			global
-+						*'ttimeout'* *'nottimeout'*
-+'ttimeout'		boolean (default off)
-+			global
-+			{not in Vi}
-+	These two options together determine the behavior when part of a
-+	mapped key sequence or keyboard code has been received:
-+
-+	'timeout'    'ttimeout'		action	~
-+	   off		off		do not time out
-+	   on		on or off	time out on :mappings and key codes
-+	   off		on		time out on key codes
-+
-+	If both options are off, Vim will wait until either the complete
-+	mapping or key sequence has been received, or it is clear that there
-+	is no mapping or key sequence for the received characters.  For
-+	example: if you have mapped "vl" and Vim has received 'v', the next
-+	character is needed to see if the 'v' is followed by an 'l'.
-+	When one of the options is on, Vim will wait for about 1 second for
-+	the next character to arrive.  After that the already received
-+	characters are interpreted as single characters.  The waiting time can
-+	be changed with the 'timeoutlen' option.
-+	On slow terminals or very busy systems timing out may cause
-+	malfunctioning cursor keys.  If both options are off, Vim waits
-+	forever after an entered <Esc> if there are key codes that start
-+	with <Esc>.  You will have to type <Esc> twice.  If you do not have
-+	problems with key codes, but would like to have :mapped key
-+	sequences not timing out in 1 second, set the 'ttimeout' option and
-+	reset the 'timeout' option.
-+
-+	NOTE: 'ttimeout' is reset when 'compatible' is set.
-+
-+						*'timeoutlen'* *'tm'*
-+'timeoutlen' 'tm'	number	(default 1000)
-+			global
-+			{not in all versions of Vi}
-+						*'ttimeoutlen'* *'ttm'*
-+'ttimeoutlen' 'ttm'	number	(default -1)
-+			global
-+			{not in Vi}
-+	The time in milliseconds that is waited for a key code or mapped key
-+	sequence to complete.  Also used for CTRL-\ CTRL-N and CTRL-\ CTRL-G
-+	when part of a command has been typed.
-+	Normally only 'timeoutlen' is used and 'ttimeoutlen' is -1.  When a
-+	different timeout value for key codes is desired set 'ttimeoutlen' to
-+	a non-negative number.
-+
-+		ttimeoutlen	mapping delay	   key code delay	~
-+		   < 0		'timeoutlen'	   'timeoutlen'
-+		  >= 0		'timeoutlen'	   'ttimeoutlen'
-+
-+	The timeout only happens when the 'timeout' and 'ttimeout' options
-+	tell so.  A useful setting would be >
-+		:set timeout timeoutlen=3000 ttimeoutlen=100
-+<	(time out on mapping after three seconds, time out on key codes after
-+	a tenth of a second).
-+
-+						*'title'* *'notitle'*
-+'title'			boolean	(default off, on when title can be restored)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+title|
-+			feature}
-+	When on, the title of the window will be set to the value of
-+	'titlestring' (if it is not empty), or to:
-+		filename [+=-] (path) - VIM
-+	Where:
-+		filename	the name of the file being edited
-+		-		indicates the file cannot be modified, 'ma' off
-+		+		indicates the file was modified
-+		=		indicates the file is read-only
-+		=+		indicates the file is read-only and modified
-+		(path)		is the path of the file being edited
-+		- VIM		the server name |v:servername| or "VIM"
-+	Only works if the terminal supports setting window titles
-+	(currently Amiga console, Win32 console, all GUI versions and
-+	terminals with a non- empty 't_ts' option - these are Unix xterm and
-+	iris-ansi by default, where 't_ts' is taken from the builtin termcap).
-+								*X11*
-+	When Vim was compiled with HAVE_X11 defined, the original title will
-+	be restored if possible.  The output of ":version" will include "+X11"
-+	when HAVE_X11 was defined, otherwise it will be "-X11".  This also
-+	works for the icon name |'icon'|.
-+	But: When Vim was started with the |-X| argument, restoring the title
-+	will not work (except in the GUI).
-+	If the title cannot be restored, it is set to the value of 'titleold'.
-+	You might want to restore the title outside of Vim then.
-+	When using an xterm from a remote machine you can use this command:
-+	    rsh machine_name xterm -display $DISPLAY &
-+	then the WINDOWID environment variable should be inherited and the
-+	title of the window should change back to what it should be after
-+	exiting Vim.
-+
-+								*'titlelen'*
-+'titlelen'		number	(default 85)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+title|
-+			feature}
-+	Gives the percentage of 'columns' to use for the length of the window
-+	title.  When the title is longer, only the end of the path name is
-+	shown.  A '<' character before the path name is used to indicate this.
-+	Using a percentage makes this adapt to the width of the window.  But
-+	it won't work perfectly, because the actual number of characters
-+	available also depends on the font used and other things in the title
-+	bar.  When 'titlelen' is zero the full path is used.  Otherwise,
-+	values from 1 to 30000 percent can be used.
-+	'titlelen' is also used for the 'titlestring' option.
-+
-+						*'titleold'*
-+'titleold'		string	(default "Thanks for flying Vim")
-+			global
-+			{not in Vi}
-+			{only available when compiled with the |+title|
-+			feature}
-+	This option will be used for the window title when exiting Vim if the
-+	original title cannot be restored.  Only happens if 'title' is on or
-+	'titlestring' is not empty.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+						*'titlestring'*
-+'titlestring'		string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+title|
-+			feature}
-+	When this option is not empty, it will be used for the title of the
-+	window.  This happens only when the 'title' option is on.
-+	Only works if the terminal supports setting window titles (currently
-+	Amiga console, Win32 console, all GUI versions and terminals with a
-+	non-empty 't_ts' option).
-+	When Vim was compiled with HAVE_X11 defined, the original title will
-+	be restored if possible |X11|.
-+	When this option contains printf-style '%' items, they will be
-+	expanded according to the rules used for 'statusline'.
-+	Example: >
-+    :auto BufEnter * let &titlestring = hostname() . "/" . expand("%:p")
-+    :set title titlestring=%<%F%=%l/%L-%P titlelen=70
-+<	The value of 'titlelen' is used to align items in the middle or right
-+	of the available space.
-+	Some people prefer to have the file name first: >
-+    :set titlestring=%t%(\ %M%)%(\ (%{expand(\"%:~:.:h\")})%)%(\ %a%)
-+<	Note the use of "%{ }" and an expression to get the path of the file,
-+	without the file name.  The "%( %)" constructs are used to add a
-+	separating space only when needed.
-+	NOTE: Use of special characters in 'titlestring' may cause the display
-+	to be garbled (e.g., when it contains a CR or NL character).
-+	{not available when compiled without the |+statusline| feature}
-+
-+				*'toolbar'* *'tb'*
-+'toolbar' 'tb'		string	(default "icons,tooltips")
-+			global
-+			{only for |+GUI_GTK|, |+GUI_Athena|, |+GUI_Motif| and
-+			|+GUI_Photon|}
-+	The contents of this option controls various toolbar settings.  The
-+	possible values are:
-+		icons		Toolbar buttons are shown with icons.
-+		text		Toolbar buttons shown with text.
-+		horiz		Icon and text of a toolbar button are
-+				horizontally arranged.  {only in GTK+ 2 GUI}
-+		tooltips	Tooltips are active for toolbar buttons.
-+	Tooltips refer to the popup help text which appears after the mouse
-+	cursor is placed over a toolbar button for a brief moment.
-+
-+	If you want the toolbar to be shown with icons as well as text, do the
-+	following: >
-+		:set tb=icons,text
-+<	Motif and Athena cannot display icons and text at the same time.  They
-+	will show icons if both are requested.
-+
-+	If none of the strings specified in 'toolbar' are valid or if
-+	'toolbar' is empty, this option is ignored.  If you want to disable
-+	the toolbar, you need to set the 'guioptions' option.  For example: >
-+		:set guioptions-=T
-+<	Also see |gui-toolbar|.
-+
-+						*'toolbariconsize'* *'tbis'*
-+'toolbariconsize' 'tbis'	string	(default "small")
-+				global
-+				{not in Vi}
-+				{only in the GTK+ 2 GUI}
-+	Controls the size of toolbar icons.  The possible values are:
-+		tiny		Use tiny toolbar icons.
-+		small		Use small toolbar icons (default).
-+		medium		Use medium-sized toolbar icons.
-+		large		Use large toolbar icons.
-+	The exact dimensions in pixels of the various icon sizes depend on
-+	the current theme.  Common dimensions are large=32x32, medium=24x24,
-+	small=20x20 and tiny=16x16.
-+
-+	If 'toolbariconsize' is empty, the global default size as determined
-+	by user preferences or the current theme is used.
-+
-+			     *'ttybuiltin'* *'tbi'* *'nottybuiltin'* *'notbi'*
-+'ttybuiltin' 'tbi'	boolean	(default on)
-+			global
-+			{not in Vi}
-+	When on, the builtin termcaps are searched before the external ones.
-+	When off the builtin termcaps are searched after the external ones.
-+	When this option is changed, you should set the 'term' option next for
-+	the change to take effect, for example: >
-+		:set notbi term=$TERM
-+<	See also |termcap|.
-+	Rationale: The default for this option is "on", because the builtin
-+	termcap entries are generally better (many systems contain faulty
-+	xterm entries...).
-+
-+				     *'ttyfast'* *'tf'* *'nottyfast'* *'notf'*
-+'ttyfast' 'tf'		boolean	(default off, on when 'term' is xterm, hpterm,
-+					sun-cmd, screen, rxvt, dtterm or
-+					iris-ansi; also on when running Vim in
-+					a DOS console)
-+			global
-+			{not in Vi}
-+	Indicates a fast terminal connection.  More characters will be sent to
-+	the screen for redrawing, instead of using insert/delete line
-+	commands.  Improves smoothness of redrawing when there are multiple
-+	windows and the terminal does not support a scrolling region.
-+	Also enables the extra writing of characters at the end of each screen
-+	line for lines that wrap.  This helps when using copy/paste with the
-+	mouse in an xterm and other terminals.
-+
-+						*'ttymouse'* *'ttym'*
-+'ttymouse' 'ttym'	string	(default depends on 'term')
-+			global
-+			{not in Vi}
-+			{only in Unix and VMS, doesn't work in the GUI; not
-+			available when compiled without |+mouse|}
-+	Name of the terminal type for which mouse codes are to be recognized.
-+	Currently these strings are valid:
-+							*xterm-mouse*
-+	   xterm	xterm-like mouse handling.  The mouse generates
-+			"<Esc>[Mscr", where "scr" is three bytes:
-+				"s"  = button state
-+				"c"  = column plus 33
-+				"r"  = row plus 33
-+			This only works up to 223 columns!  See "dec" for a
-+			solution.
-+	   xterm2	Works like "xterm", but with the xterm reporting the
-+			mouse position while the mouse is dragged.  This works
-+			much faster and more precise.  Your xterm must at
-+			least at patchlevel 88 / XFree 3.3.3 for this to
-+			work.  See below for how Vim detects this
-+			automatically.
-+							*netterm-mouse*
-+	   netterm	NetTerm mouse handling.  The mouse generates
-+			"<Esc>}r,c<CR>", where "r,c" are two decimal numbers
-+			for the row and column.
-+							*dec-mouse*
-+	   dec		DEC terminal mouse handling.  The mouse generates a
-+			rather complex sequence, starting with "<Esc>[".
-+			This is also available for an Xterm, if it was
-+			configured with "--enable-dec-locator".
-+							*jsbterm-mouse*
-+	   jsbterm	JSB term mouse handling.
-+							*pterm-mouse*
-+	   pterm	QNX pterm mouse handling.
-+
-+	The mouse handling must be enabled at compile time |+mouse_xterm|
-+	|+mouse_dec| |+mouse_netterm|.
-+	Only "xterm"(2) is really recognized.  NetTerm mouse codes are always
-+	recognized, if enabled at compile time.  DEC terminal mouse codes
-+	are recognized if enabled at compile time, and 'ttymouse' is not
-+	"xterm" (because the xterm and dec mouse codes conflict).
-+	This option is automatically set to "xterm", when the 'term' option is
-+	set to a name that starts with "xterm", and 'ttymouse' is not "xterm"
-+	or "xterm2" already.  The main use of this option is to set it to
-+	"xterm", when the terminal name doesn't start with "xterm", but it can
-+	handle xterm mouse codes.
-+	The "xterm2" value will be set if the xterm version is reported to be
-+	95 or higher.  This only works when compiled with the |+termresponse|
-+	feature and if |t_RV| is set to the escape sequence to request the
-+	xterm version number.  Otherwise "xterm2" must be set explicitly.
-+	If you do not want 'ttymouse' to be set to "xterm2" automatically, set
-+	t_RV to an empty string: >
-+		:set t_RV=
-+<
-+						*'ttyscroll'* *'tsl'*
-+'ttyscroll' 'tsl'	number	(default 999)
-+			global
-+	Maximum number of lines to scroll the screen.  If there are more lines
-+	to scroll the window is redrawn.  For terminals where scrolling is
-+	very slow and redrawing is not slow this can be set to a small number,
-+	e.g., 3, to speed up displaying.
-+
-+						*'ttytype'* *'tty'*
-+'ttytype' 'tty'		string	(default from $TERM)
-+			global
-+	Alias for 'term', see above.
-+
-+						*'undodir'* *'udir'*
-+'undodir' 'udir'	string	(default ".")
-+			global
-+			{not in Vi}
-+			{only when compiled with the |+persistent_undo| feature}
-+	List of directory names for undo files, separated with commas.
-+	See |'backupdir'| for details of the format.
-+	"." means using the directory of the file.  The undo file name for
-+	"file.txt" is ".file.txt.un~".
-+	For other directories the file name is the full path of the edited
-+	file, with path separators replaced with "%".
-+	When writing: The first directory that exists is used. "." always
-+	works, no directories after "." will be used for writing.
-+	When reading all entries are tried to find an undo file.  The first
-+	undo file that exists is used.  When it cannot be read an error is
-+	given, no further entry is used.
-+	See |undo-persistence|.
-+
-+						*'undofile'* *'udf'*
-+'undofile' 'udf'	boolean	(default off)
-+			local to buffer
-+			{not in Vi}
-+			{only when compiled with the |+persistent_undo| feature}
-+	When on, Vim automatically saves undo history to an undo file when
-+	writing a buffer to a file, and restores undo history from the same
-+	file on buffer read.
-+	The directory where the undo file is stored is specified by 'undodir'.
-+	For more information about this feature see |undo-persistence|.
-+	The undo file is not read when 'undoreload' causes the buffer from
-+	before a reload to be saved for undo.
-+	WARNING: this is a very new feature.  Use at your own risk!
-+
-+						*'undolevels'* *'ul'*
-+'undolevels' 'ul'	number	(default 100, 1000 for Unix, VMS,
-+						Win32 and OS/2)
-+			global
-+			{not in Vi}
-+	Maximum number of changes that can be undone.  Since undo information
-+	is kept in memory, higher numbers will cause more memory to be used
-+	(nevertheless, a single change can use an unlimited amount of memory).
-+	Set to 0 for Vi compatibility: One level of undo and "u" undoes
-+	itself: >
-+		set ul=0
-+<	But you can also get Vi compatibility by including the 'u' flag in
-+	'cpoptions', and still be able to use CTRL-R to repeat undo.
-+	Also see |undo-two-ways|.
-+	Set to a negative number for no undo at all: >
-+		set ul=-1
-+<	This helps when you run out of memory for a single change.
-+	Also see |clear-undo|.
-+
-+						*'undoreload'* *'ur'*
-+'undoreload' 'ur'	number	(default 10000)
-+			global
-+			{not in Vi}
-+	Save the whole buffer for undo when reloading it.  This applies to the
-+	":e!" command and reloading for when the buffer changed outside of
-+	Vim. |FileChangedShell|
-+	The save only happens when this options is negative or when the number
-+	of lines is smaller than the value of this option.
-+	Set this option to zero to disable undo for a reload.
-+
-+	When saving undo for a reload, any undo file is not read.
-+
-+	Note that this causes the whole buffer to be stored in memory.  Set
-+	this option to a lower value if you run out of memory.
-+
-+						*'updatecount'* *'uc'*
-+'updatecount' 'uc'	number	(default: 200)
-+			global
-+			{not in Vi}
-+	After typing this many characters the swap file will be written to
-+	disk.  When zero, no swap file will be created at all (see chapter on
-+	recovery |crash-recovery|).  'updatecount' is set to zero by starting
-+	Vim with the "-n" option, see |startup|.  When editing in readonly
-+	mode this option will be initialized to 10000.
-+	The swapfile can be disabled per buffer with |'swapfile'|.
-+	When 'updatecount' is set from zero to non-zero, swap files are
-+	created for all buffers that have 'swapfile' set.  When 'updatecount'
-+	is set to zero, existing swap files are not deleted.
-+	Also see |'swapsync'|.
-+	This option has no meaning in buffers where |'buftype'| is "nofile"
-+	or "nowrite".
-+
-+						*'updatetime'* *'ut'*
-+'updatetime' 'ut'	number	(default 4000)
-+			global
-+			{not in Vi}
-+	If this many milliseconds nothing is typed the swap file will be
-+	written to disk (see |crash-recovery|).  Also used for the
-+	|CursorHold| autocommand event.
-+
-+						*'verbose'* *'vbs'*
-+'verbose' 'vbs'		number	(default 0)
-+			global
-+			{not in Vi, although some versions have a boolean
-+			verbose option}
-+	When bigger than zero, Vim will give messages about what it is doing.
-+	Currently, these messages are given:
-+	>= 1	When the viminfo file is read or written.
-+	>= 2	When a file is ":source"'ed.
-+	>= 5	Every searched tags file and include file.
-+	>= 8	Files for which a group of autocommands is executed.
-+	>= 9	Every executed autocommand.
-+	>= 12	Every executed function.
-+	>= 13	When an exception is thrown, caught, finished, or discarded.
-+	>= 14	Anything pending in a ":finally" clause.
-+	>= 15	Every executed Ex command (truncated at 200 characters).
-+
-+	This option can also be set with the "-V" argument.  See |-V|.
-+	This option is also set by the |:verbose| command.
-+
-+	When the 'verbosefile' option is set then the verbose messages are not
-+	displayed.
-+
-+						*'verbosefile'* *'vfile'*
-+'verbosefile' 'vfile'	string	(default empty)
-+			global
-+			{not in Vi}
-+	When not empty all messages are written in a file with this name.
-+	When the file exists messages are appended.
-+	Writing to the file ends when Vim exits or when 'verbosefile' is made
-+	empty.  Writes are buffered, thus may not show up for some time.
-+	Setting 'verbosefile' to a new value is like making it empty first.
-+	The difference with |:redir| is that verbose messages are not
-+	displayed when 'verbosefile' is set.
-+
-+						*'viewdir'* *'vdir'*
-+'viewdir' 'vdir'	string	(default for Amiga, MS-DOS, OS/2 and Win32:
-+							 "$VIM/vimfiles/view",
-+				 for Unix: "~/.vim/view",
-+				 for Macintosh: "$VIM:vimfiles:view"
-+				 for VMS: "sys$login:vimfiles/view"
-+				 for RiscOS: "Choices:vimfiles/view")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+mksession|
-+			feature}
-+	Name of the directory where to store files for |:mkview|.
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+						*'viewoptions'* *'vop'*
-+'viewoptions' 'vop'	string	(default: "folds,options,cursor")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+mksession|
-+			feature}
-+	Changes the effect of the |:mkview| command.  It is a comma separated
-+	list of words.  Each word enables saving and restoring something:
-+	   word		save and restore ~
-+	   cursor	cursor position in file and in window
-+	   folds	manually created folds, opened/closed folds and local
-+			fold options
-+	   options	options and mappings local to a window or buffer (not
-+			global values for local options)
-+	   slash	backslashes in file names replaced with forward
-+			slashes
-+	   unix		with Unix end-of-line format (single <NL>), even when
-+			on Windows or DOS
-+
-+	"slash" and "unix" are useful on Windows when sharing view files
-+	with Unix.  The Unix version of Vim cannot source dos format scripts,
-+	but the Windows version of Vim can source unix format scripts.
-+
-+				*'viminfo'* *'vi'* *E526* *E527* *E528*
-+'viminfo' 'vi'		string	(Vi default: "", Vim default for MS-DOS,
-+				   Windows and OS/2: '100,<50,s10,h,rA:,rB:,
-+				   for Amiga: '100,<50,s10,h,rdf0:,rdf1:,rdf2:
-+				   for others: '100,<50,s10,h)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+viminfo|
-+			feature}
-+	When non-empty, the viminfo file is read upon startup and written
-+	when exiting Vim (see |viminfo-file|).  The string should be a comma
-+	separated list of parameters, each consisting of a single character
-+	identifying the particular parameter, followed by a number or string
-+	which specifies the value of that parameter.  If a particular
-+	character is left out, then the default value is used for that
-+	parameter.  The following is a list of the identifying characters and
-+	the effect of their value.
-+	CHAR	VALUE	~
-+	!	When included, save and restore global variables that start
-+		with an uppercase letter, and don't contain a lowercase
-+		letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
-+		and "_K_L_M" are not.  Nested List and Dict items may not be
-+		read back correctly, you end up with a string representation
-+		instead.
-+	"	Maximum number of lines saved for each register.  Old name of
-+		the '<' item, with the disadvantage that you need to put a
-+		backslash before the ", otherwise it will be recognized as the
-+		start of a comment!
-+	%	When included, save and restore the buffer list.  If Vim is
-+		started with a file name argument, the buffer list is not
-+		restored.  If Vim is started without a file name argument, the
-+		buffer list is restored from the viminfo file.  Buffers
-+		without a file name and buffers for help files are not written
-+		to the viminfo file.
-+		When followed by a number, the number specifies the maximum
-+		number of buffers that are stored.  Without a number all
-+		buffers are stored.
-+	'	Maximum number of previously edited files for which the marks
-+		are remembered.  This parameter must always be included when
-+		'viminfo' is non-empty.
-+		Including this item also means that the |jumplist| and the
-+		|changelist| are stored in the viminfo file.
-+	/	Maximum number of items in the search pattern history to be
-+		saved.  If non-zero, then the previous search and substitute
-+		patterns are also saved.  When not included, the value of
-+		'history' is used.
-+	:	Maximum number of items in the command-line history to be
-+		saved.  When not included, the value of 'history' is used.
-+	<	Maximum number of lines saved for each register.  If zero then
-+		registers are not saved.  When not included, all lines are
-+		saved.  '"' is the old name for this item.
-+		Also see the 's' item below: limit specified in Kbyte.
-+	@	Maximum number of items in the input-line history to be
-+		saved.  When not included, the value of 'history' is used.
-+	c	When included, convert the text in the viminfo file from the
-+		'encoding' used when writing the file to the current
-+		'encoding'.  See |viminfo-encoding|.
-+	f	Whether file marks need to be stored.  If zero, file marks ('0
-+		to '9, 'A to 'Z) are not stored.  When not present or when
-+		non-zero, they are all stored.  '0 is used for the current
-+		cursor position (when exiting or when doing ":wviminfo").
-+	h	Disable the effect of 'hlsearch' when loading the viminfo
-+		file.  When not included, it depends on whether ":nohlsearch"
-+		has been used since the last search command.
-+	n	Name of the viminfo file.  The name must immediately follow
-+		the 'n'.  Must be the last one!  If the "-i" argument was
-+		given when starting Vim, that file name overrides the one
-+		given here with 'viminfo'.  Environment variables are expanded
-+		when opening the file, not when setting the option.
-+	r	Removable media.  The argument is a string (up to the next
-+		',').  This parameter can be given several times.  Each
-+		specifies the start of a path for which no marks will be
-+		stored.  This is to avoid removable media.  For MS-DOS you
-+		could use "ra:,rb:", for Amiga "rdf0:,rdf1:,rdf2:".  You can
-+		also use it for temp files, e.g., for Unix: "r/tmp".  Case is
-+		ignored.  Maximum length of each 'r' argument is 50
-+		characters.
-+	s	Maximum size of an item in Kbyte.  If zero then registers are
-+		not saved.  Currently only applies to registers.  The default
-+		"s10" will exclude registers with more than 10 Kbyte of text.
-+		Also see the '<' item above: line count limit.
-+
-+	Example: >
-+	    :set viminfo='50,<1000,s100,:0,n~/vim/viminfo
-+<
-+	'50		Marks will be remembered for the last 50 files you
-+			edited.
-+	<1000		Contents of registers (up to 1000 lines each) will be
-+			remembered.
-+	s100		Registers with more than 100 Kbyte text are skipped.
-+	:0		Command-line history will not be saved.
-+	n~/vim/viminfo	The name of the file to use is "~/vim/viminfo".
-+	no /		Since '/' is not specified, the default will be used,
-+			that is, save all of the search history, and also the
-+			previous search and substitute patterns.
-+	no %		The buffer list will not be saved nor read back.
-+	no h		'hlsearch' highlighting will be restored.
-+
-+	When setting 'viminfo' from an empty value you can use |:rviminfo| to
-+	load the contents of the file, this is not done automatically.
-+
-+	This option cannot be set from a |modeline| or in the |sandbox|, for
-+	security reasons.
-+
-+					    *'virtualedit'* *'ve'*
-+'virtualedit' 've'	string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the
-+			|+virtualedit| feature}
-+	A comma separated list of these words:
-+	    block	Allow virtual editing in Visual block mode.
-+	    insert	Allow virtual editing in Insert mode.
-+	    all		Allow virtual editing in all modes.
-+	    onemore	Allow the cursor to move just past the end of the line
-+
-+	Virtual editing means that the cursor can be positioned where there is
-+	no actual character.  This can be halfway into a tab or beyond the end
-+	of the line.  Useful for selecting a rectangle in Visual mode and
-+	editing a table.
-+	"onemore" is not the same, it will only allow moving the cursor just
-+	after the last character of the line.  This makes some commands more
-+	consistent.  Previously the cursor was always past the end of the line
-+	if the line was empty.  But it is far from Vi compatible.  It may also
-+	break some plugins or Vim scripts.  For example because |l| can move
-+	the cursor after the last character.  Use with care!
-+	Using the |$| command will move to the last character in the line, not
-+	past it.  This may actually move the cursor to the left!
-+	It doesn't make sense to combine "all" with "onemore", but you will
-+	not get a warning for it.
-+
-+			*'visualbell'* *'vb'* *'novisualbell'* *'novb'* *beep*
-+'visualbell' 'vb'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	Use visual bell instead of beeping.  The terminal code to display the
-+	visual bell is given with 't_vb'.  When no beep or flash is wanted,
-+	use ":set vb t_vb=".
-+	Note: When the GUI starts, 't_vb' is reset to its default value.  You
-+	might want to set it again in your |gvimrc|.
-+	In the GUI, 't_vb' defaults to "<Esc>|f", which inverts the display
-+	for 20 msec.  If you want to use a different time, use "<Esc>|40f",
-+	where 40 is the time in msec.
-+	Does not work on the Amiga, you always get a screen flash.
-+	Also see 'errorbells'.
-+
-+						*'warn'* *'nowarn'*
-+'warn'			boolean	(default on)
-+			global
-+	Give a warning message when a shell command is used while the buffer
-+	has been changed.
-+
-+		     *'weirdinvert'* *'wiv'* *'noweirdinvert'* *'nowiv'*
-+'weirdinvert' 'wiv'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	This option has the same effect as the 't_xs' terminal option.
-+	It is provided for backwards compatibility with version 4.x.
-+	Setting 'weirdinvert' has the effect of making 't_xs' non-empty, and
-+	vice versa.  Has no effect when the GUI is running.
-+
-+						*'whichwrap'* *'ww'*
-+'whichwrap' 'ww'	string	(Vim default: "b,s", Vi default: "")
-+			global
-+			{not in Vi}
-+	Allow specified keys that move the cursor left/right to move to the
-+	previous/next line when the cursor is on the first/last character in
-+	the line.  Concatenate characters to allow this for these keys:
-+		char   key	  mode	~
-+		 b    <BS>	 Normal and Visual
-+		 s    <Space>	 Normal and Visual
-+		 h    "h"	 Normal and Visual (not recommended)
-+		 l    "l"	 Normal and Visual (not recommended)
-+		 <    <Left>	 Normal and Visual
-+		 >    <Right>	 Normal and Visual
-+		 ~    "~"	 Normal
-+		 [    <Left>	 Insert and Replace
-+		 ]    <Right>	 Insert and Replace
-+	For example: >
-+		:set ww=<,>,[,]
-+<	allows wrap only when cursor keys are used.
-+	When the movement keys are used in combination with a delete or change
-+	operator, the <EOL> also counts for a character.  This makes "3h"
-+	different from "3dh" when the cursor crosses the end of a line.  This
-+	is also true for "x" and "X", because they do the same as "dl" and
-+	"dh".  If you use this, you may also want to use the mapping
-+	":map <BS> X" to make backspace delete the character in front of the
-+	cursor.
-+	When 'l' is included and it is used after an operator at the end of a
-+	line then it will not move to the next line.  This makes "dl", "cl",
-+	"yl" etc. work normally.
-+	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+						*'wildchar'* *'wc'*
-+'wildchar' 'wc'		number	(Vim default: <Tab>, Vi default: CTRL-E)
-+			global
-+			{not in Vi}
-+	Character you have to type to start wildcard expansion in the
-+	command-line, as specified with 'wildmode'.
-+	More info here: |cmdline-completion|.
-+	The character is not recognized when used inside a macro.  See
-+	'wildcharm' for that.
-+	Although 'wc' is a number option, you can set it to a special key: >
-+		:set wc=<Esc>
-+<	NOTE: This option is set to the Vi default value when 'compatible' is
-+	set and to the Vim default value when 'compatible' is reset.
-+
-+						*'wildcharm'* *'wcm'*
-+'wildcharm' 'wcm'	number	(default: none (0))
-+			global
-+			{not in Vi}
-+	'wildcharm' works exactly like 'wildchar', except that it is
-+	recognized when used inside a macro.  You can find "spare" command-line
-+	keys suitable for this option by looking at |ex-edit-index|.  Normally
-+	you'll never actually type 'wildcharm', just use it in mappings that
-+	automatically invoke completion mode, e.g.: >
-+		:set wcm=<C-Z>
-+		:cnoremap ss so $vim/sessions/*.vim<C-Z>
-+<	Then after typing :ss you can use CTRL-P & CTRL-N.
-+
-+						*'wildignore'* *'wig'*
-+'wildignore' 'wig'	string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+wildignore|
-+			feature}
-+	A list of file patterns.  A file that matches with one of these
-+	patterns is ignored when completing file or directory names, and
-+	influences the result of |expand()|, |glob()| and |globpath()| unless
-+	a flag is passed to disable this.
-+	The pattern is used like with |:autocmd|, see |autocmd-patterns|.
-+	Also see 'suffixes'.
-+	Example: >
-+		:set wildignore=*.o,*.obj
-+<	The use of |:set+=| and |:set-=| is preferred when adding or removing
-+	a pattern from the list.  This avoids problems when a future version
-+	uses another default.
-+
-+
-+			*'wildignorecase* *'wic'* *'nowildignorecase* *'nowic'*
-+'wildignorecase' 'wic'	boolean	(default off)
-+			global
-+			{not in Vi}
-+	When set case is ignored when completing file names and directories.
-+	Has no effect on systems where file name case is generally ignored.
-+	Does not apply when the shell is used to expand wildcards, which
-+	happens when there are special characters.
-+
-+
-+				*'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
-+'wildmenu' 'wmnu'	boolean	(default off)
-+			global
-+			{not in Vi}
-+			{not available if compiled without the |+wildmenu|
-+			feature}
-+	When 'wildmenu' is on, command-line completion operates in an enhanced
-+	mode.  On pressing 'wildchar' (usually <Tab>) to invoke completion,
-+	the possible matches are shown just above the command line, with the
-+	first match highlighted (overwriting the status line, if there is
-+	one).  Keys that show the previous/next match, such as <Tab> or
-+	CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
-+	When 'wildmode' is used, "wildmenu" mode is used where "full" is
-+	specified.  "longest" and "list" do not start "wildmenu" mode.
-+	If there are more matches than can fit in the line, a ">" is shown on
-+	the right and/or a "<" is shown on the left.  The status line scrolls
-+	as needed.
-+	The "wildmenu" mode is abandoned when a key is hit that is not used
-+	for selecting a completion.
-+	While the "wildmenu" is active the following keys have special
-+	meanings:
-+
-+	<Left> <Right>	- select previous/next match (like CTRL-P/CTRL-N)
-+	<Down>		- in filename/menu name completion: move into a
-+			  subdirectory or submenu.
-+	<CR>		- in menu completion, when the cursor is just after a
-+			  dot: move into a submenu.
-+	<Up>		- in filename/menu name completion: move up into
-+			  parent directory or parent menu.
-+
-+	This makes the menus accessible from the console |console-menus|.
-+
-+	If you prefer the <Left> and <Right> keys to move the cursor instead
-+	of selecting a different match, use this: >
-+		:cnoremap <Left> <Space><BS><Left>
-+		:cnoremap <Right> <Space><BS><Right>
-+<
-+	The "WildMenu" highlighting is used for displaying the current match
-+	|hl-WildMenu|.
-+
-+						*'wildmode'* *'wim'*
-+'wildmode' 'wim'	string	(Vim default: "full")
-+			global
-+			{not in Vi}
-+	Completion mode that is used for the character specified with
-+	'wildchar'.  It is a comma separated list of up to four parts.  Each
-+	part specifies what to do for each consecutive use of 'wildchar'.  The
-+	first part specifies the behavior for the first use of 'wildchar',
-+	The second part for the second use, etc.
-+	These are the possible values for each part:
-+	""		Complete only the first match.
-+	"full"		Complete the next full match.  After the last match,
-+			the original string is used and then the first match
-+			again.
-+	"longest"	Complete till longest common string.  If this doesn't
-+			result in a longer string, use the next part.
-+	"longest:full"	Like "longest", but also start 'wildmenu' if it is
-+			enabled.
-+	"list"		When more than one match, list all matches.
-+	"list:full"	When more than one match, list all matches and
-+			complete first match.
-+	"list:longest"	When more than one match, list all matches and
-+			complete till longest common string.
-+	When there is only a single match, it is fully completed in all cases.
-+
-+	Examples: >
-+		:set wildmode=full
-+<	Complete first full match, next match, etc.  (the default) >
-+		:set wildmode=longest,full
-+<	Complete longest common string, then each full match >
-+		:set wildmode=list:full
-+<	List all matches and complete each full match >
-+		:set wildmode=list,full
-+<	List all matches without completing, then each full match >
-+		:set wildmode=longest,list
-+<	Complete longest common string, then list alternatives.
-+	More info here: |cmdline-completion|.
-+
-+						*'wildoptions'* *'wop'*
-+'wildoptions' 'wop'	string	(default "")
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+wildignore|
-+			feature}
-+	A list of words that change how command line completion is done.
-+	Currently only one word is allowed:
-+	  tagfile	When using CTRL-D to list matching tags, the kind of
-+			tag and the file of the tag is listed.	Only one match
-+			is displayed per line.  Often used tag kinds are:
-+				d	#define
-+				f	function
-+	Also see |cmdline-completion|.
-+
-+						*'winaltkeys'* *'wak'*
-+'winaltkeys' 'wak'	string	(default "menu")
-+			global
-+			{not in Vi}
-+			{only used in Win32, Motif, GTK and Photon GUI}
-+	Some GUI versions allow the access to menu entries by using the ALT
-+	key in combination with a character that appears underlined in the
-+	menu.  This conflicts with the use of the ALT key for mappings and
-+	entering special characters.  This option tells what to do:
-+	  no	Don't use ALT keys for menus.  ALT key combinations can be
-+		mapped, but there is no automatic handling.  This can then be
-+		done with the |:simalt| command.
-+	  yes	ALT key handling is done by the windowing system.  ALT key
-+		combinations cannot be mapped.
-+	  menu	Using ALT in combination with a character that is a menu
-+		shortcut key, will be handled by the windowing system.  Other
-+		keys can be mapped.
-+	If the menu is disabled by excluding 'm' from 'guioptions', the ALT
-+	key is never used for the menu.
-+	This option is not used for <F10>; on Win32 and with GTK <F10> will
-+	select the menu, unless it has been mapped.
-+
-+						*'window'* *'wi'*
-+'window' 'wi'		number  (default screen height - 1)
-+			global
-+	Window height.  Do not confuse this with the height of the Vim window,
-+	use 'lines' for that.
-+	Used for |CTRL-F| and |CTRL-B| when there is only one window and the
-+	value is smaller than 'lines' minus one.  The screen will scroll
-+	'window' minus two lines, with a minimum of one.
-+	When 'window' is equal to 'lines' minus one CTRL-F and CTRL-B scroll
-+	in a much smarter way, taking care of wrapping lines.
-+	When resizing the Vim window, the value is smaller than 1 or more than
-+	or equal to 'lines' it will be set to 'lines' minus 1.
-+	{Vi also uses the option to specify the number of displayed lines}
-+
-+						*'winheight'* *'wh'* *E591*
-+'winheight' 'wh'	number	(default 1)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	Minimal number of lines for the current window.  This is not a hard
-+	minimum, Vim will use fewer lines if there is not enough room.  If the
-+	focus goes to a window that is smaller, its size is increased, at the
-+	cost of the height of other windows.
-+	Set 'winheight' to a small number for normal editing.
-+	Set it to 999 to make the current window fill most of the screen.
-+	Other windows will be only 'winminheight' high.  This has the drawback
-+	that ":all" will create only two windows.  To avoid "vim -o 1 2 3 4"
-+	to create only two windows, set the option after startup is done,
-+	using the |VimEnter| event: >
-+		au VimEnter * set winheight=999
-+<	Minimum value is 1.
-+	The height is not adjusted after one of the commands that change the
-+	height of the current window.
-+	'winheight' applies to the current window.  Use 'winminheight' to set
-+	the minimal height for other windows.
-+
-+			*'winfixheight'* *'wfh'* *'nowinfixheight'* *'nowfh'*
-+'winfixheight' 'wfh'	boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	Keep the window height when windows are opened or closed and
-+	'equalalways' is set.  Also for |CTRL-W_=|.  Set by default for the
-+	|preview-window| and |quickfix-window|.
-+	The height may be changed anyway when running out of room.
-+
-+			*'winfixwidth'* *'wfw'* *'nowinfixwidth'* *'nowfw'*
-+'winfixwidth' 'wfw'	boolean	(default off)
-+			local to window
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	Keep the window width when windows are opened or closed and
-+	'equalalways' is set.  Also for |CTRL-W_=|.
-+	The width may be changed anyway when running out of room.
-+
-+						*'winminheight'* *'wmh'*
-+'winminheight' 'wmh'	number	(default 1)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+windows|
-+			feature}
-+	The minimal height of a window, when it's not the current window.
-+	This is a hard minimum, windows will never become smaller.
-+	When set to zero, windows may be "squashed" to zero lines (i.e. just a
-+	status bar) if necessary.  They will return to at least one line when
-+	they become active (since the cursor has to have somewhere to go.)
-+	Use 'winheight' to set the minimal height of the current window.
-+	This option is only checked when making a window smaller.  Don't use a
-+	large number, it will cause errors when opening more than a few
-+	windows.  A value of 0 to 3 is reasonable.
-+
-+						*'winminwidth'* *'wmw'*
-+'winminwidth' 'wmw'	number	(default 1)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+vertsplit|
-+			feature}
-+	The minimal width of a window, when it's not the current window.
-+	This is a hard minimum, windows will never become smaller.
-+	When set to zero, windows may be "squashed" to zero columns (i.e. just
-+	a vertical separator) if necessary.  They will return to at least one
-+	line when they become active (since the cursor has to have somewhere
-+	to go.)
-+	Use 'winwidth' to set the minimal width of the current window.
-+	This option is only checked when making a window smaller.  Don't use a
-+	large number, it will cause errors when opening more than a few
-+	windows.  A value of 0 to 12 is reasonable.
-+
-+						*'winwidth'* *'wiw'* *E592*
-+'winwidth' 'wiw'	number	(default 20)
-+			global
-+			{not in Vi}
-+			{not available when compiled without the |+vertsplit|
-+			feature}
-+	Minimal number of columns for the current window.  This is not a hard
-+	minimum, Vim will use fewer columns if there is not enough room.  If
-+	the current window is smaller, its size is increased, at the cost of
-+	the width of other windows.  Set it to 999 to make the current window
-+	always fill the screen.  Set it to a small number for normal editing.
-+	The width is not adjusted after one of the commands to change the
-+	width of the current window.
-+	'winwidth' applies to the current window.  Use 'winminwidth' to set
-+	the minimal width for other windows.
-+
-+						*'wrap'* *'nowrap'*
-+'wrap'			boolean	(default on)
-+			local to window
-+			{not in Vi}
-+	This option changes how text is displayed.  It doesn't change the text
-+	in the buffer, see 'textwidth' for that.
-+	When on, lines longer than the width of the window will wrap and
-+	displaying continues on the next line.  When off lines will not wrap
-+	and only part of long lines will be displayed.  When the cursor is
-+	moved to a part that is not shown, the screen will scroll
-+	horizontally.
-+	The line will be broken in the middle of a word if necessary.  See
-+	'linebreak' to get the break at a word boundary.
-+	To make scrolling horizontally a bit more useful, try this: >
-+		:set sidescroll=5
-+		:set listchars+=precedes:<,extends:>
-+<	See 'sidescroll', 'listchars' and |wrap-off|.
-+	This option can't be set from a |modeline| when the 'diff' option is
-+	on.
-+
-+						*'wrapmargin'* *'wm'*
-+'wrapmargin' 'wm'	number	(default 0)
-+			local to buffer
-+	Number of characters from the right window border where wrapping
-+	starts.  When typing text beyond this limit, an <EOL> will be inserted
-+	and inserting continues on the next line.
-+	Options that add a margin, such as 'number' and 'foldcolumn', cause
-+	the text width to be further reduced.  This is Vi compatible.
-+	When 'textwidth' is non-zero, this option is not used.
-+	See also 'formatoptions' and |ins-textwidth|.  {Vi: works differently
-+	and less usefully}
-+
-+				   *'wrapscan'* *'ws'* *'nowrapscan'* *'nows'*
-+'wrapscan' 'ws'		boolean	(default on)			*E384* *E385*
-+			global
-+	Searches wrap around the end of the file.  Also applies to |]s| and
-+	|[s|, searching for spelling mistakes.
-+
-+						   *'write'* *'nowrite'*
-+'write'			boolean	(default on)
-+			global
-+			{not in Vi}
-+	Allows writing files.  When not set, writing a file is not allowed.
-+	Can be used for a view-only mode, where modifications to the text are
-+	still allowed.  Can be reset with the |-m| or |-M| command line
-+	argument.  Filtering text is still possible, even though this requires
-+	writing a temporary file.
-+
-+				   *'writeany'* *'wa'* *'nowriteany'* *'nowa'*
-+'writeany' 'wa'		boolean	(default off)
-+			global
-+	Allows writing to any file with no need for "!" override.
-+
-+			     *'writebackup'* *'wb'* *'nowritebackup'* *'nowb'*
-+'writebackup' 'wb'	boolean	(default on with |+writebackup| feature, off
-+					otherwise)
-+			global
-+			{not in Vi}
-+	Make a backup before overwriting a file.  The backup is removed after
-+	the file was successfully written, unless the 'backup' option is
-+	also on.  Reset this option if your file system is almost full.  See
-+	|backup-table| for another explanation.
-+	When the 'backupskip' pattern matches, a backup is not made anyway.
-+	NOTE: This option is set to the default value when 'compatible' is
-+	set.
-+
-+						*'writedelay'* *'wd'*
-+'writedelay' 'wd'	number	(default 0)
-+			global
-+			{not in Vi}
-+	The number of microseconds to wait for each character sent to the
-+	screen.  When non-zero, characters are sent to the terminal one by
-+	one.  For MS-DOS pcterm this does not work.  For debugging purposes.
-+
-+ vim:tw=78:ts=8:ft=help:norl:
-diff -Naur vim73.orig/runtime/doc/os_risc.txt vim73/runtime/doc/os_risc.txt
---- vim73.orig/runtime/doc/os_risc.txt	2010-08-15 12:23:21.000000000 +0000
-+++ vim73/runtime/doc/os_risc.txt	2012-11-01 20:35:42.000000000 +0000
-@@ -1,322 +1,12 @@
--*os_risc.txt*   For Vim version 7.3.  Last change: 2010 Aug 07
-+*os_risc.txt*   For Vim version 7.3.  Last change: 2011 May 10
- 
- 
- 		  VIM REFERENCE MANUAL    by Thomas Leonard
- 
- 
- 						*riscos* *RISCOS* *RISC-OS*
--This file contains the particularities for the RISC OS version of Vim.
-+The RISC OS support has been removed from Vim with patch 7.3.187.
-+If you would like to use Vim on RISC OS get the files from before that patch.
- 
--The RISC OS port is a completely new port and is not based on the old "archi"
--port.
- 
--1.  File locations		|riscos-locations|
--2.  Filename munging		|riscos-munging|
--3.  Command-line use		|riscos-commandline|
--4.  Desktop (GUI) use		|riscos-gui|
--5.  Remote use (telnet)		|riscos-remote|
--6.  Temporary files		|riscos-temp-files|
--7.  Interrupting		|riscos-interrupt|
--8.  Memory usage		|riscos-memory|
--9.  Filetypes			|riscos-filetypes|
--10. The shell			|riscos-shell|
--11. Porting new releases	|riscos-porting|
--
--If I've missed anything, email me and I'll try to fix it.  In fact, even if I
--haven't missed anything then email me anyway to give me some confidence that it
--actually works!
--
--Thomas Leonard <tal197@ecs.soton.ac.uk>
--
--	[these URLs no longer work...]
-- Port homepage:	http://www.ecs.soton.ac.uk/~tal197/
--	or try:	http://www.soton.ac.uk/~tal197/
--
--==============================================================================
--							*riscos-locations*
--1. File locations
--
--The Vim executable and shared resource files are all stored inside the !Vim
--application directory.
--
--When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
--run the command-line versions of Vim (see |riscos-commandline|).
--
--!Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
--distribution, but modified slightly to work within the limits of ADFS, plus
--some extra files such as the window templates.
--
--User choices are read from "Choices:*" and are saved to "<Choices$Write>.*".
--If you have the new !Boot structure then these should be set up already.  If
--not, set Choices$Path to a list of directories to search when looking for
--user configuration files.  Set Choices$Write to the directory you want files
--to be saved into (so your search patterns and marks can be remembered between
--sessions).
--
--==============================================================================
--							*riscos-munging*
--2. Filename munging
--
--All pathname munging is disabled by default, so Vim should behave like a
--normal RISC OS application now.  So, if you want to edit "doc/html" then you
--actually type "*vi doc/html".
--
--The only times munging is done is when:
--
--- Searching included files from C programs, since these are always munged.
--  See |[I|.
--  Note: make sure you are in the right directory when you use this
--	command (i.e. the one with subdirectories "c" and "h").
--
--- Sourcing files using |:so|.
--  Paths starting "$VIM/" are munged like this:
--
--  $VIM/syntax/help.vim  ->  Vim:syntax.help
--
--  Also, files ending in ".vim" have their extensions removed, and slashes
--  replaced with dots.
--
--Some tag files and script files may have to be edited to work under this port.
--
--==============================================================================
--							*riscos-commandline*
--3. Command-line use
--
--To use Vim from the command-line use the "*vi" command (or "*ex" for
--|Ex-mode|).
--
--Type "*vi -h" for a list of options.
--
--Running the command-line version of Vim in a large high-color mode may cause
--the scrolling to be very slow.  Either change to a mode with fewer colors or
--use the GUI version.
--
--Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
--freeze it, as usual for text programs.
--
--==============================================================================
--							*riscos-gui*
--4. Desktop use
--
--Limitations:
--
--- Left scrollbars don't work properly (right and bottom are fine).
--- Doesn't increase scroll speed if it gets behind.
--
--You can resize the window by dragging the lower-right corner, even though
--there is no icon shown there.
--
--You can use the --rows and --columns arguments to specify the initial size of
--the Vim window, like this: >
--
--  *Vi -g --rows 20 --columns 80
--
--The global clipboard is supported, so you can select some text and then
--paste it directly into another application (provided it supports the
--clipboard too).
--
--Clicking Menu now opens a menu like a normal RISC OS program.  Hold down Shift
--when clicking Menu to paste (from the global clipboard).
--
--Dragging a file to the window replaces the CURRENT buffer (the one with the
--cursor, NOT the one you dragged to) with the file.
--
--Dragging with Ctrl held down causes a new Vim window to be opened for the
--file (see |:sp|).
--
--Dragging a file in with Shift held down in insert mode inserts the pathname of
--the file.
--
--:browse :w opens a standard RISC OS save box.
--:browse :e opens a directory viewer.
--
--For fonts, you have the choice of the system font, an outline font, the system
--font via ZapRedraw and any of the Zap fonts via ZapRedraw: >
--
--  :set guifont=
--<			To use the system font via the VDU drivers.  Supports
--			bold and underline.
-->
--  :set guifont=Corpus.Medium
--<			Use the named outline font.  You can use any font, but
--			only monospaced ones like Corpus look right.
-->
--  :set guifont=Corpus.Medium:w8:h12:b:i
--<			As before, but with size of 8 point by 12 point, and
--			in bold italic.
--			If only one of width and height is given then that
--			value is used for both.  If neither is given then 10
--			point is used.
--
--Thanks to John Kortink, Vim can use the ZapRedraw module.  Start the font name
--with "!" (or "!!" for double height), like this: >
--
--  :set guifont=!!
--<			Use the system font, but via ZapRedraw.  This gives a
--			faster redraw on StrongARM processors, but you can't
--			get bold or italic text.  Double height.
-->
--  :set guifont=!script
--<			Uses the named Zap font (a directory in VimFont$Path).
--			The redraw is the same speed as for "!!", but you get
--			a nicer looking font.
--			Only the "man+" and "script" fonts are supplied
--			currently, but you can use any of the Zap fonts if
--			they are in VimFont$Path.
--			Vim will try to load font files "0", "B", "I" and "IB"
--			from the named directory.  Only "0" (normal style) MUST
--			be present.  Link files are not currently supported.
--
--Note that when using ZapRedraw the edit bar is drawn in front of the character
--you are on rather than behind it.  Also redraw is incorrect for screen modes
--with eigen values of 0.  If the font includes control characters then you can
--get Vim to display them by changing the 'isprint' option.
--
--If you find the scrolling is too slow on your machine, try experimenting
--with the 'scrolljump' and 'ttyscroll' options.
--
--In particular, StrongARM users may find that: >
--
--  :set ttyscroll=0
--
--makes scrolling faster in high-color modes.
--
--=============================================================================
--							*riscos-remote*
--5. Remote use (telnet)
--
--I have included a built-in termcap entry, but you can edit the termcap file to
--allow other codes to be used if you want to use Vim from a remote terminal.
--
--Although I do not have an internet connection to my Acorn, I have managed to
--run Vim in a FreeTerm window using the loopback connection.
--
--It seems to work pretty well now, using "*vi -T ansi".
--
--==============================================================================
--							*riscos-temp-files*
--6. Temporary files
--
--If Vim crashes then the swap and backup files (if any) will be in the
--directories set with the 'directory' and 'bdir' options.  By default the swap
--files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
--directory you were saving to.  Vim will allow you to try and recover the file
--when you next try to edit it.
--
--To see a list of swap files, press <F12> and type "*vi -r".
--
--Vim no longer brings up ATTENTION warnings if you try to edit two files with
--the same name in different directories.
--
--However, it also no longer warns if you try to edit the same file twice (with
--two copies of Vim), though you will still be warned when you save that the
--datestamp has changed.
--
--==============================================================================
--							*riscos-interrupt*
--7. Interrupting
--
--To break out of a looping macro, or similar, hold down Escape in the
--command-line version, or press CTRL-C in the GUI version.
--
--==============================================================================
--							*riscos-memory*
--8. Memory usage
--
--Vim will use dynamic areas on RISC OS 3.5 or later.  If you can use them on
--older machines then edit the !RunTxt and GVim files.  I don't know what UnixLib
--does by default on these machines so I'm playing safe.
--
--It doesn't work at all well without dynamic areas, since it can't change its
--memory allocation once running.  Hence you should edit "!Vim.GVim" and
--"!Vim.!RunTxt" to choose the best size for you.  You probably need at least
--about 1400K.
--
--==============================================================================
--							*riscos-filetypes*
--9. Filetypes
--
--You can now specify that autocommands are only executed for files of certain
--types.  The filetype is given in the form &xxx, when xxx is the filetype.
--
--Filetypes must be specified by number (e.g. &fff for Text).
--
--The system has changed from version 5.3.  The new sequence of events is:
--
--- A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
--- Based on the filetype and pathname, Vim will try to set |'filetype'| to the
--  Vim-type of the file.
--- Setting this option may load syntax files and perform other actions.
--- Saving the file will give it a filetype of |'osfiletype'|.
--
--Some examples may make this clearer:
--
--  Kind of file loaded	osfiletype	filetype ~
--  C code "c.hellow"	Text (&fff)	C
--  LaTeX document	LaTeX (&2a8)	TeX
--  Draw document		DrawFile (&aff)	(not changed)
--
--==============================================================================
--							*riscos-shell*
--10. The shell
--
--- Bangs (!s) are only replaced if they are followed by a space or end-of-line,
--  since many pathnames contain them.
--
--- You can prefix the command with "~", which stops any output from being
--  displayed.  This also means that you don't have to press <Enter> afterwards,
--  and stops the screen from being redrawn. {only in the GUI version}
--
--==============================================================================
--							*riscos-porting*
--11. Porting new releases to RISC OS
--
--Downloading everything you need:
--
--- Get the latest source distribution (see www.vim.org)
--- Get the runtime environment files (e.g. these help files)
--- Get the RISC OS binary distribution (if possible)
--
--
--Unarchiving:
--
--- Create a raFS disk and put the archives on it
--- Un-gzip them
--- Un-tar them   (*tar xELf 50 archive/tar)
--
--
--Recompiling the sources:
--
--- Create c, s, and h directories.
--- Put all the header files in "h".	     \
--- Put all the C files in "c".		     | And lose the extensions
--- Put the assembler file ("swis/s") in "s".  /
--- Rename all the files in "proto" to "h", like this:
--    raFS::VimSrc.source.proto.file/pro
--	  becomes
--    raFS::VimSrc.source.h.file_pro
--- In the files "h.proto" and "c.termlib", search and replace
--    .pro"
--       with
--    _pro.h"
--- Create a simple Makefile if desired and do "*make -k".
--  Use "CC = gcc -DRISCOS -DUSE_GUI -O2 -x c" in the Makefile.
--- Save the binary as !Vim.Vim in the binary distribution.
--
--
--Updating the run-time environment:
--
--- Replace old or missing files inside !Vim.Resources with the
--  new files.
--- Remove files in "doc" not ending in "/txt", except for "tags".
--- Lose the extensions from the files in "doc".
--- Edit the "doc.tags" file.  Remove extensions from the second column: >
--	:%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
--- Remove extensions from the syntax files.  Split them into two directories
--  to avoid the 77 entry limit on old ADFS filesystems.
--- Edit "Vim:FileType" to match "*.c.*" as well as "*/c" and so on.
--  Add filetype checking too.
--- Edit "Vim:Menu" and remove all the keys from the menus: >
--	:%s/<Tab>[^ \t]*//
--<
-  vim:tw=78:ts=8:ft=help:norl:
-diff -Naur vim73.orig/runtime/doc/os_win32.txt vim73/runtime/doc/os_win32.txt
---- vim73.orig/runtime/doc/os_win32.txt	2010-08-15 12:23:21.000000000 +0000
-+++ vim73/runtime/doc/os_win32.txt	2012-11-01 20:35:42.000000000 +0000
-@@ -313,6 +313,37 @@
-    with :!start do not get passed Vim's open file handles, which means they do
-    not have to be closed before Vim.
-    To avoid this special treatment, use ":! start".
-+   There are two optional arguments (see the next Q):
-+       /min  the window will be minimized.
-+       /b"   no console window will be opened
-+   You can only one of these flags at a time.  A second second one will be
-+   treated as the start of the command.
-+
-+Q. How do I avoid getting a window for programs that I run asynchronously?
-+A. You have two possible solutions depending on what exactly do you want:
-+   1) You may use the /min flag in order to run program in a minimized state
-+      with no other changes. It will work equally for console and GUI
-+      applications.
-+   2) You can use the /b flag to run console applications without creating a
-+      console window for them (GUI applications are not affected). But you
-+      should use this flag only if the application you run doesn't require any
-+      input.  Otherwise it will get an EOF error because its input stream
-+      (stdin) would be redirected to \\.\NUL (stdoud and stderr too).
-+
-+   Example for a console application, run Exuberant ctags: >
-+        :!start /min ctags -R .
-+<  When it has finished you should see file named "tags" in your current
-+   directory.  You should notice the window title blinking on your taskbar.
-+   This is more noticable for commands that take longer.
-+   Now delete the "tags" file and run this command: >
-+        :!start /b ctags -R .
-+<  You should have the same "tags" file, but this time there will be no
-+   blinking on the taskbar.
-+   Example for a GUI application: >
-+        :!start /min notepad
-+        :!start /b notepad
-+<  The first command runs notepad minimized and the second one runs it
-+   normally.
- 
- Q. I'm using Win32s, and when I try to run an external command like "make",
-    Vim doesn't wait for it to finish!  Help!
-diff -Naur vim73.orig/runtime/doc/pattern.txt vim73/runtime/doc/pattern.txt
---- vim73.orig/runtime/doc/pattern.txt	2010-08-15 12:23:21.000000000 +0000
-+++ vim73/runtime/doc/pattern.txt	2012-11-01 20:35:43.000000000 +0000
-@@ -1027,11 +1027,9 @@
- 	  These items only work for 8-bit characters.
- 							*/[[=* *[==]*
- 	- An equivalence class.  This means that characters are matched that
--	  have almost the same meaning, e.g., when ignoring accents.  The form
--	  is:
-+	  have almost the same meaning, e.g., when ignoring accents.  This
-+	  only works for Unicode, latin1 and latin9.  The form is:
- 		[=a=]
--	  Currently this is only implemented for latin1.  Also works for the
--	  latin1 characters in utf-8 and latin9.
- 							*/[[.* *[..]*
- 	- A collation element.  This currently simply accepts a single
- 	  character in the form:
-diff -Naur vim73.orig/runtime/doc/sign.txt vim73/runtime/doc/sign.txt
---- vim73.orig/runtime/doc/sign.txt	2010-08-15 12:23:22.000000000 +0000
-+++ vim73/runtime/doc/sign.txt	2012-11-01 20:35:47.000000000 +0000
-@@ -150,8 +150,14 @@
- 		Remove the previously placed sign {id} from file {fname}.
- 		See remark above about {fname} |:sign-fname|.
- 
-+:sign unplace * file={fname}
-+		Remove all placed signs in file {fname}.
-+
- :sign unplace {id} buffer={nr}
--		Same, but use buffer {nr}.
-+		Remove the previously placed sign {id} from buffer {nr}.
-+
-+:sign unplace * buffer={nr}
-+		Remove all placed signs in buffer {nr}.
- 
- :sign unplace {id}
- 		Remove the previously placed sign {id} from all files it
-diff -Naur vim73.orig/runtime/doc/tabpage.txt vim73/runtime/doc/tabpage.txt
---- vim73.orig/runtime/doc/tabpage.txt	2010-08-15 12:23:22.000000000 +0000
-+++ vim73/runtime/doc/tabpage.txt	2012-11-01 20:35:47.000000000 +0000
-@@ -173,10 +173,20 @@
- REORDERING TAB PAGES:
- 
- :tabm[ove] [N]						*:tabm* *:tabmove*
-+:[N]tabm[ove]
- 		Move the current tab page to after tab page N.  Use zero to
- 		make the current tab page the first one.  Without N the tab
- 		page is made the last one.
- 
-+:tabm[ove] +[N]
-+:tabm[ove] -[N]
-+		Move the current tab page N places to the right (with +) or to
-+		the left (with -).
-+
-+Note that although it is possible to move a tab behind the N-th one by using
-+:Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For
-+clarification what +N means in this context see |[range]|.
-+
- 
- LOOPING OVER TAB PAGES:
- 
-diff -Naur vim73.orig/runtime/doc/visual.txt vim73/runtime/doc/visual.txt
---- vim73.orig/runtime/doc/visual.txt	2010-08-15 12:23:23.000000000 +0000
-+++ vim73/runtime/doc/visual.txt	2012-11-01 20:35:47.000000000 +0000
-@@ -94,6 +94,18 @@
- 			After using "p" or "P" in Visual mode the text that
- 			was put will be selected.
- 
-+								*gn* *v_gn*
-+gn			Search forward for the last used search pattern, like
-+			with `n`, and start Visual mode to select the match.
-+			If the cursor is on the match, visually selects it.
-+			If an operator is pending, operates on the match.
-+			E.g., "dgn" deletes the text of the next match.
-+			If Visual mode is active, extends the selection
-+			until the end of the next match.
-+
-+								*gN* *v_gN*
-+gN			Like |gn| but searches backward, like with `N`.
-+
- 							*<LeftMouse>*
- <LeftMouse>		Set the current cursor position.  If Visual mode is
- 			active it is stopped.  Only when 'mouse' option is
-diff -Naur vim73.orig/runtime/filetype.vim vim73/runtime/filetype.vim
---- vim73.orig/runtime/filetype.vim	2010-08-03 20:44:00.000000000 +0000
-+++ vim73/runtime/filetype.vim	2012-11-01 20:35:45.000000000 +0000
-@@ -2475,17 +2475,19 @@
- " detected filetypes.
- runtime! ftdetect/*.vim
- 
-+" NOTE: The above command could have ended the filetypedetect autocmd group
-+" and started another one. Let's make sure it has ended to get to a consistant
-+" state.
-+augroup END
- 
- " Generic configuration file (check this last, it's just guessing!)
--au BufNewFile,BufRead,StdinReadPost *
-+au filetypedetect BufNewFile,BufRead,StdinReadPost *
- 	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
- 	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
- 	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
- 	\   setf conf |
- 	\ endif
- 
--augroup END
--
- 
- " If the GUI is already running, may still need to install the Syntax menu.
- " Don't do it when the 'M' flag is included in 'guioptions'.
-diff -Naur vim73.orig/runtime/filetype.vim~ vim73/runtime/filetype.vim~
---- vim73.orig/runtime/filetype.vim~	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/runtime/filetype.vim~	2010-08-03 20:44:00.000000000 +0000
-@@ -0,0 +1,2514 @@
-+" Vim support file to detect file types
-+"
-+" Maintainer:	Bram Moolenaar <Bram@vim.org>
-+" Last Change:	2010 Jul 30
-+
-+" Listen very carefully, I will say this only once
-+if exists("did_load_filetypes")
-+  finish
-+endif
-+let did_load_filetypes = 1
-+
-+" Line continuation is used here, remove 'C' from 'cpoptions'
-+let s:cpo_save = &cpo
-+set cpo&vim
-+
-+augroup filetypedetect
-+
-+" Ignored extensions
-+if exists("*fnameescape")
-+au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.rpmsave,?\+.rpmnew
-+	\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
-+au BufNewFile,BufRead *~
-+	\ let s:name = expand("<afile>") |
-+	\ let s:short = substitute(s:name, '\~$', '', '') |
-+	\ if s:name != s:short && s:short != "" |
-+	\   exe "doau filetypedetect BufRead " . fnameescape(s:short) |
-+	\ endif |
-+	\ unlet! s:name s:short
-+au BufNewFile,BufRead ?\+.in
-+	\ if expand("<afile>:t") != "configure.in" |
-+	\   exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r")) |
-+	\ endif
-+elseif &verbose > 0
-+  echomsg "Warning: some filetypes will not be recognized because this version of Vim does not have fnameescape()"
-+endif
-+
-+" Pattern used to match file names which should not be inspected.
-+" Currently finds compressed files.
-+if !exists("g:ft_ignore_pat")
-+  let g:ft_ignore_pat = '\.\(Z\|gz\|bz2\|zip\|tgz\)$'
-+endif
-+
-+" Function used for patterns that end in a star: don't set the filetype if the
-+" file name matches ft_ignore_pat.
-+func! s:StarSetf(ft)
-+  if expand("<amatch>") !~ g:ft_ignore_pat
-+    exe 'setf ' . a:ft
-+  endif
-+endfunc
-+
-+" Abaqus or Trasys
-+au BufNewFile,BufRead *.inp			call s:Check_inp()
-+
-+func! s:Check_inp()
-+  if getline(1) =~ '^\*'
-+    setf abaqus
-+  else
-+    let n = 1
-+    if line("$") > 500
-+      let nmax = 500
-+    else
-+      let nmax = line("$")
-+    endif
-+    while n <= nmax
-+      if getline(n) =~? "^header surface data"
-+	setf trasys
-+	break
-+      endif
-+      let n = n + 1
-+    endwhile
-+  endif
-+endfunc
-+
-+" A-A-P recipe
-+au BufNewFile,BufRead *.aap			setf aap
-+
-+" A2ps printing utility
-+au BufNewFile,BufRead etc/a2ps.cfg,etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
-+
-+" ABAB/4
-+au BufNewFile,BufRead *.abap			setf abap
-+
-+" ABC music notation
-+au BufNewFile,BufRead *.abc			setf abc
-+
-+" ABEL
-+au BufNewFile,BufRead *.abl			setf abel
-+
-+" AceDB
-+au BufNewFile,BufRead *.wrm			setf acedb
-+
-+" Ada (83, 9X, 95)
-+au BufNewFile,BufRead *.adb,*.ads,*.ada		setf ada
-+if has("vms")
-+  au BufNewFile,BufRead *.gpr,*.ada_m,*.adc	setf ada
-+else
-+  au BufNewFile,BufRead *.gpr			setf ada
-+endif
-+
-+" AHDL
-+au BufNewFile,BufRead *.tdf			setf ahdl
-+
-+" AMPL
-+au BufNewFile,BufRead *.run			setf ampl
-+
-+" Ant
-+au BufNewFile,BufRead build.xml			setf ant
-+
-+" Apache style config file
-+au BufNewFile,BufRead proftpd.conf*		call s:StarSetf('apachestyle')
-+
-+" Apache config file
-+au BufNewFile,BufRead .htaccess,/etc/httpd/*.conf		 setf apache
-+au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf*,/etc/httpd/conf.d/*.conf* call s:StarSetf('apache')
-+
-+" XA65 MOS6510 cross assembler
-+au BufNewFile,BufRead *.a65			setf a65
-+
-+" Applescript
-+au BufNewFile,BufRead *.scpt			setf applescript
-+
-+" Applix ELF
-+au BufNewFile,BufRead *.am
-+	\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
-+
-+" ALSA configuration
-+au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf	setf alsaconf
-+
-+" Arc Macro Language
-+au BufNewFile,BufRead *.aml			setf aml
-+
-+" Arch Inventory file
-+au BufNewFile,BufRead .arch-inventory,=tagging-method	setf arch
-+
-+" ART*Enterprise (formerly ART-IM)
-+au BufNewFile,BufRead *.art			setf art
-+
-+" ASN.1
-+au BufNewFile,BufRead *.asn,*.asn1		setf asn
-+
-+" Active Server Pages (with Visual Basic Script)
-+au BufNewFile,BufRead *.asa
-+	\ if exists("g:filetype_asa") |
-+	\   exe "setf " . g:filetype_asa |
-+	\ else |
-+	\   setf aspvbs |
-+	\ endif
-+
-+" Active Server Pages (with Perl or Visual Basic Script)
-+au BufNewFile,BufRead *.asp
-+	\ if exists("g:filetype_asp") |
-+	\   exe "setf " . g:filetype_asp |
-+	\ elseif getline(1) . getline(2) . getline(3) =~? "perlscript" |
-+	\   setf aspperl |
-+	\ else |
-+	\   setf aspvbs |
-+	\ endif
-+
-+" Grub (must be before catch *.lst)
-+au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf,/etc/grub.conf	setf grub
-+
-+" Assembly (all kinds)
-+" *.lst is not pure assembly, it has two extra columns (address, byte codes)
-+au BufNewFile,BufRead *.asm,*.[sS],*.[aA],*.mac,*.lst	call s:FTasm()
-+
-+" This function checks for the kind of assembly that is wanted by the user, or
-+" can be detected from the first five lines of the file.
-+func! s:FTasm()
-+  " make sure b:asmsyntax exists
-+  if !exists("b:asmsyntax")
-+    let b:asmsyntax = ""
-+  endif
-+
-+  if b:asmsyntax == ""
-+    call s:FTasmsyntax()
-+  endif
-+
-+  " if b:asmsyntax still isn't set, default to asmsyntax or GNU
-+  if b:asmsyntax == ""
-+    if exists("g:asmsyntax")
-+      let b:asmsyntax = g:asmsyntax
-+    else
-+      let b:asmsyntax = "asm"
-+    endif
-+  endif
-+
-+  exe "setf " . fnameescape(b:asmsyntax)
-+endfunc
-+
-+func! s:FTasmsyntax()
-+  " see if file contains any asmsyntax=foo overrides. If so, change
-+  " b:asmsyntax appropriately
-+  let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
-+	\" ".getline(5)." "
-+  let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
-+  if match != ''
-+    let b:asmsyntax = match
-+  elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
-+    let b:asmsyntax = "vmasm"
-+  endif
-+endfunc
-+
-+" Macro (VAX)
-+au BufNewFile,BufRead *.mar			setf vmasm
-+
-+" Atlas
-+au BufNewFile,BufRead *.atl,*.as		setf atlas
-+
-+" Autoit v3
-+au BufNewFile,BufRead *.au3			setf autoit
-+
-+" Autohotkey
-+au BufNewFile,BufRead *.ahk			setf autohotkey
-+
-+" Automake
-+au BufNewFile,BufRead [mM]akefile.am,GNUmakefile.am	setf automake
-+
-+" Autotest .at files are actually m4
-+au BufNewFile,BufRead *.at			setf m4
-+
-+" Avenue
-+au BufNewFile,BufRead *.ave			setf ave
-+
-+" Awk
-+au BufNewFile,BufRead *.awk			setf awk
-+
-+" B
-+au BufNewFile,BufRead *.mch,*.ref,*.imp		setf b
-+
-+" BASIC or Visual Basic
-+au BufNewFile,BufRead *.bas			call s:FTVB("basic")
-+
-+" Check if one of the first five lines contains "VB_Name".  In that case it is
-+" probably a Visual Basic file.  Otherwise it's assumed to be "alt" filetype.
-+func! s:FTVB(alt)
-+  if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
-+    setf vb
-+  else
-+    exe "setf " . a:alt
-+  endif
-+endfunc
-+
-+" Visual Basic Script (close to Visual Basic)
-+au BufNewFile,BufRead *.vbs,*.dsm,*.ctl		setf vb
-+
-+" IBasic file (similar to QBasic)
-+au BufNewFile,BufRead *.iba,*.ibi		setf ibasic
-+
-+" FreeBasic file (similar to QBasic)
-+au BufNewFile,BufRead *.fb,*.bi			setf freebasic
-+
-+" Batch file for MSDOS.
-+au BufNewFile,BufRead *.bat,*.sys		setf dosbatch
-+" *.cmd is close to a Batch file, but on OS/2 Rexx files also use *.cmd.
-+au BufNewFile,BufRead *.cmd
-+	\ if getline(1) =~ '^/\*' | setf rexx | else | setf dosbatch | endif
-+
-+" Batch file for 4DOS
-+au BufNewFile,BufRead *.btm			call s:FTbtm()
-+func! s:FTbtm()
-+  if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
-+    setf dosbatch
-+  else
-+    setf btm
-+  endif
-+endfunc
-+
-+" BC calculator
-+au BufNewFile,BufRead *.bc			setf bc
-+
-+" BDF font
-+au BufNewFile,BufRead *.bdf			setf bdf
-+
-+" BibTeX bibliography database file
-+au BufNewFile,BufRead *.bib			setf bib
-+
-+" BibTeX Bibliography Style
-+au BufNewFile,BufRead *.bst			setf bst
-+
-+" BIND configuration
-+au BufNewFile,BufRead named.conf,rndc.conf	setf named
-+
-+" BIND zone
-+au BufNewFile,BufRead named.root		setf bindzone
-+au BufNewFile,BufRead *.db			call s:BindzoneCheck('')
-+
-+func! s:BindzoneCheck(default)
-+  if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+ <<>>\|BIND.*named\|$ORIGIN\|$TTL\|IN\s\+SOA'
-+    setf bindzone
-+  elseif a:default != ''
-+    exe 'setf ' . a:default
-+  endif
-+endfunc
-+
-+" Blank
-+au BufNewFile,BufRead *.bl			setf blank
-+
-+" Blkid cache file
-+au BufNewFile,BufRead /etc/blkid.tab,/etc/blkid.tab.old   setf xml
-+
-+" C or lpc
-+au BufNewFile,BufRead *.c			call s:FTlpc()
-+
-+func! s:FTlpc()
-+  if exists("g:lpc_syntax_for_c")
-+    let lnum = 1
-+    while lnum <= 12
-+      if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)'
-+	setf lpc
-+	return
-+      endif
-+      let lnum = lnum + 1
-+    endwhile
-+  endif
-+  setf c
-+endfunc
-+
-+" Calendar
-+au BufNewFile,BufRead calendar			setf calendar
-+au BufNewFile,BufRead */.calendar/*,
-+	\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
-+	\					call s:StarSetf('calendar')
-+
-+" C#
-+au BufNewFile,BufRead *.cs			setf cs
-+
-+" Cabal
-+au BufNewFile,BufRead *.cabal       		setf cabal
-+
-+" Cdrdao TOC
-+au BufNewFile,BufRead *.toc			setf cdrtoc
-+
-+" Cdrdao config
-+au BufNewFile,BufRead etc/cdrdao.conf,etc/defaults/cdrdao,etc/default/cdrdao,~/.cdrdao						setf cdrdaoconf
-+
-+" Cfengine
-+au BufNewFile,BufRead cfengine.conf		setf cfengine
-+
-+" ChaiScript
-+au BufRead,BufNewFile *.chai			setf chaiscript
-+
-+" Comshare Dimension Definition Language
-+au BufNewFile,BufRead *.cdl			setf cdl
-+
-+" Conary Recipe
-+au BufNewFile,BufRead *.recipe			setf conaryrecipe
-+
-+" Controllable Regex Mutilator
-+au BufNewFile,BufRead *.crm			setf crm
-+
-+" Cyn++
-+au BufNewFile,BufRead *.cyn			setf cynpp
-+
-+" Cynlib
-+" .cc and .cpp files can be C++ or Cynlib.
-+au BufNewFile,BufRead *.cc
-+	\ if exists("cynlib_syntax_for_cc")|setf cynlib|else|setf cpp|endif
-+au BufNewFile,BufRead *.cpp
-+	\ if exists("cynlib_syntax_for_cpp")|setf cynlib|else|setf cpp|endif
-+
-+" C++
-+au BufNewFile,BufRead *.cxx,*.c++,*.hh,*.hxx,*.hpp,*.ipp,*.moc,*.tcc,*.inl setf cpp
-+if has("fname_case")
-+  au BufNewFile,BufRead *.C,*.H setf cpp
-+endif
-+
-+" .h files can be C, Ch C++, ObjC or ObjC++.
-+" Set c_syntax_for_h if you want C, ch_syntax_for_h if you want Ch. ObjC is
-+" detected automatically.
-+au BufNewFile,BufRead *.h			call s:FTheader()
-+
-+func! s:FTheader()
-+  if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
-+    setf objc
-+  elseif exists("g:c_syntax_for_h")
-+    setf c
-+  elseif exists("g:ch_syntax_for_h")
-+    setf ch
-+  else
-+    setf cpp
-+  endif
-+endfunc
-+
-+" Ch (CHscript)
-+au BufNewFile,BufRead *.chf			setf ch
-+
-+" TLH files are C++ headers generated by Visual C++'s #import from typelibs
-+au BufNewFile,BufRead *.tlh			setf cpp
-+
-+" Cascading Style Sheets
-+au BufNewFile,BufRead *.css			setf css
-+
-+" Century Term Command Scripts (*.cmd too)
-+au BufNewFile,BufRead *.con			setf cterm
-+
-+" Changelog
-+au BufNewFile,BufRead changelog.Debian,changelog.dch,NEWS.Debian,NEWS.dch
-+					\	setf debchangelog
-+
-+au BufNewFile,BufRead [cC]hange[lL]og
-+	\  if getline(1) =~ '; urgency='
-+	\|   setf debchangelog
-+	\| else
-+	\|   setf changelog
-+	\| endif
-+
-+au BufNewFile,BufRead NEWS
-+	\  if getline(1) =~ '; urgency='
-+	\|   setf debchangelog
-+	\| endif
-+
-+" CHILL
-+au BufNewFile,BufRead *..ch			setf chill
-+
-+" Changes for WEB and CWEB or CHILL
-+au BufNewFile,BufRead *.ch			call s:FTchange()
-+
-+" This function checks if one of the first ten lines start with a '@'.  In
-+" that case it is probably a change file.
-+" If the first line starts with # or ! it's probably a ch file.
-+" If a line has "main", "include", "//" ir "/*" it's probably ch.
-+" Otherwise CHILL is assumed.
-+func! s:FTchange()
-+  let lnum = 1
-+  while lnum <= 10
-+    if getline(lnum)[0] == '@'
-+      setf change
-+      return
-+    endif
-+    if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!')
-+      setf ch
-+      return
-+    endif
-+    if getline(lnum) =~ "MODULE"
-+      setf chill
-+      return
-+    endif
-+    if getline(lnum) =~ 'main\s*(\|#\s*include\|//'
-+      setf ch
-+      return
-+    endif
-+    let lnum = lnum + 1
-+  endwhile
-+  setf chill
-+endfunc
-+
-+" ChordPro
-+au BufNewFile,BufRead *.chopro,*.crd,*.cho,*.crdpro,*.chordpro	setf chordpro
-+
-+" Clean
-+au BufNewFile,BufRead *.dcl,*.icl		setf clean
-+
-+" Clever
-+au BufNewFile,BufRead *.eni			setf cl
-+
-+" Clever or dtd
-+au BufNewFile,BufRead *.ent			call s:FTent()
-+
-+func! s:FTent()
-+  " This function checks for valid cl syntax in the first five lines.
-+  " Look for either an opening comment, '#', or a block start, '{".
-+  " If not found, assume SGML.
-+  let lnum = 1
-+  while lnum < 6
-+    let line = getline(lnum)
-+    if line =~ '^\s*[#{]'
-+      setf cl
-+      return
-+    elseif line !~ '^\s*$'
-+      " Not a blank line, not a comment, and not a block start,
-+      " so doesn't look like valid cl code.
-+      break
-+    endif
-+    let lnum = lnum + 1
-+  endw
-+  setf dtd
-+endfunc
-+
-+" Clipper (or FoxPro; could also be eviews)
-+au BufNewFile,BufRead *.prg
-+	\ if exists("g:filetype_prg") |
-+	\   exe "setf " . g:filetype_prg |
-+	\ else |
-+	\   setf clipper |
-+	\ endif
-+
-+" Cmake
-+au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in		setf cmake
-+
-+" Cmusrc
-+au BufNewFile,BufRead ~/.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
-+au BufNewFile,BufRead */cmus/{rc,*.theme}			setf cmusrc
-+
-+" Cobol
-+au BufNewFile,BufRead *.cbl,*.cob,*.lib	setf cobol
-+"   cobol or zope form controller python script? (heuristic)
-+au BufNewFile,BufRead *.cpy
-+	\ if getline(1) =~ '^##' |
-+	\   setf python |
-+	\ else |
-+	\   setf cobol |
-+	\ endif
-+
-+" Coco/R
-+au BufNewFile,BufRead *.atg			setf coco
-+
-+" Cold Fusion
-+au BufNewFile,BufRead *.cfm,*.cfi,*.cfc		setf cf
-+
-+" Configure scripts
-+au BufNewFile,BufRead configure.in,configure.ac setf config
-+
-+" CUDA  Cumpute Unified Device Architecture
-+au BufNewFile,BufRead *.cu			setf cuda
-+
-+" WildPackets EtherPeek Decoder
-+au BufNewFile,BufRead *.dcd			setf dcd
-+
-+" Enlightenment configuration files
-+au BufNewFile,BufRead *enlightenment/*.cfg	setf c
-+
-+" Eterm
-+au BufNewFile,BufRead *Eterm/*.cfg		setf eterm
-+
-+" Lynx config files
-+au BufNewFile,BufRead lynx.cfg			setf lynx
-+
-+" Quake
-+au BufNewFile,BufRead *baseq[2-3]/*.cfg,*id1/*.cfg	setf quake
-+au BufNewFile,BufRead *quake[1-3]/*.cfg			setf quake
-+
-+" Quake C
-+au BufNewFile,BufRead *.qc			setf c
-+
-+" Configure files
-+au BufNewFile,BufRead *.cfg			setf cfg
-+
-+" Cucumber
-+au BufNewFile,BufRead *.feature 		setf cucumber
-+
-+" Communicating Sequential Processes
-+au BufNewFile,BufRead *.csp,*.fdr		setf csp
-+
-+" CUPL logic description and simulation
-+au BufNewFile,BufRead *.pld			setf cupl
-+au BufNewFile,BufRead *.si			setf cuplsim
-+
-+" Debian Control
-+au BufNewFile,BufRead */debian/control		setf debcontrol
-+au BufNewFile,BufRead control
-+	\  if getline(1) =~ '^Source:'
-+	\|   setf debcontrol
-+	\| endif
-+
-+" Debian Sources.list
-+au BufNewFile,BufRead /etc/apt/sources.list	setf debsources
-+
-+" Deny hosts
-+au BufNewFile,BufRead denyhosts.conf		setf denyhosts
-+
-+" ROCKLinux package description
-+au BufNewFile,BufRead *.desc			setf desc
-+
-+" the D language or dtrace
-+au BufNewFile,BufRead *.d			call s:DtraceCheck()
-+
-+func! s:DtraceCheck()
-+  let lines = getline(1, min([line("$"), 100]))
-+  if match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
-+    setf dtrace
-+  else
-+    setf d
-+  endif
-+endfunc
-+
-+" Desktop files
-+au BufNewFile,BufRead *.desktop,.directory	setf desktop
-+
-+" Dict config
-+au BufNewFile,BufRead dict.conf,.dictrc		setf dictconf
-+
-+" Dictd config
-+au BufNewFile,BufRead dictd.conf		setf dictdconf
-+
-+" Diff files
-+au BufNewFile,BufRead *.diff,*.rej,*.patch	setf diff
-+
-+" Dircolors
-+au BufNewFile,BufRead .dir_colors,/etc/DIR_COLORS	setf dircolors
-+
-+" Diva (with Skill) or InstallShield
-+au BufNewFile,BufRead *.rul
-+	\ if getline(1).getline(2).getline(3).getline(4).getline(5).getline(6) =~? 'InstallShield' |
-+	\   setf ishd |
-+	\ else |
-+	\   setf diva |
-+	\ endif
-+
-+" DCL (Digital Command Language - vms) or DNS zone file
-+au BufNewFile,BufRead *.com			call s:BindzoneCheck('dcl')
-+
-+" DOT
-+au BufNewFile,BufRead *.dot			setf dot
-+
-+" Dylan - lid files
-+au BufNewFile,BufRead *.lid			setf dylanlid
-+
-+" Dylan - intr files (melange)
-+au BufNewFile,BufRead *.intr			setf dylanintr
-+
-+" Dylan
-+au BufNewFile,BufRead *.dylan			setf dylan
-+
-+" Microsoft Module Definition
-+au BufNewFile,BufRead *.def			setf def
-+
-+" Dracula
-+au BufNewFile,BufRead *.drac,*.drc,*lvs,*lpe	setf dracula
-+
-+" Datascript
-+au BufNewFile,BufRead *.ds			setf datascript
-+
-+" dsl
-+au BufNewFile,BufRead *.dsl			setf dsl
-+
-+" DTD (Document Type Definition for XML)
-+au BufNewFile,BufRead *.dtd			setf dtd
-+
-+" EDIF (*.edf,*.edif,*.edn,*.edo)
-+au BufNewFile,BufRead *.ed\(f\|if\|n\|o\)	setf edif
-+
-+" Embedix Component Description
-+au BufNewFile,BufRead *.ecd			setf ecd
-+
-+" Eiffel or Specman
-+au BufNewFile,BufRead *.e,*.E			call s:FTe()
-+
-+" Elinks configuration
-+au BufNewFile,BufRead */etc/elinks.conf,*/.elinks/elinks.conf	setf elinks
-+
-+func! s:FTe()
-+  let n = 1
-+  while n < 100 && n < line("$")
-+    if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
-+      setf specman
-+      return
-+    endif
-+    let n = n + 1
-+  endwhile
-+  setf eiffel
-+endfunc
-+
-+" ERicsson LANGuage; Yaws is erlang too
-+au BufNewFile,BufRead *.erl,*.hrl,*.yaws	setf erlang
-+
-+" Elm Filter Rules file
-+au BufNewFile,BufRead filter-rules		setf elmfilt
-+
-+" ESMTP rc file
-+au BufNewFile,BufRead *esmtprc			setf esmtprc
-+
-+" ESQL-C
-+au BufNewFile,BufRead *.ec,*.EC			setf esqlc
-+
-+" Esterel
-+au BufNewFile,BufRead *.strl			setf esterel
-+
-+" Essbase script
-+au BufNewFile,BufRead *.csc			setf csc
-+
-+" Exim
-+au BufNewFile,BufRead exim.conf			setf exim
-+
-+" Expect
-+au BufNewFile,BufRead *.exp			setf expect
-+
-+" Exports
-+au BufNewFile,BufRead exports			setf exports
-+
-+" Fantom
-+au BufNewFile,BufRead *.fan,*.fwt		setf fan
-+
-+" Factor
-+au BufNewFile,BufRead *.factor			setf factor
-+
-+" Fetchmail RC file
-+au BufNewFile,BufRead .fetchmailrc		setf fetchmail
-+
-+" FlexWiki - disabled, because it has side effects when a .wiki file
-+" is not actually FlexWiki
-+"au BufNewFile,BufRead *.wiki			setf flexwiki
-+
-+" Focus Executable
-+au BufNewFile,BufRead *.fex,*.focexec		setf focexec
-+
-+" Focus Master file (but not for auto.master)
-+au BufNewFile,BufRead auto.master		setf conf
-+au BufNewFile,BufRead *.mas,*.master		setf master
-+
-+" Forth
-+au BufNewFile,BufRead *.fs,*.ft			setf forth
-+
-+" Reva Forth
-+au BufNewFile,BufRead *.frt			setf reva
-+
-+" Fortran
-+if has("fname_case")
-+  au BufNewFile,BufRead *.F,*.FOR,*.FPP,*.FTN,*.F77,*.F90,*.F95,*.F03,*.F08	 setf fortran
-+endif
-+au BufNewFile,BufRead   *.f,*.for,*.fortran,*.fpp,*.ftn,*.f77,*.f90,*.f95,*.f03,*.f08  setf fortran
-+
-+" Framescript
-+au BufNewFile,BufRead *.fsl			setf framescript
-+
-+" FStab
-+au BufNewFile,BufRead fstab,mtab		setf fstab
-+
-+" GDB command files
-+au BufNewFile,BufRead .gdbinit			setf gdb
-+
-+" GDMO
-+au BufNewFile,BufRead *.mo,*.gdmo		setf gdmo
-+
-+" Gedcom
-+au BufNewFile,BufRead *.ged,lltxxxxx.txt	setf gedcom
-+
-+" Git
-+autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG setf gitcommit
-+autocmd BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
-+autocmd BufNewFile,BufRead git-rebase-todo      setf gitrebase
-+autocmd BufNewFile,BufRead .msg.[0-9]*
-+      \ if getline(1) =~ '^From.*# This line is ignored.$' |
-+      \   setf gitsendemail |
-+      \ endif
-+autocmd BufNewFile,BufRead *.git/**
-+      \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
-+      \   setf git |
-+      \ endif
-+
-+" Gkrellmrc
-+au BufNewFile,BufRead gkrellmrc,gkrellmrc_?	setf gkrellmrc
-+
-+" GP scripts (2.0 and onward)
-+au BufNewFile,BufRead *.gp,.gprc		setf gp
-+
-+" GPG
-+au BufNewFile,BufRead */.gnupg/options		setf gpg
-+au BufNewFile,BufRead */.gnupg/gpg.conf		setf gpg
-+au BufNewFile,BufRead /usr/**/gnupg/options.skel setf gpg
-+
-+" Gnuplot scripts
-+au BufNewFile,BufRead *.gpi			setf gnuplot
-+
-+" GrADS scripts
-+au BufNewFile,BufRead *.gs			setf grads
-+
-+" Gretl
-+au BufNewFile,BufRead *.gretl			setf gretl
-+
-+" Groovy
-+au BufNewFile,BufRead *.groovy			setf groovy
-+
-+" GNU Server Pages
-+au BufNewFile,BufRead *.gsp			setf gsp
-+
-+" Group file
-+au BufNewFile,BufRead /etc/group,/etc/group-,/etc/group.edit,/etc/gshadow,/etc/gshadow-,/etc/gshadow.edit,/var/backups/group.bak,/var/backups/gshadow.bak  setf group
-+
-+" GTK RC
-+au BufNewFile,BufRead .gtkrc,gtkrc		setf gtkrc
-+
-+" Haml
-+au BufNewFile,BufRead *.haml			setf haml
-+
-+" Hamster Classic | Playground files
-+au BufNewFile,BufRead *.hsc,*.hsm		setf hamster
-+
-+" Haskell
-+au BufNewFile,BufRead *.hs,*.hs-boot 		setf haskell
-+au BufNewFile,BufRead *.lhs			setf lhaskell
-+au BufNewFile,BufRead *.chs			setf chaskell
-+
-+" Haste
-+au BufNewFile,BufRead *.ht			setf haste
-+au BufNewFile,BufRead *.htpp			setf hastepreproc
-+
-+" Hercules
-+au BufNewFile,BufRead *.vc,*.ev,*.rs,*.sum,*.errsum	setf hercules
-+
-+" HEX (Intel)
-+au BufNewFile,BufRead *.hex,*.h32		setf hex
-+
-+" Tilde (must be before HTML)
-+au BufNewFile,BufRead *.t.html			setf tilde
-+
-+" HTML (.shtml and .stm for server side)
-+au BufNewFile,BufRead *.html,*.htm,*.shtml,*.stm  call s:FThtml()
-+
-+" Distinguish between HTML, XHTML and Django
-+func! s:FThtml()
-+  let n = 1
-+  while n < 10 && n < line("$")
-+    if getline(n) =~ '\<DTD\s\+XHTML\s'
-+      setf xhtml
-+      return
-+    endif
-+    if getline(n) =~ '{%\s*\(extends\|block\)\>'
-+      setf htmldjango
-+      return
-+    endif
-+    let n = n + 1
-+  endwhile
-+  setf html
-+endfunc
-+
-+" HTML with Ruby - eRuby
-+au BufNewFile,BufRead *.erb,*.rhtml		setf eruby
-+
-+" HTML with M4
-+au BufNewFile,BufRead *.html.m4			setf htmlm4
-+
-+" HTML Cheetah template
-+au BufNewFile,BufRead *.tmpl			setf htmlcheetah
-+
-+" Host config
-+au BufNewFile,BufRead /etc/host.conf		setf hostconf
-+
-+" Hosts access
-+au BufNewFile,BufRead /etc/hosts.allow,/etc/hosts.deny  setf hostsaccess
-+
-+" Hyper Builder
-+au BufNewFile,BufRead *.hb			setf hb
-+
-+" Icon
-+au BufNewFile,BufRead *.icn			setf icon
-+
-+" IDL (Interface Description Language)
-+au BufNewFile,BufRead *.idl			call s:FTidl()
-+
-+" Distinguish between standard IDL and MS-IDL
-+func! s:FTidl()
-+  let n = 1
-+  while n < 50 && n < line("$")
-+    if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
-+      setf msidl
-+      return
-+    endif
-+    let n = n + 1
-+  endwhile
-+  setf idl
-+endfunc
-+
-+" Microsoft IDL (Interface Description Language)  Also *.idl
-+" MOF = WMI (Windows Management Instrumentation) Managed Object Format
-+au BufNewFile,BufRead *.odl,*.mof		setf msidl
-+
-+" Icewm menu
-+au BufNewFile,BufRead */.icewm/menu		setf icemenu
-+
-+" Indent profile (must come before IDL *.pro!)
-+au BufNewFile,BufRead .indent.pro		setf indent
-+au BufNewFile,BufRead indent.pro		call s:ProtoCheck('indent')
-+
-+" IDL (Interactive Data Language)
-+au BufNewFile,BufRead *.pro			call s:ProtoCheck('idlang')
-+
-+" Distinguish between "default" and Cproto prototype file. */
-+func! s:ProtoCheck(default)
-+  " Cproto files have a comment in the first line and a function prototype in
-+  " the second line, it always ends in ";".  Indent files may also have
-+  " comments, thus we can't match comments to see the difference.
-+  if getline(2) =~ ';$'
-+    setf cpp
-+  else
-+    exe 'setf ' . a:default
-+  endif
-+endfunc
-+
-+
-+" Indent RC
-+au BufNewFile,BufRead indentrc			setf indent
-+
-+" Inform
-+au BufNewFile,BufRead *.inf,*.INF		setf inform
-+
-+" Initng
-+au BufNewFile,BufRead /etc/initng/**/*.i,*.ii	setf initng
-+
-+" Ipfilter
-+au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules	setf ipfilter
-+
-+" Informix 4GL (source - canonical, include file, I4GL+M4 preproc.)
-+au BufNewFile,BufRead *.4gl,*.4gh,*.m4gl	setf fgl
-+
-+" .INI file for MSDOS
-+au BufNewFile,BufRead *.ini			setf dosini
-+
-+" SysV Inittab
-+au BufNewFile,BufRead inittab			setf inittab
-+
-+" Inno Setup
-+au BufNewFile,BufRead *.iss			setf iss
-+
-+" JAL
-+au BufNewFile,BufRead *.jal,*.JAL		setf jal
-+
-+" Jam
-+au BufNewFile,BufRead *.jpl,*.jpr		setf jam
-+
-+" Java
-+au BufNewFile,BufRead *.java,*.jav		setf java
-+
-+" JavaCC
-+au BufNewFile,BufRead *.jj,*.jjt		setf javacc
-+
-+" JavaScript, ECMAScript
-+au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx	setf javascript
-+
-+" Java Server Pages
-+au BufNewFile,BufRead *.jsp			setf jsp
-+
-+" Java Properties resource file (note: doesn't catch font.properties.pl)
-+au BufNewFile,BufRead *.properties,*.properties_??,*.properties_??_??	setf jproperties
-+au BufNewFile,BufRead *.properties_??_??_*	call s:StarSetf('jproperties')
-+
-+" Jess
-+au BufNewFile,BufRead *.clp			setf jess
-+
-+" Jgraph
-+au BufNewFile,BufRead *.jgr			setf jgraph
-+
-+" Kixtart
-+au BufNewFile,BufRead *.kix			setf kix
-+
-+" Kimwitu[++]
-+au BufNewFile,BufRead *.k			setf kwt
-+
-+" KDE script
-+au BufNewFile,BufRead *.ks			setf kscript
-+
-+" Kconfig
-+au BufNewFile,BufRead Kconfig,Kconfig.debug	setf kconfig
-+
-+" Lace (ISE)
-+au BufNewFile,BufRead *.ace,*.ACE		setf lace
-+
-+" Latte
-+au BufNewFile,BufRead *.latte,*.lte		setf latte
-+
-+" Limits
-+au BufNewFile,BufRead /etc/limits		setf limits
-+
-+" LambdaProlog (*.mod too, see Modsim)
-+au BufNewFile,BufRead *.sig			setf lprolog
-+
-+" LDAP LDIF
-+au BufNewFile,BufRead *.ldif			setf ldif
-+
-+" Ld loader
-+au BufNewFile,BufRead *.ld			setf ld
-+
-+" Lex
-+au BufNewFile,BufRead *.lex,*.l			setf lex
-+
-+" Libao
-+au BufNewFile,BufRead /etc/libao.conf,*/.libao	setf libao
-+
-+" Libsensors
-+au BufNewFile,BufRead /etc/sensors.conf		setf sensors
-+
-+" LFTP
-+au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc	setf lftp
-+
-+" Lifelines (or Lex for C++!)
-+au BufNewFile,BufRead *.ll			setf lifelines
-+
-+" Lilo: Linux loader
-+au BufNewFile,BufRead lilo.conf*		call s:StarSetf('lilo')
-+
-+" Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp)
-+if has("fname_case")
-+  au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,*.L,.emacs,.sawfishrc setf lisp
-+else
-+  au BufNewFile,BufRead *.lsp,*.lisp,*.el,*.cl,*.jl,.emacs,.sawfishrc setf lisp
-+endif
-+
-+" SBCL implementation of Common Lisp
-+au BufNewFile,BufRead sbclrc,.sbclrc		setf lisp
-+
-+" Liquid
-+au BufNewFile,BufRead *.liquid			setf liquid
-+
-+" Lite
-+au BufNewFile,BufRead *.lite,*.lt		setf lite
-+
-+" LiteStep RC files
-+au BufNewFile,BufRead */LiteStep/*/*.rc		setf litestep
-+
-+" Login access
-+au BufNewFile,BufRead /etc/login.access		setf loginaccess
-+
-+" Login defs
-+au BufNewFile,BufRead /etc/login.defs		setf logindefs
-+
-+" Logtalk
-+au BufNewFile,BufRead *.lgt			setf logtalk
-+
-+" LOTOS
-+au BufNewFile,BufRead *.lot,*.lotos		setf lotos
-+
-+" Lout (also: *.lt)
-+au BufNewFile,BufRead *.lou,*.lout		setf lout
-+
-+" Lua
-+au BufNewFile,BufRead *.lua			setf lua
-+
-+" Linden Scripting Language (Second Life)
-+au BufNewFile,BufRead *.lsl			setf lsl
-+
-+" Lynx style file (or LotusScript!)
-+au BufNewFile,BufRead *.lss			setf lss
-+
-+" M4
-+au BufNewFile,BufRead *.m4
-+	\ if expand("<afile>") !~? 'html.m4$\|fvwm2rc' | setf m4 | endif
-+
-+" MaGic Point
-+au BufNewFile,BufRead *.mgp			setf mgp
-+
-+" Mail (for Elm, trn, mutt, muttng, rn, slrn)
-+au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
-+
-+" Mail aliases
-+au BufNewFile,BufRead /etc/mail/aliases,/etc/aliases	setf mailaliases
-+
-+" Mailcap configuration file
-+au BufNewFile,BufRead .mailcap,mailcap		setf mailcap
-+
-+" Makefile
-+au BufNewFile,BufRead *[mM]akefile,*.mk,*.mak,*.dsp setf make
-+
-+" MakeIndex
-+au BufNewFile,BufRead *.ist,*.mst		setf ist
-+
-+" Manpage
-+au BufNewFile,BufRead *.man			setf man
-+
-+" Man config
-+au BufNewFile,BufRead /etc/man.conf,man.config	setf manconf
-+
-+" Maple V
-+au BufNewFile,BufRead *.mv,*.mpl,*.mws		setf maple
-+
-+" Map (UMN mapserver config file)
-+au BufNewFile,BufRead *.map			setf map
-+
-+" Markdown
-+au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,README.md  setf markdown
-+
-+" Mason
-+au BufNewFile,BufRead *.mason,*.mhtml		setf mason
-+
-+" Matlab or Objective C
-+au BufNewFile,BufRead *.m			call s:FTm()
-+
-+func! s:FTm()
-+  let n = 1
-+  while n < 10
-+    let line = getline(n)
-+    if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\|//\)'
-+      setf objc
-+      return
-+    endif
-+    if line =~ '^\s*%'
-+      setf matlab
-+      return
-+    endif
-+    if line =~ '^\s*(\*'
-+      setf mma
-+      return
-+    endif
-+    let n = n + 1
-+  endwhile
-+  if exists("g:filetype_m")
-+    exe "setf " . g:filetype_m
-+  else
-+    setf matlab
-+  endif
-+endfunc
-+
-+" Mathematica notebook
-+au BufNewFile,BufRead *.nb			setf mma
-+
-+" Maya Extension Language
-+au BufNewFile,BufRead *.mel			setf mel
-+
-+" Mercurial config (looks like generic config file)
-+au BufNewFile,BufRead *.hgrc,*hgrc		setf cfg
-+
-+" Messages
-+au BufNewFile,BufRead /var/log/messages,/var/log/messages.*[0-9]  setf messages
-+
-+" Metafont
-+au BufNewFile,BufRead *.mf			setf mf
-+
-+" MetaPost
-+au BufNewFile,BufRead *.mp			setf mp
-+
-+" MGL
-+au BufNewFile,BufRead *.mgl			setf mgl
-+
-+" MMIX or VMS makefile
-+au BufNewFile,BufRead *.mms			call s:FTmms()
-+
-+" Symbian meta-makefile definition (MMP)
-+au BufNewFile,BufRead *.mmp			setf mmp
-+
-+func! s:FTmms()
-+  let n = 1
-+  while n < 10
-+    let line = getline(n)
-+    if line =~ '^\s*\(%\|//\)' || line =~ '^\*'
-+      setf mmix
-+      return
-+    endif
-+    if line =~ '^\s*#'
-+      setf make
-+      return
-+    endif
-+    let n = n + 1
-+  endwhile
-+  setf mmix
-+endfunc
-+
-+
-+" Modsim III (or LambdaProlog)
-+au BufNewFile,BufRead *.mod
-+	\ if getline(1) =~ '\<module\>' |
-+	\   setf lprolog |
-+	\ else |
-+	\   setf modsim3 |
-+	\ endif
-+
-+" Modula 2
-+au BufNewFile,BufRead *.m2,*.DEF,*.MOD,*.md,*.mi setf modula2
-+
-+" Modula 3 (.m3, .i3, .mg, .ig)
-+au BufNewFile,BufRead *.[mi][3g]		setf modula3
-+
-+" Monk
-+au BufNewFile,BufRead *.isc,*.monk,*.ssc,*.tsc	setf monk
-+
-+" MOO
-+au BufNewFile,BufRead *.moo			setf moo
-+
-+" Modconf
-+au BufNewFile,BufRead /etc/modules.conf,/etc/conf.modules	setf modconf
-+au BufNewFile,BufRead /etc/modutils/*
-+	\ if executable(expand("<afile>")) != 1
-+	\|  call s:StarSetf('modconf')
-+	\|endif
-+
-+" Mplayer config
-+au BufNewFile,BufRead mplayer.conf,*/.mplayer/config	setf mplayerconf
-+
-+" Moterola S record
-+au BufNewFile,BufRead *.s19,*.s28,*.s37		setf srec
-+
-+" Mrxvtrc
-+au BufNewFile,BufRead mrxvtrc,.mrxvtrc		setf mrxvtrc
-+
-+" Msql
-+au BufNewFile,BufRead *.msql			setf msql
-+
-+" Mysql
-+au BufNewFile,BufRead *.mysql			setf mysql
-+
-+" M$ Resource files
-+au BufNewFile,BufRead *.rc			setf rc
-+
-+" MuPAD source
-+au BufRead,BufNewFile *.mu			setf mupad
-+
-+" Mush
-+au BufNewFile,BufRead *.mush			setf mush
-+
-+" Mutt setup file (also for Muttng)
-+au BufNewFile,BufRead Mutt{ng,}rc		setf muttrc
-+
-+" Nano
-+au BufNewFile,BufRead /etc/nanorc,.nanorc	setf nanorc
-+
-+" Nastran input/DMAP
-+"au BufNewFile,BufRead *.dat			setf nastran
-+
-+" Natural
-+au BufNewFile,BufRead *.NS[ACGLMNPS]		setf natural
-+
-+" Netrc
-+au BufNewFile,BufRead .netrc			setf netrc
-+
-+" Novell netware batch files
-+au BufNewFile,BufRead *.ncf			setf ncf
-+
-+" Nroff/Troff (*.ms and *.t are checked below)
-+au BufNewFile,BufRead *.me
-+	\ if expand("<afile>") != "read.me" && expand("<afile>") != "click.me" |
-+	\   setf nroff |
-+	\ endif
-+au BufNewFile,BufRead *.tr,*.nr,*.roff,*.tmac,*.mom	setf nroff
-+au BufNewFile,BufRead *.[1-9]			call s:FTnroff()
-+
-+" This function checks if one of the first five lines start with a dot.  In
-+" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
-+func! s:FTnroff()
-+  if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
-+    setf nroff
-+    return 1
-+  endif
-+  return 0
-+endfunc
-+
-+" Nroff or Objective C++
-+au BufNewFile,BufRead *.mm			call s:FTmm()
-+
-+func! s:FTmm()
-+  let n = 1
-+  while n < 10
-+    let line = getline(n)
-+    if line =~ '^\s*\(#\s*\(include\|import\)\>\|/\*\)'
-+      setf objcpp
-+      return
-+    endif
-+    let n = n + 1
-+  endwhile
-+  setf nroff
-+endfunc
-+
-+" Not Quite C
-+au BufNewFile,BufRead *.nqc			setf nqc
-+
-+" NSIS
-+au BufNewFile,BufRead *.nsi			setf nsis
-+
-+" OCAML
-+au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly	setf ocaml
-+
-+" Occam
-+au BufNewFile,BufRead *.occ			setf occam
-+
-+" Omnimark
-+au BufNewFile,BufRead *.xom,*.xin		setf omnimark
-+
-+" OpenROAD
-+au BufNewFile,BufRead *.or			setf openroad
-+
-+" OPL
-+au BufNewFile,BufRead *.[Oo][Pp][Ll]		setf opl
-+
-+" Oracle config file
-+au BufNewFile,BufRead *.ora			setf ora
-+
-+" Packet filter conf
-+au BufNewFile,BufRead pf.conf			setf pf
-+
-+" Pam conf
-+au BufNewFile,BufRead /etc/pam.conf		setf pamconf
-+
-+" PApp
-+au BufNewFile,BufRead *.papp,*.pxml,*.pxsl	setf papp
-+
-+" Password file
-+au BufNewFile,BufRead /etc/passwd,/etc/passwd-,/etc/passwd.edit,/etc/shadow,/etc/shadow-,/var/backups/passwd.bak,/var/backups/shadow.bak setf passwd
-+
-+" Pascal (also *.p)
-+au BufNewFile,BufRead *.pas			setf pascal
-+
-+" Delphi project file
-+au BufNewFile,BufRead *.dpr			setf pascal
-+
-+" PDF
-+au BufNewFile,BufRead *.pdf			setf pdf
-+
-+" Perl
-+if has("fname_case")
-+  au BufNewFile,BufRead *.pl,*.PL		call s:FTpl()
-+else
-+  au BufNewFile,BufRead *.pl			call s:FTpl()
-+endif
-+au BufNewFile,BufRead *.plx,*.al		setf perl
-+au BufNewFile,BufRead *.p6,*.pm6		setf perl6
-+
-+func! s:FTpl()
-+  if exists("g:filetype_pl")
-+    exe "setf " . g:filetype_pl
-+  else
-+    " recognize Prolog by specific text in the first non-empty line
-+    " require a blank after the '%' because Perl uses "%list" and "%translate"
-+    let l = getline(nextnonblank(1))
-+    if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
-+      setf prolog
-+    else
-+      setf perl
-+    endif
-+  endif
-+endfunc
-+
-+" Perl, XPM or XPM2
-+au BufNewFile,BufRead *.pm
-+	\ if getline(1) =~ "XPM2" |
-+	\   setf xpm2 |
-+	\ elseif getline(1) =~ "XPM" |
-+	\   setf xpm |
-+	\ else |
-+	\   setf perl |
-+	\ endif
-+
-+" Perl POD
-+au BufNewFile,BufRead *.pod			setf pod
-+
-+" Php, php3, php4, etc.
-+" Also Phtml (was used for PHP 2 in the past)
-+" Also .ctp for Cake template file
-+au BufNewFile,BufRead *.php,*.php\d,*.phtml,*.ctp	setf php
-+
-+" Pike
-+au BufNewFile,BufRead *.pike,*.lpc,*.ulpc,*.pmod setf pike
-+
-+" Pinfo config
-+au BufNewFile,BufRead */etc/pinforc,*/.pinforc	setf pinfo
-+
-+" Palm Resource compiler
-+au BufNewFile,BufRead *.rcp			setf pilrc
-+
-+" Pine config
-+au BufNewFile,BufRead .pinerc,pinerc,.pinercex,pinercex		setf pine
-+
-+" PL/M (also: *.inp)
-+au BufNewFile,BufRead *.plm,*.p36,*.pac		setf plm
-+
-+" PL/SQL
-+au BufNewFile,BufRead *.pls,*.plsql		setf plsql
-+
-+" PLP
-+au BufNewFile,BufRead *.plp			setf plp
-+
-+" PO and PO template (GNU gettext)
-+au BufNewFile,BufRead *.po,*.pot		setf po
-+
-+" Postfix main config
-+au BufNewFile,BufRead main.cf			setf pfmain
-+
-+" PostScript (+ font files, encapsulated PostScript, Adobe Illustrator)
-+au BufNewFile,BufRead *.ps,*.pfa,*.afm,*.eps,*.epsf,*.epsi,*.ai	  setf postscr
-+
-+" PostScript Printer Description
-+au BufNewFile,BufRead *.ppd			setf ppd
-+
-+" Povray
-+au BufNewFile,BufRead *.pov			setf pov
-+
-+" Povray configuration
-+au BufNewFile,BufRead .povrayrc			setf povini
-+
-+" Povray, PHP or assembly
-+au BufNewFile,BufRead *.inc			call s:FTinc()
-+
-+func! s:FTinc()
-+  if exists("g:filetype_inc")
-+    exe "setf " . g:filetype_inc
-+  else
-+    let lines = getline(1).getline(2).getline(3)
-+    if lines =~? "perlscript"
-+      setf aspperl
-+    elseif lines =~ "<%"
-+      setf aspvbs
-+    elseif lines =~ "<?"
-+      setf php
-+    else
-+      call s:FTasmsyntax()
-+      if exists("b:asmsyntax")
-+	exe "setf " . fnameescape(b:asmsyntax)
-+      else
-+	setf pov
-+      endif
-+    endif
-+  endif
-+endfunc
-+
-+" Printcap and Termcap
-+au BufNewFile,BufRead *printcap
-+	\ let b:ptcap_type = "print" | setf ptcap
-+au BufNewFile,BufRead *termcap
-+	\ let b:ptcap_type = "term" | setf ptcap
-+
-+" PCCTS / ANTRL
-+"au BufNewFile,BufRead *.g			setf antrl
-+au BufNewFile,BufRead *.g			setf pccts
-+
-+" PPWizard
-+au BufNewFile,BufRead *.it,*.ih			setf ppwiz
-+
-+" Obj 3D file format
-+" TODO: is there a way to avoid MS-Windows Object files?
-+au BufNewFile,BufRead *.obj         		setf obj
-+
-+" Oracle Pro*C/C++
-+au BufNewFile,BufRead *.pc			setf proc
-+
-+" Privoxy actions file
-+au BufNewFile,BufRead *.action			setf privoxy
-+
-+" Procmail
-+au BufNewFile,BufRead .procmail,.procmailrc	setf procmail
-+
-+" Progress or CWEB
-+au BufNewFile,BufRead *.w			call s:FTprogress_cweb()
-+
-+func! s:FTprogress_cweb()
-+  if exists("g:filetype_w")
-+    exe "setf " . g:filetype_w
-+    return
-+  endif
-+  if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
-+    setf progress
-+  else
-+    setf cweb
-+  endif
-+endfunc
-+
-+" Progress or assembly
-+au BufNewFile,BufRead *.i			call s:FTprogress_asm()
-+
-+func! s:FTprogress_asm()
-+  if exists("g:filetype_i")
-+    exe "setf " . g:filetype_i
-+    return
-+  endif
-+  " This function checks for an assembly comment the first ten lines.
-+  " If not found, assume Progress.
-+  let lnum = 1
-+  while lnum <= 10 && lnum < line('$')
-+    let line = getline(lnum)
-+    if line =~ '^\s*;' || line =~ '^\*'
-+      call s:FTasm()
-+      return
-+    elseif line !~ '^\s*$' || line =~ '^/\*'
-+      " Not an empty line: Doesn't look like valid assembly code.
-+      " Or it looks like a Progress /* comment
-+      break
-+    endif
-+    let lnum = lnum + 1
-+  endw
-+  setf progress
-+endfunc
-+
-+" Progress or Pascal
-+au BufNewFile,BufRead *.p			call s:FTprogress_pascal()
-+
-+func! s:FTprogress_pascal()
-+  if exists("g:filetype_p")
-+    exe "setf " . g:filetype_p
-+    return
-+  endif
-+  " This function checks for valid Pascal syntax in the first ten lines.
-+  " Look for either an opening comment or a program start.
-+  " If not found, assume Progress.
-+  let lnum = 1
-+  while lnum <= 10 && lnum < line('$')
-+    let line = getline(lnum)
-+    if line =~ '^\s*\(program\|unit\|procedure\|function\|const\|type\|var\)\>'
-+	\ || line =~ '^\s*{' || line =~ '^\s*(\*'
-+      setf pascal
-+      return
-+    elseif line !~ '^\s*$' || line =~ '^/\*'
-+      " Not an empty line: Doesn't look like valid Pascal code.
-+      " Or it looks like a Progress /* comment
-+      break
-+    endif
-+    let lnum = lnum + 1
-+  endw
-+  setf progress
-+endfunc
-+
-+
-+" Software Distributor Product Specification File (POSIX 1387.2-1995)
-+au BufNewFile,BufRead *.psf			setf psf
-+au BufNewFile,BufRead INDEX,INFO
-+	\ if getline(1) =~ '^\s*\(distribution\|installed_software\|root\|bundle\|product\)\s*$' |
-+	\   setf psf |
-+	\ endif
-+
-+" Prolog
-+au BufNewFile,BufRead *.pdb			setf prolog
-+
-+" Promela
-+au BufNewFile,BufRead *.pml			setf promela
-+
-+" Protocols
-+au BufNewFile,BufRead /etc/protocols		setf protocols
-+
-+" Pyrex
-+au BufNewFile,BufRead *.pyx,*.pxd		setf pyrex
-+
-+" Python
-+au BufNewFile,BufRead *.py,*.pyw		setf python
-+
-+" Quixote (Python-based web framework)
-+au BufNewFile,BufRead *.ptl			setf python
-+
-+" Radiance
-+au BufNewFile,BufRead *.rad,*.mat		setf radiance
-+
-+" Ratpoison config/command files
-+au BufNewFile,BufRead .ratpoisonrc,ratpoisonrc	setf ratpoison
-+
-+" RCS file
-+au BufNewFile,BufRead *\,v			setf rcs
-+
-+" Readline
-+au BufNewFile,BufRead .inputrc,inputrc		setf readline
-+
-+" Registry for MS-Windows
-+au BufNewFile,BufRead *.reg
-+	\ if getline(1) =~? '^REGEDIT[0-9]*\s*$\|^Windows Registry Editor Version \d*\.\d*\s*$' | setf registry | endif
-+
-+" Renderman Interface Bytestream
-+au BufNewFile,BufRead *.rib			setf rib
-+
-+" Rexx
-+au BufNewFile,BufRead *.rexx,*.rex,*.jrexx,*.rxj,*.orx	setf rexx
-+
-+" R (Splus)
-+if has("fname_case")
-+  au BufNewFile,BufRead *.s,*.S			setf r
-+else
-+  au BufNewFile,BufRead *.s			setf r
-+endif
-+
-+" R Help file
-+if has("fname_case")
-+  au BufNewFile,BufRead *.rd,*.Rd		setf rhelp
-+else
-+  au BufNewFile,BufRead *.rd			setf rhelp
-+endif
-+
-+" R noweb file
-+if has("fname_case")
-+  au BufNewFile,BufRead *.Rnw,*.rnw,*.Snw,*.snw		setf rnoweb
-+else
-+  au BufNewFile,BufRead *.rnw,*.snw			setf rnoweb
-+endif
-+
-+" Rexx, Rebol or R
-+au BufNewFile,BufRead *.r,*.R			call s:FTr()
-+
-+func! s:FTr()
-+  let max = line("$") > 50 ? 50 : line("$")
-+
-+  for n in range(1, max)
-+    " Rebol is easy to recognize, check for that first
-+    if getline(n) =~? '\<REBOL\>'
-+      setf rebol
-+      return
-+    endif
-+  endfor
-+
-+  for n in range(1, max)
-+    " R has # comments
-+    if getline(n) =~ '^\s*#'
-+      setf r
-+      return
-+    endif
-+    " Rexx has /* comments */
-+    if getline(n) =~ '^\s*/\*'
-+      setf rexx
-+      return
-+    endif
-+  endfor
-+
-+  " Nothing recognized, assume Rexx
-+  setf rexx
-+endfunc
-+
-+" Remind
-+au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
-+au BufNewFile,BufRead *.remind,*.rem		setf remind
-+
-+" Resolv.conf
-+au BufNewFile,BufRead resolv.conf		setf resolv
-+
-+" Relax NG Compact
-+au BufNewFile,BufRead *.rnc			setf rnc
-+
-+" RPL/2
-+au BufNewFile,BufRead *.rpl			setf rpl
-+
-+" Robots.txt
-+au BufNewFile,BufRead robots.txt		setf robots
-+
-+" Rpcgen
-+au BufNewFile,BufRead *.x			setf rpcgen
-+
-+" reStructuredText Documentation Format
-+au BufNewFile,BufRead *.rst			setf rst
-+
-+" RTF
-+au BufNewFile,BufRead *.rtf			setf rtf
-+
-+" Interactive Ruby shell
-+au BufNewFile,BufRead .irbrc,irbrc		setf ruby
-+
-+" Ruby
-+au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec	setf ruby
-+
-+" Ruby on Rails
-+au BufNewFile,BufRead *.builder,*.rxml,*.rjs	setf ruby
-+
-+" Rantfile and Rakefile is like Ruby
-+au BufNewFile,BufRead [rR]antfile,*.rant,[rR]akefile,*.rake	setf ruby
-+
-+" S-lang (or shader language, or SmallLisp)
-+au BufNewFile,BufRead *.sl			setf slang
-+
-+" Samba config
-+au BufNewFile,BufRead smb.conf			setf samba
-+
-+" SAS script
-+au BufNewFile,BufRead *.sas			setf sas
-+
-+" Sass
-+au BufNewFile,BufRead *.sass			setf sass
-+
-+" Sather
-+au BufNewFile,BufRead *.sa			setf sather
-+
-+" Scilab
-+au BufNewFile,BufRead *.sci,*.sce		setf scilab
-+
-+" SCSS
-+au BufNewFile,BufRead *.scss 			setf scss
-+
-+" SD: Streaming Descriptors
-+au BufNewFile,BufRead *.sd			setf sd
-+
-+" SDL
-+au BufNewFile,BufRead *.sdl,*.pr		setf sdl
-+
-+" sed
-+au BufNewFile,BufRead *.sed			setf sed
-+
-+" Sieve (RFC 3028)
-+au BufNewFile,BufRead *.siv			setf sieve
-+
-+" Sendmail
-+au BufNewFile,BufRead sendmail.cf		setf sm
-+
-+" Sendmail .mc files are actually m4.  Could also be MS Message text file.
-+au BufNewFile,BufRead *.mc			call s:McSetf()
-+
-+func! s:McSetf()
-+  " Rely on the file to start with a comment.
-+  " MS message text files use ';', Sendmail files use '#' or 'dnl'
-+  for lnum in range(1, min([line("$"), 20]))
-+    let line = getline(lnum)
-+    if line =~ '^\s*\(#\|dnl\)'
-+      setf m4  " Sendmail .mc file
-+      return
-+    elseif line =~ '^\s*;'
-+      setf msmessages  " MS Message text file
-+      return
-+    endif
-+  endfor
-+  setf m4  " Default: Sendmail .mc file
-+endfunc
-+
-+" Services
-+au BufNewFile,BufRead /etc/services		setf services
-+
-+" Service Location config
-+au BufNewFile,BufRead /etc/slp.conf		setf slpconf
-+
-+" Service Location registration
-+au BufNewFile,BufRead /etc/slp.reg		setf slpreg
-+
-+" Service Location SPI
-+au BufNewFile,BufRead /etc/slp.spi		setf slpspi
-+
-+" Setserial config
-+au BufNewFile,BufRead /etc/serial.conf		setf setserial
-+
-+" SGML
-+au BufNewFile,BufRead *.sgm,*.sgml
-+	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' |
-+	\   setf sgmllnx |
-+	\ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
-+	\   let b:docbk_type="sgml" |
-+	\   setf docbk |
-+	\ else |
-+	\   setf sgml |
-+	\ endif
-+
-+" SGMLDECL
-+au BufNewFile,BufRead *.decl,*.dcl,*.dec
-+	\ if getline(1).getline(2).getline(3) =~? '^<!SGML' |
-+	\    setf sgmldecl |
-+	\ endif
-+
-+" SGML catalog file
-+au BufNewFile,BufRead catalog			setf catalog
-+au BufNewFile,BufRead sgml.catalog*		call s:StarSetf('catalog')
-+
-+" Shell scripts (sh, ksh, bash, bash2, csh); Allow .profile_foo etc.
-+" Gentoo ebuilds are actually bash scripts
-+au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash")
-+au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh")
-+au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
-+
-+" Also called from scripts.vim.
-+func! SetFileTypeSH(name)
-+  if expand("<amatch>") =~ g:ft_ignore_pat
-+    return
-+  endif
-+  if a:name =~ '\<csh\>'
-+    " Some .sh scripts contain #!/bin/csh.
-+    call SetFileTypeShell("csh")
-+    return
-+  elseif a:name =~ '\<tcsh\>'
-+    " Some .sh scripts contain #!/bin/tcsh.
-+    call SetFileTypeShell("tcsh")
-+    return
-+  elseif a:name =~ '\<ksh\>'
-+    let b:is_kornshell = 1
-+    if exists("b:is_bash")
-+      unlet b:is_bash
-+    endif
-+    if exists("b:is_sh")
-+      unlet b:is_sh
-+    endif
-+  elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
-+    let b:is_bash = 1
-+    if exists("b:is_kornshell")
-+      unlet b:is_kornshell
-+    endif
-+    if exists("b:is_sh")
-+      unlet b:is_sh
-+    endif
-+  elseif a:name =~ '\<sh\>'
-+    let b:is_sh = 1
-+    if exists("b:is_kornshell")
-+      unlet b:is_kornshell
-+    endif
-+    if exists("b:is_bash")
-+      unlet b:is_bash
-+    endif
-+  endif
-+  call SetFileTypeShell("sh")
-+endfunc
-+
-+" For shell-like file types, check for an "exec" command hidden in a comment,
-+" as used for Tcl.
-+" Also called from scripts.vim, thus can't be local to this script.
-+func! SetFileTypeShell(name)
-+  if expand("<amatch>") =~ g:ft_ignore_pat
-+    return
-+  endif
-+  let l = 2
-+  while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)'
-+    " Skip empty and comment lines.
-+    let l = l + 1
-+  endwhile
-+  if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$'
-+    " Found an "exec" line after a comment with continuation
-+    let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '')
-+    if n =~ '\<tclsh\|\<wish'
-+      setf tcl
-+      return
-+    endif
-+  endif
-+  exe "setf " . a:name
-+endfunc
-+
-+" tcsh scripts
-+au BufNewFile,BufRead .tcshrc*,*.tcsh,tcsh.tcshrc,tcsh.login	call SetFileTypeShell("tcsh")
-+
-+" csh scripts, but might also be tcsh scripts (on some systems csh is tcsh)
-+au BufNewFile,BufRead .login*,.cshrc*,csh.cshrc,csh.login,csh.logout,*.csh,.alias  call s:CSH()
-+
-+func! s:CSH()
-+  if exists("g:filetype_csh")
-+    call SetFileTypeShell(g:filetype_csh)
-+  elseif &shell =~ "tcsh"
-+    call SetFileTypeShell("tcsh")
-+  else
-+    call SetFileTypeShell("csh")
-+  endif
-+endfunc
-+
-+" Z-Shell script
-+au BufNewFile,BufRead .zprofile,/etc/zprofile,.zfbfmarks  setf zsh
-+au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump*  call s:StarSetf('zsh')
-+au BufNewFile,BufRead *.zsh 			setf zsh
-+
-+" Scheme
-+au BufNewFile,BufRead *.scm,*.ss		setf scheme
-+
-+" Screen RC
-+au BufNewFile,BufRead .screenrc,screenrc	setf screen
-+
-+" Simula
-+au BufNewFile,BufRead *.sim			setf simula
-+
-+" SINDA
-+au BufNewFile,BufRead *.sin,*.s85		setf sinda
-+
-+" SiSU
-+au BufNewFile,BufRead *.sst,*.ssm,*.ssi,*.-sst,*._sst setf sisu
-+au BufNewFile,BufRead *.sst.meta,*.-sst.meta,*._sst.meta setf sisu
-+
-+" SKILL
-+au BufNewFile,BufRead *.il,*.ils,*.cdf		setf skill
-+
-+" SLRN
-+au BufNewFile,BufRead .slrnrc			setf slrnrc
-+au BufNewFile,BufRead *.score			setf slrnsc
-+
-+" Smalltalk (and TeX)
-+au BufNewFile,BufRead *.st			setf st
-+au BufNewFile,BufRead *.cls
-+	\ if getline(1) =~ '^%' |
-+	\  setf tex |
-+	\ else |
-+	\  setf st |
-+	\ endif
-+
-+" Smarty templates
-+au BufNewFile,BufRead *.tpl			setf smarty
-+
-+" SMIL or XML
-+au BufNewFile,BufRead *.smil
-+	\ if getline(1) =~ '<?\s*xml.*?>' |
-+	\   setf xml |
-+	\ else |
-+	\   setf smil |
-+	\ endif
-+
-+" SMIL or SNMP MIB file
-+au BufNewFile,BufRead *.smi
-+	\ if getline(1) =~ '\<smil\>' |
-+	\   setf smil |
-+	\ else |
-+	\   setf mib |
-+	\ endif
-+
-+" SMITH
-+au BufNewFile,BufRead *.smt,*.smith		setf smith
-+
-+" Snobol4 and spitbol
-+au BufNewFile,BufRead *.sno,*.spt		setf snobol4
-+
-+" SNMP MIB files
-+au BufNewFile,BufRead *.mib,*.my		setf mib
-+
-+" Snort Configuration
-+au BufNewFile,BufRead *.hog,snort.conf,vision.conf	setf hog
-+au BufNewFile,BufRead *.rules			call s:FTRules()
-+
-+let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
-+func! s:FTRules()
-+  let path = expand('<amatch>:p')
-+  if path =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$'
-+    setf udevrules
-+    return
-+  endif
-+  if path =~ '^/etc/ufw/'
-+    setf conf  " Better than hog
-+    return
-+  endif
-+  try
-+    let config_lines = readfile('/etc/udev/udev.conf')
-+  catch /^Vim\%((\a\+)\)\=:E484/
-+    setf hog
-+    return
-+  endtry
-+  let dir = expand('<amatch>:p:h')
-+  for line in config_lines
-+    if line =~ s:ft_rules_udev_rules_pattern
-+      let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "")
-+      if dir == udev_rules
-+        setf udevrules
-+      endif
-+      break
-+    endif
-+  endfor
-+  setf hog
-+endfunc
-+
-+
-+" Spec (Linux RPM)
-+au BufNewFile,BufRead *.spec			setf spec
-+
-+" Speedup (AspenTech plant simulator)
-+au BufNewFile,BufRead *.speedup,*.spdata,*.spd	setf spup
-+
-+" Slice
-+au BufNewFile,BufRead *.ice			setf slice
-+
-+" Spice
-+au BufNewFile,BufRead *.sp,*.spice		setf spice
-+
-+" Spyce
-+au BufNewFile,BufRead *.spy,*.spi		setf spyce
-+
-+" Squid
-+au BufNewFile,BufRead squid.conf		setf squid
-+
-+" SQL for Oracle Designer
-+au BufNewFile,BufRead *.tyb,*.typ,*.tyc,*.pkb,*.pks	setf sql
-+
-+" SQL
-+au BufNewFile,BufRead *.sql			call s:SQL()
-+
-+func! s:SQL()
-+  if exists("g:filetype_sql")
-+    exe "setf " . g:filetype_sql
-+  else
-+    setf sql
-+  endif
-+endfunc
-+
-+" SQLJ
-+au BufNewFile,BufRead *.sqlj			setf sqlj
-+
-+" SQR
-+au BufNewFile,BufRead *.sqr,*.sqi		setf sqr
-+
-+" OpenSSH configuration
-+au BufNewFile,BufRead ssh_config,*/.ssh/config	setf sshconfig
-+
-+" OpenSSH server configuration
-+au BufNewFile,BufRead sshd_config		setf sshdconfig
-+
-+" Stata
-+au BufNewFile,BufRead *.ado,*.class,*.do,*.imata,*.mata   setf stata
-+
-+" SMCL
-+au BufNewFile,BufRead *.hlp,*.ihlp,*.smcl	setf smcl
-+
-+" Stored Procedures
-+au BufNewFile,BufRead *.stp			setf stp
-+
-+" Standard ML
-+au BufNewFile,BufRead *.sml			setf sml
-+
-+" Sratus VOS command macro
-+au BufNewFile,BufRead *.cm			setf voscm
-+
-+" Sysctl
-+au BufNewFile,BufRead /etc/sysctl.conf		setf sysctl
-+
-+" Synopsys Design Constraints
-+au BufNewFile,BufRead *.sdc			setf sdc
-+
-+" Sudoers
-+au BufNewFile,BufRead /etc/sudoers,sudoers.tmp	setf sudoers
-+
-+" SVG (Scalable Vector Graphics)
-+au BufNewFile,BufRead *.svg			setf svg
-+
-+" If the file has an extension of 't' and is in a directory 't' then it is
-+" almost certainly a Perl test file.
-+" If the first line starts with '#' and contains 'perl' it's probably a Perl
-+" file.
-+" (Slow test) If a file contains a 'use' statement then it is almost certainly
-+" a Perl file.
-+func! s:FTperl()
-+  if expand("%:e") == 't' && expand("%:p:h:t") == 't'
-+    setf perl
-+    return 1
-+  endif
-+  if getline(1)[0] == '#' && getline(1) =~ 'perl'
-+    setf perl
-+    return 1
-+  endif
-+  if search('^use\s\s*\k', 'nc', 30)
-+    setf perl
-+    return 1
-+  endif
-+  return 0
-+endfunc
-+
-+" Tads (or Nroff or Perl test file)
-+au BufNewFile,BufRead *.t
-+	\ if !s:FTnroff() && !s:FTperl() | setf tads | endif
-+
-+" Tags
-+au BufNewFile,BufRead tags			setf tags
-+
-+" TAK
-+au BufNewFile,BufRead *.tak			setf tak
-+
-+" Task
-+au BufRead,BufNewFile {pending,completed,undo}.data  setf taskdata
-+au BufRead,BufNewFile *.task                    setf taskedit
-+
-+" Tcl (JACL too)
-+au BufNewFile,BufRead *.tcl,*.tk,*.itcl,*.itk,*.jacl	setf tcl
-+
-+" TealInfo
-+au BufNewFile,BufRead *.tli			setf tli
-+
-+" Telix Salt
-+au BufNewFile,BufRead *.slt			setf tsalt
-+
-+" Terminfo
-+au BufNewFile,BufRead *.ti			setf terminfo
-+
-+" TeX
-+au BufNewFile,BufRead *.latex,*.sty,*.dtx,*.ltx,*.bbl	setf tex
-+au BufNewFile,BufRead *.tex			call s:FTtex()
-+
-+" Choose context, plaintex, or tex (LaTeX) based on these rules:
-+" 1. Check the first line of the file for "%&<format>".
-+" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
-+" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc.
-+func! s:FTtex()
-+  let firstline = getline(1)
-+  if firstline =~ '^%&\s*\a\+'
-+    let format = tolower(matchstr(firstline, '\a\+'))
-+    let format = substitute(format, 'pdf', '', '')
-+    if format == 'tex'
-+      let format = 'plain'
-+    endif
-+  else
-+    " Default value, may be changed later:
-+    let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain'
-+    " Save position, go to the top of the file, find first non-comment line.
-+    let save_cursor = getpos('.')
-+    call cursor(1,1)
-+    let firstNC = search('^\s*[^[:space:]%]', 'c', 1000)
-+    if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword.
-+      let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>'
-+      let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>'
-+      let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)',
-+			      \ 'cnp', firstNC + 1000)
-+      if kwline == 1	" lpat matched
-+	let format = 'latex'
-+      elseif kwline == 2	" cpat matched
-+	let format = 'context'
-+      endif		" If neither matched, keep default set above.
-+      " let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000)
-+      " let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000)
-+      " if cline > 0
-+      "   let format = 'context'
-+      " endif
-+      " if lline > 0 && (cline == 0 || cline > lline)
-+      "   let format = 'tex'
-+      " endif
-+    endif " firstNC
-+    call setpos('.', save_cursor)
-+  endif " firstline =~ '^%&\s*\a\+'
-+
-+  " Translation from formats to file types.  TODO:  add AMSTeX, RevTex, others?
-+  if format == 'plain'
-+    setf plaintex
-+  elseif format == 'context'
-+    setf context
-+  else " probably LaTeX
-+    setf tex
-+  endif
-+  return
-+endfunc
-+
-+" ConTeXt
-+au BufNewFile,BufRead tex/context/*/*.tex,*.mkii,*.mkiv   setf context
-+
-+" Texinfo
-+au BufNewFile,BufRead *.texinfo,*.texi,*.txi	setf texinfo
-+
-+" TeX configuration
-+au BufNewFile,BufRead texmf.cnf			setf texmf
-+
-+" Tidy config
-+au BufNewFile,BufRead .tidyrc,tidyrc		setf tidy
-+
-+" TF mud client
-+au BufNewFile,BufRead *.tf,.tfrc,tfrc		setf tf
-+
-+" TPP - Text Presentation Program
-+au BufNewFile,BufReadPost *.tpp			setf tpp
-+
-+" Trustees
-+au BufNewFile,BufRead trustees.conf		setf trustees
-+
-+" TSS - Geometry
-+au BufNewFile,BufReadPost *.tssgm		setf tssgm
-+
-+" TSS - Optics
-+au BufNewFile,BufReadPost *.tssop		setf tssop
-+
-+" TSS - Command Line (temporary)
-+au BufNewFile,BufReadPost *.tsscl		setf tsscl
-+
-+" Motif UIT/UIL files
-+au BufNewFile,BufRead *.uit,*.uil		setf uil
-+
-+" Udev conf
-+au BufNewFile,BufRead /etc/udev/udev.conf	setf udevconf
-+
-+" Udev permissions
-+au BufNewFile,BufRead /etc/udev/permissions.d/*.permissions setf udevperm
-+"
-+" Udev symlinks config
-+au BufNewFile,BufRead /etc/udev/cdsymlinks.conf	setf sh
-+
-+" UnrealScript
-+au BufNewFile,BufRead *.uc			setf uc
-+
-+" Updatedb
-+au BufNewFile,BufRead /etc/updatedb.conf	setf updatedb
-+
-+" Vera
-+au BufNewFile,BufRead *.vr,*.vri,*.vrh		setf vera
-+
-+" Verilog HDL
-+au BufNewFile,BufRead *.v			setf verilog
-+
-+" Verilog-AMS HDL
-+au BufNewFile,BufRead *.va,*.vams		setf verilogams
-+
-+" VHDL
-+au BufNewFile,BufRead *.hdl,*.vhd,*.vhdl,*.vbe,*.vst  setf vhdl
-+au BufNewFile,BufRead *.vhdl_[0-9]*		call s:StarSetf('vhdl')
-+
-+" Vim script
-+au BufNewFile,BufRead *.vim,*.vba,.exrc,_exrc	setf vim
-+
-+" Viminfo file
-+au BufNewFile,BufRead .viminfo,_viminfo		setf viminfo
-+
-+" Virata Config Script File or Drupal module
-+au BufRead,BufNewFile *.hw,*.module,*.pkg
-+	\ if getline(1) =~ '<?php' |
-+	\   setf php |
-+	\ else |
-+	\   setf virata |
-+	\ endif
-+
-+" Visual Basic (also uses *.bas) or FORM
-+au BufNewFile,BufRead *.frm			call s:FTVB("form")
-+
-+" SaxBasic is close to Visual Basic
-+au BufNewFile,BufRead *.sba			setf vb
-+
-+" Vgrindefs file
-+au BufNewFile,BufRead vgrindefs			setf vgrindefs
-+
-+" VRML V1.0c
-+au BufNewFile,BufRead *.wrl			setf vrml
-+
-+" Webmacro
-+au BufNewFile,BufRead *.wm			setf webmacro
-+
-+" Wget config
-+au BufNewFile,BufRead .wgetrc,wgetrc		setf wget
-+
-+" Website MetaLanguage
-+au BufNewFile,BufRead *.wml			setf wml
-+
-+" Winbatch
-+au BufNewFile,BufRead *.wbt			setf winbatch
-+
-+" WSML
-+au BufNewFile,BufRead *.wsml			setf wsml
-+
-+" WvDial
-+au BufNewFile,BufRead wvdial.conf,.wvdialrc	setf wvdial
-+
-+" CVS RC file
-+au BufNewFile,BufRead .cvsrc			setf cvsrc
-+
-+" CVS commit file
-+au BufNewFile,BufRead cvs\d\+			setf cvs
-+
-+" WEB (*.web is also used for Winbatch: Guess, based on expecting "%" comment
-+" lines in a WEB file).
-+au BufNewFile,BufRead *.web
-+	\ if getline(1)[0].getline(2)[0].getline(3)[0].getline(4)[0].getline(5)[0] =~ "%" |
-+	\   setf web |
-+	\ else |
-+	\   setf winbatch |
-+	\ endif
-+
-+" Windows Scripting Host and Windows Script Component
-+au BufNewFile,BufRead *.ws[fc]			setf wsh
-+
-+" XHTML
-+au BufNewFile,BufRead *.xhtml,*.xht		setf xhtml
-+
-+" X Pixmap (dynamically sets colors, use BufEnter to make it work better)
-+au BufEnter *.xpm
-+	\ if getline(1) =~ "XPM2" |
-+	\   setf xpm2 |
-+	\ else |
-+	\   setf xpm |
-+	\ endif
-+au BufEnter *.xpm2				setf xpm2
-+
-+" XFree86 config
-+au BufNewFile,BufRead XF86Config
-+	\ if getline(1) =~ '\<XConfigurator\>' |
-+	\   let b:xf86c_xfree86_version = 3 |
-+	\ endif |
-+	\ setf xf86conf
-+
-+" Xorg config
-+au BufNewFile,BufRead xorg.conf,xorg.conf-4	let b:xf86c_xfree86_version = 4 | setf xf86conf
-+
-+" Xinetd conf
-+au BufNewFile,BufRead /etc/xinetd.conf		setf xinetd
-+
-+" XS Perl extension interface language
-+au BufNewFile,BufRead *.xs			setf xs
-+
-+" X resources file
-+au BufNewFile,BufRead .Xdefaults,.Xpdefaults,.Xresources,xdm-config,*.ad setf xdefaults
-+
-+" Xmath
-+au BufNewFile,BufRead *.msc,*.msf		setf xmath
-+au BufNewFile,BufRead *.ms
-+	\ if !s:FTnroff() | setf xmath | endif
-+
-+" XML  specific variants: docbk and xbl
-+au BufNewFile,BufRead *.xml			call s:FTxml()
-+
-+func! s:FTxml()
-+  let n = 1
-+  while n < 100 && n < line("$")
-+    let line = getline(n)
-+    if line =~ '<!DOCTYPE.*DocBook'
-+      let b:docbk_type = "xml"
-+      setf docbk
-+      return
-+    endif
-+    if line =~ 'xmlns:xbl="http://www.mozilla.org/xbl"'
-+      setf xbl
-+      return
-+    endif
-+    let n += 1
-+  endwhile
-+  setf xml
-+endfunc
-+
-+" XMI (holding UML models) is also XML
-+au BufNewFile,BufRead *.xmi			setf xml
-+
-+" CSPROJ files are Visual Studio.NET's XML-based project config files
-+au BufNewFile,BufRead *.csproj,*.csproj.user	setf xml
-+
-+" Qt Linguist translation source and Qt User Interface Files are XML
-+au BufNewFile,BufRead *.ts,*.ui			setf xml
-+
-+" TPM's are RDF-based descriptions of TeX packages (Nikolai Weibull)
-+au BufNewFile,BufRead *.tpm			setf xml
-+
-+" Xdg menus
-+au BufNewFile,BufRead /etc/xdg/menus/*.menu	setf xml
-+
-+" ATI graphics driver configuration
-+au BufNewFile,BufRead fglrxrc			setf xml
-+
-+" XLIFF (XML Localisation Interchange File Format) is also XML
-+au BufNewFile,BufRead *.xlf			setf xml
-+au BufNewFile,BufRead *.xliff			setf xml
-+
-+" X11 xmodmap (also see below)
-+au BufNewFile,BufRead *Xmodmap			setf xmodmap
-+
-+" Xquery
-+au BufNewFile,BufRead *.xq,*.xql,*.xqm,*.xquery,*.xqy	setf xquery
-+
-+" XSD
-+au BufNewFile,BufRead *.xsd			setf xsd
-+
-+" Xslt
-+au BufNewFile,BufRead *.xsl,*.xslt		setf xslt
-+
-+" Yacc
-+au BufNewFile,BufRead *.yy			setf yacc
-+
-+" Yacc or racc
-+au BufNewFile,BufRead *.y			call s:FTy()
-+
-+func! s:FTy()
-+  let n = 1
-+  while n < 100 && n < line("$")
-+    let line = getline(n)
-+    if line =~ '^\s*%'
-+      setf yacc
-+      return
-+    endif
-+    if getline(n) =~ '^\s*\(#\|class\>\)' && getline(n) !~ '^\s*#\s*include'
-+      setf racc
-+      return
-+    endif
-+    let n = n + 1
-+  endwhile
-+  setf yacc
-+endfunc
-+
-+
-+" Yaml
-+au BufNewFile,BufRead *.yaml,*.yml		setf yaml
-+
-+" Zope
-+"   dtml (zope dynamic template markup language), pt (zope page template),
-+"   cpt (zope form controller page template)
-+au BufNewFile,BufRead *.dtml,*.pt,*.cpt		call s:FThtml()
-+"   zsql (zope sql method)
-+au BufNewFile,BufRead *.zsql			call s:SQL()
-+
-+" Z80 assembler asz80
-+au BufNewFile,BufRead *.z8a			setf z8a
-+
-+augroup END
-+
-+
-+" Source the user-specified filetype file, for backwards compatibility with
-+" Vim 5.x.
-+if exists("myfiletypefile") && filereadable(expand(myfiletypefile))
-+  execute "source " . myfiletypefile
-+endif
-+
-+
-+" Check for "*" after loading myfiletypefile, so that scripts.vim is only used
-+" when there are no matching file name extensions.
-+" Don't do this for compressed files.
-+augroup filetypedetect
-+au BufNewFile,BufRead *
-+	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
-+	\ | runtime! scripts.vim | endif
-+au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
-+
-+
-+" Extra checks for when no filetype has been detected now.  Mostly used for
-+" patterns that end in "*".  E.g., "zsh*" matches "zsh.vim", but that's a Vim
-+" script file.
-+" Most of these should call s:StarSetf() to avoid names ending in .gz and the
-+" like are used.
-+
-+" More Apache files.
-+au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/*		call s:StarSetf('apache')
-+
-+" Asterisk config file
-+au BufNewFile,BufRead *asterisk/*.conf*		call s:StarSetf('asterisk')
-+au BufNewFile,BufRead *asterisk*/*voicemail.conf* call s:StarSetf('asteriskvm')
-+
-+" Bazaar version control
-+au BufNewFile,BufRead bzr_log.*			setf bzr
-+
-+" BIND zone
-+au BufNewFile,BufRead */named/db.*,*/bind/db.*	call s:StarSetf('bindzone')
-+
-+" Changelog
-+au BufNewFile,BufRead [cC]hange[lL]og*
-+	\ if getline(1) =~ '; urgency='
-+	\|  call s:StarSetf('debchangelog')
-+	\|else
-+	\|  call s:StarSetf('changelog')
-+	\|endif
-+
-+" Crontab
-+au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/*		call s:StarSetf('crontab')
-+
-+" Debian Sources.list
-+au BufNewFile,BufRead /etc/apt/sources.list.d/*	call s:StarSetf('debsources')
-+
-+" Dracula
-+au BufNewFile,BufRead drac.*			call s:StarSetf('dracula')
-+
-+" Fvwm
-+au BufNewFile,BufRead */.fvwm/*			call s:StarSetf('fvwm')
-+au BufNewFile,BufRead *fvwmrc*,*fvwm95*.hook
-+	\ let b:fvwm_version = 1 | call s:StarSetf('fvwm')
-+au BufNewFile,BufRead *fvwm2rc*
-+	\ if expand("<afile>:e") == "m4"
-+	\|  call s:StarSetf('fvwm2m4')
-+	\|else
-+	\|  let b:fvwm_version = 2 | call s:StarSetf('fvwm')
-+	\|endif
-+
-+" Gedcom
-+au BufNewFile,BufRead /tmp/lltmp*		call s:StarSetf('gedcom')
-+
-+" GTK RC
-+au BufNewFile,BufRead .gtkrc*,gtkrc*		call s:StarSetf('gtkrc')
-+
-+" Jam
-+au BufNewFile,BufRead Prl*.*,JAM*.*		call s:StarSetf('jam')
-+
-+" Jargon
-+au! BufNewFile,BufRead *jarg*
-+	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'THIS IS THE JARGON FILE'
-+	\|  call s:StarSetf('jargon')
-+	\|endif
-+
-+" Kconfig
-+au BufNewFile,BufRead Kconfig.*			call s:StarSetf('kconfig')
-+
-+" Logcheck
-+au BufNewFile,BufRead /etc/logcheck/*.d*/*	call s:StarSetf('logcheck')
-+
-+" Makefile
-+au BufNewFile,BufRead [mM]akefile*		call s:StarSetf('make')
-+
-+" Ruby Makefile
-+au BufNewFile,BufRead [rR]akefile*		call s:StarSetf('ruby')
-+
-+" Mail (also matches muttrc.vim, so this is below the other checks)
-+au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\}	setf mail
-+
-+" Modconf
-+au BufNewFile,BufRead /etc/modprobe.*		call s:StarSetf('modconf')
-+
-+" Mutt setup file
-+au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc*	call s:StarSetf('muttrc')
-+au BufNewFile,BufRead mutt{ng,}rc*,Mutt{ng,}rc*		call s:StarSetf('muttrc')
-+
-+" Nroff macros
-+au BufNewFile,BufRead tmac.*			call s:StarSetf('nroff')
-+
-+" Pam conf
-+au BufNewFile,BufRead /etc/pam.d/*		call s:StarSetf('pamconf')
-+
-+" Printcap and Termcap
-+au BufNewFile,BufRead *printcap*
-+	\ if !did_filetype()
-+	\|  let b:ptcap_type = "print" | call s:StarSetf('ptcap')
-+	\|endif
-+au BufNewFile,BufRead *termcap*
-+	\ if !did_filetype()
-+	\|  let b:ptcap_type = "term" | call s:StarSetf('ptcap')
-+	\|endif
-+
-+" Vim script
-+au BufNewFile,BufRead *vimrc*			call s:StarSetf('vim')
-+
-+" Subversion commit file
-+au BufNewFile,BufRead svn-commit*.tmp		setf svn
-+
-+" X resources file
-+au BufNewFile,BufRead Xresources*,*/app-defaults/*,*/Xresources/* call s:StarSetf('xdefaults')
-+
-+" XFree86 config
-+au BufNewFile,BufRead XF86Config-4*
-+	\ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf')
-+au BufNewFile,BufRead XF86Config*
-+	\ if getline(1) =~ '\<XConfigurator\>'
-+	\|  let b:xf86c_xfree86_version = 3
-+	\|endif
-+	\|call s:StarSetf('xf86conf')
-+
-+" X11 xmodmap
-+au BufNewFile,BufRead *xmodmap*			call s:StarSetf('xmodmap')
-+
-+" Xinetd conf
-+au BufNewFile,BufRead /etc/xinetd.d/*		call s:StarSetf('xinetd')
-+
-+" Z-Shell script
-+au BufNewFile,BufRead zsh*,zlog*		call s:StarSetf('zsh')
-+
-+
-+
-+" Use the filetype detect plugins.  They may overrule any of the previously
-+" detected filetypes.
-+runtime! ftdetect/*.vim
-+
-+
-+" Generic configuration file (check this last, it's just guessing!)
-+au BufNewFile,BufRead,StdinReadPost *
-+	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
-+	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
-+	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
-+	\   setf conf |
-+	\ endif
-+
-+augroup END
-+
-+
-+" If the GUI is already running, may still need to install the Syntax menu.
-+" Don't do it when the 'M' flag is included in 'guioptions'.
-+if has("menu") && has("gui_running")
-+      \ && !exists("did_install_syntax_menu") && &guioptions !~# "M"
-+  source <sfile>:p:h/menu.vim
-+endif
-+
-+" Function called for testing all functions defined here.  These are
-+" script-local, thus need to be executed here.
-+" Returns a string with error messages (hopefully empty).
-+func! TestFiletypeFuncs(testlist)
-+  let output = ''
-+  for f in a:testlist
-+    try
-+      exe f
-+    catch
-+      let output = output . "\n" . f . ": " . v:exception
-+    endtry
-+  endfor
-+  return output
-+endfunc
-+
-+" Restore 'cpoptions'
-+let &cpo = s:cpo_save
-+unlet s:cpo_save
-diff -Naur vim73.orig/runtime/ftplugof.vim vim73/runtime/ftplugof.vim
---- vim73.orig/runtime/ftplugof.vim	2010-05-15 11:03:57.000000000 +0000
-+++ vim73/runtime/ftplugof.vim	2012-11-01 20:35:43.000000000 +0000
-@@ -1,11 +1,13 @@
- " Vim support file to switch off loading plugins for file types
- "
- " Maintainer:	Bram Moolenaar <Bram@vim.org>
--" Last Change:	2002 Apr 04
-+" Last Change:	2011 Oct 20
- 
- if exists("did_load_ftplugin")
-   unlet did_load_ftplugin
- endif
- 
--" Remove all autocommands in the filetypeplugin group
--silent! au! filetypeplugin *
-+" Remove all autocommands in the filetypeplugin group, if any exist.
-+if exists("#filetypeplugin")
-+  silent! au! filetypeplugin *
-+endif
-diff -Naur vim73.orig/runtime/menu.vim vim73/runtime/menu.vim
---- vim73.orig/runtime/menu.vim	2010-07-17 13:17:21.000000000 +0000
-+++ vim73/runtime/menu.vim	2012-11-01 20:35:48.000000000 +0000
-@@ -434,6 +434,10 @@
-       let enc = &enc
-     endif
- 
-+    if !exists("g:menutrans_set_lang_to")
-+      let g:menutrans_set_lang_to = 'Set language to'
-+    endif
-+
-     let found = 0
-     let s = globpath(&rtp, "spell/*." . enc . ".spl")
-     if s != ""
-@@ -441,8 +445,9 @@
-       for f in split(s, "\n")
- 	let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
- 	if nm != "en" && nm !~ '/'
-+          let _nm = nm
- 	  let found += 1
--	  let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
-+	  let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
- 	  exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
- 	  let s:undo_spellang += ['aun ' . menuname]
- 	endif
-@@ -452,7 +457,7 @@
-     if found == 0
-       echomsg "Could not find other spell files"
-     elseif found == 1
--      echomsg "Found spell file " . nm
-+      echomsg "Found spell file " . _nm
-     else
-       echomsg "Found " . found . " more spell files"
-     endif
-diff -Naur vim73.orig/src/GvimExt/Make_cyg.mak vim73/src/GvimExt/Make_cyg.mak
---- vim73.orig/src/GvimExt/Make_cyg.mak	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/GvimExt/Make_cyg.mak	2012-11-01 20:35:43.000000000 +0000
-@@ -0,0 +1,77 @@
-+# Project: gvimext
-+# Generates gvimext.dll with gcc.
-+# To be used with Cygwin.
-+#
-+# Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
-+# Now it is allocated dymanically by the linker by evaluating all DLLs
-+# already loaded in memory. The binary image contains as well information
-+# for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
-+
-+# If cross-compiling set this to yes, else set it to no
-+CROSS = no
-+#CROSS = yes
-+# For the old MinGW 2.95 (the one you get e.g. with debian woody)
-+# set the following variable to yes and check if the executables are
-+# really named that way.
-+# If you have a newer MinGW or you are using cygwin set it to no and
-+# check also the executables
-+MINGWOLD = no
-+
-+# Link against the shared versions of libgcc/libstdc++ by default.  Set
-+# STATIC_STDCPLUS to "yes" to link against static versions instead.
-+STATIC_STDCPLUS=no
-+#STATIC_STDCPLUS=yes
-+
-+# Note: -static-libstdc++ is not available until gcc 4.5.x.
-+LDFLAGS += -shared
-+ifeq (yes, $(STATIC_STDCPLUS))
-+LDFLAGS += -static-libgcc -static-libstdc++
-+endif
-+
-+ifeq ($(CROSS),yes)
-+DEL = rm
-+ifeq ($(MINGWOLD),yes)
-+CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
-+else
-+CXXFLAGS := -O2 -mno-cygwin
-+endif
-+else
-+CXXFLAGS := -O2 -mno-cygwin
-+ifneq (sh.exe, $(SHELL))
-+DEL = rm
-+else
-+DEL = del
-+endif
-+endif
-+CXX := $(CROSS_COMPILE)g++
-+WINDRES := $(CROSS_COMPILE)windres
-+WINDRES_CXX = $(CXX)
-+WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
-+LIBS :=  -luuid
-+RES  := gvimext.res
-+DEFFILE = gvimext_ming.def
-+OBJ  := gvimext.o
-+
-+DLL  := gvimext.dll
-+
-+.PHONY: all all-before all-after clean clean-custom
-+
-+all: all-before $(DLL) all-after
-+
-+$(DLL): $(OBJ) $(RES) $(DEFFILE)
-+	$(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
-+		-Wl,--enable-auto-image-base \
-+		-Wl,--enable-auto-import \
-+		-Wl,--whole-archive \
-+			$^ \
-+		-Wl,--no-whole-archive \
-+			$(LIBS)
-+
-+gvimext.o: gvimext.cpp
-+	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
-+
-+$(RES): gvimext_ming.rc
-+	$(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
-+
-+clean: clean-custom
-+	-$(DEL)  $(OBJ) $(RES) $(DLL)
-diff -Naur vim73.orig/src/GvimExt/Make_ming.mak vim73/src/GvimExt/Make_ming.mak
---- vim73.orig/src/GvimExt/Make_ming.mak	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/GvimExt/Make_ming.mak	2012-11-01 20:35:43.000000000 +0000
-@@ -1,6 +1,6 @@
- # Project: gvimext
- # Generates gvimext.dll with gcc.
--# Can be used for Cygwin and MingW (MingW ignores -mno-cygwin)
-+# To be used with MingW.
- #
- # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
- # Now it is allocated dymanically by the linker by evaluating all DLLs
-@@ -17,15 +17,26 @@
- # check also the executables
- MINGWOLD = no
- 
-+# Link against the shared versions of libgcc/libstdc++ by default.  Set
-+# STATIC_STDCPLUS to "yes" to link against static versions instead.
-+STATIC_STDCPLUS=no
-+#STATIC_STDCPLUS=yes
-+
-+# Note: -static-libstdc++ is not available until gcc 4.5.x.
-+LDFLAGS += -shared
-+ifeq (yes, $(STATIC_STDCPLUS))
-+LDFLAGS += -static-libgcc -static-libstdc++
-+endif
-+
- ifeq ($(CROSS),yes)
- DEL = rm
- ifeq ($(MINGWOLD),yes)
--CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
-+CXXFLAGS := -O2 -fvtable-thunks
- else
--CXXFLAGS := -O2 -mno-cygwin
-+CXXFLAGS := -O2
- endif
- else
--CXXFLAGS := -O2 -mno-cygwin
-+CXXFLAGS := -O2
- ifneq (sh.exe, $(SHELL))
- DEL = rm
- else
-@@ -34,6 +45,8 @@
- endif
- CXX := $(CROSS_COMPILE)g++
- WINDRES := $(CROSS_COMPILE)windres
-+WINDRES_CXX = $(CXX)
-+WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
- LIBS :=  -luuid
- RES  := gvimext.res
- DEFFILE = gvimext_ming.def
-@@ -46,7 +59,7 @@
- all: all-before $(DLL) all-after
- 
- $(DLL): $(OBJ) $(RES) $(DEFFILE)
--	$(CXX) -shared $(CXXFLAGS) -s -o $@ \
-+	$(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
- 		-Wl,--enable-auto-image-base \
- 		-Wl,--enable-auto-import \
- 		-Wl,--whole-archive \
-@@ -58,8 +71,7 @@
- 	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
- 
- $(RES): gvimext_ming.rc
--	$(WINDRES) --input-format=rc --output-format=coff -DMING $? -o $@
-+	$(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
- 
- clean: clean-custom
- 	-$(DEL)  $(OBJ) $(RES) $(DLL)
--
-diff -Naur vim73.orig/src/GvimExt/gvimext.cpp vim73/src/GvimExt/gvimext.cpp
---- vim73.orig/src/GvimExt/gvimext.cpp	2010-07-10 17:21:34.000000000 +0000
-+++ vim73/src/GvimExt/gvimext.cpp	2012-11-01 20:35:43.000000000 +0000
-@@ -142,6 +142,7 @@
- static int dyn_libintl_init(char *dir);
- static void dyn_libintl_end(void);
- 
-+static wchar_t *oldenv = NULL;
- static HINSTANCE hLibintlDLL = 0;
- static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
- static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
-@@ -339,8 +340,10 @@
- inc_cRefThisDLL()
- {
- #ifdef FEAT_GETTEXT
--    if (g_cRefThisDll == 0)
-+    if (g_cRefThisDll == 0) {
- 	dyn_gettext_load();
-+	oldenv = GetEnvironmentStringsW();
-+    }
- #endif
-     InterlockedIncrement((LPLONG)&g_cRefThisDll);
- }
-@@ -349,8 +352,13 @@
- dec_cRefThisDLL()
- {
- #ifdef FEAT_GETTEXT
--    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
-+    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0) {
- 	dyn_gettext_free();
-+	if (oldenv != NULL) {
-+	    FreeEnvironmentStringsW(oldenv);
-+	    oldenv = NULL;
-+	}
-+    }
- #else
-     InterlockedDecrement((LPLONG)&g_cRefThisDll);
- #endif
-@@ -586,8 +594,23 @@
- 
-     // Initialize m_cntOfHWnd to 0
-     m_cntOfHWnd = 0;
--    // Retrieve all the vim instances
--    EnumWindows(EnumWindowsProc, (LPARAM)this);
-+
-+    HKEY keyhandle;
-+    bool showExisting = true;
-+
-+    // Check whether "Edit with existing Vim" entries are disabled.
-+    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
-+				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
-+    {
-+	if (RegQueryValueEx(keyhandle, "DisableEditWithExisting", 0, NULL,
-+						 NULL, NULL) == ERROR_SUCCESS)
-+	    showExisting = false;
-+	RegCloseKey(keyhandle);
-+    }
-+
-+    // Retrieve all the vim instances, unless disabled.
-+    if (showExisting)
-+	EnumWindows(EnumWindowsProc, (LPARAM)this);
- 
-     if (cbFiles > 1)
-     {
-@@ -890,8 +913,8 @@
- 			NULL,		// Process handle not inheritable.
- 			NULL,		// Thread handle not inheritable.
- 			FALSE,		// Set handle inheritance to FALSE.
--			0,		// No creation flags.
--			NULL,		// Use parent's environment block.
-+			oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
-+			oldenv,		// Use unmodified environment block.
- 			NULL,		// Use parent's starting directory.
- 			&si,		// Pointer to STARTUPINFO structure.
- 			&pi)		// Pointer to PROCESS_INFORMATION structure.
-@@ -972,8 +995,8 @@
- 		NULL,		// Process handle not inheritable.
- 		NULL,		// Thread handle not inheritable.
- 		FALSE,		// Set handle inheritance to FALSE.
--		0,		// No creation flags.
--		NULL,		// Use parent's environment block.
-+		oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
-+		oldenv,		// Use unmodified environment block.
- 		NULL,		// Use parent's starting directory.
- 		&si,		// Pointer to STARTUPINFO structure.
- 		&pi)		// Pointer to PROCESS_INFORMATION structure.
-diff -Naur vim73.orig/src/GvimExt/gvimext.def vim73/src/GvimExt/gvimext.def
---- vim73.orig/src/GvimExt/gvimext.def	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/GvimExt/gvimext.def	2012-11-01 20:35:42.000000000 +0000
-@@ -1,7 +1,7 @@
- ;gvimdef.def : Declares the module parameters for the DLL.
- 
- LIBRARY      gvimext
--DESCRIPTION  'Vim Shell Extension'
-+; DESCRIPTION  'Vim Shell Extension'
- 
- EXPORTS
-     DllCanUnloadNow private
-diff -Naur vim73.orig/src/GvimExt/gvimext_ming.def vim73/src/GvimExt/gvimext_ming.def
---- vim73.orig/src/GvimExt/gvimext_ming.def	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/GvimExt/gvimext_ming.def	2012-11-01 20:35:42.000000000 +0000
-@@ -3,7 +3,7 @@
- ;Hence this is the same file as gvimext.def with private removed
- 
- LIBRARY      gvimext
--DESCRIPTION  'Vim Shell Extension build with MinGW'
-+; DESCRIPTION  'Vim Shell Extension build with MinGW'
- 
- EXPORTS
-     DllCanUnloadNow = DllCanUnloadNow@0
-diff -Naur vim73.orig/src/INSTALL vim73/src/INSTALL
---- vim73.orig/src/INSTALL	2010-06-26 04:04:51.000000000 +0000
-+++ vim73/src/INSTALL	2012-11-01 20:35:42.000000000 +0000
-@@ -6,9 +6,8 @@
- Contents:
- 1. Generic
- 2. Unix
--3. RISC OS
--4. OS/2 (with EMX 0.9b)
--5. Atari MiNT
-+3. OS/2 (with EMX 0.9b)
-+4. Atari MiNT
- 
- See INSTALLami.txt              for Amiga
- See INSTALLmac.txt              for Macintosh
-@@ -174,25 +173,7 @@
- 	./configure --without-local-dir
- 
- 
--3. RISC OS
--=============
--
--Much file renaming is needed before you can compile anything.
--You'll need UnixLib to link against, GCC and GNU make.
--
--I suggest you get the RISC OS binary distribution, which includes the
--Templates file and the loader.
--
--Try here: http://www.ecs.soton.ac.uk/~tal197
--
--Do
--    :help riscos
--
--within the editor for more information, or read the
--../runtime/doc/os_risc.txt help file.
--
--
--4. OS/2
-+3. OS/2
- =======
- 
- Summary:
-@@ -237,7 +218,7 @@
- Check ../runtime/doc/os_os2.txt for additional info on running Vim.
- 
- 
--5. Atari MiNT
-+4. Atari MiNT
- =============
- 
- [NOTE: this is quite old, it might not work anymore]
-diff -Naur vim73.orig/src/INSTALLpc.txt vim73/src/INSTALLpc.txt
---- vim73.orig/src/INSTALLpc.txt	2010-05-24 12:58:06.000000000 +0000
-+++ vim73/src/INSTALLpc.txt	2012-11-01 20:35:45.000000000 +0000
-@@ -11,9 +11,9 @@
- this, then you will get the default behavior as is documented, which should
- be fine for most people.
- 
--With the exception of the last two sections (Windows 3.1 and MS-DOS),
--this document assumes that you are building Vim for Win32
--(Windows NT/2000/XP/2003/Vista and Windows 95/98/Me)
-+With the exception of two sections (Windows 3.1 and MS-DOS), this document
-+assumes that you are building Vim for Win32 or later.
-+(Windows 95/98/Me/NT/2000/XP/2003/Vista/7)
- 
- 
- Contents:
-@@ -27,9 +27,13 @@
- 8. Windows 3.1
- 9. MS-DOS
- 
-+10. Installing after building from sources
-+
-+
- The currently preferred method is using the free Visual C++ Toolkit 2008
--|msvc-2008-express|.  If you need the executable to run on Windows 98 or ME,
--use the 2003 one |msvc-2003-toolkit|.
-+|msvc-2008-express|, the produced binary runs on most MS-Windows systems.  If
-+you need the executable to run on Windows 98 or ME, use the 2003 one
-+|msvc-2003-toolkit|.
- 
- 
- 1. Microsoft Visual C++
-@@ -176,7 +180,7 @@
-     http://www.microsoft.com/express/vc/Default.aspx
- This includes the IDE and the debugger.
- 
--To set the environment execute the msvc2008.bat script.  You can then build
-+To set the environment execute the msvc2010.bat script.  You can then build
- Vim with Make_mvc.mak.
- 
- 
-@@ -235,6 +239,12 @@
- found at
-     http://www.upx.org/
- 
-+As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
-+built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
-+at:
-+    http://www.matcode.com/mpress.htm
-+
-+
- ADDITION: NLS support with MinGW
- 
- (by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)
-@@ -408,3 +418,59 @@
- 
- If you get all kinds of strange error messages when compiling, try adding
- changing the file format from "unix" to "dos".
-+
-+
-+10. Installing after building from sources
-+==========================================
-+
-+[provided by Michael Soyka]
-+
-+After you've built the Vim binaries as described above, you're ready to
-+install Vim on your system.  However, if you've obtained the Vim sources
-+using Mercurial or by downloading them as a unix tar file, you must first 
-+create a "vim73" directory.  If you instead downloaded the sources as
-+zip files, you can skip this setup as the zip archives already have the
-+correct directory structure.  
-+
-+  A.  Create a Vim "runtime" subdirectory named "vim73"
-+  -----------------------------------------------------
-+  If you obtained your Vim sources as zip files, you can skip this step.  
-+  Otherwise, continue reading.
-+
-+  Go to the directory that contains the Vim "src" and "runtime"
-+  directories and create a new subdirectory named "vim73".  
-+  
-+  Copy the "runtime" files into "vim73":
-+     copy runtime\* vim73
-+
-+  B.  Copy the new binaries into the "vim73" directory
-+  ----------------------------------------------------
-+  Regardless of how you installed the Vim sources, you need to copy the
-+  new binaries you created above into "vim73":
-+
-+     copy src\*.exe vim73
-+     copy src\GvimExt\gvimext.dll vim73
-+     copy src\xxd\xxd.exe vim73
-+
-+  C.  Move the "vim73" directory into the Vim installation subdirectory
-+  ---------------------------------------------------------------------
-+  Move the "vim73" subdirectory into the subdirectory where you want Vim
-+  to be installed.  Typically, this subdirectory will be named "vim".  
-+  If you already have a "vim73" subdirectory in "vim", delete it first
-+  by running its unstal.exe program.  
-+
-+  D.  Install Vim
-+  ---------------
-+  "cd" to your Vim installation subdirectory "vim\vim73" and run the
-+  "install.exe" program.  It will ask you a number of questions about
-+  how you would like to have your Vim setup.  Among these are:
-+  - You can tell it to write a "_vimrc" file with your preferences in the
-+    parent directory.
-+  - It can also install an "Edit with Vim" entry in the Windows Explorer
-+    popup menu.
-+  - You can have it create batch files, so that you can run Vim from the
-+    console or in a shell.  You can select one of the directories in your
-+    PATH or add the directory to PATH using the Windows Control Panel.  
-+  - Create entries for Vim on the desktop and in the Start menu.
-+
-+Happy Vimming!
-diff -Naur vim73.orig/src/Make_cyg.mak vim73/src/Make_cyg.mak
---- vim73.orig/src/Make_cyg.mak	2010-08-02 19:09:22.000000000 +0000
-+++ vim73/src/Make_cyg.mak	2012-11-01 20:35:47.000000000 +0000
-@@ -1,6 +1,6 @@
- #
- # Makefile for VIM on Win32, using Cygnus gcc
--# Last updated by Dan Sharp.  Last Change: 2010 Feb 24
-+# Last updated by Dan Sharp.  Last Change: 2012 Jun 30
- #
- # Also read INSTALLpc.txt!
- #
-@@ -27,6 +27,7 @@
- #   MZSCHEME_VER      define to version of MzScheme being used (209_000)
- #   DYNAMIC_MZSCHEME  no or yes: use yes to load the MzScheme DLLs dynamically (yes)
- #   MZSCHEME_DLLS     path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
-+#   MZSCHEME_USE_RACKET  define to use "racket" instead of "mzsch".
- # LUA	define to path to Lua dir to get Lua support (not defined)
- #   LUA_VER	    define to version of Lua being used (51)
- #   DYNAMIC_LUA  no or yes: use yes to load the Lua DLL dynamically (yes)
-@@ -47,7 +48,7 @@
- #		-L/lib/w32api to EXTRA_LIBS.
- # POSTSCRIPT	no or yes: set to yes for PostScript printing (no)
- # FEATURES	TINY, SMALL, NORMAL, BIG or HUGE (BIG)
--# WINVER	Lowest Win32 version to support.  (0x0400)
-+# WINVER	Lowest Win32 version to support.  (0x0500)
- # CSCOPE	no or yes: to include cscope interface support (yes)
- # OPTIMIZE	SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
- # NETBEANS	no or yes: to include netbeans interface support (yes when GUI
-@@ -84,7 +85,7 @@
- endif
- 
- ifndef WINVER
--WINVER = 0x0400
-+WINVER = 0x0500
- endif
- 
- ifndef CSCOPE
-@@ -254,16 +255,22 @@
- MZSCHEME_GENERATE_BASE=no
- endif
- 
-+ifndef MZSCHEME_USE_RACKET
-+MZSCHEME_MAIN_LIB=mzsch
-+else
-+MZSCHEME_MAIN_LIB=racket
-+endif
-+
- ifeq (yes, $(DYNAMIC_MZSCHEME))
--DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
-+DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
- else
- ifndef MZSCHEME_DLLS
- MZSCHEME_DLLS = $(MZSCHEME)
- endif
- ifeq (yes,$(MZSCHEME_PRECISE_GC))
--MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
-+MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
- else
--MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
-+MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
- endif
- EXTRA_LIBS += -L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)/lib $(MZSCHEME_LIB)
- endif
-@@ -529,7 +536,7 @@
- 	$(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
- 
- GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
--	$(MAKE) -C GvimExt -f Make_ming.mak CROSS_COMPILE=$(CROSS_COMPILE)
-+	$(MAKE) -C GvimExt -f Make_cyg.mak CROSS_COMPILE=$(CROSS_COMPILE)
- 
- vimrun.exe: vimrun.c
- 	$(CC) $(CFLAGS) -o vimrun.exe vimrun.c  $(LIBS)
-@@ -558,7 +565,7 @@
- endif
- 	-$(DEL) pathdef.c
- 	$(MAKE) -C xxd -f Make_cyg.mak clean
--	$(MAKE) -C GvimExt -f Make_ming.mak clean
-+	$(MAKE) -C GvimExt -f Make_cyg.mak clean
- 
- distclean: clean
- 	-$(DEL) obj$(DIRSLASH)*.o
-diff -Naur vim73.orig/src/Make_ming.mak vim73/src/Make_ming.mak
---- vim73.orig/src/Make_ming.mak	2010-08-02 19:09:43.000000000 +0000
-+++ vim73/src/Make_ming.mak	2012-11-01 20:35:48.000000000 +0000
-@@ -1,25 +1,28 @@
--# Makefile for VIM on Win32, using 'EGCS/mingw32 1.1.2'.
-+# Makefile for VIM on Win32
-+#
- # Info at http://www.mingw.org
--# Also requires 'GNU make 3.77', which you can get through a link
--# to 'JanJaap's page from the above page.
-+# Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net
-+# Also requires GNU make, which you can download from the same sites.
- # Get missing libraries from http://gnuwin32.sf.net.
- #
- # Tested on Win32 NT 4 and Win95.
- #
--# To make everything, just 'make -f Make_ming.mak'
--# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'
--# After a run, you can 'make -f Make_ming.mak clean' to clean up
-+# To make everything, just 'make -f Make_ming.mak'.
-+# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'.
-+# After a run, you can 'make -f Make_ming.mak clean' to clean up.
- #
- # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
- # it's just run out of memory or something.  Run again, and it will continue
- # with 'xxd'.
- #
--# "make upx" makes *compressed* versions of the GUI and console EXEs, using the
--# excellent UPX compressor:
-+# "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
-+# using the excellent UPX compressor:
- #     http://upx.sourceforge.net/
-+# "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
-+#     http://www.matcode.com/mpress.htm
- #
--# Maintained by Ron Aaron <ronaharon@yahoo.com>
--# updated 2003 Jan 20
-+# Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
-+# Updated 2012 Sep 5.
- 
- #>>>>> choose options:
- # set to yes for a debug build
-@@ -29,33 +32,42 @@
- # set to yes to make gvim, no for vim
- GUI=yes
- # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
--# set to TINY to make minimal version (few features)
-+# Set to TINY to make minimal version (few features).
- FEATURES=BIG
--# set to one of i386, i486, i586, i686 as the minimum target processor
-+# Set to one of i386, i486, i586, i686 as the minimum target processor.
-+# For amd64/x64 architecture set ARCH=x86-64 .
- ARCH=i386
--# set to yes to cross-compile from unix; no=native Windows
-+# Set to yes to cross-compile from unix; no=native Windows.
- CROSS=no
--# set to path to iconv.h and libiconv.a to enable using 'iconv.dll'
-+# Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'.
- #ICONV="."
- ICONV=yes
- GETTEXT=yes
--# set to yes to include multibyte support
-+# Set to yes to include multibyte support.
- MBYTE=yes
--# set to yes to include IME support
-+# Set to yes to include IME support.
- IME=yes
- DYNAMIC_IME=yes
--# set to yes to enable writing a postscript file with :hardcopy
-+# Set to yes to enable writing a postscript file with :hardcopy.
- POSTSCRIPT=no
--# set to yes to enable OLE support
-+# Set to yes to enable OLE support.
- OLE=no
--# Set the default $(WINVER) to make it work with pre-Win2k
--WINVER = 0x0400
--# Set to yes to enable Cscope support
-+# Set the default $(WINVER) to make it work with pre-Win2k.
-+ifndef WINVER
-+WINVER = 0x0500
-+endif
-+# Set to yes to enable Cscope support.
- CSCOPE=yes
--# Set to yes to enable Netbeans support
-+# Set to yes to enable Netbeans support.
- NETBEANS=$(GUI)
- 
- 
-+# Link against the shared version of libstdc++ by default.  Set
-+# STATIC_STDCPLUS to "yes" to link against static version instead.
-+ifndef STATIC_STDCPLUS
-+STATIC_STDCPLUS=no
-+endif
-+
- # If the user doesn't want gettext, undefine it.
- ifeq (no, $(GETTEXT))
- GETTEXT=
-@@ -81,7 +93,7 @@
- 
- # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
- # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
--# uncomment the following, but I can't build a static versión with them, ?-(|
-+# uncomment the following, but I can't build a static version with them, ?-(|
- #GETTEXT=c:/gettext-0.10.37-20010430
- #STATIC_GETTEXT=USE_STATIC_GETTEXT
- #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
-@@ -102,6 +114,13 @@
- # on NT, it's here:
- PERLLIB=$(PERL)/lib
- PERLLIBS=$(PERLLIB)/Core
-+XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
-+XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
-+ifeq "$(XSUBPP_EXISTS)" ""
-+XSUBPP=perl $(XSUBPPTRY)
-+else
-+XSUBPP=xsubpp
-+endif
- endif
- 
- # uncomment 'LUA' if you want a Lua-enabled version
-@@ -141,11 +160,17 @@
- MZSCHEME_GENERATE_BASE=no
- endif
- 
-+ifndef MZSCHEME_USE_RACKET
-+MZSCHEME_MAIN_LIB=mzsch
-+else
-+MZSCHEME_MAIN_LIB=racket
-+endif
-+
- ifeq (no,$(DYNAMIC_MZSCHEME))
- ifeq (yes,$(MZSCHEME_PRECISE_GC))
--MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
-+MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
- else
--MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
-+MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
- endif
- # the modern MinGW can dynamically link to dlls directly.
- # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
-@@ -237,7 +262,9 @@
- #	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
- #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
- #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
--#	    You must set RUBY_VER_LONG when change RUBY_VER.
-+#	    You must set RUBY_VER_LONG when changing RUBY_VER.
-+#	    You must set RUBY_API_VER version to RUBY_VER_LONG.
-+#	    Don't set ruby API version to RUBY_VER like 191.
- #RUBY=c:/ruby
- ifdef RUBY
- ifndef DYNAMIC_RUBY
-@@ -250,6 +277,9 @@
- ifndef RUBY_VER_LONG
- RUBY_VER_LONG = 1.6
- endif
-+ifndef RUBY_API_VER
-+RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
-+endif
- 
- ifndef RUBY_PLATFORM
- ifeq ($(RUBY_VER), 16)
-@@ -265,9 +295,9 @@
- 
- ifndef RUBY_INSTALL_NAME
- ifeq ($(RUBY_VER), 16)
--RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
-+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
- else
--RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
-+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
- endif
- endif
- 
-@@ -304,11 +334,13 @@
- endif
- CC := $(CROSS_COMPILE)gcc
- WINDRES := $(CROSS_COMPILE)windres
-+WINDRES_CC = $(CC)
- 
- #>>>>> end of choices
- ###########################################################################
- 
- CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
-+WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
- 
- ifdef GETTEXT
- DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
-@@ -343,7 +375,7 @@
- ifdef MZSCHEME
- CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
- ifeq (yes, $(DYNAMIC_MZSCHEME))
--CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
-+CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
- endif
- endif
- 
-@@ -401,13 +433,34 @@
- endif
- endif
- 
--ifdef XPM
- # Only allow XPM for a GUI build.
- ifeq (yes, $(GUI))
--CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include
-+
-+ifndef XPM
-+ifeq ($(ARCH),i386)
-+XPM = xpm/x86
-+endif
-+ifeq ($(ARCH),i486)
-+XPM = xpm/x86
-+endif
-+ifeq ($(ARCH),i586)
-+XPM = xpm/x86
-+endif
-+ifeq ($(ARCH),i686)
-+XPM = xpm/x86
-+endif
-+ifeq ($(ARCH),x86-64)
-+XPM = xpm/x64
-+endif
-+endif
-+ifdef XPM
-+ifneq ($(XPM),no)
-+CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include
- endif
- endif
- 
-+endif
-+
- ifeq ($(DEBUG),yes)
- CFLAGS += -g -fstack-check
- DEBUG_SUFFIX=d
-@@ -535,10 +588,10 @@
- DEFINES += $(DEF_GUI)
- OBJ += $(GUIOBJ)
- LFLAGS += -mwindows
--OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
-+OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
- else
- TARGET := vim$(DEBUG_SUFFIX).exe
--OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
-+OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
- endif
- 
- ifdef GETTEXT
-@@ -571,8 +624,13 @@
- endif
- 
- ifeq (yes, $(OLE))
--LIB += -loleaut32 -lstdc++
-+LIB += -loleaut32
- OBJ += $(OUTDIR)/if_ole.o
-+ifeq (yes, $(STATIC_STDCPLUS))
-+LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
-+else
-+LIB += -lstdc++
-+endif
- endif
- 
- ifeq (yes, $(MBYTE))
-@@ -614,8 +672,12 @@
- 	upx gvim.exe
- 	upx vim.exe
- 
-+mpress: exes
-+	mpress gvim.exe
-+	mpress vim.exe
-+
- xxd/xxd.exe: xxd/xxd.c
--	$(MAKE) -C xxd -f Make_cyg.mak CC=$(CC)
-+	$(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
- 
- GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
- 	$(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
-@@ -633,7 +695,7 @@
- 	-$(DEL) mzscheme_base.c
- endif
- 	$(MAKE) -C GvimExt -f Make_ming.mak clean
--	$(MAKE) -C xxd -f Make_cyg.mak clean
-+	$(MAKE) -C xxd -f Make_ming.mak clean
- 
- ###########################################################################
- INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
-@@ -649,11 +711,9 @@
- $(OUTDIR)/%.o : %.c $(INCL)
- 	$(CC) -c $(CFLAGS) $< -o $@
- 
--$(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
--	$(WINDRES) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
--
--$(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
--	$(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
-+$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
-+	$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
-+	    --input-format=rc --output-format=coff -i vim.rc -o $@
- 
- $(OUTDIR):
- 	$(MKDIR) $(OUTDIR)
-@@ -677,7 +737,7 @@
- endif
- 
- if_perl.c: if_perl.xs typemap
--	perl $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
-+	$(XSUBPP) -prototypes -typemap \
- 	     $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
- 
- $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
-diff -Naur vim73.orig/src/Make_mvc.mak vim73/src/Make_mvc.mak
---- vim73.orig/src/Make_mvc.mak	2010-07-18 19:24:20.000000000 +0000
-+++ vim73/src/Make_mvc.mak	2012-11-01 20:35:48.000000000 +0000
-@@ -1,7 +1,7 @@
- # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me)
- # and Win64, using the Microsoft Visual C++ compilers. Known to work with
- # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005),
--# VC9 (VS2008), and VC10 (VS2010).
-+# VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012)
- #
- # To build using other Windows compilers, see INSTALLpc.txt
- #
-@@ -15,6 +15,9 @@
- # This will build the console version of Vim with no additional interfaces.
- # To add features, define any of the following:
- #
-+# 	For MSVC 11 you need to specify where the Win32.mak file is, e.g.:
-+# 	   SDK_INCLUDE_DIR="C:\Program Files\Microsoft SDKs\Windows\v7.1\Include"
-+#
- #	!!!!  After changing features do "nmake clean" first  !!!!
- #
- #       Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
-@@ -63,6 +66,8 @@
- #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 18)
- #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.8)
- #	    You must set RUBY_VER_LONG when change RUBY_VER.
-+#	    You must set RUBY_API_VER to RUBY_VER_LONG.
-+#	    Don't set ruby API version to RUBY_VER like 191.
- #
- #	Tcl interface:
- #	  TCL=[Path to Tcl directory]
-@@ -87,6 +92,8 @@
- #       Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
- #
- #       XPM Image Support: XPM=[path to XPM directory]
-+#       Default is "xpm", using the files included in the distribution.
-+#       Use "no" to disable this feature.
- #
- #       Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
- #
-@@ -209,6 +216,7 @@
- # We're on Windows 95
- CPU = i386
- !endif # !PROCESSOR_ARCHITECTURE
-+OBJDIR = $(OBJDIR)$(CPU)
- 
- # Build a retail version by default
- 
-@@ -222,7 +230,12 @@
- 
- # Get all sorts of useful, standard macros from the Platform SDK.
- 
-+!ifdef SDK_INCLUDE_DIR
-+!include $(SDK_INCLUDE_DIR)\Win32.mak
-+!else
- !include <Win32.mak>
-+!endif
-+
- 
- # Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
- WP64CHECK = /Wp64
-@@ -277,13 +290,23 @@
- NETBEANS_LIB	= WSock32.lib
- !endif
- 
--!ifdef XPM
-+!ifndef XPM
-+# XPM is not set, use the included xpm files, depending on the architecture.
-+!if "$(CPU)" == "AMD64"
-+XPM = xpm\x64
-+!elseif "$(CPU)" == "i386"
-+XPM = xpm\x86
-+!else
-+XPM = no
-+!endif
-+!endif
-+!if "$(XPM)" != "no"
- # XPM - Include support for XPM signs
--# you can get xpm.lib from http://iamphet.nm.ru/xpm or create it yourself
-+# See the xpm directory for more information.
- XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
- XPM_DEFS  = -DFEAT_XPM_W32
- XPM_LIB   = $(XPM)\lib\libXpm.lib
--XPM_INC	  = -I $(XPM)\include
-+XPM_INC	  = -I $(XPM)\include -I $(XPM)\..\include
- !endif
- !endif
- 
-@@ -350,6 +373,10 @@
- MSVCVER = 6.0
- CPU = ix86
- !endif
-+!if "$(_NMAKE_VER)" == "6.00.9782.0"
-+MSVCVER = 6.0
-+CPU = ix86
-+!endif
- !if "$(_NMAKE_VER)" == "7.00.9466"
- MSVCVER = 7.0
- !endif
-@@ -380,8 +407,11 @@
- !if "$(_NMAKE_VER)" == "10.00.30319.01"
- MSVCVER = 10.0
- !endif
--!if "$(_NMAKE_VER)" == "9.00.30729.01"
--MSVCVER = 9.0
-+!if "$(_NMAKE_VER)" == "10.00.40219.01"
-+MSVCVER = 10.0
-+!endif
-+!if "$(_NMAKE_VER)" == "11.00.50727.1"
-+MSVCVER = 11.0
- !endif
- !endif
- 
-@@ -397,7 +427,7 @@
- !endif
- 
- # Convert processor ID to MVC-compatible number
--!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0")
-+!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") && ("$(MSVCVER)" != "11.0")
- !if "$(CPUNR)" == "i386"
- CPUARG = /G3
- !elseif "$(CPUNR)" == "i486"
-@@ -412,8 +442,8 @@
- CPUARG =
- !endif
- !else
--# VC8/9 only allows specifying SSE architecture
--!if "$(CPUNR)" == "pentium4"
-+# VC8/9/10 only allows specifying SSE architecture but only for 32bit
-+!if "$(ASSEMBLY_ARCHITECTURE)" == "x86" && "$(CPUNR)" == "pentium4"
- CPUARG = /arch:SSE2
- !endif
- !endif
-@@ -431,7 +461,7 @@
- OPTFLAG = /Ox
- !endif
- 
--!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
-+!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
- # Use link time code generation if not worried about size
- !if "$(OPTIMIZE)" != "SPACE"
- OPTFLAG = $(OPTFLAG) /GL
-@@ -619,7 +649,7 @@
- 		-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
- TCL_OBJ	= $(OUTDIR)\if_tcl.obj
- TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
--TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
-+TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
- !else
- CFLAGS  = $(CFLAGS) -DFEAT_TCL
- TCL_OBJ	= $(OUTDIR)\if_tcl.obj
-@@ -705,12 +735,18 @@
- MZSCHEME_VER = 205_000
- !endif
- CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include
--!if EXIST("$(MZSCHEME)\collects\scheme\base.ss")
--# for MzScheme 4.x we need to include byte code for basic Scheme stuff
-+!if EXIST("$(MZSCHEME)\collects\scheme\base.ss") \
-+	|| EXIST("$(MZSCHEME)\collects\scheme\base.rkt") 
-+# for MzScheme >= 4 we need to include byte code for basic Scheme stuff
- MZSCHEME_EXTRA_DEP = mzscheme_base.c
- CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE
- !endif
--!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \
-+!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
-+MZSCHEME_MAIN_LIB=mzsch
-+!else
-+MZSCHEME_MAIN_LIB=racket
-+!endif
-+!if EXIST("$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib") \
- 	&& !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib")
- !message Building with Precise GC
- MZSCHEME_PRECISE_GC = yes
-@@ -722,7 +758,7 @@
- !endif
- !message MzScheme DLLs will be loaded dynamically
- CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \
--		-DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" \
-+		-DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
- 		-DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
- !else
- !if "$(MZSCHEME_DEBUG)" == "yes"
-@@ -730,13 +766,15 @@
- !endif
- !if "$(MZSCHEME_PRECISE_GC)" == "yes"
- # Precise GC does not use separate dll
--MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
-+MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
- !else
- MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \
--		$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
-+		$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
- !endif
- !endif
- MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
-+# increase stack size
-+MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
- !endif
- 
- # Perl interface
-@@ -782,6 +820,11 @@
- PERL_INC = /I $(PERL_INCDIR)
- PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
- XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
-+!if exist($(XSUBPP))
-+XSUBPP = $(PERL_EXE) $(XSUBPP)
-+!else
-+XSUBPP = xsubpp
-+!endif
- XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
- 
- !endif
-@@ -797,28 +840,31 @@
- !ifndef RUBY_VER_LONG
- RUBY_VER_LONG = 1.8
- !endif
-+!ifndef RUBY_API_VER
-+RUBY_API_VER = $(RUBY_VER_LONG:.=)
-+!endif
- 
- !if $(RUBY_VER) >= 18
- !ifndef RUBY_PLATFORM
- RUBY_PLATFORM = i386-mswin32
- !endif
- !ifndef RUBY_INSTALL_NAME
--RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
-+RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
- !endif
- !else
- !ifndef RUBY_PLATFORM
- RUBY_PLATFORM = i586-mswin32
- !endif
- !ifndef RUBY_INSTALL_NAME
--RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
-+RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
- !endif
- !endif # $(RUBY_VER) >= 18
- 
- !message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
- CFLAGS = $(CFLAGS) -DFEAT_RUBY
- RUBY_OBJ = $(OUTDIR)\if_ruby.obj
--!if $(RUBY_VER) >= 190
--RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)"
-+!if $(RUBY_VER) >= 19
-+RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
- !else
- RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
- !endif
-@@ -880,7 +926,7 @@
- 
- # Report link time code generation progress if used. 
- !ifdef NODEBUG
--!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
-+!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
- !if "$(OPTIMIZE)" != "SPACE"
- LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
- !endif
-@@ -1038,7 +1084,7 @@
- 	$(CC) $(CFLAGS) $(LUA_INC) if_lua.c
- 
- if_perl.c : if_perl.xs typemap
--	$(PERL_EXE) $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
-+	$(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
- 		-typemap typemap if_perl.xs > if_perl.c
- 
- $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c  $(INCL)
-@@ -1156,6 +1202,10 @@
- E0_CFLAGS = $(CFLAGS:\=\\)
- E_CFLAGS = $(E0_CFLAGS:"=\")
- # ") stop the string
-+# $LINKARGS2 may contain backslashes and double quotes, escape them both.
-+E0_LINKARGS2 = $(LINKARGS2:\=\\)
-+E_LINKARGS2 = $(E0_LINKARGS2:"=\")
-+# ") stop the string
- 
- $(PATHDEF_SRC): auto
- 	@echo creating $(PATHDEF_SRC)
-@@ -1164,7 +1214,7 @@
- 	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
- 	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
- 	@echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
--	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(LINKARGS2:\=\\)"; >> $(PATHDEF_SRC)
-+	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
- 	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
- 	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
- 
-diff -Naur vim73.orig/src/Make_ro.mak vim73/src/Make_ro.mak
---- vim73.orig/src/Make_ro.mak	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/Make_ro.mak	1970-01-01 00:00:00.000000000 +0000
-@@ -1,135 +0,0 @@
--#
--# Makefile for Vim on RISC OS - Andy Wingate
--#
--
--GCC         = gcc -mthrowback
--CFLAGS     = -DRISCOS -DFEAT_GUI
--CC         = $(GCC) $(CFLAGS) -O2
--# -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c
--
--TERMFLAG   = -DUP_BC_PC_EXTERN
--
--ASMFLAGS   = -throwback -objasm -gcc
--
--OBJS =  o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2  \
--	o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar \
--	o.hardcopy o.hashtab o.main o.mark o.mbyte  \
--	o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move     \
--	o.normal o.ops o.option o.popupmnu o.quickfix o.regexp o.screen \
--	o.search   \
--	o.spell o.syntax o.tag o.term o.termlib o.ui o.undo o.version	\
--	o.window o.os_riscos o.swis o.gui o.gui_riscos
--
--Vim: $(OBJS)
--	$(GCC) -o Vim $(OBJS)
--
--install: Vim
--	squeeze -v Vim @.!Vim.Vim
--
--clean:	
--	create o.!fake! 0
--	wipe o.* ~cf
--	remove Vim
--
--o.swis: s.swis
--	as $(ASMFLAGS) -o o.swis s.swis
--
--# Rules for object files
--
--o.%:	c.%
--	$(CC) -c $< -o $@
--
--o.buffer:	c.buffer
--
--o.charset:	c.charset
--
--o.digraph:	c.digraph
--
--o.diff:		c.diff
--
--o.edit:		c.edit
--
--o.eval:		c.eval
--
--o.ex_cmds:	c.ex_cmds
--
--o.ex_cmds2:	c.ex_cmds2
--
--o.ex_docmd:	c.ex_docmd
--
--o.ex_eval:	c.ex_eval
--
--o.ex_getln:	c.ex_getln
--
--o.fileio:	c.fileio
--
--o.fold:		c.fold
--
--o.getchar:	c.getchar
--
--o.hardcopy:	c.hardcopy
--
--o.hashtab:	c.hashtab
--
--o.gui:		c.gui
--
--o.gui_riscos:	c.gui_riscos
--
--o.main:		c.main
--
--o.mark:		c.mark
--
--o.mbyte:	c.mbyte
--
--o.memfile:	c.memfile
--
--o.memline:	c.memline
--
--o.menu:		c.menu
--
--o.message:	c.message
--
--o.misc1:	c.misc1
--
--o.misc2:	c.misc2
--
--o.move:		c.move
--
--o.normal:	c.normal
--
--o.ops:		c.ops
--
--o.option:	c.option
--
--o.os_riscos:	c.os_riscos
--
--o.pty:		c.pty
--
--o.popupmnu:	c.popupmnu
--
--o.quickfix:	c.quickfix
--
--o.regexp:	c.regexp
--
--o.screen:	c.screen
--
--o.search:	c.search
--
--o.spell:	c.spell
--
--o.syntax:	c.syntax
--
--o.tag:		c.tag
--
--o.term:		c.term
--	$(CC) $(TERMFLAG) -c c.term -o o.term
--
--o.termlib:	c.termlib
--
--o.ui:		c.ui
--
--o.undo:		c.undo
--
--o.version:	c.version
--
--o.window:	c.window
-diff -Naur vim73.orig/src/Makefile vim73/src/Makefile
---- vim73.orig/src/Makefile	2010-08-15 12:56:15.000000000 +0000
-+++ vim73/src/Makefile	2012-11-01 20:35:47.000000000 +0000
-@@ -29,7 +29,7 @@
- #	- Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
- #	  want to disable using X11 libraries.	This speeds up starting Vim,
- #	  but the window title will not be set and the X11 selection can not
--#	  used.
-+#	  be used.
- #	- Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
- #	  X11 Session Management Protocol (XSMP) library (libSM) but do not
- #	  want to use it.
-@@ -283,12 +283,13 @@
- 
- ######################## auto/config.mk ######################## {{{1
- # At this position auto/config.mk is included. When starting from the
--# distribution it is almost empty. After running auto/configure it contains
--# settings that have been discovered for your system. Settings below this
--# include override settings in auto/config.mk!
--
--# Note: if auto/config.mk is lost somehow (e.g., because configure was
--# interrupted), create an empty auto/config.mk file and do "make config".
-+# toplevel Makefile it is almost empty. After running auto/configure it
-+# contains settings that have been discovered for your system. Settings below
-+# this include override settings in auto/config.mk!
-+
-+# Note: If make fails because auto/config.mk does not exist (it is not
-+# included in the repository), do:
-+#    cp config.mk.dist auto/config.mk
- 
- # (X) How to include auto/config.mk depends on the version of "make" you have,
- #     if the current choice doesn't work, try the other one.
-@@ -388,6 +389,11 @@
- #CONF_OPT_PLTHOME  = --with-plthome=/usr/local/drscheme
- #CONF_OPT_PLTHOME  = --with-plthome=/home/me/mz
- 
-+# Uncomment the next line to fail if one of the requested language interfaces
-+# cannot be configured.  Without this Vim will be build anyway, without
-+# the failing interfaces.
-+#CONF_OPT_FAIL = --enable-fail-if-missing
-+
- # PERL
- # Uncomment one of these when you want to include the Perl interface.
- # First one is for static linking, second one for dynamic loading.
-@@ -414,12 +420,16 @@
- # However, this may still cause problems, such as "import termios" failing.
- # Build two separate versions of Vim in that case.
- #CONF_OPT_PYTHON = --enable-pythoninterp
-+#CONF_OPT_PYTHON = --enable-pythoninterp=dynamic
- #CONF_OPT_PYTHON3 = --enable-python3interp
-+#CONF_OPT_PYTHON3 = --enable-python3interp=dynamic
- 
- # RUBY
- # Uncomment this when you want to include the Ruby interface.
-+# First one for static linking, second one for loading when used.
- # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu).
- #CONF_OPT_RUBY = --enable-rubyinterp
-+#CONF_OPT_RUBY = --enable-rubyinterp=dynamic
- #CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1
- 
- # TCL
-@@ -556,8 +566,8 @@
- #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
- 
- # Use this with GCC to check for mistakes, unused arguments, etc.
--#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1 -DU_DEBUG
--#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
-+#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
-+#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DU_DEBUG
- #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
- #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
- 
-@@ -589,8 +599,9 @@
- 
- # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
- # Might not work with GUI or Perl.
--# For unknown reasons adding "-lc" fixes a linking problem with GCC.  That's
--# probably a bug in the "-pg" implementation.
-+# For unknown reasons adding "-lc" fixes a linking problem with some versions
-+# of GCC.  That's probably a bug in the "-pg" implementation.
-+# After running Vim see the profile result with: gmon vim gmon.out | vim -
- # Need to recompile everything after changing this: "make clean" "make".
- #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING
- #PROFILE_LIBS = -pg
-@@ -601,8 +612,8 @@
- # Configuration is in the .ccmalloc or ~/.ccmalloc file.
- # Doesn't work very well, since memory linked to from global variables
- # (in libraries) is also marked as leaked memory.
--#PROFILE_CFLAGS = -DEXITFREE
--#PROFILE_LIBS = -lccmalloc
-+#LEAK_CFLAGS = -DEXITFREE
-+#LEAK_LIBS = -lccmalloc
- 
- #####################################################
- ###  Specific systems, check if yours is listed!  ### {{{
-@@ -724,12 +735,6 @@
- ### USL for Unix Systems Laboratories (SYSV 4.2)
- #EXTRA_DEFS = -DUSL
- 
--### RISCos on MIPS without X11
--#EXTRA_DEFS = -DMIPS
--
--### RISCos on MIPS with X11
--#EXTRA_LIBS = -lsun
--
- ### (6)  A/UX 3.1.1 with gcc (Jim Jagielski)
- #CC= gcc -D_POSIX_SOURCE
- #CFLAGS= -O2
-@@ -870,6 +875,10 @@
- #CFLAGS = -O -Qtarget=m88110compat
- #EXTRA_LIBS = -lgen
- 
-+# The value of QUOTESED comes from auto/config.mk.
-+# Uncomment the next line to use the default value.
-+# QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
-+
- ##################### end of system specific lines ################### }}}
- 
- ### Names of the programs and targets  {{{1
-@@ -1047,8 +1056,9 @@
- INSTALL_DATA	= cp
- INSTALL_DATA_R	= cp -r
- 
--### Program to run on installed binary
-+### Program to run on installed binary.  Use the second one to disable strip.
- #STRIP = strip
-+#STRIP = /bin/true
- 
- ### Permissions for binaries  {{{1
- BINMOD = 755
-@@ -1321,15 +1331,15 @@
- .SUFFIXES: .c .o .pro
- 
- PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
--POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS)
-+POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
- 
--ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
-+ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(LEAK_CFLAGS) $(POST_DEFS)
- 
- # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together
- # with "-E".
- OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
- 
--LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
-+LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
- 
- LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
- 
-@@ -1352,7 +1362,8 @@
- 	   $(PYTHON3_LIBS) \
- 	   $(TCL_LIBS) \
- 	   $(RUBY_LIBS) \
--	   $(PROFILE_LIBS)
-+	   $(PROFILE_LIBS) \
-+	   $(LEAK_LIBS)
- 
- # abbreviations
- DEST_BIN = $(DESTDIR)$(BINDIR)
-@@ -1474,8 +1485,15 @@
- 	    if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
- 	    gui_beval.c workshop.c wsdebug.c integration.c netbeans.c
- 
-+# Unittest files
-+MEMFILE_TEST_SRC = memfile_test.c
-+MEMFILE_TEST_TARGET = memfile_test$(EXEEXT)
-+
-+UNITTEST_SRC = $(MEMFILE_TEST_SRC)
-+UNITTEST_TARGETS = $(MEMFILE_TEST_TARGET)
-+
- # All sources, also the ones that are not configured
--ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC)
-+ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
- 
- # Which files to check with lint.  Select one of these three lines.  ALL_SRC
- # checks more, but may not work well for checking a GUI that wasn't configured.
-@@ -1486,7 +1504,7 @@
- #LINT_SRC = $(ALL_SRC)
- #LINT_SRC = $(BASIC_SRC)
- 
--OBJ = \
-+OBJ_COMMON = \
- 	objects/buffer.o \
- 	objects/blowfish.o \
- 	objects/charset.o \
-@@ -1507,10 +1525,8 @@
- 	$(HANGULIN_OBJ) \
- 	objects/if_cscope.o \
- 	objects/if_xcmdsrv.o \
--	objects/main.o \
- 	objects/mark.o \
--	objects/memfile.o \
--	objects/memline.o \
-+        objects/memline.o \
- 	objects/menu.o \
- 	objects/message.o \
- 	objects/misc1.o \
-@@ -1535,6 +1551,7 @@
- 	objects/term.o \
- 	objects/ui.o \
- 	objects/undo.o \
-+	objects/version.o \
- 	objects/window.o \
- 	$(GUI_OBJ) \
- 	$(LUA_OBJ) \
-@@ -1549,6 +1566,13 @@
- 	$(NETBEANS_OBJ) \
- 	$(WSDEBUG_OBJ)
- 
-+OBJ = $(OBJ_COMMON) \
-+	objects/main.o \
-+	objects/memfile.o
-+
-+MEMFILE_TEST_OBJ = $(OBJ_COMMON) \
-+        objects/memfile_test.o
-+
- PRO_AUTO = \
- 	blowfish.pro \
- 	buffer.pro \
-@@ -1612,7 +1636,7 @@
- RSRC_DIR = os_mac_rsrc
- 
- PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
--	os_mswin.pro os_beos.pro os_vms.pro os_riscos.pro $(PERL_PRO)
-+	os_mswin.pro os_beos.pro os_vms.pro $(PERL_PRO)
- 
- # Default target is making the executable and tools
- all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
-@@ -1633,7 +1657,8 @@
- 		CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
- 		LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
- 		./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
--		$(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
-+		$(CONF_OPT_DARWIN) $(CONF_OPT_FAIL) \
-+		$(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
- 		$(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
- 		$(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
- 		$(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
-@@ -1694,11 +1719,12 @@
- $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
- 	$(CCC) version.c -o objects/version.o
- 	@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
--		-o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \
--		MAKE="$(MAKE)" sh $(srcdir)/link.sh
-+		-o $(VIMTARGET) $(OBJ) $(ALL_LIBS)" \
-+		MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
-+		sh $(srcdir)/link.sh
- 
- xxd/xxd$(EXEEXT): xxd/xxd.c
--	cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
-+	cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
- 		$(MAKE) -f Makefile
- 
- # Build the language specific files if they were unpacked.
-@@ -1818,6 +1844,15 @@
- 		ln -s $(VIMTARGET) vim; \
- 	fi
- 	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
-+	$(MAKE) -f Makefile unittest
-+
-+unittesttargets:
-+	$(MAKE) -f Makefile $(UNITTEST_TARGETS)
-+
-+unittest unittests: $(UNITTEST_TARGETS)
-+	@for t in $(UNITTEST_TARGETS); do \
-+		./$$t || exit 1; echo $$t passed; \
-+	done
- 
- testclean:
- 	cd testdir; $(MAKE) -f Makefile clean
-@@ -1825,6 +1860,17 @@
- 		cd $(PODIR); $(MAKE) checkclean; \
- 	fi
- 
-+# Unittests
-+# It's build just like Vim to satisfy all dependencies.
-+$(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ)
-+	$(CCC) version.c -o objects/version.o
-+	@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
-+		-o $(MEMFILE_TEST_TARGET) $(MEMFILE_TEST_OBJ) $(ALL_LIBS)" \
-+		MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
-+		sh $(srcdir)/link.sh
-+
-+# install targets
-+
- install: $(GUI_INSTALL)
- 
- install_normal: installvim installtools $(INSTALL_LANGS) install-icons
-@@ -2258,6 +2304,7 @@
- 	-rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
- 	-rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
- 	-rm -f conftest* *~ auto/link.sed
-+	-rm -f $(UNITTEST_TARGETS)
- 	-rm -f runtime pixmaps
- 	-rm -rf $(APPDIR)
- 	-rm -rf mzscheme_base.c
-@@ -2291,6 +2338,7 @@
- 				 ../../testdir/vimrc.unix \
- 				 ../../testdir/*.in \
- 				 ../../testdir/*.vim \
-+				 ../../testdir/test83-tags? \
- 				 ../../testdir/*.ok .
- 
- # Link needed for doing "make install" in a shadow directory.
-@@ -2367,7 +2415,6 @@
- auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
- 	CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
- 
--QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
- auto/pathdef.c: Makefile auto/config.mk
- 	-@echo creating $@
- 	-@echo '/* pathdef.c */' > $@
-@@ -2512,19 +2559,11 @@
- objects/if_perlsfio.o: if_perlsfio.c
- 	$(CCC) $(PERL_CFLAGS) -o $@ if_perlsfio.c
- 
--objects/py_config.o: $(PYTHON_CONFDIR)/config.c
--	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/config.c \
--		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
--
- objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c
- 	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/getpath.c \
- 		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \
- 		$(PYTHON_GETPATH_CFLAGS)
- 
--objects/py3_config.o: $(PYTHON3_CONFDIR)/config.c
--	$(CCC) $(PYTHON3_CFLAGS) -o $@ $(PYTHON3_CONFDIR)/config.c \
--		-I$(PYTHON3_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
--
- objects/if_python.o: if_python.c if_py_both.h
- 	$(CCC) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c
- 
-@@ -2532,7 +2571,7 @@
- 	$(CCC) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c
- 
- objects/if_ruby.o: if_ruby.c
--	$(CCC) -o $@ if_ruby.c
-+	$(CCC) $(RUBY_CFLAGS) -o $@ if_ruby.c
- 
- objects/if_sniff.o: if_sniff.c
- 	$(CCC) -o $@ if_sniff.c
-@@ -2552,6 +2591,9 @@
- objects/memfile.o: memfile.c
- 	$(CCC) -o $@ memfile.c
- 
-+objects/memfile_test.o: memfile_test.c
-+	$(CCC) -o $@ memfile_test.c
-+
- objects/memline.o: memline.c
- 	$(CCC) -o $@ memline.c
- 
-@@ -2870,7 +2912,7 @@
- objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
-  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
-  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
-- arabic.h if_mzsch.h os_unixx.h
-+ arabic.h os_unixx.h
- objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \
-  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
-  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
-@@ -3009,6 +3051,10 @@
- objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
-  keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \
-  proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h arabic.h
-+objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
-+ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
-+ structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h \
-+ proto.h globals.h farsi.h arabic.h farsi.c arabic.c memfile.c
- objects/hangulin.o: hangulin.c vim.h auto/config.h feature.h os_unix.h \
-  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
-  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
-@@ -3020,7 +3066,7 @@
- objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \
-  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
-  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
-- globals.h farsi.h arabic.h if_mzsch.h mzscheme_base.c
-+ globals.h farsi.h arabic.h if_mzsch.h
- objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \
-  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
-  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
-@@ -3041,7 +3087,7 @@
-  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
-  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
-  arabic.h
--objects/if_ruby.o: if_ruby.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
-+objects/if_ruby.o: if_ruby.c auto/config.h vim.h feature.h os_unix.h auto/osdef.h \
-  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
-  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
-  arabic.h version.h
-diff -Naur vim73.orig/src/VisVim/Commands.cpp vim73/src/VisVim/Commands.cpp
---- vim73.orig/src/VisVim/Commands.cpp	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/VisVim/Commands.cpp	2012-11-01 20:35:43.000000000 +0000
-@@ -549,7 +549,7 @@
- 	if (g_bNewTabs)
- 	{
- 		sprintf(VimCmd, ":tab drop ");
--		s = VimCmd + 11;
-+		s = VimCmd + 10;
- 	}
- 	else
- 	{
-@@ -557,8 +557,7 @@
- 		s = VimCmd + 6;
- 	}
- 	sprintf(FileNameTmp, "%S", (char *)FileName);
--	for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
--									  ++p)
-+	for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
- 		if (*p == '\\')
- 			*s++ = '/';
- 		else
-diff -Naur vim73.orig/src/arabic.c vim73/src/arabic.c
---- vim73.orig/src/arabic.c	2010-05-15 11:04:09.000000000 +0000
-+++ vim73/src/arabic.c	2012-11-01 20:35:46.000000000 +0000
-@@ -1066,7 +1066,7 @@
- 
-     if (curr_c != c && ccp != NULL)
-     {
--	char_u buf[MB_MAXBYTES];
-+	char_u buf[MB_MAXBYTES + 1];
- 
- 	/* Update the first byte of the character. */
- 	(*mb_char2bytes)(curr_c, buf);
-diff -Naur vim73.orig/src/ascii.h vim73/src/ascii.h
---- vim73.orig/src/ascii.h	2010-05-15 11:04:07.000000000 +0000
-+++ vim73/src/ascii.h	2012-11-01 20:35:44.000000000 +0000
-@@ -123,7 +123,7 @@
- #define DCS		0x90	/* Device Control String */
- #define STERM		0x9c	/* String Terminator */
- 
--#define POUND		'£'
-+#define POUND		0xB1
- 
- #define CTRL_F_STR	"\056"
- #define CTRL_H_STR	"\026"
-@@ -183,11 +183,6 @@
- # define PATHSEP	psepc
- # define PATHSEPSTR	pseps
- #else
--# ifdef RISCOS
--#  define PATHSEP	'.'
--#  define PATHSEPSTR	"."
--# else
--#  define PATHSEP	'/'
--#  define PATHSEPSTR	"/"
--# endif
-+# define PATHSEP	'/'
-+# define PATHSEPSTR	"/"
- #endif
-diff -Naur vim73.orig/src/auto/config.mk vim73/src/auto/config.mk
---- vim73.orig/src/auto/config.mk	2010-08-15 13:02:25.000000000 +0000
-+++ vim73/src/auto/config.mk	1970-01-01 00:00:00.000000000 +0000
-@@ -1,5 +0,0 @@
--the first targets to make vim are: scratch config myself
--srcdir = .
--VIMNAME = vim
--EXNAME = ex
--VIEWNAME = view
-diff -Naur vim73.orig/src/auto/configure vim73/src/auto/configure
---- vim73.orig/src/auto/configure	2010-08-13 14:17:15.000000000 +0000
-+++ vim73/src/auto/configure	2012-11-01 20:35:48.000000000 +0000
-@@ -593,6 +593,7 @@
- 
- ac_subst_vars='LTLIBOBJS
- LIBOBJS
-+LINK_AS_NEEDED
- DEPEND_CFLAGS_FILTER
- MAKEMO
- MSGFMT
-@@ -740,6 +741,7 @@
- ac_subst_files=''
- ac_user_opts='
- enable_option_checking
-+enable_fail_if_missing
- enable_darwin
- with_mac_arch
- with_developer_dir
-@@ -1417,6 +1419,8 @@
-   --disable-option-checking  ignore unrecognized --enable/--with options
-   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-+  --enable-fail-if-missing    Fail if dependencies on additional features
-+     specified on the command line are missing.
-   --disable-darwin        Disable Darwin (Mac OS X) support.
-   --disable-selinux	  Don't check for SELinux support.
-   --disable-xsmp          Disable XSMP session management
-@@ -1427,7 +1431,7 @@
-   --enable-pythoninterp=OPTS   Include Python interpreter. default=no OPTS=no/yes/dynamic
-   --enable-python3interp=OPTS   Include Python3 interpreter. default=no OPTS=no/yes/dynamic
-   --enable-tclinterp      Include Tcl interpreter.
--  --enable-rubyinterp     Include Ruby interpreter.
-+  --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no OPTS=no/yes/dynamic
-   --enable-cscope         Include cscope interface.
-   --enable-workshop       Include Sun Visual Workshop support.
-   --disable-netbeans      Disable NetBeans integration support.
-@@ -3948,6 +3952,19 @@
- fi
- 
- 
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing argument" >&5
-+$as_echo_n "checking --enable-fail-if-missing argument... " >&6; }
-+# Check whether --enable-fail_if_missing was given.
-+if test "${enable_fail_if_missing+set}" = set; then :
-+  enableval=$enable_fail_if_missing; fail_if_missing="yes"
-+else
-+  fail_if_missing="no"
-+fi
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $fail_if_missing" >&5
-+$as_echo "$fail_if_missing" >&6; }
-+
- if test -z "$CFLAGS"; then
-   CFLAGS="-O"
-   test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
-@@ -4409,15 +4426,18 @@
- 		  echo ""
- 		  echo "------------------------------------------"
- 		  echo " On z/OS Unix, the environment variable"
--		  echo " __CC_${ccn}MODE must be set to \"1\"!"
-+		  echo " _CC_${ccn}MODE must be set to \"1\"!"
- 		  echo " Do:"
- 		  echo "    export _CC_${ccn}MODE=1"
- 		  echo " and then call configure again."
- 		  echo "------------------------------------------"
- 		  exit 1
- 		fi
--		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
--                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
-+		# Set CFLAGS for configure process.
-+		# This will be reset later for config.mk.
-+		# Use haltonmsg to force error for missing H files.
-+		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
-+		LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
- 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
- $as_echo "yes" >&6; }
- 		;;
-@@ -4628,15 +4648,7 @@
- 
-   LUA_INC=
-   if test "X$vi_cv_path_lua_pfx" != "X"; then
--    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
--$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
--    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
--      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
--$as_echo "yes" >&6; }
--    else
--      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
--$as_echo "no" >&6; }
--            # Extract the first word of "lua", so it can be a program name with args.
-+        # Extract the first word of "lua", so it can be a program name with args.
- set dummy lua; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
- $as_echo_n "checking for $ac_word... " >&6; }
-@@ -4676,8 +4688,8 @@
- fi
- 
- 
--      if test "X$vi_cv_path_lua" != "X"; then
--                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
-+    if test "X$vi_cv_path_lua" != "X"; then
-+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
- $as_echo_n "checking Lua version... " >&6; }
- if test "${vi_cv_version_lua+set}" = set; then :
-   $as_echo_n "(cached) " >&6
-@@ -4686,23 +4698,31 @@
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua" >&5
- $as_echo "$vi_cv_version_lua" >&6; }
--        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
-+    fi
-+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
-+$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
-+    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+    else
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
- $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; }
--        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
--          { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+      if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
-+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
- $as_echo "yes" >&6; }
--          LUA_INC=/lua$vi_cv_version_lua
--        else
--          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+        LUA_INC=/lua$vi_cv_version_lua
-+      else
-+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
--          vi_cv_path_lua_pfx=
--        fi
-+        vi_cv_path_lua_pfx=
-       fi
-     fi
-   fi
- 
-   if test "X$vi_cv_path_lua_pfx" != "X"; then
--    if test "X$vi_cv_version_lua" != "X"; then
-+    if test "X$LUA_INC" != "X"; then
-             LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
-     else
-       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
-@@ -4714,18 +4734,26 @@
-     $as_echo "#define FEAT_LUA 1" >>confdefs.h
- 
-     if test "$enable_luainterp" = "dynamic"; then
--                  for i in 0 1 2 3 4 5 6 7 8 9; do
--	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
--	  LUA_SONAME=".$i"
--	  break
--	fi
--      done
-+      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
-+	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
-+      else
-+			for i in 0 1 2 3 4 5 6 7 8 9; do
-+	  if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
-+	    LUA_SONAME=".$i"
-+	    break
-+	  fi
-+	done
-+	vi_cv_dll_name_lua="liblua${vi_cv_version_lua}.so$LUA_SONAME"
-+      fi
-       $as_echo "#define DYNAMIC_LUA 1" >>confdefs.h
- 
-       LUA_LIBS=""
--      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
-+      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
-     fi
-   fi
-+  if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
-+    as_fn_error "could not configure lua" "$LINENO" 5
-+  fi
- 
- 
- 
-@@ -4862,16 +4890,36 @@
-       else
- 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
--	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
--$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
--	if test -f /usr/include/plt/scheme.h; then
-+	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket" >&5
-+$as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket... " >&6; }
-+	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
- 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
- $as_echo "yes" >&6; }
--	  SCHEME_INC=/usr/include/plt
-+	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
- 	else
- 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
--	  vi_cv_path_mzscheme_pfx=
-+	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
-+$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
-+	  if test -f /usr/include/plt/scheme.h; then
-+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+	    SCHEME_INC=/usr/include/plt
-+	  else
-+	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/racket/" >&5
-+$as_echo_n "checking if scheme.h can be found in /usr/include/racket/... " >&6; }
-+	    if test -f /usr/include/racket/scheme.h; then
-+	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+	      SCHEME_INC=/usr/include/racket
-+	    else
-+	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+	      vi_cv_path_mzscheme_pfx=
-+	    fi
-+	  fi
- 	fi
-       fi
-     fi
-@@ -4883,12 +4931,22 @@
-     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
-       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
-       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
--    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
-+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
-+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
-+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
-+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
-+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
-       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
-     else
-             if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
-         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
- 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
-+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
-+	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
-+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
-       else
-         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
-       fi
-@@ -4901,10 +4959,20 @@
-     fi
-     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
-       SCHEME_COLLECTS=lib/plt/
-+    else
-+      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
-+	SCHEME_COLLECTS=lib/racket/
-+      fi
-     fi
-     if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
--            MZSCHEME_EXTRA="mzscheme_base.c"
--      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
-+      MZSCHEME_EXTRA="mzscheme_base.c"
-+    else
-+      if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
-+	MZSCHEME_EXTRA="mzscheme_base.c"
-+      fi
-+    fi
-+    if test "X$MZSCHEME_EXTRA" != "X" ; then
-+            MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
-       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
-     fi
-     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
-@@ -5099,6 +5167,10 @@
-       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
-     fi
-   fi
-+
-+  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
-+    as_fn_error "could not configure perl" "$LINENO" 5
-+  fi
- fi
- 
- 
-@@ -5263,6 +5335,7 @@
- 	@echo "python_LIBS='$(LIBS)'"
- 	@echo "python_SYSLIBS='$(SYSLIBS)'"
- 	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
-+	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
- 	@echo "python_INSTSONAME='$(INSTSONAME)'"
- eof
- 	    	    eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
-@@ -5283,22 +5356,21 @@
- fi
- 
- 
-+	if test "X$python_DLLLIBRARY" != "X"; then
-+	  python_INSTSONAME="$python_DLLLIBRARY"
-+	fi
- 	PYTHON_LIBS="${vi_cv_path_python_plibs}"
- 	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
--	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
-+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
- 	else
--	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
-+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
- 	fi
- 	PYTHON_SRC="if_python.c"
--		if test "x$MACOSX" = "xyes"; then
--	  PYTHON_OBJ="objects/if_python.o"
--	else
--	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
--	fi
-+	PYTHON_OBJ="objects/if_python.o"
- 	if test "${vi_cv_var_python_version}" = "1.4"; then
- 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
- 	fi
--	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
-+    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
- 
- 								{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
- $as_echo_n "checking if -pthread should be used... " >&6; }
-@@ -5388,6 +5460,10 @@
- $as_echo "too old" >&6; }
-     fi
-   fi
-+
-+  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
-+    as_fn_error "could not configure python" "$LINENO" 5
-+  fi
- fi
- 
- 
-@@ -5464,6 +5540,23 @@
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5
- $as_echo "$vi_cv_var_python3_version" >&6; }
- 
-+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
-+$as_echo_n "checking Python's abiflags... " >&6; }
-+if test "${vi_cv_var_python3_abiflags+set}" = set; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+
-+     vi_cv_var_python3_abiflags=
-+     if ${vi_cv_path_python3} -c \
-+         "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
-+     then
-+       vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
-+         "import sys; print(sys.abiflags)"`
-+     fi
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_abiflags" >&5
-+$as_echo "$vi_cv_var_python3_abiflags" >&6; }
-+
-         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
- $as_echo_n "checking Python's install prefix... " >&6; }
- if test "${vi_cv_path_python3_pfx+set}" = set; then :
-@@ -5514,9 +5607,13 @@
- else
- 
-      vi_cv_path_python3_conf=
-+     config_dir="config"
-+     if test "${vi_cv_var_python3_abiflags}" != ""; then
-+       config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
-+     fi
-      for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
-        for subdir in lib64 lib share; do
--         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
-+         d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
-          if test -d "$d" && test -f "$d/config.c"; then
-            vi_cv_path_python3_conf="$d"
-          fi
-@@ -5545,31 +5642,30 @@
- 	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
- 	@echo "python3_LIBS='$(LIBS)'"
- 	@echo "python3_SYSLIBS='$(SYSLIBS)'"
--	@echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
-+	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
- 	@echo "python3_INSTSONAME='$(INSTSONAME)'"
- eof
-                     eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
-           rm -f -- "${tmp_mkf}"
--          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
--          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
-+	  vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
-+          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
-                     vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
-           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
- 
- fi
- 
- 
-+      if test "X$python3_DLLLIBRARY" != "X"; then
-+	python3_INSTSONAME="$python3_DLLLIBRARY"
-+      fi
-       PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
-       if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
--        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
-+        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
-       else
--        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
-+        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
-       fi
-       PYTHON3_SRC="if_python3.c"
--            if test "x$MACOSX" = "xyes"; then
--        PYTHON3_OBJ="objects/if_python3.o"
--      else
--        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
--      fi
-+      PYTHON3_OBJ="objects/if_python3.o"
- 
-                                                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
- $as_echo_n "checking if -pthread should be used... " >&6; }
-@@ -5667,12 +5763,12 @@
- 
-   $as_echo "#define DYNAMIC_PYTHON3 1" >>confdefs.h
- 
--  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL" >&5
--$as_echo_n "checking whether we can do without RTLD_GLOBAL... " >&6; }
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python" >&5
-+$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python... " >&6; }
-   cflags_save=$CFLAGS
--  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-+  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
-   ldflags_save=$LDFLAGS
--  LDFLAGS="$LDFLAGS -ldl"
-+    LDFLAGS="-ldl $LDFLAGS"
-   if test "$cross_compiling" = yes; then :
-   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
- $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-@@ -5689,15 +5785,17 @@
-      * Only the first pyhton version used will be switched on.
-      */
- 
--    int no_rtl_global_needed_for(char *python_instsoname)
-+    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
-     {
-       int needed = 0;
-       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
-       if (pylib != 0)
-       {
-+          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
-           void (*init)(void) = dlsym(pylib, "Py_Initialize");
-           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
-           void (*final)(void) = dlsym(pylib, "Py_Finalize");
-+          (*pfx)(prefix);
-           (*init)();
-           needed = (*simple)("import termios") == -1;
-           (*final)();
-@@ -5709,7 +5807,7 @@
-     int main(int argc, char** argv)
-     {
-       int not_needed = 0;
--      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
-+      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
-             not_needed = 1;
-       return !not_needed;
-     }
-@@ -5726,8 +5824,76 @@
-   conftest.$ac_objext conftest.beam conftest.$ac_ext
- fi
- 
-+
-   CFLAGS=$cflags_save
-   LDFLAGS=$ldflags_save
-+
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python3" >&5
-+$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python3... " >&6; }
-+  cflags_save=$CFLAGS
-+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-+  ldflags_save=$LDFLAGS
-+    LDFLAGS="-ldl $LDFLAGS"
-+  if test "$cross_compiling" = yes; then :
-+  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-+as_fn_error "cannot run test program while cross compiling
-+See \`config.log' for more details." "$LINENO" 5; }
-+else
-+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+    #include <dlfcn.h>
-+    #include <wchar.h>
-+    /* If this program fails, then RTLD_GLOBAL is needed.
-+     * RTLD_GLOBAL will be used and then it is not possible to
-+     * have both python versions enabled in the same vim instance.
-+     * Only the first pyhton version used will be switched on.
-+     */
-+
-+    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
-+    {
-+      int needed = 0;
-+      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
-+      if (pylib != 0)
-+      {
-+          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
-+          void (*init)(void) = dlsym(pylib, "Py_Initialize");
-+          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
-+          void (*final)(void) = dlsym(pylib, "Py_Finalize");
-+          (*pfx)(prefix);
-+          (*init)();
-+          needed = (*simple)("import termios") == -1;
-+          (*final)();
-+          dlclose(pylib);
-+      }
-+      return !needed;
-+    }
-+
-+    int main(int argc, char** argv)
-+    {
-+      int not_needed = 0;
-+      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
-+            not_needed = 1;
-+      return !not_needed;
-+    }
-+_ACEOF
-+if ac_fn_c_try_run "$LINENO"; then :
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; };$as_echo "#define PY3_NO_RTLD_GLOBAL 1" >>confdefs.h
-+
-+else
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-+  conftest.$ac_objext conftest.beam conftest.$ac_ext
-+fi
-+
-+
-+  CFLAGS=$cflags_save
-+  LDFLAGS=$ldflags_save
-+
-   PYTHON_SRC="if_python.c"
-   PYTHON_OBJ="objects/if_python.o"
-   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
-@@ -6085,6 +6251,9 @@
- $as_echo "too old; need Tcl version 8.0 or later" >&6; }
-     fi
-   fi
-+  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
-+    as_fn_error "could not configure Tcl" "$LINENO" 5
-+  fi
- fi
- 
- 
-@@ -6103,20 +6272,20 @@
- 
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
- $as_echo "$enable_rubyinterp" >&6; }
--if test "$enable_rubyinterp" = "yes"; then
-+if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
- $as_echo_n "checking --with-ruby-command argument... " >&6; }
- 
-+
- # Check whether --with-ruby-command was given.
- if test "${with_ruby_command+set}" = set; then :
--  withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
-+  withval=$with_ruby_command; RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
- $as_echo "$RUBY_CMD" >&6; }
- else
-   RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
- $as_echo "defaulting to $RUBY_CMD" >&6; }
- fi
- 
--
-   # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
- set dummy $RUBY_CMD; ac_word=$2
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-@@ -6163,41 +6332,46 @@
-     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
- $as_echo "OK" >&6; }
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby rbconfig" >&5
-+$as_echo_n "checking Ruby rbconfig... " >&6; }
-+      ruby_rbconfig="RbConfig"
-+      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
-+	ruby_rbconfig="Config"
-+      fi
-+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ruby_rbconfig" >&5
-+$as_echo "$ruby_rbconfig" >&6; }
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby header files" >&5
- $as_echo_n "checking Ruby header files... " >&6; }
--      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null`
-+      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG['rubyhdrdir'] || $ruby_rbconfig::CONFIG['archdir'] || \\$hdrdir" 2>/dev/null`
-       if test "X$rubyhdrdir" != "X"; then
- 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
- $as_echo "$rubyhdrdir" >&6; }
- 	RUBY_CFLAGS="-I$rubyhdrdir"
--        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'`
-+        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['arch']"`
-         if test -d "$rubyhdrdir/$rubyarch"; then
-           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
-         fi
--        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'`
-+        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"`
-         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
--	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'`
-+	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LIBS']"`
- 	if test "X$rubylibs" != "X"; then
- 	  RUBY_LIBS="$rubylibs"
- 	fi
--	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
--	if test -f "$rubyhdrdir/$librubyarg"; then
--	  librubyarg="$rubyhdrdir/$librubyarg"
--	else
--	  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
--	  if test -f "$rubylibdir/$librubyarg"; then
--	    librubyarg="$rubylibdir/$librubyarg"
--	  elif test "$librubyarg" = "libruby.a"; then
--	    	    librubyarg="-lruby"
--	  else
--	    librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
--	  fi
-+	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBYARG'])"`
-+	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBY_A'])"`
-+  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['libdir'])"`
-+	if test -f "$rubylibdir/$librubya"; then
-+	  librubyarg="$librubyarg"
-+    RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
-+  elif test "$librubyarg" = "libruby.a"; then
-+        librubyarg="-lruby"
-+    RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
- 	fi
- 
- 	if test "X$librubyarg" != "X"; then
- 	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
- 	fi
--	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'`
-+	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`
- 	if test "X$rubyldflags" != "X"; then
- 	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
- 	  if test "X$rubyldflags" != "X"; then
-@@ -6209,6 +6383,13 @@
- 	RUBY_PRO="if_ruby.pro"
- 	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
- 
-+	if test "$enable_rubyinterp" = "dynamic"; then
-+	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_SO']"`
-+	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
-+
-+	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
-+	  RUBY_LIBS=
-+	fi
-       else
- 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found; disabling Ruby" >&5
- $as_echo "not found; disabling Ruby" >&6; }
-@@ -6218,6 +6399,10 @@
- $as_echo "too old; need Ruby version 1.6.0 or later" >&6; }
-     fi
-   fi
-+
-+  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
-+    as_fn_error "could not configure Ruby" "$LINENO" 5
-+  fi
- fi
- 
- 
-@@ -8528,8 +8713,13 @@
- if test -z "$SKIP_MOTIF"; then
-   cppflags_save=$CPPFLAGS
-   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
--  for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
--		   Xm/UnhighlightT.h Xm/Notebook.h
-+  if test "$zOSUnix" = "yes"; then
-+	xmheader="Xm/Xm.h"
-+  else
-+	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
-+  	   Xm/UnhighlightT.h Xm/Notebook.h"
-+  fi
-+  for ac_header in $xmheader
- do :
-   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
- ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-@@ -8544,7 +8734,7 @@
- done
- 
- 
--  if test $ac_cv_header_Xm_XpmP_h = yes; then
-+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
- $as_echo_n "checking for XpmAttributes_21 in Xm/XpmP.h... " >&6; }
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-@@ -9768,9 +9958,9 @@
- else
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty: automatic terminal library selection" >&5
- $as_echo "empty: automatic terminal library selection" >&6; }
--              case "`uname -s 2>/dev/null`" in
--	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
--	*)	tlibs="ncurses termlib termcap curses";;
-+                case "`uname -s 2>/dev/null`" in
-+	OSF1|SCO_SV)	tlibs="tinfo ncurses curses termlib termcap";;
-+	*)	tlibs="tinfo ncurses termlib termcap curses";;
-   esac
-   for libname in $tlibs; do
-     as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
-@@ -10462,7 +10652,7 @@
- fi
- 
- for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
--	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
-+	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
- 	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
- 	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
- 	sigvec strcasecmp strerror strftime stricmp strncasecmp \
-@@ -11159,7 +11349,47 @@
- rm -f core conftest.err conftest.$ac_objext \
-     conftest$ac_exeext conftest.$ac_ext
- 
--{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
-+$as_echo_n "checking for acl_get in -lsec... " >&6; }
-+if test "${ac_cv_lib_sec_acl_get+set}" = set; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  ac_check_lib_save_LIBS=$LIBS
-+LIBS="-lsec  $LIBS"
-+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+/* Override any GCC internal prototype to avoid an error.
-+   Use char because int might match the return type of a GCC
-+   builtin and then its argument prototype would still apply.  */
-+#ifdef __cplusplus
-+extern "C"
-+#endif
-+char acl_get ();
-+int
-+main ()
-+{
-+return acl_get ();
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+  ac_cv_lib_sec_acl_get=yes
-+else
-+  ac_cv_lib_sec_acl_get=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+    conftest$ac_exeext conftest.$ac_ext
-+LIBS=$ac_check_lib_save_LIBS
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
-+$as_echo "$ac_cv_lib_sec_acl_get" >&6; }
-+if test "x$ac_cv_lib_sec_acl_get" = x""yes; then :
-+  LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
-+
-+else
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
- $as_echo_n "checking for Solaris ACL support... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-@@ -11186,6 +11416,8 @@
- fi
- rm -f core conftest.err conftest.$ac_objext \
-     conftest$ac_exeext conftest.$ac_ext
-+fi
-+
- 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5
- $as_echo_n "checking for AIX ACL support... " >&6; }
-@@ -11642,7 +11874,8 @@
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
- $as_echo_n "checking uint32_t is 32 bits... " >&6; }
- if test "$cross_compiling" = yes; then :
--  as_fn_error "could not compile program using uint32_t." "$LINENO" 5
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
-+$as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
-@@ -11915,6 +12148,10 @@
- test -f tags && mv tags tags.save
- if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
-   TAGPRG="ctags -I INIT+ --fields=+S"
-+elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
-+  TAGPRG="exctags -I INIT+ --fields=+S"
-+elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
-+  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
- else
-   TAGPRG="ctags"
-   (eval etags	   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
-@@ -12344,10 +12581,10 @@
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
- $as_echo "no" >&6; }
-   fi
--        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
-+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
- $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
-   if test "$gccmajor" -gt "3"; then
--    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
-+    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
- $as_echo "yes" >&6; }
-   else
-@@ -12357,6 +12594,28 @@
- fi
- 
- 
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5
-+$as_echo_n "checking linker --as-needed support... " >&6; }
-+LINK_AS_NEEDED=
-+# Check if linker supports --as-needed and --no-as-needed options
-+if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
-+  LDFLAGS="$LDFLAGS -Wl,--as-needed"
-+  LINK_AS_NEEDED=yes
-+fi
-+if test "$LINK_AS_NEEDED" = yes; then
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-+$as_echo "yes" >&6; }
-+else
-+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-+$as_echo "no" >&6; }
-+fi
-+
-+
-+# IBM z/OS reset CFLAGS for config.mk
-+if test "$zOSUnix" = "yes"; then
-+	CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
-+fi
-+
- ac_config_files="$ac_config_files auto/config.mk:config.mk.in"
- 
- cat >confcache <<\_ACEOF
-diff -Naur vim73.orig/src/bigvim.bat vim73/src/bigvim.bat
---- vim73.orig/src/bigvim.bat	2010-07-18 19:22:17.000000000 +0000
-+++ vim73/src/bigvim.bat	2012-11-01 20:35:48.000000000 +0000
-@@ -1,3 +1,5 @@
- :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
--nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl512 DYNAMIC_PERL=yes PERL_VER=512 PYTHON=e:\python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=e:\python31 DYNAMIC_PYTHON3=yes PYTHON3_VER=31 RUBY=e:\ruby191 DYNAMIC_RUBY=yes RUBY_VER=191 RUBY_VER_LONG=1.9.1 TCL=e:\tcl DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes XPM=e:\xpm
-+SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\"
-+SET TOOLDIR=E:\
-+%VCDIR%nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=192 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
- 
-diff -Naur vim73.orig/src/bigvim64.bat vim73/src/bigvim64.bat
---- vim73.orig/src/bigvim64.bat	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/bigvim64.bat	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,6 @@
-+:: command to build big Vim 64 bit with OLE, Perl, Python, Ruby and Tcl
-+:: First run: %VCDIR%\vcvarsall.bat x86_amd64
-+SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"
-+SET TOOLDIR=E:\
-+%VCDIR%\bin\nmake -f Make_mvc.mak CPU=AMD64 GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=192 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
-+
-diff -Naur vim73.orig/src/blowfish.c vim73/src/blowfish.c
---- vim73.orig/src/blowfish.c	2010-07-14 14:45:39.000000000 +0000
-+++ vim73/src/blowfish.c	2012-11-01 20:35:41.000000000 +0000
-@@ -413,6 +413,7 @@
-     int    salt_len;
- {
-     int      i, j, keypos = 0;
-+    unsigned u;
-     UINT32_T val, data_l, data_r;
-     char_u   *key;
-     int      keylen;
-@@ -432,8 +433,8 @@
-     }
-     for (i = 0; i < keylen; i++)
-     {
--	sscanf((char *)&key[i * 2], "%2x", &j);
--	key[i] = j;
-+	sscanf((char *)&key[i * 2], "%2x", &u);
-+	key[i] = u;
-     }
- 
-     mch_memmove(sbx, sbi, 4 * 4 * 256);
-diff -Naur vim73.orig/src/buffer.c vim73/src/buffer.c
---- vim73.orig/src/buffer.c	2010-08-13 09:14:35.000000000 +0000
-+++ vim73/src/buffer.c	2012-11-01 20:35:48.000000000 +0000
-@@ -57,13 +57,15 @@
- 
- #if defined(FEAT_SIGNS)
- static void insert_sign __ARGS((buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr));
--static void buf_delete_signs __ARGS((buf_T *buf));
- #endif
- 
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
- static char *msg_loclist = N_("[Location List]");
- static char *msg_qflist = N_("[Quickfix List]");
- #endif
-+#ifdef FEAT_AUTOCMD
-+static char *e_auabort = N_("E855: Autocommands caused command to abort");
-+#endif
- 
- /*
-  * Open current buffer, that is: open the memfile and read the file into
-@@ -96,7 +98,7 @@
- 	 * There MUST be a memfile, otherwise we can't do anything
- 	 * If we can't create one for the current buffer, take another buffer
- 	 */
--	close_buffer(NULL, curbuf, 0);
-+	close_buffer(NULL, curbuf, 0, FALSE);
- 	for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
- 	    if (curbuf->b_ml.ml_mfp != NULL)
- 		break;
-@@ -316,12 +318,17 @@
-  * get a new buffer very soon!
-  *
-  * The 'bufhidden' option can force freeing and deleting.
-+ *
-+ * When "abort_if_last" is TRUE then do not close the buffer if autocommands
-+ * cause there to be only one window with this buffer.  e.g. when ":quit" is
-+ * supposed to close the window but autocommands close all other windows.
-  */
-     void
--close_buffer(win, buf, action)
-+close_buffer(win, buf, action, abort_if_last)
-     win_T	*win;		/* if not NULL, set b_last_cursor */
-     buf_T	*buf;
-     int		action;
-+    int		abort_if_last UNUSED;
- {
- #ifdef FEAT_AUTOCMD
-     int		is_curbuf;
-@@ -369,19 +376,35 @@
-     /* When the buffer is no longer in a window, trigger BufWinLeave */
-     if (buf->b_nwindows == 1)
-     {
-+	buf->b_closing = TRUE;
- 	apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
- 								  FALSE, buf);
--	if (!buf_valid(buf))	    /* autocommands may delete the buffer */
-+	if (!buf_valid(buf))
-+	{
-+	    /* Autocommands deleted the buffer. */
-+aucmd_abort:
-+	    EMSG(_(e_auabort));
- 	    return;
-+	}
-+	buf->b_closing = FALSE;
-+	if (abort_if_last && one_window())
-+	    /* Autocommands made this the only window. */
-+	    goto aucmd_abort;
- 
- 	/* When the buffer becomes hidden, but is not unloaded, trigger
- 	 * BufHidden */
- 	if (!unload_buf)
- 	{
-+	    buf->b_closing = TRUE;
- 	    apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
- 								  FALSE, buf);
--	    if (!buf_valid(buf))	/* autocmds may delete the buffer */
--		return;
-+	    if (!buf_valid(buf))
-+		/* Autocommands deleted the buffer. */
-+		goto aucmd_abort;
-+	    buf->b_closing = FALSE;
-+	    if (abort_if_last && one_window())
-+		/* Autocommands made this the only window. */
-+		goto aucmd_abort;
- 	}
- # ifdef FEAT_EVAL
- 	if (aborting())	    /* autocmds may abort script processing */
-@@ -416,6 +439,14 @@
- #endif
- 
-     buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
-+    if (
-+#ifdef FEAT_WINDOWS
-+	win_valid(win) &&
-+#else
-+	win != NULL &&
-+#endif
-+			  win->w_buffer == buf)
-+	win->w_buffer = NULL;  /* make sure we don't use the buffer now */
- 
- #ifdef FEAT_AUTOCMD
-     /* Autocommands may have deleted the buffer. */
-@@ -527,6 +558,7 @@
- #ifdef FEAT_AUTOCMD
-     int		is_curbuf = (buf == curbuf);
- 
-+    buf->b_closing = TRUE;
-     apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
-     if (!buf_valid(buf))	    /* autocommands may delete the buffer */
- 	return;
-@@ -543,6 +575,7 @@
- 	if (!buf_valid(buf))	    /* autocommands may delete the buffer */
- 	    return;
-     }
-+    buf->b_closing = FALSE;
- # ifdef FEAT_EVAL
-     if (aborting())	    /* autocmds may abort script processing */
- 	return;
-@@ -560,6 +593,11 @@
- #ifdef FEAT_DIFF
-     diff_buf_delete(buf);	    /* Can't use 'diff' for unloaded buffer. */
- #endif
-+#ifdef FEAT_SYN_HL
-+    /* Remove any ownsyntax, unless exiting. */
-+    if (firstwin != NULL && curwin->w_buffer == buf)
-+	reset_synblock(curwin);
-+#endif
- 
- #ifdef FEAT_FOLDING
-     /* No folds in an empty buffer. */
-@@ -639,6 +677,9 @@
-     {
- 	clear_wininfo(buf);		/* including window-local options */
- 	free_buf_options(buf, TRUE);
-+#ifdef FEAT_SPELL
-+	ga_clear(&buf->b_s.b_langp);
-+#endif
-     }
- #ifdef FEAT_EVAL
-     vars_clear(&buf->b_vars.dv_hashtab); /* free all internal variables */
-@@ -661,9 +702,6 @@
-     vim_free(buf->b_start_fenc);
-     buf->b_start_fenc = NULL;
- #endif
--#ifdef FEAT_SPELL
--    ga_clear(&buf->b_s.b_langp);
--#endif
- }
- 
- /*
-@@ -762,7 +800,7 @@
- 	 * open a new, empty buffer. */
- 	swap_exists_action = SEA_NONE;	/* don't want it again */
- 	swap_exists_did_quit = TRUE;
--	close_buffer(curwin, curbuf, DOBUF_UNLOAD);
-+	close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
- 	if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
- 	    old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
- 	if (old_curbuf != NULL)
-@@ -1109,7 +1147,7 @@
- 	     * if the buffer still exists.
- 	     */
- 	    if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
--		close_buffer(NULL, buf, action);
-+		close_buffer(NULL, buf, action, FALSE);
- 	    return retval;
- 	}
- 
-@@ -1120,6 +1158,9 @@
- 	 * a window with this buffer.
- 	 */
- 	while (buf == curbuf
-+# ifdef FEAT_AUTOCMD
-+		   && !(curwin->w_closing || curwin->w_buffer->b_closing)
-+# endif
- 		   && (firstwin != lastwin || first_tabpage->tp_next != NULL))
- 	    win_close(curwin, FALSE);
- #endif
-@@ -1133,7 +1174,7 @@
- 	    close_windows(buf, FALSE);
- #endif
- 	    if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
--		close_buffer(NULL, buf, action);
-+		close_buffer(NULL, buf, action, FALSE);
- 	    return OK;
- 	}
- 
-@@ -1288,9 +1329,12 @@
-     /* Go to the other buffer. */
-     set_curbuf(buf, action);
- 
--#if defined(FEAT_LISTCMDS) && defined(FEAT_SCROLLBIND)
-+#if defined(FEAT_LISTCMDS) \
-+	&& (defined(FEAT_SCROLLBIND) || defined(FEAT_CURSORBIND))
-     if (action == DOBUF_SPLIT)
--	curwin->w_p_scb = FALSE;	/* reset 'scrollbind' */
-+    {
-+	RESET_BINDING(curwin);	/* reset 'scrollbind' and 'cursorbind' */
-+    }
- #endif
- 
- #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
-@@ -1343,6 +1387,10 @@
- # endif
- #endif
-     {
-+#ifdef FEAT_SYN_HL
-+	if (prevbuf == curwin->w_buffer)
-+	    reset_synblock(curwin);
-+#endif
- #ifdef FEAT_WINDOWS
- 	if (unload)
- 	    close_windows(prevbuf, FALSE);
-@@ -1353,22 +1401,34 @@
- 	if (buf_valid(prevbuf))
- #endif
- 	{
-+#ifdef FEAT_WINDOWS
-+	    win_T  *previouswin = curwin;
-+#endif
- 	    if (prevbuf == curbuf)
- 		u_sync(FALSE);
- 	    close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
- 		    unload ? action : (action == DOBUF_GOTO
- 			&& !P_HID(prevbuf)
--			&& !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
-+			&& !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
-+#ifdef FEAT_WINDOWS
-+	    if (curwin != previouswin && win_valid(previouswin))
-+	      /* autocommands changed curwin, Grr! */
-+	      curwin = previouswin;
-+#endif
- 	}
-     }
- #ifdef FEAT_AUTOCMD
-     /* An autocommand may have deleted "buf", already entered it (e.g., when
--     * it did ":bunload") or aborted the script processing! */
-+     * it did ":bunload") or aborted the script processing!
-+     * If curwin->w_buffer is null, enter_buffer() will make it valid again */
-+    if ((buf_valid(buf) && buf != curbuf
- # ifdef FEAT_EVAL
--    if (buf_valid(buf) && buf != curbuf && !aborting())
--# else
--    if (buf_valid(buf) && buf != curbuf)
-+	    && !aborting()
- # endif
-+# ifdef FEAT_WINDOWS
-+	 ) || curwin->w_buffer == NULL
-+# endif
-+       )
- #endif
- 	enter_buffer(buf);
- }
-@@ -1392,10 +1452,6 @@
-     foldUpdateAll(curwin);	/* update folds (later). */
- #endif
- 
--#ifdef FEAT_SYN_HL
--    reset_synblock(curwin);
--    curwin->w_s = &(buf->b_s);
--#endif
-     /* Get the buffer in the current window. */
-     curwin->w_buffer = buf;
-     curbuf = buf;
-@@ -1406,6 +1462,10 @@
- 	diff_buf_add(curbuf);
- #endif
- 
-+#ifdef FEAT_SYN_HL
-+    curwin->w_s = &(buf->b_s);
-+#endif
-+
-     /* Cursor on first line by default. */
-     curwin->w_cursor.lnum = 1;
-     curwin->w_cursor.col = 0;
-@@ -1687,7 +1747,8 @@
-     buf->b_wininfo->wi_win = curwin;
- 
- #ifdef FEAT_EVAL
--    init_var_dict(&buf->b_vars, &buf->b_bufvar);    /* init b: variables */
-+    /* init b: variables */
-+    init_var_dict(&buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
- #endif
- #ifdef FEAT_SYN_HL
-     hash_init(&buf->b_s.b_keywtab);
-@@ -1805,9 +1866,6 @@
- #ifdef FEAT_AUTOCMD
-     clear_string_option(&buf->b_p_ft);
- #endif
--#ifdef FEAT_OSFILETYPE
--    clear_string_option(&buf->b_p_oft);
--#endif
- #ifdef FEAT_CINDENT
-     clear_string_option(&buf->b_p_cink);
-     clear_string_option(&buf->b_p_cino);
-@@ -1917,9 +1975,7 @@
- 		tabpage_new();
- 	    else if (win_split(0, 0) == FAIL)	/* Open in a new window */
- 		return FAIL;
--# ifdef FEAT_SCROLLBIND
--	    curwin->w_p_scb = FALSE;
--# endif
-+	    RESET_BINDING(curwin);
- 	}
-     }
- #endif
-@@ -2526,6 +2582,9 @@
-     if (p_fdls >= 0)
- 	curwin->w_p_fdl = p_fdls;
- #endif
-+#ifdef FEAT_SYN_HL
-+    check_colorcolumn(curwin);
-+#endif
- }
- 
- /*
-@@ -2576,7 +2635,7 @@
- 	    continue;
- 	msg_putchar('\n');
- 	if (buf_spname(buf) != NULL)
--	    STRCPY(NameBuff, buf_spname(buf));
-+	    vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
- 	else
- 	    home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
- 
-@@ -2690,7 +2749,8 @@
- 		vim_free(ffname);
- 		return FAIL;
- 	    }
--	    close_buffer(NULL, obuf, DOBUF_WIPE); /* delete from the list */
-+	    /* delete from the list */
-+	    close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
- 	}
- 	sfname = vim_strsave(sfname);
- 	if (ffname == NULL || sfname == NULL)
-@@ -2998,7 +3058,7 @@
- 
-     *p++ = '"';
-     if (buf_spname(curbuf) != NULL)
--	STRCPY(p, buf_spname(curbuf));
-+	vim_strncpy(p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1);
-     else
-     {
- 	if (!fullname && curbuf->b_fname != NULL)
-@@ -3174,12 +3234,15 @@
- 	{
- 	    /* format: "fname + (path) (1 of 2) - VIM" */
- 
-+#define SPACE_FOR_FNAME (IOSIZE - 100)
-+#define SPACE_FOR_DIR   (IOSIZE - 20)
-+#define SPACE_FOR_ARGNR (IOSIZE - 10)  /* at least room for " - VIM" */
- 	    if (curbuf->b_fname == NULL)
--		STRCPY(buf, _("[No Name]"));
-+		vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME);
- 	    else
- 	    {
- 		p = transstr(gettail(curbuf->b_fname));
--		vim_strncpy(buf, p, IOSIZE - 100);
-+		vim_strncpy(buf, p, SPACE_FOR_FNAME);
- 		vim_free(p);
- 	    }
- 
-@@ -3203,7 +3266,7 @@
- 		buf[off++] = ' ';
- 		buf[off++] = '(';
- 		home_replace(curbuf, curbuf->b_ffname,
--					       buf + off, IOSIZE - off, TRUE);
-+					buf + off, SPACE_FOR_DIR - off, TRUE);
- #ifdef BACKSLASH_IN_FILENAME
- 		/* avoid "c:/name" to be reduced to "c" */
- 		if (isalpha(buf[off]) && buf[off + 1] == ':')
-@@ -3214,24 +3277,34 @@
- 		if (p == buf + off)
- 		    /* must be a help buffer */
- 		    vim_strncpy(buf + off, (char_u *)_("help"),
--						  (size_t)(IOSIZE - off - 1));
-+					   (size_t)(SPACE_FOR_DIR - off - 1));
- 		else
- 		    *p = NUL;
- 
--		/* translate unprintable chars */
--		p = transstr(buf + off);
--		vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1));
--		vim_free(p);
-+		/* Translate unprintable chars and concatenate.  Keep some
-+		 * room for the server name.  When there is no room (very long
-+		 * file name) use (...). */
-+		if (off < SPACE_FOR_DIR)
-+		{
-+		    p = transstr(buf + off);
-+		    vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
-+		    vim_free(p);
-+		}
-+		else
-+		{
-+		    vim_strncpy(buf + off, (char_u *)"...",
-+					     (size_t)(SPACE_FOR_ARGNR - off));
-+		}
- 		STRCAT(buf, ")");
- 	    }
- 
--	    append_arg_number(curwin, buf, IOSIZE, FALSE);
-+	    append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE);
- 
- #if defined(FEAT_CLIENTSERVER)
- 	    if (serverName != NULL)
- 	    {
- 		STRCAT(buf, " - ");
--		STRCAT(buf, serverName);
-+		vim_strcat(buf, serverName, IOSIZE);
- 	    }
- 	    else
- #endif
-@@ -3240,9 +3313,8 @@
- 	    if (maxlen > 0)
- 	    {
- 		/* make it shorter by removing a bit in the middle */
--		len = vim_strsize(buf);
--		if (len > maxlen)
--		    trunc_string(buf, buf, maxlen);
-+		if (vim_strsize(buf) > maxlen)
-+		    trunc_string(buf, buf, maxlen, IOSIZE);
- 	    }
- 	}
-     }
-@@ -3278,7 +3350,7 @@
- 	else
- 	{
- 	    if (buf_spname(curbuf) != NULL)
--		i_name = (char_u *)buf_spname(curbuf);
-+		i_name = buf_spname(curbuf);
- 	    else		    /* use file name only in icon */
- 		i_name = gettail(curbuf->b_ffname);
- 	    *i_str = NUL;
-@@ -3363,7 +3435,8 @@
-  * or truncated if too long, fillchar is used for all whitespace.
-  */
-     int
--build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab)
-+build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar,
-+						      maxwidth, hltab, tabtab)
-     win_T	*wp;
-     char_u	*out;		/* buffer to write into != NameBuff */
-     size_t	outlen;		/* length of out[] */
-@@ -3458,6 +3531,18 @@
-     prevchar_isitem = FALSE;
-     for (s = usefmt; *s; )
-     {
-+	if (curitem == STL_MAX_ITEM)
-+	{
-+	    /* There are too many items.  Add the error code to the statusline
-+	     * to give the user a hint about what went wrong. */
-+	    if (p + 6 < out + outlen)
-+	    {
-+		mch_memmove(p, " E541", (size_t)5);
-+		p += 5;
-+	    }
-+	    break;
-+	}
-+
- 	if (*s != NUL && *s != '%')
- 	    prevchar_isflag = prevchar_isitem = FALSE;
- 
-@@ -3473,6 +3558,8 @@
- 	 * Handle one '%' item.
- 	 */
- 	s++;
-+	if (*s == NUL)  /* ignore trailing % */
-+	    break;
- 	if (*s == '%')
- 	{
- 	    if (p + 1 >= out + outlen)
-@@ -3679,7 +3766,7 @@
- 	case STL_FILENAME:
- 	    fillable = FALSE;	/* don't change ' ' to fillchar */
- 	    if (buf_spname(wp->w_buffer) != NULL)
--		STRCPY(NameBuff, buf_spname(wp->w_buffer));
-+		vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1);
- 	    else
- 	    {
- 		t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname
-@@ -4355,7 +4442,12 @@
- {
-     int		i;
-     win_T	*wp, *wpnext;
--    char_u	*opened;	/* array of flags for which args are open */
-+    char_u	*opened;	/* Array of weight for which args are open:
-+				 *  0: not opened
-+				 *  1: opened in other tab
-+				 *  2: opened in curtab
-+				 *  3: opened in curtab and curwin
-+				 */
-     int		opened_len;	/* length of opened[] */
-     int		use_firstwin = FALSE;	/* use first window for arglist */
-     int		split_ret = OK;
-@@ -4364,6 +4456,8 @@
-     buf_T	*buf;
-     tabpage_T	*tpnext;
-     int		had_tab = cmdmod.tab;
-+    win_T	*old_curwin, *last_curwin;
-+    tabpage_T	*old_curtab, *last_curtab;
-     win_T	*new_curwin = NULL;
-     tabpage_T	*new_curtab = NULL;
- 
-@@ -4380,6 +4474,15 @@
-     if (opened == NULL)
- 	return;
- 
-+    /* Autocommands may do anything to the argument list.  Make sure it's not
-+     * freed while we are working here by "locking" it.  We still have to
-+     * watch out for its size to be changed. */
-+    alist = curwin->w_alist;
-+    ++alist->al_refcount;
-+
-+    old_curwin = curwin;
-+    old_curtab = curtab;
-+
- #ifdef FEAT_GUI
-     need_mouse_correct = TRUE;
- #endif
-@@ -4392,7 +4495,7 @@
-      * When the ":tab" modifier was used do this for all tab pages.
-      */
-     if (had_tab > 0)
--	goto_tabpage_tp(first_tabpage);
-+	goto_tabpage_tp(first_tabpage, TRUE);
-     for (;;)
-     {
- 	tpnext = curtab->tp_next;
-@@ -4401,36 +4504,51 @@
- 	    wpnext = wp->w_next;
- 	    buf = wp->w_buffer;
- 	    if (buf->b_ffname == NULL
--		    || buf->b_nwindows > 1
-+		    || (!keep_tabs && buf->b_nwindows > 1)
- #ifdef FEAT_VERTSPLIT
- 		    || wp->w_width != Columns
- #endif
- 		    )
--		i = ARGCOUNT;
-+		i = opened_len;
- 	    else
- 	    {
- 		/* check if the buffer in this window is in the arglist */
--		for (i = 0; i < ARGCOUNT; ++i)
-+		for (i = 0; i < opened_len; ++i)
- 		{
--		    if (ARGLIST[i].ae_fnum == buf->b_fnum
--			    || fullpathcmp(alist_name(&ARGLIST[i]),
--					      buf->b_ffname, TRUE) & FPC_SAME)
-+		    if (i < alist->al_ga.ga_len
-+			    && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
-+				|| fullpathcmp(alist_name(&AARGLIST(alist)[i]),
-+					      buf->b_ffname, TRUE) & FPC_SAME))
- 		    {
--			if (i < opened_len)
-+			int weight = 1;
-+
-+			if (old_curtab == curtab)
- 			{
--			    opened[i] = TRUE;
-+			    ++weight;
-+			    if (old_curwin == wp)
-+				++weight;
-+			}
-+
-+			if (weight > (int)opened[i])
-+			{
-+			    opened[i] = (char_u)weight;
- 			    if (i == 0)
- 			    {
-+				if (new_curwin != NULL)
-+				    new_curwin->w_arg_idx = opened_len;
- 				new_curwin = wp;
- 				new_curtab = curtab;
- 			    }
- 			}
--			if (wp->w_alist != curwin->w_alist)
-+			else if (keep_tabs)
-+			    i = opened_len;
-+
-+			if (wp->w_alist != alist)
- 			{
- 			    /* Use the current argument list for all windows
- 			     * containing a file from it. */
- 			    alist_unlink(wp->w_alist);
--			    wp->w_alist = curwin->w_alist;
-+			    wp->w_alist = alist;
- 			    ++wp->w_alist->al_refcount;
- 			}
- 			break;
-@@ -4439,7 +4557,7 @@
- 	    }
- 	    wp->w_arg_idx = i;
- 
--	    if (i == ARGCOUNT && !keep_tabs)	/* close this window */
-+	    if (i == opened_len && !keep_tabs)/* close this window */
- 	    {
- 		if (P_HID(buf) || forceit || buf->b_nwindows > 1
- 							|| !bufIsChanged(buf))
-@@ -4461,7 +4579,8 @@
- 		    }
- #ifdef FEAT_WINDOWS
- 		    /* don't close last window */
--		    if (firstwin == lastwin && first_tabpage->tp_next == NULL)
-+		    if (firstwin == lastwin
-+			    && (first_tabpage->tp_next == NULL || !had_tab))
- #endif
- 			use_firstwin = TRUE;
- #ifdef FEAT_WINDOWS
-@@ -4488,27 +4607,23 @@
- 	if (!valid_tabpage(tpnext))
- 	    tpnext = first_tabpage;	/* start all over...*/
- # endif
--	goto_tabpage_tp(tpnext);
-+	goto_tabpage_tp(tpnext, TRUE);
-     }
- 
-     /*
-      * Open a window for files in the argument list that don't have one.
-      * ARGCOUNT may change while doing this, because of autocommands.
-      */
--    if (count > ARGCOUNT || count <= 0)
--	count = ARGCOUNT;
--
--    /* Autocommands may do anything to the argument list.  Make sure it's not
--     * freed while we are working here by "locking" it.  We still have to
--     * watch out for its size to be changed. */
--    alist = curwin->w_alist;
--    ++alist->al_refcount;
-+    if (count > opened_len || count <= 0)
-+	count = opened_len;
- 
- #ifdef FEAT_AUTOCMD
-     /* Don't execute Win/Buf Enter/Leave autocommands here. */
-     ++autocmd_no_enter;
-     ++autocmd_no_leave;
- #endif
-+    last_curwin = curwin;
-+    last_curtab = curtab;
-     win_enter(lastwin, FALSE);
- #ifdef FEAT_WINDOWS
-     /* ":drop all" should re-use an empty window to avoid "--remote-tab"
-@@ -4518,11 +4633,11 @@
- 	use_firstwin = TRUE;
- #endif
- 
--    for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i)
-+    for (i = 0; i < count && i < opened_len && !got_int; ++i)
-     {
- 	if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
- 	    arg_had_last = TRUE;
--	if (i < opened_len && opened[i])
-+	if (opened[i] > 0)
- 	{
- 	    /* Move the already present window to below the current window */
- 	    if (curwin->w_arg_idx != i)
-@@ -4531,7 +4646,13 @@
- 		{
- 		    if (wpnext->w_arg_idx == i)
- 		    {
--			win_move_after(wpnext, curwin);
-+			if (keep_tabs)
-+			{
-+			    new_curwin = wpnext;
-+			    new_curtab = curtab;
-+			}
-+			else
-+			    win_move_after(wpnext, curwin);
- 			break;
- 		    }
- 		}
-@@ -4586,9 +4707,17 @@
- #ifdef FEAT_AUTOCMD
-     --autocmd_no_enter;
- #endif
-+    /* restore last referenced tabpage's curwin */
-+    if (last_curtab != new_curtab)
-+    {
-+	if (valid_tabpage(last_curtab))
-+	    goto_tabpage_tp(last_curtab, TRUE);
-+	if (win_valid(last_curwin))
-+	    win_enter(last_curwin, FALSE);
-+    }
-     /* to window with first arg */
-     if (valid_tabpage(new_curtab))
--	goto_tabpage_tp(new_curtab);
-+	goto_tabpage_tp(new_curtab, TRUE);
-     if (win_valid(new_curwin))
- 	win_enter(new_curwin, FALSE);
- 
-@@ -4640,7 +4769,7 @@
-      */
- #ifdef FEAT_WINDOWS
-     if (had_tab > 0)
--	goto_tabpage_tp(first_tabpage);
-+	goto_tabpage_tp(first_tabpage, TRUE);
-     for (;;)
-     {
- #endif
-@@ -4658,7 +4787,11 @@
- #ifdef FEAT_WINDOWS
- 		    || (had_tab > 0 && wp != firstwin)
- #endif
--		    ) && firstwin != lastwin)
-+		    ) && firstwin != lastwin
-+#ifdef FEAT_AUTOCMD
-+		    && !(wp->w_closing || wp->w_buffer->b_closing)
-+#endif
-+		    )
- 	    {
- 		win_close(wp, FALSE);
- #ifdef FEAT_AUTOCMD
-@@ -4676,7 +4809,7 @@
- 	/* Without the ":tab" modifier only do the current tab page. */
- 	if (had_tab == 0 || tpnext == NULL)
- 	    break;
--	goto_tabpage_tp(tpnext);
-+	goto_tabpage_tp(tpnext, TRUE);
-     }
- #endif
- 
-@@ -5111,7 +5244,7 @@
-  * Return special buffer name.
-  * Returns NULL when the buffer has a normal file name.
-  */
--    char *
-+    char_u *
- buf_spname(buf)
-     buf_T	*buf;
- {
-@@ -5130,9 +5263,9 @@
- 		goto win_found;
- win_found:
- 	if (win != NULL && win->w_llist_ref != NULL)
--	    return _(msg_loclist);
-+	    return (char_u *)_(msg_loclist);
- 	else
--	    return _(msg_qflist);
-+	    return (char_u *)_(msg_qflist);
-     }
- #endif
- #ifdef FEAT_QUICKFIX
-@@ -5141,12 +5274,12 @@
-     if (bt_nofile(buf))
-     {
- 	if (buf->b_sfname != NULL)
--	    return (char *)buf->b_sfname;
--	return _("[Scratch]");
-+	    return buf->b_sfname;
-+	return (char_u *)_("[Scratch]");
-     }
- #endif
-     if (buf->b_fname == NULL)
--	return _("[No Name]");
-+	return (char_u *)_("[No Name]");
-     return NULL;
- }
- 
-@@ -5417,7 +5550,7 @@
- /*
-  * Delete signs in buffer "buf".
-  */
--    static void
-+    void
- buf_delete_signs(buf)
-     buf_T	*buf;
- {
-@@ -5465,7 +5598,7 @@
- 	buf = firstbuf;
-     else
- 	buf = rbuf;
--    while (buf != NULL)
-+    while (buf != NULL && !got_int)
-     {
- 	if (buf->b_signlist != NULL)
- 	{
-@@ -5473,7 +5606,7 @@
- 	    MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
- 	    msg_putchar('\n');
- 	}
--	for (p = buf->b_signlist; p != NULL; p = p->next)
-+	for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
- 	{
- 	    vim_snprintf(lbuf, BUFSIZ, _("    line=%ld  id=%d  name=%s"),
- 			   (long)p->lnum, p->id, sign_typenr2name(p->typenr));
-@@ -5606,7 +5739,7 @@
-     if (!aucmd)		    /* Don't trigger BufDelete autocommands here. */
- 	block_autocmds();
- #endif
--    close_buffer(NULL, buf, DOBUF_WIPE);
-+    close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
- #ifdef FEAT_AUTOCMD
-     if (!aucmd)
- 	unblock_autocmds();
-diff -Naur vim73.orig/src/charset.c vim73/src/charset.c
---- vim73.orig/src/charset.c	2010-08-12 18:16:04.000000000 +0000
-+++ vim73/src/charset.c	2012-11-01 20:35:46.000000000 +0000
-@@ -463,41 +463,42 @@
- 	    if (enc_utf8)
- 	    {
- 		int	c = utf_ptr2char(STR_PTR(i));
--		int	ol = utf_ptr2len(STR_PTR(i));
-+		int	olen = utf_ptr2len(STR_PTR(i));
- 		int	lc = utf_tolower(c);
- 
- 		/* Only replace the character when it is not an invalid
- 		 * sequence (ASCII character or more than one byte) and
- 		 * utf_tolower() doesn't return the original character. */
--		if ((c < 0x80 || ol > 1) && c != lc)
-+		if ((c < 0x80 || olen > 1) && c != lc)
- 		{
--		    int	    nl = utf_char2len(lc);
-+		    int	    nlen = utf_char2len(lc);
- 
- 		    /* If the byte length changes need to shift the following
- 		     * characters forward or backward. */
--		    if (ol != nl)
-+		    if (olen != nlen)
- 		    {
--			if (nl > ol)
-+			if (nlen > olen)
- 			{
--			    if (buf == NULL ? ga_grow(&ga, nl - ol + 1) == FAIL
--						    : len + nl - ol >= buflen)
-+			    if (buf == NULL
-+				    ? ga_grow(&ga, nlen - olen + 1) == FAIL
-+				    : len + nlen - olen >= buflen)
- 			    {
- 				/* out of memory, keep old char */
- 				lc = c;
--				nl = ol;
-+				nlen = olen;
- 			    }
- 			}
--			if (ol != nl)
-+			if (olen != nlen)
- 			{
- 			    if (buf == NULL)
- 			    {
--				STRMOVE(GA_PTR(i) + nl, GA_PTR(i) + ol);
--				ga.ga_len += nl - ol;
-+				STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
-+				ga.ga_len += nlen - olen;
- 			    }
- 			    else
- 			    {
--				STRMOVE(buf + i + nl, buf + i + ol);
--				len += nl - ol;
-+				STRMOVE(buf + i + nlen, buf + i + olen);
-+				len += nlen - olen;
- 			    }
- 			}
- 		    }
-@@ -763,7 +764,7 @@
- }
- 
- /*
-- * Return the number of characters string "s" will take on the screen,
-+ * Return the number of character cells string "s" will take on the screen,
-  * counting TABs as two characters: "^I".
-  */
-     int
-@@ -774,8 +775,8 @@
- }
- 
- /*
-- * Return the number of characters string "s[len]" will take on the screen,
-- * counting TABs as two characters: "^I".
-+ * Return the number of character cells string "s[len]" will take on the
-+ * screen, counting TABs as two characters: "^I".
-  */
-     int
- vim_strnsize(s, len)
-@@ -1601,10 +1602,9 @@
- #define LATIN1LOWER 'l'
- #define LATIN1UPPER 'U'
- 
--/*                                                                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~                                  ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ */
- static char_u latin1flags[257] = "                                                                 UUUUUUUUUUUUUUUUUUUUUUUUUU      llllllllllllllllllllllllll                                                                     UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
--static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~
- ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ÷ØÙÚÛÜÝÞÿ";
--static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~
- ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";
-+static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
-+static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
- 
-     int
- vim_islower(c)
-@@ -1829,7 +1829,7 @@
- 			hex = 0;	/* can't be octal */
- 			break;
- 		    }
--		    if (ptr[n] > '0')
-+		    if (ptr[n] >= '0')
- 			hex = '0';	/* assume octal */
- 		}
- 	    }
-diff -Naur vim73.orig/src/config.h.in vim73/src/config.h.in
---- vim73.orig/src/config.h.in	2010-08-13 13:45:27.000000000 +0000
-+++ vim73/src/config.h.in	2012-11-01 20:35:47.000000000 +0000
-@@ -161,6 +161,7 @@
- #undef HAVE_FSYNC
- #undef HAVE_GETCWD
- #undef HAVE_GETPSEUDOTTY
-+#undef HAVE_GETPWENT
- #undef HAVE_GETPWNAM
- #undef HAVE_GETPWUID
- #undef HAVE_GETRLIMIT
-@@ -346,9 +347,15 @@
- /* Define if dynamic python does not require RTLD_GLOBAL */
- #undef PY_NO_RTLD_GLOBAL
- 
-+/* Define if dynamic python3 does not require RTLD_GLOBAL */
-+#undef PY3_NO_RTLD_GLOBAL
-+
- /* Define if you want to include the Ruby interpreter. */
- #undef FEAT_RUBY
- 
-+/* Define for linking via dlopen() or LoadLibrary() */
-+#undef DYNAMIC_RUBY
-+
- /* Define if you want to include the Tcl interpreter. */
- #undef FEAT_TCL
- 
-@@ -357,6 +364,7 @@
- 
- /* Define if you want to add support for ACL */
- #undef HAVE_POSIX_ACL
-+#undef HAVE_SOLARIS_ZFS_ACL
- #undef HAVE_SOLARIS_ACL
- #undef HAVE_AIX_ACL
- 
-diff -Naur vim73.orig/src/config.mk.in vim73/src/config.mk.in
---- vim73.orig/src/config.mk.in	2010-07-17 15:28:51.000000000 +0000
-+++ vim73/src/config.mk.in	2012-11-01 20:35:40.000000000 +0000
-@@ -30,6 +30,7 @@
- CPP		= @CPP@
- CPP_MM		= @CPP_MM@
- DEPEND_CFLAGS_FILTER = @DEPEND_CFLAGS_FILTER@
-+LINK_AS_NEEDED	= @LINK_AS_NEEDED@
- X_CFLAGS	= @X_CFLAGS@
- X_LIBS_DIR	= @X_LIBS@
- X_PRE_LIBS	= @X_PRE_LIBS@
-diff -Naur vim73.orig/src/configure.in vim73/src/configure.in
---- vim73.orig/src/configure.in	2010-08-13 14:15:17.000000000 +0000
-+++ vim73/src/configure.in	2012-11-01 20:35:48.000000000 +0000
-@@ -28,6 +28,16 @@
- AC_HEADER_STDC
- AC_HEADER_SYS_WAIT
- 
-+dnl Check for the flag that fails if stuff are missing.
-+
-+AC_MSG_CHECKING(--enable-fail-if-missing argument)
-+AC_ARG_ENABLE(fail_if_missing,
-+	[  --enable-fail-if-missing    Fail if dependencies on additional features
-+     specified on the command line are missing.], 
-+	[fail_if_missing="yes"],
-+	[fail_if_missing="no"])
-+AC_MSG_RESULT($fail_if_missing)
-+
- dnl Set default value for CFLAGS if none is defined or it's empty
- if test -z "$CFLAGS"; then
-   CFLAGS="-O"
-@@ -319,15 +329,18 @@
- 		  echo ""
- 		  echo "------------------------------------------"
- 		  echo " On z/OS Unix, the environment variable"
--		  echo " __CC_${ccn}MODE must be set to \"1\"!"
-+		  echo " _CC_${ccn}MODE must be set to \"1\"!"
- 		  echo " Do:"
- 		  echo "    export _CC_${ccn}MODE=1"
- 		  echo " and then call configure again."
- 		  echo "------------------------------------------"
- 		  exit 1
- 		fi
--		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
--                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
-+		# Set CFLAGS for configure process.
-+		# This will be reset later for config.mk.
-+		# Use haltonmsg to force error for missing H files.
-+		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
-+		LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
- 		AC_MSG_RESULT(yes)
- 		;;
-     *)		zOSUnix="no";
-@@ -442,31 +455,31 @@
- 
-   LUA_INC=
-   if test "X$vi_cv_path_lua_pfx" != "X"; then
-+    dnl -- try to find Lua executable
-+    AC_PATH_PROG(vi_cv_path_lua, lua)
-+    if test "X$vi_cv_path_lua" != "X"; then
-+      dnl -- find Lua version
-+      AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
-+      [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
-+    fi
-     AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
-     if test -f $vi_cv_path_lua_pfx/include/lua.h; then
-       AC_MSG_RESULT(yes)
-     else
-       AC_MSG_RESULT(no)
--      dnl -- try to find Lua executable
--      AC_PATH_PROG(vi_cv_path_lua, lua)
--      if test "X$vi_cv_path_lua" != "X"; then
--        dnl -- find Lua version
--        AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
--        [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
--        AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
--        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
--          AC_MSG_RESULT(yes)
--          LUA_INC=/lua$vi_cv_version_lua
--        else
--          AC_MSG_RESULT(no)
--          vi_cv_path_lua_pfx=
--        fi
-+      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
-+      if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
-+        AC_MSG_RESULT(yes)
-+        LUA_INC=/lua$vi_cv_version_lua
-+      else
-+        AC_MSG_RESULT(no)
-+        vi_cv_path_lua_pfx=
-       fi
-     fi
-   fi
- 
-   if test "X$vi_cv_path_lua_pfx" != "X"; then
--    if test "X$vi_cv_version_lua" != "X"; then
-+    if test "X$LUA_INC" != "X"; then
-       dnl Test alternate location using version
-       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
-     else
-@@ -478,19 +491,27 @@
-     LUA_PRO="if_lua.pro"
-     AC_DEFINE(FEAT_LUA)
-     if test "$enable_luainterp" = "dynamic"; then
--      dnl Determine the SONAME for the current version, but fallback to
--      dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found.
--      for i in 0 1 2 3 4 5 6 7 8 9; do
--	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
--	  LUA_SONAME=".$i"
--	  break
--	fi
--      done
-+      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
-+	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
-+      else
-+	dnl Determine the SONAME for the current version, but fallback to
-+	dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found.
-+	for i in 0 1 2 3 4 5 6 7 8 9; do
-+	  if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
-+	    LUA_SONAME=".$i"
-+	    break
-+	  fi
-+	done
-+	vi_cv_dll_name_lua="liblua${vi_cv_version_lua}.so$LUA_SONAME"
-+      fi
-       AC_DEFINE(DYNAMIC_LUA)
-       LUA_LIBS=""
--      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
-+      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
-     fi
-   fi
-+  if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
-+    AC_MSG_ERROR([could not configure lua])
-+  fi
-   AC_SUBST(LUA_SRC)
-   AC_SUBST(LUA_OBJ)
-   AC_SUBST(LUA_PRO)
-@@ -568,13 +589,27 @@
- 	SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
-       else
- 	AC_MSG_RESULT(no)
--	AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
--	if test -f /usr/include/plt/scheme.h; then
-+	AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
-+	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
- 	  AC_MSG_RESULT(yes)
--	  SCHEME_INC=/usr/include/plt
-+	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
- 	else
- 	  AC_MSG_RESULT(no)
--	  vi_cv_path_mzscheme_pfx=
-+	  AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
-+	  if test -f /usr/include/plt/scheme.h; then
-+	    AC_MSG_RESULT(yes)
-+	    SCHEME_INC=/usr/include/plt
-+	  else
-+	    AC_MSG_RESULT(no)
-+	    AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
-+	    if test -f /usr/include/racket/scheme.h; then
-+	      AC_MSG_RESULT(yes)
-+	      SCHEME_INC=/usr/include/racket
-+	    else
-+	      AC_MSG_RESULT(no)
-+	      vi_cv_path_mzscheme_pfx=
-+	    fi
-+	  fi
- 	fi
-       fi
-     fi
-@@ -586,13 +621,23 @@
-     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
-       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
-       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
--    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
-+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
-+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
-+      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
-+      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
-+    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
-       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
-     else
-       dnl Using shared objects
-       if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
-         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
- 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
-+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
-+	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
-+      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
-+        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
-       else
-         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
-       fi
-@@ -607,10 +652,20 @@
-     fi
-     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
-       SCHEME_COLLECTS=lib/plt/
-+    else
-+      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
-+	SCHEME_COLLECTS=lib/racket/
-+      fi
-     fi
-     if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
--      dnl need to generate bytecode for MzScheme base
-       MZSCHEME_EXTRA="mzscheme_base.c"
-+    else
-+      if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
-+	MZSCHEME_EXTRA="mzscheme_base.c"
-+      fi
-+    fi
-+    if test "X$MZSCHEME_EXTRA" != "X" ; then
-+      dnl need to generate bytecode for MzScheme base
-       MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
-       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
-     fi
-@@ -747,6 +802,10 @@
-       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
-     fi
-   fi
-+
-+  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
-+    AC_MSG_ERROR([could not configure perl])
-+  fi
- fi
- AC_SUBST(shrpenv)
- AC_SUBST(PERL_SRC)
-@@ -835,6 +894,7 @@
- 	@echo "python_LIBS='$(LIBS)'"
- 	@echo "python_SYSLIBS='$(SYSLIBS)'"
- 	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
-+	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
- 	@echo "python_INSTSONAME='$(INSTSONAME)'"
- eof
- 	    dnl -- delete the lines from make about Entering/Leaving directory
-@@ -855,23 +915,21 @@
- 	    fi
- 	])
- 
-+	if test "X$python_DLLLIBRARY" != "X"; then
-+	  python_INSTSONAME="$python_DLLLIBRARY"
-+	fi
- 	PYTHON_LIBS="${vi_cv_path_python_plibs}"
- 	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
--	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
-+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
- 	else
--	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
-+	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
- 	fi
- 	PYTHON_SRC="if_python.c"
--	dnl For Mac OSX 10.2 config.o is included in the Python library.
--	if test "x$MACOSX" = "xyes"; then
--	  PYTHON_OBJ="objects/if_python.o"
--	else
--	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
--	fi
-+	PYTHON_OBJ="objects/if_python.o"
- 	if test "${vi_cv_var_python_version}" = "1.4"; then
- 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
- 	fi
--	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
-+    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
- 
- 	dnl On FreeBSD linking with "-pthread" is required to use threads.
- 	dnl _THREAD_SAFE must be used for compiling then.
-@@ -932,6 +990,10 @@
-       AC_MSG_RESULT(too old)
-     fi
-   fi
-+
-+  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
-+    AC_MSG_ERROR([could not configure python])
-+  fi
- fi
- 
- AC_SUBST(PYTHON_CONFDIR)
-@@ -958,6 +1020,17 @@
-           ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
-     ]])
- 
-+    dnl -- get abiflags for python 3.2 or higher (PEP 3149)
-+    AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
-+    [
-+     vi_cv_var_python3_abiflags=
-+     if ${vi_cv_path_python3} -c \
-+         "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
-+     then
-+       vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \    
-+         "import sys; print(sys.abiflags)"`
-+     fi ])
-+
-     dnl -- find where python3 thinks it was installed
-     AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
-     [ vi_cv_path_python3_pfx=`
-@@ -987,9 +1060,13 @@
-     AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
-     [
-      vi_cv_path_python3_conf=
-+     config_dir="config"
-+     if test "${vi_cv_var_python3_abiflags}" != ""; then
-+       config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
-+     fi
-      for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
-        for subdir in lib64 lib share; do
--         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
-+         d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
-          if test -d "$d" && test -f "$d/config.c"; then
-            vi_cv_path_python3_conf="$d"
-          fi
-@@ -1014,32 +1091,30 @@
- 	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
- 	@echo "python3_LIBS='$(LIBS)'"
- 	@echo "python3_SYSLIBS='$(SYSLIBS)'"
--	@echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
-+	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
- 	@echo "python3_INSTSONAME='$(INSTSONAME)'"
- eof
-           dnl -- delete the lines from make about Entering/Leaving directory
-           eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
-           rm -f -- "${tmp_mkf}"
--          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
--          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
-+	  vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
-+          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
-           dnl remove -ltermcap, it can conflict with an earlier -lncurses
-           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
-           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
-       ])
- 
-+      if test "X$python3_DLLLIBRARY" != "X"; then
-+	python3_INSTSONAME="$python3_DLLLIBRARY"
-+      fi
-       PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
-       if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
--        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
-+        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
-       else
--        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
-+        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
-       fi
-       PYTHON3_SRC="if_python3.c"
--      dnl For Mac OSX 10.2 config.o is included in the Python library.
--      if test "x$MACOSX" = "xyes"; then
--        PYTHON3_OBJ="objects/if_python3.o"
--      else
--        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
--      fi
-+      PYTHON3_OBJ="objects/if_python3.o"
- 
-       dnl On FreeBSD linking with "-pthread" is required to use threads.
-       dnl _THREAD_SAFE must be used for compiling then.
-@@ -1109,11 +1184,12 @@
- if test "$python_ok" = yes && test "$python3_ok" = yes; then
-   AC_DEFINE(DYNAMIC_PYTHON)
-   AC_DEFINE(DYNAMIC_PYTHON3)
--  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL)
-+  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
-   cflags_save=$CFLAGS
--  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-+  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
-   ldflags_save=$LDFLAGS
--  LDFLAGS="$LDFLAGS -ldl"
-+  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
-+  LDFLAGS="-ldl $LDFLAGS"
-   AC_RUN_IFELSE([
-     #include <dlfcn.h>
-     /* If this program fails, then RTLD_GLOBAL is needed.
-@@ -1122,15 +1198,17 @@
-      * Only the first pyhton version used will be switched on.
-      */
- 
--    int no_rtl_global_needed_for(char *python_instsoname)
-+    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
-     {
-       int needed = 0;
-       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
-       if (pylib != 0)
-       {
-+          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
-           void (*init)(void) = dlsym(pylib, "Py_Initialize");
-           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
-           void (*final)(void) = dlsym(pylib, "Py_Finalize");
-+          (*pfx)(prefix);
-           (*init)();
-           needed = (*simple)("import termios") == -1;
-           (*final)();
-@@ -1142,13 +1220,61 @@
-     int main(int argc, char** argv)
-     {
-       int not_needed = 0;
--      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
-+      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
-             not_needed = 1;
-       return !not_needed;
-     }],
-     [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
-+
-   CFLAGS=$cflags_save
-   LDFLAGS=$ldflags_save
-+
-+  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
-+  cflags_save=$CFLAGS
-+  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
-+  ldflags_save=$LDFLAGS
-+  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
-+  LDFLAGS="-ldl $LDFLAGS"
-+  AC_RUN_IFELSE([
-+    #include <dlfcn.h>
-+    #include <wchar.h>
-+    /* If this program fails, then RTLD_GLOBAL is needed.
-+     * RTLD_GLOBAL will be used and then it is not possible to
-+     * have both python versions enabled in the same vim instance.
-+     * Only the first pyhton version used will be switched on.
-+     */
-+
-+    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
-+    {
-+      int needed = 0;
-+      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
-+      if (pylib != 0)
-+      {
-+          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
-+          void (*init)(void) = dlsym(pylib, "Py_Initialize");
-+          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
-+          void (*final)(void) = dlsym(pylib, "Py_Finalize");
-+          (*pfx)(prefix);
-+          (*init)();
-+          needed = (*simple)("import termios") == -1;
-+          (*final)();
-+          dlclose(pylib);
-+      }
-+      return !needed;
-+    }
-+
-+    int main(int argc, char** argv)
-+    {
-+      int not_needed = 0;
-+      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
-+            not_needed = 1;
-+      return !not_needed;
-+    }],
-+    [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
-+
-+  CFLAGS=$cflags_save
-+  LDFLAGS=$ldflags_save
-+
-   PYTHON_SRC="if_python.c"
-   PYTHON_OBJ="objects/if_python.o"
-   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
-@@ -1290,6 +1416,9 @@
-       AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
-     fi
-   fi
-+  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
-+    AC_MSG_ERROR([could not configure Tcl])
-+  fi
- fi
- AC_SUBST(TCL_SRC)
- AC_SUBST(TCL_OBJ)
-@@ -1299,54 +1428,57 @@
- 
- AC_MSG_CHECKING(--enable-rubyinterp argument)
- AC_ARG_ENABLE(rubyinterp,
--	[  --enable-rubyinterp     Include Ruby interpreter.], ,
-+	[  --enable-rubyinterp[=OPTS]     Include Ruby interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
- 	[enable_rubyinterp="no"])
- AC_MSG_RESULT($enable_rubyinterp)
--if test "$enable_rubyinterp" = "yes"; then
-+if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
-   AC_MSG_CHECKING(--with-ruby-command argument)
-+  AC_SUBST(vi_cv_path_ruby)
-   AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
--	RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
-+	RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
- 	RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
--  AC_SUBST(vi_cv_path_ruby)
-   AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
-   if test "X$vi_cv_path_ruby" != "X"; then
-     AC_MSG_CHECKING(Ruby version)
-     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
-       AC_MSG_RESULT(OK)
-+      AC_MSG_CHECKING(Ruby rbconfig)
-+      ruby_rbconfig="RbConfig"
-+      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
-+	ruby_rbconfig="Config"
-+      fi
-+      AC_MSG_RESULT($ruby_rbconfig)
-       AC_MSG_CHECKING(Ruby header files)
--      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null`
-+      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null`
-       if test "X$rubyhdrdir" != "X"; then
- 	AC_MSG_RESULT($rubyhdrdir)
- 	RUBY_CFLAGS="-I$rubyhdrdir"
--        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'`
-+        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['arch']]"`
-         if test -d "$rubyhdrdir/$rubyarch"; then
-           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
-         fi
--        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'`
-+        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
-         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
--	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'`
-+	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
- 	if test "X$rubylibs" != "X"; then
- 	  RUBY_LIBS="$rubylibs"
- 	fi
--	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
--	if test -f "$rubyhdrdir/$librubyarg"; then
--	  librubyarg="$rubyhdrdir/$librubyarg"
--	else
--	  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
--	  if test -f "$rubylibdir/$librubyarg"; then
--	    librubyarg="$rubylibdir/$librubyarg"
--	  elif test "$librubyarg" = "libruby.a"; then
--	    dnl required on Mac OS 10.3 where libruby.a doesn't exist
--	    librubyarg="-lruby"
--	  else
--	    librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
--	  fi
-+	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
-+	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
-+  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
-+	if test -f "$rubylibdir/$librubya"; then
-+	  librubyarg="$librubyarg"
-+    RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
-+  elif test "$librubyarg" = "libruby.a"; then
-+    dnl required on Mac OS 10.3 where libruby.a doesn't exist
-+    librubyarg="-lruby"
-+    RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
- 	fi
- 
- 	if test "X$librubyarg" != "X"; then
- 	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
- 	fi
--	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'`
-+	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
- 	if test "X$rubyldflags" != "X"; then
- 	  dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
- 	  dnl be included if requested by passing --with-mac-arch to
-@@ -1360,6 +1492,12 @@
- 	RUBY_OBJ="objects/if_ruby.o"
- 	RUBY_PRO="if_ruby.pro"
- 	AC_DEFINE(FEAT_RUBY)
-+	if test "$enable_rubyinterp" = "dynamic"; then
-+	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
-+	  AC_DEFINE(DYNAMIC_RUBY)
-+	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
-+	  RUBY_LIBS=
-+	fi
-       else
- 	AC_MSG_RESULT(not found; disabling Ruby)
-       fi
-@@ -1367,6 +1505,10 @@
-       AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
-     fi
-   fi
-+
-+  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
-+    AC_MSG_ERROR([could not configure Ruby])
-+  fi
- fi
- AC_SUBST(RUBY_SRC)
- AC_SUBST(RUBY_OBJ)
-@@ -2248,10 +2390,15 @@
- if test -z "$SKIP_MOTIF"; then
-   cppflags_save=$CPPFLAGS
-   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
--  AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
--		   Xm/UnhighlightT.h Xm/Notebook.h)
-+  if test "$zOSUnix" = "yes"; then
-+	xmheader="Xm/Xm.h"
-+  else
-+	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
-+  	   Xm/UnhighlightT.h Xm/Notebook.h"  
-+  fi    
-+  AC_CHECK_HEADERS($xmheader)
- 
--  if test $ac_cv_header_Xm_XpmP_h = yes; then
-+  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
-     dnl Solaris uses XpmAttributes_21, very annoying.
-     AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
-     AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
-@@ -2529,13 +2676,14 @@
-   AC_MSG_RESULT([empty: automatic terminal library selection])
-   dnl  On HP-UX 10.10 termcap or termlib should be used instead of
-   dnl  curses, because curses is much slower.
--  dnl  Newer versions of ncurses are preferred over anything.
-+  dnl  Newer versions of ncurses are preferred over anything, except
-+  dnl  when tinfo has been split off, it contains all we need.
-   dnl  Older versions of ncurses have bugs, get a new one!
-   dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
-   dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
-   case "`uname -s 2>/dev/null`" in
--	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
--	*)	tlibs="ncurses termlib termcap curses";;
-+	OSF1|SCO_SV)	tlibs="tinfo ncurses curses termlib termcap";;
-+	*)	tlibs="tinfo ncurses termlib termcap curses";;
-   esac
-   for libname in $tlibs; do
-     AC_CHECK_LIB(${libname}, tgetent,,)
-@@ -2865,7 +3013,7 @@
- dnl Check for functions in one big call, to reduce the size of configure.
- dnl Can only be used for functions that do not require any include.
- AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
--	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
-+	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
- 	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
- 	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
- 	sigvec strcasecmp strerror strftime stricmp strncasecmp \
-@@ -2975,6 +3123,7 @@
- 
- dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
- dnl when -lacl works, also try to use -lattr (required for Debian).
-+dnl On Solaris, use the acl_get/set functions in libsec, if present.
- AC_MSG_CHECKING(--disable-acl argument)
- AC_ARG_ENABLE(acl,
- 	[  --disable-acl           Don't check for ACL support.],
-@@ -2997,6 +3146,7 @@
- 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
- 	AC_MSG_RESULT(no))
- 
-+AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
- AC_MSG_CHECKING(for Solaris ACL support)
- AC_TRY_LINK([
- #ifdef HAVE_SYS_ACL_H
-@@ -3004,7 +3154,7 @@
- #endif], [acl("foo", GETACLCNT, 0, NULL);
- 	],
- 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
--	AC_MSG_RESULT(no))
-+	AC_MSG_RESULT(no)))
- 
- AC_MSG_CHECKING(for AIX ACL support)
- AC_TRY_LINK([
-@@ -3180,7 +3330,7 @@
- }],
- AC_MSG_RESULT(ok),
- AC_MSG_ERROR([WRONG!  uint32_t not defined correctly.]),
--AC_MSG_ERROR([could not compile program using uint32_t.]))
-+AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
- 
- dnl Check for memmove() before bcopy(), makes memmove() be used when both are
- dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
-@@ -3280,7 +3430,7 @@
- AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
- 
- dnl Check how we can run ctags.  Default to "ctags" when nothing works.
--dnl --version for Exuberant ctags (preferred)
-+dnl Use --version to detect Exuberant ctags (preferred)
- dnl       Add --fields=+S to get function signatures for omni completion.
- dnl -t for typedefs (many ctags have this)
- dnl -s for static functions (Elvis ctags only?)
-@@ -3290,6 +3440,10 @@
- test -f tags && mv tags tags.save
- if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
-   TAGPRG="ctags -I INIT+ --fields=+S"
-+elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
-+  TAGPRG="exctags -I INIT+ --fields=+S"
-+elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
-+  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
- else
-   TAGPRG="ctags"
-   (eval etags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
-@@ -3477,9 +3631,10 @@
-   dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
-   dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
-   dnl Also remove duplicate _FORTIFY_SOURCE arguments.
-+  dnl And undefine it first to avoid a warning.
-   AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
-   if test "$gccmajor" -gt "3"; then
--    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
-+    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
-     AC_MSG_RESULT(yes)
-   else
-     AC_MSG_RESULT(no)
-@@ -3487,6 +3642,28 @@
- fi
- AC_SUBST(DEPEND_CFLAGS_FILTER)
- 
-+dnl link.sh tries to avoid overlinking in a hackish way.
-+dnl At least GNU ld supports --as-needed which provides the same functionality
-+dnl at linker level. Let's use it.
-+AC_MSG_CHECKING(linker --as-needed support)
-+LINK_AS_NEEDED=
-+# Check if linker supports --as-needed and --no-as-needed options
-+if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
-+  LDFLAGS="$LDFLAGS -Wl,--as-needed"
-+  LINK_AS_NEEDED=yes
-+fi
-+if test "$LINK_AS_NEEDED" = yes; then
-+  AC_MSG_RESULT(yes)
-+else
-+  AC_MSG_RESULT(no)
-+fi
-+AC_SUBST(LINK_AS_NEEDED)
-+
-+# IBM z/OS reset CFLAGS for config.mk
-+if test "$zOSUnix" = "yes"; then
-+	CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
-+fi
-+
- dnl write output files
- AC_OUTPUT(auto/config.mk:config.mk.in)
- 
-diff -Naur vim73.orig/src/dehqx.py vim73/src/dehqx.py
---- vim73.orig/src/dehqx.py	2010-05-15 11:04:12.000000000 +0000
-+++ vim73/src/dehqx.py	2012-11-01 20:35:47.000000000 +0000
-@@ -1,7 +1,10 @@
- # Python script to get both the data and resource fork from a BinHex encoded
- # file.
--# Author: Taro Muraoka
--# Last Change: 2003 Oct 25
-+# Author: MURAOKA Taro <koron.kaoriya@gmail.com>
-+# Last Change: 2012 Jun 29
-+#
-+# Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
-+# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
- 
- import sys
- import binhex
-diff -Naur vim73.orig/src/diff.c vim73/src/diff.c
---- vim73.orig/src/diff.c	2010-07-31 13:35:21.000000000 +0000
-+++ vim73/src/diff.c	2012-11-01 20:35:48.000000000 +0000
-@@ -615,11 +615,13 @@
- #endif
- 	    /* A change may have made filler lines invalid, need to take care
- 	     * of that for other windows. */
--	    if (wp != curwin && wp->w_topfill > 0)
-+	    n = diff_check(wp, wp->w_topline);
-+	    if ((wp != curwin && wp->w_topfill > 0) || n > 0)
- 	    {
--		n = diff_check(wp, wp->w_topline);
- 		if (wp->w_topfill > n)
- 		    wp->w_topfill = (n < 0 ? 0 : n);
-+		else if (n > 0 && n > wp->w_topfill)
-+		    wp->w_topfill = n;
- 	    }
- 	}
- }
-@@ -783,6 +785,15 @@
- 	goto theend;
-     }
- 
-+    /* :diffupdate! */
-+    if (eap != NULL && eap->forceit)
-+	for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
-+	{
-+	    buf = curtab->tp_diffbuf[idx_new];
-+	    if (buf_valid(buf))
-+		buf_check_timestamp(buf, FALSE);
-+	}
-+
-     /* Write the first buffer to a tempfile. */
-     buf = curtab->tp_diffbuf[idx_orig];
-     if (diff_write(buf, tmp_orig) == FAIL)
-@@ -1127,11 +1138,13 @@
- # endif
- 
-     wp->w_p_diff = TRUE;
-+    /* Use 'scrollbind' and 'cursorbind' when available */
-+#ifdef FEAT_SCROLLBIND
-+    wp->w_p_scb = TRUE;
-+#endif
- #ifdef FEAT_CURSORBIND
--    /* Use cursorbind if it's available */
-     wp->w_p_crb = TRUE;
- #endif
--    wp->w_p_scb = TRUE;
-     wp->w_p_wrap = FALSE;
- # ifdef FEAT_FOLDING
-     curwin = wp;
-@@ -1177,10 +1190,7 @@
- 	{
- 	    /* Set 'diff', 'scrollbind' off and 'wrap' on. */
- 	    wp->w_p_diff = FALSE;
--#ifdef FEAT_CURSORBIND
--	    wp->w_p_crb = FALSE;
--#endif
--	    wp->w_p_scb = FALSE;
-+	    RESET_BINDING(wp);
- 	    wp->w_p_wrap = TRUE;
- #ifdef FEAT_FOLDING
- 	    curwin = wp;
-diff -Naur vim73.orig/src/digraph.c vim73/src/digraph.c
---- vim73.orig/src/digraph.c	2010-05-15 11:04:09.000000000 +0000
-+++ vim73/src/digraph.c	2012-11-01 20:35:44.000000000 +0000
-@@ -2080,13 +2080,13 @@
- /*
-  * Lookup the pair "char1", "char2" in the digraph tables.
-  * If no match, return "char2".
-- * If "meta" is TRUE and "char1" is a space, return "char2" | 0x80.
-+ * If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80.
-  */
-     static int
--getexactdigraph(char1, char2, meta)
-+getexactdigraph(char1, char2, meta_char)
-     int		char1;
-     int		char2;
--    int		meta;
-+    int		meta_char;
- {
-     int		i;
-     int		retval = 0;
-@@ -2159,7 +2159,7 @@
- 
-     if (retval == 0)		/* digraph deleted or not found */
-     {
--	if (char1 == ' ' && meta)	/* <space> <char> --> meta-char */
-+	if (char1 == ' ' && meta_char)	/* <space> <char> --> meta-char */
- 	    return (char2 | 0x80);
- 	return char2;
-     }
-@@ -2171,16 +2171,16 @@
-  * Allow for both char1-char2 and char2-char1
-  */
-     int
--getdigraph(char1, char2, meta)
-+getdigraph(char1, char2, meta_char)
-     int	char1;
-     int	char2;
--    int	meta;
-+    int	meta_char;
- {
-     int	    retval;
- 
--    if (((retval = getexactdigraph(char1, char2, meta)) == char2)
-+    if (((retval = getexactdigraph(char1, char2, meta_char)) == char2)
- 	    && (char1 != char2)
--	    && ((retval = getexactdigraph(char2, char1, meta)) == char1))
-+	    && ((retval = getexactdigraph(char2, char1, meta_char)) == char1))
- 	return char2;
-     return retval;
- }
-diff -Naur vim73.orig/src/edit.c vim73/src/edit.c
---- vim73.orig/src/edit.c	2010-08-08 12:55:05.000000000 +0000
-+++ vim73/src/edit.c	2012-11-01 20:35:48.000000000 +0000
-@@ -58,6 +58,10 @@
- };
- 
- static char e_hitend[] = N_("Hit end of paragraph");
-+#ifdef FEAT_COMPL_FUNC
-+static char e_complwin[] = N_("E839: Completion function changed window");
-+static char e_compldel[] = N_("E840: Completion function deleted text");
-+#endif
- 
- /*
-  * Structure used to store one match for insert completion.
-@@ -131,6 +135,8 @@
- static int	  compl_cont_mode = 0;
- static expand_T	  compl_xp;
- 
-+static int	  compl_opt_refresh_always = FALSE;
-+
- static void ins_ctrl_x __ARGS((void));
- static int  has_compl_option __ARGS((int dict_opt));
- static int  ins_compl_accept_char __ARGS((int c));
-@@ -149,16 +155,19 @@
- static void ins_compl_free __ARGS((void));
- static void ins_compl_clear __ARGS((void));
- static int  ins_compl_bs __ARGS((void));
-+static int  ins_compl_need_restart __ARGS((void));
- static void ins_compl_new_leader __ARGS((void));
- static void ins_compl_addleader __ARGS((int c));
--static int ins_compl_len __ARGS((void));
-+static int  ins_compl_len __ARGS((void));
- static void ins_compl_restart __ARGS((void));
- static void ins_compl_set_original_text __ARGS((char_u *str));
- static void ins_compl_addfrommatch __ARGS((void));
- static int  ins_compl_prep __ARGS((int c));
-+static void ins_compl_fixRedoBufForLeader __ARGS((char_u *ptr_arg));
- static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
- #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
- static void ins_compl_add_list __ARGS((list_T *list));
-+static void ins_compl_add_dict __ARGS((dict_T *dict));
- #endif
- static int  ins_compl_get_exp __ARGS((pos_T *ini));
- static void ins_compl_delete __ARGS((void));
-@@ -244,12 +253,14 @@
- #ifdef FEAT_DIGRAPHS
- static int  ins_digraph __ARGS((void));
- #endif
--static int  ins_copychar __ARGS((linenr_T lnum));
- static int  ins_ctrl_ey __ARGS((int tc));
- #ifdef FEAT_SMARTINDENT
- static void ins_try_si __ARGS((int c));
- #endif
- static colnr_T get_nolist_virtcol __ARGS((void));
-+#ifdef FEAT_AUTOCMD
-+static char_u *do_insert_char_pre __ARGS((int c));
-+#endif
- 
- static colnr_T	Insstart_textlen;	/* length of line when insert started */
- static colnr_T	Insstart_blank_vcol;	/* vcol for first inserted blank */
-@@ -775,7 +786,20 @@
- 		 * completion: Add to "compl_leader". */
- 		if (ins_compl_accept_char(c))
- 		{
--		    ins_compl_addleader(c);
-+#ifdef FEAT_AUTOCMD
-+		    /* Trigger InsertCharPre. */
-+		    char_u *str = do_insert_char_pre(c);
-+		    char_u *p;
-+
-+		    if (str != NULL)
-+		    {
-+			for (p = str; *p != NUL; mb_ptr_adv(p))
-+			    ins_compl_addleader(PTR2CHAR(p));
-+			vim_free(str);
-+		    }
-+		    else
-+#endif
-+			ins_compl_addleader(c);
- 		    continue;
- 		}
- 
-@@ -1377,10 +1401,42 @@
- 		goto do_intr;
- #endif
- 
-+normalchar:
- 	    /*
- 	     * Insert a nomal character.
- 	     */
--normalchar:
-+#ifdef FEAT_AUTOCMD
-+	    if (!p_paste)
-+	    {
-+		/* Trigger InsertCharPre. */
-+		char_u *str = do_insert_char_pre(c);
-+		char_u *p;
-+
-+		if (str != NULL)
-+		{
-+		    if (*str != NUL && stop_arrow() != FAIL)
-+		    {
-+			/* Insert the new value of v:char literally. */
-+			for (p = str; *p != NUL; mb_ptr_adv(p))
-+			{
-+			    c = PTR2CHAR(p);
-+			    if (c == CAR || c == K_KENTER || c == NL)
-+				ins_eol(c);
-+			    else
-+				ins_char(c);
-+			}
-+			AppendToRedobuffLit(str, -1);
-+		    }
-+		    vim_free(str);
-+		    c = NUL;
-+		}
-+
-+		/* If the new value is already inserted or an empty string
-+		 * then don't insert any character. */
-+		if (c == NUL)
-+		    break;
-+	    }
-+#endif
- #ifdef FEAT_SMARTINDENT
- 	    /* Try to perform smart-indenting. */
- 	    ins_try_si(c);
-@@ -1398,13 +1454,16 @@
- 		    Insstart_blank_vcol = get_nolist_virtcol();
- 	    }
- 
--	    if (vim_iswordc(c) || !echeck_abbr(
-+	    /* Insert a normal character and check for abbreviations on a
-+	     * special character.  Let CTRL-] expand abbreviations without
-+	     * inserting it. */
-+	    if (vim_iswordc(c) || (!echeck_abbr(
- #ifdef FEAT_MBYTE
- 			/* Add ABBR_OFF for characters above 0x100, this is
- 			 * what check_abbr() expects. */
- 			(has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
- #endif
--			c))
-+		       c) && c != Ctrl_RSB))
- 	    {
- 		insert_special(c, FALSE, FALSE);
- #ifdef FEAT_RIGHTLEFT
-@@ -1549,12 +1608,16 @@
- ins_ctrl_v()
- {
-     int		c;
-+    int		did_putchar = FALSE;
- 
-     /* may need to redraw when no more chars available now */
-     ins_redraw(FALSE);
- 
-     if (redrawing() && !char_avail())
-+    {
- 	edit_putchar('^', TRUE);
-+	did_putchar = TRUE;
-+    }
-     AppendToRedobuff((char_u *)CTRL_V_STR);	/* CTRL-V */
- 
- #ifdef FEAT_CMDL_INFO
-@@ -1562,8 +1625,10 @@
- #endif
- 
-     c = get_literal();
--    edit_unputchar();  /* when line fits in 'columns' the '^' is at the start
--			  of the next line and will not be redrawn */
-+    if (did_putchar)
-+	/* when the line fits in 'columns' the '^' is at the start of the next
-+	 * line and will not removed by the redraw */
-+	edit_unputchar();
- #ifdef FEAT_CMDL_INFO
-     clear_showcmd();
- #endif
-@@ -1583,11 +1648,7 @@
- #define PC_STATUS_RIGHT	1	/* right halve of double-wide char */
- #define PC_STATUS_LEFT	2	/* left halve of double-wide char */
- #define PC_STATUS_SET	3	/* pc_bytes was filled */
--#ifdef FEAT_MBYTE
- static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */
--#else
--static char_u pc_bytes[2];		/* saved bytes */
--#endif
- static int  pc_attr;
- static int  pc_row;
- static int  pc_col;
-@@ -1713,9 +1774,9 @@
-     static void
- undisplay_dollar()
- {
--    if (dollar_vcol)
-+    if (dollar_vcol >= 0)
-     {
--	dollar_vcol = 0;
-+	dollar_vcol = -1;
- 	redrawWinline(curwin->w_cursor.lnum, FALSE);
-     }
- }
-@@ -2133,7 +2194,7 @@
- 		    || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
- 		    || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
- 		    || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
--		    || c == Ctrl_S || c == 's');
-+		    || c == Ctrl_S || c == Ctrl_K || c == 's');
- 	case CTRL_X_SCROLL:
- 	    return (c == Ctrl_Y || c == Ctrl_E);
- 	case CTRL_X_WHOLE_LINE:
-@@ -2658,6 +2719,7 @@
-     if (stop_arrow() == FAIL)
- 	return;
- 
-+    compl_direction = FORWARD;
-     if (startcol > curwin->w_cursor.col)
- 	startcol = curwin->w_cursor.col;
-     compl_col = startcol;
-@@ -3295,7 +3357,7 @@
-     /* Deleted more than what was used to find matches or didn't finish
-      * finding all matches: need to look for matches all over again. */
-     if (curwin->w_cursor.col <= compl_col + compl_length
--						     || compl_was_interrupted)
-+						  || ins_compl_need_restart())
- 	ins_compl_restart();
- 
-     vim_free(compl_leader);
-@@ -3309,6 +3371,20 @@
- }
- 
- /*
-+ * Return TRUE when we need to find matches again, ins_compl_restart() is to
-+ * be called.
-+ */
-+    static int
-+ins_compl_need_restart()
-+{
-+    /* Return TRUE if we didn't complete finding matches or when the
-+     * 'completefunc' returned "always" in the "refresh" dictionary item. */
-+    return compl_was_interrupted
-+	|| ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
-+						  && compl_opt_refresh_always);
-+}
-+
-+/*
-  * Called after changing "compl_leader".
-  * Show the popup menu with a different set of matches.
-  * May also search for matches again if the previous search was interrupted.
-@@ -3391,20 +3467,32 @@
- 	(*mb_char2bytes)(c, buf);
- 	buf[cc] = NUL;
- 	ins_char_bytes(buf, cc);
-+	if (compl_opt_refresh_always)
-+	    AppendToRedobuff(buf);
-     }
-     else
- #endif
-+    {
- 	ins_char(c);
-+	if (compl_opt_refresh_always)
-+	    AppendCharToRedobuff(c);
-+    }
- 
-     /* If we didn't complete finding matches we must search again. */
--    if (compl_was_interrupted)
-+    if (ins_compl_need_restart())
- 	ins_compl_restart();
- 
--    vim_free(compl_leader);
--    compl_leader = vim_strnsave(ml_get_curline() + compl_col,
-+    /* When 'always' is set, don't reset compl_leader. While completing,
-+     * cursor doesn't point original position, changing compl_leader would
-+     * break redo. */
-+    if (!compl_opt_refresh_always)
-+    {
-+	vim_free(compl_leader);
-+	compl_leader = vim_strnsave(ml_get_curline() + compl_col,
- 				     (int)(curwin->w_cursor.col - compl_col));
--    if (compl_leader != NULL)
--	ins_compl_new_leader();
-+	if (compl_leader != NULL)
-+	    ins_compl_new_leader();
-+    }
- }
- 
- /*
-@@ -3480,11 +3568,7 @@
- 	    return;
-     }
-     p += len;
--#ifdef FEAT_MBYTE
--    c = mb_ptr2char(p);
--#else
--    c = *p;
--#endif
-+    c = PTR2CHAR(p);
-     ins_compl_addleader(c);
- }
- 
-@@ -3653,9 +3737,6 @@
- 	     * memory that was used, and make sure we can redo the insert. */
- 	    if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
- 	    {
--		char_u	*p;
--		int	temp = 0;
--
- 		/*
- 		 * If any of the original typed text has been changed, eg when
- 		 * ignorecase is set, we must add back-spaces to the redo
-@@ -3666,25 +3747,9 @@
- 		 */
- 		if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
- 		    ptr = compl_curr_match->cp_str;
--		else if (compl_leader != NULL)
--		    ptr = compl_leader;
- 		else
--		    ptr = compl_orig_text;
--		if (compl_orig_text != NULL)
--		{
--		    p = compl_orig_text;
--		    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
--								       ++temp)
--			;
--#ifdef FEAT_MBYTE
--		    if (temp > 0)
--			temp -= (*mb_head_off)(compl_orig_text, p + temp);
--#endif
--		    for (p += temp; *p != NUL; mb_ptr_adv(p))
--			AppendCharToRedobuff(K_BS);
--		}
--		if (ptr != NULL)
--		    AppendToRedobuffLit(ptr + temp, -1);
-+		    ptr = NULL;
-+		ins_compl_fixRedoBufForLeader(ptr);
- 	    }
- 
- #ifdef FEAT_CINDENT
-@@ -3759,6 +3824,11 @@
- 	    if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
- 		do_c_expr_indent();
- #endif
-+#ifdef FEAT_AUTOCMD
-+	    /* Trigger the CompleteDone event to give scripts a chance to act
-+	     * upon the completion. */
-+	    apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
-+#endif
- 	}
-     }
- 
-@@ -3774,6 +3844,44 @@
- }
- 
- /*
-+ * Fix the redo buffer for the completion leader replacing some of the typed
-+ * text.  This inserts backspaces and appends the changed text.
-+ * "ptr" is the known leader text or NUL.
-+ */
-+    static void
-+ins_compl_fixRedoBufForLeader(ptr_arg)
-+    char_u *ptr_arg;
-+{
-+    int	    len;
-+    char_u  *p;
-+    char_u  *ptr = ptr_arg;
-+
-+    if (ptr == NULL)
-+    {
-+	if (compl_leader != NULL)
-+	    ptr = compl_leader;
-+	else
-+	    return;  /* nothing to do */
-+    }
-+    if (compl_orig_text != NULL)
-+    {
-+	p = compl_orig_text;
-+	for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len)
-+	    ;
-+#ifdef FEAT_MBYTE
-+	if (len > 0)
-+	    len -= (*mb_head_off)(p, p + len);
-+#endif
-+	for (p += len; *p != NUL; mb_ptr_adv(p))
-+	    AppendCharToRedobuff(K_BS);
-+    }
-+    else
-+	len = 0;
-+    if (ptr != NULL)
-+	AppendToRedobuffLit(ptr + len, -1);
-+}
-+
-+/*
-  * Loops through the list of windows, loaded-buffers or non-loaded-buffers
-  * (depending on flag) starting from buf and looking for a non-scanned
-  * buffer (other than curbuf).	curbuf is special, if it is called with
-@@ -3829,10 +3937,14 @@
-     int		type;	    /* CTRL_X_OMNI or CTRL_X_FUNCTION */
-     char_u	*base;
- {
--    list_T      *matchlist;
-+    list_T      *matchlist = NULL;
-+    dict_T	*matchdict = NULL;
-     char_u	*args[2];
-     char_u	*funcname;
-     pos_T	pos;
-+    win_T	*curwin_save;
-+    buf_T	*curbuf_save;
-+    typval_T	rettv;
- 
-     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
-     if (*funcname == NUL)
-@@ -3843,13 +3955,50 @@
-     args[1] = base;
- 
-     pos = curwin->w_cursor;
--    matchlist = call_func_retlist(funcname, 2, args, FALSE);
-+    curwin_save = curwin;
-+    curbuf_save = curbuf;
-+
-+    /* Call a function, which returns a list or dict. */
-+    if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK)
-+    {
-+	switch (rettv.v_type)
-+	{
-+	    case VAR_LIST:
-+		matchlist = rettv.vval.v_list;
-+		break;
-+	    case VAR_DICT:
-+		matchdict = rettv.vval.v_dict;
-+		break;
-+	    default:
-+		/* TODO: Give error message? */
-+		clear_tv(&rettv);
-+		break;
-+	}
-+    }
-+
-+    if (curwin_save != curwin || curbuf_save != curbuf)
-+    {
-+	EMSG(_(e_complwin));
-+	goto theend;
-+    }
-     curwin->w_cursor = pos;	/* restore the cursor position */
--    if (matchlist == NULL)
--	return;
-+    check_cursor();
-+    if (!equalpos(curwin->w_cursor, pos))
-+    {
-+	EMSG(_(e_compldel));
-+	goto theend;
-+    }
-+
-+    if (matchlist != NULL)
-+	ins_compl_add_list(matchlist);
-+    else if (matchdict != NULL)
-+	ins_compl_add_dict(matchdict);
- 
--    ins_compl_add_list(matchlist);
--    list_unref(matchlist);
-+theend:
-+    if (matchdict != NULL)
-+	dict_unref(matchdict);
-+    if (matchlist != NULL)
-+	list_unref(matchlist);
- }
- #endif /* FEAT_COMPL_FUNC */
- 
-@@ -3876,6 +4025,33 @@
- }
- 
- /*
-+ * Add completions from a dict.
-+ */
-+    static void
-+ins_compl_add_dict(dict)
-+    dict_T	*dict;
-+{
-+    dictitem_T	*di_refresh;
-+    dictitem_T	*di_words;
-+
-+    /* Check for optional "refresh" item. */
-+    compl_opt_refresh_always = FALSE;
-+    di_refresh = dict_find(dict, (char_u *)"refresh", 7);
-+    if (di_refresh != NULL && di_refresh->di_tv.v_type == VAR_STRING)
-+    {
-+	char_u	*v = di_refresh->di_tv.vval.v_string;
-+
-+	if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
-+	    compl_opt_refresh_always = TRUE;
-+    }
-+
-+    /* Add completions from a "words" list. */
-+    di_words = dict_find(dict, (char_u *)"words", 5);
-+    if (di_words != NULL && di_words->di_tv.v_type == VAR_LIST)
-+	ins_compl_add_list(di_words->di_tv.vval.v_list);
-+}
-+
-+/*
-  * Add a match to the list of matches from a typeval_T.
-  * If the given string is already in the list of completions, then return
-  * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
-@@ -3889,6 +4065,7 @@
-     char_u	*word;
-     int		icase = FALSE;
-     int		adup = FALSE;
-+    int		aempty = FALSE;
-     char_u	*(cptext[CPT_COUNT]);
- 
-     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
-@@ -3906,13 +4083,15 @@
- 	    icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
- 	if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
- 	    adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
-+	if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
-+	    aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
-     }
-     else
-     {
- 	word = get_tv_string_chk(tv);
- 	vim_memset(cptext, 0, sizeof(cptext));
-     }
--    if (word == NULL || *word == NUL)
-+    if (word == NULL || (!aempty && *word == NUL))
- 	return FAIL;
-     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
- }
-@@ -4015,8 +4194,8 @@
- 			ins_buf->b_fname == NULL
- 			    ? buf_spname(ins_buf)
- 			    : ins_buf->b_sfname == NULL
--				? (char *)ins_buf->b_fname
--				: (char *)ins_buf->b_sfname);
-+				? ins_buf->b_fname
-+				: ins_buf->b_sfname);
- 		(void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
- 	    }
- 	    else if (*e_cpt == NUL)
-@@ -4403,6 +4582,11 @@
-     int	    found_end = FALSE;
-     int	    advance;
- 
-+    /* When user complete function return -1 for findstart which is next
-+     * time of 'always', compl_shown_match become NULL. */
-+    if (compl_shown_match == NULL)
-+	return -1;
-+
-     if (compl_leader != NULL
- 			&& (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
-     {
-@@ -4994,6 +5178,8 @@
- 	    int		col;
- 	    char_u	*funcname;
- 	    pos_T	pos;
-+	    win_T	*curwin_save;
-+	    buf_T	*curbuf_save;
- 
- 	    /* Call 'completefunc' or 'omnifunc' and get pattern length as a
- 	     * string */
-@@ -5009,8 +5195,40 @@
- 	    args[0] = (char_u *)"1";
- 	    args[1] = NULL;
- 	    pos = curwin->w_cursor;
-+	    curwin_save = curwin;
-+	    curbuf_save = curbuf;
- 	    col = call_func_retnr(funcname, 2, args, FALSE);
-+	    if (curwin_save != curwin || curbuf_save != curbuf)
-+	    {
-+		EMSG(_(e_complwin));
-+		return FAIL;
-+	    }
- 	    curwin->w_cursor = pos;	/* restore the cursor position */
-+	    check_cursor();
-+	    if (!equalpos(curwin->w_cursor, pos))
-+	    {
-+		EMSG(_(e_compldel));
-+		return FAIL;
-+	    }
-+
-+	    /* Return value -2 means the user complete function wants to
-+	     * cancel the complete without an error.
-+	     * Return value -3 does the same as -2 and leaves CTRL-X mode.*/
-+	    if (col == -2)
-+		return FAIL;
-+	    if (col == -3)
-+	    {
-+		ctrl_x_mode = 0;
-+		edit_submode = NULL;
-+		msg_clr_cmdline();
-+		return FAIL;
-+	    }
-+
-+	    /*
-+	     * Reset extended parameters of completion, when start new
-+	     * completion.
-+	     */
-+	    compl_opt_refresh_always = FALSE;
- 
- 	    if (col < 0)
- 		col = curs_col;
-@@ -5089,6 +5307,10 @@
- 	else
- 	    edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
- 
-+	/* If any of the original typed text has been changed we need to fix
-+	 * the redo buffer. */
-+	ins_compl_fixRedoBufForLeader(NULL);
-+
- 	/* Always add completion for the original text. */
- 	vim_free(compl_orig_text);
- 	compl_orig_text = vim_strnsave(line + compl_col, compl_length);
-@@ -5249,7 +5471,7 @@
- 				compl_curr_match->cp_number);
- 		edit_submode_extra = match_ref;
- 		edit_submode_highl = HLF_R;
--		if (dollar_vcol)
-+		if (dollar_vcol >= 0)
- 		    curs_columns(FALSE);
- 	    }
- 	}
-@@ -5558,6 +5780,16 @@
- # define WHITECHAR(cc) vim_iswhite(cc)
- #endif
- 
-+/*
-+ * "flags": INSCHAR_FORMAT - force formatting
-+ *	    INSCHAR_CTRLV  - char typed just after CTRL-V
-+ *	    INSCHAR_NO_FEX - don't use 'formatexpr'
-+ *
-+ *   NOTE: passes the flags value straight through to internal_format() which,
-+ *	   beside INSCHAR_FORMAT (above), is also looking for these:
-+ *	    INSCHAR_DO_COM   - format comments
-+ *	    INSCHAR_COM_LIST - format comments with num list or 2nd line indent
-+ */
-     void
- insertchar(c, flags, second_indent)
-     int		c;			/* character to insert or NUL */
-@@ -5636,7 +5868,7 @@
- 	 * Need to remove existing (middle) comment leader and insert end
- 	 * comment leader.  First, check what comment leader we can find.
- 	 */
--	i = get_leader_len(line = ml_get_curline(), &p, FALSE);
-+	i = get_leader_len(line = ml_get_curline(), &p, FALSE, TRUE);
- 	if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL)	/* Just checking */
- 	{
- 	    /* Skip middle-comment string */
-@@ -5691,6 +5923,8 @@
-      * Don't do this when 'cindent' or 'indentexpr' is set, because we might
-      * need to re-indent at a ':', or any other character (but not what
-      * 'paste' is set)..
-+     * Don't do this when there an InsertCharPre autocommand is defined,
-+     * because we need to fire the event for every character.
-      */
- #ifdef USE_ON_FLY_SCROLL
-     dont_scroll = FALSE;		/* allow scrolling here */
-@@ -5708,6 +5942,9 @@
- #ifdef FEAT_RIGHTLEFT
- 	    && !p_ri
- #endif
-+#ifdef FEAT_AUTOCMD
-+	    && !has_insertcharpre()
-+#endif
- 	       )
-     {
- #define INPUT_BUFLEN 100
-@@ -5795,6 +6032,9 @@
- 
- /*
-  * Format text at the current insert position.
-+ *
-+ * If the INSCHAR_COM_LIST flag is present, then the value of second_indent
-+ * will be the comment leader length sent to open_line().
-  */
-     static void
- internal_format(textwidth, second_indent, flags, format_only, c)
-@@ -5869,7 +6109,7 @@
- 
- 	/* Don't break until after the comment leader */
- 	if (do_comments)
--	    leader_len = get_leader_len(ml_get_curline(), NULL, FALSE);
-+	    leader_len = get_leader_len(ml_get_curline(), NULL, FALSE, TRUE);
- 	else
- 	    leader_len = 0;
- 
-@@ -5902,6 +6142,7 @@
- 	 * Stop at first entered white when 'formatoptions' has 'v'
- 	 */
- 	while ((!fo_ins_blank && !has_format_option(FO_INS_VI))
-+		    || (flags & INSCHAR_FORMAT)
- 		    || curwin->w_cursor.lnum != Insstart.lnum
- 		    || curwin->w_cursor.col >= Insstart.col)
- 	{
-@@ -6072,23 +6313,59 @@
- 		+ (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
- #ifdef FEAT_COMMENTS
- 		+ (do_comments ? OPENLINE_DO_COM : 0)
-+		+ ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
- #endif
--		, old_indent);
--	old_indent = 0;
-+		, ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent));
-+	if (!(flags & INSCHAR_COM_LIST))
-+	    old_indent = 0;
- 
- 	replace_offset = 0;
- 	if (first_line)
- 	{
--	    if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
--		second_indent = get_number_indent(curwin->w_cursor.lnum -1);
--	    if (second_indent >= 0)
-+	    if (!(flags & INSCHAR_COM_LIST))
- 	    {
-+		/*
-+		 * This section is for auto-wrap of numeric lists.  When not
-+		 * in insert mode (i.e. format_lines()), the INSCHAR_COM_LIST
-+		 * flag will be set and open_line() will handle it (as seen
-+		 * above).  The code here (and in get_number_indent()) will
-+		 * recognize comments if needed...
-+		 */
-+		if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
-+		    second_indent =
-+				 get_number_indent(curwin->w_cursor.lnum - 1);
-+		if (second_indent >= 0)
-+		{
- #ifdef FEAT_VREPLACE
--		if (State & VREPLACE_FLAG)
--		    change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
--		else
-+		    if (State & VREPLACE_FLAG)
-+			change_indent(INDENT_SET, second_indent,
-+							    FALSE, NUL, TRUE);
-+		    else
-+#endif
-+#ifdef FEAT_COMMENTS
-+			if (leader_len > 0 && second_indent - leader_len > 0)
-+		    {
-+			int i;
-+			int padding = second_indent - leader_len;
-+
-+			/* We started at the first_line of a numbered list
-+			 * that has a comment.  the open_line() function has
-+			 * inserted the proper comment leader and positioned
-+			 * the cursor at the end of the split line.  Now we
-+			 * add the additional whitespace needed after the
-+			 * comment leader for the numbered list.  */
-+			for (i = 0; i < padding; i++)
-+			    ins_str((char_u *)" ");
-+			changed_bytes(curwin->w_cursor.lnum, leader_len);
-+		    }
-+		    else
-+		    {
- #endif
--		    (void)set_indent(second_indent, SIN_CHANGED);
-+			(void)set_indent(second_indent, SIN_CHANGED);
-+#ifdef FEAT_COMMENTS
-+		    }
-+#endif
-+		}
- 	    }
- 	    first_line = FALSE;
- 	}
-@@ -6194,7 +6471,7 @@
-     /* With the 'c' flag in 'formatoptions' and 't' missing: only format
-      * comments. */
-     if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
--				     && get_leader_len(old, NULL, FALSE) == 0)
-+				     && get_leader_len(old, NULL, FALSE, TRUE) == 0)
- 	return;
- #endif
- 
-@@ -6598,11 +6875,7 @@
-     char_u	*s;
- 
-     vim_free(last_insert);
--#ifdef FEAT_MBYTE
-     last_insert = alloc(MB_MAXBYTES * 3 + 5);
--#else
--    last_insert = alloc(6);
--#endif
-     if (last_insert != NULL)
-     {
- 	s = last_insert;
-@@ -6640,7 +6913,7 @@
-     char_u	*s;
- {
- #ifdef FEAT_MBYTE
--    char_u	temp[MB_MAXBYTES];
-+    char_u	temp[MB_MAXBYTES + 1];
-     int		i;
-     int		len;
- 
-@@ -7202,7 +7475,7 @@
-     int		cc;
- {
-     int		n;
--    char_u	buf[MB_MAXBYTES];
-+    char_u	buf[MB_MAXBYTES + 1];
-     int		i;
-     int		c;
- 
-@@ -8352,7 +8625,7 @@
-     {
- 	temp = curwin->w_cursor.col;
- 	if (!can_bs(BS_EOL)		/* only if "eol" included */
--		|| do_join(2, FALSE, TRUE) == FAIL)
-+		|| do_join(2, FALSE, TRUE, FALSE) == FAIL)
- 	    vim_beep();
- 	else
- 	    curwin->w_cursor.col = temp;
-@@ -8533,7 +8806,7 @@
- 			ptr[len - 1] = NUL;
- 		}
- 
--		(void)do_join(2, FALSE, FALSE);
-+		(void)do_join(2, FALSE, FALSE, FALSE);
- 		if (temp == NUL && gchar_cursor() != NUL)
- 		    inc_cursor();
- 	    }
-@@ -8612,7 +8885,7 @@
- 	 */
- 	if (	   mode == BACKSPACE_CHAR
- 		&& ((p_sta && in_indent)
--		    || (curbuf->b_p_sts != 0
-+		    || (get_sts_value() != 0
- 			&& curwin->w_cursor.col > 0
- 			&& (*(ml_get_cursor() - 1) == TAB
- 			    || (*(ml_get_cursor() - 1) == ' '
-@@ -8626,9 +8899,9 @@
- 
- 	    *inserted_space_p = FALSE;
- 	    if (p_sta && in_indent)
--		ts = curbuf->b_p_sw;
-+		ts = (int)get_sw_value();
- 	    else
--		ts = curbuf->b_p_sts;
-+		ts = (int)get_sts_value();
- 	    /* Compute the virtual column where we want to be.  Since
- 	     * 'showbreak' may get in the way, need to get the last column of
- 	     * the previous character. */
-@@ -8768,7 +9041,7 @@
-      * We can emulate the vi behaviour by pretending there is a dollar
-      * displayed even when there isn't.
-      *  --pkv Sun Jan 19 01:56:40 EST 2003 */
--    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
-+    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == -1)
- 	dollar_vcol = curwin->w_virtcol;
- 
- #ifdef FEAT_FOLDING
-@@ -9316,8 +9589,8 @@
-      * When nothing special, insert TAB like a normal character
-      */
-     if (!curbuf->b_p_et
--	    && !(p_sta && ind && curbuf->b_p_ts != curbuf->b_p_sw)
--	    && curbuf->b_p_sts == 0)
-+	    && !(p_sta && ind && curbuf->b_p_ts != get_sw_value())
-+	    && get_sts_value() == 0)
- 	return TRUE;
- 
-     if (stop_arrow() == FAIL)
-@@ -9332,9 +9605,9 @@
-     AppendToRedobuff((char_u *)"\t");
- 
-     if (p_sta && ind)		/* insert tab in indent, use 'shiftwidth' */
--	temp = (int)curbuf->b_p_sw;
--    else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
--	temp = (int)curbuf->b_p_sts;
-+	temp = (int)get_sw_value();
-+    else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */
-+	temp = (int)get_sts_value();
-     else			/* otherwise use 'tabstop' */
- 	temp = (int)curbuf->b_p_ts;
-     temp -= get_nolist_virtcol() % temp;
-@@ -9362,7 +9635,7 @@
-     /*
-      * When 'expandtab' not set: Replace spaces by TABs where possible.
-      */
--    if (!curbuf->b_p_et && (curbuf->b_p_sts || (p_sta && ind)))
-+    if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind)))
-     {
- 	char_u		*ptr;
- #ifdef FEAT_VREPLACE
-@@ -9598,6 +9871,7 @@
- {
-     int	    c;
-     int	    cc;
-+    int	    did_putchar = FALSE;
- 
-     pc_status = PC_STATUS_UNSET;
-     if (redrawing() && !char_avail())
-@@ -9606,6 +9880,7 @@
- 	ins_redraw(FALSE);
- 
- 	edit_putchar('?', TRUE);
-+	did_putchar = TRUE;
- #ifdef FEAT_CMDL_INFO
- 	add_to_showcmd_c(Ctrl_K);
- #endif
-@@ -9622,8 +9897,10 @@
-     c = plain_vgetc();
-     --no_mapping;
-     --allow_keys;
--    edit_unputchar();  /* when line fits in 'columns' the '?' is at the start
--			  of the next line and will not be redrawn */
-+    if (did_putchar)
-+	/* when the line fits in 'columns' the '?' is at the start of the next
-+	 * line and will not be removed by the redraw */
-+	edit_unputchar();
- 
-     if (IS_SPECIAL(c) || mod_mask)	    /* special key */
-     {
-@@ -9635,6 +9912,7 @@
-     }
-     if (c != ESC)
-     {
-+	did_putchar = FALSE;
- 	if (redrawing() && !char_avail())
- 	{
- 	    /* may need to redraw when no more chars available now */
-@@ -9642,11 +9920,9 @@
- 
- 	    if (char2cells(c) == 1)
- 	    {
--		/* first remove the '?', otherwise it's restored when typing
--		 * an ESC next */
--		edit_unputchar();
- 		ins_redraw(FALSE);
- 		edit_putchar(c, TRUE);
-+		did_putchar = TRUE;
- 	    }
- #ifdef FEAT_CMDL_INFO
- 	    add_to_showcmd_c(c);
-@@ -9657,8 +9933,10 @@
- 	cc = plain_vgetc();
- 	--no_mapping;
- 	--allow_keys;
--	edit_unputchar();  /* when line fits in 'columns' the '?' is at the
--			      start of the next line and will not be redrawn */
-+	if (did_putchar)
-+	    /* when the line fits in 'columns' the '?' is at the start of the
-+	     * next line and will not be removed by a redraw */
-+	    edit_unputchar();
- 	if (cc != ESC)
- 	{
- 	    AppendToRedobuff((char_u *)CTRL_V_STR);
-@@ -9680,7 +9958,7 @@
-  * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
-  * Returns the char to be inserted, or NUL if none found.
-  */
--    static int
-+    int
- ins_copychar(lnum)
-     linenr_T	lnum;
- {
-@@ -9870,3 +10148,52 @@
-     validate_virtcol();
-     return curwin->w_virtcol;
- }
-+
-+#ifdef FEAT_AUTOCMD
-+/*
-+ * Handle the InsertCharPre autocommand.
-+ * "c" is the character that was typed.
-+ * Return a pointer to allocated memory with the replacement string.
-+ * Return NULL to continue inserting "c".
-+ */
-+    static char_u *
-+do_insert_char_pre(c)
-+    int c;
-+{
-+    char_u	*res;
-+    char_u	buf[MB_MAXBYTES + 1];
-+
-+    /* Return quickly when there is nothing to do. */
-+    if (!has_insertcharpre())
-+	return NULL;
-+
-+#ifdef FEAT_MBYTE
-+    if (has_mbyte)
-+	buf[(*mb_char2bytes)(c, buf)] = NUL;
-+    else
-+#endif
-+    {
-+	buf[0] = c;
-+	buf[1] = NUL;
-+    }
-+
-+    /* Lock the text to avoid weird things from happening. */
-+    ++textlock;
-+    set_vim_var_string(VV_CHAR, buf, -1);  /* set v:char */
-+
-+    res = NULL;
-+    if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
-+    {
-+	/* Get the value of v:char.  It may be empty or more than one
-+	 * character.  Only use it when changed, otherwise continue with the
-+	 * original character to avoid breaking autoindent. */
-+	if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
-+	    res = vim_strsave(get_vim_var_str(VV_CHAR));
-+    }
-+
-+    set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
-+    --textlock;
-+
-+    return res;
-+}
-+#endif
-diff -Naur vim73.orig/src/eval.c vim73/src/eval.c
---- vim73.orig/src/eval.c	2010-08-09 20:12:14.000000000 +0000
-+++ vim73/src/eval.c	2012-11-01 20:35:48.000000000 +0000
-@@ -10,9 +10,6 @@
- /*
-  * eval.c: Expression evaluation.
-  */
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for mch_open(), must be before vim.h */
--#endif
- 
- #include "vim.h"
- 
-@@ -355,13 +352,14 @@
-     {VV_NAME("swapname",	 VAR_STRING), VV_RO},
-     {VV_NAME("swapchoice",	 VAR_STRING), 0},
-     {VV_NAME("swapcommand",	 VAR_STRING), VV_RO},
--    {VV_NAME("char",		 VAR_STRING), VV_RO},
-+    {VV_NAME("char",		 VAR_STRING), 0},
-     {VV_NAME("mouse_win",	 VAR_NUMBER), 0},
-     {VV_NAME("mouse_lnum",	 VAR_NUMBER), 0},
-     {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
-     {VV_NAME("operator",	 VAR_STRING), VV_RO},
-     {VV_NAME("searchforward",	 VAR_NUMBER), 0},
-     {VV_NAME("oldfiles",	 VAR_LIST), 0},
-+    {VV_NAME("windowid",	 VAR_NUMBER), VV_RO},
- };
- 
- /* shorthand */
-@@ -382,9 +380,6 @@
- 
- static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
- static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
--#if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
--static int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
--#endif
- static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
- static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
- static char_u *skip_var_one __ARGS((char_u *arg));
-@@ -429,31 +424,22 @@
- static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
- static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
- static int rettv_list_alloc __ARGS((typval_T *rettv));
--static listitem_T *listitem_alloc __ARGS((void));
- static void listitem_free __ARGS((listitem_T *item));
--static void listitem_remove __ARGS((list_T *l, listitem_T *item));
- static long list_len __ARGS((list_T *l));
--static int list_equal __ARGS((list_T *l1, list_T *l2, int ic));
--static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic));
--static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic));
--static listitem_T *list_find __ARGS((list_T *l, long n));
-+static int list_equal __ARGS((list_T *l1, list_T *l2, int ic, int recursive));
-+static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic, int recursive));
-+static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic, int recursive));
- static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
- static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
--static void list_append __ARGS((list_T *l, listitem_T *item));
- static int list_append_number __ARGS((list_T *l, varnumber_T n));
--static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
- static int list_extend __ARGS((list_T	*l1, list_T *l2, listitem_T *bef));
- static int list_concat __ARGS((list_T *l1, list_T *l2, typval_T *tv));
- static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
--static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
- static char_u *list2string __ARGS((typval_T *tv, int copyID));
-+static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
- static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
- static int free_unref_items __ARGS((int copyID));
--static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
--static void set_ref_in_list __ARGS((list_T *l, int copyID));
--static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
- static int rettv_dict_alloc __ARGS((typval_T *rettv));
--static void dict_unref __ARGS((dict_T *d));
- static void dict_free __ARGS((dict_T *d, int recurse));
- static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
- static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
-@@ -480,6 +466,7 @@
- static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
- #endif
- static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
-+static void f_and __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -608,6 +595,7 @@
- static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_insert __ARGS((typval_T *argvars, typval_T *rettv));
-+static void f_invert __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_isdirectory __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -625,6 +613,9 @@
- static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
- #endif
-+#ifdef FEAT_LUA
-+static void f_luaeval __ARGS((typval_T *argvars, typval_T *rettv));
-+#endif
- static void f_map __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -646,6 +637,7 @@
- #endif
- static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
-+static void f_or __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
- #ifdef FEAT_FLOAT
- static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -653,6 +645,12 @@
- static void f_prevnonblank __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_printf __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_pumvisible __ARGS((typval_T *argvars, typval_T *rettv));
-+#ifdef FEAT_PYTHON3
-+static void f_py3eval __ARGS((typval_T *argvars, typval_T *rettv));
-+#endif
-+#ifdef FEAT_PYTHON
-+static void f_pyeval __ARGS((typval_T *argvars, typval_T *rettv));
-+#endif
- static void f_range __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_readfile __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_reltime __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -689,6 +687,7 @@
- static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
-+static void f_shiftwidth __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
- #ifdef FEAT_FLOAT
- static void f_sin __ARGS((typval_T *argvars, typval_T *rettv));
-@@ -757,6 +756,7 @@
- static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
- static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
-+static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
- 
- static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
- static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
-@@ -791,6 +791,8 @@
- static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
- static int var_check_ro __ARGS((int flags, char_u *name));
- static int var_check_fixed __ARGS((int flags, char_u *name));
-+static int var_check_func_name __ARGS((char_u *name, int new_var));
-+static int valid_varname __ARGS((char_u *varname));
- static int tv_check_lock __ARGS((int lock, char_u *name));
- static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
- static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
-@@ -820,8 +822,6 @@
- static char_u *autoload_name __ARGS((char_u *name));
- static void cat_func_name __ARGS((char_u *buf, ufunc_T *fp));
- static void func_free __ARGS((ufunc_T *fp));
--static void func_unref __ARGS((char_u *name));
--static void func_ref __ARGS((char_u *name));
- static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
- static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
- static void free_funccal __ARGS((funccall_T *fc, int free_val));
-@@ -851,8 +851,9 @@
-     int		    i;
-     struct vimvar   *p;
- 
--    init_var_dict(&globvardict, &globvars_var);
--    init_var_dict(&vimvardict, &vimvars_var);
-+    init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
-+    init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
-+    vimvardict.dv_lock = VAR_FIXED;
-     hash_init(&compat_hashtab);
-     hash_init(&func_hashtab);
- 
-@@ -875,10 +876,11 @@
- 	    hash_add(&compat_hashtab, p->vv_di.di_key);
-     }
-     set_vim_var_nr(VV_SEARCHFORWARD, 1L);
-+    set_reg_var(0);  /* default for v:register is not 0 but '"' */
- 
- #ifdef EBCDIC
-     /*
--     * Sort the function table, to enable binary sort.
-+     * Sort the function table, to enable binary search.
-      */
-     sortFunctions();
- #endif
-@@ -910,6 +912,7 @@
-     hash_clear(&compat_hashtab);
- 
-     free_scriptnames();
-+    free_locales();
- 
-     /* global variables */
-     vars_clear(&globvarht);
-@@ -1355,7 +1358,11 @@
- 	{
- 	    ga_init2(&ga, (int)sizeof(char), 80);
- 	    if (tv.vval.v_list != NULL)
-+	    {
- 		list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
-+		if (tv.vval.v_list->lv_len > 0)
-+		    ga_append(&ga, NL);
-+	    }
- 	    ga_append(&ga, NUL);
- 	    retval = (char_u *)ga.ga_data;
- 	}
-@@ -1557,12 +1564,13 @@
-  * arguments are currently supported.
-  * Returns OK or FAIL.
-  */
--    static int
--call_vim_function(func, argc, argv, safe, rettv)
-+    int
-+call_vim_function(func, argc, argv, safe, str_arg_only, rettv)
-     char_u      *func;
-     int		argc;
-     char_u      **argv;
-     int		safe;		/* use the sandbox */
-+    int		str_arg_only;	/* all arguments are strings */
-     typval_T	*rettv;
- {
-     typval_T	*argvars;
-@@ -1587,8 +1595,11 @@
- 	    continue;
- 	}
- 
--	/* Recognize a number argument, the others must be strings. */
--	vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
-+	if (str_arg_only)
-+	    len = 0;
-+	else
-+	    /* Recognize a number argument, the others must be strings. */
-+	    vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
- 	if (len != 0 && len == (int)STRLEN(argv[i]))
- 	{
- 	    argvars[i].v_type = VAR_NUMBER;
-@@ -1640,7 +1651,8 @@
-     typval_T	rettv;
-     char_u	*retval;
- 
--    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
-+    /* All arguments are passed as strings, no conversion to number. */
-+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
- 	return NULL;
- 
-     retval = vim_strsave(get_tv_string(&rettv));
-@@ -1665,7 +1677,8 @@
-     typval_T	rettv;
-     long	retval;
- 
--    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
-+    /* All arguments are passed as strings, no conversion to number. */
-+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
- 	return -1;
- 
-     retval = get_tv_number_chk(&rettv, NULL);
-@@ -1688,7 +1701,8 @@
- {
-     typval_T	rettv;
- 
--    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
-+    /* All arguments are passed as strings, no conversion to number. */
-+    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
- 	return NULL;
- 
-     if (rettv.v_type != VAR_LIST)
-@@ -2325,7 +2339,7 @@
- 	    else if (endchars != NULL
- 			     && vim_strchr(endchars, *skipwhite(arg)) == NULL)
- 		EMSG(_(e_letunexp));
--	    else
-+	    else if (!check_secure())
- 	    {
- 		c1 = name[len];
- 		name[len] = NUL;
-@@ -2718,8 +2732,39 @@
- 	    lp->ll_list = NULL;
- 	    lp->ll_dict = lp->ll_tv->vval.v_dict;
- 	    lp->ll_di = dict_find(lp->ll_dict, key, len);
-+
-+	    /* When assigning to a scope dictionary check that a function and
-+	     * variable name is valid (only variable name unless it is l: or
-+	     * g: dictionary). Disallow overwriting a builtin function. */
-+	    if (rettv != NULL && lp->ll_dict->dv_scope != 0)
-+	    {
-+		int prevval;
-+		int wrong;
-+
-+		if (len != -1)
-+		{
-+		    prevval = key[len];
-+		    key[len] = NUL;
-+		}
-+		wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
-+			       && rettv->v_type == VAR_FUNC
-+			       && var_check_func_name(key, lp->ll_di == NULL))
-+			|| !valid_varname(key);
-+		if (len != -1)
-+		    key[len] = prevval;
-+		if (wrong)
-+		    return NULL;
-+	    }
-+
- 	    if (lp->ll_di == NULL)
- 	    {
-+		/* Can't add "v:" variable. */
-+		if (lp->ll_dict == &vimvardict)
-+		{
-+		    EMSG2(_(e_illvar), name);
-+		    return NULL;
-+		}
-+
- 		/* Key does not exist in dict: may need to add it. */
- 		if (*p == '[' || *p == '.' || unlet)
- 		{
-@@ -2739,6 +2784,10 @@
- 		    p = NULL;
- 		break;
- 	    }
-+	    /* existing variable, need to check if it can be changed */
-+	    else if (var_check_ro(lp->ll_di->di_flags, name))
-+		return NULL;
-+
- 	    if (len == -1)
- 		clear_tv(&var1);
- 	    lp->ll_tv = &lp->ll_di->di_tv;
-@@ -2770,6 +2819,8 @@
- 	    {
- 		if (lp->ll_range && !lp->ll_empty2)
- 		    clear_tv(&var2);
-+		if (!quiet)
-+		    EMSGN(_(e_listidx), lp->ll_n1);
- 		return NULL;
- 	    }
- 
-@@ -2787,7 +2838,11 @@
- 		{
- 		    ni = list_find(lp->ll_list, lp->ll_n2);
- 		    if (ni == NULL)
-+		    {
-+			if (!quiet)
-+			    EMSGN(_(e_listidx), lp->ll_n2);
- 			return NULL;
-+		    }
- 		    lp->ll_n2 = list_idx_of_item(lp->ll_list, ni);
- 		}
- 
-@@ -2795,7 +2850,11 @@
- 		if (lp->ll_n1 < 0)
- 		    lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
- 		if (lp->ll_n2 < lp->ll_n1)
-+		{
-+		    if (!quiet)
-+			EMSGN(_(e_listidx), lp->ll_n2);
- 		    return NULL;
-+		}
- 	    }
- 
- 	    lp->ll_tv = &lp->ll_li->li_tv;
-@@ -3337,6 +3396,18 @@
-     int		failed = FALSE;
-     funcdict_T	fudi;
- 
-+    if (eap->skip)
-+    {
-+	/* trans_function_name() doesn't work well when skipping, use eval0()
-+	 * instead to skip to any following command, e.g. for:
-+	 *   :if 0 | call dict.foo().bar() | endif  */
-+	++emsg_skip;
-+	if (eval0(eap->arg, &rettv, &eap->nextcmd, FALSE) != FAIL)
-+	    clear_tv(&rettv);
-+	--emsg_skip;
-+	return;
-+    }
-+
-     tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
-     if (fudi.fd_newkey != NULL)
-     {
-@@ -3386,6 +3457,9 @@
- 	{
- 	    curwin->w_cursor.lnum = lnum;
- 	    curwin->w_cursor.col = 0;
-+#ifdef FEAT_VIRTUALEDIT
-+	    curwin->w_cursor.coladd = 0;
-+#endif
- 	}
- 	arg = startarg;
- 	if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
-@@ -4349,7 +4423,8 @@
- 		else
- 		{
- 		    /* Compare two Lists for being equal or unequal. */
--		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list, ic);
-+		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list,
-+								   ic, FALSE);
- 		    if (type == TYPE_NEQUAL)
- 			n1 = !n1;
- 		}
-@@ -4378,7 +4453,8 @@
- 		else
- 		{
- 		    /* Compare two Dictionaries for being equal or unequal. */
--		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict, ic);
-+		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict,
-+								   ic, FALSE);
- 		    if (type == TYPE_NEQUAL)
- 			n1 = !n1;
- 		}
-@@ -5097,9 +5173,7 @@
- 	    else
- 		ret = OK;
- 	}
--
--	if (alias != NULL)
--	    vim_free(alias);
-+	vim_free(alias);
-     }
- 
-     *arg = skipwhite(*arg);
-@@ -5868,7 +5942,7 @@
- /*
-  * Allocate a list item.
-  */
--    static listitem_T *
-+    listitem_T *
- listitem_alloc()
- {
-     return (listitem_T *)alloc(sizeof(listitem_T));
-@@ -5888,7 +5962,7 @@
- /*
-  * Remove a list item from a List and free it.  Also clears the value.
-  */
--    static void
-+    void
- listitem_remove(l, item)
-     list_T  *l;
-     listitem_T *item;
-@@ -5913,10 +5987,11 @@
-  * Return TRUE when two lists have exactly the same values.
-  */
-     static int
--list_equal(l1, l2, ic)
-+list_equal(l1, l2, ic, recursive)
-     list_T	*l1;
-     list_T	*l2;
-     int		ic;	/* ignore case for strings */
-+    int		recursive;  /* TRUE when used recursively */
- {
-     listitem_T	*item1, *item2;
- 
-@@ -5930,7 +6005,7 @@
-     for (item1 = l1->lv_first, item2 = l2->lv_first;
- 	    item1 != NULL && item2 != NULL;
- 			       item1 = item1->li_next, item2 = item2->li_next)
--	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic))
-+	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic, recursive))
- 	    return FALSE;
-     return item1 == NULL && item2 == NULL;
- }
-@@ -5952,10 +6027,11 @@
-  * Return TRUE when two dictionaries have exactly the same key/values.
-  */
-     static int
--dict_equal(d1, d2, ic)
-+dict_equal(d1, d2, ic, recursive)
-     dict_T	*d1;
-     dict_T	*d2;
-     int		ic;	/* ignore case for strings */
-+    int		recursive; /* TRUE when used recursively */
- {
-     hashitem_T	*hi;
-     dictitem_T	*item2;
-@@ -5976,7 +6052,7 @@
- 	    item2 = dict_find(d2, hi->hi_key, -1);
- 	    if (item2 == NULL)
- 		return FALSE;
--	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic))
-+	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic, recursive))
- 		return FALSE;
- 	    --todo;
- 	}
-@@ -5984,41 +6060,54 @@
-     return TRUE;
- }
- 
-+static int tv_equal_recurse_limit;
-+
- /*
-  * Return TRUE if "tv1" and "tv2" have the same value.
-  * Compares the items just like "==" would compare them, but strings and
-  * numbers are different.  Floats and numbers are also different.
-  */
-     static int
--tv_equal(tv1, tv2, ic)
-+tv_equal(tv1, tv2, ic, recursive)
-     typval_T *tv1;
-     typval_T *tv2;
--    int	    ic;	    /* ignore case */
-+    int	     ic;	    /* ignore case */
-+    int	     recursive;	    /* TRUE when used recursively */
- {
-     char_u	buf1[NUMBUFLEN], buf2[NUMBUFLEN];
-     char_u	*s1, *s2;
--    static int  recursive = 0;	    /* cach recursive loops */
-+    static int  recursive_cnt = 0;	    /* catch recursive loops */
-     int		r;
- 
-     if (tv1->v_type != tv2->v_type)
- 	return FALSE;
-+
-     /* Catch lists and dicts that have an endless loop by limiting
--     * recursiveness to 1000.  We guess they are equal then. */
--    if (recursive >= 1000)
-+     * recursiveness to a limit.  We guess they are equal then.
-+     * A fixed limit has the problem of still taking an awful long time.
-+     * Reduce the limit every time running into it. That should work fine for
-+     * deeply linked structures that are not recursively linked and catch
-+     * recursiveness quickly. */
-+    if (!recursive)
-+	tv_equal_recurse_limit = 1000;
-+    if (recursive_cnt >= tv_equal_recurse_limit)
-+    {
-+	--tv_equal_recurse_limit;
- 	return TRUE;
-+    }
- 
-     switch (tv1->v_type)
-     {
- 	case VAR_LIST:
--	    ++recursive;
--	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
--	    --recursive;
-+	    ++recursive_cnt;
-+	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic, TRUE);
-+	    --recursive_cnt;
- 	    return r;
- 
- 	case VAR_DICT:
--	    ++recursive;
--	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
--	    --recursive;
-+	    ++recursive_cnt;
-+	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, TRUE);
-+	    --recursive_cnt;
- 	    return r;
- 
- 	case VAR_FUNC:
-@@ -6049,7 +6138,7 @@
-  * A negative index is counted from the end; -1 is the last item.
-  * Returns NULL when "n" is out of range.
-  */
--    static listitem_T *
-+    listitem_T *
- list_find(l, n)
-     list_T	*l;
-     long	n;
-@@ -6191,7 +6280,7 @@
- /*
-  * Append item "item" to the end of list "l".
-  */
--    static void
-+    void
- list_append(l, item)
-     list_T	*l;
-     listitem_T	*item;
-@@ -6304,7 +6393,7 @@
-  * If "item" is NULL append at the end.
-  * Return FAIL when out of memory.
-  */
--    static int
-+    int
- list_insert_tv(l, tv, item)
-     list_T	*l;
-     typval_T	*tv;
-@@ -6449,7 +6538,7 @@
-  * Remove items "item" to "item2" from list "l".
-  * Does not free the listitem or the value!
-  */
--    static void
-+    void
- list_remove(l, item, item2)
-     list_T	*l;
-     listitem_T	*item;
-@@ -6502,47 +6591,119 @@
-     return (char_u *)ga.ga_data;
- }
- 
--/*
-- * Join list "l" into a string in "*gap", using separator "sep".
-- * When "echo" is TRUE use String as echoed, otherwise as inside a List.
-- * Return FAIL or OK.
-- */
-+typedef struct join_S {
-+    char_u	*s;
-+    char_u	*tofree;
-+} join_T;
-+
-     static int
--list_join(gap, l, sep, echo, copyID)
--    garray_T	*gap;
-+list_join_inner(gap, l, sep, echo_style, copyID, join_gap)
-+    garray_T	*gap;		/* to store the result in */
-     list_T	*l;
-     char_u	*sep;
--    int		echo;
-+    int		echo_style;
-     int		copyID;
-+    garray_T	*join_gap;	/* to keep each list item string */
- {
-+    int		i;
-+    join_T	*p;
-+    int		len;
-+    int		sumlen = 0;
-     int		first = TRUE;
-     char_u	*tofree;
-     char_u	numbuf[NUMBUFLEN];
-     listitem_T	*item;
-     char_u	*s;
- 
-+    /* Stringify each item in the list. */
-     for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
-     {
--	if (first)
--	    first = FALSE;
--	else
--	    ga_concat(gap, sep);
--
--	if (echo)
-+	if (echo_style)
- 	    s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
- 	else
- 	    s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
--	if (s != NULL)
--	    ga_concat(gap, s);
--	vim_free(tofree);
- 	if (s == NULL)
- 	    return FAIL;
-+
-+	len = (int)STRLEN(s);
-+	sumlen += len;
-+
-+	ga_grow(join_gap, 1);
-+	p = ((join_T *)join_gap->ga_data) + (join_gap->ga_len++);
-+	if (tofree != NULL || s != numbuf)
-+	{
-+	    p->s = s;
-+	    p->tofree = tofree;
-+	}
-+	else
-+	{
-+	    p->s = vim_strnsave(s, len);
-+	    p->tofree = p->s;
-+	}
-+
- 	line_breakcheck();
-     }
-+
-+    /* Allocate result buffer with its total size, avoid re-allocation and
-+     * multiple copy operations.  Add 2 for a tailing ']' and NUL. */
-+    if (join_gap->ga_len >= 2)
-+	sumlen += (int)STRLEN(sep) * (join_gap->ga_len - 1);
-+    if (ga_grow(gap, sumlen + 2) == FAIL)
-+	return FAIL;
-+
-+    for (i = 0; i < join_gap->ga_len && !got_int; ++i)
-+    {
-+	if (first)
-+	    first = FALSE;
-+	else
-+	    ga_concat(gap, sep);
-+	p = ((join_T *)join_gap->ga_data) + i;
-+
-+	if (p->s != NULL)
-+	    ga_concat(gap, p->s);
-+	line_breakcheck();
-+    }
-+
-     return OK;
- }
- 
- /*
-+ * Join list "l" into a string in "*gap", using separator "sep".
-+ * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
-+ * Return FAIL or OK.
-+ */
-+    static int
-+list_join(gap, l, sep, echo_style, copyID)
-+    garray_T	*gap;
-+    list_T	*l;
-+    char_u	*sep;
-+    int		echo_style;
-+    int		copyID;
-+{
-+    garray_T	join_ga;
-+    int		retval;
-+    join_T	*p;
-+    int		i;
-+
-+    ga_init2(&join_ga, (int)sizeof(join_T), l->lv_len);
-+    retval = list_join_inner(gap, l, sep, echo_style, copyID, &join_ga);
-+
-+    /* Dispose each item in join_ga. */
-+    if (join_ga.ga_data != NULL)
-+    {
-+	p = (join_T *)join_ga.ga_data;
-+	for (i = 0; i < join_ga.ga_len; ++i)
-+	{
-+	    vim_free(p->tofree);
-+	    ++p;
-+	}
-+	ga_clear(&join_ga);
-+    }
-+
-+    return retval;
-+}
-+
-+/*
-  * Garbage collection for lists and dictionaries.
-  *
-  * We use reference counts to be able to free most items right away when they
-@@ -6635,6 +6796,18 @@
-     /* v: vars */
-     set_ref_in_ht(&vimvarht, copyID);
- 
-+#ifdef FEAT_LUA
-+    set_ref_in_lua(copyID);
-+#endif
-+
-+#ifdef FEAT_PYTHON
-+    set_ref_in_python(copyID);
-+#endif
-+
-+#ifdef FEAT_PYTHON3
-+    set_ref_in_python3(copyID);
-+#endif
-+
-     /*
-      * 2. Free lists and dictionaries that are not referenced.
-      */
-@@ -6720,7 +6893,7 @@
- /*
-  * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
-  */
--    static void
-+    void
- set_ref_in_ht(ht, copyID)
-     hashtab_T	*ht;
-     int		copyID;
-@@ -6740,7 +6913,7 @@
- /*
-  * Mark all lists and dicts referenced through list "l" with "copyID".
-  */
--    static void
-+    void
- set_ref_in_list(l, copyID)
-     list_T	*l;
-     int		copyID;
-@@ -6754,7 +6927,7 @@
- /*
-  * Mark all lists and dicts referenced through typval "tv" with "copyID".
-  */
--    static void
-+    void
- set_ref_in_item(tv, copyID)
-     typval_T	*tv;
-     int		copyID;
-@@ -6798,7 +6971,7 @@
-     d = (dict_T *)alloc(sizeof(dict_T));
-     if (d != NULL)
-     {
--	/* Add the list to the list of dicts for garbage collection. */
-+	/* Add the dict to the list of dicts for garbage collection. */
- 	if (first_dict != NULL)
- 	    first_dict->dv_used_prev = d;
- 	d->dv_used_next = first_dict;
-@@ -6807,6 +6980,7 @@
- 
- 	hash_init(&d->dv_hashtab);
- 	d->dv_lock = 0;
-+	d->dv_scope = 0;
- 	d->dv_refcount = 0;
- 	d->dv_copyID = 0;
-     }
-@@ -6837,7 +7011,7 @@
-  * Unreference a Dictionary: decrement the reference count and free it when it
-  * becomes zero.
-  */
--    static void
-+    void
- dict_unref(d)
-     dict_T *d;
- {
-@@ -7075,7 +7249,7 @@
- }
- 
- /*
-- * Add a list  entry to dictionary "d".
-+ * Add a list entry to dictionary "d".
-  * Returns FAIL when out of memory and when key already exists.
-  */
-     int
-@@ -7097,6 +7271,7 @@
- 	dictitem_free(item);
- 	return FAIL;
-     }
-+    ++list->lv_refcount;
-     return OK;
- }
- 
-@@ -7649,6 +7824,7 @@
-     {"acos",		1, 1, f_acos},	/* WJMc */
- #endif
-     {"add",		2, 2, f_add},
-+    {"and",		2, 2, f_and},
-     {"append",		2, 2, f_append},
-     {"argc",		0, 0, f_argc},
-     {"argidx",		0, 0, f_argidx},
-@@ -7708,7 +7884,7 @@
- #ifdef FEAT_FLOAT
-     {"exp",		1, 1, f_exp},
- #endif
--    {"expand",		1, 2, f_expand},
-+    {"expand",		1, 3, f_expand},
-     {"extend",		2, 3, f_extend},
-     {"feedkeys",	1, 2, f_feedkeys},
-     {"file_readable",	1, 1, f_filereadable},	/* obsolete */
-@@ -7759,7 +7935,7 @@
-     {"getwinposx",	0, 0, f_getwinposx},
-     {"getwinposy",	0, 0, f_getwinposy},
-     {"getwinvar",	2, 2, f_getwinvar},
--    {"glob",		1, 2, f_glob},
-+    {"glob",		1, 3, f_glob},
-     {"globpath",	2, 3, f_globpath},
-     {"has",		1, 1, f_has},
-     {"has_key",		2, 2, f_has_key},
-@@ -7784,6 +7960,7 @@
-     {"inputsave",	0, 0, f_inputsave},
-     {"inputsecret",	1, 2, f_inputsecret},
-     {"insert",		2, 3, f_insert},
-+    {"invert",		1, 1, f_invert},
-     {"isdirectory",	1, 1, f_isdirectory},
-     {"islocked",	1, 1, f_islocked},
-     {"items",		1, 1, f_items},
-@@ -7801,8 +7978,11 @@
-     {"log",		1, 1, f_log},
-     {"log10",		1, 1, f_log10},
- #endif
-+#ifdef FEAT_LUA
-+    {"luaeval",         1, 2, f_luaeval},
-+#endif
-     {"map",		2, 2, f_map},
--    {"maparg",		1, 3, f_maparg},
-+    {"maparg",		1, 4, f_maparg},
-     {"mapcheck",	1, 3, f_mapcheck},
-     {"match",		2, 4, f_match},
-     {"matchadd",	2, 4, f_matchadd},
-@@ -7822,6 +8002,7 @@
- #endif
-     {"nextnonblank",	1, 1, f_nextnonblank},
-     {"nr2char",		1, 1, f_nr2char},
-+    {"or",		2, 2, f_or},
-     {"pathshorten",	1, 1, f_pathshorten},
- #ifdef FEAT_FLOAT
-     {"pow",		2, 2, f_pow},
-@@ -7829,6 +8010,12 @@
-     {"prevnonblank",	1, 1, f_prevnonblank},
-     {"printf",		2, 19, f_printf},
-     {"pumvisible",	0, 0, f_pumvisible},
-+#ifdef FEAT_PYTHON3
-+    {"py3eval",		1, 1, f_py3eval},
-+#endif
-+#ifdef FEAT_PYTHON
-+    {"pyeval",		1, 1, f_pyeval},
-+#endif
-     {"range",		1, 3, f_range},
-     {"readfile",	1, 3, f_readfile},
-     {"reltime",		0, 2, f_reltime},
-@@ -7865,12 +8052,13 @@
-     {"settabwinvar",	4, 4, f_settabwinvar},
-     {"setwinvar",	3, 3, f_setwinvar},
-     {"shellescape",	1, 2, f_shellescape},
-+    {"shiftwidth",	0, 0, f_shiftwidth},
-     {"simplify",	1, 1, f_simplify},
- #ifdef FEAT_FLOAT
-     {"sin",		1, 1, f_sin},
-     {"sinh",		1, 1, f_sinh},
- #endif
--    {"sort",		1, 2, f_sort},
-+    {"sort",		1, 3, f_sort},
-     {"soundfold",	1, 1, f_soundfold},
-     {"spellbadword",	0, 1, f_spellbadword},
-     {"spellsuggest",	1, 3, f_spellsuggest},
-@@ -7933,6 +8121,7 @@
-     {"winsaveview",	0, 0, f_winsaveview},
-     {"winwidth",	1, 1, f_winwidth},
-     {"writefile",	2, 3, f_writefile},
-+    {"xor",		2, 2, f_xor},
- };
- 
- #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-@@ -8497,7 +8686,7 @@
-     if (argvars[0].v_type == VAR_LIST)
-     {
- 	if ((l = argvars[0].vval.v_list) != NULL
--		&& !tv_check_lock(l->lv_lock, (char_u *)"add()")
-+		&& !tv_check_lock(l->lv_lock, (char_u *)_("add() argument"))
- 		&& list_append_tv(l, &argvars[1]) == OK)
- 	    copy_tv(&argvars[0], rettv);
-     }
-@@ -8506,6 +8695,18 @@
- }
- 
- /*
-+ * "and(expr, expr)" function
-+ */
-+    static void
-+f_and(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
-+					& get_tv_number_chk(&argvars[1], NULL);
-+}
-+
-+/*
-  * "append(lnum, string/list)" function
-  */
-     static void
-@@ -8980,6 +9181,45 @@
- #endif
- }
- 
-+    int
-+func_call(name, args, selfdict, rettv)
-+    char_u	*name;
-+    typval_T	*args;
-+    dict_T	*selfdict;
-+    typval_T	*rettv;
-+{
-+    listitem_T	*item;
-+    typval_T	argv[MAX_FUNC_ARGS + 1];
-+    int		argc = 0;
-+    int		dummy;
-+    int		r = 0;
-+
-+    for (item = args->vval.v_list->lv_first; item != NULL;
-+							 item = item->li_next)
-+    {
-+	if (argc == MAX_FUNC_ARGS)
-+	{
-+	    EMSG(_("E699: Too many arguments"));
-+	    break;
-+	}
-+	/* Make a copy of each argument.  This is needed to be able to set
-+	 * v_lock to VAR_FIXED in the copy without changing the original list.
-+	 */
-+	copy_tv(&item->li_tv, &argv[argc++]);
-+    }
-+
-+    if (item == NULL)
-+	r = call_func(name, (int)STRLEN(name), rettv, argc, argv,
-+				 curwin->w_cursor.lnum, curwin->w_cursor.lnum,
-+						      &dummy, TRUE, selfdict);
-+
-+    /* Free the arguments. */
-+    while (argc > 0)
-+	clear_tv(&argv[--argc]);
-+
-+    return r;
-+}
-+
- /*
-  * "call(func, arglist)" function
-  */
-@@ -8989,10 +9229,6 @@
-     typval_T	*rettv;
- {
-     char_u	*func;
--    typval_T	argv[MAX_FUNC_ARGS + 1];
--    int		argc = 0;
--    listitem_T	*item;
--    int		dummy;
-     dict_T	*selfdict = NULL;
- 
-     if (argvars[1].v_type != VAR_LIST)
-@@ -9020,28 +9256,7 @@
- 	selfdict = argvars[2].vval.v_dict;
-     }
- 
--    for (item = argvars[1].vval.v_list->lv_first; item != NULL;
--							 item = item->li_next)
--    {
--	if (argc == MAX_FUNC_ARGS)
--	{
--	    EMSG(_("E699: Too many arguments"));
--	    break;
--	}
--	/* Make a copy of each argument.  This is needed to be able to set
--	 * v_lock to VAR_FIXED in the copy without changing the original list.
--	 */
--	copy_tv(&item->li_tv, &argv[argc++]);
--    }
--
--    if (item == NULL)
--	(void)call_func(func, (int)STRLEN(func), rettv, argc, argv,
--				 curwin->w_cursor.lnum, curwin->w_cursor.lnum,
--						      &dummy, TRUE, selfdict);
--
--    /* Free the arguments. */
--    while (argc > 0)
--	clear_tv(&argv[--argc]);
-+    (void)func_call(func, &argvars[1], selfdict, rettv);
- }
- 
- #ifdef FEAT_FLOAT
-@@ -9298,7 +9513,7 @@
- 
-     if (!error)
- 	rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
--								   def, NULL);
-+							    def, NULL, FALSE);
- #endif
- }
- 
-@@ -9389,7 +9604,7 @@
- 	    }
- 
- 	    for ( ; li != NULL; li = li->li_next)
--		if (tv_equal(&li->li_tv, &argvars[1], ic))
-+		if (tv_equal(&li->li_tv, &argvars[1], ic, FALSE))
- 		    ++n;
- 	}
-     }
-@@ -9416,7 +9631,7 @@
- 		if (!HASHITEM_EMPTY(hi))
- 		{
- 		    --todo;
--		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic))
-+		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic, FALSE))
- 			++n;
- 		}
- 	    }
-@@ -9857,17 +10072,36 @@
-     char_u	*s;
-     int		len;
-     char_u	*errormsg;
--    int		flags = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
-+    int		options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
-     expand_T	xpc;
-     int		error = FALSE;
-+    char_u	*result;
- 
-     rettv->v_type = VAR_STRING;
-+    if (argvars[1].v_type != VAR_UNKNOWN
-+	    && argvars[2].v_type != VAR_UNKNOWN
-+	    && get_tv_number_chk(&argvars[2], &error)
-+	    && !error)
-+    {
-+	rettv->v_type = VAR_LIST;
-+	rettv->vval.v_list = NULL;
-+    }
-+
-     s = get_tv_string(&argvars[0]);
-     if (*s == '%' || *s == '#' || *s == '<')
-     {
- 	++emsg_off;
--	rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL);
-+	result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
- 	--emsg_off;
-+	if (rettv->v_type == VAR_LIST)
-+	{
-+	    if (rettv_list_alloc(rettv) != FAIL && result != NULL)
-+		list_append_string(rettv->vval.v_list, result, -1);
-+	    else
-+		vim_free(result);
-+	}
-+	else
-+	    rettv->vval.v_string = result;
-     }
-     else
-     {
-@@ -9875,12 +10109,25 @@
- 	 * for 'wildignore' and don't put matches for 'suffixes' at the end. */
- 	if (argvars[1].v_type != VAR_UNKNOWN
- 				    && get_tv_number_chk(&argvars[1], &error))
--	    flags |= WILD_KEEP_ALL;
-+	    options |= WILD_KEEP_ALL;
- 	if (!error)
- 	{
- 	    ExpandInit(&xpc);
- 	    xpc.xp_context = EXPAND_FILES;
--	    rettv->vval.v_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
-+	    if (p_wic)
-+		options += WILD_ICASE;
-+	    if (rettv->v_type == VAR_STRING)
-+		rettv->vval.v_string = ExpandOne(&xpc, s, NULL,
-+							   options, WILD_ALL);
-+	    else if (rettv_list_alloc(rettv) != FAIL)
-+	    {
-+		int i;
-+
-+		ExpandOne(&xpc, s, NULL, options, WILD_ALL_KEEP);
-+		for (i = 0; i < xpc.xp_numfiles; i++)
-+		    list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
-+		ExpandCleanup(&xpc);
-+	    }
- 	}
- 	else
- 	    rettv->vval.v_string = NULL;
-@@ -9896,6 +10143,8 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
-+    char      *arg_errmsg = N_("extend() argument");
-+
-     if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
-     {
- 	list_T		*l1, *l2;
-@@ -9905,7 +10154,7 @@
- 
- 	l1 = argvars[0].vval.v_list;
- 	l2 = argvars[1].vval.v_list;
--	if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)"extend()")
-+	if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)_(arg_errmsg))
- 		&& l2 != NULL)
- 	{
- 	    if (argvars[2].v_type != VAR_UNKNOWN)
-@@ -9944,7 +10193,7 @@
- 
- 	d1 = argvars[0].vval.v_dict;
- 	d2 = argvars[1].vval.v_dict;
--	if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)"extend()")
-+	if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)_(arg_errmsg))
- 		&& d2 != NULL)
- 	{
- 	    /* Check the third argument. */
-@@ -9976,6 +10225,19 @@
- 		{
- 		    --todo;
- 		    di1 = dict_find(d1, hi2->hi_key, -1);
-+		    if (d1->dv_scope != 0)
-+		    {
-+			/* Disallow replacing a builtin function in l: and g:.
-+			 * Check the key to be valid when adding to any
-+			 * scope. */
-+		        if (d1->dv_scope == VAR_DEF_SCOPE
-+				&& HI2DI(hi2)->di_tv.v_type == VAR_FUNC
-+				&& var_check_func_name(hi2->hi_key,
-+								 di1 == NULL))
-+			    break;
-+			if (!valid_varname(hi2->hi_key))
-+			    break;
-+		    }
- 		    if (di1 == NULL)
- 		    {
- 			di1 = dictitem_copy(HI2DI(hi2));
-@@ -9987,7 +10249,7 @@
- 			EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
- 			break;
- 		    }
--		    else if (*action == 'f')
-+		    else if (*action == 'f' && HI2DI(hi2) != di1)
- 		    {
- 			clear_tv(&di1->di_tv);
- 			copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
-@@ -10186,20 +10448,22 @@
-     typval_T	save_key;
-     int		rem;
-     int		todo;
--    char_u	*ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
-+    char_u	*ermsg = (char_u *)(map ? "map()" : "filter()");
-+    char	*arg_errmsg = (map ? N_("map() argument")
-+				   : N_("filter() argument"));
-     int		save_did_emsg;
-     int		idx = 0;
- 
-     if (argvars[0].v_type == VAR_LIST)
-     {
- 	if ((l = argvars[0].vval.v_list) == NULL
--		|| (map && tv_check_lock(l->lv_lock, ermsg)))
-+		|| tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
- 	    return;
-     }
-     else if (argvars[0].v_type == VAR_DICT)
-     {
- 	if ((d = argvars[0].vval.v_dict) == NULL
--		|| (map && tv_check_lock(d->dv_lock, ermsg)))
-+		|| tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
- 	    return;
-     }
-     else
-@@ -10236,7 +10500,8 @@
- 		{
- 		    --todo;
- 		    di = HI2DI(hi);
--		    if (tv_check_lock(di->di_tv.v_lock, ermsg))
-+		    if (tv_check_lock(di->di_tv.v_lock,
-+						     (char_u *)_(arg_errmsg)))
- 			break;
- 		    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
- 		    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
-@@ -10255,7 +10520,7 @@
- 
- 	    for (li = l->lv_first; li != NULL; li = nli)
- 	    {
--		if (tv_check_lock(li->li_tv.v_lock, ermsg))
-+		if (tv_check_lock(li->li_tv.v_lock, (char_u *)_(arg_errmsg)))
- 		    break;
- 		nli = li->li_next;
- 		vimvars[VV_KEY].vv_nr = idx;
-@@ -10839,6 +11104,11 @@
- 
- 	if (*varname == '&')	/* buffer-local-option */
- 	    get_option_tv(&varname, rettv, TRUE);
-+	else if (STRCMP(varname, "changedtick") == 0)
-+	{
-+	    rettv->v_type = VAR_NUMBER;
-+	    rettv->vval.v_number = curbuf->b_changedtick;
-+	}
- 	else
- 	{
- 	    if (*varname == NUL)
-@@ -11039,18 +11309,22 @@
-     typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
--    char_u	cwd[MAXPATHL];
-+    char_u	*cwd;
- 
-     rettv->v_type = VAR_STRING;
--    if (mch_dirname(cwd, MAXPATHL) == FAIL)
--	rettv->vval.v_string = NULL;
--    else
-+    rettv->vval.v_string = NULL;
-+    cwd = alloc(MAXPATHL);
-+    if (cwd != NULL)
-     {
--	rettv->vval.v_string = vim_strsave(cwd);
-+	if (mch_dirname(cwd, MAXPATHL) != FAIL)
-+	{
-+	    rettv->vval.v_string = vim_strsave(cwd);
- #ifdef BACKSLASH_IN_FILENAME
--	if (rettv->vval.v_string != NULL)
--	    slash_adjust(rettv->vval.v_string);
-+	    if (rettv->vval.v_string != NULL)
-+		slash_adjust(rettv->vval.v_string);
- #endif
-+	}
-+	vim_free(cwd);
-     }
- }
- 
-@@ -11653,22 +11927,44 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
--    int		flags = WILD_SILENT|WILD_USE_NL;
-+    int		options = WILD_SILENT|WILD_USE_NL;
-     expand_T	xpc;
-     int		error = FALSE;
- 
-     /* When the optional second argument is non-zero, don't remove matches
--    * for 'wildignore' and don't put matches for 'suffixes' at the end. */
--    if (argvars[1].v_type != VAR_UNKNOWN
--				&& get_tv_number_chk(&argvars[1], &error))
--	flags |= WILD_KEEP_ALL;
-+     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
-     rettv->v_type = VAR_STRING;
-+    if (argvars[1].v_type != VAR_UNKNOWN)
-+    {
-+	if (get_tv_number_chk(&argvars[1], &error))
-+	    options |= WILD_KEEP_ALL;
-+	if (argvars[2].v_type != VAR_UNKNOWN
-+				    && get_tv_number_chk(&argvars[2], &error))
-+	{
-+	    rettv->v_type = VAR_LIST;
-+	    rettv->vval.v_list = NULL;
-+	}
-+    }
-     if (!error)
-     {
- 	ExpandInit(&xpc);
- 	xpc.xp_context = EXPAND_FILES;
--	rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
--						       NULL, flags, WILD_ALL);
-+	if (p_wic)
-+	    options += WILD_ICASE;
-+	if (rettv->v_type == VAR_STRING)
-+	    rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
-+						     NULL, options, WILD_ALL);
-+	else if (rettv_list_alloc(rettv) != FAIL)
-+	{
-+	  int i;
-+
-+	  ExpandOne(&xpc, get_tv_string(&argvars[0]),
-+						NULL, options, WILD_ALL_KEEP);
-+	  for (i = 0; i < xpc.xp_numfiles; i++)
-+	      list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
-+
-+	  ExpandCleanup(&xpc);
-+	}
-     }
-     else
- 	rettv->vval.v_string = NULL;
-@@ -11741,9 +12037,6 @@
- #ifdef __QNX__
- 	"qnx",
- #endif
--#ifdef RISCOS
--	"riscos",
--#endif
- #ifdef UNIX
- 	"unix",
- #endif
-@@ -11786,6 +12079,11 @@
- 	"all_builtin_terms",
- # endif
- #endif
-+#if defined(FEAT_BROWSE) && (defined(USE_FILE_CHOOSER) \
-+	|| defined(FEAT_GUI_W32) \
-+	|| defined(FEAT_GUI_MOTIF))
-+	"browsefilter",
-+#endif
- #ifdef FEAT_BYTEOFF
- 	"byte_offset",
- #endif
-@@ -11856,7 +12154,7 @@
- #ifdef FEAT_SEARCHPATH
- 	"file_in_path",
- #endif
--#if defined(UNIX) && !defined(USE_SYSTEM)
-+#ifdef FEAT_FILTERPIPE
- 	"filterpipe",
- #endif
- #ifdef FEAT_FIND_ID
-@@ -11978,9 +12276,15 @@
- # ifdef FEAT_MOUSE_PTERM
- 	"mouse_pterm",
- # endif
-+# ifdef FEAT_MOUSE_SGR
-+	"mouse_sgr",
-+# endif
- # ifdef FEAT_SYSMOUSE
- 	"mouse_sysmouse",
- # endif
-+# ifdef FEAT_MOUSE_URXVT
-+	"mouse_urxvt",
-+# endif
- # ifdef FEAT_MOUSE_XTERM
- 	"mouse_xterm",
- # endif
-@@ -12002,9 +12306,6 @@
- #ifdef FEAT_OLE
- 	"ole",
- #endif
--#ifdef FEAT_OSFILETYPE
--	"osfiletype",
--#endif
- #ifdef FEAT_PATH_EXTRA
- 	"path_extra",
- #endif
-@@ -12116,6 +12417,9 @@
- #ifdef FEAT_TOOLBAR
- 	"toolbar",
- #endif
-+#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-+	"unnamedplus",
-+#endif
- #ifdef FEAT_USR_CMDS
- 	"user-commands",    /* was accidentally included in 5.4 */
- 	"user_commands",
-@@ -12159,6 +12463,9 @@
- #ifdef FEAT_XFONTSET
- 	"xfontset",
- #endif
-+#ifdef FEAT_XPM_W32
-+	"xpm_w32",
-+#endif
- #ifdef USE_XSMP
- 	"xsmp",
- #endif
-@@ -12572,7 +12879,7 @@
- 	}
- 
- 	for ( ; item != NULL; item = item->li_next, ++idx)
--	    if (tv_equal(&item->li_tv, &argvars[1], ic))
-+	    if (tv_equal(&item->li_tv, &argvars[1], ic, FALSE))
- 	    {
- 		rettv->vval.v_number = idx;
- 		break;
-@@ -12648,6 +12955,7 @@
- 		int	xp_namelen;
- 		long	argt;
- 
-+		/* input() with a third argument: completion */
- 		rettv->vval.v_string = NULL;
- 
- 		xp_name = get_tv_string_buf_chk(&argvars[2], buf);
-@@ -12666,6 +12974,11 @@
- 	    rettv->vval.v_string =
- 		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
- 				  xp_type, xp_arg);
-+	if (inputdialog && rettv->vval.v_string == NULL
-+		&& argvars[1].v_type != VAR_UNKNOWN
-+		&& argvars[2].v_type != VAR_UNKNOWN)
-+	    rettv->vval.v_string = vim_strsave(get_tv_string_buf(
-+							   &argvars[2], buf));
- 
- 	vim_free(xp_arg);
- 
-@@ -12712,7 +13025,7 @@
- 	    IObuff[0] = NUL;
- 	if (message != NULL && defstr != NULL
- 		&& do_dialog(VIM_QUESTION, NULL, message,
--				(char_u *)_("&OK\n&Cancel"), 1, IObuff) == 1)
-+			  (char_u *)_("&OK\n&Cancel"), 1, IObuff, FALSE) == 1)
- 	    rettv->vval.v_string = vim_strsave(IObuff);
- 	else
- 	{
-@@ -12850,7 +13163,7 @@
-     if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listarg), "insert()");
-     else if ((l = argvars[0].vval.v_list) != NULL
--	    && !tv_check_lock(l->lv_lock, (char_u *)"insert()"))
-+	    && !tv_check_lock(l->lv_lock, (char_u *)_("insert() argument")))
-     {
- 	if (argvars[2].v_type != VAR_UNKNOWN)
- 	    before = get_tv_number_chk(&argvars[2], &error);
-@@ -12877,6 +13190,17 @@
- }
- 
- /*
-+ * "invert(expr)" function
-+ */
-+    static void
-+f_invert(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
-+}
-+
-+/*
-  * "isdirectory()" function
-  */
-     static void
-@@ -13290,8 +13614,10 @@
-     char_u	*keys_buf = NULL;
-     char_u	*rhs;
-     int		mode;
--    garray_T	ga;
-     int		abbr = FALSE;
-+    int		get_dict = FALSE;
-+    mapblock_T	*mp;
-+    int		buffer_local;
- 
-     /* return empty string for failure */
-     rettv->v_type = VAR_STRING;
-@@ -13305,7 +13631,11 @@
-     {
- 	which = get_tv_string_buf_chk(&argvars[1], buf);
- 	if (argvars[2].v_type != VAR_UNKNOWN)
-+	{
- 	    abbr = get_tv_number(&argvars[2]);
-+	    if (argvars[3].v_type != VAR_UNKNOWN)
-+		get_dict = get_tv_number(&argvars[3]);
-+	}
-     }
-     else
- 	which = (char_u *)"";
-@@ -13315,19 +13645,34 @@
-     mode = get_map_mode(&which, 0);
- 
-     keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);
--    rhs = check_map(keys, mode, exact, FALSE, abbr);
-+    rhs = check_map(keys, mode, exact, FALSE, abbr, &mp, &buffer_local);
-     vim_free(keys_buf);
--    if (rhs != NULL)
--    {
--	ga_init(&ga);
--	ga.ga_itemsize = 1;
--	ga.ga_growsize = 40;
- 
--	while (*rhs != NUL)
--	    ga_concat(&ga, str2special(&rhs, FALSE));
-+    if (!get_dict)
-+    {
-+	/* Return a string. */
-+	if (rhs != NULL)
-+	    rettv->vval.v_string = str2special_save(rhs, FALSE);
-+
-+    }
-+    else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
-+    {
-+	/* Return a dictionary. */
-+	char_u	    *lhs = str2special_save(mp->m_keys, TRUE);
-+	char_u	    *mapmode = map_mode_to_chars(mp->m_mode);
-+	dict_T	    *dict = rettv->vval.v_dict;
-+
-+	dict_add_nr_str(dict, "lhs",	 0L, lhs);
-+	dict_add_nr_str(dict, "rhs",     0L, mp->m_orig_str);
-+	dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL);
-+	dict_add_nr_str(dict, "expr",    mp->m_expr    ? 1L : 0L, NULL);
-+	dict_add_nr_str(dict, "silent",  mp->m_silent  ? 1L : 0L, NULL);
-+	dict_add_nr_str(dict, "sid",     (long)mp->m_script_ID, NULL);
-+	dict_add_nr_str(dict, "buffer",  (long)buffer_local, NULL);
-+	dict_add_nr_str(dict, "mode",    0L, mapmode);
- 
--	ga_append(&ga, NUL);
--	rettv->vval.v_string = (char_u *)ga.ga_data;
-+	vim_free(lhs);
-+	vim_free(mapmode);
-     }
- }
- 
-@@ -13367,6 +13712,23 @@
- }
- #endif
- 
-+#ifdef FEAT_LUA
-+/*
-+ * "luaeval()" function
-+ */
-+    static void
-+f_luaeval(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    char_u	*str;
-+    char_u	buf[NUMBUFLEN];
-+
-+    str = get_tv_string_buf(&argvars[0], buf);
-+    do_luaeval(str, argvars + 1, rettv);
-+}
-+#endif
-+
- /*
-  * "map()" function
-  */
-@@ -14006,6 +14368,18 @@
- }
- 
- /*
-+ * "or(expr, expr)" function
-+ */
-+    static void
-+f_or(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
-+					| get_tv_number_chk(&argvars[1], NULL);
-+}
-+
-+/*
-  * "pathshorten()" function
-  */
-     static void
-@@ -14125,6 +14499,40 @@
- #endif
- }
- 
-+#ifdef FEAT_PYTHON3
-+/*
-+ * "py3eval()" function
-+ */
-+    static void
-+f_py3eval(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    char_u	*str;
-+    char_u	buf[NUMBUFLEN];
-+
-+    str = get_tv_string_buf(&argvars[0], buf);
-+    do_py3eval(str, rettv);
-+}
-+#endif
-+
-+#ifdef FEAT_PYTHON
-+/*
-+ * "pyeval()" function
-+ */
-+    static void
-+f_pyeval(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    char_u	*str;
-+    char_u	buf[NUMBUFLEN];
-+
-+    str = get_tv_string_buf(&argvars[0], buf);
-+    do_pyeval(str, rettv);
-+}
-+#endif
-+
- /*
-  * "range()" function
-  */
-@@ -14177,22 +14585,19 @@
-     typval_T	*rettv;
- {
-     int		binary = FALSE;
-+    int		failed = FALSE;
-     char_u	*fname;
-     FILE	*fd;
--    listitem_T	*li;
--#define FREAD_SIZE 200	    /* optimized for text lines */
--    char_u	buf[FREAD_SIZE];
--    int		readlen;    /* size of last fread() */
--    int		buflen;	    /* nr of valid chars in buf[] */
--    int		filtd;	    /* how much in buf[] was NUL -> '\n' filtered */
--    int		tolist;	    /* first byte in buf[] still to be put in list */
--    int		chop;	    /* how many CR to chop off */
--    char_u	*prev = NULL;	/* previously read bytes, if any */
--    int		prevlen = 0;    /* length of "prev" if not NULL */
--    char_u	*s;
--    int		len;
--    long	maxline = MAXLNUM;
--    long	cnt = 0;
-+    char_u	buf[(IOSIZE/256)*256];	/* rounded to avoid odd + 1 */
-+    int		io_size = sizeof(buf);
-+    int		readlen;		/* size of last fread() */
-+    char_u	*prev	 = NULL;	/* previously read bytes, if any */
-+    long	prevlen  = 0;		/* length of data in prev */
-+    long	prevsize = 0;		/* size of prev buffer */
-+    long	maxline  = MAXLNUM;
-+    long	cnt	 = 0;
-+    char_u	*p;			/* position in buf */
-+    char_u	*start;			/* start of current line */
- 
-     if (argvars[1].v_type != VAR_UNKNOWN)
-     {
-@@ -14214,49 +14619,61 @@
- 	return;
-     }
- 
--    filtd = 0;
-     while (cnt < maxline || maxline < 0)
-     {
--	readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd);
--	buflen = filtd + readlen;
--	tolist = 0;
--	for ( ; filtd < buflen || readlen <= 0; ++filtd)
--	{
--	    if (buf[filtd] == '\n' || readlen <= 0)
--	    {
--		/* Only when in binary mode add an empty list item when the
--		 * last line ends in a '\n'. */
--		if (!binary && readlen == 0 && filtd == 0)
--		    break;
-+	readlen = (int)fread(buf, 1, io_size, fd);
- 
--		/* Found end-of-line or end-of-file: add a text line to the
--		 * list. */
--		chop = 0;
--		if (!binary)
--		    while (filtd - chop - 1 >= tolist
--					  && buf[filtd - chop - 1] == '\r')
--			++chop;
--		len = filtd - tolist - chop;
--		if (prev == NULL)
--		    s = vim_strnsave(buf + tolist, len);
-+	/* This for loop processes what was read, but is also entered at end
-+	 * of file so that either:
-+	 * - an incomplete line gets written
-+	 * - a "binary" file gets an empty line at the end if it ends in a
-+	 *   newline.  */
-+	for (p = buf, start = buf;
-+		p < buf + readlen || (readlen <= 0 && (prevlen > 0 || binary));
-+		++p)
-+	{
-+	    if (*p == '\n' || readlen <= 0)
-+	    {
-+		listitem_T  *li;
-+		char_u	    *s	= NULL;
-+		long_u	    len = p - start;
-+
-+		/* Finished a line.  Remove CRs before NL. */
-+		if (readlen > 0 && !binary)
-+		{
-+		    while (len > 0 && start[len - 1] == '\r')
-+			--len;
-+		    /* removal may cross back to the "prev" string */
-+		    if (len == 0)
-+			while (prevlen > 0 && prev[prevlen - 1] == '\r')
-+			    --prevlen;
-+		}
-+		if (prevlen == 0)
-+		    s = vim_strnsave(start, (int)len);
- 		else
- 		{
--		    s = alloc((unsigned)(prevlen + len + 1));
--		    if (s != NULL)
-+		    /* Change "prev" buffer to be the right size.  This way
-+		     * the bytes are only copied once, and very long lines are
-+		     * allocated only once.  */
-+		    if ((s = vim_realloc(prev, prevlen + len + 1)) != NULL)
- 		    {
--			mch_memmove(s, prev, prevlen);
--			vim_free(prev);
--			prev = NULL;
--			mch_memmove(s + prevlen, buf + tolist, len);
-+			mch_memmove(s + prevlen, start, len);
- 			s[prevlen + len] = NUL;
-+			prev = NULL; /* the list will own the string */
-+			prevlen = prevsize = 0;
- 		    }
- 		}
--		tolist = filtd + 1;
-+		if (s == NULL)
-+		{
-+		    do_outofmem_msg((long_u) prevlen + len + 1);
-+		    failed = TRUE;
-+		    break;
-+		}
- 
--		li = listitem_alloc();
--		if (li == NULL)
-+		if ((li = listitem_alloc()) == NULL)
- 		{
- 		    vim_free(s);
-+		    failed = TRUE;
- 		    break;
- 		}
- 		li->li_tv.v_type = VAR_STRING;
-@@ -14264,71 +14681,111 @@
- 		li->li_tv.vval.v_string = s;
- 		list_append(rettv->vval.v_list, li);
- 
--		if (++cnt >= maxline && maxline >= 0)
--		    break;
--		if (readlen <= 0)
-+		start = p + 1; /* step over newline */
-+		if ((++cnt >= maxline && maxline >= 0) || readlen <= 0)
- 		    break;
- 	    }
--	    else if (buf[filtd] == NUL)
--		buf[filtd] = '\n';
-+	    else if (*p == NUL)
-+		*p = '\n';
- #ifdef FEAT_MBYTE
--	    else if (buf[filtd] == 0xef
--		    && enc_utf8
--		    && filtd + 2 < buflen
--		    && !binary
--		    && buf[filtd + 1] == 0xbb
--		    && buf[filtd + 2] == 0xbf)
--	    {
--		/* remove utf-8 byte order mark */
--		mch_memmove(buf + filtd, buf + filtd + 3, buflen - filtd - 3);
--		--filtd;
--		buflen -= 3;
-+	    /* Check for utf8 "bom"; U+FEFF is encoded as EF BB BF.  Do this
-+	     * when finding the BF and check the previous two bytes. */
-+	    else if (*p == 0xbf && enc_utf8 && !binary)
-+	    {
-+		/* Find the two bytes before the 0xbf.	If p is at buf, or buf
-+		 * + 1, these may be in the "prev" string. */
-+		char_u back1 = p >= buf + 1 ? p[-1]
-+				     : prevlen >= 1 ? prev[prevlen - 1] : NUL;
-+		char_u back2 = p >= buf + 2 ? p[-2]
-+			  : p == buf + 1 && prevlen >= 1 ? prev[prevlen - 1]
-+			  : prevlen >= 2 ? prev[prevlen - 2] : NUL;
-+
-+		if (back2 == 0xef && back1 == 0xbb)
-+		{
-+		    char_u *dest = p - 2;
-+
-+		    /* Usually a BOM is at the beginning of a file, and so at
-+		     * the beginning of a line; then we can just step over it.
-+		     */
-+		    if (start == dest)
-+			start = p + 1;
-+		    else
-+		    {
-+			/* have to shuffle buf to close gap */
-+			int adjust_prevlen = 0;
-+
-+			if (dest < buf)
-+			{
-+			    adjust_prevlen = (int)(buf - dest); /* must be 1 or 2 */
-+			    dest = buf;
-+			}
-+			if (readlen > p - buf + 1)
-+			    mch_memmove(dest, p + 1, readlen - (p - buf) - 1);
-+			readlen -= 3 - adjust_prevlen;
-+			prevlen -= adjust_prevlen;
-+			p = dest - 1;
-+		    }
-+		}
- 	    }
- #endif
--	}
--	if (readlen <= 0)
--	    break;
-+	} /* for */
- 
--	if (tolist == 0)
-+	if (failed || (cnt >= maxline && maxline >= 0) || readlen <= 0)
-+	    break;
-+	if (start < p)
- 	{
--	    /* "buf" is full, need to move text to an allocated buffer */
--	    if (prev == NULL)
--	    {
--		prev = vim_strnsave(buf, buflen);
--		prevlen = buflen;
--	    }
--	    else
-+	    /* There's part of a line in buf, store it in "prev". */
-+	    if (p - start + prevlen >= prevsize)
- 	    {
--		s = alloc((unsigned)(prevlen + buflen));
--		if (s != NULL)
-+		/* need bigger "prev" buffer */
-+		char_u *newprev;
-+
-+		/* A common use case is ordinary text files and "prev" gets a
-+		 * fragment of a line, so the first allocation is made
-+		 * small, to avoid repeatedly 'allocing' large and
-+		 * 'reallocing' small. */
-+		if (prevsize == 0)
-+		    prevsize = (long)(p - start);
-+		else
-+		{
-+		    long grow50pc = (prevsize * 3) / 2;
-+		    long growmin  = (long)((p - start) * 2 + prevlen);
-+		    prevsize = grow50pc > growmin ? grow50pc : growmin;
-+		}
-+		newprev = prev == NULL ? alloc(prevsize)
-+						: vim_realloc(prev, prevsize);
-+		if (newprev == NULL)
- 		{
--		    mch_memmove(s, prev, prevlen);
--		    mch_memmove(s + prevlen, buf, buflen);
--		    vim_free(prev);
--		    prev = s;
--		    prevlen += buflen;
-+		    do_outofmem_msg((long_u)prevsize);
-+		    failed = TRUE;
-+		    break;
- 		}
-+		prev = newprev;
- 	    }
--	    filtd = 0;
--	}
--	else
--	{
--	    mch_memmove(buf, buf + tolist, buflen - tolist);
--	    filtd -= tolist;
-+	    /* Add the line part to end of "prev". */
-+	    mch_memmove(prev + prevlen, start, p - start);
-+	    prevlen += (long)(p - start);
- 	}
--    }
-+    } /* while */
- 
-     /*
-      * For a negative line count use only the lines at the end of the file,
-      * free the rest.
-      */
--    if (maxline < 0)
-+    if (!failed && maxline < 0)
- 	while (cnt > -maxline)
- 	{
- 	    listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
- 	    --cnt;
- 	}
- 
-+    if (failed)
-+    {
-+	list_free(rettv->vval.v_list, TRUE);
-+	/* readfile doc says an empty list is returned on error */
-+	rettv->vval.v_list = list_alloc();
-+    }
-+
-     vim_free(prev);
-     fclose(fd);
- }
-@@ -14691,13 +15148,14 @@
-     char_u	*key;
-     dict_T	*d;
-     dictitem_T	*di;
-+    char	*arg_errmsg = N_("remove() argument");
- 
-     if (argvars[0].v_type == VAR_DICT)
-     {
- 	if (argvars[2].v_type != VAR_UNKNOWN)
- 	    EMSG2(_(e_toomanyarg), "remove()");
- 	else if ((d = argvars[0].vval.v_dict) != NULL
--		&& !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
-+		&& !tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
- 	{
- 	    key = get_tv_string_chk(&argvars[1]);
- 	    if (key != NULL)
-@@ -14717,7 +15175,7 @@
-     else if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listdictarg), "remove()");
-     else if ((l = argvars[0].vval.v_list) != NULL
--	    && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
-+	    && !tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
-     {
- 	int	    error = FALSE;
- 
-@@ -14847,6 +15305,9 @@
-     typval_T	*rettv;
- {
-     char_u	*p;
-+#ifdef HAVE_READLINK
-+    char_u	*buf = NULL;
-+#endif
- 
-     p = get_tv_string(&argvars[0]);
- #ifdef FEAT_SHORTCUT
-@@ -14862,7 +15323,6 @@
- #else
- # ifdef HAVE_READLINK
-     {
--	char_u	buf[MAXPATHL + 1];
- 	char_u	*cpy;
- 	int	len;
- 	char_u	*remain = NULL;
-@@ -14879,7 +15339,10 @@
- 
- 	len = STRLEN(p);
- 	if (len > 0 && after_pathsep(p, p + len))
-+	{
- 	    has_trailing_pathsep = TRUE;
-+	    p[len - 1] = NUL; /* the trailing slash breaks readlink() */
-+	}
- 
- 	q = getnextcomp(p);
- 	if (*q != NUL)
-@@ -14890,6 +15353,10 @@
- 	    q[-1] = NUL;
- 	}
- 
-+	buf = alloc(MAXPATHL + 1);
-+	if (buf == NULL)
-+	    goto fail;
-+
- 	for (;;)
- 	{
- 	    for (;;)
-@@ -15033,6 +15500,7 @@
- 
- #ifdef HAVE_READLINK
- fail:
-+    vim_free(buf);
- #endif
-     rettv->v_type = VAR_STRING;
- }
-@@ -15051,7 +15519,7 @@
-     if (argvars[0].v_type != VAR_LIST)
- 	EMSG2(_(e_listarg), "reverse()");
-     else if ((l = argvars[0].vval.v_list) != NULL
--	    && !tv_check_lock(l->lv_lock, (char_u *)"reverse()"))
-+	    && !tv_check_lock(l->lv_lock, (char_u *)_("reverse() argument")))
-     {
- 	li = l->lv_last;
- 	l->lv_first = l->lv_last = NULL;
-@@ -16056,7 +16524,7 @@
-     if (tp != NULL && varname != NULL && varp != NULL)
-     {
- 	save_curtab = curtab;
--	goto_tabpage_tp(tp);
-+	goto_tabpage_tp(tp, TRUE);
- 
- 	tabvarname = alloc((unsigned)STRLEN(varname) + 3);
- 	if (tabvarname != NULL)
-@@ -16069,7 +16537,7 @@
- 
- 	/* Restore current tabpage */
- 	if (valid_tabpage(save_curtab))
--	    goto_tabpage_tp(save_curtab);
-+	    goto_tabpage_tp(save_curtab, TRUE);
-     }
- }
- 
-@@ -16133,7 +16601,7 @@
- 	/* set curwin to be our win, temporarily */
- 	save_curwin = curwin;
- 	save_curtab = curtab;
--	goto_tabpage_tp(tp);
-+	goto_tabpage_tp(tp, TRUE);
- 	if (!win_valid(win))
- 	    return;
- 	curwin = win;
-@@ -16168,7 +16636,7 @@
- 	/* Restore current tabpage and window, if still valid (autocomands can
- 	 * make them invalid). */
- 	if (valid_tabpage(save_curtab))
--	    goto_tabpage_tp(save_curtab);
-+	    goto_tabpage_tp(save_curtab, TRUE);
- 	if (win_valid(save_curwin))
- 	{
- 	    curwin = save_curwin;
-@@ -16192,6 +16660,17 @@
- }
- 
- /*
-+ * shiftwidth() function
-+ */
-+    static void
-+f_shiftwidth(argvars, rettv)
-+    typval_T	*argvars UNUSED;
-+    typval_T	*rettv;
-+{
-+    rettv->vval.v_number = get_sw_value();
-+}
-+
-+/*
-  * "simplify()" function
-  */
-     static void
-@@ -16256,6 +16735,7 @@
- 
- static int	item_compare_ic;
- static char_u	*item_compare_func;
-+static dict_T	*item_compare_selfdict;
- static int	item_compare_func_err;
- #define ITEM_COMPARE_FAIL 999
- 
-@@ -16315,7 +16795,8 @@
- 
-     rettv.v_type = VAR_UNKNOWN;		/* clear_tv() uses this */
-     res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
--				 &rettv, 2, argv, 0L, 0L, &dummy, TRUE, NULL);
-+				 &rettv, 2, argv, 0L, 0L, &dummy, TRUE,
-+				 item_compare_selfdict);
-     clear_tv(&argv[0]);
-     clear_tv(&argv[1]);
- 
-@@ -16348,7 +16829,8 @@
-     else
-     {
- 	l = argvars[0].vval.v_list;
--	if (l == NULL || tv_check_lock(l->lv_lock, (char_u *)"sort()"))
-+	if (l == NULL || tv_check_lock(l->lv_lock,
-+					     (char_u *)_("sort() argument")))
- 	    return;
- 	rettv->vval.v_list = l;
- 	rettv->v_type = VAR_LIST;
-@@ -16360,8 +16842,10 @@
- 
- 	item_compare_ic = FALSE;
- 	item_compare_func = NULL;
-+	item_compare_selfdict = NULL;
- 	if (argvars[1].v_type != VAR_UNKNOWN)
- 	{
-+	    /* optional second argument: {func} */
- 	    if (argvars[1].v_type == VAR_FUNC)
- 		item_compare_func = argvars[1].vval.v_string;
- 	    else
-@@ -16376,6 +16860,17 @@
- 		else
- 		    item_compare_func = get_tv_string(&argvars[1]);
- 	    }
-+
-+	    if (argvars[2].v_type != VAR_UNKNOWN)
-+	    {
-+		/* optional third argument: {dict} */
-+		if (argvars[2].v_type != VAR_DICT)
-+		{
-+		    EMSG(_(e_dictreq));
-+		    return;
-+		}
-+		item_compare_selfdict = argvars[2].vval.v_dict;
-+	    }
- 	}
- 
- 	/* Make an array with each entry pointing to an item in the List. */
-@@ -17512,18 +18007,22 @@
-     typval_T	*argvars UNUSED;
-     typval_T	*rettv;
- {
--    char_u	fname[MAXPATHL + 1];
-+    char_u	*fname;
-     tagname_T	tn;
-     int		first;
- 
-     if (rettv_list_alloc(rettv) == FAIL)
- 	return;
-+    fname = alloc(MAXPATHL);
-+    if (fname == NULL)
-+	return;
- 
-     for (first = TRUE; ; first = FALSE)
- 	if (get_tagfname(&tn, first, fname) == FAIL
- 		|| list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
- 	    break;
-     tagname_free(&tn);
-+    vim_free(fname);
- }
- 
- /*
-@@ -17711,7 +18210,7 @@
-     typval_T	*argvars;
-     typval_T	*rettv;
- {
--    char_u	*instr;
-+    char_u	*in_str;
-     char_u	*fromstr;
-     char_u	*tostr;
-     char_u	*p;
-@@ -17728,7 +18227,7 @@
-     char_u	buf2[NUMBUFLEN];
-     garray_T	ga;
- 
--    instr = get_tv_string(&argvars[0]);
-+    in_str = get_tv_string(&argvars[0]);
-     fromstr = get_tv_string_buf_chk(&argvars[1], buf);
-     tostr = get_tv_string_buf_chk(&argvars[2], buf2);
- 
-@@ -17754,19 +18253,19 @@
- 	}
- 
-     /* fromstr and tostr have to contain the same number of chars */
--    while (*instr != NUL)
-+    while (*in_str != NUL)
-     {
- #ifdef FEAT_MBYTE
- 	if (has_mbyte)
- 	{
--	    inlen = (*mb_ptr2len)(instr);
--	    cpstr = instr;
-+	    inlen = (*mb_ptr2len)(in_str);
-+	    cpstr = in_str;
- 	    cplen = inlen;
- 	    idx = 0;
- 	    for (p = fromstr; *p != NUL; p += fromlen)
- 	    {
- 		fromlen = (*mb_ptr2len)(p);
--		if (fromlen == inlen && STRNCMP(instr, p, inlen) == 0)
-+		if (fromlen == inlen && STRNCMP(in_str, p, inlen) == 0)
- 		{
- 		    for (p = tostr; *p != NUL; p += tolen)
- 		    {
-@@ -17785,11 +18284,11 @@
- 		++idx;
- 	    }
- 
--	    if (first && cpstr == instr)
-+	    if (first && cpstr == in_str)
- 	    {
- 		/* Check that fromstr and tostr have the same number of
- 		 * (multi-byte) characters.  Done only once when a character
--		 * of instr doesn't appear in fromstr. */
-+		 * of in_str doesn't appear in fromstr. */
- 		first = FALSE;
- 		for (p = tostr; *p != NUL; p += tolen)
- 		{
-@@ -17804,18 +18303,18 @@
- 	    mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
- 	    ga.ga_len += cplen;
- 
--	    instr += inlen;
-+	    in_str += inlen;
- 	}
- 	else
- #endif
- 	{
- 	    /* When not using multi-byte chars we can do it faster. */
--	    p = vim_strchr(fromstr, *instr);
-+	    p = vim_strchr(fromstr, *in_str);
- 	    if (p != NULL)
- 		ga_append(&ga, tostr[p - fromstr]);
- 	    else
--		ga_append(&ga, *instr);
--	    ++instr;
-+		ga_append(&ga, *in_str);
-+	    ++in_str;
- 	}
-     }
- 
-@@ -17882,11 +18381,21 @@
-     rettv->v_type = VAR_STRING;
- #ifdef FEAT_PERSISTENT_UNDO
-     {
--	char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
-+	char_u *fname = get_tv_string(&argvars[0]);
-+
-+	if (*fname == NUL)
-+	{
-+	    /* If there is no file name there will be no undo file. */
-+	    rettv->vval.v_string = NULL;
-+	}
-+	else
-+	{
-+	    char_u *ffname = FullName_save(fname, FALSE);
- 
--	if (ffname != NULL)
--	    rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
--	vim_free(ffname);
-+	    if (ffname != NULL)
-+		rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
-+	    vim_free(ffname);
-+	}
-     }
- #else
-     rettv->vval.v_string = NULL;
-@@ -18118,9 +18627,11 @@
- 	curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
- 
- 	check_cursor();
--	changed_cline_bef_curs();
--	invalidate_botline();
--	redraw_later(VALID);
-+	win_new_height(curwin, curwin->w_height);
-+# ifdef FEAT_VERTSPLIT
-+	win_new_width(curwin, W_WIDTH(curwin));
-+# endif
-+	changed_window_setting();
- 
- 	if (curwin->w_topline == 0)
- 	    curwin->w_topline = 1;
-@@ -18258,6 +18769,19 @@
- }
- 
- /*
-+ * "xor(expr, expr)" function
-+ */
-+    static void
-+f_xor(argvars, rettv)
-+    typval_T	*argvars;
-+    typval_T	*rettv;
-+{
-+    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
-+					^ get_tv_number_chk(&argvars[1], NULL);
-+}
-+
-+
-+/*
-  * Translate a String variable into a position.
-  * Returns NULL when there is an error.
-  */
-@@ -18768,11 +19292,7 @@
- set_vim_var_char(c)
-     int c;
- {
--#ifdef FEAT_MBYTE
--    char_u	buf[MB_MAXBYTES];
--#else
--    char_u	buf[2];
--#endif
-+    char_u	buf[MB_MAXBYTES + 1];
- 
- #ifdef FEAT_MBYTE
-     if (has_mbyte)
-@@ -19453,9 +19973,14 @@
- 	 * worked find the variable again.  Don't auto-load a script if it was
- 	 * loaded already, otherwise it would be loaded every time when
- 	 * checking if a function name is a Funcref variable. */
--	if (ht == &globvarht && !writing
--			    && script_autoload(varname, FALSE) && !aborting())
-+	if (ht == &globvarht && !writing)
-+	{
-+	    /* Note: script_autoload() may make "hi" invalid. It must either
-+	     * be obtained again or not used. */
-+	    if (!script_autoload(varname, FALSE) || aborting())
-+		return NULL;
- 	    hi = hash_find(ht, varname);
-+	}
- 	if (HASHITEM_EMPTY(hi))
- 	    return NULL;
-     }
-@@ -19564,7 +20089,7 @@
- 	{
- 	    sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
- 		(scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
--	    init_var_dict(&sv->sv_dict, &sv->sv_var);
-+	    init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
- 	    ++ga_scripts.ga_len;
- 	}
-     }
-@@ -19575,11 +20100,14 @@
-  * point to it.
-  */
-     void
--init_var_dict(dict, dict_var)
-+init_var_dict(dict, dict_var, scope)
-     dict_T	*dict;
-     dictitem_T	*dict_var;
-+    int		scope;
- {
-     hash_init(&dict->dv_hashtab);
-+    dict->dv_lock = 0;
-+    dict->dv_scope = scope;
-     dict->dv_refcount = DO_NOT_FREE_CNT;
-     dict->dv_copyID = 0;
-     dict_var->di_tv.vval.v_dict = dict;
-@@ -19730,7 +20258,6 @@
-     dictitem_T	*v;
-     char_u	*varname;
-     hashtab_T	*ht;
--    char_u	*p;
- 
-     ht = find_var_ht(name, &varname);
-     if (ht == NULL || *varname == NUL)
-@@ -19740,25 +20267,8 @@
-     }
-     v = find_var_in_ht(ht, varname, TRUE);
- 
--    if (tv->v_type == VAR_FUNC)
--    {
--	if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
--		&& !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
--							 ? name[2] : name[0]))
--	{
--	    EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
--	    return;
--	}
--	/* Don't allow hiding a function.  When "v" is not NULL we migth be
--	 * assigning another function to the same var, the type is checked
--	 * below. */
--	if (v == NULL && function_exists(name))
--	{
--	    EMSG2(_("E705: Variable name conflicts with existing function: %s"),
--									name);
--	    return;
--	}
--    }
-+    if (tv->v_type == VAR_FUNC && var_check_func_name(name, v == NULL))
-+	return;
- 
-     if (v != NULL)
-     {
-@@ -19824,13 +20334,8 @@
- 	}
- 
- 	/* Make sure the variable name is valid. */
--	for (p = varname; *p != NUL; ++p)
--	    if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
--						       && *p != AUTOLOAD_CHAR)
--	    {
--		EMSG2(_(e_illvar), varname);
--		return;
--	    }
-+	if (!valid_varname(varname))
-+	    return;
- 
- 	v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
- 							  + STRLEN(varname)));
-@@ -19895,6 +20400,55 @@
- }
- 
- /*
-+ * Check if a funcref is assigned to a valid variable name.
-+ * Return TRUE and give an error if not.
-+ */
-+    static int
-+var_check_func_name(name, new_var)
-+    char_u *name;    /* points to start of variable name */
-+    int    new_var;  /* TRUE when creating the variable */
-+{
-+    if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
-+	    && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
-+						     ? name[2] : name[0]))
-+    {
-+	EMSG2(_("E704: Funcref variable name must start with a capital: %s"),
-+									name);
-+	return TRUE;
-+    }
-+    /* Don't allow hiding a function.  When "v" is not NULL we might be
-+     * assigning another function to the same var, the type is checked
-+     * below. */
-+    if (new_var && function_exists(name))
-+    {
-+	EMSG2(_("E705: Variable name conflicts with existing function: %s"),
-+								    name);
-+	return TRUE;
-+    }
-+    return FALSE;
-+}
-+
-+/*
-+ * Check if a variable name is valid.
-+ * Return FALSE and give an error if not.
-+ */
-+    static int
-+valid_varname(varname)
-+    char_u *varname;
-+{
-+    char_u *p;
-+
-+    for (p = varname; *p != NUL; ++p)
-+	if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
-+						   && *p != AUTOLOAD_CHAR)
-+	{
-+	    EMSG2(_(e_illvar), varname);
-+	    return FALSE;
-+	}
-+    return TRUE;
-+}
-+
-+/*
-  * Return TRUE if typeval "tv" is set to be locked (immutable).
-  * Also give an error message, using "name".
-  */
-@@ -20099,7 +20653,13 @@
- 		/* Call msg_start() after eval1(), evaluating the expression
- 		 * may cause a message to appear. */
- 		if (eap->cmdidx == CMD_echo)
-+		{
-+		    /* Mark the saved text as finishing the line, so that what
-+		     * follows is displayed on a new line when scrolling back
-+		     * at the more prompt. */
-+		    msg_sb_eol();
- 		    msg_start();
-+		}
- 	    }
- 	    else if (eap->cmdidx == CMD_echo)
- 		msg_puts_attr((char_u *)" ", echo_attr);
-@@ -20302,6 +20862,7 @@
-     exarg_T	*eap;
- {
-     char_u	*theline;
-+    int		i;
-     int		j;
-     int		c;
-     int		saved_did_emsg;
-@@ -20548,6 +21109,15 @@
- 	    arg = vim_strsave(arg);
- 	    if (arg == NULL)
- 		goto erret;
-+
-+	    /* Check for duplicate argument name. */
-+	    for (i = 0; i < newargs.ga_len; ++i)
-+		if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
-+		{
-+		    EMSG2(_("E853: Duplicate argument name: %s"), arg);
-+		    goto erret;
-+		}
-+
- 	    ((char_u **)(newargs.ga_data))[newargs.ga_len] = arg;
- 	    *p = c;
- 	    newargs.ga_len++;
-@@ -20623,7 +21193,8 @@
-     nesting = 0;
-     for (;;)
-     {
--	msg_scroll = TRUE;
-+	if (KeyTyped)
-+	    msg_scroll = TRUE;
- 	need_wait_return = FALSE;
- 	sourcing_lnum_off = sourcing_lnum;
- 
-@@ -20726,6 +21297,8 @@
- 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
- 			|| (p[0] == 't' && p[1] == 'c'
- 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
-+			|| (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
-+				    && !ASCII_ISALPHA(p[3]))
- 			|| (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
- 				    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
- 			|| (p[0] == 'm' && p[1] == 'z'
-@@ -21562,6 +22135,9 @@
- 	    ++hi;
- 	fp = HI2UF(hi);
- 
-+	if (fp->uf_flags & FC_DICT)
-+	    return (char_u *)""; /* don't show dict functions */
-+
- 	if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
- 	    return fp->uf_name;	/* prevents overflow */
- 
-@@ -21689,7 +22265,7 @@
-  * Unreference a Function: decrement the reference count and free it when it
-  * becomes zero.  Only for numbered functions.
-  */
--    static void
-+    void
- func_unref(name)
-     char_u	*name;
- {
-@@ -21713,7 +22289,7 @@
- /*
-  * Count a reference to a Function.
-  */
--    static void
-+    void
- func_ref(name)
-     char_u	*name;
- {
-@@ -21792,7 +22368,7 @@
-     /*
-      * Init l: variables.
-      */
--    init_var_dict(&fc->l_vars, &fc->l_vars_var);
-+    init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
-     if (selfdict != NULL)
-     {
- 	/* Set l:self to "selfdict".  Use "name" to avoid a warning from
-@@ -21813,7 +22389,7 @@
-      * Set a:0 to "argcount".
-      * Set a:000 to a list with room for the "..." arguments.
-      */
--    init_var_dict(&fc->l_avars, &fc->l_avars_var);
-+    init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
-     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
- 				(varnumber_T)(argcount - fp->uf_args.ga_len));
-     /* Use "name" to avoid a warning from some compiler that checks the
-@@ -21921,8 +22497,12 @@
- 			s = tv2string(&argvars[i], &tofree, numbuf2, 0);
- 			if (s != NULL)
- 			{
--			    trunc_string(s, buf, MSG_BUF_CLEN);
--			    msg_puts(buf);
-+			    if (vim_strsize(s) > MSG_BUF_CLEN)
-+			    {
-+				trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
-+				s = buf;
-+			    }
-+			    msg_puts(s);
- 			    vim_free(tofree);
- 			}
- 		    }
-@@ -22010,8 +22590,12 @@
- 	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
- 	    if (s != NULL)
- 	    {
--		trunc_string(s, buf, MSG_BUF_CLEN);
--		smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
-+		if (vim_strsize(s) > MSG_BUF_CLEN)
-+		{
-+		    trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
-+		    s = buf;
-+		}
-+		smsg((char_u *)_("%s returning %s"), sourcing_name, s);
- 		vim_free(tofree);
- 	    }
- 	}
-@@ -22519,18 +23103,21 @@
- 	if (tab != NULL)
- 	{
- 	    *tab++ = '\0';	/* isolate the variable name */
--	    if (*tab == 'S')	/* string var */
--		type = VAR_STRING;
-+	    switch (*tab)
-+	    {
-+		case 'S': type = VAR_STRING; break;
- #ifdef FEAT_FLOAT
--	    else if (*tab == 'F')
--		type = VAR_FLOAT;
-+		case 'F': type = VAR_FLOAT; break;
- #endif
-+		case 'D': type = VAR_DICT; break;
-+		case 'L': type = VAR_LIST; break;
-+	    }
- 
- 	    tab = vim_strchr(tab, '\t');
- 	    if (tab != NULL)
- 	    {
- 		tv.v_type = type;
--		if (type == VAR_STRING)
-+		if (type == VAR_STRING || type == VAR_DICT || type == VAR_LIST)
- 		    tv.vval.v_string = viminfo_readstring(virp,
- 				       (int)(tab - virp->vir_line + 1), TRUE);
- #ifdef FEAT_FLOAT
-@@ -22539,9 +23126,28 @@
- #endif
- 		else
- 		    tv.vval.v_number = atol((char *)tab + 1);
-+		if (type == VAR_DICT || type == VAR_LIST)
-+		{
-+		    typval_T *etv = eval_expr(tv.vval.v_string, NULL);
-+
-+		    if (etv == NULL)
-+			/* Failed to parse back the dict or list, use it as a
-+			 * string. */
-+			tv.v_type = VAR_STRING;
-+		    else
-+		    {
-+			vim_free(tv.vval.v_string);
-+			tv = *etv;
-+			vim_free(etv);
-+		    }
-+		}
-+
- 		set_var(virp->vir_line + 1, &tv, FALSE);
--		if (type == VAR_STRING)
-+
-+		if (tv.v_type == VAR_STRING)
- 		    vim_free(tv.vval.v_string);
-+		else if (tv.v_type == VAR_DICT || tv.v_type == VAR_LIST)
-+		    clear_tv(&tv);
- 	    }
- 	}
-     }
-@@ -22583,8 +23189,10 @@
- 		    case VAR_STRING: s = "STR"; break;
- 		    case VAR_NUMBER: s = "NUM"; break;
- #ifdef FEAT_FLOAT
--		    case VAR_FLOAT: s = "FLO"; break;
-+		    case VAR_FLOAT:  s = "FLO"; break;
- #endif
-+		    case VAR_DICT:   s = "DIC"; break;
-+		    case VAR_LIST:   s = "LIS"; break;
- 		    default: continue;
- 		}
- 		fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
-@@ -22656,7 +23264,7 @@
- 		    f = -f;
- 		    sign = '-';
- 		}
--		if ((fprintf(fd, "let %s = %c&%f",
-+		if ((fprintf(fd, "let %s = %c%f",
- 					       this_var->di_key, sign, f) < 0)
- 			|| put_eol(fd) == FAIL)
- 		    return FAIL;
-@@ -23019,6 +23627,7 @@
-     int		c;
-     int		has_fullname = 0;
- #ifdef WIN3264
-+    char_u	*fname_start = *fnamep;
-     int		has_shortname = 0;
- #endif
- 
-@@ -23072,6 +23681,27 @@
- 		return -1;
- 	}
- 
-+#ifdef WIN3264
-+# if _WIN32_WINNT >= 0x0500
-+	if (vim_strchr(*fnamep, '~') != NULL)
-+	{
-+	    /* Expand 8.3 filename to full path.  Needed to make sure the same
-+	     * file does not have two different names.
-+	     * Note: problem does not occur if _WIN32_WINNT < 0x0500. */
-+	    p = alloc(_MAX_PATH + 1);
-+	    if (p != NULL)
-+	    {
-+		if (GetLongPathName(*fnamep, p, MAXPATHL))
-+		{
-+		    vim_free(*bufp);
-+		    *bufp = *fnamep = p;
-+		}
-+		else
-+		    vim_free(p);
-+	    }
-+	}
-+# endif
-+#endif
- 	/* Append a path separator to a directory. */
- 	if (mch_isdir(*fnamep))
- 	{
-@@ -23193,24 +23823,25 @@
-     }
- 
- #ifdef WIN3264
--    /* Check shortname after we have done 'heads' and before we do 'tails'
-+    /*
-+     * Handle ":8" after we have done 'heads' and before we do 'tails'.
-      */
-     if (has_shortname)
-     {
--	pbuf = NULL;
--	/* Copy the string if it is shortened by :h */
--	if (*fnamelen < (int)STRLEN(*fnamep))
-+	/* Copy the string if it is shortened by :h and when it wasn't copied
-+	 * yet, because we are going to change it in place.  Avoids changing
-+	 * the buffer name for "%:8". */
-+	if (*fnamelen < (int)STRLEN(*fnamep) || *fnamep == fname_start)
- 	{
- 	    p = vim_strnsave(*fnamep, *fnamelen);
--	    if (p == 0)
-+	    if (p == NULL)
- 		return -1;
- 	    vim_free(*bufp);
- 	    *bufp = *fnamep = p;
- 	}
- 
- 	/* Split into two implementations - makes it easier.  First is where
--	 * there isn't a full name already, second is where there is.
--	 */
-+	 * there isn't a full name already, second is where there is. */
- 	if (!has_fullname && !vim_isAbsName(*fnamep))
- 	{
- 	    if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
-@@ -23218,18 +23849,16 @@
- 	}
- 	else
- 	{
--	    int		l;
-+	    int		l = *fnamelen;
- 
--	    /* Simple case, already have the full-name
-+	    /* Simple case, already have the full-name.
- 	     * Nearly always shorter, so try first time. */
--	    l = *fnamelen;
- 	    if (get_short_pathname(fnamep, bufp, &l) == FAIL)
- 		return -1;
- 
- 	    if (l == 0)
- 	    {
--		/* Couldn't find the filename.. search the paths.
--		 */
-+		/* Couldn't find the filename, search the paths. */
- 		l = *fnamelen;
- 		if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
- 		    return -1;
-diff -Naur vim73.orig/src/ex_cmds.c vim73/src/ex_cmds.c
---- vim73.orig/src/ex_cmds.c	2010-08-13 09:14:35.000000000 +0000
-+++ vim73/src/ex_cmds.c	2012-11-01 20:35:48.000000000 +0000
-@@ -11,10 +11,6 @@
-  * ex_cmds.c: some functions for command line commands
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for mch_open(), must be before vim.h */
--#endif
--
- #include "vim.h"
- #include "version.h"
- 
-@@ -29,7 +25,6 @@
- static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
- #endif
- 
--static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
- static int check_readonly __ARGS((int *forceit, buf_T *buf));
- #ifdef FEAT_AUTOCMD
- static void delbuf_msg __ARGS((char_u *name));
-@@ -323,7 +318,8 @@
-     /* When sorting numbers "start_col_nr" is the number, not the column
-      * number. */
-     if (sort_nr)
--	result = l1.start_col_nr - l2.start_col_nr;
-+	result = l1.start_col_nr == l2.start_col_nr ? 0
-+				 : l1.start_col_nr > l2.start_col_nr ? 1 : -1;
-     else
-     {
- 	/* We need to copy one line into "sortbuf1", because there is no
-@@ -482,7 +478,7 @@
- 	     * of the match, by temporarily terminating the string there */
- 	    s2 = s + end_col;
- 	    c = *s2;
--	    (*s2) = 0;
-+	    *s2 = NUL;
- 	    /* Sorting on number: Store the number itself. */
- 	    p = s + start_col;
- 	    if (sort_hex)
-@@ -491,9 +487,13 @@
- 		s = skiptodigit(p);
- 	    if (s > p && s[-1] == '-')
- 		--s;  /* include preceding negative sign */
--	    vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
--					&nrs[lnum - eap->line1].start_col_nr, NULL);
--	    (*s2) = c;
-+	    if (*s == NUL)
-+		/* empty line should sort before any number */
-+		nrs[lnum - eap->line1].start_col_nr = -MAXLNUM;
-+	    else
-+		vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
-+				  &nrs[lnum - eap->line1].start_col_nr, NULL);
-+	    *s2 = c;
- 	}
- 	else
- 	{
-@@ -819,7 +819,13 @@
- 	curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
- 
-     if (line1 < dest)
--	changed_lines(line1, 0, dest + num_lines + 1, 0L);
-+    {
-+	dest += num_lines + 1;
-+	last_line = curbuf->b_ml.ml_line_count;
-+	if (dest > last_line + 1)
-+	    dest = last_line + 1;
-+	changed_lines(line1, 0, dest, 0L);
-+    }
-     else
- 	changed_lines(dest + 1, 0, line1 + num_lines, 0L);
- 
-@@ -898,9 +904,6 @@
-  * Handle the ":!cmd" command.	Also for ":r !cmd" and ":w !cmd"
-  * Bangs in the argument are replaced with the previously entered command.
-  * Remember the argument.
-- *
-- * RISCOS: Bangs only replaced when followed by a space, since many
-- * pathnames contain one.
-  */
-     void
- do_bang(addr_count, eap, forceit, do_in, do_out)
-@@ -979,11 +982,7 @@
- 	trailarg = NULL;
- 	while (*p)
- 	{
--	    if (*p == '!'
--#ifdef RISCOS
--			&& (p[1] == ' ' || p[1] == NUL)
--#endif
--					)
-+	    if (*p == '!')
- 	    {
- 		if (p > newcmd && p[-1] == '\\')
- 		    STRMOVE(p - 1, p);
-@@ -1113,7 +1112,7 @@
-     if (do_out)
- 	shell_flags |= SHELL_DOOUT;
- 
--#if !defined(USE_SYSTEM) && defined(UNIX)
-+#ifdef FEAT_FILTERPIPE
-     if (!do_in && do_out && !p_stmp)
-     {
- 	/* Use a pipe to fetch stdout of the command, do not use a temp file. */
-@@ -1577,14 +1576,8 @@
- 	    if (p != NULL)
- 		*p = NUL;
- 	}
--# ifdef RISCOS
--	STRCAT(buf, " { < ");	/* Use RISC OS notation for input. */
--	STRCAT(buf, itmp);
--	STRCAT(buf, " } ");
--# else
- 	STRCAT(buf, " <");	/* " < " causes problems on Amiga */
- 	STRCAT(buf, itmp);
--# endif
- 	if (*p_shq == NUL)
- 	{
- 	    p = vim_strchr(cmd, '|');
-@@ -1633,16 +1626,9 @@
-     else
- 	vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
- #ifdef FEAT_QUICKFIX
--# ifndef RISCOS
--		opt != p_sp ? " %s%s" :
--# endif
- 		" %s %s",
- #else
--# ifndef RISCOS
- 		" %s%s",	/* " > %s" causes problems on Amiga */
--# else
--		" %s %s",	/* But is needed for 'shellpipe' and RISC OS */
--# endif
- #endif
- 		(char *)opt, (char *)fname);
- }
-@@ -1843,11 +1829,7 @@
- #ifdef VMS
- 				    (char_u *)"-tmp",
- #else
--# ifdef RISCOS
--				    (char_u *)"/tmp",
--# else
- 				    (char_u *)".tmp",
--# endif
- #endif
- 				    FALSE);
- 	    if (tempname == NULL)		/* out of memory */
-@@ -2700,6 +2682,10 @@
- 									TRUE);
- 		do_modelines(0);
- 	    }
-+
-+	    /* Autocommands may have changed buffer names, esp. when
-+	     * 'autochdir' is set. */
-+	    fname = curbuf->b_sfname;
- #endif
- 	}
- 
-@@ -2735,7 +2721,7 @@
-  * May set eap->forceit if a dialog says it's OK to overwrite.
-  * Return OK if it's OK, FAIL if it is not.
-  */
--    static int
-+    int
- check_overwrite(eap, buf, fname, ffname, other)
-     exarg_T	*eap;
-     buf_T	*buf;
-@@ -2772,7 +2758,7 @@
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
- 	    if (p_confirm || cmdmod.confirm)
- 	    {
--		char_u	buff[IOSIZE];
-+		char_u	buff[DIALOG_MSG_SIZE];
- 
- 		dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
- 		if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
-@@ -2790,7 +2776,7 @@
- 	/* For ":w! filename" check that no swap file exists for "filename". */
- 	if (other && !emsg_silent)
- 	{
--	    char_u	dir[MAXPATHL];
-+	    char_u	*dir;
- 	    char_u	*p;
- 	    int		r;
- 	    char_u	*swapname;
-@@ -2801,20 +2787,29 @@
- 	     * Use 'shortname' of the current buffer, since there is no buffer
- 	     * for the written file. */
- 	    if (*p_dir == NUL)
-+	    {
-+		dir = alloc(5);
-+		if (dir == NULL)
-+		    return FAIL;
- 		STRCPY(dir, ".");
-+	    }
- 	    else
- 	    {
-+		dir = alloc(MAXPATHL);
-+		if (dir == NULL)
-+		    return FAIL;
- 		p = p_dir;
- 		copy_option_part(&p, dir, MAXPATHL, ",");
- 	    }
- 	    swapname = makeswapname(fname, ffname, curbuf, dir);
-+	    vim_free(dir);
- 	    r = vim_fexists(swapname);
- 	    if (r)
- 	    {
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
- 		if (p_confirm || cmdmod.confirm)
- 		{
--		    char_u	buff[IOSIZE];
-+		    char_u	buff[DIALOG_MSG_SIZE];
- 
- 		    dialog_msg(buff,
- 			    _("Swap file \"%s\" exists, overwrite anyway?"),
-@@ -2964,7 +2959,7 @@
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
- 	if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
- 	{
--	    char_u	buff[IOSIZE];
-+	    char_u	buff[DIALOG_MSG_SIZE];
- 
- 	    if (buf->b_p_ro)
- 		dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
-@@ -3391,9 +3386,16 @@
- 		/* close the link to the current buffer */
- 		u_sync(FALSE);
- 		close_buffer(oldwin, curbuf,
--				      (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
-+			       (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
- 
- #ifdef FEAT_AUTOCMD
-+		/* Autocommands may open a new window and leave oldwin open
-+		 * which leads to crashes since the above call sets
-+		 * oldwin->w_buffer to NULL. */
-+		if (curwin != oldwin && oldwin != aucmd_win
-+			     && win_valid(oldwin) && oldwin->w_buffer == NULL)
-+		    win_close(oldwin, FALSE);
-+
- # ifdef FEAT_EVAL
- 		if (aborting())	    /* autocmds may abort script processing */
- 		{
-@@ -3418,7 +3420,7 @@
- 		     * and re-attach to buffer, perhaps.
- 		     */
- 		    if (curwin->w_s == &(curwin->w_buffer->b_s))
--			    curwin->w_s = &(buf->b_s);
-+			curwin->w_s = &(buf->b_s);
- #endif
- 		    curwin->w_buffer = buf;
- 		    curbuf = buf;
-@@ -3498,9 +3500,7 @@
- 	curbuf->b_p_bin = FALSE;	/* reset 'bin' before reading file */
- 	curwin->w_p_nu = 0;		/* no line numbers */
- 	curwin->w_p_rnu = 0;		/* no relative line numbers */
--#ifdef FEAT_SCROLLBIND
--	curwin->w_p_scb = FALSE;	/* no scroll binding */
--#endif
-+	RESET_BINDING(curwin);		/* no scroll or cursor binding */
- #ifdef FEAT_ARABIC
- 	curwin->w_p_arab = FALSE;	/* no arabic mode */
- #endif
-@@ -3631,10 +3631,6 @@
-      */
-     check_arg_idx(curwin);
- 
--#ifdef FEAT_SYN_HL
--    reset_synblock(curwin);	    /* remove any ownsyntax */
--#endif
--
- #ifdef FEAT_AUTOCMD
-     if (!auto_buf)
- #endif
-@@ -4109,8 +4105,8 @@
-     switch (*kind)
-     {
- 	case '-':
--	    start = lnum - bigness * (linenr_T)(x - kind);
--	    end = start + bigness;
-+	    start = lnum - bigness * (linenr_T)(x - kind) + 1;
-+	    end = start + bigness - 1;
- 	    curs = end;
- 	    break;
- 
-@@ -4268,6 +4264,9 @@
-     int		endcolumn = FALSE;	/* cursor in last column when done */
-     pos_T	old_cursor = curwin->w_cursor;
-     int		start_nsubs;
-+#ifdef FEAT_EVAL
-+    int         save_ma = 0;
-+#endif
- 
-     cmd = eap->arg;
-     if (!global_busy)
-@@ -4637,7 +4636,15 @@
- 			 * for a match in this line again. */
- 			skip_match = TRUE;
- 		    else
--			++matchcol; /* search for a match at next column */
-+		    {
-+			 /* search for a match at next column */
-+#ifdef FEAT_MBYTE
-+			if (has_mbyte)
-+			    matchcol += mb_ptr2len(sub_firstline + matchcol);
-+			else
-+#endif
-+			    ++matchcol;
-+		    }
- 		    goto skip;
- 		}
- 
-@@ -4664,7 +4671,12 @@
- 		    }
- 		    sub_nsubs++;
- 		    did_sub = TRUE;
--		    goto skip;
-+#ifdef FEAT_EVAL
-+		    /* Skip the substitution, unless an expression is used,
-+		     * then it is evaluated in the sandbox. */
-+		    if (!(sub[0] == '\\' && sub[1] == '='))
-+#endif
-+			goto skip;
- 		}
- 
- 		if (do_ask)
-@@ -4836,10 +4848,27 @@
- 		/*
- 		 * 3. substitute the string.
- 		 */
-+#ifdef FEAT_EVAL
-+		if (do_count)
-+		{
-+		    /* prevent accidentally changing the buffer by a function */
-+		    save_ma = curbuf->b_p_ma;
-+		    curbuf->b_p_ma = FALSE;
-+		    sandbox++;
-+		}
-+#endif
- 		/* get length of substitution part */
- 		sublen = vim_regsub_multi(&regmatch,
- 				    sub_firstlnum - regmatch.startpos[0].lnum,
- 				    sub, sub_firstline, FALSE, p_magic, TRUE);
-+#ifdef FEAT_EVAL
-+		if (do_count)
-+		{
-+		    curbuf->b_p_ma = save_ma;
-+		    sandbox--;
-+		    goto skip;
-+		}
-+#endif
- 
- 		/* When the match included the "$" of the last line it may
- 		 * go beyond the last line of the buffer. */
-@@ -5146,10 +5175,13 @@
- 
- 	if (!global_busy)
- 	{
--	    if (endcolumn)
--		coladvance((colnr_T)MAXCOL);
--	    else
--		beginline(BL_WHITE | BL_FIX);
-+	    if (!do_ask)  /* when interactive leave cursor on the match */
-+	    {
-+		if (endcolumn)
-+		    coladvance((colnr_T)MAXCOL);
-+		else
-+		    beginline(BL_WHITE | BL_FIX);
-+	    }
- 	    if (!do_sub_msg(do_count) && do_ask)
- 		MSG("");
- 	}
-@@ -5232,7 +5264,7 @@
-  * is assumed to be 'p' if missing.
-  *
-  * This is implemented in two passes: first we scan the file for the pattern and
-- * set a mark for each line that (not) matches. secondly we execute the command
-+ * set a mark for each line that (not) matches. Secondly we execute the command
-  * for each line that has a mark. This is required because after deleting
-  * lines we do not know where to search for the next match.
-  */
-@@ -5353,8 +5385,9 @@
- global_exe(cmd)
-     char_u	*cmd;
- {
--    linenr_T	old_lcount;	/* b_ml.ml_line_count before the command */
--    linenr_T	lnum;		/* line number according to old situation */
-+    linenr_T old_lcount;	/* b_ml.ml_line_count before the command */
-+    buf_T    *old_buf = curbuf;	/* remember what buffer we started in */
-+    linenr_T lnum;		/* line number according to old situation */
- 
-     /*
-      * Set current position only once for a global command.
-@@ -5398,8 +5431,10 @@
- 	msg_didout = FALSE;
- 
-     /* If substitutes done, report number of substitutes, otherwise report
--     * number of extra or deleted lines. */
--    if (!do_sub_msg(FALSE))
-+     * number of extra or deleted lines.
-+     * Don't report extra or deleted lines in the edge case where the buffer
-+     * we are in after execution is different from the buffer we started in. */
-+    if (!do_sub_msg(FALSE) && curbuf == old_buf)
- 	msgmore(curbuf->b_ml.ml_line_count - old_lcount);
- }
- 
-@@ -5409,7 +5444,7 @@
-     vir_T	*virp;
-     int		force;
- {
--    if (old_sub != NULL && force)
-+    if (force)
- 	vim_free(old_sub);
-     if (force || old_sub == NULL)
- 	old_sub = viminfo_readstring(virp, 1, TRUE);
-@@ -5471,9 +5506,8 @@
- 		return FALSE;
- 	    curwin->w_p_pvw = TRUE;
- 	    curwin->w_p_wfh = TRUE;
--# ifdef FEAT_SCROLLBIND
--	    curwin->w_p_scb = FALSE;	    /* don't take over 'scrollbind' */
--# endif
-+	    RESET_BINDING(curwin);	    /* don't take over 'scrollbind'
-+					       and 'cursorbind' */
- # ifdef FEAT_DIFF
- 	    curwin->w_p_diff = FALSE;	    /* no 'diff' */
- # endif
-@@ -5514,6 +5548,9 @@
-     int		len;
-     char_u	*lang;
- #endif
-+#ifdef FEAT_FOLDING
-+    int		old_KeyTyped = KeyTyped;
-+#endif
- 
-     if (eap != NULL)
-     {
-@@ -5533,7 +5570,7 @@
- 	}
- 	arg = eap->arg;
- 
--	if (eap->forceit && *arg == NUL)
-+	if (eap->forceit && *arg == NUL && !curbuf->b_help)
- 	{
- 	    EMSG(_("E478: Don't panic!"));
- 	    return;
-@@ -5677,6 +5714,12 @@
-     if (!p_im)
- 	restart_edit = 0;	    /* don't want insert mode in help file */
- 
-+#ifdef FEAT_FOLDING
-+    /* Restore KeyTyped, setting 'filetype=help' may reset it.
-+     * It is needed for do_tag top open folds under the cursor. */
-+    KeyTyped = old_KeyTyped;
-+#endif
-+
-     if (tag != NULL)
- 	do_tag(tag, DT_HELP, 1, FALSE, TRUE);
- 
-@@ -5853,9 +5896,14 @@
- 	}
- 	else
- 	{
--	  /* replace "[:...:]" with "\[:...:]"; "[+...]" with "\[++...]" */
--	    if (arg[0] == '[' && (arg[1] == ':'
--					 || (arg[1] == '+' && arg[2] == '+')))
-+	  /* Replace:
-+	   * "[:...:]" with "\[:...:]"
-+	   * "[++...]" with "\[++...]"
-+	   * "\{" with "\\{"
-+	   */
-+	    if ((arg[0] == '[' && (arg[1] == ':'
-+			 || (arg[1] == '+' && arg[2] == '+')))
-+		    || (arg[0] == '\\' && arg[1] == '{'))
- 	      *d++ = '\\';
- 
- 	  for (s = arg; *s; ++s)
-@@ -5946,6 +5994,29 @@
- 		break;
- 	  }
- 	  *d = NUL;
-+
-+	  if (*IObuff == '`')
-+	  {
-+	      if (d > IObuff + 2 && d[-1] == '`')
-+	      {
-+		  /* remove the backticks from `command` */
-+		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
-+		  d[-2] = NUL;
-+	      }
-+	      else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',')
-+	      {
-+		  /* remove the backticks and comma from `command`, */
-+		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
-+		  d[-3] = NUL;
-+	      }
-+	      else if (d > IObuff + 4 && d[-3] == '`'
-+					     && d[-2] == '\\' && d[-1] == '.')
-+	      {
-+		  /* remove the backticks and dot from `command`\. */
-+		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
-+		  d[-4] = NUL;
-+	      }
-+	  }
- 	}
-     }
- 
-@@ -5979,6 +6050,7 @@
-     char_u	*line;
-     int		in_example = FALSE;
-     int		len;
-+    char_u	*fname;
-     char_u	*p;
-     char_u	*rt;
-     int		mustfree;
-@@ -6025,124 +6097,187 @@
-     }
- 
-     /*
--     * In the "help.txt" file, add the locally added help files.
--     * This uses the very first line in the help file.
-+     * In the "help.txt" and "help.abx" file, add the locally added help
-+     * files.  This uses the very first line in the help file.
-      */
--    if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
-+    fname = gettail(curbuf->b_fname);
-+    if (fnamecmp(fname, "help.txt") == 0
-+#ifdef FEAT_MULTI_LANG
-+	|| (fnamencmp(fname, "help.", 5) == 0
-+	    && ASCII_ISALPHA(fname[5])
-+	    && ASCII_ISALPHA(fname[6])
-+	    && TOLOWER_ASC(fname[7]) == 'x'
-+	    && fname[8] == NUL)
-+#endif
-+	)
-     {
- 	for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
- 	{
- 	    line = ml_get_buf(curbuf, lnum, FALSE);
--	    if (strstr((char *)line, "*local-additions*") != NULL)
--	    {
--		/* Go through all directories in 'runtimepath', skipping
--		 * $VIMRUNTIME. */
--		p = p_rtp;
--		while (*p != NUL)
--		{
--		    copy_option_part(&p, NameBuff, MAXPATHL, ",");
--		    mustfree = FALSE;
--		    rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
--		    if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
--		    {
--			int	fcount;
--			char_u	**fnames;
--			FILE	*fd;
--			char_u	*s;
--			int	fi;
-+	    if (strstr((char *)line, "*local-additions*") == NULL)
-+		continue;
-+
-+	    /* Go through all directories in 'runtimepath', skipping
-+	     * $VIMRUNTIME. */
-+	    p = p_rtp;
-+	    while (*p != NUL)
-+	    {
-+		copy_option_part(&p, NameBuff, MAXPATHL, ",");
-+		mustfree = FALSE;
-+		rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
-+		if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
-+		{
-+		    int		fcount;
-+		    char_u	**fnames;
-+		    FILE	*fd;
-+		    char_u	*s;
-+		    int		fi;
- #ifdef FEAT_MBYTE
--			vimconv_T	vc;
--			char_u		*cp;
-+		    vimconv_T	vc;
-+		    char_u	*cp;
- #endif
- 
--			/* Find all "doc/ *.txt" files in this directory. */
--			add_pathsep(NameBuff);
--			STRCAT(NameBuff, "doc/*.txt");
--			if (gen_expand_wildcards(1, &NameBuff, &fcount,
--					     &fnames, EW_FILE|EW_SILENT) == OK
--				&& fcount > 0)
-+		    /* Find all "doc/ *.txt" files in this directory. */
-+		    add_pathsep(NameBuff);
-+#ifdef FEAT_MULTI_LANG
-+		    STRCAT(NameBuff, "doc/*.??[tx]");
-+#else
-+		    STRCAT(NameBuff, "doc/*.txt");
-+#endif
-+		    if (gen_expand_wildcards(1, &NameBuff, &fcount,
-+					 &fnames, EW_FILE|EW_SILENT) == OK
-+			    && fcount > 0)
-+		    {
-+#ifdef FEAT_MULTI_LANG
-+			int	i1;
-+			int	i2;
-+			char_u	*f1;
-+			char_u	*f2;
-+			char_u	*t1;
-+			char_u	*e1;
-+			char_u	*e2;
-+
-+			/* If foo.abx is found use it instead of foo.txt in
-+			 * the same directory. */
-+			for (i1 = 0; i1 < fcount; ++i1)
- 			{
--			    for (fi = 0; fi < fcount; ++fi)
-+			    for (i2 = 0; i2 < fcount; ++i2)
- 			    {
--				fd = mch_fopen((char *)fnames[fi], "r");
--				if (fd != NULL)
-+				if (i1 == i2)
-+				    continue;
-+				if (fnames[i1] == NULL || fnames[i2] == NULL)
-+				    continue;
-+				f1 = fnames[i1];
-+				f2 = fnames[i2];
-+				t1 = gettail(f1);
-+				if (fnamencmp(f1, f2, t1 - f1) != 0)
-+				    continue;
-+				e1 = vim_strrchr(t1, '.');
-+				e2 = vim_strrchr(gettail(f2), '.');
-+				if (e1 == NUL || e2 == NUL)
-+				    continue;
-+				if (fnamecmp(e1, ".txt") != 0
-+				    && fnamecmp(e1, fname + 4) != 0)
- 				{
--				    vim_fgets(IObuff, IOSIZE, fd);
--				    if (IObuff[0] == '*'
--					    && (s = vim_strchr(IObuff + 1, '*'))
--								      != NULL)
--				    {
--#ifdef FEAT_MBYTE
--					int	this_utf = MAYBE;
-+				    /* Not .txt and not .abx, remove it. */
-+				    vim_free(fnames[i1]);
-+				    fnames[i1] = NULL;
-+				    continue;
-+				}
-+				if (fnamencmp(f1, f2, e1 - f1) != 0)
-+				    continue;
-+				if (fnamecmp(e1, ".txt") == 0
-+				    && fnamecmp(e2, fname + 4) == 0)
-+				{
-+				    /* use .abx instead of .txt */
-+				    vim_free(fnames[i1]);
-+				    fnames[i1] = NULL;
-+				}
-+			    }
-+			}
- #endif
--					/* Change tag definition to a
--					 * reference and remove <CR>/<NL>. */
--					IObuff[0] = '|';
--					*s = '|';
--					while (*s != NUL)
--					{
--					    if (*s == '\r' || *s == '\n')
--						*s = NUL;
-+			for (fi = 0; fi < fcount; ++fi)
-+			{
-+			    if (fnames[fi] == NULL)
-+				continue;
-+			    fd = mch_fopen((char *)fnames[fi], "r");
-+			    if (fd != NULL)
-+			    {
-+				vim_fgets(IObuff, IOSIZE, fd);
-+				if (IObuff[0] == '*'
-+					&& (s = vim_strchr(IObuff + 1, '*'))
-+								  != NULL)
-+				{
- #ifdef FEAT_MBYTE
--					    /* The text is utf-8 when a byte
--					     * above 127 is found and no
--					     * illegal byte sequence is found.
--					     */
--					    if (*s >= 0x80 && this_utf != FALSE)
--					    {
--						int	l;
--
--						this_utf = TRUE;
--						l = utf_ptr2len(s);
--						if (l == 1)
--						    this_utf = FALSE;
--						s += l - 1;
--					    }
-+				    int	this_utf = MAYBE;
- #endif
--					    ++s;
--					}
-+				    /* Change tag definition to a
-+				     * reference and remove <CR>/<NL>. */
-+				    IObuff[0] = '|';
-+				    *s = '|';
-+				    while (*s != NUL)
-+				    {
-+					if (*s == '\r' || *s == '\n')
-+					    *s = NUL;
- #ifdef FEAT_MBYTE
--					/* The help file is latin1 or utf-8;
--					 * conversion to the current
--					 * 'encoding' may be required. */
--					vc.vc_type = CONV_NONE;
--					convert_setup(&vc, (char_u *)(
--						    this_utf == TRUE ? "utf-8"
--							  : "latin1"), p_enc);
--					if (vc.vc_type == CONV_NONE)
--					    /* No conversion needed. */
--					    cp = IObuff;
--					else
-+					/* The text is utf-8 when a byte
-+					 * above 127 is found and no
-+					 * illegal byte sequence is found.
-+					 */
-+					if (*s >= 0x80 && this_utf != FALSE)
- 					{
--					    /* Do the conversion.  If it fails
--					     * use the unconverted text. */
--					    cp = string_convert(&vc, IObuff,
--									NULL);
--					    if (cp == NULL)
--						cp = IObuff;
-+					    int	l;
-+
-+					    this_utf = TRUE;
-+					    l = utf_ptr2len(s);
-+					    if (l == 1)
-+						this_utf = FALSE;
-+					    s += l - 1;
- 					}
--					convert_setup(&vc, NULL, NULL);
-+#endif
-+					++s;
-+				    }
-+#ifdef FEAT_MBYTE
-+				    /* The help file is latin1 or utf-8;
-+				     * conversion to the current
-+				     * 'encoding' may be required. */
-+				    vc.vc_type = CONV_NONE;
-+				    convert_setup(&vc, (char_u *)(
-+						this_utf == TRUE ? "utf-8"
-+						      : "latin1"), p_enc);
-+				    if (vc.vc_type == CONV_NONE)
-+					/* No conversion needed. */
-+					cp = IObuff;
-+				    else
-+				    {
-+					/* Do the conversion.  If it fails
-+					 * use the unconverted text. */
-+					cp = string_convert(&vc, IObuff,
-+								    NULL);
-+					if (cp == NULL)
-+					    cp = IObuff;
-+				    }
-+				    convert_setup(&vc, NULL, NULL);
- 
--					ml_append(lnum, cp, (colnr_T)0, FALSE);
--					if (cp != IObuff)
--					    vim_free(cp);
-+				    ml_append(lnum, cp, (colnr_T)0, FALSE);
-+				    if (cp != IObuff)
-+					vim_free(cp);
- #else
--					ml_append(lnum, IObuff, (colnr_T)0,
--								       FALSE);
-+				    ml_append(lnum, IObuff, (colnr_T)0,
-+								   FALSE);
- #endif
--					++lnum;
--				    }
--				    fclose(fd);
-+				    ++lnum;
- 				}
-+				fclose(fd);
- 			    }
--			    FreeWild(fcount, fnames);
- 			}
-+			FreeWild(fcount, fnames);
- 		    }
--		    if (mustfree)
--			vim_free(rt);
- 		}
--		break;
-+		if (mustfree)
-+		    vim_free(rt);
- 	    }
-+	    break;
- 	}
-     }
- }
-@@ -6430,7 +6565,10 @@
- 	    p1 = vim_strchr(IObuff, '*');	/* find first '*' */
- 	    while (p1 != NULL)
- 	    {
--		p2 = vim_strchr(p1 + 1, '*');	/* find second '*' */
-+		/* Use vim_strbyte() instead of vim_strchr() so that when
-+		 * 'encoding' is dbcs it still works, don't find '*' in the
-+		 * second byte. */
-+		p2 = vim_strbyte(p1 + 1, '*');	/* find second '*' */
- 		if (p2 != NULL && p2 > p1 + 1)	/* skip "*" and "**" */
- 		{
- 		    for (s = p1 + 1; s < p2; ++s)
-@@ -6559,8 +6697,7 @@
- struct sign
- {
-     sign_T	*sn_next;	/* next sign in list */
--    int		sn_typenr;	/* type number of sign (negative if not equal
--				   to name) */
-+    int		sn_typenr;	/* type number of sign */
-     char_u	*sn_name;	/* name of sign */
-     char_u	*sn_icon;	/* name of pixmap */
- #ifdef FEAT_SIGN_ICONS
-@@ -6572,7 +6709,7 @@
- };
- 
- static sign_T	*first_sign = NULL;
--static int	last_sign_typenr = MAX_TYPENR;	/* is decremented */
-+static int	next_sign_typenr = 1;
- 
- static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd));
- static void sign_list_defined __ARGS((sign_T *sp));
-@@ -6647,16 +6784,21 @@
- 	if (idx == SIGNCMD_LIST && *arg == NUL)
- 	{
- 	    /* ":sign list": list all defined signs */
--	    for (sp = first_sign; sp != NULL; sp = sp->sn_next)
-+	    for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
- 		sign_list_defined(sp);
- 	}
- 	else if (*arg == NUL)
- 	    EMSG(_("E156: Missing sign name"));
- 	else
- 	{
-+	    /* Isolate the sign name.  If it's a number skip leading zeroes,
-+	     * so that "099" and "99" are the same sign.  But keep "0". */
- 	    p = skiptowhite(arg);
- 	    if (*p != NUL)
- 		*p++ = NUL;
-+	    while (arg[0] == '0' && arg[1] != NUL)
-+		++arg;
-+
- 	    sp_prev = NULL;
- 	    for (sp = first_sign; sp != NULL; sp = sp->sn_next)
- 	    {
-@@ -6669,46 +6811,52 @@
- 		/* ":sign define {name} ...": define a sign */
- 		if (sp == NULL)
- 		{
-+		    sign_T	*lp;
-+		    int		start = next_sign_typenr;
-+
- 		    /* Allocate a new sign. */
- 		    sp = (sign_T *)alloc_clear((unsigned)sizeof(sign_T));
- 		    if (sp == NULL)
- 			return;
--		    if (sp_prev == NULL)
--			first_sign = sp;
--		    else
--			sp_prev->sn_next = sp;
--		    sp->sn_name = vim_strnsave(arg, (int)(p - arg));
- 
--		    /* If the name is a number use that for the typenr,
--		     * otherwise use a negative number. */
--		    if (VIM_ISDIGIT(*arg))
--			sp->sn_typenr = atoi((char *)arg);
--		    else
-+		    /* Check that next_sign_typenr is not already being used.
-+		     * This only happens after wrapping around.  Hopefully
-+		     * another one got deleted and we can use its number. */
-+		    for (lp = first_sign; lp != NULL; )
- 		    {
--			sign_T	*lp;
--			int	start = last_sign_typenr;
--
--			for (lp = first_sign; lp != NULL; lp = lp->sn_next)
-+			if (lp->sn_typenr == next_sign_typenr)
- 			{
--			    if (lp->sn_typenr == last_sign_typenr)
-+			    ++next_sign_typenr;
-+			    if (next_sign_typenr == MAX_TYPENR)
-+				next_sign_typenr = 1;
-+			    if (next_sign_typenr == start)
- 			    {
--				--last_sign_typenr;
--				if (last_sign_typenr == 0)
--				    last_sign_typenr = MAX_TYPENR;
--				if (last_sign_typenr == start)
--				{
--				    EMSG(_("E612: Too many signs defined"));
--				    return;
--				}
--				lp = first_sign;
--				continue;
-+				vim_free(sp);
-+				EMSG(_("E612: Too many signs defined"));
-+				return;
- 			    }
-+			    lp = first_sign;  /* start all over */
-+			    continue;
- 			}
-+			lp = lp->sn_next;
-+		    }
-+
-+		    sp->sn_typenr = next_sign_typenr;
-+		    if (++next_sign_typenr == MAX_TYPENR)
-+			next_sign_typenr = 1; /* wrap around */
- 
--			sp->sn_typenr = last_sign_typenr--;
--			if (last_sign_typenr == 0)
--			    last_sign_typenr = MAX_TYPENR; /* wrap around */
-+		    sp->sn_name = vim_strsave(arg);
-+		    if (sp->sn_name == NULL)  /* out of memory */
-+		    {
-+			vim_free(sp);
-+			return;
- 		    }
-+
-+		    /* add the new sign to the list of signs */
-+		    if (sp_prev == NULL)
-+			first_sign = sp;
-+		    else
-+			sp_prev->sn_next = sp;
- 		}
- 
- 		/* set values for a defined sign. */
-@@ -6879,6 +7027,16 @@
- 		lnum = atoi((char *)arg);
- 		arg = skiptowhite(arg);
- 	    }
-+	    else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE)
-+	    {
-+		if (id != -1)
-+		{
-+		    EMSG(_(e_invarg));
-+		    return;
-+		}
-+		id = -2;
-+		arg = skiptowhite(arg + 1);
-+	    }
- 	    else if (STRNCMP(arg, "name=", 5) == 0)
- 	    {
- 		arg += 5;
-@@ -6886,6 +7044,8 @@
- 		arg = skiptowhite(arg);
- 		if (*arg != NUL)
- 		    *arg++ = NUL;
-+		while (sign_name[0] == '0' && sign_name[1] != NUL)
-+		    ++sign_name;
- 	    }
- 	    else if (STRNCMP(arg, "file=", 5) == 0)
- 	    {
-@@ -6913,7 +7073,7 @@
- 	{
- 	    EMSG2(_("E158: Invalid buffer name: %s"), arg);
- 	}
--	else if (id <= 0)
-+	else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2))
- 	{
- 	    if (lnum >= 0 || sign_name != NULL)
- 		EMSG(_(e_invarg));
-@@ -6954,11 +7114,17 @@
- 	}
- 	else if (idx == SIGNCMD_UNPLACE)
- 	{
--	    /* ":sign unplace {id} file={fname}" */
- 	    if (lnum >= 0 || sign_name != NULL)
- 		EMSG(_(e_invarg));
-+	    else if (id == -2)
-+	    {
-+		/* ":sign unplace * file={fname}" */
-+		redraw_buf_later(buf, NOT_VALID);
-+		buf_delete_signs(buf);
-+	    }
- 	    else
- 	    {
-+		/* ":sign unplace {id} file={fname}" */
- 		lnum = buf_delsign(buf, id);
- 		update_debug_sign(buf, lnum);
- 	    }
-diff -Naur vim73.orig/src/ex_cmds.h vim73/src/ex_cmds.h
---- vim73.orig/src/ex_cmds.h	2010-07-21 13:48:02.000000000 +0000
-+++ vim73/src/ex_cmds.h	2012-11-01 20:35:47.000000000 +0000
-@@ -102,7 +102,7 @@
- EX(CMD_aboveleft,	"aboveleft",	ex_wrongmodifier,
- 			NEEDARG|EXTRA|NOTRLCOM),
- EX(CMD_all,		"all",		ex_all,
--			RANGE|NOTADR|COUNT|TRLBAR),
-+			BANG|RANGE|NOTADR|COUNT|TRLBAR),
- EX(CMD_amenu,		"amenu",	ex_menu,
- 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
- EX(CMD_anoremenu,	"anoremenu",	ex_menu,
-@@ -304,7 +304,7 @@
- EX(CMD_display,		"display",	ex_display,
- 			EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
- EX(CMD_diffupdate,	"diffupdate",	ex_diffupdate,
--			TRLBAR),
-+			BANG|TRLBAR),
- EX(CMD_diffget,		"diffget",	ex_diffgetput,
- 			RANGE|EXTRA|TRLBAR|MODIFY),
- EX(CMD_diffoff,		"diffoff",	ex_diffoff,
-@@ -662,7 +662,7 @@
- EX(CMD_nunmenu,		"nunmenu",	ex_menu,
- 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
- EX(CMD_open,		"open",		ex_open,
--			RANGE|EXTRA),
-+			RANGE|BANG|EXTRA),
- EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
- 			BANG|TRLBAR|SBOXOK|CMDWIN),
- EX(CMD_omap,		"omap",		ex_map,
-@@ -788,7 +788,7 @@
- EX(CMD_rubyfile,	"rubyfile",	ex_rubyfile,
- 			RANGE|FILE1|NEEDARG|CMDWIN),
- EX(CMD_rundo,		"rundo",	ex_rundo,
--			NEEDARG|EXTRA|XFILE),
-+			NEEDARG|FILE1),
- EX(CMD_rviminfo,	"rviminfo",	ex_viminfo,
- 			BANG|FILE1|TRLBAR|CMDWIN),
- EX(CMD_substitute,	"substitute",	do_sub,
-@@ -798,7 +798,7 @@
- EX(CMD_sargument,	"sargument",	ex_argument,
- 			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
- EX(CMD_sall,		"sall",		ex_all,
--			RANGE|NOTADR|COUNT|TRLBAR),
-+			BANG|RANGE|NOTADR|COUNT|TRLBAR),
- EX(CMD_sandbox,		"sandbox",	ex_wrongmodifier,
- 			NEEDARG|EXTRA|NOTRLCOM),
- EX(CMD_saveas,		"saveas",	ex_write,
-@@ -944,7 +944,7 @@
- EX(CMD_tabfirst,	"tabfirst",	ex_tabnext,
- 			TRLBAR),
- EX(CMD_tabmove,		"tabmove",	ex_tabmove,
--			RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR),
-+			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR),
- EX(CMD_tablast,		"tablast",	ex_tabnext,
- 			TRLBAR),
- EX(CMD_tabnext,		"tabnext",	ex_tabnext,
-@@ -1078,7 +1078,7 @@
- EX(CMD_wsverb,		"wsverb",	ex_wsverb,
- 			EXTRA|NOTADR|NEEDARG),
- EX(CMD_wundo,		"wundo",	ex_wundo,
--			BANG|NEEDARG|EXTRA|XFILE),
-+			BANG|NEEDARG|FILE1),
- EX(CMD_wviminfo,	"wviminfo",	ex_viminfo,
- 			BANG|FILE1|TRLBAR|CMDWIN),
- EX(CMD_xit,		"xit",		ex_exit,
-diff -Naur vim73.orig/src/ex_cmds2.c vim73/src/ex_cmds2.c
---- vim73.orig/src/ex_cmds2.c	2010-07-27 19:43:38.000000000 +0000
-+++ vim73/src/ex_cmds2.c	2012-11-01 20:35:48.000000000 +0000
-@@ -11,10 +11,6 @@
-  * ex_cmds2.c: some more functions for command line commands
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for mch_open(), must be before vim.h */
--#endif
--
- #include "vim.h"
- #include "version.h"
- 
-@@ -504,18 +500,10 @@
- 	/* Expand the file name in the same way as do_source().  This means
- 	 * doing it twice, so that $DIR/file gets expanded when $DIR is
- 	 * "~/dir". */
--#ifdef RISCOS
--	q = mch_munge_fname(p);
--#else
- 	q = expand_env_save(p);
--#endif
- 	if (q == NULL)
- 	    return FAIL;
--#ifdef RISCOS
--	p = mch_munge_fname(q);
--#else
- 	p = expand_env_save(q);
--#endif
- 	vim_free(q);
- 	if (p == NULL)
- 	    return FAIL;
-@@ -608,10 +596,15 @@
-     garray_T	*gap;
- 
-     gap = &dbg_breakp;
--#ifdef FEAT_PROFILE
-     if (eap->cmdidx == CMD_profdel)
-+    {
-+#ifdef FEAT_PROFILE
- 	gap = &prof_ga;
-+#else
-+	ex_ni(eap);
-+	return;
- #endif
-+    }
- 
-     if (vim_isdigit(*eap->arg))
-     {
-@@ -694,10 +687,12 @@
- 	for (i = 0; i < dbg_breakp.ga_len; ++i)
- 	{
- 	    bp = &BREAKP(i);
-+	    if (bp->dbg_type == DBG_FILE)
-+		home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, TRUE);
- 	    smsg((char_u *)_("%3d  %s %s  line %ld"),
- 		    bp->dbg_nr,
- 		    bp->dbg_type == DBG_FUNC ? "func" : "file",
--		    bp->dbg_name,
-+		    bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
- 		    (long)bp->dbg_lnum);
- 	}
- }
-@@ -1119,7 +1114,7 @@
- static enum
- {
-     PEXP_SUBCMD,	/* expand :profile sub-commands */
--    PEXP_FUNC,		/* expand :profile func {funcname} */
-+    PEXP_FUNC		/* expand :profile func {funcname} */
- } pexpand_what;
- 
- static char *pexpand_cmds[] = {
-@@ -1488,7 +1483,7 @@
- #endif
- 
- /*
-- * Ask the user what to do when abondoning a changed buffer.
-+ * Ask the user what to do when abandoning a changed buffer.
-  * Must check 'write' option first!
-  */
-     void
-@@ -1496,9 +1491,10 @@
-     buf_T	*buf;
-     int		checkall;	/* may abandon all changed buffers */
- {
--    char_u	buff[IOSIZE];
-+    char_u	buff[DIALOG_MSG_SIZE];
-     int		ret;
-     buf_T	*buf2;
-+    exarg_T     ea;
- 
-     dialog_msg(buff, _("Save changes to \"%s\"?"),
- 			(buf->b_fname != NULL) ?
-@@ -1508,13 +1504,19 @@
-     else
- 	ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
- 
-+    /* Init ea pseudo-structure, this is needed for the check_overwrite()
-+     * function. */
-+    ea.append = ea.forceit = FALSE;
-+
-     if (ret == VIM_YES)
-     {
- #ifdef FEAT_BROWSE
- 	/* May get file name, when there is none */
- 	browse_save_fname(buf);
- #endif
--	if (buf->b_fname != NULL)   /* didn't hit Cancel */
-+	if (buf->b_fname != NULL && check_overwrite(&ea, buf,
-+				    buf->b_fname, buf->b_ffname, FALSE) == OK)
-+	    /* didn't hit Cancel */
- 	    (void)buf_write_all(buf, FALSE);
-     }
-     else if (ret == VIM_NO)
-@@ -1542,7 +1544,9 @@
- 		/* May get file name, when there is none */
- 		browse_save_fname(buf2);
- #endif
--		if (buf2->b_fname != NULL)   /* didn't hit Cancel */
-+		if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
-+				  buf2->b_fname, buf2->b_ffname, FALSE) == OK)
-+		    /* didn't hit Cancel */
- 		    (void)buf_write_all(buf2, FALSE);
- #ifdef FEAT_AUTOCMD
- 		/* an autocommand may have deleted the buffer */
-@@ -1579,6 +1583,26 @@
- 		|| forceit);
- }
- 
-+static void add_bufnum __ARGS((int *bufnrs, int *bufnump, int nr));
-+
-+/*
-+ * Add a buffer number to "bufnrs", unless it's already there.
-+ */
-+    static void
-+add_bufnum(bufnrs, bufnump, nr)
-+    int	    *bufnrs;
-+    int	    *bufnump;
-+    int	    nr;
-+{
-+    int i;
-+
-+    for (i = 0; i < *bufnump; ++i)
-+	if (bufnrs[i] == nr)
-+	    return;
-+    bufnrs[*bufnump] = nr;
-+    *bufnump = *bufnump + 1;
-+}
-+
- /*
-  * Return TRUE if any buffer was changed and cannot be abandoned.
-  * That changed buffer becomes the current buffer.
-@@ -1587,32 +1611,64 @@
- check_changed_any(hidden)
-     int		hidden;		/* Only check hidden buffers */
- {
-+    int		ret = FALSE;
-     buf_T	*buf;
-     int		save;
-+    int		i;
-+    int		bufnum = 0;
-+    int		bufcount = 0;
-+    int		*bufnrs;
- #ifdef FEAT_WINDOWS
-+    tabpage_T   *tp;
-     win_T	*wp;
- #endif
- 
--    for (;;)
-+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
-+	++bufcount;
-+
-+    if (bufcount == 0)
-+	return FALSE;
-+
-+    bufnrs = (int *)alloc(sizeof(int) * bufcount);
-+    if (bufnrs == NULL)
-+	return FALSE;
-+
-+    /* curbuf */
-+    bufnrs[bufnum++] = curbuf->b_fnum;
-+#ifdef FEAT_WINDOWS
-+    /* buf in curtab */
-+    FOR_ALL_WINDOWS(wp)
-+	if (wp->w_buffer != curbuf)
-+	    add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
-+
-+    /* buf in other tab */
-+    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
-+	if (tp != curtab)
-+	    for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
-+		add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
-+#endif
-+    /* any other buf */
-+    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
-+	add_bufnum(bufnrs, &bufnum, buf->b_fnum);
-+
-+    for (i = 0; i < bufnum; ++i)
-     {
--	/* check curbuf first: if it was changed we can't abandon it */
--	if (!hidden && curbufIsChanged())
--	    buf = curbuf;
--	else
-+	buf = buflist_findnr(bufnrs[i]);
-+	if (buf == NULL)
-+	    continue;
-+	if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
- 	{
--	    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
--		if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
--		    break;
-+	    /* Try auto-writing the buffer.  If this fails but the buffer no
-+	    * longer exists it's not changed, that's OK. */
-+	    if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
-+		break;	    /* didn't save - still changes */
- 	}
--	if (buf == NULL)    /* No buffers changed */
--	    return FALSE;
--
--	/* Try auto-writing the buffer.  If this fails but the buffer no
--	 * longer exists it's not changed, that's OK. */
--	if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
--	    break;	    /* didn't save - still changes */
-     }
- 
-+    if (i >= bufnum)
-+	goto theend;
-+
-+    ret = TRUE;
-     exiting = FALSE;
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
-     /*
-@@ -1632,8 +1688,7 @@
- 	    msg_didout = FALSE;
- 	}
- 	if (EMSG2(_("E162: No write since last change for buffer \"%s\""),
--		    buf_spname(buf) != NULL ? (char_u *)buf_spname(buf) :
--		    buf->b_fname))
-+		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname))
- 	{
- 	    save = no_wait_return;
- 	    no_wait_return = FALSE;
-@@ -1645,24 +1700,29 @@
- #ifdef FEAT_WINDOWS
-     /* Try to find a window that contains the buffer. */
-     if (buf != curbuf)
--	for (wp = firstwin; wp != NULL; wp = wp->w_next)
-+	FOR_ALL_TAB_WINDOWS(tp, wp)
- 	    if (wp->w_buffer == buf)
- 	    {
--		win_goto(wp);
-+		goto_tabpage_win(tp, wp);
- # ifdef FEAT_AUTOCMD
- 		/* Paranoia: did autocms wipe out the buffer with changes? */
- 		if (!buf_valid(buf))
--		    return TRUE;
-+		{
-+		    goto theend;
-+		}
- # endif
--		break;
-+		goto buf_found;
- 	    }
-+buf_found:
- #endif
- 
-     /* Open the changed buffer in the current window. */
-     if (buf != curbuf)
- 	set_curbuf(buf, DOBUF_GOTO);
- 
--    return TRUE;
-+theend:
-+    vim_free(bufnrs);
-+    return ret;
- }
- 
- /*
-@@ -1789,22 +1849,28 @@
- #if defined(FEAT_QUICKFIX) || defined(FEAT_SYN_HL) || defined(PROTO)
- /*
-  * Parse a list of arguments (file names), expand them and return in
-- * "fnames[fcountp]".
-+ * "fnames[fcountp]".  When "wig" is TRUE, removes files matching 'wildignore'.
-  * Return FAIL or OK.
-  */
-     int
--get_arglist_exp(str, fcountp, fnamesp)
-+get_arglist_exp(str, fcountp, fnamesp, wig)
-     char_u	*str;
-     int		*fcountp;
-     char_u	***fnamesp;
-+    int		wig;
- {
-     garray_T	ga;
-     int		i;
- 
-     if (get_arglist(&ga, str) == FAIL)
- 	return FAIL;
--    i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
--				       fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
-+    if (wig == TRUE)
-+	i = expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
-+					fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
-+    else
-+	i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
-+					fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
-+
-     ga_clear(&ga);
-     return i;
- }
-@@ -1949,7 +2015,7 @@
- }
- 
- /*
-- * Return TRUE if window "win" is editing then file at the current argument
-+ * Return TRUE if window "win" is editing the file at the current argument
-  * index.
-  */
-     static int
-@@ -2165,9 +2231,7 @@
- 	{
- 	    if (win_split(0, 0) == FAIL)
- 		return;
--# ifdef FEAT_SCROLLBIND
--	    curwin->w_p_scb = FALSE;
--# endif
-+	    RESET_BINDING(curwin);
- 	}
- 	else
- #endif
-@@ -2422,7 +2486,7 @@
- 		/* go to window "tp" */
- 		if (!valid_tabpage(tp))
- 		    break;
--		goto_tabpage_tp(tp);
-+		goto_tabpage_tp(tp, TRUE);
- 		tp = tp->tp_next;
- 	    }
- #endif
-@@ -2946,11 +3010,7 @@
-     proftime_T		    wait_start;
- #endif
- 
--#ifdef RISCOS
--    p = mch_munge_fname(fname);
--#else
-     p = expand_env_save(fname);
--#endif
-     if (p == NULL)
- 	return retval;
-     fname_exp = fix_fname(p);
-@@ -3286,7 +3346,11 @@
- 
-     for (i = 1; i <= script_items.ga_len && !got_int; ++i)
- 	if (SCRIPT_ITEM(i).sn_name != NULL)
--	    smsg((char_u *)"%3d: %s", i, SCRIPT_ITEM(i).sn_name);
-+	{
-+	    home_replace(NULL, SCRIPT_ITEM(i).sn_name,
-+						    NameBuff, MAXPATHL, TRUE);
-+	    smsg((char_u *)"%3d: %s", i, NameBuff);
-+	}
- }
- 
- # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
-@@ -3412,7 +3476,7 @@
- {
-     struct source_cookie *sp = (struct source_cookie *)cookie;
-     char_u		*line;
--    char_u		*p, *s;
-+    char_u		*p;
- 
- #ifdef FEAT_EVAL
-     /* If breakpoints have been added/deleted need to check for it. */
-@@ -3451,28 +3515,49 @@
-     {
- 	/* compensate for the one line read-ahead */
- 	--sourcing_lnum;
--	for (;;)
--	{
--	    sp->nextline = get_one_sourceline(sp);
--	    if (sp->nextline == NULL)
--		break;
--	    p = skipwhite(sp->nextline);
--	    if (*p != '\\')
--		break;
--	    s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
--	    if (s == NULL)	/* out of memory */
--		break;
--	    STRCPY(s, line);
--	    STRCAT(s, p + 1);
-+
-+	/* Get the next line and concatenate it when it starts with a
-+	 * backslash. We always need to read the next line, keep it in
-+	 * sp->nextline. */
-+	sp->nextline = get_one_sourceline(sp);
-+	if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
-+	{
-+	    garray_T    ga;
-+
-+	    ga_init2(&ga, (int)sizeof(char_u), 400);
-+	    ga_concat(&ga, line);
-+	    ga_concat(&ga, p + 1);
-+	    for (;;)
-+	    {
-+		vim_free(sp->nextline);
-+		sp->nextline = get_one_sourceline(sp);
-+		if (sp->nextline == NULL)
-+		    break;
-+		p = skipwhite(sp->nextline);
-+		if (*p != '\\')
-+		    break;
-+		/* Adjust the growsize to the current length to speed up
-+		 * concatenating many lines. */
-+		if (ga.ga_len > 400)
-+		{
-+		    if (ga.ga_len > 8000)
-+			ga.ga_growsize = 8000;
-+		    else
-+			ga.ga_growsize = ga.ga_len;
-+		}
-+		ga_concat(&ga, p + 1);
-+	    }
-+	    ga_append(&ga, NUL);
- 	    vim_free(line);
--	    line = s;
--	    vim_free(sp->nextline);
-+	    line = ga.ga_data;
- 	}
-     }
- 
- #ifdef FEAT_MBYTE
-     if (line != NULL && sp->conv.vc_type != CONV_NONE)
-     {
-+	char_u	*s;
-+
- 	/* Convert the encoding of the script line. */
- 	s = string_convert(&sp->conv, line, NULL);
- 	if (s != NULL)
-@@ -4166,11 +4251,90 @@
- 	    /* Set v:lang, v:lc_time and v:ctype to the final result. */
- 	    set_lang_var();
- # endif
-+# ifdef FEAT_TITLE
-+	    maketitle();
-+# endif
- 	}
-     }
- }
- 
- # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-+
-+static char_u	**locales = NULL;	/* Array of all available locales */
-+static int	did_init_locales = FALSE;
-+
-+static void init_locales __ARGS((void));
-+static char_u **find_locales __ARGS((void));
-+
-+/*
-+ * Lazy initialization of all available locales.
-+ */
-+    static void
-+init_locales()
-+{
-+    if (!did_init_locales)
-+    {
-+	did_init_locales = TRUE;
-+	locales = find_locales();
-+    }
-+}
-+
-+/* Return an array of strings for all available locales + NULL for the
-+ * last element.  Return NULL in case of error. */
-+    static char_u **
-+find_locales()
-+{
-+    garray_T	locales_ga;
-+    char_u	*loc;
-+
-+    /* Find all available locales by running command "locale -a".  If this
-+     * doesn't work we won't have completion. */
-+    char_u *locale_a = get_cmd_output((char_u *)"locale -a",
-+							NULL, SHELL_SILENT);
-+    if (locale_a == NULL)
-+	return NULL;
-+    ga_init2(&locales_ga, sizeof(char_u *), 20);
-+
-+    /* Transform locale_a string where each locale is separated by "\n"
-+     * into an array of locale strings. */
-+    loc = (char_u *)strtok((char *)locale_a, "\n");
-+
-+    while (loc != NULL)
-+    {
-+	if (ga_grow(&locales_ga, 1) == FAIL)
-+	    break;
-+	loc = vim_strsave(loc);
-+	if (loc == NULL)
-+	    break;
-+
-+	((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
-+	loc = (char_u *)strtok(NULL, "\n");
-+    }
-+    vim_free(locale_a);
-+    if (ga_grow(&locales_ga, 1) == FAIL)
-+    {
-+	ga_clear(&locales_ga);
-+	return NULL;
-+    }
-+    ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
-+    return (char_u **)locales_ga.ga_data;
-+}
-+
-+#  if defined(EXITFREE) || defined(PROTO)
-+    void
-+free_locales()
-+{
-+    int			i;
-+    if (locales != NULL)
-+    {
-+	for (i = 0; locales[i] != NULL; i++)
-+	    vim_free(locales[i]);
-+	vim_free(locales);
-+	locales = NULL;
-+    }
-+}
-+#  endif
-+
- /*
-  * Function given to ExpandGeneric() to obtain the possible arguments of the
-  * ":language" command.
-@@ -4186,7 +4350,25 @@
- 	return (char_u *)"ctype";
-     if (idx == 2)
- 	return (char_u *)"time";
--    return NULL;
-+
-+    init_locales();
-+    if (locales == NULL)
-+	return NULL;
-+    return locales[idx - 3];
-+}
-+
-+/*
-+ * Function given to ExpandGeneric() to obtain the available locales.
-+ */
-+    char_u *
-+get_locales(xp, idx)
-+    expand_T	*xp UNUSED;
-+    int		idx;
-+{
-+    init_locales();
-+    if (locales == NULL)
-+	return NULL;
-+    return locales[idx];
- }
- # endif
- 
-diff -Naur vim73.orig/src/ex_docmd.c vim73/src/ex_docmd.c
---- vim73.orig/src/ex_docmd.c	2010-08-07 14:59:47.000000000 +0000
-+++ vim73/src/ex_docmd.c	2012-11-01 20:35:48.000000000 +0000
-@@ -61,6 +61,7 @@
- static char_u	*do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
- static int	if_level = 0;		/* depth in :if */
- #endif
-+static void	append_command __ARGS((char_u *cmd));
- static char_u	*find_command __ARGS((exarg_T *eap, int *full));
- 
- static void	ex_abbreviate __ARGS((exarg_T *eap));
-@@ -370,11 +371,9 @@
- # define ex_endif		ex_ni
- # define ex_else		ex_ni
- # define ex_while		ex_ni
--# define ex_for			ex_ni
- # define ex_continue		ex_ni
- # define ex_break		ex_ni
- # define ex_endwhile		ex_ni
--# define ex_endfor		ex_ni
- # define ex_throw		ex_ni
- # define ex_try			ex_ni
- # define ex_catch		ex_ni
-@@ -733,7 +732,7 @@
-  * do_cmdline(): execute one Ex command line
-  *
-  * 1. Execute "cmdline" when it is not NULL.
-- *    If "cmdline" is NULL, or more lines are needed, getline() is used.
-+ *    If "cmdline" is NULL, or more lines are needed, fgetline() is used.
-  * 2. Split up in parts separated with '|'.
-  *
-  * This function can be called recursively!
-@@ -741,7 +740,7 @@
-  * flags:
-  * DOCMD_VERBOSE  - The command will be included in the error message.
-  * DOCMD_NOWAIT   - Don't call wait_return() and friends.
-- * DOCMD_REPEAT   - Repeat execution until getline() returns NULL.
-+ * DOCMD_REPEAT   - Repeat execution until fgetline() returns NULL.
-  * DOCMD_KEYTYPED - Don't reset KeyTyped.
-  * DOCMD_EXCRESET - Reset the exception environment (used for debugging).
-  * DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
-@@ -749,15 +748,15 @@
-  * return FAIL if cmdline could not be executed, OK otherwise
-  */
-     int
--do_cmdline(cmdline, getline, cookie, flags)
-+do_cmdline(cmdline, fgetline, cookie, flags)
-     char_u	*cmdline;
--    char_u	*(*getline) __ARGS((int, void *, int));
--    void	*cookie;		/* argument for getline() */
-+    char_u	*(*fgetline) __ARGS((int, void *, int));
-+    void	*cookie;		/* argument for fgetline() */
-     int		flags;
- {
-     char_u	*next_cmdline;		/* next cmd to execute */
-     char_u	*cmdline_copy = NULL;	/* copy of cmd line */
--    int		used_getline = FALSE;	/* used "getline" to obtain command */
-+    int		used_getline = FALSE;	/* used "fgetline" to obtain command */
-     static int	recursive = 0;		/* recursive depth */
-     int		msg_didout_before_start = 0;
-     int		count = 0;		/* line number count */
-@@ -775,14 +774,14 @@
-     struct msglist	**saved_msg_list = NULL;
-     struct msglist	*private_msg_list;
- 
--    /* "getline" and "cookie" passed to do_one_cmd() */
-+    /* "fgetline" and "cookie" passed to do_one_cmd() */
-     char_u	*(*cmd_getline) __ARGS((int, void *, int));
-     void	*cmd_cookie;
-     struct loop_cookie cmd_loop_cookie;
-     void	*real_cookie;
-     int		getline_is_func;
- #else
--# define cmd_getline getline
-+# define cmd_getline fgetline
- # define cmd_cookie cookie
- #endif
-     static int	call_depth = 0;		/* recursiveness */
-@@ -822,10 +821,10 @@
-     cstack.cs_lflags = 0;
-     ga_init2(&lines_ga, (int)sizeof(wcmd_T), 10);
- 
--    real_cookie = getline_cookie(getline, cookie);
-+    real_cookie = getline_cookie(fgetline, cookie);
- 
-     /* Inside a function use a higher nesting level. */
--    getline_is_func = getline_equal(getline, cookie, get_func_line);
-+    getline_is_func = getline_equal(fgetline, cookie, get_func_line);
-     if (getline_is_func && ex_nesting_level == func_level(real_cookie))
- 	++ex_nesting_level;
- 
-@@ -837,7 +836,7 @@
- 	breakpoint = func_breakpoint(real_cookie);
- 	dbg_tick = func_dbg_tick(real_cookie);
-     }
--    else if (getline_equal(getline, cookie, getsourceline))
-+    else if (getline_equal(fgetline, cookie, getsourceline))
-     {
- 	fname = sourcing_name;
- 	breakpoint = source_breakpoint(real_cookie);
-@@ -881,7 +880,8 @@
-      * KeyTyped is only set when calling vgetc().  Reset it here when not
-      * calling vgetc() (sourced command lines).
-      */
--    if (!(flags & DOCMD_KEYTYPED) && !getline_equal(getline, cookie, getexline))
-+    if (!(flags & DOCMD_KEYTYPED)
-+			       && !getline_equal(fgetline, cookie, getexline))
- 	KeyTyped = FALSE;
- 
-     /*
-@@ -894,7 +894,7 @@
-     do
-     {
- #ifdef FEAT_EVAL
--	getline_is_func = getline_equal(getline, cookie, get_func_line);
-+	getline_is_func = getline_equal(fgetline, cookie, get_func_line);
- #endif
- 
- 	/* stop skipping cmds for an error msg after all endif/while/for */
-@@ -909,7 +909,7 @@
- 
- 	/*
- 	 * 1. If repeating a line in a loop, get a line from lines_ga.
--	 * 2. If no line given: Get an allocated line with getline().
-+	 * 2. If no line given: Get an allocated line with fgetline().
- 	 * 3. If a line is given: Make a copy, so we can mess with it.
- 	 */
- 
-@@ -938,12 +938,12 @@
- 	    }
- #ifdef FEAT_PROFILE
- 	    else if (do_profiling == PROF_YES
--			     && getline_equal(getline, cookie, getsourceline))
-+			    && getline_equal(fgetline, cookie, getsourceline))
- 		script_line_end();
- #endif
- 
- 	    /* Check if a sourced file hit a ":finish" command. */
--	    if (source_finished(getline, cookie))
-+	    if (source_finished(fgetline, cookie))
- 	    {
- 		retval = FAIL;
- 		break;
-@@ -954,7 +954,7 @@
- 						   && *dbg_tick != debug_tick)
- 	    {
- 		*breakpoint = dbg_find_breakpoint(
--				getline_equal(getline, cookie, getsourceline),
-+				getline_equal(fgetline, cookie, getsourceline),
- 							fname, sourcing_lnum);
- 		*dbg_tick = debug_tick;
- 	    }
-@@ -969,7 +969,7 @@
- 		dbg_breakpoint(fname, sourcing_lnum);
- 		/* Find next breakpoint. */
- 		*breakpoint = dbg_find_breakpoint(
--				getline_equal(getline, cookie, getsourceline),
-+			       getline_equal(fgetline, cookie, getsourceline),
- 							fname, sourcing_lnum);
- 		*dbg_tick = debug_tick;
- 	    }
-@@ -978,7 +978,7 @@
- 	    {
- 		if (getline_is_func)
- 		    func_line_start(real_cookie);
--		else if (getline_equal(getline, cookie, getsourceline))
-+		else if (getline_equal(fgetline, cookie, getsourceline))
- 		    script_line_start();
- 	    }
- # endif
-@@ -987,7 +987,7 @@
- 	if (cstack.cs_looplevel > 0)
- 	{
- 	    /* Inside a while/for loop we need to store the lines and use them
--	     * again.  Pass a different "getline" function to do_one_cmd()
-+	     * again.  Pass a different "fgetline" function to do_one_cmd()
- 	     * below, so that it stores lines in or reads them from
- 	     * "lines_ga".  Makes it possible to define a function inside a
- 	     * while/for loop. */
-@@ -995,27 +995,27 @@
- 	    cmd_cookie = (void *)&cmd_loop_cookie;
- 	    cmd_loop_cookie.lines_gap = &lines_ga;
- 	    cmd_loop_cookie.current_line = current_line;
--	    cmd_loop_cookie.getline = getline;
-+	    cmd_loop_cookie.getline = fgetline;
- 	    cmd_loop_cookie.cookie = cookie;
- 	    cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
- 	}
- 	else
- 	{
--	    cmd_getline = getline;
-+	    cmd_getline = fgetline;
- 	    cmd_cookie = cookie;
- 	}
- #endif
- 
--	/* 2. If no line given, get an allocated line with getline(). */
-+	/* 2. If no line given, get an allocated line with fgetline(). */
- 	if (next_cmdline == NULL)
- 	{
- 	    /*
- 	     * Need to set msg_didout for the first line after an ":if",
- 	     * otherwise the ":if" will be overwritten.
- 	     */
--	    if (count == 1 && getline_equal(getline, cookie, getexline))
-+	    if (count == 1 && getline_equal(fgetline, cookie, getexline))
- 		msg_didout = TRUE;
--	    if (getline == NULL || (next_cmdline = getline(':', cookie,
-+	    if (fgetline == NULL || (next_cmdline = fgetline(':', cookie,
- #ifdef FEAT_EVAL
- 		    cstack.cs_idx < 0 ? 0 : (cstack.cs_idx + 1) * 2
- #else
-@@ -1142,7 +1142,7 @@
- 	     * If the command was typed, remember it for the ':' register.
- 	     * Do this AFTER executing the command to make :@: work.
- 	     */
--	    if (getline_equal(getline, cookie, getexline)
-+	    if (getline_equal(fgetline, cookie, getexline)
- 						  && new_last_cmdline != NULL)
- 	    {
- 		vim_free(last_cmdline);
-@@ -1163,7 +1163,7 @@
- #ifdef FEAT_EVAL
- 	/* reset did_emsg for a function that is not aborted by an error */
- 	if (did_emsg && !force_abort
--		&& getline_equal(getline, cookie, get_func_line)
-+		&& getline_equal(fgetline, cookie, get_func_line)
- 					      && !func_has_abort(real_cookie))
- 	    did_emsg = FALSE;
- 
-@@ -1202,7 +1202,7 @@
- 		    if (breakpoint != NULL)
- 		    {
- 			*breakpoint = dbg_find_breakpoint(
--				getline_equal(getline, cookie, getsourceline),
-+			       getline_equal(fgetline, cookie, getsourceline),
- 									fname,
- 			   ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
- 			*dbg_tick = debug_tick;
-@@ -1295,9 +1295,16 @@
- 		&& cstack.cs_trylevel == 0
- #endif
- 	    )
--	    && !(did_emsg && used_getline
--			  && (getline_equal(getline, cookie, getexmodeline)
--				|| getline_equal(getline, cookie, getexline)))
-+	    && !(did_emsg
-+#ifdef FEAT_EVAL
-+		/* Keep going when inside try/catch, so that the error can be
-+		 * dealth with, except when it is a syntax error, it may cause
-+		 * the :endtry to be missed. */
-+		&& (cstack.cs_trylevel == 0 || did_emsg_syntax)
-+#endif
-+		&& used_getline
-+			    && (getline_equal(fgetline, cookie, getexmodeline)
-+			       || getline_equal(fgetline, cookie, getexline)))
- 	    && (next_cmdline != NULL
- #ifdef FEAT_EVAL
- 			|| cstack.cs_idx >= 0
-@@ -1305,6 +1312,7 @@
- 			|| (flags & DOCMD_REPEAT)));
- 
-     vim_free(cmdline_copy);
-+    did_emsg_syntax = FALSE;
- #ifdef FEAT_EVAL
-     free_cmdlines(&lines_ga);
-     ga_clear(&lines_ga);
-@@ -1316,9 +1324,9 @@
- 	 * unclosed conditional.
- 	 */
- 	if (!got_int && !did_throw
--		&& ((getline_equal(getline, cookie, getsourceline)
--			&& !source_finished(getline, cookie))
--		    || (getline_equal(getline, cookie, get_func_line)
-+		&& ((getline_equal(fgetline, cookie, getsourceline)
-+			&& !source_finished(fgetline, cookie))
-+		    || (getline_equal(fgetline, cookie, get_func_line)
- 					    && !func_has_ended(real_cookie))))
- 	{
- 	    if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
-@@ -1354,7 +1362,7 @@
-     /* If a missing ":endtry", ":endwhile", ":endfor", or ":endif" or a memory
-      * lack was reported above and the error message is to be converted to an
-      * exception, do this now after rewinding the cstack. */
--    do_errthrow(&cstack, getline_equal(getline, cookie, get_func_line)
-+    do_errthrow(&cstack, getline_equal(fgetline, cookie, get_func_line)
- 				  ? (char_u *)"endfunction" : (char_u *)NULL);
- 
-     if (trylevel == 0)
-@@ -1449,9 +1457,9 @@
-      */
-     if (did_throw)
- 	need_rethrow = TRUE;
--    if ((getline_equal(getline, cookie, getsourceline)
-+    if ((getline_equal(fgetline, cookie, getsourceline)
- 		&& ex_nesting_level > source_level(real_cookie))
--	    || (getline_equal(getline, cookie, get_func_line)
-+	    || (getline_equal(fgetline, cookie, get_func_line)
- 		&& ex_nesting_level > func_level(real_cookie) + 1))
-     {
- 	if (!did_throw)
-@@ -1460,16 +1468,16 @@
-     else
-     {
- 	/* When leaving a function, reduce nesting level. */
--	if (getline_equal(getline, cookie, get_func_line))
-+	if (getline_equal(fgetline, cookie, get_func_line))
- 	    --ex_nesting_level;
- 	/*
- 	 * Go to debug mode when returning from a function in which we are
- 	 * single-stepping.
- 	 */
--	if ((getline_equal(getline, cookie, getsourceline)
--		    || getline_equal(getline, cookie, get_func_line))
-+	if ((getline_equal(fgetline, cookie, getsourceline)
-+		    || getline_equal(fgetline, cookie, get_func_line))
- 		&& ex_nesting_level + 1 <= debug_break_level)
--	    do_debug(getline_equal(getline, cookie, getsourceline)
-+	    do_debug(getline_equal(fgetline, cookie, getsourceline)
- 		    ? (char_u *)_("End of sourced file")
- 		    : (char_u *)_("End of function"));
-     }
-@@ -2135,11 +2143,9 @@
- 	{
- 	    STRCPY(IObuff, _("E492: Not an editor command"));
- 	    if (!sourcing)
--	    {
--		STRCAT(IObuff, ": ");
--		STRNCAT(IObuff, *cmdlinep, 40);
--	    }
-+		append_command(*cmdlinep);
- 	    errormsg = IObuff;
-+	    did_emsg_syntax = TRUE;
- 	}
- 	goto doend;
-     }
-@@ -2423,25 +2429,39 @@
-     if (       (ea.argt & REGSTR)
- 	    && *ea.arg != NUL
- #ifdef FEAT_USR_CMDS
--	    && valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
--						   && USER_CMDIDX(ea.cmdidx)))
- 	    /* Do not allow register = for user commands */
- 	    && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
--#else
--	    && valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
- #endif
- 	    && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
-     {
--	ea.regname = *ea.arg++;
--#ifdef FEAT_EVAL
--	/* for '=' register: accept the rest of the line as an expression */
--	if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
-+#ifndef FEAT_CLIPBOARD
-+	/* check these explicitly for a more specific error message */
-+	if (*ea.arg == '*' || *ea.arg == '+')
- 	{
--	    set_expr_line(vim_strsave(ea.arg));
--	    ea.arg += STRLEN(ea.arg);
-+	    errormsg = (char_u *)_(e_invalidreg);
-+	    goto doend;
- 	}
- #endif
--	ea.arg = skipwhite(ea.arg);
-+	if (
-+#ifdef FEAT_USR_CMDS
-+	    valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
-+						   && USER_CMDIDX(ea.cmdidx)))
-+#else
-+	    valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
-+#endif
-+	   )
-+	{
-+	    ea.regname = *ea.arg++;
-+#ifdef FEAT_EVAL
-+	    /* for '=' register: accept the rest of the line as an expression */
-+	    if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
-+	    {
-+		set_expr_line(vim_strsave(ea.arg));
-+		ea.arg += STRLEN(ea.arg);
-+	    }
-+#endif
-+	    ea.arg = skipwhite(ea.arg);
-+	}
-     }
- 
-     /*
-@@ -2580,6 +2600,7 @@
- 	    case CMD_unlet:
- 	    case CMD_verbose:
- 	    case CMD_vertical:
-+	    case CMD_wincmd:
- 				break;
- 
- 	    default:		goto doend;
-@@ -2692,8 +2713,7 @@
- 		STRCPY(IObuff, errormsg);
- 		errormsg = IObuff;
- 	    }
--	    STRCAT(errormsg, ": ");
--	    STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
-+	    append_command(*cmdlinep);
- 	}
- 	emsg(errormsg);
-     }
-@@ -2781,6 +2801,42 @@
- }
- 
- /*
-+ * Append "cmd" to the error message in IObuff.
-+ * Takes care of limiting the length and handling 0xa0, which would be
-+ * invisible otherwise.
-+ */
-+    static void
-+append_command(cmd)
-+    char_u *cmd;
-+{
-+    char_u *s = cmd;
-+    char_u *d;
-+
-+    STRCAT(IObuff, ": ");
-+    d = IObuff + STRLEN(IObuff);
-+    while (*s != NUL && d - IObuff < IOSIZE - 7)
-+    {
-+	if (
-+#ifdef FEAT_MBYTE
-+		enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) :
-+#endif
-+		*s == 0xa0)
-+	{
-+	    s +=
-+#ifdef FEAT_MBYTE
-+		enc_utf8 ? 2 :
-+#endif
-+		1;
-+	    STRCPY(d, "<a0>");
-+	    d += 4;
-+	}
-+	else
-+	    MB_COPY_CHAR(s, d);
-+    }
-+    *d = NUL;
-+}
-+
-+/*
-  * Find an Ex command by its name, either built-in or user.
-  * Start of the name can be found at eap->cmd.
-  * Returns pointer to char after the command name.
-@@ -2871,8 +2927,10 @@
- 	    }
- 
- #ifdef FEAT_USR_CMDS
--	/* Look for a user defined command as a last resort */
--	if (eap->cmdidx == CMD_SIZE && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
-+	/* Look for a user defined command as a last resort.  Let ":Print" be
-+	 * overruled by a user defined command. */
-+	if ((eap->cmdidx == CMD_SIZE || eap->cmdidx == CMD_Print)
-+		&& *eap->cmd >= 'A' && *eap->cmd <= 'Z')
- 	{
- 	    /* User defined commands may contain digits. */
- 	    while (ASCII_ISALNUM(*p))
-@@ -3341,12 +3399,23 @@
- 	return NULL;
- 
-     /* Find start of last argument (argument just before cursor): */
--    p = buff + STRLEN(buff);
--    while (p != arg && *p != ' ' && *p != TAB)
--	p--;
--    if (*p == ' ' || *p == TAB)
--	p++;
-+    p = buff;
-     xp->xp_pattern = p;
-+    len = (int)STRLEN(buff);
-+    while (*p && p < buff + len)
-+    {
-+	if (*p == ' ' || *p == TAB)
-+	{
-+	    /* argument starts after a space */
-+	    xp->xp_pattern = ++p;
-+	}
-+	else
-+	{
-+	    if (*p == '\\' && *(p + 1) != NUL)
-+		++p; /* skip over escaped character */
-+	    mb_ptr_adv(p);
-+	}
-+    }
- 
-     if (ea.argt & XFILE)
-     {
-@@ -3455,6 +3524,23 @@
- #endif
- 	    }
- 	}
-+#if defined(FEAT_CMDL_COMPL)
-+	/* Check for user names */
-+	if (*xp->xp_pattern == '~')
-+	{
-+	    for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p)
-+		;
-+	    /* Complete ~user only if it partially matches a user name.
-+	     * A full match ~user<Tab> will be replaced by user's home
-+	     * directory i.e. something like ~user<Tab> -> /home/user/ */
-+	    if (*p == NUL && p > xp->xp_pattern + 1
-+				       && match_user(xp->xp_pattern + 1) == 1)
-+	    {
-+		xp->xp_context = EXPAND_USER;
-+		++xp->xp_pattern;
-+	    }
-+	}
-+#endif
-     }
- 
- /*
-@@ -3465,7 +3551,8 @@
- 	case CMD_find:
- 	case CMD_sfind:
- 	case CMD_tabfind:
--	    xp->xp_context = EXPAND_FILES_IN_PATH;
-+	    if (xp->xp_context == EXPAND_FILES)
-+		xp->xp_context = EXPAND_FILES_IN_PATH;
- 	    break;
- 	case CMD_cd:
- 	case CMD_chdir:
-@@ -3771,8 +3858,17 @@
- 		    if (compl == EXPAND_MAPPINGS)
- 			return set_context_in_map_cmd(xp, (char_u *)"map",
- 					 arg, forceit, FALSE, FALSE, CMD_map);
--		    while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
--			arg = xp->xp_pattern + 1;
-+		    /* Find start of last argument. */
-+		    p = arg;
-+		    while (*p)
-+		    {
-+			if (*p == ' ')
-+			    /* argument starts after a space */
-+			    arg = p + 1;
-+			else if (*p == '\\' && *(p + 1) != NUL)
-+			    ++p; /* skip over escaped character */
-+			mb_ptr_adv(p);
-+		    }
- 		    xp->xp_pattern = arg;
- 		}
- 		xp->xp_context = compl;
-@@ -3843,13 +3939,24 @@
- #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
- 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
- 	case CMD_language:
--	    if (*skiptowhite(arg) == NUL)
-+	    p = skiptowhite(arg);
-+	    if (*p == NUL)
- 	    {
- 		xp->xp_context = EXPAND_LANGUAGE;
- 		xp->xp_pattern = arg;
- 	    }
- 	    else
--		xp->xp_context = EXPAND_NOTHING;
-+	    {
-+		if ( STRNCMP(arg, "messages", p - arg) == 0
-+		  || STRNCMP(arg, "ctype", p - arg) == 0
-+		  || STRNCMP(arg, "time", p - arg) == 0)
-+		{
-+		    xp->xp_context = EXPAND_LOCALES;
-+		    xp->xp_pattern = skipwhite(p);
-+		}
-+		else
-+		    xp->xp_context = EXPAND_NOTHING;
-+	    }
- 	    break;
- #endif
- #if defined(FEAT_PROFILE)
-@@ -3859,8 +3966,16 @@
- #endif
- 	case CMD_behave:
- 	    xp->xp_context = EXPAND_BEHAVE;
-+	    xp->xp_pattern = arg;
- 	    break;
- 
-+#if defined(FEAT_CMDHIST)
-+	case CMD_history:
-+	    xp->xp_context = EXPAND_HISTORY;
-+	    xp->xp_pattern = arg;
-+	    break;
-+#endif
-+
- #endif /* FEAT_CMDL_COMPL */
- 
- 	default:
-@@ -4520,12 +4635,14 @@
- 		else /* n == 2 */
- 		{
- 		    expand_T	xpc;
-+		    int		options = WILD_LIST_NOTFOUND|WILD_ADD_SLASH;
- 
- 		    ExpandInit(&xpc);
- 		    xpc.xp_context = EXPAND_FILES;
-+		    if (p_wic)
-+			options += WILD_ICASE;
- 		    p = ExpandOne(&xpc, eap->arg, NULL,
--					    WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
--						   WILD_EXPAND_FREE);
-+						   options, WILD_EXPAND_FREE);
- 		    if (p == NULL)
- 			return FAIL;
- 		}
-@@ -4777,12 +4894,10 @@
- #ifdef FEAT_MBYTE
-     else if (STRNCMP(arg, "enc", 3) == 0)
-     {
--	arg += 3;
--	pp = &eap->force_enc;
--    }
--    else if (STRNCMP(arg, "encoding", 8) == 0)
--    {
--	arg += 8;
-+	if (STRNCMP(arg, "encoding", 8) == 0)
-+	    arg += 8;
-+	else
-+	    arg += 3;
- 	pp = &eap->force_enc;
-     }
-     else if (STRNCMP(arg, "bad", 3) == 0)
-@@ -4894,7 +5009,7 @@
-     map_clear(eap->cmd, eap->arg, TRUE, TRUE);
- }
- 
--#ifdef FEAT_AUTOCMD
-+#if defined(FEAT_AUTOCMD) || defined(PROTO)
-     static void
- ex_autocmd(eap)
-     exarg_T	*eap;
-@@ -4921,8 +5036,12 @@
- ex_doautocmd(eap)
-     exarg_T	*eap;
- {
--    (void)do_doautocmd(eap->arg, TRUE);
--    do_modelines(0);
-+    char_u	*arg = eap->arg;
-+    int		call_do_modelines = check_nomodeline(&arg);
-+
-+    (void)do_doautocmd(arg, TRUE);
-+    if (call_do_modelines)  /* Only when there is no <nomodeline>. */
-+	do_modelines(0);
- }
- #endif
- 
-@@ -5087,12 +5206,14 @@
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
- 	    if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
- 	    {
--		char_u	buff[IOSIZE];
-+		char_u	buff[DIALOG_MSG_SIZE];
- 
- 		if (n == 1)
--		    STRCPY(buff, _("1 more file to edit.  Quit anyway?"));
-+		    vim_strncpy(buff,
-+			    (char_u *)_("1 more file to edit.  Quit anyway?"),
-+							 DIALOG_MSG_SIZE - 1);
- 		else
--		    vim_snprintf((char *)buff, IOSIZE,
-+		    vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
- 			      _("%d more files to edit.  Quit anyway?"), n);
- 		if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
- 		    return OK;
-@@ -5262,8 +5383,11 @@
- } command_complete[] =
- {
-     {EXPAND_AUGROUP, "augroup"},
-+    {EXPAND_BEHAVE, "behave"},
-     {EXPAND_BUFFERS, "buffer"},
-+    {EXPAND_COLORS, "color"},
-     {EXPAND_COMMANDS, "command"},
-+    {EXPAND_COMPILER, "compiler"},
- #if defined(FEAT_CSCOPE)
-     {EXPAND_CSCOPE, "cscope"},
- #endif
-@@ -5276,10 +5400,18 @@
-     {EXPAND_EVENTS, "event"},
-     {EXPAND_EXPRESSION, "expression"},
-     {EXPAND_FILES, "file"},
-+    {EXPAND_FILES_IN_PATH, "file_in_path"},
-     {EXPAND_FILETYPE, "filetype"},
-     {EXPAND_FUNCTIONS, "function"},
-     {EXPAND_HELP, "help"},
-     {EXPAND_HIGHLIGHT, "highlight"},
-+#if defined(FEAT_CMDHIST)
-+    {EXPAND_HISTORY, "history"},
-+#endif
-+#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
-+	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
-+    {EXPAND_LOCALES, "locale"},
-+#endif
-     {EXPAND_MAPPINGS, "mapping"},
-     {EXPAND_MENUS, "menu"},
-     {EXPAND_OWNSYNTAX, "syntax"},
-@@ -5290,6 +5422,7 @@
- #endif
-     {EXPAND_TAGS, "tag"},
-     {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
-+    {EXPAND_USER, "user"},
-     {EXPAND_USER_VARS, "var"},
-     {0, NULL}
- };
-@@ -5587,6 +5720,7 @@
-     int	    compl = EXPAND_NOTHING;
-     char_u  *compl_arg = NULL;
-     int	    has_attr = (eap->arg[0] == '-');
-+    int	    name_len;
- 
-     p = eap->arg;
- 
-@@ -5612,6 +5746,7 @@
- 	return;
-     }
-     end = p;
-+    name_len = (int)(end - name);
- 
-     /* If there is nothing after the name, and no attributes were specified,
-      * we are listing commands
-@@ -5626,6 +5761,13 @@
- 	EMSG(_("E183: User defined commands must start with an uppercase letter"));
- 	return;
-     }
-+    else if ((name_len == 1 && *name == 'X')
-+	  || (name_len <= 4
-+		  && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
-+    {
-+	EMSG(_("E841: Reserved name, cannot be used for user defined command"));
-+	return;
-+    }
-     else
- 	uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
- 								eap->forceit);
-@@ -5750,8 +5892,14 @@
- 	}
- 	else
- 	{
-+#ifdef FEAT_MBYTE
-+	    int charlen = (*mb_ptr2len)(p);
-+	    len += charlen;
-+	    p += charlen;
-+#else
- 	    ++len;
- 	    ++p;
-+#endif
- 	}
-     }
- 
-@@ -5794,7 +5942,7 @@
- 	}
- 	else
- 	{
--	    *q++ = *p++;
-+	    MB_COPY_CHAR(p, q);
- 	}
-     }
-     *q++ = '"';
-@@ -5888,7 +6036,14 @@
- 	    result = STRLEN(eap->arg) + 2;
- 	    for (p = eap->arg; *p; ++p)
- 	    {
--		if (*p == '\\' || *p == '"')
-+#ifdef  FEAT_MBYTE
-+		if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
-+		    /* DBCS can contain \ in a trail byte, skip the
-+		     * double-byte character. */
-+		    ++p;
-+		else
-+#endif
-+		     if (*p == '\\' || *p == '"')
- 		    ++result;
- 	    }
- 
-@@ -5897,7 +6052,14 @@
- 		*buf++ = '"';
- 		for (p = eap->arg; *p; ++p)
- 		{
--		    if (*p == '\\' || *p == '"')
-+#ifdef  FEAT_MBYTE
-+		    if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
-+			/* DBCS can contain \ in a trail byte, copy the
-+			 * double-byte character to avoid escaping. */
-+			*buf++ = *p++;
-+		    else
-+#endif
-+			 if (*p == '\\' || *p == '"')
- 			*buf++ = '\\';
- 		    *buf++ = *p;
- 		}
-@@ -6039,15 +6201,17 @@
- 		end = vim_strchr(start + 1, '>');
- 	    if (buf != NULL)
- 	    {
--		ksp = vim_strchr(p, K_SPECIAL);
--		if (ksp != NULL && (start == NULL || ksp < start || end == NULL)
-+		for (ksp = p; *ksp != NUL && *ksp != K_SPECIAL; ++ksp)
-+		    ;
-+		if (*ksp == K_SPECIAL
-+			&& (start == NULL || ksp < start || end == NULL)
- 			&& ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
- # ifdef FEAT_GUI
- 			    || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
- # endif
- 			    ))
- 		{
--		    /* K_SPECIAL han been put in the buffer as K_SPECIAL
-+		    /* K_SPECIAL has been put in the buffer as K_SPECIAL
- 		     * KS_SPECIAL KE_FILLER, like for mappings, but
- 		     * do_cmdline() doesn't handle that, so convert it back.
- 		     * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
-@@ -6302,7 +6466,7 @@
- #endif
-     }
-     else if (load_colors(eap->arg) == FAIL)
--	EMSG2(_("E185: Cannot find color scheme %s"), eap->arg);
-+	EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg);
- }
- 
-     static void
-@@ -6347,7 +6511,10 @@
- 	return;
-     }
- #ifdef FEAT_AUTOCMD
--    if (curbuf_locked())
-+    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
-+    /* Refuse to quick when locked or when the buffer in the last window is
-+     * being closed (can only happen in autocommands). */
-+    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
- 	return;
- #endif
- 
-@@ -6439,7 +6606,7 @@
- {
- # ifdef FEAT_CMDWIN
-     if (cmdwin_type != 0)
--	cmdwin_result = K_IGNORE;
-+	cmdwin_result = Ctrl_C;
-     else
- # endif
- 	if (!text_locked()
-@@ -6897,9 +7064,7 @@
- # ifdef FEAT_WINDOWS
- 	if (win_split(0, 0) == FAIL)
- 	    return;
--#  ifdef FEAT_SCROLLBIND
--	curwin->w_p_scb = FALSE;
--#  endif
-+	RESET_BINDING(curwin);
- 
- 	/* When splitting the window, create a new alist.  Otherwise the
- 	 * existing one is overwritten. */
-@@ -7026,7 +7191,7 @@
- 	old_arg_count = GARGCOUNT;
- 	if (expand_wildcards(old_arg_count, old_arg_files,
- 		    &new_arg_file_count, &new_arg_files,
--		    EW_FILE|EW_NOTFOUND|EW_ADDSLASH) == OK
-+		    EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
- 		&& new_arg_file_count > 0)
- 	{
- 	    alist_set(&global_alist, new_arg_file_count, new_arg_files,
-@@ -7299,7 +7464,9 @@
- 		|| cmdmod.browse
- #  endif
- 	   )
--	    curwin->w_p_scb = FALSE;
-+	{
-+	    RESET_BINDING(curwin);
-+	}
- 	else
- 	    do_check_scrollbind(FALSE);
- # endif
-@@ -7364,7 +7531,42 @@
- ex_tabmove(eap)
-     exarg_T	*eap;
- {
--    tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2);
-+    int tab_number = 9999;
-+
-+    if (eap->arg && *eap->arg != NUL)
-+    {
-+	char_u *p = eap->arg;
-+	int    relative = 0; /* argument +N/-N means: move N places to the
-+			      * right/left relative to the current position. */
-+
-+	if (*eap->arg == '-')
-+	{
-+	    relative = -1;
-+	    p = eap->arg + 1;
-+	}
-+	else if (*eap->arg == '+')
-+	{
-+	    relative = 1;
-+	    p = eap->arg + 1;
-+	}
-+	else
-+	    p = eap->arg;
-+
-+	if (p == skipdigits(p))
-+	{
-+	    /* No numbers as argument. */
-+	    eap->errmsg = e_invarg;
-+	    return;
-+	}
-+
-+	tab_number = getdigits(&p);
-+	if (relative != 0)
-+	    tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
-+    }
-+    else if (eap->addr_count != 0)
-+	tab_number = eap->line2;
-+
-+    tabpage_move(tab_number);
- }
- 
- /*
-@@ -7400,7 +7602,7 @@
- 	    msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
- 	    msg_putchar(' ');
- 	    if (buf_spname(wp->w_buffer) != NULL)
--		STRCPY(IObuff, buf_spname(wp->w_buffer));
-+		vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1);
- 	    else
- 		home_replace(wp->w_buffer, wp->w_buffer->b_fname,
- 							IObuff, IOSIZE, TRUE);
-@@ -8122,6 +8324,12 @@
-     {
- 	ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
- 	ui_breakcheck();
-+#ifdef FEAT_NETBEANS_INTG
-+	/* Process the netbeans messages that may have been received in the
-+	 * call to ui_breakcheck() when the GUI is in use. This may occur when
-+	 * running a test case. */
-+	netbeans_parse_messages();
-+#endif
-     }
- }
- 
-@@ -8193,7 +8401,7 @@
-     p = skipwhite(p);
-     if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
- 	EMSG(_(e_invarg));
--    else
-+    else if (!eap->skip)
-     {
- 	/* Pass flags on for ":vertical wincmd ]". */
- 	postponed_split_flags = cmdmod.split;
-@@ -8428,7 +8636,7 @@
- 	}
- 	++eap->line2;
-     }
--    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE);
-+    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
-     beginline(BL_WHITE | BL_FIX);
-     ex_may_print(eap);
- }
-@@ -8907,35 +9115,42 @@
- 		failed = TRUE;
- 	    if (eap->cmdidx == CMD_mksession)
- 	    {
--		char_u dirnow[MAXPATHL];	/* current directory */
-+		char_u *dirnow;	 /* current directory */
- 
--		/*
--		 * Change to session file's dir.
--		 */
--		if (mch_dirname(dirnow, MAXPATHL) == FAIL
--					    || mch_chdir((char *)dirnow) != 0)
--		    *dirnow = NUL;
--		if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
--		{
--		    if (vim_chdirfile(fname) == OK)
--			shorten_fnames(TRUE);
--		}
--		else if (*dirnow != NUL
--			&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
-+		dirnow = alloc(MAXPATHL);
-+		if (dirnow == NULL)
-+		    failed = TRUE;
-+		else
- 		{
--		    if (mch_chdir((char *)globaldir) == 0)
--			shorten_fnames(TRUE);
--		}
-+		    /*
-+		     * Change to session file's dir.
-+		     */
-+		    if (mch_dirname(dirnow, MAXPATHL) == FAIL
-+					    || mch_chdir((char *)dirnow) != 0)
-+			*dirnow = NUL;
-+		    if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
-+		    {
-+			if (vim_chdirfile(fname) == OK)
-+			    shorten_fnames(TRUE);
-+		    }
-+		    else if (*dirnow != NUL
-+			   && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
-+		    {
-+			if (mch_chdir((char *)globaldir) == 0)
-+			    shorten_fnames(TRUE);
-+		    }
- 
--		failed |= (makeopens(fd, dirnow) == FAIL);
-+		    failed |= (makeopens(fd, dirnow) == FAIL);
- 
--		/* restore original dir */
--		if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
-+		    /* restore original dir */
-+		    if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
- 			|| ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
--		{
--		    if (mch_chdir((char *)dirnow) != 0)
--			EMSG(_(e_prev_dir));
--		    shorten_fnames(TRUE);
-+		    {
-+			if (mch_chdir((char *)dirnow) != 0)
-+			    EMSG(_(e_prev_dir));
-+			shorten_fnames(TRUE);
-+		    }
-+		    vim_free(dirnow);
- 		}
- 	    }
- 	    else
-@@ -8966,10 +9181,15 @@
- 	else if (eap->cmdidx == CMD_mksession)
- 	{
- 	    /* successful session write - set this_session var */
--	    char_u	tbuf[MAXPATHL];
-+	    char_u	*tbuf;
- 
--	    if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
--		set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
-+	    tbuf = alloc(MAXPATHL);
-+	    if (tbuf != NULL)
-+	    {
-+		if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
-+		    set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
-+		vim_free(tbuf);
-+	    }
- 	}
- #endif
- #ifdef MKSESSION_NL
-@@ -9295,7 +9515,7 @@
- 								  && !got_int)
-     {
- 	update_topline_cursor();
--	normal_cmd(&oa, FALSE);	/* execute a Normal mode cmd */
-+	normal_cmd(&oa, TRUE);	/* execute a Normal mode cmd */
-     }
- }
- #endif
-@@ -9393,7 +9613,7 @@
- ex_ptag(eap)
-     exarg_T	*eap;
- {
--    g_do_tagpreview = p_pvh;
-+    g_do_tagpreview = p_pvh;  /* will be reset to 0 in ex_tag_cmd() */
-     ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
- }
- 
-@@ -9525,17 +9745,23 @@
- #define SPEC_CFILE  4
- 		    "<sfile>",		/* ":so" file name */
- #define SPEC_SFILE  5
-+		    "<slnum>",		/* ":so" file line number */
-+#define SPEC_SLNUM  6
- #ifdef FEAT_AUTOCMD
- 		    "<afile>",		/* autocommand file name */
--# define SPEC_AFILE 6
-+# define SPEC_AFILE 7
- 		    "<abuf>",		/* autocommand buffer number */
--# define SPEC_ABUF  7
-+# define SPEC_ABUF  8
- 		    "<amatch>",		/* autocommand match name */
--# define SPEC_AMATCH 8
-+# define SPEC_AMATCH 9
- #endif
- #ifdef FEAT_CLIENTSERVER
- 		    "<client>"
--# define SPEC_CLIENT 9
-+# ifdef FEAT_AUTOCMD
-+#  define SPEC_CLIENT 10
-+# else
-+#  define SPEC_CLIENT 7
-+# endif
- #endif
-     };
- 
-@@ -9560,6 +9786,7 @@
-  *	  '<cWORD>' to WORD under the cursor
-  *	  '<cfile>' to path name under the cursor
-  *	  '<sfile>' to sourced file name
-+ *	  '<slnum>' to sourced file line number
-  *	  '<afile>' to file name for autocommand
-  *	  '<abuf>'  to buffer number for autocommand
-  *	  '<amatch>' to matching name for autocommand
-@@ -9591,10 +9818,7 @@
- #ifdef FEAT_MODIFY_FNAME
-     int		skip_mod = FALSE;
- #endif
--
--#if defined(FEAT_AUTOCMD) || defined(FEAT_CLIENTSERVER)
-     char_u	strbuf[30];
--#endif
- 
-     *errormsg = NULL;
-     if (escaped != NULL)
-@@ -9653,14 +9877,7 @@
- 		    valid = 0;	    /* Must have ":p:h" to be valid */
- 		}
- 		else
--#ifdef RISCOS
--		    /* Always use the full path for RISC OS if possible. */
--		    result = curbuf->b_ffname;
--		    if (result == NULL)
--			result = curbuf->b_fname;
--#else
- 		    result = curbuf->b_fname;
--#endif
- 		break;
- 
- 	case SPEC_HASH:		/* '#' or "#99": alternate file */
-@@ -9783,6 +10000,15 @@
- 		    return NULL;
- 		}
- 		break;
-+	case SPEC_SLNUM:	/* line in file for ":so" command */
-+		if (sourcing_name == NULL || sourcing_lnum == 0)
-+		{
-+		    *errormsg = (char_u *)_("E842: no line number to use for \"<slnum>\"");
-+		    return NULL;
-+		}
-+		sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
-+		result = strbuf;
-+		break;
- #if defined(FEAT_CLIENTSERVER)
- 	case SPEC_CLIENT:	/* Source of last submitted input */
- 		sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
-@@ -9796,11 +10022,7 @@
- 	if (src[*usedlen] == '<')	/* remove the file name extension */
- 	{
- 	    ++*usedlen;
--#ifdef RISCOS
--	    if ((s = vim_strrchr(result, '/')) != NULL && s >= gettail(result))
--#else
- 	    if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
--#endif
- 		resultlen = (int)(s - result);
- 	}
- #ifdef FEAT_MODIFY_FNAME
-@@ -10645,7 +10867,7 @@
-     unsigned	*flagp;
- {
-     int		i;
--    char_u	buf[MAXPATHL];
-+    char_u	*buf = NULL;
-     char_u	*s;
- 
-     if (gap->ga_len == 0)
-@@ -10660,11 +10882,19 @@
- 	{
- 	    if (fullname)
- 	    {
--		(void)vim_FullName(s, buf, MAXPATHL, FALSE);
--		s = buf;
-+		buf = alloc(MAXPATHL);
-+		if (buf != NULL)
-+		{
-+		    (void)vim_FullName(s, buf, MAXPATHL, FALSE);
-+		    s = buf;
-+		}
- 	    }
- 	    if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
-+	    {
-+		vim_free(buf);
- 		return FAIL;
-+	    }
-+	    vim_free(buf);
- 	}
-     }
-     return put_eol(fd);
-@@ -10707,7 +10937,7 @@
-  * Write a file name to the session file.
-  * Takes care of the "slash" option in 'sessionoptions' and escapes special
-  * characters.
-- * Returns FAIL if writing fails.
-+ * Returns FAIL if writing fails or out of memory.
-  */
-     static int
- ses_put_fname(fd, name, flagp)
-@@ -10716,49 +10946,32 @@
-     unsigned	*flagp;
- {
-     char_u	*sname;
-+    char_u	*p;
-     int		retval = OK;
--    int		c;
- 
-     sname = home_replace_save(NULL, name);
--    if (sname != NULL)
--	name = sname;
--    while (*name != NUL)
--    {
--#ifdef FEAT_MBYTE
--	{
--	    int l;
-+    if (sname == NULL)
-+	return FAIL;
- 
--	    if (has_mbyte && (l = (*mb_ptr2len)(name)) > 1)
--	    {
--		/* copy a multibyte char */
--		while (--l >= 0)
--		{
--		    if (putc(*name, fd) != *name)
--			retval = FAIL;
--		    ++name;
--		}
--		continue;
--	    }
--	}
--#endif
--	c = *name++;
--	if (c == '\\' && (*flagp & SSOP_SLASH))
--	    /* change a backslash to a forward slash */
--	    c = '/';
--	else if ((vim_strchr(escape_chars, c) != NULL
--#ifdef BACKSLASH_IN_FILENAME
--		    && c != '\\'
--#endif
--		 ) || c == '#' || c == '%')
--	{
--	    /* escape a special character with a backslash */
--	    if (putc('\\', fd) != '\\')
--		retval = FAIL;
--	}
--	if (putc(c, fd) != c)
--	    retval = FAIL;
-+    if (*flagp & SSOP_SLASH)
-+    {
-+	/* change all backslashes to forward slashes */
-+	for (p = sname; *p != NUL; mb_ptr_adv(p))
-+	    if (*p == '\\')
-+		*p = '/';
-     }
-+
-+    /* escapse special characters */
-+    p = vim_strsave_fnameescape(sname, FALSE);
-     vim_free(sname);
-+    if (p == NULL)
-+	return FAIL;
-+
-+    /* write the result */
-+    if (fputs((char *)p, fd) < 0)
-+	retval = FAIL;
-+
-+    vim_free(p);
-     return retval;
- }
- 
-@@ -10826,8 +11039,7 @@
- 	    else if (vim_ispathsep(*p))
- 	    {
- 		*s++ = '=';
--#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(RISCOS) \
--	|| defined(VMS)
-+#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
- 		if (*p == ':')
- 		    *s++ = '-';
- 		else
-@@ -10910,7 +11122,7 @@
- 
- #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
- /*
-- * Make a dialog message in "buff[IOSIZE]".
-+ * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
-  * "format" must contain "%s".
-  */
-     void
-@@ -10921,7 +11133,7 @@
- {
-     if (fname == NULL)
- 	fname = (char_u *)_("Untitled");
--    vim_snprintf((char *)buff, IOSIZE, format, fname);
-+    vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
- }
- #endif
- 
-diff -Naur vim73.orig/src/ex_getln.c vim73/src/ex_getln.c
---- vim73.orig/src/ex_getln.c	2010-08-14 15:25:45.000000000 +0000
-+++ vim73/src/ex_getln.c	2012-11-01 20:35:48.000000000 +0000
-@@ -25,7 +25,7 @@
-     int		cmdlen;		/* number of chars in command line */
-     int		cmdpos;		/* current cursor position */
-     int		cmdspos;	/* cursor column on screen */
--    int		cmdfirstc;	/* ':', '/', '?', '=' or NUL */
-+    int		cmdfirstc;	/* ':', '/', '?', '=', '>' or NUL */
-     int		cmdindent;	/* number of spaces before cmdline */
-     char_u	*cmdprompt;	/* message in front of cmdline */
-     int		cmdattr;	/* attributes for prompt */
-@@ -67,7 +67,7 @@
- 
- static int	hist_char2type __ARGS((int c));
- 
--static int	in_history __ARGS((int, char_u *, int));
-+static int	in_history __ARGS((int, char_u *, int, int));
- # ifdef FEAT_EVAL
- static int	calc_hist_idx __ARGS((int histype, int num));
- # endif
-@@ -110,7 +110,10 @@
- static int	expand_showtail __ARGS((expand_T *xp));
- #ifdef FEAT_CMDL_COMPL
- static int	expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
--static int	ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
-+static int	ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
-+# ifdef FEAT_CMDHIST
-+static char_u	*get_history_arg __ARGS((expand_T *xp, int idx));
-+# endif
- # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
- static int	ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
- static int	ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
-@@ -121,6 +124,14 @@
- static int	ex_window __ARGS((void));
- #endif
- 
-+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-+static int
-+#ifdef __BORLANDC__
-+_RTLENTRYF
-+#endif
-+sort_func_compare __ARGS((const void *s1, const void *s2));
-+#endif
-+
- /*
-  * getcmdline() - accept a command line starting with firstc.
-  *
-@@ -637,7 +648,11 @@
- 		}
- 		else if (ccline.cmdpos > i)
- 		    cmdline_del(i);
-+
-+		/* Now complete in the new directory. Set KeyTyped in case the
-+		 * Up key came from a mapping. */
- 		c = p_wc;
-+		KeyTyped = TRUE;
- 	    }
- 	}
- 
-@@ -652,9 +667,10 @@
- 	    c = plain_vgetc();
- 	    --no_mapping;
- 	    --allow_keys;
--	    /* CTRL-\ e doesn't work when obtaining an expression. */
--	    if (c != Ctrl_N && c != Ctrl_G
--				     && (c != 'e' || ccline.cmdfirstc == '='))
-+	    /* CTRL-\ e doesn't work when obtaining an expression, unless it
-+	     * is in a mapping. */
-+	    if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
-+				    || (ccline.cmdfirstc == '=' && KeyTyped)))
- 	    {
- 		vungetc(c);
- 		c = Ctrl_BSL;
-@@ -688,28 +704,35 @@
- 		    p = get_expr_line();
- 		    --textlock;
- 		    restore_cmdline(&save_ccline);
--		    len = (int)STRLEN(p);
- 
--		    if (p != NULL && realloc_cmdbuff(len + 1) == OK)
-+		    if (p != NULL)
- 		    {
--			ccline.cmdlen = len;
--			STRCPY(ccline.cmdbuff, p);
--			vim_free(p);
--
--			/* Restore the cursor or use the position set with
--			 * set_cmdline_pos(). */
--			if (new_cmdpos > ccline.cmdlen)
--			    ccline.cmdpos = ccline.cmdlen;
--			else
--			    ccline.cmdpos = new_cmdpos;
--
--			KeyTyped = FALSE;	/* Don't do p_wc completion. */
--			redrawcmd();
--			goto cmdline_changed;
-+			len = (int)STRLEN(p);
-+			if (realloc_cmdbuff(len + 1) == OK)
-+			{
-+			    ccline.cmdlen = len;
-+			    STRCPY(ccline.cmdbuff, p);
-+			    vim_free(p);
-+
-+			    /* Restore the cursor or use the position set with
-+			     * set_cmdline_pos(). */
-+			    if (new_cmdpos > ccline.cmdlen)
-+				ccline.cmdpos = ccline.cmdlen;
-+			    else
-+				ccline.cmdpos = new_cmdpos;
-+
-+			    KeyTyped = FALSE;	/* Don't do p_wc completion. */
-+			    redrawcmd();
-+			    goto cmdline_changed;
-+			}
- 		    }
- 		}
- 		beep_flush();
--		c = ESC;
-+		got_int = FALSE;	/* don't abandon the command line */
-+		did_emsg = FALSE;
-+		emsg_on_display = FALSE;
-+		redrawcmd();
-+		goto cmdline_not_changed;
- 	    }
- #endif
- 	    else
-@@ -1833,8 +1856,11 @@
- # endif
- 		)
- 	    /* Always redraw the whole command line to fix shaping and
--	     * right-left typing.  Not efficient, but it works. */
--	    redrawcmd();
-+	     * right-left typing.  Not efficient, but it works.
-+	     * Do it only when there are no characters left to read
-+	     * to avoid useless intermediate redraws. */
-+	    if (vpeekc() == NUL)
-+		redrawcmd();
- #endif
-     }
- 
-@@ -1962,8 +1988,12 @@
- # endif
-     s = getcmdline(firstc, 1L, 0);
-     restore_cmdline(&save_ccline);
--    /* Restore msg_col, the prompt from input() may have changed it. */
--    msg_col = msg_col_save;
-+    /* Restore msg_col, the prompt from input() may have changed it.
-+     * But only if called recursively and the commandline is therefore being
-+     * restored to an old one; if not, the input() prompt stays on the screen,
-+     * so we need its modified msg_col left intact. */
-+    if (ccline.cmdbuff != NULL)
-+	msg_col = msg_col_save;
- 
-     return s;
- }
-@@ -2239,10 +2269,12 @@
- 
- 	    if (c1 == Ctrl_T)
- 	    {
-+		long        sw = get_sw_value();
-+
- 		p = (char_u *)line_ga.ga_data;
- 		p[line_ga.ga_len] = NUL;
- 		indent = get_indent_str(p, 8);
--		indent += curbuf->b_p_sw - indent % curbuf->b_p_sw;
-+		indent += sw - indent % sw;
- add_indent:
- 		while (get_indent_str(p, 8) < indent)
- 		{
-@@ -2294,7 +2326,7 @@
- 		    p[line_ga.ga_len] = NUL;
- 		    indent = get_indent_str(p, 8);
- 		    --indent;
--		    indent -= indent % curbuf->b_p_sw;
-+		    indent -= indent % get_sw_value();
- 		}
- 		while (get_indent_str(p, 8) > indent)
- 		{
-@@ -2342,15 +2374,31 @@
- 	windgoto(msg_row, msg_col);
- 	pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
- 
--	/* we are done when a NL is entered, but not when it comes after a
--	 * backslash */
--	if (line_ga.ga_len > 0 && pend[-1] == '\n'
--		&& (line_ga.ga_len <= 1 || pend[-2] != '\\'))
--	{
--	    --line_ga.ga_len;
--	    --pend;
--	    *pend = NUL;
--	    break;
-+	/* We are done when a NL is entered, but not when it comes after an
-+	 * odd number of backslashes, that results in a NUL. */
-+	if (line_ga.ga_len > 0 && pend[-1] == '\n')
-+	{
-+	    int bcount = 0;
-+
-+	    while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
-+		++bcount;
-+
-+	    if (bcount > 0)
-+	    {
-+		/* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
-+		 * "\NL", etc. */
-+		line_ga.ga_len -= (bcount + 1) / 2;
-+		pend -= (bcount + 1) / 2;
-+		pend[-1] = '\n';
-+	    }
-+
-+	    if ((bcount & 1) == 0)
-+	    {
-+		--line_ga.ga_len;
-+		--pend;
-+		*pend = NUL;
-+		break;
-+	    }
- 	}
-     }
- 
-@@ -2719,6 +2767,11 @@
-     msg_no_more = TRUE;
-     if (ccline.cmdlen == ccline.cmdpos)
- 	msg_putchar(' ');
-+#ifdef FEAT_MBYTE
-+    else if (has_mbyte)
-+	draw_cmdline(ccline.cmdpos,
-+			       (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
-+#endif
-     else
- 	draw_cmdline(ccline.cmdpos, 1);
-     msg_no_more = FALSE;
-@@ -2843,6 +2896,7 @@
- 	{
- 	    msg_no_more = TRUE;
- 	    i = cmdline_row;
-+	    cursorcmd();
- 	    draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
- 	    /* Avoid clearing the rest of the line too often. */
- 	    if (cmdline_row != i || ccline.overstrike)
-@@ -3023,7 +3077,7 @@
- 	    int	    len;
- 
- 	    /* Locate start of last word in the cmd buffer. */
--	    for (w = ccline.cmdbuff + ccline.cmdlen; w > ccline.cmdbuff; )
-+	    for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
- 	    {
- #ifdef FEAT_MBYTE
- 		if (has_mbyte)
-@@ -3041,7 +3095,7 @@
- 		    --w;
- 		}
- 	    }
--	    len = (int)((ccline.cmdbuff + ccline.cmdlen) - w);
-+	    len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
- 	    if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
- 		p += len;
- 	}
-@@ -3082,7 +3136,8 @@
- 	    else
- #endif
- 		c = *s++;
--	    if (cv == Ctrl_V || c == ESC || c == Ctrl_C || c == CAR || c == NL
-+	    if (cv == Ctrl_V || c == ESC || c == Ctrl_C
-+		    || c == CAR || c == NL || c == Ctrl_L
- #ifdef UNIX
- 		    || c == intr_char
- #endif
-@@ -3258,6 +3313,24 @@
-     return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
- }
- 
-+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-+    static int
-+#ifdef __BORLANDC__
-+_RTLENTRYF
-+#endif
-+sort_func_compare(s1, s2)
-+    const void *s1;
-+    const void *s2;
-+{
-+    char_u *p1 = *(char_u **)s1;
-+    char_u *p2 = *(char_u **)s2;
-+
-+    if (*p1 != '<' && *p2 == '<') return -1;
-+    if (*p1 == '<' && *p2 != '<') return 1;
-+    return STRCMP(p1, p2);
-+}
-+#endif
-+
- /*
-  * Return FAIL if this is not an appropriate context in which to do
-  * completion of anything, return OK if it is (even if there are no matches).
-@@ -3316,10 +3389,14 @@
- 	    p2 = NULL;
- 	else
- 	{
-+	    int use_options = options |
-+		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE;
-+
-+	    if (p_wic)
-+		use_options += WILD_ICASE;
- 	    p2 = ExpandOne(xp, p1,
- 			 vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),
--		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE
--							      |options, type);
-+							   use_options, type);
- 	    vim_free(p1);
- 	    /* longest match: make sure it is not shorter, happens with :help */
- 	    if (p2 != NULL && type == WILD_LONGEST)
-@@ -3396,6 +3473,7 @@
-  * mode = WILD_PREV:	    use previous match in multiple match, wrap to first
-  * mode = WILD_ALL:	    return all matches concatenated
-  * mode = WILD_LONGEST:	    return longest matched part
-+ * mode = WILD_ALL_KEEP:    get all matches, keep matches
-  *
-  * options = WILD_LIST_NOTFOUND:    list entries without a match
-  * options = WILD_HOME_REPLACE:	    do home_replace() for buffer names
-@@ -3405,6 +3483,7 @@
-  * options = WILD_KEEP_ALL:	    don't remove 'wildignore' entries
-  * options = WILD_SILENT:	    don't print warning messages
-  * options = WILD_ESCAPE:	    put backslash before special chars
-+ * options = WILD_ICASE:	    ignore case for files
-  *
-  * The variables xp->xp_context and xp->xp_backslash must have been set!
-  */
-@@ -3518,7 +3597,8 @@
- 	    /*
- 	     * Check for matching suffixes in file names.
- 	     */
--	    if (mode != WILD_ALL && mode != WILD_LONGEST)
-+	    if (mode != WILD_ALL && mode != WILD_ALL_KEEP
-+						      && mode != WILD_LONGEST)
- 	    {
- 		if (xp->xp_numfiles)
- 		    non_suf_match = xp->xp_numfiles;
-@@ -3674,6 +3754,7 @@
-     if (options & WILD_ESCAPE)
-     {
- 	if (xp->xp_context == EXPAND_FILES
-+		|| xp->xp_context == EXPAND_FILES_IN_PATH
- 		|| xp->xp_context == EXPAND_SHELLCMD
- 		|| xp->xp_context == EXPAND_BUFFERS
- 		|| xp->xp_context == EXPAND_DIRECTORIES)
-@@ -4256,6 +4337,7 @@
-  *  EXPAND_EXPRESSION	    Complete internal or user defined function/variable
-  *			    names in expressions, eg :while s^I
-  *  EXPAND_ENV_VARS	    Complete environment variable names
-+ *  EXPAND_USER		    Complete user names
-  */
-     static void
- set_expand_context(xp)
-@@ -4338,6 +4420,7 @@
-     char_u	***matches;	/* return: array of pointers to matches */
- {
-     char_u	*file_str = NULL;
-+    int		options = WILD_ADD_SLASH|WILD_SILENT;
- 
-     if (xp->xp_context == EXPAND_UNSUCCESSFUL)
-     {
-@@ -4356,9 +4439,11 @@
-     if (file_str == NULL)
- 	return EXPAND_UNSUCCESSFUL;
- 
-+    if (p_wic)
-+	options += WILD_ICASE;
-+
-     /* find all files that match the description */
--    if (ExpandFromContext(xp, file_str, matchcount, matches,
--					  WILD_ADD_SLASH|WILD_SILENT) == FAIL)
-+    if (ExpandFromContext(xp, file_str, matchcount, matches, options) == FAIL)
-     {
- 	*matchcount = 0;
- 	*matches = NULL;
-@@ -4410,7 +4495,7 @@
-     char_u	*pat;
-     int		*num_file;
-     char_u	***file;
--    int		options;
-+    int		options;  /* EW_ flags */
- {
- #ifdef FEAT_CMDL_COMPL
-     regmatch_T	regmatch;
-@@ -4464,6 +4549,9 @@
- 	    flags |= (EW_FILE | EW_PATH);
- 	else
- 	    flags = (flags | EW_DIR) & ~EW_FILE;
-+	if (options & WILD_ICASE)
-+	    flags |= EW_ICASE;
-+
- 	/* Expand wildcards, supporting %:h and the like. */
- 	ret = expand_wildcards_eval(&pat, num_file, file, flags);
- 	if (free_pat)
-@@ -4501,13 +4589,25 @@
- 	    || xp->xp_context == EXPAND_TAGS_LISTFILES)
- 	return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
-     if (xp->xp_context == EXPAND_COLORS)
--	return ExpandRTDir(pat, num_file, file, "colors");
-+    {
-+	char *directories[] = {"colors", NULL};
-+	return ExpandRTDir(pat, num_file, file, directories);
-+    }
-     if (xp->xp_context == EXPAND_COMPILER)
--	return ExpandRTDir(pat, num_file, file, "compiler");
-+    {
-+	char *directories[] = {"compiler", NULL};
-+	return ExpandRTDir(pat, num_file, file, directories);
-+    }
-     if (xp->xp_context == EXPAND_OWNSYNTAX)
--	return ExpandRTDir(pat, num_file, file, "syntax");
-+    {
-+	char *directories[] = {"syntax", NULL};
-+	return ExpandRTDir(pat, num_file, file, directories);
-+    }
-     if (xp->xp_context == EXPAND_FILETYPE)
--	return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}");
-+    {
-+	char *directories[] = {"syntax", "indent", "ftplugin", NULL};
-+	return ExpandRTDir(pat, num_file, file, directories);
-+    }
- # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
-     if (xp->xp_context == EXPAND_USER_LIST)
- 	return ExpandUserList(xp, num_file, file);
-@@ -4536,48 +4636,54 @@
- 	    int		context;
- 	    char_u	*((*func)__ARGS((expand_T *, int)));
- 	    int		ic;
-+	    int		escaped;
- 	} tab[] =
- 	{
--	    {EXPAND_COMMANDS, get_command_name, FALSE},
--	    {EXPAND_BEHAVE, get_behave_arg, TRUE},
-+	    {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
-+	    {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
-+#ifdef FEAT_CMDHIST
-+	    {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
-+#endif
- #ifdef FEAT_USR_CMDS
--	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
--	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE},
--	    {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE},
--	    {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE},
-+	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
-+	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
-+	    {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
-+	    {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
- #endif
- #ifdef FEAT_EVAL
--	    {EXPAND_USER_VARS, get_user_var_name, FALSE},
--	    {EXPAND_FUNCTIONS, get_function_name, FALSE},
--	    {EXPAND_USER_FUNC, get_user_func_name, FALSE},
--	    {EXPAND_EXPRESSION, get_expr_name, FALSE},
-+	    {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
-+	    {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
-+	    {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
-+	    {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
- #endif
- #ifdef FEAT_MENU
--	    {EXPAND_MENUS, get_menu_name, FALSE},
--	    {EXPAND_MENUNAMES, get_menu_names, FALSE},
-+	    {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
-+	    {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
- #endif
- #ifdef FEAT_SYN_HL
--	    {EXPAND_SYNTAX, get_syntax_name, TRUE},
-+	    {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
- #endif
--	    {EXPAND_HIGHLIGHT, get_highlight_name, TRUE},
-+	    {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
- #ifdef FEAT_AUTOCMD
--	    {EXPAND_EVENTS, get_event_name, TRUE},
--	    {EXPAND_AUGROUP, get_augroup_name, TRUE},
-+	    {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
-+	    {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
- #endif
- #ifdef FEAT_CSCOPE
--	    {EXPAND_CSCOPE, get_cscope_name, TRUE},
-+	    {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
- #endif
- #ifdef FEAT_SIGNS
--	    {EXPAND_SIGN, get_sign_name, TRUE},
-+	    {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
- #endif
- #ifdef FEAT_PROFILE
--	    {EXPAND_PROFILE, get_profile_name, TRUE},
-+	    {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
- #endif
- #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
- 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
--	    {EXPAND_LANGUAGE, get_lang_arg, TRUE},
-+	    {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
-+	    {EXPAND_LOCALES, get_locales, TRUE, FALSE},
- #endif
--	    {EXPAND_ENV_VARS, get_env_name, TRUE},
-+	    {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
-+	    {EXPAND_USER, get_users, TRUE, FALSE},
- 	};
- 	int	i;
- 
-@@ -4591,7 +4697,8 @@
- 	    {
- 		if (tab[i].ic)
- 		    regmatch.rm_ic = TRUE;
--		ret = ExpandGeneric(xp, &regmatch, num_file, file, tab[i].func);
-+		ret = ExpandGeneric(xp, &regmatch, num_file, file,
-+						tab[i].func, tab[i].escaped);
- 		break;
- 	    }
-     }
-@@ -4613,13 +4720,14 @@
-  * Returns OK when no problems encountered, FAIL for error (out of memory).
-  */
-     int
--ExpandGeneric(xp, regmatch, num_file, file, func)
-+ExpandGeneric(xp, regmatch, num_file, file, func, escaped)
-     expand_T	*xp;
-     regmatch_T	*regmatch;
-     int		*num_file;
-     char_u	***file;
-     char_u	*((*func)__ARGS((expand_T *, int)));
- 					  /* returns a string from the list */
-+    int		escaped;
- {
-     int		i;
-     int		count = 0;
-@@ -4644,7 +4752,10 @@
- 	    {
- 		if (round)
- 		{
--		    str = vim_strsave_escaped(str, (char_u *)" \t\\.");
-+		    if (escaped)
-+			str = vim_strsave_escaped(str, (char_u *)" \t\\.");
-+		    else
-+			str = vim_strsave(str);
- 		    (*file)[count] = str;
- #ifdef FEAT_MENU
- 		    if (func == get_menu_names && str != NULL)
-@@ -4676,7 +4787,16 @@
- 
-     /* Sort the results.  Keep menu's in the specified order. */
-     if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
--	sort_strings(*file, *num_file);
-+    {
-+	if (xp->xp_context == EXPAND_EXPRESSION
-+		|| xp->xp_context == EXPAND_FUNCTIONS
-+		|| xp->xp_context == EXPAND_USER_FUNC)
-+	    /* <SNR> functions should be sorted to the end. */
-+	    qsort((void *)*file, (size_t)*num_file, sizeof(char_u *),
-+							   sort_func_compare);
-+	else
-+	    sort_strings(*file, *num_file);
-+    }
- 
- #ifdef FEAT_CMDL_COMPL
-     /* Reset the variables used for special highlight names expansion, so that
-@@ -4728,7 +4848,11 @@
- 			    || (pat[1] == '.' && vim_ispathsep(pat[2])))))
- 	path = (char_u *)".";
-     else
-+    {
- 	path = vim_getenv((char_u *)"PATH", &mustfree);
-+	if (path == NULL)
-+	    path = (char_u *)"";
-+    }
- 
-     /*
-      * Go over all directories in $PATH.  Expand matches in that directory and
-@@ -4949,57 +5073,68 @@
- /*
-  * Expand color scheme, compiler or filetype names:
-  * 'runtimepath'/{dirnames}/{pat}.vim
-- * dirnames may contain one directory (ex: "colorscheme") or can be a glob
-- * expression matching multiple directories (ex: "{syntax,ftplugin,indent}").
-+ * "dirnames" is an array with one or more directory names.
-  */
-     static int
- ExpandRTDir(pat, num_file, file, dirnames)
-     char_u	*pat;
-     int		*num_file;
-     char_u	***file;
--    char	*dirnames;
-+    char	*dirnames[];
- {
--    char_u	*all;
-+    char_u	*matches;
-     char_u	*s;
-     char_u	*e;
-     garray_T	ga;
-+    int		i;
-+    int		pat_len;
- 
-     *num_file = 0;
-     *file = NULL;
--    s = alloc((unsigned)(STRLEN(pat) + STRLEN(dirnames) + 7));
--    if (s == NULL)
--	return FAIL;
--    sprintf((char *)s, "%s/%s*.vim", dirnames, pat);
--    all = globpath(p_rtp, s, 0);
--    vim_free(s);
--    if (all == NULL)
--	return FAIL;
-+    pat_len = (int)STRLEN(pat);
-+    ga_init2(&ga, (int)sizeof(char *), 10);
- 
--    ga_init2(&ga, (int)sizeof(char *), 3);
--    for (s = all; *s != NUL; s = e)
-+    for (i = 0; dirnames[i] != NULL; ++i)
-     {
--	e = vim_strchr(s, '\n');
--	if (e == NULL)
--	    e = s + STRLEN(s);
--	if (ga_grow(&ga, 1) == FAIL)
--	    break;
--	if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
-+	s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
-+	if (s == NULL)
- 	{
--	    for (s = e - 4; s > all; mb_ptr_back(all, s))
--		if (*s == '\n' || vim_ispathsep(*s))
--		    break;
--	    ++s;
--	    ((char_u **)ga.ga_data)[ga.ga_len] =
-+	    ga_clear_strings(&ga);
-+	    return FAIL;
-+	}
-+	sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
-+	matches = globpath(p_rtp, s, 0);
-+	vim_free(s);
-+	if (matches == NULL)
-+	    continue;
-+
-+	for (s = matches; *s != NUL; s = e)
-+	{
-+	    e = vim_strchr(s, '\n');
-+	    if (e == NULL)
-+		e = s + STRLEN(s);
-+	    if (ga_grow(&ga, 1) == FAIL)
-+		break;
-+	    if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
-+	    {
-+		for (s = e - 4; s > matches; mb_ptr_back(matches, s))
-+		    if (*s == '\n' || vim_ispathsep(*s))
-+			break;
-+		++s;
-+		((char_u **)ga.ga_data)[ga.ga_len] =
- 					    vim_strnsave(s, (int)(e - s - 4));
--	    ++ga.ga_len;
-+		++ga.ga_len;
-+	    }
-+	    if (*e != NUL)
-+		++e;
- 	}
--	if (*e != NUL)
--	    ++e;
-+	vim_free(matches);
-     }
--    vim_free(all);
-+    if (ga.ga_len == 0)
-+	return FAIL;
- 
-     /* Sort and remove duplicates which can happen when specifying multiple
--     * directories in dirnames such as "{syntax,ftplugin,indent}". */
-+     * directories in dirnames. */
-     remove_duplicates(&ga);
- 
-     *file = ga.ga_data;
-@@ -5127,6 +5262,34 @@
-     NULL
- };
- 
-+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-+/*
-+ * Function given to ExpandGeneric() to obtain the possible first
-+ * arguments of the ":history command.
-+ */
-+    static char_u *
-+get_history_arg(xp, idx)
-+    expand_T	*xp UNUSED;
-+    int		idx;
-+{
-+    static char_u compl[2] = { NUL, NUL };
-+    char *short_names = ":=@>?/";
-+    int short_names_count = (int)STRLEN(short_names);
-+    int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
-+
-+    if (idx < short_names_count)
-+    {
-+	compl[0] = (char_u)short_names[idx];
-+	return compl;
-+    }
-+    if (idx < short_names_count + history_name_count)
-+	return (char_u *)history_names[idx - short_names_count];
-+    if (idx == short_names_count + history_name_count)
-+	return (char_u *)"all";
-+    return NULL;
-+}
-+#endif
-+
- /*
-  * init_history() - Initialize the command line history.
-  * Also used to re-allocate the history when the size changes.
-@@ -5220,13 +5383,15 @@
-  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
-  */
-     static int
--in_history(type, str, move_to_front)
-+in_history(type, str, move_to_front, sep)
-     int	    type;
-     char_u  *str;
-     int	    move_to_front;	/* Move the entry to the front if it exists */
-+    int	    sep;
- {
-     int	    i;
-     int	    last_i = -1;
-+    char_u  *p;
- 
-     if (hisidx[type] < 0)
- 	return FALSE;
-@@ -5235,7 +5400,12 @@
-     {
- 	if (history[type][i].hisstr == NULL)
- 	    return FALSE;
--	if (STRCMP(str, history[type][i].hisstr) == 0)
-+
-+	/* For search history, check that the separator character matches as
-+	 * well. */
-+	p = history[type][i].hisstr;
-+	if (STRCMP(str, p) == 0
-+		&& (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
- 	{
- 	    if (!move_to_front)
- 		return TRUE;
-@@ -5329,7 +5499,7 @@
- 	}
- 	last_maptick = -1;
-     }
--    if (!in_history(histype, new_entry, TRUE))
-+    if (!in_history(histype, new_entry, TRUE, sep))
-     {
- 	if (++hisidx[histype] == hislen)
- 	    hisidx[histype] = 0;
-@@ -5803,7 +5973,7 @@
- 							      hist[i].hisnum);
- 		    if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
- 			trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
--							   (int)Columns - 10);
-+			     (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
- 		    else
- 			STRCAT(IObuff, hist[i].hisstr);
- 		    msg_outtrans(IObuff);
-@@ -5907,8 +6077,10 @@
- 	val = viminfo_readstring(virp, 1, TRUE);
- 	if (val != NULL && *val != NUL)
- 	{
-+	    int sep = (*val == ' ' ? NUL : *val);
-+
- 	    if (!in_history(type, val + (type == HIST_SEARCH),
--							viminfo_add_at_front))
-+						   viminfo_add_at_front, sep))
- 	    {
- 		/* Need to re-allocate to append the separator byte. */
- 		len = STRLEN(val);
-@@ -5920,7 +6092,7 @@
- 			/* Search entry: Move the separator from the first
- 			 * column to after the NUL. */
- 			mch_memmove(p, val + 1, (size_t)len);
--			p[len] = (*val == ' ' ? NUL : *val);
-+			p[len] = sep;
- 		    }
- 		    else
- 		    {
-@@ -6147,9 +6319,7 @@
-     curwin->w_p_rl = cmdmsg_rl;
-     cmdmsg_rl = FALSE;
- # endif
--# ifdef FEAT_SCROLLBIND
--    curwin->w_p_scb = FALSE;
--# endif
-+    RESET_BINDING(curwin);
- 
- # ifdef FEAT_AUTOCMD
-     /* Do execute autocommands for setting the filetype (load syntax). */
-@@ -6287,6 +6457,12 @@
- 	    ccline.cmdbuff = vim_strsave((char_u *)"qa");
- 	    cmdwin_result = CAR;
- 	}
-+	else if (cmdwin_result == Ctrl_C)
-+	{
-+	    /* :q or :close, don't execute any command
-+	     * and don't modify the cmd window. */
-+	    ccline.cmdbuff = NULL;
-+	}
- 	else
- 	    ccline.cmdbuff = vim_strsave(ml_get_curline());
- 	if (ccline.cmdbuff == NULL)
-@@ -6317,7 +6493,7 @@
- 	/* win_close() may have already wiped the buffer when 'bh' is
- 	 * set to 'wipe' */
- 	if (buf_valid(bp))
--	    close_buffer(NULL, bp, DOBUF_WIPE);
-+	    close_buffer(NULL, bp, DOBUF_WIPE, FALSE);
- 
- 	/* Restore window sizes. */
- 	win_size_restore(&winsizes);
-diff -Naur vim73.orig/src/farsi.c vim73/src/farsi.c
---- vim73.orig/src/farsi.c	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/farsi.c	2012-11-01 20:35:47.000000000 +0000
-@@ -1813,7 +1813,7 @@
- 		ptr[i] = toF_leading(ptr[i]);
- 		++i;
- 
--		while(canF_Rjoin(ptr[i]) && (i < llen))
-+		while (canF_Rjoin(ptr[i]) && i < llen)
- 		{
- 		    ptr[i] = toF_Rjoin(ptr[i]);
- 		    if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
-diff -Naur vim73.orig/src/feature.h vim73/src/feature.h
---- vim73.orig/src/feature.h	2010-07-27 19:45:42.000000000 +0000
-+++ vim73/src/feature.h	2012-11-01 20:35:48.000000000 +0000
-@@ -506,15 +506,6 @@
- #endif
- 
- /*
-- * +osfiletype		filetype checking in autocommand patterns.
-- *			Only on systems that support filetypes (RISC OS).
-- */
--#if 0
--# define FEAT_OSFILETYPE
--# define DFLT_OFT "Text"
--#endif
--
--/*
-  * +viminfo		reading/writing the viminfo file. Takes about 8Kbyte
-  *			of code.
-  * VIMINFO_FILE		Location of user .viminfo file (should start with $).
-@@ -1047,8 +1038,10 @@
-  * +mouse_gpm		Unix only: Include code for Linux console mouse
-  *			handling.
-  * +mouse_pterm		PTerm mouse support for QNX
-+ * +mouse_sgr		Unix only: Include code for for SGR-styled mouse.
-  * +mouse_sysmouse	Unix only: Include code for FreeBSD and DragonFly
-  *			console mouse handling.
-+ * +mouse_urxvt		Unix only: Include code for for urxvt mosue handling.
-  * +mouse		Any mouse support (any of the above enabled).
-  */
- /* OS/2 and Amiga console have no mouse support */
-@@ -1062,6 +1055,12 @@
- # ifdef FEAT_BIG
- #  define FEAT_MOUSE_DEC
- # endif
-+# ifdef FEAT_BIG
-+#  define FEAT_MOUSE_URXVT
-+# endif
-+# ifdef FEAT_BIG
-+#  define FEAT_MOUSE_SGR
-+# endif
- # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
- #  define DOS_MOUSE
- # endif
-@@ -1077,13 +1076,29 @@
- #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
- # define FEAT_SYSMOUSE
- #endif
-+
-+/* urxvt is a small variation of mouse_xterm, and shares its code */
-+#if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
-+# define FEAT_MOUSE_XTERM
-+#endif
-+
-+/* sgr is a small variation of mouse_xterm, and shares its code */
-+#if defined(FEAT_MOUSE_SGR) && !defined(FEAT_MOUSE_XTERM)
-+# define FEAT_MOUSE_XTERM
-+#endif
-+
- /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
- #if !defined(FEAT_MOUSE_TTY) \
- 	&& (defined(FEAT_MOUSE_XTERM) \
--	    || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
--	    || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
--	    || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM) \
--	    || defined(FEAT_SYSMOUSE))
-+	    || defined(FEAT_MOUSE_NET) \
-+	    || defined(FEAT_MOUSE_DEC) \
-+	    || defined(DOS_MOUSE) \
-+	    || defined(FEAT_MOUSE_GPM) \
-+	    || defined(FEAT_MOUSE_JSB) \
-+	    || defined(FEAT_MOUSE_PTERM) \
-+	    || defined(FEAT_SYSMOUSE) \
-+	    || defined(FEAT_MOUSE_URXVT) \
-+	    || defined(FEAT_MOUSE_SGR))
- # define FEAT_MOUSE_TTY		/* include non-GUI mouse support */
- #endif
- #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
-@@ -1312,3 +1327,11 @@
- #ifdef FEAT_NORMAL
- # define FEAT_PERSISTENT_UNDO
- #endif
-+
-+/*
-+ * +filterpipe
-+ */
-+#if (defined(UNIX) && !defined(USE_SYSTEM)) \
-+	    || (defined(WIN3264) && defined(FEAT_GUI_W32))
-+# define FEAT_FILTERPIPE
-+#endif
-diff -Naur vim73.orig/src/fileio.c vim73/src/fileio.c
---- vim73.orig/src/fileio.c	2010-08-14 12:20:54.000000000 +0000
-+++ vim73/src/fileio.c	2012-11-01 20:35:48.000000000 +0000
-@@ -11,14 +11,6 @@
-  * fileio.c: read from and write to a file
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for lseek(), must be before vim.h */
--#endif
--
--#if defined __EMX__
--# include "vimio.h"	/* for mktemp(), CJW 1997-12-03 */
--#endif
--
- #include "vim.h"
- 
- #if defined(__TANDEM) || defined(__MINT__)
-@@ -258,6 +250,7 @@
- #ifdef FEAT_CRYPT
-     char_u	*cryptkey = NULL;
-     int		did_ask_for_key = FALSE;
-+    int		crypt_method_used;
- #endif
- #ifdef FEAT_PERSISTENT_UNDO
-     context_sha256_T sha_ctx;
-@@ -325,7 +318,7 @@
-     int		using_b_fname;
- #endif
- 
--    write_no_eol_lnum = 0;	/* in case it was set by the previous read */
-+    curbuf->b_no_eol_lnum = 0;	/* in case it was set by the previous read */
- 
-     /*
-      * If there is no file name yet, use the one for the read file.
-@@ -511,18 +504,11 @@
- 
-     if (newfile && !read_stdin && !read_buffer)
-     {
--	/* Remember time of file.
--	 * For RISCOS, also remember the filetype.
--	 */
-+	/* Remember time of file. */
- 	if (mch_stat((char *)fname, &st) >= 0)
- 	{
- 	    buf_store_time(curbuf, &st, fname);
- 	    curbuf->b_mtime_read = curbuf->b_mtime;
--
--#if defined(RISCOS) && defined(FEAT_OSFILETYPE)
--	    /* Read the filetype into the buffer local filetype option. */
--	    mch_read_filetype(fname);
--#endif
- #ifdef UNIX
- 	    /*
- 	     * Use the protection bits of the original file for the swap file.
-@@ -564,7 +550,6 @@
- 
- /*
-  * for UNIX: check readonly with perm and mch_access()
-- * for RISCOS: same as Unix, otherwise file gets re-datestamped!
-  * for MSDOS and Amiga: check readonly by trying to open the file for writing
-  */
-     file_readonly = FALSE;
-@@ -918,7 +903,7 @@
- 	    {
- 		/* Read the first line (and a bit more).  Immediately rewind to
- 		 * the start of the file.  If the read() fails "len" is -1. */
--		len = vim_read(fd, firstline, 80);
-+		len = read_eintr(fd, firstline, 80);
- 		lseek(fd, (off_t)0L, SEEK_SET);
- 		for (p = firstline; p < firstline + len; ++p)
- 		    if (*p >= 0x80)
-@@ -1373,7 +1358,7 @@
- 		    /*
- 		     * Read bytes from the file.
- 		     */
--		    size = vim_read(fd, ptr, size);
-+		    size = read_eintr(fd, ptr, size);
- 		}
- 
- 		if (size <= 0)
-@@ -2297,6 +2282,7 @@
- 	save_file_ff(curbuf);		/* remember the current file format */
- 
- #ifdef FEAT_CRYPT
-+    crypt_method_used = use_crypt_method;
-     if (cryptkey != NULL)
-     {
- 	crypt_pop_state();
-@@ -2491,7 +2477,10 @@
- #ifdef FEAT_CRYPT
- 	    if (cryptkey != NULL)
- 	    {
--		STRCAT(IObuff, _("[crypted]"));
-+		if (crypt_method_used == 1)
-+		    STRCAT(IObuff, _("[blowfish]"));
-+		else
-+		    STRCAT(IObuff, _("[crypted]"));
- 		c = TRUE;
- 	    }
- #endif
-@@ -2607,10 +2596,11 @@
- 
-     /*
-      * Trick: We remember if the last line of the read didn't have
--     * an eol for when writing it again.  This is required for
-+     * an eol even when 'binary' is off, for when writing it again with
-+     * 'binary' on.  This is required for
-      * ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
-      */
--    write_no_eol_lnum = read_no_eol_lnum;
-+    curbuf->b_no_eol_lnum = read_no_eol_lnum;
- 
-     /* When reloading a buffer put the cursor at the first line that is
-      * different. */
-@@ -2658,10 +2648,10 @@
- 							    FALSE, NULL, eap);
- 	if (msg_scrolled == n)
- 	    msg_scroll = m;
--#ifdef FEAT_EVAL
-+# ifdef FEAT_EVAL
- 	if (aborting())	    /* autocmds may abort script processing */
- 	    return FAIL;
--#endif
-+# endif
-     }
- #endif
- 
-@@ -3202,6 +3192,9 @@
-     int		    write_undo_file = FALSE;
-     context_sha256_T sha_ctx;
- #endif
-+#ifdef FEAT_CRYPT
-+    int		    crypt_method_used;
-+#endif
- 
-     if (fname == NULL || *fname == NUL)	/* safety check */
- 	return FAIL;
-@@ -3345,8 +3338,22 @@
- 	}
- 	else if (reset_changed && whole)
- 	{
--	    if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
--					 sfname, sfname, FALSE, curbuf, eap)))
-+	    int was_changed = curbufIsChanged();
-+
-+	    did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
-+					  sfname, sfname, FALSE, curbuf, eap);
-+	    if (did_cmd)
-+	    {
-+		if (was_changed && !curbufIsChanged())
-+		{
-+		    /* Written everything correctly and BufWriteCmd has reset
-+		     * 'modified': Correct the undo information so that an
-+		     * undo now sets 'modified'. */
-+		    u_unchanged(curbuf);
-+		    u_update_save_nr(curbuf);
-+		}
-+	    }
-+	    else
- 	    {
- #ifdef FEAT_QUICKFIX
- 		if (overwriting && bt_nofile(curbuf))
-@@ -3799,13 +3806,7 @@
- 
- 	/* make sure we have a valid backup extension to use */
- 	if (*p_bex == NUL)
--	{
--#ifdef RISCOS
--	    backup_ext = (char_u *)"/bak";
--#else
- 	    backup_ext = (char_u *)".bak";
--#endif
--	}
- 	else
- 	    backup_ext = p_bex;
- 
-@@ -4000,7 +4001,7 @@
- #ifdef HAS_BW_FLAGS
- 			write_info.bw_flags = FIO_NOCONVERT;
- #endif
--			while ((write_info.bw_len = vim_read(fd, copybuf,
-+			while ((write_info.bw_len = read_eintr(fd, copybuf,
- 								BUFSIZE)) > 0)
- 			{
- 			    if (buf_write_bytes(&write_info) == FAIL)
-@@ -4568,7 +4569,7 @@
- 	if (end == 0
- 		|| (lnum == end
- 		    && write_bin
--		    && (lnum == write_no_eol_lnum
-+		    && (lnum == buf->b_no_eol_lnum
- 			|| (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))))
- 	{
- 	    ++lnum;			/* written the line, count it */
-@@ -4719,11 +4720,6 @@
- #endif
-     if (perm >= 0)		/* set perm. of new file same as old file */
- 	(void)mch_setperm(wfname, perm);
--#ifdef RISCOS
--    if (!append && !filtering)
--	/* Set the filetype after writing the file. */
--	mch_set_filetype(wfname, buf->b_p_oft);
--#endif
- #ifdef HAVE_ACL
-     /* Probably need to set the ACL before changing the user (can't set the
-      * ACL on a file the user doesn't own). */
-@@ -4731,6 +4727,7 @@
- 	mch_set_acl(wfname, acl);
- #endif
- #ifdef FEAT_CRYPT
-+    crypt_method_used = use_crypt_method;
-     if (wb_flags & FIO_ENCRYPTED)
- 	crypt_pop_state();
- #endif
-@@ -4813,7 +4810,7 @@
- #ifdef HAS_BW_FLAGS
- 			write_info.bw_flags = FIO_NOCONVERT;
- #endif
--			while ((write_info.bw_len = vim_read(fd, smallbuf,
-+			while ((write_info.bw_len = read_eintr(fd, smallbuf,
- 						      SMBUFSIZE)) > 0)
- 			    if (buf_write_bytes(&write_info) == FAIL)
- 				break;
-@@ -4885,7 +4882,10 @@
- #ifdef FEAT_CRYPT
- 	if (wb_flags & FIO_ENCRYPTED)
- 	{
--	    STRCAT(IObuff, _("[crypted]"));
-+	    if (crypt_method_used == 1)
-+		STRCAT(IObuff, _("[blowfish]"));
-+	    else
-+		STRCAT(IObuff, _("[crypted]"));
- 	    c = TRUE;
- 	}
- #endif
-@@ -5094,7 +5094,7 @@
-     {
- 	aco_save_T	aco;
- 
--	write_no_eol_lnum = 0;	/* in case it was set by the previous read */
-+	curbuf->b_no_eol_lnum = 0;  /* in case it was set by the previous read */
- 
- 	/*
- 	 * Apply POST autocommands.
-@@ -5330,7 +5330,7 @@
- 
- /*
-  * Call write() to write a number of bytes to the file.
-- * Also handles encryption and 'encoding' conversion.
-+ * Handles encryption and 'encoding' conversion.
-  *
-  * Return FAIL for failure, OK otherwise.
-  */
-@@ -5702,16 +5702,8 @@
- 	crypt_encode(buf, len, buf);
- #endif
- 
--    /* Repeat the write(), it may be interrupted by a signal. */
--    while (len > 0)
--    {
--	wlen = vim_write(ip->bw_fd, buf, len);
--	if (wlen <= 0)		    /* error! */
--	    return FAIL;
--	len -= wlen;
--	buf += wlen;
--    }
--    return OK;
-+    wlen = write_eintr(ip->bw_fd, buf, len);
-+    return (wlen < len) ? FAIL : OK;
- }
- 
- #ifdef FEAT_MBYTE
-@@ -6024,15 +6016,19 @@
- shorten_fname1(full_path)
-     char_u	*full_path;
- {
--    char_u	dirname[MAXPATHL];
-+    char_u	*dirname;
-     char_u	*p = full_path;
- 
-+    dirname = alloc(MAXPATHL);
-+    if (dirname == NULL)
-+	return full_path;
-     if (mch_dirname(dirname, MAXPATHL) == OK)
-     {
- 	p = shorten_fname(full_path, dirname);
- 	if (p == NULL || *p == NUL)
- 	    p = full_path;
-     }
-+    vim_free(dirname);
-     return p;
- }
- #endif
-@@ -6259,19 +6255,17 @@
-      */
-     for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
-     {
--#ifndef RISCOS
- 	if (*ext == '.'
--# ifdef USE_LONG_FNAME
-+#ifdef USE_LONG_FNAME
- 		    && (!USE_LONG_FNAME || shortname)
--# else
--#  ifndef SHORT_FNAME
-+#else
-+# ifndef SHORT_FNAME
- 		    && shortname
--#  endif
- # endif
-+#endif
- 								)
- 	    if (*ptr == '.')	/* replace '.' by '_' */
- 		*ptr = '_';
--#endif
- 	if (vim_ispathsep(*ptr))
- 	{
- 	    ++ptr;
-@@ -6306,23 +6300,14 @@
- 	if (fname == NULL || *fname == NUL
- 				   || vim_ispathsep(fname[STRLEN(fname) - 1]))
- 	{
--#ifdef RISCOS
--	    if (*ext == '/')
--#else
- 	    if (*ext == '.')
--#endif
- 		*s++ = '_';
- 	}
- 	/*
- 	 * If the extension starts with '.', truncate the base name at 8
- 	 * characters
- 	 */
--#ifdef RISCOS
--	/* We normally use '/', but swap files are '_' */
--	else if (*ext == '/' || *ext == '_')
--#else
- 	else if (*ext == '.')
--#endif
- 	{
- 	    if ((size_t)(s - ptr) > (size_t)8)
- 	    {
-@@ -6334,13 +6319,8 @@
- 	 * If the extension doesn't start with '.', and the file name
- 	 * doesn't have an extension yet, append a '.'
- 	 */
--#ifdef RISCOS
--	else if ((e = vim_strchr(ptr, '/')) == NULL)
--	    *s++ = '/';
--#else
- 	else if ((e = vim_strchr(ptr, '.')) == NULL)
- 	    *s++ = '.';
--#endif
- 	/*
- 	 * If the extension doesn't start with '.', and there already is an
- 	 * extension, it may need to be truncated
-@@ -6368,23 +6348,14 @@
-     /*
-      * Prepend the dot.
-      */
--    if (prepend_dot && !shortname && *(e = gettail(retval)) !=
--#ifdef RISCOS
--	    '/'
--#else
--	    '.'
--#endif
-+    if (prepend_dot && !shortname && *(e = gettail(retval)) != '.'
- #ifdef USE_LONG_FNAME
- 	    && USE_LONG_FNAME
- #endif
- 				)
-     {
- 	STRMOVE(e + 1, e);
--#ifdef RISCOS
--	*e = '/';
--#else
- 	*e = '.';
--#endif
-     }
- #endif
- 
-@@ -6552,6 +6523,21 @@
- 	    use_tmp_file = TRUE;
-     }
- #endif
-+#ifdef WIN3264
-+    {
-+	BY_HANDLE_FILE_INFORMATION info1, info2;
-+
-+	/* It's possible for the source and destination to be the same file.
-+	 * In that case go through a temp file name.  This makes rename("foo",
-+	 * "./foo") a no-op (in a complicated way). */
-+	if (win32_fileinfo(from, &info1) == FILEINFO_OK
-+		&& win32_fileinfo(to, &info2) == FILEINFO_OK
-+		&& info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
-+		&& info1.nFileIndexHigh == info2.nFileIndexHigh
-+		&& info1.nFileIndexLow == info2.nFileIndexLow)
-+	    use_tmp_file = TRUE;
-+    }
-+#endif
- 
- #if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
-     if (use_tmp_file)
-@@ -6662,8 +6648,8 @@
- 	return -1;
-     }
- 
--    while ((n = vim_read(fd_in, buffer, BUFSIZE)) > 0)
--	if (vim_write(fd_out, buffer, n) != n)
-+    while ((n = read_eintr(fd_in, buffer, BUFSIZE)) > 0)
-+	if (write_eintr(fd_out, buffer, n) != n)
- 	{
- 	    errmsg = _("E208: Error writing to \"%s\"");
- 	    break;
-@@ -7024,7 +7010,7 @@
- 		    STRCAT(tbuf, mesg2);
- 		}
- 		if (do_dialog(VIM_WARNING, (char_u *)_("Warning"), tbuf,
--				(char_u *)_("&OK\n&Load File"), 1, NULL) == 2)
-+			  (char_u *)_("&OK\n&Load File"), 1, NULL, TRUE) == 2)
- 		    reload = TRUE;
- 	    }
- 	    else
-@@ -7074,8 +7060,23 @@
-     }
- 
-     if (reload)
-+    {
- 	/* Reload the buffer. */
- 	buf_reload(buf, orig_mode);
-+#ifdef FEAT_PERSISTENT_UNDO
-+	if (buf->b_p_udf && buf->b_ffname != NULL)
-+	{
-+	    char_u	    hash[UNDO_HASH_SIZE];
-+	    buf_T	    *save_curbuf = curbuf;
-+
-+	    /* Any existing undo file is unusable, write it now. */
-+	    curbuf = buf;
-+	    u_compute_hash(hash);
-+	    u_write_undo(NULL, FALSE, buf, hash);
-+	    curbuf = save_curbuf;
-+	}
-+#endif
-+    }
- 
- #ifdef FEAT_AUTOCMD
-     /* Trigger FileChangedShell when the file was changed in any way. */
-@@ -7272,8 +7273,8 @@
- write_lnum_adjust(offset)
-     linenr_T	offset;
- {
--    if (write_no_eol_lnum != 0)		/* only if there is a missing eol */
--	write_no_eol_lnum += offset;
-+    if (curbuf->b_no_eol_lnum != 0)	/* only if there is a missing eol */
-+	curbuf->b_no_eol_lnum += offset;
- }
- 
- #if defined(TEMPDIRNAMES) || defined(PROTO)
-@@ -7475,7 +7476,10 @@
- 
-     STRCPY(itmp, "");
-     if (GetTempPath(_MAX_PATH, szTempFile) == 0)
--	szTempFile[0] = NUL;	/* GetTempPath() failed, use current dir */
-+    {
-+	szTempFile[0] = '.';	/* GetTempPath() failed, use current dir */
-+	szTempFile[1] = NUL;
-+    }
-     strcpy(buf4, "VIM");
-     buf4[2] = extra_char;   /* make it "VIa", "VIb", etc. */
-     if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
-@@ -7496,8 +7500,11 @@
- # else /* WIN3264 */
- 
- #  ifdef USE_TMPNAM
-+    char_u	*p;
-+
-     /* tmpnam() will make its own name */
--    if (*tmpnam((char *)itmp) == NUL)
-+    p = tmpnam((char *)itmp);
-+    if (p == NULL || *p == NUL)
- 	return NULL;
- #  else
-     char_u	*p;
-@@ -7651,6 +7658,7 @@
-     {"CmdwinEnter",	EVENT_CMDWINENTER},
-     {"CmdwinLeave",	EVENT_CMDWINLEAVE},
-     {"ColorScheme",	EVENT_COLORSCHEME},
-+    {"CompleteDone",	EVENT_COMPLETEDONE},
-     {"CursorHold",	EVENT_CURSORHOLD},
-     {"CursorHoldI",	EVENT_CURSORHOLDI},
-     {"CursorMoved",	EVENT_CURSORMOVED},
-@@ -7682,9 +7690,11 @@
-     {"InsertChange",	EVENT_INSERTCHANGE},
-     {"InsertEnter",	EVENT_INSERTENTER},
-     {"InsertLeave",	EVENT_INSERTLEAVE},
-+    {"InsertCharPre",	EVENT_INSERTCHARPRE},
-     {"MenuPopup",	EVENT_MENUPOPUP},
-     {"QuickFixCmdPost",	EVENT_QUICKFIXCMDPOST},
-     {"QuickFixCmdPre",	EVENT_QUICKFIXCMDPRE},
-+    {"QuitPre",		EVENT_QUITPRE},
-     {"RemoteReply",	EVENT_REMOTEREPLY},
-     {"SessionLoadPost",	EVENT_SESSIONLOADPOST},
-     {"ShellCmdPost",	EVENT_SHELLCMDPOST},
-@@ -8744,6 +8754,8 @@
-     int		retval;
-     aco_save_T	aco;
-     buf_T	*buf;
-+    char_u	*arg = eap->arg;
-+    int		call_do_modelines = check_nomodeline(&arg);
- 
-     /*
-      * This is a bit tricky: For some commands curwin->w_buffer needs to be
-@@ -8760,11 +8772,15 @@
- 	    aucmd_prepbuf(&aco, buf);
- 
- 	    /* execute the autocommands for this buffer */
--	    retval = do_doautocmd(eap->arg, FALSE);
-+	    retval = do_doautocmd(arg, FALSE);
- 
--	    /* Execute the modeline settings, but don't set window-local
--	     * options if we are using the current window for another buffer. */
--	    do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
-+	    if (call_do_modelines)
-+	    {
-+		/* Execute the modeline settings, but don't set window-local
-+		 * options if we are using the current window for another
-+		 * buffer. */
-+		do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
-+	    }
- 
- 	    /* restore the current window */
- 	    aucmd_restbuf(&aco);
-@@ -8779,6 +8795,23 @@
- }
- 
- /*
-+ * Check *argp for <nomodeline>.  When it is present return FALSE, otherwise
-+ * return TRUE and advance *argp to after it.
-+ * Thus return TRUE when do_modelines() should be called.
-+ */
-+    int
-+check_nomodeline(argp)
-+    char_u **argp;
-+{
-+    if (STRNCMP(*argp, "<nomodeline>", 12) == 0)
-+    {
-+	*argp = skipwhite(*argp + 12);
-+	return FALSE;
-+    }
-+    return TRUE;
-+}
-+
-+/*
-  * Prepare for executing autocommands for (hidden) buffer "buf".
-  * Search for a visible window containing the current buffer.  If there isn't
-  * one then use "aucmd_win".
-@@ -8901,12 +8934,13 @@
- 		if (wp == aucmd_win)
- 		{
- 		    if (tp != curtab)
--			goto_tabpage_tp(tp);
-+			goto_tabpage_tp(tp, TRUE);
- 		    win_goto(aucmd_win);
--		    break;
-+		    goto win_found;
- 		}
- 	    }
- 	}
-+win_found:
- 
- 	/* Remove the window and frame from the tree of frames. */
- 	(void)winframe_remove(curwin, &dummy, NULL);
-@@ -8965,6 +8999,10 @@
- 		    && buf_valid(aco->new_curbuf)
- 		    && aco->new_curbuf->b_ml.ml_mfp != NULL)
- 	    {
-+# if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
-+		if (curwin->w_s == &curbuf->b_s)
-+		    curwin->w_s = &aco->new_curbuf->b_s;
-+# endif
- 		--curbuf->b_nwindows;
- 		curbuf = aco->new_curbuf;
- 		curwin->w_buffer = curbuf;
-@@ -9063,7 +9101,10 @@
- {
-     int		state;
- 
--    if (!did_cursorhold && has_cursorhold() && !Recording
-+    if (!did_cursorhold
-+	    && has_cursorhold()
-+	    && !Recording
-+	    && typebuf.tb_len == 0
- #ifdef FEAT_INS_EXPAND
- 	    && !ins_compl_active()
- #endif
-@@ -9094,6 +9135,15 @@
-     return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
- }
- 
-+/*
-+ * Return TRUE when there is an InsertCharPre autocommand defined.
-+ */
-+    int
-+has_insertcharpre()
-+{
-+    return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
-+}
-+
-     static int
- apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
-     event_T	event;
-@@ -9954,6 +10004,8 @@
- 	    if ((c == ';' || c == '>') && match == FALSE)
- 	    {
- 		*pattern = NUL;	    /* Terminate the string */
-+		/* TODO: match with 'filetype' of buffer that "fname" comes
-+		 * from. */
- 		match = mch_check_filetype(fname, type_start);
- 		*pattern = c;	    /* Restore the terminator */
- 		type_start = pattern + 1;
-@@ -10181,19 +10233,11 @@
- 		    ++p;
- 		break;
- 	    case '.':
--#ifdef RISCOS
--		if (allow_dirs != NULL)
--		     *allow_dirs = TRUE;
--		/* FALLTHROUGH */
--#endif
- 	    case '~':
- 		reg_pat[i++] = '\\';
- 		reg_pat[i++] = *p;
- 		break;
- 	    case '?':
--#ifdef RISCOS
--	    case '#':
--#endif
- 		reg_pat[i++] = '.';
- 		break;
- 	    case '\\':
-@@ -10304,3 +10348,55 @@
-     }
-     return reg_pat;
- }
-+
-+#if defined(EINTR) || defined(PROTO)
-+/*
-+ * Version of read() that retries when interrupted by EINTR (possibly
-+ * by a SIGWINCH).
-+ */
-+    long
-+read_eintr(fd, buf, bufsize)
-+    int	    fd;
-+    void    *buf;
-+    size_t  bufsize;
-+{
-+    long ret;
-+
-+    for (;;)
-+    {
-+	ret = vim_read(fd, buf, bufsize);
-+	if (ret >= 0 || errno != EINTR)
-+	    break;
-+    }
-+    return ret;
-+}
-+
-+/*
-+ * Version of write() that retries when interrupted by EINTR (possibly
-+ * by a SIGWINCH).
-+ */
-+    long
-+write_eintr(fd, buf, bufsize)
-+    int	    fd;
-+    void    *buf;
-+    size_t  bufsize;
-+{
-+    long    ret = 0;
-+    long    wlen;
-+
-+    /* Repeat the write() so long it didn't fail, other than being interrupted
-+     * by a signal. */
-+    while (ret < (long)bufsize)
-+    {
-+	wlen = vim_write(fd, (char *)buf + ret, bufsize - ret);
-+	if (wlen < 0)
-+	{
-+	    if (errno != EINTR)
-+		break;
-+	}
-+	else
-+	    ret += wlen;
-+    }
-+    return ret;
-+}
-+#endif
-diff -Naur vim73.orig/src/fold.c vim73/src/fold.c
---- vim73.orig/src/fold.c	2010-06-22 04:20:24.000000000 +0000
-+++ vim73/src/fold.c	2012-11-01 20:35:48.000000000 +0000
-@@ -1033,10 +1033,10 @@
-  * Init the fold info in a new window.
-  */
-     void
--foldInitWin(newwin)
--    win_T	*newwin;
-+foldInitWin(new_win)
-+    win_T	*new_win;
- {
--    ga_init2(&newwin->w_folds, (int)sizeof(fold_T), 10);
-+    ga_init2(&new_win->w_folds, (int)sizeof(fold_T), 10);
- }
- 
- /* find_wl_entry() {{{2 */
-@@ -1469,11 +1469,14 @@
-     }
-     else
-     {
--	/* move nested folds one level up, to overwrite the fold that is
-+	/* Move nested folds one level up, to overwrite the fold that is
- 	 * deleted. */
- 	moved = fp->fd_nested.ga_len;
- 	if (ga_grow(gap, (int)(moved - 1)) == OK)
- 	{
-+	    /* Get "fp" again, the array may have been reallocated. */
-+	    fp = (fold_T *)gap->ga_data + idx;
-+
- 	    /* adjust fd_top and fd_flags for the moved folds */
- 	    nfp = (fold_T *)fp->fd_nested.ga_data;
- 	    for (i = 0; i < moved; ++i)
-@@ -1486,9 +1489,9 @@
- 	    }
- 
- 	    /* move the existing folds down to make room */
--	    if (idx < gap->ga_len)
-+	    if (idx + 1 < gap->ga_len)
- 		mch_memmove(fp + moved, fp + 1,
--					sizeof(fold_T) * (gap->ga_len - idx));
-+				  sizeof(fold_T) * (gap->ga_len - (idx + 1)));
- 	    /* move the contained folds one level up */
- 	    mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
- 	    vim_free(nfp);
-@@ -3022,7 +3025,7 @@
- 	    flp->lvl = -1;
-     }
-     else
--	flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
-+	flp->lvl = get_indent_buf(buf, lnum) / get_sw_value();
-     if (flp->lvl > flp->wp->w_p_fdn)
-     {
- 	flp->lvl = flp->wp->w_p_fdn;
-@@ -3289,7 +3292,8 @@
- /* put_folds() {{{2 */
- #if defined(FEAT_SESSION) || defined(PROTO)
- static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
--static int put_foldopen_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
-+static int put_foldopen_recurse __ARGS((FILE *fd, win_T *wp, garray_T *gap, linenr_T off));
-+static int put_fold_open_close __ARGS((FILE *fd, fold_T *fp, linenr_T off));
- 
- /*
-  * Write commands to "fd" to restore the manual folds in window "wp".
-@@ -3309,7 +3313,7 @@
- 
-     /* If some folds are manually opened/closed, need to restore that. */
-     if (wp->w_fold_manual)
--	return put_foldopen_recurse(fd, &wp->w_folds, (linenr_T)0);
-+	return put_foldopen_recurse(fd, wp, &wp->w_folds, (linenr_T)0);
- 
-     return OK;
- }
-@@ -3349,12 +3353,14 @@
-  * Returns FAIL when writing failed.
-  */
-     static int
--put_foldopen_recurse(fd, gap, off)
-+put_foldopen_recurse(fd, wp, gap, off)
-     FILE	*fd;
-+    win_T	*wp;
-     garray_T	*gap;
-     linenr_T	off;
- {
-     int		i;
-+    int		level;
-     fold_T	*fp;
- 
-     fp = (fold_T *)gap->ga_data;
-@@ -3364,27 +3370,60 @@
- 	{
- 	    if (fp->fd_nested.ga_len > 0)
- 	    {
--		/* open/close nested folds while this fold is open */
-+		/* open nested folds while this fold is open */
- 		if (fprintf(fd, "%ld", fp->fd_top + off) < 0
- 			|| put_eol(fd) == FAIL
--			|| put_line(fd, "normal zo") == FAIL)
-+			|| put_line(fd, "normal! zo") == FAIL)
- 		    return FAIL;
--		if (put_foldopen_recurse(fd, &fp->fd_nested, off + fp->fd_top)
-+		if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
-+							     off + fp->fd_top)
- 			== FAIL)
- 		    return FAIL;
-+		/* close the parent when needed */
-+		if (fp->fd_flags == FD_CLOSED)
-+		{
-+		    if (put_fold_open_close(fd, fp, off) == FAIL)
-+			return FAIL;
-+		}
-+	    }
-+	    else
-+	    {
-+		/* Open or close the leaf according to the window foldlevel.
-+		 * Do not close a leaf that is already closed, as it will close
-+		 * the parent. */
-+		level = foldLevelWin(wp, off + fp->fd_top);
-+		if ((fp->fd_flags == FD_CLOSED && wp->w_p_fdl >= level)
-+			|| (fp->fd_flags != FD_CLOSED && wp->w_p_fdl < level))
-+		if (put_fold_open_close(fd, fp, off) == FAIL)
-+		    return FAIL;
- 	    }
--	    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
--		    || put_eol(fd) == FAIL
--		    || fprintf(fd, "normal z%c",
--				    fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
--		    || put_eol(fd) == FAIL)
--		return FAIL;
- 	}
- 	++fp;
-     }
- 
-     return OK;
- }
-+
-+/* put_fold_open_close() {{{2 */
-+/*
-+ * Write the open or close command to "fd".
-+ * Returns FAIL when writing failed.
-+ */
-+    static int
-+put_fold_open_close(fd, fp, off)
-+    FILE	*fd;
-+    fold_T	*fp;
-+    linenr_T	off;
-+{
-+    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
-+	    || put_eol(fd) == FAIL
-+	    || fprintf(fd, "normal! z%c",
-+			   fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
-+	    || put_eol(fd) == FAIL)
-+	return FAIL;
-+
-+    return OK;
-+}
- #endif /* FEAT_SESSION */
- 
- /* }}}1 */
-diff -Naur vim73.orig/src/getchar.c vim73/src/getchar.c
---- vim73.orig/src/getchar.c	2010-08-08 13:00:33.000000000 +0000
-+++ vim73/src/getchar.c	2012-11-01 20:35:46.000000000 +0000
-@@ -418,12 +418,12 @@
- 
- /*
-  * Remove the contents of the stuff buffer and the mapped characters in the
-- * typeahead buffer (used in case of an error).  If 'typeahead' is true,
-+ * typeahead buffer (used in case of an error).  If "flush_typeahead" is true,
-  * flush all typeahead characters (used when interrupted by a CTRL-C).
-  */
-     void
--flush_buffers(typeahead)
--    int typeahead;
-+flush_buffers(flush_typeahead)
-+    int flush_typeahead;
- {
-     init_typebuf();
- 
-@@ -431,7 +431,7 @@
-     while (read_stuff(TRUE) != NUL)
- 	;
- 
--    if (typeahead)	    /* remove all typeahead */
-+    if (flush_typeahead)	    /* remove all typeahead */
-     {
- 	/*
- 	 * We have to get all characters, because we may delete the first part
-@@ -470,6 +470,24 @@
-     }
- }
- 
-+/*
-+ * Discard the contents of the redo buffer and restore the previous redo
-+ * buffer.
-+ */
-+    void
-+CancelRedo()
-+{
-+    if (!block_redo)
-+    {
-+	free_buff(&redobuff);
-+	redobuff = old_redobuff;
-+	old_redobuff.bh_first.b_next = NULL;
-+	start_stuff();
-+	while (read_stuff(TRUE) != NUL)
-+	    ;
-+    }
-+}
-+
- #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
- /*
-  * Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
-@@ -635,11 +653,14 @@
- /*
-  * Stuff "s" into the stuff buffer, leaving special key codes unmodified and
-  * escaping other K_SPECIAL and CSI bytes.
-+ * Change CR, LF and ESC into a space.
-  */
-     void
- stuffReadbuffSpec(s)
-     char_u	*s;
- {
-+    int c;
-+
-     while (*s != NUL)
-     {
- 	if (*s == K_SPECIAL && s[1] != NUL && s[2] != NUL)
-@@ -649,11 +670,16 @@
- 	    s += 3;
- 	}
- 	else
-+	{
- #ifdef FEAT_MBYTE
--	    stuffcharReadbuff(mb_ptr2char_adv(&s));
-+	    c = mb_ptr2char_adv(&s);
- #else
--	    stuffcharReadbuff(*s++);
-+	    c = *s++;
- #endif
-+	    if (c == CAR || c == NL || c == ESC)
-+		c = ' ';
-+	    stuffcharReadbuff(c);
-+	}
-     }
- }
- #endif
-@@ -683,9 +709,9 @@
-  * Read a character from the redo buffer.  Translates K_SPECIAL, CSI and
-  * multibyte characters.
-  * The redo buffer is left as it is.
-- * if init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
-- * otherwise
-- * if old is TRUE, use old_redobuff instead of redobuff
-+ * If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
-+ * otherwise.
-+ * If old is TRUE, use old_redobuff instead of redobuff.
-  */
-     static int
- read_redo(init, old_redo)
-@@ -697,7 +723,7 @@
-     int				c;
- #ifdef FEAT_MBYTE
-     int				n;
--    char_u			buf[MB_MAXBYTES];
-+    char_u			buf[MB_MAXBYTES + 1];
-     int				i;
- #endif
- 
-@@ -1046,7 +1072,7 @@
-     int	    c;
- {
- #ifdef FEAT_MBYTE
--    char_u	buf[MB_MAXBYTES];
-+    char_u	buf[MB_MAXBYTES + 1];
- #else
-     char_u	buf[4];
- #endif
-@@ -1506,9 +1532,6 @@
-     }
- }
- 
--#define KL_PART_KEY -1		/* keylen value for incomplete key-code */
--#define KL_PART_MAP -2		/* keylen value for incomplete mapping */
--
- /*
-  * Get the next input character.
-  * Can return a special key or a multi-byte character.
-@@ -1524,7 +1547,7 @@
-     int		c, c2;
- #ifdef FEAT_MBYTE
-     int		n;
--    char_u	buf[MB_MAXBYTES];
-+    char_u	buf[MB_MAXBYTES + 1];
-     int		i;
- #endif
- 
-@@ -2171,7 +2194,7 @@
- 					if (!timedout)
- 					{
- 					    /* break at a partly match */
--					    keylen = KL_PART_MAP;
-+					    keylen = KEYLEN_PART_MAP;
- 					    break;
- 					}
- 				    }
-@@ -2192,7 +2215,7 @@
- 
- 			/* If no partly match found, use the longest full
- 			 * match. */
--			if (keylen != KL_PART_MAP)
-+			if (keylen != KEYLEN_PART_MAP)
- 			{
- 			    mp = mp_match;
- 			    keylen = mp_match_len;
-@@ -2230,7 +2253,7 @@
- 			}
- 			/* Need more chars for partly match. */
- 			if (mlen == typebuf.tb_len)
--			    keylen = KL_PART_KEY;
-+			    keylen = KEYLEN_PART_KEY;
- 			else if (max_mlen < mlen)
- 			    /* no match, may have to check for termcode at
- 			     * next character */
-@@ -2238,7 +2261,7 @@
- 		    }
- 
- 		    if ((mp == NULL || max_mlen >= mp_match_len)
--						     && keylen != KL_PART_MAP)
-+						 && keylen != KEYLEN_PART_MAP)
- 		    {
- 			int	save_keylen = keylen;
- 
-@@ -2259,13 +2282,14 @@
- 						   typebuf.tb_off] == RM_YES))
- 				&& !timedout)
- 			{
--			    keylen = check_termcode(max_mlen + 1, NULL, 0);
-+			    keylen = check_termcode(max_mlen + 1,
-+							       NULL, 0, NULL);
- 
- 			    /* If no termcode matched but 'pastetoggle'
- 			     * matched partially it's like an incomplete key
- 			     * sequence. */
--			    if (keylen == 0 && save_keylen == KL_PART_KEY)
--				keylen = KL_PART_KEY;
-+			    if (keylen == 0 && save_keylen == KEYLEN_PART_KEY)
-+				keylen = KEYLEN_PART_KEY;
- 
- 			    /*
- 			     * When getting a partial match, but the last
-@@ -2302,7 +2326,7 @@
- 				    continue;
- 				}
- 				if (*s == NUL)	    /* need more characters */
--				    keylen = KL_PART_KEY;
-+				    keylen = KEYLEN_PART_KEY;
- 			    }
- 			    if (keylen >= 0)
- #endif
-@@ -2339,7 +2363,8 @@
- 			if (keylen > 0)	    /* full matching terminal code */
- 			{
- #if defined(FEAT_GUI) && defined(FEAT_MENU)
--			    if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
-+			    if (typebuf.tb_len >= 2
-+				&& typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
- 					 && typebuf.tb_buf[typebuf.tb_off + 1]
- 								   == KS_MENU)
- 			    {
-@@ -2381,7 +2406,7 @@
- 			/* Partial match: get some more characters.  When a
- 			 * matching mapping was found use that one. */
- 			if (mp == NULL || keylen < 0)
--			    keylen = KL_PART_KEY;
-+			    keylen = KEYLEN_PART_KEY;
- 			else
- 			    keylen = mp_match_len;
- 		    }
-@@ -2454,27 +2479,18 @@
- 
- 			/*
- 			 * Handle ":map <expr>": evaluate the {rhs} as an
--			 * expression.  Save and restore the typeahead so that
--			 * getchar() can be used.  Also save and restore the
--			 * command line for "normal :".
-+			 * expression.  Also save and restore the command line
-+			 * for "normal :".
- 			 */
- 			if (mp->m_expr)
- 			{
--			    tasave_T	tabuf;
- 			    int		save_vgetc_busy = vgetc_busy;
- 
--			    save_typeahead(&tabuf);
--			    if (tabuf.typebuf_valid)
--			    {
--				vgetc_busy = 0;
--				save_m_keys = vim_strsave(mp->m_keys);
--				save_m_str = vim_strsave(mp->m_str);
--				s = eval_map_expr(save_m_str, NUL);
--				vgetc_busy = save_vgetc_busy;
--			    }
--			    else
--				s = NULL;
--			    restore_typeahead(&tabuf);
-+			    vgetc_busy = 0;
-+			    save_m_keys = vim_strsave(mp->m_keys);
-+			    save_m_str = vim_strsave(mp->m_str);
-+			    s = eval_map_expr(save_m_str, NUL);
-+			    vgetc_busy = save_vgetc_busy;
- 			}
- 			else
- #endif
-@@ -2553,7 +2569,8 @@
- #endif
- 			&& typebuf.tb_maplen == 0
- 			&& (State & INSERT)
--			&& (p_timeout || (keylen == KL_PART_KEY && p_ttimeout))
-+			&& (p_timeout
-+			    || (keylen == KEYLEN_PART_KEY && p_ttimeout))
- 			&& (c = inchar(typebuf.tb_buf + typebuf.tb_off
- 						     + typebuf.tb_len, 3, 25L,
- 						 typebuf.tb_change_cnt)) == 0)
-@@ -2711,8 +2728,11 @@
- 		 * are still available.  But when those available characters
- 		 * are part of a mapping, and we are going to do a blocking
- 		 * wait here.  Need to update the screen to display the
--		 * changed text so far. */
--		if ((State & INSERT) && advance && must_redraw != 0)
-+		 * changed text so far. Also for when 'lazyredraw' is set and
-+		 * redrawing was postponed because there was something in the
-+		 * input buffer (e.g., termresponse). */
-+		if (((State & INSERT) != 0 || p_lz) && (State & CMDLINE) == 0
-+			  && advance && must_redraw != 0 && !need_wait_return)
- 		{
- 		    update_screen(0);
- 		    setcursor(); /* put cursor back where it belongs */
-@@ -2783,9 +2803,9 @@
- 			    ? 0
- 			    : ((typebuf.tb_len == 0
- 				    || !(p_timeout || (p_ttimeout
--						   && keylen == KL_PART_KEY)))
-+					       && keylen == KEYLEN_PART_KEY)))
- 				    ? -1L
--				    : ((keylen == KL_PART_KEY && p_ttm >= 0)
-+				    : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
- 					    ? p_ttm
- 					    : p_tm)), typebuf.tb_change_cnt);
- 
-@@ -2799,7 +2819,8 @@
- 			edit_unputchar();
- 		    if (State & CMDLINE)
- 			unputcmdline();
--		    setcursor();	/* put cursor back where it belongs */
-+		    else
-+			setcursor();	/* put cursor back where it belongs */
- 		}
- 
- 		if (c < 0)
-@@ -3168,6 +3189,7 @@
-     int		expr = FALSE;
- #endif
-     int		noremap;
-+    char_u      *orig_rhs;
- 
-     keys = arg;
-     map_table = maphash;
-@@ -3251,9 +3273,9 @@
-     validate_maphash();
- 
-     /*
--     * find end of keys and skip CTRL-Vs (and backslashes) in it
-+     * Find end of keys and skip CTRL-Vs (and backslashes) in it.
-      * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
--     * with :unmap white space is included in the keys, no argument possible
-+     * with :unmap white space is included in the keys, no argument possible.
-      */
-     p = keys;
-     do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
-@@ -3266,6 +3288,7 @@
-     }
-     if (*p != NUL)
- 	*p++ = NUL;
-+
-     p = skipwhite(p);
-     rhs = p;
-     hasarg = (*rhs != NUL);
-@@ -3288,6 +3311,7 @@
-      */
-     if (haskey)
- 	keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
-+    orig_rhs = rhs;
-     if (hasarg)
-     {
- 	if (STRICMP(rhs, "<nop>") == 0)	    /* "<Nop>" means nothing */
-@@ -3298,7 +3322,7 @@
- 
- #ifdef FEAT_FKMAP
-     /*
--     * when in right-to-left mode and alternate keymap option set,
-+     * When in right-to-left mode and alternate keymap option set,
-      * reverse the character flow in the rhs in Farsi.
-      */
-     if (p_altkeymap && curwin->w_p_rl)
-@@ -3556,6 +3580,8 @@
- 				}
- 				vim_free(mp->m_str);
- 				mp->m_str = newstr;
-+				vim_free(mp->m_orig_str);
-+				mp->m_orig_str = vim_strsave(orig_rhs);
- 				mp->m_noremap = noremap;
- 				mp->m_silent = silent;
- 				mp->m_mode = mode;
-@@ -3633,10 +3659,12 @@
- 
-     mp->m_keys = vim_strsave(keys);
-     mp->m_str = vim_strsave(rhs);
-+    mp->m_orig_str = vim_strsave(orig_rhs);
-     if (mp->m_keys == NULL || mp->m_str == NULL)
-     {
- 	vim_free(mp->m_keys);
- 	vim_free(mp->m_str);
-+	vim_free(mp->m_orig_str);
- 	vim_free(mp);
- 	retval = 4;	/* no mem */
- 	goto theend;
-@@ -3682,6 +3710,7 @@
-     mp = *mpp;
-     vim_free(mp->m_keys);
-     vim_free(mp->m_str);
-+    vim_free(mp->m_orig_str);
-     *mpp = mp->m_next;
-     vim_free(mp);
- }
-@@ -3851,12 +3880,57 @@
-     }
- }
- 
-+/*
-+ * Return characters to represent the map mode in an allocated string.
-+ * Returns NULL when out of memory.
-+ */
-+    char_u *
-+map_mode_to_chars(mode)
-+    int mode;
-+{
-+    garray_T    mapmode;
-+
-+    ga_init2(&mapmode, 1, 7);
-+
-+    if ((mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
-+	ga_append(&mapmode, '!');			/* :map! */
-+    else if (mode & INSERT)
-+	ga_append(&mapmode, 'i');			/* :imap */
-+    else if (mode & LANGMAP)
-+	ga_append(&mapmode, 'l');			/* :lmap */
-+    else if (mode & CMDLINE)
-+	ga_append(&mapmode, 'c');			/* :cmap */
-+    else if ((mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
-+				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
-+	ga_append(&mapmode, ' ');			/* :map */
-+    else
-+    {
-+	if (mode & NORMAL)
-+	    ga_append(&mapmode, 'n');			/* :nmap */
-+	if (mode & OP_PENDING)
-+	    ga_append(&mapmode, 'o');			/* :omap */
-+	if ((mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
-+	    ga_append(&mapmode, 'v');			/* :vmap */
-+	else
-+	{
-+	    if (mode & VISUAL)
-+		ga_append(&mapmode, 'x');		/* :xmap */
-+	    if (mode & SELECTMODE)
-+		ga_append(&mapmode, 's');		/* :smap */
-+	}
-+    }
-+
-+    ga_append(&mapmode, NUL);
-+    return (char_u *)mapmode.ga_data;
-+}
-+
-     static void
- showmap(mp, local)
-     mapblock_T	*mp;
-     int		local;	    /* TRUE for buffer-local map */
- {
--    int len = 1;
-+    int		len = 1;
-+    char_u	*mapchars;
- 
-     if (msg_didout || msg_silent != 0)
-     {
-@@ -3864,49 +3938,15 @@
- 	if (got_int)	    /* 'q' typed at MORE prompt */
- 	    return;
-     }
--    if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
--	msg_putchar('!');			/* :map! */
--    else if (mp->m_mode & INSERT)
--	msg_putchar('i');			/* :imap */
--    else if (mp->m_mode & LANGMAP)
--	msg_putchar('l');			/* :lmap */
--    else if (mp->m_mode & CMDLINE)
--	msg_putchar('c');			/* :cmap */
--    else if ((mp->m_mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
--				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
--	msg_putchar(' ');			/* :map */
--    else
-+
-+    mapchars = map_mode_to_chars(mp->m_mode);
-+    if (mapchars != NULL)
-     {
--	len = 0;
--	if (mp->m_mode & NORMAL)
--	{
--	    msg_putchar('n');		/* :nmap */
--	    ++len;
--	}
--	if (mp->m_mode & OP_PENDING)
--	{
--	    msg_putchar('o');		/* :omap */
--	    ++len;
--	}
--	if ((mp->m_mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
--	{
--	    msg_putchar('v');		/* :vmap */
--	    ++len;
--	}
--	else
--	{
--	    if (mp->m_mode & VISUAL)
--	    {
--		msg_putchar('x');		/* :xmap */
--		++len;
--	    }
--	    if (mp->m_mode & SELECTMODE)
--	    {
--		msg_putchar('s');		/* :smap */
--		++len;
--	    }
--	}
-+	msg_puts(mapchars);
-+	len = (int)STRLEN(mapchars);
-+	vim_free(mapchars);
-     }
-+
-     while (++len <= 3)
- 	msg_putchar(' ');
- 
-@@ -3931,12 +3971,21 @@
- 	msg_putchar(' ');
- 
-     /* Use FALSE below if we only want things like <Up> to show up as such on
--     * the rhs, and not M-x etc, TRUE gets both -- webb
--     */
-+     * the rhs, and not M-x etc, TRUE gets both -- webb */
-     if (*mp->m_str == NUL)
- 	msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
-     else
--	msg_outtrans_special(mp->m_str, FALSE);
-+    {
-+	/* Remove escaping of CSI, because "m_str" is in a format to be used
-+	 * as typeahead. */
-+	char_u *s = vim_strsave(mp->m_str);
-+	if (s != NULL)
-+	{
-+	    vim_unescape_csi(s);
-+	    msg_outtrans_special(s, FALSE);
-+	    vim_free(s);
-+	}
-+    }
- #ifdef FEAT_EVAL
-     if (p_verbose > 0)
- 	last_set_msg(mp->m_script_ID);
-@@ -4287,11 +4336,7 @@
-     int		scol;		/* starting column of the abbr. */
-     int		j;
-     char_u	*s;
--#ifdef FEAT_MBYTE
-     char_u	tb[MB_MAXBYTES + 4];
--#else
--    char_u	tb[4];
--#endif
-     mapblock_T	*mp;
- #ifdef FEAT_LOCALMAP
-     mapblock_T	*mp2;
-@@ -4304,8 +4349,9 @@
- 
-     if (typebuf.tb_no_abbr_cnt)	/* abbrev. are not recursive */
- 	return FALSE;
--    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0)
--	/* no remapping implies no abbreviation */
-+
-+    /* no remapping implies no abbreviation, except for CTRL-] */
-+    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0 && c != Ctrl_RSB)
- 	return FALSE;
- 
-     /*
-@@ -4478,12 +4524,25 @@
- {
-     char_u	*res;
-     char_u	*p;
-+    char_u	*expr;
-     char_u	*save_cmd;
-     pos_T	save_cursor;
-+    int		save_msg_col;
-+    int		save_msg_row;
-+
-+    /* Remove escaping of CSI, because "str" is in a format to be used as
-+     * typeahead. */
-+    expr = vim_strsave(str);
-+    if (expr == NULL)
-+	return NULL;
-+    vim_unescape_csi(expr);
- 
-     save_cmd = save_cmdline_alloc();
-     if (save_cmd == NULL)
-+    {
-+	vim_free(expr);
- 	return NULL;
-+    }
- 
-     /* Forbid changing text or using ":normal" to avoid most of the bad side
-      * effects.  Also restore the cursor position. */
-@@ -4493,16 +4552,23 @@
- #endif
-     set_vim_var_char(c);  /* set v:char to the typed character */
-     save_cursor = curwin->w_cursor;
--    p = eval_to_string(str, NULL, FALSE);
-+    save_msg_col = msg_col;
-+    save_msg_row = msg_row;
-+    p = eval_to_string(expr, NULL, FALSE);
-     --textlock;
- #ifdef FEAT_EX_EXTRA
-     --ex_normal_lock;
- #endif
-     curwin->w_cursor = save_cursor;
-+    msg_col = save_msg_col;
-+    msg_row = save_msg_row;
- 
-     restore_cmdline_alloc(save_cmd);
-+    vim_free(expr);
-+
-     if (p == NULL)
- 	return NULL;
-+    /* Escape CSI in the result to be able to use the string as typeahead. */
-     res = vim_strsave_escape_csi(p);
-     vim_free(p);
- 
-@@ -4995,19 +5061,21 @@
-     sourcing_name = save_name;
- }
- 
--#ifdef FEAT_EVAL
-+#if defined(FEAT_EVAL) || defined(PROTO)
- /*
-- * Check the string "keys" against the lhs of all mappings
-- * Return pointer to rhs of mapping (mapblock->m_str)
-- * NULL otherwise
-+ * Check the string "keys" against the lhs of all mappings.
-+ * Return pointer to rhs of mapping (mapblock->m_str).
-+ * NULL when no mapping found.
-  */
-     char_u *
--check_map(keys, mode, exact, ign_mod, abbr)
-+check_map(keys, mode, exact, ign_mod, abbr, mp_ptr, local_ptr)
-     char_u	*keys;
-     int		mode;
-     int		exact;		/* require exact match */
-     int		ign_mod;	/* ignore preceding modifier */
-     int		abbr;		/* do abbreviations */
-+    mapblock_T	**mp_ptr;	/* return: pointer to mapblock or NULL */
-+    int		*local_ptr;	/* return: buffer-local mapping or NULL */
- {
-     int		hash;
-     int		len, minlen;
-@@ -5062,7 +5130,17 @@
- 			    minlen = mp->m_keylen - 3;
- 		    }
- 		    if (STRNCMP(s, keys, minlen) == 0)
-+		    {
-+			if (mp_ptr != NULL)
-+			    *mp_ptr = mp;
-+			if (local_ptr != NULL)
-+#ifdef FEAT_LOCALMAP
-+			    *local_ptr = local;
-+#else
-+			    *local_ptr = 0;
-+#endif
- 			return mp->m_str;
-+		    }
- 		}
- 	    }
- 	}
-diff -Naur vim73.orig/src/globals.h vim73/src/globals.h
---- vim73.orig/src/globals.h	2010-07-23 19:20:45.000000000 +0000
-+++ vim73/src/globals.h	2012-11-01 20:35:48.000000000 +0000
-@@ -113,9 +113,9 @@
-  * When '$' is included in 'cpoptions' option set:
-  * When a change command is given that deletes only part of a line, a dollar
-  * is put at the end of the changed text. dollar_vcol is set to the virtual
-- * column of this '$'.
-+ * column of this '$'.  -1 is used to indicate no $ is being displayed.
-  */
--EXTERN colnr_T	dollar_vcol INIT(= 0);
-+EXTERN colnr_T	dollar_vcol INIT(= -1);
- 
- #ifdef FEAT_INS_EXPAND
- /*
-@@ -183,6 +183,8 @@
- #endif
- EXTERN int	did_emsg;		    /* set by emsg() when the message
- 					       is displayed or thrown */
-+EXTERN int	did_emsg_syntax;	    /* did_emsg set because of a
-+					       syntax error */
- EXTERN int	called_emsg;		    /* always set by emsg() */
- EXTERN int	ex_exitval INIT(= 0);	    /* exit value for ex mode */
- EXTERN int	emsg_on_display INIT(= FALSE);	/* there is an error message */
-@@ -510,9 +512,15 @@
- EXTERN VimClipboard clip_plus;	/* CLIPBOARD selection in X11 */
- # else
- #  define clip_plus clip_star	/* there is only one clipboard */
-+#  define ONE_CLIPBOARD
- # endif
--EXTERN int	clip_unnamed INIT(= FALSE);
--EXTERN int	clip_autoselect INIT(= FALSE);
-+
-+# define CLIP_UNNAMED      1
-+# define CLIP_UNNAMED_PLUS 2
-+EXTERN int	clip_unnamed INIT(= 0); /* above two values or'ed */
-+
-+EXTERN int	clip_autoselect_star INIT(= FALSE);
-+EXTERN int	clip_autoselect_plus INIT(= FALSE);
- EXTERN int	clip_autoselectml INIT(= FALSE);
- EXTERN int	clip_html INIT(= FALSE);
- EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
-@@ -530,6 +538,10 @@
- EXTERN win_T	*prevwin INIT(= NULL);	/* previous window */
- # define W_NEXT(wp) ((wp)->w_next)
- # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
-+/*
-+ * When using this macro "break" only breaks out of the inner loop. Use "goto"
-+ * to break out of the tabpage loop.
-+ */
- # define FOR_ALL_TAB_WINDOWS(tp, wp) \
-     for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
- 	for ((wp) = ((tp) == curtab) \
-@@ -728,9 +740,9 @@
- #endif
- 
- EXTERN pos_T	saved_cursor		/* w_cursor before formatting text. */
--# ifdef DO_INIT
-+#ifdef DO_INIT
- 	= INIT_POS_T(0, 0, 0)
--# endif
-+#endif
- 	;
- 
- /*
-@@ -798,9 +810,9 @@
- # endif
- EXTERN int	has_mbyte INIT(= 0);		/* any multi-byte encoding */
- 
--#if defined(WIN3264) && defined(FEAT_MBYTE)
-+# if defined(WIN3264) && defined(FEAT_MBYTE)
- EXTERN int	wide_WindowProc INIT(= FALSE);	/* use wide WindowProc() */
--#endif
-+# endif
- 
- /*
-  * To speed up BYTELEN() we fill a table with the byte lengths whenever
-@@ -1052,10 +1064,6 @@
- 			;
- #endif
- 
--EXTERN linenr_T	write_no_eol_lnum INIT(= 0); /* non-zero lnum when last line
--						of next binary write should
--						not have an end-of-line */
--
- #ifdef FEAT_WINDOWS
- EXTERN int	postponed_split INIT(= 0);  /* for CTRL-W CTRL-] command */
- EXTERN int	postponed_split_flags INIT(= 0);  /* args for win_split() */
-@@ -1094,8 +1102,8 @@
- EXTERN int  save_p_ls INIT(= -1);	/* Save 'laststatus' setting */
- EXTERN int  save_p_wmh INIT(= -1);	/* Save 'winminheight' setting */
- EXTERN int  wild_menu_showing INIT(= 0);
--#define WM_SHOWN	1		/* wildmenu showing */
--#define WM_SCROLLED	2		/* wildmenu showing with scroll */
-+# define WM_SHOWN	1		/* wildmenu showing */
-+# define WM_SCROLLED	2		/* wildmenu showing with scroll */
- #endif
- 
- #ifdef MSWIN
-@@ -1305,9 +1313,9 @@
- EXTERN Atom	commProperty INIT(= None);
- EXTERN char_u	*serverDelayedStartName INIT(= NULL);
- # else
--# ifdef PROTO
-+#  ifdef PROTO
- typedef int HWND;
--# endif
-+#  endif
- EXTERN HWND	clientWindow INIT(= 0);
- # endif
- #endif
-@@ -1512,7 +1520,7 @@
- EXTERN char_u e_sandbox[]	INIT(= N_("E48: Not allowed in sandbox"));
- #endif
- EXTERN char_u e_secure[]	INIT(= N_("E523: Not allowed here"));
--#if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
-+#if defined(AMIGA) || defined(MACOS) || defined(MSWIN)  \
- 	|| defined(UNIX) || defined(VMS) || defined(OS2)
- EXTERN char_u e_screenmode[]	INIT(= N_("E359: Screen mode setting not supported"));
- #endif
-@@ -1560,6 +1568,9 @@
- 	(defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
- EXTERN char_u e_notset[]	INIT(= N_("E764: Option '%s' is not set"));
- #endif
-+#ifndef FEAT_CLIPBOARD
-+EXTERN char_u e_invalidreg[]    INIT(= N_("E850: Invalid register name"));
-+#endif
- 
- #ifdef MACOS_X_UNIX
- EXTERN short disallow_gui	INIT(= FALSE);
-diff -Naur vim73.orig/src/gui.c vim73/src/gui.c
---- vim73.orig/src/gui.c	2010-08-08 13:01:18.000000000 +0000
-+++ vim73/src/gui.c	2012-11-01 20:35:48.000000000 +0000
-@@ -37,6 +37,23 @@
- static void gui_set_bg_color __ARGS((char_u *name));
- static win_T *xy2win __ARGS((int x, int y));
- 
-+#if defined(UNIX) && !defined(MACOS_X) && !defined(__APPLE__)
-+# define MAY_FORK
-+static void gui_do_fork __ARGS((void));
-+
-+static int gui_read_child_pipe __ARGS((int fd));
-+
-+/* Return values for gui_read_child_pipe */
-+enum {
-+    GUI_CHILD_IO_ERROR,
-+    GUI_CHILD_OK,
-+    GUI_CHILD_FAILED
-+};
-+
-+#endif /* MAY_FORK */
-+
-+static void gui_attempt_start __ARGS((void));
-+
- static int can_update_cursor = TRUE; /* can display the cursor */
- 
- /*
-@@ -59,42 +76,53 @@
- gui_start()
- {
-     char_u	*old_term;
--#if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X)
--# define MAY_FORK
--    int		dofork = TRUE;
--#endif
-     static int	recursive = 0;
- 
-     old_term = vim_strsave(T_NAME);
- 
--    /*
--     * Set_termname() will call gui_init() to start the GUI.
--     * Set the "starting" flag, to indicate that the GUI will start.
--     *
--     * We don't want to open the GUI shell until after we've read .gvimrc,
--     * otherwise we don't know what font we will use, and hence we don't know
--     * what size the shell should be.  So if there are errors in the .gvimrc
--     * file, they will have to go to the terminal: Set full_screen to FALSE.
--     * full_screen will be set to TRUE again by a successful termcapinit().
--     */
-     settmode(TMODE_COOK);		/* stop RAW mode */
-     if (full_screen)
- 	cursor_on();			/* needed for ":gui" in .vimrc */
--    gui.starting = TRUE;
-     full_screen = FALSE;
- 
--#ifdef MAY_FORK
--    if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
--	dofork = FALSE;
--#endif
-     ++recursive;
- 
--    termcapinit((char_u *)"builtin_gui");
--    gui.starting = recursive - 1;
-+#ifdef MAY_FORK
-+    /*
-+     * Quit the current process and continue in the child.
-+     * Makes "gvim file" disconnect from the shell it was started in.
-+     * Don't do this when Vim was started with "-f" or the 'f' flag is present
-+     * in 'guioptions'.
-+     */
-+    if (gui.dofork && !vim_strchr(p_go, GO_FORG) && recursive <= 1)
-+    {
-+	gui_do_fork();
-+    }
-+    else
-+#endif
-+    {
-+#ifdef FEAT_GUI_GTK
-+	/* If there is 'f' in 'guioptions' and specify -g argument,
-+	 * gui_mch_init_check() was not called yet.  */
-+	if (gui_mch_init_check() != OK)
-+	    exit(1);
-+#endif
-+	gui_attempt_start();
-+    }
- 
-     if (!gui.in_use)			/* failed to start GUI */
-     {
--	termcapinit(old_term);		/* back to old term settings */
-+	/* Back to old term settings
-+	 *
-+	 * FIXME: If we got here because a child process failed and flagged to
-+	 * the parent to resume, and X11 is enabled with FEAT_TITLE, this will
-+	 * hit an X11 I/O error and do a longjmp(), leaving recursive
-+	 * permanently set to 1. This is probably not as big a problem as it
-+	 * sounds, because gui_mch_init() in both gui_x11.c and gui_gtk_x11.c
-+	 * return "OK" unconditionally, so it would be very difficult to
-+	 * actually hit this case.
-+	 */
-+	termcapinit(old_term);
- 	settmode(TMODE_RAW);		/* restart RAW mode */
- #ifdef FEAT_TITLE
- 	set_title_defaults();		/* set 'title' and 'icon' again */
-@@ -103,101 +131,223 @@
- 
-     vim_free(old_term);
- 
-+#ifdef FEAT_AUTOCMD
-+    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
-+     * the GUIFailed event. */
-+    gui_mch_update();
-+    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
-+						   NULL, NULL, FALSE, curbuf);
-+#endif
-+    --recursive;
-+}
-+
-+/*
-+ * Set_termname() will call gui_init() to start the GUI.
-+ * Set the "starting" flag, to indicate that the GUI will start.
-+ *
-+ * We don't want to open the GUI shell until after we've read .gvimrc,
-+ * otherwise we don't know what font we will use, and hence we don't know
-+ * what size the shell should be.  So if there are errors in the .gvimrc
-+ * file, they will have to go to the terminal: Set full_screen to FALSE.
-+ * full_screen will be set to TRUE again by a successful termcapinit().
-+ */
-+    static void
-+gui_attempt_start()
-+{
-+    static int recursive = 0;
-+
-+    ++recursive;
-+    gui.starting = TRUE;
-+
-+#ifdef FEAT_GUI_GTK
-+    gui.event_time = GDK_CURRENT_TIME;
-+#endif
-+
-+    termcapinit((char_u *)"builtin_gui");
-+    gui.starting = recursive - 1;
-+
- #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
-     if (gui.in_use)
-+    {
-+# ifdef FEAT_EVAL
-+	Window	x11_window;
-+	Display	*x11_display;
-+
-+	if (gui_get_x11_windis(&x11_window, &x11_display) == OK)
-+	    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
-+# endif
-+
- 	/* Display error messages in a dialog now. */
- 	display_errors();
-+    }
- #endif
-+    --recursive;
-+}
- 
--#if defined(MAY_FORK) && !defined(__QNXNTO__)
--    /*
--     * Quit the current process and continue in the child.
--     * Makes "gvim file" disconnect from the shell it was started in.
--     * Don't do this when Vim was started with "-f" or the 'f' flag is present
--     * in 'guioptions'.
--     */
--    if (gui.in_use && dofork)
-+#ifdef MAY_FORK
-+
-+/* for waitpid() */
-+# if defined(HAVE_SYS_WAIT_H) || defined(HAVE_UNION_WAIT)
-+#  include <sys/wait.h>
-+# endif
-+
-+/*
-+ * Create a new process, by forking. In the child, start the GUI, and in
-+ * the parent, exit.
-+ *
-+ * If something goes wrong, this will return with gui.in_use still set
-+ * to FALSE, in which case the caller should continue execution without
-+ * the GUI.
-+ *
-+ * If the child fails to start the GUI, then the child will exit and the
-+ * parent will return. If the child succeeds, then the parent will exit
-+ * and the child will return.
-+ */
-+    static void
-+gui_do_fork()
-+{
-+#ifdef __QNXNTO__
-+    procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
-+	    PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
-+    gui_attempt_start();
-+    return;
-+#else
-+    int		pipefd[2];	/* pipe between parent and child */
-+    int		pipe_error;
-+    int		status;
-+    int		exit_status;
-+    pid_t	pid = -1;
-+
-+    /* Setup a pipe between the child and the parent, so that the parent
-+     * knows when the child has done the setsid() call and is allowed to
-+     * exit. */
-+    pipe_error = (pipe(pipefd) < 0);
-+    pid = fork();
-+    if (pid < 0)	    /* Fork error */
-     {
--	int	pipefd[2];	/* pipe between parent and child */
--	int	pipe_error;
--	char	dummy;
--	pid_t	pid = -1;
--
--	/* Setup a pipe between the child and the parent, so that the parent
--	 * knows when the child has done the setsid() call and is allowed to
--	 * exit. */
--	pipe_error = (pipe(pipefd) < 0);
--	pid = fork();
--	if (pid > 0)	    /* Parent */
--	{
--	    /* Give the child some time to do the setsid(), otherwise the
--	     * exit() may kill the child too (when starting gvim from inside a
--	     * gvim). */
--	    if (pipe_error)
--		ui_delay(300L, TRUE);
--	    else
-+	EMSG(_("E851: Failed to create a new process for the GUI"));
-+	return;
-+    }
-+    else if (pid > 0)	    /* Parent */
-+    {
-+	/* Give the child some time to do the setsid(), otherwise the
-+	 * exit() may kill the child too (when starting gvim from inside a
-+	 * gvim). */
-+	if (!pipe_error)
-+	{
-+	    /* The read returns when the child closes the pipe (or when
-+	     * the child dies for some reason). */
-+	    close(pipefd[1]);
-+	    status = gui_read_child_pipe(pipefd[0]);
-+	    if (status == GUI_CHILD_FAILED)
- 	    {
--		/* The read returns when the child closes the pipe (or when
--		 * the child dies for some reason). */
--		close(pipefd[1]);
--		ignored = (int)read(pipefd[0], &dummy, (size_t)1);
--		close(pipefd[0]);
-+		/* The child failed to start the GUI, so the caller must
-+		 * continue. There may be more error information written
-+		 * to stderr by the child. */
-+# ifdef __NeXT__
-+		wait4(pid, &exit_status, 0, (struct rusage *)0);
-+# else
-+		waitpid(pid, &exit_status, 0);
-+# endif
-+		EMSG(_("E852: The child process failed to start the GUI"));
-+		return;
-+	    }
-+	    else if (status == GUI_CHILD_IO_ERROR)
-+	    {
-+		pipe_error = TRUE;
- 	    }
-+	    /* else GUI_CHILD_OK: parent exit */
-+	}
- 
--	    /* When swapping screens we may need to go to the next line, e.g.,
--	     * after a hit-enter prompt and using ":gui". */
--	    if (newline_on_exit)
--		mch_errmsg("\r\n");
-+	if (pipe_error)
-+	    ui_delay(300L, TRUE);
- 
--	    /*
--	     * The parent must skip the normal exit() processing, the child
--	     * will do it.  For example, GTK messes up signals when exiting.
--	     */
--	    _exit(0);
--	}
-+	/* When swapping screens we may need to go to the next line, e.g.,
-+	 * after a hit-enter prompt and using ":gui". */
-+	if (newline_on_exit)
-+	    mch_errmsg("\r\n");
- 
--# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
- 	/*
--	 * Change our process group.  On some systems/shells a CTRL-C in the
--	 * shell where Vim was started would otherwise kill gvim!
-+	 * The parent must skip the normal exit() processing, the child
-+	 * will do it.  For example, GTK messes up signals when exiting.
- 	 */
--	if (pid == 0)	    /* child */
-+	_exit(0);
-+    }
-+    /* Child */
-+
-+#ifdef FEAT_GUI_GTK
-+    /* Call gtk_init_check() here after fork(). See gui_init_check(). */
-+    if (gui_mch_init_check() != OK)
-+	exit(1);
-+#endif
-+
-+# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
-+    /*
-+     * Change our process group.  On some systems/shells a CTRL-C in the
-+     * shell where Vim was started would otherwise kill gvim!
-+     */
- #  if defined(HAVE_SETSID)
--	    (void)setsid();
-+    (void)setsid();
- #  else
--	    (void)setpgid(0, 0);
-+    (void)setpgid(0, 0);
- #  endif
- # endif
--	if (!pipe_error)
--	{
--	    close(pipefd[0]);
--	    close(pipefd[1]);
--	}
-+    if (!pipe_error)
-+	close(pipefd[0]);
- 
- # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
--	/* Tell the session manager our new PID */
--	gui_mch_forked();
-+    /* Tell the session manager our new PID */
-+    gui_mch_forked();
- # endif
-+
-+    /* Try to start the GUI */
-+    gui_attempt_start();
-+
-+    /* Notify the parent */
-+    if (!pipe_error)
-+    {
-+	if (gui.in_use)
-+	    write_eintr(pipefd[1], "ok", 3);
-+	else
-+	    write_eintr(pipefd[1], "fail", 5);
-+	close(pipefd[1]);
-     }
--#else
--# if defined(__QNXNTO__)
--    if (gui.in_use && dofork)
--	procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
--		PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
--# endif
--#endif
- 
--#ifdef FEAT_AUTOCMD
--    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
--     * the GUIFailed event. */
--    gui_mch_update();
--    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
--						   NULL, NULL, FALSE, curbuf);
-+    /* If we failed to start the GUI, exit now. */
-+    if (!gui.in_use)
-+	exit(1);
- #endif
-+}
- 
--    --recursive;
-+/*
-+ * Read from a pipe assumed to be connected to the child process (this
-+ * function is called from the parent).
-+ * Return GUI_CHILD_OK if the child successfully started the GUI,
-+ * GUY_CHILD_FAILED if the child failed, or GUI_CHILD_IO_ERROR if there was
-+ * some other error.
-+ *
-+ * The file descriptor will be closed before the function returns.
-+ */
-+    static int
-+gui_read_child_pipe(int fd)
-+{
-+    long	bytes_read;
-+#define READ_BUFFER_SIZE 10
-+    char	buffer[READ_BUFFER_SIZE];
-+
-+    bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1);
-+#undef READ_BUFFER_SIZE
-+    close(fd);
-+    if (bytes_read < 0)
-+	return GUI_CHILD_IO_ERROR;
-+    buffer[bytes_read] = NUL;
-+    if (strcmp(buffer, "ok") == 0)
-+	return GUI_CHILD_OK;
-+    return GUI_CHILD_FAILED;
- }
- 
-+#endif /* MAY_FORK */
-+
- /*
-  * Call this when vim starts up, whether or not the GUI is started
-  */
-@@ -291,7 +441,17 @@
- #ifdef ALWAYS_USE_GUI
-     result = OK;
- #else
-+# ifdef FEAT_GUI_GTK
-+    /*
-+     * Note: Don't call gtk_init_check() before fork, it will be called after
-+     * the fork. When calling it before fork, it make vim hang for a while.
-+     * See gui_do_fork().
-+     * Use a simpler check if the GUI window can probably be opened.
-+     */
-+    result = gui.dofork ? gui_mch_early_init_check() : gui_mch_init_check();
-+# else
-     result = gui_mch_init_check();
-+# endif
- #endif
-     return result;
- }
-@@ -623,11 +783,9 @@
- gui_exit(rc)
-     int		rc;
- {
--#ifndef __BEOS__
-     /* don't free the fonts, it leads to a BUS error
-      * richard@whitequeen.com Jul 99 */
-     free_highlight_fonts();
--#endif
-     gui.in_use = FALSE;
-     gui_mch_exit(rc);
- }
-@@ -1392,7 +1550,7 @@
-     if (!gui.shell_created)
- 	return;
- 
--#ifdef MSWIN
-+#if defined(MSWIN) || defined(FEAT_GUI_GTK)
-     /* If not setting to a user specified size and maximized, calculate the
-      * number of characters that fit in the maximized window. */
-     if (!mustset && gui_mch_maximized())
-@@ -2146,7 +2304,7 @@
- 
-     if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
-     {
--#if defined(AMIGA) || defined(RISCOS)
-+#if defined(AMIGA)
- 	gui_mch_set_colors(bg_color, fg_color);
- #else
- 	gui_mch_set_fg_color(bg_color);
-@@ -2155,7 +2313,7 @@
-     }
-     else
-     {
--#if defined(AMIGA) || defined(RISCOS)
-+#if defined(AMIGA)
- 	gui_mch_set_colors(fg_color, bg_color);
- #else
- 	gui_mch_set_fg_color(fg_color);
-@@ -2183,7 +2341,7 @@
-     if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
- 	return FAIL;
- 
--#if defined(RISCOS) || defined(FEAT_GUI_GTK)
-+#if defined(FEAT_GUI_GTK)
-     /* If there's no italic font, then fake it.
-      * For GTK2, we don't need a different font for italic style. */
-     if (hl_mask_todo & HL_ITALIC)
-@@ -2352,7 +2510,7 @@
-     if (draw_sign)
- 	/* Draw the sign on top of the spaces. */
- 	gui_mch_drawsign(gui.row, col, gui.highlight_mask);
--# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_MOTIF) \
-+# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_X11) \
- 	|| defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32))
-     if (multi_sign)
- 	netbeans_draw_multisign_indicator(gui.row);
-@@ -2975,26 +3133,11 @@
- 	    did_clip = TRUE;
- 	}
- 	/* Allow the left button to start the selection */
--	else if (button ==
--# ifdef RISCOS
--		/* Only start a drag on a drag event. Otherwise
--		 * we don't get a release event. */
--		    MOUSE_DRAG
--# else
--		    MOUSE_LEFT
--# endif
--				)
--	{
--	    clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
--	    did_clip = TRUE;
--	}
--# ifdef RISCOS
- 	else if (button == MOUSE_LEFT)
- 	{
--	    clip_clear_selection();
-+	    clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
- 	    did_clip = TRUE;
- 	}
--# endif
- 
- 	/* Always allow pasting */
- 	if (button != MOUSE_MIDDLE)
-@@ -3008,7 +3151,7 @@
-     }
- 
-     if (clip_star.state != SELECT_CLEARED && !did_clip)
--	clip_clear_selection();
-+	clip_clear_selection(&clip_star);
- #endif
- 
-     /* Don't put events in the input queue now. */
-@@ -4893,7 +5036,7 @@
- 		if (STRLEN(p) > 2000)
- 		    STRCPY(p + 2000 - 14, "...(truncated)");
- 		(void)do_dialog(VIM_ERROR, (char_u *)_("Error"),
--					      p, (char_u *)_("&Ok"), 1, NULL);
-+				       p, (char_u *)_("&Ok"), 1, NULL, FALSE);
- 		break;
- 	    }
- 	ga_clear(&error_ga);
-diff -Naur vim73.orig/src/gui.h vim73/src/gui.h
---- vim73.orig/src/gui.h	2010-07-17 19:40:58.000000000 +0000
-+++ vim73/src/gui.h	2012-11-01 20:35:42.000000000 +0000
-@@ -52,10 +52,6 @@
- # include <SegLoad.h>*/
- #endif
- 
--#ifdef RISCOS
--# include "gui_riscos.h"
--#endif
--
- #ifdef FEAT_GUI_PHOTON
- # include <Ph.h>
- # include <Pt.h>
-@@ -151,7 +147,7 @@
- #define DRAW_BOLD		0x02	/* draw bold text */
- #define DRAW_UNDERL		0x04	/* draw underline text */
- #define DRAW_UNDERC		0x08	/* draw undercurl text */
--#if defined(RISCOS) || defined(FEAT_GUI_GTK)
-+#if defined(FEAT_GUI_GTK)
- # define DRAW_ITALIC		0x10	/* draw italic text */
- #endif
- #define DRAW_CURSOR		0x20	/* drawing block cursor (win32) */
-@@ -219,9 +215,6 @@
- #ifdef FEAT_GUI_MAC
-     ControlHandle id;		/* A handle to the scrollbar */
- #endif
--#ifdef RISCOS
--    int		id;		/* Window handle of scrollbar window */
--#endif
- #ifdef FEAT_GUI_PHOTON
-     PtWidget_t	*id;
- #endif
-@@ -408,6 +401,8 @@
-     GtkAccelGroup *accel_group;
-     GtkWidget	*filedlg;	    /* file selection dialog */
-     char_u	*browse_fname;	    /* file name from filedlg */
-+
-+    guint32	event_time;
- #endif	/* FEAT_GUI_GTK */
- 
- #if defined(FEAT_GUI_TABLINE) \
-@@ -450,14 +445,6 @@
-     int		visibility;	    /* Is window partially/fully obscured? */
- #endif
- 
--#ifdef RISCOS
--    int		window_handle;
--    char_u	*window_title;
--    int		window_title_size;
--    int		fg_colour;		/* in 0xBBGGRR format */
--    int		bg_colour;
--#endif
--
- #ifdef FEAT_GUI_PHOTON
-     PtWidget_t	*vimWindow;		/* PtWindow */
-     PtWidget_t	*vimTextArea;		/* PtRaw */
-diff -Naur vim73.orig/src/gui_athena.c vim73/src/gui_athena.c
---- vim73.orig/src/gui_athena.c	2010-08-08 13:01:39.000000000 +0000
-+++ vim73/src/gui_athena.c	2012-11-01 20:35:40.000000000 +0000
-@@ -2117,13 +2117,14 @@
- }
- 
-     int
--gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield)
-+gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
-     int		type UNUSED;
-     char_u	*title;
-     char_u	*message;
-     char_u	*buttons;
-     int		dfltbutton UNUSED;
-     char_u	*textfield;
-+    int		ex_cmd UNUSED;
- {
-     char_u		*buts;
-     char_u		*p, *next;
-diff -Naur vim73.orig/src/gui_beval.c vim73/src/gui_beval.c
---- vim73.orig/src/gui_beval.c	2010-06-25 02:59:43.000000000 +0000
-+++ vim73/src/gui_beval.c	2012-11-01 20:35:48.000000000 +0000
-@@ -359,7 +359,7 @@
- 			}
- 		    }
- 
--		    col = vcol2col(wp, lnum, col) - 1;
-+		    col = vcol2col(wp, lnum, col);
- 
- 		    if (VIsual_active
- 			    && wp->w_buffer == curwin->w_buffer
-@@ -377,8 +377,10 @@
- 			    return FAIL;
- 
- 			lbuf = ml_get_buf(curwin->w_buffer, VIsual.lnum, FALSE);
--			lbuf = vim_strnsave(lbuf + spos->col,
--				     epos->col - spos->col + (*p_sel != 'e'));
-+			len = epos->col - spos->col;
-+			if (*p_sel != 'e')
-+			    len += MB_PTR2LEN(lbuf + epos->col);
-+			lbuf = vim_strnsave(lbuf + spos->col, len);
- 			lnum = spos->lnum;
- 			col = spos->col;
- 		    }
-diff -Naur vim73.orig/src/gui_gtk.c vim73/src/gui_gtk.c
---- vim73.orig/src/gui_gtk.c	2010-07-20 11:15:22.000000000 +0000
-+++ vim73/src/gui_gtk.c	2012-11-01 20:35:48.000000000 +0000
-@@ -90,6 +90,13 @@
- static void entry_activate_cb(GtkWidget *widget, gpointer data);
- static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
- static void find_replace_cb(GtkWidget *widget, gpointer data);
-+#if defined(FEAT_BROWSE) || defined(PROTO)
-+static void recent_func_log_func(
-+	const gchar *log_domain,
-+	GLogLevelFlags log_level,
-+	const gchar *message,
-+	gpointer user_data);
-+#endif
- 
- #if defined(FEAT_TOOLBAR)
- /*
-@@ -772,9 +779,6 @@
- /*
-  * Implementation of the file selector related stuff
-  */
--#if GTK_CHECK_VERSION(2,4,0)
--# define USE_FILE_CHOOSER
--#endif
- 
- #ifndef USE_FILE_CHOOSER
-     static void
-@@ -833,12 +837,14 @@
- 	       char_u *dflt,
- 	       char_u *ext UNUSED,
- 	       char_u *initdir,
--	       char_u *filter UNUSED)
-+	       char_u *filter)
- {
- #ifdef USE_FILE_CHOOSER
-     GtkWidget		*fc;
- #endif
-     char_u		dirbuf[MAXPATHL];
-+    guint		log_handler;
-+    const gchar		*domain = "Gtk";
- 
-     title = CONVERT_TO_UTF8(title);
- 
-@@ -853,6 +859,11 @@
-     /* If our pointer is currently hidden, then we should show it. */
-     gui_mch_mousehide(FALSE);
- 
-+    /* Hack: The GTK file dialog warns when it can't access a new file, this
-+     * makes it shut up. http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
-+    log_handler = g_log_set_handler(domain, G_LOG_LEVEL_WARNING,
-+						  recent_func_log_func, NULL);
-+
- #ifdef USE_FILE_CHOOSER
-     /* We create the dialog each time, so that the button text can be "Open"
-      * or "Save" according to the action. */
-@@ -865,6 +876,46 @@
- 	    NULL);
-     gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
- 						       (const gchar *)dirbuf);
-+
-+    if (filter != NULL && *filter != NUL)
-+    {
-+	int     i = 0;
-+	char_u  *patt;
-+	char_u  *p = filter;
-+	GtkFileFilter	*gfilter;
-+
-+	gfilter = gtk_file_filter_new();
-+	patt = alloc(STRLEN(filter));
-+	while (p != NULL && *p != NUL)
-+	{
-+	    if (*p == '\n' || *p == ';' || *p == '\t')
-+	    {
-+		STRNCPY(patt, filter, i);
-+		patt[i] = '\0';
-+		if (*p == '\t')
-+		    gtk_file_filter_set_name(gfilter, (gchar *)patt);
-+		else
-+		{
-+		    gtk_file_filter_add_pattern(gfilter, (gchar *)patt);
-+		    if (*p == '\n')
-+		    {
-+			gtk_file_chooser_add_filter((GtkFileChooser *)fc,
-+								     gfilter);
-+			if (*(p + 1) != NUL)
-+			    gfilter = gtk_file_filter_new();
-+		    }
-+		}
-+		filter = ++p;
-+		i = 0;
-+	    }
-+	    else
-+	    {
-+		p++;
-+		i++;
-+	    }
-+	}
-+	vim_free(patt);
-+    }
-     if (saving && dflt != NULL && *dflt != NUL)
- 	gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt);
- 
-@@ -916,6 +967,7 @@
-     gtk_widget_show(gui.filedlg);
-     gtk_main();
- #endif
-+    g_log_remove_handler(domain, log_handler);
- 
-     CONVERT_TO_UTF8_FREE(title);
-     if (gui.browse_fname == NULL)
-@@ -1268,7 +1320,8 @@
- 	       char_u	*message,   /* message text */
- 	       char_u	*buttons,   /* names of buttons */
- 	       int	def_but,    /* default button */
--	       char_u	*textfield) /* text for textfield or NULL */
-+	       char_u	*textfield, /* text for textfield or NULL */
-+	       int	ex_cmd UNUSED)
- {
-     GtkWidget	*dialog;
-     GtkWidget	*entry = NULL;
-@@ -1287,6 +1340,9 @@
- 	entry = gtk_entry_new();
- 	gtk_widget_show(entry);
- 
-+	/* Make Enter work like pressing OK. */
-+	gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
-+
- 	text = CONVERT_TO_UTF8(textfield);
- 	gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
- 	CONVERT_TO_UTF8_FREE(text);
-@@ -1387,7 +1443,7 @@
-     gtk_menu_popup(GTK_MENU(menu->submenu_id),
- 		   NULL, NULL,
- 		   (GtkMenuPositionFunc)NULL, NULL,
--		   3U, (guint32)GDK_CURRENT_TIME);
-+		   3U, gui.event_time);
- }
- 
- /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
-@@ -1795,7 +1851,6 @@
-     char_u		*repl_text;
-     gboolean		direction_down;
-     SharedFindReplace	*sfr;
--    int			rc;
- 
-     flags = (int)(long)data;	    /* avoid a lint warning here */
- 
-@@ -1821,7 +1876,7 @@
- 
-     repl_text = CONVERT_FROM_UTF8(repl_text);
-     find_text = CONVERT_FROM_UTF8(find_text);
--    rc = gui_do_findrepl(flags, find_text, repl_text, direction_down);
-+    gui_do_findrepl(flags, find_text, repl_text, direction_down);
-     CONVERT_FROM_UTF8_FREE(repl_text);
-     CONVERT_FROM_UTF8_FREE(find_text);
- }
-@@ -1879,3 +1934,15 @@
-      * backwards compatibility anyway. */
-     do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
- }
-+
-+#if defined(FEAT_BROWSE) || defined(PROTO)
-+    static void
-+recent_func_log_func(const gchar *log_domain UNUSED,
-+		     GLogLevelFlags log_level UNUSED,
-+		     const gchar *message UNUSED,
-+		     gpointer user_data UNUSED)
-+{
-+    /* We just want to suppress the warnings. */
-+    /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
-+}
-+#endif
-diff -Naur vim73.orig/src/gui_gtk_x11.c vim73/src/gui_gtk_x11.c
---- vim73.orig/src/gui_gtk_x11.c	2010-08-15 11:52:15.000000000 +0000
-+++ vim73/src/gui_gtk_x11.c	2012-11-01 20:35:46.000000000 +0000
-@@ -86,7 +86,6 @@
- 
- #ifdef HAVE_X11_SUNKEYSYM_H
- # include <X11/Sunkeysym.h>
--static guint32 clipboard_event_time = CurrentTime;
- #endif
- 
- /*
-@@ -933,7 +932,7 @@
-     guint	state;
-     char_u	*s, *d;
- 
--    clipboard_event_time = event->time;
-+    gui.event_time = event->time;
-     key_sym = event->keyval;
-     state = event->state;
- 
-@@ -1128,7 +1127,7 @@
- 		  GdkEventKey *event,
- 		  gpointer data UNUSED)
- {
--    clipboard_event_time = event->time;
-+    gui.event_time = event->time;
-     /*
-      * GTK+ 2 input methods may do fancy stuff on key release events too.
-      * With the default IM for instance, you can enter any UCS code point
-@@ -1172,7 +1171,7 @@
-     char_u	    *tmpbuf = NULL;
-     guchar	    *tmpbuf_utf8 = NULL;
-     int		    len;
--    int		    motion_type;
-+    int		    motion_type = MAUTO;
- 
-     if (data->selection == clip_plus.gtk_sel_atom)
- 	cbd = &clip_plus;
-@@ -1181,7 +1180,6 @@
- 
-     text = (char_u *)data->data;
-     len  = data->length;
--    motion_type = MCHAR;
- 
-     if (text == NULL || len <= 0)
-     {
-@@ -1416,7 +1414,29 @@
- }
- 
- /*
-- * Check if the GUI can be started.  Called before gvimrc is sourced.
-+ * Check if the GUI can be started.  Called before gvimrc is sourced and
-+ * before fork().
-+ * Return OK or FAIL.
-+ */
-+    int
-+gui_mch_early_init_check(void)
-+{
-+    char_u *p;
-+
-+    /* Guess that when $DISPLAY isn't set the GUI can't start. */
-+    p = mch_getenv((char_u *)"DISPLAY");
-+    if (p == NULL || *p == NUL)
-+    {
-+	gui.dying = TRUE;
-+	EMSG(_((char *)e_opendisp));
-+	return FAIL;
-+    }
-+    return OK;
-+}
-+
-+/*
-+ * Check if the GUI can be started.  Called before gvimrc is sourced but after
-+ * fork().
-  * Return OK or FAIL.
-  */
-     int
-@@ -1622,7 +1642,7 @@
-     int x, y;
-     int_u vim_modifiers;
- 
--    clipboard_event_time = event->time;
-+    gui.event_time = event->time;
- 
-     /* Make sure we have focus now we've been selected */
-     if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
-@@ -1733,7 +1753,7 @@
-     int x, y;
-     int_u vim_modifiers;
- 
--    clipboard_event_time = event->time;
-+    gui.event_time = event->time;
- 
-     /* Remove any motion "machine gun" timers used for automatic further
-        extension of allocation areas if outside of the applications window
-@@ -3052,7 +3072,7 @@
- 
-     for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
-     {
--	/* OpenOffice tries to use TARGET_HTML and fails when it doesn't
-+	/* OpenOffice tries to use TARGET_HTML and fails when we don't
- 	 * return something, instead of trying another target. Therefore only
- 	 * offer TARGET_HTML when it works. */
- 	if (!clip_html && selection_targets[i].info == TARGET_HTML)
-@@ -3083,7 +3103,7 @@
- 
-     for (i = 0; i < (int)N_DND_TARGETS; ++i)
-     {
--	if (!clip_html && selection_targets[i].info == TARGET_HTML)
-+	if (!clip_html && dnd_targets[i].info == TARGET_HTML)
- 	    n_targets--;
- 	else
- 	    targets[j++] = dnd_targets[i];
-@@ -3093,7 +3113,7 @@
-     gtk_drag_dest_set(gui.drawarea,
- 		      GTK_DEST_DEFAULT_ALL,
- 		      targets, n_targets,
--		      GDK_ACTION_COPY);
-+		      GDK_ACTION_COPY | GDK_ACTION_MOVE);
- }
- 
- /*
-@@ -3902,6 +3922,21 @@
- }
- 
- /*
-+ * Called when the font changed while the window is maximized.  Compute the
-+ * new Rows and Columns.  This is like resizing the window.
-+ */
-+    void
-+gui_mch_newfont()
-+{
-+    int w, h;
-+
-+    gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
-+    w -= get_menu_tool_width();
-+    h -= get_menu_tool_height();
-+    gui_resize_shell(w, h);
-+}
-+
-+/*
-  * Set the windows size.
-  */
-     void
-@@ -4411,14 +4446,9 @@
- 
-     if (gui_mch_maximized())
-     {
--	int w, h;
--
- 	/* Update lines and columns in accordance with the new font, keep the
- 	 * window maximized. */
--	gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
--	w -= get_menu_tool_width();
--	h -= get_menu_tool_height();
--	gui_resize_shell(w, h);
-+	gui_mch_newfont();
-     }
-     else
-     {
-@@ -5419,7 +5449,7 @@
- 	}
- 
- #if defined(FEAT_NETBEANS_INTG)
--	/* Process the queued netbeans messages. */
-+	/* Process any queued netbeans messages. */
- 	netbeans_parse_messages();
- #endif
- 
-@@ -5654,7 +5684,7 @@
-     int success;
- 
-     success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
--				      clipboard_event_time);
-+				      gui.event_time);
-     gui_mch_update();
-     return (success) ? OK : FAIL;
- }
-diff -Naur vim73.orig/src/gui_mac.c vim73/src/gui_mac.c
---- vim73.orig/src/gui_mac.c	2010-08-14 19:39:54.000000000 +0000
-+++ vim73/src/gui_mac.c	2012-11-01 20:35:44.000000000 +0000
-@@ -1480,7 +1480,7 @@
-  *
-  *  Returns the index inside the menu wher
-  */
--    short /* Shoulde we return MenuItemIndex? */
-+    short /* Should we return MenuItemIndex? */
- gui_mac_get_menu_item_index(vimmenu_T *pMenu)
- {
-     short	index;
-@@ -1823,7 +1823,7 @@
- 	p.h += gui.scrollbar_width;
-     if (gui.which_scrollbars[SBAR_RIGHT])
- 	p.h += gui.scrollbar_width;
--    /* ideal height is as heigh as we can get */
-+    /* ideal height is as high as we can get */
-     p.v = 15 * 1024;
- 
-     thePart = IsWindowInStandardState(whichWindow, &p, &r)
-@@ -1840,7 +1840,7 @@
- 	p.v -= gui.scrollbar_height;
-     p.v -= p.v % gui.char_height;
-     p.v += 2 * gui.border_width;
--    if (gui.which_scrollbars[SBAR_BOTTOM]);
-+    if (gui.which_scrollbars[SBAR_BOTTOM])
- 	p.v += gui.scrollbar_height;
- 
-     ZoomWindowIdeal(whichWindow, thePart, &p);
-@@ -3216,7 +3216,7 @@
- {
-     /* TODO:
-      * This proc is called when Normal is set to a value
--     * so what msut be done? I don't know
-+     * so what must be done? I don't know
-      */
- }
- 
-@@ -3303,7 +3303,6 @@
-     *x = bounds.left;
-     *y = bounds.top;
-     return OK;
--    return FAIL;
- }
- 
- /*
-@@ -4481,7 +4480,7 @@
- 	 * event arrives.  No need to check for input_buf_full because we are
- 	 * returning as soon as it contains a single char.
- 	 */
--	/* TODO: reduce wtime accordinly???  */
-+	/* TODO: reduce wtime accordingly???  */
- 	if (wtime > -1)
- 	    sleeppyTick = 60 * wtime / 1000;
- 	else
-@@ -4671,7 +4670,7 @@
-     if (flavor)
- 	type = **textOfClip;
-     else
--	type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
-+	type = MAUTO;
- 
-     tempclip = lalloc(scrapSize + 1, TRUE);
-     mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
-@@ -5583,7 +5582,8 @@
-     char_u	*message,
-     char_u	*buttons,
-     int		dfltbutton,
--    char_u	*textfield)
-+    char_u	*textfield,
-+    int		ex_cmd)
- {
-     Handle	buttonDITL;
-     Handle	iconDITL;
-@@ -5723,13 +5723,13 @@
-     iconDITL = GetResource('DITL', 131);
-     switch (type)
-     {
--	case VIM_GENERIC:  useIcon = kNoteIcon;
--	case VIM_ERROR:    useIcon = kStopIcon;
--	case VIM_WARNING:  useIcon = kCautionIcon;
--	case VIM_INFO:     useIcon = kNoteIcon;
--	case VIM_QUESTION: useIcon = kNoteIcon;
--	default:      useIcon = kStopIcon;
--    };
-+	case VIM_GENERIC:
-+	case VIM_INFO:
-+	case VIM_QUESTION: useIcon = kNoteIcon; break;
-+	case VIM_WARNING:  useIcon = kCautionIcon; break;
-+	case VIM_ERROR:    useIcon = kStopIcon; break;
-+	default:           useIcon = kStopIcon;
-+    }
-     AppendDITL(theDialog, iconDITL, overlayDITL);
-     ReleaseResource(iconDITL);
-     GetDialogItem(theDialog, iconItm.idx, &itemType, &itemHandle, &box);
-@@ -5892,7 +5892,7 @@
- 
-     return itemHit;
- /*
-- * Usefull thing which could be used
-+ * Useful thing which could be used
-  * SetDialogTimeout(): Auto click a button after timeout
-  * SetDialogTracksCursor() : Get the I-beam cursor over input box
-  * MoveDialogItem():	    Probably better than SetDialogItem
-@@ -6100,7 +6100,7 @@
- #endif
- 
- /*
-- * Transfered from os_mac.c for MacOS X using os_unix.c prep work
-+ * Transferred from os_mac.c for MacOS X using os_unix.c prep work
-  */
- 
-     int
-@@ -6543,7 +6543,7 @@
- static ControlRef dataBrowser = NULL;
- 
- // when the tabline is hidden, vim doesn't call update_tabline(). When
--// the tabline is shown again, show_tabline() is called before upate_tabline(),
-+// the tabline is shown again, show_tabline() is called before update_tabline(),
- // and because of this, the tab labels and vims internal tabs are out of sync
- // for a very short time. to prevent inconsistent state, we store the labels
- // of the tabs, not pointers to the tabs (which are invalid for a short time).
-diff -Naur vim73.orig/src/gui_motif.c vim73/src/gui_motif.c
---- vim73.orig/src/gui_motif.c	2010-08-08 13:04:15.000000000 +0000
-+++ vim73/src/gui_motif.c	2012-11-01 20:35:40.000000000 +0000
-@@ -2549,13 +2549,14 @@
- #endif
- 
-     int
--gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield)
-+gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield, ex_cmd)
-     int		type UNUSED;
-     char_u	*title;
-     char_u	*message;
-     char_u	*button_names;
-     int		dfltbutton;
-     char_u	*textfield;		/* buffer of size IOSIZE */
-+    int		ex_cmd UNUSED;
- {
-     char_u		*buts;
-     char_u		*p, *next;
-diff -Naur vim73.orig/src/gui_photon.c vim73/src/gui_photon.c
---- vim73.orig/src/gui_photon.c	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/gui_photon.c	2012-11-01 20:35:43.000000000 +0000
-@@ -32,9 +32,9 @@
- #endif
- 
- #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
--#define RGB(r,g,b) PgRGB(r,g,b)
-+#define RGB(r, g, b) PgRGB(r, g, b)
- 
--#define EVENT_BUFFER_SIZE sizeof( PhEvent_t ) + 1000
-+#define EVENT_BUFFER_SIZE sizeof(PhEvent_t) + 1000
- 
- /* Some defines for gui_mch_mousehide() */
- #define MOUSE_HIDE		TRUE
-@@ -206,53 +206,53 @@
- static PtCallbackF_t gui_ph_handle_menu_unrealized;
- 
- #ifdef USE_PANEL_GROUP
--static void gui_ph_get_panelgroup_margins( short*, short*, short*, short* );
-+static void gui_ph_get_panelgroup_margins(short*, short*, short*, short*);
- #endif
- 
- #ifdef FEAT_TOOLBAR
--static PhImage_t *gui_ph_toolbar_find_icon( vimmenu_T *menu );
-+static PhImage_t *gui_ph_toolbar_find_icon(vimmenu_T *menu);
- #endif
- 
--static void gui_ph_draw_start( void );
--static void gui_ph_draw_end( void );
-+static void gui_ph_draw_start(void);
-+static void gui_ph_draw_end(void);
- 
- /* Set the text for the balloon */
--static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
-+static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
- 			     PtWidget_t *widget,
- 			     int position,
- 			     char *text,
- 			     char *font,
- 			     PgColor_t fill_color,
--			     PgColor_t text_color );
-+			     PgColor_t text_color);
- 
- /****************************************************************************/
- 
--static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
-+static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
- 			     PtWidget_t *widget,
- 			     int position,
- 			     char *text,
- 			     char *font,
- 			     PgColor_t fill_color,
--			     PgColor_t text_color )
-+			     PgColor_t text_color)
- {
-     PtArg_t arg;
-     vimmenu_T *menu;
-     char_u  *tooltip;
- 
--    PtSetArg( &arg, Pt_ARG_POINTER, &menu, 0 );
--    PtGetResources( widget, 1, &arg );
-+    PtSetArg(&arg, Pt_ARG_POINTER, &menu, 0);
-+    PtGetResources(widget, 1, &arg);
- 
-     /* Override the text and position */
- 
-     tooltip = text;
--    if( menu != NULL )
-+    if (menu != NULL)
-     {
- 	int index = MENU_INDEX_TIP;
--	if( menu->strings[ index ] != NULL )
-+	if (menu->strings[ index ] != NULL)
- 	    tooltip = menu->strings[ index ];
-     }
- 
--    return( PtInflateBalloon(
-+    return PtInflateBalloon(
- 	    window,
- 	    widget,
- 	    /* Don't put the balloon at the bottom,
-@@ -261,25 +261,25 @@
- 	    tooltip,
- 	    font,
- 	    fill_color,
--	    text_color ) );
-+	    text_color);
- }
- 
-     static void
--gui_ph_resize_container( void )
-+gui_ph_resize_container(void)
- {
-     PhArea_t area;
- 
--    PtWidgetArea( gui.vimWindow, &area );
--    PtWidgetPos ( gui.vimContainer, &area.pos );
-+    PtWidgetArea(gui.vimWindow, &area);
-+    PtWidgetPos (gui.vimContainer, &area.pos);
- 
--    PtSetResource( gui.vimContainer, Pt_ARG_AREA, &area, 0 );
-+    PtSetResource(gui.vimContainer, Pt_ARG_AREA, &area, 0);
- }
- 
-     static int
- gui_ph_handle_menu_resize(
- 	PtWidget_t *widget,
- 	void *other,
--	PtCallbackInfo_t *info )
-+	PtCallbackInfo_t *info)
- {
-     PtContainerCallback_t *sizes = info->cbdata;
-     PtWidget_t		*container;
-@@ -291,7 +291,7 @@
-     /* Because vim treats the toolbar and menubar separately,
-      * and here they're lumped together into a PtToolbarGroup,
-      * we only need either menu_height or toolbar_height set at once */
--    if( gui.menu_is_active )
-+    if (gui.menu_is_active)
-     {
- 	gui.menu_height = height;
- 	gui.toolbar_height = 0;
-@@ -310,16 +310,16 @@
-     container = gui.vimContainer;
- #endif
- 
--    PtSetResource( container, Pt_ARG_POS, &below_menu, 0 );
-+    PtSetResource(container, Pt_ARG_POS, &below_menu, 0);
- 
-     gui_ph_resize_container();
- 
- #ifdef USE_PANEL_GROUP
-     gui_ph_get_panelgroup_margins(
- 	    &pg_margin_top, &pg_margin_bottom,
--	    &pg_margin_left, &pg_margin_right );
-+	    &pg_margin_left, &pg_margin_right);
- #endif
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
- /*
-@@ -330,23 +330,23 @@
- gui_ph_handle_timer_cursor(
- 	PtWidget_t *widget,
- 	void *data,
--	PtCallbackInfo_t *info )
-+	PtCallbackInfo_t *info)
- {
--    if( blink_state == BLINK_ON )
-+    if (blink_state == BLINK_ON)
-     {
- 	gui_undraw_cursor();
- 	blink_state = BLINK_OFF;
--	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
--		blink_offtime, 0 );
-+	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-+		blink_offtime, 0);
-     }
-     else
-     {
- 	gui_update_cursor(TRUE, FALSE);
- 	blink_state = BLINK_ON;
--	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
--		blink_ontime, 0 );
-+	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-+		blink_ontime, 0);
-     }
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
-     static int
-@@ -354,25 +354,25 @@
- {
-     is_timeout = TRUE;
- 
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
-     static int
--gui_ph_handle_window_cb( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_handle_window_cb(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
-     PhWindowEvent_t *we = info->cbdata;
-     ushort_t *width, *height;
- 
--    switch( we->event_f ) {
-+    switch (we->event_f) {
- 	case Ph_WM_CLOSE:
- 	    gui_shell_closed();
- 	    break;
- 
- 	case Ph_WM_FOCUS:
- 	    /* Just in case it's hidden and needs to be shown */
--	    gui_mch_mousehide( MOUSE_SHOW );
-+	    gui_mch_mousehide(MOUSE_SHOW);
- 
--	    if( we->event_state == Ph_WM_EVSTATE_FOCUS )
-+	    if (we->event_state == Ph_WM_EVSTATE_FOCUS)
- 	    {
- 		gui_focus_change(TRUE);
- 		gui_mch_start_blink();
-@@ -385,28 +385,28 @@
- 	    break;
- 
- 	case Ph_WM_RESIZE:
--	    PtGetResource( gui.vimWindow, Pt_ARG_WIDTH, &width, 0 );
--	    PtGetResource( gui.vimWindow, Pt_ARG_HEIGHT, &height, 0 );
-+	    PtGetResource(gui.vimWindow, Pt_ARG_WIDTH, &width, 0);
-+	    PtGetResource(gui.vimWindow, Pt_ARG_HEIGHT, &height, 0);
- #ifdef USE_PANEL_GROUP
- 	    width  -= (pg_margin_left + pg_margin_right);
- 	    height -= (pg_margin_top + pg_margin_bottom);
- #endif
--	    gui_resize_shell( *width, *height );
--	    gui_set_shellsize( FALSE, FALSE, RESIZE_BOTH );
-+	    gui_resize_shell(*width, *height);
-+	    gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
- 	    is_ignore_draw = FALSE;
--	    PtEndFlux( gui.vimContainer );
--	    PtContainerRelease( gui.vimContainer );
-+	    PtEndFlux(gui.vimContainer);
-+	    PtContainerRelease(gui.vimContainer);
- 	    break;
- 
- 	default:
- 	    break;
-     }
- 
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
-     static int
--gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_handle_scrollbar(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
-     PtScrollbarCallback_t *scroll;
-     scrollbar_T *sb;
-@@ -415,10 +415,10 @@
-     scroll = info->cbdata;
- 
-     sb = (scrollbar_T *) data;
--    if( sb != NULL )
-+    if (sb != NULL)
-     {
- 	value = scroll->position;
--	switch( scroll->action )
-+	switch (scroll->action)
- 	{
- 	    case Pt_SCROLL_DRAGGED:
- 		dragging = TRUE;
-@@ -426,107 +426,107 @@
- 
- 	    case Pt_SCROLL_SET:
- 		/* FIXME: return straight away here? */
--		return( Pt_CONTINUE );
-+		return Pt_CONTINUE;
- 		break;
- 	}
- 
- 	gui_drag_scrollbar(sb, value, dragging);
-     }
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
-     static int
--gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
-     PhKeyEvent_t    *key;
-     unsigned char   string[6];
-     int		    len, i;
-     int		    ch, modifiers;
- 
--    key = PhGetData( info->event );
-+    key = PhGetData(info->event);
- 
-     ch = modifiers = len = 0;
- 
--    if( p_mh )
--	gui_mch_mousehide( MOUSE_HIDE );
-+    if (p_mh)
-+	gui_mch_mousehide(MOUSE_HIDE);
- 
-     /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
--    if( key->key_flags & Pk_KF_Compose )
-+    if (key->key_flags & Pk_KF_Compose)
-     {
--	return( Pt_CONTINUE );
-+	return Pt_CONTINUE;
-     }
- 
--    if( (key->key_flags & Pk_KF_Cap_Valid) &&
--	    PkIsKeyDown( key->key_flags ) )
-+    if ((key->key_flags & Pk_KF_Cap_Valid) &&
-+	    PkIsKeyDown(key->key_flags))
-     {
- #ifdef FEAT_MENU
- 	/*
- 	 * Only show the menu if the Alt key is down, and the Shift & Ctrl
- 	 * keys aren't down, as well as the other conditions
- 	 */
--	if( ( ( key->key_mods & Pk_KM_Alt ) &&
--		    !( key->key_mods & Pk_KM_Shift ) &&
--		    !( key->key_mods & Pk_KM_Ctrl ) ) &&
-+	if (((key->key_mods & Pk_KM_Alt) &&
-+		    !(key->key_mods & Pk_KM_Shift) &&
-+		    !(key->key_mods & Pk_KM_Ctrl)) &&
- 	    gui.menu_is_active &&
--	    ( *p_wak == 'y' ||
--	      ( *p_wak == 'm' &&
--		gui_is_menu_shortcut( key->key_cap ) ) ) )
-+	    (*p_wak == 'y' ||
-+	      (*p_wak == 'm' &&
-+		gui_is_menu_shortcut(key->key_cap))))
- 	{
- 	    /* Fallthrough and let photon look for the hotkey */
--	    return( Pt_CONTINUE );
-+	    return Pt_CONTINUE;
- 	}
- #endif
- 
--	for( i = 0; special_keys[i].key_sym != 0; i++ )
-+	for (i = 0; special_keys[i].key_sym != 0; i++)
- 	{
--	    if( special_keys[i].key_sym == key->key_cap )
-+	    if (special_keys[i].key_sym == key->key_cap)
- 	    {
- 		len = 0;
--		if( special_keys[i].vim_code1 == NUL )
-+		if (special_keys[i].vim_code1 == NUL)
- 		    ch = special_keys[i].vim_code0;
- 		else
- 		{
- 		    /* Detect if a keypad number key has been pressed
- 		     * and change the key if Num Lock is on */
--		    if( key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
--			    && ( key->key_mods & Pk_KM_Num_Lock ) )
-+		    if (key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
-+			    && (key->key_mods & Pk_KM_Num_Lock))
- 		    {
- 			/* FIXME: For now, just map the key to a ascii value
- 			 * (see <photon/PkKeyDef.h>) */
- 			ch = key->key_cap - 0xf080;
- 		    }
- 		    else
--			ch = TO_SPECIAL( special_keys[i].vim_code0,
--				special_keys[i].vim_code1 );
-+			ch = TO_SPECIAL(special_keys[i].vim_code0,
-+				special_keys[i].vim_code1);
- 		}
- 		break;
- 	    }
- 	}
- 
--	if( key->key_mods & Pk_KM_Ctrl )
-+	if (key->key_mods & Pk_KM_Ctrl)
- 	    modifiers |= MOD_MASK_CTRL;
--	if( key->key_mods & Pk_KM_Alt )
-+	if (key->key_mods & Pk_KM_Alt)
- 	    modifiers |= MOD_MASK_ALT;
--	if( key->key_mods & Pk_KM_Shift )
-+	if (key->key_mods & Pk_KM_Shift)
- 	    modifiers |= MOD_MASK_SHIFT;
- 
- 	/* Is this not a special key? */
--	if( special_keys[i].key_sym == 0 )
-+	if (special_keys[i].key_sym == 0)
- 	{
--	    ch = PhTo8859_1( key );
--	    if( ch == -1
-+	    ch = PhTo8859_1(key);
-+	    if (ch == -1
- #ifdef FEAT_MBYTE
--		|| ( enc_utf8 && ch > 127 )
-+		|| (enc_utf8 && ch > 127)
- #endif
- 		)
- 	    {
- #ifdef FEAT_MBYTE
--		len = PhKeyToMb( string, key );
--		if( len > 0 )
-+		len = PhKeyToMb(string, key);
-+		if (len > 0)
- 		{
- 		    static char buf[6];
- 		    int src_taken, dst_made;
--		    if( enc_utf8 != TRUE )
-+		    if (enc_utf8 != TRUE)
- 		    {
- 			PxTranslateFromUTF(
- 				charset_translate,
-@@ -535,70 +535,70 @@
- 				&src_taken,
- 				buf,
- 				6,
--				&dst_made );
-+				&dst_made);
- 
--			add_to_input_buf( buf, dst_made );
-+			add_to_input_buf(buf, dst_made);
- 		    }
- 		    else
- 		    {
--			add_to_input_buf( string, len );
-+			add_to_input_buf(string, len);
- 		    }
- 
--		    return( Pt_CONSUME );
-+		    return Pt_CONSUME;
- 		}
- 		len = 0;
- #endif
- 		ch = key->key_cap;
--		if( ch < 0xff )
-+		if (ch < 0xff)
- 		{
- 		    /* FIXME: is this the right thing to do? */
--		    if( modifiers & MOD_MASK_CTRL )
-+		    if (modifiers & MOD_MASK_CTRL)
- 		    {
- 			modifiers &= ~MOD_MASK_CTRL;
- 
--			if( ( ch >= 'a'  &&  ch <= 'z' ) ||
-+			if ((ch >= 'a' && ch <= 'z') ||
- 				ch == '[' ||
- 				ch == ']' ||
--				ch == '\\' )
--			    ch = Ctrl_chr( ch );
--			else if( ch == '2' )
-+				ch == '\\')
-+			    ch = Ctrl_chr(ch);
-+			else if (ch == '2')
- 			    ch = NUL;
--			else if( ch == '6' )
-+			else if (ch == '6')
- 			    ch = 0x1e;
--			else if( ch == '-' )
-+			else if (ch == '-')
- 			    ch = 0x1f;
- 			else
- 			    modifiers |= MOD_MASK_CTRL;
- 		    }
- 
--		    if( modifiers & MOD_MASK_ALT )
-+		    if (modifiers & MOD_MASK_ALT)
- 		    {
--			ch = Meta( ch );
-+			ch = Meta(ch);
- 			modifiers &= ~MOD_MASK_ALT;
- 		    }
- 		}
- 		else
- 		{
--		    return( Pt_CONTINUE );
-+		    return Pt_CONTINUE;
- 		}
- 	    }
- 	    else
- 		modifiers &= ~MOD_MASK_SHIFT;
- 	}
- 
--	ch = simplify_key( ch, &modifiers );
--	if( modifiers )
-+	ch = simplify_key(ch, &modifiers);
-+	if (modifiers)
- 	{
- 	    string[ len++ ] = CSI;
- 	    string[ len++ ] = KS_MODIFIER;
- 	    string[ len++ ] = modifiers;
- 	}
- 
--	if( IS_SPECIAL( ch ) )
-+	if (IS_SPECIAL(ch))
- 	{
- 	    string[ len++ ] = CSI;
--	    string[ len++ ] = K_SECOND( ch );
--	    string[ len++ ] = K_THIRD( ch );
-+	    string[ len++ ] = K_SECOND(ch);
-+	    string[ len++ ] = K_THIRD(ch);
- 	}
- 	else
- 	{
-@@ -619,28 +619,28 @@
- 	    string[ len++ ] = KE_CSI;
- 	}
- 
--	if( len > 0 )
-+	if (len > 0)
- 	{
--	    add_to_input_buf( string, len );
--	    return( Pt_CONSUME );
-+	    add_to_input_buf(string, len);
-+	    return Pt_CONSUME;
- 	}
-     }
- 
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
-     static int
--gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_handle_mouse(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
-     PhPointerEvent_t *pointer;
-     PhRect_t	     *pos;
-     int		     button = 0, repeated_click, modifiers = 0x0;
-     short	     mouse_x, mouse_y;
- 
--    pointer = PhGetData( info->event );
--    pos = PhGetRects( info->event );
-+    pointer = PhGetData(info->event);
-+    pos = PhGetRects(info->event);
- 
--    gui_mch_mousehide( MOUSE_SHOW );
-+    gui_mch_mousehide(MOUSE_SHOW);
- 
-     /*
-      * Coordinates need to be relative to the base window,
-@@ -649,27 +649,27 @@
-     mouse_x = pos->ul.x + gui.border_width;
-     mouse_y = pos->ul.y + gui.border_width;
- 
--    if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
-+    if (info->event->type == Ph_EV_PTR_MOTION_NOBUTTON)
-     {
--	gui_mouse_moved( mouse_x, mouse_y );
--	return( Pt_CONTINUE );
-+	gui_mouse_moved(mouse_x, mouse_y);
-+	return Pt_CONTINUE;
-     }
- 
--    if( pointer->key_mods & Pk_KM_Shift )
-+    if (pointer->key_mods & Pk_KM_Shift)
- 	modifiers |= MOUSE_SHIFT;
--    if( pointer->key_mods & Pk_KM_Ctrl )
-+    if (pointer->key_mods & Pk_KM_Ctrl)
- 	modifiers |= MOUSE_CTRL;
--    if( pointer->key_mods & Pk_KM_Alt )
-+    if (pointer->key_mods & Pk_KM_Alt)
- 	modifiers |= MOUSE_ALT;
- 
-     /*
-      * FIXME More than one button may be involved, but for
-      * now just deal with one
-      */
--    if( pointer->buttons & Ph_BUTTON_SELECT )
-+    if (pointer->buttons & Ph_BUTTON_SELECT)
- 	button = MOUSE_LEFT;
- 
--    if( pointer->buttons & Ph_BUTTON_MENU )
-+    if (pointer->buttons & Ph_BUTTON_MENU)
-     {
- 	button = MOUSE_RIGHT;
- 	/* Need the absolute coordinates for the popup menu */
-@@ -677,65 +677,65 @@
- 	abs_mouse.y = pointer->pos.y;
-     }
- 
--    if( pointer->buttons & Ph_BUTTON_ADJUST )
-+    if (pointer->buttons & Ph_BUTTON_ADJUST)
- 	button = MOUSE_MIDDLE;
- 
-     /* Catch a real release (not phantom or other releases */
--    if( info->event->type == Ph_EV_BUT_RELEASE )
-+    if (info->event->type == Ph_EV_BUT_RELEASE)
- 	button = MOUSE_RELEASE;
- 
--    if( info->event->type & Ph_EV_PTR_MOTION_BUTTON )
-+    if (info->event->type & Ph_EV_PTR_MOTION_BUTTON)
- 	button = MOUSE_DRAG;
- 
- #if 0
-     /* Vim doesn't use button repeats */
--    if( info->event->type & Ph_EV_BUT_REPEAT )
-+    if (info->event->type & Ph_EV_BUT_REPEAT)
- 	button = MOUSE_DRAG;
- #endif
- 
-     /* Don't do anything if it is one of the phantom mouse release events */
--    if( ( button != MOUSE_RELEASE ) ||
--	    ( info->event->subtype == Ph_EV_RELEASE_REAL ) )
-+    if ((button != MOUSE_RELEASE) ||
-+	    (info->event->subtype == Ph_EV_RELEASE_REAL))
-     {
- 	repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
- 
--	gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
-+	gui_send_mouse_event(button , mouse_x, mouse_y, repeated_click, modifiers);
-     }
- 
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
- /* Handle a focus change of the PtRaw widget */
-     static int
--gui_ph_handle_focus( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_handle_focus(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
--    if( info->reason == Pt_CB_LOST_FOCUS )
-+    if (info->reason == Pt_CB_LOST_FOCUS)
-     {
--	PtRemoveEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
--		gui_ph_handle_mouse, NULL );
-+	PtRemoveEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
-+		gui_ph_handle_mouse, NULL);
- 
--	gui_mch_mousehide( MOUSE_SHOW );
-+	gui_mch_mousehide(MOUSE_SHOW);
-     }
-     else
-     {
--	PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
--		gui_ph_handle_mouse, NULL );
-+	PtAddEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
-+		gui_ph_handle_mouse, NULL);
-     }
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
-     static void
--gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
-+gui_ph_handle_raw_draw(PtWidget_t *widget, PhTile_t *damage)
- {
-     PhRect_t	*r;
-     PhPoint_t	offset;
-     PhPoint_t	translation;
- 
--    if( is_ignore_draw == TRUE )
-+    if (is_ignore_draw == TRUE)
- 	return;
- 
--    PtSuperClassDraw( PtBasic, widget, damage );
--    PgGetTranslation( &translation );
-+    PtSuperClassDraw(PtBasic, widget, damage);
-+    PgGetTranslation(&translation);
-     PgClearTranslation();
- 
- #if 0
-@@ -750,21 +750,21 @@
-     out_flush();
- #endif
- 
--    PtWidgetOffset( widget, &offset );
--    PhTranslatePoint( &offset, PtWidgetPos( gui.vimTextArea, NULL ) );
-+    PtWidgetOffset(widget, &offset);
-+    PhTranslatePoint(&offset, PtWidgetPos(gui.vimTextArea, NULL));
- 
- #if 1
-     /* Redraw individual damage regions */
--    if( damage->next != NULL )
-+    if (damage->next != NULL)
- 	damage = damage->next;
- 
--    while( damage != NULL )
-+    while (damage != NULL)
-     {
- 	r = &damage->rect;
- 	gui_redraw(
- 		r->ul.x - offset.x, r->ul.y - offset.y,
- 		r->lr.x - r->ul.x + 1,
--		r->lr.y - r->ul.y + 1 );
-+		r->lr.y - r->ul.y + 1);
- 	damage = damage->next;
-     }
- #else
-@@ -773,39 +773,39 @@
-     gui_redraw(
- 	    r->ul.x - offset.x, r->ul.y - offset.y,
- 	    r->lr.x - r->ul.x + 1,
--	    r->lr.y - r->ul.y + 1 );
-+	    r->lr.y - r->ul.y + 1);
- #endif
- 
--    PgSetTranslation( &translation, 0 );
-+    PgSetTranslation(&translation, 0);
- }
- 
-     static int
- gui_ph_handle_pulldown_menu(
- 	PtWidget_t *widget,
- 	void *data,
--	PtCallbackInfo_t *info )
-+	PtCallbackInfo_t *info)
- {
--    if( data != NULL )
-+    if (data != NULL)
-     {
- 	vimmenu_T *menu = (vimmenu_T *) data;
- 
--	PtPositionMenu( menu->submenu_id, NULL );
--	PtRealizeWidget( menu->submenu_id );
-+	PtPositionMenu(menu->submenu_id, NULL);
-+	PtRealizeWidget(menu->submenu_id);
-     }
- 
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
- /* This is used for pulldown/popup menus and also toolbar buttons */
-     static int
--gui_ph_handle_menu( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_handle_menu(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
--    if( data != NULL )
-+    if (data != NULL)
-     {
- 	vimmenu_T *menu = (vimmenu_T *) data;
--	gui_menu_cb( menu );
-+	gui_menu_cb(menu);
-     }
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
- /* Stop focus from disappearing into the menubar... */
-@@ -813,20 +813,20 @@
- gui_ph_handle_menu_unrealized(
- 	PtWidget_t *widget,
- 	void *data,
--	PtCallbackInfo_t *info )
-+	PtCallbackInfo_t *info)
- {
--    PtGiveFocus( gui.vimTextArea, NULL );
--    return( Pt_CONTINUE );
-+    PtGiveFocus(gui.vimTextArea, NULL);
-+    return Pt_CONTINUE;
- }
- 
-     static int
- gui_ph_handle_window_open(
- 	PtWidget_t *widget,
- 	void *data,
--	PtCallbackInfo_t *info )
-+	PtCallbackInfo_t *info)
- {
--    gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
--    return( Pt_CONTINUE );
-+    gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
-+    return Pt_CONTINUE;
- }
- 
- /****************************************************************************/
-@@ -836,74 +836,74 @@
- 
- /* TODO: Set a clipping rect? */
-     static void
--gui_ph_draw_start( void )
-+gui_ph_draw_start(void)
- {
-     PhGC_t *gc;
- 
-     gc = PgGetGC();
--    PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) );
--    PgClearClippingsCx( gc );
--    PgClearTranslationCx( gc );
-+    PgSetRegion(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)));
-+    PgClearClippingsCx(gc);
-+    PgClearTranslationCx(gc);
- 
--    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
--    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
-+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
-+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
- 
--    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
-+    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
- }
- 
-     static void
--gui_ph_draw_end( void )
-+gui_ph_draw_end(void)
- {
-     gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
-     gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
--    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
-+    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
- }
- 
- #ifdef USE_PANEL_GROUP
-     static vimmenu_T *
--gui_ph_find_buffer_item( char_u *name )
-+gui_ph_find_buffer_item(char_u *name)
- {
-     vimmenu_T *top_level = root_menu;
-     vimmenu_T *items = NULL;
- 
--    while( top_level != NULL &&
--	    ( STRCMP( top_level->dname, "Buffers" ) != 0 ) )
-+    while (top_level != NULL &&
-+	    (STRCMP(top_level->dname, "Buffers") != 0))
- 	top_level = top_level->next;
- 
--    if( top_level != NULL )
-+    if (top_level != NULL)
-     {
- 	items = top_level->children;
- 
--	while( items != NULL &&
--		( STRCMP( items->dname, name ) != 0 ) )
-+	while (items != NULL &&
-+		(STRCMP(items->dname, name) != 0))
- 	    items = items->next;
-     }
--    return( items );
-+    return items;
- }
- 
-     static void
--gui_ph_pg_set_buffer_num( int_u buf_num )
-+gui_ph_pg_set_buffer_num(int_u buf_num)
- {
-     int i;
-     char search[16];
-     char *mark;
- 
--    if( gui.vimTextArea == NULL || buf_num == 0 )
-+    if (gui.vimTextArea == NULL || buf_num == 0)
- 	return;
- 
-     search[0] = '(';
--    ultoa( buf_num, &search[1], 10 );
--    STRCAT( search, ")" );
-+    ultoa(buf_num, &search[1], 10);
-+    STRCAT(search, ")");
- 
--    for( i = 0; i < num_panels; i++ )
-+    for (i = 0; i < num_panels; i++)
-     {
- 	/* find the last "(" in the panel title and see if the buffer
- 	 * number in the title matches the one we're looking for */
--	mark = STRRCHR( panel_titles[ i ], '(' );
--	if( mark != NULL && STRCMP( mark, search ) == 0 )
-+	mark = STRRCHR(panel_titles[ i ], '(');
-+	if (mark != NULL && STRCMP(mark, search) == 0)
- 	{
--	    PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
--		    i, 0 );
-+	    PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
-+		    i, 0);
- 	}
-     }
- }
-@@ -912,22 +912,22 @@
- gui_ph_handle_pg_change(
- 	PtWidget_t *widget,
- 	void *data,
--	PtCallbackInfo_t *info )
-+	PtCallbackInfo_t *info)
- {
-     vimmenu_T *menu;
-     PtPanelGroupCallback_t *panel;
- 
--    if( info->event != NULL )
-+    if (info->event != NULL)
-     {
- 	panel = info->cbdata;
--	if( panel->new_panel != NULL )
-+	if (panel->new_panel != NULL)
- 	{
--	    menu = gui_ph_find_buffer_item( panel->new_panel );
--	    if( menu )
--		gui_menu_cb( menu );
-+	    menu = gui_ph_find_buffer_item(panel->new_panel);
-+	    if (menu)
-+		gui_menu_cb(menu);
- 	}
-     }
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
-     static void
-@@ -935,17 +935,17 @@
- 	short *top,
- 	short *bottom,
- 	short *left,
--	short *right )
-+	short *right)
- {
-     unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
-     const unsigned short *margin_top, *margin_bottom;
-     const unsigned short *margin_left, *margin_right;
- 
--    PtGetAbsPosition( gui.vimTextArea, &abs_raw_x, &abs_raw_y );
--    PtGetAbsPosition( gui.vimPanelGroup, &abs_panel_x, &abs_panel_y );
-+    PtGetAbsPosition(gui.vimTextArea, &abs_raw_x, &abs_raw_y);
-+    PtGetAbsPosition(gui.vimPanelGroup, &abs_panel_x, &abs_panel_y);
- 
--    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0 );
--    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0 );
-+    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0);
-+    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0);
- 
-     abs_raw_x -= abs_panel_x;
-     abs_raw_y -= abs_panel_y;
-@@ -959,85 +959,85 @@
- 
- /* Used for the tabs for PtPanelGroup */
-     static int
--gui_ph_is_buffer_item( vimmenu_T *menu, vimmenu_T *parent )
-+gui_ph_is_buffer_item(vimmenu_T *menu, vimmenu_T *parent)
- {
-     char *mark;
- 
--    if( STRCMP( parent->dname, "Buffers" ) == 0 )
-+    if (STRCMP(parent->dname, "Buffers") == 0)
-     {
- 	/* Look for '(' digits ')' */
--	mark = vim_strchr( menu->dname, '(' );
--	if( mark != NULL )
-+	mark = vim_strchr(menu->dname, '(');
-+	if (mark != NULL)
- 	{
- 	    mark++;
--	    while( isdigit( *mark ) )
-+	    while (isdigit(*mark))
- 		mark++;
- 
--	    if( *mark == ')' )
--		return( TRUE);
-+	    if (*mark == ')')
-+		return TRUE;
- 	}
-     }
--    return( FALSE );
-+    return FALSE;
- }
- 
-     static void
--gui_ph_pg_add_buffer(char *name )
-+gui_ph_pg_add_buffer(char *name)
- {
-     char **new_titles = NULL;
- 
--    new_titles = (char **) alloc( ( num_panels + 1 ) * sizeof( char ** ) );
--    if( new_titles != NULL )
-+    new_titles = (char **) alloc((num_panels + 1) * sizeof(char **));
-+    if (new_titles != NULL)
-     {
--	if( num_panels > 0 )
--	    memcpy( new_titles, panel_titles, num_panels * sizeof( char ** ) );
-+	if (num_panels > 0)
-+	    memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
- 
- 	new_titles[ num_panels++ ] = name;
- 
--	PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
--		num_panels );
-+	PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
-+		num_panels);
- 
--	vim_free( panel_titles );
-+	vim_free(panel_titles);
- 	panel_titles = new_titles;
-     }
- }
- 
-     static void
--gui_ph_pg_remove_buffer( char *name )
-+gui_ph_pg_remove_buffer(char *name)
- {
-     int i;
-     char **new_titles = NULL;
- 
-     /* If there is only 1 panel, we just use the temporary place holder */
--    if( num_panels > 1 )
-+    if (num_panels > 1)
-     {
--	new_titles = (char **) alloc( ( num_panels - 1 ) * sizeof( char ** ) );
--	if( new_titles != NULL )
-+	new_titles = (char **) alloc((num_panels - 1) * sizeof(char **));
-+	if (new_titles != NULL)
- 	{
- 	    char **s = new_titles;
- 	    /* Copy all the titles except the one we're removing */
--	    for( i = 0; i < num_panels; i++ )
-+	    for (i = 0; i < num_panels; i++)
- 	    {
--		if( STRCMP( panel_titles[ i ], name ) != 0 )
-+		if (STRCMP(panel_titles[ i ], name) != 0)
- 		{
- 		    *s++ = panel_titles[ i ];
- 		}
- 	    }
- 	    num_panels--;
- 
--	    PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
--		    num_panels );
-+	    PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
-+		    num_panels);
- 
--	    vim_free( panel_titles );
-+	    vim_free(panel_titles);
- 	    panel_titles = new_titles;
- 	}
-     }
-     else
-     {
- 	num_panels--;
--	PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
--		1 );
-+	PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
-+		1);
- 
--	vim_free( panel_titles );
-+	vim_free(panel_titles);
- 	panel_titles = NULL;
-     }
- }
-@@ -1047,38 +1047,38 @@
- gui_ph_handle_buffer_remove(
- 	PtWidget_t *widget,
- 	void *data,
--	PtCallbackInfo_t *info )
-+	PtCallbackInfo_t *info)
- {
-     vimmenu_T *menu;
- 
--    if( data != NULL )
-+    if (data != NULL)
-     {
- 	menu = (vimmenu_T *) data;
--	gui_ph_pg_remove_buffer( menu->dname );
-+	gui_ph_pg_remove_buffer(menu->dname);
-     }
- 
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- #endif
- 
-     static int
--gui_ph_pane_resize( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_pane_resize(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
--    if( PtWidgetIsRealized( widget ) )
-+    if (PtWidgetIsRealized(widget))
-     {
- 	is_ignore_draw = TRUE;
--	PtStartFlux( gui.vimContainer );
--	PtContainerHold( gui.vimContainer );
-+	PtStartFlux(gui.vimContainer);
-+	PtContainerHold(gui.vimContainer);
-     }
- 
--    return( Pt_CONTINUE );
-+    return Pt_CONTINUE;
- }
- 
- /****************************************************************************/
- 
- #ifdef FEAT_MBYTE
-     void
--gui_ph_encoding_changed( int new_encoding )
-+gui_ph_encoding_changed(int new_encoding)
- {
-     /* Default encoding is latin1 */
-     char *charset = "latin1";
-@@ -1094,13 +1094,13 @@
- 	{ DBCS_CHS, "gb" }
-     };
- 
--    for( i = 0; i < ARRAY_LENGTH( charsets ); i++ )
-+    for (i = 0; i < ARRAY_LENGTH(charsets); i++)
-     {
--	if( new_encoding == charsets[ i ].encoding )
-+	if (new_encoding == charsets[ i ].encoding)
- 	    charset = charsets[ i ].name;
-     }
- 
--    charset_translate = PxTranslateSet( charset_translate, charset );
-+    charset_translate = PxTranslateSet(charset_translate, charset);
- }
- #endif
- 
-@@ -1112,7 +1112,7 @@
-     int	    *argc;
-     char    **argv;
- {
--    PtInit( NULL );
-+    PtInit(NULL);
- }
- 
-     int
-@@ -1124,90 +1124,90 @@
-     PhDim_t	window_size = {100, 100}; /* Arbitrary values */
-     PhPoint_t	pos = {0, 0};
- 
--    gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
--    if( gui.event_buffer == NULL )
--	return( FAIL );
-+    gui.event_buffer = (PhEvent_t *) alloc(EVENT_BUFFER_SIZE);
-+    if (gui.event_buffer == NULL)
-+	return FAIL;
- 
-     /* Get a translation so we can convert from ISO Latin-1 to UTF */
--    charset_translate = PxTranslateSet( NULL, "latin1" );
-+    charset_translate = PxTranslateSet(NULL, "latin1");
- 
-     /* The +2 is for the 1 pixel dark line on each side */
-     gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
- 
-     /* Handle close events ourselves */
--    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE );
--    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
--	    Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS );
--    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
--    gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
--    if( gui.vimWindow == NULL )
--	return( FAIL );
--
--    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
--    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
--	    gui_ph_handle_window_open, NULL );
-+    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE);
-+    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
-+	    Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS);
-+    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
-+    gui.vimWindow = PtCreateWidget(PtWindow, NULL, n, args);
-+    if (gui.vimWindow == NULL)
-+	return FAIL;
-+
-+    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL);
-+    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW_OPENING,
-+	    gui_ph_handle_window_open, NULL);
- 
-     n = 0;
--    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED );
--    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_POS, &pos, 0 );
-+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED);
-+    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_POS, &pos, 0);
- 
- #ifdef USE_PANEL_GROUP
-     /* Put in a temprary place holder title */
--    PtSetArg( &args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1 );
-+    PtSetArg(&args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1);
- 
--    gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
--    if( gui.vimPanelGroup == NULL )
--	return( FAIL );
-+    gui.vimPanelGroup = PtCreateWidget(PtPanelGroup, gui.vimWindow, n, args);
-+    if (gui.vimPanelGroup == NULL)
-+	return FAIL;
- 
--    PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
--	    gui_ph_handle_pg_change, NULL );
-+    PtAddCallback(gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
-+	    gui_ph_handle_pg_change, NULL);
- #else
-     /* Turn off all edge decorations */
--    PtSetArg( &args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL );
--    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT );
--
--    gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
--    if( gui.vimContainer == NULL )
--	return( FAIL );
-+    PtSetArg(&args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL);
-+    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT);
-+
-+    gui.vimContainer = PtCreateWidget(PtPane, gui.vimWindow, n, args);
-+    if (gui.vimContainer == NULL)
-+	return FAIL;
- 
--    PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
-+    PtAddCallback(gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL);
- #endif
- 
-     /* Size for the text area is set in gui_mch_set_text_area_pos */
-     n = 0;
- 
--    PtSetArg( &args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1 );
--    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0 );
-+    PtSetArg(&args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1);
-+    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0);
-     /*
-      * Using focus render also causes the whole widget to be redrawn
-      * whenever it changes focus, which is very annoying :p
-      */
--    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
--	    Pt_GETS_FOCUS | Pt_HIGHLIGHTED );
-+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
-+	    Pt_GETS_FOCUS | Pt_HIGHLIGHTED);
- #ifndef FEAT_MOUSESHAPE
--    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0 );
-+    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0);
- #endif
- 
--    gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
--    if( gui.vimTextArea == NULL)
--	return( FAIL );
-+    gui.vimTextArea = PtCreateWidget(PtRaw, Pt_DFLT_PARENT, n, args);
-+    if (gui.vimTextArea == NULL)
-+	return FAIL;
- 
-     /* TODO: use PtAddEventHandlers instead? */
-     /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
--    PtAddEventHandler( gui.vimTextArea,
-+    PtAddEventHandler(gui.vimTextArea,
- 	    Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
--	    gui_ph_handle_mouse, NULL );
--    PtAddEventHandler( gui.vimTextArea, Ph_EV_KEY,
--	    gui_ph_handle_keyboard, NULL );
--    PtAddCallback( gui.vimTextArea, Pt_CB_GOT_FOCUS,
--	    gui_ph_handle_focus, NULL );
--    PtAddCallback( gui.vimTextArea, Pt_CB_LOST_FOCUS,
--	    gui_ph_handle_focus, NULL );
-+	    gui_ph_handle_mouse, NULL);
-+    PtAddEventHandler(gui.vimTextArea, Ph_EV_KEY,
-+	    gui_ph_handle_keyboard, NULL);
-+    PtAddCallback(gui.vimTextArea, Pt_CB_GOT_FOCUS,
-+	    gui_ph_handle_focus, NULL);
-+    PtAddCallback(gui.vimTextArea, Pt_CB_LOST_FOCUS,
-+	    gui_ph_handle_focus, NULL);
- 
-     /*
-      * Now that the text area widget has been created, set up the colours,
-@@ -1218,62 +1218,62 @@
-      * Create the two timers, not as accurate as using the kernel timer
-      * functions, but good enough
-      */
--    gui_ph_timer_cursor  = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
--    if( gui_ph_timer_cursor == NULL )
--	return( FAIL );
--
--    gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
--    if( gui_ph_timer_timeout == NULL )
--	return( FAIL );
-+    gui_ph_timer_cursor  = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
-+    if (gui_ph_timer_cursor == NULL)
-+	return FAIL;
-+
-+    gui_ph_timer_timeout = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
-+    if (gui_ph_timer_timeout == NULL)
-+	return FAIL;
- 
--    PtAddCallback( gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
-+    PtAddCallback(gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
- 	    gui_ph_handle_timer_cursor, NULL);
--    PtAddCallback( gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
-+    PtAddCallback(gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
- 	    gui_ph_handle_timer_timeout, NULL);
- 
- #ifdef FEAT_MENU
-     n = 0;
--    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
--	    Pt_IS_ANCHORED );
--    gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
--	    n, args );
--    if( gui.vimToolBarGroup == NULL )
--	return( FAIL );
-+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
-+	    Pt_IS_ANCHORED);
-+    gui.vimToolBarGroup = PtCreateWidget(PtToolbarGroup, gui.vimWindow,
-+	    n, args);
-+    if (gui.vimToolBarGroup == NULL)
-+	return FAIL;
- 
--    PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
--	    gui_ph_handle_menu_resize, NULL );
-+    PtAddCallback(gui.vimToolBarGroup, Pt_CB_RESIZE,
-+	    gui_ph_handle_menu_resize, NULL);
- 
-     n = 0;
-     flags = 0;
--    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
--    if( ! vim_strchr( p_go, GO_MENUS ) )
-+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
-+    if (! vim_strchr(p_go, GO_MENUS))
-     {
- 	flags |= Pt_DELAY_REALIZE;
--	PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags );
-+	PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags);
-     }
--    gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
--    if( gui.vimMenuBar == NULL )
--	return( FAIL );
-+    gui.vimMenuBar = PtCreateWidget(PtMenuBar, gui.vimToolBarGroup, n, args);
-+    if (gui.vimMenuBar == NULL)
-+	return FAIL;
- 
- # ifdef FEAT_TOOLBAR
-     n = 0;
- 
--    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
--	    Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED );
--    PtSetArg( &args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
--	    Pt_RESIZE_Y_AS_REQUIRED );
--    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
-+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
-+	    Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED);
-+    PtSetArg(&args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
-+	    Pt_RESIZE_Y_AS_REQUIRED);
-+    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
- 
-     flags = Pt_GETS_FOCUS;
--    if( ! vim_strchr( p_go, GO_TOOLBAR ) )
-+    if (! vim_strchr(p_go, GO_TOOLBAR))
- 	flags |= Pt_DELAY_REALIZE;
- 
--    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags );
-+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags);
- 
--    gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
--    if( gui.vimToolBar == NULL )
--	return( FAIL );
-+    gui.vimToolBar = PtCreateWidget(PtToolbar, gui.vimToolBarGroup, n, args);
-+    if (gui.vimToolBar == NULL)
-+	return FAIL;
- 
-     /*
-      * Size for the toolbar is fetched in gui_mch_show_toolbar, after
-@@ -1284,13 +1284,13 @@
- 
- #endif
- 
--    return( OK );
-+    return OK;
- }
- 
-     int
- gui_mch_init_check(void)
- {
--    return( (is_photon_available == TRUE) ? OK : FAIL );
-+    return (is_photon_available == TRUE) ? OK : FAIL;
- }
- 
-     int
-@@ -1310,20 +1310,20 @@
-     if (gui_win_x != -1 && gui_win_y != -1)
- 	gui_mch_set_winpos(gui_win_x, gui_win_y);
- 
--    return( (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL );
-+    return (PtRealizeWidget(gui.vimWindow) == 0) ? OK : FAIL;
- }
- 
-     void
- gui_mch_exit(int rc)
- {
--    PtDestroyWidget( gui.vimWindow );
-+    PtDestroyWidget(gui.vimWindow);
- 
--    PxTranslateSet( charset_translate, NULL );
-+    PxTranslateSet(charset_translate, NULL);
- 
--    vim_free( gui.event_buffer );
-+    vim_free(gui.event_buffer);
- 
- #ifdef USE_PANEL_GROUPS
--    vim_free( panel_titles );
-+    vim_free(panel_titles);
- #endif
- }
- 
-@@ -1333,10 +1333,10 @@
- /* When no events are available, photon will call this function, working is
-  * set to FALSE, and the gui_mch_update loop will exit. */
-     static int
--exit_gui_mch_update( void *data )
-+exit_gui_mch_update(void *data)
- {
-     *(int *)data = FALSE;
--    return( Pt_END );
-+    return Pt_END;
- }
- 
-     void
-@@ -1344,8 +1344,8 @@
- {
-     int working = TRUE;
- 
--    PtAppAddWorkProc( NULL, exit_gui_mch_update, &working );
--    while( ( working == TRUE ) && !vim_is_input_buf_full())
-+    PtAppAddWorkProc(NULL, exit_gui_mch_update, &working);
-+    while ((working == TRUE) && !vim_is_input_buf_full())
-     {
- 	PtProcessEvent();
-     }
-@@ -1356,23 +1356,23 @@
- {
-     is_timeout = FALSE;
- 
--    if( wtime > 0 )
--	PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0 );
-+    if (wtime > 0)
-+	PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0);
- 
--    while( 1 )
-+    while (1)
-     {
- 	PtProcessEvent();
--	if( input_available() )
-+	if (input_available())
- 	{
--	    PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
--	    return( OK );
-+	    PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0);
-+	    return OK;
- 	}
--	else if( is_timeout == TRUE )
--	    return( FAIL );
-+	else if (is_timeout == TRUE)
-+	    return FAIL;
-     }
- }
- 
--#if defined( FEAT_BROWSE ) || defined( PROTO )
-+#if defined(FEAT_BROWSE) || defined(PROTO)
- /*
-  * Put up a file requester.
-  * Returns the selected name in allocated memory, or NULL for Cancel.
-@@ -1398,12 +1398,12 @@
-     char_u  *open_text = NULL;
- 
-     flags = 0;
--    memset( &file, 0, sizeof( file ) );
-+    memset(&file, 0, sizeof(file));
- 
--    default_path = alloc( MAXPATHL + 1 + NAME_MAX + 1 );
--    if( default_path != NULL )
-+    default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1);
-+    if (default_path != NULL)
-     {
--	if( saving == TRUE )
-+	if (saving == TRUE)
- 	{
- 	    /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
- 	    flags |= Pt_FSR_NO_FCHECK;
-@@ -1411,23 +1411,23 @@
- 	}
- 
- 	/* combine the directory and filename into a single path */
--	if( initdir == NULL || *initdir == NUL )
-+	if (initdir == NULL || *initdir == NUL)
- 	{
--	    mch_dirname( default_path, MAXPATHL );
-+	    mch_dirname(default_path, MAXPATHL);
- 	    initdir = default_path;
- 	}
- 	else
- 	{
--	    STRCPY( default_path, initdir );
-+	    STRCPY(default_path, initdir);
- 	    initdir = default_path;
- 	}
- 
--	if( default_name != NULL )
-+	if (default_name != NULL)
- 	{
--	    if( default_path[ STRLEN( default_path ) - 1 ] != '/' )
--		STRCAT( default_path, "/" );
-+	    if (default_path[ STRLEN(default_path) - 1 ] != '/')
-+		STRCAT(default_path, "/");
- 
--	    STRCAT( default_path, default_name );
-+	    STRCAT(default_path, default_name);
- 	}
- 
- 	/* TODO: add a filter? */
-@@ -1441,58 +1441,58 @@
- 		NULL,
- 		NULL,
- 		&file,
--		flags );
-+		flags);
- 
--	vim_free( default_path );
-+	vim_free(default_path);
- 
--	if( file.ret == Pt_FSDIALOG_BTN1 )
--	    return( vim_strsave( file.path ) );
-+	if (file.ret == Pt_FSDIALOG_BTN1)
-+	    return vim_strsave(file.path);
-     }
--    return( NULL );
-+    return NULL;
- }
- #endif
- 
--#if defined( FEAT_GUI_DIALOG ) || defined( PROTO )
-+#if defined(FEAT_GUI_DIALOG) || defined(PROTO)
- static PtWidget_t *gui_ph_dialog_text = NULL;
- 
-     static int
--gui_ph_dialog_close( int button, void *data )
-+gui_ph_dialog_close(int button, void *data)
- {
-     PtModalCtrl_t *modal_ctrl = data;
-     char_u *dialog_text, *vim_text;
- 
--    if( gui_ph_dialog_text != NULL )
-+    if (gui_ph_dialog_text != NULL)
-     {
--	PtGetResource( gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0 );
--	PtGetResource( gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0 );
--	STRNCPY( vim_text, dialog_text, IOSIZE - 1 );
-+	PtGetResource(gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0);
-+	PtGetResource(gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0);
-+	STRNCPY(vim_text, dialog_text, IOSIZE - 1);
-     }
- 
--    PtModalUnblock( modal_ctrl, (void *) button );
-+    PtModalUnblock(modal_ctrl, (void *) button);
- 
--    return( Pt_TRUE );
-+    return Pt_TRUE;
- }
- 
-     static int
--gui_ph_dialog_text_enter( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_dialog_text_enter(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
--    if( info->reason_subtype == Pt_EDIT_ACTIVATE )
--	gui_ph_dialog_close( 1, data );
--    return( Pt_CONTINUE );
-+    if (info->reason_subtype == Pt_EDIT_ACTIVATE)
-+	gui_ph_dialog_close(1, data);
-+    return Pt_CONTINUE;
- }
- 
-     static int
--gui_ph_dialog_esc( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
-+gui_ph_dialog_esc(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
- {
-     PhKeyEvent_t *key;
- 
--    key = PhGetData( info->event );
--    if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
-+    key = PhGetData(info->event);
-+    if ((key->key_flags & Pk_KF_Cap_Valid) && (key->key_cap == Pk_Escape))
-     {
--	gui_ph_dialog_close( 0, data );
--	return( Pt_CONSUME );
-+	gui_ph_dialog_close(0, data);
-+	return Pt_CONSUME;
-     }
--    return( Pt_PROCESS );
-+    return Pt_PROCESS;
- }
- 
-     int
-@@ -1502,7 +1502,8 @@
- 	char_u	*message,
- 	char_u	*buttons,
- 	int	default_button,
--	char_u	*textfield)
-+	char_u	*textfield,
-+	int	ex_cmd)
- {
-     char_u	*str;
-     char_u	**button_array;
-@@ -1517,40 +1518,40 @@
- 
-     button_count = len = i = 0;
- 
--    if( buttons == NULL || *buttons == NUL )
--	return( -1 );
-+    if (buttons == NULL || *buttons == NUL)
-+	return -1;
- 
-     /* There is one less separator than buttons, so bump up the button count */
-     button_count = 1;
- 
-     /* Count string length and number of seperators */
--    for( str = buttons; *str; str++ )
-+    for (str = buttons; *str; str++)
-     {
- 	len++;
--	if( *str == DLG_BUTTON_SEP )
-+	if (*str == DLG_BUTTON_SEP)
- 	    button_count++;
-     }
- 
--    if ( title == NULL )
-+    if (title == NULL)
- 	title = "Vim";
- 
--    buttons_copy = alloc( len + 1 );
--    button_array = (char_u **) alloc( button_count * sizeof( char_u * ) );
--    if( buttons_copy != NULL && button_array != NULL )
-+    buttons_copy = alloc(len + 1);
-+    button_array = (char_u **) alloc(button_count * sizeof(char_u *));
-+    if (buttons_copy != NULL && button_array != NULL)
-     {
--	STRCPY( buttons_copy, buttons );
-+	STRCPY(buttons_copy, buttons);
- 
- 	/*
- 	 * Convert DLG_BUTTON_SEP into NUL's and fill in
- 	 * button_array with the pointer to each NUL terminated string
- 	 */
- 	str = buttons_copy;
--	for( i = 0; i < button_count; i++ )
-+	for (i = 0; i < button_count; i++)
- 	{
- 	    button_array[ i ] = str;
--	    for( ; *str; str++ )
-+	    for (; *str; str++)
- 	    {
--		if( *str == DLG_BUTTON_SEP )
-+		if (*str == DLG_BUTTON_SEP)
- 		{
- 		    *str++ = NUL;
- 		    break;
-@@ -1564,7 +1565,7 @@
- 		NULL,
- 		message, NULL,
- 		button_count, (const char **) button_array, NULL,
--		default_button, 0, Pt_MODAL );
-+		default_button, 0, Pt_MODAL);
- #else
- 	/* Writing the dialog ourselves lets us add extra features, like
- 	 * trapping the escape key and returning 0 to vim */
-@@ -1575,32 +1576,32 @@
- 	    PtModalCtrl_t modal_ctrl;
- 	    PtDialogInfo_t di;
- 
--	    memset( &di, 0, sizeof( di ) );
--	    memset( &modal_ctrl, 0, sizeof( modal_ctrl ) );
-+	    memset(&di, 0, sizeof(di));
-+	    memset(&modal_ctrl, 0, sizeof(modal_ctrl));
- 
- 	    n = 0;
--	    PtSetArg( &args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0 );
--	    PtSetArg( &args[n++], Pt_ARG_WIDTH, 350, 0 );
--	    PtSetArg( &args[n++], Pt_ARG_GROUP_ORIENTATION,
--		    Pt_GROUP_VERTICAL, 0 );
--	    PtSetArg( &args[n++], Pt_ARG_GROUP_FLAGS,
--		    Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL );
--	    PtSetArg( &args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE );
--	    pane = PtCreateWidget( PtGroup, NULL, n, args );
-+	    PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0);
-+	    PtSetArg(&args[n++], Pt_ARG_WIDTH, 350, 0);
-+	    PtSetArg(&args[n++], Pt_ARG_GROUP_ORIENTATION,
-+		    Pt_GROUP_VERTICAL, 0);
-+	    PtSetArg(&args[n++], Pt_ARG_GROUP_FLAGS,
-+		    Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL);
-+	    PtSetArg(&args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE);
-+	    pane = PtCreateWidget(PtGroup, NULL, n, args);
- 
- 	    n = 0;
--	    PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, message, 0 );
--	    PtCreateWidget( PtLabel, pane, n, args );
-+	    PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, message, 0);
-+	    PtCreateWidget(PtLabel, pane, n, args);
- 
--	    if( textfield != NULL )
-+	    if (textfield != NULL)
- 	    {
- 		n = 0;
--		PtSetArg( &args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0 );
--		PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, textfield, 0 );
--		PtSetArg( &args[n++], Pt_ARG_POINTER, textfield, 0 );
--		gui_ph_dialog_text = PtCreateWidget( PtText, pane, n, args );
--		PtAddCallback( gui_ph_dialog_text, Pt_CB_ACTIVATE,
--			gui_ph_dialog_text_enter, &modal_ctrl );
-+		PtSetArg(&args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0);
-+		PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, textfield, 0);
-+		PtSetArg(&args[n++], Pt_ARG_POINTER, textfield, 0);
-+		gui_ph_dialog_text = PtCreateWidget(PtText, pane, n, args);
-+		PtAddCallback(gui_ph_dialog_text, Pt_CB_ACTIVATE,
-+			gui_ph_dialog_text_enter, &modal_ctrl);
- 	    }
- 
- 	    di.parent = gui.vimWindow;
-@@ -1615,28 +1616,28 @@
- 	    di.callback = gui_ph_dialog_close;
- 	    di.data = &modal_ctrl;
- 
--	    dialog = PtCreateDialog( &di );
--	    PtAddFilterCallback( dialog, Ph_EV_KEY,
--		    gui_ph_dialog_esc, &modal_ctrl );
-+	    dialog = PtCreateDialog(&di);
-+	    PtAddFilterCallback(dialog, Ph_EV_KEY,
-+		    gui_ph_dialog_esc, &modal_ctrl);
- 
--	    if( gui_ph_dialog_text != NULL )
--		PtGiveFocus( gui_ph_dialog_text, NULL );
-+	    if (gui_ph_dialog_text != NULL)
-+		PtGiveFocus(gui_ph_dialog_text, NULL);
- 
- 	    /* Open dialog, block the vim window and wait for the dialog to close */
--	    PtRealizeWidget( dialog );
--	    PtMakeModal( dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR );
--	    dialog_result = (int) PtModalBlock( &modal_ctrl, 0 );
-+	    PtRealizeWidget(dialog);
-+	    PtMakeModal(dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR);
-+	    dialog_result = (int) PtModalBlock(&modal_ctrl, 0);
- 
--	    PtDestroyWidget( dialog );
-+	    PtDestroyWidget(dialog);
- 	    gui_ph_dialog_text = NULL;
- 	}
- #endif
-     }
- 
--    vim_free( button_array );
--    vim_free( buttons_copy );
-+    vim_free(button_array);
-+    vim_free(buttons_copy);
- 
--    return( dialog_result );
-+    return dialog_result;
- }
- #endif
- /****************************************************************************/
-@@ -1647,12 +1648,12 @@
- {
-     PhPoint_t *pos;
- 
--    pos = PtWidgetPos( gui.vimWindow, NULL );
-+    pos = PtWidgetPos(gui.vimWindow, NULL);
- 
-     *x = pos->x;
-     *y = pos->y;
- 
--    return( OK );
-+    return OK;
- }
- 
-     void
-@@ -1660,7 +1661,7 @@
- {
-     PhPoint_t pos = { x, y };
- 
--    PtSetResource( gui.vimWindow, Pt_ARG_POS, &pos, 0 );
-+    PtSetResource(gui.vimWindow, Pt_ARG_POS, &pos, 0);
- }
- 
-     void
-@@ -1676,10 +1677,10 @@
-     window_size.h += pg_margin_top + pg_margin_bottom;
- #endif
- 
--    PtSetResource( gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0 );
--    PtSetResource( gui.vimWindow, Pt_ARG_DIM, &window_size, 0 );
-+    PtSetResource(gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0);
-+    PtSetResource(gui.vimWindow, Pt_ARG_DIM, &window_size, 0);
- 
--    if( ! PtWidgetIsRealized( gui.vimWindow ) )
-+    if (! PtWidgetIsRealized(gui.vimWindow))
- 	gui_ph_resize_container();
- }
- 
-@@ -1692,8 +1693,8 @@
- {
-     PhRect_t console;
- 
--    PhWindowQueryVisible( Ph_QUERY_WORKSPACE, 0,
--	    PhInputGroup( NULL ), &console );
-+    PhWindowQueryVisible(Ph_QUERY_WORKSPACE, 0,
-+	    PhInputGroup(NULL), &console);
- 
-     *screen_w = console.lr.x - console.ul.x + 1;
-     *screen_h = console.lr.y - console.ul.y + 1;
-@@ -1704,11 +1705,11 @@
- {
-     PhWindowEvent_t event;
- 
--    memset( &event, 0, sizeof (event) );
-+    memset(&event, 0, sizeof (event));
-     event.event_f = Ph_WM_HIDE;
-     event.event_state = Ph_WM_EVSTATE_HIDE;
--    event.rid = PtWidgetRid( gui.vimWindow );
--    PtForwardWindowEvent( &event );
-+    event.rid = PtWidgetRid(gui.vimWindow);
-+    PtForwardWindowEvent(&event);
- }
- 
- #if defined(FEAT_EVAL) || defined(PROTO)
-@@ -1720,11 +1721,11 @@
- {
-     PhWindowEvent_t event;
- 
--    memset( &event, 0, sizeof (event) );
-+    memset(&event, 0, sizeof (event));
-     event.event_f = Ph_WM_TOFRONT;
-     event.event_state = Ph_WM_EVSTATE_FFRONT;
--    event.rid = PtWidgetRid( gui.vimWindow );
--    PtForwardWindowEvent( &event );
-+    event.rid = PtWidgetRid(gui.vimWindow);
-+    PtForwardWindowEvent(&event);
- }
- #endif
- 
-@@ -1732,9 +1733,9 @@
- gui_mch_settitle(char_u *title,	char_u *icon)
- {
- #ifdef USE_PANEL_GROUP
--    gui_ph_pg_set_buffer_num( curwin->w_buffer->b_fnum );
-+    gui_ph_pg_set_buffer_num(curwin->w_buffer->b_fnum);
- #endif
--    PtSetResource( gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0 );
-+    PtSetResource(gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0);
-     /* Not sure what to do with the icon text, set balloon text somehow? */
- }
- 
-@@ -1747,10 +1748,10 @@
-     int	    n = 0;
-     PtArg_t args[3];
- 
--    PtSetArg( &args[ n++ ], Pt_ARG_MAXIMUM, max, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0 );
--    PtSetArg( &args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0 );
--    PtSetResources( sb->id, n, args );
-+    PtSetArg(&args[ n++ ], Pt_ARG_MAXIMUM, max, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0);
-+    PtSetResources(sb->id, n, args);
- }
- 
-     void
-@@ -1758,7 +1759,7 @@
- {
-     PhArea_t area = {{ x, y }, { w, h }};
- 
--    PtSetResource( sb->id, Pt_ARG_AREA, &area, 0 );
-+    PtSetResource(sb->id, Pt_ARG_AREA, &area, 0);
- }
- 
-     void
-@@ -1774,12 +1775,12 @@
-      *
-      * Also, don't let the scrollbar get focus
-      */
--    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
--	    Pt_DELAY_REALIZE | Pt_GETS_FOCUS );
--    PtSetArg( &args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
-+    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
-+	    Pt_DELAY_REALIZE | Pt_GETS_FOCUS);
-+    PtSetArg(&args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
- #if 0
-     /* Don't need this anchoring for the scrollbars */
--    if( orient == SBAR_HORIZ )
-+    if (orient == SBAR_HORIZ)
-     {
- 	anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
- 	    Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
-@@ -1787,40 +1788,40 @@
-     else
-     {
- 	anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
--	if( sb->wp != NULL )
-+	if (sb->wp != NULL)
- 	{
--	    if( sb == &sb->wp->w_scrollbars[ SBAR_LEFT ] )
-+	    if (sb == &sb->wp->w_scrollbars[ SBAR_LEFT ])
- 		anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
- 	    else
- 		anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
- 	}
-     }
--    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED );
-+    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED);
- #endif
--    PtSetArg( &args[ n++ ], Pt_ARG_ORIENTATION,
--	    (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0 );
-+    PtSetArg(&args[ n++ ], Pt_ARG_ORIENTATION,
-+	    (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0);
- #ifdef USE_PANEL_GROUP
--    sb->id = PtCreateWidget( PtScrollbar, gui.vimPanelGroup, n, args );
-+    sb->id = PtCreateWidget(PtScrollbar, gui.vimPanelGroup, n, args);
- #else
--    sb->id = PtCreateWidget( PtScrollbar, gui.vimContainer, n, args );
-+    sb->id = PtCreateWidget(PtScrollbar, gui.vimContainer, n, args);
- #endif
- 
--    PtAddCallback( sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb );
-+    PtAddCallback(sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb);
- }
- 
-     void
- gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
- {
--    if( flag != 0 )
--	PtRealizeWidget( sb->id );
-+    if (flag != 0)
-+	PtRealizeWidget(sb->id);
-     else
--	PtUnrealizeWidget( sb->id );
-+	PtUnrealizeWidget(sb->id);
- }
- 
-     void
- gui_mch_destroy_scrollbar(scrollbar_T *sb)
- {
--    PtDestroyWidget( sb->id );
-+    PtDestroyWidget(sb->id);
-     sb->id = NULL;
- }
- 
-@@ -1865,8 +1866,8 @@
- 	return;
- 
-     if (shape == MSHAPE_HIDE || gui.pointer_hidden)
--	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
--		0 );
-+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
-+		0);
-     else
-     {
- 	if (shape >= MSHAPE_NUMBERED)
-@@ -1874,7 +1875,7 @@
- 	else
- 	    id = mshape_ids[shape];
- 
--	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id,	0 );
-+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id,	0);
-     }
-     if (shape != MSHAPE_HIDE)
- 	last_shape = shape;
-@@ -1884,19 +1885,19 @@
-     void
- gui_mch_mousehide(int hide)
- {
--    if( gui.pointer_hidden != hide )
-+    if (gui.pointer_hidden != hide)
-     {
- 	gui.pointer_hidden = hide;
- #ifdef FEAT_MOUSESHAPE
--	if( hide )
--	    PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
--		    Ph_CURSOR_NONE, 0 );
-+	if (hide)
-+	    PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
-+		    Ph_CURSOR_NONE, 0);
- 	else
--	    mch_set_mouse_shape( last_shape );
-+	    mch_set_mouse_shape(last_shape);
- #else
--	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
--		( hide == MOUSE_SHOW ) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
--		0 );
-+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
-+		(hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
-+		0);
- #endif
-     }
- }
-@@ -1909,8 +1910,8 @@
- 
-     /* FIXME: does this return the correct position,
-      * with respect to the border? */
--    PhQueryCursor( PhInputGroup( NULL ), &info );
--    PtGetAbsPosition( gui.vimTextArea , &ix, &iy );
-+    PhQueryCursor(PhInputGroup(NULL), &info);
-+    PtGetAbsPosition(gui.vimTextArea , &ix, &iy);
- 
-     *x = info.pos.x - ix;
-     *y = info.pos.y - iy;
-@@ -1921,9 +1922,9 @@
- {
-     short abs_x, abs_y;
- 
--    PtGetAbsPosition( gui.vimTextArea, &abs_x, &abs_y );
-+    PtGetAbsPosition(gui.vimTextArea, &abs_x, &abs_y);
-     /* Add the border offset? */
--    PhMoveCursorAbs( PhInputGroup( NULL ), abs_x + x, abs_y + y );
-+    PhMoveCursorAbs(PhInputGroup(NULL), abs_x + x, abs_y + y);
- }
- 
- /****************************************************************************/
-@@ -1951,34 +1952,34 @@
-     color_diff = gui_get_lightness(gui_ph_mouse_color)
- 					  - gui_get_lightness(gui.back_pixel);
- 
--    if( abs( color_diff ) < 64 )
-+    if (abs(color_diff) < 64)
-     {
- 	short r, g, b;
- 	/* not a great algorithm... */
--	r = PgRedValue( gui_ph_mouse_color ) ^ 255;
--	g = PgGreenValue( gui_ph_mouse_color ) ^ 255;
--	b = PgBlueValue( gui_ph_mouse_color ) ^ 255;
-+	r = PgRedValue(gui_ph_mouse_color) ^ 255;
-+	g = PgGreenValue(gui_ph_mouse_color) ^ 255;
-+	b = PgBlueValue(gui_ph_mouse_color) ^ 255;
- 
- #ifndef FEAT_MOUSESHAPE
--	gui_ph_mouse_color = PgRGB( r, g, b );
--	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
--		gui_ph_mouse_color, 0 );
-+	gui_ph_mouse_color = PgRGB(r, g, b);
-+	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
-+		gui_ph_mouse_color, 0);
- #endif
-     }
- #endif
- 
--    PtSetResource( gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0 );
-+    PtSetResource(gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0);
- }
- 
-     static int
- hex_digit(int c)
- {
-     if (VIM_ISDIGIT(c))
--	return( c - '0' );
-+	return c - '0';
-     c = TOLOWER_ASC(c);
-     if (c >= 'a' && c <= 'f')
--	return( c - 'a' + 10 );
--    return( -1000 );
-+	return c - 'a' + 10;
-+    return -1000;
- }
- 
- 
-@@ -2006,8 +2007,8 @@
-     static GuiColourTable table[] =
-     {
- 	{"Black",	    RGB(0x00, 0x00, 0x00)},
--	{"DarkGray",	    RGB(0x80, 0x80, 0x80)},
--	{"DarkGrey",	    RGB(0x80, 0x80, 0x80)},
-+	{"DarkGray",	    RGB(0xA9, 0xA9, 0xA9)},
-+	{"DarkGrey",	    RGB(0xA9, 0xA9, 0xA9)},
- 	{"Gray",	    RGB(0xC0, 0xC0, 0xC0)},
- 	{"Grey",	    RGB(0xC0, 0xC0, 0xC0)},
- 	{"LightGray",	    RGB(0xD3, 0xD3, 0xD3)},
-@@ -2036,19 +2037,19 @@
- 	{"LightRed",	    RGB(0xFF, 0xA0, 0xA0)},
- 	{"DarkBlue",	    RGB(0x00, 0x00, 0x80)},
- 	{"Blue",	    RGB(0x00, 0x00, 0xFF)},
--	{"LightBlue",	    RGB(0xA0, 0xA0, 0xFF)},
-+	{"LightBlue",	    RGB(0xAD, 0xD8, 0xE6)},
- 	{"DarkGreen",	    RGB(0x00, 0x80, 0x00)},
- 	{"Green",	    RGB(0x00, 0xFF, 0x00)},
--	{"LightGreen",	    RGB(0xA0, 0xFF, 0xA0)},
-+	{"LightGreen",	    RGB(0x90, 0xEE, 0x90)},
- 	{"DarkCyan",	    RGB(0x00, 0x80, 0x80)},
- 	{"Cyan",	    RGB(0x00, 0xFF, 0xFF)},
--	{"LightCyan",	    RGB(0xA0, 0xFF, 0xFF)},
-+	{"LightCyan",	    RGB(0xE0, 0xFF, 0xFF)},
- 	{"DarkMagenta",	    RGB(0x80, 0x00, 0x80)},
- 	{"Magenta",	    RGB(0xFF, 0x00, 0xFF)},
- 	{"LightMagenta",    RGB(0xFF, 0xA0, 0xFF)},
- 	{"Brown",	    RGB(0x80, 0x40, 0x40)},
- 	{"Yellow",	    RGB(0xFF, 0xFF, 0x00)},
--	{"LightYellow",	    RGB(0xFF, 0xFF, 0xA0)},
-+	{"LightYellow",	    RGB(0xFF, 0xFF, 0xE0)},
- 	{"SeaGreen",	    RGB(0x2E, 0x8B, 0x57)},
- 	{"Orange",	    RGB(0xFF, 0xA5, 0x00)},
- 	{"Purple",	    RGB(0xA0, 0x20, 0xF0)},
-@@ -2057,20 +2058,20 @@
-     };
- 
-     /* is name #rrggbb format? */
--    if( name[0] == '#' && STRLEN( name ) == 7 )
-+    if (name[0] == '#' && STRLEN(name) == 7)
-     {
--	r = hex_digit( name[1] ) * 16 + hex_digit( name[2] );
--	g = hex_digit( name[3] ) * 16 + hex_digit( name[4] );
--	b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
--	if( r < 0 || g < 0 || b < 0 )
-+	r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
-+	g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
-+	b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
-+	if (r < 0 || g < 0 || b < 0)
- 	    return INVALCOLOR;
--	return( RGB( r, g, b ) );
-+	return RGB(r, g, b);
-     }
- 
--    for( i = 0; i < ARRAY_LENGTH( table ); i++ )
-+    for (i = 0; i < ARRAY_LENGTH(table); i++)
-     {
--	if( STRICMP( name, table[i].name ) == 0 )
--	    return( table[i].colour );
-+	if (STRICMP(name, table[i].name) == 0)
-+	    return table[i].colour;
-     }
- 
-     /*
-@@ -2114,7 +2115,7 @@
- 	    if (STRICMP(color, name) == 0)
- 	    {
- 		fclose(fd);
--		return( (guicolor_T) RGB(r,g,b) );
-+		return (guicolor_T)RGB(r, g, b);
- 	    }
- 	}
- 
-@@ -2128,13 +2129,13 @@
-     void
- gui_mch_set_fg_color(guicolor_T color)
- {
--    PgSetTextColor( color );
-+    PgSetTextColor(color);
- }
- 
-     void
- gui_mch_set_bg_color(guicolor_T color)
- {
--    PgSetFillColor( color );
-+    PgSetFillColor(color);
- }
- 
-     void
-@@ -2147,21 +2148,21 @@
- {
-     PhRect_t rect;
- 
--    rect.ul.x = FILL_X( col );
--    rect.ul.y = FILL_Y( row );
-+    rect.ul.x = FILL_X(col);
-+    rect.ul.y = FILL_Y(row);
- 
-     /* FIXME: This has an off by one pixel problem */
-     rect.lr.x = rect.ul.x + nc * gui.char_width;
-     rect.lr.y = rect.ul.y + nr * gui.char_height;
--    if( nc > 0 )
-+    if (nc > 0)
- 	rect.lr.x -= 1;
--    if( nr > 0 )
-+    if (nr > 0)
- 	rect.lr.y -= 1;
- 
-     DRAW_START;
--    PgSetDrawMode( Pg_DrawModeDSTINVERT );
--    PgDrawRect( &rect, Pg_DRAW_FILL );
--    PgSetDrawMode( Pg_DrawModeSRCCOPY );
-+    PgSetDrawMode(Pg_DrawModeDSTINVERT);
-+    PgDrawRect(&rect, Pg_DRAW_FILL);
-+    PgSetDrawMode(Pg_DrawModeSRCCOPY);
-     DRAW_END;
- }
- 
-@@ -2169,13 +2170,13 @@
- gui_mch_clear_block(int row1, int col1, int row2, int col2)
- {
-     PhRect_t block = {
--	{ FILL_X( col1 ), FILL_Y( row1 ) },
--	{ FILL_X( col2 + 1 ) - 1, FILL_Y( row2 + 1 ) - 1}
-+	{ FILL_X(col1), FILL_Y(row1) },
-+	{ FILL_X(col2 + 1) - 1, FILL_Y(row2 + 1) - 1}
-     };
- 
-     DRAW_START;
--    gui_mch_set_bg_color( gui.back_pixel );
--    PgDrawRect( &block, Pg_DRAW_FILL );
-+    gui_mch_set_bg_color(gui.back_pixel);
-+    PgDrawRect(&block, Pg_DRAW_FILL);
-     DRAW_END;
- }
- 
-@@ -2188,12 +2189,12 @@
- 	    Rows * gui.char_height + gui.border_width - 1 }
-     };
- 
--    if( is_ignore_draw == TRUE )
-+    if (is_ignore_draw == TRUE)
- 	return;
- 
-     DRAW_START;
--    gui_mch_set_bg_color( gui.back_pixel );
--    PgDrawRect( &text_rect, Pg_DRAW_FILL );
-+    gui_mch_set_bg_color(gui.back_pixel);
-+    PgDrawRect(&text_rect, Pg_DRAW_FILL);
-     DRAW_END;
- }
- 
-@@ -2203,28 +2204,28 @@
-     PhRect_t    rect;
-     PhPoint_t   delta;
- 
--    rect.ul.x = FILL_X( gui.scroll_region_left );
--    rect.ul.y = FILL_Y( row + num_lines );
-+    rect.ul.x = FILL_X(gui.scroll_region_left);
-+    rect.ul.y = FILL_Y(row + num_lines);
- 
--    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
--    rect.lr.y = FILL_Y( gui.scroll_region_bot + 1) - 1;
-+    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
-+    rect.lr.y = FILL_Y(gui.scroll_region_bot + 1) - 1;
- 
--    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
--    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
--    PhTranslateRect( &rect, &gui_ph_raw_offset );
-+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
-+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
-+    PhTranslateRect(&rect, &gui_ph_raw_offset);
- 
-     delta.x = 0;
-     delta.y = -num_lines * gui.char_height;
- 
-     PgFlush();
- 
--    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ), &rect, &delta );
-+    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)), &rect, &delta);
- 
-     gui_clear_block(
- 	gui.scroll_region_bot - num_lines + 1,
- 	gui.scroll_region_left,
- 	gui.scroll_region_bot,
--	gui.scroll_region_right );
-+	gui.scroll_region_right);
- }
- 
-     void
-@@ -2233,25 +2234,25 @@
-     PhRect_t    rect;
-     PhPoint_t   delta;
- 
--    rect.ul.x = FILL_X( gui.scroll_region_left );
--    rect.ul.y = FILL_Y( row );
-+    rect.ul.x = FILL_X(gui.scroll_region_left);
-+    rect.ul.y = FILL_Y(row);
- 
--    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
--    rect.lr.y = FILL_Y( gui.scroll_region_bot - num_lines + 1 ) - 1;
-+    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
-+    rect.lr.y = FILL_Y(gui.scroll_region_bot - num_lines + 1) - 1;
- 
--    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
--    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
--    PhTranslateRect( &rect, &gui_ph_raw_offset );
-+    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
-+    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
-+    PhTranslateRect(&rect, &gui_ph_raw_offset);
- 
-     delta.x = 0;
-     delta.y = num_lines * gui.char_height;
- 
-     PgFlush();
- 
--    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) , &rect, &delta );
-+    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)) , &rect, &delta);
- 
--    gui_clear_block( row, gui.scroll_region_left,
--	    row + num_lines - 1, gui.scroll_region_right );
-+    gui_clear_block(row, gui.scroll_region_left,
-+	    row + num_lines - 1, gui.scroll_region_right);
- }
- 
-     void
-@@ -2260,37 +2261,37 @@
-     static char *utf8_buffer = NULL;
-     static int	utf8_len = 0;
- 
--    PhPoint_t	pos = { TEXT_X( col ), TEXT_Y( row ) };
-+    PhPoint_t	pos = { TEXT_X(col), TEXT_Y(row) };
-     PhRect_t	rect;
- 
--    if( is_ignore_draw == TRUE )
-+    if (is_ignore_draw == TRUE)
- 	return;
- 
-     DRAW_START;
- 
--    if( !( flags & DRAW_TRANSP ) )
-+    if (!(flags & DRAW_TRANSP))
-     {
- 	PgDrawIRect(
--		FILL_X( col ), FILL_Y( row ),
--		FILL_X( col + len ) - 1, FILL_Y( row + 1 ) - 1,
--		Pg_DRAW_FILL );
-+		FILL_X(col), FILL_Y(row),
-+		FILL_X(col + len) - 1, FILL_Y(row + 1) - 1,
-+		Pg_DRAW_FILL);
-     }
- 
--    if( flags & DRAW_UNDERL )
--	PgSetUnderline( gui.norm_pixel, Pg_TRANSPARENT, 0 );
-+    if (flags & DRAW_UNDERL)
-+	PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0);
- 
--    if( charset_translate != NULL
-+    if (charset_translate != NULL
- #ifdef FEAT_MBYTE
- 	    && enc_utf8 == 0
- #endif
--	    )
-+	   )
-     {
- 	int src_taken, dst_made;
- 
- 	/* Use a static buffer to avoid large amounts of de/allocations */
--	if( utf8_len < len )
-+	if (utf8_len < len)
- 	{
--	    utf8_buffer = realloc( utf8_buffer, len * MB_LEN_MAX );
-+	    utf8_buffer = realloc(utf8_buffer, len * MB_LEN_MAX);
- 	    utf8_len = len;
- 	}
- 
-@@ -2301,36 +2302,36 @@
- 		&src_taken,
- 		utf8_buffer,
- 		utf8_len,
--		&dst_made );
-+		&dst_made);
- 	s = utf8_buffer;
- 	len = dst_made;
-     }
- 
--    PgDrawText( s, len, &pos, 0 );
-+    PgDrawText(s, len, &pos, 0);
- 
--    if( flags & DRAW_BOLD )
-+    if (flags & DRAW_BOLD)
-     {
- 	/* FIXME: try and only calculate these values once... */
--	rect.ul.x = FILL_X( col ) + 1;
--	rect.ul.y = FILL_Y( row );
--	rect.lr.x = FILL_X( col + len ) - 1;
--	rect.lr.y = FILL_Y( row + 1) - 1;
--	/* PgSetUserClip( NULL ) causes the scrollbar to not redraw... */
-+	rect.ul.x = FILL_X(col) + 1;
-+	rect.ul.y = FILL_Y(row);
-+	rect.lr.x = FILL_X(col + len) - 1;
-+	rect.lr.y = FILL_Y(row + 1) - 1;
-+	/* PgSetUserClip(NULL) causes the scrollbar to not redraw... */
- #if 0
- 	pos.x++;
- 
--	PgSetUserClip( &rect );
--	PgDrawText( s, len, &pos, 0 );
--	PgSetUserClip( NULL );
-+	PgSetUserClip(&rect);
-+	PgDrawText(s, len, &pos, 0);
-+	PgSetUserClip(NULL);
- #else
--	rect.lr.y -= ( p_linespace + 1 ) / 2;
-+	rect.lr.y -= (p_linespace + 1) / 2;
- 	/* XXX: DrawTextArea doesn't work with phditto */
--	PgDrawTextArea( s, len, &rect, Pg_TEXT_BOTTOM );
-+	PgDrawTextArea(s, len, &rect, Pg_TEXT_BOTTOM);
- #endif
-     }
- 
--    if( flags & DRAW_UNDERL )
--	PgSetUnderline( Pg_TRANSPARENT, Pg_TRANSPARENT, 0 );
-+    if (flags & DRAW_UNDERL)
-+	PgSetUnderline(Pg_TRANSPARENT, Pg_TRANSPARENT, 0);
- 
-     DRAW_END;
- }
-@@ -2345,14 +2346,14 @@
- 
-     /* FIXME: Double width characters */
- 
--    r.ul.x = FILL_X( gui.col );
--    r.ul.y = FILL_Y( gui.row );
-+    r.ul.x = FILL_X(gui.col);
-+    r.ul.y = FILL_Y(gui.row);
-     r.lr.x = r.ul.x + gui.char_width - 1;
-     r.lr.y = r.ul.y + gui.char_height - 1;
- 
-     DRAW_START;
--    PgSetStrokeColor( color );
--    PgDrawRect( &r, Pg_DRAW_STROKE );
-+    PgSetStrokeColor(color);
-+    PgDrawRect(&r, Pg_DRAW_STROKE);
-     DRAW_END;
- }
- 
-@@ -2361,14 +2362,14 @@
- {
-     PhRect_t r;
- 
--    r.ul.x = FILL_X( gui.col );
--    r.ul.y = FILL_Y( gui.row ) + gui.char_height - h;
-+    r.ul.x = FILL_X(gui.col);
-+    r.ul.y = FILL_Y(gui.row) + gui.char_height - h;
-     r.lr.x = r.ul.x + w - 1;
-     r.lr.y = r.ul.y + h - 1;
- 
-     DRAW_START;
--    gui_mch_set_bg_color( color );
--    PgDrawRect( &r, Pg_DRAW_FILL );
-+    gui_mch_set_bg_color(color);
-+    PgDrawRect(&r, Pg_DRAW_FILL);
-     DRAW_END;
- }
- 
-@@ -2384,10 +2385,10 @@
- gui_mch_start_blink(void)
- {
-     /* Only turn on the timer on if none of the times are zero */
--    if( blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
-+    if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
-     {
--	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
--		blink_waittime, 0 );
-+	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
-+		blink_waittime, 0);
- 	blink_state = BLINK_ON;
- 	gui_update_cursor(TRUE, FALSE);
-     }
-@@ -2396,9 +2397,9 @@
-     void
- gui_mch_stop_blink(void)
- {
--    PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0 );
-+    PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0);
- 
--    if( blink_state == BLINK_OFF )
-+    if (blink_state == BLINK_OFF)
- 	gui_update_cursor(TRUE, FALSE);
- 
-     blink_state = BLINK_NONE;
-@@ -2416,15 +2417,15 @@
-     void
- gui_mch_flash(int msec)
- {
--    PgSetFillXORColor( Pg_BLACK, Pg_WHITE );
--    PgSetDrawMode( Pg_DRAWMODE_XOR );
-+    PgSetFillXORColor(Pg_BLACK, Pg_WHITE);
-+    PgSetDrawMode(Pg_DRAWMODE_XOR);
-     gui_mch_clear_all();
-     gui_mch_flush();
- 
--    ui_delay( (long) msec, TRUE );
-+    ui_delay((long) msec, TRUE);
- 
-     gui_mch_clear_all();
--    PgSetDrawMode( Pg_DRAWMODE_OPAQUE );
-+    PgSetDrawMode(Pg_DRAWMODE_OPAQUE);
-     gui_mch_flush();
- }
- 
-@@ -2439,7 +2440,7 @@
- {
-     PhArea_t area = {{x, y}, {w, h}};
- 
--    PtSetResource( gui.vimTextArea, Pt_ARG_AREA, &area, 0 );
-+    PtSetResource(gui.vimTextArea, Pt_ARG_AREA, &area, 0);
- }
- 
-     int
-@@ -2450,8 +2451,8 @@
-     for (i = 0; special_keys[i].key_sym != 0; i++)
- 	if (name[0] == special_keys[i].vim_code0 &&
- 		 name[1] == special_keys[i].vim_code1)
--	    return( OK );
--    return( FAIL );
-+	    return OK;
-+    return FAIL;
- }
- 
- /****************************************************************************/
-@@ -2495,23 +2496,23 @@
- };
- 
- static PhImage_t *
--gui_ph_toolbar_load_icon( char_u *iconfile )
-+gui_ph_toolbar_load_icon(char_u *iconfile)
- {
-     static PhImage_t external_icon;
-     PhImage_t *temp_phi = NULL;
- 
--    temp_phi = PxLoadImage( iconfile, NULL );
--    if( temp_phi != NULL )
-+    temp_phi = PxLoadImage(iconfile, NULL);
-+    if (temp_phi != NULL)
-     {
- 	/* The label widget will free the image/palette/etc. for us when
- 	 * it's destroyed */
- 	temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
--	memcpy( &external_icon, temp_phi, sizeof( external_icon ) );
--	free( temp_phi );
-+	memcpy(&external_icon, temp_phi, sizeof(external_icon));
-+	free(temp_phi);
- 
- 	temp_phi = &external_icon;
-     }
--    return( temp_phi );
-+    return temp_phi;
- }
- 
- /*
-@@ -2522,45 +2523,45 @@
-  * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
-  */
- static PhImage_t *
--gui_ph_toolbar_find_icon( vimmenu_T *menu )
-+gui_ph_toolbar_find_icon(vimmenu_T *menu)
- {
-     char_u full_pathname[ MAXPATHL + 1 ];
-     PhImage_t *icon = NULL;
- 
--    if( menu->icon_builtin == FALSE )
-+    if (menu->icon_builtin == FALSE)
-     {
--	if( menu->iconfile != NULL )
-+	if (menu->iconfile != NULL)
- 	    /* TODO: use gui_find_iconfile() */
--	    icon = gui_ph_toolbar_load_icon( menu->iconfile );
-+	    icon = gui_ph_toolbar_load_icon(menu->iconfile);
- 
- 	/* TODO: Restrict loading to just .png? Search for any format? */
--	if( ( icon == NULL ) &&
--	    ( ( gui_find_bitmap( menu->name, full_pathname, "gif" ) == OK ) ||
--	      ( gui_find_bitmap( menu->name, full_pathname, "png" ) == OK ) ) )
--	    icon = gui_ph_toolbar_load_icon( full_pathname );
-+	if ((icon == NULL) &&
-+	    ((gui_find_bitmap(menu->name, full_pathname, "gif") == OK) ||
-+	      (gui_find_bitmap(menu->name, full_pathname, "png") == OK)))
-+	    icon = gui_ph_toolbar_load_icon(full_pathname);
- 
--	if( icon != NULL )
--	    return( icon );
-+	if (icon != NULL)
-+	    return icon;
-     }
- 
--    if( menu->iconidx >= 0 &&
--	    ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
-+    if (menu->iconidx >= 0 &&
-+	    (menu->iconidx < ARRAY_LENGTH(gui_ph_toolbar_images)))
-     {
--	return( gui_ph_toolbar_images[ menu->iconidx ] );
-+	return gui_ph_toolbar_images[menu->iconidx];
-     }
- 
--    return( NULL );
-+    return NULL;
- }
- #endif
- 
--#if defined( FEAT_MENU ) || defined( PROTO )
-+#if defined(FEAT_MENU) || defined(PROTO)
-     void
- gui_mch_enable_menu(int flag)
- {
--    if( flag != 0 )
--	PtRealizeWidget( gui.vimMenuBar );
-+    if (flag != 0)
-+	PtRealizeWidget(gui.vimMenuBar);
-     else
--	PtUnrealizeWidget( gui.vimMenuBar );
-+	PtUnrealizeWidget(gui.vimMenuBar);
- }
- 
-     void
-@@ -2571,30 +2572,30 @@
- 
- /* Change the position of a menu button in the parent */
-     static void
--gui_ph_position_menu( PtWidget_t *widget, int priority )
-+gui_ph_position_menu(PtWidget_t *widget, int priority)
- {
-     PtWidget_t	*traverse;
-     vimmenu_T	*menu;
- 
--    traverse = PtWidgetChildBack( PtWidgetParent( widget ) );
-+    traverse = PtWidgetChildBack(PtWidgetParent(widget));
- 
-     /* Iterate through the list of widgets in traverse, until
-      * we find the position we want to insert our widget into */
-     /* TODO: traverse from front to back, possible speedup? */
--    while( traverse != NULL )
-+    while (traverse != NULL)
-     {
--	PtGetResource( traverse, Pt_ARG_POINTER, &menu, 0 );
-+	PtGetResource(traverse, Pt_ARG_POINTER, &menu, 0);
- 
--	if( menu != NULL &&
-+	if (menu != NULL &&
- 		priority < menu->priority &&
--		widget != traverse )
-+		widget != traverse)
- 	{
- 	    /* Insert the widget before the current traverse widget */
--	    PtWidgetInsert( widget, traverse, 1 );
-+	    PtWidgetInsert(widget, traverse, 1);
- 	    return;
- 	}
- 
--	traverse = PtWidgetBrotherInFront( traverse );
-+	traverse = PtWidgetBrotherInFront(traverse);
-     }
- }
- 
-@@ -2610,11 +2611,11 @@
- 
-     menu->submenu_id = menu->id = NULL;
- 
--    if( menu_is_menubar( menu->name ) )
-+    if (menu_is_menubar(menu->name))
-     {
- 
--	accel_key = vim_strchr( menu->name, '&' );
--	if( accel_key != NULL )
-+	accel_key = vim_strchr(menu->name, '&');
-+	if (accel_key != NULL)
- 	{
- 	    mnemonic_str[0] = accel_key[1];
- 	    mnemonic_str[1] = NUL;
-@@ -2622,51 +2623,51 @@
- 
- 	/* Create the menu button */
- 	n = 0;
--	PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
--	PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
--	if( accel_key != NULL )
--	    PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0 );
--	PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
-+	PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
-+	PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
-+	if (accel_key != NULL)
-+	    PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0);
-+	PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
- 
--	if( parent != NULL )
--	    PtSetArg( &args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0 );
-+	if (parent != NULL)
-+	    PtSetArg(&args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0);
- 
--	menu->id = PtCreateWidget( PtMenuButton,
-+	menu->id = PtCreateWidget(PtMenuButton,
- 		(parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
--		n, args );
-+		n, args);
- 
--	PtAddCallback( menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu );
-+	PtAddCallback(menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu);
- 
- 	/* Create the actual menu */
- 	n = 0;
--	if( parent != NULL )
--	    PtSetArg( &args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD );
-+	if (parent != NULL)
-+	    PtSetArg(&args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD);
- 
--	menu->submenu_id = PtCreateWidget( PtMenu, menu->id, n, args );
-+	menu->submenu_id = PtCreateWidget(PtMenu, menu->id, n, args);
- 
--	if( parent == NULL )
-+	if (parent == NULL)
- 	{
--	    PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
--		    gui_ph_handle_menu_unrealized, menu );
-+	    PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
-+		    gui_ph_handle_menu_unrealized, menu);
- 
--	    if( menu->mnemonic != 0 )
-+	    if (menu->mnemonic != 0)
- 	    {
--		PtAddHotkeyHandler( gui.vimWindow, tolower( menu->mnemonic ),
--			Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu );
-+		PtAddHotkeyHandler(gui.vimWindow, tolower(menu->mnemonic),
-+			Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu);
- 	    }
- 	}
- 
--	gui_ph_position_menu( menu->id, menu->priority );
-+	gui_ph_position_menu(menu->id, menu->priority);
- 
- 	/* Redraw menubar here instead of gui_mch_draw_menubar */
--	if( gui.menu_is_active )
--	    PtRealizeWidget( menu->id );
-+	if (gui.menu_is_active)
-+	    PtRealizeWidget(menu->id);
-     }
--    else if( menu_is_popup( menu->name ) )
-+    else if (menu_is_popup(menu->name))
-     {
--	menu->submenu_id = PtCreateWidget( PtMenu, gui.vimWindow, 0, NULL );
--	PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
--		gui_ph_handle_menu_unrealized, menu );
-+	menu->submenu_id = PtCreateWidget(PtMenu, gui.vimWindow, 0, NULL);
-+	PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
-+		gui_ph_handle_menu_unrealized, menu);
-     }
- }
- 
-@@ -2680,104 +2681,104 @@
-     PtArg_t args[13];
- 
-     n = 0;
--    PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
-+    PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
- 
- #ifdef FEAT_TOOLBAR
--    if( menu_is_toolbar( parent->name ) )
-+    if (menu_is_toolbar(parent->name))
-     {
--	if( menu_is_separator( menu->name ) )
-+	if (menu_is_separator(menu->name))
- 	{
--	    PtSetArg( &args[ n++ ], Pt_ARG_SEP_FLAGS,
--		    Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION );
--	    PtSetArg( &args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0 );
--	    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
--		    Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM );
--	    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, 2, 0 );
--	    menu->id = PtCreateWidget( PtSeparator, gui.vimToolBar, n, args );
-+	    PtSetArg(&args[ n++ ], Pt_ARG_SEP_FLAGS,
-+		    Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION);
-+	    PtSetArg(&args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0);
-+	    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
-+		    Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM);
-+	    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, 2, 0);
-+	    menu->id = PtCreateWidget(PtSeparator, gui.vimToolBar, n, args);
- 	}
- 	else
- 	{
--	    if( strstr( (const char *) p_toolbar, "text" ) != NULL )
-+	    if (strstr((const char *) p_toolbar, "text") != NULL)
- 	    {
--		PtSetArg( &args[ n++ ], Pt_ARG_BALLOON_POSITION,
--			Pt_BALLOON_BOTTOM, 0 );
--		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
--		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0 );
-+		PtSetArg(&args[ n++ ], Pt_ARG_BALLOON_POSITION,
-+			Pt_BALLOON_BOTTOM, 0);
-+		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
-+		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0);
- 	    }
--	    if( ( strstr( (const char *) p_toolbar, "icons" ) != NULL ) &&
--		    ( gui_ph_toolbar_images != NULL ) )
-+	    if ((strstr((const char *) p_toolbar, "icons") != NULL) &&
-+		    (gui_ph_toolbar_images != NULL))
- 	    {
--		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_IMAGE,
--			gui_ph_toolbar_find_icon( menu ), 0 );
--		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0 );
--		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0 );
-+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_IMAGE,
-+			gui_ph_toolbar_find_icon(menu), 0);
-+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0);
-+		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0);
- 	    }
--	    if( strstr( (const char *) p_toolbar, "tooltips" ) != NULL )
-+	    if (strstr((const char *) p_toolbar, "tooltips") != NULL)
- 	    {
--		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_BALLOON,
--			gui_ph_show_tooltip, 0 );
--		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_FLAGS,
--			Pt_TRUE, Pt_SHOW_BALLOON );
-+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_BALLOON,
-+			gui_ph_show_tooltip, 0);
-+		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_FLAGS,
-+			Pt_TRUE, Pt_SHOW_BALLOON);
- 	    }
--	    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0 );
--	    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0 );
--	    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
--		    Pt_HIGHLIGHTED | Pt_GETS_FOCUS );
--	    PtSetArg( &args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
--	    menu->id = PtCreateWidget( PtButton, gui.vimToolBar, n, args );
-+	    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0);
-+	    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0);
-+	    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
-+		    Pt_HIGHLIGHTED | Pt_GETS_FOCUS);
-+	    PtSetArg(&args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0);
-+	    menu->id = PtCreateWidget(PtButton, gui.vimToolBar, n, args);
- 
--	    PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
-+	    PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
- 	}
- 	/* Update toolbar if it's open */
--	if( PtWidgetIsRealized( gui.vimToolBar ) )
--	    PtRealizeWidget( menu->id );
-+	if (PtWidgetIsRealized(gui.vimToolBar))
-+	    PtRealizeWidget(menu->id);
-     }
-     else
- #endif
--	if( menu_is_separator( menu->name ) )
-+	if (menu_is_separator(menu->name))
-     {
--	menu->id = PtCreateWidget( PtSeparator, parent->submenu_id, n, args );
-+	menu->id = PtCreateWidget(PtSeparator, parent->submenu_id, n, args);
-     }
-     else
-     {
--	accel_key = vim_strchr( menu->name, '&' );
--	if( accel_key != NULL )
-+	accel_key = vim_strchr(menu->name, '&');
-+	if (accel_key != NULL)
- 	{
- 	    mnemonic_str[0] = accel_key[1];
- 	    mnemonic_str[1] = NUL;
- 	}
- 
--	PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
--	if( accel_key != NULL )
--	    PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
--		    0 );
-+	PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
-+	if (accel_key != NULL)
-+	    PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
-+		    0);
- 
--	PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
-+	PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
- 
--	menu->id = PtCreateWidget( PtMenuButton, parent->submenu_id, n, args );
-+	menu->id = PtCreateWidget(PtMenuButton, parent->submenu_id, n, args);
- 
--	PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
-+	PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
- 
- #ifdef USE_PANEL_GROUP
--	if( gui_ph_is_buffer_item( menu, parent ) == TRUE )
-+	if (gui_ph_is_buffer_item(menu, parent) == TRUE)
- 	{
--	    PtAddCallback( menu->id, Pt_CB_DESTROYED,
--		    gui_ph_handle_buffer_remove, menu );
--	    gui_ph_pg_add_buffer( menu->dname );
-+	    PtAddCallback(menu->id, Pt_CB_DESTROYED,
-+		    gui_ph_handle_buffer_remove, menu);
-+	    gui_ph_pg_add_buffer(menu->dname);
- 	}
- #endif
-     }
- 
--    gui_ph_position_menu( menu->id, menu->priority );
-+    gui_ph_position_menu(menu->id, menu->priority);
- }
- 
-     void
- gui_mch_destroy_menu(vimmenu_T *menu)
- {
--    if( menu->submenu_id != NULL )
--	PtDestroyWidget( menu->submenu_id );
--    if( menu->id != NULL )
--	PtDestroyWidget( menu->id );
-+    if (menu->submenu_id != NULL)
-+	PtDestroyWidget(menu->submenu_id);
-+    if (menu->id != NULL)
-+	PtDestroyWidget(menu->id);
- 
-     menu->submenu_id = NULL;
-     menu->id = NULL;
-@@ -2788,12 +2789,12 @@
- {
-     long    flags, mask, fields;
- 
--    if( menu->id == NULL )
-+    if (menu->id == NULL)
- 	return;
- 
--    flags = PtWidgetFlags( menu->id );
--    if( PtWidgetIsClass( menu->id, PtMenuButton ) &&
--	    PtWidgetIsClass( PtWidgetParent( menu->id ), PtMenu ) )
-+    flags = PtWidgetFlags(menu->id);
-+    if (PtWidgetIsClass(menu->id, PtMenuButton) &&
-+	    PtWidgetIsClass(PtWidgetParent(menu->id), PtMenu))
-     {
- 	fields = Pt_FALSE;
- 	mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
-@@ -2804,11 +2805,11 @@
- 	mask = Pt_BLOCKED | Pt_GHOST;
-     }
- 
--    if( ! grey )
-+    if (! grey)
- 	fields = ~fields;
- 
--    PtSetResource( menu->id, Pt_ARG_FLAGS, fields,
--	    mask );
-+    PtSetResource(menu->id, Pt_ARG_FLAGS, fields,
-+	    mask);
- }
- 
-     void
-@@ -2829,8 +2830,8 @@
-     void
- gui_mch_show_popupmenu(vimmenu_T *menu)
- {
--    PtSetResource( menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0 );
--    PtRealizeWidget( menu->submenu_id );
-+    PtSetResource(menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0);
-+    PtRealizeWidget(menu->submenu_id);
- }
- 
-     void
-@@ -2841,14 +2842,14 @@
- 
- #endif
- 
--#if defined( FEAT_TOOLBAR ) || defined( PROTO )
-+#if defined(FEAT_TOOLBAR) || defined(PROTO)
-     void
- gui_mch_show_toolbar(int showit)
- {
--    if( showit )
--	PtRealizeWidget( gui.vimToolBar );
-+    if (showit)
-+	PtRealizeWidget(gui.vimToolBar);
-     else
--	PtUnrealizeWidget( gui.vimToolBar );
-+	PtUnrealizeWidget(gui.vimToolBar);
- }
- #endif
- 
-@@ -2869,36 +2870,36 @@
-     FontQueryInfo   info;
-     int_u	    style;
- 
--    font_tag = alloc( MAX_FONT_TAG );
--    if( font_tag != NULL )
-+    font_tag = alloc(MAX_FONT_TAG);
-+    if (font_tag != NULL)
-     {
--	if( PfGenerateFontName( font_name, font_flags, font_size,
--		    font_tag ) != NULL )
-+	if (PfGenerateFontName(font_name, font_flags, font_size,
-+		    font_tag) != NULL)
- 	{
- 	    /* Enforce some limits on the font used */
- 	    style = PHFONT_INFO_FIXED;
- 
--	    if( enforce & PF_STYLE_BOLD )
-+	    if (enforce & PF_STYLE_BOLD)
- 		style |= PHFONT_INFO_BOLD;
--	    if( enforce & PF_STYLE_ANTIALIAS )
-+	    if (enforce & PF_STYLE_ANTIALIAS)
- 		style |= PHFONT_INFO_ALIAS;
--	    if( enforce & PF_STYLE_ITALIC )
-+	    if (enforce & PF_STYLE_ITALIC)
- 		style |= PHFONT_INFO_ITALIC;
- 
--	    PfQueryFontInfo( font_tag, &info );
-+	    PfQueryFontInfo(font_tag, &info);
- 
--	    if( info.size == 0 )
-+	    if (info.size == 0)
- 		font_size = 0;
- 
- 	    /* Make sure font size matches, and that the font style
- 	     * at least has the bits we're checking for */
--	    if( font_size == info.size &&
--		    style == (info.style & style) )
--		return( (GuiFont) font_tag );
-+	    if (font_size == info.size &&
-+		    style == (info.style & style))
-+		return (GuiFont)font_tag;
- 	}
--	vim_free( font_tag );
-+	vim_free(font_tag);
-     }
--    return( NULL );
-+    return NULL;
- }
- 
- /*
-@@ -2918,34 +2919,34 @@
- 	char_u *vim_font,
- 	char_u **font_name,
- 	int_u *font_flags,
--	int_u *font_size )
-+	int_u *font_size)
- {
-     char_u  *mark;
-     int_u   name_len, size;
- 
--    mark = vim_strchr( vim_font, ':' );
--    if( mark == NULL )
--	name_len = STRLEN( vim_font );
-+    mark = vim_strchr(vim_font, ':');
-+    if (mark == NULL)
-+	name_len = STRLEN(vim_font);
-     else
--	name_len = (int_u) ( mark - vim_font );
-+	name_len = (int_u) (mark - vim_font);
- 
--    *font_name = vim_strnsave( vim_font, name_len );
--    if( *font_name != NULL )
-+    *font_name = vim_strnsave(vim_font, name_len);
-+    if (*font_name != NULL)
-     {
--	if( mark != NULL )
-+	if (mark != NULL)
- 	{
--	    while( *mark != NUL && *mark++ == ':')
-+	    while (*mark != NUL && *mark++ == ':')
- 	    {
--		switch( tolower( *mark++ ) )
-+		switch (tolower(*mark++))
- 		{
- 		    case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
- 		    case 'b': *font_flags |= PF_STYLE_BOLD; break;
- 		    case 'i': *font_flags |= PF_STYLE_ITALIC; break;
- 
- 		    case 's':
--			size = getdigits( &mark );
-+			size = getdigits(&mark);
- 			/* Restrict the size to some vague limits */
--			if( size < 1 || size > 100 )
-+			if (size < 1 || size > 100)
- 			    size = 8;
- 
- 			*font_size = size;
-@@ -2956,9 +2957,9 @@
- 		}
- 	    }
- 	}
--	return( TRUE );
-+	return TRUE;
-     }
--    return( FALSE );
-+    return FALSE;
- }
- 
-     int
-@@ -2972,60 +2973,60 @@
-     FontQueryInfo info;
-     PhRect_t extent;
- 
--    if( vim_font_name == NULL )
-+    if (vim_font_name == NULL)
-     {
- 	/* Default font */
- 	vim_font_name = "PC Terminal";
-     }
- 
--    if( STRCMP( vim_font_name, "*" ) == 0 )
-+    if (STRCMP(vim_font_name, "*") == 0)
-     {
--	font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
--		"pcterm12", -1, PHFONT_FIXED, NULL );
-+	font_tag = PtFontSelection(gui.vimWindow, NULL, NULL,
-+		"pcterm12", -1, PHFONT_FIXED, NULL);
- 
--	if( font_tag == NULL )
--	    return( FAIL );
-+	if (font_tag == NULL)
-+	    return FAIL;
- 
--	gui_mch_free_font( gui.norm_font );
-+	gui_mch_free_font(gui.norm_font);
- 	gui.norm_font = font_tag;
- 
--	PfQueryFontInfo( font_tag, &info );
--	font_name = vim_strsave( info.font );
-+	PfQueryFontInfo(font_tag, &info);
-+	font_name = vim_strsave(info.font);
-     }
-     else
-     {
--	if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
--		    &font_size ) == FALSE )
--	    return( FAIL );
-+	if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
-+		    &font_size) == FALSE)
-+	    return FAIL;
- 
--	font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
--	if( font_tag == NULL )
-+	font_tag = gui_ph_get_font(font_name, font_flags, font_size, 0);
-+	if (font_tag == NULL)
- 	{
--	    vim_free( font_name );
--	    return( FAIL );
-+	    vim_free(font_name);
-+	    return FAIL;
- 	}
- 
--	gui_mch_free_font( gui.norm_font );
-+	gui_mch_free_font(gui.norm_font);
- 	gui.norm_font = font_tag;
-     }
- 
--    gui_mch_free_font( gui.bold_font );
--    gui.bold_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_BOLD,
--	    font_size, PF_STYLE_BOLD );
--
--    gui_mch_free_font( gui.ital_font );
--    gui.ital_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_ITALIC,
--	    font_size, PF_STYLE_ITALIC );
-+    gui_mch_free_font(gui.bold_font);
-+    gui.bold_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_BOLD,
-+	    font_size, PF_STYLE_BOLD);
-+
-+    gui_mch_free_font(gui.ital_font);
-+    gui.ital_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_ITALIC,
-+	    font_size, PF_STYLE_ITALIC);
- 
-     /* This extent was brought to you by the letter 'g' */
--    PfExtentText( &extent, NULL, font_tag, "g", 1 );
-+    PfExtentText(&extent, NULL, font_tag, "g", 1);
- 
-     gui.char_width = extent.lr.x - extent.ul.x + 1;
-     gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
-     gui.char_ascent = - extent.ul.y;
- 
--    vim_free( font_name );
--    return( OK );
-+    vim_free(font_name);
-+    return OK;
- }
- 
- /*
-@@ -3036,12 +3037,12 @@
- {
-     FontQueryInfo info;
- 
--    PfQueryFontInfo( gui.norm_font, &info );
-+    PfQueryFontInfo(gui.norm_font, &info);
- 
-     gui.char_height = - info.ascender + info.descender + p_linespace;
-     gui.char_ascent = - info.ascender + p_linespace / 2;
- 
--    return( OK );
-+    return OK;
- }
- 
-     GuiFont
-@@ -3052,20 +3053,20 @@
-     int_u   font_size = 12;
-     int_u   font_flags = 0;
- 
--    if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
--		&font_size ) != FALSE )
-+    if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
-+		&font_size) != FALSE)
-     {
--	font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
--	vim_free( font_name );
-+	font_tag = gui_ph_get_font(font_name, font_flags, font_size, -1);
-+	vim_free(font_name);
- 
--	if( font_tag != NULL )
--	    return( (GuiFont) font_tag );
-+	if (font_tag != NULL)
-+	    return (GuiFont)font_tag;
-     }
- 
--    if( report_error )
--	EMSG2(e_font, vim_font_name );
-+    if (report_error)
-+	EMSG2(e_font, vim_font_name);
- 
--    return( FAIL );
-+    return FAIL;
- }
- 
- #if defined(FEAT_EVAL) || defined(PROTO)
-@@ -3087,12 +3088,12 @@
-     void
- gui_mch_set_font(GuiFont font)
- {
--    PgSetFont( font );
-+    PgSetFont(font);
- }
- 
-     void
- gui_mch_free_font(GuiFont font)
- {
--    vim_free( font );
-+    vim_free(font);
- }
- 
-diff -Naur vim73.orig/src/gui_riscos.c vim73/src/gui_riscos.c
---- vim73.orig/src/gui_riscos.c	2010-05-15 11:04:09.000000000 +0000
-+++ vim73/src/gui_riscos.c	1970-01-01 00:00:00.000000000 +0000
-@@ -1,3558 +0,0 @@
--/* vi:set ts=8 sts=4 sw=4:
-- *
-- * VIM - Vi IMproved	by Bram Moolenaar
-- *
-- * Do ":help uganda"  in Vim to read copying and usage conditions.
-- * Do ":help credits" in Vim to see a list of people who contributed.
-- * See README.txt for an overview of the Vim source code.
-- */
--
--#include "vim.h"
--#include <string.h>
--
--/*
-- * gui_riscos.c
-- *
-- * Thomas Leonard <tal197@ecs.soton.ac.uk>
-- * Updated by Andy Wingate <andy@sparse.net>
-- */
--
--extern int time_of_last_poll;
--
--int task_handle = 0;		/* Zero means we are not yet a Wimp task */
--int child_handle = 0;		/* Task handle of our child process (zero if none). */
--int *wimp_menu = (int *) -1;	/* Pointer to a Wimp menu structure (or -1) */
--int save_window = -1;		/* Save As window handle */
--
--int *redraw_block = NULL;	/* NULL means not in a redraw loop. */
--int ro_return_early = FALSE;	/* Break out of gui_mch_wait_for_chars() */
--
--int leaf_ref = 0;		/* Wimp message number - send via Wimp$Scrap */
--char_u *leaf_name = NULL;	/* Leaf name from DataSave */
--
--int default_columns = 120;	/* These values are used if the --rows and --columns */
--int default_rows = 32;		/* options aren't used on startup. */
--
--#define DRAG_FALSE	    0
--#define DRAG_SELECTION	    1
--#define DRAG_RESIZE_WINDOW  2
--int ro_dragging = DRAG_FALSE;
--int drag_button;
--int drag_modifiers;
--int drag_x_offset;
--int drag_y_offset;
--
--int nested_wimp = FALSE;	/* Bool - can we use the new wimp? */
--
--int changed_mode = FALSE;
--int x_eigen_factor;
--int y_eigen_factor;
--
--/* If ro_current_font is non-zero then use the outline font with that handle,
-- * otherwise, if zap_redraw is TRUE then use ZapRedraw, otherwise use the
-- * system font.
-- *
-- * If zap_redraw is TRUE then zap_file[] contains valid Zap font file
-- * pointers (or NULLs).
-- */
--int ro_current_font = 0;	/* 0 is system font, or ZapRedraw */
--int font_x_offset   = 0;	/* Where to position each char in its box */
--int font_y_offset   = 0;
--
--int zap_redraw	    = FALSE;
--int double_height   = FALSE;	/* Plot each line twice? */
--
--#define grgb(r,g,b) ((b<<16) + (g<<8) + (r))
--#define UNUSED_COLOUR (gui.back_pixel)
--
--#define RO_LOAD_CLIPBOARD -2	/* Internal handle for DataSave message. */
--
--/* Changes by John Kortink, 22-23 July 1998
-- *
-- * Stuff to make redraw a lot faster. Almost all of it is right here below,
-- * elsewhere changes are marked with 'JK230798'. Apart from a small change in
-- * 'gui.c' all changes are limited to this file, 'gui_riscos.c'. The change in
-- * 'gui.c' is to make Vim stop being 'smart' not redrawing characters that are
-- * 'already there' (i.e. from the previous line, by coincidence). This caused a
-- * lot more calls to the redraw code, which we want to avoid because a few nice
-- * big strings at a time is a lot faster than a truckload of small ones. ('Dear
-- * Bram ...').
-- */
--
--/* The ZapRedraw structure */
--
--static struct
--{
--    int		r_flags;
--    int		r_minx;
--    int		r_miny;
--    int		r_maxx;
--    int		r_maxy;
--    int		r_screen;
--    int		r_bpl;
--    int		r_bpp;
--    int		r_charw;
--    int		r_charh;
--    char	*r_caddr;
--    int		r_cbpl;
--    int		r_cbpc;
--    int		r_linesp;
--    int		r_data;
--    int		r_scrollx;
--    int		r_scrolly;
--    int		*r_palette;
--    int		r_for;
--    int		r_bac;
--    char	*r_workarea;
--    int		r_magx;
--    int		r_magy;
--    int		r_xsize;
--    int		r_ysize;
--    int		r_mode;
--}
--zap_redraw_block;
--
--/* Other globals */
--
--static int	zap_redraw_initialised = FALSE;
--static int	zap_redraw_update_colours;
--static int	zap_redraw_colours[2];
--static int	zap_redraw_palette[16];
--
--/* Holds the current Zap font file(s).
-- * The font is recreated from this block on a mode change.
-- * When using zap, element ZAP_NORMAL is always valid, but
-- * the others can be NULL.
-- */
--
--#define ZAP_NORMAL  0
--#define ZAP_BOLD    1
--#define ZAP_ITALIC  2
--#define ZAP_BITALIC 3
--#define ZAP_STYLES  4
--
--/* Zap font file format data */
--static char	*zap_file[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
--
--/* r_caddr format for current mode */
--static char	*zap_caddr[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
--
--static void ro_remove_menu(int *menu);
--
--/*
-- * Initialise all the ZapRedraw stuff.
-- * Call this when changing font and after each mode change.
-- * zap_redraw_bitmap must contain a valid Zap font file (possibly
-- * created from the system font).
-- *
-- * Return FAIL to revert to system font (if we can't use ZapRedraw).
-- */
--    int
--ro_zap_redraw_initialise()
--{
--    int	    bytes_per_bitmap_char;
--    int	    first, last;
--    int	    i;
--
--    /* Can't have initialisers for struct members :-(, ok, this way then ... */
--    if (!zap_redraw_initialised)
--    {
--	zap_redraw_block.r_workarea = NULL;
--	zap_redraw_initialised = TRUE;
--    }
--
--    /* We redraw in DSA mode */
--    zap_redraw_block.r_flags = 0x0;
--
--    /* Let ZapRedraw get the screen address for us */
--    zap_redraw_block.r_screen = 0;
--
--    /* Read the font width and height from the font file header.
--     * Assume that all styles are the same size.
--     * ZAP_NORMAL is always present.
--     */
--    zap_redraw_block.r_charw = ((int *) zap_file[ZAP_NORMAL])[2];
--    zap_redraw_block.r_charh = ((int *) zap_file[ZAP_NORMAL])[3];
--
--    /* We have no linespacing */
--    zap_redraw_block.r_linesp = 0;
--
--    /* Fix foreground = colour 1 */
--    zap_redraw_block.r_for = 1;
--
--    /* Fix background = colour 0 */
--    zap_redraw_block.r_bac = 0;
--
--    /* Colour mask buffer */
--    zap_redraw_block.r_palette = zap_redraw_palette;
--
--    /* Allocate local workspace (for the few calls following here) */
--    if (zap_redraw_block.r_workarea != NULL)
--	free(zap_redraw_block.r_workarea);
--    zap_redraw_block.r_workarea = (char*) malloc(128);
--    if (!zap_redraw_block.r_workarea)
--	return FAIL;	/* Out of memory */
--
--    /* Fill in VDU variables */
--    if (xswi(ZapRedraw_ReadVduVars, 0, &zap_redraw_block) & v_flag)
--	return FAIL;	    /* Can't find ZapRedraw module - use VDU instead */
--
--    /* Determine cbpl and cbpc */
--    swi(ZapRedraw_CachedCharSize, zap_redraw_block.r_bpp, 0,
--	zap_redraw_block.r_charw, zap_redraw_block.r_charh);
--    zap_redraw_block.r_cbpl = r2;
--    zap_redraw_block.r_cbpc = r3;
--
--    /* Allocate general workspace (for the calls outside) */
--    if (zap_redraw_block.r_workarea != NULL)
--	free(zap_redraw_block.r_workarea);
--    zap_redraw_block.r_workarea = (char*) malloc(128 + zap_redraw_block.r_cbpl);
--    if (!zap_redraw_block.r_workarea)
--	return FAIL;	/* Out of memory */
--
--    /* Now convert the 1 bpp character data ready for the current mode */
--
--    bytes_per_bitmap_char = (zap_redraw_block.r_charw * zap_redraw_block.r_charh + 7) / 8;
--
--    /* Convert the fonts from 1bpp to a format suitable for the
--     * current mode.
--     */
--    for (i = 0; i < ZAP_STYLES; i++)
--    {
--	first = ((int *) zap_file[i])[4];
--	last  = ((int *) zap_file[i])[5];
--
--	if (last > 255)
--	    last = 255;	/* Don't convert cursors (overwrites memory!) */
--
--	/* Allocate the font cache */
--	vim_free(zap_caddr[i]);
--	if (zap_file[i])
--	    zap_caddr[i] = (char*) malloc(zap_redraw_block.r_cbpc * 256);
--	else
--	    zap_caddr[i] = NULL;    /* No file for this style */
--
--	if (zap_caddr[i])
--	{
--	    zap_redraw_block.r_caddr = zap_caddr[i];
--
--	    swi(ZapRedraw_ConvertBitmap, 0, &zap_redraw_block,
--		    first, last,		/* Range of characters to convert */
--		    zap_file[i] + 0x20	/* Addr of first char provided by font */
--		    - first * bytes_per_bitmap_char);
--	}
--    }
--
--    if (!zap_caddr[ZAP_NORMAL])
--    {
--	zap_redraw = FALSE;	/* Out of memory */
--	return FAIL;
--    }
--
--    /* Next time we need them, we have to update the colour masks */
--    zap_redraw_update_colours = TRUE;
--
--    return OK;
--}
--
--/*
-- * Redraw a string at OS coordinates <x,y> (top-left, x inclusive, y exclusive).
-- * Graphics clip window is window[0..3] as in R1+28..40 of Wimp_RedrawWindow.
-- * Returns (possibly modified) flags.
-- */
--    int
--ro_zap_redraw_draw_string(x, y, string, length, flags, clip)
--    int	    x;
--    int	    y;
--    char    *string;
--    int	    length;
--    int	    flags;	/* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL, DRAW_ITALIC */
--    int	    *clip;
--{
--    char redraw_data[1024];
--    int clip_minx;
--    int clip_miny;
--    int clip_maxx;
--    int clip_maxy;
--    int os_xshift = zap_redraw_block.r_magx;
--    int os_yshift = zap_redraw_block.r_magy;
--
--    if (flags & DRAW_TRANSP)
--	return flags;	/* We don't do transparent plotting yet. */
--
--    if (flags & DRAW_BOLD)
--    {
--	if (flags & DRAW_ITALIC && zap_caddr[ZAP_BITALIC])
--	    zap_redraw_block.r_caddr = zap_caddr[ZAP_BITALIC];
--	else
--	    zap_redraw_block.r_caddr = zap_caddr[ZAP_BOLD];
--    }
--    else
--    {
--	if (flags & DRAW_ITALIC)
--	    zap_redraw_block.r_caddr = zap_caddr[ZAP_ITALIC];
--	else
--	    zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
--    }
--    if (!zap_redraw_block.r_caddr)
--    {
--	zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
--	flags |= DRAW_UNDERL;	    /* Style missing - we can always underline */
--    }
--
--    /* Set the vertical scaling flag */
--    if (double_height)
--	zap_redraw_block.r_flags = 1 << 1;
--    else
--	zap_redraw_block.r_flags = 0;
--
--    /* Update the colour masks (if needed) */
--    if (zap_redraw_update_colours)
--    {
--	swi(ZapRedraw_CreatePalette, 2,
--		&zap_redraw_block,
--		zap_redraw_colours,
--		zap_redraw_block.r_palette, 2);
--	zap_redraw_update_colours = FALSE;
--    }
--
--    /* Target rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
--    zap_redraw_block.r_minx = x >> os_xshift;					/* inclusive */
--    zap_redraw_block.r_miny = zap_redraw_block.r_ysize - (y >> os_yshift);	/* inclusive */
--    zap_redraw_block.r_maxx = (x + length * gui.char_width) >> os_xshift;	/* exclusive */
--    zap_redraw_block.r_maxy = zap_redraw_block.r_ysize - ((y - gui.char_height) >> os_yshift);
--										/* exclusive */
--
--    /* Clip rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
--    clip_minx = clip[0] >> os_xshift;					/* inclusive */
--    clip_miny = zap_redraw_block.r_ysize - (clip[3] >> os_yshift);	/* inclusive */
--    clip_maxx = clip[2] >> os_xshift;					/* exclusive */
--    clip_maxy = zap_redraw_block.r_ysize - (clip[1] >> os_yshift);	/* exclusive */
--
--    /* Clip target rectangle against the current graphics window */
--    if (zap_redraw_block.r_minx < clip_minx)
--    {
--	zap_redraw_block.r_scrollx = clip_minx - zap_redraw_block.r_minx;
--	zap_redraw_block.r_minx = clip_minx;
--    }
--    else
--	zap_redraw_block.r_scrollx = 0;
--    if (zap_redraw_block.r_miny < clip_miny)
--    {
--	zap_redraw_block.r_scrolly = clip_miny - zap_redraw_block.r_miny;
--	zap_redraw_block.r_miny = clip_miny;
--    }
--    else
--	zap_redraw_block.r_scrolly = 0;
--    if (zap_redraw_block.r_maxx > clip_maxx)
--	zap_redraw_block.r_maxx = clip_maxx;
--    if (zap_redraw_block.r_maxy > clip_maxy)
--	zap_redraw_block.r_maxy = clip_maxy;
--
--    /* Fill in the character data structure */
--    if (length > (sizeof(redraw_data) - 2 * 4 - 2))
--	length = sizeof(redraw_data) - 2 * 4 - 2;
--    ((int*) redraw_data)[0] = 2 * 4;
--    ((int*) redraw_data)[1] = 0;
--    strncpy(redraw_data + 2 * 4, string, length);
--    redraw_data[2 * 4 + length + 0] = '\0';
--    redraw_data[2 * 4 + length + 1] = '\x2';
--    zap_redraw_block.r_data = (int) redraw_data;
--
--    /* Perform the draw */
--    swi(ZapRedraw_RedrawArea, 0, &zap_redraw_block);
--
--    return flags;
--}
--
--/*
-- * Okay that was it from me, back to Thomas ...
-- */
--
--/*
-- * Parse the GUI related command-line arguments.  Any arguments used are
-- * deleted from argv, and *argc is decremented accordingly.  This is called
-- * when vim is started, whether or not the GUI has been started.
-- */
--    void
--gui_mch_prepare(int *argc, char **argv)
--{
--    int	    arg = 1;
--
--    while (arg < *argc - 1)
--    {
--	if (strcmp(argv[arg], "--rows") == 0 || strcmp(argv[arg], "--columns") == 0)
--	{
--	    int	    value;
--
--	    value = atoi(argv[arg + 1]);
--
--	    if (argv[arg][2] == 'r')
--		default_rows = value;
--	    else
--		default_columns = value;
--
--	    /* Delete argument from argv[]. (hope this is read/write!) */
--
--	    *argc -= 2;
--	    if (*argc > arg)
--	    mch_memmove(&argv[arg], &argv[arg + 2], (*argc - arg)
--		    * sizeof(char *));
--	}
--	else
--	    arg++;
--    }
--}
--
--/* Fatal error on initialisation - report it and die. */
--    void
--ro_die(error)
--    char_u *error;	/* RISC OS error block */
--{
--    swi(Wimp_ReportError, error, 5, "GVim");
--    exit(EXIT_FAILURE);
--}
--
--/* Find the sizes of the window tools:
-- *
-- * Create a test window.
-- * Find inner and outer sizes.
-- * Find the difference.
-- * Delete window.
-- *
-- * While we're here, find the eigen values too.
-- */
--    void
--ro_measure_tools()
--{
--    int block[10];
--    int vdu[] = { 4, 5, -1};
--    int test_window[] =
--	{
--	    -100, -100,		/* Visible area : min X,Y */
--	    -50, -50,		/*		  max X,Y */
--	    0,   0,		/* Scroll offsets */
--	    -1,			/* Window in front */
--	    0xd0800150,		/* Window flags */
--	    0xff070207,		/* Colours */
--	    0x000c0103,		/* More colours */
--	    0, -0x4000,		/* Workarea extent */
--	    0x4000, 0,		/* max X,Y */
--	    0x00000000,		/* No title */
--	    0 << 12,		/* No workarea button type */
--	    1,			/* Wimp sprite area */
--	    0x00010001,		/* Minimum width, height */
--	    0, 0, 0,		/* Title data (none) */
--	    0			/* No icons */
--	};
--    int inner_max_x, inner_min_y;
--
--    swi(Wimp_CreateWindow, 0, test_window);
--
--    block[0] = r0;
--    /* Open the window (and read state).
--     * GetWindowOutline needs it too if the wimp isn't nested.
--     */
--    swi(Wimp_OpenWindow, 0, block);
--    inner_max_x = block[3];
--    inner_min_y = block[2];
--
--    swi(Wimp_GetWindowOutline, 0, block);
--
--    gui.scrollbar_width = block[3] - inner_max_x;
--    gui.scrollbar_height = inner_min_y - block[2];
--
--    swi(Wimp_DeleteWindow, 0, block);
--
--    /* Read the size of one pixel. */
--    swi(OS_ReadVduVariables, vdu, vdu);
--    x_eigen_factor = vdu[0];
--    y_eigen_factor = vdu[1];
--}
--
--/* Load a template from the current templates file.
-- * Create the window and return its handle.
-- */
--    int
--ro_load_template(str_name, title, title_size)
--    char_u  *str_name;      /* Identifier of window in file (max 12 chars)   */
--    char_u  **title;	    /* If not NULL then return pointer to title here */
--    int     *title_size;    /* If not NULL then return the title length here */
--{
--    int     *window;
--    char    *data;
--    int     name[4];
--
--    strcpy( (char *) name, str_name);
--
--    /* Find how big we must make the buffers */
--
--    if (xswi(Wimp_LoadTemplate, 0, 0, 0, 0, -1, name, 0) & v_flag)
--	ro_die( (char *) r0);
--
--    window = malloc(r1);	/* Don't print text messages from alloc() */
--    data = malloc(r2);
--    if (window == NULL || data == NULL)
--	ro_die("\0\0\0\0Out of memory - Can't load templates");
--
--    /* Load the template into the buffers */
--
--    swi(Wimp_LoadTemplate, 0,
--				window,		/* Temp block */
--				data,		/* Icon data */
--				data + r2 + 1,	/* End of icon data */
--				-1,		/* No fonts */
--				name, 0);	/* First match */
--    if (r6 == 0)
--	ro_die("\0\0\0\0Can't find window in Templates file");
--
--    /* Create the window */
--
--    if (xswi(Wimp_CreateWindow, 0, window) & v_flag)
--	ro_die( (char *) r0);
--
--    if (title)
--	*title = (char_u *) window[18];
--    if (title_size)
--	*title_size = window[20];
--
--    free(window);	/* Free temp block */
--    return r0;		/* Return the window handle */
--}
--
--/*
-- * Check if the GUI can be started.  Called before gvimrc is sourced.
-- * Return OK or FAIL.
-- */
--    int
--gui_mch_init_check()
--{
--    return OK;		/* TODO: GUI can always be started? */
--}
--
--/*
-- * Initialise the RISC OS GUI.
-- * Create all the windows.
-- * Returns OK for success, FAIL when the GUI can't be started.
-- */
--    int
--gui_mch_init()
--{
--    int     messages[] = {
--	    1, 2, 3, 4,	/* DataSave, DataSaveAck, DataLoad, DataLoadAck */
--	    8,		/* PreQuit */
--	    0xf,	/* ClaimEntity (for clipboard) */
--	    0x10,	/* DataRequest (for clipboard) */
--	    0x400c1,	/* Mode change */
--	    0x400c3,	/* TaskCloseDown */
--	    0x400c9,	/* MenusDeleted */
--	    0x808c1,	/* TW_Output */
--	    0x808c2,    /* TW_Ego */
--	    0x808c3,	/* TW_Morio */
--	    0x808c4,	/* TW_Morite */
--	    0};		/* End-of-list. */
--
--
--    /* There may have been some errors reported in the
--     * command window before we get here. Wait if so.
--     */
--    swi(Wimp_ReadSysInfo, 3);
--    if (r0 == 0)
--	swi(Wimp_CommandWindow, 0);	/* Window opened - close with prompt */
--
--    if (xswi(Wimp_Initialise, 310, 0x4b534154, "GVim", messages) & v_flag)
--	return FAIL;
--    nested_wimp = r0 >= 397;
--    task_handle = r1;
--
--    /* Load the templates. */
--
--    if (xswi(Wimp_OpenTemplate, 0, "Vim:Templates") & v_flag)
--	ro_die( (char *) r0);
--
--    gui.window_handle = ro_load_template("editor",
--	    &gui.window_title,
--	    &gui.window_title_size);
--
--    save_window = ro_load_template("save", NULL, NULL);
--
--    swi(Wimp_CloseTemplate);
--
--    /* Set default foreground and background colours. */
--
--    gui.norm_pixel = gui.def_norm_pixel;
--    gui.back_pixel = gui.def_back_pixel;
--
--    /* Get the colours from the "Normal" and "Menu" group (set in syntax.c or
--     * in a vimrc file) */
--
--    set_normal_colors();
--
--    /*
--     * Check that none of the colors are the same as the background color
--     */
--
--    gui_check_colors();
--
--    /* Get the colours for the highlight groups (gui_check_colors() might have
--     * changed them) */
--
--    highlight_gui_started();		/* re-init colours and fonts */
--
--    /* Set geometry based on values read on initialisation. */
--
--    gui.num_cols = Columns = default_columns;
--    gui.num_rows = Rows    = default_rows;
--
--    /* Get some information about our environment. */
--
--    ro_measure_tools();
--
--    return OK;
--}
--
--/*
-- * Called when the foreground or background colour has been changed.
-- */
--    void
--gui_mch_new_colors()
--{
--}
--
--/*
-- * Open the GUI window which was created by a call to gui_mch_init().
-- */
--    int
--gui_mch_open(void)
--{
--    int block[10];
--
--    block[0] = gui.window_handle;
--    swi(Wimp_GetWindowState, 0, block);
--    block[7] = -1;		    /* Open at the top of the stack */
--    swi(Wimp_OpenWindow, 0, block);
--
--    /* Give the new window the input focus */
--    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
--
--    if (gui_win_x != -1 && gui_win_y != -1)
--	gui_mch_set_winpos(gui_win_x, gui_win_y);
--
--    return OK;
--}
--
--    void
--gui_mch_exit(int rc)
--{
--    int	    block[64];
--
--    /* Close window. Stops us from getting troublesome events
--     * if we take a while to die.
--     */
--    block[0] = gui.window_handle;
--    swi(Wimp_CloseWindow, 0, block);
--
--    if (child_handle)
--    {
--	/* We still have a sub-task running - kill it */
--	block[0] = 20;
--	block[3] = 0;
--	block[4] = 0;	    /* Quit */
--	if ((xswi(Wimp_SendMessage, 17, block, child_handle) & v_flag) == 0)
--	{
--	    /* Idle until child dies. */
--	    while (child_handle)
--	    {
--		process_event(wimp_poll(1, block), block);
--	    }
--	}
--    }
--
--    exit(rc);
--}
--
--/*
-- * Get the position of the top left corner of the window.
-- */
--    int
--gui_mch_get_winpos(int *x, int *y)
--{
--    /* TODO */
--    return FAIL;
--}
--
--/*
-- * Set the position of the top left corner of the window to the given
-- * coordinates.
-- */
--    void
--gui_mch_set_winpos(int x, int y)
--{
--    /* TODO */
--}
--
--    void
--gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
--    int width;		/* In OS units */
--    int height;
--    int min_width;	/* Smallest permissible window size (ignored) */
--    int min_height;
--    int base_width;	/* Space for scroll bars, etc */
--    int base_height;
--    int direction;
--{
--    int s_width, s_height;
--    int block[] = {
--	gui.window_handle,
--	0,
--	-height + 1,
--	width,
--	1};
--
--    gui_mch_get_screen_dimensions(&s_width, &s_height);
--    s_width -= base_width;
--    s_height -= base_height;		    /* Underestimate - ignores titlebar */
--
--    swi(Wimp_GetWindowState, 0, block);
--    block[3]  = block[1] + width;
--    block[2]  = block[4] - height;
--    if (block[3] > s_width)
--    {
--	block[3] = s_width;
--	block[1] = block[3] - width;
--    }
--    if (block[2] < gui.scrollbar_height)
--    {
--	block[2] = gui.scrollbar_height;
--	block[4] = block[2] + height;
--    }
--    swi(Wimp_OpenWindow, 0, block);
--    swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
--}
--
--    void
--gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
--{
--    int block[] = {4, 5, 11, 12, -1};
--
--    swi(OS_ReadVduVariables, block, block);
--    *screen_w = (block[2] + 1) << block[0];
--    *screen_h = (block[3] + 1) << block[1];
--}
--
--/* Take a font name with options and return a font handle, or
-- * zero for failure.
-- * Replace extension with 'Bold' or 'Italic' depending on modifiers.
-- */
--    int
--ro_get_font(fullname, weight)
--    char_u	*fullname;
--    int		weight;		/* Initial weights:
--				 * BIT	    MEANING
--				 * 0	    bold
--				 * 1	    italic
--				 */
--{
--    char_u	*arg;
--    char_u	font[41];
--    int		width = -1;
--    int		height = -1;
--    int		name_len;
--    int		i;
--    char_u	c;
--
--    for (i = 0; i < 39;)
--    {
--	c = fullname[i];
--	if (c == ':' || c == NUL || c == '.')
--	    break;
--	font[i++] = c;
--    }
--
--    /* find the first modifier, NULL if none */
--    arg = strchr(fullname + i, ':');
--
--    while (arg)
--    {
--	switch (*++arg)
--	{
--	    case 'h':
--		height = strtol(arg + 1, (char **) &arg, 10);
--		break;
--	    case 'w':
--		width = strtol(arg + 1, (char **) &arg, 10);
--		break;
--	    case 'b':
--		weight |= 1;
--		break;
--	    case 'i':
--		weight |= 2;
--		break;
--	    default:
--		return 0;
--	}
--	arg = strchr(arg, ':');
--    }
--
--    if ((weight & 1) && i < 35)
--    {
--	/* Bold goes instead of given suffix */
--	strncpy(font + i, ".Bold", 5);
--	i += 5;
--    }
--    else
--    {
--	/* Copy rest of name unless we are using Bold */
--	while (i < 39)
--	{
--	    c = fullname[i];
--	    if (c == ':' || c == NUL)
--		break;
--	    font[i++] = c;
--	}
--    }
--    if ((weight & 2) && i < 32)
--    {
--	strncpy(font + i, ".Oblique", 8);
--	i += 8;
--    }
--
--    font[i] = 0;
--
--    if (height < 1 && width < 1)
--	height = width = 10;	/* Default to 10pt */
--    else if (height < 1)
--	height = width;
--    else if (width < 1)
--	width = height;
--
--    if (xswi(Font_FindFont, 0, font, width << 4, height << 4, 0, 0) & v_flag)
--	return NOFONT;		/* Can't find font */
--
--    return r0;
--}
--
--/* Load a file into allocated memory and check it is valid.
-- * Return a pointer to the allocated block on success.
-- */
--    char    *
--zap_load_file(name, style)
--    char_u  *name;	    /* Name of directory containing styles */
--    char_u  *style;	    /* Name of style within directory */
--{
--    char_u  fname[256];
--    char_u  *file;
--
--    if (strlen(name) + strlen(style) > 254)
--	return NULL;	    /* Names too long */
--
--    sprintf(fname, "%s.%s", name, style);
--
--    /* Load the named font in 1bpp format. */
--    if (xswi(OS_File, 13, fname, 0, 0, "VimFonts:") & v_flag || r0 != 1)
--	return NULL;	    /* Error reading file info, or not a file */
--
--    /* Allocate enough memory to load the whole file */
--    file = (char *) alloc(r4);
--    if (!file)
--	return NULL;	/* Out of memory */
--
--    if (xswi(OS_File, 12, fname, file, 0, "VimFonts:") & v_flag)
--	return NULL;	/* Unable to load file */
--
--    if (strncmp(file, "ZapFont\015", 8) == 0)
--	return file;	/* Loaded OK! */
--
--    vim_free(file);
--    return NULL;	/* Not a valid font file */
--}
--
--/* Load and convert the named font.
-- * If name is NULL or a null string then convert the system font.
-- * Return OK on success; FAIL and we revert to using the VDU drivers.
-- *
-- * 'name' is the name of a directory.
-- * Tries to load 'name.0', 'name.B', 'name.I' and 'name.IB'.
-- */
--    int
--zap_load_font(name)
--    char_u  *name;
--{
--    int	    i;
--
--    /* Free the existing font files, if any */
--    for (i = 0; i < ZAP_STYLES; i++)
--    {
--	vim_free(zap_file[i]);
--	zap_file[i] = NULL;
--    }
--
--    if (name && *name == '!')
--    {
--	name++;
--	double_height = TRUE;
--    }
--    else
--	double_height = FALSE;
--
--    if (name && *name)
--    {
--	zap_file[ZAP_NORMAL]	= zap_load_file(name, "0");
--	if (!zap_file[ZAP_NORMAL])
--	    return FAIL;	/* Can't load the 'normal' style - error */
--
--	zap_file[ZAP_BOLD]	= zap_load_file(name, "B");
--	zap_file[ZAP_ITALIC]	= zap_load_file(name, "I");
--	zap_file[ZAP_BITALIC]	= zap_load_file(name, "IB");
--    }
--    else
--    {
--	int	*header;
--	char	workarea[16];
--	char	*old_wa;
--
--	/* Allocate memory for system font (8 x 8 x 256 bits, plus header) */
--	header = (int *) alloc(0x20 + 8 * 256);
--	if (header == NULL)
--	    return FAIL;
--	zap_file[ZAP_NORMAL] = (char *) header;
--
--	/* Store details about the system font */
--	header[2] = 8;	    /* Width */
--	header[3] = 8;	    /* Height */
--	header[4] = 0;	    /* First char */
--	header[5] = 255;    /* Last char */
--	header[6] = header[7] = 0;  /* Reserved */
--
--	/* Get system font bitmap */
--	old_wa = zap_redraw_block.r_workarea;
--	zap_redraw_block.r_workarea = workarea;
--	swi(ZapRedraw_ReadSystemChars, zap_file[ZAP_NORMAL] + 0x20, &zap_redraw_block);
--	zap_redraw_block.r_workarea = old_wa;
--    }
--
--    return ro_zap_redraw_initialise();
--}
--
--/*
-- * Initialise vim to use the font with the given name.
-- * Return FAIL if the font could not be loaded, OK otherwise.
-- */
--    int
--gui_mch_init_font(char_u *font_name, int fontset)
--{
--    int	    new_handle	= 0;	    /* Use the system font by default */
--
--    if (font_name[0] == '!')
--    {
--	/* Select a ZapRedraw font */
--	if (zap_load_font(font_name + 1))
--	    zap_redraw = TRUE;
--	else
--	{
--	    EMSG2(_("E610: Can't load Zap font '%s'"), font_name);
--	    font_name = "System";   /* Error - use system font */
--	    zap_redraw = FALSE;
--	}
--    }
--    else
--    {
--	zap_redraw = FALSE;
--
--	if (font_name)
--	{
--	    /* Extract any extra details about the font */
--	    new_handle = ro_get_font(font_name, 0);
--	    if (!new_handle)
--		return FAIL;
--	}
--	else
--	    font_name = "System";
--    }
--
--    /* Free the previous font, if any */
--    gui_mch_free_font(gui.norm_font);
--    gui.norm_font = new_handle;
--    gui.char_ascent = 0;
--
--    if (new_handle)
--    {
--	/* Read details about the chosen font */
--	swi(Font_ReadInfo, new_handle);
--
--	gui.char_width	= r3 - r1;
--	gui.char_height = r4 - r2;
--
--	font_x_offset = -r1;	/* Where to position each char in its box */
--	font_y_offset = -r4;
--
--	/* Try to load other fonts for bold, italic, and bold-italic */
--	gui_mch_free_font(gui.bold_font);
--	gui.bold_font = ro_get_font(font_name, 1);
--	gui_mch_free_font(gui.ital_font);
--	gui.ital_font = ro_get_font(font_name, 2);
--	gui_mch_free_font(gui.boldital_font);
--	gui.boldital_font = ro_get_font(font_name, 3);
--    }
--    else
--    {
--	/* Use the system font or ZapRedraw. */
--	if (zap_redraw)
--	{
--	    gui.char_width	= zap_redraw_block.r_charw << zap_redraw_block.r_magx;
--	    gui.char_height	= zap_redraw_block.r_charh << zap_redraw_block.r_magy;
--	    if (double_height)
--		gui.char_height <<= 1;
--	}
--	else
--	{
--	    gui.char_width	= 16;
--	    gui.char_height	= 32;
--	}
--
--	gui_mch_free_font(gui.bold_font);
--	gui.bold_font = 0;
--	gui_mch_free_font(gui.ital_font);
--	gui.ital_font = 0;
--	gui_mch_free_font(gui.boldital_font);
--	gui.boldital_font = 0;
--    }
--    hl_set_font_name(font_name);
--
--    must_redraw = CLEAR;
--    return OK;
--}
--
--/*
-- * Adjust gui.char_height (after 'linespace' was changed).
-- */
--    int
--gui_mch_adjust_charheight()
--{
--    return FAIL;
--}
--
--/*
-- * Get a font structure for highlighting.
-- */
--    GuiFont
--gui_mch_get_font(name, giveErrorIfMissing)
--    char_u	*name;
--    int		giveErrorIfMissing;
--{
--    int		handle;
--
--    if (!name)
--	return NOFONT;		/* System font if no name */
--
--    handle = ro_get_font(name, 0);
--    if (!handle)
--    {
--	if (giveErrorIfMissing)
--	    EMSG2(_("E611: Can't use font %s"), name);
--	return NOFONT;
--    }
--
--    return handle;
--}
--
--#if defined(FEAT_EVAL) || defined(PROTO)
--/*
-- * Return the name of font "font" in allocated memory.
-- * Don't know how to get the actual name, thus use the provided name.
-- */
--    char_u *
--gui_mch_get_fontname(font, name)
--    GuiFont font;
--    char_u  *name;
--{
--    if (name == NULL)
--	return NULL;
--    return vim_strsave(name);
--}
--#endif
--
--/*
-- * Set the current text font.
-- */
--    void
--gui_mch_set_font(GuiFont font)
--{
--    ro_current_font = font;
--
--    if (font)
--    {
--	/* Not the system font or ZapRedraw font - select it */
--	swi(Font_SetFont, font);
--    }
--}
--
--/*
-- * If a font is not going to be used, free its structure.
-- */
--    void
--gui_mch_free_font(GuiFont font)
--{
--    if (font)
--	swi(Font_LoseFont, font);
--}
--
--/*
-- * Return the Pixel value (colour) for the given colour name.
-- * Return INVALCOLOR for error.
-- * NB: I've changed Green for now, since it looked really sick
-- */
--    guicolor_T
--gui_mch_get_color(char_u *name)
--{
--    int		i;
--    struct colour
--    {
--	char_u		*name;
--	guicolor_T	value;
--    } colours[] =
--    {
--	{ "Red",		grgb(255,	0,	0)	},
--	{ "LightRed",		grgb(255,	0,	0)	},
--	{ "DarkRed",		grgb(139,	0,	0)	},
--
--	{ "Green",		grgb(50,	200,	50)	},
--	{ "LightGreen",		grgb(144,	238,	144)	},
--	{ "DarkGreen",		grgb(0,		100,	0)	},
--	{ "SeaGreen",		grgb(46,	139,	87)	},
--
--	{ "Blue",		grgb(0,		0,	255)	},
--	{ "LightBlue",		grgb(173,	216,	230)	},
--	{ "DarkBlue",		grgb(0,		0,	139)	},
--	{ "SlateBlue",		grgb(160,	90,	205)	},
--
--	{ "Cyan",		grgb(0,		255,	255)	},
--	{ "LightCyan",		grgb(224,	255,	255)	},
--	{ "DarkCyan",		grgb(0,		139,	139)	},
--
--	{ "Magenta",		grgb(255,	0,	255)	},
--	{ "LightMagenta",	grgb(255,	224,	255)	},
--	{ "DarkMagenta",	grgb(139,	0,	139)	},
--
--	{ "Yellow",		grgb(255,	255,	0)	},
--	{ "LightYellow",	grgb(255,	255,	224)	},
--	{ "DarkYellow",		grgb(139,	139,	0)	},
--	{ "Brown",		grgb(165,	42,	42)	},
--
--	{ "Gray",		grgb(190,	190,	190)	},
--	{ "Grey",		grgb(190,	190,	190)	},
--	{ "LightGray",		grgb(211,	211,	211)	},
--	{ "LightGrey",		grgb(211,	211,	211)	},
--	{ "DarkGray",		grgb(169,	169,	169)	},
--	{ "DarkGrey",		grgb(169,	169,	169)	},
--	{ "Gray10",		grgb(26,	26,	26)	},
--	{ "Grey10",		grgb(26,	26,	26)	},
--	{ "Gray20",		grgb(51,	51,	51)	},
--	{ "Grey20",		grgb(51,	51,	51)	},
--	{ "Gray30",		grgb(77,	77,	77)	},
--	{ "Grey30",		grgb(77,	77,	77)	},
--	{ "Gray40",		grgb(102,	102,	102)	},
--	{ "Grey40",		grgb(102,	102,	102)	},
--	{ "Gray50",		grgb(127,	127,	127)	},
--	{ "Grey50",		grgb(127,	127,	127)	},
--	{ "Gray60",		grgb(153,	153,	153)	},
--	{ "Grey60",		grgb(153,	153,	153)	},
--	{ "Gray70",		grgb(179,	179,	179)	},
--	{ "Grey70",		grgb(179,	179,	179)	},
--	{ "Gray80",		grgb(204,	204,	204)	},
--	{ "Grey80",		grgb(204,	204,	204)	},
--	{ "Gray90",		grgb(229,	229,	229)	},
--	{ "Grey90",		grgb(229,	229,	229)	},
--
--	{ "Black",		grgb(0,		0,	0)	},
--	{ "White",		grgb(255,	255,	255)	},
--
--	{ "Orange",		grgb(255,	165,	0)	},
--	{ "Purple",		grgb(160,	32,	240)	},
--	{ "Violet",		grgb(238,	130,	238)	},
--	{NULL, 0}
--    };
--
--    if (name[0] == '#')
--    {
--	char	    *end;
--	int	    c;
--
--	c = strtol(name + 1, &end, 16);
--	return (guicolor_T) ((c >> 16) & 0xff) | (c & 0xff00) | ((c & 0xff) << 16);
--    }
--
--    for (i = 0; colours[i].name != NULL; i++)
--    {
--	if (STRICMP(name, colours[i].name) == 0)
--	    return colours[i].value;
--    }
--    if (strnicmp(name, "grey", 4) == 0 || strnicmp(name, "gray", 4) == 0)
--    {
--	int level = (255 * atoi(name + 4)) / 100;
--	return (guicolor_T) grgb(level, level, level);
--    }
--    return INVALCOLOR;
--}
--
--/*
-- * Set the current text colours.
-- * If we are using fonts then set the antialiasing colours too.
-- */
--    void
--gui_mch_set_colors(guicolor_T fg, guicolor_T bg)
--{
--    zap_redraw_colours[0] = bg << 8;	/* JK230798, register new background colour */
--    zap_redraw_colours[1] = fg << 8;	/* JK230798, register new foreground colour */
--    zap_redraw_update_colours = TRUE;	/* JK230798, need update of colour masks */
--
--    swi(ColourTrans_ReturnGCOL, fg << 8);
--    gui.fg_colour = r0;
--    swi(ColourTrans_ReturnGCOL, bg << 8);
--    gui.bg_colour = r0;
--
--    if (ro_current_font)
--	swi(ColourTrans_SetFontColours, 0, bg << 8, fg << 8, 14);
--}
--
--    void
--ro_draw_string(x, y, s, len, flags, clip)
--    int	    x;		/* Top-left coord to plot at (x incl, y excl) */
--    int	    y;		/* (screen coords) */
--    char_u  *s;		/* String to plot */
--    int	    len;	/* Length of string */
--    int	    flags;	/* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL */
--    int*    clip;	/* JK230798, added clip window */
--{
--    if (ro_current_font)
--    {
--	int	fx;
--	int	flen = len;	/* Preserve for underline */
--
--	/* Use the Font manager to paint the string.
--	 * Must do one char at a time to get monospacing.
--	 */
--
--	if (flags & DRAW_ITALIC && !gui.ital_font)
--	    flags |= DRAW_UNDERL;	/* No italic - underline instead */
--
--	if ((flags & DRAW_TRANSP) == 0)
--	{
--	    swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
--	    swi(OS_Plot, 4, x, y - gui.char_height);
--	    swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
--	}
--
--	fx = x + font_x_offset;
--	while (flen--)
--	{
--	    swi(Font_Paint, 0, s++, 0x90, fx, y + font_y_offset, 0, 0, 1);
--	    fx += gui.char_width;
--	}
--    }
--    else
--    {
--	if (zap_redraw)
--	{
--	    /* Using fast Zap redraw. */
--	    flags = ro_zap_redraw_draw_string(x, y, s, len, flags, clip);
--	}
--	else
--	{
--	    /* Using the system font */
--	    if (flags & DRAW_ITALIC)
--		flags |= DRAW_UNDERL;
--
--	    if ((flags & DRAW_TRANSP) == 0)
--	    {
--		swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
--		swi(OS_Plot, 4, x, y - gui.char_height);
--		swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
--	    }
--	    swi(OS_Plot, 4,			/* Move the drawing cursor */
--		    x,
--		    y - 1);
--	    swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
--	    swi(OS_WriteN, s, len);
--
--	    if (flags & DRAW_BOLD)
--	    {
--		swi(OS_Plot, 4, x + (1 << x_eigen_factor), y - 1);
--		swi(OS_WriteN, s, len);
--	    }
--	}
--    }
--
--    if (flags & DRAW_UNDERL)
--    {
--	if (ro_current_font || zap_redraw)
--	    swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
--	/* Underlined is the same with all plotting methods */
--	swi(OS_Plot, 4, x, y - gui.char_height);
--	swi(OS_Plot, 1, gui.char_width * len, 0);
--    }
--}
--
--    void
--gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
--{
--    int x, y;		/* Workarea x,y */
--    x = col * gui.char_width;
--    y = -row * gui.char_height;
--
--    if (redraw_block)
--    {
--	ro_draw_string(x + redraw_block[1], y + redraw_block[4],
--			s, len, flags, &redraw_block[7]);	/* JK230798, added clip window */
--    }
--    else
--    {
--	int block[44];
--	block[0] = gui.window_handle;
--	block[1] = x;
--	block[2] = y - gui.char_height;
--	block[3] = (col + len) * gui.char_width;
--	block[4] = y;
--	swi(Wimp_UpdateWindow, 0, block);
--	while (r0)
--	{
--	    ro_draw_string(x + block[1], y + block[4],
--			s, len, flags, &block[7]);	/* JK230798, added clip window */
--	    swi(Wimp_GetRectangle, 0, block);
--	}
--    }
--}
--
--/*
-- * Return OK if the key with the termcap name "name" is supported.
-- */
--    int
--gui_mch_haskey(char_u *name)
--{
--    return FAIL;
--}
--
--    void
--gui_mch_beep(void)
--{
--    swi(OS_WriteI + 7);
--}
--
--/*
-- * Visual bell.
-- */
--    void
--gui_mch_flash(int msec)
--{
--    /* TODO */
--}
--
--
--/*
-- * Plot a solid rectangle using the given plot action and colour.
-- * Coordinates are inclusive and window-relative.
-- */
--    void
--plot_rectangle(plot, colour, minx, miny, maxx, maxy)
--    int plot;		/* OS_Plot action */
--    int colour;
--    int minx;
--    int miny;
--    int maxx;
--    int maxy;
--{
--    if (redraw_block)
--    {
--	swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
--	swi(OS_Plot, 4, minx + redraw_block[1], miny + redraw_block[4]);
--	swi(OS_Plot, plot, maxx + redraw_block[1], maxy + redraw_block[4]);
--    }
--    else
--    {
--	int block[44];
--	block[0] = gui.window_handle;
--	block[1] = minx;
--	block[2] = miny;
--	block[3] = maxx + 1;
--	block[4] = maxy + 1;
--	swi(Wimp_UpdateWindow, 0, block);
--	while (r0)
--	{
--	    swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
--	    swi(OS_Plot, 4, minx + block[1], miny + block[4]);
--	    swi(OS_Plot, plot, maxx + block[1], maxy + block[4]);
--	    swi(Wimp_GetRectangle, 0, block);
--	}
--    }
--}
--
--/*
-- * Invert a rectangle from row r, column c, for nr rows and nc columns.
-- */
--    void
--gui_mch_invert_rectangle(int r, int c, int nr, int nc)
--{
--    plot_rectangle(96 + 6, 0, FILL_X(c), -FILL_Y(r + nr), FILL_X(c + nc), -FILL_Y(r));
--}
--
--/*
-- * Iconify the GUI window.
-- */
--    void
--gui_mch_iconify(void)
--{
--}
--
--#if defined(FEAT_EVAL) || defined(PROTO)
--/*
-- * Bring the Vim window to the foreground.
-- */
--    void
--gui_mch_set_foreground()
--{
--    /* TODO */
--}
--#endif
--
--/* Draw a hollow rectangle relative to the current
-- * graphics cursor position, with the given width
-- * and height. Start position is top-left.
-- */
--    void
--draw_hollow(w, h)
--    int	w;
--    int	h;
--{
--    swi(OS_Plot, 1, w - 1, 0);
--    swi(OS_Plot, 1, 0, 1 - h);
--    swi(OS_Plot, 1, 1 - w, 0);
--    swi(OS_Plot, 1, 0, h - 1);
--}
--
--/*
-- * Draw a cursor without focus.
-- */
--    void
--gui_mch_draw_hollow_cursor(guicolor_T colour)
--{
--    int x = FILL_X(gui.cursor_col);	/* Window relative, top-left */
--    int y = -FILL_Y(gui.cursor_row);
--    if (redraw_block == NULL)
--    {
--	int block[11];
--
--	block[0] = gui.window_handle;
--	block[1] = x;
--	block[2] = y - gui.char_height;
--	block[3] = x + gui.char_width;
--	block[4] = y;
--	swi(Wimp_UpdateWindow, 0, block);
--	while (r0)
--	{
--	    swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
--
--	    swi(OS_Plot, 4, x + block[1], y + block[4] - 1);
--	    draw_hollow(gui.char_width, gui.char_height);
--
--	    swi(Wimp_GetRectangle, 0, block);
--	}
--    }
--    else
--    {
--	swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
--
--	swi(OS_Plot, 4, x + redraw_block[1], y + redraw_block[4] - 1);
--	draw_hollow(gui.char_width, gui.char_height);
--    }
--}
--
--/*
-- * Draw part of a cursor, "w" pixels wide, and "h" pixels high, using
-- * color "color".
-- */
--    void
--gui_mch_draw_part_cursor(w, h, colour)
--    int w;
--    int h;
--    guicolor_T colour;
--{
--    int x = FILL_X(gui.cursor_col);
--    int y = -FILL_Y(gui.cursor_row);
--    swi(ColourTrans_ReturnGCOL, colour << 8);
--    plot_rectangle(96 + 5, r0, x, y - h, x + w - 1, y - 1);
--}
--
--/*
-- * Catch up with any queued events.  This may put keyboard input into the
-- * input buffer, call resize call-backs, trigger timers etc.
-- * If there is nothing in the event queue(& no timers pending), then we return
-- * immediately (well, after a Wimp_Poll).
-- */
--    void
--gui_mch_update(void)
--{
--    int block[64];
--    int reason;
--
--    swi(OS_ReadMonotonicTime);
--    if ((r0 - time_of_last_poll) < 50)
--	return;			    /* Don't return too often */
--
--    reason = wimp_poll(0, block);
--    if (reason)
--	process_event(reason, block);
--    ro_return_early = FALSE;		/* We're returning anyway. */
--}
--
--    void
--redraw_window(block)
--    int *block;
--{
--    int x, y;			/* Vim workarea coords */
--    int width, height;
--    int blank_col;
--
--    swi(ColourTrans_ReturnGCOL, UNUSED_COLOUR << 8, 0, 0, 1<<7, 0);
--    blank_col = r0;
--
--    swi(Wimp_RedrawWindow, 0, block);
--    redraw_block = block;
--    while (r0)
--    {
--	x = block[7] - block[1];
--	y = block[4] - block[10];
--	width  = block[9]  - block[7];
--	height = block[10] - block[8];
--
--	if (height + y > Rows * gui.char_height)
--	{
--	    /* Blank everything off the bottom. */
--	    plot_rectangle(96 + 5, blank_col,
--				0, block[8] - block[4],
--				block[9] - block[1], -FILL_Y(Rows) - 1);
--	    height = Rows * gui.char_height;
--	}
--	if (width + x> Columns * gui.char_width)
--	{
--	    /* Blank everything off to the right. */
--	    plot_rectangle(96 + 5, blank_col,
--				FILL_X(Columns), block[8] - block[4],
--				block[9] - block[1], 0);
--	    width = Columns * gui.char_width;
--	}
--	gui_redraw(x , y, width, height);
--	swi(Wimp_GetRectangle, 0, block);
--    }
--    redraw_block = NULL;
--}
--
--/* Check if we have modified data.
-- * If we do then ack the message to stop the shutdown.
-- * Otherwise, ignore the message.
-- */
--    void
--ro_prequit(block)
--    int	    *block;
--{
--    if (!ro_ok_to_quit())
--    {
--	/* Not OK to quit - stop shutdown */
--	block[3] = block[2];
--	swi(Wimp_SendMessage, 19, block, block[1]);
--    }
--    /* Do nothing. We may get a Message_Quit later. */
--}
--
--/* If there is unsaved data then ask the user if they mind losing it.
-- * Return TRUE if we can quit without saving, FALSE to halt the
-- * shutdown.
-- */
--    int
--ro_ok_to_quit()
--{
--    int	    old_confirm = cmdmod.confirm;
--
--    cmdmod.confirm = FALSE;	    /* Use our own, single tasking, box */
--
--    if (check_changed_any(FALSE))
--    {
--	swi(Wimp_ReportError,
--		"\0\0\0\0Vim contains unsaved data - quit anyway?",
--		0x17,
--		"Vim");
--	cmdmod.confirm = old_confirm;
--	if (r1 != 1)
--	    return FALSE;
--    }
--    cmdmod.confirm = old_confirm;
--    return TRUE;
--}
--
--/* Quit without checking for unsaved data. */
--    void
--ro_quit()
--{
--    exiting = TRUE;
--    getout(0);
--
--    exiting = FALSE;		    /* probably can't get here */
--    setcursor();		    /* position cursor */
--    out_flush();
--}
--
--/* Insent the given vim special code into the input buffer */
--    void
--ro_press(a, b, modifier)
--    char a;
--    char b;
--    int modifier;	/* %<Ctrl><Shift> 0000 0000 */
--{
--    char_u buf[6];
--    int	    vim_mod;
--    int	    key;
--
--
--    /* Convert RISC OS modifier to Vim modifier. */
--    vim_mod = ((modifier & 0x10) ? MOD_MASK_SHIFT : 0)
--	       | ((modifier & 0x20) ? MOD_MASK_CTRL : 0);
--    key = simplify_key(TERMCAP2KEY(a, b), &vim_mod);
--
--    buf[3] = CSI;
--    buf[4] = KEY2TERMCAP0(key);
--    buf[5] = KEY2TERMCAP1(key);
--    if (vim_mod)
--    {
--	buf[0] = CSI;
--	buf[1] = KS_MODIFIER;
--	buf[2] = vim_mod;
--	add_to_input_buf(buf, 6);
--    }
--    else
--	add_to_input_buf(buf + 3, 3);
--}
--
--/* Take a wimp key code and insert the vim equivalent
-- * into vim's input buffer.
-- * CTRL-C also sets got_int.
-- */
--    void
--ro_insert_key(code)
--    char_u *code;		/* Wimp_ProcessKey code (4 bytes) */
--{
--    char a = code[0];
--    char b = code[1];
--    int base, modifier;
--
--    if (a == 3 && ctrl_c_interrupts)
--	got_int = TRUE;
--
--    /* Is it a normal key? */
--    if (a > 31 && a < 127)
--    {
--	add_to_input_buf(code, 1);
--	return;
--    }
--
--    /* We should pass any unrecognised keys on, but
--     * for now just pass on F12 combinations.
--     */
--    switch (b)
--    {
--	case 0:
--	    /* Home and Delete are the only special cases */
--	    switch (a)
--	    {
--		case 0x1e:
--		    ro_press('k','h', 0);	/* Home */
--		    return;
--		case 0x7f:
--		    ro_press('k','D', 0);	/* Delete */
--		    return;
--		case CSI:
--		    {
--			/* Turn CSI into K_CSI.  Untested! */
--			char_u string[3] = {CSI, KS_EXTRA, KE_CSI};
--
--			add_to_input_buf(string, 3);
--			return;
--		    }
--		default:
--		    add_to_input_buf(code, 1);
--		    return;
--	    }
--	case 1:
--	    if ((a & 0xcf) == 0xcc)
--	    {
--		/* F12 pressed - pass it on (quick hack) */
--		swi(Wimp_ProcessKey, a | 0x100);
--		return;
--	    }
--	    base = a & 0xcf;
--	    modifier = a & 0x30;
--	    switch (base)
--	    {
--		case 0x8a:	/* Tab */
--		    add_to_input_buf("\011", 1);
--		    return;
--		case 0x8b:	/* Copy (End) */
--		    return ro_press('@', '7', modifier);
--		case 0x8c:	/* Left */
--		    return ro_press('k', 'l', modifier);
--		case 0x8d:	/* Right */
--		    return ro_press('k', 'r', modifier);
--		case 0x8e:	/* Down */
--		    if (modifier & 0x10)
--			return ro_press('k', 'N', modifier ^ 0x10);
--		    else
--			return ro_press('k', 'd', modifier);
--		case 0x8f:	/* Up */
--		    if (modifier & 0x10)
--			return ro_press('k', 'P', modifier ^ 0x10);
--		    else
--			return ro_press('k', 'u', modifier);
--		case 0xca:	/* F10 */
--		    return ro_press('k', ';', modifier);
--		case 0xcb:	/* F11 */
--		    return ro_press('F', '1', modifier);
--		case 0xcd:	/* Insert */
--		    return ro_press('k', 'I', modifier);
--		default:
--		    if (base > 0x80 && base < 0x18a)
--		    {
--			/* One of the other function keys */
--			return ro_press('k', '0' + (base & 15), modifier);
--		    }
--	    }
--    }
--}
--
--/* Process a mouse event. */
--    void
--ro_mouse(block)
--    int *block;
--{
--    int x, y, button, vim_button;
--    int modifiers = 0;
--    int min_x, min_y;		/* Visible area of editor window */
--    int max_x, max_y;
--
--    if (block[3] != gui.window_handle || ro_dragging)
--	return;			/* Not our window or ignoring clicks*/
--
--    x = block[0];		/* Click position - screen coords */
--    y = block[1];
--    button = block[2];
--
--    block[0] = gui.window_handle;
--    swi(Wimp_GetWindowState, 0, block);
--    min_x = block[1];
--    min_y = block[2];
--    max_x = block[3];
--    max_y = block[4];
--
--    if (block[3] - x < gui.scrollbar_width)
--    {
--	/* Click in that blank area under the scrollbars */
--
--	if (button & 0x444)
--	{
--	    int	    front_block[10];
--	    /* Dragging with Select - bring window to front first */
--	    front_block[0] = gui.window_handle;
--	    swi(Wimp_GetWindowState, 0, front_block);
--	    front_block[7] = -1;
--	    ro_open_main(front_block);
--	}
--
--	block[0] = gui.window_handle;
--	block[1] = 7;			/* Drag point */
--	block[2] = block[4] = 0;	/* Coords of point. */
--	block[3] = block[5] = 0;
--	drag_x_offset = max_x - x;
--	drag_y_offset = min_y - y;
--
--	/* Parent box. */
--	block[6] = min_x +
--			gui.scrollbar_width * 2 +
--			MIN_COLUMNS * gui.char_width;
--	block[7] = 0;
--	gui_mch_get_screen_dimensions(&block[8], &block[9]);
--	block[9] = max_y -
--			4 * gui.char_height -
--			gui.scrollbar_height;
--
--	swi(Wimp_DragBox, 0, block);
--	ro_dragging = DRAG_RESIZE_WINDOW;
--	drag_button = vim_button;
--	drag_modifiers = modifiers;
--	return;
--    }
--
--    if (button & 0x111)
--	vim_button = MOUSE_RIGHT;
--    else if (button & 0x222)
--	vim_button = MOUSE_MIDDLE;
--    else
--	vim_button = MOUSE_LEFT;
--
--    swi(OS_Byte, 121, 0x80);
--    if (r1 == 0xff)
--	modifiers |= MOUSE_SHIFT;
--    swi(OS_Byte, 121, 0x81);
--    if (r1 == 0xff)
--	modifiers |= MOUSE_CTRL;
--    swi(OS_Byte, 121, 0x82);
--    if (r1 == 0xff)
--	modifiers |= MOUSE_ALT;
--
--    if (button == 2)
--    {
--	/* Menu click:
--	 * If shift was pressed then do the paste action.
--	 * If not, then open the pop-up menu.
--	 */
--	modifiers ^= MOUSE_SHIFT;
--	if (modifiers && MOUSE_SHIFT)
--	{
--	    vimmenu_T	main;
--	    /* Shift was NOT pressed - show menu */
--	    main.dname = (char_u *) "Vim";
--	    main.children = root_menu;
--	    gui_mch_show_popupmenu(&main);
--	    return;
--	}
--    }
--
--    /* Gain the input focus */
--    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
--
--    if (button & 0xf0)
--    {
--	/* Drag operation:
--	 *
--	 * Tell the Wimp to start a drag.
--	 * Monitor null events.
--	 */
--	block[1] = 7;			/* Drag a point. */
--	block[2] = block[4] = x;	/* Coords of point. */
--	block[3] = block[5] = y;
--	block[6] = 0;			/* Coords of bounding box. */
--	block[7] = 0;
--	gui_mch_get_screen_dimensions(&block[8], &block[9]);
--
--	drag_x_offset = drag_y_offset = 0;
--
--	swi(Wimp_DragBox, 0, block);
--	ro_dragging = DRAG_SELECTION;
--	drag_button = vim_button;
--	drag_modifiers = modifiers;
--
--	vim_button |= MOUSE_DRAG;
--    }
--
--    gui_send_mouse_event(
--		vim_button,
--		x - min_x,
--		max_y - y,
--		button & 0xf ? TRUE : FALSE,	/* dclick */
--		modifiers);
--}
--
--    void
--ro_continue_drag(block)
--    int *block;			/* Just used as scrap. */
--{
--    int x, y;
--
--    /* Get screen coords of pointer. */
--    swi(Wimp_GetPointerInfo, 0, block);
--    x = block[0] + drag_x_offset;
--    y = block[1] + drag_y_offset;
--
--    block[0] = gui.window_handle;
--    swi(Wimp_GetWindowState, 0, block);
--
--    if (ro_dragging == DRAG_RESIZE_WINDOW)
--    {
--	/* Resizeing the main window. */
--	block[2] = y;
--	block[3] = x;
--	ro_open_main(block);
--    }
--    else
--    {
--	/* Selecting some text. */
--	gui_send_mouse_event(
--	    drag_button | MOUSE_DRAG,	/* Always report the same button */
--	    x - block[1],
--	    block[4] - y,
--	    FALSE,			/* Not a double click. */
--	    drag_modifiers);
--    }
--}
--
--/* User has released all mouse buttons, marking the end of a drag. */
--    void
--ro_drag_finished(block)
--    int *block;
--{
--    int x;
--    int y;
--    int width, height;
--
--    /* I don't trust the box returned by Wimp_Poll; look at the pointer
--     * ourselves.
--     */
--    swi(Wimp_GetPointerInfo, 0, block);
--    x = block[0] + drag_x_offset;
--    y = block[1] + drag_y_offset;
--
--    if (ro_dragging == DRAG_RESIZE_WINDOW)
--    {
--	block[0] = gui.window_handle;
--	swi(Wimp_GetWindowState, 0, block);
--	block[2] = y;
--	block[3] = x;
--	ro_open_main(block);
--
--	width = (block[3] - block[1]);
--	height = (block[4] - block[2]);
--
--	swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
--	gui_resize_shell(width, height);
--    }
--    else
--    {
--	block[0] = gui.window_handle;
--	swi(Wimp_GetWindowState, 0, block);
--	gui_send_mouse_event(
--		MOUSE_RELEASE,
--		x - block[1],
--		block[4] - y,
--		FALSE,			/* not a double click */
--		drag_modifiers);
--    }
--    ro_dragging = DRAG_FALSE;
--}
--
--/* Load the file/pathname given in block into a [new] buffer.
-- *
-- * Modifier	Action
-- *
-- * None		:confirm e <file>
-- * Ctrl		:sp <file>
-- * Shift	<file>
-- *
-- * Insert into typebuf, at the start.
-- * If loading from !Scrap then use saved leafname instead, and
-- * delete the scrap file. Also, ignore shift key.
-- *
-- * NB: Doesn't send DataLoadAck (other app might delete temp file?).
-- */
--    void
--ro_dataload(block)
--    int	    *block;
--{
--    char_u  new_path[MAXPATHL];
--    char_u  *path = ((char_u *) block) + 44;
--    int	    scrap = FALSE;
--
--    if (block[3] == leaf_ref && leaf_name)
--	scrap = TRUE;
--
--    switch (get_real_state() & 0xff)
--    {
--	case INSERT:
--	case CMDLINE:
--	case CMDLINE+LANGMAP:
--	    /* For insert mode we can only insert the pathname (currently)
--	     * Make sure Shift is pressed.
--	     */
--	    swi(OS_Byte, 121, 0x80);	    /* Is Shift pressed? */
--	    if (r1 == 0xff)
--	    {
--		ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
--		ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
--		ro_return_early = TRUE;		    /* Return even though nothing was typed. */
--	    }
--	    else
--		swi(Wimp_ReportError,
--			"\0\0\0\0Sorry, you can only load text in normal mode", 5, "Vim");
--	    break;
--
--	case NORMAL:
--	    ro_return_early = TRUE;	    /* Return even though nothing was typed. */
--
--	    if (scrap)			    /* Remove <Wimp$Scrap>. Later. */
--		ins_typebuf(":!~remove <Wimp$Scrap>\r", REMAP_NONE, 0, TRUE, FALSE);
--
--	    /* Insert {:sp ,:confirm e }[+f\ <leaf> ]<file><CR> */
--	    ins_typebuf("\r", REMAP_NONE, 0, TRUE, FALSE);
--	    ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
--	    ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
--
--	    if (scrap)
--	    {
--		/* Loading via !Scrap - change pathname to stored leafname */
--		ins_typebuf(leaf_name, REMAP_NONE, 0, TRUE, FALSE);
--		ins_typebuf(" +f\\ ", REMAP_NONE, 0, TRUE, FALSE);
--		leaf_ref = 0;
--		vim_free(leaf_name);
--		leaf_name = NULL;
--	    }
--
--	    swi(OS_Byte, 121, 0x81);	    /* Is Ctrl pressed? */
--	    if (r1 == 0xff)
--		/* Yes, split window */
--		ins_typebuf(":sp", REMAP_NONE, 0, TRUE, FALSE);
--	    else
--		ins_typebuf(":confirm e", REMAP_NONE, 0, TRUE, FALSE);
--	    break;
--
--	default:
--	    swi(Wimp_ReportError, "\0\0\0\0You can only load text in normal mode.", 5, "Vim");
--    }
--    /* Send DataSaveAck so other program doesn't think we died
--     * and delete <Wimp$Scrap>.
--     */
--    block[3] = block[2];
--    block[4] = 4;
--    swi(Wimp_SendMessage, 17, block, block[1]);
--}
--
--    void
--ro_datasave(block)
--    int	    *block;
--{
--    char_u *path = ((char_u *) block) + 44;
--
--    /* Preserve the name given so we can use it, not <Wimp$Scrap> */
--    if (leaf_name)
--	vim_free(leaf_name);
--    leaf_name = vim_strsave(path);
--
--    block[9] = -1;	    /* File is unsafe. */
--    strcpy(path, "<Wimp$Scrap>");
--    block[0] = 60;
--    block[3] = block[2];
--    block[4] = 2;
--    swi(Wimp_SendMessage, 17, block, block[1]);
--
--    leaf_ref = block[2];
--}
--
--    void
--ro_message(block)
--    int *block;
--{
--    char_u	*buffer;
--    long_u	len;
--
--    if (block[1] == task_handle)
--	return;			    /* Don't talk to ourself! */
--    switch (block[4])
--    {
--	case 0:		/* Quit. */
--	    if (block[4] == 0)
--		ro_quit();
--	    break;
--	case 1:	/* DataSave */
--	    ro_datasave(block);
--	    break;
--	case 2:		/* DataSaveAck. */
--	    if (clip_convert_selection(&buffer, &len, &clip_star) == -1)
--		return;
--
--	    /* Save the clipboard contents to a file. */
--	    swi(OS_File, 10, ((char_u *) block) + 44, 0xfff, 0, buffer, buffer + len);
--
--	    /* Ack with DataLoad message. */
--	    block[3] = block[2];
--	    block[4] = 3;
--	    block[9] = len;
--	    swi(Wimp_SendMessage, 17, block, block[1]);
--
--	    vim_free(buffer);
--	    break;
--	case 3:		/* DataLoad */
--	    ro_dataload(block);
--	    break;
--	case 8:		/* PreQuit */
--	    ro_prequit(block);
--	    break;
--	case 0xf:	/* Lose clipboard. */
--	    if (block[5] & 4)
--	    {
--		clip_free_selection(&clip_star);
--		clip_star.owned = FALSE;
--	    }
--	    break;
--	case 0x10:	/* DataRequest (clip_star) */
--	    if (clip_star.owned)
--	    {
--		int rows;
--
--		/* Tell other program that we have the clipboard. */
--		block[0] = 52;
--		block[3] = block[2];	    /* Copy myref to yourref. */
--		block[4] = 1;		    /* DataSave message. */
--		/* Create an estimate for the size (larger or same as true
--		 * value) */
--		rows = clip_star.end.lnum - clip_star.start.lnum;
--		if (rows < 0)
--		    rows = -rows;
--		block[9] = (rows + 1) * Columns + 1; /* Add one for possible
--							final newline. */
--		block[10] = 0xfff;	    /* Clipboard is text. */
--		strcpy( ((char_u *) block) + 44, "VimClip");
--		swi(Wimp_SendMessage, 17, block, block[1]);
--	    }
--	    break;
--	case 0x400c1:	/* Mode change */
--	    changed_mode = TRUE;		/* Flag - update on next OpenWindow */
--	    if (zap_redraw)
--	    {
--		/* JK230798, re-initialise ZapRedraw stuff */
--		if (ro_zap_redraw_initialise() == FAIL)
--		    zap_redraw = FALSE;
--	    }
--	    break;
--	case 0x400c3:	/* TaskCloseDown */
--	    if (block[1] == child_handle)
--		child_handle = 0;
--	    break;
--    }
--}
--
--/*
-- * Converts a scrollbar's window handle into a scrollbar pointer.
-- * NULL on failure.
-- */
--    scrollbar_T *
--ro_find_sbar(id)
--    int		id;
--{
--    win_T	*wp;
--
--    if (gui.bottom_sbar.id == id)
--	return &gui.bottom_sbar;
--    FOR_ALL_WINDOWS(wp)
--    {
--	if (wp->w_scrollbars[SBAR_LEFT].id == id)
--	    return &wp->w_scrollbars[SBAR_LEFT];
--	if (wp->w_scrollbars[SBAR_RIGHT].id == id)
--	    return &wp->w_scrollbars[SBAR_RIGHT];
--    }
--    return NULL;
--}
--
--    void
--scroll_to(line, sb)
--    int sb;	/* Scrollbar number */
--    int line;
--{
--    char_u code[8];
--
--    /* Don't put events in the input queue now. */
--    if (hold_gui_events)
--	return;
--
--    /* Send a scroll event:
--     *
--     * A scrollbar event is CSI (NOT K_SPECIAL), KS_VER_SCROLLBAR,
--     * KE_FILLER followed by:
--     * one byte representing the scrollbar number, and then four bytes
--     * representing a long_u which is the new value of the scrollbar.
--     */
--    code[0] = CSI;
--    code[1] = KS_VER_SCROLLBAR;
--    code[2] = KE_FILLER;
--    code[3] = sb;
--    code[4] = line >> 24;
--    code[5] = line >> 16;
--    code[6] = line >> 8;
--    code[7] = line;
--    add_to_input_buf(code, 8);
--}
--
--    void
--h_scroll_to(col)
--    int col;
--{
--    char_u code[8];
--
--    /* Don't put events in the input queue now. */
--    if (hold_gui_events)
--	return;
--
--    /* Send a scroll event:
--     *
--     * A scrollbar event is CSI (NOT K_SPECIAL)
--     *
--     * A horizontal scrollbar event is K_SPECIAL, KS_HOR_SCROLLBAR,
--     * KE_FILLER followed by four bytes representing a long_u which is the
--     * new value of the scrollbar.
--     */
--    code[0] = CSI;
--    code[1] = KS_HOR_SCROLLBAR;
--    code[2] = KE_FILLER;
--    code[4] = col >> 24;
--    code[5] = col >> 16;
--    code[6] = col >> 8;
--    code[7] = col;
--    add_to_input_buf(code, 8);
--}
--
--    void
--ro_scroll(block)
--    int		*block;
--{
--    scrollbar_T	*sb;
--    int		offset;
--    win_T	*wp;
--
--    /* Block is ready for Wimp_OpenWindow, and also contains:
--     *
--     * +32 = scroll X direction (-2 .. +2)
--     * +36 = scroll Y direction (-2 .. +2)
--     */
--
--    sb = ro_find_sbar(block[0]);
--    if (!sb)
--	return;		/* Window not found (error). */
--
--    wp = sb-> wp;
--
--    if (wp == NULL)
--    {
--	/* Horizontal bar. */
--	offset = block[8];
--	if (offset == -2)
--	    offset = (block[1] - block[3]) / gui.char_width;
--	else if (offset == 2)
--	    offset = (block[3] - block[1]) / gui.char_width;
--
--	block[5] += offset * gui.char_width;
--
--	gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
--
--	swi(Wimp_OpenWindow, 0, block);
--    }
--    else
--    {
--	offset = -block[9];
--	if (offset == -2)
--	    offset = -(wp -> w_height - 1);
--	else if (offset == 2)
--	    offset = wp -> w_height - 1;
--
--	/* Possibly we should reposition the scrollbar?
--	 * Vim seems to update the bar anyway...
--	 */
--	gui_drag_scrollbar(sb, offset - (block[6] / gui.char_height), FALSE);
--    }
--}
--
--/* Move a window by a given offset. Used to simulate the function of the
-- * nested wimp.
-- */
--    void
--ro_move_child(window, x, y, pos_wanted, pos_got)
--    int	window;
--    int x,y;		/* offset to move by */
--    int	pos_wanted, pos_got;
--{
--    int	block[10];
--
--    block[0] = window;
--    swi(Wimp_GetWindowState, 0, block);
--    block[1] += x;
--    block[2] += y;
--    block[3] += x;
--    block[4] += y;
--    if (pos_wanted == -1)
--	block[7] = -1;
--    else if (pos_wanted == -2)
--	block[7] = pos_got;
--    swi(Wimp_OpenWindow, 0, block);
--}
--
--/* Open the main window. Also updates scrollbars if we are not
-- * using the nested Wimp.
-- * If we have just changed mode then re-read all values.
-- */
--    void
--ro_open_main(block)
--    int	    *block;
--{
--    int	    toggle_size;
--
--    /* Find out if the user clicked on the toggle size icon. */
--    block[20] = block[0];
--    swi(Wimp_GetWindowState, 0, block + 20);
--    toggle_size = block[28] & (1 << 19);
--
--    if (nested_wimp)
--    {
--	swi(Wimp_OpenWindow, 0, block);
--    }
--    else
--    {
--	int	old[10];
--	int	x_offset, y_offset;	    /* Move children same as parent. */
--	int	pos_wanted, pos_got;
--	int	left_bar  = gui.which_scrollbars[SBAR_LEFT];
--	int	right_bar = gui.which_scrollbars[SBAR_RIGHT];
--	win_T	*wp;
--
--	/* Three cases to think about:
--	 * 1) Move to top. Open each window at the top.
--	 * 2) Same stack position. Open each with same position.
--	 * 3) Open at bottom. Open children with parent's new position.
--	 */
--
--	old[0] = block[0];
--	swi(Wimp_GetWindowState, 0, old);
--	pos_wanted = block[7];
--	swi(Wimp_OpenWindow, 0, block);
--	/* Block updated by OpenWindow? I don't think so! */
--	swi(Wimp_GetWindowState, 0, block);
--	pos_got = block[7];
--
--	x_offset = block[1] - old[1];
--	y_offset = block[4] - old[4];
--	if (x_offset || y_offset || pos_wanted == -1 || pos_wanted == -2)
--	{
--	    /* If parent has moved, re-open all the child windows. */
--	    FOR_ALL_WINDOWS(wp)
--	    {
--		/* Reopen scrollbars for this window. */
--		if (left_bar)
--		    ro_move_child(wp -> w_scrollbars[SBAR_LEFT].id,
--				x_offset, y_offset,
--				pos_wanted, pos_got);
--		if (right_bar)
--		    ro_move_child(wp -> w_scrollbars[SBAR_RIGHT].id,
--				x_offset, y_offset,
--				pos_wanted, pos_got);
--	    }
--	}
--    }
--    if (changed_mode || toggle_size)
--    {
--	int	width, height;
--
--	if (changed_mode)
--	    ro_measure_tools();
--	block[0] = gui.window_handle;
--	swi(Wimp_GetWindowState, 0, block);
--
--	width = block[3] - block[1];
--	height = block[4] - block[2];
--	swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
--	gui_resize_shell(width, height);
--	changed_mode = FALSE;
--    }
--}
--
--    void
--ro_open_window(block)
--    int		*block;
--{
--    int		pos;
--    scrollbar_T *sb;
--
--    if (block[0] == gui.window_handle)
--	ro_open_main(block);
--    else
--    {
--	swi(Wimp_OpenWindow, 0, block);
--	if (block[0] != gui.window_handle)
--	{
--	    sb = ro_find_sbar(block[0]);
--	    if (sb)
--	    {
--		if (sb-> wp != NULL)
--		    gui_drag_scrollbar(sb, -block[6] / gui.char_height, FALSE);
--		else
--		    gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
--	    }
--	}
--    }
--}
--
--    void
--ro_menu_selection(block)
--    int		*block;
--{
--    int		*item = wimp_menu + 7;
--    vimmenu_T	*menu;
--    /* wimp_menu points to a wimp menu structure */
--
--    for (;;)
--    {
--	while (block[0]--)
--	    item += 6;
--	if (block[1] == -1)
--	    break;
--	item = ((int *) item[1]) + 7;
--	block++;
--    }
--    /* item points to the wimp menu item structure chosen */
--    menu = (vimmenu_T *) item[5];
--
--    swi(Wimp_GetPointerInfo, 0, block);
--    if (block[2] == 1)
--	/* Adjust used - keep menu open */
--	swi(Wimp_CreateMenu, 0, wimp_menu);
--
--    if (menu-> cb)
--	menu-> cb(menu);
--}
--
--    void
--ro_open_parent()
--{
--    int head;
--    char_u *i = curbuf-> b_ffname;
--    char_u  buffer[256];
--
--    head = 0;
--    for (; *i; i++)
--    {
--	if (*i == '.')
--	    head = i - curbuf-> b_ffname;
--    }
--
--    /* Append head chars to buffer */
--    if (head < 240 && curbuf-> b_ffname && head)
--    {
--	strcpy(buffer, "%filer_opendir ");
--	strncpy(buffer + 15, curbuf-> b_ffname, head);
--	buffer[15 + head] = '\0';
--	swi(OS_CLI, buffer);
--    }
--}
--
--    void
--process_event(event, block)
--    int event;
--    int *block;
--{
--    switch (event)
--    {
--	case 0:		/* Nothing - update drag state. */
--	    if (ro_dragging)
--		ro_continue_drag(block);
--	    break;
--	case 1:		/* Redraw window. */
--	    redraw_window(block);
--	    break;
--	case 2:		/* Open window. */
--	    ro_open_window(block);
--	    break;
--	case 3:		/* Close window. */
--	    swi(Wimp_GetPointerInfo, 0, block + 1);
--	    if (block[3] == 1)
--		ro_open_parent();
--	    else
--		if (ro_ok_to_quit())
--		    ro_quit();
--	    break;
--	case 6:		/* Mouse click. */
--	    ro_mouse(block);
--	    break;
--	case 7:		/* Finished drag. */
--	    ro_drag_finished(block);
--	    break;
--	case 8:		/* Key pressed. */
--	    ro_insert_key((char_u *) &block[6]);
--	    break;
--	case 9:
--	    ro_menu_selection(block);
--	    break;
--	case 10:	/* Scroll request. */
--	    ro_scroll(block);
--	    break;
--	case 11:	/* Lose caret. */
--	    if (block[0] == gui.window_handle)
--		gui_focus_change(FALSE);
--	    break;
--	case 12:	/* Gain caret. */
--	    if (block[0] == gui.window_handle)
--		gui_focus_change(TRUE);
--	    break;
--	case 17:	/* User message. */
--	case 18:	/* User message recorded. */
--	    ro_message(block);
--	    break;
--    }
--}
--
--/*
-- * GUI input routine called by gui_wait_for_chars().  Waits for a character
-- * from the keyboard.
-- *  wtime == -1	    Wait forever.
-- *  wtime == 0	    This should never happen.
-- *  wtime > 0	    Wait wtime milliseconds for a character.
-- * Returns OK if a character was found to be available within the given time,
-- * or FAIL otherwise.
-- */
--    int
--gui_mch_wait_for_chars(long wtime)
--{
--    int block[64];
--    int	reason;
--    int start_time = -1;
--    int ctime = wtime / 10;	/* delay in cs */
--
--    if (wtime != -1)
--    {
--	swi(OS_ReadMonotonicTime);
--	start_time = r0;
--    }
--
--    for (;;)
--    {
--	if (ro_dragging)
--	    reason = wimp_poll(0, block);	/* Always return immediately */
--	else if (wtime == -1)
--	    reason = wimp_poll(1, block);
--	else
--	    reason = wimp_pollidle(0, block, start_time + ctime);
--
--	process_event(reason, block);
--
--	if (input_available() || ro_return_early)
--	{
--	    ro_return_early = FALSE;
--	    return OK;	    /* There is something to process (key / menu event) */
--	}
--
--	if (wtime != -1)
--	{
--	    swi(OS_ReadMonotonicTime);
--	    if (r0 - start_time > ctime)
--		return FAIL;	/* We've been waiting too long - return failure */
--	}
--    }
--}
--
--/* Flush any output to the screen */
--    void
--gui_mch_flush(void)
--{
--}
--
--/*
-- * Clear a rectangular region of the screen from text pos(row1, col1) to
-- * (row2, col2) inclusive.
-- */
--    void
--gui_mch_clear_block(int row1, int col1, int row2, int col2)
--{
--    swi(ColourTrans_ReturnGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
--    plot_rectangle(96 + 5, r0,
--			FILL_X(col1), -FILL_Y(row2 + 1),
--			FILL_X(col2 + 1), -FILL_Y(row1));
--}
--
--    void
--gui_mch_clear_all(void)
--{
--    if (redraw_block)
--    {
--	swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
--	swi(OS_WriteI + 16);
--    }
--    else
--    {
--	int block[44];
--	block[0] = gui.window_handle;
--	block[1] = 0;
--	block[2] = -gui.num_rows * gui.char_height;
--	block[3] = gui.num_cols * gui.char_width;
--	block[4] = 0;
--	swi(Wimp_UpdateWindow, 0, block);
--	while (r0)
--	{
--	    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
--	    swi(OS_WriteI + 16);
--	    swi(Wimp_GetRectangle, 0, block);
--	}
--    }
--}
--
--/*
-- * Delete the given number of lines from the given row, scrolling up any
-- * text further down within the scroll region.
-- */
--    void
--gui_mch_delete_lines(int row, int num_lines)
--{
--    int top_from = -row - num_lines;
--    int bot_from = -gui.scroll_region_bot - 1;
--    int bot_to   = bot_from + num_lines;
--
--    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
--
--    /* Changed without checking! */
--    swi(Wimp_BlockCopy, gui.window_handle,
--			    gui.scroll_region_left * gui.char_width,
--			    bot_from * gui.char_height,
--			    (gui.scroll_region_right - gui.scroll_region_left
--							+ 1) * gui.char_width,
--			    top_from * gui.char_height,
--
--			    gui.scroll_region_left * gui.char_width,
--			    bot_to * gui.char_height);
--
--    gui_clear_block(gui.scroll_region_bot - num_lines + 1,
--						       gui.scroll_region_left,
--	gui.scroll_region_bot, gui.scroll_region_right);
--}
--
--/*
-- * Insert the given number of lines before the given row, scrolling down any
-- * following text within the scroll region.
-- */
--    void
--gui_mch_insert_lines(int row, int num_lines)
--{
--    int top_from = -row;
--    int bot_to   = -gui.scroll_region_bot - 1;
--    int bot_from = bot_to + num_lines;
--
--    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
--
--    swi(Wimp_BlockCopy, gui.window_handle,
--			    gui.scroll_region_left * gui.char_width,
--			    bot_from * gui.char_height,
--			    (gui.scroll_region_right - gui.scroll_region_left
--							+ 1) * gui.char_width,
--			    top_from * gui.char_height,
--
--			    gui.scroll_region_left * gui.char_width,
--			    bot_to * gui.char_height);
--
--    gui_clear_block(row, gui.scroll_region_left,
--				row + num_lines - 1, gui.scroll_region_right);
--}
--
--/* Put selection in clipboard buffer.
-- * Should we become the new owner?
-- */
--    void
--clip_mch_request_selection(VimClipboard *cbd)
--{
--    int		block[64];	/* Will be used in Wimp_Poll. */
--    int		reason;
--    char_u	*buffer;
--    long_u	length;
--
--    block[0] = 48;			/* Size of block. */
--    block[3] = 0;			/* Orinial message. */
--    block[4] = 0x10;			/* Data request. */
--    block[5] = gui.window_handle;
--    block[6] = RO_LOAD_CLIPBOARD;	/* Internal handle. */
--    block[7] = block[8] = 0;		/* (x,y) not used. */
--    block[9] = 4;
--    block[10] = 0xfff;	    /* We want text files if possible, I think. */
--    block[11] = -1;	    /* End of list. */
--    swi(Wimp_SendMessage, 17, block, 0);    /* Broadcast request. */
--
--    /* OK, we've sent the request. Poll until we get a null poll (failure) or
--     * we load the clipboard.
--     * If we receive a DataSave event with icon handle = -2 then put it on the
--     * clipboard. RISC OS should ensure that key events will not be delivered
--     * until the clipboard operation completes (unless the owner starts idling
--     * - we can't wait forever!).
--     */
--    for (;;)
--    {
--	reason = wimp_poll(0, block);
--	if (reason == 0)
--	    return;	    /* Failed to get clipboard. */
--	if ((reason == 17 || reason == 18) &&
--		block[4] == 1 && block[6] == RO_LOAD_CLIPBOARD)
--	    break;	    /* Got it - stop waiting. */
--	process_event(reason, block);
--	if (ro_return_early)
--	    return;
--    }
--    /* Tell owner to save data in <Wimp$Scrap>. */
--    block[0] = 60;
--    block[3] = block[2];   /* Copy myref -> yourref */
--    block[4] = 2;	    /* DataSaveAck. */
--    block[9] = -1;	    /* Data is unsafe. */
--    strcpy( ((char_u *) block) + 44, "<Wimp$Scrap>");
--    swi(Wimp_SendMessage, 17, block, block[1]);
--
--    /* Wait again for reply. */
--    for (;;)
--    {
--	reason = wimp_poll(0, block);
--	if (reason == 0)
--	    return;	/* Other program has given up! */
--	if ((reason == 17 || reason == 18) && block[4] == 3 && block[6] == RO_LOAD_CLIPBOARD)
--	    break;	/* Clipboard data saved to <Wimp$Scrap> */
--	process_event(reason, block);
--	if (ro_return_early)
--	    return;
--    }
--
--    /* <Wimp$Scrap> contains clipboard - load it. */
--    if (xswi(OS_File, 17, "<Wimp$Scrap>") & v_flag)
--	return;		/* Error! */
--    if (r0 != 1 && r0 != 3)
--	return;
--    length = r4;
--
--    buffer = lalloc(length, TRUE);  /* Claim memory (and report errors). */
--    if (buffer == NULL)
--	return;
--
--    if (xswi(OS_File, 16, "<Wimp$Scrap>", buffer, 0) & v_flag)
--	return;
--
--    clip_yank_selection(MCHAR, buffer, length, cbd);
--
--    vim_free(buffer);
--
--    swi(OS_FSControl, 27, "<Wimp$Scrap>", 0, 0);    /* Delete temp file. */
--
--    block[4] = 4;		    /* Send DataLoadAck. */
--    block[3] = block[2];	    /* Copy myref -> yourref. */
--    swi(Wimp_SendMessage, 17, block, block[1]);
--}
--
--/* Not sure what this means under RISC OS. */
--    void
--clip_mch_lose_selection(VimClipboard *cbd)
--{
--}
--
--/* Tell everyone that we now own the clipboard.
-- * Return OK if our claim is accepted (always, under RISC OS)
-- */
--    int
--clip_mch_own_selection(VimClipboard *cbd)
--{
--    int block[6];
--    block[0] = 24;	/* Length of block.  */
--    block[3] = 0;	/* Original message. */
--    block[4] = 0xf;	/* ClaimEntity. */
--    block[5] = 0x4;	/* Claim clipboard only. */
--    swi(Wimp_SendMessage, 17, block, 0);
--    return OK;
--}
--
--/*
-- * Send the current selection to the clipboard.  Do nothing for X because we
-- * will fill in the selection only when requested by another app. Sounds good
-- * for RISC OS too.
-- */
--    void
--clip_mch_set_selection(VimClipboard *cbd)
--{
--    clip_get_selection(cbd);
--}
--
--/*
-- * Make a menu either grey or not grey.
-- */
--    void
--gui_mch_menu_grey(vimmenu_T *menu, int grey)
--{
--    menu-> greyed_out = grey;
--}
--
--/*
-- * Make menu item hidden or not hidden
-- */
--    void
--gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
--{
--    menu-> hidden = hidden;
--}
--
--/*
-- * This is called after setting all the menus to grey/hidden or not.
-- */
--    void
--gui_mch_draw_menubar(void)
--{
--    swi(Wimp_CreateMenu, 0, -1);
--    if (wimp_menu != (int *) -1)
--    {
--	ro_remove_menu(wimp_menu);
--	wimp_menu = (int *) -1;
--    }
--}
--
--/* Add or remove a scrollbar. Note that this is only called when
-- * the scrollbar state is changing.
-- * The scroll bar window has already been created.
-- * We can't do anything except remove the scroll bar
-- * until we know what size to use.
-- */
--    void
--gui_mch_enable_scrollbar(sb, flag)
--    scrollbar_T	*sb;
--    int		flag;
--{
--    if (!flag)
--	swi(Wimp_CloseWindow, 0, & (sb->id) );
--    return;
--}
--
--    void
--gui_mch_set_blinking(long waittime, long on, long off)
--{
--}
--
--/*
-- * Stop the cursor blinking.  Show the cursor if it wasn't shown.
-- */
--    void
--gui_mch_stop_blink(void)
--{
--}
--
--/*
-- * Start the cursor blinking.  If it was already blinking, this restarts the
-- * waiting time and shows the cursor.
-- */
--    void
--gui_mch_start_blink(void)
--{
--}
--
--/*
-- * Return the RGB value of a pixel as a long.
-- */
--    long_u
--gui_mch_get_rgb(guicolor_T pixel)
--{
--    return (long_u)pixel;
--}
--
--    void
--gui_mch_set_text_area_pos(int x, int y, int w, int h)
--{
--}
--
--    void
--gui_mch_enable_menu(int flag)
--{
--}
--
--    void
--gui_mch_set_menu_pos(int x, int y, int w, int h)
--{
--}
--
--    void
--gui_mch_add_menu(vimmenu_T *menu, int idx)
--{
--}
--
--    void
--gui_mch_add_menu_item(vimmenu_T *menu, int idx)
--{
--}
--
--    void
--gui_mch_new_menu_colors(void)
--{
--}
--
--    void
--gui_mch_destroy_menu(vimmenu_T *menu)
--{
--}
--
--/* Size of buffer has changed.
-- * Add one to max since gui.c subtracts one more than it should!
-- */
--    void
--gui_mch_set_scrollbar_thumb(sb, val, size, max)
--    scrollbar_T	*sb;
--    long	val;
--    long	size;
--    long	max;
--{
--    int		block[10], width, height;
--
--    width = (max + 1) * gui.char_width;
--    height = (max + 1 + W_STATUS_HEIGHT(sb->wp)) * gui.char_height;
--
--    block[0] = block[3] = 0;
--    block[1] = -height + (1 << y_eigen_factor);
--    block[2] = width;
--
--    swi(Wimp_SetExtent, sb -> id, block);
--
--    block[0] = sb -> id;
--    swi(Wimp_GetWindowState, 0, block);
--    block[5] = val * gui.char_width;
--    block[6] = -val * gui.char_height;
--    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
--			gui.window_handle,	/* Parent window handle. */
--			(CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
--			(CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
--			(CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
--			(CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
--			(CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
--			(CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
--			);
--}
--
--/* Set the position of the scrollbar within the editor
-- * window. Note that, for vertical scrollbars, x and w
-- * are ignored. For horizontal bars y and h are ignored.
-- */
--    void
--gui_mch_set_scrollbar_pos(sb, x, y, w, h)
--    scrollbar_T *sb;
--    int		x;		/* Horizontal sb position */
--    int		y;		/* Top of scroll bar */
--    int		w;		/* Width */
--    int		h;		/* Height */
--{
--    int		block[24];
--    int		px1, py1;	/* Parent window min coords */
--    int		px2, py2;	/* Parent window max coords */
--
--    /* Find where the parent window is. */
--    block[0] = gui.window_handle;
--    swi(Wimp_GetWindowState, 0, block);
--    px1 = block[1];
--    py1 = block[2];
--    px2 = block[3];
--    py2 = block[4];
--
--    block[0] = sb -> id;
--
--    /* Find out how big the scroll window is at the moment. */
--    swi(Wimp_GetWindowInfo, 0, ((char_u *)block) + 1);
--
--    if (block[13] < w || block[12] > -h)
--    {
--	/* Current window is too small! */
--	if (block[12] > -h)
--	    block[12] = -h;
--	if (block[13] < w)
--	    block[13] = w;
--	swi(Wimp_SetExtent, block[0], block + 11);
--    }
--
--    /* This works better on the nested_wimp. */
--    if (sb-> wp)
--    {
--	/* This is a vertical scrollbar. */
--	block[1] = block[3] = px2 - gui.scrollbar_width + (1 << x_eigen_factor);
--	block[2] = 1 + py2 - (y + h) + (1 << y_eigen_factor);
--	block[4] = 1 + py2 - y;
--    }
--    else
--    {
--	/* This is a horizontal scrollbar. */
--	block[2] = block[4] = py1 + gui.scrollbar_height;
--	block[1] = px1;
--	block[3] = px2 - gui.scrollbar_width;
--    }
--
--    block[5] = 0;
--    block[6] = 0;
--    block[7] = -1;
--
--    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
--	    gui.window_handle,	/* Parent window handle. */
--	    (CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
--	    (CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
--	    (CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
--	    (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
--	    (CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
--	    (CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
--       );
--}
--
--/* Create a window with no workarea to place inside editor window.
-- * (what happens without the nested wimp?)
-- * Data for scrollbar is invalid.
-- */
--    void
--gui_mch_create_scrollbar(sb, orient)
--    scrollbar_T *sb;
--    int		orient;	/* orient is SBAR_HORIZ or SBAR_VERT */
--{
--    int bar[] =
--	{
--	    0,   0,		/* Visible area : min X,Y */
--	    100, 100,		/*		  max X,Y */
--	    0,   0,		/* Scroll offsets */
--	    -1,			/* Window in front */
--	    0x80800150 | (orient == SBAR_HORIZ ? (1 << 30) : (1 << 28)),
--	    0xff070207,		/* Colours */
--	    0x000c0103,		/* More colours */
--	    0, -0x4000,		/* Workarea extent */
--	    0x4000, 0,		/* max X,Y */
--	    0x00000000,		/* No title */
--	    0 << 12,		/* No workarea button type */
--	    1,			/* Wimp sprite area */
--	    0x00010001,		/* Minimum width, height */
--	    0, 0, 0,		/* Title data (none) */
--	    0			/* No icons */
--	};
--    swi(Wimp_CreateWindow, 0, bar);
--    sb -> id = r0;
--}
--
--#if defined(FEAT_WINDOWS) || defined(PROTO)
--    void
--gui_mch_destroy_scrollbar(scrollbar_T *sb)
--{
--    swi(Wimp_DeleteWindow, 0, & (sb->id));
--    sb -> id = -1;
--}
--#endif
--
--    void
--gui_mch_set_scrollbar_colors(scrollbar_T *sb)
--{
--    /* Always use default RO colour scheme. */
--}
--
--/*
-- * Get current mouse coordinates in text window.
-- * Note: (0,0) is the bottom left corner, positive y is UP.
-- */
--    void
--gui_mch_getmouse(x, y)
--    int *x;
--    int *y;
--{
--    int left;
--    int top;
--    int block[10];
--
--    block[0] = gui.window_handle;
--    swi(Wimp_GetWindowState, 0, block);
--    left = block[1];
--    top = block[4];
--
--    swi(Wimp_GetPointerInfo, 0, block);
--    *x = block[0] - left;
--    *y = top - block[1];
--}
--
--/* MouseTo(x, y) */
--    void
--gui_mch_setmouse(x, y)
--    int		x;
--    int		y;
--{
--}
--
--    void
--gui_mch_toggle_tearoffs(enable)
--    int		enable;
--{
--    /* no tearoff menus */
--}
--
--/* Redraw a window's title.
-- * For the nested wimp we use the new 'redraw-title-bar' reason code.
-- * For older wimps we mark the area of the screen where the title bar
-- * is as invalid.
-- */
--    void
--ro_redraw_title(window)
--    int window;
--{
--    if (nested_wimp)
--    {
--	swi(Wimp_ForceRedraw, window, 0x4b534154, 3);
--    }
--    else
--    {
--	int block[10];
--	int miny;
--
--	block[0] = window;
--	swi(Wimp_GetWindowState, 0, block);
--	miny = block[4];
--	swi(Wimp_GetWindowOutline, 0, block);
--	swi(Wimp_ForceRedraw, -1,
--			block[1], miny,
--			block[3], block[4]);
--    }
--}
--
--/* Turn a vimmenu_T structure into a wimp menu structure.
-- * -1 if resulting menu is empty.
-- * Only the children and dname items in the root menu are used.
-- */
--    int *
--ro_build_menu(menu)
--    vimmenu_T	*menu;
--{
--    int		*wimp_menu;
--    int		width = 4;
--    int		w;
--    int		size = 28;
--    vimmenu_T	*item;
--    int		*wimp_item;
--
--    /* Find out how big the menu is so we can allocate memory for it */
--    for (item = menu-> children; item; item = item-> next)
--    {
--	if (item-> hidden == FALSE && !menu_is_separator(item->name))
--	    size += 24;
--    }
--
--    if (size <= 28)
--	return (int *) -1;		/* No children - shouldn't happen */
--
--    wimp_menu = (int *) alloc(size);
--
--    wimp_menu[0] = (int) menu-> dname;
--    wimp_menu[1] = -1;
--    wimp_menu[2] = 0;
--    wimp_menu[3] = 0x00070207;
--    wimp_menu[5] = 44;
--    wimp_menu[6] = 0;
--
--    wimp_item = wimp_menu + 7;
--
--    for (item = menu-> children; item; item = item-> next)
--    {
--	if (menu_is_separator(item-> name))
--	{
--	    /* This menu entry is actually a separator. If it is not the first
--	     * menu entry then mark the previous menu item as needing a dotted
--	     * line after it.
--	     */
--	    if (wimp_item > wimp_menu + 7)
--		wimp_item[-6] |= 0x2;
--	}
--	else if (item-> hidden == FALSE)
--	{
--	    wimp_item[0] = 0;
--	    wimp_item[1] = item-> children ? (int) ro_build_menu(item) : -1;
--	    wimp_item[2] = 0x07009131 | (item-> greyed_out << 22);
--	    wimp_item[3] = (int) item-> dname;
--	    wimp_item[4] = -1;
--	    wimp_item[5] = (int) item;  /* Stuff the menu address in this unused space */
--
--	    w = strlen(item-> dname) + 1;
--	    if (w > width)
--		width = w;
--	    wimp_item += 6;
--	}
--    }
--
--    wimp_menu[4] = (width + 2) * 16;
--    wimp_menu[7]  |= 0x100;	    /* Menu title is indirected */
--    wimp_item[-6] |= 0x080;	    /* Last entry in menu */
--    return wimp_menu;
--}
--
--    static void
--ro_remove_menu(menu)
--    int	    *menu;
--{
--    int	    *item = menu + 7;
--
--    if (menu == NULL || menu == (int *) -1)
--	return;
--
--    for (;;)
--    {
--	if (item[1] != -1)
--	    ro_remove_menu((int *) item[1]);	/* Remove sub-menu */
--	if (item[0] & 0x80)
--	    break;			/* This was the last entry */
--	item += 6;
--    }
--    vim_free(menu);
--}
--
--    void
--gui_mch_show_popupmenu(menu)
--    vimmenu_T	*menu;
--{
--    int		block[10];
--
--    /* Remove the existing menu, if any */
--    if (wimp_menu != (int *) -1)
--    {
--	swi(Wimp_CreateMenu, 0, -1);
--	ro_remove_menu(wimp_menu);
--	wimp_menu = (int *) -1;
--    }
--
--    wimp_menu = ro_build_menu(menu);
--    if (wimp_menu != (int *) -1)
--    {
--	swi(Wimp_GetPointerInfo, 0, block);
--	swi(Wimp_CreateMenu, 0, wimp_menu, block[0] - 64, block[1] + 64);
--    }
--}
--
--/* Run a command using the TaskWindow module.
-- * If SHELL_FILTER is set then output is not echoed to the screen,
-- * If it is not set, then \r is not sent to the output file.
-- */
--    int
--gui_mch_call_shell(cmd, options)
--    char_u  *cmd;
--    int	    options;	/* SHELL_FILTER if called by do_filter() */
--			/* SHELL_COOKED if term needs cooked mode */
--{
--    char_u  task_cmd[256];	/* Contains *TaskWindow command. */
--    int	    block[64];
--    int	    reason;
--    char_u  *out;
--    char_u  c;
--    int	    old_msg_col;
--    char_u  *out_redir;
--    int	    length;
--    FILE    *out_file = NULL;
--
--    out_redir = strstr(cmd, " > ");
--    if (out_redir == NULL)
--	length = strlen(cmd);	/* No redirection. */
--    else
--    {
--	length = out_redir - cmd;
--	out_file = fopen(out_redir + 3, "wb");
--	if (out_file == NULL)
--	    smsg("WARNING : Can't open file %s for writing\n", out_redir + 3);
--    }
--
--    if (length > 180)
--    {
--	if (out_file)
--	    fclose(out_file);
--	return FAIL;		/* Command too long. */
--    }
--
--    strcpy(task_cmd, "TaskWindow \"");
--    strncpy(task_cmd + 12, cmd, length);
--    sprintf(task_cmd + 12 + length,
--	    "\" -task &%08x -ctrl -quit -name \"Vim command\"",
--	    task_handle);
--
--    if (options & SHELL_COOKED)
--	settmode(TMODE_COOK);
--
--    if (xswi(Wimp_StartTask, task_cmd) & v_flag)
--    {
--	/* Failed to even start a new task (out of memory?) */
--	settmode(TMODE_RAW);
--	if (out_file)
--	    fclose(out_file);
--	return FAIL;
--    }
--
--    /* Wait for the child process to initialise. */
--    child_handle = 0;
--    while (!child_handle)
--    {
--	reason = wimp_poll(0, block);
--	if ((reason == 17 || reason == 18) && block[4] == 0x808c2)
--	    child_handle = block[1];
--	else
--	    process_event(reason, block);
--    }
--
--    /* Block until finished */
--    while (child_handle)
--    {
--	reason = wimp_poll(1, block);
--	if (reason == 3 || (reason == 8 && block[6] == 3))
--	{
--	    /* Close window request or CTRL-C - kill child task. */
--	    block[0] = 20;
--	    block[3] = 0;
--	    block[4] = 0x808c4;	    /* Morite */
--	    swi(Wimp_SendMessage, 17, block, child_handle);
--	    MSG_PUTS(_("\nSending message to terminate child process.\n"));
--	    continue;
--	}
--	else if (reason == 8)
--	{
--	    block[0] = 28;
--	    block[3] = 0;
--	    block[4] = 0x808c0;	    /* Input */
--	    block[5] = 1;
--	    /* Block[6] is OK as it is! */
--	    swi(Wimp_SendMessage, 17, block, child_handle);
--	    continue;
--	}
--	else if (reason == 17 || reason == 18)
--	{
--	    if (block[4] == 0x808c1)
--	    {
--		/* Ack message. */
--		block[3] = block[2];
--		swi(Wimp_SendMessage, 19, block, block[1]);
--		out = (char_u *)block + 24;
--		old_msg_col = msg_col;
--		while (block[5]--)
--		{
--		    c = *out++;
--		    if (out_file && (c != '\r' || (options & SHELL_FILTER)))
--			fputc(c, out_file);
--		    if ((options & SHELL_FILTER) == 0)
--		    {
--			if (c == 127)
--			    msg_puts("\b \b");
--			else if (c > 31)
--			    msg_putchar(c);
--			else if (c == 10)
--			{
--			    lines_left = 8;	/* Don't do More prompt! */
--			    msg_putchar(10);
--			}
--		    }
--		}
--		/* Flush output to the screen. */
--		windgoto(msg_row, msg_col);
--		out_flush();
--		continue;
--	    }
--	}
--	process_event(reason, block);
--    }
--    msg_putchar('\n');
--    settmode(TMODE_RAW);
--    if (out_file)
--	fclose(out_file);
--    return OK;
--}
--
--/* Like strsave(), but stops at any control char */
--    char_u *
--wimp_strsave(str)
--    char    *str;
--{
--    int	    strlen = 0;
--    char_u  *retval;
--    while (str[strlen] > 31)
--	strlen++;
--    retval = alloc(strlen + 1);
--    if (retval)
--    {
--	memcpy(retval, str, strlen);
--	retval[strlen] = '\0';
--    }
--    return retval;
--}
--
--/* If we are saving then pop up a standard RISC OS save box.
-- * Otherwise, open a directory viewer on the given directory (and return NULL)
-- * The string we return will be freed later.
-- */
--    char_u *
--gui_mch_browse(saving, title, dflt, ext, initdir, filter)
--    int		saving;		/* write action */
--    char_u	*title;		/* title for the window */
--    char_u	*dflt;		/* default file name */
--    char_u	*ext;		/* extension added */
--    char_u	*initdir;	/* initial directory, NULL for current dir */
--    char_u	*filter;	/* file name filter */
--{
--    char command[256];
--    int length;
--
--    if (saving)
--    {
--	int	block[64];
--	int	reason;
--	int	done_save = FALSE;
--	char_u	*retval = NULL;
--	char_u  *sprname;
--	char_u	*fname;
--	int	dragging_icon = FALSE;
--	int	filetype;
--
--	if (!dflt)
--	    dflt = "TextFile";
--
--	block[0] = save_window;
--	block[1] = 0;
--	swi(Wimp_GetIconState, 0, block);
--	sprname = ((char_u *) block[7]);
--	block[1] = 1;
--	swi(Wimp_GetIconState, 0, block);
--	fname = ((char *) block[7]);
--	strncpy(fname, dflt, 255);
--
--	if (xswi(OS_FSControl, 31, curbuf->b_p_oft) & v_flag)
--	{
--	    filetype = 0xfff;
--	    strcpy(sprname + 5, "xxx");
--	}
--	else
--	{
--	    filetype = r2;
--	    sprintf(sprname + 5, "%03x", filetype);
--	}
--
--	/* Open the save box */
--
--	swi(Wimp_GetPointerInfo, 0, block);
--	swi(Wimp_CreateMenu, 0, save_window, block[0] - 64, block[1] + 64);
--	swi(Wimp_SetCaretPosition, save_window, 1, 0, 0, -1, -1);
--
--	while (!done_save)
--	{
--	    reason = wimp_poll(1, block);
--	    switch (reason)
--	    {
--		case 1:
--		    redraw_window(block);
--		    break;
--		case 2:
--		    if (block[0] == save_window)
--			swi(Wimp_OpenWindow, 0, block);
--		    else
--			ro_open_window(block);
--		    break;
--		case 3:
--		    done_save = TRUE;
--		    break;
--		case 6:
--		    if (block[3] != save_window)
--			done_save = TRUE;
--		    else
--		    {
--			int drag_box[4];
--			int min_x, max_y;
--
--			switch (block[4])
--			{
--			    case    0: /* Start drag */
--				block[0] = save_window;
--				swi(Wimp_GetWindowState, 0, block);
--				min_x = block[1];
--				max_y = block[4];
--				block[1] = 0;
--				swi(Wimp_GetIconState, 0, block);
--				drag_box[0] = block[2] + min_x;
--				drag_box[1] = block[3] + max_y;
--				drag_box[2] = block[4] + min_x;
--				drag_box[3] = block[5] + max_y;
--
--				swi(DragASprite_Start,
--					0x45,
--					1,
--					sprname,
--					drag_box);
--				dragging_icon = TRUE;
--				break;
--			    case    2: /* OK */
--				retval = wimp_strsave(fname);
--				done_save = TRUE;
--				break;
--			    case    3: /* Cancel */
--				done_save = TRUE;
--				break;
--			}
--		    }
--		    break;
--		case 7:
--		    if (dragging_icon)
--		    {
--			int len = 0;
--
--			dragging_icon = FALSE;
--			swi(Wimp_GetPointerInfo, 0, block);
--			block[5] = block[3];
--			block[6] = block[4];
--			block[7] = block[0];
--			block[8] = block[1];
--			block[9] = 0;		/* Don't know the size */
--			block[10] = filetype;
--
--			while (fname[len] > 31)
--			{
--			    if (fname[len] == '.')
--			    {
--				fname += len + 1;
--				len = 0;
--			    }
--			    else
--				len++;
--			}
--			if (len > 211)
--			    len = 211;
--
--			memcpy(((char_u *) block) + 44, fname, len);
--			((char_u *)block)[44 + len] = '\0';
--
--			block[0] = (len + 48) & 0xfc;
--			block[3] = 0;
--			block[4] = 1;	    /* DataSave */
--
--			swi(Wimp_SendMessage, 17, block, block[5], block[6]);
--		    }
--		    else
--			ro_drag_finished(block);
--		    break;
--		case 8:
--		    if (block[6] == 13)
--		    {
--			retval = wimp_strsave(fname);
--			done_save = TRUE;
--		    }
--		    else if (block[6] == 0x1b)
--			done_save = TRUE;
--		    else
--			swi(Wimp_ProcessKey, block[6]);
--		    break;
--		case 17:
--		case 18:
--		    if (block[4] == 2 && block[9] != -1)
--		    {
--			/* DataSaveAck from dragging icon. */
--			retval = wimp_strsave(((char_u *) block) + 44);
--			done_save = TRUE;
--		    }
--		    else if (block[4] == 0x400c9)
--		    {
--			/* MenusDeleted */
--			done_save = TRUE;
--		    }
--		    else
--			ro_message(block);
--		    break;
--	    }
--	}
--	block[0] = save_window;
--	swi(Wimp_CloseWindow, 0, block);
--	swi(Wimp_GetCaretPosition, 0, block);
--	if (block[0] == -1)
--	    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
--
--	return retval;
--    }
--    else if (initdir)
--    {
--	/* Open a directory viewer */
--	length = strlen(initdir);
--
--	if (length > 240)
--	    return NULL;	/* Path too long! */
--
--	length = sprintf(command, "Filer_OpenDir %s", initdir);
--	while (command[length - 1] == '.')
--	    length--;
--	command[length] = '\0';
--	swi(OS_CLI, command);
--    }
--    return NULL;
--}
-diff -Naur vim73.orig/src/gui_riscos.h vim73/src/gui_riscos.h
---- vim73.orig/src/gui_riscos.h	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/gui_riscos.h	1970-01-01 00:00:00.000000000 +0000
-@@ -1,32 +0,0 @@
--/* vi:set ts=8 sts=4 sw=4:
-- *
-- * VIM - Vi IMproved	by Bram Moolenaar
-- *
-- * Do ":help uganda"  in Vim to read copying and usage conditions.
-- * Do ":help credits" in Vim to see a list of people who contributed.
-- */
--
--#define FEAT_BROWSE
--
--#define TASK 0x4b534154
--
--/* Nested wimp flags: */
--#define CHILD_FIX_TO_WORKAREA	0
--#define CHILD_FIX_TO_LEFT	1
--#define CHILD_FIX_TO_BOTTOM	1
--#define CHILD_FIX_TO_RIGHT	2
--#define CHILD_FIX_TO_TOP	2
--
--#define CHILD_SELF_SCROLL	0
--#define CHILD_PARENT_SCROLL	1
--
--#define CHILD_LEFT		16
--#define CHILD_BOTTOM		18
--#define CHILD_RIGHT		20
--#define CHILD_TOP		22
--#define CHILD_SCROLL_X		24
--#define CHILD_SCROLL_Y		26
--
--int wimp_poll(int mask, int *block);
--int wimp_poll_idle(int mask, int *block, int end_time);
--void ro_open_main(int *block);
-diff -Naur vim73.orig/src/gui_w16.c vim73/src/gui_w16.c
---- vim73.orig/src/gui_w16.c	2010-07-18 13:03:38.000000000 +0000
-+++ vim73/src/gui_w16.c	2012-11-01 20:35:45.000000000 +0000
-@@ -21,6 +21,12 @@
-  *
-  */
- 
-+/* Win16 doesn't use the "W" methods. */
-+#define pDispatchMessage DispatchMessage
-+#define pGetMessage GetMessage
-+#define pIsDialogMessage IsDialogMessage
-+#define pPeekMessage PeekMessage
-+
- /*
-  * Include the common stuff for MS-Windows GUI.
-  */
-@@ -1098,7 +1104,8 @@
-     char_u	*message,
-     char_u	*buttons,
-     int		 dfltbutton,
--    char_u	*textfield)
-+    char_u	*textfield,
-+    int		ex_cmd)
- {
-     FARPROC	dp;
-     LPWORD	p, pnumitems;
-diff -Naur vim73.orig/src/gui_w32.c vim73/src/gui_w32.c
---- vim73.orig/src/gui_w32.c	2010-08-08 13:05:26.000000000 +0000
-+++ vim73/src/gui_w32.c	2012-11-01 20:35:44.000000000 +0000
-@@ -289,13 +289,13 @@
- 
- #ifdef FEAT_MENU
- static UINT	s_menu_id = 100;
-+#endif
- 
- /*
-  * Use the system font for dialogs and tear-off menus.  Remove this line to
-  * use DLG_FONT_NAME.
-  */
--# define USE_SYSMENU_FONT
--#endif
-+#define USE_SYSMENU_FONT
- 
- #define VIM_NAME	"vim"
- #define VIM_CLASS	"Vim"
-@@ -798,7 +798,7 @@
- 		if (pt.y < rect.top)
- 		{
- 		    show_tabline_popup_menu();
--		    return 0;
-+		    return 0L;
- 		}
- 	    }
- 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
-@@ -828,7 +828,10 @@
- 
-     case WM_ENDSESSION:
- 	if (wParam)	/* system only really goes down when wParam is TRUE */
-+	{
- 	    _OnEndSession();
-+	    return 0L;
-+	}
- 	break;
- 
-     case WM_CHAR:
-@@ -866,7 +869,7 @@
- 	 * are received, mouse pointer remains hidden. */
- 	return MyWindowProc(hwnd, uMsg, wParam, lParam);
- #else
--	return 0;
-+	return 0L;
- #endif
- 
-     case WM_SIZING:	/* HANDLE_MSG doesn't seem to handle this one */
-@@ -874,7 +877,7 @@
- 
-     case WM_MOUSEWHEEL:
- 	_OnMouseWheel(hwnd, HIWORD(wParam));
--	break;
-+	return 0L;
- 
- 	/* Notification for change in SystemParametersInfo() */
-     case WM_SETTINGCHANGE:
-@@ -987,13 +990,19 @@
- 	    case TCN_SELCHANGE:
- 		if (gui_mch_showing_tabline()
- 				  && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
-+		{
- 		    send_tabline_event(TabCtrl_GetCurSel(s_tabhwnd) + 1);
-+		    return 0L;
-+		}
- 		break;
- 
- 	    case NM_RCLICK:
- 		if (gui_mch_showing_tabline()
- 			&& ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
-+		{
- 		    show_tabline_popup_menu();
-+		    return 0L;
-+		}
- 		break;
- # endif
- 	    default:
-@@ -1037,6 +1046,7 @@
- 		out_flush();
- 		did_menu_tip = TRUE;
- 	    }
-+	    return 0L;
- 	}
- 	break;
- #endif
-@@ -1079,18 +1089,19 @@
-     case WM_IME_NOTIFY:
- 	if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
- 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
--	break;
-+	return 1L;
-+
-     case WM_IME_COMPOSITION:
- 	if (!_OnImeComposition(hwnd, wParam, lParam))
- 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
--	break;
-+	return 1L;
- #endif
- 
-     default:
- 	if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
- 	{   /* handle MSH_MOUSEWHEEL messages for Intellimouse */
- 	    _OnMouseWheel(hwnd, HIWORD(wParam));
--	    break;
-+	    return 0L;
- 	}
- #ifdef MSWIN_FIND_REPLACE
- 	else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
-@@ -1101,7 +1112,7 @@
- 	return MyWindowProc(hwnd, uMsg, wParam, lParam);
-     }
- 
--    return 1;
-+    return DefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- 
- /*
-@@ -1260,7 +1271,7 @@
- 
-     /* try and load the user32.dll library and get the entry points for
-      * multi-monitor-support. */
--    if ((user32_lib = LoadLibrary("User32.dll")) != NULL)
-+    if ((user32_lib = vimLoadLib("User32.dll")) != NULL)
-     {
- 	pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib,
- 							 "MonitorFromWindow");
-@@ -1270,6 +1281,25 @@
- 	pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib,
- 							  "GetMonitorInfoA");
-     }
-+
-+#ifdef FEAT_MBYTE
-+    /* If the OS is Windows NT, use wide functions;
-+     * this enables common dialogs input unicode from IME. */
-+    if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
-+    {
-+	pDispatchMessage = DispatchMessageW;
-+	pGetMessage = GetMessageW;
-+	pIsDialogMessage = IsDialogMessageW;
-+	pPeekMessage = PeekMessageW;
-+    }
-+    else
-+    {
-+	pDispatchMessage = DispatchMessageA;
-+	pGetMessage = GetMessageA;
-+	pIsDialogMessage = IsDialogMessageA;
-+	pPeekMessage = PeekMessageA;
-+    }
-+#endif
- }
- 
- /*
-@@ -1379,7 +1409,8 @@
- 	    s_hwnd = CreateWindowEx(
- 		WS_EX_MDICHILD,
- 		szVimWndClass, "Vim MSWindows GUI",
--		WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS | 0xC000,
-+		WS_OVERLAPPEDWINDOW | WS_CHILD
-+				 | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
- 		gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
- 		gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
- 		100,				/* Any value will do */
-@@ -1410,7 +1441,8 @@
- 	 * titlebar, it will be reparented below. */
- 	s_hwnd = CreateWindow(
- 		szVimWndClass, "Vim MSWindows GUI",
--		win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
-+		(win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
-+					  | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
- 		gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
- 		gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
- 		100,				/* Any value will do */
-@@ -1573,6 +1605,15 @@
- # endif
- #endif
- 
-+#ifdef FEAT_EVAL
-+# if _MSC_VER < 1400
-+/* HandleToLong() only exists in compilers that can do 64 bit builds */
-+#  define HandleToLong(h) ((long)(h))
-+# endif
-+    /* set the v:windowid variable */
-+    set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
-+#endif
-+
- theend:
-     /* Display any pending error messages */
-     display_errors();
-@@ -1620,9 +1661,7 @@
- {
-     RECT	workarea_rect;
-     int		win_width, win_height;
--    int		win_xpos, win_ypos;
-     WINDOWPLACEMENT wndpl;
--    int		workarea_left;
- 
-     /* Try to keep window completely on screen. */
-     /* Get position of the screen work area.  This is the part that is not
-@@ -1644,9 +1683,6 @@
- 	GetWindowPlacement(s_hwnd, &wndpl);
-     }
- 
--    win_xpos = wndpl.rcNormalPosition.left;
--    win_ypos = wndpl.rcNormalPosition.top;
--
-     /* compute the size of the outside of the window */
-     win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
-     win_height = height + GetSystemMetrics(SM_CYFRAME) * 2
-@@ -1656,36 +1692,32 @@
- #endif
- 			;
- 
--    /* There is an inconsistency when using two monitors and Vim is on the
--     * second (right) one: win_xpos will be the offset from the workarea of
--     * the left monitor.  While with one monitor it's the offset from the
--     * workarea (including a possible taskbar on the left).  Detect the second
--     * monitor by checking for the left offset to be quite big. */
--    if (workarea_rect.left > 300)
--	workarea_left = 0;
--    else
--	workarea_left = workarea_rect.left;
-+    /* The following should take care of keeping Vim on the same monitor, no
-+     * matter if the secondary monitor is left or right of the primary
-+     * monitor. */
-+    wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + win_width;
-+    wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + win_height;
- 
--    /* If the window is going off the screen, move it on to the screen.
--     * win_xpos and win_ypos are relative to the workarea. */
-+    /* If the window is going off the screen, move it on to the screen. */
-     if ((direction & RESIZE_HOR)
--	    && workarea_left + win_xpos + win_width > workarea_rect.right)
--	win_xpos = workarea_rect.right - win_width - workarea_left;
-+	    && wndpl.rcNormalPosition.right > workarea_rect.right)
-+	OffsetRect(&wndpl.rcNormalPosition,
-+		workarea_rect.right - wndpl.rcNormalPosition.right, 0);
- 
--    if ((direction & RESIZE_HOR) && win_xpos < 0)
--	win_xpos = 0;
-+    if ((direction & RESIZE_HOR)
-+	    && wndpl.rcNormalPosition.left < workarea_rect.left)
-+	OffsetRect(&wndpl.rcNormalPosition,
-+		workarea_rect.left - wndpl.rcNormalPosition.left, 0);
- 
-     if ((direction & RESIZE_VERT)
--	  && workarea_rect.top + win_ypos + win_height > workarea_rect.bottom)
--	win_ypos = workarea_rect.bottom - win_height - workarea_rect.top;
-+	    && wndpl.rcNormalPosition.bottom > workarea_rect.bottom)
-+	OffsetRect(&wndpl.rcNormalPosition,
-+		0, workarea_rect.bottom - wndpl.rcNormalPosition.bottom);
- 
--    if ((direction & RESIZE_VERT) && win_ypos < 0)
--	win_ypos = 0;
--
--    wndpl.rcNormalPosition.left = win_xpos;
--    wndpl.rcNormalPosition.right = win_xpos + win_width;
--    wndpl.rcNormalPosition.top = win_ypos;
--    wndpl.rcNormalPosition.bottom = win_ypos + win_height;
-+    if ((direction & RESIZE_VERT)
-+	    && wndpl.rcNormalPosition.top < workarea_rect.top)
-+	OffsetRect(&wndpl.rcNormalPosition,
-+		0, workarea_rect.top - wndpl.rcNormalPosition.top);
- 
-     /* set window position - we should use SetWindowPlacement rather than
-      * SetWindowPos as the MSDN docs say the coord systems returned by
-@@ -3000,7 +3032,8 @@
-     char_u	*message,
-     char_u	*buttons,
-     int		 dfltbutton,
--    char_u	*textfield)
-+    char_u	*textfield,
-+    int		ex_cmd)
- {
-     WORD	*p, *pdlgtemplate, *pnumitems;
-     DWORD	*dwp;
-@@ -4188,7 +4221,7 @@
-     static void
- dyn_imm_load(void)
- {
--    hLibImm = LoadLibrary("imm32.dll");
-+    hLibImm = vimLoadLib("imm32.dll");
-     if (hLibImm == NULL)
- 	return;
- 
-diff -Naur vim73.orig/src/gui_w48.c vim73/src/gui_w48.c
---- vim73.orig/src/gui_w48.c	2010-07-27 19:46:04.000000000 +0000
-+++ vim73/src/gui_w48.c	2012-11-01 20:35:44.000000000 +0000
-@@ -328,6 +328,10 @@
- static LRESULT _OnImeNotify(HWND hWnd, DWORD dwCommand, DWORD dwData);
- #endif
- 
-+#if defined(FEAT_MBYTE) && defined(WIN3264)
-+static char_u *convert_filter(char_u *s);
-+#endif
-+
- #ifdef DEBUG_PRINT_ERROR
- /*
-  * Print out the last Windows error message
-@@ -390,7 +394,7 @@
-     KillTimer(NULL, idEvent);
- 
-     /* Eat spurious WM_TIMER messages */
--    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
-+    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
- 	;
- 
-     if (blink_state == BLINK_ON)
-@@ -418,7 +422,7 @@
-     {
- 	KillTimer(NULL, blink_timer);
- 	/* Eat spurious WM_TIMER messages */
--	while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
-+	while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
- 	    ;
- 	blink_timer = 0;
-     }
-@@ -476,7 +480,7 @@
-     s_timed_out = TRUE;
- 
-     /* Eat spurious WM_TIMER messages */
--    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
-+    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
- 	;
-     if (idEvent == s_wait_timer)
- 	s_wait_timer = 0;
-@@ -1411,12 +1415,12 @@
-     static guicolor_tTable table[] =
-     {
- 	{"Black",		RGB(0x00, 0x00, 0x00)},
--	{"DarkGray",		RGB(0x80, 0x80, 0x80)},
--	{"DarkGrey",		RGB(0x80, 0x80, 0x80)},
-+	{"DarkGray",		RGB(0xA9, 0xA9, 0xA9)},
-+	{"DarkGrey",		RGB(0xA9, 0xA9, 0xA9)},
- 	{"Gray",		RGB(0xC0, 0xC0, 0xC0)},
- 	{"Grey",		RGB(0xC0, 0xC0, 0xC0)},
--	{"LightGray",		RGB(0xE0, 0xE0, 0xE0)},
--	{"LightGrey",		RGB(0xE0, 0xE0, 0xE0)},
-+	{"LightGray",		RGB(0xD3, 0xD3, 0xD3)},
-+	{"LightGrey",		RGB(0xD3, 0xD3, 0xD3)},
- 	{"Gray10",		RGB(0x1A, 0x1A, 0x1A)},
- 	{"Grey10",		RGB(0x1A, 0x1A, 0x1A)},
- 	{"Gray20",		RGB(0x33, 0x33, 0x33)},
-@@ -1441,19 +1445,19 @@
- 	{"LightRed",		RGB(0xFF, 0xA0, 0xA0)},
- 	{"DarkBlue",		RGB(0x00, 0x00, 0x80)},
- 	{"Blue",		RGB(0x00, 0x00, 0xFF)},
--	{"LightBlue",		RGB(0xA0, 0xA0, 0xFF)},
-+	{"LightBlue",		RGB(0xAD, 0xD8, 0xE6)},
- 	{"DarkGreen",		RGB(0x00, 0x80, 0x00)},
- 	{"Green",		RGB(0x00, 0xFF, 0x00)},
--	{"LightGreen",		RGB(0xA0, 0xFF, 0xA0)},
-+	{"LightGreen",		RGB(0x90, 0xEE, 0x90)},
- 	{"DarkCyan",		RGB(0x00, 0x80, 0x80)},
- 	{"Cyan",		RGB(0x00, 0xFF, 0xFF)},
--	{"LightCyan",		RGB(0xA0, 0xFF, 0xFF)},
-+	{"LightCyan",		RGB(0xE0, 0xFF, 0xFF)},
- 	{"DarkMagenta",		RGB(0x80, 0x00, 0x80)},
- 	{"Magenta",		RGB(0xFF, 0x00, 0xFF)},
- 	{"LightMagenta",	RGB(0xFF, 0xA0, 0xFF)},
- 	{"Brown",		RGB(0x80, 0x40, 0x40)},
- 	{"Yellow",		RGB(0xFF, 0xFF, 0x00)},
--	{"LightYellow",		RGB(0xFF, 0xFF, 0xA0)},
-+	{"LightYellow",		RGB(0xFF, 0xFF, 0xE0)},
- 	{"DarkYellow",		RGB(0xBB, 0xBB, 0x00)},
- 	{"SeaGreen",		RGB(0x2E, 0x8B, 0x57)},
- 	{"Orange",		RGB(0xFF, 0xA5, 0x00)},
-@@ -1707,7 +1711,7 @@
-     static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
- #endif
- 
--    GetMessage(&msg, NULL, 0, 0);
-+    pGetMessage(&msg, NULL, 0, 0);
- 
- #ifdef FEAT_OLE
-     /* Look after OLE Automation commands */
-@@ -1718,7 +1722,7 @@
- 	{
- 	    /* Message can't be ours, forward it.  Fixes problem with Ultramon
- 	     * 3.0.4 */
--	    DispatchMessage(&msg);
-+	    pDispatchMessage(&msg);
- 	}
- 	else
- 	{
-@@ -1749,14 +1753,14 @@
-     if (msg.message == WM_USER)
-     {
- 	MyTranslateMessage(&msg);
--	DispatchMessage(&msg);
-+	pDispatchMessage(&msg);
- 	return;
-     }
- #endif
- 
- #ifdef MSWIN_FIND_REPLACE
-     /* Don't process messages used by the dialog */
--    if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg))
-+    if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
-     {
- 	HandleMouseHide(msg.message, msg.lParam);
- 	return;
-@@ -1810,7 +1814,8 @@
- 		 * mapped we want to use the mapping instead. */
- 		if (vk == VK_F10
- 			&& gui.menu_is_active
--			&& check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
-+			&& check_map(k10, State, FALSE, TRUE, FALSE,
-+							  NULL, NULL) == NULL)
- 		    break;
- #endif
- 		if (GetKeyState(VK_SHIFT) & 0x8000)
-@@ -1924,9 +1929,10 @@
-     /* Check for <F10>: Default effect is to select the menu.  When <F10> is
-      * mapped we need to stop it here to avoid strange effects (e.g., for the
-      * key-up event) */
--    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
-+    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
-+							  NULL, NULL) == NULL)
- #endif
--	DispatchMessage(&msg);
-+	pDispatchMessage(&msg);
- }
- 
- /*
-@@ -1941,7 +1947,7 @@
-     MSG	    msg;
- 
-     if (!s_busy_processing)
--	while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
-+	while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
- 						  && !vim_is_input_buf_full())
- 	    process_message();
- }
-@@ -2017,7 +2023,7 @@
- 		KillTimer(NULL, s_wait_timer);
- 
- 		/* Eat spurious WM_TIMER messages */
--		while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
-+		while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
- 		    ;
- 		s_wait_timer = 0;
- 	    }
-@@ -3273,28 +3279,21 @@
- 
- # if defined(FEAT_MBYTE) && defined(WIN3264)
- /*
-- * Wide version of convert_filter().  Keep in sync!
-+ * Wide version of convert_filter().
-  */
-     static WCHAR *
- convert_filterW(char_u *s)
- {
--    WCHAR	*res;
--    unsigned	s_len = (unsigned)STRLEN(s);
--    unsigned	i;
-+    char_u *tmp;
-+    int len;
-+    WCHAR *res;
- 
--    res = (WCHAR *)alloc((s_len + 3) * sizeof(WCHAR));
--    if (res != NULL)
--    {
--	for (i = 0; i < s_len; ++i)
--	    if (s[i] == '\t' || s[i] == '\n')
--		res[i] = '\0';
--	    else
--		res[i] = s[i];
--	res[s_len] = NUL;
--	/* Add two extra NULs to make sure it's properly terminated. */
--	res[s_len + 1] = NUL;
--	res[s_len + 2] = NUL;
--    }
-+    tmp = convert_filter(s);
-+    if (tmp == NULL)
-+	return NULL;
-+    len = (int)STRLEN(s) + 3;
-+    res = enc_to_utf16(tmp, &len);
-+    vim_free(tmp);
-     return res;
- }
- 
-diff -Naur vim73.orig/src/gui_x11.c vim73/src/gui_x11.c
---- vim73.orig/src/gui_x11.c	2010-08-08 13:05:45.000000000 +0000
-+++ vim73/src/gui_x11.c	2012-11-01 20:35:40.000000000 +0000
-@@ -2895,6 +2895,11 @@
- 	    focus = gui.in_focus;
- 	}
- 
-+#if defined(FEAT_NETBEANS_INTG)
-+	/* Process any queued netbeans messages. */
-+	netbeans_parse_messages();
-+#endif
-+
- 	/*
- 	 * Don't use gui_mch_update() because then we will spin-lock until a
- 	 * char arrives, instead we use XtAppProcessEvent() to hang until an
-diff -Naur vim73.orig/src/gui_xmdlg.c vim73/src/gui_xmdlg.c
---- vim73.orig/src/gui_xmdlg.c	2010-06-26 03:53:50.000000000 +0000
-+++ vim73/src/gui_xmdlg.c	2012-11-01 20:35:40.000000000 +0000
-@@ -688,7 +688,7 @@
- 	    do_dialog(VIM_ERROR,
- 		    (char_u *)_("Error"),
- 		    (char_u *)_("Invalid font specification"),
--		    (char_u *)_("&Dismiss"), 1, NULL);
-+		    (char_u *)_("&Dismiss"), 1, NULL, FALSE);
- 
- 	return True;
-     }
-@@ -807,7 +807,7 @@
- 	do_dialog(VIM_ERROR,
- 		(char_u *)_("Error"),
- 		(char_u *)_("Invalid font specification"),
--		(char_u *)_("&Dismiss"), 1, NULL);
-+		(char_u *)_("&Dismiss"), 1, NULL, FALSE);
- 	XFreeFontNames(name);
-     }
-     else
-diff -Naur vim73.orig/src/gui_xmebw.c vim73/src/gui_xmebw.c
---- vim73.orig/src/gui_xmebw.c	2010-07-14 14:48:14.000000000 +0000
-+++ vim73/src/gui_xmebw.c	2012-11-01 20:35:47.000000000 +0000
-@@ -375,11 +375,8 @@
- 
-     XGetGeometry(dpy, pix, &root, &x, &y, &width, &height, &border, &depth);
- 
--    if (eb->enhancedbutton.label_location == (int)XmTOP
--	    || eb->enhancedbutton.label_location == (int)XmBOTTOM)
--	shift = eb->primitive.shadow_thickness / 2;
--    else
--	shift = eb->primitive.shadow_thickness / 2;
-+    /* TODO: does the shift depend on label_location somehow? */
-+    shift = eb->primitive.shadow_thickness / 2;
- 
-     if (shift < 1)
- 	shift = 1;
-diff -Naur vim73.orig/src/hardcopy.c vim73/src/hardcopy.c
---- vim73.orig/src/hardcopy.c	2010-07-31 14:10:59.000000000 +0000
-+++ vim73/src/hardcopy.c	2012-11-01 20:35:41.000000000 +0000
-@@ -1759,18 +1759,25 @@
-     char	*name;
-     struct prt_ps_resource_S *resource;
- {
--    char_u	buffer[MAXPATHL + 1];
-+    char_u	*buffer;
-+    int		retval;
- 
--    STRCPY(resource->name, name);
-+    buffer = alloc(MAXPATHL + 1);
-+    if (buffer == NULL)
-+	return FALSE;
-+
-+    vim_strncpy(resource->name, (char_u *)name, 63);
-     /* Look for named resource file in runtimepath */
-     STRCPY(buffer, "print");
-     add_pathsep(buffer);
--    STRCAT(buffer, name);
--    STRCAT(buffer, ".ps");
-+    vim_strcat(buffer, (char_u *)name, MAXPATHL);
-+    vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
-     resource->filename[0] = NUL;
--    return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
-+    retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
- 							   resource->filename)
- 	    && resource->filename[0] != NUL);
-+    vim_free(buffer);
-+    return retval;
- }
- 
- /* PS CR and LF characters have platform independent values */
-@@ -2848,15 +2855,33 @@
-     double      right;
-     double      top;
-     double      bottom;
--    struct prt_ps_resource_S res_prolog;
--    struct prt_ps_resource_S res_encoding;
-+    struct prt_ps_resource_S *res_prolog;
-+    struct prt_ps_resource_S *res_encoding;
-     char	buffer[256];
-     char_u      *p_encoding;
-     char_u	*p;
- #ifdef FEAT_MBYTE
--    struct prt_ps_resource_S res_cidfont;
--    struct prt_ps_resource_S res_cmap;
-+    struct prt_ps_resource_S *res_cidfont;
-+    struct prt_ps_resource_S *res_cmap;
-+#endif
-+    int		retval = FALSE;
-+
-+    res_prolog = (struct prt_ps_resource_S *)
-+				      alloc(sizeof(struct prt_ps_resource_S));
-+    res_encoding = (struct prt_ps_resource_S *)
-+				      alloc(sizeof(struct prt_ps_resource_S));
-+#ifdef FEAT_MBYTE
-+    res_cidfont = (struct prt_ps_resource_S *)
-+				      alloc(sizeof(struct prt_ps_resource_S));
-+    res_cmap = (struct prt_ps_resource_S *)
-+				      alloc(sizeof(struct prt_ps_resource_S));
-+#endif
-+    if (res_prolog == NULL || res_encoding == NULL
-+#ifdef FEAT_MBYTE
-+	    || res_cidfont == NULL || res_cmap == NULL
- #endif
-+       )
-+	goto theend;
- 
-     /*
-      * PS DSC Header comments - no PS code!
-@@ -2932,27 +2957,27 @@
- #endif
- 
-     /* Search for external resources VIM supplies */
--    if (!prt_find_resource("prolog", &res_prolog))
-+    if (!prt_find_resource("prolog", res_prolog))
-     {
- 	EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
- 	return FALSE;
-     }
--    if (!prt_open_resource(&res_prolog))
-+    if (!prt_open_resource(res_prolog))
- 	return FALSE;
--    if (!prt_check_resource(&res_prolog, PRT_PROLOG_VERSION))
-+    if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
- 	return FALSE;
- #ifdef FEAT_MBYTE
-     if (prt_out_mbyte)
-     {
- 	/* Look for required version of multi-byte printing procset */
--	if (!prt_find_resource("cidfont", &res_cidfont))
-+	if (!prt_find_resource("cidfont", res_cidfont))
- 	{
- 	    EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
- 	    return FALSE;
- 	}
--	if (!prt_open_resource(&res_cidfont))
-+	if (!prt_open_resource(res_cidfont))
- 	    return FALSE;
--	if (!prt_check_resource(&res_cidfont, PRT_CID_PROLOG_VERSION))
-+	if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
- 	    return FALSE;
-     }
- #endif
-@@ -2968,7 +2993,7 @@
- #endif
- 	p_encoding = enc_skip(p_penc);
- 	if (*p_encoding == NUL
--		|| !prt_find_resource((char *)p_encoding, &res_encoding))
-+		|| !prt_find_resource((char *)p_encoding, res_encoding))
- 	{
- 	    /* 'printencoding' not set or not supported - find alternate */
- #ifdef FEAT_MBYTE
-@@ -2977,13 +3002,13 @@
- 	    p_encoding = enc_skip(p_enc);
- 	    props = enc_canon_props(p_encoding);
- 	    if (!(props & ENC_8BIT)
--		    || !prt_find_resource((char *)p_encoding, &res_encoding))
-+		    || !prt_find_resource((char *)p_encoding, res_encoding))
- 		/* 8-bit 'encoding' is not supported */
- #endif
- 		{
- 		/* Use latin1 as default printing encoding */
- 		p_encoding = (char_u *)"latin1";
--		if (!prt_find_resource((char *)p_encoding, &res_encoding))
-+		if (!prt_find_resource((char *)p_encoding, res_encoding))
- 		{
- 		    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
- 			    p_encoding);
-@@ -2991,7 +3016,7 @@
- 		}
- 	    }
- 	}
--	if (!prt_open_resource(&res_encoding))
-+	if (!prt_open_resource(res_encoding))
- 	    return FALSE;
- 	/* For the moment there are no checks on encoding resource files to
- 	 * perform */
-@@ -3005,13 +3030,13 @@
- 	if (prt_use_courier)
- 	{
- 	    /* Include ASCII range encoding vector */
--	    if (!prt_find_resource(prt_ascii_encoding, &res_encoding))
-+	    if (!prt_find_resource(prt_ascii_encoding, res_encoding))
- 	    {
- 		EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
- 							  prt_ascii_encoding);
- 		return FALSE;
- 	    }
--	    if (!prt_open_resource(&res_encoding))
-+	    if (!prt_open_resource(res_encoding))
- 		return FALSE;
- 	    /* For the moment there are no checks on encoding resource files to
- 	     * perform */
-@@ -3034,44 +3059,44 @@
-     if (prt_out_mbyte && prt_custom_cmap)
-     {
- 	/* Find user supplied CMap */
--	if (!prt_find_resource(prt_cmap, &res_cmap))
-+	if (!prt_find_resource(prt_cmap, res_cmap))
- 	{
- 	    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
- 								    prt_cmap);
- 	    return FALSE;
- 	}
--	if (!prt_open_resource(&res_cmap))
-+	if (!prt_open_resource(res_cmap))
- 	    return FALSE;
-     }
- #endif
- 
-     /* List resources supplied */
--    STRCPY(buffer, res_prolog.title);
-+    STRCPY(buffer, res_prolog->title);
-     STRCAT(buffer, " ");
--    STRCAT(buffer, res_prolog.version);
-+    STRCAT(buffer, res_prolog->version);
-     prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
- #ifdef FEAT_MBYTE
-     if (prt_out_mbyte)
-     {
--	STRCPY(buffer, res_cidfont.title);
-+	STRCPY(buffer, res_cidfont->title);
- 	STRCAT(buffer, " ");
--	STRCAT(buffer, res_cidfont.version);
-+	STRCAT(buffer, res_cidfont->version);
- 	prt_dsc_resources(NULL, "procset", buffer);
- 
- 	if (prt_custom_cmap)
- 	{
--	    STRCPY(buffer, res_cmap.title);
-+	    STRCPY(buffer, res_cmap->title);
- 	    STRCAT(buffer, " ");
--	    STRCAT(buffer, res_cmap.version);
-+	    STRCAT(buffer, res_cmap->version);
- 	    prt_dsc_resources(NULL, "cmap", buffer);
- 	}
-     }
-     if (!prt_out_mbyte || prt_use_courier)
- #endif
-     {
--	STRCPY(buffer, res_encoding.title);
-+	STRCPY(buffer, res_encoding->title);
- 	STRCAT(buffer, " ");
--	STRCAT(buffer, res_encoding.version);
-+	STRCAT(buffer, res_encoding->version);
- 	prt_dsc_resources(NULL, "encoding", buffer);
-     }
-     prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
-@@ -3114,15 +3139,15 @@
-     prt_dsc_noarg("BeginProlog");
- 
-     /* Add required procsets - NOTE: order is important! */
--    if (!prt_add_resource(&res_prolog))
-+    if (!prt_add_resource(res_prolog))
- 	return FALSE;
- #ifdef FEAT_MBYTE
-     if (prt_out_mbyte)
-     {
- 	/* Add CID font procset, and any user supplied CMap */
--	if (!prt_add_resource(&res_cidfont))
-+	if (!prt_add_resource(res_cidfont))
- 	    return FALSE;
--	if (prt_custom_cmap && !prt_add_resource(&res_cmap))
-+	if (prt_custom_cmap && !prt_add_resource(res_cmap))
- 	    return FALSE;
-     }
- #endif
-@@ -3132,7 +3157,7 @@
- #endif
- 	/* There will be only one Roman font encoding to be included in the PS
- 	 * file. */
--	if (!prt_add_resource(&res_encoding))
-+	if (!prt_add_resource(res_encoding))
- 	    return FALSE;
- 
-     prt_dsc_noarg("EndProlog");
-@@ -3248,7 +3273,17 @@
-     prt_dsc_noarg("EndSetup");
- 
-     /* Fail if any problems writing out to the PS file */
--    return !prt_file_error;
-+    retval = !prt_file_error;
-+
-+theend:
-+    vim_free(res_prolog);
-+    vim_free(res_encoding);
-+#ifdef FEAT_MBYTE
-+    vim_free(res_cidfont);
-+    vim_free(res_cmap);
-+#endif
-+
-+    return retval;
- }
- 
-     void
-diff -Naur vim73.orig/src/if_cscope.c vim73/src/if_cscope.c
---- vim73.orig/src/if_cscope.c	2010-07-25 14:32:31.000000000 +0000
-+++ vim73/src/if_cscope.c	2012-11-01 20:35:42.000000000 +0000
-@@ -13,16 +13,10 @@
- 
- #if defined(FEAT_CSCOPE) || defined(PROTO)
- 
--#include <string.h>
--#include <errno.h>
--#include <assert.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #if defined(UNIX)
- # include <sys/wait.h>
--#else
--    /* not UNIX, must be WIN32 */
--# include "vimio.h"
- #endif
- #include "if_cscope.h"
- 
-@@ -1274,9 +1268,7 @@
- 		{
- 		    win_split(postponed_split > 0 ? postponed_split : 0,
- 						       postponed_split_flags);
--#  ifdef FEAT_SCROLLBIND
--		    curwin->w_p_scb = FALSE;
--#  endif
-+		    RESET_BINDING(curwin);
- 		    postponed_split = 0;
- 		}
- # endif
-@@ -1353,7 +1345,7 @@
- 		       "       g: Find this definition\n"
- 		       "       i: Find files #including this file\n"
- 		       "       s: Find this C symbol\n"
--		       "       t: Find assignments to\n"));
-+		       "       t: Find this text string\n"));
- 
- 	cmdp++;
-     }
-@@ -1420,17 +1412,15 @@
- {
-     short	i, j;
- #ifndef UNIX
--    HANDLE	hFile;
-     BY_HANDLE_FILE_INFORMATION bhfi;
- 
--    vim_memset(&bhfi, 0, sizeof(bhfi));
-     /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
-     if (!mch_windows95())
-     {
--	hFile = CreateFile(fname, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
--						 FILE_ATTRIBUTE_NORMAL, NULL);
--	if (hFile == INVALID_HANDLE_VALUE)
-+	switch (win32_fileinfo(fname, &bhfi))
- 	{
-+	case FILEINFO_ENC_FAIL:		/* enc_to_utf16() failed */
-+	case FILEINFO_READ_FAIL:	/* CreateFile() failed */
- 	    if (p_csverbose)
- 	    {
- 		char *cant_msg = _("E625: cannot open cscope database: %s");
-@@ -1446,15 +1436,12 @@
- 		    (void)EMSG2(cant_msg, fname);
- 	    }
- 	    return -1;
--	}
--	if (!GetFileInformationByHandle(hFile, &bhfi))
--	{
--	    CloseHandle(hFile);
-+
-+	case FILEINFO_INFO_FAIL:    /* GetFileInformationByHandle() failed */
- 	    if (p_csverbose)
- 		(void)EMSG(_("E626: cannot get cscope database information"));
- 	    return -1;
- 	}
--	CloseHandle(hFile);
-     }
- #endif
- 
-@@ -1664,7 +1651,7 @@
- /*
-  * PRIVATE: cs_make_vim_style_matches
-  *
-- * convert the cscope output into into a ctags style entry (as might be found
-+ * convert the cscope output into a ctags style entry (as might be found
-  * in a ctags tags file).  there's one catch though: cscope doesn't tell you
-  * the type of the tag you are looking for.  for example, in Darren Hiebert's
-  * ctags (the one that comes with vim), #define's use a line number to find the
-@@ -2484,42 +2471,61 @@
-  */
-     static char *
- cs_resolve_file(i, name)
--    int i;
-+    int  i;
-     char *name;
- {
--    char *fullname;
--    int len;
-+    char	*fullname;
-+    int		len;
-+    char_u	*csdir = NULL;
- 
-     /*
--     * ppath is freed when we destroy the cscope connection.
--     * fullname is freed after cs_make_vim_style_matches, after it's been
--     * copied into the tag buffer used by vim
-+     * Ppath is freed when we destroy the cscope connection.
-+     * Fullname is freed after cs_make_vim_style_matches, after it's been
-+     * copied into the tag buffer used by Vim.
-      */
-     len = (int)(strlen(name) + 2);
-     if (csinfo[i].ppath != NULL)
- 	len += (int)strlen(csinfo[i].ppath);
-+    else if (p_csre && csinfo[i].fname != NULL)
-+    {
-+	/* If 'cscoperelative' is set and ppath is not set, use cscope.out
-+	 * path in path resolution. */
-+	csdir = alloc(MAXPATHL);
-+	if (csdir != NULL)
-+	{
-+	    vim_strncpy(csdir, (char_u *)csinfo[i].fname,
-+		    gettail((char_u *)csinfo[i].fname) - 1 - (char_u *)csinfo[i].fname);
-+	    len += (int)STRLEN(csdir);
-+	}
-+    }
- 
-     if ((fullname = (char *)alloc(len)) == NULL)
- 	return NULL;
- 
--    /*
--     * note/example: this won't work if the cscope output already starts
-+    /* Note/example: this won't work if the cscope output already starts
-      * "../.." and the prefix path is also "../..".  if something like this
--     * happens, you are screwed up and need to fix how you're using cscope.
--     */
--    if (csinfo[i].ppath != NULL &&
--	(strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
--	(name[0] != '/')
-+     * happens, you are screwed up and need to fix how you're using cscope. */
-+    if (csinfo[i].ppath != NULL
-+	    && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
-+	    && (name[0] != '/')
- #ifdef WIN32
--	&& name[0] != '\\' && name[1] != ':'
-+	    && name[0] != '\\' && name[1] != ':'
- #endif
--	)
-+       )
- 	(void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
-+    else if (csdir != NULL && csinfo[i].fname != NULL && STRLEN(csdir) > 0)
-+    {
-+	/* Check for csdir to be non empty to avoid empty path concatenated to
-+	 * cscope output. TODO: avoid the unnecessary alloc/free of fullname. */
-+	vim_free(fullname);
-+	fullname = (char *)concat_fnames(csdir, (char_u *)name, TRUE);
-+    }
-     else
- 	(void)sprintf(fullname, "%s", name);
- 
-+    vim_free(csdir);
-     return fullname;
--} /* cs_resolve_file */
-+}
- 
- 
- /*
-diff -Naur vim73.orig/src/if_lua.c vim73/src/if_lua.c
---- vim73.orig/src/if_lua.c	2010-08-12 20:12:04.000000000 +0000
-+++ vim73/src/if_lua.c	2012-11-01 20:35:48.000000000 +0000
-@@ -1,4 +1,4 @@
--/* vi:set ts=8 sts=4 sw=4:
-+/* vi:set ts=8 sts=4 sw=4 noet:
-  *
-  * VIM - Vi IMproved	by Bram Moolenaar
-  *
-@@ -9,12 +9,11 @@
-  * See README.txt for an overview of the Vim source code.
-  */
- 
--#include <stdio.h>
--#include <string.h>
-+#include "vim.h"
-+
- #include <lua.h>
- #include <lualib.h>
- #include <lauxlib.h>
--#include "vim.h"
- 
- /* Only do the following when the feature is enabled.  Needed for "make
-  * depend". */
-@@ -22,15 +21,33 @@
- 
- #define LUAVIM_CHUNKNAME "vim chunk"
- #define LUAVIM_NAME "vim"
-+#define LUAVIM_EVALNAME "luaeval"
-+#define LUAVIM_EVALHEADER "local _A=select(1,...) return "
- 
- typedef buf_T *luaV_Buffer;
- typedef win_T *luaV_Window;
-+typedef dict_T *luaV_Dict;
-+typedef list_T *luaV_List;
- typedef void (*msgfunc_T)(char_u *);
- 
-+static const char LUAVIM_DICT[] = "dict";
-+static const char LUAVIM_LIST[] = "list";
- static const char LUAVIM_BUFFER[] = "buffer";
- static const char LUAVIM_WINDOW[] = "window";
- static const char LUAVIM_FREE[] = "luaV_free";
-+static const char LUAVIM_LUAEVAL[] = "luaV_luaeval";
-+static const char LUAVIM_SETREF[] = "luaV_setref";
- 
-+/* most functions are closures with a cache table as first upvalue;
-+ * get/setudata manage references to vim userdata in cache table through
-+ * object pointers (light userdata) */
-+#define luaV_getudata(L, v) \
-+    lua_pushlightuserdata((L), (void *) (v)); \
-+    lua_rawget((L), lua_upvalueindex(1))
-+#define luaV_setudata(L, v) \
-+    lua_pushlightuserdata((L), (void *) (v)); \
-+    lua_pushvalue((L), -2); \
-+    lua_rawset((L), lua_upvalueindex(1))
- #define luaV_getfield(L, s) \
-     lua_pushlightuserdata((L), (void *)(s)); \
-     lua_rawget((L), LUA_REGISTRYINDEX)
-@@ -39,6 +56,15 @@
- #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
- #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
- 
-+static luaV_List *luaV_pushlist (lua_State *L, list_T *lis);
-+static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic);
-+
-+#if LUA_VERSION_NUM <= 501
-+#define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
-+#define luaL_typeerror luaL_typerror
-+#else
-+#define luaV_openlib luaL_setfuncs
-+#endif
- 
- #ifdef DYNAMIC_LUA
- 
-@@ -49,38 +75,61 @@
- # define symbol_from_dll dlsym
- # define close_dll dlclose
- #else
--# define load_dll LoadLibrary
-+# define load_dll vimLoadLib
- # define symbol_from_dll GetProcAddress
- # define close_dll FreeLibrary
- #endif
- 
- /* lauxlib */
-+#if LUA_VERSION_NUM <= 501
- #define luaL_register dll_luaL_register
-+#define luaL_prepbuffer dll_luaL_prepbuffer
-+#define luaL_openlib dll_luaL_openlib
- #define luaL_typerror dll_luaL_typerror
-+#define luaL_loadfile dll_luaL_loadfile
-+#define luaL_loadbuffer dll_luaL_loadbuffer
-+#else
-+#define luaL_prepbuffsize dll_luaL_prepbuffsize
-+#define luaL_setfuncs dll_luaL_setfuncs
-+#define luaL_loadfilex dll_luaL_loadfilex
-+#define luaL_loadbufferx dll_luaL_loadbufferx
-+#define luaL_argerror dll_luaL_argerror
-+#endif
-+#define luaL_checkany dll_luaL_checkany
- #define luaL_checklstring dll_luaL_checklstring
- #define luaL_checkinteger dll_luaL_checkinteger
- #define luaL_optinteger dll_luaL_optinteger
- #define luaL_checktype dll_luaL_checktype
- #define luaL_error dll_luaL_error
--#define luaL_loadfile dll_luaL_loadfile
--#define luaL_loadbuffer dll_luaL_loadbuffer
- #define luaL_newstate dll_luaL_newstate
- #define luaL_buffinit dll_luaL_buffinit
--#define luaL_prepbuffer dll_luaL_prepbuffer
- #define luaL_addlstring dll_luaL_addlstring
- #define luaL_pushresult dll_luaL_pushresult
- /* lua */
-+#if LUA_VERSION_NUM <= 501
-+#define lua_tonumber dll_lua_tonumber
-+#define lua_tointeger dll_lua_tointeger
-+#define lua_call dll_lua_call
-+#define lua_pcall dll_lua_pcall
-+#else
-+#define lua_tonumberx dll_lua_tonumberx
-+#define lua_tointegerx dll_lua_tointegerx
-+#define lua_callk dll_lua_callk
-+#define lua_pcallk dll_lua_pcallk
-+#define lua_getglobal dll_lua_getglobal
-+#define lua_setglobal dll_lua_setglobal
-+#endif
-+#define lua_typename dll_lua_typename
- #define lua_close dll_lua_close
- #define lua_gettop dll_lua_gettop
- #define lua_settop dll_lua_settop
- #define lua_pushvalue dll_lua_pushvalue
- #define lua_replace dll_lua_replace
-+#define lua_remove dll_lua_remove
- #define lua_isnumber dll_lua_isnumber
- #define lua_isstring dll_lua_isstring
- #define lua_type dll_lua_type
- #define lua_rawequal dll_lua_rawequal
--#define lua_tonumber dll_lua_tonumber
--#define lua_tointeger dll_lua_tointeger
- #define lua_toboolean dll_lua_toboolean
- #define lua_tolstring dll_lua_tolstring
- #define lua_touserdata dll_lua_touserdata
-@@ -95,6 +144,7 @@
- #define lua_pushlightuserdata dll_lua_pushlightuserdata
- #define lua_getfield dll_lua_getfield
- #define lua_rawget dll_lua_rawget
-+#define lua_rawgeti dll_lua_rawgeti
- #define lua_createtable dll_lua_createtable
- #define lua_newuserdata dll_lua_newuserdata
- #define lua_getmetatable dll_lua_getmetatable
-@@ -102,8 +152,7 @@
- #define lua_rawset dll_lua_rawset
- #define lua_rawseti dll_lua_rawseti
- #define lua_setmetatable dll_lua_setmetatable
--#define lua_call dll_lua_call
--#define lua_pcall dll_lua_pcall
-+#define lua_next dll_lua_next
- /* libs */
- #define luaopen_base dll_luaopen_base
- #define luaopen_table dll_luaopen_table
-@@ -116,32 +165,57 @@
- #define luaL_openlibs dll_luaL_openlibs
- 
- /* lauxlib */
-+#if LUA_VERSION_NUM <= 501
- void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
-+char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
-+void (*dll_luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup);
- int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
-+int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
-+int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
-+#else
-+char *(*dll_luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
-+void (*dll_luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
-+int (*dll_luaL_loadfilex) (lua_State *L, const char *filename, const char *mode);
-+int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
-+int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
-+#endif
-+void (*dll_luaL_checkany) (lua_State *L, int narg);
- const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
- lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
- lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
- void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
- int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
--int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
--int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
- lua_State *(*dll_luaL_newstate) (void);
- void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
--char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
- void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
- void (*dll_luaL_pushresult) (luaL_Buffer *B);
- /* lua */
-+#if LUA_VERSION_NUM <= 501
-+lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
-+lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
-+void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
-+int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
-+#else
-+lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
-+lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
-+void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
-+	lua_CFunction k);
-+int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
-+	int ctx, lua_CFunction k);
-+void (*dll_lua_getglobal) (lua_State *L, const char *var);
-+void (*dll_lua_setglobal) (lua_State *L, const char *var);
-+#endif
-+const char *(*dll_lua_typename) (lua_State *L, int tp);
- void       (*dll_lua_close) (lua_State *L);
- int (*dll_lua_gettop) (lua_State *L);
- void (*dll_lua_settop) (lua_State *L, int idx);
- void (*dll_lua_pushvalue) (lua_State *L, int idx);
- void (*dll_lua_replace) (lua_State *L, int idx);
-+void (*dll_lua_remove) (lua_State *L, int idx);
- int (*dll_lua_isnumber) (lua_State *L, int idx);
- int (*dll_lua_isstring) (lua_State *L, int idx);
- int (*dll_lua_type) (lua_State *L, int idx);
- int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
--lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
--lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
- int (*dll_lua_toboolean) (lua_State *L, int idx);
- const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
- void *(*dll_lua_touserdata) (lua_State *L, int idx);
-@@ -156,6 +230,7 @@
- void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
- void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
- void (*dll_lua_rawget) (lua_State *L, int idx);
-+void (*dll_lua_rawgeti) (lua_State *L, int idx, int n);
- void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
- void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
- int (*dll_lua_getmetatable) (lua_State *L, int objindex);
-@@ -163,8 +238,7 @@
- void (*dll_lua_rawset) (lua_State *L, int idx);
- void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
- int (*dll_lua_setmetatable) (lua_State *L, int objindex);
--void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
--int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
-+int (*dll_lua_next) (lua_State *L, int idx);
- /* libs */
- int (*dll_luaopen_base) (lua_State *L);
- int (*dll_luaopen_table) (lua_State *L);
-@@ -184,32 +258,55 @@
- 
- static const luaV_Reg luaV_dll[] = {
-     /* lauxlib */
-+#if LUA_VERSION_NUM <= 501
-     {"luaL_register", (luaV_function) &dll_luaL_register},
-+    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
-+    {"luaL_openlib", (luaV_function) &dll_luaL_openlib},
-     {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
-+    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
-+    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
-+#else
-+    {"luaL_prepbuffsize", (luaV_function) &dll_luaL_prepbuffsize},
-+    {"luaL_setfuncs", (luaV_function) &dll_luaL_setfuncs},
-+    {"luaL_loadfilex", (luaV_function) &dll_luaL_loadfilex},
-+    {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
-+    {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
-+#endif
-+    {"luaL_checkany", (luaV_function) &dll_luaL_checkany},
-     {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
-     {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
-     {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
-     {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
-     {"luaL_error", (luaV_function) &dll_luaL_error},
--    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
--    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
-     {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
-     {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
--    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
-     {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
-     {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
-     /* lua */
-+#if LUA_VERSION_NUM <= 501
-+    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
-+    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
-+    {"lua_call", (luaV_function) &dll_lua_call},
-+    {"lua_pcall", (luaV_function) &dll_lua_pcall},
-+#else
-+    {"lua_tonumberx", (luaV_function) &dll_lua_tonumberx},
-+    {"lua_tointegerx", (luaV_function) &dll_lua_tointegerx},
-+    {"lua_callk", (luaV_function) &dll_lua_callk},
-+    {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
-+    {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
-+    {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
-+#endif
-+    {"lua_typename", (luaV_function) &dll_lua_typename},
-     {"lua_close", (luaV_function) &dll_lua_close},
-     {"lua_gettop", (luaV_function) &dll_lua_gettop},
-     {"lua_settop", (luaV_function) &dll_lua_settop},
-     {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
-     {"lua_replace", (luaV_function) &dll_lua_replace},
-+    {"lua_remove", (luaV_function) &dll_lua_remove},
-     {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
-     {"lua_isstring", (luaV_function) &dll_lua_isstring},
-     {"lua_type", (luaV_function) &dll_lua_type},
-     {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
--    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
--    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
-     {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
-     {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
-     {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
-@@ -224,6 +321,7 @@
-     {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
-     {"lua_getfield", (luaV_function) &dll_lua_getfield},
-     {"lua_rawget", (luaV_function) &dll_lua_rawget},
-+    {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
-     {"lua_createtable", (luaV_function) &dll_lua_createtable},
-     {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
-     {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
-@@ -231,8 +329,7 @@
-     {"lua_rawset", (luaV_function) &dll_lua_rawset},
-     {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
-     {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
--    {"lua_call", (luaV_function) &dll_lua_call},
--    {"lua_pcall", (luaV_function) &dll_lua_pcall},
-+    {"lua_next", (luaV_function) &dll_lua_next},
-     /* libs */
-     {"luaopen_base", (luaV_function) &dll_luaopen_base},
-     {"luaopen_table", (luaV_function) &dll_luaopen_table},
-@@ -292,6 +389,16 @@
- 
- #endif /* DYNAMIC_LUA */
- 
-+#if LUA_VERSION_NUM > 501
-+    static int
-+luaL_typeerror (lua_State *L, int narg, const char *tname)
-+{
-+    const char *msg = lua_pushfstring(L, "%s expected, got %s",
-+	    tname, luaL_typename(L, narg));
-+    return luaL_argerror(L, narg, msg);
-+}
-+#endif
-+
- 
- /* =======   Internal   ======= */
- 
-@@ -325,21 +432,40 @@
- }
- 
-     static void *
-+luaV_checkcache(lua_State *L, void *p)
-+{
-+    luaV_getudata(L, p);
-+    if (lua_isnil(L, -1)) luaL_error(L, "invalid object");
-+    lua_pop(L, 1);
-+    return p;
-+}
-+
-+#define luaV_unbox(L,luatyp,ud) (*((luatyp *) lua_touserdata((L),(ud))))
-+
-+#define luaV_checkvalid(L,luatyp,ud) \
-+    luaV_checkcache((L), (void *) luaV_unbox((L),luatyp,(ud)))
-+
-+    static void *
- luaV_checkudata(lua_State *L, int ud, const char *tname)
- {
-     void *p = luaV_toudata(L, ud, tname);
--    if (p == NULL) luaL_typerror(L, ud, tname);
-+    if (p == NULL) luaL_typeerror(L, ud, tname);
-     return p;
- }
- 
-     static void
- luaV_pushtypval(lua_State *L, typval_T *tv)
- {
--    if (tv == NULL) luaL_error(L, "null type");
-+    if (tv == NULL)
-+    {
-+	lua_pushnil(L);
-+	return;
-+    }
-     switch (tv->v_type)
-     {
- 	case VAR_STRING:
--	    lua_pushstring(L, (char *) tv->vval.v_string);
-+	    lua_pushstring(L, tv->vval.v_string == NULL
-+					    ? "" : (char *)tv->vval.v_string);
- 	    break;
- 	case VAR_NUMBER:
- 	    lua_pushinteger(L, (int) tv->vval.v_number);
-@@ -349,68 +475,70 @@
- 	    lua_pushnumber(L, (lua_Number) tv->vval.v_float);
- 	    break;
- #endif
--	case VAR_LIST: {
--	    list_T *l = tv->vval.v_list;
-+	case VAR_LIST:
-+	    luaV_pushlist(L, tv->vval.v_list);
-+	    break;
-+	case VAR_DICT:
-+	    luaV_pushdict(L, tv->vval.v_dict);
-+	    break;
-+	default:
-+	    lua_pushnil(L);
-+    }
-+}
- 
--	    if (l != NULL)
-+/* converts lua value at 'pos' to typval 'tv' */
-+    static void
-+luaV_totypval (lua_State *L, int pos, typval_T *tv)
-+{
-+    switch(lua_type(L, pos)) {
-+	case LUA_TBOOLEAN:
-+	    tv->v_type = VAR_NUMBER;
-+	    tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
-+	    break;
-+	case LUA_TSTRING:
-+	    tv->v_type = VAR_STRING;
-+	    tv->vval.v_string = vim_strsave((char_u *) lua_tostring(L, pos));
-+	    break;
-+	case LUA_TNUMBER:
-+#ifdef FEAT_FLOAT
-+	    tv->v_type = VAR_FLOAT;
-+	    tv->vval.v_float = (float_T) lua_tonumber(L, pos);
-+#else
-+	    tv->v_type = VAR_NUMBER;
-+	    tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
-+#endif
-+	    break;
-+	case LUA_TUSERDATA: {
-+	    void *p = lua_touserdata(L, pos);
-+	    if (lua_getmetatable(L, pos)) /* has metatable? */
- 	    {
--		/* check cache */
--		lua_pushlightuserdata(L, (void *) l);
--		lua_rawget(L, LUA_ENVIRONINDEX);
--		if (lua_isnil(L, -1)) /* not interned? */
-+		/* check list */
-+		luaV_getfield(L, LUAVIM_LIST);
-+		if (lua_rawequal(L, -1, -2))
- 		{
--		    listitem_T *li;
--		    int n = 0;
--		    lua_pop(L, 1); /* nil */
--		    lua_newtable(L);
--		    lua_pushlightuserdata(L, (void *) l);
--		    lua_pushvalue(L, -2);
--		    lua_rawset(L, LUA_ENVIRONINDEX);
--		    for (li = l->lv_first; li != NULL; li = li->li_next)
--		    {
--			luaV_pushtypval(L, &li->li_tv);
--			lua_rawseti(L, -2, ++n);
--		    }
-+		    tv->v_type = VAR_LIST;
-+		    tv->vval.v_list = *((luaV_List *) p);
-+		    ++tv->vval.v_list->lv_refcount;
-+		    lua_pop(L, 2); /* MTs */
-+		    return;
- 		}
--	    }
--	    else lua_pushnil(L);
--	    break;
--		       }
--	case VAR_DICT: {
--	    dict_T *d = tv->vval.v_dict;
--
--	    if (d != NULL)
--	    {
--		/* check cache */
--		lua_pushlightuserdata(L, (void *) d);
--		lua_rawget(L, LUA_ENVIRONINDEX);
--		if (lua_isnil(L, -1)) /* not interned? */
-+		/* check dict */
-+		luaV_getfield(L, LUAVIM_DICT);
-+		if (lua_rawequal(L, -1, -3))
- 		{
--		    hashtab_T *ht = &d->dv_hashtab;
--		    hashitem_T *hi;
--		    int n = ht->ht_used; /* remaining items */
--		    lua_pop(L, 1); /* nil */
--		    lua_newtable(L);
--		    lua_pushlightuserdata(L, (void *) d);
--		    lua_pushvalue(L, -2);
--		    lua_rawset(L, LUA_ENVIRONINDEX);
--		    for (hi = ht->ht_array; n > 0; hi++)
--		    {
--			if (!HASHITEM_EMPTY(hi))
--			{
--			    dictitem_T *di = dict_lookup(hi);
--			    luaV_pushtypval(L, &di->di_tv);
--			    lua_setfield(L, -2, (char *) hi->hi_key);
--			    n--;
--			}
--		    }
-+		    tv->v_type = VAR_DICT;
-+		    tv->vval.v_dict = *((luaV_Dict *) p);
-+		    ++tv->vval.v_dict->dv_refcount;
-+		    lua_pop(L, 3); /* MTs */
-+		    return;
- 		}
-+		lua_pop(L, 3); /* MTs */
- 	    }
--	    else lua_pushnil(L);
- 	    break;
- 	}
- 	default:
--	    luaL_error(L, "invalid type");
-+	    tv->v_type = VAR_NUMBER;
-+	    tv->vval.v_number = 0;
-     }
- }
- 
-@@ -479,89 +607,372 @@
-     lua_pop(L, 2); /* original and modified strings */
- }
- 
-+#define luaV_newtype(typ,tname,luatyp,luatname) \
-+	static luatyp * \
-+    luaV_new##tname (lua_State *L, typ *obj) \
-+    { \
-+	luatyp *o = (luatyp *) lua_newuserdata(L, sizeof(luatyp)); \
-+	*o = obj; \
-+	luaV_setudata(L, obj); /* cache[obj] = udata */ \
-+	luaV_getfield(L, luatname); \
-+	lua_setmetatable(L, -2); \
-+	return o; \
-+    }
-+
-+#define luaV_pushtype(typ,tname,luatyp) \
-+	static luatyp * \
-+    luaV_push##tname (lua_State *L, typ *obj) \
-+    { \
-+	luatyp *o = NULL; \
-+	if (obj == NULL) \
-+	    lua_pushnil(L); \
-+	else { \
-+	    luaV_getudata(L, obj); \
-+	    if (lua_isnil(L, -1)) /* not interned? */ \
-+	    { \
-+		lua_pop(L, 1); \
-+		o = luaV_new##tname(L, obj); \
-+	    } \
-+	    else \
-+		o = (luatyp *) lua_touserdata(L, -1); \
-+	} \
-+	return o; \
-+    }
-+
-+#define luaV_type_tostring(tname,luatname) \
-+	static int \
-+    luaV_##tname##_tostring (lua_State *L) \
-+    { \
-+	lua_pushfstring(L, "%s: %p", luatname, lua_touserdata(L, 1)); \
-+	return 1; \
-+    }
-+
-+/* =======   List type   ======= */
-+
-+    static luaV_List *
-+luaV_newlist (lua_State *L, list_T *lis)
-+{
-+    luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
-+    *l = lis;
-+    lis->lv_refcount++; /* reference in Lua */
-+    luaV_setudata(L, lis); /* cache[lis] = udata */
-+    luaV_getfield(L, LUAVIM_LIST);
-+    lua_setmetatable(L, -2);
-+    return l;
-+}
-+
-+luaV_pushtype(list_T, list, luaV_List)
-+luaV_type_tostring(list, LUAVIM_LIST)
- 
--/* =======   Buffer type   ======= */
-+    static int
-+luaV_list_gc (lua_State *L)
-+{
-+    list_unref(luaV_unbox(L, luaV_List, 1));
-+    return 0;
-+}
- 
--    static luaV_Buffer *
--luaV_newbuffer(lua_State *L, buf_T *buf)
-+    static int
-+luaV_list_len (lua_State *L)
- {
--    luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
--    *b = buf;
--    lua_pushlightuserdata(L, (void *) buf);
--    lua_pushvalue(L, -2);
--    lua_rawset(L, LUA_ENVIRONINDEX); /* env[buf] = udata */
--    /* to avoid GC, store as key in env */
--    lua_pushvalue(L, -1);
--    lua_pushboolean(L, 1);
--    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
--    /* set metatable */
--    luaV_getfield(L, LUAVIM_BUFFER);
--    lua_setmetatable(L, -2);
--    return b;
-+    list_T *l = luaV_unbox(L, luaV_List, 1);
-+    lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
-+    return 1;
- }
- 
--    static luaV_Buffer *
--luaV_pushbuffer (lua_State *L, buf_T *buf)
-+    static int
-+luaV_list_iter (lua_State *L)
- {
--    luaV_Buffer *b = NULL;
--    if (buf == NULL)
--	lua_pushnil(L);
--    else {
--	lua_pushlightuserdata(L, (void *) buf);
--	lua_rawget(L, LUA_ENVIRONINDEX);
--	if (lua_isnil(L, -1)) /* not interned? */
-+    listitem_T *li = (listitem_T *) lua_touserdata(L, lua_upvalueindex(2));
-+    if (li == NULL) return 0;
-+    luaV_pushtypval(L, &li->li_tv);
-+    lua_pushlightuserdata(L, (void *) li->li_next);
-+    lua_replace(L, lua_upvalueindex(2));
-+    return 1;
-+}
-+
-+    static int
-+luaV_list_call (lua_State *L)
-+{
-+    list_T *l = luaV_unbox(L, luaV_List, 1);
-+    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
-+    lua_pushlightuserdata(L, (void *) l->lv_first);
-+    lua_pushcclosure(L, luaV_list_iter, 2);
-+    return 1;
-+}
-+
-+    static int
-+luaV_list_index (lua_State *L)
-+{
-+    list_T *l = luaV_unbox(L, luaV_List, 1);
-+    if (lua_isnumber(L, 2)) /* list item? */
-+    {
-+	listitem_T *li = list_find(l, (long) luaL_checkinteger(L, 2));
-+	if (li == NULL)
-+	    lua_pushnil(L);
-+	else
-+	    luaV_pushtypval(L, &li->li_tv);
-+    }
-+    else if (lua_isstring(L, 2)) /* method? */
-+    {
-+	const char *s = lua_tostring(L, 2);
-+	if (strncmp(s, "add", 3) == 0
-+		|| strncmp(s, "insert", 6) == 0
-+		|| strncmp(s, "extend", 6) == 0)
- 	{
--	    lua_pop(L, 1);
--	    b = luaV_newbuffer(L, buf);
-+	    lua_getmetatable(L, 1);
-+	    lua_getfield(L, -1, s);
- 	}
- 	else
--	    b = (luaV_Buffer *) lua_touserdata(L, -1);
-+	    lua_pushnil(L);
-+    }
-+    else
-+	lua_pushnil(L);
-+    return 1;
-+}
-+
-+    static int
-+luaV_list_newindex (lua_State *L)
-+{
-+    list_T *l = luaV_unbox(L, luaV_List, 1);
-+    long n = (long) luaL_checkinteger(L, 2);
-+    listitem_T *li;
-+    if (l->lv_lock)
-+	luaL_error(L, "list is locked");
-+    li = list_find(l, n);
-+    if (li == NULL) return 0;
-+    if (lua_isnil(L, 3)) /* remove? */
-+    {
-+	list_remove(l, li, li);
-+	clear_tv(&li->li_tv);
-+	vim_free(li);
-     }
--    return b;
-+    else
-+    {
-+	typval_T v;
-+	luaV_totypval(L, 3, &v);
-+	clear_tv(&li->li_tv);
-+	copy_tv(&v, &li->li_tv);
-+    }
-+    return 0;
-+}
-+
-+    static int
-+luaV_list_add (lua_State *L)
-+{
-+    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
-+    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
-+    listitem_T *li;
-+    if (l->lv_lock)
-+	luaL_error(L, "list is locked");
-+    li = listitem_alloc();
-+    if (li != NULL)
-+    {
-+	typval_T v;
-+	lua_settop(L, 2);
-+	luaV_totypval(L, 2, &v);
-+	list_append_tv(l, &v);
-+    }
-+    lua_settop(L, 1);
-+    return 1;
-+}
-+
-+    static int
-+luaV_list_insert (lua_State *L)
-+{
-+    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
-+    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
-+    long pos = luaL_optlong(L, 3, 0);
-+    listitem_T *li = NULL;
-+    typval_T v;
-+    if (l->lv_lock)
-+	luaL_error(L, "list is locked");
-+    if (pos < l->lv_len)
-+    {
-+	li = list_find(l, pos);
-+	if (li == NULL)
-+	    luaL_error(L, "invalid position");
-+    }
-+    lua_settop(L, 2);
-+    luaV_totypval(L, 2, &v);
-+    list_insert_tv(l, &v, li);
-+    lua_settop(L, 1);
-+    return 1;
-+}
-+
-+static const luaL_Reg luaV_List_mt[] = {
-+    {"__tostring", luaV_list_tostring},
-+    {"__gc", luaV_list_gc},
-+    {"__len", luaV_list_len},
-+    {"__call", luaV_list_call},
-+    {"__index", luaV_list_index},
-+    {"__newindex", luaV_list_newindex},
-+    {"add", luaV_list_add},
-+    {"insert", luaV_list_insert},
-+    {NULL, NULL}
-+};
-+
-+
-+/* =======   Dict type   ======= */
-+
-+    static luaV_Dict *
-+luaV_newdict (lua_State *L, dict_T *dic)
-+{
-+    luaV_Dict *d = (luaV_Dict *) lua_newuserdata(L, sizeof(luaV_Dict));
-+    *d = dic;
-+    dic->dv_refcount++; /* reference in Lua */
-+    luaV_setudata(L, dic); /* cache[dic] = udata */
-+    luaV_getfield(L, LUAVIM_DICT);
-+    lua_setmetatable(L, -2);
-+    return d;
-+}
-+
-+luaV_pushtype(dict_T, dict, luaV_Dict)
-+luaV_type_tostring(dict, LUAVIM_DICT)
-+
-+    static int
-+luaV_dict_gc (lua_State *L)
-+{
-+    dict_unref(luaV_unbox(L, luaV_Dict, 1));
-+    return 0;
-+}
-+
-+    static int
-+luaV_dict_len (lua_State *L)
-+{
-+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
-+    lua_pushinteger(L, (d == NULL) ? 0 : (int) d->dv_hashtab.ht_used);
-+    return 1;
-+}
-+
-+    static int
-+luaV_dict_iter (lua_State *L)
-+{
-+    hashitem_T *hi = (hashitem_T *) lua_touserdata(L, lua_upvalueindex(2));
-+    int n = lua_tointeger(L, lua_upvalueindex(3));
-+    dictitem_T *di;
-+    if (n <= 0) return 0;
-+    while (HASHITEM_EMPTY(hi)) hi++;
-+    di = dict_lookup(hi);
-+    lua_pushstring(L, (char *) hi->hi_key);
-+    luaV_pushtypval(L, &di->di_tv);
-+    lua_pushlightuserdata(L, (void *) (hi + 1));
-+    lua_replace(L, lua_upvalueindex(2));
-+    lua_pushinteger(L, n - 1);
-+    lua_replace(L, lua_upvalueindex(3));
-+    return 2;
- }
- 
--/* Buffer metamethods */
-+    static int
-+luaV_dict_call (lua_State *L)
-+{
-+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
-+    hashtab_T *ht = &d->dv_hashtab;
-+    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
-+    lua_pushlightuserdata(L, (void *) ht->ht_array);
-+    lua_pushinteger(L, ht->ht_used); /* # remaining items */
-+    lua_pushcclosure(L, luaV_dict_iter, 3);
-+    return 1;
-+}
- 
-     static int
--luaV_buffer_tostring(lua_State *L)
-+luaV_dict_index (lua_State *L)
- {
--    lua_pushfstring(L, "%s: %p", LUAVIM_BUFFER, lua_touserdata(L, 1));
-+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
-+    char_u *key = (char_u *) luaL_checkstring(L, 2);
-+    dictitem_T *di = dict_find(d, key, -1);
-+    if (di == NULL)
-+	lua_pushnil(L);
-+    else
-+	luaV_pushtypval(L, &di->di_tv);
-     return 1;
- }
- 
-     static int
-+luaV_dict_newindex (lua_State *L)
-+{
-+    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
-+    char_u *key = (char_u *) luaL_checkstring(L, 2);
-+    dictitem_T *di;
-+    if (d->dv_lock)
-+	luaL_error(L, "dict is locked");
-+    di = dict_find(d, key, -1);
-+    if (di == NULL) /* non-existing key? */
-+    {
-+	if (lua_isnil(L, 3)) return 0;
-+	di = dictitem_alloc(key);
-+	if (di == NULL) return 0;
-+	if (dict_add(d, di) == FAIL)
-+	{
-+		vim_free(di);
-+		return 0;
-+	}
-+    }
-+    else
-+	clear_tv(&di->di_tv);
-+    if (lua_isnil(L, 3)) /* remove? */
-+    {
-+	hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
-+	hash_remove(&d->dv_hashtab, hi);
-+	dictitem_free(di);
-+    }
-+    else {
-+	typval_T v;
-+	luaV_totypval(L, 3, &v);
-+	copy_tv(&v, &di->di_tv);
-+    }
-+    return 0;
-+}
-+
-+static const luaL_Reg luaV_Dict_mt[] = {
-+    {"__tostring", luaV_dict_tostring},
-+    {"__gc", luaV_dict_gc},
-+    {"__len", luaV_dict_len},
-+    {"__call", luaV_dict_call},
-+    {"__index", luaV_dict_index},
-+    {"__newindex", luaV_dict_newindex},
-+    {NULL, NULL}
-+};
-+
-+
-+/* =======   Buffer type   ======= */
-+
-+luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER)
-+luaV_pushtype(buf_T, buffer, luaV_Buffer)
-+luaV_type_tostring(buffer, LUAVIM_BUFFER)
-+
-+    static int
- luaV_buffer_len(lua_State *L)
- {
--    luaV_Buffer *b = lua_touserdata(L, 1);
--    lua_pushinteger(L, (*b)->b_ml.ml_line_count);
-+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
-+    lua_pushinteger(L, b->b_ml.ml_line_count);
-     return 1;
- }
- 
-     static int
- luaV_buffer_call(lua_State *L)
- {
--    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
-+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
-     lua_settop(L, 1);
--    set_curbuf(*b, DOBUF_SPLIT);
-+    set_curbuf(b, DOBUF_SPLIT);
-     return 1;
- }
- 
-     static int
- luaV_buffer_index(lua_State *L)
- {
--    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
-+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
-     linenr_T n = (linenr_T) lua_tointeger(L, 2);
--    if (n > 0 && n <= (*b)->b_ml.ml_line_count)
--	luaV_pushline(L, *b, n);
-+    if (n > 0 && n <= b->b_ml.ml_line_count)
-+	luaV_pushline(L, b, n);
-     else if (lua_isstring(L, 2))
-     {
- 	const char *s = lua_tostring(L, 2);
- 	if (strncmp(s, "name", 4) == 0)
--	    lua_pushstring(L, (char *) (*b)->b_sfname);
-+	    lua_pushstring(L, (char *) b->b_sfname);
- 	else if (strncmp(s, "fname", 5) == 0)
--	    lua_pushstring(L, (char *) (*b)->b_ffname);
-+	    lua_pushstring(L, (char *) b->b_ffname);
- 	else if (strncmp(s, "number", 6) == 0)
--	    lua_pushinteger(L, (*b)->b_fnum);
-+	    lua_pushinteger(L, b->b_fnum);
- 	/* methods */
- 	else if (strncmp(s,   "insert", 6) == 0
- 		|| strncmp(s, "next", 4) == 0
-@@ -582,17 +993,17 @@
-     static int
- luaV_buffer_newindex(lua_State *L)
- {
--    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
-+    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
-     linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
- #ifdef HAVE_SANDBOX
-     luaV_checksandbox(L);
- #endif
--    if (n < 1 || n > (*b)->b_ml.ml_line_count)
-+    if (n < 1 || n > b->b_ml.ml_line_count)
- 	luaL_error(L, "invalid line number");
-     if (lua_isnil(L, 3)) /* delete line */
-     {
- 	buf_T *buf = curbuf;
--	curbuf = *b;
-+	curbuf = b;
- 	if (u_savedel(n, 1L) == FAIL)
- 	{
- 	    curbuf = buf;
-@@ -605,7 +1016,7 @@
- 	}
- 	else {
- 	    deleted_lines_mark(n, 1L);
--	    if (*b == curwin->w_buffer) /* fix cursor in current window? */
-+	    if (b == curwin->w_buffer) /* fix cursor in current window? */
- 	    {
- 		if (curwin->w_cursor.lnum >= n)
- 		{
-@@ -625,7 +1036,7 @@
-     else if (lua_isstring(L, 3)) /* update line */
-     {
- 	buf_T *buf = curbuf;
--	curbuf = *b;
-+	curbuf = b;
- 	if (u_savesub(n) == FAIL)
- 	{
- 	    curbuf = buf;
-@@ -638,7 +1049,7 @@
- 	}
- 	else changed_bytes(n, 0);
- 	curbuf = buf;
--	if (*b == curwin->w_buffer)
-+	if (b == curwin->w_buffer)
- 	    check_cursor_col();
-     }
-     else
-@@ -649,8 +1060,9 @@
-     static int
- luaV_buffer_insert(lua_State *L)
- {
--    luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
--    linenr_T last = (*b)->b_ml.ml_line_count;
-+    luaV_Buffer *lb = luaV_checkudata(L, 1, LUAVIM_BUFFER);
-+    buf_T *b = (buf_T *) luaV_checkcache(L, (void *) *lb);
-+    linenr_T last = b->b_ml.ml_line_count;
-     linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
-     buf_T *buf;
-     luaL_checktype(L, 2, LUA_TSTRING);
-@@ -662,7 +1074,7 @@
-     if (n > last) n = last;
-     /* insert */
-     buf = curbuf;
--    curbuf = *b;
-+    curbuf = b;
-     if (u_save(n, n + 1) == FAIL)
-     {
- 	curbuf = buf;
-@@ -684,7 +1096,8 @@
- luaV_buffer_next(lua_State *L)
- {
-     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
--    luaV_pushbuffer(L, (*b)->b_next);
-+    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
-+    luaV_pushbuffer(L, buf->b_next);
-     return 1;
- }
- 
-@@ -692,7 +1105,8 @@
- luaV_buffer_previous(lua_State *L)
- {
-     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
--    luaV_pushbuffer(L, (*b)->b_prev);
-+    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
-+    luaV_pushbuffer(L, buf->b_prev);
-     return 1;
- }
- 
-@@ -700,8 +1114,7 @@
- luaV_buffer_isvalid(lua_State *L)
- {
-     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
--    lua_pushlightuserdata(L, (void *) (*b));
--    lua_rawget(L, LUA_ENVIRONINDEX);
-+    luaV_getudata(L, *b);
-     lua_pushboolean(L, !lua_isnil(L, -1));
-     return 1;
- }
-@@ -722,78 +1135,36 @@
- 
- /* =======   Window type   ======= */
- 
--    static luaV_Window *
--luaV_newwindow(lua_State *L, win_T *win)
--{
--    luaV_Window *w = (luaV_Window *) lua_newuserdata(L, sizeof(luaV_Window));
--    *w = win;
--    lua_pushlightuserdata(L, (void *) win);
--    lua_pushvalue(L, -2);
--    lua_rawset(L, LUA_ENVIRONINDEX); /* env[win] = udata */
--    /* to avoid GC, store as key in env */
--    lua_pushvalue(L, -1);
--    lua_pushboolean(L, 1);
--    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
--    /* set metatable */
--    luaV_getfield(L, LUAVIM_WINDOW);
--    lua_setmetatable(L, -2);
--    return w;
--}
--
--    static luaV_Window *
--luaV_pushwindow(lua_State *L, win_T *win)
--{
--    luaV_Window *w = NULL;
--    if (win == NULL)
--	lua_pushnil(L);
--    else {
--	lua_pushlightuserdata(L, (void *) win);
--	lua_rawget(L, LUA_ENVIRONINDEX);
--	if (lua_isnil(L, -1)) /* not interned? */
--	{
--	    lua_pop(L, 1);
--	    w = luaV_newwindow(L, win);
--	}
--	else w = (luaV_Window *) lua_touserdata(L, -1);
--    }
--    return w;
--}
--
--/* Window metamethods */
--
--    static int
--luaV_window_tostring(lua_State *L)
--{
--    lua_pushfstring(L, "%s: %p", LUAVIM_WINDOW, lua_touserdata(L, 1));
--    return 1;
--}
-+luaV_newtype(win_T, window, luaV_Window, LUAVIM_WINDOW)
-+luaV_pushtype(win_T, window, luaV_Window)
-+luaV_type_tostring(window, LUAVIM_WINDOW)
- 
-     static int
- luaV_window_call(lua_State *L)
- {
--    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
-+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
-     lua_settop(L, 1);
--    win_goto(*w);
-+    win_goto(w);
-     return 1;
- }
- 
-     static int
- luaV_window_index(lua_State *L)
- {
--    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
-+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
-     const char *s = luaL_checkstring(L, 2);
-     if (strncmp(s, "buffer", 6) == 0)
--	luaV_pushbuffer(L, (*w)->w_buffer);
-+	luaV_pushbuffer(L, w->w_buffer);
-     else if (strncmp(s, "line", 4) == 0)
--	lua_pushinteger(L, (*w)->w_cursor.lnum);
-+	lua_pushinteger(L, w->w_cursor.lnum);
-     else if (strncmp(s, "col", 3) == 0)
--	lua_pushinteger(L, (*w)->w_cursor.col + 1);
-+	lua_pushinteger(L, w->w_cursor.col + 1);
- #ifdef FEAT_VERTSPLIT
-     else if (strncmp(s, "width", 5) == 0)
--	lua_pushinteger(L, W_WIDTH((*w)));
-+	lua_pushinteger(L, W_WIDTH(w));
- #endif
-     else if (strncmp(s, "height", 6) == 0)
--	lua_pushinteger(L, (*w)->w_height);
-+	lua_pushinteger(L, w->w_height);
-     /* methods */
-     else if (strncmp(s,   "next", 4) == 0
- 	    || strncmp(s, "previous", 8) == 0
-@@ -810,7 +1181,7 @@
-     static int
- luaV_window_newindex (lua_State *L)
- {
--    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
-+    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
-     const char *s = luaL_checkstring(L, 2);
-     int v = luaL_checkinteger(L, 3);
-     if (strncmp(s, "line", 4) == 0)
-@@ -818,9 +1189,9 @@
- #ifdef HAVE_SANDBOX
- 	luaV_checksandbox(L);
- #endif
--	if (v < 1 || v > (*w)->w_buffer->b_ml.ml_line_count)
-+	if (v < 1 || v > w->w_buffer->b_ml.ml_line_count)
- 	    luaL_error(L, "line out of range");
--	(*w)->w_cursor.lnum = v;
-+	w->w_cursor.lnum = v;
- 	update_screen(VALID);
-     }
-     else if (strncmp(s, "col", 3) == 0)
-@@ -828,7 +1199,7 @@
- #ifdef HAVE_SANDBOX
- 	luaV_checksandbox(L);
- #endif
--	(*w)->w_cursor.col = v - 1;
-+	w->w_cursor.col = v - 1;
- 	update_screen(VALID);
-     }
- #ifdef FEAT_VERTSPLIT
-@@ -838,7 +1209,7 @@
- #ifdef FEAT_GUI
- 	need_mouse_correct = TRUE;
- #endif
--	curwin = *w;
-+	curwin = w;
- 	win_setwidth(v);
- 	curwin = win;
-     }
-@@ -849,7 +1220,7 @@
- #ifdef FEAT_GUI
- 	need_mouse_correct = TRUE;
- #endif
--	curwin = *w;
-+	curwin = w;
- 	win_setheight(v);
- 	curwin = win;
-     }
-@@ -862,7 +1233,8 @@
- luaV_window_next(lua_State *L)
- {
-     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
--    luaV_pushwindow(L, (*w)->w_next);
-+    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
-+    luaV_pushwindow(L, win->w_next);
-     return 1;
- }
- 
-@@ -870,7 +1242,8 @@
- luaV_window_previous(lua_State *L)
- {
-     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
--    luaV_pushwindow(L, (*w)->w_prev);
-+    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
-+    luaV_pushwindow(L, win->w_prev);
-     return 1;
- }
- 
-@@ -878,8 +1251,7 @@
- luaV_window_isvalid(lua_State *L)
- {
-     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
--    lua_pushlightuserdata(L, (void *) (*w));
--    lua_rawget(L, LUA_ENVIRONINDEX);
-+    luaV_getudata(L, *w);
-     lua_pushboolean(L, !lua_isnil(L, -1));
-     return 1;
- }
-@@ -925,6 +1297,31 @@
- }
- 
-     static int
-+luaV_debug(lua_State *L)
-+{
-+    lua_settop(L, 0);
-+    lua_getglobal(L, "vim");
-+    lua_getfield(L, -1, "eval");
-+    lua_remove(L, -2); /* vim.eval at position 1 */
-+    for (;;)
-+    {
-+	const char *input;
-+	size_t l;
-+	lua_pushvalue(L, 1); /* vim.eval */
-+	lua_pushliteral(L, "input('lua_debug> ')");
-+	lua_call(L, 1, 1); /* return string */
-+	input = lua_tolstring(L, -1, &l);
-+	if (l == 0 || strcmp(input, "cont") == 0)
-+	    return 0;
-+	msg_putchar('\n'); /* avoid outputting on input line */
-+	if (luaL_loadbuffer(L, input, l, "=(debug command)")
-+		|| lua_pcall(L, 0, 0, 0))
-+	    luaV_emsg(L);
-+	lua_settop(L, 1); /* remove eventual returns, but keep vim.eval */
-+    }
-+}
-+
-+    static int
- luaV_command(lua_State *L)
- {
-     do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
-@@ -956,6 +1353,28 @@
- }
- 
-     static int
-+luaV_list(lua_State *L)
-+{
-+    list_T *l = list_alloc();
-+    if (l == NULL)
-+	lua_pushnil(L);
-+    else
-+	luaV_newlist(L, l);
-+    return 1;
-+}
-+
-+    static int
-+luaV_dict(lua_State *L)
-+{
-+    dict_T *d = dict_alloc();
-+    if (d == NULL)
-+	lua_pushnil(L);
-+    else
-+	luaV_newdict(L, d);
-+    return 1;
-+}
-+
-+    static int
- luaV_buffer(lua_State *L)
- {
-     buf_T *buf;
-@@ -981,15 +1400,10 @@
- 		    break;
- 	    }
- 	}
--	if (buf == NULL) /* not found? */
--	    lua_pushnil(L);
--	else
--	    luaV_pushbuffer(L, buf);
-     }
--    else {
-+    else
- 	buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
--	luaV_pushbuffer(L, buf);
--    }
-+    luaV_pushbuffer(L, buf);
-     return 1;
- }
- 
-@@ -1002,59 +1416,62 @@
- 	int n = lua_tointeger(L, 1);
- 	for (win = firstwin; win != NULL; win = win->w_next, n--)
- 	    if (n == 1) break;
--	if (win == NULL) /* not found? */
--	    lua_pushnil(L);
--	else
--	    luaV_pushwindow(L, win);
-     }
--    else {
-+    else
- 	win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
--	luaV_pushwindow(L, win);
--    }
-+    luaV_pushwindow(L, win);
-     return 1;
- }
- 
-     static int
- luaV_open(lua_State *L)
- {
--    luaV_Buffer *b;
-     char_u *s = NULL;
- #ifdef HAVE_SANDBOX
-     luaV_checksandbox(L);
- #endif
-     if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
--    b = luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
--    return 1;
--}
--
--    static int
--luaV_isbuffer(lua_State *L)
--{
--    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
--    return 1;
--}
--
--    static int
--luaV_iswindow(lua_State *L)
--{
--    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
-+    luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
-     return 1;
- }
- 
--/* for freeing buffer and window objects; lightuserdata as arg */
-     static int
--luaV_free(lua_State *L)
-+luaV_type(lua_State *L)
- {
--    lua_pushvalue(L, 1); /* lightudata */
--    lua_rawget(L, LUA_ENVIRONINDEX);
--    if (!lua_isnil(L, -1))
-+    luaL_checkany(L, 1);
-+    if (lua_type(L, 1) == LUA_TUSERDATA) /* check vim udata? */
-     {
--	lua_pushnil(L);
--	lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = nil */
--	lua_pushnil(L);
--	lua_rawset(L, LUA_ENVIRONINDEX); /* env[lightudata] = nil */
-+	lua_settop(L, 1);
-+	if (lua_getmetatable(L, 1))
-+	{
-+	    luaV_getfield(L, LUAVIM_LIST);
-+	    if (lua_rawequal(L, -1, 2))
-+	    {
-+		lua_pushstring(L, "list");
-+		return 1;
-+	    }
-+	    luaV_getfield(L, LUAVIM_DICT);
-+	    if (lua_rawequal(L, -1, 2))
-+	    {
-+		lua_pushstring(L, "dict");
-+		return 1;
-+	    }
-+	    luaV_getfield(L, LUAVIM_BUFFER);
-+	    if (lua_rawequal(L, -1, 2))
-+	    {
-+		lua_pushstring(L, "buffer");
-+		return 1;
-+	    }
-+	    luaV_getfield(L, LUAVIM_WINDOW);
-+	    if (lua_rawequal(L, -1, 2))
-+	    {
-+		lua_pushstring(L, "window");
-+		return 1;
-+	    }
-+	}
-     }
--    return 0;
-+    lua_pushstring(L, luaL_typename(L, 1)); /* fallback */
-+    return 1;
- }
- 
- static const luaL_Reg luaV_module[] = {
-@@ -1062,37 +1479,128 @@
-     {"eval", luaV_eval},
-     {"beep", luaV_beep},
-     {"line", luaV_line},
-+    {"list", luaV_list},
-+    {"dict", luaV_dict},
-     {"buffer", luaV_buffer},
-     {"window", luaV_window},
-     {"open", luaV_open},
--    {"isbuffer", luaV_isbuffer},
--    {"iswindow", luaV_iswindow},
-+    {"type", luaV_type},
-     {NULL, NULL}
- };
- 
-+/* for freeing list, dict, buffer and window objects; lightuserdata as arg */
-+    static int
-+luaV_free(lua_State *L)
-+{
-+    lua_pushnil(L);
-+    luaV_setudata(L, lua_touserdata(L, 1));
-+    return 0;
-+}
-+
-+    static int
-+luaV_luaeval (lua_State *L)
-+{
-+    luaL_Buffer b;
-+    size_t l;
-+    const char *str = lua_tolstring(L, 1, &l);
-+    typval_T *arg = (typval_T *) lua_touserdata(L, 2);
-+    typval_T *rettv = (typval_T *) lua_touserdata(L, 3);
-+    luaL_buffinit(L, &b);
-+    luaL_addlstring(&b, LUAVIM_EVALHEADER, sizeof(LUAVIM_EVALHEADER) - 1);
-+    luaL_addlstring(&b, str, l);
-+    luaL_pushresult(&b);
-+    str = lua_tolstring(L, -1, &l);
-+    if (luaL_loadbuffer(L, str, l, LUAVIM_EVALNAME)) /* compile error? */
-+    {
-+	luaV_emsg(L);
-+	return 0;
-+    }
-+    luaV_pushtypval(L, arg);
-+    if (lua_pcall(L, 1, 1, 0)) /* running error? */
-+    {
-+	luaV_emsg(L);
-+	return 0;
-+    }
-+    luaV_totypval(L, -1, rettv);
-+    return 0;
-+}
-+
-+    static int
-+luaV_setref (lua_State *L)
-+{
-+    int copyID = lua_tointeger(L, 1);
-+    typval_T tv;
-+    luaV_getfield(L, LUAVIM_LIST);
-+    luaV_getfield(L, LUAVIM_DICT);
-+    lua_pushnil(L);
-+    while (lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
-+    {
-+	lua_getmetatable(L, -1);
-+	if (lua_rawequal(L, -1, 2)) /* list? */
-+	{
-+	    tv.v_type = VAR_LIST;
-+	    tv.vval.v_list = (list_T *) lua_touserdata(L, 4); /* key */
-+	}
-+	else if (lua_rawequal(L, -1, 3)) /* dict? */
-+	{
-+	    tv.v_type = VAR_DICT;
-+	    tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
-+	}
-+	lua_pop(L, 2); /* metatable and value */
-+	set_ref_in_item(&tv, copyID);
-+    }
-+    return 0;
-+}
-+
-     static int
- luaopen_vim(lua_State *L)
- {
--    /* set environment */
-+    /* set cache table */
-     lua_newtable(L);
-     lua_newtable(L);
--    lua_pushliteral(L, "v");
-+    lua_pushstring(L, "v");
-     lua_setfield(L, -2, "__mode");
--    lua_setmetatable(L, -2);
--    lua_replace(L, LUA_ENVIRONINDEX);
-+    lua_setmetatable(L, -2); /* cache is weak-valued */
-     /* print */
-     lua_pushcfunction(L, luaV_print);
-     lua_setglobal(L, "print");
-+    /* debug.debug */
-+    lua_getglobal(L, "debug");
-+    lua_pushcfunction(L, luaV_debug);
-+    lua_setfield(L, -2, "debug");
-+    lua_pop(L, 1);
-     /* free */
-     lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
--    lua_pushcfunction(L, luaV_free);
-+    lua_pushvalue(L, 1); /* cache table */
-+    lua_pushcclosure(L, luaV_free, 1);
-+    lua_rawset(L, LUA_REGISTRYINDEX);
-+    /* luaeval */
-+    lua_pushlightuserdata(L, (void *) LUAVIM_LUAEVAL);
-+    lua_pushvalue(L, 1); /* cache table */
-+    lua_pushcclosure(L, luaV_luaeval, 1);
-+    lua_rawset(L, LUA_REGISTRYINDEX);
-+    /* setref */
-+    lua_pushlightuserdata(L, (void *) LUAVIM_SETREF);
-+    lua_pushvalue(L, 1); /* cache table */
-+    lua_pushcclosure(L, luaV_setref, 1);
-     lua_rawset(L, LUA_REGISTRYINDEX);
-     /* register */
-+    luaV_newmetatable(L, LUAVIM_LIST);
-+    lua_pushvalue(L, 1);
-+    luaV_openlib(L, luaV_List_mt, 1);
-+    luaV_newmetatable(L, LUAVIM_DICT);
-+    lua_pushvalue(L, 1);
-+    luaV_openlib(L, luaV_Dict_mt, 1);
-     luaV_newmetatable(L, LUAVIM_BUFFER);
--    luaL_register(L, NULL, luaV_Buffer_mt);
-+    lua_pushvalue(L, 1); /* cache table */
-+    luaV_openlib(L, luaV_Buffer_mt, 1);
-     luaV_newmetatable(L, LUAVIM_WINDOW);
--    luaL_register(L, NULL, luaV_Window_mt);
--    luaL_register(L, LUAVIM_NAME, luaV_module);
-+    lua_pushvalue(L, 1); /* cache table */
-+    luaV_openlib(L, luaV_Window_mt, 1);
-+    lua_newtable(L); /* vim table */
-+    lua_pushvalue(L, 1); /* cache table */
-+    luaV_openlib(L, luaV_module, 1);
-+    lua_setglobal(L, LUAVIM_NAME);
-     return 0;
- }
- 
-@@ -1123,7 +1631,7 @@
- static lua_State *L = NULL;
- 
-     static int
--lua_is_open(void)
-+lua_isopen(void)
- {
-     return L != NULL;
- }
-@@ -1131,7 +1639,7 @@
-     static int
- lua_init(void)
- {
--    if (L == NULL)
-+    if (!lua_isopen())
-     {
- #ifdef DYNAMIC_LUA
- 	if (!lua_enabled(TRUE))
-@@ -1148,7 +1656,7 @@
-     void
- lua_end(void)
- {
--    if (L != NULL)
-+    if (lua_isopen())
-     {
- 	lua_close(L);
- 	L = NULL;
-@@ -1191,7 +1699,7 @@
-     }
-     luaV_setrange(L, eap->line1, eap->line2);
-     luaL_buffinit(L, &b);
--    luaL_addlstring(&b, "return function(line) ", 22); /* header */
-+    luaL_addlstring(&b, "return function(line, linenr) ", 30); /* header */
-     luaL_addlstring(&b, s, strlen(s));
-     luaL_addlstring(&b, " end", 4); /* footer */
-     luaL_pushresult(&b);
-@@ -1208,7 +1716,8 @@
-     {
- 	lua_pushvalue(L, -1); /* function */
- 	luaV_pushline(L, curbuf, l); /* current line as arg */
--	if (lua_pcall(L, 1, 1, 0))
-+	lua_pushinteger(L, l); /* current line number as arg */
-+	if (lua_pcall(L, 2, 1, 0))
- 	{
- 	    luaV_emsg(L);
- 	    break;
-@@ -1242,23 +1751,36 @@
-     }
- }
- 
--/* buffer */
-+#define luaV_freetype(typ,tname) \
-+	void \
-+    lua_##tname##_free(typ *o) \
-+    { \
-+	if (!lua_isopen()) return; \
-+	luaV_getfield(L, LUAVIM_FREE); \
-+	lua_pushlightuserdata(L, (void *) o); \
-+	lua_call(L, 1, 0); \
-+    }
-+
-+luaV_freetype(buf_T, buffer)
-+luaV_freetype(win_T, window)
-+
-     void
--lua_buffer_free(buf_T *buf)
-+do_luaeval (char_u *str, typval_T *arg, typval_T *rettv)
- {
--    if (!lua_is_open()) return;
--    luaV_getfield(L, LUAVIM_FREE);
--    lua_pushlightuserdata(L, (void *) buf);
--    lua_call(L, 1, 0);
-+    lua_init();
-+    luaV_getfield(L, LUAVIM_LUAEVAL);
-+    lua_pushstring(L, (char *) str);
-+    lua_pushlightuserdata(L, (void *) arg);
-+    lua_pushlightuserdata(L, (void *) rettv);
-+    lua_call(L, 3, 0);
- }
- 
--/* window */
-     void
--lua_window_free(win_T *win)
-+set_ref_in_lua (int copyID)
- {
--    if (!lua_is_open()) return;
--    luaV_getfield(L, LUAVIM_FREE);
--    lua_pushlightuserdata(L, (void *) win);
-+    if (!lua_isopen()) return;
-+    luaV_getfield(L, LUAVIM_SETREF);
-+    lua_pushinteger(L, copyID);
-     lua_call(L, 1, 0);
- }
- 
-diff -Naur vim73.orig/src/if_mzsch.c vim73/src/if_mzsch.c
---- vim73.orig/src/if_mzsch.c	2010-06-26 03:56:17.000000000 +0000
-+++ vim73/src/if_mzsch.c	2012-11-01 20:35:48.000000000 +0000
-@@ -31,8 +31,6 @@
-  * depend". */
- #if defined(FEAT_MZSCHEME) || defined(PROTO)
- 
--#include <assert.h>
--
- /* Base data structures */
- #define SCHEME_VIMBUFFERP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
- #define SCHEME_VIMWINDOWP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
-@@ -556,20 +554,20 @@
- 
-     if (hMzGC && hMzSch)
- 	return OK;
--    hMzSch = LoadLibrary(sch_dll);
--    hMzGC = LoadLibrary(gc_dll);
-+    hMzSch = vimLoadLib(sch_dll);
-+    hMzGC = vimLoadLib(gc_dll);
- 
--    if (!hMzSch)
-+    if (!hMzGC)
-     {
- 	if (verbose)
--	    EMSG2(_(e_loadlib), sch_dll);
-+	    EMSG2(_(e_loadlib), gc_dll);
- 	return FAIL;
-     }
- 
--    if (!hMzGC)
-+    if (!hMzSch)
-     {
- 	if (verbose)
--	    EMSG2(_(e_loadlib), gc_dll);
-+	    EMSG2(_(e_loadlib), sch_dll);
- 	return FAIL;
-     }
- 
-@@ -794,62 +792,72 @@
- #endif
- }
- 
--    void
--mzscheme_main(void)
-+#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
-+static __declspec(thread) void *tls_space;
-+#endif
-+
-+/*
-+ * Since version 4.x precise GC requires trampolined startup.
-+ * Futures and places in version 5.x need it too.
-+ */
-+#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
-+    || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
-+# ifdef DYNAMIC_MZSCHEME
-+#  error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
-+# endif
-+# define TRAMPOLINED_MZVIM_STARTUP
-+#endif
-+
-+    int
-+mzscheme_main(int argc, char** argv)
- {
--#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
--    /* use trampoline for precise GC in MzScheme >= 4.x */
--    scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
-+#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
-+    scheme_register_tls_space(&tls_space, 0);
-+#endif
-+#ifdef TRAMPOLINED_MZVIM_STARTUP
-+    return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
- #else
--    mzscheme_env_main(NULL, 0, NULL);
-+    return mzscheme_env_main(NULL, argc, argv);
- #endif
- }
- 
-     static int
--mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
-+mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
- {
--    /* neither argument nor return values are used */
--#ifdef MZ_PRECISE_GC
--# if MZSCHEME_VERSION_MAJOR < 400
--    /*
--     * Starting from version 4.x, embedding applications must use
--     * scheme_main_setup/scheme_main_stack_setup trampolines
--     * rather than setting stack base directly with scheme_set_stack_base
--     */
-+    int vim_main_result;
-+#ifdef TRAMPOLINED_MZVIM_STARTUP
-+    /* Scheme has created the environment for us */
-+    environment = env;
-+#else
-+# ifdef MZ_PRECISE_GC
-     Scheme_Object   *dummy = NULL;
-     MZ_GC_DECL_REG(1);
-     MZ_GC_VAR_IN_REG(0, dummy);
- 
-     stack_base = &__gc_var_stack__;
- # else
--    /* environment has been created by us by Scheme */
--    environment = env;
--# endif
--    /*
--     * In 4.x, all activities must be performed inside trampoline
--     * so we are forced to initialise GC immediately
--     * This can be postponed in 3.x but I see no point in implementing
--     * a feature which will work in older versions only.
--     * One would better use conservative GC if he needs dynamic MzScheme
--     */
--    mzscheme_init();
--#else
-     int dummy = 0;
-     stack_base = (void *)&dummy;
-+# endif
- #endif
--    main_loop(FALSE, FALSE);
--#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
-+
-+    /* mzscheme_main is called as a trampoline from main.
-+     * We trampoline into vim_main2
-+     * Passing argc, argv through from mzscheme_main
-+     */
-+    vim_main_result = vim_main2(argc, argv);
-+#if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
-     /* releasing dummy */
-     MZ_GC_REG();
-     MZ_GC_UNREG();
- #endif
--    return 0;
-+    return vim_main_result;
- }
- 
-     static void
- startup_mzscheme(void)
- {
--#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
-+#ifndef TRAMPOLINED_MZVIM_STARTUP
-     scheme_set_stack_base(stack_base, 1);
- #endif
- 
-@@ -861,7 +869,7 @@
-     MZ_REGISTER_STATIC(exn_message);
-     MZ_REGISTER_STATIC(vim_exn);
- 
--#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
-+#ifndef TRAMPOLINED_MZVIM_STARTUP
-     /* in newer versions of precise GC the initial env has been created */
-     environment = scheme_basic_env();
- #endif
-@@ -2641,7 +2649,8 @@
- 	new_value = FALSE;
-     else if (vim_value->v_type == VAR_STRING)
-     {
--	result = scheme_make_string((char *)vim_value->vval.v_string);
-+	result = scheme_make_string(vim_value->vval.v_string == NULL
-+				    ? "" : (char *)vim_value->vval.v_string);
- 	MZ_GC_CHECK();
-     }
-     else if (vim_value->v_type == VAR_NUMBER)
-@@ -3006,7 +3015,6 @@
- 	MZ_GC_REG();
- 
- 	tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
--	assert(nc <= 5);
- 	mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
- 	MZ_GC_CHECK();
- 
-diff -Naur vim73.orig/src/if_ole.h vim73/src/if_ole.h
---- vim73.orig/src/if_ole.h	2010-05-15 11:04:07.000000000 +0000
-+++ vim73/src/if_ole.h	2012-11-01 20:35:42.000000000 +0000
-@@ -46,8 +46,11 @@
- /* header files for imported files */
- #include "oaidl.h"
- 
--void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
--void __RPC_USER MIDL_user_free( void __RPC_FAR * );
-+#ifndef __MIDL_user_allocate_free_DEFINED__
-+#define __MIDL_user_allocate_free_DEFINED__
-+    void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
-+    void __RPC_USER MIDL_user_free( void __RPC_FAR * );
-+#endif
- 
- #ifndef __IVim_INTERFACE_DEFINED__
- #define __IVim_INTERFACE_DEFINED__
-diff -Naur vim73.orig/src/if_perl.xs vim73/src/if_perl.xs
---- vim73.orig/src/if_perl.xs	2010-07-22 09:33:37.000000000 +0000
-+++ vim73/src/if_perl.xs	2012-11-01 20:35:48.000000000 +0000
-@@ -76,6 +76,12 @@
- # define EXTERN_C
- #endif
- 
-+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER)
-+/* Using PL_errgv to get the error message after perl_eval_sv() causes a crash
-+ * with MSVC and Perl version 5.14. */
-+# define AVOID_PL_ERRGV
-+#endif
-+
- /* Compatibility hacks over */
- 
- static PerlInterpreter *perl_interp = NULL;
-@@ -106,7 +112,7 @@
- #define close_dll dlclose
- #else
- #define PERL_PROC FARPROC
--#define load_dll LoadLibrary
-+#define load_dll vimLoadLib
- #define symbol_from_dll GetProcAddress
- #define close_dll FreeLibrary
- #endif
-@@ -147,7 +153,12 @@
- # define Perl_save_int dll_Perl_save_int
- # define Perl_stack_grow dll_Perl_stack_grow
- # define Perl_set_context dll_Perl_set_context
-+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+# define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
-+# define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
-+# else
- # define Perl_sv_2bool dll_Perl_sv_2bool
-+# endif
- # define Perl_sv_2iv dll_Perl_sv_2iv
- # define Perl_sv_2mortal dll_Perl_sv_2mortal
- # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
-@@ -214,6 +225,9 @@
- # define Perl_call_list dll_Perl_call_list
- # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
- # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
-+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+#  define PL_thr_key *dll_PL_thr_key
-+# endif
- 
- /*
-  * Declare HANDLE for perl.dll and function pointers.
-@@ -252,7 +266,12 @@
- static void (*Perl_save_int)(pTHX_ int*);
- static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
- static SV** (*Perl_set_context)(void*);
-+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32);
-+static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len);
-+#else
- static bool (*Perl_sv_2bool)(pTHX_ SV*);
-+#endif
- static IV (*Perl_sv_2iv)(pTHX_ SV*);
- static SV* (*Perl_sv_2mortal)(pTHX_ SV*);
- #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
-@@ -299,6 +318,9 @@
- static void (*Perl_sv_free2)(pTHX_ SV*);
- static void (*Perl_sys_init)(int* argc, char*** argv);
- static void (*Perl_sys_term)(void);
-+static void (*Perl_call_list)(pTHX_ I32, AV*);
-+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+# else
- static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
- static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
- static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*);
-@@ -310,16 +332,20 @@
- static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*);
- static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*);
- static OP** (*Perl_Iop_ptr)(register PerlInterpreter*);
--static void (*Perl_call_list)(pTHX_ I32, AV*);
- static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*);
- static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*);
-+# endif
- #endif
- 
-+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+static perl_key* dll_PL_thr_key;
-+#else
- static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
- static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
- static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*);
--static void (*boot_DynaLoader)_((pTHX_ CV*));
- static perl_key* (*Perl_Gthr_key_ptr)_((pTHX));
-+#endif
-+static void (*boot_DynaLoader)_((pTHX_ CV*));
- 
- /*
-  * Table of name to function pointer of perl.
-@@ -360,7 +386,12 @@
-     {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
-     {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
-     {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
-+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+    {"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags},
-+    {"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck},
-+#else
-     {"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool},
-+#endif
-     {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
-     {"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal},
- #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
-@@ -407,6 +438,9 @@
-     {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
-     {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
-     {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
-+    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
-+# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+# else
-     {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
-     {"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr},
-     {"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr},
-@@ -418,15 +452,19 @@
-     {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
-     {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
-     {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
--    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
-     {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
-     {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
-+# endif
- #endif
-+#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
-+    {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
-+#else
-     {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
-     {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
-     {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
--    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
-     {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
-+#endif
-+    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
-     {"", NULL},
- };
- 
-@@ -590,7 +628,7 @@
-     if (ptr->w_perl_private == NULL)
-     {
- 	ptr->w_perl_private = newSV(0);
--	sv_setiv(ptr->w_perl_private, (IV)ptr);
-+	sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
-     }
-     else
- 	SvREFCNT_inc(ptr->w_perl_private);
-@@ -608,7 +646,7 @@
-     if (ptr->b_perl_private == NULL)
-     {
- 	ptr->b_perl_private = newSV(0);
--	sv_setiv(ptr->b_perl_private, (IV)ptr);
-+	sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
-     }
-     else
- 	SvREFCNT_inc(ptr->b_perl_private);
-@@ -755,7 +793,7 @@
- #ifdef HAVE_SANDBOX
-     if (sandbox)
-     {
--	safe = perl_get_sv( "VIM::safe", FALSE );
-+	safe = perl_get_sv("VIM::safe", FALSE);
- # ifndef MAKE_TEST  /* avoid a warning for unreachable code */
- 	if (safe == NULL || !SvTRUE(safe))
- 	    EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
-@@ -775,7 +813,11 @@
- 
-     SvREFCNT_dec(sv);
- 
-+#ifdef AVOID_PL_ERRGV
-+    err = SvPV(perl_get_sv("@", GV_ADD), length);
-+#else
-     err = SvPV(GvSV(PL_errgv), length);
-+#endif
- 
-     FREETMPS;
-     LEAVE;
-@@ -845,7 +887,11 @@
-     sv_catpvn(sv, "}", 1);
-     perl_eval_sv(sv, G_DISCARD | G_NOARGS);
-     SvREFCNT_dec(sv);
-+#ifdef AVOID_PL_ERRGV
-+    str = SvPV(perl_get_sv("@", GV_ADD), length);
-+#else
-     str = SvPV(GvSV(PL_errgv), length);
-+#endif
-     if (length)
- 	goto err;
- 
-@@ -859,7 +905,11 @@
- 	sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
- 	PUSHMARK(sp);
- 	perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
-+#ifdef AVOID_PL_ERRGV
-+	str = SvPV(perl_get_sv("@", GV_ADD), length);
-+#else
- 	str = SvPV(GvSV(PL_errgv), length);
-+#endif
- 	if (length)
- 	    break;
- 	SPAGAIN;
-@@ -892,24 +942,6 @@
- win_T *win_find_nr(int n) { return curwin; }
- #endif
- 
--XS(XS_VIM_Msg);
--XS(XS_VIM_SetOption);
--XS(XS_VIM_DoCommand);
--XS(XS_VIM_Eval);
--XS(XS_VIM_Buffers);
--XS(XS_VIM_Windows);
--XS(XS_VIWIN_DESTROY);
--XS(XS_VIWIN_Buffer);
--XS(XS_VIWIN_SetHeight);
--XS(XS_VIWIN_Cursor);
--XS(XS_VIBUF_DESTROY);
--XS(XS_VIBUF_Name);
--XS(XS_VIBUF_Number);
--XS(XS_VIBUF_Count);
--XS(XS_VIBUF_Get);
--XS(XS_VIBUF_Set);
--XS(XS_VIBUF_Delete);
--XS(XS_VIBUF_Append);
- XS(boot_VIM);
- 
-     static void
-@@ -1108,7 +1140,7 @@
-     VIWIN win
- 
-     PPCODE:
--    if(items == 1)
-+    if (items == 1)
-     {
-       EXTEND(sp, 2);
-       if (!win_valid(win))
-@@ -1116,7 +1148,7 @@
-       PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
-       PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
-     }
--    else if(items == 3)
-+    else if (items == 3)
-     {
-       int lnum, col;
- 
-@@ -1249,9 +1281,9 @@
- 	{
- 	    lnum = SvIV(ST(1));
- 	    count = 1 + SvIV(ST(2)) - lnum;
--	    if(count == 0)
-+	    if (count == 0)
- 		count = 1;
--	    if(count < 0)
-+	    if (count < 0)
- 	    {
- 		lnum -= count;
- 		count = -count;
-diff -Naur vim73.orig/src/if_py_both.h vim73/src/if_py_both.h
---- vim73.orig/src/if_py_both.h	2010-08-08 11:06:29.000000000 +0000
-+++ vim73/src/if_py_both.h	2012-11-01 20:35:48.000000000 +0000
-@@ -1,4 +1,4 @@
--/* vi:set ts=8 sts=4 sw=4:
-+/* vi:set ts=8 sts=4 sw=4 noet:
-  *
-  * VIM - Vi IMproved	by Bram Moolenaar
-  *
-@@ -12,6 +12,16 @@
-  * Common code for if_python.c and if_python3.c.
-  */
- 
-+#if PY_VERSION_HEX < 0x02050000
-+typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
-+#endif
-+
-+#ifdef FEAT_MBYTE
-+# define ENC_OPT p_enc
-+#else
-+# define ENC_OPT "latin1"
-+#endif
-+
- /*
-  * obtain a lock on the Vim data structures
-  */
-@@ -33,7 +43,9 @@
- 
- static PyObject *OutputWrite(PyObject *, PyObject *);
- static PyObject *OutputWritelines(PyObject *, PyObject *);
-+static PyObject *OutputFlush(PyObject *, PyObject *);
- 
-+/* Function to write a line, points to either msg() or emsg(). */
- typedef void (*writefn)(char_u *);
- static void writer(writefn fn, char_u *str, PyInt n);
- 
-@@ -46,9 +58,10 @@
- 
- static struct PyMethodDef OutputMethods[] = {
-     /* name,	    function,		calling,    documentation */
--    {"write",	    OutputWrite,	1,	    "" },
--    {"writelines",  OutputWritelines,	1,	    "" },
--    { NULL,	    NULL,		0,	    NULL }
-+    {"write",	    OutputWrite,	1,	    ""},
-+    {"writelines",  OutputWritelines,	1,	    ""},
-+    {"flush",	    OutputFlush,	1,	    ""},
-+    { NULL,	    NULL,		0,	    NULL}
- };
- 
- #define PyErr_SetVim(str) PyErr_SetString(VimError, str)
-@@ -58,14 +71,39 @@
- /* Output buffer management
-  */
- 
-+    static int
-+OutputSetattr(PyObject *self, char *name, PyObject *val)
-+{
-+    if (val == NULL)
-+    {
-+	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
-+	return -1;
-+    }
-+
-+    if (strcmp(name, "softspace") == 0)
-+    {
-+	if (!PyInt_Check(val))
-+	{
-+	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
-+	    return -1;
-+	}
-+
-+	((OutputObject *)(self))->softspace = PyInt_AsLong(val);
-+	return 0;
-+    }
-+
-+    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
-+    return -1;
-+}
-+
-     static PyObject *
- OutputWrite(PyObject *self, PyObject *args)
- {
--    int len;
--    char *str;
-+    Py_ssize_t len = 0;
-+    char *str = NULL;
-     int error = ((OutputObject *)(self))->error;
- 
--    if (!PyArg_ParseTuple(args, "s#", &str, &len))
-+    if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
- 	return NULL;
- 
-     Py_BEGIN_ALLOW_THREADS
-@@ -73,6 +111,7 @@
-     writer((writefn)(error ? emsg : msg), (char_u *)str, len);
-     Python_Release_Vim();
-     Py_END_ALLOW_THREADS
-+    PyMem_Free(str);
- 
-     Py_INCREF(Py_None);
-     return Py_None;
-@@ -90,7 +129,8 @@
- 	return NULL;
-     Py_INCREF(list);
- 
--    if (!PyList_Check(list)) {
-+    if (!PyList_Check(list))
-+    {
- 	PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
- 	Py_DECREF(list);
- 	return NULL;
-@@ -101,10 +141,11 @@
-     for (i = 0; i < n; ++i)
-     {
- 	PyObject *line = PyList_GetItem(list, i);
--	char *str;
-+	char *str = NULL;
- 	PyInt len;
- 
--	if (!PyArg_Parse(line, "s#", &str, &len)) {
-+	if (!PyArg_Parse(line, "et#", ENC_OPT, &str, &len))
-+	{
- 	    PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
- 	    Py_DECREF(list);
- 	    return NULL;
-@@ -115,6 +156,7 @@
- 	writer((writefn)(error ? emsg : msg), (char_u *)str, len);
- 	Python_Release_Vim();
- 	Py_END_ALLOW_THREADS
-+	PyMem_Free(str);
-     }
- 
-     Py_DECREF(list);
-@@ -122,52 +164,28 @@
-     return Py_None;
- }
- 
--static char_u *buffer = NULL;
--static PyInt buffer_len = 0;
--static PyInt buffer_size = 0;
--
--static writefn old_fn = NULL;
--
--    static void
--buffer_ensure(PyInt n)
-+    static PyObject *
-+OutputFlush(PyObject *self UNUSED, PyObject *args UNUSED)
- {
--    PyInt new_size;
--    char_u *new_buffer;
--
--    if (n < buffer_size)
--	return;
--
--    new_size = buffer_size;
--    while (new_size < n)
--	new_size += 80;
--
--    if (new_size != buffer_size)
--    {
--	new_buffer = alloc((unsigned)new_size);
--	if (new_buffer == NULL)
--	    return;
-+    /* do nothing */
-+    Py_INCREF(Py_None);
-+    return Py_None;
-+}
- 
--	if (buffer)
--	{
--	    memcpy(new_buffer, buffer, buffer_len);
--	    vim_free(buffer);
--	}
- 
--	buffer = new_buffer;
--	buffer_size = new_size;
--    }
--}
-+/* Buffer IO, we write one whole line at a time. */
-+static garray_T io_ga = {0, 0, 1, 80, NULL};
-+static writefn old_fn = NULL;
- 
-     static void
- PythonIO_Flush(void)
- {
--    if (old_fn && buffer_len)
-+    if (old_fn != NULL && io_ga.ga_len > 0)
-     {
--	buffer[buffer_len] = 0;
--	old_fn(buffer);
-+	((char_u *)io_ga.ga_data)[io_ga.ga_len] = NUL;
-+	old_fn((char_u *)io_ga.ga_data);
-     }
--
--    buffer_len = 0;
-+    io_ga.ga_len = 0;
- }
- 
-     static void
-@@ -175,30 +193,34 @@
- {
-     char_u *ptr;
- 
--    if (fn != old_fn && old_fn != NULL)
-+    /* Flush when switching output function. */
-+    if (fn != old_fn)
- 	PythonIO_Flush();
--
-     old_fn = fn;
- 
-+    /* Write each NL separated line.  Text after the last NL is kept for
-+     * writing later. */
-     while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
-     {
- 	PyInt len = ptr - str;
- 
--	buffer_ensure(buffer_len + len + 1);
-+	if (ga_grow(&io_ga, (int)(len + 1)) == FAIL)
-+	    break;
- 
--	memcpy(buffer + buffer_len, str, len);
--	buffer_len += len;
--	buffer[buffer_len] = 0;
--	fn(buffer);
-+	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)len);
-+	((char *)io_ga.ga_data)[io_ga.ga_len + len] = NUL;
-+	fn((char_u *)io_ga.ga_data);
- 	str = ptr + 1;
- 	n -= len + 1;
--	buffer_len = 0;
-+	io_ga.ga_len = 0;
-     }
- 
--    /* Put the remaining text into the buffer for later printing */
--    buffer_ensure(buffer_len + n + 1);
--    memcpy(buffer + buffer_len, str, n);
--    buffer_len += n;
-+    /* Put the remaining text into io_ga for later printing. */
-+    if (n > 0 && ga_grow(&io_ga, (int)(n + 1)) == OK)
-+    {
-+	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)n);
-+	io_ga.ga_len += (int)n;
-+    }
- }
- 
- /***************/
-@@ -301,7 +323,7 @@
- {
-     PyObject	*result;
-     PyObject	*newObj;
--    char	ptrBuf[NUMBUFLEN];
-+    char	ptrBuf[sizeof(void *) * 2 + 3];
- 
-     /* Avoid infinite recursion */
-     if (depth > 100)
-@@ -316,9 +338,9 @@
-     if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
- 	    || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
-     {
--	sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U,
--		our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list
--					   : (long_u)our_tv->vval.v_dict);
-+	sprintf(ptrBuf, "%p",
-+		our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
-+					   : (void *)our_tv->vval.v_dict);
- 	result = PyDict_GetItemString(lookupDict, ptrBuf);
- 	if (result != NULL)
- 	{
-@@ -329,7 +351,8 @@
- 
-     if (our_tv->v_type == VAR_STRING)
-     {
--	result = Py_BuildValue("s", our_tv->vval.v_string);
-+	result = Py_BuildValue("s", our_tv->vval.v_string == NULL
-+					? "" : (char *)our_tv->vval.v_string);
-     }
-     else if (our_tv->v_type == VAR_NUMBER)
-     {
-@@ -449,6 +472,57 @@
- #endif
- }
- 
-+static PyObject *ConvertToPyObject(typval_T *);
-+
-+    static PyObject *
-+VimEvalPy(PyObject *self UNUSED, PyObject *args UNUSED)
-+{
-+#ifdef FEAT_EVAL
-+    char	*expr;
-+    typval_T	*our_tv;
-+    PyObject	*result;
-+
-+    if (!PyArg_ParseTuple(args, "s", &expr))
-+	return NULL;
-+
-+    Py_BEGIN_ALLOW_THREADS
-+    Python_Lock_Vim();
-+    our_tv = eval_expr((char_u *)expr, NULL);
-+
-+    Python_Release_Vim();
-+    Py_END_ALLOW_THREADS
-+
-+    if (our_tv == NULL)
-+    {
-+	PyErr_SetVim(_("invalid expression"));
-+	return NULL;
-+    }
-+
-+    result = ConvertToPyObject(our_tv);
-+    Py_BEGIN_ALLOW_THREADS
-+    Python_Lock_Vim();
-+    free_tv(our_tv);
-+    Python_Release_Vim();
-+    Py_END_ALLOW_THREADS
-+
-+    return result;
-+#else
-+    PyErr_SetVim(_("expressions disabled at compile time"));
-+    return NULL;
-+#endif
-+}
-+
-+    static PyObject *
-+VimStrwidth(PyObject *self UNUSED, PyObject *args)
-+{
-+    char	*expr;
-+
-+    if (!PyArg_ParseTuple(args, "s", &expr))
-+	return NULL;
-+
-+    return PyLong_FromLong(mb_string2cells((char_u *)expr, (int)STRLEN(expr)));
-+}
-+
- /*
-  * Vim module - Definitions
-  */
-@@ -457,6 +531,8 @@
-     /* name,	     function,		calling,    documentation */
-     {"command",	     VimCommand,	1,	    "Execute a Vim ex-mode command" },
-     {"eval",	     VimEval,		1,	    "Evaluate an expression using Vim evaluator" },
-+    {"bindeval",     VimEvalPy,		1,	    "Like eval(), but returns objects attached to vim ones"},
-+    {"strwidth",     VimStrwidth,	1,	    "Screen string width, counts <Tab> as having width 1"},
-     { NULL,	     NULL,		0,	    NULL }
- };
- 
-@@ -464,8 +540,7 @@
- {
-     PyObject_HEAD
-     buf_T *buf;
--}
--BufferObject;
-+} BufferObject;
- 
- #define INVALID_BUFFER_VALUE ((buf_T *)(-1))
- 
-@@ -509,124 +584,975 @@
-     win_T	*win;
- } WindowObject;
- 
--#define INVALID_WINDOW_VALUE ((win_T *)(-1))
-+static int ConvertFromPyObject(PyObject *, typval_T *);
-+static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
- 
--    static int
--CheckWindow(WindowObject *this)
-+typedef struct pylinkedlist_S {
-+    struct pylinkedlist_S	*pll_next;
-+    struct pylinkedlist_S	*pll_prev;
-+    PyObject			*pll_obj;
-+} pylinkedlist_T;
-+
-+static pylinkedlist_T *lastdict = NULL;
-+static pylinkedlist_T *lastlist = NULL;
-+
-+    static void
-+pyll_remove(pylinkedlist_T *ref, pylinkedlist_T **last)
- {
--    if (this->win == INVALID_WINDOW_VALUE)
-+    if (ref->pll_prev == NULL)
-     {
--	PyErr_SetVim(_("attempt to refer to deleted window"));
--	return -1;
-+	if (ref->pll_next == NULL)
-+	{
-+	    *last = NULL;
-+	    return;
-+	}
-     }
-+    else
-+	ref->pll_prev->pll_next = ref->pll_next;
- 
--    return 0;
-+    if (ref->pll_next == NULL)
-+	*last = ref->pll_prev;
-+    else
-+	ref->pll_next->pll_prev = ref->pll_prev;
- }
- 
--static int WindowSetattr(PyObject *, char *, PyObject *);
--static PyObject *WindowRepr(PyObject *);
-+    static void
-+pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last)
-+{
-+    if (*last == NULL)
-+	ref->pll_prev = NULL;
-+    else
-+    {
-+	(*last)->pll_next = ref;
-+	ref->pll_prev = *last;
-+    }
-+    ref->pll_next = NULL;
-+    ref->pll_obj = self;
-+    *last = ref;
-+}
-+
-+static PyTypeObject DictionaryType;
-+
-+#define DICTKEY_GET_NOTEMPTY(err) \
-+    DICTKEY_GET(err) \
-+    if (*key == NUL) \
-+    { \
-+	PyErr_SetString(PyExc_ValueError, _("empty keys are not allowed")); \
-+	return err; \
-+    }
- 
--    static int
--WindowSetattr(PyObject *self, char *name, PyObject *val)
-+typedef struct
- {
--    WindowObject *this = (WindowObject *)(self);
-+    PyObject_HEAD
-+    dict_T	*dict;
-+    pylinkedlist_T	ref;
-+} DictionaryObject;
- 
--    if (CheckWindow(this))
--	return -1;
-+    static PyObject *
-+DictionaryNew(dict_T *dict)
-+{
-+    DictionaryObject	*self;
- 
--    if (strcmp(name, "buffer") == 0)
-+    self = PyObject_NEW(DictionaryObject, &DictionaryType);
-+    if (self == NULL)
-+	return NULL;
-+    self->dict = dict;
-+    ++dict->dv_refcount;
-+
-+    pyll_add((PyObject *)(self), &self->ref, &lastdict);
-+
-+    return (PyObject *)(self);
-+}
-+
-+    static int
-+pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
-+{
-+    dict_T	*d;
-+    char_u	*key;
-+    dictitem_T	*di;
-+    PyObject	*keyObject;
-+    PyObject	*valObject;
-+    Py_ssize_t	iter = 0;
-+
-+    d = dict_alloc();
-+    if (d == NULL)
-     {
--	PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
-+	PyErr_NoMemory();
- 	return -1;
-     }
--    else if (strcmp(name, "cursor") == 0)
-+
-+    tv->v_type = VAR_DICT;
-+    tv->vval.v_dict = d;
-+
-+    while (PyDict_Next(obj, &iter, &keyObject, &valObject))
-     {
--	long lnum;
--	long col;
--	long len;
-+	DICTKEY_DECL
- 
--	if (!PyArg_Parse(val, "(ll)", &lnum, &col))
-+	if (keyObject == NULL)
-+	    return -1;
-+	if (valObject == NULL)
- 	    return -1;
- 
--	if (lnum <= 0 || lnum > this->win->w_buffer->b_ml.ml_line_count)
-+	DICTKEY_GET_NOTEMPTY(-1)
-+
-+	di = dictitem_alloc(key);
-+
-+	DICTKEY_UNREF
-+
-+	if (di == NULL)
- 	{
--	    PyErr_SetVim(_("cursor position outside buffer"));
-+	    PyErr_NoMemory();
- 	    return -1;
- 	}
-+	di->di_tv.v_lock = 0;
- 
--	/* Check for keyboard interrupts */
--	if (VimErrorCheck())
-+	if (_ConvertFromPyObject(valObject, &di->di_tv, lookupDict) == -1)
-+	{
-+	    vim_free(di);
- 	    return -1;
-+	}
-+	if (dict_add(d, di) == FAIL)
-+	{
-+	    vim_free(di);
-+	    PyErr_SetVim(_("failed to add key to dictionary"));
-+	    return -1;
-+	}
-+    }
-+    return 0;
-+}
- 
--	/* When column is out of range silently correct it. */
--	len = (long)STRLEN(ml_get_buf(this->win->w_buffer, lnum, FALSE));
--	if (col > len)
--	    col = len;
--
--	this->win->w_cursor.lnum = lnum;
--	this->win->w_cursor.col = col;
--#ifdef FEAT_VIRTUALEDIT
--	this->win->w_cursor.coladd = 0;
--#endif
--	update_screen(VALID);
-+    static int
-+pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
-+{
-+    dict_T	*d;
-+    char_u	*key;
-+    dictitem_T	*di;
-+    PyObject	*list;
-+    PyObject	*litem;
-+    PyObject	*keyObject;
-+    PyObject	*valObject;
-+    Py_ssize_t	lsize;
- 
--	return 0;
-+    d = dict_alloc();
-+    if (d == NULL)
-+    {
-+	PyErr_NoMemory();
-+	return -1;
-     }
--    else if (strcmp(name, "height") == 0)
-+
-+    tv->v_type = VAR_DICT;
-+    tv->vval.v_dict = d;
-+
-+    list = PyMapping_Items(obj);
-+    lsize = PyList_Size(list);
-+    while (lsize--)
-     {
--	int	height;
--	win_T	*savewin;
-+	DICTKEY_DECL
- 
--	if (!PyArg_Parse(val, "i", &height))
-+	litem = PyList_GetItem(list, lsize);
-+	if (litem == NULL)
-+	{
-+	    Py_DECREF(list);
- 	    return -1;
-+	}
- 
--#ifdef FEAT_GUI
--	need_mouse_correct = TRUE;
--#endif
--	savewin = curwin;
--	curwin = this->win;
--	win_setheight(height);
--	curwin = savewin;
-+	keyObject = PyTuple_GetItem(litem, 0);
-+	if (keyObject == NULL)
-+	{
-+	    Py_DECREF(list);
-+	    Py_DECREF(litem);
-+	    return -1;
-+	}
- 
--	/* Check for keyboard interrupts */
--	if (VimErrorCheck())
-+	DICTKEY_GET_NOTEMPTY(-1)
-+
-+	valObject = PyTuple_GetItem(litem, 1);
-+	if (valObject == NULL)
-+	{
-+	    Py_DECREF(list);
-+	    Py_DECREF(litem);
- 	    return -1;
-+	}
- 
--	return 0;
--    }
--#ifdef FEAT_VERTSPLIT
--    else if (strcmp(name, "width") == 0)
--    {
--	int	width;
--	win_T	*savewin;
-+	di = dictitem_alloc(key);
- 
--	if (!PyArg_Parse(val, "i", &width))
-+	DICTKEY_UNREF
-+
-+	if (di == NULL)
-+	{
-+	    Py_DECREF(list);
-+	    Py_DECREF(litem);
-+	    PyErr_NoMemory();
- 	    return -1;
-+	}
-+	di->di_tv.v_lock = 0;
- 
--#ifdef FEAT_GUI
--	need_mouse_correct = TRUE;
--#endif
--	savewin = curwin;
--	curwin = this->win;
--	win_setwidth(width);
--	curwin = savewin;
-+	if (_ConvertFromPyObject(valObject, &di->di_tv, lookupDict) == -1)
-+	{
-+	    vim_free(di);
-+	    Py_DECREF(list);
-+	    Py_DECREF(litem);
-+	    return -1;
-+	}
-+	if (dict_add(d, di) == FAIL)
-+	{
-+	    vim_free(di);
-+	    Py_DECREF(list);
-+	    Py_DECREF(litem);
-+	    PyErr_SetVim(_("failed to add key to dictionary"));
-+	    return -1;
-+	}
-+	Py_DECREF(litem);
-+    }
-+    Py_DECREF(list);
-+    return 0;
-+}
- 
--	/* Check for keyboard interrupts */
--	if (VimErrorCheck())
-+    static PyInt
-+DictionarySetattr(DictionaryObject *self, char *name, PyObject *val)
-+{
-+    if (val == NULL)
-+    {
-+	PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes"));
-+	return -1;
-+    }
-+
-+    if (strcmp(name, "locked") == 0)
-+    {
-+	if (self->dict->dv_lock == VAR_FIXED)
-+	{
-+	    PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed dictionary"));
- 	    return -1;
-+	}
-+	else
-+	{
-+	    if (!PyBool_Check(val))
-+	    {
-+		PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
-+		return -1;
-+	    }
- 
-+	    if (val == Py_True)
-+		self->dict->dv_lock = VAR_LOCKED;
-+	    else
-+		self->dict->dv_lock = 0;
-+	}
- 	return 0;
-     }
--#endif
-     else
-     {
--	PyErr_SetString(PyExc_AttributeError, name);
-+	PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute"));
- 	return -1;
-     }
- }
- 
-+    static PyInt
-+DictionaryLength(PyObject *self)
-+{
-+    return ((PyInt) ((((DictionaryObject *)(self))->dict->dv_hashtab.ht_used)));
-+}
-+
-     static PyObject *
--WindowRepr(PyObject *self)
-+DictionaryItem(PyObject *self, PyObject *keyObject)
-+{
-+    char_u	*key;
-+    dictitem_T	*di;
-+    DICTKEY_DECL
-+
-+    DICTKEY_GET_NOTEMPTY(NULL)
-+
-+    di = dict_find(((DictionaryObject *) (self))->dict, key, -1);
-+
-+    DICTKEY_UNREF
-+
-+    if (di == NULL)
-+    {
-+	PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
-+	return NULL;
-+    }
-+
-+    return ConvertToPyObject(&di->di_tv);
-+}
-+
-+    static PyInt
-+DictionaryAssItem(PyObject *self, PyObject *keyObject, PyObject *valObject)
-+{
-+    char_u	*key;
-+    typval_T	tv;
-+    dict_T	*d = ((DictionaryObject *)(self))->dict;
-+    dictitem_T	*di;
-+    DICTKEY_DECL
-+
-+    if (d->dv_lock)
-+    {
-+	PyErr_SetVim(_("dict is locked"));
-+	return -1;
-+    }
-+
-+    DICTKEY_GET_NOTEMPTY(-1)
-+
-+    di = dict_find(d, key, -1);
-+
-+    if (valObject == NULL)
-+    {
-+	hashitem_T	*hi;
-+
-+	if (di == NULL)
-+	{
-+	    DICTKEY_UNREF
-+	    PyErr_SetString(PyExc_IndexError, _("no such key in dictionary"));
-+	    return -1;
-+	}
-+	hi = hash_find(&d->dv_hashtab, di->di_key);
-+	hash_remove(&d->dv_hashtab, hi);
-+	dictitem_free(di);
-+	return 0;
-+    }
-+
-+    if (ConvertFromPyObject(valObject, &tv) == -1)
-+	return -1;
-+
-+    if (di == NULL)
-+    {
-+	di = dictitem_alloc(key);
-+	if (di == NULL)
-+	{
-+	    PyErr_NoMemory();
-+	    return -1;
-+	}
-+	di->di_tv.v_lock = 0;
-+
-+	if (dict_add(d, di) == FAIL)
-+	{
-+	    DICTKEY_UNREF
-+	    vim_free(di);
-+	    PyErr_SetVim(_("failed to add key to dictionary"));
-+	    return -1;
-+	}
-+    }
-+    else
-+	clear_tv(&di->di_tv);
-+
-+    DICTKEY_UNREF
-+
-+    copy_tv(&tv, &di->di_tv);
-+    return 0;
-+}
-+
-+    static PyObject *
-+DictionaryListKeys(PyObject *self)
-+{
-+    dict_T	*dict = ((DictionaryObject *)(self))->dict;
-+    long_u	todo = dict->dv_hashtab.ht_used;
-+    Py_ssize_t	i = 0;
-+    PyObject	*r;
-+    hashitem_T	*hi;
-+
-+    r = PyList_New(todo);
-+    for (hi = dict->dv_hashtab.ht_array; todo > 0; ++hi)
-+    {
-+	if (!HASHITEM_EMPTY(hi))
-+	{
-+	    PyList_SetItem(r, i, PyBytes_FromString((char *)(hi->hi_key)));
-+	    --todo;
-+	    ++i;
-+	}
-+    }
-+    return r;
-+}
-+
-+static struct PyMethodDef DictionaryMethods[] = {
-+    {"keys", (PyCFunction)DictionaryListKeys, METH_NOARGS, ""},
-+    { NULL,	    NULL,		0,	    NULL }
-+};
-+
-+static PyTypeObject ListType;
-+
-+typedef struct
-+{
-+    PyObject_HEAD
-+    list_T	*list;
-+    pylinkedlist_T	ref;
-+} ListObject;
-+
-+    static PyObject *
-+ListNew(list_T *list)
-+{
-+    ListObject	*self;
-+
-+    self = PyObject_NEW(ListObject, &ListType);
-+    if (self == NULL)
-+	return NULL;
-+    self->list = list;
-+    ++list->lv_refcount;
-+
-+    pyll_add((PyObject *)(self), &self->ref, &lastlist);
-+
-+    return (PyObject *)(self);
-+}
-+
-+    static int
-+list_py_concat(list_T *l, PyObject *obj, PyObject *lookupDict)
-+{
-+    Py_ssize_t	i;
-+    Py_ssize_t	lsize = PySequence_Size(obj);
-+    PyObject	*litem;
-+    listitem_T	*li;
-+
-+    for(i=0; i<lsize; i++)
-+    {
-+	li = listitem_alloc();
-+	if (li == NULL)
-+	{
-+	    PyErr_NoMemory();
-+	    return -1;
-+	}
-+	li->li_tv.v_lock = 0;
-+
-+	litem = PySequence_GetItem(obj, i);
-+	if (litem == NULL)
-+	    return -1;
-+	if (_ConvertFromPyObject(litem, &li->li_tv, lookupDict) == -1)
-+	    return -1;
-+
-+	list_append(l, li);
-+    }
-+    return 0;
-+}
-+
-+    static int
-+pyseq_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
-+{
-+    list_T	*l;
-+
-+    l = list_alloc();
-+    if (l == NULL)
-+    {
-+	PyErr_NoMemory();
-+	return -1;
-+    }
-+
-+    tv->v_type = VAR_LIST;
-+    tv->vval.v_list = l;
-+
-+    if (list_py_concat(l, obj, lookupDict) == -1)
-+	return -1;
-+
-+    return 0;
-+}
-+
-+    static int
-+pyiter_to_tv(PyObject *obj, typval_T *tv, PyObject *lookupDict)
-+{
-+    PyObject	*iterator = PyObject_GetIter(obj);
-+    PyObject	*item;
-+    list_T	*l;
-+    listitem_T	*li;
-+
-+    l = list_alloc();
-+
-+    if (l == NULL)
-+    {
-+	PyErr_NoMemory();
-+	return -1;
-+    }
-+
-+    tv->vval.v_list = l;
-+    tv->v_type = VAR_LIST;
-+
-+
-+    if (iterator == NULL)
-+	return -1;
-+
-+    while ((item = PyIter_Next(obj)))
-+    {
-+	li = listitem_alloc();
-+	if (li == NULL)
-+	{
-+	    PyErr_NoMemory();
-+	    return -1;
-+	}
-+	li->li_tv.v_lock = 0;
-+
-+	if (_ConvertFromPyObject(item, &li->li_tv, lookupDict) == -1)
-+	    return -1;
-+
-+	list_append(l, li);
-+
-+	Py_DECREF(item);
-+    }
-+
-+    Py_DECREF(iterator);
-+    return 0;
-+}
-+
-+    static PyInt
-+ListLength(PyObject *self)
-+{
-+    return ((PyInt) (((ListObject *) (self))->list->lv_len));
-+}
-+
-+    static PyObject *
-+ListItem(PyObject *self, Py_ssize_t index)
-+{
-+    listitem_T	*li;
-+
-+    if (index>=ListLength(self))
-+    {
-+	PyErr_SetString(PyExc_IndexError, "list index out of range");
-+	return NULL;
-+    }
-+    li = list_find(((ListObject *) (self))->list, (long) index);
-+    if (li == NULL)
-+    {
-+	PyErr_SetVim(_("internal error: failed to get vim list item"));
-+	return NULL;
-+    }
-+    return ConvertToPyObject(&li->li_tv);
-+}
-+
-+#define PROC_RANGE \
-+    if (last < 0) {\
-+	if (last < -size) \
-+	    last = 0; \
-+	else \
-+	    last += size; \
-+    } \
-+    if (first < 0) \
-+	first = 0; \
-+    if (first > size) \
-+	first = size; \
-+    if (last > size) \
-+	last = size;
-+
-+    static PyObject *
-+ListSlice(PyObject *self, Py_ssize_t first, Py_ssize_t last)
-+{
-+    PyInt	i;
-+    PyInt	size = ListLength(self);
-+    PyInt	n;
-+    PyObject	*list;
-+    int		reversed = 0;
-+
-+    PROC_RANGE
-+    if (first >= last)
-+	first = last;
-+
-+    n = last-first;
-+    list = PyList_New(n);
-+    if (list == NULL)
-+	return NULL;
-+
-+    for (i = 0; i < n; ++i)
-+    {
-+	PyObject	*item = ListItem(self, i);
-+	if (item == NULL)
-+	{
-+	    Py_DECREF(list);
-+	    return NULL;
-+	}
-+
-+	if ((PyList_SetItem(list, ((reversed)?(n-i-1):(i)), item)))
-+	{
-+	    Py_DECREF(item);
-+	    Py_DECREF(list);
-+	    return NULL;
-+	}
-+    }
-+
-+    return list;
-+}
-+
-+    static int
-+ListAssItem(PyObject *self, Py_ssize_t index, PyObject *obj)
-+{
-+    typval_T	tv;
-+    list_T	*l = ((ListObject *) (self))->list;
-+    listitem_T	*li;
-+    Py_ssize_t	length = ListLength(self);
-+
-+    if (l->lv_lock)
-+    {
-+	PyErr_SetVim(_("list is locked"));
-+	return -1;
-+    }
-+    if (index>length || (index==length && obj==NULL))
-+    {
-+	PyErr_SetString(PyExc_IndexError, "list index out of range");
-+	return -1;
-+    }
-+
-+    if (obj == NULL)
-+    {
-+	li = list_find(l, (long) index);
-+	list_remove(l, li, li);
-+	clear_tv(&li->li_tv);
-+	vim_free(li);
-+	return 0;
-+    }
-+
-+    if (ConvertFromPyObject(obj, &tv) == -1)
-+	return -1;
-+
-+    if (index == length)
-+    {
-+	if (list_append_tv(l, &tv) == FAIL)
-+	{
-+	    PyErr_SetVim(_("Failed to add item to list"));
-+	    return -1;
-+	}
-+    }
-+    else
-+    {
-+	li = list_find(l, (long) index);
-+	clear_tv(&li->li_tv);
-+	copy_tv(&tv, &li->li_tv);
-+    }
-+    return 0;
-+}
-+
-+    static int
-+ListAssSlice(PyObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
-+{
-+    PyInt	size = ListLength(self);
-+    Py_ssize_t	i;
-+    Py_ssize_t	lsize;
-+    PyObject	*litem;
-+    listitem_T	*li;
-+    listitem_T	*next;
-+    typval_T	v;
-+    list_T	*l = ((ListObject *) (self))->list;
-+
-+    if (l->lv_lock)
-+    {
-+	PyErr_SetVim(_("list is locked"));
-+	return -1;
-+    }
-+
-+    PROC_RANGE
-+
-+    if (first == size)
-+	li = NULL;
-+    else
-+    {
-+	li = list_find(l, (long) first);
-+	if (li == NULL)
-+	{
-+	    PyErr_SetVim(_("internal error: no vim list item"));
-+	    return -1;
-+	}
-+	if (last > first)
-+	{
-+	    i = last - first;
-+	    while (i-- && li != NULL)
-+	    {
-+		next = li->li_next;
-+		listitem_remove(l, li);
-+		li = next;
-+	    }
-+	}
-+    }
-+
-+    if (obj == NULL)
-+	return 0;
-+
-+    if (!PyList_Check(obj))
-+    {
-+	PyErr_SetString(PyExc_TypeError, _("can only assign lists to slice"));
-+	return -1;
-+    }
-+
-+    lsize = PyList_Size(obj);
-+
-+    for(i=0; i<lsize; i++)
-+    {
-+	litem = PyList_GetItem(obj, i);
-+	if (litem == NULL)
-+	    return -1;
-+	if (ConvertFromPyObject(litem, &v) == -1)
-+	    return -1;
-+	if (list_insert_tv(l, &v, li) == FAIL)
-+	{
-+	    PyErr_SetVim(_("internal error: failed to add item to list"));
-+	    return -1;
-+	}
-+    }
-+    return 0;
-+}
-+
-+    static PyObject *
-+ListConcatInPlace(PyObject *self, PyObject *obj)
-+{
-+    list_T	*l = ((ListObject *) (self))->list;
-+    PyObject	*lookup_dict;
-+
-+    if (l->lv_lock)
-+    {
-+	PyErr_SetVim(_("list is locked"));
-+	return NULL;
-+    }
-+
-+    if (!PySequence_Check(obj))
-+    {
-+	PyErr_SetString(PyExc_TypeError, _("can only concatenate with lists"));
-+	return NULL;
-+    }
-+
-+    lookup_dict = PyDict_New();
-+    if (list_py_concat(l, obj, lookup_dict) == -1)
-+    {
-+	Py_DECREF(lookup_dict);
-+	return NULL;
-+    }
-+    Py_DECREF(lookup_dict);
-+
-+    Py_INCREF(self);
-+    return self;
-+}
-+
-+    static int
-+ListSetattr(ListObject *self, char *name, PyObject *val)
-+{
-+    if (val == NULL)
-+    {
-+	PyErr_SetString(PyExc_AttributeError, _("Cannot delete DictionaryObject attributes"));
-+	return -1;
-+    }
-+
-+    if (strcmp(name, "locked") == 0)
-+    {
-+	if (self->list->lv_lock == VAR_FIXED)
-+	{
-+	    PyErr_SetString(PyExc_TypeError, _("Cannot modify fixed list"));
-+	    return -1;
-+	}
-+	else
-+	{
-+	    if (!PyBool_Check(val))
-+	    {
-+		PyErr_SetString(PyExc_TypeError, _("Only boolean objects are allowed"));
-+		return -1;
-+	    }
-+
-+	    if (val == Py_True)
-+		self->list->lv_lock = VAR_LOCKED;
-+	    else
-+		self->list->lv_lock = 0;
-+	}
-+	return 0;
-+    }
-+    else
-+    {
-+	PyErr_SetString(PyExc_AttributeError, _("Cannot set this attribute"));
-+	return -1;
-+    }
-+}
-+
-+static struct PyMethodDef ListMethods[] = {
-+    {"extend", (PyCFunction)ListConcatInPlace, METH_O, ""},
-+    { NULL,	    NULL,		0,	    NULL }
-+};
-+
-+typedef struct
-+{
-+    PyObject_HEAD
-+    char_u	*name;
-+} FunctionObject;
-+
-+static PyTypeObject FunctionType;
-+
-+    static PyObject *
-+FunctionNew(char_u *name)
-+{
-+    FunctionObject	*self;
-+
-+    self = PyObject_NEW(FunctionObject, &FunctionType);
-+    if (self == NULL)
-+	return NULL;
-+    self->name = PyMem_New(char_u, STRLEN(name) + 1);
-+    if (self->name == NULL)
-+    {
-+	PyErr_NoMemory();
-+	return NULL;
-+    }
-+    STRCPY(self->name, name);
-+    func_ref(name);
-+    return (PyObject *)(self);
-+}
-+
-+    static PyObject *
-+FunctionCall(PyObject *self, PyObject *argsObject, PyObject *kwargs)
-+{
-+    FunctionObject	*this = (FunctionObject *)(self);
-+    char_u	*name = this->name;
-+    typval_T	args;
-+    typval_T	selfdicttv;
-+    typval_T	rettv;
-+    dict_T	*selfdict = NULL;
-+    PyObject	*selfdictObject;
-+    PyObject	*result;
-+    int		error;
-+
-+    if (ConvertFromPyObject(argsObject, &args) == -1)
-+	return NULL;
-+
-+    if (kwargs != NULL)
-+    {
-+	selfdictObject = PyDict_GetItemString(kwargs, "self");
-+	if (selfdictObject != NULL)
-+	{
-+	    if (!PyMapping_Check(selfdictObject))
-+	    {
-+		PyErr_SetString(PyExc_TypeError,
-+				   _("'self' argument must be a dictionary"));
-+		clear_tv(&args);
-+		return NULL;
-+	    }
-+	    if (ConvertFromPyObject(selfdictObject, &selfdicttv) == -1)
-+		return NULL;
-+	    selfdict = selfdicttv.vval.v_dict;
-+	}
-+    }
-+
-+    error = func_call(name, &args, selfdict, &rettv);
-+    if (error != OK)
-+    {
-+	result = NULL;
-+	PyErr_SetVim(_("failed to run function"));
-+    }
-+    else
-+	result = ConvertToPyObject(&rettv);
-+
-+    /* FIXME Check what should really be cleared. */
-+    clear_tv(&args);
-+    clear_tv(&rettv);
-+    /*
-+     * if (selfdict!=NULL)
-+     *     clear_tv(selfdicttv);
-+     */
-+
-+    return result;
-+}
-+
-+static struct PyMethodDef FunctionMethods[] = {
-+    {"__call__",    (PyCFunction)FunctionCall, METH_VARARGS|METH_KEYWORDS, ""},
-+    { NULL,	    NULL,		0,	    NULL }
-+};
-+
-+#define INVALID_WINDOW_VALUE ((win_T *)(-1))
-+
-+    static int
-+CheckWindow(WindowObject *this)
-+{
-+    if (this->win == INVALID_WINDOW_VALUE)
-+    {
-+	PyErr_SetVim(_("attempt to refer to deleted window"));
-+	return -1;
-+    }
-+
-+    return 0;
-+}
-+
-+static int WindowSetattr(PyObject *, char *, PyObject *);
-+static PyObject *WindowRepr(PyObject *);
-+
-+    static int
-+WindowSetattr(PyObject *self, char *name, PyObject *val)
-+{
-+    WindowObject *this = (WindowObject *)(self);
-+
-+    if (CheckWindow(this))
-+	return -1;
-+
-+    if (strcmp(name, "buffer") == 0)
-+    {
-+	PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
-+	return -1;
-+    }
-+    else if (strcmp(name, "cursor") == 0)
-+    {
-+	long lnum;
-+	long col;
-+
-+	if (!PyArg_Parse(val, "(ll)", &lnum, &col))
-+	    return -1;
-+
-+	if (lnum <= 0 || lnum > this->win->w_buffer->b_ml.ml_line_count)
-+	{
-+	    PyErr_SetVim(_("cursor position outside buffer"));
-+	    return -1;
-+	}
-+
-+	/* Check for keyboard interrupts */
-+	if (VimErrorCheck())
-+	    return -1;
-+
-+	this->win->w_cursor.lnum = lnum;
-+	this->win->w_cursor.col = col;
-+#ifdef FEAT_VIRTUALEDIT
-+	this->win->w_cursor.coladd = 0;
-+#endif
-+	/* When column is out of range silently correct it. */
-+	check_cursor_col_win(this->win);
-+
-+	update_screen(VALID);
-+	return 0;
-+    }
-+    else if (strcmp(name, "height") == 0)
-+    {
-+	int	height;
-+	win_T	*savewin;
-+
-+	if (!PyArg_Parse(val, "i", &height))
-+	    return -1;
-+
-+#ifdef FEAT_GUI
-+	need_mouse_correct = TRUE;
-+#endif
-+	savewin = curwin;
-+	curwin = this->win;
-+	win_setheight(height);
-+	curwin = savewin;
-+
-+	/* Check for keyboard interrupts */
-+	if (VimErrorCheck())
-+	    return -1;
-+
-+	return 0;
-+    }
-+#ifdef FEAT_VERTSPLIT
-+    else if (strcmp(name, "width") == 0)
-+    {
-+	int	width;
-+	win_T	*savewin;
-+
-+	if (!PyArg_Parse(val, "i", &width))
-+	    return -1;
-+
-+#ifdef FEAT_GUI
-+	need_mouse_correct = TRUE;
-+#endif
-+	savewin = curwin;
-+	curwin = this->win;
-+	win_setwidth(width);
-+	curwin = savewin;
-+
-+	/* Check for keyboard interrupts */
-+	if (VimErrorCheck())
-+	    return -1;
-+
-+	return 0;
-+    }
-+#endif
-+    else
-+    {
-+	PyErr_SetString(PyExc_AttributeError, name);
-+	return -1;
-+    }
-+}
-+
-+    static PyObject *
-+WindowRepr(PyObject *self)
- {
-     static char repr[100];
-     WindowObject *this = (WindowObject *)(self);
-@@ -698,6 +1624,7 @@
- {
-     const char *str;
-     char *save;
-+    PyObject *bytes;
-     PyInt len;
-     PyInt i;
-     char *p;
-@@ -708,8 +1635,9 @@
- 	return NULL;
-     }
- 
--    str = PyString_AsString(obj);
--    len = PyString_Size(obj);
-+    bytes = PyString_AsBytes(obj);  /* for Python 2 this does nothing */
-+    str = PyString_AsString(bytes);
-+    len = PyString_Size(bytes);
- 
-     /*
-      * Error checking: String must not contain newlines, as we
-@@ -748,6 +1676,7 @@
-     }
- 
-     save[i] = '\0';
-+    PyString_FreeBytes(bytes);  /* Python 2 does nothing here */
- 
-     return save;
- }
-@@ -831,42 +1760,142 @@
- 	    check_cursor_col();
- 	changed_cline_bef_curs();
-     }
--    invalidate_botline();
-+    invalidate_botline();
-+}
-+
-+/*
-+ * Replace a line in the specified buffer. The line number is
-+ * in Vim format (1-based). The replacement line is given as
-+ * a Python string object. The object is checked for validity
-+ * and correct format. Errors are returned as a value of FAIL.
-+ * The return value is OK on success.
-+ * If OK is returned and len_change is not NULL, *len_change
-+ * is set to the change in the buffer length.
-+ */
-+    static int
-+SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
-+{
-+    /* First of all, we check the thpe of the supplied Python object.
-+     * There are three cases:
-+     *	  1. NULL, or None - this is a deletion.
-+     *	  2. A string	   - this is a replacement.
-+     *	  3. Anything else - this is an error.
-+     */
-+    if (line == Py_None || line == NULL)
-+    {
-+	buf_T *savebuf = curbuf;
-+
-+	PyErr_Clear();
-+	curbuf = buf;
-+
-+	if (u_savedel((linenr_T)n, 1L) == FAIL)
-+	    PyErr_SetVim(_("cannot save undo information"));
-+	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
-+	    PyErr_SetVim(_("cannot delete line"));
-+	else
-+	{
-+	    if (buf == curwin->w_buffer)
-+		py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
-+	    deleted_lines_mark((linenr_T)n, 1L);
-+	}
-+
-+	curbuf = savebuf;
-+
-+	if (PyErr_Occurred() || VimErrorCheck())
-+	    return FAIL;
-+
-+	if (len_change)
-+	    *len_change = -1;
-+
-+	return OK;
-+    }
-+    else if (PyString_Check(line))
-+    {
-+	char *save = StringToLine(line);
-+	buf_T *savebuf = curbuf;
-+
-+	if (save == NULL)
-+	    return FAIL;
-+
-+	/* We do not need to free "save" if ml_replace() consumes it. */
-+	PyErr_Clear();
-+	curbuf = buf;
-+
-+	if (u_savesub((linenr_T)n) == FAIL)
-+	{
-+	    PyErr_SetVim(_("cannot save undo information"));
-+	    vim_free(save);
-+	}
-+	else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
-+	{
-+	    PyErr_SetVim(_("cannot replace line"));
-+	    vim_free(save);
-+	}
-+	else
-+	    changed_bytes((linenr_T)n, 0);
-+
-+	curbuf = savebuf;
-+
-+	/* Check that the cursor is not beyond the end of the line now. */
-+	if (buf == curwin->w_buffer)
-+	    check_cursor_col();
-+
-+	if (PyErr_Occurred() || VimErrorCheck())
-+	    return FAIL;
-+
-+	if (len_change)
-+	    *len_change = 0;
-+
-+	return OK;
-+    }
-+    else
-+    {
-+	PyErr_BadArgument();
-+	return FAIL;
-+    }
- }
- 
--/* Replace a line in the specified buffer. The line number is
-- * in Vim format (1-based). The replacement line is given as
-- * a Python string object. The object is checked for validity
-- * and correct format. Errors are returned as a value of FAIL.
-- * The return value is OK on success.
-+/* Replace a range of lines in the specified buffer. The line numbers are in
-+ * Vim format (1-based). The range is from lo up to, but not including, hi.
-+ * The replacement lines are given as a Python list of string objects. The
-+ * list is checked for validity and correct format. Errors are returned as a
-+ * value of FAIL.  The return value is OK on success.
-  * If OK is returned and len_change is not NULL, *len_change
-  * is set to the change in the buffer length.
-  */
-     static int
--SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
-+SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
- {
-     /* First of all, we check the thpe of the supplied Python object.
-      * There are three cases:
-      *	  1. NULL, or None - this is a deletion.
--     *	  2. A string	   - this is a replacement.
-+     *	  2. A list	   - this is a replacement.
-      *	  3. Anything else - this is an error.
-      */
--    if (line == Py_None || line == NULL)
-+    if (list == Py_None || list == NULL)
-     {
--	buf_T *savebuf = curbuf;
-+	PyInt	i;
-+	PyInt	n = (int)(hi - lo);
-+	buf_T	*savebuf = curbuf;
- 
- 	PyErr_Clear();
- 	curbuf = buf;
- 
--	if (u_savedel((linenr_T)n, 1L) == FAIL)
-+	if (u_savedel((linenr_T)lo, (long)n) == FAIL)
- 	    PyErr_SetVim(_("cannot save undo information"));
--	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
--	    PyErr_SetVim(_("cannot delete line"));
- 	else
- 	{
-+	    for (i = 0; i < n; ++i)
-+	    {
-+		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
-+		{
-+		    PyErr_SetVim(_("cannot delete line"));
-+		    break;
-+		}
-+	    }
- 	    if (buf == curwin->w_buffer)
--		py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
--	    deleted_lines_mark((linenr_T)n, 1L);
-+		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
-+	    deleted_lines_mark((linenr_T)lo, (long)i);
- 	}
- 
- 	curbuf = savebuf;
-@@ -875,46 +1904,135 @@
- 	    return FAIL;
- 
- 	if (len_change)
--	    *len_change = -1;
-+	    *len_change = -n;
- 
- 	return OK;
-     }
--    else if (PyString_Check(line))
-+    else if (PyList_Check(list))
-     {
--	char *save = StringToLine(line);
--	buf_T *savebuf = curbuf;
-+	PyInt	i;
-+	PyInt	new_len = PyList_Size(list);
-+	PyInt	old_len = hi - lo;
-+	PyInt	extra = 0;	/* lines added to text, can be negative */
-+	char	**array;
-+	buf_T	*savebuf;
- 
--	if (save == NULL)
--	    return FAIL;
-+	if (new_len == 0)	/* avoid allocating zero bytes */
-+	    array = NULL;
-+	else
-+	{
-+	    array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
-+	    if (array == NULL)
-+	    {
-+		PyErr_NoMemory();
-+		return FAIL;
-+	    }
-+	}
-+
-+	for (i = 0; i < new_len; ++i)
-+	{
-+	    PyObject *line = PyList_GetItem(list, i);
-+
-+	    array[i] = StringToLine(line);
-+	    if (array[i] == NULL)
-+	    {
-+		while (i)
-+		    vim_free(array[--i]);
-+		vim_free(array);
-+		return FAIL;
-+	    }
-+	}
-+
-+	savebuf = curbuf;
- 
--	/* We do not need to free "save" if ml_replace() consumes it. */
- 	PyErr_Clear();
- 	curbuf = buf;
- 
--	if (u_savesub((linenr_T)n) == FAIL)
--	{
-+	if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
- 	    PyErr_SetVim(_("cannot save undo information"));
--	    vim_free(save);
-+
-+	/* If the size of the range is reducing (ie, new_len < old_len) we
-+	 * need to delete some old_len. We do this at the start, by
-+	 * repeatedly deleting line "lo".
-+	 */
-+	if (!PyErr_Occurred())
-+	{
-+	    for (i = 0; i < old_len - new_len; ++i)
-+		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
-+		{
-+		    PyErr_SetVim(_("cannot delete line"));
-+		    break;
-+		}
-+	    extra -= i;
- 	}
--	else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
-+
-+	/* For as long as possible, replace the existing old_len with the
-+	 * new old_len. This is a more efficient operation, as it requires
-+	 * less memory allocation and freeing.
-+	 */
-+	if (!PyErr_Occurred())
- 	{
--	    PyErr_SetVim(_("cannot replace line"));
--	    vim_free(save);
-+	    for (i = 0; i < old_len && i < new_len; ++i)
-+		if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
-+								      == FAIL)
-+		{
-+		    PyErr_SetVim(_("cannot replace line"));
-+		    break;
-+		}
- 	}
- 	else
--	    changed_bytes((linenr_T)n, 0);
-+	    i = 0;
- 
--	curbuf = savebuf;
-+	/* Now we may need to insert the remaining new old_len. If we do, we
-+	 * must free the strings as we finish with them (we can't pass the
-+	 * responsibility to vim in this case).
-+	 */
-+	if (!PyErr_Occurred())
-+	{
-+	    while (i < new_len)
-+	    {
-+		if (ml_append((linenr_T)(lo + i - 1),
-+					(char_u *)array[i], 0, FALSE) == FAIL)
-+		{
-+		    PyErr_SetVim(_("cannot insert line"));
-+		    break;
-+		}
-+		vim_free(array[i]);
-+		++i;
-+		++extra;
-+	    }
-+	}
-+
-+	/* Free any left-over old_len, as a result of an error */
-+	while (i < new_len)
-+	{
-+	    vim_free(array[i]);
-+	    ++i;
-+	}
-+
-+	/* Free the array of old_len. All of its contents have now
-+	 * been dealt with (either freed, or the responsibility passed
-+	 * to vim.
-+	 */
-+	vim_free(array);
-+
-+	/* Adjust marks. Invalidate any which lie in the
-+	 * changed range, and move any in the remainder of the buffer.
-+	 */
-+	mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
-+						  (long)MAXLNUM, (long)extra);
-+	changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
- 
--	/* Check that the cursor is not beyond the end of the line now. */
- 	if (buf == curwin->w_buffer)
--	    check_cursor_col();
-+	    py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
-+
-+	curbuf = savebuf;
- 
- 	if (PyErr_Occurred() || VimErrorCheck())
- 	    return FAIL;
- 
- 	if (len_change)
--	    *len_change = 0;
-+	    *len_change = new_len - old_len;
- 
- 	return OK;
-     }
-@@ -925,7 +2043,6 @@
-     }
- }
- 
--
- /* Insert a number of lines into the specified buffer after the specifed line.
-  * The line number is in Vim format (1-based). The lines to be inserted are
-  * given as a Python list of string objects or as a single string. The lines
-@@ -1130,6 +2247,40 @@
-     return 0;
- }
- 
-+    static PyInt
-+RBAsSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
-+{
-+    PyInt size;
-+    PyInt len_change;
-+
-+    /* Self must be a valid buffer */
-+    if (CheckBuffer(self))
-+	return -1;
-+
-+    /* Sort out the slice range */
-+    size = end - start + 1;
-+
-+    if (lo < 0)
-+	lo = 0;
-+    else if (lo > size)
-+	lo = size;
-+    if (hi < 0)
-+	hi = 0;
-+    if (hi < lo)
-+	hi = lo;
-+    else if (hi > size)
-+	hi = size;
-+
-+    if (SetBufferLineList(self->buf, lo + start, hi + start,
-+						    val, &len_change) == FAIL)
-+	return -1;
-+
-+    if (new_end)
-+	*new_end = end + len_change;
-+
-+    return 0;
-+}
-+
- 
-     static PyObject *
- RBAppend(BufferObject *self, PyObject *args, PyInt start, PyInt end, PyInt *new_end)
-@@ -1267,6 +2418,9 @@
-     {"append",	    BufferAppend,	1,	    "Append data to Vim buffer" },
-     {"mark",	    BufferMark,		1,	    "Return (row,col) representing position of named mark" },
-     {"range",	    BufferRange,	1,	    "Return a range object which represents the part of the given buffer between line numbers s and e" },
-+#if PY_VERSION_HEX >= 0x03000000
-+    {"__dir__",	    BufferDir,		4,	    "List its attributes" },
-+#endif
-     { NULL,	    NULL,		0,	    NULL }
- };
- 
-@@ -1347,3 +2501,278 @@
-     { NULL,	    NULL,		0,	    NULL }
- };
- 
-+    static void
-+set_ref_in_py(const int copyID)
-+{
-+    pylinkedlist_T	*cur;
-+    dict_T	*dd;
-+    list_T	*ll;
-+
-+    if (lastdict != NULL)
-+	for(cur = lastdict ; cur != NULL ; cur = cur->pll_prev)
-+	{
-+	    dd = ((DictionaryObject *) (cur->pll_obj))->dict;
-+	    if (dd->dv_copyID != copyID)
-+	    {
-+		dd->dv_copyID = copyID;
-+		set_ref_in_ht(&dd->dv_hashtab, copyID);
-+	    }
-+	}
-+
-+    if (lastlist != NULL)
-+	for(cur = lastlist ; cur != NULL ; cur = cur->pll_prev)
-+	{
-+	    ll = ((ListObject *) (cur->pll_obj))->list;
-+	    if (ll->lv_copyID != copyID)
-+	    {
-+		ll->lv_copyID = copyID;
-+		set_ref_in_list(ll, copyID);
-+	    }
-+	}
-+}
-+
-+    static int
-+set_string_copy(char_u *str, typval_T *tv)
-+{
-+    tv->vval.v_string = vim_strsave(str);
-+    if (tv->vval.v_string == NULL)
-+    {
-+	PyErr_NoMemory();
-+	return -1;
-+    }
-+    return 0;
-+}
-+
-+#ifdef FEAT_EVAL
-+typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
-+
-+    static int
-+convert_dl(PyObject *obj, typval_T *tv,
-+				    pytotvfunc py_to_tv, PyObject *lookupDict)
-+{
-+    PyObject	*capsule;
-+    char	hexBuf[sizeof(void *) * 2 + 3];
-+
-+    sprintf(hexBuf, "%p", obj);
-+
-+# ifdef PY_USE_CAPSULE
-+    capsule = PyDict_GetItemString(lookupDict, hexBuf);
-+# else
-+    capsule = (PyObject *)PyDict_GetItemString(lookupDict, hexBuf);
-+# endif
-+    if (capsule == NULL)
-+    {
-+# ifdef PY_USE_CAPSULE
-+	capsule = PyCapsule_New(tv, NULL, NULL);
-+# else
-+	capsule = PyCObject_FromVoidPtr(tv, NULL);
-+# endif
-+	PyDict_SetItemString(lookupDict, hexBuf, capsule);
-+	Py_DECREF(capsule);
-+	if (py_to_tv(obj, tv, lookupDict) == -1)
-+	{
-+	    tv->v_type = VAR_UNKNOWN;
-+	    return -1;
-+	}
-+	/* As we are not using copy_tv which increments reference count we must
-+	 * do it ourself. */
-+	switch(tv->v_type)
-+	{
-+	    case VAR_DICT: ++tv->vval.v_dict->dv_refcount; break;
-+	    case VAR_LIST: ++tv->vval.v_list->lv_refcount; break;
-+	}
-+    }
-+    else
-+    {
-+	typval_T	*v;
-+
-+# ifdef PY_USE_CAPSULE
-+	v = PyCapsule_GetPointer(capsule, NULL);
-+# else
-+	v = PyCObject_AsVoidPtr(capsule);
-+# endif
-+	copy_tv(v, tv);
-+    }
-+    return 0;
-+}
-+
-+    static int
-+ConvertFromPyObject(PyObject *obj, typval_T *tv)
-+{
-+    PyObject	*lookup_dict;
-+    int		r;
-+
-+    lookup_dict = PyDict_New();
-+    r = _ConvertFromPyObject(obj, tv, lookup_dict);
-+    Py_DECREF(lookup_dict);
-+    return r;
-+}
-+
-+    static int
-+_ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookupDict)
-+{
-+    if (obj->ob_type == &DictionaryType)
-+    {
-+	tv->v_type = VAR_DICT;
-+	tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
-+	++tv->vval.v_dict->dv_refcount;
-+    }
-+    else if (obj->ob_type == &ListType)
-+    {
-+	tv->v_type = VAR_LIST;
-+	tv->vval.v_list = (((ListObject *)(obj))->list);
-+	++tv->vval.v_list->lv_refcount;
-+    }
-+    else if (obj->ob_type == &FunctionType)
-+    {
-+	if (set_string_copy(((FunctionObject *) (obj))->name, tv) == -1)
-+	    return -1;
-+
-+	tv->v_type = VAR_FUNC;
-+	func_ref(tv->vval.v_string);
-+    }
-+#if PY_MAJOR_VERSION >= 3
-+    else if (PyBytes_Check(obj))
-+    {
-+	char_u	*result;
-+
-+	if (PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1)
-+	    return -1;
-+	if (result == NULL)
-+	    return -1;
-+
-+	if (set_string_copy(result, tv) == -1)
-+	    return -1;
-+
-+	tv->v_type = VAR_STRING;
-+    }
-+    else if (PyUnicode_Check(obj))
-+    {
-+	PyObject	*bytes;
-+	char_u	*result;
-+
-+	bytes = PyString_AsBytes(obj);
-+	if (bytes == NULL)
-+	    return -1;
-+
-+	if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1)
-+	    return -1;
-+	if (result == NULL)
-+	    return -1;
-+
-+	if (set_string_copy(result, tv) == -1)
-+	{
-+	    Py_XDECREF(bytes);
-+	    return -1;
-+	}
-+	Py_XDECREF(bytes);
-+
-+	tv->v_type = VAR_STRING;
-+    }
-+#else
-+    else if (PyUnicode_Check(obj))
-+    {
-+	PyObject	*bytes;
-+	char_u	*result;
-+
-+	bytes = PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
-+	if (bytes == NULL)
-+	    return -1;
-+
-+	if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1)
-+	    return -1;
-+	if (result == NULL)
-+	    return -1;
-+
-+	if (set_string_copy(result, tv) == -1)
-+	{
-+	    Py_XDECREF(bytes);
-+	    return -1;
-+	}
-+	Py_XDECREF(bytes);
-+
-+	tv->v_type = VAR_STRING;
-+    }
-+    else if (PyString_Check(obj))
-+    {
-+	char_u	*result;
-+
-+	if(PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1)
-+	    return -1;
-+	if (result == NULL)
-+	    return -1;
-+
-+	if (set_string_copy(result, tv) == -1)
-+	    return -1;
-+
-+	tv->v_type = VAR_STRING;
-+    }
-+    else if (PyInt_Check(obj))
-+    {
-+	tv->v_type = VAR_NUMBER;
-+	tv->vval.v_number = (varnumber_T) PyInt_AsLong(obj);
-+    }
-+#endif
-+    else if (PyLong_Check(obj))
-+    {
-+	tv->v_type = VAR_NUMBER;
-+	tv->vval.v_number = (varnumber_T) PyLong_AsLong(obj);
-+    }
-+    else if (PyDict_Check(obj))
-+	return convert_dl(obj, tv, pydict_to_tv, lookupDict);
-+#ifdef FEAT_FLOAT
-+    else if (PyFloat_Check(obj))
-+    {
-+	tv->v_type = VAR_FLOAT;
-+	tv->vval.v_float = (float_T) PyFloat_AsDouble(obj);
-+    }
-+#endif
-+    else if (PyIter_Check(obj))
-+	return convert_dl(obj, tv, pyiter_to_tv, lookupDict);
-+    else if (PySequence_Check(obj))
-+	return convert_dl(obj, tv, pyseq_to_tv, lookupDict);
-+    else if (PyMapping_Check(obj))
-+	return convert_dl(obj, tv, pymap_to_tv, lookupDict);
-+    else
-+    {
-+	PyErr_SetString(PyExc_TypeError, _("unable to convert to vim structure"));
-+	return -1;
-+    }
-+    return 0;
-+}
-+
-+    static PyObject *
-+ConvertToPyObject(typval_T *tv)
-+{
-+    if (tv == NULL)
-+    {
-+	PyErr_SetVim(_("NULL reference passed"));
-+	return NULL;
-+    }
-+    switch (tv->v_type)
-+    {
-+	case VAR_STRING:
-+	    return PyBytes_FromString(tv->vval.v_string == NULL
-+					    ? "" : (char *)tv->vval.v_string);
-+	case VAR_NUMBER:
-+	    return PyLong_FromLong((long) tv->vval.v_number);
-+#ifdef FEAT_FLOAT
-+	case VAR_FLOAT:
-+	    return PyFloat_FromDouble((double) tv->vval.v_float);
-+#endif
-+	case VAR_LIST:
-+	    return ListNew(tv->vval.v_list);
-+	case VAR_DICT:
-+	    return DictionaryNew(tv->vval.v_dict);
-+	case VAR_FUNC:
-+	    return FunctionNew(tv->vval.v_string == NULL
-+					  ? (char_u *)"" : tv->vval.v_string);
-+	case VAR_UNKNOWN:
-+	    Py_INCREF(Py_None);
-+	    return Py_None;
-+	default:
-+	    PyErr_SetVim(_("internal error: invalid value type"));
-+	    return NULL;
-+    }
-+}
-+#endif
-diff -Naur vim73.orig/src/if_python.c vim73/src/if_python.c
---- vim73.orig/src/if_python.c	2010-08-13 13:59:41.000000000 +0000
-+++ vim73/src/if_python.c	2012-11-01 20:35:48.000000000 +0000
-@@ -1,4 +1,4 @@
--/* vi:set ts=8 sts=4 sw=4:
-+/* vi:set ts=8 sts=4 sw=4 noet:
-  *
-  * VIM - Vi IMproved	by Bram Moolenaar
-  *
-@@ -44,8 +44,6 @@
- # undef _XOPEN_SOURCE	/* pyconfig.h defines it as well. */
- #endif
- 
--#define PY_SSIZE_T_CLEAN
--
- #include <Python.h>
- #if defined(MACOS) && !defined(MACOS_X_UNIX)
- # include "macglue.h"
-@@ -54,8 +52,18 @@
- #undef main /* Defined in python.h - aargh */
- #undef HAVE_FCNTL_H /* Clash with os_win32.h */
- 
-+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
-+# define PY_SSIZE_T_CLEAN
-+#endif
-+
- static void init_structs(void);
- 
-+#define PyBytes_FromString PyString_FromString
-+
-+/* No-op conversion functions, use with care! */
-+#define PyString_AsBytes(obj) (obj)
-+#define PyString_FreeBytes(obj)
-+
- #if !defined(FEAT_PYTHON) && defined(PROTO)
- /* Use this to be able to generate prototypes without python being used. */
- # define PyObject Py_ssize_t
-@@ -65,6 +73,10 @@
- # define PySequenceMethods Py_ssize_t
- #endif
- 
-+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
-+# define PY_USE_CAPSULE
-+#endif
-+
- #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
- # define PyInt Py_ssize_t
- # define PyInquiry lenfunc
-@@ -102,7 +114,7 @@
- #  include <dlfcn.h>
- #  define FARPROC void*
- #  define HINSTANCE void*
--#  ifdef PY_NO_RTLD_GLOBAL
-+#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
- #   define load_dll(n) dlopen((n), RTLD_LAZY)
- #  else
- #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
-@@ -110,7 +122,7 @@
- #  define close_dll dlclose
- #  define symbol_from_dll dlsym
- # else
--#  define load_dll LoadLibrary
-+#  define load_dll vimLoadLib
- #  define close_dll FreeLibrary
- #  define symbol_from_dll GetProcAddress
- # endif
-@@ -118,17 +130,21 @@
- /* This makes if_python.c compile without warnings against Python 2.5
-  * on Win32 and Win64. */
- # undef PyRun_SimpleString
-+# undef PyRun_String
- # undef PyArg_Parse
- # undef PyArg_ParseTuple
- # undef Py_BuildValue
- # undef Py_InitModule4
- # undef Py_InitModule4_64
-+# undef PyObject_CallMethod
- 
- /*
-  * Wrapper defines
-  */
- # define PyArg_Parse dll_PyArg_Parse
- # define PyArg_ParseTuple dll_PyArg_ParseTuple
-+# define PyMem_Free dll_PyMem_Free
-+# define PyMem_Malloc dll_PyMem_Malloc
- # define PyDict_SetItemString dll_PyDict_SetItemString
- # define PyErr_BadArgument dll_PyErr_BadArgument
- # define PyErr_Clear dll_PyErr_Clear
-@@ -145,35 +161,71 @@
- # endif
- # define PyInt_AsLong dll_PyInt_AsLong
- # define PyInt_FromLong dll_PyInt_FromLong
-+# define PyLong_AsLong dll_PyLong_AsLong
-+# define PyLong_FromLong dll_PyLong_FromLong
-+# define PyBool_Type (*dll_PyBool_Type)
- # define PyInt_Type (*dll_PyInt_Type)
-+# define PyLong_Type (*dll_PyLong_Type)
- # define PyList_GetItem dll_PyList_GetItem
- # define PyList_Append dll_PyList_Append
- # define PyList_New dll_PyList_New
- # define PyList_SetItem dll_PyList_SetItem
- # define PyList_Size dll_PyList_Size
- # define PyList_Type (*dll_PyList_Type)
-+# define PySequence_Check dll_PySequence_Check
-+# define PySequence_Size dll_PySequence_Size
-+# define PySequence_GetItem dll_PySequence_GetItem
-+# define PyTuple_Size dll_PyTuple_Size
-+# define PyTuple_GetItem dll_PyTuple_GetItem
-+# define PyTuple_Type (*dll_PyTuple_Type)
- # define PyImport_ImportModule dll_PyImport_ImportModule
- # define PyDict_New dll_PyDict_New
- # define PyDict_GetItemString dll_PyDict_GetItemString
-+# define PyDict_Next dll_PyDict_Next
-+# ifdef PyMapping_Items
-+#  define PY_NO_MAPPING_ITEMS
-+# else
-+#  define PyMapping_Items dll_PyMapping_Items
-+# endif
-+# define PyObject_CallMethod dll_PyObject_CallMethod
-+# define PyMapping_Check dll_PyMapping_Check
-+# define PyIter_Next dll_PyIter_Next
- # define PyModule_GetDict dll_PyModule_GetDict
- # define PyRun_SimpleString dll_PyRun_SimpleString
-+# define PyRun_String dll_PyRun_String
- # define PyString_AsString dll_PyString_AsString
-+# define PyString_AsStringAndSize dll_PyString_AsStringAndSize
- # define PyString_FromString dll_PyString_FromString
- # define PyString_FromStringAndSize dll_PyString_FromStringAndSize
- # define PyString_Size dll_PyString_Size
- # define PyString_Type (*dll_PyString_Type)
-+# define PyUnicode_Type (*dll_PyUnicode_Type)
-+# undef PyUnicode_AsEncodedString
-+# define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString
-+# define PyFloat_AsDouble dll_PyFloat_AsDouble
-+# define PyFloat_FromDouble dll_PyFloat_FromDouble
-+# define PyFloat_Type (*dll_PyFloat_Type)
-+# define PyImport_AddModule (*dll_PyImport_AddModule)
- # define PySys_SetObject dll_PySys_SetObject
- # define PySys_SetArgv dll_PySys_SetArgv
- # define PyType_Type (*dll_PyType_Type)
-+# define PyType_Ready (*dll_PyType_Ready)
- # define Py_BuildValue dll_Py_BuildValue
- # define Py_FindMethod dll_Py_FindMethod
- # define Py_InitModule4 dll_Py_InitModule4
-+# define Py_SetPythonHome dll_Py_SetPythonHome
- # define Py_Initialize dll_Py_Initialize
- # define Py_Finalize dll_Py_Finalize
- # define Py_IsInitialized dll_Py_IsInitialized
- # define _PyObject_New dll__PyObject_New
-+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
-+#  define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
-+# endif
- # define _Py_NoneStruct (*dll__Py_NoneStruct)
-+# define _Py_ZeroStruct (*dll__Py_ZeroStruct)
-+# define _Py_TrueStruct (*dll__Py_TrueStruct)
- # define PyObject_Init dll__PyObject_Init
-+# define PyObject_GetIter dll_PyObject_GetIter
- # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
- #  define PyType_IsSubtype dll_PyType_IsSubtype
- # endif
-@@ -181,12 +233,21 @@
- #  define PyObject_Malloc dll_PyObject_Malloc
- #  define PyObject_Free dll_PyObject_Free
- # endif
-+# ifdef PY_USE_CAPSULE
-+#  define PyCapsule_New dll_PyCapsule_New
-+#  define PyCapsule_GetPointer dll_PyCapsule_GetPointer
-+# else
-+#  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
-+#  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
-+# endif
- 
- /*
-  * Pointers for dynamic link
-  */
- static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
- static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
-+static int(*dll_PyMem_Free)(void *);
-+static void* (*dll_PyMem_Malloc)(size_t);
- static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
- static int(*dll_PyErr_BadArgument)(void);
- static void(*dll_PyErr_Clear)(void);
-@@ -200,38 +261,71 @@
- # ifdef PY_CAN_RECURSE
- static PyGILState_STATE	(*dll_PyGILState_Ensure)(void);
- static void (*dll_PyGILState_Release)(PyGILState_STATE);
--#endif
-+# endif
- static long(*dll_PyInt_AsLong)(PyObject *);
- static PyObject*(*dll_PyInt_FromLong)(long);
-+static long(*dll_PyLong_AsLong)(PyObject *);
-+static PyObject*(*dll_PyLong_FromLong)(long);
-+static PyTypeObject* dll_PyBool_Type;
- static PyTypeObject* dll_PyInt_Type;
-+static PyTypeObject* dll_PyLong_Type;
- static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
- static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
- static PyObject*(*dll_PyList_New)(PyInt size);
- static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
- static PyInt(*dll_PyList_Size)(PyObject *);
- static PyTypeObject* dll_PyList_Type;
-+static int (*dll_PySequence_Check)(PyObject *);
-+static PyInt(*dll_PySequence_Size)(PyObject *);
-+static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt);
-+static PyInt(*dll_PyTuple_Size)(PyObject *);
-+static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
-+static PyTypeObject* dll_PyTuple_Type;
- static PyObject*(*dll_PyImport_ImportModule)(const char *);
- static PyObject*(*dll_PyDict_New)(void);
- static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
-+static int (*dll_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
-+# ifndef PY_NO_MAPPING_ITEMS
-+static PyObject* (*dll_PyMapping_Items)(PyObject *);
-+# endif
-+static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
-+static int (*dll_PyMapping_Check)(PyObject *);
-+static PyObject* (*dll_PyIter_Next)(PyObject *);
- static PyObject*(*dll_PyModule_GetDict)(PyObject *);
- static int(*dll_PyRun_SimpleString)(char *);
-+static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *);
- static char*(*dll_PyString_AsString)(PyObject *);
-+static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, int *);
- static PyObject*(*dll_PyString_FromString)(const char *);
- static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
- static PyInt(*dll_PyString_Size)(PyObject *);
- static PyTypeObject* dll_PyString_Type;
-+static PyTypeObject* dll_PyUnicode_Type;
-+static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *);
-+static double(*dll_PyFloat_AsDouble)(PyObject *);
-+static PyObject*(*dll_PyFloat_FromDouble)(double);
-+static PyTypeObject* dll_PyFloat_Type;
- static int(*dll_PySys_SetObject)(char *, PyObject *);
- static int(*dll_PySys_SetArgv)(int, char **);
- static PyTypeObject* dll_PyType_Type;
-+static int (*dll_PyType_Ready)(PyTypeObject *type);
- static PyObject*(*dll_Py_BuildValue)(char *, ...);
- static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
- static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
-+static PyObject*(*dll_PyImport_AddModule)(char *);
-+static void(*dll_Py_SetPythonHome)(char *home);
- static void(*dll_Py_Initialize)(void);
- static void(*dll_Py_Finalize)(void);
- static int(*dll_Py_IsInitialized)(void);
- static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
- static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
-+static PyObject* (*dll_PyObject_GetIter)(PyObject *);
-+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
-+static iternextfunc dll__PyObject_NextNotImplemented;
-+# endif
- static PyObject* dll__Py_NoneStruct;
-+static PyObject* _Py_ZeroStruct;
-+static PyObject* dll__Py_TrueStruct;
- # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
- static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
- # endif
-@@ -239,6 +333,13 @@
- static void* (*dll_PyObject_Malloc)(size_t);
- static void (*dll_PyObject_Free)(void*);
- # endif
-+# ifdef PY_USE_CAPSULE
-+static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
-+static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
-+# else
-+static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
-+static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
-+# endif
- 
- static HINSTANCE hinstPython = 0; /* Instance of python.dll */
- 
-@@ -265,8 +366,17 @@
-     PYTHON_PROC *ptr;
- } python_funcname_table[] =
- {
-+#ifndef PY_SSIZE_T_CLEAN
-     {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
-     {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
-+    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
-+#else
-+    {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse},
-+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
-+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue},
-+#endif
-+    {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
-+    {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
-     {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
-     {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
-     {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
-@@ -283,39 +393,71 @@
- # endif
-     {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong},
-     {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
-+    {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
-+    {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
-+    {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type},
-     {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
-+    {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
-     {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
-     {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append},
-     {"PyList_New", (PYTHON_PROC*)&dll_PyList_New},
-     {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem},
-     {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size},
-     {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type},
-+    {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem},
-+    {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size},
-+    {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check},
-+    {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
-+    {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
-+    {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
-     {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
-     {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
-+    {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
-     {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
-+# ifndef PY_NO_MAPPING_ITEMS
-+    {"PyMapping_Items", (PYTHON_PROC*)&dll_PyMapping_Items},
-+# endif
-+    {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
-+    {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
-+    {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
-     {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict},
-     {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString},
-+    {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String},
-     {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString},
-+    {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize},
-     {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString},
-     {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize},
-     {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
-     {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type},
-+    {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type},
-+    {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type},
-+    {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble},
-+    {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
-+    {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule},
-     {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
-     {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
-     {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
--    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
-+    {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
-     {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
--# if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
-+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
-+	&& SIZEOF_SIZE_T != SIZEOF_INT
-     {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
- # else
-     {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
- # endif
-+    {"Py_SetPythonHome", (PYTHON_PROC*)&dll_Py_SetPythonHome},
-     {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize},
-     {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
-     {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
-     {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
-     {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
-+    {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
-+# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
-+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
-+# endif
-     {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
-+    {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct},
-+    {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct},
- # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
-     {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
- # endif
-@@ -323,6 +465,13 @@
-     {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
-     {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
- # endif
-+# ifdef PY_USE_CAPSULE
-+    {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
-+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
-+# else
-+    {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
-+    {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
-+# endif
-     {"", NULL},
- };
- 
-@@ -348,14 +497,16 @@
- python_runtime_link_init(char *libname, int verbose)
- {
-     int i;
-+    void *ucs_as_encoded_string;
- 
--#if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON3)
-+#if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3)
-     /* Can't have Python and Python3 loaded at the same time.
-      * It cause a crash, because RTLD_GLOBAL is needed for
-      * standard C extension libraries of one or both python versions. */
-     if (python3_loaded())
-     {
--	EMSG(_("E836: This Vim cannot execute :python after using :py3"));
-+	if (verbose)
-+	    EMSG(_("E836: This Vim cannot execute :python after using :py3"));
- 	return FAIL;
-     }
- #endif
-@@ -382,6 +533,25 @@
- 	    return FAIL;
- 	}
-     }
-+
-+    /* Load unicode functions separately as only the ucs2 or the ucs4 functions
-+     * will be present in the library. */
-+    ucs_as_encoded_string = symbol_from_dll(hinstPython,
-+					     "PyUnicodeUCS2_AsEncodedString");
-+    if (ucs_as_encoded_string == NULL)
-+	ucs_as_encoded_string = symbol_from_dll(hinstPython,
-+					     "PyUnicodeUCS4_AsEncodedString");
-+    if (ucs_as_encoded_string != NULL)
-+	py_PyUnicode_AsEncodedString = ucs_as_encoded_string;
-+    else
-+    {
-+	close_dll(hinstPython);
-+	hinstPython = 0;
-+	if (verbose)
-+	    EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*");
-+	return FAIL;
-+    }
-+
-     return OK;
- }
- 
-@@ -420,10 +590,26 @@
- 
- static PyObject *BufferNew (buf_T *);
- static PyObject *WindowNew(win_T *);
-+static PyObject *DictionaryNew(dict_T *);
- static PyObject *LineToString(const char *);
- 
- static PyTypeObject RangeType;
- 
-+static int initialised = 0;
-+#define PYINITIALISED initialised
-+
-+#define DICTKEY_GET(err) \
-+    if (!PyString_Check(keyObject)) \
-+    { \
-+	PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
-+	return err; \
-+    } \
-+    if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \
-+	return err;
-+
-+#define DICTKEY_UNREF
-+#define DICTKEY_DECL
-+
- /*
-  * Include the code shared with if_python3.c
-  */
-@@ -437,6 +623,8 @@
- static PyInt RangeStart;
- static PyInt RangeEnd;
- 
-+static PyObject *globals;
-+
- static void PythonIO_Flush(void);
- static int PythonIO_Init(void);
- static int PythonMod_Init(void);
-@@ -452,8 +640,6 @@
-  * 1. Python interpreter main program.
-  */
- 
--static int initialised = 0;
--
- #if PYTHON_API_VERSION < 1007 /* Python 1.4 */
- typedef PyObject PyThreadState;
- #endif
-@@ -543,6 +729,10 @@
- 	}
- #endif
- 
-+#ifdef PYTHON_HOME
-+	Py_SetPythonHome(PYTHON_HOME);
-+#endif
-+
- 	init_structs();
- 
- #if !defined(MACOS) || defined(MACOS_X_UNIX)
-@@ -550,9 +740,12 @@
- #else
- 	PyMac_Initialize();
- #endif
--	/* initialise threads */
-+	/* Initialise threads, and save the state using PyGILState_Ensure.
-+	 * Without the call to PyGILState_Ensure, thread specific state (such
-+	 * as the system trace hook), will be lost between invocations of
-+	 * Python code. */
- 	PyEval_InitThreads();
--
-+	pygilstate = PyGILState_Ensure();
- #ifdef DYNAMIC_PYTHON
- 	get_exceptions();
- #endif
-@@ -563,6 +756,8 @@
- 	if (PythonMod_Init())
- 	    goto fail;
- 
-+	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
-+
- 	/* Remove the element from sys.path that was added because of our
- 	 * argv[0] value in PythonMod_Init().  Previously we used an empty
- 	 * string, but dependinding on the OS we then get an empty entry or
-@@ -591,7 +786,7 @@
-  * External interface
-  */
-     static void
--DoPythonCommand(exarg_T *eap, const char *cmd)
-+DoPythonCommand(exarg_T *eap, const char *cmd, typval_T *rettv)
- {
- #ifndef PY_CAN_RECURSE
-     static int		recursive = 0;
-@@ -621,8 +816,16 @@
-     if (Python_Init())
- 	goto theend;
- 
--    RangeStart = eap->line1;
--    RangeEnd = eap->line2;
-+    if (rettv == NULL)
-+    {
-+	RangeStart = eap->line1;
-+	RangeEnd = eap->line2;
-+    }
-+    else
-+    {
-+	RangeStart = (PyInt) curwin->w_cursor.lnum;
-+	RangeEnd = RangeStart;
-+    }
-     Python_Release_Vim();	    /* leave vim */
- 
- #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
-@@ -640,7 +843,23 @@
- 
-     Python_RestoreThread();	    /* enter python */
- 
--    PyRun_SimpleString((char *)(cmd));
-+    if (rettv == NULL)
-+	PyRun_SimpleString((char *)(cmd));
-+    else
-+    {
-+	PyObject	*r;
-+
-+	r = PyRun_String((char *)(cmd), Py_eval_input, globals, globals);
-+	if (r == NULL)
-+	    EMSG(_("E858: Eval did not return a valid python object"));
-+	else
-+	{
-+	    if (ConvertFromPyObject(r, rettv) == -1)
-+		EMSG(_("E859: Failed to convert returned python object to vim value"));
-+	    Py_DECREF(r);
-+	}
-+	PyErr_Clear();
-+    }
- 
-     Python_SaveThread();	    /* leave python */
- 
-@@ -662,7 +881,7 @@
- #ifndef PY_CAN_RECURSE
-     --recursive;
- #endif
--    return;	    /* keeps lint happy */
-+    return;
- }
- 
- /*
-@@ -677,9 +896,9 @@
-     if (!eap->skip)
-     {
- 	if (script == NULL)
--	    DoPythonCommand(eap, (char *)eap->arg);
-+	    DoPythonCommand(eap, (char *)eap->arg, NULL);
- 	else
--	    DoPythonCommand(eap, (char *)script);
-+	    DoPythonCommand(eap, (char *)script, NULL);
-     }
-     vim_free(script);
- }
-@@ -725,7 +944,7 @@
-     *p++ = '\0';
- 
-     /* Execute the file */
--    DoPythonCommand(eap, buffer);
-+    DoPythonCommand(eap, buffer, NULL);
- }
- 
- /******************************************************
-@@ -744,36 +963,13 @@
-     return Py_FindMethod(OutputMethods, self, name);
- }
- 
--    static int
--OutputSetattr(PyObject *self, char *name, PyObject *val)
--{
--    if (val == NULL) {
--	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
--	return -1;
--    }
--
--    if (strcmp(name, "softspace") == 0)
--    {
--	if (!PyInt_Check(val)) {
--	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
--	    return -1;
--	}
--
--	((OutputObject *)(self))->softspace = PyInt_AsLong(val);
--	return 0;
--    }
--
--    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
--    return -1;
--}
--
- /***************/
- 
-     static int
- PythonIO_Init(void)
- {
-     /* Fixups... */
--    OutputType.ob_type = &PyType_Type;
-+    PyType_Ready(&OutputType);
- 
-     return PythonIO_Init_io();
- }
-@@ -782,6 +978,9 @@
-  * 3. Implementation of the Vim module for Python
-  */
- 
-+static PyObject *ConvertToPyObject(typval_T *);
-+static int ConvertFromPyObject(PyObject *, typval_T *);
-+
- /* Window type - Implementation functions
-  * --------------------------------------
-  */
-@@ -823,48 +1022,10 @@
- static PyObject *CurrentGetattr(PyObject *, char *);
- static int CurrentSetattr(PyObject *, char *, PyObject *);
- 
--/* Common routines for buffers and line ranges
-- * -------------------------------------------
-- */
--
--    static PyInt
--RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
--{
--    PyInt size;
--    PyInt len_change;
--
--    /* Self must be a valid buffer */
--    if (CheckBuffer(self))
--	return -1;
--
--    /* Sort out the slice range */
--    size = end - start + 1;
--
--    if (lo < 0)
--	lo = 0;
--    else if (lo > size)
--	lo = size;
--    if (hi < 0)
--	hi = 0;
--    if (hi < lo)
--	hi = lo;
--    else if (hi > size)
--	hi = size;
--
--    if (SetBufferLineList(self->buf, lo + start, hi + start,
--						    val, &len_change) == FAIL)
--	return -1;
--
--    if (new_end)
--	*new_end = end + len_change;
--
--    return 0;
--}
--
- static PySequenceMethods BufferAsSeq = {
-     (PyInquiry)		BufferLength,	    /* sq_length,    len(x)   */
--    (binaryfunc)	0, /* BufferConcat, */	     /* sq_concat,    x+y      */
--    (PyIntArgFunc)	0, /* BufferRepeat, */	     /* sq_repeat,    x*n      */
-+    (binaryfunc)	0,		    /* BufferConcat, sq_concat, x+y */
-+    (PyIntArgFunc)	0,		    /* BufferRepeat, sq_repeat, x*n */
-     (PyIntArgFunc)	BufferItem,	    /* sq_item,      x[i]     */
-     (PyIntIntArgFunc)	BufferSlice,	    /* sq_slice,     x[i:j]   */
-     (PyIntObjArgProc)	BufferAssItem,	    /* sq_ass_item,  x[i]=v   */
-@@ -1028,7 +1189,7 @@
-     static PyInt
- BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
- {
--    return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
-+    return RBAsSlice((BufferObject *)(self), lo, hi, val, 1,
- 		      (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
- 		      NULL);
- }
-@@ -1078,7 +1239,7 @@
-     static PyInt
- RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
- {
--    return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val,
-+    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
- 		      ((RangeObject *)(self))->start,
- 		      ((RangeObject *)(self))->end,
- 		      &((RangeObject *)(self))->end);
-@@ -1395,12 +1556,12 @@
-     static char *(argv[2]) = {"/must>not&exist/foo", NULL};
- 
-     /* Fixups... */
--    BufferType.ob_type = &PyType_Type;
--    RangeType.ob_type = &PyType_Type;
--    WindowType.ob_type = &PyType_Type;
--    BufListType.ob_type = &PyType_Type;
--    WinListType.ob_type = &PyType_Type;
--    CurrentType.ob_type = &PyType_Type;
-+    PyType_Ready(&BufferType);
-+    PyType_Ready(&RangeType);
-+    PyType_Ready(&WindowType);
-+    PyType_Ready(&BufListType);
-+    PyType_Ready(&WinListType);
-+    PyType_Ready(&CurrentType);
- 
-     /* Set sys.argv[] to avoid a crash in warn(). */
-     PySys_SetArgv(1, argv);
-@@ -1414,6 +1575,10 @@
-     PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
-     PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
-     PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
-+    PyDict_SetItemString(dict, "VAR_LOCKED",    PyInt_FromLong(VAR_LOCKED));
-+    PyDict_SetItemString(dict, "VAR_FIXED",     PyInt_FromLong(VAR_FIXED));
-+    PyDict_SetItemString(dict, "VAR_SCOPE",     PyInt_FromLong(VAR_SCOPE));
-+    PyDict_SetItemString(dict, "VAR_DEF_SCOPE", PyInt_FromLong(VAR_DEF_SCOPE));
- 
-     if (PyErr_Occurred())
- 	return -1;
-@@ -1425,194 +1590,6 @@
-  * 4. Utility functions for handling the interface between Vim and Python.
-  */
- 
--/* Replace a range of lines in the specified buffer. The line numbers are in
-- * Vim format (1-based). The range is from lo up to, but not including, hi.
-- * The replacement lines are given as a Python list of string objects. The
-- * list is checked for validity and correct format. Errors are returned as a
-- * value of FAIL.  The return value is OK on success.
-- * If OK is returned and len_change is not NULL, *len_change
-- * is set to the change in the buffer length.
-- */
--    static int
--SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
--{
--    /* First of all, we check the thpe of the supplied Python object.
--     * There are three cases:
--     *	  1. NULL, or None - this is a deletion.
--     *	  2. A list	   - this is a replacement.
--     *	  3. Anything else - this is an error.
--     */
--    if (list == Py_None || list == NULL)
--    {
--	PyInt	i;
--	PyInt	n = (int)(hi - lo);
--	buf_T	*savebuf = curbuf;
--
--	PyErr_Clear();
--	curbuf = buf;
--
--	if (u_savedel((linenr_T)lo, (long)n) == FAIL)
--	    PyErr_SetVim(_("cannot save undo information"));
--	else
--	{
--	    for (i = 0; i < n; ++i)
--	    {
--		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
--		{
--		    PyErr_SetVim(_("cannot delete line"));
--		    break;
--		}
--	    }
--	    if (buf == curwin->w_buffer)
--		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
--	    deleted_lines_mark((linenr_T)lo, (long)i);
--	}
--
--	curbuf = savebuf;
--
--	if (PyErr_Occurred() || VimErrorCheck())
--	    return FAIL;
--
--	if (len_change)
--	    *len_change = -n;
--
--	return OK;
--    }
--    else if (PyList_Check(list))
--    {
--	PyInt	i;
--	PyInt	new_len = PyList_Size(list);
--	PyInt	old_len = hi - lo;
--	PyInt	extra = 0;	/* lines added to text, can be negative */
--	char	**array;
--	buf_T	*savebuf;
--
--	if (new_len == 0)	/* avoid allocating zero bytes */
--	    array = NULL;
--	else
--	{
--	    array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
--	    if (array == NULL)
--	    {
--		PyErr_NoMemory();
--		return FAIL;
--	    }
--	}
--
--	for (i = 0; i < new_len; ++i)
--	{
--	    PyObject *line = PyList_GetItem(list, i);
--
--	    array[i] = StringToLine(line);
--	    if (array[i] == NULL)
--	    {
--		while (i)
--		    vim_free(array[--i]);
--		vim_free(array);
--		return FAIL;
--	    }
--	}
--
--	savebuf = curbuf;
--
--	PyErr_Clear();
--	curbuf = buf;
--
--	if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
--	    PyErr_SetVim(_("cannot save undo information"));
--
--	/* If the size of the range is reducing (ie, new_len < old_len) we
--	 * need to delete some old_len. We do this at the start, by
--	 * repeatedly deleting line "lo".
--	 */
--	if (!PyErr_Occurred())
--	{
--	    for (i = 0; i < old_len - new_len; ++i)
--		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
--		{
--		    PyErr_SetVim(_("cannot delete line"));
--		    break;
--		}
--	    extra -= i;
--	}
--
--	/* For as long as possible, replace the existing old_len with the
--	 * new old_len. This is a more efficient operation, as it requires
--	 * less memory allocation and freeing.
--	 */
--	if (!PyErr_Occurred())
--	{
--	    for (i = 0; i < old_len && i < new_len; ++i)
--		if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
--								      == FAIL)
--		{
--		    PyErr_SetVim(_("cannot replace line"));
--		    break;
--		}
--	}
--	else
--	    i = 0;
--
--	/* Now we may need to insert the remaining new old_len. If we do, we
--	 * must free the strings as we finish with them (we can't pass the
--	 * responsibility to vim in this case).
--	 */
--	if (!PyErr_Occurred())
--	{
--	    while (i < new_len)
--	    {
--		if (ml_append((linenr_T)(lo + i - 1),
--					(char_u *)array[i], 0, FALSE) == FAIL)
--		{
--		    PyErr_SetVim(_("cannot insert line"));
--		    break;
--		}
--		vim_free(array[i]);
--		++i;
--		++extra;
--	    }
--	}
--
--	/* Free any left-over old_len, as a result of an error */
--	while (i < new_len)
--	{
--	    vim_free(array[i]);
--	    ++i;
--	}
--
--	/* Free the array of old_len. All of its contents have now
--	 * been dealt with (either freed, or the responsibility passed
--	 * to vim.
--	 */
--	vim_free(array);
--
--	/* Adjust marks. Invalidate any which lie in the
--	 * changed range, and move any in the remainder of the buffer.
--	 */
--	mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
--						  (long)MAXLNUM, (long)extra);
--	changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
--
--	if (buf == curwin->w_buffer)
--	    py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
--
--	curbuf = savebuf;
--
--	if (PyErr_Occurred() || VimErrorCheck())
--	    return FAIL;
--
--	if (len_change)
--	    *len_change = new_len - old_len;
--
--	return OK;
--    }
--    else
--    {
--	PyErr_BadArgument();
--	return FAIL;
--    }
--}
--
- /* Convert a Vim line into a Python string.
-  * All internal newlines are replaced by null characters.
-  *
-@@ -1649,6 +1626,186 @@
-     return result;
- }
- 
-+static void DictionaryDestructor(PyObject *);
-+static PyObject *DictionaryGetattr(PyObject *, char*);
-+
-+static PyMappingMethods DictionaryAsMapping = {
-+    (PyInquiry)		DictionaryLength,
-+    (binaryfunc)	DictionaryItem,
-+    (objobjargproc)	DictionaryAssItem,
-+};
-+
-+static PyTypeObject DictionaryType = {
-+    PyObject_HEAD_INIT(0)
-+    0,
-+    "vimdictionary",
-+    sizeof(DictionaryObject),
-+    0,
-+
-+    (destructor)  DictionaryDestructor,
-+    (printfunc)   0,
-+    (getattrfunc) DictionaryGetattr,
-+    (setattrfunc) DictionarySetattr,
-+    (cmpfunc)     0,
-+    (reprfunc)    0,
-+
-+    0,			    /* as number */
-+    0,			    /* as sequence */
-+    &DictionaryAsMapping,   /* as mapping */
-+
-+    (hashfunc)    0,
-+    (ternaryfunc) 0,
-+    (reprfunc)    0,
-+};
-+
-+    static void
-+DictionaryDestructor(PyObject *self)
-+{
-+    DictionaryObject	*this = ((DictionaryObject *) (self));
-+
-+    pyll_remove(&this->ref, &lastdict);
-+    dict_unref(this->dict);
-+
-+    Py_DECREF(self);
-+}
-+
-+    static PyObject *
-+DictionaryGetattr(PyObject *self, char *name)
-+{
-+    DictionaryObject	*this = ((DictionaryObject *) (self));
-+
-+    if (strcmp(name, "locked") == 0)
-+	return PyInt_FromLong(this->dict->dv_lock);
-+    else if (strcmp(name, "scope") == 0)
-+	return PyInt_FromLong(this->dict->dv_scope);
-+
-+    return Py_FindMethod(DictionaryMethods, self, name);
-+}
-+
-+static void ListDestructor(PyObject *);
-+static PyObject *ListGetattr(PyObject *, char *);
-+
-+static PySequenceMethods ListAsSeq = {
-+    (PyInquiry)			ListLength,
-+    (binaryfunc)		0,
-+    (PyIntArgFunc)		0,
-+    (PyIntArgFunc)		ListItem,
-+    (PyIntIntArgFunc)		ListSlice,
-+    (PyIntObjArgProc)		ListAssItem,
-+    (PyIntIntObjArgProc)	ListAssSlice,
-+    (objobjproc)		0,
-+#if PY_MAJOR_VERSION >= 2
-+    (binaryfunc)		ListConcatInPlace,
-+    0,
-+#endif
-+};
-+
-+static PyTypeObject ListType = {
-+    PyObject_HEAD_INIT(0)
-+    0,
-+    "vimlist",
-+    sizeof(ListObject),
-+    0,
-+
-+    (destructor)  ListDestructor,
-+    (printfunc)   0,
-+    (getattrfunc) ListGetattr,
-+    (setattrfunc) ListSetattr,
-+    (cmpfunc)     0,
-+    (reprfunc)    0,
-+
-+    0,			    /* as number */
-+    &ListAsSeq,		    /* as sequence */
-+    0,			    /* as mapping */
-+
-+    (hashfunc)    0,
-+    (ternaryfunc) 0,
-+    (reprfunc)    0,
-+};
-+
-+    static void
-+ListDestructor(PyObject *self)
-+{
-+    ListObject	*this = ((ListObject *) (self));
-+
-+    pyll_remove(&this->ref, &lastlist);
-+    list_unref(this->list);
-+
-+    Py_DECREF(self);
-+}
-+
-+    static PyObject *
-+ListGetattr(PyObject *self, char *name)
-+{
-+    if (strcmp(name, "locked") == 0)
-+	return PyInt_FromLong(((ListObject *)(self))->list->lv_lock);
-+
-+    return Py_FindMethod(ListMethods, self, name);
-+}
-+
-+static void FunctionDestructor(PyObject *);
-+static PyObject *FunctionGetattr(PyObject *, char *);
-+
-+static PyTypeObject FunctionType = {
-+    PyObject_HEAD_INIT(0)
-+    0,
-+    "vimfunction",
-+    sizeof(FunctionObject),
-+    0,
-+
-+    (destructor)  FunctionDestructor,
-+    (printfunc)   0,
-+    (getattrfunc) FunctionGetattr,
-+    (setattrfunc) 0,
-+    (cmpfunc)     0,
-+    (reprfunc)    0,
-+
-+    0,			    /* as number */
-+    0,			    /* as sequence */
-+    0,			    /* as mapping */
-+
-+    (hashfunc)    0,
-+    (ternaryfunc) FunctionCall,
-+    (reprfunc)    0,
-+};
-+
-+    static void
-+FunctionDestructor(PyObject *self)
-+{
-+    FunctionObject	*this = (FunctionObject *) (self);
-+
-+    func_unref(this->name);
-+    PyMem_Del(this->name);
-+
-+    Py_DECREF(self);
-+}
-+
-+    static PyObject *
-+FunctionGetattr(PyObject *self, char *name)
-+{
-+    FunctionObject	*this = (FunctionObject *)(self);
-+
-+    if (strcmp(name, "name") == 0)
-+	return PyString_FromString((char *)(this->name));
-+    else
-+	return Py_FindMethod(FunctionMethods, self, name);
-+}
-+
-+    void
-+do_pyeval (char_u *str, typval_T *rettv)
-+{
-+    DoPythonCommand(NULL, (char *) str, rettv);
-+    switch(rettv->v_type)
-+    {
-+	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
-+	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
-+	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
-+	case VAR_UNKNOWN:
-+	    rettv->v_type = VAR_NUMBER;
-+	    rettv->vval.v_number = 0;
-+	    break;
-+    }
-+}
- 
- /* Don't generate a prototype for the next function, it generates an error on
-  * newer Python versions. */
-@@ -1661,6 +1818,12 @@
- }
- #endif /* Python 1.4 */
- 
-+    void
-+set_ref_in_python (int copyID)
-+{
-+    set_ref_in_py(copyID);
-+}
-+
-     static void
- init_structs(void)
- {
-diff -Naur vim73.orig/src/if_python3.c vim73/src/if_python3.c
---- vim73.orig/src/if_python3.c	2010-08-13 13:59:40.000000000 +0000
-+++ vim73/src/if_python3.c	2012-11-01 20:35:48.000000000 +0000
-@@ -22,8 +22,8 @@
-  * Adaptations to support both python3.x and python2.x
-  */
- 
--// uncomment this if used with the debug version of python
--// #define Py_DEBUG
-+/* uncomment this if used with the debug version of python */
-+/* #define Py_DEBUG */
- 
- #include "vim.h"
- 
-@@ -42,8 +42,6 @@
- # undef _DEBUG
- #endif
- 
--#define PY_SSIZE_T_CLEAN
--
- #ifdef F_BLANK
- # undef F_BLANK
- #endif
-@@ -66,21 +64,41 @@
- #undef main /* Defined in python.h - aargh */
- #undef HAVE_FCNTL_H /* Clash with os_win32.h */
- 
-+#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
-+# define PY_SSIZE_T_CLEAN
-+#endif
-+
- static void init_structs(void);
- 
-+/* The "surrogateescape" error handler is new in Python 3.1 */
-+#if PY_VERSION_HEX >= 0x030100f0
-+# define CODEC_ERROR_HANDLER "surrogateescape"
-+#else
-+# define CODEC_ERROR_HANDLER NULL
-+#endif
-+
-+/* Python 3 does not support CObjects, always use Capsules */
-+#define PY_USE_CAPSULE
-+
- #define PyInt Py_ssize_t
- #define PyString_Check(obj) PyUnicode_Check(obj)
--#define PyString_AsString(obj) _PyUnicode_AsString(obj)
--#define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
-+#define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER)
-+#define PyString_FreeBytes(obj) Py_XDECREF(bytes)
-+#define PyString_AsString(obj) PyBytes_AsString(obj)
-+#define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
- #define PyString_FromString(repr) PyUnicode_FromString(repr)
-+#define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len)
-+#define PyInt_Check(obj) PyLong_Check(obj)
-+#define PyInt_FromLong(i) PyLong_FromLong(i)
-+#define PyInt_AsLong(obj) PyLong_AsLong(obj)
- 
--#if defined(DYNAMIC_PYTHON3)
-+#if defined(DYNAMIC_PYTHON3) || defined(PROTO)
- 
- # ifndef WIN3264
- #  include <dlfcn.h>
- #  define FARPROC void*
- #  define HINSTANCE void*
--#  ifdef PY_NO_RTLD_GLOBAL
-+#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
- #   define load_dll(n) dlopen((n), RTLD_LAZY)
- #  else
- #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
-@@ -88,7 +106,7 @@
- #  define close_dll dlclose
- #  define symbol_from_dll dlsym
- # else
--#  define load_dll LoadLibrary
-+#  define load_dll vimLoadLib
- #  define close_dll FreeLibrary
- #  define symbol_from_dll GetProcAddress
- # endif
-@@ -99,6 +117,8 @@
- # define PyArg_Parse py3_PyArg_Parse
- # undef PyArg_ParseTuple
- # define PyArg_ParseTuple py3_PyArg_ParseTuple
-+# define PyMem_Free py3_PyMem_Free
-+# define PyMem_Malloc py3_PyMem_Malloc
- # define PyDict_SetItemString py3_PyDict_SetItemString
- # define PyErr_BadArgument py3_PyErr_BadArgument
- # define PyErr_Clear py3_PyErr_Clear
-@@ -118,29 +138,63 @@
- # define PyList_New py3_PyList_New
- # define PyList_SetItem py3_PyList_SetItem
- # define PyList_Size py3_PyList_Size
-+# define PySequence_Check py3_PySequence_Check
-+# define PySequence_Size py3_PySequence_Size
-+# define PySequence_GetItem py3_PySequence_GetItem
-+# define PyTuple_Size py3_PyTuple_Size
-+# define PyTuple_GetItem py3_PyTuple_GetItem
- # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx
- # define PyImport_ImportModule py3_PyImport_ImportModule
-+# define PyImport_AddModule py3_PyImport_AddModule
- # define PyObject_Init py3__PyObject_Init
- # define PyDict_New py3_PyDict_New
- # define PyDict_GetItemString py3_PyDict_GetItemString
-+# define PyDict_Next py3_PyDict_Next
-+# define PyMapping_Check py3_PyMapping_Check
-+# define PyMapping_Items py3_PyMapping_Items
-+# define PyIter_Next py3_PyIter_Next
-+# define PyObject_GetIter py3_PyObject_GetIter
- # define PyModule_GetDict py3_PyModule_GetDict
- #undef PyRun_SimpleString
- # define PyRun_SimpleString py3_PyRun_SimpleString
-+#undef PyRun_String
-+# define PyRun_String py3_PyRun_String
- # define PySys_SetObject py3_PySys_SetObject
- # define PySys_SetArgv py3_PySys_SetArgv
--# define PyType_Type (*py3_PyType_Type)
- # define PyType_Ready py3_PyType_Ready
- #undef Py_BuildValue
- # define Py_BuildValue py3_Py_BuildValue
-+# define Py_SetPythonHome py3_Py_SetPythonHome
- # define Py_Initialize py3_Py_Initialize
- # define Py_Finalize py3_Py_Finalize
- # define Py_IsInitialized py3_Py_IsInitialized
- # define _Py_NoneStruct (*py3__Py_NoneStruct)
-+# define _Py_FalseStruct (*py3__Py_FalseStruct)
-+# define _Py_TrueStruct (*py3__Py_TrueStruct)
-+# define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
- # define PyModule_AddObject py3_PyModule_AddObject
- # define PyImport_AppendInittab py3_PyImport_AppendInittab
--# define _PyUnicode_AsString py3__PyUnicode_AsString
-+# if PY_VERSION_HEX >= 0x030300f0
-+#  undef _PyUnicode_AsString
-+#  define _PyUnicode_AsString py3_PyUnicode_AsUTF8
-+# else
-+#  define _PyUnicode_AsString py3__PyUnicode_AsString
-+# endif
-+# undef PyUnicode_AsEncodedString
-+# define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
-+# undef PyBytes_AsString
-+# define PyBytes_AsString py3_PyBytes_AsString
-+# define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize
-+# undef PyBytes_FromString
-+# define PyBytes_FromString py3_PyBytes_FromString
-+# define PyFloat_FromDouble py3_PyFloat_FromDouble
-+# define PyFloat_AsDouble py3_PyFloat_AsDouble
- # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
-+# define PyType_Type (*py3_PyType_Type)
- # define PySlice_Type (*py3_PySlice_Type)
-+# define PyFloat_Type (*py3_PyFloat_Type)
-+# define PyBool_Type (*py3_PyBool_Type)
-+# define PyErr_NewException py3_PyErr_NewException
- # ifdef Py_DEBUG
- #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
- #  define _Py_RefTotal (*py3__Py_RefTotal)
-@@ -156,8 +210,11 @@
- # define PyModule_Create2 py3_PyModule_Create2
- # undef PyUnicode_FromString
- # define PyUnicode_FromString py3_PyUnicode_FromString
--# undef PyUnicode_FromStringAndSize
--# define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize
-+# undef PyUnicode_Decode
-+# define PyUnicode_Decode py3_PyUnicode_Decode
-+# define PyType_IsSubtype py3_PyType_IsSubtype
-+# define PyCapsule_New py3_PyCapsule_New
-+# define PyCapsule_GetPointer py3_PyCapsule_GetPointer
- 
- # ifdef Py_DEBUG
- #  undef PyObject_NEW
-@@ -170,6 +227,7 @@
-  * Pointers for dynamic link
-  */
- static int (*py3_PySys_SetArgv)(int, wchar_t **);
-+static void (*py3_Py_SetPythonHome)(wchar_t *home);
- static void (*py3_Py_Initialize)(void);
- static PyObject* (*py3_PyList_New)(Py_ssize_t size);
- static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
-@@ -177,27 +235,39 @@
- static int (*py3_PySys_SetObject)(char *, PyObject *);
- static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
- static Py_ssize_t (*py3_PyList_Size)(PyObject *);
--static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
-+static int (*py3_PySequence_Check)(PyObject *);
-+static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
-+static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t);
-+static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
-+static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
-+static int (*py3_PyMapping_Check)(PyObject *);
-+static PyObject* (*py3_PyMapping_Items)(PyObject *);
-+static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
- 		     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
- static PyObject* (*py3_PyErr_NoMemory)(void);
- static void (*py3_Py_Finalize)(void);
- static void (*py3_PyErr_SetString)(PyObject *, const char *);
- static int (*py3_PyRun_SimpleString)(char *);
-+static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
- static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
- static PyObject* (*py3_PyImport_ImportModule)(const char *);
-+static PyObject* (*py3_PyImport_AddModule)(const char *);
- static int (*py3_PyErr_BadArgument)(void);
--static PyTypeObject* py3_PyType_Type;
- static PyObject* (*py3_PyErr_Occurred)(void);
- static PyObject* (*py3_PyModule_GetDict)(PyObject *);
- static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
- static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *);
-+static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
- static PyObject* (*py3_PyLong_FromLong)(long);
- static PyObject* (*py3_PyDict_New)(void);
-+static PyObject* (*py3_PyIter_Next)(PyObject *);
-+static PyObject* (*py3_PyObject_GetIter)(PyObject *);
- static PyObject* (*py3_Py_BuildValue)(char *, ...);
- static int (*py3_PyType_Ready)(PyTypeObject *type);
- static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
- static PyObject* (*py3_PyUnicode_FromString)(const char *u);
--static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size);
-+static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
-+	const char *encoding, const char *errors);
- static long (*py3_PyLong_AsLong)(PyObject *);
- static void (*py3_PyErr_SetNone)(PyObject *);
- static void (*py3_PyEval_InitThreads)(void);
-@@ -205,18 +275,39 @@
- static PyThreadState*(*py3_PyEval_SaveThread)(void);
- static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
- static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
-+static int (*py3_PyMem_Free)(void *);
-+static void* (*py3_PyMem_Malloc)(size_t);
- static int (*py3_Py_IsInitialized)(void);
- static void (*py3_PyErr_Clear)(void);
- static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
-+static iternextfunc py3__PyObject_NextNotImplemented;
- static PyObject* py3__Py_NoneStruct;
-+static PyObject* py3__Py_FalseStruct;
-+static PyObject* py3__Py_TrueStruct;
- static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
- static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
-+# if PY_VERSION_HEX >= 0x030300f0
-+static char* (*py3_PyUnicode_AsUTF8)(PyObject *unicode);
-+# else
- static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
-+# endif
-+static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
-+static char* (*py3_PyBytes_AsString)(PyObject *bytes);
-+static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, int *length);
-+static PyObject* (*py3_PyBytes_FromString)(char *str);
-+static PyObject* (*py3_PyFloat_FromDouble)(double num);
-+static double (*py3_PyFloat_AsDouble)(PyObject *);
- static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
- static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
- static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
- static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
-+static PyTypeObject* py3_PyType_Type;
- static PyTypeObject* py3_PySlice_Type;
-+static PyTypeObject* py3_PyFloat_Type;
-+static PyTypeObject* py3_PyBool_Type;
-+static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
-+static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
-+static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
- # ifdef Py_DEBUG
-     static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
-     static Py_ssize_t* py3__Py_RefTotal;
-@@ -227,6 +318,7 @@
-     static void (*py3_PyObject_Free)(void*);
-     static void* (*py3_PyObject_Malloc)(size_t);
- # endif
-+static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
- 
- static HINSTANCE hinstPy3 = 0; /* Instance of python.dll */
- 
-@@ -254,30 +346,49 @@
- } py3_funcname_table[] =
- {
-     {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
-+    {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
-     {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
-+# ifndef PY_SSIZE_T_CLEAN
-     {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
-+    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
-+# else
-+    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
-+    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue},
-+# endif
-+    {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
-+    {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
-     {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
-     {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
-     {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
-     {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject},
-     {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append},
-     {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size},
-+    {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
-+    {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
-+    {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem},
-+    {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
-+    {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem},
-     {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx},
-     {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
-     {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
-     {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
-     {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
-+    {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
-     {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},
-     {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
-+    {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
-     {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
--    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
-     {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
-     {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
-     {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
-     {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
-+    {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
-+    {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
-+    {"PyMapping_Items", (PYTHON_PROC*)&py3_PyMapping_Items},
-+    {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
-+    {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
-     {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
-     {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
--    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
-     {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
-     {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
-     {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},
-@@ -286,19 +397,34 @@
-     {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
-     {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
-     {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
--    {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
-     {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
-+    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
-     {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
-+    {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
-+    {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct},
-     {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
-     {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
-     {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
-     {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
-+# if PY_VERSION_HEX >= 0x030300f0
-+    {"PyUnicode_AsUTF8", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8},
-+# else
-     {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
-+# endif
-+    {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
-+    {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize},
-+    {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
-+    {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
-+    {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
-     {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
-     {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
-     {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
-     {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
-+    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
-     {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
-+    {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
-+    {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
-+    {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
- # ifdef Py_DEBUG
-     {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
-     {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
-@@ -309,6 +435,9 @@
-     {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc},
-     {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free},
- # endif
-+    {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype},
-+    {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New},
-+    {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer},
-     {"", NULL},
- };
- 
-@@ -334,15 +463,16 @@
- py3_runtime_link_init(char *libname, int verbose)
- {
-     int i;
--    void *ucs_from_string, *ucs_from_string_and_size;
-+    void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string;
- 
--# if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON)
-+# if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
-     /* Can't have Python and Python3 loaded at the same time.
-      * It cause a crash, because RTLD_GLOBAL is needed for
-      * standard C extension libraries of one or both python versions. */
-     if (python_loaded())
-     {
--	EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
-+	if (verbose)
-+	    EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
- 	return FAIL;
-     }
- # endif
-@@ -373,20 +503,32 @@
- 
-     /* Load unicode functions separately as only the ucs2 or the ucs4 functions
-      * will be present in the library. */
-+# if PY_VERSION_HEX >= 0x030300f0
-+    ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicode_FromString");
-+    ucs_decode = symbol_from_dll(hinstPy3, "PyUnicode_Decode");
-+    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
-+	    "PyUnicode_AsEncodedString");
-+# else
-     ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
--    ucs_from_string_and_size = symbol_from_dll(hinstPy3,
--	    "PyUnicodeUCS2_FromStringAndSize");
--    if (!ucs_from_string || !ucs_from_string_and_size)
-+    ucs_decode = symbol_from_dll(hinstPy3,
-+	    "PyUnicodeUCS2_Decode");
-+    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
-+	    "PyUnicodeUCS2_AsEncodedString");
-+    if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string)
-     {
- 	ucs_from_string = symbol_from_dll(hinstPy3,
- 		"PyUnicodeUCS4_FromString");
--	ucs_from_string_and_size = symbol_from_dll(hinstPy3,
--		"PyUnicodeUCS4_FromStringAndSize");
-+	ucs_decode = symbol_from_dll(hinstPy3,
-+		"PyUnicodeUCS4_Decode");
-+	ucs_as_encoded_string = symbol_from_dll(hinstPy3,
-+		"PyUnicodeUCS4_AsEncodedString");
-     }
--    if (ucs_from_string && ucs_from_string_and_size)
-+# endif
-+    if (ucs_from_string && ucs_decode && ucs_as_encoded_string)
-     {
- 	py3_PyUnicode_FromString = ucs_from_string;
--	py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size;
-+	py3_PyUnicode_Decode = ucs_decode;
-+	py3_PyUnicode_AsEncodedString = ucs_as_encoded_string;
-     }
-     else
-     {
-@@ -437,14 +579,52 @@
- static PyObject *BufferNew (buf_T *);
- static PyObject *WindowNew(win_T *);
- static PyObject *LineToString(const char *);
-+static PyObject *BufferDir(PyObject *, PyObject *);
- 
- static PyTypeObject RangeType;
- 
-+static int py3initialised = 0;
-+
-+#define PYINITIALISED py3initialised
-+
-+#define DICTKEY_DECL PyObject *bytes = NULL;
-+
-+#define DICTKEY_GET(err) \
-+    if (PyBytes_Check(keyObject)) \
-+    { \
-+	if (PyString_AsStringAndSize(keyObject, (char **) &key, NULL) == -1) \
-+	    return err; \
-+    } \
-+    else if (PyUnicode_Check(keyObject)) \
-+    { \
-+	bytes = PyString_AsBytes(keyObject); \
-+	if (bytes == NULL) \
-+	    return err; \
-+	if (PyString_AsStringAndSize(bytes, (char **) &key, NULL) == -1) \
-+	    return err; \
-+    } \
-+    else \
-+    { \
-+	PyErr_SetString(PyExc_TypeError, _("only string keys are allowed")); \
-+	return err; \
-+    }
-+
-+#define DICTKEY_UNREF \
-+    if (bytes != NULL) \
-+	Py_XDECREF(bytes);
-+
- /*
-  * Include the code shared with if_python.c
-  */
- #include "if_py_both.h"
- 
-+#define GET_ATTR_STRING(name, nameobj) \
-+    char	*name = ""; \
-+    if (PyUnicode_Check(nameobj)) \
-+	name = _PyUnicode_AsString(nameobj)
-+
-+#define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
-+
-     static void
- call_PyObject_Free(void *p)
- {
-@@ -474,6 +654,8 @@
- static Py_ssize_t RangeStart;
- static Py_ssize_t RangeEnd;
- 
-+static PyObject *globals;
-+
- static int PythonIO_Init(void);
- static void PythonIO_Fini(void);
- PyMODINIT_FUNC Py3Init_vim(void);
-@@ -482,8 +664,6 @@
-  * 1. Python interpreter main program.
-  */
- 
--static int py3initialised = 0;
--
- static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
- 
-     void
-@@ -539,14 +719,24 @@
- 
- 	init_structs();
- 
--	/* initialise threads */
--	PyEval_InitThreads();
-+
-+#ifdef PYTHON3_HOME
-+	Py_SetPythonHome(PYTHON3_HOME);
-+#endif
-+
-+	PyImport_AppendInittab("vim", Py3Init_vim);
- 
- #if !defined(MACOS) || defined(MACOS_X_UNIX)
- 	Py_Initialize();
- #else
- 	PyMac_Initialize();
- #endif
-+	/* Initialise threads, and save the state using PyGILState_Ensure.
-+	 * Without the call to PyGILState_Ensure, thread specific state (such
-+	 * as the system trace hook), will be lost between invocations of
-+	 * Python code. */
-+	PyEval_InitThreads();
-+	pygilstate = PyGILState_Ensure();
- 
- #ifdef DYNAMIC_PYTHON3
- 	get_py3_exceptions();
-@@ -555,13 +745,16 @@
- 	if (PythonIO_Init())
- 	    goto fail;
- 
--	PyImport_AppendInittab("vim", Py3Init_vim);
-+	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
- 
- 	/* Remove the element from sys.path that was added because of our
- 	 * argv[0] value in Py3Init_vim().  Previously we used an empty
- 	 * string, but dependinding on the OS we then get an empty entry or
--	 * the current directory in sys.path. */
--	PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))");
-+	 * the current directory in sys.path.
-+	 * Only after vim has been imported, the element does exist in
-+	 * sys.path.
-+	 */
-+	PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
- 
- 	// lock is created and acquired in PyEval_InitThreads() and thread
- 	// state is created in Py_Initialize()
-@@ -590,7 +783,7 @@
-  * External interface
-  */
-     static void
--DoPy3Command(exarg_T *eap, const char *cmd)
-+DoPy3Command(exarg_T *eap, const char *cmd, typval_T *rettv)
- {
- #if defined(MACOS) && !defined(MACOS_X_UNIX)
-     GrafPtr		oldPort;
-@@ -598,6 +791,8 @@
- #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
-     char		*saved_locale;
- #endif
-+    PyObject		*cmdstr;
-+    PyObject		*cmdbytes;
- 
- #if defined(MACOS) && !defined(MACOS_X_UNIX)
-     GetPort(&oldPort);
-@@ -608,8 +803,16 @@
-     if (Python3_Init())
- 	goto theend;
- 
--    RangeStart = eap->line1;
--    RangeEnd = eap->line2;
-+    if (rettv == NULL)
-+    {
-+	RangeStart = eap->line1;
-+	RangeEnd = eap->line2;
-+    }
-+    else
-+    {
-+	RangeStart = (PyInt) curwin->w_cursor.lnum;
-+	RangeEnd = RangeStart;
-+    }
-     Python_Release_Vim();	    /* leave vim */
- 
- #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
-@@ -627,7 +830,31 @@
- 
-     pygilstate = PyGILState_Ensure();
- 
--    PyRun_SimpleString((char *)(cmd));
-+    /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
-+     * SyntaxError (unicode error). */
-+    cmdstr = PyUnicode_Decode(cmd, strlen(cmd),
-+					(char *)ENC_OPT, CODEC_ERROR_HANDLER);
-+    cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
-+    Py_XDECREF(cmdstr);
-+    if (rettv == NULL)
-+	PyRun_SimpleString(PyBytes_AsString(cmdbytes));
-+    else
-+    {
-+	PyObject	*r;
-+
-+	r = PyRun_String(PyBytes_AsString(cmdbytes), Py_eval_input,
-+			 globals, globals);
-+	if (r == NULL)
-+	    EMSG(_("E860: Eval did not return a valid python 3 object"));
-+	else
-+	{
-+	    if (ConvertFromPyObject(r, rettv) == -1)
-+		EMSG(_("E861: Failed to convert returned python 3 object to vim value"));
-+	    Py_DECREF(r);
-+	}
-+	PyErr_Clear();
-+    }
-+    Py_XDECREF(cmdbytes);
- 
-     PyGILState_Release(pygilstate);
- 
-@@ -661,9 +888,9 @@
-     if (!eap->skip)
-     {
- 	if (script == NULL)
--	    DoPy3Command(eap, (char *)eap->arg);
-+	    DoPy3Command(eap, (char *)eap->arg, NULL);
- 	else
--	    DoPy3Command(eap, (char *)script);
-+	    DoPy3Command(eap, (char *)script, NULL);
-     }
-     vim_free(script);
- }
-@@ -686,7 +913,10 @@
-      * different options under Windows, meaning that stdio pointers aren't
-      * compatible between the two. Yuk.
-      *
--     * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec'))
-+     * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec'))
-+     *
-+     * Using bytes so that Python can detect the source encoding as it normally
-+     * does. The doc does not say "compile" accept bytes, though.
-      *
-      * We need to escape any backslashes or single quotes in the file name, so that
-      * Python won't mangle the file name.
-@@ -709,8 +939,8 @@
- 	    return;
- 	if (i==0)
- 	{
--	    strcpy(p,"').read(),'");
--	    p += 11;
-+	    strcpy(p,"','rb').read(),'");
-+	    p += 16;
- 	}
- 	else
- 	{
-@@ -721,7 +951,7 @@
- 
- 
-     /* Execute the file */
--    DoPy3Command(eap, buffer);
-+    DoPy3Command(eap, buffer, NULL);
- }
- 
- /******************************************************
-@@ -734,9 +964,7 @@
-     static PyObject *
- OutputGetattro(PyObject *self, PyObject *nameobj)
- {
--    char *name = "";
--    if (PyUnicode_Check(nameobj))
--	name = _PyUnicode_AsString(nameobj);
-+    GET_ATTR_STRING(name, nameobj);
- 
-     if (strcmp(name, "softspace") == 0)
- 	return PyLong_FromLong(((OutputObject *)(self))->softspace);
-@@ -747,28 +975,9 @@
-     static int
- OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
- {
--    char *name = "";
--    if (PyUnicode_Check(nameobj))
--	name = _PyUnicode_AsString(nameobj);
--
--    if (val == NULL) {
--	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
--	return -1;
--    }
--
--    if (strcmp(name, "softspace") == 0)
--    {
--	if (!PyLong_Check(val)) {
--	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
--	    return -1;
--	}
--
--	((OutputObject *)(self))->softspace = PyLong_AsLong(val);
--	return 0;
--    }
-+    GET_ATTR_STRING(name, nameobj);
- 
--    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
--    return -1;
-+    return OutputSetattr(self, name, val);
- }
- 
- /***************/
-@@ -805,8 +1014,8 @@
- 
- static Py_ssize_t BufferLength(PyObject *);
- static PyObject *BufferItem(PyObject *, Py_ssize_t);
--static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *);
--static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
-+static PyObject* BufferSubscript(PyObject *self, PyObject *idx);
-+static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
- 
- 
- /* Line range type - Implementation functions
-@@ -815,8 +1024,9 @@
- 
- #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
- 
--static PyObject* RangeSubscript(PyObject *self, PyObject* idx);
-+static PyObject* RangeSubscript(PyObject *self, PyObject *idx);
- static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
-+static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
- 
- /* Current objects type - Implementation functions
-  * -----------------------------------------------
-@@ -828,7 +1038,7 @@
-     (ssizeargfunc)	0,		    /* sq_repeat,    x*n      */
-     (ssizeargfunc)	BufferItem,	    /* sq_item,      x[i]     */
-     0,					    /* was_sq_slice,	 x[i:j]   */
--    (ssizeobjargproc)	BufferAsItem,	    /* sq_ass_item,  x[i]=v   */
-+    0,					    /* sq_ass_item,  x[i]=v   */
-     0,					    /* sq_ass_slice, x[i:j]=v */
-     0,					    /* sq_contains */
-     0,					    /* sq_inplace_concat */
-@@ -838,7 +1048,7 @@
- PyMappingMethods BufferAsMapping = {
-     /* mp_length	*/ (lenfunc)BufferLength,
-     /* mp_subscript     */ (binaryfunc)BufferSubscript,
--    /* mp_ass_subscript */ (objobjargproc)0,
-+    /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript,
- };
- 
- 
-@@ -890,6 +1100,8 @@
- 
-     if (this->buf && this->buf != INVALID_BUFFER_VALUE)
- 	this->buf->b_python3_ref = NULL;
-+
-+    Py_TYPE(self)->tp_free((PyObject*)self);
- }
- 
-     static PyObject *
-@@ -897,9 +1109,7 @@
- {
-     BufferObject *this = (BufferObject *)(self);
- 
--    char *name = "";
--    if (PyUnicode_Check(nameobj))
--	name = _PyUnicode_AsString(nameobj);
-+    GET_ATTR_STRING(name, nameobj);
- 
-     if (CheckBuffer(this))
- 	return NULL;
-@@ -908,13 +1118,18 @@
- 	return Py_BuildValue("s", this->buf->b_ffname);
-     else if (strcmp(name, "number") == 0)
- 	return Py_BuildValue("n", this->buf->b_fnum);
--    else if (strcmp(name,"__members__") == 0)
--	return Py_BuildValue("[ss]", "name", "number");
-     else
- 	return PyObject_GenericGetAttr(self, nameobj);
- }
- 
-     static PyObject *
-+BufferDir(PyObject *self UNUSED, PyObject *args UNUSED)
-+{
-+    return Py_BuildValue("[sssss]", "name", "number",
-+						   "append", "mark", "range");
-+}
-+
-+    static PyObject *
- BufferRepr(PyObject *self)
- {
-     static char repr[100];
-@@ -968,37 +1183,64 @@
- 	       (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
- }
- 
--    static Py_ssize_t
--BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
--{
--    return RBAsItem((BufferObject *)(self), n, val, 1,
--		(Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
--		NULL);
--}
--
--
-     static PyObject *
- BufferSubscript(PyObject *self, PyObject* idx)
- {
--    if (PyLong_Check(idx)) {
-+    if (PyLong_Check(idx))
-+    {
- 	long _idx = PyLong_AsLong(idx);
- 	return BufferItem(self,_idx);
--    } else if (PySlice_Check(idx)) {
-+    } else if (PySlice_Check(idx))
-+    {
- 	Py_ssize_t start, stop, step, slicelen;
- 
--	if (PySlice_GetIndicesEx((PySliceObject *)idx,
-+	if (PySlice_GetIndicesEx((PyObject *)idx,
- 	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
- 	      &start, &stop,
--	      &step, &slicelen) < 0) {
-+	      &step, &slicelen) < 0)
-+	{
- 	    return NULL;
- 	}
--	return BufferSlice(self,start,stop+1);
--    } else {
-+	return BufferSlice(self, start, stop);
-+    }
-+    else
-+    {
- 	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
- 	return NULL;
-     }
- }
- 
-+    static Py_ssize_t
-+BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
-+{
-+    if (PyLong_Check(idx))
-+    {
-+	long n = PyLong_AsLong(idx);
-+	return RBAsItem((BufferObject *)(self), n, val, 1,
-+		    (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-+		    NULL);
-+    } else if (PySlice_Check(idx))
-+    {
-+	Py_ssize_t start, stop, step, slicelen;
-+
-+	if (PySlice_GetIndicesEx((PyObject *)idx,
-+	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
-+	      &start, &stop,
-+	      &step, &slicelen) < 0)
-+	{
-+	    return -1;
-+	}
-+	return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
-+			  (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
-+			  NULL);
-+    }
-+    else
-+    {
-+	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
-+	return -1;
-+    }
-+}
-+
- static PySequenceMethods RangeAsSeq = {
-     (lenfunc)		RangeLength,	 /* sq_length,	  len(x)   */
-     (binaryfunc)	0,		 /* RangeConcat, sq_concat,  x+y   */
-@@ -1015,7 +1257,7 @@
- PyMappingMethods RangeAsMapping = {
-     /* mp_length	*/ (lenfunc)RangeLength,
-     /* mp_subscript     */ (binaryfunc)RangeSubscript,
--    /* mp_ass_subscript */ (objobjargproc)0,
-+    /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript,
- };
- 
- /* Line range object - Implementation
-@@ -1025,14 +1267,13 @@
- RangeDestructor(PyObject *self)
- {
-     Py_DECREF(((RangeObject *)(self))->buf);
-+    Py_TYPE(self)->tp_free((PyObject*)self);
- }
- 
-     static PyObject *
- RangeGetattro(PyObject *self, PyObject *nameobj)
- {
--    char *name = "";
--    if (PyUnicode_Check(nameobj))
--	name = _PyUnicode_AsString(nameobj);
-+    GET_ATTR_STRING(name, nameobj);
- 
-     if (strcmp(name, "start") == 0)
- 	return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
-@@ -1053,28 +1294,70 @@
- 		    &((RangeObject *)(self))->end);
- }
- 
-+    static Py_ssize_t
-+RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val)
-+{
-+    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
-+		    ((RangeObject *)(self))->start,
-+		    ((RangeObject *)(self))->end,
-+		    &((RangeObject *)(self))->end);
-+}
-+
-     static PyObject *
- RangeSubscript(PyObject *self, PyObject* idx)
- {
--    if (PyLong_Check(idx)) {
-+    if (PyLong_Check(idx))
-+    {
- 	long _idx = PyLong_AsLong(idx);
- 	return RangeItem(self,_idx);
--    } else if (PySlice_Check(idx)) {
-+    } else if (PySlice_Check(idx))
-+    {
- 	Py_ssize_t start, stop, step, slicelen;
- 
--	if (PySlice_GetIndicesEx((PySliceObject *)idx,
-+	if (PySlice_GetIndicesEx((PyObject *)idx,
- 		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
- 		&start, &stop,
--		&step, &slicelen) < 0) {
-+		&step, &slicelen) < 0)
-+	{
- 	    return NULL;
- 	}
--	return RangeSlice(self,start,stop+1);
--    } else {
-+	return RangeSlice(self, start, stop);
-+    }
-+    else
-+    {
- 	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
- 	return NULL;
-     }
- }
- 
-+    static Py_ssize_t
-+RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
-+{
-+    if (PyLong_Check(idx))
-+    {
-+	long n = PyLong_AsLong(idx);
-+	return RangeAsItem(self, n, val);
-+    } else if (PySlice_Check(idx))
-+    {
-+	Py_ssize_t start, stop, step, slicelen;
-+
-+	if (PySlice_GetIndicesEx((PyObject *)idx,
-+		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
-+		&start, &stop,
-+		&step, &slicelen) < 0)
-+	{
-+	    return -1;
-+	}
-+	return RangeAsSlice(self, start, stop, val);
-+    }
-+    else
-+    {
-+	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
-+	return -1;
-+    }
-+}
-+
-+
- /* Buffer list object - Definitions
-  */
- 
-@@ -1152,6 +1435,8 @@
- 
-     if (this->win && this->win != INVALID_WINDOW_VALUE)
- 	this->win->w_python3_ref = NULL;
-+
-+    Py_TYPE(self)->tp_free((PyObject*)self);
- }
- 
-     static PyObject *
-@@ -1159,10 +1444,7 @@
- {
-     WindowObject *this = (WindowObject *)(self);
- 
--    char *name = "";
--    if (PyUnicode_Check(nameobj))
--	name = _PyUnicode_AsString(nameobj);
--
-+    GET_ATTR_STRING(name, nameobj);
- 
-     if (CheckWindow(this))
- 	return NULL;
-@@ -1190,10 +1472,7 @@
-     static int
- WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
- {
--    char *name = "";
--
--    if (PyUnicode_Check(nameobj))
--	name = _PyUnicode_AsString(nameobj);
-+    GET_ATTR_STRING(name, nameobj);
- 
-     return WindowSetattr(self, name, val);
- }
-@@ -1237,9 +1516,7 @@
-     static PyObject *
- CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
- {
--    char *name = "";
--    if (PyUnicode_Check(nameobj))
--	name = _PyUnicode_AsString(nameobj);
-+    GET_ATTR_STRING(name, nameobj);
- 
-     if (strcmp(name, "buffer") == 0)
- 	return (PyObject *)BufferNew(curbuf);
-@@ -1279,6 +1556,186 @@
-     }
- }
- 
-+/* Dictionary object - Definitions
-+ */
-+
-+static PyInt DictionaryLength(PyObject *);
-+
-+static PyMappingMethods DictionaryAsMapping = {
-+    /* mp_length	*/ (lenfunc) DictionaryLength,
-+    /* mp_subscript     */ (binaryfunc) DictionaryItem,
-+    /* mp_ass_subscript */ (objobjargproc) DictionaryAssItem,
-+};
-+
-+    static PyObject *
-+DictionaryGetattro(PyObject *self, PyObject *nameobj)
-+{
-+    DictionaryObject	*this = ((DictionaryObject *) (self));
-+
-+    GET_ATTR_STRING(name, nameobj);
-+
-+    if (strcmp(name, "locked") == 0)
-+	return PyLong_FromLong(this->dict->dv_lock);
-+    else if (strcmp(name, "scope") == 0)
-+	return PyLong_FromLong(this->dict->dv_scope);
-+
-+    return PyObject_GenericGetAttr(self, nameobj);
-+}
-+
-+    static int
-+DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
-+{
-+    GET_ATTR_STRING(name, nameobj);
-+    return DictionarySetattr((DictionaryObject *) self, name, val);
-+}
-+
-+static PyTypeObject DictionaryType;
-+
-+    static void
-+DictionaryDestructor(PyObject *self)
-+{
-+    DictionaryObject *this = (DictionaryObject *)(self);
-+
-+    pyll_remove(&this->ref, &lastdict);
-+    dict_unref(this->dict);
-+
-+    Py_TYPE(self)->tp_free((PyObject*)self);
-+}
-+
-+/* List object - Definitions
-+ */
-+
-+static PyInt ListLength(PyObject *);
-+static PyObject *ListItem(PyObject *, Py_ssize_t);
-+
-+static PySequenceMethods ListAsSeq = {
-+    (lenfunc)		ListLength,	 /* sq_length,	  len(x)   */
-+    (binaryfunc)	0,		 /* RangeConcat, sq_concat,  x+y   */
-+    (ssizeargfunc)	0,		 /* RangeRepeat, sq_repeat,  x*n   */
-+    (ssizeargfunc)	ListItem,	 /* sq_item,	  x[i]	   */
-+    (void *)		0,		 /* was_sq_slice,     x[i:j]   */
-+    (ssizeobjargproc)	ListAssItem,	 /* sq_as_item,  x[i]=v   */
-+    (void *)		0,		 /* was_sq_ass_slice, x[i:j]=v */
-+    0,					 /* sq_contains */
-+    (binaryfunc)	ListConcatInPlace,/* sq_inplace_concat */
-+    0,					 /* sq_inplace_repeat */
-+};
-+
-+static PyObject *ListSubscript(PyObject *, PyObject *);
-+static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
-+
-+static PyMappingMethods ListAsMapping = {
-+    /* mp_length	*/ (lenfunc) ListLength,
-+    /* mp_subscript     */ (binaryfunc) ListSubscript,
-+    /* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
-+};
-+
-+static PyTypeObject ListType;
-+
-+    static PyObject *
-+ListSubscript(PyObject *self, PyObject* idxObject)
-+{
-+    if (PyLong_Check(idxObject))
-+    {
-+	long idx = PyLong_AsLong(idxObject);
-+	return ListItem(self, idx);
-+    }
-+    else if (PySlice_Check(idxObject))
-+    {
-+	Py_ssize_t start, stop, step, slicelen;
-+
-+	if (PySlice_GetIndicesEx(idxObject, ListLength(self), &start, &stop,
-+				 &step, &slicelen) < 0)
-+	    return NULL;
-+	return ListSlice(self, start, stop);
-+    }
-+    else
-+    {
-+	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
-+	return NULL;
-+    }
-+}
-+
-+    static Py_ssize_t
-+ListAsSubscript(PyObject *self, PyObject *idxObject, PyObject *obj)
-+{
-+    if (PyLong_Check(idxObject))
-+    {
-+	long idx = PyLong_AsLong(idxObject);
-+	return ListAssItem(self, idx, obj);
-+    }
-+    else if (PySlice_Check(idxObject))
-+    {
-+	Py_ssize_t start, stop, step, slicelen;
-+
-+	if (PySlice_GetIndicesEx(idxObject, ListLength(self), &start, &stop,
-+				 &step, &slicelen) < 0)
-+	    return -1;
-+	return ListAssSlice(self, start, stop, obj);
-+    }
-+    else
-+    {
-+	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
-+	return -1;
-+    }
-+}
-+
-+    static PyObject *
-+ListGetattro(PyObject *self, PyObject *nameobj)
-+{
-+    GET_ATTR_STRING(name, nameobj);
-+
-+    if (strcmp(name, "locked") == 0)
-+	return PyLong_FromLong(((ListObject *) (self))->list->lv_lock);
-+
-+    return PyObject_GenericGetAttr(self, nameobj);
-+}
-+
-+    static int
-+ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
-+{
-+    GET_ATTR_STRING(name, nameobj);
-+    return ListSetattr((ListObject *) self, name, val);
-+}
-+
-+    static void
-+ListDestructor(PyObject *self)
-+{
-+    ListObject *this = (ListObject *)(self);
-+
-+    pyll_remove(&this->ref, &lastlist);
-+    list_unref(this->list);
-+
-+    Py_TYPE(self)->tp_free((PyObject*)self);
-+}
-+
-+/* Function object - Definitions
-+ */
-+
-+    static void
-+FunctionDestructor(PyObject *self)
-+{
-+    FunctionObject	*this = (FunctionObject *) (self);
-+
-+    func_unref(this->name);
-+    PyMem_Del(this->name);
-+
-+    Py_TYPE(self)->tp_free((PyObject*)self);
-+}
-+
-+    static PyObject *
-+FunctionGetattro(PyObject *self, PyObject *nameobj)
-+{
-+    FunctionObject	*this = (FunctionObject *)(self);
-+
-+    GET_ATTR_STRING(name, nameobj);
-+
-+    if (strcmp(name, "name") == 0)
-+	return PyUnicode_FromString((char *)(this->name));
-+
-+    return PyObject_GenericGetAttr(self, nameobj);
-+}
-+
- /* External interface
-  */
- 
-@@ -1329,6 +1786,7 @@
- PyMODINIT_FUNC Py3Init_vim(void)
- {
-     PyObject *mod;
-+    PyObject *tmp;
-     /* The special value is removed from sys.path in Python3_Init(). */
-     static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
- 
-@@ -1338,13 +1796,19 @@
-     PyType_Ready(&BufListType);
-     PyType_Ready(&WinListType);
-     PyType_Ready(&CurrentType);
-+    PyType_Ready(&DictionaryType);
-+    PyType_Ready(&ListType);
-+    PyType_Ready(&FunctionType);
- 
-     /* Set sys.argv[] to avoid a crash in warn(). */
-     PySys_SetArgv(1, argv);
- 
-     mod = PyModule_Create(&vimmodule);
-+    if (mod == NULL)
-+	return NULL;
- 
--    VimError = Py_BuildValue("s", "vim.error");
-+    VimError = PyErr_NewException("vim.error", NULL, NULL);
-+    Py_INCREF(VimError);
- 
-     PyModule_AddObject(mod, "error", VimError);
-     Py_INCREF((PyObject *)(void *)&TheBufferList);
-@@ -1354,6 +1818,16 @@
-     Py_INCREF((PyObject *)(void *)&TheWindowList);
-     PyModule_AddObject(mod, "windows", (PyObject *)(void *)&TheWindowList);
- 
-+#define ADD_INT_CONSTANT(name, value) \
-+    tmp = PyLong_FromLong(value); \
-+    Py_INCREF(tmp); \
-+    PyModule_AddObject(mod, name, tmp)
-+
-+    ADD_INT_CONSTANT("VAR_LOCKED",     VAR_LOCKED);
-+    ADD_INT_CONSTANT("VAR_FIXED",      VAR_FIXED);
-+    ADD_INT_CONSTANT("VAR_SCOPE",      VAR_SCOPE);
-+    ADD_INT_CONSTANT("VAR_DEF_SCOPE",  VAR_DEF_SCOPE);
-+
-     if (PyErr_Occurred())
- 	return NULL;
- 
-@@ -1397,12 +1871,34 @@
-     }
-     *p = '\0';
- 
--    result = PyUnicode_FromStringAndSize(tmp, len);
-+    result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
- 
-     vim_free(tmp);
-     return result;
- }
- 
-+    void
-+do_py3eval (char_u *str, typval_T *rettv)
-+{
-+    DoPy3Command(NULL, (char *) str, rettv);
-+    switch(rettv->v_type)
-+    {
-+	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
-+	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
-+	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
-+	case VAR_UNKNOWN:
-+	    rettv->v_type = VAR_NUMBER;
-+	    rettv->vval.v_number = 0;
-+	    break;
-+    }
-+}
-+
-+    void
-+set_ref_in_python3 (int copyID)
-+{
-+    set_ref_in_py(copyID);
-+}
-+
-     static void
- init_structs(void)
- {
-@@ -1484,6 +1980,39 @@
-     CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
-     CurrentType.tp_doc = "vim current object";
- 
-+    vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
-+    DictionaryType.tp_name = "vim.dictionary";
-+    DictionaryType.tp_basicsize = sizeof(DictionaryObject);
-+    DictionaryType.tp_getattro = DictionaryGetattro;
-+    DictionaryType.tp_setattro = DictionarySetattro;
-+    DictionaryType.tp_dealloc = DictionaryDestructor;
-+    DictionaryType.tp_as_mapping = &DictionaryAsMapping;
-+    DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT;
-+    DictionaryType.tp_doc = "dictionary pushing modifications to vim structure";
-+    DictionaryType.tp_methods = DictionaryMethods;
-+
-+    vim_memset(&ListType, 0, sizeof(ListType));
-+    ListType.tp_name = "vim.list";
-+    ListType.tp_dealloc = ListDestructor;
-+    ListType.tp_basicsize = sizeof(ListObject);
-+    ListType.tp_getattro = ListGetattro;
-+    ListType.tp_setattro = ListSetattro;
-+    ListType.tp_as_sequence = &ListAsSeq;
-+    ListType.tp_as_mapping = &ListAsMapping;
-+    ListType.tp_flags = Py_TPFLAGS_DEFAULT;
-+    ListType.tp_doc = "list pushing modifications to vim structure";
-+    ListType.tp_methods = ListMethods;
-+
-+    vim_memset(&FunctionType, 0, sizeof(FunctionType));
-+    FunctionType.tp_name = "vim.list";
-+    FunctionType.tp_basicsize = sizeof(FunctionObject);
-+    FunctionType.tp_getattro = FunctionGetattro;
-+    FunctionType.tp_dealloc = FunctionDestructor;
-+    FunctionType.tp_call = FunctionCall;
-+    FunctionType.tp_flags = Py_TPFLAGS_DEFAULT;
-+    FunctionType.tp_doc = "object that calls vim function";
-+    FunctionType.tp_methods = FunctionMethods;
-+
-     vim_memset(&vimmodule, 0, sizeof(vimmodule));
-     vimmodule.m_name = "vim";
-     vimmodule.m_doc = vim_module_doc;
-diff -Naur vim73.orig/src/if_ruby.c vim73/src/if_ruby.c
---- vim73.orig/src/if_ruby.c	2010-06-30 19:33:12.000000000 +0000
-+++ vim73/src/if_ruby.c	2012-11-01 20:35:48.000000000 +0000
-@@ -4,12 +4,17 @@
-  *
-  * Ruby interface by Shugo Maeda
-  *   with improvements by SegPhault (Ryan Paul)
-+ *   with improvements by Jon Maken
-  *
-  * Do ":help uganda"  in Vim to read copying and usage conditions.
-  * Do ":help credits" in Vim to see a list of people who contributed.
-  * See README.txt for an overview of the Vim source code.
-  */
- 
-+#ifdef HAVE_CONFIG_H
-+# include "auto/config.h"
-+#endif
-+
- #include <stdio.h>
- #include <string.h>
- 
-@@ -26,12 +31,12 @@
- # define RUBYEXTERN extern
- #endif
- 
-+#ifdef DYNAMIC_RUBY
- /*
-  * This is tricky.  In ruby.h there is (inline) function rb_class_of()
-  * definition.  This function use these variables.  But we want function to
-  * use dll_* variables.
-  */
--#ifdef DYNAMIC_RUBY
- # define rb_cFalseClass		(*dll_rb_cFalseClass)
- # define rb_cFixnum		(*dll_rb_cFixnum)
- # define rb_cNilClass		(*dll_rb_cNilClass)
-@@ -46,8 +51,23 @@
-  */
- #  define RUBY_EXPORT
- # endif
-+
-+#if !(defined(WIN32) || defined(_WIN64))
-+# include <dlfcn.h>
-+# define HINSTANCE void*
-+# define RUBY_PROC void*
-+# define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
-+# define symbol_from_dll dlsym
-+# define close_dll dlclose
-+#else
-+# define RUBY_PROC FARPROC
-+# define load_dll vimLoadLib
-+# define symbol_from_dll GetProcAddress
-+# define close_dll FreeLibrary
- #endif
- 
-+#endif  /* ifdef DYNAMIC_RUBY */
-+
- /* suggested by Ariya Mizutani */
- #if (_MSC_VER == 1200)
- # undef _WIN32_WINNT
-@@ -70,6 +90,7 @@
- # include <ruby/encoding.h>
- #endif
- 
-+#undef off_t	/* ruby defines off_t as _int64, Mingw uses long */
- #undef EXTERN
- #undef _
- 
-@@ -157,31 +178,43 @@
- #define rb_hash_new			dll_rb_hash_new
- #define rb_inspect			dll_rb_inspect
- #define rb_int2inum			dll_rb_int2inum
-+#if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
-+#define rb_fix2int			dll_rb_fix2int
-+#define rb_num2int			dll_rb_num2int
-+#define rb_num2uint			dll_rb_num2uint
-+#endif
- #define rb_lastline_get			dll_rb_lastline_get
- #define rb_lastline_set			dll_rb_lastline_set
- #define rb_load_protect			dll_rb_load_protect
-+#ifndef RUBY19_OR_LATER
- #define rb_num2long			dll_rb_num2long
-+#endif
- #define rb_num2ulong			dll_rb_num2ulong
- #define rb_obj_alloc			dll_rb_obj_alloc
- #define rb_obj_as_string		dll_rb_obj_as_string
- #define rb_obj_id			dll_rb_obj_id
- #define rb_raise			dll_rb_raise
--#define rb_str2cstr			dll_rb_str2cstr
- #define rb_str_cat			dll_rb_str_cat
- #define rb_str_concat			dll_rb_str_concat
- #define rb_str_new			dll_rb_str_new
- #ifdef rb_str_new2
- /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
- # define need_rb_str_new_cstr 1
-+/* Ruby's headers #define rb_str_new_cstr to make use of GCC's
-+ * __builtin_constant_p extension. */
-+# undef rb_str_new_cstr
- # define rb_str_new_cstr		dll_rb_str_new_cstr
- #else
- # define rb_str_new2			dll_rb_str_new2
- #endif
- #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-+# define rb_string_value		dll_rb_string_value
- # define rb_string_value_ptr		dll_rb_string_value_ptr
- # define rb_float_new			dll_rb_float_new
- # define rb_ary_new			dll_rb_ary_new
- # define rb_ary_push			dll_rb_ary_push
-+#else
-+# define rb_str2cstr			dll_rb_str2cstr
- #endif
- #ifdef RUBY19_OR_LATER
- # define rb_errinfo			dll_rb_errinfo
-@@ -190,9 +223,11 @@
- #endif
- #define ruby_init			dll_ruby_init
- #define ruby_init_loadpath		dll_ruby_init_loadpath
--#define NtInitialize			dll_NtInitialize
--#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
--# define rb_w32_snprintf		dll_rb_w32_snprintf
-+#ifdef WIN3264
-+# define NtInitialize			dll_NtInitialize
-+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-+#  define rb_w32_snprintf		dll_rb_w32_snprintf
-+# endif
- #endif
- 
- #ifdef RUBY19_OR_LATER
-@@ -201,7 +236,9 @@
- # define rb_enc_find			dll_rb_enc_find
- # define rb_enc_str_new			dll_rb_enc_str_new
- # define rb_sprintf			dll_rb_sprintf
-+# define rb_require			dll_rb_require
- # define ruby_init_stack		dll_ruby_init_stack
-+# define ruby_process_options		dll_ruby_process_options
- #endif
- 
- /*
-@@ -236,7 +273,11 @@
- static VALUE (*dll_rb_hash_new) (void);
- static VALUE (*dll_rb_inspect) (VALUE);
- static VALUE (*dll_rb_int2inum) (long);
--static VALUE (*dll_rb_int2inum) (long);
-+#if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
-+static long (*dll_rb_fix2int) (VALUE);
-+static long (*dll_rb_num2int) (VALUE);
-+static unsigned long (*dll_rb_num2uint) (VALUE);
-+#endif
- static VALUE (*dll_rb_lastline_get) (void);
- static void (*dll_rb_lastline_set) (VALUE);
- static void (*dll_rb_load_protect) (VALUE, int, int*);
-@@ -246,7 +287,11 @@
- static VALUE (*dll_rb_obj_as_string) (VALUE);
- static VALUE (*dll_rb_obj_id) (VALUE);
- static void (*dll_rb_raise) (VALUE, const char*, ...);
-+#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-+static VALUE (*dll_rb_string_value) (volatile VALUE*);
-+#else
- static char *(*dll_rb_str2cstr) (VALUE,int*);
-+#endif
- static VALUE (*dll_rb_str_cat) (VALUE, const char*, long);
- static VALUE (*dll_rb_str_concat) (VALUE, VALUE);
- static VALUE (*dll_rb_str_new) (const char*, long);
-@@ -263,7 +308,12 @@
- #endif
- static void (*dll_ruby_init) (void);
- static void (*dll_ruby_init_loadpath) (void);
-+#ifdef WIN3264
- static void (*dll_NtInitialize) (int*, char***);
-+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-+static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
-+# endif
-+#endif
- #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
- static char * (*dll_rb_string_value_ptr) (volatile VALUE*);
- static VALUE (*dll_rb_float_new) (double);
-@@ -273,9 +323,6 @@
- #ifdef RUBY19_OR_LATER
- static VALUE (*dll_rb_int2big)(SIGNED_VALUE);
- #endif
--#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
--static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
--#endif
- 
- #ifdef RUBY19_OR_LATER
- static void (*dll_ruby_script) (const char*);
-@@ -283,7 +330,9 @@
- static rb_encoding* (*dll_rb_enc_find) (const char*);
- static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
- static VALUE (*dll_rb_sprintf) (const char*, ...);
-+static VALUE (*dll_rb_require) (const char*);
- static void (*ruby_init_stack)(VALUE*);
-+static void* (*ruby_process_options)(int, char**);
- #endif
- 
- #ifdef RUBY19_OR_LATER
-@@ -297,12 +346,11 @@
- }
- #endif
- 
--static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */
-+static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
- 
- /*
-  * Table of name to function pointer of ruby.
-  */
--#define RUBY_PROC FARPROC
- static struct
- {
-     char *name;
-@@ -338,6 +386,11 @@
-     {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
-     {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
-     {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
-+#if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
-+    {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
-+    {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
-+    {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
-+#endif
-     {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get},
-     {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set},
-     {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect},
-@@ -347,7 +400,11 @@
-     {"rb_obj_as_string", (RUBY_PROC*)&dll_rb_obj_as_string},
-     {"rb_obj_id", (RUBY_PROC*)&dll_rb_obj_id},
-     {"rb_raise", (RUBY_PROC*)&dll_rb_raise},
-+#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-+    {"rb_string_value", (RUBY_PROC*)&dll_rb_string_value},
-+#else
-     {"rb_str2cstr", (RUBY_PROC*)&dll_rb_str2cstr},
-+#endif
-     {"rb_str_cat", (RUBY_PROC*)&dll_rb_str_cat},
-     {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat},
-     {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new},
-@@ -363,15 +420,17 @@
- #endif
-     {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
-     {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
-+#ifdef WIN3264
-     {
--#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
-+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
-     "NtInitialize",
--#else
-+# else
-     "ruby_sysinit",
--#endif
-+# endif
- 			(RUBY_PROC*)&dll_NtInitialize},
--#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-+# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-     {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
-+# endif
- #endif
- #if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
-     {"rb_string_value_ptr", (RUBY_PROC*)&dll_rb_string_value_ptr},
-@@ -386,7 +445,9 @@
-     {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
-     {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
-     {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
-+    {"rb_require", (RUBY_PROC*)&dll_rb_require},
-     {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
-+    {"ruby_process_options", (RUBY_PROC*)&dll_ruby_process_options},
- #endif
-     {"", NULL},
- };
-@@ -399,8 +460,8 @@
- {
-     if (hinstRuby)
-     {
--	FreeLibrary(hinstRuby);
--	hinstRuby = 0;
-+	close_dll(hinstRuby);
-+	hinstRuby = NULL;
-     }
- }
- 
-@@ -416,7 +477,7 @@
- 
-     if (hinstRuby)
- 	return OK;
--    hinstRuby = LoadLibrary(libname);
-+    hinstRuby = load_dll(libname);
-     if (!hinstRuby)
-     {
- 	if (verbose)
-@@ -426,11 +487,11 @@
- 
-     for (i = 0; ruby_funcname_table[i].ptr; ++i)
-     {
--	if (!(*ruby_funcname_table[i].ptr = GetProcAddress(hinstRuby,
-+	if (!(*ruby_funcname_table[i].ptr = symbol_from_dll(hinstRuby,
- 			ruby_funcname_table[i].name)))
- 	{
--	    FreeLibrary(hinstRuby);
--	    hinstRuby = 0;
-+	    close_dll(hinstRuby);
-+	    hinstRuby = NULL;
- 	    if (verbose)
- 		EMSG2(_(e_loadfunc), ruby_funcname_table[i].name);
- 	    return FAIL;
-@@ -539,9 +600,9 @@
- 	if (u_save(eap->line1 - 1, eap->line2 + 1) != OK)
- 	    return;
- 	for (i = eap->line1; i <= eap->line2; i++) {
--	    VALUE line, oldline;
-+	    VALUE line;
- 
--	    line = oldline = vim_str2rb_enc_str((char *)ml_get(i));
-+	    line = vim_str2rb_enc_str((char *)ml_get(i));
- 	    rb_lastline_set(line);
- 	    eval_enc_string_protect((char *) eap->arg, &state);
- 	    if (state) {
-@@ -616,13 +677,16 @@
- 		ruby_init();
- 	    }
- #ifdef RUBY19_OR_LATER
-+	    {
-+		int dummy_argc = 2;
-+		char *dummy_argv[] = {"vim-ruby", "-e0"};
-+		ruby_process_options(dummy_argc, dummy_argv);
-+	    }
- 	    ruby_script("vim-ruby");
--#endif
-+#else
- 	    ruby_init_loadpath();
--	    ruby_io_init();
--#ifdef RUBY19_OR_LATER
--	    rb_enc_find_index("encdb");
- #endif
-+	    ruby_io_init();
- 	    ruby_vim_init();
- 	    ruby_initialized = 1;
- #ifdef DYNAMIC_RUBY
-@@ -711,11 +775,19 @@
-     char *buff, *p;
- 
-     str = rb_obj_as_string(str);
--    buff = ALLOCA_N(char, RSTRING_LEN(str));
--    strcpy(buff, RSTRING_PTR(str));
--    p = strchr(buff, '\n');
--    if (p) *p = '\0';
--    MSG(buff);
-+    if (RSTRING_LEN(str) > 0)
-+    {
-+	/* Only do this when the string isn't empty, alloc(0) causes trouble. */
-+	buff = ALLOCA_N(char, RSTRING_LEN(str));
-+	strcpy(buff, RSTRING_PTR(str));
-+	p = strchr(buff, '\n');
-+	if (p) *p = '\0';
-+	MSG(buff);
-+    }
-+    else
-+    {
-+	MSG("");
-+    }
-     return Qnil;
- }
- 
-@@ -906,15 +978,9 @@
- 
- static VALUE get_buffer_line(buf_T *buf, linenr_T n)
- {
--    if (n > 0 && n <= buf->b_ml.ml_line_count)
--    {
--	char *line = (char *)ml_get_buf(buf, n, FALSE);
--	return line ? vim_str2rb_enc_str(line) : Qnil;
--    }
--    rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
--#ifndef __GNUC__
--    return Qnil; /* For stop warning */
--#endif
-+    if (n <= 0 || n > buf->b_ml.ml_line_count)
-+	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
-+    return vim_str2rb_enc_str((char *)ml_get_buf(buf, n, FALSE));
- }
- 
- static VALUE buffer_aref(VALUE self, VALUE num)
-@@ -953,9 +1019,6 @@
-     else
-     {
- 	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
--#ifndef __GNUC__
--	return Qnil; /* For stop warning */
--#endif
-     }
-     return str;
- }
-@@ -1010,7 +1073,8 @@
-     long	n = NUM2LONG(num);
-     aco_save_T	aco;
- 
--    if (line == NULL) {
-+    if (line == NULL)
-+    {
- 	rb_raise(rb_eIndexError, "NULL line");
-     }
-     else if (n >= 0 && n <= buf->b_ml.ml_line_count)
-@@ -1034,7 +1098,8 @@
- 
- 	update_curbuf(NOT_VALID);
-     }
--    else {
-+    else
-+    {
- 	rb_raise(rb_eIndexError, "line number %ld out of range", n);
-     }
-     return str;
-@@ -1187,6 +1252,11 @@
-     return Qnil;
- }
- 
-+static VALUE f_nop(VALUE self UNUSED)
-+{
-+    return Qnil;
-+}
-+
- static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
- {
-     int i;
-@@ -1208,6 +1278,7 @@
- 
-     rb_stdout = rb_obj_alloc(rb_cObject);
-     rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
-+    rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
-     rb_define_global_function("p", f_p, -1);
- }
- 
-diff -Naur vim73.orig/src/if_sniff.c vim73/src/if_sniff.c
---- vim73.orig/src/if_sniff.c	2010-05-15 11:04:06.000000000 +0000
-+++ vim73/src/if_sniff.c	2012-11-01 20:35:40.000000000 +0000
-@@ -9,7 +9,6 @@
- 
- #ifdef WIN32
- # include <stdio.h>
--# include "vimio.h"
- # include <process.h>
- # include <string.h>
- # include <assert.h>
-diff -Naur vim73.orig/src/if_tcl.c vim73/src/if_tcl.c
---- vim73.orig/src/if_tcl.c	2010-08-08 13:07:25.000000000 +0000
-+++ vim73/src/if_tcl.c	2012-11-01 20:35:45.000000000 +0000
-@@ -74,18 +74,18 @@
- #endif
- 
- #include <tcl.h>
--#include <errno.h>
- #include <string.h>
- 
- typedef struct
- {
-     Tcl_Interp *interp;
-+    int exitvalue;
-     int range_start, range_end;
-     int lbase;
-     char *curbuf, *curwin;
- } tcl_info;
- 
--static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
-+static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
- 
- #define VAR_RANGE1	"::vim::range(start)"
- #define VAR_RANGE2	"::vim::range(begin)"
-@@ -280,16 +280,19 @@
-  ****************************************************************************/
- 
- /*
-- * Replace standard "exit" and "catch" commands.
-+ * Replace standard "exit" command.
-  *
-- * This is a design flaw in Tcl -  the standard "exit" command just calls
-- * exit() and kills the application.  It should return TCL_EXIT to the
-- * app, which then decides if it wants to terminate or not.  In our case,
-- * we just delete the Tcl interpreter (and create a new one with the next
-- * :tcl command).
-+ * Delete the Tcl interpreter; a new one will be created with the next
-+ * :tcl command). The exit code is saved (and retrieved in tclexit()).
-+ * Since Tcl's exit is never expected to return and this replacement
-+ * does, then (except for a trivial case) additional Tcl commands will
-+ * be run. Since the interpreter is now marked as deleted, an error
-+ * will be returned -- typically "attempt to call eval in deleted
-+ * interpreter". Hopefully, at this point, checks for TCL_ERROR take
-+ * place and control percolates back up to Vim -- but with this new error
-+ * string in the interpreter's result value. Therefore it would be
-+ * useless for this routine to return the exit code via Tcl_SetResult().
-  */
--#define TCL_EXIT	5
--
-     static int
- exitcmd(dummy, interp, objc, objv)
-     ClientData dummy UNUSED;
-@@ -306,47 +309,12 @@
- 		break;
- 	    /* FALLTHROUGH */
- 	case 1:
--	    Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
--	    return TCL_EXIT;
--	default:
--	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
--    }
--    return TCL_ERROR;
--}
-+	    tclinfo.exitvalue = value;
- 
--    static int
--catchcmd(dummy, interp, objc, objv)
--    ClientData	dummy UNUSED;
--    Tcl_Interp	*interp;
--    int		objc;
--    Tcl_Obj	*CONST objv[];
--{
--    char    *varname = NULL;
--    int	    result;
--
--    switch (objc)
--    {
--	case 3:
--	    varname = Tcl_GetStringFromObj(objv[2], NULL);
--	    /* fallthrough */
--	case 2:
--	    Tcl_ResetResult(interp);
--	    Tcl_AllowExceptions(interp);
--	    result = Tcl_EvalObj(interp, objv[1]);
--	    if (result == TCL_EXIT)
--		return result;
--	    if (varname)
--	    {
--		if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
--		{
--		    Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
--		    return TCL_ERROR;
--		}
--	    }
--	    Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
--	    return TCL_OK;
-+	    Tcl_DeleteInterp(interp);
-+	    break;
- 	default:
--	    Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
-+	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
-     }
-     return TCL_ERROR;
- }
-@@ -373,6 +341,7 @@
- /*
-  *  "::vim::buffer list" - create a list of buffer commands.
-  *  "::vim::buffer {N}" - create buffer command for buffer N.
-+ *  "::vim::buffer exists {N}" - test if buffer N exists.
-  *  "::vim::buffer new" - create a new buffer (not implemented)
-  */
-     static int
-@@ -1664,7 +1633,7 @@
- static Tcl_ChannelType channel_type =
- {
-     "vimmessage",	/* typeName */
--    NULL,		/* version */
-+    TCL_CHANNEL_VERSION_2, /* version */
-     channel_close,	/* closeProc */
-     channel_input,	/* inputProc */
-     channel_output,	/* outputProc */
-@@ -1679,6 +1648,8 @@
-     NULL,		/* flushProc */
-     NULL,		/* handlerProc */
- #endif
-+/* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
-+ * set above */
- #ifdef TCL_CHANNEL_VERSION_3
-     NULL,		/* wideSeekProc */
- #endif
-@@ -1742,7 +1713,9 @@
- 	Tcl_Interp *interp;
- 	static Tcl_Channel ch1, ch2;
- 
--	/* replace stdout and stderr */
-+	/* Create replacement channels for stdout and stderr; this has to be
-+	 * done each time an interpreter is created since the channels are closed
-+	 * when the interpreter is deleted */
- 	ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
- 	ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
- 	Tcl_SetStdChannel(ch1, TCL_STDOUT);
-@@ -1762,15 +1735,18 @@
- #endif
- 
- 	Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
-+#ifdef WIN3264
-+	Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
-+#endif
- 	Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
-+#ifdef WIN3264
-+	Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
-+#endif
- 
--	/* replace some standard Tcl commands */
-+	/* replace standard Tcl exit command */
- 	Tcl_DeleteCommand(interp, "exit");
- 	Tcl_CreateObjCommand(interp, "exit", exitcmd,
- 	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
--	Tcl_DeleteCommand(interp, "catch");
--	Tcl_CreateObjCommand(interp, "catch", catchcmd,
--	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
- 
- 	/* new commands, in ::vim namespace */
- 	Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
-@@ -1822,6 +1798,8 @@
- 	tclinfo.range_end = row2tcl(eap->line2);
- 	tclupdatevars();
-     }
-+
-+    tclinfo.exitvalue = 0;
-     return OK;
- }
- 
-@@ -1885,30 +1863,23 @@
- {
-     int newerr = OK;
- 
--    if (error == TCL_EXIT )
-+    if (Tcl_InterpDeleted(tclinfo.interp)     /* True if we intercepted Tcl's exit command */
-+#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
-+	|| Tcl_LimitExceeded(tclinfo.interp)  /* True if the interpreter cannot continue */
-+#endif
-+	)
-     {
--	int retval;
- 	char buf[50];
--	Tcl_Obj *robj;
- 
--	robj = Tcl_GetObjResult(tclinfo.interp);
--	if( Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK )
-+	sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
-+	tclerrmsg(buf);
-+	if (tclinfo.exitvalue == 0)
- 	{
--	    EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
--	    newerr = FAIL;
-+	    did_emsg = 0;
-+	    newerr = OK;
- 	}
- 	else
--	{
--	    sprintf(buf, _("E572: exit code %d"), retval);
--	    tclerrmsg(buf);
--	    if (retval == 0 )
--	    {
--		did_emsg = 0;
--		newerr = OK;
--	    }
--	    else
--		newerr = FAIL;
--	}
-+	    newerr = FAIL;
- 
- 	tcldelthisinterp();
-     }
-@@ -2022,7 +1993,12 @@
- 	Tcl_SetVar(tclinfo.interp, var_line, line, 0);
- 	Tcl_AllowExceptions(tclinfo.interp);
- 	err = Tcl_Eval(tclinfo.interp, script);
--	if (err != TCL_OK)
-+	if (err != TCL_OK
-+	    || Tcl_InterpDeleted(tclinfo.interp)
-+#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
-+	    || Tcl_LimitExceeded(tclinfo.interp)
-+#endif
-+	   )
- 	    break;
- 	line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
- 	if (line)
-diff -Naur vim73.orig/src/if_xcmdsrv.c vim73/src/if_xcmdsrv.c
---- vim73.orig/src/if_xcmdsrv.c	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/if_xcmdsrv.c	2012-11-01 20:35:47.000000000 +0000
-@@ -572,61 +572,55 @@
- {
-     time_t	    start;
-     time_t	    now;
--    time_t	    lastChk = 0;
-     XEvent	    event;
--    XPropertyEvent *e = (XPropertyEvent *)&event;
--#   define SEND_MSEC_POLL 50
-+
-+#define UI_MSEC_DELAY 50
-+#define SEND_MSEC_POLL 500
-+#ifndef HAVE_SELECT
-+    struct pollfd   fds;
-+
-+    fds.fd = ConnectionNumber(dpy);
-+    fds.events = POLLIN;
-+#else
-+    fd_set	    fds;
-+    struct timeval  tv;
-+
-+    tv.tv_sec = 0;
-+    tv.tv_usec =  SEND_MSEC_POLL * 1000;
-+    FD_ZERO(&fds);
-+    FD_SET(ConnectionNumber(dpy), &fds);
-+#endif
- 
-     time(&start);
--    while (endCond(endData) == 0)
-+    while (TRUE)
-     {
-+	while (XCheckWindowEvent(dpy, commWindow, PropertyChangeMask, &event))
-+	    serverEventProc(dpy, &event);
-+
-+	if (endCond(endData) != 0)
-+	    break;
-+	if (!WindowValid(dpy, w))
-+	    break;
- 	time(&now);
- 	if (seconds >= 0 && (now - start) >= seconds)
- 	    break;
--	if (now != lastChk)
--	{
--	    lastChk = now;
--	    if (!WindowValid(dpy, w))
--		break;
--	    /*
--	     * Sometimes the PropertyChange event doesn't come.
--	     * This can be seen in eg: vim -c 'echo remote_expr("gvim", "3+2")'
--	     */
--	    serverEventProc(dpy, NULL);
--	}
-+
-+	/* Just look out for the answer without calling back into Vim */
- 	if (localLoop)
- 	{
--	    /* Just look out for the answer without calling back into Vim */
- #ifndef HAVE_SELECT
--	    struct pollfd   fds;
--
--	    fds.fd = ConnectionNumber(dpy);
--	    fds.events = POLLIN;
- 	    if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
- 		break;
- #else
--	    fd_set	    fds;
--	    struct timeval  tv;
--
--	    tv.tv_sec = 0;
--	    tv.tv_usec =  SEND_MSEC_POLL * 1000;
--	    FD_ZERO(&fds);
--	    FD_SET(ConnectionNumber(dpy), &fds);
--	    if (select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &tv) < 0)
-+	    if (select(FD_SETSIZE, &fds, NULL, NULL, &tv) < 0)
- 		break;
- #endif
--	    while (XEventsQueued(dpy, QueuedAfterReading) > 0)
--	    {
--		XNextEvent(dpy, &event);
--		if (event.type == PropertyNotify && e->window == commWindow)
--		    serverEventProc(dpy, &event);
--	    }
- 	}
- 	else
- 	{
- 	    if (got_int)
- 		break;
--	    ui_delay((long)SEND_MSEC_POLL, TRUE);
-+	    ui_delay((long)UI_MSEC_DELAY, TRUE);
- 	    ui_breakcheck();
- 	}
-     }
-@@ -655,7 +649,6 @@
- 	if (SendInit(dpy) < 0)
- 	    return NULL;
-     }
--    ga_init2(&ga, 1, 100);
- 
-     /*
-      * Read the registry property.
-@@ -1198,9 +1191,8 @@
- 	if ((*p == 'c' || *p == 'k') && (p[1] == 0))
- 	{
- 	    Window	resWindow;
--	    char_u	*name, *script, *serial, *end, *res;
-+	    char_u	*name, *script, *serial, *end;
- 	    Bool	asKeys = *p == 'k';
--	    garray_T	reply;
- 	    char_u	*enc;
- 
- 	    /*
-@@ -1256,50 +1248,52 @@
- 	    if (script == NULL || name == NULL)
- 		continue;
- 
--	    /*
--	     * Initialize the result property, so that we're ready at any
--	     * time if we need to return an error.
--	     */
--	    if (resWindow != None)
--	    {
--		ga_init2(&reply, 1, 100);
-+            if (serverName != NULL && STRICMP(name, serverName) == 0)
-+            {
-+                script = serverConvert(enc, script, &tofree);
-+                if (asKeys)
-+                    server_to_input_buf(script);
-+                else
-+                {
-+                    char_u      *res;
-+
-+                    res = eval_client_expr_to_string(script);
-+		    if (resWindow != None)
-+		    {
-+			garray_T    reply;
-+
-+			/* Initialize the result property. */
-+			ga_init2(&reply, 1, 100);
- #ifdef FEAT_MBYTE
--		ga_grow(&reply, 50 + STRLEN(p_enc));
--		sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
-+			ga_grow(&reply, 50 + STRLEN(p_enc));
-+			sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
- 						   0, 0, p_enc, 0, serial, 0);
--		reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
-+			reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
- #else
--		ga_grow(&reply, 50);
--		sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
--		reply.ga_len = 10 + STRLEN(serial);
-+			ga_grow(&reply, 50);
-+			sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
-+							     0, 0, serial, 0);
-+			reply.ga_len = 10 + STRLEN(serial);
- #endif
--	    }
--	    res = NULL;
--	    if (serverName != NULL && STRICMP(name, serverName) == 0)
--	    {
--		script = serverConvert(enc, script, &tofree);
--		if (asKeys)
--		    server_to_input_buf(script);
--		else
--		    res = eval_client_expr_to_string(script);
--		vim_free(tofree);
--	    }
--	    if (resWindow != None)
--	    {
--		if (res != NULL)
--		    ga_concat(&reply, res);
--		else if (asKeys == 0)
--		{
--		    ga_concat(&reply, (char_u *)_(e_invexprmsg));
--		    ga_append(&reply, 0);
--		    ga_concat(&reply, (char_u *)"-c 1");
--		}
--		ga_append(&reply, NUL);
--		(void)AppendPropCarefully(dpy, resWindow, commProperty,
--					   reply.ga_data, reply.ga_len);
--		ga_clear(&reply);
--	    }
--	    vim_free(res);
-+
-+			/* Evaluate the expression and return the result. */
-+			if (res != NULL)
-+			    ga_concat(&reply, res);
-+			else
-+			{
-+			    ga_concat(&reply, (char_u *)_(e_invexprmsg));
-+			    ga_append(&reply, 0);
-+			    ga_concat(&reply, (char_u *)"-c 1");
-+			}
-+			ga_append(&reply, NUL);
-+			(void)AppendPropCarefully(dpy, resWindow, commProperty,
-+						 reply.ga_data, reply.ga_len);
-+			ga_clear(&reply);
-+		    }
-+                    vim_free(res);
-+                }
-+                vim_free(tofree);
-+            }
- 	}
- 	else if (*p == 'r' && p[1] == 0)
- 	{
-diff -Naur vim73.orig/src/integration.c vim73/src/integration.c
---- vim73.orig/src/integration.c	2010-08-08 13:09:21.000000000 +0000
-+++ vim73/src/integration.c	2012-11-01 20:35:40.000000000 +0000
-@@ -33,7 +33,6 @@
- #include <sys/un.h>
- #endif
- 
--#include <errno.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <sys/param.h>
-diff -Naur vim73.orig/src/keymap.h vim73/src/keymap.h
---- vim73.orig/src/keymap.h	2010-07-25 13:14:04.000000000 +0000
-+++ vim73/src/keymap.h	2012-11-01 20:35:48.000000000 +0000
-@@ -92,13 +92,13 @@
-  */
- #define KS_TEAROFF		244
- 
--/* used for JSB term mouse */
-+/* Used for JSB term mouse. */
- #define KS_JSBTERM_MOUSE	243
- 
--/* used a termcap entry that produces a normal character */
-+/* Used a termcap entry that produces a normal character. */
- #define KS_KEY			242
- 
--/* Used for the qnx pterm mouse */
-+/* Used for the qnx pterm mouse. */
- #define KS_PTERM_MOUSE		241
- 
- /* Used for click in a tab pages label. */
-@@ -107,6 +107,12 @@
- /* Used for menu in a tab pages line. */
- #define KS_TABMENU		239
- 
-+/* Used for the urxvt mouse. */
-+#define KS_URXVT_MOUSE		238
-+
-+/* Used for the sgr mouse. */
-+#define KS_SGR_MOUSE		237
-+
- /*
-  * Filler used after KS_SPECIAL and others
-  */
-@@ -408,6 +414,8 @@
- #define K_DEC_MOUSE	TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
- #define K_JSBTERM_MOUSE	TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
- #define K_PTERM_MOUSE	TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
-+#define K_URXVT_MOUSE	TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
-+#define K_SGR_MOUSE	TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
- 
- #define K_SELECT	TERMCAP2KEY(KS_SELECT, KE_FILLER)
- #define K_TEAROFF	TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
-diff -Naur vim73.orig/src/link.sh vim73/src/link.sh
---- vim73.orig/src/link.sh	2010-07-21 19:43:29.000000000 +0000
-+++ vim73/src/link.sh	2012-11-01 20:35:40.000000000 +0000
-@@ -5,7 +5,7 @@
- # libraries when they exist, but this doesn't mean they are needed for Vim.
- #
- #      Author: Bram Moolenaar
--# Last change: 2006 Sep 26
-+# Last change: 2010 Nov 03
- #     License: Public domain
- #
- # Warning: This fails miserably if the linker doesn't return an error code!
-@@ -16,11 +16,23 @@
- echo "$LINK " >link.cmd
- exit_value=0
- 
-+if test "$LINK_AS_NEEDED" = yes; then
-+  echo "link.sh: \$LINK_AS_NEEDED set to 'yes': invoking linker directly."
-+  cat link.cmd
-+  if sh link.cmd; then
-+    exit_value=0
-+    echo "link.sh: Linked fine"
-+  else
-+    exit_value=$?
-+    echo "link.sh: Linking failed"
-+  fi
-+else
-+  if test -f auto/link.sed; then
-+
- #
- # If auto/link.sed already exists, use it.  We assume a previous run of
- # link.sh has found the correct set of libraries.
- #
--if test -f auto/link.sed; then
-   echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now."
-   echo "link.sh: If linking fails, try deleting the auto/link.sed file."
-   echo "link.sh: If this fails too, try creating an empty auto/link.sed file."
-@@ -124,6 +136,8 @@
-   fi
- fi
- 
-+fi
-+
- #
- # cleanup
- #
-diff -Naur vim73.orig/src/macros.h vim73/src/macros.h
---- vim73.orig/src/macros.h	2010-07-17 19:41:21.000000000 +0000
-+++ vim73/src/macros.h	2012-11-01 20:35:47.000000000 +0000
-@@ -259,6 +259,8 @@
-  * PTR2CHAR(): get character from pointer.
-  */
- #ifdef FEAT_MBYTE
-+/* Get the length of the character p points to */
-+# define MB_PTR2LEN(p)		(has_mbyte ? (*mb_ptr2len)(p) : 1)
- /* Advance multi-byte pointer, skip over composing chars. */
- # define mb_ptr_adv(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
- /* Advance multi-byte pointer, do not skip over composing chars. */
-@@ -272,6 +274,7 @@
- # define MB_CHARLEN(p)	    (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
- # define PTR2CHAR(p)	    (has_mbyte ? mb_ptr2char(p) : (int)*(p))
- #else
-+# define MB_PTR2LEN(p)		1
- # define mb_ptr_adv(p)		++p
- # define mb_cptr_adv(p)		++p
- # define mb_ptr_back(s, p)	--p
-@@ -285,3 +288,17 @@
- #else
- # define DO_AUTOCHDIR
- #endif
-+
-+#if defined(FEAT_SCROLLBIND) && defined(FEAT_CURSORBIND)
-+# define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
-+#else
-+# if defined(FEAT_SCROLLBIND)
-+#  define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE
-+# else
-+#  if defined(FEAT_CURSORBIND)
-+#   define RESET_BINDING(wp)  (wp)->w_p_crb = FALSE
-+#  else
-+#   define RESET_BINDING(wp)
-+#  endif
-+# endif
-+#endif
-diff -Naur vim73.orig/src/main.c vim73/src/main.c
---- vim73.orig/src/main.c	2010-08-08 13:09:55.000000000 +0000
-+++ vim73/src/main.c	2012-11-01 20:35:46.000000000 +0000
-@@ -7,10 +7,6 @@
-  * See README.txt for an overview of the Vim source code.
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"		/* for close() and dup() */
--#endif
--
- #define EXTERN
- #include "vim.h"
- 
-@@ -96,37 +92,39 @@
- #define EDIT_TAG    3	    /* tag name argument given, use tagname */
- #define EDIT_QF	    4	    /* start in quickfix mode */
- 
--#if defined(UNIX) || defined(VMS)
-+#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
- static int file_owned __ARGS((char *fname));
- #endif
- static void mainerr __ARGS((int, char_u *));
-+#ifndef NO_VIM_MAIN
- static void main_msg __ARGS((char *s));
- static void usage __ARGS((void));
- static int get_number_arg __ARGS((char_u *p, int *idx, int def));
--#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
-+# if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
- static void init_locale __ARGS((void));
--#endif
-+# endif
- static void parse_command_name __ARGS((mparm_T *parmp));
- static void early_arg_scan __ARGS((mparm_T *parmp));
- static void command_line_scan __ARGS((mparm_T *parmp));
- static void check_tty __ARGS((mparm_T *parmp));
- static void read_stdin __ARGS((void));
- static void create_windows __ARGS((mparm_T *parmp));
--#ifdef FEAT_WINDOWS
-+# ifdef FEAT_WINDOWS
- static void edit_buffers __ARGS((mparm_T *parmp));
--#endif
-+# endif
- static void exe_pre_commands __ARGS((mparm_T *parmp));
- static void exe_commands __ARGS((mparm_T *parmp));
- static void source_startup_scripts __ARGS((mparm_T *parmp));
- static void main_start_gui __ARGS((void));
--#if defined(HAS_SWAP_EXISTS_ACTION)
-+# if defined(HAS_SWAP_EXISTS_ACTION)
- static void check_swap_exists_action __ARGS((void));
--#endif
--#ifdef FEAT_CLIENTSERVER
-+# endif
-+# if defined(FEAT_CLIENTSERVER) || defined(PROTO)
- static void exec_on_server __ARGS((mparm_T *parmp));
- static void prepare_server __ARGS((mparm_T *parmp));
- static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr));
- static char_u *serverMakeName __ARGS((char_u *arg, char *cmd));
-+# endif
- #endif
- 
- 
-@@ -149,7 +147,8 @@
- #define ME_INVALID_ARG		5
- };
- 
--#ifndef PROTO	    /* don't want a prototype for main() */
-+#ifndef NO_VIM_MAIN	/* skip this for unittests */
-+#ifndef PROTO		/* don't want a prototype for main() */
-     int
- # ifdef VIMDLL
- _export
-@@ -555,6 +554,31 @@
-     debug_break_level = params.use_debug_break_level;
- #endif
- 
-+#ifdef FEAT_MZSCHEME
-+    /*
-+     * Newer version of MzScheme (Racket) require earlier (trampolined)
-+     * initialisation via scheme_main_setup.
-+     * Implement this by initialising it as early as possible
-+     * and splitting off remaining Vim main into vim_main2
-+     */
-+    {
-+	/* Pack up preprocessed command line arguments.
-+	 * It is safe because Scheme does not access argc/argv. */
-+	char *args[2];
-+	args[0] = (char *)fname;
-+	args[1] = (char *)&params;
-+	return mzscheme_main(2, args);
-+    }
-+}
-+
-+int vim_main2(int argc, char **argv)
-+{
-+    char_u	*fname = (char_u *)argv[0];
-+    mparm_T	params;
-+
-+    memcpy(&params, argv[1], sizeof(params));
-+#endif
-+
-     /* Execute --cmd arguments. */
-     exe_pre_commands(&params);
- 
-@@ -904,6 +928,18 @@
-     TIME_MSG("VimEnter autocommands");
- #endif
- 
-+#if defined(FEAT_EVAL) && defined(FEAT_CLIPBOARD)
-+    /* Adjust default register name for "unnamed" in 'clipboard'. Can only be
-+     * done after the clipboard is available and all initial commands that may
-+     * modify the 'clipboard' setting have run; i.e. just before entering the
-+     * main loop. */
-+    {
-+	int default_regname = 0;
-+	adjust_clip_reg(&default_regname);
-+	set_reg_var(default_regname);
-+    }
-+#endif
-+
- #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
-     /* When a startup script or session file setup for diff'ing and
-      * scrollbind, sync the scrollbind now. */
-@@ -940,7 +976,7 @@
-     if (netbeansArg != NULL && strncmp("-nb", netbeansArg, 3) == 0)
-     {
- # ifdef FEAT_GUI
--#  if !defined(FEAT_GUI_MOTIF) && !defined(FEAT_GUI_GTK)  \
-+#  if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
- 		&& !defined(FEAT_GUI_W32)
- 	if (gui.in_use)
- 	{
-@@ -958,18 +994,13 @@
- 
-     /*
-      * Call the main command loop.  This never returns.
--     * For embedded MzScheme the main_loop will be called by Scheme
--     * for proper stack tracking
--     */
--#ifndef FEAT_MZSCHEME
-+    */
-     main_loop(FALSE, FALSE);
--#else
--    mzscheme_main();
--#endif
- 
-     return 0;
- }
- #endif /* PROTO */
-+#endif /* NO_VIM_MAIN */
- 
- /*
-  * Main loop: Execute Normal mode commands until exiting Vim.
-@@ -1009,6 +1040,7 @@
- 	skip_redraw = FALSE;
- 	RedrawingDisabled = 0;
- 	no_wait_return = 0;
-+	vgetc_busy = 0;
- # ifdef FEAT_EVAL
- 	emsg_skip = 0;
- # endif
-@@ -1202,7 +1234,9 @@
- 			|| conceal_cursor_line(curwin)
- 			|| need_cursor_line_redraw))
- 	    {
--		if (conceal_old_cursor_line != conceal_new_cursor_line)
-+		if (conceal_old_cursor_line != conceal_new_cursor_line
-+			&& conceal_old_cursor_line
-+						<= curbuf->b_ml.ml_line_count)
- 		    update_single_line(curwin, conceal_old_cursor_line);
- 		update_single_line(curwin, conceal_new_cursor_line);
- 		curwin->w_valid &= ~VALID_CROW;
-@@ -1335,7 +1369,7 @@
- 		{
- 		    apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
- 						    buf->b_fname, FALSE, buf);
--		    buf->b_changedtick = -1;    /* note that we did it already */
-+		    buf->b_changedtick = -1;  /* note that we did it already */
- 		    /* start all over, autocommands may mess up the lists */
- 		    next_tp = first_tabpage;
- 		    break;
-@@ -1432,6 +1466,7 @@
-     mch_exit(exitval);
- }
- 
-+#ifndef NO_VIM_MAIN
- /*
-  * Get a (optional) count for a Vim argument.
-  */
-@@ -2996,6 +3031,8 @@
- #endif
- }
- 
-+#endif  /* NO_VIM_MAIN */
-+
- /*
-  * Get an environment variable, and execute it as Ex commands.
-  * Returns FAIL if the environment variable was not executed, OK otherwise.
-@@ -3035,7 +3072,7 @@
-     return FAIL;
- }
- 
--#if defined(UNIX) || defined(VMS)
-+#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
- /*
-  * Return TRUE if we are certain the user owns the file "fname".
-  * Used for ".vimrc" and ".exrc".
-@@ -3093,6 +3130,7 @@
-     mainerr(ME_ARG_MISSING, str);
- }
- 
-+#ifndef NO_VIM_MAIN
- /*
-  * print a message with three spaces prepended and '\n' appended.
-  */
-@@ -3155,6 +3193,7 @@
- #endif
-     main_msg(_("-v\t\t\tVi mode (like \"vi\")"));
-     main_msg(_("-e\t\t\tEx mode (like \"ex\")"));
-+    main_msg(_("-E\t\t\tImproved Ex mode"));
-     main_msg(_("-s\t\t\tSilent (batch) mode (only for \"ex\")"));
- #ifdef FEAT_DIFF
-     main_msg(_("-d\t\t\tDiff mode (like \"vimdiff\")"));
-@@ -3270,11 +3309,6 @@
-     main_msg(_("+reverse\t\tDon't use reverse video (also: +rv)"));
-     main_msg(_("-xrm <resource>\tSet the specified resource"));
- #endif /* FEAT_GUI_X11 */
--#if defined(FEAT_GUI) && defined(RISCOS)
--    mch_msg(_("\nArguments recognised by gvim (RISC OS version):\n"));
--    main_msg(_("--columns <number>\tInitial width of window in columns"));
--    main_msg(_("--rows <number>\tInitial height of window in rows"));
--#endif
- #ifdef FEAT_GUI_GTK
-     mch_msg(_("\nArguments recognised by gvim (GTK+ version):\n"));
-     main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
-@@ -3283,6 +3317,7 @@
-     main_msg(_("-display <display>\tRun vim on <display> (also: --display)"));
-     main_msg(_("--role <role>\tSet a unique role to identify the main window"));
-     main_msg(_("--socketid <xid>\tOpen Vim inside another GTK widget"));
-+    main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
- #endif
- #ifdef FEAT_GUI_W32
-     main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
-@@ -3292,7 +3327,10 @@
- #ifdef FEAT_GUI_GNOME
-     /* Gnome gives extra messages for --help if we continue, but not for -h. */
-     if (gui.starting)
-+    {
- 	mch_msg("\n");
-+	gui.dofork = FALSE;
-+    }
-     else
- #endif
- 	mch_exit(0);
-@@ -3313,6 +3351,8 @@
- }
- #endif
- 
-+#endif
-+
- #if defined(STARTUPTIME) || defined(PROTO)
- static void time_diff __ARGS((struct timeval *then, struct timeval *now));
- 
-@@ -3422,7 +3462,7 @@
- 
- #endif
- 
--#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
-+#if (defined(FEAT_CLIENTSERVER) && !defined(NO_VIM_MAIN)) || defined(PROTO)
- 
- /*
-  * Common code for the X command server and the Win32 command server.
-@@ -3806,7 +3846,7 @@
-     int		i;
-     char_u	*inicmd = NULL;
-     char_u	*p;
--    char_u	cwd[MAXPATHL];
-+    char_u	*cwd;
- 
-     if (filec > 0 && filev[0][0] == '+')
-     {
-@@ -3817,15 +3857,25 @@
-     /* Check if we have at least one argument. */
-     if (filec <= 0)
- 	mainerr_arg_missing((char_u *)filev[-1]);
-+
-+    /* Temporarily cd to the current directory to handle relative file names. */
-+    cwd = alloc(MAXPATHL);
-+    if (cwd == NULL)
-+	return NULL;
-     if (mch_dirname(cwd, MAXPATHL) != OK)
-+    {
-+	vim_free(cwd);
- 	return NULL;
--    if ((p = vim_strsave_escaped_ext(cwd,
-+    }
-+    p = vim_strsave_escaped_ext(cwd,
- #ifdef BACKSLASH_IN_FILENAME
- 		    "",  /* rem_backslash() will tell what chars to escape */
- #else
- 		    PATH_ESC_CHARS,
- #endif
--		    '\\', TRUE)) == NULL)
-+		    '\\', TRUE);
-+    vim_free(cwd);
-+    if (p == NULL)
- 	return NULL;
-     ga_init2(&ga, 1, 100);
-     ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
-@@ -3858,13 +3908,20 @@
- 	ga_concat(&ga, p);
- 	vim_free(p);
-     }
-+    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
-+
-     /* The :drop commands goes to Insert mode when 'insertmode' is set, use
-      * CTRL-\ CTRL-N again. */
--    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
--    ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd -");
-+    ga_concat(&ga, (char_u *)"<C-\\><C-N>");
-+
-+    /* Switch back to the correct current directory (prior to temporary path
-+     * switch) unless 'autochdir' is set, in which case it will already be
-+     * correct after the :drop command. */
-+    ga_concat(&ga, (char_u *)":if !exists('+acd')||!&acd|cd -|endif<CR>");
-+
-     if (sendReply)
--	ga_concat(&ga, (char_u *)"<CR>:call SetupRemoteReplies()");
--    ga_concat(&ga, (char_u *)"<CR>:");
-+	ga_concat(&ga, (char_u *)":call SetupRemoteReplies()<CR>");
-+    ga_concat(&ga, (char_u *)":");
-     if (inicmd != NULL)
-     {
- 	/* Can't use <CR> after "inicmd", because an "startinsert" would cause
-@@ -3881,6 +3938,32 @@
- }
- 
- /*
-+ * Make our basic server name: use the specified "arg" if given, otherwise use
-+ * the tail of the command "cmd" we were started with.
-+ * Return the name in allocated memory.  This doesn't include a serial number.
-+ */
-+    static char_u *
-+serverMakeName(arg, cmd)
-+    char_u	*arg;
-+    char	*cmd;
-+{
-+    char_u *p;
-+
-+    if (arg != NULL && *arg != NUL)
-+	p = vim_strsave_up(arg);
-+    else
-+    {
-+	p = vim_strsave_up(gettail((char_u *)cmd));
-+	/* Remove .exe or .bat from the name. */
-+	if (p != NULL && vim_strchr(p, '.') != NULL)
-+	    *vim_strchr(p, '.') = NUL;
-+    }
-+    return p;
-+}
-+#endif /* FEAT_CLIENTSERVER */
-+
-+#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
-+/*
-  * Replace termcodes such as <CR> and insert as key presses if there is room.
-  */
-     void
-@@ -3991,32 +4074,7 @@
- # endif
-     return res;
- }
--
--
--/*
-- * Make our basic server name: use the specified "arg" if given, otherwise use
-- * the tail of the command "cmd" we were started with.
-- * Return the name in allocated memory.  This doesn't include a serial number.
-- */
--    static char_u *
--serverMakeName(arg, cmd)
--    char_u	*arg;
--    char	*cmd;
--{
--    char_u *p;
--
--    if (arg != NULL && *arg != NUL)
--	p = vim_strsave_up(arg);
--    else
--    {
--	p = vim_strsave_up(gettail((char_u *)cmd));
--	/* Remove .exe or .bat from the name. */
--	if (p != NULL && vim_strchr(p, '.') != NULL)
--	    *vim_strchr(p, '.') = NUL;
--    }
--    return p;
--}
--#endif /* FEAT_CLIENTSERVER */
-+#endif
- 
- /*
-  * When FEAT_FKMAP is defined, also compile the Farsi source code.
-diff -Naur vim73.orig/src/mark.c vim73/src/mark.c
---- vim73.orig/src/mark.c	2010-08-13 09:14:35.000000000 +0000
-+++ vim73/src/mark.c	2012-11-01 20:35:47.000000000 +0000
-@@ -98,6 +98,19 @@
- 	return OK;
-     }
- 
-+#ifdef FEAT_VISUAL
-+    if (c == '<')
-+    {
-+	curbuf->b_visual.vi_start = *pos;
-+	return OK;
-+    }
-+    if (c == '>')
-+    {
-+	curbuf->b_visual.vi_end = *pos;
-+	return OK;
-+    }
-+#endif
-+
- #ifndef EBCDIC
-     if (c > 'z')	    /* some islower() and isupper() cannot handle
- 				characters above 127 */
-@@ -1750,7 +1763,10 @@
- 	    {
- 		if (line[1] != NUL)
- 		{
--		    sscanf((char *)line + 2, "%ld %u", &pos.lnum, &pos.col);
-+		    unsigned u;
-+
-+		    sscanf((char *)line + 2, "%ld %u", &pos.lnum, &u);
-+		    pos.col = u;
- 		    switch (line[1])
- 		    {
- 			case '"': curbuf->b_last_cursor = pos; break;
-diff -Naur vim73.orig/src/mbyte.c vim73/src/mbyte.c
---- vim73.orig/src/mbyte.c	2010-07-18 13:05:44.000000000 +0000
-+++ vim73/src/mbyte.c	2012-11-01 20:35:48.000000000 +0000
-@@ -132,6 +132,7 @@
- static int dbcs_char2cells __ARGS((int c));
- static int dbcs_ptr2cells_len __ARGS((char_u *p, int size));
- static int dbcs_ptr2char __ARGS((char_u *p));
-+static int utf_safe_read_char_adv __ARGS((char_u **s, size_t *n));
- 
- /*
-  * Lookup table to quickly get the length in bytes of a UTF-8 character from
-@@ -707,7 +708,7 @@
- 	     */
- 	    n = (i & 0x80) ? 2 : 1;
- # else
--	    char buf[MB_MAXBYTES];
-+	    char buf[MB_MAXBYTES + 1];
- # ifdef X_LOCALE
- #  ifndef mblen
- #   define mblen _Xmblen
-@@ -837,6 +838,27 @@
- }
- 
- /*
-+ * Remove all BOM from "s" by moving remaining text.
-+ */
-+    void
-+remove_bom(s)
-+    char_u *s;
-+{
-+    if (enc_utf8)
-+    {
-+	char_u *p = s;
-+
-+	while ((p = vim_strbyte(p, 0xef)) != NULL)
-+	{
-+	    if (p[1] == 0xbb && p[2] == 0xbf)
-+		STRMOVE(p, p + 3);
-+	    else
-+		++p;
-+	}
-+    }
-+}
-+
-+/*
-  * Get class of pointer:
-  * 0 for blank or NUL
-  * 1 for punctuation
-@@ -1701,6 +1723,66 @@
- }
- 
- /*
-+ * Convert a UTF-8 byte sequence to a wide character.
-+ * String is assumed to be terminated by NUL or after "n" bytes, whichever
-+ * comes first.
-+ * The function is safe in the sense that it never accesses memory beyond the
-+ * first "n" bytes of "s".
-+ *
-+ * On success, returns decoded codepoint, advances "s" to the beginning of
-+ * next character and decreases "n" accordingly.
-+ *
-+ * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past
-+ * NUL byte.
-+ *
-+ * If byte sequence is illegal or incomplete, returns -1 and does not advance
-+ * "s".
-+ */
-+    static int
-+utf_safe_read_char_adv(s, n)
-+    char_u      **s;
-+    size_t      *n;
-+{
-+    int		c, k;
-+
-+    if (*n == 0) /* end of buffer */
-+	return 0;
-+
-+    k = utf8len_tab_zero[**s];
-+
-+    if (k == 1)
-+    {
-+	/* ASCII character or NUL */
-+	(*n)--;
-+	return *(*s)++;
-+    }
-+
-+    if ((size_t)k <= *n)
-+    {
-+	/* We have a multibyte sequence and it isn't truncated by buffer
-+	 * limits so utf_ptr2char() is safe to use. Or the first byte is
-+	 * illegal (k=0), and it's also safe to use utf_ptr2char(). */
-+	c = utf_ptr2char(*s);
-+
-+	/* On failure, utf_ptr2char() returns the first byte, so here we
-+	 * check equality with the first byte. The only non-ASCII character
-+	 * which equals the first byte of its own UTF-8 representation is
-+	 * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too.
-+	 * It's safe even if n=1, else we would have k=2 > n. */
-+	if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83))
-+	{
-+	    /* byte sequence was successfully decoded */
-+	    *s += k;
-+	    *n -= k;
-+	    return c;
-+	}
-+    }
-+
-+    /* byte sequence is incomplete or illegal */
-+    return -1;
-+}
-+
-+/*
-  * Get character at **pp and advance *pp to the next character.
-  * Note: composing characters are skipped!
-  */
-@@ -1871,7 +1953,7 @@
- /*
-  * Convert the character at screen position "off" to a sequence of bytes.
-  * Includes the composing characters.
-- * "buf" must at least have the length MB_MAXBYTES.
-+ * "buf" must at least have the length MB_MAXBYTES + 1.
-  * Only to be used when ScreenLinesUC[off] != 0.
-  * Returns the produced number of bytes.
-  */
-@@ -2667,7 +2749,8 @@
- 	{0x10400,0x10427,1,40}
- };
- 
--static int utf_convert(int a, convertStruct table[], int tableSize);
-+static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
-+static int utf_strnicmp __ARGS((char_u *s1, char_u *s2, size_t n1, size_t n2));
- 
- /*
-  * Generic conversion function for case operations.
-@@ -2681,19 +2764,22 @@
-     int			tableSize;
- {
-     int start, mid, end; /* indices into table */
-+    int entries = tableSize / sizeof(convertStruct);
- 
-     start = 0;
--    end = tableSize / sizeof(convertStruct);
-+    end = entries;
-     while (start < end)
-     {
- 	/* need to search further */
--	mid = (end + start) /2;
-+	mid = (end + start) / 2;
- 	if (table[mid].rangeEnd < a)
- 	    start = mid + 1;
- 	else
- 	    end = mid;
-     }
--    if (table[start].rangeStart <= a && a <= table[start].rangeEnd
-+    if (start < entries
-+	    && table[start].rangeStart <= a
-+	    && a <= table[start].rangeEnd
- 	    && (a - table[start].rangeStart) % table[start].step == 0)
- 	return (a + table[start].offset);
-     else
-@@ -2708,7 +2794,7 @@
- utf_fold(a)
-     int		a;
- {
--    return utf_convert(a, foldCase, sizeof(foldCase));
-+    return utf_convert(a, foldCase, (int)sizeof(foldCase));
- }
- 
- static convertStruct toLower[] =
-@@ -2863,7 +2949,7 @@
- {
- 	{0x61,0x7a,1,-32},
- 	{0xb5,0xb5,-1,743},
--	{0xe0,0xf6,1,-32},
-+	{0xe0,0xf6,1,-32},  /* 0xdf (German sharp s) is not upper-cased */
- 	{0xf8,0xfe,1,-32},
- 	{0xff,0xff,-1,121},
- 	{0x101,0x12f,2,-1},
-@@ -3036,14 +3122,15 @@
- 	return TOUPPER_LOC(a);
- 
-     /* For any other characters use the above mapping table. */
--    return utf_convert(a, toUpper, sizeof(toUpper));
-+    return utf_convert(a, toUpper, (int)sizeof(toUpper));
- }
- 
-     int
- utf_islower(a)
-     int		a;
- {
--    return (utf_toupper(a) != a);
-+    /* German sharp s is lower case but has no upper case equivalent. */
-+    return (utf_toupper(a) != a) || a == 0xdf;
- }
- 
- /*
-@@ -3069,7 +3156,7 @@
- 	return TOLOWER_LOC(a);
- 
-     /* For any other characters use the above mapping table. */
--    return utf_convert(a, toLower, sizeof(toLower));
-+    return utf_convert(a, toLower, (int)sizeof(toLower));
- }
- 
-     int
-@@ -3079,6 +3166,80 @@
-     return (utf_tolower(a) != a);
- }
- 
-+    static int
-+utf_strnicmp(s1, s2, n1, n2)
-+    char_u      *s1, *s2;
-+    size_t      n1, n2;
-+{
-+    int		c1, c2, cdiff;
-+    char_u	buffer[6];
-+
-+    for (;;)
-+    {
-+	c1 = utf_safe_read_char_adv(&s1, &n1);
-+	c2 = utf_safe_read_char_adv(&s2, &n2);
-+
-+	if (c1 <= 0 || c2 <= 0)
-+	    break;
-+
-+	if (c1 == c2)
-+	    continue;
-+
-+	cdiff = utf_fold(c1) - utf_fold(c2);
-+	if (cdiff != 0)
-+	    return cdiff;
-+    }
-+
-+    /* some string ended or has an incomplete/illegal character sequence */
-+
-+    if (c1 == 0 || c2 == 0)
-+    {
-+	/* some string ended. shorter string is smaller */
-+	if (c1 == 0 && c2 == 0)
-+	    return 0;
-+	return c1 == 0 ? -1 : 1;
-+    }
-+
-+    /* Continue with bytewise comparison to produce some result that
-+     * would make comparison operations involving this function transitive.
-+     *
-+     * If only one string had an error, comparison should be made with
-+     * folded version of the other string. In this case it is enough
-+     * to fold just one character to determine the result of comparison. */
-+
-+    if (c1 != -1 && c2 == -1)
-+    {
-+	n1 = utf_char2bytes(utf_fold(c1), buffer);
-+	s1 = buffer;
-+    }
-+    else if (c2 != -1 && c1 == -1)
-+    {
-+	n2 = utf_char2bytes(utf_fold(c2), buffer);
-+	s2 = buffer;
-+    }
-+
-+    while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL)
-+    {
-+	cdiff = (int)(*s1) - (int)(*s2);
-+	if (cdiff != 0)
-+	    return cdiff;
-+
-+	s1++;
-+	s2++;
-+	n1--;
-+	n2--;
-+    }
-+
-+    if (n1 > 0 && *s1 == NUL)
-+	n1 = 0;
-+    if (n2 > 0 && *s2 == NUL)
-+	n2 = 0;
-+
-+    if (n1 == 0 && n2 == 0)
-+	return 0;
-+    return n1 == 0 ? -1 : 1;
-+}
-+
- /*
-  * Version of strnicmp() that handles multi-byte characters.
-  * Needed for Big5, Sjift-JIS and UTF-8 encoding.  Other DBCS encodings can
-@@ -3092,46 +3253,21 @@
-     char_u	*s1, *s2;
-     size_t	nn;
- {
--    int		i, j, l;
-+    int		i, l;
-     int		cdiff;
--    int		incomplete = FALSE;
-     int		n = (int)nn;
- 
--    for (i = 0; i < n; i += l)
-+    if (enc_utf8)
-     {
--	if (s1[i] == NUL && s2[i] == NUL)   /* both strings end */
--	    return 0;
--	if (enc_utf8)
--	{
--	    l = utf_byte2len(s1[i]);
--	    if (l > n - i)
--	    {
--		l = n - i;		    /* incomplete character */
--		incomplete = TRUE;
--	    }
--	    /* Check directly first, it's faster. */
--	    for (j = 0; j < l; ++j)
--	    {
--		if (s1[i + j] != s2[i + j])
--		    break;
--		if (s1[i + j] == 0)
--		    /* Both stings have the same bytes but are incomplete or
--		     * have illegal bytes, accept them as equal. */
--		    l = j;
--	    }
--	    if (j < l)
--	    {
--		/* If one of the two characters is incomplete return -1. */
--		if (incomplete || i + utf_byte2len(s2[i]) > n)
--		    return -1;
--		cdiff = utf_fold(utf_ptr2char(s1 + i))
--					     - utf_fold(utf_ptr2char(s2 + i));
--		if (cdiff != 0)
--		    return cdiff;
--	    }
--	}
--	else
-+	return utf_strnicmp(s1, s2, nn, nn);
-+    }
-+    else
-+    {
-+	for (i = 0; i < n; i += l)
- 	{
-+	    if (s1[i] == NUL && s2[i] == NUL)	/* both strings end */
-+		return 0;
-+
- 	    l = (*mb_ptr2len)(s1 + i);
- 	    if (l <= 1)
- 	    {
-@@ -3560,7 +3696,7 @@
-     void
- mb_adjust_cursor()
- {
--    mb_adjustpos(&curwin->w_cursor);
-+    mb_adjustpos(curbuf, &curwin->w_cursor);
- }
- 
- /*
-@@ -3568,7 +3704,8 @@
-  * If it points to a tail byte it's moved backwards to the head byte.
-  */
-     void
--mb_adjustpos(lp)
-+mb_adjustpos(buf, lp)
-+    buf_T	*buf;
-     pos_T	*lp;
- {
-     char_u	*p;
-@@ -3579,7 +3716,7 @@
- #endif
- 	    )
-     {
--	p = ml_get(lp->lnum);
-+	p = ml_get_buf(buf, lp->lnum, FALSE);
- 	lp->col -= (*mb_head_off)(p, p + lp->col);
- #ifdef FEAT_VIRTUALEDIT
- 	/* Reset "coladd" when the cursor would be on the right half of a
-@@ -3656,13 +3793,15 @@
- mb_unescape(pp)
-     char_u **pp;
- {
--    static char_u	buf[MB_MAXBYTES + 1];
--    int			n, m = 0;
-+    static char_u	buf[6];
-+    int			n;
-+    int			m = 0;
-     char_u		*str = *pp;
- 
-     /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI
--     * KS_EXTRA KE_CSI to CSI. */
--    for (n = 0; str[n] != NUL && m <= MB_MAXBYTES; ++n)
-+     * KS_EXTRA KE_CSI to CSI.
-+     * Maximum length of a utf-8 character is 4 bytes. */
-+    for (n = 0; str[n] != NUL && m < 4; ++n)
-     {
- 	if (str[n] == K_SPECIAL
- 		&& str[n + 1] == KS_SPECIAL
-@@ -3699,6 +3838,10 @@
- 	    *pp = str + n + 1;
- 	    return buf;
- 	}
-+
-+	/* Bail out quickly for ASCII. */
-+	if (buf[0] < 128)
-+	    break;
-     }
-     return NULL;
- }
-@@ -4126,7 +4269,7 @@
- 	done = to - (char *)result;
-     }
- 
--    if (resultlenp != NULL)
-+    if (resultlenp != NULL && result != NULL)
- 	*resultlenp = (int)(to - (char *)result);
-     return result;
- }
-@@ -4159,11 +4302,11 @@
- {
-     if (hIconvDLL != 0 && hMsvcrtDLL != 0)
- 	return TRUE;
--    hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL);
-+    hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL);
-     if (hIconvDLL == 0)		/* sometimes it's called libiconv.dll */
--	hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL_ALT);
-+	hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT);
-     if (hIconvDLL != 0)
--	hMsvcrtDLL = LoadLibrary(DYNAMIC_MSVCRT_DLL);
-+	hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL);
-     if (hIconvDLL == 0 || hMsvcrtDLL == 0)
-     {
- 	/* Only give the message when 'verbose' is set, otherwise it might be
-@@ -4368,7 +4511,8 @@
-     vgetc_busy = TRUE;
-     showmode();
-     vgetc_busy = old_vgetc_busy;
--    setcursor();
-+    if ((State & NORMAL) || (State & INSERT))
-+	setcursor();
-     out_flush();
- }
- 
-@@ -5058,6 +5202,10 @@
- 		/* We had a keypad key, and XIM tried to thieve it */
- 		return FALSE;
- 
-+	    /* This is supposed to fix a problem with iBus, that space
-+	     * characters don't work in input mode. */
-+	    xim_expected_char = NUL;
-+
- 	    /* Normal processing */
- 	    return imresult;
- 	}
-@@ -5167,16 +5315,16 @@
-     void
- xim_set_preedit()
- {
--    if (xic == NULL)
--	return;
--
--    xim_set_focus(TRUE);
--
-     XVaNestedList attr_list;
-     XRectangle spot_area;
-     XPoint over_spot;
-     int line_space;
- 
-+    if (xic == NULL)
-+	return;
-+
-+    xim_set_focus(TRUE);
-+
-     if (!xim_has_focus)
-     {
- 	/* hide XIM cursor */
-@@ -5554,12 +5702,12 @@
-     void
- xim_set_status_area()
- {
--    if (xic == NULL)
--	return;
--
-     XVaNestedList preedit_list = 0, status_list = 0, list = 0;
-     XRectangle pre_area, status_area;
- 
-+    if (xic == NULL)
-+	return;
-+
-     if (input_style & XIMStatusArea)
-     {
- 	if (input_style & XIMPreeditArea)
-diff -Naur vim73.orig/src/memfile.c vim73/src/memfile.c
---- vim73.orig/src/memfile.c	2010-06-21 02:59:57.000000000 +0000
-+++ vim73/src/memfile.c	2012-11-01 20:35:42.000000000 +0000
-@@ -32,10 +32,6 @@
-  * file is opened.
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for lseek(), must be before vim.h */
--#endif
--
- #include "vim.h"
- 
- /*
-@@ -88,6 +84,13 @@
- static int  mf_write_block __ARGS((memfile_T *mfp, bhdr_T *hp, off_t offset, unsigned size));
- static int  mf_trans_add __ARGS((memfile_T *, bhdr_T *));
- static void mf_do_open __ARGS((memfile_T *, char_u *, int));
-+static void mf_hash_init __ARGS((mf_hashtab_T *));
-+static void mf_hash_free __ARGS((mf_hashtab_T *));
-+static void mf_hash_free_all __ARGS((mf_hashtab_T *));
-+static mf_hashitem_T *mf_hash_find __ARGS((mf_hashtab_T *, blocknr_T));
-+static void mf_hash_add_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
-+static void mf_hash_rem_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
-+static int mf_hash_grow __ARGS((mf_hashtab_T *));
- 
- /*
-  * The functions for using a memfile:
-@@ -123,7 +126,6 @@
-     int		flags;
- {
-     memfile_T		*mfp;
--    int			i;
-     off_t		size;
- #if defined(STATFS) && defined(UNIX) && !defined(__QNX__)
- # define USE_FSTATFS
-@@ -156,11 +158,8 @@
-     mfp->mf_used_last = NULL;
-     mfp->mf_dirty = FALSE;
-     mfp->mf_used_count = 0;
--    for (i = 0; i < MEMHASHSIZE; ++i)
--    {
--	mfp->mf_hash[i] = NULL;		/* hash lists are empty */
--	mfp->mf_trans[i] = NULL;	/* trans lists are empty */
--    }
-+    mf_hash_init(&mfp->mf_hash);
-+    mf_hash_init(&mfp->mf_trans);
-     mfp->mf_page_size = MEMFILE_PAGE_SIZE;
- #ifdef FEAT_CRYPT
-     mfp->mf_old_key = NULL;
-@@ -246,8 +245,6 @@
-     int		del_file;
- {
-     bhdr_T	*hp, *nextp;
--    NR_TRANS	*tp, *tpnext;
--    int		i;
- 
-     if (mfp == NULL)		    /* safety check */
- 	return;
-@@ -267,12 +264,8 @@
-     }
-     while (mfp->mf_free_first != NULL)	    /* free entries in free list */
- 	vim_free(mf_rem_free(mfp));
--    for (i = 0; i < MEMHASHSIZE; ++i)	    /* free entries in trans lists */
--	for (tp = mfp->mf_trans[i]; tp != NULL; tp = tpnext)
--	{
--	    tpnext = tp->nt_next;
--	    vim_free(tp);
--	}
-+    mf_hash_free(&mfp->mf_hash);
-+    mf_hash_free_all(&mfp->mf_trans);	    /* free hashtable and its items */
-     vim_free(mfp->mf_fname);
-     vim_free(mfp->mf_ffname);
-     vim_free(mfp);
-@@ -747,16 +740,7 @@
-     memfile_T	*mfp;
-     bhdr_T	*hp;
- {
--    bhdr_T	*hhp;
--    int		hash;
--
--    hash = MEMHASH(hp->bh_bnum);
--    hhp = mfp->mf_hash[hash];
--    hp->bh_hash_next = hhp;
--    hp->bh_hash_prev = NULL;
--    if (hhp != NULL)
--	hhp->bh_hash_prev = hp;
--    mfp->mf_hash[hash] = hp;
-+    mf_hash_add_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
- }
- 
- /*
-@@ -767,13 +751,7 @@
-     memfile_T	*mfp;
-     bhdr_T	*hp;
- {
--    if (hp->bh_hash_prev == NULL)
--	mfp->mf_hash[MEMHASH(hp->bh_bnum)] = hp->bh_hash_next;
--    else
--	hp->bh_hash_prev->bh_hash_next = hp->bh_hash_next;
--
--    if (hp->bh_hash_next)
--	hp->bh_hash_next->bh_hash_prev = hp->bh_hash_prev;
-+    mf_hash_rem_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
- }
- 
- /*
-@@ -784,12 +762,7 @@
-     memfile_T	*mfp;
-     blocknr_T	nr;
- {
--    bhdr_T	*hp;
--
--    for (hp = mfp->mf_hash[MEMHASH(nr)]; hp != NULL; hp = hp->bh_hash_next)
--	if (hp->bh_bnum == nr)
--	    break;
--    return hp;
-+    return (bhdr_T *)mf_hash_find(&mfp->mf_hash, nr);
- }
- 
- /*
-@@ -1049,7 +1022,7 @@
- 	PERROR(_("E294: Seek error in swap file read"));
- 	return FAIL;
-     }
--    if ((unsigned)vim_read(mfp->mf_fd, hp->bh_data, size) != size)
-+    if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size)
-     {
- 	PERROR(_("E295: Read error in swap file"));
- 	return FAIL;
-@@ -1168,7 +1141,7 @@
-     }
- #endif
- 
--    if ((unsigned)vim_write(mfp->mf_fd, data, size) != size)
-+    if ((unsigned)write_eintr(mfp->mf_fd, data, size) != size)
- 	result = FAIL;
- 
- #ifdef FEAT_CRYPT
-@@ -1191,7 +1164,6 @@
- {
-     bhdr_T	*freep;
-     blocknr_T	new_bnum;
--    int		hash;
-     NR_TRANS	*np;
-     int		page_count;
- 
-@@ -1239,12 +1211,8 @@
-     hp->bh_bnum = new_bnum;
-     mf_ins_hash(mfp, hp);		    /* insert in new hash list */
- 
--    hash = MEMHASH(np->nt_old_bnum);	    /* insert in trans list */
--    np->nt_next = mfp->mf_trans[hash];
--    mfp->mf_trans[hash] = np;
--    if (np->nt_next != NULL)
--	np->nt_next->nt_prev = np;
--    np->nt_prev = NULL;
-+    /* Insert "np" into "mf_trans" hashtable with key "np->nt_old_bnum" */
-+    mf_hash_add_item(&mfp->mf_trans, (mf_hashitem_T *)np);
- 
-     return OK;
- }
-@@ -1259,25 +1227,20 @@
-     memfile_T	*mfp;
-     blocknr_T	old_nr;
- {
--    int		hash;
-     NR_TRANS	*np;
-     blocknr_T	new_bnum;
- 
--    hash = MEMHASH(old_nr);
--    for (np = mfp->mf_trans[hash]; np != NULL; np = np->nt_next)
--	if (np->nt_old_bnum == old_nr)
--	    break;
-+    np = (NR_TRANS *)mf_hash_find(&mfp->mf_trans, old_nr);
-+
-     if (np == NULL)		/* not found */
- 	return old_nr;
- 
-     mfp->mf_neg_count--;
-     new_bnum = np->nt_new_bnum;
--    if (np->nt_prev != NULL)		/* remove entry from the trans list */
--	np->nt_prev->nt_next = np->nt_next;
--    else
--	mfp->mf_trans[hash] = np->nt_next;
--    if (np->nt_next != NULL)
--	np->nt_next->nt_prev = np->nt_prev;
-+
-+    /* remove entry from the trans list */
-+    mf_hash_rem_item(&mfp->mf_trans, (mf_hashitem_T *)np);
-+
-     vim_free(np);
- 
-     return new_bnum;
-@@ -1344,7 +1307,7 @@
-      * fname cannot be NameBuff, because it must have been allocated.
-      */
-     mf_set_ffname(mfp);
--#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
-+#if defined(MSDOS) || defined(MSWIN)
-     /*
-      * A ":!cd e:xxx" may change the directory without us knowning, use the
-      * full pathname always.  Careful: This frees fname!
-@@ -1401,3 +1364,207 @@
- 	mch_hide(mfp->mf_fname);    /* try setting the 'hidden' flag */
-     }
- }
-+
-+/*
-+ * Implementation of mf_hashtab_T follows.
-+ */
-+
-+/*
-+ * The number of buckets in the hashtable is increased by a factor of
-+ * MHT_GROWTH_FACTOR when the average number of items per bucket
-+ * exceeds 2 ^ MHT_LOG_LOAD_FACTOR.
-+ */
-+#define MHT_LOG_LOAD_FACTOR 6
-+#define MHT_GROWTH_FACTOR   2   /* must be a power of two */
-+
-+/*
-+ * Initialize an empty hash table.
-+ */
-+    static void
-+mf_hash_init(mht)
-+    mf_hashtab_T *mht;
-+{
-+    vim_memset(mht, 0, sizeof(mf_hashtab_T));
-+    mht->mht_buckets = mht->mht_small_buckets;
-+    mht->mht_mask = MHT_INIT_SIZE - 1;
-+}
-+
-+/*
-+ * Free the array of a hash table.  Does not free the items it contains!
-+ * The hash table must not be used again without another mf_hash_init() call.
-+ */
-+    static void
-+mf_hash_free(mht)
-+    mf_hashtab_T *mht;
-+{
-+    if (mht->mht_buckets != mht->mht_small_buckets)
-+	vim_free(mht->mht_buckets);
-+}
-+
-+/*
-+ * Free the array of a hash table and all the items it contains.
-+ */
-+    static void
-+mf_hash_free_all(mht)
-+    mf_hashtab_T    *mht;
-+{
-+    long_u	    idx;
-+    mf_hashitem_T   *mhi;
-+    mf_hashitem_T   *next;
-+
-+    for (idx = 0; idx <= mht->mht_mask; idx++)
-+	for (mhi = mht->mht_buckets[idx]; mhi != NULL; mhi = next)
-+	{
-+	    next = mhi->mhi_next;
-+	    vim_free(mhi);
-+	}
-+
-+    mf_hash_free(mht);
-+}
-+
-+/*
-+ * Find "key" in hashtable "mht".
-+ * Returns a pointer to a mf_hashitem_T or NULL if the item was not found.
-+ */
-+    static mf_hashitem_T *
-+mf_hash_find(mht, key)
-+    mf_hashtab_T    *mht;
-+    blocknr_T	    key;
-+{
-+    mf_hashitem_T   *mhi;
-+
-+    mhi = mht->mht_buckets[key & mht->mht_mask];
-+    while (mhi != NULL && mhi->mhi_key != key)
-+	mhi = mhi->mhi_next;
-+
-+    return mhi;
-+}
-+
-+/*
-+ * Add item "mhi" to hashtable "mht".
-+ * "mhi" must not be NULL.
-+ */
-+    static void
-+mf_hash_add_item(mht, mhi)
-+    mf_hashtab_T    *mht;
-+    mf_hashitem_T   *mhi;
-+{
-+    long_u	    idx;
-+
-+    idx = mhi->mhi_key & mht->mht_mask;
-+    mhi->mhi_next = mht->mht_buckets[idx];
-+    mhi->mhi_prev = NULL;
-+    if (mhi->mhi_next != NULL)
-+	mhi->mhi_next->mhi_prev = mhi;
-+    mht->mht_buckets[idx] = mhi;
-+
-+    mht->mht_count++;
-+
-+    /*
-+     * Grow hashtable when we have more thank 2^MHT_LOG_LOAD_FACTOR
-+     * items per bucket on average
-+     */
-+    if (mht->mht_fixed == 0
-+	&& (mht->mht_count >> MHT_LOG_LOAD_FACTOR) > mht->mht_mask)
-+    {
-+	if (mf_hash_grow(mht) == FAIL)
-+	{
-+	    /* stop trying to grow after first failure to allocate memory */
-+	    mht->mht_fixed = 1;
-+	}
-+    }
-+}
-+
-+/*
-+ * Remove item "mhi" from hashtable "mht".
-+ * "mhi" must not be NULL and must have been inserted into "mht".
-+ */
-+    static void
-+mf_hash_rem_item(mht, mhi)
-+    mf_hashtab_T    *mht;
-+    mf_hashitem_T   *mhi;
-+{
-+    if (mhi->mhi_prev == NULL)
-+	mht->mht_buckets[mhi->mhi_key & mht->mht_mask] = mhi->mhi_next;
-+    else
-+	mhi->mhi_prev->mhi_next = mhi->mhi_next;
-+
-+    if (mhi->mhi_next != NULL)
-+	mhi->mhi_next->mhi_prev = mhi->mhi_prev;
-+
-+    mht->mht_count--;
-+
-+    /* We could shrink the table here, but it typically takes little memory,
-+     * so why bother?  */
-+}
-+
-+/*
-+ * Increase number of buckets in the hashtable by MHT_GROWTH_FACTOR and
-+ * rehash items.
-+ * Returns FAIL when out of memory.
-+ */
-+    static int
-+mf_hash_grow(mht)
-+    mf_hashtab_T    *mht;
-+{
-+    long_u	    i, j;
-+    int		    shift;
-+    mf_hashitem_T   *mhi;
-+    mf_hashitem_T   *tails[MHT_GROWTH_FACTOR];
-+    mf_hashitem_T   **buckets;
-+    size_t	    size;
-+
-+    size = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR * sizeof(void *);
-+    buckets = (mf_hashitem_T **)lalloc_clear(size, FALSE);
-+    if (buckets == NULL)
-+	return FAIL;
-+
-+    shift = 0;
-+    while ((mht->mht_mask >> shift) != 0)
-+	shift++;
-+
-+    for (i = 0; i <= mht->mht_mask; i++)
-+    {
-+	/*
-+	 * Traverse the items in the i-th original bucket and move them into
-+	 * MHT_GROWTH_FACTOR new buckets, preserving their relative order
-+	 * within each new bucket.  Preserving the order is important because
-+	 * mf_get() tries to keep most recently used items at the front of
-+	 * each bucket.
-+	 *
-+	 * Here we strongly rely on the fact the hashes are computed modulo
-+	 * a power of two.
-+	 */
-+
-+	vim_memset(tails, 0, sizeof(tails));
-+
-+	for (mhi = mht->mht_buckets[i]; mhi != NULL; mhi = mhi->mhi_next)
-+	{
-+	    j = (mhi->mhi_key >> shift) & (MHT_GROWTH_FACTOR - 1);
-+	    if (tails[j] == NULL)
-+	    {
-+		buckets[i + (j << shift)] = mhi;
-+		tails[j] = mhi;
-+		mhi->mhi_prev = NULL;
-+	    }
-+	    else
-+	    {
-+		tails[j]->mhi_next = mhi;
-+		mhi->mhi_prev = tails[j];
-+		tails[j] = mhi;
-+	    }
-+	}
-+
-+	for (j = 0; j < MHT_GROWTH_FACTOR; j++)
-+	    if (tails[j] != NULL)
-+		tails[j]->mhi_next = NULL;
-+    }
-+
-+    if (mht->mht_buckets != mht->mht_small_buckets)
-+	vim_free(mht->mht_buckets);
-+
-+    mht->mht_buckets = buckets;
-+    mht->mht_mask = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR - 1;
-+
-+    return OK;
-+}
-diff -Naur vim73.orig/src/memfile_test.c vim73/src/memfile_test.c
---- vim73.orig/src/memfile_test.c	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/memfile_test.c	2012-11-01 20:35:41.000000000 +0000
-@@ -0,0 +1,145 @@
-+/* vi:set ts=8 sts=4 sw=4:
-+ *
-+ * VIM - Vi IMproved	by Bram Moolenaar
-+ *
-+ * Do ":help uganda"  in Vim to read copying and usage conditions.
-+ * Do ":help credits" in Vim to see a list of people who contributed.
-+ * See README.txt for an overview of the Vim source code.
-+ */
-+
-+/*
-+ * memfile_test.c: Unittests for memfile.c
-+ * Mostly by Ivan Krasilnikov.
-+ */
-+
-+#undef NDEBUG
-+#include <assert.h>
-+
-+/* Must include main.c because it contains much more than just main() */
-+#define NO_VIM_MAIN
-+#include "main.c"
-+
-+/* This file has to be included because the tested functions are static */
-+#include "memfile.c"
-+
-+#define index_to_key(i) ((i) ^ 15167)
-+#define TEST_COUNT 50000
-+
-+static void test_mf_hash __ARGS((void));
-+
-+/*
-+ * Test mf_hash_*() functions.
-+ */
-+    static void
-+test_mf_hash()
-+{
-+    mf_hashtab_T   ht;
-+    mf_hashitem_T  *item;
-+    blocknr_T      key;
-+    long_u	   i;
-+    long_u	   num_buckets;
-+
-+    mf_hash_init(&ht);
-+
-+    /* insert some items and check invariants */
-+    for (i = 0; i < TEST_COUNT; i++)
-+    {
-+	assert(ht.mht_count == i);
-+
-+	/* check that number of buckets is a power of 2 */
-+	num_buckets = ht.mht_mask + 1;
-+	assert(num_buckets > 0 && (num_buckets & (num_buckets - 1)) == 0);
-+
-+	/* check load factor */
-+	assert(ht.mht_count <= (num_buckets << MHT_LOG_LOAD_FACTOR));
-+
-+	if (i < (MHT_INIT_SIZE << MHT_LOG_LOAD_FACTOR))
-+	{
-+	    /* first expansion shouldn't have occurred yet */
-+	    assert(num_buckets == MHT_INIT_SIZE);
-+	    assert(ht.mht_buckets == ht.mht_small_buckets);
-+	}
-+	else
-+	{
-+	    assert(num_buckets > MHT_INIT_SIZE);
-+	    assert(ht.mht_buckets != ht.mht_small_buckets);
-+	}
-+
-+	key = index_to_key(i);
-+	assert(mf_hash_find(&ht, key) == NULL);
-+
-+	/* allocate and add new item */
-+	item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE);
-+	assert(item != NULL);
-+	item->mhi_key = key;
-+	mf_hash_add_item(&ht, item);
-+
-+	assert(mf_hash_find(&ht, key) == item);
-+
-+	if (ht.mht_mask + 1 != num_buckets)
-+	{
-+	    /* hash table was expanded */
-+	    assert(ht.mht_mask + 1 == num_buckets * MHT_GROWTH_FACTOR);
-+	    assert(i + 1 == (num_buckets << MHT_LOG_LOAD_FACTOR));
-+	}
-+    }
-+
-+    /* check presence of inserted items */
-+    for (i = 0; i < TEST_COUNT; i++)
-+    {
-+	key = index_to_key(i);
-+	item = mf_hash_find(&ht, key);
-+	assert(item != NULL);
-+	assert(item->mhi_key == key);
-+    }
-+
-+    /* delete some items */
-+    for (i = 0; i < TEST_COUNT; i++)
-+    {
-+	if (i % 100 < 70)
-+	{
-+	    key = index_to_key(i);
-+	    item = mf_hash_find(&ht, key);
-+	    assert(item != NULL);
-+	    assert(item->mhi_key == key);
-+
-+	    mf_hash_rem_item(&ht, item);
-+	    assert(mf_hash_find(&ht, key) == NULL);
-+
-+	    mf_hash_add_item(&ht, item);
-+	    assert(mf_hash_find(&ht, key) == item);
-+
-+	    mf_hash_rem_item(&ht, item);
-+	    assert(mf_hash_find(&ht, key) == NULL);
-+
-+	    vim_free(item);
-+	}
-+    }
-+
-+    /* check again */
-+    for (i = 0; i < TEST_COUNT; i++)
-+    {
-+	key = index_to_key(i);
-+	item = mf_hash_find(&ht, key);
-+
-+	if (i % 100 < 70)
-+	{
-+	    assert(item == NULL);
-+	}
-+	else
-+	{
-+	    assert(item != NULL);
-+	    assert(item->mhi_key == key);
-+	}
-+    }
-+
-+    /* free hash table and all remaining items */
-+    mf_hash_free_all(&ht);
-+}
-+
-+    int
-+main()
-+{
-+    test_mf_hash();
-+    return 0;
-+}
-diff -Naur vim73.orig/src/memline.c vim73/src/memline.c
---- vim73.orig/src/memline.c	2010-08-08 13:11:46.000000000 +0000
-+++ vim73/src/memline.c	2012-11-01 20:35:48.000000000 +0000
-@@ -42,10 +42,6 @@
-  *  mf_get().
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for mch_open(), must be before vim.h */
--#endif
--
- #include "vim.h"
- 
- #ifndef UNIX		/* it's in os_unix.h for Unix */
-@@ -56,10 +52,6 @@
- # include <proto/dos.h>	    /* for Open() and Close() */
- #endif
- 
--#ifdef HAVE_ERRNO_H
--# include <errno.h>
--#endif
--
- typedef struct block0		ZERO_BL;    /* contents of the first block */
- typedef struct pointer_block	PTR_BL;	    /* contents of a pointer block */
- typedef struct data_block	DATA_BL;    /* contents of a data block */
-@@ -582,6 +574,9 @@
- 	    idx = ip->ip_index + 1;	    /* go to next index */
- 	    page_count = 1;
- 	}
-+
-+	if (error > 0)
-+	    EMSG(_("E843: Error while updating swap file crypt"));
-     }
- 
-     mfp->mf_old_key = NULL;
-@@ -626,6 +621,8 @@
- 	    break;
- 	fname = findswapname(buf, &dirp, mfp->mf_fname);
- 						    /* alloc's fname */
-+	if (dirp == NULL)	    /* out of memory */
-+	    break;
- 	if (fname == NULL)	    /* no file name found for this dir */
- 	    continue;
- 
-@@ -749,11 +746,13 @@
- 	 * and creating it, another Vim creates the file.  In that case the
- 	 * creation will fail and we will use another directory. */
- 	fname = findswapname(buf, &dirp, NULL); /* allocates fname */
-+	if (dirp == NULL)
-+	    break;  /* out of memory */
- 	if (fname == NULL)
- 	    continue;
- 	if (mf_open_file(mfp, fname) == OK)	/* consumes fname! */
- 	{
--#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
-+#if defined(MSDOS) || defined(MSWIN)
- 	    /*
- 	     * set full pathname for swap file now, because a ":!cd dir" may
- 	     * change directory without us knowing it.
-@@ -781,9 +780,7 @@
- 	need_wait_return = TRUE;	/* call wait_return later */
- 	++no_wait_return;
- 	(void)EMSG2(_("E303: Unable to open swap file for \"%s\", recovery impossible"),
--		    buf_spname(buf) != NULL
--			? (char_u *)buf_spname(buf)
--			: buf->b_fname);
-+		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname);
- 	--no_wait_return;
-     }
- 
-@@ -938,7 +935,7 @@
- 	b0p->b0_fname[0] = NUL;
-     else
-     {
--#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS)
-+#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA)
- 	/* Systems that cannot translate "~user" back into a path: copy the
- 	 * file name unmodified.  Do use slashes instead of backslashes for
- 	 * portability. */
-@@ -1108,7 +1105,7 @@
- 	fname = (char_u *)"";
-     len = (int)STRLEN(fname);
-     if (len >= 4 &&
--#if defined(VMS) || defined(RISCOS)
-+#if defined(VMS)
- 	    STRNICMP(fname + len - 4, "_s" , 2)
- #else
- 	    STRNICMP(fname + len - 4, ".s" , 2)
-@@ -1316,7 +1313,7 @@
-     smsg((char_u *)_("Using swap file \"%s\""), NameBuff);
- 
-     if (buf_spname(curbuf) != NULL)
--	STRCPY(NameBuff, buf_spname(curbuf));
-+	vim_strncpy(NameBuff, buf_spname(curbuf), MAXPATHL - 1);
-     else
- 	home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE);
-     smsg((char_u *)_("Original file \"%s\""), NameBuff);
-@@ -1512,6 +1509,7 @@
- 		    bnum = pp->pb_pointer[idx].pe_bnum;
- 		    line_count = pp->pb_pointer[idx].pe_line_count;
- 		    page_count = pp->pb_pointer[idx].pe_page_count;
-+		    idx = 0;
- 		    continue;
- 		}
- 	    }
-@@ -1778,11 +1776,7 @@
- #ifdef VMS
- 		names[0] = vim_strsave((char_u *)"*_sw%");
- #else
--# ifdef RISCOS
--		names[0] = vim_strsave((char_u *)"*_sw#");
--# else
- 		names[0] = vim_strsave((char_u *)"*.sw?");
--# endif
- #endif
- #if defined(UNIX) || defined(WIN3264)
- 		/* For Unix names starting with a dot are special.  MS-Windows
-@@ -1809,11 +1803,7 @@
- #ifdef VMS
- 		names[0] = concat_fnames(dir_name, (char_u *)"*_sw%", TRUE);
- #else
--# ifdef RISCOS
--		names[0] = concat_fnames(dir_name, (char_u *)"*_sw#", TRUE);
--# else
- 		names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
--# endif
- #endif
- #if defined(UNIX) || defined(WIN3264)
- 		/* For Unix names starting with a dot are special.  MS-Windows
-@@ -1882,7 +1872,7 @@
- 	    char_u	    *swapname;
- 
- 	    swapname = modname(fname_res,
--#if defined(VMS) || defined(RISCOS)
-+#if defined(VMS)
- 			       (char_u *)"_swp", FALSE
- #else
- 			       (char_u *)".swp", TRUE
-@@ -2059,7 +2049,7 @@
-     fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
-     if (fd >= 0)
-     {
--	if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
-+	if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
- 	{
- 	    if (STRNCMP(b0.b0_version, "VIM 3.0", 7) == 0)
- 	    {
-@@ -2181,11 +2171,7 @@
- #ifdef VMS
-     names[num_names] = concat_fnames(path, (char_u *)"_sw%", FALSE);
- #else
--# ifdef RISCOS
--    names[num_names] = concat_fnames(path, (char_u *)"_sw#", FALSE);
--# else
-     names[num_names] = concat_fnames(path, (char_u *)".sw?", FALSE);
--# endif
- #endif
-     if (names[num_names] == NULL)
- 	goto end;
-@@ -2212,11 +2198,7 @@
- #ifdef VMS
-     names[num_names] = modname(path, (char_u *)"_sw%", FALSE);
- #else
--# ifdef RISCOS
--    names[num_names] = modname(path, (char_u *)"_sw#", FALSE);
--# else
-     names[num_names] = modname(path, (char_u *)".sw?", FALSE);
--# endif
- #endif
-     if (names[num_names] == NULL)
- 	goto end;
-@@ -2384,7 +2366,7 @@
-  * Make a copy of the line if necessary.
-  */
- /*
-- * get a pointer to a (read-only copy of a) line
-+ * Return a pointer to a (read-only copy of a) line.
-  *
-  * On failure an error message is given and IObuff is returned (to avoid
-  * having to check for error everywhere).
-@@ -2397,7 +2379,7 @@
- }
- 
- /*
-- * ml_get_pos: get pointer to position 'pos'
-+ * Return pointer to position "pos".
-  */
-     char_u *
- ml_get_pos(pos)
-@@ -2407,7 +2389,7 @@
- }
- 
- /*
-- * ml_get_curline: get pointer to cursor line.
-+ * Return pointer to cursor line.
-  */
-     char_u *
- ml_get_curline()
-@@ -2416,7 +2398,7 @@
- }
- 
- /*
-- * ml_get_cursor: get pointer to cursor position
-+ * Return pointer to cursor position.
-  */
-     char_u *
- ml_get_cursor()
-@@ -2426,7 +2408,7 @@
- }
- 
- /*
-- * get a pointer to a line in a specific buffer
-+ * Return a pointer to a line in a specific buffer
-  *
-  * "will_change": if TRUE mark the buffer dirty (chars in the line will be
-  * changed)
-@@ -3210,7 +3192,8 @@
- 	mf_free(mfp, hp);	/* free the data block */
- 	buf->b_ml.ml_locked = NULL;
- 
--	for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; --stack_idx)
-+	for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0;
-+								  --stack_idx)
- 	{
- 	    buf->b_ml.ml_stack_top = 0;	    /* stack is invalid when failing */
- 	    ip = &(buf->b_ml.ml_stack[stack_idx]);
-@@ -3961,14 +3944,9 @@
- #else
- 	    (buf->b_p_sn || buf->b_shortname),
- #endif
--#ifdef RISCOS
--	    /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
--	    ffname,
--#else
- 	    fname_res,
--#endif
- 	    (char_u *)
--#if defined(VMS) || defined(RISCOS)
-+#if defined(VMS)
- 	    "_swp",
- #else
- 	    ".swp",
-@@ -4076,9 +4054,9 @@
-     }
-     /* Some of these messages are long to allow translation to
-      * other languages. */
--    MSG_PUTS(_("\n(1) Another program may be editing the same file.\n    If this is the case, be careful not to end up with two\n    different instances of the same file when making changes.\n"));
--    MSG_PUTS(_("    Quit, or continue with caution.\n"));
--    MSG_PUTS(_("\n(2) An edit session for this file crashed.\n"));
-+    MSG_PUTS(_("\n(1) Another program may be editing the same file.  If this is the case,\n    be careful not to end up with two different instances of the same\n    file when making changes."));
-+    MSG_PUTS(_("  Quit, or continue with caution.\n"));
-+    MSG_PUTS(_("(2) An edit session for this file crashed.\n"));
-     MSG_PUTS(_("    If this is the case, use \":recover\" or \"vim -r "));
-     msg_outtrans(buf->b_fname);
-     MSG_PUTS(_("\"\n    to recover the changes (see \":help recovery\").\n"));
-@@ -4138,6 +4116,7 @@
-  *
-  * Several names are tried to find one that does not exist
-  * Returns the name in allocated memory or NULL.
-+ * When out of memory "dirp" is set to NULL.
-  *
-  * Note: If BASENAMELEN is not correct, you will get error messages for
-  *	 not being able to open the swap or undo file
-@@ -4181,7 +4160,9 @@
-      * First allocate some memory to put the directory name in.
-      */
-     dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
--    if (dir_name != NULL)
-+    if (dir_name == NULL)
-+	*dirp = NULL;
-+    else
- 	(void)copy_option_part(dirp, dir_name, 31000, ",");
- 
-     /*
-@@ -4389,7 +4370,7 @@
- 		fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
- 		if (fd >= 0)
- 		{
--		    if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
-+		    if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
- 		    {
- 			/*
- 			 * If the swapfile has the same directory as the
-@@ -4432,14 +4413,6 @@
- 		    }
- 		    close(fd);
- 		}
--#ifdef RISCOS
--		else
--		    /* Can't open swap file, though it does exist.
--		     * Assume that the user is editing two files with
--		     * the same name in different directories. No error.
--		     */
--		    differ = TRUE;
--#endif
- 
- 		/* give the ATTENTION message when there is an old swap file
- 		 * for the current file, and the buffer was not recovered. */
-@@ -4521,7 +4494,7 @@
- 				    process_still_running
- 					? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") :
- # endif
--					(char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL);
-+					(char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL, FALSE);
- 
- # if defined(UNIX) || defined(__EMX__) || defined(VMS)
- 			if (process_still_running && choice >= 4)
-diff -Naur vim73.orig/src/menu.c vim73/src/menu.c
---- vim73.orig/src/menu.c	2010-07-14 14:49:01.000000000 +0000
-+++ vim73/src/menu.c	2012-11-01 20:35:41.000000000 +0000
-@@ -1394,7 +1394,8 @@
-     int		idx;
- {
-     static vimmenu_T	*menu = NULL;
--    static char_u	tbuffer[256]; /*hack*/
-+#define TBUFFER_LEN 256
-+    static char_u	tbuffer[TBUFFER_LEN]; /*hack*/
-     char_u		*str;
- #ifdef FEAT_MULTI_LANG
-     static  int		should_advance = FALSE;
-@@ -1428,11 +1429,11 @@
- 	{
- #ifdef FEAT_MULTI_LANG
- 	    if (should_advance)
--		STRCPY(tbuffer, menu->en_dname);
-+		vim_strncpy(tbuffer, menu->en_dname, TBUFFER_LEN - 2);
- 	    else
- 	    {
- #endif
--		STRCPY(tbuffer, menu->dname);
-+		vim_strncpy(tbuffer, menu->dname,  TBUFFER_LEN - 2);
- #ifdef FEAT_MULTI_LANG
- 		if (menu->en_dname == NULL)
- 		    should_advance = TRUE;
-@@ -1512,8 +1513,8 @@
- {
- #ifdef FEAT_MULTI_LANG
-     if (menu->en_name != NULL
--	    && (menu_namecmp(name,menu->en_name)
--		|| menu_namecmp(name,menu->en_dname)))
-+	    && (menu_namecmp(name, menu->en_name)
-+		|| menu_namecmp(name, menu->en_dname)))
- 	return TRUE;
- #endif
-     return menu_namecmp(name, menu->name) || menu_namecmp(name, menu->dname);
-@@ -2342,7 +2343,7 @@
- 
- 	while (menu != NULL)
- 	{
--	    if (STRCMP(name, menu->name) == 0 || STRCMP(name, menu->dname) == 0)
-+	    if (menu_name_equal(name, menu))
- 	    {
- 		if (menu->children == NULL)
- 		{
-diff -Naur vim73.orig/src/message.c vim73/src/message.c
---- vim73.orig/src/message.c	2010-08-04 18:10:02.000000000 +0000
-+++ vim73/src/message.c	2012-11-01 20:35:45.000000000 +0000
-@@ -39,7 +39,6 @@
- static void msg_screen_putchar __ARGS((int c, int attr));
- static int  msg_check_screen __ARGS((void));
- static void redir_write __ARGS((char_u *s, int maxlen));
--static void verbose_write __ARGS((char_u *s, int maxlen));
- #ifdef FEAT_CON_DIALOG
- static char_u *msg_show_console_dialog __ARGS((char_u *message, char_u *buttons, int dfltbutton));
- static int	confirm_msg_used = FALSE;	/* displaying confirm_msg */
-@@ -58,6 +57,9 @@
- static struct msg_hist *last_msg_hist = NULL;
- static int msg_hist_len = 0;
- 
-+static FILE *verbose_fd = NULL;
-+static int  verbose_did_open = FALSE;
-+
- /*
-  * When writing messages to the screen, there are many different situations.
-  * A number of variables is used to remember the current state:
-@@ -83,7 +85,7 @@
-  *		    need_wait_return to be set.  This is a hack to make ":ts"
-  *		    work without an extra prompt.
-  * lines_left	    Number of lines available for messages before the
-- *		    more-prompt is to be given.
-+ *		    more-prompt is to be given.  -1 when not set.
-  * need_wait_return TRUE when the hit-return prompt is needed.
-  *		    Reset: After giving the hit-return prompt, when the user
-  *		    has answered some other prompt.
-@@ -220,15 +222,16 @@
- 	    if (enc_utf8)
- 		/* may have up to 18 bytes per cell (6 per char, up to two
- 		 * composing chars) */
--		buf = alloc((room + 2) * 18);
-+		len = (room + 2) * 18;
- 	    else if (enc_dbcs == DBCS_JPNU)
- 		/* may have up to 2 bytes per cell for euc-jp */
--		buf = alloc((room + 2) * 2);
-+		len = (room + 2) * 2;
- 	    else
- #endif
--		buf = alloc(room + 2);
-+		len = room + 2;
-+	    buf = alloc(len);
- 	    if (buf != NULL)
--		trunc_string(s, buf, room);
-+		trunc_string(s, buf, room, len);
- 	}
-     }
-     return buf;
-@@ -239,10 +242,11 @@
-  * "s" and "buf" may be equal.
-  */
-     void
--trunc_string(s, buf, room)
-+trunc_string(s, buf, room, buflen)
-     char_u	*s;
-     char_u	*buf;
-     int		room;
-+    int		buflen;
- {
-     int		half;
-     int		len;
-@@ -255,7 +259,7 @@
-     len = 0;
- 
-     /* First part: Start of the string. */
--    for (e = 0; len < half; ++e)
-+    for (e = 0; len < half && e < buflen; ++e)
-     {
- 	if (s[e] == NUL)
- 	{
-@@ -272,7 +276,8 @@
- 	if (has_mbyte)
- 	    for (n = (*mb_ptr2len)(s + e); --n > 0; )
- 	    {
--		++e;
-+		if (++e == buflen)
-+		    break;
- 		buf[e] = s[e];
- 	    }
- #endif
-@@ -317,8 +322,19 @@
-     }
- 
-     /* Set the middle and copy the last part. */
--    mch_memmove(buf + e, "...", (size_t)3);
--    STRMOVE(buf + e + 3, s + i);
-+    if (e + 3 < buflen)
-+    {
-+	mch_memmove(buf + e, "...", (size_t)3);
-+	len = (int)STRLEN(s + i) + 1;
-+	if (len >= buflen - e - 3)
-+	    len = buflen - e - 3 - 1;
-+	mch_memmove(buf + e + 3, s + i, len);
-+	buf[e + 3 + len - 1] = NUL;
-+    }
-+    else
-+    {
-+	buf[e - 1] = NUL;  /* make sure it is truncated */
-+    }
- }
- 
- /*
-@@ -569,6 +585,10 @@
-     int		severe;
- #endif
- 
-+    /* Skip this if not giving error messages at the moment. */
-+    if (emsg_not_now())
-+	return TRUE;
-+
-     called_emsg = TRUE;
-     ex_exitval = 1;
- 
-@@ -581,10 +601,6 @@
-     emsg_severe = FALSE;
- #endif
- 
--    /* Skip this if not giving error messages at the moment. */
--    if (emsg_not_now())
--	return TRUE;
--
-     if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
-     {
- #ifdef FEAT_EVAL
-@@ -853,6 +869,7 @@
-     cmdline_row = msg_row;
-     msg_col = 0;
-     msg_clr_eos();
-+    lines_left = -1;
- }
- #endif
- 
-@@ -879,16 +896,17 @@
-     if (msg_silent != 0)
- 	return;
- 
--/*
-- * With the global command (and some others) we only need one return at the
-- * end. Adjust cmdline_row to avoid the next message overwriting the last one.
-- * When inside vgetc(), we can't wait for a typed character at all.
-- */
-+    /*
-+     * When inside vgetc(), we can't wait for a typed character at all.
-+     * With the global command (and some others) we only need one return at
-+     * the end. Adjust cmdline_row to avoid the next message overwriting the
-+     * last one.
-+     */
-     if (vgetc_busy > 0)
- 	return;
-+    need_wait_return = TRUE;
-     if (no_wait_return)
-     {
--	need_wait_return = TRUE;
- 	if (!exmode_active)
- 	    cmdline_row = msg_row;
- 	return;
-@@ -1477,6 +1495,27 @@
-     return retval;
- }
- 
-+#if defined(FEAT_EVAL) || defined(PROTO)
-+/*
-+ * Return the lhs or rhs of a mapping, with the key codes turned into printable
-+ * strings, in an allocated string.
-+ */
-+    char_u *
-+str2special_save(str, is_lhs)
-+    char_u  *str;
-+    int	    is_lhs;  /* TRUE for lhs, FALSE for rhs */
-+{
-+    garray_T	ga;
-+    char_u	*p = str;
-+
-+    ga_init2(&ga, 1, 40);
-+    while (*p != NUL)
-+	ga_concat(&ga, str2special(&p, is_lhs));
-+    ga_append(&ga, NUL);
-+    return (char_u *)ga.ga_data;
-+}
-+#endif
-+
- /*
-  * Return the printable string for the key codes at "*sp".
-  * Used for translating the lhs or rhs of a mapping to printable chars.
-@@ -1525,16 +1564,27 @@
- 	if (IS_SPECIAL(c) || modifiers)	/* special key */
- 	    special = TRUE;
-     }
--    *sp = str + 1;
- 
- #ifdef FEAT_MBYTE
--    /* For multi-byte characters check for an illegal byte. */
--    if (has_mbyte && MB_BYTE2LEN(*str) > (*mb_ptr2len)(str))
-+    if (has_mbyte && !IS_SPECIAL(c))
-     {
--	transchar_nonprint(buf, c);
--	return buf;
-+	int len = (*mb_ptr2len)(str);
-+
-+	/* For multi-byte characters check for an illegal byte. */
-+	if (has_mbyte && MB_BYTE2LEN(*str) > len)
-+	{
-+	    transchar_nonprint(buf, c);
-+	    *sp = str + 1;
-+	    return buf;
-+	}
-+	/* Since 'special' is TRUE the multi-byte character 'c' will be
-+	 * processed by get_special_key_name() */
-+	c = (*mb_ptr2char)(str);
-+	*sp = str + len;
-     }
-+    else
- #endif
-+	*sp = str + 1;
- 
-     /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
-      * Use <Space> only for lhs of a mapping. */
-@@ -1616,8 +1666,16 @@
- 	else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
- 	{
- 	    col += (*mb_ptr2cells)(s);
--	    mch_memmove(buf, s, (size_t)l);
--	    buf[l] = NUL;
-+	    if (lcs_nbsp != NUL && list && mb_ptr2char(s) == 160)
-+	    {
-+		mb_char2bytes(lcs_nbsp, buf);
-+		buf[(*mb_ptr2len)(buf)] = NUL;
-+	    }
-+	    else
-+	    {
-+		mch_memmove(buf, s, (size_t)l);
-+		buf[l] = NUL;
-+	    }
- 	    msg_puts(buf);
- 	    s += l;
- 	    continue;
-@@ -1643,6 +1701,11 @@
- 		    attr = hl_attr(HLF_8);
- 		}
- 	    }
-+	    else if (c == 160 && list && lcs_nbsp != NUL)
-+	    {
-+		c = lcs_nbsp;
-+		attr = hl_attr(HLF_8);
-+	    }
- 	    else if (c == NUL && list && lcs_eol != NUL)
- 	    {
- 		p_extra = (char_u *)"";
-@@ -2285,6 +2348,16 @@
- }
- 
- /*
-+ * Mark the last message chunk as finishing the line.
-+ */
-+    void
-+msg_sb_eol()
-+{
-+    if (last_msgchunk != NULL)
-+	last_msgchunk->sb_eol = TRUE;
-+}
-+
-+/*
-  * Display a screen line from previously displayed text at row "row".
-  * Returns a pointer to the text for the next line (can be NULL).
-  */
-@@ -2438,7 +2511,7 @@
- #ifdef FEAT_CON_DIALOG
-     int		retval = FALSE;
- #endif
--    int		scroll;
-+    int		toscroll;
-     msgchunk_T	*mp_last = NULL;
-     msgchunk_T	*mp;
-     int		i;
-@@ -2489,49 +2562,49 @@
- 	}
- #endif
- 
--	scroll = 0;
-+	toscroll = 0;
- 	switch (c)
- 	{
- 	case BS:		/* scroll one line back */
- 	case K_BS:
- 	case 'k':
- 	case K_UP:
--	    scroll = -1;
-+	    toscroll = -1;
- 	    break;
- 
- 	case CAR:		/* one extra line */
- 	case NL:
- 	case 'j':
- 	case K_DOWN:
--	    scroll = 1;
-+	    toscroll = 1;
- 	    break;
- 
- 	case 'u':		/* Up half a page */
--	    scroll = -(Rows / 2);
-+	    toscroll = -(Rows / 2);
- 	    break;
- 
- 	case 'd':		/* Down half a page */
--	    scroll = Rows / 2;
-+	    toscroll = Rows / 2;
- 	    break;
- 
- 	case 'b':		/* one page back */
- 	case K_PAGEUP:
--	    scroll = -(Rows - 1);
-+	    toscroll = -(Rows - 1);
- 	    break;
- 
- 	case ' ':		/* one extra page */
- 	case 'f':
- 	case K_PAGEDOWN:
- 	case K_LEFTMOUSE:
--	    scroll = Rows - 1;
-+	    toscroll = Rows - 1;
- 	    break;
- 
- 	case 'g':		/* all the way back to the start */
--	    scroll = -999999;
-+	    toscroll = -999999;
- 	    break;
- 
- 	case 'G':		/* all the way to the end */
--	    scroll = 999999;
-+	    toscroll = 999999;
- 	    lines_left = 999999;
- 	    break;
- 
-@@ -2584,9 +2657,9 @@
- 	    continue;
- 	}
- 
--	if (scroll != 0)
-+	if (toscroll != 0)
- 	{
--	    if (scroll < 0)
-+	    if (toscroll < 0)
- 	    {
- 		/* go to start of last line */
- 		if (mp_last == NULL)
-@@ -2604,7 +2677,7 @@
- 		if (mp != NULL && mp->sb_prev != NULL)
- 		{
- 		    /* Find line to be displayed at top. */
--		    for (i = 0; i > scroll; --i)
-+		    for (i = 0; i > toscroll; --i)
- 		    {
- 			if (mp == NULL || mp->sb_prev == NULL)
- 			    break;
-@@ -2615,7 +2688,7 @@
- 			    mp_last = msg_sb_start(mp_last->sb_prev);
- 		    }
- 
--		    if (scroll == -1 && screen_ins_lines(0, 0, 1,
-+		    if (toscroll == -1 && screen_ins_lines(0, 0, 1,
- 						       (int)Rows, NULL) == OK)
- 		    {
- 			/* display line at top */
-@@ -2631,13 +2704,13 @@
- 			    ++msg_scrolled;
- 			}
- 		    }
--		    scroll = 0;
-+		    toscroll = 0;
- 		}
- 	    }
- 	    else
- 	    {
- 		/* First display any text that we scrolled back. */
--		while (scroll > 0 && mp_last != NULL)
-+		while (toscroll > 0 && mp_last != NULL)
- 		{
- 		    /* scroll up, display line at bottom */
- 		    msg_scroll_up();
-@@ -2645,11 +2718,11 @@
- 		    screen_fill((int)Rows - 2, (int)Rows - 1, 0,
- 						   (int)Columns, ' ', ' ', 0);
- 		    mp_last = disp_sb_line((int)Rows - 2, mp_last);
--		    --scroll;
-+		    --toscroll;
- 		}
- 	    }
- 
--	    if (scroll <= 0)
-+	    if (toscroll <= 0)
- 	    {
- 		/* displayed the requested text, more prompt again */
- 		screen_fill((int)Rows - 1, (int)Rows, 0,
-@@ -2659,7 +2732,7 @@
- 	    }
- 
- 	    /* display more text, return to caller */
--	    lines_left = scroll;
-+	    lines_left = toscroll;
- 	}
- 
- 	break;
-@@ -3019,12 +3092,9 @@
-     if (redir_off)
- 	return;
- 
--    /*
--     * If 'verbosefile' is set write message in that file.
--     * Must come before the rest because of updating "msg_col".
--     */
--    if (*p_vfile != NUL)
--	verbose_write(s, maxlen);
-+    /* If 'verbosefile' is set prepare for writing in that file. */
-+    if (*p_vfile != NUL && verbose_fd == NULL)
-+	verbose_open();
- 
-     if (redirecting())
-     {
-@@ -3038,9 +3108,12 @@
- 		    write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
- 		else if (redir_vname)
- 		    var_redir_str((char_u *)" ", -1);
--		else if (redir_fd)
-+		else
- #endif
-+		    if (redir_fd != NULL)
- 		    fputs(" ", redir_fd);
-+		if (verbose_fd != NULL)
-+		    fputs(" ", verbose_fd);
- 		++cur_col;
- 	    }
- 	}
-@@ -3052,13 +3125,16 @@
- 	    var_redir_str(s, maxlen);
- #endif
- 
--	/* Adjust the current column */
-+	/* Write and adjust the current column. */
- 	while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
- 	{
- #ifdef FEAT_EVAL
--	    if (!redir_reg && !redir_vname && redir_fd != NULL)
-+	    if (!redir_reg && !redir_vname)
- #endif
--		putc(*s, redir_fd);
-+		if (redir_fd != NULL)
-+		    putc(*s, redir_fd);
-+	    if (verbose_fd != NULL)
-+		putc(*s, verbose_fd);
- 	    if (*s == '\r' || *s == '\n')
- 		cur_col = 0;
- 	    else if (*s == '\t')
-@@ -3076,7 +3152,7 @@
-     int
- redirecting()
- {
--    return redir_fd != NULL
-+    return redir_fd != NULL || *p_vfile != NUL
- #ifdef FEAT_EVAL
- 			  || redir_reg || redir_vname
- #endif
-@@ -3134,9 +3210,6 @@
- 	cmdline_row = msg_row;
- }
- 
--static FILE *verbose_fd = NULL;
--static int  verbose_did_open = FALSE;
--
- /*
-  * Called when 'verbosefile' is set: stop writing to the file.
-  */
-@@ -3174,49 +3247,6 @@
- }
- 
- /*
-- * Write a string to 'verbosefile'.
-- * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
-- */
--    static void
--verbose_write(str, maxlen)
--    char_u	*str;
--    int		maxlen;
--{
--    char_u	*s = str;
--    static int	cur_col = 0;
--
--    /* Open the file when called the first time. */
--    if (verbose_fd == NULL)
--	verbose_open();
--
--    if (verbose_fd != NULL)
--    {
--	/* If the string doesn't start with CR or NL, go to msg_col */
--	if (*s != '\n' && *s != '\r')
--	{
--	    while (cur_col < msg_col)
--	    {
--		fputs(" ", verbose_fd);
--		++cur_col;
--	    }
--	}
--
--	/* Adjust the current column */
--	while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
--	{
--	    putc(*s, verbose_fd);
--	    if (*s == '\r' || *s == '\n')
--		cur_col = 0;
--	    else if (*s == '\t')
--		cur_col += (8 - cur_col % 8);
--	    else
--		++cur_col;
--	    ++s;
--	}
--    }
--}
--
--/*
-  * Give a warning message (for searching).
-  * Use 'w' highlighting and may repeat the message after redrawing
-  */
-@@ -3294,7 +3324,7 @@
-  * different letter.
-  */
-     int
--do_dialog(type, title, message, buttons, dfltbutton, textfield)
-+do_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
-     int		type UNUSED;
-     char_u	*title UNUSED;
-     char_u	*message;
-@@ -3302,6 +3332,8 @@
-     int		dfltbutton;
-     char_u	*textfield UNUSED;	/* IObuff for inputdialog(), NULL
- 					   otherwise */
-+    int		ex_cmd;	    /* when TRUE pressing : accepts default and starts
-+			       Ex command */
- {
-     int		oldState;
-     int		retval = 0;
-@@ -3320,7 +3352,7 @@
-     if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
-     {
- 	c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
--								   textfield);
-+							   textfield, ex_cmd);
- 	/* avoid a hit-enter prompt without clearing the cmdline */
- 	need_wait_return = FALSE;
- 	emsg_on_display = FALSE;
-@@ -3367,6 +3399,13 @@
- 	    default:		/* Could be a hotkey? */
- 		if (c < 0)	/* special keys are ignored here */
- 		    continue;
-+		if (c == ':' && ex_cmd)
-+		{
-+		    retval = dfltbutton;
-+		    ins_char_typebuf(':');
-+		    break;
-+		}
-+
- 		/* Make the character lowercase, as chars in "hotkeys" are. */
- 		c = MB_TOLOWER(c);
- 		retval = 1;
-@@ -3640,7 +3679,7 @@
-     if (do_dialog(type,
- 		title == NULL ? (char_u *)_("Question") : title,
- 		message,
--		(char_u *)_("&Yes\n&No"), dflt, NULL) == 1)
-+		(char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1)
- 	return VIM_YES;
-     return VIM_NO;
- }
-@@ -3655,7 +3694,7 @@
-     switch (do_dialog(type,
- 		title == NULL ? (char_u *)_("Question") : title,
- 		message,
--		(char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL))
-+		(char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE))
-     {
- 	case 1: return VIM_YES;
- 	case 2: return VIM_NO;
-@@ -3674,7 +3713,7 @@
- 		title == NULL ? (char_u *)"Question" : title,
- 		message,
- 		(char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"),
--								  dflt, NULL))
-+							   dflt, NULL, FALSE))
-     {
- 	case 1: return VIM_YES;
- 	case 2: return VIM_NO;
-diff -Naur vim73.orig/src/misc1.c vim73/src/misc1.c
---- vim73.orig/src/misc1.c	2010-08-15 11:24:05.000000000 +0000
-+++ vim73/src/misc1.c	2012-11-01 20:35:48.000000000 +0000
-@@ -18,6 +18,11 @@
- static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u *name));
- static int copy_indent __ARGS((int size, char_u	*src));
- 
-+/* All user names (for ~user completion as done by shell). */
-+#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-+static garray_T	ga_users;
-+#endif
-+
- /*
-  * Count the size (in window cells) of the indent in the current line.
-  */
-@@ -363,7 +368,7 @@
- 
- 	/* Fill to next tabstop with a tab, if possible */
- 	tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
--	if (todo >= tab_pad)
-+	if (todo >= tab_pad && !curbuf->b_p_et)
- 	{
- 	    todo -= tab_pad;
- 	    ++ind_len;
-@@ -372,7 +377,7 @@
- 	}
- 
- 	/* Add tabs required for indent */
--	while (todo >= (int)curbuf->b_p_ts)
-+	while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
- 	{
- 	    todo -= (int)curbuf->b_p_ts;
- 	    ++ind_len;
-@@ -423,27 +428,36 @@
- {
-     colnr_T	col;
-     pos_T	pos;
--    regmmatch_T	regmatch;
-+
-+    regmatch_T	regmatch;
-+    int		lead_len = 0;	/* length of comment leader */
- 
-     if (lnum > curbuf->b_ml.ml_line_count)
- 	return -1;
-     pos.lnum = 0;
-+
-+#ifdef FEAT_COMMENTS
-+    /* In format_lines() (i.e. not insert mode), fo+=q is needed too...  */
-+    if ((State & INSERT) || has_format_option(FO_Q_COMS))
-+	lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
-+#endif
-     regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
-     if (regmatch.regprog != NULL)
-     {
--	regmatch.rmm_ic = FALSE;
--	regmatch.rmm_maxcol = 0;
--	if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
--							    (colnr_T)0, NULL))
-+	regmatch.rm_ic = FALSE;
-+
-+	/* vim_regexec() expects a pointer to a line.  This lets us
-+	 * start matching for the flp beyond any comment leader...  */
-+	if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
- 	{
--	    pos.lnum = regmatch.endpos[0].lnum + lnum;
--	    pos.col = regmatch.endpos[0].col;
-+	    pos.lnum = lnum;
-+	    pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
- #ifdef FEAT_VIRTUALEDIT
- 	    pos.coladd = 0;
- #endif
- 	}
--	vim_free(regmatch.regprog);
-     }
-+    vim_free(regmatch.regprog);
- 
-     if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
- 	return -1;
-@@ -502,14 +516,18 @@
-  *	    OPENLINE_DO_COM	format comments
-  *	    OPENLINE_KEEPTRAIL	keep trailing spaces
-  *	    OPENLINE_MARKFIX	adjust mark positions after the line break
-+ *	    OPENLINE_COM_LIST	format comments with list or 2nd line indent
-+ *
-+ * "second_line_indent": indent for after ^^D in Insert mode or if flag
-+ *			  OPENLINE_COM_LIST
-  *
-  * Return TRUE for success, FALSE for failure
-  */
-     int
--open_line(dir, flags, old_indent)
-+open_line(dir, flags, second_line_indent)
-     int		dir;		/* FORWARD or BACKWARD */
-     int		flags;
--    int		old_indent;	/* indent for after ^^D in Insert mode */
-+    int		second_line_indent;
- {
-     char_u	*saved_line;		/* copy of the original line */
-     char_u	*next_line = NULL;	/* copy of the next line */
-@@ -650,8 +668,8 @@
- 	 * count white space on current line
- 	 */
- 	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
--	if (newindent == 0)
--	    newindent = old_indent;	/* for ^^D command in insert mode */
-+	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
-+	    newindent = second_line_indent; /* for ^^D command in insert mode */
- 
- #ifdef FEAT_SMARTINDENT
- 	/*
-@@ -671,7 +689,7 @@
- 	    ptr = saved_line;
- # ifdef FEAT_COMMENTS
- 	    if (flags & OPENLINE_DO_COM)
--		lead_len = get_leader_len(ptr, NULL, FALSE);
-+		lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
- 	    else
- 		lead_len = 0;
- # endif
-@@ -693,7 +711,7 @@
- 		}
- # ifdef FEAT_COMMENTS
- 		if (flags & OPENLINE_DO_COM)
--		    lead_len = get_leader_len(ptr, NULL, FALSE);
-+		    lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
- 		else
- 		    lead_len = 0;
- 		if (lead_len > 0)
-@@ -836,7 +854,7 @@
-      */
-     end_comment_pending = NUL;
-     if (flags & OPENLINE_DO_COM)
--	lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD);
-+	lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD, TRUE);
-     else
- 	lead_len = 0;
-     if (lead_len > 0)
-@@ -1007,9 +1025,9 @@
- 	}
- 	if (lead_len)
- 	{
--	    /* allocate buffer (may concatenate p_exta later) */
--	    leader = alloc(lead_len + lead_repl_len + extra_space +
--							      extra_len + 1);
-+	    /* allocate buffer (may concatenate p_extra later) */
-+	    leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
-+		     + (second_line_indent > 0 ? second_line_indent : 0) + 1);
- 	    allocated = leader;		    /* remember to free it later */
- 
- 	    if (leader == NULL)
-@@ -1304,6 +1322,22 @@
-     /* concatenate leader and p_extra, if there is a leader */
-     if (lead_len)
-     {
-+	if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
-+	{
-+	    int i;
-+	    int padding = second_line_indent
-+					  - (newindent + (int)STRLEN(leader));
-+
-+	    /* Here whitespace is inserted after the comment char.
-+	     * Below, set_indent(newindent, SIN_INSERT) will insert the
-+	     * whitespace needed before the comment char. */
-+	    for (i = 0; i < padding; i++)
-+	    {
-+		STRCAT(leader, " ");
-+		less_cols--;
-+		newcol++;
-+	    }
-+	}
- 	STRCAT(leader, p_extra);
- 	p_extra = leader;
- 	did_ai = TRUE;	    /* So truncating blanks works with comments */
-@@ -1360,9 +1394,11 @@
- #ifdef FEAT_SMARTINDENT
- 	if (did_si)
- 	{
-+	    int        sw = (int)get_sw_value();
-+
- 	    if (p_sr)
--		newindent -= newindent % (int)curbuf->b_p_sw;
--	    newindent += (int)curbuf->b_p_sw;
-+		newindent -= newindent % sw;
-+	    newindent += sw;
- 	}
- #endif
- 	/* Copy the indent */
-@@ -1548,28 +1584,35 @@
-  * When "flags" is not NULL, it is set to point to the flags of the recognized
-  * comment leader.
-  * "backward" must be true for the "O" command.
-+ * If "include_space" is set, include trailing whitespace while calculating the
-+ * length.
-  */
-     int
--get_leader_len(line, flags, backward)
-+get_leader_len(line, flags, backward, include_space)
-     char_u	*line;
-     char_u	**flags;
-     int		backward;
-+    int		include_space;
- {
-     int		i, j;
-+    int		result;
-     int		got_com = FALSE;
-     int		found_one;
-     char_u	part_buf[COM_MAX_LEN];	/* buffer for one option part */
-     char_u	*string;		/* pointer to comment string */
-     char_u	*list;
-+    int		middle_match_len = 0;
-+    char_u	*prev_list;
-+    char_u	*saved_flags = NULL;
- 
--    i = 0;
-+    result = i = 0;
-     while (vim_iswhite(line[i]))    /* leading white space is ignored */
- 	++i;
- 
-     /*
-      * Repeat to match several nested comment strings.
-      */
--    while (line[i])
-+    while (line[i] != NUL)
-     {
- 	/*
- 	 * scan through the 'comments' option for a match
-@@ -1577,29 +1620,161 @@
- 	found_one = FALSE;
- 	for (list = curbuf->b_p_com; *list; )
- 	{
--	    /*
--	     * Get one option part into part_buf[].  Advance list to next one.
--	     * put string at start of string.
--	     */
--	    if (!got_com && flags != NULL)  /* remember where flags started */
--		*flags = list;
-+	    /* Get one option part into part_buf[].  Advance "list" to next
-+	     * one.  Put "string" at start of string.  */
-+	    if (!got_com && flags != NULL)
-+		*flags = list;	    /* remember where flags started */
-+	    prev_list = list;
- 	    (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
- 	    string = vim_strchr(part_buf, ':');
- 	    if (string == NULL)	    /* missing ':', ignore this part */
- 		continue;
- 	    *string++ = NUL;	    /* isolate flags from string */
- 
--	    /*
--	     * When already found a nested comment, only accept further
--	     * nested comments.
--	     */
-+	    /* If we found a middle match previously, use that match when this
-+	     * is not a middle or end. */
-+	    if (middle_match_len != 0
-+		    && vim_strchr(part_buf, COM_MIDDLE) == NULL
-+		    && vim_strchr(part_buf, COM_END) == NULL)
-+		break;
-+
-+	    /* When we already found a nested comment, only accept further
-+	     * nested comments. */
- 	    if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
- 		continue;
- 
--	    /* When 'O' flag used don't use for "O" command */
-+	    /* When 'O' flag present and using "O" command skip this one. */
- 	    if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
- 		continue;
- 
-+	    /* Line contents and string must match.
-+	     * When string starts with white space, must have some white space
-+	     * (but the amount does not need to match, there might be a mix of
-+	     * TABs and spaces). */
-+	    if (vim_iswhite(string[0]))
-+	    {
-+		if (i == 0 || !vim_iswhite(line[i - 1]))
-+		    continue;  /* missing shite space */
-+		while (vim_iswhite(string[0]))
-+		    ++string;
-+	    }
-+	    for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
-+		;
-+	    if (string[j] != NUL)
-+		continue;  /* string doesn't match */
-+
-+	    /* When 'b' flag used, there must be white space or an
-+	     * end-of-line after the string in the line. */
-+	    if (vim_strchr(part_buf, COM_BLANK) != NULL
-+			   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
-+		continue;
-+
-+	    /* We have found a match, stop searching unless this is a middle
-+	     * comment. The middle comment can be a substring of the end
-+	     * comment in which case it's better to return the length of the
-+	     * end comment and its flags.  Thus we keep searching with middle
-+	     * and end matches and use an end match if it matches better. */
-+	    if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
-+	    {
-+		if (middle_match_len == 0)
-+		{
-+		    middle_match_len = j;
-+		    saved_flags = prev_list;
-+		}
-+		continue;
-+	    }
-+	    if (middle_match_len != 0 && j > middle_match_len)
-+		/* Use this match instead of the middle match, since it's a
-+		 * longer thus better match. */
-+		middle_match_len = 0;
-+
-+	    if (middle_match_len == 0)
-+		i += j;
-+	    found_one = TRUE;
-+	    break;
-+	}
-+
-+	if (middle_match_len != 0)
-+	{
-+	    /* Use the previously found middle match after failing to find a
-+	     * match with an end. */
-+	    if (!got_com && flags != NULL)
-+		*flags = saved_flags;
-+	    i += middle_match_len;
-+	    found_one = TRUE;
-+	}
-+
-+	/* No match found, stop scanning. */
-+	if (!found_one)
-+	    break;
-+
-+	result = i;
-+
-+	/* Include any trailing white space. */
-+	while (vim_iswhite(line[i]))
-+	    ++i;
-+
-+	if (include_space)
-+	    result = i;
-+
-+	/* If this comment doesn't nest, stop here. */
-+	got_com = TRUE;
-+	if (vim_strchr(part_buf, COM_NEST) == NULL)
-+	    break;
-+    }
-+    return result;
-+}
-+
-+/*
-+ * Return the offset at which the last comment in line starts. If there is no
-+ * comment in the whole line, -1 is returned.
-+ *
-+ * When "flags" is not null, it is set to point to the flags describing the
-+ * recognized comment leader.
-+ */
-+    int
-+get_last_leader_offset(line, flags)
-+    char_u	*line;
-+    char_u	**flags;
-+{
-+    int		result = -1;
-+    int		i, j;
-+    int		lower_check_bound = 0;
-+    char_u	*string;
-+    char_u	*com_leader;
-+    char_u	*com_flags;
-+    char_u	*list;
-+    int		found_one;
-+    char_u	part_buf[COM_MAX_LEN];	/* buffer for one option part */
-+
-+    /*
-+     * Repeat to match several nested comment strings.
-+     */
-+    i = (int)STRLEN(line);
-+    while (--i >= lower_check_bound)
-+    {
-+	/*
-+	 * scan through the 'comments' option for a match
-+	 */
-+	found_one = FALSE;
-+	for (list = curbuf->b_p_com; *list; )
-+	{
-+	    char_u *flags_save = list;
-+
-+	    /*
-+	     * Get one option part into part_buf[].  Advance list to next one.
-+	     * put string at start of string.
-+	     */
-+	    (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
-+	    string = vim_strchr(part_buf, ':');
-+	    if (string == NULL)	/* If everything is fine, this cannot actually
-+				 * happen. */
-+	    {
-+		continue;
-+	    }
-+	    *string++ = NUL;	/* Isolate flags from string. */
-+	    com_leader = string;
-+
- 	    /*
- 	     * Line contents and string must match.
- 	     * When string starts with white space, must have some white space
-@@ -1614,7 +1789,7 @@
- 		    ++string;
- 	    }
- 	    for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
--		;
-+		/* do nothing */;
- 	    if (string[j] != NUL)
- 		continue;
- 
-@@ -1623,37 +1798,77 @@
- 	     * end-of-line after the string in the line.
- 	     */
- 	    if (vim_strchr(part_buf, COM_BLANK) != NULL
--			   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
-+		    && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
-+	    {
- 		continue;
-+	    }
- 
- 	    /*
- 	     * We have found a match, stop searching.
- 	     */
--	    i += j;
--	    got_com = TRUE;
- 	    found_one = TRUE;
-+
-+	    if (flags)
-+		*flags = flags_save;
-+	    com_flags = flags_save;
-+
- 	    break;
- 	}
- 
--	/*
--	 * No match found, stop scanning.
--	 */
--	if (!found_one)
--	    break;
-+	if (found_one)
-+	{
-+	    char_u  part_buf2[COM_MAX_LEN];	/* buffer for one option part */
-+	    int     len1, len2, off;
- 
--	/*
--	 * Include any trailing white space.
--	 */
--	while (vim_iswhite(line[i]))
--	    ++i;
-+	    result = i;
-+	    /*
-+	     * If this comment nests, continue searching.
-+	     */
-+	    if (vim_strchr(part_buf, COM_NEST) != NULL)
-+		continue;
- 
--	/*
--	 * If this comment doesn't nest, stop here.
--	 */
--	if (vim_strchr(part_buf, COM_NEST) == NULL)
--	    break;
-+	    lower_check_bound = i;
-+
-+	    /* Let's verify whether the comment leader found is a substring
-+	     * of other comment leaders. If it is, let's adjust the
-+	     * lower_check_bound so that we make sure that we have determined
-+	     * the comment leader correctly.
-+	     */
-+
-+	    while (vim_iswhite(*com_leader))
-+		++com_leader;
-+	    len1 = (int)STRLEN(com_leader);
-+
-+	    for (list = curbuf->b_p_com; *list; )
-+	    {
-+		char_u *flags_save = list;
-+
-+		(void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
-+		if (flags_save == com_flags)
-+		    continue;
-+		string = vim_strchr(part_buf2, ':');
-+		++string;
-+		while (vim_iswhite(*string))
-+		    ++string;
-+		len2 = (int)STRLEN(string);
-+		if (len2 == 0)
-+		    continue;
-+
-+		/* Now we have to verify whether string ends with a substring
-+		 * beginning the com_leader. */
-+		for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;)
-+		{
-+		    --off;
-+		    if (!STRNCMP(string + off, com_leader, len2 - off))
-+		    {
-+			if (i - off < lower_check_bound)
-+			    lower_check_bound = i - off;
-+		    }
-+		}
-+	    }
-+	}
-     }
--    return (got_com ? i : 0);
-+    return result;
- }
- #endif
- 
-@@ -1907,7 +2122,7 @@
-     int		c;
- {
- #if defined(FEAT_MBYTE) || defined(PROTO)
--    char_u	buf[MB_MAXBYTES];
-+    char_u	buf[MB_MAXBYTES + 1];
-     int		n;
- 
-     n = (*mb_char2bytes)(c, buf);
-@@ -2919,7 +3134,7 @@
-     buf_T	*buf;
-     int		ff;	/* also reset 'fileformat' */
- {
--    if (buf->b_changed || (ff && file_ff_differs(buf)))
-+    if (buf->b_changed || (ff && file_ff_differs(buf, FALSE)))
-     {
- 	buf->b_changed = 0;
- 	ml_setflags(buf);
-@@ -3080,8 +3295,9 @@
-     int
- get_keystroke()
- {
--#define CBUFLEN 151
--    char_u	buf[CBUFLEN];
-+    char_u	*buf = NULL;
-+    int		buflen = 150;
-+    int		maxlen;
-     int		len = 0;
-     int		n;
-     int		save_mapped_ctrl_c = mapped_ctrl_c;
-@@ -3093,12 +3309,29 @@
- 	cursor_on();
- 	out_flush();
- 
-+	/* Leave some room for check_termcode() to insert a key code into (max
-+	 * 5 chars plus NUL).  And fix_input_buffer() can triple the number of
-+	 * bytes. */
-+	maxlen = (buflen - 6 - len) / 3;
-+	if (buf == NULL)
-+	    buf = alloc(buflen);
-+	else if (maxlen < 10)
-+	{
-+	    /* Need some more space. This might happen when receiving a long
-+	     * escape sequence. */
-+	    buflen += 100;
-+	    buf = vim_realloc(buf, buflen);
-+	    maxlen = (buflen - 6 - len) / 3;
-+	}
-+	if (buf == NULL)
-+	{
-+	    do_outofmem_msg((long_u)buflen);
-+	    return ESC;  /* panic! */
-+	}
-+
- 	/* First time: blocking wait.  Second time: wait up to 100ms for a
--	 * terminal code to complete.  Leave some room for check_termcode() to
--	 * insert a key code into (max 5 chars plus NUL).  And
--	 * fix_input_buffer() can triple the number of bytes. */
--	n = ui_inchar(buf + len, (CBUFLEN - 6 - len) / 3,
--						    len == 0 ? -1L : 100L, 0);
-+	 * terminal code to complete. */
-+	n = ui_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
- 	if (n > 0)
- 	{
- 	    /* Replace zero and CSI by a special key code. */
-@@ -3110,14 +3343,23 @@
- 	    ++waited;	    /* keep track of the waiting time */
- 
- 	/* Incomplete termcode and not timed out yet: get more characters */
--	if ((n = check_termcode(1, buf, len)) < 0
-+	if ((n = check_termcode(1, buf, buflen, &len)) < 0
- 	       && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
- 	    continue;
- 
--	/* found a termcode: adjust length */
--	if (n > 0)
-+	if (n == KEYLEN_REMOVED)  /* key code removed */
-+	{
-+	    if (must_redraw != 0 && !need_wait_return && (State & CMDLINE) == 0)
-+	    {
-+		/* Redrawing was postponed, do it now. */
-+		update_screen(0);
-+		setcursor(); /* put cursor back where it belongs */
-+	    }
-+	    continue;
-+	}
-+	if (n > 0)		/* found a termcode: adjust length */
- 	    len = n;
--	if (len == 0)	    /* nothing typed yet */
-+	if (len == 0)		/* nothing typed yet */
- 	    continue;
- 
- 	/* Handle modifier and/or special key code. */
-@@ -3169,7 +3411,7 @@
- 	{
- 	    if (MB_BYTE2LEN(n) > len)
- 		continue;	/* more bytes to get */
--	    buf[len >= CBUFLEN ? CBUFLEN - 1 : len] = NUL;
-+	    buf[len >= buflen ? buflen - 1 : len] = NUL;
- 	    n = (*mb_ptr2char)(buf);
- 	}
- #endif
-@@ -3179,6 +3421,7 @@
- #endif
- 	break;
-     }
-+    vim_free(buf);
- 
-     mapped_ctrl_c = save_mapped_ctrl_c;
-     return n;
-@@ -3323,19 +3566,23 @@
- 	if (pn == 1)
- 	{
- 	    if (n > 0)
--		STRCPY(msg_buf, _("1 more line"));
-+		vim_strncpy(msg_buf, (char_u *)_("1 more line"),
-+							     MSG_BUF_LEN - 1);
- 	    else
--		STRCPY(msg_buf, _("1 line less"));
-+		vim_strncpy(msg_buf, (char_u *)_("1 line less"),
-+							     MSG_BUF_LEN - 1);
- 	}
- 	else
- 	{
- 	    if (n > 0)
--		sprintf((char *)msg_buf, _("%ld more lines"), pn);
-+		vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
-+						     _("%ld more lines"), pn);
- 	    else
--		sprintf((char *)msg_buf, _("%ld fewer lines"), pn);
-+		vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
-+						    _("%ld fewer lines"), pn);
- 	}
- 	if (got_int)
--	    STRCAT(msg_buf, _(" (Interrupted)"));
-+	    vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
- 	if (msg(msg_buf))
- 	{
- 	    set_keep_msg(msg_buf, 0);
-@@ -3492,7 +3739,7 @@
-     if (enc_utf8 && var != NULL)
-     {
- 	int	len;
--	char_u  *pp;
-+	char_u  *pp = NULL;
- 
- 	/* Convert from active codepage to UTF-8.  Other conversions are
- 	 * not done, because they would fail for non-ASCII characters. */
-@@ -3540,6 +3787,14 @@
- {
-     vim_free(homedir);
- }
-+
-+# ifdef FEAT_CMDL_COMPL
-+    void
-+free_users()
-+{
-+    ga_clear_strings(&ga_users);
-+}
-+# endif
- #endif
- 
- /*
-@@ -3859,11 +4114,13 @@
-  * Vim's version of getenv().
-  * Special handling of $HOME, $VIM and $VIMRUNTIME.
-  * Also does ACP to 'enc' conversion for Win32.
-+ * "mustfree" is set to TRUE when returned is allocated, it must be
-+ * initialized to FALSE by the caller.
-  */
-     char_u *
- vim_getenv(name, mustfree)
-     char_u	*name;
--    int		*mustfree;	/* set to TRUE when returned is allocated */
-+    int		*mustfree;
- {
-     char_u	*p;
-     char_u	*pend;
-@@ -3885,7 +4142,7 @@
- 	if (enc_utf8)
- 	{
- 	    int	    len;
--	    char_u  *pp;
-+	    char_u  *pp = NULL;
- 
- 	    /* Convert from active codepage to UTF-8.  Other conversions are
- 	     * not done, because they would fail for non-ASCII characters. */
-@@ -3929,7 +4186,7 @@
- 	    if (enc_utf8)
- 	    {
- 		int	len;
--		char_u  *pp;
-+		char_u  *pp = NULL;
- 
- 		/* Convert from active codepage to UTF-8.  Other conversions
- 		 * are not done, because they would fail for non-ASCII
-@@ -3937,7 +4194,7 @@
- 		acp_to_enc(p, (int)STRLEN(p), &pp, &len);
- 		if (pp != NULL)
- 		{
--		    if (mustfree)
-+		    if (*mustfree)
- 			vim_free(p);
- 		    p = pp;
- 		    *mustfree = TRUE;
-@@ -4074,17 +4331,6 @@
- 	{
- 	    vim_setenv((char_u *)"VIMRUNTIME", p);
- 	    didset_vimruntime = TRUE;
--#ifdef FEAT_GETTEXT
--	    {
--		char_u	*buf = concat_str(p, (char_u *)"/lang");
--
--		if (buf != NULL)
--		{
--		    bindtextdomain(VIMPACKAGE, (char *)buf);
--		    vim_free(buf);
--		}
--	    }
--#endif
- 	}
- 	else
- 	{
-@@ -4162,6 +4408,22 @@
- 	putenv((char *)envbuf);
-     }
- #endif
-+#ifdef FEAT_GETTEXT
-+    /*
-+     * When setting $VIMRUNTIME adjust the directory to find message
-+     * translations to $VIMRUNTIME/lang.
-+     */
-+    if (*val != NUL && STRICMP(name, "VIMRUNTIME") == 0)
-+    {
-+	char_u	*buf = concat_str(val, (char_u *)"/lang");
-+
-+	if (buf != NULL)
-+	{
-+	    bindtextdomain(VIMPACKAGE, (char *)buf);
-+	    vim_free(buf);
-+	}
-+    }
-+#endif
- }
- 
- #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
-@@ -4202,6 +4464,80 @@
-     return name;
- # endif
- }
-+
-+/*
-+ * Find all user names for user completion.
-+ * Done only once and then cached.
-+ */
-+    static void
-+init_users() {
-+    static int	lazy_init_done = FALSE;
-+
-+    if (lazy_init_done)
-+	return;
-+
-+    lazy_init_done = TRUE;
-+    ga_init2(&ga_users, sizeof(char_u *), 20);
-+
-+# if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
-+    {
-+	char_u*		user;
-+	struct passwd*	pw;
-+
-+	setpwent();
-+	while ((pw = getpwent()) != NULL)
-+	    /* pw->pw_name shouldn't be NULL but just in case... */
-+	    if (pw->pw_name != NULL)
-+	    {
-+		if (ga_grow(&ga_users, 1) == FAIL)
-+		    break;
-+		user = vim_strsave((char_u*)pw->pw_name);
-+		if (user == NULL)
-+		    break;
-+		((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
-+	    }
-+	endpwent();
-+    }
-+# endif
-+}
-+
-+/*
-+ * Function given to ExpandGeneric() to obtain an user names.
-+ */
-+    char_u*
-+get_users(xp, idx)
-+    expand_T	*xp UNUSED;
-+    int		idx;
-+{
-+    init_users();
-+    if (idx < ga_users.ga_len)
-+	return ((char_u **)ga_users.ga_data)[idx];
-+    return NULL;
-+}
-+
-+/*
-+ * Check whether name matches a user name. Return:
-+ * 0 if name does not match any user name.
-+ * 1 if name partially matches the beginning of a user name.
-+ * 2 is name fully matches a user name.
-+ */
-+int match_user(name)
-+    char_u* name;
-+{
-+    int i;
-+    int n = (int)STRLEN(name);
-+    int result = 0;
-+
-+    init_users();
-+    for (i = 0; i < ga_users.ga_len; i++)
-+    {
-+	if (STRCMP(((char_u **)ga_users.ga_data)[i], name) == 0)
-+	    return 2; /* full match */
-+	if (STRNCMP(((char_u **)ga_users.ga_data)[i], name, n) == 0)
-+	    result = 1; /* partial match */
-+    }
-+    return result;
-+}
- #endif
- 
- /*
-@@ -4220,7 +4556,7 @@
- {
-     size_t	dirlen = 0, envlen = 0;
-     size_t	len;
--    char_u	*homedir_env;
-+    char_u	*homedir_env, *homedir_env_orig;
-     char_u	*p;
- 
-     if (src == NULL)
-@@ -4246,13 +4582,31 @@
- 	dirlen = STRLEN(homedir);
- 
- #ifdef VMS
--    homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
-+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
- #else
--    homedir_env = mch_getenv((char_u *)"HOME");
-+    homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
- #endif
--
-+    /* Empty is the same as not set. */
-     if (homedir_env != NULL && *homedir_env == NUL)
- 	homedir_env = NULL;
-+
-+#if defined(FEAT_MODIFY_FNAME) || defined(WIN3264)
-+    if (homedir_env != NULL && vim_strchr(homedir_env, '~') != NULL)
-+    {
-+	int	usedlen = 0;
-+	int	flen;
-+	char_u	*fbuf = NULL;
-+
-+	flen = (int)STRLEN(homedir_env);
-+	(void)modify_fname((char_u *)":p", &usedlen,
-+						  &homedir_env, &fbuf, &flen);
-+	flen = (int)STRLEN(homedir_env);
-+	if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
-+	    /* Remove the trailing / that is added to a directory. */
-+	    homedir_env[flen - 1] = NUL;
-+    }
-+#endif
-+
-     if (homedir_env != NULL)
- 	envlen = STRLEN(homedir_env);
- 
-@@ -4306,6 +4660,9 @@
-     /* if (dstlen == 0) out of space, what to do??? */
- 
-     *dst = NUL;
-+
-+    if (homedir_env != homedir_env_orig)
-+	vim_free(homedir_env);
- }
- 
- /*
-@@ -4549,25 +4906,21 @@
- vim_ispathsep(c)
-     int c;
- {
--#ifdef RISCOS
--    return (c == '.' || c == ':');
--#else
--# ifdef UNIX
-+#ifdef UNIX
-     return (c == '/');	    /* UNIX has ':' inside file names */
--# else
--#  ifdef BACKSLASH_IN_FILENAME
-+#else
-+# ifdef BACKSLASH_IN_FILENAME
-     return (c == ':' || c == '/' || c == '\\');
--#  else
--#   ifdef VMS
-+# else
-+#  ifdef VMS
-     /* server"user passwd"::device:[full.path.name]fname.extension;version" */
-     return (c == ':' || c == '[' || c == ']' || c == '/'
- 	    || c == '<' || c == '>' || c == '"' );
--#   else		/* Amiga */
-+#  else
-     return (c == ':' || c == '/');
--#   endif /* VMS */
--#  endif
-+#  endif /* VMS */
- # endif
--#endif /* RISC OS */
-+#endif
- }
- 
- #if defined(FEAT_SEARCHPATH) || defined(PROTO)
-@@ -4752,8 +5105,8 @@
-     char_u  *
- FullName_save(fname, force)
-     char_u	*fname;
--    int		force;	    /* force expansion, even when it already looks
--			       like a full path name */
-+    int		force;		/* force expansion, even when it already looks
-+				 * like a full path name */
- {
-     char_u	*buf;
-     char_u	*new_fname = NULL;
-@@ -4907,11 +5260,12 @@
- static int	cin_islinecomment __ARGS((char_u *));
- static int	cin_isterminated __ARGS((char_u *, int, int));
- static int	cin_isinit __ARGS((void));
--static int	cin_isfuncdecl __ARGS((char_u **, linenr_T));
-+static int	cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int));
- static int	cin_isif __ARGS((char_u *));
- static int	cin_iselse __ARGS((char_u *));
- static int	cin_isdo __ARGS((char_u *));
- static int	cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
-+static int	cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
- static int	cin_iswhileofdo_end __ARGS((int terminated, int	ind_maxparen, int ind_maxcomment));
- static int	cin_isbreak __ARGS((char_u *));
- static int	cin_is_cpp_baseclass __ARGS((colnr_T *col));
-@@ -4923,6 +5277,7 @@
- static int	corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
- static int	find_last_paren __ARGS((char_u *l, int start, int end));
- static int	find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
-+static int	cin_is_cpp_namespace __ARGS((char_u *));
- 
- static int	ind_hash_comment = 0;   /* # starts a comment */
- 
-@@ -4968,7 +5323,7 @@
- }
- 
- /*
-- * Return TRUE if there there is no code at *s.  White space and comments are
-+ * Return TRUE if there is no code at *s.  White space and comments are
-  * not considered code.
-  */
-     static int
-@@ -5101,6 +5456,9 @@
-     if (STRNCMP(s, "typedef", 7) == 0 && !vim_isIDc(s[7]))
- 	s = cin_skipcomment(s + 7);
- 
-+    if (STRNCMP(s, "static", 6) == 0 && !vim_isIDc(s[6]))
-+	s = cin_skipcomment(s + 6);
-+
-     if (STRNCMP(s, "enum", 4) == 0 && !vim_isIDc(s[4]))
- 	return TRUE;
- 
-@@ -5185,6 +5543,50 @@
-     return (*(s = cin_skipcomment(s + i)) == ':' && s[1] != ':');
- }
- 
-+/* Maximum number of lines to search back for a "namespace" line. */
-+#define FIND_NAMESPACE_LIM 20
-+
-+/*
-+ * Recognize a "namespace" scope declaration.
-+ */
-+    static int
-+cin_is_cpp_namespace(s)
-+    char_u	*s;
-+{
-+    char_u	*p;
-+    int		has_name = FALSE;
-+
-+    s = cin_skipcomment(s);
-+    if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9])))
-+    {
-+	p = cin_skipcomment(skipwhite(s + 9));
-+	while (*p != NUL)
-+	{
-+	    if (vim_iswhite(*p))
-+	    {
-+		has_name = TRUE; /* found end of a name */
-+		p = cin_skipcomment(skipwhite(p));
-+	    }
-+	    else if (*p == '{')
-+	    {
-+		break;
-+	    }
-+	    else if (vim_iswordc(*p))
-+	    {
-+		if (has_name)
-+		    return FALSE; /* word character after skipping past name */
-+		++p;
-+	    }
-+	    else
-+	    {
-+		return FALSE;
-+	    }
-+	}
-+	return TRUE;
-+    }
-+    return FALSE;
-+}
-+
- /*
-  * Return a pointer to the first non-empty non-comment character after a ':'.
-  * Return NULL if not found.
-@@ -5383,8 +5785,7 @@
- cin_ispreproc(s)
-     char_u *s;
- {
--    s = skipwhite(s);
--    if (*s == '#')
-+    if (*skipwhite(s) == '#')
- 	return TRUE;
-     return FALSE;
- }
-@@ -5444,8 +5845,11 @@
- }
- 
- /*
-- * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
-+ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
-+ * '}'.
-  * Don't consider "} else" a terminated line.
-+ * If a line begins with an "else", only consider it terminated if no unmatched
-+ * opening braces follow (handle "else { foo();" correctly).
-  * Return the character terminating the line (ending char's have precedence if
-  * both apply in order to determine initializations).
-  */
-@@ -5455,21 +5859,35 @@
-     int		incl_open;	/* include '{' at the end as terminator */
-     int		incl_comma;	/* recognize a trailing comma */
- {
--    char_u found_start = 0;
-+    char_u	found_start = 0;
-+    unsigned	n_open = 0;
-+    int		is_else = FALSE;
- 
-     s = cin_skipcomment(s);
- 
-     if (*s == '{' || (*s == '}' && !cin_iselse(s)))
- 	found_start = *s;
- 
-+    if (!found_start)
-+	is_else = cin_iselse(s);
-+
-     while (*s)
-     {
- 	/* skip over comments, "" strings and 'c'haracters */
- 	s = skip_string(cin_skipcomment(s));
--	if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
--						 || (incl_comma && *s == ','))
-+	if (*s == '}' && n_open > 0)
-+	    --n_open;
-+	if ((!is_else || n_open == 0)
-+		&& (*s == ';' || *s == '}' || (incl_comma && *s == ','))
- 		&& cin_nocode(s + 1))
- 	    return *s;
-+	else if (*s == '{')
-+	{
-+	    if (incl_open && cin_nocode(s + 1))
-+		return *s;
-+	    else
-+		++n_open;
-+	}
- 
- 	if (*s)
- 	    s++;
-@@ -5485,21 +5903,41 @@
-  * "sp" points to a string with the line.  When looking at other lines it must
-  * be restored to the line.  When it's NULL fetch lines here.
-  * "lnum" is where we start looking.
-+ * "min_lnum" is the line before which we will not be looking.
-  */
-     static int
--cin_isfuncdecl(sp, first_lnum)
-+cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment)
-     char_u	**sp;
-     linenr_T	first_lnum;
-+    linenr_T	min_lnum;
-+    int		ind_maxparen;
-+    int		ind_maxcomment;
- {
-     char_u	*s;
-     linenr_T	lnum = first_lnum;
-     int		retval = FALSE;
-+    pos_T	*trypos;
-+    int		just_started = TRUE;
- 
-     if (sp == NULL)
- 	s = ml_get(lnum);
-     else
- 	s = *sp;
- 
-+    if (find_last_paren(s, '(', ')')
-+	&& (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL)
-+    {
-+	lnum = trypos->lnum;
-+	if (lnum < min_lnum)
-+	    return FALSE;
-+
-+	s = ml_get(lnum);
-+    }
-+
-+    /* Ignore line starting with #. */
-+    if (cin_ispreproc(s))
-+	return FALSE;
-+
-     while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
-     {
- 	if (cin_iscomment(s))	/* ignore comments */
-@@ -5525,18 +5963,38 @@
- 		retval = TRUE;
- 	    goto done;
- 	}
--	if (*s == ',' && cin_nocode(s + 1))
-+	if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s))
- 	{
--	    /* ',' at the end: continue looking in the next line */
-+	    int comma = (*s == ',');
-+
-+	    /* ',' at the end: continue looking in the next line.
-+	     * At the end: check for ',' in the next line, for this style:
-+	     * func(arg1
-+	     *       , arg2) */
-+	    for (;;)
-+	    {
-+		if (lnum >= curbuf->b_ml.ml_line_count)
-+		    break;
-+		s = ml_get(++lnum);
-+		if (!cin_ispreproc(s))
-+		    break;
-+	    }
- 	    if (lnum >= curbuf->b_ml.ml_line_count)
- 		break;
--
--	    s = ml_get(++lnum);
-+	    /* Require a comma at end of the line or a comma or ')' at the
-+	     * start of next line. */
-+	    s = skipwhite(s);
-+	    if (!just_started && (!comma && *s != ',' && *s != ')'))
-+		break;
-+	    just_started = FALSE;
- 	}
- 	else if (cin_iscomment(s))	/* ignore comments */
- 	    s = cin_skipcomment(s);
- 	else
-+	{
- 	    ++s;
-+	    just_started = FALSE;
-+	}
-     }
- 
- done:
-@@ -5607,6 +6065,52 @@
- }
- 
- /*
-+ * Check whether in "p" there is an "if", "for" or "while" before "*poffset".
-+ * Return 0 if there is none.
-+ * Otherwise return !0 and update "*poffset" to point to the place where the
-+ * string was found.
-+ */
-+    static int
-+cin_is_if_for_while_before_offset(line, poffset)
-+    char_u *line;
-+    int    *poffset;
-+{
-+    int offset = *poffset;
-+
-+    if (offset-- < 2)
-+	return 0;
-+    while (offset > 2 && vim_iswhite(line[offset]))
-+	--offset;
-+
-+    offset -= 1;
-+    if (!STRNCMP(line + offset, "if", 2))
-+	goto probablyFound;
-+
-+    if (offset >= 1)
-+    {
-+	offset -= 1;
-+	if (!STRNCMP(line + offset, "for", 3))
-+	    goto probablyFound;
-+
-+	if (offset >= 2)
-+	{
-+	    offset -= 2;
-+	    if (!STRNCMP(line + offset, "while", 5))
-+		goto probablyFound;
-+	}
-+    }
-+    return 0;
-+
-+probablyFound:
-+    if (!offset || !vim_isIDc(line[offset - 1]))
-+    {
-+	*poffset = offset;
-+	return 1;
-+    }
-+    return 0;
-+}
-+
-+/*
-  * Return TRUE if we are at the end of a do-while.
-  *    do
-  *       nothing;
-@@ -5754,7 +6258,9 @@
- 		continue;
- 	}
- 
--	if (s[0] == ':')
-+	if (s[0] == '"')
-+	    s = skip_string(s) + 1;
-+	else if (s[0] == ':')
- 	{
- 	    if (s[1] == ':')
- 	    {
-@@ -5958,7 +6464,7 @@
- 
- /*
-  * Find the matching '(', failing if it is in a comment.
-- * Return NULL of no match found.
-+ * Return NULL if no match found.
-  */
-     static pos_T *
- find_match_paren(ind_maxparen, ind_maxcomment)	    /* XXX */
-@@ -6008,7 +6514,7 @@
- 
- /*
-  * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
-- * line "l".
-+ * line "l".  "l" must point to the start of the line.
-  */
-     static int
- find_last_paren(l, start, end)
-@@ -6021,7 +6527,7 @@
- 
-     curwin->w_cursor.col = 0;		    /* default is start of line */
- 
--    for (i = 0; l[i]; i++)
-+    for (i = 0; l[i] != NUL; i++)
-     {
- 	i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
- 	i = (int)(skip_string(l + i) - l);    /* ignore parens in quotes */
-@@ -6044,11 +6550,14 @@
-     int
- get_c_indent()
- {
-+    int sw = (int)get_sw_value();
-+
-     /*
-      * spaces from a block's opening brace the prevailing indent for that
-      * block should be
-      */
--    int ind_level = curbuf->b_p_sw;
-+
-+    int ind_level = sw;
- 
-     /*
-      * spaces from the edge of the line an open brace that's at the end of a
-@@ -6095,12 +6604,12 @@
-     /*
-      * spaces from the switch() indent a "case xx" label should be located
-      */
--    int ind_case = curbuf->b_p_sw;
-+    int ind_case = sw;
- 
-     /*
-      * spaces from the "case xx:" code after a switch() should be located
-      */
--    int ind_case_code = curbuf->b_p_sw;
-+    int ind_case_code = sw;
- 
-     /*
-      * lineup break at end of case in switch() with case label
-@@ -6111,45 +6620,45 @@
-      * spaces from the class declaration indent a scope declaration label
-      * should be located
-      */
--    int ind_scopedecl = curbuf->b_p_sw;
-+    int ind_scopedecl = sw;
- 
-     /*
-      * spaces from the scope declaration label code should be located
-      */
--    int ind_scopedecl_code = curbuf->b_p_sw;
-+    int ind_scopedecl_code = sw;
- 
-     /*
-      * amount K&R-style parameters should be indented
-      */
--    int ind_param = curbuf->b_p_sw;
-+    int ind_param = sw;
- 
-     /*
-      * amount a function type spec should be indented
-      */
--    int ind_func_type = curbuf->b_p_sw;
-+    int ind_func_type = sw;
- 
-     /*
-      * amount a cpp base class declaration or constructor initialization
-      * should be indented
-      */
--    int ind_cpp_baseclass = curbuf->b_p_sw;
-+    int ind_cpp_baseclass = sw;
- 
-     /*
-      * additional spaces beyond the prevailing indent a continuation line
-      * should be located
-      */
--    int ind_continuation = curbuf->b_p_sw;
-+    int ind_continuation = sw;
- 
-     /*
-      * spaces from the indent of the line with an unclosed parentheses
-      */
--    int ind_unclosed = curbuf->b_p_sw * 2;
-+    int ind_unclosed = sw * 2;
- 
-     /*
-      * spaces from the indent of the line with an unclosed parentheses, which
-      * itself is also unclosed
-      */
--    int ind_unclosed2 = curbuf->b_p_sw;
-+    int ind_unclosed2 = sw;
- 
-     /*
-      * suppress ignoring spaces from the indent of a line starting with an
-@@ -6222,6 +6731,17 @@
-      */
-     int ind_keep_case_label = 0;
- 
-+    /*
-+     * handle C++ namespace
-+     */
-+    int ind_cpp_namespace = 0;
-+
-+    /*
-+     * handle continuation lines containing conditions of if(), for() and
-+     * while()
-+     */
-+    int ind_if_for_while = 0;
-+
-     pos_T	cur_curpos;
-     int		amount;
-     int		scope_amount;
-@@ -6257,19 +6777,23 @@
-     int		whilelevel;
-     linenr_T	lnum;
-     char_u	*options;
-+    char_u	*digits;
-     int		fraction = 0;	    /* init for GCC */
-     int		divider;
-     int		n;
-     int		iscase;
-     int		lookfor_break;
-+    int		lookfor_cpp_namespace = FALSE;
-     int		cont_amount = 0;    /* amount for continuation line */
-     int		original_line_islabel;
-+    int		added_to_amount = 0;
- 
-     for (options = curbuf->b_p_cino; *options; )
-     {
- 	l = options++;
- 	if (*options == '-')
- 	    ++options;
-+	digits = options;	    /* remember where the digits start */
- 	n = getdigits(&options);
- 	divider = 0;
- 	if (*options == '.')	    /* ".5s" means a fraction */
-@@ -6286,13 +6810,13 @@
- 	}
- 	if (*options == 's')	    /* "2s" means two times 'shiftwidth' */
- 	{
--	    if (n == 0 && fraction == 0)
--		n = curbuf->b_p_sw;	/* just "s" is one 'shiftwidth' */
-+	    if (options == digits)
-+		n = sw;	/* just "s" is one 'shiftwidth' */
- 	    else
- 	    {
--		n *= curbuf->b_p_sw;
-+		n *= sw;
- 		if (divider)
--		    n += (curbuf->b_p_sw * fraction + divider / 2) / divider;
-+		    n += (sw * fraction + divider / 2) / divider;
- 	    }
- 	    ++options;
- 	}
-@@ -6335,6 +6859,8 @@
- 	    case 'J': ind_js = n; break;
- 	    case 'l': ind_keep_case_label = n; break;
- 	    case '#': ind_hash_comment = n; break;
-+	    case 'N': ind_cpp_namespace = n; break;
-+	    case 'k': ind_if_for_while = n; break;
- 	}
- 	if (*options == ',')
- 	    ++options;
-@@ -6424,6 +6950,8 @@
- 	/* find how indented the line beginning the comment is */
- 	getvcol(curwin, trypos, &col, NULL, NULL);
- 	amount = col;
-+	*lead_start = NUL;
-+	*lead_middle = NUL;
- 
- 	p = curbuf->b_p_com;
- 	while (*p != NUL)
-@@ -6636,6 +7164,33 @@
- 	if (amount == -1)
- 	{
- 	    int	    ignore_paren_col = 0;
-+	    int	    is_if_for_while = 0;
-+
-+	    if (ind_if_for_while)
-+	    {
-+		/* Look for the outermost opening parenthesis on this line
-+		 * and check whether it belongs to an "if", "for" or "while". */
-+
-+		pos_T	    cursor_save = curwin->w_cursor;
-+		pos_T	    outermost;
-+		char_u	    *line;
-+
-+		trypos = &our_paren_pos;
-+		do {
-+		    outermost = *trypos;
-+		    curwin->w_cursor.lnum = outermost.lnum;
-+		    curwin->w_cursor.col = outermost.col;
-+
-+		    trypos = find_match_paren(ind_maxparen, ind_maxcomment);
-+		} while (trypos && trypos->lnum == outermost.lnum);
-+
-+		curwin->w_cursor = cursor_save;
-+
-+		line = ml_get(outermost.lnum);
-+
-+		is_if_for_while =
-+		    cin_is_if_for_while_before_offset(line, &outermost.col);
-+	    }
- 
- 	    amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
- 	    look = skipwhite(look);
-@@ -6660,7 +7215,7 @@
- 		curwin->w_cursor.lnum = save_lnum;
- 		look = ml_get(our_paren_pos.lnum) + look_col;
- 	    }
--	    if (theline[0] == ')' || ind_unclosed == 0
-+	    if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0)
- 		    || (!ind_unclosed_noignore && *look == '('
- 						    && ignore_paren_col == 0))
- 	    {
-@@ -6731,7 +7286,8 @@
- 	    {
- 		/* Line up with the start of the matching paren line. */
- 	    }
--	    else if (ind_unclosed == 0 || (!ind_unclosed_noignore
-+	    else if ((ind_unclosed == 0 && is_if_for_while == 0)
-+		     || (!ind_unclosed_noignore
- 				    && *look == '(' && ignore_paren_col == 0))
- 	    {
- 		if (cur_amount != MAXCOL)
-@@ -6764,11 +7320,15 @@
- 		{
- 		    curwin->w_cursor.lnum = our_paren_pos.lnum;
- 		    curwin->w_cursor.col = col;
--		    if ((trypos = find_match_paren(ind_maxparen,
--						     ind_maxcomment)) != NULL)
-+		    if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
- 			amount += ind_unclosed2;
- 		    else
--			amount += ind_unclosed;
-+		    {
-+			if (is_if_for_while)
-+			    amount += ind_if_for_while;
-+			else
-+			    amount += ind_unclosed;
-+		    }
- 		}
- 		/*
- 		 * For a line starting with ')' use the minimum of the two
-@@ -6838,7 +7398,7 @@
- 	     *			ldfd) {
- 	     *		    }
- 	     */
--	    if ((ind_keep_case_label
-+	    if (ind_js || (ind_keep_case_label
- 			   && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
- 		amount = get_indent();
- 	    else
-@@ -6901,11 +7461,24 @@
- 	    if (start_brace == BRACE_IN_COL0)	    /* '{' is in column 0 */
- 	    {
- 		amount = ind_open_left_imag;
-+		lookfor_cpp_namespace = TRUE;
-+	    }
-+	    else if (start_brace == BRACE_AT_START &&
-+		    lookfor_cpp_namespace)	  /* '{' is at start */
-+	    {
-+
-+		lookfor_cpp_namespace = TRUE;
- 	    }
- 	    else
- 	    {
- 		if (start_brace == BRACE_AT_END)    /* '{' is at end of line */
-+		{
- 		    amount += ind_open_imag;
-+
-+		    l = skipwhite(ml_get_curline());
-+		    if (cin_is_cpp_namespace(l))
-+			amount += ind_cpp_namespace;
-+		}
- 		else
- 		{
- 		    /* Compensate for adding ind_open_extra later. */
-@@ -7014,7 +7587,8 @@
- 			 * (it's a variable declaration).
- 			 */
- 			if (start_brace != BRACE_IN_COL0
--				|| !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
-+				|| !cin_isfuncdecl(&l, curwin->w_cursor.lnum,
-+					     0, ind_maxparen, ind_maxcomment))
- 			{
- 			    /* if the line is terminated with another ','
- 			     * it is a continued variable initialization.
-@@ -7076,12 +7650,59 @@
- 			else
- 			    amount += ind_continuation;
- 		    }
--		    else if (lookfor != LOOKFOR_TERM
--					  && lookfor != LOOKFOR_CPP_BASECLASS)
-+		    else
- 		    {
--			amount = scope_amount;
--			if (theline[0] == '{')
--			    amount += ind_open_extra;
-+			if (lookfor != LOOKFOR_TERM
-+					  && lookfor != LOOKFOR_CPP_BASECLASS)
-+			{
-+			    amount = scope_amount;
-+			    if (theline[0] == '{')
-+			    {
-+				amount += ind_open_extra;
-+				added_to_amount = ind_open_extra;
-+			    }
-+			}
-+
-+			if (lookfor_cpp_namespace)
-+			{
-+			    /*
-+			     * Looking for C++ namespace, need to look further
-+			     * back.
-+			     */
-+			    if (curwin->w_cursor.lnum == ourscope)
-+				continue;
-+
-+			    if (curwin->w_cursor.lnum == 0
-+				    || curwin->w_cursor.lnum
-+					      < ourscope - FIND_NAMESPACE_LIM)
-+				break;
-+
-+			    l = ml_get_curline();
-+
-+			    /* If we're in a comment now, skip to the start of
-+			     * the comment. */
-+			    trypos = find_start_comment(ind_maxcomment);
-+			    if (trypos != NULL)
-+			    {
-+				curwin->w_cursor.lnum = trypos->lnum + 1;
-+				curwin->w_cursor.col = 0;
-+				continue;
-+			    }
-+
-+			    /* Skip preprocessor directives and blank lines. */
-+			    if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
-+				continue;
-+
-+			    /* Finally the actual check for "namespace". */
-+			    if (cin_is_cpp_namespace(l))
-+			    {
-+				amount += ind_cpp_namespace - added_to_amount;
-+				break;
-+			    }
-+
-+			    if (cin_nocode(l))
-+				continue;
-+			}
- 		    }
- 		    break;
- 		}
-@@ -7466,17 +8087,25 @@
- 
- 			/*
- 			 * When searching for a terminated line, don't use the
--			 * one between the "if" and the "else".
-+			 * one between the "if" and the matching "else".
- 			 * Need to use the scope of this "else".  XXX
- 			 * If whilelevel != 0 continue looking for a "do {".
- 			 */
--			if (cin_iselse(l)
--				&& whilelevel == 0
--				&& ((trypos = find_start_brace(ind_maxcomment))
--								    == NULL
-+			if (cin_iselse(l) && whilelevel == 0)
-+			{
-+			    /* If we're looking at "} else", let's make sure we
-+			     * find the opening brace of the enclosing scope,
-+			     * not the one from "if () {". */
-+			    if (*l == '}')
-+				curwin->w_cursor.col =
-+					  (colnr_T)(l - ml_get_curline()) + 1;
-+
-+			    if ((trypos = find_start_brace(ind_maxcomment))
-+								       == NULL
- 				    || find_match(LOOKFOR_IF, trypos->lnum,
--					ind_maxparen, ind_maxcomment) == FAIL))
--			    break;
-+					ind_maxparen, ind_maxcomment) == FAIL)
-+				break;
-+			}
- 		    }
- 
- 		    /*
-@@ -7757,8 +8386,8 @@
- 			 * If we're at the end of a block, skip to the start of
- 			 * that block.
- 			 */
--			curwin->w_cursor.col = 0;
--			if (*cin_skipcomment(l) == '}'
-+			l = ml_get_curline();
-+			if (find_last_paren(l, '{', '}')
- 				&& (trypos = find_start_brace(ind_maxcomment))
- 							    != NULL) /* XXX */
- 			{
-@@ -7820,7 +8449,9 @@
- 		&& vim_strchr(theline, '}') == NULL
- 		&& !cin_ends_in(theline, (char_u *)":", NULL)
- 		&& !cin_ends_in(theline, (char_u *)",", NULL)
--		&& cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
-+		&& cin_isfuncdecl(NULL, cur_curpos.lnum + 1,
-+				  cur_curpos.lnum + 1,
-+				  ind_maxparen, ind_maxcomment)
- 		&& !cin_isterminated(theline, FALSE, TRUE))
- 	{
- 	    amount = ind_func_type;
-@@ -7926,7 +8557,8 @@
- 		 * If the line looks like a function declaration, and we're
- 		 * not in a comment, put it the left margin.
- 		 */
--		if (cin_isfuncdecl(NULL, cur_curpos.lnum))  /* XXX */
-+		if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0,
-+				   ind_maxparen, ind_maxcomment))  /* XXX */
- 		    break;
- 		l = ml_get_curline();
- 
-@@ -7947,11 +8579,35 @@
- 		    break;
- 
- 		/*
-+		 * Find a line only has a semicolon that belongs to a previous
-+		 * line ending in '}', e.g. before an #endif.  Don't increase
-+		 * indent then.
-+		 */
-+		if (*(look = skipwhite(l)) == ';' && cin_nocode(look + 1))
-+		{
-+		    pos_T curpos_save = curwin->w_cursor;
-+
-+		    while (curwin->w_cursor.lnum > 1)
-+		    {
-+			look = ml_get(--curwin->w_cursor.lnum);
-+			if (!(cin_nocode(look) || cin_ispreproc_cont(
-+					      &look, &curwin->w_cursor.lnum)))
-+			    break;
-+		    }
-+		    if (curwin->w_cursor.lnum > 0
-+				    && cin_ends_in(look, (char_u *)"}", NULL))
-+			break;
-+
-+		    curwin->w_cursor = curpos_save;
-+		}
-+
-+		/*
- 		 * If the PREVIOUS line is a function declaration, the current
- 		 * line (and the ones that follow) needs to be indented as
- 		 * parameters.
- 		 */
--		if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
-+		if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0,
-+				   ind_maxparen, ind_maxcomment))
- 		{
- 		    amount = ind_param;
- 		    break;
-@@ -8856,11 +9512,15 @@
-     }
- 
-     /* compile the regexp into a program */
-+    if (flags & (EW_NOERROR | EW_NOTWILD))
-+	++emsg_silent;
-     regmatch.rm_ic = TRUE;		/* Always ignore case */
-     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
-+    if (flags & (EW_NOERROR | EW_NOTWILD))
-+	--emsg_silent;
-     vim_free(pat);
- 
--    if (regmatch.regprog == NULL)
-+    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
-     {
- 	vim_free(buf);
- 	return 0;
-@@ -8928,7 +9588,10 @@
- 	 * all entries found with "matchname". */
- 	if ((p[0] != '.' || starts_with_dot)
- 		&& (matchname == NULL
--		    || vim_regexec(&regmatch, p, (colnr_T)0)))
-+		  || (regmatch.regprog != NULL
-+				     && vim_regexec(&regmatch, p, (colnr_T)0))
-+		  || ((flags & EW_NOTWILD)
-+		     && fnamencmp(path + (s - buf), p, e - s) == 0)))
- 	{
- #ifdef WIN3264
- 	    STRCPY(s, p);
-@@ -9096,6 +9759,7 @@
- 
-     /*
-      * Find the first part in the path name that contains a wildcard.
-+     * When EW_ICASE is set every letter is considered to be a wildcard.
-      * Copy it into "buf", including the preceding characters.
-      */
-     p = buf;
-@@ -9115,7 +9779,12 @@
- 	    s = p + 1;
- 	}
- 	else if (path_end >= path + wildoff
--			 && vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
-+			 && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
-+#ifndef CASE_INSENSITIVE_FILENAME
-+			     || ((flags & EW_ICASE)
-+					       && isalpha(PTR2CHAR(path_end)))
-+#endif
-+			     ))
- 	    e = p;
- #ifdef FEAT_MBYTE
- 	if (has_mbyte)
-@@ -9132,7 +9801,7 @@
-     e = p;
-     *e = NUL;
- 
--    /* now we have one wildcard component between "s" and "e" */
-+    /* Now we have one wildcard component between "s" and "e". */
-     /* Remove backslashes between "wildoff" and the start of the wildcard
-      * component. */
-     for (p = buf + wildoff; p < s; ++p)
-@@ -9161,12 +9830,19 @@
- #ifdef CASE_INSENSITIVE_FILENAME
-     regmatch.rm_ic = TRUE;		/* Behave like Terminal.app */
- #else
--    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
-+    if (flags & EW_ICASE)
-+	regmatch.rm_ic = TRUE;		/* 'wildignorecase' set */
-+    else
-+	regmatch.rm_ic = FALSE;		/* Don't ignore case */
- #endif
-+    if (flags & (EW_NOERROR | EW_NOTWILD))
-+	++emsg_silent;
-     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
-+    if (flags & (EW_NOERROR | EW_NOTWILD))
-+	--emsg_silent;
-     vim_free(pat);
- 
--    if (regmatch.regprog == NULL)
-+    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
-     {
- 	vim_free(buf);
- 	return 0;
-@@ -9196,7 +9872,10 @@
- 	    if (dp == NULL)
- 		break;
- 	    if ((dp->d_name[0] != '.' || starts_with_dot)
--		    && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
-+		 && ((regmatch.regprog != NULL && vim_regexec(&regmatch,
-+					     (char_u *)dp->d_name, (colnr_T)0))
-+		   || ((flags & EW_NOTWILD)
-+		     && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
- 	    {
- 		STRCPY(s, dp->d_name);
- 		len = STRLEN(buf);
-@@ -9317,7 +9996,8 @@
- 	    continue;  /* it's different when it's shorter */
- 
- 	rival = other_paths[j] + other_path_len - candidate_len;
--	if (fnamecmp(maybe_unique, rival) == 0)
-+	if (fnamecmp(maybe_unique, rival) == 0
-+		&& (rival == other_paths[j] || vim_ispathsep(*(rival - 1))))
- 	    return FALSE;  /* match */
-     }
- 
-@@ -9642,7 +10322,7 @@
-     if (paths == NULL)
- 	return 0;
- 
--    files = globpath(paths, pattern, 0);
-+    files = globpath(paths, pattern, (flags & EW_ICASE) ? WILD_ICASE : 0);
-     vim_free(paths);
-     if (files == NULL)
- 	return 0;
-diff -Naur vim73.orig/src/misc2.c vim73/src/misc2.c
---- vim73.orig/src/misc2.c	2010-08-13 09:14:35.000000000 +0000
-+++ vim73/src/misc2.c	2012-11-01 20:35:48.000000000 +0000
-@@ -200,7 +200,6 @@
- 	}
- #endif
- 
--	idx = -1;
- 	ptr = line;
- 	while (col <= wcol && *ptr != NUL)
- 	{
-@@ -334,7 +333,7 @@
- #ifdef FEAT_MBYTE
-     /* prevent from moving onto a trail byte */
-     if (has_mbyte)
--	mb_adjustpos(pos);
-+	mb_adjustpos(curbuf, pos);
- #endif
- 
-     if (col < wcol)
-@@ -545,16 +544,26 @@
-     void
- check_cursor_col()
- {
-+    check_cursor_col_win(curwin);
-+}
-+
-+/*
-+ * Make sure win->w_cursor.col is valid.
-+ */
-+    void
-+check_cursor_col_win(win)
-+    win_T *win;
-+{
-     colnr_T len;
- #ifdef FEAT_VIRTUALEDIT
--    colnr_T oldcol = curwin->w_cursor.col;
--    colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
-+    colnr_T oldcol = win->w_cursor.col;
-+    colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
- #endif
- 
--    len = (colnr_T)STRLEN(ml_get_curline());
-+    len = (colnr_T)STRLEN(ml_get_buf(win->w_buffer, win->w_cursor.lnum, FALSE));
-     if (len == 0)
--	curwin->w_cursor.col = 0;
--    else if (curwin->w_cursor.col >= len)
-+	win->w_cursor.col = 0;
-+    else if (win->w_cursor.col >= len)
-     {
- 	/* Allow cursor past end-of-line when:
- 	 * - in Insert mode or restarting Insert mode
-@@ -568,33 +577,33 @@
- 		|| (ve_flags & VE_ONEMORE)
- #endif
- 		|| virtual_active())
--	    curwin->w_cursor.col = len;
-+	    win->w_cursor.col = len;
- 	else
- 	{
--	    curwin->w_cursor.col = len - 1;
-+	    win->w_cursor.col = len - 1;
- #ifdef FEAT_MBYTE
--	    /* prevent cursor from moving on the trail byte */
-+	    /* Move the cursor to the head byte. */
- 	    if (has_mbyte)
--		mb_adjust_cursor();
-+		mb_adjustpos(win->w_buffer, &win->w_cursor);
- #endif
- 	}
-     }
--    else if (curwin->w_cursor.col < 0)
--	curwin->w_cursor.col = 0;
-+    else if (win->w_cursor.col < 0)
-+	win->w_cursor.col = 0;
- 
- #ifdef FEAT_VIRTUALEDIT
-     /* If virtual editing is on, we can leave the cursor on the old position,
-      * only we must set it to virtual.  But don't do it when at the end of the
-      * line. */
-     if (oldcol == MAXCOL)
--	curwin->w_cursor.coladd = 0;
-+	win->w_cursor.coladd = 0;
-     else if (ve_flags == VE_ALL)
-     {
--	if (oldcoladd > curwin->w_cursor.col)
--	    curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
-+	if (oldcoladd > win->w_cursor.col)
-+	    win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
- 	else
- 	    /* avoid weird number when there is a miscalculation or overflow */
--	    curwin->w_cursor.coladd = 0;
-+	    win->w_cursor.coladd = 0;
-     }
- #endif
- }
-@@ -806,6 +815,7 @@
- #else
- # define KEEP_ROOM (2 * 8192L)
- #endif
-+#define KEEP_ROOM_KB (KEEP_ROOM / 1024L)
- 
- /*
-  * Note: if unsigned is 16 bits we can only allocate up to 64K with alloc().
-@@ -931,7 +941,7 @@
- 	    allocated = 0;
- # endif
- 	    /* 3. check for available memory: call mch_avail_mem() */
--	    if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
-+	    if (mch_avail_mem(TRUE) < KEEP_ROOM_KB && !releasing)
- 	    {
- 		free((char *)p);	/* System is low... no go! */
- 		p = NULL;
-@@ -1003,8 +1013,12 @@
-     {
- 	/* Don't hide this message */
- 	emsg_silent = 0;
--	EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
-+
-+	/* Must come first to avoid coming back here when printing the error
-+	 * message fails, e.g. when setting v:errmsg. */
- 	did_outofmem_msg = TRUE;
-+
-+	EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
-     }
- }
- 
-@@ -1096,6 +1110,9 @@
-     free_all_marks();
-     alist_clear(&global_alist);
-     free_homedir();
-+# if defined(FEAT_CMDL_COMPL)
-+    free_users();
-+# endif
-     free_search_patterns();
-     free_old_sub();
-     free_last_insert();
-@@ -1160,7 +1177,7 @@
-     for (buf = firstbuf; buf != NULL; )
-     {
- 	nextbuf = buf->b_next;
--	close_buffer(NULL, buf, DOBUF_WIPE);
-+	close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
- 	if (buf_valid(buf))
- 	    buf = nextbuf;	/* didn't work, try next one */
- 	else
-@@ -1223,7 +1240,7 @@
- #endif
- 
- /*
-- * copy a string into newly allocated memory
-+ * Copy "string" into newly allocated memory.
-  */
-     char_u *
- vim_strsave(string)
-@@ -1239,6 +1256,12 @@
-     return p;
- }
- 
-+/*
-+ * Copy up to "len" bytes of "string" into newly allocated memory and
-+ * terminate with a NUL.
-+ * The allocated memory always has size "len + 1", also when "string" is
-+ * shorter.
-+ */
-     char_u *
- vim_strnsave(string, len)
-     char_u	*string;
-@@ -1540,7 +1563,7 @@
- 	    if (enc_utf8)
- 	    {
- 		int	c, uc;
--		int	nl;
-+		int	newl;
- 		char_u	*s;
- 
- 		c = utf_ptr2char(p);
-@@ -1549,21 +1572,21 @@
- 		/* Reallocate string when byte count changes.  This is rare,
- 		 * thus it's OK to do another malloc()/free(). */
- 		l = utf_ptr2len(p);
--		nl = utf_char2len(uc);
--		if (nl != l)
-+		newl = utf_char2len(uc);
-+		if (newl != l)
- 		{
--		    s = alloc((unsigned)STRLEN(res) + 1 + nl - l);
-+		    s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
- 		    if (s == NULL)
- 			break;
- 		    mch_memmove(s, res, p - res);
--		    STRCPY(s + (p - res) + nl, p + l);
-+		    STRCPY(s + (p - res) + newl, p + l);
- 		    p = s + (p - res);
- 		    vim_free(res);
- 		    res = s;
- 		}
- 
- 		utf_char2bytes(uc, p);
--		p += nl;
-+		p += newl;
- 	    }
- 	    else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
- 		p += l;		/* skip multi-byte character */
-@@ -1642,6 +1665,28 @@
- }
- 
- /*
-+ * Like strcat(), but make sure the result fits in "tosize" bytes and is
-+ * always NUL terminated.
-+ */
-+    void
-+vim_strcat(to, from, tosize)
-+    char_u	*to;
-+    char_u	*from;
-+    size_t	tosize;
-+{
-+    size_t tolen = STRLEN(to);
-+    size_t fromlen = STRLEN(from);
-+
-+    if (tolen + fromlen + 1 > tosize)
-+    {
-+	mch_memmove(to + tolen, from, tosize - tolen - 1);
-+	to[tosize - 1] = NUL;
-+    }
-+    else
-+	STRCPY(to + tolen, from);
-+}
-+
-+/*
-  * Isolate one part of a string option where parts are separated with
-  * "sep_chars".
-  * The part is copied into "buf[maxlen]".
-@@ -2023,24 +2068,22 @@
-     garray_T	*gap;
-     int		n;
- {
--    size_t	len;
-+    size_t	old_len;
-+    size_t	new_len;
-     char_u	*pp;
- 
-     if (gap->ga_maxlen - gap->ga_len < n)
-     {
- 	if (n < gap->ga_growsize)
- 	    n = gap->ga_growsize;
--	len = gap->ga_itemsize * (gap->ga_len + n);
--	pp = alloc_clear((unsigned)len);
-+	new_len = gap->ga_itemsize * (gap->ga_len + n);
-+	pp = (gap->ga_data == NULL)
-+	      ? alloc((unsigned)new_len) : vim_realloc(gap->ga_data, new_len);
- 	if (pp == NULL)
- 	    return FAIL;
-+	old_len = gap->ga_itemsize * gap->ga_maxlen;
-+	vim_memset(pp + old_len, 0, new_len - old_len);
- 	gap->ga_maxlen = gap->ga_len + n;
--	if (gap->ga_data != NULL)
--	{
--	    mch_memmove(pp, gap->ga_data,
--				      (size_t)(gap->ga_itemsize * gap->ga_len));
--	    vim_free(gap->ga_data);
--	}
- 	gap->ga_data = pp;
-     }
-     return OK;
-@@ -2109,6 +2152,25 @@
-     }
- }
- 
-+#if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
-+/*
-+ * Append the text in "gap" below the cursor line and clear "gap".
-+ */
-+    void
-+append_ga_line(gap)
-+    garray_T	*gap;
-+{
-+    /* Remove trailing CR. */
-+    if (gap->ga_len > 0
-+	    && !curbuf->b_p_bin
-+	    && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
-+	--gap->ga_len;
-+    ga_append(gap, NUL);
-+    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
-+    gap->ga_len = 0;
-+}
-+#endif
-+
- /************************************************************************
-  * functions that use lookup tables for various things, generally to do with
-  * special key codes.
-@@ -2356,10 +2418,24 @@
-     {'<',		(char_u *)"lt"},
- 
-     {K_MOUSE,		(char_u *)"Mouse"},
-+#ifdef FEAT_MOUSE_NET
-     {K_NETTERM_MOUSE,	(char_u *)"NetMouse"},
-+#endif
-+#ifdef FEAT_MOUSE_DEC
-     {K_DEC_MOUSE,	(char_u *)"DecMouse"},
-+#endif
-+#ifdef FEAT_MOUSE_JSB
-     {K_JSBTERM_MOUSE,	(char_u *)"JsbMouse"},
-+#endif
-+#ifdef FEAT_MOUSE_PTERM
-     {K_PTERM_MOUSE,	(char_u *)"PtermMouse"},
-+#endif
-+#ifdef FEAT_MOUSE_URXVT
-+    {K_URXVT_MOUSE,	(char_u *)"UrxvtMouse"},
-+#endif
-+#ifdef FEAT_MOUSE_SGR
-+    {K_SGR_MOUSE,	(char_u *)"SgrMouse"},
-+#endif
-     {K_LEFTMOUSE,	(char_u *)"LeftMouse"},
-     {K_LEFTMOUSE_NM,	(char_u *)"LeftMouseNM"},
-     {K_LEFTDRAG,	(char_u *)"LeftDrag"},
-@@ -2698,6 +2774,7 @@
-     int		bit;
-     int		key;
-     unsigned long n;
-+    int		l;
- 
-     src = *srcp;
-     if (src[0] != '<')
-@@ -2710,26 +2787,32 @@
- 	if (*bp == '-')
- 	{
- 	    last_dash = bp;
--	    if (bp[1] != NUL && bp[2] == '>')
--		++bp;	/* anything accepted, like <C-?> */
-+	    if (bp[1] != NUL)
-+	    {
-+#ifdef FEAT_MBYTE
-+		if (has_mbyte)
-+		    l = mb_ptr2len(bp + 1);
-+		else
-+#endif
-+		    l = 1;
-+		if (bp[l + 1] == '>')
-+		    bp += l;	/* anything accepted, like <C-?> */
-+	    }
- 	}
- 	if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
- 	    bp += 3;	/* skip t_xx, xx may be '-' or '>' */
-+	else if (STRNICMP(bp, "char-", 5) == 0)
-+	{
-+	    vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
-+	    bp += l + 5;
-+	    break;
-+	}
-     }
- 
-     if (*bp == '>')	/* found matching '>' */
-     {
- 	end_of_name = bp + 1;
- 
--	if (STRNICMP(src + 1, "char-", 5) == 0 && VIM_ISDIGIT(src[6]))
--	{
--	    /* <Char-123> or <Char-033> or <Char-0x33> */
--	    vim_str2nr(src + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
--	    *modp = 0;
--	    *srcp = end_of_name;
--	    return (int)n;
--	}
--
- 	/* Which modifiers are given? */
- 	modifiers = 0x0;
- 	for (bp = src + 1; bp < last_dash; bp++)
-@@ -2748,16 +2831,32 @@
- 	 */
- 	if (bp >= last_dash)
- 	{
--	    /*
--	     * Modifier with single letter, or special key name.
--	     */
--	    if (modifiers != 0 && last_dash[2] == '>')
--		key = last_dash[1];
-+	    if (STRNICMP(last_dash + 1, "char-", 5) == 0
-+						 && VIM_ISDIGIT(last_dash[6]))
-+	    {
-+		/* <Char-123> or <Char-033> or <Char-0x33> */
-+		vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
-+		key = (int)n;
-+	    }
- 	    else
- 	    {
--		key = get_special_key_code(last_dash + 1);
--		if (!keep_x_key)
--		    key = handle_x_keys(key);
-+		/*
-+		 * Modifier with single letter, or special key name.
-+		 */
-+#ifdef FEAT_MBYTE
-+		if (has_mbyte)
-+		    l = mb_ptr2len(last_dash + 1);
-+		else
-+#endif
-+		    l = 1;
-+		if (modifiers != 0 && last_dash[l + 1] == '>')
-+		    key = PTR2CHAR(last_dash + 1);
-+		else
-+		{
-+		    key = get_special_key_code(last_dash + 1);
-+		    if (!keep_x_key)
-+			key = handle_x_keys(key);
-+		}
- 	    }
- 
- 	    /*
-@@ -3131,17 +3230,31 @@
- 	    retval = mch_call_shell(cmd, opt);
- 	else
- 	{
--	    ncmd = alloc((unsigned)(STRLEN(cmd) + STRLEN(p_sxq) * 2 + 1));
-+	    char_u *ecmd = cmd;
-+
-+	    if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0)
-+	    {
-+		ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
-+		if (ecmd == NULL)
-+		    ecmd = cmd;
-+	    }
-+	    ncmd = alloc((unsigned)(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1));
- 	    if (ncmd != NULL)
- 	    {
- 		STRCPY(ncmd, p_sxq);
--		STRCAT(ncmd, cmd);
--		STRCAT(ncmd, p_sxq);
-+		STRCAT(ncmd, ecmd);
-+		/* When 'shellxquote' is ( append ).
-+		 * When 'shellxquote' is "( append )". */
-+		STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
-+			   : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
-+			   : p_sxq);
- 		retval = mch_call_shell(ncmd, opt);
- 		vim_free(ncmd);
- 	    }
- 	    else
- 		retval = -1;
-+	    if (ecmd != cmd)
-+		vim_free(ecmd);
- 	}
- #ifdef FEAT_GUI
- 	--hold_gui_events;
-@@ -3191,7 +3304,7 @@
- #if defined(FEAT_MBYTE) || defined(PROTO)
- /*
-  * Return TRUE if "p" points to just after a path separator.
-- * Take care of multi-byte characters.
-+ * Takes care of multi-byte characters.
-  * "b" must point to the start of the file name
-  */
-     int
-@@ -3199,7 +3312,7 @@
-     char_u	*b;
-     char_u	*p;
- {
--    return vim_ispathsep(p[-1])
-+    return p > b && vim_ispathsep(p[-1])
- 			     && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
- }
- #endif
-@@ -4210,6 +4323,8 @@
- static int ff_path_in_stoplist __ARGS((char_u *, int, char_u **));
- #endif
- 
-+static char_u e_pathtoolong[] = N_("E854: path too long for completion");
-+
- #if 0
- /*
-  * if someone likes findfirst/findnext, here are the functions
-@@ -4506,6 +4621,11 @@
- 	len = 0;
- 	while (*wc_part != NUL)
- 	{
-+	    if (len + 5 >= MAXPATHL)
-+	    {
-+		EMSG(_(e_pathtoolong));
-+		break;
-+	    }
- 	    if (STRNCMP(wc_part, "**", 2) == 0)
- 	    {
- 		ff_expand_buffer[len++] = *wc_part++;
-@@ -4551,6 +4671,12 @@
-     }
- 
-     /* create an absolute path */
-+    if (STRLEN(search_ctx->ffsc_start_dir)
-+			  + STRLEN(search_ctx->ffsc_fix_path) + 3 >= MAXPATHL)
-+    {
-+	EMSG(_(e_pathtoolong));
-+	goto error_return;
-+    }
-     STRCPY(ff_expand_buffer, search_ctx->ffsc_start_dir);
-     add_pathsep(ff_expand_buffer);
-     STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
-@@ -4597,9 +4723,8 @@
-     {
- 	if (r_ptr[0] == '\\' && r_ptr[1] == ';')
- 	{
--	    /* overwrite the escape char,
--	     * use STRLEN(r_ptr) to move the trailing '\0'
--	     */
-+	    /* Overwrite the escape char,
-+	     * use STRLEN(r_ptr) to move the trailing '\0'. */
- 	    STRMOVE(r_ptr, r_ptr + 1);
- 	    r_ptr++;
- 	}
-@@ -4858,10 +4983,13 @@
- 			stackp->ffs_filearray_size = 0;
- 		}
- 		else
-+		    /* Add EW_NOTWILD because the expanded path may contain
-+		     * wildcard characters that are to be taken literally.
-+		     * This is a bit of a hack. */
- 		    expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
- 			    &stackp->ffs_filearray_size,
- 			    &stackp->ffs_filearray,
--			    EW_DIR|EW_ADDSLASH|EW_SILENT);
-+			    EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD);
- 
- 		stackp->ffs_filearray_cur = 0;
- 		stackp->ffs_stage = 0;
-@@ -6443,3 +6571,23 @@
- #endif
- 
- #endif
-+
-+#if (defined(FEAT_MBYTE) && defined(FEAT_QUICKFIX)) \
-+	|| defined(FEAT_SPELL) || defined(PROTO)
-+/*
-+ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
-+ * When "s" is NULL FALSE is returned.
-+ */
-+    int
-+has_non_ascii(s)
-+    char_u	*s;
-+{
-+    char_u	*p;
-+
-+    if (s != NULL)
-+	for (p = s; *p != NUL; ++p)
-+	    if (*p >= 128)
-+		return TRUE;
-+    return FALSE;
-+}
-+#endif
-diff -Naur vim73.orig/src/move.c vim73/src/move.c
---- vim73.orig/src/move.c	2010-08-08 13:12:31.000000000 +0000
-+++ vim73/src/move.c	2012-11-01 20:35:45.000000000 +0000
-@@ -362,7 +362,7 @@
- #endif
- 	    )
-     {
--	dollar_vcol = 0;
-+	dollar_vcol = -1;
- 	if (curwin->w_skipcol != 0)
- 	{
- 	    curwin->w_skipcol = 0;
-@@ -926,8 +926,8 @@
-  * Also updates curwin->w_leftcol.
-  */
-     void
--curs_columns(scroll)
--    int		scroll;		/* when TRUE, may scroll horizontally */
-+curs_columns(may_scroll)
-+    int		may_scroll;	/* when TRUE, may scroll horizontally */
- {
-     int		diff;
-     int		extra;		/* offset for first screen line */
-@@ -966,7 +966,7 @@
- 
-     /* remove '$' from change command when cursor moves onto it */
-     if (startcol > dollar_vcol)
--	dollar_vcol = 0;
-+	dollar_vcol = -1;
- 
-     extra = curwin_col_off();
-     curwin->w_wcol = curwin->w_virtcol + extra;
-@@ -1014,7 +1014,7 @@
-     /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
-      * is not folded.
-      * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
--    else if (scroll
-+    else if (may_scroll
- #ifdef FEAT_FOLDING
- 	    && !curwin->w_cline_folded
- #endif
-@@ -2843,9 +2843,15 @@
- do_check_cursorbind()
- {
-     linenr_T	line = curwin->w_cursor.lnum;
--    colnr_T	col =  curwin->w_cursor.col;
-+    colnr_T	col = curwin->w_cursor.col;
-+# ifdef FEAT_VIRTUALEDIT
-+    colnr_T	coladd = curwin->w_cursor.coladd;
-+# endif
-+    colnr_T	curswant = curwin->w_curswant;
-+    int		set_curswant = curwin->w_set_curswant;
-     win_T	*old_curwin = curwin;
-     buf_T	*old_curbuf = curbuf;
-+    int		restart_edit_save;
- # ifdef FEAT_VISUAL
-     int		old_VIsual_select = VIsual_select;
-     int		old_VIsual_active = VIsual_active;
-@@ -2874,17 +2880,28 @@
- # endif
- 		curwin->w_cursor.lnum = line;
- 	    curwin->w_cursor.col = col;
-+# ifdef FEAT_VIRTUALEDIT
-+	    curwin->w_cursor.coladd = coladd;
-+# endif
-+	    curwin->w_curswant = curswant;
-+	    curwin->w_set_curswant = set_curswant;
- 
--	    /* Make sure the cursor is in a valid position. */
-+	    /* Make sure the cursor is in a valid position.  Temporarily set
-+	     * "restart_edit" to allow the cursor to be beyond the EOL. */
-+	    restart_edit_save = restart_edit;
-+	    restart_edit = TRUE;
- 	    check_cursor();
-+	    restart_edit = restart_edit_save;
- # ifdef FEAT_MBYTE
- 	    /* Correct cursor for multi-byte character. */
- 	    if (has_mbyte)
- 		mb_adjust_cursor();
- # endif
--
- 	    redraw_later(VALID);
--	    update_topline();
-+
-+	    /* Only scroll when 'scrollbind' hasn't done this. */
-+	    if (!curwin->w_p_scb)
-+		update_topline();
- # ifdef FEAT_WINDOWS
- 	    curwin->w_redr_status = TRUE;
- # endif
-diff -Naur vim73.orig/src/msvc2010.bat vim73/src/msvc2010.bat
---- vim73.orig/src/msvc2010.bat	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/msvc2010.bat	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,7 @@
-+@echo off
-+rem To be used on MS-Windows for Visual C++ 2010 Express Edition
-+rem   aka Microsoft Visual Studio 10.0.
-+rem See INSTALLpc.txt for information.
-+@echo on
-+
-+call "%VS100COMNTOOLS%%vsvars32.bat"
-diff -Naur vim73.orig/src/netbeans.c vim73/src/netbeans.c
---- vim73.orig/src/netbeans.c	2010-08-09 20:48:09.000000000 +0000
-+++ vim73/src/netbeans.c	2012-11-01 20:35:46.000000000 +0000
-@@ -14,12 +14,15 @@
-  * which are *between* characters, whereas vim uses line number
-  * and column number which are *on* characters.
-  * See ":help netbeans-protocol" for explanation.
-+ *
-+ * The Netbeans messages are received and queued in the gui event loop, or in
-+ * the select loop when Vim runs in a terminal. These messages are processed
-+ * by netbeans_parse_messages() which is invoked in the idle loop when Vim is
-+ * waiting for user input. The function netbeans_parse_messages() is also
-+ * called from the ":sleep" command, to allow the execution of test cases that
-+ * may not invoke the idle loop.
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for mch_open(), must be before vim.h */
--#endif
--
- #include "vim.h"
- 
- #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
-@@ -87,7 +90,7 @@
- static void nb_init_graphics __ARGS((void));
- static void coloncmd __ARGS((char *cmd, ...));
- static void nb_set_curbuf __ARGS((buf_T *buf));
--#ifdef FEAT_GUI_MOTIF
-+#ifdef FEAT_GUI_X11
- static void messageFromNetbeans __ARGS((XtPointer, int *, XtInputId *));
- #endif
- #ifdef FEAT_GUI_GTK
-@@ -112,7 +115,7 @@
- static NBSOCK nbsock = -1;		/* socket fd for Netbeans connection */
- #define NETBEANS_OPEN (nbsock != -1)
- 
--#ifdef FEAT_GUI_MOTIF
-+#ifdef FEAT_GUI_X11
- static XtInputId inputHandler = (XtInputId)NULL;  /* Cookie for input */
- #endif
- #ifdef FEAT_GUI_GTK
-@@ -135,15 +138,13 @@
- static int needupdate = 0;
- static int inAtomic = 0;
- 
-+/*
-+ * Close the socket and remove the input handlers.
-+ */
-     static void
--netbeans_close(void)
-+nb_close_socket(void)
- {
--    if (!NETBEANS_OPEN)
--	return;
--
--    netbeans_send_disconnect();
--
--#ifdef FEAT_GUI_MOTIF
-+#ifdef FEAT_GUI_X11
-     if (inputHandler != (XtInputId)NULL)
-     {
- 	XtRemoveInput(inputHandler);
-@@ -167,13 +168,27 @@
- # endif
- #endif
- 
-+    sock_close(nbsock);
-+    nbsock = -1;
-+}
-+
-+/*
-+ * Close the connection and cleanup.
-+ * May be called when nb_close_socket() was called earlier.
-+ */
-+    static void
-+netbeans_close(void)
-+{
-+    if (NETBEANS_OPEN)
-+    {
-+	netbeans_send_disconnect();
-+	nb_close_socket();
-+    }
-+
- #ifdef FEAT_BEVAL
-     bevalServers &= ~BEVAL_NETBEANS;
- #endif
- 
--    sock_close(nbsock);
--    nbsock = -1;
--
-     needupdate = 0;
-     inAtomic = 0;
-     nb_free();
-@@ -183,6 +198,7 @@
-     changed_window_setting();
-     update_screen(CLEAR);
-     setcursor();
-+    cursor_on();
-     out_flush();
- #ifdef FEAT_GUI
-     if (gui.in_use)
-@@ -311,14 +327,9 @@
-     server.sin_port = htons(port);
-     if ((host = gethostbyname(hostname)) == NULL)
-     {
--	if (mch_access(hostname, R_OK) >= 0)
--	{
--	    /* DEBUG: input file */
--	    sd = mch_open(hostname, O_RDONLY, 0);
--	    goto theend;
--	}
- 	nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
- 	PERROR("gethostbyname() in netbeans_connect()");
-+	sock_close(sd);
- 	goto theend;
-     }
-     memcpy((char *)&server.sin_addr, host->h_addr, host->h_length);
-@@ -368,15 +379,12 @@
- 							 || (errno == EINTR)))
- 		{
- 		    nbdebug(("retrying...\n"));
--		    sleep(5);
--		    if (!doabort)
-+		    mch_delay(3000L, TRUE);
-+		    ui_breakcheck();
-+		    if (got_int)
- 		    {
--			ui_breakcheck();
--			if (got_int)
--			{
--			    errno = EINTR;
--			    break;
--			}
-+			errno = EINTR;
-+			break;
- 		    }
- 		    if (connect(sd, (struct sockaddr *)&server,
- 							 sizeof(server)) == 0)
-@@ -391,6 +399,7 @@
- 		    /* Get here when the server can't be found. */
- 		    nbdebug(("Cannot connect to Netbeans #2\n"));
- 		    PERROR(_("Cannot connect to Netbeans #2"));
-+		    sock_close(sd);
- 		    if (doabort)
- 			getout(1);
- 		    goto theend;
-@@ -401,6 +410,7 @@
- 	{
- 	    nbdebug(("Cannot connect to Netbeans\n"));
- 	    PERROR(_("Cannot connect to Netbeans"));
-+	    sock_close(sd);
- 	    if (doabort)
- 		getout(1);
- 	    goto theend;
-@@ -433,7 +443,7 @@
-     FILE *fp;
-     char_u buf[BUFSIZ];
-     char_u *lp;
--    char_u *nl;
-+    char_u *nlp;
- #ifdef UNIX
-     struct stat	st;
- 
-@@ -462,8 +472,8 @@
-     /* Read the file. There should be one of each parameter */
-     while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
-     {
--	if ((nl = vim_strchr(lp, '\n')) != NULL)
--	    *nl = 0;	    /* strip off the trailing newline */
-+	if ((nlp = vim_strchr(lp, '\n')) != NULL)
-+	    *nlp = 0;	    /* strip off the trailing newline */
- 
- 	if (STRNCMP(lp, "host=", 5) == 0)
- 	{
-@@ -631,9 +641,7 @@
- {
-     char_u	*p;
-     queue_T	*node;
--
--    if (!NETBEANS_OPEN)
--	return;
-+    int		own_node;
- 
-     while (head.next != NULL && head.next != &head)
-     {
-@@ -672,20 +680,25 @@
- 	    *p++ = NUL;
- 	    if (*p == NUL)
- 	    {
-+		own_node = TRUE;
- 		head.next = node->next;
- 		node->next->prev = node->prev;
- 	    }
-+	    else
-+		own_node = FALSE;
- 
- 	    /* now, parse and execute the commands */
- 	    nb_parse_cmd(node->buffer);
- 
--	    if (*p == NUL)
-+	    if (own_node)
- 	    {
- 		/* buffer finished, dispose of the node and buffer */
- 		vim_free(node->buffer);
- 		vim_free(node);
- 	    }
--	    else
-+	    /* Check that "head" wasn't changed under our fingers, e.g. when a
-+	     * DETACH command was handled. */
-+	    else if (head.next == node)
- 	    {
- 		/* more follows, move to the start */
- 		STRMOVE(node->buffer, p);
-@@ -700,7 +713,7 @@
- /*
-  * Read a command from netbeans.
-  */
--#ifdef FEAT_GUI_MOTIF
-+#ifdef FEAT_GUI_X11
-     static void
- messageFromNetbeans(XtPointer clientData UNUSED,
- 		    int *unused1 UNUSED,
-@@ -720,15 +733,14 @@
- }
- #endif
- 
-+#define DETACH_MSG "DETACH\n"
-+
-     void
- netbeans_read()
- {
-     static char_u	*buf = NULL;
-     int			len = 0;
-     int			readlen = 0;
--#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
--    static int		level = 0;
--#endif
- #ifdef HAVE_SELECT
-     struct timeval	tval;
-     fd_set		rfds;
-@@ -744,13 +756,6 @@
- 	return;
-     }
- 
--#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
--    /* recursion guard; this will be called from the X event loop at unknown
--     * moments */
--    if (NB_HAS_GUI)
--	++level;
--#endif
--
-     /* Allocate a buffer to read into. */
-     if (buf == NULL)
-     {
-@@ -790,34 +795,32 @@
- 	    break;	/* did read everything that's available */
-     }
- 
-+    /* Reading a socket disconnection (readlen == 0), or a socket error. */
-     if (readlen <= 0)
-     {
--	/* read error or didn't read anything */
--	netbeans_close();
--	nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
-+	/* Queue a "DETACH" netbeans message in the command queue in order to
-+	 * terminate the netbeans session later. Do not end the session here
-+	 * directly as we may be running in the context of a call to
-+	 * netbeans_parse_messages():
-+	 *	netbeans_parse_messages
-+	 *	    -> autocmd triggered while processing the netbeans cmd
-+	 *		-> ui_breakcheck
-+	 *		    -> gui event loop or select loop
-+	 *			-> netbeans_read()
-+	 */
-+	save((char_u *)DETACH_MSG, (int)strlen(DETACH_MSG));
-+	nb_close_socket();
-+
- 	if (len < 0)
- 	{
- 	    nbdebug(("read from Netbeans socket\n"));
- 	    PERROR(_("read from Netbeans socket"));
- 	}
--	return; /* don't try to parse it */
-     }
- 
--#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_W32)
--    /* Let the main loop handle messages. */
--    if (NB_HAS_GUI)
--    {
--# ifdef FEAT_GUI_GTK
--	if (gtk_main_level() > 0)
--	    gtk_main_quit();
--# else
--	/* Parse the messages now, but avoid recursion. */
--	if (level == 1)
--	    netbeans_parse_messages();
--
--	--level;
--# endif
--    }
-+#if defined(NB_HAS_GUI) && defined(FEAT_GUI_GTK)
-+    if (NB_HAS_GUI && gtk_main_level() > 0)
-+	gtk_main_quit();
- #endif
- }
- 
-@@ -955,7 +958,6 @@
-     keyQ_T *key_node = keyHead.next;
-     queue_T *cmd_node = head.next;
-     nbbuf_T buf;
--    buf_T *bufp;
-     int i;
- 
-     /* free the netbeans buffer list */
-@@ -964,7 +966,7 @@
- 	buf = buf_list[i];
- 	vim_free(buf.displayname);
- 	vim_free(buf.signmap);
--	if ((bufp=buf.bufp) != NULL)
-+	if (buf.bufp != NULL)
- 	{
- 	    buf.bufp->b_netbeans_file = FALSE;
- 	    buf.bufp->b_was_netbeans_file = FALSE;
-@@ -1186,6 +1188,10 @@
- 
-     nbdebug(("REP %d: <none>\n", cmdno));
- 
-+    /* Avoid printing an annoying error message. */
-+    if (!NETBEANS_OPEN)
-+	return;
-+
-     sprintf(reply, "%d\n", cmdno);
-     nb_send(reply, "nb_reply_nil");
- }
-@@ -1389,7 +1395,7 @@
-     int		cmdno,
-     char_u	*args)	    /* points to space before arguments or NUL */
- {
--    int		doupdate = 0;
-+    int		do_update = 0;
-     long	off = 0;
-     nbbuf_T	*buf = nb_get_buf(bufno);
-     static int	skip = 0;
-@@ -1594,7 +1600,7 @@
- 							last.lnum, last.col));
- 		del_from_lnum = first.lnum;
- 		del_to_lnum = last.lnum;
--		doupdate = 1;
-+		do_update = 1;
- 
- 		/* Get the position of the first byte after the deleted
- 		 * section.  "next" is NULL when deleting to the end of the
-@@ -1734,7 +1740,7 @@
- 		int	added = 0;
- 		int	oldFire = netbeansFireChanges;
- 		int	old_b_changed;
--		char_u	*nl;
-+		char_u	*nlp;
- 		linenr_T lnum;
- 		linenr_T lnum_start;
- 		pos_T	*pos;
-@@ -1771,11 +1777,11 @@
- 		lnum = lnum_start;
- 
- 		/* Loop over the "\n" separated lines of the argument. */
--		doupdate = 1;
-+		do_update = 1;
- 		while (*args != NUL)
- 		{
--		    nl = vim_strchr(args, '\n');
--		    if (nl == NULL)
-+		    nlp = vim_strchr(args, '\n');
-+		    if (nlp == NULL)
- 		    {
- 			/* Incomplete line, probably truncated.  Next "insert"
- 			 * command should append to this one. */
-@@ -1783,13 +1789,13 @@
- 		    }
- 		    else
- 		    {
--			len = nl - args;
-+			len = nlp - args;
- 
- 			/*
- 			 * We need to detect EOL style, because the commands
- 			 * use a character offset.
- 			 */
--			if (nl > args && nl[-1] == '\r')
-+			if (nlp > args && nlp[-1] == '\r')
- 			{
- 			    ff_detected = EOL_DOS;
- 			    --len;
-@@ -1806,13 +1812,15 @@
- 			char_u *oldline = ml_get(lnum);
- 			char_u *newline;
- 
--			/* Insert halfway a line.  For simplicity we assume we
--			 * need to append to the line. */
--			newline = alloc_check((unsigned)(STRLEN(oldline) + len + 1));
-+			/* Insert halfway a line. */
-+			newline = alloc_check(
-+				       (unsigned)(STRLEN(oldline) + len + 1));
- 			if (newline != NULL)
- 			{
--			    STRCPY(newline, oldline);
-+			    mch_memmove(newline, oldline, (size_t)pos->col);
-+			    newline[pos->col] = NUL;
- 			    STRCAT(newline, args);
-+			    STRCAT(newline, oldline + pos->col);
- 			    ml_replace(lnum, newline, FALSE);
- 			}
- 		    }
-@@ -1820,14 +1828,15 @@
- 		    {
- 			/* Append a new line.  Not that we always do this,
- 			 * also when the text doesn't end in a "\n". */
--			ml_append((linenr_T)(lnum - 1), args, (colnr_T)(len + 1), FALSE);
-+			ml_append((linenr_T)(lnum - 1), args,
-+						   (colnr_T)(len + 1), FALSE);
- 			++added;
- 		    }
- 
--		    if (nl == NULL)
-+		    if (nlp == NULL)
- 			break;
- 		    ++lnum;
--		    args = nl + 1;
-+		    args = nlp + 1;
- 		}
- 
- 		/* Adjust the marks below the inserted lines. */
-@@ -1986,7 +1995,7 @@
- 		EMSG("E640: invalid buffer identifier in initDone");
- 		return FAIL;
- 	    }
--	    doupdate = 1;
-+	    do_update = 1;
- 	    buf->initDone = TRUE;
- 	    nb_set_curbuf(buf->bufp);
- #if defined(FEAT_AUTOCMD)
-@@ -2075,7 +2084,7 @@
- 					     ECMD_HIDE + ECMD_OLDBUF, curwin);
- 	    buf->bufp = curbuf;
- 	    buf->initDone = TRUE;
--	    doupdate = 1;
-+	    do_update = 1;
- #if defined(FEAT_TITLE)
- 	    maketitle();
- #endif
-@@ -2103,7 +2112,7 @@
- 		exarg.forceit = FALSE;
- 		dosetvisible = TRUE;
- 		goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
--		doupdate = 1;
-+		do_update = 1;
- 		dosetvisible = FALSE;
- 
- #ifdef FEAT_GUI
-@@ -2250,6 +2259,7 @@
- 	    update_topline();		/* scroll to show the line */
- 	    update_screen(VALID);
- 	    setcursor();
-+	    cursor_on();
- 	    out_flush();
- #ifdef FEAT_GUI
- 	    if (gui.in_use)
-@@ -2302,7 +2312,7 @@
- 						     buf->bufp->b_fnum, TRUE);
- 	    buf->bufp = NULL;
- 	    buf->initDone = FALSE;
--	    doupdate = 1;
-+	    do_update = 1;
- /* =====================================================================*/
- 	}
- 	else if (streq((char *)cmd, "setStyle")) /* obsolete... */
-@@ -2393,7 +2403,7 @@
- 		return FAIL;
- 	    }
- 
--	    doupdate = 1;
-+	    do_update = 1;
- 
- 	    cp = (char *)args;
- 	    serNum = strtol(cp, &cp, 10);
-@@ -2441,7 +2451,7 @@
- 		nbdebug(("    invalid buffer identifier in removeAnno\n"));
- 		return FAIL;
- 	    }
--	    doupdate = 1;
-+	    do_update = 1;
- 	    cp = (char *)args;
- 	    serNum = strtol(cp, &cp, 10);
- 	    args = (char_u *)cp;
-@@ -2486,7 +2496,7 @@
- 	    len = strtol(cp, NULL, 10);
- 	    args = (char_u *)cp;
- 	    pos = off2pos(buf->bufp, off);
--	    doupdate = 1;
-+	    do_update = 1;
- 	    if (!pos)
- 		nbdebug(("    no such start pos in %s, %ld\n", cmd, off));
- 	    else
-@@ -2548,7 +2558,7 @@
- 	    inAtomic = 0;
- 	    if (needupdate)
- 	    {
--		doupdate = 1;
-+		do_update = 1;
- 		needupdate = 0;
- 	    }
- /* =====================================================================*/
-@@ -2629,21 +2639,22 @@
- 	 * Unrecognized command is ignored.
- 	 */
-     }
--    if (inAtomic && doupdate)
-+    if (inAtomic && do_update)
-     {
- 	needupdate = 1;
--	doupdate = 0;
-+	do_update = 0;
-     }
- 
-     /*
-      * Is this needed? I moved the netbeans_Xt_connect() later during startup
-      * and it may no longer be necessary. If its not needed then needupdate
--     * and doupdate can also be removed.
-+     * and do_update can also be removed.
-      */
--    if (buf != NULL && buf->initDone && doupdate)
-+    if (buf != NULL && buf->initDone && do_update)
-     {
- 	update_screen(NOT_VALID);
- 	setcursor();
-+	cursor_on();
- 	out_flush();
- #ifdef FEAT_GUI
- 	if (gui.in_use)
-@@ -2773,6 +2784,16 @@
- ex_nbstart(eap)
-     exarg_T	*eap;
- {
-+#ifdef FEAT_GUI
-+# if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
-+		&& !defined(FEAT_GUI_W32)
-+    if (gui.in_use)
-+    {
-+	EMSG(_("E838: netbeans is not supported with this GUI"));
-+	return;
-+    }
-+# endif
-+#endif
-     netbeans_open((char *)eap->arg, FALSE);
- }
- 
-@@ -2880,7 +2901,7 @@
-     char_u	*text;
-     linenr_T	lnum;
-     int		col;
--    char	buf[MAXPATHL * 2 + 25];
-+    char	*buf;
-     char_u	*p;
- 
-     /* Don't do anything when 'ballooneval' is off, messages scrolled the
-@@ -2894,15 +2915,20 @@
- 	 * length. */
- 	if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
- 	{
--	    p = nb_quote(text);
--	    if (p != NULL)
-+	    buf = (char *)alloc(MAXPATHL * 2 + 25);
-+	    if (buf != NULL)
- 	    {
--		vim_snprintf(buf, sizeof(buf),
--				       "0:balloonText=%d \"%s\"\n", r_cmdno, p);
--		vim_free(p);
-+		p = nb_quote(text);
-+		if (p != NULL)
-+		{
-+		    vim_snprintf(buf, MAXPATHL * 2 + 25,
-+				     "0:balloonText=%d \"%s\"\n", r_cmdno, p);
-+		    vim_free(p);
-+		}
-+		nbdebug(("EVT: %s", buf));
-+		nb_send(buf, "netbeans_beval_cb");
-+		vim_free(buf);
- 	    }
--	    nbdebug(("EVT: %s", buf));
--	    nb_send(buf, "netbeans_beval_cb");
- 	}
- 	vim_free(text);
-     }
-@@ -2937,7 +2963,7 @@
-     if (!NB_HAS_GUI || !NETBEANS_OPEN)
- 	return;
- 
--# ifdef FEAT_GUI_MOTIF
-+# ifdef FEAT_GUI_X11
-     /* tell notifier we are interested in being called
-      * when there is input on the editor connection socket
-      */
-@@ -3000,6 +3026,7 @@
-     changed_window_setting();
-     update_screen(CLEAR);
-     setcursor();
-+    cursor_on();
-     out_flush();
- #ifdef FEAT_GUI
-     if (gui.in_use)
-@@ -3027,7 +3054,7 @@
-     }
- }
- 
--#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_W32) || defined(PROTO)
-+#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_W32) || defined(PROTO)
- /*
-  * Tell netbeans that the window was moved or resized.
-  */
-@@ -3458,7 +3485,7 @@
-     return FALSE;
- }
- 
--#if defined(FEAT_GUI_MOTIF) || defined(PROTO)
-+#if defined(FEAT_GUI_X11) || defined(PROTO)
- /*
-  * We have multiple signs to draw at the same location. Draw the
-  * multi-sign indicator instead. This is the Motif version.
-@@ -3487,7 +3514,7 @@
-     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+3, y++);
-     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y);
- }
--#endif /* FEAT_GUI_MOTIF */
-+#endif /* FEAT_GUI_X11 */
- 
- #if defined(FEAT_GUI_GTK) && !defined(PROTO)
- /*
-@@ -3902,14 +3929,12 @@
-     }
-     else
-     {
--	char_u ebuf[BUFSIZ];
-+	char_u msgbuf[IOSIZE];
- 
--	STRCPY(ebuf, (char_u *)_("E505: "));
--	STRCAT(ebuf, IObuff);
--	STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
--	STRCPY(IObuff, ebuf);
--	nbdebug(("    %s\n", ebuf ));
--	emsg(IObuff);
-+	vim_snprintf((char *)msgbuf, IOSIZE,
-+		_("E505: %s is read-only (add ! to override)"), IObuff);
-+	nbdebug(("    %s\n", msgbuf));
-+	emsg(msgbuf);
-     }
- }
- 
-diff -Naur vim73.orig/src/normal.c vim73/src/normal.c
---- vim73.orig/src/normal.c	2010-07-31 13:25:19.000000000 +0000
-+++ vim73/src/normal.c	2012-11-01 20:35:48.000000000 +0000
-@@ -20,15 +20,18 @@
-  */
- static int	resel_VIsual_mode = NUL;	/* 'v', 'V', or Ctrl-V */
- static linenr_T	resel_VIsual_line_count;	/* number of lines */
--static colnr_T	resel_VIsual_col;		/* nr of cols or end col */
-+static colnr_T	resel_VIsual_vcol;		/* nr of cols or end col */
- 
- static int	restart_VIsual_select = 0;
- #endif
- 
-+#ifdef FEAT_EVAL
-+static void	set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
-+#endif
- static int
--# ifdef __BORLANDC__
--_RTLENTRYF
--# endif
-+#ifdef __BORLANDC__
-+    _RTLENTRYF
-+#endif
- 		nv_compare __ARGS((const void *s1, const void *s2));
- static int	find_command __ARGS((int cmdchar));
- static void	op_colon __ARGS((oparg_T *oap));
-@@ -648,6 +651,14 @@
-     dont_scroll = FALSE;	/* allow scrolling here */
- #endif
- 
-+#ifdef FEAT_EVAL
-+    /* Set v:count here, when called from main() and not a stuffed
-+     * command, so that v:count can be used in an expression mapping
-+     * when there is no count. */
-+    if (toplevel && stuff_empty())
-+	set_vcount_ca(&ca, &set_prevcount);
-+#endif
-+
-     /*
-      * Get the command character from the user.
-      */
-@@ -725,15 +736,7 @@
- 	     * command, so that v:count can be used in an expression mapping
- 	     * right after the count. */
- 	    if (toplevel && stuff_empty())
--	    {
--		long count = ca.count0;
--
--		/* multiply with ca.opcount the same way as below */
--		if (ca.opcount != 0)
--		    count = ca.opcount * (count == 0 ? 1 : count);
--		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
--		set_prevcount = FALSE;  /* only set v:prevcount once */
--	    }
-+		set_vcount_ca(&ca, &set_prevcount);
- #endif
- 	    if (ctrl_w)
- 	    {
-@@ -957,8 +960,11 @@
- #ifdef FEAT_CMDL_INFO
- 	    need_flushbuf |= add_to_showcmd(ca.nchar);
- #endif
-+	    /* For "gn" from redo, need to get one more char to determine the
-+	     * operator */
- 	    if (ca.nchar == 'r' || ca.nchar == '\'' || ca.nchar == '`'
--						      || ca.nchar == Ctrl_BSL)
-+						       || ca.nchar == Ctrl_BSL
-+		  || ((ca.nchar == 'n' || ca.nchar == 'N') && !stuff_empty()))
- 	    {
- 		cp = &ca.extra_char;	/* need to get a third character */
- 		if (ca.nchar != 'r')
-@@ -1080,6 +1086,8 @@
- 		ca.nchar = ca.extra_char;
- 		idx = find_command(ca.cmdchar);
- 	    }
-+	    else if ((ca.nchar == 'n' || ca.nchar == 'N') && ca.cmdchar == 'g')
-+		ca.oap->op_type = get_op_type(*cp, NUL);
- 	    else if (*cp == Ctrl_BSL)
- 	    {
- 		long towait = (p_ttm >= 0 ? p_ttm : p_tm);
-@@ -1199,7 +1207,16 @@
-     {
- 	clearop(oap);
- #ifdef FEAT_EVAL
--	set_reg_var('"');
-+	{
-+	    int regname = 0;
-+
-+	    /* Adjust the register according to 'clipboard', so that when
-+	     * "unnamed" is present it becomes '*' or '+' instead of '"'. */
-+# ifdef FEAT_CLIPBOARD
-+	    adjust_clip_reg(&regname);
-+# endif
-+	    set_reg_var(regname);
-+	}
- #endif
-     }
- 
-@@ -1386,6 +1403,26 @@
-     opcount = ca.opcount;
- }
- 
-+#ifdef FEAT_EVAL
-+/*
-+ * Set v:count and v:count1 according to "cap".
-+ * Set v:prevcount only when "set_prevcount" is TRUE.
-+ */
-+    static void
-+set_vcount_ca(cap, set_prevcount)
-+    cmdarg_T	*cap;
-+    int		*set_prevcount;
-+{
-+    long count = cap->count0;
-+
-+    /* multiply with cap->opcount the same way as above */
-+    if (cap->opcount != 0)
-+	count = cap->opcount * (count == 0 ? 1 : count);
-+    set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
-+    *set_prevcount = FALSE;  /* only set v:prevcount once */
-+}
-+#endif
-+
- /*
-  * Handle an operator after visual mode or when the movement is finished
-  */
-@@ -1404,7 +1441,7 @@
-     /* The visual area is remembered for redo */
-     static int	    redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
-     static linenr_T redo_VIsual_line_count; /* number of lines */
--    static colnr_T  redo_VIsual_col;	    /* number of cols or end column */
-+    static colnr_T  redo_VIsual_vcol;	    /* number of cols or end column */
-     static long	    redo_VIsual_count;	    /* count for Visual operator */
- # ifdef FEAT_VIRTUALEDIT
-     int		    include_line_break = FALSE;
-@@ -1419,7 +1456,7 @@
-      * This could call do_pending_operator() recursively, but that's OK
-      * because gui_yank will be TRUE for the nested call.
-      */
--    if (clip_star.available
-+    if ((clip_star.available || clip_plus.available)
- 	    && oap->op_type != OP_NOP
- 	    && !gui_yank
- # ifdef FEAT_VISUAL
-@@ -1517,22 +1554,31 @@
- #ifdef FEAT_VISUAL
- 	if (redo_VIsual_busy)
- 	{
-+	    /* Redo of an operation on a Visual area. Use the same size from
-+	     * redo_VIsual_line_count and redo_VIsual_vcol. */
- 	    oap->start = curwin->w_cursor;
- 	    curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
- 	    if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
- 		curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
- 	    VIsual_mode = redo_VIsual_mode;
--	    if (VIsual_mode == 'v')
-+	    if (redo_VIsual_vcol == MAXCOL || VIsual_mode == 'v')
- 	    {
--		if (redo_VIsual_line_count <= 1)
--		    curwin->w_cursor.col += redo_VIsual_col - 1;
-+		if (VIsual_mode == 'v')
-+		{
-+		    if (redo_VIsual_line_count <= 1)
-+		    {
-+			validate_virtcol();
-+			curwin->w_curswant =
-+				     curwin->w_virtcol + redo_VIsual_vcol - 1;
-+		    }
-+		    else
-+			curwin->w_curswant = redo_VIsual_vcol;
-+		}
- 		else
--		    curwin->w_cursor.col = redo_VIsual_col;
--	    }
--	    if (redo_VIsual_col == MAXCOL)
--	    {
--		curwin->w_curswant = MAXCOL;
--		coladvance((colnr_T)MAXCOL);
-+		{
-+		    curwin->w_curswant = MAXCOL;
-+		}
-+		coladvance(curwin->w_curswant);
- 	    }
- 	    cap->count0 = redo_VIsual_count;
- 	    if (redo_VIsual_count != 0)
-@@ -1678,7 +1724,7 @@
- 		    }
- 		}
- 		else if (redo_VIsual_busy)
--		    oap->end_vcol = oap->start_vcol + redo_VIsual_col - 1;
-+		    oap->end_vcol = oap->start_vcol + redo_VIsual_vcol - 1;
- 		/*
- 		 * Correct oap->end.col and oap->start.col to be the
- 		 * upper-left and lower-right corner of the block area.
-@@ -1703,13 +1749,22 @@
- 		 */
- 		resel_VIsual_mode = VIsual_mode;
- 		if (curwin->w_curswant == MAXCOL)
--		    resel_VIsual_col = MAXCOL;
--		else if (VIsual_mode == Ctrl_V)
--		    resel_VIsual_col = oap->end_vcol - oap->start_vcol + 1;
--		else if (oap->line_count > 1)
--		    resel_VIsual_col = oap->end.col;
-+		    resel_VIsual_vcol = MAXCOL;
- 		else
--		    resel_VIsual_col = oap->end.col - oap->start.col + 1;
-+		{
-+		    if (VIsual_mode != Ctrl_V)
-+			getvvcol(curwin, &(oap->end),
-+						  NULL, NULL, &oap->end_vcol);
-+		    if (VIsual_mode == Ctrl_V || oap->line_count <= 1)
-+		    {
-+			if (VIsual_mode != Ctrl_V)
-+			    getvvcol(curwin, &(oap->start),
-+						&oap->start_vcol, NULL, NULL);
-+			resel_VIsual_vcol = oap->end_vcol - oap->start_vcol + 1;
-+		    }
-+		    else
-+			resel_VIsual_vcol = oap->end_vcol;
-+		}
- 		resel_VIsual_line_count = oap->line_count;
- 	    }
- 
-@@ -1730,14 +1785,22 @@
- 	    {
- 		/* Prepare for redoing.  Only use the nchar field for "r",
- 		 * otherwise it might be the second char of the operator. */
--		prep_redo(oap->regname, 0L, NUL, 'v',
--				get_op_char(oap->op_type),
--				get_extra_op_char(oap->op_type),
--				oap->op_type == OP_REPLACE ? cap->nchar : NUL);
-+		if (cap->cmdchar == 'g' && (cap->nchar == 'n'
-+							|| cap->nchar == 'N'))
-+		    /* "gn" and "gN" are a bit different */
-+		    prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
-+					get_op_char(oap->op_type),
-+					get_extra_op_char(oap->op_type));
-+		else
-+		    prep_redo(oap->regname, 0L, NUL, 'v',
-+					get_op_char(oap->op_type),
-+					get_extra_op_char(oap->op_type),
-+					oap->op_type == OP_REPLACE
-+							  ? cap->nchar : NUL);
- 		if (!redo_VIsual_busy)
- 		{
- 		    redo_VIsual_mode = resel_VIsual_mode;
--		    redo_VIsual_col = resel_VIsual_col;
-+		    redo_VIsual_vcol = resel_VIsual_vcol;
- 		    redo_VIsual_line_count = resel_VIsual_line_count;
- 		    redo_VIsual_count = cap->count0;
- 		}
-@@ -1763,17 +1826,25 @@
- 		{
- 		    oap->inclusive = FALSE;
- 		    /* Try to include the newline, unless it's an operator
--		     * that works on lines only */
--		    if (*p_sel != 'o'
--			    && !op_on_lines(oap->op_type)
--			    && oap->end.lnum < curbuf->b_ml.ml_line_count)
-+		     * that works on lines only. */
-+		    if (*p_sel != 'o' && !op_on_lines(oap->op_type))
- 		    {
--			++oap->end.lnum;
--			oap->end.col = 0;
-+			if (oap->end.lnum < curbuf->b_ml.ml_line_count)
-+			{
-+			    ++oap->end.lnum;
-+			    oap->end.col = 0;
- # ifdef FEAT_VIRTUALEDIT
--			oap->end.coladd = 0;
-+			    oap->end.coladd = 0;
- # endif
--			++oap->line_count;
-+			    ++oap->line_count;
-+			}
-+			else
-+			{
-+			    /* Cannot move below the last line, make the op
-+			     * inclusive to tell the operation to include the
-+			     * line break. */
-+			    oap->inclusive = TRUE;
-+			}
- 		    }
- 		}
- 	    }
-@@ -1910,7 +1981,7 @@
- 		beep_flush();
- 	    else
- 	    {
--		(void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE);
-+		(void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
- 		auto_format(FALSE, TRUE);
- 	    }
- 	    break;
-@@ -1920,7 +1991,10 @@
- 	    VIsual_reselect = FALSE;	    /* don't reselect now */
- #endif
- 	    if (empty_region_error)
-+	    {
- 		vim_beep();
-+		CancelRedo();
-+	    }
- 	    else
- 	    {
- 		(void)op_delete(oap);
-@@ -1934,7 +2008,10 @@
- 	    if (empty_region_error)
- 	    {
- 		if (!gui_yank)
-+		{
- 		    vim_beep();
-+		    CancelRedo();
-+		}
- 	    }
- 	    else
- 		(void)op_yank(oap, FALSE, !gui_yank);
-@@ -1946,7 +2023,10 @@
- 	    VIsual_reselect = FALSE;	    /* don't reselect now */
- #endif
- 	    if (empty_region_error)
-+	    {
- 		vim_beep();
-+		CancelRedo();
-+	    }
- 	    else
- 	    {
- 		/* This is a new edit command, not a restart.  Need to
-@@ -2008,7 +2088,10 @@
- 	case OP_LOWER:
- 	case OP_ROT13:
- 	    if (empty_region_error)
-+	    {
- 		vim_beep();
-+		CancelRedo();
-+	    }
- 	    else
- 		op_tilde(oap);
- 	    check_cursor_col();
-@@ -2041,7 +2124,10 @@
- #endif
- #ifdef FEAT_VISUALEXTRA
- 	    if (empty_region_error)
-+	    {
- 		vim_beep();
-+		CancelRedo();
-+	    }
- 	    else
- 	    {
- 		/* This is a new edit command, not a restart.  Need to
-@@ -2071,7 +2157,10 @@
- #ifdef FEAT_VISUALEXTRA
- 	    if (empty_region_error)
- #endif
-+	    {
- 		vim_beep();
-+		CancelRedo();
-+	    }
- #ifdef FEAT_VISUALEXTRA
- 	    else
- 		op_replace(oap, cap->nchar);
-@@ -2203,6 +2292,7 @@
- {
- #ifdef FEAT_EVAL
-     char_u	*(argv[1]);
-+    int		save_virtual_op = virtual_op;
- 
-     if (*p_opfunc == NUL)
- 	EMSG(_("E774: 'operatorfunc' is empty"));
-@@ -2221,7 +2311,14 @@
- 	    argv[0] = (char_u *)"line";
- 	else
- 	    argv[0] = (char_u *)"char";
-+
-+	/* Reset virtual_op so that 'virtualedit' can be changed in the
-+	 * function. */
-+	virtual_op = MAYBE;
-+
- 	(void)call_func_retnr(p_opfunc, 1, argv, FALSE);
-+
-+	virtual_op = save_virtual_op;
-     }
- #else
-     EMSG(_("E775: Eval feature not available"));
-@@ -4342,7 +4439,7 @@
- 	    break;
- 	}
- #ifdef FEAT_COMMENTS
--	if (get_leader_len(ml_get_curline(), NULL, FALSE) > 0)
-+	if (get_leader_len(ml_get_curline(), NULL, FALSE, TRUE) > 0)
- 	{
- 	    /* Ignore this line, continue at start of next line. */
- 	    ++curwin->w_cursor.lnum;
-@@ -4501,6 +4598,7 @@
- 		}
- 		curwin->w_cursor.lnum++;
- 		curwin->w_curswant %= width2;
-+		linelen = linetabsize(ml_get_curline());
- 	    }
- 	}
-       }
-@@ -5666,8 +5764,13 @@
- 	else if (cmdchar == '#')
- 	    aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
- 	else if (tag_cmd)
--	    /* Don't escape spaces and Tabs in a tag with a backslash */
--	    aux_ptr = (char_u *)"\\|\"\n[";
-+	{
-+	    if (curbuf->b_help)
-+		/* ":help" handles unescaped argument */
-+		aux_ptr = (char_u *)"";
-+	    else
-+		aux_ptr = (char_u *)"\\|\"\n[";
-+	}
- 	else
- 	    aux_ptr = (char_u *)"\\|\"\n*?[";
- 
-@@ -6980,7 +7083,18 @@
- 	    for (n = cap->count1; n > 0; --n)
- 	    {
- 		State = REPLACE;
--		ins_char(cap->nchar);
-+		if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
-+		{
-+		    int c = ins_copychar(curwin->w_cursor.lnum
-+					   + (cap->nchar == Ctrl_Y ? -1 : 1));
-+		    if (c != NUL)
-+			ins_char(c);
-+		    else
-+			/* will be decremented further down */
-+			++curwin->w_cursor.col;
-+		}
-+		else
-+		    ins_char(cap->nchar);
- 		State = old_State;
- 		if (cap->ncharC1 != 0)
- 		    ins_char(cap->ncharC1);
-@@ -7002,7 +7116,15 @@
- 		 * line will be changed.
- 		 */
- 		ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
--		ptr[curwin->w_cursor.col] = cap->nchar;
-+		if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
-+		{
-+		  int c = ins_copychar(curwin->w_cursor.lnum
-+					   + (cap->nchar == Ctrl_Y ? -1 : 1));
-+		  if (c != NUL)
-+		    ptr[curwin->w_cursor.col] = c;
-+		}
-+		else
-+		    ptr[curwin->w_cursor.col] = cap->nchar;
- 		if (p_sm && msg_silent == 0)
- 		    showmatch(cap->nchar);
- 		++curwin->w_cursor.col;
-@@ -7551,13 +7673,9 @@
-     else		    /* start Visual mode */
-     {
- 	check_visual_highlight();
--	if (cap->count0)		    /* use previously selected part */
-+	if (cap->count0 > 0 && resel_VIsual_mode != NUL)
- 	{
--	    if (resel_VIsual_mode == NUL)   /* there is none */
--	    {
--		beep_flush();
--		return;
--	    }
-+	    /* use previously selected part */
- 	    VIsual = curwin->w_cursor;
- 
- 	    VIsual_active = TRUE;
-@@ -7585,12 +7703,16 @@
- 	    if (VIsual_mode == 'v')
- 	    {
- 		if (resel_VIsual_line_count <= 1)
--		    curwin->w_cursor.col += resel_VIsual_col * cap->count0 - 1;
-+		{
-+		    validate_virtcol();
-+		    curwin->w_curswant = curwin->w_virtcol
-+					+ resel_VIsual_vcol * cap->count0 - 1;
-+		}
- 		else
--		    curwin->w_cursor.col = resel_VIsual_col;
--		check_cursor_col();
-+		    curwin->w_curswant = resel_VIsual_vcol;
-+		coladvance(curwin->w_curswant);
- 	    }
--	    if (resel_VIsual_col == MAXCOL)
-+	    if (resel_VIsual_vcol == MAXCOL)
- 	    {
- 		curwin->w_curswant = MAXCOL;
- 		coladvance((colnr_T)MAXCOL);
-@@ -7599,7 +7721,7 @@
- 	    {
- 		validate_virtcol();
- 		curwin->w_curswant = curwin->w_virtcol
--					 + resel_VIsual_col * cap->count0 - 1;
-+					+ resel_VIsual_vcol * cap->count0 - 1;
- 		coladvance(curwin->w_curswant);
- 	    }
- 	    else
-@@ -7612,6 +7734,16 @@
- 		/* start Select mode when 'selectmode' contains "cmd" */
- 		may_start_select('c');
- 	    n_start_visual_mode(cap->cmdchar);
-+	    if (VIsual_mode != 'V' && *p_sel == 'e')
-+		++cap->count1;  /* include one more char */
-+	    if (cap->count0 > 0 && --cap->count1 > 0)
-+	    {
-+		/* With a count select that many characters or lines. */
-+		if (VIsual_mode == 'v' || VIsual_mode == Ctrl_V)
-+		    nv_right(cap);
-+		else if (VIsual_mode == 'V')
-+		    nv_down(cap);
-+	    }
- 	}
-     }
- }
-@@ -7659,7 +7791,10 @@
-      * virtualedit.  Recalculate curwin->w_cursor to avoid bad hilighting.
-      */
-     if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB)
-+    {
-+	validate_virtcol();
- 	coladvance(curwin->w_virtcol);
-+    }
- #endif
-     VIsual = curwin->w_cursor;
- 
-@@ -7870,6 +8005,18 @@
- 	break;
- #endif /* FEAT_VISUAL */
- 
-+    /* "gn", "gN" visually select next/previous search match
-+     * "gn" selects next match
-+     * "gN" selects previous match
-+     */
-+    case 'N':
-+    case 'n':
-+#ifdef FEAT_VISUAL
-+	if (!current_search(cap->count1, cap->nchar == 'n'))
-+#endif
-+	    clearopbeep(oap);
-+	break;
-+
-     /*
-      * "gj" and "gk" two new funny movement keys -- up and down
-      * movement based on *screen* line rather than *file* line.
-@@ -8274,10 +8421,12 @@
- 
- #ifdef FEAT_WINDOWS
-     case 't':
--	goto_tabpage((int)cap->count0);
-+	if (!checkclearop(oap))
-+	    goto_tabpage((int)cap->count0);
- 	break;
-     case 'T':
--	goto_tabpage(-(int)cap->count1);
-+	if (!checkclearop(oap))
-+	    goto_tabpage(-(int)cap->count1);
- 	break;
- #endif
- 
-@@ -8524,7 +8673,7 @@
-     else
- 	curwin->w_curswant = 0;
-     /* keep curswant at the column where we wanted to go, not where
--       we ended; differs if line is too short */
-+     * we ended; differs if line is too short */
-     curwin->w_set_curswant = FALSE;
- }
- 
-@@ -8736,7 +8885,7 @@
- 	{
- 	    --pp->col;
- #ifdef FEAT_MBYTE
--	    mb_adjustpos(pp);
-+	    mb_adjustpos(curbuf, pp);
- #endif
- 	}
- 	else if (pp->lnum > 1)
-@@ -9205,7 +9354,7 @@
- 	{
- 	    prep_redo(cap->oap->regname, cap->count0,
- 			 NUL, cap->cmdchar, NUL, NUL, cap->nchar);
--	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE);
-+	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
- 	}
-     }
- }
-@@ -9261,7 +9410,7 @@
- # ifdef FEAT_CLIPBOARD
- 	    adjust_clip_reg(&regname);
- # endif
--	    if (regname == 0 || VIM_ISDIGIT(regname)
-+	    if (regname == 0 || regname == '"' || VIM_ISDIGIT(regname)
- # ifdef FEAT_CLIPBOARD
- 		    || (clip_unnamed && (regname == '*' || regname == '+'))
- # endif
-diff -Naur vim73.orig/src/ops.c vim73/src/ops.c
---- vim73.orig/src/ops.c	2010-08-01 12:16:08.000000000 +0000
-+++ vim73/src/ops.c	2012-11-01 20:35:48.000000000 +0000
-@@ -112,6 +112,9 @@
- # endif
- #endif
- static void	dis_msg __ARGS((char_u *p, int skip_esc));
-+#if defined(FEAT_COMMENTS) || defined(PROTO)
-+static char_u	*skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
-+#endif
- #ifdef FEAT_VISUAL
- static void	block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
- #endif
-@@ -329,7 +332,7 @@
- {
-     int		count;
-     int		i, j;
--    int		p_sw = (int)curbuf->b_p_sw;
-+    int		p_sw = (int)get_sw_value();
- 
-     count = get_indent();	/* get current indent */
- 
-@@ -385,7 +388,7 @@
-     int			total;
-     char_u		*newp, *oldp;
-     int			oldcol = curwin->w_cursor.col;
--    int			p_sw = (int)curbuf->b_p_sw;
-+    int			p_sw = (int)get_sw_value();
-     int			p_ts = (int)curbuf->b_p_ts;
-     struct block_def	bd;
-     int			incr;
-@@ -959,8 +962,14 @@
-      * selection too. */
-     if (name == '*' && clip_star.available)
-     {
--	if (clip_isautosel())
--	    clip_update_selection();
-+	if (clip_isautosel_star())
-+	    clip_update_selection(&clip_star);
-+	may_get_selection(name);
-+    }
-+    if (name == '+' && clip_plus.available)
-+    {
-+	if (clip_isautosel_plus())
-+	    clip_update_selection(&clip_plus);
- 	may_get_selection(name);
-     }
- #endif
-@@ -1584,9 +1593,11 @@
- adjust_clip_reg(rp)
-     int		*rp;
- {
--    /* If no reg. specified, and "unnamed" is in 'clipboard', use '*' reg. */
--    if (*rp == 0 && clip_unnamed)
--	*rp = '*';
-+    /* If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard',
-+     * use '*' or '+' reg, respectively. "unnamedplus" prevails. */
-+    if (*rp == 0 && clip_unnamed != 0)
-+	*rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available)
-+								  ? '+' : '*';
-     if (!clip_star.available && *rp == '*')
- 	*rp = 0;
-     if (!clip_plus.available && *rp == '+')
-@@ -1612,6 +1623,7 @@
- #endif
-     linenr_T		old_lcount = curbuf->b_ml.ml_line_count;
-     int			did_yank = FALSE;
-+    int			orig_regname = oap->regname;
- 
-     if (curbuf->b_ml.ml_flags & ML_EMPTY)	    /* nothing to do */
- 	return OK;
-@@ -1646,9 +1658,12 @@
- 	    && !oap->block_mode
- #endif
- 	    && oap->line_count > 1
-+	    && oap->motion_force == NUL
- 	    && oap->op_type == OP_DELETE)
-     {
--	ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive;
-+	ptr = ml_get(oap->end.lnum) + oap->end.col;
-+	if (*ptr != NUL)
-+	    ptr += oap->inclusive;
- 	ptr = skipwhite(ptr);
- 	if (*ptr == NUL && inindent(0))
- 	    oap->motion_type = MLINE;
-@@ -1701,8 +1716,10 @@
- 	/*
- 	 * Put deleted text into register 1 and shift number registers if the
- 	 * delete contains a line break, or when a regname has been specified.
-+	 * Use the register name from before adjust_clip_reg() may have
-+	 * changed it.
- 	 */
--	if (oap->regname != 0 || oap->motion_type == MLINE
-+	if (orig_regname != 0 || oap->motion_type == MLINE
- 				   || oap->line_count > 1 || oap->use_reg_one)
- 	{
- 	    y_current = &y_regs[9];
-@@ -1715,9 +1732,14 @@
- 		did_yank = TRUE;
- 	}
- 
--	/* Yank into small delete register when no register specified and the
--	 * delete is within one line. */
--	if (oap->regname == 0 && oap->motion_type != MLINE
-+	/* Yank into small delete register when no named register specified
-+	 * and the delete is within one line. */
-+	if ((
-+#ifdef FEAT_CLIPBOARD
-+	    ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
-+	    ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
-+#endif
-+	    oap->regname == 0) && oap->motion_type != MLINE
- 						      && oap->line_count == 1)
- 	{
- 	    oap->regname = '-';
-@@ -1918,38 +1940,66 @@
- 		    curwin->w_cursor.coladd = 0;
- 	    }
- #endif
--	    (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
-+	    if (oap->op_type == OP_DELETE
-+		    && oap->inclusive
-+		    && oap->end.lnum == curbuf->b_ml.ml_line_count
-+		    && n > (int)STRLEN(ml_get(oap->end.lnum)))
-+	    {
-+		/* Special case: gH<Del> deletes the last line. */
-+		del_lines(1L, FALSE);
-+	    }
-+	    else
-+	    {
-+		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
- #ifdef FEAT_VISUAL
- 				    && !oap->is_VIsual
- #endif
- 							);
-+	    }
- 	}
- 	else				/* delete characters between lines */
- 	{
- 	    pos_T   curpos;
-+	    int     delete_last_line;
- 
- 	    /* save deleted and changed lines for undo */
- 	    if (u_save((linenr_T)(curwin->w_cursor.lnum - 1),
- 		 (linenr_T)(curwin->w_cursor.lnum + oap->line_count)) == FAIL)
- 		return FAIL;
- 
-+	    delete_last_line = (oap->end.lnum == curbuf->b_ml.ml_line_count);
- 	    truncate_line(TRUE);	/* delete from cursor to end of line */
- 
- 	    curpos = curwin->w_cursor;	/* remember curwin->w_cursor */
- 	    ++curwin->w_cursor.lnum;
- 	    del_lines((long)(oap->line_count - 2), FALSE);
- 
--	    /* delete from start of line until op_end */
--	    curwin->w_cursor.col = 0;
--	    (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive),
--					!virtual_op, oap->op_type == OP_DELETE
-+	    if (delete_last_line)
-+		oap->end.lnum = curbuf->b_ml.ml_line_count;
-+
-+	    n = (oap->end.col + 1 - !oap->inclusive);
-+	    if (oap->inclusive && delete_last_line
-+		    && n > (int)STRLEN(ml_get(oap->end.lnum)))
-+	    {
-+		/* Special case: gH<Del> deletes the last line. */
-+		del_lines(1L, FALSE);
-+		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
-+		if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
-+		    curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
-+	    }
-+	    else
-+	    {
-+		/* delete from start of line until op_end */
-+		curwin->w_cursor.col = 0;
-+		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
- #ifdef FEAT_VISUAL
- 					&& !oap->is_VIsual
- #endif
- 							    );
--	    curwin->w_cursor = curpos;		/* restore curwin->w_cursor */
--
--	    (void)do_join(2, FALSE, FALSE);
-+		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
-+	    }
-+	    if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
-+		(void)do_join(2, FALSE, FALSE, FALSE);
- 	}
-     }
- 
-@@ -2569,7 +2619,8 @@
- 	firstline = ml_get(oap->start.lnum) + bd.textcol;
- 	if (oap->op_type == OP_APPEND)
- 	    firstline += bd.textlen;
--	if ((ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
-+	if (pre_textlen >= 0
-+		     && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
- 	{
- 	    ins_text = vim_strnsave(firstline, (int)ins_len);
- 	    if (ins_text != NULL)
-@@ -2842,6 +2893,9 @@
-     char_u		*p;
-     char_u		*pnew;
-     struct block_def	bd;
-+#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-+    int			did_star = FALSE;
-+#endif
- 
- 				    /* check for read-only register */
-     if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))
-@@ -3000,6 +3054,8 @@
- 			}
- #endif
- 		    }
-+		    if (endcol == MAXCOL)
-+			endcol = (colnr_T)STRLEN(p);
- 		    if (startcol > endcol
- #ifdef FEAT_VIRTUALEDIT
- 			    || is_oneChar
-@@ -3008,8 +3064,6 @@
- 			bd.textlen = 0;
- 		    else
- 		    {
--			if (endcol == MAXCOL)
--			    endcol = (colnr_T)STRLEN(p);
- 			bd.textlen = endcol - startcol + oap->inclusive;
- 		    }
- 		    bd.textstart = p + startcol;
-@@ -3115,7 +3169,8 @@
-      */
-     if (clip_star.available
- 	    && (curr == &(y_regs[STAR_REGISTER])
--		|| (!deleting && oap->regname == 0 && clip_unnamed)))
-+		|| (!deleting && oap->regname == 0
-+					   && (clip_unnamed & CLIP_UNNAMED))))
-     {
- 	if (curr != &(y_regs[STAR_REGISTER]))
- 	    /* Copy the text from register 0 to the clipboard register. */
-@@ -3123,6 +3178,9 @@
- 
- 	clip_own_selection(&clip_star);
- 	clip_gen_set_selection(&clip_star);
-+# ifdef FEAT_X11
-+	did_star = TRUE;
-+# endif
-     }
- 
- # ifdef FEAT_X11
-@@ -3130,12 +3188,19 @@
-      * If we were yanking to the '+' register, send result to selection.
-      * Also copy to the '*' register, in case auto-select is off.
-      */
--    else if (clip_plus.available && curr == &(y_regs[PLUS_REGISTER]))
-+    if (clip_plus.available
-+	    && (curr == &(y_regs[PLUS_REGISTER])
-+		|| (!deleting && oap->regname == 0
-+				      && (clip_unnamed & CLIP_UNNAMED_PLUS))))
-     {
--	/* No need to copy to * register upon 'unnamed' now - see below */
-+	if (curr != &(y_regs[PLUS_REGISTER]))
-+	    /* Copy the text from register 0 to the clipboard register. */
-+	    copy_yank_reg(&(y_regs[PLUS_REGISTER]));
-+
- 	clip_own_selection(&clip_plus);
- 	clip_gen_set_selection(&clip_plus);
--	if (!clip_isautosel())
-+	if (!clip_isautosel_star() && !did_star
-+					  && curr == &(y_regs[PLUS_REGISTER]))
- 	{
- 	    copy_yank_reg(&(y_regs[STAR_REGISTER]));
- 	    clip_own_selection(&clip_star);
-@@ -3293,8 +3358,8 @@
- 	if (regname == '=')
- 	{
- 	    /* For the = register we need to split the string at NL
--	     * characters. */
--	    /* Loop twice: count the number of lines and save them. */
-+	     * characters.
-+	     * Loop twice: count the number of lines and save them. */
- 	    for (;;)
- 	    {
- 		y_size = 0;
-@@ -3310,7 +3375,7 @@
- 			if (y_array != NULL)
- 			    *ptr = NUL;
- 			++ptr;
--			/* A trailing '\n' makes the string linewise */
-+			/* A trailing '\n' makes the register linewise. */
- 			if (*ptr == NUL)
- 			{
- 			    y_type = MLINE;
-@@ -3979,7 +4044,12 @@
-     for (i = -1; i < NUM_REGISTERS && !got_int; ++i)
-     {
- 	name = get_register_name(i);
--	if (arg != NULL && vim_strchr(arg, name) == NULL)
-+	if (arg != NULL && vim_strchr(arg, name) == NULL
-+#ifdef ONE_CLIPBOARD
-+	    /* Star register and plus register contain the same thing. */
-+		&& (name != '*' || vim_strchr(arg, '+') == NULL)
-+#endif
-+		)
- 	    continue;	    /* did not ask for this register */
- 
- #ifdef FEAT_CLIPBOARD
-@@ -4140,22 +4210,101 @@
-     ui_breakcheck();
- }
- 
-+#if defined(FEAT_COMMENTS) || defined(PROTO)
-+/*
-+ * If "process" is TRUE and the line begins with a comment leader (possibly
-+ * after some white space), return a pointer to the text after it. Put a boolean
-+ * value indicating whether the line ends with an unclosed comment in
-+ * "is_comment".
-+ * line - line to be processed,
-+ * process - if FALSE, will only check whether the line ends with an unclosed
-+ *	     comment,
-+ * include_space - whether to also skip space following the comment leader,
-+ * is_comment - will indicate whether the current line ends with an unclosed
-+ *		comment.
-+ */
-+    static char_u *
-+skip_comment(line, process, include_space, is_comment)
-+    char_u   *line;
-+    int      process;
-+    int	     include_space;
-+    int      *is_comment;
-+{
-+    char_u *comment_flags = NULL;
-+    int    lead_len;
-+    int    leader_offset = get_last_leader_offset(line, &comment_flags);
-+
-+    *is_comment = FALSE;
-+    if (leader_offset != -1)
-+    {
-+	/* Let's check whether the line ends with an unclosed comment.
-+	 * If the last comment leader has COM_END in flags, there's no comment.
-+	 */
-+	while (*comment_flags)
-+	{
-+	    if (*comment_flags == COM_END
-+		    || *comment_flags == ':')
-+		break;
-+	    ++comment_flags;
-+	}
-+	if (*comment_flags != COM_END)
-+	    *is_comment = TRUE;
-+    }
-+
-+    if (process == FALSE)
-+	return line;
-+
-+    lead_len = get_leader_len(line, &comment_flags, FALSE, include_space);
-+
-+    if (lead_len == 0)
-+	return line;
-+
-+    /* Find:
-+     * - COM_END,
-+     * - colon,
-+     * whichever comes first.
-+     */
-+    while (*comment_flags)
-+    {
-+	if (*comment_flags == COM_END
-+		|| *comment_flags == ':')
-+	{
-+	    break;
-+	}
-+	++comment_flags;
-+    }
-+
-+    /* If we found a colon, it means that we are not processing a line
-+     * starting with a closing part of a three-part comment. That's good,
-+     * because we don't want to remove those as this would be annoying.
-+     */
-+    if (*comment_flags == ':' || *comment_flags == NUL)
-+	line += lead_len;
-+
-+    return line;
-+}
-+#endif
-+
- /*
-  * Join 'count' lines (minimal 2) at cursor position.
-  * When "save_undo" is TRUE save lines for undo first.
-+ * Set "use_formatoptions" to FALSE when e.g. processing
-+ * backspace and comment leaders should not be removed.
-  *
-  * return FAIL for failure, OK otherwise
-  */
-     int
--do_join(count, insert_space, save_undo)
-+do_join(count, insert_space, save_undo, use_formatoptions)
-     long    count;
-     int	    insert_space;
-     int	    save_undo;
-+    int	    use_formatoptions UNUSED;
- {
-     char_u	*curr = NULL;
-+    char_u      *curr_start = NULL;
-     char_u	*cend;
-     char_u	*newp;
--    char_u	*spaces;	/* number of spaces inserte before a line */
-+    char_u	*spaces;	/* number of spaces inserted before a line */
-     int		endcurr1 = NUL;
-     int		endcurr2 = NUL;
-     int		currsize = 0;	/* size of the current line */
-@@ -4163,6 +4312,13 @@
-     linenr_T	t;
-     colnr_T	col = 0;
-     int		ret = OK;
-+#if defined(FEAT_COMMENTS) || defined(PROTO)
-+    int		*comments = NULL;
-+    int		remove_comments = (use_formatoptions == TRUE)
-+				  && has_format_option(FO_REMOVE_COMS);
-+    int		prev_was_comment;
-+#endif
-+
- 
-     if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
- 			    (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
-@@ -4174,6 +4330,17 @@
-     spaces = lalloc_clear((long_u)count, TRUE);
-     if (spaces == NULL)
- 	return FAIL;
-+#if defined(FEAT_COMMENTS) || defined(PROTO)
-+    if (remove_comments)
-+    {
-+	comments = (int *)lalloc_clear((long_u)count * sizeof(int), TRUE);
-+	if (comments == NULL)
-+	{
-+	    vim_free(spaces);
-+	    return FAIL;
-+	}
-+    }
-+#endif
- 
-     /*
-      * Don't move anything, just compute the final line length
-@@ -4181,7 +4348,26 @@
-      */
-     for (t = 0; t < count; ++t)
-     {
--	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
-+	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
-+#if defined(FEAT_COMMENTS) || defined(PROTO)
-+	if (remove_comments)
-+	{
-+	    /* We don't want to remove the comment leader if the
-+	     * previous line is not a comment. */
-+	    if (t > 0 && prev_was_comment)
-+	    {
-+
-+		char_u *new_curr = skip_comment(curr, TRUE, insert_space,
-+							   &prev_was_comment);
-+		comments[t] = (int)(new_curr - curr);
-+		curr = new_curr;
-+	    }
-+	    else
-+		curr = skip_comment(curr, FALSE, insert_space,
-+							   &prev_was_comment);
-+	}
-+#endif
-+
- 	if (insert_space && t > 0)
- 	{
- 	    curr = skipwhite(curr);
-@@ -4265,10 +4451,14 @@
- 	    copy_spaces(cend, (size_t)(spaces[t]));
- 	}
- 	mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
--				 (long)(cend - newp + spaces[t]));
-+			 (long)(cend - newp + spaces[t] - (curr - curr_start)));
- 	if (t == 0)
- 	    break;
--	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
-+	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
-+#if defined(FEAT_COMMENTS) || defined(PROTO)
-+	if (remove_comments)
-+	    curr += comments[t - 1];
-+#endif
- 	if (insert_space && t > 1)
- 	    curr = skipwhite(curr);
- 	currsize = (int)STRLEN(curr);
-@@ -4306,6 +4496,10 @@
- 
- theend:
-     vim_free(spaces);
-+#if defined(FEAT_COMMENTS) || defined(PROTO)
-+    if (remove_comments)
-+	vim_free(comments);
-+#endif
-     return ret;
- }
- 
-@@ -4388,7 +4582,7 @@
- #endif
- 
- /*
-- * implementation of the format operator 'gq'
-+ * Implementation of the format operator 'gq'.
-  */
-     void
- op_format(oap, keep_cursor)
-@@ -4539,9 +4733,11 @@
-     char_u	*leader_flags = NULL;	/* flags for leader of current line */
-     char_u	*next_leader_flags;	/* flags for leader of next line */
-     int		do_comments;		/* format comments */
-+    int		do_comments_list = 0;	/* format comments with 'n' or '2' */
- #endif
-     int		advance = TRUE;
--    int		second_indent = -1;
-+    int		second_indent = -1;	/* indent for second line (comment
-+					 * aware) */
-     int		do_second_indent;
-     int		do_number_indent;
-     int		do_trail_white;
-@@ -4644,18 +4840,46 @@
- 	    if (first_par_line
- 		    && (do_second_indent || do_number_indent)
- 		    && prev_is_end_par
--		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count
-+		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
-+	    {
-+		if (do_second_indent && !lineempty(curwin->w_cursor.lnum + 1))
-+		{
- #ifdef FEAT_COMMENTS
--		    && leader_len == 0
--		    && next_leader_len == 0
-+		    if (leader_len == 0 && next_leader_len == 0)
-+		    {
-+			/* no comment found */
- #endif
--		    )
--	    {
--		if (do_second_indent
--			&& !lineempty(curwin->w_cursor.lnum + 1))
--		    second_indent = get_indent_lnum(curwin->w_cursor.lnum + 1);
-+			second_indent =
-+				   get_indent_lnum(curwin->w_cursor.lnum + 1);
-+#ifdef FEAT_COMMENTS
-+		    }
-+		    else
-+		    {
-+			second_indent = next_leader_len;
-+			do_comments_list = 1;
-+		    }
-+#endif
-+		}
- 		else if (do_number_indent)
--		    second_indent = get_number_indent(curwin->w_cursor.lnum);
-+		{
-+#ifdef FEAT_COMMENTS
-+		    if (leader_len == 0 && next_leader_len == 0)
-+		    {
-+			/* no comment found */
-+#endif
-+			second_indent =
-+				     get_number_indent(curwin->w_cursor.lnum);
-+#ifdef FEAT_COMMENTS
-+		    }
-+		    else
-+		    {
-+			/* get_number_indent() is now "comment aware"... */
-+			second_indent =
-+				     get_number_indent(curwin->w_cursor.lnum);
-+			do_comments_list = 1;
-+		    }
-+#endif
-+		}
- 	    }
- 
- 	    /*
-@@ -4694,6 +4918,8 @@
- 		insertchar(NUL, INSCHAR_FORMAT
- #ifdef FEAT_COMMENTS
- 			+ (do_comments ? INSCHAR_DO_COM : 0)
-+			+ (do_comments && do_comments_list
-+						       ? INSCHAR_COM_LIST : 0)
- #endif
- 			+ (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
- 		State = old_State;
-@@ -4730,7 +4956,7 @@
- 						      (long)-next_leader_len);
- #endif
- 		curwin->w_cursor.lnum--;
--		if (do_join(2, TRUE, FALSE) == FAIL)
-+		if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
- 		{
- 		    beep_flush();
- 		    break;
-@@ -4786,7 +5012,7 @@
- 
-     ptr = ml_get(lnum);
-     if (do_comments)
--	*leader_len = get_leader_len(ptr, leader_flags, FALSE);
-+	*leader_len = get_leader_len(ptr, leader_flags, FALSE, TRUE);
-     else
- 	*leader_len = 0;
- 
-@@ -5712,7 +5938,9 @@
-     }
- }
- 
--/* Convert from the GUI selection string into the '*'/'+' register */
-+/*
-+ * Convert from the GUI selection string into the '*'/'+' register.
-+ */
-     void
- clip_yank_selection(type, str, len, cbd)
-     int		type;
-@@ -6069,9 +6297,6 @@
-     if (yank_type == MBLOCK)
- 	yank_type = MAUTO;
- #endif
--    if (yank_type == MAUTO)
--	yank_type = ((len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
--							     ? MLINE : MCHAR);
-     str_to_reg(y_current, yank_type, str, len, block_len);
- 
- # ifdef FEAT_CLIPBOARD
-@@ -6092,13 +6317,14 @@
-  * is appended.
-  */
-     static void
--str_to_reg(y_ptr, type, str, len, blocklen)
-+str_to_reg(y_ptr, yank_type, str, len, blocklen)
-     struct yankreg	*y_ptr;		/* pointer to yank register */
--    int			type;		/* MCHAR, MLINE or MBLOCK */
-+    int			yank_type;	/* MCHAR, MLINE, MBLOCK, MAUTO */
-     char_u		*str;		/* string to put in register */
-     long		len;		/* length of string */
-     long		blocklen;	/* width of Visual block */
- {
-+    int		type;			/* MCHAR, MLINE or MBLOCK */
-     int		lnum;
-     long	start;
-     long	i;
-@@ -6115,6 +6341,12 @@
-     if (y_ptr->y_array == NULL)		/* NULL means empty register */
- 	y_ptr->y_size = 0;
- 
-+    if (yank_type == MAUTO)
-+	type = ((len > 0 && (str[len - 1] == NL || str[len - 1] == CAR))
-+							     ? MLINE : MCHAR);
-+    else
-+	type = yank_type;
-+
-     /*
-      * Count the number of lines within the string
-      */
-@@ -6236,7 +6468,7 @@
-     long	chars = 0;
-     int		is_word = 0;
- 
--    for (i = 0; line[i] && i < limit; )
-+    for (i = 0; i < limit && line[i] != NUL; )
-     {
- 	if (is_word)
- 	{
-@@ -6261,7 +6493,7 @@
-     *wc += words;
- 
-     /* Add eol_size if the end of line was reached before hitting limit. */
--    if (line[i] == NUL && i < limit)
-+    if (i < limit && line[i] == NUL)
-     {
- 	i += eol_size;
- 	chars += eol_size;
-diff -Naur vim73.orig/src/option.c vim73/src/option.c
---- vim73.orig/src/option.c	2010-08-04 18:49:18.000000000 +0000
-+++ vim73/src/option.c	2012-11-01 20:35:48.000000000 +0000
-@@ -140,9 +140,6 @@
- #define PV_MOD		OPT_BUF(BV_MOD)
- #define PV_MPS		OPT_BUF(BV_MPS)
- #define PV_NF		OPT_BUF(BV_NF)
--#ifdef FEAT_OSFILETYPE
--# define PV_OFT		OPT_BUF(BV_OFT)
--#endif
- #ifdef FEAT_COMPL_FUNC
- # define PV_OFU		OPT_BUF(BV_OFU)
- #endif
-@@ -337,9 +334,6 @@
- static int	p_mod;
- static char_u	*p_mps;
- static char_u	*p_nf;
--#ifdef FEAT_OSFILETYPE
--static char_u	*p_oft;
--#endif
- static int	p_pi;
- #ifdef FEAT_TEXTOBJ
- static char_u	*p_qe;
-@@ -439,17 +433,19 @@
- #define P_RCLR		0x7000	/* clear and redraw all */
- 
- #define P_COMMA		0x8000	/* comma separated list */
--#define P_NODUP		0x10000L/* don't allow duplicate strings */
--#define P_FLAGLIST	0x20000L/* list of single-char flags */
-+#define P_NODUP		0x10000L /* don't allow duplicate strings */
-+#define P_FLAGLIST	0x20000L /* list of single-char flags */
- 
--#define P_SECURE	0x40000L/* cannot change in modeline or secure mode */
--#define P_GETTEXT	0x80000L/* expand default value with _() */
--#define P_NOGLOB       0x100000L/* do not use local value for global vimrc */
--#define P_NFNAME       0x200000L/* only normal file name chars allowed */
--#define P_INSECURE     0x400000L/* option was set from a modeline */
--#define P_PRI_MKRC     0x800000L/* priority for :mkvimrc (setting option has
-+#define P_SECURE	0x40000L /* cannot change in modeline or secure mode */
-+#define P_GETTEXT	0x80000L /* expand default value with _() */
-+#define P_NOGLOB       0x100000L /* do not use local value for global vimrc */
-+#define P_NFNAME       0x200000L /* only normal file name chars allowed */
-+#define P_INSECURE     0x400000L /* option was set from a modeline */
-+#define P_PRI_MKRC     0x800000L /* priority for :mkvimrc (setting option has
- 				   side effects) */
--#define P_NO_ML       0x1000000L/* not allowed in modeline */
-+#define P_NO_ML       0x1000000L /* not allowed in modeline */
-+#define P_CURSWANT    0x2000000L /* update curswant required; not needed when
-+				  * there is a redraw flag */
- 
- #define ISK_LATIN1  (char_u *)"@,48-57,_,192-255"
- 
-@@ -466,9 +462,9 @@
- #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
- 	|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
- 	|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
--# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
-+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
- #else
--# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
-+# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
- #endif
- 
- /*
-@@ -485,7 +481,7 @@
- #endif
- 	options[] =
- {
--    {"aleph",	    "al",   P_NUM|P_VI_DEF,
-+    {"aleph",	    "al",   P_NUM|P_VI_DEF|P_CURSWANT,
- #ifdef FEAT_RIGHTLEFT
- 			    (char_u *)&p_aleph, PV_NONE,
- #else
-@@ -507,7 +503,7 @@
- 			    {(char_u *)FALSE, (char_u *)FALSE}
- #endif
- 			    SCRIPTID_INIT},
--    {"arabic",	    "arab", P_BOOL|P_VI_DEF|P_VIM,
-+    {"arabic",	    "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
- #ifdef FEAT_ARABIC
- 			    (char_u *)VAR_WIN, PV_ARAB,
- #else
-@@ -784,7 +780,7 @@
-     {"columns",	    "co",   P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
- 			    (char_u *)&Columns, PV_NONE,
- 			    {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
--    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
-+    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
- #ifdef FEAT_COMMENTS
- 			    (char_u *)&p_com, PV_COM,
- 			    {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
-@@ -794,7 +790,7 @@
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
- 			    SCRIPTID_INIT},
--    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
-+    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
- #ifdef FEAT_FOLDING
- 			    (char_u *)&p_cms, PV_CMS,
- 			    {(char_u *)"/*%s*/", (char_u *)0L}
-@@ -907,6 +903,13 @@
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
- 			    SCRIPTID_INIT},
-+    {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
-+#ifdef FEAT_CSCOPE
-+			    (char_u *)&p_csre, PV_NONE,
-+#else
-+			    (char_u *)NULL, PV_NONE,
-+#endif
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"cscopetag",   "cst",  P_BOOL|P_VI_DEF|P_VIM,
- #ifdef FEAT_CSCOPE
- 			    (char_u *)&p_cst, PV_NONE,
-@@ -952,7 +955,7 @@
-     {"debug",	    NULL,   P_STRING|P_VI_DEF,
- 			    (char_u *)&p_debug, PV_NONE,
- 			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
--    {"define",	    "def",  P_STRING|P_ALLOCED|P_VI_DEF,
-+    {"define",	    "def",  P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
- #ifdef FEAT_FIND_ID
- 			    (char_u *)&p_def, PV_DEF,
- 			    {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
-@@ -982,7 +985,7 @@
- 			    (char_u *)NULL, PV_NONE,
- #endif
- 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
--    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE,
-+    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
- #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
- 			    (char_u *)&p_dex, PV_NONE,
- 			    {(char_u *)"", (char_u *)0L}
-@@ -1098,7 +1101,7 @@
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
- 			    SCRIPTID_INIT},
--    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
-+    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC|P_CURSWANT,
- 			    (char_u *)&p_ff, PV_FF,
- 			    {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
-     {"fileformats", "ffs",  P_STRING|P_VIM|P_COMMA|P_NODUP,
-@@ -1158,7 +1161,7 @@
-     {"foldlevel",   "fdl",  P_NUM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FDL,
- 			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
--    {"foldlevelstart","fdls", P_NUM|P_VI_DEF,
-+    {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
- 			    (char_u *)&p_fdls, PV_NONE,
- 			    {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
-     {"foldmarker",  "fmr",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
-@@ -1175,7 +1178,7 @@
-     {"foldnestmax", "fdn",  P_NUM|P_VI_DEF|P_RWIN,
- 			    (char_u *)VAR_WIN, PV_FDN,
- 			    {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
--    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
-+    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
- 			    (char_u *)&p_fdo, PV_NONE,
- 		 {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
- 						 (char_u *)0L} SCRIPTID_INIT},
-@@ -1740,7 +1743,7 @@
-     {"matchtime",   "mat",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_mat, PV_NONE,
- 			    {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
--    {"maxcombine",  "mco",  P_NUM|P_VI_DEF,
-+    {"maxcombine",  "mco",  P_NUM|P_VI_DEF|P_CURSWANT,
- #ifdef FEAT_MBYTE
- 			    (char_u *)&p_mco, PV_NONE,
- #else
-@@ -1901,14 +1904,8 @@
- 			    (char_u *)NULL, PV_NONE,
- 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"osfiletype",  "oft",  P_STRING|P_ALLOCED|P_VI_DEF,
--#ifdef FEAT_OSFILETYPE
--			    (char_u *)&p_oft, PV_OFT,
--			    {(char_u *)DFLT_OFT, (char_u *)0L}
--#else
- 			    (char_u *)NULL, PV_NONE,
--			    {(char_u *)0L, (char_u *)0L}
--#endif
--			    SCRIPTID_INIT},
-+			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"paragraphs",  "para", P_STRING|P_VI_DEF,
- 			    (char_u *)&p_para, PV_NONE,
- 			    {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
-@@ -2278,6 +2275,15 @@
- 			    (char_u *)"",
- #endif
- 				(char_u *)0L} SCRIPTID_INIT},
-+    {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
-+			    (char_u *)&p_sxe, PV_NONE,
-+			    {
-+#if defined(MSDOS) || defined(WIN16) || defined(WIN3264)
-+			    (char_u *)"\"&|<>()@^",
-+#else
-+			    (char_u *)"",
-+#endif
-+				(char_u *)0L} SCRIPTID_INIT},
-     {"shiftround",  "sr",   P_BOOL|P_VI_DEF|P_VIM,
- 			    (char_u *)&p_sr, PV_NONE,
- 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-@@ -2706,7 +2712,7 @@
- 			    {(char_u *)0L, (char_u *)0L}
- #endif
- 			    SCRIPTID_INIT},
--    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
-+    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM|P_CURSWANT,
- #ifdef FEAT_VIRTUALEDIT
- 			    (char_u *)&p_ve, PV_NONE,
- 			    {(char_u *)"", (char_u *)""}
-@@ -2740,7 +2746,7 @@
- 			    (char_u *)&p_wc, PV_NONE,
- 			    {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
- 			    SCRIPTID_INIT},
--    {"wildcharm",   "wcm",   P_NUM|P_VI_DEF,
-+    {"wildcharm",   "wcm",  P_NUM|P_VI_DEF,
- 			    (char_u *)&p_wcm, PV_NONE,
- 			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
-     {"wildignore",  "wig",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
-@@ -2750,6 +2756,9 @@
- 			    (char_u *)NULL, PV_NONE,
- #endif
- 			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
-+    {"wildignorecase", "wic", P_BOOL|P_VI_DEF,
-+			    (char_u *)&p_wic, PV_NONE,
-+			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
-     {"wildmenu",    "wmnu", P_BOOL|P_VI_DEF,
- #ifdef FEAT_WILDMENU
- 			    (char_u *)&p_wmnu, PV_NONE,
-@@ -3145,7 +3154,7 @@
- 	{
- #ifdef HAVE_AVAIL_MEM
- 	    /* Use amount of memory available at this moment. */
--	    n = (mch_avail_mem(FALSE) >> 11);
-+	    n = (mch_avail_mem(FALSE) >> 1);
- #else
- # ifdef HAVE_TOTAL_MEM
- 	    /* Use amount of memory available to Vim. */
-@@ -3843,6 +3852,8 @@
- # ifndef OS2	/* Always use bourne shell style redirection if we reach this */
- 	    if (       fnamecmp(p, "sh") == 0
- 		    || fnamecmp(p, "ksh") == 0
-+		    || fnamecmp(p, "mksh") == 0
-+		    || fnamecmp(p, "pdksh") == 0
- 		    || fnamecmp(p, "zsh") == 0
- 		    || fnamecmp(p, "zsh-beta") == 0
- 		    || fnamecmp(p, "bash") == 0
-@@ -3850,6 +3861,8 @@
- 		    || fnamecmp(p, "cmd") == 0
- 		    || fnamecmp(p, "sh.exe") == 0
- 		    || fnamecmp(p, "ksh.exe") == 0
-+		    || fnamecmp(p, "mksh.exe") == 0
-+		    || fnamecmp(p, "pdksh.exe") == 0
- 		    || fnamecmp(p, "zsh.exe") == 0
- 		    || fnamecmp(p, "zsh-beta.exe") == 0
- 		    || fnamecmp(p, "bash.exe") == 0
-@@ -3881,7 +3894,8 @@
- 
- #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
-     /*
--     * Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
-+     * Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
-+     * 'shell' option.
-      * This is done after other initializations, where 'shell' might have been
-      * set, but only if they have not been set before.  Default for p_shcf is
-      * "/c", for p_shq is "".  For "sh" like  shells it is changed here to
-@@ -3918,6 +3932,37 @@
- #  endif
- # endif
-     }
-+    else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
-+    {
-+	int	idx3;
-+
-+	/*
-+	 * cmd.exe on Windows will strip the first and last double quote given
-+	 * on the command line, e.g. most of the time things like:
-+	 *   cmd /c "my path/to/echo" "my args to echo"
-+	 * become:
-+	 *   my path/to/echo" "my args to echo
-+	 * when executed.
-+	 *
-+	 * To avoid this, set shellxquote to surround the command in
-+	 * parenthesis.  This appears to make most commands work, without
-+	 * breaking commands that worked previously, such as
-+	 * '"path with spaces/cmd" "a&b"'.
-+	 */
-+	idx3 = findoption((char_u *)"sxq");
-+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
-+	{
-+	    p_sxq = (char_u *)"(";
-+	    options[idx3].def_val[VI_DEFAULT] = p_sxq;
-+	}
-+
-+	idx3 = findoption((char_u *)"shcf");
-+	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
-+	{
-+	    p_shcf = (char_u *)"/c";
-+	    options[idx3].def_val[VI_DEFAULT] = p_shcf;
-+	}
-+    }
- #endif
- 
- #ifdef FEAT_TITLE
-@@ -4349,7 +4394,7 @@
- 		    p = find_termcode(key_name);
- 		    if (p == NULL)
- 		    {
--			errmsg = (char_u *)N_("E518: Unknown option");
-+			errmsg = (char_u *)N_("E846: Key code not set");
- 			goto skip;
- 		    }
- 		    else
-@@ -4565,6 +4610,31 @@
- 				arg = errbuf;
- 			    }
- 			    /*
-+			     * Convert 'backspace' number to string, for
-+			     * adding, prepending and removing string.
-+			     */
-+			    else if (varp == (char_u *)&p_bs
-+					 && VIM_ISDIGIT(**(char_u **)varp))
-+			    {
-+				i = getdigits((char_u **)varp);
-+				switch (i)
-+				{
-+				    case 0:
-+					*(char_u **)varp = empty_option;
-+					break;
-+				    case 1:
-+					*(char_u **)varp = vim_strsave(
-+						      (char_u *)"indent,eol");
-+					break;
-+				    case 2:
-+					*(char_u **)varp = vim_strsave(
-+						(char_u *)"indent,eol,start");
-+					break;
-+				}
-+				vim_free(oldval);
-+				oldval = *(char_u **)varp;
-+			    }
-+			    /*
- 			     * Convert 'whichwrap' number to string, for
- 			     * backwards compatibility with Vim 3.0.
- 			     * Misuse errbuf[] for the resulting string.
-@@ -4697,8 +4767,8 @@
- 						|| s[i] == ','
- 						|| s[i] == NUL))
- 					break;
--				    /* Count backspaces.  Only a comma with an
--				     * even number of backspaces before it is
-+				    /* Count backslashes.  Only a comma with an
-+				     * even number of backslashes before it is
- 				     * recognized as a separator */
- 				    if (s > origval && s[-1] == '\\')
- 					++bs;
-@@ -5275,9 +5345,6 @@
- #ifdef FEAT_AUTOCMD
-     check_string_option(&buf->b_p_ft);
- #endif
--#ifdef FEAT_OSFILETYPE
--    check_string_option(&buf->b_p_oft);
--#endif
- #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
-     check_string_option(&buf->b_p_cinw);
- #endif
-@@ -6635,7 +6702,7 @@
-     {
- 	for (s = *varp; *s;)
- 	{
--	    while(*s == ',' || *s == ' ')
-+	    while (*s == ',' || *s == ' ')
- 		s++;
- 	    if (!*s)
- 		break;
-@@ -6999,8 +7066,10 @@
-     }
- #endif
- 
--    if (curwin->w_curswant != MAXCOL)
--	curwin->w_set_curswant = TRUE;  /* in case 'showbreak' changed */
-+    if (curwin->w_curswant != MAXCOL
-+		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
-+	curwin->w_set_curswant = TRUE;
-+
- #ifdef FEAT_GUI
-     /* check redraw when it's not a GUI option or the GUI is active. */
-     if (!redraw_gui_only || gui.in_use)
-@@ -7037,6 +7106,9 @@
-     int		i;
-     int		j = 0;
- 
-+    if (wp->w_buffer == NULL)
-+	return NULL;  /* buffer was closed */
-+
-     for (s = wp->w_p_cc; *s != NUL && count < 255;)
-     {
- 	if (*s == '-' || *s == '+')
-@@ -7304,8 +7376,9 @@
-     static char_u *
- check_clipboard_option()
- {
--    int		new_unnamed = FALSE;
--    int		new_autoselect = FALSE;
-+    int		new_unnamed = 0;
-+    int		new_autoselect_star = FALSE;
-+    int		new_autoselect_plus = FALSE;
-     int		new_autoselectml = FALSE;
-     int		new_html = FALSE;
-     regprog_T	*new_exclude_prog = NULL;
-@@ -7316,17 +7389,29 @@
-     {
- 	if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL))
- 	{
--	    new_unnamed = TRUE;
-+	    new_unnamed |= CLIP_UNNAMED;
- 	    p += 7;
- 	}
-+	else if (STRNCMP(p, "unnamedplus", 11) == 0
-+					    && (p[11] == ',' || p[11] == NUL))
-+	{
-+	    new_unnamed |= CLIP_UNNAMED_PLUS;
-+	    p += 11;
-+	}
- 	else if (STRNCMP(p, "autoselect", 10) == 0
--					&& (p[10] == ',' || p[10] == NUL))
-+					    && (p[10] == ',' || p[10] == NUL))
- 	{
--	    new_autoselect = TRUE;
-+	    new_autoselect_star = TRUE;
- 	    p += 10;
- 	}
-+	else if (STRNCMP(p, "autoselectplus", 14) == 0
-+					    && (p[14] == ',' || p[14] == NUL))
-+	{
-+	    new_autoselect_plus = TRUE;
-+	    p += 14;
-+	}
- 	else if (STRNCMP(p, "autoselectml", 12) == 0
--					&& (p[12] == ',' || p[12] == NUL))
-+					    && (p[12] == ',' || p[12] == NUL))
- 	{
- 	    new_autoselectml = TRUE;
- 	    p += 12;
-@@ -7355,7 +7440,8 @@
-     if (errmsg == NULL)
-     {
- 	clip_unnamed = new_unnamed;
--	clip_autoselect = new_autoselect;
-+	clip_autoselect_star = new_autoselect_star;
-+	clip_autoselect_plus = new_autoselect_plus;
- 	clip_autoselectml = new_autoselectml;
- 	clip_html = new_html;
- 	vim_free(clip_exclude_prog);
-@@ -7483,14 +7569,42 @@
- 	compatible_set();
-     }
- 
-+#ifdef FEAT_PERSISTENT_UNDO
-+    /* 'undofile' */
-+    else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
-+    {
-+	/* Only take action when the option was set. When reset we do not
-+	 * delete the undo file, the option may be set again without making
-+	 * any changes in between. */
-+	if (curbuf->b_p_udf || p_udf)
-+	{
-+	    char_u	hash[UNDO_HASH_SIZE];
-+	    buf_T	*save_curbuf = curbuf;
-+
-+	    for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
-+	    {
-+		/* When 'undofile' is set globally: for every buffer, otherwise
-+		 * only for the current buffer: Try to read in the undofile,
-+		 * if one exists, the buffer wasn't changed and the buffer was
-+		 * loaded */
-+		if ((curbuf == save_curbuf
-+				|| (opt_flags & OPT_GLOBAL) || opt_flags == 0)
-+			&& !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL)
-+		{
-+		    u_compute_hash(hash);
-+		    u_read_undo(NULL, hash, curbuf->b_fname);
-+		}
-+	    }
-+	    curbuf = save_curbuf;
-+	}
-+    }
-+#endif
-+
-     /* 'list', 'number' */
-     else if ((int *)varp == &curwin->w_p_list
- 	  || (int *)varp == &curwin->w_p_nu
- 	  || (int *)varp == &curwin->w_p_rnu)
-     {
--	if (curwin->w_curswant != MAXCOL)
--	    curwin->w_set_curswant = TRUE;
--
- 	/* If 'number' is set, reset 'relativenumber'. */
- 	/* If 'relativenumber' is set, reset 'number'. */
- 	if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
-@@ -7735,8 +7849,6 @@
-     {
- 	if (curwin->w_p_wrap)
- 	    curwin->w_leftcol = 0;
--	if (curwin->w_curswant != MAXCOL)
--	    curwin->w_set_curswant = TRUE;
-     }
- 
- #ifdef FEAT_WINDOWS
-@@ -7763,9 +7875,9 @@
- #ifdef FEAT_BEVAL
-     else if ((int *)varp == &p_beval)
-     {
--	if (p_beval == TRUE)
-+	if (p_beval && !old_value)
- 	    gui_mch_enable_beval_area(balloonEval);
--	else
-+	else if (!p_beval && old_value)
- 	    gui_mch_disable_beval_area(balloonEval);
-     }
- #endif
-@@ -7798,6 +7910,10 @@
- 	/* Only de-activate it here, it will be enabled when changing mode. */
- 	if (p_imdisable)
- 	    im_set_active(FALSE);
-+	else if (State & INSERT)
-+	    /* When the option is set from an autocommand, it may need to take
-+	     * effect right away. */
-+	    im_set_active(curbuf->b_p_iminsert == B_IMODE_IM);
-     }
- #endif
- 
-@@ -7959,31 +8075,8 @@
- 	    curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
- # endif
- 	}
--	if (curwin->w_curswant != MAXCOL)
--	    curwin->w_set_curswant = TRUE;
--    }
--
--    else if ((int *)varp == &p_arshape)
--    {
--	if (curwin->w_curswant != MAXCOL)
--	    curwin->w_set_curswant = TRUE;
-     }
--#endif
- 
--#ifdef FEAT_LINEBREAK
--    if ((int *)varp == &curwin->w_p_lbr)
--    {
--	if (curwin->w_curswant != MAXCOL)
--	    curwin->w_set_curswant = TRUE;
--    }
--#endif
--
--#ifdef FEAT_RIGHTLEFT
--    if ((int *)varp == &curwin->w_p_rl)
--    {
--	if (curwin->w_curswant != MAXCOL)
--	    curwin->w_set_curswant = TRUE;
--    }
- #endif
- 
-     /*
-@@ -7993,7 +8086,9 @@
-     options[opt_idx].flags |= P_WAS_SET;
- 
-     comp_col();			    /* in case 'ruler' or 'showcmd' changed */
--
-+    if (curwin->w_curswant != MAXCOL
-+		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
-+	curwin->w_set_curswant = TRUE;
-     check_redraw(options[opt_idx].flags);
- 
-     return NULL;
-@@ -8036,7 +8131,7 @@
-     need_mouse_correct = TRUE;
- #endif
- 
--    if (curbuf->b_p_sw <= 0)
-+    if (curbuf->b_p_sw < 0)
-     {
- 	errmsg = e_positive;
- 	curbuf->b_p_sw = curbuf->b_p_ts;
-@@ -8420,11 +8515,6 @@
- 	    p_window = Rows - 1;
-     }
- 
--    if (curbuf->b_p_sts < 0)
--    {
--	errmsg = e_positive;
--	curbuf->b_p_sts = 0;
--    }
-     if (curbuf->b_p_ts <= 0)
-     {
- 	errmsg = e_positive;
-@@ -8508,8 +8598,9 @@
-     options[opt_idx].flags |= P_WAS_SET;
- 
-     comp_col();			    /* in case 'columns' or 'ls' changed */
--    if (curwin->w_curswant != MAXCOL)
--	curwin->w_set_curswant = TRUE;  /* in case 'tabstop' changed */
-+    if (curwin->w_curswant != MAXCOL
-+		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
-+	curwin->w_set_curswant = TRUE;
-     check_redraw(options[opt_idx].flags);
- 
-     return errmsg;
-@@ -8523,8 +8614,8 @@
-     long_u	flags;
- {
-     /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
--    int		clear = (flags & P_RCLR) == P_RCLR;
--    int		all = ((flags & P_RALL) == P_RALL || clear);
-+    int		doclear = (flags & P_RCLR) == P_RCLR;
-+    int		all = ((flags & P_RALL) == P_RALL || doclear);
- 
- #ifdef FEAT_WINDOWS
-     if ((flags & P_RSTAT) || all)	/* mark all status lines dirty */
-@@ -8535,7 +8626,7 @@
- 	changed_window_setting();
-     if (flags & P_RBUF)
- 	redraw_curbuf_later(NOT_VALID);
--    if (clear)
-+    if (doclear)
- 	redraw_all_later(CLEAR);
-     else if (all)
- 	redraw_all_later(NOT_VALID);
-@@ -9172,7 +9263,7 @@
-     int		expand;
- {
-     char_u	*s;
--    char_u	buf[MAXPATHL];
-+    char_u	*buf;
- 
-     if (fprintf(fd, "%s %s=", cmd, name) < 0)
- 	return FAIL;
-@@ -9190,9 +9281,16 @@
- 	}
- 	else if (expand)
- 	{
-+	    buf = alloc(MAXPATHL);
-+	    if (buf == NULL)
-+		return FAIL;
- 	    home_replace(NULL, *valuep, buf, MAXPATHL, FALSE);
- 	    if (put_escstr(fd, buf, 2) == FAIL)
-+	    {
-+		vim_free(buf);
- 		return FAIL;
-+	    }
-+	    vim_free(buf);
- 	}
- 	else if (put_escstr(fd, *valuep, 2) == FAIL)
- 	    return FAIL;
-@@ -9645,9 +9743,6 @@
- 	case PV_MA:	return (char_u *)&(curbuf->b_p_ma);
- 	case PV_MOD:	return (char_u *)&(curbuf->b_changed);
- 	case PV_NF:	return (char_u *)&(curbuf->b_p_nf);
--#ifdef FEAT_OSFILETYPE
--	case PV_OFT:	return (char_u *)&(curbuf->b_p_oft);
--#endif
- 	case PV_PI:	return (char_u *)&(curbuf->b_p_pi);
- #ifdef FEAT_TEXTOBJ
- 	case PV_QE:	return (char_u *)&(curbuf->b_p_qe);
-@@ -9756,6 +9851,9 @@
- #ifdef FEAT_SCROLLBIND
-     to->wo_scb = from->wo_scb;
- #endif
-+#ifdef FEAT_CURSORBIND
-+    to->wo_crb = from->wo_crb;
-+#endif
- #ifdef FEAT_SPELL
-     to->wo_spell = from->wo_spell;
- #endif
-@@ -9995,9 +10093,6 @@
- 	    /* Don't copy 'filetype', it must be detected */
- 	    buf->b_p_ft = empty_option;
- #endif
--#ifdef FEAT_OSFILETYPE
--	    buf->b_p_oft = vim_strsave(p_oft);
--#endif
- 	    buf->b_p_pi = p_pi;
- #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
- 	    buf->b_p_cinw = vim_strsave(p_cinw);
-@@ -10011,7 +10106,7 @@
- 	    buf->b_p_smc = p_smc;
- #endif
- #ifdef FEAT_SPELL
--	    buf->b_s.b_p_spc = vim_strsave(p_spf);
-+	    buf->b_s.b_p_spc = vim_strsave(p_spc);
- 	    (void)compile_cap_prog(&buf->b_s);
- 	    buf->b_s.b_p_spf = vim_strsave(p_spf);
- 	    buf->b_s.b_p_spl = vim_strsave(p_spl);
-@@ -10877,7 +10972,8 @@
- shortmess(x)
-     int	    x;
- {
--    return (   vim_strchr(p_shm, x) != NULL
-+    return p_shm != NULL &&
-+	    (   vim_strchr(p_shm, x) != NULL
- 	    || (vim_strchr(p_shm, 'a') != NULL
- 		&& vim_strchr((char_u *)SHM_A, x) != NULL));
- }
-@@ -11284,16 +11380,19 @@
-  * from when editing started (save_file_ff() called).
-  * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
-  * changed and 'binary' is not set.
-- * Don't consider a new, empty buffer to be changed.
-+ * When "ignore_empty" is true don't consider a new, empty buffer to be
-+ * changed.
-  */
-     int
--file_ff_differs(buf)
-+file_ff_differs(buf, ignore_empty)
-     buf_T	*buf;
-+    int		ignore_empty;
- {
-     /* In a buffer that was never loaded the options are not valid. */
-     if (buf->b_flags & BF_NEVERLOADED)
- 	return FALSE;
--    if ((buf->b_flags & BF_NEW)
-+    if (ignore_empty
-+	    && (buf->b_flags & BF_NEW)
- 	    && buf->b_ml.ml_line_count == 1
- 	    && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
- 	return FALSE;
-@@ -11321,3 +11420,23 @@
- {
-     return check_opt_strings(p, p_ff_values, FALSE);
- }
-+
-+/*
-+ * Return the effective shiftwidth value for current buffer, using the
-+ * 'tabstop' value when 'shiftwidth' is zero.
-+ */
-+    long
-+get_sw_value()
-+{
-+    return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts;
-+}
-+
-+/*
-+ * Return the effective softtabstop value for the current buffer, using the
-+ * 'tabstop' value when 'softtabstop' is negative.
-+ */
-+    long
-+get_sts_value()
-+{
-+    return curbuf->b_p_sts < 0 ? get_sw_value() : curbuf->b_p_sts;
-+}
-diff -Naur vim73.orig/src/option.h vim73/src/option.h
---- vim73.orig/src/option.h	2010-07-25 14:15:02.000000000 +0000
-+++ vim73/src/option.h	2012-11-01 20:35:48.000000000 +0000
-@@ -33,7 +33,7 @@
- #     ifdef EBCDIC
- #define DFLT_EFM	"%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
- #     else
--#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
-+#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
- #     endif
- #    endif
- #   endif
-@@ -104,10 +104,11 @@
- #define FO_ONE_LETTER	'1'
- #define FO_WHITE_PAR	'w'	/* trailing white space continues paragr. */
- #define FO_AUTO		'a'	/* automatic formatting */
-+#define FO_REMOVE_COMS	'j'	/* remove comment leaders when joining lines */
- 
- #define DFLT_FO_VI	"vt"
- #define DFLT_FO_VIM	"tcq"
--#define FO_ALL		"tcroq2vlb1mMBn,aw"	/* for do_set() */
-+#define FO_ALL		"tcroq2vlb1mMBn,awj"	/* for do_set() */
- 
- /* characters for the p_cpo option: */
- #define CPO_ALTREAD	'a'	/* ":read" sets alternate file name */
-@@ -169,10 +170,12 @@
- #define CPO_SUBPERCENT	'/'	/* % in :s string uses previous one */
- #define CPO_BACKSL	'\\'	/* \ is not special in [] */
- #define CPO_CHDIR	'.'	/* don't chdir if buffer is modified */
-+#define CPO_SCOLON	';'	/* using "," and ";" will skip over char if
-+				 * cursor would not move */
- /* default values for Vim, Vi and POSIX */
- #define CPO_VIM		"aABceFs"
--#define CPO_VI		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>"
--#define CPO_ALL		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\."
-+#define CPO_VI		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;"
-+#define CPO_ALL		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;"
- 
- /* characters for p_ww option: */
- #define WW_ALL		"bshl<>[],~"
-@@ -226,6 +229,7 @@
- #define GO_MENUS	'm'		/* use menu bar */
- #define GO_NOSYSMENU	'M'		/* don't source system menu */
- #define GO_POINTER	'p'		/* pointer enter/leave callbacks */
-+#define GO_ASELPLUS	'P'		/* autoselectPlus */
- #define GO_RIGHT	'r'		/* use right scrollbar */
- #define GO_VRIGHT	'R'		/* right scrollbar with vert split */
- #define GO_TEAROFF	't'		/* add tear-off menu items */
-@@ -391,6 +395,7 @@
- EXTERN char_u	*p_cpo;		/* 'cpoptions' */
- #ifdef FEAT_CSCOPE
- EXTERN char_u	*p_csprg;	/* 'cscopeprg' */
-+EXTERN int	p_csre;		/* 'cscoperelative' */
- # ifdef FEAT_QUICKFIX
- EXTERN char_u	*p_csqf;	/* 'cscopequickfix' */
- #  define	CSQF_CMDS   "sgdctefi"
-@@ -709,6 +714,7 @@
- #endif
- EXTERN char_u	*p_shq;		/* 'shellquote' */
- EXTERN char_u	*p_sxq;		/* 'shellxquote' */
-+EXTERN char_u	*p_sxe;		/* 'shellxescape' */
- EXTERN char_u	*p_srr;		/* 'shellredir' */
- #ifdef AMIGA
- EXTERN long	p_st;		/* 'shelltype' */
-@@ -816,7 +822,7 @@
- EXTERN char_u	*p_ttym;	/* 'ttymouse' */
- EXTERN unsigned ttym_flags;
- # ifdef IN_OPTION_C
--static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", NULL};
-+static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
- # endif
- # define TTYM_XTERM		0x01
- # define TTYM_XTERM2		0x02
-@@ -824,6 +830,8 @@
- # define TTYM_NETTERM		0x08
- # define TTYM_JSBTERM		0x10
- # define TTYM_PTERM		0x20
-+# define TTYM_URXVT		0x40
-+# define TTYM_SGR		0x80
- #endif
- EXTERN char_u	*p_udir;	/* 'undodir' */
- EXTERN long	p_ul;		/* 'undolevels' */
-@@ -854,7 +862,11 @@
- # define VE_ONEMORE	8
- #endif
- EXTERN long	p_verbose;	/* 'verbose' */
--EXTERN char_u	*p_vfile;	/* 'verbosefile' */
-+#ifdef IN_OPTION_C
-+char_u	*p_vfile = (char_u *)""; /* used before options are initialized */
-+#else
-+extern char_u	*p_vfile;	/* 'verbosefile' */
-+#endif
- EXTERN int	p_warn;		/* 'warn' */
- #ifdef FEAT_CMDL_COMPL
- EXTERN char_u	*p_wop;		/* 'wildoptions' */
-@@ -872,6 +884,7 @@
- EXTERN char_u	*p_ww;		/* 'whichwrap' */
- EXTERN long	p_wc;		/* 'wildchar' */
- EXTERN long	p_wcm;		/* 'wildcharm' */
-+EXTERN long	p_wic;		/* 'wildignorecase' */
- EXTERN char_u	*p_wim;		/* 'wildmode' */
- #ifdef FEAT_WILDMENU
- EXTERN int	p_wmnu;		/* 'wildmenu' */
-@@ -979,9 +992,6 @@
-     , BV_MOD
-     , BV_MPS
-     , BV_NF
--#ifdef FEAT_OSFILETYPE
--    , BV_OFT
--#endif
- #ifdef FEAT_COMPL_FUNC
-     , BV_OFU
- #endif
-diff -Naur vim73.orig/src/os_amiga.c vim73/src/os_amiga.c
---- vim73.orig/src/os_amiga.c	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/os_amiga.c	2012-11-01 20:35:47.000000000 +0000
-@@ -191,16 +191,16 @@
- }
- 
- /*
-- * Return amount of memory still available.
-+ * Return amount of memory still available in Kbyte.
-  */
-     long_u
- mch_avail_mem(special)
-     int	    special;
- {
- #ifdef __amigaos4__
--    return (long_u)AvailMem(MEMF_ANY);
-+    return (long_u)AvailMem(MEMF_ANY) >> 10;
- #else
--    return (long_u)AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY);
-+    return (long_u)(AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY)) >> 10;
- #endif
- }
- 
-@@ -1022,7 +1022,7 @@
- 
-     /* insure longword alignment */
- #ifdef __amigaos4__
--    if(!(id = AllocDosObject(DOS_INFODATA, 0)))
-+    if (!(id = AllocDosObject(DOS_INFODATA, 0)))
- 	goto out;
- #else
-     id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
-diff -Naur vim73.orig/src/os_mac_conv.c vim73/src/os_mac_conv.c
---- vim73.orig/src/os_mac_conv.c	2010-07-14 11:50:20.000000000 +0000
-+++ vim73/src/os_mac_conv.c	2012-11-01 20:35:43.000000000 +0000
-@@ -14,6 +14,8 @@
-  */
- 
- #define NO_X11_INCLUDES
-+#define BalloonEval int   /* used in header files */
-+
- #include "vim.h"
- #ifndef FEAT_GUI_MAC
- # include <CoreServices/CoreServices.h>
-@@ -75,7 +77,7 @@
- 	*unconvlenp = 0;
-     cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
- 
--    if(cfstr == NULL)
-+    if (cfstr == NULL)
- 	fprintf(stderr, "Encoding failed\n");
-     /* When conversion failed, try excluding bytes from the end, helps when
-      * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
-diff -Naur vim73.orig/src/os_macosx.m vim73/src/os_macosx.m
---- vim73.orig/src/os_macosx.m	2010-08-15 10:56:50.000000000 +0000
-+++ vim73/src/os_macosx.m	2012-11-01 20:35:42.000000000 +0000
-@@ -15,6 +15,11 @@
-     Error: MACOS 9 is no longer supported in Vim 7
- #endif
- 
-+/* Avoid a conflict for the definition of Boolean between Mac header files and
-+ * X11 header files. */
-+#define NO_X11_INCLUDES
-+#define BalloonEval int   /* used in header files */
-+
- #include "vim.h"
- #import <Cocoa/Cocoa.h>
- 
-@@ -23,9 +28,9 @@
-  * Clipboard support for the console.
-  * Don't include this when building the GUI version, the functions in
-  * gui_mac.c are used then.  TODO: remove those instead?
-- * But for MacVim we need these ones.
-+ * But for MacVim we do need these ones.
-  */
--#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI) || defined(FEAT_GUI_MACVIM))
-+#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI_ENABLED) || defined(FEAT_GUI_MACVIM))
- 
- /* Used to identify clipboard data copied from Vim. */
- 
-@@ -60,7 +65,7 @@
-     NSString *bestType = [pb availableTypeFromArray:supportedTypes];
-     if (!bestType) goto releasepool;
- 
--    int motion_type = MCHAR;
-+    int motion_type = MAUTO;
-     NSString *string = nil;
- 
-     if ([bestType isEqual:VimPboardType])
-@@ -84,9 +89,7 @@
- 
-     if (!string)
-     {
--	/* Use NSStringPboardType.  The motion type is set to line-wise if the
--	 * string contains at least one EOL character, otherwise it is set to
--	 * character-wise (block-wise is never used).
-+	/* Use NSStringPboardType.  The motion type is detected automatically.
- 	 */
- 	NSMutableString *mstring =
- 		[[pb stringForType:NSStringPboardType] mutableCopy];
-@@ -103,19 +106,13 @@
- 					   options:0 range:range];
- 	}
- 
--	/* Scan for newline character to decide whether the string should be
--	 * pasted line-wise or character-wise.
--	 */
--	motion_type = MCHAR;
--	if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
--	    motion_type = MLINE;
--
- 	string = mstring;
-     }
- 
-+    /* Default to MAUTO, uses MCHAR or MLINE depending on trailing NL. */
-     if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
- 	    || MAUTO == motion_type))
--	motion_type = MCHAR;
-+	motion_type = MAUTO;
- 
-     char_u *str = (char_u*)[string UTF8String];
-     int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
-diff -Naur vim73.orig/src/os_msdos.c vim73/src/os_msdos.c
---- vim73.orig/src/os_msdos.c	2010-05-15 11:04:07.000000000 +0000
-+++ vim73/src/os_msdos.c	2012-11-01 20:35:47.000000000 +0000
-@@ -21,7 +21,6 @@
-  * Some functions are also used for Win16 (MS-Windows 3.1).
-  */
- 
--#include "vimio.h"
- #include "vim.h"
- 
- #include <conio.h>
-@@ -551,15 +550,15 @@
- #endif
- 
- /*
-- * Return amount of memory currently available.
-+ * Return amount of memory currently available in Kbyte.
-  */
-     long_u
- mch_avail_mem(int special)
- {
- #ifdef DJGPP
--    return _go32_dpmi_remaining_virtual_memory();
-+    return _go32_dpmi_remaining_virtual_memory() >> 10;
- #else
--    return coreleft();
-+    return coreleft() >> 10;
- #endif
- }
- 
-@@ -2233,7 +2232,7 @@
-     void
- clip_mch_request_selection(VimClipboard *cbd)
- {
--    int		type = MCHAR;
-+    int		type = MAUTO;
-     char_u	*pAllocated = NULL;
-     char_u	*pClipText = NULL;
-     int		clip_data_format = 0;
-@@ -2281,14 +2280,12 @@
- 	{
- 	    clip_data_format = CF_TEXT;
- 	    pClipText = pAllocated;
--	    type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
- 	}
- 
- 	else if ((pAllocated = Win16GetClipboardData(CF_OEMTEXT)) != NULL)
- 	{
- 	    clip_data_format = CF_OEMTEXT;
- 	    pClipText = pAllocated;
--	    type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
- 	}
- 
- 	/* Did we get anything? */
-diff -Naur vim73.orig/src/os_mswin.c vim73/src/os_mswin.c
---- vim73.orig/src/os_mswin.c	2010-07-27 19:39:05.000000000 +0000
-+++ vim73/src/os_mswin.c	2012-11-01 20:35:44.000000000 +0000
-@@ -22,7 +22,6 @@
- # endif
- #endif
- 
--#include "vimio.h"
- #include "vim.h"
- 
- #ifdef WIN16
-@@ -31,7 +30,6 @@
- # include <string.h>
- #endif
- #include <sys/types.h>
--#include <errno.h>
- #include <signal.h>
- #include <limits.h>
- #include <process.h>
-@@ -595,7 +593,7 @@
- 				     gui.starting ? (char_u *)_("Message") :
- #endif
- 					     (char_u *)_("Error"),
--				     p, (char_u *)_("&Ok"), 1, NULL);
-+				     p, (char_u *)_("&Ok"), 1, NULL, FALSE);
- 		break;
- 	    }
- 	ga_clear(&error_ga);
-@@ -817,7 +815,11 @@
-     BOOL fRunTimeLinkSuccess = FALSE;
- 
-     // Get a handle to the DLL module.
-+# ifdef WIN16
-     hinstLib = LoadLibrary(libname);
-+# else
-+    hinstLib = vimLoadLib(libname);
-+# endif
- 
-     // If the handle is valid, try to get the function address.
-     if (hinstLib != NULL)
-@@ -1103,132 +1105,6 @@
-     return ret;
- }
- 
--#if defined(FEAT_MBYTE) || defined(PROTO)
--/*
-- * Note: the following two functions are only guaranteed to work when using
-- * valid MS-Windows codepages or when iconv() is available.
-- */
--
--/*
-- * Convert "str" from 'encoding' to UTF-16.
-- * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
-- * Output is returned as an allocated string.  "*lenp" is set to the length of
-- * the result.  A trailing NUL is always added.
-- * Returns NULL when out of memory.
-- */
--    short_u *
--enc_to_utf16(char_u *str, int *lenp)
--{
--    vimconv_T	conv;
--    WCHAR	*ret;
--    char_u	*allocbuf = NULL;
--    int		len_loc;
--    int		length;
--
--    if (lenp == NULL)
--    {
--	len_loc = (int)STRLEN(str) + 1;
--	lenp = &len_loc;
--    }
--
--    if (enc_codepage > 0)
--    {
--	/* We can do any CP### -> UTF-16 in one pass, and we can do it
--	 * without iconv() (convert_* may need iconv). */
--	MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
--    }
--    else
--    {
--	/* Use "latin1" by default, we might be called before we have p_enc
--	 * set up.  Convert to utf-8 first, works better with iconv().  Does
--	 * nothing if 'encoding' is "utf-8". */
--	conv.vc_type = CONV_NONE;
--	if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
--						   (char_u *)"utf-8") == FAIL)
--	    return NULL;
--	if (conv.vc_type != CONV_NONE)
--	{
--	    str = allocbuf = string_convert(&conv, str, lenp);
--	    if (str == NULL)
--		return NULL;
--	}
--	convert_setup(&conv, NULL, NULL);
--
--	length = utf8_to_utf16(str, *lenp, NULL, NULL);
--	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
--	if (ret != NULL)
--	{
--	    utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
--	    ret[length] = 0;
--	}
--
--	vim_free(allocbuf);
--    }
--
--    *lenp = length;
--    return (short_u *)ret;
--}
--
--/*
-- * Convert an UTF-16 string to 'encoding'.
-- * Input in "str" with length (counted in wide characters) "*lenp".  When
-- * "lenp" is NULL, use wcslen().
-- * Output is returned as an allocated string.  If "*lenp" is not NULL it is
-- * set to the length of the result.
-- * Returns NULL when out of memory.
-- */
--    char_u *
--utf16_to_enc(short_u *str, int *lenp)
--{
--    vimconv_T	conv;
--    char_u	*utf8_str = NULL, *enc_str = NULL;
--    int		len_loc;
--
--    if (lenp == NULL)
--    {
--	len_loc = (int)wcslen(str) + 1;
--	lenp = &len_loc;
--    }
--
--    if (enc_codepage > 0)
--    {
--	/* We can do any UTF-16 -> CP### in one pass. */
--	int length;
--
--	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
--					    (LPSTR *)&enc_str, &length, 0, 0);
--	*lenp = length;
--	return enc_str;
--    }
--
--    /* Avoid allocating zero bytes, it generates an error message. */
--    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
--    if (utf8_str != NULL)
--    {
--	*lenp = utf16_to_utf8(str, *lenp, utf8_str);
--
--	/* We might be called before we have p_enc set up. */
--	conv.vc_type = CONV_NONE;
--	convert_setup(&conv, (char_u *)"utf-8",
--					    p_enc? p_enc: (char_u *)"latin1");
--	if (conv.vc_type == CONV_NONE)
--	{
--	    /* p_enc is utf-8, so we're done. */
--	    enc_str = utf8_str;
--	}
--	else
--	{
--	    enc_str = string_convert(&conv, utf8_str, lenp);
--	    vim_free(utf8_str);
--	}
--
--	convert_setup(&conv, NULL, NULL);
--    }
--
--    return enc_str;
--}
--#endif /* FEAT_MBYTE */
--
- /*
-  * Wait for another process to Close the Clipboard.
-  * Returns TRUE for success.
-@@ -1408,9 +1284,9 @@
-     {
- 	char_u *temp_clipboard;
- 
--	/* If the type is not known guess it. */
-+	/* If the type is not known detect it. */
- 	if (metadata.type == -1)
--	    metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
-+	    metadata.type = MAUTO;
- 
- 	/* Translate <CR><NL> into <NL>. */
- 	temp_clipboard = crnl_to_nl(str, &str_size);
-@@ -1434,32 +1310,6 @@
- #endif
- }
- 
--#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
--/*
-- * Convert from the active codepage to 'encoding'.
-- * Input is "str[str_size]".
-- * The result is in allocated memory: "out[outlen]".  With terminating NUL.
-- */
--    void
--acp_to_enc(str, str_size, out, outlen)
--    char_u	*str;
--    int		str_size;
--    char_u	**out;
--    int		*outlen;
--
--{
--    LPWSTR	widestr;
--
--    MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
--    if (widestr != NULL)
--    {
--	++*outlen;	/* Include the 0 after the string */
--	*out = utf16_to_enc((short_u *)widestr, outlen);
--	vim_free(widestr);
--    }
--}
--#endif
--
- /*
-  * Send the current selection to the clipboard.
-  */
-@@ -1624,6 +1474,158 @@
- 
- #endif /* FEAT_CLIPBOARD */
- 
-+#if defined(FEAT_MBYTE) || defined(PROTO)
-+/*
-+ * Note: the following two functions are only guaranteed to work when using
-+ * valid MS-Windows codepages or when iconv() is available.
-+ */
-+
-+/*
-+ * Convert "str" from 'encoding' to UTF-16.
-+ * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
-+ * Output is returned as an allocated string.  "*lenp" is set to the length of
-+ * the result.  A trailing NUL is always added.
-+ * Returns NULL when out of memory.
-+ */
-+    short_u *
-+enc_to_utf16(char_u *str, int *lenp)
-+{
-+    vimconv_T	conv;
-+    WCHAR	*ret;
-+    char_u	*allocbuf = NULL;
-+    int		len_loc;
-+    int		length;
-+
-+    if (lenp == NULL)
-+    {
-+	len_loc = (int)STRLEN(str) + 1;
-+	lenp = &len_loc;
-+    }
-+
-+    if (enc_codepage > 0)
-+    {
-+	/* We can do any CP### -> UTF-16 in one pass, and we can do it
-+	 * without iconv() (convert_* may need iconv). */
-+	MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
-+    }
-+    else
-+    {
-+	/* Use "latin1" by default, we might be called before we have p_enc
-+	 * set up.  Convert to utf-8 first, works better with iconv().  Does
-+	 * nothing if 'encoding' is "utf-8". */
-+	conv.vc_type = CONV_NONE;
-+	if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
-+						   (char_u *)"utf-8") == FAIL)
-+	    return NULL;
-+	if (conv.vc_type != CONV_NONE)
-+	{
-+	    str = allocbuf = string_convert(&conv, str, lenp);
-+	    if (str == NULL)
-+		return NULL;
-+	}
-+	convert_setup(&conv, NULL, NULL);
-+
-+	length = utf8_to_utf16(str, *lenp, NULL, NULL);
-+	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
-+	if (ret != NULL)
-+	{
-+	    utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
-+	    ret[length] = 0;
-+	}
-+
-+	vim_free(allocbuf);
-+    }
-+
-+    *lenp = length;
-+    return (short_u *)ret;
-+}
-+
-+/*
-+ * Convert an UTF-16 string to 'encoding'.
-+ * Input in "str" with length (counted in wide characters) "*lenp".  When
-+ * "lenp" is NULL, use wcslen().
-+ * Output is returned as an allocated string.  If "*lenp" is not NULL it is
-+ * set to the length of the result.
-+ * Returns NULL when out of memory.
-+ */
-+    char_u *
-+utf16_to_enc(short_u *str, int *lenp)
-+{
-+    vimconv_T	conv;
-+    char_u	*utf8_str = NULL, *enc_str = NULL;
-+    int		len_loc;
-+
-+    if (lenp == NULL)
-+    {
-+	len_loc = (int)wcslen(str) + 1;
-+	lenp = &len_loc;
-+    }
-+
-+    if (enc_codepage > 0)
-+    {
-+	/* We can do any UTF-16 -> CP### in one pass. */
-+	int length;
-+
-+	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
-+					    (LPSTR *)&enc_str, &length, 0, 0);
-+	*lenp = length;
-+	return enc_str;
-+    }
-+
-+    /* Avoid allocating zero bytes, it generates an error message. */
-+    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
-+    if (utf8_str != NULL)
-+    {
-+	*lenp = utf16_to_utf8(str, *lenp, utf8_str);
-+
-+	/* We might be called before we have p_enc set up. */
-+	conv.vc_type = CONV_NONE;
-+	convert_setup(&conv, (char_u *)"utf-8",
-+					    p_enc? p_enc: (char_u *)"latin1");
-+	if (conv.vc_type == CONV_NONE)
-+	{
-+	    /* p_enc is utf-8, so we're done. */
-+	    enc_str = utf8_str;
-+	}
-+	else
-+	{
-+	    enc_str = string_convert(&conv, utf8_str, lenp);
-+	    vim_free(utf8_str);
-+	}
-+
-+	convert_setup(&conv, NULL, NULL);
-+    }
-+
-+    return enc_str;
-+}
-+#endif /* FEAT_MBYTE */
-+
-+#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
-+/*
-+ * Convert from the active codepage to 'encoding'.
-+ * Input is "str[str_size]".
-+ * The result is in allocated memory: "out[outlen]".  With terminating NUL.
-+ */
-+    void
-+acp_to_enc(str, str_size, out, outlen)
-+    char_u	*str;
-+    int		str_size;
-+    char_u	**out;
-+    int		*outlen;
-+
-+{
-+    LPWSTR	widestr;
-+
-+    MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
-+    if (widestr != NULL)
-+    {
-+	++*outlen;	/* Include the 0 after the string */
-+	*out = utf16_to_enc((short_u *)widestr, outlen);
-+	vim_free(widestr);
-+    }
-+}
-+#endif
-+
- 
- /*
-  * Debugging helper: expose the MCH_WRITE_DUMP stuff to other modules
-@@ -1779,7 +1781,7 @@
- }
- 
- /* Attempt to make this work for old and new compilers */
--#if !defined(_MSC_VER) || (_MSC_VER < 1300) || !defined(INT_PTR)
-+#if !defined(_WIN64) && (!defined(_MSC_VER) || _MSC_VER < 1300)
- # define PDP_RETVAL BOOL
- #else
- # define PDP_RETVAL INT_PTR
-@@ -1854,12 +1856,12 @@
- {
-     MSG msg;
- 
--    while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
-+    while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
-     {
--	if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
-+	if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg))
- 	{
- 	    TranslateMessage(&msg);
--	    DispatchMessage(&msg);
-+	    pDispatchMessage(&msg);
- 	}
-     }
-     return !*bUserAbort;
-@@ -1867,7 +1869,7 @@
- 
- #ifndef FEAT_GUI
- 
--    static UINT CALLBACK
-+    static UINT_PTR CALLBACK
- PrintHookProc(
- 	HWND hDlg,	// handle to dialog box
- 	UINT uiMsg,	// message identifier
-@@ -3130,10 +3132,10 @@
- {
-     MSG msg;
- 
--    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
-+    while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
-     {
- 	TranslateMessage(&msg);
--	DispatchMessage(&msg);
-+	pDispatchMessage(&msg);
-     }
- }
- 
-diff -Naur vim73.orig/src/os_qnx.c vim73/src/os_qnx.c
---- vim73.orig/src/os_qnx.c	2010-05-24 09:42:44.000000000 +0000
-+++ vim73/src/os_qnx.c	2012-11-01 20:35:43.000000000 +0000
-@@ -24,10 +24,10 @@
- #if defined(FEAT_GUI_PHOTON)
-     PhChannelParms_t parms;
- 
--    memset( &parms, 0, sizeof( parms ) );
-+    memset(&parms, 0, sizeof(parms));
-     parms.flags = Ph_DYNAMIC_BUFFER;
- 
--    is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
-+    is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
- #endif
- }
- 
-@@ -39,8 +39,8 @@
- /* Turn on the clipboard for a console vim when photon is running */
- void qnx_clip_init()
- {
--    if( is_photon_available == TRUE && !gui.in_use)
--	clip_init( TRUE );
-+    if (is_photon_available == TRUE && !gui.in_use)
-+	clip_init(TRUE);
- }
- 
- /*****************************************************************************/
-@@ -48,32 +48,32 @@
- 
- /* No support for owning the clipboard */
- int
--clip_mch_own_selection( VimClipboard *cbd )
-+clip_mch_own_selection(VimClipboard *cbd)
- {
-     return FALSE;
- }
- 
- void
--clip_mch_lose_selection( VimClipboard *cbd )
-+clip_mch_lose_selection(VimClipboard *cbd)
- {
- }
- 
- void
--clip_mch_request_selection( VimClipboard *cbd )
-+clip_mch_request_selection(VimClipboard *cbd)
- {
-     int		    type = MLINE, clip_length = 0, is_type_set = FALSE;
-     void	    *cbdata;
-     PhClipHeader    *clip_header;
-     char_u	    *clip_text = NULL;
- 
--    cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
--    if( cbdata != NULL )
-+    cbdata = PhClipboardPasteStart(PhInputGroup(NULL));
-+    if (cbdata != NULL)
-     {
- 	/* Look for the vim specific clip first */
--	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
--	if( clip_header != NULL && clip_header->data != NULL )
-+	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_VIM);
-+	if (clip_header != NULL && clip_header->data != NULL)
- 	{
--	    switch( *(char *) clip_header->data )
-+	    switch(*(char *) clip_header->data)
- 	    {
- 		default: /* fallthrough to line type */
- 		case 'L': type = MLINE; break;
-@@ -86,27 +86,27 @@
- 	}
- 
- 	/* Try for just normal text */
--	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
--	if( clip_header != NULL )
-+	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_TEXT);
-+	if (clip_header != NULL)
- 	{
- 	    clip_text = clip_header->data;
- 	    clip_length  = clip_header->length - 1;
- 
--	    if( clip_text != NULL && is_type_set == FALSE )
--		type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
-+	    if (clip_text != NULL && is_type_set == FALSE)
-+		type = MAUTO;
- 	}
- 
--	if( (clip_text != NULL) && (clip_length > 0) )
-+	if ((clip_text != NULL) && (clip_length > 0))
- 	{
--	    clip_yank_selection( type, clip_text, clip_length, cbd );
-+	    clip_yank_selection(type, clip_text, clip_length, cbd);
- 	}
- 
--	PhClipboardPasteFinish( cbdata );
-+	PhClipboardPasteFinish(cbdata);
-     }
- }
- 
- void
--clip_mch_set_selection( VimClipboard *cbd )
-+clip_mch_set_selection(VimClipboard *cbd)
- {
-     int type;
-     long_u  len;
-@@ -114,31 +114,31 @@
-     PhClipHeader clip_header[2];
- 
-     /* Prevent recursion from clip_get_selection() */
--    if( cbd->owned == TRUE )
-+    if (cbd->owned == TRUE)
- 	return;
- 
-     cbd->owned = TRUE;
--    clip_get_selection( cbd );
-+    clip_get_selection(cbd);
-     cbd->owned = FALSE;
- 
--    type = clip_convert_selection( &str, &len, cbd );
--    if( type >= 0 )
-+    type = clip_convert_selection(&str, &len, cbd);
-+    if (type >= 0)
-     {
--	text_clip = lalloc( len + 1, TRUE ); /* Normal text */
-+	text_clip = lalloc(len + 1, TRUE); /* Normal text */
- 
--	if( text_clip && vim_clip )
-+	if (text_clip && vim_clip)
- 	{
--	    memset( clip_header, 0, sizeof( clip_header ) );
-+	    memset(clip_header, 0, sizeof(clip_header));
- 
--	    STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
--	    clip_header[0].length = sizeof( vim_clip );
-+	    STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
-+	    clip_header[0].length = sizeof(vim_clip);
- 	    clip_header[0].data   = vim_clip;
- 
--	    STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
-+	    STRNCPY(clip_header[1].type, CLIP_TYPE_TEXT, 8);
- 	    clip_header[1].length = len + 1;
- 	    clip_header[1].data   = text_clip;
- 
--	    switch( type )
-+	    switch(type)
- 	    {
- 		default: /* fallthrough to MLINE */
- 		case MLINE:	*vim_clip = 'L'; break;
-@@ -148,14 +148,14 @@
- #endif
- 	    }
- 
--	    vim_strncpy( text_clip, str, len );
-+	    vim_strncpy(text_clip, str, len);
- 
- 	    vim_clip[ 1 ] = NUL;
- 
--	    PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
-+	    PhClipboardCopy(PhInputGroup(NULL), 2, clip_header);
- 	}
--	vim_free( text_clip );
-+	vim_free(text_clip);
-     }
--    vim_free( str );
-+    vim_free(str);
- }
- #endif
-diff -Naur vim73.orig/src/os_riscos.c vim73/src/os_riscos.c
---- vim73.orig/src/os_riscos.c	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/os_riscos.c	1970-01-01 00:00:00.000000000 +0000
-@@ -1,1292 +0,0 @@
--/* vi:set ts=8 sts=4 sw=4:
-- *
-- * VIM - Vi IMproved	by Bram Moolenaar
-- *
-- * Do ":help uganda"  in Vim to read copying and usage conditions.
-- * Do ":help credits" in Vim to see a list of people who contributed.
-- * See README.txt for an overview of the Vim source code.
-- */
--
--#include "vim.h"
--
--/*
-- * os_riscos.c
-- *
-- * Thomas Leonard <tal197@ecs.soton.ac.uk>
-- */
--
--const char *__dynamic_da_name = "Vim heap"; /* Enable and name our dynamic area */
--int ro_line_mode = TRUE;  /* For Ex mode we much echo chars to the screen ourselves */
--int windowed;		/* Flag - are we running inside a text window? */
--int WinLeft, WinTop;	/* We might be started inside a text window */
--int ScrollTop;		/* Make cursor movements relative to ScrollTop. */
--
--int old_escape_state = -1;
--int old_cursor_state = -1;
--
--#define rgb(r,g,b) ((b<<24) + (g<<16) + (r<<8))
--#define NORMAL_FG 0x00000000
--#define NORMAL_BG 0xffffffff
--
--/* Convert a DOS colour number to an RGB palette entry.
-- * Mappings from X11 rgb/txt file.
-- */
--    static int
--map_colour(dos)
--    int dos;		/* Standard DOS colour number. */
--{
--    switch (dos)
--    {
--	case 0: return 0;			/* Black */
--	case 1: return rgb(0,0,139);		/* DarkBlue */
--	case 2: return rgb(0,100,0);		/* DarkGreen */
--	case 3: return rgb(0,139,139);		/* DarkCyan */
--	case 4: return rgb(139,0,0);		/* DarkRed */
--	case 5: return rgb(139,0,139);		/* DarkMagenta */
--	case 6: return rgb(165,42,42);		/* Brown, DarkYellow */
--	case 7: return rgb(211,211,211);	/* LightGray, LightGrey, Gray, Grey */
--	case 8: return rgb(169,169,169);	/* DarkGray, DarkGrey */
--	case 9: return rgb(173,216,230);	/* Blue, LightBlue */
--	case 10: return rgb(144,238,144);	/* Green, LightGreen */
--	case 11: return rgb(224,255,255);	/* Cyan, LightCyan */
--	case 12: return rgb(255,0,0);		/* Red, LightRed */
--	case 13: return rgb(255,0,255);		/* Magenta, LightMagenta */
--	case 14: return rgb(255,255,0);		/* Yellow, LightYellow */
--	case 15: return rgb(255,255,255);	/* White */
--    }
--    return rgb(100,100,100);
--}
--
--    static void
--text_fg(fg)
--    int fg;		/* Foregound colour in the form &BBGGRR00 */
--{
--    xswi(ColourTrans_SetTextColour, fg, 0, 0, 0);
--}
--
--    static void
--text_bg(bg)
--    int		bg;	/* Backgound colour in the form &BBGGRR00 */
--{
--    xswi(ColourTrans_SetTextColour, bg, 0, 0, 1 << 7);
--}
--
--#define OUT_NORMAL 0
--#define OUT_NUMBER 1		/* Reading in a number */
--
--    void
--mch_write(s, len)
--    char_u  *s;
--    int	    len;
--{
--    static int mode = OUT_NORMAL;
--    static int x, y;			/* For reading numbers in. */
--
--    if (!term_console)
--    {
--	/* Maybe we are running Vim remotely - don't interpret chars */
--	while (len--)
--	{
--	    char_u c = *s++;
--	    swi(OS_WriteC, c);
--	    /* We might need to send a CR too. This shouldn't
--	     * hurt if we don't need it, should it?
--	     */
--	    if (c == 10)
--		swi(OS_WriteI + 13);
--	}
--	return;
--    }
--
--    while (len--)
--    {
--	char_u c = *s++;
--	switch (mode)
--	{
--	    case OUT_NUMBER:
--		if (c < '0' || c > '9')
--		{
--		    mode = OUT_NORMAL;
--		}
--		else
--		{
--		    x = (x * 10) + c - '0';
--		    continue;
--		}
--	    /* note: no break here! */
--
--	    case OUT_NORMAL:
--		switch (c)
--		{
--		    case 1:
--			/* Number (in decimal) follows. */
--			mode = OUT_NUMBER;
--			y = x;
--			x = 0;
--			break;
--		    case 2:
--			/* Position cursor. */
--			swi(OS_WriteI + 31);
--			swi(OS_WriteC, x);
--			swi(OS_WriteC, y - ScrollTop);
--			break;
--		    case 3:
--			/* Set scroll region. */
--			if (x == Rows -1 && y == 0 && !windowed)
--			{
--			    /* Whole screen - remove text window.
--			     * This is MUCH faster.
--			     */
--			    swi(OS_WriteI + 26);
--			}
--			else
--			{
--			    /* Create a text window. */
--			    swi(OS_WriteI + 28);
--			    swi(OS_WriteC, WinLeft);
--			    swi(OS_WriteC, WinTop + x);
--			    swi(OS_WriteC, WinLeft + Columns - 1);
--			    swi(OS_WriteC, WinTop + y);
--			}
--			ScrollTop = y;
--			break;
--		    case 4:
--			/* Normal mode. */
--			text_fg(NORMAL_FG);
--			text_bg(NORMAL_BG);
--			break;
--		    case 5:
--			/* Reverse mode. */
--			text_fg(NORMAL_BG);
--			text_bg(NORMAL_FG);
--			break;
--		    case 10:
--			swi(OS_NewLine);
--			break;
--		    case 14:
--			/* Cursor invisible. */
--			swi(OS_WriteN,
--			     "\027\001\000\000\000\000\000\000\000\000",
--			     10);
--			break;
--		    case 15:
--			/* Cursor visible. */
--			swi(OS_WriteN,
--			     "\027\001\002\000\000\000\000\000\000\000",
--			     10);
--			break;
--		    case 16:
--			/* Cursor very visible (flash) */
--			swi(OS_WriteN,
--			     "\027\001\003\000\000\000\000\000\000\000",
--			     10);
--		    case 17:
--			/* Set foreground colour. */
--			text_fg(map_colour(x));
--			break;
--		    case 18:
--			/* Set background colour. */
--			text_bg(map_colour(x));
--			break;
--		    case 19:
--			/* Scroll text down. */
--			swi(OS_WriteN,
--			     "\027\007\000\002\000\000\000\000\000\000",
--			     10);
--			break;
--		    default:
--			swi(OS_WriteC, c);
--		}
--		continue;
--
--	    default:
--		printf("[output error]");
--		mode = OUT_NORMAL;
--	}
--    }
--}
--
--/*
-- * mch_inchar(): low level input funcion.
-- * Get a characters from the keyboard.
-- * Return the number of characters that are available.
-- * If wtime == 0 do not wait for characters.
-- * If wtime == n wait n msecs for characters.
-- * If wtime == -1 wait forever for characters.
-- *
-- * TODO: call convert_input() for 'fileencoding' to 'encoding' conversion.
-- */
--    int
--mch_inchar(buf, maxlen, wtime, tb_change_cnt)
--    char_u  *buf;
--    int	    maxlen;
--    long    wtime;
--    int	    tb_change_cnt;
--{
--    int got=0;
--    unsigned int start_time = clock();
--
--    if (ro_line_mode)
--    {
--	/* We're probably in Ex mode - get whole lines at a time. */
--
--	static char_u	line_buffer[256];
--	static int	remaining_chars = 0;
--	static int	buf_pos = 0;
--
--	/* Do we need to fetch another line? */
--	if (remaining_chars == 0)
--	{
--	    int		old_esc_state;
--	    swi(OS_Byte, 200, 1, 0xfe);
--	    old_esc_state = r1;
--
--	    buf_pos = 0;
--	    if (xswi(OS_ReadLine, line_buffer, 255, 0, 255) & (c_flag | v_flag))
--	    {
--		got_int = TRUE;	    /* ESC pressed */
--		r1 = 0;
--	    }
--	    line_buffer[r1] = 13;
--	    remaining_chars = r1 + 1;	/* Count CR as part of input */
--
--	    swi(OS_Byte, 200, old_esc_state, 0);
--	}
--
--	/* Can we send the rest of the buffer back in one go? */
--	if (remaining_chars <= maxlen)
--	{
--	    int	    got = remaining_chars;
--
--	    memcpy(buf, line_buffer + buf_pos, got);
--	    remaining_chars = 0;
--	    return  got;
--	}
--
--	/* Send as much as we can */
--	memcpy(buf, line_buffer + buf_pos, maxlen);
--	buf_pos += maxlen;
--	remaining_chars -= maxlen;
--
--	return maxlen;
--    }
--
--    if (!term_console)
--    {
--	/* Use OS_ReadC for all input.
--	 * Avoids problems with remote access getting interference from
--	 * the keyboard.
--	 */
--	if (wtime == 0)
--	    return 0;	    /* Ignore quick key checks */
--
--	if (xswi(OS_ReadC) & c_flag)
--	{
--	    got_int = TRUE;	/* ESC pressed - can this happen? */
--	    swi(OS_Byte, 124);	/* Clear Escape state */
--	    r0 = 0x1b;		/* It *might* not have been Escape! */
--	}
--	buf[0] = r0;
--	return 1;
--    }
--
--    /*
--     * OK, here's the plan:
--     *
--     * 1) Wait until wtime expires or we get a key
--     * 2) Get keys until the keyboard buffer is empty or buf is full
--     */
--
--    while (xswi(OS_Byte,145,0) & c_flag)
--    {
--	/* Nothing at all in the keyboard buffer.
--	 * Has our time expired yet?
--	 */
--	if ( (wtime != -1) && (clock() - start_time) >= wtime )
--	    return 0;		/* Nothing read - giving up */
--    }
--
--    /* We've got one char (in r2) - are there any more? */
--
--    while (got < maxlen)
--    {
--	buf[got++] = r2;
--
--	if (xswi(OS_Byte,145,0) & c_flag)
--	    return got;		/* Keyboard buffer empty */
--    }
--    return got;			/* buf is full */
--}
--
--/*
-- * return non-zero if a character is available
-- */
--    int
--mch_char_avail()
--{
--    if (!term_console)
--	return 0;	    /* Can't tell */
--    if (xswi(OS_Byte, 152, 0) & c_flag)
--	return 0;
--    return 1;
--}
--
--/* Find out how much free memory we have.
-- * I don't know how to work this out exactly but, since we can claim
-- * more memory from the OS, let's just report the free pool size.
-- * Dynamic area 6 doesn't exist pre 3.6 according to StrongHelp, so
-- * we'll use Wimp_SlotSize. If that fails (outside the desktop?)
-- * then just return a big number and hope.
-- */
--    long_u
--mch_avail_mem(special)
--    int special;
--{
--    if (xswi(Wimp_SlotSize, -1, -1) & v_flag)
--	return 0x7fffffff;
--    return r2;
--}
--
--    void
--mch_delay(msec, ignoreinput)
--    long	msec;
--    int		ignoreinput;
--{
--    int		start_time, time_now;
--    int		csec = msec / 10;
--
--    swi(OS_ReadMonotonicTime);
--    start_time = r0;
--
--    for (;;)
--    {
--	swi(OS_ReadMonotonicTime);
--	time_now = r0;
--	if (time_now - start_time > csec)
--	    return;
--#ifdef FEAT_GUI
--	/* In the GUI, allow other programs to run while waiting. */
--	if (gui.in_use)
--	    gui_mch_wait_for_chars(start_time + csec);
--#endif
--    }
--}
--
--/*
-- * If the machine has job control, use it to suspend the program,
-- * otherwise fake it by starting a new shell.
-- */
--    void
--mch_suspend()
--{
--    suspend_shell();
--}
--
--    void
--mch_init()
--{
--    /*
--     * Read window size first. Calls to mch_get_shellsize() will
--     * simply return these values in future so that setting the
--     * text window (used for scrolling) won't give strange results.
--     */
--
--    int buf[7] = {132, 135, 256, 257, 1, 2, -1};
--
--    /* Command windows are no longer forced open, since if we are
--     * in the desktop then we'll use the GUI version.
--     * Opening a command window here messes up the GUI version startup
--     */
--#ifndef FEAT_GUI
--    swi(OS_WriteI);
--#endif
--    swi(OS_ReadVduVariables, buf, buf);
--    WinLeft = buf[0];
--    WinTop  = buf[1];
--    Columns = buf[2];
--    Rows    = buf[3] + 1;	/* Seems to be one off (VduVars wrong?) */
--    ScrollTop = 0;
--
--    /* Are we running in a textwindow? */
--    if (Rows == buf[5] + 1 && Columns == buf[4] + 1)
--	windowed = 0;
--    else
--	windowed = 1;
--
--    /* Choose a nice colour scheme. */
--    text_fg(NORMAL_FG);
--    text_bg(NORMAL_BG);
--}
--
--/*
-- * Check_win checks whether we have an interactive stdout.
-- */
--/* ARGSUSED */
--    int
--mch_check_win(argc, argv)
--    int	    argc;
--    char    **argv;
--{
--    return OK;
--}
--
--/*
-- * Return TRUE if the input comes from a terminal, FALSE otherwise.
-- */
--    int
--mch_input_isatty()
--{
--    if (xswi(OS_ChangeRedirection, -1, -1) & v_flag)
--	return TRUE;		/* Error - TRUE is probably correct though */
--    if (r0 == 0)
--	return TRUE;
--    return FALSE;
--}
--
--#ifdef FEAT_TITLE
--    int
--mch_can_restore_title()
--{
--    return FALSE;
--}
--
--    int
--mch_can_restore_icon()
--{
--    return FALSE;
--}
--
--
--/*
-- * Set the window title and icon.
-- */
--    void
--mch_settitle(title, icon)
--    char_u *title;
--    char_u *icon;
--{
--    if (title == NULL)
--	title = (char_u *) "<untitled>";
--#ifdef FEAT_GUI
--    if (gui.in_use && strcmp(title, gui.window_title))
--    {
--	int length;
--	length = strlen(title);
--	if (length >= gui.window_title_size)
--	    length = gui.window_title_size - 1;
--	strncpy(gui.window_title, title, length);
--	gui.window_title[length] = 0;
--	ro_redraw_title(gui.window_handle);
--    }
--#endif
--    return;
--}
--
--/*
-- * Restore the window/icon title.
-- * "which" is one of:
-- *  1  only restore title
-- *  2  only restore icon
-- *  3  restore title and icon
-- */
--    void
--mch_restore_title(which)
--    int which;
--{
--    return;
--}
--#endif
--
--/*
-- * Insert user name in s[len].
-- * Return OK if a name found.
-- */
--    int
--mch_get_user_name(s, len)
--    char_u  *s;
--    int	    len;
--{
--    /* RISC OS doesn't support user names. */
--    *s = NUL;
--    return FAIL;
--}
--
--/*
-- * Insert host name in s[len].
-- */
--
--    void
--mch_get_host_name(s, len)
--    char_u  *s;
--    int	    len;
--{
--    if (xswi(OS_ReadVarVal, "Machine$Name", s, len, 0, 3) & v_flag)
--    {
--	/* Variable does not exist (normal operation) */
--	vim_strncpy(s, "(unknown)", len - 1);
--    }
--}
--
--/*
-- * return process ID
-- */
--    long
--mch_get_pid()
--{
--    if (xswi(Wimp_ReadSysInfo, 5) & v_flag)
--	return 0;
--    return r0;
--}
--
--/*
-- * Get name of current directory into buffer 'buf' of length 'len' bytes.
-- * Return OK for success, FAIL for failure.
-- */
--    int
--mch_dirname(buf, len)
--    char_u  *buf;
--    int	    len;
--{
--    if (xswi(OS_FSControl, 37, "@", buf, 0, 0, len) & v_flag)
--	return FAIL;
--    return OK;
--}
--
--/*
-- * Get absolute file name into buffer 'buf' of length 'len' bytes.
-- *
-- * return FAIL for failure, OK for success
-- */
--    int
--mch_FullName(fname, buf, len, force)
--    char_u *fname, *buf;
--    int len;
--    int	force;		/* Also expand when already absolute path name.
--			 * Not used under RISC OS.
--			 */
--{
--    if (xswi(OS_FSControl, 37, fname, buf, 0, 0, len) & v_flag)
--	return FAIL;
--    return OK;
--}
--
--/*
-- * Return TRUE if "fname" does not depend on the current directory.
-- */
--    int
--mch_isFullName(fname)
--    char_u	*fname;
--{
--    if (strstr(fname, "::") && strstr(fname,".$."))
--	return TRUE;
--    return FALSE;
--}
--
--/*
-- * Get file permissions for 'name'.
-- * Returns -1 when it doesn't exist.
-- */
--    long
--mch_getperm(name)
--    char_u *name;
--{
--    struct stat statb;
--
--    if (stat((char *)name, &statb))
--	return -1;
--    return statb.st_mode;
--}
--
--/*
-- * set file permission for 'name' to 'perm'
-- *
-- * return FAIL for failure, OK otherwise
-- */
--    int
--mch_setperm(name, perm)
--    char_u  *name;
--    long    perm;
--{
--    return (chmod((char *)name, (mode_t)perm) == 0 ? OK : FAIL);
--}
--
--/*
-- * Set hidden flag for "name".
-- */
--/* ARGSUSED */
--    void
--mch_hide(name)
--    char_u	*name;
--{
--    /* can't hide a file */
--}
--
--/*
-- * return TRUE if "name" is a directory
-- * return FALSE if "name" is not a directory
-- * return FALSE for error
-- */
--    int
--mch_isdir(name)
--    char_u *name;
--{
--    if (xswi(OS_File, 17, name) & v_flag)
--	return FALSE;
--    if (r0 == 2 || r0 == 3)
--	return TRUE;		/* Count image files as directories. */
--    return FALSE;
--}
--
--/*
-- * Return 1 if "name" can be executed, 0 if not.
-- * Return -1 if unknown. Requires which to work.
-- */
--    int
--mch_can_exe(name)
--    char_u	*name;
--{
--    char_u	*buf;
--    char_u	*p;
--    int		retval;
--
--    buf = alloc((unsigned)STRLEN(name) + 7);
--    if (buf == NULL)
--	return -1;
--    sprintf((char *)buf, "which %s", name);
--    p = get_cmd_output(buf, NULL, SHELL_SILENT);
--    vim_free(buf);
--    if (p == NULL)
--	return -1;
--    /* result can be: "name: Command not found" */
--    retval = (*p != NUL && strstr((char *)p, "not found") == NULL);
--    vim_free(p);
--    return retval;
--}
--
--/*
-- * Check what "name" is:
-- * NODE_NORMAL: file or directory (or doesn't exist)
-- * NODE_WRITABLE: writable device, socket, fifo, etc.
-- * NODE_OTHER: non-writable things
-- */
--    int
--mch_nodetype(name)
--    char_u	*name;
--{
--    /* TODO */
--    return NODE_NORMAL;
--}
--
--    void
--mch_early_init()
--{
--    /* Turn off all the horrible filename munging in UnixLib. */
--    int __riscosify_control = __RISCOSIFY_NO_PROCESS;
--}
--
--    void
--mch_exit(r)
--    int r;
--{
--    settmode(TMODE_COOK);
--    exiting = TRUE;
--    out_flush();
--    ml_close_all(TRUE);		/* remove all memfiles */
--
--#ifdef FEAT_GUI
--    if (gui.in_use)
--	gui_exit(r);
--#endif
--    swi(OS_NewLine);
--    if (old_escape_state != -1)
--	swi(OS_Byte, 229, old_escape_state, 0);
--    if (old_cursor_state != -1)
--	swi(OS_Byte, 4, old_cursor_state);
--    exit(r);
--}
--
--    void
--mch_settmode(tmode)
--    int		tmode;	    /* TMODE_RAW or TMODE_COOK */
--{
--    if (tmode == TMODE_COOK)
--    {
--	ro_line_mode = TRUE;
--	return;
--    }
--
--    ro_line_mode = FALSE;
--
--    if (term_console)
--    {
--	/* Block cursor. */
--	swi(OS_WriteN,
--		"\027\000\012\000\000\000\000\000\000\000",
--		10);
--
--	/* Disable the standard cursor key actions. */
--	swi(OS_Byte, 4, 1);
--	if (old_cursor_state == -1)
--	    old_cursor_state = r1;
--    }
--
--    /* Stop Escape from quitting Vim! */
--    swi(OS_Byte, 229, 1, 0);
--    if (old_escape_state == -1)
--	old_escape_state = r1;
--}
--
--/*
-- * set mouse clicks on or off (only works for xterms)
-- */
--    void
--mch_setmouse(on)
--    int	    on;
--{
--}
--
--/*
-- * set screen mode, always fails.
-- */
--/* ARGSUSED */
--    int
--mch_screenmode(arg)
--    char_u   *arg;
--{
--    EMSG(_(e_screenmode));
--    return FAIL;
--}
--
--/*
-- * Try to get the current window size.
-- * Return OK when size could be determined, FAIL otherwise.
-- * Simply return results stored by mch_init() if we are the
-- * machine's console. If not, we don't know how big the screen is.
-- */
--    int
--mch_get_shellsize()
--{
--    /* if size changed: screenalloc will allocate new screen buffers */
--    return term_console ? OK : FAIL;
--}
--
--/*
-- * Can't change the size.
-- * Assume the user knows what he's doing and use the new values.
-- */
--    void
--mch_set_shellsize()
--{
--    /* Assume the user knows what he's doing and use the new values. */
--}
--
--/*
-- * Rows and/or Columns has changed.
-- */
--    void
--mch_new_shellsize()
--{
--    /* Nothing to do. */
--}
--
--    int
--mch_call_shell(cmd, options)
--    char_u	*cmd;
--    int		options;	/* SHELL_*, see vim.h */
--{
--    int		retval;
--    int		tmode = cur_tmode;
--
--    if (cmd == NULL)
--	cmd = (char_u *) "GOS";
--
--#ifdef FEAT_GUI
--    if (gui.in_use)
--	return gui_mch_call_shell(cmd, options);
--#endif
--    if (options & SHELL_COOKED)
--	settmode(TMODE_COOK);		/* set to normal mode */
--    MSG_PUTS("\n");
--
--   /* I don't even want to think about what UnixLib must
--    * be doing to allow this to work...
--    */
--    retval = system(cmd);
--    if (retval && !(options & SHELL_SILENT))
--	EMSG(strerror(EOPSYS));		/* Doesn't seem to set errno? */
--
--    swi(OS_Byte, 229, 1, 0);		/* Re-disable escape */
--    if (tmode == TMODE_RAW)
--	settmode(TMODE_RAW);		/* set to raw mode */
--    return retval ? FAIL : OK;
--}
--
--/*
-- * Check for Escape being pressed right now.
-- * [ different if !term_console? ]
-- */
--    void
--mch_breakcheck()
--{
--    if (xswi(OS_Byte, 121, 0xf0) & v_flag)
--	return;
--    if (r1 == 0xff)
--    {
--	got_int = TRUE;
--	swi(OS_Byte, 15, 1);	/* Flush input buffer */
--    }
--}
--
--/*
-- * Recursively expand one path component into all matching files and/or
-- * directories.
-- * "path" has backslashes before chars that are not to be expanded.
-- * Return the number of matches found.
-- */
--    int
--mch_expandpath(gap, path, flags)
--    garray_T	*gap;	/* Grow array for results. */
--    char_u	*path;
--    int		flags;	/* EW_* flags */
--{
--    int		got;	/* Number of matches. */
--    char_u	*pattern;
--
--   /* Plan:
--    *
--    * 1) Get first part of path - no wildcards
--    * 2) Get next path element (wildcarded)
--    * 3) Get rest of path
--    *
--    * If (3) is nothing then only the leaf is wildcarded - add to gap
--    * Otherwise call recursively for each path in (2), passing (3)
--    *
--    * This is just the header function.
--    */
--
--    /* We must be able to modifiy path, so make a copy */
--    pattern = vim_strsave(path);
--    if (pattern == NULL)
--	return 0;
--    got = expand_section(gap, (char_u *)"", pattern, flags);
--    vim_free(pattern);
--    return got;
--}
--
--/*
-- * expand_section(gap, "$.Dir1.Dir2", "ABBA*.myleaf##")
-- *
-- * calls expand_section(gap, "$.Dir1.Dir2.ABBA_Gold", "myleaf##")
-- *   and expand_section(gap, "$.Dir1.Dir2.ABBA_Live", "myleaf##")
-- *
-- * If rest is just a leaf then all matches are added to gap.
-- *
-- * Returns number of items added to gap.
-- */
--    int
--expand_section(gap, root, rest, flags)
--    garray_T	*gap;
--    char_u	*root;	/* Non-wildcarded path to search */
--    char_u	*rest;	/* Wildcarded remainder of path */
--    int		flags;	/* Add dirs/files/missing objects. */
--{
--    static char_u buf[MAXPATHL];	/* Temporary buffer. */
--    char_u dir[MAXPATHL];
--    int start_element = -1;		/* Start of wildcarded element */
--    char_u c;
--    int i;
--    int got, dir_pos;
--    int buflen;			/* Chars used in buf[] */
--    int colon = 0;		/* Dir ends in ':' */
--
--    buflen = strlen(root);
--    STRNCPY(buf, root, buflen);	/* Copy root into buffer. */
--
--   /*
--    * Find end of nonwildcarded section.
--    * Count ':' as a path sep since Vim:Bug* is a valid pathname.
--    */
--
--    for (i = 0; c = rest[i]; i++)
--    {
--	if (c == PATHSEP)
--	{
--	    start_element = i;
--	    colon = 0;
--	}
--	if (c == ':')
--	{
--	    start_element = i + 1;
--	    colon = 1;
--	}
--	if (c == '#' || c == '*')
--	    break;
--    }
--    if (c == 0)
--	start_element = i;
--
--   /*
--    * start_element +> terminator for non-wildcarded section.
--    * Transfer this bit into buf.
--    */
--    if (buflen + start_element + 4 >= MAXPATHL)
--       return 0;			/* Buffer full */
--    if (start_element >= 0)
--    {
--	if (*root && !colon)
--	    buf[buflen++] = PATHSEP;
--	strncpy(buf + buflen, rest, start_element);
--	buflen += start_element;
--    }
--    buf[buflen] = 0;
--
--   /*
--    * Did we reach the end of the string without hitting any wildcards?
--    */
--    if (c == 0)
--    {
--	/* Yes - add combined path to grow array and return. */
--	addfile(gap, buf, flags);
--	return 1;
--    }
--
--    if (start_element < 0 || !colon)
--	start_element++;
--    rest += start_element;
--
--   /*
--    * rest does contain wildcards if we get here.
--    *
--    * Now : have we reached the leaf names part yet?
--    * If so, add all matches (files and dirs) to gap.
--    * If not, get next path element and scan all matching directories.
--    */
--
--    start_element = -1;
--    for (i = 0; rest[i]; i++)
--    {
--	if (rest[i] == '.')
--	{
--	    start_element = i;
--	    rest[i] = 0;		/* Break string here. */
--	    break;
--	}
--    }
--
--    /* If start_element is -1 then we are matching leaf names */
--
--    r3 = 0;			/* Number of objs read. */
--    dir_pos = 0;		/* Position through directory. */
--    got = 0;			/* Files added so far. */
--    while (dir_pos != -1)
--    {
--	buf[buflen] = 0;
--	if (xswi(OS_GBPB, 9,
--		buf,				/* Directory to scan. */
--		buf + buflen + (1 - colon),	/* Buffer for result. */
--		1,			/* Number of objects to read. */
--		dir_pos,		/* Search position. */
--		MAXPATHL - 2 - buflen,	/* Size of result buffer. */
--		rest)			/* Wildcarded leafname. */
--			& v_flag)
--	{
--	    EMSG(r0 + 4);
--	    r4 = -1;
--	}
--	dir_pos = r4;		/* r4 corrupted by addfile() */
--	if (r3 > 0)
--	{
--	    char_u *path = buf;
--	    if (buflen == 0)
--		path++;			/* Don't do '.File' */
--	    else if (!colon)
--		buf[buflen] = '.';		/* Join path and leaf */
--
--	   /* Path -> full path of object found */
--	    if (start_element == -1)
--	    {
--		addfile(gap, path, flags);
--		got++;
--	    }
--	    else
--	    {
--	       /* Scan into subdirectories and images; ignore files */
--		swi(OS_File, 17, path);
--		if (r0 == 2 || r0 == 3)
--		    got += expand_section(gap,
--						path,
--						rest + start_element + 1,
--						flags);
--	    }
--	}
--    }
--
--    /* Restore the dot if we removed it. */
--    if (start_element >= 0)
--	rest[start_element] = '.';
--    return got;
--}
--
--/*
-- * mch_expand_wildcards() - this code does wild-card pattern matching using
-- * the shell. It isn't used under RISC OS.
-- *
-- * return OK for success, FAIL for error (you may lose some memory) and put
-- * an error message in *file.
-- *
-- * num_pat is number of input patterns
-- * pat is array of pointers to input patterns
-- * num_file is pointer to number of matched file names
-- * file is pointer to array of pointers to matched file names
-- */
--    int
--mch_expand_wildcards(num_pat, pat, num_file, file, flags)
--    int		    num_pat;
--    char_u	  **pat;
--    int		   *num_file;
--    char_u	 ***file;
--    int		    flags;		/* EW_* flags */
--{
--    /* This doesn't get called unless SPECIAL_WILDCHAR is defined. */
--    return FAIL;
--}
--
--/*
-- * Return TRUE if "p" contains wildcards which can be expanded by
-- * mch_expandpath().
-- */
--    int
--mch_has_exp_wildcard(p)
--    char_u	*p;
--{
--    if (vim_strpbrk((char_u *)"*#", p))
--	return TRUE;
--    return FALSE;
--}
--
--/* Return TRUE if "p" contains wildcards. */
--    int
--mch_has_wildcard(p)
--    char_u	*p;
--{
--    if (vim_strpbrk((char_u *)"*#`", p))
--	return TRUE;
--    return FALSE;
--}
--
--    int			/* see Unix unlink(2) */
--mch_remove(file)
--    char_u *file;	/* Name of file to delete. */
--{
--    if (xswi(OS_FSControl, 27, file, 0, 0) & v_flag)
--	return EXIT_FAILURE;
--    return EXIT_SUCCESS;
--}
--
--/* Try to make existing scripts work without modification.
-- * Return a pointer to the new string (freed by caller), or NULL
-- *
-- * Two main cases:
-- * - Absolute : $VIM/syntax/help.vim
-- * - Relative : Adfs::4.$.!Vim.Resources.Syntax/help.vim
-- */
--    char_u *
--mch_munge_fname(fname)
--    char_u *fname;
--{
--    char_u c;
--    int len;
--    char_u *retval;
--
--    retval = fname = vim_strsave(fname);
--    if (fname == NULL)
--	return NULL;
--
--    if (strncmp(fname, "$VIM/", 5) == 0)
--    {
--	strncpy(fname, "Vim:", 4);
--	for (fname += 5; c = *fname; fname++)
--	{
--	    if (c == '.')
--		break;
--	    if (c == '/')
--		fname[-1] = '.';
--	    else
--		fname[-1] = c;
--	}
--	fname[-1] = '\0';
--    }
--    else
--    {
--	/* Check to see if the file exists without modification. */
--	if (xswi(OS_File, 17, fname) & v_flag)
--	    r0 == 0;		/* Invalid filename? */
--	if (r0)
--	    return retval;
--
--	len = strlen(fname);
--	if (strcmp(fname + len - 4, ".vim") == 0)
--	{
--	    fname[len - 4] = '\0';
--	    for (; c = *fname; fname++)
--	    {
--		if (c == '/')
--		    *fname = '.';
--	    }
--	}
--    }
--    return retval;
--}
--
--/* QuickFix reads munged names from the error file.
-- * Correct them.
-- */
--    int
--ro_buflist_add(old_name)
--    char_u  *old_name;	/* Name of file found by quickfix */
--{
--    char_u  *fname;
--    char_u  *leaf;	/* Pointer to start of leaf in old_name */
--    char_u  *ptr;
--    char_u  c;
--    int	    retval;
--
--    if (old_name == NULL)
--	return buflist_add(NULL, 0);
--
--    /* Copy the name so we can mess around with it. */
--    fname = vim_strsave(old_name);
--    if (fname == NULL)
--	/* Out of memory - can't modify name */
--	return buflist_add(old_name, 0);
--
--    /* Change `dir/main.c' into `dir.c.main' */
--    leaf = fname;
--    for (ptr = fname; c = *ptr; ptr++)
--    {
--	if (c == '/')
--	{
--	    leaf = ptr + 1;
--	    *ptr = '.';
--	}
--	else if (c == '.')
--	    break;
--    }
--    if (c == '.')
--    {
--	/* Change `main.c' into `c.main'
--	 *	  |    |
--	 *      leaf  ptr
--	 */
--	ptr += old_name - fname;
--	*ptr = '\0';
--	sprintf(leaf,
--		"%s.%s",
--		ptr + 1,
--		leaf - fname + old_name);
--    }
--
--    retval = buflist_add(fname, 0);
--    free(fname);
--    return retval;
--}
--
--/* Change the current directory.
-- * Strip trailing dots to make it easier to use with filename completion.
-- * Return 0 for success, -1 for failure.
-- */
--    int
--mch_chdir(dir)
--    char_u  *dir;
--{
--    int	    length;
--    int	    retval;
--    char_u  *new_dir;
--
--    if (p_verbose >= 5)
--    {
--	verbose_enter();
--	smsg((char_u *)"chdir(%s)", dir);
--	verbose_leave();
--    }
--    length = strlen(dir);
--    if (dir[length - 1] != '.')
--	return chdir(dir);	    /* No trailing dots - nothing to do. */
--    new_dir = vim_strsave(dir);
--    if (new_dir == NULL)
--	return chdir(dir);	    /* Can't allocate memory. */
--
--    while (new_dir[--length] == '.')
--	new_dir[length] = '\0';
--
--    retval = chdir(new_dir);
--    vim_free(new_dir);
--    return retval;
--}
--
--/* Examine the named file, and set the 'osfiletype' option
-- * (in curbuf) to the file's type.
-- */
--    void
--mch_read_filetype(file)
--    char_u  *file;
--{
--    int	    type;
--    char_u  type_string[9];
--    int	    i;
--
--    if (xswi(OS_File, 23, file) & v_flag)
--	type = 0xfff;		/* Default to Text */
--    else
--	type = r6;
--
--    /* Type is the numerical value - see if we have a textual equivalent */
--    swi(OS_FSControl, 18, 0, type);
--    ((int *) type_string)[0] = r2;
--    ((int *) type_string)[1] = r3;
--    type_string[8] = 0;
--    for (i = 0; type_string[i] > ' '; i++)
--	;
--    type_string[i] = 0;
--
--    set_string_option_direct("osfiletype", -1, type_string, OPT_FREE, 0);
--    return;
--}
--
--    void
--mch_set_filetype(file, type)
--    char_u  *file;
--    char_u  *type;
--{
--    if (xswi(OS_FSControl, 31, type) & v_flag)
--    {
--	EMSG(_("E366: Invalid 'osfiletype' option - using Text"));
--	r2 = 0xfff;
--    }
--
--    swi(OS_File, 18, file, r2);
--}
--
--/* Return TRUE if the file's type matches 'type'
-- * RISC OS types always start with '&'
-- */
--    int
--mch_check_filetype(fname, type)
--    char_u  *fname;
--    char_u  *type;
--{
--    int	    value;
--    char    *end;
--
--    if (*type != '&')
--	return FALSE;
--
--    value = strtol(type + 1, &end, 16);
--    if (*end)
--	return FALSE;		/* Invalid type (report error?) */
--
--    if (xswi(OS_File, 23, fname) & v_flag)
--	return FALSE;		/* Invalid filename? */
--
--    return (r0 && r6 == value);
--}
-diff -Naur vim73.orig/src/os_riscos.h vim73/src/os_riscos.h
---- vim73.orig/src/os_riscos.h	2010-05-23 12:16:06.000000000 +0000
-+++ vim73/src/os_riscos.h	1970-01-01 00:00:00.000000000 +0000
-@@ -1,166 +0,0 @@
--/* vi:set ts=8 sts=4 sw=4:
-- *
-- * VIM - Vi IMproved	by Bram Moolenaar
-- *
-- * Do ":help uganda"  in Vim to read copying and usage conditions.
-- * Do ":help credits" in Vim to see a list of people who contributed.
-- */
--
--#include <sys/types.h>
--#include <sys/stat.h>
--#include <sys/ioctl.h>
--#include <termios.h>
--#include <stdlib.h>
--#include <unixlib/local.h>
--#include <errno.h>
--#include <fcntl.h>
--
--#define CASE_INSENSITIVE_FILENAME
--#define FEAT_MODIFY_FNAME
--#define FEAT_OSFILETYPE
--#define DFLT_OFT	"Text"
--#define USE_TERM_CONSOLE
--#define HAVE_AVAIL_MEM
--
--/* Longer filenames now accessible to all */
--#ifndef BASENAMELEN
--# define BASENAMELEN 64 /* Same length as unzip */
--#endif
--
--#ifndef TEMNAME
--# define TEMPNAME	"<Wimp$ScrapDir>.v?XXXXXX"
--# define TEMPNAMELEN	25
--#endif
--
--#ifndef DFLT_HELPFILE
--# define DFLT_HELPFILE "Vim:doc.help"
--#endif
--
--#ifndef DFLT_BDIR
--# define DFLT_BDIR	".,<Wimp$ScrapDir>."	/* default for 'backupdir' */
--#endif
--
--/* Paths to try putting swap file in. */
--#ifndef DFLT_DIR
--# define DFLT_DIR	"<Wimp$ScrapDir>.,."	/* default for 'directory' */
--#endif
--
--#ifndef DFLT_VDIR
--# define DFLT_VDIR	"Choices:Vim.view"	/* default for 'viewdir' */
--#endif
--
--#ifndef TERMCAPFILE
--# define TERMCAPFILE	"Vim:TermCap"
--#endif
--#define HAVE_TGETENT
--
--#ifndef SYNTAX_FNAME
--# define SYNTAX_FNAME	"Vim:Syntax.%s"
--#endif
--
--#ifndef EVIM_FILE
--# define EVIM_FILE	"Vim:Evim"
--#endif
--
--#define FEAT_VIMINFO
--
--#ifndef VIMINFO_FILE
--# define VIMINFO_FILE	"<Choices$Write>.Vim.VimInfo"
--#endif
--#ifndef VIMINFO_FILE2
--# define VIMINFO_FILE2	"Choices:Vim.VimInfo"
--#endif
--
--#ifndef VIMRC_FILE
--# define VIMRC_FILE	"/vimrc"
--#endif
--#ifndef EXRC_FILE
--# define EXRC_FILE	"/exrc"
--#endif
--#ifndef GVIMRC_FILE
--# define GVIMRC_FILE	"/gvimrc"
--#endif
--#ifndef USR_VIMRC_FILE
--# define USR_VIMRC_FILE	"Vim:Evim"
--#endif
--#ifndef SESSION_FILE
--# define SESSION_FILE	"/Session.vim"
--#endif
--#ifndef USR_VIMRC_FILE
--# define USR_VIMRC_FILE	"Choices:Vim.VimRC"
--#endif
--#ifndef USR_GVIMRC_FILE
--# define USR_GVIMRC_FILE    "Choices:Vim.GVimRC"
--#endif
--#ifndef USR_EXRC_FILE
--# define USR_EXRC_FILE    "Choices:Vim.ExRC"
--#endif
--#ifndef SYS_VIMRC_FILE
--# define SYS_VIMRC_FILE	    "Vim:VimRC"
--#endif
--#ifndef SYS_GVIMRC_FILE
--# define SYS_GVIMRC_FILE    "Vim:GVimRC"
--#endif
--#ifndef SYS_MENU_FILE
--# define SYS_MENU_FILE	    "Vim:Menu"
--#endif
--#ifndef SYS_OPTWIN_FILE
--# define SYS_OPTWIN_FILE    "Vim:Optwin"
--#endif
--#ifndef FILETYPE_FILE
--# define FILETYPE_FILE	    "Vim:Filetype"
--#endif
--#ifndef FTPLUGIN_FILE
--# define FTPLUGIN_FILE	    "Vim:Ftplugin/vim"
--#endif
--#ifndef INDENT_FILE
--# define INDENT_FILE	    "Vim:Indent/vim"
--#endif
--#ifndef FTOFF_FILE
--# define FTOFF_FILE	    "Vim:Ftoff"
--#endif
--#ifndef FTPLUGOF_FILE
--# define FTPLUGOF_FILE	    "Vim:Ftplugof"
--#endif
--#ifndef INDOFF_FILE
--# define INDOFF_FILE	    "Vim:Indoff"
--#endif
--
--#define DFLT_ERRORFILE		"errors/vim"
--#define DFLT_RUNTIMEPATH	"Choices:Vim,Vim:,Choices:Vim.after"
--
--/*
-- * RISC PCs have plenty of memory, use large buffers
-- */
--#define CMDBUFFSIZE 1024	/* size of the command processing buffer */
--#define MAXPATHL    256		/* paths are always quite short though */
--
--#ifndef DFLT_MAXMEM
--# define DFLT_MAXMEM	(5*1024)    /* use up to 5 Mbyte for a buffer */
--#endif
--
--#ifndef DFLT_MAXMEMTOT
--# define DFLT_MAXMEMTOT	(10*1024)    /* use up to 10 Mbyte for Vim */
--#endif
--
--#ifdef HAVE_SIGSET
--# define signal sigset
--#endif
--
--#define n_flag (1<<31)
--#define z_flag (1<<30)
--#define c_flag (1<<29)
--#define v_flag (1<<28)
--
--/* These take r0-r7 as inputs, returns r0-r7 in global variables. */
--void swi(int swinum, ...);      /* Handles errors itself */
--int xswi(int swinum, ...);      /* Returns errors using v flag */
--extern int r0, r1, r2, r3, r4, r5, r6, r7;  /* For return values */
--
--#include <kernel.h>
--#include <swis.h>
--
--#define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
--#define mch_rename(src, dst) rename(src, dst)
--#define mch_getenv(x) (char_u *)getenv((char *)x)
--#define mch_setenv(name, val, x) setenv(name, val, x)
-diff -Naur vim73.orig/src/os_unix.c vim73/src/os_unix.c
---- vim73.orig/src/os_unix.c	2010-08-08 13:14:04.000000000 +0000
-+++ vim73/src/os_unix.c	2012-11-01 20:35:48.000000000 +0000
-@@ -154,6 +154,13 @@
- 
- static void may_core_dump __ARGS((void));
- 
-+#ifdef HAVE_UNION_WAIT
-+typedef union wait waitstatus;
-+#else
-+typedef int waitstatus;
-+#endif
-+static pid_t wait4pid __ARGS((pid_t, waitstatus *));
-+
- static int  WaitForChar __ARGS((long));
- #if defined(__BEOS__)
- int  RealWaitForChar __ARGS((int, long, int *));
-@@ -283,7 +290,7 @@
- #ifdef SIGTERM
-     {SIGTERM,	    "TERM",	TRUE},
- #endif
--#ifdef SIGVTALRM
-+#if defined(SIGVTALRM) && !defined(FEAT_RUBY)
-     {SIGVTALRM,	    "VTALRM",	TRUE},
- #endif
- #if defined(SIGPROF) && !defined(FEAT_MZSCHEME) && !defined(WE_ARE_PROFILING)
-@@ -1107,7 +1114,7 @@
-  * On Linux, signal is not always handled immediately either.
-  * See https://bugs.launchpad.net/bugs/291373
-  *
-- * volatile because it is used in in signal handler sigcont_handler().
-+ * volatile because it is used in signal handler sigcont_handler().
-  */
- static volatile int sigcont_received;
- static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
-@@ -1123,6 +1130,30 @@
- }
- #endif
- 
-+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-+static void loose_clipboard __ARGS((void));
-+
-+/*
-+ * Called when Vim is going to sleep or execute a shell command.
-+ * We can't respond to requests for the X selections.  Lose them, otherwise
-+ * other applications will hang.  But first copy the text to cut buffer 0.
-+ */
-+    static void
-+loose_clipboard()
-+{
-+    if (clip_star.owned || clip_plus.owned)
-+    {
-+	x11_export_final_selection();
-+	if (clip_star.owned)
-+	    clip_lose_selection(&clip_star);
-+	if (clip_plus.owned)
-+	    clip_lose_selection(&clip_plus);
-+	if (x11_display != NULL)
-+	    XFlush(x11_display);
-+    }
-+}
-+#endif
-+
- /*
-  * If the machine has job control, use it to suspend the program,
-  * otherwise fake it by starting a new shell.
-@@ -1137,19 +1168,7 @@
-     out_flush();	    /* needed to disable mouse on some systems */
- 
- # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
--    /* Since we are going to sleep, we can't respond to requests for the X
--     * selections.  Lose them, otherwise other applications will hang.  But
--     * first copy the text to cut buffer 0. */
--    if (clip_star.owned || clip_plus.owned)
--    {
--	x11_export_final_selection();
--	if (clip_star.owned)
--	    clip_lose_selection(&clip_star);
--	if (clip_plus.owned)
--	    clip_lose_selection(&clip_plus);
--	if (x11_display != NULL)
--	    XFlush(x11_display);
--    }
-+    loose_clipboard();
- # endif
- 
- # if defined(_REENTRANT) && defined(SIGCONT)
-@@ -1726,6 +1745,11 @@
-     }
-     if (x11_window == 0 || x11_display == NULL)
- 	return (result = FAIL);
-+
-+# ifdef FEAT_EVAL
-+    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
-+# endif
-+
-     return (result = OK);
- }
- 
-@@ -2134,10 +2158,16 @@
-  * Return non-zero when using an xterm mouse, according to 'ttymouse'.
-  * Return 1 for "xterm".
-  * Return 2 for "xterm2".
-+ * Return 3 for "urxvt".
-+ * Return 4 for "sgr".
-  */
-     int
- use_xterm_mouse()
- {
-+    if (ttym_flags == TTYM_SGR)
-+	return 4;
-+    if (ttym_flags == TTYM_URXVT)
-+	return 3;
-     if (ttym_flags == TTYM_XTERM2)
- 	return 2;
-     if (ttym_flags == TTYM_XTERM)
-@@ -2482,15 +2512,12 @@
- 	}
- 
- 	l = STRLEN(buf);
--	if (l >= len)
--	    retval = FAIL;
-+	if (l >= len - 1)
-+	    retval = FAIL; /* no space for trailing "/" */
- #ifndef VMS
--	else
--	{
--	    if (l > 0 && buf[l - 1] != '/' && *fname != NUL
-+	else if (l > 0 && buf[l - 1] != '/' && *fname != NUL
- 						   && STRCMP(fname, ".") != 0)
--		STRCAT(buf, "/");
--	}
-+	    STRCAT(buf, "/");
- #endif
-     }
- 
-@@ -2719,6 +2746,13 @@
- #ifdef HAVE_POSIX_ACL
-     ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS);
- #else
-+#ifdef HAVE_SOLARIS_ZFS_ACL
-+    acl_t *aclent;
-+
-+    if (acl_get((char *)fname, 0, &aclent) < 0)
-+	return NULL;
-+    ret = (vim_acl_T)aclent;
-+#else
- #ifdef HAVE_SOLARIS_ACL
-     vim_acl_solaris_T   *aclent;
- 
-@@ -2764,6 +2798,7 @@
-     ret = (vim_acl_T)aclent;
- #endif /* HAVE_AIX_ACL */
- #endif /* HAVE_SOLARIS_ACL */
-+#endif /* HAVE_SOLARIS_ZFS_ACL */
- #endif /* HAVE_POSIX_ACL */
-     return ret;
- }
-@@ -2781,6 +2816,9 @@
- #ifdef HAVE_POSIX_ACL
-     acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent);
- #else
-+#ifdef HAVE_SOLARIS_ZFS_ACL
-+    acl_set((char *)fname, (acl_t *)aclent);
-+#else
- #ifdef HAVE_SOLARIS_ACL
-     acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt,
- 	    ((vim_acl_solaris_T *)aclent)->acl_entry);
-@@ -2789,6 +2827,7 @@
-     chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len);
- #endif /* HAVE_AIX_ACL */
- #endif /* HAVE_SOLARIS_ACL */
-+#endif /* HAVE_SOLARIS_ZFS_ACL */
- #endif /* HAVE_POSIX_ACL */
- }
- 
-@@ -2801,6 +2840,9 @@
- #ifdef HAVE_POSIX_ACL
-     acl_free((acl_t)aclent);
- #else
-+#ifdef HAVE_SOLARIS_ZFS_ACL
-+    acl_free((acl_t *)aclent);
-+#else
- #ifdef HAVE_SOLARIS_ACL
-     free(((vim_acl_solaris_T *)aclent)->acl_entry);
-     free(aclent);
-@@ -2809,6 +2851,7 @@
-     free(aclent);
- #endif /* HAVE_AIX_ACL */
- #endif /* HAVE_SOLARIS_ACL */
-+#endif /* HAVE_SOLARIS_ZFS_ACL */
- #endif /* HAVE_POSIX_ACL */
- }
- #endif
-@@ -3294,6 +3337,29 @@
- 	return;
- 
-     xterm_mouse_vers = use_xterm_mouse();
-+
-+# ifdef FEAT_MOUSE_URXVT
-+    if (ttym_flags == TTYM_URXVT)
-+    {
-+	out_str_nf((char_u *)
-+		   (on
-+		   ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
-+		   : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
-+	ison = on;
-+    }
-+# endif
-+
-+# ifdef FEAT_MOUSE_SGR
-+    if (ttym_flags == TTYM_SGR)
-+    {
-+	out_str_nf((char_u *)
-+		   (on
-+		   ? IF_EB("\033[?1006h", ESC_STR "[?1006h")
-+		   : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
-+	ison = on;
-+    }
-+# endif
-+
-     if (xterm_mouse_vers > 0)
-     {
- 	if (on)	/* enable mouse events, use mouse tracking if available */
-@@ -3410,6 +3476,9 @@
- {
- # ifdef FEAT_MOUSE_XTERM
-     if (use_xterm_mouse()
-+# ifdef FEAT_MOUSE_URXVT
-+	    && use_xterm_mouse() != 3
-+# endif
- #  ifdef FEAT_GUI
- 	    && !gui.in_use
- #  endif
-@@ -3499,6 +3568,48 @@
-     else
- 	del_mouse_termcode(KS_PTERM_MOUSE);
- # endif
-+# ifdef FEAT_MOUSE_URXVT
-+    /* same as the dec mouse */
-+    if (use_xterm_mouse() == 3
-+#  ifdef FEAT_GUI
-+	    && !gui.in_use
-+#  endif
-+	    )
-+    {
-+	set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME)
-+		    ? IF_EB("\233", CSI_STR)
-+		    : IF_EB("\033[", ESC_STR "[")));
-+
-+	if (*p_mouse != NUL)
-+	{
-+	    mch_setmouse(FALSE);
-+	    setmouse();
-+	}
-+    }
-+    else
-+	del_mouse_termcode(KS_URXVT_MOUSE);
-+# endif
-+# ifdef FEAT_MOUSE_SGR
-+    /* same as the dec mouse */
-+    if (use_xterm_mouse() == 4
-+#  ifdef FEAT_GUI
-+	    && !gui.in_use
-+#  endif
-+	    )
-+    {
-+	set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME)
-+		    ? IF_EB("\233<", CSI_STR "<")
-+		    : IF_EB("\033[<", ESC_STR "[<")));
-+
-+	if (*p_mouse != NUL)
-+	{
-+	    mch_setmouse(FALSE);
-+	    setmouse();
-+	}
-+    }
-+    else
-+	del_mouse_termcode(KS_SGR_MOUSE);
-+# endif
- }
- #endif
- 
-@@ -3643,26 +3754,43 @@
-     /* Nothing to do. */
- }
- 
--#ifndef USE_SYSTEM
--static void append_ga_line __ARGS((garray_T *gap));
--
- /*
-- * Append the text in "gap" below the cursor line and clear "gap".
-+ * Wait for process "child" to end.
-+ * Return "child" if it exited properly, <= 0 on error.
-  */
--    static void
--append_ga_line(gap)
--    garray_T	*gap;
--{
--    /* Remove trailing CR. */
--    if (gap->ga_len > 0
--	    && !curbuf->b_p_bin
--	    && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
--	--gap->ga_len;
--    ga_append(gap, NUL);
--    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
--    gap->ga_len = 0;
-+    static pid_t
-+wait4pid(child, status)
-+    pid_t	child;
-+    waitstatus	*status;
-+{
-+    pid_t wait_pid = 0;
-+
-+    while (wait_pid != child)
-+    {
-+	/* When compiled with Python threads are probably used, in which case
-+	 * wait() sometimes hangs for no obvious reason.  Use waitpid()
-+	 * instead and loop (like the GUI). Also needed for other interfaces,
-+	 * they might call system(). */
-+# ifdef __NeXT__
-+	wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
-+# else
-+	wait_pid = waitpid(child, status, WNOHANG);
-+# endif
-+	if (wait_pid == 0)
-+	{
-+	    /* Wait for 1/100 sec before trying again. */
-+	    mch_delay(10L, TRUE);
-+	    continue;
-+	}
-+	if (wait_pid <= 0
-+# ifdef ECHILD
-+		&& errno == ECHILD
-+# endif
-+	   )
-+	    break;
-+    }
-+    return wait_pid;
- }
--#endif
- 
-     int
- mch_call_shell(cmd, options)
-@@ -3706,6 +3834,10 @@
-     if (options & SHELL_COOKED)
- 	settmode(TMODE_COOK);	    /* set to normal mode */
- 
-+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-+    loose_clipboard();
-+# endif
-+
- # ifdef __EMX__
-     if (cmd == NULL)
- 	x = system("");	/* this starts an interactive shell in emx */
-@@ -3795,6 +3927,7 @@
-     int		retval = -1;
-     char	**argv = NULL;
-     int		argc;
-+    char_u	*p_shcf_copy = NULL;
-     int		i;
-     char_u	*p;
-     int		inquote;
-@@ -3814,13 +3947,17 @@
- # endif
-     int		did_settmode = FALSE;	/* settmode(TMODE_RAW) called */
- 
-+    newcmd = vim_strsave(p_sh);
-+    if (newcmd == NULL)		/* out of memory */
-+	goto error;
-+
-     out_flush();
-     if (options & SHELL_COOKED)
- 	settmode(TMODE_COOK);		/* set to normal mode */
- 
--    newcmd = vim_strsave(p_sh);
--    if (newcmd == NULL)		/* out of memory */
--	goto error;
-+# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
-+    loose_clipboard();
-+# endif
- 
-     /*
-      * Do this loop twice:
-@@ -3851,6 +3988,19 @@
- 	}
- 	if (argv == NULL)
- 	{
-+	    /*
-+	     * Account for possible multiple args in p_shcf.
-+	     */
-+	    p = p_shcf;
-+	    for (;;)
-+	    {
-+		p = skiptowhite(p);
-+		if (*p == NUL)
-+		    break;
-+		++argc;
-+		p = skipwhite(p);
-+	    }
-+
- 	    argv = (char **)alloc((unsigned)((argc + 4) * sizeof(char *)));
- 	    if (argv == NULL)	    /* out of memory */
- 		goto error;
-@@ -3858,9 +4008,27 @@
-     }
-     if (cmd != NULL)
-     {
-+	char_u	*s;
-+
- 	if (extra_shell_arg != NULL)
- 	    argv[argc++] = (char *)extra_shell_arg;
--	argv[argc++] = (char *)p_shcf;
-+
-+	/* Break 'shellcmdflag' into white separated parts.  This doesn't
-+	 * handle quoted strings, they are very unlikely to appear. */
-+	p_shcf_copy = alloc((unsigned)STRLEN(p_shcf) + 1);
-+	if (p_shcf_copy == NULL)    /* out of memory */
-+	    goto error;
-+	s = p_shcf_copy;
-+	p = p_shcf;
-+	while (*p != NUL)
-+	{
-+	    argv[argc++] = (char *)s;
-+	    while (*p && *p != ' ' && *p != TAB)
-+		*s++ = *p++;
-+	    *s++ = NUL;
-+	    p = skipwhite(p);
-+	}
-+
- 	argv[argc++] = (char *)cmd;
-     }
-     argv[argc] = NULL;
-@@ -3885,11 +4053,21 @@
- 	if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
- 	{
- 	    pty_master_fd = OpenPTY(&tty_name);	    /* open pty */
--	    if (pty_master_fd >= 0 && ((pty_slave_fd =
--				    open(tty_name, O_RDWR | O_EXTRA, 0)) < 0))
-+	    if (pty_master_fd >= 0)
- 	    {
--		close(pty_master_fd);
--		pty_master_fd = -1;
-+		/* Leaving out O_NOCTTY may lead to waitpid() always returning
-+		 * 0 on Mac OS X 10.7 thereby causing freezes. Let's assume
-+		 * adding O_NOCTTY always works when defined. */
-+#ifdef O_NOCTTY
-+		pty_slave_fd = open(tty_name, O_RDWR | O_NOCTTY | O_EXTRA, 0);
-+#else
-+		pty_slave_fd = open(tty_name, O_RDWR | O_EXTRA, 0);
-+#endif
-+		if (pty_slave_fd < 0)
-+		{
-+		    close(pty_master_fd);
-+		    pty_master_fd = -1;
-+		}
- 	    }
- 	}
- 	/*
-@@ -4148,7 +4326,6 @@
- # ifdef FEAT_GUI
- 		if (pty_master_fd >= 0)
- 		{
--		    close(pty_slave_fd);	/* close slave side of pty */
- 		    fromshell_fd = pty_master_fd;
- 		    toshell_fd = dup(pty_master_fd);
- 		}
-@@ -4190,15 +4367,13 @@
- 		    {
- 			MSG_PUTS(_("\nCannot fork\n"));
- 		    }
--		    else if (wpid == 0)
-+		    else if (wpid == 0) /* child */
- 		    {
- 			linenr_T    lnum = curbuf->b_op_start.lnum;
- 			int	    written = 0;
- 			char_u	    *lp = ml_get(lnum);
--			char_u	    *s;
- 			size_t	    l;
- 
--			/* child */
- 			close(fromshell_fd);
- 			for (;;)
- 			{
-@@ -4210,7 +4385,8 @@
- 				len = write(toshell_fd, "", (size_t)1);
- 			    else
- 			    {
--				s = vim_strchr(lp + written, NL);
-+				char_u	*s = vim_strchr(lp + written, NL);
-+
- 				len = write(toshell_fd, (char *)lp + written,
- 					   s == NULL ? l
- 					      : (size_t)(s - (lp + written)));
-@@ -4221,7 +4397,7 @@
- 				 * should not have one. */
- 				if (lnum != curbuf->b_op_end.lnum
- 					|| !curbuf->b_p_bin
--					|| (lnum != write_no_eol_lnum
-+					|| (lnum != curbuf->b_no_eol_lnum
- 					    && (lnum !=
- 						    curbuf->b_ml.ml_line_count
- 						    || curbuf->b_p_eol)))
-@@ -4243,7 +4419,7 @@
- 			}
- 			_exit(0);
- 		    }
--		    else
-+		    else /* parent */
- 		    {
- 			close(toshell_fd);
- 			toshell_fd = -1;
-@@ -4430,7 +4606,7 @@
- 		    ++noread_cnt;
- 		    while (RealWaitForChar(fromshell_fd, 10L, NULL))
- 		    {
--			len = read(fromshell_fd, (char *)buffer
-+			len = read_eintr(fromshell_fd, buffer
- # ifdef FEAT_MBYTE
- 				+ buffer_off, (size_t)(BUFLEN - buffer_off)
- # else
-@@ -4540,7 +4716,7 @@
- 		     * typed characters (otherwise we would lose typeahead).
- 		     */
- # ifdef __NeXT__
--		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *) 0);
-+		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
- # else
- 		    wait_pid = waitpid(pid, &status, WNOHANG);
- # endif
-@@ -4564,10 +4740,10 @@
- 		    {
- 			append_ga_line(&ga);
- 			/* remember that the NL was missing */
--			write_no_eol_lnum = curwin->w_cursor.lnum;
-+			curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
- 		    }
- 		    else
--			write_no_eol_lnum = 0;
-+			curbuf->b_no_eol_lnum = 0;
- 		    ga_clear(&ga);
- 		}
- 
-@@ -4589,38 +4765,24 @@
- 	     * Don't wait if wait_pid was already set above, indicating the
- 	     * child already exited.
- 	     */
--	    while (wait_pid != pid)
--	    {
--# ifdef _THREAD_SAFE
--		/* Ugly hack: when compiled with Python threads are probably
--		 * used, in which case wait() sometimes hangs for no obvious
--		 * reason.  Use waitpid() instead and loop (like the GUI). */
--#  ifdef __NeXT__
--		wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
--#  else
--		wait_pid = waitpid(pid, &status, WNOHANG);
--#  endif
--		if (wait_pid == 0)
--		{
--		    /* Wait for 1/100 sec before trying again. */
--		    mch_delay(10L, TRUE);
--		    continue;
--		}
--# else
--		wait_pid = wait(&status);
--# endif
--		if (wait_pid <= 0
--# ifdef ECHILD
--			&& errno == ECHILD
-+	    if (wait_pid != pid)
-+		wait_pid = wait4pid(pid, &status);
-+
-+# ifdef FEAT_GUI
-+	    /* Close slave side of pty.  Only do this after the child has
-+	     * exited, otherwise the child may hang when it tries to write on
-+	     * the pty. */
-+	    if (pty_master_fd >= 0)
-+		close(pty_slave_fd);
- # endif
--		   )
--		    break;
--	    }
- 
- 	    /* Make sure the child that writes to the external program is
- 	     * dead. */
- 	    if (wpid > 0)
-+	    {
- 		kill(wpid, SIGKILL);
-+		wait4pid(wpid, NULL);
-+	    }
- 
- 	    /*
- 	     * Set to raw mode right now, otherwise a CTRL-C after
-@@ -4656,6 +4818,7 @@
- 	}
-     }
-     vim_free(argv);
-+    vim_free(p_shcf_copy);
- 
- error:
-     if (!did_settmode)
-@@ -4766,7 +4929,8 @@
- 
- /*
-  * Wait "msec" msec until a character is available from file descriptor "fd".
-- * Time == -1 will block forever.
-+ * "msec" == 0 will check for characters once.
-+ * "msec" == -1 will block until a character is available.
-  * When a GUI is being used, this will not be used for input -- webb
-  * Returns also, when a request from Sniff is waiting -- toni.
-  * Or when a Linux GPM mouse event is waiting.
-@@ -5004,7 +5168,8 @@
- 	/*
- 	 * Select on ready for reading and exceptional condition (end of file).
- 	 */
--	FD_ZERO(&rfds); /* calls bzero() on a sun */
-+select_eintr:
-+	FD_ZERO(&rfds);
- 	FD_ZERO(&efds);
- 	FD_SET(fd, &rfds);
- # if !defined(__QNX__) && !defined(__CYGWIN32__)
-@@ -5028,6 +5193,10 @@
- 	    FD_SET(ConnectionNumber(xterm_dpy), &rfds);
- 	    if (maxfd < ConnectionNumber(xterm_dpy))
- 		maxfd = ConnectionNumber(xterm_dpy);
-+
-+	    /* An event may have already been read but not handled.  In
-+	     * particulary, XFlush may cause this. */
-+	    xterm_update();
- 	}
- # endif
- # ifdef FEAT_MOUSE_GPM
-@@ -5048,14 +5217,14 @@
- 		maxfd = xsmp_icefd;
- 	}
- # endif
--#ifdef FEAT_NETBEANS_INTG
-+# ifdef FEAT_NETBEANS_INTG
- 	if (nb_fd != -1)
- 	{
- 	    FD_SET(nb_fd, &rfds);
- 	    if (maxfd < nb_fd)
- 		maxfd = nb_fd;
- 	}
--#endif
-+# endif
- 
- # ifdef OLD_VMS
- 	/* Old VMS as v6.2 and older have broken select(). It waits more than
-@@ -5064,6 +5233,21 @@
- # else
- 	ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
- # endif
-+# ifdef EINTR
-+	if (ret == -1 && errno == EINTR)
-+	{
-+	    /* Check whether window has been resized, EINTR may be caused by
-+	     * SIGWINCH. */
-+	    if (do_resize)
-+		handle_resize();
-+
-+	    /* Interrupted by a signal, need to try again.  We ignore msec
-+	     * here, because we do want to check even after a timeout if
-+	     * characters are available.  Needed for reading output of an
-+	     * external command after the process has finished. */
-+	    goto select_eintr;
-+	}
-+# endif
- # ifdef __TANDEM
- 	if (ret == -1 && errno == ENOTSUP)
- 	{
-@@ -5071,7 +5255,7 @@
- 	    FD_ZERO(&efds);
- 	    ret = 0;
- 	}
--#endif
-+# endif
- # ifdef FEAT_MZSCHEME
- 	if (ret == 0 && mzquantum_used)
- 	    /* loop if MzThreads must be scheduled and timeout occurred */
-@@ -5693,6 +5877,7 @@
- 	if (shell_style == STYLE_PRINT && !did_find_nul)
- 	{
- 	    /* If there is a NUL, set did_find_nul, else set check_spaces */
-+	    buffer[len] = NUL;
- 	    if (len && (int)STRLEN(buffer) < (int)len - 1)
- 		did_find_nul = TRUE;
- 	    else
-@@ -6562,7 +6747,7 @@
- 	    xterm_hints.x = 2;
- 	return TRUE;
-     }
--    if (mouse_code == NULL)
-+    if (mouse_code == NULL || STRLEN(mouse_code) > 45)
-     {
- 	xterm_trace = 0;
- 	return FALSE;
-diff -Naur vim73.orig/src/os_unix.h vim73/src/os_unix.h
---- vim73.orig/src/os_unix.h	2010-05-23 12:16:14.000000000 +0000
-+++ vim73/src/os_unix.h	2012-11-01 20:35:41.000000000 +0000
-@@ -184,10 +184,6 @@
- 
- #define BASENAMELEN	(MAXNAMLEN - 5)
- 
--#ifdef HAVE_ERRNO_H
--# include <errno.h>
--#endif
--
- #ifdef HAVE_PWD_H
- # include <pwd.h>
- #endif
-diff -Naur vim73.orig/src/os_win16.c vim73/src/os_win16.c
---- vim73.orig/src/os_win16.c	2010-06-26 04:03:31.000000000 +0000
-+++ vim73/src/os_win16.c	2012-11-01 20:35:47.000000000 +0000
-@@ -20,13 +20,11 @@
- # pragma warn -obs
- #endif
- 
--#include "vimio.h"
- #include "vim.h"
- 
- #include <dos.h>
- #include <string.h>
- #include <sys/types.h>
--#include <errno.h>
- #include <signal.h>
- #include <limits.h>
- #include <process.h>
-@@ -245,9 +243,9 @@
- 	/* Wait for the command to terminate before continuing */
- 	while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
- 	{
--	    while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) && again )
-+	    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && again)
- 	    {
--		if(msg.message == WM_QUIT)
-+		if (msg.message == WM_QUIT)
- 
- 		{
- 		    PostQuitMessage(msg.wParam);
-@@ -381,13 +379,13 @@
- 
- 
- /*
-- * How much memory is available?
-+ * How much memory is available in Kbyte?
-  */
-     long_u
- mch_avail_mem(
-     int special)
- {
--    return GetFreeSpace(0);
-+    return GetFreeSpace(0) >> 10;
- }
- 
- 
-diff -Naur vim73.orig/src/os_win32.c vim73/src/os_win32.c
---- vim73.orig/src/os_win32.c	2010-07-14 14:49:36.000000000 +0000
-+++ vim73/src/os_win32.c	2012-11-01 20:35:48.000000000 +0000
-@@ -20,7 +20,6 @@
-  * Roger Knobbe <rogerk@wonderware.com> did the initial port of Vim 3.0.
-  */
- 
--#include "vimio.h"
- #include "vim.h"
- 
- #ifdef FEAT_MZSCHEME
-@@ -28,7 +27,6 @@
- #endif
- 
- #include <sys/types.h>
--#include <errno.h>
- #include <signal.h>
- #include <limits.h>
- #include <process.h>
-@@ -154,6 +152,14 @@
- # define wcsicmp(a, b) wcscmpi((a), (b))
- #endif
- 
-+/* Enable common dialogs input unicode from IME if posible. */
-+#ifdef FEAT_MBYTE
-+LRESULT (WINAPI *pDispatchMessage)(LPMSG) = DispatchMessage;
-+BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage;
-+BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage;
-+BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage;
-+#endif
-+
- #ifndef FEAT_GUI_W32
- /* Win32 Console handles for input and output */
- static HANDLE g_hConIn  = INVALID_HANDLE_VALUE;
-@@ -206,55 +212,130 @@
- static int suppress_winsize = 1;	/* don't fiddle with console */
- #endif
- 
-+static char_u *exe_path = NULL;
-+
-     static void
- get_exe_name(void)
- {
--    char	temp[256];
--    static int	did_set_PATH = FALSE;
-+    /* Maximum length of $PATH is more than MAXPATHL.  8191 is often mentioned
-+     * as the maximum length that works (plus a NUL byte). */
-+#define MAX_ENV_PATH_LEN 8192
-+    char	temp[MAX_ENV_PATH_LEN];
-+    char_u	*p;
- 
-     if (exe_name == NULL)
-     {
- 	/* store the name of the executable, may be used for $VIM */
--	GetModuleFileName(NULL, temp, 255);
-+	GetModuleFileName(NULL, temp, MAX_ENV_PATH_LEN - 1);
- 	if (*temp != NUL)
- 	    exe_name = FullName_save((char_u *)temp, FALSE);
-     }
- 
--    if (!did_set_PATH && exe_name != NULL)
-+    if (exe_path == NULL && exe_name != NULL)
-     {
--	char_u	    *p;
--	char_u	    *newpath;
--
--	/* Append our starting directory to $PATH, so that when doing "!xxd"
--	 * it's found in our starting directory.  Needed because SearchPath()
--	 * also looks there. */
--	p = mch_getenv("PATH");
--	newpath = alloc((unsigned)(STRLEN(p) + STRLEN(exe_name) + 2));
--	if (newpath != NULL)
--	{
--	    STRCPY(newpath, p);
--	    STRCAT(newpath, ";");
--	    vim_strncpy(newpath + STRLEN(newpath), exe_name,
--					    gettail_sep(exe_name) - exe_name);
--	    vim_setenv((char_u *)"PATH", newpath);
--	    vim_free(newpath);
-+	exe_path = vim_strnsave(exe_name,
-+				     (int)(gettail_sep(exe_name) - exe_name));
-+	if (exe_path != NULL)
-+	{
-+	    /* Append our starting directory to $PATH, so that when doing
-+	     * "!xxd" it's found in our starting directory.  Needed because
-+	     * SearchPath() also looks there. */
-+	    p = mch_getenv("PATH");
-+	    if (p == NULL
-+		       || STRLEN(p) + STRLEN(exe_path) + 2 < MAX_ENV_PATH_LEN)
-+	    {
-+		if (p == NULL || *p == NUL)
-+		    temp[0] = NUL;
-+		else
-+		{
-+		    STRCPY(temp, p);
-+		    STRCAT(temp, ";");
-+		}
-+		STRCAT(temp, exe_path);
-+		vim_setenv((char_u *)"PATH", temp);
-+	    }
- 	}
-+    }
-+}
-+
-+/*
-+ * Unescape characters in "p" that appear in "escaped".
-+ */
-+    static void
-+unescape_shellxquote(char_u *p, char_u *escaped)
-+{
-+    int	    l = (int)STRLEN(p);
-+    int	    n;
- 
--	did_set_PATH = TRUE;
-+    while (*p != NUL)
-+    {
-+	if (*p == '^' && vim_strchr(escaped, p[1]) != NULL)
-+	    mch_memmove(p, p + 1, l--);
-+#ifdef FEAT_MBYTE
-+	n = (*mb_ptr2len)(p);
-+#else
-+	n = 1;
-+#endif
-+	p += n;
-+	l -= n;
-+    }
-+}
-+
-+/*
-+ * Load library "name".
-+ */
-+    HINSTANCE
-+vimLoadLib(char *name)
-+{
-+    HINSTANCE	dll = NULL;
-+    char	old_dir[MAXPATHL];
-+
-+    /* NOTE: Do not use mch_dirname() and mch_chdir() here, they may call
-+     * vimLoadLib() recursively, which causes a stack overflow. */
-+    if (exe_path == NULL)
-+	get_exe_name();
-+    if (exe_path != NULL)
-+    {
-+#ifdef FEAT_MBYTE
-+	WCHAR old_dirw[MAXPATHL];
-+
-+	if (GetCurrentDirectoryW(MAXPATHL, old_dirw) != 0)
-+	{
-+	    /* Change directory to where the executable is, both to make
-+	     * sure we find a .dll there and to avoid looking for a .dll
-+	     * in the current directory. */
-+	    SetCurrentDirectory(exe_path);
-+	    dll = LoadLibrary(name);
-+	    SetCurrentDirectoryW(old_dirw);
-+	    return dll;
-+	}
-+	/* Retry with non-wide function (for Windows 98). */
-+	if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
-+#endif
-+	    if (GetCurrentDirectory(MAXPATHL, old_dir) != 0)
-+	    {
-+		/* Change directory to where the executable is, both to make
-+		 * sure we find a .dll there and to avoid looking for a .dll
-+		 * in the current directory. */
-+		SetCurrentDirectory(exe_path);
-+		dll = LoadLibrary(name);
-+		SetCurrentDirectory(old_dir);
-+	    }
-     }
-+    return dll;
- }
- 
- #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
- # ifndef GETTEXT_DLL
- #  define GETTEXT_DLL "libintl.dll"
- # endif
--/* Dummy funcitons */
-+/* Dummy functions */
- static char *null_libintl_gettext(const char *);
- static char *null_libintl_textdomain(const char *);
- static char *null_libintl_bindtextdomain(const char *, const char *);
- static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
- 
--static HINSTANCE hLibintlDLL = 0;
-+static HINSTANCE hLibintlDLL = NULL;
- char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
- char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
- char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
-@@ -282,26 +363,16 @@
-     if (hLibintlDLL)
- 	return 1;
-     /* Load gettext library (libintl.dll) */
--    hLibintlDLL = LoadLibrary(libname != NULL ? libname : GETTEXT_DLL);
-+    hLibintlDLL = vimLoadLib(libname != NULL ? libname : GETTEXT_DLL);
-     if (!hLibintlDLL)
-     {
--	char_u	    dirname[_MAX_PATH];
--
--	/* Try using the path from gvim.exe to find the .dll there. */
--	get_exe_name();
--	STRCPY(dirname, exe_name);
--	STRCPY(gettail(dirname), GETTEXT_DLL);
--	hLibintlDLL = LoadLibrary((char *)dirname);
--	if (!hLibintlDLL)
-+	if (p_verbose > 0)
- 	{
--	    if (p_verbose > 0)
--	    {
--		verbose_enter();
--		EMSG2(_(e_loadlib), GETTEXT_DLL);
--		verbose_leave();
--	    }
--	    return 0;
-+	    verbose_enter();
-+	    EMSG2(_(e_loadlib), GETTEXT_DLL);
-+	    verbose_leave();
- 	}
-+	return 0;
-     }
-     for (i = 0; libintl_entry[i].name != NULL
- 					 && libintl_entry[i].ptr != NULL; ++i)
-@@ -398,6 +469,11 @@
- static PGNSECINFO pGetNamedSecurityInfo;
- #endif
- 
-+typedef BOOL (WINAPI *PSETHANDLEINFORMATION)(HANDLE, DWORD, DWORD);
-+
-+static BOOL allowPiping = FALSE;
-+static PSETHANDLEINFORMATION pSetHandleInformation;
-+
- /*
-  * Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or
-  * VER_PLATFORM_WIN32_WINDOWS (Win95).
-@@ -430,7 +506,7 @@
- 	     * Seems like a lot of overhead to load/unload ADVAPI32.DLL each
- 	     * time we verify security...
- 	     */
--	    advapi_lib = LoadLibrary("ADVAPI32.DLL");
-+	    advapi_lib = vimLoadLib("ADVAPI32.DLL");
- 	    if (advapi_lib != NULL)
- 	    {
- 		pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib,
-@@ -448,6 +524,18 @@
- 	    }
- 	}
- #endif
-+	/*
-+	 * If we are on windows NT, try to load the pipe functions, only
-+	 * available from Win2K.
-+	 */
-+	if (g_PlatformId == VER_PLATFORM_WIN32_NT)
-+	{
-+	    HANDLE kernel32 = GetModuleHandle("kernel32");
-+	    pSetHandleInformation = (PSETHANDLEINFORMATION)GetProcAddress(
-+					    kernel32, "SetHandleInformation");
-+
-+	    allowPiping = pSetHandleInformation != NULL;
-+	}
- 	done = TRUE;
-     }
- }
-@@ -1342,7 +1430,7 @@
- 
- 
- /*
-- * mch_inchar(): low-level input funcion.
-+ * mch_inchar(): low-level input function.
-  * Get one or more characters from the keyboard or the mouse.
-  * If time == 0, do not wait for characters.
-  * If time == n, wait a short time for characters.
-@@ -1615,6 +1703,35 @@
-     return TRUE;
- }
- 
-+#if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
-+       __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
-+/*
-+ * Bad parameter handler.
-+ *
-+ * Certain MS CRT functions will intentionally crash when passed invalid
-+ * parameters to highlight possible security holes.  Setting this function as
-+ * the bad parameter handler will prevent the crash.
-+ *
-+ * In debug builds the parameters contain CRT information that might help track
-+ * down the source of a problem, but in non-debug builds the arguments are all
-+ * NULL/0.  Debug builds will also produce assert dialogs from the CRT, it is
-+ * worth allowing these to make debugging of issues easier.
-+ */
-+    static void
-+bad_param_handler(const wchar_t *expression,
-+    const wchar_t *function,
-+    const wchar_t *file,
-+    unsigned int line,
-+    uintptr_t pReserved)
-+{
-+}
-+
-+# define SET_INVALID_PARAM_HANDLER \
-+	((void)_set_invalid_parameter_handler(bad_param_handler))
-+#else
-+# define SET_INVALID_PARAM_HANDLER
-+#endif
-+
- #ifdef FEAT_GUI_W32
- 
- /*
-@@ -1627,6 +1744,9 @@
-     extern int _fmode;
- #endif
- 
-+    /* Silently handle invalid parameters to CRT functions */
-+    SET_INVALID_PARAM_HANDLER;
-+
-     /* Let critical errors result in a failure, not in a dialog box.  Required
-      * for the timestamp test to work on removed floppies. */
-     SetErrorMode(SEM_FAILCRITICALERRORS);
-@@ -1835,8 +1955,7 @@
- 	cb->BufferSize.X = cb->Info.dwSize.X;
- 	cb->BufferSize.Y = cb->Info.dwSize.Y;
- 	NumCells = cb->BufferSize.X * cb->BufferSize.Y;
--	if (cb->Buffer != NULL)
--	    vim_free(cb->Buffer);
-+	vim_free(cb->Buffer);
- 	cb->Buffer = (PCHAR_INFO)alloc(NumCells * sizeof(CHAR_INFO));
- 	if (cb->Buffer == NULL)
- 	    return FALSE;
-@@ -2103,6 +2222,9 @@
-     extern int _fmode;
- #endif
- 
-+    /* Silently handle invalid parameters to CRT functions */
-+    SET_INVALID_PARAM_HANDLER;
-+
-     /* Let critical errors result in a failure, not in a dialog box.  Required
-      * for the timestamp test to work on removed floppies. */
-     SetErrorMode(SEM_FAILCRITICALERRORS);
-@@ -2273,12 +2395,14 @@
-     int		len)
- {
-     char		szTrueName[_MAX_PATH + 2];
-+    char		szTrueNameTemp[_MAX_PATH + 2];
-     char		*ptrue, *ptruePrev;
-     char		*porig, *porigPrev;
-     int			flen;
-     WIN32_FIND_DATA	fb;
-     HANDLE		hFind;
-     int			c;
-+    int			slen;
- 
-     flen = (int)STRLEN(name);
-     if (flen == 0 || flen > _MAX_PATH)
-@@ -2323,12 +2447,19 @@
- 	}
- 	*ptrue = NUL;
- 
-+	/* To avoid a slow failure append "\*" when searching a directory,
-+	 * server or network share. */
-+	STRCPY(szTrueNameTemp, szTrueName);
-+	slen = (int)strlen(szTrueNameTemp);
-+	if (*porig == psepc && slen + 2 < _MAX_PATH)
-+	    STRCPY(szTrueNameTemp + slen, "\\*");
-+
- 	/* Skip "", "." and "..". */
- 	if (ptrue > ptruePrev
- 		&& (ptruePrev[0] != '.'
- 		    || (ptruePrev[1] != NUL
- 			&& (ptruePrev[1] != '.' || ptruePrev[2] != NUL)))
--		&& (hFind = FindFirstFile(szTrueName, &fb))
-+		&& (hFind = FindFirstFile(szTrueNameTemp, &fb))
- 						      != INVALID_HANDLE_VALUE)
- 	{
- 	    c = *porig;
-@@ -2578,30 +2709,73 @@
- }
- 
- /*
-+ * Create directory "name".
-+ * Return 0 on success, -1 on error.
-+ */
-+    int
-+mch_mkdir(char_u *name)
-+{
-+#ifdef FEAT_MBYTE
-+    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-+    {
-+	WCHAR	*p;
-+	int	retval;
-+
-+	p = enc_to_utf16(name, NULL);
-+	if (p == NULL)
-+	    return -1;
-+	retval = _wmkdir(p);
-+	vim_free(p);
-+	return retval;
-+    }
-+#endif
-+    return _mkdir(name);
-+}
-+
-+/*
-  * Return TRUE if file "fname" has more than one link.
-  */
-     int
- mch_is_linked(char_u *fname)
- {
-+    BY_HANDLE_FILE_INFORMATION info;
-+
-+    return win32_fileinfo(fname, &info) == FILEINFO_OK
-+						   && info.nNumberOfLinks > 1;
-+}
-+
-+/*
-+ * Get the by-handle-file-information for "fname".
-+ * Returns FILEINFO_OK when OK.
-+ * returns FILEINFO_ENC_FAIL when enc_to_utf16() failed.
-+ * Returns FILEINFO_READ_FAIL when CreateFile() failed.
-+ * Returns FILEINFO_INFO_FAIL when GetFileInformationByHandle() failed.
-+ */
-+    int
-+win32_fileinfo(char_u *fname, BY_HANDLE_FILE_INFORMATION *info)
-+{
-     HANDLE	hFile;
--    int		res = 0;
--    BY_HANDLE_FILE_INFORMATION inf;
-+    int		res = FILEINFO_READ_FAIL;
- #ifdef FEAT_MBYTE
-     WCHAR	*wn = NULL;
- 
-     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
-+    {
- 	wn = enc_to_utf16(fname, NULL);
-+	if (wn == NULL)
-+	    res = FILEINFO_ENC_FAIL;
-+    }
-     if (wn != NULL)
-     {
- 	hFile = CreateFileW(wn,		/* file name */
- 		    GENERIC_READ,	/* access mode */
--		    0,			/* share mode */
-+		    FILE_SHARE_READ | FILE_SHARE_WRITE,	/* share mode */
- 		    NULL,		/* security descriptor */
- 		    OPEN_EXISTING,	/* creation disposition */
--		    0,			/* file attributes */
-+		    FILE_FLAG_BACKUP_SEMANTICS,	/* file attributes */
- 		    NULL);		/* handle to template file */
- 	if (hFile == INVALID_HANDLE_VALUE
--		&& GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
-+			      && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
- 	{
- 	    /* Retry with non-wide function (for Windows 98). */
- 	    vim_free(wn);
-@@ -2612,17 +2786,18 @@
- #endif
- 	hFile = CreateFile(fname,	/* file name */
- 		    GENERIC_READ,	/* access mode */
--		    0,			/* share mode */
-+		    FILE_SHARE_READ | FILE_SHARE_WRITE,	/* share mode */
- 		    NULL,		/* security descriptor */
- 		    OPEN_EXISTING,	/* creation disposition */
--		    0,			/* file attributes */
-+		    FILE_FLAG_BACKUP_SEMANTICS,	/* file attributes */
- 		    NULL);		/* handle to template file */
- 
-     if (hFile != INVALID_HANDLE_VALUE)
-     {
--	if (GetFileInformationByHandle(hFile, &inf) != 0
--		&& inf.nNumberOfLinks > 1)
--	    res = 1;
-+	if (GetFileInformationByHandle(hFile, info) != 0)
-+	    res = FILEINFO_OK;
-+	else
-+	    res = FILEINFO_INFO_FAIL;
- 	CloseHandle(hFile);
-     }
- 
-@@ -3104,7 +3279,7 @@
-  *    4. Prompt the user to press a key to close the console window
-  */
-     static int
--mch_system(char *cmd, int options)
-+mch_system_classic(char *cmd, int options)
- {
-     STARTUPINFO		si;
-     PROCESS_INFORMATION pi;
-@@ -3120,9 +3295,10 @@
-      * It's nicer to run a filter command in a minimized window, but in
-      * Windows 95 this makes the command MUCH slower.  We can't do it under
-      * Win32s either as it stops the synchronous spawn workaround working.
-+     * Don't activate the window to keep focus on Vim.
-      */
-     if ((options & SHELL_DOOUT) && !mch_windows95() && !gui_is_win32s())
--	si.wShowWindow = SW_SHOWMINIMIZED;
-+	si.wShowWindow = SW_SHOWMINNOACTIVE;
-     else
- 	si.wShowWindow = SW_SHOWNORMAL;
-     si.cbReserved2 = 0;
-@@ -3160,10 +3336,12 @@
- 	{
- 	    MSG	msg;
- 
--	    if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
-+	    if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
- 	    {
- 		TranslateMessage(&msg);
--		DispatchMessage(&msg);
-+		pDispatchMessage(&msg);
-+		delay = 1;
-+		continue;
- 	    }
- 	    if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
- 		break;
-@@ -3208,6 +3386,506 @@
- 
-     return ret;
- }
-+
-+/*
-+ * Thread launched by the gui to send the current buffer data to the
-+ * process. This way avoid to hang up vim totally if the children
-+ * process take a long time to process the lines.
-+ */
-+    static DWORD WINAPI
-+sub_process_writer(LPVOID param)
-+{
-+    HANDLE	    g_hChildStd_IN_Wr = param;
-+    linenr_T	    lnum = curbuf->b_op_start.lnum;
-+    DWORD	    len = 0;
-+    DWORD	    l;
-+    char_u	    *lp = ml_get(lnum);
-+    char_u	    *s;
-+    int		    written = 0;
-+
-+    for (;;)
-+    {
-+	l = (DWORD)STRLEN(lp + written);
-+	if (l == 0)
-+	    len = 0;
-+	else if (lp[written] == NL)
-+	{
-+	    /* NL -> NUL translation */
-+	    WriteFile(g_hChildStd_IN_Wr, "", 1, &len, NULL);
-+	}
-+	else
-+	{
-+	    s = vim_strchr(lp + written, NL);
-+	    WriteFile(g_hChildStd_IN_Wr, (char *)lp + written,
-+		      s == NULL ? l : (DWORD)(s - (lp + written)),
-+		      &len, NULL);
-+	}
-+	if (len == (int)l)
-+	{
-+	    /* Finished a line, add a NL, unless this line should not have
-+	     * one. */
-+	    if (lnum != curbuf->b_op_end.lnum
-+		|| !curbuf->b_p_bin
-+		|| (lnum != curbuf->b_no_eol_lnum
-+		    && (lnum != curbuf->b_ml.ml_line_count
-+			|| curbuf->b_p_eol)))
-+	    {
-+		WriteFile(g_hChildStd_IN_Wr, "\n", 1, &ignored, NULL);
-+	    }
-+
-+	    ++lnum;
-+	    if (lnum > curbuf->b_op_end.lnum)
-+		break;
-+
-+	    lp = ml_get(lnum);
-+	    written = 0;
-+	}
-+	else if (len > 0)
-+	    written += len;
-+    }
-+
-+    /* finished all the lines, close pipe */
-+    CloseHandle(g_hChildStd_IN_Wr);
-+    ExitThread(0);
-+}
-+
-+
-+# define BUFLEN 100	/* length for buffer, stolen from unix version */
-+
-+/*
-+ * This function read from the children's stdout and write the
-+ * data on screen or in the buffer accordingly.
-+ */
-+    static void
-+dump_pipe(int	    options,
-+	  HANDLE    g_hChildStd_OUT_Rd,
-+	  garray_T  *ga,
-+	  char_u    buffer[],
-+	  DWORD	    *buffer_off)
-+{
-+    DWORD	availableBytes = 0;
-+    DWORD	i;
-+    int		ret;
-+    DWORD	len;
-+    DWORD	toRead;
-+    int		repeatCount;
-+
-+    /* we query the pipe to see if there is any data to read
-+     * to avoid to perform a blocking read */
-+    ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
-+			NULL,		    /* optional buffer */
-+			0,		    /* buffer size */
-+			NULL,		    /* number of read bytes */
-+			&availableBytes,    /* available bytes total */
-+			NULL);		    /* byteLeft */
-+
-+    repeatCount = 0;
-+    /* We got real data in the pipe, read it */
-+    while (ret != 0 && availableBytes > 0)
-+    {
-+	repeatCount++;
-+	toRead =
-+# ifdef FEAT_MBYTE
-+		 (DWORD)(BUFLEN - *buffer_off);
-+# else
-+		 (DWORD)BUFLEN;
-+# endif
-+	toRead = availableBytes < toRead ? availableBytes : toRead;
-+	ReadFile(g_hChildStd_OUT_Rd, buffer
-+# ifdef FEAT_MBYTE
-+		 + *buffer_off, toRead
-+# else
-+		 , toRead
-+# endif
-+		 , &len, NULL);
-+
-+	/* If we haven't read anything, there is a problem */
-+	if (len == 0)
-+	    break;
-+
-+	availableBytes -= len;
-+
-+	if (options & SHELL_READ)
-+	{
-+	    /* Do NUL -> NL translation, append NL separated
-+	     * lines to the current buffer. */
-+	    for (i = 0; i < len; ++i)
-+	    {
-+		if (buffer[i] == NL)
-+		    append_ga_line(ga);
-+		else if (buffer[i] == NUL)
-+		    ga_append(ga, NL);
-+		else
-+		    ga_append(ga, buffer[i]);
-+	    }
-+	}
-+# ifdef FEAT_MBYTE
-+	else if (has_mbyte)
-+	{
-+	    int		l;
-+	    int		c;
-+	    char_u	*p;
-+
-+	    len += *buffer_off;
-+	    buffer[len] = NUL;
-+
-+	    /* Check if the last character in buffer[] is
-+	     * incomplete, keep these bytes for the next
-+	     * round. */
-+	    for (p = buffer; p < buffer + len; p += l)
-+	    {
-+		l = mb_cptr2len(p);
-+		if (l == 0)
-+		    l = 1;  /* NUL byte? */
-+		else if (MB_BYTE2LEN(*p) != l)
-+		    break;
-+	    }
-+	    if (p == buffer)	/* no complete character */
-+	    {
-+		/* avoid getting stuck at an illegal byte */
-+		if (len >= 12)
-+		    ++p;
-+		else
-+		{
-+		    *buffer_off = len;
-+		    return;
-+		}
-+	    }
-+	    c = *p;
-+	    *p = NUL;
-+	    msg_puts(buffer);
-+	    if (p < buffer + len)
-+	    {
-+		*p = c;
-+		*buffer_off = (DWORD)((buffer + len) - p);
-+		mch_memmove(buffer, p, *buffer_off);
-+		return;
-+	    }
-+	    *buffer_off = 0;
-+	}
-+# endif /* FEAT_MBYTE */
-+	else
-+	{
-+	    buffer[len] = NUL;
-+	    msg_puts(buffer);
-+	}
-+
-+	windgoto(msg_row, msg_col);
-+	cursor_on();
-+	out_flush();
-+    }
-+}
-+
-+/*
-+ * Version of system to use for windows NT > 5.0 (Win2K), use pipe
-+ * for communication and doesn't open any new window.
-+ */
-+    static int
-+mch_system_piped(char *cmd, int options)
-+{
-+    STARTUPINFO		si;
-+    PROCESS_INFORMATION pi;
-+    DWORD		ret = 0;
-+
-+    HANDLE g_hChildStd_IN_Rd = NULL;
-+    HANDLE g_hChildStd_IN_Wr = NULL;
-+    HANDLE g_hChildStd_OUT_Rd = NULL;
-+    HANDLE g_hChildStd_OUT_Wr = NULL;
-+
-+    char_u	buffer[BUFLEN + 1]; /* reading buffer + size */
-+    DWORD	len;
-+
-+    /* buffer used to receive keys */
-+    char_u	ta_buf[BUFLEN + 1];	/* TypeAHead */
-+    int		ta_len = 0;		/* valid bytes in ta_buf[] */
-+
-+    DWORD	i;
-+    int		c;
-+    int		noread_cnt = 0;
-+    garray_T	ga;
-+    int	    delay = 1;
-+    DWORD	buffer_off = 0;	/* valid bytes in buffer[] */
-+    char	*p = NULL;
-+
-+    SECURITY_ATTRIBUTES saAttr;
-+
-+    /* Set the bInheritHandle flag so pipe handles are inherited. */
-+    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
-+    saAttr.bInheritHandle = TRUE;
-+    saAttr.lpSecurityDescriptor = NULL;
-+
-+    if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)
-+	/* Ensure the read handle to the pipe for STDOUT is not inherited. */
-+       || ! pSetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)
-+	/* Create a pipe for the child process's STDIN. */
-+       || ! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)
-+	/* Ensure the write handle to the pipe for STDIN is not inherited. */
-+       || ! pSetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) )
-+    {
-+	CloseHandle(g_hChildStd_IN_Rd);
-+	CloseHandle(g_hChildStd_IN_Wr);
-+	CloseHandle(g_hChildStd_OUT_Rd);
-+	CloseHandle(g_hChildStd_OUT_Wr);
-+	MSG_PUTS(_("\nCannot create pipes\n"));
-+    }
-+
-+    si.cb = sizeof(si);
-+    si.lpReserved = NULL;
-+    si.lpDesktop = NULL;
-+    si.lpTitle = NULL;
-+    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
-+
-+    /* set-up our file redirection */
-+    si.hStdError = g_hChildStd_OUT_Wr;
-+    si.hStdOutput = g_hChildStd_OUT_Wr;
-+    si.hStdInput = g_hChildStd_IN_Rd;
-+    si.wShowWindow = SW_HIDE;
-+    si.cbReserved2 = 0;
-+    si.lpReserved2 = NULL;
-+
-+    if (options & SHELL_READ)
-+	ga_init2(&ga, 1, BUFLEN);
-+
-+    if (cmd != NULL)
-+    {
-+	p = (char *)vim_strsave((char_u *)cmd);
-+	if (p != NULL)
-+	    unescape_shellxquote((char_u *)p, p_sxe);
-+	else
-+	    p = cmd;
-+    }
-+
-+    /* Now, run the command */
-+    CreateProcess(NULL,			/* Executable name */
-+		  p,			/* Command to execute */
-+		  NULL,			/* Process security attributes */
-+		  NULL,			/* Thread security attributes */
-+
-+		  // this command can be litigious, handle inheritance was
-+		  // deactivated for pending temp file, but, if we deactivate
-+		  // it, the pipes don't work for some reason.
-+		  TRUE,			/* Inherit handles, first deactivated,
-+					 * but needed */
-+		  CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
-+		  NULL,			/* Environment */
-+		  NULL,			/* Current directory */
-+		  &si,			/* Startup information */
-+		  &pi);			/* Process information */
-+
-+    if (p != cmd)
-+	vim_free(p);
-+
-+    /* Close our unused side of the pipes */
-+    CloseHandle(g_hChildStd_IN_Rd);
-+    CloseHandle(g_hChildStd_OUT_Wr);
-+
-+    if (options & SHELL_WRITE)
-+    {
-+	HANDLE thread =
-+	   CreateThread(NULL,  /* security attributes */
-+			0,     /* default stack size */
-+			sub_process_writer, /* function to be executed */
-+			g_hChildStd_IN_Wr,  /* parameter */
-+			0,		 /* creation flag, start immediately */
-+			NULL);		    /* we don't care about thread id */
-+	CloseHandle(thread);
-+	g_hChildStd_IN_Wr = NULL;
-+    }
-+
-+    /* Keep updating the window while waiting for the shell to finish. */
-+    for (;;)
-+    {
-+	MSG	msg;
-+
-+	if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
-+	{
-+	    TranslateMessage(&msg);
-+	    DispatchMessage(&msg);
-+	}
-+
-+	/* write pipe information in the window */
-+	if ((options & (SHELL_READ|SHELL_WRITE))
-+# ifdef FEAT_GUI
-+		|| gui.in_use
-+# endif
-+	    )
-+	{
-+	    len = 0;
-+	    if (!(options & SHELL_EXPAND)
-+		&& ((options &
-+			(SHELL_READ|SHELL_WRITE|SHELL_COOKED))
-+		    != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
-+# ifdef FEAT_GUI
-+		    || gui.in_use
-+# endif
-+		    )
-+		&& (ta_len > 0 || noread_cnt > 4))
-+	    {
-+		if (ta_len == 0)
-+		{
-+		    /* Get extra characters when we don't have any.  Reset the
-+		     * counter and timer. */
-+		    noread_cnt = 0;
-+# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
-+		    gettimeofday(&start_tv, NULL);
-+# endif
-+		    len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
-+		}
-+		if (ta_len > 0 || len > 0)
-+		{
-+		    /*
-+		     * For pipes: Check for CTRL-C: send interrupt signal to
-+		     * child.  Check for CTRL-D: EOF, close pipe to child.
-+		     */
-+		    if (len == 1 && cmd != NULL)
-+		    {
-+			if (ta_buf[ta_len] == Ctrl_C)
-+			{
-+			    /* Learn what exit code is expected, for
-+				* now put 9 as SIGKILL */
-+			    TerminateProcess(pi.hProcess, 9);
-+			}
-+			if (ta_buf[ta_len] == Ctrl_D)
-+			{
-+			    CloseHandle(g_hChildStd_IN_Wr);
-+			    g_hChildStd_IN_Wr = NULL;
-+			}
-+		    }
-+
-+		    /* replace K_BS by <BS> and K_DEL by <DEL> */
-+		    for (i = ta_len; i < ta_len + len; ++i)
-+		    {
-+			if (ta_buf[i] == CSI && len - i > 2)
-+			{
-+			    c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
-+			    if (c == K_DEL || c == K_KDEL || c == K_BS)
-+			    {
-+				mch_memmove(ta_buf + i + 1, ta_buf + i + 3,
-+					    (size_t)(len - i - 2));
-+				if (c == K_DEL || c == K_KDEL)
-+				    ta_buf[i] = DEL;
-+				else
-+				    ta_buf[i] = Ctrl_H;
-+				len -= 2;
-+			    }
-+			}
-+			else if (ta_buf[i] == '\r')
-+			    ta_buf[i] = '\n';
-+# ifdef FEAT_MBYTE
-+			if (has_mbyte)
-+			    i += (*mb_ptr2len_len)(ta_buf + i,
-+						    ta_len + len - i) - 1;
-+# endif
-+		    }
-+
-+		    /*
-+		     * For pipes: echo the typed characters.  For a pty this
-+		     * does not seem to work.
-+		     */
-+		    for (i = ta_len; i < ta_len + len; ++i)
-+		    {
-+			if (ta_buf[i] == '\n' || ta_buf[i] == '\b')
-+			    msg_putchar(ta_buf[i]);
-+# ifdef FEAT_MBYTE
-+			else if (has_mbyte)
-+			{
-+			    int l = (*mb_ptr2len)(ta_buf + i);
-+
-+			    msg_outtrans_len(ta_buf + i, l);
-+			    i += l - 1;
-+			}
-+# endif
-+			else
-+			    msg_outtrans_len(ta_buf + i, 1);
-+		    }
-+		    windgoto(msg_row, msg_col);
-+		    out_flush();
-+
-+		    ta_len += len;
-+
-+		    /*
-+		     * Write the characters to the child, unless EOF has been
-+		     * typed for pipes.  Write one character at a time, to
-+		     * avoid losing too much typeahead.  When writing buffer
-+		     * lines, drop the typed characters (only check for
-+		     * CTRL-C).
-+		     */
-+		    if (options & SHELL_WRITE)
-+			ta_len = 0;
-+		    else if (g_hChildStd_IN_Wr != NULL)
-+		    {
-+			WriteFile(g_hChildStd_IN_Wr, (char*)ta_buf,
-+				    1, &len, NULL);
-+			// if we are typing in, we want to keep things reactive
-+			delay = 1;
-+			if (len > 0)
-+			{
-+			    ta_len -= len;
-+			    mch_memmove(ta_buf, ta_buf + len, ta_len);
-+			}
-+		    }
-+		}
-+	    }
-+	}
-+
-+	if (ta_len)
-+	    ui_inchar_undo(ta_buf, ta_len);
-+
-+	if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
-+	{
-+	    dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
-+	    break;
-+	}
-+
-+	++noread_cnt;
-+	dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
-+
-+	/* We start waiting for a very short time and then increase it, so
-+	 * that we respond quickly when the process is quick, and don't
-+	 * consume too much overhead when it's slow. */
-+	if (delay < 50)
-+	    delay += 10;
-+    }
-+
-+    /* Close the pipe */
-+    CloseHandle(g_hChildStd_OUT_Rd);
-+    if (g_hChildStd_IN_Wr != NULL)
-+	CloseHandle(g_hChildStd_IN_Wr);
-+
-+    WaitForSingleObject(pi.hProcess, INFINITE);
-+
-+    /* Get the command exit code */
-+    GetExitCodeProcess(pi.hProcess, &ret);
-+
-+    if (options & SHELL_READ)
-+    {
-+	if (ga.ga_len > 0)
-+	{
-+	    append_ga_line(&ga);
-+	    /* remember that the NL was missing */
-+	    curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
-+	}
-+	else
-+	    curbuf->b_no_eol_lnum = 0;
-+	ga_clear(&ga);
-+    }
-+
-+    /* Close the handles to the subprocess, so that it goes away */
-+    CloseHandle(pi.hThread);
-+    CloseHandle(pi.hProcess);
-+
-+    return ret;
-+}
-+
-+    static int
-+mch_system(char *cmd, int options)
-+{
-+    /* if we can pipe and the shelltemp option is off */
-+    if (allowPiping && !p_stmp)
-+	return mch_system_piped(cmd, options);
-+    else
-+	return mch_system_classic(cmd, options);
-+}
- #else
- 
- # define mch_system(c, o) system(c)
-@@ -3278,84 +3956,147 @@
-     else
-     {
- 	/* we use "command" or "cmd" to start the shell; slow but easy */
--	char_u *newcmd;
--	long_u cmdlen =  (
--#ifdef FEAT_GUI_W32
--		STRLEN(vimrun_path) +
--#endif
--		STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
-+	char_u	*newcmd = NULL;
-+	char_u	*cmdbase = cmd;
-+	long_u	cmdlen;
-+
-+	/* Skip a leading ", ( and "(. */
-+	if (*cmdbase == '"' )
-+	    ++cmdbase;
-+	if (*cmdbase == '(')
-+	    ++cmdbase;
-+
-+	if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
-+	{
-+	    STARTUPINFO		si;
-+	    PROCESS_INFORMATION	pi;
-+	    DWORD		flags = CREATE_NEW_CONSOLE;
-+	    char_u		*p;
-+
-+	    si.cb = sizeof(si);
-+	    si.lpReserved = NULL;
-+	    si.lpDesktop = NULL;
-+	    si.lpTitle = NULL;
-+	    si.dwFlags = 0;
-+	    si.cbReserved2 = 0;
-+	    si.lpReserved2 = NULL;
-+
-+	    cmdbase = skipwhite(cmdbase + 5);
-+	    if ((STRNICMP(cmdbase, "/min", 4) == 0)
-+		    && vim_iswhite(cmdbase[4]))
-+	    {
-+		cmdbase = skipwhite(cmdbase + 4);
-+		si.dwFlags = STARTF_USESHOWWINDOW;
-+		si.wShowWindow = SW_SHOWMINNOACTIVE;
-+	    }
-+	    else if ((STRNICMP(cmdbase, "/b", 2) == 0)
-+		    && vim_iswhite(cmdbase[2]))
-+	    {
-+		cmdbase = skipwhite(cmdbase + 2);
-+		flags = CREATE_NO_WINDOW;
-+		si.dwFlags = STARTF_USESTDHANDLES;
-+		si.hStdInput = CreateFile("\\\\.\\NUL",	// File name
-+		    GENERIC_READ,			// Access flags
-+		    0,					// Share flags
-+		    NULL,				// Security att.
-+		    OPEN_EXISTING,			// Open flags
-+		    FILE_ATTRIBUTE_NORMAL,		// File att.
-+		    NULL);				// Temp file
-+		si.hStdOutput = si.hStdInput;
-+		si.hStdError = si.hStdInput;
-+	    }
- 
--	newcmd = lalloc(cmdlen, TRUE);
--	if (newcmd != NULL)
--	{
--	    char_u *cmdbase = (*cmd == '"' ? cmd + 1 : cmd);
-+	    /* Remove a trailing ", ) and )" if they have a match
-+	     * at the start of the command. */
-+	    if (cmdbase > cmd)
-+	    {
-+		p = cmdbase + STRLEN(cmdbase);
-+		if (p > cmdbase && p[-1] == '"' && *cmd == '"')
-+		    *--p = NUL;
-+		if (p > cmdbase && p[-1] == ')'
-+			&& (*cmd =='(' || cmd[1] == '('))
-+		    *--p = NUL;
-+	    }
-+
-+	    newcmd = cmdbase;
-+	    unescape_shellxquote(cmdbase, p_sxe);
- 
--	    if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
-+	    /*
-+	     * If creating new console, arguments are passed to the
-+	     * 'cmd.exe' as-is. If it's not, arguments are not treated
-+	     * correctly for current 'cmd.exe'. So unescape characters in
-+	     * shellxescape except '|' for avoiding to be treated as
-+	     * argument to them. Pass the arguments to sub-shell.
-+	     */
-+	    if (flags != CREATE_NEW_CONSOLE)
- 	    {
--		STARTUPINFO		si;
--		PROCESS_INFORMATION	pi;
--
--		si.cb = sizeof(si);
--		si.lpReserved = NULL;
--		si.lpDesktop = NULL;
--		si.lpTitle = NULL;
--		si.dwFlags = 0;
--		si.cbReserved2 = 0;
--		si.lpReserved2 = NULL;
--
--		cmdbase = skipwhite(cmdbase + 5);
--		if ((STRNICMP(cmdbase, "/min", 4) == 0)
--			&& vim_iswhite(cmdbase[4]))
--		{
--		    cmdbase = skipwhite(cmdbase + 4);
--		    si.dwFlags = STARTF_USESHOWWINDOW;
--		    si.wShowWindow = SW_SHOWMINNOACTIVE;
--		}
-+		char_u	*subcmd;
-+		char_u	*cmd_shell = mch_getenv("COMSPEC");
- 
--		/* When the command is in double quotes, but 'shellxquote' is
--		 * empty, keep the double quotes around the command.
--		 * Otherwise remove the double quotes, they aren't needed
--		 * here, because we don't use a shell to run the command. */
--		if (*cmd == '"' && *p_sxq == NUL)
--		{
--		    newcmd[0] = '"';
--		    STRCPY(newcmd + 1, cmdbase);
--		}
--		else
-+		if (cmd_shell == NULL || *cmd_shell == NUL)
-+		    cmd_shell = default_shell();
-+
-+		subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
-+		if (subcmd != NULL)
- 		{
--		    STRCPY(newcmd, cmdbase);
--		    if (*cmd == '"' && *newcmd != NUL)
--			newcmd[STRLEN(newcmd) - 1] = NUL;
-+		    /* make "cmd.exe /c arguments" */
-+		    cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
-+		    newcmd = lalloc(cmdlen, TRUE);
-+		    if (newcmd != NULL)
-+			vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
-+						       cmd_shell, subcmd);
-+		    else
-+			newcmd = cmdbase;
-+		    vim_free(subcmd);
- 		}
-+	    }
- 
--		/*
--		 * Now, start the command as a process, so that it doesn't
--		 * inherit our handles which causes unpleasant dangling swap
--		 * files if we exit before the spawned process
--		 */
--		if (CreateProcess (NULL,	// Executable name
--			newcmd,			// Command to execute
--			NULL,			// Process security attributes
--			NULL,			// Thread security attributes
--			FALSE,			// Inherit handles
--			CREATE_NEW_CONSOLE,	// Creation flags
--			NULL,			// Environment
--			NULL,			// Current directory
--			&si,			// Startup information
--			&pi))			// Process information
--		    x = 0;
--		else
--		{
--		    x = -1;
-+	    /*
-+	     * Now, start the command as a process, so that it doesn't
-+	     * inherit our handles which causes unpleasant dangling swap
-+	     * files if we exit before the spawned process
-+	     */
-+	    if (CreateProcess(NULL,		// Executable name
-+		    newcmd,			// Command to execute
-+		    NULL,			// Process security attributes
-+		    NULL,			// Thread security attributes
-+		    FALSE,			// Inherit handles
-+		    flags,			// Creation flags
-+		    NULL,			// Environment
-+		    NULL,			// Current directory
-+		    &si,			// Startup information
-+		    &pi))			// Process information
-+		x = 0;
-+	    else
-+	    {
-+		x = -1;
- #ifdef FEAT_GUI_W32
--		    EMSG(_("E371: Command not found"));
-+		EMSG(_("E371: Command not found"));
- #endif
--		}
--		/* Close the handles to the subprocess, so that it goes away */
--		CloseHandle(pi.hThread);
--		CloseHandle(pi.hProcess);
- 	    }
--	    else
-+
-+	    if (newcmd != cmdbase)
-+		vim_free(newcmd);
-+
-+	    if (si.hStdInput != NULL)
-+	    {
-+		/* Close the handle to \\.\NUL */
-+		CloseHandle(si.hStdInput);
-+	    }
-+	    /* Close the handles to the subprocess, so that it goes away */
-+	    CloseHandle(pi.hThread);
-+	    CloseHandle(pi.hProcess);
-+	}
-+	else
-+	{
-+	    cmdlen = (
-+#ifdef FEAT_GUI_W32
-+		(allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
-+#endif
-+		STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
-+
-+	    newcmd = lalloc(cmdlen, TRUE);
-+	    if (newcmd != NULL)
- 	    {
- #if defined(FEAT_GUI_W32)
- 		if (need_vimrun_warning)
-@@ -3368,7 +4109,7 @@
- 			    MB_ICONWARNING);
- 		    need_vimrun_warning = FALSE;
- 		}
--		if (!s_dont_use_vimrun)
-+		if (!s_dont_use_vimrun && (!allowPiping || p_stmp))
- 		    /* Use vimrun to execute the command.  It opens a console
- 		     * window, which can be closed without killing Vim. */
- 		    vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
-@@ -3381,8 +4122,8 @@
- 		    vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
- 							   p_sh, p_shcf, cmd);
- 		x = mch_system((char *)newcmd, options);
-+		vim_free(newcmd);
- 	    }
--	    vim_free(newcmd);
- 	}
-     }
- 
-@@ -3392,7 +4133,8 @@
-     /* Print the return value, unless "vimrun" was used. */
-     if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
- #if defined(FEAT_GUI_W32)
--		&& ((options & SHELL_DOOUT) || s_dont_use_vimrun)
-+		&& ((options & SHELL_DOOUT) || s_dont_use_vimrun
-+						  || (allowPiping && !p_stmp))
- #endif
- 	    )
-     {
-@@ -4273,18 +5015,34 @@
- 
- 
- /*
-- * How much memory is available?
-+ * How much memory is available in Kbyte?
-  * Return sum of available physical and page file memory.
-  */
- /*ARGSUSED*/
-     long_u
- mch_avail_mem(int special)
- {
--    MEMORYSTATUS	ms;
-+#ifdef MEMORYSTATUSEX
-+    PlatformId();
-+    if (g_PlatformId == VER_PLATFORM_WIN32_NT)
-+    {
-+	MEMORYSTATUSEX	ms;
-+
-+	/* Need to use GlobalMemoryStatusEx() when there is more memory than
-+	 * what fits in 32 bits. But it's not always available. */
-+	ms.dwLength = sizeof(MEMORYSTATUSEX);
-+	GlobalMemoryStatusEx(&ms);
-+	return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
-+    }
-+    else
-+#endif
-+    {
-+	MEMORYSTATUS	ms;
- 
--    ms.dwLength = sizeof(MEMORYSTATUS);
--    GlobalMemoryStatus(&ms);
--    return (long_u) (ms.dwAvailPhys + ms.dwAvailPageFile);
-+	ms.dwLength = sizeof(MEMORYSTATUS);
-+	GlobalMemoryStatus(&ms);
-+	return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
-+    }
- }
- 
- #ifdef FEAT_MBYTE
-diff -Naur vim73.orig/src/os_win32.h vim73/src/os_win32.h
---- vim73.orig/src/os_win32.h	2010-05-31 19:50:24.000000000 +0000
-+++ vim73/src/os_win32.h	2012-11-01 20:35:48.000000000 +0000
-@@ -108,7 +108,7 @@
-  */
- #define CMDBUFFSIZE 1024	/* size of the command processing buffer */
- 
--/* _MAX_PATH is only 256 (stdlib.h), but we want more for the 'path' option,
-+/* _MAX_PATH is only 260 (stdlib.h), but we want more for the 'path' option,
-  * thus use a larger number. */
- #define MAXPATHL	1024
- 
-@@ -191,5 +191,19 @@
- #ifdef __BORLANDC__
- # define vim_mkdir(x, y) mkdir(x)
- #else
--# define vim_mkdir(x, y) _mkdir(x)
-+# define vim_mkdir(x, y) mch_mkdir(x)
-+#endif
-+
-+/* Enable common dialogs input unicode from IME if posible. */
-+#ifdef FEAT_MBYTE
-+    /* The variables are defined in os_win32.c. */
-+extern LRESULT (WINAPI *pDispatchMessage)(LPMSG);
-+extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
-+extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
-+extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
-+#else
-+# define pDispatchMessage DispatchMessage
-+# define pGetMessage GetMessage
-+# define pIsDialogMessage IsDialogMessage
-+# define pPeekMessage PeekMessage
- #endif
-diff -Naur vim73.orig/src/popupmnu.c vim73/src/popupmnu.c
---- vim73.orig/src/popupmnu.c	2010-08-08 13:14:58.000000000 +0000
-+++ vim73/src/popupmnu.c	2012-11-01 20:35:39.000000000 +0000
-@@ -558,8 +558,11 @@
- 	    win_T	*curwin_save = curwin;
- 	    int		res = OK;
- 
--	    /* Open a preview window.  3 lines by default. */
-+	    /* Open a preview window.  3 lines by default.  Prefer
-+	     * 'previewheight' if set and smaller. */
- 	    g_do_tagpreview = 3;
-+	    if (p_pvh > 0 && p_pvh < g_do_tagpreview)
-+		g_do_tagpreview = p_pvh;
- 	    resized = prepare_tagpreview(FALSE);
- 	    g_do_tagpreview = 0;
- 
-diff -Naur vim73.orig/src/proto/buffer.pro vim73/src/proto/buffer.pro
---- vim73.orig/src/proto/buffer.pro	2010-08-15 12:30:19.000000000 +0000
-+++ vim73/src/proto/buffer.pro	2012-11-01 20:35:48.000000000 +0000
-@@ -1,7 +1,7 @@
- /* buffer.c */
- int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
- int buf_valid __ARGS((buf_T *buf));
--void close_buffer __ARGS((win_T *win, buf_T *buf, int action));
-+void close_buffer __ARGS((win_T *win, buf_T *buf, int action, int abort_if_last));
- void buf_clear_file __ARGS((buf_T *buf));
- void buf_freeall __ARGS((buf_T *buf, int flags));
- void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
-@@ -51,7 +51,7 @@
- void do_modelines __ARGS((int flags));
- int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing));
- void write_viminfo_bufferlist __ARGS((FILE *fp));
--char *buf_spname __ARGS((buf_T *buf));
-+char_u *buf_spname __ARGS((buf_T *buf));
- void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr));
- linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
- int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
-@@ -60,6 +60,7 @@
- int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum));
- int buf_findsigntype_id __ARGS((buf_T *buf, linenr_T lnum, int typenr));
- int buf_signcount __ARGS((buf_T *buf, linenr_T lnum));
-+void buf_delete_signs __ARGS((buf_T *buf));
- void buf_delete_all_signs __ARGS((void));
- void sign_list_placed __ARGS((buf_T *rbuf));
- void sign_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
-diff -Naur vim73.orig/src/proto/edit.pro vim73/src/proto/edit.pro
---- vim73.orig/src/proto/edit.pro	2010-08-15 12:30:22.000000000 +0000
-+++ vim73/src/proto/edit.pro	2012-11-01 20:35:46.000000000 +0000
-@@ -39,4 +39,5 @@
- int hkmap __ARGS((int c));
- void ins_scroll __ARGS((void));
- void ins_horscroll __ARGS((void));
-+int ins_copychar __ARGS((linenr_T lnum));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/eval.pro vim73/src/proto/eval.pro
---- vim73.orig/src/proto/eval.pro	2010-08-15 12:30:23.000000000 +0000
-+++ vim73/src/proto/eval.pro	2012-11-01 20:35:47.000000000 +0000
-@@ -23,6 +23,7 @@
- list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
- int get_spellword __ARGS((list_T *list, char_u **pp));
- typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
-+int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv));
- void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
- long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
- void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
-@@ -45,13 +46,23 @@
- list_T *list_alloc __ARGS((void));
- void list_unref __ARGS((list_T *l));
- void list_free __ARGS((list_T *l, int recurse));
-+listitem_T *listitem_alloc __ARGS((void));
-+void listitem_remove __ARGS((list_T *l, listitem_T *item));
- dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
-+listitem_T *list_find __ARGS((list_T *l, long n));
- char_u *list_find_str __ARGS((list_T *l, long idx));
-+void list_append __ARGS((list_T *l, listitem_T *item));
- int list_append_tv __ARGS((list_T *l, typval_T *tv));
- int list_append_dict __ARGS((list_T *list, dict_T *dict));
- int list_append_string __ARGS((list_T *l, char_u *str, int len));
-+int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
-+void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
- int garbage_collect __ARGS((void));
-+void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
-+void set_ref_in_list __ARGS((list_T *l, int copyID));
-+void set_ref_in_item __ARGS((typval_T *tv, int copyID));
- dict_T *dict_alloc __ARGS((void));
-+void dict_unref __ARGS((dict_T *d));
- dictitem_T *dictitem_alloc __ARGS((char_u *key));
- void dictitem_free __ARGS((dictitem_T *item));
- int dict_add __ARGS((dict_T *d, dictitem_T *item));
-@@ -62,6 +73,7 @@
- long get_dict_number __ARGS((dict_T *d, char_u *key));
- char_u *get_function_name __ARGS((expand_T *xp, int idx));
- char_u *get_expr_name __ARGS((expand_T *xp, int idx));
-+int func_call __ARGS((char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv));
- long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
- void set_vim_var_nr __ARGS((int idx, long val));
- long get_vim_var_nr __ARGS((int idx));
-@@ -81,7 +93,7 @@
- char_u *get_tv_string_chk __ARGS((typval_T *varp));
- char_u *get_var_value __ARGS((char_u *name));
- void new_script_vars __ARGS((scid_T id));
--void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
-+void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
- void vars_clear __ARGS((hashtab_T *ht));
- void copy_tv __ARGS((typval_T *from, typval_T *to));
- void ex_echo __ARGS((exarg_T *eap));
-@@ -92,6 +104,8 @@
- void func_dump_profile __ARGS((FILE *fd));
- char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
- void ex_delfunction __ARGS((exarg_T *eap));
-+void func_unref __ARGS((char_u *name));
-+void func_ref __ARGS((char_u *name));
- void ex_return __ARGS((exarg_T *eap));
- int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
- void discard_pending_return __ARGS((void *rettv));
-diff -Naur vim73.orig/src/proto/ex_cmds.pro vim73/src/proto/ex_cmds.pro
---- vim73.orig/src/proto/ex_cmds.pro	2010-08-15 12:30:24.000000000 +0000
-+++ vim73/src/proto/ex_cmds.pro	2012-11-01 20:35:46.000000000 +0000
-@@ -23,6 +23,7 @@
- void ex_update __ARGS((exarg_T *eap));
- void ex_write __ARGS((exarg_T *eap));
- int do_write __ARGS((exarg_T *eap));
-+int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
- void ex_wnext __ARGS((exarg_T *eap));
- void do_wqall __ARGS((exarg_T *eap));
- int not_writing __ARGS((void));
-diff -Naur vim73.orig/src/proto/ex_cmds2.pro vim73/src/proto/ex_cmds2.pro
---- vim73.orig/src/proto/ex_cmds2.pro	2010-08-15 12:30:25.000000000 +0000
-+++ vim73/src/proto/ex_cmds2.pro	2012-11-01 20:35:47.000000000 +0000
-@@ -42,7 +42,7 @@
- int check_fname __ARGS((void));
- int buf_write_all __ARGS((buf_T *buf, int forceit));
- int get_arglist __ARGS((garray_T *gap, char_u *str));
--int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
-+int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp, int wig));
- void set_arglist __ARGS((char_u *str));
- void check_arg_idx __ARGS((win_T *win));
- void ex_args __ARGS((exarg_T *eap));
-@@ -83,5 +83,7 @@
- char_u *get_mess_lang __ARGS((void));
- void set_lang_var __ARGS((void));
- void ex_language __ARGS((exarg_T *eap));
-+void free_locales __ARGS((void));
- char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
-+char_u *get_locales __ARGS((expand_T *xp, int idx));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/ex_docmd.pro vim73/src/proto/ex_docmd.pro
---- vim73.orig/src/proto/ex_docmd.pro	2010-08-15 12:30:26.000000000 +0000
-+++ vim73/src/proto/ex_docmd.pro	2012-11-01 20:35:45.000000000 +0000
-@@ -1,7 +1,7 @@
- /* ex_docmd.c */
- void do_exmode __ARGS((int improved));
- int do_cmdline_cmd __ARGS((char_u *cmd));
--int do_cmdline __ARGS((char_u *cmdline, char_u *(*getline)(int, void *, int), void *cookie, int flags));
-+int do_cmdline __ARGS((char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags));
- int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
- void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
- int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
-diff -Naur vim73.orig/src/proto/ex_getln.pro vim73/src/proto/ex_getln.pro
---- vim73.orig/src/proto/ex_getln.pro	2010-08-15 12:30:27.000000000 +0000
-+++ vim73/src/proto/ex_getln.pro	2012-11-01 20:35:42.000000000 +0000
-@@ -31,7 +31,7 @@
- char_u *addstar __ARGS((char_u *fname, int len, int context));
- void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
- int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
--int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
-+int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
- char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
- void init_history __ARGS((void));
- int get_histtype __ARGS((char_u *name));
-diff -Naur vim73.orig/src/proto/fileio.pro vim73/src/proto/fileio.pro
---- vim73.orig/src/proto/fileio.pro	2010-08-15 12:30:28.000000000 +0000
-+++ vim73/src/proto/fileio.pro	2012-11-01 20:35:45.000000000 +0000
-@@ -35,6 +35,7 @@
- void do_autocmd __ARGS((char_u *arg, int forceit));
- int do_doautocmd __ARGS((char_u *arg, int do_msg));
- void ex_doautoall __ARGS((exarg_T *eap));
-+int check_nomodeline __ARGS((char_u **argp));
- void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
- void aucmd_restbuf __ARGS((aco_save_T *aco));
- int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
-@@ -43,6 +44,7 @@
- int trigger_cursorhold __ARGS((void));
- int has_cursormoved __ARGS((void));
- int has_cursormovedI __ARGS((void));
-+int has_insertcharpre __ARGS((void));
- void block_autocmds __ARGS((void));
- void unblock_autocmds __ARGS((void));
- int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
-@@ -54,4 +56,6 @@
- int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
- int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
- char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
-+long read_eintr __ARGS((int fd, void *buf, size_t bufsize));
-+long write_eintr __ARGS((int fd, void *buf, size_t bufsize));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/getchar.pro vim73/src/proto/getchar.pro
---- vim73.orig/src/proto/getchar.pro	2010-08-15 12:30:29.000000000 +0000
-+++ vim73/src/proto/getchar.pro	2012-11-01 20:35:45.000000000 +0000
-@@ -4,8 +4,9 @@
- char_u *get_inserted __ARGS((void));
- int stuff_empty __ARGS((void));
- void typeahead_noflush __ARGS((int c));
--void flush_buffers __ARGS((int typeahead));
-+void flush_buffers __ARGS((int flush_typeahead));
- void ResetRedobuff __ARGS((void));
-+void CancelRedo __ARGS((void));
- void saveRedobuff __ARGS((void));
- void restoreRedobuff __ARGS((void));
- void AppendToRedobuff __ARGS((char_u *s));
-@@ -51,6 +52,7 @@
- int get_map_mode __ARGS((char_u **cmdp, int forceit));
- void map_clear __ARGS((char_u *cmdp, char_u *arg, int forceit, int abbr));
- void map_clear_int __ARGS((buf_T *buf, int mode, int local, int abbr));
-+char_u *map_mode_to_chars __ARGS((int mode));
- int map_to_exists __ARGS((char_u *str, char_u *modechars, int abbr));
- int map_to_exists_mode __ARGS((char_u *rhs, int mode, int abbr));
- char_u *set_context_in_map_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit, int isabbrev, int isunmap, cmdidx_T cmdidx));
-@@ -61,7 +63,7 @@
- int makemap __ARGS((FILE *fd, buf_T *buf));
- int put_escstr __ARGS((FILE *fd, char_u *strstart, int what));
- void check_map_keycodes __ARGS((void));
--char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr));
-+char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr, mapblock_T **mp_ptr, int *local_ptr));
- void init_mappings __ARGS((void));
- void add_map __ARGS((char_u *map, int mode));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/gui_athena.pro vim73/src/proto/gui_athena.pro
---- vim73.orig/src/proto/gui_athena.pro	2010-08-15 12:31:06.000000000 +0000
-+++ vim73/src/proto/gui_athena.pro	2012-11-01 20:35:40.000000000 +0000
-@@ -27,5 +27,5 @@
- void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
- Window gui_x11_get_wid __ARGS((void));
- char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
--int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
-+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/gui_gtk.pro vim73/src/proto/gui_gtk.pro
---- vim73.orig/src/proto/gui_gtk.pro	2010-08-15 12:31:03.000000000 +0000
-+++ vim73/src/proto/gui_gtk.pro	2012-11-01 20:35:40.000000000 +0000
-@@ -13,7 +13,7 @@
- void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
- char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
- char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir));
--int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield));
-+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield, int ex_cmd));
- void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
- void gui_make_popup __ARGS((char_u *path_name, int mouse_pos));
- void gui_mch_find_dialog __ARGS((exarg_T *eap));
-diff -Naur vim73.orig/src/proto/gui_gtk_x11.pro vim73/src/proto/gui_gtk_x11.pro
---- vim73.orig/src/proto/gui_gtk_x11.pro	2010-08-15 12:31:07.000000000 +0000
-+++ vim73/src/proto/gui_gtk_x11.pro	2012-11-01 20:35:46.000000000 +0000
-@@ -4,6 +4,7 @@
- void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
- void gui_mch_stop_blink __ARGS((void));
- void gui_mch_start_blink __ARGS((void));
-+int gui_mch_early_init_check __ARGS((void));
- int gui_mch_init_check __ARGS((void));
- void gui_mch_show_tabline __ARGS((int showit));
- int gui_mch_showing_tabline __ARGS((void));
-@@ -20,6 +21,7 @@
- void gui_mch_set_winpos __ARGS((int x, int y));
- int gui_mch_maximized __ARGS((void));
- void gui_mch_unmaximize __ARGS((void));
-+void gui_mch_newfont __ARGS((void));
- void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
- void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
- void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
-diff -Naur vim73.orig/src/proto/gui_mac.pro vim73/src/proto/gui_mac.pro
---- vim73.orig/src/proto/gui_mac.pro	2010-08-14 19:40:45.000000000 +0000
-+++ vim73/src/proto/gui_mac.pro	2012-11-01 20:35:40.000000000 +0000
-@@ -81,7 +81,7 @@
- int gui_mch_get_mouse_y __ARGS((void));
- void gui_mch_setmouse __ARGS((int x, int y));
- void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
--int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
-+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
- char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
- void gui_mch_set_foreground __ARGS((void));
- void gui_mch_show_tabline __ARGS((int showit));
-diff -Naur vim73.orig/src/proto/gui_motif.pro vim73/src/proto/gui_motif.pro
---- vim73.orig/src/proto/gui_motif.pro	2010-08-15 12:31:04.000000000 +0000
-+++ vim73/src/proto/gui_motif.pro	2012-11-01 20:35:40.000000000 +0000
-@@ -29,7 +29,7 @@
- void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
- Window gui_x11_get_wid __ARGS((void));
- char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
--int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield));
-+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield, int ex_cmd));
- void gui_mch_enable_footer __ARGS((int showit));
- void gui_mch_set_footer __ARGS((char_u *s));
- void gui_mch_show_toolbar __ARGS((int showit));
-diff -Naur vim73.orig/src/proto/gui_photon.pro vim73/src/proto/gui_photon.pro
---- vim73.orig/src/proto/gui_photon.pro	2010-08-15 12:31:10.000000000 +0000
-+++ vim73/src/proto/gui_photon.pro	2012-11-01 20:35:40.000000000 +0000
-@@ -8,7 +8,7 @@
- void gui_mch_update __ARGS((void));
- int gui_mch_wait_for_chars __ARGS((int wtime));
- char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter));
--int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield));
-+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield, int ex_cmd));
- int gui_mch_get_winpos __ARGS((int *x, int *y));
- void gui_mch_set_winpos __ARGS((int x, int y));
- void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
-diff -Naur vim73.orig/src/proto/gui_riscos.pro vim73/src/proto/gui_riscos.pro
---- vim73.orig/src/proto/gui_riscos.pro	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/proto/gui_riscos.pro	1970-01-01 00:00:00.000000000 +0000
-@@ -1,66 +0,0 @@
--/* Prototypes for gui_riscos.c
-- * Based on gui_x11_pro.h (10 March 2002 version)
-- */
--void gui_mch_prepare __ARGS((int *argc, char **argv));
--int gui_mch_init_check __ARGS((void));
--int gui_mch_init __ARGS((void));
--void gui_mch_uninit __ARGS((void));
--void gui_mch_new_colors __ARGS((void));
--int gui_mch_open __ARGS((void));
--void gui_init_tooltip_font __ARGS((void));
--void gui_init_menu_font __ARGS((void));void gui_mch_exit __ARGS((int rc));
--int gui_mch_get_winpos __ARGS((int *x, int *y));
--void gui_mch_set_winpos __ARGS((int x, int y));
--void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
--void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
--int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
--GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
--int gui_mch_adjust_charheight __ARGS((void));
--void gui_mch_set_font __ARGS((GuiFont font));
--void gui_mch_set_fontset __ARGS((GuiFontset fontset));
--void gui_mch_free_font __ARGS((GuiFont font));
--void gui_mch_free_fontset __ARGS((GuiFontset fontset));
--GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
--guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
--void gui_mch_set_fg_color __ARGS((guicolor_T color));
--void gui_mch_set_bg_color __ARGS((guicolor_T color));
--void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
--int gui_mch_haskey __ARGS((char_u *name));
--void gui_mch_beep __ARGS((void));
--void gui_mch_flash __ARGS((int msec));
--void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
--void gui_mch_iconify __ARGS((void));
--void gui_mch_set_foreground __ARGS((void));
--void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
--void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
--void gui_mch_update __ARGS((void));
--int gui_mch_wait_for_chars __ARGS((long wtime));
--void gui_mch_flush __ARGS((void));
--void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
--void gui_mch_clear_all __ARGS((void));
--void gui_mch_delete_lines __ARGS((int row, int num_lines));
--void gui_mch_insert_lines __ARGS((int row, int num_lines));
--void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
--int clip_mch_own_selection __ARGS((VimClipboard *cbd));
--void clip_mch_request_selection __ARGS((VimClipboard *cbd));
--void clip_mch_set_selection __ARGS((VimClipboard *cbd));
--void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
--void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
--void gui_mch_draw_menubar __ARGS((void));
--void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
--void gui_mch_stop_blink __ARGS((void));
--void gui_mch_start_blink __ARGS((void));
--void process_event __ARGS((int event, int *block));
--void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
--long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
--void gui_mch_getmouse __ARGS((int *x, int *y));
--void gui_mch_setmouse __ARGS((int x, int y));
--void gui_mch_drawsign __ARGS((int row, int col, int typenr));
--void gui_mch_destroy_sign __ARGS((XImage *sign));
--void gui_mch_mousehide __ARGS((int hide));
--void mch_set_mouse_shape __ARGS((int shape));
--void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
--
--void ro_redraw_title __ARGS((int window));
--int ro_ok_to_quit __ARGS((void));
--/* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/gui_w16.pro vim73/src/proto/gui_w16.pro
---- vim73.orig/src/proto/gui_w16.pro	2010-08-15 12:31:09.000000000 +0000
-+++ vim73/src/proto/gui_w16.pro	2012-11-01 20:35:40.000000000 +0000
-@@ -74,6 +74,6 @@
- void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
- void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
- void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
--int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
-+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
- void gui_mch_set_foreground __ARGS((void));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/gui_w32.pro vim73/src/proto/gui_w32.pro
---- vim73.orig/src/proto/gui_w32.pro	2010-08-15 12:31:09.000000000 +0000
-+++ vim73/src/proto/gui_w32.pro	2012-11-01 20:35:40.000000000 +0000
-@@ -81,7 +81,7 @@
- void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
- void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
- void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
--int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
-+int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
- void gui_mch_set_foreground __ARGS((void));
- void gui_mch_drawsign __ARGS((int row, int col, int typenr));
- void *gui_mch_register_sign __ARGS((char_u *signfile));
-diff -Naur vim73.orig/src/proto/if_lua.pro vim73/src/proto/if_lua.pro
---- vim73.orig/src/proto/if_lua.pro	2010-07-22 19:29:02.000000000 +0000
-+++ vim73/src/proto/if_lua.pro	2012-11-01 20:35:45.000000000 +0000
-@@ -6,4 +6,6 @@
- void ex_luafile __ARGS((exarg_T *eap));
- void lua_buffer_free __ARGS((buf_T *buf));
- void lua_window_free __ARGS((win_T *win));
-+void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
-+void set_ref_in_lua __ARGS((int copyID));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/if_mzsch.pro vim73/src/proto/if_mzsch.pro
---- vim73.orig/src/proto/if_mzsch.pro	2010-05-15 11:04:08.000000000 +0000
-+++ vim73/src/proto/if_mzsch.pro	2012-11-01 20:35:45.000000000 +0000
-@@ -14,6 +14,7 @@
- void mzvim_reset_timer __ARGS((void));
- void *mzvim_eval_string __ARGS((char_u *str));
- int mzthreads_allowed __ARGS((void));
--void mzscheme_main __ARGS((void));
-+int mzscheme_main __ARGS((int argc, char **argv));
- void do_mzeval __ARGS((char_u *str, typval_T *rettv));
-+int vim_main2 __ARGS((int argc, char **argv));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/if_python.pro vim73/src/proto/if_python.pro
---- vim73.orig/src/proto/if_python.pro	2010-08-15 12:30:35.000000000 +0000
-+++ vim73/src/proto/if_python.pro	2012-11-01 20:35:47.000000000 +0000
-@@ -6,4 +6,6 @@
- void ex_pyfile __ARGS((exarg_T *eap));
- void python_buffer_free __ARGS((buf_T *buf));
- void python_window_free __ARGS((win_T *win));
-+void do_pyeval __ARGS((char_u *str, typval_T *rettv));
-+void set_ref_in_python __ARGS((int copyID));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/if_python3.pro vim73/src/proto/if_python3.pro
---- vim73.orig/src/proto/if_python3.pro	2010-08-15 12:30:36.000000000 +0000
-+++ vim73/src/proto/if_python3.pro	2012-11-01 20:35:47.000000000 +0000
-@@ -6,4 +6,6 @@
- void ex_py3file __ARGS((exarg_T *eap));
- void python3_buffer_free __ARGS((buf_T *buf));
- void python3_window_free __ARGS((win_T *win));
-+void do_py3eval __ARGS((char_u *str, typval_T *rettv));
-+void set_ref_in_python3 __ARGS((int copyID));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/mbyte.pro vim73/src/proto/mbyte.pro
---- vim73.orig/src/proto/mbyte.pro	2010-08-15 12:30:44.000000000 +0000
-+++ vim73/src/proto/mbyte.pro	2012-11-01 20:35:43.000000000 +0000
-@@ -2,6 +2,7 @@
- int enc_canon_props __ARGS((char_u *name));
- char_u *mb_init __ARGS((void));
- int bomb_size __ARGS((void));
-+void remove_bom __ARGS((char_u *s));
- int mb_get_class __ARGS((char_u *p));
- int dbcs_class __ARGS((unsigned lead, unsigned trail));
- int latin_char2len __ARGS((int c));
-@@ -56,7 +57,7 @@
- int utf_valid_string __ARGS((char_u *s, char_u *end));
- int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
- void mb_adjust_cursor __ARGS((void));
--void mb_adjustpos __ARGS((pos_T *lp));
-+void mb_adjustpos __ARGS((buf_T *buf, pos_T *lp));
- char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
- int mb_charlen __ARGS((char_u *str));
- int mb_charlen_len __ARGS((char_u *str, int len));
-diff -Naur vim73.orig/src/proto/message.pro vim73/src/proto/message.pro
---- vim73.orig/src/proto/message.pro	2010-08-15 12:30:41.000000000 +0000
-+++ vim73/src/proto/message.pro	2012-11-01 20:35:45.000000000 +0000
-@@ -4,7 +4,7 @@
- int msg_attr __ARGS((char_u *s, int attr));
- int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
- char_u *msg_strtrunc __ARGS((char_u *s, int force));
--void trunc_string __ARGS((char_u *s, char_u *buf, int room));
-+void trunc_string __ARGS((char_u *s, char_u *buf, int room, int buflen));
- void reset_last_sourcing __ARGS((void));
- void msg_source __ARGS((int attr));
- int emsg_not_now __ARGS((void));
-@@ -33,6 +33,7 @@
- int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
- void msg_make __ARGS((char_u *arg));
- int msg_outtrans_special __ARGS((char_u *strstart, int from));
-+char_u *str2special_save __ARGS((char_u *str, int is_lhs));
- char_u *str2special __ARGS((char_u **sp, int from));
- void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
- void msg_prt_line __ARGS((char_u *s, int list));
-@@ -44,6 +45,7 @@
- void may_clear_sb_text __ARGS((void));
- void clear_sb_text __ARGS((void));
- void show_sb_text __ARGS((void));
-+void msg_sb_eol __ARGS((void));
- int msg_use_printf __ARGS((void));
- void mch_errmsg __ARGS((char *str));
- void mch_msg __ARGS((char *str));
-@@ -63,7 +65,7 @@
- int verbose_open __ARGS((void));
- void give_warning __ARGS((char_u *message, int hl));
- void msg_advance __ARGS((int col));
--int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
-+int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
- void display_confirm_msg __ARGS((void));
- int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
- int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
-diff -Naur vim73.orig/src/proto/misc1.pro vim73/src/proto/misc1.pro
---- vim73.orig/src/proto/misc1.pro	2010-08-15 12:30:42.000000000 +0000
-+++ vim73/src/proto/misc1.pro	2012-11-01 20:35:48.000000000 +0000
-@@ -6,7 +6,8 @@
- int set_indent __ARGS((int size, int flags));
- int get_number_indent __ARGS((linenr_T lnum));
- int open_line __ARGS((int dir, int flags, int old_indent));
--int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
-+int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int do_skip_space));
-+int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
- int plines __ARGS((linenr_T lnum));
- int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
- int plines_nofill __ARGS((linenr_T lnum));
-@@ -49,6 +50,7 @@
- void vim_beep __ARGS((void));
- void init_homedir __ARGS((void));
- void free_homedir __ARGS((void));
-+void free_users __ARGS((void));
- char_u *expand_env_save __ARGS((char_u *src));
- char_u *expand_env_save_opt __ARGS((char_u *src, int one));
- void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
-@@ -56,6 +58,8 @@
- char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
- void vim_setenv __ARGS((char_u *name, char_u *val));
- char_u *get_env_name __ARGS((expand_T *xp, int idx));
-+char_u *get_users __ARGS((expand_T *xp, int idx));
-+int match_user __ARGS((char_u* name));
- void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
- char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
- int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
-diff -Naur vim73.orig/src/proto/misc2.pro vim73/src/proto/misc2.pro
---- vim73.orig/src/proto/misc2.pro	2010-08-15 12:30:42.000000000 +0000
-+++ vim73/src/proto/misc2.pro	2012-11-01 20:35:44.000000000 +0000
-@@ -14,6 +14,7 @@
- linenr_T get_cursor_rel_lnum __ARGS((win_T *wp, linenr_T lnum));
- void check_cursor_lnum __ARGS((void));
- void check_cursor_col __ARGS((void));
-+void check_cursor_col_win __ARGS((win_T *win));
- void check_cursor __ARGS((void));
- void adjust_cursor_col __ARGS((void));
- int leftcol_changed __ARGS((void));
-@@ -40,6 +41,7 @@
- void copy_chars __ARGS((char_u *ptr, size_t count, int c));
- void del_trailing_spaces __ARGS((char_u *ptr));
- void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
-+void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
- int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
- void vim_free __ARGS((void *x));
- int vim_stricmp __ARGS((char *s1, char *s2));
-@@ -56,6 +58,7 @@
- char_u *ga_concat_strings __ARGS((garray_T *gap));
- void ga_concat __ARGS((garray_T *gap, char_u *s));
- void ga_append __ARGS((garray_T *gap, int c));
-+void append_ga_line __ARGS((garray_T *gap));
- int name_to_mod_mask __ARGS((int c));
- int simplify_key __ARGS((int key, int *modifiers));
- int handle_x_keys __ARGS((int key));
-@@ -113,4 +116,5 @@
- char_u *read_string __ARGS((FILE *fd, int cnt));
- int put_bytes __ARGS((FILE *fd, long_u nr, int len));
- void put_time __ARGS((FILE *fd, time_t the_time));
-+int has_non_ascii __ARGS((char_u *s));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/ops.pro vim73/src/proto/ops.pro
---- vim73.orig/src/proto/ops.pro	2010-08-15 12:30:45.000000000 +0000
-+++ vim73/src/proto/ops.pro	2012-11-01 20:35:46.000000000 +0000
-@@ -36,7 +36,7 @@
- int preprocs_left __ARGS((void));
- int get_register_name __ARGS((int num));
- void ex_display __ARGS((exarg_T *eap));
--int do_join __ARGS((long count, int insert_space, int save_undo));
-+int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
- void op_format __ARGS((oparg_T *oap, int keep_cursor));
- void op_formatexpr __ARGS((oparg_T *oap));
- int fex_format __ARGS((linenr_T lnum, long count, int c));
-diff -Naur vim73.orig/src/proto/option.pro vim73/src/proto/option.pro
---- vim73.orig/src/proto/option.pro	2010-08-15 12:30:46.000000000 +0000
-+++ vim73/src/proto/option.pro	2012-11-01 20:35:48.000000000 +0000
-@@ -54,6 +54,8 @@
- int option_was_set __ARGS((char_u *name));
- int can_bs __ARGS((int what));
- void save_file_ff __ARGS((buf_T *buf));
--int file_ff_differs __ARGS((buf_T *buf));
-+int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
- int check_ff_value __ARGS((char_u *p));
-+long get_sw_value __ARGS((void));
-+long get_sts_value __ARGS((void));
- /* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/os_riscos.pro vim73/src/proto/os_riscos.pro
---- vim73.orig/src/proto/os_riscos.pro	2010-08-15 12:31:16.000000000 +0000
-+++ vim73/src/proto/os_riscos.pro	1970-01-01 00:00:00.000000000 +0000
-@@ -1,49 +0,0 @@
--/* os_riscos.c */
--void mch_write __ARGS((char_u *s, int len));
--int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
--int mch_char_avail __ARGS((void));
--long_u mch_avail_mem __ARGS((int special));
--void mch_delay __ARGS((long msec, int ignoreinput));
--void mch_suspend __ARGS((void));
--void mch_init __ARGS((void));
--int mch_check_win __ARGS((int argc, char **argv));
--int mch_input_isatty __ARGS((void));
--int mch_can_restore_title __ARGS((void));
--int mch_can_restore_icon __ARGS((void));
--void mch_settitle __ARGS((char_u *title, char_u *icon));
--void mch_restore_title __ARGS((int which));
--int mch_get_user_name __ARGS((char_u *s, int len));
--void mch_get_host_name __ARGS((char_u *s, int len));
--long mch_get_pid __ARGS((void));
--int mch_dirname __ARGS((char_u *buf, int len));
--int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
--int mch_isFullName __ARGS((char_u *fname));
--long mch_getperm __ARGS((char_u *name));
--int mch_setperm __ARGS((char_u *name, long perm));
--void mch_hide __ARGS((char_u *name));
--int mch_isdir __ARGS((char_u *name));
--int mch_can_exe __ARGS((char_u *name));
--int mch_nodetype __ARGS((char_u *name));
--void mch_early_init __ARGS((void));
--void mch_exit __ARGS((int r));
--void mch_settmode __ARGS((int tmode));
--void mch_setmouse __ARGS((int on));
--int mch_screenmode __ARGS((char_u *arg));
--int mch_get_shellsize __ARGS((void));
--void mch_set_shellsize __ARGS((void));
--void mch_new_shellsize __ARGS((void));
--int mch_call_shell __ARGS((char_u *cmd, int options));
--void mch_breakcheck __ARGS((void));
--int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
--int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
--int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
--int mch_has_exp_wildcard __ARGS((char_u *p));
--int mch_has_wildcard __ARGS((char_u *p));
--int mch_remove __ARGS((char_u *file));
--char_u *mch_munge_fname __ARGS((char_u *fname));
--int ro_buflist_add __ARGS((char_u *old_name));
--int mch_chdir __ARGS((char_u *dir));
--void mch_read_filetype __ARGS((char_u *file));
--void mch_set_filetype __ARGS((char_u *file, char_u *type));
--int mch_check_filetype __ARGS((char_u *fname, char_u *type));
--/* vim: set ft=c : */
-diff -Naur vim73.orig/src/proto/os_win32.pro vim73/src/proto/os_win32.pro
---- vim73.orig/src/proto/os_win32.pro	2010-08-15 12:31:14.000000000 +0000
-+++ vim73/src/proto/os_win32.pro	2012-11-01 20:35:41.000000000 +0000
-@@ -1,4 +1,5 @@
- /* os_win32.c */
-+HINSTANCE vimLoadLib __ARGS((char *name));
- int dyn_libintl_init __ARGS((char *libname));
- void dyn_libintl_end __ARGS((void));
- void PlatformId __ARGS((void));
-@@ -19,7 +20,9 @@
- int mch_setperm __ARGS((char_u *name, long perm));
- void mch_hide __ARGS((char_u *name));
- int mch_isdir __ARGS((char_u *name));
-+int mch_mkdir __ARGS((char_u *name));
- int mch_is_linked __ARGS((char_u *fname));
-+int win32_fileinfo __ARGS((char_u *name, BY_HANDLE_FILE_INFORMATION *lpFileInfo));
- int mch_writable __ARGS((char_u *name));
- int mch_can_exe __ARGS((char_u *name));
- int mch_nodetype __ARGS((char_u *name));
-diff -Naur vim73.orig/src/proto/search.pro vim73/src/proto/search.pro
---- vim73.orig/src/proto/search.pro	2010-08-15 12:30:51.000000000 +0000
-+++ vim73/src/proto/search.pro	2012-11-01 20:35:47.000000000 +0000
-@@ -27,6 +27,7 @@
- int end_word __ARGS((long count, int bigword, int stop, int empty));
- int bckend_word __ARGS((long count, int bigword, int eol));
- int current_word __ARGS((oparg_T *oap, long count, int include, int bigword));
-+int current_search __ARGS((long count, int forward));
- int current_sent __ARGS((oparg_T *oap, long count, int include));
- int current_block __ARGS((oparg_T *oap, long count, int include, int what, int other));
- int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
-diff -Naur vim73.orig/src/proto/term.pro vim73/src/proto/term.pro
---- vim73.orig/src/proto/term.pro	2010-08-15 12:30:56.000000000 +0000
-+++ vim73/src/proto/term.pro	2012-11-01 20:35:45.000000000 +0000
-@@ -50,7 +50,7 @@
- char_u *get_termcode __ARGS((int i));
- void del_termcode __ARGS((char_u *name));
- void set_mouse_topline __ARGS((win_T *wp));
--int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
-+int check_termcode __ARGS((int max_offset, char_u *buf, int bufsize, int *buflen));
- char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
- int find_term_bykeys __ARGS((char_u *src));
- void show_termcodes __ARGS((void));
-diff -Naur vim73.orig/src/proto/ui.pro vim73/src/proto/ui.pro
---- vim73.orig/src/proto/ui.pro	2010-08-15 12:30:57.000000000 +0000
-+++ vim73/src/proto/ui.pro	2012-11-01 20:35:47.000000000 +0000
-@@ -11,17 +11,17 @@
- void ui_new_shellsize __ARGS((void));
- void ui_breakcheck __ARGS((void));
- void clip_init __ARGS((int can_use));
--void clip_update_selection __ARGS((void));
-+void clip_update_selection __ARGS((VimClipboard *clip));
- void clip_own_selection __ARGS((VimClipboard *cbd));
- void clip_lose_selection __ARGS((VimClipboard *cbd));
--void clip_copy_selection __ARGS((void));
- void clip_auto_select __ARGS((void));
--int clip_isautosel __ARGS((void));
-+int clip_isautosel_star __ARGS((void));
-+int clip_isautosel_plus __ARGS((void));
- void clip_modeless __ARGS((int button, int is_click, int is_drag));
- void clip_start_selection __ARGS((int col, int row, int repeated_click));
- void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
- void clip_may_redraw_selection __ARGS((int row, int col, int len));
--void clip_clear_selection __ARGS((void));
-+void clip_clear_selection __ARGS((VimClipboard *cbd));
- void clip_may_clear_selection __ARGS((int row1, int row2));
- void clip_scroll_selection __ARGS((int rows));
- void clip_copy_modeless_selection __ARGS((int both));
-diff -Naur vim73.orig/src/proto/window.pro vim73/src/proto/window.pro
---- vim73.orig/src/proto/window.pro	2010-08-15 12:30:59.000000000 +0000
-+++ vim73/src/proto/window.pro	2012-11-01 20:35:47.000000000 +0000
-@@ -1,13 +1,14 @@
- /* window.c */
- void do_window __ARGS((int nchar, long Prenum, int xchar));
- int win_split __ARGS((int size, int flags));
--int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
-+int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
- int win_valid __ARGS((win_T *win));
- int win_count __ARGS((void));
- int make_windows __ARGS((int count, int vertical));
- void win_move_after __ARGS((win_T *win1, win_T *win2));
- void win_equal __ARGS((win_T *next_curwin, int current, int dir));
- void close_windows __ARGS((buf_T *buf, int keep_curwin));
-+int one_window __ARGS((void));
- void win_close __ARGS((win_T *win, int free_buf));
- void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
- void win_free_all __ARGS((void));
-@@ -26,7 +27,7 @@
- tabpage_T *find_tabpage __ARGS((int n));
- int tabpage_index __ARGS((tabpage_T *ftp));
- void goto_tabpage __ARGS((int n));
--void goto_tabpage_tp __ARGS((tabpage_T *tp));
-+void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_autocmds));
- void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
- void tabpage_move __ARGS((int nr));
- void win_goto __ARGS((win_T *wp));
-@@ -50,6 +51,8 @@
- void win_setminheight __ARGS((void));
- void win_drag_status_line __ARGS((win_T *dragwin, int offset));
- void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
-+void win_new_height __ARGS((win_T *wp, int height));
-+void win_new_width __ARGS((win_T *wp, int width));
- void win_comp_scroll __ARGS((win_T *wp));
- void command_height __ARGS((void));
- void last_status __ARGS((int morewin));
-diff -Naur vim73.orig/src/proto.h vim73/src/proto.h
---- vim73.orig/src/proto.h	2010-07-17 15:28:51.000000000 +0000
-+++ vim73/src/proto.h	2012-11-01 20:35:42.000000000 +0000
-@@ -62,9 +62,6 @@
- # ifdef __BEOS__
- #  include "os_beos.pro"
- # endif
--# ifdef RISCOS
--#  include "os_riscos.pro"
--# endif
- # ifdef __QNX__
- #  include "os_qnx.pro"
- # endif
-@@ -245,9 +242,6 @@
- #  ifdef FEAT_GUI_X11
- #   include "gui_x11.pro"
- #  endif
--#  ifdef RISCOS
--#   include "gui_riscos.pro"
--#  endif
- #  ifdef FEAT_GUI_PHOTON
- #   include "gui_photon.pro"
- #  endif
-diff -Naur vim73.orig/src/pty.c vim73/src/pty.c
---- vim73.orig/src/pty.c	2010-07-24 18:23:01.000000000 +0000
-+++ vim73/src/pty.c	2012-11-01 20:35:44.000000000 +0000
-@@ -14,6 +14,10 @@
-  * It has been modified to work better with Vim.
-  * The parts that are not used in Vim have been deleted.
-  * See the "screen" sources for the complete stuff.
-+ *
-+ * This specific version is distibuted under the Vim license (attribution by
-+ * Juergen Weigert), the GPL applies to the original version, see the
-+ * copyright notice below.
-  */
- 
- /* Copyright (c) 1993
-@@ -123,8 +127,7 @@
- static void initmaster __ARGS((int));
- 
- /*
-- *  Open all ptys with O_NOCTTY, just to be on the safe side
-- *  (RISCos mips breaks otherwise)
-+ *  Open all ptys with O_NOCTTY, just to be on the safe side.
-  */
- #ifndef O_NOCTTY
- # define O_NOCTTY 0
-@@ -209,8 +212,8 @@
- #ifdef _SEQUENT_
-     fvhangup(s);
- #endif
--    strncpy(PtyName, m, sizeof(PtyName));
--    strncpy(TtyName, s, sizeof(TtyName));
-+    vim_strncpy((char_u *)PtyName, (char_u *)m, sizeof(PtyName) - 1);
-+    vim_strncpy((char_u *)TtyName, (char_u *)s, sizeof(TtyName) - 1);
-     initmaster(f);
-     *ttyn = TtyName;
-     return f;
-@@ -301,7 +304,7 @@
- 	return -1;
-     }
-     signal(SIGCHLD, sigcld);
--    strncpy(TtyName, m, sizeof(TtyName));
-+    vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1);
-     initmaster(f);
-     *ttyn = TtyName;
-     return f;
-@@ -326,7 +329,7 @@
-     /* a dumb looking loop replaced by mycrofts code: */
-     if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
- 	return -1;
--    strncpy(TtyName, ttyname(f), sizeof(TtyName));
-+    vim_strncpy((char_u *)TtyName, (char_u *)ttyname(f), sizeof(TtyName) - 1);
-     if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
-     {
- 	close(f);
-diff -Naur vim73.orig/src/quickfix.c vim73/src/quickfix.c
---- vim73.orig/src/quickfix.c	2010-08-09 20:12:14.000000000 +0000
-+++ vim73/src/quickfix.c	2012-11-01 20:35:47.000000000 +0000
-@@ -126,12 +126,14 @@
- static win_T	*qf_find_win __ARGS((qf_info_T *qi));
- static buf_T	*qf_find_buf __ARGS((qf_info_T *qi));
- static void	qf_update_buffer __ARGS((qf_info_T *qi));
-+static void	qf_set_title __ARGS((qf_info_T *qi));
- static void	qf_fill_buffer __ARGS((qf_info_T *qi));
- #endif
- static char_u	*get_mef_name __ARGS((void));
--static buf_T	*load_dummy_buffer __ARGS((char_u *fname));
--static void	wipe_dummy_buffer __ARGS((buf_T *buf));
--static void	unload_dummy_buffer __ARGS((buf_T *buf));
-+static void	restore_start_dir __ARGS((char_u *dirname_start));
-+static buf_T	*load_dummy_buffer __ARGS((char_u *fname, char_u *dirname_start, char_u *resulting_dir));
-+static void	wipe_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
-+static void	unload_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
- static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
- 
- /* Quickfix window check helper macro */
-@@ -245,7 +247,7 @@
- 			{'t', "."},
- 			{'m', ".\\+"},
- 			{'r', ".*"},
--			{'p', "[- .]*"},
-+			{'p', "[- 	.]*"},
- 			{'v', "\\d\\+"},
- 			{'s', ".\\+"}
- 		    };
-@@ -561,6 +563,10 @@
- 	    break;
- 
- 	IObuff[CMDBUFFSIZE - 2] = NUL;  /* for very long lines */
-+#ifdef FEAT_MBYTE
-+	remove_bom(IObuff);
-+#endif
-+
- 	if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
- 	    *efmp = NUL;
- #ifdef USE_CRNL
-@@ -671,11 +677,23 @@
- 		}
- 		if ((i = (int)fmt_ptr->addr[7]) > 0)		/* %p */
- 		{
-+		    char_u	*match_ptr;
-+
- 		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
- 			continue;
--		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
--		    if (*((char_u *)regmatch.startp[i]) != TAB)
--			use_viscol = TRUE;
-+		    col = 0;
-+		    for (match_ptr = regmatch.startp[i];
-+				   match_ptr != regmatch.endp[i]; ++match_ptr)
-+		    {
-+			++col;
-+			if (*match_ptr == TAB)
-+			{
-+			    col += 7;
-+			    col -= col % 8;
-+			}
-+		    }
-+		    ++col;
-+		    use_viscol = TRUE;
- 		}
- 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
- 		{
-@@ -894,8 +912,7 @@
-     }
-     else
- 	qi->qf_curlist = qi->qf_listcount++;
--    qi->qf_lists[qi->qf_curlist].qf_index = 0;
--    qi->qf_lists[qi->qf_curlist].qf_count = 0;
-+    vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
-     if (qf_title != NULL)
-     {
- 	char_u *p = alloc((int)STRLEN(qf_title) + 2);
-@@ -904,8 +921,6 @@
- 	if (p != NULL)
- 	    sprintf((char *)p, ":%s", (char *)qf_title);
-     }
--    else
--	qi->qf_lists[qi->qf_curlist].qf_title = NULL;
- }
- 
- /*
-@@ -1164,7 +1179,7 @@
- 
- 	/* When no valid entries are present in the list, qf_ptr points to
- 	 * the first item in the list */
--	if (to_qfl->qf_nonevalid == TRUE)
-+	if (to_qfl->qf_nonevalid)
- 	    to_qfl->qf_ptr = to_qfl->qf_start;
-     }
- 
-@@ -1182,21 +1197,17 @@
-     if (fname == NULL || *fname == NUL)		/* no file name */
- 	return 0;
-     {
--#ifdef RISCOS
--	/* Name is reported as `main.c', but file is `c.main' */
--	return ro_buflist_add(fname);
--#else
- 	char_u	    *ptr;
- 	int	    fnum;
- 
--# ifdef VMS
-+#ifdef VMS
- 	vms_remove_version(fname);
--# endif
--# ifdef BACKSLASH_IN_FILENAME
-+#endif
-+#ifdef BACKSLASH_IN_FILENAME
- 	if (directory != NULL)
- 	    slash_adjust(directory);
- 	slash_adjust(fname);
--# endif
-+#endif
- 	if (directory != NULL && !vim_isAbsName(fname)
- 		&& (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
- 	{
-@@ -1221,7 +1232,6 @@
- 	    return fnum;
- 	}
- 	return buflist_add(fname, 0);
--#endif
-     }
- }
- 
-@@ -1656,9 +1666,7 @@
- 	    opened_window = TRUE;	/* close it when fail */
- 	    p_swb = empty_option;	/* don't split again */
- 	    swb_flags = 0;
--# ifdef FEAT_SCROLLBIND
--	    curwin->w_p_scb = FALSE;
--# endif
-+	    RESET_BINDING(curwin);
- 	    if (ll_ref != NULL)
- 	    {
- 		/* The new window should use the location list from the
-@@ -1847,8 +1855,10 @@
- #endif
- 	if (print_message)
- 	{
--	    /* Update the screen before showing the message */
--	    update_topline_redraw();
-+	    /* Update the screen before showing the message, unless the screen
-+	     * scrolled up. */
-+	    if (!msg_scrolled)
-+		update_topline_redraw();
- 	    sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
- 		    qi->qf_lists[qi->qf_curlist].qf_count,
- 		    qf_ptr->qf_cleared ? _(" (line deleted)") : "",
-@@ -2125,6 +2135,7 @@
- 	--qi->qf_lists[idx].qf_count;
-     }
-     vim_free(qi->qf_lists[idx].qf_title);
-+    qi->qf_lists[idx].qf_title = NULL;
- }
- 
- /*
-@@ -2244,6 +2255,7 @@
-      * it if we have errors; otherwise, leave it closed.
-      */
-     if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
-+	    || qi->qf_lists[qi->qf_curlist].qf_count == 0
- 	    || qi->qf_curlist >= qi->qf_listcount)
-     {
- 	if (win != NULL)
-@@ -2333,9 +2345,7 @@
- 	    win_goto(lastwin);
- 	if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
- 	    return;		/* not enough room for window */
--#ifdef FEAT_SCROLLBIND
--	curwin->w_p_scb = FALSE;
--#endif
-+	RESET_BINDING(curwin);
- 
- 	if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
- 	{
-@@ -2362,6 +2372,7 @@
- 	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
- 								   OPT_LOCAL);
- 	    set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
-+	    RESET_BINDING(curwin);
- #ifdef FEAT_DIFF
- 	    curwin->w_p_diff = FALSE;
- #endif
-@@ -2390,8 +2401,7 @@
-     qf_fill_buffer(qi);
- 
-     if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
--	set_internal_string_var((char_u *)"w:quickfix_title",
--				       qi->qf_lists[qi->qf_curlist].qf_title);
-+	qf_set_title(qi);
- 
-     curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
-     curwin->w_cursor.col = 0;
-@@ -2528,6 +2538,8 @@
-     qf_info_T	*qi;
- {
-     buf_T	*buf;
-+    win_T	*win;
-+    win_T	*curwin_save;
-     aco_save_T	aco;
- 
-     /* Check if a buffer for the quickfix list exists.  Update it. */
-@@ -2539,6 +2551,16 @@
- 
- 	qf_fill_buffer(qi);
- 
-+	if (qi->qf_lists[qi->qf_curlist].qf_title != NULL
-+	    && (win = qf_find_win(qi)) != NULL)
-+	{
-+	    curwin_save = curwin;
-+	    curwin = win;
-+	    qf_set_title(qi);
-+	    curwin = curwin_save;
-+
-+	}
-+
- 	/* restore curwin/curbuf and a few other things */
- 	aucmd_restbuf(&aco);
- 
-@@ -2546,6 +2568,14 @@
-     }
- }
- 
-+    static void
-+qf_set_title(qi)
-+    qf_info_T	*qi;
-+{
-+    set_internal_string_var((char_u *)"w:quickfix_title",
-+				    qi->qf_lists[qi->qf_curlist].qf_title);
-+}
-+
- /*
-  * Fill current buffer with quickfix errors, replacing any previous contents.
-  * curbuf must be the quickfix buffer!
-@@ -2657,7 +2687,7 @@
- bt_quickfix(buf)
-     buf_T	*buf;
- {
--    return (buf->b_p_bt[0] == 'q');
-+    return buf != NULL && buf->b_p_bt[0] == 'q';
- }
- 
- /*
-@@ -2668,8 +2698,8 @@
- bt_nofile(buf)
-     buf_T	*buf;
- {
--    return (buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
--	    || buf->b_p_bt[0] == 'a';
-+    return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
-+	    || buf->b_p_bt[0] == 'a');
- }
- 
- /*
-@@ -2679,7 +2709,7 @@
- bt_dontwrite(buf)
-     buf_T	*buf;
- {
--    return (buf->b_p_bt[0] == 'n');
-+    return buf != NULL && buf->b_p_bt[0] == 'n';
- }
- 
-     int
-@@ -2744,6 +2774,13 @@
- #ifdef FEAT_AUTOCMD
-     char_u	*au_name = NULL;
- 
-+    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
-+    if (grep_internal(eap->cmdidx))
-+    {
-+	ex_vimgrep(eap);
-+	return;
-+    }
-+
-     switch (eap->cmdidx)
-     {
- 	case CMD_make:	    au_name = (char_u *)"make"; break;
-@@ -2765,13 +2802,6 @@
-     }
- #endif
- 
--    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
--    if (grep_internal(eap->cmdidx))
--    {
--	ex_vimgrep(eap);
--	return;
--    }
--
-     if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
- 	|| eap->cmdidx == CMD_lgrepadd)
- 	wp = curwin;
-@@ -2819,17 +2849,21 @@
- 					   (eap->cmdidx != CMD_grepadd
- 					    && eap->cmdidx != CMD_lgrepadd),
- 					   *eap->cmdlinep);
-+    if (wp != NULL)
-+	qi = GET_LOC_LIST(wp);
- #ifdef FEAT_AUTOCMD
-     if (au_name != NULL)
-+    {
- 	apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
- 					       curbuf->b_fname, TRUE, curbuf);
-+	if (qi->qf_curlist < qi->qf_listcount)
-+	    res = qi->qf_lists[qi->qf_curlist].qf_count;
-+	else
-+	    res = 0;
-+    }
- #endif
-     if (res > 0 && !eap->forceit)
--    {
--	if (wp != NULL)
--	    qi = GET_LOC_LIST(wp);
- 	qf_jump(qi, 0, 0, FALSE);		/* display first error */
--    }
- 
-     mch_remove(fname);
-     vim_free(fname);
-@@ -2974,11 +3008,28 @@
- {
-     win_T	*wp = NULL;
-     qf_info_T	*qi = &ql_info;
-+#ifdef FEAT_AUTOCMD
-+    char_u	*au_name = NULL;
-+#endif
- 
-     if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
--	|| eap->cmdidx == CMD_laddfile)
-+					       || eap->cmdidx == CMD_laddfile)
- 	wp = curwin;
- 
-+#ifdef FEAT_AUTOCMD
-+    switch (eap->cmdidx)
-+    {
-+	case CMD_cfile:	    au_name = (char_u *)"cfile"; break;
-+	case CMD_cgetfile:  au_name = (char_u *)"cgetfile"; break;
-+	case CMD_caddfile:  au_name = (char_u *)"caddfile"; break;
-+	case CMD_lfile:	    au_name = (char_u *)"lfile"; break;
-+	case CMD_lgetfile:  au_name = (char_u *)"lgetfile"; break;
-+	case CMD_laddfile:  au_name = (char_u *)"laddfile"; break;
-+	default: break;
-+    }
-+    if (au_name != NULL)
-+	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
-+#endif
- #ifdef FEAT_BROWSE
-     if (cmdmod.browse)
-     {
-@@ -3010,10 +3061,22 @@
- 				  && (eap->cmdidx == CMD_cfile
- 					     || eap->cmdidx == CMD_lfile))
-     {
-+#ifdef FEAT_AUTOCMD
-+	if (au_name != NULL)
-+	    apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
-+#endif
- 	if (wp != NULL)
- 	    qi = GET_LOC_LIST(wp);
- 	qf_jump(qi, 0, 0, eap->forceit);	/* display first error */
-     }
-+
-+    else
-+    {
-+#ifdef FEAT_AUTOCMD
-+	if (au_name != NULL)
-+	    apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
-+#endif
-+    }
- }
- 
- /*
-@@ -3051,18 +3114,22 @@
-     int		flags = 0;
-     colnr_T	col;
-     long	tomatch;
--    char_u	dirname_start[MAXPATHL];
--    char_u	dirname_now[MAXPATHL];
-+    char_u	*dirname_start = NULL;
-+    char_u	*dirname_now = NULL;
-     char_u	*target_dir = NULL;
- #ifdef FEAT_AUTOCMD
-     char_u	*au_name =  NULL;
- 
-     switch (eap->cmdidx)
-     {
--	case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
--	case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
--	case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
-+	case CMD_vimgrep:     au_name = (char_u *)"vimgrep"; break;
-+	case CMD_lvimgrep:    au_name = (char_u *)"lvimgrep"; break;
-+	case CMD_vimgrepadd:  au_name = (char_u *)"vimgrepadd"; break;
- 	case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
-+	case CMD_grep:	      au_name = (char_u *)"grep"; break;
-+	case CMD_lgrep:	      au_name = (char_u *)"lgrep"; break;
-+	case CMD_grepadd:     au_name = (char_u *)"grepadd"; break;
-+	case CMD_lgrepadd:    au_name = (char_u *)"lgrepadd"; break;
- 	default: break;
-     }
-     if (au_name != NULL)
-@@ -3122,7 +3189,7 @@
- 	    ;
- 
-     /* parse the list of arguments */
--    if (get_arglist_exp(p, &fcount, &fnames) == FAIL)
-+    if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
- 	goto theend;
-     if (fcount == 0)
-     {
-@@ -3130,6 +3197,11 @@
- 	goto theend;
-     }
- 
-+    dirname_start = alloc(MAXPATHL);
-+    dirname_now = alloc(MAXPATHL);
-+    if (dirname_start == NULL || dirname_now == NULL)
-+	goto theend;
-+
-     /* Remember the current directory, because a BufRead autocommand that does
-      * ":lcd %:p:h" changes the meaning of short path names. */
-     mch_dirname(dirname_start, MAXPATHL);
-@@ -3178,19 +3250,7 @@
- 
- 	    /* Load file into a buffer, so that 'fileencoding' is detected,
- 	     * autocommands applied, etc. */
--	    buf = load_dummy_buffer(fname);
--
--	    /* When autocommands changed directory: go back.  We assume it was
--	     * ":lcd %:p:h". */
--	    mch_dirname(dirname_now, MAXPATHL);
--	    if (STRCMP(dirname_start, dirname_now) != 0)
--	    {
--		exarg_T ea;
--
--		ea.arg = dirname_start;
--		ea.cmdidx = CMD_lcd;
--		ex_cd(&ea);
--	    }
-+	    buf = load_dummy_buffer(fname, dirname_start, dirname_now);
- 
- 	    p_mls = save_mls;
- #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
-@@ -3261,7 +3321,7 @@
- 		{
- 		    /* Never keep a dummy buffer if there is another buffer
- 		     * with the same name. */
--		    wipe_dummy_buffer(buf);
-+		    wipe_dummy_buffer(buf, dirname_start);
- 		    buf = NULL;
- 		}
- 		else if (!cmdmod.hide
-@@ -3277,12 +3337,12 @@
- 		     * many swap files. */
- 		    if (!found_match)
- 		    {
--			wipe_dummy_buffer(buf);
-+			wipe_dummy_buffer(buf, dirname_start);
- 			buf = NULL;
- 		    }
- 		    else if (buf != first_match_buf || (flags & VGR_NOJUMP))
- 		    {
--			unload_dummy_buffer(buf);
-+			unload_dummy_buffer(buf, dirname_start);
- 			buf = NULL;
- 		    }
- 		}
-@@ -3366,6 +3426,8 @@
-     }
- 
- theend:
-+    vim_free(dirname_now);
-+    vim_free(dirname_start);
-     vim_free(target_dir);
-     vim_free(regmatch.regprog);
- }
-@@ -3426,15 +3488,51 @@
- }
- 
- /*
-- * Load file "fname" into a dummy buffer and return the buffer pointer.
-+ * Restore current working directory to "dirname_start" if they differ, taking
-+ * into account whether it is set locally or globally.
-+ */
-+    static void
-+restore_start_dir(dirname_start)
-+    char_u	*dirname_start;
-+{
-+    char_u *dirname_now = alloc(MAXPATHL);
-+
-+    if (NULL != dirname_now)
-+    {
-+	mch_dirname(dirname_now, MAXPATHL);
-+	if (STRCMP(dirname_start, dirname_now) != 0)
-+	{
-+	    /* If the directory has changed, change it back by building up an
-+	     * appropriate ex command and executing it. */
-+	    exarg_T ea;
-+
-+	    ea.arg = dirname_start;
-+	    ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;
-+	    ex_cd(&ea);
-+	}
-+    }
-+}
-+
-+/*
-+ * Load file "fname" into a dummy buffer and return the buffer pointer,
-+ * placing the directory resulting from the buffer load into the
-+ * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller
-+ * prior to calling this function. Restores directory to "dirname_start" prior
-+ * to returning, if autocmds or the 'autochdir' option have changed it.
-+ *
-+ * If creating the dummy buffer does not fail, must call unload_dummy_buffer()
-+ * or wipe_dummy_buffer() later!
-+ *
-  * Returns NULL if it fails.
-- * Must call unload_dummy_buffer() or wipe_dummy_buffer() later!
-  */
-     static buf_T *
--load_dummy_buffer(fname)
-+load_dummy_buffer(fname, dirname_start, resulting_dir)
-     char_u	*fname;
-+    char_u	*dirname_start;  /* in: old directory */
-+    char_u	*resulting_dir;  /* out: new directory */
- {
-     buf_T	*newbuf;
-+    buf_T	*newbuf_to_wipe = NULL;
-     int		failed = TRUE;
-     aco_save_T	aco;
- 
-@@ -3471,33 +3569,48 @@
- 	    failed = FALSE;
- 	    if (curbuf != newbuf)
- 	    {
--		/* Bloody autocommands changed the buffer! */
--		if (buf_valid(newbuf))
--		    wipe_buffer(newbuf, FALSE);
-+		/* Bloody autocommands changed the buffer!  Can happen when
-+		 * using netrw and editing a remote file.  Use the current
-+		 * buffer instead, delete the dummy one after restoring the
-+		 * window stuff. */
-+		newbuf_to_wipe = newbuf;
- 		newbuf = curbuf;
- 	    }
- 	}
- 
- 	/* restore curwin/curbuf and a few other things */
- 	aucmd_restbuf(&aco);
-+	if (newbuf_to_wipe != NULL && buf_valid(newbuf_to_wipe))
-+	    wipe_buffer(newbuf_to_wipe, FALSE);
-     }
- 
-+    /*
-+     * When autocommands/'autochdir' option changed directory: go back.
-+     * Let the caller know what the resulting dir was first, in case it is
-+     * important.
-+     */
-+    mch_dirname(resulting_dir, MAXPATHL);
-+    restore_start_dir(dirname_start);
-+
-     if (!buf_valid(newbuf))
- 	return NULL;
-     if (failed)
-     {
--	wipe_dummy_buffer(newbuf);
-+	wipe_dummy_buffer(newbuf, dirname_start);
- 	return NULL;
-     }
-     return newbuf;
- }
- 
- /*
-- * Wipe out the dummy buffer that load_dummy_buffer() created.
-+ * Wipe out the dummy buffer that load_dummy_buffer() created. Restores
-+ * directory to "dirname_start" prior to returning, if autocmds or the
-+ * 'autochdir' option have changed it.
-  */
-     static void
--wipe_dummy_buffer(buf)
-+wipe_dummy_buffer(buf, dirname_start)
-     buf_T	*buf;
-+    char_u	*dirname_start;
- {
-     if (curbuf != buf)		/* safety check */
-     {
-@@ -3517,18 +3630,28 @@
- 	 * new aborting error, interrupt, or uncaught exception. */
- 	leave_cleanup(&cs);
- #endif
-+	/* When autocommands/'autochdir' option changed directory: go back. */
-+	restore_start_dir(dirname_start);
-     }
- }
- 
- /*
-- * Unload the dummy buffer that load_dummy_buffer() created.
-+ * Unload the dummy buffer that load_dummy_buffer() created. Restores
-+ * directory to "dirname_start" prior to returning, if autocmds or the
-+ * 'autochdir' option have changed it.
-  */
-     static void
--unload_dummy_buffer(buf)
-+unload_dummy_buffer(buf, dirname_start)
-     buf_T	*buf;
-+    char_u	*dirname_start;
- {
-     if (curbuf != buf)		/* safety check */
--	close_buffer(NULL, buf, DOBUF_UNLOAD);
-+    {
-+	close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
-+
-+	/* When autocommands/'autochdir' option changed directory: go back. */
-+	restore_start_dir(dirname_start);
-+    }
- }
- 
- #if defined(FEAT_EVAL) || defined(PROTO)
-@@ -3697,7 +3820,7 @@
-     }
- 
-     if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
--	/* empty list or no valid entry */
-+	/* no valid entry */
- 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
-     else
- 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
-@@ -3841,16 +3964,35 @@
-     qf_info_T	*qi = &ql_info;
-     int		new_qi = FALSE;
-     win_T	*wp;
--
--    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
--    save_cpo = p_cpo;
--    p_cpo = empty_option;
-+#ifdef FEAT_AUTOCMD
-+    char_u	*au_name =  NULL;
-+#endif
- 
- #ifdef FEAT_MULTI_LANG
-     /* Check for a specified language */
-     lang = check_help_lang(eap->arg);
- #endif
- 
-+#ifdef FEAT_AUTOCMD
-+    switch (eap->cmdidx)
-+    {
-+	case CMD_helpgrep:  au_name = (char_u *)"helpgrep"; break;
-+	case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
-+	default: break;
-+    }
-+    if (au_name != NULL)
-+    {
-+	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
-+					       curbuf->b_fname, TRUE, curbuf);
-+	if (did_throw || force_abort)
-+	    return;
-+    }
-+#endif
-+
-+    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
-+    save_cpo = p_cpo;
-+    p_cpo = empty_option;
-+
-     if (eap->cmdidx == CMD_lhelpgrep)
-     {
- 	/* Find an existing help window */
-@@ -3876,6 +4018,16 @@
-     regmatch.rm_ic = FALSE;
-     if (regmatch.regprog != NULL)
-     {
-+#ifdef FEAT_MBYTE
-+	vimconv_T vc;
-+
-+	/* Help files are in utf-8 or latin1, convert lines when 'encoding'
-+	 * differs. */
-+	vc.vc_type = CONV_NONE;
-+	if (!enc_utf8)
-+	    convert_setup(&vc, (char_u *)"utf-8", p_enc);
-+#endif
-+
- 	/* create a new quickfix list */
- 	qf_new_list(qi, *eap->cmdlinep);
- 
-@@ -3910,21 +4062,33 @@
- 			lnum = 1;
- 			while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
- 			{
--			    if (vim_regexec(&regmatch, IObuff, (colnr_T)0))
-+			    char_u    *line = IObuff;
-+#ifdef FEAT_MBYTE
-+			    /* Convert a line if 'encoding' is not utf-8 and
-+			     * the line contains a non-ASCII character. */
-+			    if (vc.vc_type != CONV_NONE
-+						   && has_non_ascii(IObuff)) {
-+				line = string_convert(&vc, IObuff, NULL);
-+				if (line == NULL)
-+				    line = IObuff;
-+			    }
-+#endif
-+
-+			    if (vim_regexec(&regmatch, line, (colnr_T)0))
- 			    {
--				int	l = (int)STRLEN(IObuff);
-+				int	l = (int)STRLEN(line);
- 
- 				/* remove trailing CR, LF, spaces, etc. */
--				while (l > 0 && IObuff[l - 1] <= ' ')
--				     IObuff[--l] = NUL;
-+				while (l > 0 && line[l - 1] <= ' ')
-+				     line[--l] = NUL;
- 
- 				if (qf_add_entry(qi, &prevp,
- 					    NULL,	/* dir */
- 					    fnames[fi],
- 					    0,
--					    IObuff,
-+					    line,
- 					    lnum,
--					    (int)(regmatch.startp[0] - IObuff)
-+					    (int)(regmatch.startp[0] - line)
- 								+ 1, /* col */
- 					    FALSE,	/* vis_col */
- 					    NULL,	/* search pattern */
-@@ -3934,9 +4098,17 @@
- 					    ) == FAIL)
- 				{
- 				    got_int = TRUE;
-+#ifdef FEAT_MBYTE
-+				    if (line != IObuff)
-+					vim_free(line);
-+#endif
- 				    break;
- 				}
- 			    }
-+#ifdef FEAT_MBYTE
-+			    if (line != IObuff)
-+				vim_free(line);
-+#endif
- 			    ++lnum;
- 			    line_breakcheck();
- 			}
-@@ -3946,7 +4118,12 @@
- 		FreeWild(fcount, fnames);
- 	    }
- 	}
-+
- 	vim_free(regmatch.regprog);
-+#ifdef FEAT_MBYTE
-+	if (vc.vc_type != CONV_NONE)
-+	    convert_setup(&vc, NULL, NULL);
-+#endif
- 
- 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
- 	qi->qf_lists[qi->qf_curlist].qf_ptr =
-@@ -3964,6 +4141,17 @@
-     qf_update_buffer(qi);
- #endif
- 
-+#ifdef FEAT_AUTOCMD
-+    if (au_name != NULL)
-+    {
-+	apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
-+					       curbuf->b_fname, TRUE, curbuf);
-+	if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL)
-+	    /* autocommands made "qi" invalid */
-+	    return;
-+    }
-+#endif
-+
-     /* Jump to first match. */
-     if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
- 	qf_jump(qi, 0, 0, FALSE);
-diff -Naur vim73.orig/src/regexp.c vim73/src/regexp.c
---- vim73.orig/src/regexp.c	2010-07-12 20:41:48.000000000 +0000
-+++ vim73/src/regexp.c	2012-11-01 20:35:43.000000000 +0000
-@@ -666,8 +666,12 @@
- static void	regc __ARGS((int b));
- #ifdef FEAT_MBYTE
- static void	regmbc __ARGS((int c));
-+# define REGMBC(x) regmbc(x);
-+# define CASEMBC(x) case x:
- #else
- # define regmbc(c) regc(c)
-+# define REGMBC(x)
-+# define CASEMBC(x)
- #endif
- static void	reginsert __ARGS((int, char_u *));
- static void	reginsert_limits __ARGS((int, long, long, char_u *));
-@@ -787,68 +791,295 @@
- 	switch (c)
- 	{
- 	    case 'A': case '\300': case '\301': case '\302':
-+	    CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
-+	    CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
- 	    case '\303': case '\304': case '\305':
- 		      regmbc('A'); regmbc('\300'); regmbc('\301');
- 		      regmbc('\302'); regmbc('\303'); regmbc('\304');
- 		      regmbc('\305');
-+		      REGMBC(0x100) REGMBC(0x102) REGMBC(0x104)
-+		      REGMBC(0x1cd) REGMBC(0x1de) REGMBC(0x1e0)
-+		      REGMBC(0x1ea2)
-+		      return;
-+	    case 'B': CASEMBC(0x1e02) CASEMBC(0x1e06)
-+		      regmbc('B'); REGMBC(0x1e02) REGMBC(0x1e06)
- 		      return;
- 	    case 'C': case '\307':
-+	    CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
- 		      regmbc('C'); regmbc('\307');
-+		      REGMBC(0x106) REGMBC(0x108) REGMBC(0x10a)
-+		      REGMBC(0x10c)
-+		      return;
-+	    case 'D': CASEMBC(0x10e) CASEMBC(0x110) CASEMBC(0x1e0a)
-+	    CASEMBC(0x1e0e) CASEMBC(0x1e10)
-+		      regmbc('D'); REGMBC(0x10e) REGMBC(0x110)
-+		      REGMBC(0x1e0a) REGMBC(0x1e0e) REGMBC(0x1e10)
- 		      return;
- 	    case 'E': case '\310': case '\311': case '\312': case '\313':
-+	    CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
-+	    CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
- 		      regmbc('E'); regmbc('\310'); regmbc('\311');
- 		      regmbc('\312'); regmbc('\313');
-+		      REGMBC(0x112) REGMBC(0x114) REGMBC(0x116)
-+		      REGMBC(0x118) REGMBC(0x11a) REGMBC(0x1eba)
-+		      REGMBC(0x1ebc)
-+		      return;
-+	    case 'F': CASEMBC(0x1e1e)
-+		      regmbc('F'); REGMBC(0x1e1e)
-+		      return;
-+	    case 'G': CASEMBC(0x11c) CASEMBC(0x11e) CASEMBC(0x120)
-+	    CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6) CASEMBC(0x1f4)
-+	    CASEMBC(0x1e20)
-+		      regmbc('G'); REGMBC(0x11c) REGMBC(0x11e)
-+		      REGMBC(0x120) REGMBC(0x122) REGMBC(0x1e4)
-+		      REGMBC(0x1e6) REGMBC(0x1f4) REGMBC(0x1e20)
-+		      return;
-+	    case 'H': CASEMBC(0x124) CASEMBC(0x126) CASEMBC(0x1e22)
-+	    CASEMBC(0x1e26) CASEMBC(0x1e28)
-+		      regmbc('H'); REGMBC(0x124) REGMBC(0x126)
-+		      REGMBC(0x1e22) REGMBC(0x1e26) REGMBC(0x1e28)
- 		      return;
- 	    case 'I': case '\314': case '\315': case '\316': case '\317':
-+	    CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
-+	    CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
- 		      regmbc('I'); regmbc('\314'); regmbc('\315');
- 		      regmbc('\316'); regmbc('\317');
-+		      REGMBC(0x128) REGMBC(0x12a) REGMBC(0x12c)
-+		      REGMBC(0x12e) REGMBC(0x130) REGMBC(0x1cf)
-+		      REGMBC(0x1ec8)
-+		      return;
-+	    case 'J': CASEMBC(0x134)
-+		      regmbc('J'); REGMBC(0x134)
-+		      return;
-+	    case 'K': CASEMBC(0x136) CASEMBC(0x1e8) CASEMBC(0x1e30)
-+	    CASEMBC(0x1e34)
-+		      regmbc('K'); REGMBC(0x136) REGMBC(0x1e8)
-+		      REGMBC(0x1e30) REGMBC(0x1e34)
-+		      return;
-+	    case 'L': CASEMBC(0x139) CASEMBC(0x13b) CASEMBC(0x13d)
-+	    CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
-+		      regmbc('L'); REGMBC(0x139) REGMBC(0x13b)
-+		      REGMBC(0x13d) REGMBC(0x13f) REGMBC(0x141)
-+		      REGMBC(0x1e3a)
-+		      return;
-+	    case 'M': CASEMBC(0x1e3e) CASEMBC(0x1e40)
-+		      regmbc('M'); REGMBC(0x1e3e) REGMBC(0x1e40)
- 		      return;
- 	    case 'N': case '\321':
-+	    CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
-+	    CASEMBC(0x1e48)
- 		      regmbc('N'); regmbc('\321');
-+		      REGMBC(0x143) REGMBC(0x145) REGMBC(0x147)
-+		      REGMBC(0x1e44) REGMBC(0x1e48)
- 		      return;
- 	    case 'O': case '\322': case '\323': case '\324': case '\325':
--	    case '\326':
-+	    case '\326': case '\330':
-+	    CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
-+	    CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
- 		      regmbc('O'); regmbc('\322'); regmbc('\323');
- 		      regmbc('\324'); regmbc('\325'); regmbc('\326');
-+		      regmbc('\330');
-+		      REGMBC(0x14c) REGMBC(0x14e) REGMBC(0x150)
-+		      REGMBC(0x1a0) REGMBC(0x1d1) REGMBC(0x1ea)
-+		      REGMBC(0x1ec) REGMBC(0x1ece)
-+		      return;
-+	    case 'P': case 0x1e54: case 0x1e56:
-+		      regmbc('P'); REGMBC(0x1e54) REGMBC(0x1e56)
-+		      return;
-+	    case 'R': CASEMBC(0x154) CASEMBC(0x156) CASEMBC(0x158)
-+	    CASEMBC(0x1e58) CASEMBC(0x1e5e)
-+		      regmbc('R'); REGMBC(0x154) REGMBC(0x156) REGMBC(0x158)
-+		      REGMBC(0x1e58) REGMBC(0x1e5e)
-+		      return;
-+	    case 'S': CASEMBC(0x15a) CASEMBC(0x15c) CASEMBC(0x15e)
-+	    CASEMBC(0x160) CASEMBC(0x1e60)
-+		      regmbc('S'); REGMBC(0x15a) REGMBC(0x15c)
-+		      REGMBC(0x15e) REGMBC(0x160) REGMBC(0x1e60)
-+		      return;
-+	    case 'T': CASEMBC(0x162) CASEMBC(0x164) CASEMBC(0x166)
-+	    CASEMBC(0x1e6a) CASEMBC(0x1e6e)
-+		      regmbc('T'); REGMBC(0x162) REGMBC(0x164)
-+		      REGMBC(0x166) REGMBC(0x1e6a) REGMBC(0x1e6e)
- 		      return;
- 	    case 'U': case '\331': case '\332': case '\333': case '\334':
-+	    CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
-+	    CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
-+	    CASEMBC(0x1ee6)
- 		      regmbc('U'); regmbc('\331'); regmbc('\332');
- 		      regmbc('\333'); regmbc('\334');
-+		      REGMBC(0x168) REGMBC(0x16a) REGMBC(0x16c)
-+		      REGMBC(0x16e) REGMBC(0x170) REGMBC(0x172)
-+		      REGMBC(0x1af) REGMBC(0x1d3) REGMBC(0x1ee6)
-+		      return;
-+	    case 'V': CASEMBC(0x1e7c)
-+		      regmbc('V'); REGMBC(0x1e7c)
-+		      return;
-+	    case 'W': CASEMBC(0x174) CASEMBC(0x1e80) CASEMBC(0x1e82)
-+	    CASEMBC(0x1e84) CASEMBC(0x1e86)
-+		      regmbc('W'); REGMBC(0x174) REGMBC(0x1e80)
-+		      REGMBC(0x1e82) REGMBC(0x1e84) REGMBC(0x1e86)
-+		      return;
-+	    case 'X': CASEMBC(0x1e8a) CASEMBC(0x1e8c)
-+		      regmbc('X'); REGMBC(0x1e8a) REGMBC(0x1e8c)
- 		      return;
- 	    case 'Y': case '\335':
-+	    CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
-+	    CASEMBC(0x1ef6) CASEMBC(0x1ef8)
- 		      regmbc('Y'); regmbc('\335');
-+		      REGMBC(0x176) REGMBC(0x178) REGMBC(0x1e8e)
-+		      REGMBC(0x1ef2) REGMBC(0x1ef6) REGMBC(0x1ef8)
-+		      return;
-+	    case 'Z': CASEMBC(0x179) CASEMBC(0x17b) CASEMBC(0x17d)
-+	    CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
-+		      regmbc('Z'); REGMBC(0x179) REGMBC(0x17b)
-+		      REGMBC(0x17d) REGMBC(0x1b5) REGMBC(0x1e90)
-+		      REGMBC(0x1e94)
- 		      return;
- 	    case 'a': case '\340': case '\341': case '\342':
- 	    case '\343': case '\344': case '\345':
-+	    CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
-+	    CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
- 		      regmbc('a'); regmbc('\340'); regmbc('\341');
- 		      regmbc('\342'); regmbc('\343'); regmbc('\344');
- 		      regmbc('\345');
-+		      REGMBC(0x101) REGMBC(0x103) REGMBC(0x105)
-+		      REGMBC(0x1ce) REGMBC(0x1df) REGMBC(0x1e1)
-+		      REGMBC(0x1ea3)
-+		      return;
-+	    case 'b': CASEMBC(0x1e03) CASEMBC(0x1e07)
-+		      regmbc('b'); REGMBC(0x1e03) REGMBC(0x1e07)
- 		      return;
- 	    case 'c': case '\347':
-+	    CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
- 		      regmbc('c'); regmbc('\347');
-+		      REGMBC(0x107) REGMBC(0x109) REGMBC(0x10b)
-+		      REGMBC(0x10d)
-+		      return;
-+	    case 'd': CASEMBC(0x10f) CASEMBC(0x111) CASEMBC(0x1d0b)
-+	    CASEMBC(0x1e11)
-+		      regmbc('d'); REGMBC(0x10f) REGMBC(0x111)
-+		      REGMBC(0x1e0b) REGMBC(0x01e0f) REGMBC(0x1e11)
- 		      return;
- 	    case 'e': case '\350': case '\351': case '\352': case '\353':
-+	    CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
-+	    CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
- 		      regmbc('e'); regmbc('\350'); regmbc('\351');
- 		      regmbc('\352'); regmbc('\353');
-+		      REGMBC(0x113) REGMBC(0x115) REGMBC(0x117)
-+		      REGMBC(0x119) REGMBC(0x11b) REGMBC(0x1ebb)
-+		      REGMBC(0x1ebd)
-+		      return;
-+	    case 'f': CASEMBC(0x1e1f)
-+		      regmbc('f'); REGMBC(0x1e1f)
-+		      return;
-+	    case 'g': CASEMBC(0x11d) CASEMBC(0x11f) CASEMBC(0x121)
-+	    CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7) CASEMBC(0x1f5)
-+	    CASEMBC(0x1e21)
-+		      regmbc('g'); REGMBC(0x11d) REGMBC(0x11f)
-+		      REGMBC(0x121) REGMBC(0x123) REGMBC(0x1e5)
-+		      REGMBC(0x1e7) REGMBC(0x1f5) REGMBC(0x1e21)
-+		      return;
-+	    case 'h': CASEMBC(0x125) CASEMBC(0x127) CASEMBC(0x1e23)
-+	    CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
-+		      regmbc('h'); REGMBC(0x125) REGMBC(0x127)
-+		      REGMBC(0x1e23) REGMBC(0x1e27) REGMBC(0x1e29)
-+		      REGMBC(0x1e96)
- 		      return;
- 	    case 'i': case '\354': case '\355': case '\356': case '\357':
-+	    CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
-+	    CASEMBC(0x1d0) CASEMBC(0x1ec9)
- 		      regmbc('i'); regmbc('\354'); regmbc('\355');
- 		      regmbc('\356'); regmbc('\357');
-+		      REGMBC(0x129) REGMBC(0x12b) REGMBC(0x12d)
-+		      REGMBC(0x12f) REGMBC(0x1d0) REGMBC(0x1ec9)
-+		      return;
-+	    case 'j': CASEMBC(0x135) CASEMBC(0x1f0)
-+		      regmbc('j'); REGMBC(0x135) REGMBC(0x1f0)
-+		      return;
-+	    case 'k': CASEMBC(0x137) CASEMBC(0x1e9) CASEMBC(0x1e31)
-+	    CASEMBC(0x1e35)
-+		      regmbc('k'); REGMBC(0x137) REGMBC(0x1e9)
-+		      REGMBC(0x1e31) REGMBC(0x1e35)
-+		      return;
-+	    case 'l': CASEMBC(0x13a) CASEMBC(0x13c) CASEMBC(0x13e)
-+	    CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
-+		      regmbc('l'); REGMBC(0x13a) REGMBC(0x13c)
-+		      REGMBC(0x13e) REGMBC(0x140) REGMBC(0x142)
-+		      REGMBC(0x1e3b)
-+		      return;
-+	    case 'm': CASEMBC(0x1e3f) CASEMBC(0x1e41)
-+		      regmbc('m'); REGMBC(0x1e3f) REGMBC(0x1e41)
- 		      return;
- 	    case 'n': case '\361':
-+	    CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
-+	    CASEMBC(0x1e45) CASEMBC(0x1e49)
- 		      regmbc('n'); regmbc('\361');
-+		      REGMBC(0x144) REGMBC(0x146) REGMBC(0x148)
-+		      REGMBC(0x149) REGMBC(0x1e45) REGMBC(0x1e49)
- 		      return;
- 	    case 'o': case '\362': case '\363': case '\364': case '\365':
--	    case '\366':
-+	    case '\366': case '\370':
-+	    CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
-+	    CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
- 		      regmbc('o'); regmbc('\362'); regmbc('\363');
- 		      regmbc('\364'); regmbc('\365'); regmbc('\366');
-+		      regmbc('\370');
-+		      REGMBC(0x14d) REGMBC(0x14f) REGMBC(0x151)
-+		      REGMBC(0x1a1) REGMBC(0x1d2) REGMBC(0x1eb)
-+		      REGMBC(0x1ed) REGMBC(0x1ecf)
-+		      return;
-+	    case 'p': CASEMBC(0x1e55) CASEMBC(0x1e57)
-+		      regmbc('p'); REGMBC(0x1e55) REGMBC(0x1e57)
-+		      return;
-+	    case 'r': CASEMBC(0x155) CASEMBC(0x157) CASEMBC(0x159)
-+	    CASEMBC(0x1e59) CASEMBC(0x1e5f)
-+		      regmbc('r'); REGMBC(0x155) REGMBC(0x157) REGMBC(0x159)
-+		      REGMBC(0x1e59) REGMBC(0x1e5f)
-+		      return;
-+	    case 's': CASEMBC(0x15b) CASEMBC(0x15d) CASEMBC(0x15f)
-+	    CASEMBC(0x161) CASEMBC(0x1e61)
-+		      regmbc('s'); REGMBC(0x15b) REGMBC(0x15d)
-+		      REGMBC(0x15f) REGMBC(0x161) REGMBC(0x1e61)
-+		      return;
-+	    case 't': CASEMBC(0x163) CASEMBC(0x165) CASEMBC(0x167)
-+	    CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
-+		      regmbc('t'); REGMBC(0x163) REGMBC(0x165) REGMBC(0x167)
-+		      REGMBC(0x1e6b) REGMBC(0x1e6f) REGMBC(0x1e97)
- 		      return;
- 	    case 'u': case '\371': case '\372': case '\373': case '\374':
-+	    CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
-+	    CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
-+	    CASEMBC(0x1ee7)
- 		      regmbc('u'); regmbc('\371'); regmbc('\372');
- 		      regmbc('\373'); regmbc('\374');
-+		      REGMBC(0x169) REGMBC(0x16b) REGMBC(0x16d)
-+		      REGMBC(0x16f) REGMBC(0x171) REGMBC(0x173)
-+		      REGMBC(0x1b0) REGMBC(0x1d4) REGMBC(0x1ee7)
-+		      return;
-+	    case 'v': CASEMBC(0x1e7d)
-+		      regmbc('v'); REGMBC(0x1e7d)
-+		      return;
-+	    case 'w': CASEMBC(0x175) CASEMBC(0x1e81) CASEMBC(0x1e83)
-+	    CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
-+		      regmbc('w'); REGMBC(0x175) REGMBC(0x1e81)
-+		      REGMBC(0x1e83) REGMBC(0x1e85) REGMBC(0x1e87)
-+		      REGMBC(0x1e98)
-+		      return;
-+	    case 'x': CASEMBC(0x1e8b) CASEMBC(0x1e8d)
-+		      regmbc('x'); REGMBC(0x1e8b) REGMBC(0x1e8d)
- 		      return;
- 	    case 'y': case '\375': case '\377':
-+	    CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
-+	    CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
- 		      regmbc('y'); regmbc('\375'); regmbc('\377');
-+		      REGMBC(0x177) REGMBC(0x1e8f) REGMBC(0x1e99)
-+		      REGMBC(0x1ef3) REGMBC(0x1ef7) REGMBC(0x1ef9)
-+		      return;
-+	    case 'z': CASEMBC(0x17a) CASEMBC(0x17c) CASEMBC(0x17e)
-+	    CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
-+		      regmbc('z'); REGMBC(0x17a) REGMBC(0x17c)
-+		      REGMBC(0x17e) REGMBC(0x1b6) REGMBC(0x1e91)
-+		      REGMBC(0x1e95)
- 		      return;
- 	}
- #endif
-@@ -2468,6 +2699,8 @@
- regmbc(c)
-     int		c;
- {
-+    if (!has_mbyte && c > 0xff)
-+	return;
-     if (regcode == JUST_CALC_SIZE)
- 	regsize += (*mb_char2len)(c);
-     else
-@@ -2588,7 +2821,7 @@
-     else
- 	offset = (int)(val - scan);
-     /* When the offset uses more than 16 bits it can no longer fit in the two
--     * bytes avaliable.  Use a global flag to avoid having to check return
-+     * bytes available.  Use a global flag to avoid having to check return
-      * values in too many places. */
-     if (offset > 0xffff)
- 	reg_toolong = TRUE;
-@@ -3538,6 +3771,7 @@
- 
-     regline = line;
-     reglnum = 0;
-+    reg_toolong = FALSE;
- 
-     /* Simplest case: Anchored match need be tried only once. */
-     if (prog->reganch)
-@@ -6871,6 +7105,7 @@
- static regmmatch_T	*submatch_mmatch;
- static linenr_T		submatch_firstlnum;
- static linenr_T		submatch_maxline;
-+static int		submatch_line_lbr;
- #endif
- 
- #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO)
-@@ -6997,6 +7232,7 @@
- 	    submatch_mmatch = reg_mmatch;
- 	    submatch_firstlnum = reg_firstlnum;
- 	    submatch_maxline = reg_maxline;
-+	    submatch_line_lbr = reg_line_lbr;
- 	    save_reg_win = reg_win;
- 	    save_ireg_ic = ireg_ic;
- 	    can_f_submatch = TRUE;
-@@ -7008,9 +7244,10 @@
- 
- 		for (s = eval_result; *s != NUL; mb_ptr_adv(s))
- 		{
--		    /* Change NL to CR, so that it becomes a line break.
-+		    /* Change NL to CR, so that it becomes a line break,
-+		     * unless called from vim_regexec_nl().
- 		     * Skip over a backslashed character. */
--		    if (*s == NL)
-+		    if (*s == NL && !submatch_line_lbr)
- 			*s = CAR;
- 		    else if (*s == '\\' && s[1] != NUL)
- 		    {
-@@ -7019,8 +7256,9 @@
- 			 * :s/abc\\\ndef/\="aaa\\\nbbb"/  on text:
- 			 *   abc\
- 			 *   def
-+			 * Not when called from vim_regexec_nl().
- 			 */
--			if (*s == NL)
-+			if (*s == NL && !submatch_line_lbr)
- 			    *s = CAR;
- 			had_backslash = TRUE;
- 		    }
-@@ -7043,6 +7281,7 @@
- 	    reg_mmatch = submatch_mmatch;
- 	    reg_firstlnum = submatch_firstlnum;
- 	    reg_maxline = submatch_maxline;
-+	    reg_line_lbr = submatch_line_lbr;
- 	    reg_win = save_reg_win;
- 	    ireg_ic = save_ireg_ic;
- 	    can_f_submatch = FALSE;
-diff -Naur vim73.orig/src/screen.c vim73/src/screen.c
---- vim73.orig/src/screen.c	2010-08-13 13:21:27.000000000 +0000
-+++ vim73/src/screen.c	2012-11-01 20:35:48.000000000 +0000
-@@ -89,6 +89,9 @@
- 
- #include "vim.h"
- 
-+#define MB_FILLER_CHAR '<'  /* character used when a double-width character
-+			     * doesn't fit. */
-+
- /*
-  * The attributes that are actually active for writing to the screen.
-  */
-@@ -516,8 +519,10 @@
- # endif
- # ifdef FEAT_CLIPBOARD
- 		/* When Visual area changed, may have to update selection. */
--		if (clip_star.available && clip_isautosel())
--		    clip_update_selection();
-+		if (clip_star.available && clip_isautosel_star())
-+		    clip_update_selection(&clip_star);
-+		if (clip_plus.available && clip_isautosel_plus())
-+		    clip_update_selection(&clip_plus);
- # endif
- #ifdef FEAT_GUI
- 		/* Remove the cursor before starting to do anything, because
-@@ -764,9 +769,13 @@
- 	    doit = TRUE;
-     }
- 
--    /* Return when there is nothing to do or screen updating already
--     * happening. */
--    if (!doit || updating_screen)
-+    /* Return when there is nothing to do, screen updating is already
-+     * happening (recursive call) or still starting up. */
-+    if (!doit || updating_screen
-+#ifdef FEAT_GUI
-+	    || gui.starting
-+#endif
-+	    || starting)
- 	return;
- 
-     /* update all windows that need updating */
-@@ -807,8 +816,10 @@
- 
- #ifdef FEAT_CLIPBOARD
-     /* When Visual area changed, may have to update selection. */
--    if (clip_star.available && clip_isautosel())
--	clip_update_selection();
-+    if (clip_star.available && clip_isautosel_star())
-+	clip_update_selection(&clip_star);
-+    if (clip_plus.available && clip_isautosel_plus())
-+	clip_update_selection(&clip_plus);
- #endif
- 
-     win_update(wp);
-@@ -1633,11 +1644,11 @@
- 	     * When at start of changed lines: May scroll following lines
- 	     * up or down to minimize redrawing.
- 	     * Don't do this when the change continues until the end.
--	     * Don't scroll when dollar_vcol is non-zero, keep the "$".
-+	     * Don't scroll when dollar_vcol >= 0, keep the "$".
- 	     */
- 	    if (lnum == mod_top
- 		    && mod_bot != MAXLNUM
--		    && !(dollar_vcol != 0 && mod_bot == mod_top + 1))
-+		    && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
- 	    {
- 		int		old_rows = 0;
- 		int		new_rows = 0;
-@@ -1864,12 +1875,12 @@
- 	    if (row > wp->w_height)	/* past end of screen */
- 	    {
- 		/* we may need the size of that too long line later on */
--		if (dollar_vcol == 0)
-+		if (dollar_vcol == -1)
- 		    wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
- 		++idx;
- 		break;
- 	    }
--	    if (dollar_vcol == 0)
-+	    if (dollar_vcol == -1)
- 		wp->w_lines[idx].wl_size = row - srow;
- 	    ++idx;
- #ifdef FEAT_FOLDING
-@@ -1986,7 +1997,7 @@
- 	    }
- #endif
- 	}
--	else if (dollar_vcol == 0)
-+	else if (dollar_vcol == -1)
- 	    wp->w_botline = lnum;
- 
- 	/* make sure the rest of the screen is blank */
-@@ -2001,7 +2012,7 @@
-     wp->w_old_botfill = wp->w_botfill;
- #endif
- 
--    if (dollar_vcol == 0)
-+    if (dollar_vcol == -1)
-     {
- 	/*
- 	 * There is a trick with w_botline.  If we invalidate it on each
-@@ -2317,7 +2328,7 @@
- 		num = (long)lnum;
- 	    else
- 		/* 'relativenumber', don't use negative numbers */
--		num = (long)abs((int)get_cursor_rel_lnum(wp, lnum));
-+		num = labs((long)get_cursor_rel_lnum(wp, lnum));
- 
- 	    sprintf((char *)buf, "%*ld ", w, num);
- #ifdef FEAT_RIGHTLEFT
-@@ -2531,7 +2542,9 @@
- 		/* Visual block mode: highlight the chars part of the block */
- 		if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
- 		{
--		    if (wp->w_old_cursor_lcol + txtcol < (colnr_T)W_WIDTH(wp))
-+		    if (wp->w_old_cursor_lcol != MAXCOL
-+			     && wp->w_old_cursor_lcol + txtcol
-+						       < (colnr_T)W_WIDTH(wp))
- 			len = wp->w_old_cursor_lcol;
- 		    else
- 			len = W_WIDTH(wp) - txtcol;
-@@ -2991,7 +3004,10 @@
- 	    area_highlighting = TRUE;
- 	    attr = hl_attr(HLF_V);
- #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
--	    if (clip_star.available && !clip_star.owned && clip_isautosel())
-+	    if ((clip_star.available && !clip_star.owned
-+						     && clip_isautosel_star())
-+		    || (clip_plus.available && !clip_plus.owned
-+						    && clip_isautosel_plus()))
- 		attr = hl_attr(HLF_VNC);
- #endif
- 	}
-@@ -3222,8 +3238,7 @@
- 		/* no bad word found at line start, don't check until end of a
- 		 * word */
- 		spell_hlf = HLF_COUNT;
--		word_end = (int)(spell_to_word_end(ptr, wp)
--								  - line + 1);
-+		word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
- 	    }
- 	    else
- 	    {
-@@ -3405,9 +3420,9 @@
- # endif
- 		   )
- 		{
--		    int_u	text_sign;
-+		    int	text_sign;
- # ifdef FEAT_SIGN_ICONS
--		    int_u	icon_sign;
-+		    int	icon_sign;
- # endif
- 
- 		    /* Draw two cells with the sign value or blank. */
-@@ -3475,8 +3490,7 @@
- 			    num = (long)lnum;
- 			else
- 			    /* 'relativenumber', don't use negative numbers */
--			    num = (long)abs((int)get_cursor_rel_lnum(wp,
--								    lnum));
-+			    num = labs((long)get_cursor_rel_lnum(wp, lnum));
- 
- 			sprintf((char *)extra, "%*ld ",
- 						number_width(wp), num);
-@@ -3496,9 +3510,11 @@
- 		    char_attr = hl_attr(HLF_N);
- #ifdef FEAT_SYN_HL
- 		    /* When 'cursorline' is set highlight the line number of
--		     * the current line differently. */
-+		     * the current line differently.
-+		     * TODO: Can we use CursorLine instead of CursorLineNr
-+		     * when CursorLineNr isn't set? */
- 		    if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
--			char_attr = hl_combine_attr(hl_attr(HLF_CUL), char_attr);
-+			char_attr = hl_attr(HLF_CLN);
- #endif
- 		}
- 	    }
-@@ -3559,7 +3575,7 @@
- 	}
- 
- 	/* When still displaying '$' of change command, stop at cursor */
--	if (dollar_vcol != 0 && wp == curwin
-+	if (dollar_vcol >= 0 && wp == curwin
- 		   && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
- #ifdef FEAT_DIFF
- 				   && filler_todo <= 0
-@@ -4010,7 +4026,7 @@
- 		if (n_skip > 0 && mb_l > 1 && n_extra == 0)
- 		{
- 		    n_extra = 1;
--		    c_extra = '<';
-+		    c_extra = MB_FILLER_CHAR;
- 		    c = ' ';
- 		    if (area_attr == 0 && search_attr == 0)
- 		    {
-@@ -4253,7 +4269,7 @@
- 		{
- 		    /* tab amount depends on current column */
- 		    n_extra = (int)wp->w_buffer->b_p_ts
--				   - vcol % (int)wp->w_buffer->b_p_ts - 1;
-+				   - VCOL_HLC % (int)wp->w_buffer->b_p_ts - 1;
- #ifdef FEAT_MBYTE
- 		    mb_utf8 = FALSE;	/* don't draw as UTF-8 */
- #endif
-@@ -4570,6 +4586,15 @@
- 	    c = lcs_prec;
- 	    lcs_prec_todo = NUL;
- #ifdef FEAT_MBYTE
-+	    if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
-+	    {
-+		/* Double-width character being overwritten by the "precedes"
-+		 * character, need to fill up half the character. */
-+		c_extra = MB_FILLER_CHAR;
-+		n_extra = 1;
-+		n_attr = 2;
-+		extra_attr = hl_attr(HLF_AT);
-+	    }
- 	    mb_c = c;
- 	    if (enc_utf8 && (*mb_char2len)(c) > 1)
- 	    {
-@@ -5307,8 +5332,9 @@
- 		    && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
- 			|| (ScreenLinesUC[off_from] != 0
- 			    && comp_char_differs(off_from, off_to))
--			|| (cols > 1 && ScreenLines[off_from + 1]
--						 != ScreenLines[off_to + 1])))
-+			|| ((*mb_off2cells)(off_from, off_from + cols) > 1
-+			    && ScreenLines[off_from + 1]
-+						  != ScreenLines[off_to + 1])))
- #endif
- 	       ))
- 	return TRUE;
-@@ -5366,6 +5392,12 @@
- # define CHAR_CELLS 1
- #endif
- 
-+    /* Check for illegal row and col, just in case. */
-+    if (row >= Rows)
-+	row = Rows - 1;
-+    if (endcol > Columns)
-+	endcol = Columns;
-+
- # ifdef FEAT_CLIPBOARD
-     clip_may_clear_selection(row, row);
- # endif
-@@ -6436,6 +6468,8 @@
-     struct	stl_hlrec hltab[STL_MAX_ITEM];
-     struct	stl_hlrec tabtab[STL_MAX_ITEM];
-     int		use_sandbox = FALSE;
-+    win_T	*ewp;
-+    int		p_crb_save;
- 
-     /* setup environment for the task at hand */
-     if (wp == NULL)
-@@ -6514,16 +6548,31 @@
-     if (maxwidth <= 0)
- 	return;
- 
-+    /* Temporarily reset 'cursorbind', we don't want a side effect from moving
-+     * the cursor away and back. */
-+    ewp = wp == NULL ? curwin : wp;
-+    p_crb_save = ewp->w_p_crb;
-+    ewp->w_p_crb = FALSE;
-+
-     /* Make a copy, because the statusline may include a function call that
-      * might change the option value and free the memory. */
-     stl = vim_strsave(stl);
--    width = build_stl_str_hl(wp == NULL ? curwin : wp,
--				buf, sizeof(buf),
-+    width = build_stl_str_hl(ewp, buf, sizeof(buf),
- 				stl, use_sandbox,
- 				fillchar, maxwidth, hltab, tabtab);
-     vim_free(stl);
--    len = (int)STRLEN(buf);
-+    ewp->w_p_crb = p_crb_save;
-+
-+    /* Make all characters printable. */
-+    p = transstr(buf);
-+    if (p != NULL)
-+    {
-+	vim_strncpy(buf, p, sizeof(buf) - 1);
-+	vim_free(p);
-+    }
- 
-+    /* fill up with "fillchar" */
-+    len = (int)STRLEN(buf);
-     while (width < maxwidth && len < (int)sizeof(buf) - 1)
-     {
- #ifdef FEAT_MBYTE
-@@ -6591,16 +6640,17 @@
-     int	    row, col;
-     int	    attr;
- {
--#ifdef FEAT_MBYTE
-     char_u	buf[MB_MAXBYTES + 1];
- 
--    buf[(*mb_char2bytes)(c, buf)] = NUL;
--#else
--    char_u	buf[2];
--
--    buf[0] = c;
--    buf[1] = NUL;
-+#ifdef FEAT_MBYTE
-+    if (has_mbyte)
-+	buf[(*mb_char2bytes)(c, buf)] = NUL;
-+    else
- #endif
-+    {
-+	buf[0] = c;
-+	buf[1] = NUL;
-+    }
-     screen_puts(buf, row, col, attr);
- }
- 
-@@ -7827,15 +7877,15 @@
- 
- /*
-  * screen_valid -  allocate screen buffers if size changed
-- *   If "clear" is TRUE: clear screen if it has been resized.
-+ *   If "doclear" is TRUE: clear screen if it has been resized.
-  *	Returns TRUE if there is a valid screen to write to.
-  *	Returns FALSE when starting up and screen not initialized yet.
-  */
-     int
--screen_valid(clear)
--    int	    clear;
-+screen_valid(doclear)
-+    int	    doclear;
- {
--    screenalloc(clear);	    /* allocate screen buffers if size changed */
-+    screenalloc(doclear);	   /* allocate screen buffers if size changed */
-     return (ScreenLines != NULL);
- }
- 
-@@ -7850,8 +7900,8 @@
-  * final size of the shell is needed.
-  */
-     void
--screenalloc(clear)
--    int	    clear;
-+screenalloc(doclear)
-+    int	    doclear;
- {
-     int		    new_row, old_row;
- #ifdef FEAT_GUI
-@@ -8047,7 +8097,7 @@
- 	     * (used when resizing the window at the "--more--" prompt or when
- 	     * executing an external command, for the GUI).
- 	     */
--	    if (!clear)
-+	    if (!doclear)
- 	    {
- 		(void)vim_memset(new_ScreenLines + new_row * Columns,
- 				      ' ', (size_t)Columns * sizeof(schar_T));
-@@ -8137,7 +8187,7 @@
-     screen_Columns = Columns;
- 
-     must_redraw = CLEAR;	/* need to clear the screen later */
--    if (clear)
-+    if (doclear)
- 	screenclear2();
- 
- #ifdef FEAT_GUI
-@@ -9018,7 +9068,7 @@
- 	    || (wp != NULL && wp->w_width != Columns)
- # endif
-        )
--	clip_clear_selection();
-+	clip_clear_selection(&clip_star);
-     else
- 	clip_scroll_selection(-line_count);
- #endif
-@@ -9239,7 +9289,7 @@
- 	    || (wp != NULL && wp->w_width != Columns)
- # endif
-        )
--	clip_clear_selection();
-+	clip_clear_selection(&clip_star);
-     else
- 	clip_scroll_selection(line_count);
- #endif
-@@ -9826,7 +9876,7 @@
-     buf_T	*buf;
- {
-     if (buf_spname(buf) != NULL)
--	STRCPY(NameBuff, buf_spname(buf));
-+	vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
-     else
- 	home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
-     trans_characters(NameBuff, MAXPATHL);
-diff -Naur vim73.orig/src/search.c vim73/src/search.c
---- vim73.orig/src/search.c	2010-07-14 14:49:41.000000000 +0000
-+++ vim73/src/search.c	2012-11-01 20:35:48.000000000 +0000
-@@ -1161,12 +1161,20 @@
- 	{
- 	    if (spats[RE_SEARCH].pat == NULL)	    /* no previous pattern */
- 	    {
--		EMSG(_(e_noprevre));
--		retval = 0;
--		goto end_do_search;
-+		pat = spats[RE_SUBST].pat;
-+		if (pat == NULL)
-+		{
-+		    EMSG(_(e_noprevre));
-+		    retval = 0;
-+		    goto end_do_search;
-+		}
-+		searchstr = pat;
-+	    }
-+	    else
-+	    {
-+		/* make search_regcomp() use spats[RE_SEARCH].pat */
-+		searchstr = (char_u *)"";
- 	    }
--	    /* make search_regcomp() use spats[RE_SEARCH].pat */
--	    searchstr = (char_u *)"";
- 	}
- 
- 	if (pat != NULL && *pat != NUL)	/* look for (new) offset */
-@@ -1538,8 +1546,9 @@
-     int			col;
-     char_u		*p;
-     int			len;
-+    int			stop = TRUE;
- #ifdef FEAT_MBYTE
--    static char_u	bytes[MB_MAXBYTES];
-+    static char_u	bytes[MB_MAXBYTES + 1];
-     static int		bytelen = 1;	/* >1 for multi-byte char */
- #endif
- 
-@@ -1572,6 +1581,12 @@
- 	t_cmd = last_t_cmd;
- 	c = lastc;
- 	/* For multi-byte re-use last bytes[] and bytelen. */
-+
-+	/* Force a move of at least one char, so ";" and "," will move the
-+	 * cursor, even if the cursor is right in front of char we are looking
-+	 * at. */
-+	if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1 && t_cmd)
-+	    stop = FALSE;
-     }
- 
-     if (dir == BACKWARD)
-@@ -1604,14 +1619,15 @@
- 		}
- 		if (bytelen == 1)
- 		{
--		    if (p[col] == c)
-+		    if (p[col] == c && stop)
- 			break;
- 		}
- 		else
- 		{
--		    if (vim_memcmp(p + col, bytes, bytelen) == 0)
-+		    if (vim_memcmp(p + col, bytes, bytelen) == 0 && stop)
- 			break;
- 		}
-+		stop = TRUE;
- 	    }
- 	}
- 	else
-@@ -1621,8 +1637,9 @@
- 	    {
- 		if ((col += dir) < 0 || col >= len)
- 		    return FAIL;
--		if (p[col] == c)
-+		if (p[col] == c && stop)
- 		    break;
-+		stop = TRUE;
- 	    }
- 	}
-     }
-@@ -2385,24 +2402,24 @@
-     {
- 	if (vim_strchr(p, ';') != NULL) /* there may be comments */
- 	{
--	    int instr = FALSE;	/* inside of string */
-+	    int in_str = FALSE;	/* inside of string */
- 
- 	    p = line;		/* scan from start */
- 	    while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
- 	    {
- 		if (*p == '"')
- 		{
--		    if (instr)
-+		    if (in_str)
- 		    {
- 			if (*(p - 1) != '\\') /* skip escaped quote */
--			    instr = FALSE;
-+			    in_str = FALSE;
- 		    }
- 		    else if (p == line || ((p - line) >= 2
- 				      /* skip #\" form */
- 				      && *(p - 1) != '\\' && *(p - 2) != '#'))
--			instr = TRUE;
-+			in_str = TRUE;
- 		}
--		else if (!instr && ((p - line) < 2
-+		else if (!in_str && ((p - line) < 2
- 				    || (*(p - 1) != '\\' && *(p - 2) != '#')))
- 		    break;	/* found! */
- 		++p;
-@@ -2484,8 +2501,8 @@
- 	    save_siso = p_siso;
- 	    /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
- 	     * stop displaying the "$". */
--	    if (dollar_vcol > 0 && dollar_vcol == curwin->w_virtcol)
--		dollar_vcol = 0;
-+	    if (dollar_vcol >= 0 && dollar_vcol == curwin->w_virtcol)
-+		dollar_vcol = -1;
- 	    ++curwin->w_virtcol;	/* do display ')' just before "$" */
- 	    update_screen(VALID);	/* show the new char first */
- 
-@@ -3403,7 +3420,7 @@
- 
- #ifdef FEAT_VISUAL
-     /*
--     * When visual area is bigger than one character: Extend it.
-+     * When the Visual area is bigger than one character: Extend it.
-      */
-     if (VIsual_active && !equalpos(start_pos, VIsual))
-     {
-@@ -3491,8 +3508,8 @@
- #endif
- 
-     /*
--     * If cursor started on blank, check if it is just before the start of the
--     * next sentence.
-+     * If the cursor started on a blank, check if it is just before the start
-+     * of the next sentence.
-      */
-     while (c = gchar_pos(&pos), vim_iswhite(c))	/* vim_iswhite() is a macro */
- 	incl(&pos);
-@@ -3541,7 +3558,7 @@
- #ifdef FEAT_VISUAL
-     if (VIsual_active)
-     {
--	/* avoid getting stuck with "is" on a single space before a sent. */
-+	/* Avoid getting stuck with "is" on a single space before a sentence. */
- 	if (equalpos(start_pos, curwin->w_cursor))
- 	    goto extend;
- 	if (*p_sel == 'e')
-@@ -3901,7 +3918,7 @@
- 	curwin->w_cursor = old_pos;
- 	goto theend;
-     }
--    spat = alloc(len + 29);
-+    spat = alloc(len + 31);
-     epat = alloc(len + 9);
-     if (spat == NULL || epat == NULL)
-     {
-@@ -3910,7 +3927,7 @@
- 	curwin->w_cursor = old_pos;
- 	goto theend;
-     }
--    sprintf((char *)spat, "<%.*s\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
-+    sprintf((char *)spat, "<%.*s\\>\\%%(\\s\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
-     sprintf((char *)epat, "</%.*s>\\c", len, p);
- 
-     r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
-@@ -4508,6 +4525,203 @@
- 
- #endif /* FEAT_TEXTOBJ */
- 
-+#if defined(FEAT_VISUAL) || defined(PROTO)
-+static int is_zerowidth __ARGS((char_u *pattern));
-+
-+/*
-+ * Find next search match under cursor, cursor at end.
-+ * Used while an operator is pending, and in Visual mode.
-+ * TODO: redo only works when used in operator pending mode
-+ */
-+    int
-+current_search(count, forward)
-+    long	count;
-+    int		forward;	/* move forward or backwards */
-+{
-+    pos_T	start_pos;	/* position before the pattern */
-+    pos_T	orig_pos;	/* position of the cursor at beginning */
-+    pos_T	pos;		/* position after the pattern */
-+    int		i;
-+    int		dir;
-+    int		result;		/* result of various function calls */
-+    char_u	old_p_ws = p_ws;
-+    int		flags = 0;
-+    pos_T	save_VIsual;
-+    int		zerowidth = FALSE;
-+
-+    /* wrapping should not occur */
-+    p_ws = FALSE;
-+
-+    /* Correct cursor when 'selection' is exclusive */
-+    if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
-+	dec_cursor();
-+
-+    if (VIsual_active)
-+    {
-+	orig_pos = curwin->w_cursor;
-+	save_VIsual = VIsual;
-+
-+	pos = curwin->w_cursor;
-+	start_pos = VIsual;
-+
-+	/* make sure, searching further will extend the match */
-+	if (VIsual_active)
-+	{
-+	    if (forward)
-+		incl(&pos);
-+	    else
-+		decl(&pos);
-+	}
-+    }
-+    else
-+	orig_pos = pos = start_pos = curwin->w_cursor;
-+
-+    /* Is the pattern is zero-width? */
-+    zerowidth = is_zerowidth(spats[last_idx].pat);
-+    if (zerowidth == -1)
-+	return FAIL;
-+
-+    /*
-+     * The trick is to first search backwards and then search forward again,
-+     * so that a match at the current cursor position will be correctly
-+     * captured.
-+     */
-+    for (i = 0; i < 2; i++)
-+    {
-+	if (forward)
-+	    dir = i;
-+	else
-+	    dir = !i;
-+
-+	flags = 0;
-+	if (!dir && !zerowidth)
-+	    flags = SEARCH_END;
-+
-+	result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
-+		spats[last_idx].pat, (long) (i ? count : 1),
-+		SEARCH_KEEP | flags, RE_SEARCH, 0, NULL);
-+
-+	/* First search may fail, but then start searching from the
-+	 * beginning of the file (cursor might be on the search match)
-+	 * except when Visual mode is active, so that extending the visual
-+	 * selection works. */
-+	if (!result && i) /* not found, abort */
-+	{
-+	    curwin->w_cursor = orig_pos;
-+	    if (VIsual_active)
-+		VIsual = save_VIsual;
-+	    p_ws = old_p_ws;
-+	    return FAIL;
-+	}
-+	else if (!i && !result)
-+	{
-+	    if (forward) /* try again from start of buffer */
-+	    {
-+		clearpos(&pos);
-+	    }
-+	    else /* try again from end of buffer */
-+	    {
-+		/* searching backwards, so set pos to last line and col */
-+		pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
-+		pos.col  = (colnr_T)STRLEN(
-+				ml_get(curwin->w_buffer->b_ml.ml_line_count));
-+	    }
-+	}
-+
-+    }
-+
-+    start_pos = pos;
-+    flags = forward ? SEARCH_END : 0;
-+
-+    /* move to match, except for zero-width matches, in which case, we are
-+     * already on the next match */
-+    if (!zerowidth)
-+	result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
-+	    spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
-+
-+    if (!VIsual_active)
-+	VIsual = start_pos;
-+
-+    p_ws = old_p_ws;
-+    curwin->w_cursor = pos;
-+    VIsual_active = TRUE;
-+    VIsual_mode = 'v';
-+
-+    if (VIsual_active)
-+    {
-+	redraw_curbuf_later(INVERTED);	/* update the inversion */
-+	if (*p_sel == 'e')
-+	{
-+	    /* Correction for exclusive selection depends on the direction. */
-+	    if (forward && ltoreq(VIsual, curwin->w_cursor))
-+		inc_cursor();
-+	    else if (!forward && ltoreq(curwin->w_cursor, VIsual))
-+		inc(&VIsual);
-+	}
-+
-+    }
-+
-+#ifdef FEAT_FOLDING
-+    if (fdo_flags & FDO_SEARCH && KeyTyped)
-+	foldOpenCursor();
-+#endif
-+
-+    may_start_select('c');
-+#ifdef FEAT_MOUSE
-+    setmouse();
-+#endif
-+#ifdef FEAT_CLIPBOARD
-+    /* Make sure the clipboard gets updated.  Needed because start and
-+     * end are still the same, and the selection needs to be owned */
-+    clip_star.vmode = NUL;
-+#endif
-+    redraw_curbuf_later(INVERTED);
-+    showmode();
-+
-+    return OK;
-+}
-+
-+/*
-+ * Check if the pattern is zero-width.
-+ * Returns TRUE, FALSE or -1 for failure.
-+ */
-+    static int
-+is_zerowidth(pattern)
-+    char_u	*pattern;
-+{
-+    regmmatch_T	regmatch;
-+    int		nmatched = 0;
-+    int		result = -1;
-+    pos_T	pos;
-+    int		save_called_emsg = called_emsg;
-+
-+    if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
-+					      SEARCH_KEEP, &regmatch) == FAIL)
-+	return -1;
-+
-+    /* move to match */
-+    clearpos(&pos);
-+    if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
-+				     SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
-+    {
-+	/* Zero-width pattern should match somewhere, then we can check if
-+	 * start and end are in the same position. */
-+	called_emsg = FALSE;
-+	nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
-+						  pos.lnum, (colnr_T)0, NULL);
-+
-+	if (!called_emsg)
-+	    result = (nmatched != 0
-+		&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
-+		&& regmatch.startpos[0].col == regmatch.endpos[0].col);
-+    }
-+
-+    called_emsg |= save_called_emsg;
-+    vim_free(regmatch.regprog);
-+    return result;
-+}
-+#endif /* FEAT_VISUAL */
-+
- #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
- 	|| defined(PROTO)
- /*
-@@ -4527,7 +4741,7 @@
- #if defined(FEAT_FIND_ID) || defined(PROTO)
- /*
-  * Find identifiers or defines in included files.
-- * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
-+ * If p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
-  */
-     void
- find_pattern_in_path(ptr, dir, len, whole, skip_comments,
-@@ -4573,9 +4787,6 @@
-     char_u	*already = NULL;
-     char_u	*startp = NULL;
-     char_u	*inc_opt = NULL;
--#ifdef RISCOS
--    int		previous_munging = __riscosify_control;
--#endif
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
-     win_T	*curwin_save = NULL;
- #endif
-@@ -4588,11 +4799,6 @@
-     if (file_line == NULL)
- 	return;
- 
--#ifdef RISCOS
--    /* UnixLib knows best how to munge c file names - turn munging back on. */
--    int __riscosify_control = 0;
--#endif
--
-     if (type != CHECK_PATH && type != FIND_DEFINE
- #ifdef FEAT_INS_EXPAND
- 	/* when CONT_SOL is set compare "ptr" with the beginning of the line
-@@ -4731,17 +4937,33 @@
- 			 * Isolate the file name.
- 			 * Include the surrounding "" or <> if present.
- 			 */
--			for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++)
--			    ;
--			for (i = 0; vim_isfilec(p[i]); i++)
--			    ;
-+			if (inc_opt != NULL
-+				   && strstr((char *)inc_opt, "\\zs") != NULL)
-+			{
-+			    /* pattern contains \zs, use the match */
-+			    p = incl_regmatch.startp[0];
-+			    i = (int)(incl_regmatch.endp[0]
-+						   - incl_regmatch.startp[0]);
-+			}
-+			else
-+			{
-+			    /* find the file name after the end of the match */
-+			    for (p = incl_regmatch.endp[0];
-+						  *p && !vim_isfilec(*p); p++)
-+				;
-+			    for (i = 0; vim_isfilec(p[i]); i++)
-+				;
-+			}
-+
- 			if (i == 0)
- 			{
- 			    /* Nothing found, use the rest of the line. */
- 			    p = incl_regmatch.endp[0];
- 			    i = (int)STRLEN(p);
- 			}
--			else
-+			/* Avoid checking before the start of the line, can
-+			 * happen if \zs appears in the regexp. */
-+			else if (p > line)
- 			{
- 			    if (p[-1] == '"' || p[-1] == '<')
- 			    {
-@@ -4892,7 +5114,7 @@
- #ifdef FEAT_COMMENTS
- 			if ((*line != '#' ||
- 				STRNCMP(skipwhite(line + 1), "define", 6) != 0)
--				&& get_leader_len(line, NULL, FALSE))
-+				&& get_leader_len(line, NULL, FALSE, TRUE))
- 			    matched = FALSE;
- 
- 			/*
-@@ -5075,9 +5297,7 @@
- 			if (win_split(0, 0) == FAIL)
- #endif
- 			    break;
--#ifdef FEAT_SCROLLBIND
--			curwin->w_p_scb = FALSE;
--#endif
-+			RESET_BINDING(curwin);
- 		    }
- 		    if (depth == -1)
- 		    {
-@@ -5134,7 +5354,7 @@
- 		    && !(compl_cont_status & CONT_SOL)
- #endif
- 		    && *startp != NUL
--		    && *(p = startp + 1) != NUL)
-+		    && *(p = startp + MB_PTR2LEN(startp)) != NUL)
- 		goto search_line;
- 	}
- 	line_breakcheck();
-@@ -5222,11 +5442,6 @@
-     vim_free(regmatch.regprog);
-     vim_free(incl_regmatch.regprog);
-     vim_free(def_regmatch.regprog);
--
--#ifdef RISCOS
--   /* Restore previous file munging state. */
--    __riscosify_control = previous_munging;
--#endif
- }
- 
-     static void
-diff -Naur vim73.orig/src/spell.c vim73/src/spell.c
---- vim73.orig/src/spell.c	2010-08-01 13:43:01.000000000 +0000
-+++ vim73/src/spell.c	2012-11-01 20:35:47.000000000 +0000
-@@ -303,10 +303,6 @@
-  *			    few bytes as possible, see offset2bytes())
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for lseek(), must be before vim.h */
--#endif
--
- #include "vim.h"
- 
- #if defined(FEAT_SPELL) || defined(PROTO)
-@@ -327,6 +323,16 @@
- typedef long idx_T;
- #endif
- 
-+#ifdef VMS
-+# define SPL_FNAME_TMPL  "%s_%s.spl"
-+# define SPL_FNAME_ADD   "_add."
-+# define SPL_FNAME_ASCII "_ascii."
-+#else
-+# define SPL_FNAME_TMPL  "%s.%s.spl"
-+# define SPL_FNAME_ADD   ".add."
-+# define SPL_FNAME_ASCII ".ascii."
-+#endif
-+
- /* Flags used for a word.  Only the lowest byte can be used, the region byte
-  * comes above it. */
- #define WF_REGION   0x01	/* region byte follows */
-@@ -2471,14 +2477,24 @@
- 	 * Find the first spell file for "lang" in 'runtimepath' and load it.
- 	 */
- 	vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
--					"spell/%s.%s.spl", lang, spell_enc());
-+#ifdef VMS
-+					"spell/%s_%s.spl",
-+#else
-+					"spell/%s.%s.spl",
-+#endif
-+							   lang, spell_enc());
- 	r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
- 
- 	if (r == FAIL && *sl.sl_lang != NUL)
- 	{
- 	    /* Try loading the ASCII version. */
- 	    vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
--						  "spell/%s.ascii.spl", lang);
-+#ifdef VMS
-+						  "spell/%s_ascii.spl",
-+#else
-+						  "spell/%s.ascii.spl",
-+#endif
-+									lang);
- 	    r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
- 
- #ifdef FEAT_AUTOCMD
-@@ -2496,7 +2512,12 @@
- 
-     if (r == FAIL)
-     {
--	smsg((char_u *)_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
-+	smsg((char_u *)
-+#ifdef VMS
-+	_("Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""),
-+#else
-+	_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
-+#endif
- 						     lang, spell_enc(), lang);
-     }
-     else if (sl.sl_slang != NULL)
-@@ -2530,7 +2551,7 @@
- int_wordlist_spl(fname)
-     char_u	    *fname;
- {
--    vim_snprintf((char *)fname, MAXPATHL, "%s.%s.spl",
-+    vim_snprintf((char *)fname, MAXPATHL, SPL_FNAME_TMPL,
- 						  int_wordlist, spell_enc());
- }
- 
-@@ -2785,8 +2806,8 @@
- 	if (lp->sl_fname == NULL)
- 	    goto endFAIL;
- 
--	/* Check for .add.spl. */
--	lp->sl_add = strstr((char *)gettail(fname), ".add.") != NULL;
-+	/* Check for .add.spl (_add.spl for VMS). */
-+	lp->sl_add = strstr((char *)gettail(fname), SPL_FNAME_ADD) != NULL;
-     }
-     else
- 	lp = old_lp;
-@@ -3613,7 +3634,7 @@
- 	}
- 
- 	/* Add all flags to "sl_compallflags". */
--	if (vim_strchr((char_u *)"+*[]/", c) == NULL
-+	if (vim_strchr((char_u *)"?*+[]/", c) == NULL
- 		&& !byte_in_str(slang->sl_compallflags, c))
- 	{
- 	    *ap++ = c;
-@@ -3643,7 +3664,7 @@
- 	/* Copy flag to "sl_comprules", unless we run into a wildcard. */
- 	if (crp != NULL)
- 	{
--	    if (c == '+' || c == '*')
-+	    if (c == '?' || c == '+' || c == '*')
- 	    {
- 		vim_free(slang->sl_comprules);
- 		slang->sl_comprules = NULL;
-@@ -3661,8 +3682,8 @@
- 	}
- 	else		    /* normal char, "[abc]" and '*' are copied as-is */
- 	{
--	    if (c == '+' || c == '~')
--		*pp++ = '\\';	    /* "a+" becomes "a\+" */
-+	    if (c == '?' || c == '+' || c == '~')
-+		*pp++ = '\\';	    /* "a?" becomes "a\?", "a+" becomes "a\+" */
- #ifdef FEAT_MBYTE
- 	    if (enc_utf8)
- 		pp += mb_char2bytes(c, pp);
-@@ -4679,7 +4700,7 @@
-     buf_T	*buf;
-     char_u	fname[MAXPATHL];
- 
--    /* Go through all buffers and handle 'spelllang'. */ //<VN>
-+    /* Go through all buffers and handle 'spelllang'. <VN> */
-     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
- 	ga_clear(&buf->b_s.b_langp);
- 
-@@ -4700,8 +4721,6 @@
- 	int_wordlist = NULL;
-     }
- 
--    init_spell_chartab();
--
-     vim_free(repl_to);
-     repl_to = NULL;
-     vim_free(repl_from);
-@@ -4930,6 +4949,8 @@
- 
-     sblock_T	*si_blocks;	/* memory blocks used */
-     long	si_blocks_cnt;	/* memory blocks allocated */
-+    int		si_did_emsg;	/* TRUE when ran out of memory */
-+
-     long	si_compress_cnt;    /* words to add before lowering
- 				       compression limit */
-     wordnode_T	*si_first_free; /* List of nodes that have been freed during
-@@ -4951,7 +4972,7 @@
-     char_u	*si_info;	/* info text chars or NULL  */
-     int		si_region_count; /* number of regions supported (1 when there
- 				    are no regions) */
--    char_u	si_region_name[16]; /* region names; used only if
-+    char_u	si_region_name[17]; /* region names; used only if
- 				     * si_region_count > 1) */
- 
-     garray_T	si_rep;		/* list of fromto_T entries from REP lines */
-@@ -4997,7 +5018,6 @@
- static int str_equal __ARGS((char_u *s1, char_u	*s2));
- static void add_fromto __ARGS((spellinfo_T *spin, garray_T *gap, char_u	*from, char_u *to));
- static int sal_to_bool __ARGS((char_u *s));
--static int has_non_ascii __ARGS((char_u *s));
- static void spell_free_aff __ARGS((afffile_T *aff));
- static int spell_read_dic __ARGS((spellinfo_T *spin, char_u *fname, afffile_T *affile));
- static int get_affix_flags __ARGS((afffile_T *affile, char_u *afflist));
-@@ -5027,7 +5047,7 @@
- static int offset2bytes __ARGS((int nr, char_u *buf));
- static int bytes2offset __ARGS((char_u **pp));
- static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
--static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int overwrite, int added_word));
-+static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int over_write, int added_word));
- static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
- static void init_spellfile __ARGS((void));
- 
-@@ -5456,21 +5476,25 @@
- 	    }
- 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
- 	    {
--		/* Concatenate this string to previously defined ones, using a
--		 * slash to separate them. */
--		l = (int)STRLEN(items[1]) + 1;
--		if (compflags != NULL)
--		    l += (int)STRLEN(compflags) + 1;
--		p = getroom(spin, l, FALSE);
--		if (p != NULL)
-+		/* Don't use the first rule if it is a number. */
-+		if (compflags != NULL || *skipdigits(items[1]) != NUL)
- 		{
-+		    /* Concatenate this string to previously defined ones,
-+		     * using a slash to separate them. */
-+		    l = (int)STRLEN(items[1]) + 1;
- 		    if (compflags != NULL)
-+			l += (int)STRLEN(compflags) + 1;
-+		    p = getroom(spin, l, FALSE);
-+		    if (p != NULL)
- 		    {
--			STRCPY(p, compflags);
--			STRCAT(p, "/");
-+			if (compflags != NULL)
-+			{
-+			    STRCPY(p, compflags);
-+			    STRCAT(p, "/");
-+			}
-+			STRCAT(p, items[1]);
-+			compflags = p;
- 		    }
--		    STRCAT(p, items[1]);
--		    compflags = p;
- 		}
- 	    }
- 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
-@@ -6270,7 +6294,7 @@
- 
-     for (p = compflags; *p != NUL; )
-     {
--	if (vim_strchr((char_u *)"/*+[]", *p) != NULL)
-+	if (vim_strchr((char_u *)"/?*+[]", *p) != NULL)
- 	    /* Copy non-flag characters directly. */
- 	    *tp++ = *p++;
- 	else
-@@ -6299,7 +6323,7 @@
- 		    {
- 			check_renumber(spin);
- 			id = spin->si_newcompID--;
--		    } while (vim_strchr((char_u *)"/+*[]\\-^", id) != NULL);
-+		    } while (vim_strchr((char_u *)"/?*+[]\\-^", id) != NULL);
- 		    ci->ci_newID = id;
- 		    hash_add(&aff->af_comp, ci->ci_key);
- 		}
-@@ -6458,23 +6482,6 @@
- }
- 
- /*
-- * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
-- * When "s" is NULL FALSE is returned.
-- */
--    static int
--has_non_ascii(s)
--    char_u	*s;
--{
--    char_u	*p;
--
--    if (s != NULL)
--	for (p = s; *p != NUL; ++p)
--	    if (*p >= 128)
--		return TRUE;
--    return FALSE;
--}
--
--/*
-  * Free the structure filled by spell_read_aff().
-  */
-     static void
-@@ -6930,7 +6937,7 @@
- 			    if (ae->ae_add == NULL)
- 				*newword = NUL;
- 			    else
--				STRCPY(newword, ae->ae_add);
-+				vim_strncpy(newword, ae->ae_add, MAXWLEN - 1);
- 			    p = word;
- 			    if (ae->ae_chop != NULL)
- 			    {
-@@ -6951,7 +6958,7 @@
- 			else
- 			{
- 			    /* suffix: chop/add at the end of the word */
--			    STRCPY(newword, word);
-+			    vim_strncpy(newword, word, MAXWLEN - 1);
- 			    if (ae->ae_chop != NULL)
- 			    {
- 				/* Remove chop string. */
-@@ -7343,10 +7350,21 @@
- 
-     if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
-     {
--	/* Allocate a block of memory. This is not freed until much later. */
--	bl = (sblock_T *)alloc_clear((unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
-+	if (len >= SBLOCKSIZE)
-+	    bl = NULL;
-+	else
-+	    /* Allocate a block of memory. It is not freed until much later. */
-+	    bl = (sblock_T *)alloc_clear(
-+				   (unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
- 	if (bl == NULL)
-+	{
-+	    if (!spin->si_did_emsg)
-+	    {
-+		EMSG(_("E845: Insufficient memory, word list will be incomplete"));
-+		spin->si_did_emsg = TRUE;
-+	    }
- 	    return NULL;
-+	}
- 	bl->sb_next = spin->si_blocks;
- 	spin->si_blocks = bl;
- 	bl->sb_used = 0;
-@@ -7361,6 +7379,7 @@
- 
- /*
-  * Make a copy of a string into memory allocated with getroom().
-+ * Returns NULL when out of memory.
-  */
-     static char_u *
- getroom_save(spin, s)
-@@ -7395,6 +7414,7 @@
- 
- /*
-  * Allocate the root of a word tree.
-+ * Returns NULL when out of memory.
-  */
-     static wordnode_T *
- wordtree_alloc(spin)
-@@ -7679,6 +7699,7 @@
- /*
-  * Get a wordnode_T, either from the list of previously freed nodes or
-  * allocate a new one.
-+ * Returns NULL when out of memory.
-  */
-     static wordnode_T *
- get_wordnode(spin)
-@@ -7696,7 +7717,8 @@
- 	--spin->si_free_count;
-     }
- #ifdef SPELL_PRINTTREE
--    n->wn_nr = ++spin->si_wordnode_nr;
-+    if (n != NULL)
-+	n->wn_nr = ++spin->si_wordnode_nr;
- #endif
-     return n;
- }
-@@ -8531,7 +8553,7 @@
-     }
- 
-     /* Expand all the remaining arguments (e.g., $VIMRUNTIME). */
--    if (get_arglist_exp(arg, &fcount, &fnames) == OK)
-+    if (get_arglist_exp(arg, &fcount, &fnames, FALSE) == OK)
-     {
- 	mkspell(fcount, fnames, ascii, eap->forceit, FALSE);
- 	FreeWild(fcount, fnames);
-@@ -8548,7 +8570,7 @@
-     spellinfo_T	*spin;
-     char_u	*wfname;
- {
--    char_u	fname[MAXPATHL];
-+    char_u	*fname = NULL;
-     int		len;
-     slang_T	*slang;
-     int		free_slang = FALSE;
-@@ -8612,13 +8634,17 @@
-      * Write the .sug file.
-      * Make the file name by changing ".spl" to ".sug".
-      */
--    STRCPY(fname, wfname);
-+    fname = alloc(MAXPATHL);
-+    if (fname == NULL)
-+	goto theend;
-+    vim_strncpy(fname, wfname, MAXPATHL - 1);
-     len = (int)STRLEN(fname);
-     fname[len - 2] = 'u';
-     fname[len - 1] = 'g';
-     sug_write(spin, fname);
- 
- theend:
-+    vim_free(fname);
-     if (free_slang)
- 	slang_free(slang);
-     free_blocks(spin->si_blocks);
-@@ -9057,15 +9083,15 @@
-  * and ".spl" is appended to make the output file name.
-  */
-     static void
--mkspell(fcount, fnames, ascii, overwrite, added_word)
-+mkspell(fcount, fnames, ascii, over_write, added_word)
-     int		fcount;
-     char_u	**fnames;
-     int		ascii;		    /* -ascii argument given */
--    int		overwrite;	    /* overwrite existing output file */
-+    int		over_write;	    /* overwrite existing output file */
-     int		added_word;	    /* invoked through "zg" */
- {
--    char_u	fname[MAXPATHL];
--    char_u	wfname[MAXPATHL];
-+    char_u	*fname = NULL;
-+    char_u	*wfname;
-     char_u	**innames;
-     int		incount;
-     afffile_T	*(afile[8]);
-@@ -9093,6 +9119,10 @@
-     innames = &fnames[1];
-     incount = fcount - 1;
- 
-+    wfname = alloc(MAXPATHL);
-+    if (wfname == NULL)
-+	return;
-+
-     if (fcount >= 1)
-     {
- 	len = (int)STRLEN(fnames[0]);
-@@ -9102,32 +9132,32 @@
- 	     * "path/en.latin1.add.spl". */
- 	    innames = &fnames[0];
- 	    incount = 1;
--	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.spl", fnames[0]);
-+	    vim_snprintf((char *)wfname, MAXPATHL, "%s.spl", fnames[0]);
- 	}
- 	else if (fcount == 1)
- 	{
- 	    /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
- 	    innames = &fnames[0];
- 	    incount = 1;
--	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
--			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
-+	    vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
-+		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
- 	}
- 	else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
- 	{
- 	    /* Name ends in ".spl", use as the file name. */
--	    vim_strncpy(wfname, fnames[0], sizeof(wfname) - 1);
-+	    vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
- 	}
- 	else
- 	    /* Name should be language, make the file name from it. */
--	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
--			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
-+	    vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
-+		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
- 
- 	/* Check for .ascii.spl. */
--	if (strstr((char *)gettail(wfname), ".ascii.") != NULL)
-+	if (strstr((char *)gettail(wfname), SPL_FNAME_ASCII) != NULL)
- 	    spin.si_ascii = TRUE;
- 
- 	/* Check for .add.spl. */
--	if (strstr((char *)gettail(wfname), ".add.") != NULL)
-+	if (strstr((char *)gettail(wfname), SPL_FNAME_ADD) != NULL)
- 	    spin.si_add = TRUE;
-     }
- 
-@@ -9141,17 +9171,21 @@
-     {
- 	/* Check for overwriting before doing things that may take a lot of
- 	 * time. */
--	if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
-+	if (!over_write && mch_stat((char *)wfname, &st) >= 0)
- 	{
- 	    EMSG(_(e_exists));
--	    return;
-+	    goto theend;
- 	}
- 	if (mch_isdir(wfname))
- 	{
- 	    EMSG2(_(e_isadir2), wfname);
--	    return;
-+	    goto theend;
- 	}
- 
-+	fname = alloc(MAXPATHL);
-+	if (fname == NULL)
-+	    goto theend;
-+
- 	/*
- 	 * Init the aff and dic pointers.
- 	 * Get the region names if there are more than 2 arguments.
-@@ -9167,7 +9201,7 @@
- 						|| innames[i][len - 3] != '_')
- 		{
- 		    EMSG2(_("E755: Invalid region in %s"), innames[i]);
--		    return;
-+		    goto theend;
- 		}
- 		spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
- 		spin.si_region_name[i * 2 + 1] =
-@@ -9184,7 +9218,7 @@
- 		|| spin.si_prefroot == NULL)
- 	{
- 	    free_blocks(spin.si_blocks);
--	    return;
-+	    goto theend;
- 	}
- 
- 	/* When not producing a .add.spl file clear the character table when
-@@ -9205,7 +9239,7 @@
- 	    spin.si_conv.vc_type = CONV_NONE;
- 	    spin.si_region = 1 << i;
- 
--	    vim_snprintf((char *)fname, sizeof(fname), "%s.aff", innames[i]);
-+	    vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
- 	    if (mch_stat((char *)fname, &st) >= 0)
- 	    {
- 		/* Read the .aff file.  Will init "spin->si_conv" based on the
-@@ -9216,7 +9250,7 @@
- 		else
- 		{
- 		    /* Read the .dic file and store the words in the trees. */
--		    vim_snprintf((char *)fname, sizeof(fname), "%s.dic",
-+		    vim_snprintf((char *)fname, MAXPATHL, "%s.dic",
- 								  innames[i]);
- 		    if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
- 			error = TRUE;
-@@ -9298,6 +9332,10 @@
- 	    spell_make_sugfile(&spin, wfname);
- 
-     }
-+
-+theend:
-+    vim_free(fname);
-+    vim_free(wfname);
- }
- 
- /*
-@@ -9350,7 +9388,7 @@
-     buf_T	*buf = NULL;
-     int		new_spf = FALSE;
-     char_u	*fname;
--    char_u	fnamebuf[MAXPATHL];
-+    char_u	*fnamebuf = NULL;
-     char_u	line[MAXWLEN * 2];
-     long	fpos, fpos_next = 0;
-     int		i;
-@@ -9380,6 +9418,9 @@
- 	    EMSG2(_(e_notset), "spellfile");
- 	    return;
- 	}
-+	fnamebuf = alloc(MAXPATHL);
-+	if (fnamebuf == NULL)
-+	    return;
- 
- 	for (spf = curwin->w_s->b_p_spf, i = 1; *spf != NUL; ++i)
- 	{
-@@ -9389,6 +9430,7 @@
- 	    if (*spf == NUL)
- 	    {
- 		EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
-+		vim_free(fnamebuf);
- 		return;
- 	    }
- 	}
-@@ -9400,6 +9442,7 @@
- 	if (buf != NULL && bufIsChanged(buf))
- 	{
- 	    EMSG(_(e_bufloaded));
-+	    vim_free(fnamebuf);
- 	    return;
- 	}
- 
-@@ -9494,6 +9537,7 @@
- 
- 	redraw_all_later(SOME_VALID);
-     }
-+    vim_free(fnamebuf);
- }
- 
- /*
-@@ -9502,7 +9546,7 @@
-     static void
- init_spellfile()
- {
--    char_u	buf[MAXPATHL];
-+    char_u	*buf;
-     int		l;
-     char_u	*fname;
-     char_u	*rtp;
-@@ -9512,6 +9556,10 @@
- 
-     if (*curwin->w_s->b_p_spl != NUL && curwin->w_s->b_langp.ga_len > 0)
-     {
-+	buf = alloc(MAXPATHL);
-+	if (buf == NULL)
-+	    return;
-+
- 	/* Find the end of the language name.  Exclude the region.  If there
- 	 * is a path separator remember the start of the tail. */
- 	for (lend = curwin->w_s->b_p_spl; *lend != NUL
-@@ -9530,7 +9578,8 @@
- 	    if (aspath)
- 		/* Use directory of an entry with path, e.g., for
- 		 * "/dir/lg.utf-8.spl" use "/dir". */
--		vim_strncpy(buf, curbuf->b_s.b_p_spl, lstart - curbuf->b_s.b_p_spl - 1);
-+		vim_strncpy(buf, curbuf->b_s.b_p_spl,
-+					    lstart - curbuf->b_s.b_p_spl - 1);
- 	    else
- 		/* Copy the path from 'runtimepath' to buf[]. */
- 		copy_option_part(&rtp, buf, MAXPATHL, ",");
-@@ -9539,13 +9588,14 @@
- 		/* Use the first language name from 'spelllang' and the
- 		 * encoding used in the first loaded .spl file. */
- 		if (aspath)
--		    vim_strncpy(buf, curbuf->b_s.b_p_spl, lend - curbuf->b_s.b_p_spl);
-+		    vim_strncpy(buf, curbuf->b_s.b_p_spl,
-+						  lend - curbuf->b_s.b_p_spl);
- 		else
- 		{
- 		    /* Create the "spell" directory if it doesn't exist yet. */
- 		    l = (int)STRLEN(buf);
- 		    vim_snprintf((char *)buf + l, MAXPATHL - l, "/spell");
--		    if (!filewritable(buf) != 2)
-+		    if (filewritable(buf) != 2)
- 			vim_mkdir(buf, 0755);
- 
- 		    l = (int)STRLEN(buf);
-@@ -9553,7 +9603,8 @@
- 				 "/%.*s", (int)(lend - lstart), lstart);
- 		}
- 		l = (int)STRLEN(buf);
--		fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)->lp_slang->sl_fname;
-+		fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)
-+							 ->lp_slang->sl_fname;
- 		vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
- 			fname != NULL
- 			  && strstr((char *)gettail(fname), ".ascii.") != NULL
-@@ -9563,6 +9614,8 @@
- 	    }
- 	    aspath = FALSE;
- 	}
-+
-+	vim_free(buf);
-     }
- }
- 
-@@ -9837,10 +9890,7 @@
- 	{
- 	    /* be quick for ASCII */
- 	    if (wp->w_s->b_spell_ismw[*p])
--	    {
- 		s = p + 1;		/* skip a mid-word character */
--		l = MB_BYTE2LEN(*s);
--	    }
- 	}
- 	else
- 	{
-@@ -9848,10 +9898,7 @@
- 	    if (c < 256 ? wp->w_s->b_spell_ismw[c]
- 		    : (wp->w_s->b_spell_ismw_mb != NULL
- 			   && vim_strchr(wp->w_s->b_spell_ismw_mb, c) != NULL))
--	    {
- 		s = p + l;
--		l = MB_BYTE2LEN(*s);
--	    }
- 	}
- 
- 	c = mb_ptr2char(s);
-@@ -10223,7 +10270,7 @@
- 
- 	    /* The suggested word may replace only part of the bad word, add
- 	     * the not replaced part. */
--	    STRCPY(wcopy, stp->st_word);
-+	    vim_strncpy(wcopy, stp->st_word, MAXWLEN);
- 	    if (sug.su_badlen > stp->st_orglen)
- 		vim_strncpy(wcopy + stp->st_wordlen,
- 					       sug.su_badptr + stp->st_orglen,
-@@ -11130,7 +11177,7 @@
- 	    c = *s++;
- 
- #ifdef FEAT_MBYTE
--	/* We only change ß to SS when we are certain latin1 is used.  It
-+	/* We only change 0xdf to SS when we are certain latin1 is used.  It
- 	 * would cause weird errors in other 8-bit encodings. */
- 	if (enc_latin1like && c == 0xdf)
- 	{
-@@ -13124,7 +13171,7 @@
- 	pbad = badsound2;
-     }
- 
--    if (lendiff > 0)
-+    if (lendiff > 0 && stp->st_wordlen + lendiff < MAXWLEN)
-     {
- 	/* Add part of the bad word to the good word, so that we soundfold
- 	 * what replaces the bad word. */
-@@ -13645,7 +13692,7 @@
- {
-     int		m1, m2;
- #ifdef FEAT_MBYTE
--    char_u	buf[MB_MAXBYTES];
-+    char_u	buf[MB_MAXBYTES + 1];
-     hashitem_T  *hi;
- 
-     if (c1 >= 256)
-@@ -13811,11 +13858,8 @@
- 		    su->su_sfmaxscore = cleanup_suggestions(gap,
- 				      su->su_sfmaxscore, SUG_CLEAN_COUNT(su));
- 		else
--		{
--		    i = su->su_maxscore;
- 		    su->su_maxscore = cleanup_suggestions(gap,
- 					su->su_maxscore, SUG_CLEAN_COUNT(su));
--		}
- 	    }
- 	}
-     }
-@@ -13840,7 +13884,7 @@
-     for (i = gap->ga_len - 1; i >= 0; --i)
-     {
- 	/* Need to append what follows to check for "the the". */
--	STRCPY(longword, stp[i].st_word);
-+	vim_strncpy(longword, stp[i].st_word, MAXWLEN);
- 	len = stp[i].st_wordlen;
- 	vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
- 							       MAXWLEN - len);
-@@ -14186,7 +14230,7 @@
- 	*t = NUL;
-     }
-     else
--	STRCPY(word, s);
-+	vim_strncpy(word, s, MAXWLEN - 1);
- 
-     smp = (salitem_T *)slang->sl_sal.ga_data;
- 
-@@ -14448,13 +14492,15 @@
-     int		p0 = -333;
-     int		c0;
-     int		did_white = FALSE;
-+    int		wordlen;
-+
- 
-     /*
-      * Convert the multi-byte string to a wide-character string.
-      * Remove accents, if wanted.  We actually remove all non-word characters.
-      * But keep white space.
-      */
--    n = 0;
-+    wordlen = 0;
-     for (s = inword; *s != NUL; )
-     {
- 	t = s;
-@@ -14475,12 +14521,12 @@
- 		    continue;
- 	    }
- 	}
--	word[n++] = c;
-+	word[wordlen++] = c;
-     }
--    word[n] = NUL;
-+    word[wordlen] = NUL;
- 
-     /*
--     * This comes from Aspell phonet.cpp.
-+     * This algorithm comes from Aspell phonet.cpp.
-      * Converted from C++ to C.  Added support for multi-byte chars.
-      * Changed to keep spaces.
-      */
-@@ -14665,7 +14711,7 @@
- 			    }
- 			if (k > k0)
- 			    mch_memmove(word + i + k0, word + i + k,
--				    sizeof(int) * (STRLEN(word + i + k) + 1));
-+				    sizeof(int) * (wordlen - (i + k) + 1));
- 
- 			/* new "actual letter" */
- 			c = word[i];
-@@ -14693,7 +14739,7 @@
- 			    if (c != NUL)
- 				wres[reslen++] = c;
- 			    mch_memmove(word, word + i + 1,
--				    sizeof(int) * (STRLEN(word + i + 1) + 1));
-+				       sizeof(int) * (wordlen - (i + 1) + 1));
- 			    i = 0;
- 			    z0 = 1;
- 			}
-diff -Naur vim73.orig/src/structs.h vim73/src/structs.h
---- vim73.orig/src/structs.h	2010-08-07 14:59:27.000000000 +0000
-+++ vim73/src/structs.h	2012-11-01 20:35:47.000000000 +0000
-@@ -378,6 +378,35 @@
- typedef long		    blocknr_T;
- 
- /*
-+ * mf_hashtab_T is a chained hashtable with blocknr_T key and arbitrary
-+ * structures as items.  This is an intrusive data structure: we require
-+ * that items begin with mf_hashitem_T which contains the key and linked
-+ * list pointers.  List of items in each bucket is doubly-linked.
-+ */
-+
-+typedef struct mf_hashitem_S mf_hashitem_T;
-+
-+struct mf_hashitem_S
-+{
-+    mf_hashitem_T   *mhi_next;
-+    mf_hashitem_T   *mhi_prev;
-+    blocknr_T	    mhi_key;
-+};
-+
-+#define MHT_INIT_SIZE   64
-+
-+typedef struct mf_hashtab_S
-+{
-+    long_u	    mht_mask;	    /* mask used for hash value (nr of items
-+				     * in array is "mht_mask" + 1) */
-+    long_u	    mht_count;	    /* nr of items inserted into hashtable */
-+    mf_hashitem_T   **mht_buckets;  /* points to mht_small_buckets or
-+				     *dynamically allocated array */
-+    mf_hashitem_T   *mht_small_buckets[MHT_INIT_SIZE];   /* initial buckets */
-+    char	    mht_fixed;	    /* non-zero value forbids growth */
-+} mf_hashtab_T;
-+
-+/*
-  * for each (previously) used block in the memfile there is one block header.
-  *
-  * The block may be linked in the used list OR in the free list.
-@@ -394,11 +423,11 @@
- 
- struct block_hdr
- {
-+    mf_hashitem_T bh_hashitem;      /* header for hash table and key */
-+#define bh_bnum bh_hashitem.mhi_key /* block number, part of bh_hashitem */
-+
-     bhdr_T	*bh_next;	    /* next block_hdr in free or used list */
-     bhdr_T	*bh_prev;	    /* previous block_hdr in used list */
--    bhdr_T	*bh_hash_next;	    /* next block_hdr in hash list */
--    bhdr_T	*bh_hash_prev;	    /* previous block_hdr in hash list */
--    blocknr_T	bh_bnum;	    /* block number */
-     char_u	*bh_data;	    /* pointer to memory (for used block) */
-     int		bh_page_count;	    /* number of pages in this block */
- 
-@@ -417,9 +446,9 @@
- 
- struct nr_trans
- {
--    NR_TRANS	*nt_next;		/* next nr_trans in hash list */
--    NR_TRANS	*nt_prev;		/* previous nr_trans in hash list */
--    blocknr_T	nt_old_bnum;		/* old, negative, number */
-+    mf_hashitem_T nt_hashitem;		/* header for hash table and key */
-+#define nt_old_bnum nt_hashitem.mhi_key	/* old, negative, number */
-+
-     blocknr_T	nt_new_bnum;		/* new, positive, number */
- };
- 
-@@ -499,12 +528,6 @@
- 
- typedef struct file_buffer buf_T;  /* forward declaration */
- 
--/*
-- * Simplistic hashing scheme to quickly locate the blocks in the used list.
-- * 64 blocks are found directly (64 * 4K = 256K, most files are smaller).
-- */
--#define MEMHASHSIZE	64
--#define MEMHASH(nr)	((nr) & (MEMHASHSIZE - 1))
- #define MF_SEED_LEN	8
- 
- struct memfile
-@@ -517,8 +540,8 @@
-     bhdr_T	*mf_used_last;		/* lru block_hdr in used list */
-     unsigned	mf_used_count;		/* number of pages in used list */
-     unsigned	mf_used_count_max;	/* maximum number of pages in memory */
--    bhdr_T	*mf_hash[MEMHASHSIZE];	/* array of hash lists */
--    NR_TRANS	*mf_trans[MEMHASHSIZE];	/* array of trans lists */
-+    mf_hashtab_T mf_hash;		/* hash lists */
-+    mf_hashtab_T mf_trans;		/* trans lists */
-     blocknr_T	mf_blocknr_max;		/* highest positive block number + 1*/
-     blocknr_T	mf_blocknr_min;		/* lowest negative block number - 1 */
-     blocknr_T	mf_neg_count;		/* number of negative blocks numbers */
-@@ -979,9 +1002,10 @@
- struct mapblock
- {
-     mapblock_T	*m_next;	/* next mapblock in list */
--    char_u	*m_keys;	/* mapped from */
-+    char_u	*m_keys;	/* mapped from, lhs */
-     int		m_keylen;	/* strlen(m_keys) */
--    char_u	*m_str;		/* mapped to */
-+    char_u	*m_str;		/* mapped to, rhs */
-+    char_u	*m_orig_str;	/* rhs as entered by the user */
-     int		m_mode;		/* valid mode */
-     int		m_noremap;	/* if non-zero no re-mapping for m_str */
-     char	m_silent;	/* <silent> used, don't echo commands */
-@@ -1082,6 +1106,11 @@
- #define VAR_DICT    5	/* "v_dict" is used */
- #define VAR_FLOAT   6	/* "v_float" is used */
- 
-+/* Values for "dv_scope". */
-+#define VAR_SCOPE     1	/* a:, v:, s:, etc. scope dictionaries */
-+#define VAR_DEF_SCOPE 2	/* l:, g: scope dictionaries: here funcrefs are not
-+			   allowed to mask existing functions */
-+
- /* Values for "v_lock". */
- #define VAR_LOCKED  1	/* locked with lock(), can use unlock() */
- #define VAR_FIXED   2	/* locked forever */
-@@ -1157,6 +1186,7 @@
-     int		dv_copyID;	/* ID used by deepcopy() */
-     dict_T	*dv_copydict;	/* copied dict used by deepcopy() */
-     char	dv_lock;	/* zero, VAR_LOCKED, VAR_FIXED */
-+    char	dv_scope;	/* zero, VAR_SCOPE, VAR_DEF_SCOPE */
-     dict_T	*dv_used_next;	/* next dict in used dicts list */
-     dict_T	*dv_used_prev;	/* previous dict in used dicts list */
- };
-@@ -1177,6 +1207,10 @@
- typedef struct qf_info_S qf_info_T;
- #endif
- 
-+/*
-+ * These are items normally related to a buffer.  But when using ":ownsyntax"
-+ * a window may have its own instance.
-+ */
- typedef struct {
- #ifdef FEAT_SYN_HL
-     hashtab_T	b_keywtab;		/* syntax keywords hash table */
-@@ -1266,6 +1300,10 @@
-     int		b_nwindows;	/* nr of windows open on this buffer */
- 
-     int		b_flags;	/* various BF_ flags */
-+#ifdef FEAT_AUTOCMD
-+    int		b_closing;	/* buffer is being closed, don't let
-+				   autocommands close it too. */
-+#endif
- 
-     /*
-      * b_ffname has the full path of the file (NULL for no name).
-@@ -1506,9 +1544,6 @@
-     int		b_p_ml_nobin;	/* b_p_ml saved for binary mode */
-     int		b_p_ma;		/* 'modifiable' */
-     char_u	*b_p_nf;	/* 'nrformats' */
--#ifdef FEAT_OSFILETYPE
--    char_u	*b_p_oft;	/* 'osfiletype' */
--#endif
-     int		b_p_pi;		/* 'preserveindent' */
- #ifdef FEAT_TEXTOBJ
-     char_u	*b_p_qe;	/* 'quoteescape' */
-@@ -1563,6 +1598,9 @@
- 
-     /* end of buffer options */
- 
-+    linenr_T	b_no_eol_lnum;	/* non-zero lnum when last line of next binary
-+				 * write should not have an end-of-line */
-+
-     int		b_start_eol;	/* last line had eol when it was read */
-     int		b_start_ffc;	/* first char of 'ff' when edit started */
- #ifdef FEAT_MBYTE
-@@ -1822,13 +1860,17 @@
- 				       often, keep it the first item!) */
- 
- #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
--    synblock_T	*w_s;
-+    synblock_T	*w_s;		    /* for :ownsyntax */
- #endif
- 
- #ifdef FEAT_WINDOWS
-     win_T	*w_prev;	    /* link to previous window */
-     win_T	*w_next;	    /* link to next window */
- #endif
-+#ifdef FEAT_AUTOCMD
-+    int		w_closing;	    /* window is being closed, don't let
-+				       autocommands close it too. */
-+#endif
- 
-     frame_T	*w_frame;	    /* frame containing this window */
- 
-@@ -2339,11 +2381,6 @@
-     MenuHandle	menu_handle;
-     MenuHandle	submenu_handle;
- #endif
--#ifdef RISCOS
--    int		*id;		    /* Not used, but gui.c needs it */
--    int		greyed_out;	    /* Flag */
--    int		hidden;
--#endif
- #ifdef FEAT_GUI_PHOTON
-     PtWidget_t	*id;
-     PtWidget_t	*submenu_id;
-diff -Naur vim73.orig/src/syntax.c vim73/src/syntax.c
---- vim73.orig/src/syntax.c	2010-08-08 13:17:03.000000000 +0000
-+++ vim73/src/syntax.c	2012-11-01 20:35:48.000000000 +0000
-@@ -68,6 +68,8 @@
- 
- #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
- 
-+#define MAX_HL_ID       20000	/* maximum value for a highlight ID. */
-+
- #ifdef FEAT_CMDL_COMPL
- /* Flags to indicate an additional string for highlight name completion. */
- static int include_none = 0;	/* when 1 include "None" */
-@@ -103,7 +105,7 @@
- # ifdef FEAT_XFONTSET
- static GuiFontset fontset_name2handle __ARGS((char_u *name, int fixed_width));
- # endif
--static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip));
-+static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font));
- #endif
- 
- /*
-@@ -219,16 +221,19 @@
- 
- /*
-  * Syntax group IDs have different types:
-- *     0 -  9999  normal syntax groups
-- * 10000 - 14999  ALLBUT indicator (current_syn_inc_tag added)
-- * 15000 - 19999  TOP indicator (current_syn_inc_tag added)
-- * 20000 - 24999  CONTAINED indicator (current_syn_inc_tag added)
-- * >= 25000	  cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
-- */
--#define SYNID_ALLBUT	10000	    /* syntax group ID for contains=ALLBUT */
--#define SYNID_TOP	15000	    /* syntax group ID for contains=TOP */
--#define SYNID_CONTAINED	20000	    /* syntax group ID for contains=CONTAINED */
--#define SYNID_CLUSTER	25000	    /* first syntax group ID for clusters */
-+ *     0 - 19999  normal syntax groups
-+ * 20000 - 20999  ALLBUT indicator (current_syn_inc_tag added)
-+ * 21000 - 21999  TOP indicator (current_syn_inc_tag added)
-+ * 22000 - 22999  CONTAINED indicator (current_syn_inc_tag added)
-+ * 23000 - 32767  cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
-+ */
-+#define SYNID_ALLBUT	MAX_HL_ID   /* syntax group ID for contains=ALLBUT */
-+#define SYNID_TOP	21000	    /* syntax group ID for contains=TOP */
-+#define SYNID_CONTAINED	22000	    /* syntax group ID for contains=CONTAINED */
-+#define SYNID_CLUSTER	23000	    /* first syntax group ID for clusters */
-+
-+#define MAX_SYN_INC_TAG	999	    /* maximum before the above overflow */
-+#define MAX_CLUSTER_ID  (32767 - SYNID_CLUSTER)
- 
- /*
-  * Annoying Hack(TM):  ":syn include" needs this pointer to pass to
-@@ -554,7 +559,13 @@
-     if (INVALID_STATE(&current_state))
-     {
- 	syn_sync(wp, lnum, last_valid);
--	first_stored = current_lnum + syn_block->b_syn_sync_minlines;
-+	if (current_lnum == 1)
-+	    /* First line is always valid, no matter "minlines". */
-+	    first_stored = 1;
-+	else
-+	    /* Need to parse "minlines" lines before state can be considered
-+	     * valid to store. */
-+	    first_stored = current_lnum + syn_block->b_syn_sync_minlines;
-     }
-     else
- 	first_stored = current_lnum;
-@@ -985,7 +996,10 @@
-      * previous line and regions that have "keepend".
-      */
-     if (current_state.ga_len > 0)
-+    {
- 	syn_update_ends(TRUE);
-+	check_state_ends();
-+    }
- 
-     next_match_idx = -1;
-     ++current_line_id;
-@@ -1059,7 +1073,6 @@
- 	}
-     }
-     check_keepend();
--    check_state_ends();
- }
- 
- /****************************************
-@@ -2528,7 +2541,7 @@
- check_state_ends()
- {
-     stateitem_T	*cur_si;
--    int		had_extend = FALSE;
-+    int		had_extend;
- 
-     cur_si = &CUR_STATE(current_state.ga_len - 1);
-     for (;;)
-@@ -2561,6 +2574,9 @@
- #endif
- 		update_si_attr(current_state.ga_len - 1);
- 
-+		/* nextgroup= should not match in the end pattern */
-+		current_next_list = NULL;
-+
- 		/* what matches next may be different now, clear it */
- 		next_match_idx = 0;
- 		next_match_col = MAXCOL;
-@@ -2578,8 +2594,7 @@
- 
- 		/* When the ended item has "extend", another item with
- 		 * "keepend" now needs to check for its end. */
--		 if (cur_si->si_flags & HL_EXTEND)
--		     had_extend = TRUE;
-+		 had_extend = (cur_si->si_flags & HL_EXTEND);
- 
- 		pop_current_state();
- 
-@@ -3442,6 +3457,9 @@
-     /* free the stored states */
-     syn_stack_free_all(block);
-     invalidate_current_state();
-+
-+    /* Reset the counter for ":syn include" */
-+    running_syn_inc_tag = 0;
- }
- 
- /*
-@@ -3988,17 +4006,17 @@
- }
- 
-     static void
--syn_list_flags(nl, flags, attr)
--    struct name_list	*nl;
-+syn_list_flags(nlist, flags, attr)
-+    struct name_list	*nlist;
-     int			flags;
-     int			attr;
- {
-     int		i;
- 
--    for (i = 0; nl[i].flag != 0; ++i)
--	if (flags & nl[i].flag)
-+    for (i = 0; nlist[i].flag != 0; ++i)
-+	if (flags & nlist[i].flag)
- 	{
--	    msg_puts_attr((char_u *)nl[i].name, attr);
-+	    msg_puts_attr((char_u *)nlist[i].name, attr);
- 	    msg_putchar(' ');
- 	}
- }
-@@ -4537,6 +4555,13 @@
- 		;
- #endif
- 	    }
-+#ifdef FEAT_CONCEAL
-+	    if (!vim_isprintc_strict(*conceal_char))
-+	    {
-+		EMSG(_("E844: invalid cchar value"));
-+		return NULL;
-+	    }
-+#endif
- 	    arg = skipwhite(arg + 7);
- 	}
- 	else
-@@ -4654,6 +4679,8 @@
- 	    return;
- 	}
- 	sgl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
-+	if (sgl_id == 0)
-+	    return;
- 	/* separate_nextcmd() and expand_filename() depend on this */
- 	eap->arg = rest;
-     }
-@@ -4682,6 +4709,11 @@
-      * Save and restore the existing top-level grouplist id and ":syn
-      * include" tag around the actual inclusion.
-      */
-+    if (running_syn_inc_tag >= MAX_SYN_INC_TAG)
-+    {
-+	EMSG((char_u *)_("E847: Too many syntax includes"));
-+	return;
-+    }
-     prev_syn_inc_tag = current_syn_inc_tag;
-     current_syn_inc_tag = ++running_syn_inc_tag;
-     prev_toplvl_grp = curwin->w_s->b_syn_topgrp;
-@@ -4705,7 +4737,7 @@
-     char_u	*group_name_end;
-     int		syn_id;
-     char_u	*rest;
--    char_u	*keyword_copy;
-+    char_u	*keyword_copy = NULL;
-     char_u	*p;
-     char_u	*kw;
-     syn_opt_arg_T syn_opt_arg;
-@@ -4717,9 +4749,9 @@
-     if (rest != NULL)
-     {
- 	syn_id = syn_check_group(arg, (int)(group_name_end - arg));
--
--	/* allocate a buffer, for removing the backslashes in the keyword */
--	keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
-+	if (syn_id != 0)
-+	    /* allocate a buffer, for removing backslashes in the keyword */
-+	    keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
- 	if (keyword_copy != NULL)
- 	{
- 	    syn_opt_arg.flags = 0;
-@@ -5126,7 +5158,8 @@
- 			    (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END;
- 		    SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags;
- 		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id;
--		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag = current_syn_inc_tag;
-+		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag =
-+							  current_syn_inc_tag;
- 		    SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id =
- 							ppp->pp_matchgroup_id;
- #ifdef FEAT_CONCEAL
-@@ -5419,6 +5452,14 @@
- 	curwin->w_s->b_syn_clusters.ga_growsize = 10;
-     }
- 
-+    len = curwin->w_s->b_syn_clusters.ga_len;
-+    if (len >= MAX_CLUSTER_ID)
-+    {
-+	EMSG((char_u *)_("E848: Too many syntax clusters"));
-+	vim_free(name);
-+	return 0;
-+    }
-+
-     /*
-      * Make room for at least one other cluster entry.
-      */
-@@ -5427,7 +5468,6 @@
- 	vim_free(name);
- 	return 0;
-     }
--    len = curwin->w_s->b_syn_clusters.ga_len;
- 
-     vim_memset(&(SYN_CLSTR(curwin->w_s)[len]), 0, sizeof(syn_cluster_T));
-     SYN_CLSTR(curwin->w_s)[len].scl_name = name;
-@@ -5469,8 +5509,10 @@
- 
-     if (rest != NULL)
-     {
--	scl_id = syn_check_cluster(arg, (int)(group_name_end - arg))
--							      - SYNID_CLUSTER;
-+	scl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
-+	if (scl_id == 0)
-+	    return;
-+	scl_id -= SYNID_CLUSTER;
- 
- 	for (;;)
- 	{
-@@ -5509,7 +5551,7 @@
- 	if (got_clstr)
- 	{
- 	    redraw_curbuf_later(SOME_VALID);
--	    syn_stack_free_all(curwin->w_s);	/* Need to recompute all syntax. */
-+	    syn_stack_free_all(curwin->w_s);	/* Need to recompute all. */
- 	}
-     }
- 
-@@ -6431,7 +6473,6 @@
- 
- #endif /* FEAT_SYN_HL */
- 
--
- /**************************************
-  *  Highlighting stuff		      *
-  **************************************/
-@@ -6475,8 +6516,6 @@
- 	     "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
- #endif
- #ifdef FEAT_INS_EXPAND
--	CENT("PmenuThumb cterm=reverse",
--	     "PmenuThumb cterm=reverse gui=reverse"),
- 	CENT("PmenuSbar ctermbg=Grey",
- 	     "PmenuSbar ctermbg=Grey guibg=Grey"),
- #endif
-@@ -6499,6 +6538,8 @@
- 	     "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
- 	CENT("LineNr term=underline ctermfg=Brown",
- 	     "LineNr term=underline ctermfg=Brown guifg=Brown"),
-+	CENT("CursorLineNr term=bold ctermfg=Brown",
-+	     "CursorLineNr term=bold ctermfg=Brown gui=bold guifg=Brown"),
- 	CENT("MoreMsg term=bold ctermfg=DarkGreen",
- 	     "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
- 	CENT("Question term=standout ctermfg=DarkGreen",
-@@ -6516,10 +6557,12 @@
- 	     "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
- #endif
- #ifdef FEAT_INS_EXPAND
--	CENT("Pmenu ctermbg=LightMagenta",
--	     "Pmenu ctermbg=LightMagenta guibg=LightMagenta"),
--	CENT("PmenuSel ctermbg=LightGrey",
--	     "PmenuSel ctermbg=LightGrey guibg=Grey"),
-+	CENT("PmenuThumb ctermbg=Black",
-+	     "PmenuThumb ctermbg=Black guibg=Black"),
-+	CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
-+	     "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
-+	CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
-+	     "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
- #endif
- 	CENT("SpecialKey term=bold ctermfg=DarkBlue",
- 	     "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
-@@ -6585,6 +6628,8 @@
- 	     "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
- 	CENT("LineNr term=underline ctermfg=Yellow",
- 	     "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
-+	CENT("CursorLineNr term=bold ctermfg=Yellow",
-+	     "CursorLineNr term=bold ctermfg=Yellow gui=bold guifg=Yellow"),
- 	CENT("MoreMsg term=bold ctermfg=LightGreen",
- 	     "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
- 	CENT("Question term=standout ctermfg=LightGreen",
-@@ -6604,10 +6649,12 @@
- 	     "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
- #endif
- #ifdef FEAT_INS_EXPAND
--	CENT("Pmenu ctermbg=Magenta",
--	     "Pmenu ctermbg=Magenta guibg=Magenta"),
--	CENT("PmenuSel ctermbg=DarkGrey",
--	     "PmenuSel ctermbg=DarkGrey guibg=DarkGrey"),
-+	CENT("PmenuThumb ctermbg=White",
-+	     "PmenuThumb ctermbg=White guibg=White"),
-+	CENT("Pmenu ctermbg=Magenta ctermfg=Black",
-+	     "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
-+	CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
-+	     "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
- #endif
- 	CENT("Title term=bold ctermfg=LightMagenta",
- 	     "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
-@@ -7212,14 +7259,13 @@
- 		HL_TABLE()[idx].sg_fontset = NOFONTSET;
- # endif
- 		hl_do_font(idx, arg, is_normal_group, is_menu_group,
--							    is_tooltip_group);
-+						     is_tooltip_group, FALSE);
- 
- # ifdef FEAT_XFONTSET
- 		if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
- 		{
--		    /* New fontset was accepted. Free the old one, if there was
--		     * one.
--		     */
-+		    /* New fontset was accepted. Free the old one, if there
-+		     * was one. */
- 		    gui_mch_free_fontset(temp_sg_fontset);
- 		    vim_free(HL_TABLE()[idx].sg_font_name);
- 		    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
-@@ -7230,8 +7276,7 @@
- 		if (HL_TABLE()[idx].sg_font != NOFONT)
- 		{
- 		    /* New font was accepted. Free the old one, if there was
--		     * one.
--		     */
-+		     * one. */
- 		    gui_mch_free_font(temp_sg_font);
- 		    vim_free(HL_TABLE()[idx].sg_font_name);
- 		    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
-@@ -7600,10 +7645,10 @@
- 		/*
- 		 * Copy characters from arg[] to buf[], translating <> codes.
- 		 */
--		for (p = arg, off = 0; off < 100 && *p; )
-+		for (p = arg, off = 0; off < 100 - 6 && *p; )
- 		{
- 		    len = trans_special(&p, buf + off, FALSE);
--		    if (len)		    /* recognized special char */
-+		    if (len > 0)	    /* recognized special char */
- 			off += len;
- 		    else		    /* copy as normal char */
- 			buf[off++] = *p++;
-@@ -8017,12 +8062,13 @@
-  * Get the font or fontset for one highlight group.
-  */
-     static void
--hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
-+hl_do_font(idx, arg, do_normal, do_menu, do_tooltip, free_font)
-     int		idx;
-     char_u	*arg;
-     int		do_normal;		/* set normal font */
-     int		do_menu UNUSED;		/* set menu font */
-     int		do_tooltip UNUSED;	/* set tooltip font */
-+    int		free_font;		/* free current font/fontset */
- {
- # ifdef FEAT_XFONTSET
-     /* If 'guifontset' is not empty, first try using the name as a
-@@ -8036,6 +8082,8 @@
- 	|| do_tooltip
- #  endif
- 	    )
-+	if (free_font)
-+	    gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
- 	HL_TABLE()[idx].sg_fontset = fontset_name2handle(arg, 0
- #  ifdef FONTSET_ALWAYS
- 		|| do_menu
-@@ -8046,8 +8094,8 @@
- 		);
-     if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
-     {
--	/* If it worked and it's the Normal group, use it as the
--	 * normal fontset.  Same for the Menu group. */
-+	/* If it worked and it's the Normal group, use it as the normal
-+	 * fontset.  Same for the Menu group. */
- 	if (do_normal)
- 	    gui_init_font(arg, TRUE);
- #   if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
-@@ -8079,6 +8127,8 @@
-     else
- # endif
-     {
-+	if (free_font)
-+	    gui_mch_free_font(HL_TABLE()[idx].sg_font);
- 	HL_TABLE()[idx].sg_font = font_name2handle(arg);
- 	/* If it worked and it's the Normal group, use it as the
- 	 * normal font.  Same for the Menu group. */
-@@ -8545,8 +8595,8 @@
- 		if (iarg & hl_attr_table[i])
- 		{
- 		    if (buf[0] != NUL)
--			STRCAT(buf, ",");
--		    STRCAT(buf, hl_name_table[i]);
-+			vim_strcat(buf, (char_u *)",", 100);
-+		    vim_strcat(buf, (char_u *)hl_name_table[i], 100);
- 		    iarg &= ~hl_attr_table[i];	    /* don't want "inverse" */
- 		}
- 	    }
-@@ -8965,6 +9015,13 @@
- 	highlight_ga.ga_growsize = 10;
-     }
- 
-+    if (highlight_ga.ga_len >= MAX_HL_ID)
-+    {
-+	EMSG(_("E849: Too many highlight and syntax groups"));
-+	vim_free(name);
-+	return 0;
-+    }
-+
-     /*
-      * Make room for at least one other syntax_highlight entry.
-      */
-@@ -9108,7 +9165,7 @@
-     if (HL_TABLE()[idx].sg_font_name != NULL)
-     {
- 	hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
--		   do_tooltip);
-+							    do_tooltip, TRUE);
- 	didit = TRUE;
-     }
-     if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
-@@ -9422,7 +9479,7 @@
-     int	    cnt;
-     int	    attr;
- {
--    msg_puts_attr((char_u *)("N \bI \b!  \b" + cnt / 11), attr);
-+    msg_puts_attr((char_u *)&("N \bI \b!  \b"[cnt / 11]), attr);
-     msg_clr_eos();
-     out_flush();
-     ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
-diff -Naur vim73.orig/src/tag.c vim73/src/tag.c
---- vim73.orig/src/tag.c	2010-08-10 07:25:22.000000000 +0000
-+++ vim73/src/tag.c	2012-11-01 20:35:48.000000000 +0000
-@@ -11,10 +11,6 @@
-  * Code to handle tags and the tag stack
-  */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for lseek(), must be before vim.h */
--#endif
--
- #include "vim.h"
- 
- /*
-@@ -208,7 +204,7 @@
-     else
-     {
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--	if (g_do_tagpreview)
-+	if (g_do_tagpreview != 0)
- 	    use_tagstack = FALSE;
- 	else
- #endif
-@@ -226,7 +222,7 @@
- 		    ))
- 	{
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--	    if (g_do_tagpreview)
-+	    if (g_do_tagpreview != 0)
- 	    {
- 		if (ptag_entry.tagname != NULL
- 			&& STRCMP(ptag_entry.tagname, tag) == 0)
-@@ -282,7 +278,7 @@
- 	{
- 	    if (
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--		    g_do_tagpreview ? ptag_entry.tagname == NULL :
-+		    g_do_tagpreview != 0 ? ptag_entry.tagname == NULL :
- #endif
- 		    tagstacklen == 0)
- 	    {
-@@ -365,7 +361,7 @@
- 	       )
- 	    {
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--		if (g_do_tagpreview)
-+		if (g_do_tagpreview != 0)
- 		{
- 		    cur_match = ptag_entry.cur_match;
- 		    cur_fnum = ptag_entry.cur_fnum;
-@@ -403,7 +399,7 @@
- 		prevtagstackidx = tagstackidx;
- 
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--		if (g_do_tagpreview)
-+		if (g_do_tagpreview != 0)
- 		{
- 		    cur_match = ptag_entry.cur_match;
- 		    cur_fnum = ptag_entry.cur_fnum;
-@@ -441,7 +437,7 @@
- 	}
- 
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--	if (g_do_tagpreview)
-+	if (g_do_tagpreview != 0)
- 	{
- 	    if (type != DT_SELECT && type != DT_JUMP)
- 	    {
-@@ -496,7 +492,7 @@
- 	if (use_tagstack)
- 	    name = tagstack[tagstackidx].tagname;
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--	else if (g_do_tagpreview)
-+	else if (g_do_tagpreview != 0)
- 	    name = ptag_entry.tagname;
- #endif
- 	else
-@@ -624,7 +620,7 @@
- 		    parse_match(matches[i], &tagp);
- 		    if (!new_tag && (
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--				(g_do_tagpreview
-+				(g_do_tagpreview != 0
- 				 && i == ptag_entry.cur_match) ||
- #endif
- 				(use_tagstack
-@@ -779,17 +775,25 @@
- 	    {
- 		list_T	*list;
- 		char_u	tag_name[128 + 1];
--		char_u	fname[MAXPATHL + 1];
--		char_u	cmd[CMDBUFFSIZE + 1];
-+		char_u	*fname;
-+		char_u	*cmd;
- 
- 		/*
- 		 * Add the matching tags to the location list for the current
- 		 * window.
- 		 */
- 
-+		fname = alloc(MAXPATHL + 1);
-+		cmd = alloc(CMDBUFFSIZE + 1);
- 		list = list_alloc();
--		if (list == NULL)
-+		if (list == NULL || fname == NULL || cmd == NULL)
-+		{
-+		    vim_free(cmd);
-+		    vim_free(fname);
-+		    if (list != NULL)
-+			list_free(list, TRUE);
- 		    goto end_do_tag;
-+		}
- 
- 		for (i = 0; i < num_matches; ++i)
- 		{
-@@ -810,7 +814,7 @@
- 		    p = tag_full_fname(&tagp);
- 		    if (p == NULL)
- 			continue;
--		    STRCPY(fname, p);
-+		    vim_strncpy(fname, p, MAXPATHL);
- 		    vim_free(p);
- 
- 		    /*
-@@ -915,6 +919,8 @@
- 		set_errorlist(curwin, list, ' ', IObuff);
- 
- 		list_free(list, TRUE);
-+		vim_free(fname);
-+		vim_free(cmd);
- 
- 		cur_match = 0;		/* Jump to the first tag */
- 	    }
-@@ -966,7 +972,7 @@
- 		++tagstackidx;
- 	    }
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--	    else if (g_do_tagpreview)
-+	    else if (g_do_tagpreview != 0)
- 	    {
- 		ptag_entry.cur_match = cur_match;
- 		ptag_entry.cur_fnum = cur_fnum;
-@@ -1271,6 +1277,7 @@
- {
-     FILE       *fp;
-     char_u     *lbuf;			/* line buffer */
-+    int		lbuf_size = LSIZE;	/* length of lbuf */
-     char_u     *tag_fname;		/* name of tag file */
-     tagname_T	tn;			/* info for get_tagfname() */
-     int		first_file;		/* trying first tag file */
-@@ -1285,6 +1292,7 @@
-     char_u	*s;
-     int		i;
- #ifdef FEAT_TAG_BINS
-+    int		tag_file_sorted = NUL;	/* !_TAG_FILE_SORTED value */
-     struct tag_search_info	/* Binary search file offsets */
-     {
- 	off_t	low_offset;	/* offset for first char of first line that
-@@ -1345,7 +1353,6 @@
-     int		match_count = 0;		/* number of matches found */
-     char_u	**matches;
-     int		mtt;
--    int		len;
-     int		help_save;
- #ifdef FEAT_MULTI_LANG
-     int		help_pri = 0;
-@@ -1354,13 +1361,8 @@
-     char_u	*saved_pat = NULL;		/* copy of pat[] */
- #endif
- 
--    /* Use two sets of variables for the pattern: "orgpat" holds the values
--     * for the original pattern and "convpat" converted from 'encoding' to
--     * encoding of the tags file.  "pats" point to either one of these. */
--    pat_T	*pats;
-     pat_T	orgpat;			/* holds unconverted pattern info */
- #ifdef FEAT_MBYTE
--    pat_T	convpat;		/* holds converted pattern info */
-     vimconv_T	vimconv;
- #endif
- 
-@@ -1384,7 +1386,6 @@
- 
-     help_save = curbuf->b_help;
-     orgpat.pat = pat;
--    pats = &orgpat;
- #ifdef FEAT_MBYTE
-     vimconv.vc_type = CONV_NONE;
- #endif
-@@ -1392,7 +1393,7 @@
- /*
-  * Allocate memory for the buffers that are used
-  */
--    lbuf = alloc(LSIZE);
-+    lbuf = alloc(lbuf_size);
-     tag_fname = alloc(MAXPATHL + 1);
- #ifdef FEAT_EMACS_TAGS
-     ebuf = alloc(LSIZE);
-@@ -1418,30 +1419,32 @@
-     if (help_only)				/* want tags from help file */
- 	curbuf->b_help = TRUE;			/* will be restored later */
- 
--    pats->len = (int)STRLEN(pat);
-+    orgpat.len = (int)STRLEN(pat);
- #ifdef FEAT_MULTI_LANG
-     if (curbuf->b_help)
-     {
- 	/* When "@ab" is specified use only the "ab" language, otherwise
- 	 * search all languages. */
--	if (pats->len > 3 && pat[pats->len - 3] == '@'
--					  && ASCII_ISALPHA(pat[pats->len - 2])
--					 && ASCII_ISALPHA(pat[pats->len - 1]))
-+	if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
-+					  && ASCII_ISALPHA(pat[orgpat.len - 2])
-+					 && ASCII_ISALPHA(pat[orgpat.len - 1]))
- 	{
--	    saved_pat = vim_strnsave(pat, pats->len - 3);
-+	    saved_pat = vim_strnsave(pat, orgpat.len - 3);
- 	    if (saved_pat != NULL)
- 	    {
--		help_lang_find = &pat[pats->len - 2];
--		pats->pat = saved_pat;
--		pats->len -= 3;
-+		help_lang_find = &pat[orgpat.len - 2];
-+		orgpat.pat = saved_pat;
-+		orgpat.len -= 3;
- 	    }
- 	}
-     }
- #endif
--    if (p_tl != 0 && pats->len > p_tl)		/* adjust for 'taglength' */
--	pats->len = p_tl;
-+    if (p_tl != 0 && orgpat.len > p_tl)		/* adjust for 'taglength' */
-+	orgpat.len = p_tl;
- 
--    prepare_pats(pats, has_re);
-+    prepare_pats(&orgpat, has_re);
-+    if (has_re && orgpat.regmatch.regprog == NULL)
-+	goto findtag_end;
- 
- #ifdef FEAT_TAG_BINS
-     /* This is only to avoid a compiler warning for using search_info
-@@ -1460,13 +1463,13 @@
-      * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
-      */
- #ifdef FEAT_TAG_BINS
--    pats->regmatch.rm_ic = ((p_ic || !noic)
--				&& (findall || pats->headlen == 0 || !p_tbs));
-+    orgpat.regmatch.rm_ic = ((p_ic || !noic)
-+				&& (findall || orgpat.headlen == 0 || !p_tbs));
-     for (round = 1; round <= 2; ++round)
-     {
--      linear = (pats->headlen == 0 || !p_tbs || round == 2);
-+      linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
- #else
--      pats->regmatch.rm_ic = (p_ic || !noic);
-+      orgpat.regmatch.rm_ic = (p_ic || !noic);
- #endif
- 
-       /*
-@@ -1695,6 +1698,36 @@
- 	    }
- line_read_in:
- 
-+#ifdef FEAT_MBYTE
-+	    if (vimconv.vc_type != CONV_NONE)
-+	    {
-+		char_u	*conv_line;
-+		int	len;
-+
-+		/* Convert every line.  Converting the pattern from 'enc' to
-+		 * the tags file encoding doesn't work, because characters are
-+		 * not recognized. */
-+		conv_line = string_convert(&vimconv, lbuf, NULL);
-+		if (conv_line != NULL)
-+		{
-+		    /* Copy or swap lbuf and conv_line. */
-+		    len = (int)STRLEN(conv_line) + 1;
-+		    if (len > lbuf_size)
-+		    {
-+			vim_free(lbuf);
-+			lbuf = conv_line;
-+			lbuf_size = len;
-+		    }
-+		    else
-+		    {
-+			STRCPY(lbuf, conv_line);
-+			vim_free(conv_line);
-+		    }
-+		}
-+	    }
-+#endif
-+
-+
- #ifdef FEAT_EMACS_TAGS
- 	    /*
- 	     * Emacs tags line with CTRL-L: New file name on next line.
-@@ -1764,6 +1797,33 @@
- 	     */
- 	    if (state == TS_START)
- 	    {
-+		if (STRNCMP(lbuf, "!_TAG_", 6) == 0)
-+		{
-+		    /*
-+		     * Read header line.
-+		     */
-+#ifdef FEAT_TAG_BINS
-+		    if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
-+			tag_file_sorted = lbuf[18];
-+#endif
-+#ifdef FEAT_MBYTE
-+		    if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
-+		    {
-+			/* Prepare to convert every line from the specified
-+			 * encoding to 'encoding'. */
-+			for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
-+			    ;
-+			*p = NUL;
-+			convert_setup(&vimconv, lbuf + 20, p_enc);
-+		    }
-+#endif
-+
-+		    /* Read the next line.  Unrecognized flags are ignored. */
-+		    continue;
-+		}
-+
-+		/* Headers ends. */
-+
- #ifdef FEAT_TAG_BINS
- 		/*
- 		 * When there is no tag head, or ignoring case, need to do a
-@@ -1780,26 +1840,22 @@
- 		if (linear)
- # endif
- 		    state = TS_LINEAR;
--		else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
-+		else if (tag_file_sorted == NUL)
- 		    state = TS_BINARY;
--		else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
--		{
--		    /* Check sorted flag */
--		    if (lbuf[18] == '1')
-+		else if (tag_file_sorted == '1')
- 			state = TS_BINARY;
--		    else if (lbuf[18] == '2')
--		    {
--			state = TS_BINARY;
--			sortic = TRUE;
--			pats->regmatch.rm_ic = (p_ic || !noic);
--		    }
--		    else
--			state = TS_LINEAR;
-+		else if (tag_file_sorted == '2')
-+		{
-+		    state = TS_BINARY;
-+		    sortic = TRUE;
-+		    orgpat.regmatch.rm_ic = (p_ic || !noic);
- 		}
-+		else
-+		    state = TS_LINEAR;
- 
--		if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
-+		if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
- 		{
--		    /* binary search won't work for ignoring case, use linear
-+		    /* Binary search won't work for ignoring case, use linear
- 		     * search. */
- 		    linear = TRUE;
- 		    state = TS_LINEAR;
-@@ -1837,40 +1893,12 @@
- #endif
- 	    }
- 
--#ifdef FEAT_MBYTE
--	    if (lbuf[0] == '!' && pats == &orgpat
--			   && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
--	    {
--		/* Convert the search pattern from 'encoding' to the
--		 * specified encoding. */
--		for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
--		    ;
--		*p = NUL;
--		convert_setup(&vimconv, p_enc, lbuf + 20);
--		if (vimconv.vc_type != CONV_NONE)
--		{
--		    convpat.pat = string_convert(&vimconv, pats->pat, NULL);
--		    if (convpat.pat != NULL)
--		    {
--			pats = &convpat;
--			pats->len = (int)STRLEN(pats->pat);
--			prepare_pats(pats, has_re);
--			pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
--		    }
--		}
--
--		/* Prepare for converting a match the other way around. */
--		convert_setup(&vimconv, lbuf + 20, p_enc);
--		continue;
--	    }
--#endif
--
- 	    /*
- 	     * Figure out where the different strings are in this line.
- 	     * For "normal" tags: Do a quick check if the tag matches.
- 	     * This speeds up tag searching a lot!
- 	     */
--	    if (pats->headlen
-+	    if (orgpat.headlen
- #ifdef FEAT_EMACS_TAGS
- 			    && !is_etag
- #endif
-@@ -1879,12 +1907,39 @@
- 		tagp.tagname = lbuf;
- #ifdef FEAT_TAG_ANYWHITE
- 		tagp.tagname_end = skiptowhite(lbuf);
--		if (*tagp.tagname_end == NUL)	    /* corrupted tag line */
-+		if (*tagp.tagname_end == NUL)
- #else
- 		tagp.tagname_end = vim_strchr(lbuf, TAB);
--		if (tagp.tagname_end == NULL)	    /* corrupted tag line */
-+		if (tagp.tagname_end == NULL)
- #endif
- 		{
-+		    if (vim_strchr(lbuf, NL) == NULL)
-+		    {
-+			/* Truncated line, ignore it.  Has been reported for
-+			 * Mozilla JS with extremely long names. */
-+			if (p_verbose >= 5)
-+			{
-+			    verbose_enter();
-+			    MSG(_("Ignoring long line in tags file"));
-+			    verbose_leave();
-+			}
-+#ifdef FEAT_TAG_BINS
-+			if (state != TS_LINEAR)
-+			{
-+			    /* Avoid getting stuck. */
-+			    linear = TRUE;
-+			    state = TS_LINEAR;
-+# ifdef HAVE_FSEEKO
-+			    fseeko(fp, search_info.low_offset, SEEK_SET);
-+# else
-+			    fseek(fp, (long)search_info.low_offset, SEEK_SET);
-+# endif
-+			}
-+#endif
-+			continue;
-+		    }
-+
-+		    /* Corrupted tag line. */
- 		    line_error = TRUE;
- 		    break;
- 		}
-@@ -1927,9 +1982,9 @@
- 		cmplen = (int)(tagp.tagname_end - tagp.tagname);
- 		if (p_tl != 0 && cmplen > p_tl)	    /* adjust for 'taglength' */
- 		    cmplen = p_tl;
--		if (has_re && pats->headlen < cmplen)
--		    cmplen = pats->headlen;
--		else if (state == TS_LINEAR && pats->headlen != cmplen)
-+		if (has_re && orgpat.headlen < cmplen)
-+		    cmplen = orgpat.headlen;
-+		else if (state == TS_LINEAR && orgpat.headlen != cmplen)
- 		    continue;
- 
- #ifdef FEAT_TAG_BINS
-@@ -1948,10 +2003,10 @@
- 		     * Compare the current tag with the searched tag.
- 		     */
- 		    if (sortic)
--			tagcmp = tag_strnicmp(tagp.tagname, pats->head,
-+			tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
- 							      (size_t)cmplen);
- 		    else
--			tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
-+			tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
- 
- 		    /*
- 		     * A match with a shorter tag means to search forward.
-@@ -1959,9 +2014,9 @@
- 		     */
- 		    if (tagcmp == 0)
- 		    {
--			if (cmplen < pats->headlen)
-+			if (cmplen < orgpat.headlen)
- 			    tagcmp = -1;
--			else if (cmplen > pats->headlen)
-+			else if (cmplen > orgpat.headlen)
- 			    tagcmp = 1;
- 		    }
- 
-@@ -2005,7 +2060,7 @@
- 		}
- 		else if (state == TS_SKIP_BACK)
- 		{
--		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
-+		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
- 			state = TS_STEP_FORWARD;
- 		    else
- 			/* Have to skip back more.  Restore the curr_offset
-@@ -2015,7 +2070,7 @@
- 		}
- 		else if (state == TS_STEP_FORWARD)
- 		{
--		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
-+		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
- 		    {
- 			if ((off_t)ftell(fp) > search_info.match_offset)
- 			    break;	/* past last match */
-@@ -2026,7 +2081,7 @@
- 		else
- #endif
- 		    /* skip this match if it can't match */
--		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
-+		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
- 		    continue;
- 
- 		/*
-@@ -2077,41 +2132,41 @@
- 	    if (p_tl != 0 && cmplen > p_tl)	    /* adjust for 'taglength' */
- 		cmplen = p_tl;
- 	    /* if tag length does not match, don't try comparing */
--	    if (pats->len != cmplen)
-+	    if (orgpat.len != cmplen)
- 		match = FALSE;
- 	    else
- 	    {
--		if (pats->regmatch.rm_ic)
-+		if (orgpat.regmatch.rm_ic)
- 		{
--		    match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
-+		    match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
- 		    if (match)
--			match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
-+			match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
- 								cmplen) == 0);
- 		}
- 		else
--		    match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
-+		    match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
- 	    }
- 
- 	    /*
- 	     * Has a regexp: Also find tags matching regexp.
- 	     */
- 	    match_re = FALSE;
--	    if (!match && pats->regmatch.regprog != NULL)
-+	    if (!match && orgpat.regmatch.regprog != NULL)
- 	    {
- 		int	cc;
- 
- 		cc = *tagp.tagname_end;
- 		*tagp.tagname_end = NUL;
--		match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
-+		match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
- 		if (match)
- 		{
--		    matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
--		    if (pats->regmatch.rm_ic)
-+		    matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
-+		    if (orgpat.regmatch.rm_ic)
- 		    {
--			pats->regmatch.rm_ic = FALSE;
--			match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
-+			orgpat.regmatch.rm_ic = FALSE;
-+			match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
- 								  (colnr_T)0);
--			pats->regmatch.rm_ic = TRUE;
-+			orgpat.regmatch.rm_ic = TRUE;
- 		    }
- 		}
- 		*tagp.tagname_end = cc;
-@@ -2168,7 +2223,7 @@
- 			else
- 			    mtt = MT_GL_OTH;
- 		    }
--		    if (pats->regmatch.rm_ic && !match_no_ic)
-+		    if (orgpat.regmatch.rm_ic && !match_no_ic)
- 			mtt += MT_IC_OFF;
- 		    if (match_re)
- 			mtt += MT_RE_OFF;
-@@ -2181,35 +2236,8 @@
- 		 */
- 		if (ga_grow(&ga_match[mtt], 1) == OK)
- 		{
--#ifdef FEAT_MBYTE
--		    char_u	*conv_line = NULL;
--		    char_u	*lbuf_line = lbuf;
-+		    int len;
- 
--		    if (vimconv.vc_type != CONV_NONE)
--		    {
--			/* Convert the tag line from the encoding of the tags
--			 * file to 'encoding'.  Then parse the line again. */
--			conv_line = string_convert(&vimconv, lbuf, NULL);
--			if (conv_line != NULL)
--			{
--			    if (parse_tag_line(conv_line,
--#ifdef FEAT_EMACS_TAGS
--					is_etag,
--#endif
--					&tagp) == OK)
--				lbuf_line = conv_line;
--			    else
--				/* doesn't work, go back to unconverted line. */
--				(void)parse_tag_line(lbuf,
--#ifdef FEAT_EMACS_TAGS
--						     is_etag,
--#endif
--						     &tagp);
--			}
--		    }
--#else
--# define lbuf_line lbuf
--#endif
- 		    if (help_only)
- 		    {
- #ifdef FEAT_MULTI_LANG
-@@ -2301,7 +2329,7 @@
- 			 * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
- 			 */
- 			len = (int)STRLEN(tag_fname)
--						 + (int)STRLEN(lbuf_line) + 3;
-+						 + (int)STRLEN(lbuf) + 3;
- #ifdef FEAT_EMACS_TAGS
- 			if (is_etag)
- 			    len += (int)STRLEN(ebuf) + 1;
-@@ -2331,7 +2359,7 @@
- 			    else
- 				*s++ = NUL;
- #endif
--			    STRCPY(s, lbuf_line);
-+			    STRCPY(s, lbuf);
- 			}
- 		    }
- 
-@@ -2367,10 +2395,6 @@
- 			else
- 			    vim_free(mfp);
- 		    }
--#ifdef FEAT_MBYTE
--		    /* Note: this makes the values in "tagp" invalid! */
--		    vim_free(conv_line);
--#endif
- 		}
- 		else    /* Out of memory! Just forget about the rest. */
- 		{
-@@ -2409,19 +2433,12 @@
- 	}
- #endif
- #ifdef FEAT_MBYTE
--	if (pats == &convpat)
--	{
--	    /* Go back from converted pattern to original pattern. */
--	    vim_free(pats->pat);
--	    vim_free(pats->regmatch.regprog);
--	    orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
--	    pats = &orgpat;
--	}
- 	if (vimconv.vc_type != CONV_NONE)
- 	    convert_setup(&vimconv, NULL, NULL);
- #endif
- 
- #ifdef FEAT_TAG_BINS
-+	tag_file_sorted = NUL;
- 	if (sort_error)
- 	{
- 	    EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
-@@ -2455,13 +2472,13 @@
- #ifdef FEAT_TAG_BINS
-       /* stop searching when already did a linear search, or when TAG_NOIC
-        * used, and 'ignorecase' not set or already did case-ignore search */
--      if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
-+      if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
- 	  break;
- # ifdef FEAT_CSCOPE
-       if (use_cscope)
- 	  break;
- # endif
--      pats->regmatch.rm_ic = TRUE;	/* try another time while ignoring case */
-+      orgpat.regmatch.rm_ic = TRUE;	/* try another time while ignoring case */
-     }
- #endif
- 
-@@ -2474,7 +2491,7 @@
- 
- findtag_end:
-     vim_free(lbuf);
--    vim_free(pats->regmatch.regprog);
-+    vim_free(orgpat.regmatch.regprog);
-     vim_free(tag_fname);
- #ifdef FEAT_EMACS_TAGS
-     vim_free(ebuf);
-@@ -3114,7 +3131,7 @@
- #endif
- 
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--    if (g_do_tagpreview)
-+    if (g_do_tagpreview != 0)
-     {
- 	postponed_split = 0;	/* don't split again below */
- 	curwin_save = curwin;	/* Save current window */
-@@ -3143,9 +3160,7 @@
-     {
- 	win_split(postponed_split > 0 ? postponed_split : 0,
- 						       postponed_split_flags);
--# ifdef FEAT_SCROLLBIND
--	curwin->w_p_scb = FALSE;
--# endif
-+	RESET_BINDING(curwin);
-     }
- #endif
- 
-@@ -3154,7 +3169,7 @@
- 	/* A :ta from a help file will keep the b_help flag set.  For ":ptag"
- 	 * we need to use the flag from the window where we came from. */
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--	if (g_do_tagpreview)
-+	if (g_do_tagpreview != 0)
- 	    keep_help_flag = curwin_save->w_buffer->b_help;
- 	else
- #endif
-@@ -3328,7 +3343,8 @@
- 	}
- 
- #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
--	if (g_do_tagpreview && curwin != curwin_save && win_valid(curwin_save))
-+	if (g_do_tagpreview != 0
-+			   && curwin != curwin_save && win_valid(curwin_save))
- 	{
- 	    /* Return cursor to where we were */
- 	    validate_cursor();
-@@ -3782,8 +3798,9 @@
-     char_u  *start;		/* start of the value */
-     char_u  *end;		/* after the value; can be NULL */
- {
--    char_u	buf[MAXPATHL];
-+    char_u	*buf;
-     int		len = 0;
-+    int		retval;
- 
-     /* check that the field name doesn't exist yet */
-     if (dict_find(dict, (char_u *)field_name, -1) != NULL)
-@@ -3796,6 +3813,9 @@
- 	}
- 	return FAIL;
-     }
-+    buf = alloc(MAXPATHL);
-+    if (buf == NULL)
-+	return FAIL;
-     if (start != NULL)
-     {
- 	if (end == NULL)
-@@ -3805,12 +3825,14 @@
- 		--end;
- 	}
- 	len = (int)(end - start);
--	if (len > (int)sizeof(buf) - 1)
--	    len = sizeof(buf) - 1;
-+	if (len > MAXPATHL - 1)
-+	    len = MAXPATHL - 1;
- 	vim_strncpy(buf, start, len);
-     }
-     buf[len] = NUL;
--    return dict_add_nr_str(dict, field_name, 0L, buf);
-+    retval = dict_add_nr_str(dict, field_name, 0L, buf);
-+    vim_free(buf);
-+    return retval;
- }
- 
- /*
-diff -Naur vim73.orig/src/term.c vim73/src/term.c
---- vim73.orig/src/term.c	2010-07-25 13:30:31.000000000 +0000
-+++ vim73/src/term.c	2012-11-01 20:35:48.000000000 +0000
-@@ -52,7 +52,7 @@
- 
- /*
-  * Here are the builtin termcap entries.  They are not stored as complete
-- * Tcarr structures, as such a structure is too big.
-+ * structures with all entries, as such a structure is too big.
-  *
-  * The entries are compact, therefore they normally are included even when
-  * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
-@@ -199,71 +199,6 @@
- #endif
- 
- #ifndef NO_BUILTIN_TCAPS
--# if defined(RISCOS) || defined(ALL_BUILTIN_TCAPS)
--/*
-- * Default for the Acorn.
-- */
--    {(int)KS_NAME,	"riscos"},
--    {(int)KS_CL,	"\014"},		/* Cls and Home Cursor */
--    {(int)KS_CM,	"\001%d\001%d\002"},	/* Position cursor */
--
--    {(int)KS_CCO,	"16"},			/* Allow 16 colors */
--
--    {(int)KS_CAF,	"\001%d\021"},		/* Set foreground colour */
--    {(int)KS_CAB,	"\001%d\022"},		/* Set background colour */
--
--
--    {(int)KS_ME,	"\004"},		/* Normal mode */
--    {(int)KS_MR,	"\005"},		/* Reverse */
--
--    {(int)KS_VI,	"\016"},		/* Cursor invisible */
--    {(int)KS_VE,	"\017"},		/* Cursor visible */
--    {(int)KS_VS,	"\020"},		/* Cursor very visible */
--
--    {(int)KS_CS,	"\001%d\001%d\003"},	/* Set scroll region */
--    {(int)KS_SR,	"\023"},		/* Scroll text down */
--    {K_UP,		"\217"},
--    {K_DOWN,		"\216"},
--    {K_LEFT,		"\214"},
--    {K_RIGHT,		"\215"},
--    {K_S_UP,		"\237"},
--    {K_S_DOWN,		"\236"},
--    {K_S_LEFT,		"\234"},
--    {K_S_RIGHT,		"\235"},
--
--    {K_F1,		"\201"},
--    {K_F2,		"\202"},
--    {K_F3,		"\203"},
--    {K_F4,		"\204"},
--    {K_F5,		"\205"},
--    {K_F6,		"\206"},
--    {K_F7,		"\207"},
--    {K_F8,		"\210"},
--    {K_F9,		"\211"},
--    {K_F10,		"\312"},
--    {K_F11,		"\313"},
--    {K_F12,		"\314"},
--    {K_S_F1,		"\221"},
--    {K_S_F2,		"\222"},
--    {K_S_F3,		"\223"},
--    {K_S_F4,		"\224"},
--    {K_S_F5,		"\225"},
--    {K_S_F6,		"\226"},
--    {K_S_F7,		"\227"},
--    {K_S_F8,		"\230"},
--    {K_S_F9,		"\231"},
--    {K_S_F10,		"\332"},
--    {K_S_F11,		"\333"},
--    {K_S_F12,		"\334"},
--    {K_BS,		"\010"},
--    {K_INS,		"\315"},
--    {K_DEL,		"\177"},
--    {K_HOME,		"\036"},
--    {K_END,		"\213"},
--    {K_PAGEUP,		"\237"},
--    {K_PAGEDOWN,	"\236"},
--# endif	/* Acorn terminal */
--
- 
- # if defined(AMIGA) || defined(ALL_BUILTIN_TCAPS)
- /*
-@@ -1399,10 +1334,6 @@
- /*
-  * DEFAULT_TERM is used, when no terminal is specified with -T option or $TERM.
-  */
--#ifdef RISCOS
--# define DEFAULT_TERM	(char_u *)"riscos"
--#endif
--
- #ifdef AMIGA
- # define DEFAULT_TERM	(char_u *)"amiga"
- #endif
-@@ -2065,6 +1996,8 @@
- #  define HMT_DEC	4
- #  define HMT_JSBTERM	8
- #  define HMT_PTERM	16
-+#  define HMT_URXVT	32
-+#  define HMT_SGR	64
- static int has_mouse_termcode = 0;
- # endif
- 
-@@ -2100,6 +2033,16 @@
- 	has_mouse_termcode |= HMT_PTERM;
-     else
- #   endif
-+#   ifdef FEAT_MOUSE_URXVT
-+    if (n == KS_URXVT_MOUSE)
-+	has_mouse_termcode |= HMT_URXVT;
-+    else
-+#   endif
-+#   ifdef FEAT_MOUSE_SGR
-+    if (n == KS_SGR_MOUSE)
-+	has_mouse_termcode |= HMT_SGR;
-+    else
-+#   endif
- 	has_mouse_termcode |= HMT_NORMAL;
- #  endif
- }
-@@ -2137,6 +2080,16 @@
- 	has_mouse_termcode &= ~HMT_PTERM;
-     else
- #   endif
-+#   ifdef FEAT_MOUSE_URXVT
-+    if (n == KS_URXVT_MOUSE)
-+	has_mouse_termcode &= ~HMT_URXVT;
-+    else
-+#   endif
-+#   ifdef FEAT_MOUSE_SGR
-+    if (n == KS_SGR_MOUSE)
-+	has_mouse_termcode &= ~HMT_SGR;
-+    else
-+#   endif
- 	has_mouse_termcode &= ~HMT_NORMAL;
- #  endif
- }
-@@ -3053,10 +3006,19 @@
-     int		old_Rows = Rows;
-     int		old_Columns = Columns;
- 
--    (void)ui_get_shellsize();
--    check_shellsize();
--    if (old_Rows != Rows || old_Columns != Columns)
--	shell_resized();
-+    if (!exiting
-+#ifdef FEAT_GUI
-+	    /* Do not get the size when executing a shell command during
-+	     * startup. */
-+	    && !gui.starting
-+#endif
-+	    )
-+    {
-+	(void)ui_get_shellsize();
-+	check_shellsize();
-+	if (old_Rows != Rows || old_Columns != Columns)
-+	    shell_resized();
-+    }
- }
- 
- /*
-@@ -3083,12 +3045,20 @@
-     if (width < 0 || height < 0)    /* just checking... */
- 	return;
- 
--    if (State == HITRETURN || State == SETWSIZE) /* postpone the resizing */
-+    if (State == HITRETURN || State == SETWSIZE)
-     {
-+	/* postpone the resizing */
- 	State = SETWSIZE;
- 	return;
-     }
- 
-+    /* curwin->w_buffer can be NULL when we are closing a window and the
-+     * buffer has already been closed and removing a scrollbar causes a resize
-+     * event. Don't resize then, it will happen after entering another buffer.
-+     */
-+    if (curwin->w_buffer == NULL)
-+	return;
-+
-     ++busy;
- 
- #ifdef AMIGA
-@@ -3828,23 +3798,27 @@
-  * Check from typebuf.tb_buf[typebuf.tb_off] to typebuf.tb_buf[typebuf.tb_off
-  * + max_offset].
-  * Return 0 for no match, -1 for partial match, > 0 for full match.
-+ * Return KEYLEN_REMOVED when a key code was deleted.
-  * With a match, the match is removed, the replacement code is inserted in
-  * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
-  * returned.
-- * When "buf" is not NULL, it is used instead of typebuf.tb_buf[]. "buflen" is
-- * then the length of the string in buf[].
-+ * When "buf" is not NULL, buf[bufsize] is used instead of typebuf.tb_buf[].
-+ * "buflen" is then the length of the string in buf[] and is updated for
-+ * inserts and deletes.
-  */
-     int
--check_termcode(max_offset, buf, buflen)
-+check_termcode(max_offset, buf, bufsize, buflen)
-     int		max_offset;
-     char_u	*buf;
--    int		buflen;
-+    int		bufsize;
-+    int		*buflen;
- {
-     char_u	*tp;
-     char_u	*p;
-     int		slen = 0;	/* init for GCC */
-     int		modslen;
-     int		len;
-+    int		retval = 0;
-     int		offset;
-     char_u	key_name[2];
-     int		modifiers;
-@@ -3909,10 +3883,10 @@
- 	}
- 	else
- 	{
--	    if (offset >= buflen)
-+	    if (offset >= *buflen)
- 		break;
- 	    tp = buf + offset;
--	    len = buflen - offset;
-+	    len = *buflen - offset;
- 	}
- 
- 	/*
-@@ -4064,7 +4038,10 @@
- 	}
- 
- #ifdef FEAT_TERMRESPONSE
--	if (key_name[0] == NUL)
-+	if (key_name[0] == NUL
-+	    /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
-+	    || key_name[0] == KS_URXVT_MOUSE
-+	    || key_name[0] == KS_SGR_MOUSE)
- 	{
- 	    /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  Also
- 	     * eat other possible responses to t_RV, rxvt returns
-@@ -4102,10 +4079,22 @@
- 
- 		    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
- 		    {
--			/* if xterm version >= 95 use mouse dragging */
--			if (extra >= 95)
--			    set_option_value((char_u *)"ttym", 0L,
-+			/* Only set 'ttymouse' automatically if it was not set
-+			 * by the user already. */
-+			if (!option_was_set((char_u *)"ttym"))
-+			{
-+# ifdef TTYM_SGR
-+			    if (extra >= 277)
-+				set_option_value((char_u *)"ttym", 0L,
-+							  (char_u *)"sgr", 0);
-+			    else
-+# endif
-+			    /* if xterm version >= 95 use mouse dragging */
-+			    if (extra >= 95)
-+				set_option_value((char_u *)"ttym", 0L,
- 						       (char_u *)"xterm2", 0);
-+			}
-+
- 			/* if xterm version >= 141 try to get termcap codes */
- 			if (extra >= 141)
- 			{
-@@ -4184,18 +4173,24 @@
- 	/*
- 	 * If it is a mouse click, get the coordinates.
- 	 */
--	if (key_name[0] == (int)KS_MOUSE
-+	if (key_name[0] == KS_MOUSE
- # ifdef FEAT_MOUSE_JSB
--		|| key_name[0] == (int)KS_JSBTERM_MOUSE
-+		|| key_name[0] == KS_JSBTERM_MOUSE
- # endif
- # ifdef FEAT_MOUSE_NET
--		|| key_name[0] == (int)KS_NETTERM_MOUSE
-+		|| key_name[0] == KS_NETTERM_MOUSE
- # endif
- # ifdef FEAT_MOUSE_DEC
--		|| key_name[0] == (int)KS_DEC_MOUSE
-+		|| key_name[0] == KS_DEC_MOUSE
- # endif
- # ifdef FEAT_MOUSE_PTERM
--		|| key_name[0] == (int)KS_PTERM_MOUSE
-+		|| key_name[0] == KS_PTERM_MOUSE
-+# endif
-+# ifdef FEAT_MOUSE_URXVT
-+		|| key_name[0] == KS_URXVT_MOUSE
-+# endif
-+# ifdef FEAT_MOUSE_SGR
-+		|| key_name[0] == KS_SGR_MOUSE
- # endif
- 		)
- 	{
-@@ -4275,7 +4270,101 @@
- 		    else
- 			break;
- 		}
-+	    }
-+
-+# if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
-+	    if (key_name[0] == KS_URXVT_MOUSE
-+		|| key_name[0] == KS_SGR_MOUSE)
-+	    {
-+		for (;;)
-+		{
-+		    /* URXVT 1015 mouse reporting mode:
-+		     * Almost identical to xterm mouse mode, except the values
-+		     * are decimal instead of bytes.
-+		     *
-+		     * \033[%d;%d;%dM
-+		     *		  ^-- row
-+		     *	       ^----- column
-+		     *	    ^-------- code
-+		     *
-+		     * SGR 1006 mouse reporting mode:
-+		     * Almost identical to xterm mouse mode, except the values
-+		     * are decimal instead of bytes.
-+		     *
-+		     * \033[<%d;%d;%dM
-+		     *		   ^-- row
-+		     *	        ^----- column
-+		     *	     ^-------- code
-+		     *
-+		     * \033[<%d;%d;%dm        : mouse release event
-+		     *		   ^-- row
-+		     *	        ^----- column
-+		     *	     ^-------- code
-+		     */
-+		    p = tp + slen;
-+
-+		    mouse_code = getdigits(&p);
-+		    if (*p++ != ';')
-+			return -1;
-+
-+		    /* when mouse reporting is SGR, add 32 to mouse code */
-+                    if (key_name[0] == KS_SGR_MOUSE)
-+                        mouse_code += 32;
-+
-+		    mouse_col = getdigits(&p) - 1;
-+		    if (*p++ != ';')
-+			return -1;
-+
-+		    mouse_row = getdigits(&p) - 1;
-+                    if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
-+			mouse_code |= MOUSE_RELEASE;
-+                    else if (*p != 'M')
-+			return -1;
-+                    p++;
-+
-+		    slen += (int)(p - (tp + slen));
-+
-+		    /* skip this one if next one has same code (like xterm
-+		     * case) */
-+		    j = termcodes[idx].len;
-+		    if (STRNCMP(tp, tp + slen, (size_t)j) == 0)
-+		    {
-+			int slen2;
-+			int cmd_complete = 0;
-+
-+			/* check if the command is complete by looking for the
-+			 * 'M' */
-+			for (slen2 = slen; slen2 < len; slen2++)
-+			{
-+			    if (tp[slen2] == 'M'
-+                                || (key_name[0] == KS_SGR_MOUSE
-+							 && tp[slen2] == 'm'))
-+			    {
-+				cmd_complete = 1;
-+				break;
-+			    }
-+			}
-+			p += j;
-+			if (cmd_complete && getdigits(&p) == mouse_code)
-+			{
-+			    slen += j; /* skip the \033[ */
-+			    continue;
-+			}
-+		    }
-+		    break;
-+		}
-+	    }
-+# endif
- 
-+	if (key_name[0] == (int)KS_MOUSE
-+#ifdef FEAT_MOUSE_URXVT
-+	    || key_name[0] == (int)KS_URXVT_MOUSE
-+#endif
-+#ifdef FEAT_MOUSE_SGR
-+	    || key_name[0] == KS_SGR_MOUSE
-+#endif
-+	    )
-+	{
- #  if !defined(MSWIN) && !defined(MSDOS)
- 		/*
- 		 * Handle mouse events.
-@@ -4940,6 +5029,13 @@
- #endif
- 		string[new_slen++] = key_name[1];
- 	}
-+	else if (new_slen == 0 && key_name[0] == KS_EXTRA
-+						  && key_name[1] == KE_IGNORE)
-+	{
-+	    /* Do not put K_IGNORE into the buffer, do return KEYLEN_REMOVED
-+	     * to indicate what happened. */
-+	    retval = KEYLEN_REMOVED;
-+	}
- 	else
- 	{
- 	    string[new_slen++] = K_SPECIAL;
-@@ -4969,14 +5065,20 @@
- 	    if (extra < 0)
- 		/* remove matched characters */
- 		mch_memmove(buf + offset, buf + offset - extra,
--					   (size_t)(buflen + offset + extra));
-+					   (size_t)(*buflen + offset + extra));
- 	    else if (extra > 0)
--		/* insert the extra space we need */
-+	    {
-+		/* Insert the extra space we need.  If there is insufficient
-+		 * space return -1. */
-+		if (*buflen + extra + new_slen >= bufsize)
-+		    return -1;
- 		mch_memmove(buf + offset + extra, buf + offset,
--						   (size_t)(buflen - offset));
-+						   (size_t)(*buflen - offset));
-+	    }
- 	    mch_memmove(buf + offset, string, (size_t)new_slen);
-+	    *buflen = *buflen + extra + new_slen;
- 	}
--	return (len + extra + offset);
-+	return retval == 0 ? (len + extra + offset) : retval;
-     }
- 
-     return 0;			    /* no match found */
-@@ -5219,12 +5321,12 @@
-     char_u	*src;
- {
-     int		i;
--    int		slen;
-+    int		slen = (int)STRLEN(src);
- 
-     for (i = 0; i < tc_len; ++i)
-     {
--	slen = termcodes[i].len;
--	if (slen > 1 && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
-+	if (slen == termcodes[i].len
-+			&& STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
- 	    return i;
-     }
-     return -1;
-diff -Naur vim73.orig/src/termlib.c vim73/src/termlib.c
---- vim73.orig/src/termlib.c	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/termlib.c	2012-11-01 20:35:42.000000000 +0000
-@@ -13,7 +13,7 @@
- #include "vim.h"
- #include "termlib.pro"
- 
--#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS) && !defined(RISCOS)
-+#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS)
- # include <sgtty.h>
- #endif
- 
-diff -Naur vim73.orig/src/testdir/Make_amiga.mak vim73/src/testdir/Make_amiga.mak
---- vim73.orig/src/testdir/Make_amiga.mak	2010-08-04 14:34:34.000000000 +0000
-+++ vim73/src/testdir/Make_amiga.mak	2012-11-01 20:35:47.000000000 +0000
-@@ -13,6 +13,8 @@
- # test25	uses symbolic link
- # test27	can't edit file with "*"
- # test52	only for Win32
-+# test85	no Lua interface
-+# test86, 87	no Python interface
- 
- SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
- 		test7.out test8.out test9.out \
-@@ -27,7 +29,9 @@
- 		test56.out test57.out test58.out test59.out test60.out \
- 		test61.out test62.out test63.out test64.out test65.out \
- 		test66.out test67.out test68.out test69.out test70.out \
--		test71.out test72.out test73.out
-+		test71.out test72.out test73.out test74.out test75.out \
-+		test76.out test77.out test78.out test79.out test80.out \
-+		test81.out test82.out test83.out test84.out
- 
- .SUFFIXES: .in .out
- 
-@@ -120,3 +124,14 @@
- test71.out: test71.in
- test72.out: test72.in
- test73.out: test73.in
-+test74.out: test74.in
-+test75.out: test75.in
-+test76.out: test76.in
-+test77.out: test77.in
-+test78.out: test78.in
-+test79.out: test79.in
-+test80.out: test80.in
-+test81.out: test81.in
-+test82.out: test82.in
-+test83.out: test83.in
-+test84.out: test84.in
-diff -Naur vim73.orig/src/testdir/Make_dos.mak vim73/src/testdir/Make_dos.mak
---- vim73.orig/src/testdir/Make_dos.mak	2010-08-13 16:27:19.000000000 +0000
-+++ vim73/src/testdir/Make_dos.mak	2012-11-01 20:35:48.000000000 +0000
-@@ -27,7 +27,10 @@
- 		test30.out test31.out test32.out test33.out test34.out \
- 		test37.out test38.out test39.out test40.out test41.out \
- 		test42.out test52.out test65.out test66.out test67.out \
--		test68.out test69.out test71.out test72.out test73.out
-+		test68.out test69.out test71.out test72.out test73.out \
-+		test74.out test75.out test76.out test77.out test78.out \
-+		test79.out test80.out test81.out test82.out test83.out \
-+		test84.out test85.out test86.out test87.out
- 
- SCRIPTS32 =	test50.out test70.out
- 
-@@ -49,7 +52,8 @@
- 
- fixff:
- 	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
--	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q dotest.in
-+	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
-+		dotest.in test60.ok test71.ok test74.ok
- 
- clean:
- 	-del *.out
-@@ -58,6 +62,7 @@
- 	-if exist tiny.vim del tiny.vim
- 	-if exist mbyte.vim del mbyte.vim
- 	-if exist mzscheme.vim del mzscheme.vim
-+	-if exist lua.vim del lua.vim
- 	-del X*
- 	-if exist viminfo del viminfo
- 
-diff -Naur vim73.orig/src/testdir/Make_ming.mak vim73/src/testdir/Make_ming.mak
---- vim73.orig/src/testdir/Make_ming.mak	2010-08-04 14:34:47.000000000 +0000
-+++ vim73/src/testdir/Make_ming.mak	2012-11-01 20:35:48.000000000 +0000
-@@ -47,7 +47,10 @@
- 		test30.out test31.out test32.out test33.out test34.out \
- 		test37.out test38.out test39.out test40.out test41.out \
- 		test42.out test52.out test65.out test66.out test67.out \
--		test68.out test69.out test71.out test72.out test72.out
-+		test68.out test69.out test71.out test72.out test73.out \
-+		test74.out test75.out test76.out test77.out test78.out \
-+		test79.out test80.out test81.out test82.out test83.out \
-+		test84.out test85.out test86.out test87.out
- 
- SCRIPTS32 =	test50.out test70.out
- 
-@@ -72,6 +75,8 @@
- 
- fixff:
- 	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
-+	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
-+		dotest.in test60.ok test71.ok test74.ok
- 
- clean:
- 	-$(DEL) *.out
-@@ -80,6 +85,7 @@
- 	-$(DEL) tiny.vim
- 	-$(DEL) mbyte.vim
- 	-$(DEL) mzscheme.vim
-+	-$(DEL) lua.vim
- 	-$(DEL) X*
- 	-$(DEL) viminfo
- 
-diff -Naur vim73.orig/src/testdir/Make_os2.mak vim73/src/testdir/Make_os2.mak
---- vim73.orig/src/testdir/Make_os2.mak	2010-08-04 14:34:55.000000000 +0000
-+++ vim73/src/testdir/Make_os2.mak	2012-11-01 20:35:47.000000000 +0000
-@@ -13,6 +13,8 @@
- # test25	uses symbolic link
- # test27	can't edit file with "*" in file name
- # test52	only for Win32
-+# test85	no Lua interface
-+# test86, 87	no Python interface
- 
- SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
- 		test7.out test8.out test9.out \
-@@ -27,7 +29,9 @@
- 		test56.out test57.out test58.out test59.out test60.out \
- 		test61.out test62.out test63.out test64.out test65.out \
- 		test66.out test67.out test68.out test69.out test70.out \
--		test71.out test72.out test73.out
-+		test71.out test72.out test73.out test74.out test75.out \
-+		test76.out test77.out test78.out test79.out test80.out \
-+		test81.out test82.out test83.out test84.out
- 
- .SUFFIXES: .in .out
- 
-diff -Naur vim73.orig/src/testdir/Make_vms.mms vim73/src/testdir/Make_vms.mms
---- vim73.orig/src/testdir/Make_vms.mms	2010-08-04 14:35:46.000000000 +0000
-+++ vim73/src/testdir/Make_vms.mms	2012-11-01 20:35:48.000000000 +0000
-@@ -4,7 +4,7 @@
- # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
- #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
- #
--# Last change:  2010 Aug 04
-+# Last change:  2012 Oct 06
- #
- # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
- # Edit the lines in the Configuration section below to select.
-@@ -74,7 +74,9 @@
- 	 test56.out test57.out test60.out \
- 	 test61.out test62.out test63.out test64.out test65.out \
- 	 test66.out test67.out test68.out test69.out \
--	 test71.out test72.out
-+	 test71.out test72.out test74.out test75.out test76.out \
-+	 test77.out test78.out test79.out test80.out test81.out \
-+	 test82.out test83.out test84.out
- 
- # Known problems:
- # Test 30: a problem around mac format - unknown reason
-@@ -87,6 +89,7 @@
- # with too many dots).
- #
- # Test 72: unknown reason
-+# Test 85: no Lua interface
- 
- .IFDEF WANT_GUI
- SCRIPT_GUI = test16.out
-@@ -181,5 +184,6 @@
- 	-@ if "''F$SEARCH("small.vim")'"    .NES. "" then delete/noconfirm/nolog small.vim.*
- 	-@ if "''F$SEARCH("mbyte.vim")'"    .NES. "" then delete/noconfirm/nolog mbyte.vim.*
- 	-@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.*
-+	-@ if "''F$SEARCH("lua.vim")'" .NES. "" then delete/noconfirm/nolog lua.vim.*
- 	-@ if "''F$SEARCH("viminfo.*")'"    .NES. "" then delete/noconfirm/nolog viminfo.*.*
- 
-diff -Naur vim73.orig/src/testdir/Makefile vim73/src/testdir/Makefile
---- vim73.orig/src/testdir/Makefile	2010-08-15 12:56:30.000000000 +0000
-+++ vim73/src/testdir/Makefile	2012-11-01 20:35:48.000000000 +0000
-@@ -10,6 +10,7 @@
- #   This will make testing about 10 times as slow.
- # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$*
- 
-+
- SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
- 		test7.out test8.out test9.out test10.out test11.out \
- 		test12.out  test13.out test14.out test15.out test17.out \
-@@ -23,7 +24,10 @@
- 		test54.out test55.out test56.out test57.out test58.out \
- 		test59.out test60.out test61.out test62.out test63.out \
- 		test64.out test65.out test66.out test67.out test68.out \
--		test69.out test70.out test71.out test72.out test73.out
-+		test69.out test70.out test71.out test72.out test73.out \
-+		test74.out test75.out test76.out test77.out test78.out \
-+		test79.out test80.out test81.out test82.out test83.out \
-+		test84.out test85.out test86.out test87.out
- 
- SCRIPTS_GUI = test16.out
- 
-@@ -44,10 +48,10 @@
- $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
- 
- clean:
--	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* valgrind.pid* viminfo
-+	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok X* valgrind.* viminfo
- 
- test1.out: test1.in
--	-rm -f $*.failed tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* viminfo
-+	-rm -f $*.failed tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok X* viminfo
- 	$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
- 	@/bin/sh -c "if diff test.out $*.ok; \
- 		then mv -f test.out $*.out; \
-diff -Naur vim73.orig/src/testdir/main.aap vim73/src/testdir/main.aap
---- vim73.orig/src/testdir/main.aap	2010-07-30 20:03:23.000000000 +0000
-+++ vim73/src/testdir/main.aap	2012-11-01 20:35:39.000000000 +0000
-@@ -13,7 +13,7 @@
- 		test33.out test34.out test35.out test36.out test37.out
- 		test38.out test39.out test40.out test41.out test42.out
- 		test43.out test44.out test45.out test46.out test47.out
--		test48.out test49.out
-+		test48.out test49.out test74.out
- 
- ScriptsGUI = test16.out
- 
-diff -Naur vim73.orig/src/testdir/test1.in vim73/src/testdir/test1.in
---- vim73.orig/src/testdir/test1.in	2010-08-04 14:06:24.000000000 +0000
-+++ vim73/src/testdir/test1.in	2012-11-01 20:35:45.000000000 +0000
-@@ -15,6 +15,7 @@
- be set like small.vim above.  mbyte.vim is sourced by tests that require the
- +multi_byte feature.
- Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
-+Similar logic is applied to the +lua feature, using lua.vim.
- 
- STARTTEST
- :" Write a single line to test.out to check if testing works at all.
-@@ -28,10 +29,17 @@
- qa!
- :w! mbyte.vim
- :w! mzscheme.vim
-+:w! lua.vim
-+:"
- :" If +multi_byte feature supported, make mbyte.vim empty.
- :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
-+:"
- :" If +mzscheme feature supported, make mzscheme.vim empty.
- :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
-+:"
-+:" If +lua feature supported, make lua.vim empty.
-+:if has("lua") | sp another | w! lua.vim | q | endif
-+:"
- :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
- :" Otherwise write small.vim to skip the test.
- :if 1 | q! | endif
-diff -Naur vim73.orig/src/testdir/test10.in vim73/src/testdir/test10.in
---- vim73.orig/src/testdir/test10.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test10.in	2012-11-01 20:35:46.000000000 +0000
-@@ -2,56 +2,113 @@
- 
- STARTTEST
- :so small.vim
--:/start of errorfile/,/end of errorfile/w! Xerrorfile
-+:" Also test a BOM is ignored.
-+:so mbyte.vim
-+:set encoding=utf-8
-+:7/start of errorfile/,/end of errorfile/w! Xerrorfile1
-+:7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
- :/start of testfile/,/end of testfile/w! Xtestfile
--:cf Xerrorfile
--rA
-+:set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
-+:set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
-+:cf Xerrorfile2
-+:clast
-+:copen
-+:let a=w:quickfix_title
-+:wincmd p
-+lgR=a
-
-+:cf Xerrorfile1
-+grA
- :cn
--rB
-+gRLINE 6, COL 19
- :cn
--rC
-+gRNO COLUMN SPECIFIED
- :cn
--rD
-+gRAGAIN NO COLUMN
- :cn
--rE
-+gRCOL 1
-+:cn
-+gRCOL 2
-+:cn
-+gRCOL 10
-+:cn
-+gRVCOL 10
-+:cn
-+grI
-+:cn
-+gR. SPACE POINTER
-+:cn
-+gR. DOT POINTER
-+:cn
-+gR. DASH POINTER
-+:cn
-+gR. TAB-SPACE POINTER
-+:clast
-+:cprev
-+:cprev
-+:wincmd w
-+:let a=w:quickfix_title
-+:wincmd p
-+lgR=a
-
- :w! test.out             " Write contents of this file
- :qa!
- ENDTEST
- 
- start of errorfile
- "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
--"Xtestfile", line 7 col 19; this is an error
-+ï»¿"Xtestfile", line 6 col 19; this is an error
- gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include  version.c
--Xtestfile:13: parse error before `asd'
-+Xtestfile:9: parse error before `asd'
- make: *** [vim] Error 1
--in file "Xtestfile" linenr 16: there is an error
-+in file "Xtestfile" linenr 10: there is an error
- 
- 2 returned
--"Xtestfile", linenr 19: yet another problem
-+"Xtestfile", line 11 col 1; this is an error
-+"Xtestfile", line 12 col 2; this is another error
-+"Xtestfile", line 14:10; this is an error in column 10
-+=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
-+"Xtestfile", linenr 16: yet another problem
-+Error in "Xtestfile" at line 17:
-+x should be a dot
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
-+            ^
-+Error in "Xtestfile" at line 18:
-+x should be a dot
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
-+.............^
-+Error in "Xtestfile" at line 19:
-+x should be a dot
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
-+--------------^
-+Error in "Xtestfile" at line 20:
-+x should be a dot
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
-+	       ^
- 
- Does anyone know what is the problem and how to correction it?
-+"Xtestfile", line 21 col 9: What is the title of the quickfix window?
-+"Xtestfile", line 22 col 9: What is the title of the quickfix window?
- end of errorfile
- 
- start of testfile
--line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 4  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 7  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  4
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  6
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  9
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 10
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 12
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 14
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 15
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 21
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 22
- end of testfile
-diff -Naur vim73.orig/src/testdir/test10.ok vim73/src/testdir/test10.ok
---- vim73.orig/src/testdir/test10.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test10.ok	2012-11-01 20:35:46.000000000 +0000
-@@ -1,23 +1,23 @@
- start of testfile
--line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 4  xxxAxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 7  xxxxxxxxxxBxxxxxxxxxxxxxxxxxxx
--line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--Cine 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--Dine 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
--line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
-+	xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx    line  4
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
-+	xxxxxxxxxxxxxxxxxLINE 6, COL 19   line  6
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
-+	NO COLUMN SPECIFIEDxxxxxxxxxxx    line  9
-+	AGAIN NO COLUMNxxxxxxxxxxxxxxx    line 10
-+COL 1	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
-+	COL 2xxxxxxxxxxxxxxxxxxxxxxxxx    line 12
-+	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
-+	xxxxxxxxCOL 10xxxxxxxxxxxxxxxx    line 14
-+	xVCOL 10xxxxxxxxxxxxxxxxxxxxxx    line 15
-+	Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
-+	xxxx. SPACE POINTERxxxxxxxxxxx    line 17
-+	xxxxx. DOT POINTERxxxxxxxxxxxx    line 18
-+	xxxxxx. DASH POINTERxxxxxxxxxx    line 19
-+	xxxxxxx. TAB-SPACE POINTERxxxx    line 20
-+	xxxxxxxx:cf Xerrorfile1xxxxxxx    line 21
-+	xxxxxxxx:cf Xerrorfile2xxxxxxx    line 22
- end of testfile
-diff -Naur vim73.orig/src/testdir/test16.in vim73/src/testdir/test16.in
---- vim73.orig/src/testdir/test16.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test16.in	2012-11-01 20:35:48.000000000 +0000
-@@ -2,6 +2,7 @@
- For KDE set a font, empty 'guifont' may cause a hang.
- 
- STARTTEST
-+:if $DISPLAY == "" | e! test.ok | wq! test.out | endif
- :set exrc secure
- :if has("gui_kde")
- :  set guifont=Courier\ 10\ Pitch/8/-1/5/50/0/0/0/0/0
-diff -Naur vim73.orig/src/testdir/test17.in vim73/src/testdir/test17.in
---- vim73.orig/src/testdir/test17.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test17.in	2012-11-01 20:35:47.000000000 +0000
-@@ -1,4 +1,6 @@
--Tests for "gf" on ${VAR}
-+Tests for:
-+- "gf" on ${VAR},
-+- ":checkpath!" with various 'include' settings.
- 
- STARTTEST
- :so small.vim
-@@ -20,8 +22,99 @@
- :endif
- gf
- :w! test.out
--:qa!
-+:brewind
- ENDTEST
- 
- 	${CDIR}/test17a.in
- 	$TDIR/test17a.in
-+
-+STARTTEST
-+:" check for 'include' without \zs or \ze
-+:lang C
-+:!rm -f ./Xbase.a
-+:!rm -rf ./Xdir1
-+:!mkdir -p Xdir1/dir2
-+:e Xdir1/dir2/foo.a
-+i#include   "bar.a"
-+:w
-+:e Xdir1/dir2/bar.a
-+i#include      "baz.a"
-+:w
-+:e Xdir1/dir2/baz.a
-+i#include            "foo.a"
-+:w
-+:e Xbase.a
-+:set path=Xdir1/dir2
-+i#include    <foo.a>
-+:w
-+:redir! >>test.out
-+:checkpath!
-+:redir END
-+:brewind
-+ENDTEST
-+
-+STARTTEST
-+:" check for 'include' with \zs and \ze
-+:!rm -f ./Xbase.b
-+:!rm -rf ./Xdir1
-+:!mkdir -p Xdir1/dir2
-+:let &include='^\s*%inc\s*/\zs[^/]\+\ze'
-+:function! DotsToSlashes()
-+:  return substitute(v:fname, '\.', '/', 'g') . '.b'
-+:endfunction
-+:let &includeexpr='DotsToSlashes()'
-+:e Xdir1/dir2/foo.b
-+i%inc   /bar/
-+:w
-+:e Xdir1/dir2/bar.b
-+i%inc      /baz/
-+:w
-+:e Xdir1/dir2/baz.b
-+i%inc            /foo/
-+:w
-+:e Xbase.b
-+:set path=Xdir1/dir2
-+i%inc    /foo/
-+:w
-+:redir! >>test.out
-+:checkpath!
-+:redir END
-+:brewind
-+ENDTEST
-+
-+STARTTEST
-+:" check for 'include' with \zs and no \ze
-+:!rm -f ./Xbase.c
-+:!rm -rf ./Xdir1
-+:!mkdir -p Xdir1/dir2
-+:let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
-+:function! StripNewlineChar()
-+:  if v:fname =~ '\n$'
-+:    return v:fname[:-2]
-+:  endif
-+:  return v:fname
-+:endfunction
-+:let &includeexpr='StripNewlineChar()'
-+:e Xdir1/dir2/foo.c
-+i%inc   bar.c
-+:w
-+:e Xdir1/dir2/bar.c
-+i%inc      baz.c
-+:w
-+:e Xdir1/dir2/baz.c
-+i%inc            foo.c
-+:w
-+:e Xdir1/dir2/FALSE.c
-+i%inc            foo.c
-+:w
-+:e Xbase.c
-+:set path=Xdir1/dir2
-+i%inc    FALSE.c foo.c
-+:w
-+:redir! >>test.out
-+:checkpath!
-+:redir END
-+:brewind
-+:q
-+ENDTEST
-+
-diff -Naur vim73.orig/src/testdir/test17.ok vim73/src/testdir/test17.ok
---- vim73.orig/src/testdir/test17.ok	2010-08-04 14:06:40.000000000 +0000
-+++ vim73/src/testdir/test17.ok	2012-11-01 20:35:47.000000000 +0000
-@@ -1,3 +1,33 @@
- This file is just to test "gf" in test 17.
- The contents is not important.
- Just testing!
-+
-+
-+--- Included files in path ---
-+Xdir1/dir2/foo.a
-+Xdir1/dir2/foo.a -->
-+  Xdir1/dir2/bar.a
-+  Xdir1/dir2/bar.a -->
-+    Xdir1/dir2/baz.a
-+    Xdir1/dir2/baz.a -->
-+      "foo.a"  (Already listed)
-+
-+
-+--- Included files in path ---
-+Xdir1/dir2/foo.b
-+Xdir1/dir2/foo.b -->
-+  Xdir1/dir2/bar.b
-+  Xdir1/dir2/bar.b -->
-+    Xdir1/dir2/baz.b
-+    Xdir1/dir2/baz.b -->
-+      foo  (Already listed)
-+
-+
-+--- Included files in path ---
-+Xdir1/dir2/foo.c
-+Xdir1/dir2/foo.c -->
-+  Xdir1/dir2/bar.c
-+  Xdir1/dir2/bar.c -->
-+    Xdir1/dir2/baz.c
-+    Xdir1/dir2/baz.c -->
-+      foo.c^@  (Already listed)
-diff -Naur vim73.orig/src/testdir/test19.in vim73/src/testdir/test19.in
---- vim73.orig/src/testdir/test19.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test19.in	2012-11-01 20:35:43.000000000 +0000
-@@ -1,6 +1,7 @@
- Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
- 
- STARTTEST
-+:so small.vim
- :set smarttab expandtab ts=8 sw=4
- :" make sure that backspace works, no matter what termcap is used
- :set t_kD=x7f t_kb=x08
-@@ -12,7 +13,10 @@
- 0wR			
- :" Test replacing with Tabs
- 0wR			
--:?^start?,$w! test.out
-+:" Test that copyindent works with expandtab set
-+:set expandtab smartindent copyindent ts=8 sw=8 sts=8
-+o{
-+x:?^start?,$w! test.out
- :qa!
- ENDTEST
- 
-diff -Naur vim73.orig/src/testdir/test19.ok vim73/src/testdir/test19.ok
---- vim73.orig/src/testdir/test19.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test19.ok	2012-11-01 20:35:43.000000000 +0000
-@@ -5,3 +5,5 @@
-     a cde
-     		hi
- test text
-+{
-+        x
-diff -Naur vim73.orig/src/testdir/test29.in vim73/src/testdir/test29.in
---- vim73.orig/src/testdir/test29.in	2010-08-01 13:38:24.000000000 +0000
-+++ vim73/src/testdir/test29.in	2012-11-01 20:35:46.000000000 +0000
-@@ -4,16 +4,17 @@
-  and with 'cpoptions' flag 'j' set or not
- 
- STARTTEST
-+:so small.vim
- :set nocompatible viminfo+=nviminfo
- :set nojoinspaces
- :set cpoptions-=j
- /firstline/
--j"tdGpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
-+j"td/^STARTTEST/-1
-+PJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
- j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
- j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
- j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
--j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjdG:?firstline?+1,$w! test.out
--:qa!
-+j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjd/STARTTEST/-2
- ENDTEST
- 
- firstline
-@@ -54,3 +55,148 @@
- hjkl iop!
- ert
- 
-+STARTTEST
-+/^{/+1
-+:set comments=s1:/*,mb:*,ex:*/,://
-+:set nojoinspaces fo=j
-+:set backspace=eol,start
-+:.,+3join
-+j4J
-+:.,+2join
-+j3J
-+:.,+2join
-+j3J
-+:.,+2join
-+jj3J
-+ENDTEST
-+
-+{
-+
-+/*
-+ * Make sure the previous comment leader is not removed.
-+ */
-+
-+/*
-+ * Make sure the previous comment leader is not removed.
-+ */
-+
-+// Should the next comment leader be left alone?
-+// Yes.
-+
-+// Should the next comment leader be left alone?
-+// Yes.
-+
-+/* Here the comment leader should be left intact. */
-+// And so should this one.
-+
-+/* Here the comment leader should be left intact. */
-+// And so should this one.
-+
-+if (condition) // Remove the next comment leader!
-+               // OK, I will.
-+    action();
-+
-+if (condition) // Remove the next comment leader!
-+               // OK, I will.
-+    action();
-+}
-+
-+STARTTEST
-+/^{/+1
-+:set comments=sO:*\ -,mO:*\ \ ,exO:*/
-+:set comments+=s1:/*,mb:*,ex:*/,://
-+:set comments+=s1:>#,mb:#,ex:#<,:<
-+:set cpoptions-=j joinspaces fo=j
-+:set backspace=eol,start
-+:.,+3join
-+j4J
-+:.,+8join
-+j9J
-+:.,+2join
-+j3J
-+:.,+2join
-+j3J
-+:.,+2join
-+jj3J
-+j:.,+2join
-+jj3J
-+j:.,+5join
-+j6J
-+oSome code!
-// Make sure backspacing does not remove this comment leader.0i
-+ENDTEST
-+
-+{
-+
-+/*
-+ * Make sure the previous comment leader is not removed.
-+ */
-+
-+/*
-+ * Make sure the previous comment leader is not removed.
-+ */
-+
-+/* List:
-+ * - item1
-+ *   foo bar baz
-+ *   foo bar baz
-+ * - item2
-+ *   foo bar baz
-+ *   foo bar baz
-+ */
-+
-+/* List:
-+ * - item1
-+ *   foo bar baz
-+ *   foo bar baz
-+ * - item2
-+ *   foo bar baz
-+ *   foo bar baz
-+ */
-+
-+// Should the next comment leader be left alone?
-+// Yes.
-+
-+// Should the next comment leader be left alone?
-+// Yes.
-+
-+/* Here the comment leader should be left intact. */
-+// And so should this one.
-+
-+/* Here the comment leader should be left intact. */
-+// And so should this one.
-+
-+if (condition) // Remove the next comment leader!
-+               // OK, I will.
-+    action();
-+
-+if (condition) // Remove the next comment leader!
-+               // OK, I will.
-+    action();
-+
-+int i = 7 /* foo *// 3
-+ // comment
-+ ;
-+
-+int i = 7 /* foo *// 3
-+ // comment
-+ ;
-+
-+># Note that the last character of the ending comment leader (left angle
-+ # bracket) is a comment leader itself. Make sure that this comment leader is
-+ # not removed from the next line #<
-+< On this line a new comment is opened which spans 2 lines. This comment should
-+< retain its comment leader.
-+
-+># Note that the last character of the ending comment leader (left angle
-+ # bracket) is a comment leader itself. Make sure that this comment leader is
-+ # not removed from the next line #<
-+< On this line a new comment is opened which spans 2 lines. This comment should
-+< retain its comment leader.
-+
-+}
-+
-+STARTTEST
-+:g/^STARTTEST/.,/^ENDTEST/d
-+:?firstline?+1,$w! test.out
-+:qa!
-+ENDTEST
-diff -Naur vim73.orig/src/testdir/test29.ok vim73/src/testdir/test29.ok
---- vim73.orig/src/testdir/test29.ok	2010-07-10 12:08:18.000000000 +0000
-+++ vim73/src/testdir/test29.ok	2012-11-01 20:35:46.000000000 +0000
-@@ -47,3 +47,42 @@
- asdfasdf 	asdf
- asdfasdf		asdf
- zx cvn.  as dfg? hjkl iop! ert  a
-+
-+
-+{
-+/* Make sure the previous comment leader is not removed. */
-+/* Make sure the previous comment leader is not removed. */
-+// Should the next comment leader be left alone? Yes.
-+// Should the next comment leader be left alone? Yes.
-+/* Here the comment leader should be left intact. */ // And so should this one.
-+/* Here the comment leader should be left intact. */ // And so should this one.
-+if (condition) // Remove the next comment leader! OK, I will.
-+    action();
-+if (condition) // Remove the next comment leader! OK, I will.
-+    action();
-+}
-+
-+
-+{
-+/* Make sure the previous comment leader is not removed.  */
-+/* Make sure the previous comment leader is not removed.  */
-+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
-+/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
-+// Should the next comment leader be left alone?  Yes.
-+// Should the next comment leader be left alone?  Yes.
-+/* Here the comment leader should be left intact. */ // And so should this one.
-+/* Here the comment leader should be left intact. */ // And so should this one.
-+if (condition) // Remove the next comment leader!  OK, I will.
-+    action();
-+if (condition) // Remove the next comment leader!  OK, I will.
-+    action();
-+int i = 7 /* foo *// 3 // comment
-+ ;
-+int i = 7 /* foo *// 3 // comment
-+ ;
-+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
-+># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
-+
-+Some code!// Make sure backspacing does not remove this comment leader.
-+}
-+
-diff -Naur vim73.orig/src/testdir/test3.in vim73/src/testdir/test3.in
---- vim73.orig/src/testdir/test3.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test3.in	2012-11-01 20:35:46.000000000 +0000
-@@ -299,18 +299,25 @@
- 
- enum soppie
- {
--	yes = 0,
--	no,
--	maybe
-+yes = 0,
-+no,
-+maybe
- };
- 
- typedef enum soppie
- {
--	yes = 0,
--	no,
--	maybe
-+yes = 0,
-+no,
-+maybe
- };
- 
-+static enum
-+{
-+yes = 0,
-+no,
-+maybe
-+} soppie;
-+
- {
- 	int a,
- 		b;
-@@ -799,6 +806,69 @@
- 	df */
- 		hello
- }
-+
-+/* valid namespaces with normal indent */
-+namespace
-+{
-+{
-+  111111111111;
-+}
-+}
-+namespace /* test */
-+{
-+  11111111111111111;
-+}
-+namespace // test
-+{
-+  111111111111111111;
-+}
-+namespace
-+{
-+  111111111111111111;
-+}
-+namespace test
-+{
-+  111111111111111111;
-+}
-+namespace{
-+  111111111111111111;
-+}
-+namespace test{
-+  111111111111111111;
-+}
-+namespace {
-+  111111111111111111;
-+}
-+namespace test {
-+  111111111111111111;
-+namespace test2 {
-+  22222222222222222;
-+}
-+}
-+
-+/* invalid namespaces use block indent */
-+namespace test test2 {
-+  111111111111111111111;
-+}
-+namespace11111111111 {
-+  111111111111;
-+}
-+namespace() {
-+  1111111111111;
-+}
-+namespace()
-+{
-+  111111111111111111;
-+}
-+namespace test test2
-+{
-+  1111111111111111111;
-+}
-+namespace111111111
-+{
-+  111111111111111111;
-+}
-+
- /* end of AUTO */
- 
- STARTTEST
-@@ -907,6 +977,24 @@
- 
- STARTTEST
- :set cin
-+:set cino=es,n0s
-+/main
-+=][
-+ENDTEST
-+
-+main(void)
-+{
-+	/* Make sure that cino=X0s is not parsed like cino=Xs. */
-+	if (cond)
-+		foo();
-+	else
-+	{
-+		bar();
-+	}
-+}
-+
-+STARTTEST
-+:set cin
- :set cino=
- ]]=][
- ENDTEST
-@@ -1246,6 +1334,20 @@
- };
- 
- STARTTEST
-+:set cino=(0,gs,hs
-+2kdd]]=][
-+ENDTEST
-+
-+class Foo : public Bar
-+{
-+public:
-+virtual void method1(void) = 0;
-+virtual void method2(int arg1,
-+int arg2,
-+int arg3) = 0;
-+};
-+
-+STARTTEST
- :set cino=+20
- 2kdd]]=][
- ENDTEST
-@@ -1315,6 +1417,626 @@
- }
- 
- STARTTEST
-+:set cino=(0,ts
-+2kdd=][
-+ENDTEST
-+
-+void func(int a
-+#if defined(FOO)
-+		  , int b
-+		  , int c
-+#endif
-+		 )
-+{
-+}
-+
-+STARTTEST
-+:set cino=(0
-+2kdd=][
-+ENDTEST
-+
-+void
-+func(int a
-+#if defined(FOO)
-+		  , int b
-+		  , int c
-+#endif
-+		 )
-+{
-+}
-+
-+STARTTEST
-+:set cino&
-+2kdd=7][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if(x==y)
-+		if(y==z)
-+			foo=1;
-+		else { bar=1;
-+			baz=2;
-+		}
-+	printf("Foo!\n");
-+}
-+
-+void func1(void)
-+{
-+	char* tab[] = {"foo", "bar",
-+		"baz", "quux",
-+			"this line used", "to be indented incorrectly"};
-+	foo();
-+}
-+
-+void func2(void)
-+{
-+	int tab[] =
-+	{1, 2,
-+		3, 4,
-+		5, 6};
-+
-+		printf("This line used to be indented incorrectly.\n");
-+}
-+
-+int foo[]
-+#ifdef BAR
-+
-+= { 1, 2, 3,
-+	4, 5, 6 }
-+
-+#endif
-+;
-+	int baz;
-+
-+void func3(void)
-+{
-+	int tab[] = {
-+	1, 2,
-+	3, 4,
-+	5, 6};
-+
-+printf("Don't you dare indent this line incorrectly!\n");
-+}
-+
-+void
-+func4(a, b,
-+		c)
-+int a;
-+int b;
-+int c;
-+{
-+}
-+
-+void
-+func5(
-+		int a,
-+		int b)
-+{
-+}
-+
-+void
-+func6(
-+		int a)
-+{
-+}
-+
-+STARTTEST
-+:set cino&
-+:set cino+=l1
-+2kdd=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	int tab[] =
-+	{
-+		1, 2, 3,
-+		4, 5, 6};
-+
-+	printf("Indent this line correctly!\n");
-+
-+	switch (foo)
-+	{
-+		case bar:
-+			printf("bar");
-+			break;
-+		case baz: {
-+			printf("baz");
-+			break;
-+		}
-+		case quux:
-+printf("But don't break the indentation of this instruction\n");
-+break;
-+	}
-+}
-+
-+STARTTEST
-+:set cino&
-+2kdd=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	cout << "a"
-+	<< "b"
-+	<< ") :"
-+	<< "c";
-+}
-+
-+STARTTEST
-+:set com=s1:/*,m:*,ex:*/
-+]]3jofoo();
-+ENDTEST
-+
-+void func(void)
-+{
-+	/*
-+	 * This is a comment.
-+	 */
-+}
-+
-+STARTTEST
-+:set cino&
-+2kdd=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	for (int i = 0; i < 10; ++i)
-+		if (i & 1) {
-+			foo(1);
-+		} else
-+			foo(0);
-+baz();
-+}
-+
-+STARTTEST
-+:set cino=k2s,(0
-+2kdd3j=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if (condition1
-+	&& condition2)
-+	action();
-+	function(argument1
-+	&& argument2);
-+
-+	if (c1 && (c2 ||
-+	c3))
-+	foo;
-+	if (c1 &&
-+	(c2 || c3))
-+	{
-+	}
-+
-+	if (   c1
-+	&& (      c2
-+	|| c3))
-+	foo;
-+	func( c1
-+	&& (     c2
-+	|| c3))
-+	foo;
-+}
-+
-+STARTTEST
-+:set cino=k2s,(s
-+2kdd3j=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if (condition1
-+	&& condition2)
-+	action();
-+	function(argument1
-+	&& argument2);
-+
-+	if (c1 && (c2 ||
-+	c3))
-+	foo;
-+	if (c1 &&
-+	(c2 || c3))
-+	{
-+	}
-+
-+	if (   c1
-+	&& (      c2
-+	|| c3))
-+	foo;
-+	func(   c1
-+	&& (      c2
-+	|| c3))
-+	foo;
-+}
-+
-+STARTTEST
-+:set cino=k2s,(s,U1
-+2kdd3j=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if (condition1
-+	&& condition2)
-+	action();
-+	function(argument1
-+	&& argument2);
-+
-+	if (c1 && (c2 ||
-+	c3))
-+	foo;
-+	if (c1 &&
-+	(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+	&& (c22345
-+	|| c3))
-+	printf("foo\n");
-+
-+	c = c1 &&
-+	(
-+	c2 ||
-+	c3
-+	) && c4;
-+}
-+
-+STARTTEST
-+:set cino=k2s,(0,W4
-+2kdd3j=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if (condition1
-+	&& condition2)
-+	action();
-+	function(argument1
-+	&& argument2);
-+
-+	if (c1 && (c2 ||
-+	c3))
-+	foo;
-+	if (c1 &&
-+	(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+	&& (c22345
-+	|| c3))
-+	printf("foo\n");
-+
-+	if (   c1
-+	&& (   c2
-+	|| c3))
-+	foo;
-+
-+	a_long_line(
-+	argument,
-+	argument);
-+	a_short_line(argument,
-+	argument);
-+}
-+
-+STARTTEST
-+:set cino=k2s,u2
-+2kdd3j=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if (condition1
-+	&& condition2)
-+	action();
-+	function(argument1
-+	&& argument2);
-+
-+	if (c1 && (c2 ||
-+	c3))
-+	foo;
-+	if (c1 &&
-+	(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+	&& (c22345
-+	|| c3))
-+	printf("foo\n");
-+}
-+
-+STARTTEST
-+:set cino=k2s,(0,w1
-+2kdd3j=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if (condition1
-+	&& condition2)
-+	action();
-+	function(argument1
-+	&& argument2);
-+
-+	if (c1 && (c2 ||
-+	c3))
-+	foo;
-+	if (c1 &&
-+	(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+	&& (c22345
-+	|| c3))
-+	printf("foo\n");
-+
-+	if (   c1
-+	&& (      c2
-+	|| c3))
-+	foo;
-+	func(   c1
-+	&& (      c2
-+	|| c3))
-+	foo;
-+}
-+
-+STARTTEST
-+:set cino=k2,(s
-+2kdd3j=][
-+ENDTEST
-+
-+void func(void)
-+{
-+	if (condition1
-+	  && condition2)
-+		action();
-+	function(argument1
-+		&& argument2);
-+
-+	if (c1 && (c2 ||
-+		  c3))
-+		foo;
-+	if (c1 &&
-+	  (c2 || c3))
-+	{
-+	}
-+}
-+
-+STARTTEST
-+:set cino=N-s
-+/^NAMESPACESTART
-+=/^NAMESPACEEND
-+ENDTEST
-+
-+NAMESPACESTART
-+/* valid namespaces with normal indent */
-+namespace
-+{
-+   {
-+	111111111111;
-+}
-+}
-+namespace /* test */
-+{
-+  11111111111111111;
-+}
-+namespace // test
-+{
-+  111111111111111111;
-+}
-+namespace
-+{
-+  111111111111111111;
-+}
-+namespace test
-+{
-+  111111111111111111;
-+}
-+namespace{
-+  111111111111111111;
-+}
-+namespace test{
-+  111111111111111111;
-+}
-+namespace {
-+  111111111111111111;
-+}
-+namespace test {
-+  111111111111111111;
-+namespace test2 {
-+  22222222222222222;
-+}
-+}
-+
-+/* invalid namespaces use block indent */
-+namespace test test2 {
-+  111111111111111111111;
-+}
-+namespace11111111111 {
-+  111111111111;
-+}
-+namespace() {
-+  1111111111111;
-+}
-+namespace()
-+{
-+  111111111111111111;
-+}
-+namespace test test2
-+{
-+  1111111111111111111;
-+}
-+namespace111111111
-+{
-+  111111111111111111;
-+}
-+NAMESPACEEND
-+
-+
-+STARTTEST
-+:set cino=j1,J1
-+/^JSSTART
-+=/^JSEND
-+ENDTEST
-+
-+JSSTART
-+var bar = {
-+foo: {
-+that: this,
-+some: ok,
-+},
-+"bar":{
-+a : 2,
-+b: "123abc",
-+x: 4,
-+"y": 5
-+}
-+}
-+JSEND
-+
-+STARTTEST
-+:set cino=j1,J1
-+/^JSSTART
-+=/^JSEND
-+ENDTEST
-+
-+JSSTART
-+var foo = [
-+1,  // indent 8 more
-+2,
-+3
-+];  // indent 8 less
-+JSEND
-+
-+STARTTEST
-+:set cino=j1,J1
-+/^JSSTART
-+=/^JSEND
-+ENDTEST
-+
-+JSSTART
-+function bar() {
-+var foo = [
-+1,
-+2,
-+3
-+];  // indent 16 less
-+}
-+JSEND
-+
-+STARTTEST
-+:set cino=j1,J1
-+/^JSSTART
-+=/^JSEND
-+ENDTEST
-+
-+JSSTART
-+(function($){
-+
-+var class_name='myclass';
-+
-+function private_method() {
-+}
-+
-+var public_method={
-+method: function(options,args){
-+private_method();
-+}
-+}
-+
-+function init(options) {
-+
-+$(this).data(class_name+'_public',$.extend({},{
-+foo: 'bar',
-+bar: 2,  // indent 8 more
-+foobar: [  // indent 8 more
-+1,  // indent 8 more
-+2,  // indent 16 more
-+3   // indent 16 more
-+],
-+callback: function(){  // indent 8 more
-+return true;  // indent 8 more
-+}  // indent 8 more
-+}, options||{}));
-+}
-+
-+$.fn[class_name]=function() {
-+
-+var _arguments=arguments;
-+return this.each(function(){
-+
-+var options=$(this).data(class_name+'_public');
-+if (!options) {
-+init.apply(this,_arguments);
-+
-+} else {
-+var method=public_method[_arguments[0]];
-+
-+if (typeof(method)!='function') {
-+console.log(class_name+' has no method "'+_arguments[0]+'"');
-+return false;
-+}
-+_arguments[0]=options;
-+method.apply(this,_arguments);
-+}
-+});
-+}
-+
-+})(jQuery);
-+JSEND
-+
-+STARTTEST
-+:set cino=j1,J1
-+/^JSSTART
-+=/^JSEND
-+ENDTEST
-+
-+JSSTART
-+function init(options) {
-+$(this).data(class_name+'_public',$.extend({},{
-+foo: 'bar',
-+bar: 2,
-+foobar: [
-+1,  // indent 8 more
-+2,  // indent 8 more
-+3   // indent 8 more
-+],
-+callback: function(){
-+return true;
-+}
-+}, options||{}));
-+}
-+JSEND
-+
-+STARTTEST
-+:set cino=j1,J1
-+/^JSSTART
-+=/^JSEND
-+ENDTEST
-+
-+JSSTART
-+(function($){
-+function init(options) {
-+$(this).data(class_name+'_public',$.extend({},{
-+foo: 'bar',
-+bar: 2,  // indent 8 more
-+foobar: [  // indent 8 more
-+1,  // indent 8 more
-+2,  // indent 16 more
-+3  // indent 16 more
-+],
-+callback: function(){  // indent 8 more
-+return true;  // indent 8 more
-+}  // indent 8 more
-+}, options||{}));
-+}
-+})(jQuery);
-+JSEND
-+
-+STARTTEST
- :g/^STARTTEST/.,/^ENDTEST/d
- :1;/start of AUTO/,$wq! test.out
- ENDTEST
-diff -Naur vim73.orig/src/testdir/test3.ok vim73/src/testdir/test3.ok
---- vim73.orig/src/testdir/test3.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test3.ok	2012-11-01 20:35:46.000000000 +0000
-@@ -299,6 +299,13 @@
- 	maybe
- };
- 
-+static enum
-+{
-+	yes = 0,
-+	no,
-+	maybe
-+} soppie;
-+
- {
- 	int a,
- 		b;
-@@ -787,6 +794,69 @@
- 	   df */
- 	hello
- }
-+
-+/* valid namespaces with normal indent */
-+namespace
-+{
-+	{
-+		111111111111;
-+	}
-+}
-+namespace /* test */
-+{
-+	11111111111111111;
-+}
-+namespace // test
-+{
-+	111111111111111111;
-+}
-+namespace
-+{
-+	111111111111111111;
-+}
-+namespace test
-+{
-+	111111111111111111;
-+}
-+namespace{
-+	111111111111111111;
-+}
-+namespace test{
-+	111111111111111111;
-+}
-+namespace {
-+	111111111111111111;
-+}
-+namespace test {
-+	111111111111111111;
-+	namespace test2 {
-+		22222222222222222;
-+	}
-+}
-+
-+/* invalid namespaces use block indent */
-+namespace test test2 {
-+	111111111111111111111;
-+}
-+namespace11111111111 {
-+	111111111111;
-+}
-+namespace() {
-+	1111111111111;
-+}
-+namespace()
-+{
-+	111111111111111111;
-+}
-+namespace test test2
-+{
-+	1111111111111111111;
-+}
-+namespace111111111
-+{
-+	111111111111111111;
-+}
-+
- /* end of AUTO */
- 
- 
-@@ -870,6 +940,18 @@
- }
- 
- 
-+main(void)
-+{
-+	/* Make sure that cino=X0s is not parsed like cino=Xs. */
-+	if (cond)
-+		foo();
-+	else
-+	{
-+		bar();
-+	}
-+}
-+
-+
- {
- 	do
- 	{
-@@ -1127,6 +1209,16 @@
- };
- 
- 
-+class Foo : public Bar
-+{
-+	public:
-+		virtual void method1(void) = 0;
-+		virtual void method2(int arg1,
-+							 int arg2,
-+							 int arg3) = 0;
-+};
-+
-+
- 	void
- foo()
- {
-@@ -1183,3 +1275,532 @@
- 		foo;
- }
- 
-+
-+void func(int a
-+#if defined(FOO)
-+		  , int b
-+		  , int c
-+#endif
-+		 )
-+{
-+}
-+
-+
-+	void
-+func(int a
-+#if defined(FOO)
-+	 , int b
-+	 , int c
-+#endif
-+	)
-+{
-+}
-+
-+
-+void func(void)
-+{
-+	if(x==y)
-+		if(y==z)
-+			foo=1;
-+		else { bar=1;
-+			baz=2;
-+		}
-+	printf("Foo!\n");
-+}
-+
-+void func1(void)
-+{
-+	char* tab[] = {"foo", "bar",
-+		"baz", "quux",
-+		"this line used", "to be indented incorrectly"};
-+	foo();
-+}
-+
-+void func2(void)
-+{
-+	int tab[] =
-+	{1, 2,
-+		3, 4,
-+		5, 6};
-+
-+	printf("This line used to be indented incorrectly.\n");
-+}
-+
-+int foo[]
-+#ifdef BAR
-+
-+= { 1, 2, 3,
-+	4, 5, 6 }
-+
-+#endif
-+	;
-+int baz;
-+
-+void func3(void)
-+{
-+	int tab[] = {
-+		1, 2,
-+		3, 4,
-+		5, 6};
-+
-+	printf("Don't you dare indent this line incorrectly!\n");
-+}
-+
-+	void
-+func4(a, b,
-+		c)
-+	int a;
-+	int b;
-+	int c;
-+{
-+}
-+
-+	void
-+func5(
-+		int a,
-+		int b)
-+{
-+}
-+
-+	void
-+func6(
-+		int a)
-+{
-+}
-+
-+
-+void func(void)
-+{
-+	int tab[] =
-+	{
-+		1, 2, 3,
-+		4, 5, 6};
-+
-+	printf("Indent this line correctly!\n");
-+
-+	switch (foo)
-+	{
-+		case bar:
-+			printf("bar");
-+			break;
-+		case baz: {
-+			printf("baz");
-+			break;
-+		}
-+		case quux:
-+			printf("But don't break the indentation of this instruction\n");
-+			break;
-+	}
-+}
-+
-+
-+void func(void)
-+{
-+	cout << "a"
-+		<< "b"
-+		<< ") :"
-+		<< "c";
-+}
-+
-+
-+void func(void)
-+{
-+	/*
-+	 * This is a comment.
-+	 */
-+	foo();
-+}
-+
-+
-+void func(void)
-+{
-+	for (int i = 0; i < 10; ++i)
-+		if (i & 1) {
-+			foo(1);
-+		} else
-+			foo(0);
-+	baz();
-+}
-+
-+
-+void func(void)
-+{
-+	if (condition1
-+			&& condition2)
-+		action();
-+	function(argument1
-+			 && argument2);
-+
-+	if (c1 && (c2 ||
-+				c3))
-+		foo;
-+	if (c1 &&
-+			(c2 || c3))
-+	{
-+	}
-+
-+	if (   c1
-+			&& (      c2
-+					  || c3))
-+		foo;
-+	func( c1
-+		  && (     c2
-+				   || c3))
-+		foo;
-+}
-+
-+
-+void func(void)
-+{
-+	if (condition1
-+			&& condition2)
-+		action();
-+	function(argument1
-+		&& argument2);
-+
-+	if (c1 && (c2 ||
-+				c3))
-+		foo;
-+	if (c1 &&
-+			(c2 || c3))
-+	{
-+	}
-+
-+	if (   c1
-+			&& (      c2
-+				|| c3))
-+		foo;
-+	func(   c1
-+		&& (      c2
-+			|| c3))
-+		foo;
-+}
-+
-+
-+void func(void)
-+{
-+	if (condition1
-+			&& condition2)
-+		action();
-+	function(argument1
-+		&& argument2);
-+
-+	if (c1 && (c2 ||
-+				c3))
-+		foo;
-+	if (c1 &&
-+			(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+			&& (c22345
-+				|| c3))
-+		printf("foo\n");
-+
-+	c = c1 &&
-+		(
-+			c2 ||
-+			c3
-+		) && c4;
-+}
-+
-+
-+void func(void)
-+{
-+	if (condition1
-+			&& condition2)
-+		action();
-+	function(argument1
-+			 && argument2);
-+
-+	if (c1 && (c2 ||
-+				c3))
-+		foo;
-+	if (c1 &&
-+			(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+			&& (c22345
-+				|| c3))
-+		printf("foo\n");
-+
-+	if (   c1
-+			&& (   c2
-+				   || c3))
-+		foo;
-+
-+	a_long_line(
-+		argument,
-+		argument);
-+	a_short_line(argument,
-+				 argument);
-+}
-+
-+
-+void func(void)
-+{
-+	if (condition1
-+			&& condition2)
-+		action();
-+	function(argument1
-+			&& argument2);
-+
-+	if (c1 && (c2 ||
-+			  c3))
-+		foo;
-+	if (c1 &&
-+			(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+			&& (c22345
-+			  || c3))
-+		printf("foo\n");
-+}
-+
-+
-+void func(void)
-+{
-+	if (condition1
-+			&& condition2)
-+		action();
-+	function(argument1
-+			 && argument2);
-+
-+	if (c1 && (c2 ||
-+				c3))
-+		foo;
-+	if (c1 &&
-+			(c2 || c3))
-+	{
-+	}
-+	if (c123456789
-+			&& (c22345
-+				|| c3))
-+		printf("foo\n");
-+
-+	if (   c1
-+			&& (      c2
-+				|| c3))
-+		foo;
-+	func(   c1
-+		 && (      c2
-+			 || c3))
-+		foo;
-+}
-+
-+
-+void func(void)
-+{
-+	if (condition1
-+	  && condition2)
-+		action();
-+	function(argument1
-+		&& argument2);
-+
-+	if (c1 && (c2 ||
-+		  c3))
-+		foo;
-+	if (c1 &&
-+	  (c2 || c3))
-+	{
-+	}
-+}
-+
-+
-+NAMESPACESTART
-+/* valid namespaces with normal indent */
-+namespace
-+{
-+{
-+	111111111111;
-+}
-+}
-+namespace /* test */
-+{
-+11111111111111111;
-+}
-+namespace // test
-+{
-+111111111111111111;
-+}
-+namespace
-+{
-+111111111111111111;
-+}
-+namespace test
-+{
-+111111111111111111;
-+}
-+namespace{
-+111111111111111111;
-+}
-+namespace test{
-+111111111111111111;
-+}
-+namespace {
-+111111111111111111;
-+}
-+namespace test {
-+111111111111111111;
-+namespace test2 {
-+22222222222222222;
-+}
-+}
-+
-+/* invalid namespaces use block indent */
-+namespace test test2 {
-+	111111111111111111111;
-+}
-+namespace11111111111 {
-+	111111111111;
-+}
-+namespace() {
-+	1111111111111;
-+}
-+namespace()
-+{
-+	111111111111111111;
-+}
-+namespace test test2
-+{
-+	1111111111111111111;
-+}
-+namespace111111111
-+{
-+	111111111111111111;
-+}
-+NAMESPACEEND
-+
-+
-+
-+JSSTART
-+var bar = {
-+	foo: {
-+		that: this,
-+		some: ok,
-+	},
-+	"bar":{
-+		a : 2,
-+		b: "123abc",
-+		x: 4,
-+		"y": 5
-+	}
-+}
-+JSEND
-+
-+
-+JSSTART
-+var foo = [
-+1,  // indent 8 more
-+	2,
-+	3
-+	];  // indent 8 less
-+JSEND
-+
-+
-+JSSTART
-+function bar() {
-+	var foo = [
-+		1,
-+		2,
-+		3
-+			];  // indent 16 less
-+}
-+JSEND
-+
-+
-+JSSTART
-+(function($){
-+
-+	var class_name='myclass';
-+
-+	function private_method() {
-+	}
-+
-+	var public_method={
-+		method: function(options,args){
-+			private_method();
-+		}
-+	}
-+
-+	function init(options) {
-+
-+		$(this).data(class_name+'_public',$.extend({},{
-+			foo: 'bar',
-+		bar: 2,  // indent 8 more
-+		foobar: [  // indent 8 more
-+			1,  // indent 8 more
-+		2,  // indent 16 more
-+		3   // indent 16 more
-+			],
-+		callback: function(){  // indent 8 more
-+			return true;  // indent 8 more
-+		}  // indent 8 more
-+		}, options||{}));
-+	}
-+
-+	$.fn[class_name]=function() {
-+
-+		var _arguments=arguments;
-+		return this.each(function(){
-+
-+			var options=$(this).data(class_name+'_public');
-+			if (!options) {
-+				init.apply(this,_arguments);
-+
-+			} else {
-+				var method=public_method[_arguments[0]];
-+
-+				if (typeof(method)!='function') {
-+					console.log(class_name+' has no method "'+_arguments[0]+'"');
-+					return false;
-+				}
-+				_arguments[0]=options;
-+				method.apply(this,_arguments);
-+			}
-+		});
-+	}
-+
-+})(jQuery);
-+JSEND
-+
-+
-+JSSTART
-+function init(options) {
-+	$(this).data(class_name+'_public',$.extend({},{
-+		foo: 'bar',
-+		bar: 2,
-+		foobar: [
-+		1,  // indent 8 more
-+		2,  // indent 8 more
-+		3   // indent 8 more
-+		],
-+		callback: function(){
-+			return true;
-+		}
-+	}, options||{}));
-+}
-+JSEND
-+
-+
-+JSSTART
-+(function($){
-+	function init(options) {
-+		$(this).data(class_name+'_public',$.extend({},{
-+			foo: 'bar',
-+		bar: 2,  // indent 8 more
-+		foobar: [  // indent 8 more
-+			1,  // indent 8 more
-+		2,  // indent 16 more
-+		3  // indent 16 more
-+			],
-+		callback: function(){  // indent 8 more
-+			return true;  // indent 8 more
-+		}  // indent 8 more
-+		}, options||{}));
-+	}
-+})(jQuery);
-+JSEND
-+
-diff -Naur vim73.orig/src/testdir/test31.in vim73/src/testdir/test31.in
---- vim73.orig/src/testdir/test31.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test31.in	2012-11-01 20:35:45.000000000 +0000
-@@ -63,6 +63,12 @@
- :" write "testtext 1"
- A 3:close!
- :w >>test.out
-+:set nohidden
-+:" test ":all!" hides changed buffer; write "testtext 2 2 2"
-+:sp Xtest4
-+GA 4:all!
-+:1wincmd w
-+:w >>test.out
- :qa!
- ENDTEST
- 
-diff -Naur vim73.orig/src/testdir/test31.ok vim73/src/testdir/test31.ok
---- vim73.orig/src/testdir/test31.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test31.ok	2012-11-01 20:35:45.000000000 +0000
-@@ -9,3 +9,4 @@
- testtext 1
- testtext 3 3 3
- testtext 1
-+testtext 2 2 2
-diff -Naur vim73.orig/src/testdir/test34.in vim73/src/testdir/test34.in
---- vim73.orig/src/testdir/test34.in	2010-05-29 13:09:55.000000000 +0000
-+++ vim73/src/testdir/test34.in	2012-11-01 20:35:47.000000000 +0000
-@@ -1,5 +1,6 @@
- Test for user functions.
- Also test an <expr> mapping calling a function.
-+Also test that a builtin function cannot be replaced.
- 
- STARTTEST
- :so small.vim
-@@ -58,7 +59,10 @@
- ---*---
- (one
- (two
--[(one again:$-5,$w! test.out
-+[(one again:call append(line('$'), max([1, 2, 3]))
-+:call extend(g:, {'max': function('min')})
-+:call append(line('$'), max([1, 2, 3]))
-+:$-7,$w! test.out
- :delfunc Table
- :delfunc Compute
- :delfunc Expr1
-diff -Naur vim73.orig/src/testdir/test34.ok vim73/src/testdir/test34.ok
---- vim73.orig/src/testdir/test34.ok	2010-05-29 13:11:12.000000000 +0000
-+++ vim73/src/testdir/test34.ok	2012-11-01 20:35:47.000000000 +0000
-@@ -1,6 +1,8 @@
- xxx4asdf fail nop ok 9 333
--XX111XX
-+XX111-XX
- ---222---
- 1. one
- 2. two
- 1. one again
-+3
-+3
-diff -Naur vim73.orig/src/testdir/test43.in vim73/src/testdir/test43.in
---- vim73.orig/src/testdir/test43.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test43.in	2012-11-01 20:35:44.000000000 +0000
-@@ -1,6 +1,7 @@
- Tests for regexp with various magic settings.
- 
- STARTTEST
-+:so small.vim
- :set nocompatible viminfo+=nviminfo
- /^1
- /a*b\{2}c\+/e
-@@ -13,7 +14,11 @@
- x:set magic
- /\v(a)(b)\2\1\1/e
- x/\V[ab]\(\[xy]\)\1
--x:?^1?,$w! test.out
-+x:$
-+:set undolevels=100
-+dv?bar?
-+Yup:"
-+:?^1?,$w! test.out
- :qa!
- ENDTEST
- 
-@@ -25,3 +30,5 @@
- 6 x ^aa$ x
- 7 (a)(b) abbaa
- 8 axx [ab]xx
-+9 foobar
-+
-diff -Naur vim73.orig/src/testdir/test43.ok vim73/src/testdir/test43.ok
---- vim73.orig/src/testdir/test43.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test43.ok	2012-11-01 20:35:44.000000000 +0000
-@@ -6,3 +6,6 @@
- 6 x aa$ x
- 7 (a)(b) abba
- 8 axx ab]xx
-+9 foobar
-+9 foo
-+
-diff -Naur vim73.orig/src/testdir/test44.in vim73/src/testdir/test44.in
---- vim73.orig/src/testdir/test44.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test44.in	2012-11-01 20:35:43.000000000 +0000
-@@ -27,6 +27,8 @@
- x/\%U12345678
- x/[\U1234abcd\u1234\uabcd]
- x/\%d21879b
-+x/ [[=A=]]* [[=B=]]* [[=C=]]* [[=D=]]* [[=E=]]* [[=F=]]* [[=G=]]* [[=H=]]* [[=I=]]* [[=J=]]* [[=K=]]* [[=L=]]* [[=M=]]* [[=N=]]* [[=O=]]* [[=P=]]* [[=Q=]]* [[=R=]]* [[=S=]]* [[=T=]]* [[=U=]]* [[=V=]]* [[=W=]]* [[=X=]]* [[=Y=]]* [[=Z=]]*/e
-+x/ [[=a=]]* [[=b=]]* [[=c=]]* [[=d=]]* [[=e=]]* [[=f=]]* [[=g=]]* [[=h=]]* [[=i=]]* [[=j=]]* [[=k=]]* [[=l=]]* [[=m=]]* [[=n=]]* [[=o=]]* [[=p=]]* [[=q=]]* [[=r=]]* [[=s=]]* [[=t=]]* [[=u=]]* [[=v=]]* [[=w=]]* [[=x=]]* [[=y=]]* [[=z=]]*/e
- x:?^1?,$w! test.out
- :e! test.out
- G:put =matchstr(\"××××\", \".\", 0, 2) " ×
-@@ -53,3 +55,5 @@
- e ü
-žy
- f ü¯z
- g aå·bb
-+h AÃÃÃÃÃÃ
-ÄÄÄÇÇÇ áº¢ Bážáž CÃÄÄÄÄ DÄÄážážáž EÃÃÃÃÄÄÄÄÄáººáºŒ Fáž GÄÄÄ Ä¢Ç€ÇŠÇŽáž  HÄ€ÄŠáž¢ážŠážš IÃÃÃÃÄšÄªÄ¬Ä®Ä°Çá» JÄŽ KÄ¶Çšáž°ážŽ LÄ¹Ä»ÄœÄ¿Åážº MážŸá¹ NÃÅÅ
-Åá¹á¹ OÃÃÃÃÃÃÅÅÅÆ ÇÇªÇ¬á» Pá¹á¹ Q RÅÅÅá¹á¹ SÅÅÅÅ á¹  TÅ¢Å€ÅŠá¹ªá¹® UÃÃÃÃÅšÅªÅ¬Å®Å°Å²Æ¯Çá»Š Vá¹Œ WÅŽáºáºáºáº Xáºáº YÃÅ¶Åžáºá»²á»¶á»ž ZÅ¹Å»ÅœÆµáºáº
-+i aÃ Ã¡Ã¢Ã£Ã€Ã¥ÄÄÄ
-ÇÇÇ¡áº£ bážáž cÃ§ÄÄÄÄ dÄÄážážáž eÃšÃ©ÃªÃ«ÄÄÄÄÄáº»áºœ fáž gÄÄÄ¡Ä£Ç¥Ç§Çµáž¡ hÄ¥Ä§áž£áž§áž©áº iÃ¬Ã­Ã®Ã¯Ä©Ä«Ä­Ä¯Çá» jÄµÇ° kÄ·Ç©áž±ážµ lÄºÄŒÄŸÅÅáž» máž¿á¹ nÃ±ÅÅÅÅá¹
-á¹ oÃ²Ã³ÃŽÃµÃ¶ÃžÅÅÅÆ¡ÇÇ«Ç­á» pá¹á¹ q rÅÅÅá¹á¹ sÅÅÅÅ¡á¹¡ tÅ£Å¥Å§á¹«á¹¯áº uÃ¹ÃºÃ»ÃŒÅ©Å«Å­Å¯Å±Å³Æ°Çá»§ vá¹œ wÅµáºáºáº
-áºáº xáºáº yÃœÃ¿Å·áºáºá»³á»·á»¹ zÅºÅŒÅŸÆ¶áºáº
-diff -Naur vim73.orig/src/testdir/test44.ok vim73/src/testdir/test44.ok
---- vim73.orig/src/testdir/test44.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test44.ok	2012-11-01 20:35:43.000000000 +0000
-@@ -14,6 +14,8 @@
- e y
- f z
- g abb
-+h AÃÃÃÃÃÃ
-ÄÄÄÇÇÇ áº¢ Bážáž CÃÄÄÄÄ DÄÄážážáž EÃÃÃÃÄÄÄÄÄáººáºŒ Fáž GÄÄÄ Ä¢Ç€ÇŠÇŽáž  HÄ€ÄŠáž¢ážŠážš IÃÃÃÃÄšÄªÄ¬Ä®Ä°Çá» JÄŽ KÄ¶Çšáž°ážŽ LÄ¹Ä»ÄœÄ¿Åážº MážŸá¹ NÃÅÅ
-Åá¹á¹ OÃÃÃÃÃÃÅÅÅÆ ÇÇªÇ¬á» Pá¹á¹ Q RÅÅÅá¹á¹ SÅÅÅÅ á¹  TÅ¢Å€ÅŠá¹ªá¹® UÃÃÃÃÅšÅªÅ¬Å®Å°Å²Æ¯Çá»Š Vá¹Œ WÅŽáºáºáºáº Xáºáº YÃÅ¶Åžáºá»²á»¶á»ž ZÅ¹Å»ÅœÆµáº
-+i aÃ Ã¡Ã¢Ã£Ã€Ã¥ÄÄÄ
-ÇÇÇ¡áº£ bážáž cÃ§ÄÄÄÄ dÄÄážážáž eÃšÃ©ÃªÃ«ÄÄÄÄÄáº»áºœ fáž gÄÄÄ¡Ä£Ç¥Ç§Çµáž¡ hÄ¥Ä§áž£áž§áž©áº iÃ¬Ã­Ã®Ã¯Ä©Ä«Ä­Ä¯Çá» jÄµÇ° kÄ·Ç©áž±ážµ lÄºÄŒÄŸÅÅáž» máž¿á¹ nÃ±ÅÅÅÅá¹
-á¹ oÃ²Ã³ÃŽÃµÃ¶ÃžÅÅÅÆ¡ÇÇ«Ç­á» pá¹á¹ q rÅÅÅá¹á¹ sÅÅÅÅ¡á¹¡ tÅ£Å¥Å§á¹«á¹¯áº uÃ¹ÃºÃ»ÃŒÅ©Å«Å­Å¯Å±Å³Æ°Çá»§ vá¹œ wÅµáºáºáº
-áºáº xáºáº yÃœÃ¿Å·áºáºá»³á»·á»¹ zÅºÅŒÅŸÆ¶áº
- ×
- ××
- ×
-diff -Naur vim73.orig/src/testdir/test47.in vim73/src/testdir/test47.in
---- vim73.orig/src/testdir/test47.in	2010-07-25 11:39:45.000000000 +0000
-+++ vim73/src/testdir/test47.in	2012-11-01 20:35:48.000000000 +0000
-@@ -36,7 +36,22 @@
- :call append("$", two)
- :call append("$", three)
- :$-2,$w! test.out
--:unlet one two three
-+:" Test that diffing shows correct filler lines
-+:diffoff!
-+:windo :bw!
-+:enew
-+:put =range(4,10)
-+:1d _
-+:vnew
-+:put =range(1,10)
-+:1d _
-+:windo :diffthis
-+:wincmd h
-+:let w0=line('w0')
-+:enew
-+:put =w0
-+:.w >> test.out
-+:unlet! one two three w0
- :qa!
- ENDTEST
- 
-diff -Naur vim73.orig/src/testdir/test47.ok vim73/src/testdir/test47.ok
---- vim73.orig/src/testdir/test47.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test47.ok	2012-11-01 20:35:48.000000000 +0000
-@@ -1,3 +1,4 @@
- 2-4-5-6-8-9
- 1-2-4-5-8
- 2-3-4-5-6-7-8
-+1
-diff -Naur vim73.orig/src/testdir/test49.vim vim73/src/testdir/test49.vim
---- vim73.orig/src/testdir/test49.vim	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test49.vim	2012-11-01 20:35:39.000000000 +0000
-@@ -1,6 +1,6 @@
- " Vim script language tests
- " Author:	Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
--" Last Change:	2006 Apr 28
-+" Last Change:	2010 Sep 29
- 
- "-------------------------------------------------------------------------------
- " Test environment							    {{{1
-@@ -8711,7 +8711,7 @@
- 		endif
- 	    else
- 		if cmd == "let"
--		    let match = MATCH(0, thrmsg, 'E106', "Unknown variable")
-+		    let match = MATCH(0, thrmsg, 'E121', "Undefined variable")
- 		elseif cmd == "unlet"
- 		    let match = MATCH(0, thrmsg, 'E108', "No such variable")
- 		endif
-diff -Naur vim73.orig/src/testdir/test53.in vim73/src/testdir/test53.in
---- vim73.orig/src/testdir/test53.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test53.in	2012-11-01 20:35:48.000000000 +0000
-@@ -28,6 +28,23 @@
- :put =matchstr(\"abcd\", \".\", 0, -1) " a
- :put =match(\"abcd\", \".\", 0, 5) " -1
- :put =match(\"abcd\", \".\", 0, -1) " 0
-+/^foobar
-+gncsearchmatch/one\_s*two\_s
-+:1
-+gnd
-+/[a]bcdx
-+:1
-+2gnd/join
-+/$
-+0gnd
-+/\>\zs
-+0gnd/^
-+gnd$h/\zs
-+gnd/[u]niquepattern/s
-+vlgnd
-+/mother
-+:set selection=exclusive
-+$cgNmongoose
- :/^start:/,/^end:/wq! test.out
- ENDTEST
- 
-@@ -45,4 +62,15 @@
- -<b>asdf<i>Xasdf</i>asdf</b>-
- -<b>asdX<i>as<b />df</i>asdf</b>-
- </begin>
-+SEARCH:
-+foobar
-+one
-+two
-+abcdx | abcdx | abcdx
-+join 
-+lines
-+zero width pattern
-+delete first and last chars
-+uniquepattern uniquepattern
-+my very excellent mother just served us nachos
- end:
-diff -Naur vim73.orig/src/testdir/test53.ok vim73/src/testdir/test53.ok
---- vim73.orig/src/testdir/test53.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test53.ok	2012-11-01 20:35:48.000000000 +0000
-@@ -18,4 +18,12 @@
- a
- -1
- 0
-+SEARCH:
-+searchmatch
-+abcdx |  | abcdx
-+join lines
-+zerowidth pattern
-+elete first and last char
-+ uniquepattern
-+my very excellent mongoose just served us nachos
- end:
-diff -Naur vim73.orig/src/testdir/test55.in vim73/src/testdir/test55.in
---- vim73.orig/src/testdir/test55.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test55.in	2012-11-01 20:35:48.000000000 +0000
-@@ -342,13 +342,52 @@
- :$put =(d == d)
- :$put =(l != deepcopy(l))
- :$put =(d != deepcopy(d))
-+:"
-+:" compare complex recursively linked list and dict
-+:let l = []
-+:call add(l, l)
-+:let dict4 = {"l": l}
-+:call add(dict4.l, dict4)
-+:let lcopy = deepcopy(l)
-+:let dict4copy = deepcopy(dict4)
-+:$put =(l == lcopy)
-+:$put =(dict4 == dict4copy)
-+:"
-+:" Pass the same List to extend()
-+:let l = [1, 2, 3, 4, 5]
-+:call extend(l, l)
-+:$put =string(l)
-+:"
-+:" Pass the same Dict to extend()
-+:let d = { 'a': {'b': 'B'}}
-+:call extend(d, d)
-+:$put =string(d)
-+:"
-+:" Pass the same Dict to extend() with "error"
-+:try
-+:  call extend(d, d, "error")
-+:catch
-+:  $put =v:exception[:15] . v:exception[-1:-1]
-+:endtry
-+:$put =string(d)
- :endfun
-+:"
- :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
- :"
- :delfunc Test
- :unlet dict
- :call garbagecollect(1)
- :"
-+:" test for patch 7.3.637
-+:let a = 'No error caught'
-+:try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
-+o=a
-:"
-+:lang C
-+:redir => a
-+:try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
-+:redir END
-+o=a
-:"
-+:"
- :/^start:/,$wq! test.out
- ENDTEST
- 
-diff -Naur vim73.orig/src/testdir/test55.ok vim73/src/testdir/test55.ok
---- vim73.orig/src/testdir/test55.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test55.ok	2012-11-01 20:35:48.000000000 +0000
-@@ -109,3 +109,15 @@
- 1
- 0
- 0
-+1
-+1
-+[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
-+{'a': {'b': 'B'}}
-+Vim(call):E737: a
-+{'a': {'b': 'B'}}
-+Vim(foldopen):E490:
-+
-+
-+Error detected while processing :
-+E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
-+
-diff -Naur vim73.orig/src/testdir/test57.in vim73/src/testdir/test57.in
---- vim73.orig/src/testdir/test57.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test57.in	2012-11-01 20:35:39.000000000 +0000
-@@ -53,15 +53,19 @@
- t02: numeric
- abc
- ab
--a
- a321
- a123
- a122
-+a
-+x-22
- b321
- b123
-+
- c123d
-+-24
-  123b
- c321d
-+0
- b322b
- b321
- b321b
-diff -Naur vim73.orig/src/testdir/test57.ok vim73/src/testdir/test57.ok
---- vim73.orig/src/testdir/test57.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test57.ok	2012-11-01 20:35:39.000000000 +0000
-@@ -21,6 +21,10 @@
- a
- 
- 
-+
-+-24
-+x-22
-+0
- a122
- a123
- b123
-diff -Naur vim73.orig/src/testdir/test61.in vim73/src/testdir/test61.in
---- vim73.orig/src/testdir/test61.in	2010-06-27 03:07:58.000000000 +0000
-+++ vim73/src/testdir/test61.in	2012-11-01 20:35:39.000000000 +0000
-@@ -4,6 +4,10 @@
- Also tests :earlier and :later.
- 
- STARTTEST
-+:echo undotree().entries
-+ENDTEST
-+
-+STARTTEST
- :" Delete three characters and undo
- Gx:set ul=100
- x:set ul=100
-diff -Naur vim73.orig/src/testdir/test62.in vim73/src/testdir/test62.in
---- vim73.orig/src/testdir/test62.in	2010-05-31 19:22:55.000000000 +0000
-+++ vim73/src/testdir/test62.in	2012-11-01 20:35:47.000000000 +0000
-@@ -49,6 +49,77 @@
- :tabclose
- :call append(line('$'), test_status)
- :"
-+:if has('gui') || has('clientserver')
-+:" Test for ":tab drop exist-file" to keep current window.
-+:sp test1
-+:tab drop test1
-+:let test_status = 'tab drop 1: fail'
-+:if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
-+:    let test_status = 'tab drop 1: pass'
-+:endif
-+:close
-+:call append(line('$'), test_status)
-+:"
-+:"
-+:" Test for ":tab drop new-file" to keep current window of tabpage 1.
-+:split
-+:tab drop newfile
-+:let test_status = 'tab drop 2: fail'
-+:if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
-+:    let test_status = 'tab drop 2: pass'
-+:endif
-+:tabclose
-+:q
-+:call append(line('$'), test_status)
-+:"
-+:"
-+:" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
-+:new test1
-+:tabnew
-+:new test1
-+:tab drop test1
-+:let test_status = 'tab drop 3: fail'
-+:if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
-+:    let test_status = 'tab drop 3: pass'
-+:endif
-+:tabclose
-+:q
-+:call append(line('$'), test_status)
-+:else
-+:" :drop not supported
-+:call append(line('$'), 'tab drop 1: pass')
-+:call append(line('$'), 'tab drop 2: pass')
-+:call append(line('$'), 'tab drop 3: pass')
-+:endif
-+:"
-+:"
-+:for i in range(9) | tabnew | endfor
-+1gt
-+Go=tabpagenr()
-
-
-+:tabmove 5
-+i=tabpagenr()
-
-
-+:tabmove -2
-+i=tabpagenr()
-
-
-+:tabmove +4
-+i=tabpagenr()
-
-
-+:tabmove
-+i=tabpagenr()
-
-
-+:tabmove -20
-+i=tabpagenr()
-
-
-+:tabmove +20
-+i=tabpagenr()
-
-
-+:3tabmove
-+i=tabpagenr()
-
-
-+:7tabmove 5
-+i=tabpagenr()
-
-
-+:let a='No error caught.'
-+:try
-+:tabmove foo
-+:catch E474
-+:let a='E474 caught.'
-+:endtry
-+i=a
-
-+:"
- :"
- :/^Results/,$w! test.out
- :qa!
-diff -Naur vim73.orig/src/testdir/test62.ok vim73/src/testdir/test62.ok
---- vim73.orig/src/testdir/test62.ok	2010-05-31 19:22:55.000000000 +0000
-+++ vim73/src/testdir/test62.ok	2012-11-01 20:35:47.000000000 +0000
-@@ -5,3 +5,16 @@
- this is tab page 4
- gettabvar: pass
- settabvar: pass
-+tab drop 1: pass
-+tab drop 2: pass
-+tab drop 3: pass
-+1
-+6
-+4
-+8
-+10
-+1
-+10
-+4
-+6
-+E474 caught.
-diff -Naur vim73.orig/src/testdir/test65.in vim73/src/testdir/test65.in
---- vim73.orig/src/testdir/test65.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test65.in	2012-11-01 20:35:44.000000000 +0000
-@@ -1,4 +1,4 @@
--Test for floating point.
-+Test for floating point and logical operators.
- 
- STARTTEST
- :so small.vim
-@@ -72,6 +72,23 @@
- :$put ='float2nr'
- :$put =float2nr(123.456)
- :$put =float2nr(-123.456)
-+:$put ='AND'
-+:$put =and(127, 127)
-+:$put =and(127, 16)
-+:$put =and(127, 128)
-+:$put ='OR'
-+:$put =or(16, 7)
-+:$put =or(8, 7)
-+:$put =or(0, 123)
-+:$put ='XOR'
-+:$put =xor(127, 127)
-+:$put =xor(127, 16)
-+:$put =xor(127, 128)
-+:$put ='invert'
-+:$put =and(invert(127), 65535)
-+:$put =and(invert(16), 65535)
-+:$put =and(invert(128), 65535)
-+:$put =invert(1.0)
- :/^Results/,$wq! test.out
- ENDTEST
- 
-diff -Naur vim73.orig/src/testdir/test65.ok vim73/src/testdir/test65.ok
---- vim73.orig/src/testdir/test65.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test65.ok	2012-11-01 20:35:44.000000000 +0000
-@@ -54,3 +54,20 @@
- float2nr
- 123
- -123
-+AND
-+127
-+16
-+0
-+OR
-+23
-+15
-+123
-+XOR
-+0
-+111
-+255
-+invert
-+65408
-+65519
-+65407
-+0
-diff -Naur vim73.orig/src/testdir/test68.in vim73/src/testdir/test68.in
---- vim73.orig/src/testdir/test68.in	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test68.in	2012-11-01 20:35:47.000000000 +0000
-@@ -51,6 +51,67 @@
- }
- 
- STARTTEST
-+/^{/+1
-+:set tw=5 fo=tcn comments=:#
-+A bjA b
-+ENDTEST
-+
-+{
-+  1 a
-+# 1 a
-+}
-+
-+STARTTEST
-+/^{/+1
-+:set tw=5 fo=qn comments=:#
-+gwap
-+ENDTEST
-+
-+{
-+# 1 a b
-+}
-+
-+STARTTEST
-+/^{/+1
-+:set tw=5 fo=q2 comments=:#
-+gwap
-+ENDTEST
-+
-+{
-+# x
-+#   a b
-+}
-+
-+STARTTEST
-+/^{/+2
-+:set tw& fo=a
-+I^^
-+ENDTEST
-+
-+{
-+   1aa
-+   2bb
-+}
-+
-+STARTTEST
-+/mno pqr/
-+:setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/
-+A vwx yz
-+ENDTEST
-+
-+/* abc def ghi jkl 
-+ *    mno pqr stu
-+ */
-+
-+STARTTEST
-+/^#/
-+:setl tw=12 fo=tqnc comments=:#
-+A foobar
-+ENDTEST
-+
-+# 1 xxxxx
-+
-+STARTTEST
- :g/^STARTTEST/.,/^ENDTEST/d
- :1;/^Results/,$wq! test.out
- ENDTEST
-diff -Naur vim73.orig/src/testdir/test68.ok vim73/src/testdir/test68.ok
---- vim73.orig/src/testdir/test68.ok	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/testdir/test68.ok	2012-11-01 20:35:47.000000000 +0000
-@@ -33,3 +33,36 @@
- #a b
- }
- 
-+
-+{
-+  1 a
-+    b
-+# 1 a
-+#   b
-+}
-+
-+
-+{
-+# 1 a
-+#   b
-+}
-+
-+
-+{
-+# x a
-+#   b
-+}
-+
-+
-+{ 1aa ^^2bb }
-+
-+
-+/* abc def ghi jkl 
-+ *    mno pqr stu 
-+ *    vwx yz
-+ */
-+
-+
-+# 1 xxxxx
-+#   foobar
-+
-diff -Naur vim73.orig/src/testdir/test72.in vim73/src/testdir/test72.in
---- vim73.orig/src/testdir/test72.in	2010-08-07 11:26:43.000000000 +0000
-+++ vim73/src/testdir/test72.in	2012-11-01 20:35:44.000000000 +0000
-@@ -51,6 +51,12 @@
- :e Xtestfile
- uuu:w >>test.out
- :"
-+:" Test that reading the undofiles when setting undofile works
-+:set noundofile ul=0
-+i
-+u:e! Xtestfile
-+:set undofile ul=100
-+uuuuuu:w >>test.out
- :" And now with encryption, cryptmethod=zip
- :e! Xtestfile
- :set undofile cm=zip
-diff -Naur vim73.orig/src/testdir/test72.ok vim73/src/testdir/test72.ok
---- vim73.orig/src/testdir/test72.ok	2010-05-30 20:39:12.000000000 +0000
-+++ vim73/src/testdir/test72.ok	2012-11-01 20:35:44.000000000 +0000
-@@ -7,6 +7,16 @@
- eight
- nine
- ten
-+one
-+two
-+three
-+four
-+five
-+six
-+seven
-+eight
-+nine
-+ten
- monday
- wednesday
- thursday
-diff -Naur vim73.orig/src/testdir/test74.in vim73/src/testdir/test74.in
---- vim73.orig/src/testdir/test74.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test74.in	2012-11-01 20:35:39.000000000 +0000
-@@ -0,0 +1,36 @@
-+" Tests for storing global variables in the .viminfo file vim: set ft=vim:
-+
-+STARTTEST
-+:so small.vim
-+:" Do all test in a separate window to avoid E211 when we recursively
-+:" delete the Xfind directory during cleanup
-+:"
-+:" This will cause a few errors, do it silently.
-+:set visualbell
-+:set nocp viminfo+=!,nviminfo
-+:let MY_GLOBAL_DICT={'foo': 1, 'bar': 0, 'longvarible': 1000}
-+:" store a really long list, so line wrapping will occur in viminfo file
-+:let MY_GLOBAL_LIST=range(1,100)
-+:wv! Xviminfo
-+:unlet MY_GLOBAL_DICT
-+:unlet MY_GLOBAL_LIST
-+:rv! Xviminfo
-+:call delete('Xviminfo')
-+:if exists("MY_GLOBAL_DICT")
-+:redir >> test.out
-+:echo MY_GLOBAL_DICT
-+:redir end
-+:endif
-+:if exists("MY_GLOBAL_LIST")
-+:redir >> test.out
-+:echo MY_GLOBAL_LIST
-+:redir end
-+:endif
-+:redir >> test.out
-+:echo "foobar"
-+:redir end
-+:endif
-+:qa!
-+ENDTEST
-+
-+eof
-diff -Naur vim73.orig/src/testdir/test74.ok vim73/src/testdir/test74.ok
---- vim73.orig/src/testdir/test74.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test74.ok	2012-11-01 20:35:39.000000000 +0000
-@@ -0,0 +1,5 @@
-+
-+{'foo': 1, 'longvarible': 1000, 'bar': 0}
-+[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
-+
-+foobar
-diff -Naur vim73.orig/src/testdir/test75.in vim73/src/testdir/test75.in
---- vim73.orig/src/testdir/test75.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test75.in	2012-11-01 20:35:43.000000000 +0000
-@@ -0,0 +1,22 @@
-+" Tests for functions.
-+
-+STARTTEST
-+:so small.vim
-+:set cpo-=<
-+:" Test maparg() with a string result
-+:map foo<C-V> is<F4>foo
-+:vnoremap <script> <buffer> <expr> <silent> bar isbar
-+:call append('$', maparg('foo<C-V>'))
-+:call append('$', string(maparg('foo<C-V>', '', 0, 1)))
-+:call append('$', string(maparg('bar', '', 0, 1)))
-+:"
-+:map abc x<char-114>x
-+:call append('$', maparg('abc'))
-+:map abc y<S-char-114>y
-+:call append('$', maparg('abc'))
-+:"
-+:/^eof/+1,$w! test.out
-+:qa!
-+ENDTEST
-+
-+eof
-diff -Naur vim73.orig/src/testdir/test75.ok vim73/src/testdir/test75.ok
---- vim73.orig/src/testdir/test75.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test75.ok	2012-11-01 20:35:43.000000000 +0000
-@@ -0,0 +1,5 @@
-+is<F4>foo
-+{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
-+{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
-+xrx
-+yRy
-diff -Naur vim73.orig/src/testdir/test76.in vim73/src/testdir/test76.in
---- vim73.orig/src/testdir/test76.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test76.in	2012-11-01 20:35:40.000000000 +0000
-@@ -0,0 +1,46 @@
-+Tests for completefunc/omnifunc. vim: set ft=vim :
-+
-+STARTTEST
-+:"Test that nothing happens if the 'completefunc' opens
-+:"a new window (no completion, no crash)
-+:so small.vim
-+:function! DummyCompleteOne(findstart, base)
-+:  if a:findstart
-+:    return 0
-+:  else
-+:    wincmd n
-+:    return ['onedef', 'oneDEF']
-+:  endif
-+:endfunction
-+:setlocal completefunc=DummyCompleteOne
-+/^one
-+A:q!
-+:function! DummyCompleteTwo(findstart, base)
-+:  if a:findstart
-+:    wincmd n
-+:    return 0
-+:  else
-+:    return ['twodef', 'twoDEF']
-+:  endif
-+:endfunction
-+:setlocal completefunc=DummyCompleteTwo
-+/^two
-+A:q!
-+:"Test that 'completefunc' works when it's OK.
-+:function! DummyCompleteThree(findstart, base)
-+:  if a:findstart
-+:    return 0
-+:  else
-+:    return ['threedef', 'threeDEF']
-+:  endif
-+:endfunction
-+:setlocal completefunc=DummyCompleteThree
-+/^three
-+A:/^+++/,/^three/w! test.out
-+:qa!
-+ENDTEST
-+
-++++
-+one
-+two
-+three
-diff -Naur vim73.orig/src/testdir/test76.ok vim73/src/testdir/test76.ok
---- vim73.orig/src/testdir/test76.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test76.ok	2012-11-01 20:35:40.000000000 +0000
-@@ -0,0 +1,4 @@
-++++
-+
-+two
-+threeDEF
-diff -Naur vim73.orig/src/testdir/test77.in vim73/src/testdir/test77.in
---- vim73.orig/src/testdir/test77.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test77.in	2012-11-01 20:35:46.000000000 +0000
-@@ -0,0 +1,29 @@
-+Inserts 2 million lines with consecutive integers starting from 1
-+(essentially, the output of GNU's seq 1 2000000), writes them to Xtest
-+and writes its cksum to test.out.
-+
-+We need 2 million lines to trigger a call to mf_hash_grow().  If it would mess
-+up the lines the checksum would differ.
-+
-+cksum is part of POSIX and so should be available on most Unixes.
-+If it isn't available then the test will be skipped.
-+
-+STARTTEST
-+:so small.vim
-+:if !executable("cksum")
-+: e! test.ok
-+: w! test.out
-+: qa!
-+:endif
-+:set fileformat=unix undolevels=-1
-+ggdG
-+:let i = 1
-+:while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
-+ggdd
-+:w! Xtest
-+:r !cksum Xtest
-+:s/\s/ /g
-+:.w! test.out
-+:qa!
-+ENDTEST
-+
-diff -Naur vim73.orig/src/testdir/test77.ok vim73/src/testdir/test77.ok
---- vim73.orig/src/testdir/test77.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test77.ok	2012-11-01 20:35:41.000000000 +0000
-@@ -0,0 +1 @@
-+3678979763 14888896 Xtest
-diff -Naur vim73.orig/src/testdir/test78.in vim73/src/testdir/test78.in
---- vim73.orig/src/testdir/test78.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test78.in	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,46 @@
-+Inserts 10000 lines with text to fill the swap file with two levels of pointer
-+blocks.  Then recovers from the swap file and checks all text is restored.
-+
-+We need about 10000 lines of 100 characters to get two levels of pointer
-+blocks.
-+
-+STARTTEST
-+:so small.vim
-+:set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo
-+:e! Xtest
-+ggdG
-+:let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
-+:let i = 1
-+:let linecount = 10000
-+:while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile
-+:preserve
-+:" get the name of the swap file
-+:redir => swapname
-+:swapname
-+:redir END
-+:let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
-+:" make a copy of the swap file in Xswap
-+:set bin
-+:exe 'sp ' . swapname
-+:w! Xswap
-+:echo swapname
-+:set nobin
-+:new
-+:only!
-+:bwipe! Xtest
-+:call rename('Xswap', swapname)
-+:recover Xtest
-+:call delete(swapname)
-+:new
-+:call append(0, 'recovery start')
-+:wincmd w
-+:let linedollar = line('$')
-+:if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif
-+:let i = 1
-+:while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile
-+:q!
-+:call append(line('$'), 'recovery end')
-+:w! test.out
-+:qa!
-+ENDTEST
-+
-diff -Naur vim73.orig/src/testdir/test78.ok vim73/src/testdir/test78.ok
---- vim73.orig/src/testdir/test78.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test78.ok	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,3 @@
-+recovery start
-+
-+recovery end
-diff -Naur vim73.orig/src/testdir/test79.in vim73/src/testdir/test79.in
---- vim73.orig/src/testdir/test79.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test79.in	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,213 @@
-+Test for *sub-replace-special* and *sub-replace-expression* on :substitute.
-+Test for submatch() on :substitue.
-+Test for *:s%* on :substitute.
-+
-+STARTTEST
-+:so small.vim
-+ENDTEST
-+
-+Results of test71:
-+
-+STARTTEST
-+:set magic
-+:set cpo&
-+/^TEST/
-+j:s/A/&&/
-+j:s/B/\&/
-+j:s/C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/
-+j:s/D/d/
-+j:s/E/~/
-+j:s/F/\~/
-+j:s/G/\ugg/
-+j:s/H/\Uh\Eh/
-+j:s/I/\lII/
-+j:s/J/\LJ\EJ/
-+j:s/K/\Uk\ek/
-+j:s/L/
-/
-+j:s/M/\r/
-+j:s/N/\
-/
-+j:s/O/\n/
-+j:s/P/\b/
-+j:s/Q/\t/
-+j:s/R/\\/
-+j:s/S/\c/
-+j:s/T//
-+ENDTEST
-+
-+TEST_1:
-+A
-+B
-+C123456789
-+D
-+E
-+F
-+G
-+H
-+I
-+J
-+K
-+lLl
-+mMm
-+nNn
-+oOo
-+pPp
-+qQq
-+rRr
-+sSs
-+tTt
-+
-+STARTTEST
-+:set nomagic
-+:set cpo&
-+/^TEST/
-+j:s/A/&&/
-+j:s/B/\&/
-+j:s/\mC\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/
-+j:s/D/d/
-+j:s/E/~/
-+j:s/F/\~/
-+j:s/G/\ugg/
-+j:s/H/\Uh\Eh/
-+j:s/I/\lII/
-+j:s/J/\LJ\EJ/
-+j:s/K/\Uk\ek/
-+j:s/L/
-/
-+j:s/M/\r/
-+j:s/N/\
-/
-+j:s/O/\n/
-+j:s/P/\b/
-+j:s/Q/\t/
-+j:s/R/\\/
-+j:s/S/\c/
-+j:s/T//
-+ENDTEST
-+
-+TEST_2:
-+A
-+B
-+C123456789
-+D
-+E
-+F
-+G
-+H
-+I
-+J
-+K
-+lLl
-+mMm
-+nNn
-+oOo
-+pPp
-+qQq
-+rRr
-+sSs
-+tTt
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+/^TEST/
-+j:s/A/\='\'/
-+j:s/B/\='\\'/
-+j:s/C/\='
-'/
-+j:s/D/\='\
-'/
-+j:s/E/\='\\
-'/
-+j:s/F/\='\r'/
-+j:s/G/\=''/
-+j:s/H/\='\'/
-+j:s/I/\='\\'/
-+j:s/J/\='\n'/
-+j:s/K/\="\r"/
-+j:s/L/\="\n"/
-+ENDTEST
-+
-+TEST_3:
-+aAa
-+bBb
-+cCc
-+dDd
-+eEe
-+fFf
-+gGg
-+hHh
-+iIi
-+jJj
-+kKk
-+lLl
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+/^TEST/
-+j:s/A/\=substitute(submatch(0), '.', '\', '')/
-+j:s/B/\=substitute(submatch(0), '.', '\\', '')/
-+j:s/C/\=substitute(submatch(0), '.', '
-', '')/
-+j:s/D/\=substitute(submatch(0), '.', '\
-', '')/
-+j:s/E/\=substitute(submatch(0), '.', '\\
-', '')/
-+j:s/F/\=substitute(submatch(0), '.', '\r', '')/
-+j:s/G/\=substitute(submatch(0), '.', '', '')/
-+j:s/H/\=substitute(submatch(0), '.', '\', '')/
-+j:s/I/\=substitute(submatch(0), '.', '\\', '')/
-+j:s/J/\=substitute(submatch(0), '.', '\n', '')/
-+j:s/K/\=substitute(submatch(0), '.', "\r", '')/
-+j:s/L/\=substitute(submatch(0), '.', "\n", '')/
-+ENDTEST
-+
-+TEST_4:
-+aAa
-+bBb
-+cCc
-+dDd
-+eEe
-+fFf
-+gGg
-+hHh
-+iIi
-+jJj
-+kKk
-+lLl
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+/^TEST/
-+j:s/A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)/
-+ENDTEST
-+
-+TEST_5:
-+A123456789
-+
-+STARTTEST
-+:set magic&
-+/^TEST/
-+:set cpo+=/
-+j:s/A/a/
-+j:s/B/%/
-+:set cpo-=/
-+j:s/C/c/
-+j:s/D/%/
-+ENDTEST
-+
-+TEST_6:
-+A
-+B
-+C
-+D
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+/^TEST/
-+j:s/A./\=submatch(0)/
-+j:s/B./\=submatch(0)/
-+ENDTEST
-+
-+TEST_7:
-+A
-A
-+BB
-+
-+STARTTEST
-+:g/^STARTTEST/.,/^ENDTEST/d
-+:1;/^Results/,$wq! test.out
-+ENDTEST
-diff -Naur vim73.orig/src/testdir/test79.ok vim73/src/testdir/test79.ok
---- vim73.orig/src/testdir/test79.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test79.ok	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,118 @@
-+Results of test71:
-+
-+
-+TEST_1:
-+AA
-+&
-+C123456789987654321
-+d
-+d
-+~
-+Gg
-+Hh
-+iI
-+jJ
-+Kk
-+l
-+l
-+m
-+m
-+n
-n
-+oo
-+pp
-+q	q
-+r\r
-+scs
-+tt
-+
-+
-+TEST_2:
-+&&
-+B
-+C123456789987654321
-+d
-+~
-+~
-+Gg
-+Hh
-+iI
-+jJ
-+Kk
-+l
-+l
-+m
-+m
-+n
-n
-+oo
-+pp
-+q	q
-+r\r
-+scs
-+tt
-+
-+
-+TEST_3:
-+a\a
-+b\\b
-+c
-+c
-+d\
-+d
-+e\\
-+e
-+f\rf
-+g
-+g
-+h\
-+h
-+i\\
-+i
-+j\nj
-+k
-+k
-+l
-+l
-+
-+
-+TEST_4:
-+a\a
-+b\b
-+c
-+c
-+d
-+d
-+e\
-+e
-+f
-+f
-+g
-+g
-+h
-+h
-+i\
-+i
-+j
-+j
-+k
-+k
-+l
-+l
-+
-+
-+TEST_5:
-+A123456789987654321
-+
-+
-+TEST_6:
-+a
-+a
-+c
-+%
-+
-+
-+TEST_7:
-+A
-+A
-+B
-+B
-+
-diff -Naur vim73.orig/src/testdir/test80.in vim73/src/testdir/test80.in
---- vim73.orig/src/testdir/test80.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test80.in	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,150 @@
-+Test for *sub-replace-special* and *sub-replace-expression* on substitue().
-+Test for submatch() on substitue().
-+Test for *:s%* on :substitute.
-+
-+STARTTEST
-+:so small.vim
-+ENDTEST
-+
-+TEST_1:
-+
-+STARTTEST
-+:set magic
-+:set cpo&
-+:$put =\"\n\nTEST_1:\"
-+:$put =substitute('A', 'A', '&&', '')
-+:$put =substitute('B', 'B', '\&', '')
-+:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
-+:$put =substitute('D', 'D', 'd', '')
-+:$put =substitute('E', 'E', '~', '')
-+:$put =substitute('F', 'F', '\~', '')
-+:$put =substitute('G', 'G', '\ugg', '')
-+:$put =substitute('H', 'H', '\Uh\Eh', '')
-+:$put =substitute('I', 'I', '\lII', '')
-+:$put =substitute('J', 'J', '\LJ\EJ', '')
-+:$put =substitute('K', 'K', '\Uk\ek', '')
-+:$put =substitute('lLl', 'L', '
-', '')
-+:$put =substitute('mMm', 'M', '\r', '')
-+:$put =substitute('nNn', 'N', '\
-', '')
-+:$put =substitute('oOo', 'O', '\n', '')
-+:$put =substitute('pPp', 'P', '\b', '')
-+:$put =substitute('qQq', 'Q', '\t', '')
-+:$put =substitute('rRr', 'R', '\\', '')
-+:$put =substitute('sSs', 'S', '\c', '')
-+:$put =substitute('uUu', 'U', \"\n\", '')
-+:$put =substitute('vVv', 'V', \"\b\", '')
-+:$put =substitute('wWw', 'W', \"\\\", '')
-+:$put =substitute('xXx', 'X', \"\r\", '')
-+/^TEST_2
-+ENDTEST
-+
-+TEST_2:
-+
-+STARTTEST
-+:set nomagic
-+:set cpo&
-+:$put =\"\n\nTEST_2:\"
-+:$put =substitute('A', 'A', '&&', '')
-+:$put =substitute('B', 'B', '\&', '')
-+:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
-+:$put =substitute('D', 'D', 'd', '')
-+:$put =substitute('E', 'E', '~', '')
-+:$put =substitute('F', 'F', '\~', '')
-+:$put =substitute('G', 'G', '\ugg', '')
-+:$put =substitute('H', 'H', '\Uh\Eh', '')
-+:$put =substitute('I', 'I', '\lII', '')
-+:$put =substitute('J', 'J', '\LJ\EJ', '')
-+:$put =substitute('K', 'K', '\Uk\ek', '')
-+:$put =substitute('lLl', 'L', '
-', '')
-+:$put =substitute('mMm', 'M', '\r', '')
-+:$put =substitute('nNn', 'N', '\
-', '')
-+:$put =substitute('oOo', 'O', '\n', '')
-+:$put =substitute('pPp', 'P', '\b', '')
-+:$put =substitute('qQq', 'Q', '\t', '')
-+:$put =substitute('rRr', 'R', '\\', '')
-+:$put =substitute('sSs', 'S', '\c', '')
-+:$put =substitute('tTt', 'T', \"\r\", '')
-+:$put =substitute('uUu', 'U', \"\n\", '')
-+:$put =substitute('vVv', 'V', \"\b\", '')
-+:$put =substitute('wWw', 'W', \"\\\", '')
-+/^TEST_3
-+ENDTEST
-+
-+TEST_3:
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+:$put =\"\n\nTEST_3:\"
-+:let y = substitute('aAa', 'A', '\="\\"', '')           | $put =y
-+:let y = substitute('bBb', 'B', '\="\\\\"', '')         | $put =y
-+:let y = substitute('cCc', 'C', '\="
-"', '')         | $put =y
-+:let y = substitute('dDd', 'D', '\="\\
-"', '')       | $put =y
-+:let y = substitute('eEe', 'E', '\="\\\\
-"', '')     | $put =y
-+:let y = substitute('fFf', 'F', '\="\\r"', '')          | $put =y
-+:let y = substitute('jJj', 'J', '\="\\n"', '')          | $put =y
-+:let y = substitute('kKk', 'K', '\="\r"', '')           | $put =y
-+:let y = substitute('lLl', 'L', '\="\n"', '')           | $put =y
-+/^TEST_4
-+ENDTEST
-+
-+TEST_4:
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+:$put =\"\n\nTEST_4:\"
-+:let y = substitute('aAa', 'A', '\=substitute(submatch(0), ".", "\\", "")', '')       | $put =y
-+:let y = substitute('bBb', 'B', '\=substitute(submatch(0), ".", "\\\\", "")', '')     | $put =y
-+:let y = substitute('cCc', 'C', '\=substitute(submatch(0), ".", "
-", "")', '')     | $put =y
-+:let y = substitute('dDd', 'D', '\=substitute(submatch(0), ".", "\\
-", "")', '')   | $put =y
-+:let y = substitute('eEe', 'E', '\=substitute(submatch(0), ".", "\\\\
-", "")', '') | $put =y
-+:let y = substitute('fFf', 'F', '\=substitute(submatch(0), ".", "\\r", "")', '')      | $put =y
-+:let y = substitute('jJj', 'J', '\=substitute(submatch(0), ".", "\\n", "")', '')      | $put =y
-+:let y = substitute('kKk', 'K', '\=substitute(submatch(0), ".", "\r", "")', '')       | $put =y
-+:let y = substitute('lLl', 'L', '\=substitute(submatch(0), ".", "\n", "")', '')       | $put =y
-+/^TEST_5
-+ENDTEST
-+
-+TEST_5:
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+:$put =\"\n\nTEST_5:\"
-+:$put =substitute('A123456789', 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)', '')
-+/^TEST_6
-+ENDTEST
-+
-+TEST_6:
-+
-+STARTTEST
-+:set magic&
-+:$put =\"\n\nTEST_6:\"
-+:set cpo+=/
-+:$put =substitute('A', 'A', 'a', '')
-+:$put =substitute('B', 'B', '%', '')
-+:set cpo-=/
-+:$put =substitute('C', 'C', 'c', '')
-+:$put =substitute('D', 'D', '%', '')
-+/^TEST_7
-+ENDTEST
-+
-+TEST_7:
-+
-+STARTTEST
-+:set magic&
-+:set cpo&
-+:$put =\"\n\nTEST_7:\"
-+:$put =substitute('A
-A', 'A.', '\=submatch(0)', '')
-+:$put =substitute(\"B\nB\", 'B.', '\=submatch(0)', '')
-+/^TEST_8
-+ENDTEST
-+
-+TEST_8:
-+
-+STARTTEST
-+:/^Results/,$wq! test.out
-+ENDTEST
-+
-+Results of test72:
-diff -Naur vim73.orig/src/testdir/test80.ok vim73/src/testdir/test80.ok
---- vim73.orig/src/testdir/test80.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test80.ok	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,101 @@
-+Results of test72:
-+
-+
-+TEST_1:
-+AA
-+&
-+C123456789987654321
-+d
-+~
-+~
-+Gg
-+Hh
-+iI
-+jJ
-+Kk
-+l
-l
-+m
-m
-+n
-n
-+o
-+o
-+pp
-+q	q
-+r\r
-+scs
-+u
-+u
-+vv
-+w\w
-+x
-x
-+
-+
-+TEST_2:
-+AA
-+&
-+C123456789987654321
-+d
-+~
-+~
-+Gg
-+Hh
-+iI
-+jJ
-+Kk
-+l
-l
-+m
-m
-+n
-n
-+o
-+o
-+pp
-+q	q
-+r\r
-+scs
-+t
-t
-+u
-+u
-+vv
-+w\w
-+
-+
-+TEST_3:
-+a\a
-+b\\b
-+c
-c
-+d\
-d
-+e\\
-e
-+f\rf
-+j\nj
-+k
-k
-+l
-+l
-+
-+
-+TEST_4:
-+a\a
-+b\b
-+c
-c
-+d
-d
-+e\
-e
-+f
-f
-+j
-+j
-+k
-k
-+l
-+l
-+
-+
-+TEST_5:
-+A123456789987654321
-+
-+
-+TEST_6:
-+a
-+%
-+c
-+%
-+
-+
-+TEST_7:
-+A
-A
-+B
-+B
-diff -Naur vim73.orig/src/testdir/test81.in vim73/src/testdir/test81.in
---- vim73.orig/src/testdir/test81.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test81.in	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,22 @@
-+Test for t movement command and 'cpo-;' setting
-+
-+STARTTEST
-+:set nocompatible viminfo+=nviminfo
-+:set cpo-=;
-+/firstline/
-+j0tt;D
-+0fz;D
-+$Fy;D
-+$Ty;D:set cpo+=;
-+j0tt;;D
-+$Ty;;D:?firstline?+1,$w! test.out
-+:qa!
-+ENDTEST
-+
-+firstline
-+aaa two three four
-+    zzz
-+yyy   
-+bbb yee yoo four
-+ccc two three four
-+ddd yee yoo four
-diff -Naur vim73.orig/src/testdir/test81.ok vim73/src/testdir/test81.ok
---- vim73.orig/src/testdir/test81.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test81.ok	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,6 @@
-+aaa two
-+    z
-+y
-+bbb y
-+ccc
-+ddd yee y
-diff -Naur vim73.orig/src/testdir/test82.in vim73/src/testdir/test82.in
---- vim73.orig/src/testdir/test82.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test82.in	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,93 @@
-+Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
-+
-+STARTTEST
-+:so small.vim
-+:if !has("multi_byte")
-+: e! test.ok
-+: w! test.out
-+: qa!
-+:endif
-+:set enc=utf8
-+ggdG
-+:
-+:function! Ch(a, op, b, expected)
-+:  if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
-+:    call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
-+:  else
-+:    let b:passed += 1
-+:  endif
-+:endfunction
-+:
-+:function! Chk(a, b, result)
-+:  if a:result == 0
-+:    call Ch(a:a, '==?', a:b, 1)
-+:    call Ch(a:a, '!=?', a:b, 0)
-+:    call Ch(a:a, '<=?', a:b, 1)
-+:    call Ch(a:a, '>=?', a:b, 1)
-+:    call Ch(a:a, '<?', a:b, 0)
-+:    call Ch(a:a, '>?', a:b, 0)
-+:  elseif a:result > 0
-+:    call Ch(a:a, '==?', a:b, 0)
-+:    call Ch(a:a, '!=?', a:b, 1)
-+:    call Ch(a:a, '<=?', a:b, 0)
-+:    call Ch(a:a, '>=?', a:b, 1)
-+:    call Ch(a:a, '<?', a:b, 0)
-+:    call Ch(a:a, '>?', a:b, 1)
-+:  else
-+:    call Ch(a:a, '==?', a:b, 0)
-+:    call Ch(a:a, '!=?', a:b, 1)
-+:    call Ch(a:a, '<=?', a:b, 1)
-+:    call Ch(a:a, '>=?', a:b, 0)
-+:    call Ch(a:a, '<?', a:b, 1)
-+:    call Ch(a:a, '>?', a:b, 0)
-+:  endif
-+:endfunction
-+:
-+:function! Check(a, b, result)
-+:  call Chk(a:a, a:b, a:result)
-+:  call Chk(a:b, a:a, -a:result)
-+:endfunction
-+:
-+:function! LT(a, b)
-+:  call Check(a:a, a:b, -1)
-+:endfunction
-+:
-+:function! GT(a, b)
-+:  call Check(a:a, a:b, 1)
-+:endfunction
-+:
-+:function! EQ(a, b)
-+:  call Check(a:a, a:b, 0)
-+:endfunction
-+:
-+:let b:passed=0
-+:call EQ('', '')
-+:call LT('', 'a')
-+:call EQ('abc', 'abc')
-+:call EQ('Abc', 'abC')
-+:call LT('ab', 'abc')
-+:call LT('AB', 'abc')
-+:call LT('ab', 'aBc')
-+:call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
-+:call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
-+:call EQ('\xe2\x84\xaa', 'k')
-+:call LT('\xe2\x84\xaa', 'kkkkkk')
-+:call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
-+:call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
-+:call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
-+:call EQ('Abc\x80', 'AbC\x80')
-+:call LT('Abc\x80', 'AbC\x81')
-+:call LT('Abc', 'AbC\x80')
-+:call LT('abc\x80DEF', 'abc\x80def')  " case folding stops at the first bad character
-+:call LT('\xc3XYZ', '\xc3xyz')
-+:call EQ('\xef\xbc\xba', '\xef\xbd\x9a')  " FF3A (upper), FF5A (lower)
-+:call GT('\xef\xbc\xba', '\xef\xbc\xff')  " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
-+:call LT('\xc3', '\xc3\x83')
-+:call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
-+:for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
-+:for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
-+:for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
-+:call append(0, printf('%d checks passed', b:passed))
-+:wq! test.out
-+ENDTEST
-+
-diff -Naur vim73.orig/src/testdir/test82.ok vim73/src/testdir/test82.ok
---- vim73.orig/src/testdir/test82.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test82.ok	2012-11-01 20:35:42.000000000 +0000
-@@ -0,0 +1,2 @@
-+3732 checks passed
-+
-diff -Naur vim73.orig/src/testdir/test83-tags2 vim73/src/testdir/test83-tags2
---- vim73.orig/src/testdir/test83-tags2	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test83-tags2	2012-11-01 20:35:43.000000000 +0000
-@@ -0,0 +1,2 @@
-+!_TAG_FILE_ENCODING	cp932	//
-+`ab	Xtags2.txt	/`ab
-diff -Naur vim73.orig/src/testdir/test83-tags3 vim73/src/testdir/test83-tags3
---- vim73.orig/src/testdir/test83-tags3	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test83-tags3	2012-11-01 20:35:43.000000000 +0000
-@@ -0,0 +1,102 @@
-+!_TAG_FILE_SORTED	1	//
-+!_TAG_FILE_ENCODING	cp932	//
-+abc1	Xtags3.txt	/`ab
-+abc2	Xtags3.txt	/`ab
-+abc3	Xtags3.txt	/`ab
-+abc4	Xtags3.txt	/`ab
-+abc5	Xtags3.txt	/`ab
-+abc6	Xtags3.txt	/`ab
-+abc7	Xtags3.txt	/`ab
-+abc8	Xtags3.txt	/`ab
-+abc9	Xtags3.txt	/`ab
-+abc10	Xtags3.txt	/`ab
-+abc11	Xtags3.txt	/`ab
-+abc12	Xtags3.txt	/`ab
-+abc13	Xtags3.txt	/`ab
-+abc14	Xtags3.txt	/`ab
-+abc15	Xtags3.txt	/`ab
-+abc16	Xtags3.txt	/`ab
-+abc17	Xtags3.txt	/`ab
-+abc18	Xtags3.txt	/`ab
-+abc19	Xtags3.txt	/`ab
-+abc20	Xtags3.txt	/`ab
-+abc21	Xtags3.txt	/`ab
-+abc22	Xtags3.txt	/`ab
-+abc23	Xtags3.txt	/`ab
-+abc24	Xtags3.txt	/`ab
-+abc25	Xtags3.txt	/`ab
-+abc26	Xtags3.txt	/`ab
-+abc27	Xtags3.txt	/`ab
-+abc28	Xtags3.txt	/`ab
-+abc29	Xtags3.txt	/`ab
-+abc30	Xtags3.txt	/`ab
-+abc31	Xtags3.txt	/`ab
-+abc32	Xtags3.txt	/`ab
-+abc33	Xtags3.txt	/`ab
-+abc34	Xtags3.txt	/`ab
-+abc35	Xtags3.txt	/`ab
-+abc36	Xtags3.txt	/`ab
-+abc37	Xtags3.txt	/`ab
-+abc38	Xtags3.txt	/`ab
-+abc39	Xtags3.txt	/`ab
-+abc40	Xtags3.txt	/`ab
-+abc41	Xtags3.txt	/`ab
-+abc42	Xtags3.txt	/`ab
-+abc43	Xtags3.txt	/`ab
-+abc44	Xtags3.txt	/`ab
-+abc45	Xtags3.txt	/`ab
-+abc46	Xtags3.txt	/`ab
-+abc47	Xtags3.txt	/`ab
-+abc48	Xtags3.txt	/`ab
-+abc49	Xtags3.txt	/`ab
-+abc50	Xtags3.txt	/`ab
-+abc51	Xtags3.txt	/`ab
-+abc52	Xtags3.txt	/`ab
-+abc53	Xtags3.txt	/`ab
-+abc54	Xtags3.txt	/`ab
-+abc55	Xtags3.txt	/`ab
-+abc56	Xtags3.txt	/`ab
-+abc57	Xtags3.txt	/`ab
-+abc58	Xtags3.txt	/`ab
-+abc59	Xtags3.txt	/`ab
-+abc60	Xtags3.txt	/`ab
-+abc61	Xtags3.txt	/`ab
-+abc62	Xtags3.txt	/`ab
-+abc63	Xtags3.txt	/`ab
-+abc64	Xtags3.txt	/`ab
-+abc65	Xtags3.txt	/`ab
-+abc66	Xtags3.txt	/`ab
-+abc67	Xtags3.txt	/`ab
-+abc68	Xtags3.txt	/`ab
-+abc69	Xtags3.txt	/`ab
-+abc70	Xtags3.txt	/`ab
-+abc71	Xtags3.txt	/`ab
-+abc72	Xtags3.txt	/`ab
-+abc73	Xtags3.txt	/`ab
-+abc74	Xtags3.txt	/`ab
-+abc75	Xtags3.txt	/`ab
-+abc76	Xtags3.txt	/`ab
-+abc77	Xtags3.txt	/`ab
-+abc78	Xtags3.txt	/`ab
-+abc79	Xtags3.txt	/`ab
-+abc80	Xtags3.txt	/`ab
-+abc81	Xtags3.txt	/`ab
-+abc82	Xtags3.txt	/`ab
-+abc83	Xtags3.txt	/`ab
-+abc84	Xtags3.txt	/`ab
-+abc85	Xtags3.txt	/`ab
-+abc86	Xtags3.txt	/`ab
-+abc87	Xtags3.txt	/`ab
-+abc88	Xtags3.txt	/`ab
-+abc89	Xtags3.txt	/`ab
-+abc90	Xtags3.txt	/`ab
-+abc91	Xtags3.txt	/`ab
-+abc92	Xtags3.txt	/`ab
-+abc93	Xtags3.txt	/`ab
-+abc94	Xtags3.txt	/`ab
-+abc95	Xtags3.txt	/`ab
-+abc96	Xtags3.txt	/`ab
-+abc97	Xtags3.txt	/`ab
-+abc98	Xtags3.txt	/`ab
-+abc99	Xtags3.txt	/`ab
-+abc100	Xtags3.txt	/`ab
-diff -Naur vim73.orig/src/testdir/test83.in vim73/src/testdir/test83.in
---- vim73.orig/src/testdir/test83.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test83.in	2012-11-01 20:35:44.000000000 +0000
-@@ -0,0 +1,76 @@
-+Tests for tag search with !_TAG_FILE_ENCODING.
-+
-+STARTTEST
-+:so mbyte.vim
-+:set enc=utf8
-+:if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
-+: e! test.ok
-+: w! test.out
-+: qa!
-+:endif
-+
-+:/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
-+:/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
-+:/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
-+:/^tags1$/+1,/^tags1-end$/-1w! Xtags1
-+
-+ggdG
-+
-+:call setline('.', 'Results of test83')
-+
-+:" case1:
-+:new
-+:set tags=Xtags1
-+:let v:errmsg = ''
-+:tag abcdefghijklmnopqrs
-+:if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
-+: close
-+: put ='case1: failed'
-+:else
-+: close
-+: put ='case1: ok'
-+:endif
-+
-+:" case2:
-+:new
-+:set tags=test83-tags2
-+:let v:errmsg = ''
-+:tag /.ïŒ¢ïŒ£
-+:if v:errmsg =~ 'E426:' || getline('.') != 'ïŒ¡ïŒ¢ïŒ£'
-+: close
-+: put ='case2: failed'
-+:else
-+: close
-+: put ='case2: ok'
-+:endif
-+
-+:" case3:
-+:new
-+:set tags=test83-tags3
-+:let v:errmsg = ''
-+:tag abc50
-+:if v:errmsg =~ 'E426:' || getline('.') != 'ïŒ¡ïŒ¢ïŒ£'
-+: close
-+: put ='case3: failed'
-+:else
-+: close
-+: put ='case3: ok'
-+:endif
-+:close
-+
-+:wq! test.out
-+ENDTEST
-+
-+text for tags1
-+abcdefghijklmnopqrs
-+
-+text for tags2
-+ïŒ¡ïŒ¢ïŒ£
-+
-+text for tags3
-+ïŒ¡ïŒ¢ïŒ£
-+
-+tags1
-+!_TAG_FILE_ENCODING	utf-8	//
-+abcdefghijklmnopqrs	Xtags1.txt	/abcdefghijklmnopqrs
-+tags1-end
-diff -Naur vim73.orig/src/testdir/test83.ok vim73/src/testdir/test83.ok
---- vim73.orig/src/testdir/test83.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test83.ok	2012-11-01 20:35:43.000000000 +0000
-@@ -0,0 +1,4 @@
-+Results of test83
-+case1: ok
-+case2: ok
-+case3: ok
-diff -Naur vim73.orig/src/testdir/test84.in vim73/src/testdir/test84.in
---- vim73.orig/src/testdir/test84.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test84.in	2012-11-01 20:35:45.000000000 +0000
-@@ -0,0 +1,35 @@
-+Tests for curswant not changing when setting an option
-+
-+STARTTEST
-+:so small.vim
-+:/^start target options$/+1,/^end target options$/-1 yank
-+:let target_option_names = split(@0)
-+:function TestCurswant(option_name)
-+:  normal! ggf8j
-+:  let curswant_before = winsaveview().curswant
-+:  execute 'let' '&'.a:option_name '=' '&'.a:option_name
-+:  let curswant_after = winsaveview().curswant
-+:  return [a:option_name, curswant_before, curswant_after]
-+:endfunction
-+:
-+:new
-+:put =['1234567890', '12345']
-+:1 delete _
-+:let result = []
-+:for option_name in target_option_names
-+:  call add(result, TestCurswant(option_name))
-+:endfor
-+:
-+:new
-+:put =map(copy(result), 'join(v:val, '' '')')
-+:1 delete _
-+:write test.out
-+:
-+:qall!
-+ENDTEST
-+
-+start target options
-+	tabstop
-+	timeoutlen
-+	ttimeoutlen
-+end target options
-diff -Naur vim73.orig/src/testdir/test84.ok vim73/src/testdir/test84.ok
---- vim73.orig/src/testdir/test84.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test84.ok	2012-11-01 20:35:45.000000000 +0000
-@@ -0,0 +1,3 @@
-+tabstop 7 4
-+timeoutlen 7 7
-+ttimeoutlen 7 7
-diff -Naur vim73.orig/src/testdir/test85.in vim73/src/testdir/test85.in
---- vim73.orig/src/testdir/test85.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test85.in	2012-11-01 20:35:45.000000000 +0000
-@@ -0,0 +1,42 @@
-+Test for Lua interface and luaeval() function
-+
-+STARTTEST
-+:so small.vim
-+:so lua.vim
-+:set nocompatible viminfo+=nviminfo
-+:lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
-+:lua h = vim.dict(); h.list = l
-+:call garbagecollect()
-+/^1
-+:" change buffer contents
-+:lua curbuf = vim.buffer()
-+:lua curline = vim.eval"line('.')"
-+:lua curbuf[curline] = "1 changed line 1"
-+:" scalar test
-+:let tmp_string = luaeval('"string"')
-+:let tmp_1000 = luaeval('1000')
-+:if printf("%s%.0f", tmp_string, tmp_1000) == "string1000"
-+:let scalar_res = "OK"
-+:else
-+:let scalar_res = "FAILED"
-+:endif
-+:call append(search("^1"), "scalar test " . scalar_res)
-+:" dictionary containing a list
-+:let tmp = luaeval("h").list[1]
-+:/^2/put =tmp
-+:" circular list (at the same time test lists containing lists)
-+:lua l[2] = l
-+:let l2 = luaeval("h").list
-+:if l2[2] == l2
-+:let res = "OK"
-+:else
-+:let res = "FAILED"
-+:endif
-+:call setline(search("^3"), "circular test " . res)
-+:?^1?,$w! test.out
-+:qa!
-+ENDTEST
-+
-+1 line 1
-+2 line 2
-+3 line 3
-diff -Naur vim73.orig/src/testdir/test85.ok vim73/src/testdir/test85.ok
---- vim73.orig/src/testdir/test85.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test85.ok	2012-11-01 20:35:45.000000000 +0000
-@@ -0,0 +1,5 @@
-+1 changed line 1
-+scalar test OK
-+2 line 2
-+dictionary with list OK
-+circular test OK
-diff -Naur vim73.orig/src/testdir/test86.in vim73/src/testdir/test86.in
---- vim73.orig/src/testdir/test86.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test86.in	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,281 @@
-+Tests for various python features.     vim: set ft=vim :
-+
-+STARTTEST
-+:so small.vim
-+:if !has('python') | e! test.ok | wq! test.out | endif
-+:py import vim
-+:fun Test()
-+:let l = []
-+:py l=vim.bindeval('l')
-+:py f=vim.bindeval('function("strlen")')
-+:" Extending List directly with different types
-+:py l.extend([1, "as'd", [1, 2, f, {'a': 1}]])
-+:$put =string(l)
-+:$put =string(l[-1])
-+:try
-+:  $put =string(l[-4])
-+:catch
-+:  $put =v:exception[:13]
-+:endtry
-+:" List assignment
-+:py l[0]=0
-+:$put =string(l)
-+:py l[-2]=f
-+:$put =string(l)
-+:"
-+:" Extending Dictionary directly with different types
-+:let d = {}
-+:py d=vim.bindeval('d')
-+:py d['1']='asd'
-+:py d['b']=[1, 2, f]
-+:py d['-1']={'a': 1}
-+:let dkeys = []
-+:py dk=vim.bindeval('dkeys')
-+:py dkeys=d.keys()
-+:py dkeys.sort()
-+:py dk.extend(dkeys)
-+:$put =string(dkeys)
-+:for [key, val] in sort(items(d))
-+:  $put =string(key) . ' : ' . string(val)
-+:  unlet key val
-+:endfor
-+:"
-+:" removing items with del
-+:py del l[2]
-+:$put =string(l)
-+:let l = range(8)
-+:py l=vim.bindeval('l')
-+:try
-+:   py del l[:3]
-+:   py del l[1:]
-+:catch
-+:   $put =v:exception
-+:endtry
-+:$put =string(l)
-+:"
-+:py del d['-1']
-+:$put =string(d)
-+:"
-+:" removing items out of range: silently skip items that don't exist
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:" The following two ranges delete nothing as they match empty list:
-+:py del l[2:1]
-+:$put =string(l)
-+:py del l[2:2]
-+:$put =string(l)
-+:py del l[2:3]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py del l[2:4]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py del l[2:5]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py del l[2:6]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:" The following two ranges delete nothing as they match empty list:
-+:py del l[-1:2]
-+:$put =string(l)
-+:py del l[-2:2]
-+:$put =string(l)
-+:py del l[-3:2]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py del l[-4:2]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py del l[-5:2]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py del l[-6:2]
-+:$put =string(l)
-+:"
-+:" Slice assignment to a list
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py l[0:0]=['a']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py l[1:2]=['b']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py l[2:4]=['c']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py l[4:4]=['d']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py l[-1:2]=['e']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py l[-10:2]=['f']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:py l[2:-10]=['g']
-+:$put =string(l)
-+:let l = []
-+:py l=vim.bindeval('l')
-+:py l[0:0]=['h']
-+:$put =string(l)
-+:"
-+:" Locked variables
-+:let l = [0, 1, 2, 3]
-+:py l=vim.bindeval('l')
-+:lockvar! l
-+:py l[2]='i'
-+:$put =string(l)
-+:unlockvar! l
-+:"
-+:" Function calls
-+:function New(...)
-+:return ['NewStart']+a:000+['NewEnd']
-+:endfunction
-+:function DictNew(...) dict
-+:return ['DictNewStart']+a:000+['DictNewEnd', self]
-+:endfunction
-+:let l=[function('New'), function('DictNew')]
-+:py l=vim.bindeval('l')
-+:py l.extend(list(l[0](1, 2, 3)))
-+:$put =string(l)
-+:py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
-+:$put =string(l)
-+:py l.extend([l[0].name])
-+:$put =string(l)
-+:try
-+:   py l[1](1, 2, 3)
-+:catch
-+:   $put =v:exception[:16]
-+:endtry
-+:delfunction New
-+:try
-+:   py l[0](1, 2, 3)
-+:catch
-+:   $put =v:exception[:16]
-+:endtry
-+:if has('float')
-+:   let l=[0.0]
-+:   py l=vim.bindeval('l')
-+:   py l.extend([0.0])
-+:   $put =string(l)
-+:else
-+:   $put ='[0.0, 0.0]'
-+:endif
-+:let messages=[]
-+:py <<EOF
-+d=vim.bindeval('{}')
-+m=vim.bindeval('messages')
-+try:
-+    d['abc']
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['abc']="\0"
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['abc']=vim
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['']=1
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['a\0b']=1
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d[b'a\0b']=1
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+EOF
-+:$put =messages
-+:unlet messages
-+:" locked and scope attributes
-+:let d={} | let dl={} | lockvar dl
-+:for s in split("d dl v: g:")
-+:    let name=tr(s, ':', 's')
-+:    execute 'py '.name.'=vim.bindeval("'.s.'")'
-+:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
-+:    $put =toput
-+:endfor
-+:silent! let d.abc=1
-+:silent! let dl.abc=1
-+:py d.locked=True
-+:py dl.locked=False
-+:silent! let d.def=1
-+:silent! let dl.def=1
-+:put ='d:'.string(d)
-+:put ='dl:'.string(dl)
-+:unlet d dl
-+:
-+:let l=[] | let ll=[] | lockvar ll
-+:for s in split("l ll")
-+:    let name=tr(s, ':', 's')
-+:    execute 'py '.name.'=vim.bindeval("'.s.'")'
-+:    let toput=s.' : locked:'.pyeval(name.'.locked')
-+:    $put =toput
-+:endfor
-+:silent! call extend(l, [0])
-+:silent! call extend(ll, [0])
-+:py l.locked=True
-+:py ll.locked=False
-+:silent! call extend(l, [1])
-+:silent! call extend(ll, [1])
-+:put ='l:'.string(l)
-+:put ='ll:'.string(ll)
-+:unlet l ll
-+:"
-+:" pyeval()
-+:let l=pyeval('range(3)')
-+:$put =string(l)
-+:let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
-+:$put =sort(items(d))
-+:if has('float')
-+:   let f=pyeval('0.0')
-+:   $put =string(f)
-+:else
-+:   $put ='0.0'
-+:endif
-+:" Invalid values:
-+:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
-+:   try
-+:      let v=pyeval(e)
-+:   catch
-+:      let toput=e.":\t".v:exception[:13]
-+:      $put =toput
-+:   endtry
-+:endfor
-+:endfun
-+:"
-+:call Test()
-+:"
-+:delfunc Test
-+:call garbagecollect(1)
-+:"
-+:/^start:/,$wq! test.out
-+:call getchar()
-+ENDTEST
-+
-+start:
-diff -Naur vim73.orig/src/testdir/test86.ok vim73/src/testdir/test86.ok
---- vim73.orig/src/testdir/test86.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test86.ok	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,65 @@
-+start:
-+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
-+[1, 2, function('strlen'), {'a': 1}]
-+Vim(put):E684:
-+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
-+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
-+['-1', '1', 'b']
-+'-1' : {'a': 1}
-+'1' : 'asd'
-+'b' : [1, 2, function('strlen')]
-+[0, function('strlen')]
-+[3]
-+{'1': 'asd', 'b': [1, 2, function('strlen')]}
-+[0, 1, 2, 3]
-+[0, 1, 2, 3]
-+[0, 1, 3]
-+[0, 1]
-+[0, 1]
-+[0, 1]
-+[0, 1, 2, 3]
-+[0, 1, 2, 3]
-+[0, 2, 3]
-+[2, 3]
-+[2, 3]
-+[2, 3]
-+['a', 0, 1, 2, 3]
-+[0, 'b', 2, 3]
-+[0, 1, 'c']
-+[0, 1, 2, 3, 'd']
-+[0, 1, 2, 'e', 3]
-+['f', 2, 3]
-+[0, 1, 'g', 2, 3]
-+['h']
-+[0, 1, 2, 3]
-+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
-+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
-+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
-+Vim(python):E725:
-+Vim(python):E117:
-+[0.0, 0.0]
-+IndexError
-+TypeError
-+TypeError
-+ValueError
-+TypeError
-+TypeError
-+d : locked:0;scope:0
-+dl : locked:1;scope:0
-+v: : locked:2;scope:1
-+g: : locked:0;scope:2
-+d:{'abc': 1}
-+dl:{'def': 1}
-+l : locked:0
-+ll : locked:1
-+l:[0]
-+ll:[1]
-+[0, 1, 2]
-+['a', 'b']
-+['c', 1]
-+['d', ['e']]
-+0.0
-+"\0":	Vim(let):E859:
-+{"\0": 1}:	Vim(let):E859:
-+undefined_name:	Vim(let):E858:
-+vim:	Vim(let):E859:
-diff -Naur vim73.orig/src/testdir/test87.in vim73/src/testdir/test87.in
---- vim73.orig/src/testdir/test87.in	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test87.in	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,280 @@
-+Tests for various python features.     vim: set ft=vim :
-+
-+STARTTEST
-+:so small.vim
-+:if !has('python3') | e! test.ok | wq! test.out | endif
-+:py3 import vim
-+:fun Test()
-+:let l = []
-+:py3 l=vim.bindeval('l')
-+:py3 f=vim.bindeval('function("strlen")')
-+:" Extending List directly with different types
-+:py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
-+:$put =string(l)
-+:$put =string(l[-1])
-+:try
-+:  $put =string(l[-4])
-+:catch
-+:  $put =v:exception[:13]
-+:endtry
-+:" List assignment
-+:py3 l[0]=0
-+:$put =string(l)
-+:py3 l[-2]=f
-+:$put =string(l)
-+:"
-+:" Extending Dictionary directly with different types
-+:let d = {}
-+:py3 d=vim.bindeval('d')
-+:py3 d['1']='asd'
-+:py3 d['b']=[1, 2, f]
-+:py3 d['-1']={'a': 1}
-+:let dkeys = []
-+:py3 dk=vim.bindeval('dkeys')
-+:py3 dkeys=d.keys()
-+:py3 dkeys.sort()
-+:py3 dk+=dkeys
-+:$put =string(dkeys)
-+:for [key, val] in sort(items(d))
-+:  $put =string(key) . ' : ' . string(val)
-+:  unlet key val
-+:endfor
-+:"
-+:" removing items with del
-+:py3 del l[2]
-+:$put =string(l)
-+:let l = range(8)
-+:py3 l=vim.bindeval('l')
-+:try
-+:   py3 del l[:3]
-+:   py3 del l[1:]
-+:catch
-+:   $put =v:exception
-+:endtry
-+:$put =string(l)
-+:"
-+:py3 del d['-1']
-+:$put =string(d)
-+:"
-+:" removing items out of range: silently skip items that don't exist
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:" The following two ranges delete nothing as they match empty list:
-+:py3 del l[2:1]
-+:$put =string(l)
-+:py3 del l[2:2]
-+:$put =string(l)
-+:py3 del l[2:3]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 del l[2:4]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 del l[2:5]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 del l[2:6]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:" The following two ranges delete nothing as they match empty list:
-+:py3 del l[-1:2]
-+:$put =string(l)
-+:py3 del l[-2:2]
-+:$put =string(l)
-+:py3 del l[-3:2]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 del l[-4:2]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 del l[-5:2]
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 del l[-6:2]
-+:$put =string(l)
-+:"
-+:" Slice assignment to a list
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 l[0:0]=['a']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 l[1:2]=['b']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 l[2:4]=['c']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 l[4:4]=['d']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 l[-1:2]=['e']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 l[-10:2]=['f']
-+:$put =string(l)
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:py3 l[2:-10]=['g']
-+:$put =string(l)
-+:let l = []
-+:py3 l=vim.bindeval('l')
-+:py3 l[0:0]=['h']
-+:$put =string(l)
-+:"
-+:" Locked variables
-+:let l = [0, 1, 2, 3]
-+:py3 l=vim.bindeval('l')
-+:lockvar! l
-+:py3 l[2]='i'
-+:$put =string(l)
-+:unlockvar! l
-+:"
-+:" Function calls
-+:function New(...)
-+:return ['NewStart']+a:000+['NewEnd']
-+:endfunction
-+:function DictNew(...) dict
-+:return ['DictNewStart']+a:000+['DictNewEnd', self]
-+:endfunction
-+:let l=[function('New'), function('DictNew')]
-+:py3 l=vim.bindeval('l')
-+:py3 l.extend(list(l[0](1, 2, 3)))
-+:$put =string(l)
-+:py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
-+:$put =string(l)
-+:py3 l+=[l[0].name]
-+:$put =string(l)
-+:try
-+:   py3 l[1](1, 2, 3)
-+:catch
-+:   $put =v:exception[:13]
-+:endtry
-+:delfunction New
-+:try
-+:   py3 l[0](1, 2, 3)
-+:catch
-+:   $put =v:exception[:13]
-+:endtry
-+:if has('float')
-+:   let l=[0.0]
-+:   py3 l=vim.bindeval('l')
-+:   py3 l.extend([0.0])
-+:   $put =string(l)
-+:else
-+:   $put ='[0.0, 0.0]'
-+:endif
-+:let messages=[]
-+:py3 <<EOF
-+d=vim.bindeval('{}')
-+m=vim.bindeval('messages')
-+try:
-+    d['abc']
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['abc']="\0"
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['abc']=vim
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['']=1
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d['a\0b']=1
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+
-+try:
-+    d[b'a\0b']=1
-+except Exception as e:
-+    m.extend([e.__class__.__name__])
-+EOF
-+:$put =messages
-+:unlet messages
-+:" locked and scope attributes
-+:let d={} | let dl={} | lockvar dl
-+:for s in split("d dl v: g:")
-+:    let name=tr(s, ':', 's')
-+:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
-+:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
-+:    $put =toput
-+:endfor
-+:silent! let d.abc=1
-+:silent! let dl.abc=1
-+:py3 d.locked=True
-+:py3 dl.locked=False
-+:silent! let d.def=1
-+:silent! let dl.def=1
-+:put ='d:'.string(d)
-+:put ='dl:'.string(dl)
-+:unlet d dl
-+:
-+:let l=[] | let ll=[] | lockvar ll
-+:for s in split("l ll")
-+:    let name=tr(s, ':', 's')
-+:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
-+:    let toput=s.' : locked:'.py3eval(name.'.locked')
-+:    $put =toput
-+:endfor
-+:silent! call extend(l, [0])
-+:silent! call extend(ll, [0])
-+:py3 l.locked=True
-+:py3 ll.locked=False
-+:silent! call extend(l, [1])
-+:silent! call extend(ll, [1])
-+:put ='l:'.string(l)
-+:put ='ll:'.string(ll)
-+:unlet l ll
-+:"
-+:" py3eval()
-+:let l=py3eval('[0, 1, 2]')
-+:$put =string(l)
-+:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
-+:$put =sort(items(d))
-+:if has('float')
-+:   let f=py3eval('0.0')
-+:   $put =string(f)
-+:else
-+:   $put ='0.0'
-+:endif
-+:" Invalid values:
-+:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
-+:   try
-+:      let v=py3eval(e)
-+:   catch
-+:      let toput=e.":\t".v:exception[:13]
-+:      $put =toput
-+:   endtry
-+:endfor
-+:endfun
-+:"
-+:call Test()
-+:"
-+:delfunc Test
-+:call garbagecollect(1)
-+:"
-+:/^start:/,$wq! test.out
-+ENDTEST
-+
-+start:
-diff -Naur vim73.orig/src/testdir/test87.ok vim73/src/testdir/test87.ok
---- vim73.orig/src/testdir/test87.ok	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/testdir/test87.ok	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,65 @@
-+start:
-+[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
-+[1, 2, function('strlen'), {'a': 1}]
-+Vim(put):E684:
-+[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
-+[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
-+['-1', '1', 'b']
-+'-1' : {'a': 1}
-+'1' : 'asd'
-+'b' : [1, 2, function('strlen')]
-+[0, function('strlen')]
-+[3]
-+{'1': 'asd', 'b': [1, 2, function('strlen')]}
-+[0, 1, 2, 3]
-+[0, 1, 2, 3]
-+[0, 1, 3]
-+[0, 1]
-+[0, 1]
-+[0, 1]
-+[0, 1, 2, 3]
-+[0, 1, 2, 3]
-+[0, 2, 3]
-+[2, 3]
-+[2, 3]
-+[2, 3]
-+['a', 0, 1, 2, 3]
-+[0, 'b', 2, 3]
-+[0, 1, 'c']
-+[0, 1, 2, 3, 'd']
-+[0, 1, 2, 'e', 3]
-+['f', 2, 3]
-+[0, 1, 'g', 2, 3]
-+['h']
-+[0, 1, 2, 3]
-+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
-+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
-+[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
-+Vim(py3):E725:
-+Vim(py3):E117:
-+[0.0, 0.0]
-+IndexError
-+TypeError
-+TypeError
-+ValueError
-+TypeError
-+TypeError
-+d : locked:0;scope:0
-+dl : locked:1;scope:0
-+v: : locked:2;scope:1
-+g: : locked:0;scope:2
-+d:{'abc': 1}
-+dl:{'def': 1}
-+l : locked:0
-+ll : locked:1
-+l:[0]
-+ll:[1]
-+[0, 1, 2]
-+['a', 'b']
-+['c', 1]
-+['d', ['e']]
-+0.0
-+"\0":	Vim(let):E861:
-+{"\0": 1}:	Vim(let):E861:
-+undefined_name:	Vim(let):E860:
-+vim:	Vim(let):E861:
-diff -Naur vim73.orig/src/typemap vim73/src/typemap
---- vim73.orig/src/typemap	2010-05-15 11:04:10.000000000 +0000
-+++ vim73/src/typemap	2012-11-01 20:35:45.000000000 +0000
-@@ -6,7 +6,7 @@
- T_VIOBJNOMUNGE
- 	if (sv_isa($arg, \"${ntype}\")) {
- 	    IV tmp = SvIV((SV*)SvRV($arg));
--	    $var = ($type) tmp;
-+	    $var = INT2PTR($type, tmp);
- 	    if (!tmp)
- 		croak(\"$ntype no longer exists\");
- 	}
-diff -Naur vim73.orig/src/ui.c vim73/src/ui.c
---- vim73.orig/src/ui.c	2010-08-08 13:17:30.000000000 +0000
-+++ vim73/src/ui.c	2012-11-01 20:35:48.000000000 +0000
-@@ -58,7 +58,7 @@
- #endif
- }
- 
--#if defined(UNIX) || defined(VMS) || defined(PROTO)
-+#if defined(UNIX) || defined(VMS) || defined(PROTO) || defined(WIN3264)
- /*
-  * When executing an external program, there may be some typed characters that
-  * are not consumed by it.  Give them back to ui_inchar() and they are stored
-@@ -98,7 +98,7 @@
- #endif
- 
- /*
-- * ui_inchar(): low level input funcion.
-+ * ui_inchar(): low level input function.
-  * Get characters from the keyboard.
-  * Return the number of characters that are available.
-  * If "wtime" == 0 do not wait for characters.
-@@ -381,6 +381,8 @@
- 
- #if defined(FEAT_CLIPBOARD) || defined(PROTO)
- 
-+static void clip_copy_selection __ARGS((VimClipboard *clip));
-+
- /*
-  * Selection stuff using Visual mode, for cutting and pasting text to other
-  * windows.
-@@ -423,9 +425,10 @@
-  * this is called whenever VIsual mode is ended.
-  */
-     void
--clip_update_selection()
-+clip_update_selection(clip)
-+    VimClipboard    *clip;
- {
--    pos_T    start, end;
-+    pos_T	    start, end;
- 
-     /* If visual mode is only due to a redo command ("."), then ignore it */
-     if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
-@@ -444,17 +447,17 @@
- 	    start = curwin->w_cursor;
- 	    end = VIsual;
- 	}
--	if (!equalpos(clip_star.start, start)
--		|| !equalpos(clip_star.end, end)
--		|| clip_star.vmode != VIsual_mode)
--	{
--	    clip_clear_selection();
--	    clip_star.start = start;
--	    clip_star.end = end;
--	    clip_star.vmode = VIsual_mode;
--	    clip_free_selection(&clip_star);
--	    clip_own_selection(&clip_star);
--	    clip_gen_set_selection(&clip_star);
-+	if (!equalpos(clip->start, start)
-+		|| !equalpos(clip->end, end)
-+		|| clip->vmode != VIsual_mode)
-+	{
-+	    clip_clear_selection(clip);
-+	    clip->start = start;
-+	    clip->end = end;
-+	    clip->vmode = VIsual_mode;
-+	    clip_free_selection(clip);
-+	    clip_own_selection(clip);
-+	    clip_gen_set_selection(clip);
- 	}
-     }
- }
-@@ -469,13 +472,13 @@
-      */
- #ifdef FEAT_X11
-     /* Always own the selection, we might have lost it without being
--     * notified. */
-+     * notified, e.g. during a ":sh" command. */
-     if (cbd->available)
-     {
- 	int was_owned = cbd->owned;
- 
- 	cbd->owned = (clip_gen_own_selection(cbd) == OK);
--	if (!was_owned && cbd == &clip_star)
-+	if (!was_owned && (cbd == &clip_star || cbd == &clip_plus))
- 	{
- 	    /* May have to show a different kind of highlighting for the
- 	     * selected area.  There is no specific redraw command for this,
-@@ -483,13 +486,14 @@
- 	    if (cbd->owned
- 		    && (get_real_state() == VISUAL
- 					    || get_real_state() == SELECTMODE)
--		    && clip_isautosel()
-+		    && (cbd == &clip_star ? clip_isautosel_star()
-+						      : clip_isautosel_plus())
- 		    && hl_attr(HLF_V) != hl_attr(HLF_VNC))
- 		redraw_curbuf_later(INVERTED_ALL);
- 	}
-     }
- #else
--    /* Only own the clibpard when we didn't own it yet. */
-+    /* Only own the clipboard when we didn't own it yet. */
-     if (!cbd->owned && cbd->available)
- 	cbd->owned = (clip_gen_own_selection(cbd) == OK);
- #endif
-@@ -502,12 +506,15 @@
- #ifdef FEAT_X11
-     int	    was_owned = cbd->owned;
- #endif
--    int     visual_selection = (cbd == &clip_star);
-+    int     visual_selection = FALSE;
-+
-+    if (cbd == &clip_star || cbd == &clip_plus)
-+	visual_selection = TRUE;
- 
-     clip_free_selection(cbd);
-     cbd->owned = FALSE;
-     if (visual_selection)
--	clip_clear_selection();
-+	clip_clear_selection(cbd);
-     clip_gen_lose_selection(cbd);
- #ifdef FEAT_X11
-     if (visual_selection)
-@@ -518,7 +525,8 @@
- 	if (was_owned
- 		&& (get_real_state() == VISUAL
- 					    || get_real_state() == SELECTMODE)
--		&& clip_isautosel()
-+		&& (cbd == &clip_star ?
-+				clip_isautosel_star() : clip_isautosel_plus())
- 		&& hl_attr(HLF_V) != hl_attr(HLF_VNC))
- 	{
- 	    update_curbuf(INVERTED_ALL);
-@@ -534,18 +542,18 @@
- #endif
- }
- 
--    void
--clip_copy_selection()
-+    static void
-+clip_copy_selection(clip)
-+    VimClipboard	*clip;
- {
--    if (VIsual_active && (State & NORMAL) && clip_star.available)
-+    if (VIsual_active && (State & NORMAL) && clip->available)
-     {
--	if (clip_isautosel())
--	    clip_update_selection();
--	clip_free_selection(&clip_star);
--	clip_own_selection(&clip_star);
--	if (clip_star.owned)
--	    clip_get_selection(&clip_star);
--	clip_gen_set_selection(&clip_star);
-+	clip_update_selection(clip);
-+	clip_free_selection(clip);
-+	clip_own_selection(clip);
-+	if (clip->owned)
-+	    clip_get_selection(clip);
-+	clip_gen_set_selection(clip);
-     }
- }
- 
-@@ -555,21 +563,38 @@
-     void
- clip_auto_select()
- {
--    if (clip_isautosel())
--	clip_copy_selection();
-+    if (clip_isautosel_star())
-+	clip_copy_selection(&clip_star);
-+    if (clip_isautosel_plus())
-+	clip_copy_selection(&clip_plus);
- }
- 
- /*
-- * Return TRUE if automatic selection of Visual area is desired.
-+ * Return TRUE if automatic selection of Visual area is desired for the *
-+ * register.
-  */
-     int
--clip_isautosel()
-+clip_isautosel_star()
- {
-     return (
- #ifdef FEAT_GUI
- 	    gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
- #endif
--	    clip_autoselect);
-+	    clip_autoselect_star);
-+}
-+
-+/*
-+ * Return TRUE if automatic selection of Visual area is desired for the +
-+ * register.
-+ */
-+    int
-+clip_isautosel_plus()
-+{
-+    return (
-+#ifdef FEAT_GUI
-+	    gui.in_use ? (vim_strchr(p_go, GO_ASELPLUS) != NULL) :
-+#endif
-+	    clip_autoselect_plus);
- }
- 
- 
-@@ -657,7 +682,7 @@
-     VimClipboard	*cb = &clip_star;
- 
-     if (cb->state == SELECT_DONE)
--	clip_clear_selection();
-+	clip_clear_selection(cb);
- 
-     row = check_row(row);
-     col = check_col(col);
-@@ -749,7 +774,7 @@
- 	printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
- 		cb->start.col, cb->end.lnum, cb->end.col);
- #endif
--	if (clip_isautosel()
-+	if (clip_isautosel_star()
- 		|| (
- #ifdef FEAT_GUI
- 		    gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
-@@ -932,16 +957,16 @@
-  * Called from outside to clear selected region from the display
-  */
-     void
--clip_clear_selection()
-+clip_clear_selection(cbd)
-+    VimClipboard    *cbd;
- {
--    VimClipboard    *cb = &clip_star;
- 
--    if (cb->state == SELECT_CLEARED)
-+    if (cbd->state == SELECT_CLEARED)
- 	return;
- 
--    clip_invert_area((int)cb->start.lnum, cb->start.col, (int)cb->end.lnum,
--						     cb->end.col, CLIP_CLEAR);
--    cb->state = SELECT_CLEARED;
-+    clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum,
-+						     cbd->end.col, CLIP_CLEAR);
-+    cbd->state = SELECT_CLEARED;
- }
- 
- /*
-@@ -954,7 +979,7 @@
-     if (clip_star.state == SELECT_DONE
- 	    && row2 >= clip_star.start.lnum
- 	    && row1 <= clip_star.end.lnum)
--	clip_clear_selection();
-+	clip_clear_selection(&clip_star);
- }
- 
- /*
-@@ -1609,7 +1634,7 @@
- 
- #if defined(FEAT_HANGULIN) || defined(PROTO)
-     void
--push_raw_key (s, len)
-+push_raw_key(s, len)
-     char_u  *s;
-     int	    len;
- {
-@@ -1917,6 +1942,7 @@
- static Atom	vim_atom;	/* Vim's own special selection format */
- #ifdef FEAT_MBYTE
- static Atom	vimenc_atom;	/* Vim's extended selection format */
-+static Atom	utf8_atom;
- #endif
- static Atom	compound_text_atom;
- static Atom	text_atom;
-@@ -1930,6 +1956,7 @@
-     vim_atom	       = XInternAtom(dpy, VIM_ATOM_NAME,   False);
- #ifdef FEAT_MBYTE
-     vimenc_atom	       = XInternAtom(dpy, VIMENC_ATOM_NAME,False);
-+    utf8_atom	       = XInternAtom(dpy, "UTF8_STRING",   False);
- #endif
-     compound_text_atom = XInternAtom(dpy, "COMPOUND_TEXT", False);
-     text_atom	       = XInternAtom(dpy, "TEXT",	   False);
-@@ -1944,10 +1971,9 @@
-  */
- 
- static Boolean	clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
--
- static void  clip_x11_lose_ownership_cb __ARGS((Widget, Atom *));
--
- static void clip_x11_timestamp_cb __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont));
-+static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
- 
- /*
-  * Property callback to get a timestamp for XtOwnSelection.
-@@ -1985,8 +2011,17 @@
- 	return;
- 
-     /* Get the selection, using the event timestamp. */
--    XtOwnSelection(w, xproperty->atom, xproperty->time,
--	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb, NULL);
-+    if (XtOwnSelection(w, xproperty->atom, xproperty->time,
-+	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
-+	    NULL) == OK)
-+    {
-+	/* Set the "owned" flag now, there may have been a call to
-+	 * lose_ownership_cb in between. */
-+	if (xproperty->atom == clip_plus.sel_atom)
-+	    clip_plus.owned = TRUE;
-+	else
-+	    clip_star.owned = TRUE;
-+    }
- }
- 
-     void
-@@ -1997,8 +2032,6 @@
- 	    /*(XtEventHandler)*/clip_x11_timestamp_cb, (XtPointer)NULL);
- }
- 
--static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
--
-     static void
- clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
- 			      format)
-@@ -2010,7 +2043,7 @@
-     long_u	*length;
-     int		*format;
- {
--    int		motion_type;
-+    int		motion_type = MAUTO;
-     long_u	len;
-     char_u	*p;
-     char	**text_list = NULL;
-@@ -2030,7 +2063,6 @@
- 	*(int *)success = FALSE;
- 	return;
-     }
--    motion_type = MCHAR;
-     p = (char_u *)value;
-     len = *length;
-     if (*type == vim_atom)
-@@ -2069,7 +2101,11 @@
-     }
- #endif
- 
--    else if (*type == compound_text_atom || (
-+    else if (*type == compound_text_atom
-+#ifdef FEAT_MBYTE
-+	    || *type == utf8_atom
-+#endif
-+	    || (
- #ifdef FEAT_MBYTE
- 		enc_dbcs != 0 &&
- #endif
-@@ -2123,7 +2159,7 @@
- #else
- 	    1
- #endif
--	    ; i < 5; i++)
-+	    ; i < 6; i++)
-     {
- 	switch (i)
- 	{
-@@ -2131,10 +2167,18 @@
- 	    case 0:  type = vimenc_atom;	break;
- #endif
- 	    case 1:  type = vim_atom;		break;
--	    case 2:  type = compound_text_atom; break;
--	    case 3:  type = text_atom;		break;
-+#ifdef FEAT_MBYTE
-+	    case 2:  type = utf8_atom;		break;
-+#endif
-+	    case 3:  type = compound_text_atom; break;
-+	    case 4:  type = text_atom;		break;
- 	    default: type = XA_STRING;
- 	}
-+#ifdef FEAT_MBYTE
-+	if (type == utf8_atom && !enc_utf8)
-+	    /* Only request utf-8 when 'encoding' is utf8. */
-+	    continue;
-+#endif
- 	success = MAYBE;
- 	XtGetSelectionValue(myShell, cbd->sel_atom, type,
- 	    clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
-@@ -2225,18 +2269,23 @@
-     {
- 	Atom *array;
- 
--	if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 6))) == NULL)
-+	if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 7))) == NULL)
- 	    return False;
- 	*value = (XtPointer)array;
- 	i = 0;
--	array[i++] = XA_STRING;
- 	array[i++] = targets_atom;
- #ifdef FEAT_MBYTE
- 	array[i++] = vimenc_atom;
- #endif
- 	array[i++] = vim_atom;
-+#ifdef FEAT_MBYTE
-+	if (enc_utf8)
-+	    array[i++] = utf8_atom;
-+#endif
-+	array[i++] = XA_STRING;
- 	array[i++] = text_atom;
- 	array[i++] = compound_text_atom;
-+
- 	*type = XA_ATOM;
- 	/* This used to be: *format = sizeof(Atom) * 8; but that caused
- 	 * crashes on 64 bit machines. (Peter Derr) */
-@@ -2248,6 +2297,7 @@
-     if (       *target != XA_STRING
- #ifdef FEAT_MBYTE
- 	    && *target != vimenc_atom
-+	    && *target != utf8_atom
- #endif
- 	    && *target != vim_atom
- 	    && *target != text_atom
-@@ -2277,13 +2327,16 @@
- 	return False;
-     }
- 
--    if (*target == XA_STRING)
-+    if (*target == XA_STRING
-+#ifdef FEAT_MBYTE
-+	    || (*target == utf8_atom && enc_utf8)
-+#endif
-+	    )
-     {
- 	mch_memmove(result, string, (size_t)(*length));
--	*type = XA_STRING;
-+	*type = *target;
-     }
--    else if (*target == compound_text_atom
--	    || *target == text_atom)
-+    else if (*target == compound_text_atom || *target == text_atom)
-     {
- 	XTextProperty	text_prop;
- 	char		*string_nt = (char *)alloc((unsigned)*length + 1);
-@@ -2336,7 +2389,7 @@
- 
-     void
- clip_x11_lose_selection(myShell, cbd)
--    Widget	myShell;
-+    Widget		myShell;
-     VimClipboard	*cbd;
- {
-     XtDisownSelection(myShell, cbd->sel_atom, CurrentTime);
-@@ -2344,14 +2397,29 @@
- 
-     int
- clip_x11_own_selection(myShell, cbd)
--    Widget	myShell;
-+    Widget		myShell;
-     VimClipboard	*cbd;
- {
--    /* Get the time by a zero-length append, clip_x11_timestamp_cb will be
--     * called with the current timestamp.  */
--    if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell), cbd->sel_atom,
--	    timestamp_atom, 32, PropModeAppend, NULL, 0))
--	return FAIL;
-+    /* When using the GUI we have proper timestamps, use the one of the last
-+     * event.  When in the console we don't get events (the terminal gets
-+     * them), Get the time by a zero-length append, clip_x11_timestamp_cb will
-+     * be called with the current timestamp.  */
-+#ifdef FEAT_GUI
-+    if (gui.in_use)
-+    {
-+	if (XtOwnSelection(myShell, cbd->sel_atom,
-+	       XtLastTimestampProcessed(XtDisplay(myShell)),
-+	       clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
-+	       NULL) == False)
-+	    return FAIL;
-+    }
-+    else
-+#endif
-+    {
-+	if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
-+		  cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
-+	    return FAIL;
-+    }
-     /* Flush is required in a terminal as nothing else is doing it. */
-     XFlush(XtDisplay(myShell));
-     return OK;
-@@ -3064,7 +3132,7 @@
-     char_u	*start;
- 
-     start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
--    while (count <= vcol && *ptr != NUL)
-+    while (count < vcol && *ptr != NUL)
-     {
- 	count += win_lbr_chartabsize(wp, ptr, count, NULL);
- 	mb_ptr_adv(ptr);
-diff -Naur vim73.orig/src/undo.c vim73/src/undo.c
---- vim73.orig/src/undo.c	2010-08-07 10:48:15.000000000 +0000
-+++ vim73/src/undo.c	2012-11-01 20:35:48.000000000 +0000
-@@ -81,10 +81,6 @@
- #define UH_MAGIC 0x18dade	/* value for uh_magic when in use */
- #define UE_MAGIC 0xabc123	/* value for ue_magic when in use */
- 
--#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
--# include "vimio.h"	/* for vim_read(), must be before vim.h */
--#endif
--
- #include "vim.h"
- 
- static void u_unch_branch __ARGS((u_header_T *uhp));
-@@ -723,7 +719,7 @@
-     char_u		*p;
- 
-     sha256_start(&ctx);
--    for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
-+    for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
-     {
- 	p = ml_get(lnum);
- 	sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
-@@ -1386,7 +1382,7 @@
- 		char_u	mbuf[UF_START_MAGIC_LEN];
- 		int	len;
- 
--		len = vim_read(fd, mbuf, UF_START_MAGIC_LEN);
-+		len = read_eintr(fd, mbuf, UF_START_MAGIC_LEN);
- 		close(fd);
- 		if (len < UF_START_MAGIC_LEN
- 		      || memcmp(mbuf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
-@@ -1539,6 +1535,7 @@
- 	/* For systems that support ACL: get the ACL from the original file. */
- 	acl = mch_get_acl(buf->b_ffname);
- 	mch_set_acl(file_name, acl);
-+	mch_free_acl(acl);
-     }
- #endif
- 
-@@ -1861,6 +1858,7 @@
-     curbuf->b_u_seq_cur = seq_cur;
-     curbuf->b_u_time_cur = seq_time;
-     curbuf->b_u_save_nr_last = last_save_nr;
-+    curbuf->b_u_save_nr_cur = last_save_nr;
- 
-     curbuf->b_u_synced = TRUE;
-     vim_free(uhp_table);
-@@ -2794,7 +2792,7 @@
- 								uhp->uh_time);
- 	    if (uhp->uh_save_nr > 0)
- 	    {
--		while (STRLEN(IObuff) < 32)
-+		while (STRLEN(IObuff) < 33)
- 		    STRCAT(IObuff, " ");
- 		vim_snprintf_add((char *)IObuff, IOSIZE,
- 						   "  %3ld", uhp->uh_save_nr);
-@@ -2849,7 +2847,7 @@
- 	sort_strings((char_u **)ga.ga_data, ga.ga_len);
- 
- 	msg_start();
--	msg_puts_attr((char_u *)_("number changes  time            saved"),
-+	msg_puts_attr((char_u *)_("number changes  when               saved"),
- 							      hl_attr(HLF_T));
- 	for (i = 0; i < ga.ga_len && !got_int; ++i)
- 	{
-@@ -2879,7 +2877,12 @@
-     if (time(NULL) - tt >= 100)
-     {
- 	curtime = localtime(&tt);
--	(void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
-+	if (time(NULL) - tt < (60L * 60L * 12L))
-+	    /* within 12 hours */
-+	    (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
-+	else
-+	    /* longer ago */
-+	    (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
-     }
-     else
- #endif
-@@ -3299,7 +3302,7 @@
- #ifdef FEAT_QUICKFIX
- 	    !bt_dontwrite(buf) &&
- #endif
--	    (buf->b_changed || file_ff_differs(buf));
-+	    (buf->b_changed || file_ff_differs(buf, TRUE));
- }
- 
-     int
-@@ -3309,7 +3312,7 @@
- #ifdef FEAT_QUICKFIX
- 	!bt_dontwrite(curbuf) &&
- #endif
--	(curbuf->b_changed || file_ff_differs(curbuf));
-+	(curbuf->b_changed || file_ff_differs(curbuf, TRUE));
- }
- 
- #if defined(FEAT_EVAL) || defined(PROTO)
-diff -Naur vim73.orig/src/version.c vim73/src/version.c
---- vim73.orig/src/version.c	2010-08-01 13:45:48.000000000 +0000
-+++ vim73/src/version.c	2012-11-01 20:35:48.000000000 +0000
-@@ -348,6 +348,7 @@
- # else
- 	"-mouse",
- #endif
-+
- #if defined(UNIX) || defined(VMS)
- # ifdef FEAT_MOUSE_DEC
- 	"+mouse_dec",
-@@ -369,24 +370,39 @@
- # else
- 	"-mouse_netterm",
- # endif
-+#endif
-+
-+#ifdef __QNX__
-+# ifdef FEAT_MOUSE_PTERM
-+	"+mouse_pterm",
-+# else
-+	"-mouse_pterm",
-+# endif
-+#endif
-+
-+#if defined(UNIX) || defined(VMS)
-+# ifdef FEAT_MOUSE_SGR
-+	"+mouse_sgr",
-+# else
-+	"-mouse_sgr",
-+# endif
- # ifdef FEAT_SYSMOUSE
- 	"+mouse_sysmouse",
- # else
- 	"-mouse_sysmouse",
- # endif
-+# ifdef FEAT_MOUSE_URXVT
-+	"+mouse_urxvt",
-+# else
-+	"-mouse_urxvt",
-+# endif
- # ifdef FEAT_MOUSE_XTERM
- 	"+mouse_xterm",
- # else
- 	"-mouse_xterm",
- # endif
- #endif
--#ifdef __QNX__
--# ifdef FEAT_MOUSE_PTERM
--	"+mouse_pterm",
--# else
--	"-mouse_pterm",
--# endif
--#endif
-+
- #ifdef FEAT_MBYTE_IME
- # ifdef DYNAMIC_IME
- 	"+multi_byte_ime/dyn",
-@@ -426,11 +442,6 @@
- 	"-ole",
- # endif
- #endif
--#ifdef FEAT_OSFILETYPE
--	"+osfiletype",
--#else
--	"-osfiletype",
--#endif
- #ifdef FEAT_PATH_EXTRA
- 	"+path_extra",
- #else
-@@ -715,127 +726,1548 @@
- static int included_patches[] =
- {   /* Add new patch number below this line */
- /**/
--    0
--};
--
--/*
-- * Place to put a short description when adding a feature with a patch.
-- * Keep it short, e.g.,: "relative numbers", "persistent undo".
-- * Also add a comment marker to separate the lines.
-- * See the official Vim patches for the diff format: It must use a context of
-- * one line only.  Create it by hand or use "diff -C2" and edit the patch.
-- */
--static char *(extra_patches[]) =
--{   /* Add your patch description below this line */
-+    712,
- /**/
--    NULL
--};
--
--    int
--highest_patch()
--{
--    int		i;
--    int		h = 0;
--
--    for (i = 0; included_patches[i] != 0; ++i)
--	if (included_patches[i] > h)
--	    h = included_patches[i];
--    return h;
--}
--
--#if defined(FEAT_EVAL) || defined(PROTO)
--/*
-- * Return TRUE if patch "n" has been included.
-- */
--    int
--has_patch(n)
--    int		n;
--{
--    int		i;
--
--    for (i = 0; included_patches[i] != 0; ++i)
--	if (included_patches[i] == n)
--	    return TRUE;
--    return FALSE;
--}
--#endif
--
--    void
--ex_version(eap)
--    exarg_T	*eap;
--{
--    /*
--     * Ignore a ":version 9.99" command.
--     */
--    if (*eap->arg == NUL)
--    {
--	msg_putchar('\n');
--	list_version();
--    }
--}
--
--    void
--list_version()
--{
--    int		i;
--    int		first;
--    char	*s = "";
--
--    /*
--     * When adding features here, don't forget to update the list of
--     * internal variables in eval.c!
--     */
--    MSG(longVersion);
--#ifdef WIN3264
--# ifdef FEAT_GUI_W32
--#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
--    /* Only MS VC 4.1 and earlier can do Win32s */
--    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
--#  else
--#   ifdef _WIN64
--    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
--#   else
--    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
--#   endif
--#  endif
--    if (gui_is_win32s())
--	MSG_PUTS(_(" in Win32s mode"));
--# ifdef FEAT_OLE
--    MSG_PUTS(_(" with OLE support"));
--# endif
--# else
--#  ifdef _WIN64
--    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
--#  else
--    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
--#  endif
--# endif
--#endif
--#ifdef WIN16
--    MSG_PUTS(_("\nMS-Windows 16-bit version"));
--#endif
--#ifdef MSDOS
--# ifdef DJGPP
--    MSG_PUTS(_("\n32-bit MS-DOS version"));
--# else
--    MSG_PUTS(_("\n16-bit MS-DOS version"));
--# endif
--#endif
--#ifdef MACOS
--# ifdef MACOS_X
--#  ifdef MACOS_X_UNIX
--    MSG_PUTS(_("\nMacOS X (unix) version"));
--#  else
--    MSG_PUTS(_("\nMacOS X version"));
--#  endif
--#else
--    MSG_PUTS(_("\nMacOS version"));
--# endif
--#endif
--
--#ifdef RISCOS
--    MSG_PUTS(_("\nRISC OS version"));
--#endif
-+    711,
-+/**/
-+    710,
-+/**/
-+    709,
-+/**/
-+    708,
-+/**/
-+    707,
-+/**/
-+    706,
-+/**/
-+    705,
-+/**/
-+    704,
-+/**/
-+    703,
-+/**/
-+    702,
-+/**/
-+    701,
-+/**/
-+    700,
-+/**/
-+    699,
-+/**/
-+    698,
-+/**/
-+    697,
-+/**/
-+    696,
-+/**/
-+    695,
-+/**/
-+    694,
-+/**/
-+    693,
-+/**/
-+    692,
-+/**/
-+    691,
-+/**/
-+    690,
-+/**/
-+    689,
-+/**/
-+    688,
-+/**/
-+    687,
-+/**/
-+    686,
-+/**/
-+    685,
-+/**/
-+    684,
-+/**/
-+    683,
-+/**/
-+    682,
-+/**/
-+    681,
-+/**/
-+    680,
-+/**/
-+    679,
-+/**/
-+    678,
-+/**/
-+    677,
-+/**/
-+    676,
-+/**/
-+    675,
-+/**/
-+    674,
-+/**/
-+    673,
-+/**/
-+    672,
-+/**/
-+    671,
-+/**/
-+    670,
-+/**/
-+    669,
-+/**/
-+    668,
-+/**/
-+    667,
-+/**/
-+    666,
-+/**/
-+    665,
-+/**/
-+    664,
-+/**/
-+    663,
-+/**/
-+    662,
-+/**/
-+    661,
-+/**/
-+    660,
-+/**/
-+    659,
-+/**/
-+    658,
-+/**/
-+    657,
-+/**/
-+    656,
-+/**/
-+    655,
-+/**/
-+    654,
-+/**/
-+    653,
-+/**/
-+    652,
-+/**/
-+    651,
-+/**/
-+    650,
-+/**/
-+    649,
-+/**/
-+    648,
-+/**/
-+    647,
-+/**/
-+    646,
-+/**/
-+    645,
-+/**/
-+    644,
-+/**/
-+    643,
-+/**/
-+    642,
-+/**/
-+    641,
-+/**/
-+    640,
-+/**/
-+    639,
-+/**/
-+    638,
-+/**/
-+    637,
-+/**/
-+    636,
-+/**/
-+    635,
-+/**/
-+    634,
-+/**/
-+    633,
-+/**/
-+    632,
-+/**/
-+    631,
-+/**/
-+    630,
-+/**/
-+    629,
-+/**/
-+    628,
-+/**/
-+    627,
-+/**/
-+    626,
-+/**/
-+    625,
-+/**/
-+    624,
-+/**/
-+    623,
-+/**/
-+    622,
-+/**/
-+    621,
-+/**/
-+    620,
-+/**/
-+    619,
-+/**/
-+    618,
-+/**/
-+    617,
-+/**/
-+    616,
-+/**/
-+    615,
-+/**/
-+    614,
-+/**/
-+    613,
-+/**/
-+    612,
-+/**/
-+    611,
-+/**/
-+    610,
-+/**/
-+    609,
-+/**/
-+    608,
-+/**/
-+    607,
-+/**/
-+    606,
-+/**/
-+    605,
-+/**/
-+    604,
-+/**/
-+    603,
-+/**/
-+    602,
-+/**/
-+    601,
-+/**/
-+    600,
-+/**/
-+    599,
-+/**/
-+    598,
-+/**/
-+    597,
-+/**/
-+    596,
-+/**/
-+    595,
-+/**/
-+    594,
-+/**/
-+    593,
-+/**/
-+    592,
-+/**/
-+    591,
-+/**/
-+    590,
-+/**/
-+    589,
-+/**/
-+    588,
-+/**/
-+    587,
-+/**/
-+    586,
-+/**/
-+    585,
-+/**/
-+    584,
-+/**/
-+    583,
-+/**/
-+    582,
-+/**/
-+    581,
-+/**/
-+    580,
-+/**/
-+    579,
-+/**/
-+    578,
-+/**/
-+    577,
-+/**/
-+    576,
-+/**/
-+    575,
-+/**/
-+    574,
-+/**/
-+    573,
-+/**/
-+    572,
-+/**/
-+    571,
-+/**/
-+    570,
-+/**/
-+    569,
-+/**/
-+    568,
-+/**/
-+    567,
-+/**/
-+    566,
-+/**/
-+    565,
-+/**/
-+    564,
-+/**/
-+    563,
-+/**/
-+    562,
-+/**/
-+    561,
-+/**/
-+    560,
-+/**/
-+    559,
-+/**/
-+    558,
-+/**/
-+    557,
-+/**/
-+    556,
-+/**/
-+    555,
-+/**/
-+    554,
-+/**/
-+    553,
-+/**/
-+    552,
-+/**/
-+    551,
-+/**/
-+    550,
-+/**/
-+    549,
-+/**/
-+    548,
-+/**/
-+    547,
-+/**/
-+    546,
-+/**/
-+    545,
-+/**/
-+    544,
-+/**/
-+    543,
-+/**/
-+    542,
-+/**/
-+    541,
-+/**/
-+    540,
-+/**/
-+    539,
-+/**/
-+    538,
-+/**/
-+    537,
-+/**/
-+    536,
-+/**/
-+    535,
-+/**/
-+    534,
-+/**/
-+    533,
-+/**/
-+    532,
-+/**/
-+    531,
-+/**/
-+    530,
-+/**/
-+    529,
-+/**/
-+    528,
-+/**/
-+    527,
-+/**/
-+    526,
-+/**/
-+    525,
-+/**/
-+    524,
-+/**/
-+    523,
-+/**/
-+    522,
-+/**/
-+    521,
-+/**/
-+    520,
-+/**/
-+    519,
-+/**/
-+    518,
-+/**/
-+    517,
-+/**/
-+    516,
-+/**/
-+    515,
-+/**/
-+    514,
-+/**/
-+    513,
-+/**/
-+    512,
-+/**/
-+    511,
-+/**/
-+    510,
-+/**/
-+    509,
-+/**/
-+    508,
-+/**/
-+    507,
-+/**/
-+    506,
-+/**/
-+    505,
-+/**/
-+    504,
-+/**/
-+    503,
-+/**/
-+    502,
-+/**/
-+    501,
-+/**/
-+    500,
-+/**/
-+    499,
-+/**/
-+    498,
-+/**/
-+    497,
-+/**/
-+    496,
-+/**/
-+    495,
-+/**/
-+    494,
-+/**/
-+    493,
-+/**/
-+    492,
-+/**/
-+    491,
-+/**/
-+    490,
-+/**/
-+    489,
-+/**/
-+    488,
-+/**/
-+    487,
-+/**/
-+    486,
-+/**/
-+    485,
-+/**/
-+    484,
-+/**/
-+    483,
-+/**/
-+    482,
-+/**/
-+    481,
-+/**/
-+    480,
-+/**/
-+    479,
-+/**/
-+    478,
-+/**/
-+    477,
-+/**/
-+    476,
-+/**/
-+    475,
-+/**/
-+    474,
-+/**/
-+    473,
-+/**/
-+    472,
-+/**/
-+    471,
-+/**/
-+    470,
-+/**/
-+    469,
-+/**/
-+    468,
-+/**/
-+    467,
-+/**/
-+    466,
-+/**/
-+    465,
-+/**/
-+    464,
-+/**/
-+    463,
-+/**/
-+    462,
-+/**/
-+    461,
-+/**/
-+    460,
-+/**/
-+    459,
-+/**/
-+    458,
-+/**/
-+    457,
-+/**/
-+    456,
-+/**/
-+    455,
-+/**/
-+    454,
-+/**/
-+    453,
-+/**/
-+    452,
-+/**/
-+    451,
-+/**/
-+    450,
-+/**/
-+    449,
-+/**/
-+    448,
-+/**/
-+    447,
-+/**/
-+    446,
-+/**/
-+    445,
-+/**/
-+    444,
-+/**/
-+    443,
-+/**/
-+    442,
-+/**/
-+    441,
-+/**/
-+    440,
-+/**/
-+    439,
-+/**/
-+    438,
-+/**/
-+    437,
-+/**/
-+    436,
-+/**/
-+    435,
-+/**/
-+    434,
-+/**/
-+    433,
-+/**/
-+    432,
-+/**/
-+    431,
-+/**/
-+    430,
-+/**/
-+    429,
-+/**/
-+    428,
-+/**/
-+    427,
-+/**/
-+    426,
-+/**/
-+    425,
-+/**/
-+    424,
-+/**/
-+    423,
-+/**/
-+    422,
-+/**/
-+    421,
-+/**/
-+    420,
-+/**/
-+    419,
-+/**/
-+    418,
-+/**/
-+    417,
-+/**/
-+    416,
-+/**/
-+    415,
-+/**/
-+    414,
-+/**/
-+    413,
-+/**/
-+    412,
-+/**/
-+    411,
-+/**/
-+    410,
-+/**/
-+    409,
-+/**/
-+    408,
-+/**/
-+    407,
-+/**/
-+    406,
-+/**/
-+    405,
-+/**/
-+    404,
-+/**/
-+    403,
-+/**/
-+    402,
-+/**/
-+    401,
-+/**/
-+    400,
-+/**/
-+    399,
-+/**/
-+    398,
-+/**/
-+    397,
-+/**/
-+    396,
-+/**/
-+    395,
-+/**/
-+    394,
-+/**/
-+    393,
-+/**/
-+    392,
-+/**/
-+    391,
-+/**/
-+    390,
-+/**/
-+    389,
-+/**/
-+    388,
-+/**/
-+    387,
-+/**/
-+    386,
-+/**/
-+    385,
-+/**/
-+    384,
-+/**/
-+    383,
-+/**/
-+    382,
-+/**/
-+    381,
-+/**/
-+    380,
-+/**/
-+    379,
-+/**/
-+    378,
-+/**/
-+    377,
-+/**/
-+    376,
-+/**/
-+    375,
-+/**/
-+    374,
-+/**/
-+    373,
-+/**/
-+    372,
-+/**/
-+    371,
-+/**/
-+    370,
-+/**/
-+    369,
-+/**/
-+    368,
-+/**/
-+    367,
-+/**/
-+    366,
-+/**/
-+    365,
-+/**/
-+    364,
-+/**/
-+    363,
-+/**/
-+    362,
-+/**/
-+    361,
-+/**/
-+    360,
-+/**/
-+    359,
-+/**/
-+    358,
-+/**/
-+    357,
-+/**/
-+    356,
-+/**/
-+    355,
-+/**/
-+    354,
-+/**/
-+    353,
-+/**/
-+    352,
-+/**/
-+    351,
-+/**/
-+    350,
-+/**/
-+    349,
-+/**/
-+    348,
-+/**/
-+    347,
-+/**/
-+    346,
-+/**/
-+    345,
-+/**/
-+    344,
-+/**/
-+    343,
-+/**/
-+    342,
-+/**/
-+    341,
-+/**/
-+    340,
-+/**/
-+    339,
-+/**/
-+    338,
-+/**/
-+    337,
-+/**/
-+    336,
-+/**/
-+    335,
-+/**/
-+    334,
-+/**/
-+    333,
-+/**/
-+    332,
-+/**/
-+    331,
-+/**/
-+    330,
-+/**/
-+    329,
-+/**/
-+    328,
-+/**/
-+    327,
-+/**/
-+    326,
-+/**/
-+    325,
-+/**/
-+    324,
-+/**/
-+    323,
-+/**/
-+    322,
-+/**/
-+    321,
-+/**/
-+    320,
-+/**/
-+    319,
-+/**/
-+    318,
-+/**/
-+    317,
-+/**/
-+    316,
-+/**/
-+    315,
-+/**/
-+    314,
-+/**/
-+    313,
-+/**/
-+    312,
-+/**/
-+    311,
-+/**/
-+    310,
-+/**/
-+    309,
-+/**/
-+    308,
-+/**/
-+    307,
-+/**/
-+    306,
-+/**/
-+    305,
-+/**/
-+    304,
-+/**/
-+    303,
-+/**/
-+    302,
-+/**/
-+    301,
-+/**/
-+    300,
-+/**/
-+    299,
-+/**/
-+    298,
-+/**/
-+    297,
-+/**/
-+    296,
-+/**/
-+    295,
-+/**/
-+    294,
-+/**/
-+    293,
-+/**/
-+    292,
-+/**/
-+    291,
-+/**/
-+    290,
-+/**/
-+    289,
-+/**/
-+    288,
-+/**/
-+    287,
-+/**/
-+    286,
-+/**/
-+    285,
-+/**/
-+    284,
-+/**/
-+    283,
-+/**/
-+    282,
-+/**/
-+    281,
-+/**/
-+    280,
-+/**/
-+    279,
-+/**/
-+    278,
-+/**/
-+    277,
-+/**/
-+    276,
-+/**/
-+    275,
-+/**/
-+    274,
-+/**/
-+    273,
-+/**/
-+    272,
-+/**/
-+    271,
-+/**/
-+    270,
-+/**/
-+    269,
-+/**/
-+    268,
-+/**/
-+    267,
-+/**/
-+    266,
-+/**/
-+    265,
-+/**/
-+    264,
-+/**/
-+    263,
-+/**/
-+    262,
-+/**/
-+    261,
-+/**/
-+    260,
-+/**/
-+    259,
-+/**/
-+    258,
-+/**/
-+    257,
-+/**/
-+    256,
-+/**/
-+    255,
-+/**/
-+    254,
-+/**/
-+    253,
-+/**/
-+    252,
-+/**/
-+    251,
-+/**/
-+    250,
-+/**/
-+    249,
-+/**/
-+    248,
-+/**/
-+    247,
-+/**/
-+    246,
-+/**/
-+    245,
-+/**/
-+    244,
-+/**/
-+    243,
-+/**/
-+    242,
-+/**/
-+    241,
-+/**/
-+    240,
-+/**/
-+    239,
-+/**/
-+    238,
-+/**/
-+    237,
-+/**/
-+    236,
-+/**/
-+    235,
-+/**/
-+    234,
-+/**/
-+    233,
-+/**/
-+    232,
-+/**/
-+    231,
-+/**/
-+    230,
-+/**/
-+    229,
-+/**/
-+    228,
-+/**/
-+    227,
-+/**/
-+    226,
-+/**/
-+    225,
-+/**/
-+    224,
-+/**/
-+    223,
-+/**/
-+    222,
-+/**/
-+    221,
-+/**/
-+    220,
-+/**/
-+    219,
-+/**/
-+    218,
-+/**/
-+    217,
-+/**/
-+    216,
-+/**/
-+    215,
-+/**/
-+    214,
-+/**/
-+    213,
-+/**/
-+    212,
-+/**/
-+    211,
-+/**/
-+    210,
-+/**/
-+    209,
-+/**/
-+    208,
-+/**/
-+    207,
-+/**/
-+    206,
-+/**/
-+    205,
-+/**/
-+    204,
-+/**/
-+    203,
-+/**/
-+    202,
-+/**/
-+    201,
-+/**/
-+    200,
-+/**/
-+    199,
-+/**/
-+    198,
-+/**/
-+    197,
-+/**/
-+    196,
-+/**/
-+    195,
-+/**/
-+    194,
-+/**/
-+    193,
-+/**/
-+    192,
-+/**/
-+    191,
-+/**/
-+    190,
-+/**/
-+    189,
-+/**/
-+    188,
-+/**/
-+    187,
-+/**/
-+    186,
-+/**/
-+    185,
-+/**/
-+    184,
-+/**/
-+    183,
-+/**/
-+    182,
-+/**/
-+    181,
-+/**/
-+    180,
-+/**/
-+    179,
-+/**/
-+    178,
-+/**/
-+    177,
-+/**/
-+    176,
-+/**/
-+    175,
-+/**/
-+    174,
-+/**/
-+    173,
-+/**/
-+    172,
-+/**/
-+    171,
-+/**/
-+    170,
-+/**/
-+    169,
-+/**/
-+    168,
-+/**/
-+    167,
-+/**/
-+    166,
-+/**/
-+    165,
-+/**/
-+    164,
-+/**/
-+    163,
-+/**/
-+    162,
-+/**/
-+    161,
-+/**/
-+    160,
-+/**/
-+    159,
-+/**/
-+    158,
-+/**/
-+    157,
-+/**/
-+    156,
-+/**/
-+    155,
-+/**/
-+    154,
-+/**/
-+    153,
-+/**/
-+    152,
-+/**/
-+    151,
-+/**/
-+    150,
-+/**/
-+    149,
-+/**/
-+    148,
-+/**/
-+    147,
-+/**/
-+    146,
-+/**/
-+    145,
-+/**/
-+    144,
-+/**/
-+    143,
-+/**/
-+    142,
-+/**/
-+    141,
-+/**/
-+    140,
-+/**/
-+    139,
-+/**/
-+    138,
-+/**/
-+    137,
-+/**/
-+    136,
-+/**/
-+    135,
-+/**/
-+    134,
-+/**/
-+    133,
-+/**/
-+    132,
-+/**/
-+    131,
-+/**/
-+    130,
-+/**/
-+    129,
-+/**/
-+    128,
-+/**/
-+    127,
-+/**/
-+    126,
-+/**/
-+    125,
-+/**/
-+    124,
-+/**/
-+    123,
-+/**/
-+    122,
-+/**/
-+    121,
-+/**/
-+    120,
-+/**/
-+    119,
-+/**/
-+    118,
-+/**/
-+    117,
-+/**/
-+    116,
-+/**/
-+    115,
-+/**/
-+    114,
-+/**/
-+    113,
-+/**/
-+    112,
-+/**/
-+    111,
-+/**/
-+    110,
-+/**/
-+    109,
-+/**/
-+    108,
-+/**/
-+    107,
-+/**/
-+    106,
-+/**/
-+    105,
-+/**/
-+    104,
-+/**/
-+    103,
-+/**/
-+    102,
-+/**/
-+    101,
-+/**/
-+    100,
-+/**/
-+    99,
-+/**/
-+    98,
-+/**/
-+    97,
-+/**/
-+    96,
-+/**/
-+    95,
-+/**/
-+    94,
-+/**/
-+    93,
-+/**/
-+    92,
-+/**/
-+    91,
-+/**/
-+    90,
-+/**/
-+    89,
-+/**/
-+    88,
-+/**/
-+    87,
-+/**/
-+    86,
-+/**/
-+    85,
-+/**/
-+    84,
-+/**/
-+    83,
-+/**/
-+    82,
-+/**/
-+    81,
-+/**/
-+    80,
-+/**/
-+    79,
-+/**/
-+    78,
-+/**/
-+    77,
-+/**/
-+    76,
-+/**/
-+    75,
-+/**/
-+    74,
-+/**/
-+    73,
-+/**/
-+    72,
-+/**/
-+    71,
-+/**/
-+    70,
-+/**/
-+    69,
-+/**/
-+    68,
-+/**/
-+    67,
-+/**/
-+    66,
-+/**/
-+    65,
-+/**/
-+    64,
-+/**/
-+    63,
-+/**/
-+    62,
-+/**/
-+    61,
-+/**/
-+    60,
-+/**/
-+    59,
-+/**/
-+    58,
-+/**/
-+    57,
-+/**/
-+    56,
-+/**/
-+    55,
-+/**/
-+    54,
-+/**/
-+    53,
-+/**/
-+    52,
-+/**/
-+    51,
-+/**/
-+    50,
-+/**/
-+    49,
-+/**/
-+    48,
-+/**/
-+    47,
-+/**/
-+    46,
-+/**/
-+    45,
-+/**/
-+    44,
-+/**/
-+    43,
-+/**/
-+    42,
-+/**/
-+    41,
-+/**/
-+    40,
-+/**/
-+    39,
-+/**/
-+    38,
-+/**/
-+    37,
-+/**/
-+    36,
-+/**/
-+    35,
-+/**/
-+    34,
-+/**/
-+    33,
-+/**/
-+    32,
-+/**/
-+    31,
-+/**/
-+    30,
-+/**/
-+    29,
-+/**/
-+    28,
-+/**/
-+    27,
-+/**/
-+    26,
-+/**/
-+    25,
-+/**/
-+    24,
-+/**/
-+    23,
-+/**/
-+    22,
-+/**/
-+    21,
-+/**/
-+    20,
-+/**/
-+    19,
-+/**/
-+    18,
-+/**/
-+    17,
-+/**/
-+    16,
-+/**/
-+    15,
-+/**/
-+    14,
-+/**/
-+    13,
-+/**/
-+    12,
-+/**/
-+    11,
-+/**/
-+    10,
-+/**/
-+    9,
-+/**/
-+    8,
-+/**/
-+    7,
-+/**/
-+    6,
-+/**/
-+    5,
-+/**/
-+    4,
-+/**/
-+    3,
-+/**/
-+    2,
-+/**/
-+    1,
-+/**/
-+    0
-+};
-+
-+/*
-+ * Place to put a short description when adding a feature with a patch.
-+ * Keep it short, e.g.,: "relative numbers", "persistent undo".
-+ * Also add a comment marker to separate the lines.
-+ * See the official Vim patches for the diff format: It must use a context of
-+ * one line only.  Create it by hand or use "diff -C2" and edit the patch.
-+ */
-+static char *(extra_patches[]) =
-+{   /* Add your patch description below this line */
-+/**/
-+    NULL
-+};
-+
-+    int
-+highest_patch()
-+{
-+    int		i;
-+    int		h = 0;
-+
-+    for (i = 0; included_patches[i] != 0; ++i)
-+	if (included_patches[i] > h)
-+	    h = included_patches[i];
-+    return h;
-+}
-+
-+#if defined(FEAT_EVAL) || defined(PROTO)
-+/*
-+ * Return TRUE if patch "n" has been included.
-+ */
-+    int
-+has_patch(n)
-+    int		n;
-+{
-+    int		i;
-+
-+    for (i = 0; included_patches[i] != 0; ++i)
-+	if (included_patches[i] == n)
-+	    return TRUE;
-+    return FALSE;
-+}
-+#endif
-+
-+    void
-+ex_version(eap)
-+    exarg_T	*eap;
-+{
-+    /*
-+     * Ignore a ":version 9.99" command.
-+     */
-+    if (*eap->arg == NUL)
-+    {
-+	msg_putchar('\n');
-+	list_version();
-+    }
-+}
-+
-+    void
-+list_version()
-+{
-+    int		i;
-+    int		first;
-+    char	*s = "";
-+
-+    /*
-+     * When adding features here, don't forget to update the list of
-+     * internal variables in eval.c!
-+     */
-+    MSG(longVersion);
-+#ifdef WIN3264
-+# ifdef FEAT_GUI_W32
-+#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
-+    /* Only MS VC 4.1 and earlier can do Win32s */
-+    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
-+#  else
-+#   ifdef _WIN64
-+    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
-+#   else
-+    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
-+#   endif
-+#  endif
-+    if (gui_is_win32s())
-+	MSG_PUTS(_(" in Win32s mode"));
-+# ifdef FEAT_OLE
-+    MSG_PUTS(_(" with OLE support"));
-+# endif
-+# else
-+#  ifdef _WIN64
-+    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
-+#  else
-+    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
-+#  endif
-+# endif
-+#endif
-+#ifdef WIN16
-+    MSG_PUTS(_("\nMS-Windows 16-bit version"));
-+#endif
-+#ifdef MSDOS
-+# ifdef DJGPP
-+    MSG_PUTS(_("\n32-bit MS-DOS version"));
-+# else
-+    MSG_PUTS(_("\n16-bit MS-DOS version"));
-+# endif
-+#endif
-+#ifdef MACOS
-+# ifdef MACOS_X
-+#  ifdef MACOS_X_UNIX
-+    MSG_PUTS(_("\nMacOS X (unix) version"));
-+#  else
-+    MSG_PUTS(_("\nMacOS X version"));
-+#  endif
-+#else
-+    MSG_PUTS(_("\nMacOS version"));
-+# endif
-+#endif
-+
- #ifdef VMS
-     MSG_PUTS(_("\nOpenVMS version"));
- # ifdef HAVE_PATHDEF
-@@ -1262,14 +2694,11 @@
- 	if (highest_patch())
- 	{
- 	    /* Check for 9.9x or 9.9xx, alpha/beta version */
--	    if (isalpha((int)mediumVersion[3]))
-+	    if (isalpha((int)vers[3]))
- 	    {
--		if (isalpha((int)mediumVersion[4]))
--		    sprintf((char *)vers + 5, ".%d%s", highest_patch(),
--							   mediumVersion + 5);
--		else
--		    sprintf((char *)vers + 4, ".%d%s", highest_patch(),
--							   mediumVersion + 4);
-+		int len = (isalpha((int)vers[4])) ? 5 : 4;
-+		sprintf((char *)vers + len, ".%d%s", highest_patch(),
-+							 mediumVersion + len);
- 	    }
- 	    else
- 		sprintf((char *)vers + 3, ".%d", highest_patch());
-diff -Naur vim73.orig/src/version.c~ vim73/src/version.c~
---- vim73.orig/src/version.c~	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/version.c~	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,2732 @@
-+/* vi:set ts=8 sts=4 sw=4:
-+ *
-+ * VIM - Vi IMproved		by Bram Moolenaar
-+ *
-+ * Do ":help uganda"  in Vim to read copying and usage conditions.
-+ * Do ":help credits" in Vim to see a list of people who contributed.
-+ * See README.txt for an overview of the Vim source code.
-+ */
-+
-+#include "vim.h"
-+
-+#ifdef AMIGA
-+# include <time.h>	/* for time() */
-+#endif
-+
-+/*
-+ * Vim originated from Stevie version 3.6 (Fish disk 217) by GRWalter (Fred)
-+ * It has been changed beyond recognition since then.
-+ *
-+ * Differences between version 6.x and 7.x can be found with ":help version7".
-+ * Differences between version 5.x and 6.x can be found with ":help version6".
-+ * Differences between version 4.x and 5.x can be found with ":help version5".
-+ * Differences between version 3.0 and 4.x can be found with ":help version4".
-+ * All the remarks about older versions have been removed, they are not very
-+ * interesting.
-+ */
-+
-+#include "version.h"
-+
-+char		*Version = VIM_VERSION_SHORT;
-+static char	*mediumVersion = VIM_VERSION_MEDIUM;
-+
-+#if defined(HAVE_DATE_TIME) || defined(PROTO)
-+# if (defined(VMS) && defined(VAXC)) || defined(PROTO)
-+char	longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
-+						      + sizeof(__TIME__) + 3];
-+    void
-+make_version()
-+{
-+    /*
-+     * Construct the long version string.  Necessary because
-+     * VAX C can't catenate strings in the preprocessor.
-+     */
-+    strcpy(longVersion, VIM_VERSION_LONG_DATE);
-+    strcat(longVersion, __DATE__);
-+    strcat(longVersion, " ");
-+    strcat(longVersion, __TIME__);
-+    strcat(longVersion, ")");
-+}
-+# else
-+char	*longVersion = VIM_VERSION_LONG_DATE __DATE__ " " __TIME__ ")";
-+# endif
-+#else
-+char	*longVersion = VIM_VERSION_LONG;
-+#endif
-+
-+static void version_msg __ARGS((char *s));
-+
-+static char *(features[]) =
-+{
-+#ifdef AMIGA		/* only for Amiga systems */
-+# ifdef FEAT_ARP
-+	"+ARP",
-+# else
-+	"-ARP",
-+# endif
-+#endif
-+#ifdef FEAT_ARABIC
-+	"+arabic",
-+#else
-+	"-arabic",
-+#endif
-+#ifdef FEAT_AUTOCMD
-+	"+autocmd",
-+#else
-+	"-autocmd",
-+#endif
-+#ifdef FEAT_BEVAL
-+	"+balloon_eval",
-+#else
-+	"-balloon_eval",
-+#endif
-+#ifdef FEAT_BROWSE
-+	"+browse",
-+#else
-+	"-browse",
-+#endif
-+#ifdef NO_BUILTIN_TCAPS
-+	"-builtin_terms",
-+#endif
-+#ifdef SOME_BUILTIN_TCAPS
-+	"+builtin_terms",
-+#endif
-+#ifdef ALL_BUILTIN_TCAPS
-+	"++builtin_terms",
-+#endif
-+#ifdef FEAT_BYTEOFF
-+	"+byte_offset",
-+#else
-+	"-byte_offset",
-+#endif
-+#ifdef FEAT_CINDENT
-+	"+cindent",
-+#else
-+	"-cindent",
-+#endif
-+#ifdef FEAT_CLIENTSERVER
-+	"+clientserver",
-+#else
-+	"-clientserver",
-+#endif
-+#ifdef FEAT_CLIPBOARD
-+	"+clipboard",
-+#else
-+	"-clipboard",
-+#endif
-+#ifdef FEAT_CMDL_COMPL
-+	"+cmdline_compl",
-+#else
-+	"-cmdline_compl",
-+#endif
-+#ifdef FEAT_CMDHIST
-+	"+cmdline_hist",
-+#else
-+	"-cmdline_hist",
-+#endif
-+#ifdef FEAT_CMDL_INFO
-+	"+cmdline_info",
-+#else
-+	"-cmdline_info",
-+#endif
-+#ifdef FEAT_COMMENTS
-+	"+comments",
-+#else
-+	"-comments",
-+#endif
-+#ifdef FEAT_CONCEAL
-+	"+conceal",
-+#else
-+	"-conceal",
-+#endif
-+#ifdef FEAT_CRYPT
-+	"+cryptv",
-+#else
-+	"-cryptv",
-+#endif
-+#ifdef FEAT_CSCOPE
-+	"+cscope",
-+#else
-+	"-cscope",
-+#endif
-+#ifdef FEAT_CURSORBIND
-+	"+cursorbind",
-+#else
-+	"-cursorbind",
-+#endif
-+#ifdef CURSOR_SHAPE
-+	"+cursorshape",
-+#else
-+	"-cursorshape",
-+#endif
-+#if defined(FEAT_CON_DIALOG) && defined(FEAT_GUI_DIALOG)
-+	"+dialog_con_gui",
-+#else
-+# if defined(FEAT_CON_DIALOG)
-+	"+dialog_con",
-+# else
-+#  if defined(FEAT_GUI_DIALOG)
-+	"+dialog_gui",
-+#  else
-+	"-dialog",
-+#  endif
-+# endif
-+#endif
-+#ifdef FEAT_DIFF
-+	"+diff",
-+#else
-+	"-diff",
-+#endif
-+#ifdef FEAT_DIGRAPHS
-+	"+digraphs",
-+#else
-+	"-digraphs",
-+#endif
-+#ifdef FEAT_DND
-+	"+dnd",
-+#else
-+	"-dnd",
-+#endif
-+#ifdef EBCDIC
-+	"+ebcdic",
-+#else
-+	"-ebcdic",
-+#endif
-+#ifdef FEAT_EMACS_TAGS
-+	"+emacs_tags",
-+#else
-+	"-emacs_tags",
-+#endif
-+#ifdef FEAT_EVAL
-+	"+eval",
-+#else
-+	"-eval",
-+#endif
-+#ifdef FEAT_EX_EXTRA
-+	"+ex_extra",
-+#else
-+	"-ex_extra",
-+#endif
-+#ifdef FEAT_SEARCH_EXTRA
-+	"+extra_search",
-+#else
-+	"-extra_search",
-+#endif
-+#ifdef FEAT_FKMAP
-+	"+farsi",
-+#else
-+	"-farsi",
-+#endif
-+#ifdef FEAT_SEARCHPATH
-+	"+file_in_path",
-+#else
-+	"-file_in_path",
-+#endif
-+#ifdef FEAT_FIND_ID
-+	"+find_in_path",
-+#else
-+	"-find_in_path",
-+#endif
-+#ifdef FEAT_FLOAT
-+	"+float",
-+#else
-+	"-float",
-+#endif
-+#ifdef FEAT_FOLDING
-+	"+folding",
-+#else
-+	"-folding",
-+#endif
-+#ifdef FEAT_FOOTER
-+	"+footer",
-+#else
-+	"-footer",
-+#endif
-+	    /* only interesting on Unix systems */
-+#if !defined(USE_SYSTEM) && defined(UNIX)
-+	"+fork()",
-+#endif
-+#ifdef FEAT_GETTEXT
-+# ifdef DYNAMIC_GETTEXT
-+	"+gettext/dyn",
-+# else
-+	"+gettext",
-+# endif
-+#else
-+	"-gettext",
-+#endif
-+#ifdef FEAT_HANGULIN
-+	"+hangul_input",
-+#else
-+	"-hangul_input",
-+#endif
-+#if (defined(HAVE_ICONV_H) && defined(USE_ICONV)) || defined(DYNAMIC_ICONV)
-+# ifdef DYNAMIC_ICONV
-+	"+iconv/dyn",
-+# else
-+	"+iconv",
-+# endif
-+#else
-+	"-iconv",
-+#endif
-+#ifdef FEAT_INS_EXPAND
-+	"+insert_expand",
-+#else
-+	"-insert_expand",
-+#endif
-+#ifdef FEAT_JUMPLIST
-+	"+jumplist",
-+#else
-+	"-jumplist",
-+#endif
-+#ifdef FEAT_KEYMAP
-+	"+keymap",
-+#else
-+	"-keymap",
-+#endif
-+#ifdef FEAT_LANGMAP
-+	"+langmap",
-+#else
-+	"-langmap",
-+#endif
-+#ifdef FEAT_LIBCALL
-+	"+libcall",
-+#else
-+	"-libcall",
-+#endif
-+#ifdef FEAT_LINEBREAK
-+	"+linebreak",
-+#else
-+	"-linebreak",
-+#endif
-+#ifdef FEAT_LISP
-+	"+lispindent",
-+#else
-+	"-lispindent",
-+#endif
-+#ifdef FEAT_LISTCMDS
-+	"+listcmds",
-+#else
-+	"-listcmds",
-+#endif
-+#ifdef FEAT_LOCALMAP
-+	"+localmap",
-+#else
-+	"-localmap",
-+#endif
-+#ifdef FEAT_LUA
-+# ifdef DYNAMIC_LUA
-+	"+lua/dyn",
-+# else
-+	"+lua",
-+# endif
-+#else
-+	"-lua",
-+#endif
-+#ifdef FEAT_MENU
-+	"+menu",
-+#else
-+	"-menu",
-+#endif
-+#ifdef FEAT_SESSION
-+	"+mksession",
-+#else
-+	"-mksession",
-+#endif
-+#ifdef FEAT_MODIFY_FNAME
-+	"+modify_fname",
-+#else
-+	"-modify_fname",
-+#endif
-+#ifdef FEAT_MOUSE
-+	"+mouse",
-+#  ifdef FEAT_MOUSESHAPE
-+	"+mouseshape",
-+#  else
-+	"-mouseshape",
-+#  endif
-+# else
-+	"-mouse",
-+#endif
-+
-+#if defined(UNIX) || defined(VMS)
-+# ifdef FEAT_MOUSE_DEC
-+	"+mouse_dec",
-+# else
-+	"-mouse_dec",
-+# endif
-+# ifdef FEAT_MOUSE_GPM
-+	"+mouse_gpm",
-+# else
-+	"-mouse_gpm",
-+# endif
-+# ifdef FEAT_MOUSE_JSB
-+	"+mouse_jsbterm",
-+# else
-+	"-mouse_jsbterm",
-+# endif
-+# ifdef FEAT_MOUSE_NET
-+	"+mouse_netterm",
-+# else
-+	"-mouse_netterm",
-+# endif
-+#endif
-+
-+#ifdef __QNX__
-+# ifdef FEAT_MOUSE_PTERM
-+	"+mouse_pterm",
-+# else
-+	"-mouse_pterm",
-+# endif
-+#endif
-+
-+#if defined(UNIX) || defined(VMS)
-+# ifdef FEAT_MOUSE_SGR
-+	"+mouse_sgr",
-+# else
-+	"-mouse_sgr",
-+# endif
-+# ifdef FEAT_SYSMOUSE
-+	"+mouse_sysmouse",
-+# else
-+	"-mouse_sysmouse",
-+# endif
-+# ifdef FEAT_MOUSE_URXVT
-+	"+mouse_urxvt",
-+# else
-+	"-mouse_urxvt",
-+# endif
-+# ifdef FEAT_MOUSE_XTERM
-+	"+mouse_xterm",
-+# else
-+	"-mouse_xterm",
-+# endif
-+#endif
-+
-+#ifdef FEAT_MBYTE_IME
-+# ifdef DYNAMIC_IME
-+	"+multi_byte_ime/dyn",
-+# else
-+	"+multi_byte_ime",
-+# endif
-+#else
-+# ifdef FEAT_MBYTE
-+	"+multi_byte",
-+# else
-+	"-multi_byte",
-+# endif
-+#endif
-+#ifdef FEAT_MULTI_LANG
-+	"+multi_lang",
-+#else
-+	"-multi_lang",
-+#endif
-+#ifdef FEAT_MZSCHEME
-+# ifdef DYNAMIC_MZSCHEME
-+	"+mzscheme/dyn",
-+# else
-+	"+mzscheme",
-+# endif
-+#else
-+	"-mzscheme",
-+#endif
-+#ifdef FEAT_NETBEANS_INTG
-+	"+netbeans_intg",
-+#else
-+	"-netbeans_intg",
-+#endif
-+#ifdef FEAT_GUI_W32
-+# ifdef FEAT_OLE
-+	"+ole",
-+# else
-+	"-ole",
-+# endif
-+#endif
-+#ifdef FEAT_PATH_EXTRA
-+	"+path_extra",
-+#else
-+	"-path_extra",
-+#endif
-+#ifdef FEAT_PERL
-+# ifdef DYNAMIC_PERL
-+	"+perl/dyn",
-+# else
-+	"+perl",
-+# endif
-+#else
-+	"-perl",
-+#endif
-+#ifdef FEAT_PERSISTENT_UNDO
-+	"+persistent_undo",
-+#else
-+	"-persistent_undo",
-+#endif
-+#ifdef FEAT_PRINTER
-+# ifdef FEAT_POSTSCRIPT
-+	"+postscript",
-+# else
-+	"-postscript",
-+# endif
-+	"+printer",
-+#else
-+	"-printer",
-+#endif
-+#ifdef FEAT_PROFILE
-+	"+profile",
-+#else
-+	"-profile",
-+#endif
-+#ifdef FEAT_PYTHON
-+# ifdef DYNAMIC_PYTHON
-+	"+python/dyn",
-+# else
-+	"+python",
-+# endif
-+#else
-+	"-python",
-+#endif
-+#ifdef FEAT_PYTHON3
-+# ifdef DYNAMIC_PYTHON3
-+	"+python3/dyn",
-+# else
-+	"+python3",
-+# endif
-+#else
-+	"-python3",
-+#endif
-+#ifdef FEAT_QUICKFIX
-+	"+quickfix",
-+#else
-+	"-quickfix",
-+#endif
-+#ifdef FEAT_RELTIME
-+	"+reltime",
-+#else
-+	"-reltime",
-+#endif
-+#ifdef FEAT_RIGHTLEFT
-+	"+rightleft",
-+#else
-+	"-rightleft",
-+#endif
-+#ifdef FEAT_RUBY
-+# ifdef DYNAMIC_RUBY
-+	"+ruby/dyn",
-+# else
-+	"+ruby",
-+# endif
-+#else
-+	"-ruby",
-+#endif
-+#ifdef FEAT_SCROLLBIND
-+	"+scrollbind",
-+#else
-+	"-scrollbind",
-+#endif
-+#ifdef FEAT_SIGNS
-+	"+signs",
-+#else
-+	"-signs",
-+#endif
-+#ifdef FEAT_SMARTINDENT
-+	"+smartindent",
-+#else
-+	"-smartindent",
-+#endif
-+#ifdef FEAT_SNIFF
-+	"+sniff",
-+#else
-+	"-sniff",
-+#endif
-+#ifdef STARTUPTIME
-+	"+startuptime",
-+#else
-+	"-startuptime",
-+#endif
-+#ifdef FEAT_STL_OPT
-+	"+statusline",
-+#else
-+	"-statusline",
-+#endif
-+#ifdef FEAT_SUN_WORKSHOP
-+	"+sun_workshop",
-+#else
-+	"-sun_workshop",
-+#endif
-+#ifdef FEAT_SYN_HL
-+	"+syntax",
-+#else
-+	"-syntax",
-+#endif
-+	    /* only interesting on Unix systems */
-+#if defined(USE_SYSTEM) && (defined(UNIX) || defined(__EMX__))
-+	"+system()",
-+#endif
-+#ifdef FEAT_TAG_BINS
-+	"+tag_binary",
-+#else
-+	"-tag_binary",
-+#endif
-+#ifdef FEAT_TAG_OLDSTATIC
-+	"+tag_old_static",
-+#else
-+	"-tag_old_static",
-+#endif
-+#ifdef FEAT_TAG_ANYWHITE
-+	"+tag_any_white",
-+#else
-+	"-tag_any_white",
-+#endif
-+#ifdef FEAT_TCL
-+# ifdef DYNAMIC_TCL
-+	"+tcl/dyn",
-+# else
-+	"+tcl",
-+# endif
-+#else
-+	"-tcl",
-+#endif
-+#if defined(UNIX) || defined(__EMX__)
-+/* only Unix (or OS/2 with EMX!) can have terminfo instead of termcap */
-+# ifdef TERMINFO
-+	"+terminfo",
-+# else
-+	"-terminfo",
-+# endif
-+#else		    /* unix always includes termcap support */
-+# ifdef HAVE_TGETENT
-+	"+tgetent",
-+# else
-+	"-tgetent",
-+# endif
-+#endif
-+#ifdef FEAT_TERMRESPONSE
-+	"+termresponse",
-+#else
-+	"-termresponse",
-+#endif
-+#ifdef FEAT_TEXTOBJ
-+	"+textobjects",
-+#else
-+	"-textobjects",
-+#endif
-+#ifdef FEAT_TITLE
-+	"+title",
-+#else
-+	"-title",
-+#endif
-+#ifdef FEAT_TOOLBAR
-+	"+toolbar",
-+#else
-+	"-toolbar",
-+#endif
-+#ifdef FEAT_USR_CMDS
-+	"+user_commands",
-+#else
-+	"-user_commands",
-+#endif
-+#ifdef FEAT_VERTSPLIT
-+	"+vertsplit",
-+#else
-+	"-vertsplit",
-+#endif
-+#ifdef FEAT_VIRTUALEDIT
-+	"+virtualedit",
-+#else
-+	"-virtualedit",
-+#endif
-+#ifdef FEAT_VISUAL
-+	"+visual",
-+# ifdef FEAT_VISUALEXTRA
-+	"+visualextra",
-+# else
-+	"-visualextra",
-+# endif
-+#else
-+	"-visual",
-+#endif
-+#ifdef FEAT_VIMINFO
-+	"+viminfo",
-+#else
-+	"-viminfo",
-+#endif
-+#ifdef FEAT_VREPLACE
-+	"+vreplace",
-+#else
-+	"-vreplace",
-+#endif
-+#ifdef FEAT_WILDIGN
-+	"+wildignore",
-+#else
-+	"-wildignore",
-+#endif
-+#ifdef FEAT_WILDMENU
-+	"+wildmenu",
-+#else
-+	"-wildmenu",
-+#endif
-+#ifdef FEAT_WINDOWS
-+	"+windows",
-+#else
-+	"-windows",
-+#endif
-+#ifdef FEAT_WRITEBACKUP
-+	"+writebackup",
-+#else
-+	"-writebackup",
-+#endif
-+#if defined(UNIX) || defined(VMS)
-+# ifdef FEAT_X11
-+	"+X11",
-+# else
-+	"-X11",
-+# endif
-+#endif
-+#ifdef FEAT_XFONTSET
-+	"+xfontset",
-+#else
-+	"-xfontset",
-+#endif
-+#ifdef FEAT_XIM
-+	"+xim",
-+#else
-+	"-xim",
-+#endif
-+#if defined(UNIX) || defined(VMS)
-+# ifdef USE_XSMP_INTERACT
-+	"+xsmp_interact",
-+# else
-+#  ifdef USE_XSMP
-+	"+xsmp",
-+#  else
-+	"-xsmp",
-+#  endif
-+# endif
-+# ifdef FEAT_XCLIPBOARD
-+	"+xterm_clipboard",
-+# else
-+	"-xterm_clipboard",
-+# endif
-+#endif
-+#ifdef FEAT_XTERM_SAVE
-+	"+xterm_save",
-+#else
-+	"-xterm_save",
-+#endif
-+#ifdef WIN3264
-+# ifdef FEAT_XPM_W32
-+	"+xpm_w32",
-+# else
-+	"-xpm_w32",
-+# endif
-+#endif
-+	NULL
-+};
-+
-+static int included_patches[] =
-+{   /* Add new patch number below this line */
-+/**/
-+    704,
-+/**/
-+    703,
-+/**/
-+    702,
-+/**/
-+    701,
-+/**/
-+    700,
-+/**/
-+    699,
-+/**/
-+    698,
-+/**/
-+    697,
-+/**/
-+    696,
-+/**/
-+    695,
-+/**/
-+    694,
-+/**/
-+    693,
-+/**/
-+    692,
-+/**/
-+    691,
-+/**/
-+    690,
-+/**/
-+    689,
-+/**/
-+    688,
-+/**/
-+    687,
-+/**/
-+    686,
-+/**/
-+    685,
-+/**/
-+    684,
-+/**/
-+    683,
-+/**/
-+    682,
-+/**/
-+    681,
-+/**/
-+    680,
-+/**/
-+    679,
-+/**/
-+    678,
-+/**/
-+    677,
-+/**/
-+    676,
-+/**/
-+    675,
-+/**/
-+    674,
-+/**/
-+    673,
-+/**/
-+    672,
-+/**/
-+    671,
-+/**/
-+    670,
-+/**/
-+    669,
-+/**/
-+    668,
-+/**/
-+    667,
-+/**/
-+    666,
-+/**/
-+    665,
-+/**/
-+    664,
-+/**/
-+    663,
-+/**/
-+    662,
-+/**/
-+    661,
-+/**/
-+    660,
-+/**/
-+    659,
-+/**/
-+    658,
-+/**/
-+    657,
-+/**/
-+    656,
-+/**/
-+    655,
-+/**/
-+    654,
-+/**/
-+    653,
-+/**/
-+    652,
-+/**/
-+    651,
-+/**/
-+    650,
-+/**/
-+    649,
-+/**/
-+    648,
-+/**/
-+    647,
-+/**/
-+    646,
-+/**/
-+    645,
-+/**/
-+    644,
-+/**/
-+    643,
-+/**/
-+    642,
-+/**/
-+    641,
-+/**/
-+    640,
-+/**/
-+    639,
-+/**/
-+    638,
-+/**/
-+    637,
-+/**/
-+    636,
-+/**/
-+    635,
-+/**/
-+    634,
-+/**/
-+    633,
-+/**/
-+    632,
-+/**/
-+    631,
-+/**/
-+    630,
-+/**/
-+    629,
-+/**/
-+    628,
-+/**/
-+    627,
-+/**/
-+    626,
-+/**/
-+    625,
-+/**/
-+    624,
-+/**/
-+    623,
-+/**/
-+    622,
-+/**/
-+    621,
-+/**/
-+    620,
-+/**/
-+    619,
-+/**/
-+    618,
-+/**/
-+    617,
-+/**/
-+    616,
-+/**/
-+    615,
-+/**/
-+    614,
-+/**/
-+    613,
-+/**/
-+    612,
-+/**/
-+    611,
-+/**/
-+    610,
-+/**/
-+    609,
-+/**/
-+    608,
-+/**/
-+    607,
-+/**/
-+    606,
-+/**/
-+    605,
-+/**/
-+    604,
-+/**/
-+    603,
-+/**/
-+    602,
-+/**/
-+    601,
-+/**/
-+    600,
-+/**/
-+    599,
-+/**/
-+    598,
-+/**/
-+    597,
-+/**/
-+    596,
-+/**/
-+    595,
-+/**/
-+    594,
-+/**/
-+    593,
-+/**/
-+    592,
-+/**/
-+    591,
-+/**/
-+    590,
-+/**/
-+    589,
-+/**/
-+    588,
-+/**/
-+    587,
-+/**/
-+    586,
-+/**/
-+    585,
-+/**/
-+    584,
-+/**/
-+    583,
-+/**/
-+    582,
-+/**/
-+    581,
-+/**/
-+    580,
-+/**/
-+    579,
-+/**/
-+    578,
-+/**/
-+    577,
-+/**/
-+    576,
-+/**/
-+    575,
-+/**/
-+    574,
-+/**/
-+    573,
-+/**/
-+    572,
-+/**/
-+    571,
-+/**/
-+    570,
-+/**/
-+    569,
-+/**/
-+    568,
-+/**/
-+    567,
-+/**/
-+    566,
-+/**/
-+    565,
-+/**/
-+    564,
-+/**/
-+    563,
-+/**/
-+    562,
-+/**/
-+    561,
-+/**/
-+    560,
-+/**/
-+    559,
-+/**/
-+    558,
-+/**/
-+    557,
-+/**/
-+    556,
-+/**/
-+    555,
-+/**/
-+    554,
-+/**/
-+    553,
-+/**/
-+    552,
-+/**/
-+    551,
-+/**/
-+    550,
-+/**/
-+    549,
-+/**/
-+    548,
-+/**/
-+    547,
-+/**/
-+    546,
-+/**/
-+    545,
-+/**/
-+    544,
-+/**/
-+    543,
-+/**/
-+    542,
-+/**/
-+    541,
-+/**/
-+    540,
-+/**/
-+    539,
-+/**/
-+    538,
-+/**/
-+    537,
-+/**/
-+    536,
-+/**/
-+    535,
-+/**/
-+    534,
-+/**/
-+    533,
-+/**/
-+    532,
-+/**/
-+    531,
-+/**/
-+    530,
-+/**/
-+    529,
-+/**/
-+    528,
-+/**/
-+    527,
-+/**/
-+    526,
-+/**/
-+    525,
-+/**/
-+    524,
-+/**/
-+    523,
-+/**/
-+    522,
-+/**/
-+    521,
-+/**/
-+    520,
-+/**/
-+    519,
-+/**/
-+    518,
-+/**/
-+    517,
-+/**/
-+    516,
-+/**/
-+    515,
-+/**/
-+    514,
-+/**/
-+    513,
-+/**/
-+    512,
-+/**/
-+    511,
-+/**/
-+    510,
-+/**/
-+    509,
-+/**/
-+    508,
-+/**/
-+    507,
-+/**/
-+    506,
-+/**/
-+    505,
-+/**/
-+    504,
-+/**/
-+    503,
-+/**/
-+    502,
-+/**/
-+    501,
-+/**/
-+    500,
-+/**/
-+    499,
-+/**/
-+    498,
-+/**/
-+    497,
-+/**/
-+    496,
-+/**/
-+    495,
-+/**/
-+    494,
-+/**/
-+    493,
-+/**/
-+    492,
-+/**/
-+    491,
-+/**/
-+    490,
-+/**/
-+    489,
-+/**/
-+    488,
-+/**/
-+    487,
-+/**/
-+    486,
-+/**/
-+    485,
-+/**/
-+    484,
-+/**/
-+    483,
-+/**/
-+    482,
-+/**/
-+    481,
-+/**/
-+    480,
-+/**/
-+    479,
-+/**/
-+    478,
-+/**/
-+    477,
-+/**/
-+    476,
-+/**/
-+    475,
-+/**/
-+    474,
-+/**/
-+    473,
-+/**/
-+    472,
-+/**/
-+    471,
-+/**/
-+    470,
-+/**/
-+    469,
-+/**/
-+    468,
-+/**/
-+    467,
-+/**/
-+    466,
-+/**/
-+    465,
-+/**/
-+    464,
-+/**/
-+    463,
-+/**/
-+    462,
-+/**/
-+    461,
-+/**/
-+    460,
-+/**/
-+    459,
-+/**/
-+    458,
-+/**/
-+    457,
-+/**/
-+    456,
-+/**/
-+    455,
-+/**/
-+    454,
-+/**/
-+    453,
-+/**/
-+    452,
-+/**/
-+    451,
-+/**/
-+    450,
-+/**/
-+    449,
-+/**/
-+    448,
-+/**/
-+    447,
-+/**/
-+    446,
-+/**/
-+    445,
-+/**/
-+    444,
-+/**/
-+    443,
-+/**/
-+    442,
-+/**/
-+    441,
-+/**/
-+    440,
-+/**/
-+    439,
-+/**/
-+    438,
-+/**/
-+    437,
-+/**/
-+    436,
-+/**/
-+    435,
-+/**/
-+    434,
-+/**/
-+    433,
-+/**/
-+    432,
-+/**/
-+    431,
-+/**/
-+    430,
-+/**/
-+    429,
-+/**/
-+    428,
-+/**/
-+    427,
-+/**/
-+    426,
-+/**/
-+    425,
-+/**/
-+    424,
-+/**/
-+    423,
-+/**/
-+    422,
-+/**/
-+    421,
-+/**/
-+    420,
-+/**/
-+    419,
-+/**/
-+    418,
-+/**/
-+    417,
-+/**/
-+    416,
-+/**/
-+    415,
-+/**/
-+    414,
-+/**/
-+    413,
-+/**/
-+    412,
-+/**/
-+    411,
-+/**/
-+    410,
-+/**/
-+    409,
-+/**/
-+    408,
-+/**/
-+    407,
-+/**/
-+    406,
-+/**/
-+    405,
-+/**/
-+    404,
-+/**/
-+    403,
-+/**/
-+    402,
-+/**/
-+    401,
-+/**/
-+    400,
-+/**/
-+    399,
-+/**/
-+    398,
-+/**/
-+    397,
-+/**/
-+    396,
-+/**/
-+    395,
-+/**/
-+    394,
-+/**/
-+    393,
-+/**/
-+    392,
-+/**/
-+    391,
-+/**/
-+    390,
-+/**/
-+    389,
-+/**/
-+    388,
-+/**/
-+    387,
-+/**/
-+    386,
-+/**/
-+    385,
-+/**/
-+    384,
-+/**/
-+    383,
-+/**/
-+    382,
-+/**/
-+    381,
-+/**/
-+    380,
-+/**/
-+    379,
-+/**/
-+    378,
-+/**/
-+    377,
-+/**/
-+    376,
-+/**/
-+    375,
-+/**/
-+    374,
-+/**/
-+    373,
-+/**/
-+    372,
-+/**/
-+    371,
-+/**/
-+    370,
-+/**/
-+    369,
-+/**/
-+    368,
-+/**/
-+    367,
-+/**/
-+    366,
-+/**/
-+    365,
-+/**/
-+    364,
-+/**/
-+    363,
-+/**/
-+    362,
-+/**/
-+    361,
-+/**/
-+    360,
-+/**/
-+    359,
-+/**/
-+    358,
-+/**/
-+    357,
-+/**/
-+    356,
-+/**/
-+    355,
-+/**/
-+    354,
-+/**/
-+    353,
-+/**/
-+    352,
-+/**/
-+    351,
-+/**/
-+    350,
-+/**/
-+    349,
-+/**/
-+    348,
-+/**/
-+    347,
-+/**/
-+    346,
-+/**/
-+    345,
-+/**/
-+    344,
-+/**/
-+    343,
-+/**/
-+    342,
-+/**/
-+    341,
-+/**/
-+    340,
-+/**/
-+    339,
-+/**/
-+    338,
-+/**/
-+    337,
-+/**/
-+    336,
-+/**/
-+    335,
-+/**/
-+    334,
-+/**/
-+    333,
-+/**/
-+    332,
-+/**/
-+    331,
-+/**/
-+    330,
-+/**/
-+    329,
-+/**/
-+    328,
-+/**/
-+    327,
-+/**/
-+    326,
-+/**/
-+    325,
-+/**/
-+    324,
-+/**/
-+    323,
-+/**/
-+    322,
-+/**/
-+    321,
-+/**/
-+    320,
-+/**/
-+    319,
-+/**/
-+    318,
-+/**/
-+    317,
-+/**/
-+    316,
-+/**/
-+    315,
-+/**/
-+    314,
-+/**/
-+    313,
-+/**/
-+    312,
-+/**/
-+    311,
-+/**/
-+    310,
-+/**/
-+    309,
-+/**/
-+    308,
-+/**/
-+    307,
-+/**/
-+    306,
-+/**/
-+    305,
-+/**/
-+    304,
-+/**/
-+    303,
-+/**/
-+    302,
-+/**/
-+    301,
-+/**/
-+    300,
-+/**/
-+    299,
-+/**/
-+    298,
-+/**/
-+    297,
-+/**/
-+    296,
-+/**/
-+    295,
-+/**/
-+    294,
-+/**/
-+    293,
-+/**/
-+    292,
-+/**/
-+    291,
-+/**/
-+    290,
-+/**/
-+    289,
-+/**/
-+    288,
-+/**/
-+    287,
-+/**/
-+    286,
-+/**/
-+    285,
-+/**/
-+    284,
-+/**/
-+    283,
-+/**/
-+    282,
-+/**/
-+    281,
-+/**/
-+    280,
-+/**/
-+    279,
-+/**/
-+    278,
-+/**/
-+    277,
-+/**/
-+    276,
-+/**/
-+    275,
-+/**/
-+    274,
-+/**/
-+    273,
-+/**/
-+    272,
-+/**/
-+    271,
-+/**/
-+    270,
-+/**/
-+    269,
-+/**/
-+    268,
-+/**/
-+    267,
-+/**/
-+    266,
-+/**/
-+    265,
-+/**/
-+    264,
-+/**/
-+    263,
-+/**/
-+    262,
-+/**/
-+    261,
-+/**/
-+    260,
-+/**/
-+    259,
-+/**/
-+    258,
-+/**/
-+    257,
-+/**/
-+    256,
-+/**/
-+    255,
-+/**/
-+    254,
-+/**/
-+    253,
-+/**/
-+    252,
-+/**/
-+    251,
-+/**/
-+    250,
-+/**/
-+    249,
-+/**/
-+    248,
-+/**/
-+    247,
-+/**/
-+    246,
-+/**/
-+    245,
-+/**/
-+    244,
-+/**/
-+    243,
-+/**/
-+    242,
-+/**/
-+    241,
-+/**/
-+    240,
-+/**/
-+    239,
-+/**/
-+    238,
-+/**/
-+    237,
-+/**/
-+    236,
-+/**/
-+    235,
-+/**/
-+    234,
-+/**/
-+    233,
-+/**/
-+    232,
-+/**/
-+    231,
-+/**/
-+    230,
-+/**/
-+    229,
-+/**/
-+    228,
-+/**/
-+    227,
-+/**/
-+    226,
-+/**/
-+    225,
-+/**/
-+    224,
-+/**/
-+    223,
-+/**/
-+    222,
-+/**/
-+    221,
-+/**/
-+    220,
-+/**/
-+    219,
-+/**/
-+    218,
-+/**/
-+    217,
-+/**/
-+    216,
-+/**/
-+    215,
-+/**/
-+    214,
-+/**/
-+    213,
-+/**/
-+    212,
-+/**/
-+    211,
-+/**/
-+    210,
-+/**/
-+    209,
-+/**/
-+    208,
-+/**/
-+    207,
-+/**/
-+    206,
-+/**/
-+    205,
-+/**/
-+    204,
-+/**/
-+    203,
-+/**/
-+    202,
-+/**/
-+    201,
-+/**/
-+    200,
-+/**/
-+    199,
-+/**/
-+    198,
-+/**/
-+    197,
-+/**/
-+    196,
-+/**/
-+    195,
-+/**/
-+    194,
-+/**/
-+    193,
-+/**/
-+    192,
-+/**/
-+    191,
-+/**/
-+    190,
-+/**/
-+    189,
-+/**/
-+    188,
-+/**/
-+    187,
-+/**/
-+    186,
-+/**/
-+    185,
-+/**/
-+    184,
-+/**/
-+    183,
-+/**/
-+    182,
-+/**/
-+    181,
-+/**/
-+    180,
-+/**/
-+    179,
-+/**/
-+    178,
-+/**/
-+    177,
-+/**/
-+    176,
-+/**/
-+    175,
-+/**/
-+    174,
-+/**/
-+    173,
-+/**/
-+    172,
-+/**/
-+    171,
-+/**/
-+    170,
-+/**/
-+    169,
-+/**/
-+    168,
-+/**/
-+    167,
-+/**/
-+    166,
-+/**/
-+    165,
-+/**/
-+    164,
-+/**/
-+    163,
-+/**/
-+    162,
-+/**/
-+    161,
-+/**/
-+    160,
-+/**/
-+    159,
-+/**/
-+    158,
-+/**/
-+    157,
-+/**/
-+    156,
-+/**/
-+    155,
-+/**/
-+    154,
-+/**/
-+    153,
-+/**/
-+    152,
-+/**/
-+    151,
-+/**/
-+    150,
-+/**/
-+    149,
-+/**/
-+    148,
-+/**/
-+    147,
-+/**/
-+    146,
-+/**/
-+    145,
-+/**/
-+    144,
-+/**/
-+    143,
-+/**/
-+    142,
-+/**/
-+    141,
-+/**/
-+    140,
-+/**/
-+    139,
-+/**/
-+    138,
-+/**/
-+    137,
-+/**/
-+    136,
-+/**/
-+    135,
-+/**/
-+    134,
-+/**/
-+    133,
-+/**/
-+    132,
-+/**/
-+    131,
-+/**/
-+    130,
-+/**/
-+    129,
-+/**/
-+    128,
-+/**/
-+    127,
-+/**/
-+    126,
-+/**/
-+    125,
-+/**/
-+    124,
-+/**/
-+    123,
-+/**/
-+    122,
-+/**/
-+    121,
-+/**/
-+    120,
-+/**/
-+    119,
-+/**/
-+    118,
-+/**/
-+    117,
-+/**/
-+    116,
-+/**/
-+    115,
-+/**/
-+    114,
-+/**/
-+    113,
-+/**/
-+    112,
-+/**/
-+    111,
-+/**/
-+    110,
-+/**/
-+    109,
-+/**/
-+    108,
-+/**/
-+    107,
-+/**/
-+    106,
-+/**/
-+    105,
-+/**/
-+    104,
-+/**/
-+    103,
-+/**/
-+    102,
-+/**/
-+    101,
-+/**/
-+    100,
-+/**/
-+    99,
-+/**/
-+    98,
-+/**/
-+    97,
-+/**/
-+    96,
-+/**/
-+    95,
-+/**/
-+    94,
-+/**/
-+    93,
-+/**/
-+    92,
-+/**/
-+    91,
-+/**/
-+    90,
-+/**/
-+    89,
-+/**/
-+    88,
-+/**/
-+    87,
-+/**/
-+    86,
-+/**/
-+    85,
-+/**/
-+    84,
-+/**/
-+    83,
-+/**/
-+    82,
-+/**/
-+    81,
-+/**/
-+    80,
-+/**/
-+    79,
-+/**/
-+    78,
-+/**/
-+    77,
-+/**/
-+    76,
-+/**/
-+    75,
-+/**/
-+    74,
-+/**/
-+    73,
-+/**/
-+    72,
-+/**/
-+    71,
-+/**/
-+    70,
-+/**/
-+    69,
-+/**/
-+    68,
-+/**/
-+    67,
-+/**/
-+    66,
-+/**/
-+    65,
-+/**/
-+    64,
-+/**/
-+    63,
-+/**/
-+    62,
-+/**/
-+    61,
-+/**/
-+    60,
-+/**/
-+    59,
-+/**/
-+    58,
-+/**/
-+    57,
-+/**/
-+    56,
-+/**/
-+    55,
-+/**/
-+    54,
-+/**/
-+    53,
-+/**/
-+    52,
-+/**/
-+    51,
-+/**/
-+    50,
-+/**/
-+    49,
-+/**/
-+    48,
-+/**/
-+    47,
-+/**/
-+    46,
-+/**/
-+    45,
-+/**/
-+    44,
-+/**/
-+    43,
-+/**/
-+    42,
-+/**/
-+    41,
-+/**/
-+    40,
-+/**/
-+    39,
-+/**/
-+    38,
-+/**/
-+    37,
-+/**/
-+    36,
-+/**/
-+    35,
-+/**/
-+    34,
-+/**/
-+    33,
-+/**/
-+    32,
-+/**/
-+    31,
-+/**/
-+    30,
-+/**/
-+    29,
-+/**/
-+    28,
-+/**/
-+    27,
-+/**/
-+    26,
-+/**/
-+    25,
-+/**/
-+    24,
-+/**/
-+    23,
-+/**/
-+    22,
-+/**/
-+    21,
-+/**/
-+    20,
-+/**/
-+    19,
-+/**/
-+    18,
-+/**/
-+    17,
-+/**/
-+    16,
-+/**/
-+    15,
-+/**/
-+    14,
-+/**/
-+    13,
-+/**/
-+    12,
-+/**/
-+    11,
-+/**/
-+    10,
-+/**/
-+    9,
-+/**/
-+    8,
-+/**/
-+    7,
-+/**/
-+    6,
-+/**/
-+    5,
-+/**/
-+    4,
-+/**/
-+    3,
-+/**/
-+    2,
-+/**/
-+    1,
-+/**/
-+    0
-+};
-+
-+/*
-+ * Place to put a short description when adding a feature with a patch.
-+ * Keep it short, e.g.,: "relative numbers", "persistent undo".
-+ * Also add a comment marker to separate the lines.
-+ * See the official Vim patches for the diff format: It must use a context of
-+ * one line only.  Create it by hand or use "diff -C2" and edit the patch.
-+ */
-+static char *(extra_patches[]) =
-+{   /* Add your patch description below this line */
-+/**/
-+    NULL
-+};
-+
-+    int
-+highest_patch()
-+{
-+    int		i;
-+    int		h = 0;
-+
-+    for (i = 0; included_patches[i] != 0; ++i)
-+	if (included_patches[i] > h)
-+	    h = included_patches[i];
-+    return h;
-+}
-+
-+#if defined(FEAT_EVAL) || defined(PROTO)
-+/*
-+ * Return TRUE if patch "n" has been included.
-+ */
-+    int
-+has_patch(n)
-+    int		n;
-+{
-+    int		i;
-+
-+    for (i = 0; included_patches[i] != 0; ++i)
-+	if (included_patches[i] == n)
-+	    return TRUE;
-+    return FALSE;
-+}
-+#endif
-+
-+    void
-+ex_version(eap)
-+    exarg_T	*eap;
-+{
-+    /*
-+     * Ignore a ":version 9.99" command.
-+     */
-+    if (*eap->arg == NUL)
-+    {
-+	msg_putchar('\n');
-+	list_version();
-+    }
-+}
-+
-+    void
-+list_version()
-+{
-+    int		i;
-+    int		first;
-+    char	*s = "";
-+
-+    /*
-+     * When adding features here, don't forget to update the list of
-+     * internal variables in eval.c!
-+     */
-+    MSG(longVersion);
-+#ifdef WIN3264
-+# ifdef FEAT_GUI_W32
-+#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
-+    /* Only MS VC 4.1 and earlier can do Win32s */
-+    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
-+#  else
-+#   ifdef _WIN64
-+    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
-+#   else
-+    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
-+#   endif
-+#  endif
-+    if (gui_is_win32s())
-+	MSG_PUTS(_(" in Win32s mode"));
-+# ifdef FEAT_OLE
-+    MSG_PUTS(_(" with OLE support"));
-+# endif
-+# else
-+#  ifdef _WIN64
-+    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
-+#  else
-+    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
-+#  endif
-+# endif
-+#endif
-+#ifdef WIN16
-+    MSG_PUTS(_("\nMS-Windows 16-bit version"));
-+#endif
-+#ifdef MSDOS
-+# ifdef DJGPP
-+    MSG_PUTS(_("\n32-bit MS-DOS version"));
-+# else
-+    MSG_PUTS(_("\n16-bit MS-DOS version"));
-+# endif
-+#endif
-+#ifdef MACOS
-+# ifdef MACOS_X
-+#  ifdef MACOS_X_UNIX
-+    MSG_PUTS(_("\nMacOS X (unix) version"));
-+#  else
-+    MSG_PUTS(_("\nMacOS X version"));
-+#  endif
-+#else
-+    MSG_PUTS(_("\nMacOS version"));
-+# endif
-+#endif
-+
-+#ifdef VMS
-+    MSG_PUTS(_("\nOpenVMS version"));
-+# ifdef HAVE_PATHDEF
-+    if (*compiled_arch != NUL)
-+    {
-+	MSG_PUTS(" - ");
-+	MSG_PUTS(compiled_arch);
-+    }
-+# endif
-+
-+#endif
-+
-+    /* Print the list of patch numbers if there is at least one. */
-+    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
-+    if (included_patches[0] != 0)
-+    {
-+	MSG_PUTS(_("\nIncluded patches: "));
-+	first = -1;
-+	/* find last one */
-+	for (i = 0; included_patches[i] != 0; ++i)
-+	    ;
-+	while (--i >= 0)
-+	{
-+	    if (first < 0)
-+		first = included_patches[i];
-+	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
-+	    {
-+		MSG_PUTS(s);
-+		s = ", ";
-+		msg_outnum((long)first);
-+		if (first != included_patches[i])
-+		{
-+		    MSG_PUTS("-");
-+		    msg_outnum((long)included_patches[i]);
-+		}
-+		first = -1;
-+	    }
-+	}
-+    }
-+
-+    /* Print the list of extra patch descriptions if there is at least one. */
-+    if (extra_patches[0] != NULL)
-+    {
-+	MSG_PUTS(_("\nExtra patches: "));
-+	s = "";
-+	for (i = 0; extra_patches[i] != NULL; ++i)
-+	{
-+	    MSG_PUTS(s);
-+	    s = ", ";
-+	    MSG_PUTS(extra_patches[i]);
-+	}
-+    }
-+
-+#ifdef MODIFIED_BY
-+    MSG_PUTS("\n");
-+    MSG_PUTS(_("Modified by "));
-+    MSG_PUTS(MODIFIED_BY);
-+#endif
-+
-+#ifdef HAVE_PATHDEF
-+    if (*compiled_user != NUL || *compiled_sys != NUL)
-+    {
-+	MSG_PUTS(_("\nCompiled "));
-+	if (*compiled_user != NUL)
-+	{
-+	    MSG_PUTS(_("by "));
-+	    MSG_PUTS(compiled_user);
-+	}
-+	if (*compiled_sys != NUL)
-+	{
-+	    MSG_PUTS("@");
-+	    MSG_PUTS(compiled_sys);
-+	}
-+    }
-+#endif
-+
-+#ifdef FEAT_HUGE
-+    MSG_PUTS(_("\nHuge version "));
-+#else
-+# ifdef FEAT_BIG
-+    MSG_PUTS(_("\nBig version "));
-+# else
-+#  ifdef FEAT_NORMAL
-+    MSG_PUTS(_("\nNormal version "));
-+#  else
-+#   ifdef FEAT_SMALL
-+    MSG_PUTS(_("\nSmall version "));
-+#   else
-+    MSG_PUTS(_("\nTiny version "));
-+#   endif
-+#  endif
-+# endif
-+#endif
-+#ifndef FEAT_GUI
-+    MSG_PUTS(_("without GUI."));
-+#else
-+# ifdef FEAT_GUI_GTK
-+#  ifdef FEAT_GUI_GNOME
-+    MSG_PUTS(_("with GTK2-GNOME GUI."));
-+#  else
-+    MSG_PUTS(_("with GTK2 GUI."));
-+#  endif
-+# else
-+#  ifdef FEAT_GUI_MOTIF
-+    MSG_PUTS(_("with X11-Motif GUI."));
-+#  else
-+#   ifdef FEAT_GUI_ATHENA
-+#    ifdef FEAT_GUI_NEXTAW
-+    MSG_PUTS(_("with X11-neXtaw GUI."));
-+#    else
-+    MSG_PUTS(_("with X11-Athena GUI."));
-+#    endif
-+#   else
-+#     ifdef FEAT_GUI_PHOTON
-+    MSG_PUTS(_("with Photon GUI."));
-+#     else
-+#      if defined(MSWIN)
-+    MSG_PUTS(_("with GUI."));
-+#      else
-+#	if defined(TARGET_API_MAC_CARBON) && TARGET_API_MAC_CARBON
-+    MSG_PUTS(_("with Carbon GUI."));
-+#	else
-+#	 if defined(TARGET_API_MAC_OSX) && TARGET_API_MAC_OSX
-+    MSG_PUTS(_("with Cocoa GUI."));
-+#	 else
-+#	  if defined(MACOS)
-+    MSG_PUTS(_("with (classic) GUI."));
-+#	  endif
-+#	 endif
-+#	endif
-+#      endif
-+#    endif
-+#   endif
-+#  endif
-+# endif
-+#endif
-+    version_msg(_("  Features included (+) or not (-):\n"));
-+
-+    /* print all the features */
-+    for (i = 0; features[i] != NULL; ++i)
-+    {
-+	version_msg(features[i]);
-+	if (msg_col > 0)
-+	    version_msg(" ");
-+    }
-+
-+    version_msg("\n");
-+#ifdef SYS_VIMRC_FILE
-+    version_msg(_("   system vimrc file: \""));
-+    version_msg(SYS_VIMRC_FILE);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_VIMRC_FILE
-+    version_msg(_("     user vimrc file: \""));
-+    version_msg(USR_VIMRC_FILE);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_VIMRC_FILE2
-+    version_msg(_(" 2nd user vimrc file: \""));
-+    version_msg(USR_VIMRC_FILE2);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_VIMRC_FILE3
-+    version_msg(_(" 3rd user vimrc file: \""));
-+    version_msg(USR_VIMRC_FILE3);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_EXRC_FILE
-+    version_msg(_("      user exrc file: \""));
-+    version_msg(USR_EXRC_FILE);
-+    version_msg("\"\n");
-+#endif
-+#ifdef USR_EXRC_FILE2
-+    version_msg(_("  2nd user exrc file: \""));
-+    version_msg(USR_EXRC_FILE2);
-+    version_msg("\"\n");
-+#endif
-+#ifdef FEAT_GUI
-+# ifdef SYS_GVIMRC_FILE
-+    version_msg(_("  system gvimrc file: \""));
-+    version_msg(SYS_GVIMRC_FILE);
-+    version_msg("\"\n");
-+# endif
-+    version_msg(_("    user gvimrc file: \""));
-+    version_msg(USR_GVIMRC_FILE);
-+    version_msg("\"\n");
-+# ifdef USR_GVIMRC_FILE2
-+    version_msg(_("2nd user gvimrc file: \""));
-+    version_msg(USR_GVIMRC_FILE2);
-+    version_msg("\"\n");
-+# endif
-+# ifdef USR_GVIMRC_FILE3
-+    version_msg(_("3rd user gvimrc file: \""));
-+    version_msg(USR_GVIMRC_FILE3);
-+    version_msg("\"\n");
-+# endif
-+#endif
-+#ifdef FEAT_GUI
-+# ifdef SYS_MENU_FILE
-+    version_msg(_("    system menu file: \""));
-+    version_msg(SYS_MENU_FILE);
-+    version_msg("\"\n");
-+# endif
-+#endif
-+#ifdef HAVE_PATHDEF
-+    if (*default_vim_dir != NUL)
-+    {
-+	version_msg(_("  fall-back for $VIM: \""));
-+	version_msg((char *)default_vim_dir);
-+	version_msg("\"\n");
-+    }
-+    if (*default_vimruntime_dir != NUL)
-+    {
-+	version_msg(_(" f-b for $VIMRUNTIME: \""));
-+	version_msg((char *)default_vimruntime_dir);
-+	version_msg("\"\n");
-+    }
-+    version_msg(_("Compilation: "));
-+    version_msg((char *)all_cflags);
-+    version_msg("\n");
-+#ifdef VMS
-+    if (*compiler_version != NUL)
-+    {
-+	version_msg(_("Compiler: "));
-+	version_msg((char *)compiler_version);
-+	version_msg("\n");
-+    }
-+#endif
-+    version_msg(_("Linking: "));
-+    version_msg((char *)all_lflags);
-+#endif
-+#ifdef DEBUG
-+    version_msg("\n");
-+    version_msg(_("  DEBUG BUILD"));
-+#endif
-+}
-+
-+/*
-+ * Output a string for the version message.  If it's going to wrap, output a
-+ * newline, unless the message is too long to fit on the screen anyway.
-+ */
-+    static void
-+version_msg(s)
-+    char	*s;
-+{
-+    int		len = (int)STRLEN(s);
-+
-+    if (!got_int && len < (int)Columns && msg_col + len >= (int)Columns
-+								&& *s != '\n')
-+	msg_putchar('\n');
-+    if (!got_int)
-+	MSG_PUTS(s);
-+}
-+
-+static void do_intro_line __ARGS((int row, char_u *mesg, int add_version, int attr));
-+
-+/*
-+ * Give an introductory message about Vim.
-+ * Only used when starting Vim on an empty file, without a file name.
-+ * Or with the ":intro" command (for Sven :-).
-+ */
-+    void
-+intro_message(colon)
-+    int		colon;		/* TRUE for ":intro" */
-+{
-+    int		i;
-+    int		row;
-+    int		blanklines;
-+    int		sponsor;
-+    char	*p;
-+    static char	*(lines[]) =
-+    {
-+	N_("VIM - Vi IMproved"),
-+	"",
-+	N_("version "),
-+	N_("by Bram Moolenaar et al."),
-+#ifdef MODIFIED_BY
-+	" ",
-+#endif
-+	N_("Vim is open source and freely distributable"),
-+	"",
-+	N_("Help poor children in Uganda!"),
-+	N_("type  :help iccf<Enter>       for information "),
-+	"",
-+	N_("type  :q<Enter>               to exit         "),
-+	N_("type  :help<Enter>  or  <F1>  for on-line help"),
-+	N_("type  :help version7<Enter>   for version info"),
-+	NULL,
-+	"",
-+	N_("Running in Vi compatible mode"),
-+	N_("type  :set nocp<Enter>        for Vim defaults"),
-+	N_("type  :help cp-default<Enter> for info on this"),
-+    };
-+#ifdef FEAT_GUI
-+    static char	*(gui_lines[]) =
-+    {
-+	NULL,
-+	NULL,
-+	NULL,
-+	NULL,
-+#ifdef MODIFIED_BY
-+	NULL,
-+#endif
-+	NULL,
-+	NULL,
-+	NULL,
-+	N_("menu  Help->Orphans           for information    "),
-+	NULL,
-+	N_("Running modeless, typed text is inserted"),
-+	N_("menu  Edit->Global Settings->Toggle Insert Mode  "),
-+	N_("                              for two modes      "),
-+	NULL,
-+	NULL,
-+	NULL,
-+	N_("menu  Edit->Global Settings->Toggle Vi Compatible"),
-+	N_("                              for Vim defaults   "),
-+    };
-+#endif
-+
-+    /* blanklines = screen height - # message lines */
-+    blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
-+    if (!p_cp)
-+	blanklines += 4;  /* add 4 for not showing "Vi compatible" message */
-+#if defined(WIN3264) && !defined(FEAT_GUI_W32)
-+    if (mch_windows95())
-+	blanklines -= 3;  /* subtract 3 for showing "Windows 95" message */
-+#endif
-+
-+#ifdef FEAT_WINDOWS
-+    /* Don't overwrite a statusline.  Depends on 'cmdheight'. */
-+    if (p_ls > 1)
-+	blanklines -= Rows - topframe->fr_height;
-+#endif
-+    if (blanklines < 0)
-+	blanklines = 0;
-+
-+    /* Show the sponsor and register message one out of four times, the Uganda
-+     * message two out of four times. */
-+    sponsor = (int)time(NULL);
-+    sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
-+
-+    /* start displaying the message lines after half of the blank lines */
-+    row = blanklines / 2;
-+    if ((row >= 2 && Columns >= 50) || colon)
-+    {
-+	for (i = 0; i < (int)(sizeof(lines) / sizeof(char *)); ++i)
-+	{
-+	    p = lines[i];
-+#ifdef FEAT_GUI
-+	    if (p_im && gui.in_use && gui_lines[i] != NULL)
-+		p = gui_lines[i];
-+#endif
-+	    if (p == NULL)
-+	    {
-+		if (!p_cp)
-+		    break;
-+		continue;
-+	    }
-+	    if (sponsor != 0)
-+	    {
-+		if (strstr(p, "children") != NULL)
-+		    p = sponsor < 0
-+			? N_("Sponsor Vim development!")
-+			: N_("Become a registered Vim user!");
-+		else if (strstr(p, "iccf") != NULL)
-+		    p = sponsor < 0
-+			? N_("type  :help sponsor<Enter>    for information ")
-+			: N_("type  :help register<Enter>   for information ");
-+		else if (strstr(p, "Orphans") != NULL)
-+		    p = N_("menu  Help->Sponsor/Register  for information    ");
-+	    }
-+	    if (*p != NUL)
-+		do_intro_line(row, (char_u *)_(p), i == 2, 0);
-+	    ++row;
-+	}
-+#if defined(WIN3264) && !defined(FEAT_GUI_W32)
-+	if (mch_windows95())
-+	{
-+	    do_intro_line(++row,
-+		    (char_u *)_("WARNING: Windows 95/98/ME detected"),
-+							FALSE, hl_attr(HLF_E));
-+	    do_intro_line(++row,
-+		(char_u *)_("type  :help windows95<Enter>  for info on this"),
-+								    FALSE, 0);
-+	}
-+#endif
-+    }
-+
-+    /* Make the wait-return message appear just below the text. */
-+    if (colon)
-+	msg_row = row;
-+}
-+
-+    static void
-+do_intro_line(row, mesg, add_version, attr)
-+    int		row;
-+    char_u	*mesg;
-+    int		add_version;
-+    int		attr;
-+{
-+    char_u	vers[20];
-+    int		col;
-+    char_u	*p;
-+    int		l;
-+    int		clen;
-+#ifdef MODIFIED_BY
-+# define MODBY_LEN 150
-+    char_u	modby[MODBY_LEN];
-+
-+    if (*mesg == ' ')
-+    {
-+	vim_strncpy(modby, (char_u *)_("Modified by "), MODBY_LEN - 1);
-+	l = STRLEN(modby);
-+	vim_strncpy(modby + l, (char_u *)MODIFIED_BY, MODBY_LEN - l - 1);
-+	mesg = modby;
-+    }
-+#endif
-+
-+    /* Center the message horizontally. */
-+    col = vim_strsize(mesg);
-+    if (add_version)
-+    {
-+	STRCPY(vers, mediumVersion);
-+	if (highest_patch())
-+	{
-+	    /* Check for 9.9x or 9.9xx, alpha/beta version */
-+	    if (isalpha((int)vers[3]))
-+	    {
-+		int len = (isalpha((int)vers[4])) ? 5 : 4;
-+		sprintf((char *)vers + len, ".%d%s", highest_patch(),
-+							 mediumVersion + len);
-+	    }
-+	    else
-+		sprintf((char *)vers + 3, ".%d", highest_patch());
-+	}
-+	col += (int)STRLEN(vers);
-+    }
-+    col = (Columns - col) / 2;
-+    if (col < 0)
-+	col = 0;
-+
-+    /* Split up in parts to highlight <> items differently. */
-+    for (p = mesg; *p != NUL; p += l)
-+    {
-+	clen = 0;
-+	for (l = 0; p[l] != NUL
-+			 && (l == 0 || (p[l] != '<' && p[l - 1] != '>')); ++l)
-+	{
-+#ifdef FEAT_MBYTE
-+	    if (has_mbyte)
-+	    {
-+		clen += ptr2cells(p + l);
-+		l += (*mb_ptr2len)(p + l) - 1;
-+	    }
-+	    else
-+#endif
-+		clen += byte2cells(p[l]);
-+	}
-+	screen_puts_len(p, l, row, col, *p == '<' ? hl_attr(HLF_8) : attr);
-+	col += clen;
-+    }
-+
-+    /* Add the version number to the version line. */
-+    if (add_version)
-+	screen_puts(vers, row, col, 0);
-+}
-+
-+/*
-+ * ":intro": clear screen, display intro screen and wait for return.
-+ */
-+    void
-+ex_intro(eap)
-+    exarg_T	*eap UNUSED;
-+{
-+    screenclear();
-+    intro_message(TRUE);
-+    wait_return(TRUE);
-+}
-diff -Naur vim73.orig/src/vim.h vim73/src/vim.h
---- vim73.orig/src/vim.h	2010-07-29 18:46:39.000000000 +0000
-+++ vim73/src/vim.h	2012-11-01 20:35:48.000000000 +0000
-@@ -27,6 +27,11 @@
- # endif
- #endif
- 
-+#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64) \
-+	|| defined(__EMX__)
-+# include "vimio.h"
-+#endif
-+
- /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
- 
- #ifdef HAVE_CONFIG_H	/* GNU autoconf (or something else) was here */
-@@ -116,6 +121,7 @@
-     || defined(FEAT_GUI_W32) \
-     || defined(FEAT_GUI_W16) \
-     || defined(FEAT_GUI_PHOTON)
-+# define FEAT_GUI_ENABLED  /* also defined with NO_X11_INCLUDES */
- # if !defined(FEAT_GUI) && !defined(NO_X11_INCLUDES)
- #  define FEAT_GUI
- # endif
-@@ -179,9 +185,6 @@
- #  define SIZEOF_INT 2
- # endif
- #endif
--#ifdef RISCOS
--# define SIZEOF_INT 4
--#endif
- 
- 
- #include "feature.h"	/* #defines for optionals and features */
-@@ -192,8 +195,8 @@
- #endif
- 
- #ifdef NO_X11_INCLUDES
--    /* In os_mac_conv.c NO_X11_INCLUDES is defined to avoid X11 headers.
--     * Disable all X11 related things to avoid conflicts. */
-+    /* In os_mac_conv.c and os_macosx.m NO_X11_INCLUDES is defined to avoid
-+     * X11 headers.  Disable all X11 related things to avoid conflicts. */
- # ifdef FEAT_X11
- #  undef FEAT_X11
- # endif
-@@ -335,10 +338,6 @@
- # include "os_mac.h"
- #endif
- 
--#ifdef RISCOS
--# include "os_riscos.h"
--#endif
--
- #ifdef __QNX__
- # include "os_qnx.h"
- #endif
-@@ -475,6 +474,11 @@
- # include <sys/stat.h>
- #endif
- 
-+#if defined(HAVE_ERRNO_H) || defined(DJGPP) || defined(WIN16) \
-+	|| defined(WIN32) || defined(_WIN64) || defined(__EMX__)
-+# include <errno.h>
-+#endif
-+
- /*
-  * Allow other (non-unix) systems to configure themselves now
-  * These are also in os_unix.h, because osdef.sh needs them there.
-@@ -776,6 +780,9 @@
- #define EXPAND_FILETYPE		37
- #define EXPAND_FILES_IN_PATH	38
- #define EXPAND_OWNSYNTAX	39
-+#define EXPAND_LOCALES		40
-+#define EXPAND_HISTORY		41
-+#define EXPAND_USER		42
- 
- /* Values for exmode_active (0 is no exmode) */
- #define EXMODE_NORMAL		1
-@@ -789,6 +796,7 @@
- #define WILD_PREV		5
- #define WILD_ALL		6
- #define WILD_LONGEST		7
-+#define WILD_ALL_KEEP		8
- 
- #define WILD_LIST_NOTFOUND	1
- #define WILD_HOME_REPLACE	2
-@@ -798,6 +806,7 @@
- #define WILD_KEEP_ALL		32
- #define WILD_SILENT		64
- #define WILD_ESCAPE		128
-+#define WILD_ICASE		256
- 
- /* Flags for expand_wildcards() */
- #define EW_DIR		0x01	/* include directory names */
-@@ -808,6 +817,9 @@
- #define EW_SILENT	0x20	/* don't print "1 returned" from shell */
- #define EW_EXEC		0x40	/* executable files */
- #define EW_PATH		0x80	/* search in 'path' too */
-+#define EW_ICASE	0x100	/* ignore case */
-+#define EW_NOERROR	0x200	/* no error for bad regexp */
-+#define EW_NOTWILD	0x400	/* add match with literal name if exists */
- /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
-  * is used when executing commands and EW_SILENT for interactive expanding. */
- 
-@@ -1061,12 +1073,14 @@
- #define INSCHAR_DO_COM	2	/* format comments */
- #define INSCHAR_CTRLV	4	/* char typed just after CTRL-V */
- #define INSCHAR_NO_FEX	8	/* don't use 'formatexpr' */
-+#define INSCHAR_COM_LIST 16	/* format comments with list/2nd line indent */
- 
- /* flags for open_line() */
- #define OPENLINE_DELSPACES  1	/* delete spaces after cursor */
- #define OPENLINE_DO_COM	    2	/* format comments */
- #define OPENLINE_KEEPTRAIL  4	/* keep trailing spaces */
- #define OPENLINE_MARKFIX    8	/* fix mark positions */
-+#define OPENLINE_COM_LIST  16	/* format comments with list/2nd line indent */
- 
- /*
-  * There are four history tables:
-@@ -1228,6 +1242,7 @@
-     EVENT_CMDWINENTER,		/* after entering the cmdline window */
-     EVENT_CMDWINLEAVE,		/* before leaving the cmdline window */
-     EVENT_COLORSCHEME,		/* after loading a colorscheme */
-+    EVENT_COMPLETEDONE,		/* after finishing insert complete */
-     EVENT_FILEAPPENDPOST,	/* after appending to a file */
-     EVENT_FILEAPPENDPRE,	/* before appending to a file */
-     EVENT_FILEAPPENDCMD,	/* append to a file using command */
-@@ -1253,8 +1268,9 @@
-     EVENT_INSERTENTER,		/* when entering Insert mode */
-     EVENT_INSERTLEAVE,		/* when leaving Insert mode */
-     EVENT_MENUPOPUP,		/* just before popup menu is displayed */
--    EVENT_QUICKFIXCMDPOST,	/* after :make, :grep etc */
--    EVENT_QUICKFIXCMDPRE,	/* before :make, :grep etc */
-+    EVENT_QUICKFIXCMDPOST,	/* after :make, :grep etc. */
-+    EVENT_QUICKFIXCMDPRE,	/* before :make, :grep etc. */
-+    EVENT_QUITPRE,		/* before :quit */
-     EVENT_SESSIONLOADPOST,	/* after loading a session file */
-     EVENT_STDINREADPOST,	/* after reading from stdin */
-     EVENT_STDINREADPRE,		/* before reading from stdin */
-@@ -1269,6 +1285,7 @@
-     EVENT_WINENTER,		/* after entering a window */
-     EVENT_WINLEAVE,		/* before leaving a window */
-     EVENT_ENCODINGCHANGED,	/* after changing the 'encoding' option */
-+    EVENT_INSERTCHARPRE,	/* before inserting a char */
-     EVENT_CURSORHOLD,		/* cursor in same position for a while */
-     EVENT_CURSORHOLDI,		/* idem, in Insert mode */
-     EVENT_FUNCUNDEFINED,	/* if calling a function which doesn't exist */
-@@ -1307,6 +1324,7 @@
-     , HLF_M	    /* "--More--" message */
-     , HLF_CM	    /* Mode (e.g., "-- INSERT --") */
-     , HLF_N	    /* line number for ":number" and ":#" commands */
-+    , HLF_CLN	    /* current line number */
-     , HLF_R	    /* return to continue message and yes/no questions */
-     , HLF_S	    /* status lines */
-     , HLF_SNC	    /* status lines of not-current windows */
-@@ -1344,7 +1362,7 @@
- /* The HL_FLAGS must be in the same order as the HLF_ enums!
-  * When changing this also adjust the default for 'highlight'. */
- #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
--		  'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
-+		  'n', 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
- 		  'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
- 		  'B', 'P', 'R', 'L', \
- 		  '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
-@@ -1423,6 +1441,8 @@
- 
- #define IOSIZE	   (1024+1)	/* file i/o and sprintf buffer size */
- 
-+#define DIALOG_MSG_SIZE 1000	/* buffer size for dialog_msg() */
-+
- #ifdef FEAT_MBYTE
- # define MSG_BUF_LEN 480	/* length of buffer for small messages */
- # define MSG_BUF_CLEN  (MSG_BUF_LEN / 6)    /* cell length (worst case: utf-8
-@@ -1640,6 +1660,11 @@
- # define USE_INPUT_BUF
- #endif
- 
-+#ifndef EINTR
-+# define read_eintr(fd, buf, count) vim_read((fd), (buf), (count))
-+# define write_eintr(fd, buf, count) vim_write((fd), (buf), (count))
-+#endif
-+
- #ifdef MSWIN
- /* On MS-Windows the third argument isn't size_t.  This matters for Win64,
-  * where sizeof(size_t)==8, not 4 */
-@@ -1683,6 +1708,8 @@
-  * character of up to 6 bytes, or one 16-bit character of up to three bytes
-  * plus six following composing characters of three bytes each. */
- # define MB_MAXBYTES	21
-+#else
-+# define MB_MAXBYTES	1
- #endif
- 
- #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
-@@ -1842,7 +1869,8 @@
- #define VV_OP		52
- #define VV_SEARCHFORWARD 53
- #define VV_OLDFILES	54
--#define VV_LEN		55	/* number of v: vars */
-+#define VV_WINDOWID	55
-+#define VV_LEN		56	/* number of v: vars */
- 
- #ifdef FEAT_CLIPBOARD
- 
-@@ -1996,6 +2024,7 @@
-  #pragma warning(disable : 4312)
- #endif
- 
-+/* Note: a NULL argument for vim_realloc() is not portable, don't use it. */
- #if defined(MEM_PROFILE)
- # define vim_realloc(ptr, size)  mem_realloc((ptr), (size))
- #else
-@@ -2098,6 +2127,12 @@
- # endif
- #endif
- 
-+#if defined(FEAT_BROWSE) && defined(GTK_CHECK_VERSION)
-+# if GTK_CHECK_VERSION(2,4,0)
-+#  define USE_FILE_CHOOSER
-+# endif
-+#endif
-+
- #ifndef FEAT_NETBEANS_INTG
- # undef NBDEBUG
- #endif
-@@ -2193,4 +2228,14 @@
- #define MSCR_LEFT	-1
- #define MSCR_RIGHT	-2
- 
-+#define KEYLEN_PART_KEY -1	/* keylen value for incomplete key-code */
-+#define KEYLEN_PART_MAP -2	/* keylen value for incomplete mapping */
-+#define KEYLEN_REMOVED  9999	/* keylen value for removed sequence */
-+
-+/* Return values from win32_fileinfo(). */
-+#define FILEINFO_OK	     0
-+#define FILEINFO_ENC_FAIL    1	/* enc_to_utf16() failed */
-+#define FILEINFO_READ_FAIL   2	/* CreateFile() failed */
-+#define FILEINFO_INFO_FAIL   3	/* GetFileInformationByHandle() failed */
-+
- #endif /* VIM__H */
-diff -Naur vim73.orig/src/window.c vim73/src/window.c
---- vim73.orig/src/window.c	2010-07-20 20:23:49.000000000 +0000
-+++ vim73/src/window.c	2012-11-01 20:35:48.000000000 +0000
-@@ -23,7 +23,7 @@
- static void win_totop __ARGS((int size, int flags));
- static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
- static int last_window __ARGS((void));
--static int one_window __ARGS((void));
-+static int close_last_window_tabpage __ARGS((win_T *win, int free_buf, tabpage_T *prev_curtab));
- static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
- static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
- static tabpage_T *alt_tabpage __ARGS((void));
-@@ -45,7 +45,7 @@
- #if defined(FEAT_WINDOWS) || defined(PROTO)
- static tabpage_T *alloc_tabpage __ARGS((void));
- static int leave_tabpage __ARGS((buf_T *new_curbuf));
--static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf));
-+static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_autocmds));
- static void frame_fix_height __ARGS((win_T *wp));
- static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
- static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
-@@ -54,7 +54,6 @@
- static void frame_insert __ARGS((frame_T *before, frame_T *frp));
- static void frame_remove __ARGS((frame_T *frp));
- #ifdef FEAT_VERTSPLIT
--static void win_new_width __ARGS((win_T *wp, int width));
- static void win_goto_ver __ARGS((int up, long count));
- static void win_goto_hor __ARGS((int left, long count));
- #endif
-@@ -70,7 +69,7 @@
- #endif /* FEAT_WINDOWS */
- 
- static win_T *win_alloc __ARGS((win_T *after, int hidden));
--static void win_new_height __ARGS((win_T *, int));
-+static void set_fraction __ARGS((win_T *wp));
- 
- #define URL_SLASH	1		/* path_is_url() has found "://" */
- #define URL_BACKSLASH	2		/* path_is_url() has found ":\\" */
-@@ -354,11 +353,11 @@
- 						     && valid_tabpage(oldtab))
- 		    {
- 			newtab = curtab;
--			goto_tabpage_tp(oldtab);
-+			goto_tabpage_tp(oldtab, TRUE);
- 			if (curwin == wp)
- 			    win_close(curwin, FALSE);
- 			if (valid_tabpage(newtab))
--			    goto_tabpage_tp(newtab);
-+			    goto_tabpage_tp(newtab, TRUE);
- 		    }
- 		}
- 		break;
-@@ -525,9 +524,7 @@
- 		    setpcmark();
- 		    if (win_split(0, 0) == OK)
- 		    {
--# ifdef FEAT_SCROLLBIND
--			curwin->w_p_scb = FALSE;
--# endif
-+			RESET_BINDING(curwin);
- 			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
- 							   ECMD_HIDE, NULL);
- 			if (nchar == 'F' && lnum >= 0)
-@@ -684,19 +681,19 @@
- }
- 
- /*
-- * When "newwin" is NULL: split the current window in two.
-- * When "newwin" is not NULL: insert this window at the far
-+ * When "new_wp" is NULL: split the current window in two.
-+ * When "new_wp" is not NULL: insert this window at the far
-  * top/left/right/bottom.
-  * return FAIL for failure, OK otherwise
-  */
-     int
--win_split_ins(size, flags, newwin, dir)
-+win_split_ins(size, flags, new_wp, dir)
-     int		size;
-     int		flags;
--    win_T	*newwin;
-+    win_T	*new_wp;
-     int		dir;
- {
--    win_T	*wp = newwin;
-+    win_T	*wp = new_wp;
-     win_T	*oldwin;
-     int		new_size = size;
-     int		i;
-@@ -719,7 +716,7 @@
-     /* add a status line when p_ls == 1 and splitting the first window */
-     if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
-     {
--	if (oldwin->w_height <= p_wmh && newwin == NULL)
-+	if (oldwin->w_height <= p_wmh && new_wp == NULL)
- 	{
- 	    EMSG(_(e_noroom));
- 	    return FAIL;
-@@ -752,7 +749,7 @@
- 	}
- 	else
- 	    available = oldwin->w_width;
--	if (available < needed && newwin == NULL)
-+	if (available < needed && new_wp == NULL)
- 	{
- 	    EMSG(_(e_noroom));
- 	    return FAIL;
-@@ -816,7 +813,7 @@
- 	    available = oldwin->w_height;
- 	    needed += p_wmh;
- 	}
--	if (available < needed && newwin == NULL)
-+	if (available < needed && new_wp == NULL)
- 	{
- 	    EMSG(_(e_noroom));
- 	    return FAIL;
-@@ -889,20 +886,20 @@
- 			p_sb))))
-     {
- 	/* new window below/right of current one */
--	if (newwin == NULL)
-+	if (new_wp == NULL)
- 	    wp = win_alloc(oldwin, FALSE);
- 	else
- 	    win_append(oldwin, wp);
-     }
-     else
-     {
--	if (newwin == NULL)
-+	if (new_wp == NULL)
- 	    wp = win_alloc(oldwin->w_prev, FALSE);
- 	else
- 	    win_append(oldwin->w_prev, wp);
-     }
- 
--    if (newwin == NULL)
-+    if (new_wp == NULL)
-     {
- 	if (wp == NULL)
- 	    return FAIL;
-@@ -973,10 +970,10 @@
- 		frp->fr_parent = curfrp;
-     }
- 
--    if (newwin == NULL)
-+    if (new_wp == NULL)
- 	frp = wp->w_frame;
-     else
--	frp = newwin->w_frame;
-+	frp = new_wp->w_frame;
-     frp->fr_parent = curfrp->fr_parent;
- 
-     /* Insert the new frame at the right place in the frame list. */
-@@ -985,10 +982,17 @@
-     else
- 	frame_append(curfrp, frp);
- 
-+    /* Set w_fraction now so that the cursor keeps the same relative
-+     * vertical position. */
-+    if (oldwin->w_height > 0)
-+	set_fraction(oldwin);
-+    wp->w_fraction = oldwin->w_fraction;
-+
- #ifdef FEAT_VERTSPLIT
-     if (flags & WSP_VERT)
-     {
- 	wp->w_p_scr = curwin->w_p_scr;
-+
- 	if (need_status)
- 	{
- 	    win_new_height(oldwin, oldwin->w_height - 1);
-@@ -1220,15 +1224,15 @@
-     }
-     newp->w_tagstackidx = oldp->w_tagstackidx;
-     newp->w_tagstacklen = oldp->w_tagstacklen;
--# ifdef FEAT_FOLDING
-+#ifdef FEAT_FOLDING
-     copyFoldingState(oldp, newp);
--# endif
-+#endif
- 
-     win_init_some(newp, oldp);
- 
--# ifdef FEAT_SYN_HL
-+#ifdef FEAT_SYN_HL
-     check_colorcolumn(newp);
--# endif
-+#endif
- }
- 
- /*
-@@ -2028,7 +2032,11 @@
- 
-     for (wp = firstwin; wp != NULL && lastwin != firstwin; )
-     {
--	if (wp->w_buffer == buf && (!keep_curwin || wp != curwin))
-+	if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
-+#ifdef FEAT_AUTOCMD
-+		&& !(wp->w_closing || wp->w_buffer->b_closing)
-+#endif
-+		)
- 	{
- 	    win_close(wp, FALSE);
- 
-@@ -2045,7 +2053,11 @@
- 	nexttp = tp->tp_next;
- 	if (tp != curtab)
- 	    for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
--		if (wp->w_buffer == buf)
-+		if (wp->w_buffer == buf
-+#ifdef FEAT_AUTOCMD
-+		    && !(wp->w_closing || wp->w_buffer->b_closing)
-+#endif
-+		    )
- 		{
- 		    win_close_othertab(wp, FALSE, tp);
- 
-@@ -2077,7 +2089,7 @@
-  * Return TRUE if there is only one window other than "aucmd_win" in the
-  * current tab page.
-  */
--    static int
-+    int
- one_window()
- {
- #ifdef FEAT_AUTOCMD
-@@ -2100,10 +2112,54 @@
- }
- 
- /*
-+ * Close the possibly last window in a tab page.
-+ * Returns TRUE when the window was closed already.
-+ */
-+    static int
-+close_last_window_tabpage(win, free_buf, prev_curtab)
-+    win_T	*win;
-+    int		free_buf;
-+    tabpage_T   *prev_curtab;
-+{
-+    if (firstwin == lastwin)
-+    {
-+	/*
-+	 * Closing the last window in a tab page.  First go to another tab
-+	 * page and then close the window and the tab page.  This avoids that
-+	 * curwin and curtab are invalid while we are freeing memory, they may
-+	 * be used in GUI events.
-+	 * Don't trigger autocommands yet, they may use wrong values, so do
-+	 * that below.
-+	 */
-+	goto_tabpage_tp(alt_tabpage(), FALSE);
-+	redraw_tabline = TRUE;
-+
-+	/* Safety check: Autocommands may have closed the window when jumping
-+	 * to the other tab page. */
-+	if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
-+	{
-+	    int	    h = tabline_height();
-+
-+	    win_close_othertab(win, free_buf, prev_curtab);
-+	    if (h != tabline_height())
-+		shell_new_rows();
-+	}
-+	/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
-+	 * that now. */
-+#ifdef FEAT_AUTOCMD
-+	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
-+	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
-+#endif
-+	return TRUE;
-+    }
-+    return FALSE;
-+}
-+
-+/*
-  * Close window "win".  Only works for the current tab page.
-  * If "free_buf" is TRUE related buffer may be unloaded.
-  *
-- * called by :quit, :close, :xit, :wq and findtag()
-+ * Called by :quit, :close, :xit, :wq and findtag().
-  */
-     void
- win_close(win, free_buf)
-@@ -2126,6 +2182,8 @@
-     }
- 
- #ifdef FEAT_AUTOCMD
-+    if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing))
-+	return; /* window is already being closed */
-     if (win == aucmd_win)
-     {
- 	EMSG(_("E813: Cannot close autocmd window"));
-@@ -2138,33 +2196,15 @@
-     }
- #endif
- 
--    /*
--     * When closing the last window in a tab page first go to another tab
--     * page and then close the window and the tab page.  This avoids that
--     * curwin and curtab are not invalid while we are freeing memory, they may
--     * be used in GUI events.
--     */
--    if (firstwin == lastwin)
--    {
--	goto_tabpage_tp(alt_tabpage());
--	redraw_tabline = TRUE;
--
--	/* Safety check: Autocommands may have closed the window when jumping
--	 * to the other tab page. */
--	if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
--	{
--	    int	    h = tabline_height();
--
--	    win_close_othertab(win, free_buf, prev_curtab);
--	    if (h != tabline_height())
--		shell_new_rows();
--	}
--	return;
--    }
-+    /* When closing the last window in a tab page first go to another tab page
-+     * and then close the window and the tab page to avoid that curwin and
-+     * curtab are invalid while we are freeing memory. */
-+    if (close_last_window_tabpage(win, free_buf, prev_curtab))
-+      return;
- 
-     /* When closing the help window, try restoring a snapshot after closing
-      * the window.  Otherwise clear the snapshot, it's now invalid. */
--    if (win->w_buffer->b_help)
-+    if (win->w_buffer != NULL && win->w_buffer->b_help)
- 	help_window = TRUE;
-     else
- 	clear_snapshot(curtab, SNAP_HELP_IDX);
-@@ -2179,17 +2219,26 @@
- 	wp = frame2win(win_altframe(win, NULL));
- 
- 	/*
--	 * Be careful: If autocommands delete the window, return now.
-+	 * Be careful: If autocommands delete the window or cause this window
-+	 * to be the last one left, return now.
- 	 */
- 	if (wp->w_buffer != curbuf)
- 	{
- 	    other_buffer = TRUE;
-+	    win->w_closing = TRUE;
- 	    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
--	    if (!win_valid(win) || last_window())
-+	    if (!win_valid(win))
-+		return;
-+	    win->w_closing = FALSE;
-+	    if (last_window())
- 		return;
- 	}
-+	win->w_closing = TRUE;
- 	apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
--	if (!win_valid(win) || last_window())
-+	if (!win_valid(win))
-+	    return;
-+	win->w_closing = FALSE;
-+	if (last_window())
- 	    return;
- # ifdef FEAT_EVAL
- 	/* autocmds may abort script processing */
-@@ -2206,17 +2255,35 @@
- 	out_flush();
- #endif
- 
-+#ifdef FEAT_SYN_HL
-+    /* Free independent synblock before the buffer is freed. */
-+    if (win->w_buffer != NULL)
-+	reset_synblock(win);
-+#endif
-+
-     /*
-      * Close the link to the buffer.
-      */
--    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
-+    if (win->w_buffer != NULL)
-+    {
-+#ifdef FEAT_AUTOCMD
-+	win->w_closing = TRUE;
-+#endif
-+	close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
-+#ifdef FEAT_AUTOCMD
-+	if (win_valid(win))
-+	    win->w_closing = FALSE;
-+#endif
-+    }
- 
-     /* Autocommands may have closed the window already, or closed the only
-      * other window or moved to another tab page. */
--    if (!win_valid(win) || last_window() || curtab != prev_curtab)
-+    if (!win_valid(win) || last_window() || curtab != prev_curtab
-+	    || close_last_window_tabpage(win, free_buf, prev_curtab))
- 	return;
- 
--    /* Free the memory used for the window. */
-+    /* Free the memory used for the window and get the window that received
-+     * the screen space. */
-     wp = win_free_mem(win, &dir, NULL);
- 
-     /* Make sure curwin isn't invalid.  It can cause severe trouble when
-@@ -2297,7 +2364,7 @@
- 
- /*
-  * Close window "win" in tab page "tp", which is not the current tab page.
-- * This may be the last window ih that tab page and result in closing the tab,
-+ * This may be the last window in that tab page and result in closing the tab,
-  * thus "tp" may become invalid!
-  * Caller must check if buffer is hidden and whether the tabline needs to be
-  * updated.
-@@ -2313,8 +2380,13 @@
-     tabpage_T   *ptp = NULL;
-     int		free_tp = FALSE;
- 
-+#ifdef FEAT_AUTOCMD
-+    if (win->w_closing || win->w_buffer->b_closing)
-+	return; /* window is already being closed */
-+#endif
-+
-     /* Close the link to the buffer. */
--    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
-+    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
- 
-     /* Careful: Autocommands may have closed the tab page or made it the
-      * current tab page.  */
-@@ -3241,6 +3313,9 @@
-     else
- 	wp->w_farsi = W_CONV;
- #endif
-+#ifdef FEAT_SYN_HL
-+    wp->w_s = &wp->w_buffer->b_s;
-+#endif
- }
- 
- /*
-@@ -3277,9 +3352,7 @@
-     if (aucmd_win != NULL)
-     {
- 	win_init_some(aucmd_win, curwin);
--# ifdef FEAT_SCROLLBIND
--	aucmd_win->w_p_scb = FALSE;
--# endif
-+	RESET_BINDING(aucmd_win);
- 	new_frame(aucmd_win);
-     }
- }
-@@ -3320,10 +3393,8 @@
- 	/* First window in new tab page, initialize it from "oldwin". */
- 	win_init(curwin, oldwin, 0);
- 
--# ifdef FEAT_SCROLLBIND
--	/* We don't want scroll-binding in the first window. */
--	curwin->w_p_scb = FALSE;
--# endif
-+	/* We don't want cursor- and scroll-binding in the first window. */
-+	RESET_BINDING(curwin);
-     }
- #endif
- 
-@@ -3395,7 +3466,7 @@
- # endif
- #ifdef FEAT_EVAL
- 	/* init t: variables */
--	init_var_dict(&tp->tp_vars, &tp->tp_winvar);
-+	init_var_dict(&tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
- #endif
- 	tp->tp_ch_used = p_ch;
-     }
-@@ -3491,7 +3562,7 @@
-     }
- 
-     /* Failed, get back the previous Tab page */
--    enter_tabpage(curtab, curbuf);
-+    enter_tabpage(curtab, curbuf, TRUE);
-     return FAIL;
- }
- 
-@@ -3644,11 +3715,13 @@
- /*
-  * Start using tab page "tp".
-  * Only to be used after leave_tabpage() or freeing the current tab page.
-+ * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
-  */
-     static void
--enter_tabpage(tp, old_curbuf)
-+enter_tabpage(tp, old_curbuf, trigger_autocmds)
-     tabpage_T	*tp;
-     buf_T	*old_curbuf UNUSED;
-+    int		trigger_autocmds UNUSED;
- {
-     int		old_off = tp->tp_firstwin->w_winrow;
-     win_T	*next_prevwin = tp->tp_prevwin;
-@@ -3664,13 +3737,6 @@
-     win_enter_ext(tp->tp_curwin, FALSE, TRUE);
-     prevwin = next_prevwin;
- 
--#ifdef FEAT_AUTOCMD
--    apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
--
--    if (old_curbuf != curbuf)
--	apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
--#endif
--
-     last_status(FALSE);		/* status line may appear or disappear */
-     (void)win_comp_pos();	/* recompute w_winrow for all windows */
-     must_redraw = CLEAR;	/* need to redraw everything */
-@@ -3700,6 +3766,17 @@
-     gui_may_update_scrollbars();
- #endif
- 
-+#ifdef FEAT_AUTOCMD
-+    /* Apply autocommands after updating the display, when 'rows' and
-+     * 'columns' have been set correctly. */
-+    if (trigger_autocmds)
-+    {
-+	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
-+	if (old_curbuf != curbuf)
-+	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
-+    }
-+#endif
-+
-     redraw_all_later(CLEAR);
- }
- 
-@@ -3773,7 +3850,7 @@
- 	}
-     }
- 
--    goto_tabpage_tp(tp);
-+    goto_tabpage_tp(tp, TRUE);
- 
- #ifdef FEAT_GUI_TABLINE
-     if (gui_use_tabline())
-@@ -3783,11 +3860,13 @@
- 
- /*
-  * Go to tabpage "tp".
-+ * Only trigger *Enter autocommands when trigger_autocmds is TRUE.
-  * Note: doesn't update the GUI tab.
-  */
-     void
--goto_tabpage_tp(tp)
-+goto_tabpage_tp(tp, trigger_autocmds)
-     tabpage_T	*tp;
-+    int		trigger_autocmds;
- {
-     /* Don't repeat a message in another tab page. */
-     set_keep_msg(NULL, 0);
-@@ -3795,9 +3874,9 @@
-     if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
-     {
- 	if (valid_tabpage(tp))
--	    enter_tabpage(tp, curbuf);
-+	    enter_tabpage(tp, curbuf, trigger_autocmds);
- 	else
--	    enter_tabpage(curtab, curbuf);
-+	    enter_tabpage(curtab, curbuf, trigger_autocmds);
-     }
- }
- 
-@@ -3810,7 +3889,7 @@
-     tabpage_T	*tp;
-     win_T	*wp;
- {
--    goto_tabpage_tp(tp);
-+    goto_tabpage_tp(tp, TRUE);
-     if (curtab == tp && win_valid(wp))
-     {
- 	win_enter(wp, TRUE);
-@@ -3848,7 +3927,7 @@
-     }
- 
-     /* Re-insert it at the specified position. */
--    if (n == 0)
-+    if (n <= 0)
-     {
- 	curtab->tp_next = first_tabpage;
- 	first_tabpage = curtab;
-@@ -4271,19 +4350,19 @@
-     win_T	*after UNUSED;
-     int		hidden UNUSED;
- {
--    win_T	*newwin;
-+    win_T	*new_wp;
- 
-     /*
-      * allocate window structure and linesizes arrays
-      */
--    newwin = (win_T *)alloc_clear((unsigned)sizeof(win_T));
--    if (newwin != NULL && win_alloc_lines(newwin) == FAIL)
-+    new_wp = (win_T *)alloc_clear((unsigned)sizeof(win_T));
-+    if (new_wp != NULL && win_alloc_lines(new_wp) == FAIL)
-     {
--	vim_free(newwin);
--	newwin = NULL;
-+	vim_free(new_wp);
-+	new_wp = NULL;
-     }
- 
--    if (newwin != NULL)
-+    if (new_wp != NULL)
-     {
- #ifdef FEAT_AUTOCMD
- 	/* Don't execute autocommands while the window is not properly
-@@ -4296,53 +4375,53 @@
- 	 */
- #ifdef FEAT_WINDOWS
- 	if (!hidden)
--	    win_append(after, newwin);
-+	    win_append(after, new_wp);
- #endif
- #ifdef FEAT_VERTSPLIT
--	newwin->w_wincol = 0;
--	newwin->w_width = Columns;
-+	new_wp->w_wincol = 0;
-+	new_wp->w_width = Columns;
- #endif
- 
- 	/* position the display and the cursor at the top of the file. */
--	newwin->w_topline = 1;
-+	new_wp->w_topline = 1;
- #ifdef FEAT_DIFF
--	newwin->w_topfill = 0;
-+	new_wp->w_topfill = 0;
- #endif
--	newwin->w_botline = 2;
--	newwin->w_cursor.lnum = 1;
-+	new_wp->w_botline = 2;
-+	new_wp->w_cursor.lnum = 1;
- #ifdef FEAT_SCROLLBIND
--	newwin->w_scbind_pos = 1;
-+	new_wp->w_scbind_pos = 1;
- #endif
- 
- 	/* We won't calculate w_fraction until resizing the window */
--	newwin->w_fraction = 0;
--	newwin->w_prev_fraction_row = -1;
-+	new_wp->w_fraction = 0;
-+	new_wp->w_prev_fraction_row = -1;
- 
- #ifdef FEAT_GUI
- 	if (gui.in_use)
- 	{
--	    gui_create_scrollbar(&newwin->w_scrollbars[SBAR_LEFT],
--		    SBAR_LEFT, newwin);
--	    gui_create_scrollbar(&newwin->w_scrollbars[SBAR_RIGHT],
--		    SBAR_RIGHT, newwin);
-+	    gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_LEFT],
-+		    SBAR_LEFT, new_wp);
-+	    gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_RIGHT],
-+		    SBAR_RIGHT, new_wp);
- 	}
- #endif
- #ifdef FEAT_EVAL
- 	/* init w: variables */
--	init_var_dict(&newwin->w_vars, &newwin->w_winvar);
-+	init_var_dict(&new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
- #endif
- #ifdef FEAT_FOLDING
--	foldInitWin(newwin);
-+	foldInitWin(new_wp);
- #endif
- #ifdef FEAT_AUTOCMD
- 	unblock_autocmds();
- #endif
- #ifdef FEAT_SEARCH_EXTRA
--	newwin->w_match_head = NULL;
--	newwin->w_next_match_id = 4;
-+	new_wp->w_match_head = NULL;
-+	new_wp->w_next_match_id = 4;
- #endif
-     }
--    return newwin;
-+    return new_wp;
- }
- 
- #if defined(FEAT_WINDOWS) || defined(PROTO)
-@@ -4435,7 +4514,6 @@
- #endif /* FEAT_GUI */
- 
- #ifdef FEAT_SYN_HL
--    reset_synblock(wp);  /* free independent synblock */
-     vim_free(wp->w_p_cc_cols);
- #endif
- 
-@@ -5459,19 +5537,31 @@
- 
- #endif /* FEAT_WINDOWS */
- 
-+#define FRACTION_MULT	16384L
-+
-+/*
-+ * Set wp->w_fraction for the current w_wrow and w_height.
-+ */
-+    static void
-+set_fraction(wp)
-+    win_T	*wp;
-+{
-+    wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
-+				    + FRACTION_MULT / 2) / (long)wp->w_height;
-+}
-+
- /*
-  * Set the height of a window.
-  * This takes care of the things inside the window, not what happens to the
-  * window position, the frame or to other windows.
-  */
--    static void
-+    void
- win_new_height(wp, height)
-     win_T	*wp;
-     int		height;
- {
-     linenr_T	lnum;
-     int		sline, line_size;
--#define FRACTION_MULT	16384L
- 
-     /* Don't want a negative height.  Happens when splitting a tiny window.
-      * Will equalize heights soon to fix it. */
-@@ -5481,8 +5571,7 @@
- 	return;	    /* nothing to do */
- 
-     if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
--	wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
--				    + FRACTION_MULT / 2) / (long)wp->w_height;
-+	set_fraction(wp);
- 
-     wp->w_height = height;
-     wp->w_skipcol = 0;
-@@ -5606,7 +5695,7 @@
- /*
-  * Set the width of a window.
-  */
--    static void
-+    void
- win_new_width(wp, width)
-     win_T	*wp;
-     int		width;
-diff -Naur vim73.orig/src/workshop.c vim73/src/workshop.c
---- vim73.orig/src/workshop.c	2010-08-08 13:18:24.000000000 +0000
-+++ vim73/src/workshop.c	2012-11-01 20:35:40.000000000 +0000
-@@ -16,7 +16,6 @@
- #include <sys/types.h>
- #include <netdb.h>
- #include <netinet/in.h>
--#include <errno.h>
- #include <sys/socket.h>
- #ifdef HAVE_LIBGEN_H
- # include <libgen.h>
-diff -Naur vim73.orig/src/xpm/COPYRIGHT vim73/src/xpm/COPYRIGHT
---- vim73.orig/src/xpm/COPYRIGHT	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/COPYRIGHT	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,31 @@
-+/*
-+ * Copyright (C) 1989-95 GROUPE BULL
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a copy
-+ * of this software and associated documentation files (the "Software"), to
-+ * deal in the Software without restriction, including without limitation the
-+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-+ * sell copies of the Software, and to permit persons to whom the Software is
-+ * furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Except as contained in this notice, the name of GROUPE BULL shall not be
-+ * used in advertising or otherwise to promote the sale, use or other dealings
-+ * in this Software without prior written authorization from GROUPE BULL.
-+ */
-+
-+Arnaud LE HORS      BULL Research FRANCE -- Koala Project 
-+                    (XPM - X PixMap format version 2 & 3)
-+    Internet:       lehors@sophia.inria.fr
-+Surface Mail:       Arnaud LE HORS, INRIA - Sophia Antipolis, 
-+                    2004, route des Lucioles, 06565 Valbonne Cedex -- FRANCE
-+ Voice phone:       (33) 93.65.77.71, Fax: (33) 93 65 77 66, Telex: 97 00 50 F
-diff -Naur vim73.orig/src/xpm/README.txt vim73/src/xpm/README.txt
---- vim73.orig/src/xpm/README.txt	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/README.txt	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,26 @@
-+This is XPM library compiled for Windows which is intended for use with Vim
-+'signs' feature.
-+
-+Libraries in x86 directory were compiled with MSVC6 and MinGW. Proposed
-+commands to compile Vim are:
-+
-+Any version of MSVC starting from version 6.0:
-+nmake -f Make_mvc.mak GUI=yes CSCOPE=yes NETBEANS=yes XPM=e:\hg\xpm\x86
-+
-+MinGW:
-+mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86
-+
-+MinGW 64 for x64:
-+mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64 XPM=E:\HG\xpm\x64
-+
-+Microsoft Visual C++ on x64 (tested with versions 2008 and 2010):
-+nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64
-+
-+To test, open some file in Vim and execute commands below:
-+:exe 'sign define vimxpm icon='.$VIMRUNTIME.'\\vim32x32.xpm'
-+:exe 'sign place 1 line=1 name=vimxpm file='.expand('%:p')
-+
-+
-+See COPYRIGHT for XPM licence.
-+
-+If you have questions please email sergey.khorev@gmail.com.
-diff -Naur vim73.orig/src/xpm/include/simx.h vim73/src/xpm/include/simx.h
---- vim73.orig/src/xpm/include/simx.h	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/include/simx.h	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,139 @@
-+/*
-+ * Copyright (C) 1989-95 GROUPE BULL
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a copy
-+ * of this software and associated documentation files (the "Software"), to
-+ * deal in the Software without restriction, including without limitation the
-+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-+ * sell copies of the Software, and to permit persons to whom the Software is
-+ * furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Except as contained in this notice, the name of GROUPE BULL shall not be
-+ * used in advertising or otherwise to promote the sale, use or other dealings
-+ * in this Software without prior written authorization from GROUPE BULL.
-+ */
-+
-+/*****************************************************************************\
-+* simx.h: 0.1a                                                                *
-+*                                                                             *
-+* This emulates some Xlib functionality for MSW. It's not a general solution, *
-+* it is close related to XPM-lib. It is only intended to satisfy what is need *
-+* there. Thus allowing to read XPM files under MS windows.                    *
-+*                                                                             *
-+* Developed by HeDu 3/94 (hedu@cul-ipn.uni-kiel.de)                           *
-+\*****************************************************************************/
-+
-+
-+#ifndef _SIMX_H
-+#define _SIMX_H
-+
-+#ifdef FOR_MSW
-+
-+#include "windows.h"			/* MS windows GDI types */
-+
-+/*
-+ * minimal portability layer between ansi and KR C
-+ */
-+/* this comes from xpm.h, and is here again, to avoid complicated
-+    includes, since this is included from xpm.h */
-+/* these defines get undefed at the end of this file */
-+#if __STDC__ || defined(__cplusplus) || defined(c_plusplus)
-+ /* ANSI || C++ */
-+#define FUNC(f, t, p) extern t f p
-+#define LFUNC(f, t, p) static t f p
-+#else /* k&R */
-+#define FUNC(f, t, p) extern t f()
-+#define LFUNC(f, t, p) static t f()
-+#endif
-+
-+
-+FUNC(boundCheckingMalloc, void *, (long s));
-+FUNC(boundCheckingCalloc, void *, (long num, long s));
-+FUNC(boundCheckingRealloc, void *, (void *p, long s));
-+
-+/* define MSW types for X window types,
-+   I don't know much about MSW, but the following defines do the job */
-+
-+typedef HDC Display;			/* this should be similar */
-+typedef void *Screen;			/* not used */
-+typedef void *Visual;			/* not used yet, is for GRAY, COLOR,
-+					 * MONO */
-+
-+typedef void *Colormap;			/* should be COLORPALETTE, not done
-+					 * yet */
-+
-+typedef COLORREF Pixel;
-+
-+#define PIXEL_ALREADY_TYPEDEFED		/* to let xpm.h know about it */
-+
-+typedef struct {
-+    Pixel pixel;
-+    BYTE red, green, blue;
-+}      XColor;
-+
-+typedef struct {
-+    HBITMAP bitmap;
-+    unsigned int width;
-+    unsigned int height;
-+    unsigned int depth;
-+}      XImage;
-+
-+#if defined(__cplusplus) || defined(c_plusplus)
-+extern "C" {
-+#endif
-+/* some replacements for X... functions */
-+
-+/* XDefaultXXX */
-+    FUNC(XDefaultVisual, Visual *, (Display *display, Screen *screen));
-+    FUNC(XDefaultScreen, Screen *, (Display *d));
-+    FUNC(XDefaultColormap, Colormap *, (Display *display, Screen *screen));
-+    FUNC(XDefaultDepth, int, (Display *d, Screen *s));
-+
-+/* color related */
-+    FUNC(XParseColor, int, (Display *, Colormap *, char *, XColor *));
-+    FUNC(XAllocColor, int, (Display *, Colormap *, XColor *));
-+    FUNC(XQueryColors, void, (Display *display, Colormap *colormap,
-+			      XColor *xcolors, int ncolors));
-+    FUNC(XFreeColors, int, (Display *d, Colormap cmap,
-+			    unsigned long pixels[],
-+			    int npixels, unsigned long planes));
-+/* XImage */
-+    FUNC(XCreateImage, XImage *, (Display *, Visual *, int depth, int format,
-+				  int x, int y, int width, int height,
-+				  int pad, int foo));
-+
-+/* free and destroy bitmap */
-+    FUNC(XDestroyImage, void /* ? */ , (XImage *));
-+/* free only, bitmap remains */
-+    FUNC(XImageFree, void, (XImage *));
-+#if defined(__cplusplus) || defined(c_plusplus)
-+} /* end of extern "C" */
-+#endif /* cplusplus */
-+
-+#define ZPixmap 1			/* not really used */
-+#define XYBitmap 1			/* not really used */
-+
-+#ifndef True
-+#define True 1
-+#define False 0
-+#endif
-+#ifndef Bool
-+typedef BOOL Bool;		/* take MSW bool */
-+#endif
-+/* make these local here, simx.c gets the same from xpm.h */
-+#undef LFUNC
-+#undef FUNC
-+
-+#endif /* def FOR_MSW */
-+
-+#endif /* _SIMX_H */
-diff -Naur vim73.orig/src/xpm/include/xpm.h vim73/src/xpm/include/xpm.h
---- vim73.orig/src/xpm/include/xpm.h	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/include/xpm.h	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,501 @@
-+/*
-+ * Copyright (C) 1989-95 GROUPE BULL
-+ *
-+ * Permission is hereby granted, free of charge, to any person obtaining a copy
-+ * of this software and associated documentation files (the "Software"), to
-+ * deal in the Software without restriction, including without limitation the
-+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-+ * sell copies of the Software, and to permit persons to whom the Software is
-+ * furnished to do so, subject to the following conditions:
-+ *
-+ * The above copyright notice and this permission notice shall be included in
-+ * all copies or substantial portions of the Software.
-+ *
-+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
-+ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-+ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-+ *
-+ * Except as contained in this notice, the name of GROUPE BULL shall not be
-+ * used in advertising or otherwise to promote the sale, use or other dealings
-+ * in this Software without prior written authorization from GROUPE BULL.
-+ */
-+
-+/*****************************************************************************\
-+* xpm.h:                                                                      *
-+*                                                                             *
-+*  XPM library                                                                *
-+*  Include file                                                               *
-+*                                                                             *
-+*  Developed by Arnaud Le Hors                                                *
-+\*****************************************************************************/
-+
-+/*
-+ * The code related to FOR_MSW has been added by
-+ * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
-+ */
-+
-+/*
-+ * The code related to AMIGA has been added by
-+ * Lorens Younes (d93-hyo@nada.kth.se) 4/96
-+ */
-+
-+#ifndef XPM_h
-+#define XPM_h
-+
-+/*
-+ * first some identification numbers:
-+ * the version and revision numbers are determined with the following rule:
-+ * SO Major number = LIB minor version number.
-+ * SO Minor number = LIB sub-minor version number.
-+ * e.g: Xpm version 3.2f
-+ *      we forget the 3 which is the format number, 2 gives 2, and f gives 6.
-+ *      thus we have XpmVersion = 2 and XpmRevision = 6
-+ *      which gives  SOXPMLIBREV = 2.6
-+ *
-+ * Then the XpmIncludeVersion number is built from these numbers.
-+ */
-+#define XpmFormat 3
-+#define XpmVersion 4
-+#define XpmRevision 11
-+#define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision)
-+
-+#ifndef XPM_NUMBERS
-+
-+#ifdef FOR_MSW
-+# define SYSV			/* uses memcpy string.h etc. */
-+# include <malloc.h>
-+# include "simx.h"		/* defines some X stuff using MSW types */
-+#define NEED_STRCASECMP		/* at least for MSVC++ */
-+#else /* FOR_MSW */
-+# ifdef AMIGA
-+#  include "amigax.h"
-+# else /* not AMIGA */
-+#  include <X11/Xlib.h>
-+#  include <X11/Xutil.h>
-+# endif /* not AMIGA */
-+#endif /* FOR_MSW */
-+
-+/* let's define Pixel if it is not done yet */
-+#if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED)
-+typedef unsigned long Pixel;	/* Index into colormap */
-+# define PIXEL_ALREADY_TYPEDEFED
-+#endif
-+
-+/* make sure we know whether function prototypes are needed or not */
-+#ifndef NeedFunctionPrototypes
-+# if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
-+#  define NeedFunctionPrototypes 1
-+# else
-+#  define NeedFunctionPrototypes 0
-+# endif
-+#endif
-+
-+
-+/* Return ErrorStatus codes:
-+ * null     if full success
-+ * positive if partial success
-+ * negative if failure
-+ */
-+
-+#define XpmColorError    1
-+#define XpmSuccess       0
-+#define XpmOpenFailed   -1
-+#define XpmFileInvalid  -2
-+#define XpmNoMemory     -3
-+#define XpmColorFailed  -4
-+
-+typedef struct {
-+    char *name;			/* Symbolic color name */
-+    char *value;		/* Color value */
-+    Pixel pixel;		/* Color pixel */
-+}      XpmColorSymbol;
-+
-+typedef struct {
-+    char *name;			/* name of the extension */
-+    unsigned int nlines;	/* number of lines in this extension */
-+    char **lines;		/* pointer to the extension array of strings */
-+}      XpmExtension;
-+
-+typedef struct {
-+    char *string;		/* characters string */
-+    char *symbolic;		/* symbolic name */
-+    char *m_color;		/* monochrom default */
-+    char *g4_color;		/* 4 level grayscale default */
-+    char *g_color;		/* other level grayscale default */
-+    char *c_color;		/* color default */
-+}      XpmColor;
-+
-+typedef struct {
-+    unsigned int width;		/* image width */
-+    unsigned int height;	/* image height */
-+    unsigned int cpp;		/* number of characters per pixel */
-+    unsigned int ncolors;	/* number of colors */
-+    XpmColor *colorTable;	/* list of related colors */
-+    unsigned int *data;		/* image data */
-+}      XpmImage;
-+
-+typedef struct {
-+    unsigned long valuemask;	/* Specifies which attributes are defined */
-+    char *hints_cmt;		/* Comment of the hints section */
-+    char *colors_cmt;		/* Comment of the colors section */
-+    char *pixels_cmt;		/* Comment of the pixels section */
-+    unsigned int x_hotspot;	/* Returns the x hotspot's coordinate */
-+    unsigned int y_hotspot;	/* Returns the y hotspot's coordinate */
-+    unsigned int nextensions;	/* number of extensions */
-+    XpmExtension *extensions;	/* pointer to array of extensions */
-+}      XpmInfo;
-+
-+typedef int (*XpmAllocColorFunc)(
-+#if NeedFunctionPrototypes
-+    Display*			/* display */,
-+    Colormap			/* colormap */,
-+    char*			/* colorname */,
-+    XColor*			/* xcolor */,
-+    void*			/* closure */
-+#endif
-+);
-+
-+typedef int (*XpmFreeColorsFunc)(
-+#if NeedFunctionPrototypes
-+    Display*			/* display */,
-+    Colormap			/* colormap */,
-+    Pixel*			/* pixels */,
-+    int				/* npixels */,
-+    void*			/* closure */
-+#endif
-+);
-+
-+typedef struct {
-+    unsigned long valuemask;		/* Specifies which attributes are
-+					   defined */
-+
-+    Visual *visual;			/* Specifies the visual to use */
-+    Colormap colormap;			/* Specifies the colormap to use */
-+    unsigned int depth;			/* Specifies the depth */
-+    unsigned int width;			/* Returns the width of the created
-+					   pixmap */
-+    unsigned int height;		/* Returns the height of the created
-+					   pixmap */
-+    unsigned int x_hotspot;		/* Returns the x hotspot's
-+					   coordinate */
-+    unsigned int y_hotspot;		/* Returns the y hotspot's
-+					   coordinate */
-+    unsigned int cpp;			/* Specifies the number of char per
-+					   pixel */
-+    Pixel *pixels;			/* List of used color pixels */
-+    unsigned int npixels;		/* Number of used pixels */
-+    XpmColorSymbol *colorsymbols;	/* List of color symbols to override */
-+    unsigned int numsymbols;		/* Number of symbols */
-+    char *rgb_fname;			/* RGB text file name */
-+    unsigned int nextensions;		/* Number of extensions */
-+    XpmExtension *extensions;		/* List of extensions */
-+
-+    unsigned int ncolors;               /* Number of colors */
-+    XpmColor *colorTable;               /* List of colors */
-+/* 3.2 backward compatibility code */
-+    char *hints_cmt;                    /* Comment of the hints section */
-+    char *colors_cmt;                   /* Comment of the colors section */
-+    char *pixels_cmt;                   /* Comment of the pixels section */
-+/* end 3.2 bc */
-+    unsigned int mask_pixel;            /* Color table index of transparent
-+                                           color */
-+
-+    /* Color Allocation Directives */
-+    Bool exactColors;			/* Only use exact colors for visual */
-+    unsigned int closeness;		/* Allowable RGB deviation */
-+    unsigned int red_closeness;		/* Allowable red deviation */
-+    unsigned int green_closeness;	/* Allowable green deviation */
-+    unsigned int blue_closeness;	/* Allowable blue deviation */
-+    int color_key;			/* Use colors from this color set */
-+
-+    Pixel *alloc_pixels;		/* Returns the list of alloc'ed color
-+					   pixels */
-+    int nalloc_pixels;			/* Returns the number of alloc'ed
-+					   color pixels */
-+
-+    Bool alloc_close_colors;    	/* Specify whether close colors should
-+					   be allocated using XAllocColor
-+					   or not */
-+    int bitmap_format;			/* Specify the format of 1bit depth
-+					   images: ZPixmap or XYBitmap */
-+
-+    /* Color functions */
-+    XpmAllocColorFunc alloc_color;	/* Application color allocator */
-+    XpmFreeColorsFunc free_colors;	/* Application color de-allocator */
-+    void *color_closure;		/* Application private data to pass to
-+					   alloc_color and free_colors */
-+
-+}      XpmAttributes;
-+
-+/* XpmAttributes value masks bits */
-+#define XpmVisual	   (1L<<0)
-+#define XpmColormap	   (1L<<1)
-+#define XpmDepth	   (1L<<2)
-+#define XpmSize		   (1L<<3)	/* width & height */
-+#define XpmHotspot	   (1L<<4)	/* x_hotspot & y_hotspot */
-+#define XpmCharsPerPixel   (1L<<5)
-+#define XpmColorSymbols	   (1L<<6)
-+#define XpmRgbFilename	   (1L<<7)
-+/* 3.2 backward compatibility code */
-+#define XpmInfos	   (1L<<8)
-+#define XpmReturnInfos	   XpmInfos
-+/* end 3.2 bc */
-+#define XpmReturnPixels	   (1L<<9)
-+#define XpmExtensions      (1L<<10)
-+#define XpmReturnExtensions XpmExtensions
-+
-+#define XpmExactColors     (1L<<11)
-+#define XpmCloseness	   (1L<<12)
-+#define XpmRGBCloseness	   (1L<<13)
-+#define XpmColorKey	   (1L<<14)
-+
-+#define XpmColorTable      (1L<<15)
-+#define XpmReturnColorTable XpmColorTable
-+
-+#define XpmReturnAllocPixels (1L<<16)
-+#define XpmAllocCloseColors (1L<<17)
-+#define XpmBitmapFormat    (1L<<18)
-+
-+#define XpmAllocColor      (1L<<19)
-+#define XpmFreeColors      (1L<<20)
-+#define XpmColorClosure    (1L<<21)
-+
-+
-+/* XpmInfo value masks bits */
-+#define XpmComments        XpmInfos
-+#define XpmReturnComments  XpmComments
-+
-+/* XpmAttributes mask_pixel value when there is no mask */
-+#ifndef FOR_MSW
-+#define XpmUndefPixel 0x80000000
-+#else
-+/* int is only 16 bit for MSW */
-+#define XpmUndefPixel 0x8000
-+#endif
-+
-+/*
-+ * color keys for visual type, they must fit along with the number key of
-+ * each related element in xpmColorKeys[] defined in XpmI.h
-+ */
-+#define XPM_MONO	2
-+#define XPM_GREY4	3
-+#define XPM_GRAY4	3
-+#define XPM_GREY 	4
-+#define XPM_GRAY 	4
-+#define XPM_COLOR	5
-+
-+
-+/* macros for forward declarations of functions with prototypes */
-+#if NeedFunctionPrototypes
-+#define FUNC(f, t, p) extern t f p
-+#define LFUNC(f, t, p) static t f p
-+#else
-+#define FUNC(f, t, p) extern t f()
-+#define LFUNC(f, t, p) static t f()
-+#endif
-+
-+
-+/*
-+ * functions declarations
-+ */
-+
-+#ifdef __cplusplus
-+extern "C" {
-+#endif
-+
-+/* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
-+/* Same for Amiga! */
-+
-+#if !defined(FOR_MSW) && !defined(AMIGA)
-+    FUNC(XpmCreatePixmapFromData, int, (Display *display,
-+					Drawable d,
-+					char **data,
-+					Pixmap *pixmap_return,
-+					Pixmap *shapemask_return,
-+					XpmAttributes *attributes));
-+
-+    FUNC(XpmCreateDataFromPixmap, int, (Display *display,
-+					char ***data_return,
-+					Pixmap pixmap,
-+					Pixmap shapemask,
-+					XpmAttributes *attributes));
-+
-+    FUNC(XpmReadFileToPixmap, int, (Display *display,
-+				    Drawable d,
-+				    char *filename,
-+				    Pixmap *pixmap_return,
-+				    Pixmap *shapemask_return,
-+				    XpmAttributes *attributes));
-+
-+    FUNC(XpmWriteFileFromPixmap, int, (Display *display,
-+				       char *filename,
-+				       Pixmap pixmap,
-+				       Pixmap shapemask,
-+				       XpmAttributes *attributes));
-+#endif
-+
-+    FUNC(XpmCreateImageFromData, int, (Display *display,
-+				       char **data,
-+				       XImage **image_return,
-+				       XImage **shapemask_return,
-+				       XpmAttributes *attributes));
-+
-+    FUNC(XpmCreateDataFromImage, int, (Display *display,
-+				       char ***data_return,
-+				       XImage *image,
-+				       XImage *shapeimage,
-+				       XpmAttributes *attributes));
-+
-+    FUNC(XpmReadFileToImage, int, (Display *display,
-+				   char *filename,
-+				   XImage **image_return,
-+				   XImage **shapeimage_return,
-+				   XpmAttributes *attributes));
-+
-+    FUNC(XpmWriteFileFromImage, int, (Display *display,
-+				      char *filename,
-+				      XImage *image,
-+				      XImage *shapeimage,
-+				      XpmAttributes *attributes));
-+
-+    FUNC(XpmCreateImageFromBuffer, int, (Display *display,
-+					 char *buffer,
-+					 XImage **image_return,
-+					 XImage **shapemask_return,
-+					 XpmAttributes *attributes));
-+#if !defined(FOR_MSW) && !defined(AMIGA)
-+    FUNC(XpmCreatePixmapFromBuffer, int, (Display *display,
-+					  Drawable d,
-+					  char *buffer,
-+					  Pixmap *pixmap_return,
-+					  Pixmap *shapemask_return,
-+					  XpmAttributes *attributes));
-+
-+    FUNC(XpmCreateBufferFromImage, int, (Display *display,
-+					 char **buffer_return,
-+					 XImage *image,
-+					 XImage *shapeimage,
-+					 XpmAttributes *attributes));
-+
-+    FUNC(XpmCreateBufferFromPixmap, int, (Display *display,
-+					  char **buffer_return,
-+					  Pixmap pixmap,
-+					  Pixmap shapemask,
-+					  XpmAttributes *attributes));
-+#endif
-+    FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return));
-+    FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer));
-+
-+    FUNC(XpmReadFileToData, int, (char *filename, char ***data_return));
-+    FUNC(XpmWriteFileFromData, int, (char *filename, char **data));
-+
-+    FUNC(XpmAttributesSize, int, ());
-+    FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes));
-+    FUNC(XpmFreeExtensions, void, (XpmExtension *extensions,
-+				   int nextensions));
-+
-+    FUNC(XpmFreeXpmImage, void, (XpmImage *image));
-+    FUNC(XpmFreeXpmInfo, void, (XpmInfo *info));
-+    FUNC(XpmGetErrorString, char *, (int errcode));
-+    FUNC(XpmLibraryVersion, int, ());
-+
-+    /* XpmImage functions */
-+    FUNC(XpmReadFileToXpmImage, int, (char *filename,
-+				      XpmImage *image,
-+				      XpmInfo *info));
-+
-+    FUNC(XpmWriteFileFromXpmImage, int, (char *filename,
-+					 XpmImage *image,
-+					 XpmInfo *info));
-+#if !defined(FOR_MSW) && !defined(AMIGA)
-+    FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display,
-+					    Drawable d,
-+					    XpmImage *image,
-+					    Pixmap *pixmap_return,
-+					    Pixmap *shapemask_return,
-+					    XpmAttributes *attributes));
-+#endif
-+    FUNC(XpmCreateImageFromXpmImage, int, (Display *display,
-+					   XpmImage *image,
-+					   XImage **image_return,
-+					   XImage **shapeimage_return,
-+					   XpmAttributes *attributes));
-+
-+    FUNC(XpmCreateXpmImageFromImage, int, (Display *display,
-+					   XImage *image,
-+					   XImage *shapeimage,
-+					   XpmImage *xpmimage,
-+					   XpmAttributes *attributes));
-+#if !defined(FOR_MSW) && !defined(AMIGA)
-+    FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display,
-+					    Pixmap pixmap,
-+					    Pixmap shapemask,
-+					    XpmImage *xpmimage,
-+					    XpmAttributes *attributes));
-+#endif
-+    FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return,
-+					  XpmImage *image,
-+					  XpmInfo *info));
-+
-+    FUNC(XpmCreateXpmImageFromData, int, (char **data,
-+					  XpmImage *image,
-+					  XpmInfo *info));
-+
-+    FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer,
-+					    XpmImage *image,
-+					    XpmInfo *info));
-+
-+    FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return,
-+					    XpmImage *image,
-+					    XpmInfo *info));
-+
-+    FUNC(XpmGetParseError, int, (char *filename,
-+				 int *linenum_return,
-+				 int *charnum_return));
-+
-+    FUNC(XpmFree, void, (void *ptr));
-+
-+#ifdef __cplusplus
-+} /* for C++ V2.0 */
-+#endif
-+
-+
-+/* backward compatibility */
-+
-+/* for version 3.0c */
-+#define XpmPixmapColorError  XpmColorError
-+#define XpmPixmapSuccess     XpmSuccess
-+#define XpmPixmapOpenFailed  XpmOpenFailed
-+#define XpmPixmapFileInvalid XpmFileInvalid
-+#define XpmPixmapNoMemory    XpmNoMemory
-+#define XpmPixmapColorFailed XpmColorFailed
-+
-+#define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \
-+    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
-+#define XpmWritePixmapFile(dpy, file, pix, mask, att) \
-+    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
-+
-+/* for version 3.0b */
-+#define PixmapColorError  XpmColorError
-+#define PixmapSuccess     XpmSuccess
-+#define PixmapOpenFailed  XpmOpenFailed
-+#define PixmapFileInvalid XpmFileInvalid
-+#define PixmapNoMemory    XpmNoMemory
-+#define PixmapColorFailed XpmColorFailed
-+
-+#define ColorSymbol XpmColorSymbol
-+
-+#define XReadPixmapFile(dpy, d, file, pix, mask, att) \
-+    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
-+#define XWritePixmapFile(dpy, file, pix, mask, att) \
-+    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
-+#define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \
-+    XpmCreatePixmapFromData(dpy, d, data, pix, mask, att)
-+#define XCreateDataFromPixmap(dpy, data, pix, mask, att) \
-+    XpmCreateDataFromPixmap(dpy, data, pix, mask, att)
-+
-+#endif /* XPM_NUMBERS */
-+#endif
-diff -Naur vim73.orig/src/xpm/x64/lib/libXpm.a vim73/src/xpm/x64/lib/libXpm.a
---- vim73.orig/src/xpm/x64/lib/libXpm.a	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/x64/lib/libXpm.a	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,238 @@
-+!<arch>
-+/               1346471174  0     0     0       1492      `
-+F@@
-~
-~)Ãº)Ãº)ÃºXÂXÂ^Â^ÂdÃŠdÃŠdÃŠdÃŠdÃŠdÃŠdÃŠzÂšzÂšzÂšzÂšÂ"Â"ÂvÂvÂvÂvÂvÂvÂvÂvÂÂÂÂ
-Â
-Â¢Â¢Â¢Â¢ÃÂžÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃÃºÃ¥ÂÃ©,Ã©,Ã©,Ã©,Ã©,
-ÂxpmFreeColorTableXpmFreeExtensionsXpmAttributesSizexpmInitAttributesxpmSetAttributesXpmFreeAttributesXpmCreateBufferFromXpmImageXpmCreateBufferFromImageXpmCreateDataFromXpmImageXpmCreateDataFromImagexpmstrcasecmpXpmCreateImageFromXpmImagexpmParseDataAndCreateXpmCreateImageFromBufferXpmCreateXpmImageFromBufferXpmCreateImageFromDataXpmCreateXpmImageFromDataxpmNextStringxpmNextWordxpmNextUIxpmGetStringxpmGetCmtxpmParseHeaderxpmDataTypesxpmHashSlotxpmHashInternxpmHashTableInitxpmHashTableFreexpmInitXpmImageXpmFreeXpmImagexpmInitXpmInfoXpmFreeXpmInfoxpmSetInfoMaskxpmSetInfoxpmatouiXpmGetErrorStringXpmLibraryVersionXpmFreeXpmReadFileToBufferXpmReadFileToDataXpmReadFileToImageXpmReadFileToXpmImagexpmReadRgbNamesxpmGetRgbNamexpmGetRGBfromNamexpmFreeRgbNamesXpmCreateXpmImageFromImageboundCheckingMallocboundCheckingCallocboundCheckingReallocXDefaultVisualXDefaultScreenXDefaultDepthXDefaultColormapXParseColorXAllocColorXQueryColorsXFreeColorsXCreateImageXImageFreeXDestroyImageXpmWriteFileFromBufferxpmParseValuesxpmParseColorsxpmParseExtensionsxpmParseDataxpmColorKeysXpmWriteFileFromDataXpmWriteFileFromXpmImageXpmWriteFileFromImageAttrib.o/       1346471167  0     0     100666  2539      `
-+dÂÃ®.text ÃÂ P`.data@PÃ.bssÂPÃ.xdataLÃŒ@0@.pdataHH:@0@UWVSHÂÃ¬(HÂ
-ÃHÂÃtOÂ
-Ã~;ÂÃªHÂÃHÂRHÃÃ HÂl0fÂHÂ~0HÂHÂ
-ÃtÃšHÂÃH9ÃŸuÃªH9Ã®uÃ¡HÂÃHÂÃ([^_]Ã©HÂÃ([^_]ÃÂAUATUWVSHÂÃ¬(HÂ
-ÃHÂÃÂ}Â
-ÃteÂÃªIÂÃHÂRLÂlÃDIÂ
-$HÂ
-ÃtÃšAÂl$IÂ|$Â
-Ã­t1Ã¶fÂHÂ
-Ã·HÂ
-ÃtÃšHÂÃ9ÃµwÃªIÂ|$HÂ
-Ã¿tHÂÃ¹ÃšIÂÃM9Ã¬uÂ¯HÂÃHÂÃ([^_]A\A]Ã©HÂÃ([^_]A\A]Ãfffff.ÂÂžÃ Ãf.ÂHÂ
-Ãt_ÂHÃA0ÃA8HÃApÃAhHÃAxÃ¶ÃHÃÂÂHÃÂÂu(Â©tHÃÂÂ°ÃÂÂžÃ³Ãf.ÂHÃA`ÃAXÃ«Ãffffff.ÂWVSHÂÃ¬0ÂHÂÃÃ¶ÃÂtHÂJHÂKpÂJ
-ÂKhÃB
-HÃBÃ¶ÃtIÂH0HÂK`AÂH(ÂKXIÃ@0AÃ@(AÃ¶tAÂH ÂÃÂK$AÂH$ÂK(ÂÃ(ÂJÂÂÂK,ÂC
-ÂBÂC HÂÃ0[^_ÃfÂÃ¶ÃtÂÂz
-HÂrHÂT$(LÂD$ Â
-ÃœÃšHÂ
-ÃHÂT$(LÂD$ ÂÂÂ
-Ã¿~*ÂÃ¯HÂN0IÂÃLÂIÃÃ¢IÃÃ«HÂÃ0IÂ1IÂÃL9ÃHÂÃuÃ­HÂCpÂB
-ÂChIÂ@HÂCxIÂ@HÂÂÂIÂ@HÂÂÂÃB
-HÃBÂIÃ@IÃ@IÃ@Ã©Ã¥ÃŸÃ¿Ã¿ÂÂ
-HÃCpÂÃÂÃ€ÃŸÂÃ¥Âu.HÂK0HÂT$(LÂD$ ÃšÂLÂD$ HÂT$(HÃC0ÃC8ÃChÃ©ÂÃŸÃ¿Ã¿AUATUWVSHÂÃ¬(ÂHÂÃÃ¶Ãt
-ÂQ8Â
-ÃÂ
-ÂÃ¶ÃÂÂ
-9Ã¶ÃÂÃLÂkpMÂ
-Ã­tcÂChÂ
-Ã~<ÂÃšLÂÃ­MÂdÃ
-fÂHÂuHÂ~0ÂHÂHÂ
-ÃtÃšHÂÃH9ÃŸuÃªHÂÃ
-L9Ã¥uÃIÂMÃšLÂÃ©ÃšHÃCpÃChHÂKxHÂ
-Ãt
-ÃšHÃCxHÂÂÂHÂ
-ÃtÃšHÃÂÂHÂÂÂHÂ
-ÃtÃšHÃÂÂHÂK0HÂ
-ÃtÃšHÃC0ÃC8ÂÃ¶ÃtÂSXÂ
-ÃujÂ©t
-+ÂÂÂžÂ
-ÃuÃHÂÃ([^_]A\A]Ã@HÂÂÂ°ÃšHÃÂÂ°ÃÂÂžÃ«ÃÂShHÂKpÃš1Ã»Ã¿Ã¿HÃCpÃChÂÃ«ÂHÂK`ÃšÂ
-Ã»Ã¿Ã¿HÃC`ÃCXÂÃ©wÃ¿Ã¿Ã¿HÂI0ÃšHÃC0ÃC8ÂÃ©aÃŸÃ¿Ã¿B0`pP
-
-B0`pPÃÃR0`p
-
-B0`pPÃÃhp &$0Â±(Ã`,` 8=ÂªÃÃ€n5ÃÃ€Ã¬	">WÂš[		
-			
-	 $	(	,0	4	8<	@	D.fileÃŸÃ¿gAttrib.c p (  :0 LÃ ]` .text .data.bss.xdataL.pdataHfree o ÂxpmFreeColorTableXpmFreeExtensionsXpmAttributesSizexpmInitAttributesxpmSetAttributesXpmFreeAttributesboundCheckingMalloc
-+CrBufFrI.o/     1346471168  0     0     100666  3329      `
-+dÂd
-+
-.text@Ã$ P`.data@PÃ.bssÂPÃ.rdata@D@P@.xdata$Â@0@.pdataÂš(
-+@0@AWAVAUATUWVSHÂÃ¬xMÂ
-ÃHÂÂ$ÃIÂÃLÂÂ$ÃHÃtvAÂ1ÃÃ¶ÃÂÃÃ¶ÃÂL$PtjAÂ@(Â
-ÃtbIÂX0ÂÃš1Ã¶HÂ@LÂcMÂ,ÃHÂ
-ÃšÂ{Ât
-HÂkÂ
-Ã¿t
-1Ã@HÂLÃHÂÃÃš9ÃÂtwÃªM9Ã¬LÂÃ£ÂIÂÃÃ«Â»ÃD$PÂœ*ÃD$\ÂD$P1ÃÂ
-ÃtMHÂÂ$ÃHÂHHÂ
-ÃtÃšÂXHÂÂ$ÃHÂJHÂ
-Ãt	ÃšÂ\HÂÂ$ÃHÂHHÂ
-Ãt	ÃšÂ\ÃIÂœimage_naHÂŸ/* XPM *HÂ¿/
-+staticIÂŒ char * IÂŸme[] = {ÂÃ©LÂÂ¬$ÂHÂt$pHÂ|$xLÂÂ€$ÂLÂÂŽ$ÂfÃÂ$Â
-+ÃšHÂ
-ÃIÂÃ
-Â	HÂT$pHÂÃÂŸ)ÃšÂ\$PÂ
-ÃÂ
-ÂŒAÂGEÂOHÂHÂL$pÂD$(AÂG
-ÂD$ EÂÃšHÂÂŒ$ÃAÂÃtHÂÂ$ÃÃ¶Â
-DÂ\$\EÂ
-ÃÂ
-ÃDÂÃ AÂÃLÂÃ©DÃ¥ÃDp",
-+ÂÃªÃšHÂ
-ÃHÂÃÂ
-ÂÃ±HÂT$pAÃŽHÃÃšDÂL$PEÂ
-ÃÂ
-LAÂG
-AÂWIÂÃÂ$p"Â
-ÃÂxÂÃšLÂÂŽ$pHÂT$8HÂ@LÂ|$`IÂÃIÂTHÃÃ HÂD0HÂT$@HÂD$HIÂFIÂÃÂLÂD$8HÂLÂÃ¹1ÃÃšHÂt$@LÂLMÂ
-ÃtHÂHÂ
-HÂÃ±LÂÃšHÂHÃHÂÃHÂÃ»(uÃÃ",
-+HÂÃLÂÃ©D)Ã¶ÃµÂÃªÃšHÂ
-ÃHÂÃt5DÂÃ¡LÂÃ²AÃŽHÃHÂÃ0ÃšH;|$HÂÂ¢IÂÃÃ©mÃ¿Ã¿Ã¿IÂÃf.ÂLÂÃ©ÃšÂžÃœÃ¿Ã¿Ã¿HÂÃx[^_]A\A]A^A_ÃHÂÂ$ÃLÂBMÂ
-ÃÂ/ÃŸÃ¿Ã¿IÂM)HÂÃšÂp)Ã©ÃŸÃ¿Ã¿HÂÂ$ÃLÂAMÂ
-ÃÂÂÃŸÃ¿Ã¿DÂÃ¡HÂHÃÃšAÃÃ©Â
-ÃŸÃ¿Ã¿Ân7ÃD$\Ã©Ã°ÃŒÃ¿Ã¿LÂ|$`AÂWAÂHÂÃÂ¯ÃÂÃAÂ¯GÂTÃšHÂ
-ÃHÂD$`Â5Ã¿Ã¿Ã¿DÂD$PEÂ
-ÃÂ
-AÂGAÂWMÂoIÂoEÂ7ÂD$hDÂÃ HD$`ÂÃºÂT$8HÂD$PIÂÃÂÂÂ|$hAÂFÃ¿ÂºDÂd$lMÂÃŒAÂÃHÂÃHÂÃHÃÃ HÂ¯ÃHÂD$HHÂL$@AÃ$"IÂÃEÂ
-Ã¶t7LÂÃŠ1ÃÂDÂHÂÃ±IÂÃžHÂÃHÃŸHÂ@HÃÃ IÂTÃšA9ÃwÃLd$@Hl$HAÃ$",
-+AÂÃIÂÃD;|$8uÂ€MÂÃ§DÂd$lAÃ"IÂÃEÂ
-Ã¶tEÂ|$hLÂÃŸ1ÃDÂDÂHÂÃ±IÂÃžHÂÃHÃŸHÂ@HÃÃ IÂTÃšA9ÃwÃAÂFÃ¿HÂÃHÂ¯ÃIÃD+d$PÂL$\AÃ"Â
-ÃGÂ|<Â0HÂÂ$ÃEÂÃŸLt$`ÂP(HÂX01ÃLÂÃ¶Â
-ÃÂÃ­ÂBÃ¿LÂcHÂ@MÂ,ÃLÂHÂ#HÂÃ±ÃšÂ{HÂHÂkHÃÂ
-Ã¿t+1ÃÂLÂDÃHÂ1HÂÃ±HÂÃÃšHÂHÃ9ÃwÃM9Ã¬LÂÃ£ÂÂIÂÃÃ«Â¡DÂÃ IÂº XPMEXTAÂÃLÂTpÃ©
-ÃŒÃ¿Ã¿HÂÂ$ÃÂÃHÂD$pHÃDÂJ$DÂB HÂÃšAÃÃ©ÃÃ»Ã¿Ã¿HÂÂ$ÃLÂAMÂ
-ÃÂÃÃœÃ¿Ã¿DÂÃ¡HL$`HÂÃšAÃÃ©Â¿ÃœÃ¿Ã¿ÂÃ°D)Ã°HÂº,
-+"XPMENEÂ|
-ÃFDEXTHÂfÃF
-"HÂD$`BÃ8};
-+HÂÂ$ÃHÂ1ÃÃ©ÂœÃŒÃ¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Ã©Â³ÃŒÃ¿Ã¿fDVSHÂÃ¬ÂšHÂÂŽ$Ã HÂÃLÂÃMÂÃHÂ
-ÃtHÃLÂÂ$ÂHÂt$ ÃšÂ
-Ãu<HÂ
-Ã¶tAHÂL$@HÂÃ²ÃšLÂD$@HÂÂ$ÂHÂÃÃšÃœÃžÃ¿Ã¿HÂÂ$ÂÂD$8ÃšÂD$8HÂÃÂš[^ÃHÂÂ$ÂE1ÃHÂÃÃšÃÃžÃ¿Ã¿Ã«ÃÂÂÂÂÂÂÂÂÂ/*%s*/
-+"%d %d %d %d %d %d	%s %s,
-+"XPMEXT %s",
-+"%s"
-+Â
-0
-`
-+p	PÃÃÃ Ã°		0`ÂÂ 7gÂÃÃ²
-wÂÂ°
-Ã0Â®ÃÃ
-ÃÃ¿
-D}
-ÂÂ©
-Â±Ã¬Â£z
-ÂÂš
-ÂŽ
-
-<
-AÃÃª
-
-
-.fileÃŸÃ¿gCrBufFrI.c  Â  .text7$.data.bss.rdata8.xdata$.pdata9strlen F strcpy sprintf Z strncpy free o Â Â Â¥XpmCreateBufferFromXpmImageXpmCreateBufferFromImagexpmColorKeysboundCheckingMallocboundCheckingReallocXpmCreateXpmImageFromImagexpmSetInfoXpmFreeXpmImage
-+CrDatFrI.o/     1346471168  0     0     100666  3136      `
-+dÂÂš	
-.textÃ@
- P`.data@PÃ.bssÂPÃ.rdata0Ã@P@.xdata$@0@.pdata(l	@0@AWAVAUATUWVSHÂÃ¬ÂšMÂ
-ÃHÂÂ$Ã°IÂÃLÂÂ$HÃt
-AÂÃ¶ÃÂ
-Ã§ÃD$hÃD$lÃD$XAÂG
-ÂºÂÃÂÃÂD$TÃÃŠÂÃ±ÃšHÂ
-ÃIÂÃÂÂšAÂGEÂOHÂÂ$Â HÂHÂÃÂD$(AÂG
-ÂD$ EÂÃšLcÃ°IÃHÂÂŒ$tHÂÂ$Ã¶Â
-DÂL$hEÂ
-ÃÂ
-ÃI)ÃÂ¿ÃœÃ¿Ã¿Ã¿AÂÃDÂÃ±ÃšHÂ
-ÃIÂ$ÂÃŠHÂÃHÂÃAÃ¶ÃšAÂW
-AÂGIÂÂ
-ÃÂT$@ÂÂ¥LÂÂ¬$Â HÂD$8LÂ|$`1Ã­LÃšIÂÃLÂD$8HÂLÂÃ©LÂÃŸ1ÃÃšLÂLMÂ
-ÃtHÂHÂHÂÃ±LÂÃšHÂHÃHÂÃHÂÃ»(uÃL)Ã®ÂÃÂÃ±ÃšHÂ
-ÃÂLÂÃªHÂÃAÃ¶ÃšHÂÃ0IÂDÃ¬HÂÃ
-9l$@wÂLÂ|$`AÂGAÂ¯ÂL$lÂT$XÂ¿ÃœÃ¿Ã¿Ã¿ÂÃÂÂ$ÂAÂGÃÂ¯Â$ÂÂ
-ÃDÃ±ÃÃšHÂ
-ÃHÂD$XÂÃÂD$TAG1ÃD$lHÂT$XAÂw
-HÂÃHÂ
-ÃHÂ
-+IÂÃÃšIÂ
-ÃÃšHÂHH
-ÃHÂLÃHÂÃ9ÃsÃÂL$THÂD$XÂT$lEÂ/HÂÂ$ÂHÂ
-ÃAÂGÃIÂÃHT$XÂÃžHÂHÂT$xAÂWMÂwIÂoÂÂ$ÂÂÃÂÃšÂÂŒ$ÂLÂÂ€$ÂHÂDÃLÂd$xLÂÂŒ$ÂAÂ¯ÃIÂÃHÂD$@AÂEÃ¿ÂÃHÂÃHÂT$8HÂÃHÃÃ HÂ¯ÃHÂD$pHÂT$`DEÂ
-Ã­t<LÂÃŠ1ÃfDÂDÂHÂÃ±IÂÃžHÂÃHÃŸHÂ@HÃÃ IÂÃšA9ÃwÃLd$`Hl$pAÃ$LÂd$8M'MÂgIÂÃL;|$@uÂ£LÂd$xLÂÂŒ$ÂLÂÂ€$ÂEÂ
-Ã­tFÂÂŒ$ÂHÂt$x1ÃÂDÂHÂÃ±IÂÃžHÂÃHÃŸHÂ@HÃÃ IÂÃšA9ÃwÃAÂEÃ¿HÂÃHÂ¯ÃHD$xHÂL$xÃÂL$hÂ
-ÃÂ
-!HÂD$XHÂÂ$Ã°1Ã¿HÂÂD$TÂ
-Ãt
-Ât$T1ÃIÂ
-ÃHÂ
-ÃtÃšHÂÃ9ÃwÃªLÂÃ¡ÃšÂÃžHÂÃÂš[^_]A\A]A^A_ÃAÂ@(Â
-ÃÂ
-ÃŒÃ¿Ã¿IÂX0ÂÃš1Ã¶HÂ@E1Ã­LÂcMÂ4ÃÂÂ{HÂ
-ÃšÂ
-Ã¿FÂl/ÂtHÂkt1ÃfÂHÂLÃHÂÃÃš9ÃÂtwÃªM9ÃŽLÂÃ£tIÂÃÃ«ÂŒÂÃ
-+AÂÃ
-ÃD$hÂt$XDÂl$lÃ©Â¥Ã»Ã¿Ã¿Â¿ÃœÃ¿Ã¿Ã¿Ã©(Ã¿Ã¿Ã¿IÂž XPMEXTMÂIÂÃÃ©
-ÃŒÃ¿Ã¿DÂI$DÂA HÂ
-LÂÃ±ÃšHÂIÃÃ©ÃÃ»Ã¿Ã¿HÂÂ$HÂÂ$ÂÂB(HÂr0AÂWHÂTÃ¿HÂL$XHÂ
-ÃÂÂ$ÂH
-HÂKHÂÃÂ
-ÃÂÃÂÃšÂ|$lE1Ã¶HÂ@LÂd$HHÂÃHÂD$@LÂHÂEÂ~ÃšD9Ã¿vHÂÃšHÂÃHHÂCDÂnHÂCLÂfHÂD$8EÂ
-Ã­ÂÂ1Ã­AÂÃ@IÂÃ¬HÂLÃ«ÃšAÂ.9ÃžsIÂ
-Ã¬ÃšHÂÃHDÃ«HÂDÃ«HÂÃ
-A9Ã­wÃHÂT$8GÂt=AÂÃ­JÂ\ÃªH;t$@t
-HÂÃHÂ
-Ã©UÃ¿Ã¿Ã¿LÂd$HHÂ
-HÂºXPMENDEXfÃATHÂÃ©ÂµÃœÃ¿Ã¿EÂÃŸHÂ\$8Ã«ÃÂ¿ÃœÃ¿Ã¿Ã¿Ã©ÃÃœÃ¿Ã¿VSHÂÃ¬ÂšHÂÂŽ$Ã HÂÃLÂÃMÂÃHÂ
-ÃtHÃLÂÂ$ÂHÂt$ ÃšÂ
-Ãu<HÂ
-Ã¶tAHÂL$@HÂÃ²ÃšLÂD$@HÂÂ$ÂHÂÃÃšmÃ¹Ã¿Ã¿HÂÂ$ÂÂD$8ÃšÂD$8HÂÃÂš[^ÃHÂÂ$ÂE1ÃHÂÃÃš;Ã¹Ã¿Ã¿Ã«ÃÂÂÂÂÂÂÂÂÂ%d %d %d %d %d %d	%s %sXPMEXT %s
-+Â
-0
-`
-+p	PÃÃÃ Ã°		0`00ÃnÂ
-ÂšÃ¬Qbi
-uÂÂšÃº5>.Â£Ã»
-WzÃ
-Ã€W
-`mÂªÂ»dzÂ 
-
-
-.fileÃŸÃ¿gCrDatFrI.c 
-0 .textÃ
-.data.bss.rdata$.xdata$.pdata5B sprintf V strcpy strncpy strlen free j Â
- Â Â XpmCreateDataFromXpmImageXpmCreateDataFromImagexpmColorKeysboundCheckingCallocboundCheckingMallocXpmCreateXpmImageFromImagexpmSetInfoXpmFreeXpmImagecreate.o/       1346471168  0     0     100666  11875     `
-+dÂT(6.textp Â "w P`.data@PÃ.bssÂPÃ.xdataÂ t!@0@.pdatal"F'@0@.rdata Â"@P@WVSHÂÃ¬ MÂ
-ÃHÂÃHÂÃLÂÃtÃšÂ
-ÃÂºÃ¿Ã¿Ã¿Ã¿tHÂÃ²IÂÃžHÂÃÃš1ÃÂ
-ÃÂÃÂÃHÂÃ [^_Ãfffff.ÂHÂÃ¬XÂž AÂÃžw
-AÂÃž	ÃÂÃ ÃžÂÃÂD$@ÂÂ$ÂÃD$HÃD$(ÃD$ ÂD$8ÂÂ$ÂÂD$0ÃšHÂÂ$ÂHÂÃžHÂÃÂÃ ÃœHÂÃXÃDÃD$(Ã©AWAVAUATUWVSHÂÃ¬HHÂHÂÂŒ$Â°1Ã¶EÂÃHÂÃEÂÃ
-LÂÂ€$ÂžHÂ	HÂD$0Ã¿ÃEÂ
-Ã¿HÂD$8tSAÂEÃ¿LÂ5HÂÂ
-HÂD$(fÂ1ÃEÂ
-Ã­t*fÂÂÂÂÃHÂÃAÂÃ°HÂMEÂ
-ÂAÃ¿ÃA9ÃwÃ€H|$(ÂÃD9ÃŸuÃHÂT$8HÂMLÂD$0HÂÃH[^_]A\A]A^A_IÃ¿Ã fDAWAVAUATUWVSHÂÃ¬H
-+ÂÂŒ$Âž
-+ÂÂŽ$Â°
-+HÂÃHÂÃDÂÂ$Â 
-+DÂÂ$Âš
-+LÂÂ¬$Ã 
-+ÂÃ¿ÂÂÃ¿ÂÂÂÃžÃÂ@v	ÂÃŸÂDÂÂ$Âš
-+MÂÃ®ÃD$4IÂÃ­EÂ
-ÃÂVHÂÃ1Ã­ÃšÂÂ$Â 
-+Â
-ÃÂ'fÂHÂÂ$@E1Ã€Â
-Ã¿IÂÃu
-Ã«=HÂSÂ¶HÂÃHÂSCÂ'IÂÃD9Ã§v!ÂÂÃžtÃÂ
-ÃtÃHÂKÃšCÂ'IÂÃD9Ã§wÃÂ
-Ã¶ÂÃHÂÂ$@LÂt$8LÂÂŒ$Ã
-+AÂÃŸE1Ã€HÂÃHÂÃÃ«@AÂÃIÂÃ0A9ÃŽÂÂ IÂHÂÃÃšÂ
-ÃuÃ D9ÃŠHÂÃ»DÂÃ·LÂt$8Â}HÂÂ$Ã
-+IÂMHÂÃ¿HÂÂ$Ã
-+DÂD$4IÂMFÂ
-Â¢ÂÃªÃ¿MÂ
-Ã¶t*IÂIÂMÃ¿HÂÂ$Ãš
-+DÂD$4ÂÃªIÂMFÂ
-Â Ã¿ÂÃ
-;Â¬$Â 
-+Â
-ÃÃŸÃ¿Ã¿ÂD$4ÂÂ$Âš
-+9T$4Â
-ÂªÃŸÃ¿Ã¿1ÃÃ©ÃŽHÂD$@Â¹HÂD$(HÂ|$(1ÃÂ
-Ã¶Ã³HÂ«ÂÃ§LÂÂ€$Ã
-+ÂÃÂ¿Ã«Â¶RIÂÃ0fÂ<PÂÃ9Ã·ÂÂŸIÂ$LÂŸ2JÂDÃŽ@HÂ
-ÃuÃÂºÂ¹ÃšHÂ
-ÃJÂDÃŽ@ÂIÂ$Ã«ÂŽE1Ã¶MÂ
-Ã­LÂ=tHÂ	Ã¿IÂUIÂÃHÂÃAÃ¿ÃHÂD$8HÂÂ$Ã
-+HÂMHÂAÃ¿ÃHÂÂ$@HÂD$(Â¹@1ÃÂ
-Ã¶HÂÃÃ³HÂ«t/LÂÂ€$Ã
-+ÂÃÂ°ÂIÂ$IÂÃ0Â¶fÂÂT@ÂÃ9Ã°uÃŠÂÂŽ$Âš
-+Â
-Ã¶ÂÃLÂ-E1Ã€HÂÃÃšDÂÂ$Â 
-+EÂ
-ÃÂÂ1Ã¶Ã©ÂHÂSÂŸHÂÃHÂSÂPÃ¿ÂÃºÃŸÂÂHcÃžÂ·Â|@fÂ
-ÃÂ|HÂÂ$Ã
-+Â·ÃEÂÃ HÂMDÂLÂÃŒÂÃ²AÃ¿ÃMÂ
-Ã¶t Â·Â|@HÂÂ$Ãš
-+EÂÃ LÂÃ±DÂLÂÃŒÂÃ²AÃ¿ÃÂÃ;ÂŽ$Â 
-+Â
-ÂÂÃžÂrÃ¿Ã¿Ã¿Â
-ÃÂjÃ¿Ã¿Ã¿HÂKÃšÂPÃ¿ÂÃºÃŸÂpÃ¿Ã¿Ã¿ÂžÃŸÃ¿Ã¿Ã¿HÂÃH
-+[^_]A\A]A^A_ÃDÂÂ$Âš
-+EÂ
-ÃÂLÂ=E1Ã¶IÂÃ¬HÂÃÃšDÂÂ$Â 
-+EÂ
-ÃÂÃ1Ã¶Ã©Ã©ÂHÂCÂŸ8HÂÃHÂCÂGÃ¿=ÃŸÂÃ ÂÂÃžÂ
-ÃHÂSÂŸHÂÃHÂSÂPÃ¿ÂÃºÃŸÂÃHcÃ¿HÂTÃŒ@HÂ
-ÃÂÃHcÃšfÂ<jÂÂµHÂÂ$Ã
-+IÂ
-$HÂAÃ¿ÃHÂDÃŒ@HÂÂ$Ã
-+EÂÃ°IÂ
-$Â·hDÂLÂÃŒÂÃ²Ã¿MÂ
-Ã­t0IÂUIÂ
-$AÃ¿ÃHÂDÃŒ@HÂÂ$Ãš
-+EÂÃ°IÂ
-$Â·hDÂLÂÃŒÂÃ²Ã¿ÂÃ;ÂŽ$Â 
-+ÂÃÂÂÃžÂÃ¿Ã¿Ã¿Â
-ÃÂ
-Ã¿Ã¿Ã¿HÂKÃšÂÃÃ©
-Ã¿Ã¿Ã¿Â
-ÃÂ
-Ã¿Ã¿Ã¿HÂKÃšÃ©
-Ã¿Ã¿Ã¿HÂ\$@HÂÂ³f.ÂHÂ
-HÂ
-ÃtÃšHÂÃH9Ã³uÃªÃ©VÃŸÃ¿Ã¿ÂÂ$Âš
-+1ÃÂ
-ÃÂJÃŸÃ¿Ã¿LÂ=E1Ã¶IÂÃ¬HÂÃ1Ã¶ÃšÂÂ$Â 
-+Â
-ÃÂÃ§1Ã­Ã«(f.ÂHÂSÂ¶HÂÃHÂSÂÂ,@HÂÃ
-9Ã¯v#ÂÂÃžtÃÂ
-ÃtÃHÂKÃšÂÂ,@HÂÃ
-9Ã¯wÃHÂÂ$Ã
-+HÂÂ$@ÃšHÂ8HÂÃ
-ÂÂ®ÃœÃ¿Ã¿HÂÂ$Ã
-+IÂ
-$HÂAÃ¿ÃHÂEHÂÂ$Ã
-+EÂÃ°IÂ
-$Â@DÂ
-ÂÂÃ²Ã¿MÂ
-Ã­t-IÂUIÂ
-$AÃ¿ÃHÂEHÂÂ$Ãš
-+EÂÃ°IÂ
-$Â@DÂ
-ÂÂÃ²Ã¿ÂÃ;ÂŽ$Â 
-+Â
-Ã¿Ã¿Ã¿AÂÃD;ÂŽ$Âš
-+Â
-Ã®ÃŸÃ¿Ã¿1ÃÃ©$ÃœÃ¿Ã¿AÂÃD;Â€$Âš
-+Â
-?ÃŒÃ¿Ã¿MÂ
-Ã¶tLÂÃ±HÂT$8AÃ¿ÃLÂÃ±Ã¿HÂT$(HÂMAÃ¿Ã1ÃÃ©ÃŠÃŒÃ¿Ã¿AÂÃD;ÂŽ$Âš
-+Â
-ÃœÃ¿Ã¿HÂ\$@HÂÂ³fÂHÂ
-HÂ
-ÃtÃšHÂÃH9Ã³uÃª1ÃÃ©Â©ÃŒÃ¿Ã¿HÂ\$@HÂÂ³ÂHÂ
-HÂ
-ÃtÃšHÂÃH9Ã³uÃªÃ©vÃŒÃ¿Ã¿HÂ\$@HÂÂ³fÂHÂ
-HÂ
-ÃtÃšHÂÃH9Ã³uÃªÂžÃœÃ¿Ã¿Ã¿Ã©FÃŒÃ¿Ã¿ATUWVSHÂÃ¬ Â¶HÂÃÂÃtyÂ¶HÂÃHÂ-ÂÃu&Ã«IfÂÂ¶GHÂVÂÃtIÂ¶^HÂÃÂÃt(HÂÃÂŸÃÃ¿ÃAÂÃÂŸÃÃ¿ÃA9ÃtÃA)ÃDÂÃ HÂÃ [^_]A\ÃfÂÂŸÃ1ÃÂŸÃ)ÃHÂÃ [^_]A\ÃÂ¶V1ÃÃ«ÃšÂ¶1ÃÃ«Ã¡fff.ÂAWAVAUATUWVSHÂÃ¬ÂšHÂÂŒ$HÂÂ¬$HÂ
-ÃHÂÂ$Ã°HÂÃLÂÃDÂÂ$ÂÃ®ÂE1Ã­Âš@Â
-WÂšuHÂÂ$Ã°ÃšHÂÂ$Ã°HÂÃÃšÂÂšÂeHÂKHÂL$PÃ¶Ã@ÂºÃD$ttDÂÂÂšDÂÃDÂD$tÂÃªHÂ
-ÂÃµÃ¿Ã¿Â©HÂL$@t
-LÂÂÃLÂD$@Â© HÃD$Ht
-HÂÂÃHÂ\$HÂÃºÃD$XwHÂÂÂÂD$XDÂÂ€$ÃD$\EÂ
-Ã€ÂÃHcD$XÂL$tE1Ã€ÂÃHÃÃ ÂL$|HÂD$`ÂD$XHÂT$`ÂÃÂD$xHÂTÃžHÂHÃÃ HÂÂ$ÂHÂT$8Ã«W@HÂLÂÃ±ÃšÃ±ÃœÃ¿Ã¿Â
-ÃÂ
-}HÂÂ$ ÃÃEÃ¿Ã¿Ã¿DÂ"AÂÃHÂÃ0HÂÃHÂÃ
-HÂD$80D;Â€$Â)EÂ
-Ã­Â
-ÂÂ|$tv Â\$tfÂÂÃLÂ4ÃMÂ
-Ã¶uÂ
-ÂÃ«ÂÃ»wÃ­Â\$|ÂÃ»ÂÃÂÃÂÃÂÃLÂ4ÃMÂ
-Ã¶ÂÃHÂLÂÃ±ÃšMÃœÃ¿Ã¿Â
-ÃÂ\Ã¿Ã¿Ã¿HÂL$HLÂÂ$ÂMÂÃ°HÂT$PHÂL$ HÂÂ$Ã°Ã¿T$@Â
-Ã~{LÂÂ$0AÂÂÂ$ÂLÂÂ$(ÂÃÂÃAÂÂHÂÂ$0LÂÂ$@ÂÂAÂLÂÂ$8ÃEÂÃÂÃAÂÂHÂÂ$@ÂÃ©Ã©ÃŸÃ¿Ã¿HÂR@DÂkHHÂÂ$ÂÃ©ÂÃœÃ¿Ã¿DÃD$\ÂÃÂÃ»Â!Ã¿Ã¿Ã¿ÃD$\ÃŒÃ¿Ã¿Ã¿ÂD$\HÂÃÂš[^_]A\A]A^A_ÃLÂD$HLÂÂ$ÂHÂT$PHÂÂ$Ã°LÂD$ MÂÃ°Ã¿T$@Â
-Ã~HÂÂ$0ÂÃ©#Ã¿Ã¿Ã¿ÂÃ«ÃD$\ÂÃ»ÂÂÃŸÃ¿Ã¿Ã©ÂÃŸÃ¿Ã¿ÂHÂVDÂd$pHÂl$hLÂÂŽ$ÂHÂÃœHÂÃ·HÂ
-ÃIÂÃÂÃE1Ã¿ÂÃÃ«@AÂÃIÂÃE9Ã¯Â0IÂ
-HÂ
-Ãt@ÂÃ¶tLÂÃ¢HÂÃÃšÂ
-ÃtSHÂ
-ÃuÃIÂNHÂ
-ÃtÃ
-LÂD$`ÂD$XJÂ<uHÂT$8HÂÃªÂÃšHÂztÃ²ÂÃžÂ}HÂHÂÃHÂ
-ÃtÂÃšiÃ»Ã¿Ã¿Â
-ÃuÂ
-DE9Ã¯HÂÃŸDÂd$pHÂÃ¯HÂl$hÂÂ£ÃœÃ¿Ã¿IÂ>ÂBIÂ^HÂ
-ÃÂÂHÂHÂÃÃš!Ã»Ã¿Ã¿Â
-ÃÂ
-ÂHÂÂ$ ÃÃEÃ¿Ã¿Ã¿DÂ!Ã©+ÃœÃ¿Ã¿Â|$xÂÂHÂÂ$ÂHÂ<Â
-ÂHÂT$8ÂD$xHÂÃÂÂÃÂÃžÂKÃ¿Ã¿Ã¿HÂÃHÂzÃžtÃ©ÂÃžÂ7Ã¿Ã¿Ã¿AÂÃIÂÃE9Ã¯Â
-ÃÃŸÃ¿Ã¿HÂÃŸDÂd$pHÂÃ¯HÂl$hÃ©ÃŠÃŒÃ¿Ã¿HÂT$HLÂÂ$ÂIÂÃHÂÂ$Ã°HÂT$ HÂT$PÃ¿T$@Â
-ÃÂÃLÂÂ$0ÂÂ$ÂAÂLÂÂ$(ÂÃAÂÂÂALÂÂ$@HÂÂ$0ÂAÂLÂÂ$8ÂÃEÂÃAÂÂHÂÂ$@ÂAÂÃ©*ÃŒÃ¿Ã¿IÂNAÂFHÂ
-ÃÂtUHÂÃšÃ Ã¹Ã¿Ã¿Â
-ÃuEHÂÂ$ ÃEDÂ!LÂÂ$@ÂAÂLÂÂ$8ÂÃÂÃAÂ
-ÂHÂÂ$@ÂÃ©ÃÃ»Ã¿Ã¿AÂFÂÃEÃ«ÃÃD$\Ã©ÃÃ»Ã¿Ã¿HÂÂ$Ã°ÃšHÂÂ$Ã°HÂÃÃšHÂ
-ÃHÂD$PtlÂÃ©vÃºÃ¿Ã¿ÂD$xÃ©ÃÃœÃ¿Ã¿ÂD$xÂÃžÂÂÃŸÃ¿Ã¿Ã©Â¿ÃœÃ¿Ã¿ÂHÂÂ$Ã°E1Ã­ÃšHÂÂ$Ã°HÂÃÃšHÂÂ$Ã°ÃšHÂÂ$Ã°HÂÃÃšHÂD$PHÂ
-ÃÃ¯Ã¿Ã¿ÃD$tHÃD$HÃD$XHÂL$@Ã©aÃºÃ¿Ã¿@AWAVAUATUWVSHÂÃ¬ÂžHÂÂ$ MÂ
-ÃHÂÃHÂÃMÂÃLÂÂ$HÃÂ$ÂHÃÂ$ÂÃÂ$Â€ÂÃÂ$ÂšÃÂ$Â¬tIÃHÂÂŒ$tHÂÂ$HÃHÂ
-ÃÂ<ÂÂšÂ
-ÃHÂÃ¹ÃšHÂÃ¹HÂÃÃšHÂÂ$ÂÂÂšÂÃHÂSÂšHÂÂ$ÂÂÃÂSÂT$|Â©ÃD$xt
-+ÂÂÃÂT$xHÂbÃ¯Ã¿Ã¿Â©HÂT$pt
-HÂÂÃHÂD$pÂN
-ÃÃ¡ÃšHÂ
-ÃIÂÃÂSÂN
-ÃÃ¡ÃšHÂ
-ÃHÂÃ
-ÂÃÂN
-ÃÃ¡ÃšHÂ
-ÃIÂÃÂÃšÂN
-ÃÃ¡ÃšHÂ
-ÃIÂÃ
-ÂOHÂÂ$Â¬DÂN
-LÂFHÂÃHÂÃ¹LÂl$HHÂD$PHÂÂ$ÂšLÂd$8HÂl$(LÂ|$ HÂD$@HÂÂ$Â€HÂD$0ÃšÂ Ã·Ã¿Ã¿ÂÃžÂD$lÂ#|%HÂ
-ÃÂÂÃ¶ÃÂ
-+ÂÂÂÂ
-ÃÂÃŒHÂÂ$ÂHÂ
-ÃtÃšHÂÂ$ÂHÂ
-ÃtÃšLÂÃ¹ÃšHÂ
-Ã­tHÂÃ©ÃšDÂÂ$ÂšEÂ
-ÃÂ
-Ã¥MÂ
-Ã€tLÂÃ¡ÃšMÂ
-Ã­tLÂÃ©ÃšÂD$lHÂÃÂž[^_]A\A]A^A_ÃHÂSÂšHÂÂ$ÂÂ
-?ÃŸÃ¿Ã¿HÂÃ¹ÃšHÂÃ¹HÂÃÃšHÂ
-ÃHÂÂ$ÂÂ^ÂÂšÂ
-%ÃŸÃ¿Ã¿HÂÃ¹ÃšHÂÃ¹HÂÃÃšÂD$|HÂÂÃ­Ã¿Ã¿HÂ
-ÃÃD$xHÂD$pÂ0ÃŸÃ¿Ã¿ÂÃ©Ã±ÃœÃ¿Ã¿MÂ
-Ã¶ttÂVÂ|$|AÂ¹ÂDDL$xHÂÂ$ÂDÂD$|ÂT$(HÂÂ$ÂÂL$ HÂÃ¹HÂD$0ÃšÂ»Ã¬Ã¿Ã¿Â
-ÃÂD$lÂ
-Â³ÃŸÃ¿Ã¿HÂFLÂ|$(HÂÃ¹DÂNDÂHÂD$ HÂÂ$ÂHÂÃšÃ­Ã¿Ã¿HÂÂŒ$ÂD$|tÂÂŒ$Â€ÂÂ
-ÃLÂÃ¹ÃšHÂÃ©ÃšHÂ
-ÃÂÂœÃ·Â
-ÂLÂÃ©ÃšÂÂ©ÂÂ¬ÂÂ$ÂšLÂÂ£Â°ÂÂÂžMÂ
-Ã¶t
-HÂÂ$ÂIÂÂ|$|ÂeÃŸÃ¿Ã¿HÂÂ$ÂHÂÂ$HÂÃ©MÃŸÃ¿Ã¿DE1Ã­E1Ã€ÃD$lÃœÃ¿Ã¿Ã¿Ã©ÃÃœÃ¿Ã¿HÃD$ MÂÃ HÂÂ$ÂHÂÃ¹Ã¿T$pÃ©Ã»ÃœÃ¿Ã¿E1Ã­ÃD$lÃœÃ¿Ã¿Ã¿Ã©Â¡ÃœÃ¿Ã¿HÂÂ$ÂDÂL$xHÂÂ$ÂAÂžHÂÃ¹HÂD$0ÂFÂD$(ÂÂD$ ÃšhÃ«Ã¿Ã¿Â
-ÃÂD$lÂ
-`ÃœÃ¿Ã¿HÂFHÂl$(HÂÃ¹DÂNDÂHÂD$ HÂÂ$ÂHÂÃšÂŽÃ«Ã¿Ã¿Ã©ÃÃŸÃ¿Ã¿ÃD$lÃœÃ¿Ã¿Ã¿Ã©&ÃœÃ¿Ã¿fÂHÂÃ¹ÃšHÂÃ¹HÂÃÃšHÂÃ¹HÂÂ$ÂÃšHÂÃ¹HÂÃÃšHÂÂ$ÂHÂÃ¹ÃšHÂÃ¹HÂÃÃšÂD$|HÂ<Ã«Ã¿Ã¿ÃD$xHÂD$pÃ©Ã Ã»Ã¿Ã¿f.ÂÂÂ$Â¬LÂk0ÂC8ÂÂ$Â€ÂÂÂÃ©WÃŸÃ¿Ã¿LÂÃ©ÃšÂLÂÃ¡ÃšÃ©[ÃŸÃ¿Ã¿ÃD$lÃœÃ¿Ã¿Ã¿Ã©ÃÃŒÃ¿Ã¿AWAVAUATUWVSHÂÃ¬8LÂÂ¬$ÂšHÂÂ$Â°MÂ
-ÃHÂÃIÂÃLÂÃ
-MÂÃHÃÂ$ÃHÃÂ$ÃÃÂ$ÂÃÂ$ÃÂ$
-ÃÂ$(ÃÂ$,HÃÂ$Ã HÃÂ$ÃšHÃÂ$Ã°HÃÂ$ÃžtIÃMÂ
-Ã€tIÃ$HÂ
-ÃÂpÂÂšÂ
-Â¶HÂÃ¹ÃšHÂÃ¹HÂÃÃšHÂÂ$ÂÂÂšÂÂ¥HÂSÂšHÂT$pÂÂ¿ÂSÂT$|Â©ÃD$xt
-+ÂÂÃÂT$xHÂÂÃ©Ã¿Ã¿Â©HÂT$ht
-HÂÂÃHÂD$hE1Ã¿MÂ
-Ã­tAÂEE1Ã¿Ã¶ÃAÂÃLÂÃ±ÃšÂ
-ÃÂÃÂÂÂÃ°HÂÃ8[^_]A\A]A^A_ÃHÂSÂšHÂÂ$ÂÂ
-[Ã¿Ã¿Ã¿HÂÃ¹ÃšHÂÃ¹HÂÃÃšHÂ
-ÃHÂD$pÂÂ®ÂÂšÂ
-AÃ¿Ã¿Ã¿HÂÃ¹ÃšHÂÃ¹HÂÃÃšÂD$|HÂÃ£ÃšÃ¿Ã¿HÂ
-ÃÃD$xHÂD$hÂLÃ¿Ã¿Ã¿ÂÃ©
-Ã¿Ã¿Ã¿fDHÂÂ$,LÂÂ$LÂÂ$HÂÂ$LÂÃ±HÂD$@HÂÂ$(HÂD$8HÂÂ$$HÂD$0HÂÂ$ HÂD$(HÂÂ$
-HÂD$ ÃšÂ
-ÃÂÃÂ
-ÃŒÃŸÃ¿Ã¿EÂ
-Ã¿Â
-Â DÂÂ$
-HÂÂ$Â°ÂÂ$HÂÂ$ÂšAÂÃžv	ÂÃºÂHÂÂ$ÂšLÂÂ$Ã LÂÃ±HÂD$ ÃšÂ
-ÃÂÃÂ7HÃÂ$Â HÃÂ$ÂHÃÂ$ÂHÃÂ$ÂÂÂŒ$
-vÂÂŒ$Â4HÂÂ$Ã HÂ
-Ãt
-ÂÂ$ÃšHÂÂ$ÃšHÂ
-ÃtÃšHÂÂ$Ã°HÂ
-ÃtÃšHÂÂ$ÃžHÂ
-ÃtÃšHÂÂ$ÃHÂ
-ÃtÃšHÂÂ$ÃHÂ
-ÃtÃšHÂÂŒ$Ât
-HÂÂ$ÂÃšHÂÂŒ$Ât
-HÂÂ$ÂÃšDÂÂ$EÂ
-ÃÂ
-ÃHÂÂŒ$Ât
-HÂÂ$ÂÃšHÂÂŒ$Â Â{ÃœÃ¿Ã¿HÂÂ$Â ÃšÃ©iÃœÃ¿Ã¿fÂEÂ
-Ã¿Â
-'ÂÂ$ÃÃ¡ÃšHÂ
-ÃHÂÂ$ÂÂÃÂÂ$ÃÃ¡ÃšHÂ
-ÃHÂÂ$ÂÂÂÂ$ÃÃ¡ÃšHÂ
-ÃHÂÂ$ÂÂwÂÂ$ÃÃ¡ÃšHÂ
-ÃHÂÂ$Â ÂÃ¹HÂÂ$
-HÂÂ$Â DÂÂ$LÂÂ$Ã HÂÃ¹HÂD$PHÂÂ$HÂT$HHÂÂ$ÂHÂD$@HÂÂ$ÂHÂT$(HÂÃHÂD$8HÂÂ$HÂD$0HÂÂ$ÂHÂD$ ÃšÃÃ®Ã¿Ã¿ÂÃžÂÃt*ÂÃ­ÃœÃ¿Ã¿HÂ
-ÃÂt
-ÂÃ¶ÃtÂÂÂÂ
-ÃÂ
-ÃÃœÃ¿Ã¿fÂHÂ
-Ã­tSHÂÂ$ÃÂ|$|AÂ¹DDL$xDÂD$|HÂÃ¹HÂD$0ÂÂ$HÂÂ$ÂÂD$(ÂÂ$ÂD$ ÃšÃÃ€Ã¿Ã¿Â
-ÃÂÃÂ
-qÃœÃ¿Ã¿MÂ
-Ã€ÂD$|tUÂÂŒ$ÂtHHÂÂ$ÃDÂL$xHÂÂ$ÂAÂžHÂÃ¹HÂD$0ÂÂ$ÂD$(ÂÂ$ÂD$ ÃšsÃ€Ã¿Ã¿Â
-ÃÂÃÂ
-ÃœÃ¿Ã¿HÂÂ$ÃHÂÂ$ÂHÂÃ¹DÂÂ$DÂÂ$HÂD$PHÂÂ$ÂHÂT$XHÂÂ$ÂšHÂD$HHÂÂ$ÃHÂT$8LÂÃ²HÂD$@HÂÂ$Ã HÂD$0ÂÂ$
-ÂD$(ÂÂ$ÂD$ Ãš*Ã¥Ã¿Ã¿HÂÂ$ÂÂÃÃšHÂÂ$ÂÃšÂ
-Ã¶HÃÂ$ÂHÃÂ$ÂÂ
-WÃŒÃ¿Ã¿ÂÂŒ$
-vÂÂŒ$Â`EÂ
-Ã¿Â
-ÃºMÂ
-Ã­ÂAÂEÃ¶ÃtÂÂ$,Â
-ÃÂ
-HIÃE0AÃE(HÂÂ$Â ÂÂ$EÂ
-Ã¿ÂÂÂ$HÃBÂBÂÂ$
-ÂBÂÂ$ÂB
-HÂÂ$Ã HÂBt$HÂÂ$ÃšIÂEHÂÂ$Ã°IÂEHÂÂ$ÃžIÂEÂÂ$(Â
-ÃtÂÂ$ AÂMAÂE ÂÂ$$AÂE$HÂ
-ÃÂÃœÃ·ÂHÂÂ$Â HÂC0ÂÂ$
-ÂC8ÂÂ$ÂÂÂÂÂ©ÂÃHÂÂ$ÂÂÂ$HÂÂÂ°ÂÂÂžHÂ
-Ã­t
-HÂÂ$ÃHÂEÂ|$|ÂdÃ¹Ã¿Ã¿HÂÂ$ÃIÂ$Ã©SÃ¹Ã¿Ã¿HÂÂ$ÃšLÂÃ±ÃšÃ©KÃºÃ¿Ã¿ÂHÂÃ¹ÃšHÂÃ¹HÂÃÃšHÂÃ¹HÂÂ$ÂÃšHÂÃ¹HÂÃÃšHÂD$pHÂÃ¹ÃšHÂÃ¹HÂÃÃšÂD$|HÂ?Ã¢Ã¿Ã¿ÃD$xHÂD$hÃ©Â¬ÃžÃ¿Ã¿HÃD$ LÂÂ$ÂHÂÃ¹HÂT$pÃ¿T$hÃ©Ã»Ã¿Ã¿HÂÃÃšÂ
-ÃÂÃÂ
-Â ÃžÃ¿Ã¿DÂÂ$
-ÂÂ$Ã©ÃÃ¹Ã¿Ã¿DÂŸÃœÃ¿Ã¿Ã¿HÃÂ$Â Ã©ÃºÃ¿Ã¿f.ÂÂŸÃœÃ¿Ã¿Ã¿HÃÂ$Â HÃÂ$ÂHÃÂ$ÂÃ©ÃÃ¹Ã¿Ã¿fÂHÂÂ$Ã°LÂÃ±ÃšÃ©ÃÃºÃ¿Ã¿HÂÂ$ÂšÃšÃ©ÂºÃ¹Ã¿Ã¿fÂÂŸÃœÃ¿Ã¿Ã¿HÃÂ$Â HÃÂ$ÂÃ©wÃ¹Ã¿Ã¿ÂŸÃœÃ¿Ã¿Ã¿Ã©mÃ¹Ã¿Ã¿HÂÂ$Â ÃšHÂÂ$ÂÃšÃ©<ÃŸÃ¿Ã¿HÂÂ$Â ÃšÃ©ÃŸÃ¿Ã¿HÂÂ$ÃžLÂÃ±ÃšÃ©Ã±ÃŒÃ¿Ã¿HÂÂ$Â ÂÂ$ÂÂÂ$HÃBÂBÂÂ$
-ÂBÂÂ$ÂB
-HÂÂ$Ã HÂBÃ©lÃœÃ¿Ã¿HÂÂ$ÂšÃšÃ©ÂÃŒÃ¿Ã¿IÂU0MÂE(LÂÃ±ÃšÂ
-ÃÂÂ°ÃŒÃ¿Ã¿ÂÃHÃÂ$ÂHÃÂ$ÂÃ©ÂÃžÃ¿Ã¿ÂÂÂÂÂÂÂÂÂÂÂÂÂ20`pÂ¢	Â
-0
-`
-+p	PÃÃÃ Ã°
-+I
-0
-`
-+p	PÃÃÃ Ã°
-+
-+20`pPÃ
-+
-0
-`
-+p	PÃÃÃ Ã°
-+
-0
-`
-+p	PÃÃÃ Ã°
-+'
-0
-`
-+p	PÃÃÃ Ã°BPÂ»
-ÃÃÃÂÂ 	0 	ÂŽ	HÃ	\X`Ã­pÃ°c ÂNone
--Â Ã£
-"p#Ã$Ãµ$AÃ%ÃºÂÂ"N#ÂÂ"XÂÂ¹#Ã#Ã¹&/"~#Â¢'Ã£i
-Â©&Ã&		&=	
-
-
-+(,
-+)Â²
-+#
-Ã
-e
-$Ã³
-7Âš(Âž*ÃŒ(
-)()*(
-)}+Â+Â«+Ã+b,t,|&Â&Â§&ÂŽ&Ãš(Ã³*(!-Ã®&Ã¶&&4(?)O(Z*j(u-Ã&Ã&Ã(Ã)Y.Â(Â£*Ã(Ã-]/Â»0&18&J&\&n,Â,Â&Â°&Ã&Ãµ&+4+T+t+q
-&~
-& 
-24
-(?
-)O
-(Z
-*g
-(r
--Â¹
-3<2N4Â&Â¢&ÂŽ&Ã2# 48 5Ã!
-
-
-
-
-
-
-
- $
-(
-,0
-4
-8<
-@
-DH
-L
-PT
-X
-\`
-d
-h.fileÃŸÃ¿gcreate.c P 
-Ã 'Ã @Â Y 	 gÃ	 t~` ÂÃ° .textc w.data.bss.xdataÂ .pdatal.rdataÂ¯ÃÃÃªÃ¹   , 8 getc strcmp F free Z f u Â Â Â© Â· Ã
- Ã Ã£ Ã²    0 CAllocColorCreateXImageFreeColorsMSWPutImagePixels.isra.1ParseAndPutPixels.isra.2xpmstrcasecmpCreateColorsCSWTCH.47XpmCreateImageFromXpmImagexpmParseDataAndCreate__imp_SelectObject__imp_SetPixel__imp_CreateCompatibleDC__imp_DeleteDC__imp_tolowerXParseColorXAllocColorXCreateImageXFreeColorsxpmNextStringboundCheckingCallocxpmHashSlotXDefaultScreenXDefaultVisualXDefaultColormapboundCheckingMallocXDestroyImageXDefaultDepthxpmParseHeaderxpmParseValuesxpmParseColorsxpmFreeColorTablexpmGetCmtxpmHashTableInitxpmHashTableFreexpmParseExtensions
-+CrIFrBuf.o/     1346471169  0     0     100666  1452      `
-+dÂ0.text`Ã|
- P`.data@PÃ.bssÂPÃ.xdata(<@0@.pdatadÃŽ@0@AVAUATUWVSHÂÃ¬Ã HÂÂŽ$@HÂÂŒ$ÃHÂÂ$ÂHÂÃIÂÃMÂÃ
-MÂÃHÂÃ¹ÃšHÂÃÃšHÂ
-Ã¶ÃD$@LÂd$PÃD$\tqHÂÃ±ÃšHÂÃ²HÂÃÃšHÂT$@HÂÃ©MÂÃ±MÂÃšHÂt$0HÂ\$(HÂ|$ ÃšÂ
-ÃÂÃ
-xIÂÃHÂÃºHÂÃ±ÃšHÂÃÃšHÂÃ¹ÃšÂÃšHÂÃÃ [^_]A\A]A^Ã@HÂT$@HÂÃ©MÂÃ±MÂÃšHÃD$0HÃD$(HÂ|$ ÃšÂÃ
-Ã«Â²fÂWVSHÂÃ¬`LÂÃHÂÃHÂÃHÂÃÃšHÂÃ¹ÃšHÂL$ IÂÃžHÂÃ²ÃD$ HÂ\$0ÃD$<ÃšHÂÃ`[^_ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ	\
-+0	`pPÃÃÃ 
-+
-+L0`pÃŸS9AcnÂÂ€Â¬ÂŽÃ¶D
-
-
-.fileÃŸÃ¿gCrIFrBuf.c 
- .textS
-.data.bss.xdata(.pdata9 I X j y Â Â  Â¯ Â¿ ÃXpmCreateImageFromBufferXpmCreateXpmImageFromBufferxpmInitXpmImagexpmInitXpmInfoxpmInitAttributesxpmSetInfoMaskxpmParseDataAndCreatexpmSetAttributesXpmFreeXpmInfoXpmFreeXpmImagexpmParseDataCrIFrDat.o/     1346471169  0     0     100666  1576      `
-+dÂÂ°.textÃ ÃÃŒ
- P`.data@PÃ.bssÂPÃ.xdata(ÂŒ@0@.pdataÃ€t@0@AVAUATUWVSHÂÃ¬Ã HÂÂŽ$@HÂÂŒ$ÃHÂÂ$ÂHÂÃIÂÃMÂÃ
-MÂÃHÂÃ¹ÃšHÂÃÃšIÂ$HÂ
-Ã¶ÃD$@LÂd$HÃD$XÃD$\HÃÂ$hHÂD$PHÃÂ$`ÃÂ$qÃÂ$pÃÂ$ttmHÂÃ±ÃšHÂÃ²HÂÃÃšHÂT$@HÂÃ©MÂÃ±MÂÃšHÂt$0HÂ\$(HÂ|$ ÃšÂ
-ÃÂÃ
-xIÂÃHÂÃºHÂÃ±ÃšHÂÃÃšHÂÃ¹ÃšÂÃšHÂÃÃ [^_]A\A]A^ÃHÂT$@HÂÃ©MÂÃ±MÂÃšHÃD$0HÃD$(HÂ|$ ÃšÂÃ
-Ã«Â¶fÂWVSHÂÃ¬`LÂÃHÂÃHÂÃHÂÃÃšHÂÃ¹ÃšHÂHÂL$ IÂÃžHÂÃ²ÃD$ HÂ\$(ÃD$8ÃD$<HÂD$0HÃÂ$HHÃÂ$@ÃÂ$QÃÂ$PÃÂ$TÃšHÂÃ`[^_ÃÂÂÂÂÂÂÂÂÂÂ	\
-+0	`pPÃÃÃ 
-+
-+L0`p>@Ã9AÂ§Â²ÃÃšÃ°Ãž6W_Ã
-
-
-.fileÃŸÃ¿gCrIFrDat.c @ .textÃ
-.data.bss.xdata(.pdata5 E T f u Â Â Â« Â» ÃXpmCreateImageFromDataXpmCreateXpmImageFromDataxpmInitXpmImagexpmInitXpmInfoxpmInitAttributesxpmSetInfoMaskxpmParseDataAndCreatexpmSetAttributesXpmFreeXpmInfoXpmFreeXpmImagexpmParseDatadata.o/         1346471169  0     0     100666  5509      `
-+dÂÂ!.textÃ°
-$. P`.dataÃŽ
-Ã°@`Ã.bssÂPÃ.xdata|ÃŽ
-@0@.pdataTpÃ@0@.rdata`Ã@P@AUATUWVSHÂÃ¬(Â9IÂÃÂmHÂÂ© LÂi HÂYLÂÃ¯Â¶EÂA HÂÃHÂÃÃšÂÂ¶UÂÃŸD)Ã®ÂÃDÂŸÃA9ÃÂ
-NHÂÃ
-AÂÃžÃ¿tÂÃuÃAÂÃÂÃÂ
-ÃEÂL$ LÂÃ­1Ã¶fDIÂÂŒ$(8tDAÂÃžÃ¿uÃ«<HÂÃªÂÃÂB8HÂjt+ÂÃžÃ¿t&HÂÃÃšÂÃŸÃ¿uÃLÂÃªÂŸÂB8HÂjuÃAÂt$
-HÂÃÃšÂÃŸÃ¿ÂÂÂÃHÂÃªHÂÃHÂjÂBÂ¶ÂÃDÂŸÃA9ÃuxÂÃžÃ¿tÂÃuÃÂÃÂ
-gÃ¿Ã¿Ã¿ÂŸÃHÂÃÃš1ÃHÂÃ([^_]A\A]ÃÂ
-Ã¶uÃ«Ã«ÂÂ¶OÃ¿HÂÃ¯ÂŸÃHÂÃÃšÂÃ®uÃš1ÃHÂÃ([^_]A\A]ÃfÂLÂÃªÂŸÃ©rÃ¿Ã¿Ã¿AÂÃÃ«ÂLÂÂ LÂQ AÂ¶ÂA 1ÃÂIÂL$DÂHÂ¶HÂÃIÂL$AÂTAÂ¶L8ÃÂ
-ÃšHÂÃÂÃuÃAÂT$ MÂÃ1ÃMÂÂ$(A:tJÂÃuÃ«DLÂÃÂÃÂÃLÂIÂQt0A8t+IÂL$Â¶HÂÃ=Ã¿IÂL$uÃLÂÃÂÃÂžLÂIÂQuÃAÂD$
-Ã«%ÂÂÃLÂÃIÂÃLÂIÂQAÂ¶8Ãu'ÂÃt3IÂL$Â¶HÂÃ=Ã¿IÂL$uÃLÂÃÂžÃ«ÃÂÂÃÂ
-RÃ¿Ã¿Ã¿ÂIÂl$1ÃHÂÃ([^_]A\A]ÃAÂÃAÂÃÃ©ÂžÃœÃ¿Ã¿ÂÃÂÃ¿Ã¿Ã¿M)L$Ã©bÃŸÃ¿Ã¿fffff.ÂVSHÂÃ¬(ÂHÂÃÂ
-ÃÂÃÂÃžÂÃ€ÂÂ¹1HÂqÂ
-ÂÂÂ»0uZHÂÂ» u1ÃHÂÃ([^ÃÂHÂÃÃšÃÃŒÃ¿Ã¿HÂÃ±ÃšHÂÂ ÂŸ9ÃtÃ¢HÂÃ²ÂÃÃš1ÃHÂÃ([^ÃHÂÃÃšÂ§ÃŒÃ¿Ã¿ÂHÂÃ±ÃšÂŸÂ09ÃtÂÂÃžÃ¿tÂHÂÂ HÂ
-ÃtÃÂŸ9ÃuÃÃ«ÃHÂÃ±ÃšÂŸÂ19ÃÂVÃ¿Ã¿Ã¿ÂÃžÃ¿uÃ€Ã©LÃ¿Ã¿Ã¿ÂAHÂQÂÃÂAHÂÃHÂA1ÃHÂÃ([^ÃÂÂ¶Â1ÂÃtHÂCÂÂ¶HÂÃHÂCÂÃt8ÃuÃ­ÂÂ»0uOHÂÂ HÂ
-ÃÂÃ¿Ã¿Ã¿HÂCÂ¶Ã«HÂÃÃšÃ£Ã»Ã¿Ã¿HÂCHÂÂ Â¶Â¶LÂ@LÂC8ÃtÃHÂCÃ©ÃÃŸÃ¿Ã¿HÂÃÃšÂµÃ»Ã¿Ã¿HÂCÂÂ¶HÂÃHÂCÂÃÂÂ­ÃŸÃ¿Ã¿:Â0ÂÂ¡ÃŸÃ¿Ã¿HÂÂ HÂ
-ÃtÃ8uÃÃ«Ãffffff.ÂAWAVAUATUWVSHÂÃ¬(ÂHÂÃHÂÃEÂÃÂÃžÂÂ
-Ãt{LÂiLÂ5LÂÃ©ÃšÂÃžÃ¿ÂÃÂÃÂÃ¬AÃ¿ÃÂ
-Ãt
-ÂŸÂ19Ã²uÃE1Ã€Ã«.ÂÂÃŸÃ¿t/ÂŸÂ19Ã°t$E9ÃŒsBÂt%LÂÃ©IÂÃÃšÂÃÂÃAÃ¿ÃÂ
-ÃDÂÃ§tÃLÂÃªÂÃ±ÃšÃ©~HÂCLÂ5Ã«ÂŸÂ1HÂFD9Ã¢tHÂCDÂ¶(HÂÃEÂŸÃ¥DÂÃ¡AÃ¿ÃÂ
-ÃuÃ1Ã¿Ã«
-ÂŸÂ1D9Ã¢t0HÂsÂÃDÂ¶.EÂŸÃ¥HÂÃDÂÃ¡HÂsDÂmHÂÃ
-AÃ¿ÃÂ
-ÃuÂGD9ÃžrÃHÂkÂÃžHÂÃ([^_]A\A]A^A_ÃAÃ¿ÃÃ©
-Ã¿Ã¿Ã¿@SHÂÃ¬ AÂžHÂÃHÂT$ ÃšÂ¥ÃŸÃ¿Ã¿HÂL$ IÂÃÂÃÃšHÂÃ [Ãffff.ÂAWAVAUATUWVSHÂÃ¬8ÂHÂÃIÂÃLÂÂ$ÂÂÃžÂ
-Â€HÂnHÂ
-Ã­ÂÃÂŸEÂ
-ÃÂÃ§ÂŸÂ19ÃÂÃHÂÃ«Ã«
-Â9ÃtHÂÃHÂ^ÂŸÂ
-ÃuÃ­)Ã«DÂcDÂÃ¡ÃšHÂ
-ÃHÂÃÂÂ±EÂÃ HÂÃªHÂÃÃšÂÂ
-Ãu$HÂÂ$ÂIÂ>DÂ 1ÃHÂÃ8[^_]A\A]A^A_ÃÃÃ«ÃDÂ
-ÃÂTÃ¿Ã¿Ã¿HÂiHÂÃ©ÃšÂÃÂžÃŸÃ¿Ã¿Ã¿ÂÃ»Ã¿tÃÂ¹ÃšHÂÃÂŸÂ19ÃÂÂLÂd$0E1Ã¿E1Ã­fÂAÂ
-$HÂÃ©AÂÃ
-ÃšÂÃžÃ¿ÂÃtZÂŸÂ19ÃtOIÂÃAÂÃœuÃEÂÂ¯HÂÃ¹DÂÃªÃšHÂ
-ÃIÂÃÂÂ­JÂ
-8HÂT$0AÂžLÂÃ§EÂÃ¯LÂd$0ÃšE1Ã­Ã«ÂÂÃ»Ã¿ÂÂ®EÂÃ©EÃ¹u
-ÃAÂŒHÂÃªÂÃÃšÃ©Ã§ÃŸÃ¿Ã¿fDEÂaHÂÃ¹DÂL$(DÂÃ¢ÃšHÂ
-ÃHÂÃDÂL$(t9DÂÃ¹HÂT$0EÂÃšHÃDÂL$(HÂÃ·ÃšDÂL$(BÃÃ«Â£Â1Ã¿E1Ã€Ã©ÂÃŸÃ¿Ã¿HÂÃ¹ÃšÂžÃœÃ¿Ã¿Ã¿Ã©Â
-ÃŸÃ¿Ã¿Â¹AÂŒ1ÃÃ©>ÃŸÃ¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Ã©iÃŸÃ¿Ã¿HÂÃ¹ÃšÂžÃŸÃ¿Ã¿Ã¿Ã©WÃŸÃ¿Ã¿fDVSHÂÃ¬(HÂÃÂHÂÃÂ
-ÃtÂI
-Â
-Ãu1ÃHÃHÂÃ([^ÃÂÂÃÃšLcC
-HÂS HÂHÂÃÃšHcC
-HÂÃ1ÃÃC
-HÂÃ([^Ãf.ÂATUWVSHÂÃ¬ DÂE1Ã€HÂÃEÂ
-ÃuDÂÃ HÂÃ [^_]A\Ã@HÂl$ AÂžÃÂ0ÃÂ1
-+HÃÂ(HÃÂ HÂÃªÃšIÃ»Ã¿Ã¿ÂÃžAÂžÂ*HÂÃªHÂÃÃš/Ã»Ã¿Ã¿ÂÃžÂÃÂÃžÂ
-dHÂ5Â¹HÂÃ¯AÂŒÃŸÃ¿Ã¿Ã¿Ã³ÂŠÂÃÂÃ8ÃÂ
-cÃ¿Ã¿Ã¿HÂÃªHÂÃAÂžÃšÃ§ÃºÃ¿Ã¿HÂ
-1Ã1Ã¶HcÃžLÂ%@HÂ
-ÃÂ
-ÂfÂÃÂ4HÂ
-ÃÂÃŽÂ
-Ã¶ÂÂHcÃ¶HÂÂÂ4HÃÃŠHÂD0HÂÂ HÂHÃÂ
-ÃHÂHÂÂ(ÂÃ«HÂÃE1Ã€ÃšÂÃžÃ¿Ã¿Ã©ÃÃŸÃ¿Ã¿fÂIÂÃ@ÂÃIÂL$ÃHÂ
-ÃÂ{IÂÃžHÂÃªÃšÂ
-ÃuÃHcÃHÂHÃÃ HÂÃ©UÃ¿Ã¿Ã¿DHÂ5Â¹HÂÃ¯Ã³ÂŠÂ
-Â¿ÃŸÃ¿Ã¿HÂÃªHÂÃAÂŒÃŸÃ¿Ã¿Ã¿ÃšÃšÃ¹Ã¿Ã¿Â
-ÃÂKÃŸÃ¿Ã¿HcÃ°Âº_HÂÃ©ÃD4 ÃšHÂ
-ÃHÂÃÂ*ÃŸÃ¿Ã¿H)Ã
-ÂžHÂ
-.HÂ5HÂÃ¹HOÃH9ÃÃ³ÂŠÂ
-ÃŸÃ¿Ã¿ÃÂ4HÂ@ÂŸÃ©ÃÃŸÃ¿Ã¿Â¶FÃÂ1HÂÃE1Ã€ÂÂ0ÃšÂ¢Ã·Ã¿Ã¿Â¶F	ÂÂ1Ã©ÂŸÃœÃ¿Ã¿HÂ5Â¹HÂÃ¯AÂŒÃŸÃ¿Ã¿Ã¿Ã³ÂŠÂÃÂÃ8ÃÂ
-ÂÃœÃ¿Ã¿HÂ@ÂŸÃ©ZÃŸÃ¿Ã¿f.ÂHÂHÂÃE1Ã€HÂÂ HÂHÂÂ(Ãš)Ã·Ã¿Ã¿Â¶ÂÂ0Â¶ÂÂ1Ã©5ÃœÃ¿Ã¿f.Â1ÃÃ©Ã¹ÃœÃ¿Ã¿AÂŒÃŸÃ¿Ã¿Ã¿Ã©ÃœÃ¿Ã¿ÂÂÂÂÂÂÂÂÂÂÂÂÂÂ
-
-+
- #""&)7?CH
-""
-JQV
-
-B0`pPÃÃB0`	B
-0
-`
-+p	PÃÃÃ Ã°D0
-+G
-0
-`
-+p	PÃÃÃ Ã°B0`
-
-D0`pPÃÃÃÂÂÃ Ã8jDpÃ\Ã Ã¢
-h#define_formatXPMXPM2!
-+C/**/,
-+static char *[] = {
-+};
-+Lisp;(setq  '(
-+))
-+9Â®Ã O,DdÂÂ¿Ã*:Ã¶ÂÂ§
-Ã°<m
-Â
-ÃÃ 
-
-.
-\
-Â€Â·
-v	Â¬	
-Âº	
-Ã±	
-
-+
-\
-+j
-+
-Â
-+Ã
-+ Ã 
-+
-
-C
-h
-
-Â
-
-Â
-
-Âª
-
-Â·
-
- (08@HP`hpxÂÂÂÂ ÂšÂ°Âž
-+
-+
-
-+
-+
-+
-
-+ $
-+(
-+,0
-+4
-+8<
-+@
-+DH
-+L
-+P.fileÃŸÃ¿gdata.c Ã Â +Ã 5 Bp LÃ  .textÃ¢
-..data.bss.xdata|.pdataT.rdataZ[hgetc ungetc xpmatoui v strncpy Â free strncmp strrchr ÂParseCommentxpmNextStringxpmNextWordxpmNextUIxpmGetStringxpmGetCmtxpmParseHeaderxpmDataTypes__imp_isspaceboundCheckingMallocboundCheckingRealloc
-+hashtab.o/      1346471170  0     0     100666  1598      `
-+dÂÂ.textÂÃÃ P`.data@PÃ.bssÂPÃ.xdata8\@0@.pdata0Â
-+
-@0@ATUWVSHÂÃ¬ Â¶2HÂyIÂÃ@ÂÃ¶t|AÂÃ°1ÃfÂAÂÃEÂŸÃHÂÃAÃÃ¡EÃA)ÃDÂÃDÂ¶EÂÃuÃÂ	1ÃÃ·Ã±ÂÃHÃÃ£HcÃHÃ»HÂlÃÃžÃ«fDHÂÃ«H9ÃHGÃHÂHÂ
-ÃtHÂ@81uÃ¥LÂÃ¢ÃšÂ
-ÃuÃHÂÃHÂÃ [^_]A\ÃÂ	1ÃÃ«Â²DAUATUWVSHÂÃ¬(E1Ã­HÂÃHÂÃLÂÃÃšCÃ¿Ã¿Ã¿HÂ8HÂÃ
-tDÂÃšHÂÃ([^_]A\A]Ãf.ÂÂ¹ÃšHÂ
-ÃÂÂ°HÂ0HÂxHÂEÂC;C}
-+ÂÃÂCÃ«ÂžfÂÂ+ÂºVUUULÂcAÂœÃœÃ¿Ã¿Ã¿Ât-ÂÃ©ÃÃ¡ÂÃ°Â3Ã·ÃªÂÃ°ÃÃž)ÃÂSÃšHÂ
-ÃtÂHcÃ¶HÂCHÂÃ°H9ÃsHÂÃªH9ÃHÃrÃ°Â
-Ã­~'1Ã¶fDIÂ<ÃŽHÂ
-Ã¿tHÂHÂÃÃš|ÃŸÃ¿Ã¿HÂ8HÂÃ9ÃµÃ¡LÂÃ¡E1Ã­ÃšÂCÃ©#Ã¿Ã¿Ã¿HÃEAÂœÃœÃ¿Ã¿Ã¿Ã©Ã¿Ã¿Ã¿f.ÂSHÂÃ¬ ÃÃAUHÂÃÃAÂ¹ÃšHÂ
-Ãt1HcHÂÃH9ÃsfÂHÂÃªH9ÃHÃrÃ°HÂC1ÃHÂÃ [ÃÂžÃœÃ¿Ã¿Ã¿Ã«Ã³ffff.ÂWVSHÂÃ¬ HÂqHÂÃHÂ
-Ã¶t2HcHÂ
-ÃH9ÃsHÂÃ«HÂ
-HÂ
-ÃtÃ¯ÃšH9ÃrÃªHÂÃ±ÃšHÃGHÂÃ [^_ÃÂÂÂ
-+
-+20`pPÃ
-
-B0`pPÃÃ2020`pÂÂ Â¶Ã#$0},ÃŠ;ÂÃ¢\i
-
-
-
- 
-$(,
-.fileÃŸÃ¿ghashtab.c Â  
-Ã /0 .text}.data.bss.xdata8.pdata0
-strcmp @ free TxpmHashSlotxpmHashInternxpmHashTableInitxpmHashTableFreeboundCheckingMallocImage.o/        1346471170  0     0     100666  792       `
-+dÂÂ°.text`Ã` P`.data@PÃ.bssÂPÃ.xdata
-<@0@.pdataHt@0@ÃA
-HÃAHÃAÃÂSHÂÃ¬ HÂÃHÂIHÂ
-ÃtÂS
-ÃšHÂKHÂ
-ÃtÃšHÃCHÂÃ [ÃÂÂÂÂÂÂÂÂÂÂÂ20 U5C
-
-
-.fileÃŸÃ¿gImage.c   .textU.data.bss.xdata
-.pdata$ free 6xpmInitXpmImageXpmFreeXpmImagexpmFreeColorTableInfo.o/         1346471170  0     0     100666  1220      `
-+dÂ .text`ÃÂ P`.data@PÃ.bssÂPÃ.xdata<@0@.pdata0PÂš
-@0@HÂ
-Ãt'HÃAHÃAHÃAHÃA0ÃA(Ã³ÃfÂSHÂÃ¬ HÂ
-ÃHÂÃtVÂÃ¶ÃtDHÂIHÂ
-Ãt
-ÃšHÃCHÂKHÂ
-Ãt
-ÃšHÃCHÂKHÂ
-Ãt
-ÃšHÃCÂÃ¶ÃuÃHÂÃ [ÃÂÂS(Â
-ÃtÃŠHÂK0ÃšHÃC0ÃC(Ã«Ãffffff.ÂÂÃÃ¶ÃtÃÃ¶ÃtÂ	Ã³ÃÂÃÃ¶Ãt$LÂBxÃÂLÂALÂÂÂLÂALÂÂÂLÂAÃ¶ÃtLÂB`Â	LÂA0DÂBXDÂA(ÂštÂB$Â	ÂA ÂB(ÂA$Ã³ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ20.0ÃÃÃ°
-Ã°QNdzÂ¬
-
-
-
- 
-$(,
-.fileÃŸÃ¿gInfo.c 0 "Ã 1Ã° .textQ.data.bss.xdata.pdata0
-free < NxpmInitXpmInfoXpmFreeXpmInfoxpmSetInfoMaskxpmSetInfoXpmFreeExtensionsmisc.o/         1346471171  0     0     100666  1378      `
-+dÂÃ.textÃ	 P`.data@PÃ.bssÂPÃ.xdata@0@.pdata0
-
-@0@.rdataÂDÂ@P@1ÃÂ
-ÃtMDÂ¶	EÂQÃAÂÃº	w?E1ÃÃ«ÂDÂ¶IHÂÃEÂYÃAÂÃ»	w
-ÂÂAÂÃEÂŸÃA9ÃAÂDAÃuÃAÂÂžÃ1ÃÃ³Ãff.ÂHÂQÂÃÂÃ¹wHÂdHcÂHÃÃ¿Ã ÂHÂÃ³ÃÂHÂÃÂHÂBÃÂHÂ6ÃÂHÂ'ÃÂHÂÃÂÂžÃvÃf.ÂÃ©ÂÂÂÂÂÂÂÂÂÂÂU`ÃÃ ÃŠÃ°Ãµ
-XpmColorErrorXpmSuccessXpmOpenFailedXpmFileInvalidXpmNoMemoryXpmColorFailedInvalid XpmErrorÂ€ÂžÃÃ ÂÂšcrÂÂÂ£Â³ÃÃÃ±
-
-
-
- 
-$(,
-dhlptx.fileÃŸÃ¿gmisc.cxpmatoui ` Ã  XpmFreeÃ° .textÃµ	.data.bss.xdata.pdata0
-.rdata|free (XpmGetErrorStringXpmLibraryVersionRdFToBuf.o/     1346471171  0     0     100666  1341      `
-+dÂD.textÂÂž
- P`.data@PÃ.bssÂPÃ.rdataÂ@P@.xdataÂ@0@.pdata
-Â¬&@0@AVAUATUWVSHÂÃ¬ÂAÂœÃ¿Ã¿Ã¿Ã¿HÃHÂÃ1ÃÃšÂ
-ÃÂÃÂÃ¬HÂT$ ÂÃÃ¿D9ÃšÂÃ«ÂT$ Â
-ÃÂT$`Â·T$$fÂT$dÂ·T$&fÂT$fÂ·T$(fÂT$hÂ·T$*fÂT$jÂ·T$,fÂT$lÂT$0ÂT$pHÂT$8ÂÃÂT$tHÂT$@HÂT$xHÂT$HHÂÂ$ÂHÂT$PHÂÂ$ÂÂ
-ÂHÂÂÃÃ¿HÂ
-ÃHÂÃÂÂÂOÃšHÂ
-ÃHÂÃtLcÃ§IÂÃ±ÂºMÂÃ HÂÃÃšHÂÃ±IÂÃÃšD9Ã·uBBÃ#E1Ã­HÂ]DÂÃšHÂÃÂ[^_]A\A]A^ÃHÂT$`Â¹1ÃHÂÃÃ³HÂ«ÂÃAÂœÃ¿Ã¿Ã¿Ã¿ÃšÃ«ÃHÂÃÃš@Ã«ÂŒÂÃÃšÃ«Â³HÂÃ±AÂœÃœÃ¿Ã¿Ã¿ÃšÃ«Â£ÂÂÂÂÂr	
-+0	`pPÃÃÃ {$;Ã
-+ÃÃ ÃŸ	NXeu
-.fileÃŸÃ¿gRdFToBuf.c .text{
-.data.bss.rdata.xdata.pdata
-'open 5 fread fclose close free IXpmReadFileToBuffer__imp__fstat64__imp__fdopenboundCheckingMalloc
-+RdFToDat.o/     1346471171  0     0     100666  851       `
-+dÂÂª.textpÃd P`.data@PÃ.bssÂPÃ.xdata
-L@0@.pdata
-XÂ@0@SHÂÃ¬ÂHÂ
-ÃHÂÃÃD$0tHÃLÂD$0HÂT$pÃšÂ
-Ãu.LÂD$0HÂT$pHÂÃÃšHÂL$pÂD$(ÃšHÂL$0ÃšÂD$(HÂÃÂ[ÃÂÂÂÂÂÂÂ0i*@NX
-+.fileÃŸÃ¿gRdFToDat.c .texti.data.bss.xdata
-.pdata
- , F V eXpmReadFileToDataXpmReadFileToXpmImageXpmCreateDataFromXpmImageXpmFreeXpmImageXpmFreeXpmInfo
-+RdFToI.o/       1346471172  0     0     100666  2495      `
-+dÂ<#.text Ã P`.data@PÃ.bssÂPÃ.rdata0$@P@.xdata<T@0@.pdata0ÂÃ
-@0@UWVSHÂÃ¬(HÂ
-ÃHÂÃHÂÃÂÃÃšÂÃž<HÂHÂÃ©ÃšHÂ
-ÃHÂCÂÂÃÃC
-1ÃHÂÃ([^_]ÃDHcÃHÂ5Â¹HÂ|ÃŸÃ³ÂŠt]ÂÃžtÂ§HÂ|ÃœHÂ5Â¹Ã³ÂŠuÂHÂ
-ÃIÂÃšHÂL$ ÃšHÂHÂL$ Ã¿HÂ
-ÃHÂCÂ
-{Ã¿Ã¿Ã¿ÂžÃ¿Ã¿Ã¿Ã¿Ã©zÃ¿Ã¿Ã¿ÃIÂÃšHÂÃ«Â»fÂÃ¿ÃHÂCÃ©AÃ¿Ã¿Ã¿ff.ÂSHÂÃ¬0ÂÃ¹t
-ÂÃ¹t1HÂÃ0[ÃHÂHÂT$(Ã¿HÂT$(H9ÃtÃ¢HÂ
-+HÂÃ0[Ã©fDHÂ
-+HÂHÂÃ0[HÃ¿Ã fffff.ÂATUWVSHÂÃ¬Ã HÂÂ$0HÂÃHÂÂ$ÃHÂÃLÂÃ
-MÂÃÃšHÂÂ$ÂÃšHÂT$@HÂÃ¹ÃšHÃŸÃ¿Ã¿Â
-ÃÂÃÂ
-ÂHÂ
-ÃÂÂ¥HÂÃÃšHÂÂ$ÂHÂÃÃšHÂÂ$ÂHÂT$@MÂÃ¡IÂÃšHÂÃ±HÂ\$0HÂD$(HÂÂ$ÃHÂD$ ÃšÂ
-ÃÂÃxLÂÂ$ÂHÂÂ$ÃHÂÃÃšHÂÂ$ÂÃšÂL$@HÂT$HÃšÃÃŸÃ¿Ã¿HÂÂ$ÃÃšÂÃžHÂÃÃ [^_]A\ÃDHÂÂ$ÃHÂT$@MÂÃ¡IÂÃšHÂÃ±HÃD$0HÃD$(HÂD$ ÃšÂÃÃ«Âf.ÂWVSHÂÃ¬pLÂÃHÂÃHÂÃHÂÃÃšHÂÃ±ÃšHÂT$0HÂÃ¹Ãš ÃœÃ¿Ã¿Â
-Ãu&HÂL$0IÂÃ°HÂÃÃšÂL$0HÂT$8ÂD$(Ãš
-+ÃŸÃ¿Ã¿ÂD$(HÂÃp[^_ÃÂÂÂÂÂÂÂÂÂÂÂ.Zuncompress -c "%s"r.gzgunzip -qc "%s"
-
-E0`pPR0
-
-\0`pPÃ
-+
-+N0`pbpÂŠÂ°,'
-/f
-Â
-
-Â
-ÂšÂ¯
-ÂºÃ¡
-Ã²/VÂÂ§Ã
-Ã
-
-/< W!Â
-ÃÃÃ°"F
-
- $(,.fileÃŸÃ¿gRdFToI.c  %p 8Â° .text.data.bss.rdata,.xdata<.pdata0
-N[lstrlen fopen sprintf fclose z Â Â Â« Âº Ã Ã¡ Ã°  
-OpenReadFilexpmDataClose.isra.0XpmReadFileToImageXpmReadFileToXpmImage__imp__popen__imp___iob_func__imp__pclosexpmInitXpmImagexpmInitXpmInfoxpmInitAttributesxpmSetInfoMaskxpmParseDataAndCreatexpmSetAttributesXpmFreeXpmInfoXpmFreeXpmImagexpmParseData
-+rgb.o/          1346471172  0     0     100666  9826      `
-+dÂ $.textÃ
-
- P`.dataÃÃÂÃª@`Ã.bssÂPÃ.xdata(Â@0@.pdata0ÂŒÂš#
-@0@.rdata Ã¬@P@ÂžÃªÃf.ÂSHÂDÂ\$01ÃÃ«ÂÃHÂÃÂÃºÃªt2ÂDÂ¶ÃE9ÃuÃŠÂ¶ÃD9ÃuÃÃÃ©Â¶ÃD9ÃuÃHcÃHÂHÃÃ¢HÂ[Ã1Ã[Ãf.ÂAWAVAUATUWVSHÂÃ¬(HÂÃLÂÃLÂÂ$ÂÃšÂº HÂÃIÂÃ
-ÃšHÂ
-Ãt(Â8tÃ¶Â¶PÂHÂÃÂÃuÃ²Âº LÂÃ©ÃšHÂ
-ÃuÃAÂ¶MLÂÃ¯HÂ-ÂÃtÂŸÃÃ¿ÃÂHÂÃÂ¶ÂÃuÃ®HÂLÂÃ©ÃšHÂ
-ÃtÃ@aAÂŒÃ©1Ã­LÂ=Ã«
-+fÂÂoD9Ã¥3BÂD%LÂÃ©ÂÃÃÃ¯ÃÃÃ¿LcÃ·IÃÃŠMÃŸIÂÃšÂÃžtC}ÃDÂgÃ¿D9Ã¥~ÃHÂÂ$ÂÃÃ¿LÂÃ©ÃÃÃšÂžHÂÃ([^_]A\A]A^A_ÃAÂFLÂÃ©Â¶ÃÂÂ¶ÃÃÃšÂHÂÂ$ÂÂ¶ÃÂÃšÃ«ÃDÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÃ°ÃžÃ¿ÃºÃ«Ã
-2Â¿Ã'Ã°Ã¿Ã¿-ÃµÃµÃ3Ã¿Ã€Ã:@Ã¿Ã«ÃOÃ¿TÂ+Ã¢_Â¥**eÃÂžÂo_ÂÂyÃ¿ÂÃi
-ÂÃ¿rVÂ""ÂÂ£Ã¿ÃžÃÂ¬Ã¿Ã¿Â±ÂžÂ
-Â¿V-ÃÂœÂ·kÃUV/Ã¢Ã¿ÂÃ­Â ÂÃžÃ©ÂzÂÂŒÂ8Kf
-/OO,ÂŠÂŠ:ÂÃEÃ¿ÂNÂ¿Ã¿ZTTTb
-ÂÃ¿mÂ##wÃ¿ÃºÃ°ÂPÂiÂÃÃÃÂÃžÃžÃ¿Â€ÃÂªÂ©Ã¯ÃÂÂ³~~~ÂžÂŸÃÃÃ¿Ã¿Ã¿Ã
-
-
-ÃÃ¡!!!Ãš$$$Ã¯&&&Ã¶)))Ãœ+++...
-000333666&888-;;;4===;@@@BBBBIEEEPGGGWJJJ^dMMMkOOOrRRRyTTTÂWWWÂYYYÂ\\\Â^^^ÂaaaÂ£cccÂª
-+
-+
-+Â°fffÂ·iiiÂŸkkkÃ
-nnnÃpppÃsssÃuuuÃ¡xxxÃšzzzÃ¯}}}Ã¶
-
-
-ÃŒÂÂÂ
-+Â
-Â
-Â
-ÂÂÂÂÂÂÂÂÂ&ÂÂÂ-ÂÂÂ4ÂÂÂ;ÂÂÂBHÂÂÂOÂÂÂVÂÂÂ]Â¡Â¡Â¡dÂ£Â£Â£kÂŠÂŠÂŠrÂšÂšÂšyÂ«Â«Â«ÂÂ­Â­Â­ÂÂ°Â°Â°ÂÂÂ³Â³Â³ÂÂµÂµÂµÂ¢ÂžÂžÂžÂ©ÂºÂºÂºÂ°ÂœÂœÂœÂ·Â¿Â¿Â¿ÂŸÃÃÃÃ
-ÃÃÃÃÃÃÃÃÃÃÃÃÃ ÃÃÃÃ§ÃÃÃÃ®ÃÃÃÃµÃÃÃÃŒÃÃÃÃÃÃ
-+ÃÃÃÃÃÃÃ Ã Ã Ã£Ã£Ã£&,Ã¥Ã¥Ã¥3ÃšÃšÃš:Ã«Ã«Ã«AÃ­Ã­Ã­HÃ°Ã°Ã°OÃ²Ã²Ã²VÃµÃµÃµ]Ã·Ã·Ã·dÃºÃºÃºkÃŒÃŒÃŒrÃ¿xÂ­Ã¿/ÂÃ°Ã¿Ã°ÂÃ¿iÂŽÂk99ÂÃ¿Ã¿Ã°Â¥Â³Â³~Â«ÃŠÃŠÃºÂŽÃ¿Ã°ÃµÃ|ÃŒÃÃ¿ÃºÃÃÂ°Ã¢Ã¿Ã£Ã°ÂÂÃ®Ã Ã¿Ã¿ÃžÃ®ÃÂÃºÃºÃ
-ÂšÂšÂš&Ã¿Â¶Ã0Ã¿Â z< Â²ÂªJÂÃÃºWÂpÃ¿fwÂÂu|ÂÃÂÃ¿Ã¿Ã ÂÂ¯ÂÃºÃ°ÃŠÂ Ã¿Ã¿ÂšÂRÂ¯ÂÂÃ22ÃÃ2ÂKÃÃÃfÃ­ÂœRÂœÃºÂpÃ4wfjjÂ&#Â#8ÃÃHÃ yX//deÃµÃ¿ÃºoÃ¿Ã€Ã¡yÃ¿Ã€ÂµÂÃ¿ÃÂ­Â##uÂ##uÂÃœÃµÃŠÂ€kÂ#Â®Ã¿ÂÂµÃ¿EÂ¿Ã¯ÂÃ¯ÃÃ®ÃšÂªÃsÃxÃÂ¯Ã®Ã®Ã¬ÃpÂÃºÃ¿Ã¯ÃÃ¿ÃÂ¹ÃÂ
-?Ã¿ÂµÃ
-Ã
-HÂ
-Â°Ã ÃŠ)Â  Ã°0Ã¿4ÂŒÂÂ>AiÃ¡HÂETÃ©Âz[ÃŽÂ€`fRÂÂoÃ¿ÃµÃ®xÂR-rÂÃ¿Â~ÂÂ«ÂpÂÂÂÃ¿ÃºÃºÂ AÂ¬AÂ¬TpÂªÂ¶ÃÂžÂÂºÃÂ¿ÃÃÃ¿cGÃÃÃÃÃÂ>ÃÃŠÃ³>ÂÃ°ÃµÃÂ³Ã¶Ã¿Ã¿Ã¿ÃŒÃµÃµÃµÃ¿Ã¿2Ã80	B
-0
-`
-+p	PÃÃÃ Ã°fpÂ»
-ÃÃ$greyAliceBlueAntiqueWhiteAquamarineAzureBeigeBisqueBlackBlanchedAlmondBlueBlueVioletBrownburlywoodCadetBluechartreusechocolateCoralCornflowerBluecornsilkCyanDarkGoldenrodDarkGreenDarkKhakiDarkOliveGreenDarkOrangeDarkOrchidDarkSalmonDarkSeaGreenDarkSlateBlueDarkSlateGrayDarkTurquoiseDarkVioletDeepPinkDeepSkyBlueDimGrayDodgerBlueFirebrickFloralWhiteForestGreengainsboroGhostWhiteGoldGoldenrodGrayGray0Gray1Gray10Gray100Gray11Gray12Gray13Gray14Gray15Gray16Gray17Gray18Gray19Gray2Gray20Gray21Gray22Gray23Gray24Gray25Gray26Gray27Gray28Gray29Gray3Gray30Gray31Gray32Gray33Gray34Gray35Gray36Gray37Gray38Gray39Gray4Gray40Gray41Gray42Gray43Gray44Gray45Gray46Gray47Gray48Gray49Gray5Gray50Gray51Gray52Gray53Gray54Gray55Gray56Gray57Gray58Gray59Gray6Gray60Gray61Gray62Gray63Gray64Gray65Gray66Gray67Gray68Gray69Gray7Gray70Gray71Gray72Gray73Gray74Gray75Gray76Gray77Gray78Gray79Gray8Gray80Gray81Gray82Gray83Gray84Gray85Gray86Gray87Gray88Gray89Gray9Gray90Gray91Gray92Gray93Gray94Gray95Gray96Gray97Gray98Gray99GreenGreenYellowhoneydewHotPinkIndianRedivoryKhakilavenderLavenderBlushLawnGreenLemonChiffonLightBlueLightCoralLightCyanLightGoldenrodLightGoldenrodYellowLightGrayLightPinkLightSalmonLightSeaGreenLightSkyBlueLightSlateBlueLightSlateGrayLightSteelBlueLightYellowLimeGreenlinenMagentaMaroonMediumAquamarineMediumBlueMediumForestGreenMediumGoldenrodMediumOrchidMediumPurpleMediumSeaGreenMediumSlateBlueMediumSpringGreenMediumTurquoiseMediumVioletRedMidnightBlueMintCreamMistyRosemoccasinNavajoWhiteNavyNavyBlueOldLaceOliveDrabOrangeOrangeRedOrchidPaleGoldenrodPaleGreenPaleTurquoisePaleVioletRedPapayaWhipPeachPuffperuPinkPlumPowderBluepurpleRedRosyBrownRoyalBlueSaddleBrownSalmonSandyBrownSeaGreenseashellSiennaSkyBlueSlateBlueSlateGraysnowSpringGreenSteelBlueTanThistletomatoTransparentTurquoiseVioletVioletRedWheatWhiteWhiteSmokeYellowYellowGreen
-+T
-+ÂÂÃÃÃž
-+GyÂµ 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã° 0@P`pÂÂÂ Â°ÃÃÃ Ã°		 	0	@	P	`	p	Â	Â	Â 	Â°	Ã	Ã	Ã 	Ã°	
-+
-+ 
-+0
-+@
-+P
-+`
-+p
-+Â
-+Â
-+Â 
-+Â°
-+Ã
-+Ã
-+Ã 
-+Ã°
-+
-
- 
-0
-@
-P
-`
-p
-Â
-Â
-Â 
-Â°
-Ã
-Ã
-Ã 
-Ã°
-
-
- 
-0
-@
-P
-`
-p
-Â
-Â
-Â 
-Â°
-Ã
-Ã
-Ã 
-Ã°
-
-
- 
-0
-@
-P
-`
-p
-Â
-Â
-Â 
-Â°
-Ã
-Ã
-Ã 
-Ã°
- 0@P`pÂÂ
-
- $(,.fileÃŸÃ¿grgb.c  "0p BÃ .textÃ
-.dataÂ°Ãª.bss.xdata(.pdata0
-.rdataRstrdup strchr strstr ` free nxpmReadRgbNamesxpmGetRgbNametheRGBRecordsxpmGetRGBfromNamexpmFreeRgbNames__imp_tolowerxpmstrcasecmpscan.o/         1346471172  0     0     100666  4358      `
-+dÂb
-#.textÂ	Â
-  P`.data@PÃ.bssÂPÃ.rdatapÂ
-+@P@.xdata\ÃŽ
-+@0@.pdata<P
-Ã
-@0@AWAVAUATUWVSHÂÃ¬xHÂÂŒ$Ã°ÂÂŒ$Ã HÂÂ$ÃHÂÂ$ÃMÂÃDÂÂ$ÃDÂÂ¬$ÃštHÂÂ$Ã°Ã¶Â
-ÃHÂÂ$ÃÃšHÂÂ$ÃHÂÃÃšHÂD$PÂ
-Ã¿tHÂÂ$Ã0ÂÂ¬$ÃIÂÃÂÂ$ÃÃÃ¡ÃšHÂ
-ÃHÂD$HÂÂÂÂ$ÃÂ
-ÃÂÂÂ$ÃHÂÂ$ÃEÂ}ÃŸAÂULÂt$HHÂt$XMÂGÂ\$dÂÃšHÂÃÂÃHÂ@LÂD$@HÃÃ HÂD0HÂD$8ÂÂÃ±ÃšHÂ
-ÃIÂÃHÂEÂÃÂÃžAÂ¹ÃBÂ²ÂÃ¹AÃ·Ã¡Âž\LÂIÂ[ÃÃªÂ¯Ã)ÃAÂÃœÂÃÂÃAÂ¶AÂvLL\$@IÂÃf.ÂÂÃ¹)ÃÂÃAÃ·Ã¡ÂÃÃÃ©ÂÃAÃ·Ã¡Âž\ÃÃªÂ¯Ã)ÃÂÃÂÃAÂ¶AÂIÂÃM9ÃuÃJÂ\;ÃAÂ$ÂÃHÂÃ
-0IÂÃAÂIÂÃH;l$8Â
-BÃ¿Ã¿Ã¿HÂt$XÂ\$dDÂÂ$ÃLÂD$H1Ã¿HÂT$PHÂÂ$ÃE1Ã¶Ãš1Ã1ÃÃšHÂÂŒ$Ã°AÂÃt)HÂÂ$Ã°ÂÃ¶ÃÂÂÃ¯HÂJpÂzhHÂr0ÂÂÂHÂL$hÂÂ$ÃÂ
-ÃÂÂ»ÂÂ$ÃHÂÂ$ÃHÂl$HÂÃšIÂÃHÂ@HÃÃ LÂl0Â
-Ã¿t;1Ã1ÃÃ«
-DÂÃDÂE)ÃD9ÂÂÂ®ÂÃ9Ãžt9ÃuÃ£ÂÃÂ¹9ÃžuÃ°ÂEÂ
-Ã¿Â
-ÃDÂ¶MDÂ¶EHÂ]Â¶EHÂL$pÂD$ ÃšHÂL$pÃšHÂ
-ÃIÂD$(ÂÃIÂÃ0HÂÃ
-M9Ã¬Â
-lÃ¿Ã¿Ã¿HÂL$HÃšDÂÃº1ÃÃš1ÃHÂÃx[^_]A\A]A^A_ÃHÂPHÂT$PÃ©>ÃœÃ¿Ã¿9ÃÂhÃ¿Ã¿Ã¿MÂ
-Ã¶ÂÂ¬IÂÃHÂD$81ÃLÂD$8IÂLHÂ
-ÃtHÂT$0ÃšHÂT$0IÂDHÂÃHÂÃº(uÃÃ©fÃ¿Ã¿Ã¿fÂDÂ¶MDÂ¶E1ÃÂ¶EDÂÃºÂD$ ÃšHÂ
-ÃHÂÃÂÃ¿Ã¿Ã¿ÃšHÂ
-ÃIÂD$(Â
-)Ã¿Ã¿Ã¿HÂL$HÃšDÂÃº1ÃÃšÂžÃœÃ¿Ã¿Ã¿Ã©2Ã¿Ã¿Ã¿HÂL$HÃšÂžÃœÃ¿Ã¿Ã¿Ã©
-Ã¿Ã¿Ã¿HÂ@HÃÃ HD$hHÂD$8Ã©FÃ¿Ã¿Ã¿Ã¶ÃÂ
-ÃŸÃ¿Ã¿ÂÂ$ÃLÂÂ$Ã°Â
-ÃMÂppAÂxhIÂp0AÂÂÂÂ
-ÃŸÃ¿Ã¿Ã©Â¹ÃŸÃ¿Ã¿@ÂžÃœÃ¿Ã¿Ã¿Ã©ÃÃŸÃ¿Ã¿fDÂ
-Ãu,ÂBÂ
-ÃuHÂÃBÃÃB1ÃAÃÃ@1ÃAÃÃfDAWAVAUATUWVSHÂÃ¬(LÂÂ¬$ÂLÂÂŽ$ÂE1Ã€HÂÃDÂÃDÂÂ$ÂHÂ	IÂmÃ¿ÂÂ$ÂLÂ=Â
-Ãt^1Ã¿Â
-Ã¶uÃ«HÂÂÃHÂÃ
-9Ã·t5EÂÃ ÂÃºHÂ
-AÃ¿ÃIÂÃšLÂÃªÂÃAÃ¿ÃÂ
-ÃtÃÂžÃœÃ¿Ã¿Ã¿HÂÃ([^_]A\A]A^A_ÃDAÂÃD;Â€$ÂuÂ¢1ÃÃ«Ãfffff.ÂUWVSHÂÃ¬8AÂÂÃHÂÃÂ
-Ãu=ÂjÂzHÂ
-+9Ãœv
-ÂÃžHÂÂ;u
-Ã«HÂÃ;tÂÃ9ÃœwÃ±9Ãœt AÂ81ÃHÂÃ8[^_]Ã1ÃAÃHÂÃ8[^_]ÃÂFÂÃª9Ã
-s
-ÂÃÂ
-Â©ÂVÃ«ÃÂLÂD$(ÂVÂÃ
-ÃšHÂÃLÂD$(ÂžHÂ
-ÃtÂšHÂÂVÃ«ÃÂAWAVAUATUWVSHÂÃ¬xHÂÂŒ$Ã HÂ
-ÃIÂÃHÂÃLÂÃMÂÃHÃD$PHÃD$XÃD$`ÃD$dÃD$hÂÂ¹DÂb
-ÂjDÂÃ¡Â¯ÃE1Ã­HÂ
-Ã¿t
-Ã· Â
-ÃžÂºÃšHÂ
-ÃHÂD$XÂÃ°ÂL$`ÃÃ¡ÃšHÂ
-ÃHÂD$PÂÂHÂ
-Ã¶t-HÂÂÃœÃ¿Ã¿EÂÃ¡AÂÃšLÂÃ±HÂD$(HÂD$PHÂD$ HÂ1Ã¶ÃšÂžÃœÃ¿Ã¿Â
-Ãu6HÂ
-ÃÂÂHÂdÃŸÃ¿Ã¿EÂÃ¡AÂÃšLÂÃ±1Ã¶HÂD$(HÂD$PHÂD$ HÂÃšÂÃœÃ¿Ã¿Â
-ÃtnHÂL$XHÂ
-Ãt
-ÂD$HÃšÂD$HHÂL$PHÂ
-Ãt
-ÂD$HÃšÂD$HHÂ
-Ã¶tÂT$dHÂÃ±ÂD$HÃšÂD$HHÂÃx[^_]A\A]A^A_ÃfDDÂo,Ã©Ã¿ÃŸÃ¿Ã¿ÂÂL$dÂº0ÃšHÂ
-ÃHÂÃÂÂŠDÂD$dÂºAÂÃž\vÂž\ÂÂ¹\ÂÃÂ¯ÃD9ÃrÃ°D9ÃªDCÃªÂT$h1ÃÂ
-ÃÂÃAÂMÃšHÂ
-ÃHÂÂVAÂÃœÃ HÂHv
-EÂEÃŸJÂTHÂÃÃ HÂÃH9ÃuÃŽJÂLHÂ
-Ã¿ÃttÂÃ¶ÃÂtmÂÂÂÂÃºÂt_Ã¶ÃÂÂ"HÂRHÃÃ¢HWp1ÃHÂLHÂ
-Ãt
-HÂT$HÃšHÂ
-ÃHÂD
-HÂT$HÂÃHÂÃHÂÃ»(uÃÃ«.DÂžÃœÃ¿Ã¿Ã¿1Ã¶Ã©ÂÃŸÃ¿Ã¿@HÂ
-kÃšHÂ
-ÃHÂF(ÂÂÂD$hDÂD$dLÂL$PHÂÃ²LÂÃ±HÂ|$0DÂl$(ÂD$ Ãš Ã·Ã¿Ã¿Â
-ÃÂ
-:ÃŸÃ¿Ã¿ÂT$dHÂL$PAÂ/EÂgEÂoIÂwAÂW
-HÂT$XÂD$HIÂWÃšÂD$HÃ©JÃŸÃ¿Ã¿ÂMÂ
-Ãt;EÂ`
-AÂhDÂÃ¡Â¯ÃÃ©<ÃœÃ¿Ã¿ÂÂžÃœÃ¿Ã¿Ã¿1Ã¶Ã©ÃÃœÃ¿Ã¿@ÂžÃœÃ¿Ã¿Ã¿Ã©ÃÃœÃ¿Ã¿fD1ÃE1Ã€1Ã­Ã©ÃœÃ¿Ã¿HÂGpHÂÃÃ©ÃÃŸÃ¿Ã¿ÂÂÂÂÂÂÂ .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|#%02x%02x%02xNone
-+O
-0
-`
-+p	PÃÃÃ Ã°	B
-0
-`
-+p	PÃÃÃ Ã°b0`pP	Ã¢
-0
-`
-+p	PÃÃÃ Ã°Z`ÂÂ R
-`4y	DbrÂ<Ã·ÃÃÃ¢
-
-
-
-q
-ÂšÂ¹
-Ã
-Ã
-Ã¯
-ÃÃšÃª Â!Âš1
-H
-a"Â!Ãªh
-Â£Âš
-	
-
-
- $(,048.fileÃŸÃ¿gscan.c ` #Â  <` G .texty	 .data.bss.rdatap.xdata\.pdata<buÂ Â Â€ Âž Ã
- sprintf strdup free Ã Ã¥ Ã³  
- .ScanOtherColorsstoreMaskPixelMSWGetImagePixels.isra.1storePixelXpmCreateXpmImageFromImage__imp_SelectObject__imp_GetPixelXDefaultScreenXDefaultColormapboundCheckingMallocXQueryColorsxpmReadRgbNamesxpmFreeRgbNamesxpmGetRgbNameboundCheckingReallocboundCheckingCallocxpmFreeColorTablesimx.o/         1346471173  0     0     100666  2890      `
-+dÂÂ%.textpÃ\
-+ P`.data@PÃ.bssÂPÃ.xdata\L@0@.pdataÂŽÂšÃ-@0@ÂAÃÂÃž	vÂAÂÂÃžvÂQÂ¿1ÃÂÃ©7ÂÃºFÃÃ³ÃÂAÂ©Ãfff.ÂHcÃÃ©ÂHcÃHcÃÃ©DHcÃÃ©Â1ÃÃffff.Â1ÃÃffff.ÂWVSHÂÃ¬ HÂ
-Âº
-HÂÃHÂ	Ã¿ÃHÂÂÃÂºÃ¿ÃÂÃžHÂÃ [^_Ãffffff.Â1ÃÃffff.ÂWVSHÂÃ¬01ÃMÂ
-ÃLÂÃLÂÃtVAÂ8#tXLÂL$,LÂD$(HÂT$$HÂÃÃšÂ
-Ãt]DÂD$(DÂL$$ÂL$,AÂ¶ÃAÂ¶ÃDÂNÃÃ DÂFÂN	ÃÂ¶ÃÃÃ¢	ÃÂÂžHÂÃ0[^_ÃLÂÃÃšÂÃžÂ}ÂÃžÂÂ€ÂÃž
-Ât1ÃHÂÃ0[^_Ã@ÂŸKÃšÂÃŸÃ¿Ã¿ÂŸKÂÃÃÃ§ÃšyÃŸÃ¿Ã¿ÂŸKÃžÂD$$ÃšjÃŸÃ¿Ã¿ÂŸKÂÃÃÃ§Ãš\ÃŸÃ¿Ã¿ÂŸK	ÃžÂD$(ÃšMÃŸÃ¿Ã¿ÂŸK
-+ÂÃÃÃ§Ãš?ÃŸÃ¿Ã¿ÃžÂD$,Ã©9Ã¿Ã¿Ã¿@ÂŸKÃš'ÃŸÃ¿Ã¿ÂŸKÂD$$ÃšÃŸÃ¿Ã¿ÂŸKÂD$(Ãš
-ÃŸÃ¿Ã¿ÂD$,Ã©	Ã¿Ã¿Ã¿@ÂŸKÃšÃ·ÃœÃ¿Ã¿ÂŸKÂÃÃÃ§ÃšÃ©ÃœÃ¿Ã¿ÂŸKÃžÂD$$ÃšÃÃœÃ¿Ã¿ÂŸKÂÃÃÃ§ÃšÃÃœÃ¿Ã¿ÂŸKÃžÂD$(ÃšÂœÃœÃ¿Ã¿ÂŸKÂÃÃÃ§ÃšÂ¯ÃœÃ¿Ã¿ÃžÂD$,Ã©Â©ÃŸÃ¿Ã¿@ÂžÃf.ÂEÂ
-Ã~,AÂÃ©KÂLÃfÂAÂÂÃAÂ@ÃÃšfÃÃªAÂ@AÂPIÂÃI9ÃuÃÃ³Ãffff.Â1ÃÃffff.ÂUWVSHÂÃ¬8Â¹ÂÂ¬$ÂÂÂŒ$ÂDÂÃÃšHÂ
-ÃHÂÃt(HÃD$ AÂÃ±AÂžÂÃºÂÃ©Ã¿ÂkHÂÂ{
-ÂsHÂÃHÂÃ8[^_]ÃÂHÂ
-Ãt
-Ã©fDÃ³Ãfffff.ÂSHÂÃ¬ HÂ
-ÃHÂÃtHÂ	Ã¿HÂÃHÂÃ [Ã«ÃHÂÃ [ÃÂÂÂÂÂÂÂÂÂÂ20`pR0`pb0`pP20$08@KPX
-`cpsÂÂ±ÃÃ$Ã\(`f4pÂ£8Â°Â³<Ã@ 2P@fTÂ
-Ãœ"F#Ã
-R
-4G T!&$
-
- $(,048<@DHLPTX\`dhlptx|ÂÂÂÂÂÂÂÂÂ Â€ÂšÂ¬Â°.fileÃŸÃ¿gsimx.c 0 %@ 9P N` ]p lÂ zÃ ÂÃ Â` Â£p Â°Â° ÂŒÃ Ã  Ã@ .textf
-+.data.bss.xdata\.pdataÂŽ-Ã¢Ã¶	malloc calloc realloc 
- strlen free .hexCharToIntboundCheckingMallocboundCheckingCallocboundCheckingReallocXDefaultVisualXDefaultScreenXDefaultDepthXDefaultColormapXParseColorXAllocColorXQueryColorsXFreeColorsXCreateImageXImageFreeXDestroyImage__imp_GetDeviceCaps__imp_CreateBitmap__imp_DeleteObjectxpmGetRGBfromNameWrFFrBuf.o/     1346471173  0     0     100666  879       `
-+dÂÃ¬.textpÂ P`.data@PÃ.bssÂPÃ.rdatat@P@.xdata
-Â@0@.pdata
-ÂÃ@0@VSHÂÃ¬(HÂÃHÂÃšHÂ
-ÃHÂÃtCHÂÃ±ÃšHÂÃ±HcÃIÂÃAÂžÃšHÂÃHÂÃÃš1ÃÂÃŸÂÃÂÃšHÂÃ([^Ãf.ÂÂžÃ¿Ã¿Ã¿Ã¿Ã«ÃšÂÂÂÂÂÂÂÂÂwB0`g
-
-+!5@
-.fileÃŸÃ¿gWrFFrBuf.c .textg.data.bss.rdata.xdata
-.pdata
-fopen strlen fwrite fclose XpmWriteFileFromBuffer
-+parse.o/        1346471173  0     0     100666  9240      `
-+dÂz/.textÃ°4s P`.data@ÃŽÂ²
-@`Ã.bssÂPÃ.xdatat4@0@.pdata<ÂšÃ€
-@0@.rdataPÃ€@P@AWAVAUATUWVSHÂÃ¬X
-+DÂÂŒ$Ã
-+LÂÂ¬$Ã
-+ÂÃHÂÃDÂÂ$Â°
-+Â
-ÂµDÂÃAÂ¯ÃÃšHÂ
-ÃIÂÃÂjAÂÃ¿ÂÃAÂÃ¿Â@DÂÃžÃÂPv	ÂÃœÂÂ¡ÂÂ$Â°
-+ÂFÃ¿MÂÃŠÃD$@HÃÃ Â
-ÃHÂD$HÂÃ²LÂd$8Ât$DHÂÃÃšÂD$DÂ
-ÃÂÂºHÂD$HMÂdf.Â1Ã¶EÂ
-Ã¿LÂÂ¬$PuÃ«?HÂSÂ¶HÂÃHÂSAÂD5HÂÃA9Ã·v"ÂÂÃžtÃÂ
-ÃtÃHÂKÃšAÂD5HÂÃA9Ã·wÃÂ
-Ã­ÂÃšHÂÂŒ$Ã
-+1Ã¶LÂÂ¬$PÃ«@ÂÃHÂÃ09Ã®ÂÃHÂLÂÃªÃšÂ
-ÃuÃ¢9ÃµÂÂªAÂ6IÂÃM9ÃŠÂ
-ZÃ¿Ã¿Ã¿ÂD$@ÂÂ$Â°
-+9D$@Â
-
-Ã¿Ã¿Ã¿LÂd$8HÂÂ$Ã
-+LÂ 1ÃÃ©ZLÂl$P1ÃÂ¹Â
-Ã­LÂÃ¯Ã³HÂ«ÂTLÂÂŽ$Ã
-+ÂÃ
-Â¿Ã«ÂÂ¶RIÂÃ0fÂ<PÂÃ9Ã¯Â*IÂLÂŸ:JÂDÃŒPHÂ
-ÃuÃÂºÂ¹ÃšHÂ
-ÃJÂDÃŒPÂjIÂÃ«Â¶HÂÂ$P1ÃÂ¹@Â
-Ã­HÂÃÃ³HÂ«t&HÂÂ$Ã
-+ÂÃ
-Â°HÂ
-+HÂÃ0Â¶	fÂÂLPÂÃ9ÃšuÃ§DÂÂ$Â°
-+EÂ
-ÃÂ'Ã¿Ã¿Ã¿DÂnÃ¿LÂÃ§E1Ã¶IÃÃ¥HÂÃÃšÂ
-Ã¶ÂxJÂl/Ã«?ÂHÂSÂŸHÂÃHÂSÂPÃ¿ÂÃºÃŸwFHÂÂ·ÂDPfÂ
-Ãt7Â·ÃÂÃšÂHÂÃH9Ã¯Â2ÂÂÃžtÂ»Â
-ÃtÂ·HÂKÃšÂPÃ¿ÂÃºÃŸvÂœLÂÃ¡ÃšÂžÃŸÃ¿Ã¿Ã¿HÂÃX
-+[^_]A\A]A^A_ÃDÂÂ$Â°
-+EÂ
-ÃÂDÂ~Ã¿LÂÃ§ÃD$0IÃÃ§HÂÃÃšÂ
-Ã¶ÂÃNÂt?Ã«o@HÂCÂŸ(HÂÃHÂCÂEÃ¿=ÃŸÂÃ¯ÂÂÃžu_HÂSÂŸHÂÃHÂSÂPÃ¿ÂÃºÃŸwTHcÃ­HÂTÃ¬PHÂ
-ÃtGHÂÂ·BfÂ
-Ãt<Â·ÃÂÃšÂHÂÃL9Ã·ÂeÂÂÃžtÂÂ
-ÃtÂHÂKÃšÂÃ
-Ã«ÂÂ
-ÃtÂHÂKÃšÃ«Â¡IÂÂÂIÂMHÂ
-ÃtÃšIÂÃ
-I9ÃuÃ©Ã©Ã€ÃŸÃ¿Ã¿@LÂd$8Ã©ÃÃŸÃ¿Ã¿ÂÂ$Â°
-+Â
-ÃÂhÃœÃ¿Ã¿ÂFÃ¿LÂÃ§E1Ã¶HÂÂ
-HÂD$0HÂÃÃšHÂl$0HÃœÂ
-Ã¶ÂÂfÂ1ÃÃ«HÂKÂ¶HÂÃHÂKÂÂPHÂÃA9Ãv.ÂÂÃžtÃÂ
-ÃtÃHÂKHÂT$(ÃšHÂT$(ÂÂPHÂÃA9ÃwÃHÂÂ$PLÂÃ©ÃšHÂHÂ
-ÃÂ#ÃŸÃ¿Ã¿HÂ@ÂHÂÃH9Ã¯Â
-ÂÃ¿Ã¿Ã¿AÂÃD;ÂŽ$Â°
-+Â
-MÃ¿Ã¿Ã¿Ã©ÂÃŒÃ¿Ã¿fÂAÂÃD;ÂŽ$Â°
-+Â
-fÃœÃ¿Ã¿Ã©zÃŒÃ¿Ã¿fÂÂD$0ÂÂ$Â°
-+9D$0Â
-Ã¿ÃœÃ¿Ã¿IÂÂIÂMHÂ
-ÃtÃšIÂÃ
-I9ÃuÃ©Ã©5ÃŒÃ¿Ã¿IÂÂIÂMHÂ
-ÃtÃšIÂÃ
-I9ÃuÃ©Ã©qÃœÃ¿Ã¿IÂÂf.ÂIÂMHÂ
-ÃtÃšIÂÃ
-I9ÃuÃ©LÂÃ¡ÃšÂžÃœÃ¿Ã¿Ã¿Ã©DÃœÃ¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Ã©:ÃœÃ¿Ã¿ffff.ÂAWAVAUATUWVSHÂÃ¬8DÂÂ4LÂÂ€$ÂšHÂÃHÂÂ$ÂLÂÂ$ÂLÂÂ$ÂLÂÂ¬$Â°EÂ
-ÃÂHÂl$0ÃD$,E1Ã¶E1Ã¿E1Ã€E1Ã­AÂžHÂÃªHÂÃÃšÂÃžusHÂ5HÂÃ¯Â¹Ã³ÂŠu`AÂžHÂÃªHÂÃÃšÂ
-ÃtKÂÃHÂÃ©Âº_ÃD40ÃšHÂ
-Ãt2HÂÃªH)ÃHÃ²HÂÃºÂQ=HÂÃºÂHÂHÂº_ÃšHÂ
-ÃuÃÂŸÃŸÃ¿Ã¿Ã¿ÂÃ°HÂÃ8[^_]A\A]A^A_ÃDHÂÃºÂÂHÂÃºuÂœEÂ
-Ã¶uÃHÂ5'HÂÃÂ¹Ã³ÂŠuÂžHÂÂ$Â HÂÃÃšÂ
-ÃtÂ€AÂ¶HÂÃÃšÂl$,Â
-Ã¿Ã¿Ã¿EÂ
-Ã€tÂEÂ
-Ã­tÂEÂ
-Ã¶ÂÂzÃ¿Ã¿Ã¿EÂ
-Ã¿ÂqÃ¿Ã¿Ã¿HÂÂ$ÂžHÂÂ$Ã1Ã¶ÃÃÃ©SÃ¿Ã¿Ã¿EÂ
-Ã¿Â
-EÃ¿Ã¿Ã¿HÂ5
-HÂÃÂ¹Ã³ÂŠÂ
-.Ã¿Ã¿Ã¿HÂÂ$ÂHÂÃÃšÂ
-ÃÂÃ¿Ã¿Ã¿AÂ·Ã©mÃ¿Ã¿Ã¿EÂ
-Ã­Â
-Ã¿Ã¿Ã¿HÂ5Â¹HÂÃÃ³ÂŠÂ
-Ã®ÃŸÃ¿Ã¿HÂÂ$ÂHÂÃÃšÂ
-ÃÂÃÃŸÃ¿Ã¿AÂµÃ©-Ã¿Ã¿Ã¿EÂ
-Ã€Â
-Ã
-ÃŸÃ¿Ã¿HÂ5HÂÃÂ¹Ã³ÂŠÂ
-Â®ÃŸÃ¿Ã¿HÂÂ$ÂHÂÃÃšÂ
-ÃÂÂÃŸÃ¿Ã¿AÂŽÃ©Ã­ÃŸÃ¿Ã¿ÃšÂ
-ÃÂŸÃŸÃ¿Ã¿Ã¿ÂÂÃŸÃ¿Ã¿HÂÂ$ÂHÂÃÃšÂ
-ÃÂiÃŸÃ¿Ã¿HÂÂ$ÂHÂÃÃšÂ
-ÃÂQÃŸÃ¿Ã¿HÂÂ$Â HÂÃÃšÂ
-ÃÂ9ÃŸÃ¿Ã¿HÂl$0AÂžHÂÃ1Ã¶HÂÃªÃšÂ
-ÃÂÃŸÃ¿Ã¿ÂÃžtoHÂÂŒ$ÃMÂÃ ÂÃHÂÃ©ÃÃšÂ
-ÃÂ
-Â¥HÂÂ$ÂžAÂžHÂÃÂHÂÃªÃš1ÃÂÃžtHÂÂŒ$Ã1Ã¶ÂÃ©ÂŸÃœÃ¿Ã¿HÂ5Â¹HÂÃ¯Ã³ÂŠÂÃÂ¶ÃÃ«ÃHÂ5Â¹HÂÃ¯Ã³ÂŠÂ
-zÃ¿Ã¿Ã¿HÂÂ$ÃLÂÃ¢HÂÃÃÃš1ÃÂ
-ÃtLÂÃªHÂÃÃš1ÃÂ
-ÃÂÃHÂÂŒ$Âž1Ã¶ÂÃ©LÃœÃ¿Ã¿LÂÃªHÂÃÃšÂ
-ÃÂÃÂ¶ÃÃ©CÃ¿Ã¿Ã¿ffffff.ÂAWAVAUATUWVSHÂÃ¬hÂÂ$ÂžHÂÃÂÂ$ÂžÂº0DÂÂ$ÃLÂÂ$ÃÃšHÂ
-ÃHÂD$@Â>DÂÂ³4EÂ
-Ã¶Â
-Â¹DÂÂ¬$ÂžEÂ
-Ã­ÂÂÂ$ÃHÂT$@HÃD$8ÂÃHÂT$0ÂD$LÂÂ$ÂžÂÃšHÂ@HÃÃ HÂD0HÂD$XÂÂ$ÃÂÃšHÂD$PHÂÃÃšÂL$LÃšHÂT$0HÂ
-ÃHÂÃHÂÂDÂÂ€$Ã1Ã¶ÂÂ¬$ÃEÂ
-Ã€u&Ã©ÂÂHÂSÂ¶HÂÃHÂSÂ7HÂÃ9ÃµvÂÂÃžtÃÂ
-ÃtÃHÂKÃšÂ7HÂÃ9ÃµwÃ¡ÂÂŒ$ÃHÂD$PÃDÂaÃÂ$`E1Ã¿ÃD$HHÂT$`AÂžHÂÃÃšAÂÃEÂ
-Ã€Â]EÂ
-Ã¿u+LÂ-DÂÃ¥1Ã¶IÂ|ÃµAÂÃ¶HÂÃ¹ÃšH9Ã
-tGHÂÃHÂÃŸuÃ¡Â|$HÂ
-Ã¿ÂÃEÂ
-Ã¿HÂÂŽ$`ÂÃHÂT$`HÂÃ±BÃD$`E1Ã¿ÃšÃ©yÃ¿Ã¿Ã¿DHÂT$`IÂÃšHÂÃ¹ÃšÂ
-ÃuÂ¥Âl$HÂ
-Ã­u @AÂÃÃÂ$`AÂ¿DÂt$HÃ©8Ã¿Ã¿Ã¿HÂÂŽ$`HÂÃ±ÂHÂÃÂÂÃ¿ÃŸÃŸÃŸÃ·Ã!Ã%ÂÂÂÂtÃ©ÂÃÃÃªÂ©ÂÂDÃHÂQHDÃÃHÂÃH)Ã±ÂÃÃšHÂ
-ÃHÂÃÂ}ÂD$HHÂT$0HÂ
-ÃHÂÃ²ÃšÃ©vÃ¿Ã¿Ã¿fDHÂÃ±ÂHÂÃÂÂÃ¿ÃŸÃŸÃŸÃ·Ã!Ã%ÂÂÂÂtÃ©ÂÃÃÃªÂ©ÂÂDÃHÂQHEÃÃHÂÃfÃ Ã©Ã±ÃŸÃ¿Ã¿ÂÂt$HÂ
-Ã¶ÂÂÂD$HHÂT$0HÂÂŽ$`HÂ<ÃHÂÃ²Â
-+HÂÃÂÂÃ¿ÃŸÃŸÃŸÃ·Ã!Ã%ÂÂÂÂtÃ©ÂÃÃÃ©Â©ÂÂDÃHÂJHDÃÃHÂÃH)Ã²ÂJÃšHÂ
-ÃHÂÃHÂÂÂ­HÂÃ²ÃšHÂD$00HÂD$8HÂD$XH9D$0Â
-EÃœÃ¿Ã¿HÂÂ$ÃHÂT$@HÂ1ÃÃ«ÂÂ$ÂžHÂL$@ÃšÂžÃŸÃ¿Ã¿Ã¿HÂÃh[^_]A\A]A^A_ÃÂÂŒ$ÂžÂÂÃœÃ¿Ã¿HÂD$0LÂD$8HÂÂ$ÃHÂÃšÂ
-ÃÂoÃœÃ¿Ã¿ÂÂ$ÂžHÂL$@ÂD$(ÃšÂD$(Ã«Â¡ÂÂ$ÂžHÂL$@ÃšÂžÃœÃ¿Ã¿Ã¿Ã«ÂÃÂ0"ÃÂ1HÂÃÃšDÂÂ$ÂžÃÂ1"EÂ
-ÃÂ1Ã¿Ã¿Ã¿ÂÂ$ÂžDÂÂ¬$ÃHÂÂŽ$`DÂÂ€$ÃHÂ|$@1Ã­DÂÂŒ$ÂžDÂÂŽ$ÃÂÃªAÂÃ
-AÂÃ¬ÂT$8ÂDÂÃ©ÃšHÂ
-ÃHÂÂYÃ¿Ã¿Ã¿1ÃEÂ
-Ã¶ÂÃDÂ|$HLÂd$0EÂÃ¯IÂÃŒIÂÃ­HÂÃHÂÃ
-HÂÃÃ«HÂWÂ¶HÂÃHÂWÂD
-HÂÃA9Ãv!ÂÂÃžtÃÂ
-ÃtÃHÂOÃšÂD
-HÂÃA9ÃwÃHÂÃ»LÂÃ§LÂd$0IÂÃšAÂÃŸLÂÃ­EÂÃœDÂ|$HCÃD v!AÂÃ¿vHÂHÂÂ$ÃIÂÃšÃšÂ
-ÃÂ
-ÂÃŸÃ¿Ã¿HÂÃÃšÃÂ$`Ã«HÂT$`ÂÃHÂÃ±ÃD`ÃšHÂT$`AÂžHÂÃÃšÂ
-ÃtPÂÂŒ$`tÃHÂÃ±DÂHÂÃAÂÂÃ¿ÃŸÃŸÃŸAÃ·ÃD!ÃÂÃ¢ÂÂÂÂtÃ€AÂÃAÃÃšÃ·ÃÂÂADÃLÂAIDÃÃHÂÃfÃ Ã«ÂÂHÂÃ±ÂHÂÃÂÂÃ¿ÃŸÃŸÃŸÃ·Ã!Ã%ÂÂÂÂtÃ©ÂÃÃÃªÂ©ÂÂDÃHÂQHDÃÃHÂÃH)Ã±ÂÃÃšHÂ
-ÃÂÃÃœÃ¿Ã¿HÂÃ²HÂÃHÂD$(Ãš9l$8LÂD$(LÂG(ÃÂ$`w HÂÃ
-HÂÃ0A9Ã¯Â/ÃŸÃ¿Ã¿Ã©ÃœÃ¿Ã¿f.ÂHÂÃÃšÃ«ÃÃÃ©ÃÃŸÃ¿Ã¿ÃÃ©ÃÃºÃ¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Ã©
-+ÃœÃ¿Ã¿fff.ÂAWAVAUATUWVSHÂÃ¬XHÂ-LÂ%8AÂœHÂÃHÂÂ$ÂšLÂÂ$Â°ÃšÂ¹AÂŸ	ÃšLÂD$LHÂT$@HÂÃHÂD$0ÃšÂ
-ÃuRfÂHÂD$@HÂÃ®LÂÃ©HÂÃÃ³ÂŠt^LÂÃŠHÂÃLÂÃ±Ã³ÂŠÂÃHÂÃÃšHÂÃÃšLÂD$LHÂT$@HÂÃÃšÂ
-ÃtÂ·HÂL$0ÂD$(ÃšÂD$(HÂÃX[^_]A\A]A^A_Ã@Â¹	LÂÃŠHÂÃÃ³ÂŠAÂÃÂÃA(ÃEÂŸÃ¿EÂ
-Ã¿Â\HÂ|$0ÃD$<1Ã¶ÂVHÂÃ¹ÂT$8ÂT$<ÃšHÂ
-ÃHÂD$0ÂÂ»HÂvHÂt$@HÂ|$0HÂÃLÂ,ÃHÂÃ·Ã«ÂHÂÃÂŸÃ¿Â
-ÃuÃ¯ÂL$L)Ã·ÂÃ©)Ã¹ÃšHÂ
-ÃIÂEÂÂ€DÂD$LÂÃºHÂÃHÃ²AÂÃšA)ÃžÃšHÂL$@ÃšHÂÃÃšLÂD$LHÂT$@HÂÃÃšÂ
-ÃÂ
-JÂ¹E1Ã¶ÃšIÂEÃ«
-f.ÂAÂÃ¶HÂD$@HÂÃ®Â¹HÂÃÃ³ÂŠÂÂHÂÃLÂÃŠÂ¹	Ã³ÂŠAÂÃÂÃA(ÃEÂŸÃ¿EÂ
-Ã¿ÂÂAÂvIÂMÂÃµÃšHÂ
-Ãt~HÂT$@IÂEHÂÃJÂÃ°ÃšLÂD$LHÂT$@HÂÃÃšÂ
-ÃÂyÃ¿Ã¿Ã¿AÂuÂT$8HÂL$0ÂD$(ÃšÂD$(Ã©EÃŸÃ¿Ã¿EÂ
-Ã¿@ÂÃEÂ
-Ã¶tJÂD$<@ÂÃ¶EÂuÂÃžÂt$8HÂ|$0Ã©aÃŸÃ¿Ã¿1Ã¶Ã«ÃHÂL$@ÃšÂT$8HÂL$0EÂuÃšÂžÃœÃ¿Ã¿Ã¿Ã©Ã¯ÃœÃ¿Ã¿IÂMÃšIÃEÃ«Â£HÂL$@ÃšÂÃ²HÂÃ¹ÃšÂžÃœÃ¿Ã¿Ã¿Ã©ÂŸÃœÃ¿Ã¿IÃEAÃEÃ©IÃ¿Ã¿Ã¿HÂL$@ÃšÂT$8HÂL$0IÃEAÃEÃšÂžÃœÃ¿Ã¿Ã¿Ã©wÃœÃ¿Ã¿HÂD$@ÂHÂÃ1ÃÃšHÂL$0ÃšÃD$8ÂT$8HÂÂ$Â°ÂHÂÂ$Âš1ÃHÂÃ©/ÃœÃ¿Ã¿ÂD$8Â
-ÃtÂ°EÂ
-Ã¿HÂ\$0uÃHÂL$@ÃšÃ«ÃfDAUATUWVSHÂÃ¬Âž1Ã¿MÂ
-ÃHÂÃHÂÃLÂÃÃÂ$ÂšÃÂ$Â¬HÃD$hHÃD$pHÃD$xHÃÂ$ÂHÃÂ$Ât
-AÂ1Ã¿Ã¶Ã@ÂÃHÂÃ±ÃšÂ
-ÃAÂÃ
-t
-DÂÃšHÂÃÂž[^_]A\A]Ãf.ÂHÂÂ$Â¬LÂÂ$ÂLÂÂ$ÂHÂÂ$ÂHÂÃ±HÂD$@HÂÂ$ÂšHÂD$8HÂÂ$Â€HÂD$0HÂÂ$Â HÂD$(HÂÂ$ÂHÂD$ ÃšÃÃ°Ã¿Ã¿Â
-ÃAÂÃ
-Â
-wÃ¿Ã¿Ã¿Â
-Ã¿Â
-Ã¬DÂÂ$ÂÂÂ$ÂLÂd$PAÂÃžv	ÂÃºÂÃLÂL$hHÂÃ±LÂd$ ÃšWÃŽÃ¿Ã¿Â
-ÃAÂÃ
-Â
-1Â
-Ã¿Â
-XHÂD$pDÂÂ$ÂDÂÂ$ÂÂÂ$ÂHÂÃ±LÂd$0HÂD$8HÂD$hHÂD$(ÂÂ$ÂÂD$ ÃšaÃªÃ¿Ã¿ÂÂŒ$ÂAÂÃ
-vÂÂŒ$ÂÂÂ«EÂ
-Ã­Â
-ÃÂ
-Ã¿Â
-uHÂ
-ÃfÂÂÂÂÃ¶Ãt
-ÂÂ$Â¬Â
-ÃÂ
-ÃHÃC0ÃC(ÂÂ$ÂÂ
-Ã¿ÂEÂÂ$ÂÂEÂÂ$ÂÂEÂÂ$ÂÂE
-HÂD$hHÂEHÂD$pHÂEt!HÂD$xHÂCHÂÂ$ÂHÂCHÂÂ$ÂHÂCÂÂ$ÂšÂ
-ÃÂÃŸÃ¿Ã¿ÂÂ$Â Â
-ÂC ÂÂ$Â€ÂC$Ã©ÃŸÃœÃ¿Ã¿ÂÂŒ$ÂvÂÂŒ$ÂÂÂžHÂL$hHÂ
-Ãt
-ÂÂ$ÂÃšHÂL$pHÂ
-ÃtÃšHÂL$xHÂ
-ÃtÃšHÂÂ$ÂHÂ
-ÃtÃšHÂÂ$ÂHÂ
-ÃÂÂÃœÃ¿Ã¿ÃšÃ©Â
-ÃœÃ¿Ã¿fÂHÂT$xHÂÃ±ÃšÃ©ÃŸÃ¿Ã¿LÂÃ¡ÃšÂ
-ÃAÂÃ
-Â
-^ÃœÃ¿Ã¿DÂÂ$ÂÂÂ$ÂÃ©ÃŸÃœÃ¿Ã¿ÂHÂÂ$ÂHÂÃ±ÃšÃ©vÃŸÃ¿Ã¿LÂÃ¡ÃšÃ©8Ã¿Ã¿Ã¿LÂÃ¡ÃšÃ©EÃŸÃ¿Ã¿ÂÂ$ÂÂEÂÂ$ÂÂEÂÂ$ÂÂEÂÂ$ÂÂE
-HÂD$hHÂEHÂD$pHÂEÃ©ÃÃŒÃ¿Ã¿HÂÂ$ÂHÂÃ±ÃšÃ©ÂÃœÃ¿Ã¿HÂS0LÂC(HÂÃ±ÃšgÃžÃ¿Ã¿Â
-ÃÂÃŸÃ¿Ã¿AÂÃ
-Ã©ÂŽÃŸÃ¿Ã¿ÂÂÂÂÂÂÂBDFIK
-+K
-0
-`
-+p	PÃÃÃ Ã°
-+G
-0
-`
-+p	PÃÃÃ Ã°
-+Â
-0
-`
-+p	PÃÃÃ Ã°	Â¢
-0
-`
-+p	PÃÃÃ Ã°0`pPÃÃÃÃÂ	Â 	40@ÃºHÃ©`XPMEXT#define_width_height_ncolors_chars_per_pixelXPMENDEXTsmg4gc?Â¬V|ÃÃŽ9ÃÃÃºCÂÂœ
-JmÂÂ«D
-Pm
-Â
-
-Â·
-Ãž#~ÂÂŸÃÃŸ
-3PhÂÂ 
-Ã Ã«
-
-+	#	L	]	Â	Ã	]
-+f
-+Ã
-+
-
-+
-
-+@
-!Â
-"Â
-#
-1
-$Ã
-ÃŽ
-$5
-%v
-&Â
-%Âª
-%Ã
-4ÂÃ§&Ã·"(
-ÂŒÃ$SZxÂÂ'ÃÃÃ±'b(ÂÂ­Ã)ÃÃ¥Ã·'
-o(ÂÂ'Â¹*ÃŒ*!5?*hÂ*ÂŠÂ°ÃŽx+Â¯%ÂŸÃÃÃµ	,-L,Y.i.Ã, 
-
- $(,048.fileÃŸÃ¿gparse.c Ã Â 	 .@ A .textÃ©s.data(.bss.xdatat.pdata<.rdataMN[i } getc strcmp Â free Â Â« strchr Â· xpmatoui strlen strcat strncmp strcpy Ã Ã Ã¡ Ã® strncpy   $ . ? PParsePixelsxpmParseValuesxpmParseColorsxpmParseExtensionsxpmParseDataxpmColorKeys__imp_isspaceboundCheckingMallocxpmNextStringboundCheckingCallocxpmHashSlotxpmNextWordxpmNextUIxpmFreeColorTablexpmHashInternxpmGetStringboundCheckingReallocXpmFreeExtensionsxpmParseHeaderxpmGetCmtxpmHashTableInitxpmHashTableFreeWrFFrDat.o/     1346471174  0     0     100666  841       `
-+dÂÂ.text`ÃT P`.data@PÃ.bssÂPÃ.xdata
-<@0@.pdata
-H|@0@SHÂÃ¬ÂHÂÃLÂD$0HÂÃHÂT$pÃD$0ÃšÂ
-Ãu.LÂD$0HÂT$pHÂÃÃšHÂL$pÂD$(ÃšHÂL$0ÃšÂD$(HÂÃÂ[Ã0`!7EO
-+.fileÃŸÃ¿gWrFFrDat.c .text`.data.bss.xdata
-.pdata
- 3 L \ kXpmWriteFileFromDataXpmCreateXpmImageFromDataXpmWriteFileFromXpmImageXpmFreeXpmImageXpmFreeXpmInfo
-+WrFFrI.o/       1346471174  0     0     100666  3804      `
-+dÂÂ
-%.textÃÃ@ P`.data@PÃ.bssÂPÃ.rdataÃÃ@P@.xdata$Â@0@.pdataÂžP
-@0@AWAVAUATUWVSHÂÃ¬hHÂ
-ÃIÂÃHÂÃLÂÂ$ÃÂÃÃšÂÃžÂZHÂ
-LÂÃ¡ÃšHÂ
-ÃHÂÃÂÂŒÃD$TÂº/LÂÃ¡ÃšHÂpHÂ
-ÃÂº.IDÃŽHÂÃ±ÃšHÂ
-ÃtCHÂ|$`HÂÃ²HÂÃ¹ÃšHÂÃ¹Âº.ÃšHÂ
-Ãt
-fÂÃ_HÂÃÂº.ÃšHÂ
-ÃuÃ«HÂÃŸÂº-HÂÃ±ÃšHÂ
-Ãt2HÂ|$`H9ÃŸt
-HÂÃ²HÂÃ¹ÃšHÂÃ¹Ã«Ã_HÂÃÂº-ÃšHÂ
-ÃuÃ«HÂÃŸHÂÂŒ$ÃÂÂHÂÂ$ÃE1Ã¶ÂÃ¶ÃAÂÃÃ¶ÃÂ
-ÃÃD$\HÂ8IÂÃ°HÂÃÃšEÂ
-Ã¶t HÂÂ$ÃLÂ@MÂ
-ÃtHÂZHÂÃÃšÂEDÂMHÂbHÂÃÂD$(ÂE
-ÂD$ DÂEÃšHÂÂŒ$ÃtHÂÂ$ÃÃ¶Â
-
-ÂT$\Â
-ÃÂ
-Ã²HÂ
-~IÂÃAÂžÂºÃšEÂ
-Ã¶t HÂÂ$ÃLÂ@MÂ
-ÃtHÂZHÂÃÃšÂE
-HÂ}Â
-ÃÂÂÃšLÂg0LÂ,@IÃÃ¥MÃ¥LÂHÂÂHÂÃ1Ã¶ÃšLÂL7MÂ
-ÃtHÂHÂÂHÂÃLÂ0ÃšHÂÃHÂÃŸ(uÃHÂ
-~IÂÃAÂžÂºLÂÃ§ÃšM9Ã¬ÂÂ¡IÂÃ0Ã«ÂHcÃHÂ5
-Â¹IÂ|ÃŸÃ³ÂŠÂ|ÂÃžÂÂÃœÃ¿Ã¿IÂ|ÃœHÂ5 Â¹Ã³ÂŠÂ
-hÃœÃ¿Ã¿HÂ$MÂÃ HÂÂ$`ÃšHÂ
-HÂÂ$`Ã¿HÂ
-ÃHÂÃÂÃD$TÃ©FÃœÃ¿Ã¿ÂJ(ÃD$\Â
-ÃÂ
-ÃŸÃ¿Ã¿Ã©
-ÃŸÃ¿Ã¿EÂ
-Ã¶t HÂÂ$ÃLÂBMÂ
-ÃtHÂZHÂÃÃšÂEDÂmÂULÂuLÂeÂÃÂD$XAÂ¯ÃÂT$PÂÃÃšHÂ
-ÃHÂD$8ÂÂÃ"HÂÃÂ|$PHÂD$0AÂ¿ÂÂÂl$XAÂEÃ¿HÂÃHÂÃHÂD$@HÂ¯Ã
-HD$0HÂD$HfÂHÂD$01ÃEÂ
-Ã­HÂÃt6ÂAÂÂHÂÃ±IÂÃšHÂÃHÃ®HÂ@HÃÃ IÂÃšA9ÃwÃHÂT$@HÂD$HMÂ$ÂLÂD$8HÂÂÃ"Ã@HÂÃ¹AÂÃÃšD;|$PuÂHÂÃ»EÂ
-Ã­tEÂl$XHÂ|$01Ã¶fÂAÂÂŽHÂÃ¹IÂÃšHÂÃHÃ¯HÂ@HÃÃ IÂÃšA9ÃµwÃAÂEÃ¿HÂÃHÂ¯Ã
-HD$0HÂD$0HÂL$8HÂÃÃ"Ã@ÃšHÂL$8ÃšÂD$\Â
-ÃÂÂHÂÂ$ÃÂB(HÂr0Â
-ÃtoÂÃšLÂfHÂ@MÂ,ÃÂLÂHÂÂHÂÃÃšÂ~HÂnÂ
-Ã¿t1Ã¶ÂLÂDÃµHÂÂ HÂÃHÂÃÃš9Ã·wÃ€M9Ã¬LÂÃŠtIÂÃÃ«Â¶MÂÃ HÂÃ©Â¡ÃœÃ¿Ã¿HÂ
-Â§IÂÃAÂž
-ÂºÃšHÂ
-ÂµIÂÃAÂžÂº1Ã¶ÃšÂ|$Tt-Ã¿HÂÃ0H9ÃtHÂÃÃšÂÃ°HÂÃh[^_]A\A]A^A_ÃHÂÃÃ¿Ã«ÃE1Ã¶Ã©ÂÃ»Ã¿Ã¿HÂ
-vIÂÃAÂžÂºÃšÃ©Ã¯Ã»Ã¿Ã¿DÂJ$DÂB HÂoHÂÃÃšÃ©ÃÃ»Ã¿Ã¿Ã¿HÂ5HÂX0ÃD$TÃ©ÃœÃºÃ¿Ã¿ÂŸÃ¿Ã¿Ã¿Ã¿Ã©tÃ¿Ã¿Ã¿ÂŸÃœÃ¿Ã¿Ã¿Ã©LÃ¿Ã¿Ã¿ffff.ÂVSHÂÃ¬ÂšHÂÂ$Ã HÂÃLÂÃMÂÃLÂÂ$ÂHÂ\$ ÃšÂ
-Ãu<HÂ
-ÃtKHÂL$@HÂÃÃšLÂD$@HÂÂ$ÂHÂÃ±ÃšyÃ¹Ã¿Ã¿HÂÂ$ÂÂD$8ÃšÂD$8HÂÃÂš[^Ãf.ÂHÂÂ$ÂE1ÃHÂÃ±Ãš=Ã¹Ã¿Ã¿Ã«ÃÂÂÂÂÂÂÂÂÂÂÂimage_name.Zcompress > "%s"w.gzgzip -q > "%s"/* XPM */
-+static char * %s[] = {
-+/*%s*/
-+"%d %d %d %d %d %d XPMEXT",
-+"%s	%s %s%s,
-+,
-+"XPMEXT %s",
-+"%s",
-+"XPMENDEXT"};
-+
-+Â
-0
-`
-+p	PÃÃÃ Ã°		0`#0Ã
-+;
-Cd|ÂÂÂŒÃÃ«C
-N
-k
-s
-Â
-Â
-Ã
-ÃÃ·
-Ã¿
-*
-4
-EL
-X
-i
-Â
-Â¿
-Ã
-Ã£
-Ãª
-ÃžF
-N
-v
-ÃŸ
-
-0
-nÂÂ§ ÃŠ
-Ã®
-
-
-0
-<
-OV
-kxÂ!ÂšÂ¹
-ÃÃ 
-Ãš
-Ã³Ãº
-X"n#Â$
-
-
-.fileÃŸÃ¿gWrFFrI.c 
-0 .textÃ
-@.data.bss.rdataÂ¹.xdata$.pdata3@M^fwrite fputs strlen fopen strrchr strchr strcpy fprintf sprintf l strncpy free fclose Â Â ÂŠ Â¶XpmWriteFileFromXpmImageXpmWriteFileFromImagexpmColorKeys__imp__popen__imp___iob_func__imp__pcloseboundCheckingMallocXpmCreateXpmImageFromImagexpmSetInfoXpmFreeXpmImage
-\ No newline at end of file
-diff -Naur vim73.orig/src/xpm/x64/lib/libXpm.lib vim73/src/xpm/x64/lib/libXpm.lib
---- vim73.orig/src/xpm/x64/lib/libXpm.lib	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/x64/lib/libXpm.lib	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,469 @@
-+!<arch>
-+/               1345988052              0       12499     `
-+u_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_Â_ÂÂÃšÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÃnÃ@Ã@Ã@Ã@Ã@Ã@Ã@Ã@Ã@Ã@Ã@Ã@Ã@Ã@ÃŒÂÃŒÂÃŒÂÃŒÂ
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-Â
-ÂÂžÃÂžÃÂžÃÂžÃÂžÃÃÃÃlÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ§2Ã§2Ã§2Ã§2Ã¯ÃÃ¯ÃÃŽ<ÃŽ<ÃŽ<ÃŽ<BBBBBBBBBBBBBBBBBBBBBBBBBB;Ã¶;Ã¶FpFpP`P`P`ÂÃÂÃÂÃÂÃÂŽ
-+ÂŽ
-+ÂŽ
-+ÃÂÃÂÃÂÃÂÃÂÃÂ??_C@_01NOFIACDB@w?$AA@??_C@_02DKCKIIND@?$CFs?$AA@??_C@_02HCDJPINJ@?4Z?$AA@??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_03OOBEOJGI@?$CC?$CFs?$AA@??_C@_04ICMOPAOK@?$CFs?0?6?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0L@NDIFBCJA@image_name?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@XpmWriteFileFromImageXpmWriteFileFromXpmImageXpmWriteFileFromData??_C@_01CLKCMJKC@?5?$AA@??_C@_01GOHFPIOK@m?$AA@??_C@_01JEJKBAGA@g?$AA@??_C@_01LKDEMHDF@s?$AA@??_C@_01PAPGNFGE@c?$AA@??_C@_02PGAMAILP@g4?$AA@??_C@_06HPJDNAON@_width?$AA@??_C@_06MOPGFMAJ@XPMEXT?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@??_C@_07MJPPKBHL@_height?$AA@??_C@_08FOGANHJK@_ncolors?$AA@??_C@_09OINMEHGD@XPMENDEXT?$AA@??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@xpmColorKeysxpmParseColorsxpmParseDataxpmParseExtensionsxpmParseValuesXpmWriteFileFromBufferXAllocColorXCreateImageXDefaultColormapXDefaultDepthXDefaultScreenXDefaultVisualXDestroyImageXFreeColorsXImageFreeXParseColorXQueryColorsboundCheckingCallocboundCheckingMallocboundCheckingRealloc??_C@_04OHJIHAFH@None?$AA@??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@XpmCreateXpmImageFromImage??_C@_03CILPFPCI@Tan?$AA@??_C@_03PADCEAKC@Red?$AA@??_C@_04CAKOHOCJ@Blue?$AA@??_C@_04GDBIAANM@grey?$AA@??_C@_04HPKDHBOB@snow?$AA@??_C@_04ICNCCCFD@Cyan?$AA@??_C@_04IDKACLOG@Pink?$AA@??_C@_04KFNAIHAE@Gray?$AA@??_C@_04MJMKNOJB@peru?$AA@??_C@_04PABHPHAJ@Gold?$AA@??_C@_04PCFHDAMD@Plum?$AA@??_C@_04PDAFKIPB@Navy?$AA@??_C@_05BAFHKIGF@Gray8?$AA@??_C@_05BPGNDIAE@Black?$AA@??_C@_05CKEFAMIJ@Azure?$AA@??_C@_05EGDKJJDN@Brown?$AA@??_C@_05EOEDPHMI@Beige?$AA@??_C@_05GGOIJPPE@Green?$AA@??_C@_05IONEIFOL@Gray6?$AA@??_C@_05JEMJJCE@Gray9?$AA@??_C@_05JHMPLEKK@Gray7?$AA@??_C@_05JNPICLKJ@Coral?$AA@??_C@_05KFPJNGCI@Gray5?$AA@??_C@_05LMOCOHGJ@Gray4?$AA@??_C@_05MBJFBDCM@Gray1?$AA@??_C@_05MLLCELJD@linen?$AA@??_C@_05NIIOCCGN@Gray0?$AA@??_C@_05NNJJIMHF@ivory?$AA@??_C@_05OKLIEAOP@Gray2?$AA@??_C@_05PBMHPMDG@Khaki?$AA@??_C@_05PDKDHBKO@Gray3?$AA@??_C@_05PIEKEAEL@Wheat?$AA@??_C@_05PLKILNHI@White?$AA@??_C@_06CAMJFDIO@Gray68?$AA@??_C@_06CBALDJLJ@Gray78?$AA@??_C@_06CCIPONNH@Gray58?$AA@??_C@_06CDENIHOA@Gray48?$AA@??_C@_06CFIGEFAL@Gray18?$AA@??_C@_06CGACJBGF@Gray38?$AA@??_C@_06CHMAPLFC@Gray28?$AA@??_C@_06CKFHHOIE@Gray88?$AA@??_C@_06CLJFBELD@Gray98?$AA@??_C@_06DCIOCFPC@Gray99?$AA@??_C@_06DDEMEPMF@Gray89?$AA@??_C@_06DIBAAIPI@Gray79?$AA@??_C@_06DJNCGCMP@Gray69?$AA@??_C@_06DKFGLGKB@Gray49?$AA@??_C@_06DLJENMJG@Gray59?$AA@??_C@_06DMJNHEEK@Gray19?$AA@??_C@_06DONLMKBD@Gray29?$AA@??_C@_06DPBJKACE@Gray39?$AA@??_C@_06GCLALPIA@Violet?$AA@??_C@_06GEHONCEN@purple?$AA@??_C@_06ICCAKDNH@Yellow?$AA@??_C@_06IGOCDBII@Gray84?$AA@??_C@_06IHCAFLLP@Gray94?$AA@??_C@_06IJDDAKAH@Gray14?$AA@??_C@_06IKLHNOGJ@Gray34?$AA@??_C@_06ILHFLEFO@Gray24?$AA@??_C@_06IMHMBMIC@Gray64?$AA@??_C@_06INLOHGLF@Gray74?$AA@??_C@_06IODKKCNL@Gray54?$AA@??_C@_06IPPIMIOM@Gray44?$AA@??_C@_06JACIDLEG@Gray15?$AA@??_C@_06JCGOIFBP@Gray25?$AA@??_C@_06JDKMOPCI@Gray35?$AA@??_C@_06JEKFEHPE@Gray75?$AA@??_C@_06JFGHCNMD@Gray65?$AA@??_C@_06JGODPJKN@Gray45?$AA@??_C@_06JHCBJDJK@Gray55?$AA@??_C@_06JODLGKPO@Gray95?$AA@??_C@_06JOHNHAPC@Salmon?$AA@??_C@_06JPPJAAMJ@Gray85?$AA@??_C@_06KAFIOHJN@Gray27?$AA@??_C@_06KBJKINKK@Gray37?$AA@??_C@_06KCBOFJME@Gray17?$AA@??_C@_06KENFJLCP@Gray47?$AA@??_C@_06KFBHPBBI@Gray57?$AA@??_C@_06KGJDCFHG@Gray77?$AA@??_C@_06KHFBEPEB@Gray67?$AA@??_C@_06KMANAIHM@Gray97?$AA@??_C@_06KNMPGCEL@Gray87?$AA@??_C@_06LENEFDAK@Gray86?$AA@??_C@_06LFBGDJDN@Gray96?$AA@??_C@_06LIIBLMOL@Gray36?$AA@??_C@_06LJEDNGNM@Gray26?$AA@??_C@_06LJLNHCPM@Bisque?$AA@??_C@_06LLAFGIIF@Gray16?$AA@??_C@_06LMAMMAFJ@Gray56?$AA@??_C@_06LMIDBFFB@Orange?$AA@??_C@_06LNMOKKGO@Gray46?$AA@??_C@_06LOEKHOAA@Gray66?$AA@??_C@_06LPIIBEDH@Gray76?$AA@??_C@_06MALJFOCL@Gray43?$AA@??_C@_06MBHLDEBM@Gray53?$AA@??_C@_06MCPPOAHC@Gray73?$AA@??_C@_06MDDNIKEF@Gray63?$AA@??_C@_06MEDECCJJ@Gray23?$AA@??_C@_06MFPGEIKO@Gray33?$AA@??_C@_06MGHCJMMA@Gray13?$AA@??_C@_06MIGBMNHI@Gray93?$AA@??_C@_06MJKDKHEP@Gray83?$AA@??_C@_06NALDPNEI@tomato?$AA@??_C@_06NALIJGAO@Gray82?$AA@??_C@_06NBHKPMDJ@Gray92?$AA@??_C@_06NIGAAFFN@Gray52?$AA@??_C@_06NJKCGPGK@Gray42?$AA@??_C@_06NKCGLLAE@Gray62?$AA@??_C@_06NLOENBDD@Gray72?$AA@??_C@_06NMEFHGAJ@Maroon?$AA@??_C@_06NMONHJOP@Gray32?$AA@??_C@_06NNCPBDNI@Gray22?$AA@??_C@_06NPGJKNIB@Gray12?$AA@??_C@_06OCIOPEIM@Gray80?$AA@??_C@_06ODEMJOLL@Gray90?$AA@??_C@_06OIBANJIG@Gray60?$AA@??_C@_06OJNCLDLB@Gray70?$AA@??_C@_06OKFGGHNP@Gray50?$AA@??_C@_06OLJEANOI@Gray40?$AA@??_C@_06OLNBEJPI@Sienna?$AA@??_C@_06ONFPMPAD@Gray10?$AA@??_C@_06OONLBLGN@Gray30?$AA@??_C@_06OPBJHBFK@Gray20?$AA@??_C@_06PAKNAFKG@Orchid?$AA@??_C@_06PAMJICPA@Gray71?$AA@??_C@_06PBALOIMH@Gray61?$AA@??_C@_06PCIPDMKJ@Gray41?$AA@??_C@_06PDENFGJO@Gray51?$AA@??_C@_06PEEEPOEC@Gray11?$AA@??_C@_06PGACEABL@Gray21?$AA@??_C@_06PHMACKCM@Gray31?$AA@??_C@_06PKFHKPPK@Gray91?$AA@??_C@_06PLJFMFMN@Gray81?$AA@??_C@_07BEDHGNF@DimGray?$AA@??_C@_07DHJFKJBB@HotPink?$AA@??_C@_07EGKCDIIG@Gray100?$AA@??_C@_07LFEAGNHO@Magenta?$AA@??_C@_07NPHLIBMI@Thistle?$AA@??_C@_07PJJBFELP@OldLace?$AA@??_C@_07PNJLOGGO@SkyBlue?$AA@??_C@_08BKNCNHLL@honeydew?$AA@??_C@_08DECOJLB@cornsilk?$AA@??_C@_08GKFCFKAC@DeepPink?$AA@??_C@_08KJABFMDC@NavyBlue?$AA@??_C@_08KJDCPJPL@lavender?$AA@??_C@_08MFJLKPPC@seashell?$AA@??_C@_08MPDGLOME@SeaGreen?$AA@??_C@_08OIIPPDDA@moccasin?$AA@??_C@_09BIACIJCM@DarkKhaki?$AA@??_C@_09BPADAHOC@chocolate?$AA@??_C@_09CAIKIAKL@LightPink?$AA@??_C@_09CBPIIJBO@LightCyan?$AA@??_C@_09CGAPEKNC@CadetBlue?$AA@??_C@_09DEFDJNGA@SlateGray?$AA@??_C@_09EHCEAFM@Firebrick?$AA@??_C@_09GHIAHKFI@VioletRed?$AA@??_C@_09GLNHDDDA@IndianRed?$AA@??_C@_09GPKCMEJ@LightGray?$AA@??_C@_09HBGGELGD@RosyBrown?$AA@??_C@_09IDIENFGE@LightBlue?$AA@??_C@_09IGCCILNJ@LawnGreen?$AA@??_C@_09IPCNOKOO@DarkGreen?$AA@??_C@_09JHLANABP@burlywood?$AA@??_C@_09JIGGJDDI@PaleGreen?$AA@??_C@_09KDCNEHNA@OliveDrab?$AA@??_C@_09LBCNGEEN@SlateBlue?$AA@??_C@_09MENJEMGM@SteelBlue?$AA@??_C@_09MFNHBCHG@MintCream?$AA@??_C@_09MIGKOGAO@gainsboro?$AA@??_C@_09NCIGFANI@LimeGreen?$AA@??_C@_09NKNFPLIJ@RoyalBlue?$AA@??_C@_09ODOKIMGN@AliceBlue?$AA@??_C@_09OGGDAFEL@Goldenrod?$AA@??_C@_09OKCCEKJG@PeachPuff?$AA@??_C@_09PDBAPE@OrangeRed?$AA@??_C@_09PKEKPHNP@Turquoise?$AA@??_C@_09POIPCADB@MistyRose?$AA@??_C@_0BA@FICOLOP@MediumVioletRed?$AA@??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@??_C@_0L@CHNAEACO@chartreuse?$AA@??_C@_0L@EBAICJFO@DarkOrange?$AA@??_C@_0L@GDAICLDE@MediumBlue?$AA@??_C@_0L@GDPGEMPN@DarkSalmon?$AA@??_C@_0L@IKFOHFNE@PowderBlue?$AA@??_C@_0L@IKHGMDBB@Aquamarine?$AA@??_C@_0L@IPLDLLMK@DodgerBlue?$AA@??_C@_0L@JFDGDMCP@LightCoral?$AA@??_C@_0L@JIMBJDOA@PapayaWhip?$AA@??_C@_0L@JPDLIDIP@DarkViolet?$AA@??_C@_0L@KFIMMJOB@GhostWhite?$AA@??_C@_0L@NCGDJKJ@DarkOrchid?$AA@??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@??_C@_0L@PDJLLNIH@BlueViolet?$AA@??_C@_0L@PKPGDMJG@SandyBrown?$AA@??_C@_0M@BKMBPOEB@FloralWhite?$AA@??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@??_C@_0M@DMHCPCEI@Transparent?$AA@??_C@_0M@GCHHLGNN@GreenYellow?$AA@??_C@_0M@GODNHLND@ForestGreen?$AA@??_C@_0M@HNCGGICD@YellowGreen?$AA@??_C@_0M@IGPDELNF@LightYellow?$AA@??_C@_0M@JADEIAIP@SpringGreen?$AA@??_C@_0M@JKKOJIPA@LightSalmon?$AA@??_C@_0M@NBNLJNOB@SaddleBrown?$AA@??_C@_0M@PFCNBHOF@NavajoWhite?$AA@??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@??_C@_0N@BEMAIPGH@MediumOrchid?$AA@??_C@_0N@EPKOGBBA@MediumPurple?$AA@??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@??_C@_0N@ILIFGKIL@MidnightBlue?$AA@??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@??_C@_0O@DAMODFNL@PaleTurquoise?$AA@??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@??_C@_0O@KNAELIFM@PaleVioletRed?$AA@??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@??_C@_0O@OIOECAME@LavenderBlush?$AA@??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@??_C@_0P@LOKKLDIA@LightSlateGray?$AA@??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@xpmFreeRgbNamesxpmGetRGBfromNamexpmGetRgbNamexpmReadRgbNames??_C@_01KDCPPGHE@r?$AA@??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@XpmReadFileToImageXpmReadFileToXpmImageXpmReadFileToDataXpmReadFileToBuffer??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@??_C@_0L@GGDGBBNE@XpmSuccess?$AA@??_C@_0M@KNHHACKL@XpmNoMemory?$AA@??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@??_C@_0O@NCABLEEJ@XpmColorError?$AA@??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@XpmFreeXpmGetErrorStringXpmLibraryVersionxpmatouiXpmFreeXpmInfoxpmInitXpmInfoxpmSetInfoxpmSetInfoMaskXpmFreeXpmImagexpmInitXpmImagexpmHashInternxpmHashSlotxpmHashTableFreexpmHashTableInit??_C@_00CNPNBAHC@?$AA@??_C@_01DCLJPIOD@?$CB?$AA@??_C@_01EEMJAFIK@?6?$AA@??_C@_01GFHCPBMG@C?$AA@??_C@_01ICJEACDI@?$DL?$AA@??_C@_02CHHINNLG@?$CK?1?$AA@??_C@_02FMMEOLBI@?1?$CK?$AA@??_C@_02MLAGHBOD@?0?6?$AA@??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@??_C@_03PJGJBIFG@XPM?$AA@??_C@_04GPIBMJKI@XPM2?$AA@??_C@_04JEIEPLD@?5?8?$CI?6?$AA@??_C@_04JLHIKKNM@Lisp?$AA@??_C@_06GGEPMBCG@?$CIsetq?5?$AA@??_C@_07EPAHIEDI@_format?$AA@??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@xpmDataTypesxpmGetCmtxpmGetStringxpmNextStringxpmNextUIxpmNextWordxpmParseHeaderXpmCreateImageFromDataXpmCreateXpmImageFromDataXpmCreateImageFromBufferXpmCreateXpmImageFromBufferXpmCreateImageFromXpmImagexpmParseDataAndCreatexpmstrcasecmp??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@XpmCreateDataFromImageXpmCreateDataFromXpmImage??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@XpmCreateBufferFromImageXpmCreateBufferFromXpmImageXpmAttributesSizeXpmFreeAttributesXpmFreeExtensionsxpmFreeColorTablexpmInitAttributesxpmSetAttributes
-+/               1345988052              0       11841     `
-+Â_ÃšÂÂÂnÃ@ÃÂÃŒÂ
-ÃÂžÃÃlÃÃÃ2Ã§ÃÃ¯<ÃŽBÃ¶;pF`PÃÂ
-+ÂŽÂÃu
-
-
-
-
-
-
-
-
-
-
-
-
-+	
-
-
-
-
-??_C@_00CNPNBAHC@?$AA@??_C@_01CLKCMJKC@?5?$AA@??_C@_01DCLJPIOD@?$CB?$AA@??_C@_01EEMJAFIK@?6?$AA@??_C@_01GFHCPBMG@C?$AA@??_C@_01GOHFPIOK@m?$AA@??_C@_01ICJEACDI@?$DL?$AA@??_C@_01JEJKBAGA@g?$AA@??_C@_01KDCPPGHE@r?$AA@??_C@_01LKDEMHDF@s?$AA@??_C@_01NOFIACDB@w?$AA@??_C@_01PAPGNFGE@c?$AA@??_C@_02CHHINNLG@?$CK?1?$AA@??_C@_02DKCKIIND@?$CFs?$AA@??_C@_02FMMEOLBI@?1?$CK?$AA@??_C@_02HCDJPINJ@?4Z?$AA@??_C@_02MLAGHBOD@?0?6?$AA@??_C@_02PGAMAILP@g4?$AA@??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_03CILPFPCI@Tan?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@??_C@_03OOBEOJGI@?$CC?$CFs?$AA@??_C@_03PADCEAKC@Red?$AA@??_C@_03PJGJBIFG@XPM?$AA@??_C@_04CAKOHOCJ@Blue?$AA@??_C@_04GDBIAANM@grey?$AA@??_C@_04GPIBMJKI@XPM2?$AA@??_C@_04HPKDHBOB@snow?$AA@??_C@_04ICMOPAOK@?$CFs?0?6?$AA@??_C@_04ICNCCCFD@Cyan?$AA@??_C@_04IDKACLOG@Pink?$AA@??_C@_04JEIEPLD@?5?8?$CI?6?$AA@??_C@_04JLHIKKNM@Lisp?$AA@??_C@_04KFNAIHAE@Gray?$AA@??_C@_04MJMKNOJB@peru?$AA@??_C@_04OHJIHAFH@None?$AA@??_C@_04PABHPHAJ@Gold?$AA@??_C@_04PCFHDAMD@Plum?$AA@??_C@_04PDAFKIPB@Navy?$AA@??_C@_05BAFHKIGF@Gray8?$AA@??_C@_05BPGNDIAE@Black?$AA@??_C@_05CKEFAMIJ@Azure?$AA@??_C@_05EGDKJJDN@Brown?$AA@??_C@_05EOEDPHMI@Beige?$AA@??_C@_05GGOIJPPE@Green?$AA@??_C@_05IONEIFOL@Gray6?$AA@??_C@_05JEMJJCE@Gray9?$AA@??_C@_05JHMPLEKK@Gray7?$AA@??_C@_05JNPICLKJ@Coral?$AA@??_C@_05KFPJNGCI@Gray5?$AA@??_C@_05LMOCOHGJ@Gray4?$AA@??_C@_05MBJFBDCM@Gray1?$AA@??_C@_05MLLCELJD@linen?$AA@??_C@_05NIIOCCGN@Gray0?$AA@??_C@_05NNJJIMHF@ivory?$AA@??_C@_05OKLIEAOP@Gray2?$AA@??_C@_05PBMHPMDG@Khaki?$AA@??_C@_05PDKDHBKO@Gray3?$AA@??_C@_05PIEKEAEL@Wheat?$AA@??_C@_05PLKILNHI@White?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_06CAMJFDIO@Gray68?$AA@??_C@_06CBALDJLJ@Gray78?$AA@??_C@_06CCIPONNH@Gray58?$AA@??_C@_06CDENIHOA@Gray48?$AA@??_C@_06CFIGEFAL@Gray18?$AA@??_C@_06CGACJBGF@Gray38?$AA@??_C@_06CHMAPLFC@Gray28?$AA@??_C@_06CKFHHOIE@Gray88?$AA@??_C@_06CLJFBELD@Gray98?$AA@??_C@_06DCIOCFPC@Gray99?$AA@??_C@_06DDEMEPMF@Gray89?$AA@??_C@_06DIBAAIPI@Gray79?$AA@??_C@_06DJNCGCMP@Gray69?$AA@??_C@_06DKFGLGKB@Gray49?$AA@??_C@_06DLJENMJG@Gray59?$AA@??_C@_06DMJNHEEK@Gray19?$AA@??_C@_06DONLMKBD@Gray29?$AA@??_C@_06DPBJKACE@Gray39?$AA@??_C@_06GCLALPIA@Violet?$AA@??_C@_06GEHONCEN@purple?$AA@??_C@_06GGEPMBCG@?$CIsetq?5?$AA@??_C@_06HPJDNAON@_width?$AA@??_C@_06ICCAKDNH@Yellow?$AA@??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@??_C@_06IGOCDBII@Gray84?$AA@??_C@_06IHCAFLLP@Gray94?$AA@??_C@_06IJDDAKAH@Gray14?$AA@??_C@_06IKLHNOGJ@Gray34?$AA@??_C@_06ILHFLEFO@Gray24?$AA@??_C@_06IMHMBMIC@Gray64?$AA@??_C@_06INLOHGLF@Gray74?$AA@??_C@_06IODKKCNL@Gray54?$AA@??_C@_06IPPIMIOM@Gray44?$AA@??_C@_06JACIDLEG@Gray15?$AA@??_C@_06JCGOIFBP@Gray25?$AA@??_C@_06JDKMOPCI@Gray35?$AA@??_C@_06JEKFEHPE@Gray75?$AA@??_C@_06JFGHCNMD@Gray65?$AA@??_C@_06JGODPJKN@Gray45?$AA@??_C@_06JHCBJDJK@Gray55?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_06JODLGKPO@Gray95?$AA@??_C@_06JOHNHAPC@Salmon?$AA@??_C@_06JPPJAAMJ@Gray85?$AA@??_C@_06KAFIOHJN@Gray27?$AA@??_C@_06KBJKINKK@Gray37?$AA@??_C@_06KCBOFJME@Gray17?$AA@??_C@_06KENFJLCP@Gray47?$AA@??_C@_06KFBHPBBI@Gray57?$AA@??_C@_06KGJDCFHG@Gray77?$AA@??_C@_06KHFBEPEB@Gray67?$AA@??_C@_06KMANAIHM@Gray97?$AA@??_C@_06KNMPGCEL@Gray87?$AA@??_C@_06LENEFDAK@Gray86?$AA@??_C@_06LFBGDJDN@Gray96?$AA@??_C@_06LIIBLMOL@Gray36?$AA@??_C@_06LJEDNGNM@Gray26?$AA@??_C@_06LJLNHCPM@Bisque?$AA@??_C@_06LLAFGIIF@Gray16?$AA@??_C@_06LMAMMAFJ@Gray56?$AA@??_C@_06LMIDBFFB@Orange?$AA@??_C@_06LNMOKKGO@Gray46?$AA@??_C@_06LOEKHOAA@Gray66?$AA@??_C@_06LPIIBEDH@Gray76?$AA@??_C@_06MALJFOCL@Gray43?$AA@??_C@_06MBHLDEBM@Gray53?$AA@??_C@_06MCPPOAHC@Gray73?$AA@??_C@_06MDDNIKEF@Gray63?$AA@??_C@_06MEDECCJJ@Gray23?$AA@??_C@_06MFPGEIKO@Gray33?$AA@??_C@_06MGHCJMMA@Gray13?$AA@??_C@_06MIGBMNHI@Gray93?$AA@??_C@_06MJKDKHEP@Gray83?$AA@??_C@_06MOPGFMAJ@XPMEXT?$AA@??_C@_06NALDPNEI@tomato?$AA@??_C@_06NALIJGAO@Gray82?$AA@??_C@_06NBHKPMDJ@Gray92?$AA@??_C@_06NIGAAFFN@Gray52?$AA@??_C@_06NJKCGPGK@Gray42?$AA@??_C@_06NKCGLLAE@Gray62?$AA@??_C@_06NLOENBDD@Gray72?$AA@??_C@_06NMEFHGAJ@Maroon?$AA@??_C@_06NMONHJOP@Gray32?$AA@??_C@_06NNCPBDNI@Gray22?$AA@??_C@_06NPGJKNIB@Gray12?$AA@??_C@_06OCIOPEIM@Gray80?$AA@??_C@_06ODEMJOLL@Gray90?$AA@??_C@_06OIBANJIG@Gray60?$AA@??_C@_06OJNCLDLB@Gray70?$AA@??_C@_06OKFGGHNP@Gray50?$AA@??_C@_06OLJEANOI@Gray40?$AA@??_C@_06OLNBEJPI@Sienna?$AA@??_C@_06ONFPMPAD@Gray10?$AA@??_C@_06OONLBLGN@Gray30?$AA@??_C@_06OPBJHBFK@Gray20?$AA@??_C@_06PAKNAFKG@Orchid?$AA@??_C@_06PAMJICPA@Gray71?$AA@??_C@_06PBALOIMH@Gray61?$AA@??_C@_06PCIPDMKJ@Gray41?$AA@??_C@_06PDENFGJO@Gray51?$AA@??_C@_06PEEEPOEC@Gray11?$AA@??_C@_06PGACEABL@Gray21?$AA@??_C@_06PHMACKCM@Gray31?$AA@??_C@_06PKFHKPPK@Gray91?$AA@??_C@_06PLJFMFMN@Gray81?$AA@??_C@_07BEDHGNF@DimGray?$AA@??_C@_07DHJFKJBB@HotPink?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_07EGKCDIIG@Gray100?$AA@??_C@_07EPAHIEDI@_format?$AA@??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_07LFEAGNHO@Magenta?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@??_C@_07MJPPKBHL@_height?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_07NPHLIBMI@Thistle?$AA@??_C@_07PJJBFELP@OldLace?$AA@??_C@_07PNJLOGGO@SkyBlue?$AA@??_C@_08BKNCNHLL@honeydew?$AA@??_C@_08DECOJLB@cornsilk?$AA@??_C@_08FOGANHJK@_ncolors?$AA@??_C@_08GKFCFKAC@DeepPink?$AA@??_C@_08KJABFMDC@NavyBlue?$AA@??_C@_08KJDCPJPL@lavender?$AA@??_C@_08MFJLKPPC@seashell?$AA@??_C@_08MPDGLOME@SeaGreen?$AA@??_C@_08OIIPPDDA@moccasin?$AA@??_C@_09BIACIJCM@DarkKhaki?$AA@??_C@_09BPADAHOC@chocolate?$AA@??_C@_09CAIKIAKL@LightPink?$AA@??_C@_09CBPIIJBO@LightCyan?$AA@??_C@_09CGAPEKNC@CadetBlue?$AA@??_C@_09DEFDJNGA@SlateGray?$AA@??_C@_09EHCEAFM@Firebrick?$AA@??_C@_09GHIAHKFI@VioletRed?$AA@??_C@_09GLNHDDDA@IndianRed?$AA@??_C@_09GPKCMEJ@LightGray?$AA@??_C@_09HBGGELGD@RosyBrown?$AA@??_C@_09IDIENFGE@LightBlue?$AA@??_C@_09IGCCILNJ@LawnGreen?$AA@??_C@_09IPCNOKOO@DarkGreen?$AA@??_C@_09JHLANABP@burlywood?$AA@??_C@_09JIGGJDDI@PaleGreen?$AA@??_C@_09KDCNEHNA@OliveDrab?$AA@??_C@_09LBCNGEEN@SlateBlue?$AA@??_C@_09MENJEMGM@SteelBlue?$AA@??_C@_09MFNHBCHG@MintCream?$AA@??_C@_09MIGKOGAO@gainsboro?$AA@??_C@_09NCIGFANI@LimeGreen?$AA@??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@??_C@_09NKNFPLIJ@RoyalBlue?$AA@??_C@_09ODOKIMGN@AliceBlue?$AA@??_C@_09OGGDAFEL@Goldenrod?$AA@??_C@_09OINMEHGD@XPMENDEXT?$AA@??_C@_09OKCCEKJG@PeachPuff?$AA@??_C@_09PDBAPE@OrangeRed?$AA@??_C@_09PKEKPHNP@Turquoise?$AA@??_C@_09POIPCADB@MistyRose?$AA@??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BA@FICOLOP@MediumVioletRed?$AA@??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0L@CHNAEACO@chartreuse?$AA@??_C@_0L@EBAICJFO@DarkOrange?$AA@??_C@_0L@GDAICLDE@MediumBlue?$AA@??_C@_0L@GDPGEMPN@DarkSalmon?$AA@??_C@_0L@GGDGBBNE@XpmSuccess?$AA@??_C@_0L@IKFOHFNE@PowderBlue?$AA@??_C@_0L@IKHGMDBB@Aquamarine?$AA@??_C@_0L@IPLDLLMK@DodgerBlue?$AA@??_C@_0L@JFDGDMCP@LightCoral?$AA@??_C@_0L@JIMBJDOA@PapayaWhip?$AA@??_C@_0L@JPDLIDIP@DarkViolet?$AA@??_C@_0L@KFIMMJOB@GhostWhite?$AA@??_C@_0L@NCGDJKJ@DarkOrchid?$AA@??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@??_C@_0L@NDIFBCJA@image_name?$AA@??_C@_0L@PDJLLNIH@BlueViolet?$AA@??_C@_0L@PKPGDMJG@SandyBrown?$AA@??_C@_0M@BKMBPOEB@FloralWhite?$AA@??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@??_C@_0M@DMHCPCEI@Transparent?$AA@??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0M@GCHHLGNN@GreenYellow?$AA@??_C@_0M@GODNHLND@ForestGreen?$AA@??_C@_0M@HNCGGICD@YellowGreen?$AA@??_C@_0M@IGPDELNF@LightYellow?$AA@??_C@_0M@JADEIAIP@SpringGreen?$AA@??_C@_0M@JKKOJIPA@LightSalmon?$AA@??_C@_0M@KNHHACKL@XpmNoMemory?$AA@??_C@_0M@NBNLJNOB@SaddleBrown?$AA@??_C@_0M@PFCNBHOF@NavajoWhite?$AA@??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@??_C@_0N@BEMAIPGH@MediumOrchid?$AA@??_C@_0N@EPKOGBBA@MediumPurple?$AA@??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@??_C@_0N@ILIFGKIL@MidnightBlue?$AA@??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@??_C@_0O@DAMODFNL@PaleTurquoise?$AA@??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@??_C@_0O@KNAELIFM@PaleVioletRed?$AA@??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@??_C@_0O@NCABLEEJ@XpmColorError?$AA@??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@??_C@_0O@OIOECAME@LavenderBlush?$AA@??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@??_C@_0P@LOKKLDIA@LightSlateGray?$AA@??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@XAllocColorXCreateImageXDefaultColormapXDefaultDepthXDefaultScreenXDefaultVisualXDestroyImageXFreeColorsXImageFreeXParseColorXQueryColorsXpmAttributesSizeXpmCreateBufferFromImageXpmCreateBufferFromXpmImageXpmCreateDataFromImageXpmCreateDataFromXpmImageXpmCreateImageFromBufferXpmCreateImageFromDataXpmCreateImageFromXpmImageXpmCreateXpmImageFromBufferXpmCreateXpmImageFromDataXpmCreateXpmImageFromImageXpmFreeXpmFreeAttributesXpmFreeExtensionsXpmFreeXpmImageXpmFreeXpmInfoXpmGetErrorStringXpmLibraryVersionXpmReadFileToBufferXpmReadFileToDataXpmReadFileToImageXpmReadFileToXpmImageXpmWriteFileFromBufferXpmWriteFileFromDataXpmWriteFileFromImageXpmWriteFileFromXpmImageboundCheckingCallocboundCheckingMallocboundCheckingReallocxpmColorKeysxpmDataTypesxpmFreeColorTablexpmFreeRgbNamesxpmGetCmtxpmGetRGBfromNamexpmGetRgbNamexpmGetStringxpmHashInternxpmHashSlotxpmHashTableFreexpmHashTableInitxpmInitAttributesxpmInitXpmImagexpmInitXpmInfoxpmNextStringxpmNextUIxpmNextWordxpmParseColorsxpmParseDataxpmParseDataAndCreatexpmParseExtensionsxpmParseHeaderxpmParseValuesxpmReadRgbNamesxpmSetAttributesxpmSetInfoxpmSetInfoMaskxpmatouixpmstrcasecmp
-+WrFFrI.obj/     1345988051              100666  12566     `
-+dÂ>Ã%:PQÃ.drectve]Ã	
-+.debug$Sp!
-+@B.textÃÂ
-+T
- P`.pdata
-Â
-ÂŠ
-@0@.xdataÃ
-Ã
-@0@.pdata
-Ã²
-ÃŸ
-@0@.xdata$
-
-@
-@0@.pdata
-^
-j
-@0@.xdata
-Â
-@0@.rdataÂ
-@0@.rdataÂ
-@0@.rdataÂ
-@0@.textdÂ£
- P`.pdata
-Wc@0@.xdata
-Â@0@.rdataÂ@0@.rdataÂ @0@.textÂ Â¥E P`.pdata
-ÂÂ@0@.xdataÂ«Â»@0@.pdata
-ÃÃ¥@0@.xdata
-@0@.pdata
-=I@0@.xdata
-g@0@.rdatas@@@.rdataÂ@0@.rdataÂ@@@.text>ÂÃ P`.pdata
-jv@0@.xdata
-ÂÂ°@0@.rdataÂº@@@.rdataÃ@0@.rdataÃ@0@.rdataÃ@@@.rdataÃ@0@.textFÃ¢( P`.pdata
-FR@0@.xdatapÂ@0@.pdata
-ÂÂª@0@.xdataÃÃ@0@.pdata
-Ãº@0@.xdata$@0@.textÂ,Ã P`.pdata
-ÂÂŠ@0@.xdataÃ@0@.rdataÃ@0@.rdataÃ @@@.rdataÃš@0@.rdata
-Ã¯@@@.rdataÃŒ@@@.rdata"@@@.textÂ©&Ã P`.pdata
-eq@0@.xdataÂÂ@0@.pdata
-ÂœÃ@0@.xdataÃ§Ã»@0@.pdata
-%@0@.xdataC[@0@.rdata
-e@@@.textpÃ¯ P`.pdata
-#@0@.xdataA@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±b$d:\Develop\xpm\lib\WrFFrI.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerEÂ
-ÃÂÂžUATHÂÃ¬(HÂ\$@HÂt$HHÂ|$PLÂl$XLÂt$ LÂÃ¢LÂ5HÂÃ©EÂÃšÂMÂ$HÂHÂÃÃšIÂ\$IÂÃŸÂŸLÂ
-MÂ
-ÃtLÂHÂHÂÃÃšHÂÃHÂÃHÂÃ®uÃHÂHÂÃÃšIÂÃ0IÂÃ­uÂLÂt$ LÂl$XHÂ|$PHÂt$HHÂ\$@HÂÃ(A\]Ã³Ã/$G#O nv Â
-Â ÃÃ
-!
-Ã!
-+Ã€Ã
-t
-+
-+d	4
- B
-Ã
-+P",
-+	%s %s"%sDÂL$ HÂL$SUATAUAWHÂÃ¬@LÂÃ¡ÂÃAÂÃ©DÂÃªAÂXÃ¿AÂ¯ÃÂÃÃšLÂÃžHÂ
-ÃuAÂGÃœHÂÃ@A_A]A\][ÃHÂt$xHÂ|$8LÂt$0LÂÂŽ$ÂÃ"HÂpÂ
-ÃtxÂÃHÂÂ$ÂHÂD$ DHÂÃŸEÂ
-Ã­t9MÂÃ¥DÂLÂÃ
-HÂÃHÂ@HÃIÂÃÃšHÃœHÂÃIÂÃ¬uÃÂÂ¬$ÂLÂd$pÃ"HÂMÂÃIÂÃÃGÃšHÂl$ uÂÃ«HÂÂ$ÂEÂ
-Ã­t4ÂÃœIÂÃ­ffÂÂLÂÃHÂÃHÂ@HÃIÂÃÃšHÃ·HÂÃHÂÃ­uÃÃ"HÂMÂÃIÂÃÃFÃšIÂÃÃšLÂt$0HÂ|$8HÂt$x3ÃHÂÃ@A_A]A\][Ã-6Â€5Ã4Ã 5+1: B.d''-Y
-YÃ€TtOdrÃ°ÃÃ
-P
-0%s%s,
-+HÂl$ VHÂÃ¬ HÂÃ²HÂÃ©EÂ
-ÃtrHÂ\$0HÂ|$8LÂd$@EÂÃ fÂLÂHÂHÂÃÃšDÂ^HÂ^EÂ
-ÃtIÂÃ»LÂHÂHÂÃÃšHÂÃHÂÃ¯uÃ€HÂÃIÂÃ¬uÂžLÂd$@HÂ|$8HÂ\$0HÂHÂÃHÂl$HHÂÃ ^Ã©6T> XQ` ÂNÂ ÂÂ 99?!99
-KÂ99E!Ã
-+t499K99K
-+
-+T	
-+2`,
-+"XPMENDEXT",
-+"%s",
-+"XPMEXT %s"HÂ\$HÂt$ WHÂÃ¬0HÂH3ÃHÂÂ$ HÂÃLÂÃHÂ
-ÃuÃšHÂÃ0HÂCÃ©ÃHÂÃÃ¿3ÃIÂÃžÃ²Â®HÃ·ÃHÃ¿ÃÂÃ¹HÂÃ~IÂAÃŸHÂ5Â¹HcÃžIÃžÃ³ÂŠu0HÂHÂL$ ÃšHÂHÂL$ ÃšHÂCHÂ
-ÃuSÂÃÃ¿Ã«vÂÃº~QÂBÃœHÂ5Â¹HcÃžIÃžÃ³ÂŠu8HÂHÂL$ ÃšHÂHÂL$ ÃšHÂCHÂ
-ÃuÂÃÃ¿Ã«(ÃÃ«
-HÂIÂÃÃšHÂCHÂ
-ÃtÂÃ3ÃHÂÂ$ H3ÃÃšLÂÂ$0IÂ[ IÂs(IÂÃ£_Ãr0q`pvmÂjÂiÂfÂ®eÃbÃjÃiÃfÃŒi_%s>WW]$dK4JF
-p ^gzip -q > "%s".gzwcompress > "%s".ZHÂÃ¬(ÂÂÃštÂÃžu1HÂIHÂÃ(Ã©HÂ\$ HÂYÃšHÂÃ0H;ÃtHÂÃÃšHÂ\$ HÂÃ(ÃÂ'q8ÂAFvv|!
-vv
-Â
-AvvÂ!4
-v
-vÂ
-vvÂBHÂ\$HÂl$HÂt$HÂ|$ ATHÂÃ¬0IÂÃLÂÃ¢HÂÃ¹ÂŸMÂ
-Ãt
-AÂº!sÂÃ®Ã«3Ã­HÂ
-ÃtAÂº!
-+sAÂy(u3Ã¶HÂÃšÂ
-Ã­tLÂCMÂ
-ÃtHÂHÂÃÃšAÂD$EÂL$EÂ$ÂD$(AÂD$
-HÂHÂÃÂD$ ÃšHÂ
-Ãt
-Ã¶tDÂK$DÂC HÂHÂÃÃšÂ
-Ã¶tHÂHÂÃÃšHÂHÂÃÃšÂ
-Ã­tLÂCMÂ
-ÃtHÂHÂÃÃšEÂD$
-IÂT$HÂÃÃšÂ
-Ã­tLÂCMÂ
-ÃtHÂHÂÃÃšIÂD$EÂL$EÂD$AÂ$HÂD$(IÂD$HÂÃHÂD$ ÃšÂ
-Ãu%Â
-Ã¶tDÂC(HÂS0HÂÃÃšHÂHÂÃÃš3ÃHÂ\$@HÂl$HHÂt$PHÂ|$XHÂÃ0A\ÃRÂ¥W kÂ¢s ÂÂÂ Â¶ÂÂŸ ÃÂÃ Ã
-Ã  ÃŽÂ¢ÃŒ "Â¢* T'l9sÂ{ ÂÂÂÂ
-+t
-d
-+T	4RÃ};
-+ XPMEXT %d %d"%d %d %d %d/*%s*/
-+/* XPM */
-+static char * %s[] = {
-+@UVWHÂÃ¬pHÂH3ÃHÂÂ$`HÂÃ²HÂT$ IÂÃšHÂÃ¹ÃšÂ
-ÃÂ
-VHÂÂ$ÂšHÂ
-Ã¿ÂÃ®ÂP/HÂÃÃšHÂÃHÂ
-ÃuHÂÃÃ«HÃ¿ÃÂº.HÂÃÃšHÂ
-ÃtOHÂÂ$`H+ÃÂ¶HÃ¿ÃÂDÃ¿ÂÃuÃ²HÂÂ$`Âº.HÂÂ$`ÃšHÂ
-ÃtfÂÂº.HÂÃÃ_ÃšHÂ
-ÃuÃ«Âº-HÂÃÃšHÂ
-ÃtgHÂÂ$`H;Ãt"HÂÂ$`H+ÃÂÂ¶HÃ¿ÃÂDÃ¿ÂÃuÃ²HÂÂ$`Âº-HÂÃÃšHÂ
-Ãt&ÂÂº-HÂÃÃ_ÃšHÂ
-ÃuÃ«Ã«HÂ
-LÂÃHÂ\$(LÂÃHÂÃHÂÃÃšÂL$ ÂÃ©ÂÃžtÂÃ¹u HÂÃÃšÃ«ÃšHÂÃ0H;ÃtHÂÃÃšHÂÂ$ÂšÂÃHÂÂ$`H3ÃÃšHÂÃp_^]Ãr,WPÂ¿mÂŸÂ¥ÂŸÂŒÂŸÃÂŸÂŸ,ÂŸ:ÂœPÂhÂoqÂÂÂsÂÂ©ÃÃÂ®!8ÃÃ
-Âº8ÂÃÃÂŽ!4Â8Ã
-ÃÂº8ÃÃÂº
-
-Âp`P`^image_nameHÂ\$WHÂÃ¬ÂHÂÂ$ÃIÂÃMÂÃHÂÃºLÂL$0LÂÃIÂÃHÂ\$ ÃšÂ
-Ãu7HÂ
-ÃtHÂL$PHÂÃÃšLÂD$PÃ«E3ÃHÂT$0HÂÃÃšHÂL$0ÂÃÃšÂÃHÂÂ$Â HÂÃÂ_Ã/ÃEÃ\ÂšhÃÃÃÃ
-
-4
-p@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.textÃ;ÂOÃ .pdata
-Â«Ã(?.xdataÃÃÃ¬Ã
-%.pdata
-UÂªÂº:.xdata$'Ãœ)6O.pdata
-+1Â»|d.xdata	
-ÂšÂÂÃ¬w	.rdata
-+Â»0ÂÃÂ
-+.rdata
-IJ-ÃŠÂª
-fprintf .rdata
-ÂÃÂ¯0Ã
-Ã¯.text
-dÂnÂ§ÂÃŒ
- .pdata
-ÃµÂ¥ÃÃ²
-.xdata
-Â:Â§Â
-free .rdata>Â®Â:/.rdataÃžÂ»Kstrncpy k .textÂ FÂœÂŸ .pdata
-Ã£aÂŸÂ.xdataÂ£Ã
-ÂÂš.pdata
-/EÃÃ.xdata
-ÃÃQÂÃ.pdata
-O?[4Ã³.xdata
-q#B
-+.rdata".]Ã".rdataÃÃntO.rdataTU<w.text
->ÃÃºÃ Âš
- .pdata
-
-Ã»J06
-Â¶
-.xdata
-
-'ÃŽÃÃª
-Ã
-Ã¡ fopen .rdatajÂšÃLÃ².rdata ÃÂÂ¥Ã( _popen .rdata!1Ã¯~`B!sprintf .rdata"IÃ aZ".rdata#4ÃÂrÂ#Âª ÂµÃ .text$FÃÂ
-{ÃÃ$ .pdata%
-Ãµ04D$Ã¬%.xdata&ÃÃ©^$&.pdata'
-a.Âw$'.xdata(1?UÂ$.(.pdata)
-Ãº$ÂŸÃ§$D).xdata*Ã9Ã
-$X*fclose _pclose .text+ÂÂ¥ÃŠiÃ³m+ .pdata,
-
-+ÂªXÃ+z,.xdata-PÂ¢q+Â-.rdata.ÂºÂÂKÂ£..rdata/Ã
-UÃ/.rdata0Ã¹KkÃ£0.rdata1
-Â$l
-1.rdata2Â¿ÂŸÃ¹Â€=2.rdata3"ÂSÃÃg3.text4Â©Âa
-TÂŸ4 .pdata5
--Â
-[4Ã5.xdata6$Â¢Ã¯4Ã¹6.pdata7
-ÂŠÃÃ£Ã²47.xdata8ÂÂ³lq4=8.pdata9
-ÃH(V4_9.xdata:Â«Ã
-Â­Â§4:.rdata;
-Â\ÃœGÂ ;strchr strrchr $LN324.text<Ã-Ã¬Ã£Ã< .pdata=
-<Âpu<Ã=.xdata>kjÃŒ<Ãµ> # . $LN7<IWriteColors$pdata$5$WriteColors$chain$5$WriteColors$pdata$4$WriteColors$chain$4$WriteColors$pdata$WriteColors$unwind$WriteColors??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@??_C@_03OOBEOJGI@?$CC?$CFs?$AA@xpmColorKeysWritePixels$pdata$WritePixels$unwind$WritePixels??_C@_02DKCKIIND@?$CFs?$AA@??_C@_04ICMOPAOK@?$CFs?0?6?$AA@boundCheckingMallocWriteExtensions$pdata$3$WriteExtensions$chain$3$WriteExtensions$pdata$2$WriteExtensions$chain$2$WriteExtensions$pdata$WriteExtensions$unwind$WriteExtensions??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@OpenWriteFile$pdata$OpenWriteFile$unwind$OpenWriteFile__GSHandlerCheck??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_01NOFIACDB@w?$AA@??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_02HCDJPINJ@?4Z?$AA@__iob_func__security_cookie__security_check_cookiexpmDataClose$pdata$1$xpmDataClose$chain$1$xpmDataClose$pdata$0$xpmDataClose$chain$0$xpmDataClose$pdata$xpmDataClose$unwind$xpmDataClosexpmWriteFile$pdata$xpmWriteFile$unwind$xpmWriteFile??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@XpmWriteFileFromXpmImage$pdata$1$XpmWriteFileFromXpmImage$chain$1$XpmWriteFileFromXpmImage$pdata$0$XpmWriteFileFromXpmImage$chain$0$XpmWriteFileFromXpmImage$pdata$XpmWriteFileFromXpmImage$unwind$XpmWriteFileFromXpmImage??_C@_0L@NDIFBCJA@image_name?$AA@XpmWriteFileFromImage$pdata$XpmWriteFileFromImage$unwind$XpmWriteFileFromImageXpmFreeXpmImagexpmSetInfoXpmCreateXpmImageFromImageWrFFrDat.obj/   1345988051              100666  1117      `
-+dÂÃ%:Pc.drectve]Ã
-+.debug$Sp9@B.text`Â©	 P`.pdata
-1=@0@.xdata[@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\WrFFrDat.obj:<bÃ	x	xMicrosoft (R) Optimizing Compiler@SHÂÃ¬ÂHÂÃHÂÃLÂD$@HÂT$ HÂÃÃD$@ÃšÂ
-Ãu*LÂD$@HÂT$ HÂÃÃšHÂL$ ÂÃÃšHÂL$@ÃšÂÃHÂÃÂ[Ã%;GQ`
-		Ã²0@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.text`/ÂÃ§ .pdata
-Â»Â Ã«Ã.xdata\^]Ã5R a q Â $LN4Â€XpmWriteFileFromData$pdata$XpmWriteFileFromData$unwind$XpmWriteFileFromDataXpmFreeXpmInfoXpmFreeXpmImageXpmWriteFileFromXpmImageXpmCreateXpmImageFromData
-+parse.obj/      1345988051              100666  16304     `
-+dÂ7Ã%:PÃ·+Ã.drectve]Â¬
-+.debug$Sp		@B.rdatay	@0@.rdata{	@0@.rdata}	@0@.rdataÂ	@0@.rdataÂ	@0@.data(Â	Â¬	@@Ã.textÂžÃ	Â
-" P`.pdata
-ÃªÃ¶@0@.xdata 4@0@.rdata>@0@.rdataE@@@.rdata	M@@@.rdataV@@@.rdatag@@@.rdatao@0@.textÂ³v)
- P`.pdata
-AM@0@.xdata
-kÂ@0@.pdata
-Â¥Â±@0@.xdataÃÃ@0@.pdata
-Ãœ	@0@.xdata
-'C@0@.pdata
-am@0@.xdata
-ÂÂ§@0@.rdataÂ±@0@.textÂÂ³B
- P`.pdata
-(
-4
-@0@.xdataR
-j
-@0@.pdata
-Â
-Â
-@0@.xdataÂ²
-Ã
-@0@.pdata
-Ã 
-Ã¬
-@0@.xdata
-+"@0@.pdata
-@L@0@.xdata
-jÂ@0@.text-ÂÂœ#. P`.pdata
-Â%Â%@0@.xdataÂ³%Ã%@0@.pdata
-Ã©%Ãµ%@0@.xdata&#&@0@.pdata
-A&M&@0@.xdatak&&@0@.pdata
-Â&Â©&@0@.xdataÃ&Ã&@0@.pdata
-Ã¹&'@0@.xdata#'@0@.rdata
-+7'@@@.text A'a* P`.pdata
-+
-+@0@.xdata++;+@0@.pdata
-Y+e+@0@.xdataÂ+Â+@0@.pdata
-Â¹+Ã
-+@0@.xdataÃ£+@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±a#d:\Develop\xpm\lib\parse.obj:<bÃ	x	xMicrosoft (R) Optimizing Compilercgg4ms
-
-+ @SUVWATAUAVAWHÂÃ¬hHÂH3ÃHÂÂ$PÂÂ¹4LÂÂŒ$ÃLÂÂŽ$ÃšLÂÂ¬$Ã°HÂÂŽ$ÃHÂÂŒ$Ã IÂÃLÂ|$(LÂt$0LÂl$@MÂÃ¡LÂL$HHÂ\$8HÂT$ HÂÃ©Â
-*ÃšÂ
-ÃÂHÂÃHÂÃÃšÂ
-ÃÂÃ­IÂÃHÂÃÃšÂ
-ÃÂÃIÂÃHÂÃÃšÂ
-ÃÂÃHÂT$PAÂžHÂÃÃšÂÃÂ
-ÃÂÂŠAÂŒÂÃžu
-HÂT$PHÂ
-DÂÃÃšÂ
-ÃuAÂÃÃ«3ÃAÂEÂ
-Ãt+HÂÃHÂÃÃšÂ
-ÃtHÂÃHÂÃÃšÂ
-ÃuE3Ã€EÂ&3ÃÃ©RHÂL$PLÂÃÂÃÃšÂ
-ÃtHÂÃHÂÃÃšÂ
-ÃtAÂÃÃ«3ÃHÂT$PAÂžHÂÃAÂÃšÂÃžuHÂT$PHÂ
-DÂÃÃšÂ
-ÃtE3Ã€EÂe3ÃÃ©ÃšE3Ã¶E3Ã­3Ã¶3Ã¿E3Ã¿EÂfHÂT$PAÂžHÂÃÃšÂÃžÂ
-Â³HÂT$PHÂ
-DÂÃÃšÂ
-ÃÂ
-ÂHÂT$PAÂžHÂÃÃšÂ
-ÃÂ|ÂÃLÂL$PÃD
-PÂÂº_IÂÃÃšLÂÃHÂ
-ÃÂVHÂÃI+ÃHÂLPHÂÃ©ÂÃI+ÃÂÂI+ÃtKHÂÃ¹tIÃ¿ÃÃ«Â¹Â
-Ã¿Â
- DÂGHÂ
-IÂÃÃšÂ
-ÃÂ
-HÂT$(HÂÃÃšÂ
-ÃÂÃ°AÂÃŒÃ©Â§Â
-Ã¶Â
-Ã DÂFHÂ
-IÂÃÃšÂ
-ÃÂ
-Ã
-HÂT$HHÂÃÃšÂ
-ÃÂÂ°AÂÃŽÃ«jEÂ
-Ã­Â
-Â¢EÂEHÂ
-IÂÃÃšÂ
-ÃÂ
-ÂHÂT$8HÂÃÃšÂ
-ÃtvEÂÃ¬Ã«0EÂ
-Ã¶ulEÂFHÂ
-IÂÃÃšÂ
-ÃuUHÂT$ HÂÃÃšÂ
-ÃtDEÂÃŽHÂÃÃšAÃ¿ÃAÂÃ¿Â]ÃŸÃ¿Ã¿EÂ
-Ã¶t'EÂ
-Ã­t"Â
-Ã¶t
-Â
-Ã¿tHÂD$0ÃHÂD$@Ã3ÃÃ«ÂžÃŸÃ¿Ã¿Ã¿HÂÂ$PH3ÃÃšHÂÃhA_A^A]A\_^][Ã9Â8Â8Â©8ÂŒ8Ã7Ãž63
-8-8M2\8}7Â6Â3Ã7Ã€1Ã¬37).v-~3Â8Â¶*ÂŸ3Ã8ÃŽ'ÃŒ38*$23C8R!Â :Âž;;&
-+M
-Ã°
-Ã 	ÃÃp`P0P _width_height_ncolors_chars_per_pixel#defineXPMEXT@SWAUAVAWHÂÃ¬ÂHÂH3ÃHÂÂ$PHÂÂ$ÃDÂÃªEÂÃžÂT$(LÂÃ±Âº0AÂÃHÂ\$@LÂL$HDÂ|$<ÃšHÂÃžHÂD$ HÂ
-ÃuÂGÃœÃ©AÂÂŸ4HÂÂ¬$xHÂÂŽ$pLÂÂ€$hÂ
-Ã3Ã­HÂÃHÂD$0ÂÃµÂl$,EÂ
-Ã­ÂÂ¥AÂÂ|$8ÂIÂÃÃšÂÃÃšHÂÃžHÂHÂ
-ÃÂÃEÂ
-Ã¿t>AÂÃAÂÂ
-ÃtÂÃ¹tIÂNÃšDÂÃÃ«IÂFHÃ¿ÃDÂŸXÃ¿IÂFDÂHÃ¿ÃHÂÃ«uÃHÂ\$0ÃAÂÃ¿v AÂÃœvHÂHÂL$@DÂÃÃšÂÃžÂ
-ÃÂ
-THÂÂ$PAÂžIÂÃDÂÃœDÂÃ¥ÃD$PÃšDÂÃšÂ
-ÃÂÃ«EÂ
-Ã€uVÂÃHÂ5AÂÃ­fÂLÂHÂÃÃ¿3ÃIÂÃ¹Ã²Â®HÃ·ÃHÃ¿ÃH;ÃuHÂÂ$PLÂÃ
-IÂÃÃšÂ
-ÃÂÃ¿ÃHÂÃÂÃ»rÃ3Ã­EÂ
-Ã¿ÂÂEÂ
-Ã€u3ÃHÂ|$PHÂÃÃ¿Ã²Â®Â·fÂGÃ¿AÂÃ
-HÂÃÃ¿HÂ|$PÃÂP3ÃHÂÂ$PÃ²Â®3ÃÂÂ¶
-+HÃ¿ÃÂDÃŸÂÃuÃ±DÂÃ¥HÂÂ$PAÂžIÂÃÃšDÂÃšÂ
-ÃÂ
-#Ã¿Ã¿Ã¿EÂ
-Ã¿ÂHÂÃÃ¿3ÃHÂ|$PÃ²Â®HÃ·Ã#ÃÃšHÂ\$0AÂÃHÂÃHÂÃHÂ
-ÃÂÂŸHÂD$PHÂL$PH+ÃÂÂ¶HÃ¿ÃÂD
-+Ã¿ÂÃuÃ²Ât$,DÂl$(HÂÃ0Ã¿ÃHÂ\$0Ât$,A;ÃµÂÂÂ|$8DÂ|$<Ã©Ã£ÃœÃ¿Ã¿ÂÃ»s`EÂ
-Ã¿tGHÂÃÃ¿3ÃHÂ|$PÃ²Â®HÃ·Ã#ÃÃšHÂ
-ÃtFHÂT$0AÂÃHÂÃHÂL$PHÂT$PH+Ã@Â¶
-+HÃ¿ÃÂLÃ¿ÂÃuÃ²3Ã­DÂ{ÃD$PDÂeÃ©Ã°ÃŸÃ¿Ã¿3Ã­Ã©ÂÃŸÃ¿Ã¿ÂT$(HÂL$ ÃšÂžÃœÃ¿Ã¿Ã¿Ã©ÂT$(HÂL$ ÃšÂžÃŸÃ¿Ã¿Ã¿Ã©Ã­IÂÃAÃÂ0"AÃÂ1ÃšE3Ã€AÃÂ1"HÂÃ·EÂ
-Ã­ÂÂŽÂAÂOÃšHÂÃžHÂHÂ
-ÃÂÃ§EÂ
-Ã¿t>IÂÃAÂÂ
-ÃtÂÃžtIÂNÃšDÂÃÃ«IÂFHÃ¿ÃDÂŸXÃ¿IÂFDÂHÃ¿ÃHÂÃ«uÃHÂ\$@ÃAÂÃ¿v
-AÂÃœvHÂEÂÃHÂÃÃšÂÃžÂ
-ÃÂ
-lIÂÃÃšHÂÂ$P@2Ã¿AÂžIÂÃ@Â|$PÃšDÂÃÂ
-ÃÂÂ@ÂÃ¿t3ÃHÂ|$PHÂÃÃ¿Ã²Â®Â·fÂGÃ¿AÂÃHÂÃÃ¿HÂ|$PÃÂP3ÃHÂÂ$PÃ²Â®HÃ¿Ã3ÃfffÂÂ¶
-+HÃ¿ÃÂDÃ¿ÂÃuÃ±HÂÂ$PAÂžIÂÃÃšDÂÃÂ
-ÃtÂ¶|$PÃ«ÂHÂÃÃ¿3ÃHÂ|$PÃ²Â®HÃ·Ã#ÃÃšHÂÃžHÂ
-ÃÂÂ©HÂL$PHÂT$PH+ÃfffffÂÂ¶
-+HÃ¿ÃÂLÃ¿ÂÃuÃ²AÂEÃ¿HÂ~(ÂL$PD;Ã sIÂÃÃšAÃ¿ÃHÂÃ0E;Ã¥ÂYÃŸÃ¿Ã¿HÂ|$ HÂD$HHÂ83ÃHÂÂŽ$pHÂÂ¬$xLÂÂ€$hHÂÂ$PH3ÃÃšHÂÃÂA_A^A]_[ÃHÂL$ AÂÃÃšÂÃÃ«Â·HÂL$ AÂÃÃšÂžÃœÃ¿Ã¿Ã¿Ã«Â£9O^ÂŽ!Â»]Ã§\,[W7pÂš3ÃZ47_]Ãª]CW[W}!Â¥]Ã\[&!D7hZÃ7ÃŠ]3!z:ÂWÂšWÂÂ³__D!ÃÂdÂTÂp__VnÂ__J!p__
-Vpn__P!ÃÂdÂTÂp__Vp__V"Â	Ã°Ã Ãp0P  @SUVATAUAVHÂÃ¬X
-+HÂH3ÃHÂÂ$@
-+HÂÂ$Ã
-+LÂÂŽ$Âž
-+LÂÂ¬$Ã
-+HÂÃ©AÂÃAÂÃEÂÃ¡ÂÃ²ÂT$ Â¯ÃÃÃ¡Â\$$HÂD$8ÃšHÂD$(HÂ
-Ãu
-+ÂžÃœÃ¿Ã¿Ã¿Ã©)HÂÂŒ$Âš
-+ÂÂŒ$Â°
-+LÂÂŒ$P
-+LÂÃžÂÃÂÃšÂ%ÂÃžÂHÂ|$0ÃÂ<@ÂÃ¿ÂAÂÃŒÂÃŒE3Ã¶EÂÃŠÂ
-ÃÂÂ®ÂÃHÂÃÃšAÂÃ¶Â
-ÃÂÂffÂHÂÂ$@Â
-Ã¿tBHÂ|$0ÂEÂ
-ÃtÂÃžtHÂMÃšDÂÃÃ«HÂEHÃ¿ÃDÂŸXÃ¿HÂEDÂHÃ¿ÃHÂÃ¯uÃÂÂŒ$Â°
-+HÂÂ$@IÂÃÃšHÂHÂ
-ÃÂQÂAÃ¿ÃIÂÃAÂGÃŒ;t$ rÂÂ\$ AÃ¿ÃD;d$$ÂTÃ¿Ã¿Ã¿HÂD$(HÂL$8HÂ3ÃHÂÂŒ$Âš
-+LÂÂŒ$P
-+HÂÂ$@
-+H3ÃÃšHÂÃX
-+A^A]A\^][Ã3ÃDÂÃ«9\$$vÂµfDHÂÃÃšDÂT$ ÂÃ³EÂ
-ÃÂÃÂHÂÂ$@Â
-Ã¿tGHÂ|$0ÂEÂ
-ÃtÂÃžtHÂMÃšDÂÃÃ«HÂEHÃ¿ÃDÂŸXÃ¿HÂEDÂHÃ¿ÃHÂÃ¯uÃÂÂŒ$Â°
-+DÂT$ 3ÃDÂÃEÂ
-Ã€tBAÂÃLÂÂ$@HÂ
-@HÃIÂÃL+ÃÂÂ¶BÂ¶
-+ÃuHÃ¿ÃÂ
-ÃuÃ­Â
-ÃtAÃ¿ÃE;ÃrÃE;ÃÂÃ¿ÃEÂIÂÃA;Ã²ÂFÃ¿Ã¿Ã¿AÃ¿Ã
-D;l$$ÂÃ¿Ã¿Ã¿Ã©ÃÃŸÃ¿Ã¿HÂL$@3ÃAÂžÃšE3Ã­AÂÃEÂ
-Ã€tUfDÂÃHÂ4@HÃ¶IÂÃ¶HÂŸHÂÃ¹L9lÃ@uÂºÂ¹ÃšHÂDÃŒ@HÂ
-ÃtlIÂÃ¶ÂSÃ¿ÃÂ¶HHÂDÃŒ@fÂHA;ÃrÂ±DÂt$$AÂÃµEÂ
-Ã¶ÂDÂd$ HÂÃÃšAÂÃœEÂ
-Ã€ÂÃÂÂEÂ
-ÃtFÂÃžtAHÂMÃšÂÃÃ«CÂJÂLÃ¬@HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥IÂÃÃšÂžÃœÃ¿Ã¿Ã¿Ã©Ã¡ÃœÃ¿Ã¿HÂEHÃ¿ÃÂŸXÃ¿HÂEÂCÃ¿=ÃŸÂÃÂEÂ
-ÃtÂÃžtHÂMÃšDÂÃÃ«HÂEHÃ¿ÃDÂŸXÃ¿HÂEAÂCÃ¿=ÃŸwaHcÃHÂLÃ@HÂ
-ÃtTIcÃÂ·
-AfÂ
-ÃtHÂ·ÃÃ¿ÃIÂÃÃ¿ÃAÂGÃŒA;ÃŒÂ0Ã¿Ã¿Ã¿Ã¿ÃA;Ã¶Â
-+Ã¿Ã¿Ã¿DJÂLÃ¬@HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥Ã©ÃœÃ¿Ã¿JÂLÃ¬@HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥HÂL$(ÃšÂžÃŸÃ¿Ã¿Ã¿Ã©Ã¿ÃŒÃ¿Ã¿ÂJÂLÃ¬@HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥HÂL$(ÃšÂžÃŸÃ¿Ã¿Ã¿Ã©ÃÃŒÃ¿Ã¿HÂÂ$@3ÃAÂžÃš3ÃDÂÃEÂ
-Ã€t fÂIÂAÂPAÃ¿ÃÂ¶IÂÃ0fÂÂL@E;ÃrÃ¢DÂd$$ÂÃ»EÂ
-Ã€ÂqÃŒÃ¿Ã¿fÂHÂÃÃšÂ
-Ã¶td@ÂEÂ
-ÃtÂÃžtHÂMÃšDÂÃÃ«HÂEHÃ¿ÃDÂŸXÃ¿HÂEAÂCÃ¿=ÃŸÂRÃ¿Ã¿Ã¿IcÃÂ·ÂD@fÂ
-ÃÂ>Ã¿Ã¿Ã¿Â·ÃÃ¿ÃIÂÃÃ¿ÃAÂGÃŒ;ÃrÂ Ã¿ÃA;ÃŒÂÃŽÃ»Ã¿Ã¿3ÃÃ«Â9]]Ã!\J|Âª:Ã!\Ã}^I!q\Â{Â{Ã\K{k{Â{Â{Â±{Ã}!1\Â¿Âbbh!ÃŽJtUu
-bbzÂÂ¿bbn!ubb
-zuÂbbt!ÃŽJtUu
-bbzubbz#K
-+Ã ÃÃ`P0@
-+ LÂD$HÂT$SWATAUAVAWHÂÃ¬HE3Ã€MÂÃšLÂÃ±DÂd$ ÃšÂ¿ÂÃÂ|$$ÃšLÂÂ$ÂHÂT$(IÂÃLÂÃžÃšÂÃÂ
-ÃtIÂÃÃšÂÃHÂÃHA_A^A]A\_[ÃHÂT$(HÂ
-AÂžHÂÂ¬$ÂÃšÂÃÂ
-ÃÂDHÂT$(HÂ
-AÂž	ÃšÂÃšÂ
-ÃtYHÂL$(ÃšIÂÃÃšLÂÂ$ÂHÂT$(IÂÃÃšÂÃÂ
-Ãu
-HÂT$(DÂ@HÂ
-ÃšÂÃÂ
-ÃuÂÃ«IÂÃÃšÂÃÃ©6Â
-ÃuHÂT$(HÂ
-AÂž	ÃšÂÃšHÂt$@Â
-ÃÂ
-Ã3Ã¶HÂt$0Â
-Ã­ÂÃÂÃIÂÃÃšHÂÃžHÂ
-ÃÂÂHÃŸHÂt$(LÂÃžÂŸNHÂÃHÂÃÃšÂ
-ÃtÂŸKHÃ¿ÃÃšÂ
-ÃuÃ°ÂÂ$Â+Ã+ÃÂÃ©ÃšHÂHÂ
-ÃÂ	DÂÂ$ÂÂÃHÂÃD+ÃHÃAÂÃÃºÃšHÂL$(ÃšIÂÃÃšLÂÂ$ÂHÂT$(IÂÃÃšÂÃÂ
-ÃÂ
-ÂÂHÃšDÂCHÂ
-HÂGHÂT$(E3Ã€ÃšÂÃÂ
-ÃÂÂŠE3Ã­AÂt$ffÂHÂT$(HÂ
-AÂž	ÃšÂÃšÂ
-ÃtrHÂOÂÃÃšHÂ
-ÃÂHÂGHÂL$(AÃ¿ÃIÂLIÂÃÂÃIÂÃ
-ÃšLÂÂ$ÂHÂT$(IÂÃÃšÂÃÂ
-ÃÂ
-Â³HÂT$(DÂ@HÂ
-ÃšÂÃÂ
-ÃÂ
-qÃ¿Ã¿Ã¿EÂ
-Ã€uHÂOÃšHÃGHÂt$0DÂgDÂd$ Â|$$AÃ¿ÃHÂÃÂÃDÂd$ HÂt$0Â|$$Â
-ÃÂ0ÃŸÃ¿Ã¿EÂ
-Ã€ÂÃ«Â
-Ã­u
-+HÂL$(ÃšLÂÂ¬$ÂHÂÂ$ÂEÂeLÂ83ÃHÂt$@HÂÂ¬$ÂHÂÃHA_A^A]A\_[ÃÂT$ IÂÃDÂgÃ¿ÃÃšÂÃÃ«ÃHÂL$(ÃšÂT$ IÂÃÃ¿ÃDÂgÃšÂžÃœÃ¿Ã¿Ã¿Ã«Â«AÂT$IÂÃHÃGÃGÃšÂÃÃ«ÂHÂL$(ÃšAÂT$IÂÃHÃGÃGÃšÂžÃœÃ¿Ã¿Ã¿Ã©[Ã¿Ã¿Ã¿HÂL$(ÃšAÂÃIÂÃÃšÂžÃœÃ¿Ã¿Ã¿Ã©<Ã¿Ã¿Ã¿LÂÂ¬$ÂHÂL$(ÃšIÂÃÃšE3Ã¿Ã©	Ã¿Ã¿Ã¿'!7]OÂŠ]{z6Â3ÂšÂ¥Â³3Ã{Ã!Ã ÂŠÃ¶6Ã»3
-{"Â¥-3UÂ¢|Â¡ÂÂ¡Â£]ÃÂ Ã{Ã!Ã²ÂŠ]6 3HÂ¥S3dÂ¢Â!Â¢ÂŠÂŒ6Ã3Ã{*{qÂ{ÂÂÂŽÂÃ{ÃÂÃ²{ÃœÂ{!{c-Â§Â§Â!dTÂ
-Â§Â§ÂLcÂ§Â§Â!Â3Â§Â§
-Â3LÂ§Â§Â!dÂ3Â§
-Â§ÂÂ3Â§Â§Â!TÂÂ§
-Â§ÂÂÂ§Â§ÂÂÃ°Ã ÃÃ
-p
-0XPMENDEXTHÂÃSUVWAUHÂÃ¬Â°3Ã¿IÂÃLÂÃªHÂÃ©ÂxÂÂxÂHÂxÂžHÂxÂHÂxÂšHÂxÂHÂxÂ MÂ
-Ãt
-AÂº sÂwÃ«ÂÃ·ÃšÂ
-ÃÂ
-ÂœHÂD$XLÂÂ$Ã°LÂD$PHÂD$@HÂD$\HÂT$THÂD$8HÂD$hHÂÃHÂD$0HÂÂ$ÂHÂD$(HÂÂ$ÃžHÂD$ ÃšÂ
-ÃÂ
-cÂ
-Ã¶tHÂÂ$ÂHÂÃÃšDÂÂ$ÃžAÂÃžv'ÂÂŒ$Ã°v
-HÂÂ$ÂÃšÂ
-ÃÂ
-"DÂÂ$ÃžÂÂ$Ã°HÂÂ$ÂLÂÂ$ÂHÂÃLÂÂ€$Ã HÂD$ LÂÂŽ$ÃšÃšLÂÂŽ$ÂDÂÃ Â
-Ãt.ÂÂŒ$ÃžÂeÂÂŒ$Ã°ÂWHÂÂ$ÂÃšÃ©EÂ
-Ã¶t
-HÂT$pHÂÃÃšDÂÂ$Ã°DÂD$PÂT$THÂD$`HÂÃHÂD$8HÂÂ$ÂHÂD$0ÂÂ$ÃžLÂt$(ÂD$ ÃšÂÂŒ$ÃžDÂÃ vÂÂŒ$Ã°v
-HÂÂ$ÂÃšEÂ
-Ã€Â
-ÃÂ
-Ã¶t
-HÂT$xHÂÃÃšHÂ
-Ãt4Âº#
-+s.9|$Xt!LÂC(HÂS0HÂÃÃšDÂÃ Â
-ÃtHÂ|$`Ã©ÂHÂ{0Â{(ÂD$TMÂuAÂEÂD$PAÂEÂÂ$ÃžAÂEÂÂ$Ã°AÂE
-HÂD$`IÂEHÂ
-Ãt<Â
-Ã¶t
-HÂÂ$ÂHÂCHÂD$pHÂCHÂD$xHÂC9|$\tÂÂ$ÂÂ
-ÂC ÂD$hÂC$3ÃÃ«YHÂ|$`MÂ
-Ã¶tÂÂ$Ã°IÂÃÃšHÂ
-Ã¿tHÂÃÃšHÂÂ$ÂHÂ
-ÃtÃšHÂL$pHÂ
-ÃtÃšHÂL$xHÂ
-ÃtÃšAÂÃLÂÂ€$Ã LÂÂŽ$ÃšHÂÃÂ°A]_^][ÃIÃÂ£Â¿Â¿Ã€ÂŸ(>`ÂœvÂ¿Â¶bÃÂœÃŽÂ¿ÂÂŸWÃ{Ã{Ã¬{Ã»{ ÃÃÂ°!ÃÃ
-ÂŒÃÃÂ¶!Ã€
-Ã
-
-ÃÃÂŒÃÃÂŒ	Ãp`P0@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.rdatad8ÃN.rdata`ÃœÂŒ*
-.rdataR.Â²Ã¶4.rdataÃªSÃM.rdata5*e.data(}.text	Âž"Ã²ÂŸtÂ	 .pdata
-+
-ÂÃÃ»4	Â
-+.xdata
- ÃeÃ°	Â¯
-Ã Ã .rdata
-lÃ°
-Ã¥
-.rdata
-Ã­Â"S
-.rdata	Ã<ÂG .rdataQÃ?strchr .rdataÃÂŠZhxpmatoui strncmp .rdataÂ|eÂ¬ÂÂŠ Â² ÂŒÃ $LN60	.textÂ³
-Ã¬&Â»CÃŠ .pdata
-_Ã®Ã Ã²Ãµ.xdata
-ÃÂ±Ã³
-.pdata
-Â«ÂœÂ€%.xdata|{=.pdata
-Ã
-Â³U.xdata
-ÃµÂ»DQm.pdata
-ÂÂPÂ¬Â
-.xdata
-aÂ¡ÃÃªÂÂ² .rdataÂ¢$ÂÂÃÃ getc Ã« Ã¿ $LN95.text
-Â6Â£^Âº
- .pdata
-
-ÂÂ¡Ã
-
-.xdata
-;^Ã¥
-4
-.pdata
-}AÃÃ­
-I.xdata uÃ§]
-^ .pdata!
-Â[Â 
-s!.xdata" ÃÂ¿
-Â".pdata#
-ÃŽÂÂ°Ã€
-Â#.xdata$
-Â¯GÃ
-Â°$free Ã memset .text%-.ÃªÂÂ®Ã% .pdata&
-mÂP%Ã£&.xdata'ÂÃ%Ã¿'.pdata(
-Âµ!Ã%(.xdata)YÃ¡Â£w%7).pdata*
-
-Ã¶Ã£Ã­%S*.xdata+aes
-%o+.pdata,
-Âµ
-ÃŽÃ%Â,.xdata-ÂŽÃÂµ%Â§-.pdata.
- ÂqÃ%Ã..xdata/;ÃMÃ%Ã/Ãž strncpy isspace 
-+ .rdata0
-+ÃªÃÂ©ÃŽ0? $LN43%.text1 :X
-Â»L1 .pdata2
-Â©m_Â±1Y2.xdata3ÃÂŸ!1o3.pdata4
-hÂÃ.1Â
-4.xdata5XÂ
-1Â5.pdata6
-Ã¢=Ã©Â1Â±6.xdata7ÃÃ» X1Ã
-7Ã Ã« ÃŒ  $LN371??_C@_01PAPGNFGE@c?$AA@??_C@_01JEJKBAGA@g?$AA@??_C@_02PGAMAILP@g4?$AA@??_C@_01GOHFPIOK@m?$AA@??_C@_01LKDEMHDF@s?$AA@xpmColorKeysxpmParseValues$pdata$xpmParseValues$unwind$xpmParseValues__GSHandlerCheckxpmNextString??_C@_06HPJDNAON@_width?$AA@??_C@_07MJPPKBHL@_height?$AA@??_C@_08FOGANHJK@_ncolors?$AA@??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@??_C@_06MOPGFMAJ@XPMEXT?$AA@xpmNextWordxpmNextUI__security_cookie__security_check_cookiexpmParseColors$pdata$4$xpmParseColors$chain$4$xpmParseColors$pdata$3$xpmParseColors$chain$3$xpmParseColors$pdata$2$xpmParseColors$chain$2$xpmParseColors$pdata$xpmParseColors$unwind$xpmParseColorsxpmFreeColorTable??_C@_01CLKCMJKC@?5?$AA@xpmHashInternboundCheckingMallocboundCheckingCallocParsePixels$pdata$3$ParsePixels$chain$3$ParsePixels$pdata$2$ParsePixels$chain$2$ParsePixels$pdata$1$ParsePixels$chain$1$ParsePixels$pdata$ParsePixels$unwind$ParsePixelsxpmHashSlotxpmParseExtensions$pdata$4$xpmParseExtensions$chain$4$xpmParseExtensions$pdata$2$xpmParseExtensions$chain$2$xpmParseExtensions$pdata$1$xpmParseExtensions$chain$1$xpmParseExtensions$pdata$0$xpmParseExtensions$chain$0$xpmParseExtensions$pdata$xpmParseExtensions$unwind$xpmParseExtensionsXpmFreeExtensionsboundCheckingRealloc??_C@_09OINMEHGD@XPMENDEXT?$AA@xpmGetStringxpmParseData$pdata$2$xpmParseData$chain$2$xpmParseData$pdata$1$xpmParseData$chain$1$xpmParseData$pdata$xpmParseData$unwind$xpmParseDataxpmHashTableFreexpmHashTableInitxpmGetCmtxpmParseHeaderWrFFrBuf.obj/   1345988050              100666  1173      `
-+dÂÃ%:PÂ«.drectve]
-+.debug$Spa@B.textvÃG P`.pdata
-o{@0@.xdataÂ@0@.rdataÂ©@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\WrFFrBuf.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHÂ\$VHÂÃ¬ HÂÃ²HÂÃšHÂÃHÂ
-ÃuÂÃÃ¿HÂ\$8HÂÃ ^ÃHÂÃÃ¿3ÃHÂ|$0HÂÃŸDÂ@LÂÃÃ²Â®HÃ·ÃHÃ¿ÃHcÃHÂÃÃšHÂÃÂxÃ¿ÃšHÂ\$8Ã·ÃHÂ|$0ÃHÂÃ ^ÃS^v
-::t
-+4
-+2`w@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.textvÃÂa .pdata
-Â?j.xdataÃ3ÂªÃ9fclose fwrite fopen .rdata1Ã¯~`X$LN5pXpmWriteFileFromBuffer$pdata$XpmWriteFileFromBuffer$unwind$XpmWriteFileFromBuffer??_C@_01NOFIACDB@w?$AA@
-+simx.obj/       1345988050              100666  8727      `
-+dÂ2Ã%:PÃ¬Â¢.drectve]Ã€
-+.debug$SlA@B.textÂ­Âµ P`.text
-Â¿Ã P`.textÃÃ P`.textÃŠ P`.textÃ© P`.text8Ã¬$	 P`.pdata
-8	D	@0@.xdata
-b	@0@.textn	 P`.text'q	 P`.textÃÂ	t
- P`.pdata
-Â°
-ÂŒ
-@0@.xdataÃ
-Ãª
-@0@.pdata
-
-
-@0@.xdata2
-F
-@0@.pdata
-d
-p
-@0@.xdataÂ
-Â¢
-@0@.pdata
-Ã
-Ã
-@0@.xdataÃª
-ÃŸ
-@0@.pdata
-
-(@0@.xdataFZ@0@.pdata
-xÂ@0@.xdataÂ¢Â¶@0@.pdata
-ÃÃ @0@.xdataÃŸ@0@.pdata
-0<@0@.xdataZn@0@.pdata
-ÂÂ@0@.xdataÂ¶@0@.text|ÂŸ: P`.pdata
-NZ@0@.xdatax@0@.textÂ P`.text6Â P`.textÂŒ P`.textqÂ¿0 P`.pdata
-DP@0@.xdatan~@0@.pdata
-ÂÂš@0@.xdataÃÃ@0@.pdata
-ÃŒ@0@.xdata
-&@0@.text2E P`.pdata
-O[@0@.xdatay@0@.text%ÂÂŠ P`.pdata
-ÂºÃ@0@.xdataÃ€@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±`"d:\Develop\xpm\lib\simx.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHcÃÃ©HcÃHcÃÃ©
-HcÃÃ©3ÃÃ3ÃÃHÂ\$WHÂÃ¬ HÂÃ¹HÂ	Âº
-Ã¿HÂÂºÂÃÃ¿ÂÃHÂ\$0HÂÃ _Ã ' 8!!
-+
-+4
-+2p3ÃÃÂAÃÂÃž	wÂAÃÃÂAÂÂÃžwÂAÂ©ÃÂAÂ¿ÂÃžwÂAÃÃ3ÃÃHÂÃ¬(LÂÃLÂÃHÂ
-ÃÂÃÂ9#Â
-Â¹HÂÃÃ¿HÂ|$ 3ÃIÂÃºÃ²Â®HÃ·ÃHÃ¿ÃÂÃ¹Â
-ÃAÂŸR3ÃÂBÃÂÃž	wÂÃÃÃ«
-ÂBÂÂÃžwÂÃÂ©Ã«ÂBÂ¿ÂÃžwÂÃÃÃ«ÂÃAÂAÂŸRÂBÃÂÃž	wÂÃÃÃ«
-ÂBÂÂÃžwÂÃÂ©Ã«ÂBÂ¿ÂÃžwÂÃÃÃ«ÂÃAÂAÂŸRÂBÃÂÃž	wHÂ|$ ÂJÃÂžAÂ	HÂÃ(ÃÂBÂÂÃžwHÂ|$ ÂJÂ©ÂžAÂ	HÂÃ(ÃÂBÂ¿ÂÃžwÂJÃHÂ|$ AÂ	ÂžHÂÃ(ÃÂÃ¹Â
-cAÂŸR3ÃÂBÃÂÃž	wÂÃÃÃ«
-ÂBÂÂÃžwÂÃÂ©Ã«ÂBÂ¿ÂÃžwÂÃÃÃ«ÂÃAÂŸzÂGÃÂÃž	wÂÃÃÃ«
-ÂGÂÂÃžwÂÃÂ©Ã«ÂGÂ¿ÂÃžwÂÃÃÃ«ÂÃ¹ÃÃ¢ÃAÂAÂŸRÂBÃÂÃž	wÂÃÃÃ«
-ÂBÂÂÃžwÂÃÂ©Ã«ÂBÂ¿ÂÃžwÂÃÃÃ«ÂÃAÂŸzÂGÃÂÃž	wÂÃÃÃ«
-ÂGÂÂÃžwÂÃÂ©Ã«ÂGÂ¿ÂÃžwÂÃÃÃ«ÂÃ¹ÃÃ¢ÃAÂAÂŸRÂBÃÂÃž	wÂÃÃÃ«
-ÂBÂÂÃžwÂÃÂ©Ã«ÂBÂ¿ÂÃžwÂÃÃÃ«ÂÃAÂŸzÂGÃÂÃž	wÂOÃHÂ|$ ÃÃ¢ÃÂžAÂHÂÃ(ÃÂGÂÂÃžwÂOÂ©HÂ|$ ÃÃ¢ÃÂžAÂHÂÃ(ÃÂGÂ¿ÂÃžwÂOÃHÂ|$ ÃÃ¢ÂžÃAÂHÂÃ(ÃÂÃ¹
-u_AÂŸJÃšAÂŸJÂÃÃÃ¢ÃšÃAÂAÂŸJÃšAÂŸJÂÃÃÃ¢ÃšÃAÂAÂŸJ	ÃšAÂŸJ
-+ÂÃÃÃ¢ÃšÃÂžAÂHÂ|$ HÂÃ(Ã3ÃHÂÃ(Ãr'Â'Â'Â'Â®'Âœ'ÃÃ**0! **
-`gÃ**6!t *
-*`Eg**<!t *
-*`#E**B!t *
-*`Ã»#**H!t *
-*`ÃÃ»**N!t *
-*`ÃÃ**T!t *
-*` Ã**Z!t *
-*` **`B@SHÂÃ¬0IÂÃIÂÃMÂ
-ÃtcAÂ8#LÂL$ HÂT$$LÂD$PHÂÃuÃšÃ«ÃšÂ
-Ãt;DÂL$PDÂD$ ÂL$$AÂ¶ÃAÂ¶ÃÂKÃÃ ÃÃ¢DÂK
-ÃÂ¶ÃDÂC
-ÃÂžÂHÂÃ0[Ã3ÃHÂÃ0[Ã**1j|kkiR0ÂžÃEÂ
-Ã~/AÂÃÂAÂ¶IÂÃHÂÃ©AÂ@ÃŒAÂ¶@Ã¹AÂ@ÃœAÂ¶@ÃºAÂ@ÃŸuÃÃ³Ã3ÃÃHÂl$VHÂÃ¬0Â¹AÂÃšÃšHÂÃ°HÂ
-ÃtGHÂ\$@Â\$pHÂ|$HÂ|$xDÂÃAÂžÂÃÂÃHÃD$ Ã¿Â^HÂ\$@HÂÂ~
-HÂ|$HHÂÃÂnHÂl$PHÂÃ0^ÃIÂfqÂÂ}!ÂÂ
-ÂfÂÂÂ!t	4
-ÂÂÂÂÂÂ
-+
-+T
-+
-+R`HÂÃ¬(HÂ
-ÃtÃšHÂÃ(Ã
-+ÂÂÂÂBHÂ
-Ãt
-SHÂÃ¬ HÂÃHÂ	Ã¿HÂÃÃšHÂÃ [Ã³ÃÂ Â%Â¡Â¡Â
-+
-+20@comp.id	xÂÃ¿Ã¿.drectve].debug$Sl.textÃ²eS malloc .text
-ÂKÂ¯? calloc .textÂªÂ:, realloc .textÂÂºÃ¯A .textÂÂºÃ¯P .text8Ã¶hÃ»Â_ .pdata	
-ÃH(Vm	.xdata
-+
-%ÃY%Â
-+Â$LN3.text
-ÂÂºÃ¯Â¬
- .text
-'gÂÂ6Âœ
- .text
-ÃÃŠÂPÃ­Ã
- .pdata
-GÂ^Z
-Ã.xdataÂºÂ!@
-Ãª.pdata
-UÃÃ
-Ã¿.xdataLRÂµ
-.pdata
-ÂªÃ
-Âœ
-).xdataLRÂµ
->.pdata
-im!Ã
-S.xdataLRÂµ
-g.pdata
-Â>yÃ
-{.xdataLRÂµ
-Â.pdata
-Ã®Ã®Â
-Â£.xdataLRÂµ
-Â·.pdata
-QÃ°ÂÃ
-Ã.xdataLRÂµ
-Ã.pdata
-
-QÂ=Â®
-Ã³
-.xdata
-Ã fR
-
-.pdata
-
-VbvÃ¹
-
-.xdataÃ9Ã
-
--.text |ÂbÂ@  .pdata!
-ÃÂÃ¿Ã» L!.xdata"ÂcÂŒ _"s $LN8 .text#Â¢+ÂÃÂ
-# .text$6kÂ¯ÃÃÂ$ .text%ÂÂºÃ¯Â% .text&qÃ»;ÂŠÃÂª& .pdata'
-ÃŠXÂÂ§&Â·'.xdata(kÃÃ
-&Ã(.pdata)
-Â±Ãh&Ã£).xdata*JÃ¢<&Ã¹*.pdata+
-Â#ÂÂ¥&+.xdata,
-Ã¿ÂMÂ&#,8$LN13&.text-Ã
-ÂK- .pdata.
-Ã64Ã²-V..xdata/Ã9Ã
--h/free $LN4-.text0%"kzj{0 .pdata1
-2lÂÂ±0Â1.xdata2kÂžÃ
-0Â2ÂŽ$LN80ÃboundCheckingMallocboundCheckingCallocboundCheckingReallocXDefaultVisualXDefaultScreenXDefaultDepth$pdata$XDefaultDepth$unwind$XDefaultDepth__imp_GetDeviceCapsXDefaultColormaphexCharToIntrgbFromHex$pdata$13$rgbFromHex$chain$13$rgbFromHex$pdata$12$rgbFromHex$chain$12$rgbFromHex$pdata$10$rgbFromHex$chain$10$rgbFromHex$pdata$8$rgbFromHex$chain$8$rgbFromHex$pdata$6$rgbFromHex$chain$6$rgbFromHex$pdata$4$rgbFromHex$chain$4$rgbFromHex$pdata$2$rgbFromHex$chain$2$rgbFromHex$pdata$0$rgbFromHex$chain$0$rgbFromHex$pdata$rgbFromHex$unwind$rgbFromHexXParseColor$pdata$XParseColor$unwind$XParseColorxpmGetRGBfromNameXAllocColorXQueryColorsXFreeColorsXCreateImage$pdata$2$XCreateImage$chain$2$XCreateImage$pdata$1$XCreateImage$chain$1$XCreateImage$pdata$XCreateImage$unwind$XCreateImage__imp_CreateBitmapXImageFree$pdata$XImageFree$unwind$XImageFreeXDestroyImage$pdata$XDestroyImage$unwind$XDestroyImage__imp_DeleteObject
-+scan.obj/       1345988050              100666  8135      `
-+dÂ
-Ã%:P)l.drectve]Ã
-+.debug$Sl!@B.rdata]Â@P@.dataÃªÃ²@@Ã.textÂ²ÃŒÂ® P`.pdata
-ÂžÃ@0@.xdataÃ¢@0@.text0Ãº P`.textD*n P`.pdata
-Â Â¬@0@.xdataÃÃ@0@.pdata
-ÃŒ	@0@.xdata&	:	@0@.pdata
-X	d	@0@.xdataÂ	@0@.rdataÂ	@0@.textÂ	Â
- P`.pdata
-_k@0@.xdataÂÂ@0@.pdata
-Â·Ã@0@.xdata
-Ã¡Ãœ@0@.pdata
-'@0@.xdata
-Ea@0@.rdatak@@@.textÂ¥y
- P`.pdata
-2>@0@.xdata
-\@0@.textÃxM P`.pdata
-Ã£Ã¯@0@.xdata
-
-@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±`"d:\Develop\xpm\lib\scan.obj:<bÃ	x	xMicrosoft (R) Optimizing Compiler .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|HÂl$HÂt$ ATHÂÃ¬ AÂ8MÂÃ HÂÃ²ÂÃ©tAÃ3ÃHÂl$@HÂt$HHÂÃ A\ÃHÂ
-+HÂ\$0ÂZHÂ|$8ÂzHÂÂ;Ãs9(t
-+Ã¿ÃHÂÃ;ÃrÃ²;Ãu,ÂR;Ãºr
-ÃÂVÃÃ¢ÃšHÂ
-ÃuÂžÃ«HÂHÂÂ,ÂžÃ¿FAÂ
-$3ÃHÂ\$0HÂ|$8HÂl$@HÂt$HHÂÃ A\ÃuÂ²
-
-H
-+Ht@4d	T2
-ÃÂ
-Ãu"9JuHÂÃBÂÃBAÃ3ÃÃAÃ3ÃÃHÂ\$HÂl$WHÂÃ¬ HÂÃ©ÂJIÂÃÂÃºÃšLÂÃHÂEHÂ
-ÃuAÂCÃœHÂ\$8HÂl$@HÂÃ _ÃLÂ
-IÃ¿ÃE3ÃAÂ¶AÂCÃ¿ÂÃ¿v<DÂWÃ¿AÃ·ÃÂžÃBÂ²IÃ¿ÃAÃ·Ã DÂÃÂžÃBÂ²AÃÃšAÃ·Ã ÃÃªkÃ\D+ÃIÂÃªCÂ¶
-AÂKÃ¿uÃHÂt$0AÃHÂ
-ÃÂÂÂ
-ÂÃ%ÂuÂºÃ¡spÂÂÂÂÃ¹ÂtbÂ
-ÃtHÂ4IHÃÃŠHspÃ«HÂCpHÂ4ÃÂ¿HÂ]H+Ãµ@HÂ
-
-HÂ
-Ãt
-ÃšHÂHÂ
-Ãt7Ã¿ÃHÂÃÂÃ¿vÃ3ÃHÂt$0HÂ\$8HÂl$@HÂÃ _ÃHÂ
-ÃšHÂE(HÂ
-ÃuÃÂžÃœÃ¿Ã¿Ã¿Ã«Ã1B
-+Ãº0+/00(D !dÂ
-,Â(&!dÂ
-,Â,T42
-pNone@SVWAVAWHÂÃ¬ÂHÂH3ÃHÂÂ$pHÂÂŒ$Ã°3ÃE3Ã¶IÂÃ±DÂD$0LÂÃºHÂT$8HÂÃHÂL$`HÂD$HHÂ
-Ã¿tÃ¶t
-HÂGHÂD$@Ã«ÃšHÂÃHÂÃÃšDÂD$0HÂD$@ÂÂ$Ã Â
-ÃtIÂÃ0AÃ¿ÃHÂÃLÂ|$8DÂD$0BÂ
-Ã
-ÃšHÂD$XHÂ
-Ãu
-+ÂžÃœÃ¿Ã¿Ã¿Ã©&HÂÂ¬$ÃLÂÂ€$ÂE3Ã€LÂÂ¬$ÂIÂÃ¯LÂÃšD9d$0ÂÃDÂÂŒ$ÃšAÂGÂÃÃšLÂÃHÂEHÂ
-ÃÂÃ³LÂDÂÃÂžÃBÂ²IÃ¿ÃÃ·Ã£ÃÃªkÃ\D+ÃCÂ¶AÂCÃ¿AÂÃ¿v@EÂOÃ¿fDÂÃÂžÃBÂ²IÃ¿ÃA+ÃÃ·Ã¡ÂžÃBÂ²DÂÃAÃÃšAÃ·Ã ÃÃªkÃ\D+ÃIÂÃ©CÂ¶
-AÂKÃ¿uÃEÂ3ÂAÃ¿ÃAÂEIÂÃ
-Ã¿ÃHÂÃ
-0HÂÃAÂGD;d$0ÂTÃ¿Ã¿Ã¿LÂ|$8HÂD$XÂt$0HÂT$@HÂL$`DÂÃLÂÃÃš3Ã3ÃÃšÂÃÂD$`HÂ
-Ã¿tjÂÂºÃ¡s3LÂ_pLÂW0DÂwhDÂÂ¯ÂLÂ\$8LÂT$@Ã«\HÂL$XÃšÂžÃœÃ¿Ã¿Ã¿Ã©ÂžÂºÃ¡s)HÂGpLÂW0DÂwhDÂÂ¯ÂHÂD$HLÂT$@LÂ\$HLÂ\$8Ã«LÂ\$HLÂT$HDÂl$`LÂ\$8LÂT$@ÃD$PÂ
-Ã¶ÂHMÂg(LÂ|$XIÂoEÂ
-Ã¶ÂÂE3Ã3ÃE3ÃEÂ
-Ã¶t*@A;ÃuAÂ¹Ã«ÂEÃ»IÂÃI+ÃA9Ât
-+Ã¿ÃIÃ¿ÃA;ÃrÃA;ÃtNHÂD$HHÂ
-ÃtJÂ<ÃÃ«
-HÂ<RHÃÃ§IÃ»IÂ\$Ã I+ÃŒÂŸHÂL(HÂ
-ÃtÃšHÂHÂÃHÂÃ®uÃ€Â\$`Ât$0Ã«jÂ
-Ãt.Â¶EDÂ¶MDÂ¶EÃ¿ÂÃ3ÃÂD$ ÃšHÂ
-ÃtHÂÃÃšIÂ$Ã«1Â¶EDÂ¶MDÂ¶EÃ¿HÂHÂL$pÂD$ ÃšHÂL$pÃšIÂ$IÂ<$t&ÂD$PLÂT$@LÂ\$8Ã¿ÃIÂÃ0HÂÃ
-ÂD$P;ÃÂÃÃŸÃ¿Ã¿Ã«
-IÂÃÃšÂÃ3ÃÃšÂžÃœÃ¿Ã¿Ã¿Ã«LÂ|$XIÂÃÃšÂÃ3ÃÃš3ÃLÂÂ€$ÂHÂÂ¬$ÃLÂÂ¬$ÂHÂÂ$pH3ÃÃšHÂÃÂA_A^_^[ÃSaRlQÂ£1Ã¶1
-
-+ÂŸPÃONÃ®0$M10LLZId0ÂNÂŠHÂºNÃHÃ­TÃ¡44:!Â»44
-FÂ»Ã¡44@!ÃPÃQT[Â»44FÂ»44F!RÃ°Ã p`0pG#%02x%02x%02xHÂ\$HÂl$HÂt$WATAUAVAWHÂÃ¬ LÂt$pHÂLÂÃ©HÂ	IÂ~EÂÃ¹AÂÃ°Ã¿3Ã­EÂ
-Ã¿t>LÂd$x3ÃÂ
-Ã¶t,@IÂMDÂÃ
-ÂÃÃ¿LÂÃIÂÃÂÃAÃ¿ÃÂ
-Ãu0Ã¿ÃHÂÃ;ÃrÃÃ¿Ã
-A;Ã¯rÃ3ÃHÂ\$PHÂl$XHÂt$`HÂÃ A_A^A]A\_ÃÂžÃœÃ¿Ã¿Ã¿Ã«Ã6_[^Â¥WW]
-
-
-d
-
-T
-
-4
-+
-2Ã°Ã ÃÃpLÂL$ SVATAUAVAWHÂÃ¬hE3Ã€IÂÃLÂÃ²LÂÃ¹ÃD$PAÂÃŽEÂÃ¬LÂd$@LÂd$HDÂd$TDÂd$XHÂ
-Ãt	ÂrDÂj
-Ã«
-HÂ
-ÃtAÂpEÂh
-HÂÂ$ÃHÂ
-ÃtÂÂš uÂºÃ s
-ÂA,ÂÂ$ÂšÃ«DÂÂ€$ÂšAÂÃÂºHÂÂ¬$Â HÂ|$`Â¯ÃÃšHÂD$HHÂ
-ÃuÂXÃœÃ©ÂÂL$PÃÃ¡ÃšHÂD$@HÂ
-ÃuÂXÃœÃ©yHÂ
-Ãt[HÂIÂHÂ|$HÃ¿AÂÃ¬EÂ
-Ã­tBAÂÃÂ
-Ã¶t4DIÂDÂÃ
-ÂÃÃ¿HÂT$@LÂÃÂÃÃšÂ
-ÃÂ
-ÂÃ¿ÃHÂÃ;ÃrÃÃ¿Ã
-A;Ã­rÂŸMÂ
-Ã¶tWIÂIÂHÂ|$HÃ¿AÂÃ¬EÂ
-Ã­t>AÂÃÂ
-Ã¶t0DIÂDÂÃ
-ÂÃÃ¿HÂT$@LÂÃÂÃÃšÂ
-Ãu9Ã¿ÃHÂÃ;ÃrÃÃ¿Ã
-A;Ã­rÃÂL$TÂº0ÃšLÂÃ HÂ
-Ãu
-ÂXÃœÃ©ÂÂ»ÃœÃ¿Ã¿Ã¿Ã©ÂÂ»ÃœÃ¿Ã¿Ã¿Ã©ÂDÂD$TÂž\Â¹D;ÃvÂkÃ\Ã¿ÃD;ÃwÃ¶ÂÂŒ$ÂšÂD$X;Ã¹BÃ¹Â
-Ãt&HÂÂ¬$ÃÂÃIÂÃLÂÃ
-ÃšÂÃÂ
-Ãu6ÂD$XDÂD$TÃ«HÂÂ¬$ÃLÂL$@HÂl$0IÂÃIÂÃÂ|$(ÂD$ ÃšÂÃÂ
-Ãt9HÂD$HHÂ
-ÃtHÂÃÃšHÂD$@HÂ
-ÃtHÂÃÃšMÂ
-Ã€t
-ÂT$TIÂÃÃšÂÃÃ«1HÂÂ$ÂžÂD$TÂA
-HÂD$HÂ1DÂiÂyLÂaHÂAHÂL$@Ãš3ÃHÂ|$`HÂÂ¬$Â HÂÃhA_A^A]A\^[ÃÂ¢jÃ1Ãš_
-+^H_j^y
-ÂjE4]NoNÂiÂ³NÃkkhÂ
-Ât
-ÂTÃÃ°
-Ã 
-Ã	Ã`0@comp.id	xÂÃ¿Ã¿.drectve].debug$Sl.rdata]ÃÃšq%.data\.textÂ²Ã¥&Ãf .pdata
-ÃÃÃÂq.xdataÃšÃÃLÂÂ .text0ÃŽÃSÃÂ« .text	D/g
-ÂºÂº	 .pdata
-+
-eÂµÃ	Ã
-+.xdata
-mÃÂ¯-	Ã­
-.pdata
-
-[ÂÂx	
-
-.xdata
-ÃÂ|i	)
-.pdata
-ÂÂº`g	G.xdataÂBrÃ¿	c.rdataÂµxEÃÂstrdup Â .textvÂÂÂ
-Â¯ .pdata
-Â
-ÂÂŸÂ¿.xdata
- Ã2Ã.pdata
-ÂÃÃ®{Ã±.xdata
-
-pÂÂ
-+.pdata
-Ã±ÃÂÂ#.xdata
-ÂÃŽhÂ:R c sprintf .rdataÃÂÃ2sÂ€ free Â² Ã Ã Ã  Ã¯ .textÂ¥ÃpÂš$ .pdata
-ÃšÃ©Â­Ã¢+.xdata
-mÃÂ
-D^m.text
-ÃiÂŒ\mÂ
- .pdata
-
-QibÃ
-Â
-.xdata
-
-EÃ¶ÃŠ
-Âœ
-Ã  Ã² $LN60
-??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@printablestorePixel$pdata$storePixel$unwind$storePixelboundCheckingReallocstoreMaskPixelScanTransparentColor$pdata$2$ScanTransparentColor$chain$2$ScanTransparentColor$pdata$0$ScanTransparentColor$chain$0$ScanTransparentColor$pdata$ScanTransparentColor$unwind$ScanTransparentColor??_C@_04OHJIHAFH@None?$AA@boundCheckingMallocScanOtherColors$pdata$3$ScanOtherColors$chain$3$ScanOtherColors$pdata$2$ScanOtherColors$chain$2$ScanOtherColors$pdata$ScanOtherColors$unwind$ScanOtherColors__GSHandlerCheckxpmFreeRgbNames??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@xpmGetRgbNamexpmReadRgbNamesXQueryColorsXDefaultColormapXDefaultScreen__security_cookie__security_check_cookieMSWGetImagePixels$pdata$MSWGetImagePixels$unwind$MSWGetImagePixels__imp_GetPixel__imp_SelectObjectXpmCreateXpmImageFromImage$pdata$XpmCreateXpmImageFromImage$unwind$XpmCreateXpmImageFromImagexpmFreeColorTableboundCheckingCalloc
-+rgb.obj/        1345988050              100666  39939     `
-+dÂÃ¶Ã%:P;JÃª.drectve]Â&
-+.debug$SlÃ¡&@B.rdata
-M'@@@.rdataY'@0@.rdata
-`'@@@.rdatak'@0@.rdataq'@0@.rdata
-+w'@@@.rdataÂ'@0@.rdata
-+Â'@@@.rdata
-Â'@@@.rdataÂ'@0@.rdataÂ¥'@@@.rdataÂ­'@0@.rdata
-+Â±'@@@.rdata
-Â»'@@@.rdataÃ'@0@.rdata
-+Ã'@@@.rdata
-+Ã'@@@.rdataÃ '@@@.rdataÃš'@0@.rdata	Ã¯'@@@.rdata	Ãž'@@@.rdata
-(@@@.rdata
-(@0@.rdata
-(@@@.rdata
-+(@@@.rdata
-+)(@@@.rdata3(@0@.rdata7(@0@.rdata
->(@@@.rdataI(@0@.rdataN(@0@.rdataS(@0@.rdata
-+X(@@@.rdata
-b(@@@.rdatam(@@@.rdata{(@@@.rdata
-+Â(@@@.rdataÂ(@@@.rdataÂ¡(@0@.rdata
-+Âš(@@@.rdataÂ²(@0@.rdata
-+Â¹(@@@.rdataÃ(@@@.rdata	Ã(@@@.rdataÃ(@0@.rdata
-Ã(@@@.rdata	Ã¥(@@@.rdata
-+Ã®(@@@.rdata
-+Ãž(@@@.rdata
-)@@@.rdata)@@@.rdata)@@@.rdata/)@@@.rdataA)@@@.rdataQ)@@@.rdata
-`)@@@.rdata
-m)@@@.rdataz)@@@.rdataÂ)@@@.rdata
-Â)@@@.rdataÂ§)@@@.rdataÂž)@0@.rdataÂ¿)@@@.rdataÃ)@0@.rdata
-+Ã)@@@.rdata
-Ã)@@@.rdataÃ£)@@@.rdataÃ²)@@@.rdata*@@@.rdata
-*@@@.rdata
-*@@@.rdata
-+*@@@.rdata
-+7*@@@.rdata
-+A*@@@.rdataK*@@@.rdata`*@@@.rdata
-+o*@@@.rdata
-y*@@@.rdata
-+Â*@@@.rdata
-Â*@@@.rdata
-+Â*@@@.rdataÂ¥*@@@.rdata	Â³*@@@.rdataÂŒ*@0@.rdataÃ*@0@.rdata
-+Ã*@@@.rdataÃ*@@@.rdata	Ã*@@@.rdata
-Ã£*@@@.rdataÃ¯*@0@.rdataÃµ*@0@.rdataÃŒ*@0@.rdata+@0@.rdata
-++@0@.rdata+@0@.rdata+@0@.rdata+@0@.rdata&+@0@.rdata-+@0@.rdata4+@0@.rdata;+@0@.rdataA+@0@.rdataH+@0@.rdataO+@0@.rdataV+@0@.rdata]+@0@.rdatad+@0@.rdatak+@0@.rdatar+@0@.rdatay+@0@.rdataÂ+@0@.rdataÂ+@0@.rdataÂ+@0@.rdataÂ+@0@.rdataÂ+@0@.rdataÂ¢+@0@.rdataÂ©+@0@.rdataÂ°+@0@.rdataÂ·+@0@.rdataÂŸ+@0@.rdataÃ
-+@0@.rdataÃ+@0@.rdataÃ+@0@.rdataÃ+@0@.rdataÃ +@0@.rdataÃ§+@0@.rdataÃ®+@0@.rdataÃµ+@0@.rdataÃŒ+@0@.rdata,@0@.rdata
-+,@0@.rdata,@0@.rdata,@0@.rdata,@0@.rdata%,@0@.rdata,,@0@.rdata3,@0@.rdata:,@0@.rdataA,@0@.rdataH,@0@.rdataO,@0@.rdataV,@0@.rdata],@0@.rdatad,@0@.rdatak,@0@.rdataq,@0@.rdatax,@0@.rdata,@0@.rdataÂ,@0@.rdataÂ,@0@.rdataÂ,@0@.rdataÂ,@0@.rdataÂ¢,@0@.rdataÂ©,@0@.rdataÂ°,@0@.rdataÂ·,@0@.rdataÂœ,@0@.rdataÃ,@0@.rdataÃ,@0@.rdataÃ,@0@.rdataÃ,@0@.rdataÃ ,@0@.rdataÃ§,@0@.rdataÃ®,@0@.rdataÃµ,@0@.rdataÃŒ,@0@.rdata-@0@.rdata	-@0@.rdata-@0@.rdata-@0@.rdata
--@0@.rdata%-@0@.rdata,-@0@.rdata3-@0@.rdata:-@0@.rdataA-@0@.rdataH-@0@.rdataO-@0@.rdataU-@0@.rdata\-@0@.rdatac-@0@.rdataj-@0@.rdataq-@0@.rdatax-@0@.rdata-@0@.rdataÂ-@0@.rdataÂ-@0@.rdataÂ-@@@.rdataÂ-@0@.rdataÂ£-@0@.rdataÂ©-@0@.rdataÂ¯-@0@.rdata
-+ÂŽ-@@@.rdataÂŸ-@0@.rdata
-Ã-@@@.rdata
-+Ã-@@@.rdata
-Ã-@@@.rdata
-Ã€-@@@.rdata
-+Ã°-@@@.rdata
-Ãº-@@@.rdata.@@@.rdata
-
-.@@@.rdata	.@@@.rdata
-".@@@.rdata-.@@@.rdata;.@@@.rdataI.@@@.rdata
-W.@@@.rdata
-d.@@@.rdata
-o.@@@.rdata
-z.@@@.rdataÂ
-.@@@.rdata
-+Â.@@@.rdata
-+Â.@@@.rdataÂš.@@@.rdataÂ¶.@0@.rdata	Â».@@@.rdataÃ.@@@.rdataÃ.@0@.rdata
-+Ã.@@@.rdata
-Ã£.@@@.rdata
-+Ã®.@@@.rdata
-+Ãž.@@@.rdata/@0@.rdata
-/@@@.rdata/@0@.rdata/@@@.rdata'/@0@.rdata-/@0@.rdata4/@0@.rdata:/@0@.rdata
-@/@@@.rdata
-K/@@@.rdata
-+X/@@@.dataÂŽb/>Ãª@PÃ.text:GAG P`.textpKGÂ»G P`.pdata
-ÃGÃ¥G@0@.xdataH@0@.textj
-HuI
- P`.pdata
-Ã­IÃ¹I@0@.xdata
-J@0@.rdata3J@0@.text8J P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±_!d:\Develop\xpm\lib\rgb.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerYellowGreenYellowWhiteSmokeWhiteWheatVioletRedVioletTurquoiseTransparenttomatoThistleTanSteelBlueSpringGreensnowSlateGraySlateBlueSkyBlueSiennaseashellSeaGreenSandyBrownSalmonSaddleBrownRoyalBlueRosyBrownRedpurplePowderBluePlumPinkperuPeachPuffPapayaWhipPaleVioletRedPaleTurquoisePaleGreenPaleGoldenrodOrchidOrangeRedOrangeOliveDrabOldLaceNavyBlueNavyNavajoWhitemoccasinMistyRoseMintCreamMidnightBlueMediumVioletRedMediumTurquoiseMediumSpringGreenMediumSlateBlueMediumSeaGreenMediumPurpleMediumOrchidMediumGoldenrodMediumForestGreenMediumBlueMediumAquamarineMaroonMagentalinenLimeGreenLightYellowLightSteelBlueLightSlateGrayLightSlateBlueLightSkyBlueLightSeaGreenLightSalmonLightPinkLightGrayLightGoldenrodYellowLightGoldenrodLightCyanLightCoralLightBlueLemonChiffonLawnGreenLavenderBlushlavenderKhakiivoryIndianRedHotPinkhoneydewGreenYellowGreenGray99Gray98Gray97Gray96Gray95Gray94Gray93Gray92Gray91Gray90Gray9Gray89Gray88Gray87Gray86Gray85Gray84Gray83Gray82Gray81Gray80Gray8Gray79Gray78Gray77Gray76Gray75Gray74Gray73Gray72Gray71Gray70Gray7Gray69Gray68Gray67Gray66Gray65Gray64Gray63Gray62Gray61Gray60Gray6Gray59Gray58Gray57Gray56Gray55Gray54Gray53Gray52Gray51Gray50Gray5Gray49Gray48Gray47Gray46Gray45Gray44Gray43Gray42Gray41Gray40Gray4Gray39Gray38Gray37Gray36Gray35Gray34Gray33Gray32Gray31Gray30Gray3Gray29Gray28Gray27Gray26Gray25Gray24Gray23Gray22Gray21Gray20Gray2Gray19Gray18Gray17Gray16Gray15Gray14Gray13Gray12Gray11Gray100Gray10Gray1Gray0GrayGoldenrodGoldGhostWhitegainsboroForestGreenFloralWhiteFirebrickDodgerBlueDimGrayDeepSkyBlueDeepPinkDarkVioletDarkTurquoiseDarkSlateGrayDarkSlateBlueDarkSeaGreenDarkSalmonDarkOrchidDarkOrangeDarkOliveGreenDarkKhakiDarkGreenDarkGoldenrodCyancornsilkCornflowerBlueCoralchocolatechartreuseCadetBlueburlywoodBrownBlueVioletBlueBlanchedAlmondBlackBisqueBeigeAzureAquamarineAntiqueWhiteAliceBlueÃ°ÃžÃ¿ÃºÃ«Ã2Â¿ÃÃ°Ã¿Ã¿ÃµÃµÃÃ¿Ã€ÃÃ¿Ã«ÃÃ¿Â+Ã¢Â¥**ÃÂžÂ_ÂÂÃ¿Ãi
-Ã¿rV""ÂÃ¿ÃžÃÃ¿Ã¿ÂžÂ
-V-ÂœÂ·kUV/Ã¿ÂÂ ÂÃ©ÂzÂÂŒÂ8Kf/OOÂŠÂŠÂÃÃ¿ÂÂ¿Ã¿TTT
-ÂÃ¿Â##Ã¿ÃºÃ°PÂiÃÃÃÃžÃžÃ¿ÃÂªÃ¯ÃÂ~~~Ã¿Ã¿Ã¿
-
-
-!!!$$$&&&)))+++...000333666888;;;===@@@BBBEEEGGGJJJMMMOOORRRTTTWWWYYY\\\^^^aaaccc
-+
-+
-+fffiiikkknnnpppsssuuuxxxzzz}}}
-
-
-ÂÂÂÂ
-Â
-Â
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ¡Â¡Â¡Â£Â£Â£ÂŠÂŠÂŠÂšÂšÂšÂ«Â«Â«Â­Â­Â­Â°Â°Â°Â³Â³Â³ÂµÂµÂµÂžÂžÂžÂºÂºÂºÂœÂœÂœÂ¿Â¿Â¿ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ Ã Ã Ã£Ã£Ã£Ã¥Ã¥Ã¥ÃšÃšÃšÃ«Ã«Ã«Ã­Ã­Ã­Ã°Ã°Ã°Ã²Ã²Ã²ÃµÃµÃµÃ·Ã·Ã·ÃºÃºÃºÃŒÃŒÃŒÃ¿Â­Ã¿/Ã°Ã¿Ã°Ã¿iÂŽk99Ã¿Ã¿Ã°Â³Â³~ÃŠÃŠÃºÃ¿Ã°Ãµ|ÃŒÃ¿ÃºÃÂ°Ã¢Ã¿Ã°ÂÂÃ Ã¿Ã¿Ã®ÃÂÃºÃºÃÂšÂšÂšÃ¿Â¶ÃÃ¿Â z Â²ÂªÂÃÃºÂpÃ¿wÂÂ|ÂÃÃ¿Ã¿Ã Â¯ÃºÃ°ÃŠÃ¿Ã¿ÂRÂÂ22Ã2ÂKÃÃfÂœRÂœÂpÃ4wfjjÂ#Â#ÃÃÃ y//dÃµÃ¿ÃºÃ¿Ã€Ã¡Ã¿Ã€ÂµÃ¿ÃÂ­##u##uÃœÃµÃŠkÂ#Ã¿ÂÃ¿EÃ¯ÂÃ¯Ã®ÃšÂªsÃxÂ¯Ã®Ã®ÃpÂÃ¿Ã¯ÃÃ¿ÃÂ¹ÃÂ
-?Ã¿ÂµÃ
-Ã
-HÂÂ°Ã ÃŠÂ  Ã°Ã¿ÂŒÂÂAiÃ¡ÂEÃ©ÂzÃŽÂ€`RÂÂÃ¿ÃµÃ®ÂR-rÂÃ¿~ÂÂ«pÂÂÃ¿ÃºÃºAÂ¬ATpÂªÃÂžÂÃÂ¿ÃÃ¿cGÃÃÂ>ÃÃ³>ÂÃµÃÂ³Ã¿Ã¿Ã¿ÃµÃµÃµÃ¿Ã¿2Ã8ÃªÃÂ¿ ÂŒ0Â¹@Â¶PÂ³`Â°pÂ­ÂÂªÂÂ§Â Â€Â°Â¡ÃÂÃÂÃ ÂÃ°ÂÂÂ Â0Â@ÂPÂ`Âp}ÂzÂwÂ tÂ°qÃnÃkÃ hÃ°eb_ \0Y@VPS`PpMÂJÂGÂ DÂ°AÃ>Ã;Ã 8Ã°52/ ,0)@&P#` p
-ÂÂÂ Â°ÃÃ
-Ã Ã°Ã¿ ÃŒ0Ã¹@Ã¶PÃ³`Ã°pÃ­ÂÃªÂÃ§Â Ã€Â°Ã¡ÃÃÃÃÃ ÃÃ°ÃÃÃ Ã0Ã@ÃPÃ`ÃpÂœÂÂºÂÂ·Â ÂŽÂ°Â±ÃÂ®ÃÂ«Ã ÂšÃ°Â¥Â¢Â Â0Â@ÂPÂ`ÂpÂÂÂÂÂÂ ÂÂ°ÂÃ~Ã{Ã xÃ°uro l0i@fPc``p]ÂZÂWÂ TÂ°QÃNÃKÃ HÃ°EB? <09@6P3`0p-Â*Â'Â $Â°!Ã
-ÃÃ Ã°		 	
-0		@	P	`	p	ÃœÂ	ÃºÂ	Ã·Â 	ÃŽÂ°	Ã±Ã	Ã®Ã	Ã«Ã 	ÃšÃ°	Ã¥
-+Ã¢
-+Ã 
-+Ã0
-+Ã@
-+ÃP
-+Ã`
-+Ãp
-+ÃÂ
-+ÃÂ
-+ÃÂ 
-+ÃÂ°
-+ÃÃ
-+ÂŸÃ
-+Â»Ã 
-+ÂžÃ°
-+Âµ
-Â²
-Â¯ 
-Â¬0
-Â©@
-ÂŠP
-Â£`
-Â p
-ÂÂ
-ÂÂ
-ÂÂ 
-ÂÂ°
-ÂÃ
-ÂÃ
-ÂÃ 
-ÂÃ°
-Â
-
-Â
- 
-|0
-y@
-vP
-s`
-pp
-mÂ
-jÂ
-gÂ 
-dÂ°
-aÃ
-^Ã
-[Ã 
-XÃ°
-U
-R
-O 
-L0
-I@
-FP
-C`
-@p
-=Â
-:Â
-7Â 
-4Â°
-1Ã
-.Ã
-+Ã 
-(Ã°
-%" 
-0@P`p
-Â
-+ÂÂÃÃHÂ\$DÂ
-3ÃAÂÃEÂ
-Ã~;DÂL$(LÂAÂÂ¶ÃA;ÃuÂ·ÃfÃÃšÂ¶Ã;Ãu
-ÃÃªÂ¶ÃA;ÃtÃ¿ÃIÂÃA;Ã|Ã3ÃHÂ\$ÃHÂ\$HcÃHÂ
-HÃHÂÃÃÃ
-Ã
-dÃ
-pÃÃÃ4HÂ\$HÂl$HÂt$HÂ|$ ATAUAVHÂÃ¬ MÂÃ¡MÂÃšLÂÃ²ÃšÂº HÂÃHÂÃšÃšHÂ
-Ãt0Â8tffÂÂ¶HHÃ¿ÃÂHÃ¿ÂÃ¹uÃ±Âº HÂÃÃšHÂ
-ÃuÃÂ}HÂÃtfDÂŸ
-ÃšHÃ¿ÃÂCÃ¿Â;uÃ­HÂHÂÃÃšHÂ
-ÃtÃ@aÂ=3ÃHÂ
-Ã¿Ã@ÂÂ+ÃÃÃžHcÃ°HÂÃHÃHÂÃHÂÃÃšÂ
-Ãt.yÂ~Ã¿Ã«Â^;ÃHÂ
-~ÃAÃÃ¿AÃEAÃ$Ã«/HÂÃHÂ
-HÃÂLÃÂ¶ÃAÂÂ·ÃfÃÃšÃÃ©Â¶ÃAÂEÂ¶ÃAÂ$HÂÃÃšHÂ\$@HÂl$HHÂt$PHÂ|$XÂžHÂÃ A^A]A\Ã(Ã¥8Ã€hÃ€ÂÃ£ÂÃ¢ÂÃÂ­ÃÂ¶Ã
-ÃÃÃ°Ã
-Ã
-BÃjÃŠÃŠÃ
-
-
-t
-
-d
-+
-T	
-4
-2Ã ÃÃgreyÃ@comp.id	xÂÃ¿Ã¿.drectve].debug$Sl.rdata
-Â³Q
-Ã¹.rdataVÂÂ³Ã '.rdata
-'ÃFD.rdata$Ã£ÂÂµf.rdata
-wÂ¶Â.rdata
-+ÃÃ­Ãµ{Â.rdata	Â#ÂŸ	.rdata
-+
-+V`?ÃŠÃ
-+.rdata
-
-ÃÃXÂžÃ»
-.rdata
-ÃÃ Â²
-
-.rdata
-^Â¡ÂŠE;
-.rdataÃÃ¶Y.rdata
-+Ã¥ÃÂ¬Ãs.rdata
-Â¹
-Â.rdatay~FÂ¶.rdata
-+Ã©
-+&(Ã.rdata
-+ÃÃ³XÂ­Ã±.rdataÃžÃFg.rdatayiBÂ/.rdata	Â£DmÃL.rdata	ÂUÃÃk.rdata
-Â
-rÂnÂ.rdatasPÃ®ÃŒÂ¬.rdata
-qÂ€Ã±UÃ.rdata
-+lÂ ÃÃ¬.rdata
-
-+ÃªÃm
-
-.rdata
-A`Â.,
-.rdata
-ÃÃ²Ã­F
-.rdata
-Ã;&
-c.rdata !8ÂÃÂ
- .rdata!#}ÂºÂ !.rdata"sÃÃ°Â»".rdata#
-+ÃWÃ¶Ã#.rdata$
-Ã³ÃÂ¹
-Ã¶$.rdata%d>@Â%.rdata&Ã£Â³Â
-=&.rdata'
-+Â±Âb'.rdata(wAÂ£Â(.rdata)'%>ÂÂ§).rdata*
-+}ÂÂ
-Ã*.rdata+Ã5ÃÃ¢+.rdata,
-+YÃXÂ¿Ã¿,.rdata-)tLc-.rdata.	cÂ·Ã·Â°=..rdata/Â ÃÃ\/.rdata0
-u.qw0.rdata1	ayÃ±Â1.rdata2
-+ÂžÂ·ÃºÃ¢Â¹2.rdata3
-+Ã¿Â
-Â¢ÃÃ3.rdata4
-Ã¶Ã{Ã¹4.rdata5E_Ã
-5.rdata6ÃÃ
-ÂD6.rdata7ÂI\$l7.rdata8PAkÃÂ8.rdata9Â*Â8ÂŸ9.rdata:
-mÃ%Â¿Ã€:.rdata;
-6KÃ€;.rdata<V %Â,<.rdata=ÃÂ²UÃT=.rdata>
-'epÃ·~>.rdata?Ã­Ã©Ã©Â ?.rdata@ÂVÃÂŸÃ@.rdataAÃšMÂ/ÃŠA.rdataBÃÂÂ
-B.rdataC
-+QÃÃ³Ã C.rdataD
-ErÃ@D.rdataEÂÂ
-fcE.rdataFÂOÂÂÂF.rdataGÂµÂ¶ÃžÂ¯G.rdataH
-ÃÃ­Ã£ÃH.rdataIÃ§4Â}Ã¹I.rdataJ
-`Â¡Â
-
-	J.rdataK
-+"Ã¿<A	K.rdataL
-+ÃÂ»Âa	L.rdataMÂuÂ²Â	M.rdataNÂ³ÃÂ¶DÂ­	N.rdataO
-+Â
-Â=Ã	O.rdataP
-<rNÃ³	P.rdataQ
-+Ã­BÃ±Â
-+Q.rdataR
-Â€ÂÂ±85
-+R.rdataS
-+P
-WÂY
-+S.rdataTÃŒÂŠÂ Ãy
-+T.rdataU	ÂªÃÂ°Â
-+U.rdataVjÂ¢ÃºÂ¿Âœ
-+V.rdataW)ÃÂ€ÂÃ
-+W.rdataX
-+Â¹Â€Â¢wÃµ
-+X.rdataYÂÂHÂ­
-Y.rdataZ	Ãª<$3
-Z.rdata[
-MÂ]ÃŠR
-[.rdata\ÂšÃÃ(u
-\.rdata]s
-PÂ
-].rdata^24IÂ®
-^.rdata_Ãœ(ÂÃÃ
-_.rdata`ÂŒÂ
-ÃÃš
-`.rdataaJÂšÃŒ
-a.rdatab>{Â³Ã¥"
-b.rdatacÃ¹Ã­Ã²Âª?
-c.rdatadÂžÃÃ©Â³\
-d.rdatae{ÂÃÂy
-e.rdataf:ÂŸÃÂÂ
-f.rdatagxÃqGÂ³
-g.rdatahDoÃQÃ
-h.rdatai^ÃHÃ«
-i.rdatajÃB\Ã
-j.rdatakÂsGÃ%
-k.rdatalH jÃœB
-l.rdatam	qÃ€_
-m.rdatanÃÂ0Â«|
-n.rdataoÂÂ¶+Â²Â
-o.rdatapLÃ¥ÂÂ¶
-p.rdataq
-Ã
-ÂÃ
-q.rdatar9Ã¶j^Ã°
-r.rdatasy(ÂZ
-s.rdatat8ÂC)t.rdatauÃ·ÃFu.rdatavÂ¶4Ãcv.rdatawug6Ã¶Âw.rdatax4V-Ã¯Âx.rdatayÃ³ÃlÂ Âºy.rdatazÂ²Ã±wÂ¹Ãz.rdata{qÂ¢ZÂÃŽ{.rdata|0ÂAÂ|.rdata}Ã¶ÃªÃ²Ã.}.rdata~NBA[J~.rdatasZBg.rdataÂÃoÃÃ
-ÂÂ.rdataÂÂ^ÃÃÂ¡Â.rdataÂB
-ÃŽÃ·ÂŸÂ.rdataÂ<Ã¯Ã®ÃÂ.rdataÂÃÂªÂ®Â¡ÃžÂ.rdataÂ
-Â
-ÂÂµÂžÂ
-.rdataÂFÃÂÂ2Â.rdataÂÃ¹ÂÂOÂ.rdataÂÂ·ÃÃ©ÃlÂ.rdataÂÃŒYÂÂ.rdataÂVÃ
-@Â¥Â.rdataÂÂÃÂÃÃÂ.rdataÂÃÃ ÂÃÃÂ.rdataÂÂ³Â²ÃµÃŒÂ.rdataÂZÂÂ©Ã¬Â.rdataÂÂÃšÂ£6Â.rdataÂÃ%Ã³ÂºSÂ.rdataÂvÃÂpÂ.rdataÂ^GÃ
-ÂÂÂ.rdataÂtÂÃÃ«ÂªÂ.rdataÂ ÂÃ
-XÃÂ.rdataÂaÂ§ÃAÃ£Â.rdataÂÂ®Â»FÃÂ.rdataÂÃ¯Â]Ã
-Â.rdataÂ,ÃpÃŽ:Â.rdataÂmÃškÃ­WÂ.rdataÂÂª~*Â¢tÂ.rdataÂÃ«O1Â»ÂÂ.rdataÂ(
-
-ÂÂ®Â.rdataÂi-ÂÃÂ.rdataÂ5Â¹ÃÃ²ÃšÂ.rdataÂÂ¥ÂÂ]Â.rdataÂ Ã€Â±ÂD!Â .rdataÂ¡+Â­	Ã>Â¡.rdataÂ¢jÂÃ[Â¢.rdataÂ£Â©Ã?Ã±xÂ£.rdataÂ€ÃšÃŸ$ÃšÂÂ€.rdataÂ¥/heÂ§Â²Â¥.rdataÂŠnY~ÂŸÃÂŠ.rdataÂ§Â­
-+SÂÃ¬Â§.rdataÂšÃ¬;HÂ	Âš.rdataÂ©Ã²/ÂÂœ&Â©.rdataÂªÂÃªH\BÂª.rdataÂ«ÃÃSE_Â«.rdataÂ¬
-ÃÃÃ|Â¬.rdataÂ­]Ã¶ÃÃÂÂ­.rdataÂ®ÂÂ¥ÃœÃ°Â¶Â®.rdataÂ¯ÃÂÃŠÃ©ÃÂ¯.rdataÂ°Â§ÂŠÃ°Â°.rdataÂ±Y3ÂŒÂ¿
-Â±.rdataÂ²Â`ÂÂ*Â².rdataÂ³ÃQÂÂGÂ³.rdataÂŽÂ³
-Â
-Â€dÂŽ.rdataÂµÃT^ÂÂµ.rdataÂ¶ÂeGÂÂ¶.rdataÂ·EyÂÃÂºÂ·.rdataÂžHÂÃÃÂž.rdataÂ¹ÃÂ»Ã²ÃŽÂ¹.rdataÂºÂ*Â Ã«Âº.rdataÂ»AÂŒÃ¡Â€.Â».rdataÂŒÂÃºÂœKÂŒ.rdataÂœÃÃÃÂhÂœ.rdataÂŸÃÂ
-ÂŸ.rdataÂ¿ÂÃ¯ÃÂÂ£Â¿.rdataÃpMÂšÂÃÃ.rdataÃ1|Â³ÂÃÃ.rdataÃÃŠÂ
-ÂÃžÃ.rdataÃ
-+ÃÂÃºÃ.rdataÃÃ«Ã¿ÃÃ3Ã.rdataÃ
-
-Ã²ÂÃŽ1NÃ
-.rdataÃ
-+ÂqÃpÃ.rdataÃ
-CBÃªÂÃ.rdataÃ
-ÃÃÃ«ÂÂ³Ã.rdataÃ
-+ÃÃÃÃ.rdataÃ
-ÃÃµÃÃµÃ.rdataÃCVÂÂÃ.rdataÃ
-Ã¬|ÃÂ²4Ã.rdataÃ	SÂ±Â€sWÃ.rdataÃ
-ÂÃC
-vÃ.rdataÃpÃÃÂÃ.rdataÃÃÃÂœÃ.rdataÃÃ¢ÂÂ¬ÂÃ¢Ã.rdataÃ
-zÂJÂÃ.rdataÃ
-Ã®ÂÃ·+Ã.rdataÃ
-Âºw^ÂMÃ.rdataÃ
-MgpÃnÃ.rdataÃ]uÃ²7ÂÃ.rdataÃ
-+Â¥
-wÂ¶Ã.rdataÃ
-+g}XÂÃÃ.rdataÃÃ€Ã§Ã¢ÃÃ¶Ã.rdataÃÂ±*Â»Ã.rdataÃ	Ã ÂŽ6Ã.rdataÃ8ÂÃŠÃTÃ.rdataÃÃµuÃ
-ÃzÃ.rdataÃ
-+kÂvÂÃ.rdataÃ
-=ÂšÂ³Â¶Ã.rdataÃ 
-+[Ãz:ÃÃ .rdataÃ¡
-+ÂGÃ
-ÂÃžÃ¡.rdataÃ¢aÃÃ¢.rdataÃ£
-ÂÃ³Ã£g4Ã£.rdataÃ€ÃvsVÃ€.rdataÃ¥ÃŸuCqÃ¥.rdataÃŠXfPQÂÃŠ.rdataÃ§}R.ÃÂ³Ã§.rdataÃšÂÂ©~ÃÃš.rdataÃ©ÃRxdÃ¬Ã©.rdataÃª
-Â
-
-Ãª.rdataÃ«
-Ã·1Â­*
-Ã«.rdataÃ¬
-+Ã€ÂÃ¿N
-Ã¬.dataÃ­ÂŽÃªÃ»LÂÂn
-Ã­|
-Â°Ã­.textÃ®Â±ÂŒÂ±ÃÂ
-Ã® .textÃ¯pi~nÂ
-Ã¯ .pdataÃ°
-ÂÂPÂ¬Ã¯Â«
-Ã°.xdataÃ±
-ÃœÃÃ¯Ã
-Ã±$LN10Ã¯.textÃ²j
-JDÂÃÃ
-Ã² .pdataÃ³
-ÃÂ·\Ã§Ã²Ãš
-Ã³.xdataÃŽ
-[ÃNÃ­Ã²
-ÃŽfree 
- strstr .rdataÃµ>Ã
-Z)
-Ãµtolower strchr strdup $LN26Ã².textÃ¶.B+ÂD
-Ã¶ T
-??_C@_0M@HNCGGICD@YellowGreen?$AA@??_C@_06ICCAKDNH@Yellow?$AA@??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@??_C@_05PLKILNHI@White?$AA@??_C@_05PIEKEAEL@Wheat?$AA@??_C@_09GHIAHKFI@VioletRed?$AA@??_C@_06GCLALPIA@Violet?$AA@??_C@_09PKEKPHNP@Turquoise?$AA@??_C@_0M@DMHCPCEI@Transparent?$AA@??_C@_06NALDPNEI@tomato?$AA@??_C@_07NPHLIBMI@Thistle?$AA@??_C@_03CILPFPCI@Tan?$AA@??_C@_09MENJEMGM@SteelBlue?$AA@??_C@_0M@JADEIAIP@SpringGreen?$AA@??_C@_04HPKDHBOB@snow?$AA@??_C@_09DEFDJNGA@SlateGray?$AA@??_C@_09LBCNGEEN@SlateBlue?$AA@??_C@_07PNJLOGGO@SkyBlue?$AA@??_C@_06OLNBEJPI@Sienna?$AA@??_C@_08MFJLKPPC@seashell?$AA@??_C@_08MPDGLOME@SeaGreen?$AA@??_C@_0L@PKPGDMJG@SandyBrown?$AA@??_C@_06JOHNHAPC@Salmon?$AA@??_C@_0M@NBNLJNOB@SaddleBrown?$AA@??_C@_09NKNFPLIJ@RoyalBlue?$AA@??_C@_09HBGGELGD@RosyBrown?$AA@??_C@_03PADCEAKC@Red?$AA@??_C@_06GEHONCEN@purple?$AA@??_C@_0L@IKFOHFNE@PowderBlue?$AA@??_C@_04PCFHDAMD@Plum?$AA@??_C@_04IDKACLOG@Pink?$AA@??_C@_04MJMKNOJB@peru?$AA@??_C@_09OKCCEKJG@PeachPuff?$AA@??_C@_0L@JIMBJDOA@PapayaWhip?$AA@??_C@_0O@KNAELIFM@PaleVioletRed?$AA@??_C@_0O@DAMODFNL@PaleTurquoise?$AA@??_C@_09JIGGJDDI@PaleGreen?$AA@??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@??_C@_06PAKNAFKG@Orchid?$AA@??_C@_09PDBAPE@OrangeRed?$AA@??_C@_06LMIDBFFB@Orange?$AA@??_C@_09KDCNEHNA@OliveDrab?$AA@??_C@_07PJJBFELP@OldLace?$AA@??_C@_08KJABFMDC@NavyBlue?$AA@??_C@_04PDAFKIPB@Navy?$AA@??_C@_0M@PFCNBHOF@NavajoWhite?$AA@??_C@_08OIIPPDDA@moccasin?$AA@??_C@_09POIPCADB@MistyRose?$AA@??_C@_09MFNHBCHG@MintCream?$AA@??_C@_0N@ILIFGKIL@MidnightBlue?$AA@??_C@_0BA@FICOLOP@MediumVioletRed?$AA@??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@??_C@_0N@EPKOGBBA@MediumPurple?$AA@??_C@_0N@BEMAIPGH@MediumOrchid?$AA@??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@??_C@_0L@GDAICLDE@MediumBlue?$AA@??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@??_C@_06NMEFHGAJ@Maroon?$AA@??_C@_07LFEAGNHO@Magenta?$AA@??_C@_05MLLCELJD@linen?$AA@??_C@_09NCIGFANI@LimeGreen?$AA@??_C@_0M@IGPDELNF@LightYellow?$AA@??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@??_C@_0P@LOKKLDIA@LightSlateGray?$AA@??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@??_C@_0M@JKKOJIPA@LightSalmon?$AA@??_C@_09CAIKIAKL@LightPink?$AA@??_C@_09GPKCMEJ@LightGray?$AA@??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@??_C@_09CBPIIJBO@LightCyan?$AA@??_C@_0L@JFDGDMCP@LightCoral?$AA@??_C@_09IDIENFGE@LightBlue?$AA@??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@??_C@_09IGCCILNJ@LawnGreen?$AA@??_C@_0O@OIOECAME@LavenderBlush?$AA@??_C@_08KJDCPJPL@lavender?$AA@??_C@_05PBMHPMDG@Khaki?$AA@??_C@_05NNJJIMHF@ivory?$AA@??_C@_09GLNHDDDA@IndianRed?$AA@??_C@_07DHJFKJBB@HotPink?$AA@??_C@_08BKNCNHLL@honeydew?$AA@??_C@_0M@GCHHLGNN@GreenYellow?$AA@??_C@_05GGOIJPPE@Green?$AA@??_C@_06DCIOCFPC@Gray99?$AA@??_C@_06CLJFBELD@Gray98?$AA@??_C@_06KMANAIHM@Gray97?$AA@??_C@_06LFBGDJDN@Gray96?$AA@??_C@_06JODLGKPO@Gray95?$AA@??_C@_06IHCAFLLP@Gray94?$AA@??_C@_06MIGBMNHI@Gray93?$AA@??_C@_06NBHKPMDJ@Gray92?$AA@??_C@_06PKFHKPPK@Gray91?$AA@??_C@_06ODEMJOLL@Gray90?$AA@??_C@_05JEMJJCE@Gray9?$AA@??_C@_06DDEMEPMF@Gray89?$AA@??_C@_06CKFHHOIE@Gray88?$AA@??_C@_06KNMPGCEL@Gray87?$AA@??_C@_06LENEFDAK@Gray86?$AA@??_C@_06JPPJAAMJ@Gray85?$AA@??_C@_06IGOCDBII@Gray84?$AA@??_C@_06MJKDKHEP@Gray83?$AA@??_C@_06NALIJGAO@Gray82?$AA@??_C@_06PLJFMFMN@Gray81?$AA@??_C@_06OCIOPEIM@Gray80?$AA@??_C@_05BAFHKIGF@Gray8?$AA@??_C@_06DIBAAIPI@Gray79?$AA@??_C@_06CBALDJLJ@Gray78?$AA@??_C@_06KGJDCFHG@Gray77?$AA@??_C@_06LPIIBEDH@Gray76?$AA@??_C@_06JEKFEHPE@Gray75?$AA@??_C@_06INLOHGLF@Gray74?$AA@??_C@_06MCPPOAHC@Gray73?$AA@??_C@_06NLOENBDD@Gray72?$AA@??_C@_06PAMJICPA@Gray71?$AA@??_C@_06OJNCLDLB@Gray70?$AA@??_C@_05JHMPLEKK@Gray7?$AA@??_C@_06DJNCGCMP@Gray69?$AA@??_C@_06CAMJFDIO@Gray68?$AA@??_C@_06KHFBEPEB@Gray67?$AA@??_C@_06LOEKHOAA@Gray66?$AA@??_C@_06JFGHCNMD@Gray65?$AA@??_C@_06IMHMBMIC@Gray64?$AA@??_C@_06MDDNIKEF@Gray63?$AA@??_C@_06NKCGLLAE@Gray62?$AA@??_C@_06PBALOIMH@Gray61?$AA@??_C@_06OIBANJIG@Gray60?$AA@??_C@_05IONEIFOL@Gray6?$AA@??_C@_06DLJENMJG@Gray59?$AA@??_C@_06CCIPONNH@Gray58?$AA@??_C@_06KFBHPBBI@Gray57?$AA@??_C@_06LMAMMAFJ@Gray56?$AA@??_C@_06JHCBJDJK@Gray55?$AA@??_C@_06IODKKCNL@Gray54?$AA@??_C@_06MBHLDEBM@Gray53?$AA@??_C@_06NIGAAFFN@Gray52?$AA@??_C@_06PDENFGJO@Gray51?$AA@??_C@_06OKFGGHNP@Gray50?$AA@??_C@_05KFPJNGCI@Gray5?$AA@??_C@_06DKFGLGKB@Gray49?$AA@??_C@_06CDENIHOA@Gray48?$AA@??_C@_06KENFJLCP@Gray47?$AA@??_C@_06LNMOKKGO@Gray46?$AA@??_C@_06JGODPJKN@Gray45?$AA@??_C@_06IPPIMIOM@Gray44?$AA@??_C@_06MALJFOCL@Gray43?$AA@??_C@_06NJKCGPGK@Gray42?$AA@??_C@_06PCIPDMKJ@Gray41?$AA@??_C@_06OLJEANOI@Gray40?$AA@??_C@_05LMOCOHGJ@Gray4?$AA@??_C@_06DPBJKACE@Gray39?$AA@??_C@_06CGACJBGF@Gray38?$AA@??_C@_06KBJKINKK@Gray37?$AA@??_C@_06LIIBLMOL@Gray36?$AA@??_C@_06JDKMOPCI@Gray35?$AA@??_C@_06IKLHNOGJ@Gray34?$AA@??_C@_06MFPGEIKO@Gray33?$AA@??_C@_06NMONHJOP@Gray32?$AA@??_C@_06PHMACKCM@Gray31?$AA@??_C@_06OONLBLGN@Gray30?$AA@??_C@_05PDKDHBKO@Gray3?$AA@??_C@_06DONLMKBD@Gray29?$AA@??_C@_06CHMAPLFC@Gray28?$AA@??_C@_06KAFIOHJN@Gray27?$AA@??_C@_06LJEDNGNM@Gray26?$AA@??_C@_06JCGOIFBP@Gray25?$AA@??_C@_06ILHFLEFO@Gray24?$AA@??_C@_06MEDECCJJ@Gray23?$AA@??_C@_06NNCPBDNI@Gray22?$AA@??_C@_06PGACEABL@Gray21?$AA@??_C@_06OPBJHBFK@Gray20?$AA@??_C@_05OKLIEAOP@Gray2?$AA@??_C@_06DMJNHEEK@Gray19?$AA@??_C@_06CFIGEFAL@Gray18?$AA@??_C@_06KCBOFJME@Gray17?$AA@??_C@_06LLAFGIIF@Gray16?$AA@??_C@_06JACIDLEG@Gray15?$AA@??_C@_06IJDDAKAH@Gray14?$AA@??_C@_06MGHCJMMA@Gray13?$AA@??_C@_06NPGJKNIB@Gray12?$AA@??_C@_06PEEEPOEC@Gray11?$AA@??_C@_07EGKCDIIG@Gray100?$AA@??_C@_06ONFPMPAD@Gray10?$AA@??_C@_05MBJFBDCM@Gray1?$AA@??_C@_05NIIOCCGN@Gray0?$AA@??_C@_04KFNAIHAE@Gray?$AA@??_C@_09OGGDAFEL@Goldenrod?$AA@??_C@_04PABHPHAJ@Gold?$AA@??_C@_0L@KFIMMJOB@GhostWhite?$AA@??_C@_09MIGKOGAO@gainsboro?$AA@??_C@_0M@GODNHLND@ForestGreen?$AA@??_C@_0M@BKMBPOEB@FloralWhite?$AA@??_C@_09EHCEAFM@Firebrick?$AA@??_C@_0L@IPLDLLMK@DodgerBlue?$AA@??_C@_07BEDHGNF@DimGray?$AA@??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@??_C@_08GKFCFKAC@DeepPink?$AA@??_C@_0L@JPDLIDIP@DarkViolet?$AA@??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@??_C@_0L@GDPGEMPN@DarkSalmon?$AA@??_C@_0L@NCGDJKJ@DarkOrchid?$AA@??_C@_0L@EBAICJFO@DarkOrange?$AA@??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@??_C@_09BIACIJCM@DarkKhaki?$AA@??_C@_09IPCNOKOO@DarkGreen?$AA@??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@??_C@_04ICNCCCFD@Cyan?$AA@??_C@_08DECOJLB@cornsilk?$AA@??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@??_C@_05JNPICLKJ@Coral?$AA@??_C@_09BPADAHOC@chocolate?$AA@??_C@_0L@CHNAEACO@chartreuse?$AA@??_C@_09CGAPEKNC@CadetBlue?$AA@??_C@_09JHLANABP@burlywood?$AA@??_C@_05EGDKJJDN@Brown?$AA@??_C@_0L@PDJLLNIH@BlueViolet?$AA@??_C@_04CAKOHOCJ@Blue?$AA@??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@??_C@_05BPGNDIAE@Black?$AA@??_C@_06LJLNHCPM@Bisque?$AA@??_C@_05EOEDPHMI@Beige?$AA@??_C@_05CKEFAMIJ@Azure?$AA@??_C@_0L@IKHGMDBB@Aquamarine?$AA@??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@??_C@_09ODOKIMGN@AliceBlue?$AA@theRGBRecordsnumTheRGBRecordsxpmReadRgbNamesxpmGetRgbName$pdata$xpmGetRgbName$unwind$xpmGetRgbNamexpmGetRGBfromName$pdata$xpmGetRGBfromName$unwind$xpmGetRGBfromNamexpmstrcasecmp??_C@_04GDBIAANM@grey?$AA@xpmFreeRgbNames
-+RdFToI.obj/     1345988049              100666  5315      `
-+dÂÃ%:PÂ¢
-X.drectve]Â¬
-+.debug$Sp	@B.textEyÂŸ P`.pdata
-T`@0@.xdata
-~Â@0@.rdataÂ€@@@.rdataÂŽ@0@.rdataÂž@0@.rdataÂº@@@.rdataÃ@0@.textBÃ P`.pdata
-0<@0@.xdataZj@0@.pdata
-ÂÂ@0@.xdataÂ²Ã@0@.pdata
-Ã€Ã°@0@.xdata@0@.text\r	 P`.pdata
-
-+
-+@0@.xdata
-2
-+N
-+@0@.textÂ€X
-+ÃŒ
-+	 P`.pdata
-V
-b
-@0@.xdataÂ
-Â
-@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±b$d:\Develop\xpm\lib\RdFToI.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHÂ\$HÂt$ WHÂÃ¬0HÂH3ÃHÂÂ$ HÂÃLÂÃHÂ
-ÃuÃšHÂCÃ©ÃHÂÃÃ¿3ÃIÂÃžÃ²Â®HÃ·ÃHÃ¿ÃÂÃ¹HÂÃ~OÂAÃŸHÂ5Â¹HcÃžIÃžÃ³ÂŠu6HÂHÂL$ ÃÃšHÂHÂL$ ÃšHÂCHÂ
-ÃuwÂÃÃ¿Ã«{ÂÃº~OÂBÃœHÂ5Â¹HcÃžIÃžÃ³ÂŠu6HÂHÂL$ ÃÃšHÂHÂL$ ÃšHÂCHÂ
-Ãu#ÂÃÃ¿Ã«'HÂIÂÃÃšHÂCHÂ
-ÃtÂÃÃC
-3ÃHÂÂ$ H3ÃÃšLÂÂ$0IÂ[ IÂs(IÂÃ£_Ã"0!\ r
-ÂÂÂÂ°ÃÃÃÃ§ÃŒ,#E
-$dK4JF
-p gunzip -qc "%s".gzruncompress -c "%s".ZHÂÃ¬(ÂÂÃštÂÃžu-HÂIHÂÃ(Ã©HÂ\$ HÂYÃšH;ÃtHÂÃÃšHÂ\$ HÂÃ(Ã:'!49=B&&,!
-&&
-8
-=&&2!4
-&
-&8
-&&8B@SUVWATHÂÃ¬Ã°HÂH3ÃHÂÂ$Ã HÂÂŒ$@HÂÃ±HÂL$@MÂÃ¡IÂÃšHÂÃÃšHÂL$`ÃšHÂÂ$Â HÂÃÃšÂ
-ÃÂ
-ÃHÂ
-Ã¿thHÂÃÃšHÂL$`HÂÃÃšHÂD$`HÂ|$0HÂD$(HÂD$@HÂÂ$Â MÂÃLÂÃ
-HÂÃHÂD$ ÃšÂÃÂ
-ÃxLÂD$`HÂT$@HÂÃÃšHÂL$`ÃšÃ«.3ÃHÂÂ$Â MÂÃHÂD$0HÂD$(HÂD$@LÂÃ
-HÂÃHÂD$ ÃšÂÃÂÂ$Â ÂÃštÂÃžu&HÂÂ$ÂšÃšÃ«ÃšHÂÂ$ÂšH;ÃtÃšHÂL$@ÃšÂÃHÂÂ$Ã H3ÃÃšHÂÃÃ°A\_^][Ã":KDJTiIvHÂ¥GÂœFÃEÃµG:
-!.98DJ#\LLC ^Ãp`P0Ã @SVWHÂÃ¬pHÂH3ÃHÂÂ$`HÂÃHÂÃIÂÃ°HÂÃºÃšHÂÃÃšHÂT$ HÂÃÃšÂ
-ÃuBHÂL$ LÂÃHÂÃÃšÂL$ ÂÃ©ÂÃtÂÃ¹u HÂL$(ÃšÃ«ÃšHÂL$(H;ÃtÃšÂÃHÂÂ$`H3ÃÃšHÂÃp_^[Ã"*K2J?SVm:t!Â9Â#Â€WWU
-
-Np`0`@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.textEÃ®ÃÂÂ¯ .pdata
-=Ã
-+Ã.xdata
-'ÃŽÃÃª%: fopen .rdataÂÃTAK.rdataÃÂÂ¥Ã_popen .rdatat	
-Âsprintf .rdata	]YVÃ«Â±	.rdata
-+4ÃÂrÃš
-+ 
- .text
-B*ÃªÃ®7
- .pdata
-
-zÃ²>Ã¡
-D
-.xdata
-ÃÃ©^
-Z
-.pdata
-ÂŸÂªÂ
-p.xdata1?UÂ
-Â.pdata
-Ãº$ÂŸÃ§
-Â.xdataÃ9Ã
-
-Â°fclose _pclose .text\Ã°Â²aÃ
- .pdata
-=Ã­ÃŸÂ€Ã.xdata
-Ã±
-zfÃ²
- 
- , = S b t Â $LN15.textÂ€	,Â¶dÃ©Â .pdata
-vÃ©.Â©.xdataÃÂ¹Ã§ÃÃ€ $LN11Ã±OpenReadFile$pdata$OpenReadFile$unwind$OpenReadFile__GSHandlerCheck??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_01KDCPPGHE@r?$AA@??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_02HCDJPINJ@?4Z?$AA@__iob_func__security_cookie__security_check_cookiexpmDataClose$pdata$1$xpmDataClose$chain$1$xpmDataClose$pdata$0$xpmDataClose$chain$0$xpmDataClose$pdata$xpmDataClose$unwind$xpmDataCloseXpmReadFileToImage$pdata$XpmReadFileToImage$unwind$XpmReadFileToImageXpmFreeXpmImageXpmFreeXpmInfoxpmSetAttributesxpmParseDataAndCreatexpmSetInfoMaskxpmInitAttributesxpmInitXpmInfoxpmInitXpmImageXpmReadFileToXpmImage$pdata$XpmReadFileToXpmImage$unwind$XpmReadFileToXpmImagexpmParseData
-+RdFToDat.obj/   1345988049              100666  1111      `
-+dÂÃ%:Pi.drectve]Ã
-+.debug$Sp9@B.textfÂ© P`.pdata
-7C@0@.xdataa@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\RdFToDat.obj:<bÃ	x	xMicrosoft (R) Optimizing Compiler@SHÂÃ¬ÂHÂÃÃD$@HÂ
-ÃtHÃLÂD$@HÂT$ ÃšÂ
-Ãu*LÂD$@HÂT$ HÂÃÃšHÂL$ ÂÃÃšHÂL$@ÃšÂÃHÂÃÂ[Ã+AMWf
-		Ã²0@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.textfx5ÂÃ .pdata
-<Â©Â.xdata\^]Ã/I X h Â $LN5ÂXpmReadFileToData$pdata$XpmReadFileToData$unwind$XpmReadFileToDataXpmFreeXpmInfoXpmFreeXpmImageXpmCreateDataFromXpmImageXpmReadFileToXpmImage
-+RdFToBuf.obj/   1345988049              100666  2845      `
-+dÂÃ%:P*2.drectve]D
-+.debug$SpÂ¡@B.textÃ¿
- P`.pdata
-~Â@0@.xdataÂšÂž@0@.pdata
-ÃÃ¢@0@.xdata@0@.pdata
-2>@0@.xdata
-\x@0@.pdata
-ÂÂ¢@0@.xdataÃÃ@0@.pdata
-Ã²ÃŸ@0@.xdata
-
-@0@.rdata(@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\RdFToBuf.obj:<bÃ	x	xMicrosoft (R) Optimizing Compiler@SUHÂÃ¬XHÂÃªHÃ3ÃÃšÂÃÂ
-ÃxHÂT$ ÂÃÃšÂ
-ÃtÂÃÃšÂÃÃ¿HÂÃX][ÃHÂÂÃHÂt$pÃšHÂÃ°HÂ
-ÃuÂÃÃšHÂt$pÂÃÃ¿HÂÃX][ÃHÂ|$xLÂÂ€$ÂLcd$4AÂL$ÃšHÂÃžHÂ
-Ãu
-HÂÃÃšÂGÃœÃ«ELÂÃMÂÃÂºHÂÃLÂl$PÃšHÂÃHÂÃÃšA;Ãt
-HÂÃÃšÂÃÃ¿Ã«
-AÃ<3ÃHÂ}LÂl$PHÂ|$xLÂÂ€$ÂHÂt$pHÂÃX][Ã0&/1.B-N*].Â)Â(Âµ'Ã(Ã&ÃŠÃ¿11
-!pÂ¯11
-Â¯ÃŠ11!Ã
-+pÂ¯1
-1pÂ¯11!
-
-ÃtdH11%Hp11!dH1
-1%H11%Â¢P0r@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.textÃ¿
-ÂiÃ± .pdata
-Ã®Â Ã£Â.xdata8ÂpÃ®5.pdata
-ÂÃOR.xdataÃÂÃ®Ã±o.pdata
-Ãt'WÂ.xdata	
-=VÂ²Ã­Â©	.pdata
-+
-ÂP?ÂÃ
-+.xdata
-:ÃŒ=ÃÃ£
-.pdata
-
-XÃxÃº
-.xdata
-
-ÃÂ¹ÂœÂ³
-free fread fclose 7 _fdopen .rdatat	
-Kclose c open $LN13oXpmReadFileToBuffer$pdata$6$XpmReadFileToBuffer$chain$6$XpmReadFileToBuffer$pdata$5$XpmReadFileToBuffer$chain$5$XpmReadFileToBuffer$pdata$4$XpmReadFileToBuffer$chain$4$XpmReadFileToBuffer$pdata$0$XpmReadFileToBuffer$chain$0$XpmReadFileToBuffer$pdata$XpmReadFileToBuffer$unwind$XpmReadFileToBufferboundCheckingMalloc??_C@_01KDCPPGHE@r?$AA@_fstat64i32
-+misc.obj/       1345988048              100666  2352      `
-+dÂ
-Ã%:PÂ©/.drectve]
-
-+.debug$Sly@B.textGÃ¥ P`.textp,Â P`.rdata2@@@.rdataC@@@.rdata
-R@@@.rdata^@@@.rdatam@@@.rdata
-{@@@.rdataÂ@@@.textÂ P`.textÂÂ P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±`"d:\Develop\xpm\lib\misc.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerLÂÃ3ÃDÂÃÂ
-Ãt8@AÂ¶<0|<9Â
-ÂÂŸÃAÃ¿ÃIÃ¿ÃÂLHÃD;ÃrÃEÂ
-ÃtD;Ãu	AÂÂžÃ3ÃÃÂÃÂÃ¹wFHÂHcÃÂÂÂHÃÃ¿Ã¡HÂÃHÂÃHÂÃHÂÃHÂÃHÂÃHÂÃfÂ
-'&!$) 1
-9AIQ
-X\`d
-h!l%Invalid XpmErrorXpmColorFailedXpmNoMemoryXpmFileInvalidXpmOpenFailedXpmSuccessXpmColorErrorÂžÃvÃÃ©.@comp.id	xÂÃ¿Ã¿.drectve].debug$Sl.textGÂ€ IÂxpmatoui .textpG
-Âª .rdataÂÂ¡-R.rdata|)Â@$LN2F.rdata
-;;])f$LN3>.rdataÂÃ³]hÂ$LN46.rdata	IÂŒ6Â¯	$LN5..rdata
-+
-Ã_NÃ²Ã
-+$LN6&.rdata
-q2EÃŒÃ¶
-$LN7
-$LN12X.text
-Â$e$'
- .text
-Â®Â¥Ã%XpmFree
- free 9XpmGetErrorString??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@??_C@_0M@KNHHACKL@XpmNoMemory?$AA@??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@??_C@_0L@GGDGBBNE@XpmSuccess?$AA@??_C@_0O@NCABLEEJ@XpmColorError?$AA@__ImageBaseXpmLibraryVersionInfo.obj/       1345988048              100666  2153      `
-+dÂ
-Ã%:PÃ¢&.drectve]ÃŽ
-+.debug$SlQ@B.text
-Âœ P`.text{ÃT P`.pdata
-|Â@0@.xdataÂŠÂ¶@0@.pdata
-ÃÃ @0@.xdataÃŸ@0@.pdata
-0<@0@.xdataZ@0@.text b P`.text`Â P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±`"d:\Develop\xpm\lib\Info.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHÂ
-Ãt3ÃHÂAHÂAHÂAHÂA0ÂA(Ã³ÃHÂ
-ÃttSHÂÃ¬ HÂ|$03Ã¿Âº!HÂÃs6HÂIHÂ
-Ãt	ÃšHÂ{HÂKHÂ
-Ãt	ÃšHÂ{HÂKHÂ
-Ãt	ÃšHÂ{Âº#
-+sÂS(Â
-ÃtHÂK0ÃšHÂ{0Â{(Â;HÂ|$0HÂÃ [Ã³Ã$
-6
-H
-b
-y{!
-+
-
-
-+y!t
-+
-
-
-+
-
-+
-+20ÃÂº"sÃÂº"
-+sÂ	Ã³ÃÃÂº"s$ÃÂHÂBxHÂAHÂÂÂHÂAHÂÂÂHÂAÂº"
-+sÂ	HÂB`HÂA0ÂBXÂA(Ã¶tÂ	ÂB$ÂA ÂB(ÂA$Ã³Ã@comp.id	xÂÃ¿Ã¿.drectve].debug$Sl.text
-ÃÂµ,Â .text{
-ÂÂ© .pdata
-Â£6ÃH".xdata$Ã¶Â(:.pdata
-Ãb(YR.xdataÃÂžÂŸÃj.pdata	
-Ã
-ÃÂÂ	.xdata
-+kÂžÃ
-Â
-+Â¯ free $LN10.text
- ÃÂ¥ÃÃ
- .text
-`XÂÂzÃ
- ÃxpmInitXpmInfoXpmFreeXpmInfo$pdata$1$XpmFreeXpmInfo$chain$1$XpmFreeXpmInfo$pdata$0$XpmFreeXpmInfo$chain$0$XpmFreeXpmInfo$pdata$XpmFreeXpmInfo$unwind$XpmFreeXpmInfoXpmFreeExtensionsxpmSetInfoMaskxpmSetInfo
-+Image.obj/      1345988048              100666  1064      `
-+dÂÃ%:P[.drectve]
-+.debug$Spa@B.textÃ P`.text6Ã P`.pdata
-)5@0@.xdataS@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±a#d:\Develop\xpm\lib\Image.obj:<bÃ	x	xMicrosoft (R) Optimizing Compiler3ÃÂA
-HÂAHÂAÃ@SHÂÃ¬ HÂÃHÂIHÂ
-ÃtÂS
-ÃšHÂKHÂ
-ÃtÃšHÃCHÂÃ [Ã$620@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.text&Ã£Â¬Ã» .text6Ã
-Ã§ .pdata
-ÃºZÂ¢C$.xdataÂ£ÂšÃÃŽ;free S $LN6expmInitXpmImageXpmFreeXpmImage$pdata$XpmFreeXpmImage$unwind$XpmFreeXpmImagexpmFreeColorTablehashtab.obj/    1345988048              100666  5066      `
-+dÂ
-Ã%:P[
-Y.drectve]t
-+.debug$SpÃ@B.text1Ar P`.pdata
-|Â@0@.xdata
-ÂŠ@0@.textÂ«Â² P`.pdata
-]i@0@.xdata
-Â@0@.textÃ
-ÂX P`.pdata
-vÂ@0@.xdataÂ Â°@0@.pdata
-ÃÃ@0@.xdataÃž
-@0@.pdata
-*6@0@.xdataT@0@.textÂ
-hÃ­ P`.pdata
-
-		@0@.xdata5	@0@.textmI	Â¶	 P`.pdata
-Ã	Ã	@0@.xdata
-Ãª	@0@.textgÃ¶	]
-+ P`.pdata
-q
-+}
-+@0@.xdataÂ
-+Â«
-+@0@.pdata
-Ã
-+Ã
-+@0@.xdataÃ³
-+
-@0@.pdata
-%
-1
-@0@.xdata
-O
-@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±c%d:\Develop\xpm\lib\hashtab.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHÂ\$WHÂÃ¬ HÂÃ¹Â¹HÂÃÃšHÂ
-ÃtHÂ8HÂXHÂ\$0HÂÃ _Ã1
-
-+
-+4
-+2pHÂ\$HÂ|$Â¶LÂY3ÃHÂÃºLÂÃLÂÃÂÃt$DÂ¶ÃffffÂIÃ¿ÃAÂŸÃkÃEÂÃEÂÃuÃ¬Mc3ÃAÃ·Ã²IÂÃMÂÃHÂ
-ÃtDÂHÂ8u LÂÃL+ÃÂ¶BÂ¶
-+ÃuHÃ¿ÃÂ
-ÃuÃ­Â
-ÃtIÂÃšM;ÃsOÂDÃÃžIÂHÂ
-ÃuÃHÂ\$HÂ|$IÂÃÃÂ«
-+
-+t4HÂ\$HÂl$HÂ|$ ATHÂÃ¬ ÂLÂaÂžVUUUÂ<HÂÃ©Â9Ã·Ã¯ÂÃÃÃšÃÂQÂ
-ÃœÃšLÂÃHÂ
-ÃuAÂCÃœÃ«aHÂEHcÃIÂ
-ÃI;Ãv3ÃHÂÃ©HÂI;ÃwÃŽIÂÃŒÂ
-Ã~2HÂt$0HÂÃ³DHÂHÂ
-ÃtHÂHÂÃÃšHÂHÂÃHÂÃ®uÃ HÂt$0IÂÃÃš3ÃHÂ\$8HÂl$@HÂ|$HHÂÃ A\Ã<ÂÂ©.Â¥Ã
-!!s
--sÂ¥'!ds
--s-t	T42ÃHÂ\$HÂl$HÂt$WHÂÃ¬ IÂÃšHÂÃ²HÂÃÃšHÂÃžHÂ8uCÂ¹ÃšHÂ
-ÃtHÂ0HÂhHÂHÂ
-ÃuÂžÃœÃ¿Ã¿Ã¿Ã« ÂC;C|HÂÃÃšÂ
-Ãu
-Ã¿CÃ«Ã¿ÃÂC3ÃHÂ\$0HÂl$8HÂt$@HÂÃ _Ã
-1\Â
-887dT42pHÂ\$WHÂÃ¬ HÂÃÃÃAU3Ã¿ÂyÂ¹ÃšLÂÃHÂ
-ÃuÂGÃœHÂ\$0HÂÃ _ÃHcIÂ
-ÃI;ÃvDHÂÃ©HÂ9I;ÃwÃŽLÂ[HÂ\$03ÃHÂÃ _Ã%mBBA
-+
-+4
-+2pHÂt$WHÂÃ¬ HÂyHÂÃ±HÂ
-Ã¿tFHcHÂ\$0HÂ
-ÃH;Ãv fÂHÂKÃžHÂÃ«HÂ
-ÃtÃšH;ÃwÃ©HÂÃÃšHÂ\$0HÃFHÂt$8HÂÃ _Ã>.K.\gXXK!XX
-W\XXQ!4X
-XWXXW
-+
-+d
-+2p@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.text1	|aÂ¥AtomMake .pdata
-Ã£SgI.xdata
-%ÃY%% .textÂ«ÃÃÂ€z9 .pdata
-ÃÃ»'Ã·E.xdata
-UqiÂ¹X$LN18.text	Ã
-f}Âª>l	 .pdata
-+
-[ÂÃ	{
-+.xdata
-Â|ÂÂ	Â
-.pdata
-
-Ã¬ÂºyÂ±	Â«
-.xdata
-'Â­Ã,	Ã
-.pdata
-sÂÃ"	Ã.xdata
-S	Ã±free .textÂ
-Ã£ÃÃœ .pdata
-ÂŸÂÃ.xdataÂCcÃŽ+$LN10.textmÂšrvOA .pdata
-jÂµÃ®KR.xdata
-%ÃY%j$LN8.textgFGÂXÂ .pdata
-/ÂŸ_Ã£Â.xdataÃ¬ÃÂ£ÃÂ®.pdata
-Ã€18ÂÃ.xdatafÃµqÃ£Ã¢.pdata
-*ÃŽcÃŒ.xdata
-
-7Ã·ÃÃ
-$LN8-$pdata$AtomMake$unwind$AtomMakeboundCheckingMallocxpmHashSlot$pdata$xpmHashSlot$unwind$xpmHashSlotHashTableGrows$pdata$1$HashTableGrows$chain$1$HashTableGrows$pdata$0$HashTableGrows$chain$0$HashTableGrows$pdata$HashTableGrows$unwind$HashTableGrowsxpmHashIntern$pdata$xpmHashIntern$unwind$xpmHashInternxpmHashTableInit$pdata$xpmHashTableInit$unwind$xpmHashTableInitxpmHashTableFree$pdata$1$xpmHashTableFree$chain$1$xpmHashTableFree$pdata$0$xpmHashTableFree$chain$0$xpmHashTableFree$pdata$xpmHashTableFree$unwind$xpmHashTableFreedata.obj/       1345988047              100666  13175     `
-+dÂ=Ã%:P-Ã.drectve]Â	
-+.debug$SlÃ¹	@B.rdatae
-+@0@.rdatai
-+@0@.rdatan
-+@0@.rdatau
-+@0@.rdataw
-+@0@.rdata|
-+@0@.rdataÂ
-+@@@.rdataÂ
-+@@@.rdataÂ
-+@0@.rdataÂ
-+@0@.rdataÂ
-+@0@.rdataÂ
-+@0@.rdataÂ¡
-+@0@.rdataÂ£
-+@0@.rdataÂ¥
-+@@.rdata6ÂŠ
-+@@@.rdataÃ
-+@@@.dataÃ°
-+
-@PÃ.textEÃŠ
-+ P`.pdata
-]i@0@.xdata$ÂÂ«@0@.pdata
-ÃÃ@0@.xdataÃ³@0@.textÃºÃ»Ãµ
-+ P`.pdata
-Ye@0@.xdataÂÂ@0@.pdata
-Â±Âœ@0@.xdataÃÃ¯@0@.pdata
-
-@0@.xdata7K@0@.pdata
-iu@0@.xdataÂ@0@.text>ÂÃ	 P`.pdata
-3?@0@.xdata]m@0@.pdata
-ÂÂ@0@.xdataÂµÃ@0@.pdata
-Ã§Ã³@0@.xdata@0@.textV%{ P`.pdata
-Â£Â¯@0@.xdataÃÃ¡@0@.textÃŸÃ«Ã© P`.pdata
-Â@0@.xdata$Â©Ã@0@.textjÃA P`.pdata
-Ua@0@.xdata
-@0@.textÂÂ
- P`.pdata
-
-
-
-@0@.xdata:
-J
-@0@.pdata
-h
-t
-@0@.xdataÂ
-ÂŠ
-@0@.pdata
-Ã
-Ã
-@0@.xdata
-Ã®
-
-+@0@.rdata@0@.rdata@0@.rdata
-@@@.rdata%@@@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±`"d:\Develop\xpm\lib\data.obj:<bÃ	x	xMicrosoft (R) Optimizing Compiler))
-+ '(
-+(setq ;Lisp};
-+[] = {
-+static char *,
-+*//*C
-+!$Id: xpm.shar,v 3.71 1998/03/19 19:47:14 lehors Exp $$XpmVersion: 3.4k $
-+""""741. +0181@1H1P(X%`"px
-ÂÂÂÂÂ +Â°+Âž
-Ã
-+ÃAUHÂÃ¬0Â9LÂÃ©Â
-Ã¹HÂÂ E3ÃLÂA Â¶ÂQ HÂÂ IÂEIÃ¿ÃHÃ¿ÃÂ¶HÃ¿ÃAÃ¿ÃIÂEAÂÂ¶:ÃuÂÃtÂÃuÃÂ:tAÂÃI)E3ÃHÂÃ0A]ÃAÂM MÂE 3ÃÂMÂÂ(AÂ¶A8t-ÂÃt)IÂEHÃ¿ÃÂHÃ¿IÂEÂÃºÃ¿uMÂE 3ÃIÃ¿ÃÃ¿ÃAÂA:	uÃAÂU
-IÂEHÃ¿ÃÂHÃ¿IÂEÂÃºÃ¿uMÂE 3ÃIÃ¿ÃIÃ¿ÃÃ¿ÃAÂAÂ¶:ÃuÂÃt
-+ÂÃuÃAÂ9uÂIÃ¿M3ÃHÂÃ0A]ÃHÂÂ HÂ\$@HÂl$HHÂt$PHÂ|$(LÂd$ LÂaHÂy Â¶AÂM IÂÂµ 3ÃIÂÃÃšHÃ¿ÃHÃ¿ÃDÂÃÂÂŸÃ¿ÃD;Ãu
-+ÂÃt4AÂÃ»Ã¿uÃÂ>t)Â
-ÃÂÂ¬fÂÂŸIÂÃÃšHÃ¿ÃÂÃÃ¿uÃ­Ã©ÂEÂ] IÂ} 3ÃIÂÂµ(Â¶8t*AÂÃ»Ã¿t$IÂÃÃšDÂÃÂÃ»Ã¿uIÂ} 3ÃHÃ¿ÃÃ¿ÃÂ:uÃAÂ]
-fÂIÂÃÃšDÂÃÂÃ»Ã¿uIÂ} 3ÃHÃ¿ÃHÃ¿ÃÃ¿ÃÂÂŸ;Ãu	ÂÃt
-+ÂÃžÃ¿uÃÂ>uÂÂŸÃIÂÃÃšHÂ|$(HÂt$PHÂl$HHÂ\$@LÂd$ 3ÃHÂÃ0A]ÃGMÂLÂºMÃ€MLE??E!
-+Ãtd
-+
-+T	4?
-? K??KRÃ@SHÂÃ¬ ÂHÂÃÂ
-ÃuÃ¿AHÂAÂQHÂÃ3ÃHÂQHÂÃ [ÃÂÃžÂ
-ÃÂ¶Â1ÂÃtHÂCHÃ¿ÃÂ¶HÃ¿HÂCÂÃt:ÃuÃ©ÂÂ»0tNHÂCÂ¶ÂÃt7DHÃ¿C:Â0ÂrHÂÂ HÂ
-Ãt
-:uHÂÃÃšHÂCÂÂÃuÃHÃ¿C3ÃHÂÃ [ÃHÂÂ HÂ
-ÃÂ4HÂKÂ¶8u&ÂHÃ¿CHÂÃÃšHÂÂ LÂ[Â¶A8
-tÃ¡HÂCHÂC3ÃHÂÃ [ÃÂÂ¹1HÂ|$0HÂytHÂÃÃšÂŸÂ1;ÃtÂÃžÃ¿uÃšÂÂ»0thHÂÃÃšÂŸÂ0DÂÃ;ÃÂÂ¡@AÂÃ»Ã¿ÂÂHÂÂ HÂ
-ÃtÂŸD;ÃuHÂÃÃšHÂÃÃšDÂÃÂŸÂ0D;ÃuÃHÂ|$03ÃHÂÃ [ÃHÂÂ» tIHÂÃÃšHÂÂ ÂŸDÂÃ;Ãu%HÂÃÃšHÂÃÃšDÂÃHÂÂ ÂŸD;ÃtÃHÂÃAÂÃÃšHÂ|$03ÃHÂÃ [ÃÂ?Ã?M6Mr?zMÂšMÃ?ÃMÃ©LÃ²ÃºiiV!ii
-hÂÃ²ii\!ti
-ihÂiib!ti
-ihiih20HÂ\$HÂt$WATAUHÂÃ¬ Â3Ã¶EÂÃ LÂÃªHÂÃ¹Â
-ÃÂÂÂÃžÂÂ
-HÂl$@HÂifDHÂÃÃšÂÃÂÃžÃ¿tÂÃÃšÂ
-Ãt
-ÂŸÂ1;ÃuÃÂÃÃšÂ
-Ãu3ÂŸÂ1;Ãt(ÂÃ»Ã¿t#A;ÃŽs
-AÂ]HÂÃIÃ¿Ã
-Ã¿ÃÃšÂÃÂÃÃšÂ
-ÃtÃHÂÃÂÃÃšHÂl$@ÂÃÃ«tHÂAÂŸÂÃÃšÂ
-Ãt)ÂÂŸÂ1;ÃtHÃ¿GHÂGÂŸÂÃÃšÂ
-ÃuÃHÂGIÃ¿Ã
-Ã¿ÃÂŸHÃ¿ÃHÂGAÂ]Ã¿ÂÃÃšÂ
-ÃuÂŸÂ1;ÃtA;ÃŽrÃHÃ¿OÂFÃ¿HÂ\$HHÂt$PHÂÃ A]A\_ÃDMRhÂMÂÂ©LÃÃ©
-Â¶>ÂÂr!1ÂÂ
-~1Â¶ÂÂx!T1Â
-Â~1ÂÂ~d
-+4	2Ã
-Ã
-p@SHÂÃ¬0HÂH3ÃHÂÂ$ HÂÃHÂT$ AÂžÃšHÂL$ LÂÃÂÃÃšHÂÂ$ H3ÃÃšHÂÃ0[Ã
-Â*l9ÂIÂVÂÂÂ	F0 
-ÂHÂ\$ UVWATAUAVAWHÂÃ¬@HÂH3ÃHÂÂ$0Â3Ã¶3Ã¿LÂD$ LÂÃºHÂÃÂ
-ÃÂÂÃžÂLÂqIÂÃÃšÂÃšÂÃžÃ¿ÂÂÂNE3Ã€LÂl$0ÃšÂŸÂ1HÂÃž;Ã©t`ÂÃœÃ¿t`AÂÃŒu3ÂÂHÂÃÃšHÂ
-ÃtVÂÃHÂT$0EÂÃHÃHÂÃžÃšAÃŽE3Ã€LÂl$0AÂmIÂÃIÃ¿Ã
-AÃ¿ÃÃšÂÃšÂŸÂ1;ÃšuÂ ÂÃœÃ¿u$HÂÃÃšÂžÃŸÃ¿Ã¿Ã¿Ã©ÃHÂÃÃšÂžÃœÃ¿Ã¿Ã¿Ã©ÃAÂ
-4Â
-Ãt<ÂSHÂÃÃšLÂÃšHÂ
-ÃtÃÂÃHÂT$0EÂÃHÃHÂÃžÃšÂÃ³IÂÃÂÃÃ;Ã¿ÃÃšÃ«zIÂÃÂÃÃÂŸÃšÃ«fHÂiHÂ
-Ã­t]ÂŸEÂ
-Ãt!ÂŸÂ1Â;ÃtHÃ¿CHÂCÂŸÂ
-ÃuÃ­Âs+ÃµÃ¿ÃÂÃÃšHÂÃžHÂ
-ÃÂRÃ¿Ã¿Ã¿DÂÃHÂÃHÂÃÃšÂ;tÂFÃ¿Ã8HÂD$ IÂ?Â03ÃHÂÂ$0H3ÃÃšHÂÂ$ÂHÂÃ@A_A^A]A\_^]ÃÂSMnÂÂÂÂ²ÂÃMÃ©ÂÃ»ÂÂ5ÂGL[LÂÂÂ·ÂÃÂÃŸÂÂÂ)
-4SHÃ°Ã 
-Ã
-+Ãp`P0
-ÂHÂ\$WHÂÃ¬ Â9HÂÃHÂÃ¹tAÂI
-Â
-Ãt:Ã¿ÃÃšHÂW HÂLcG
-HÂÃÃšHÂLc_
-AÃÃG
-3ÃHÂ\$0HÂÃ _ÃHÂ\$0HÃ3ÃHÂÃ _ÃÂ2ÂjÂŠÂŠÂ¥
-+
-+4
-+2pHÂ\$VWATHÂÃ¬0HÂH3ÃHÂÂ$ 3Ã¿HÂÃ99Â6HÂT$ AÂž@ÂÂ¹0ÃÂ1
-+HÂÂ¹(HÂÂ¹ ÃšLÂ%ÂÃžÂ
-ÂHÂT$ HÂ
-DÂÃÃšÂ
-ÃuhHÂT$ AÂžHÂÃÃšÂ
-Ãu
-+ÂžÃŸÃ¿Ã¿Ã¿Ã©ÃHcÃžHÂL$ Âº_ÃD< ÃšHÂ
-ÃtÃH+ÃžHÂ
-HÂÃLÂD< ÃšÂ
-ÃuÂ¿Â¿ÂÂ»4Ã©ÃHÂT$ AÂžHÂÃÃšÂÃžu$HÂT$ HÂ
-DÂÃÃšÂ
-ÃÂ
-{Ã¿Ã¿Ã¿ÂxÃ©ÂÂÃžÂ
-jÃ¿Ã¿Ã¿HÂT$ HÂ
-DÂÃÃšÂ
-ÃÂ
-NÃ¿Ã¿Ã¿HÂT$ AÂžHÂÃÃš3Ã¶H95tGHÂÂ¬$XHcÃšIÂÃÂHÂHÂT$ LÂÃ
-ÃšÂ
-ÃtHÃ¿ÃÃ¿ÃHÂÃHÃÃ IÃHÂ8uÃHÂÂ¬$XÃÂ4HcÃ·HÃÃŠJÂ<&ÂÃÃŸÃ¿Ã¿Â
-Ã¿uBHÂHÂÃHÂÂ HÂHÂÂ(ÃšDÂ¶
-DÂÂ0Â¶ÂÂ1Ã«RÂÂ»4JÂD&HÂÂ JÂD&HÂÂ(u)BÂ¶D&HÂÃÃÂ1ÂÂ0ÃšBÂ¶D&ÂÂ1Ã«HÂÃÃš3ÃHÂÂ$ H3ÃÃšHÂÂ$`HÂÃ0A\_^ÃÂWl^<sÃ{ÃÂlÂ·Ã
-ÃÃÃÃÃºl
-ÃÃ8ÂŸ@Ã[ld<ÂÃÃ<Ã¥<Ã±PÃ¹<<KPaPsÂÂ±ÂÃÃÂ¯!jÃÃ
-Â»jÂ±ÃÃÂµ!TKjÃ
-ÃÂ»jÃÃÂ»"4LF	Ãp` ÂXPM2XPM_format#define@comp.id	xÂÃ¿Ã¿.drectve].debug$Sl.rdataQuI.rdataQGÂ0%.rdataÂ§Ã¡ÃE.rdata8Ã¯Â²<f.rdata>Â¢Â¥Â¢Â.rdataÂºÂÂKÂ.rdata	Ã£Ã*Âœ	.rdata
-+zÂÃÃª
-+.rdata
-WÂžÃ
-.rdata
-[Ã»Ã'/
-.rdata
-ÃµÃz\L
-.rdataÃ
-TÃi.rdataÂÃšÃ¯ÃºÂ.rdataÃ£ÂÂÂ.rdataÂµ.rdata6gÃ=Ã.rdataÃc
-.dataNvyÂ;RCS_IdG.textEÃ	Ã»2T .pdata
-qOÃa.xdata$ÃkÂ©w.pdata
-Ã¢=Ã©ÂÂ.xdataÃ»Â
-Â¡ungetc getc .textÃº
-+ÃÂ¬ÂeÂ¶ .pdata
-}Â¬Ã€Â¡Ã.xdata
-ÃÃšOÃÃ
-.pdata
-
->Â­_\Ã²
-.xdata
-ÂÃ¶Âµn	
-.pdata
-Â­ÃÂ6 .xdata (ÂŠf*7 .pdata!
-3`N!.xdata"Â£ÂšÃÃŽc"$LN42.text#>	,Ã·Ã¡ty# .pdata$
-Ã¿Â¶Ã£Â­#Â
-$.xdata%Â¹0Ã°#Â%.pdata&
-KÂ¥Â#Â¯&.xdata'ÃŠÂG@#Ã'.pdata(
-Ã£SgI#Ã(.xdata)ÂÃÃm#Ã¬)isspace $LN28#.text*VÂ¬Â¡ÃJ* .pdata+
-AÃºIÂ*
-++.xdata,7ÃŒUÃ±*,- xpmatoui >P $LN3*.text-ÃŸoÂÃÃh- .pdata.
-Ã
-ÂL-u..xdata/$ÂÃžÂªÃ-Â/free strncpy Â Â³ $LN30-.text0jÂ^ÃšÂÃ0 .pdata1
-sÂŒ+A0Ã1.xdata2
-%ÃY%0Ã¢2$LN80.text3ÂÂ¹ÂÃŽ3 .pdata4
-Ã®B
-Â·34.xdata5+]
-^35.pdata6
-$ÂÃÂ¿336.xdata7ÂxÃ
-Ã­3K7.pdata8
-ÃÂ·\Ã§3c8.xdata9
-ÃÃ¡ÃÃ€3y9.rdata:JÃ\VÂ:.rdata;Âµ8Ã'Â«;.rdata<Â®Â€ÃÃÃ
-<strrchr strncmp .rdata=ÃÂŠZÃ£=$LN283??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@??_C@_04JEIEPLD@?5?8?$CI?6?$AA@??_C@_06GGEPMBCG@?$CIsetq?5?$AA@??_C@_01ICJEACDI@?$DL?$AA@??_C@_04JLHIKKNM@Lisp?$AA@??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@??_C@_02MLAGHBOD@?0?6?$AA@??_C@_02CHHINNLG@?$CK?1?$AA@??_C@_02FMMEOLBI@?1?$CK?$AA@??_C@_01GFHCPBMG@C?$AA@??_C@_01EEMJAFIK@?6?$AA@??_C@_01DCLJPIOD@?$CB?$AA@??_C@_00CNPNBAHC@?$AA@??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@RCS_VersionxpmDataTypesParseComment$pdata$4$ParseComment$chain$4$ParseComment$pdata$ParseComment$unwind$ParseCommentxpmNextString$pdata$3$xpmNextString$chain$3$xpmNextString$pdata$2$xpmNextString$chain$2$xpmNextString$pdata$0$xpmNextString$chain$0$xpmNextString$pdata$xpmNextString$unwind$xpmNextStringxpmNextWord$pdata$1$xpmNextWord$chain$1$xpmNextWord$pdata$0$xpmNextWord$chain$0$xpmNextWord$pdata$xpmNextWord$unwind$xpmNextWordxpmNextUI$pdata$xpmNextUI$unwind$xpmNextUI__GSHandlerCheck__security_cookie__security_check_cookiexpmGetString$pdata$xpmGetString$unwind$xpmGetStringboundCheckingReallocboundCheckingMallocxpmGetCmt$pdata$xpmGetCmt$unwind$xpmGetCmtxpmParseHeader$pdata$1$xpmParseHeader$chain$1$xpmParseHeader$pdata$0$xpmParseHeader$chain$0$xpmParseHeader$pdata$xpmParseHeader$unwind$xpmParseHeader??_C@_04GPIBMJKI@XPM2?$AA@??_C@_03PJGJBIFG@XPM?$AA@??_C@_07EPAHIEDI@_format?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@
-+CrIFrDat.obj/   1345988047              100666  2621      `
-+dÂ	Ã%:PÃ (.drectve]|
-+.debug$SpÃ@B.text=I P`.textaÂÃ§
- P`.pdata
-Ua@0@.xdata
-Â@0@.textÂ¹Â¥^ P`.pdata
-ÂÂ@0@.xdata
-ÂºÃ@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\CrIFrDat.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerE3ÃHÂJDÂHÂDÂBDÂB
-LÂÂ(LÂÂ HÂBDÂÂ1DÂÂ0DÂÂ4Ã@SUVWATHÂÃ¬Ã°HÂH3ÃHÂÂ$Ã HÂÂŒ$@HÂÃ±HÂL$@MÂÃ¡IÂÃšHÂÃÃšHÂL$`ÃšHÂE3ÃDÂÂ$Â HÂÂ$ÂšDÂÂ$ÂžHÂÂ$Â°DÂÂ$ÂŒLÂÂ$ÃLÂÂ$ÃDÂÂ$ÃDÂÂ$ÃDÂÂ$ÃHÂ
-Ã¿thHÂÃÃšHÂL$`HÂÃÃšHÂD$`HÂ|$0HÂD$(HÂD$@HÂÂ$Â MÂÃLÂÃ
-HÂÃHÂD$ ÃšÂÃÂ
-ÃxLÂD$`HÂT$@HÂÃÃšHÂL$`ÃšÃ«,LÂ\$0HÂD$@LÂ\$(HÂÂ$Â MÂÃLÂÃ
-HÂÃHÂD$ ÃšÂÃHÂL$@ÃšÂÃHÂÂ$Ã H3ÃÃšHÂÃÃ°A\_^][Ã:DÂ§ÂŽÃ£Ã»1=Oa
-
- ^Ãp`P0Ã HÂ\$HÂt$ WHÂÃ¬pHÂH3ÃHÂÂ$`HÂÃHÂÃIÂÃ°HÂÃºÃšHÂÃÃšHÂE3ÃHÂL$ LÂÃHÂÃHÂD$0DÂ\$ HÂ\$(DÂ\$8DÂ\$<LÂÂ$HLÂÂ$@DÂÂ$QDÂÂ$PDÂÂ$TÃšHÂÂ$`H3ÃÃšLÂÂ$pIÂ[IÂs(IÂÃ£_Ã19Â&Â Â¹''%$dS4PN
-p`@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.text=XÃ¡Â .texta
-ÃÂŽBÂ© .pdata
-ÂÂ«6Âº%.xdata
-Ã±
-zfCb s Â Â Â£ Â¹ Ã Ã Ã© Ã¹
- $LN9.textÂ¹ÃÃ©ÃÃ¬# .pdata
-ÂÃÂ¹Ã=.xdata	
-ÃºGn^	Â $LN5ÂOpenArrayXpmCreateImageFromData$pdata$XpmCreateImageFromData$unwind$XpmCreateImageFromData__GSHandlerCheckXpmFreeXpmImageXpmFreeXpmInfoxpmSetAttributesxpmParseDataAndCreatexpmSetInfoMaskxpmInitAttributesxpmInitXpmInfoxpmInitXpmImage__security_cookie__security_check_cookieXpmCreateXpmImageFromData$pdata$XpmCreateXpmImageFromData$unwind$XpmCreateXpmImageFromDataxpmParseData
-+CrIFrBuf.obj/   1345988047              100666  2483      `
-+dÂ	Ã%:PI(.drectve]|
-+.debug$SpÃ@B.textI P`.text'[Â
- P`.pdata
-Ã°ÃŒ@0@.xdata
-6@0@.textÂ@Ã P`.pdata
-Ã¹@0@.xdata
-#?@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\CrIFrBuf.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerÃHÂJÃB
-Ã@SUVWATHÂÃ¬Ã°HÂH3ÃHÂÂ$Ã HÂÂŒ$@HÂÃ±HÂL$@MÂÃ¡IÂÃšHÂÃÃšHÂL$`Ãš3ÃÃÂ$Â ÂÂ$ÂŒHÂÂ$Â°HÂ
-Ã¿thHÂÃÃšHÂL$`HÂÃÃšHÂD$`HÂ|$0HÂD$(HÂD$@HÂÂ$Â MÂÃLÂÃ
-HÂÃHÂD$ ÃšÂÃÂ
-ÃxLÂD$`HÂT$@HÂÃÃšHÂL$`ÃšÃ«,HÂD$0HÂD$(HÂD$@HÂÂ$Â MÂÃLÂÃ
-HÂÃHÂD$ ÃšÂÃHÂL$@ÃšÂÃHÂÂ$Ã H3ÃÃšHÂÃÃ°A\_^][Ã:DmzÂ©ÃÃÃ·'
-
- ^Ãp`P0Ã HÂ\$HÂt$ WHÂÃ¬pHÂH3ÃHÂÂ$`HÂÃHÂÃIÂÃ°HÂÃºÃšHÂÃÃšHÂL$ LÂÃHÂÃÃD$ HÂ\$0ÃD$<ÃšHÂÂ$`H3ÃÃšLÂÂ$pIÂ[IÂs(IÂÃ£_Ã19^&nÂ''%$dS4PN
-p`@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.text(Ã)Ã .text'
-ÂŽJjÃ« .pdata
-Ã»`ÃU(.xdata
-Ã±
-zfHi z Â Â Âª Ã Ã Ã¡ Ã°  $LN9.textÂÃCÂj* .pdata
-ÃÂÃŸYF.xdata	
-ÃºGni	Â $LN5ÂOpenBufferXpmCreateImageFromBuffer$pdata$XpmCreateImageFromBuffer$unwind$XpmCreateImageFromBuffer__GSHandlerCheckXpmFreeXpmImageXpmFreeXpmInfoxpmSetAttributesxpmParseDataAndCreatexpmSetInfoMaskxpmInitAttributesxpmInitXpmInfoxpmInitXpmImage__security_cookie__security_check_cookieXpmCreateXpmImageFromBuffer$pdata$XpmCreateXpmImageFromBuffer$unwind$XpmCreateXpmImageFromBufferxpmParseData
-+create.obj/     1345988047              100666  16420     `
-+dÂ,Ã%:P
-/ÂŠ.drectve]ÃŽ
-+.debug$SpQ@B.texttÃ5 P`.pdata
-IU@0@.xdatas@0@.textÂ P`.text`ÂÃ© P`.pdata
-Ãœ		@0@.xdata'	@0@.text*7	a
-+ P`.pdata
-
-+Â
-+@0@.xdataÂ©
-+@0@.rdataÃ
-+@0@.textÃÃ
-+Â
- P`.pdata
-
-@0@.xdata5M@0@.pdata
-kw@0@.xdataÂ@0@.textÂ©Â¿ P`.pdata
-ÃÃ@0@.xdataÃ³@0@.textpÃ»k P`.pdata
-uÂ@0@.xdataÂ@0@.textÂ¡Â§H P`.pdata
-fr@0@.xdataÂÂ @0@.pdata
-ÂŸÃ@0@.xdataÃš@0@.pdata
-
-*@0@.xdataH@0@.textL\Âš
-' P`.pdata
-.
-:
-@0@.xdata$X
-|
-@0@.textÂÂ
-$# P`.pdata
-
-$*$@0@.xdataH$\$@0@.pdata
-z$Â$@0@.xdataÂ€$@0@.text+ÂŒ$Ã§,' P`.pdata
-m.y.@0@.xdataÂ.Â«.@0@.pdata
-Ã.Ã.@0@.xdataÃ³.@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±b$d:\Develop\xpm\lib\create.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHÂ\$HÂt$WHÂÃ¬ Â¶HÂÃHÂÃ¹ÂÃt,@Â;t#ÂŸÃÃšÂŸ
-ÂÃ°Ãš;Ã°u%ÂGHÃ¿ÃHÃ¿ÃÂÃuÃÂŸÂŸ
-+ÃHÂ\$0HÂt$8HÂÃ _ÃHÂ\$0+Ã°ÂÃHÂt$8HÂÃ _Ã)3t
-d42
-pÂžÃHÂ\$HÂt$WHÂÃ¬ IÂÃHÂÃºHÂÃ±MÂ
-Ãt
-ÃšÂ
-ÃuÂÃÃ¿HÂ\$0HÂt$8HÂÃ _ÃLÂÃHÂÃHÂÃÃšHÂ\$0HÂt$83ÃÂ
-ÃÂÃÂÃHÂÃ _Ã
-
-C
-`d42
-pHÂ\$HÂl$HÂt$WATAUHÂÃ¬0AÂ9IÂÃ©LÂÃ¢LÂÃ©HÂ
-IÂÃ¹t&Â;t!ÂŸÃšÂŸ
-ÂÃ°Ãš;Ã°uHÃ¿ÃHÃ¿ÃÂ?uÃÂŸ7ÂŸ+Ã°Â
-Ã¶ÂÂHÂÂ$ÃLÂL$hLÂÃ
-IÂÃIÂÃHÂD$ Ã¿Â$ÃÂ
-ÃyÂžÃ«}tÃ·LÂÂ$ÂÂD$hHÂÂ$ÂAÂÂÂAÃ¿HÂL$xHÂD$hLÂÂ$ÂšÂHÂÂ$ÂÃAÂHÂÂ$Â ÂÂAÃ¿Ã«'HÂD$xHÂÂ$ÂÃHÂÂ$ÂÃÃ¿Ã¿Ã¿ÂD$pÂ3ÃHÂ\$PHÂl$XHÂt$`HÂÃ0A]A\_Ã():D*  &
-+d
-T
-4
-+RÃÃpNoneDÂL$ HÂL$SUVWATAVHÂÃ¬ÃE3Ã¶AÂÃ¹IÂÃšLÂÃ¢HÂÃHÂ
-Ãt
-Ã¶@tHÂJ@ÂBHHÂÂ$ÃÂÂ$ÂÃ«3ÃÂÂ$ÂHÂÂ$HÂÂ$ÃHÂ
-ÃtÃ¶tHÂBHÂÂ$ÂÃ«HÂÃÃšHÂÃHÂÃÃšHÂÂ$ÂMÂ
-Ã€tAÃ¶$tIÂD$HÂÂ$Â Ã«HÂÃÃšHÂÃHÂÃÃšHÂÂ$Â Â¹MÂ
-Ã€tAÂº$$sEÂÂ$ÂšDÂÂ$Ã«
-+DÂÃÂÂ$MÂ
-Ã€tAÂº$$sIÂÂ$ÃHÂÂ$ÂžÃ«HÂHÂÂ$ÂžMÂ
-Ã€tAÂº$$sIÂÂ$ÃHÂÂ$Â°Ã«LÂÂŽ$Â°AÂÃÂÃštÂÃšt
-+ÂÃžuÂHÃ«
-Â¹Ã«Â¹3Ã¶HcÃIcÃLÂÂ¬$ ÂÂŽ$ÂHÂÂ$ÂšHÂÂ$ÃLÂÂŒ$ÃÂ
-Ã¿ÂLÂÂŒ$8DÂÂ$ÂE3Ã­EÂ
-ÃÂÂ²HÂuHÂÂŒ$Ã3ÃEÂ
-ÃÂÃš@HÂHÂ
-Ãt@HÂ
-Ã¶ÂÂ²LÂÃL+ÃfÂÂ¶BÂ¶
-+ÃuHÃ¿ÃÂ
-ÃuÃ­Â
-ÃÂÂ¡HÂÂ$ÂšÃ©{HÂOHÂ
-ÃÂnHÂÃL9lÃu
-ÂHÃ¿ÃL9lÃ
-tÃ¶HÂÃž}&HÂBHÂÃžfDL9lÃ
-u	HÃ¿ÃHÂÃž~Ã°HÂÃž|-HÂTÃ
-HÂ
-ÃtÃšÂ
-Ãt+HÂÂ$ÂšDÂÂ$ÂÃ«HÂÂ$ÂšÃ¿ÃHÂÃA;ÃÂ.Ã¿Ã¿Ã¿Ã«DÂÂ$ÂDÂÂ$A;ÃÂÂ L9/ÂÃ¬LÂOMÂ
-ÃÂÃHÂÂ$Â°ÂÂŽ$ÂLÂÂ$ÂHÂÂ$Â HÂÂ$HÂÂ$ÂHÂÂ$ÂžHÂD$xHÂÂ$`DÂl$pLÂl$hLÂd$`HÂD$XHÂÂ$XHÂD$PHÂÂ$PHÂD$HHÂÂ$HHÂD$@HÂÂ$@HÂD$8HÂÂ$0LÂ|$0HÂD$(Ât$ ÃšÂ
-ÃuDÂÂ$HÂÂ$ÃDÂhÃ©ÃDÂÂ$HÂÂ$ÃAÂŸÃ©ÂµÂGLÂÂ¬$0AÂEHÂHÂ
-Ã¿t\Â¶HÂ
-ÂÃt(Â;t#ÂŸÃÃšÂŸ
-ÂÃ°Ãš;Ã°u/ÂGHÃ¿ÃHÃ¿ÃÂÃuÃÂŸ7ÂŸ+Ã°Â
-Ã¶uHÂÂ$@ÂÂ$ÂAÂ7ÂÃ«
-+Ã°Ã«Ã¢AÃHÂÂ$`LÂÂ$XAÂEÂ
-+ÂÂŽ$ÂAÂÂÃ¿DÂÂ$Ã©	ÂÂŽ$ÂIcÃAÂÃžEÂ
-Ã­Â
-Ã°HÂ\ÃÂÂÃ¿ÂÃLÂ
-MÂ
-ÃÂÂ«HÂÂ$Â°LÂÂ$ÂHÂÂ$Â HÂÂ$HÂÂ$ÂHÂÂ$ÂžHÂD$x3ÃÂD$pHÂD$hHÂÂ$`LÂd$`HÂD$XHÂÂ$XHÂD$PHÂÂ$PHÂD$HHÂÂ$HHÂD$@HÂÂ$@HÂD$8HÂÂ$0LÂ|$0HÂD$(Ât$ ÃšÂ
-ÃtAÂŸÃ¿ÃHÂÃ«Ã©5Ã¿Ã¿Ã¿DÂÂ$AÂœÃ«DÂÂ$AÂxEÂ
-Ã­Â
-Ã£HÂÂ$ÃHÂ\Ã
-ÂÃ¿ÂÃLÂ
-MÂ
-ÃÂÂ«HÂÂ$Â°LÂÂ$ÂHÂÂ$Â HÂÂ$HÂÂ$ÂHÂÂ$ÂžHÂD$x3ÃÂD$pHÂD$hHÂÂ$`LÂd$`HÂD$XHÂÂ$XHÂD$PHÂÂ$PHÂD$HHÂÂ$HHÂD$@HÂÂ$@HÂD$8HÂÂ$0LÂ|$0HÂD$(Ât$ ÃšÂ
-Ãt$AÂŸÃ¿ÃHÂÃÃ©5Ã¿Ã¿Ã¿DÂÂ$EÂ
-Ã­uAÂEÃŒÃ«?DÂÂ$ÂÂŒ$(HÂÂ$0HÂÂ$ÂšÃ¿ÃHÂÃ
-0IÂÃÂÂŽ$ÂIcÃ;Ã·ÂÃ»Ã¿Ã¿AÂÃLÂÂŒ$ÃLÂÂ¬$ HÂÃÃA^A\_^][Ã;Â:Âµ;Ã9
-ÂÂ Ã )Ã±Ã»B B zÃ,,2!''ÃŽÃ$z
-,,8z,,8Ã Ãp
-`
-P
-0HÂÃ¬8ÃD$ ÃšHÂÃ8Ã
-E>>Db@SHÂÃ¬PAÂÃžvÂž Ã«ÂžAÂºD;ÃAGÃ3ÃÂ\$HÂD$@ÂÂ$ÂÂD$8ÂÂ$ÂÂD$0Â\$(Â\$ ÃšHÂÂ$ÂHÂHÂ
-ÃÂ¹ÃœÃ¿Ã¿Ã¿DÃÂÃHÂÃP[ÃNOpHHNÂ0HÂ\$UVATAVAWHÂÃ¬ HÂHÂl$pLÂÃ¡HÂ	EÂÃ±AÂÃ°Ã¿3ÃLÂÃžEÂ
-Ã¶tMHÂ|$PLÂl$XLÂl$x3Ã¿Â
-Ã¶t'fDÂEIÂ
-$DÂÃEÂLÂ
-ÂÃÃ¿Ã¿ÃHÂÃ
-;ÃŸrÃÃ¿ÃA;ÃrÃLÂl$XHÂ|$PIÂ
-$IÂÃHÂ\$`HÂÃ A_A^A\^]HÃ¿%'fceÂfÂÂ¡RRX!5RR
-d5ÂRR^!
-+
-+Ã
-t
-+5
-RRd5RRd4
-2
-Ã°
-Ã 	Ã`PHÂ\$UVWATAUAVAWHÂÃ¬p
-+HÂH3ÃHÂÂ$`
-+HÂÂ$Ã°
-+ÂÂŽ$Ã
-+LÂÂŒ$Ã 
-+LÂÂ¬$Ãš
-+HÂD$0HÂÂ$Ãž
-+HÂD$@HÂÂ$
-HÂÃ©HÂD$8HÂL$(HÂÂ$
-ÂÃDÂL$ EÂÃ°ÂÃšDÂD$$HÂÃºHÂL$HÂÂÃžÂÂ±ÂÂ¬$Ã
-+HÂt$PÃÂ4`ÂÃŸÂ7ÂÃœÂ.E3Ã¶EÂÃŠEÂ
-ÃÂJLÂÃŸAÂÃDHÂÃÃšAÂÃ®Â
-ÃÂÃ®HÂÂ$`Â
-Ã¶t?IÂÃ·ÂÂ
-ÃtÂÃžtHÂOÃšDÂÃÃ«HÂGHÃ¿ÃDÂŸXÃ¿HÂGDÂHÃ¿ÃHÂÃ®uÃÂÂŽ$Ã
-+HÂÂ$`IÂÃÃšHÂÃL90ÂHÂD$0HÂL$(HÂHÂ	Ã¿LÂHÂD$@AÂKEÂÃÂÃDÂ
-ÂHÂD$(HÂÃ¿HÂD$HHÂ
-Ãt4HÂHÂD$(HÂÃ¿LÂHÂL$8AÂCEÂÃÂÃDÂ
-ÂHÂD$(HÂÃ¿Ã¿Ã
-;l$$ÂÃ¿Ã¿Ã¿Â\$$AÃ¿ÃD;d$ ÂÃ±ÃŸÃ¿Ã¿Ã©+E3Ã¶EÂÃ®EÂ
-ÃÂ
-HÂÃÃšEÂÃŠD9t$$Â%ÂHÂÂ$`Â
-Ã¶tAHÂt$PÂÂ
-ÃtÂÃžtHÂOÃšDÂÃÃ«HÂGHÃ¿ÃDÂŸXÃ¿HÂGDÂHÃ¿ÃHÂÃ®uÃÂÂŽ$Ã
-+AÂÃÂ
-Ã­tIffffÂHÂ
-[LÂÂ$`HÃIÂÃL+ÃffÂÂ¶BÂ¶
-+ÃuHÃ¿ÃÂ
-ÃuÃ­Â
-ÃtÃ¿Ã;ÃrÃ;ÃÂÂ©HÂD$0HÂHÂD$(HÂÃ¿HÂD$@EÂÃ
-DÂ
-ÂHÂD$(AÂÃHÂÃ¿HÂD$HHÂ
-Ãt.HÂHÂD$(HÂÃ¿HÂD$8EÂÃ
-DÂ
-ÂHÂD$(AÂÃHÂÃ¿AÃ¿ÃD;d$$ÂÃ¢ÃŸÃ¿Ã¿AÃ¿Ã
-D;l$ ÂÂ·ÃŸÃ¿Ã¿Ã©ÃHÂL$`3ÃAÂžÃšDÂÂ€$Ã
-+E3Ã­AÂÃEÂ
-Ã€tYffÂÂÃHÂ4@HÃ¶IÂÃ·HÂŸHÂÃ©L9lÃ`uÂºÂ¹ÃšHÂDÃ¬`HÂ
-ÃtlIÂÃ·ÂSÃ¿ÃÂ¶HHÂDÃ¬`fÂHA;ÃrÂ±EÂÃ¥D9l$ ÂVHÂÃÃšAÂÃ­EÂ
-Ã¶Â1LÂ|$(ÂÂÂ
-Ãt?ÂÃžt:HÂOÃšÂÃÃ«<ÂJÂLÃ¬`HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥ÂžÃœÃ¿Ã¿Ã¿Ã©ÃHÂGHÃ¿ÃÂŸXÃ¿HÂGÂCÃ¿=ÃŸÂ
-ÂÂ
-ÃtÂÃžtHÂOÃšDÂÃÃ«HÂGHÃ¿ÃDÂŸXÃ¿HÂGAÂCÃ¿=ÃŸÂÂ¹HcÃHÂ\Ã`HÂ
-ÃÂÂšIcÃ³fD9,sÂÂHÂD$0IÂHÂÃ¿DÂ·
-sHÂD$@FÂLÂÃŒIÂEÂÃÂÃÃ¿HÂD$HHÂ
-Ãt)HÂIÂÃ¿DÂ·
-sHÂD$8FÂLÂÃŒIÂEÂÃÂÃÃ¿Ã¿Ã
-A;Ã®ÂÃÃŸÃ¿Ã¿AÃ¿ÃD;d$ ÂÂ­ÃŸÃ¿Ã¿JÂLÃ¬`HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥Ã©ÃJÂLÃ¬`HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥ÂžÃŸÃ¿Ã¿Ã¿Ã©Â©ÂJÂLÃ¬`HÂ
-ÃtÃšIÃ¿Ã
-IÂÃœ|Ã¥ÂžÃŸÃ¿Ã¿Ã¿Ã©|3ÃHÂ
-Ãt#HÂMÃ¿HÂT$HHÂHÂÃLÂÃ Ã¿LÂÃšÃ«LÂl$PLÂÃ£HÂD$0HÂMHÂÃ¿HÂÂ$`3ÃAÂžLÂÃ°ÃšDÂÂ$Ã
-+DÂÃEÂ
-Ãt
-IÂAÂSAÃ¿ÃÂ¶IÂÃ0fÂÂL`E;ÃrÃ¢ÂÃ«9\$ ÂÂ¹DÂ|$$HÂÃÃšEÂ
-Ã¿ÂÂÂÂ
-ÃtÂÃžtHÂOÃšDÂÃÃ«HÂGHÃ¿ÃDÂŸXÃ¿HÂGAÂCÃ¿=ÃŸÂÃ¥ÃŸÃ¿Ã¿IcÃÂ·ÂD`fÂ
-ÃÂÃÃŸÃ¿Ã¿HÂD$@Â·Ã±DÂÃ
-DÂLÂ°ÃŒHÂD$(ÂÃHÂÃ¿MÂ
-Ã€tHÂD$8DÂÃ
-ÂÃDÂLÂ°ÃŒIÂÃÃ¿Ã¿ÃA;ÃÂlÃ¿Ã¿Ã¿Ã¿Ã
-;l$ s3ÃÃ©LÃ¿Ã¿Ã¿MÂ
-Ã€tIÂÃIÂÃÃ¿IÂÃÃ¿HÂD$(IÂÃHÂÃ¿3ÃHÂÂ$`
-+H3ÃÃšHÂÂ$Ã
-+HÂÃp
-+A_A^A]A\_^]ÃxÃ€wvJulfÂeÂªfÃewAvÃfÃŽef,e_zÂŠtÃ€wv+srvÃfÃ£eÃ¹fe>s^sÂsÂ²rÃfÃ¥fÃœzDwavÂ¹eÃef
-+qf-yLiio)
-4XNÃ°Ã 
-Ã
-+Ãp`P`
-+
-pLÂL$ LÂD$SUVWATAUAWHÂÃ¬Â LÂÃ¡3ÃIÂÃHÂÃ²ÃD$`ÂHÂÂ$ÂHÂÂ$ÂLÂÃ©LÂÃ¹ÂÃ©ÂÂ$ÃšÂL$hMÂ
-ÃtIÂHÂ
-ÃtIÂ	HÂÂ$HÂ
-ÃtÃ¶t
-HÂCHÂD$xÃ«IÂÃÃšIÂÃHÂÃÃšHÂD$xHÂ
-ÃtÃ¶tHÂCHÂÂ$ÂÃ«IÂÃÃšIÂÃHÂÃÃšHÂÂ$ÂHÂ
-ÃtÃ¶t	ÂCÂD$dÃ«IÂÃÃšIÂÃHÂÃÃšÂD$dHÂ
-ÃtÂº#sÂÂÃÂÂ$Ã«
-ÃÂ$LÂÂŽ$Ã HÂ
-ÃtÂº#sLÂÂ³ÃLÂÂŽ$ÂÃ«HÂHÂÂ$ÂÂN
-ÃÃ¡ÃšHÂÃžHÂD$pHÂ
-ÃuÂGÃœÃ©ÂN
-ÃÃ¡ÃšLÂÃ°HÂ
-ÃuÂxÃœÃ©Ã€ÂN
-ÃÃ¡ÃšLÂÃšHÂ
-ÃuÂxÃœÃ©ÃÂN
-ÃÃ¡ÃšLÂÃžHÂ
-ÃuÂxÃœÃ©Â®DÂN
-LÂFHÂD$hHÂD$PLÂ|$HHÂÂ$ÃšHÂD$@LÂl$8HÂD$`HÂD$0HÂÃIÂÃLÂt$(HÂ|$ ÃšÂÃžÂ
-ÃtÂ
-ÃÂQHÂ
-ÃtÂº#
-s
-9Â«ÂÂ
-:H9Â¬$Ã°ÂÂDÂD$dÂNÂAÂÃžvÂž Ã«ÂžAÂ¹D;ÃAGÃAÂ¹E;ÃDDÂ$3Ã¿Â|$HÂD$@ÂL$8ÂT$0HÂT$xIÂÃÂ|$(Â|$ ÃšHÂÃHÂÂ$ÂHÂ
-ÃuÂxÃœÃ©ÂHÂD$pDÂNDÂHÂD$(HÂFHÂÃIÂÃHÂD$ ÃšÂl$`ÂÃœÂÂHÂÂŒ$ÃžÂÃŽÂÂFDÂÂ$HÂT$x3Ã¿Â|$HÃD$@ÂD$8ÂL$0DÂGIÂÃÂ|$(Â|$ ÃšHÂÃHÂÂ$ÂHÂ
-ÃÂ
-ÂHÂÂ$ÂÂxÃœHÂ
-ÃtÃšÂÂ¬$ÃšÃ«ÂÂ¬$ÃšHÂL$pÃšMÂ
-Ã¶tIÂÃÃšÂ
-Ã­t!HÂÂ$ÂDÂÃMÂÃ
-IÂÃHÃD$ Ã¿Â$ÂMÂ
-Ã­tIÂÃÃšMÂ
-Ã¿ÂÃIÂÃÃšÃ©Â¹HÂFDÂNDÂHÂÃIÂÃLÂt$(HÂD$ ÃšHÂL$pÃšIÂÃÃšHÂ
-Ãt!ÂÂºÃ 	rÂºÃ sÂD$hLÂ{0ÂÂ«ÂÂC8Ã«IÂÃÃšHÂ
-Ãt
-Âº#sÂÂ$ÃšLÂÂ«Â°ÂÂÂžÃ«IÂÃÃšHÂÂ$Ã°HÂ
-Ãt
-HÂÂ$ÂHÂHÂÂ$ÃžHÂ
-Ãt
-HÂÂ$ÂHÂÂÃLÂÂŽ$Ã HÂÃÂ A_A]A\_^][ÃÂ;Â:Â²;Âœ9Ã ;Ã«Â?>RÂrÂÂÂÂšÂ,ÂOÃR-OVÂps}sÂ¯sÃsÃ¥RÃ¯sÃ·s%sNsÂÂÂÂ!Ã€
-Â
-ÂÂÂÂÂ	Ã°ÃÃp
-`
-P
-0HÂÃLÂ@HÂPSVWATAUAVAWHÂÃ¬E3Ã€MÂÃ±HÂÃºLÂÃ¹ÃÂ8Ã¿Ã¿Ã¿ÂLÂd$`LÂÂ€$ÂšLÂÂ€$Â LÂd$xMÂÃ¬LÂÂ€$Â°DÂd$tDÂÂ @Ã¿Ã¿Ã¿DÂÂ PÃ¿Ã¿Ã¿DÂÂ <Ã¿Ã¿Ã¿LÂÂ HÃ¿Ã¿Ã¿LÂÂ pÃ¿Ã¿Ã¿LÂÂ xÃ¿Ã¿Ã¿LÂ`ÂMÂ
-ÃtMÂ MÂ
-ÃtMÂ!HÂÂ$ÂHÂ
-ÃtÃ¶tHÂCHÂÂ$ÃÃ«ÃšIÂÃHÂÃÃšHÂÂ$ÃHÂ
-ÃtÃ¶tHÂCHÂÂ$Ã Ã«IÂÃÃšIÂÃHÂÃÃšHÂÂ$Ã HÂÂ¬$PHÂ
-Ãt
-+Ã¶tÂkÃ«IÂÃÃšIÂÃHÂÃÃšÂÃšHÂ
-ÃtÂº#s
-ÂÂÃÂD$pÃ«ÃD$pHÂ
-ÃtÂº#sHÂÂÃHÂÂ$ÃšÃ«HÂHÂÂ$ÃšHÂÂŽ$xHÂ
-Ã¶t
-Âº&sAÂŒHÂÃÃšÂ
-ÃÂ
-kHÂÂ$ÂLÂÂ$ÂLÂD$hHÂD$@HÂÂ$ÂHÂT$lHÂD$8HÂÂ$ÃHÂÃHÂD$0HÂÂ$ÃHÂD$(HÂÂ$hHÂD$ ÃšÂ
-ÃÂ
-EÂ
-Ã€tHÂÂ$ÂžHÂÃÃšDÂÂ$hAÂÃžv'ÂÂŒ$Âv
-HÂÂ$Ã°ÃšÂ
-ÃÂ
-ÃDÂÂ$hÂÂ$ÂHÂÂ$Ã°LÂÂ$ÂHÂÃHÂD$ ÃšÂÃžÂ
-ÃÂ
-sEÂ
-Ã€tHÂÂ$XHÂÂ$ÃÃšÂÂ$ÂÃÃ¡ÃšHÂÃžHÂÂ$Â HÂ
-Ãu
-ÂxÃœIÂÃ­Ã©GÂÂ$ÂÃÃ¡ÃšHÂD$xHÂ
-Ãu
-ÂxÃœIÂÃ­Ã©#ÂÂ$ÂÃÃ¡ÃšLÂÃšHÂ
-Ãu
-HÂl$`ÂxÃœÃ©Ã¿ÂÂ$ÂÃÃ¡ÃšHÂÂ$Â°HÂ
-Ãu
-HÂl$`ÂxÃœÃ©ÃDÂÂ$ÂLÂÂ$ÂHÂÂ$ÂHÂL$PHÂD$HHÂD$tHÂD$@LÂl$8HÂÂ$ÂHÂD$0HÂD$xHÂÃHÂD$(IÂÃHÂ|$ ÃšÂÃžÂ
-Ãt Â
-ÃÂdHÂ
-ÃtÂº#
-s
-ÂÂ»ÂÂ
-SHÂÂŒ$`tvÂÃœvÂž Ã«ÂžÂ¹;ÃšGÃÂ|$pHÂÂ$ÃAÂ¹A;Ã©DÂÃ
-DDÃ3ÃÂL$HÂD$@ÂD$hÂD$8ÂD$lÂD$0ÂL$(ÂL$ IÂÃÃšHÂÃšHÂD$`HÂ
-Ãu
-ÂxÃœÃ©ÃÂ|$pÂÂ¬$ÂÂÃœÂt\MÂ
-Ã¶tWÂD$hHÂÂ$Ã3ÃÂL$HÃD$@ÂD$8ÂD$lDÂADÂÃÂD$0ÂL$(ÂL$ IÂÃÃšHÂÂ$ÂšHÂ
-Ãu
-HÂl$`ÂxÃœÃ©hHÂD$xDÂL$hDÂD$lHÂÂ$XHÂD$XHÂÂ$ÂšHÂD$PHÂÂ$Â IÂÃHÂD$HHÂD$`HÂD$@HÂÂ$Ã°HÂD$8HÂÂ$ÂHÂD$0ÂÂ$hÂD$(ÂÂ$ÂÂD$ ÃšHÂÂ$Â ÂÃžÃšHÂL$xHÃÂ$Â ÃšHÃD$xÂ
-Ã¿Â
-Â§ÂÂŒ$hvÂÂŒ$Âv
-HÂÂ$Ã°ÃšEÂ
-Ã€tHÂÂŒ$XHÂÂ$ÃHÂÃÃšÃ«HÂÂŒ$XHÂ
-Ã¶t9Âº&
-+s3ÂÂŒ$Ât LÂF(HÂV0HÂÃÃšÂÃžÂ
-ÃtHÂl$`Ã©=3ÃHÂF0ÂF(HÂÂ$pÂD$lÂÂD$hHÃAÂAÂÂ$hÂAÂÂ$ÂÂA
-HÂÂ$ÂHÂAHÂ
-Ã¶tJEÂ
-Ã€t$HÂÂ$ÂžHÂFHÂÂ$ÃHÂFHÂÂ$ÃHÂFÂÂŒ$ÂtÂÂ$ÃÂÂF ÂÂ$ÃÂF$HÂ
-Ãt,ÂÂºÃ 	rÂºÃ s
-HÂÂ$Â°ÂÂ$ÂÂÂ«ÂHÂK0ÂC8Ã«
-HÂÂ$Â°ÃšHÂ
-ÃtÂº#sÂD$tLÂÂ«Â°ÂÂÂžÃ«IÂÃÃšHÂÂ$`HÂ
-ÃtHÂL$`HÂMÂ
-Ã¶t
-HÂÂ$ÂšIÂ3ÃÃ©
-IÂÃ­Ã«HÂl$`Ã«
-HÂl$`Ã«HÂl$`ÂÂŒ$hvÂÂŒ$Âv
-HÂÂ$Ã°ÃšHÂÂ$ÂHÂ
-Ãt
-ÂÂ$ÂÃšHÂÂ$ÂžHÂ
-ÃtÃšHÂÂ$ÃHÂ
-ÃtÃšHÂÂ$ÃHÂ
-ÃtÃšHÂ
-Ã­tHÂÃÃšHÂÂ$ÂšHÂ
-ÃtHÂÃÃšHÂÂ$Â HÂ
-ÃtHÂÃÃšHÂD$xHÂ
-ÃtHÂÃÃšDÂL$tEÂ
-Ãt
-HÂÂ$Ã MÂÃ
-IÂÃHÃD$ Ã¿Â$ÃšMÂ
-Ã­tIÂÃÃšHÂÂ$Â°HÂ
-ÃtHÂÃÃšÂÃHÂÂ¬$PHÂÃA_A^A]A\_^[ÃÂŒ;Ã:Ã¯;Ãº9!;,Âp>ÂÂ€ÃŒÂ£Â¢>Â¡rÂ ÂÂ¢Â¥ÂÃÂÃ³ÂÂÂ,OÂ
-Oi&s<snÂÂÂ¢ÂºÂÂsÃs(ÂAÂSseswsÂÂÂÂÂ®sÃsÃµs
-+s+Â¥Â¥Â!T*Â¥
-Â¥ÂÂ¥Â¥Â
-	
-"Ã°Ã ÃÃp
-`
-0@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.texttÃ-Â« .pdata
-jÂ(.xdataÂ§ÂOÃ­'tolower $LN9.textbÂ<= .text`ÂžOÂ¯ÂK .pdata
-Â»Â Ã«ÃV.xdata	Â§ÂOÃ­h	{ Â .text
-+*bÂESetColor
-+ .pdata
-
-*uÃÃ
-+Â
-.xdata
-[sOÃ
-+Â£
-.rdata
-ÂµxEÃÂŽ
-.textÃ
-oÂ²ÃŸwÃ .pdata
-ÂÃÂÂÃ.xdatajyÃ­Ã².pdata
-Ã¬ÂÃ§Â.xdata5Sls
-1 B Q .textÂ©FG1` .pdata
-Â¬8ÃÂºk.xdata1Â7}Â .textpÃ¥Ã°ÂÂ .pdata
-ÂÂPÂ¬Â©.xdataÃÃµÂ¡-ÂœÃ .textÂ¡}ÃÃÂÃ .pdata
-mÃªÃ±.xdataÃµÂ·zt
-.pdata
-
-Â³ÃÂÂ'
-.xdata
-	Â¬Ã¯Â B
-.pdata
-
-]-Ã]
-.xdataUÃÂ¥nvÂÂ.text L'ÂÃ|`Â²  .pdata!
-,Ã©ÂÂ» Ã!.xdata"$	1Â Ã"Ã· free 0 D getc P ^p memset .text#ÂÃªÃºÂ¯FÂ# .pdata$
-ÃÃ#Â£$.xdata%TÃVÃ#Ã%.pdata&
-*!)	#Ã«&.xdata'ÃœTÃ#
-'0 > R $LN57#.text(+'Â®Âd`( .pdata)
-GJ@Â¹(v).xdata*%Â£S{(Â*.pdata+
-3`(ÂŽ+.xdata, ÂAÂ(Ã,Ã¯   % 4 E O ^ $LN93(mxpmstrcasecmp$pdata$xpmstrcasecmp$unwind$xpmstrcasecmpxpmVisualTypeAllocColor$pdata$AllocColor$unwind$AllocColorXAllocColorXParseColor$pdata$SetColor$unwind$SetColor??_C@_04OHJIHAFH@None?$AA@CreateColors$pdata$1$CreateColors$chain$1$CreateColors$pdata$CreateColors$unwind$CreateColorsXDefaultColormapXDefaultVisualXDefaultScreenFreeColors$pdata$FreeColors$unwind$FreeColorsXFreeColorsCreateXImage$pdata$CreateXImage$unwind$CreateXImageXCreateImageMSWPutImagePixels$pdata$2$MSWPutImagePixels$chain$2$MSWPutImagePixels$pdata$1$MSWPutImagePixels$chain$1$MSWPutImagePixels$pdata$MSWPutImagePixels$unwind$MSWPutImagePixels__imp_SetPixel__imp_SelectObjectParseAndPutPixels$pdata$ParseAndPutPixels$unwind$ParseAndPutPixels__GSHandlerCheck__imp_DeleteDC__imp_CreateCompatibleDCboundCheckingCallocxpmHashSlotxpmNextString__security_cookie__security_check_cookieXpmCreateImageFromXpmImage$pdata$0$XpmCreateImageFromXpmImage$chain$0$XpmCreateImageFromXpmImage$pdata$XpmCreateImageFromXpmImage$unwind$XpmCreateImageFromXpmImageXDestroyImageboundCheckingMallocXDefaultDepthxpmParseDataAndCreate$pdata$0$xpmParseDataAndCreate$chain$0$xpmParseDataAndCreate$pdata$xpmParseDataAndCreate$unwind$xpmParseDataAndCreatexpmFreeColorTablexpmParseExtensionsxpmHashTableFreexpmParseColorsxpmHashTableInitxpmGetCmtxpmParseValuesxpmParseHeaderCrDatFrI.obj/   1345988046              100666  8974      `
-+dÂ)Ã%:PÃ»Â.drectve]|
-+.debug$SpÃ@B.text7IÂ P`.pdata
-ÃÃ@0@.xdata$Ã°	@0@.rdata
-	@0@.text%	*
-+ P`.pdata
->
-+J
-+@0@.xdatah
-+x
-+@0@.pdata
-Â
-+Â¢
-+@0@.xdataÃ
-+Ã
-+@0@.pdata
-Ã®
-+Ãº
-+@0@.xdata
-,
-@0@.pdata
-J
-V
-@0@.xdatat
-Â
-@0@.pdata
-ÂŠ
-Â²
-@0@.xdataÃ
-@0@.textÂ¢Ã€
- P`.pdata
-Â
-Â
-@0@.xdataÂ°
-Ã
-@0@.pdata
-Ã
-Ãª
-@0@.xdata
-
-
-@0@.pdata
-:
-F
-@0@.xdatad
-@0@.textt
-Â P`.pdata
-Â³Â¿@0@.xdataÃÃ­@0@.pdata
-
-@0@.xdata
-5Q@0@.pdata
-o{@0@.xdata
-Â@0@.rdata
-+Â¥@@@.rdata
-+Â¯@@@.text^Â¹ P`.pdata
-Â£Â¯@0@.xdata$ÃÃ±@0@.rdataÃ»@0@.rdata
-@@@.textÂÂ P`.pdata
-ÃÃ@0@.xdataÃ«@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\CrDatFrI.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHÂ\$ UVWATAUAVAWHÂÃ¬@HÂH3ÃHÂÂ$0E3Ã¶EÂÃ¹MÂÃ HÂT$ LÂÃ©EÂ
-ÃÂÃÂÂ$Â HÂ|0ÂIÂ$HÂL$0LÂÃÃšHÂÃ¯HÂ=IÂ\$ÂŸLÂ
-MÂ
-ÃtLÂHÂHÂÃÃšHcÃHÃ©HÂÃHÂÃHÂÃ®uÃHÂD$0+ÃšÃ¿Ã
-ÂÃÃšHÂ
-ÃtxHÂL$ LÂÃHÂT$0)HÂL$0L+ÃÂÂ¶
-+HÃ¿ÃAÂLÃ¿ÂÃuÃ±IÂEÂÂ$Â AÃ¿ÃIÂÃ0IÂÃ
-HÂ|0E;Ã·ÂMÃ¿Ã¿Ã¿3ÃHÂÂ$0H3ÃÃšHÂÂ$ÂHÂÃ@A_A^A]A\_^]ÃÂžÃœÃ¿Ã¿Ã¿Ã«Ã]gÂÂÂ¯7
-)
-4SHÃ°Ã 
-Ã
-+Ãp`P0
-	%s %sDÂL$ SUVWAUAVHÂÃ¬(LÂÂŽ$ÂÂÃLÂd$hAÂ¯ÃAÃ¿ÃDÂÃªLÂÃ¡t}HÂÂŒ$ÂÃ¿ÃLÂ|$ HÂD$`EÂÃžIÂ
-$EÂ
-Ã­t;AÂÃ±IÂÃ­fffÂÂLÂÃHÂÃHÂ@HÃIÂÃÃšHÃHÂÃHÂÃ­uÃDÂL$xHÂL$`ÃIÂÃIL$ÃžIÂÃ¯IÂ
-$uÂ¡LÂ|$ Ã«HÂÂŒ$ÂIÂ
-$LÂd$hEÂ
-Ã­t3AÂÃ±IÂÃ­ÂÂLÂÃHÂÃHÂ@HÃIÂÃÃšHÃHÂÃHÂÃ­uÃÃHÂÃ(A^A]_^][ÃtÃ€Ã !
-8Â¬Ã&!9
-29Â¬,!ÃŽ9
-292!Ã
-
-88B
-Ã 
-Ã	p`P0HÂ\$HÂl$VE3ÃIÂÃ±IÂÃšLÂÃAÂÃÂ
-ÃtlHÂ|$DÂÃffÂEÂCIÂ;IÂSHÂÃÃ¿3ÃBÂ\Ã²Â®HÃ·ÃEÂT
-+EÂ
-Ãt&fffÂHÂ:HÂÃÃ¿3ÃÃ²Â®HÂÃHÃ·ÃDÃIÂÃšuÃ¥IÂÃIÂÃ©uÂ«HÂ|$AÂB
-+ÂEHÂl$ ÂCHÂ\$Â^ÃÂÂ¢;;A!
-;;
-M
-Â;;G!t
-;
-;M
-;;M
-
-T
-4
-`@SUVHÂÃ¬ ÂÃHÂY3Ã¶HIÂÃšHÂEÂ
-ÃÂÃHÂ|$@LÂd$HDÂd$`LÂl$PEÂÃ©ÂLÂEHÂ
-HÂÃšÃ¿ÃA;ÃŽsHÂ}HÂÃÃ¿3ÃÃ²Â®HÂHÃ·ÃHÂLHÂKÂELÂEHÂÃÂ
-ÃtVLÂÃfÂIÂHÂffÂÂ¶HÃ¿ÃHÃ¿ÃÂBÃ¿ÂÃuÃ°Ã¿ÃA;ÃŽsIÂ8HÂÃÃ¿3ÃÃ²Â®HÃ·ÃH
-HÂKHÂÃIÂÃIÂÃ©uÂ¶HÂÃ
-IÂÃ­Â
-XÃ¿Ã¿Ã¿LÂl$PLÂd$HHÂ|$@HÂHÂ
-HÂÂ·fÂAHÂÃ ^][ÃJhOÃºeeÃ·PPV!"PP
-b"Ã·PP\!Ã
-+
-+Ã	t"PPb"PPb2`P0XPMENDEXTXPMEXT %sHÂ\$ UVWATAUAVAWHÂÃ¬`HÂH3ÃHÂÂ$PHÂÃHÂL$H3ÃMÂÃ°LÂÃºHÂT$@ÂÃ©ÂL$0HÂMÂ
-ÃÂÂAÂº 
-+ÂÂ
-AÂ@(Â
-ÃÂyMÂP0ÂŸÂÃDÂÃLÂÃÂt$8@EÂJIÂ:IÂRHÂÃÃ¿3ÃBÂ\
-Ã²Â®HÃ·ÃEÂDEÂ
-Ãt%fffÂHÂ:HÂÃÃ¿3ÃÃ²Â®HÂÃHÃ·ÃDÃL+ÃuÃŠIÂÃL+ÃuÂ­ÂCAÂh
-+ÂD$0Ã«ÂÃ±ÂL$8EÂg
-ÂºAÃ¿ÃBÂ
-Ã¥ÂÃÃšLÂÃšHÂ
-Ãu	AÂEÃœÃ©!AÂGEÂOEÂÂD$(AÂG
-HÂHÂL$PÂD$ ÃšHcÃHÂ|
-PMÂ
-Ã¶t#AÃ¶t
-EÂN$EÂF HÂHÂÃÃšHcÃHÃ¹Â
-Ã¶tHÂž XPMEXTHÂÃHÂGÃ¹HÂD$P+ÃžÃ¿ÃÂÃÃšHÂÃIÂEHÂ
-ÃuÂpÃœÃ©cÃHÂL$PÂ\$4ÂÂ¶HÃ¿ÃHÃ¿ÃÂBÃ¿ÂÃuÃ°AÂGEÂO
-MÂGIÂMHÂT$4ÂD$ ÃšÂÃ°Â
-ÃÂ
-HÂL$@EÂ?DÂ¯yAÂG	Â¯AÂL$4ÃÂL$0Â
-ÃÃÃšHÂÃ°HÂ
-ÃuÂpÃœÃ©ÃŠLÂ\$@Âl$0MÂÃAÂCL+ÃLÂÃAÃÃ
-HÂ
-ÃHÂEÂS
-AÃ¿ÃfDKÂ
-IÂfÂÂ¶HÃ¿ÃHÃ¿ÃÂBÃ¿ÂÃuÃ°KÂ<HÂÃÃ¿3ÃÃ²Â®IÂÃHÃ·ÃIHÃžIÂÃªIÂuÃAÂKÂD$4JÂ<ÃŠHÂÃAÂÃHÂÃHÂÃHÂIÂCEÂKEÂCAÂHÂD$(IÂCHÂD$ ÃšÂ|$8t%HÂL$@EÂN(MÂF0ÂAAÂWÂl$ HÃHÂLÃÃžÃšHÂD$HHÂ03Ã¶EÂ
-Ã€t
-IÂÃœAÂÃHÂHÂ
-ÃtÃšHÂÃHÂÃ«uÃ©IÂÃÃšÂÃHÂÂ$PH3ÃÃšHÂÂ$ÂžHÂÃ`A_A^A]A\_^]ÃÃœy(x6Xu`ÂÃ
-ÃÃ¹Pr-r?^zzq)
-4WLÃ°Ã 
-Ã
-+Ãp`PP
- %d %d%d %d %d %dHÂ\$WHÂÃ¬ÂIÂÃMÂÃHÂÃHÂ
-ÃtHÃHÂÂŒ$ÃLÂL$0LÂÃIÂÃHÂ|$ ÃšÂ
-Ãu7HÂ
-Ã¿tHÂL$PHÂÃÃšLÂD$PÃ«E3ÃHÂT$0HÂÃÃšHÂL$0ÂÃÃšÂÃHÂÂ$Â HÂÃÂ_Ã;ÂQÂ
-hktÂÂÂÂÂ
-
-4
-p@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.text7Y7Q< .pdata
-ÃQ).xdata$ÂÃžÂªÃ%: K sprintf .rdataIJ-ÃŠ_Âstrncpy ÂÂ£ .textÃ_kÂ» .pdata
-_CRÃ.xdata	ÂÃÂÂÃ	.pdata
-+
-ÃÂ¹EÃŽ
-+.xdata
-HÃ«_^
-+
-.pdata
-
-VÃŸbt 
-.xdata
-Â©ÂÂ6
-.pdata
-Â€Ã§L.xdataÃ¡Ã£Â·ÂŠb.pdata
-}-Ã!x.xdataDÃÂ}Â.textÂ¢w,Ã±@Â¡ .pdata
-pgÂbÂ±.xdataÃµÃfÃÃ.pdata
-Ã°Â§Ã'Ã£.xdataÃ£:ÃŒ.pdata
-#1i.xdataHP%\,.textÂŽÂšÂD .pdata
-
-4
-Ã U.xdataÃÂo.pdata
-
-4XÂ€Â
-.xdata
-
-ÃŒÃÃ»VÂ£
-.pdata
-
-+eSÂ»Âœ
-.xdata
-ÂµDÃÂ¬Ã.rdata 
-+ÃªÃÂ©ÃŽÃ® .rdata!
-+Â¹ÃšÃÃ!.text"^ÃÂ7[2" .pdata#
-iÃ»Dq"L#.xdata$$bÂ'"m$free .rdata%Ã¹KkÂ%.rdata&
--ÃNÃÂ³&Ã¥ $LN42".text'ÂÂ¹PÃ¥Ã¹' .pdata(
-ÂÂQ'(.xdata)kjÃŒ'.)M ] h $LN8'ÂCreateColors$pdata$CreateColors$unwind$CreateColors__GSHandlerCheckboundCheckingMalloc??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@xpmColorKeys__security_cookie__security_check_cookieCreatePixels$pdata$3$CreatePixels$chain$3$CreatePixels$pdata$2$CreatePixels$chain$2$CreatePixels$pdata$1$CreatePixels$chain$1$CreatePixels$pdata$0$CreatePixels$chain$0$CreatePixels$pdata$CreatePixels$unwind$CreatePixelsCountExtensions$pdata$1$CountExtensions$chain$1$CountExtensions$pdata$0$CountExtensions$chain$0$CountExtensions$pdata$CountExtensions$unwind$CountExtensionsCreateExtensions$pdata$3$CreateExtensions$chain$3$CreateExtensions$pdata$2$CreateExtensions$chain$2$CreateExtensions$pdata$CreateExtensions$unwind$CreateExtensions??_C@_09OINMEHGD@XPMENDEXT?$AA@??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@XpmCreateDataFromXpmImage$pdata$XpmCreateDataFromXpmImage$unwind$XpmCreateDataFromXpmImage??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@boundCheckingCallocXpmCreateDataFromImage$pdata$XpmCreateDataFromImage$unwind$XpmCreateDataFromImageXpmFreeXpmImagexpmSetInfoXpmCreateXpmImageFromImageCrBufFrI.obj/   1345988046              100666  9018      `
-+dÂ)Ã%:PÂŽÂ.drectve]|
-+.debug$SpÃ@B.textUIÂ P`.pdata
-Ã€Ã°@0@.xdata 	.	@0@.rdata8	@0@.textÃ·?	6
-+ P`.pdata
-J
-+V
-+@0@.xdatat
-+@0@.textÂÂ
-+ P`.pdata
-
-
-
-@0@.xdata:
-J
-@0@.pdata
-h
-t
-@0@.xdataÂ
-ÂŠ
-@0@.pdata
-Ã
-Ã
-@0@.xdataÃ®
-@0@.textÃÃ¶
-Ã
- P`.pdata
-
-
-@0@.xdata8
-H
-@0@.pdata
-f
-r
-@0@.xdata
-Â
-Â¬
-@0@.pdata
-Ã
-Ã
-@0@.xdataÃŽ
-@0@.rdata@@@.rdata@0@.rdata@@@.text`' P`.pdata
-ÂÂ@0@.xdataÂ±@0@.text`Â¹ P`.pdata
-
-)@0@.xdata$Gk@0@.rdatau@0@.rdatay@@@.rdataÂ@0@.rdata
-Â@@@.rdataÂ@@@.rdata*Â@@@.textÂÃR P`.pdata
-zÂ@0@.xdataÂ€@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±d&d:\Develop\xpm\lib\CrBufFrI.obj:<bÃ	x	xMicrosoft (R) Optimizing Compiler@SUVWATAUAVAWHÂÃ¬HHÂH3ÃHÂÂ$0E3Ã­MÂÃ¡MÂÃ°LÂÃºHÂL$ ÃD$0"D9Â¬$Â°ÂÃÂÂ$ÂžHÂ|1ffÂIÂ$HÂL$1LÂÃÃšHÂÃ¯HÂ=IÂ\$ÂŸLÂ
-MÂ
-ÃtLÂHÂHÂÃÃšHcÃHÃ©HÂÃHÂÃHÂÃ®uÃHÂ\$ ÃE",
-+HÂD$0HÂ
-+ÃšAÂÂÃ
-ÂTÃšHÂ
-ÃtqA/AÂLÂD$0HÃDAÂ¶HÃ¿ÃIÃ¿ÃÂJÃ¿ÂÃuÃ¯A.HÂÂÂ$ÂžAÃ¿Ã
-IÂÃ0HÂ|1D;Â¬$Â°Â8Ã¿Ã¿Ã¿3ÃHÂÂ$0H3ÃÃšHÂÃHA_A^A]A\_^][ÃÂžÃœÃ¿Ã¿Ã¿Ã«ÃmwÂÂÃ6U
-&
-+I
-Ã°
-Ã 	ÃÃp`P00	%s %sHÂ\$HÂT$HÂL$UVWATAUAVAWHÂÃ¬ AÃ¿ÃLÂÂŽ$ÂDÂÂŒ$ÂHÂÂŒ$ÂEÂÃ LÂÃªHÂÃtVEÂÃ©fÂÃ"HÃ¿ÃEÂ
-Ã€t*IÂÃ¬fÂÂMÂÃHÂÃHÂ@HÃIÂÃÃšIÃHÂÃHÂÃ­uÃÃ",
-+HÂÃIÂÃ­uÂ»LÂl$hÃ"HÃ¿ÃEÂ
-Ã€t0IÂÃ¬ÂÂMÂÃHÂÃHÂ@HÃIÂÃÃšIÃHÂÃHÂÃ­uÃÃ"+\$`Ã¿ÃA]HÂ\$pHÂÃ A_A^A]A\_^]ÃtÃÃ· 
-
-+
-4
-2Ã°Ã ÃÃp`PHÂÃ¬E3ÃLÂÃÂ
-ÃtmHÂ<$DÂÃfffÂIÂ:IÂR3ÃHÂÃÃ¿Ã²Â®AÂBHÃ·ÃEÂD
-+Â
-Ãt.LÂÃffffffÂHÂ:HÂÃÃ¿3ÃÃ²Â®HÂÃIÂÃ©HÃ·ÃEÂDuÃ£IÂÃIÂÃ«uÂ©HÂ<$AÂ@
-HÂÃÃ{Â##)!##
-5{##/!t#
-#5##5HÂ\$ VAUAVHÂÃ¬ IÂÃ°LÂÃ²LÂÃ©HÂÃEÂ
-Ãt}HÂl$@HÂ|$HLÂd$PEÂÃ¡LÂHÂHÂÃÃšHÂnHcÃÂFHÃÂ
-Ãt/HÂÃžfÂLÂEHÂHÂÃÃšHÂÃ
-HcÃHÃHÂÃ¯uÃHÂÃIÂÃ¬uÂ€LÂd$PHÂ|$HHÂl$@HÂHÂÂÂCÂ·
-fÂC
-A+ÃÂÃ
-A
-HÂ\$XHÂÃ A^A]^Ã7S?gPoÂMÂšMÂ²MÂÃ88>!88
-JÂ88D!Ã
-+
-+t	T88J88J4
-2
-+Ã Ã`,
-+"XPMENDEXT",
-+"%s",
-+"XPMEXT %s"HÂ|$HÂy3ÃLÂÃHÂ
-Ã¿tHÂÃÃ¿3ÃÃ²Â®HÃ·ÃHÂQIÂxHÂ
-Ã¿tHÂÃÃ¿3ÃÃ²Â®HÃ·ÃÂT
-+IÂxHÂ
-Ã¿t3ÃHÂÃÃ¿Ã²Â®HÃ·ÃÂD
-+HÂ|$ÃHÂ|$ÂÃÃ`VV\tHÂ\$ UVWATAUAVAWHÂÃ¬pHÂH3ÃHÂÂ$`3Ã¶IÂÃLÂÃªHÂL$PDÂ~ÂÃ®HÂ1MÂ
-Ãt
-+AÂº EÂÃ§rDÂÃŠHÂ
-Ãt
-AÂº 
-+sAÂP(Â
-Ãt
-IÂH0ÃšÂÃšÃ«DÂÃŸEÂ
-Ã€tGHÂ{HÂ
-Ã¿tHÂÃÃ¿3ÃÃ²Â®HÃ·ÃÂqHÂ{HÂ
-Ã¿tHÂÃÃ¿3ÃÃ²Â®HÃ·ÃÂtHÂ{HÂ
-Ã¿tHÂÃÃ¿3ÃÃ²Â®HÃ·ÃÂtHÂHÂL$`ÃšÂÃžÂ
-7DÂt)AÂÃÃšHÂÃ°HÂ
-ÃuÂFÃœÃ©AHÂD$`HÂÃHÂL$`H+ÃffffÂÂ¶HÃ¿ÃÂD
-+Ã¿ÂÃuÃ²EÂ
-Ã€tLÂCMÂ
-ÃtHÂ
->HÂÃšÃžAÂEEÂMEÂEÂD$(AÂE
-HÂHÂL$`ÂD$ ÃšÂÃšHÂ
-Ãt Ã¶tDÂK$DÂC HÂL,`HÂÃšÃšEÂ
-Ã¿tHÂL,`HÂÃšÃšHÂL,`HÂÃšHÂÃÃšDÃµAÂÃDÂt$DÃšLÂÃHÂ
-ÃÂIHÂT$`HÂD$HÂÃH+ÃHÂL$`JÂÂ¶HÃ¿ÃÂD
-+Ã¿ÂÃuÃ²ÃœÂ|$@EÂ
-Ã€t LÂCMÂ
-ÃtÂÃHÂIÃÃšÃžÂ|$@AÂEMÂMLÂD$@ÂD$(AÂE
-HÂT$DHÂL$HÂD$ ÃšHÂt$HÂÃžÂ
-ÃÂ
-ÃAÂMÂD$DAÂ¯MÂÃAÂ¯MÂTHÂÃÃšHÂÃžHÂ
-ÃÂÂEÂ
-Ã€t%LÂCMÂ
-Ãt
-Ât$@HÂHÂ
-0ÃšÃ°Ât$@Ã«Ât$@IÂEEÂMEÂEHÂD$0IÂEÂÃHÂD$(AÂEHÂT$@HÃÂD$ ÃšEÂ
-Ã¿tÂL$@DÂK(LÂC0HÂT$@HÃÃšÂD$@Ã8};
-+HÂD$PHÂ83ÃÃ«Â¿ÃœÃ¿Ã¿Ã¿HÂ
-Ã¶tHÂÃÃšÂÃHÂÂ$`H3ÃÃšHÂÂ$ÃHÂÃpA_A^A]A\_^]Ãj#ÃyÃÃ v3u8UrcÂoÂÂlÂ Â®iÂ³ÃuM}Â¢uÂ«Ãš8/fA`zze)
-4YNÃ°Ã 
-Ã
-+Ãp`P`
-",
-+ XPMEXT %d %d"%d %d %d %d/*%s*/
-+/* XPM */
-+static char * image_name[] = {
-+HÂ\$WHÂÃ¬ÂIÂÃMÂÃHÂÃHÂ
-ÃtHÃHÂÂŒ$ÃLÂL$0LÂÃIÂÃHÂ|$ ÃšÂ
-Ãu7HÂ
-Ã¿tHÂL$PHÂÃÃšLÂD$PÃ«E3ÃHÂT$0HÂÃÃšHÂL$0ÂÃÃšÂÃHÂÂ$Â HÂÃÂ_Ã;ÂQÂ
-h_tÂÂÂÂÂ
-
-4
-p@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.textUÂÂŒÂ .pdata
-Ã¶Â±Â».xdata B
-+#7 H sprintf .rdataIJ-ÃŠ]Âstrncpy ÂÂ¡ .textÃ·C<}Â»Â¹ .pdata
-S
-Â®ÃµÃ
-.xdata	Ã;xÃÃ	.text
-+ÂÃ
-ÂÂ¥Ã¬
-+ .pdata
-
-ÃÂ®Â©Â
-+Ã»
-.xdata
-ÃÃžÃÂ¬
-+
-.pdata
-
-Ã^
-
-++
-.xdataVÃ¬ÂŒÃ
-+C.pdata
-2Â
-+[.xdataÂŽ_
-+q.textÃÂ~Â²ÂÂ .pdata
-ÃŒÂŸÃ­-Â.xdatakÃÃ
-Â±.pdata
-3ÃÂ£Ã.xdata
-{IÂŽÃ£.pdata
-Â#ÂÂ¥ÃŒ.xdataÃKWÃ.rdata".]Ã+.rdataÃÃntX.rdataTU<Â.text`rÃ
-Â± .pdata
-
-Â»Â Ã«ÃÂŸ
-.xdata
-ÃÂgÂ®Ã
-.text
-`glÃ¶Ã§
- .pdata
-&ÂºÃ¡
-.xdata $ÂÃ²Ãs
-& free .rdata!Â»0ÂÃJ!.rdata"Ã
-Ui".rdata#Ã¹KkÂ#.rdata$
-Â$l
-Â¬$.rdata%Â¿ÂŸÃ¹Â€Ã¢%
- .rdata&*Ã#Â·Ã¢ &$LN33
-.text'ÂÂ¹PÃ¥f' .pdata(
-ÂÂQ'(.xdata)kjÃŒ'Â)Ã Ã Ã $LN8'Ã¶WriteColors$pdata$WriteColors$unwind$WriteColors__GSHandlerCheckboundCheckingRealloc??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@xpmColorKeys__security_cookie__security_check_cookieWritePixels$pdata$WritePixels$unwind$WritePixelsExtensionsSize$pdata$1$ExtensionsSize$chain$1$ExtensionsSize$pdata$0$ExtensionsSize$chain$0$ExtensionsSize$pdata$ExtensionsSize$unwind$ExtensionsSizeWriteExtensions$pdata$3$WriteExtensions$chain$3$WriteExtensions$pdata$2$WriteExtensions$chain$2$WriteExtensions$pdata$WriteExtensions$unwind$WriteExtensions??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@CommentsSize$pdata$CommentsSize$unwind$CommentsSizeXpmCreateBufferFromXpmImage$pdata$XpmCreateBufferFromXpmImage$unwind$XpmCreateBufferFromXpmImage??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@boundCheckingMalloc??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@XpmCreateBufferFromImage$pdata$XpmCreateBufferFromImage$unwind$XpmCreateBufferFromImageXpmFreeXpmImagexpmSetInfoXpmCreateXpmImageFromImageAttrib.obj/     1345988045              100666  9282      `
-+dÂ2Ã%:PÂÂ.drectve]Ã€
-+.debug$SpA@B.textvÂ±'	 P`.pdata
-1	=	@0@.xdata[	@0@.textÂk	Ã±	 P`.pdata
-
-+
-+@0@.xdata9
-+I
-+@0@.pdata
-g
-+s
-+@0@.xdataÂ
-+Â¡
-+@0@.pdata
-Â¿
-+Ã
-+@0@.xdata
-Ã©
-+
-@0@.pdata
-#
-/
-@0@.xdataM
-a
-@0@.pdata
-
-Â
-@0@.xdataÂ©
-@0@.text}Â±
-.
- P`.pdata
-B
-N
-@0@.xdatal
-|
-@0@.pdata
-Â
-ÂŠ
-@0@.xdataÃ
-Ã
-@0@.pdata
-Ã²
-ÃŸ
-@0@.xdata
-
-
-8
-@0@.pdata
-V
-b
-@0@.xdataÂ
-Â
-@0@.pdata
-Â²
-ÂŸ
-@0@.xdataÃ
-@0@.textÂ¢Ã€
-Â P`.pdata
-Â®Âº@0@.xdataÃÃš@0@.pdata
-@0@.xdata 0P@0@.pdata
-nz@0@.xdataÂ@0@.textÂ  P`.textKÂŠ P`.textOÃ±@ P`.pdata
-T`@0@.xdata~Â@0@.pdata
-Â¬Âž@0@.xdataÃÃŠ@0@.pdata
-@0@.xdata.F@0@.pdata
-dp@0@.xdataÂÂ¢@0@.pdata
-ÃÃ@0@.xdata
-Ãª@0@.text
-Ã¶	 P`.pdata
-]i@0@.xdata
-Â@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" Ã±b$d:\Develop\xpm\lib\Attrib.obj:<bÃ	x	xMicrosoft (R) Optimizing CompilerHÂ\$HÂt$WHÂÃ¬ ÂÃ²HÂÃIÂÃžÂ
-ÃµÃšLÂÃHÂ
-ÃuHÂAÂCÃœHÂ\$0HÂt$8HÂÃ _ÃÂ
-Ã¶~HÂÃÂHÂHÂÃHÂÃ0HÂÃ©uÃ¯HÂ\$0HÂt$8LÂ3ÃHÂÃ _Ãv
-d42
-pHÂ
-ÃtATHÂÃ¬ HÂt$@LÂÃ¡HÂÃ±Â
-Ã~NHÂ\$0HÂl$8HÂ|$HÂÃªDHÂ
-Â¿HÂ
-HÂ
-ÃtÃšHÂÃHÂÃ¯uÃ©HÂÃHÂÃ­uÃHÂ|$HHÂl$8HÂ\$0IÂ
-$ÃšIÂÃÃšHÂt$@HÂÃ A\Ã³ÃA0m0u0ÂÂ!
-
-/hÂ
-!
-
-)h#!t	
-+T4
-)
-)!d
-
-/
-/
-
-2ÃHÂ
-ÃtvATHÂÃ¬ HÂt$@LÂÃ¡HÂÃ±Â
-Ã~NHÂ\$0HÂl$8HÂ|$HÂÃªDHÂÃÂ¿HÂ
-HÂ
-ÃtÃšHÂÃHÂÃ¯uÃ©HÂÃ0HÂÃ­uÃHÂ|$HHÂl$8HÂ\$0IÂÃÃšHÂt$@HÂÃ A\Ã³ÃA0l0{}RR9!
-RR
-Qh{RR?!
-RR
-KhRRE!t	
-+T4
-RRK
-RRK!d
-R
-RQ
-RRQ
-
-2ÃHÂ
-ÃÂÂATHÂÃ¬ LÂÃ¡Â
-ÃÂxHÂ\$0HÂl$8HÂt$@HÂ|$HHÂqÂÃªHÂNÃ°HÂ
-ÃtÃšÂFÃžHÂ
-Â
-ÃtHÂÃžÂHÂ
-HÂ
-ÃtÃšHÂÃHÂÃ¯uÃ©HÂHÂ
-ÃtÃšHÂÃHÂÃ­uÂ¶HÂ|$HHÂt$@HÂl$8HÂ\$0IÂÃÃšHÂÃ A\Ã³Ã>0Y0p0Â0ÂÂ¢hh[!hh
-gÂhha!t	d
-+T4hh
-ghhg2
-ÃÂžÃ ÃHÂ
-ÃtDÂ3ÃÂºÃ 
-+HÂQ0ÂQ8HÂQpÂQhHÂQxHÂÂÂHÂÂÂsHÂQ`ÂQXÂºÃ s
-HÂÂÂ°ÂÂÂžÃ³Ã@SVWHÂÃ¬ ÂLÂl$PE3Ã­ÂºÃ IÂÃžHÂÃ²HÂÃsHÂBHÂApÂB
-ÂAhDÂj
-LÂjÃ©Â»ÂºÃ ÂÂ±HÂl$@HÂjLÂd$HDÂb
-BÂ
-Ã¥ÃšLÂÃHÂ
-Ãu'LÂkpÂ#Ã¿ÃŸÃ¿Ã¿Âº#	rHÂK0ÃšLÂk0DÂk8DÂkhÃ«YEÂ
-Ã€~IÂÃ@HÂ(HÂÃHÂÃ
-0HÂÃ©uÃ¯LÂ[pÂF
-ÂChHÂGHÂCxHÂGHÂÂÂHÂGHÂÂÂDÂn
-LÂnLÂoLÂoLÂoHÂl$@LÂd$HÂº#
-+sHÂG0HÂC`ÂG(ÂCXLÂo0DÂo(Ã¶LÂl$PtÂ
-ÂG ÂC$ÂG$ÂC(Â
- ÂFÂ
-ÂC,ÂÃÂ
-ÂÂC
-ÂFÂC HÂÃ _^[ÃaÂ0
-OÂÂw!
-+ÂÂ
-ÂÃ·
-ÂÂ}!
-+FÂÂ
-ÂFÃ·ÂÂÂ!Ã	T
-+F
-ÂÂÂ
-+FÂÂÂ!Ã
-+
-+Â
-ÂÂ
-+ÂÂÂ2p`0HÂ\$WHÂÃ¬ 3Ã¿Âº!	HÂÃs9y8tHÂI0ÃšHÂ{0Â{8ÂÂºÃ sÂShHÂKpÃšHÂ{pÂ{hÃ«uÂºÃ soHÂKpHÂ
-ÃtÂShÃšHÂ{pÂ{hHÂKxHÂ
-Ãt	ÃšHÂ{xHÂÂÂHÂ
-Ãt
-ÃšHÂÂ»ÂHÂÂÂHÂ
-Ãt
-ÃšHÂÂ»ÂHÂK0HÂ
-Ãt
-ÃšHÂ{0Â{8Âº#
-+sÂSXÂ
-ÃtHÂK`ÃšHÂ{`Â{XÂº#s!9Â»ÂžtHÂÂÂ°ÃšHÂÂ»Â°ÂÂ»ÂžÂ;HÂ\$0HÂÃ _Ã0:3Zo0Â0Â0Â±0ÃUÃ¯0
-ÂÂÂ
-+
-+4
-+2p@comp.id	xÂÃ¿Ã¿.drectve].debug$Sp.textvÃo| .pdata
-Â?j.xdataÂ§ÂOÃ­3O .textÂÃ¡PÃ1c .pdata
-ÃÃÂÃ¶u.xdataÂºÃ¶=Ã€Â.pdata	
-ÃÂ/Ã¹Â«	.xdata
-+cÂŸ%Ã
-+.pdata
-
-ÂÂŸ!Ã¥Ã¡
-.xdata
-
-ÃL
-+ÃŒ
-.pdata
-
-Ã­ÂÃ©Â
-.xdataÂrÃ­Â2.pdata
-V
-j]M.xdataÃ§Â®Â§ffree .text}4Ã ÃÂÂ .pdata
-Â»Â¡ÂbÂ.xdataÂºÃ¶=Ã€Â­.pdata
-0ÂdÃÃ.xdatacÂŸ%Ã£.pdata
-ÂÂŸ!Ã¥ÃŸ.xdata
-ÃL
-+.pdata
-Ã­ÂÃ©Â4.xdataÂrÃ­ÂO.pdata
-V
-j]j.xdataÃ§Â®Â§Â$LN16.text
-Â¢Ã©Â#ÃÂ
- .pdata
-
-rÃŒÂh
-Â¯
-.xdata
-Ã,T
-Ã
-.pdata
-Â¶ÂÂ
-Ã¥.xdata  ÂÃ­;Ã
- .pdata!
-Ã£-{Ã­
-!.xdata"Â¯Ã«6p
-4"$LN18
-.text#ÃÃ
- ÃN# .text$KÃÂ§$E`$ .text%OÃÂ·
-or% .pdata&
-'ÃšÃ³%Â&.xdata'$Ã¶Â(%Â'.pdata(
-Ã(Ãq%Â·(.xdata)Ã§ÃÂÂŒ%Ã).pdata*
-CÃ°*%Ã«*.xdata+k2ÂY%+.pdata,
-
-#Ã
-%,.xdata-ÃÃ§	7%9-.pdata.
-Ã
-ÃÂ%S..xdata/
-Â§6ZÃš%k/$LN22%.text0
-	ÃUu Â0 .pdata1
-e
-r=0Â1.xdata2
-%ÃY%0Â¯2$LN160ÃCreateOldColorTable$pdata$CreateOldColorTable$unwind$CreateOldColorTableboundCheckingMallocFreeOldColorTable$pdata$5$FreeOldColorTable$chain$5$FreeOldColorTable$pdata$4$FreeOldColorTable$chain$4$FreeOldColorTable$pdata$3$FreeOldColorTable$chain$3$FreeOldColorTable$pdata$0$FreeOldColorTable$chain$0$FreeOldColorTable$pdata$FreeOldColorTable$unwind$FreeOldColorTablexpmFreeColorTable$pdata$5$xpmFreeColorTable$chain$5$xpmFreeColorTable$pdata$4$xpmFreeColorTable$chain$4$xpmFreeColorTable$pdata$3$xpmFreeColorTable$chain$3$xpmFreeColorTable$pdata$0$xpmFreeColorTable$chain$0$xpmFreeColorTable$pdata$xpmFreeColorTable$unwind$xpmFreeColorTableXpmFreeExtensions$pdata$4$XpmFreeExtensions$chain$4$XpmFreeExtensions$pdata$3$XpmFreeExtensions$chain$3$XpmFreeExtensions$pdata$XpmFreeExtensions$unwind$XpmFreeExtensionsXpmAttributesSizexpmInitAttributesxpmSetAttributes$pdata$4$xpmSetAttributes$chain$4$xpmSetAttributes$pdata$3$xpmSetAttributes$chain$3$xpmSetAttributes$pdata$2$xpmSetAttributes$chain$2$xpmSetAttributes$pdata$0$xpmSetAttributes$chain$0$xpmSetAttributes$pdata$xpmSetAttributes$unwind$xpmSetAttributesXpmFreeAttributes$pdata$XpmFreeAttributes$unwind$XpmFreeAttributes
-\ No newline at end of file
-diff -Naur vim73.orig/src/xpm/x86/lib/libXpm.a vim73/src/xpm/x86/lib/libXpm.a
---- vim73.orig/src/xpm/x86/lib/libXpm.a	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/x86/lib/libXpm.a	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,125 @@
-+!<arch>
-+/               1345987854  0     0     0       1562      `
-+F^^^^^^
-
-
-Âº
-Âº)R)R)RS<S<XtXt]Ã]Ã]Ã]Ã]Ã]Ã]ÃsÃsÃsÃsÃxÃxÃ{B{B{B{BÂ*ÂÃžÂÃÂÃÂÂÂÂÂÂÂÂÂ°ÂªÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ8Ã
-+Ã
-+Ã
-+Ã
-+Ã
-+Ã±TÃŽ0ÃŽ0_xpmFreeColorTable_XpmFreeExtensions_XpmAttributesSize_xpmInitAttributes_xpmSetAttributes_XpmFreeAttributes_XpmCreateBufferFromXpmImage_XpmCreateBufferFromImage_XpmCreateDataFromXpmImage_XpmCreateDataFromImage_xpmstrcasecmp_XpmCreateImageFromXpmImage_xpmParseDataAndCreate_XpmCreateImageFromBuffer_XpmCreateXpmImageFromBuffer_XpmCreateImageFromData_XpmCreateXpmImageFromData_xpmNextString_xpmNextWord_xpmNextUI_xpmGetString_xpmGetCmt_xpmParseHeader_xpmDataTypes_xpmHashSlot_xpmHashIntern_xpmHashTableInit_xpmHashTableFree_xpmInitXpmImage_XpmFreeXpmImage_xpmInitXpmInfo_XpmFreeXpmInfo_xpmSetInfoMask_xpmSetInfo_xpmatoui_XpmGetErrorString_XpmLibraryVersion_XpmFree_XpmReadFileToBuffer_XpmReadFileToData_XpmReadFileToXpmImage_XpmReadFileToImage_xpmReadRgbNames_xpmGetRgbName_xpmGetRGBfromName_xpmFreeRgbNames_XpmCreateXpmImageFromImage_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc_XDefaultVisual_XDefaultScreen_XDefaultDepth_XDefaultColormap_XParseColor_XAllocColor_XQueryColors_XFreeColors_XCreateImage_XImageFree_XDestroyImage_XpmWriteFileFromBuffer_xpmParseValues_xpmParseColors_xpmParseExtensions_xpmParseData_xpmColorKeys_XpmWriteFileFromData_XpmWriteFileFromXpmImage_XpmWriteFileFromImageAttrib.o/       1345987849  0     0     100666  2178      `
-+LÃ.textÂÂ
- P`.data@0Ã.bssÂ0ÃUÂÃ¥WVSÂÃ¬
-ÂEÂEÃ°ÂUÃ°ÂE
-Â
-ÃÂEÃ¬tdÃEÃšÂ}Ã°9EÃš}CÂÂt&ÂÃ»ÂŸÃ«
-ÂÂŽ&ÂÃNxÂÂ
-ÃtÃŽÂ$ÂÃÃšNyÃ¬ÂÂ¶Ã¿EÃšÂÃÂEÃ¬9EÃš|ÃÂEÃ°ÂEÂÃ
-[^_]Ã©ÂÃ
-[^_]ÃÂÂÂŽ&UÂÃ¥WVSÂÃ¬
-ÂEÂU
-Â
-ÃÂEÃ°ÂUÃ¬ÂÂÃEÃšÂÃºÂEÃ€v]Ât&ÂUÃ€ÂÂ
-ÃubÂEÃ€1Ã¶ÂxÂ@9ÃŸÂÃrÃ«*Ât&FÂÃ9ÃŸsÂÂ
-ÃtÃ²Â$FÃšÂÃ9ÃŸrÃªfÂÂUÃ€ÂBÂ
-Ãu+Ã¿EÃšÂEÃ€
-ÂEÃš9EÃ¬wÂ§ÂUÃ°ÂUÂÃ
-[^_]Ã©Â$ÃšÃ«ÂÂ$ÃšÃ«ÃÂÃ
-[^_]ÃÂÃ¶ÂÂŒ'UÂžÂÂÃ¥]ÃÂÂ¶UÂÃ¥ÂEÂ
-ÃtNÃ@$ÂÃ@(Ã@DÃ¶ÃÃ@@Ã@HÃ@LÃ@Pu
-ÂÃ¢tÃ@pÃ@t]ÃÂÂ¶Ã@<Ã@8Ã«ÃUÂÃ¥ÂÃ¬Â]ÃŽÂ]ÂuÃžÂ}ÃŒÂÃ¶CÂt~ÂM
-ÂAÂCDÂA
-ÃAÂC@ÃA
-Ã¶Ãt
-ÂMÂA
-ÂC<ÂAÃA
-ÂC8ÃAÂEÃ¶tÂÃÂ@ÂÃÂCÂAÂC
-ÂM
-ÂÃ(ÂÂAÂC ÂÂCÂAÂCÂ]ÃŽÂuÃžÂ}ÃŒÂÃ¬]ÃÃ¶ÃtÂÂE
-ÂSDÂUÃ°Âx
-ÂpÂÂœÂ$ÃšÂ
-Ãt`1ÃÂÃÃ«	Â2AÂÃÂÃ9Ã¹|Ã³ÂU
-ÂMÃ°ÃBÂÂMÂB
-ÂC@ÂAÃB
-ÂÂCHÂAÂCLÂA
-ÂCPÃAÃAÃA
-Ã©Ã¿Ã¿Ã¿ÃCDÂÂÃÂÃ¢Ã¿ÃŸÃ¿Ã¿Ã¶ÃÂt
-ÃC@Ã©ÃŽÃŸÃ¿Ã¿ÂC$Â$ÃšÃC$ÂÃC(Ã«ÃUÂÃ¥WVSÂÃ¬
-ÂEÂÃ¶Ãt
-ÂX(Â
-ÃÂ
-XÂÃ%ÂfÂ
-ÃÂ
-Ã¶Ãu:Ã¶ÃtÂMÂA8Â
-ÃÂ
-ÂÂÃ¢tÂUÂJtÂ
-ÃÂ
-=ÂEÃÂÃ
-[^_]ÃÂEÂ@DÂ
-ÃÂEÃ°ÂÂÃEÃšÂUÂÃÂR@9UÃšÂUÃ¬}IÂt&ÂÂŒ'ÂÂŸÃ«
-ÂÂŽ&ÂÃNxÂÂ
-ÃtÃŽÂ$ÂÃÃšNyÃ¬ÂÂ¶Ã¿EÃšÂÃÂMÃ¬9MÃš|ÃÂUÃ°ÂÂ$ÃšÂMÃ°Â
-$ÃšÂEÃ@DÃ@@ÂUÂBHÂ
-ÃÂ
-&ÂUÂBLÂ
-ÃÂ
-ÂUÂBPÂ
-ÃÂ
-ÃÂUÂB$Â
-ÃÂ
-Â®ÂEÂÃ©ÃªÃŸÃ¿Ã¿ÂUÂB@ÂD$ÂBDÂ$ÃšrÃ»Ã¿Ã¿ÂMÂÃADÃA@Ã©ÂœÃŸÃ¿Ã¿Â@$Â$ÃšÂMÂÃA$ÃA(Ã©Â
-ÃŸÃ¿Ã¿ÂBpÂ$ÃšÂMÂEÃApÃAtÃÂÃ
-[^_]ÃÂD$ÂA<Â$ÃšÂÃ»Ã¿Ã¿ÂEÂÃ@<Ã@8Ã©YÃŸÃ¿Ã¿Â$ÃšÂMÂÃA$ÃA(Ã©&ÃŸÃ¿Ã¿Â$ÃšÂMÃAPÃ©
-Ã¿Ã¿Ã¿Â$ÃšÂMÃALÃ©ÃšÃŸÃ¿Ã¿Â$ÃšÂMÃAHÃ©ÃÃŸÃ¿Ã¿ÂÂÂÂÂÂÂÂÂÂÂÂÂÂSÃ³/9ÂÃ³"Â­Ã!AXo|'.fileÃŸÃ¿gAttrib.c Â *P =` PÃ b0 .textÂ.data.bss_free u Â_xpmFreeColorTable_XpmFreeExtensions_XpmAttributesSize_xpmInitAttributes_xpmSetAttributes_XpmFreeAttributes_boundCheckingMallocCrBufFrI.o/     1345987849  0     0     100666  3425      `
-+L
-.textpÂŽÂ	& P`.data@0Ã.bssÂ0Ã.rdatad$	@0@U1ÃÂÃ¥WVSÂÃ¬ÂÂÂ
-ÃÃ»Ã¿Ã¿1ÃÂÂ
-ÃÃ»Ã¿Ã¿1ÃÂÂ
-Ã€Ã»Ã¿Ã¿ÂEÃ1ÃÂÂ
-ÃÃ»Ã¿Ã¿ÂEÂ
-Ãt
-ÂUÃ¶BÂ
-ÂÂu1Ã¿ÂÂœÃÃ»Ã¿Ã¿Â
-Ã¶ÂÃÂMÃ¶AÂÂ¹ÂAÂ
-ÃÂÂ®ÂÂ
-ÃÃ»Ã¿Ã¿ÂQ
-1ÃÂÂÂŒÃ»Ã¿Ã¿Â»ÂÂÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿1Ã9Â
-ÂŒÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿smÂÂÃÃ»Ã¿Ã¿1ÃÂÂ$ÃšÂÂÃÃ»Ã¿Ã¿ÂÂÂŒÃ»Ã¿Ã¿ÂyÂqÂT
-ÂÂÂŒÃ»Ã¿Ã¿Ã«
-ÂCÂÃÂ$ÃšÂÂÂŒÃ»Ã¿Ã¿ÂTÂÂÂŒÃ»Ã¿Ã¿9Ã»rÃÃ¿Â
-ÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿
-9ÂÃÃ»Ã¿Ã¿rÂÂÂ
-ÂŒÃ»Ã¿Ã¿ÂÃ
-ÂÂ
-ÃÃ»Ã¿Ã¿ÂÂœÃÃ»Ã¿Ã¿Â
-Ã¿tIÂU1ÃÂBÂ
-Ãt
-Â$ÃšÂXÂMÂAÂ
-Ãt
-Â$ÃšÂ\ÂUÂB
-Â
-Ãt
-Â$ÃšÂ\ÂÂÃÃ»Ã¿Ã¿ÃŒÂŸÂ¹
-+Â·(ÂÂœÃšÃœÃ¿Ã¿Ã³Â¥ÂŸ)fÂÂÂÃÃ»Ã¿Ã¿ÂÂµÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂD*ÂÂ
-Ã Ã»Ã¿Ã¿Â$ÃšÂÂ
-Ã€Ã»Ã¿Ã¿Â
-ÃÂºÃœÃ¿Ã¿Ã¿ÂÃµÂ$ÂÂÃšÃœÃ¿Ã¿ÂL$ÃšÂÂÃÃ»Ã¿Ã¿Â
-ÃtÂUÂBÂ
-ÃÂ
-{ÂM
-ÂAÂD$ÂA
-ÂD$ÂAÂD$
-ÂÂD$Âž*ÂD$ÂÂ
-ÃšÃœÃ¿Ã¿Â$ÃšÂÃÂEÂ
-Ãt
-ÂUÃ¶Â
-ÂÂÂ
-ÃÃ»Ã¿Ã¿Â
-ÃtÂž XPMÂÂ+ÃšÃœÃ¿Ã¿ÂžEXTÂÂ+Ã¬ÃœÃ¿Ã¿ÂÃÂ¿",
-+ÂŸÃœÃ¿Ã¿Ã¿ÂÂŒ+ÃšÃœÃ¿Ã¿ÂÂ
-Ã Ã»Ã¿Ã¿ÂÃÃÂÂ
-Ã Ã»Ã¿Ã¿ÂD$ÂÂ
-Ã€Ã»Ã¿Ã¿Â$ÃšÂ
-ÃÂÂ¡ÂÂ
-Ã€Ã»Ã¿Ã¿ÂÂÃšÃœÃ¿Ã¿ÂL$ÂÂµÃÃ»Ã¿Ã¿Ã°Â$ÃšÂÂ
-ÃÃ»Ã¿Ã¿ÃÂÂÃÃ»Ã¿Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿Â
-ÃtÂMÂQÂ
-ÃÂ
-ÂžÂE
-ÂU
-ÂM
-Â@ÂR
-ÂIÂÂ
-ÂžÃ»Ã¿Ã¿1ÃÂÂ
-Â¬Ã»Ã¿Ã¿9ÂÂ¬Ã»Ã¿Ã¿ÂÂÂŽÃ»Ã¿Ã¿ÂÂÂ°Ã»Ã¿Ã¿ÃÂ
-ÃšÃ»Ã¿Ã¿"ÂÃ¹ÂÂÂŽ&ÂÂ
-Â°Ã»Ã¿Ã¿ÂÂÃ©Ã»Ã¿Ã¿Â¿ÂD$ÂÂÂžÃ»Ã¿Ã¿ÂÂ
-$ÂÃÂÃÂD$ÃšÂÂ
-Â°Ã»Ã¿Ã¿ÃÂvÂÂŒ'ÂÂ
-Ãt"ÂD$
-ÂÂœÃŒÃ¿Ã¿Ã¿Â
-$ÂD$Âž7ÂD$ÃšÃGÂÃÂÃ¿vÃÃ",
-+ÂÂÃšÃ»Ã¿Ã¿ÂÂ
-Ã Ã»Ã¿Ã¿)ÃÂsÃ°ÂD$ÂÂ
-Ã€Ã»Ã¿Ã¿Â$ÃšÂ
-ÃÂÃÂÂÂµÃ Ã»Ã¿Ã¿ÂÂ
-ÃšÃ»Ã¿Ã¿ÂD$ÂÂ
-ÃÃ»Ã¿Ã¿ÃÂ$ÃšÃ¿Â
-Â¬Ã»Ã¿Ã¿ÂÂÂŽÃ»Ã¿Ã¿ÂµÃÃ»Ã¿Ã¿ÂÂÃ€Ã»Ã¿Ã¿ÂÂ
-ÂžÃ»Ã¿Ã¿9ÂÂ¬Ã»Ã¿Ã¿ÂÃ¿Ã¿Ã¿1ÃÂ
-ÃÂÃÂ
-ÂM
-ÂŸÃœÃ¿Ã¿Ã¿ÂÂœÃ Ã»Ã¿Ã¿ÂAÂÂQÂ¯ÃÂÃÂ¯ÃÃž@ÂÂ
-Ã Ã»Ã¿Ã¿ÂD$ÂÂ
-Ã€Ã»Ã¿Ã¿Â$ÃšÂ
-ÃÂÃÂÂ
-Ã€Ã»Ã¿Ã¿ÂÂµÃÃ»Ã¿Ã¿Â
-Ã¶Â
-ÂÂÂÃ€Ã»Ã¿Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿ÂM
-ÃÂU
-ÂÂ
-ÂšÃ»Ã¿Ã¿ÂE
-Â	ÂzÂ@ÂÂµÂšÃ»Ã¿Ã¿ÂÂÂ€Ã»Ã¿Ã¿ÂJÂÂ
-Â Ã»Ã¿Ã¿ÂB1ÃÂÂÂÃ»Ã¿Ã¿H9Â
-ÂÃ»Ã¿Ã¿ÂÂÂÃ»Ã¿Ã¿ÂÂ
-ÂÃ»Ã¿Ã¿shÂvÃ"1ÃF;ÂÂ€Ã»Ã¿Ã¿s:fÂÂÂÂ Ã»Ã¿Ã¿CÂT$ÂÂÃÂÂÂÃ»Ã¿Ã¿Â@ÂÃÂ4$ÂD$ÃšÂÂ
-Â Ã»Ã¿Ã¿Ã;ÂÂ€Ã»Ã¿Ã¿rÃÃ",
-+ÂÂ
-ÂÃ»Ã¿Ã¿ÂÃÃ¿Â
-ÂÃ»Ã¿Ã¿9Â
-ÂÃ»Ã¿Ã¿rÂÃ"1ÃF;ÂÂ€Ã»Ã¿Ã¿s8ÂÂÂ Ã»Ã¿Ã¿CÂT$ÂÂÃÂÂÂÃ»Ã¿Ã¿Â@ÂÃÂ4$ÂD$ÃšÂÂ
-Â Ã»Ã¿Ã¿Ã;ÂÂ€Ã»Ã¿Ã¿rÃÃ"ÂÂ
-ÂšÃ»Ã¿Ã¿F)ÃÂÂ
-ÃÃ»Ã¿Ã¿ÂµÃÃ»Ã¿Ã¿Â
-ÃÂÃžÂÂ
-ÃÃ»Ã¿Ã¿1Ã¿ÂÂÃ€Ã»Ã¿Ã¿ÂÂœÂÃ»Ã¿Ã¿ÂMÃÂÂ
-ÂÃ»Ã¿Ã¿ÂEÂI
-ÂÂµÂÃ»Ã¿Ã¿Â@9Â
-ÂÃ»Ã¿Ã¿ÂÂÂÃ»Ã¿Ã¿ÂÂ
-ÂÃ»Ã¿Ã¿ÂÂÂÂÃ»Ã¿Ã¿Â»>1Ã¿ÂÂ\$Â4$ÂD$ÃšÂÂÂÃ»Ã¿Ã¿ÃÂÂ
-ÂÃ»Ã¿Ã¿ÂIÂX9ÃÂÂÂÃ»Ã¿Ã¿s'fÂÂÂ¹LÂ4$GÂL$ÂÃÂD$ÃšÃ;ÂœÂÃ»Ã¿Ã¿rÃÃ¿Â
-ÂÃ»Ã¿Ã¿ÂÂÂÃ»Ã¿Ã¿ÂÂ
-ÂÃ»Ã¿Ã¿
-9ÂÂÃ»Ã¿Ã¿rÂÃ,
-+"XÃFPMENÃFDEXTfÃF
-"ÂÂÂÃ»Ã¿Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿)ÃÃÂF
-ÂÂ
-ÃÃ»Ã¿Ã¿ÂÂÃ€Ã»Ã¿Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿Ã};
-+ÂÂ
-Ã€Ã»Ã¿Ã¿1ÃÂMÂÂÃÂÂÃ[^_]ÃÂžÂÂ
-ÃÃ»Ã¿Ã¿Ã©iÃ¹Ã¿Ã¿ÂBÂD$
-ÂBÂD$ÂžSÂD$ÂÂ
-ÃšÃœÃ¿Ã¿ÃÂ$ÃšÃÃ©4Ã»Ã¿Ã¿ÂMÂQ
-Â
-ÃÂgÃœÃ¿Ã¿ÂT$Â»ZÂ\$ÂÂÃÃ»Ã¿Ã¿ÃÂ$ÃšÂ
-ÃÃ»Ã¿Ã¿Ã©?ÃœÃ¿Ã¿ÂÂ
-Ã€Ã»Ã¿Ã¿Â
-ÃuÂÃ²ÂÃÂÂÃ[^_]ÃÂ$ÃšÂÃ²Ã«Ã§ÂžÃœÃ¿Ã¿Ã¿Ã©Â°ÃŒÃ¿Ã¿ÂD$Â¹ZÂL$ÂÂ
-ÃÃ»Ã¿Ã¿ÂÂÃ€Ã»Ã¿Ã¿ÃÂ$ÃšÂ
-ÃÃ»Ã¿Ã¿Ã©WÃºÃ¿Ã¿ÂT$Â¹ZÂL$ÂÂÃ€Ã»Ã¿Ã¿ÃÂ$ÃšÂ
-ÃÃ»Ã¿Ã¿Ã© Ã»Ã¿Ã¿ÂÂŽ&UÂÃ¥ÂÃ¬xÂ}ÃŒÂ}
-ÂuÃžÂuÂ
-Ã¿Â]ÃŽtÃÂt$ÂEÃÂD$
-ÂEÂD$ÂEÂD$ÂEÂ$ÃšÂ
-ÃÂÃu3Â
-Ã¶t>Ât$Â]ÂšÂ
-$ÃšÂ\$Â<$ÂEÃÂD$ÃšÃÃ·Ã¿Ã¿ÂÃÂEÃÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]Ã1ÃÂT$Ã«ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ/* XPM */
-+static char * image_name[] = {
-+"%d %d %d %d	%s %s,
-+"XPMEXT %s",
-+"%s" %d %d/*%s*/
-+ÂŽÃ <Qgw
-Â
-Â·Ã
-)ÂÂ¿Z}
-Â
-ÂÃÃ²cwÃž
-
-3
-GÃ¯
-!
-5ax
-ÂÂŠ
-Âº(H.fileÃŸÃ¿gCrBufFrI.c !Ã .textc&.data.bss.rdatab;_strlen _strncpy _free I _strcpy _ _sprintf t Â
- Â Â­_XpmCreateBufferFromXpmImage_XpmCreateBufferFromImage_xpmColorKeys_boundCheckingRealloc_boundCheckingMalloc_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage
-+CrDatFrI.o/     1345987850  0     0     100666  3164      `
-+L
-+.textÂŽÃ
- P`.data@0Ã.bssÂ0Ã.rdata$ÂŽ@0@U1ÃÂÃ¥W1Ã1Ã¿V1Ã¶SÂÃ¬Â¬Â]ÂÂ
-ÃÃ»Ã¿Ã¿ÂEÂ
-ÃÂÂœÃ€Ã»Ã¿Ã¿ÂÂµÃ Ã»Ã¿Ã¿ÃÂÂÃÃ»Ã¿Ã¿t
-Â]Ã¶CÂ
-Ã¬ÂE
-Â»ÂP
-Â\$BÂÃÂÂÃÃ»Ã¿Ã¿ÃÃ ÂÂ
-ÃÃ»Ã¿Ã¿Â$ÃšÂÂ
-ÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Â
-ÃÂÂÂ]
-ÂÂœÃšÃœÃ¿Ã¿ÂºÂCÂD$ÂC
-ÂD$ÂCÂD$
-ÂÂT$Â<$ÂD$ÃšÂ
-ÂEÂ
-Ãt
-ÂEÃ¶Â
-XÂÂ
-ÃÃ»Ã¿Ã¿Â
-ÃtÃ XPMÃCEXTÂÃ)Ã»ÂŸÃœÃ¿Ã¿Ã¿CÂ
-$ÃšÂÂÃÃ»Ã¿Ã¿Â
-ÃÂÂÃŠÂÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿Â|$ÂÂÃÂ$ÃšÂÂÂ¬Ã»Ã¿Ã¿ÂE
-ÂU
-Â]
-Â@ÂR
-Â[ÂÂ
-ÂšÃ»Ã¿Ã¿1ÃÂÂ
-ÂÃ»Ã¿Ã¿9ÂÂÃ»Ã¿Ã¿ÂÂÂ€Ã»Ã¿Ã¿ÂÂÂ Ã»Ã¿Ã¿ÂÃÂÂt&ÂÂ
-Â Ã»Ã¿Ã¿ÂÂÃšÃ»Ã¿Ã¿Â¿ÂÂÂšÃ»Ã¿Ã¿ÂD$ÂÂÃÂ
-$ÂÃÂD$ÃšÂÂ
-Â Ã»Ã¿Ã¿ÃÂvÂÂŒ'ÂÂ
-Ãt"ÂD$
-ÂÂœÃŒÃ¿Ã¿Ã¿Â
-$ÂD$Âž
-ÂD$ÃšÃGÂÃÂÃ¿vÃÂÂ
-ÃšÃ»Ã¿Ã¿)ÃÂsÂ4$ÃšÂ
-ÃÂZÂµÃÃ»Ã¿Ã¿ÂÂÃšÃ»Ã¿Ã¿ÂT$Â$ÃšÃ¿Â
-ÂÃ»Ã¿Ã¿ÂÂÂ¬Ã»Ã¿Ã¿ÂÂ
-ÂšÃ»Ã¿Ã¿ÂÂÃÂÂ
-Â€Ã»Ã¿Ã¿ÂÂÂ¬Ã»Ã¿Ã¿9Â
-ÂÃ»Ã¿Ã¿Â,Ã¿Ã¿Ã¿1ÃÂ
-ÃÂÃÂ
-ÂŠÂU
-ÂÂµÃ Ã»Ã¿Ã¿Â:ÂBÂÃÂRÂ¯ÃÂÂœÃ€Ã»Ã¿Ã¿@ÂÂ
-ÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂÃÃ°ÂŸÃœÃ¿Ã¿Ã¿Â¯ÃÂÂÂÂÃÃ»Ã¿Ã¿ÃÃžÂ$ÃšÂÂ
-ÃÃ»Ã¿Ã¿Â
-ÃÂNÂsÂÂ
-ÃÃ»Ã¿Ã¿ÂÂÃ Ã»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿Ã°Â[
-ÃÂÂœÃÃ»Ã¿Ã¿ÂÂÂÂÃÃ»Ã¿Ã¿ÂÃ1ÃÂÂÂŽ&ÂCÂD$ÂÂ$ÃšÂÂÃÂ$ÃšÂÃ@ÂFÂÃ;ÂÃÃ»Ã¿Ã¿vÃÂE
-ÂÂœÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂHÂÂµÃ Ã»Ã¿Ã¿ÃºÂÃÂÂÃÃ»Ã¿Ã¿Ã°ÂÂÂÂÃÃ»Ã¿Ã¿IÂÂÂÃ»Ã¿Ã¿ÂÂÂÂÂU
-ÂÂ
-ÂÃ»Ã¿Ã¿Â]
-ÂE
-ÂÂ[ÂxÂÂÂÃ»Ã¿Ã¿ÂPÂÂ
-ÂÃ»Ã¿Ã¿ÂÂÂÃ»Ã¿Ã¿ÂÂÂÃ»Ã¿Ã¿Â¯Ã1ÃÂÂÂÃ»Ã¿Ã¿@9ÂÂÃ»Ã¿Ã¿ÂÂ
-ÂÃ»Ã¿Ã¿ÂÂÂÂt&1Ã¶ÂÂ
-ÂÃ»Ã¿Ã¿;ÂµÂÃ»Ã¿Ã¿ÂsFÂÂŽ&ÂÂŒ'ÂÂÂÃ»Ã¿Ã¿FÂT$ÂÂÃÂÂÂÃ»Ã¿Ã¿Â@ÂÃÂ
-$ÂD$ÃšÂÂÂÃ»Ã¿Ã¿Ã;ÂµÂÃ»Ã¿Ã¿rÃÃÂÂÂÃ»Ã¿Ã¿ÂÂ
-ÂÃ»Ã¿Ã¿Ã¿Â
-ÂÃ»Ã¿Ã¿ÂÃÂCÂÃÂÂ
-ÂÃ»Ã¿Ã¿ÂÂÂÃ»Ã¿Ã¿9Â
-ÂÃ»Ã¿Ã¿ÂqÃ¿Ã¿Ã¿1Ã¶ÂÂÂÃ»Ã¿Ã¿;ÂµÂÃ»Ã¿Ã¿Âs8ÂÂ
-ÂÃ»Ã¿Ã¿FÂÂÂÃ»Ã¿Ã¿ÂD$ÂÂÃÂ@ÂÃÂ
-$ÂD$ÃšÂÂ
-ÂÃ»Ã¿Ã¿Ã;ÂµÂÃ»Ã¿Ã¿rÃÃÂÂÃÃ»Ã¿Ã¿Â
-ÃÂ_Â]
-1Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿ÂÂœpÃ»Ã¿Ã¿ÂSÂ]ÃÂÂÃÃ»Ã¿Ã¿Â[
-ÂÂÂUÂÂ|Ã»Ã¿Ã¿ÂÂÃ Ã»Ã¿Ã¿ÂÃÂRÂÂtÃ»Ã¿Ã¿ÂÂxÃ»Ã¿Ã¿ÂPÃŒÂÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿Â1ÃÂÂ
-lÃ»Ã¿Ã¿ÂÂ
-xÃ»Ã¿Ã¿9Â
-pÃ»Ã¿Ã¿ÂÃÂÂ|Ã»Ã¿Ã¿Â»ÂÂ\$ÂD$ÂÂ$ÃšÃ¿Â
-lÃ»Ã¿Ã¿ÂÂtÃ»Ã¿Ã¿9ÂlÃ»Ã¿Ã¿sÂÂ|Ã»Ã¿Ã¿ÂÂ$ÃšÂÃÂÃÂFÂÂ|Ã»Ã¿Ã¿1Ã¿ÂÃÂÂ
-|Ã»Ã¿Ã¿Â[ÂÂhÃ»Ã¿Ã¿ÂX;ÂœhÃ»Ã¿Ã¿sIÂt&ÂÂD$ÂÂ$ÃšÃ¿Â
-lÃ»Ã¿Ã¿ÂÂtÃ»Ã¿Ã¿9ÂlÃ»Ã¿Ã¿sÂÂ$ÃšÂÃ@ÂFÂÃGÂÃ;ÂœhÃ»Ã¿Ã¿rÂ»Ã¿Â
-pÃ»Ã¿Ã¿ÂÂxÃ»Ã¿Ã¿ÂÂ
-|Ã»Ã¿Ã¿
-9ÂpÃ»Ã¿Ã¿Â&Ã¿Ã¿Ã¿ÂÃXPMEÃ@NDEXfÃ@TÂÂÃÃ»Ã¿Ã¿1Ã¶ÂEÂ1Ã;ÂÃÃ»Ã¿Ã¿sÂÂÃÃ»Ã¿Ã¿ÂÂÂ
-ÃÂ
-C;ÂÃÃ»Ã¿Ã¿rÃŠÂÂÃÃ»Ã¿Ã¿Â
-$ÃšÂÃ°ÂÃÂ¬[^_]ÃÂCÂ
-ÃÂ	ÃºÃ¿Ã¿ÂÂ
-ÂŒÃ»Ã¿Ã¿ÂS
-1Ã¿ÂÂœÂ°Ã»Ã¿Ã¿1Ã¶Â¹ÂÂÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿1Ã9Â
-ÃÃ»Ã¿Ã¿ÂÂÂŽÃ»Ã¿Ã¿ÂÂµÂžÃ»Ã¿Ã¿ÂfÂÂÂÃÃ»Ã¿Ã¿1Ã¶ÂÂ
-Â°Ã»Ã¿Ã¿Â{ÂDÂÂ
-Â°Ã»Ã¿Ã¿ÂÂ$ÃšÂÂÂŽÃ»Ã¿Ã¿Â[ÂTÂÂÂŽÃ»Ã¿Ã¿Ã«$ÂÂ¶ÂFÂÃÂ$ÃšÂÂÂŽÃ»Ã¿Ã¿ÂTÂÂÂŽÃ»Ã¿Ã¿9ÃŸrÃÃ¿Â
-ÂžÃ»Ã¿Ã¿ÂÂÂŒÃ»Ã¿Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿
-9ÂÂžÃ»Ã¿Ã¿rÂÂÂ
-ÂŽÃ»Ã¿Ã¿ÂÃ
-+ÂÂ
-Ã€Ã»Ã¿Ã¿ÂÂ
-Â°Ã»Ã¿Ã¿@ÂÂ
-Ã Ã»Ã¿Ã¿Ã©+Ã¹Ã¿Ã¿fÂÂ$CÃšÃ©Ã€ÃŸÃ¿Ã¿ÂÃÂ@ÂD$
-ÂBÂ
-$ÂD$Âž
-ÂD$ÃšÃÃ©ÂÃ¹Ã¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Ã©ÃŠÃºÃ¿Ã¿UÂÃ¥ÂÃ¬xÂ}ÃŒÂ}
-ÂuÃžÂuÂ
-Ã¿Â]ÃŽtÃÂt$ÂEÃÂD$
-ÂEÂD$ÂEÂD$ÂEÂ$ÃšÂ
-ÃÂÃu3Â
-Ã¶t>Ât$Â]ÂšÂ
-$ÃšÂ\$Â<$ÂEÃÂD$Ãš1ÃžÃ¿Ã¿ÂÃÂEÃÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]Ã1ÃÂD$Ã«ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ%d %d %d %d	%s %sXPMEXT %s %d %dnÂ
-ÂŒÃŒ)ÂÂœ
-Ã
-ÃÃ°ÂÃ­ÃºÃ€e
-9|Â$Â¡Ã%B
-KÂÂžÃ.fileÃŸÃ¿gCrDatFrI.c ` .textÃ³
-.data.bss.rdata$7_strncpy _free _strlen E _strcpy _sprintf Z o Â Â Âš_XpmCreateDataFromXpmImage_XpmCreateDataFromImage_xpmColorKeys_boundCheckingMalloc_boundCheckingCalloc_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImagecreate.o/       1345987850  0     0     100666  10669     `
-+L$2.textÃ°
-ÂŽÂ¬o P`.data@0Ã.bssÂ0Ã.rdataÂ€@0@UÂÃ¥WVSÂÃ¬
-ÂuÂ]
-Â¶ÂÃt,Â¶ÂÃt(ÂŸÃÂ$ÃšÂÃÂŸÂ$Ãš9Ãu
-FCÂ¶ÂÃuÃÂ¶ÂŸÃÂŸÃÂÃ
-)ÃÂÃ[^_]ÃÂÃºÃ«Ã°ÂÂt&UÂÃ¥ÂÃ¬(Â]ÃŽÂEÂ]ÂuÃžÂ
-ÃÂ}ÃŒÂu
-Â}t
-Â\$
-ÂD$Ât$Â<$ÃšÂ
-ÃÂºÃ¿Ã¿Ã¿Ã¿tÂ\$Ât$Â<$Ãš1ÃÂ
-ÃÂÃÂ]ÃŽÂÃÂuÃžÂ}ÃŒÂÃ¬]ÃÂÂŽ&ÂÂŒ'UÂÃ¥ÂÃ¬8ÂuÃžÂu
-Â}ÃŒÂÃÂžÂ]ÃŽÂÃÂD$Â4$Ãš	Ã¿Ã¿Ã¿Â
-Ãu+ÂEÂUÃÂEÃÃ¿Ã¿Ã¿ÂE
-Â1ÃÂ]ÃŽÂÃÂuÃžÂ}ÃŒÂÃ¬]ÃÂt$ÂE@Â\$Â<$ÂD$ÂEÃšÂD$
-Ã¿U<ÂºÂ
-Ã|ÃtÃÂE$ÂMÃšÂÂE Â
-ÂÂE$BÂÂEÂÂEÃÂE,ÂÂE(Â
-ÂÂE,BÃ«ÂUÂÃ¥WVSÂÃ¬|Â
-ÃÂEÃ°Â}ÂUÃ¬ÃEÃt	Ã¶@Â
-jÃEÃÂEÃ¬Â
-ÃÂÃ§ÂMÃ¬Ã¶ÂÃÂAÂEÃšÂEÃ¬Â
-ÃÂÂšÂEÃ¬Ã¶ÂÂÂPÂUÃ€ÂEÃ¬Â
-ÃÂÂUÃ¬Ã¶B@ÂrÂJlÂMÃÂEÃ¬Â
-ÃÂUÂEÃ¬Ã¶@ÂHÂÂÂÂUÃÂEÃ¬Â
-ÃÂ(ÂMÃ¬Ã¶A ÂÂÂÂÂEÃÂ}ÃÃEÂŒtÂÃ¯Â}ÃÃEÂŒtÃEÂŒÃEÃÂU
-9UÃÂÂÃ«
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÃEÃÂuÃÂ
-Ã¶Â.ÃEÂžÂEÃÂO9EÃÂuÃ ÂMÃstÂÂ¶Â
-Â
-ÃÂÃ1ÃÂ}ÃÂÃÂ
-ÃtÂUÃÂ
-$ÂT$ÃšÂ
-ÃtGÂ
-Ãu5Â^Â
-Ãt.ÂEÂŒÃ«HÂ
-ÂÂ
-ÃtÃžÂÃžÂÃ«ÂÂÂ
-ÃÂ
-ÃÂÂ¶ÂÂŒ'Ã¿EÂžÂÃ
-ÂMÃ9MÂžrÂÂEÃ9EÂžÂÂÂÂ
-ÃÂ`ÂFÂ
-ÃÂUÂUÃ1Ã¶1ÃÂT$8ÂMÃÂt$0Â\$,ÂL$4ÂUÃ¬ÂT$(ÂM(ÂL$$ÂU$ÂT$ ÂM ÂL$
-ÂU
-ÂT$ÂMÂL$ÂUÂT$ÂMÂL$
-ÂUÃÂD$ÂT$ÂMÃšÂ
-$ÂUÃ€ÂEÃ°ÃšÃœÃ¿Ã¿Â
-ÃÂ
-ÃEÃÂt&ÂMÃÂ]ÃÂ
-ÃÂÃ1ÃÂÃ»ÂÃÂ
-Ãt)ÂÃ¶ÂÂŒ'ÂÂÂ
-ÃÂ
-&KÂMÃÂ
-ÃÂÃ1ÃÂÃ»ÂÃÂ
-ÃuÃ Â]ÃÂÂ¶ÂÂŒ'ÂMÃCÂ
-ÃÂÃ1ÃÂÃ»ÂÃÂ
-ÃÂÂ§ÂÂÂ
-ÃtÃ ÂUÃ1Ã¶ÂT$8ÂMÃ1ÃÂT$0Ât$,ÂL$4ÂUÃ¬ÂT$(ÂM(ÂL$$ÂU$ÂT$ ÂM ÂL$
-ÂU
-ÂT$ÂMÂL$ÂUÂT$ÂMÂL$
-ÂUÃÂD$ÂT$ÂMÃšÂ
-$ÂUÃ€ÂEÃ°Ãš"ÃŒÃ¿Ã¿Â
-Ãt9ÃEÃCÂMÃÂ
-ÃÂÃ1ÃÂÃ»ÂÃÂ
-ÃÂ
-gÃ¿Ã¿Ã¿ÂÂŽ&ÂÂŒ'Â]ÃÂ
-ÃÂÃÃ¿EÃÂÃÂM
-ÂEÂE9MÃÂÂÃœÃ¿Ã¿ÂEÃÂÃ|[^_]ÃÂB,ÂR0ÂEÃ ÂUÃÃ©ÂÃŒÃ¿Ã¿ÂUÃ1Ã¶ÂT$8ÂMÃ1ÃÂT$0Ât$,ÂL$4ÂUÃ¬ÂT$(ÂM(ÂL$$ÂU$ÂT$ ÂM ÂL$
-ÂU
-ÂT$ÂMÂL$ÂUÂT$ÂMÂL$
-ÂUÃÂD$ÂT$ÂMÃšÂ
-$ÂUÃ€ÂEÃ°ÃšAÃ»Ã¿Ã¿Â
-ÃÂ'ÃEÃKÃ©XÃŸÃ¿Ã¿ÂNÂFÂUÂ
-ÃÂuhÂMÃÂU(ÂMÂÂÂM$ÂÂÂU(@ÂÃ©Ã¿Ã¿Ã¿ÂD$ÂFÂ$ÃšÃºÃ¿Ã¿Â
-ÃÂ
-2ÃœÃ¿Ã¿Ã©;ÃœÃ¿Ã¿ÂEÂŒÂvÂÂŒ'@ÂÃžÂÂÂ
-ÃtÃ³ÂÃžÂ
-+ÃœÃ¿Ã¿Ã©Ã­ÃŒÃ¿Ã¿ÂºÂT$ÂFÂ$ÃšÃÃ¹Ã¿Ã¿Â
-ÃuÂÂMÂUÃÂEÃÂÃ©sÃ¿Ã¿Ã¿Â}ÃÃEÂŒÃ©
-ÃŒÃ¿Ã¿ÃEÃÃ©Ã¢Ã»Ã¿Ã¿ÃEÃ`Ã©ÂµÃ»Ã¿Ã¿ÃEÃÃ©ÂÃ»Ã¿Ã¿ÂMÃ°Â
-$ÃšÂD$ÂEÃ°Â$ÃšÂEÃ€Ã©HÃ»Ã¿Ã¿ÂUÃ°Â$ÃšÂD$ÂMÃ°Â
-$ÃšÃ©	Ã»Ã¿Ã¿ÃEÃÃ©FÃœÃ¿Ã¿ÂÃ|ÂžÃŒÃ¿Ã¿Ã¿[^_]ÃÃEÃÃ©Ã­ÃŒÃ¿Ã¿ÂÂ¶ÂÂŒ'UÂÃ¥ÃE]Ã©UÂÃ¥SÂÃ¬4ÂÃÂMÂž ÂÃ¹w
-ÂÃ¹	ÃÂÃ ÃžÂÃÂD$ ÂEÂT$Â
-$ÂD$
-ÂEÃD$$ÂL$ÂD$1ÃÂD$1ÃÂD$ÂE
-ÂD$
-ÃšÂUÂÃžÂÃÂÃ4[ÂÃ Ãœ]ÃÃ«
-ÂÂÂÂÂÂÂÂÂÂÂÂÂUÂÃ¥W1Ã¿VSÂÃ¬
-ÂuÂEÃ°ÂÂUÃ°ÂD$ÂÂ$ÃšÂEÃ¬ÂÃ¬;}
-sDÂ1Ã;]s6ÂÃ¶ÂÂŒ'ÂÂÃÂUÂÂÂUÃ°Â|$Â\$CÂD$
-ÂÂ$ÃšÂÃ¬;]rÃG;}
-rÂœÂEÃ¬ÂUÃ°ÂD$ÂÂ$ÃšÂÃ¬ÂeÃŽ[^_]ÃÂÂŽ&ÂÂŒ'UÂÃ¥WVSÂÃ¬lÂEÃEÃ€ÂuÂ}
-ÃEÃ Â
-ÃÂ]ÃEÃšÂÃEÂŒÃEÂžÃEÃ¬ÃEÃ°t	ÂEÃÂMÂ
-Ãt	ÂUÃÂ
-Ãt	Ã¶Â
-Ã€Â4$ÃšÂD$Â4$ÃšÂEÃÂ
-ÃÂqÃ¶ÂhÂSÂUÃÂ
-ÃÂ:Ã¶Â1ÂC
-ÂEÃÂ
-ÃÂÃ¶CÂ	ÂS|ÂUÃÂ
-ÃÂÃ®Ã¶CÂÃ€ÂÂÂÂEÃÂG
-ÃÃ Â$ÃšÂEÃÂUÃÂžÃœÃ¿Ã¿Ã¿Â
-ÃÂCÂG
-ÃÃ Â$ÃšÂEÃÂ
-ÃÃEÃÃœÃ¿Ã¿Ã¿ÂÂ·ÂG
-ÃÃ Â$ÃšÂEÂŒÂ
-ÃÃEÃÃœÃ¿Ã¿Ã¿ÂÂÂG
-ÃÃ Â$ÃšÂEÂžÂ
-ÃÃEÃÃœÃ¿Ã¿Ã¿t{ÂEÃ°ÂUÂžÂD$ ÂEÃ¬ÂD$ÂEÂŒÂT$
-ÂUÃÂD$ÂEÃšÂD$ÂEÃÂT$
-ÂÃÂD$ÂG
-ÂD$ÂGÂ$ÂÃ°ÃšÂŽÃ·Ã¿Ã¿ÂEÃÂ
-ÃÂÂ©|'Â
-ÃÂÂÃ¶CÂÂÂCXÂ
-ÃÂÂÂvÂÂŒ'ÂEÃ€Â
-ÃÂ
-5ÂEÃ Â
-ÃÂ
-JÂ}ÃÂ
-Ã¿t
-ÂEÃÂ$ÃšÂ]ÃÂ
-Ãt
-ÂUÃÂ$ÃšÂEÃ¬Â
-ÃÂ
-+ÂUÂŒÂ
-Ãt
-ÂEÂŒÂ$ÃšÂEÂžÂ
-Ãt
-ÂUÂžÂ$ÃšÂEÃÂÃl[^_]ÃÂCÃ©(ÃŸÃ¿Ã¿Ât&ÂEÂ
-ÃteÂ}ÃÂEÃ€ÂD$ÂGÂD$
-ÂÂD$ÂEÃtÂžÂD$ÂUÃÂÃ°Â$ÂUÃÃšCÃŒÃ¿Ã¿ÂEÃÂ
-ÃÂ
-8Ã¿Ã¿Ã¿ÂEÃÂUÃ€ÂD$
-ÂGÂD$ÂGÂD$ÂÂ$ÂÃ°ÃšÂÃŒÃ¿Ã¿Â}ÃšÂÂÃ1ÃÂ}ÂÃÂ
-Ãt[ÂEÃ ÂUÃÂD$ÂGÂD$
-ÂÂT$ÂUÃÂD$ÂÃ°Ã$ÃšÃÃ»Ã¿Ã¿ÂEÃÂ
-ÃÂ
-ÃÃŸÃ¿Ã¿ÂEÃÂUÃ ÂD$
-ÂGÂD$ÂGÂD$ÂÂ$ÂÃ°Ãš"ÃŒÃ¿Ã¿ÂUÃÂ$ÃšÂEÃÂ$ÃšÂ
-ÃÂÂÃ¶Ãu	Ã¶ÃÂÂEÃ°ÂUÂžÂC(ÂEÃšÂS$ÂCTÂ
-ÃÂÃœÃ¶CÂÃ³ÂUÂŒÂEÃ¬ÂSpÂCtÂEÂ
-ÃtÂEÃ€ÂUÂÂEÂ
-ÃÂÂÃŸÃ¿Ã¿ÂEÃ ÂUÂÃ©ÂÃŸÃ¿Ã¿ÃEÃÃ°Ã©ÃœÃ¿Ã¿ÂÃEÃÃ©Ã±ÃŒÃ¿Ã¿Ât&Â4$ÃšÂD$Â4$ÃšÃ©Â¹ÃŒÃ¿Ã¿ÂÂŽ&Â4$ÃšÂD$Â4$ÃšÂEÃÃ©ÂÃŒÃ¿Ã¿Ât&Â$ÃšÂEÃ Â
-ÃÂÃÃœÃ¿Ã¿ÂÂ¶ÂÂŒ'Â$ÃšÃ©Â©ÃœÃ¿Ã¿ÂvÂD$
-ÂUÃ1ÃÂL$ÂEÂŒÂ4$ÂT$ÂD$Ã¿UÃÃ©Â²ÃœÃ¿Ã¿ÂEÂžÂ$ÃšÃ©Ã»ÃŸÃ¿Ã¿ÂEÂŒÂ$ÃšÃ©	Ã¿Ã¿Ã¿ÂÂ¶ÂÂŒ'U1ÃÂÃ¥W1Ã1ÃV1Ã¶SÂÃ¬Ã¬ÂÂ
-ÂÃ·Ã¿Ã¿1Ã1ÃÂÂ
-ÂÃ·Ã¿Ã¿ÂžÂÂ} ÂÂ
-Â Ã·Ã¿Ã¿1ÃÂÂ
-ÂÃ·Ã¿Ã¿1ÃÂÂ
-|Ã·Ã¿Ã¿1ÃÂÂ
-xÃ·Ã¿Ã¿1ÃÂÂ
-ÃÃ·Ã¿Ã¿1ÃÂÂ
-Â°Ã·Ã¿Ã¿1ÃÂÂ
-ÂŽÃ·Ã¿Ã¿1ÃÂÂ
-Â¬Ã·Ã¿Ã¿1ÃÂÂ
-ÂÃ·Ã¿Ã¿ÂEÂÂµtÃ·Ã¿Ã¿ÂÂÂ€Ã·Ã¿Ã¿Â
-ÃÂÂÂšÃ·Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿t	ÂEÃÂuÂ
-Ã¶t	ÂUÃÂ
-Ã¿t	Ã¶Â
-ÃÂEÂ$ÃšÂD$ÂUÂ$ÃšÂÂ
-ÂÃ·Ã¿Ã¿Â
-Ã¿Â2Ã¶Â)ÂOÂÂÂÃ·Ã¿Ã¿Â
-Ã¿ÂÃ·Ã¶ÂÃ®Âw
-Â
-Ã¿ÂÃÃ¶GÂÃÂW|ÂÂÂÃ·Ã¿Ã¿Â
-Ã¿ÂÂšÃ¶GÂÂÂÂÂÂÂÂÃ·Ã¿Ã¿ÂE
-1ÃÂÂpÃ·Ã¿Ã¿Â
-ÃtÂE
-Ã¶@t
-ÂžÂÂ
-pÃ·Ã¿Ã¿ÂU
-Â$ÃšÂ
-ÃtÂeÃŽ[^_]ÃÂOÂÂÂÃ·Ã¿Ã¿Ã©QÃ¿Ã¿Ã¿ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$
-ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$
-ÂÂ
-ÂŒÃ·Ã¿Ã¿ÂD$ÂÂ
-ÂžÃ·Ã¿Ã¿ÂD$ÂM
-Â
-$ÃšÂ
-ÃuÂÂÂ
-pÃ·Ã¿Ã¿Â
-ÃÂ
-ÂÂÂÃÃ·Ã¿Ã¿ÂÃ¹ÂMÂÂÃÃ·Ã¿Ã¿ÂÃºÂ%ÂL$ÂEÃÂD$ÂÂ
-Â°Ã·Ã¿Ã¿ÂD$
-ÂT$ÂU
-Â$ÃšÂ
-ÃÂÃÂ
-AÂÂ
-pÃ·Ã¿Ã¿Â
-ÃÂ
-ÃÂÂ
-ÃÃ·Ã¿Ã¿Â»ÃœÃ¿Ã¿Ã¿ÃÃ Â$ÃšÂÂ
-ÂÃ·Ã¿Ã¿Â
-ÃÂÂÂ
-ÃÃ·Ã¿Ã¿ÃÃ Â$ÃšÂÂ
-|Ã·Ã¿Ã¿Â
-ÃÂÃ°ÂÂ
-ÃÃ·Ã¿Ã¿ÃÃ Â$ÃšÂÂ
-xÃ·Ã¿Ã¿Â
-ÃÂÃÂÂ
-ÃÃ·Ã¿Ã¿ÃÃ Â$ÃšÂÂ
-tÃ·Ã¿Ã¿Â
-ÃÂÂ²ÂÂ
-ÂšÃ·Ã¿Ã¿ÂD$ ÂÂ
-tÃ·Ã¿Ã¿ÂD$
-ÂÂ
-Â€Ã·Ã¿Ã¿ÂD$ÂÂxÃ·Ã¿Ã¿ÂÂ
-Â Ã·Ã¿Ã¿ÂD$ÂT$ÂÂ|Ã·Ã¿Ã¿ÂÃºÂL$
-ÂÂ
-ÂÃ·Ã¿Ã¿ÂD$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÂÂ
-Â°Ã·Ã¿Ã¿Â$ÂEÃšÂÃ±Ã¿Ã¿Â
-ÃÂÃtÂCÂ
-Ã¿tÃ¶Gt
-ÂGXÂ
-ÃÂ
-.ÂEÂ
-ÃtMÂÂ
-ÂÃ·Ã¿Ã¿ÂÃŸÂD$ÂÂ
-ÂŒÃ·Ã¿Ã¿ÂD$
-ÂÂ
-ÂžÃ·Ã¿Ã¿ÂD$ÂÂ
-ÂÃ·Ã¿Ã¿tÂžÂD$Â4$ÂÂÂÃ·Ã¿Ã¿ÂEÃšÂ€Ã¶Ã¿Ã¿Â
-ÃÂÃÂ
-ÃÂÂœÂ Ã·Ã¿Ã¿ÂÂÃ1ÃÂ}ÂÃÂ
-ÃÂ
-Â¯ÂÂÂžÃ·Ã¿Ã¿ÂÂ
-ÂŒÃ·Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿ÂÂlÃ·Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿ÂÂ
-hÃ·Ã¿Ã¿ÂÂ
-Â°Ã·Ã¿Ã¿ÂÂ`Ã·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿ÂÂœ`Ã·Ã¿Ã¿ÂÂdÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿ÂÂ
-\Ã·Ã¿Ã¿ÂÂTÃ·Ã¿Ã¿ÂÂXÃ·Ã¿Ã¿ÂfÂÂœ`Ã·Ã¿Ã¿ÂÂ
-+ÂÂ`Ã·Ã¿Ã¿1ÃÂÃ¹ÂÂ)ÃÃ·Ã¿Ã¿ÂÃ1ÃÂÂœdÃ·Ã¿Ã¿ÂÃÂ
-ÃÂd1ÃÂÂ
-hÃ·Ã¿Ã¿ÂÂLÃ·Ã¿Ã¿9Â
-LÃ·Ã¿Ã¿ÂAÂU
-Â$Ãš1ÃÂÂlÃ·Ã¿Ã¿ÂÂPÃ·Ã¿Ã¿9ÂPÃ·Ã¿Ã¿ÂÂš1Ã¶ÂÂÃÃ·Ã¿Ã¿;Âµ`Ã·Ã¿Ã¿s;ÂÂ¶ÂU
-ÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÂÂM
-FÂQÂBÂAÂ¶ÂC;Âµ`Ã·Ã¿Ã¿rÃÂÂÃÃ·Ã¿Ã¿ÂMÃÂT$Â
-$ÃšÂÃÂÂ
-ÃÂSÂÂXÃ·Ã¿Ã¿ÂÂD$ÂMÂÂ$ÃšÂÂÃ¬ÂÂÂÃ·Ã¿Ã¿Â@ÂÂÂD$
-ÂÂLÃ·Ã¿Ã¿ÂL$ÂÂ
-PÃ·Ã¿Ã¿ÂD$ÂUÂÂ$ÃšÂÂ
-TÃ·Ã¿Ã¿ÂÃ¬Â
-ÃtRÂÂTÃ·Ã¿Ã¿ÂÂD$ÂUÂÂ$ÃšÂÂÃ¬ÂÂ|Ã·Ã¿Ã¿Â@ÂÂÂD$
-ÂÂ
-LÃ·Ã¿Ã¿ÂD$ÂÂPÃ·Ã¿Ã¿ÂT$ÂMÂÂ$ÃšÂÃ¬Ã¿Â
-PÃ·Ã¿Ã¿ÂÂ
-lÃ·Ã¿Ã¿9Â
-PÃ·Ã¿Ã¿Ã©ÃÃŸÃ¿Ã¿ÂÂt&Â¹Ã°Ã©^Ã»Ã¿Ã¿ÂÂ¶Â»ÂÂÂÃ·Ã¿Ã¿Ã©0Ã»Ã¿Ã¿ÂMÂ
-$ÃšÂD$ÂEÂ$ÃšÂÃÃ©ÃŽÃºÃ¿Ã¿ÂEÂ$ÃšÂD$ÂUÂ$ÃšÂÂ
-ÂÃ·Ã¿Ã¿Ã©Â»ÃºÃ¿Ã¿ÂUÃÂ$ÃšÂ
-ÃÂ
-'Ã»Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿Ã©Â·Ã»Ã¿Ã¿ÂÃÂD$ÂE
-ÂÃ
-ÂD$ÂU
-Â$ÃšÂ
-ÃÂÃÂÃÂÂœÃÃ·Ã¿Ã¿v
-ÂÂœÃÃ·Ã¿Ã¿ÂÃÂÂÂ°Ã·Ã¿Ã¿Â
-ÃÂ
-AÂÂ
-ÂŽÃ·Ã¿Ã¿Â
-ÃÂ
-&ÂÂ
-Â¬Ã·Ã¿Ã¿Â
-ÃÂ
-
-ÂÂ
-ÂÃ·Ã¿Ã¿Â
-ÃÂ
-Ã°ÂÂ
-ÂÃ·Ã¿Ã¿Â
-ÃÂ
-ÃÂÂ
-ÂÃ·Ã¿Ã¿Â
-ÃÂ
-ÂºÂÂµÂÃ·Ã¿Ã¿Â
-Ã¶tÂÂÂÃ·Ã¿Ã¿Â$ÃšÂÂ|Ã·Ã¿Ã¿Â
-ÃtÂÂ|Ã·Ã¿Ã¿Â
-$ÃšÂÂ
-Â€Ã·Ã¿Ã¿Â
-ÃÂ
-ÃÂÂ
-xÃ·Ã¿Ã¿Â
-ÃtÂÂ
-xÃ·Ã¿Ã¿Â$ÃšÂÂ
-tÃ·Ã¿Ã¿Â
-ÃtÂÂtÃ·Ã¿Ã¿Â$ÃšÂeÃŽÂÃ[^_]ÃÂE
-ÂPÂBHÂ
-ÃÂBÂÃÂÂ¶@ÂÂÃÂFCÃ©SÃœÃ¿Ã¿ÂÂ
-ÂŽÃ·Ã¿Ã¿ÂD$ÂE
-Â$ÃšÃ©OÃºÃ¿Ã¿Â$ÃšÃ©9Ã¿Ã¿Ã¿Â$ÃšÃ©
-Ã¿Ã¿Ã¿Â$ÃšÃ©Ã¿Ã¿Ã¿Â$ÃšÃ©ÃšÃŸÃ¿Ã¿Â$ÃšÃ©ÃÃŸÃ¿Ã¿ÂÂ
-ÃÃ·Ã¿Ã¿Â$ÂD$ÃšÃ©ÂšÃŸÃ¿Ã¿ÂD$
-1ÃÂT$ÂÂ
-xÃ·Ã¿Ã¿ÂD$ÂÂÂÃ·Ã¿Ã¿ÂT$ÂMÂ
-$Ã¿ÂÂÃ·Ã¿Ã¿Ã©ÃœÃŸÃ¿Ã¿ÂÂ
-Â¬Ã·Ã¿Ã¿ÂD$ÂM
-Â
-$ÃšÃ©ÃºÃ¿Ã¿Â$ÃšÂÃÂÃÃ©+Ã¿Ã¿Ã¿ÂEÃÂ$ÃšÃ©0ÃŸÃ¿Ã¿ÂÂHÃ·Ã¿Ã¿Â
-Ãt,ÂÂ@Ã·Ã¿Ã¿ÂL$ÂÂ
-HÃ·Ã¿Ã¿Â$ÃšÂÂHÃ·Ã¿Ã¿ÂÃ¬Â$ÃšÂÃ¬ÂÂDÃ·Ã¿Ã¿ÂL$ÂUÂÂ$ÃšÂÃ¬1ÃÂÂÂÃ·Ã¿Ã¿ÂÃ1Ã¶Â
-$Ãš1ÃÂÂ
-ÂÃ·Ã¿Ã¿ÂÂ
-|Ã·Ã¿Ã¿Â$ÃšÂÂµ|Ã·Ã¿Ã¿Â
-ÃÂ
-ÂÃœÃ¿Ã¿ÂÂœÃÃ·Ã¿Ã¿v
-ÂÂœÃÃ·Ã¿Ã¿ÂnÂÂpÃ·Ã¿Ã¿Â
-ÃÂ
-ÂÂM
-Â
-Ãt(ÂE
-Ã¶@tÂÂÃÃ·Ã¿Ã¿Â
-ÃÂ
-*ÃœÃ¿Ã¿ÂM
-ÃA
-ÃAÂUÂÂ
-ÂžÃ·Ã¿Ã¿ÃBÂÂÂ
-ÂŒÃ·Ã¿Ã¿ÂBÂÂ
-ÃÃ·Ã¿Ã¿ÂBÂÂ
-ÃÃ·Ã¿Ã¿ÂB
-ÂÂ
-Â°Ã·Ã¿Ã¿ÂBÂE
-Â
-ÃtJÂÂ
-pÃ·Ã¿Ã¿Â
-Ãt
-ÂÂ
-ÂŽÃ·Ã¿Ã¿ÂM
-ÂAÂÂ
-Â¬Ã·Ã¿Ã¿ÂAÂÂ
-ÂÃ·Ã¿Ã¿ÂA
-ÂÂ
-ÃÃ·Ã¿Ã¿Â
-ÃtÂÂ
-ÃÃ·Ã¿Ã¿ÂU
-ÂBÂÂ
-ÃÃ·Ã¿Ã¿Â
-+ÂBÂ
-Ã¿ÂÃÂÃ¶Ãu	Ã¶ÃÂÂŽÂÂ
-ÂšÃ·Ã¿Ã¿ÂÂtÃ·Ã¿Ã¿ÂG(ÂÂ
-Â Ã·Ã¿Ã¿ÂO$ÂGTÂ
-Ã¿tdÃ¶Gt^ÂÂxÃ·Ã¿Ã¿ÂÂ
-Â€Ã·Ã¿Ã¿ÂWpÂGtÂEÂ
-Ãt
-ÂÂ
-ÂÃ·Ã¿Ã¿ÂUÂÂ}Â
-Ã¿t
-ÂÂ
-ÂÃ·Ã¿Ã¿ÂMÂ1ÃÃ©.Ã·Ã¿Ã¿Ã¿Â
-LÃ·Ã¿Ã¿ÂÂhÃ·Ã¿Ã¿9ÂLÃ·Ã¿Ã¿Ã©ÃºÃ¿Ã¿ÂžÃŸÃ¿Ã¿Ã¿Ã©UÃŸÃ¿Ã¿ÂÂxÃ·Ã¿Ã¿Â
-$ÃšÃ«Â€ÂÂ
-ÂÃ·Ã¿Ã¿ÂD$ÂÂ
-ÂŒÃ·Ã¿Ã¿ÂD$
-ÂÂ
-ÂžÃ·Ã¿Ã¿ÂD$ÂÂÂÃ·Ã¿Ã¿Ã$ÂT$ÂÂÂÃ·Ã¿Ã¿ÂEÃšÂÃ¯Ã¿Ã¿Â
-ÃÂÃÂ
-+Ã¹Ã¿Ã¿Ã©ÃÃ»Ã¿Ã¿1ÃÂÂhÃ·Ã¿Ã¿ÂÂ
-LÃ·Ã¿Ã¿9ÂLÃ·Ã¿Ã¿ÂÃÃœÃ¿Ã¿ÂE
-Â$Ãš1ÃÂÂlÃ·Ã¿Ã¿ÂÂ
-PÃ·Ã¿Ã¿9ÂPÃ·Ã¿Ã¿Âv1Ã¶ÂÂÃÃ·Ã¿Ã¿;Âµ`Ã·Ã¿Ã¿s4fÂÂM
-ÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÂQFÂBÂAÂ¶ÂC;Âµ`Ã·Ã¿Ã¿rÃ1Ã¶;ÂµdÃ·Ã¿Ã¿s/1ÃfÂÂÂÃÃ·Ã¿Ã¿ÂT$ÂÂ\Ã·Ã¿Ã¿Â
-Â$ÃšÂ
-Ãt
-FÂÃ;ÂµdÃ·Ã¿Ã¿rÃ;ÂµdÃ·Ã¿Ã¿ÂÃÃŸÃ¿Ã¿ÂÂXÃ·Ã¿Ã¿ÂÂD$ÂMÂÂ$ÃšÂÂÂÃ·Ã¿Ã¿ÂÃ¬ÂÂ²ÂD$
-ÂÂLÃ·Ã¿Ã¿ÂL$ÂÂ
-PÃ·Ã¿Ã¿ÂD$ÂUÂÂ$ÃšÂÂ
-TÃ·Ã¿Ã¿ÂÃ¬Â
-ÃtMÂÂTÃ·Ã¿Ã¿ÂÂD$ÂUÂÂ$ÃšÂÂ|Ã·Ã¿Ã¿ÂÃ¬ÂÂ±ÂD$
-ÂÂ
-LÃ·Ã¿Ã¿ÂD$ÂÂPÃ·Ã¿Ã¿ÂT$ÂMÂÂ$ÃšÂÃ¬Ã¿Â
-PÃ·Ã¿Ã¿ÂÂ
-lÃ·Ã¿Ã¿9Â
-PÃ·Ã¿Ã¿Ã©Â¶ÃŸÃ¿Ã¿ÂE
-ÂPÂBHÂ
-ÃÂBxÂÂ¶@ÂÂÃÂFCÃ©ÃÃŸÃ¿Ã¿Â$ÃšÂÃÂÃÃ«Ã©Ã¿Â
-LÃ·Ã¿Ã¿ÂÂhÃ·Ã¿Ã¿9ÂLÃ·Ã¿Ã¿Ã©HÃŸÃ¿Ã¿ÂÂTÃ·Ã¿Ã¿1Ã¶ÂÂµHÃ·Ã¿Ã¿Â
-Ãt9ÂUÂÂ$ÃšÂÂ
-HÃ·Ã¿Ã¿ÂÂTÃ·Ã¿Ã¿ÂÃ¬ÂÂD$ÂÂ
-HÃ·Ã¿Ã¿Â$ÃšÂÂ
-@Ã·Ã¿Ã¿ÂÃ¬ÂÂXÃ·Ã¿Ã¿1Ã¶ÂÂD$ÂMÂÂ$ÃšÂÂ
-DÃ·Ã¿Ã¿ÂÃ¬1ÃÂT$ÂÂ
-ÃÃœÃ¿Ã¿Â¹ÂL$Â$Ãš;ÂµdÃ·Ã¿Ã¿s#ÂÂ\Ã·Ã¿Ã¿ÂÂÃÂ¶ÂFÂÃ;Â
-dÃ·Ã¿Ã¿fÂÂUÃÃœÃ¿Ã¿rÃ£1ÃÂÂ
-LÃ·Ã¿Ã¿ÂÂ
-hÃ·Ã¿Ã¿9Â
-LÃ·Ã¿Ã¿Â
-+Ã»Ã¿Ã¿ÂU
-Â$Ãš1ÃÂÂlÃ·Ã¿Ã¿ÂÂ
-PÃ·Ã¿Ã¿9ÂPÃ·Ã¿Ã¿ÂÃÂU
-ÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÃÂM
-ÂAÂŸ@ÂAÂCÃ¿=ÃŸÂÂ£ÃŒÃ¿Ã¿Â·Â]ÃÃœÃ¿Ã¿fÂ
-ÃÂÂÃŒÃ¿Ã¿ÂÂÂÃ·Ã¿Ã¿Â·ÃÂDÂÃŒÂD$
-ÂÂLÃ·Ã¿Ã¿ÂL$ÂÂ
-PÃ·Ã¿Ã¿ÂD$ÂUÂÂ$ÃšÂÂµHÃ·Ã¿Ã¿ÂÃ¬Â
-Ã¶t;Â·Â]ÃÃœÃ¿Ã¿ÂÂ|Ã·Ã¿Ã¿ÂDÂÃŒÂD$
-ÂÂ
-LÃ·Ã¿Ã¿ÂD$ÂÂPÃ·Ã¿Ã¿ÂT$ÂÂHÃ·Ã¿Ã¿Â
-$ÃšÂÃ¬Ã¿Â
-PÃ·Ã¿Ã¿ÂÂ
-lÃ·Ã¿Ã¿9Â
-PÃ·Ã¿Ã¿Â(Ã¿Ã¿Ã¿Ã¿Â
-LÃ·Ã¿Ã¿ÂÂhÃ·Ã¿Ã¿9ÂLÃ·Ã¿Ã¿Ã©ÃŠÃŸÃ¿Ã¿ÂE
-ÂPÂBHÂ
-ÃÂBÂÃ§ÂÂ¶@ÂÂÃÃ©Ã¿Ã¿Ã¿ÂÂ
-tÃ·Ã¿Ã¿Â$ÃšÃ©TÃ»Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿ÂD$ÂM
-Â
-$ÃšÃ©QÃºÃ¿Ã¿1ÃÂÂ
-ÃÃ¹Ã¿Ã¿Â¹ÂL$1Ã¶ÂT$Â$Ãš;ÂµdÃ·Ã¿Ã¿ÂÂÂÂ\Ã·Ã¿Ã¿Ã«ÂÂÃÂ¶PÂFÂÃ;Â
-dÃ·Ã¿Ã¿fÂQstÂÂŸÂÂÂ
-ÃÃ¹Ã¿Ã¿ÂÂ
-<Ã·Ã¿Ã¿Â
-ÃuÃÃ$ÂžÂD$ÃšÂÃÂÂ
-<Ã·Ã¿Ã¿Â
-ÃÂÂÂ
-ÃÃ¹Ã¿Ã¿uÂš1ÃÃ«
-CÂÃ»Ã¿ÂÂÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«ÃÂUÃÂ$ÃšÃ©ÂÃ¹Ã¿Ã¿1ÃÂÂ
-LÃ·Ã¿Ã¿ÂÂhÃ·Ã¿Ã¿9ÂLÃ·Ã¿Ã¿ÂÃ¡ÂM
-Â
-$Ãš1ÃÂÂ
-PÃ·Ã¿Ã¿ÂÂ
-lÃ·Ã¿Ã¿9Â
-PÃ·Ã¿Ã¿ÂXÂU
-ÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂIÂM
-ÂAÂŸ0@ÂAÂFÃ¿=ÃŸÂÃ¿ÂU
-ÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂ8ÂM
-ÂAÂŸ@ÂAÂCÃ¿=ÃŸÂxÂÂÂµÃÃ¹Ã¿Ã¿Â
-ÃÂifÂ<XÂ^ÂÂXÃ·Ã¿Ã¿ÂÂD$ÂMÂÂ$ÃšÂÂÂµÃÃ¹Ã¿Ã¿ÂÃ¬ÂÂÂÃ·Ã¿Ã¿Â·XÂDÂÃŒÂD$
-ÂÂLÃ·Ã¿Ã¿ÂL$ÂÂ
-PÃ·Ã¿Ã¿ÂD$ÂUÂÂ$ÃšÂÂ
-TÃ·Ã¿Ã¿ÂÃ¬Â
-ÃtYÂÂTÃ·Ã¿Ã¿ÂÂD$ÂUÂÂ$ÃšÂÂÂµÃÃ¹Ã¿Ã¿ÂÃ¬ÂÂ|Ã·Ã¿Ã¿Â·XÂDÂÃŒÂD$
-ÂÂ
-LÃ·Ã¿Ã¿ÂD$ÂÂPÃ·Ã¿Ã¿ÂT$ÂMÂÂ$ÃšÂÃ¬Ã¿Â
-PÃ·Ã¿Ã¿ÂÂ
-lÃ·Ã¿Ã¿9Â
-PÃ·Ã¿Ã¿ÂÂšÃŸÃ¿Ã¿Ã¿Â
-LÃ·Ã¿Ã¿Ã©fÃŸÃ¿Ã¿ÂE
-ÂPÂBHÂ
-ÃÂBÂÂÂÂ¶@ÂÂÃÃ©Â ÃŸÃ¿Ã¿ÂE
-ÂPÂBHÂ
-ÃÂBÂ}ÂÂ¶@ÂÂÃÃ©Â±ÃŸÃ¿Ã¿Â$ÃšÂÃÂÃÃ©+ÃŒÃ¿Ã¿1ÃÃ«
-CÂÃ»Ã¿Â(Ã·Ã¿Ã¿ÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«Ã1ÃÃ«
-CÂÃ»Ã¿ÂÂ¥ÃžÃ¿Ã¿ÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«ÃÂ$ÃšÂÃÂÃÃ©ÃŸÃ¿Ã¿Â$ÃšÂÃÂÃÃ©2ÃŸÃ¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Ã©ÃÃ¶Ã¿Ã¿1ÃÃ«ÂÂŽ&CÂÃ»Ã¿ÂLÃžÃ¿Ã¿ÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂNone$010Â/Âš.Ã¢Ã*
-h
-Â,Â+ÂŠ,Âµ-Z$Â #Ã¡"#Â,Â -	&3	&S	&s	&$
-+)6
-+)S
-+)e
-+)e
-)p
-)ÃŠ
-
-
-,
-'$
-,0
-+D
-%d
-%Â
-)Âª
-)~
-,Â
--(!Â Ã±
-&>&]&|&<Â¶Ã#"7#m"Â
-Â·,Ã'Ã,Ã§+Ãœ
-2ÂŸ)Ã)ÃŒ))[h%u%Â)Â)Â)Â³ÃŒ	1
-
-D#Uo#Â)Â)-)Â '*\#Â"Â³#Ã€"*1fÂ#Â­#Ã#Âµ"Ãº"^)xÂÃµ,
-)9
-
-c
-
-#W
-"}
-#Âº
-"0
-1]
-)Â
-)Â
-1Â
-1Ã
-)ÃŒ(.fileÃŸÃ¿gcreate.c ` Ã )Â 7Ã° C QÂ d  ÂÃ
- .textÃ¢
-o.data.bss.rdataÂ Â€ Â¹ Ã
- _memset Ã Ãª Ãœ  # 3 E P ` p } Â Â Âª Â¿ Ã _free _strcmp Ã Ã­ Ãœ 
-  _tolower __filbuf '_xpmstrcasecmp_AllocColor_SetColor_CreateColors_FreeColors_CreateXImage_MSWPutImagePixels_XpmCreateImageFromXpmImage_xpmParseDataAndCreate_xpmHashSlot_boundCheckingCalloc_DeleteDC@4_xpmNextString_CreateCompatibleDC@4_xpmFreeColorTable_xpmParseExtensions_xpmHashTableFree_xpmParseColors_xpmHashTableInit_xpmGetCmt_xpmParseValues_xpmParseHeader_SetPixel@16_SelectObject@8_XCreateImage_XDestroyImage_boundCheckingMalloc_XDefaultDepth_XFreeColors_XDefaultColormap_XDefaultScreen_XDefaultVisual_XAllocColor_XParseColor
-+CrIFrBuf.o/     1345987850  0     0     100666  1275      `
-+LÂ.textÂÂ
-
- P`.data@0Ã.bssÂ0ÃUÂÃ¥]ÃÂBÃBÃÂt&ÂÂŒ'UÂÃ¥ÂEÃÂÃ¬ÂšÂ]ÃŽÂÂxÃœÃ¿Ã¿ÂuÃžÂuÂšÂ}ÃŒÂ}Â$ÃšÂ4$ÃšÂE
-ÂÃÃšÂ¥Ã¿Ã¿Ã¿Â
-Ã¿Â}Â<$ÃšÂ|$Â4$ÃšÂ|$ÂEÃÂt$ÂD$ÂEÂD$
-ÂEÂ\$ÂD$ÂEÂ$ÃšÂ
-ÃÂÃxÂt$ÂEÃÂD$Â<$ÃšÂ4$ÃšÂEÃÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃfÂ1Ã1ÃÂD$ÂEÃÂT$ÂD$ÂEÂD$
-ÂEÂ\$ÂD$ÂEÂ$ÃšÂÃÂEÃÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂt&UÂÃ¥ÂÃ¬XÂuÃžÂuÂ}ÃŒÂ}
-Â]ÃŽÂÂÂžÃœÃ¿Ã¿Â<$ÃšÂ4$ÃšÂEÂÃÃšÂÃŸÃ¿Ã¿Ât$Â|$Â
-$ÃšÂ]ÃŽÂuÃžÂ}ÃŒÂÃ¬]ÃÂÂÂÂÂÂÂÂÂÂÂEMgsÂÂžÃÃ
-
-
-RZt
-.fileÃŸÃ¿gCrIFrBuf.c   *0 .textÂ
-
-.data.bssG U f v Â Â Â¯ Ã Ã Ã£_OpenBuffer_XpmCreateImageFromBuffer_XpmCreateXpmImageFromBuffer_xpmParseData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage
-+CrIFrDat.o/     1345987850  0     0     100666  1318      `
-+LÃ.textÃÂL
- P`.data@0Ã.bssÂ0ÃU1ÃÂÃ¥ÂBÂ]ÃÂB1ÃÂÂ1ÃÃB
-ÃBÂÂÃÂ
-ÃÂ
-ÂÂ ÃÂÃ¶ÂÂŒ'UÂÃ¥ÂEÃÂÃ¬ÂšÂ]ÃŽÂÂxÃœÃ¿Ã¿ÂuÃžÂuÂšÂ}ÃŒÂ}Â$ÃšÂ4$ÃšÂE
-ÂÃÃšuÃ¿Ã¿Ã¿Â
-Ã¿Â}Â<$ÃšÂ|$Â4$ÃšÂ|$ÂEÃÂt$ÂD$ÂEÂD$
-ÂEÂ\$ÂD$ÂEÂ$ÃšÂ
-ÃÂÃxÂt$ÂEÃÂD$Â<$ÃšÂ4$ÃšÂEÃÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃfÂ1ÃÂD$1ÃÂD$ÂEÃÂD$ÂEÂD$
-ÂEÂ\$ÂD$ÂEÂ$ÃšÂÃÂEÃÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂt&UÂÃ¥ÂÃ¬XÂuÃžÂuÂ}ÃŒÂ}
-Â]ÃŽÂÂÂžÃœÃ¿Ã¿Â<$ÃšÂ4$ÃšÂEÂÃÃšhÃŸÃ¿Ã¿Ât$Â|$Â
-$ÃšÂ]ÃŽÂuÃžÂ}ÃŒÂÃ¬]ÃÂÂÂÂÂÂÂÂÂÂÂu}ÂÂ£ÃÃšÃ°Ã»
-<I
-ÂÂÂ€
-.fileÃŸÃ¿gCrIFrDat.c P '` .textÂµ
-.data.bssB P a q Â Â Âª Âœ Ã Ã_OpenArray_XpmCreateImageFromData_XpmCreateXpmImageFromData_xpmParseData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImagedata.o/         1345987851  0     0     100666  5560      `
-+LÂž.text0ÂŽÃ7 P`.dataÂÃ€ÃŠ@`Ã.bssÂ0Ã.rdata\d@0@UÂÃ¥WVSÂÃ¬
-Â8ÂEÃ°ÂÂªÂEÃ°ÂMÃ°ÂÂÂqÂÃÂÃÂMÃ€ÂMÃ°ÃEÃ¬Â¶ÂAÂUÃšÂÂFHÂ
-ÃÂFxYÂÂ¶@ÂGÂÃÂÃ¿EÃšÃ¿EÃ¬ÂEÃšÂ¶ÂŸÃ9ÃuÂÃÂÃ1ÃÂÃ»Ã¿ÂÃÂ
-ÃuÃÂÃt0Â]Ã¬Â
-ÃtÂt$ÂŸOÂ$ÃšKuÃ­ÂÃ
-1Ã[^_]ÃÂ4$ÃšÂÃÃ«Â£ÂUÃ°ÂZÂ}Ã€ÃEÃ¬ÂMÃ°ÂÂÂMÃšÂ¶8Ã«
-GÂÂUÃšÃ¿EÃ¬:ÂÃ1ÃÂÃ»Ã¿ÂÃÂ
-Ãt3ÂFHÂ
-ÃÂFÂ)ÂÂ¶@ÂÂ}Ã¬Ã¿ÂÃuÃÃEÃ¬Â}Ã€Ã«ÂžÂÂt&ÂEÃ¬ÂMÃ°ÂAÃ«+ÂÂt&GÂÃ¿EÃšÃ¿EÃ¬ÂEÃšÂ¶ÂŸÃ9ÃuZÂÃÂÃBÂÃÂ¶ÃÂ
-ÃtJÂFHÂ
-ÃÂFÂÂ±ÂÂ¶@ÂÂ}Ã¬Ã¿ÂÃuÂžÃEÃ¬Â}Ã€GÂÃ¿EÃšÃ¿EÃ¬ÂEÃšÂ¶ÂŸÃ9ÃtÂ®ÂÂÂŽ&ÂÃÂFÂºÂ
-ÃÂ
-
-Ã¿Ã¿Ã¿ÂÃ
-1Ã[^_]ÃÂÃÂMÃ°1Ã¿ÂEÃ€ÂÃÂEÃ°ÂÂÂÃÂ¶ÂAÂvÂEÃ°CFÂMÃ°GÂPÂBÂAÂ¶
-+Â
-Â¶8ÃuÂÃuÃÂÃt.ÂEÃ°)xÂÃ
-1Ã[^_]ÃÂ4$ÃšÂÃÃ©HÃ¿Ã¿Ã¿Â4$ÃšÂÃÃ©ÃÃŸÃ¿Ã¿ÂUÃ°1Ã¿ÂJÂ]Ã€ÂEÃ°ÂÂ°Â¶8ÂÃ1ÃÂÃÂÃÃ«ÂÂŽ&CGÂ
-:ÂÃ1ÃÂÃÂÃÂ
-Ãt
-ÂMÃ°ÂÃ¿Ã¿ÂQÂBÂAÂ¶
-+uÃÂ]Ã€1Ã¿Ã«ÃÂEÃ°ÂxÃ«ÂÂ¶CFGÂ
-Â¶8Ãu,ÂÃt(ÂMÃ°ÂÃ¿Ã¿ÂQÂBÂAÂ¶
-+uÃÂ]Ã€F1Ã¿GCÂ
-Â¶8ÃtÃÂÃt+ÂºÂ
-ÃÂ
-VÃ¿Ã¿Ã¿Ã©Â¬ÃœÃ¿Ã¿Ât$ÂŸÂ$ÃšÂÃ
-1Ã[^_]ÃÂEÃ°Ã¿HÃ©ÂÃœÃ¿Ã¿ÂÂŽ&ÂÂŒ'UÂÃ¥VSÂÃ¬ÂuÂÂ
-ÃuÂV
-ÂFBÂV
-Â
-ÂÂNÂÃ1Ã[^]ÃÂÂ¶ÂÃžÂÃ®ÂÂŸ
-Â^t0Ât&ÂÂŒ'ÂCHÂ
-ÃÂCÂLÂÂ¶@ÂÂŸÂ
-9ÃtBuÃÂÂŸ
-t^fÂÂCHÂ
-ÃÂCxEÂÂ¶@ÂÂŸÂ
-9ÃtÂÂÃºÃ¿ÂzÃ¿Ã¿Ã¿ÂÂÂ
-ÃtÃÂŸ9ÃuÃÂÃ°Ãš!ÃŒÃ¿Ã¿ÂCHÂ
-ÃÂCyÃÂÂ¶Â
-$ÃšÂÃÃ«Â·ÂÂÂ
-ÃÂ7Ã¿Ã¿Ã¿Ã«$Ât&ÂÂ¶@ÂÂÂÂŸ9ÃÂ
-Â±ÂÃ°ÃšÃÃ»Ã¿Ã¿ÂCHÂ
-ÃÂCyÃÂ
-$ÃšÂÃÃ«ÃÂ¶Â
-ÂÃtÂNÂt&ÂÂŒ'ÂÃAÂNÂ¶ÂÃt8ÃuÃ¯Â¶Â
-ÂÃtoÂFÂHÂNÂ¶ÂÃÂÂ±ÃŸÃ¿Ã¿8ÃÃ«ÂÃAÂNÂ¶ÂÃÂÂÃŸÃ¿Ã¿8Â
-ÂÂÃŸÃ¿Ã¿ÂÂÂ
-ÃtÃ8uÃÂÃ°Ãš:Ã»Ã¿Ã¿ÂNÃ«ÃÂ
-$ÃšÂÃÃ©Â­ÃŸÃ¿Ã¿Â\$Â$ÃšÃ©VÃŸÃ¿Ã¿ÂÂÂ
-ÃÂHÃŸÃ¿Ã¿ÂVÂJÂNÂ¶8t
-ÂAÃ¿ÂFÃ©-ÃŸÃ¿Ã¿ÂÃ°ÃšÃ¥ÃºÃ¿Ã¿ÂFÂÂÂHÂNÂ¶8tÃ£Ã«ÃÂÂ¶ÂÂŒ'UÂÃ¥WVSÂÃ¬
-ÂUÃEÃ°ÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšt_ÂMÂQÃ«1fÂÂ¡ÂÂ·XÂÃ Â
-ÃÂbÂMÂŸÂ
-9ÃÂPÂEBÂPÂŸÂ¡Â8tÃÂ
-$Â¿Â|$ÃšÂMÂQÃ«Â¹ÂUÂrÃ«#ÂvÂ¡ÂÂ·xÂÃ Â
-Ãt^ÂMÂŸÂ
-9ÃžtPÂFHÂ
-ÃÂFÂbÂÂ¶8@ÂÂÃ¿Ã¿ÂÃ»t2Â¡Â8tÂžÂ<$Â¹ÂL$ÃšÃ«Â³Â4$ÃšÂÃÂÃÂÃ¶ÂÂŒ'Â¡Â8Â
-Ã£Â¡ÂÂ·XÂÃ Â
-ÃÂ
-ÃŠÂUÂŸÂ
-9ÃÂÃ1ÃÂÃ»Ã¿ÂÃÂ
-ÃÂÃÂM9MÃ°ÂÂ»ÂE
-Â@ÂE
-ÂFÃ¿EÃ°HÂ
-ÃÂFxÂ
-ÂÂ¶@ÂÂÃÃ«ÂÂ¡ÂÂ·XÂÃ Â
-ÃuYÂUÂMÂŸÂ
-9ÃÂÃ1Ã9MÃ°ÂÃÂ
-Ãt;ÂEÂPÂŸBÂE
-ÂMÂQÂ@Ã¿EÃ°ÂE
-Â¡Â8tÂªÂ
-$ÂŸÂt$ÃšÂ
-ÃtÂ§Ã¿MÃ°ÂEÃ¿HÂEÃ°ÂÃ
-[^_]ÃÂ
-$ÂºÂT$ÃšÂ
-ÃÂÃ¿Ã¿Ã¿Ât$Â
-$ÃšÂEÃ°ÂÃ
-[^_]ÃÂ4$ÃšÂÃÃ©ÂÃŸÃ¿Ã¿UÂžÂÃ¥SÂÃ¬ÂÂÃžÃœÃ¿Ã¿ÂD$ÂEÂ\$Â$ÃšÂšÃœÃ¿Ã¿ÂD$ÂU
-Â
-$ÂT$ÃšÂÃ[]ÃÂÂ¶ÂÂ¿UÂÃ¥W1Ã¿V1Ã¶SÂÃ¬<ÂUÂÂœÃ ÃœÃ¿Ã¿ÂÂµÃÃœÃ¿Ã¿ÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÂªÂEÂpÂ
-Ã¶ÂÃ²ÂÂÂŸ
-Â
-Ãt*ÂŸÂ
-9ÃtÂFÂÂt&ÂÃÂEÂPÂBÂŸXÃ¿Â
-Ãt9ÃuÃ©)Ã²BÂÂÃ ÃœÃ¿Ã¿Â$ÃšÂÂ
-ÃÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Â
-ÃÂEÂt$ÂÂÃ ÃœÃ¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿ÂT$Â$ÃšÂUÂ
-+Â
-ÃÂÂÂ
-ÃÃœÃ¿Ã¿ÂÂÃ ÃœÃ¿Ã¿ÃDÃ¿Ã©Ã®ÂEÂpÂFHÂ
-ÃÂFÂÃŒÂÂ¶@ÂÂÃºÃ¿ÂÃÂžÃŸÃ¿Ã¿Ã¿ÂÃÃ$1ÃÂÂœÃšÃœÃ¿Ã¿ÂÂÃ€ÃœÃ¿Ã¿ÃšÂÂ
-ÃÃœÃ¿Ã¿ÂUÂŸÂ
-9ÃÃ«PÂÂt&ÂÂœÃ€ÃœÃ¿Ã¿ÂÂ°ÂÂFGÃ¿Â
-Ã€ÃœÃ¿Ã¿HÂ
-ÃÂFÂ(ÂÂ¶@ÂÂÃÂUÂŸÂ
-9ÃÂÃ1ÃÂÃ»Ã¿ÂÃÂ
-ÃuÂ³ÂÃ»Ã¿ÂÂ
-ÂÂÃ ÃœÃ¿Ã¿ÂÃ€ÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿Â
-Ã±ÂÂ
-ÃÃœÃ¿Ã¿ÃÂžÂÂ
-Ã ÃœÃ¿Ã¿Ât$Â
-$ÃšÂE
-ÂÂÃÃœÃ¿Ã¿ÂÂEÂÂÃ ÃœÃ¿Ã¿Â1ÃÂÃ<[^_]ÃÂ4$ÃšÂÃÃ©ÃœÃŸÃ¿Ã¿ÂÂ
-Ã ÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿ÂD$Â$ÃšÂ
-ÃÂÃÂÃÂÂ
-ÃÃœÃ¿Ã¿ÂÂ
-Ã ÃœÃ¿Ã¿ÃÂ<$ÂžÂÂœÃšÃœÃ¿Ã¿ÂD$ÂÂ
-ÃšÃœÃ¿Ã¿ÂD$ÃšÂÂÃÃœÃ¿Ã¿1ÃÂÂ
-Ã€ÃœÃ¿Ã¿ÂÂÃ ÃœÃ¿Ã¿ÂÂFGÃ¿Â
-Ã€ÃœÃ¿Ã¿HÂ
-ÃÂFÂÃ ÃŸÃ¿Ã¿ÂÂÂŽ&Â4$ÃšÂÃÃ©ÃÃŸÃ¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿BÂÂÃÃœÃ¿Ã¿ÂT$Â$ÃšÂ
-ÃÂÃtEÂÂ
-ÃÃœÃ¿Ã¿ÂÂ
-Ã ÃœÃ¿Ã¿ÂÂÃšÃœÃ¿Ã¿ÂT$ÃÂÂ
-Ã€ÃœÃ¿Ã¿Â<$ÂD$ÃšÂÂ
-ÃÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿ÃÂÂ
-ÃÃœÃ¿Ã¿Ã©Â¹ÃŸÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿Â$ÃšÂžÃœÃ¿Ã¿Ã¿Ã©ÃÃŸÃ¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿Â$ÃšÂžÃŸÃ¿Ã¿Ã¿Ã©Â³ÃŸÃ¿Ã¿ÂÂ¶ÂÂŒ'UÂÃ¥ÂÃ¬Â]ÃžÂ]ÂuÃŒÂu
-ÂÂ
-ÃtÂCÂ
-ÃuÃ1ÃÂ]ÃžÂuÃŒÂÃ¬]Ã@Â$ÃšÂÂSÂ$ÂT$ÂSÂT$ÃšÂSÂÃ1ÃÃCÂ]ÃžÂuÃŒÂÃ¬]ÃfÂU1ÃÂÃ¥ÂÃ¬8Â]ÃŽÂ]ÂuÃžÂ}ÃŒÂ;ÂÂ
-Ã€ÃœÃ¿Ã¿Â
-Ã¿u1ÃÂ]ÃŽÂuÃžÂ}ÃŒÂÃ¬]ÃÃÂ
-1Ã1Ã¶ÃÂ
-
-+ÂºÂÂ
-ÃšÃœÃ¿Ã¿ÂÂ³ÂÂÂT$ÂD$Â
-$ÃšeÃ¹Ã¿Ã¿ÂÃžtVÂ
-$ÂžÂÂµÃšÃœÃ¿Ã¿ÂD$Ât$ÃšEÃ¹Ã¿Ã¿ÂÃžÂZÂÃžuÃŒÂžAÂ¹ÂÃÂÂœÃšÃœÃ¿Ã¿Ã³ÂŠÂsÂ]ÃŽÂžÃŸÃ¿Ã¿Ã¿ÂuÃžÂ}ÃŒÂÃ¬]ÃÃŒÂžFÂ¹ÂÃÂÂœÃšÃœÃ¿Ã¿Ã³ÂŠuÂÂ
-$ÂžÂD$ÂÂ
-ÃšÃœÃ¿Ã¿ÂD$ÃšÃÃžÃ¿Ã¿ÂÃÂ
-Ã¿ÂžÃŸÃ¿Ã¿Ã¿Â
-Ã¿Ã¿Ã¿1ÃÂÂÃšÃœÃ¿Ã¿ÂÂ/ÃšÃœÃ¿Ã¿Âž_Â$ÂD$ÃšÂ
-ÃÂÃtÂÂÂÃšÃœÃ¿Ã¿)Ã)ÃÂÃ¿ÂÃž~ÂžÃŒÂŸN9ÃÂÃÂÃÃ³ÂŠÂ
-]Ã¿Ã¿Ã¿ÂžÂÂ ÂžÂÂ
-Ã€ÃœÃ¿Ã¿ÂvÂÂœÃ€ÃœÃ¿Ã¿ÂžÃŸÃ¿Ã¿Ã¿ÃÃ§ÂÂÂ
-ÃÂÂÃŸÃ¿Ã¿ÂÂ
-Ã€ÃœÃ¿Ã¿Â
-ÃÂÃ®ÂÂÂÂÂÂÂÂÂÂ Â
-ÃÂ
-Â»Â¶Â
-ÃÂ
-ÂÂ
-Â
-$ÃšÃÃµÃ¿Ã¿Â¶Â
-ÂÂ
-Ã©5ÃŸÃ¿Ã¿ÃŒÂŸVÂÂœÃšÃœÃ¿Ã¿Â¹Ã³ÂŠÂÃÂÃÂ¿ÂÂœÃ€ÃœÃ¿Ã¿8ÃÂ
-ÂÃŸÃ¿Ã¿1ÃÂÂ Ã©IÃ¿Ã¿Ã¿Â
-$ÂÂ
-ÃšÃœÃ¿Ã¿ÂŸÂt$ÂD$ÃšÂÃ·Ã¿Ã¿ÂÃÃ« Â|$ÂÂÃšÃœÃ¿Ã¿ÂT$Â$ÃšÂ
-ÃtÂºÃ¿Â
-Ã€ÃœÃ¿Ã¿ÂÂ
-Ã€ÃœÃ¿Ã¿ÃÃ ÂÂÂ
-ÃuÃÃ«ÂÂ
-$Ãš-ÃµÃ¿Ã¿Ã©ÂÃœÃ¿Ã¿Â¡ÂÂÂ¡ÂÂÂ
-$Ãš
-+ÃµÃ¿Ã¿Â¶
-ÂÂ
-Â¶
-Ã©$Ã¿Ã¿Ã¿Â
-+
-+""
-
-&*/""18=!
-+C/**/,
-+static char *[] = {
-+};
-+Lisp;(setq  '(
-+))
-+XPM2#define_formatXPMÂ
-Âš
-
-)
-Ã¹
-ÃŽ
-?
-Ã
-Ã¢
-qÂ£Â¹
-Ã%
-/
-AOÂ³Ã¿
->
-R
-e
-Â§DyÃ£Â	
-Âµ	
-Ã	
-+T
-+
-t
-+Â€
-+Ã
-+Ã¥
-+6
-N
-
-
-8
-Â
-Âµ
-Ã°
-
-
-
-
-
-
-3
-
-O
-
-`
-Ã
-Ã¡
-
-Ã¹
-
-
-
-&
-
- $(048<@DHPTX\.fileÃŸÃ¿gdata.c   !@ .p 9Ã G
- Rp
- .text/7.dataÂ.bss.rdataZbp_strrchr _strncmp _free Â _strncpy Â© ÂŸ _ungetc Ã __filbuf Ã_ParseComment_xpmNextString_xpmNextWord_xpmNextUI_xpmGetString_xpmGetCmt_xpmParseHeader_xpmDataTypes__imp___pctype__imp____mb_cur_max_boundCheckingRealloc_boundCheckingMalloc_xpmatoui__isctypehashtab.o/      1345987851  0     0     100666  1211      `
-+LB.textpÂÃŒ P`.data@0Ã.bssÂ0ÃUÂÃ¥WVSÂÃ¬
-1ÃÂ}ÂM
-Âw
-Ã«ÂÃÂŸÃÃÃ )ÃAÂ
-Â¶ÂÃuÃ«Â?ÂÃ1ÃÃ·Ã·Â
-ÂÂÂ
-ÃtDÂU
-Â¶ÂUÃ³Ã«ÂÃ«9Ã³sÂ\ÂŸÃŒÂÂ
-Ãt(Â¶UÃ³Â8uÃ¥Â$ÂU
-ÂT$ÃšÂ
-ÃuÃÂt&ÂÂŒ'ÂÃ
-ÂÃ[^_]ÃÂÂ¶UÂÃ¥ÂÃ¬(ÂuÃžÂu
-Â}ÃŒÂ}Â]ÃŽÂt$Â<$ÃšOÃ¿Ã¿Ã¿ÂÃÂÂ
-Ãt1ÃÂ]ÃŽÂÃÂuÃžÂ}ÃŒÂÃ¬]ÃÂÂ¶Ã$ÃšÂ
-ÃÂÃtÂ0ÂEÂBÂÂ
-ÃÂ¹ÃœÃ¿Ã¿Ã¿tÃÂG;G}@ÂGÃ«Â¶ÂÂºVUUUÂEÃ¬ÂMÃ¬ÂG
-Â]Ã¬ÃÂEÃ°ÂÃÂÃÃ£Ã·ÃªÂÃÃÃž)ÃÂWÂ
-$ÃšÂ
-ÃÂ¹ÃœÃ¿Ã¿Ã¿ÂxÃ¿Ã¿Ã¿ÂG
-ÃÃ«ÂÂ¶ÂÃ«Ã9ÃwÃ³1Ã¶Â]Ã°;uÃ¬}ÂÃ¶ÂÂŒ'ÂÂ
-Ãu
-FÂÃ;uÃ¬|Ã±ÂEÃ°Â$ÃšÃ¿GÃ©'Ã¿Ã¿Ã¿ÂÂ<$FÂD$Ãš_ÃŸÃ¿Ã¿ÂÂÃÂÃ«ÃÂÂ¶UÂÃ¥SÂÃ¬Â]ÃÃCUÃCÃ$ÃšÂÃÂ
-ÃÂžÃœÃ¿Ã¿Ã¿t
-ÂÂÂÃ«
-Ât&ÂÃšÃ9ÃwÃ³ÂS
-1ÃZ[]ÃÂvÂÂŒ'UÂÃ¥WVSÂÃ¬
-Â}Âw
-Â
-Ã¶t<ÂÂ
-ÂÂÂÂŽ&9Ã³v
-ÂÃ«ÂÂ
-ÃtÃ³Â$Ãš9Ã³wÃ«ÂÂŽ&Â4$ÃšÃG
-ÂÃ
-[^_]ÃÂÂÂÂÂÂÂÂÂmÃ2Â
-ÃA
-T
-.fileÃŸÃ¿ghashtab.c Â  Â° 2 .textg.data.bss_free _strcmp D Y_xpmHashSlot_xpmHashIntern_xpmHashTableInit_xpmHashTableFree_boundCheckingMalloc
-+Image.o/        1345987851  0     0     100666  579       `
-+L 
-.textÂÂ
- P`.data@0Ã.bssÂ0ÃUÂÃ¥ÂEÃ@
-Ã@Ã@]ÃÂvUÂÃ¥SÂÃ¬Â]ÂSÂ
-ÃuÂCÂ
-Ãu(ÃCÂÃ[]ÃÂC
-Â$ÂD$ÃšÂCÂ
-ÃtÃÂÂt&Â$ÃšÃCÂÃ[]ÃÂÂÂÂÂÂÂÂÂÂÂP
-d
-.fileÃŸÃ¿gImage.c   .textu.data.bss_free & 9_xpmInitXpmImage_XpmFreeXpmImage_xpmFreeColorTable
-+Info.o/         1345987851  0     0     100666  901       `
-+L$.textpÂÃŒ P`.data@0Ã.bssÂ0ÃUÂÃ¥ÂEÂ
-Ãt#Ã@Ã@Ã@
-Ã@
-Ã@]ÃÂUÂÃ¥SÂÃ¬Â]Â
-ÃtÂÃ¶ÃuÃ¶ÃtÂCÂ
-ÃudÃÂÃ[]ÃÂvÂCÂ
-Ãu=ÂCÂ
-Ãu%ÂC
-Â
-Ãu
-ÂÃ«ÃÂÂŽ&Â$ÃšÃC
-ÂÃ«Â²Â$ÃšÃCÃ«ÃÂ$ÃšÃCÃ«Â²ÂD$ÂC
-Â$ÃšÃC
-ÃCÃ©zÃ¿Ã¿Ã¿ÂÃ¶ÂÂŒ'UÂÃ¥ÂUÂM
-ÃÂÃ¶ÃtÃÂÃ¶ÃtÂ
-+]ÃÂÂt&UÂÃ¥ÂUÂM
-ÃÂÃ¶ÃtÃÂÂAHÂBÂALÂBÂAPÂB
-ÂÃ¶ÃtÂ
-+ÂA<ÂB
-ÂA8ÂBÂÂštÂ
-+ÂAÂBÂA
-ÂB]ÃÂÂÂÂÂšÃ
-.fileÃŸÃ¿gInfo.c 0 $Ã  4 .textn.data.bss@ _free S_xpmInitXpmInfo_XpmFreeXpmInfo_xpmSetInfoMask_xpmSetInfo_XpmFreeExtensions
-+misc.o/         1345987852  0     0     100666  1002      `
-+LÂ.textÃÂŽ	 P`.data@0Ã.bssÂ0Ã.rdata|ÂZ@0@UÂÃ¥W1Ã¿V1Ã¶;}
-SÂ]s*ÂÂŽ&ÂÂŒ'Â¶
-ÂÃ,0<	wÂÂ¿ÂŸÃFCÂ|PÃ;u
-rÃ€Â
-Ã¶ÂÃ1Ã;u
-ÂÃ1ÃÂ
-Ãt
-+ÂEÂ¹Â8[ÂÃ^_]ÃUÂžÂÃ¥ÂUÂÃÂÃºw
-Ã¿$ÂdÂžÂ]Ã]Âž Ã]Âž.Ã]Âž:Ã]ÂžIÃ]ÂžWÃÂt&ÂÂŒ'UÂžÃvÂÃ¥]ÃÂÂ¶UÂÃ¥]Ã©ÂÂÂÂÂÂÂInvalid XpmErrorXpmColorFailedXpmColorErrorXpmNoMemoryXpmFileInvalidXpmOpenFailedXpmSuccesszÂÂÂÂÂb
-v
-{
-Â
-Â
-Â
-Â
-Â 
-Ã
-dhlptx.fileÃŸÃ¿gmisc.c ` !Â° _XpmFreeÃ .textÃ	.data.bss.rdata|_free 4_xpmatoui_XpmGetErrorString_XpmLibraryVersionRdFToBuf.o/     1345987852  0     0     100666  914       `
-+LÃŒ.textÃ ÂŽÂ
-+ P`.data@0Ã.bssÂ0Ã.rdataÂ@0@U1ÃÂÃ¥WVSÂÃ¬\ÂE
-ÃÂEÂL$Â$ÃšÂÃÂ
-ÃÂžÃ¿Ã¿Ã¿Ã¿xwÂ
-$ÂEÂžÂD$ÃšÂ
-ÃulÂ
-$ÂºÂT$ÃšÂEÂŽÂ
-ÃtTÂ}ÃÂGÂ$ÃšÂ
-ÃÂÃt^Â|$ÂEÂŽÂ4$ÂD$
-ÂžÂD$ÃšÂÃÂEÂŽÂ$Ãš9Ã»u"Ã7ÂE
-Â01ÃÂÃ\[^_]ÃÂ
-$ÃšÂžÃ¿Ã¿Ã¿Ã¿Ã«Ã©Â4$ÃšÂžÃ¿Ã¿Ã¿Ã¿Ã«ÃÂEÂŽÂ$ÃšÂžÃœÃ¿Ã¿Ã¿Ã«ÃÂÂÂr9E
-+NcÂ
-
-ÂÂ±Ã
-Ã.fileÃŸÃ¿gRdFToBuf.c .textÃ
-+.data.bss.rdata_free _fread _fclose  __fdopen _close __fstat _open ._XpmReadFileToBuffer_boundCheckingMallocRdFToDat.o/     1345987852  0     0     100666  682       `
-+LD.textÂÂ
- P`.data@0Ã.bssÂ0ÃUÂÃ¥ÂÃ¬hÂ}ÃŒÂ}
-Â]ÃŽÂuÃžÂ
-Ã¿ÃEÂštÃÂEÂšÂuÃÂD$Ât$ÂEÂ$ÃšÂ
-ÃÂÃtÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂt$ÂEÂšÂ<$ÂD$ÃšÂ4$ÂÃÃšÂEÂšÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂÂÂÂÂÂÂÂ8
-`
-j
-u
-+.fileÃŸÃ¿gRdFToDat.c .textÂ.data.bss ' 8 S j_XpmReadFileToData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmCreateDataFromXpmImage_XpmReadFileToXpmImageRdFToI.o/       1345987852  0     0     100666  2179      `
-+Lb.text`ÂŽ@
- P`.data@0Ã.bssÂ0Ã.rdata,@0@UÂÃ¥ÂÃ¬HÂ]ÃŽÂ
-ÃÂÃÂuÃžÂ}ÃŒÂÂÃÃœÃ¿Ã¿ÂÃ¿Â$ÃšÂÂ
-ÃÃœÃ¿Ã¿ÂÃž{ÂÂœÃÃœÃ¿Ã¿~+ÃŒÂÂ
-ÃÃœÃ¿Ã¿Â¹ÂDÃœÂÂ
-Ã ÃœÃ¿Ã¿ÂÂœÃ ÃœÃ¿Ã¿ÂžÂÃÃ³ÂŠÂÃÂ
-$ÂžÂD$ÃšÂÂÃÃœÃ¿Ã¿Â
-ÃÂºÃ¿Ã¿Ã¿Ã¿ÂAtÃÂÂµÃÃœÃ¿Ã¿1ÃÃFÂ]ÃŽÂÃÂuÃžÂ}ÃŒÂÃ¬]ÃÃŒÂºÂDÃŸÂÂ
-Ã€ÃœÃ¿Ã¿ÂžÂÂœÃ€ÃœÃ¿Ã¿ÂÃÂÃÃ³ÂŠÂ
-^Ã¿Ã¿Ã¿ÂÂœÃÃœÃ¿Ã¿Âž	ÂŸÃÂ\$ÂÂÃšÃœÃ¿Ã¿ÂD$Â
-$ÃšÂt$Â
-$ÃšÂGÂ
-ÃÂºÃ¿Ã¿Ã¿Ã¿Â
-sÃ¿Ã¿Ã¿Ã«ÂÂ¡ÃÂBÃ©^Ã¿Ã¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿Â¹
-ÃÂ\$ÂÂÃšÃœÃ¿Ã¿ÂL$Â
-$ÃšÂ
-$ÂºÂT$ÃšÂÂÃÃœÃ¿Ã¿ÂBÃ«ÂÂÃ¶ÂÂŒ'UÂÃ¥ÂÃ¬ÂÂÃºtÂÃºt
-ÃÃÂ@;tÃ³Â$ÃšÃÃÂÂŽ&Â@Â$ÃšÃÃÂvUÂÃ¥ÂÃ¬XÂ}ÃŒÂE
-Â}Â]ÃŽÂuÃžÂÂµÂžÃœÃ¿Ã¿Â$ÃšÂ<$ÃšÂEÂÃ²ÃšÃŸÃ¿Ã¿Â
-ÃÂÃtÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂvÂ|$ÂE
-Â4$ÂD$ÃšÂÃÂÃ°ÃšTÃ¿Ã¿Ã¿ÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂÂt&UÂÃ¥ÂEÃÂÃ¬ÂšÂuÃžÂuÂšÂ$Â]ÃŽÂ}ÃŒÂ}ÃšÂ4$ÃšÂE
-ÂÂxÃœÃ¿Ã¿ÃšÂÃœÃ¿Ã¿Â
-ÃÂÃÂ
-Â
-Â
-Ã¿ÂÂÂ<$ÃšÂ|$Â4$ÃšÂ|$ÂEÃÂD$ÂEÂt$ÂD$
-ÂEÂD$ÂÂ
-xÃœÃ¿Ã¿ÂD$ÂEÂ$ÃšÂ
-ÃÂÃxÂt$ÂEÃÂD$Â<$ÃšÂ4$ÃšÂÂ
-xÃœÃ¿Ã¿ÃšÂÃŸÃ¿Ã¿ÂEÃÂ$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]Ã1ÃÂD$1ÃÂD$ÂEÃÂD$ÂEÂD$
-ÂEÂD$ÂÂ
-xÃœÃ¿Ã¿ÂD$ÂEÂ$ÃšÂÃÃ«Â¡ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ.gzr.Zuncompress -c "%s"gunzip -qc "%s"&[
-m
-v
-Â²
-Ã
-Ã£
-Ã¿
-";
-W_
-hÂÂ£Â·Ã¢
-Ãª
-_
-g
-ÂÂÃÃŠÃ®I.fileÃŸÃ¿gRdFToI.c Â  Ã 7@ .textQ
-.data.bss.rdata,K__pclose _fclose __popen _sprintf _strlen W e v Â Â Â¯ Â¿ Ã Ã¢ _fopen Ã³_OpenReadFile_xpmDataClose_XpmReadFileToXpmImage_XpmReadFileToImage__imp___iob_xpmParseData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage
-+rgb.o/          1345987852  0     0     100666  7632      `
-+LÂº.textÃÂŽ P`.data`ÂÂÃª@`Ã.bssÂ0Ã.rdata
-Ã€	@0@UÂ¡XÂÃ¥]ÃÂÂ¶U1ÃÂÃ¥WVSÂ
-XÂuÂ}9Ã}ÂÂÂŽ&ÂÃÂ¶Ã9Ã°tA9Ã|Ã­[1Ã^_]ÃÂÂ¶ÂÃÃÃšÂ¶Ã9ÃžuÃ¢ÃÃªÂ¶Ã;EuÃ[ÂÃ^_]ÃÂÂ¶ÂÂŒ'UÂÃ¥WVSÂÃ¬
-ÂEÂ$ÃšÂEÃ°ÂÃ¶ÂÂŒ'Âº ÂT$ÂEÃ°Â$ÃšÂ
-ÃÂÃtÂ;ÂvtÃÂ¶CÂCÂÃÃ«Ã³Â]Ã°Â¶ÂÃtÂŸÃÂ$ÃšÂCÂ¶ÂÃuÃ«ÂžÂD$ÂUÃ°Â$ÃšÂ
-ÃtÃ@aÂ5X1Ã¿NÃ«Â{9Ã·0Â7ÂÃÃÃšÂ
-ÃÃ»ÂÃÂD$ÂMÃ°Â
-$ÃšÂ
-Ãt<}ÃÂsÃ¿9Ã·~ÃÂE
-ÂUÂMÃÃ¿ÂEÃ°ÃÃÂ$ÃšÂÃ
-Âž[^_]ÃÂÃÂM
-Â¶ÃÂÂMÂÃÃÃªÂ¶ÃÃÃšÂÂUÂMÃ°Â¶ÃÂÂ
-$ÃšÂÃ
-Âž[^_]ÃÂt&UÂÃ¥]ÃÂÂÂÂÂÂÂÂÂÂÂÃ°ÃžÃ¿
-+ÃºÃ«Ã2Â¿Ã"Ã°Ã¿Ã¿(ÃµÃµÃ.Ã¿Ã€Ã5;Ã¿Ã«ÃJÃ¿OÂ+Ã¢ZÂ¥**`ÃÂžÂj_ÂÂtÃ¿Ãi
-ÂÃ¿rVÂ""ÂÂÃ¿ÃžÃÂ§Ã¿Ã¿Â¬ÂžÂ
-ÂºV-ÃÂœÂ·kÃUV/ÃÃ¿ÂÃšÂ ÂÃ³Ã©ÂzÃŸÂÂŒÂ
-8Kf/OO'ÂŠÂŠ5ÂÃ@Ã¿ÂIÂ¿Ã¿UTTT]
-ÂÃ¿hÂ##rÃ¿ÃºÃ°~PÂiÂÃÃÃÂÃžÃžÃ¿ÂÃÂªÂ€Ã¯ÃÂÂ®~~~Â³Â¹Â¿ÃÃ¿Ã¿Ã¿Ã
-
-
-ÃÃ!!!Ã£$$$Ãª&&&Ã±)))Ãž+++Ã¿...000
-333666!888(;;;/===6@@@=BBBDEEEKGGGRJJJY_MMMfOOOmRRRtTTT{WWWÂYYYÂ\\\Â^^^ÂaaaÂcccÂ¥
-+
-+
-+Â«fffÂ²iiiÂ¹kkkÃnnnÃpppÃsssÃuuuÃxxxÃ£zzzÃª}}}Ã±
-
-
-Ã·ÃŸÂÂÂÂ
-Â
-Â
-
-ÂÂÂÂÂÂÂÂÂ!ÂÂÂ(ÂÂÂ/ÂÂÂ6ÂÂÂ=CÂÂÂJÂÂÂQÂÂÂXÂ¡Â¡Â¡_Â£Â£Â£fÂŠÂŠÂŠmÂšÂšÂštÂ«Â«Â«{Â­Â­Â­ÂÂ°Â°Â°ÂÂÂ³Â³Â³ÂÂµÂµÂµÂÂžÂžÂžÂ€ÂºÂºÂºÂ«ÂœÂœÂœÂ²Â¿Â¿Â¿Â¹ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ¢ÃÃÃÃ©ÃÃÃÃ°ÃÃÃÃ·ÃÃÃÃŸÃÃÃÃÃÃ
-ÃÃÃÃ Ã Ã Ã£Ã£Ã£!'Ã¥Ã¥Ã¥.ÃšÃšÃš5Ã«Ã«Ã«<Ã­Ã­Ã­CÃ°Ã°Ã°JÃ²Ã²Ã²QÃµÃµÃµXÃ·Ã·Ã·_ÃºÃºÃºfÃŒÃŒÃŒmÃ¿sÂ­Ã¿/Ã°Ã¿Ã°ÂÃ¿iÂŽÂk99ÂÃ¿Ã¿Ã°Â Â³Â³~ÂŠÃŠÃŠÃºÂ¯Ã¿Ã°ÃµÂœ|ÃŒÃÃ¿ÃºÃÃÂ°Ã¢Ã¿ÃÃ°ÂÂÃ©Ã Ã¿Ã¿Ã³Ã®ÃÂÃºÃºÃÂšÂšÂš!Ã¿Â¶Ã+Ã¿Â z7 Â²ÂªEÂÃÃºRÂpÃ¿awÂÂp|ÂÃÃ¿Ã¿Ã ÂÂ¯ÂÃºÃ°ÃŠÂÃ¿Ã¿Â£ÂRÂªÂÂÂ»22ÃÃ2ÂKÃÃÃfÃšÂœRÂœÃµÂpÃ4wfjjÂ!#Â#3ÃÃCÃ yS//d`ÃµÃ¿ÃºjÃ¿Ã€Ã¡tÃ¿Ã€Âµ}Ã¿ÃÂ­Â##uÂ##uÂÃœÃµÃŠÂkÂ#Â©Ã¿ÂÂ°Ã¿EÂºÃ¯ÂÃ¯ÃÃ®ÃšÂªÃsÃxÃÂ¯Ã®Ã®Ã§ÃpÂÃµÃ¿Ã¯ÃÃ¿ÃÂ¹
-+ÃÂ
-?Ã¿ÂµÃ
-Ã
-HÂÂ°Ã ÃŠ$Â  Ã°+Ã¿/ÂŒÂÂ9AiÃ¡CÂEOÃ©ÂzVÃŽÂ€`aRÂÂjÃ¿ÃµÃ®sÂR-zrÂÃ¿Â~ÂÂ«ÂpÂÂÂÃ¿ÃºÃºÂAÂ¬AÂ§TpÂªÂ±ÃÂžÂÂµÃÂ¿ÃÂœÃ¿cGÃÃÃÃÃÂ>ÃÃ¡Ã³>ÂÃ«ÃµÃÂ³Ã±Ã¿Ã¿Ã¿Ã·ÃµÃµÃµÃ¿Ã¿	2Ã8ÃªAliceBlueAntiqueWhiteAquamarineAzureBeigeBisqueBlackBlanchedAlmondBlueBlueVioletBrownburlywoodCadetBluechartreusechocolateCoralCornflowerBluecornsilkCyanDarkGoldenrodDarkGreenDarkKhakiDarkOliveGreenDarkOrangeDarkOrchidDarkSalmonDarkSeaGreenDarkSlateBlueDarkSlateGrayDarkTurquoiseDarkVioletDeepPinkDeepSkyBlueDimGrayDodgerBlueFirebrickFloralWhiteForestGreengainsboroGhostWhiteGoldGoldenrodGrayGray0Gray1Gray10Gray100Gray11Gray12Gray13Gray14Gray15Gray16Gray17Gray18Gray19Gray2Gray20Gray21Gray22Gray23Gray24Gray25Gray26Gray27Gray28Gray29Gray3Gray30Gray31Gray32Gray33Gray34Gray35Gray36Gray37Gray38Gray39Gray4Gray40Gray41Gray42Gray43Gray44Gray45Gray46Gray47Gray48Gray49Gray5Gray50Gray51Gray52Gray53Gray54Gray55Gray56Gray57Gray58Gray59Gray6Gray60Gray61Gray62Gray63Gray64Gray65Gray66Gray67Gray68Gray69Gray7Gray70Gray71Gray72Gray73Gray74Gray75Gray76Gray77Gray78Gray79Gray8Gray80Gray81Gray82Gray83Gray84Gray85Gray86Gray87Gray88Gray89Gray9Gray90Gray91Gray92Gray93Gray94Gray95Gray96Gray97Gray98Gray99GreenGreenYellowhoneydewHotPinkIndianRedivoryKhakilavenderLavenderBlushLawnGreenLemonChiffonLightBlueLightCoralLightCyanLightGoldenrodLightGoldenrodYellowLightGrayLightPinkLightSalmonLightSeaGreenLightSkyBlueLightSlateBlueLightSlateGrayLightSteelBlueLightYellowLimeGreenlinenMagentaMaroonMediumAquamarineMediumBlueMediumForestGreenMediumGoldenrodMediumOrchidMediumPurpleMediumSeaGreenMediumSlateBlueMediumSpringGreenMediumTurquoiseMediumVioletRedMidnightBlueMintCreamMistyRosemoccasinNavajoWhiteNavyNavyBlueOldLaceOliveDrabOrangeOrangeRedOrchidPaleGoldenrodPaleGreenPaleTurquoisePaleVioletRedPapayaWhipPeachPuffperuPinkPlumPowderBluepurpleRedRosyBrownRoyalBlueSaddleBrownSalmonSandyBrownSeaGreenseashellSiennaSkyBlueSlateBlueSlateGraysnowSpringGreenSteelBlueTanThistletomatoTransparentTurquoiseVioletVioletRedWheatWhiteWhiteSmokeYellowYellowGreengrey
-
-3
-k
-ÂÂ°ÃÃ­ÃŒ
-+
-*
-9lÂ
-Â« (08@HPX`hpxÂÂÂÂÂ ÂšÂ°ÂžÃÃÃÃÃ ÃšÃ°Ãž (08@HPX`hpxÂÂÂÂÂ ÂšÂ°ÂžÃÃÃÃÃ ÃšÃ°Ãž (08@HPX`hpxÂÂÂÂÂ ÂšÂ°ÂžÃÃÃÃÃ ÃšÃ°Ãž (08@HPX`hpxÂÂÂÂÂ ÂšÂ°ÂžÃÃÃÃÃ ÃšÃ°Ãž (08@HPX`hpxÂÂÂÂÂ ÂšÂ°ÂžÃÃÃÃÃ ÃšÃ°Ãž (08@HPX`hpxÂÂÂÂÂ ÂšÂ°ÂžÃÃÃÃÃ ÃšÃ°Ãž (08@HPX`hpxÂÂÂÂÂ ÂšÂ°ÂžÃÃÃÃÃ ÃšÃ°Ãž (08@H.fileÃŸÃ¿grgb.cX% 6 EÂ XÃ .textÃ
-.data\Ãª.bss.rdata_free i _strstr _tolower _strchr _strdup x_theRGBRecords_numTheRGBRecords_xpmReadRgbNames_xpmGetRgbName_xpmGetRGBfromName_xpmFreeRgbNames_xpmstrcasecmpscan.o/         1345987853  0     0     100666  4125      `
-+LÃ
-.text 
-+ÂŽH
-% P`.dataÃ
-+Âº
-@0Ã.bssÂ0Ã.rdatapÃ
-+@0@UÂÃ¥ÂÃ¬ÂuÃžÂEÂu
-Â]ÃŽÂ}ÃŒÂÂ
-ÃtÃ1ÃÂ]ÃŽÂuÃžÂ}ÃŒÂÃ¬]ÃÂFÂN
-Â>ÂÃ9ÃÂÂÂMÃ°sÂÂ¶ÂÂ¿ÂE9tCÂÃ9ÃrÃ±9ÃtÂUÂÃ«Â·ÂV9ÃvÂEÂUÃ°ÂÂÂUÂAÂF
-ÂÃ«ÂÂÂFÂÃÂD$Â<$ÃšÂÃÂ
-ÃÂžÂtÃ¿Ã¿Ã¿ÂÂN
-ÂÃÃ«Â¹ÂÂÂŽ&UÂÃ¥ÂEÂU
-ÂMÂ
-Ãu'ÂB
-Â
-ÃuÃB
-ÂÃBÃÃ1Ã]ÃÃ1Ã]ÃÃ«
-ÂÂÂÂÂÂÂÂÂÂÂÂÂUÂÃ¥W1Ã¿VSÂÃ¬
-ÂEÃ°ÂEÂpÂÂD$ÂUÃ°ÂÂ$ÃšÂÃ¬;}
-sMÂ1Ã;]s?ÂÃ¶ÂÂŒ'Â|$Â\$ÂUÃ°ÂÂ$ÃšÂÃ¬
-Ât$ÂUÂ$ÂT$Ã¿UÂ
-ÃuCÂÃ;]rÃG;}
-rÂŽÂeÃŽ1Ã[^_]ÃÂeÃŽÂžÃœÃ¿Ã¿Ã¿[^_]ÃÂÂ¶ÂÂŒ'U1ÃÂÃ¥WVSÂÃ¬Â¬Â]
-ÂÂ
-ÃÃœÃ¿Ã¿1ÃÂ}ÂÂ
-ÂŒÃœÃ¿Ã¿1ÃÂ
-ÃÂÂ
-ÂžÃœÃ¿Ã¿ÃEÃÃEÃÃEÃÃEÃÃEÃÂyÂCÂSÂÂ
-ÂŒÃœÃ¿Ã¿ÂÂÂžÃœÃ¿Ã¿ÂEÂ
-ÃÂÃŸÂUÂÂš ÂÃšÂMÂI ÂÂÃÃœÃ¿Ã¿ÂÂ
-ÂŒÃœÃ¿Ã¿Â¹ÂŸÃœÃ¿Ã¿Ã¿ÂL$ÂÂÂžÃœÃ¿Ã¿Â¯ÃÂ$ÃšÂEÃÂ
-ÃÂÃ
-ÂEÃÃÃ Â$ÃšÂEÃÂ
-ÃÂÂ¬Â
-Ã¿t7ÂžÃÂÂÂŒÃœÃ¿Ã¿ÂD$
-ÂEÃÂD$ÂÂ
-ÂžÃœÃ¿Ã¿Â$ÂÃºÂD$ÂEÃš[ÃŸÃ¿Ã¿Â
-ÃÂÃÂ
-qÂ
-Ãt7ÂžÂÂÂžÃœÃ¿Ã¿ÂÃÂD$
-ÂEÃÂD$ÂÂ
-ÂŒÃœÃ¿Ã¿ÂL$Â$ÂEÃš ÃŸÃ¿Ã¿Â
-ÃÂÃÂ
-6ÂžÂŸÃœÃ¿Ã¿Ã¿ÂD$ÂEÃÂ$ÃšÂÂ
-ÃÃœÃ¿Ã¿Â
-ÃÂÂ]ÃÂºÂž\ÂÃ»\Ã«kÃ\B9ÃwÃž9ÂÃÃœÃ¿Ã¿sÂÂÃÃœÃ¿Ã¿ÂuÃÂ
-Ã¶Â
-IÂÂÂ°ÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿1Ã¿ÂÂœÂÃœÃ¿Ã¿ÂEÃÂÂÂŽÃœÃ¿Ã¿ÂMÂÂ
-Â¬ÃœÃ¿Ã¿1ÃÂ
-ÃÂÂ
-ÂÃœÃ¿Ã¿ÂÃÂUÃ¶ÂÃÂJÂÂÂšÃœÃ¿Ã¿Â
-Ã¶t
-ÂÂ
-Â¬ÃœÃ¿Ã¿KÂÂÃÃœÃ¿Ã¿ÂÂÂ°ÃœÃ¿Ã¿ÂÃÂÂÂŽÃœÃ¿Ã¿ÂÂ
-Â°ÃœÃ¿Ã¿ÃÃ Â$ÃšÂÂ
-ÂÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Â
-ÃÂÂ1Ã¿ÂÂœÂ°ÃœÃ¿Ã¿ÂÂÂŽÃœÃ¿Ã¿ÂÂœÂ ÃœÃ¿Ã¿ÂÂ
-ÂÃœÃ¿Ã¿ÂÃ·ÂÂÂÃœÃ¿Ã¿ÂÂ
-ÂÃœÃ¿Ã¿ÂÃ ÂÂÃÃœÃ¿Ã¿BÂÂ|ÃœÃ¿Ã¿ÂvÂÂŒ'ÂÂ|ÃœÃ¿Ã¿Â
-$ÃšÂÂÂÃœÃ¿Ã¿Â
-ÃÂÂÃÂ:ÂÃžÂºÃBÂ²ÂÃ¹Ã·Ã¢Â¡ÂŸÃÃªkÃ\)ÃÂ¶ÂCÃ«6ÂÃºÂžÃBÂ²)ÃÃ·Ã¢ÂžÃBÂ²FÃÃªÂÂtÃœÃ¿Ã¿ÂÂtÃœÃ¿Ã¿Ã·Ã¢Â¡ÃÃªkÃ\)ÃÂ¶ÂC;ÂµÃÃœÃ¿Ã¿rÃÃGÂÂÂ¬ÃœÃ¿Ã¿Ã¿Â
-Â ÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂÂ
-ÂÃœÃ¿Ã¿ÂÃÂÂÂ ÃœÃ¿Ã¿ÂÂÃ9ÂÂ°ÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂÂ¬ÃœÃ¿Ã¿Â7Ã¿Ã¿Ã¿ÂÂ
-Â°ÃœÃ¿Ã¿1Ã¶ÂÂÂÃœÃ¿Ã¿ÂÂÂšÃœÃ¿Ã¿Â]ÂD$
-ÂT$ÂL$Â
-$ÃšÂt$Ã$ÃšÂÂ
-Â€ÃœÃ¿Ã¿Â]Â
-ÃtDÂUÂÃ¶BÂÂ
-MÃ¶Ãt0ÂUÂMÂ]ÂEÂRDÂI@Â[$Â@TÂÂÂÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂ
-ÂÃœÃ¿Ã¿1ÃÂÂœÂ°ÃœÃ¿Ã¿ÂÂÂŽÃœÃ¿Ã¿ÂÂÂ ÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂÂÂŽ&ÂÂŒ'ÂÂÂÃœÃ¿Ã¿Â
-ÃÂÃž1Ã1Ã1Ã¶;Â
-ÂÃœÃ¿Ã¿Ã«&Ât&ÂÂÂÃœÃ¿Ã¿ÂÃ²)ÃÂÂÂÂÃœÃ¿Ã¿9ÂÂÃ
-F;ÂµÂÃœÃ¿Ã¿ÂÂž;ÂµÂÃœÃ¿Ã¿uÃÂ¹Ã«Ã€Ã¶ÃÂ
-ÃŒÃ¿Ã¿1Ã¶ÂÂµÃÃœÃ¿Ã¿Ã©ÃŒÃ¿Ã¿ÂvÂEÃÂ
-Ãu=ÂEÃÂ
-Ãu,ÂÂ
-ÃÃœÃ¿Ã¿Â
-ÃtÂEÃÂD$ÂÂ
-ÃÃœÃ¿Ã¿Â$ÃšÂÃ°ÂÃÂ¬[^_]ÃÂ$ÃšÃ«ÃÂ$ÃšÃ«Â¹Â
-Ã¿ÂÂÃ»Ã¿Ã¿ÂOÂGÂÂÂŒÃœÃ¿Ã¿ÂÂ
-ÂžÃœÃ¿Ã¿Ã©zÃ»Ã¿Ã¿ÂÂÃÃœÃ¿Ã¿BÂ$ÃšÂÂÃÃœÃ¿Ã¿Â
-ÃÂÃÂºÃœÃ¿Ã¿Ã¿ÂÂÃ
-Â¡ÂŸ1ÃÂ¶ÂC;ÂµÃÃœÃ¿Ã¿s1Â¿ÃBÂ²Ã·ÃFÂÃÃ·Ã§ÂÃÃÃ©ÂÃÃ·Ã§Â¡ÃÃªkÃ\)ÃÂ¶ÂC;ÂµÃÃœÃ¿Ã¿rÃÃÂEÂ
-ÃÂÂŽÂUÂÂÃÂÃ¡ÂfÂ
-Ãu	Ã¶ÃÂÂÂ]ÂSTÂÃºÂÂÂfÂ
-ÃÂÂ§ÂCDÂRÂ<ÃÂŸÂ
-Â·Â
-ÃtÂ
-$ÃšÂÂÃÃœÃ¿Ã¿Â
-ÃÂÂ³ÂÂFÂÃŸvÃ1ÃÂ
-ÃÂÃÂ
-ÂÃŸÃ¿Ã¿Â]ÃÂuÃÃ©Â·Ã»Ã¿Ã¿ÂJDÂZ@ÂB$ÂÂÂÃœÃ¿Ã¿ÂRTÂÂÂÃœÃ¿Ã¿ÂÂ
-ÂÃœÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿Ã©Â¿ÃœÃ¿Ã¿ÂÂ
-Â€ÃœÃ¿Ã¿Â
-ÃÂ
-?ÂÂÂÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿Â¶BÂD$Â¶BÂD$
-Â¶BÂ
-$ÂD$Âž]ÂD$ÃšÂ
-$ÃšÂÂÂÃœÃ¿Ã¿ÂAÂ
-ÃÂÂÃ¿Â
-Â ÃœÃ¿Ã¿ÂÂ
-ÂÃœÃ¿Ã¿ÂÂ
-ÂÃœÃ¿Ã¿ÂÂÂ ÃœÃ¿Ã¿9ÂÂ°ÃœÃ¿Ã¿ÂxÃœÃ¿Ã¿ÂÂ
-ÂÃœÃ¿Ã¿Â$ÃšÃ$ÂÂÂ€ÃœÃ¿Ã¿ÂT$Ãš1ÃÂ
-ÃÂÃÂ
-ÂžÃœÃ¿Ã¿ÂMÂÂÂŒÃœÃ¿Ã¿ÂÂ
-ÂžÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿ÂÂÂÃÃœÃ¿Ã¿ÂAÂQÂEÃÂYÂA
-ÂEÃÂAÂEÃÂ$Ãš1ÃÃ©Â£ÃœÃ¿Ã¿Ât&;ÂµÂÃœÃ¿Ã¿ÂÃºÃŸÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂvÂ<ÃÂÂ
-ÂÃœÃ¿Ã¿Â
-Ãt	ÂÂÂÃœÃ¿Ã¿Â<Â±ÂŸÂ
-Â·Â
-ÃtÂ
-$ÃšÂÂÂÃœÃ¿Ã¿ÂÂ³FÂÃŸvÃ¢Ã©Ã¿Ã¿Ã¿ÂÂÂÃœÃ¿Ã¿ÂÂÂ€ÃœÃ¿Ã¿Â¶BÂD$Â¶BÂD$
-Â¶BÂL$Ã$ÂD$ÃšÂ
-ÃÂÂ
-ÃŸÃ¿Ã¿Â$ÃšÂÂÂÃœÃ¿Ã¿ÂCÃ©ÂµÃŸÃ¿Ã¿ÂEÂ$ÃšÂD$ÂUÂ$ÃšÂÂ
-ÂšÃœÃ¿Ã¿Ã©ÃºÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿Â
-$ÃšÂžÃœÃ¿Ã¿Ã¿Ã©ÃÃŸÃ¿Ã¿ÂÂÂÃœÃ¿Ã¿Â
-$ÃšÃ$ÂÂ
-Â€ÃœÃ¿Ã¿ÂD$ÃšÂžÃœÃ¿Ã¿Ã¿Ã©ÂÃŸÃ¿Ã¿Ã$kÃšÂÂÃÃœÃ¿Ã¿Â
-ÃÂBÂºÃœÃ¿Ã¿Ã¿ÂÂÃœÃ¿Ã¿1ÃÃ©ÂÃœÃ¿Ã¿ÂMÂADÂ<ÂÃ©TÃœÃ¿Ã¿ÂºÃœÃ¿Ã¿Ã¿Ã©wÃœÃ¿Ã¿ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|#%02x%02x%02xNoneÂ
-3a\
-u
-ÂÃ
-Ã
-:
-\
-+Â
-+ 0YnxÂš
-Ã
-+Ã³
-+kÃŒ
-RhÂ±Ã»C	S	l	{	Â	Â¬	Ã	Ã	Ã	.fileÃŸÃ¿gscan.c Ã + >Â° .text
-+%.data.bss.rdatapZ g w _sprintf Â Â Âš Â¶ Ã _strdup Ã _free Ã«   +_printable_storePixel_storeMaskPixel_MSWGetImagePixels_XpmCreateXpmImageFromImage_GetPixel@12_SelectObject@8_xpmFreeRgbNames_xpmGetRgbName_xpmReadRgbNames_XQueryColors_XDefaultScreen_XDefaultColormap_xpmFreeColorTable_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc
-+simx.o/         1345987853  0     0     100666  2040      `
-+Lp!.textÂÂ
-
-+ P`.data@0Ã.bssÂ0ÃUÂÃ¥]Ã©ÂÂŽ&UÂÃ¥]Ã©ÂÂŽ&UÂÃ¥]Ã©ÂÂŽ&U1ÃÂÃ¥]ÃÂÃ¶ÂÂŒ'U1ÃÂÃ¥]ÃÂÃ¶ÂÂŒ'UÂº
-ÂÃ¥ÂÃ¬Â]ÃžÂ]ÂuÃŒÂT$ÂÂ$ÃšÂÃ¬ÂÃÂžÂD$ÂÂ$ÃšÂÃ¬ÂÃ°Â]ÃžÂuÃŒÂÃ¬]ÃÂÂŽ&U1ÃÂÃ¥]ÃÂÃ¶ÂÂŒ'UÂÃÂ@ÃÂÃž	ÂÃ¥ÂÃv!ÂAÂÂÃžÂQÂ©vÂAÂ¿1ÃÂÃžw
-ÂQÃÂÃ¶ÂÂŒ']ÂÃÃÂÂ¶ÂÂ¿U1ÃÂÃ¥ÂÃ¬(Â]ÃŽÂ]Â}ÃŒÂ}Â
-ÃÂuÃžtXÂ;#tbÂ
-$ÂEÃ°ÂD$
-ÂEÃ¬ÂD$ÂEÃšÂD$Ãš1ÃÂ
-Ãt0ÂuÃšÂ]Ã¬ÂMÃ°ÂÃ°Â¶ÃÂ¶ÃÂ_ÃÃ 	ÃÂOÂ¶ÃÃÃ 	ÃÂÃ°ÂÂºÂGÂ]ÃŽÂÃÂuÃžÂ}ÃŒÂÃ¬]ÃÂ
-$ÃšÂÃžÂÃÂÃžt
-1ÃÂÃž
-tgÂÃÃ«ÂÂŸCÃšÃ¿Ã¿Ã¿ÂÃÃÃŠÂŸCÃšÃ¿Ã¿Ã¿ÂÂEÃšÂŸCÃšÃ·ÃŸÃ¿Ã¿ÂÃÃÃŠÂŸCÃšÃ©ÃŸÃ¿Ã¿ÂÂEÃ¬ÂŸCÃšÃÃŸÃ¿Ã¿ÂÃÃÃŠÂŸCÃšÃÃŸÃ¿Ã¿ÂÂEÃ°ÂºÂÃÃ©7Ã¿Ã¿Ã¿ÂŸCÃšÂ±ÃŸÃ¿Ã¿ÂÃÃÃŠÂŸCÃšÂ£ÃŸÃ¿Ã¿ÂÂEÃšÂŸCÃšÂÃŸÃ¿Ã¿ÂÃÃÃŠÂŸCÃšÂÃŸÃ¿Ã¿ÂÂEÃ¬ÂŸC	ÃšwÃŸÃ¿Ã¿ÂÃÃÃŠÂŸC
-+Ã«ÂÂŸCÃšcÃŸÃ¿Ã¿ÂEÃšÂŸCÃšWÃŸÃ¿Ã¿ÂEÃ¬ÂŸCÃšKÃŸÃ¿Ã¿Ã«ÂÂÃ¶ÂÂŒ'UÂžÂÃ¥]ÃÂÂ¶UÂÃ¥ÂMVÂuS1ÃÃ«ÂÂCÂ¶ÃÂAÃÃšÂQÂAÂÃ9Ã³|Ã§[^]ÃÂvU1ÃÂÃ¥]ÃÂÃ¶ÂÂŒ'UÂÃ¥ÂÃ¬(Ã$Â]ÃŽÂuÃžÂu Â}ÃŒÂ}$ÃšÃœÃ¿Ã¿Â
-ÃÂÃt3Â|$1ÃÂ¹ÂD$ÂEÂL$Â4$ÂD$
-ÃšÂÂEÂÃ¬ÂsÂ{ÂC
-ÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂÂŽ&UÂÃ¥ÂEÂ
-Ãt]Ã©]ÃÂÂŽ&ÂÂŒ'UÂÃ¥SÂÃ¬Â]Â
-ÃtÂÂ$ÃšÂ]ÂÃ¬Â]ÃŒÃÃ«ÂŒÂ]ÃŒÃÃÂÂÂÂÂÂÂn
-Â
-)v
-d %
-<.fileÃŸÃ¿gsimx.c  .  D0 T@ dP sÂ  Â
-Â° ÂÃ° Â p Â­Â Â»Â° ÃÃ Ã0 Ã¢P .texty
-+.data.bssÃ± _free   _strlen % _realloc _calloc _malloc 6_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc_XDefaultVisual_XDefaultScreen_XDefaultDepth_XDefaultColormap_hexCharToInt_XParseColor_XAllocColor_XQueryColors_XFreeColors_XCreateImage_XImageFree_XDestroyImage_DeleteObject@4_CreateBitmap@20_xpmGetRGBfromName_GetDeviceCaps@8WrFFrBuf.o/     1345987853  0     0     100666  662       `
-+LZ.textpÂŽ( P`.data@0Ã.bssÂ0Ã.rdata$@0@UÂ¹ÂÃ¥VSÂÃ¬ÂEÂL$Â]
-Â$ÃšÂÃÂ
-Ã¶ÂžÃ¿Ã¿Ã¿Ã¿t4Â
-$ÃšÂD$ÂºÂT$Â
-$Ât$
-ÃšÂ4$ÂÃÃš1ÃÂÃ»ÂÃHÂÃ[^]ÃÂÂÂÂÂÂÂÂÂÂÂw
-+.G
-Q
-.fileÃŸÃ¿gWrFFrBuf.c .texte.data.bss.rdata_fclose _fwrite _strlen _fopen 
-_XpmWriteFileFromBufferparse.o/        1345987853  0     0     100666  9485      `
-+Lb -.text@ÂŽX| P`.dataÃŽ0 @0Ã.bssÂ0Ã.rdataP@0@UÂÃ¥WVSÂÃ¬<ÂEÂÂ Â
-ÃÂÃ1Ã1Ã1ÃÂÂ
-ÃÃœÃ¿Ã¿1ÃÂÂ
-ÃÃœÃ¿Ã¿1ÃÂÂÃÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿ÂžÂÂµÃšÃœÃ¿Ã¿ÂD$Ât$ÂEÂ$ÃšÂÃžÂ
-JÃŒÂŸ
-Â¹ÂÂœÃšÃœÃ¿Ã¿Ã³ÂŠÂ
-1ÂžÂÂÃšÃœÃ¿Ã¿ÂD$ÂT$ÂMÂ
-$ÃšÂ
-ÃÂÃÂ	1Ã1Ã¶ÂÂ+ÃšÃœÃ¿Ã¿ÂÂ
-ÃšÃœÃ¿Ã¿Ã«ÂÃ¹Â(Â
-Ã¶ÂBÂ
-ÂÂ$Â¿_Â|$ÃšÂ
-ÃÂÃÂÃÂÂÃšÃœÃ¿Ã¿)ÃÂÃ)ÃÂÃ¹ÂÂ vÂºÂÃ¹Â/ÂÃ¹uÂµÂÂ
-ÃÃœÃ¿Ã¿Â
-ÃÂ
-ÂÃŒÂŸÂ¹ÂÃÃ³ÂŠÂ
-ÂUÂT$ÂMÂ
-$ÃšÂ
-ÃtiÂ¿ÂÂœÃÃœÃ¿Ã¿ÂÂÂŽ&ÂuÂ4$ÃšÃ¿Â
-ÃÃœÃ¿Ã¿ÂÂœÃÃœÃ¿Ã¿ÂÃÃŸÃ¿Ã¿ÂÂµÃÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿Â
-Ã¶ÂÃÂ
-ÃÂÃ	ÃÂšu
-ÂÂÃÃœÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿Â
-ÃÂÃÂ
-ÃÂÃ	ÃÂštÂÃ<ÂžÃŸÃ¿Ã¿Ã¿[^_]ÃÂE$ÂU(ÃÃ1ÃÂÃ<[^_]ÃÂU
-Â$ÂT$ÃšÂ
-ÃtÂŸÂMÂL$ÂuÂ4$ÃšÂ
-ÃtÂšÂEÂ4$ÂD$ÃšÂ
-ÃtÂÂUÂ4$ÂT$ÃšÂ
-ÃtÂÂžÂÂÃšÃœÃ¿Ã¿ÂD$ÂL$ÂuÂ4$ÃšÂ
-ÃÂÃtÂ1ÃÂÃ»ÂÂ
-Ã€ÃœÃ¿Ã¿ÂÂÂÂÃ€ÃœÃ¿Ã¿ÂE(Â
-ÃÂÂÂM
-1ÃÂL$ÂuÂ4$ÃšÂ
-ÃÂ
-ÂÂU$Â1ÃÃ©6Ã¿Ã¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿Â
-ÃÂ
-Ã¿Ã¿Ã¿ÃŒÂŸ$Â¹ÂÃÃ³ÂŠÂ
-Ã¯ÃŸÃ¿Ã¿ÂUÂT$ÂMÂ
-$ÃšÂ
-ÃÂÃÃŸÃ¿Ã¿ÂžÂÂ
-ÃÃœÃ¿Ã¿Ã©oÃŸÃ¿Ã¿ÂÂÃÃœÃ¿Ã¿Â
-ÃÂ
-Â·ÃŸÃ¿Ã¿ÃŒÂŸ,Â¹ÂÃÃ³ÂŠÂ
-Â¢ÃŸÃ¿Ã¿Âu
-Ât$ÂEÂ$ÃšÂ
-ÃÂÂÃŸÃ¿Ã¿ÂžÂÂ
-ÃÃœÃ¿Ã¿Ã©"ÃŸÃ¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿Â
-ÃÂ
-jÃŸÃ¿Ã¿ÃŒÂŸ3Â¹ÂÃÃ³ÂŠÂ
-UÃŸÃ¿Ã¿ÂuÂt$ÂEÂ$ÃšÂ
-ÃÂ;ÃŸÃ¿Ã¿ÂžÂÂ
-ÃÃœÃ¿Ã¿Ã©ÃÃœÃ¿Ã¿ÂM
-ÂÂµÃšÃœÃ¿Ã¿Â\$1Ã¿Â4$ÂL$ÃšÂ
-ÃÂ
-ÂžÂM$ÂÂµÃšÃœÃ¿Ã¿Â9Â¿Ât$1Ã¶Â|$ÂEÂ$ÃšÂÂµÃ ÃœÃ¿Ã¿ÂÃžtcÂÂÃ ÃœÃ¿Ã¿1ÃÂU(Â
-+Ã©ÃªÃœÃ¿Ã¿ÃŒÂž<Â¹ÂÃÂÂœÃšÃœÃ¿Ã¿Ã³ÂŠÂ
-^ÃŸÃ¿Ã¿ÂžÂÂ
-Ã€ÃœÃ¿Ã¿Ã©NÃŸÃ¿Ã¿ÂE Â4$ÂD$ÃšÂ
-ÃÂfÃŸÃ¿Ã¿ÂU$Â»ÂÃ©\ÃŸÃ¿Ã¿ÃŒÂŸ<Â¹ÂÂœÃšÃœÃ¿Ã¿Ã³ÂŠuÂÂ»ÂÂÃ ÃœÃ¿Ã¿Ã©xÃ¿Ã¿Ã¿ÂE ÂD$ÂUÂ$ÃšÂ
-ÃÂ.Ã¿Ã¿Ã¿Â¿Ã©$Ã¿Ã¿Ã¿ÂÂ¶UÂ¹ÂÃ¥WVSÂÃ¬<ÂL$ÂE
-Â$ÃšÂÂ
-ÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂžÃœÃ¿Ã¿Ã¿Â
-ÃÂTÂUÂÂ Â
-ÃÂ
-Ã°1ÃÂÂÃÃ»Ã¿Ã¿ÂÂ
-Ã Ã»Ã¿Ã¿ÂE
-9Â
-Ã Ã»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂÂUBÂÂÃÃ»Ã¿Ã¿ÂMÂ
-$ÃšÂÂ
-ÃÃ»Ã¿Ã¿Â$ÃšÂÂÃÃ»Ã¿Ã¿Â
-ÃÂÂÃº1Ã¶ÂÃ;us6ÂÂŽ&ÂMÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÃÂQFÂBÂAÂ¶ÂC;urÃÃÂ}ÂÃ1ÃÂ}
-ÂÃÂ
-ÃÂ
-ÃÂ
-ÃšÃ»Ã¿Ã¿1ÃÂÂ
-ÃÃ»Ã¿Ã¿1ÃÂÂ
-ÃÃ»Ã¿Ã¿ÂžÂD$ÂÂ
-ÃšÃœÃ¿Ã¿ÂD$ÂUÂ$ÃšÂ
-ÃÂÃÂ>ÂÂŽ&ÂÂœÃÃ»Ã¿Ã¿Â
-Ã¿u:1ÃÂ¿ÂÂÃ€Ã»Ã¿Ã¿ÂÃ¶ÂÂŒ'ÂÂ
-$Ãš9Ã°ÂNÃ¿Â
-Ã€Ã»Ã¿Ã¿ÂÃÂÂœÃ€Ã»Ã¿Ã¿vÃÂÂÃÃ»Ã¿Ã¿Â
-ÃÂÃ1ÃÂÂœÃ€Ã»Ã¿Ã¿ÂÃÂ
-ÃÂ]ÂÂÃÃ»Ã¿Ã¿Â
-ÃtoÂÂœÃšÃ»Ã¿Ã¿ÂÃ¹Ât&ÂÂŒ'ÂÂÃÂÂÃ¿ÃŸÃŸÃŸÃ·Ã!ÃÂÃ¢ÂÂÂÂtÃ©Ã·ÃÂÂuÃÃªÂÃÃÂÃ)Ã¹ÂAÂ$ÃšÂ
-ÃÂÃÂtÂÂÃÃ»Ã¿Ã¿ÂÂ
-ÃÃ»Ã¿Ã¿Â
-ÂÂ|$Â
-$ÃšÃÂ
-ÃšÃ»Ã¿Ã¿ÂÂÃ€Ã»Ã¿Ã¿ÂžBÂÂÃÃ»Ã¿Ã¿Ã©ÂE1Ã¶ÃÂ
-"ÃÂ
-Â$ÃšÂUÃÂ
-"ÂE
-ÂÂµÃ Ã»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿9Â
-Ã Ã»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿ÂÃÂEÂÂÃÃ»Ã¿Ã¿Â1ÃÂÃ<[^_]ÃÂEÂPÂBHÂ
-ÃÂBÂÂÂÂ¶@ÂÂÃÂFCÃ©ÃŸÃ¿Ã¿Ât$ÂÂÃšÃœÃ¿Ã¿ÂT$Â
-$ÃšÂ
-ÃÂ
-ÂÃŸÃ¿Ã¿ÂÂÃÃ»Ã¿Ã¿Â
-ÃÂÃ1ÃÂÂœÃ€Ã»Ã¿Ã¿ÂÃÂ
-ÃÂ
-ÂŠÃŸÃ¿Ã¿ÂvÂÂ
-ÃÃ»Ã¿Ã¿Â
-ÃÂBÂÂ
-ÃÃ»Ã¿Ã¿ÂÂœÃšÃ»Ã¿Ã¿Â
-ÃuÂ<$ÃšfÃ8 1ÃÂÂÃšÃœÃ¿Ã¿ÂÂ.ÃšÃœÃ¿Ã¿ÂL$Â<$Ãš1ÃÂÂ
-ÃÃ»Ã¿Ã¿ÂžÂD$ÂÂ
-ÃšÃœÃ¿Ã¿ÂD$ÂUÂ$ÃšÂ
-ÃÂÃÂ
-ÃÃœÃ¿Ã¿ÂÂœÃÃ»Ã¿Ã¿Â
-Ã¿Â'ÂÂœÃšÃ»Ã¿Ã¿ÂÃ¹ÂvÂÂÃÂÂÃ¿ÃŸÃŸÃŸÃ·Ã!ÃÂÃ¢ÂÂÂÂtÃ©Ã·ÃÂÂuÃÃªÂÃÃÂÃ)Ã¹ÂAÂ$ÃšÂÂÃÃ»Ã¿Ã¿Â
-ÃÂÂÃÃ»Ã¿Ã¿ÂÂÂÂÂ|$Â$ÃšÃ¿Â
-Ã Ã»Ã¿Ã¿ÂM
-ÂÂ
-ÃÃ»Ã¿Ã¿9ÂÃ Ã»Ã¿Ã¿ÂqÃŒÃ¿Ã¿Ã©uÃŸÃ¿Ã¿ÂÂÃ Ã»Ã¿Ã¿ÂT$ÂÂÃÃ»Ã¿Ã¿ÂÂD$ÂEÂ$ÃšÂ
-ÃÂÃÂÃÃŒÃ¿Ã¿ÂM
-ÂL$ÂÂ
-ÃÃ»Ã¿Ã¿Â$ÃšÂÃÃ©;ÃŸÃ¿Ã¿ÂUÂÂœÃšÃ»Ã¿Ã¿BÂÂÃÃ»Ã¿Ã¿ÂÂÃÃ»Ã¿Ã¿Â
-$ÃšÂÂÃÃ»Ã¿Ã¿Â
-ÃÂÂ1Ã¶ÂÃ;us6ÂÂŽ&ÂMÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂVÂQFÂBÂAÂ¶ÂC;urÃÃÂ}ÂÃ1ÃÂ}
-ÂÃÂ
-Ãt+ÂÂÃ Ã»Ã¿Ã¿ÂT$ÂÂÃÃ»Ã¿Ã¿ÂÂD$ÂEÂ$ÃšÂ
-ÃÂÃÂ
-5Ã¿Ã¿Ã¿ÂUÂ$ÃšÃÂ
-ÃšÃ»Ã¿Ã¿Ã«2ÂÂœÃšÃ»Ã¿Ã¿tÂ<$ÃšfÃ8 1ÃÂÂÃšÃœÃ¿Ã¿ÂÂ.ÃšÃœÃ¿Ã¿ÂL$Â<$ÃšÂ¹ÂÂ
-ÃšÃœÃ¿Ã¿ÂL$ÂD$ÂUÂ$ÃšÂ
-ÃÂÃuÂªÂÃ¹ÂvÂÂÃÂÂÃ¿ÃŸÃŸÃŸÃ·Ã!ÃÂÃ¢ÂÂÂÂtÃ©Ã·ÃÂÂuÃÃªÂÃÃÂÃ)Ã¹ÂAÂ$ÃšÂ
-ÃÂÃÂÃÂ|$Â$ÃšÂE
-ÂÂÃÃ»Ã¿Ã¿H;Â
-Ã Ã»Ã¿Ã¿ÂYÃÂ
-ÃšÃ»Ã¿Ã¿wYÃ¿Â
-Ã Ã»Ã¿Ã¿ÂU
-ÂÂ
-ÃÃ»Ã¿Ã¿9ÂÃ Ã»Ã¿Ã¿ÂmÃŸÃ¿Ã¿Ã©ÂÃŒÃ¿Ã¿ÂÂ¶ÂEÂPÂBHÂ
-ÃÂBxÂÂ¶@ÂÂÃÂFCÃ©ÂÃŸÃ¿Ã¿Â$ÃšÂÃÂÃÃ«Ã©ÂEÂ$ÃšÃ«ÂÂ$ÃšÂÃÂÃÃ©gÃŒÃ¿Ã¿ÂE
-ÂD$ÂÂÃÃ»Ã¿Ã¿Â$ÃšÂÃ<ÂžÃŸÃ¿Ã¿Ã¿[^_]ÃÂU
-ÂT$ÂÂÃÃ»Ã¿Ã¿Â
-$ÃšÂÃ<ÂžÃœÃ¿Ã¿Ã¿[^_]ÃÂE
-ÂD$ÂÂÃÃ»Ã¿Ã¿Â$Ã«ÃÂM
-ÂL$ÂÂ
-ÃÃ»Ã¿Ã¿Â$Ã«Â¢fÂUÂÃ¥WVSÂÃ¬<ÂEÃEÃ Â$ÃšÃ$
-ÃšÂEÃšÂUÃ°ÂMÃ¬ÂT$ÂL$ÂEÂ$ÃšÂ
-ÃÂÃÂ
-ÂÂvÃŒÂUÃ¬Â¹ÂŸ<ÂÃÂUÃÃ³ÂŠÂÃÂÃÂÃ(ÃÂŸÃÂ
-ÃtxÂ}ÃÂ¹	ÂŸCÃ³ÂŠÂÃÂÃ(ÃÂŸÃÂ
-ÃÂMÃtuÂMÃÂ
-$ÃšÂEÂ$ÃšÂUÃ°ÂMÃ¬ÂT$ÂL$ÂEÂ$ÃšÂ
-ÃÂÃtÂÂEÃšÂ$ÃšÂÃÂÃ<[^_]ÃÂUÃšÂ$ÃšÃ«Ã©ÃŒÂ}ÃÂŸCÂ¹	Ã³ÂŠÂÃÂÃ(ÃÂŸÃÂEÃÂ
-ÃÂÃ1ÃÂ}ÃÂÃÂ
-ÃÂÃ¢ÃEÃÂEÃÂÃ
-ÂD$ÂUÃšÂ$ÃšÂEÃ€Â
-ÃÂÂÂEÃšÂUÃÂuÃ¬ÃÂÃÂÃ³ÂEÃ€Ã«fÂÂ¡ÂÂ·PÂÃ Â
-Ãt#CÂŸÂ¡Â8tÃ Â$ÂžÂD$ÃšÂ
-ÃuÃÂEÃ°)Ã³)ÃÂÃšÂ$ÃšÂMÃ€Â
-ÃÂÂMÂEÃ°)ÃÂÃšÂD$Â
-ÂD$ÂÂ$ÃšÂEÃ¬Â$ÃšÂEÂ$ÃšÂUÃ°ÂMÃ¬ÂT$ÂL$ÂEÂ$ÃšÂ
-ÃÂÃÂ
-Ã¡Ã$ÃšÃEÃÂUÃ€ÃEÃÂBÂÂ¶ÃŒÂUÃ¬Â¹ÂŸ<ÂÃÂUÃÃ³ÂŠÂÃÂÃÂÃ(ÃÂŸÃÂ
-ÃÂÃ¡Â}ÃÂ¹	ÂŸCÃ³ÂŠÂÃÂÃ(ÃÂŸÃÂ
-ÃÂMÃÂÂŒÂMÃÂL$ÂUÃ€ÂBÂ$ÃšÂ
-ÃÂÃÂÃ¥ÂEÃÂMÃ€ÂAÂMÃÂEÃ¬ÂÂÂEAÂMÃÂ$ÃšÂUÃ°ÂMÃ¬ÂT$ÂL$ÂEÂ$ÃšÂ
-ÃÂÃÂMÃ¿Ã¿Ã¿ÂUÃÂMÃ€ÂQÂEÃ @ÂD$ÂEÃšÂ$ÃšÃ©ÃÃœÃ¿Ã¿ÂEÃ¬Â$ÃšÂMÃšÂ
-$ÃšÃEÃšÂEÂUÃ ÂMÃšÂÂE
-ÂÂÃ<1Ã[^_]ÃÂ}ÃÂ
-Ã¿trÃ¿EÃ ÂEÃÂUÃ€ÂEÃ
-Â
-ÃÂBÂÃ1ÃÂ}ÃÂÃÂ
-ÃÂ
-ÃÃœÃ¿Ã¿ÂuÃ Â
-Ã¶tÂÂ]ÃÂ
-ÃuÂ«ÂEÃ¬Â$ÃšÃ«ÂÂEÃ¬Â$ÃšÂEÃ ÂUÃÂMÃ€@ÂQÂD$ÂEÃšÂ$ÃšÂžÃœÃ¿Ã¿Ã¿Ã©%ÃœÃ¿Ã¿ÂUÃ€ÂBÂ$ÃšÂMÃ€ÃAÃ©qÃ¿Ã¿Ã¿ÂEÃ¬Â$ÃšÂUÃ ÂT$ÂMÃšÂ
-$Ã«ÂºÂMÃ€ÃAÃAÃ©Ã«ÃŸÃ¿Ã¿ÂEÃ¬Â$ÃšÂEÃ€Ã@Ã@ÂEÃ @ÂD$ÂUÃšÂ$Ã©uÃ¿Ã¿Ã¿U1ÃÂÃ¥W1Ã1ÃVSÂÃ¬Â¬Â}ÂÂ
-Â°Ã·Ã¿Ã¿1ÃÂÂ
-ÂšÃ·Ã¿Ã¿1ÃÂÂ
-ÂŽÃ·Ã¿Ã¿1ÃÂÂ
-Â¬Ã·Ã¿Ã¿1ÃÂÂ
-Â€Ã·Ã¿Ã¿1ÃÂ
-Ã¿ÂÂÃÃ·Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿ÂÂ
-Â Ã·Ã¿Ã¿t	ÂEÃ¶@uÂUÂ$ÃšÂ
-Ãt%ÂÃÂ¬[^_]ÃÂUÂŸÂÂµÂ Ã·Ã¿Ã¿Â$ÃšÂ
-ÃuÃÂÂ
-ÃÃ·Ã¿Ã¿ÂMÂD$ ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$
-ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$
-ÂÂ
-ÂŒÃ·Ã¿Ã¿ÂD$ÂÂ
-ÂžÃ·Ã¿Ã¿ÂD$Â
-$ÃšÂÃ¯Ã¿Ã¿Â
-ÃÂ
-xÃ¿Ã¿Ã¿ÂÂÂ Ã·Ã¿Ã¿Â
-ÃÂ
-ÂÂÃÃ·Ã¿Ã¿ÂÃ¹ÂÃÂÂÃÃ·Ã¿Ã¿ÂÃºÂÂ¬ÂT$ÂUÂEÃÂD$ÂÂ
-Â°Ã·Ã¿Ã¿ÂD$
-ÂL$Â$ÃšÃÃ³Ã¿Ã¿Â
-ÃÂÃÂ
-ÂÂÂ Ã·Ã¿Ã¿Â
-ÃÂ
-ÃÂÂÂžÃ·Ã¿Ã¿ÂŸÃœÃ¿Ã¿Ã¿ÂÂ
-ÃÃ·Ã¿Ã¿ÂÂÂŒÃ·Ã¿Ã¿ÂÂœÃÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿ÂÂÂ°Ã·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿Â¯ÃÃÃ Â$ÃšÂÂ
-ÂÃ·Ã¿Ã¿Â
-ÃÂÂÂÂ
-ÂÃ·Ã¿Ã¿ÂÃ¿ÂÃ»ÂÃ¿Â1ÃÂÃ¿ÂÃÂÂ/ÃÃ·Ã¿Ã¿1ÃÂÂœÂÃ·Ã¿Ã¿ÂÃÂ
-ÃÂÃŒ1ÃÂÂÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿ÂÃžÂMÂ
-$Ãš1ÃÂÂ
-ÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿9Â
-ÂÃ·Ã¿Ã¿Ât&ÂÂž1Ã¶ÂÂÃÃ·Ã¿Ã¿9ÃŸs?ÂÂŽ&ÂÂŒ'ÂUÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÂÂMFÂQÂBÂAÂ¶ÂC9ÃŸrÃÂÂÃÃ·Ã¿Ã¿ÂMÃÂT$Â
-$ÃšÂÂ
-ÃÂÂ Ã¿Â
-ÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿Â@ÂÂÂÃ·Ã¿Ã¿ÂÂÃ9ÂÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿Ã©eÃ¿Ã¿Ã¿ÂUÃÂ$ÃšÂ
-ÃÂ
-ÂÃœÃ¿Ã¿ÂÂÃÃ·Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿Ã©0ÃŸÃ¿Ã¿1ÃÂÂ
-ÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿9Â
-ÂÃ·Ã¿Ã¿ÂÃŒÂUÂ$Ãš1ÃÂÂÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿ÂÂÂŽ&ÂÂ¡1Ã¶ÂÂÃÃ·Ã¿Ã¿9ÃŸs?ÂÂŽ&ÂÂŒ'ÂUÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÂ®ÂMFÂQÂBÂAÂ¶ÂC9ÃŸrÃ1Ã¶;ÂµÂÃ·Ã¿Ã¿s01ÃÂvÂÂÂÃ·Ã¿Ã¿ÂÂÃÃ·Ã¿Ã¿ÂT$Â
-Â$ÃšÂ
-Ãt
-FÂÃ;ÂµÂÃ·Ã¿Ã¿rÃ;ÂµÂÃ·Ã¿Ã¿ÂÃ­Ã¿Â
-ÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿Â0ÂÃ9ÂÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿Ã©AÃ¿Ã¿Ã¿ÂÂEÂPÂBHÂ
-ÃÂBÂLÂÂ¶@ÂÂÃÂFCÃ©eÃŸÃ¿Ã¿ÂEÂPÂBHÂ
-ÃÂBÂÂÂ¶@ÂÂÃÂFCÃ©=Ã¿Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿Â$ÃšÂŸÃŸÃ¿Ã¿Ã¿ÂÂœÃÃ·Ã¿Ã¿ÂÃ³v
-ÂÂœÃÃ·Ã¿Ã¿Â9Â
-Ã¶Â
-
-ÂÂ
-Â Ã·Ã¿Ã¿Â
-ÃÂ
-	ÂEÂ
-Ãt(ÂEÃ¶@tÂÂœÃÃ·Ã¿Ã¿Â
-Ã¿Â
-.ÂMÃA
-ÃAÂU
-ÂÂ
-ÂžÃ·Ã¿Ã¿ÂuÂÂÂ
-ÂŒÃ·Ã¿Ã¿Â
-Ã¶ÂBÂÂ
-ÃÃ·Ã¿Ã¿ÂBÂÂ
-ÃÃ·Ã¿Ã¿ÂB
-ÂÂ
-Â°Ã·Ã¿Ã¿ÂBÂÂ
-ÂšÃ·Ã¿Ã¿ÂBtJÂÂÂ Ã·Ã¿Ã¿Â
-Ãt
-ÂÂ
-ÂŽÃ·Ã¿Ã¿ÂMÂAÂÂ
-Â¬Ã·Ã¿Ã¿ÂAÂÂ
-Â€Ã·Ã¿Ã¿ÂA
-ÂÂÃÃ·Ã¿Ã¿Â
-ÃtÂÂ
-ÃÃ·Ã¿Ã¿ÂUÂBÂÂ
-ÃÃ·Ã¿Ã¿Â
-+ÂB1ÃÃ©+Ã»Ã¿Ã¿Â$ÃšÂÃÂÃÃ©ÃŠÃŸÃ¿Ã¿Â$ÃšÂÃÂÃÃ©Â­ÃŸÃ¿Ã¿ÂÂœÃÃ·Ã¿Ã¿vÂÂœÃÃ·Ã¿Ã¿v
-ÂMÃÂ
-$ÃšÂÂÂ°Ã·Ã¿Ã¿Â
-ÃÂ
-ÃŠÂÂ
-ÂšÃ·Ã¿Ã¿Â
-ÃÂ
-ÃÂÂ
-ÂŽÃ·Ã¿Ã¿Â
-ÃÂ
-Â°ÂÂ
-Â¬Ã·Ã¿Ã¿Â
-ÃÂ
-ÂÂÂ
-Â€Ã·Ã¿Ã¿Â
-ÃuÂÃÃ©Â£ÃºÃ¿Ã¿Â$ÃšÂÃÃ©ÂÃºÃ¿Ã¿Ã¿Â
-ÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿Ã©ÃœÃ¿Ã¿Ã¿Â
-ÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿9Â
-ÂÃ·Ã¿Ã¿Ã©ÃŒÃ¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿1Ã¶ÂÂ
-ÂšÃ·Ã¿Ã¿Ã©;ÃŸÃ¿Ã¿ÂÂ
-ÂŽÃ·Ã¿Ã¿ÂD$ÂEÂ$ÃšÃ©ÃÃºÃ¿Ã¿ÂÂ
-Â¬Ã·Ã¿Ã¿ÂD$ÂEÂ$ÃšÃ©Ã»Ã¿Ã¿Â$ÃšÃ©^Ã¿Ã¿Ã¿Â$ÃšÃ©CÃ¿Ã¿Ã¿Â$ÃšÃ©(Ã¿Ã¿Ã¿Â$ÂÂ
-ÃÃ·Ã¿Ã¿ÂD$ÃšÃ©Ã¿Ã¿Ã¿ÂMÂÂ
-Â€Ã·Ã¿Ã¿ÂD$Â
-$ÃšÃ©ÃÃœÃ¿Ã¿ÂUÃÂ$ÃšÃ©Â·ÃœÃ¿Ã¿ÂÂÂÃ·Ã¿Ã¿Â
-$Ã©ÂÃœÃ¿Ã¿ÂÂ
-ÃÃœÃ¿Ã¿Âº1Ã¿ÂT$1Ã¶Â|$Â$Ãš;ÂÂÃ·Ã¿Ã¿s#ÂÂÂÃ·Ã¿Ã¿ÂÂÃÂ¶ÂFÂÃ;Â
-ÂÃ·Ã¿Ã¿fÂÂUÃÃœÃ¿Ã¿rÃ£1Ã¶ÂÂÂÃ·Ã¿Ã¿ÂÂµÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿ÂÃÃŸÃ¿Ã¿ÂE1ÃÂ$ÃšÂÂÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿shÂMÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂštiÂAÂŸ@ÂAÂBÃ¿=ÃŸÂÃÃŒÃ¿Ã¿Â·ÂUÃÃœÃ¿Ã¿fÂ
-ÃÂÂºÃŒÃ¿Ã¿Ã¿Â
-ÂÃ·Ã¿Ã¿Â·ÃÂÂÂÃ·Ã¿Ã¿HÂÂÃÂÂ
-ÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿9Â
-ÂÃ·Ã¿Ã¿rÂÃ¿Â
-ÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿Ã©ZÃ¿Ã¿Ã¿ÂEÂPÂBHÂ
-ÃÂBÂGÂÂ¶@ÂÂÃÃ«Â1ÃÂÂ
-ÃÃ¹Ã¿Ã¿Â¹ÂL$1Ã¶ÂT$Â$Ãš;ÂÂÃ·Ã¿Ã¿szÂÂÂÃ·Ã¿Ã¿Ã«ÂÂÃÂ¶PÂFÂÃ;Â
-ÂÃ·Ã¿Ã¿fÂQsXÂÂŸ8ÂÂÂœÃÃ¹Ã¿Ã¿Â
-ÃuÃÃ$ÂžÂD$ÃšÂÂÂœÃÃ¹Ã¿Ã¿Â
-ÃÂÃuÂŽ1ÃÃ«
-CÂÃ»Ã¿ÂÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«Ã1ÃÂÂÂÃ·Ã¿Ã¿ÂÂ
-ÂÃ·Ã¿Ã¿9Â
-ÂÃ·Ã¿Ã¿ÂVÂUÂ$Ãš1ÃÂÂÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿ÂÂ³ÂUÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÂ€ÂMÂAÂŸ@ÂAÂCÃ¿=ÃŸÂÂÂUÂÂ
-ÃÂÃÂÃžÂÃ	ÃÂšÂÂÂMÂAÂŸ@ÂAÂBÃ¿=ÃŸÂÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃÂÃ³Â·PfÂ
-ÃÂÃŠÃ¿Â
-ÂÃ·Ã¿Ã¿Â·ÃÂÂÂÃ·Ã¿Ã¿HÂÂÃÂÂÂÃ·Ã¿Ã¿ÂÂÂÃ·Ã¿Ã¿9ÂÂÃ·Ã¿Ã¿ÂMÃ¿Ã¿Ã¿Ã¿Â
-ÂÃ·Ã¿Ã¿Ã©
-Ã¿Ã¿Ã¿ÂEÂPÂBHÂ
-ÃÂBÂÃÂÂ¶@ÂÂÃÃ©EÃ¿Ã¿Ã¿ÂEÂPÂBHÂ
-ÃÂBÂÂÂÂ¶@ÂÂÃÃ©VÃ¿Ã¿Ã¿ÂÃÂUÂD$ÂEÂ$ÂÃ
-ÂD$ÃšÃ§Ã±Ã¿Ã¿Â
-ÃÂÃÂÂœÃºÃ¿Ã¿Ã©ÂÃ»Ã¿Ã¿1ÃÃ«Ât&CÂÃ»Ã¿ÂÃžÃ»Ã¿Ã¿ÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«ÃÂ$ÃšÂÃÂÃÃ©4ÃœÃ¿Ã¿1ÃÃ«
-CÂÃ»Ã¿ÂÃŒÃ¹Ã¿Ã¿ÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«ÃÂ$ÃšÂÃÂÃÃ©Â¹ÃŸÃ¿Ã¿Â$ÃšÂÃÂÃÃ©sÃŸÃ¿Ã¿ÂÂÂÃ·Ã¿Ã¿ÂŸÃœÃ¿Ã¿Ã¿Â
-$ÃšÃ©ÃÃ¹Ã¿Ã¿1ÃÃ«
-CÂÃ»Ã¿ÂÃŒÃ¿Ã¿ÂÂÂÃÃ¹Ã¿Ã¿Â
-ÃtÃšÂ$ÃšÃ«ÃÂÂÂÂÂÂÂ	smg4gc#define_chars_per_pixel_height_width_ncolorsXPMEXTXPMENDEXT_)n
-Â)Ã¡&$
-E*g%Ã°***,*N)Â*ÂŽ
-Ã*
-"*N
-o*Â¢'Ã)Ã²
-&*C
-t*Â¬$%
-#Â»)Ã	Ã¶ Â#ÂšÃ¡%b(Â² Ã
-Ã¹)S#vÂž!Ã"ÃŒ#Â	!Â	%Â²	 Ã	
-Ã±	)3
-+#I
-+Âž
-+,Ã
-+%Ã
-+,Ã±
-+"
-"g
-%s
-#Â
-Âª
-
-Ã
-
-Ã®
-
-Ã¹
-%
-#
-
-8
-
-C
-
-Â
-Â±
-Ã
-Ã
-+Ã³
-#
-
-(
-
-3
-%L
-b
-#Â
-
-Â³
-
-Ã 
-
-%%K[
-f
-Ã
-Ã
-Ã¶
-(
-X
-Ã£&#Â%RÂ%'Ã
-Ã,Ã,Ã»L
-Â©ÃÃ
-Ã
-Ãª
-"+]
-Â¯%Â
-Ã$
-)%Â
-ÂŠ,Ã
-Ã,Ã®,
-+
-3
-
-
-
-
-
-
-.fileÃŸÃ¿gparse.c Â $P
- 8Â .text9|.data.bss.rdataMFTcw Â Â ÂŠ _strncpy Â¶ Ã Ã _strcmp Ã­ _free _memset _strcat _strcpy _strlen Ãº 	 
- 1 F _strchr U _strncmp _ l w __filbuf Â_xpmParseValues_xpmParseColors_xpmParseExtensions_xpmParseData_xpmColorKeys__imp___pctype__imp____mb_cur_max_xpmHashTableFree_xpmHashTableInit_xpmGetCmt_xpmParseHeader_XpmFreeExtensions_boundCheckingRealloc_xpmGetString_xpmHashSlot_xpmHashIntern_xpmFreeColorTable_boundCheckingMalloc_boundCheckingCalloc_xpmNextString_xpmatoui_xpmNextWord_xpmNextUI__isctype
-+WrFFrDat.o/     1345987853  0     0     100666  672       `
-+L4.textÂÂ
- P`.data@0Ã.bssÂ0ÃUÂÃ¥ÂÃ¬hÂuÃžÂuÃÂ}ÃŒÂ}ÂšÂ]ÃŽÃEÂšÂ|$Ât$ÂE
-Â$ÃšÂ
-ÃÂÃtÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂ|$Ât$ÂEÂ$ÃšÂ4$ÂÃÃšÂ<$ÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]ÃÂÂÂÂÂÂÂÂ+
-S
-]
-e
-+.fileÃŸÃ¿gWrFFrDat.c .textx.data.bss * ; U p_XpmWriteFileFromData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmWriteFileFromXpmImage_XpmCreateXpmImageFromDataWrFFrI.o/       1345987853  0     0     100666  3841      `
-+L
-!.text0ÂŽÂ	? P`.data@0Ã.bssÂ0Ã.rdataÂžÃ€@0@UÂÃ¥WVSÂÃ¬Â¬Â]Â
-ÃÂWÂEÂ$ÃšÂÃžÂÃÂÃÂÃ»~
-ÃŒÂUÂžÂ¹ÂÃÂ|ÃœÃ³ÂŠÂÂ§ÂUÂžÂD$Â$ÃšÂÂ
-ÂŒÃœÃ¿Ã¿Â
-ÃÂºÃ¿Ã¿Ã¿Ã¿Â
-Ât&ÂÂŒ'Â
-ÃÂÃÂ
-rÂEÂ»Â
-ÃÂÂ®ÂMÂž/ÂD$Â
-$ÃšÂ
-ÃÂÃÂ|CÂ
-$Â¿.Â|$ÃšÂ
-Ãt.Â\$ÂÂÂžÃ»Ã¿Ã¿Â
-$ÃšÂÃÃ«Ã_Â$ÂŸ.Ât$ÃšÂ
-ÃuÃšÂ
-$Â¹-ÂL$ÃšÂ
-Ãt7ÂÂµÂžÃ»Ã¿Ã¿9ÃtÂ\$ÂÃ³Â4$ÃšÂÃÃ«ÂvÃ_Â$Âº-ÂT$ÃšÂ
-ÃuÃš1ÃÂÂµÂŒÃœÃ¿Ã¿ÂÂ
-ÂšÃ¹Ã¿Ã¿ÂEÂÂµÂ¬Ã¹Ã¿Ã¿Â
-ÃtÂEÃ¶@t
-ÂžÂÂ
-ÂšÃ¹Ã¿Ã¿Â}1ÃÂÂ
-Â€Ã¹Ã¿Ã¿Â
-Ã¿tÂUÃ¶BtÂrÂ
-Ã¶t
-Â¹ÂÂÂ€Ã¹Ã¿Ã¿Â\$ÂÂÂ¬Ã¹Ã¿Ã¿ÂºÂT$Â
-$ÃšÂÂ
-ÂšÃ¹Ã¿Ã¿Â
-ÃtÂuÂFÂ
-ÃÂ
-hÂU
-ÂÂÂ¬Ã¹Ã¿Ã¿ÂBÂD$ÂB
-ÂD$ÂBÂD$
-ÂÂ
-$ÂD$Âž6ÂD$ÃšÂEÂ
-Ãt
-ÂuÃ¶Â
-Ã®ÂÂ
-Â€Ã¹Ã¿Ã¿Â
-ÃÂ
-yÃ$CÂÂÂ¬Ã¹Ã¿Ã¿Â»Â\$ÂL$
-Â¹ÂL$ÃšÂÂÂšÃ¹Ã¿Ã¿Â
-ÃtÂuÂFÂ
-ÃÂ
-ÂU
-1ÃÂÂ
-ÂÃ¹Ã¿Ã¿ÂJ
-Âr9ÂÂÃ¹Ã¿Ã¿ÂÂÂ Ã¹Ã¿Ã¿ÂÂ«ÂvÂÂ^Â¿ÂD$ÂžGÂD$ÂÂ
-Â¬Ã¹Ã¿Ã¿Â$ÃšÂt&ÂÂŒ'ÂÂ
-Ãt&ÂD$
-ÂÂœÃŒÃ¿Ã¿Ã¿ÂÂÂ¬Ã¹Ã¿Ã¿ÂD$ÂžKÂD$Â$ÃšGÂÃÂÃ¿vÃÃ$CÂÂÂ¬Ã¹Ã¿Ã¿ÂžÂD$ÂžÂÃÂL$
-ÂD$ÃšÃ¿Â
-ÂÃ¹Ã¿Ã¿ÂÂ
-Â Ã¹Ã¿Ã¿9Â
-ÂÃ¹Ã¿Ã¿ÂXÃ¿Ã¿Ã¿ÂÂœÂšÃ¹Ã¿Ã¿Â
-Ã¿tÂUÂB
-Â
-ÃÂ
-
-ÂE
-ÂU
-Âu
-Â@ÂJÂ6ÂÂ
-ÂÃ¹Ã¿Ã¿ÂBÂÂÂÃ¹Ã¿Ã¿ÂÂÂÃ¹Ã¿Ã¿ÂÂµÂÃ¹Ã¿Ã¿HÂrÂÂ
-ÂÃ¹Ã¿Ã¿ÂÂ
-ÂÃ¹Ã¿Ã¿Â¯ÃÂ»ÃœÃ¿Ã¿Ã¿ÂÃÂ$ÃšÂÂ
-ÂÃ¹Ã¿Ã¿Â
-ÃÂ5Ã"1ÃÂÂÂÃ¹Ã¿Ã¿ÂÂÂÃ¹Ã¿Ã¿@9ÂÂÃ¹Ã¿Ã¿ÂÂ
-ÂÃ¹Ã¿Ã¿ÂÂÃ«
-ÂÂÂÂÂÂÂÂÂÂÂÂÂ1Ã¿ÂÂÂÃ¹Ã¿Ã¿;ÂœÂÃ¹Ã¿Ã¿s8ÂÂÂÃ¹Ã¿Ã¿GÂÂÂÃ¹Ã¿Ã¿ÂL$ÂÂÃÂ@ÂÃÂ
-$ÂD$ÃšÂÂÂÃ¹Ã¿Ã¿Ã;ÂœÂÃ¹Ã¿Ã¿rÃÃ"ÂžRÃCÂÂÂÃ¹Ã¿Ã¿ÂD$ÂÂ
-Â¬Ã¹Ã¿Ã¿ÂL$Â$ÃšÃ¿Â
-ÂÃ¹Ã¿Ã¿ÂÂÂÃ¹Ã¿Ã¿9ÂÂÃ¹Ã¿Ã¿ÂxÃ¿Ã¿Ã¿1Ã¿ÂÂÂÃ¹Ã¿Ã¿;ÂœÂÃ¹Ã¿Ã¿s@ÂÂÂŽ&ÂÂÂÃ¹Ã¿Ã¿GÂÂÂÃ¹Ã¿Ã¿ÂL$ÂÂÃÂ@ÂÃÂ
-$ÂD$ÃšÂÂ
-ÂÃ¹Ã¿Ã¿Ã;ÂœÂÃ¹Ã¿Ã¿rÃÃ"ÃCÂÂÂ¬Ã¹Ã¿Ã¿ÂÂµÂÃ¹Ã¿Ã¿ÂL$Â4$ÃšÂ4$ÃšÂÂ
-Â€Ã¹Ã¿Ã¿Â
-ÃÂÃÂEÂUÂ@
-ÂRÂÂ
-|Ã¹Ã¿Ã¿1ÃÂÂ
-tÃ¹Ã¿Ã¿9ÂtÃ¹Ã¿Ã¿ÂÂxÃ¹Ã¿Ã¿s{ÂÂ|Ã¹Ã¿Ã¿ÂÂµÂ¬Ã¹Ã¿Ã¿ÂÂ4$1Ã¶ÂD$ÂžWÂD$ÃšÂÂ
-|Ã¹Ã¿Ã¿ÂxÂX9ÃŸs+ÂÂ¶ÂFÂÃÂÂÂ¬Ã¹Ã¿Ã¿ÂD$ÂžeÂD$Â$Ãš9ÃŸrÃÃ¿Â
-tÃ¹Ã¿Ã¿ÂÂxÃ¹Ã¿Ã¿ÂÂ
-|Ã¹Ã¿Ã¿
-9ÂtÃ¹Ã¿Ã¿rÂ
-Ã$lÂÂµÂ¬Ã¹Ã¿Ã¿Â»
-Â\$Â¹ÂL$Ât$
-ÃšÃ$zÂÂ
-Â¬Ã¹Ã¿Ã¿ÂºÂT$1ÃÂD$
-ÂžÂD$ÃšÂÂ
-ÂžÃœÃ¿Ã¿ÂÃžÂÃÂÃžÂÂÂÃÂÃÂ¬[^_]ÃÃŒÂUÂ|ÃŸÂº~ÂžÂÃÂÃÃ³ÂŠÂ
-ÃºÃ¿Ã¿ÂEÂ¹ÂÂL$ÂD$ÂÂÂžÃ¹Ã¿Ã¿Â
-$ÃšÂ
-$ÂžÂD$ÃšÂÂ
-ÂŒÃœÃ¿Ã¿Â
-ÃÂºÃ¿Ã¿Ã¿Ã¿ÂÃºÃ¿Ã¿ÂžÃ«Â¡ÂÃ ÂÂ
-ÂŒÃœÃ¿Ã¿ÂžÂÂ
-ÂžÃœÃ¿Ã¿1ÃÃ©Ã²Ã¹Ã¿Ã¿ÂÂ
-ÂŒÃœÃ¿Ã¿Â$ÃšÂÃÃ©YÃ¿Ã¿Ã¿Ã$ÂÂÂÂ¬Ã¹Ã¿Ã¿Â¿Â|$ÂŸÂt$ÂT$
-ÃšÃ©ZÃ»Ã¿Ã¿Â¡ÂÂÂŒÃœÃ¿Ã¿ÂÃ 9ÃÂÃ¿Ã¿Ã¿Â$ÃšÂÃÃ©Ã¿Ã¿Ã¿ÂEÂºÂÂT$ÂD$Ã©+Ã¿Ã¿Ã¿ÂFÂD$
-ÂFÂD$ÂžÂšÂD$ÂÂ
-Â¬Ã¹Ã¿Ã¿Â$ÃšÃ©ÃšÃºÃ¿Ã¿Â]Ã©}Ã¹Ã¿Ã¿ÂD$ÂžÂ¯ÂD$ÂÂ
-Â¬Ã¹Ã¿Ã¿Â$ÃšÃ©xÃºÃ¿Ã¿ÂD$ÂÂÂ¬Ã¹Ã¿Ã¿ÂŸÂ¯Ât$Â
-$ÃšÃ©ÃÃ»Ã¿Ã¿ÂD$ÂžÂ¯ÂD$ÂÂ
-Â¬Ã¹Ã¿Ã¿Â$ÃšÃ©ÃÃºÃ¿Ã¿Ât&UÂÃ¥ÂÃ¬xÂuÃžÂEÂuÂ}ÃŒÂ}ÃÂD$ÂEÂ]ÃŽÂt$ÂD$ÂEÂ|$
-Â$ÃšÂ
-ÃÂÃu0Â
-Ã¶t;Ât$Â]ÂšÂ
-$ÃšÂ\$Â|$ÂE
-Â$ÃšÃŸÃ·Ã¿Ã¿Â<$ÂÃÃšÂÃÂuÃžÂ]ÃŽÂ}ÃŒÂÃ¬]Ã1Ã¶Ât$Ã«ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ.gzwimage_name/* XPM */
-+static char * %s[] = {
-+"%d %d %d %d",
-+"%s	%s %s%s,
-+,
-+"XPMEXT %s",
-+"%s",
-+"XPMENDEXT"};
-+.Zcompress > "%s" XPMEXTgzip -q > "%s" %d %d/*%s*/
-+
-7
-R
-^ Â
-Âª
-ÃÃÃŽ	%@Â¬
-ÂžÃŒ
--
-NÂ
-Â±Ã
-Ã
-ÃšÃž
-
-Â,
-LÂ€ÃÃ-
-6a
-mÂ
-ÂŽÂ»
-Ã
-)
-?G
-PoÂÂŠ
-ÃÃÃªÃ¹
-
-+A
-Sg
-sÂ
-ÂÃÃ«
-
-.fileÃŸÃ¿gWrFFrI.c 
-Â  .text#?.data.bss.rdataÂ·5C_fputs _fwrite __pclose _fclose __popen _sprintf _strlen _free _strncpy O _fprintf _strcpy _strchr _strrchr d u Â _fopen Â_XpmWriteFileFromXpmImage_XpmWriteFileFromImage_xpmColorKeys__imp___iob_boundCheckingMalloc_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage
-diff -Naur vim73.orig/src/xpm/x86/lib/libXpm.lib vim73/src/xpm/x86/lib/libXpm.lib
---- vim73.orig/src/xpm/x86/lib/libXpm.lib	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xpm/x86/lib/libXpm.lib	2012-11-01 20:35:48.000000000 +0000
-@@ -0,0 +1,332 @@
-+!<arch>
-+/               1345987754              0       11348     `
-+uVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂVÂtnwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂwÂÂ£ÂÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂŠÂšÂºxÂºxÂºxÂºxÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ^Â^Â^Â^Â^ÂkÂ®nÃsTsTsTsTsTsTsTsTsTsTsT}Â}Â}Â}ÂÂÂÂÂÂÃŒÂÃŒÂÃŒÂÃŒÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ²ÂÂ²ÂÂ¹ÂÂ¹ÂÃbÃbÃbÃ¬Ã¬Ã¬Ã¬ÃŸÂ€ÃŸÂ€ÃŸÂ€??_C@_01LLF@w?$AA@??_C@_02BKNP@?4Z?$AA@??_C@_02DILL@?$CFs?$AA@??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_03NNMC@?$CC?0?6?$AA@??_C@_03NOED@?$CC?$CFs?$AA@??_C@_04DBEM@?$CFs?0?6?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0L@JJCH@image_name?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@_XpmWriteFileFromImage_XpmWriteFileFromXpmImage_XpmWriteFileFromData??_C@_01FCOA@?5?$AA@??_C@_01IJJ@c?$AA@??_C@_01KBOJ@s?$AA@??_C@_01KCMF@g?$AA@??_C@_01KDFD@m?$AA@??_C@_02EPGO@g4?$AA@??_C@_06BGFG@XPMEXT?$AA@??_C@_06IKHH@_width?$AA@??_C@_07BLIB@_height?$AA@??_C@_07GIIJ@?$CDdefine?$AA@??_C@_08OLGI@_ncolors?$AA@??_C@_09IGJF@XPMENDEXT?$AA@??_C@_0BB@OCOG@_chars_per_pixel?$AA@_xpmColorKeys_xpmParseColors_xpmParseData_xpmParseExtensions_xpmParseValues_XpmWriteFileFromBuffer_XAllocColor_XCreateImage_XDefaultColormap_XDefaultDepth_XDefaultScreen_XDefaultVisual_XDestroyImage_XFreeColors_XImageFree_XParseColor_XQueryColors_boundCheckingCalloc_boundCheckingMalloc_boundCheckingRealloc??_C@_04COF@None?$AA@??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@_XpmCreateXpmImageFromImage??_C@_03GOGG@Red?$AA@??_C@_03NJCN@Tan?$AA@??_C@_04BAEF@peru?$AA@??_C@_04CFCB@Gray?$AA@??_C@_04CKHC@Cyan?$AA@??_C@_04IKOF@Gold?$AA@??_C@_04KPAE@Blue?$AA@??_C@_04NFMJ@grey?$AA@??_C@_04NPOO@snow?$AA@??_C@_04OEDJ@Plum?$AA@??_C@_04OFAF@Pink?$AA@??_C@_04PGEO@Navy?$AA@??_C@_05CGP@White?$AA@??_C@_05DKMC@Green?$AA@??_C@_05EAN@Gray8?$AA@??_C@_05FAHO@Gray5?$AA@??_C@_05FALF@Gray0?$AA@??_C@_05FBBK@Azure?$AA@??_C@_05FBHM@Khaki?$AA@??_C@_05FFA@Gray7?$AA@??_C@_05FJL@Gray2?$AA@??_C@_05GJBG@Brown?$AA@??_C@_05IFEB@Black?$AA@??_C@_05KJCE@ivory?$AA@??_C@_05KJOE@linen?$AA@??_C@_05KOJK@Gray9?$AA@??_C@_05KPAM@Gray3?$AA@??_C@_05KPMH@Gray6?$AA@??_C@_05OFHD@Coral?$AA@??_C@_05OLFG@Beige?$AA@??_C@_05PKCC@Gray1?$AA@??_C@_05PKOJ@Gray4?$AA@??_C@_05PPMO@Wheat?$AA@??_C@_06BFFO@Gray75?$AA@??_C@_06BFJF@Gray70?$AA@??_C@_06BFLI@Violet?$AA@??_C@_06BKBB@Gray32?$AA@??_C@_06BKNK@Gray37?$AA@??_C@_06BLIH@Gray38?$AA@??_C@_06CFAH@Orchid?$AA@??_C@_06CIEM@Gray96?$AA@??_C@_06CIIH@Gray93?$AA@??_C@_06CJBB@Gray99?$AA@??_C@_06COGK@Gray40?$AA@??_C@_06COKB@Gray45?$AA@??_C@_06DBBO@Bisque?$AA@??_C@_06DDP@Gray60?$AA@??_C@_06DFJB@Sienna?$AA@??_C@_06DGNC@Gray18?$AA@??_C@_06DHEE@Gray12?$AA@??_C@_06DHIP@Gray17?$AA@??_C@_06DIAL@Gray55?$AA@??_C@_06DIMA@Gray50?$AA@??_C@_06DOCN@Gray83?$AA@??_C@_06DOOG@Gray86?$AA@??_C@_06DPE@Gray65?$AA@??_C@_06DPLL@Gray89?$AA@??_C@_06EAHA@Gray77?$AA@??_C@_06EALL@Gray72?$AA@??_C@_06EBCN@Gray78?$AA@??_C@_06EPDP@Gray30?$AA@??_C@_06EPPE@Gray35?$AA@??_C@_06FEAG@Maroon?$AA@??_C@_06FGBB@Gray62?$AA@??_C@_06FGNK@Gray67?$AA@??_C@_06FHIH@Gray68?$AA@??_C@_06FJFO@Gray25?$AA@??_C@_06FJJF@Gray20?$AA@??_C@_06GCGK@Gray10?$AA@??_C@_06GCKB@Gray15?$AA@??_C@_06GLAD@Gray81?$AA@??_C@_06GLMI@Gray84?$AA@??_C@_06GMHI@Gray58?$AA@??_C@_06GNCF@Gray57?$AA@??_C@_06GNOO@Gray52?$AA@??_C@_06HKNC@Gray48?$AA@??_C@_06HLEE@Gray42?$AA@??_C@_06HLIP@Gray47?$AA@??_C@_06HNGC@Gray94?$AA@??_C@_06HNKJ@Gray91?$AA@??_C@_06ICBA@Gray92?$AA@??_C@_06ICNL@Gray97?$AA@??_C@_06IDIG@Gray98?$AA@??_C@_06IEDG@Gray44?$AA@??_C@_06IEPN@Gray41?$AA@??_C@_06JCFH@Gray51?$AA@??_C@_06JCJM@Gray54?$AA@??_C@_06JEHB@Gray87?$AA@??_C@_06JELK@Gray82?$AA@??_C@_06JFCM@Gray88?$AA@??_C@_06JMEF@Gray19?$AA@??_C@_06JNBI@Gray16?$AA@??_C@_06JNND@Gray13?$AA@??_C@_06KGCM@Gray23?$AA@??_C@_06KGOH@Gray26?$AA@??_C@_06KHLK@Gray29?$AA@??_C@_06KJGD@Gray64?$AA@??_C@_06KJKI@Gray61?$AA@??_C@_06LAEN@Gray36?$AA@??_C@_06LAIG@Gray33?$AA@??_C@_06LBBA@Gray39?$AA@??_C@_06LPAC@Gray71?$AA@??_C@_06LPMJ@Gray74?$AA@??_C@_06MBFP@Gray85?$AA@??_C@_06MBJE@Gray80?$AA@??_C@_06MGOP@Gray59?$AA@??_C@_06MHA@Gray27?$AA@??_C@_06MHHJ@Gray53?$AA@??_C@_06MHLC@Gray56?$AA@??_C@_06MIDG@Gray14?$AA@??_C@_06MIPN@Gray11?$AA@??_C@_06MJKB@purple?$AA@??_C@_06MLL@Gray22?$AA@??_C@_06NAEF@Gray49?$AA@??_C@_06NBBI@Gray46?$AA@??_C@_06NBND@Gray43?$AA@??_C@_06NCN@Gray28?$AA@??_C@_06NHDO@Gray90?$AA@??_C@_06NHPF@Gray95?$AA@??_C@_06NJCI@Yellow?$AA@??_C@_06NKLF@Salmon?$AA@??_C@_06OFGD@Gray34?$AA@??_C@_06OFKI@Gray31?$AA@??_C@_06OKCM@Gray73?$AA@??_C@_06OKOH@Gray76?$AA@??_C@_06OLLK@Gray79?$AA@??_C@_06OLOI@Orange?$AA@??_C@_06PDAC@Gray21?$AA@??_C@_06PDMJ@Gray24?$AA@??_C@_06PEAM@tomato?$AA@??_C@_06PMEN@Gray66?$AA@??_C@_06PMIG@Gray63?$AA@??_C@_06PNBA@Gray69?$AA@??_C@_07CCJC@HotPink?$AA@??_C@_07CGCE@Thistle?$AA@??_C@_07HPBN@OldLace?$AA@??_C@_07IGIM@Magenta?$AA@??_C@_07LNPC@Gray100?$AA@??_C@_07PBMA@SkyBlue?$AA@??_C@_07PCNH@DimGray?$AA@??_C@_08CJCK@moccasin?$AA@??_C@_08DNID@DeepPink?$AA@??_C@_08FJBA@NavyBlue?$AA@??_C@_08FMGG@lavender?$AA@??_C@_08HADN@cornsilk?$AA@??_C@_08IBDC@seashell?$AA@??_C@_08LHFL@honeydew?$AA@??_C@_08MBEP@SeaGreen?$AA@??_C@_09BDMI@OliveDrab?$AA@??_C@_09BKLN@PeachPuff?$AA@??_C@_09BOEB@SlateGray?$AA@??_C@_09CLEE@LightPink?$AA@??_C@_09CLIF@RoyalBlue?$AA@??_C@_09DMBK@LimeGreen?$AA@??_C@_09FGMF@Turquoise?$AA@??_C@_09FMMG@IndianRed?$AA@??_C@_09GABH@CadetBlue?$AA@??_C@_09GBEF@LightBlue?$AA@??_C@_09GHMI@MintCream?$AA@??_C@_09GMBI@PaleGreen?$AA@??_C@_09HFBF@Firebrick?$AA@??_C@_09HKOG@chocolate?$AA@??_C@_09IAEP@DarkKhaki?$AA@??_C@_09IDAC@SteelBlue?$AA@??_C@_09IPPN@gainsboro?$AA@??_C@_09JEGE@SlateBlue?$AA@??_C@_09KEPN@MistyRose?$AA@??_C@_09KMIH@VioletRed?$AA@??_C@_09KOFD@LawnGreen?$AA@??_C@_09LPFD@RosyBrown?$AA@??_C@_09LPGI@burlywood?$AA@??_C@_09MLEL@OrangeRed?$AA@??_C@_09MLNE@Goldenrod?$AA@??_C@_09OEDD@LightCyan?$AA@??_C@_09OLGA@LightGray?$AA@??_C@_09OLPB@DarkGreen?$AA@??_C@_09PCLJ@AliceBlue?$AA@??_C@_0BA@DGOK@MediumTurquoise?$AA@??_C@_0BA@KLPL@MediumGoldenrod?$AA@??_C@_0BA@MMKI@MediumVioletRed?$AA@??_C@_0BA@PEEL@MediumSlateBlue?$AA@??_C@_0BB@LEGJ@MediumAquamarine?$AA@??_C@_0BC@DACG@MediumForestGreen?$AA@??_C@_0BC@HJAL@MediumSpringGreen?$AA@??_C@_0BF@JONP@LightGoldenrodYellow?$AA@??_C@_0L@BOIA@GhostWhite?$AA@??_C@_0L@CAIG@chartreuse?$AA@??_C@_0L@CGBN@DodgerBlue?$AA@??_C@_0L@DGFJ@WhiteSmoke?$AA@??_C@_0L@DNNE@BlueViolet?$AA@??_C@_0L@EOAJ@Aquamarine?$AA@??_C@_0L@FBDJ@DarkOrange?$AA@??_C@_0L@GAGA@SandyBrown?$AA@??_C@_0L@GAGE@DarkSalmon?$AA@??_C@_0L@HKLN@LightCoral?$AA@??_C@_0L@JPNG@DarkOrchid?$AA@??_C@_0L@KPGJ@DarkViolet?$AA@??_C@_0L@MMBE@PowderBlue?$AA@??_C@_0L@OLEL@MediumBlue?$AA@??_C@_0L@PNNL@PapayaWhip?$AA@??_C@_0M@BPCH@Transparent?$AA@??_C@_0M@BPNM@ForestGreen?$AA@??_C@_0M@DMAP@YellowGreen?$AA@??_C@_0M@FGPB@SpringGreen?$AA@??_C@_0M@HDMO@FloralWhite?$AA@??_C@_0M@IAHK@SaddleBrown?$AA@??_C@_0M@IBCK@LightSalmon?$AA@??_C@_0M@ICLH@LightYellow?$AA@??_C@_0M@JGIF@GreenYellow?$AA@??_C@_0M@NMOH@DeepSkyBlue?$AA@??_C@_0M@POIL@NavajoWhite?$AA@??_C@_0N@BHGF@MediumOrchid?$AA@??_C@_0N@BIEM@MidnightBlue?$AA@??_C@_0N@EPMH@MediumPurple?$AA@??_C@_0N@FJKA@LemonChiffon?$AA@??_C@_0N@HACN@DarkSeaGreen?$AA@??_C@_0N@NNFJ@AntiqueWhite?$AA@??_C@_0N@NNJL@LightSkyBlue?$AA@??_C@_0O@BGGF@DarkGoldenrod?$AA@??_C@_0O@EJNF@DarkSlateBlue?$AA@??_C@_0O@FCA@PaleTurquoise?$AA@??_C@_0O@HGGD@LightSeaGreen?$AA@??_C@_0O@ILHE@DarkTurquoise?$AA@??_C@_0O@JIDB@PaleGoldenrod?$AA@??_C@_0O@MDPA@DarkSlateGray?$AA@??_C@_0O@PPGC@PaleVioletRed?$AA@??_C@_0O@PPHN@LavenderBlush?$AA@??_C@_0P@BDLF@LightSteelBlue?$AA@??_C@_0P@END@LightSlateBlue?$AA@??_C@_0P@FDEE@DarkOliveGreen?$AA@??_C@_0P@FDIN@CornflowerBlue?$AA@??_C@_0P@FLGD@LightGoldenrod?$AA@??_C@_0P@HJDN@BlanchedAlmond?$AA@??_C@_0P@IOPG@LightSlateGray?$AA@??_C@_0P@OOCE@MediumSeaGreen?$AA@_xpmFreeRgbNames_xpmGetRGBfromName_xpmGetRgbName_xpmReadRgbNames??_C@_01LHO@r?$AA@??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@_XpmReadFileToImage_XpmReadFileToXpmImage_XpmReadFileToData_XpmReadFileToBuffer??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@??_C@_0L@POMH@XpmSuccess?$AA@??_C@_0M@KHPB@XpmNoMemory?$AA@??_C@_0O@FNPH@XpmOpenFailed?$AA@??_C@_0O@PNEN@XpmColorError?$AA@??_C@_0P@MINL@XpmColorFailed?$AA@??_C@_0P@PLPG@XpmFileInvalid?$AA@_XpmFree_XpmGetErrorString_XpmLibraryVersion_xpmatoui_XpmFreeXpmInfo_xpmInitXpmInfo_xpmSetInfo_xpmSetInfoMask_XpmFreeXpmImage_xpmInitXpmImage_xpmHashIntern_xpmHashSlot_xpmHashTableFree_xpmHashTableInit??_C@_00A@?$AA@??_C@_01BJG@?6?$AA@??_C@_01FAJB@?$DL?$AA@??_C@_01FKHJ@C?$AA@??_C@_01PIHH@?$CB?$AA@??_C@_02BOOO@?$CK?1?$AA@??_C@_02DLDK@?0?6?$AA@??_C@_02FCCF@?1?$CK?$AA@??_C@_03FMK@XPM?$AA@??_C@_03PHEM@?$CJ?$CJ?6?$AA@??_C@_04DHGG@?5?8?$CI?6?$AA@??_C@_04HCLL@XPM2?$AA@??_C@_04JOHA@Lisp?$AA@??_C@_06EHEH@?$CIsetq?5?$AA@??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_07NAB@_format?$AA@??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0O@JACJ@static?5char?5?$CK?$AA@_xpmDataTypes_xpmGetCmt_xpmGetString_xpmNextString_xpmNextUI_xpmNextWord_xpmParseHeader_XpmCreateImageFromData_XpmCreateXpmImageFromData_XpmCreateImageFromBuffer_XpmCreateXpmImageFromBuffer_XpmCreateImageFromXpmImage_xpmParseDataAndCreate_xpmstrcasecmp??_C@_09CHAC@XPMEXT?5?$CFs?$AA@??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@_XpmCreateDataFromImage_XpmCreateDataFromXpmImage??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@_XpmCreateBufferFromImage_XpmCreateBufferFromXpmImage_XpmAttributesSize_XpmFreeAttributes_XpmFreeExtensions_xpmFreeColorTable_xpmInitAttributes_xpmSetAttributes/               1345987754              0       10690     `
-+ÂVntÂwÂÂ£ÂšÂŠxÂºÃÃÂ^Â®kÃnTsÂ}ÂÂÃŒÂÂÂÂ²ÂÂ¹bÃÃ¬Â€ÃŸu
-
-
-
-
-
-
-
-
-
-
-
-
-+	
-
-
-
-
-??_C@_00A@?$AA@??_C@_01BJG@?6?$AA@??_C@_01FAJB@?$DL?$AA@??_C@_01FCOA@?5?$AA@??_C@_01FKHJ@C?$AA@??_C@_01IJJ@c?$AA@??_C@_01KBOJ@s?$AA@??_C@_01KCMF@g?$AA@??_C@_01KDFD@m?$AA@??_C@_01LHO@r?$AA@??_C@_01LLF@w?$AA@??_C@_01PIHH@?$CB?$AA@??_C@_02BKNP@?4Z?$AA@??_C@_02BOOO@?$CK?1?$AA@??_C@_02DILL@?$CFs?$AA@??_C@_02DLDK@?0?6?$AA@??_C@_02EPGO@g4?$AA@??_C@_02FCCF@?1?$CK?$AA@??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_03FMK@XPM?$AA@??_C@_03GOGG@Red?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_03NJCN@Tan?$AA@??_C@_03NNMC@?$CC?0?6?$AA@??_C@_03NOED@?$CC?$CFs?$AA@??_C@_03PHEM@?$CJ?$CJ?6?$AA@??_C@_04BAEF@peru?$AA@??_C@_04CFCB@Gray?$AA@??_C@_04CKHC@Cyan?$AA@??_C@_04COF@None?$AA@??_C@_04DBEM@?$CFs?0?6?$AA@??_C@_04DHGG@?5?8?$CI?6?$AA@??_C@_04HCLL@XPM2?$AA@??_C@_04IKOF@Gold?$AA@??_C@_04JOHA@Lisp?$AA@??_C@_04KPAE@Blue?$AA@??_C@_04NFMJ@grey?$AA@??_C@_04NPOO@snow?$AA@??_C@_04OEDJ@Plum?$AA@??_C@_04OFAF@Pink?$AA@??_C@_04PGEO@Navy?$AA@??_C@_05CGP@White?$AA@??_C@_05DKMC@Green?$AA@??_C@_05EAN@Gray8?$AA@??_C@_05FAHO@Gray5?$AA@??_C@_05FALF@Gray0?$AA@??_C@_05FBBK@Azure?$AA@??_C@_05FBHM@Khaki?$AA@??_C@_05FFA@Gray7?$AA@??_C@_05FJL@Gray2?$AA@??_C@_05GJBG@Brown?$AA@??_C@_05IFEB@Black?$AA@??_C@_05KJCE@ivory?$AA@??_C@_05KJOE@linen?$AA@??_C@_05KOJK@Gray9?$AA@??_C@_05KPAM@Gray3?$AA@??_C@_05KPMH@Gray6?$AA@??_C@_05OFHD@Coral?$AA@??_C@_05OLFG@Beige?$AA@??_C@_05PKCC@Gray1?$AA@??_C@_05PKOJ@Gray4?$AA@??_C@_05PPMO@Wheat?$AA@??_C@_06BFFO@Gray75?$AA@??_C@_06BFJF@Gray70?$AA@??_C@_06BFLI@Violet?$AA@??_C@_06BGFG@XPMEXT?$AA@??_C@_06BKBB@Gray32?$AA@??_C@_06BKNK@Gray37?$AA@??_C@_06BLIH@Gray38?$AA@??_C@_06CFAH@Orchid?$AA@??_C@_06CIEM@Gray96?$AA@??_C@_06CIIH@Gray93?$AA@??_C@_06CJBB@Gray99?$AA@??_C@_06COGK@Gray40?$AA@??_C@_06COKB@Gray45?$AA@??_C@_06DBBO@Bisque?$AA@??_C@_06DDP@Gray60?$AA@??_C@_06DFJB@Sienna?$AA@??_C@_06DGNC@Gray18?$AA@??_C@_06DHEE@Gray12?$AA@??_C@_06DHIP@Gray17?$AA@??_C@_06DIAL@Gray55?$AA@??_C@_06DIMA@Gray50?$AA@??_C@_06DOCN@Gray83?$AA@??_C@_06DOOG@Gray86?$AA@??_C@_06DPE@Gray65?$AA@??_C@_06DPLL@Gray89?$AA@??_C@_06EAHA@Gray77?$AA@??_C@_06EALL@Gray72?$AA@??_C@_06EBCN@Gray78?$AA@??_C@_06EHEH@?$CIsetq?5?$AA@??_C@_06EPDP@Gray30?$AA@??_C@_06EPPE@Gray35?$AA@??_C@_06FEAG@Maroon?$AA@??_C@_06FGBB@Gray62?$AA@??_C@_06FGNK@Gray67?$AA@??_C@_06FHIH@Gray68?$AA@??_C@_06FJFO@Gray25?$AA@??_C@_06FJJF@Gray20?$AA@??_C@_06GCGK@Gray10?$AA@??_C@_06GCKB@Gray15?$AA@??_C@_06GLAD@Gray81?$AA@??_C@_06GLMI@Gray84?$AA@??_C@_06GMHI@Gray58?$AA@??_C@_06GNCF@Gray57?$AA@??_C@_06GNOO@Gray52?$AA@??_C@_06HKNC@Gray48?$AA@??_C@_06HLEE@Gray42?$AA@??_C@_06HLIP@Gray47?$AA@??_C@_06HNGC@Gray94?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_06HNKJ@Gray91?$AA@??_C@_06ICBA@Gray92?$AA@??_C@_06ICNL@Gray97?$AA@??_C@_06IDIG@Gray98?$AA@??_C@_06IEDG@Gray44?$AA@??_C@_06IEPN@Gray41?$AA@??_C@_06IKHH@_width?$AA@??_C@_06JCFH@Gray51?$AA@??_C@_06JCJM@Gray54?$AA@??_C@_06JEHB@Gray87?$AA@??_C@_06JELK@Gray82?$AA@??_C@_06JFCM@Gray88?$AA@??_C@_06JMEF@Gray19?$AA@??_C@_06JNBI@Gray16?$AA@??_C@_06JNND@Gray13?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@??_C@_06KGCM@Gray23?$AA@??_C@_06KGOH@Gray26?$AA@??_C@_06KHLK@Gray29?$AA@??_C@_06KJGD@Gray64?$AA@??_C@_06KJKI@Gray61?$AA@??_C@_06LAEN@Gray36?$AA@??_C@_06LAIG@Gray33?$AA@??_C@_06LBBA@Gray39?$AA@??_C@_06LPAC@Gray71?$AA@??_C@_06LPMJ@Gray74?$AA@??_C@_06MBFP@Gray85?$AA@??_C@_06MBJE@Gray80?$AA@??_C@_06MGOP@Gray59?$AA@??_C@_06MHA@Gray27?$AA@??_C@_06MHHJ@Gray53?$AA@??_C@_06MHLC@Gray56?$AA@??_C@_06MIDG@Gray14?$AA@??_C@_06MIPN@Gray11?$AA@??_C@_06MJKB@purple?$AA@??_C@_06MLL@Gray22?$AA@??_C@_06NAEF@Gray49?$AA@??_C@_06NBBI@Gray46?$AA@??_C@_06NBND@Gray43?$AA@??_C@_06NCN@Gray28?$AA@??_C@_06NHDO@Gray90?$AA@??_C@_06NHPF@Gray95?$AA@??_C@_06NJCI@Yellow?$AA@??_C@_06NKLF@Salmon?$AA@??_C@_06OFGD@Gray34?$AA@??_C@_06OFKI@Gray31?$AA@??_C@_06OKCM@Gray73?$AA@??_C@_06OKOH@Gray76?$AA@??_C@_06OLLK@Gray79?$AA@??_C@_06OLOI@Orange?$AA@??_C@_06PDAC@Gray21?$AA@??_C@_06PDMJ@Gray24?$AA@??_C@_06PEAM@tomato?$AA@??_C@_06PMEN@Gray66?$AA@??_C@_06PMIG@Gray63?$AA@??_C@_06PNBA@Gray69?$AA@??_C@_07BLIB@_height?$AA@??_C@_07CCJC@HotPink?$AA@??_C@_07CGCE@Thistle?$AA@??_C@_07GIIJ@?$CDdefine?$AA@??_C@_07HPBN@OldLace?$AA@??_C@_07IGIM@Magenta?$AA@??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_07LNPC@Gray100?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_07NAB@_format?$AA@??_C@_07PBMA@SkyBlue?$AA@??_C@_07PCNH@DimGray?$AA@??_C@_08CJCK@moccasin?$AA@??_C@_08DNID@DeepPink?$AA@??_C@_08FJBA@NavyBlue?$AA@??_C@_08FMGG@lavender?$AA@??_C@_08HADN@cornsilk?$AA@??_C@_08IBDC@seashell?$AA@??_C@_08LHFL@honeydew?$AA@??_C@_08MBEP@SeaGreen?$AA@??_C@_08OLGI@_ncolors?$AA@??_C@_09BDMI@OliveDrab?$AA@??_C@_09BKLN@PeachPuff?$AA@??_C@_09BOEB@SlateGray?$AA@??_C@_09CHAC@XPMEXT?5?$CFs?$AA@??_C@_09CLEE@LightPink?$AA@??_C@_09CLIF@RoyalBlue?$AA@??_C@_09DMBK@LimeGreen?$AA@??_C@_09FGMF@Turquoise?$AA@??_C@_09FMMG@IndianRed?$AA@??_C@_09GABH@CadetBlue?$AA@??_C@_09GBEF@LightBlue?$AA@??_C@_09GHMI@MintCream?$AA@??_C@_09GMBI@PaleGreen?$AA@??_C@_09HFBF@Firebrick?$AA@??_C@_09HKOG@chocolate?$AA@??_C@_09IAEP@DarkKhaki?$AA@??_C@_09IDAC@SteelBlue?$AA@??_C@_09IGJF@XPMENDEXT?$AA@??_C@_09IPPN@gainsboro?$AA@??_C@_09JEGE@SlateBlue?$AA@??_C@_09KEPN@MistyRose?$AA@??_C@_09KMIH@VioletRed?$AA@??_C@_09KOFD@LawnGreen?$AA@??_C@_09LPFD@RosyBrown?$AA@??_C@_09LPGI@burlywood?$AA@??_C@_09MLEL@OrangeRed?$AA@??_C@_09MLNE@Goldenrod?$AA@??_C@_09OEDD@LightCyan?$AA@??_C@_09OLGA@LightGray?$AA@??_C@_09OLPB@DarkGreen?$AA@??_C@_09PCLJ@AliceBlue?$AA@??_C@_0BA@DGOK@MediumTurquoise?$AA@??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BA@KLPL@MediumGoldenrod?$AA@??_C@_0BA@MMKI@MediumVioletRed?$AA@??_C@_0BA@PEEL@MediumSlateBlue?$AA@??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@??_C@_0BB@LEGJ@MediumAquamarine?$AA@??_C@_0BB@OCOG@_chars_per_pixel?$AA@??_C@_0BC@DACG@MediumForestGreen?$AA@??_C@_0BC@HJAL@MediumSpringGreen?$AA@??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@??_C@_0BF@JONP@LightGoldenrodYellow?$AA@??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0L@BOIA@GhostWhite?$AA@??_C@_0L@CAIG@chartreuse?$AA@??_C@_0L@CGBN@DodgerBlue?$AA@??_C@_0L@DGFJ@WhiteSmoke?$AA@??_C@_0L@DNNE@BlueViolet?$AA@??_C@_0L@EOAJ@Aquamarine?$AA@??_C@_0L@FBDJ@DarkOrange?$AA@??_C@_0L@GAGA@SandyBrown?$AA@??_C@_0L@GAGE@DarkSalmon?$AA@??_C@_0L@HKLN@LightCoral?$AA@??_C@_0L@JJCH@image_name?$AA@??_C@_0L@JPNG@DarkOrchid?$AA@??_C@_0L@KPGJ@DarkViolet?$AA@??_C@_0L@MMBE@PowderBlue?$AA@??_C@_0L@OLEL@MediumBlue?$AA@??_C@_0L@PNNL@PapayaWhip?$AA@??_C@_0L@POMH@XpmSuccess?$AA@??_C@_0M@BPCH@Transparent?$AA@??_C@_0M@BPNM@ForestGreen?$AA@??_C@_0M@DMAP@YellowGreen?$AA@??_C@_0M@FGPB@SpringGreen?$AA@??_C@_0M@HDMO@FloralWhite?$AA@??_C@_0M@IAHK@SaddleBrown?$AA@??_C@_0M@IBCK@LightSalmon?$AA@??_C@_0M@ICLH@LightYellow?$AA@??_C@_0M@JGIF@GreenYellow?$AA@??_C@_0M@KHPB@XpmNoMemory?$AA@??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0M@NMOH@DeepSkyBlue?$AA@??_C@_0M@POIL@NavajoWhite?$AA@??_C@_0N@BHGF@MediumOrchid?$AA@??_C@_0N@BIEM@MidnightBlue?$AA@??_C@_0N@EPMH@MediumPurple?$AA@??_C@_0N@FJKA@LemonChiffon?$AA@??_C@_0N@HACN@DarkSeaGreen?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0N@NNFJ@AntiqueWhite?$AA@??_C@_0N@NNJL@LightSkyBlue?$AA@??_C@_0O@BGGF@DarkGoldenrod?$AA@??_C@_0O@EJNF@DarkSlateBlue?$AA@??_C@_0O@FCA@PaleTurquoise?$AA@??_C@_0O@FNPH@XpmOpenFailed?$AA@??_C@_0O@HGGD@LightSeaGreen?$AA@??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0O@ILHE@DarkTurquoise?$AA@??_C@_0O@JACJ@static?5char?5?$CK?$AA@??_C@_0O@JIDB@PaleGoldenrod?$AA@??_C@_0O@MDPA@DarkSlateGray?$AA@??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0O@PNEN@XpmColorError?$AA@??_C@_0O@PPGC@PaleVioletRed?$AA@??_C@_0O@PPHN@LavenderBlush?$AA@??_C@_0P@BDLF@LightSteelBlue?$AA@??_C@_0P@END@LightSlateBlue?$AA@??_C@_0P@FDEE@DarkOliveGreen?$AA@??_C@_0P@FDIN@CornflowerBlue?$AA@??_C@_0P@FLGD@LightGoldenrod?$AA@??_C@_0P@HJDN@BlanchedAlmond?$AA@??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0P@IOPG@LightSlateGray?$AA@??_C@_0P@MINL@XpmColorFailed?$AA@??_C@_0P@OOCE@MediumSeaGreen?$AA@??_C@_0P@PLPG@XpmFileInvalid?$AA@_XAllocColor_XCreateImage_XDefaultColormap_XDefaultDepth_XDefaultScreen_XDefaultVisual_XDestroyImage_XFreeColors_XImageFree_XParseColor_XQueryColors_XpmAttributesSize_XpmCreateBufferFromImage_XpmCreateBufferFromXpmImage_XpmCreateDataFromImage_XpmCreateDataFromXpmImage_XpmCreateImageFromBuffer_XpmCreateImageFromData_XpmCreateImageFromXpmImage_XpmCreateXpmImageFromBuffer_XpmCreateXpmImageFromData_XpmCreateXpmImageFromImage_XpmFree_XpmFreeAttributes_XpmFreeExtensions_XpmFreeXpmImage_XpmFreeXpmInfo_XpmGetErrorString_XpmLibraryVersion_XpmReadFileToBuffer_XpmReadFileToData_XpmReadFileToImage_XpmReadFileToXpmImage_XpmWriteFileFromBuffer_XpmWriteFileFromData_XpmWriteFileFromImage_XpmWriteFileFromXpmImage_boundCheckingCalloc_boundCheckingMalloc_boundCheckingRealloc_xpmColorKeys_xpmDataTypes_xpmFreeColorTable_xpmFreeRgbNames_xpmGetCmt_xpmGetRGBfromName_xpmGetRgbName_xpmGetString_xpmHashIntern_xpmHashSlot_xpmHashTableFree_xpmHashTableInit_xpmInitAttributes_xpmInitXpmImage_xpmInitXpmInfo_xpmNextString_xpmNextUI_xpmNextWord_xpmParseColors_xpmParseData_xpmParseDataAndCreate_xpmParseExtensions_xpmParseHeader_xpmParseValues_xpmReadRgbNames_xpmSetAttributes_xpmSetInfo_xpmSetInfoMask_xpmatoui_xpmstrcasecmpWrFFrI.obj/     1345987754              100666  7580      `
-+L%Âª$:Pgy.drectvePÃ
-+.textÂ,Â¬ P`.debug$FÃÃ®HB.text@Ãž8
- P`.data
-ÂŠ@0Ã.debug$FÂ±ÃHB.textpÃ;
-+ P`.data
-
-@0Ã.data
-@0Ã.data
-@0Ã.data
-
-@0Ã.data
-$
-@0Ã.data1
-@0Ã.data"9
-@0Ã.debug$F[
-k
-HB.textÂu
-Ãµ
- P`.dataE
-@0Ã.dataL
-@0Ã.debug$FP
-`
-HB.textj
-j
- P`.dataÂº
-@0Ã.dataÂœ
-@0Ã.debug$FÃ
-Ã
-HB.textpÃ
-L P`.dataÂ@0Ã.dataÂ@0Ã.dataÂ@0Ã.debug$FÂ«Â»HB.textÂÃ
-E
- P`.dataÂœ@0Ã.dataÃ@0Ã.dataÃ@0Ã.dataÃ@0Ã.dataÃ¢@0Ã.debug$FÃ¥ÃµHB.text0Ã¿/ P`.debug$FM]HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂL$ÂT$
-ÂÃ¬8ÂD$VÂt$PVPÂD$HQRPÃšÂÃÂ
-ÃuMÂ
-Ã¶t$ÂL$
-VQÃšÂL$LÂT$$ÂD$
-RPQÃšÂÃÃ«ÂD$DÂT$jRPÃšÂÃ
-ÂL$ÂÃ°QÃšÂÃÂÃ^ÂÃ8ÃÂÂÂÂÂ
-
-+4	H^m{ÂÃ¬$ÂÂ$VÂÂŽ$,PVÃšÂÃÂ
-ÃÂ
-Â
-Ã¶WÂÃj/VÃšÂÃžÂÃÂ
-Ã¿uÂÃŸÃ«Gj.WÃšÂÃÂ
-ÃtJÂÃÃ¿3ÃÃ²Â®Ã·Ã+Ã¹ÂT$ÂÃÂÃ·ÂÃºj.ÃÃ©Ã³Â¥ÂÃÂÃ¡Ã³Â€ÂL$
-Â|$
-QÃšÂÃÂ
-Ãtj.PÃ_ÃšÂÃÂ
-ÃuÃ®j-WÃšÂÃÂ
-ÃtUÂT$;Ãºt%ÂÃÃ¿3ÃÃ²Â®Ã·Ã+Ã¹ÂT$ÂÃÂÃ·ÂÃºÃÃ©Ã³Â¥ÂÃÂÃ¡Ã³Â€Â|$j-WÃšÂÃÂ
-Ãtj-PÃ_ÃšÂÃÂ
-ÃuÃ®Ã«Â¿ÂÂ$8ÂÂ$4ÂÂ$
-QWRPÃšÂÂ$ÂÃ°QÃšÂÃÂÃ_^ÂÃ$ÃÂÂ\4JÂÂÂ£ÃÃ±Ã¿
-,timage_name>	SÂ\$UWÂ
-ÃtÂÃ¶ÃtÂœÃ«3Ã­Â
-ÃtÂÃ¶ÃtÂCÃD$
-Â
-ÃuÃD$
-ÂD$Â|$PhWÃšÂÃ
-Â
-Ã­tÂCÂ
-ÃtPhWÃšÂÃ
-VÂt$ÂNÂV
-ÂFQÂRPQhWÃšÂÃÂ
-ÃtÃ¶tÂSÂCRPhWÃšÂÃÂD$ Â
-ÃthWÃšÂÃhWÃšÂÃÂ
-Ã­tÂCÂ
-ÃtPhWÃšÂÃ
-ÂN
-ÂVQRWÃšÂÃ
-Â
-Ã­tÂC
-Â
-ÃtPhWÃšÂÃ
-ÂFÂNÂVPÂFQÂRPQWÃšÂÃÂ
-Ã^u)ÂD$
-Â
-ÃtÂSÂC
-RPWÃšÂÃ
-hWÃšÂÃ3Ã_][ÃÂÂÂÂÂÂÂÂÂÂG/M,a+g,Â(Â,Â¢%Âš,Âž"ÂŸ,ÃÃ,Ã +ÃŠ,Ã·4
-+,-@KNS
-Y,};
-+",
-+ XPMEXT %d %d"%d %d %d %d/*%s*/
-+/* XPM */
-+static char * %s[] = {
-+fÂD$
-Â
-ÃvpSÂ\$UÂl$VWÂD$
-ÂEÂ}PhSÃšÂÃ
-ÂŸÂÂ
-ÃtPÂPhSÃšÂÃÂÃÂÃÂÃŸ~ÃhSÃšÂD$$ÂÃÂÃ
-HÂD$
-uÂ€_^][ÃÂÂÂÂÂÂÂ ;&,.8=7C,R8Y_,	%s %s"%sy4ÂL$SUÂl$Â¯ÃÂD$ÂÃVQÂpÃ¿ÃšÂÃÂÃÂ
-ÃÂ\$
-u	^]ÂžÃœÃ¿Ã¿Ã¿[ÃÂ
-Ã¶WÃ"v_Â|$$Ât$
-ÂD$ÂsÂ
-Ãv%ÂÃÂUÂ@ÂD$,Â
-ÃQVÃšÂÃ
-ÃµÂÃKuÃ¡Â\$ ÂT$ShÃ"RÃFÃšÂD$(ÂÃ
-HÂD$
-uÂ«Ã«Â|$$ÂD$ÂsÂ
-Ãv+ÂD$ÂÂL$(UÂ@ÂÃRVÃšÂD$$ÂÃ
-ÃµÂÃHÂD$uÃÂD$ShÃ"PÃFÃšSÃšÂÃ3Ã_^][ÃÂÂÂÂIaHzGÂ,ÂŸHÃDÃš,Ã®A%s%s,
-+ÃŒ@ÂD$
-SÂ\$Â
-ÃvPUVWÂ|$ÂD$
-ÂPhSÃšÂGÂwÂÃ
-Â
-ÃvÂÃšÂQhSÃšÂÃ
-ÂÃMuÃ©ÂD$
-ÂÃ
-HÂD$
-uÂŸ_^]hSÃšÂÃ[ÃÂÂÂ
-W",9T?,^Qd,,
-+"XPMENDEXT",
-+"%s",
-+"XPMEXT %s"mNÂÃ¬SUÂÂ¬$
-VÂ
-Ã­Wu!ÂÂ$_^]Ã@ Ã3Ã[ÂÃÃÂÃœÂÃÃ¿3ÃÃ²Â®Ã·ÃIÂÃ¹ÂÃ¿ÂÂÂt/ÃŸÂžÂÂ
-ÂÃ:Ãu
-ÂÃtÂHÂ^ÂÃ:ÃuÂÃÂÃÂÃuÃ3ÃÃ«ÃÂÃÃ¿Â
-ÃuQUÂT$hRÃšÂD$
-hPÃšÂÂ$,ÂÃÂ
-ÃÂAu_^]ÂÃÃ¿[ÂÃÃ_^]Ã3Ã[ÂÃÃÂÃ¿~YÂt/ÃœÂžÂÂ
-ÂÃ:Ãu
-ÂÃtÂPÂ^ÂÃ:ÃuÂÃÂÃÂÃuÃ3ÃÃ«ÃÂÃÃ¿Â
-ÃuUÂD$hPÃšÂL$
-hQÃ©kÃ¿Ã¿Ã¿hUÃšÂÂ$ ÂÃÂ
-ÃÂAu_^]ÂÃÃ¿[ÂÃÃ_^]Ã3Ã[ÂÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ"oRnÂkÂhÂgÂ¢dÃ¢c
-`#h,g7g=]gzip -q > "%s".gzwcompress > "%s".ZsÂ\ÂL$ÂHtHu
-ÂAPÃšÂÃÃÂA= tPÃšYÃÂÂÂÂÂv
-o%u+t.fileÃŸÃ¿gWrFFrI.c@comp.idÃš
-+Ã¿Ã¿.drectveP-Ã·Q".textÂÃÂµÃÂ  , 8 .debug$FÃ¹4ÂÂª.text@
-<WÃžÂT .data
-Â\ÃœGn_strchr _strrchr .debug$F8nÂœ=.textpÂ·ÃGÂ .dataÂºÂÂKÂ.data	Â»0ÂÃÂ·	.data
-+Ã
-UÃ
-+.data
-Ã¹KkÃ­
-.data
-
-Â$l
-
-.data
-Â¿ÂŸÃ¹Â€@
-_fprintf .data"ÂSÃÃf.debug$FlyZÂ.textÂÂÂKÂÂ¹ .dataIJ-ÃŠÃÃ§.dataÂÃÂ¯0Ãµ.debug$FÂ9ÂÂ.text8WY3 _free .data>Â®Â:
-.dataÃžÂ»6_strncpy R .debug$F:yÂ.textpÃ³1Gg .data".]Ãx.dataÃÃntÂ¡.dataTU<Ã
-.debug$F
-EÂ¢Â¡ÂŠ.text
-Â
-1ÃŸLÃÃ²
- _fopen .data
-jÂšÃL
-.dataÃÂÂ¥Ã3__popen .data 1Ã¯~`J _sprintf .data!IÃ a]!.data"4ÃÂrÂ"__iob.debug$F#
-.text$0%Â¶:Â¥$ _fclose __pclose .debug$F%$Â³_XpmWriteFileFromImage_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage_XpmWriteFileFromXpmImage??_C@_0L@JJCH@image_name?$AA@_xpmWriteFile??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_03NNMC@?$CC?0?6?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@_WriteColors??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@_xpmColorKeys??_C@_03NOED@?$CC?$CFs?$AA@_WritePixels??_C@_02DILL@?$CFs?$AA@??_C@_04DBEM@?$CFs?0?6?$AA@_boundCheckingMalloc_WriteExtensions??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@_OpenWriteFile??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_01LLF@w?$AA@??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_02BKNP@?4Z?$AA@_xpmDataCloseWrFFrDat.obj/   1345987753              100666  746       `
-+LÂ©$:P~.drectvePÂ
-+.text`Ã< P`.debug$FdtHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂÃ¬8ÂT$@ÂD$ÂL$PQRÃD$$ÃšÂÃ
-Â
-Ãu1ÂT$<ÂD$VÂL$PQRÃšÂÃ°ÂD$PÃšÂL$,QÃšÂÃÂÃ^ÂÃ8ÃÂÂÂÂÂ
-7
-+C	M[.fileÃŸÃ¿gWrFFrDat.c@comp.idÃš
-+Ã¿Ã¿.drectvePKÂÂ.text`CÂ«Â  * ; U .debug$Fp_XpmWriteFileFromData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmWriteFileFromXpmImage_XpmCreateXpmImageFromDataparse.obj/      1345987753              100666  11188     `
-+LÂ©$:PÂ¿!g.drectvePÃŒ
-+.dataL`@0Ã.dataÂ@0Ã.dataÂ@0Ã.dataÂ@0Ã.dataÂ@0Ã.dataÂ@0Ã.textÃ°ÂÂ' P`.data
-+@0Ã.data	$
-+@0Ã.data-
-+@0Ã.data5
-+@0Ã.data<
-+@0Ã.dataD
-+@0Ã.debug$FK
-+[
-+HB.text0e
-+Â
- P`.dataÂ·@0Ã.debug$FÂ¹ÃHB.textÃÃÂ. P`.data
-+_@0Ã.debug$FiyHB.textÂ Â# P`.debug$FÃÃHB.textÃÃ  P`.debug$FÂ¥!Âµ!HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 
-
-
-+cgg4msÂÃ¬
-SUÂÂ¬$VW3Ã¿9Âœ Â
-ÂÂÂ$$PUÃšÂÃÂ
-ÃÂÂÂÂ$(QUÃšÂÃÂ
-ÃÂhÂÂ$,RUÃšÂÃÂ
-ÃÂOÂÂ$0PUÃšÂÃÂ
-ÃÂ6ÂL$
-hQUÃšÂÃ°ÂÃ
-Â
-Ã¶Â
-ÂÃŸu
-ÂT$
-PRhÃšÂÃ
-Â
-ÃuÂžÃ«3ÃÂÂŒ$@Â
-ÃÂÂÂ$4PtSUÃšÂÃÂ
-Ãt0ÂÂ$8QUÃšÂÃÂ
-ÃtÂÂ$<Âž_^Â]3Ã[ÂÃ
-ÃÂÂ$<_3Ã^]Â[ÂÃ
-ÃÂL$ VQÃšÂÃ
-Â
-Ãt
-ÂÂ$8RUÃšÂÃÂ
-ÃtÂžÃ«3ÃÂÂ$<ÂT$
-hRUÂÃšÂÃ
-ÂÃžu+PÂD$ PhÃšÂÃ
-Â
-ÃuÂžÂ_^]3Ã[ÂÃ
-Ã3ÃÂ_^][ÂÃ
-Ã3ÃÂ|$Â|$Â|$ÂL$
-hQUÃšÂÃ
-ÂÃžÂ
-ÃÂT$
-PRhÃšÂÃ
-Â
-ÃÂ
-ÂŒÂD$
-hPUÃšÂÃ°ÂÃ
-Â
-Ã¶ÂÂÃD4
-ÂD$
-j_PÃšÂÃÂ
-ÃÂÂÂÃ+ÃÂL
-ÂÃ¹
-+w3ÃÂÂÃ¿$Â@Ã«ÃÂ
-Ã¿Â
-\jPhÃšÂÃ
-Â
-ÃÂ
-DÂÂ$$PUÃšÂÃÂ
-ÃÂ+Â¿Ã©ÃÂ
-ÃÂ
-jPhÃšÂÃ
-Â
-ÃÂ
-ÂÂ$(QUÃšÂÃÂ
-ÃÂÃšÂ»Ã©ÂÂL$Â
-ÃÂ
-ÃjPhÃšÂÃ
-Â
-ÃÂ
-ÂºÂÂ$,RUÃšÂÃÂ
-ÃÂÂ¡ÃD$Ã«=ÂL$Â
-ÃÂ
-ÂjPhÃšÂÃ
-Â
-ÃuwÂÂ$0PUÃšÂÃÂ
-ÃtbÃD$UÃšÂD$
-ÂÃ@ÂÃžÂD$ÂLÃŸÃ¿Ã¿Â
-Ã¿t;Â
-Ãt7ÂD$Â
-Ãt/ÂD$Â
-Ãt'ÂÂ$<ÂÂ$@ÃÃ_^]3Ã[ÂÃ
-Ã_^]ÂžÃŸÃ¿Ã¿Ã¿[ÂÃ
-ÃÂIÂÂÂÂÂ)8B8[8t8Â7Â¬6Â±3Ã8Ã±842I8r7Â
-6Â3Ã7Ã©1Ã®3	7'.G-N,a*f38Â€&Â©3Ã8Ã«"Ã°3	82
-73L8aÃ+Ã'Ã#ÃÃ_chars_per_pixel_ncolors_height_width#defineXPMEXTÃ«Â	ÂÃ¬SUVÂÂŽ$(WjVÃšÂÃš3Ã¿ÂÃ;Ã¯Âl$u_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃÃÂÂ$(9Â» Â
-U;Ã·Â|$Âl$ÂMÂÂŒ$0SÃšÂGPÃšÂL$
-ÂÃÂ
-ÃÂÂÂÂ
-Ã¿ÂÃ°vGÂÃ¯ÂÂ
-Ãt/ÂÃžt*ÂCÂHIÂHÂKÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂKÂŸAÂKÂFMuÂ»ÂÃ¿Ãv0ÂÂŒ$,v&ÂD$ÂT$RÂÂ$<ÂQRÃšÂÃ°ÂÃ
-Â
-Ã¶Â
--3ÃhÂD$$ÂD$ ÂD$(ÂÂ$(PSÃšÂÃšÂÃ
-Â
-Ã­ÂFÂD$
-Â
-ÃuC3ÃÂŸÂÂÃÃ¿ÂÃº3ÃÃ²Â®Ã·ÃI;ÃuÂÂ$$UQRÃšÂÃ
-Â
-ÃÂ(CÂÃÂÃ»rÃÂÂ$(ÂD$ Â
-ÃÂÃÂD$
-Â
-Ãu.Â¿ÂÃÃ¿3ÃÂT$$Ã²Â®Ã·Ã+Ã¹ÂÃ·ÂÃºÂÃÂÃÃ¿Ã²Â®ÂÃOÃÃ©Ã³Â¥ÂÃÂÃ¡Ã³Â€ÂÂŒ$$ÂÃÃ¿3ÃÃÂ,$Ã²Â®Ã·Ã+Ã¹ÂT$$ÂÃ·ÂÃ©ÂÃºÂÃÃ¿Ã²Â®ÂÃOÃÃ©Ã³Â¥ÂÃÂD$
-ÂÃ¡Ã³Â€ÂÂ$$hPSÃšÂÃšÂÃ
-Â
-Ã­Â
-Ã¿Ã¿Ã¿Ât$ Â
-Ã¶ÂQÂ|$$ÂÃÃ¿Ã²Â®Ã·ÃQÃšÂL$ÂÃÂÃÂ
-ÃÂÂ±ÂsÂ|$$ÂÃÃ¿3ÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·ÂÃºÂT$ÃÃ©Ã³Â¥ÂÃÂD$ÂÃ¡@Ã³Â€ÂÂ$,ÂÃ;ÃÂD$ÂT$ÂÃÃœÃ¿Ã¿Ã©ÂÃ»ÂÃÃŸÃ¿Ã¿Ât$ Â
-Ã¶tHÂ|$$ÂÃÃ¿3ÃÃ²Â®Ã·ÃQÃšÂÃÂÃÂ
-ÃÂÃ¹ÂD$Â|$$ÂÃÃ¿ÂÂ°3ÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·ÂÃºÃÃ©Ã³Â¥ÂÃÂÃ¡Ã³Â€CÃD$$Â\$ ÂÂ$(ÃD$
-Ã©Ã¯ÃŸÃ¿Ã¿ÂÂ$,ÂT$QRÃšÂÃÂžÃœÃ¿Ã¿Ã¿_^][ÂÃÃÂÂ$,ÂL$PQÃšÂÃÂÃ_^][ÂÃÃÂÂ$,ÂT$QRÃšÂÃÂžÃŸÃ¿Ã¿Ã¿_^][ÂÃÃÂÂ$,ÂL$PQÃšÂÃÂžÃŸÃ¿Ã¿Ã¿_^][ÂÃÃSÃÂ
-"ÃÂ
-ÃšÂÃ;Ã·ÃÂ
-"Â|$Âl$ÂÃÂÂŒ$0ÂGPÃšÂÃÂEÂ
-ÃÂÃÂ
-Ã¿ÂÃ°vLÂÂ
-Ãt/ÂÃžt*ÂCÂHIÂHÂKÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂKÂŸAÂKÂFOuÂ»ÂÂŒ$0ÂÃ¿Ãv-ÂÂŒ$,v#ÂL$ÂUÂÂ$8QRPÃšÂÃ°ÂÃ
-Â
-Ã¶Â
-tSÃšÂÂ$(hQSÃD$4ÃšÂÃÂÃÂ
-ÃÂÂÂD$$ÂÃt2Â¿ÂÃÃ¿3ÃÂl$$Ã²Â®Ã·Ã+Ã¹ÂÃ·ÂÃœÂÃ©ÂÃÃ¿Ã²Â®ÂÃOÃÃ©Ã³Â¥ÂÃÂl$ÂÃ¡Ã³Â€ÂÂŒ$$ÂÃÃ¿3ÃÃÂ$Ã²Â®Ã·Ã+Ã¹ÂT$$ÂÃ·ÂÃºÂÃÂÃÃ¿Ã²Â®ÂÃOÃÃ©Ã³Â¥ÂÃÂÂ$$ÂÃ¡hPSÃ³Â€ÃšÂÃÂÃ
-Â
-ÃÂ
-nÃ¿Ã¿Ã¿Â|$$ÂÃÃ¿3ÃÃ²Â®Ã·ÃQÃšÂÃÂÃÂ
-ÃÂÂ¹Â|$$ÂÃÃ¿3ÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·ÂÃºÃÃ©Ã³Â¥ÂÃÂÃ¡Ã³Â€ÂÂŽ$,Â|$ÂUÃD$$ÂNÃ¿;Ã¹s	SÃšÂÃGÂÃ
-;ÃŸÂ|$Âl$Â&ÃŸÃ¿Ã¿ÂÂ$4ÂD$_^Â]3Ã[ÂÃÃÂÂ$,ÂD$RPÃšÂÃÂžÃœÃ¿Ã¿Ã¿_^][ÂÃÃÂÂ$,ÂT$QRÃšÂÃÂÃ_^][ÂÃÃÂÂ$,ÂL$PQÃšÂÃÂžÃœÃ¿Ã¿Ã¿_^][ÂÃÃÂÂEdmDÂ¶CÃ¶B$7@a3ÂA
-77DÂžD
->B>d>Â>Â°ÃD
-CbBuÂ7Â§A7?DÂÃ>Ãµ>> .=ÂÃ¬SUÂl$ VW3Ã¿UÂ|$Ãšj
-ÃšÂÃÂD$ ÂL$0PQUÃšÂÃ°ÂÃ;Ã·tSÃšÂÃÂÃ_^][ÂÃÃÂT$(jRhÃšÂÃ°ÂÃ
-;Ã·teÂD$(j	PhÃšÂÃ
-;ÃtEÂL$(QÃšUÃšÂT$ ÂD$0RPUÃšÂÃ°ÂÃ;Ã·uÂÂL$(jQhÃšÂÃ°ÂÃ
-;Ã·uÂ¥Ã«;Ã·Â
-ÃÂT$(j	RhÃšÂÃ
-ÂD$ Â|$
-Ã«Â|$
-ÂD$ Â
-ÃÂÂÂG
-PSÃšÂÃ°ÂÃÂ
-Ã¶ÂÂ®ÂL$(Ât$Ã·ÂYÂÃ»Â=~ÂŸjRÃšÂÃÃ«ÂŸÂ
-ÂAÂÃ Â
-ÃtGÃ«ÃÂT$+Ã»+ÃÂÃªRÃšÂÃÂÂ
-ÃÂwÂL$+ÃÃ»ÂÃ©QWPÃšÂT$4RÃšUÃšÂD$,ÂL$<PQUÃšÂÃžÂÃ Â
-Ã¿Â
-ijÃšÂFÂT$,jRhÃšÂÃÂÃÂ
-ÃÂÂÂD$(j	PhÃšÂÃ
-ÂD$ Â
-ÃtdÂVÂ
-ÂœQRÃšÂÃÂ
-ÃÂ4ÂFÂL$(Â
-ÂžUGÃšÂT$
-ÂD$,RPUÃšÂÃÂÃÂ
-ÃÂ
-3ÂL$(jQhÃšÂÃÂÃ
-Â
-ÃuÂÂ
-Ã¿uÂVRÃšÂÃÃFÂT$ÂL$
-BÂÃ
-Â
-ÃÂ\$Â~ÂT$ÂL$
-Â[ÃŸÃ¿Ã¿ÂD$Â
-ÃÂ
-Ã³ÂD$(PÃšSÃšÃD$
-ÂÃÂ\$Ã©Ã€ÂD$(PÃšÂL$QSÃšÂÃ
-ÂžÃœÃ¿Ã¿Ã¿_^][ÂÃÃÂT$(RÃšÂL$3ÃÂFÂFÂD$@PQÃšÂÃ
-ÂžÃœÃ¿Ã¿Ã¿_^][ÂÃÃÂT$ÂD$BÃFRPÃFÃšÂÃÂÃ_^][ÂÃÃÂL$(QÃšÂT$ÂD$BÂ~RPÃšÂÃ
-ÂžÃœÃ¿Ã¿Ã¿_^][ÂÃÃÂL$ÂT$AÂ~QRÃšÂÃÂÃ_^][ÂÃÃÂD$ Â
-Ãu
-ÂL$(QÃšÂÃÂT$0ÂD$ÂL$,_Â^Â]3Ã[ÂÃÃÂÂÂÂD,U;TT6Y3nSs3ÂTÂÂUÂ¯6ÂŽ3ÃSÃ3Ã¿P!O/N=M[D{LÂ
-TÂÂUÂ¯DÂŸ6Ã3ÃSÃ¡3ÃœP)UB6G3]TÂ TÂŠTÃTÃKÃ©TK/KFTYK|KÂTXPMENDEXTÂŒJÂÃ¬@SÂ\$PU3Ã­V;ÃWÂl$4Âl$(Âl$Âl$Âl$
-Âl$ Âl$$tÂÃD$Ã¶ÃuÂl$Â|$TWÃšÂÃ;Ã
-Â
-4ÂD$(ÂL$4PÂT$@QÂD$@RÂL$`PÂT$lQÂD$DRÂL$DPQWÃšÂÃ$;Ã
-Â
-Ã»9l$tÂT$
-RWÃšÂÃÂ|$Tv
-Â|$\vÂD$@PÃšÂÃ;Ã
-Â
-ÃÂD$TÂL$@ÂT$QÂL$`RPQWÃšÂÃ°ÂÃ;Ãµt(Â|$TÂÃÂ|$\ÂÂ¹ÂT$@RÃšÂÃÃ©Â§9l$tÂD$ PWÃšÂÃÂD$ÂL$ÂT$@QÂL$XRÂT$dPÂD$<QÂL$<RPQWÃšÂÃ°ÂD$tÂÃ ÂÃžvÂ|$\v
-ÂT$@RÃšÂÃ;ÃµuD9l$tÂD$$PWÃšÂÃ;ÃÂÂÂÃ¶ÃÂÂ9l$(t{ÂKÂS
-QRWÃšÂÃ°ÂÃ
-;ÃµtjÂD$;Ã
-tÂL$\QPÃšÂÃÂD$;Ã
-t	PÃšÂÃÂD$
-;Ã
-t	PÃšÂÃÂD$ ;Ã
-t	PÃšÂÃÂD$$;Ã
-t	PÃšÂÃÂÃ_^][ÂÃ@ÃÂk
-ÂkÂD$XÂT$,ÂL$0;ÃÂÂT$TÂHÂL$\ÂPÂT$ÂH
-ÂL$ÂPÂHt59l$tÂT$
-ÂD$ ÂL$$ÂSÂCÂK
-9l$4tÂD$<ÂT$8ÂCÂ
-ÂSÂ3Ã_^][ÂÃ@ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂF^Â]Â¶\Ã=[
-]Ich[Â]ÂªJÃ>ÃTÃšTÃ¹T
-+TÂZÂÃ¬ÂÂ$SUVÂÂŽ$(WÂ¯ÃÃÃ PÃš3ÃÂÃ;ÃÂD$u_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃÃÂÂ$4ÂD$ÂÃHÂÂHÂ:ÂÃ»ÃD
- ÂÃŸÂÂŒ$0ÂÃ°;Ã±ÂL$ÂZÂÂŽ$$VÃšÂÂ$,ÂÃ3Ã­Â
-ÃÂÂ3Ã¿Â
-ÃvHÂÂ
-Ãt/ÂÃžt*ÂFÂHIÂHÂNÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂNÂŸAÂNÂD< G;Ã»rÂžÂÂ$<ÂL$ QRÃšÂÂÃÂ
-Ãt=ÂHÂD$EÂÂÃÂD$ÂÂ$(;ÃšÂwÃ¿Ã¿Ã¿ÂD$ÂÂ$,@;ÃÂD$ÂEÃ¿Ã¿Ã¿Ã©ÂÂT$RÃšÂÃÂžÃŸÃ¿Ã¿Ã¿_^][ÂÃÃ;Ã±ÂL$ÂjÂÂ$$SÃšÂÂ$,ÂÃÂ
-ÃÃD$
-ÂÃÂÂŒ$43Ã¶Â
-Ã¿vHÂÂ
-Ãt/ÂÃžt*ÂCÂHIÂHÂKÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂKÂŸAÂKÂD4 F;Ã·rÂžÂÂ$03Ã¿Â
-ÃvJÂÂ¬$8ÂEÂt$ ÂÂÃ:u
-ÂÃtÂPÂÃ:VuÂÃÂÃÂÃuÃ 3ÃÃ«ÃÂÃÃ¿Â
-ÃtÂÂ$0GÂÃ
-;ÃžrÂœ;ÂŒ$0ÂCÂD$ÂL$
-AÂ8ÂÃÂD$ÂÂ$(;ÃÂL$
-Â"Ã¿Ã¿Ã¿ÂD$ÂÂ$,@;ÃÂD$ÂÃªÃŸÃ¿Ã¿Ã©HÂÂ¬$0Â¹3ÃÂ|$ Ã³Â«3Ã¿Â
-Ã­vIÂÂ$8Â
-ÂŸÂtÂ ÂDÂ Â
-ÃujhÃšÂÃÂÂ
-ÃÂÂÂ3ÃÂWGÂHÂÂÃ;ÃœfÂHrÂŸÂÂ$,ÃD$Â
-ÃÂFÂÂŽ$$Â\$VÃšÂÂ$,ÂÃ3Ã­Â
-ÃÂ	ÂÂ
-ÃtnÂÃžtiÂFÂPJÂPÂFÂHÂ
-Ã|HÂ3ÃÂAÂÃºÂÃ«RÂt$ Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«ÂL$QÃšÂÃÂžÃœÃ¿Ã¿Ã¿_^][ÂÃÃPÃšÂÃÂÃžÃ«
-+ÂFÂŸ8@ÂFÂ
-Ã¿ÂÃ¹ÂÃ¿ÂÃ­ÂÂ
-Ãt/ÂÃžt*ÂFÂHIÂHÂNÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂNÂŸAÂNÂ
-Ã~o=}hÂLÂŒ Â
-Ãt`fÂAfÂ
-ÃtW%Ã¿Ã¿ÂÃHEÂCÃŒÂÂ$(;ÃšÂÃ·ÃŸÃ¿Ã¿ÂD$ÂÂ$,@;ÃÂD$ÂÃ
-ÃŸÃ¿Ã¿Ât$ Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«Ã©eÂt$ Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«ÂD$PÃšÂÃÂžÃŸÃ¿Ã¿Ã¿_^][ÂÃÃÂt$ Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«ÂL$QÃšÂÃÂžÃŸÃ¿Ã¿Ã¿_^][ÂÃÃÂÂŽ$0Â¹Â3ÃÂ|$ Â
-Ã¶Ã³Â«v
-ÂÂ$8Â93ÃÂP@ÂÂÃ;ÃfÂT\ rÃªÂÂ$,3Ã­Â
-ÃÂÂ©ÂÂŽ$$Â\$VÃšÂÂ$,ÂÃ3Ã¿Â
-ÃvxÂÂ
-Ãt/ÂÃžt*ÂFÂHIÂHÂNÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂNÂŸAÂNÂ
-ÃÂÃºÃŸÃ¿Ã¿=ÂÃ¯ÃŸÃ¿Ã¿fÂDD fÂ
-ÃÂÃ¡ÃŸÃ¿Ã¿%Ã¿Ã¿ÂÃHGÂCÃŒÂÂ$(;ÃžrÂÂÂ$,E;ÃšÂbÃ¿Ã¿Ã¿ÂÂ$@ÂT$_^]Â3Ã[ÂÃÃÂÂÂÂÂÂÂÂ DÂÃCdQT}ÃCÃE
-rTÂ
-TÂCÃ³CgTÂTÂTÃ
-TÃTBÂCÃžc.fileÃŸÃ¿gparse.c@comp.idÃš
-+Ã¿Ã¿.drectvePpE2Â.data.dataÂ¶Ã£Ãµ!.data`ÃœÂŒ*%.dataR.Â²Ã¶9.dataÃªSÃN.data5*b.textÃ°'wÃÂv $L53108RÂ .data	QÃÂ	$L53103".data
-+	Ã<ÂGÂº
-+$L53098Ã.data
-Ã­Â"SÃ
-$L53093Â.data
-lÃ°
-Ã¯
-$L53088U$L53469Ã$L53468Ã _strchr .data
-ÃÂŠZ
-% _strncmp .dataÂ|eÂ¬/H U .debug$FÂ©ÃÂ.text0
-ÂÃe` p .dataÂ¢$ÂÂÂÂ __filbuf Â§ ÂŒ .debug$F0KJ5.textÃ.Â§ItfÃ Ã¥ _strncpy __pctypeÃž  .data
-+ÃªÃÂ©ÃŽ&_free B .debug$FÃ³ÂÂ¥r.textÂ 9Ã2ÃŸP ^ p Â Â .debug$FÂC0Â.textv\tÃµÂ Âª .debug$FÂ·_xpmColorKeys??_C@_01IJJ@c?$AA@??_C@_01KCMF@g?$AA@??_C@_02EPGO@g4?$AA@??_C@_01KDFD@m?$AA@??_C@_01KBOJ@s?$AA@_xpmParseValues_xpmNextString??_C@_0BB@OCOG@_chars_per_pixel?$AA@??_C@_08OLGI@_ncolors?$AA@??_C@_07BLIB@_height?$AA@??_C@_06IKHH@_width?$AA@??_C@_07GIIJ@?$CDdefine?$AA@_xpmatoui??_C@_06BGFG@XPMEXT?$AA@_xpmNextWord_xpmNextUI_xpmParseColors_xpmFreeColorTable??_C@_01FCOA@?5?$AA@_xpmHashIntern_boundCheckingMalloc_boundCheckingCalloc_xpmParseExtensions_XpmFreeExtensions__isctype___mb_cur_max_boundCheckingRealloc??_C@_09IGJF@XPMENDEXT?$AA@_xpmGetString_xpmParseData_xpmHashTableFree_xpmHashTableInit_xpmGetCmt_xpmParseHeader_ParsePixels_xpmHashSlotWrFFrBuf.obj/   1345987753              100666  743       `
-+LÂ©$:PÂ.drectvePÂŽ
-+.textPT P`.data|@0Ã.debug$F~ÂHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂD$VhPÃšÂÃ°ÂÃÂ
-Ã¶uÂÃÃ¿^ÃÂT$
-WÂÃºÂÃÃ¿3ÃVÃ²Â®Ã·ÃIjQRÃšVÂÃžÃšÂÃÂÃHÃ·Ã_^ÃÃÂÂ
-
-
-+5	=wN.fileÃŸÃ¿gWrFFrBuf.c@comp.idÃš
-+Ã¿Ã¿.drectvePCÂÃ.textP&:Â£ _fclose _fwrite _fopen .data1Ã¯~`
-.debug$F/_XpmWriteFileFromBuffer??_C@_01LLF@w?$AA@
-+simx.obj/       1345987753              100666  5012      `
-+L!Â©$:PÂ¶
-].drectveP<
-+.textÂÂ P`.debug$FÂŠÂ¶HB.text ÃÃ  P`.debug$FÃªÃºHB.text $ P`.debug$F.>HB.textH P`.debug$FXhHB.textr P`.debug$FÂÂHB.text0ÂÃ P`.debug$FÃÃŠHB.textÃ° P`.debug$FHB.textÂÂª P`.debug$FÂŸÃHB.text@Ã	 P`.debug$FÂ€	ÂŽ	HB.text@ÂŸ	 P`.debug$FÃŸ	
-+HB.text
-+ P`.debug$F(
-+8
-+HB.text0B
-+ P`.debug$Fr
-+Â
-+HB.textÂ
-+ P`.debug$FÂ
-+Â¬
-+HB.textPÂ¶
-+
- P`.debug$F
-*
-HB.text4
-D
- P`.debug$FN
-^
-HB.text h
-Â
- P`.debug$FÂ
-Â¬
-HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂD$PÃšÂÃÃÂÂÂD$ÂL$PQÃšÂÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ
-
-ÂD$ÂL$PQÃšÂÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ
-3ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ3ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ
-SVÂt$
-WÂ=j
-ÂPÃ¿ÃÂjQÂÃÃ¿Ã_ÂÃ^[ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ	$##3ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ)ÂD$
-ÂÃ¬Â
-ÃtrÂ8#uÂL$ÂT$QÂL$RQPÃšÃ«ÂT$ÂL$RÂT$QRPÃšÂÃÂ
-Ãt:ÂL$ÂT$ÂD$S3Ã%Ã¿ÂÃ¹ÂÃÃÃ£
-ÃÂD$
-ÂÂ\$ÂXÂPÂHÂž[ÂÃÃ3ÃÂÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ!48/Â.VÂt$Â
-Ã¶WÂ$Â>#Â
-ÂÃŸÂÃÃ¿3ÃÃ²Â®Ã·ÃIÂÃ¹u;ÂŸFPÃšÂL$ÂÂŸVRÃšÂL$
-ÂÂŸVRÃšÂL$$ÂÃ
-Â_Âž^ÃÂÃ¹uWÂŸVRÃšÂÃžÂŸFPÃÃ§ÃšÂL$ÃžÂ9ÂŸVRÃšÂÃžÂŸFPÃÃ§ÃšÂL$$ÃžÂ9ÂŸVRÃšÂÃžÂŸFÃÃ§Ã«ZÂÃ¹
-unÂŸVRÃšÂÃžÂŸFPÃÃ§ÃšÂL$ÃžÂ9ÂŸVRÃšÂÃžÂŸFPÃÃ§ÃšÂL$$ÃžÂ9ÂŸV	RÃšÂÃžÂŸF
-+ÃÃ§PÃšÂL$0ÂÃÃžÂžÂ9_^Ã_3Ã^ÃÂÂÂÂÂÂÂÂÂ.9>9N9n9}9Â9Â9Â°9Ã9Ã9Ã«9Ãº9
-9974ÂD$ÂÃž0|	ÂÃž9ÂÃÃÃÂÃža|	ÂÃžfÂÃÂ©ÃÂÃžA|	ÂÃžFÂÃÃÃ3ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ19ÂžÃÂÂÂÂÂÂÂÂÂÂ>ÂL$ÂD$
-Â
-Ã~ÂÂP3ÃÂPÂPÂÃÃªÂPÂÃIuÃ¥ÃÂÂÂÂÂÂÂÂ(C3ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂHVjÃšÂÃ°ÂÃÂ
-Ã¶t.SÂ\$(UÂl$(WÂ|$
-jWjSUÃ¿Â~
-Ân_ÂÂ^]ÂÃ[^ÃÂÃ^ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ)NC
-+MÂD$Â
-ÃtPÃšYÃ
-+TSVÂt$Â
-Ã¶tÂPÃ¿VÃšÂÃ^ÃÂÂÂZS
-Y.fileÃŸÃ¿gsimx.c@comp.idÃš
-+Ã¿Ã¿.drectveP.textÂÃ)Ãª _malloc .debug$F.text %cÃžÃ« _calloc .debug$F.text %cÃžÃ«. _realloc .debug$F.textÃÃÂ©Â
-D .debug$F	.text
-+ÃÃÂ©Â
-T
-+ .debug$F
-Â'k
-+.text
-0Ã¥?d
- s .debug$F
-
-.textÃÃÂ©Â
-Â .debug$FÃÂ¢5.textÂ
-JÃ
-Â Â© .debug$F.text@AÃÂ»ÂŒ .debug$F.text@ÃµÃ°Ãµ^Ã .debug$F.textÂÃMÂÃ .debug$F.text0Ã³Ã\Ã£ .debug$F.textÃÃÂ©Â
-Ã± .debug$FOÂœNÂ.text
-PÃOÃÃŸÃŸ
- 
- .debug$F
-
-.text
-WÂ£Â#
- _free .debug$FÃÂsÃ
-.text  ÂÂœ3/  > .debug$F! T_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc_XDefaultVisual_XDefaultScreen_XDefaultDepth__imp__GetDeviceCaps@8_XDefaultColormap_XParseColor_xpmGetRGBfromName_rgbFromHex_hexCharToInt_XAllocColor_XQueryColors_XFreeColors_XCreateImage__imp__CreateBitmap@20_XImageFree_XDestroyImage__imp__DeleteObject@4scan.obj/       1345987753              100666  5137      `
-+LÂ©$:PÃ
->.drectvePÂŒ
-+.data
-@0Ã.data]@0Ã.text wÂ
- P`.debug$F)HB.textÂ3Ã P`.debug$FÃÃHB.text@Ã§ P`.debug$F'7HB.textÃ°A1 P`.datam@0Ã.debug$FrÂHB.textÂ Â,
- P`.dataÃª
-@0Ã.debug$FÃž
-
-HB.textÂ
-Â
- P`.debug$FÂŠ
-Â¶
-HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 
-+ .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|ÂÃ¬ÂD$ SUVÂt$0W3Ã­3Ã¿3Ã;Ã
-Âl$Âl$Âl$ÃD$
-Âl$ Âl$$tÂxÂXÃ«
-+;ÃµtÂ~Â^ÂL$<;ÃtÂÂš uÃ¶Ãt	ÂA ÂD$4Ã«Âl$4ÂÃjÂ¯ÃQÃšÂÃ;Ã
-ÂD$u
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©ÂT$
-ÂÂPÃšÂÃ;Ã
-ÂD$u
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©Ã³;ÃµÂl$,t ÂL$hQSWVUÃšÂÃ°ÂÃÂ
-Ã¶Â
-ÃÂD$0Â
-Ãt ÂT$hRSWPUÃšÂÃ°ÂÃÂ
-Ã¶Â
-Â¡ÂD$ jPÃšÂÃÂD$Â
-Ãu
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©ÂÂL$ Âž\;ÃÂºvÂ4@ÃÃŠ+Ã°ÃÃŠÂÃB;ÃwÃ®9T$4sÂT$4ÂD$$Â
-Ãt!ÂL$<ÂT$4ÂD$QRPÃšÂÃ°ÂÃ
-Â
-Ã¶u-ÂL$ ÂT$<ÂD$4RÂT$(PÂD$
-RPQÂL$$QUÃšÂÃ°ÂÃ
-Â
-Ã¶tD3Ã­ÂD$;Ã
-t	PÃšÂÃÂD$;Ã
-t	PÃšÂÃÂD$;Ã
-tÂT$ RPÃšÂÃÂÃ_^][ÂÃÃÂD$8ÂL$4ÂT$ ÂHÂL$ÂP
-ÂT$Â8ÂXÂHÂPÂD$PÃšÂÃ3Ã_^][ÂÃÃpÂÂŒ
-Ã9Ã€Ã®9f!Â*Â¬ÂœÃ 
-ÂT$
-SUVÂWÂ
-Ãt
-_^]Ã3Ã[ÃÂt$Âl$Â^
-Â~Â;Ã»ÂÂ¹s
-9(tGÂÃ;Ã»rÃŽ;Ã»u9ÂF;Ãr&ÃÂFÃÃ PQÃšÂÃÂ
-Ãu
-+_^]Âž[ÃÂT$
-ÂÂÂ,ÂÂF
-@ÂF
-Â:_^]3Ã[ÃÂÂÂÂÂÂÂÂÂÂÂÂTÂÂD$Â
-Ãu'ÂD$Â¹ÂP
-Â
-ÃuÂÂH
-ÃÂHÂD$
-Â3ÃÃÂL$
-3ÃÃÃÂÂÂÂ<
-SUVÂt$WÂFPÃšÂl$ÂÃÂÃÂ
-ÃÂEu
-+_^]ÂžÃœÃ¿Ã¿Ã¿[ÃÂ¡3ÃAÂÃŸÂÂAÃ¿v'NÃ·ÃÂžÃBÂ²Â¿\Ã·Ã¢ÂÃ3ÃÃÃšÃ·Ã·Â¡ANÂÂAÃ¿uÃÂD$
-ÃÂ
-ÃtcÂÂÃÂÃ¢ÂuÃ¶Ã
-tRÂHTÂÃ¹ÂtGÂ
-Ãt
-ÂPDÂ
-IÂ
-ÃÃ«Â@DÂ
-ÂÂÃÂ¿Âu+ÃÂ3Â
-ÃtPÃšÂÃÂÂ
-Ãt$GÂÃÂÃ¿vÃ¡_^]3Ã[ÃhÃšÂÃÂEÂ
-ÃuÃ¥_^]ÂžÃœÃ¿Ã¿Ã¿[Ã
-,VÂµ%Ã$Ã%NoneÃ°!ÂÃ¬$SÂÂ$DUVW3Ã¿;ÃÂ|$$Â|$ t
-+Ã¶tÂCÃ«ÂÂŽ$8VÃšPVÃšÂÃ
-ÂÂŽ$HÂD$;Ã·t1ÂÂ$<ÂÂ$@ÂÂ$DÂÃIÂÃÂÂ$<ÂÂ$@ÂÂ$DÂÂ$@ÂÃRÃšÂÃ;ÃÂD$
-u_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃ$ÃÂÂ$<ÂÃšÂL$ÂÂ$@Â
-ÃÂÃ
-ÂÂ$LÂCPÃšÂT$ÂÃÂÃÂ
-ÃÂÂÃžÂÃ3ÃÂ»\Ã·Ã³Â¡ÂÂ$LAÂÃ»ÂÂAÃ¿v<KÂ\$ÂÃÂžÃBÂ²+ÃÃ·Ã£ÂÃ3ÃÃÃšÂ»\Ã·Ã³Â¡AÂÂAÃ¿ÂD$HÂD$uÃÂÂ$LÂÂ$DÃGFÂÂÃÂMÂL$ÂÂ$DÂÂ$@ÂÃÂÃ
-;ÃžÂL$ÂMÃ¿Ã¿Ã¿ÂÂ$PÂD$
-ÂÂ$@ÂT$QPÂÂ$@RPÃšjjÃšÂÃÂÃšÂ
-ÃÂl$tcÂÃ¶ÃÂt;ÂKDÂs@ÂS$ÂCTÂL$0Ât$ ÂT$ÂD$Ã«BÂT$
-RÃšÂÃÂžÃœÃ¿Ã¿Ã¿_^][ÂÃ$ÃÃ¶Ãt
-ÂKDÂS@ÂC$ÂL$$ÂKTÂT$ ÂD$ÂL$Ât$ ÂÂ$@ÃD$,Â
-ÃÂÂÂ$<ÂD$
-ÂzÂXÂ|$(Â
-Ã¶tx3Ã3ÃÂ
-Ã¶v"ÂT$;D$uÂ¹Ã«
-ÂÃš+Ã©Â,Âª;kÃ»t@;ÃrÃ¢;ÃtFÂL$$Â
-ÃtÂÂÃ«
-+ÂT$0Â
-@ÂÃ+ÃÂwÃ°ÂœÂxÂ7Â
-Ãt
-PÃšÂÃÂÂÃMuÃšÂt$ Â|$(Ã«fÂl$Â
-Ã­t+3Ã3ÃÂCÂ
-3ÃPÂSÃ¿QRUjÃšÂÃÂ
-Ãt
-PÃšÂÃÃ«-3Ã3ÃÂCÂ
-3ÃPÂSÃ¿QRÂD$@hPÃšÂL$HQÃšÂÃÂ
-ÃÂtHÂD$,ÂÂ$@Âl$@ÂÃÂÃ;ÃÂD$,Â|$(ÂÃŒÃŸÃ¿Ã¿ÂD$
-PÃšUjÃšÂÃ
-3Ã_^][ÂÃ$ÃÂT$
-RÃšUjÃšÂÃ
-ÂžÃœÃ¿Ã¿Ã¿_^][ÂÃ$ÃÂ2493ÂÃÃº0Â§2Â°1Ã¬Â³%Ã©0Ã¶%/,%%^f+ÂÂ+#%02x%02x%02xÂÂ*ÂD$ÂT$SUÂÂl$
-ÂVWÂ}QPÃ¿ÂD$ 3ÃÂ
-Ãv<ÂD$
-3Ã¶Â
-Ãv)ÂL$SVÂRÃ¿WUPÃ¿T$4ÂÃ
-Â
-Ãu
-ÂD$
-FÂÃ;Ã°rÃÂD$ C;ÃrÃ_^]3Ã[Ã_^]ÂžÃœÃ¿Ã¿Ã¿[ÃÂÂÂÂÂÂÂÂÂÂ;>:v9.fileÃŸÃ¿gscan.c@comp.idÃš
-+Ã¿Ã¿.drectvePN
-ÂžÃ.data.data]6kHÂ.text 
-ZÂ¹Ã¹c  _free Â Â§ .debug$FeJ.textÂÂœprÃ³ÂŒ Ã .debug$F.text@Ã±ÂšÃ¹ÂÃ .debug$F	ÃÃ~y.text
-+Ã°
-+iÃ£bÃ®
-+ .data
-ÂµxEÃ
-_strdup .debug$F
-XYÃ·\
-+.text
-Â Â Â @
- + _sprintf .dataÃÂÃ2<i x Â Â Â© .debug$FP}]Â
-.textÂÂÃSÂžÂ¹ Ã Ã .debug$FÃµ_printable??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@_XpmCreateXpmImageFromImage_xpmFreeColorTable_boundCheckingMalloc_boundCheckingCalloc_storePixel_boundCheckingRealloc_storeMaskPixel_ScanTransparentColor??_C@_04COF@None?$AA@_ScanOtherColors_xpmFreeRgbNames??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@_xpmGetRgbName_xpmReadRgbNames_XQueryColors_XDefaultColormap_XDefaultScreen_MSWGetImagePixels__imp__GetPixel@12__imp__SelectObject@8
-+rgb.obj/        1345987753              100666  36745     `
-+LÃµÂ©$:P2BÃ€.drectveP\&
-+.data\Â¬&.Ãª@@Ã.data
-,7@0Ã.data87@0Ã.data
-?7@0Ã.dataJ7@0Ã.dataP7@0Ã.data
-+V7@0Ã.data`7@0Ã.data
-+g7@0Ã.data
-q7@0Ã.data}7@0Ã.dataÂ7@0Ã.dataÂ7@0Ã.data
-+Â7@0Ã.data
-Â7@0Ã.dataÂŠ7@0Ã.data
-+Â«7@0Ã.data
-+Âµ7@0Ã.dataÂ¿7@0Ã.dataÃ7@0Ã.data	Ã7@0Ã.data	Ã7@0Ã.data
-Ã 7@0Ã.dataÃ«7@0Ã.data
-Ã²7@0Ã.data
-+ÃŸ7@0Ã.data
-+8@0Ã.data8@0Ã.data8@0Ã.data
-
-8@0Ã.data(8@0Ã.data-8@0Ã.data28@0Ã.data
-+78@0Ã.data
-A8@0Ã.dataL8@0Ã.dataZ8@0Ã.data
-+h8@0Ã.datar8@0Ã.dataÂ8@0Ã.data
-+Â8@0Ã.dataÂ8@0Ã.data
-+Â8@0Ã.dataÂ¢8@0Ã.data	Âª8@0Ã.dataÂ³8@0Ã.data
-Âž8@0Ã.data	Ã8@0Ã.data
-+Ã8@0Ã.data
-+Ã8@0Ã.data
-Ã¡8@0Ã.dataÃ®8@0Ã.dataÃŸ8@0Ã.data9@0Ã.data 9@0Ã.data09@0Ã.data
-?9@0Ã.data
-L9@0Ã.dataY9@0Ã.datai9@0Ã.data
-{9@0Ã.dataÂ9@0Ã.dataÂ9@0Ã.dataÂ9@0Ã.dataÂŠ9@0Ã.data
-+Â¬9@0Ã.data
-Â¶9@0Ã.dataÃ9@0Ã.dataÃ9@0Ã.dataÃ 9@0Ã.data
-Ã¯9@0Ã.dataÃŒ9@0Ã.data
-
-+:@0Ã.data
-+:@0Ã.data
-+ :@0Ã.data*:@0Ã.data?:@0Ã.data
-+N:@0Ã.data
-X:@0Ã.data
-+c:@0Ã.data
-m:@0Ã.data
-+z:@0Ã.dataÂ:@0Ã.data	Â:@0Ã.dataÂ:@0Ã.dataÂ¡:@0Ã.data
-+Â§:@0Ã.dataÂ±:@0Ã.data	Â¹:@0Ã.data
-Ã:@0Ã.dataÃ:@0Ã.dataÃ:@0Ã.dataÃ:@0Ã.dataÃ¢:@0Ã.dataÃ©:@0Ã.dataÃ°:@0Ã.dataÃ·:@0Ã.dataÃŸ:@0Ã.data;@0Ã.data
-;@0Ã.data;@0Ã.data;@0Ã.data ;@0Ã.data';@0Ã.data.;@0Ã.data5;@0Ã.data<;@0Ã.dataC;@0Ã.dataJ;@0Ã.dataQ;@0Ã.dataX;@0Ã.data_;@0Ã.dataf;@0Ã.datal;@0Ã.datas;@0Ã.dataz;@0Ã.dataÂ;@0Ã.dataÂ;@0Ã.dataÂ;@0Ã.dataÂ;@0Ã.dataÂ;@0Ã.dataÂ€;@0Ã.dataÂ«;@0Ã.dataÂ²;@0Ã.dataÂž;@0Ã.dataÂ¿;@0Ã.dataÃ;@0Ã.dataÃ;@0Ã.dataÃ;@0Ã.dataÃ;@0Ã.dataÃ¢;@0Ã.dataÃ©;@0Ã.dataÃ°;@0Ã.dataÃ·;@0Ã.dataÃŸ;@0Ã.data<@0Ã.data
-<@0Ã.data<@0Ã.data<@0Ã.data <@0Ã.data'<@0Ã.data.<@0Ã.data5<@0Ã.data<<@0Ã.dataC<@0Ã.dataJ<@0Ã.dataP<@0Ã.dataW<@0Ã.data^<@0Ã.datae<@0Ã.datal<@0Ã.datas<@0Ã.dataz<@0Ã.dataÂ<@0Ã.dataÂ<@0Ã.dataÂ<@0Ã.dataÂ<@0Ã.dataÂ<@0Ã.dataÂ£<@0Ã.dataÂª<@0Ã.dataÂ±<@0Ã.dataÂž<@0Ã.dataÂ¿<@0Ã.dataÃ<@0Ã.dataÃ<@0Ã.dataÃ<@0Ã.dataÃ<@0Ã.dataÃ¢<@0Ã.dataÃš<@0Ã.dataÃ¯<@0Ã.dataÃ¶<@0Ã.dataÃœ<@0Ã.data=@0Ã.data
-=@0Ã.data=@0Ã.data=@0Ã.data =@0Ã.data'=@0Ã.data.=@0Ã.data4=@0Ã.data;=@0Ã.dataB=@0Ã.dataI=@0Ã.dataP=@0Ã.dataW=@0Ã.data^=@0Ã.datae=@0Ã.datal=@0Ã.datas=@0Ã.data{=@0Ã.dataÂ=@0Ã.dataÂ=@0Ã.dataÂ=@0Ã.data
-+Â=@0Ã.dataÂ=@0Ã.data
-Â¢=@0Ã.data
-+Â­=@0Ã.data
-Â·=@0Ã.data
-Ã=@0Ã.data
-+Ã=@0Ã.data
-Ã=@0Ã.dataÃ€=@0Ã.data
-Ã¬=@0Ã.data	Ãž=@0Ã.data
->@0Ã.data
->@0Ã.data>@0Ã.data(>@0Ã.data
-6>@0Ã.data
-C>@0Ã.data
-N>@0Ã.data
-Y>@0Ã.datad>@0Ã.data
-+s>@0Ã.data
-+}>@0Ã.dataÂ>@0Ã.dataÂ>@0Ã.data	Â>@0Ã.dataÂ£>@0Ã.dataÂ²>@0Ã.data
-+Âž>@0Ã.data
-Ã>@0Ã.data
-+Ã>@0Ã.data
-+Ã>@0Ã.dataÃ¡>@0Ã.data
-Ã§>@0Ã.dataÃ²>@0Ã.dataÃ·>@0Ã.data?@0Ã.data
-?@0Ã.data?@0Ã.data?@0Ã.data
-?@0Ã.data
-*?@0Ã.data
-+7?@0Ã.textA?Q? P`.debug$F[?k?HB.textpu?Ã¥? P`.debug$F@@HB.text@
-@]A P`.dataÃ©A@0Ã.debug$FÃ®AÃŸAHB.textB P`.debug$FB(BHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES Ã°ÃžÃ¿ÃºÃ«Ã2Â¿ÃÃ°Ã¿Ã¿ÃµÃµÃÃ¿Ã€ÃÃ¿Ã«ÃÃ¿Â+Ã¢Â¥**ÃÂžÂ_ÂÂÃ¿Ãi
-Ã¿rV""ÂÃ¿ÃžÃÃ¿Ã¿ÂžÂ
-V-ÂœÂ·kUV/Ã¿ÂÂ ÂÃ©ÂzÂÂŒÂ8Kf/OOÂŠÂŠÂÃÃ¿ÂÂ¿Ã¿TTT
-ÂÃ¿Â##Ã¿ÃºÃ°PÂiÃÃÃÃžÃžÃ¿ÃÂªÃ¯ÃÂ~~~Ã¿Ã¿Ã¿
-
-
-!!!$$$&&&)))+++...000333666888;;;===@@@BBBEEEGGGJJJMMMOOORRRTTTWWWYYY\\\^^^aaaccc
-+
-+
-+fffiiikkknnnpppsssuuuxxxzzz}}}
-
-
-ÂÂÂÂ
-Â
-Â
-ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ¡Â¡Â¡Â£Â£Â£ÂŠÂŠÂŠÂšÂšÂšÂ«Â«Â«Â­Â­Â­Â°Â°Â°Â³Â³Â³ÂµÂµÂµÂžÂžÂžÂºÂºÂºÂœÂœÂœÂ¿Â¿Â¿ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃ Ã Ã Ã£Ã£Ã£Ã¥Ã¥Ã¥ÃšÃšÃšÃ«Ã«Ã«Ã­Ã­Ã­Ã°Ã°Ã°Ã²Ã²Ã²ÃµÃµÃµÃ·Ã·Ã·ÃºÃºÃºÃŒÃŒÃŒÃ¿Â­Ã¿/Ã°Ã¿Ã°Ã¿iÂŽk99Ã¿Ã¿Ã°Â³Â³~ÃŠÃŠÃºÃ¿Ã°Ãµ|ÃŒÃ¿ÃºÃÂ°Ã¢Ã¿Ã°ÂÂÃ Ã¿Ã¿Ã®ÃÂÃºÃºÃÂšÂšÂšÃ¿Â¶ÃÃ¿Â z Â²ÂªÂÃÃºÂpÃ¿wÂÂ|ÂÃÃ¿Ã¿Ã Â¯ÃºÃ°ÃŠÃ¿Ã¿ÂRÂÂ22Ã2ÂKÃÃfÂœRÂœÂpÃ4wfjjÂ#Â#ÃÃÃ y//dÃµÃ¿ÃºÃ¿Ã€Ã¡Ã¿Ã€ÂµÃ¿ÃÂ­##u##uÃœÃµÃŠkÂ#Ã¿ÂÃ¿EÃ¯ÂÃ¯Ã®ÃšÂªsÃxÂ¯Ã®Ã®ÃpÂÃ¿Ã¯ÃÃ¿ÃÂ¹ÃÂ
-?Ã¿ÂµÃ
-Ã
-HÂÂ°Ã ÃŠÂ  Ã°Ã¿ÂŒÂÂAiÃ¡ÂEÃ©ÂzÃŽÂ€`RÂÂÃ¿ÃµÃ®ÂR-rÂÃ¿~ÂÂ«pÂÂÃ¿ÃºÃºAÂ¬ATpÂªÃÂžÂÃÂ¿ÃÃ¿cGÃÃÂ>ÃÃ³>ÂÃµÃÂ³Ã¿Ã¿Ã¿ÃµÃµÃµÃ¿Ã¿2Ã8ÃªÃÃÃÂœ Âº(Â·0ÂŽ8Â±@Â®HÂ«PÂšXÂ¥`Â¢hÂpÂxÂÂÂÂÂÂÂÂÂÂ ÂÂšÂÂ°ÂÂžÂÃ~Ã{ÃxÃuÃ rÃšoÃ°lÃžifc`] Z(W0T8Q@NHKPHXE`Bh?p<x9Â6Â3Â0Â-Â *Âš'Â°$Âž!Ã
-ÃÃÃÃ ÃšÃ°
-Ãž	Ãœ Ãº(Ã·0ÃŽ8Ã±@Ã®HÃ«PÃšXÃ¥`Ã¢hÃpÃxÃÂÃÂÃÂÃÂÃÂ ÃÂšÃÂ°ÃÂžÃÃÂŸÃÂ»ÃÂžÃÂµÃ Â²ÃšÂ¯Ã°Â¬ÃžÂ©ÂŠÂ£Â Â Â(Â0Â8Â@ÂHÂPÂXÂ
-`Âhp|xyÂvÂsÂpÂmÂ jÂšgÂ°dÂžaÃ^Ã[ÃXÃUÃ RÃšOÃ°LÃžIFC@= :(70481@.H+P(X%`"hp
-xÂÂÂÂ
-Â 
-+ÂšÂ°ÂžÃÃŸÃÃ»ÃÃžÃÃµÃ Ã²ÃšÃ¯Ã°Ã¬ÃžÃ©ÃŠÃ£Ã Ã Ã(Ã0Ã8Ã@ÃHÃPÃXÃ
-`ÃhÂ¿pÂŒxÂ¹ÂÂ¶ÂÂ³ÂÂ°ÂÂ­Â ÂªÂšÂ§Â°Â€ÂžÂ¡ÃÂÃÂÃÂÃÂÃ ÂÃšÂÃ°ÂÃžÂÂÂÂ} z(w0t8q@nHkPhXe`bh_p\xYÂVÂSÂPÂMÂ JÂšGÂ°DÂžAÃ>Ã;Ã8Ã5Ã 2Ãš/Ã°,Ãž)&# 
- (08@H
-YellowGreenYellowWhiteSmokeWhiteWheatVioletRedVioletTurquoiseTransparenttomatoThistleTanSteelBlueSpringGreensnowSlateGraySlateBlueSkyBlueSiennaseashellSeaGreenSandyBrownSalmonSaddleBrownRoyalBlueRosyBrownRedpurplePowderBluePlumPinkperuPeachPuffPapayaWhipPaleVioletRedPaleTurquoisePaleGreenPaleGoldenrodOrchidOrangeRedOrangeOliveDrabOldLaceNavyBlueNavyNavajoWhitemoccasinMistyRoseMintCreamMidnightBlueMediumVioletRedMediumTurquoiseMediumSpringGreenMediumSlateBlueMediumSeaGreenMediumPurpleMediumOrchidMediumGoldenrodMediumForestGreenMediumBlueMediumAquamarineMaroonMagentalinenLimeGreenLightYellowLightSteelBlueLightSlateGrayLightSlateBlueLightSkyBlueLightSeaGreenLightSalmonLightPinkLightGrayLightGoldenrodYellowLightGoldenrodLightCyanLightCoralLightBlueLemonChiffonLawnGreenLavenderBlushlavenderKhakiivoryIndianRedHotPinkhoneydewGreenYellowGreenGray99Gray98Gray97Gray96Gray95Gray94Gray93Gray92Gray91Gray90Gray9Gray89Gray88Gray87Gray86Gray85Gray84Gray83Gray82Gray81Gray80Gray8Gray79Gray78Gray77Gray76Gray75Gray74Gray73Gray72Gray71Gray70Gray7Gray69Gray68Gray67Gray66Gray65Gray64Gray63Gray62Gray61Gray60Gray6Gray59Gray58Gray57Gray56Gray55Gray54Gray53Gray52Gray51Gray50Gray5Gray49Gray48Gray47Gray46Gray45Gray44Gray43Gray42Gray41Gray40Gray4Gray39Gray38Gray37Gray36Gray35Gray34Gray33Gray32Gray31Gray30Gray3Gray29Gray28Gray27Gray26Gray25Gray24Gray23Gray22Gray21Gray20Gray2Gray19Gray18Gray17Gray16Gray15Gray14Gray13Gray12Gray11Gray100Gray10Gray1Gray0GrayGoldenrodGoldGhostWhitegainsboroForestGreenFloralWhiteFirebrickDodgerBlueDimGrayDeepSkyBlueDeepPinkDarkVioletDarkTurquoiseDarkSlateGrayDarkSlateBlueDarkSeaGreenDarkSalmonDarkOrchidDarkOrangeDarkOliveGreenDarkKhakiDarkGreenDarkGoldenrodCyancornsilkCornflowerBlueCoralchocolatechartreuseCadetBlueburlywoodBrownBlueVioletBlueBlanchedAlmondBlackBisqueBeigeAzureAquamarineAntiqueWhiteAliceBlueÂ¡ÃÂÂÂÂÂÂÂÂÂÂÃSUÂ-V3Ã¶WÂ
-Ã­~?ÂT$$Â|$
-Â¹ÂÂÃÂÃ£Ã¿;Ãu
-3ÃÂÃÂÃ£Ã¿;\$ u
-ÃÃš%Ã¿;ÃtFÂÃ;Ãµ|Ã_^]3Ã[ÃÂÃµ_^][ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂYbÃÂD$SUVWPÃšÂÃžj WÃšÂÃ
-Â
-Ãt!Â8t
-ÂHÂÂH@ÂÃuÃ³j WÃšÂÃÂ
-ÃuÃÂÂÃ·ÂÃtÂŸÃRÃšÂÃÂÂFFÂÃuÃªhWÃšÂÃÂ
-ÃtÃ@aÂ¡3Ã­ÂXÃ¿ÂÃÂ+ÃÂÃ°ÃÃŸÂ
-ÃµQWÃšÂÃÂ
-Ãt-}Â^Ã¿Ã«Ân;Ã«eÂ+Â+ÃÂÃ°ÃÃŸÂÃµRWÃšÂÃÂ
-ÃuÃÂÃµÂT$ÂÃWÂÃ¡Ã¿Â
-+ÂT$ 3ÃÂÃÂÃ¡Ã¿Â
-+ÂL$$ÃÃš%Ã¿ÂÃšÂÃÂž_^][ÃÂT$ÂD$
-ÂL$ WÃÃ¿ÃÃÃšÂÃÂž_^][Ã
-+ÃÃ5ÃMÃ_ÃeÃuÂÂÃÂ·ÂŸÃÃÃŸÃ/Ãgrey@ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÃ¡.fileÃŸÃ¿grgb.c@comp.idÃš
-+Ã¿Ã¿.drectvePÃµZ6.data\ÃªÂ¶Ãz_X.data
-Â³Q
-Ã¹%.dataVÂÂ³Ã D.data
-'ÃF].data$Ã£ÂÂµ{.data
-wÂ¶Â.data
-+ÃÃ­Ãµ{Âª.data	Â#Ã	.data
-+
-+V`?ÃŠÃ
-+.data
-
-ÃÃXÂžÃ»
-.data
-ÃÃ Â²
-.data
-^Â¡ÂŠE3
-.dataÃÃ¶M.data
-+Ã¥ÃÂ¬Ãc.data
-Â¹
-.datay~FÂ.data
-+Ã©
-+&(Âµ.data
-+ÃÃ³XÂ­Ã.dataÃžÃFgÃ­.datayiBÂ.data	Â£DmÃ .data	ÂUÃÃ;.data
-Â
-rÂnV.datasPÃ®ÃŒt.data
-qÂ€Ã±UÂ.data
-+lÂ ÃÂ¬.data
-
-+ÃªÃmÃ
-.data
-A`Â.Ã€
-.data
-ÃÃ²Ã­Ãº
-.data
-Ã;&
-.data !8ÂÃ1 .data!#}ÂºH!.data"sÃÃ°_".data#
-+ÃWÃ¶v#.data$
-Ã³ÃÂ¹
-Â$.data%d>@ÂÂ°%.data&Ã£Â³Â
-Ã&.data'
-+Â±ÂÃ±'.data(wAÂ£
-(.data)'%>Â.).data*
-+}ÂÂ
-G*.data+Ã5Ãc+.data,
-+YÃXÂ¿|,.data-)tLcÂ-.data.	cÂ·Ã·Â°Â²..data/Â ÃÃÃ/.data0
-u.qÃ€0.data1	ayÃ±1.data2
-+ÂžÂ·ÃºÃ¢
-2.data3
-+Ã¿Â
-Â¢Ã:3.data4
-Ã¶Ã{V4.data5E_Ãv5.data6ÃÃ
-ÂÂ6.data7ÂI\$ÂŸ7.data8PAkÃÃ€8.data9Â*Â89.data:
-mÃ%Â¿*:.data;
-6KÃ€J;.data<V %Âj<.data=ÃÂ²UÃÂ=.data>
-'epÃ·ÂŽ>.data?Ã­Ã©Ã©Ã?.data@ÂVÃÂŸÃ·@.dataAÃšMÂ/A.dataBÃÂÂ
-*B.dataC
-+QÃÃ³ÃBC.dataD
-ErÃ^D.dataEÂÂ
-f}E.dataFÂOÂÂÂF.dataGÂµÂ¶ÃžÃG.dataH
-ÃÃ­Ã£Ã¢H.dataIÃ§4Â}I.dataJ
-`Â¡Â
-#J.dataK
-+"Ã¿<BK.dataL
-+ÃÂ»Â^L.dataMÂuÂ²zM.dataNÂ³ÃÂ¶DÂ£N.dataO
-+Â
-Â=Ã
-O.dataP
-<rNÃ¡P.dataQ
-+Ã­BÃ±ÂÃ¿Q.dataR
-Â€ÂÂ±8	R.dataS
-+P
-WÂ;	S.dataTÃŒÂŠÂ ÃW	T.dataU	ÂªÃÂ°x	U.dataVjÂ¢ÃºÂ¿Â	V.dataW)ÃÂ€ÂÂ«	W.dataX
-+Â¹Â€Â¢wÃ	X.dataYÂÂHÂ­Ã	Y.dataZ	Ãª<$Ã¹	Z.data[
-MÂ]ÃŠ
-+[.data\ÂšÃÃ(3
-+\.data]s
-PK
-+].data^24Id
-+^.data_Ãœ(ÂÃ}
-+_.data`ÂŒÂ
-ÃÂ
-+`.dataaJÂšÃŒÂ¯
-+a.datab>{Â³Ã¥Ã
-+b.datacÃ¹Ã­Ã²ÂªÃ¡
-+c.datadÂžÃÃ©Â³Ãº
-+d.datae{ÂÃÂ
-e.dataf:ÂŸÃÂ,
-f.datagxÃqGE
-g.datahDoÃQ]
-h.datai^ÃHv
-i.datajÃB\ÃÂ
-j.datakÂsGÃÂš
-k.datalH jÃœÃ
-l.datam	qÃ€Ã
-m.datanÃÂ0Â«Ã³
-n.dataoÂÂ¶+Â²
-
-o.datapLÃ¥Â%
-p.dataq
-Ã
-Â>
-q.datar9Ã¶j^W
-r.datasy(ÂZn
-s.datat8ÂCÂ
-t.datauÃ·ÃÂ 
-u.datavÂ¶4ÃÂ¹
-v.datawug6Ã¶Ã
-w.datax4V-Ã¯Ã«
-x.datayÃ³ÃlÂ 
-y.datazÂ²Ã±wÂ¹
-
-z.data{qÂ¢ZÂ6
-{.data|0ÂAÂO
-|.data}Ã¶ÃªÃ²Ãh
-}.data~NBA[
-~.datasZBÂ
-.dataÂÃoÃÃ
-Â±
-Â.dataÂÂ^ÃÃÃ
-Â.dataÂB
-ÃŽÃ·Ã£
-Â.dataÂ<Ã¯Ã®Ã»
-Â.dataÂÃÂªÂ®Â¡Â.dataÂ
-Â
-ÂÂµÂž-Â
-.dataÂFÃÂÂFÂ.dataÂÃ¹ÂÂ_Â.dataÂÂ·ÃÃ©ÃwÂ.dataÂÃŒYÂÂ.dataÂVÃ
-@ÂšÂ.dataÂÂÃÂÃÃÂ.dataÂÃÃ ÂÃÃÂ.dataÂÂ³Â²ÃµÃ³Â.dataÂZÂÂ©Ã¬
-Â.dataÂÂÃšÂ£%Â.dataÂÃ%Ã³Âº>Â.dataÂvÃÂWÂ.dataÂ^GÃ
-ÂpÂ.dataÂtÂÃÃ«ÂÂ.dataÂ ÂÃ
-XÂ¡Â.dataÂaÂ§ÃAÂºÂ.dataÂÂ®Â»FÃÃÂ.dataÂÃ¯Â]ÃÃ¬Â.dataÂ,ÃpÃŽÂ.dataÂmÃškÃ­
-Â.dataÂÂª~*Â¢7Â.dataÂÃ«O1Â»PÂ.dataÂ(
-
-ÂiÂ.dataÂi-ÂÂÂ.dataÂ5Â¹ÃÃ²ÂÂ.dataÂÂ¥ÂÂ]Â³Â.dataÂ Ã€Â±ÂDÃÂ .dataÂ¡+Â­	ÃÃ¥Â¡.dataÂ¢jÂÃÃŸÂ¢.dataÂ£Â©Ã?Ã±Â£.dataÂ€ÃšÃŸ$Ãš0Â€.dataÂ¥/heÂ§IÂ¥.dataÂŠnY~ÂŸbÂŠ.dataÂ§Â­
-+SÂ{Â§.dataÂšÃ¬;HÂÂÂš.dataÂ©Ã²/ÂÂœÂ­Â©.dataÂªÂÃªH\Ã
-Âª.dataÂ«ÃÃSEÃÂ«.dataÂ¬
-ÃÃÃÃ¶Â¬.dataÂ­]Ã¶ÃÃÂ­.dataÂ®ÂÂ¥ÃœÃ°'Â®.dataÂ¯ÃÂÃŠÃ©@Â¯.dataÂ°Â§ÂŠYÂ°.dataÂ±Y3ÂŒÂ¿rÂ±.dataÂ²Â`ÂÂÂÂ².dataÂ³ÃQÂÂÂ£Â³.dataÂŽÂ³
-Â
-Â€ÂŒÂŽ.dataÂµÃT^ÃÂµ.dataÂ¶ÂeGÃ¬Â¶.dataÂ·EyÂÃÂ·.dataÂžHÂÃ
-Âž.dataÂ¹ÃÂ»Ã²7Â¹.dataÂºÂ*Â Ã«PÂº.dataÂ»AÂŒÃ¡Â€iÂ».dataÂŒÂÃºÂœÂÂŒ.dataÂœÃÃÃÂÂÂœ.dataÂŸÃÂŽÂŸ.dataÂ¿ÂÃ¯ÃÂÃÂ¿.dataÃpMÂšÂÃ§Ã.dataÃ1|Â³ÂÃ¿Ã.dataÃÃŠÂ
-ÂÃ.dataÃ
-+ÃÂÃº.Ã.dataÃÃ«Ã¿ÃÃJÃ.dataÃ
-
-Ã²ÂÃŽ1aÃ
-.dataÃ
-+ÂqÃÃ.dataÃ
-CBÃªÂÃ.dataÃ
-ÃÃÃ«ÂÂºÃ.dataÃ
-+ÃÃÃÃ.dataÃ
-ÃÃµÃÃµÃ.dataÃCVÂÂÃ.dataÃ
-Ã¬|ÃÂ²-Ã.dataÃ	SÂ±Â€sLÃ.dataÃ
-ÂÃC
-gÃ.dataÃpÃÃÂ
-Ã.dataÃÃÃÂŠÃ.dataÃÃ¢ÂÂ¬ÂÃÃ.dataÃ
-zÂJÂÃšÃ.dataÃ
-Ã®ÂÃ·Ã.dataÃ
-Âºw^Â&Ã.dataÃ
-MgpÃDÃ.dataÃ]uÃ²7bÃ.dataÃ
-+Â¥
-wÂÃ.dataÃ
-+g}XÂÂ Ã.dataÃÃ€Ã§Ã¢ÃÂŒÃ.dataÃÂ±*Â»ÃÃ.dataÃ	Ã ÂŽÃŽÃ.dataÃ8ÂÃŠÃÃ.dataÃÃµuÃ
-Ã1Ã.dataÃ
-+kÂvIÃ.dataÃ
-=ÂšÂ³eÃ.dataÃ 
-+[Ãz:ÂÃ .dataÃ¡
-+ÂGÃ
-ÂÂÃ¡.dataÃ¢aÃÂ»Ã¢.dataÃ£
-ÂÃ³Ã£gÃÃ£.dataÃ€ÃvsÃ±Ã€.dataÃ¥ÃŸuCÃ¥.dataÃŠXfPQ*ÃŠ.dataÃ§}R.ÃBÃ§.dataÃšÂÂ©~[Ãš.dataÃ©ÃRxdsÃ©.dataÃª
-Â
-ÂÃª.dataÃ«
-Ã·1Â­Â©Ã«.dataÃ¬
-+Ã€ÂÃ¿ÃÃ¬.textÃ­*4ÃªÃ¥Ã­ .debug$FÃ®Ã­.textÃ¯pÃQnmÃ¶Ã¯ .debug$FÃ°[~$Ã¯.textÃ±@ÃÂ
-ÃÃ± _free  _strstr .dataÃ²>Ã
-Z'Ã²_tolower _strchr _strdup .debug$FÃ³Ã±.textÃŽ@ÂÃÃ>ÃŽ .debug$FÃµÃŽO_numTheRGBRecords_theRGBRecords??_C@_0M@DMAP@YellowGreen?$AA@??_C@_06NJCI@Yellow?$AA@??_C@_0L@DGFJ@WhiteSmoke?$AA@??_C@_05CGP@White?$AA@??_C@_05PPMO@Wheat?$AA@??_C@_09KMIH@VioletRed?$AA@??_C@_06BFLI@Violet?$AA@??_C@_09FGMF@Turquoise?$AA@??_C@_0M@BPCH@Transparent?$AA@??_C@_06PEAM@tomato?$AA@??_C@_07CGCE@Thistle?$AA@??_C@_03NJCN@Tan?$AA@??_C@_09IDAC@SteelBlue?$AA@??_C@_0M@FGPB@SpringGreen?$AA@??_C@_04NPOO@snow?$AA@??_C@_09BOEB@SlateGray?$AA@??_C@_09JEGE@SlateBlue?$AA@??_C@_07PBMA@SkyBlue?$AA@??_C@_06DFJB@Sienna?$AA@??_C@_08IBDC@seashell?$AA@??_C@_08MBEP@SeaGreen?$AA@??_C@_0L@GAGA@SandyBrown?$AA@??_C@_06NKLF@Salmon?$AA@??_C@_0M@IAHK@SaddleBrown?$AA@??_C@_09CLIF@RoyalBlue?$AA@??_C@_09LPFD@RosyBrown?$AA@??_C@_03GOGG@Red?$AA@??_C@_06MJKB@purple?$AA@??_C@_0L@MMBE@PowderBlue?$AA@??_C@_04OEDJ@Plum?$AA@??_C@_04OFAF@Pink?$AA@??_C@_04BAEF@peru?$AA@??_C@_09BKLN@PeachPuff?$AA@??_C@_0L@PNNL@PapayaWhip?$AA@??_C@_0O@PPGC@PaleVioletRed?$AA@??_C@_0O@FCA@PaleTurquoise?$AA@??_C@_09GMBI@PaleGreen?$AA@??_C@_0O@JIDB@PaleGoldenrod?$AA@??_C@_06CFAH@Orchid?$AA@??_C@_09MLEL@OrangeRed?$AA@??_C@_06OLOI@Orange?$AA@??_C@_09BDMI@OliveDrab?$AA@??_C@_07HPBN@OldLace?$AA@??_C@_08FJBA@NavyBlue?$AA@??_C@_04PGEO@Navy?$AA@??_C@_0M@POIL@NavajoWhite?$AA@??_C@_08CJCK@moccasin?$AA@??_C@_09KEPN@MistyRose?$AA@??_C@_09GHMI@MintCream?$AA@??_C@_0N@BIEM@MidnightBlue?$AA@??_C@_0BA@MMKI@MediumVioletRed?$AA@??_C@_0BA@DGOK@MediumTurquoise?$AA@??_C@_0BC@HJAL@MediumSpringGreen?$AA@??_C@_0BA@PEEL@MediumSlateBlue?$AA@??_C@_0P@OOCE@MediumSeaGreen?$AA@??_C@_0N@EPMH@MediumPurple?$AA@??_C@_0N@BHGF@MediumOrchid?$AA@??_C@_0BA@KLPL@MediumGoldenrod?$AA@??_C@_0BC@DACG@MediumForestGreen?$AA@??_C@_0L@OLEL@MediumBlue?$AA@??_C@_0BB@LEGJ@MediumAquamarine?$AA@??_C@_06FEAG@Maroon?$AA@??_C@_07IGIM@Magenta?$AA@??_C@_05KJOE@linen?$AA@??_C@_09DMBK@LimeGreen?$AA@??_C@_0M@ICLH@LightYellow?$AA@??_C@_0P@BDLF@LightSteelBlue?$AA@??_C@_0P@IOPG@LightSlateGray?$AA@??_C@_0P@END@LightSlateBlue?$AA@??_C@_0N@NNJL@LightSkyBlue?$AA@??_C@_0O@HGGD@LightSeaGreen?$AA@??_C@_0M@IBCK@LightSalmon?$AA@??_C@_09CLEE@LightPink?$AA@??_C@_09OLGA@LightGray?$AA@??_C@_0BF@JONP@LightGoldenrodYellow?$AA@??_C@_0P@FLGD@LightGoldenrod?$AA@??_C@_09OEDD@LightCyan?$AA@??_C@_0L@HKLN@LightCoral?$AA@??_C@_09GBEF@LightBlue?$AA@??_C@_0N@FJKA@LemonChiffon?$AA@??_C@_09KOFD@LawnGreen?$AA@??_C@_0O@PPHN@LavenderBlush?$AA@??_C@_08FMGG@lavender?$AA@??_C@_05FBHM@Khaki?$AA@??_C@_05KJCE@ivory?$AA@??_C@_09FMMG@IndianRed?$AA@??_C@_07CCJC@HotPink?$AA@??_C@_08LHFL@honeydew?$AA@??_C@_0M@JGIF@GreenYellow?$AA@??_C@_05DKMC@Green?$AA@??_C@_06CJBB@Gray99?$AA@??_C@_06IDIG@Gray98?$AA@??_C@_06ICNL@Gray97?$AA@??_C@_06CIEM@Gray96?$AA@??_C@_06NHPF@Gray95?$AA@??_C@_06HNGC@Gray94?$AA@??_C@_06CIIH@Gray93?$AA@??_C@_06ICBA@Gray92?$AA@??_C@_06HNKJ@Gray91?$AA@??_C@_06NHDO@Gray90?$AA@??_C@_05KOJK@Gray9?$AA@??_C@_06DPLL@Gray89?$AA@??_C@_06JFCM@Gray88?$AA@??_C@_06JEHB@Gray87?$AA@??_C@_06DOOG@Gray86?$AA@??_C@_06MBFP@Gray85?$AA@??_C@_06GLMI@Gray84?$AA@??_C@_06DOCN@Gray83?$AA@??_C@_06JELK@Gray82?$AA@??_C@_06GLAD@Gray81?$AA@??_C@_06MBJE@Gray80?$AA@??_C@_05EAN@Gray8?$AA@??_C@_06OLLK@Gray79?$AA@??_C@_06EBCN@Gray78?$AA@??_C@_06EAHA@Gray77?$AA@??_C@_06OKOH@Gray76?$AA@??_C@_06BFFO@Gray75?$AA@??_C@_06LPMJ@Gray74?$AA@??_C@_06OKCM@Gray73?$AA@??_C@_06EALL@Gray72?$AA@??_C@_06LPAC@Gray71?$AA@??_C@_06BFJF@Gray70?$AA@??_C@_05FFA@Gray7?$AA@??_C@_06PNBA@Gray69?$AA@??_C@_06FHIH@Gray68?$AA@??_C@_06FGNK@Gray67?$AA@??_C@_06PMEN@Gray66?$AA@??_C@_06DPE@Gray65?$AA@??_C@_06KJGD@Gray64?$AA@??_C@_06PMIG@Gray63?$AA@??_C@_06FGBB@Gray62?$AA@??_C@_06KJKI@Gray61?$AA@??_C@_06DDP@Gray60?$AA@??_C@_05KPMH@Gray6?$AA@??_C@_06MGOP@Gray59?$AA@??_C@_06GMHI@Gray58?$AA@??_C@_06GNCF@Gray57?$AA@??_C@_06MHLC@Gray56?$AA@??_C@_06DIAL@Gray55?$AA@??_C@_06JCJM@Gray54?$AA@??_C@_06MHHJ@Gray53?$AA@??_C@_06GNOO@Gray52?$AA@??_C@_06JCFH@Gray51?$AA@??_C@_06DIMA@Gray50?$AA@??_C@_05FAHO@Gray5?$AA@??_C@_06NAEF@Gray49?$AA@??_C@_06HKNC@Gray48?$AA@??_C@_06HLIP@Gray47?$AA@??_C@_06NBBI@Gray46?$AA@??_C@_06COKB@Gray45?$AA@??_C@_06IEDG@Gray44?$AA@??_C@_06NBND@Gray43?$AA@??_C@_06HLEE@Gray42?$AA@??_C@_06IEPN@Gray41?$AA@??_C@_06COGK@Gray40?$AA@??_C@_05PKOJ@Gray4?$AA@??_C@_06LBBA@Gray39?$AA@??_C@_06BLIH@Gray38?$AA@??_C@_06BKNK@Gray37?$AA@??_C@_06LAEN@Gray36?$AA@??_C@_06EPPE@Gray35?$AA@??_C@_06OFGD@Gray34?$AA@??_C@_06LAIG@Gray33?$AA@??_C@_06BKBB@Gray32?$AA@??_C@_06OFKI@Gray31?$AA@??_C@_06EPDP@Gray30?$AA@??_C@_05KPAM@Gray3?$AA@??_C@_06KHLK@Gray29?$AA@??_C@_06NCN@Gray28?$AA@??_C@_06MHA@Gray27?$AA@??_C@_06KGOH@Gray26?$AA@??_C@_06FJFO@Gray25?$AA@??_C@_06PDMJ@Gray24?$AA@??_C@_06KGCM@Gray23?$AA@??_C@_06MLL@Gray22?$AA@??_C@_06PDAC@Gray21?$AA@??_C@_06FJJF@Gray20?$AA@??_C@_05FJL@Gray2?$AA@??_C@_06JMEF@Gray19?$AA@??_C@_06DGNC@Gray18?$AA@??_C@_06DHIP@Gray17?$AA@??_C@_06JNBI@Gray16?$AA@??_C@_06GCKB@Gray15?$AA@??_C@_06MIDG@Gray14?$AA@??_C@_06JNND@Gray13?$AA@??_C@_06DHEE@Gray12?$AA@??_C@_06MIPN@Gray11?$AA@??_C@_07LNPC@Gray100?$AA@??_C@_06GCGK@Gray10?$AA@??_C@_05PKCC@Gray1?$AA@??_C@_05FALF@Gray0?$AA@??_C@_04CFCB@Gray?$AA@??_C@_09MLNE@Goldenrod?$AA@??_C@_04IKOF@Gold?$AA@??_C@_0L@BOIA@GhostWhite?$AA@??_C@_09IPPN@gainsboro?$AA@??_C@_0M@BPNM@ForestGreen?$AA@??_C@_0M@HDMO@FloralWhite?$AA@??_C@_09HFBF@Firebrick?$AA@??_C@_0L@CGBN@DodgerBlue?$AA@??_C@_07PCNH@DimGray?$AA@??_C@_0M@NMOH@DeepSkyBlue?$AA@??_C@_08DNID@DeepPink?$AA@??_C@_0L@KPGJ@DarkViolet?$AA@??_C@_0O@ILHE@DarkTurquoise?$AA@??_C@_0O@MDPA@DarkSlateGray?$AA@??_C@_0O@EJNF@DarkSlateBlue?$AA@??_C@_0N@HACN@DarkSeaGreen?$AA@??_C@_0L@GAGE@DarkSalmon?$AA@??_C@_0L@JPNG@DarkOrchid?$AA@??_C@_0L@FBDJ@DarkOrange?$AA@??_C@_0P@FDEE@DarkOliveGreen?$AA@??_C@_09IAEP@DarkKhaki?$AA@??_C@_09OLPB@DarkGreen?$AA@??_C@_0O@BGGF@DarkGoldenrod?$AA@??_C@_04CKHC@Cyan?$AA@??_C@_08HADN@cornsilk?$AA@??_C@_0P@FDIN@CornflowerBlue?$AA@??_C@_05OFHD@Coral?$AA@??_C@_09HKOG@chocolate?$AA@??_C@_0L@CAIG@chartreuse?$AA@??_C@_09GABH@CadetBlue?$AA@??_C@_09LPGI@burlywood?$AA@??_C@_05GJBG@Brown?$AA@??_C@_0L@DNNE@BlueViolet?$AA@??_C@_04KPAE@Blue?$AA@??_C@_0P@HJDN@BlanchedAlmond?$AA@??_C@_05IFEB@Black?$AA@??_C@_06DBBO@Bisque?$AA@??_C@_05OLFG@Beige?$AA@??_C@_05FBBK@Azure?$AA@??_C@_0L@EOAJ@Aquamarine?$AA@??_C@_0N@NNFJ@AntiqueWhite?$AA@??_C@_09PCLJ@AliceBlue?$AA@_xpmReadRgbNames_xpmGetRgbName_xpmGetRGBfromName_xpmstrcasecmp??_C@_04NFMJ@grey?$AA@_xpmFreeRgbNames
-+RdFToI.obj/     1345987752              100666  3302      `
-+LÂš$:P~7.drectvePD
-+.textÂÂ€
- P`.debug$F"HB.textp,Â P`.debug$FÃÃHB.textpÃšX
- P`.dataÃ@0Ã.dataÃ @0Ã.dataÃ€@0Ã.dataÃŠ@0Ã.dataÃ¹@0Ã.debug$FÃŒ
-HB.text0F P`.debug$FdtHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂÃ¬\ÂD$PÃšÂL$
-QÃšÂÂ$lÂT$@RPÃšÂÃÂ
-ÃÂ
-ÂVÂÂŽ$tÂ
-Ã¶WÂÂVÃšÂL$$VQÃšÂÂ$ÂÂT$,VÂD$RÂÂ$ÂPQÂÂ$ÂÂD$\RPQÃšÂÃžÂÃ(Â
-Ã¿|ÂL$ ÂT$QRVÃšÂÃ
-ÂD$ PÃšÂÃÂL$@QÃšÂT$
-RÃšÂÃÂÃ_^ÂÃ\ÃÂÂ$tÂÂ$pjÂT$
-jRPÂÂ$xÂT$PQRPÃšÂÃ
-ÂÃžÃ«Â¬ÂÂÂÂÂÂÂÂÂÂÂÂÂ
-(J
-U
-Â
-Â
-+Âš	Âµ2Â¿Ãž
-ÂÂÃ¬$VÂÂŽ$0WVÃšÂÂŒ$<WÃšÂÂ$8ÂD$PQÃšÂÃÂ
-Ãu
-WÂT$
-VRÃšÂÃ°ÂD$PÃšÂÃÂÃ_^ÂÃ$ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ
-0CO2aÂÂÃ¬SUÂÂ¬$
-VÂ
-Ã­Wu(ÂÂŽ$ÃFÃÃF_^]3Ã[ÂÃÃÂÃœÂÃÃ¿3ÃÃ²Â®Ã·ÃIÂÃ¹ÂÃ¿~cÂt/ÃŸÂžÂÂ
-ÂÃ:Ãu
-ÂÃtÂHÂ^ÂÃ:ÃuÂÃÂÃÂÃuÃ3ÃÃ«ÃÂÃÃ¿Â
-Ãu)ÂÂŽ$UÂT$hRÃÃšÂD$
-hPÃ«jÂÃ¿ÂÂÂt/ÃœÂžÂÂ
-ÂÃ:Ãu
-ÂÃtÂPÂ^ÂÃ:ÃuÂÃÂÃÂÃuÃ3ÃÃ«ÃÂÃÃ¿Â
-ÃuHÂÂŽ$UÂD$hPÃÃšÂL$
-hQÃšÂÃÂFÂ
-ÃÂ
-Ã¹ÃŸÃ¿Ã¿_^]ÂÃÃ¿[ÂÃÃhUÃšÂÂŽ$ ÂÃÂ
-ÃÂFÂ
-Ã
-ÃŸÃ¿Ã¿_^]ÂÃÃ¿[ÂÃÃÂÂÂÂ-U,Â)Â£&Â¬%Ã"&%
-
-?%Egunzip -qc "%s".gzruncompress -c "%s".ZlÂÂL$ÂHtHu
-ÂAPÃšÂÃÃÂA=tPÃšYÃÂÂÂÂÂ4
--%3+2.fileÃŸÃ¿gRdFToI.c@comp.idÃš
-+Ã¿Ã¿.drectvePSÃ®uj.text
-Ã¢@2Ã  ) 9 K b r Â
- Â .debug$FÃÂ¯UÂ¶.textpÃ§/ÃÂºÂŠ Âœ .debug$FÃÃªÃÃ.textp
-AÃpHÃ _fopen __popen .dataÂÃTAÃ.dataÃÂÂ¥Ã	.data	t	
- 	_sprintf .data
-+]YVÃ«3
-+.data
-4ÃÂrf
-__iob.debug$F
-.text
-01ÃÂ
-|
- _fclose __pclose .debug$F
-Â_XpmReadFileToImage_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage_XpmReadFileToXpmImage_xpmParseData_OpenReadFile??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_01LHO@r?$AA@??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_02BKNP@?4Z?$AA@_xpmDataCloseRdFToDat.obj/   1345987752              100666  756       `
-+LÂš$:PÂ.drectvePÂ
-+.textpÃL P`.debug$FtÂHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂÃ¬8VÂt$DÂ
-Ã¶ÃD$
-tÃÂT$@ÂD$
-ÂL$PQRÃšÂÃ
-Â
-Ãu+ÂD$
-ÂL$PQVÃšÂT$ÂÃ°RÃšÂD$,PÃšÂÃÂÃ^ÂÃ8ÃÂÂÂÂÂÂÂÂÂÂÂ*
-A
-+M	We.fileÃŸÃ¿gRdFToDat.c@comp.idÃš
-+Ã¿Ã¿.drectvePÃÃÂ¿ÃŠ.textp+Â)Â±  ' 8 S .debug$Fj_XpmReadFileToData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmCreateDataFromXpmImage_XpmReadFileToXpmImageRdFToBuf.obj/   1345987752              100666  1081      `
-+LÂš$:P~.drectvePÂŽ
-+.textÃ°ÃŽ
- P`.datab@0Ã.debug$FdtHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂD$ÂL$ÂÃ¬$ÃSVWjQÃšÂÃ°ÂÃÂ
-Ã¶}
-+_^ÂÃÃ¿[ÂÃ$ÃÂT$
-RVÃšÂÃÂ
-ÃtVÃšÂÃÂÃÃ¿_^[ÂÃ$ÃhVÃšÂÃÂÃÂ
-ÃuVÃšÂÃÂÃÃ¿_^[ÂÃ$ÃÂ|$ ÂGPÃšÂÃ°ÂÃÂ
-Ã¶uSÃšÂÃÂžÃœÃ¿Ã¿Ã¿_^[ÂÃ$ÃUSWjVÃšSÂÃšÃšÂÃ;Ã¯]tVÃšÂÃÂÃÃ¿_^[ÂÃ$ÃÂL$8Ã>_3ÃÂ1^[ÂÃ$ÃÂÂÂÂÂÂÂÂÂ6CU[
-jÂ
-Â
-+Â­	Âµ
-+ÃrÃ§	.fileÃŸÃ¿gRdFToBuf.c@comp.idÃš
-+Ã¿Ã¿.drectvePÃŒÃ»Ã­C.textÃ°
-ZÃ¹ _free _fread _fclose  __fdopen .datat	
-._close __fstat _open .debug$FA_XpmReadFileToBuffer_boundCheckingMalloc??_C@_01LHO@r?$AA@
-+misc.obj/       1345987752              100666  2557      `
-+LÂš$:P6.drectvePÂ
-+.textPÃ€ P`.debug$F4DHB.text`NÂ® P`.data:@0Ã.dataK@0Ã.data
-Z@0Ã.dataf@0Ã.datau@0Ã.data
-Â@0Ã.dataÂ@0Ã.debug$FÂÂ¬HB.textÂ¶ P`.debug$FÃÃHB.textÃ Ã° P`.debug$FÃº
-+HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES WÂ|$
-3Ã3ÃÂ
-Ã¿v7VÂt$
-ÂÂÃ¹0|ÂÃ¹9ÂŸÃFÂÂB;ÃÂDAÃrÃ€Â
-Ã^t;Ãu
-ÂT$_ÂÂžÃ3Ã_ÃÂÂÂÂÂÂÂÂHÂD$ÂÃÂÃžw+Ã¿$Â
-ÂžÃÂžÃÂžÃÂžÃÂžÃÂžÃÂžÃÂIÂÂÂÂÂÂÂÂ(&" 
-&,28@DHLP#T'Invalid XpmErrorXpmColorFailedXpmNoMemoryXpmFileInvalidXpmOpenFailedXpmSuccessXpmColorErrorX
-ÂžÃvÃÂÂÂÂÂÂÂÂÂÂ-ÂD$PÃšYÃÂÂÂÂ3
-2.fileÃŸÃ¿gmisc.c@comp.idÃš
-+Ã¿Ã¿.drectveP.textP
-h
-+ÃŠ .debug$FNLÂÃ.text`PÃÂ¥E .dataÂÂ¡-R!.data|)ÂG$L530701.data
-;;])i$L53068+.dataÂÃ³]hÂ$L53066%.data	IÂŒ6Âª	$L53064.data
-+
-Ã_NÃ²Ã
-+$L53062.data
-q2EÃŒÃ©
-$L53060$L53096@.debug$F
-.text
-Â¡ÃÂh
-+
- .debug$F
-.textÃÃtÂ·_XpmFree _free .debug$F
-_xpmatoui_XpmGetErrorString??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@??_C@_0P@MINL@XpmColorFailed?$AA@??_C@_0M@KHPB@XpmNoMemory?$AA@??_C@_0P@PLPG@XpmFileInvalid?$AA@??_C@_0O@FNPH@XpmOpenFailed?$AA@??_C@_0L@POMH@XpmSuccess?$AA@??_C@_0O@PNEN@XpmColorError?$AA@_XpmLibraryVersion
-+Info.obj/       1345987752              100666  1477      `
-+L	Âš$:PÂ.drectveP|
-+.text Ã P`.debug$FÃ¬ÃŒHB.textÂÂ P`.debug$FÂ®ÂŸHB.text0Ã P`.debug$FÃžHB.text` P`.debug$FrÂHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂD$3Ã;ÃtÂHÂHÂH
-ÂH
-ÂHÃÂÂÂÂÂÂVÂt$W3Ã¿;Ã·tcÂÃ¶Ãt9ÂF;Ãt
-PÃšÂÃÂ~ÂF;Ãt
-PÃšÂÃÂ~ÂF
-;Ãt
-PÃšÂÃÂ~
-ÂÃ¶ÃtÂF;ÃtPÂF
-PÃšÂÃÂ~
-Â~Â>_^ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂ
-/B`
-r
-ÂD$ÂL$ÃÂÃ¶ÃtÃÂÃ¶ÃtÂÂÃÂÃÂÂÂÂÂÂ*ÂD$ÂL$ÃÂÃ¶ÃtÃÂÂQHÂPÂQLÂPÂQPÂP
-ÂÃ¶ÃtÂÂÃÂÂQ<ÂP
-ÂQ8ÂPÃ¶tÂÂÃÂÂQÂPÂI
-ÂHÃ`.fileÃŸÃ¿gInfo.c@comp.idÃš
-+Ã¿Ã¿.drectveP.text urÃÃ .debug$FaRÃŸ.textÂÂŸFTP $ _free .debug$F.text00Ã¹ÃÃ7 .debug$F.text`,Â2/G .debug$F	S_xpmInitXpmInfo_XpmFreeXpmInfo_XpmFreeExtensions_xpmSetInfoMask_xpmSetInfo
-+Image.obj/      1345987752              100666  815       `
-+LÂš$:PÃ.drectvePÃ
-+.text, P`.debug$F<LHB.text@VÂ P`.debug$FÂªÂºHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂD$3ÃÂH
-ÂHÂHÃVÂt$ÂFÂ
-Ãt
-ÂN
-QPÃšÂÃÂFÂ
-Ãt	PÃšÂÃÃF^ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂ"
-2
-.fileÃŸÃ¿gImage.c@comp.idÃš
-+Ã¿Ã¿.drectveP.textÂ¬ÃŽÂ .debug$FÂ³wvÂ.text@ÃªÃ
-Ã Â _free & .debug$F9_xpmInitXpmImage_XpmFreeXpmImage_xpmFreeColorTable
-+hashtab.obj/    1345987751              100666  2249      `
-+L
-Â§$:PÂŒ%.drectveP
-
-+.textÂ l P`.debug$F
-
-HB.text`&Â P`.debug$FÂ€ÂŽHB.text ÂŸÃ P`.debug$FÃšÃžHB.textÂÂ P`.debug$FÂ°ÃHB.textPÃ P`.debug$F$4HB.textP>Â P`.debug$FÂ¢Â²HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂT$SUVÂt$Â
-+3ÃWÂn
-ÂL$ÂÃtÂÃžÃÃ§+ÃžÂŸÃÂJÃBÂÃuÃ¬Â
-3ÃÃ·Ã³ÂLÂÂ
-ÃÂ|ÂtLÂ	ÂT$8u1Ât$ÂÂÃ:u
-ÂÃtÂAÂÃ:FuÂÃÂÃÂÃuÃ 3ÃÃ«ÃÂÃÃ¿Â
-ÃtÂÃ¯;ÃœsÂ|ÂÃŒÂÂ
-ÃuÂŽÂÃ_^][ÃÂÂÂÂÂÂÂÂÂÂÂÂÂSÂ\$
-VÂt$
-WSVÃšÂÃžÂÃÂ?u;ÂD$PSÃšÂÃÂÂ
-Ãu	_^ÂžÃœÃ¿Ã¿Ã¿[ÃÂFÂN;Ã|VÃšÂÃÂ
-Ãu	ÂF@ÂF3Ã_^[ÃÂÂÂ#E]
-jÃšÂÃÂ
-Ãt
-ÂL$ÂT$ÂÂPÃÂÂÂÂ
-SUVÂt$WÂÂn
-ÂÃÂ
-ÂžVUUUÃ·Ã©ÂÃÂ<ÂÃÃšÃWÂÂVÃšÂÃÂ
-Ãu
-+_^]ÂžÃœÃ¿Ã¿Ã¿[ÃÂ
-ÂF
-;Ãv
-ÂÃ©;ÃÃwÃ³Â
-ÃÂÃœ~
-ÂÂ
-ÃtÂQVÃšÂÂÃÂÂÃKuÃ€UÃšÂÃ3Ã_^][ÃÂÂÂÂ.k~ÂVÂt$hÃÃFUÃFÃšÂÃÂ
-ÃuÂžÃœÃ¿Ã¿Ã¿^ÃÂÂ
-Â;Ãv
-ÂÃ©;ÃÃwÃ³ÂF
-3Ã^ÃÂÂN
-SÂ\$WÂ{
-Â
-Ã¿t2ÂVÂ4Â;Ã·vÂFÃŒÂÃ®Â
-Ãt	PÃšÂÃ;Ã·wÃ©WÃšÂÃÃC
-^_[ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂ#0B".fileÃŸÃ¿ghashtab.c@comp.idÃš
-+Ã¿Ã¿.drectveP.textÂ  kLP .debug$F.text`Ã«ÂtÃ¯ .debug$FSÃµm2.text ÃªÂ±SÂ±  * .debug$F.textÂÂŸÃÂµÃ? _free .debug$F	.text
-+PÂ1ÂŒÃ¹O
-+ .debug$F
-
-+.text
-Pq}ÂŒa
- .debug$F
-
-s_xpmHashSlot_xpmHashIntern_AtomMake_boundCheckingMalloc_HashTableGrows_xpmHashTableInit_xpmHashTableFree
-+data.obj/       1345987751              100666  8777      `
-+L%Â§$:PÂœx.drectvePÃ
-+.dataÂ,ÂŽ@@Ã.dataÂ@0Ã.dataÂ@0Ã.dataÂ£@0Ã.dataÂª@0Ã.dataÂ¬@0Ã.dataÂ±@0Ã.dataÂµ@0Ã.dataÂœ@0Ã.dataÃ@0Ã.dataÃ@0Ã.dataÃ@0Ã.dataÃ@0Ã.dataÃ@0Ã.dataÃ@0Ã.bssÂ0Ã.data6Ã@0Ã.data@0Ã.textÃ$ÃŽ	 P`.debug$FD
-+T
-+HB.text^
-+n
- P`.debug$FÂ 
-Â°
-HB.textÂ Âº
-Z P`.debug$FÃ°HB.text@
-+J P`.debug$F^nHB.text`xÃ
- P`.debug$FZjHB.textptÃ€ P`.debug$FÃžHB.text`r
- P`.dataÂ@0Ã.dataÂ@0Ã.dataÂ@0Ã.dataÂ@0Ã.debug$FÂ£Â³HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 
-+""""<84
-1.4
-4 4$4(+,(0%8"<@
-DHLP.X.\`
-d
-+))
-+ '(
-+(setq ;Lisp};
-+[] = {
-+static char *,
-+*//*C
-+!$Id: xpm.shar,v 3.71 1998/03/19 19:47:14 lehors Exp $$XpmVersion: 3.4k $VÂt$WÂÂ
-ÃuÂF
-ÂN@_ÂF
-ÂÂ3ÃÂV^ÃÂÃžÂ
-ÂœÂÂ
-ÂÃtÂFÂ@ÂÃÂFt:Ãt
-+Â@ÂÃÂFuÃ²ÂÂ
-ÂÃtFÂNÂAÂÃÂNÂS:Â
-ÂGÂÂÂ
-Ãt
-:u	VÃšÂÃÂNÂAÂÃÂNuÃ_3Ã^ÃÂÂÂ
-ÃÂÂ~ÂÂÂG:ÃÂFu VÃšÂ~ÂÂÂÃÂÂÂG:ÃÂFtÃ H_ÂF3Ã^ÃÂÂ
-Â~ÂÃt-ÂGHÂGx
-Â3ÃÂAÂÃ«	WÃšÂÃÂŸÂ
-;ÃtÂÃžÃ¿uÃÂÂ
-ÂÃtIÂGHÂGx
-Â3ÃÂAÂÃ«	WÃšÂÃÂŸÂ
-;ÃtjÂÃžÃ¿teÂÂÂ
-ÃtÃÂŸ	;ÃuÃVÃšÂÃÃ«Â·ÂÂÂ
-Ãt?ÂGHÂGx
-Â3ÃÂAÂÃ«	WÃšÂÃÂÂÂŸ
-+;Ãu
-VÃšÂÃÃ«ÃWPÃšÂÃ_3Ã^ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂFÃF
-+AAAkFÂAÂªFÂ¶@Ã?SUÂl$
-VWÂ}Â
-ÂºÂÂ
-Â]ÂÃ3Ã¿ÂÂ
-+ÂÂµÂMÂABGFÂMÂÂ:ÃuÂÃtÂÃuÃ€Â>tÂE+Ã_ÂE^]3Ã[ÃÂÂÃ³3ÃÂÂœÂ:t#ÂÃtÂUÂBÂÃ¹Ã¿ÂUuÂÃ³3ÃFAÂÂ:ÃuÃÂMÂUÂBÂÃ¹Ã¿ÂUuÂÃ³3ÃFAGÂÂ:ÃuÂÃtÂÃuÃÂ?uÂ¡ÂE_H^ÂE]3Ã[ÃÂÂ
-Â]ÂuÃD$ÂÂÂÂœÂCHÂCx
-Â
-3ÃÂAÂ
-Ã«	SÃšÂÃÂT$FBGÂÂT$ÂÂŸÃ;Ãu	ÂÃtÂÃžÃ¿uÃÂ?t$Â|$Â
-Ã¿ÂÃÂŸSPÃšÂÃNOuÃ¯_^]3Ã[ÃÂu3Ã¿ÂÂÂÂÂL$:t=ÂÃžÃ¿t8ÂCHÂCx
-Â
-3ÃÂAÂ
-Ã«	SÃšÂÃÂÃ¿Ã¿uÂu3Ã¿ÂL$FGÂÂ:ÃuÃÂ}ÂCHÂCx
-Â
-3ÃÂAÂ
-Ã«	SÃšÂÃÂÃ¿Ã¿uÂu3Ã¿ÂL$FGAÂÂL$Â	ÂŸÃ;Ãu	ÂÃtÂÃžÃ¿uÂ·ÂL$Â9Â
-ZÃ¿Ã¿Ã¿ÂŸÃSRÃšÂÃ_^]3Ã[ÃA=@ÂAÂŒA@FQSUVWÂ|$3Ã­Âl$ÂÂ
-ÃÂÃ€ÂÃžÂÃÂwÂFHÂFx
-Â3ÃÂ@ÂÃ«
-VÃšÂÃÂÃÂÃ»Ã¿t0Â=~
-jSÃšÂÃÃ«
-Â¡ÂXÂÃ Â
-Ãt
-ÂŸÂ
-;ÃuÂ¬Âl$
-Â=~
-jSÃšÂÃÃ«
-ÂÂZÂÃ Â
-ÃuFÂŸÂ
-;Ãt;ÂÃ»Ã¿t6ÂL$ÂD$ ;Ãs*Â]ÂFEAHÂL$ÂFx
-Â3ÃÂ@ÂÃ«Â¡VÃšÂÃÂÃÃ«ÂVSÃšÂD$ÂÃ_^][YÃÂ=~ÂWjÂŸ2VÃšÂÃÃ«ÂGÂ
-ÂŸ0ÂqÂÃ Â
-ÃtÂŸÂ
-;Ã²tÃ¿GÃ«ÂŸÂt$
-ÂGÂŸ@FÂGÂ^Ã¿Â¡EÂÃž~
-jSÃšÂÃÃ«
-Â¡ÂXÂÃ Â
-ÃuÂŸÂ
-;Ãt;l$ rÂºÂGMHÂG_ÂÃ
-^][YÃÂÂÂÂÂÂÂ;AKNVM`LNÂMÂLÃAÃ¬@Ã¿NM
-LRN`MjLÂKÂL$ÂÃ¬ÂD$hPQÃšÂÂ$RPÂD$PÃšÂÃÃÂÂÂÂÂÂÂÂÂÂÂÂK)T4ÂSÂÃ¬
-SUÂÂ¬$VW3Ã¶ÂE3Ã¿Â
-ÃÂÂ®ÂÃžÂÂ¥ÂEÂD$ÂHIÂHx
-Â3ÃÂAÂÃ«
-PÃšÂÃÂÃÂÃ»Ã¿u_^]ÂžÃŸÃ¿Ã¿Ã¿[ÂÃ
-ÃÂD$
-jÃD$ÂD$ÃšÂŸÂ
-ÂÃ;ÃÂÃžÂÂÂÃ»Ã¿ÂÂÂ|$uFÂÂ®UWÃšÂÃÂ
-ÃÂÂ²ÂÃžÂT$
-hÃRPÃšÂÃµÂÂ¬$,ÂÃ
-ÃD$ÂD$
-Ã«ÂD$ÂT$Â@BÂD$ÂD$ÂT$ÂHIÂHx
-Â3ÃÂAÂÃ«
-PÃšÂÃÂÃÂŸÂ
-
-;ÃÂ
-aÃ¿Ã¿Ã¿ÂÃ»Ã¿uWÃšÂÃÂžÃŸÃ¿Ã¿Ã¿_^][ÂÃ
-ÃÂL$Â1Â
-ÃÂD$t[@PWÃšÂÃšÂÃÂ
-Ã­uWÃšÂÃÂžÃœÃ¿Ã¿Ã¿_^][ÂÃ
-ÃÂT$ÂD$
-RÂ
-.PQÂÃœÃšÂt$ ÂT$$ÂÃ
-Ã.FRSÃšÂÃÃ«}ÂT$ÃRSÂŸÃšÂÃÃ«eÂ]Â
-Ãt^ÂŸÂ
-ÃtÂŸÂ
-;ÃtÂuFÂÃÂuÂŸÂ
-ÃuÃ¬Âu+Ã³FVÃšÂÃžÂÃÂ
-Ã¿u_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃ
-ÃVSWÃšÂEÂÃ
-Â
-ÃtÃD7Ã¿ÂÂ$$ÂÂ$(Â8Â1_^]3Ã[ÂÃ
-ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂFAw]Â«\Ã[A5Z_\nZÂ[Â­@Ã
-@Ã¿] [RÂYVÂt$Â>uÂD$
-^Ã3ÃÃÂFÂ
-Ãt4@WPÃšÂ|$ÂVÂÂNQRPÃšÂÂNÂÃÃÃF_3Ã^ÃÂT$
-3Ã^ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ#]7[abÂÃ¬SUVÂÂŽ$3Ã3Ã­ÂW;ÃÂ-ÂD$hPVÃÂ
-ÃÂ
-
-+ÂÂÂÂÃšÂÃ
-ÂÃžÂ
-ÂÂL$PQhÃšÂÃ
-Â
-ÃujÂT$hRVÃšÂÃžÂÃ
-;Ã»u_^]ÂžÃŸÃ¿Ã¿Ã¿[ÂÃÃÂD$j_PÃD<ÃšÂÃ;ÃtÃ+ÃžÂL<QPhÃšÂÃ
-Â
-ÃuÂ¿ÂœÂÂ® Ã©Â¶ÂT$hRVÃšÂÃ
-ÂÃžu+PÂD$PhÃšÂÃ
-Â
-ÃÂÃ_^]ÂžÃŸÃ¿Ã¿Ã¿[ÂÃÃÂÃžÂ
-cÃ¿Ã¿Ã¿ÂL$PQhÃšÂÃ
-Â
-ÃÂ
-HÃ¿Ã¿Ã¿ÂT$hRVÃšÂÃÂ¡ÂÃ
-Â
-Ãt)ÂžÂÃžÂÂL$SQRÃšÂÃ
-Â
-Ãt
-ÂO ÂÃ EÂÃÂ
-ÃuÃ3ÃÂÂ ÂÃœÃÃ§9ÂÂÃšÃŸÃ¿Ã¿;Ã«uKÂ¡VÂÂÂ
-ÂÂÃšÂ
-ÂÃÂÂ
-Â 
-ÂÂ
-_^]3Ã[ÂÃÃÂœÃ«ÂÂÂÂÂ ÂÂÂÂ;ÃÂÂu5ÂÂ
-VÂÂ
-ÃÂ
-ÃšÂÂ
-ÂÃÂÂ
-3Ã_^][ÂÃÃVÃšÂÃ_^]3Ã[ÂÃÃÂÂÂÂÂÂÂEK\uarxKÂ¢qÂ¶pÂ»rÃ¢KÃµmÃºr)j.rIKP\lrÂÂ¢Â¯Âº?ÃÃÃ®#?)E?XPM2XPM_format#defineYÂg.fileÃŸÃ¿gdata.c@comp.idÃš
-+Ã¿Ã¿.drectveP&Ã³Px.dataÂ.dataQuI.dataQGÂ0/.dataÂ§Ã¡ÃL.data8Ã¯Â²<i.data>Â¢Â¥Â¢Â.dataÂºÂÂKÂ.data	Ã£Ã*ÂŽ	.data
-+zÂÃÃ
-+.data
-WÂžÃ
-.data
-[Ã»Ã'
-.data
-ÃµÃz\3
-.dataÃ
-TÃL.dataÂÃšÃ¯Ãº`.dataÃ£ÂÂt.bssÂ_RCS_Id.data6gÃ=ÂÃ.dataÃcÃ£.textÃÃÃ€Â¶Â§ _ungetc __filbuf .debug$F.textÃ¯3ÃÂš
- .debug$FÂ§ÃÂ®Ã¹.textÂ ÃªÂ«Ã², __pctype9 C.debug$FMÃ¯.text@Â¢OÂÃœQ \ .debug$FNÃÃ.text
-`
-eÃÂŠf
- _free _strncpy t Â .debug$F
-
-.text
-pznÃÂŠÂ
- .debug$FÂÂ|'
-.text `
--xÂ£Âª  .data!JÃ\VÂº!.data"Âµ8Ã'Ã".data#Â®Â€ÃÃÃŠ#_strrchr _strncmp .data$ÃÂŠZÃ¿$.debug$F% 
-_xpmDataTypes??_C@_03PHEM@?$CJ?$CJ?6?$AA@??_C@_04DHGG@?5?8?$CI?6?$AA@??_C@_06EHEH@?$CIsetq?5?$AA@??_C@_01FAJB@?$DL?$AA@??_C@_04JOHA@Lisp?$AA@??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_0O@JACJ@static?5char?5?$CK?$AA@??_C@_02DLDK@?0?6?$AA@??_C@_02BOOO@?$CK?1?$AA@??_C@_02FCCF@?1?$CK?$AA@??_C@_01FKHJ@C?$AA@??_C@_01BJG@?6?$AA@??_C@_01PIHH@?$CB?$AA@??_C@_00A@?$AA@??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@_RCS_Version??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@_xpmNextString_ParseComment_xpmNextWord__isctype___mb_cur_max_xpmNextUI_xpmatoui_xpmGetString_boundCheckingRealloc_boundCheckingMalloc_xpmGetCmt_xpmParseHeader??_C@_04HCLL@XPM2?$AA@??_C@_03FMK@XPM?$AA@??_C@_07NAB@_format?$AA@??_C@_07GIIJ@?$CDdefine?$AA@
-+CrIFrDat.obj/   1345987751              100666  1726      `
-+LÂ§$:PÃ
-.drectveP,
-+.textÃ°|l
-+ P`.debug$FÃÃ HB.textPÃª: P`.debug$FbrHB.text@| P`.debug$FÂŒÃHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂÃ¬\ÂD$VWPÃšÂL$$QÃšÂÂ$tÂT$HRPÃšÂÂŽ$ÂÂÃÂ
-Ã¶tVÃšÂL$$VQÃšÂÂ$ÂÂT$,VÂD$RÂÂ$ÂPQÂÂ$ÂÂD$\RPQÃšÂÃžÂÃ(Â
-Ã¿|ÂL$ ÂT$QRVÃšÂÃ
-ÂD$ PÃšÂÃÂL$QÃšÂÃÂÃ_^ÂÃ\ÃÂÂ$tÂÂ$pjÂT$
-jRPÂÂ$xÂT$PQRPÃšÂÃ
-ÂÃžÃ«Â¶ÂÂÂ*>
-I
-v
-Â
-+Â	Â©Ã¢
-Ã­ÂÂÃ¬$VÂÂŽ$0WVÃšÂÂŒ$<WÃšÂÂ$8ÂD$PQÃšWÂT$
-VRÃšÂÃ
-_^ÂÃ$ÃÂÂÂÂ
-0<LÂÂD$ÂT$3ÃÂÂPÂÂH
-ÂPÂHÂÂÂÂÂÂ
-ÂÂ
-ÂÂ ÃÂÂÂÂÂÂÂ9.fileÃŸÃ¿gCrIFrDat.c@comp.idÃš
-+Ã¿Ã¿.drectvePSÃ®uj.textÃ°
-+ÂÂÃÃ 
- - = O f v Â Â .debug$FÃÂ¯UÂ¶.textP9jC(Âª Ã
- .debug$F.text@]
-
-Ã .debug$FÃ_XpmCreateImageFromData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage_XpmCreateXpmImageFromData_xpmParseData_OpenArrayCrIFrBuf.obj/   1345987751              100666  1699      `
-+LÂ§$:PÂ¶
-.drectveP,
-+.textÃ°|l
-+ P`.debug$FÃÃ HB.textPÃª: P`.debug$FbrHB.text | P`.debug$FÂÂ¬HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂÃ¬\ÂD$VWPÃšÂL$$QÃšÂÂ$tÂT$HRPÃšÂÂŽ$ÂÂÃÂ
-Ã¶tVÃšÂL$$VQÃšÂÂ$ÂÂT$,VÂD$RÂÂ$ÂPQÂÂ$ÂÂD$\RPQÃšÂÃžÂÃ(Â
-Ã¿|ÂL$ ÂT$QRVÃšÂÃ
-ÂD$ PÃšÂÃÂL$QÃšÂÃÂÃ_^ÂÃ\ÃÂÂ$tÂÂ$pjÂT$
-jRPÂÂ$xÂT$PQRPÃšÂÃ
-ÂÃžÃ«Â¶ÂÂÂ*>
-I
-v
-Â
-+Â	Â©Ã¢
-Ã­ÂÂÃ¬$VÂÂŽ$0WVÃšÂÂŒ$<WÃšÂÂ$8ÂD$PQÃšWÂT$
-VRÃšÂÃ
-_^ÂÃ$ÃÂÂÂÂ
-0<LÂÂD$ÂL$ÃÂHÃ@ÃÂÂÂÂÂÂÂ.fileÃŸÃ¿gCrIFrBuf.c@comp.idÃš
-+Ã¿Ã¿.drectvePSÃ®uj.textÃ°
-+ÂÂÃÃ 
- / ? Q h x Â Â .debug$FÃÂ¯UÂ¶.textP9jC(Â¬ Ã .debug$F.text EÂ¶Â€ÃÃ .debug$FÃ£_XpmCreateImageFromBuffer_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage_XpmCreateXpmImageFromBuffer_xpmParseData_OpenBuffer
-+create.obj/     1345987751              100666  11128     `
-+LÂ§$:PÂ"[.drectvePÃ
-+.textP$t P`.debug$FÂÂHB.textÂ°Â¢R P`.debug$FV	f	HB.textPp	Ã
-
- P`.data8@0Ã.debug$F=MHB.textW P`.debug$FgwHB.textPÂÃ P`.debug$FÃ¥ÃµHB.textÃÃ¿Â¿ P`.debug$FÃÃ£HB.text Ã­
- P`.debug$F'HB.text`1Â P`.debug$FÂÂ«HB.textÂÂµ5 P`.debug$FScHB.text`mÃ' P`.debug$FScHB.textÃm-!" P`.debug$FÂ"Â"HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES SÂ\$VÂt$ÂWÂÃt+Â>t&ÂŸÃPÃšÂŸQÂÃžÃšÂÃÂÃ;Ã¹uÂCCFÂÃuÃÂŸÂŸ_^+Ã[ÃÂÃ_^+Ã[Ã&PÂÃ¬,ÂD$8SUV3Ã¶W;ÃÂt$Ât$
-ÃD$$ÂÂt$Ât$Ât$(Ât$8tÂ0ÂD$L;ÃtÂ0Â|$PÂl$@;ÃŸt
-+Ã¶tÂGÃ«UÃšPUÃšÂÃ
-;ÃŸÂD$ tÃ¶t	ÂOÂL$0Ã«UÃšPUÃšÂÃ
-ÂD$0;ÃŸtÃ¶t	ÂW
-ÂT$,Ã«UÃšPUÃšÂÃ
-ÂD$,;ÃŸtÃ·t	ÂG|ÂD$@Ã«ÃD$@;ÃŸtÃ·t
-ÂÂÂÂL$4Ã«ÃD$4Ât$DÂV
-ÃÃ¢RÃšÂÃÂÃÂ
-ÃÂ\$Du
-_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃ,ÃÂF
-ÃÃ PÃšÂÃÂD$PÂ
-Ãu
-+Â»ÃœÃ¿Ã¿Ã¿Ã©0ÂN
-ÃÃ¡QÃšÂÃÂD$Â
-Ãu
-+Â»ÃœÃ¿Ã¿Ã¿Ã©ÂV
-ÃÃ¢RÃšÂÃÂD$Â
-Ãu
-+Â»ÃœÃ¿Ã¿Ã¿Ã©Ã®ÂL$8ÂT$(QPÂD$RÂT$\ÂL$0PÂF
-QÂNRSPQWUÃšÂÃÂÃ,Â
-Ãt
-ÂÂµÂ
-Ã¿tÂÃ¶Ãt
-ÂGXÂ
-ÃÂ
-ÂÂD$HÂ
-ÃtRÂL$,ÂD$@ÂÃ¹tÂžÂT$RÂVRÂRPÂD$0QPUÃšÂÃÂÃ
-Â
-ÃucÂL$DÂVÂFQÂRÂT$ PQRUÃšÂÃÂ|$$ÂÂÃ€ÂD$LÂ
-ÃÂÃÂNÂÂD$
-PÂD$DQÂL$(RPjQUÃšÂÃÂÃ
-Â
-ÃÂÂÂD$Â
-Ãt	PÃšÂÃÂD$
-Â
-Ãt	PÃšÂÃÂT$DRÃšÂD$TÂÃÂ
-Ãt	PÃšÂÃÂD$(Â
-ÃtÂt$jPÂD$8VPUÃ¿T$HÂÃÃ«Ât$Â
-Ã¶t	VÃšÂÃÂD$Â
-ÃÂÂŒPÃšÂÃÂÃ_^][ÂÃ,ÃÂL$PÂVÂFQÂRÂT$$PQRUÃšÂÃÂD$DPÃšÂL$TQÃšÂÃÂ
-Ã¿t
-ÂÃ¶ÃtÂT$ÂD$8ÂL$$ÂW$ÂG(ÂOTÃ«
-ÂT$RÃšÂÃÂ
-Ã¿tÃ·tÂD$ÂL$(ÂGpÂOtÃ«
-ÂT$RÃšÂÃÂD$HÂ
-ÃtÂL$ÂÂD$LÂ
-ÃtÂT$
-Â_^ÂÃ][ÂÃ,ÃÂÂÂU\{ÂÂ¡ÂšÃ¬2ÃŒ"CdÂ£Ã»8>Z8uÂÂÂ€ÃÃ©>
-(WÂÂ­
-
-ÂÃ¬0SUVÂt$D3Ã­W;ÃµÂl$0tÃ¶@tÂF,ÂN0ÂD$8ÂL$Ã«Âl$;ÃµtÃ¶t	ÂVÂT$Ã«Â|$DWÃšPWÃšÂÃ
-ÂD$;Ãµt
-+Ã¶tÂFÃ«Â|$DWÃšPWÃšÂÃ
-;ÃµÂD$,tÂÃ¶Ã@t	ÂNlÂL$
-Ã«ÂT$RÃšÂÃÂD$
-;ÃµtÃ·t
-ÂÂÂÂD$(Ã«ÃD$(;ÃµtÃ· t
-ÂÂÂÂL$$Ã«Âl$$ÂD$
-ÂÃšt$HtHt
-+ÃD$Ã«
-ÃD$Ã«ÃD$Ã«ÃD$9l$PÂÂ\$TÂT$3Ã¿;ÃÂ|$ ÂwÂD$LÂL$8Â|$4ÂL$TÂ@ÂD$<ÂÃÃ«ÂD$<Â9Â
-Ã¿tEÂ
-Ãt=ÂÃ°ÂÃÂÂÃ:u
-ÂÃtÂPÂÃ:VuÂÃÂÃÂÃuÃ 3ÃÃ«ÃÂÃÃ¿Ât$HÂL$TÂ
-ÃÂÂÂ
-Ã¿ujÂQÂ
-ÃtcÂD$ÂL$LÂ<ÂÂ
-ÂÂ
-Ã¿u
-ÂyÃŒÂÃ©HÂ
-Ã¿tÃµÂÃž}$ÂD$@ÂÃžÂL$LÂ
-ÂÂ9u	@ÂÃÂÃž~Ã²ÂÃž|ÂL$LÂÂÂ
-ÃtPRÃšÂÃÂ
-Ãt"ÂL$TÂD$4ÂT$@ÂÃ
-;ÃÂD$4ÂL$TÂ+Ã¿Ã¿Ã¿Ã«ÂL$TÂT$ÂD$4;ÃtqÂ9ÂqÂAÂ
-ÃÂfÂL$$ÂT$(QÂL$pRÂT$pjjVQÂL$|RÂT$|QÂL$|RÂT$|QÂL$TRÂT$pSUPÂD$LPQRÃšÂÃDÂ
-Ãu
-+ÃD$ Ã«ÃD$0ÂD$ Â|$
-Â
-ÃuwÂD$LÂ4ÂžÂÃ¿vkÂÂ
-ÃtWÂL$$ÂT$(QÂL$LRÂT$tjjQÂL$|RÂT$|QÂL$|RÂT$|QÂL$|RÂT$<QÂL$pSUPÂD$dRPQÃšÂÃDÂ
-ÃtÃD$0OÂÃ®Ã«ÂÃD$ ÂT$
-ÂD$ Â
-ÃÂrÂ
-ÃÂD$LÂ<Â°ÂÃŸÂÃ©ÂÂ
-ÃtWÂL$$ÂT$(QÂL$LRÂT$tjjQÂL$|RÂT$|QÂL$|RÂT$|QÂL$|RÂT$<QÂL$pSUPÂD$dRPQÃšÂÃDÂ
-Ãt^ÃD$0FÂÃÃ«ÂÂQÂÂAÂ
-Ãt$hPÃšÂÃÂ
-ÃuÂD$XÂL$\ÃÂ)Ã«
-+ÂT$XÃÂD$lÂ|$hÂÂÂÂÂAÂÃ«Ât$HÂ|$LÂL$XÂD$PEÂÃÂÃÂÃ;ÃšÂ|$LÂL$XÂÃŽÃŒÃ¿Ã¿ÂD$0_^][ÂÃ0Ã_^]ÂžÃŒÃ¿Ã¿Ã¿[ÂÃ0ÃÂÂÂÂÂÂÂÂÂFMlsÂ!Â¿&ÃœÂ-
--Â-Ã
-ÃNoneG
-
-ÂžÃÂÂÂÂÂÂÂÂÂÂ!ÂD$
-SÂ\$VÂt$WÂ|$Â
-ÃtVPWSÃšÂÃÂ
-Ãu_^ÂÃÃ¿[ÃVWSÃšÂÃ
-Ã·ÃÃ_^[Ã·ÃÃÂÂÂÂÂÂÂÂÂÂÂÂÂ
-(2'C&ÂÃ¬VÂt$
-hVÃšÂÃÂ
-ÃtyÂD$PÂT$ÂL$PÂD$QVRPÃ¿T$`ÂÃÂ
-Ã}
-+Âž^ÂÃÃu
-+Âž^ÂÃÃÂD$4Ât$0ÂT$ÂÂÂÂÂL$BÂÂD$$ÂT$(Ât$8ÂÂD$<ÃÂÂ
-ÂÂA^Â3ÃÂÃÃÂD$$ÂL$(ÂT$,^ÃÂD$
-ÃÃ¿Ã¿Ã¿Â3ÃÂÃÃÂÂÂÂÂÂÂÂ	
-Âž-ÂD$ÂL$
-ÂT$jPÂD$
-QRPÃšÂÃÃÂ32ÂL$
-ÂÃ¹vÂž Ã«Âž;ÃÃÂÃ ÂÃÂT$jPÂD$
-RÂT$
-PÂD$jjRQÂL$$PQÃšÂT$DÂÃ(ÂÃ·ÃÃÂÃ ÂÃÃœÃÂÂÂÂÂÂÂA9Y8ÂD$ÂT$SWÂÂÂ|$
-QPÃ¿ÂD$
-ÂD$3ÃÂ
-Ãv8UÂl$V3Ã¶Â
-Ã­v!ÂÂT$(ÂÃÂÂPÂD$SVÂQÃ¿F;ÃµrÃÂD$ C;ÃrÃ^]ÂD$
-ÂT$
-RÂQÃ¿_[ÃÂÂÂÂÂÂÂÂÂÂÂ@L?n@u>ÂÃ¬|ÂÂ$ÂS3ÃUV;ÃWÂ\$8Â\$<ÃD$XÂÂ\$Â\$Â\$ Â\$(Â\$\Â\$pÂ\$lÂ\$`Â\$$Â\$LÂ\$PÂ\$TtÂÂÂ$Â;ÃtÂÂÂŒ$ÂšÂÂŽ$Â;Ã»t
-+Ã¶tÂGÃ«VÃšPVÃšÂÃ
-;Ã»ÂD$HtÃ¶t	ÂOÂL$dÃ«VÃšPVÃšÂÃ
-ÂD$d;Ã»tÃ¶t	ÂW
-ÂT$@Ã«VÃšPVÃšÂÃ
-ÂD$@;Ã»tÃ·t	ÂG|ÂD$DÃ«ÃD$D;Ã»tÃ·t
-ÂÂÂÂL$hÃ«ÃD$hÂÂ$Â€;ÃtÂÃ¶Ã
-tÂŸÃ«3Ã¶ÂÂ¬$ÂÂt$4UÃšÂÃ;ÃÂ
-ÃŒÂT$`ÂD$lRÂL$|PÂT$|QÂD$(RÂL$ PÂT$DQÂD$DRPUÃšÂÃ$;ÃÂ
-Ã;Ã³tÂL$LQUÃšÂÃÂ|$
-v
-Â|$vÂT$|RÃšÂÃ;ÃÂ
-ÂÂT$
-ÂD$|ÂL$$PÂD$QRPUÃšÂÃ°ÂÃ;Ã³Â
-9\$4tÂL$PQUÃšÂÃÂT$ÂÂPÃšÂÃ;ÃÂD$u
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©EÂL$ÂÂRÃšÂÃ;ÃÂD$u
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©ÂD$Â
-Â
-QÃšÂÃ;ÃÂD$ u
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©Ã¹ÂT$ÂÂPÃšÂÃ;ÃÂD$(u
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©ÃÂT$(ÂL$pQÂL$$ÂD$`RPÂD$$ÂT$dQÂL$$RÂT$$PÂD$<QÂÂ$Â¬RPWQÃšÂÃ°ÂÃ,;Ã³tÂÂ;Ã»tÂÃ¶Ãt	9_XÂ
-u9Â$ÂtEÂL$@Âž;ÃuÂD$DÂL$0ÂT$8RÂT$0QÂL$PRÂÂ$ÂPÂD$PPQRÃšÂÃ°ÂÃ
-;Ã³Â
-'Â|$XÂt>9Â$Ât5ÂL$0ÂT$,ÂD$<PÂD$HQÂL$PRÂÂ$ÂPjQRÃšÂÃ°ÂÃ
-;Ã³Â
-ÃÂD$ÂL$<ÂT$PÂD$<QRÂT$0ÂÂ$ÂPÂD$,QÂL$$RÂT$HPÂD$HQÂÂ$Â°RPUQÃšÂT$DÂÃ°RÃšÂD$LÂ\$HPÃšÂÃ8;Ã³Â\$uwÂ|$
-vÂ|$v
-ÂL$|QÃšÂÃ9\$4tÂT$TRUÃšÂÃÂÂ$Â€;ÃÂ8ÂÃ¶Ã
-Â-ÂD$`;ÃÂÂ$Â€ÂÂHÂÃ
-QPUÃšÂÃ°ÂÃ
-;Ã³ÂÃ¿Â|$
-vÂ|$v
-ÂT$|RÃšÂÃÂD$$;ÃtÂL$QPÃšÂÃÂD$L;Ãt	PÃšÂÃÂD$P;Ãt	PÃšÂÃÂD$T;Ãt	PÃšÂÃÂD$8;Ãt	PÃšÂÃÂD$<;Ãt	PÃšÂÃÂD$;Ãt	PÃšÂÃÂD$;Ãt	PÃšÂÃÂD$\;Ãt
-Â|$ ÂT$dSPÂÂ$ÂWRPÃ¿T$|ÂÃÃ«Â|$ ;Ã»t	WÃšÂÃÂD$(;Ãt	PÃšÂÃÂÃ_^][ÂÃ|ÃÂX
-ÂXÂÂ$Â ÂL$,ÂT$0ÂÂL$
-ÂPÂT$ÂHÂL$$ÂP
-ÂHÂXÂÂ$Â€;Ãt69\$4tÂT$LÂL$PÂPÂT$TÂHÂP
-9\$ltÂL$tÂT$xÂHÂÂÃÂPÂ;Ã»t
-ÂÃ¶ÃtÂD$(ÂL$pÂT$XÂG$ÂO(ÂWTÃ«
-ÂD$(PÃšÂÃ;Ã»tÃ·tÂL$ ÂT$\ÂOpÂWtÃ«
-ÂD$ PÃšÂÃÂÂ$Â;ÃtÂL$8ÂÂÂ$Â;ÃtÂT$<Â3Ã_^][ÂÃ|ÃÂÂÂÂÂÂÂÂÂÂÂÂ§Â®ÃÃ2DM}LÂKÂ²JÃIÃµK	/U{Ã/8w8ÃRÃÃ¡HKVG{HÂFÂ¢Â³ÃÃÃŠÃ·>OÃ»$WEÂL$ÂÃ¬
-ÂÃSUVHWÂÃ­HÂÂÃ¹ÃD
-
-ÂhÂÂŒ$0ÂZÂÂ$,ÃD$Â
-ÃÂSÂÂŒ$$ÂÂ$ WÃšÂÂ$,ÂÃ3Ã­Â
-ÃÂÃ¶ÂÂ$43Ã¶Â
-ÃvOÂÂ
-Ãt/ÂÃžt*ÂGÂHIÂHÂOÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂOÂŸAÂOÂD4
-ÂÂ$4F;Ã°rÂ±ÂÂ$<ÂD$
-PQÃšÂÃ°ÂÃÂ>ÂÃ¿ÂÂ$@Â
-ÂPQÃ¿ÂÂÂ$DÂBÂÂÂD$Â
-RPUQÃ¿ÂÂ$HÂ
-Ãt-Â
-ÂÃÂPQÃ¿ÂÂÂ$LÂBÂÂÂD$Â
-RPUQÃ¿ÂÂ$(E;ÃšÂ
-+Ã¿Ã¿Ã¿ÂD$ÂÂ$,@;ÃÂD$ÂÃÃŸÃ¿Ã¿_^]3Ã[ÂÃ
-ÃÂÂ$,ÃD$Â
-ÃÂÃ¹ÂÂ$$SÃšÂÂ$,ÂÃÂ
-ÃÃD$Â6ÂÂŒ$43Ã¶Â
-Ã¿vHÂÂ
-Ãt/ÂÃžt*ÂCÂHIÂHÂKÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂKÂŸAÂKÂD4
-F;Ã·rÂžÂÂ$03Ã¿Â
-ÃvJÂÂ¬$8ÂEÂt$
-ÂÂÃ:u
-ÂÃtÂPÂÃ:VuÂÃÂÃÂÃuÃ 3ÃÃ«ÃÂÃÃ¿Â
-ÃtÂÂ$0GÂÃ
-;ÃžrÂœ;ÂŒ$0ÂiÂÂ$@ÂÂŽ$ ÂÂQRÃ¿ÂÂ$DÂT$Âl$Â
-ÂžÂQRUPÃ¿ÂÂ$HÂ
-Ãt&ÂÂQRÃ¿ÂÂ$LÂT$Â
-ÂžÂQRUPÃ¿ÂÂ$(E;ÃšÂl$ÂÃÃŸÃ¿Ã¿ÂD$ÂÂ$,@;ÃÂD$ÂÂÃŸÃ¿Ã¿_^]3Ã[ÂÃ
-ÃÂÂ¬$0Â¹3ÃÂ|$
-Ã³Â«3Ã¿Â
-Ã­vIÂÂ$8Â
-ÂŸÂtÂ
-ÂDÂ
-Â
-ÃujhÃšÂÃÂÂ
-ÃÂÂÂ3ÃÂWGÂHÂÂÃ;ÃœfÂHrÂŸÂÂ$,ÃD$Â
-ÃÂÃÂÂŽ$(ÂÂ¬$$ÂÂ$ UÃšÂÃÃD$Â
-Ã¶ÂÂÂEÂ
-ÃteÂÃžt`ÂEÂPJÂPÂEÂHÂ
-Ã|=Â03ÃÂFÂL$Â0Ã«KÂt$
-Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃ
-ÃPÃšÂÃÂD$Ã«ÂEÂŸ@ÂT$ÂEÂD$Â
-ÃÂ{=ÂpÂEÂ
-Ãt3ÂÃžt.ÂEÂPJÂPÂEÂHÂ
-Ã|
-Â83ÃÂGÂÃ±Â8Ã«PÃšÂÃÂÃ°Ã«
-+ÂEÂŸ0@ÂEÂ
-Ã¶ÂÃ¶ÂÃŸÂÃªÂT$Â|Â
-Â
-Ã¿ÂÃfÂ<wÂÃÂÂ$@ÂÂQRÃ¿ÂÂ$D3ÃfÂwÂTÂÃŒÂD$ÂL$RÂPQRÃ¿ÂÂ$HÂ
-Ãt1ÂÂQRÃ¿ÂÂ$L3ÃfÂwÂTÂÃŒÂD$ÂL$RÂPQRÃ¿ÂD$ÂÂŽ$(@;ÃÂD$ÂpÃŸÃ¿Ã¿ÂD$ÂÂ$,@;ÃÂD$Â?ÃŸÃ¿Ã¿Ât$
-Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«_^]3Ã[ÂÃ
-ÃÂt$
-Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«_^]ÂžÃŸÃ¿Ã¿Ã¿[ÂÃ
-ÃÂt$
-Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«_^]ÂžÃŸÃ¿Ã¿Ã¿[ÂÃ
-ÃÂÂ¬$HÂÂŽ$ Â=Â
-Ã­tÂPÃ¿ÂMÂÃQSÃ¿ÃÂD$Ã«3ÃÂÂ$@ÂÂPQÃ¿ÃÂÂŽ$0ÂD$Â¹Â3ÃÂ|$
-Â
-Ã¶Ã³Â«v
-ÂÂ$8Â93ÃÂh@ÂÂÃ;ÃfÂlT
-rÃªÂÂ$,3Ã­Â
-ÃÂÃ©ÂÂŽ$$VÃšÂÂ$,ÂÃ3Ã¿Â
-ÃÂÂžÂÂ
-Ãt/ÂÃžt*ÂFÂHIÂHÂNÂAÂ
-Ã|
-Â3ÃÂBÂÃ«QÃšÂÃÃ«
-+ÂNÂŸAÂNÂ
-ÃÂÃœÃŸÃ¿Ã¿=ÂÃ²ÃŸÃ¿Ã¿fÂDD
-fÂ
-ÃÂÃ€ÃŸÃ¿Ã¿%Ã¿Ã¿ÂÂ$ ÃÃ ÂÃ°ÂÂ$DÂLÃŒÂQUWPÃ¿Â
-ÃtÂÂ$LÂTÃŒRUWSÃ¿ÂÂ$(ÂÂŽ$$G;ÃžÂHÃ¿Ã¿Ã¿ÂÂ$,E;ÃšÂ
-Ã¿Ã¿Ã¿Â
-ÃtÂD$PSÃ¿SÃ¿ÂÂ$ ÂL$QÂPÃ¿_^]3Ã[ÂÃ
-ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂaXÂ²WÃ£V@#?<@[?ÂŽX
-WÂ¡@Â¿?Ã@Ã°?gUÂŸX4WÂWÃš@
-?$@I?ÂÂ¹Ã§@!TÂXÃW4?M?Â@ÂSÂ @Â±
-R.fileÃŸÃ¿gcreate.c@comp.idÃš
-+Ã¿Ã¿.drectveP.textPÃ(Â { _tolower .debug$FÂŸA.textÂ°~ÂÃ€Ã _free / > S b t Â .debug$FÃÃ~y.textP
-ÃFCÃ»Â .dataÂµxEÃÂ¢.debug$F.text	Ã¡Âº1Âž	 .debug$F
-+Ã®Ã®jN	.text
-P3Â·Ã·ÃÃ
- Ã Ã  .debug$F
-
-.text
-ÃeÃ!,Ã­
- .debug$FÃ²ÂÂ¶
-.text Â Â±=ÂÃ·  .debug$FÃÂÂÃ.text`ÃÃÃÃ 
- .debug$FtÂŸÃ€B.textÂy5gÃž, ? R .debug$F7Y,Â«.text`'Ã0^h  Â ÂŠ Âž Ã Ã Ã¥ Ãµ .debug$FRÂT.textÃ"ÂÃÃÂ  * F [ __filbuf h .debug$Fw_xpmstrcasecmp_XpmCreateImageFromXpmImage_XDestroyImage_boundCheckingMalloc_XDefaultDepth_XDefaultColormap_XDefaultVisual_XDefaultScreen_CreateColors??_C@_04COF@None?$AA@_xpmVisualType_AllocColor_XAllocColor_XParseColor_SetColor_FreeColors_XFreeColors_CreateXImage_XCreateImage_MSWPutImagePixels__imp__SetPixel@16__imp__SelectObject@8_xpmParseDataAndCreate_xpmFreeColorTable_xpmParseExtensions_xpmHashTableFree_xpmParseColors_xpmHashTableInit_xpmGetCmt_xpmParseValues_xpmParseHeader_ParseAndPutPixels__imp__DeleteDC@4__imp__CreateCompatibleDC@4_boundCheckingCalloc_xpmHashSlot_xpmNextStringCrDatFrI.obj/   1345987750              100666  4690      `
-+LÂŠ$:PH
->.drectveP
-
-+.textÂ\Ã¬ P`.debug$F
-.HB.textÃ°8( P`.dataÂŸ@0Ã.dataÃ@0Ã.data
-Ã@0Ã.debug$FÃÃ©HB.textÃ³	 P`.data?	@0Ã.debug$FF	V	HB.textÃ`	 
-+ P`.debug$F4
-+D
-+HB.textÂN
-+ P`.debug$FÃ
-+Ã
-+HB.textÃš
-+Ãš
- P`.data
-+
-@0Ã.data
-+$
-@0Ã.debug$F.
->
-HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂÃ¬8VWÂ|$HÂ
-Ã¿tÃÂt$TÂL$PÂT$LÂD$VPÂD$LQRPÃšÂÃÂ
-ÃuEÂ
-Ã¶t ÂL$ VQÃšÂT$(ÂD$RPWÃšÂÃÃ«ÂL$jQWÃšÂÃ
-ÂT$ÂÃ°RÃšÂÃÂÃ_^ÂÃ8ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ-
-+C	SetÂÂÃ¬$ÂÂ$(ÂÂ$0SUV3Ã¶;ÃWÂt$,Ât$Â0tlÂÃ¶ÃteÂA;Ãt^ÂT$ÃD$ RÂT$0RPÂA
-PÃšÂÃÂÂ$<jÂ{
-GÂ|$ÂÂœPÂD$
-ÃšÂÃšÂÃ;Ã®Âl$
-u_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃ$ÃÂt$ Ã«Â»ÂKÂS
-ÂCQÂ
-RPQÂT$DhRÃšÂtLÂÂ$XÂÃÂ
-Ãt
-Ã¶tÂHÂPQRhVÃšÂÃÃ°ÂD$ Â
-ÃtÂ¡ÂÂ
-ÂNÂÃÂT$4+Ã²FVÃšÂÃÂEÂ
-Ãu
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©ÂÂL$Â|$4Ã3ÃÂL$ÂÃÃ¿Ã²Â®Ã·Ã+Ã¹ÂÃÂÃ·Â}ÃÃ©Ã³Â¥ÂÃÂÃ¡Ã³Â€ÂKÂS
-ÂCQRÂL$
-PÂUQRÃšÂÃ°ÂÃÂ
-Ã¶Â
-<ÂÂL$Â¯C@ÂT$ÂD$0ÂÃÂ¯CÂt$,ÃÂÂÃPÃšÂÃšÂÃÂ
-Ã­u
-+ÂŸÃœÃ¿Ã¿Ã¿Ã©ÃºÂCÂL$Â|$ÃÃÂÃÂLÂ
-ÂMÂL$
-ÂC
-+Ã@ÂL$$ÂD$(Ã«ÂL$$Â<ÂÃÃ¿3ÃÂÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·ÂzÃŒÃÃ©Ã³Â¥ÂÃ3ÃÂÃ¡Ã³Â€ÂL$$Â|ÃŒÂÃÃ¿Ã²Â®ÂBÃŒÃ·ÃIÂLÂD$(Â
-+HÂD$(uÂ²ÂT$ÂKÂÂÂT$ÃÃ
-ÂTÂÂL$ÃÂÂKÂSQÂKRÂSQÂ
-RQPÃšÂD$8ÂÃÂ
-Ãt/ÂÂ$@ÂT$RÂHÂP
-ÂD$4QÂKRÂT$
-PÃÂTÂÃŒRÃšÂÃÂÂ$83Ã¶Â(Âl$
-Â|$Â
-Ã¿vÂÃÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«UÃšÂÃÂÃ_^][ÂÃ$ÃÂÂÂÂÂÂÂÂÂN0s
-Â®ÂŽÃÃÃ°Ãž
-e!Âe+Â5ÃÃ XPMEXT %d %d%d %d %d %dÃ§ÂÂÃ¬ÂÂ$SUVÂ
-ÃWÃD$ÂÃÂÂŽ$(ÂÂ¬$ Ã«ÂÂŽ$(ÂEVPÂD$
-PÂ]ÃšÂÃ
-Ât4Â¿ÂÂ
-ÃtÂPQhVÃšÂÃÃ°ÂÃÂÃÂÃ¿~ÃÂT$+Ã²FVÃšÂÃÂÃÂ
-ÃtiÂÂ$
-ÂÃÃ¿ÂÃ
-Â8ÃŸÂ8Â|$3ÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·ÂÃºÃÃ©Ã³Â¥ÂÃÂD$ÂÃ¡@Ã³Â€ÂÂ$ÂD$ÂÂÃÂÂ$ÂÂ$$;ÃÂAÃ¿Ã¿Ã¿_^]3Ã[ÂÃÃ_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃÃÂÂÂF&R%a$gx%Â	%s %s
-Â!ÂD$
-ÂT$SUVÂt$
-ÂHÃ¿ÂÃÂ¯Ã@WÂ
-ÃÂD$ vaÂ\$$Âl$ÂL$
-Â}Â
-Ãv3ÂT$$ÂÂT$(VÂ
-@ÂÃPWÃšÂD$0ÂÃ
-ÃŸÂÃHÂD$$uÃÂT$ÂD$ ÃÂMÃÂMÂL$
-ÂÃ
-IÂL$
-uÂ­Ã«Â\$$Âl$Â}Â
-Ãv!ÂÃªÂVÂ@ÂD$,Â
-ÃQWÃšÂÃ
-ÃŸÂÃMuÃ¡Ã_^][ÃÂÂÂÂÂÂH&Â£&Âº+ÂL$3Ã3ÃÂ
-Ãv[SUÂl$
-VWÂL$Â]Â}ÂÃÃ¿ÂuÂDÂD$3ÃÃ²Â®Ã·ÃIÂ
-ÃÂT
-+vÂ>ÂÃÃ¿3ÃÂÃÃ²Â®Ã·ÃIKÂT
-+uÃªÂD$ÂÃ
-
-HÂD$ÂD$uÂµ_^][ÂL$
-ÂÃ
-+@ÂÂT$ÂÃÂÂÂÂÂÂÂÂx0ÂD$ÂT$SUÂXÂÃ3Ã­ÂÂD$Â
-ÃÂÂ¶VWÂD$Ât$
-ÂÂQhRÃšÂD$0ÂÃ
-E;ÃšsÂ>ÂÃÃ¿3ÃÃ²Â®ÂÃ·ÃIÂLÂKÂFÂVÂÃÂ
-ÃvVÂD$Â:ÂÃÃ¿3ÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·Â;ÃÃ©Ã³Â¥ÂÃÂD$$ÂÃ¡E;ÃšÃ³Â€sÂ:ÂÃÃ¿3ÃÃ²Â®ÂÃ·ÃIÂLÂKÂD$ÂÃÂÃHÂD$uÂ²Ât$
-ÂD$ÂÃ
-HÂt$
-ÂD$Â
-RÃ¿Ã¿Ã¿_^ÂÂ¡][ÂÂ
-ÂJfÂ¡fÂBÃÂÂÂÂÂÂÂÂÂÂ1;7Ã8Ã€8Ã­8XPMENDEXTXPMEXT %sÃ¶5.fileÃŸÃ¿gCrDatFrI.c@comp.idÃš
-+Ã¿Ã¿.drectveP-Ã·Q".textÂÂÃ 
- - 9 .debug$FÂ¡$Ã³W.textÃ°ÂŽ{#U _free p .dataÃ
-UÂ
-.dataÃ¹KkÂ _sprintf .data
--ÃNÃÃÃ¯ .debug$FÃµIÂŸÂ.text	ÃÃÃ§Âš	 .data
-+IJ-ÃŠ
-+3_strncpy .debug$F
-	.text
-Ã+ÃÂ*A
- .debug$F
-
-.textÂ</O .debug$FÂµÃŽyi.text24y` .data
-+ÃªÃÂ©ÃŽr.data
-+Â¹ÃšÃÃÂ.debug$FÂ®_XpmCreateDataFromImage_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage_XpmCreateDataFromXpmImage_boundCheckingMalloc??_C@_07MEOC@?5XPMEXT?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@_boundCheckingCalloc_CreateColors??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@_xpmColorKeys_CreatePixels_CountExtensions_CreateExtensions??_C@_09IGJF@XPMENDEXT?$AA@??_C@_09CHAC@XPMEXT?5?$CFs?$AA@CrBufFrI.obj/   1345987750              100666  5927      `
-+LÂŠ$:PÃR.drectveP$
-+.textÂt P`.debug$F6FHB.text@PÂ P`.dataÂ	@0Ã.dataÂ	@0Ã.dataÂ	@0Ã.dataÂ€	@0Ã.data
-Â«	@0Ã.dataÂž	@0Ã.data*Ã	@0Ã.debug$FÃª	Ãº	HB.textP
-+T
- P`.dataÂ
-@0Ã.debug$FÂ¡
-Â±
-HB.textÂ°Â»
-k
- P`.debug$FÂ
-Â
-HB.textpÂ£
- P`.debug$F
-#
-HB.textÂ -
-Ã
- P`.data
-@0Ã.data+@0Ã.data2@0Ã.debug$F@PHB.textPZ P`.debug$FÂªÂºHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ÂÃ¬8VWÂ|$HÂ
-Ã¿tÃÂt$TÂL$PÂT$LÂD$VPÂD$LQRPÃšÂÃÂ
-ÃuEÂ
-Ã¶t ÂL$ VQÃšÂT$(ÂD$RPWÃšÂÃÃ«ÂL$jQWÃšÂÃ
-ÂT$ÂÃ°RÃšÂÃÂÃ_^ÂÃ8ÃÂÂÂÂÂÂÂÂÂÂÂÂÂ-
-+C	SetÂÂÃ¬ÂÂ$SÂÂ$$UVW3Ã­3Ã¶3Ã¿;ÃÂl$Â(Â¹t
-+ÂÂL$
-ÂÃ¡uÂl$
-;ÃtrÂÃ¶ÃtkÂC;Ã
-tdÂL$ ÂK
-PQÃšÂÃÂÃ°9l$
-t
-SÃšÂÃÂÃžÂT$$hRÃšÂD$ÃÂD0PÂD$$ÃšÂÃÂÃ
-;ÃÂT$u_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃÃÂl$ Ã«Â©Â|$$ÂÃÃ¿3ÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·ÂÃºÃÃ©Ã³Â¥ÂÃÂD$
-ÂÃ¡;Ã
-Ã³Â€t*Â[;Ãt#ÂL$ÂT$SÃhRÃšÂL$
-ÂÃ
-ÃÂL$ÂÂ$,ÂCÂK
-ÂSPÂQRPÂL$4hQÃšÂÃšÂÂ$HÂÃÂ
-Ãt!Ã¶t
-ÂPÂ@RPÂL,,hQÃšÂÃÃšÂD$ Â
-ÃtÂT,$hRÃšÂÃÃšÂD,$hPÃšÂL$
-ÃšÂD$ Ã
-PQÂD$(ÃšÂÃÂ
-ÃÂÃÂT$ÂD$ÃÂ|$$ÂÃÃ¿3ÃÃ²Â®Ã·Ã+Ã¹ÂÃÂÃ·ÂÃºÃÃ©Ã³Â¥ÂÃÂÃ¡Ã³Â€ÂL$Â|$
-ÃÂÂ¬$0Â
-Ã¿ÂL$t*ÂEÂ
-Ãt#ÂL$ÂT$PÃhRÃšÂL$
-ÂÃ
-ÃÂL$ÂCÂK
-ÂSPQÂD$RÂL$$PÂT$$QRÃšÂÃ°ÂÃÂ
-Ã¶u0ÂCÂL$Â¯ÂÃÂT$Â¯CÂDPRÂD$ ÃšÂÃÂ
-Ãu#ÂŸÃœÃ¿Ã¿Ã¿ÂD$Â
-Ãt	PÃšÂÃÂÃ_^][ÂÃÃÂ
-Ã¿ÂD$t&ÂM
-Â
-ÃtQÂL$ÃhPÃšÂL$
-ÂÃ
-ÃÂL$ÂSÂCÂKRÂSPÂQRÂT$ PÂD$(ÂL$$ÃQRÃšÂD$<ÂÃ
-Â
-Ãt ÂMÂU
-QÂL$RÂT$ÂD$ÃPRÃšÂÃÂD$ÂL$Â_ÂÂÂ$$ÂD$^Â]3Ã[ÂÃÃÂÂW<hOv(|%Â$Ã³#Ã¹%% +%Q
-W%ms%ÂÂ%Â#
-+%7-d~Â©#Â¯%Ã€7
-A
-};
-+",
-+ XPMEXT %d %d"%d %d %d %d/*%s*/
-+/* XPM */
-+static char * image_name[] = {
-+>Â
-ÂÃ¬ÂÂ$
-SUVÂ
-ÃWÃD$"ÃD$ÂÂÂŽ$0ÂÂ¬$$Ã«ÂÂŽ$0ÂÂ$(VÂÂÃPÂD$!PÃšÂÃ
-Ât4Â¿ÂÂ
-ÃtÂPQhVÃšÂÃÃ°ÂÃÂÃÂÃ¿~ÃÂÂD$Â+Ã°ÂÂ$
-ÂÃÂÃÂÂŽ$ ÂÂÃQPÃšÂÃÂÃÂ
-ÃtyÂ>ÂÃÃ¿Ã»3ÃÂ>ÂuÂ|$Ã²Ã²Â®Ã·Ã+Ã¹Ât$ÂÃÂÃ·Â|$ÃÃ©Ã³Â¥ÂÃÂD$ÂÃ¡Ã³Â€Â}ÂÂ$
-Ã»@Â}ÂÂÂ$(ÂÂ$,ÂÃ;ÃÂD$ÂÂ$(Â
-+Ã¿Ã¿Ã¿_^]3Ã[ÂÃÃ_^]ÂžÃœÃ¿Ã¿Ã¿[ÂÃÃÂÂÂÂÂÂÂQ2]1l0r%Â1ÂÂ³	%s %sIÂ-ÂD$SÂ\$HUVÂt$WÂ
-ÃvOÂ|$(ÂD$ Âl$
-Ã"FÂ
-Ã­v#ÂÂT$,SÂ
-@ÂÃPVÃšÂÃ
-Ã³ÂÃMuÃ¡Âl$
-Â
-ÂD$ ÂÂÃHÂD$ uÂ»Ã«Â|$(Âl$
-Ã"FÂ
-Ã­vÂSÂ@ÂD$0Â
-ÃQVÃšÂÃ
-Ã³ÂÃMuÃ¡Â|$ÂD$Ã"+Ã·ÂFÃ_^]Â[ÃÂÂÂÂ92NÂ2Â¬7ÂD$3ÃÂ
-ÃvTSÂ\$UVWÂD$Â;ÂÃÃ¿3ÃÂsÃ²Â®ÂCÃ·ÃIÂ
-ÃÂT
-+
-vÂÃšÂ>ÂÃÃ¿3ÃÂÃÃ²Â®Ã·ÃIMÂT
-+uÃªÂD$ÂÃ
-HÂD$uÃ_^]ÂB
-[ÃÂB
-ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂb<ÂD$VÂt$WÂ
-ÃvRSÂ\$UÂD$ ÂPhVÃšÂ{Ã°ÂCÂÃ
-Â
-ÃvÂÃšÂQhVÃšÂÃ
-Ã°ÂÃMuÃ§ÂD$ ÂÃ
-HÂD$ uÂº][Â¡ÂÃÂ|$
-ÂÂ
-+Ã·_ÂJÂ¡ÂÃ
-ÂBfÂ
-
-ÂD$
-fÂJ
-ÂÃ^ÂÃÂÂÂÂÂ
-J"%;GA%aDoDzDÂD,
-+"XPMENDEXT",
-+"%s",
-+"XPMEXT %s"ÂAVÂt$W3ÃÂ~Â
-Ã¿tÂÃÃ¿3ÃÃ²Â®Ã·ÃIÂÃÂÃÂ~Â
-Ã¿tÂÃÃ¿3ÃÃ²Â®Ã·ÃIÂT
-+Â~
-Â
-Ã¿tÂÃÃ¿3ÃÃ²Â®Ã·ÃI_^ÂD
-+Ã_ÂÃ^ÃPO.fileÃŸÃ¿gCrBufFrI.c@comp.idÃš
-+Ã¿Ã¿.drectveP-Ã·Q".textÂÂÃ 
- / ; .debug$F)Ã€Ã®Ã.text@Ã²Â _OW .dataÂºÂÂKt_free Â .dataÂ»0ÂÃÂ§.dataÃ
-UÃ.dataÃ¹KkÃ.data	
-Â$l
-ÃŸ	.data
-+Â¿ÂŸÃ¹Â€0
-+V _sprintf .data
-*Ã#Â·Ã¢k
-.debug$F
-ÃµIÂŸÂ.text
-PÃ¢FÂ­
- .dataIJ-ÃŠÂºÃ_strncpy .debug$F
-.textÂ°ÃÂenÃ© .debug$F.textpBÃ!Ã¶ .debug$F:yÂ.textÂ u,l .data".]Ã.dataÃÃnt@.dataTU<d.debug$F.textP'Ã²
-Â .debug$FÂ_XpmCreateBufferFromImage_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage_XpmCreateBufferFromXpmImage??_C@_03FMCK@?$HN?$DL?6?$AA@_boundCheckingRealloc??_C@_03NNMC@?$CC?0?6?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@_boundCheckingMalloc??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@_WriteColors??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@_xpmColorKeys_WritePixels_ExtensionsSize_WriteExtensions??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@_CommentsSize
-+Attrib.obj/     1345987750              100666  3166      `
-+LÂŠ$:P^/.drectvePÂŒ
-+.textP
-\ P`.debug$FpÂHB.textpÂÃº P`.debug$F"2HB.text< P`.debug$FL\HB.text@f P`.debug$FÂŠÂ¶HB.textÃ°ÃÂ° P`.debug$FÃÃHB.textPÃ. P`.debug$F8HHB.textRR	 P`.debug$FÂ¬ÂŒHB.text`Ã& P`.debug$FDTHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES SÂ\$Â
-Ãt?ÂD$
-Â
-Ã~.UVWÂÃšÂÃ³Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«ÂÃMuÃÂ\$_^]SÃšÂÃ[ÃÂÂÂÂÂÂ%AJWÂ|$Â
-Ã¿teÂD$
-Â
-ÃvTSUVÂÃÂÃšÂGÃžÂ
-Ãt	PÃšÂÃÂGÃŒÂ7Â
-ÃvÂÃÂÂ
-Ãt	PÃšÂÃÂÃKuÃ«ÂÂ
-Ãt	PÃšÂÃÂÃ
-MuÂ»Â|$^][WÃšÂÃ_Ã"<Qgp
-ÂžÂÃÂÂÂÂÂÂÂÂÂÂÂD$3Ã;Ãt0ÂÂH$Ã¶ÃÂH(ÂHDÂH@ÂHHÂHLÂHPtÂH<ÂH8Ã·ÃtÂHpÂHtÃÂÂÂÂÂ;SUÂ\$VÂt$3Ã­WÂ|$
-ÂÃ¶ÃÂtÂCÂFDÂK
-ÂN@Âk
-ÂkÃ«iÃ¶ÃtdÂC
-ÂKÂVDRPQÃšÂÃ
-Â
-Ãt%ÂÂÃ¥ÃŸÂÃÂÃ¶ÃuÂV$RÃšÂÃÂn$Ân(Ân@Ã«'ÂC
-ÂF@ÂOÂNHÂWÂVLÂG
-ÂFPÂk
-ÂkÂoÂoÂo
-ÂÃ¶ÃtÂO
-ÂN<ÂWÂV8Âo
-ÂoÃ¶tÂ
-ÂÂGÂFÂOÂN
-Â_ÂÃ ÂÃÂÂS
-ÂV ÂÂÂFÂKÂN^][ÃÂÂÂÂÂÂÂ?!]Ã©
-VÂt$
-ÂÂµPÃšÂÃÂ
-Ãu
-ÂL$^ÂÂžÃœÃ¿Ã¿Ã¿ÃÂ
-Ã¶ÂÃ~ÂT$ÂÂÃÂÃNuÃµÂT$^Â3ÃÃÂÂÂÂÂÂÂÂÂÂÂ"E!VÂt$W3Ã¿ÂÃ¶Ãt9~(tÂF$PÃšÂÃÂ~$Â~(ÂÃ¶ÃÂtÂN@ÂVDQRÃšÂÃÂ~DÂ~@Ã«nÃ¶ÃtiÂFD;ÃtÂN@QPÃšÂÃÂ~DÂ~@ÂFH;Ãt
-PÃšÂÃÂ~HÂFL;Ãt
-PÃšÂÃÂ~LÂFP;Ãt
-PÃšÂÃÂ~PÂF$;ÃtPÃšÂÃÂ~$Â~(ÂÃ¶ÃtÂF8;ÃtÂV<PRÃšÂÃÂ~<Â~8Ã·t9~ttÂFpPÃšÂÃÂ~pÂ~tÂ>_^ÃÂÂÂÂÂÂÂÂ6W,mÂÂÂŠÃ
-ÃŠÃž'SÂ\$Â
-ÃtGÂD$
-Â
-Ã~.UVWÂÃšÂ3Â¿ÂÂ
-Ãt	PÃšÂÃÂÃOuÃ«ÂÃMuÃÂ\$_^]ÂPÃšSÃšÂÃ[ÃÂÂÂÂÂÂÂÂÂÂÂÂÂÂ%CIR,.fileÃŸÃ¿gAttrib.c@comp.idÃš
-+Ã¿Ã¿.drectveP.textP
-Ã­gG _free .debug$F.textpÂ
-1 .debug$F.text5]Ã+* .debug$F.text@ÃÂ¶
-F= .debug$F	.text
-+Ã°+Ã (?P
-+ .debug$F
-SÃµm2
-+.text
-PQÂµ	b
- w .debug$F
-
-.text	Ã:(Ã²Â .debug$F.text`dÂŽÂ .debug$FÂ²_xpmFreeColorTable_XpmFreeExtensions_XpmAttributesSize_xpmInitAttributes_xpmSetAttributes_CreateOldColorTable_boundCheckingMalloc_XpmFreeAttributes_FreeOldColorTable
-\ No newline at end of file
-diff -Naur vim73.orig/src/xpm_w32.c vim73/src/xpm_w32.c
---- vim73.orig/src/xpm_w32.c	2010-05-15 11:04:07.000000000 +0000
-+++ vim73/src/xpm_w32.c	2012-11-01 20:35:45.000000000 +0000
-@@ -1,4 +1,5 @@
--/*
-+/* vi:set ts=8 sts=4 sw=4:
-+ *
-  * Load XPM image.
-  *
-  * This function is placed in separate file because Xpm headers conflict with
-@@ -30,9 +31,10 @@
- #include "xpm.h"
- 
- /*
-- * Tries to load Xpm image from file 'filename'.
-- * If fails return -1.
-- * success - 0 and image and mask BITMAPS
-+ * Tries to load an Xpm image from the file "filename".
-+ * Returns -1 on failure.
-+ * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
-+ * "hShape".
-  */
-     int
- LoadXpmImage(filename, hImage, hShape)
-@@ -40,7 +42,7 @@
-     HBITMAP *hImage;
-     HBITMAP *hShape;
- {
--    XImage	    *img;   /* loaded image */
-+    XImage	    *img;  /* loaded image */
-     XImage	    *shp;  /* shapeimage */
-     XpmAttributes   attr;
-     int		    res;
-@@ -51,10 +53,13 @@
-     DeleteDC(hdc);
-     if (res < 0)
- 	return -1;
--    else
-+    if (shp == NULL)
-     {
--	*hImage = img->bitmap;
--	*hShape = shp->bitmap;
--	return 0;
-+        if (img)
-+	    XDestroyImage(img);
-+	return -1;
-     }
-+    *hImage = img->bitmap;
-+    *hShape = shp->bitmap;
-+    return 0;
- }
-diff -Naur vim73.orig/src/xxd/Make_ming.mak vim73/src/xxd/Make_ming.mak
---- vim73.orig/src/xxd/Make_ming.mak	1970-01-01 00:00:00.000000000 +0000
-+++ vim73/src/xxd/Make_ming.mak	2012-11-01 20:35:43.000000000 +0000
-@@ -0,0 +1,28 @@
-+# The most simplistic Makefile, for MinGW gcc on MS-DOS
-+
-+ifndef USEDLL
-+USEDLL = no
-+endif
-+
-+ifeq (yes, $(USEDLL))
-+DEFINES =
-+LIBS    = -lc
-+else
-+DEFINES =
-+LIBS    =
-+endif
-+
-+CC = gcc
-+CFLAGS = -O2 -Wall -DWIN32 $(DEFINES)
-+
-+ifneq (sh.exe, $(SHELL))
-+DEL = rm
-+else
-+DEL = del
-+endif
-+
-+xxd.exe: xxd.c
-+	$(CC) $(CFLAGS) -s -o xxd.exe xxd.c $(LIBS)
-+
-+clean:
-+	-$(DEL) xxd.exe
-diff -Naur vim73.orig/src/xxd/xxd.c vim73/src/xxd/xxd.c
---- vim73.orig/src/xxd/xxd.c	2010-05-15 11:04:06.000000000 +0000
-+++ vim73/src/xxd/xxd.c	2012-11-01 20:35:41.000000000 +0000
-@@ -49,6 +49,8 @@
-  *	    option -b added: 01000101 binary output in normal format.
-  * 16.05.00 Added VAXC changes by Stephen P. Wall
-  * 16.05.00 Improved MMS file and merge for VMS by Zoltan Arpadffy
-+ * 2011 March  Better error handling by Florian Zumbiehl.
-+ * 2011 April  Formatting by Bram Moolenaar
-  *
-  * (c) 1990-1998 by Juergen Weigert (jnweiger@informatik.uni-erlangen.de)
-  *
-@@ -207,8 +209,9 @@
- 
- /* Let's collect some prototypes */
- /* CodeWarrior is really picky about missing prototypes */
--static void exit_with_usage __P((char *));
--static int huntype __P((FILE *, FILE *, FILE *, char *, int, int, long));
-+static void exit_with_usage __P((void));
-+static void die __P((int));
-+static int huntype __P((FILE *, FILE *, FILE *, int, int, long));
- static void xxdline __P((FILE *, char *, int));
- 
- #define TRY_SEEK	/* attempt to use lseek, or skip forward by reading */
-@@ -223,9 +226,10 @@
- #define HEX_CINCLUDE 2
- #define HEX_BITS 3		/* not hex a dump, but bits: 01111001 */
- 
--static void
--exit_with_usage(pname)
--char *pname;
-+static char *pname;
-+
-+  static void
-+exit_with_usage()
- {
-   fprintf(stderr, "Usage:\n       %s [options] [infile [outfile]]\n", pname);
-   fprintf(stderr, "    or\n       %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
-@@ -252,6 +256,15 @@
-   exit(1);
- }
- 
-+  static void
-+die(ret)
-+  int ret;
-+{
-+  fprintf(stderr, "%s: ", pname);
-+  perror(NULL);
-+  exit(ret);
-+}
-+
- /*
-  * Max. cols binary characters are decoded from the input stream per line.
-  * Two adjacent garbage characters after evaluated data delimit valid data.
-@@ -259,12 +272,11 @@
-  *
-  * The name is historic and came from 'undo type opt h'.
-  */
--static int
--huntype(fpi, fpo, fperr, pname, cols, hextype, base_off)
--FILE *fpi, *fpo, *fperr;
--char *pname;
--int cols, hextype;
--long base_off;
-+  static int
-+huntype(fpi, fpo, fperr, cols, hextype, base_off)
-+  FILE *fpi, *fpo, *fperr;
-+  int cols, hextype;
-+  long base_off;
- {
-   int c, ign_garb = 1, n1 = -1, n2 = 0, n3, p = cols;
-   long have_off = 0, want_off = 0;
-@@ -318,7 +330,8 @@
- 
-       if (base_off + want_off != have_off)
- 	{
--	  fflush(fpo);
-+	  if (fflush(fpo) != 0)
-+	    die(3);
- #ifdef TRY_SEEK
- 	  c = fseek(fpo, base_off + want_off - have_off, 1);
- 	  if (c >= 0)
-@@ -330,12 +343,14 @@
- 	      return 5;
- 	    }
- 	  for (; have_off < base_off + want_off; have_off++)
--	    putc(0, fpo);
-+	    if (putc(0, fpo) == EOF)
-+	      die(3);
- 	}
- 
-       if (n2 >= 0 && n1 >= 0)
- 	{
--	  putc((n2 << 4) | n1, fpo);
-+	  if (putc((n2 << 4) | n1, fpo) == EOF)
-+	    die(3);
- 	  have_off++;
- 	  want_off++;
- 	  n1 = -1;
-@@ -345,6 +360,8 @@
- 	      want_off = 0;
- 	      while ((c = getc(fpi)) != '\n' && c != EOF)
- 		;
-+	      if (c == EOF && ferror(fpi))
-+		die(2);
- 	      ign_garb = 1;
- 	    }
- 	}
-@@ -355,15 +372,20 @@
- 	    want_off = 0;
- 	  while ((c = getc(fpi)) != '\n' && c != EOF)
- 	    ;
-+	  if (c == EOF && ferror(fpi))
-+	    die(2);
- 	  ign_garb = 1;
- 	}
-     }
--  fflush(fpo);
-+  if (fflush(fpo) != 0)
-+    die(3);
- #ifdef TRY_SEEK
-   fseek(fpo, 0L, 2);
- #endif
--  fclose(fpo);
--  fclose(fpi);
-+  if (fclose(fpo) != 0)
-+    die(3);
-+  if (fclose(fpi) != 0)
-+    die(2);
-   return 0;
- }
- 
-@@ -379,11 +401,11 @@
-  *
-  * If nz is always positive, lines are never suppressed.
-  */
--static void
-+  static void
- xxdline(fp, l, nz)
--FILE *fp;
--char *l;
--int nz;
-+  FILE *fp;
-+  char *l;
-+  int nz;
- {
-   static char z[LLEN+1];
-   static int zero_seen = 0;
-@@ -398,12 +420,15 @@
- 	  if (nz < 0)
- 	    zero_seen--;
- 	  if (zero_seen == 2)
--	    fputs(z, fp);
-+	    if (fputs(z, fp) == EOF)
-+	      die(3);
- 	  if (zero_seen > 2)
--	    fputs("*\n", fp);
-+	    if (fputs("*\n", fp) == EOF)
-+	      die(3);
- 	}
-       if (nz >= 0 || zero_seen > 0)
--	fputs(l, fp);
-+	if (fputs(l, fp) == EOF)
-+	  die(3);
-       if (nz)
- 	zero_seen = 0;
-     }
-@@ -439,10 +464,10 @@
-     0070,0071,0372,0373,0374,0375,0376,0377
- };
- 
--int
-+  int
- main(argc, argv)
--int argc;
--char *argv[];
-+  int argc;
-+  char *argv[];
- {
-   FILE *fp, *fpo;
-   int c, e, p = 0, relseek = 1, negseek = 0, revert = 0;
-@@ -451,8 +476,8 @@
-   int octspergrp = -1;	/* number of octets grouped in output */
-   int grplen;		/* total chars per octet group */
-   long length = -1, n = 0, seekoff = 0;
--  char l[LLEN+1];
--  char *pname, *pp;
-+  static char l[LLEN+1];  /* static because it may be too big for stack */
-+  char *pp;
- 
- #ifdef AMIGA
-   /* This program doesn't work when started from the Workbench */
-@@ -495,7 +520,7 @@
- 	  else
- 	    {
- 	      if (!argv[2])
--		exit_with_usage(pname);
-+		exit_with_usage();
- 	      cols = (int)strtol(argv[2], NULL, 0);
- 	      argv++;
- 	      argc--;
-@@ -508,7 +533,7 @@
- 	  else
- 	    {
- 	      if (!argv[2])
--		exit_with_usage(pname);
-+		exit_with_usage();
- 	      octspergrp = (int)strtol(argv[2], NULL, 0);
- 	      argv++;
- 	      argc--;
-@@ -531,7 +556,7 @@
- 	  else
- 	    {
- 	      if (!argv[2])
--		exit_with_usage(pname);
-+		exit_with_usage();
- #ifdef TRY_SEEK
- 	      if (argv[2][0] == '+')
- 		relseek++;
-@@ -550,7 +575,7 @@
- 	  else
- 	    {
- 	      if (!argv[2])
--		exit_with_usage(pname);
-+		exit_with_usage();
- 	      length = strtol(argv[2], (char **)NULL, 0);
- 	      argv++;
- 	      argc--;
-@@ -563,7 +588,7 @@
- 	  break;
- 	}
-       else if (pp[0] == '-' && pp[1])	/* unknown option */
--	exit_with_usage(pname);
-+	exit_with_usage();
-       else
- 	break;				/* not an option */
- 
-@@ -602,7 +627,7 @@
-     octspergrp = cols;
- 
-   if (argc > 3)
--    exit_with_usage(pname);
-+    exit_with_usage();
- 
-   if (argc == 1 || (argv[1][0] == '-' && !argv[1][1]))
-     BIN_ASSIGN(fp = stdin, !revert);
-@@ -640,7 +665,7 @@
- 	  fprintf(stderr, "%s: sorry, cannot revert this type of hexdump\n", pname);
- 	  return -1;
- 	}
--      return huntype(fp, fpo, stderr, pname, cols, hextype,
-+      return huntype(fp, fpo, stderr, cols, hextype,
- 		negseek ? -seekoff : seekoff);
-     }
- 
-@@ -664,7 +689,18 @@
- 	  long s = seekoff;
- 
- 	  while (s--)
--	    (void)getc(fp);
-+	    if (getc(fp) == EOF)
-+	    {
-+	      if (ferror(fp))
-+		{
-+		  die(2);
-+		}
-+	      else
-+		{
-+		  fprintf(stderr, "%s: sorry cannot seek.\n", pname);
-+		  return 4;
-+		}
-+	    }
- 	}
-     }
- 
-@@ -672,54 +708,75 @@
-     {
-       if (fp != stdin)
- 	{
--	  fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "");
-+	  if (fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
-+	    die(3);
- 	  for (e = 0; (c = argv[1][e]) != 0; e++)
--	    putc(isalnum(c) ? c : '_', fpo);
--	  fputs("[] = {\n", fpo);
-+	    if (putc(isalnum(c) ? c : '_', fpo) == EOF)
-+	      die(3);
-+	  if (fputs("[] = {\n", fpo) == EOF)
-+	    die(3);
- 	}
- 
-       p = 0;
-+      c = 0;
-       while ((length < 0 || p < length) && (c = getc(fp)) != EOF)
- 	{
--	  fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
--	    (p % cols) ? ", " : ",\n  "+2*!p,  c);
-+	  if (fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
-+		(p % cols) ? ", " : ",\n  "+2*!p,  c) < 0)
-+	    die(3);
- 	  p++;
- 	}
-+      if (c == EOF && ferror(fp))
-+	die(2);
- 
-       if (p)
--	fputs("\n};\n"+3*(fp == stdin), fpo);
-+	if (fputs("\n};\n" + 3 * (fp == stdin), fpo) == EOF)
-+	  die(3);
- 
-       if (fp != stdin)
- 	{
--	  fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "");
-+	  if (fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
-+	    die(3);
- 	  for (e = 0; (c = argv[1][e]) != 0; e++)
--	    putc(isalnum(c) ? c : '_', fpo);
--	  fprintf(fpo, "_len = %d;\n", p);
-+	    if (putc(isalnum(c) ? c : '_', fpo) == EOF)
-+	      die(3);
-+	  if (fprintf(fpo, "_len = %d;\n", p) < 0)
-+	    die(3);
- 	}
- 
--      fclose(fp);
--      fclose(fpo);
-+      if (fclose(fp))
-+	die(2);
-+      if (fclose(fpo))
-+	die(3);
-       return 0;
-     }
- 
-   if (hextype == HEX_POSTSCRIPT)
-     {
-       p = cols;
-+      e = 0;
-       while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
- 	{
--	  putchar(hexx[(e >> 4) & 0xf]);
--	  putchar(hexx[(e     ) & 0xf]);
-+	  if (putc(hexx[(e >> 4) & 0xf], fpo) == EOF
-+		  || putc(hexx[e & 0xf], fpo) == EOF)
-+	    die(3);
- 	  n++;
- 	  if (!--p)
- 	    {
--	      putchar('\n');
-+	      if (putc('\n', fpo) == EOF)
-+		die(3);
- 	      p = cols;
- 	    }
- 	}
-+      if (e == EOF && ferror(fp))
-+	die(2);
-       if (p < cols)
--	putchar('\n');
--      fclose(fp);
--      fclose(fpo);
-+	if (putc('\n', fpo) == EOF)
-+	  die(3);
-+      if (fclose(fp))
-+	die(2);
-+      if (fclose(fpo))
-+	die(3);
-       return 0;
-     }
- 
-@@ -730,6 +787,7 @@
-   else	/* hextype == HEX_BITS */
-     grplen = 8 * octspergrp + 1;
- 
-+  e = 0;
-   while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
-     {
-       if (p == 0)
-@@ -771,6 +829,8 @@
- 	  p = 0;
- 	}
-     }
-+  if (e == EOF && ferror(fp))
-+    die(2);
-   if (p)
-     {
-       l[c = (11 + (grplen * cols - 1)/octspergrp + p)] = '\n'; l[++c] = '\0';
-@@ -779,7 +839,11 @@
-   else if (autoskip)
-     xxdline(fpo, l, -1);	/* last chance to flush out suppressed lines */
- 
--  fclose(fp);
--  fclose(fpo);
-+  if (fclose(fp))
-+    die(2);
-+  if (fclose(fpo))
-+    die(3);
-   return 0;
- }
-+
-+/* vi:set ts=8 sw=4 sts=2 cino+={2 cino+=n-2 : */
Index: patches/vim-7.3-branch_update-7.patch
===================================================================
--- patches/vim-7.3-branch_update-7.patch	(revision a5f68ec25016c3e73a5e1862d0109ae8c5e4cebc)
+++ patches/vim-7.3-branch_update-7.patch	(revision a5f68ec25016c3e73a5e1862d0109ae8c5e4cebc)
@@ -0,0 +1,233194 @@
+Submitted By: William Harrington (kb0iic at cross-lfs dot org)
+Date: 2013-06-07
+Initial Package Version: 7.3
+Origin: Upstream
+Upstream Status: Applied
+Description: Contains all upstream patches up to 7.3.1140.
+
+diff -Naur vim73.orig/.hg_archival.txt vim73/.hg_archival.txt
+--- vim73.orig/.hg_archival.txt	1970-01-01 00:00:00.000000000 +0000
++++ vim73/.hg_archival.txt	2013-06-07 17:07:05.315660159 +0000
+@@ -0,0 +1,5 @@
++repo: 770908d1cb47c04be0aef5c173b17ab8be6b6476
++node: 6a602c36cb7c5b3af71fb242f8b9ac6fe3afd779
++branch: default
++latesttag: v7-3-1140
++latesttagdistance: 1
+diff -Naur vim73.orig/.hgignore vim73/.hgignore
+--- vim73.orig/.hgignore	1970-01-01 00:00:00.000000000 +0000
++++ vim73/.hgignore	2013-06-07 17:07:05.368993340 +0000
+@@ -0,0 +1,56 @@
++syntax: glob
++
++# Unixen: object and executable files.
++*.o
++src/vim
++src/xxd/xxd
++src/auto/if_perl.c
++src/tags
++
++# We do need src/auto/configure.
++src/auto/config.aap
++src/auto/config.cache
++src/auto/config.h
++src/auto/config.log
++src/auto/config.mk
++src/auto/config.status
++src/auto/configure.aap
++src/auto/osdef.h
++src/auto/link.log
++src/auto/link.sed
++src/auto/pathdef.c
++
++# Windows
++*.exe
++*.idb
++*.manifest
++*.exp
++*.obj
++*.pdb
++*.ilk
++*.sln
++*.suo
++*.res
++*.RES
++src/if_perl.c
++src/pathdef.c
++src/Obj*/pathdef.c
++gvimext.dll
++gvimext.lib
++
++# All platforms
++*.rej
++*.orig
++*.mo
++*.swp
++*~
++src/po/vim.pot
++
++# Generated by "make test"
++src/po/*.ck 
++src/testdir/mbyte.vim 
++src/testdir/mzscheme.vim 
++src/testdir/lua.vim 
++src/testdir/small.vim 
++src/testdir/tiny.vim 
++src/testdir/test*.out
+diff -Naur vim73.orig/.hgtags vim73/.hgtags
+--- vim73.orig/.hgtags	1970-01-01 00:00:00.000000000 +0000
++++ vim73/.hgtags	2013-06-07 17:07:05.388993283 +0000
+@@ -0,0 +1,2479 @@
++004eb98eb3c30714cb6a24ec3e810275080a8413 v7-1-117
++006e9c8a6a8ad354a5cb6adcce6ebfceddeb20ee v7-0079
++010397e1770eec8ff399cfc3bbd79f853849ffc1 v7-0160
++0137e7c3d31b09f1c1e494405f3f99f6423b74cd v7-0196
++0139403c8eb088d58773f7e76dc2a025719a8e8c v7-3-135
++01583c79d5f4d3f29d4c33dd10dd29efd349cad0 v7-0d03
++01762f635babb0fecb3a9f04549a54e86f67cf8b v7-1-047
++01a0da54773eb2af0215762629db5c6eed01ba06 v7-1-138
++021f9d0f60a1700989e2deeab78da32837c1041b v7-2-079
++028158b1362b55a23cc6d8d086976c4dfd6e094a v7-0090
++033e7b49356c11b2d9cc45dec6dc3d695d7ef95a v7-3-083
++0358abf2b5d4ab5981a5a1dd651ecf63d40ffbfb v7-1-315
++03714c67a82b8557cb8ee0789cbced75d804d949 v7-2-134
++039ce9407934bd97142aab06c5d1869d8e2ba3c7 v7-0-032
++03b3684919e3299ff560609c0c5f577822f64614 v7-0084
++03c191181749e422b375fbb8cd0763dede7d9beb v7-2-313
++03c4ceec6bec956646c07390aa09052cf5f0468f v7-0-054
++03d49a7c83196a406cbd12f4898fc988731af927 v7-3-010
++03ec0f2b9a403b1cbc494eac6c038076ece0b37c v7-1-242
++04265ffbda1f9b14729bc5d85069ff0711ce3744 v7-1-210
++044d5e9b1292f694e73ae929eeceaa9685fa0580 v7-2-194
++04613e770ec0bd536f04c0fb6d80b76e1af1d6e4 v7-2-189
++048f26eb43a348e49fc4f9deaca03779c2de595e v7-1-082
++04943f31135747da59cbed2b39fb109dd2796426 v7-0-165
++04fc2a0e98ed7af6ee11a2025d6a0c877114c039 v7-2-057
++057029bf347002408541ec73da1373ae64002a3f v7-2-338
++05952d133506353938f50f0b22b0097b6cdf0afd v7-2-095
++05b48b16b627b63ee0f6dda7d7f07704c3d2fe64 v7-1-198
++05c8ff7f128406d2d6052abbf5b92635d3cb0284 v7-2-162
++05dc93b9c61f63c1691849fe7407c9472a7f6288 v7-0208
++0606065af0a02f79b43b4a89383b04c21e2f0be3 v7-3-111
++062104a823df0f5a225b327b00a3766e41e4610f v7-2-201
++06234af3a8b7df68bfaf0efa87edfed2d743f6c7 v7-0106
++06317850ad3acd03765fc0f8002f17417773d906 v7-2-045
++066778e39c2ae6bbf23708d98e1a7a7e53a9a6d0 v7-1-232
++0670d0df210a891f82d38c38f1b3b256dd1a5f8d v7-2-017
++0691866e6cc92996f4fbc881e134248571ae7c82 v7-1-180
++06959e7212e521904f3b7d75bac5005b9f44bde3 v7-0-077
++06aa43dde5610dff598940ccde1dd25a617a1a52 v7-3-006
++06bc859d1a32de8763e310669d0c008b3945af1c v7-0049
++06e0f7482cef3412ecb4b0b62b65b1e7c4ed92b2 v7-1-052
++071166147fc55311bb86bc9367aca005c4a1447c v7-2-299
++0713c530729ba6d2bdc9fdb4fd400f46b16c37be v7-1-169
++073f98f45a447a137c2e2d74f936a9e26179ce1b v7-0-035
++077c15286de8e37250ed1337a448c740c86ee740 v7-2-293
++07d199fe02ed46fff935b2daa4efc979eacaab4c v7-0209
++07de57cbcb25d63bf515b67de654dd89004888fa v7-2-327
++08012a1ff8d4b4f5736a47440a907ec6e5e1610d v7-0137
++0836531167ab2f1cd48382b093c3080c3bc47786 v7-2-059
++0868e4e53fb2e9f9bd469fae0323a1df43be476b v7-1-029
++0887e8a13e5f33db2f832a52654a0d1fa82f322f v7-3-109
++09cc86b6665358a20d9faf54ce8eec45ca4fc5de v7-2-387
++09d0e83c29b805f127c6756231bb4adfb1b2974c v7-0-130
++09f00d57222b6d8de104660ea3f9c6bb42b9d31a v7-2-172
++09fcdfde9afca8990c086e60fe5e122cb258cadc v7-0-046
++0a1d45e2d8e30fc0aef25d5fd7505840d1e0e836 v7-2-258
++0a60be12e47e322c4dbae7b083321c60f599c0b8 v7-0125
++0a80dc6d78048478d4e7f0f99f573c947d5d95c0 v7-1-131
++0a908b65de1dbebbde1aacfd50aa41ef09e6865e v7-2b-012
++0a9371c70540d0d42c79a1d76e590fa2ccb978b3 v7-0220
++0b056c1350dd2ff28249130194d9a2be7b606a86 v7-0-193
++0b1b7560c456a32ad921e3985b90008ef1f82a91 v7-0174
++0b211ebefd4e6ee52ae81a75938b4ee61ca15770 v7-0-071
++0b42546f036bb3ff8023b6015a5acf032a2ae1f1 v7-2-076
++0b4a515b125474db496caa0be22a28e8bd99c88e v7-3-132
++0b796e045c429253e9ce8825ad05aad2474553bd v7-2b-000
++0c0a2b25d10aaaf556344d7404d12aba81632cf4 v7-0-015
++0c381fb7846cda92fbdb327bbfe4ab1f73a86d8d v7-0214
++0c39ff7a90a81c62f2718f71bf0a4d636a8ac69c v7-3-127
++0c4a465bd7419d51017354b70ead01c18b589e9d v7-2b-029
++0c61c201ba76d7235913010395e065991ac059b9 v7-1-196
++0c6c64edcbe0481659fdd91f6312296e7c1bb303 v7-2-052
++0c7d6d01e0582b54f34ab66852116d559c39550c v7-3-101
++0d0bf7598dcb63fdb5be9300f407e043102ab895 v7-1-256
++0d31f8a78ab35b256359b6ae53c80cecce59d44c v7-0-143
++0d6554dfc71e5e58866ef0118ed05007a4c59672 v7-0061
++0dbc46d14443418020e3868a08877a365ced11e1 v7-2b-028
++0de47f0d731e32af52784171986734b735ac626f v7-3-051
++0e3bd80a3f74a99241a4857685912dc8efeb9bdf v7-1-286
++0e3e208b4b901f22beecc85c5781170f3c4e5351 v7-0-104
++0e3e601e66cf233986924652f7801dc8d2568a84 v7-1-288
++0e45a0c50acaa31dd4052c57053bb86afd4e711e v7-2-154
++0e4631bf94411717193870a5ad7d62945d06cadc v7-2-377
++0e4c64dfc61141a68b83b5204a160b5c01986279 v7-2-125
++0e4fa55d20e025a70e3e6b82abc58333902c45db v7-2-040
++0e57be57fa49a0d2c0b7f17b7cb137b4260b79d6 v7-0-207
++0e5eb96dc18ce7986eadf32bb700e503da52ae47 v7-1-142
++0e6b369b9760459289b84a9c2e07478c063cd386 v7-1-126
++0e902b8f511f0442ee2b28314d6e085e3e00798e v7-0051
++0eef0f62181190700a01129a88f693503ae94947 v7-2a-006
++0ef5b70c3eaf694c9e9b85aed3f80af53e6fd9cf v7-0045
++0ef9cebc4f5d1c00554543918fea2a0b7539b922 v7-0031
++0f109c56b521834af0d9492b21d0ef1ead5b01ef v7-2-014
++0f3f3090491faea043fa144780d1287e011390ac v7-1-205
++0f552ca271c27681ed126261ce49e52ef144175e v7-2-393
++0f9f4761ad9cafbf1e72de338aa3fc59f1dd693d v7-0216
++1002128c68dbe2f69466b1b2cb354b00eec2980b v7-1-109
++103dea6545430092db1851d1b712a742af1a74f2 v7-3-017
++10a1b67c0885aabdac7c76a96169cd9e36414428 v7-1-068
++10ce04af8c5b26e55cd2157408883d9ed79b9a3d v7-3-021
++10d7ebdbe8a3a9787360b21a9836c6bae6a6a7a2 v7-0-169
++11155435487064d64efb296f7c2966baae8d27e3 v7-2-402
++111e109dad1301c7699d18e5689f1842f4b67e6c v7-0b01
++11472bbcdb6e2effe1c248d09b4d7089fa7a26d2 v7-2-183
++11a74d2cab9dbe41af2ed5d08b18fbdac14f6e43 v7-2-147
++11c004cc1a4df89b9246a96106db6c6f0260b7d8 v7-0-241
++11c6bda3b53abb2c98ed9221ba89880eeef7514f v7-2-268
++125e80798a85dbead9a91815cabd1d0aed63f455 v7-0021
++1287e2bbeb405c10201d4caa6b2dab284f84efbf v7-2-207
++12aba62fa7c6812ec46eb3be6759d82a4a651a93 v7-2-422
++12f9cd68b9c3aaf3659d9219551a5822cf798857 v7-1-257
++131dbd3d2a4bba5d1514c2842952ca7b77b6902e v7-2a-019
++1324b7b755f3b5570ce9aa7fb27c075c89a1d2df v7-1-322
++134c7695af324bd4118f52b9235aeff7e374a425 v7-2-121
++1378bc45ebe5754c0d3ec64d37810eaad3a544f3 v7-2-348
++144ad7f25f6741815c8297fe77965f93ee359c2a v7-0-118
++15130d4dfea14898029686b72536f54197a73062 v7-2-117
++15146eaa0e9c6dd6802cf70a2da3b220992eda1e v7-0-001
++15154710ed57eab29f7e4b848eafe63ea2dfdf85 v7-1-140
++151a805b2ddc219d4a968154a43daefbb2e41fe1 v7-1-081
++152883db0edf63f35e8459dcc5862ef3f4b48c9e v7-1-321
++152e526245217fedd07f0480e08ea59b0075a8b0 v7-1-001
++15674e198164c10b08e138f4c18b58e76306d9be v7-2-389
++158a68529622f90d0b0f1f5596f55cc5ce06c9ee v7-2-060
++159d87361e4b0d99c3863b3c82b7121a474cdf1f v7-1-168
++15e847397be75c6b0590505a9e201c793d070eee v7-2-205
++165c628aa9fc3cca34ccf63dc8ab953745d4e228 v7-0108
++169533a9699fa7d3fd67b57ad99d04076d060831 v7-0g02
++17526daaf79dbf2004c78311abdad05e6e3070dc v7-2b-021
++1780e6046802498a3c4d0ddc7b99f1bd9ac75f31 v7-0-157
++17a83c0532e83e9f4cd89f03dcbf206662d25b1f v7-1-062
++17b9587ff6d5beef34d98043ca5f3111e5d29e4d v7-0-202
++17b96d8dcc5c8356e10135f5735d6de2fa5da3e8 v7-2-038
++17c88d44ace9bc9e76485811ffa459b5c15a6bb7 v7-1-234
++18061514324fefb37ea7a7e7783985004ea0874d v7-3-084
++183c3187b20dbc6ecc74958e9ba141f0d4f72d23 v7-0-205
++184a6091124e80e1c9f66ed0908deab552ca369c v7-1-220
++184d2020d8f12823a2f2cb96335a68ac1bda3270 v7-1a-001
++18ee39301b822de39caf5fa023107ddf508b42e0 v7-2a
++18f024844150562a9e56522edcad3fc1d5c257e4 v7-0086
++19106f131c872dc79bb409ffe8b5e35ebe885c1b v7-0188
++196d564759eb256f62e7fb7ec4561c1e2d533726 v7-2-072
++198a695ca8e7273641991bcf346085bbce70d740 v7-1b-001
++198ea7a9c633089ef2638513d05611a9d1b6e39c v7-1-182
++19ed3bfbe488a730858d0d26b433029b85e231cd v7-0-159
++19ef2bbf569cba64ae5125d5b1f3f205efc25e89 v7-1-263
++1a00e831244b1e509286ea35a586c6c43dcdaaaa v7-2-202
++1a040c25c44485c85e838a7530051f6d4f9793a2 v7-2-123
++1a0d346695fa3525a08a27174fbdf016afdbb9a9 v7-3-085
++1a44839049aefb0722d43a87d7ed1708c9c94b18 v7-0229
++1a511b7b69ebdf866088b9e765dc42543cd76d0a v7-0-212
++1a85f952cdfe4716be162e308fbccb0117489915 v7-0195
++1a8b518bb993e00f546c4cef8bae9b51f91fe0d7 v7-2-198
++1aba098d6abc680214b3b31c954abd53ddc772ef v7-0-039
++1b55bbf5c58077e54b83307bbe715e131c57b750 v7-1-219
++1b7cac059babfb3365c0a44c0537c7aa9b286a71 v7-0172
++1baac9d06c83400c474e6484dc20229187d27a64 v7-3-024
++1bb06e6512a2fc961eaf9a8e7a749247c408e7f6 v7-2-358
++1bc46149d9195d9134d526ef524242ede65c2457 v7-1-167
++1bdb13b8e947b85e612afec3a1b5e09c29c30551 v7-2-039
++1c00ea3641a8a1e58e70cd51ab831003bdb41d50 v7-3-005
++1c1cbdc42f75d8fa0ca5a799b5e843e9aa2c098c v7-0077
++1c4ec9ed71caf24dbec13f6d3d4adbb48bce9436 v7-3-056
++1c586ee8dd452d305bebf633d5b8c78ba1ab170d v7-0183
++1c597397f0061fd2c750c65c961a31f70dd6747f v7-1-269
++1c64bf25bbcd49a83cc08dd60a6c3e5785266790 v7-2-247
++1c7a66d820e4dc9b0a9f696ed6e7a59cd9a20e19 v7-2-360
++1c85355293f92cd8bb41eaf6ce8a8be1d77302f1 v7-2-062
++1ccc1ace9e5b6c1223ba191ce20729a49f13970e v7-3-050
++1cdd2661f34c2aa93ae2f0317194d29d3a43f5be v7-0d01
++1d0ef79659afec337c26655216a1debbd1c74497 v7-0-002
++1d12208efb3732d6f520b05a47283208f12e3856 v7-0-209
++1d4c67f8470981d280aaf1d2a25877a00ec5d240 v7-1-084
++1d6d99daf4dcba733e5517045f70e53c185aa895 v7-1-165
++1d7f46148bf4ec36a42e959cece1f9f6199a87a7 v7-2b-006
++1da25369227bead09cf603ebfa93ebe1d206c871 v7-2-345
++1dd4e0ccd822156b87516f9cd5a6a004d0d85a11 v7-1-278
++1ddec6983d9ebdb4f7a748cc171199cc8ad3d1e0 v7-2-036
++1de53700b1d9f26a420a319d9c44ba0c43950035 v7-0-127
++1df41c98fc2e9a230ab9d05be84f4c91e4078619 v7-0-239
++1dfe9032bd92ef7ab7bf0baf0f0c1f61da68bce6 v7-0-131
++1e25b58fbf7babbbe054e118617a49790f532fd4 v7-2-024
++1e52efdc900cab1dd64f6a987bbe5117fa1f9748 v7-2-270
++1ee00a062acbd04360de8b754e834f7ef6025328 v7-2-246
++1f099ff4f6fb2b0731bb38e279d0c692ee05df8d v7-1-129
++1f3902f3eb5c20e7872c42cdee9c91e2b25d3f47 v7-0038
++1f3b1021f002ac9703c1de0e80703b8067546a41 v7-0e05
++1f53050b38688e127c4ea67251ab2730002541bd v7-2-294
++1f90fab89ce32126849aa28d2918bae96603f3bd v7-2-069
++1f929f3ca8066b3170c7a58c414837d47bef707e v7-0c03
++1f93fbcb4e0cf1dcd8682242f40aa5f2906c42ac v7-1-201
++1f9e2c8e642a29d93b9c32062c785f4c38883e0c v7-1-034
++1fbbe04a950f9ed82b53ddf67d8e034224fc98ad v7-2-286
++1fc8d918d9fc076304ef0dbaad897e8e5b6ba4ab v7-2-093
++200b706675a56daad05f8b0d60991825c45b6e2d v7-1-183
++20308f30826db09e99d531214eaaf03ea8b13d15 v7-0-162
++205a26fab11655d086ce185525193d16f37d60b5 v7-1-203
++20b2e52ca96255a8d99ed9504e90a960266c4d21 v7-2-009
++20b4b6a2a212584f182a2d69a37512bf9094d85e v7-1-279
++20b52d44daafbd65b01db735c4d5597ccb9e386d v7-1-130
++20c18291deb21dcc69b6ceb3c11c309a92396fb4 v7-2-302
++20d9fc2f13a4132d6344fb6457040b02720774cf v7-2-403
++215d6b2a1816a5eaf5f5d2cb7cb1b22d24adbdab v7-1-159
++217c9aa4c3ba6ea559ec5675871d6d89313363e8 v7-2-114
++21b11491a33fee3cd77dcfcc2448382f060543f2 v7-1-156
++21c3634c211345ea79e90c4927513e7dc1381617 v7-0134
++21ce954cbdcac9dea2aa826ff40adc2fb2184600 v7-0-201
++220a9309067dfc6e7e8301b392c3499054666396 v7-1-266
++2244be18d9e9ce602a12e7529614c25ca8cef1ee v7-0162
++22886f3d882d231a528dcc012c23e54180c8248c v7-1-040
++232a4740aa0ed615c52b289a111b51171e74a78f v7-0-005
++2392a6da4aa430f896451d97da8c49ed3fcdb9cb v7-0186
++23aeaff961412f06544babde36a80a6c22be0fd9 v7-1-307
++23d23246742e7d301d09f0cb03533226b64043b4 v7-0-219
++23d366df193868572eacd04e1a32bc2283a30e56 v7-2-335
++23f82b5d2814be7ca4dee000226bd67dc6cd02cf v7-0c10
++24100651daa9d7140d33f298c987c9d42bd919bf v7-2-411
++2430fc9a18d1270a5ad7b5f7acac3e19aa8908fb v7-1-306
++2448f4c8afc65a91130fa0237c253e6698481c64 v7-0-055
++24b7b3cc4eec4387713a615519489fa5a34b253d v7-1-251
++24eb7921b8f004c8c462297cf53afad8f5578243 v7-2-367
++251307ebe1dbacd972e35e923f7360d12733f2b7 v7-1-049
++25154b22dc967b158645be9cb87017f548ee5446 v7-0-198
++2548cf0a5f625110a5cd42ee5566c2709c2c34f0 v7-0-011
++25bc02d83cf438d5794ce106edad2959e2f89454 v7-1-292
++25dd5036f2b0b5e68492c49f15eaa228aa957f69 v7-0092
++2651e7d07cd631af64818f5d3cf5dbb199fa6f64 v7-0-140
++266f9d9f5109421afcbc8169896b484ff7a19a8d v7-3-061
++26876d0f15e9294aa4fcbfc43260a5f2a703e313 v7-2-256
++26b0b2f606d2953068951dca673d963b7c5cccb7 v7-1-122
++26cbd39f22513d82cc43d2b1badefcea8db1c546 v7-1-103
++26d879bcab3aa016ccaf77cfd3a9aa5085d4776e v7-1-284
++26fb122355d4d6b04850f7608f1d82da8dbc51c7 v7-3-107
++26ff011aec2dbc96736396430403d572d4f111d5 v7-0-172
++27060fe297d0ce872dfa3bc20416f7189b9fbc59 v7-2-273
++2750661e93d556868d97f49fae32a1f470bca107 v7-1-253
++27621abffed24f1e2849ea616f91f0a99747608f v7-3-099
++276244befa5b2a34893ba581818df14cd7e4504e v7-1-189
++2775dcd056031e0a7314da9a9e0b2cebbb089525 v7-2-426
++27782797c331b8800c12ad17c5d05adab5e92edb v7-1-107
++2787b8483e6498f536e66ac134a073246ab6f5e4 v7-0-125
++279380a812add1307a2a20c444f2334b7a45106d v7-2-412
++27d8fe1c096407ddca428c52f62d002dfed7879f v7-2-090
++2832243e801ec537589809059f65efb3b8a57f93 v7-2-399
++28398206597f975583c9f8f212d336fc9f67953f v7-3-089
++28558ab31051fc1870ac690c0b576ca9365021f5 v7-1-202
++28641f0ed9deb579934416e6161260d4d218f394 v7-2-211
++288fb648badba86a0bdce6dbcecb55eb386263ab v7-2-128
++289b19a6f2edb5b46df57195d5fae41dfe963290 v7-0103
++28d0c20ad8a09dd63fa34768eac4be3cf96ed239 v7-2-051
++28e9eb0f2d849e7e32d70b4e1f06dad812288578 v7-2-077
++2928a6b338c3f434723520a12fa378895d4b24cf v7-2-187
++2930fd8e7d9f1514448261365b787501dbd9a0b7 v7-0171
++293621502c4daa122ae601398d854857bb732a83 v7-0010
++2951f28a9bd3b08c5be9bc9b3745f062b95635b8 v7-1-192
++2981ad79c362bff0c21d3ff0d68be57213bca837 v7-0-025
++29bf49bad20d3b1ad35af5cf21d91c4aa486d4a5 v7-0-068
++29c09fa57168acd665a85ed5a210b48b60d0b5e2 v7-1-211
++2a11407a5a8f4efccc04dfde8a61e40ec5eb9fc5 v7-2-066
++2a256978a64649b75d424eec6e703f99f7f28636 v7-1-003
++2a8bf2ba504f422d53dac30da8b58d76e54b4428 v7-3-003
++2a9d26c95a2a9b2f1a279e04de22ee4c7298552c v7-3-077
++2ab007070fc86d20596dfbded70d0f986c084304 v7-1-113
++2ae2dd2591fae798e4212e9b2c47281eca0c8483 v7-1-055
++2b273c71a14b7d0e64b6ae9bdcf60ef7e4d45aa8 v7-2-415
++2b475ed86e6491b20046d5c34fec8ea86988dade v7-3-074
++2b4debdc8d2c73d1fc37b750010e3a4098b035af v7-0035
++2b913f7eb9d2b411f9ef2c0fa44f313b7382bd89 v7-0039
++2bd29808d1f640f027ab7a4a4f2b5b6a0e6c8e38 v7-2-429
++2bd96108392ec08b6c384893939968d94bab4dbb v7-2-351
++2bebfa810a66caed9562541776d92f73a71de7f1 v7-0-091
++2bfc2b7033147de9689cf2d651bd8ef36fdac68b v7-0078
++2c1ffe8953ee85cf04d4db5c03ab711c1c6c015a v7-0080
++2c4ca49319a689ad9caa4429cd90bceda4e210a3 v7-1-271
++2c5e70e2858fa46c7b80b022f217103b8c90e9e9 v7-3-016
++2c885fab04e31a34d91e4375d2d0397cadb818ce v7-0e06
++2cdbc91795ca0d15343fe954ae2af71f830f9656 v7-3-007
++2cdccc96d730501ce4e509e7efe4f8fd3f2b2e29 v7-1-150
++2ced59eaf1e5c67060fe124902407a8bf77a1a78 v7-0-233
++2d0f22897a4d1f71600540e64a5cbf80a178e46a v7-0-173
++2d9eebf2c48f0bd3b51e8ba085b97da871cd4184 v7-3-126
++2df7e2d753061b54b9120ae4b34d4bf050cf17f5 v7-1-246
++2e1e9b708941e1cfc2c0540196719f78e1ab18f5 v7-0-023
++2e42153b37f171ed28293fa12e4f538070bf8619 v7-2-021
++2e915ea7110f0dc0507a733e4330ec6cc91e53ff v7-2-266
++2f016b638c0ca912d89f352f6b9b83231cf9e83b v7-1-312
++2f57d93bdbf64461c4eaeaacdba26548a2abb9cf v7-3-030
++2f6e519726f19c2f6cb58e9cd75e827eaafa0ab3 v7-2-346
++2f70b8f1f1e32dca34db07fedf9cbb56ff97007f v7-1-076
++2f9308b31181f36bf605ee060fa763a28deacb03 v7-2b-030
++2fa8cb05b861d49dec0501a2531eec39e1d0a688 v7-0218
++2fb204616c9b4e4df95f1560899d02e5bb739678 v7-0-079
++2fcd444c4bd37f916da718bf5bbe9535d2667331 v7-0057
++300fac7c5a2bafb002ee97d52da19bae8a344d51 v7-0059
++302a6aa7aca2ee9cf24958c2277a90fcfc01c939 v7-1-061
++30534c76776ab088a4142f9e15faa23d86efe020 v7-2-078
++306fc545fe2cd5d77953811fccec0d5c4bf7744e v7-0-066
++3112fcc8923830fd9060c76d1ec9c75c59487d59 v7-2-371
++31208ed42de95ba5738675cb78bd0f66c34ed785 v7-0-065
++313ec58cdc49a69c4386a4aa18fb9bcd01155feb v7-0-206
++316dad0565b8943c978c8c58b212f3c4469b1cf7 v7-0-103
++31757405c0c5408f9c83dba9d83ea74b2bd680d5 v7-3-134
++31bff9be0a7730f36e7de4792fec0688f2fc7076 v7-0g04
++31df87b80e562b6a83b97e2610f539afc94bc440 v7-2-278
++32c1b275ba6419fc014ffba3d2e55eca1ef06d4c v7-0-196
++32e19278c1ad1be6f92fc6cbcefb7e23ddf928cb v7-0-105
++32f48534fa0fa9b8e6833850fcbd77cd002ce8e0 v7-1-187
++3328b87305efcc6a8db6923c31cbf78a05983eff v7-1-077
++3372616fe1f1def653875bedaa8c059c399197ac v7-1-144
++3376d79d40f2d2c8e09cf8a3c07e15fc2424ecb3 v7-0-148
++33792c36e3aadc7f313785705f39d7ea6e214319 v7-1-018
++339999b511a0d529f09219a5d61b810fc75261ef v7-0148
++33a2652c13268ca53bb9ce0cfb7232655864c373 v7-0-231
++33d28f1c4d1dad3d4ce7f768c57820a8203c3e51 v7-2-006
++342cf2a9f5cce4f70e6a974253b20c8e309de7ef v7-1-145
++342d2b3a072a6cbc3cff898a663c4889317b32a9 v7-0-208
++3479f9aacaf57d583abb468cfe393eead386f15a v7-2b-008
++34f62bcce014d9c0b275002a1001cd1582ffa121 v7-3-123
++351bf13db8071317d7add1e55a50ae284ff53a4f v7-2-334
++354ea37841d13e0d9bb5ae995a09fb28beaa0d13 v7-0-022
++35abb70264158760c724bd0290c6c441afec4fa0 v7-2-033
++35cef95a6b7646d045b97bd4a54bb90000b5a753 v7-0168
++35edf814f2230c2bfdf403073fdcf89094c8216a v7-3-100
++35effbd07a25d1df122e795165d26ceb65510c3a v7-2-421
++35f3b20de2dd2c821675c61a11f4b227d31e9cdd v7-1-102
++36071a92cb764412276e067fed099164b0170436 v7-0167
++36275e20d997b91a357433debf8fbac0885768a0 v7-1-051
++3686831cf3da094c66ca4d2ab2c671d3d2e2d497 v7-0166
++3709cf52b9b56befb1c7a98e5f58cf39d16cf953 v7-0119
++371201c6b4c1538b593b5dc72f36c79a1f2644de v7-1-327
++378e33d47ab09cbb564a2aa6e975659a7f742a67 v7-2-250
++3796d11fde3c141d30cc3446038c20bf280c4b5f v7-1-267
++37d62d968182826522e378b31b76cf0a8c7a3cb7 v7-3-058
++389c8abd59258ba5ebc164dc7158a025bfa893a2 v7-0048
++38d7bf77e55068a5157faac7d871f2f3a66cbfad v7-0226
++38de872507e1c6440c9252a7bad077ae8c1bd488 v7-1-280
++396a9b65abe6a8fd08a6c232b443d541717cad0e v7-1-121
++39aaf0cc59e83148991c7482fa82d2bc29129d3a v7-0-150
++39d115408c71e1bf72439d5a92d98c8e551a5750 v7-0-186
++39ebe9e88854b766c569529a96dac3b67aba0e65 v7-0165
++3a6ba07b3b9fa89e94e002d44f57f5378eb59f08 v7-1-302
++3a779b47f235a62d799147b25445b01866f7c0dd v7-0223
++3acbcd0d3fd3d81ce94a40af4510fcc2e7870a82 v7-1-317
++3adc6dd2d122c76a211d88769227e447e4f8f821 v7-3-136
++3ae106044109e65b5bce1ea8938e0658729349ed v7-1-008
++3af28ecf9e56315a8617b2c58da078b6df989f2c v7-2-122
++3af484dca921e30a0bb1e4975a4fb214c3911f94 v7-2-150
++3b1d692e5a2c3053fa066d202ffc0b51779d2c71 v7-0040
++3b226f4693dc8dd1fb8886221335c39a64bb1fa9 v7-1-207
++3b241fd8d7c09d7a93694a0abcdc283dcd6b4675 v7-2-441
++3b48421dbde112f3a6dae67a651a9f114d85c874 v7-1-301
++3b705e71c7b07ba1309d08a8b370ae8ad3fc17cd v7-0124
++3ba373b54370d830e3fda93eee83e3f0b1ea2a0b v7-0008
++3bfd2e1e2609c8470c5b4f75184b66e5a4d8faef v7-1-053
++3c17132458a1538d3f1d6ab00544df8069bd983d v7-1-208
++3c17f4d2196f2f280de13a417652529c417548ff v7-0-028
++3c251a30c8cc44946e5871a7073d88ce195874cd v7-1-325
++3c6417b7e6efed4cb13673383489efb47399a902 v7-2b-027
++3c838658fc357dc48e457bdbc1f5a63ae5a73d19 v7-2-257
++3cd88bdcd97d7d0a3e2f5a00a6627f00970ce5b9 v7-0-045
++3cdf2a653e005387c4deeceb7281d62fffd34687 v7-2-391
++3d698caa5dfc7b11c8a6ada5f57e75c7a6a117dc v7-1-064
++3d842a9e2baefc023d9e4f163ea138b9e29931e8 v7-0-051
++3dc6072e0a25f24ad5d888af77d858036a9185f1 v7-0-083
++3dd986bfef63bd08894294a0828a1bca737320e1 v7-2-181
++3dfff6a80088c921b391d493c6c1231e4e64a656 v7-2-217
++3e0f9984e98e8f020260ff015cc994ccc34059a9 v7-1-111
++3e7d17e425b0f58513002797b3310e722757893f v7-0044
++3ea3dcbf2cd6e5ddb9d827c60ce999b2e4a5e755 v7-3-108
++3eb34a777f49f7f656b32c8db829fd0b153abe23 v7-2-220
++3ee6db0a746e990164e288fed6344e519a5bd1d2 v7-0083
++3ee896333e3eebba8a5e10e04649f1bd20e98770 v7-1-290
++3f1b2e6496debe5ee3068d1916ea15926d5a0f99 v7-2-252
++3f44e9abe4ec65f797cbd12f1d46bd08eb48c2ef v7-0015
++3f661e42f262e7839e2f04c50a447c53f6c4214c v7-2-228
++3f8cf4c668c30ec99289b5683f4fd36a1df602fa v7-0-115
++3fc0f57ecb91686b33630dcac973ab9d7db31c6e v7-0001
++3ffdc64af1e53617586ad0cf14e039cb6f1cad34 v7-0120
++404aac550f357223e7bab3656343827f641d9f74 v7-0017
++40a0699b6c62f93e58ae233fcdfd395bbc1bc80f v7-0046
++40a8e388692b53d36104e9c9b6ed351c01707308 v7-2-241
++40aa7ae37901ce256da18bcc84dc5ee21f83829a v7-1-149
++40f2a904bffbbe8fb600089d1b04f1115a2a4a71 v7-1-115
++4102fb4ea78127b1a95b2df3274a55d9bfba68c2 v7-0002
++410fa1a31baff929c7876be744142723c1573c75 v7-0023
++417c04135ca2ec03b6357404b62761ca9453cdba v7-3-137
++417c4d78a09c07162879dfb79e25e672e6e9218d v7-1-043
++41ab6b381572fcef699480ffb759d3c4543f0dd0 v7-0-128
++41d8447a84570ca22fe07277a2f8e9db694f66f0 v7-2-236
++41f9fd58cf132788bde73ab1954cb987521e3bd2 v7-0019
++421a77b136c2bec5d2056a799e2fa8021178beda v7-2-002
++4238b697bfff46433c49d60cc20b43761ab3c128 v7-1-097
++4256f76f72668271d9d986cc3736eb188b4400a4 v7-0-080
++4269a0673478b966f8d0e08b5681ea0cf2acd68d v7-2-432
++42ac369bd824634488b569ec5516fc435b700be8 v7-2-070
++42cafbf4b6e81160c26fc99148eb333aab5d2f96 v7-3-110
++430793c2a2315e1d0ed2de460071eb83a4f9c97f v7-2-319
++430f555d7d152cfa5b7dc43b8b8b0dfa0d520520 v7-2-195
++431ebc9412a816440aaed887a3d318deb08c6407 v7-2-418
++43243f7ce351aecf1f41932a9d02d6723fe49e34 v7-3-128
++4353593fc2c07753d40f71998688985cf96689d3 v7-1-244
++437fb19625c9e24e2157563cf0a55aeb432b2990 v7-1-275
++439f44b874a731461a187dc720edc0c663ab47b2 v7-2-291
++43a60ac87145f10d827e08b02c8241b359697740 v7-2-263
++43bf0bcf2110ffd8d42f0ea9b1469b1024def86c v7-0115
++43d337097e4ceffd268685809aa1e8e0f2a2dbec v7-2-223
++441f938ea9e90e07a05e55fef17ab22d2607f5f3 v7-0192
++4483ee552619492639c69f4345d6554b7bcbef2b v7-2-355
++44c01fae1181944162c94bfba919ac9867ceec40 v7-2-160
++44fe912b5a1b3961c7bdfbd2a8277d38eeed1e77 v7-2-145
++451bed7e9572b45d2bc98bb5c6680e7bdf4a3fc3 v7-2-321
++4541e06d4fb9dd8b69a7ab43653c72022f95151f v7-1-323
++4549e0e7fbb661089184c7b0ba1888cb6564ef2c v7-3-076
++454d71a434176e2d1ce0c2a7d47bfe2583a5069c v7-1-037
++456ae41254c975189c55a6ad28b1255936c847fb v7-2-159
++4577899b8ff1548f3f03e6516715087c9aa15e6e v7-2c-003
++45898756e0598f357776ae5aa05d717a7017e0cc v7-1-105
++4589d1792c036e15d1f9e72c0252fb243aa6d5e4 v7-2-094
++45ba31f9ba0cad526601d1d15d4e05180967133f v7-1-127
++45bae37de0373ed58d6f4ed8721d594ae322782d v7-1-031
++45d9e2f80fe18c663346a2e88409bf2476e874cd v7-2-061
++45fe7cf4a89e3963ed9c0d6a34600dcff8de3f9f v7-0-176
++463e25d28b334622df784faea456a98ddbc0b5ce v7-1
++464da5b48d277d1052e3c211000717947fa13da6 v7-3-130
++469c42f90fda78344dd4b33e7c0dd0860b777939 v7-1-030
++46d39f2eff86c940486c2da466283d7526b98c9e v7-0027
++476336a5ae9588c4a13721b5ec1cd792fa44ea2c v7-2-404
++4772a5e3f9fa652baa1cb6d5295d60daeef6ef0b v7-0138
++47a0dcad7216bfe602a2ee241df60bfc41c04979 v7-3-120
++4842e7421b5207294cc90f7e2d2d18c24e65753c v7-2b-024
++4845822f6a6c21860e0a1b4627996d745d455da2 v7-1-213
++484987f8e04c44e19e1ef2f3f6864b4c6fe61f1c v7-2-118
++4869457735a9133c39202f797a6694301c41abc5 v7-2-290
++48775ea99f249b75872e9f0268c5bda8cb8af8da v7-0-007
++48b22e2eb1ed7782c4dfb90051b64d6614fc6d3b v7-1-185
++48c9c2bf59afb140dfae3f4b7182ca410e72cb25 v7-0060
++49b5a7f186aae9fdd9b633037e8da484c61c55bf v7-1-002
++4a317df1696281eaee0e54b5c1636186290863a3 v7-1-298
++4a4287c09953fff6a65f7324c5f223f7359c46f2 v7-2-390
++4a4b16c67c62174b3b66848a32f4e5554b9cf6c0 v7-0-183
++4a6554fb0483f5cab10876ff0d9a0e92a9787119 v7-0-161
++4a7320e53f32e1f6d60c498d870e6c4b8c7acc35 v7-0126
++4a79d6d376f0897e3a899ccb104a324a94bb846c v7-0c02
++4aa4510d548c9fff9d8317977e3801a68fe2aaba v7-2-341
++4ac0c84d1c5038d0f6171c68d9c58ef0fefd4226 v7-3-079
++4ac1dce8dd5e8d8e97e3e7b921f3ada9db2fe2de v7-0012
++4b8583e82cb8875d14ff928db281aea8145d0b0d v7-0201
++4b9fef49d7ff02cf781d26d5b85a0a03c8784fd8 v7-0095
++4bac29d27e2f4c2779ecb72a5e78cd4a65cb455e v7-0
++4bac7ed34007ad41b7870888c739c1b4a129cfc3 v7-2-368
++4bc81d4dc6be1c45e41f1b083ad7fc07c58d840c v7-0-142
++4be6da0fa3d9978434273d3abc021d7e68455864 v7-2-400
++4c02214d1465ac2b014a9a1096927ad04eb710e8 v7-2-200
++4c41f0da2a2e35b42334d091130440d1b1479e7b v7-2-324
++4c70a10ce2bb6d83a4cbf3e3baab19d1752f2230 v7-1-042
++4c7cf05f60b5885e1a5caadb787cc6e290d7ee34 v7-2-110
++4c8008ab94d8da38529991004a56e65547faed15 v7-2-431
++4c8b90b7a94a123db784dea518f3c9a3bdfe85c4 v7-0-221
++4ca6669af2cdc06f39d77bfef82663e5bbdedd56 v7-2-046
++4ce0a7e4c6b3a305419590c746d2a11040fb2b92 v7-1-036
++4d53c2a2af94cf7a657d85e27f891b2d53b698c3 v7-0054
++4dccbe792a5e00c40a6e5b4f9e74d20b5aed2c50 v7-1-057
++4dd75cfd946f31e81eaa4b03ec81ef141c562137 v7-1-071
++4e22214f84640bdfbad591ec2da5eef9bc328dc5 v7-2-409
++4e581f1b08dac0b7f9345bd51b03a5fdbdd49ddc v7-1-281
++4ec11bb387a559fb6168fdae70e7d0ad78e15c3a v7-2-372
++4ec4c53046b5be6700810b9b92996a0cfb4ed52a v7-0-021
++4ee809acd1ab9c2fadee72e0fae32de57040447b v7-1-124
++4f1130893a1c135b1200f6857bd0ebfb143350e1 v7-1-320
++4f1b94b51e99370161ceb5a923573772ca068582 v7-0b02
++4f3857aa17853ab6c36005520ae723af92f50b9e v7-2-264
++4fb859cd9ba955957ad712ea390e87cffec6a540 v7-0-072
++4fe8e1a7758ea8170eaa4b1abf11cc9682437cbe v7-0102
++501b107b335af7ffcffea060c38f4b34dafe4101 v7-2-012
++5027d3220e2adb2f2f54e85f469a7b4302a010da v7-1-308
++5044d9d784ed2958022fd3446910567a4b84dacc v7-0-154
++509230ed2036945be2d9db7e1ecded3c59518c2d v7-0g05
++5098908178cdede4656e3f96f2df2847573e6ed9 v7-2-050
++50a93218720458be104f03ce1be00bcc8b898eb9 v7-0-228
++50e0337c25cae29dd3e63b333d4bfb68cc9b3740 v7-1-239
++50f5ac5b90dedfc7f88a67d7a435014e07c298ca v7-1-094
++5117153003bdb002aa3e68d3b90a98a973d38078 v7-0e
++513866ffe6af0bcc09e7275c0e9130170de66acb v7-0200
++513d037fad505a5169add3116ae459bd1adac381 v7-0154
++5232b9862f238a2a109f15527825e5cac1668a04 v7-2-000
++5232b9862f238a2a109f15527825e5cac1668a04 v7-2-080
++529c6a431ff5d5612bfba4424c023dcf073c2cc1 v7-0-056
++52c87a746f4ab8397933a53388389aba6a16bdd3 v7-0181
++52d17d53b555c45b0b9f4ddaf3551bc8ad5623ce v7-0d05
++52e76e2b5b65eae81c4ea93d290194763d7edcd7 v7-0140
++53175322ef40dd7f50dc4153e6e6fb530a4b2b29 v7-0070
++5332dd13733cd57e814b7e21cb577f6ad0c15408 v7-0094
++537cb92935b690665a72f2b31dead8d9b322dcb1 v7-0-223
++538cd3220874d9a98abc7219e7be6666e49f853b v7-3-011
++539d9b8f418aeeeac3d0da1932e1cdbe709456a1 v7-1-265
++53b2bedccfdf5ab8cbff6c3fb1f6f83ac7112b85 v7-1-091
++53b47a10825a20cd7684046146393a641d89972f v7-2-163
++53d475dff0e363bfeb31d6d171337cb19c309098 v7-2-374
++53fd0a213cff86b7185c5391cef34c1265f8b8f5 v7-0-237
++54a6b47d473e64d7ae5212f00b8b125c721d2c41 v7-1-160
++54d5eb36689f1a409d13cd6ff9b06d68a30b0d48 v7-2-092
++553c97222cc0d0adb7beecd6f73be1c512f2f37c v7-2b-005
++55e117ed68724567167ed25bfb5a320585f1bb5c v7-1-075
++563bd9a63fdcb08d55b6f6087cc8ededd31b891d v7-2-010
++56609cdae088c4d5b38ac94a95a07f1520b56fcc v7-0-059
++56695f1182f01d75843d0433484c94c1eade71de v7-0-238
++56b638f2029e728f1fb20382a7184a8e4ebdce9f v7-3-018
++56ecdb792c3353d9fc587a515fa4991e69363dd5 v7-3-036
++56fb4ab9f62f19b9812d483aa76f8b53104db26e v7-1-225
++575dacb554d8b134356fae0135383d5e2231113f v7-0096
++58059676e24a6fbbc686faf84c612cfa8c25485d v7-0-134
++5858c00d0f2c47b395e3c63cc809ee667f8c02a4 v7-0-122
++5898cc36322e7f1dc371e89dfb5e2ffc3c6c6e3e v7-1-309
++58a14bafc1f08b9712732a26a44c2a93e34e6ae2 v7-1-209
++58cad056e60844274b103ff3fdb56d7a6749b121 v7-2a-00
++58f47e17ba1565ec9c538c7f216cb9ea66e58a63 v7-3-122
++594f25e4a8065bcb865784556adf556004bddb24 v7-0144
++5950b03fc906f434d5a1b899bcee8ff839b05a34 v7-2-020
++59edc8429da0ca92da8913823f56b219e3a99051 v7-2-065
++59fd8376545beba122700d5a481793f29ff0a69e v7-0058
++5a1d8468d1fad7189c8c781149f034dbb4208b39 v7-0-224
++5a1d8468d1fad7189c8c781149f034dbb4208b39 v7-0-225
++5a1fe35a6eafb1c994955a34d8152996d53838e3 v7-3-092
++5a7384b9ca6691ee880dd4e01dddcba5dcac4f6d v7-2-031
++5a7843c57316c63d1118b6a5c2f42d330e57183b v7-0e02
++5a84b6388a5589d6f3b53a1aa6f8fcc369989a0e v7-2-369
++5a97d0c03b593699d6e0bb2ea49073dca03153f8 v7-2-397
++5abd3e3c0085de46b37ac9bcee90be8160dccafe v7-2-363
++5b101ff9d4c43c566e7adfb0a7c0978d2150d741 v7-0203
++5b154df6fcd89b4d24d34da63626cc01d9b5c0c2 v7-3-033
++5b43a3a9454ad69432d5cc82b70d59ec6c92a45a v7-2-003
++5ba8e25f7fc159a684a965ea9e6626f62b76997c v7-1-188
++5bbc2d6658adb0dd3c67dd80c59f3a7ade3ba3d6 v7-2a-013
++5bedef935ce38062e866c72aec633d38d95dfbf2 v7-2-357
++5c3844ad7d5677953eac88ec4ee317b298812bce v7-2a-017
++5c4b2fc4f067cd04bed4fd0a13bdec7d26036d26 v7-3-049
++5c6a3e894d43ed024662462cf5c6f77feb743132 v7-2-288
++5c6fa259c9236cfacc66dfeade89414479b5aa58 v7-2-328
++5d1ca05fa8ffd87bf59d26121e6cff5f91e9afd4 v7-2-199
++5d25cdc3c3f31d4893f646d5e7b94435ef59aa5e v7-2b-003
++5d2f6d04c82f900b01c18a7bcf2287a42cf09ffb v7-2-253
++5d5a41a95347bf4a1382babc697a1f940a83e43c v7-0-227
++5d5cad78a8380735abb8ca0e7d3ffb11e9eb98e6 v7-2-300
++5d84650b569c7800de8012d91660441bda95e5c0 v7-2-108
++5df74a812b7b20bd7e33634453c645be0eb8a2c4 v7-3-012
++5e0c164fc1c25fdfcef07fc03c6634216e6ac066 v7-2-277
++5e168526af25c0a59c55dd009e10a63d2f156114 v7-0-033
++5e225f973b5d22208869bfbf151c5fd03b5a3451 v7-2-089
++5e75d07bfe75fc81e0dac043b6bc0ba417736b17 v7-1-293
++5ea1f7516c2cb92422abed07129357a0d5a6a787 v7-2-165
++5eb1ac6f92ad40da9bbb585f5ff8fe003e85122c v7-1b
++5ed9395c1864269b18ffad462291eb37c92792f0 v7-2-235
++5ef53a1677ee9c831d7a18ee44d1041f182a82b2 v7-1-099
++5f0c7aae4da272c73cfc625f35dc050897b6afe7 v7-1-330
++5f33b64a6694dbc2c167b86c56488ddeeb7f46c5 v7-0107
++5fafc42c22d246e4dcef5c09d70b757e0d374b2c v7-2-053
++5fbc411a611de301397bf4f8edf494fe07bcf6f8 v7-3-042
++5fd44cf99b6ddccdadcf70ff8351999e4bf5dc38 v7-2-398
++605f5c2f77bace46037afea6841f7876af85a4b4 v7-2-182
++607cff4bc0cbd7ddf84007a20bf3e6bb01e70694 v7-0088
++60d21d224d251c448ef76b1b9df087497c06adf4 v7-1-038
++613517f0b72a1600d58abeb8c44df9b3de1ac997 v7-2-284
++61709607f5e26dc1d4cf420a25292ccc857d3575 v7-1-228
++619b90abfdc95e3b1d0981a8995b942c6a7c3c29 v7-2-032
++61b50044616bc626b27630b3c9f03322db0ec609 v7-1-090
++61d080cb268e21cc2275da3a0ff2b2081d97ff51 v7-2-086
++61e5d40135d0d90f5d1689c469958bb7a37e074f v7-0-139
++62716fd61fe94fb9e7f39294dfa9dba4aa06fbf8 v7-1-204
++630eca9496e07d9a778fe87d087832816a01a850 v7-2a-010
++631143ac4a01c32e465380ba2ab7f82949f20d75 v7-0007
++63157185aea525b39b1238df3ffbf4ec0fea10b1 v7-2-442
++63369d73b551cb0b72202c29dfdf59aa6049a333 v7-2-161
++63613d8d7e4dff96ba2f34be50fa4b002f56cff6 v7-2-354
++63bf37c1e7a2c323b368df6e926b026139ec3144 v7-2-401
++6412b0befebc17db58a1e8acbef86d3a3e4f742c v7-2a-007
++649d340f34d3ccb1c96efa9522a65803575d901c v7-2-067
++64be6e0b070a5f5f58eddedc8b57dc0356642cd5 v7-0-004
++64dd70f176c92013bc7efd0f3c50083fe4ca0972 v7-1-021
++64e2b75e16158d89c4a600bb97a62a4616632884 v7-0-141
++64ed4359d9570e345dc109b51138c36ac8769614 v7-1-221
++6510d834609f78327cf78465d6849601bfe39108 v7-2-380
++652d074e0264f453cbf76df0ce041b5032504085 v7-0-048
++656853d9c014add434086291b7af40ad828f126a v7-0-111
++656b4c052203990d56ca731d2e3ca39ebd9bd775 v7-2-029
++656ca7102064d711eed5cc678b4a5cf03b5d9c05 v7-2-026
++656e652c6579a812d9f48a0e5e4d8ee47ebc1a35 v7-3-068
++65c332f15dbf3376ed5aeea423e8f1584a65ff29 v7-2-083
++65e0c2e3a3521c9782728f307ced58a5740d87ac v7-0-166
++65fa3b16f040f5320bad34c324f230099bfd8f0c v7-0222
++6605dca2960f5c597f981c60cd3009e98b173883 v7-2-178
++66080ac5dab745208cfd8f385faea24ed68be68c v7-0130
++66263e241ce35e11faf9b33ef6e2d509e1ada4eb v7-0176
++6632670ff6fc2bd4dbe01001086874b9f75b0929 v7-0-053
++66475621f0bfacb601f38c15625c15c2a478e672 v7-0147
++6675076019ae7e7444c526b342c91ae2ef6cfaac v7-0d
++66b1822ba176a2f7d7e2878b2907af6d86e5b5c8 v7-2-326
++66ddf49935fb8979def275bcf7c56acdfac7ef6d v7-1-015
++66e40876590bca973973b6aae208a14cb428c266 v7-1-007
++680834cb19eb2dfdc88aded4bfb36518ca4caa60 v7-2-022
++684ea86baabb6ead7b673d20de6f4b5b27a3335d v7-2-101
++68f00510705229a9b8653612b806dbbcccd5aebf v7-2a-001
++694e8715dce6af134be79c99e97f90786088078f v7-1-316
++6974b167d75eabdf70005f666e3dd0e82e47be4e v7-1-056
++697dec8ec5e723ae32e12229d3ca111fe7f4ba92 v7-0-037
++69bcc0c891d706d3383f013e9e5f8876b6c76d4f v7-1-158
++69e8006af73433fa27ecf32b695919bd665be1c6 v7-0212
++6a2e4860134bf0e4b5edf382627809dc6cec309c v7-3-091
++6a80537ac7aa6d4c9011edf4db84a6aea85d2911 v7-3-041
++6a85219723b98ddd686d1a80c481a545bcb535d8 v7-3-027
++6aea606c9e911f768a5e6c9626581721f460f756 v7-2-068
++6b5d641bcdd45e53c24e0b4e0b6085a696e336a8 v7-2-395
++6b89fd4ffcc698278ecc582280c79916a425498b v7-0-008
++6ba0265d1f1b70b8a4a2b3337b18ded763f58f09 v7-2-295
++6bb1fa855dc91259d295a1beeb4144aa51b3cab6 v7-0e03
++6c05b5e5c1be4ee9b8f96334b7fba7afa832524e v7-3-032
++6c3c2e464a9628bcbfe21317b8fd90ae27076735 v7-2-392
++6c4da3e24371945408401d6330a930d44cb5d716 v7-0-232
++6c62b9b939bd8f3df4ec59b2c2d72bbbecc723d8 v7-0093
++6c7719f94811d10db3f86578e5286e5da2fd8514 v7-2-170
++6cc8a093e4a9b14df444effaef7274d2318d00d1 v7-3-115
++6d421b3c485b2da5a04529c6b71041031d41b80c v7-1-046
++6d80dbca8501a4152908713778ce03e0f45b93f3 v7-3-118
++6d95d8976b00540c053d11fff36e20556d125152 v7-1-200
++6ddd55ac6ce50b94713303278888da04d21f489f v7-2-249
++6df4e719ce4eb637d6db90febd0d1eb48bf8e96a v7-1-112
++6e03ee418b50de776b583358fe2ba20bbaf043ad v7-0-137
++6e9c10c63e25ce9212c5d629c9fdb60b67e6658a v7-2-216
++6ed4a82fcfc6f1c354906dfaa5e13a192b3246a9 v7-2-175
++6edf4a4f6cac62dd123f7d1017a7624c9f48e71c v7-0110
++6ee9d7fa5df6d00c892f7e93a63435de5c50e083 v7-3-057
++6f12c4eae4f69d1379427e8b0cee82769f75c35d v7-2-153
++6f4740f72d3d2018bfb19d4c8d8064e3682fd883 v7-3-090
++6f8b578776ab0204bf16f669383aefb0661610f0 v7-0131
++6fdbaf2bba0459270702479d6c4cd04f4f6bc034 v7-1-098
++7002404b17b15ea37887cb1dd5b5b95883cdd27f v7-3-054
++7015ddf8105575fcf48eac35b14c61a24fc38d7f v7-2b-018
++7033303ea0c065c16d5fc31d485c949f7949c10b v7-0089
++70661384379a0dd305576f64554608a396b0821f v7-2-056
++70a5e723eea2c648aa82f7c8f28a2a5dd5429132 v7-2-213
++70c67b1bb1f1aeddc1dea55438e11ae6f9ca3d14 v7-2-329
++710b52d02c4a0649d5b20c38e3394a2e248be9f5 v7-1-237
++710da9abc3c1191eec6633477eea663fada04939 v7-2-317
++71219f47ccd9551fc7d090e73afb83cc395232d8 v7-3-025
++717e759932cb94af9ee8dc9e93f33b67f292e8c1 v7-1-217
++71bd485d8fa572ac15207c5c1059b2ad0ae685fc v7-1-166
++71db8539b8c487eef0df17f2069d96fea1911cf1 v7-1-268
++71eaeb69efe49baf0f63c6e9cebde1aade638ccf v7-2-007
++7209e03df1005fc037c029799b068f545b60433d v7-2-075
++720a59d79bcd3d606bb9837492295d0c52835500 v7-2-168
++721ebb602db0fd2a5a9cded8e0830800d734469a v7-0-135
++727ab557c58a3257743a8b7589d91e21975b54ea v7-0-102
++7281a86ae640e65e5eff6d6b565be20032f736b3 v7-1-016
++72ef7987368de4715599707a85f74a8e6d029c9c v7-2-139
++730697e82c43a8bc8b5975bea39fd180fb62a4be v7-2-091
++7317e0e2775877fa0b817e20d29de9eba1a4f95d v7-2-254
++732c7ae5743ec2d22423a8bb631e2d3c5fb8e549 v7-0180
++73354c21f1e40dc792e5829152992e76f7a607ee v7-0066
++734d5bdae499eb2fa3f818e843efd9727e7f69f3 v7-2-041
++7387540b6e52e3faad6c78182de9d1354ac9e6b4 v7-1-297
++73995e7c06e668b3eafc366b3c959d32f6bc00e7 v7-1-174
++73c0eeeee0b789738812c1cf821de3f86e1fee53 v7-0-174
++73c5752b957d49da8312ef87383a7368c78df74c v7-1-295
++73d947c20291fd857fba24ddf4725b9b831188eb v7-3-038
++73dd10c18ec4eb2cc0857417fb8cc20f63dd42e1 v7-3-060
++73f10d8124f48510e0ad1468ee9e29c010009621 v7-0136
++7472c565592a373abca2ea571e229b4bcbfd7b15 v7-0117
++74e9d19831c2357d7b998f484ebc609dbc08c5e4 v7-0081
++7557b6ea0fb14ba4e97f5a8a04438db30cf902bb v7-0030
++758822790b43d2fc184878c3a50a12d71dda794e v7-3-031
++75a69023117c516ca184ed479727f105af12cc39 v7-2-221
++75a89c7c204e0f478f480598cc3f2a8c45dee8b3 v7-3-059
++75ab683fdb50e83cb9037454f5dd8d602e08e4c1 v7-1-233
++75b3f9cc19da44ef65c962deb7a6049c305f49d4 v7-2-283
++75c88515e0db5fd6f88a05634d9abd22795aacbd v7-1-214
++75dbeedddaa9b0e0784c4d23d71de713a533c5b4 v7-2b-016
++75f5889a5d8e8272fd17a104ef148776f9133aa8 v7-1-260
++763272b18e4ffe717ebb58827315badc09824e86 v7-3-098
++76406c9cbbaa1ab6a8f6ca7f079c3ba8cf06e2ca v7-1-176
++7644c80ca87b75a7dd85a7b4089e74bf5c503f3c v7-0-089
++766918de9e3a76816ebdee3b90cdb1f9f76bca6a v7-3-004
++76985a406456362dbdb4e7e4bef67656b84de965 v7-1-240
++76a42a81f68505f7b99af53a919e3cc7895096b6 v7-1-087
++76c2b2dd25c9c6945489a1c636f7e375ef1f40d0 v7-1-033
++77310929a1f94745e3d49f0cf1a6908785d3cfb0 v7-1-151
++777d5460622d4a9aac084695524d0c85b39f4174 v7-0-164
++7781fcd2b74f26a37da0d1186a1c44d904a8f11f v7-2-011
++77f3dd990b12aa963aa0a63f0db50f6443f3f41d v7-3-119
++77f8a648d2e6c765329ee6544bd8716835bda3bb v7-0-062
++78b9d5dce950b348235ee667f8573c6592920088 v7-2-420
++78e032bb32605c1437e30f7ec3215ad4c0772dd5 v7-2-303
++799c1db62b42a7c9d504c45ed313910c2e3d169b v7-1-164
++79a23c19108a8b1eb9d1b97d5844fabee6525e23 v7-1-079
++79b395ba0ea5e2bc7d27ace528d84d47aa1f5a66 v7-2-311
++79b8d69a4588b93516410e519bb9459242f46d81 v7-2-340
++79bba9e6af2b6588349ac2b3e9fb722d6ecbdc85 v7-1-224
++79d111ea8ef64e7bab0a5e27b7d5903f10e45a43 v7-2-425
++7a4ad3fb109d42f37f82664390f128dc9b7e44bd v7-2-188
++7aee5e68548a7cd13c74e67439f8c3b8ae6327be v7-2-417
++7b0e89b77216baf928145ce14741650806004c31 v7-2-365
++7b258a166daa98eb01237988ec954895a2e6ff0e v7-2-018
++7b44c70ee8ab87d5265ebec758a6f5ea9d5cfa75 v7-3-104
++7b875bfb39b871d5d40525d579e30358bab6be1a v7-2-434
++7bc38b35f1e87c1749f157ef91b6cab86bfd9561 v7-0-026
++7bcd81b96e2abb28ffb000145c917bd05e88e5c5 v7-2-267
++7c28790fa8b4054bdde6d358a9132581de76df62 v7-0-009
++7c2e6ba1d702579761d7ddc4020797bbc97805e3 v7-3-008
++7c3302e07dd7cf0d746776234ed4e9cb376d3611 v7-2-023
++7c46737918cb0adc9a51849b75b1c03da7bd77f3 v7-3-117
++7caa503b63a9b193f3b9e016a0a466ff8065f2f0 v7-2-225
++7d121c69f540272878af6fafdf658443360a698b v7-2-383
++7d127d580b6d2d86853fc0a322323cdee2eca343 v7-1-318
++7d2641e6af75b3cfb4dc29e7c88812dee6c003ae v7-2-261
++7d29124f77f5e794008c746c69a0f79da0cd966a v7-0-133
++7df2d171ef1c1284e10a4c53fb079d02e6d7b028 v7-0-163
++7e0c8a18c915a4c7dccf01be813488e27d03fdc5 v7-2-275
++7e5284f58094dd557b1502e1536c78846a59049c v7-1-134
++7e6d264ec0a270beb9692df71fedb210c1896640 v7-0141
++7e7da11555d27f62984297f3e1debc8242baf995 v7-1-080
++7f01e52cc97aca6eff92948b67876e800eb67fc3 v7-0-171
++7f2d3b3c15a2ffbd259c2ee99966124c2c2087ee v7-0122
++7f788cd2741586586a34b41627a1c978fa465666 v7-0020
++7fd70926e2e1c299ecd9dff6ddfb51ef71f7f08b v7-0055
++7fe13e0f5dce15cd16dd61c898e63899a9aff561 v7-0175
++7ff9f75f9c59f7b600ada6ac4b3234398df5f38f v7-2-245
++801d5544828215bf644cbc6ababfc66beec6cb2d v7-1-195
++802898d3afd12da41c305c495b121e41ed880659 v7-2-214
++80b9076e9e177bbcb455eef9928283077ed1c861 v7-1-310
++80e5b1da667656a146cad7a749ac9fd2afb659bb v7-2-231
++81059e8b657d911c9876f557975f34624988624f v7-2b-015
++811f29447aea27adaf1f54879ddf0fbd05a1e094 v7-1-270
++813a407a63af8773c585b0baae4d22296503ac03 v7-2-271
++8173ec1e9f1f746657dd598b6e876b11c99e1049 v7-0034
++819d952a0a5cc810c52b34e8df400f83eb3353ce v7-2-142
++81cf1b6e0a2d59192534f884135108f788a20b91 v7-0-147
++81fe2ccc1207699c377b42f1d8ca426a70177afd v7-0179
++823e9ddf23f77858f1b866fadf3e4ec5ae5d55b8 v7-2-141
++826f00fef9e338c7afebef68658716bb0aab62f4 v7-1-096
++8272535dee77ded630f57073b428e89673f1ee45 v7-2-035
++82885ffcad10aaf6d11170dc45d2721ee222c37c v7-2-310
++82add1e7c154fbbd5926df49fd4afe768e6007db v7-1-013
++82b2594be40863fef91c163200db2f56b2e4e52b v7-0-155
++82ca8ff21fd7181e16dcc58863d0d251b9228374 v7-0-175
++82f866f19e91a19ae44e7dbe5eb8747e98acfd85 v7-2-269
++8389197c91f3ecaaf28b776e69b9336eb08828d3 v7-2-133
++83a006f81bac04bf9b975347bf8d6bddc7996eb6 v7-0199
++83a126db2895ba22f2fff13b488f028ff83bec28 v7-2-027
++83eda510dbc07b4fe4db5b5f324680f60c307fff v7-0-222
++843bfffb04c739ec456e5c5f612c6d025f2a6188 v7-1-058
++8464d084fa7475830cdc53529cd20f7334c81232 v7-3-095
++8531f7ee366297c58506f9a3130f45c350ce1fe5 v7-0-218
++8562c6804861cd26020e1a004edb1c1b218af9f2 v7-2-388
++85a99ba3eb5ab45127c996c4e7b4dea2e7a76c54 v7-2-233
++85ad197907065fd92f29bf3dcc190779a20aba46 v7-2-396
++85da0376313011aa957a9132df2686c9aba079d0 v7-2-333
++86079b930b3e8735933c9349e44184761bbf56b0 v7-1-010
++862863033fddf5f0bb2f18988b79bbe0d289ba45 v7-0158
++86289e90a4bbb818e9cf8bae6e57f7b91b9671cc v7-0-123
++862d920800b1a8a5ebca3e7db5dbe431982f7d0d v7-3-103
++8647018a15f3e4e89c706b6290ab0151565f394a v7-0-178
++869c92bcfb697875d5580fdf3a13eacd5648c5f3 v7-0085
++86ce35c9750f60054f48c1bfb80507345b862d8f v7-0231
++86d71ae0c85a546d4a00b53481b540a4ade2c9bd v7-0042
++871231399cf547112a50a9f93497d40d01b66d51 v7-1-118
++87401adbf5fcbc6fb8edf329290c445528266bc5 v7-1-067
++87a777aea8993a49e61394e7a84847e91b014090 v7-1-005
++87ac4be389523f44914899c37180d22b60757ffa v7-0128
++87b6a6a065ab60f6ca4ed094c2afafe16e0b590e v7-2-171
++87b9f21264a79be4ecfd14f69da0577f9d41f260 v7-1-247
++88095f75d63b5a486f603cf28801df0118ed1218 v7-3-015
++880ece6b24762edd52b414aa1f005478707a3179 v7-1-101
++882b2fa49a2a888a8231f3cf2428b91439decb93 v7-0-014
++888c0645d64f3a844b22525387981f17317d8502 v7-1-069
++88c0c6c9eadab09b029312433f246f65e216a1f0 v7-1-184
++88c68e59d39cee12c580f1df72a5759e58574978 v7-1-088
++89189f7aaad9c28435aa5cbd4db359ae54d0769e v7-2-312
++89300f5e013c7d217d5f891113a57705cdeb017c v7-2-414
++8978513bb5e31d3f20c941e5141d228ca95a6f58 v7-2-100
++89d1e8ed6c1d6d9a672880fc73df97486b2d5966 v7-2-227
++89dc68c0ab6fd676ade26cca39e16b81896a5069 v7-2-386
++8a0a8f10b43e02d44ff26d608cd80fb61ce4773d v7-2-356
++8a2092b558c2fc11605dded24c4c5a817ca92ac9 v7-2-443
++8a22a90c964a168cf3d93f5ff8d5c531a4327ea6 v7-1-229
++8a5a95f7ef2a7dfeb585d0392489fb57ea4c5af9 v7-0185
++8a6982d59d8ef4afa5c178d772bd2943665f0146 v7-0224
++8a6c67218fccfc536fdf829075e99549fb8247dd v7-1-173
++8aa3cd045aefc5d324d820f2239ca1f533e9632f v7-2-379
++8aa94f8080bdeb8908de30bbcf62945dabba1aa3 v7-3-022
++8abc0abf8cbd09abaab555fbbaedbbc231d42b41 v7-1-248
++8ac6392acb0a87a779340f949e280bafcc49f55b v7-1-136
++8ae24f338cab86cb35fd495ddc3cbe2101ae1558 v7-0217
++8ae4de2d02af315b1c0abc2230c3ccd5a31f1013 v7-2-384
++8b2e9257cc116bf30b755aeb37a742ac83f5da42 v7-1-152
++8b84fe17e147219e6ff181f6bd7e809e5116588c v7-0159
++8bebcabccc2c430f05c5d85f8532adccb18a6136 v7-0e01
++8c229eb52e347be77c76c1c2c96f717cbfdba4c5 v7-0099
++8c25f10d49e7186c9785a0f01612166f20a29298 v7-0028
++8c60f65311fa6358488f671adc226950c18a993d v7-0052
++8c8d07318d8d0b1bcfbd395ae7aeec6813725b33 v7-0-086
++8c9396275bfaf3ba6c759c26fef07c0b687a8abb v7-1-277
++8ca3c9ad0bee0c265345decd180d971197e36194 v7-2-366
++8cd72985156286e77ac5d271a13cfb569b29ed76 v7-0g
++8d09c1eed8a57bb2df53fb1f1747137e5a3489f5 v7-1-074
++8d1db3e3ac5f3f33dcf5f68ea132502082e787db v7-2-262
++8d2b705a5a51d2a6756f16dee861dae4ea97101a v7-0113
++8d34af900baedf0db9a3e57bbf48eeee75068e06 v7-0072
++8d74df00f7daa4e79bf7fc56164369781408e1be v7-1-262
++8d8dc7e07999acbfd89d0b646d72fab69e06bef0 v7-1-230
++8dc36a64ae8b36d124bc0767ccadba3daea943ec v7-1-294
++8dd456c1e283bf8c85e9ff38994fdfc6dd009ff5 v7-0c13
++8e2d14a3e7d2860527d39f0b662beade84db9d23 v7-2-352
++8e42199f51218e2a14a946ee50c1e8d8ef38205c v7-1-054
++8e5830943bff21c0a2aa18399d18c8269ed9d3f7 v7-0e04
++8eec9649b7a2ea1a441723ce7a4e8637c294ffbb v7-0064
++8ef9da918a98e7f8fecb4d88914e4691a8da88b8 v7-2-413
++8f72e3512b437d2390860bf9fb6605b778cb0346 v7-2-381
++8fa8d7964cf116fa98895d029808a0d5e1cf201b v7-0073
++8fafff87aedbcc1a7c71e29a9369056e5c08e84e v7-0-075
++8fd2e00c44ae10bd9e8a8f5c12db47378314457a v7-0-112
++8fdc1210333357780019fa8dbabc34f07d545775 v7-3-035
++8ff7fd162d3cf15129e377401e49f8210d62aee6 v7-0016
++903088c7a7c61b7f30d35c8a184d90b7af4a44e6 v7-0193
++9032e466829601e6c56046813d0a9a00946a1d10 v7-0189
++903fcd726d9058a0b0c14a85cadf31aae3ad27a2 v7-2-359
++906b37d2f9c3a85fc9c67a29005ad1538e60efcc v7-0056
++907cf09fbb32d7b189d3372f3c4f1220f198a9d1 v7-2-385
++9090f866cd57a7febdb2e0679bf0a5e86951e314 v7-0197
++90ee46d7f4927c095141dd4afa92400f2fe4c697 v7-0164
++912b18745defca4b03d5738fc7ae6c76d701f2f7 v7-1-143
++91e7d4a7b3b0e20b6f5bf9468ad17625e745d640 v7-0178
++91fff9db214e21eeaacd20da86b22629ba6d92cf v7-2-297
++920a993902e8332e3fd539a54997278364fdbcf3 v7-0062
++92168cfd558c53f1fb0d8014559f16be0a795171 v7-2-167fix
++9230c45fdde65ac15a42c39d851c68b248fd6836 v7-2-226
++92809ecb9a476994296e51001486b3934561fc87 v7-2-292
++92f3089a7b10dc9e8f5f3c69ab1e490d52ad2f0a v7-0-082
++932fe018ad166a9f8e4b6b0ae91d562cab7c37db v7-0-168
++932ff0c0f57bb90d48470b70cc728058e0c56e3e v7-2-173
++932ff0c0f57bb90d48470b70cc728058e0c56e3e v7-2-176
++9364d114ed8d089f3a42c910442957d33e5480cc v7-0204
++9368159253f847f95c6c1f39a894e26fa3c954e8 v7-2b-007
++93ffa40b532038ad22824047b15c6edec3b6af5a v7-1-155
++94164a5b0626984b565ae6421c64bfd6d993e162 v7-0-043
++94694351f592a56f8a379510eb6992ed0dbee821 v7-3-029
++946f0cbdd535d6fb8915ccc87b837edb15287663 v7-0074
++94f44da44d2e0874a562918005789418793bb507 v7-2-339
++951641b8784de5175cadf9fdbc361db2b6b45060 v7-3-102
++954947a70580c6c5d94bd110f974bdf103dd6fd0 v7-2-166
++95723058b8ff365843508cfa47a3bc2ecb1b0cf8 v7-0-229
++9577a28005e10fab0a0cada6c41b96c9a3e1bfe9 v7-2-446
++95b507e6c9e75d5b4c114a63a98b4bc36c643eea v7-0-145
++95b659982b7c17ff93304a37f43be8dc508e20dd v7-2-375
++95dac6af3b3a8f50af24432b7e355ea44ec69f95 v7-0232
++95dd473d2d28a088822c73309c3dee597c96facd v7-2-044
++96276cc11d8e68ee320e0f61e20406dcb7a0b995 v7-2-240
++96445585f1d9d1abbc74d9c24efbf0408b2cbb12 v7-2-151
++9656552c468d29773423dcd62a323aceee0b6c55 v7-1-072
++96580558098272cca6f93085d79aa7164c7abf41 v7-0-215
++966289a3dd7ea565980bb03abc9b52d88378f96c v7-2-316
++97a73b6f28925dea4310c00225cc6210af00468a v7-2-113
++98a2a6e6b966668c810986b6ddd4820bc09db426 v7-2-353
++98a88a884610aa911950623d7cce8d067feda66c v7-0230
++98cc757f7e3dbff20ade108b82582d7a7d88ed33 v7-2-376
++98cdf5c477ec3c3ce8851a517ca3021aeda6573a v7-2-298
++98d1c149be76b44332bdb72e986bfc8b0f9f21d3 v7-0-160
++98ef5b0fe07610170bd68aac5ba6e739410c913c v7-0-029
++9913ff5706164031d5f847bc0980cc61eeed3974 v7-2-119
++992d5c69d5e917b03abcee24d2fbed8348e21c23 v7-0-132
++9947133ce85b86df83b86f476c09c0454c47a310 v7-1-078
++994ea4e6f0238f12a5516eb75f7a6d7ce86362e6 v7-0-094
++995536cad50e5c08be60c2d82c7b32a63db1e434 v7-1-218
++99a9e42e5688aeecaeaa4642d17be0ca54ab5945 v7-1-095
++99b225e0dbc1989ecae75200aaf0e5329e6bedac v7-2-430
++99ccc8932b6c450cbcdcf86de05dbd5129a370fe v7-0-180
++9a10e4d195b342292cb8ce0d368afafac146abf9 v7-0076
++9a3b65713280ebf8750989758b4b2d42f757ca9b v7-0-216
++9ab23f1e137fd5b0e35c1604ffb95979713f83e4 v7-0c12
++9adbd26f7fee884be78276fb400ee77d333cf335 v7-0-116
++9aec644c45dcc33b3f3571ba0035e7f85430eef6 v7-0-121
++9b78bb3794ba4dba44ab3eab9ab2984797e839d6 v7-2-350
++9b7d8fd5dc68074119d5a609210fc1ba924e9d7a v7-1-148
++9bc164a2c8143f6019d0b13a2aee4be89da3a9fe v7-2-204
++9be44c669f4c67406132ede84d1d2951eac7d63c v7-1-172
++9be87deaeb527ef18daf09d6c75b21d1d7a65d78 v7-0009
++9c510840e896fc3776ec7694fe90e18808036fad v7-2-439
++9c5a9e4356f8ef42ea2c177568b63bfbb1779bb0 v7-2a-003
++9c970d8681f46de0b13ff16d67c2327a19f33626 v7-1-226
++9cbe94fd5c8f1ca388ccd2be94f17caa33ef093d v7-2-314
++9d6a886aceb23fcaf8f64f9cf1ebf3f83d14b2da v7-2-242
++9d74e2f433c0370cb458c83d12b05f72226df489 v7-2c-001
++9dbb57025f2542dad344102c571c06da6b840b34 v7-1-139
++9dc77520c6d3ee0c3e689bc3e6d635cde80909ff v7-0-013
++9dd62cb57ed5845c9c2294b6002a29702ef043fb v7-1-319
++9e0174515abb6667a9e74e6fefc74ad50d7821d2 v7-1-291
++9e084588b706867fae28f93f67d163635a79ae51 v7-0-188
++9e1cefec84dde22d62c1bd2dd0ceb4e072470981 v7-2c-002
++9e265d9089fd4afcc03a4ac7c1ccbd754c8ef6f5 v7-2-436
++9e359e5759f628fd0ff90172d533636440b464e6 v7-0177
++9e554211caf55e33249908747d9259ac77f10b72 v7-2-301
++9edb5759494281d90ae0f312b2ac32c30f51ca50 v7-2-260
++9edc96495747bd354e68dfd76b6ca525d39e715c v7-2-206
++9f184758f277b816c95fd946cd2d63578d296578 v7-0-010
++9f279ebda75194c26ba5c917f68a7102348215b6 v7-0f01
++9f345c48220b7a503fde0367df20e576fd46b04a v7-0c
++9f8fd6a14cfc84953deae7d00287a1949c0f0eff v7-2-004
++9fb5bb1ea79b5ba402e51051d79a3476ffce3c35 v7-1-044
++9fbb40a1228a4d8a5f26d1dff8e2ab4e3bd870fe v7-1-282
++a03f7551baccc60bedef5ef6a9f92ccdfe69a9a3 v7-3-081
++a041f68d05909431f0a525eace55307214c33d43 v7-3-114
++a0451524244d6387ea49cfda296f6550a2a9aebd v7-0082
++a07007166d518f51749cc9e145afeb023638a415 v7-0-044
++a0a98a0f12816722b1792141edb3625dd72eb5bb v7-1-326
++a0b03b7e9168b7f7fd61b1563ffdd6d09ca54260 v7-3-028
++a0c01df852e1d183c879ee114b35b2b5b0d06746 v7-1-300
++a0c70314350fde9e0948e598fe57dddc6192468e v7-2a-012
++a1059cda45f226497278c53752d5c07d21cda09d v7-0142
++a112fdce9ebd6d538c70602550e94f29a2fc60fc v7-0-200
++a11e2070c964de1cfb9fdf3ce339ec75b7a983cd v7-0-203
++a135270b75498b76b5bacbd1e381059283c5e383 v7-1-206
++a13e4b242735dd0b3285b7f36fccda195ba1d5f5 v7-0-243
++a14db0b78c590d4bb8e1a190b80fbf3dfff89560 v7-3-121
++a157c4786b79ae94758574d5ecb4a8f4959de5e6 v7-0-073
++a16af0072ea82b2dcd265d050b349850cf8f28b6 v7-2-410
++a1c1f001b99dd591d9082db95de70e2bf8f9e8de v7-0-129
++a1c5a6cb26756450d2b7065999de140c2fb6ca74 v7-0112
++a209672376fd537735f6ab55ce926cb80fa56ca0 v7-0f
++a2271decbce54d46f62e7cc9a0c4e3ea3ae9080d v7-3-065
++a27c581d2618b9bab1c7105fba966af40e23d57a v7-2-016
++a285f0cd8a462ff5cb17053fd457646f9d33573d v7-2b-022
++a2b128f7d705ef08ae91a8616cbaf40883827cdc v7-0c11
++a33e606ceea66c946219da3899de9566fb0cad35 v7-1-024
++a3552c04f4e193d981013fa4c077e49d729abb6f v7-2-251
++a36d21d4a87596abd8775c322fced6a539385ab3 v7-0-204
++a3a4be6bdcdd0f43aea2aa09288e8f515a2c2f05 v7-2-308
++a420bba0d851093bb949070895a9dcf4c25e6c4f v7-0184
++a4365075d05c40606c2ace3340e9484a6b045f32 v7-1-093
++a509e3ba61f6e541dc8772a0f9de0c38999fd610 v7-0100
++a53e7d3fd741c68a30085fd9b22d260aec93396b v7-3-086
++a565175274f6efd9d4f725dcdee1b6e049258d3c v7-0-184
++a58806285f2086c1591272962d0b5709a63a74fd v7-2-152
++a5b3a7fb6a5a0f1857b8d0eec380aa7a0f780729 v7-1-154
++a5beb9fb4da85dfc21dbb68af0fd6aec616dd1dc v7-0-024
++a5e1d6526ac7c92fcad2ae100b1d43ae238067b0 v7-2-103
++a5fcf36ef5129596fc281d76369077ad01323b3f v7-0127
++a5fd859f69f1b5c70de7d0439150f2c681d0d915 v7-1-020
++a66a49322b6bc2a82c6cc3e8092db7d502f64c4b v7-1-073
++a66c405786754105eaa63f3264c94ce134bd275f v7-2-105
++a6776e2c9f014491c7476c3a12b2b7f108e1b6f2 v7-1-222
++a686fd6c8beb2c41110e0a65f6a403f0ccaef83d v7-0065
++a711f7a6852db37b1687044ce8a96b6f48e9855b v7-0067
++a73a117542b8b5ec22eb3c61e45ad888d3d76b51 v7-1-171
++a75120dc3e2691218f3144bbc24369283d74eb53 v7-2-190
++a7c4842a0be340d06de659940f9396f969bdae77 v7-2-212
++a81bc802c17ce7002b08d2e327136e3ac4d11d5a v7-0011
++a83f48a17efb871266ffbcb3b6c9cd5a62408410 v7-1-274
++a8752f2805d69f51f1f6370eee8c7e2c89c57db4 v7-2-037
++a881e15f44d8b5888733fc98c39984c2fe6316ef v7-2b-011
++a8aae2e1d2ae6c22551400d451e4ecaccceffcd9 v7-2-049
++a8bcc7553263bb7a12eec8813270ed34242dcdfd v7-0-190
++a8caf7dd853dd5f5ea2bbc671467ab2f78989f44 v7-0205
++a954a30e407394f51218ead2a7d832e022fd2378 v7-2-115
++a9e353f7fcc48a2b603ead42451ea8e89ee7b9d0 v7-1-285
++a9e90b3356b62da552b62eb62b8dff78438f2dc8 v7-0036
++a9f561ffbc53a7097873cce7e8a8e1615ac0c38a v7-2-243
++a9f814054152b658c1b90aadf0f75428e1130cd3 v7-2-074
++a9ffa7c7db7757ae7c1ba0e7d3b990bafaefb558 v7-0-097
++aa6caa23a4b834360b82d3d078d1d17f33d673b7 v7-0152
++aa7c51f81f46cc5379386ac622a5ba44aae1c4dc v7-1-227
++aab202d244b6bb286a62508a432222d26d5d215e v7-2-394
++abff2f6a3ad7790f86e055519dcb851a06fe78c0 v7-0-036
++ac0458d9b9dde727d1bf11e9e9221edc20b623a3 v7-3-026
++ac04f392ba48436bc1b90d3d8b8d384fef4f8135 v7-3-073
++ac33b7c03fac7bf435346233114939fec2e187e6 v7-0018
++ac6d15d91466b34e4ff31765d1d1e1733f02ffc9 v7-2a-014
++acc572c5660c90020f42c9f31c1d2c776c5dce47 v7-2-097
++acfe86afd651f1abcfb6eb38ad0101e61a27c65f v7-0135
++ad8f5bdc727441118cf45678b031d04d1a77aae0 v7-2-001
++ada3271481ceab448c69588c5cf837c2dbc91987 v7-2-289
++adf6a9dcadeda32a2a339069336ebed7fe6d53da v7-0-038
++ae2251be41f935706f7e634a832ff5ff8a91d023 v7-2-185
++ae22c450546cfc001c90ca17999318e053838c30 v7-2-433
++ae7e29b64923da886325215a1a5b20bd60e4cbc0 v7-1-194
++aeac63ad9430d81a0dfdc21080f1f05cdc633baf v7-2-048
++af7afd2bb4c235544fc9da6b34898ea93d477d77 v7-0-078
++af98ef7f5a39aadfe18dd44df9afeedbb0665778 v7-0-003
++afad99b3612ca54f3668c232e8d3ef235d74c9a2 v7-1-028
++afb64d9f5b8ee1eb6e787e1d34ef8b80f15d4749 v7-2-013
++afb740b5dfabffdc759d3428254c944bd4badeab v7-2-191
++afbe4a4c884ceacc349264075afe26e93bc75f07 v7-2-208
++afc60a6339a68f659addfbbb849e249964c9107c v7-0104
++afcf9db31561c7fe2b62b346aca751bf7bb31bc3 v7-2-336
++b00bc2bf23eb62a1883318c6565d3fe0d1b4e30e v7-1-119
++b00d5f429a4b2f0a23710200cdf2a672ed9d5501 v7-0-108
++b04bb35fcd4b7edeeb8e175955a2909a86dad118 v7-0-240
++b0605f2f9786c14e943a0ab440c16b444f2a9cac v7-3-113
++b090b216a832197c70f60ead52026a53ecb0cdd8 v7-1-009
++b0dabd584b8f89ac32af9758c221e948016e2b0e v7-1-175
++b0f8f28a67c23c9e9b6b8087b373d6fb2add726a v7-1-197
++b1706a94f9f9638cc0ecb624dd7519cc9beb6ca1 v7-2-405
++b1b09b68d7069755425a2c1849f517f3f9e760d9 v7-2-279
++b1e87b7f5db64eb40fafb0e9bcbb0c39fa2bac63 v7-0133
++b209c3f94ab7ca3ff559d255c395fa013fee31a3 v7-2-073
++b254cfdd740542f5778d787845134db3c7584335 v7-3-071
++b2789846ed3978ec3dd9a91b6e1ef2f4d054431b v7-3-069
++b2a7d143abe2f572e713acda4a67ebce76511bc8 v7-3-072
++b2cfe84c96ccbf87a7c765442f0e32c62fa112a9 v7-3-044
++b2dcb84570675cbdb4fea2d017bcd093b3f34be3 v7-0-070
++b2e037ed7e33b48a1feb69174850acc393254864 v7-2b-020
++b2f4319efde1edbabcd900a63db8998bfc117152 v7-2-084
++b31702c473ae10db32dcedae94af25228d6c920c v7-0-049
++b34d985598f68b97fe1bdf1d34bf689ea1b8355d v7-2-130
++b4791bb4fbff451efa3ffdabd4e26a668eda2283 v7-1-108
++b4b1b5324380cad36827cc211a2f92fb165d9777 v7-1-026
++b4d11ddb7303ebc28f6a40fea28f003287e77352 v7-0-187
++b4d92472f168c90d60359f6a592d6461686c2db9 v7-1-085
++b515624f6d7dc7597b0b01c5cb03076e4daf3347 v7-0-234
++b54d2f702d41f4fbb8bb3d33e52faf94568b2170 v7-2-127
++b57babddb32b2df9f04b636154a26c51f78d73a2 v7-2-281
++b57f2617965fd682c6284a706a999b58f00bdc3c v7-3-014
++b5ad00887b816469ab8f7733643380a690c1322f v7-2-111
++b5c1cb6f8d565b4fa5b714660e8a0d7f8d8f7a5e v7-2-174
++b60a569eb708bc6563cc1104335cf56bb38ea901 v7-2b-010
++b61422c4dc7a81d340e33e0ddb8ce8cf0f94aec4 v7-2-025
++b62965091b8d258aaa26871ccf80ff9b4037168e v7-1-254
++b63792dadc23ed5ff4e0e9e8c7acc24d9c61e779 v7-1-120
++b63fe7400eb30f9c7b98199a21ed0bdc583aef62 v7-1-135
++b6627f01c67dd0bcdc2f24d56d0a9342cb5dacda v7-0-151
++b6632d553df3c8d25e419d62cbbbd1d8aa5d2489 v7-0182
++b686fb4898d1fd8579e5bf61f36c2a08fee85a20 v7-1-025
++b6ffc2045211c67d42d806af38dae64626aba605 v7-2b-026
++b76637e5ace1cd75c1894c44e132ea1e4fdc1a9f v7-1-289
++b77f790d53f6b57604b1ad5113da4ab08b4ca918 v7-0-236
++b7c22e34316251f32fa1034d11a3eba1829c2b92 v7-2-043
++b7c89e3e19f703c0ebccecc10ee044367a65ea20 v7-2a-011
++b803b277688037509ad1b6d30466721396d8967f v7-3-062
++b8744d1982d1fe26fc41d62b6e84fd315dd6c941 v7-2-407
++b88f0420148e5e65c2f71f47ed2324fd83b3bd2b v7-2-155
++b8ab4ba6b11018e468362bbadf077654f9cb4be3 v7-2-304
++b8c880d61acb8d5e08ae0cb558ece76d96d12341 v7-0-185
++b8ebbfa519b990d6b892dcf943576761e714c2c3 v7-1-050
++b8ed23ef6ff15604ead321f758ecc624a9d35c2c v7-0-042
++b9202c4cf847ac1898b4af225494197671111785 v7-2-124
++b93a3fc3897b3e16e96b80e35dbd72aabf9cf37d v7-3-078
++b9897545378516c8afe3140b7172d838f33e5b29 v7-2b-009
++b99303b1483f26763f0c4b6c9d244763ad32d476 v7-2-309
++b9975513fe244047a60acc818edd8de94935cc28 v7-0169
++ba2ac6b5bfb9679edffd08edef9cd0db1237ea12 v7-2-259
++ba32a005373a78e0b07972880704e2183f578f86 v7-0-136
++ba51f75bd4b514d5c4d48e57c6018c955434b936 v7-0221
++ba9375e24d4937d863ab87d28e6b7c1ed42b3960 v7-0-050
++baa5f81197c865fd8847f6af95fb1d48cea6aa65 v7-3-043
++babbc735b80efd1ef23f35dcc77c5f5cc9e68fea start
++bac7c3fce15019af25562f5c19b099c55487a6e7 v7-1-133
++bacdeee78827acbae22a7626a93318ee1919c883 v7-1-014
++bae8347a9ae1131d95a7af1d751fa47df5d3baec v7-2a-015
++bb3661a2eccc165bd5d2a87a8d4696f89431a459 v7-3-116
++bb4797166e4c610516eaa16865682ab14411ecb5 v7-2-064
++bb7a0b90100aae1f77748f6f38aec95520825c3e v7-1-023
++bbf0ba46e51d5a4e58b872b840c5dc3e1ca44234 v7-2-116
++bc3f88ca060d25cad633a20548ca38cc529fa0ca v7-3-045
++bc68103ea3f6a13d26598bfc1958a57eae377a92 v7-0-040
++bc7ec0f1f7f35c3b58b3e32bd2ba1b87501b17d9 v7-0170
++bc95c6c4bac13d4a0f8a4bd6ec10f495d3fa5eea v7-0191
++bca50c9e1374c176a63f9baf0ed7fcb34ea16967 v7-1-147
++bce687811199a7866c7728b09f00406ac1294745 v7-2-287
++bce7c73fd56da29730fff999a1fa4b0edea3285c v7-1-157
++bd7e26d05a3fc8e010566ad8f8aea9c31ddf55c8 v7-0-034
++bd94e22dd3db36f07fd31b2e282f25ccc7335f58 v7-1-163
++bdbaeab157e6f88d82056df6b927acb5b342ae01 v7-1-272
++bdbdec22a225553f5d78db019e13cdfe92b9cb5b v7-0161
++bdcfe793d49fa832470953794583b4bb74ab9fb6 v7-1-104
++bddda5d8caa1c6bf174c5e202d3b08a51dbd54a7 v7-2-210
++bde3b38593f9d07da76cdf37ea574fc9d80aa43e v7-0-052
++bdfbf8ef447a4fabef09ee9d28eedcf0e6b99e57 v7-1-249
++be0f21f63d2c9651429a6ec9e97b8e6e9d0d102a v7-0091
++be1d64f82db26bf7892605332aea6126d6343e47 v7-2-325
++be8e2719caa6c7194ce4713206da6f1f8db694ca v7-0-138
++be9fbf8b0cdb6a42c07a8be94e9fba866cff00c8 v7-0-146
++bec979a53f47ff6866d390eff6c4ddd4d5ce8a8b v7-2-307
++bf5ba8a0cdee590c0841391f9a8b65c456ed06bb v7-0129
++bf63a31b77017d78197bc0155c0ec59e31559df3 v7-0-210
++bf7803d0f5b9d0a9cb16636b9490d723623c57e8 v7-0-019
++bf9579ab26e59cda4bdebcd934c43b6fbded60ce v7-3-019
++bfade53bcafb7b6d297f23ce3ba9e6a72dcb7949 v7-3-087
++bfd69bfb41491b83ac7a4b948c649eaec251c54d v7-3-046
++bfd8935d62009b625c37dc373404b67d0019d7f1 v7-0087
++bffbbb566d6b1004cfe26df89e102c465bed4312 v7-0-192
++c00efaa0af249c086557487d172edd6a1cfc0706 v7-3-053
++c050d5bbe79b6a0bd83fb5dc0c13c350492c7c4a v7-2-063
++c06c658691e20f22ae95d4cf117057c7d0736308 v7-0-087
++c0bb3c1dd44695b4eda074afd1a7394d2b7e4552 v7-1-132
++c11845a465ae63ea7f9942484988dd4e441c891f v7-2-370
++c12f39141bbc7c031b51352896a78324ad27398c v7-0053
++c1709e3f8536100dc87defb9f788f895b4e73578 v7-2-140
++c17a42da3920c34a75c17fe8696d2f04bf683f24 v7-2-428
++c17ba3fb433e7cddfdbf2244b777550970493b0a v7-1-106
++c19f6b8d0393dd28a2673da19e8acef59d371f65 v7-1-304
++c1b61096e3d0e4383db1ef01a5dc2f3ebd5eb0fc v7-0-074
++c1f67ce5740adaa7e1e164d706f204252711d5df v7-2-382
++c21975c58b4497d08a2fa30601723537ab1f03ec v7-0123
++c22ded254d0591df640c3ee0ea3dd0a490fa2396 v7-2-071
++c2cae213194d26214a9132c1ec7cddbdafd18175 v7-0e07
++c3242ae88ef1d4cb6eea51fdf96670cae48fc64a v7-2-081
++c3242ae88ef1d4cb6eea51fdf96670cae48fc64a v7-2-082
++c37ed44f014fdcb211ba3decf81d1f3ec94a210b v7-0-153
++c38cdd201cec8e9a774b7256a5eadf2d7194aa0e v7-1-059
++c3b5d3fe94046702944964c32eea7522ecf92c4c v7-3-020
++c3ba2dcc4cf4b96ddd1e3df9beacd1e11abe7868 v7-0-214
++c3bd0a84e11ad1caf53402dbebc39ea8b01fc832 v7-0-167
++c3e225bc213a1a91a278fdcb3c5fc003ae886f02 v7-2a-009
++c3f63ed316b621743f44a5ab6b9a5438b88feded v7-0227
++c44058ba78bc108e98fc15a14756716c3d3241fb v7-1-141
++c474f5691c0c6461414e65601a97e817e976099a v7-2-164
++c4d200412ae9b66732f2c9be98273802a0acdb95 v7-0121
++c4d5f3d8ad71c4d30397ca0101a89925f1666df8 v7-2-099
++c50c82c5e230a9ef1cb570be0a57d3dc9e295993 v7-0069
++c50ed526966abc52d825a36d5114bebc21f850b2 v7-0-220
++c51a4f9936751df0e9bbdc454727bced532da3c5 v7-2-255
++c524f99c79251a7b614776a5d064ba40c8d4d5cc v7-0022
++c544a3507e839f3ad4db6e1d7dd7474ed0167b96 v7-1-066
++c5871806d7e6c121c80030dde025a96c0ddec820 v7-0-057
++c58b9479e304ff055b0404d9d73a51da4e9bf7e5 v7-2-315
++c5a806b29372c033c3b616083c86159a8719635c v7-2-306
++c5b05f6de1adf8bf800da0bcdfa04a262e0e8329 v7-0047
++c5cafb21c45b5e1e16c006056dd5b8f5ad91145d v7-0-096
++c5d5e0f3403f65e77307d1bcb5d71acc73cbc90a v7-0-120
++c5e1b4b9016ff900a005057fd1a055c70b812414 v7-2-047
++c60d231453cfd59c8b313a894027cecc0a4315ec v7-2-424
++c6296b0ad9eae4122e31dd3b4f363e073f388a38 v7-0151
++c649cc22da98e2eee72352917030fc6068883317 v7-1-060
++c669f3280f595ba6133a94d8ceb3ed3ef6c2a4ad v7-1-324
++c6b06a4a8f928b1868a3d48d95293730262a041e v7-2b-023
++c6fe65c000d27b9ddb0cbdffe43cf188b7a51f2e v7-3-037
++c7537662746d8bae8bcdf8502a23a573a54d3855 v7-2-186
++c7654c4db8fd57c397bdfd3b3142632a4e761f32 v7-1-153
++c773cb978acfd216004c871e883d2b31cd4cc0bf v7-0116
++c78d973dce9e0456b96725f55b853ecbe4ebda96 v7-0211
++c7905d03c72e74540d91b1ebf3fc9cfffc2ba699 v7-1-273
++c7c53db66b5521d2deed3b889fbfb13030868942 v7-2b-019
++c82bb7ade452d18a121a6b0b8ff654dfad30532a v7-1-137
++c845dcf7fafa91d8cb370f690c16748758b20332 v7-1-110
++c8568bc2db390972c94374a031bbd195c4403ffd v7-1-311
++c87ce0b2ee2a14d3daf3902bdd4163a002ec7a22 v7-1-190
++c87f38b71d27d9e420e5947d4e99eba9e3eb2e19 v7-1-070
++c89903e16772bebee28ec935f7459c8c83bdf05e v7-1-223
++c8b6b7e1005daebc2d72c578d70b455f42b5bd16 v7-0150
++c8b87fa14d277702b7ca6b9ba18470c3d64ad83f v7-2-179
++c8c47cc9dab1eb6976b9c214c58e65beb3a45e97 v7-2b-025
++c8cae82dee305d003f809d91025ed21582785597 v7-0-061
++c8f343a465a271cec752fce3efdf5fa8476d3c96 v7-2-180
++c94bbf85eb160aa9eabe33b13b267c1446019eaa v7-0-213
++c9b7b1e711d194070184c9c198fbe8126701d1ee v7-0-235
++c9ddc2338f41c43a30044dbdca1775b919f80707 v7-0-058
++ca4883686f934bb338dfe3a2fd7d6d3995c3e0e2 v7-0-088
++ca501ab2fdb3a4477a6b8e469c1a4d8f1859d92a v7-1-170
++ca5b52e99385825f0083c4b122ebfb50c2653039 v7-1-255
++ca82de29ac1903bb1295c04da5624cf295b6447c v7-0g01
++caa550fe445725dea9531b9fe9f0d0f88961baf7 v7-0-191
++cab25717c6a69a7d9ebd010153fd9be9529fb49a v7-1b-002
++cb49fa8c71963b7b69529dfc2abd00b791119fd6 v7-0-126
++cb6487d683f2260fc0b47b5e95f78a297360b1fa v7-1-216
++cb7043482eca744ad9ba1eb11f08cc2906b6bd3c v7-0-149
++cb94c42c0e1a1e00f643be8a96939e42c3afff81 v7-2-445
++cba9c4003cb554f909fdb6426b8870bef24b3edf v7-2-085
++cbc9c335ddb17f9b0e9d281e1c5d97a20ed4fd94 v7-0-119
++cbe70f2e756d80015f6f0057e13a882ee7567276 v7-1-259
++cc03a79fdbb9315956fc22887483a15b414278ea v7-0-197
++cc4fe241baa3596ae9cd27ce65ad25077bfb2e71 v7-1-236
++ccbd8177e1f439fc23ef56be942ab0253d5dcc26 v7-2-132
++ccc9eda1cfcf918fbd1933bca9db01e246d5ef12 v7-2-138
++cd3689efd90a5934dcf2e4e232d97939737414c3 v7-0173
++cd3f52531f6c8f16e89e97f335f974fa25f4b498 v7-3-124
++cd6175cc27d9c8b4d4f4dadc7c38f6c490f3fa62 v7-1-235
++cd7eb2a18060734504ff974065d6a7adfc903b34 v7-1-041
++cd9471bd8e9eb1d2c59d00a7d18dc07dd97fcea6 v7-0-047
++cda8f3aceb85c72c94498120fa171939b83cc8a3 v7-2-120
++cdd82acd75b449784a574058387449096667e56f v7-1-125
++cdf37c8f46163497e0d7fabf9655be37b692fd1a v7-2-008
++cdfc3897c8950aa84c84c1a05158afd32ba71d06 v7-2-222
++ce2181d14aa08a59250267dbec36bba362eeb908 v7-0139
++ce6bc4bf2b87f2303bf47fe64ebdd470711973d0 v7-2-244
++ceaf71b15d813665b3b02036a619bc967db90d8f v7-1-177
++cec8b867838bc2a5b5f5bb0146010060639fea90 v7-0-114
++cf080795d202ac2ef02d282f4aec111b2ec126b7 v7-2-135
++cf0979c30cafc4fbe239ebb9de3c427a265207a3 v7-2-144
++cf4d73a8924e715fb5fc7db94af9a7e67d7643dc v7-0-095
++cf83dacfa25fb1fd8d4929ff2abe871c72ad94a8 v7-0105
++cf8f86128f4c428af72c116cc53d92ad7c1e40e9 v7-2-435
++cfcc1421f5e431d3984c3e9ef3f360ceafaef76f v7-2-146
++cfccbe492612c69ee77d6cca4adb690794e5feac v7-2-126
++d065616e083680035f38a54409e857ebc2202db3 v7-1-146
++d06a461924a3f92575d81c2d1c0c3a74cd0a2929 v7-2-322
++d0cf8c843186301d546870c2661cfa3e8526b3e4 v7-1-100
++d166fe2bfe7438b1539cdedf1810dc91a1cae01e v7-2a-005
++d20d37ef86c8844da2c9c45b2d9fc8b6a2dc3f78 v7-3-129
++d225695aa7945c27e1eed207e3e683b16824ea87 v7-2-282
++d23a400b718419e039eaf4f8ce23517144d41faa v7-2-019
++d2612392202f9b87c122b7233b0bbc67c9edc004 v7-1-004
++d2796c60ca6f11e05cbe080114a3cfc6006488c7 v7-0032
++d2a4f08396fe8c01ebca988db5eb95b7c3f9db8b v7-0f05
++d3571ca62cd6a9138b0aaa4673b09dec78e540e1 v7-2-323
++d38420e2fafe99d58b915213b73f8d1b8c7848d5 v7-1a
++d3bbb5dd3913b6425ffebd18b232fcc2d1907046 v7-0f02
++d3cff90680f3f985c21e34e03607a5808ed4dcbe v7-0-144
++d433f43849ba1dd0006dbc4d794cda3502fc24af v7-2-332
++d4b1aca2e3a97415460ba21ec81eba2218cc0be1 v7-1-128
++d4bc24e6a28144ebb16f143efb72ffdd98bbe0fc v7-0-156
++d4ea645c77489da3d5f0f0f48a14bb63793e1505 v7-0041
++d4f3db33d782da9d33b2715fbd14f5acac280ce0 v7-0037
++d51bf80e8fc9b1048c93bd26e308af7c250ef629 v7-1-045
++d5681bd2661b3e75b506a7d6ffe8bd053e04608b v7-3-013
++d5867fd6b2b72d8095795f4db9aea88035e49e5c v7-2-330
++d5892839ed90bb1a8f9f1b3ce88bcc205e7617cc v7-0156
++d5ec1b42ceb06062f03d828acca852a4ccfbc7a4 v7-0111
++d607b48414b79e7cacccb66391683b23cf1b2cbb v7-0-099
++d608343d25e6ce4b1e6435720c48762501b0fc7e v7-2-197
++d66394147eea6cd5b304fd2b78e5dde46fbb1b02 v7-2-136
++d6a69271cb9a787af6b3a05b01275c9694a144c0 v7-0194
++d6d6ca94371317962df5d92c9b879f7602d3e234 v7-0098
++d6f0d3db1c641e451f9cb0d0697f1b18939d6cf7 v7-2-087
++d75027183cf4b44b2a92333e57b9bc3fe2b2f5dd v7-0-230
++d763e7d7e938d8dd3887b7279b44e3a857285d38 v7-0-189
++d766b2ba2fc6d5b6211cd10d90236dfa8479d617 v7-2b-002
++d7860ee7eb7ef5c27d45c4569107376d3cbdbdef v7-0207
++d7ce3adb8dda9d7acf8aef39cda0b936ce3f3d15 v7-2-362
++d7e33248b9c80fb5c1af5880d6c6a4eb507de990 v7-0206
++d87865573d809129e6d25071cffe8ab451ea2db2 v7-0-041
++d88bdbabfbc6539ce6cb149a3e8b025740a7f351 v7-2-109
++d8983769c9ddbffc13ab427a5e44693070d7788a v7-2-361
++d8af28dbfb80aa6c6248000b011bc9df6f8f337a v7-0-152
++d8b9701a3b7bb58e3f7f2c72145a0dfa33501f31 v7-2-193
++d8dbf7d55c5e9ac3e345eb1b2b86986be3582fdd v7-0-018
++d8e7b6762aaaa48f6bb72b1c51d535119e79c379 v7-2-096
++d8f905020502b0f35d810f27b4d5d28689bb7764 v7-0b
++d9030055c432b20797f883c956f094416e00c622 v7-0033
++d92358c7d6216ff56093067384eb7d96ae47696d v7-2-238
++d92ac5a199fe88f1630678f81e0b47d5f3f1a921 v7-2-196
++d92bab35a16720d2b4e3a2b836fd68df0ee00aca v7-2-234
++d94c322508140c4cc0d36364d994f475aa84f8d0 v7-3-075
++d95676480093879730aed5ba678e3e8305977a4e v7-0-067
++d97518d6b3257b4ab48aace82f9197bd099ff758 v7-0063
++d976f4da2a4d56ed9b59c61f6971ec0cb18c84db v7-1-264
++d982226b7aaaff40647eaa5ad05e01538e90065b v7-3-023
++d9cc61139d12c315d790d79890402ef957be00ff v7-0146
++da0991871b02a5ba7bce7d3c1180d01d50d7646e v7-1-017
++da1d62fe5379f77a2a165e40bf4bcad0466c60cb v7-1-063
++da9142bd190a5ee0e45536ae4c2913be5bdb02b6 v7-0149
++daa1e34570ff649af9d7b64a447cc6d2c0b60e38 v7-0-093
++dabcabce3f9d67ee2cd22246ea16769513982910 v7-2-419
++dac5006b4443f99681d2068d0af065bec10d7a99 v7-1-162
++dae4cd29a0b7d899201c2e6a10f0441e7173bcfd v7-2-347
++db3ca1048f7f800fec81696d29ff8a7a3027a64d v7-2-320
++db44f7b81373a02990aa6030b85024478b7d82bf v7-0f03
++db83098657947521e0e797662c135516a4a300ea v7-1-123
++dbd226be80b18c494f4438045d34b65530dcc198 v7-1-027
++dbef8434a2ea19482b3ba72b428c57dafaad29a4 v7-1-329
++dbf53ece2e23fd6e8652c531ce7976f54ae85635 v7-0029
++dc8197342755fda6ca4d6619dac228406867a7ce v7-0d04
++dc81a4fc63185c72c940e8ade45b5e1534523351 v7-2-143
++dc8a5699253b833ec796460f9ac877d02ab7b165 v7-2-406
++dc8ee74574f80c7eabc90ff7a3973f882993cab5 v7-2-444
++dc948c8dfd1550972011e38d59b9a8ade5a000c4 v7-1-019
++dd9db57ee7ce46bdc86cd787fb58907f20c0a973 v7-0118
++ddafd2ba3a863054041f2f71248f0ea91fc3b1d2 v7-0-117
++dde812fb22478c1fbd34d935ec466b2cd9869da4 v7-2-437
++ddfb6f3f3b2be6e5397db2601f392c45f4a05b84 v7-0-012
++de0e7ca61893d31a4a5ad8e129691650e31477c9 v7-2-427
++de8224965034eaf748c4205cc2a61e097b4aef90 v7-0-063
++decce137e7beaa2edbfb4783d1cac714c7d84d14 v7-0-098
++df6967461cef05aa96ff708863d380e9d15f3bb7 v7-1-065
++df6b12c84b2359415cd987c016f5de135c680100 v7-3-047
++df7ceb64b0c65cc5ea525f7df25ecdbba80b0208 v7-2-137
++dfcff6590aba6d93a69b414759b164c255fda08f v7-1-238
++dfd5dcc73daa3934ff1f47d6d53207de2f9034ed v7-3-067
++dfdaac31aa5df021b444bc2ba64307709d863c63 v7-2-230
++dfdaac31aa5df021b444bc2ba64307709d863c63 v7-2-232
++e038754d419a3ab5ec25d014513bf8773cb9459c v7-2-408
++e03cb9499b83f972c2bdef503b1faa15481da81e v7-2-015
++e06e177de52ae555685a6126213dff168048fcc6 v7-1-305
++e0e0d1ae601197ad22eaad3b721407a2d0cd6294 v7-2-318
++e1070b3b03e9b1490157dce8db81b026460aea35 v7-0-081
++e10d3c07344929c21377722bd3c66d3c54ef582e v7-2-423
++e12f574898a9b21e39af38cd57e50ca87ccdea81 v7-2-272
++e1336150cfcf7e64f66563629accb1cc84fea036 v7-1-089
++e14d0a530351fe26450893977197e81e9e9ae5f2 v7-0-177
++e180933b876a74ded043348c0cff4fb209d4d92c v7-0219
++e19ecdb13f34ca1ccb3dd3c382a08423c385e847 v7-3-080
++e1c7d0ea5dacf4184cf49c3d05d6ce77d944a367 v7-2a-002
++e1d77e652cb7f9e84072f16b3ac6dcbb73a1fd81 v7-2a-018
++e1efa991c2b6992bf361cb432895749fc6b1109e v7-0-106
++e212d1a40ca9638a4b306013d54417dfcbe9d8ab v7-1-243
++e2680bc6a18024d68ce8100e21d4d307dd647aec v7-1-011
++e2d7622d70894e506f9c722bc8ce145521d098b7 v7-2-106
++e2f5c1597829256cfd784681163c232bf907f1c9 v7-1-092
++e319a4fe6e32e0297f1be2c1a8c763f7f7b26cd7 v7-2-378
++e351146e7974acd49f2e9aab749f31670b2c6044 v7-1-116
++e44523d45bf5e276817b7f1f8987f2a8ed3132b7 v7-3-125
++e44efb3af0d58fc58a392e58c604bee91bc52e2e v7-0-060
++e4fa26ce87694c7d810796d41d0f03981e500d1d v7-0187
++e5145ff9c9b0dd7b29154c2ffd220988737c99f7 v7-2-285
++e5602d92da8ccb4822917b2df3e6099344bb4ed4 v7-2-177
++e625dad74346d76132cbcf6ddf98b95d2c8fbfe5 v7-0-113
++e6372ac3ebe536aee65848e52e58fc817697b98e v7-3-063
++e641c7a27c470de82019d313a158a9894e0befc1 v7-1-181
++e649c78407e600ab28819574efd7d2d67f066171 v7-0202
++e65e50609469f1c5d98ab7396803fb697a78bc17 v7-2-219
++e68d8541494dc36b5778d9eda2814014201b0335 v7-0228
++e697bd3c3876c27addb414ae170d741aa1eb1917 v7-0075
++e6a8d55a1626baa2e38837b0e7a4a6bc65783623 v7-1-178
++e6aed39f12648124b0b4e23c669cab6ceda2ea1e v7-0-158
++e6bd96f2d7b81a8963c9c8dcfd9e2b3f08a9f0e4 v7-0-017
++e6d25347de2cc7f7632cb0cbe5adef45d9712aca v7-0-182
++e70aad5761b59933a1f69a8756457fdb3a9aad40 v7-0-069
++e70c0d863e0cb2b26f16acd17ead7ed267faef53 v7-1-022
++e72e30c69d582a55cf3c4836aa274a006a457fe3 v7-1-261
++e73f2978bd4061868337a25ff09c3c84b54dd2da v7-0f04
++e753954c86e2ce32648d9b12c3c135c22748f75f v7-2-237
++e7633eb32cfd9cd631a73f4d412272506261b427 v7-2-098
++e76a088056dd38e02a99daec0741aad6f32a24f8 v7-0-242
++e77e3c11f5076d6eae8a67bd2f531f72d33eed7e v7-2-331
++e7904492cb75b7a69964c331945b261cd4232a7f v7-0071
++e7f6ca5594cf9c6a3902458e0635bec7a7c40d87 v7-2-149
++e8450dbf6f031f2727798a7d955e83dda7ba0288 v7-1-086
++e856f9cc2aee46628ecb83351489d4f41d66c6c6 v7-3-064
++e88950f0d4f699846875e45dd3887cbdf92bc3b9 v7-0-084
++e905716f6a3aaba3c0ba1d18093d4f4f09550524 v7-0-090
++e943e5502fc9cc439294de385dc564226b7311a1 v7-0050
++e9624acb93a750d835c361c08bf3e78f587f6510 v7-2-028
++e965cf54d887eb9bc20b6668d83541992cc4e8a7 v7-2-157
++e97a97d6a0eb98b21bd068283f192e0a2f2b1a89 v7-2a-004
++e980e93d2ac2c7838acfd45fbf2de06939c929bf v7-1-186
++e9c9f37be3066d64d7d87d1b314b2913d0d751f6 v7-2-416
++e9d018b58830d50906a81e1b1ddbb3e2bdd9126a v7-2-107
++e9ddb2181f063b67b3075844b4aa7359db5750be v7-0155
++e9e3355861ba8785dba619e2358a239a9443a580 v7-2-342
++ea15087a42cd21520e628faa3c53385246c04743 v7-0-085
++ea1a2950ed16f441f66ba319615d47f1ac67402c v7-1-191
++ea399ac2c1b963b068beed88bfaff7620d345333 v7-3-138
++ea9f418ed072f45fc1cb04e455379e3db1c0f182 v7-1-215
++eac2556d46208785a173d44b4efff339a7e2fab8 v7-2-215
++eaecfa88c2469471804768932f823f5b264dd0b9 v7-2-148
++eb0504d00480ca6a7758bfa35d64a09b3d389fca v7-1-250
++eb1ce51c1cb0dc7825570f7cf30b0e2c3e9749c1 v7-2-129
++eb27e3e2df706466ccf9bd00e407d2d3419a81e7 v7-2-265
++eb4ee2010aae8f4361054eb367a7b13dcfd738c2 v7-0-107
++eb531146be0ec6cce1187568cc841718df44a296 v7-0114
++eb57516376d4b43889fe43594048f183af15c31e v7-1-032
++eb6fc577c96c2b5e322ca3760fa4e9c043ba5a8c v7-2a-008
++eb800128bd894e9b2c661627d2a302344162987c v7-0-092
++eb9cbad50fa34fad2b422758d6d814059aa89f94 v7-1-313
++ebe059f69b9e46ada2c6e02b3979e31d1b11c906 v7-1-296
++ec5ed41eea2f1d83df5a2507ab2f469fadbbfbfa v7-2b-001
++ec7a570696ac0e50147e2419d8b269ccfb75f25e v7-0-199
++ecc637a844592d48cec38bd795a17ecf6e0253ec v7-1-114
++ecee28dd16d25024fe584cfb8cd0923f1184398f v7-0213
++ed44c1c436d3d61a94062c7a781b77dabeb8ebbe v7-0-100
++ed7fefbef738386c39248b501556bdea80d0f8b4 v7-1-276
++edb3bc186e97a3392b3aac634526a4f4f84f4011 v7-0-020
++ee41e031dfe14ebe50c289158213f05eca869bb1 v7-1-179
++ee50cd1a303271c6be6cf6121f50c0abb8772dbb v7-3-088
++ee9d2d24ea9bd0a7d500f1c37cbea802d8d1d88c v7-1-231
++eef96cfdbbbebe5aa61b420d3eea31c3c5b6d719 v7-1-314
++ef0fe6201b843f699b3ed7483e52eb3348ae5b11 v7-0-006
++ef2890033e88391e92eba7d1ade8a43e9e200abc v7-2-337
++ef3a3ec8940cb0c55d35d2e5fe924a09d6815f2c v7-3-070
++ef6b11bee7d06a843474888d0bbd67d14dd2065d v7-0-181
++ef7fdb3c6927725abb07731a46ab78404ad4c7e8 v7-3-105
++ef886129f0c0be912c7b6c21e695bd9980d31210 v7-2-088
++efd0ce477ae789445312ebb08a0f78b835dd6f5b v7-0-194
++f012c4ed8c38499ed2901d139f4409e2edfe51da v7-0132
++f016c3708ae32436ab545762a1bfb8ebd31af975 v7-3-106
++f018c759e4ed5e1a851c1353c118883efab6a155 v7-2-274
++f04e890524be4a82ade7526f62a967390d3f1cf1 v7-0153
++f08390485cd365abce88ade8987e56bd267cf3e4 v7-0210
++f099adbff8871627d897979b432d74ad1623369e v7-0-031
++f0b3b9ac2147350b1d1fd762cfda0b3073b0bca3 v7-1-161
++f0c598082dff6f0332c9af602b5b4996bce01ff7 v7-2-104
++f0cfff4dcc2f7cad78ce86aae0f4cbd3371ce46d v7-1-283
++f0d6b2bb1093eb12925cea635cd58de0594c422a v7-1-245
++f10fe14748e260eb0d8bfe375cadbbaa0e5ceeca v7-2-055
++f12d38ee49de595d11efb50674bccfe0417c7063 v7-1-006
++f138491673309c018ffede08cd4858c3bf318dba v7-2-169
++f13a0227fb8844e591b6526e4393c8f93dadda29 v7-2-305
++f14cbd913415ac4d6a9968dce20a20291f8c0d05 v7-0097
++f14f7aab518707c29a8ffb75a4e8217de58dda91 v7-1-212
++f1d1214744679d401e17e9ba97ecbb6255696ed0 v7-1-287
++f1d2a58883b96144abcd5b44dbdd190a67b3eb79 v7-0024
++f1d46f94824128251d1212cfaef0b1bfea4dc71b v7-0163
++f234c87ac7e9807004cdc559cf68aa5e04850f5e v7-2-248
++f26d0c74a329cceeed80a7985f5efb5662064283 v7-1-039
++f2927225367a3ac3fbe86d6d03ebb7a526072ed9 v7-3-039
++f299f0bf32d76986d5596d279bc0733cebe1942b v7-0-211
++f2d46e4a859d0f12f12fbf332c40a717dd07df14 v7-0068
++f30c8ac7741c82503bf897fcebc68f199e5b0998 v7-0225
++f339305875fa7cd21cb4d42619f5b9789a027eb2 v7-2-229
++f3669fbc9a31512a0b81fe7f647b935243a76520 v7-0-109
++f38283ce871c19cb82b1c4d364fbc3a242c057bd v7-3-131
++f38b7359dafd1f168a15698412d266c17a16520e v7-2-102
++f398e0cc5b7a032f327aa2f33b71c3bb6a22d46b v7-2-349
++f3abb6aec8c83ada21d56b8be4ffc6be55ce39ba v7-1-048
++f3d3545d6bf6405662476b40e019044b880d8f81 v7-2-058
++f3d7fa7dcf634b669a7d7859bcc39796300346e0 v7-1-035
++f40f1a8520ffaa57ae73a720c179780025aacd64 v7-0c01
++f41b6108e46b7cb3794b2a3680f2ce91b402fb21 v7-2a-016
++f41fa84cd738b945ab34271a92f44e0d1445dda2 v7-0g03
++f455396f3c3fb524ff1082cfe2cd7731f67877b0 v7-0043
++f49d72bf9c5c425dfb8bb94c6bac975716e3023c v7-0-124
++f4a775df722b13250c2b9e6f1154c31ffd9b211f v7-0145
++f4c7b5da017adf78554a240587384823e58ba80c v7-1-012
++f4f8014d516e9b9620311aa2bb7a5a2d5749f451 v7-2c-000
++f529edb9bab3de35ca7451e4d45cc90e9f7aaf81 v7-0025
++f54dab7cebabe6aa275dd6a379b42a15c365af0a v7-2-280
++f55897d6921d622ac2649e4c94ddb38d121c2832 v7-0026
++f5bd6753cdc40733c903090cef1cff033942dcf7 v7-2-440
++f607f15ab091b6a51b0546db6a6d42adfa599c3d v7-0143
++f628d19361d9812a1266baec9f76d60c798f92d5 v7-0-195
++f637471a3607a43bab09a2b61913201a5100e636 v7-2-192
++f66abfa335bb76d20f2a375f148fb7705bfde287 v7-0-170
++f6c72dd1962a46aec26c7caac6f1c3789321e91f v7-0-030
++f713fc55bf7b9a5cbb9ae3628547a78f4e44bcc9 v7-0109
++f765f9c139de3555cd181bd4fa8de50d4aaf41c8 v7-2-158
++f798c90439866d3d29eb0fa460d51e4de26f27d8 v7-2-224
++f79bb032002565143e3392cca0540216e7f93e28 v7-1-241
++f815aad6c05549bfa36f193dc57b1f03d646bb79 v7-2-343
++f84061aa57e4498f15155a4a30da40ea07be84e0 v7-2-030
++f85fe1a05c2ae4c03994c9ea2eb87da590bb3214 v7-3-133
++f88008797313e07112b8c4e549dc2217747fed98 v7-0-101
++f892bda292a89e7592ccee5fc0e296659066d7c5 v7-0198
++f896a7dfd47d15f11ac663f132fa2c5aba91c829 v7-3-052
++f8f35d8208e6c242026dcedd8300b82f415fc59b v7-0-179
++f921368d43c3f0b9b32f52f881e7e58242489bb4 v7-3-093
++f927ca2cedb40441abcd9cf5e18cbde2863761b4 v7-0-226
++f92bb184582321910573561c941167ca46b9850f v7-0101
++f9366d458bd09b73aa46cb202c7c6329e608bf0e v7-0-217
++f959cda54600f8d014cf3a3c69285c598985d828 v7-0-027
++f987220caa57c4d13b64fcfd24cb4bc6a156bb00 v7-3-094
++f9bd6784f393aa771d497611b75a8623c20a8269 v7-3-009
++f9c55e12835e88f072c46b20ac9dac25a46ca839 v7-2-218
++f9eaf0a9872df3ef8610d3fae404231447954d5e v7-0157
++f9f6e35c9f00ee6ee518069ff2bf0f93b635b8af v7-2-005
++fa07532e69c6eec9a6860ef1362f1d8187b8244a v7-1-193
++fa5dee44df3fd23f96090d225dc11dbc4de7bf20 v7-3-034
++fa7e62dd58d779149c96570bc8943f1a1b035e3b v7-2-364
++fa9ee618000f51e5da6c951f24c9bab78f2bb428 v7-0-110
++fae6fb779a6be78f2609dac4fddb8da508735dc9 v7-3-048
++faf4b09c396e8572e84eab84eeb60ea0f3785529 v7-3-097
++fb1222c880fc037f9b76580423c5a57c74acba28 v7-2-344
++fb60c9f35517660092b161abc1e4aa17a7d0ac05 v7-3-040
++fbecb12e37f5b1523aa8e6ecc07ea6c07ed65270 v7-2-131
++fc0c566b91075643f259863d171bb253703698bf v7-0-064
++fc2ee817dc9861774c31bbe768cddcaca4690e4e v7-1-328
++fc42d9cc7ad054a21ac8bab2584732ebb191e5a6 v7-1-258
++fc89a4f98a8b2e51dcdd380a7eede9dbc5cd1282 v7-2-184
++fc8bf5d4051a1c13085db00c902092215ac9852b v7-2b-017
++fcb916bed51a5ae096a9f5f5f697a909b2062040 v7-3-055
++fcea35e2a41fdc928cb92784a4405b4fd220f560 v7-3-112
++fcf44bf1218f63d94e1807c05f470a4eb87e61a3 v7-2-209
++fd1b3406fd1cbe1e7250c95f7b30604d7e46b2d1 v7-0d02
++fd24e02210c9c05b4035ebc717f25ad64d20470a v7-2-276
++fd3346e3ccc02a11f0c2fa9c2c7351b3cead3941 v7-3-082
++fd68db1a72b5f05cc5e586ffe89a10ec6930005d v7-1-199
++fd8864aeb52aa72333573d62f0a9913b0d3e8c8d v7-2-373
++fddea6c03deefda18c971466e0688d196a62fd6c v7-2b-004
++fde086181841aa124af8a38b5c0bba132de3ea94 v7-3-002
++fe26299d6f7015c324bef3829e9ecdf7d08526df v7-2-239
++fe3ec5ea62f76a623c95a2a4bcc0d396c83488bf v7-1-303
++fe4ebbec775a55ba5d9bec6070d8d87dc28138f9 v7-2b-014
++fe52f9888eaaafda72e6f37610327206383ff6a6 v7-2-034
++fe7db192c7cc7ef3d8cdc6bbd8680833338fd7fe v7-1-299
++fea3207b800d97b802892d8edabd1d688817249a v7-3-096
++feb9b421585385b226b4adb98e10f33972068846 v7-2-042
++febddd8d11b0f8f48e3d3297628fcbfd9f427b19 v7-2-112
++fef4bd7afb263aa411f12ff13dd1d12c88ad992e v7-2-438
++ff3a304b4ac2f672e8cc3c60795f0c79c5b191b1 v7-3-066
++ff5a4a71a761f859af81821d340ac609d9309083 v7-2-156
++ff77f541d69df4e538f7db4879eb194378c04458 v7-1-252
++ff9ecf14efe3e2373f2b28fc3e32db4fe19e5ee1 v7-2-203
++ffa17de19445569ea573550eef332323d83e70bd v7-0-016
++fff7028d50c8a44a6285ab23b451d975764b8bd5 v7-2-296
++62e8d93241cd15962f895da4788f21b514238b14 v7-3-142
++632f43801ddb568f872599499fdcfd9522f8c13f v7-3-143
++322a5c8d392bd47ceebd24cd21dacf70409fcc91 v7-3-144
++329a9676040c3182f78e2014322125f8839b5cb6 v7-3-145
++2bd574a2ef1c0ad487a0673a5867b09cd332d176 v7-3-146
++55fe8407514f5387ad872a338d77f64a2ad4b5f5 v7-3-147
++d67916de812ad684718c02e3ff93455ce577be81 v7-3-148
++7f937a04cdbafd7d179b200f75e988408f8caf3c v7-3-149
++6146c9859f6558d618e950fe702c11e41ca21105 v7-3-150
++f169a51f7eadf9a07ed95161143e6209387a4f34 v7-3-151
++0f7f66682a5563c76ab47e9976fd590d9423a013 v7-3-152
++d0cae598360945a425859bf8acf22923c29501f4 v7-3-153
++d72d709f0e18c309069e42d3d7865d68db9e89d7 v7-3-154
++5747cd65d62b613d5060254849ed4bc1e1e5d714 v7-3-155
++7fb8cdb9cb25e1409abe45bba959f5f27608d713 v7-3-156
++9a98d8562637d4c90439125a14224a3403d8bee3 v7-3-157
++b5f774f159274af375455f32d628881c027417d1 v7-3-158
++415c55534d901aa4617bf584462faf0c7198e07e v7-3-159
++c5e47b752f07a95534bbfa83f031a58af67054cb v7-3-160
++25672ad7f377341ff1de9a0773d8cfcad1d37883 v7-3-161
++18ad854f5dcd0ba1700c73b03677dbc88b9844c3 v7-3-162
++e8f012b00187c5a957def85bb3c6f0430f20fed5 v7-3-163
++cdefcbb70e8cdc1f7185f1023d3a4660d30a074b v7-3-164
++e92a4b9b4484d1c07d930719ab1370fcaf94d3c5 v7-3-165
++5ddb68c2a845ad7941d1ae7533a81c12b106dffc v7-3-166
++0a0d7961b4fe83151b03d98ee904ea7038f64123 v7-3-167
++930b171ce3fc9dbca3f9da6bf883faa725593c67 v7-3-168
++5f45bacf31efef21f9b60543504d1832ded3e098 v7-3-169
++64c3402df964791a7b8c925905423f83af83e930 v7-3-170
++1bd8af13fb434e4c99bb756052556f4d56cde200 v7-3-171
++ee48b3da9d53a487f3636df34cace6400d13f32c v7-3-172
++133d089f247eb7156a6e8c49e0526f41cc082c3c v7-3-173
++820f12659c50890dbda80e7280086ae1176d1378 v7-3-174
++537e0102c0f9cc2c0656c298ed1534ef30176eb8 v7-3-175
++94f42ae4e4e66483fb6cc7305c61820b004c6182 v7-3-176
++66f2d62271fe77d4acdda5808bd0d3a45be3149c v7-3-177
++ac639ca9f58f7c71551c19090473395d81a021b6 v7-3-178
++11e62fb6f8154537f92be5f278c31e737247f781 v7-3-179
++ed47d18b39c6a672ad4f0caa2f2c3ee897e784a7 v7-3-180
++5381eb5b1eb9c39797c435ad904bfcb71f1efb01 v7-3-181
++21346361ce6c7e9afca2e475ceb62f6244197919 v7-3-182
++e4403440e192d082af7dc8fe3e1a12d24f0e259c v7-3-183
++b941cc96926a26b62d59f759a021ddb5b51823ed v7-3-184
++9c8dffc62a41a143230f76376f9a3abf46ff3536 v7-3-185
++3d1a3aa0240c7a9acdf3feb77b664798e3703463 v7-3-186
++8bd38abda3149cce7043da86e6093dbebecf63df v7-3-187
++f2e1c3a90a3bda6ce8977187b365745efd4e5c35 v7-3-188
++71e1da07e1414740d1d0eed47a346cb3292a9e2e v7-3-189
++30b7cde2194064040cb7d7e6485a5712b2fc9b40 v7-3-190
++107b03fdf1ad831e2697c22a04bd3eeaca08c291 v7-3-191
++8470ac4679c17b69aefb06989c6e8a267761988a v7-3-192
++e1c5f69de95b99112fae28c23ce6427ca251e50f v7-3-193
++664c1adcb909aca654c4fe9200364cc741068803 v7-3-194
++8dbea5adc937ecddf8ca336856cd487e1b118b1a v7-3-195
++d641f141f9376b3ecf2146e5d68c38bf0227c970 v7-3-196
++45c536fe48db330c4ee8f1056befe702d9d19cfe v7-3-197
++b0190e93e601f9061a797689a1eb95a86805f769 v7-3-198
++c76efe33a3c1db5767cfa4f4bb433466cba6e351 v7-3-199
++41b17dd070295783af37698b1229a7052ab0549c v7-3-200
++78859ef2982bbc75dcfbc551e3d8a0ec5c9126eb v7-3-201
++f80e67bd627114cf7f16098ec4ed7d878816a46b v7-3-202
++ce1dce2af2a34aec196b7fbe29cf8c653b6ec6de v7-3-203
++e6ce47f06836721108394f0b921af076606cf715 v7-3-204
++8d8bd6307b1aa51fe2f592ce45d32abf0f6666d8 v7-3-205
++46544d3ae7ecb245a2646ae5005a3d67ca380f88 v7-3-206
++d1445b72ddb7d8b4a44393756b00d21c81212db1 v7-3-207
++205adc87d579512482c27f309c73d5fe8f612ff3 v7-3-208
++82cd9f1e8d6b21ef4d59f27b39f041d5cddec19d v7-3-209
++eeb1ac4f66d1d69c0c75f1028655a81890cf65c2 v7-3-210
++c7d942260772003e21039f9891775b479311b40e v7-3-211
++6bbdb9c7a425b0bd90d5823eba9475b850a409fd v7-3-212
++493897f8bf9057aa0fee4c18d269558d32053cc7 v7-3-213
++d84a564f28c9e64c3c2a1689af0e0851bc7e5027 v7-3-214
++b7523ef31e23f1a40cc3950b6ec75b39ad7f762d v7-3-215
++eb6c704607025d89a0a5d3fd2769a694ac47e0af v7-3-216
++15705b520c298738588a9a3b8d724c6d86d4cb8c v7-3-217
++cf89a1d3a0ddd21fe6b734fd72346468b808836f v7-3-218
++acda456c788ae1b0b45b8c67a93edcccde594819 v7-3-219
++fe9c7da98b5e2f92e4212e948e98f2d44bf06320 v7-3-220
++fd4224d9ee09801ed1ad9341a72c4683e291bb76 v7-3-221
++c3b4b1c89d8ed62a2624bf9404fc79f60223bd81 v7-3-222
++4e21fd3cfc3084db66f65aef132cb6c5e076cb96 v7-3-223
++69e0783ed0ef40f72ebeba41f8c98c9992f368c7 v7-3-224
++c249d9aa60f759286f54781829c1e3da8680c4a7 v7-3-225
++8477b2cc2b81603408b3fb1a84cd65afb2aadc65 v7-3-226
++b65a26a2aa095c739e90edb7b980154476529d35 v7-3-227
++c6df8554b39d009ed146baa48c0cfb351aa8379a v7-3-228
++07647a0545c9f0fad4e1e84062e0572a07d94659 v7-3-229
++70c8f54e7efbd7b59bbe6764d0fbfa1f1602273f v7-3-230
++455a4c85d04d04c732367f915d82c5b3c9a65b50 v7-3-231
++b67d3a44262a97e7b3ae212fcffb36926b5f53f4 v7-3-232
++69b90e43b728ec28939b0a536de32f818b7ee756 v7-3-233
++7653420fdc454be197d59e420a1672909fac7b82 v7-3-234
++441d364773dc53264b5f26042f8fc6f8b77c8044 v7-3-235
++c1733ef5b6e87dde521d0d85a1e5e62259854ac1 v7-3-236
++e3bb93df6c34da672244bce5695c1426da139614 v7-3-237
++f2c108f44f415c7cfe92862e791a01cc542ac378 v7-3-238
++0bef86c5c985218a9448fa16d935b913e67af8d5 v7-3-239
++bf283e37792b4b557a2b9081e4fdb0e10acb9655 v7-3-240
++0a650db0265381b540df8ca6bd716c4b2d47dfc9 v7-3-241
++3d96ddbeb3b0003de29b736f63b76675909f133c v7-3-242
++512ddd87f1a817749c8362bd043682a7bbd87014 v7-3-243
++be6b6509636242cd7e6fab9a4b8772e97fc9a0db v7-3-244
++52512eddb876f64399e98d12643233a87c9f2823 v7-3-245
++3f1a4ed36d1b520a1ad5aa6cbf50d68bc8b9c7a5 v7-3-246
++7fe2c092913e84e6717782da1f1a220069eebbe7 v7-3-247
++57a7998e0fa8854a7a8c3946df1d4c9b1ee220e5 v7-3-248
++9f71f5a526aff4f1e0eefe1068d9534aee427afa v7-3-249
++f909f4f0f38c71594266b3595d31ce04d4ebe3ec v7-3-250
++fe6ad3fd85322b394824a5c495a78061a747b074 v7-3-251
++0b4289bcf8364854dd5f94c42d0252504103e5b9 v7-3-252
++c21429d7768cd4b834a086dd47881d01bca74e8c v7-3-253
++1eb805225de7750c03af7b0f7ac2f5dd18d032be v7-3-254
++aa998de9f9592426c17396b60c5db9170a234024 v7-3-255
++c296c225736e4489706c62c95752a0c4788be1d3 v7-3-256
++1fad9c73d77a0030586704cccab1b1a7aba8b58b v7-3-257
++bdc3335bd72eea207b28fcf8af90a73c855c8847 v7-3-258
++59130cd78dfc73bd04f22d201b8f7c0772d98e79 v7-3-259
++cb4682b959098e486977eb4b5969c9eb07d2798e v7-3-260
++410d42e3d4da09284394456186143d595e9b2efc v7-3-261
++847733973bfdd716bfafc364a4102e76f88e7fe8 v7-3-262
++a56259157c935b4e78e9f5f4dfb1436e3461eefb v7-3-263
++aa40bddeea9a44c6c6b4ffa32c1ef373df437a16 v7-3-264
++eff686fb8de66a26367f5e6430d34729f1a0e336 v7-3-265
++25be7c9dda549e4cfa1eb57937dc2b38b3d1e997 v7-3-266
++ad404f2a4bfa5374e97f29335f41b7ef34cd6bfa v7-3-267
++ee17ee712512451a54046d6bcd3ddb9f70cb5cdf v7-3-268
++7f4f5ca70dbde4e31c2de494b982bfb9bd71ed75 v7-3-269
++b9182da84c7eeda221e5219ef4361cca201b3b41 v7-3-270
++32a52f06f33b9e2d4817330099b410c1fcf64db2 v7-3-271
++02f5abca10aee570d5a9cf00928ffaa663daba66 v7-3-272
++7d4e5e31d8c10c767cdf774a2b13aedd2f95f096 v7-3-273
++1bb6776fa8c445e0b3f9dd2ed14fdf2a56f5873e v7-3-274
++125c7bf52271461dfbf46cc33317eadc67aaf742 v7-3-275
++37a54a85413eae68932233e64a0ab88c99c9d811 v7-3-276
++e5b17a5f651696ad4c523a21822692115d371250 v7-3-277
++6622f28b7e87a93de6f1520945d1c5d2a1fc0dab v7-3-278
++342b176089678e86cde3e1afac4aaaa1e5153f99 v7-3-279
++58bba69b3371d9ff02b27fe24f044e229c8aa99a v7-3-280
++45ead8a0bedeade57c320d72e9f710a703e61cf0 v7-3-281
++92167bb91c95410a0550ff8c94370307bb7d9d80 v7-3-282
++47b6d37b60122f45eb147106b8da1322c1cdbc60 v7-3-283
++27d43855b72312500e6fc2122e167a579a1f35f2 v7-3-284
++6018c815e1205e7db9328fe6ed91b26b514465f3 v7-3-285
++3f822e54765c54a1112a953e3c37bb60185fd51c v7-3-286
++07bc2ccfe5559035e785f22851365b3a31dec67e v7-3-287
++e4f3fa1a474e677dce486ea07ee31270f92b2b4a v7-3-288
++44ffd0a8abcdba441216514cb711649eb1169876 v7-3-289
++df33dba4e553f8fa27ba467042f16315c613a00d v7-3-290
++e8ee4b4ebf41abb199ea9a9e9cc38f9b0c2f7192 v7-3-291
++b6af1c5dd22f08db2b9e52ae763f193ba82965ad v7-3-292
++6cd0d6413a2e03687aca8138b2843f1f2aac5b84 v7-3-293
++dbd73fe939cf772a8b07c19230e5ee60aa0cfcc7 v7-3-294
++0d8494c051131b6470fe8af67646e235bc63fcf7 v7-3-295
++c19c15a9e9bf2914b25748c0544936e84a5c77c0 v7-3-296
++22550986c713ce5f37f069f0c8f99a54dc4a421b v7-3-297
++43b1d031e3028248abcbd5099841d3aafda7f68d v7-3-298
++eb4972982bfea006ead5b461f319744d5ecd58f5 v7-3-299
++2665b456ee59652c7b590dff0fa522ce337e0f16 v7-3-300
++4a70971530899e32058207cae683a69e7b8f85dc v7-3-301
++61b2f26623104f75850b1568bf61663597fe7fb0 v7-3-302
++d832d642f520d426f111b35102450617922547d3 v7-3-303
++b3a523ced6bd1173e4c17611559c173094830d43 v7-3-304
++0e06c025f66ffdfea20c8b73a995d23448b8dbfb v7-3-305
++0787bb5f387b79842d5c9353ae3541a992d1b9f1 v7-3-306
++880b7dd69331d1fefaf2d8735b118b39d546280c v7-3-307
++61c5e1527bd857e724f8396c89d0687126390675 v7-3-308
++6eae1b42c6684f3fcdb4d6cdbfb7dc1942d9b364 v7-3-309
++51ce22ba89d11505e18aa585fbd7dcbb22097f9a v7-3-310
++2cbde6bcc6238f41506f87bf31ff7d90f632345a v7-3-311
++0ed06069aaf32dbb2aa3827b23280b0028954ce7 v7-3-312
++dc60200a16b21c3e4157708bb825ea61b9e5bdc1 v7-3-313
++6ab1b45cc95ed56105b2130dc9938bb8344ff903 v7-3-314
++3ecf9e91d88acdb5eaaf93cc15a18914b60e0eb3 v7-3-315
++33c140e4664d102c34ec3ec5a17318f75cf475d7 v7-3-316
++92a181a1cec3fec52cde1b3d71f628a3a2dc53c6 v7-3-317
++d68f20a86a3ec75d927955be5d31983b6c37eb1d v7-3-318
++dc7f2f9759208aa07bf136deca661fd080a1ee68 v7-3-319
++738ea87c196431c452bd499c5a9849597ac938de v7-3-320
++fc0804089b2945bfe683f9bc9ee0238b8c64a46e v7-3-321
++38a7fd9043474dfb464c338ffd7f393361f5a6c1 v7-3-322
++3bdb646fc8a46ee5a5fe474dccdce098680d24d6 v7-3-323
++f04619f1fc1663f4ab05798c410e4fa35a9dd863 v7-3-324
++8aca621c00910556d4f52bd650d6841d6059d6ec v7-3-325
++d3758064ff9946d23aeccc9d2340686766647b84 v7-3-326
++9028c70adafd109ab294102f74dfb5005a20bbfb v7-3-327
++5b53cea62e5d1be2a1a36ce685c15f99bb8a41ba v7-3-328
++ec901ddc84d5c66c5d0c1dcca093584598487f9f v7-3-329
++abb03be99d661455fd3790cd25355459448fa432 v7-3-330
++4b8c614c1c914ce5d712368a75dbfea9b7e44e17 v7-3-331
++0ecfe54a273f6bc440684aca4ebe5926a2dfc6e2 v7-3-332
++992b24149a9ee0d6f417e40a7462891a9f62ec6a v7-3-333
++fdc72363229865cc6fd2da9db66f1d6e683b87c0 v7-3-334
++dc3f90a73fb375092ea9d870ae48ff31b31a56ab v7-3-335
++52526aec4afb220a1271e9a645194c42d3b2a538 v7-3-336
++176bfa951339a0a36366cbc8def41ae75f5034e0 v7-3-337
++7919a3d7333b99cece7d1a2657c89c18de78bf82 v7-3-338
++b5a2b4c0c1cac1758990ea449bc1c552522f39a9 v7-3-339
++49b08c9b9f5b72d930a1c02f00aa4128dc58532d v7-3-340
++6963603ec6dc2b47da9a7e951b2d0b3e024535eb v7-3-341
++314d9368069ec0458631ca150c202e7f724ad6d3 v7-3-342
++98a05814f1b466c87611b810eeafe8e7d9c581b6 v7-3-343
++7ba2f171cdaca18571b5e73dece426411c4f124a v7-3-344
++35f098371af699aa7e614a6397a068119b54cabf v7-3-345
++af76a61a7f79ccd3bcf64e15c73f2a3ea0eb77da v7-3-346
++72528c5eb87ea315a7c1a48f7734d1717c28820f v7-3-347
++4d4a328f199e4020457b4bf8f077622966bb3563 v7-3-348
++075acc2dccaa621998ccb1d671a987090367d485 v7-3-349
++07956eab189c0c776b79bc42235833d234480559 v7-3-350
++ff69efc4bc55d83b5f2bb68aeede1d921e8f1036 v7-3-351
++ca65249eb34bc62e82d54f74e14271be7f7f8a44 v7-3-352
++12bb368fef2c8c5478f0f8905aac381a56a75fe0 v7-3-353
++6672b1645306ceab4348caaffec40990dc319b98 v7-3-354
++d2f70593afeb432611cdb0ea2a0600c2869a20e0 v7-3-355
++c349a670716ab5e5f01b8121f3b7f07560ce0b8a v7-3-356
++e618700297e83c0d51efbb77a849ce5f0b19b507 v7-3-357
++97a52300ef2b496b6c8e2487973f134d9e0afba8 v7-3-358
++b7f0f23bf90603f83854fd1aece09fcc64876a29 v7-3-359
++28480c9006e6e6936aae05de1f3ca3eaf4d2f267 v7-3-360
++e42252611e74c1df2063955d6086f59fb3e3247d v7-3-361
++074ddc768feadcb3164973c7f7be8bf78dbdd56e v7-3-362
++c025592d7b1dd658955b9a6d2d159c04e83c31e0 v7-3-363
++b0bbaf1020f08fa6dbeb059e251127e27fab9ecc v7-3-364
++54ef99c39139cad53db24bcdc18470394d76b40f v7-3-365
++436b42f3cba1896b65ad32e791d131a7c3978738 v7-3-366
++972bd3fca5562b8752ae18313e8cb3e6fac207c5 v7-3-367
++4e9c5338f44c24d511a989b5ea50850a2b9110b6 v7-3-368
++0df9718c45b68c0aaa40934bb54b3217b0c24495 v7-3-369
++3801e4811b0ecd56667fe89172ed37a84047307d v7-3-370
++e757e1127d210632cc920d9a0d2d2a3b89be7ffe v7-3-371
++6ff80dd02b51e9bd6d3c1b0167b81e295b0b4881 v7-3-372
++a1d2f741d45c8731450db862e89eb4a650796fe9 v7-3-373
++0a9d7cf90f94945578b83883e2ade369ecfbfc6d v7-3-374
++767bb493e7d31273edc45f4cb6602784f639f516 v7-3-375
++1d7434010de186b02fd6a5c8eef3e28108a4a251 v7-3-376
++cd145cc2f2c918b9fd77dc177f69805c77e31e41 v7-3-377
++a7517e84d9b8191092ff849e520558d61be01f71 v7-3-378
++0f193ef0f4298ed632b5e9dc88c7efefe093728b v7-3-379
++534b3ef1cf1440a9e22c2efc7f2673017024f124 v7-3-380
++6cc788692b2e8e043a3d7fff4e1efa2601ad39c7 v7-3-381
++2260435283f2ba0ac8d0b35e216b297605ef81db v7-3-382
++f8d2ef4512f8d78c00a7aff24fb8f99aced6f2d6 v7-3-383
++e958eeffa0a7d0ed2021f2f4b61ed9e5daf3d9a5 v7-3-384
++910eb66c97684b3c0511789e7655dce2c7ba254a v7-3-385
++1cedbee50ca65fc96eca2d360ddf886b3e7ad74f v7-3-386
++ac16c62282ac0e961afa44b556fe850dd6c8e1aa v7-3-387
++683fab13904c115b4e1f8b9ecb902d192501245d v7-3-388
++c97c3272d7a67a2980ddc291f12f09c36568c54c v7-3-389
++48252b5fd17042ae95c6736073ba3c5b12820f2c v7-3-390
++819322e0e93e50c04fa79163f9b88085cbe7db8d v7-3-391
++c4898d6d73a2ffa55fc91f79f8e110260eda29cb v7-3-392
++e0248b732a5cf0c4e6d61253564f3f855d11a755 v7-3-393
++927c7377cf49bbbf87d12863c2a2d462c9cf97a7 v7-3-394
++80c529a5650f1d70342f18c681b69d7897495006 v7-3-395
++2f075595590f498f1a9cfc42dfce24cd0d980e96 v7-3-396
++75217982ea460e7bdfdd2517d8d4e4f0d0ebaef4 v7-3-397
++9eb7fdfb5e63ad98f6feb81b03566fbdc5ebd895 v7-3-398
++ce6afdc00290520fb2d9677b44a0cbb70bc401e6 v7-3-399
++320cc46d0eb022bfb24d1b636050becc83ac0014 v7-3-400
++1251e1ce94610b265d3c1f636d379a0504cf2ae5 v7-3-401
++4eda43e1fce06ef32d0a79721fa0a6850a72b4dc v7-3-402
++5850b58276918de8edf19ece0bd258e179967af8 v7-3-403
++8b928bc814a8d502f25a06ddfa66b0474b89a73f v7-3-404
++c75a8d2404bd4f1297aafbb10ab1ae68ba678249 v7-3-405
++fbb23bd517f8614f512cd81b253519cbf4548863 v7-3-406
++55cebc7e5de078ef323a94ad79319c0ab33b09ef v7-3-407
++1fec3c62f6e8065c2f7ea7422213e78b50032de6 v7-3-408
++7b59c2c032ca8a15425afb1b519c809abfd572f0 v7-3-409
++5cf2a671d8ebdf46590b8fe349ad2b6f84eed868 v7-3-410
++8066fb7e356481b52019a52696072594d2590d4f v7-3-411
++aaee6093302281b70798ae4dc599145b95891908 v7-3-412
++821c8be2e9d604282481f50f7c5a1a210b9b1696 v7-3-413
++c7861dd3b593a2011ae46dbe43d78f44cdf2d99f v7-3-414
++e7e4dbac7ded5e048e289c7fd92c40e29f775758 v7-3-415
++5c5ca538693fbfd3a574998693094b48f19ec12e v7-3-416
++5c5ca538693fbfd3a574998693094b48f19ec12e v7-3-416
++22a626604672b37914ae929b0d5e11e3efb0d79f v7-3-416
++63d3541d07339c65d602bac2bbc72d755b416ad8 v7-3-417
++4500a0ad2e0a24f54e5c4b4a3266456cd5ccb2eb v7-3-418
++f4574729f6df749668df181a9dc09030f37de2ad v7-3-419
++ded8f5add04c9477c47098a66991f971324787f2 v7-3-420
++076003f52582c2ec0b4851df539edf512945778c v7-3-421
++60f6df978a413952e37d03b85a50ca858456b53b v7-3-422
++b7811ab264bf31e0049e7a9b689a399ead6cbda6 v7-3-423
++2e4539dc2de7da0aed83286304d1afeb0a4cdb3d v7-3-424
++7b17a38eb223b4b56327f019267c1156121f5c0f v7-3-425
++c70c005f61fb08ca032b4eab533908cfc6e6f40a v7-3-426
++45467d77047df9134a7694367bf97344441b1b3c v7-3-427
++d473f39aeadf6d022e520968db17257b42b52b61 v7-3-428
++c9366ca36f6feb95bd8e01dbed9973a404f5391e v7-3-429
++a9f8dd20a49f9b8296a6ef6d9e17e3446c0974eb v7-3-430
++a27fac494e709a3cb78399f5dbc5d807a1dc7a46 v7-3-431
++81201fb337a58a58cbac43c2b89025c681361df7 v7-3-432
++8a731d7f0664b13176afb640ed0325949836962d v7-3-433
++636c2b1cdc8b6cc5279ac7d5986da1085484b98a v7-3-434
++afbf45d854965f9e557497ab9d4d9aca87e220fd v7-3-435
++2a6eb75275d94b864eba6d6135de650a903a4a7e v7-3-436
++539613ce999d3a938c602a6b6eb230fd0d77a1d1 v7-3-437
++bb67cd961fc3011d367357c215a0603dcc46ea40 v7-3-438
++dec4338a7da22b02e7c7cc65668d35db264d3400 v7-3-439
++e3cbb11f3555d5dbb1cbd3daac4a958a9e1f01ea v7-3-440
++af4ed13ca541f034e3241f2eda1abdb3b45d1770 v7-3-441
++198ec1fff71a44a35aa7a59b4952583a82a296fa v7-3-442
++de050fcc24cfb56a7dc07dd283cc1132d774e7b7 v7-3-443
++72146e7f47fa647f19fe419f4c8602897880eed5 v7-3-444
++397e7e49bb0b831f7260d3ad70f6b07175c44a0c v7-3-445
++20ca2e05ae20ece942490182691ed45746f64cb6 v7-3-446
++6a03b0ea2e12d748c1e4199e3f428ee080760939 v7-3-447
++756d712b3118b896b57ddb4f4c071135bc031607 v7-3-448
++9ccdc4a69d8ff7aab8abf89f9a3cc9dad12249dd v7-3-449
++3479ac596f6c4b38849d2e5235ad590378605eb8 v7-3-450
++045fdc5b6056a18579f28b40a4914f4a7cb8d4a3 v7-3-451
++f1cde9cf023e15cd1bc26ae720d6380fa5ceac7d v7-3-452
++791baa7b35e1b6244cdecd4a2feed933f78fd84f v7-3-453
++1632640a24b42a9193eeb8f6e8150afaeee5ee35 v7-3-454
++e6392f2aed4c13170664b4ec13dd2d8b3ce968aa v7-3-455
++07fd030f89be62aa11c4ea1a188ee2d8f4348677 v7-3-456
++4a2744311b3f3c8207189dee4ef405959a2e2446 v7-3-457
++da670fb71d30a1eefb07b19256f8c0d677807550 v7-3-458
++cb2ae92ce106de532c53f8a16a82bc2bf6edacd2 v7-3-459
++981c7ad9dd48cac1b4030b97c2f0dc0b8fe82337 v7-3-460
++de60f6fa3d8d77442a39ec13efef89f6ca76af03 v7-3-461
++70eff6af1158f9dc99118ba73e81f456015c3ebd v7-3-462
++8e0fe5a723adfb45c44978083db7aeac11e6d72b v7-3-463
++43259e4542c76e950fecc86114c43065064d1b34 v7-3-464
++d1096a4e96bdd5bfc0ce2f1aaddcbff1475c69ad v7-3-465
++df9c7798b5e2c022310cd12e199c9de8d866aa39 v7-3-466
++276d58e9265cfee76c04bc5450681090900a16f4 v7-3-467
++38a1357304234dcea96f96019abf0f3e5ae290ab v7-3-468
++e61c3b09ae86a8a448ad2d028df6fa6b9778666b v7-3-469
++636e4db6e2075bd22640cfc8229af62059f8ffe0 v7-3-470
++3465a9e7758850684d18a9bb11ac033efdcd1755 v7-3-471
++8332129d9ae8f11f8ecb9f016e5292c6582bbb4e v7-3-472
++7f1bce9c9b79d4ebbf798d6122612934d55d70d9 v7-3-473
++7613c9ab083f3e9262be5a21fe086921b757da4c v7-3-474
++36160830a5e8d0e3b4174aa7d98363623468b77c v7-3-475
++fb2c5a51dac7f1dbce6a0f35808927ac206c7f47 v7-3-476
++62dc0d69ab11d5b5a67c6139a0dd3e2618d2c2a1 v7-3-477
++754db405921292fc57dbdaa85e62af333dce5912 v7-3-478
++3db4282d5e6bb74a5c1094f35a81472d5a98f313 v7-3-479
++b35844f3eb49bb84101fdb276e3e69b0b8f7813f v7-3-480
++8e21ac7f2d6e9f269b057939dda58d3a31beb894 v7-3-481
++3229335d0c4e6cd7e91e6e61d791d7dff7d3082d v7-3-482
++19040069b8bf1818db44396a150acb54f47c3a96 v7-3-483
++00fa605e7d7ba7d522c627a93de6e2f5017d2884 v7-3-484
++94374e0b6267d8983a73a22166888c2282ee793d v7-3-485
++08a37c57af479b54fa327bedc0ef31c42dd96f63 v7-3-486
++21219ffc97903684349f1fcc843eb61838877874 v7-3-487
++8691bdcdbf66733c7ec1ef8161da1d4ef49dce66 v7-3-488
++c1a6e1745cb521f863e63670e6c22c1c682ab4b1 v7-3-489
++b067b8b81be9c2839df75824da2e88da24b07b54 v7-3-490
++e070b34fe35e6e8c40ec31a08196dd81353db4e5 v7-3-491
++214c7ec1c8f995664d5684da8cbeaaa86850468f v7-3-492
++bf5960ec253293b7240f59a7682f2e862dacd205 v7-3-493
++5240610f277823478983e3f04abfbed4e85141cf v7-3-494
++27f6a22ff88eea07f24163fe470b7335f3c1b32b v7-3-495
++3daba355b0c15ef66a9d2810ae7c7cc534dccf62 v7-3-496
++e34c620007be9fd805556c43fe848de521f3b64c v7-3-497
++b1a42d2522fb4ff627a0c381e994e2a598f7bbbb v7-3-498
++4a2cb025b6417b00f2ced076eb79739e03acd7d4 v7-3-499
++b36640b2f671c006fe26b573fd42347227efbfa8 v7-3-500
++d7b335626ddc7a61667cb3e23ecadfe399b676fb v7-3-501
++1d1cce57421c78884cff2d3234d3759bc858d6fb v7-3-502
++65d036fd449e488303e78d2c6679a736551c39a6 v7-3-503
++17bfcb054cb770ac685acaa349165f210bdd36ca v7-3-504
++fe7bf24804e195209bef4cd008f0bac7eec7fc60 v7-3-505
++982f84487daf102f1203977a09f2c6c76d1ed3d5 v7-3-506
++f9a865d97614940f817b76642282d966781296e5 v7-3-507
++2722f11ddc998ac7c578c68c0248b58468179418 v7-3-508
++8101253704f6504bed3f0209e9a6fcae3966c6e7 v7-3-509
++53786601213cd9f86db8714f7b0e077b05e2704f v7-3-510
++b782e2f9e6892116ae5d068249b5198bbe0042c6 v7-3-511
++454646820185cbe13e1f2e4f7533b984d3b07b18 v7-3-512
++75037f9bc97ad76bca58dbbc0ddac69cc7f5d9ac v7-3-513
++7e4428115d2cea86fcfa980097c98c11380ae196 v7-3-514
++6c318419e3310fb9658ee6ead6b4ea33def8cb6d v7-3-515
++02440d1fcc9aa953ebb7c0719405ccf2525f2777 v7-3-516
++9a1dba1f969ac4cb2477626cd79a7a6b0bea1894 v7-3-517
++ec4ab9d832b0f5308c861423d99253fa496b3a3b v7-3-518
++ebec52bc2800b8e51e522425fdca5c252e6d4f8e v7-3-519
++7bafe52b6245761a242321352daca224e6b9df78 v7-3-520
++b14842cf382bd3f99ca090c985609c6dead5f9e0 v7-3-521
++e4899d2ff5d8e552ace52b7eafe02b2c5dcdb409 v7-3-522
++d8ce4a2eb44e3e3d56db5e26d9982aeb48d7814b v7-3-523
++ae1641c4fbcc8c25d27802d6048cb0767c4021d1 v7-3-524
++ac2e00f917df566b81b9e33891b102cba5b390e0 v7-3-525
++257c2878e0fcabd5504dcfed910287374405440a v7-3-526
++a17918b76ca1296f63db0e81dea0e37b8b880150 v7-3-527
++fa17c8646feb4719639150f1c301ce6c1557afb7 v7-3-528
++d83218a156dd8258a5f2f3ae019c56f3e8851d48 v7-3-529
++81d5f3a3e27fff9188ae34c41b939fc88c9837de v7-3-530
++c44f0f7424b98d321d90994198374628911623ce v7-3-531
++9755d151c7492a5f1d0e77a2d3c9e414f20f3b4e v7-3-532
++74d51b51f3e69df7d3295255ee10391b3409055b v7-3-533
++65f905eb14cd373e205ff4c8a53027514e96d819 v7-3-534
++f52d2ea0f81c20e6f026d74cec66b135d5470d2d v7-3-535
++a8897fd5d074d7baaba692013521304b13beb784 v7-3-536
++96715c3a905faa1bbdc50b16b0f57671b4758e0c v7-3-537
++bbf1fbbe4ab45442f8876790004805503e25f563 v7-3-538
++7a710cf51d73cb3c3c76fcea34ee706443800c54 v7-3-539
++af083cb521bcb69aae315654a3873c488dc58c43 v7-3-540
++5c1aaf9b4b1bc2d14d627fe22d414f3a2525c50b v7-3-541
++8d1b63e6d3173625324f4adfe733efc8091f9422 v7-3-542
++ce7bd50bafa74f4da979f27c4e5fa9a47e69d739 v7-3-543
++09d0bda69df0c5eb505a02e37a978e92fbc89332 v7-3-544
++e7ff3251dfa157284a48c5322783499d079e3eb0 v7-3-545
++0a364618c0e59fa777f526c99bee608bb5cf55ce v7-3-546
++4f4db5d661c4fae42f2d917c09549d58a2f4d05f v7-3-547
++8625e38066dbf6a4d5e2563fbe191c3910681d2e v7-3-548
++c0c935956ac3b7c706043e5c7c0ba840636fb10f v7-3-549
++297771eff080ed3bcfb2ade57c2dcab34bac5de8 v7-3-550
++e83c5dcea112a44f9a7b06042b52798e32d96541 v7-3-551
++443c50cd3e8811b58a4ca131ab21abd18aea9489 v7-3-552
++583e46e4a56c40fa1a7336be85eaec93f6800edf v7-3-553
++a967a979c37f458bd4d164afb8a6192a5b4a6fde v7-3-554
++8fb7bd9dfb2b26b43725c90e042d2089762466a6 v7-3-555
++b8924014a03991b79947d735a894e2c2e8f94980 v7-3-556
++a220dd97b5c7218558eaea27d301af2ed4f9ec2d v7-3-557
++34724dc5172bb81a9e670c5bd23edbe6a124fd28 v7-3-558
++74adc9f7e15b8c088abd04de35615cad6c83a811 v7-3-559
++0abd38ba64557c4a6d62575aaa3fc7ab6482d747 v7-3-560
++a1de7928a7aba45240c85a2bc8d70adadc49e4dc v7-3-561
++b2763055bdf26e1f11bf8cfb0601fefbefb34e0d v7-3-562
++02c86cdcf9a23f092400c7631e5906cb9053703b v7-3-563
++683de93060968ed4e9dfb7992910c75f479471ec v7-3-564
++5f811338b1186e1aef683d03fa05a8026d30e9f1 v7-3-565
++18c6b1752d0baab043792d3f6267ec393f7a11e1 v7-3-566
++f90bb88c261582fef85c16009f19168b38debd74 v7-3-567
++3b5f541269e2d9e57b82ea1ec89c6747e2003434 v7-3-568
++c052f3b79b9948e7072580e7db42f90c92eb40af v7-3-569
++4f1c511e71f851c4f1c14e950f95ebd6967c6ed1 v7-3-570
++43fd3896fab7be5ad01deed2960d37d91ba65691 v7-3-571
++3ae387af405f46e200fdf9bc204d0a251864abb9 v7-3-572
++802b1a1b275f5c8f95724d50d53642f221621d79 v7-3-573
++3ac005f02cf015b3aa246482c6331bd61c08d91a v7-3-574
++79ae10bd056520fb6367247804af22e52d2de8b8 v7-3-575
++7e3fedfc3d08d020e3ce047ec1a1cfd195af9ed7 v7-3-576
++286ba0251c0aff1a664a481846c1f4107fae0c11 v7-3-577
++0e9b2622c94a8edf906d6c44831c1cded7184d13 v7-3-578
++80ed6aa7b9eb18058a0b105af2ecd7b213891be2 v7-3-579
++f02b6ad168ae82ead0286b64627762ab2343ee96 v7-3-580
++96249a1803e28e6173faed53f8687334aa63360c v7-3-581
++d383bc2ba8112103389a44c2c747eaa1016da935 v7-3-582
++a69b1d711ff9d8b227acff694c53310cf237933f v7-3-583
++2d107086903af80afee524549e57d3ba016b3f12 v7-3-584
++d258a0c5c38a6a604b983b6499a0f02bc061c816 v7-3-585
++8393a16069fb5f7b22ab766167b698e4dc129911 v7-3-586
++a34fb0a077c9c26946727a25222e0a99dc08db0d v7-3-587
++e92cc285632dc29d932061970e43b53cdbb3460d v7-3-588
++e82937b753a8ca6705bf55dbf258f077746ec428 v7-3-589
++bdf7f3e4c763f2a038c397af8eb6b8950e58db6b v7-3-590
++e5b925ae56e36e86eb2ff059aa28d6a2dd332845 v7-3-591
++0e06193d4bd7be03924dd9c6251a64c6c6adf78d v7-3-592
++46896c29edd74418c665af7c1ed685aa52a41e1a v7-3-593
++5e7b500dbb7e9e964457d300b536aeba9771af6c v7-3-594
++928e7cef8836d13d4f2a17234e127b928ee63ff4 v7-3-595
++5aad2c444a00a2309e6e373b6bcb5441669ba126 v7-3-596
++b9aa7fb4a9281b87a651251f799e049409634757 v7-3-597
++f0747581607924c30530687fa88ebaa57602eb5f v7-3-598
++b06578f1390fea339a2d9d18e12758ec1dbcc279 v7-3-599
++8f98038a0bf34310a8224a569eacd539b7b8b649 v7-3-600
++c1780b4cb9955fc113c3c993c18c139e06425ef5 v7-3-601
++5cacdf56c94b6fa1992f7e9c07c95bfe52bcccec v7-3-602
++085f14642fe828b1cbae5706ca87f2932cebeb75 v7-3-603
++acd91c9741a6d0185b7c63db412888de4f904118 v7-3-604
++4873d9c4ad3b7214d3ea8af9712a87ff69948380 v7-3-605
++c612d154bcdd642e4097ae88526a81ed7868c184 v7-3-606
++002f2c5de317aaedb93bd2e506a295efe2d552ce v7-3-607
++d47e6222d1cde1caf08fa63104375f5750c25d90 v7-3-608
++d29aa05b7e311bc05491521f4059ca2b625c5550 v7-3-609
++9f48a54329975434d73ddfc19e33c343653d5c73 v7-3-610
++e13f2f3568e1e21fbd223a1c0627605e2b670c53 v7-3-611
++2b4b6185054ff05fb6ee3ab1bcde47409bf2ebe0 v7-3-612
++c03b6363492b26c02b4f8a725a91849a1a5cf548 v7-3-613
++2bb51730ef4bb0824658f7507edad165e194dd45 v7-3-614
++169ccc471a8a947c046b7ff41023b9045beb3496 v7-3-615
++baba6286c91e63dd42039206e3e0990fb0ac346f v7-3-616
++73db39ca1877a07008310a2ec98a2220e50c52f1 v7-3-617
++0b1cb3f839c48daaccbb3abcbd5f1c394c57cb10 v7-3-618
++27ecf0c87bd20140d9e85d4fd581332e0916191e v7-3-619
++a6ebae140d89f35876628cde44f0e7ee5a0ae1d2 v7-3-620
++ac13ea2b098d98e62408ec2d88026f690f68f940 v7-3-621
++52247eb615118965bb6a949307e9abfd378cd088 v7-3-622
++a46a101bfddd4fcf30759f3847fa1e18546907f4 v7-3-623
++06749e351b1c030acf50cf8c469f8973aff4a96a v7-3-624
++f43ffd820a46bf47b3e55b56d3e5334302383757 v7-3-625
++956b1ed19282518e0287891d4e7b2b8a3f850402 v7-3-626
++dc65e6429d2c1b79719455d7303f3f95c5897965 v7-3-627
++1ed93878d6e224d46a7c125a82e52338b9bf0f6b v7-3-628
++7de7ef01288db1abc944293a28aac13ddd87879e v7-3-629
++3416ac23d0758528919aaffbe02cecc6420b8aac v7-3-630
++99f076ca8d846d553aefd7e626ca938bcf93f259 v7-3-631
++44038a9777aaf0e6502e0eb57b8f7ccf31798ec4 v7-3-632
++ad5fbf3596e0a8ad15c260c5b529efc5ac689e13 v7-3-633
++b7eea24095073d55ac3c59664466b78a0525bebc v7-3-634
++f7f68f83fc335379bc9e3371c5118b8f81c8d5bc v7-3-635
++616bc1ad4f12be0ef37fe67d2f6ed7535f20e515 v7-3-636
++3b62d8f36cdf709d4e0575d63486ebe57ce7150c v7-3-637
++c0256c4bd91ed7b806aab002e4a45e440dd00343 v7-3-638
++1ec385a8faf4002fa300caf370ef2ac380d9702a v7-3-639
++c2c3577021ed4e354853d330e5fc60691d8750c5 v7-3-640
++c068389057c9a89fa351678b5f5776278971dabe v7-3-641
++79ac6744237ce5076a6d2e2b21198dfddc2cc9dd v7-3-642
++fdac34e3afa5f0dea26dba5e96932e3b9a0be50a v7-3-643
++fb7c028dcac7555fee78096813e3846d157cc91b v7-3-644
++1810ee914648ef3e16a8cf866299a32c4a9a00cb v7-3-645
++e70485d3f81df4d72cb40d6fa4ad4218cf1e8392 v7-3-646
++29fe4e5c1db17a62b16a95fdda84f08cd05c27b5 v7-3-647
++76c099d45772a233982c39a29510d89eaa4d5a1c v7-3-648
++063765c3cebbd6040dc091b8c1ba28739fef9118 v7-3-649
++a638ae0f1b0cc41d8d753d79503238f11215f3ea v7-3-650
++ece544e85821a6118da55dad1538ea4c3625bd1c v7-3-651
++5edf3c51aa93110e57fcd0428c30e5bed149df34 v7-3-652
++fd0c7452fa51118d8f6557b34b4cc96e830ef6c7 v7-3-653
++73557eda70271b49015265b7147562b63a7a094d v7-3-654
++0d3238b54963c4b1358a1f33221f75e067c1613f v7-3-655
++a2f61b2b8e770bb8d233ce50c8c7508508578a8b v7-3-656
++3958b0e672d676a310d756bff1b9c629a7b0142f v7-3-657
++15cdcb8ddcfb848c929cc37e239d5da8fe48a8d9 v7-3-658
++e75da4a3225d48e59ee321411134cf9999348b7d v7-3-659
++8fdadfccd184b7de73811a3a18dc8815b7eb3434 v7-3-660
++5e909c379a1e87491bfa95ba1a37b39d0725933b v7-3-661
++87afa95a2992a31b1937def0e1db4a193b0ab32f v7-3-662
++2a200527131fac8f50487790ec201badbccdaf0e v7-3-663
++f86619764a1e0338ef9e14c653a5909847304b8b v7-3-664
++35939e1e25ff5a3862b83248f8039971c81936d0 v7-3-665
++1e22adc6176ec07f52102f383a9c3c414d43f9c2 v7-3-666
++cd36c0fed43e63a94d6e87b5c5c0b4d95628da27 v7-3-667
++dde6d0216a08a5554f3c351e519134c386d14232 v7-3-668
++2b3b7b48370848149c8b831b2b7aee9b7f4f88bb v7-3-669
++2bf8c00741f7f07d9b58596764236a92eaeca862 v7-3-670
++530f5a9030315f984e096794938c61f9d3562e22 v7-3-671
++fd6ef931aa77239804860b74ed2362b29c1a6d4a v7-3-672
++ca1c025079b11c98363e11576d903af756a593fc v7-3-673
++4da6003f0f0eee0f3908f8627af6d13a94c10cc6 v7-3-674
++9963f7a9b41b555a0660288dd94df44b6dee7c2e v7-3-675
++5309996ddcedd7e2dcc8c46624348405290b8940 v7-3-676
++8115f449a574bc146f75449161f1757aaa5bbb66 v7-3-677
++de253f606048a2862a338190b071e5e3c7de7a41 v7-3-678
++dd0f25ede9a8322b5b638961835cc4743cd479a2 v7-3-679
++52acec46b75ecf24d044982d4cc067ef7890e7d6 v7-3-680
++a2fe24ec6a0d06d0af286b9fee9e307c33f27cca v7-3-681
++8eb5b61161b4c56b378ec829e360204102d22db4 v7-3-682
++0f5ee262963528ddccfa1f54b83696f939d21b53 v7-3-683
++1cc37b8cfaa1c670e442e2f9444feeb1820228bc v7-3-684
++34aa94a421b7a03a71013ddbb92937dbaf83b1aa v7-3-685
++ba9c9d0c4ff4cf56c3c5d2dec2da71decbbe9f6a v7-3-686
++0545dab1517f8ce2b8319c02572e4bb357567034 v7-3-687
++2696da84d37093da0dea419878e4241385eb515b v7-3-688
++3c072c1cb87372f3ebd345463abbc451e80143e2 v7-3-689
++caa0ca9ad06cb515b7e6d2e4410e03802b58e167 v7-3-690
++7f10daa706bb6ed0c39f1d2905cd78368a98d19f v7-3-691
++337a4368fd2b68b9822b94e595d77b4d6773bfa4 v7-3-692
++fd96b3cc88ed71d4c4d24c6ac67c9d3a68ae6e6b v7-3-693
++8235ccf121bb241f8105d0ba6e1c92e9f8b04555 v7-3-694
++cd6c420e31d6843fa1231e1cf7a3d9eff0ad4e07 v7-3-695
++447c688b82eb4a5eb7cd0e16521094b77160fd0f v7-3-696
++7c72b5f7ada1f4a028315aa50f8739e0e83c2e74 v7-3-697
++b5b892472ecb1a10cce1709e41700b264b6485d2 v7-3-698
++4ffb6f9b58e0b51923fe6a71e6af158b6e3f7864 v7-3-699
++c656847932d33b5d68394ae1ea3153dbdba4d3ff v7-3-700
++48af8656094539f8f71dc51e0a6aa14d48ddffd0 v7-3-701
++916b5c11a13e9978c85f9742546e70d614116883 v7-3-702
++f69321485951a3c9bd0e9e7484a1901b94cae726 v7-3-703
++be8ad9c9b973a4d87b9bcfee2b6a8de1f6d3e071 v7-3-704
++0aa74f2f50a8333fd5544f5d4b383132be41704c v7-3-705
++d0ae72c2f5f94e2483ab0979eec652b1289679a8 v7-3-706
++d24d309c365fc5c6a9324a6183d7b927d9f5132f v7-3-707
++64427849c1582299f2af389c6225eead529f0329 v7-3-708
++fb7dec372910b61478abdd7f79871724153ebfdd v7-3-709
++906eb5c0ef129b6876fa9c6c5a13e44807f7a503 v7-3-710
++2a7b2943be22c27edb3c0334423c1b17275f18fb v7-3-711
++557ef119999ea687ccb84eddca295755c24989da v7-3-712
++f15769bce0b811fc840fd455035270288e8d744d v7-3-713
++9ea14f097855e0929f86c86d405725717efb044d v7-3-714
++4f0ddf4137eeb08753f2593a32b42a1dcb1e6f4c v7-3-715
++eb268db98f321b93f5e7552920b6389f9dddfd3f v7-3-716
++6a76846b84eb0fe1220f8cfa19b1161145932d4d v7-3-717
++18e95db59826aa9379e6e3ada5d3540cbae1e596 v7-3-718
++e6d8b44065bc05741effbc0635c21506032d97b4 v7-3-719
++9e119e0ade5d804f174a3b67ad5e0d0e7449739f v7-3-720
++b23f583e132e88ec98f2b449b7216642ba64a8a8 v7-3-721
++de6968039340db04ec65164a3450a40773488e00 v7-3-722
++ee138f29259e02f62fe8181073e7a063523e50b8 v7-3-723
++6e5acfdf7a5a2b3fa27a529881af77c1e1b1c0f7 v7-3-724
++f4aa43d952f5bacc752951c80495fd20c72ba90c v7-3-725
++5049eacbff0e9688af99eb67a408cae5919ff52c v7-3-726
++d3c291efdb0b9f5cd286013b789eb1c91ae868ca v7-3-727
++233666f859339f425684af70dd008354776259af v7-3-728
++d08f05285dd102d8f071ee42869416d25dd4e72d v7-3-729
++37a4cacd20511ead4cf1a8ecb235276bc448fddf v7-3-730
++778ff2e87806133faa8fcfefbd41cad2b601bdb6 v7-3-731
++fa8bf69d3866eaf31e6c8fed74862feea11a40b0 v7-3-732
++509e55bd4a3feeb651ea173cefcbd933f723d8b6 v7-3-733
++fc8b4a06af9db05af800b1304599afd3e1229980 v7-3-734
++d3158bf4dee9270477defcde85949ce58fa350e5 v7-3-735
++b1536bbbda104edb11b0f5772e433d2b5388905e v7-3-736
++1773d5aa6437b0f88029a192cdde2c510faf517d v7-3-737
++eccae034465b9a44aa2389039ba06b25dc6ae7dc v7-3-738
++e2d36f345a7f1131e085336e7b471f718fad6c9d v7-3-739
++2c12cd5c1381dd9691af5e7d3e1fe1f54c929ee1 v7-3-740
++6e1fe64cf4404d899232a880552cf52998934656 v7-3-741
++4d1753f3e85c7fb6d9cde1a8aa9ded8d11cdcd01 v7-3-742
++67e3b2753a6ef97a94084b85f87873c309fea3d6 v7-3-743
++26c8b3b49f743ca163a63463da08cc3822322bc2 v7-3-744
++aab4b29520e79134e33f2c641f1d960de2dcdc1e v7-3-745
++4934eb2e22dc0bc03fd5d4f95706a69a1ddffb94 v7-3-746
++cd59ba19985a3b3bd66dffdcf59b00427f844818 v7-3-747
++56bb88c68f985365b0545a0370be59fcd97a4178 v7-3-748
++3e22fe67fa6935d1156738a34e50bffdf62006c9 v7-3-749
++5c36fe9f19a529fb6064b37b8e47e82cdeeb7ca8 v7-3-750
++d149f18b289fdf19363214e7805a0637307bd264 v7-3-751
++ed936effb1f374004db15f092b8c8ab87631fdd4 v7-3-752
++c83cd3d01128204d6926550cbe1064daaf8dee8c v7-3-753
++beceb0a18c79b5b1bda4822b34cb2d62b2967d27 v7-3-754
++d9b4cf53be2edbb872cc489aea32a4441b39eaf9 v7-3-755
++706c87d16d40ecdf9c6fba45bc47b911d8e140cc v7-3-756
++65ef7c96d65fb2fbf660797608809f0ac5d0c4b7 v7-3-757
++9eb0d30510f7b02aa5f55f400bfab08d847ab447 v7-3-758
++25ea15fdfa5c7d5894a06814fe9411b75050ebff v7-3-759
++8e54a32bcd56226647cfd3d8c5e142e3a98c0ca7 v7-3-760
++6834d6aeae099d6bfdff5151aa2174cafc22647f v7-3-761
++699f8d8f096d4627f97e8d3bcf64b8634a484c26 v7-3-762
++b6148e4a9c397b5dd1716cdac2f96730bd0f353d v7-3-763
++b29e55d0ef01c506ec48c0c5782e669bb1d80f14 v7-3-764
++915fb3d2dd8ffc322a5cc9e294d9bb7dfa8c5a83 v7-3-765
++b5103b7d9e1284ef9ffbc7d1170d9105c0769c4d v7-3-766
++be1cffa1e477c4a96bb54a3097d3369b23f32825 v7-3-767
++9ea81cd9b1f50054629547ce2eccfac1fa00d096 v7-3-768
++d179a8eff9d7b0adc561f4a4dcfb0b7612c1f301 v7-3-769
++da7a7ba36ed2a51f28e4d3f7e1fd550303e3ece8 v7-3-770
++3bd2c055319e086665af5e449498a4d5bf40f25e v7-3-771
++d828cab6964f4249db54bff6df0fe02d0f290387 v7-3-772
++3db9aee957f7eea6729e5bfd294e3a24d41c79e4 v7-3-773
++a8f5876e498125f4916c5f7168823885c27dad8c v7-3-774
++a6e60677aea727622dde15d1306c61588b805500 v7-3-775
++80b041b994d156360992666110964e74f7473d3e v7-3-776
++9a1a4c486e6bb367c639c29c6120d5fb1fadcc38 v7-3-777
++562bbee33aa4f9896cb23ed6de8fbf60cac323e0 v7-3-778
++2067ed78d37c331685ef8f293d6a23c372ca4b78 v7-3-779
++42edc5dac33c92876d93f00f8ab8c1f6bb25d3fc v7-3-780
++29f29e86602e4a7f83d4572d2fe75b9b0de2752f v7-3-781
++0de969850c0687d2018e025f31e5cef9e9ce1444 v7-3-782
++a80af62d5e3b3614ff9e058f42647c99bffe7481 v7-3-783
++fbadf0f6987790d98c3b3fd935fea0494743830a v7-3-784
++be4baed0c933e1f1543ea175e2e36551ff6caa18 v7-3-785
++8b3e88bab70215a18768fca5a90c6f07ac1aa5eb v7-3-786
++e1b98967a985f4d1ad889c8e69b822d9126411ab v7-3-787
++386fc822dd002958fdade4329845013cbfaa3dab v7-3-788
++43c15135926fb95fa82b01424677a9c37f4d0e46 v7-3-789
++8819ea6dcb72dcf61fd0d20f8ea1904a7546917f v7-3-790
++16e8a09e8ab08d2226dc84b12b7e434bda6b4fa9 v7-3-791
++7061704c2014e4563efa032672264a47b4b7b0d9 v7-3-792
++fdbded463fdcc861630b3ea61b9654374847231a v7-3-793
++9867f92c9b9fb082ee6daca816f859b53ed8e58b v7-3-794
++17a312ba38a0b606cfd64d82ed2ebc844828085f v7-3-795
++2c12c4e2fae8db60fbdf58b34c8b73eacdc32665 v7-3-796
++0cbea05f19c73c01dbd0f04378a65ab7de6719e7 v7-3-797
++cdaa688e3dddc442c1d39780b6ac0b5ac98c253e v7-3-798
++5e9730de25e9b4fc2abe14b8d6b0968a9e59983a v7-3-799
++c0cc0e0620dd935956a472e5b23369d1d78f5fb9 v7-3-800
++48b54c590dc83b705f2e19f9aea1e9a69fe09720 v7-3-801
++cd5145d2408bb52217417af654f5664af269e19e v7-3-802
++77fa4dee43fcd1c0bacad9dc85b3deb39e0ba487 v7-3-803
++2eb4b9ed2d42312eff32e845336aab748f7fe311 v7-3-804
++dc30c01f995623e65ee6651a46b12ff062df8860 v7-3-805
++f7e3f87ac9928df0079741258a3c6034ecc48806 v7-3-806
++1efc30385c417bb413f5199253edca2795f9da0e v7-3-807
++3b2a771abb39f670269b0ee9c4041bf02c2d5b84 v7-3-808
++918d7df425afb77261428968ae646efb95b15224 v7-3-809
++8904ccd5ee85ff326a05530c02cc90e1260f768a v7-3-810
++ad21448af931b3923d9b76e4efdcf0e966c9d199 v7-3-811
++4584e59860b8db6fc5870f0b8f0425f540ea90a7 v7-3-812
++4e6e012af15028dde0f55bd9bc676bbb14e481ff v7-3-813
++d5b1d6177b374bbecfbd5c75fbce28e148eeecea v7-3-814
++448a6e7cf32e14a4adcbc4066743e2f058f7e1c0 v7-3-815
++2b340e5c5baaf66015f3367208d9bf22ce1dfc8e v7-3-816
++01fa9313d4b560997234b94b2408e6bf64808afc v7-3-817
++ad7b6062a7f4041b736d45c5f045671d60eb782f v7-3-818
++36fd800b8c6c527c75bfe285d0ed0c3bc1cf45f7 v7-3-819
++688da4d486a019afa3565ffc553af6ee1a4e67d8 v7-3-820
++4936ee89b4bcfaa33f74114bd07f20af382af14d v7-3-821
++2f7883063b19039840a4a73fa227f6f42b9e3281 v7-3-822
++db401e5e4c5d868b7848486c84521f047dc04b01 v7-3-823
++f5ef9b9c18cd9345eca783fb0c6d4ed50e215cb8 v7-3-824
++6b1f3fc893cdb6d0a4fff5997cc8ff083940e727 v7-3-825
++646cb6b6ff2372c26cb9dc9ef1a0f8d562204950 v7-3-826
++5e17a12a3b1438a7ce044db02d9916ef36e404a9 v7-3-827
++13170a796134824375a42e77af4ff012ceed2b5a v7-3-828
++7728d626ae038dedbf3347508238ef3ab4216a9e v7-3-829
++454d35a4339251adf125de78a8a98d99105533eb v7-3-830
++cb185366f5c84852a7221ed6d9b274a7239ad06d v7-3-831
++670e576a58d19c2033877d26b4338873d8a7db12 v7-3-832
++b971097606032c6fceb961fd559121d5bd74a260 v7-3-833
++3ac9d7d8274e669d10178c4d95eac55080ee0ea5 v7-3-834
++d356b5ce84ceac41b036136807ebe887208fb6f0 v7-3-835
++ff193256398a81a520b44c67d661eee36c64ee95 v7-3-836
++14698f63de8db5b034939aa66b7076ab76bcd529 v7-3-837
++1c819b05529cbbc39982513271499e0217382124 v7-3-838
++2030aca407edf6c865114f459bf2d5d79adea390 v7-3-839
++1778d51fcbc37e819c305b860f98c949915d35eb v7-3-840
++b40e6a47ee53789e91b57c04d9ee7328fa9237d5 v7-3-841
++78321dcaa8e263cdf408f7880530b7aea7401a49 v7-3-842
++f4960ddda07ce46a098d9106ac1b22fd0f6d0f0a v7-3-843
++eccc0e8a82fb632efdfa600db3f65f4ed3dff01b v7-3-844
++171234e02b1e74a2482003d56e7110d37fb4a62b v7-3-845
++b06bb07d906be3be689f90399effd2b3b2ac2ee3 v7-3-846
++4dd43d6b3df705a513be75db8a1b50a83f72088d v7-3-847
++e49b80f267dc3cde78de78026368dec3a20520f2 v7-3-848
++dc77c2a14a05810bda7e53373d76b7f41341f44d v7-3-849
++07fef68eb0188adb3d750b92b78059cf41fc8c7c v7-3-850
++dd669f296568a7525e02ab54b615bde20d37c466 v7-3-851
++3fd805ca2a6a6ef231f111c6a7b3cd512abaf537 v7-3-852
++eea32254940fb4cd61339650e10a808f4e702e62 v7-3-853
++14cdb6e4d5b88aaaf7e33eaee87efec5b1c1ebf5 v7-3-854
++6604853dd8227c7983dc1b10f804f6aa4b28578f v7-3-855
++fb533fb6c015f40a3b1301c0c876c35665b0d6ef v7-3-856
++4905e038b1057e133d0e72c48cf88580cdedf26b v7-3-857
++0a3fab86f34d6bab27e0be69db4f39ffb664557a v7-3-858
++ecf21be84def6033137d168e0a66500c29aeffec v7-3-859
++6ce32844727d8d04e8dc91310d0a4118d81aa161 v7-3-860
++6fe728bf165e9b6974ef47e86d98b0eb14ce21f3 v7-3-861
++dd4f3ceb5d86f8367d4cfd6fdc898e493c6d0aad v7-3-862
++5c0652f455c9f2ae72790a782fe5b5fd1a0e857c v7-3-863
++a82ef37d38c09523bab204253b52e177dbbc0581 v7-3-864
++94342b0605fb9111b7fd4a45a8bbc72992c4c255 v7-3-865
++90d72df431e54d677f03171cbe558434029c027e v7-3-866
++0fcb050fd79d84ed190452e6387e42d320678fec v7-3-867
++b31989e2b05832d432557a32ed8901dce237dec2 v7-3-868
++23ce9a61bdc2a35892ec4e4fa22e8964d60dc6cd v7-3-869
++26e59a39fdd965ffe83bd654b705540551c8e0c8 v7-3-870
++d52c45b35fb0c3b77bbace6cec3deda8100fbb7a v7-3-871
++edd0bc1f26bd019cfd328a0dc2c9a854607e4a41 v7-3-872
++7faeece39228fde0ac5c26a362a223d0dbe9bba5 v7-3-873
++4d0b39bcec207130e483ffa66b6f51f999d8e95b v7-3-874
++beab15a2ef147b880bf7b5add269142b9af58317 v7-3-875
++787df0fc6539ff7886e9fabc85ea403096577440 v7-3-876
++96f478b812b14fb1a5710450a1174baa55c73409 v7-3-877
++97a5ce76cb7d5f635876bbddf35b421c0c76690c v7-3-878
++79176b78969cf5d182b378ffb8e341e22f18775b v7-3-879
++9945fe0536a32496fe4842524199b5c24bb8b0d0 v7-3-880
++d8acfc49d94e485f839d8e2534d302b91a98bf9d v7-3-881
++8653c39b85ea93e052bb0cbda571e7298451eebe v7-3-882
++76aa34cef80f5d22bbbcf60278c833fdadd70131 v7-3-883
++22adc26aaa9f701267bd1ee4636592859ee2dc70 v7-3-884
++c5eab656ec51dc2d40ef6e39194c74af868a4b5e v7-3-885
++902d6ab377ee2f011279b3aaebeb05d0f5c2bf80 v7-3-886
++015e53d9978721bbb9283a999c668c98ad2554a9 v7-3-887
++b0b253898cf9ff8f5fbacf69de76b5640b1b6a55 v7-3-888
++cb0c694517a08f1f8f548f0771e874537a390dd4 v7-3-889
++89bdd6d575101291c66f9e701c456ee71085d147 v7-3-890
++1dc160bf2488fb1332250edaefcc9f1e320c8e57 v7-3-891
++6c2e8074ea2588f710adc669e7a15041f6e80adc v7-3-892
++dc3efb6d5a0821c79f939db8e3b77a714292195c v7-3-893
++52e946d654e0fe978609e0a23dde3c8998f2ce24 v7-3-894
++11007e80829ca9d72813a9c60a2eded80a0c1855 v7-3-895
++af3a3680fc75f090e896d902f0b4c7a710c41d41 v7-3-896
++5aa74a2f8f9de4a6c10bdebbef910d6750f2a980 v7-3-897
++aca1886102bdf19f755dc5eb1ac379f1f0680f6d v7-3-898
++bb3cfdb626077d9236447f40ee725b9a5d78216b v7-3-899
++b53fa3b431934de82d3bee329643bbe0856f651b v7-3-900
++790238e5a46c70f45232c0a54d0c73a6ca1d37dd v7-3-901
++b01e3cff92530f6c317e0cf2c0ba0fb4f97df883 v7-3-902
++166b3df562ead7b4f85a494fb8a6eef40affdf85 v7-3-903
++bdab73bf24a8b361a42ffcf429c0aa705d4594e0 v7-3-904
++8e1d1da398b378cf03c0910979cf475ddb2df7e3 v7-3-905
++ff1f3e42df08b2ebc39e3b1f2c80f4751bf16dbc v7-3-906
++9f3da1dea7c0944837e8d5a080eb59a24f6c9dd7 v7-3-907
++4281875776fb2c3127d08a03c3600b58353c9796 v7-3-908
++b79f3c3a584c701e93acd1881a934c931634c39f v7-3-909
++d8d9c591c50fec51b64c12bd2f42d3550bd31d7d v7-3-910
++f1eab4f77a6fe4b77508d86a68a6681195806607 v7-3-911
++62eadd7de409641de83ce61e1eb311e9116e06fa v7-3-912
++0d3573091d42d4797f10cff1c4139557d384f899 v7-3-913
++9f642ac84df9303d34d0214da2ade28f78ecfb6c v7-3-914
++d8053e6bf72a555ed34201c6edb55a23b4fc9965 v7-3-915
++f39af34195702c5587eff88dec51b40e327f418d v7-3-916
++3887b02953cec045611021e0adcd512b3d127692 v7-3-917
++6a8ffaf0585660badbb817f6a2f1cb583c9f1447 v7-3-918
++12636b8248163628e7c8df68210dc17932440157 v7-3-919
++923277a9cce4316d6b4cb3c6571dab538a6b0108 v7-3-920
++97474f967eec7f24f09d20dbac65ec9bb660bb2e v7-3-921
++1d56e5dfa08e68c9ef0645cabf076e401799e3bd v7-3-922
++6ecb80dc6521837e28bc58d27539767d6947037d v7-3-923
++7eaccdaa530431c15fb0e0803e5495074e883bb9 v7-3-924
++04736b4030ecfa2c9e8d6046ea533718dc5d8ff0 v7-3-925
++c80838526eebf3374fc42febcf40cd911cc1523c v7-3-926
++d67e292af6f9d259d0893c8062f3896a8aac000f v7-3-927
++6d45e6f974159e816a4300877296e9a0760ad113 v7-3-928
++94aa0d30a3ea6291daf7e6207810ec5282cc97a4 v7-3-929
++d85196defe0da017ff6d547e36bcf40aecba9661 v7-3-930
++fe0c7437ae8b0e05b57990549e1ddc71e456f18e v7-3-931
++b7f2d97ae2b7442c46c48ef36d9e33c3ddd34db7 v7-3-932
++c9820396afb971035e722ddce2058d5db2f0fc64 v7-3-933
++000bb500208d54e17de26bd5cc5a18fae8d1729c v7-3-934
++c42e130ebf36515e574d89efbe98fe380ec7c694 v7-3-935
++e7361b2d8136f6468daedf1bec7390d77c5c5bb1 v7-3-936
++8ec7323f417d998685afc26bbb4e466eb0204352 v7-3-937
++a2f03b41dca7024da5e702d016ae52fe7f51594c v7-3-938
++48a22f36ff45659594ca865f502fe95691b2e332 v7-3-939
++e2db42528a5bf380bc7e92e41afc807b27f01c12 v7-3-940
++da71e66dc1d4300cd792f0da77a5afd99d634c6c v7-3-941
++358c10968c7fcb2599356b419473a3fd46edcb69 v7-3-942
++736b8e18a3bced7e498a6b81e7189d78cf4671e0 v7-3-943
++71fa86c8fd4a1af0a27a880ea15e3a7b97334453 v7-3-944
++80eea7a9d6b9c2e7e8ceb18d6a090387f7e1e9f5 v7-3-945
++11376842075637114ee3714ccbc2e0e8a432a4ac v7-3-946
++a84f21892563be88839b4026bafba77f9e9a1fec v7-3-947
++a6f0544df95e5f783861d3c67d84bc5a28a315da v7-3-948
++cfd76908da252e03f46ea15cde44a3664e895fb0 v7-3-949
++d4816e7c33289b9c8aec739850133484c5c3e8fa v7-3-950
++907b1f035ee7cc61fec1463db85a9eaba4717120 v7-3-951
++2a166caf8709876053f9b32f4f88590a4fbc6899 v7-3-952
++7b789d337820088f09f6a8fb488efd418f702133 v7-3-953
++1afdb7d21c14e15a1239d406205563dd702d7d24 v7-3-954
++fa90ebf2c8f36d98ef27b2668ac1e1c11db75bbe v7-3-955
++0bbacb6a83bd678266a0a864e47f4e03927103fd v7-3-956
++c16602758d847665ed50138a562f1513ca5dedc8 v7-3-957
++58b74ab7f29df09e54bf76ac84697f04b9f4c163 v7-3-958
++ef6b11bb183da058edf52c86ce705726ccf72600 v7-3-959
++e67522c4f56646bd6ef91ad63b152bcec96b2e05 v7-3-960
++d5177d5ece0c539680390448c8ce8d05a6d61201 v7-3-961
++0a94ac379769762200c427995551fa4325ec8f28 v7-3-962
++7eafa576528e6921f337da5c1e3e2d0a9617993a v7-3-963
++7d81f4e967285d14c9e9901328d2c66911a9a2f2 v7-3-964
++8a3ca4adb5d8046f87aabcf30a2b7aefb8b9d46c v7-3-965
++9b800f0a757fcbedc2c6a1851353c3e5044d39b2 v7-3-966
++20e30e31bd86390590e288516670b81caec6188c v7-3-967
++dfbe53a54c790d63f8788c13a6a2d18198825605 v7-3-968
++137f9d41f50894cd25e5b47764af817dd84037cd v7-3-969
++ccecb03e5e8ba41db171a5535047f9a30b5d391d v7-3-970
++8d6bb2338a583af5eb85589949065cfe46c42bd4 v7-3-971
++ba53304245f033b6cf2f6088c09f45dc0d98c47c v7-3-972
++09e1e574a52d38522a35af8741b3f8ce92336398 v7-3-973
++92fec4b83be56a65ed81f25885717f6db7639854 v7-3-974
++44b89b025cdfb6a7371a036ef1b2dd93670b2a15 v7-3-975
++015a8fabf90072ae0eadee5c013f7db00f83977c v7-3-976
++21e13403140aec6f32a8f9b49dac02c37945ab11 v7-3-977
++fe8a0a6a1c2a2ca51c92275a9010999106505ed8 v7-3-978
++a63361b9097952faa9c9eba2caebef09b9f8b62b v7-3-979
++c83656c9745a005df1aa7d6985787048a1884734 v7-3-980
++4ff8fa416a0dd64046e0471933d09f7f19a4ea0f v7-3-981
++dde1cf311be6edf32243f03fd8436bdf9798de93 v7-3-982
++ab5154170c3dfc0dd769243e1da53a865e1f69d7 v7-3-983
++94c5441984cc47971ac49435d184c13cd6d3014b v7-3-984
++0c940b6f282836186f428d201760c6f6b9b52fc6 v7-3-985
++3cc2dca142a0aed29befbe6d2944ed580d728545 v7-3-986
++032c9f916f257ed59f7c55a6c8113791d3def365 v7-3-987
++035fb0d5e7ce67eaff19a6cadb37b57c0c25a36b v7-3-988
++cd005ab15ef3fce8f551c81ea10c93889f42d09d v7-3-989
++9a1d78f828261181232734378f73d648148a42bc v7-3-990
++8fe768bc1234fc817db3cda61ae9e9dabf4ae958 v7-3-991
++89ea7593fc0cb9ec66cc04619217447715289a78 v7-3-992
++dff1542e64f95a3fe10ea24f4007206d53880087 v7-3-993
++f74611bfb1b77eb2ad42b6d74b3e3657cf3f0725 v7-3-994
++6d517f6e5f0b031cdb386878d8d428f7f2cfc2a1 v7-3-995
++ebd94eabfd8013a605d8efc7df64a970531fd5a8 v7-3-996
++ef02f32d8e53a7b3d7327ac79359a18070e4a101 v7-3-997
++47e6dec5ce3cbc8e833480b8300132d4bf5f035e v7-3-998
++e6e60d9da892296ad770b26a22f98bb72c4e1b7d v7-3-999
++d037b9cbdaaa0af2b383c93acd0fd87e8eb2b8f1 v7-3-1000
++9dbbddb2ed10936c20048ad28a2dcb9fdb6cdd79 v7-3-1001
++b498224f5b417bc436c9b967978628703191c0d9 v7-3-1002
++ce94a870b59bbaad92399eb782edc33a855e0b93 v7-3-1003
++cadb57fbb78165c81fe4718a355b5f73c641bb62 v7-3-1004
++90e9917d4114461c5f7258c04e61de1dff2e1a74 v7-3-1005
++9a2183bd829502597d52f22a1c27fec8399298fd v7-3-1006
++fba9c0f86f77942d47a5505b065e01a733e7f111 v7-3-1007
++8cb14f59a3275cb183f031e2aa1e29e230635d6f v7-3-1008
++57393dc4b811a1283a77c759a09bc52ba78acb8d v7-3-1009
++36ddcf4cecbc96b9854af6956f371dea205a6890 v7-3-1010
++55bcaa1d2749f9dc22187bea848b002220cfe960 v7-3-1011
++432a6b8c7d933dee8faf25a342e857fa0a538eea v7-3-1012
++1be43c095affe8e945751a5cb4e21210f31c02ab v7-3-1013
++6a2005efa02b4ae30fa4867db1463fd4a3689843 v7-3-1014
++45f97c34953728cfe859cfe5212c241fab1da20f v7-3-1015
++5cc98a5898cf9ff0841c78acfe1056ae075a217a v7-3-1016
++532c2e850256cced37b8864ee7042ef8240f135a v7-3-1017
++80170d61a85cc03d66228c16c80cd8a4898a971e v7-3-1018
++08ac4698095359c3a888b34074548435e9775973 v7-3-1019
++f7944ce459ac77416617e0b2f8a91a9c8cb385b6 v7-3-1020
++fc997f05cbc7b566df765c79452a541afaadccb8 v7-3-1021
++849180347ac359fd52b92d70b545800126178eab v7-3-1022
++f0c37f5cf4eabb04044ccab4031cc4056c5a47a2 v7-3-1023
++7b835b2969af137f979b633977d59e13cc0960df v7-3-1024
++b2946c06d1b6d4e9d38fad1d4281e2d4db3523f3 v7-3-1025
++888c12c899e552deb33b2e1e8ea3c8141352c3ce v7-3-1026
++04086e29756318d7a7cfe3d35fd38ccf550ac366 v7-3-1027
++4d81fdda8f35cf764744161118aeaec948b9fc90 v7-3-1028
++e7016af0cbf92a5562c01e95f2cec306b6465783 v7-3-1029
++d1f3c77159f9b69f229ee0f70fd98464b2546920 v7-3-1030
++96c1a785009768720fcb16add8b9daf1290ce56d v7-3-1031
++f262fb02889d46743226a78363250e2e1ed7426b v7-3-1032
++b2a8e3a66f8cc73c3942ef5cb9c0519df86203cd v7-3-1033
++37e444aeb33b2adf359f8736807f18ff5dc11019 v7-3-1034
++626e9ccb7c48b3fa7ff6d2ca5efe91bff39135dc v7-3-1035
++b22bff1a6af81dd78f8e9ff0bcded471ab858245 v7-3-1036
++7a2be4a39423e4763ca164dc77fcfd4b27f91a8e v7-3-1037
++6a73ac422c67d7ad4642ae9194cf9d4c832021d2 v7-3-1038
++321cfbef943199e8e967f6354877ca8fc07e4551 v7-3-1039
++b9f87487d93597f69f09ecab8cdca11bef6c09d0 v7-3-1040
++63c9b681c3dba1cfcd2df48085de2453c43855af v7-3-1041
++fa39483a1363d533f9c7897d476bf0ebd1b8f44b v7-3-1042
++1e8952a5a726ddc1458ff40270cd5da16be3f272 v7-3-1043
++0cf552b325b55d417079ad28dff4e27afec5a2ca v7-3-1044
++29b2be2bba0d369fef85af7aa3196f8b84cce35c v7-3-1045
++00eecb2f8e3e9664ff00682d278a2b1e19cc4b09 v7-3-1046
++89bec74fd7936cc425b42f9e882f1f3864b1c95d v7-3-1047
++19d406a8509d9755b05af7d5ea521925b01f0d76 v7-3-1048
++074491a83571596acb6aac6d371140e8f99fbc24 v7-3-1049
++38276cfe40b2069f94b159cc14b4ade47257c836 v7-3-1050
++70600448f9e7f3bff3b8b0c2f2733662bac08ea8 v7-3-1051
++12421d8a45d5597828b8343c31faa79f77d9c512 v7-3-1052
++49f0fcd9762ce5057e4ac22417105b3ce43a35f3 v7-3-1053
++219b2fcad60d27febcaf7251a91be331484b2c98 v7-3-1054
++5679b8ddd8cc0eb004cbb61babb336c3af398c92 v7-3-1055
++21a99611149b0f1c200e001ec26b8b07c6e28c45 v7-3-1056
++90beab957ba9ebeac150bc5a56cf6ad90f53336d v7-3-1057
++66e615ce7f61948a2a4a8615d703a42d56763490 v7-3-1058
++548b889fe3cfbf06ab50de373df5e65f52cb249c v7-3-1059
++cb5c1e37ad4d4811e5fe178f14c523b178da81ec v7-3-1060
++18ba89e06fab93e8cdf7ca8dfbb34b66ff9d61d1 v7-3-1061
++e4e48d4ee0409509d56f7d654b77a35133283bc7 v7-3-1062
++4157fef7b95074cac55977127964adfa883ec030 v7-3-1063
++3857d399ab41ee8af64c5307c27da64b01e0a233 v7-3-1064
++07c534fe9b6cdbfecfd100b7e01f894d6708de1b v7-3-1065
++4c46e1487c634997f4701d8e68ba9ab019f85227 v7-3-1066
++52a4f66ae1f5695426de21877b2954d11ad8a4f4 v7-3-1067
++59e6c2bd68e38244d2133fc8d76bfc9c7b082d9f v7-3-1068
++6ec3dada4ad3c7e2551191e598cfb6d37bedac36 v7-3-1069
++c316a30a889217be4158fba900c85d9d44ad3a1b v7-3-1070
++857f6c53f1172ed836d44f105f6832973369bef5 v7-3-1071
++9f502d8d5165a79b361ad6048e84c278e1397f88 v7-3-1072
++f10f63aaec5c08e6f3b1b3abdef6ce3eef1cff6f v7-3-1073
++b943fd24c351141113dba360bd1d1f02b38813f5 v7-3-1074
++779ca415f8e142ab5ca74f95c8f732d1f00fb7dc v7-3-1075
++93b7ed814bec8a9a0b43138be7500b948d48eb92 v7-3-1076
++80b0081824fa3084d0e12f0b21f6e504b4e5e076 v7-3-1077
++0dce3d812e7acc74c39b3d87d8bb5b3a4dbee878 v7-3-1078
++bce2051173f01564805158ff669255359953fcad v7-3-1079
++7a35419393c36edcb710602edba31d5096d357d0 v7-3-1080
++9e7ef781d494694a36e056631dbd2c4357ab1090 v7-3-1081
++2d15582e132f62aa37e5eea5e837b3824f148dd2 v7-3-1082
++b3c59716e7001ab5127c259c9fd3552de0d36d53 v7-3-1083
++05d57d7c2d5578f1d794151be9cbb5aef89d821e v7-3-1084
++811a4c9b51d808cbd54dd0bab606d7cc1cc2e412 v7-3-1085
++c1622ff9ed8d984604a47ad0805d3fc528452bde v7-3-1086
++4d92b873acefb69e112fd73b642bfdf7979f1355 v7-3-1087
++2f51ee8825dbeb31713e635fd8d77ef77742ad64 v7-3-1088
++79522bb1712556183073b148e085d302967d7260 v7-3-1089
++8db697ae406a8ceb05f9fb8b45a70980904f230a v7-3-1090
++371cc0c44097772ac13e0e3cb59350c6be52257a v7-3-1091
++9d97a0c045ef5c86652c7fae4d4cd5752bcb42d6 v7-3-1092
++08fbb1ce1bc56e3884c5d35106df31a9cae1f954 v7-3-1093
++efc4fb311d5d45f6320b9d17ed47d24748335bcb v7-3-1094
++ed4e689bbea1c45a8aeb808b526dfd052470ef20 v7-3-1095
++2db0050523719e39f17f4bd855310bf5688155f5 v7-3-1096
++0c25fa1dfd97721cd4c92f4e7a9a524a24f3f43e v7-3-1097
++26f2dbea7443f719c854c7a1fc35dbacdd129307 v7-3-1098
++542af01979be709a4763eb8b9cc1cbcfaf584838 v7-3-1099
++bf917ee1fad22f643d7ef1a919b233f07fc1fb3c v7-3-1100
++761e42cc79c2560af55ebec0ec1060f547e64577 v7-3-1101
++1c5da99d1b708b7af2928e7bc0d9d57935872958 v7-3-1102
++832bf8136d86dd17489d962cd2d7316d7edf5087 v7-3-1103
++fc4d7f02ea3ac731a9717438c72aba098b117e8e v7-3-1104
++a804309e7327f0ece015aace3c855e7987f0ac3d v7-3-1105
++ec72bb4a0fc2e7f0d517cb12f784770cea9cc19c v7-3-1106
++bd6bef0bd0fbeb79b440e429f5e077169388198c v7-3-1107
++3534e9b4fa42b392399d66d08a1dcdd230accba5 v7-3-1108
++450e13fe16211217f32bc57c3827f439540398bf v7-3-1109
++3849c811cc0bccbe09a559e2be5fec7e810510cc v7-3-1110
++43de4ebbe7ad009199987337b864240ba19bfec6 v7-3-1111
++749e2b2755d59eedd6fd28e7d9ec47523b722be7 v7-3-1112
++0798b096bab3efde994f0b50d6776ac72ca0f41c v7-3-1113
++532c31f9e92fd44526d02d26c503a15c1c1c78c2 v7-3-1114
++3f2319a953b3c2fc8cbe9ae9225080a5b30a638a v7-3-1115
++66a9e8fa6f45ddd8dec5b98c193abc576330e4d4 v7-3-1116
++97560c16ca99a1341f31d88ed9f508d777647b5c v7-3-1117
++6a706ca7a889d27ecd6b671e31dbe28ab6b66f28 v7-3-1118
++a62695305e031260557ff0cde6eca1db5ab9e3e9 v7-3-1119
++d1376091d18b5a742ada87bf825d20e99ccbef19 v7-3-1120
++4b9503f0c7d3d75d772c2c0dbe19616da2480749 v7-3-1121
++7793e737ec8723a18d4c5468b33a895249ba4f02 v7-3-1122
++77ecab3bb2078fe525602172b35c2031c819ade3 v7-3-1123
++be1e4acb30cab46ab439e45b9b6871a7aff23800 v7-3-1124
++96f3348f9f119a996ae8826ef4d5a06c3f7e677f v7-3-1125
++b25a1b2e3175902e49a69e8d9ccc5c1cc43fbe3f v7-3-1126
++532a9855bd30d28cc14848ce5136658a273bc999 v7-3-1127
++47906f888725760ac704668b71057629e266e486 v7-3-1128
++f824cb97eb922975cdc1025f3c2c62f1bdbcfdd6 v7-3-1129
++ec24ff78a79c1851d8003780035d6c55f98dcceb v7-3-1130
++82e6588762e4aee5b0f0cd51d5c124ebfec6424d v7-3-1131
++b20dbf3a5370543ffaa1d6fc337df1969843477e v7-3-1132
++03375ccf28a27ed72f6cf347383aaacbd1a51e4d v7-3-1133
++531e598651fc6a7c28bc808d82c09ddc1759bf4f v7-3-1134
++e4bc21965079eb6948d8e22ad96d145659852707 v7-3-1135
++343d09006056ff408f08850317b8e8caf056f5fe v7-3-1136
++c02c7df9bdc91ae08ef626d4a8262fed47285c41 v7-3-1137
++47222d8b1e94c962f9daf6c2ff3f6c6ddcb71613 v7-3-1138
++3b5a023a45434e825b8dbeed551cf7f4578243f6 v7-3-1139
++7fde662e1db24077abbe26e6d78c286928f5c9b6 v7-3-1140
+diff -Naur vim73.orig/Filelist vim73/Filelist
+--- vim73.orig/Filelist	2010-08-07 11:04:57.000000000 +0000
++++ vim73/Filelist	2013-06-07 17:07:05.425659845 +0000
+@@ -39,6 +39,7 @@
+ 		src/mark.c \
+ 		src/mbyte.c \
+ 		src/memfile.c \
++		src/memfile_test.c \
+ 		src/memline.c \
+ 		src/menu.c \
+ 		src/message.c \
+@@ -56,6 +57,7 @@
+ 		src/popupmnu.c \
+ 		src/quickfix.c \
+ 		src/regexp.c \
++		src/regexp_nfa.c \
+ 		src/regexp.h \
+ 		src/screen.c \
+ 		src/search.c \
+@@ -72,6 +74,7 @@
+ 		src/version.c \
+ 		src/version.h \
+ 		src/vim.h \
++		src/winclip.c \
+ 		src/window.c \
+ 		src/xxd/xxd.c \
+ 		src/main.aap \
+@@ -80,6 +83,7 @@
+ 		src/testdir/test[0-9]*.ok \
+ 		src/testdir/test49.vim \
+ 		src/testdir/test60.vim \
++		src/testdir/test83-tags? \
+ 		src/proto.h \
+ 		src/proto/blowfish.pro \
+ 		src/proto/buffer.pro \
+@@ -128,6 +132,7 @@
+ 		src/proto/ui.pro \
+ 		src/proto/undo.pro \
+ 		src/proto/version.pro \
++		src/proto/winclip.pro \
+ 		src/proto/window.pro \
+ 
+ 
+@@ -259,8 +264,10 @@
+ 		src/Make_mvc.mak \
+ 		src/Make_w16.mak \
+ 		src/bigvim.bat \
++		src/bigvim64.bat \
+ 		src/msvcsetup.bat \
+ 		src/msvc2008.bat \
++		src/msvc2010.bat \
+ 		src/dimm.idl \
+ 		src/dlldata.c \
+ 		src/dosinst.c \
+@@ -311,6 +318,7 @@
+ 		src/xxd/Make_bc5.mak \
+ 		src/xxd/Make_cyg.mak \
+ 		src/xxd/Make_djg.mak \
++		src/xxd/Make_ming.mak \
+ 		src/xxd/Make_mvc.mak \
+ 		nsis/gvim.nsi \
+ 		nsis/README.txt \
+@@ -345,6 +353,13 @@
+ 		src/vim*.ico \
+ 		src/vim.tlb \
+ 		src/vimtbar.lib \
++		src/xpm/COPYRIGHT \
++		src/xpm/README.txt \
++		src/xpm/include/*.h \
++		src/xpm/x64/lib/libXpm.a \
++		src/xpm/x64/lib/libXpm.lib \
++		src/xpm/x86/lib/libXpm.a \
++		src/xpm/x86/lib/libXpm.lib \
+ 		src/vimtbar.dll \
+ 		nsis/icons/*.bmp \
+ 		nsis/icons/*.ico \
+@@ -426,20 +441,14 @@
+ 		$(SRC_VMS) \
+ 		README_os390.txt \
+ 		src/Make_mint.mak \
+-		src/Make_ro.mak \
+-		src/gui_riscos.c \
+-		src/gui_riscos.h \
+ 		src/if_sniff.c \
+ 		src/infplist.xml \
+ 		src/link.390 \
+ 		src/os_beos.c \
+ 		src/os_beos.h \
+ 		src/os_beos.rsrc \
++		src/proto/os_beos.pro \
+ 		src/os_mint.h \
+-		src/os_riscos.c \
+-		src/os_riscos.h \
+-		src/proto/gui_riscos.pro \
+-		src/proto/os_riscos.pro \
+ 		src/os_vms_fix.com \
+ 		src/toolbar.phi \
+ 
+@@ -466,6 +475,7 @@
+ 		runtime/macros/hanoi/hanoi.vim \
+ 		runtime/macros/hanoi/poster \
+ 		runtime/macros/justify.vim \
++		runtime/macros/less.bat \
+ 		runtime/macros/less.sh \
+ 		runtime/macros/less.vim \
+ 		runtime/macros/life/click.me \
+@@ -669,6 +679,8 @@
+ 
+ # generic language files
+ LANG_GEN = \
++		runtime/doc/*-de.1 \
++		runtime/doc/*-de.UTF-8.1 \
+ 		runtime/doc/*-fr.1 \
+ 		runtime/doc/*-fr.UTF-8.1 \
+ 		runtime/doc/*-it.1 \
+@@ -685,7 +697,17 @@
+ 		runtime/tutor/Makefile \
+ 		runtime/tutor/tutor.utf-8 \
+ 		runtime/tutor/tutor.?? \
+-		runtime/tutor/tutor.??.* \
++		runtime/tutor/tutor.??.utf-8 \
++		runtime/tutor/tutor.??.euc \
++		runtime/tutor/tutor.??.sjis \
++		runtime/tutor/tutor.??.iso9 \
++		runtime/tutor/tutor.??.big5 \
++		runtime/tutor/tutor.??.cp1250 \
++		runtime/tutor/tutor.??.cp1251 \
++		runtime/tutor/tutor.??.cp737 \
++		runtime/tutor/tutor.??_??.utf-8 \
++		runtime/tutor/tutor.bar \
++		runtime/tutor/tutor.bar.utf-8 \
+ 		runtime/spell/README.txt \
+ 		runtime/spell/??/*.diff \
+ 		runtime/spell/??/main.aap \
+diff -Naur vim73.orig/Makefile vim73/Makefile
+--- vim73.orig/Makefile	2010-08-15 12:23:34.000000000 +0000
++++ vim73/Makefile	2013-06-07 17:07:05.432326493 +0000
+@@ -23,6 +23,9 @@
+ # has run can result in compiling with $(CC) empty.
+ 
+ first:
++	@if test ! -f src/auto/config.mk; then \
++		cp src/config.mk.dist src/auto/config.mk; \
++	fi
+ 	@echo "Starting make in the src directory."
+ 	@echo "If there are problems, cd to the src directory and run make there"
+ 	cd src && $(MAKE) $@
+@@ -30,6 +33,9 @@
+ # Some make programs use the last target for the $@ default; put the other
+ # targets separately to always let $@ expand to "first" by default.
+ all install uninstall tools config configure reconfig proto depend lint tags types test testclean clean distclean:
++	@if test ! -f src/auto/config.mk; then \
++		cp src/config.mk.dist src/auto/config.mk; \
++	fi
+ 	@echo "Starting make in the src directory."
+ 	@echo "If there are problems, cd to the src directory and run make there"
+ 	cd src && $(MAKE) $@
+diff -Naur vim73.orig/README.txt vim73/README.txt
+--- vim73.orig/README.txt	2010-08-15 12:23:19.000000000 +0000
++++ vim73/README.txt	2013-06-07 17:07:05.462326407 +0000
+@@ -97,10 +97,12 @@
+ If you have problems, have a look at the Vim FAQ:
+ 	http://vimdoc.sf.net/vimfaq.html
+ 
+-Send bug reports to:
+-	Bram Moolenaar <Bram@vim.org>
++If you still have problems or any other questions, use one of the mailing
++lists to discuss them with Vim users and developers:
++	http://www.vim.org/maillist.php
+ 
+-There are several mailing lists for Vim, see http://www.vim.org/maillist.php.
++If nothing else works, report bugs directly:
++	Bram Moolenaar <Bram@vim.org>
+ 
+ 
+ MAIN AUTHOR
+diff -Naur vim73.orig/README_extra.txt vim73/README_extra.txt
+--- vim73.orig/README_extra.txt	2010-08-15 12:23:19.000000000 +0000
++++ vim73/README_extra.txt	2013-06-07 17:07:05.605659331 +0000
+@@ -13,9 +13,6 @@
+ 
+ src/os_amiga.*		Files for the Amiga port.
+ 
+-src/gui_riscos.*
+-src/os_riscos.*		Files for the RISC OS port.
+-
+ src/gui_beos.*
+ src/os_beos.*		Files for the BeOS port.
+ 
+diff -Naur vim73.orig/runtime/autoload/ada.vim vim73/runtime/autoload/ada.vim
+--- vim73.orig/runtime/autoload/ada.vim	2010-05-15 11:03:31.000000000 +0000
++++ vim73/runtime/autoload/ada.vim	2013-06-07 17:07:06.515656734 +0000
+@@ -29,6 +29,8 @@
+ if version < 700
+    finish
+ endif 
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Section: Constants {{{1
+ "
+@@ -619,6 +621,9 @@
+ lockvar! g:ada#Keywords
+ lockvar! g:ada#Ctags_Kinds
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ finish " 1}}}
+ 
+ "------------------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/autoload/ccomplete.vim vim73/runtime/autoload/ccomplete.vim
+--- vim73.orig/runtime/autoload/ccomplete.vim	2010-05-15 11:03:31.000000000 +0000
++++ vim73/runtime/autoload/ccomplete.vim	2013-06-07 17:07:06.532323353 +0000
+@@ -1,8 +1,10 @@
+ " Vim completion script
+ " Language:	C
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2010 Mar 23
++" Last Change:	2012 Jun 20
+ 
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+ " This function is used for the 'omnifunc' option.
+ function! ccomplete#Complete(findstart, base)
+@@ -498,7 +500,7 @@
+   endif
+   if !cached
+     while 1
+-      exe 'silent! ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
++      exe 'silent! keepj noautocmd ' . n . 'vimgrep /\t' . typename . '\(\t\|$\)/j ' . fnames
+ 
+       let qflist = getqflist()
+       if len(qflist) > 0 || match(typename, "::") < 0
+@@ -603,3 +605,6 @@
+   endfor
+   return res
+ endfunc
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/autoload/clojurecomplete.vim vim73/runtime/autoload/clojurecomplete.vim
+--- vim73.orig/runtime/autoload/clojurecomplete.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/autoload/clojurecomplete.vim	2013-06-07 17:07:06.545656648 +0000
+@@ -0,0 +1,20 @@
++" Vim completion script
++" Language:     Clojure
++" Maintainer:   Sung Pae <self@sungpae.com>
++" URL:          https://github.com/guns/vim-clojure-static
++" License:      Same as Vim
++" Last Change:  05 February 2013
++
++" Special forms and public vars in clojure.core
++" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-002/vim_clojure_static.clj
++" Clojure 1.5.0-RC6
++let s:words = ["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-readably*","*read-eval*","*read-whitelist*","*source-path*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods",".","..","/","<","<=","=","==",">",">=","EMPTY-NODE","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc!","assoc","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","booleans","bound-fn","bound-fn*","bound?","butlast","byte","byte-array","bytes","case","cast","catch","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","concat","cond","cond->","cond->>","condp","conj!","conj","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","def","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj!","disj","dissoc!","dissoc","distinct","distinct?","do","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","doubles","drop","drop-last","drop-while","empty","empty?","ensure","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","finally","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","hash","hash-combine","hash-map","hash-set","identical?","identity","if","if-let","if-not","ifn?","import","in-ns","inc","inc'","init-proxy","instance?","int","int-array","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mod","monitor-enter","monitor-exit","munge","name","namespace","namespace-munge","neg?","new","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop!","pop","pop-thread-bindings","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","quot","quote","rand","rand-int","rand-nth","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","realized?","recur","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seque","sequence","sequential?","set!","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","slurp","some","some->","some->>","some-fn","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","symbol","symbol?","sync","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","throw","time","to-array","to-array-2d","trampoline","transient","tree-seq","true?","try","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","update-in","update-proxy","use","val","vals","var","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","when","when-first","when-let","when-not","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"]
++
++" Simple word completion omnifunc
++function! clojurecomplete#Complete(findstart, base)
++    if a:findstart
++        return searchpos('\<', 'bnW', line('.'))[1] - 1
++    else
++        return { 'words': filter(copy(s:words), 'v:val =~ "\\V\\^' . a:base . '"') }
++    endif
++endfunction
+diff -Naur vim73.orig/runtime/autoload/getscript.vim vim73/runtime/autoload/getscript.vim
+--- vim73.orig/runtime/autoload/getscript.vim	2010-05-15 11:03:31.000000000 +0000
++++ vim73/runtime/autoload/getscript.vim	2013-06-07 17:07:06.592323181 +0000
+@@ -1,8 +1,8 @@
+ " ---------------------------------------------------------------------
+ " getscript.vim
+-"  Author:	Charles E. Campbell, Jr.
+-"  Date:	Dec 28, 2009
+-"  Version:	32
++"  Author:	Charles E. Campbell
++"  Date:	Apr 17, 2013
++"  Version:	35
+ "  Installing:	:help glvs-install
+ "  Usage:	:help glvs
+ "
+@@ -15,7 +15,7 @@
+ if exists("g:loaded_getscript")
+  finish
+ endif
+-let g:loaded_getscript= "v32"
++let g:loaded_getscript= "v35"
+ if &cp
+  echoerr "GetLatestVimScripts is not vi-compatible; not loaded (you need to set nocp)"
+  finish
+@@ -74,6 +74,11 @@
+  let g:GetLatestVimScripts_allowautoinstall= 1
+ endif
+ 
++" set up default scriptaddr address
++if !exists("g:GetLatestVimScripts_scriptaddr")
++ let g:GetLatestVimScripts_scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='
++endif
++
+ "" For debugging:
+ "let g:GetLatestVimScripts_wget    = "echo"
+ "let g:GetLatestVimScripts_options = "options"
+@@ -314,7 +319,7 @@
+   if &mod
+    silent! w!
+   endif
+-  q
++  q!
+ 
+   " restore events and current directory
+   exe "cd ".fnameescape(substitute(origdir,'\','/','ge'))
+@@ -415,7 +420,7 @@
+   echo 'considering <'.aicmmnt.'> scriptid='.scriptid.' srcid='.srcid
+ 
+   " grab a copy of the plugin's vim.sourceforge.net webpage
+-  let scriptaddr = 'http://vim.sourceforge.net/script.php?script_id='.scriptid
++  let scriptaddr = g:GetLatestVimScripts_scriptaddr.scriptid
+   let tmpfile    = tempname()
+   let v:errmsg   = ""
+ 
+@@ -519,6 +524,7 @@
+    " --------------------------------------------------------------------------
+    " AutoInstall: only if doautoinstall has been requested by the plugin itself
+    " --------------------------------------------------------------------------
++"   call Decho("checking if plugin requested autoinstall: doautoinstall=".doautoinstall)
+    if doautoinstall
+ "    call Decho(" ")
+ "    call Decho("Autoinstall: getcwd<".getcwd()."> filereadable(".sname.")=".filereadable(sname))
+@@ -526,7 +532,7 @@
+ "     call Decho("<".sname."> is readable")
+ "     call Decho("exe silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall))
+      exe "silent !".g:GetLatestVimScripts_mv." ".shellescape(sname)." ".shellescape(s:autoinstall)
+-     let curdir    = escape(substitute(getcwd(),'\','/','ge'),"|[]*'\" #")
++     let curdir    = fnameescape(substitute(getcwd(),'\','/','ge'))
+      let installdir= curdir."/Installed"
+      if !isdirectory(installdir)
+       call mkdir(installdir)
+@@ -549,25 +555,42 @@
+      " decompress
+      if sname =~ '\.bz2$'
+ "      call Decho("decompress: attempt to bunzip2 ".sname)
+-      exe "silent !bunzip2 ".shellescape(sname)
++      exe "sil !bunzip2 ".shellescape(sname)
+       let sname= substitute(sname,'\.bz2$','','')
+ "      call Decho("decompress: new sname<".sname."> after bunzip2")
+      elseif sname =~ '\.gz$'
+ "      call Decho("decompress: attempt to gunzip ".sname)
+-      exe "silent !gunzip ".shellescape(sname)
++      exe "sil !gunzip ".shellescape(sname)
+       let sname= substitute(sname,'\.gz$','','')
+ "      call Decho("decompress: new sname<".sname."> after gunzip")
++     elseif sname =~ '\.xz$'
++"      call Decho("decompress: attempt to unxz ".sname)
++      exe "sil !unxz ".shellescape(sname)
++      let sname= substitute(sname,'\.xz$','','')
++"      call Decho("decompress: new sname<".sname."> after unxz")
+      else
+ "      call Decho("no decompression needed")
+      endif
+      
+-     " distribute archive(.zip, .tar, .vba) contents
++     " distribute archive(.zip, .tar, .vba, ...) contents
+      if sname =~ '\.zip$'
+ "      call Decho("dearchive: attempt to unzip ".sname)
+       exe "silent !unzip -o ".shellescape(sname)
+      elseif sname =~ '\.tar$'
+ "      call Decho("dearchive: attempt to untar ".sname)
+       exe "silent !tar -xvf ".shellescape(sname)
++     elseif sname =~ '\.tgz$'
++"      call Decho("dearchive: attempt to untar+gunzip ".sname)
++      exe "silent !tar -zxvf ".shellescape(sname)
++     elseif sname =~ '\.taz$'
++"      call Decho("dearchive: attempt to untar+uncompress ".sname)
++      exe "silent !tar -Zxvf ".shellescape(sname)
++     elseif sname =~ '\.tbz$'
++"      call Decho("dearchive: attempt to untar+bunzip2 ".sname)
++      exe "silent !tar -jxvf ".shellescape(sname)
++     elseif sname =~ '\.txz$'
++"      call Decho("dearchive: attempt to untar+xz ".sname)
++      exe "silent !tar -Jxvf ".shellescape(sname)
+      elseif sname =~ '\.vba$'
+ "      call Decho("dearchive: attempt to handle a vimball: ".sname)
+       silent 1split
+diff -Naur vim73.orig/runtime/autoload/htmlcomplete.vim vim73/runtime/autoload/htmlcomplete.vim
+--- vim73.orig/runtime/autoload/htmlcomplete.vim	2010-05-15 11:03:31.000000000 +0000
++++ vim73/runtime/autoload/htmlcomplete.vim	2013-06-07 17:07:06.638989715 +0000
+@@ -1,7 +1,7 @@
+ " Vim completion script
+ " Language:	HTML and XHTML
+ " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
+-" Last Change:	2006 Oct 19
++" Last Change:	2011 Apr 28
+ 
+ function! htmlcomplete#CompleteTags(findstart, base)
+   if a:findstart
+@@ -285,6 +285,7 @@
+ 				let cssfiles = styletable + secimportfiles
+ 				let classes = []
+ 				for file in cssfiles
++				  	let classlines = []
+ 					if filereadable(file)
+ 						let stylesheet = readfile(file)
+ 						let stylefile = join(stylesheet, ' ')
+diff -Naur vim73.orig/runtime/autoload/netrw.vim vim73/runtime/autoload/netrw.vim
+--- vim73.orig/runtime/autoload/netrw.vim	2010-07-27 14:55:00.000000000 +0000
++++ vim73/runtime/autoload/netrw.vim	2013-06-07 17:07:06.742322753 +0000
+@@ -1,10 +1,10 @@
+ " netrw.vim: Handles file transfer and remote directory listing across
+ "            AUTOLOAD SECTION
+-" Date:		Jul 27, 2010
+-" Version:	140
+-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
++" Date:		May 18, 2013
++" Version:	149
++" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+ " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
+-" Copyright:    Copyright (C) 1999-2010 Charles E. Campbell, Jr. {{{1
++" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
+ "               Permission is hereby granted to use and distribute this code,
+ "               with or without modifications, provided that this copyright
+ "               notice is copied with it. Like anything else that's free,
+@@ -22,10 +22,10 @@
+ if &cp || exists("g:loaded_netrw")
+   finish
+ endif
+-let g:loaded_netrw = "v140"
+-if v:version < 702
++let g:loaded_netrw = "v149"
++if v:version < 703 || (v:version == 703 && !has("patch465"))
+  echohl WarningMsg
+- echo "***warning*** this version of netrw needs vim 7.2"
++ echo "***warning*** this version of netrw needs vim 7.3.465 or later"
+  echohl Normal
+  finish
+ endif
+@@ -35,14 +35,8 @@
+  let s:ERROR   = 2
+ endif
+ 
+-" sanity checks
+-if v:version < 700
+- call netrw#ErrorMsg(s:WARNING,"you need vim version 7.0 or later for version ".g:loaded_netrw." of netrw",1)
+- finish
+-endif
+-
+ let s:keepcpo= &cpo
+-setlocal cpo&vim
++set cpo&vim
+ "DechoTabOn
+ "call Decho("doing autoload/netrw.vim version ".g:loaded_netrw)
+ 
+@@ -51,12 +45,95 @@
+ " ======================
+ 
+ " ---------------------------------------------------------------------
++" netrw#ErrorMsg: {{{2
++"   0=note     = s:NOTE
++"   1=warning  = s:WARNING
++"   2=error    = s:ERROR
++"  May 01, 2013 : max errnum currently is 93
++fun! netrw#ErrorMsg(level,msg,errnum)
++"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
++
++  if a:level < g:netrw_errorlvl
++"   call Dret("netrw#ErrorMsg : suppressing level=".a:level." since g:netrw_errorlvl=".g:netrw_errorlvl)
++   return
++  endif
++
++  if a:level == 1
++   let level= "**warning** (netrw) "
++  elseif a:level == 2
++   let level= "**error** (netrw) "
++  else
++   let level= "**note** (netrw) "
++  endif
++"  call Decho("level=".level)
++
++  if g:netrw_use_errorwindow
++   " (default) netrw creates a one-line window to show error/warning
++   " messages (reliably displayed)
++
++   " record current window number for NetrwRestorePosn()'s benefit
++   let s:winBeforeErr= winnr()
++"   call Decho("s:winBeforeErr=".s:winBeforeErr)
++
++   " getting messages out reliably is just plain difficult!
++   " This attempt splits the current window, creating a one line window.
++   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
++"    call Decho("write to NetrwMessage buffer")
++    exe bufwinnr("NetrwMessage")."wincmd w"
++"    call Decho("setl ma noro")
++    setl ma noro
++    keepj call setline(line("$")+1,level.a:msg)
++    keepj $
++   else
++"    call Decho("create a NetrwMessage buffer window")
++    bo 1split
++    sil! call s:NetrwEnew()
++    sil! keepj call s:NetrwSafeOptions()
++    setl bt=nofile
++    keepj file NetrwMessage
++"    call Decho("setl ma noro")
++    setl ma noro
++    call setline(line("$"),level.a:msg)
++   endif
++"   call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
++   if &fo !~ '[ta]'
++    syn clear
++    syn match netrwMesgNote	"^\*\*note\*\*"
++    syn match netrwMesgWarning	"^\*\*warning\*\*"
++    syn match netrwMesgError	"^\*\*error\*\*"
++    hi link netrwMesgWarning WarningMsg
++    hi link netrwMesgError   Error
++   endif
++"   call Decho("(ErrorMsg) setl noma ro bh=wipe")
++   setl noma ro bh=wipe
++
++  else
++   " (optional) netrw will show messages using echomsg.  Even if the
++   " message doesn't appear, at least it'll be recallable via :messages
++"   redraw!
++   if a:level == s:WARNING
++    echohl WarningMsg
++   elseif a:level == s:ERROR
++    echohl Error
++   endif
++   echomsg level.a:msg
++"   call Decho("echomsg ***netrw*** ".a:msg)
++   echohl None
++  endif
++
++"  call Dret("netrw#ErrorMsg")
++endfun
++
++" ---------------------------------------------------------------------
+ " NetrwInit: initializes variables if they haven't been defined {{{2
+ "            Loosely,  varname = value.
+ fun s:NetrwInit(varname,value)
++" call Decho("varname<".a:varname."> value=".a:value)
+   if !exists(a:varname)
+    if type(a:value) == 0
+     exe "let ".a:varname."=".a:value
++   elseif type(a:value) == 1 && a:value =~ '^[{[]'
++    exe "let ".a:varname."=".a:value
+    elseif type(a:value) == 1
+     exe "let ".a:varname."="."'".a:value."'"
+    else
+@@ -78,6 +155,8 @@
+ 
+ " ---------------------------------------------------------------------
+ " Default values for netrw's global protocol variables {{{2
++call s:NetrwInit("g:netrw_use_errorwindow",1)
++
+ if !exists("g:netrw_dav_cmd")
+  if executable("cadaver")
+   let g:netrw_dav_cmd	= "cadaver"
+@@ -97,6 +176,10 @@
+ if !exists("g:netrw_ftp_cmd")
+   let g:netrw_ftp_cmd	= "ftp"
+ endif
++let s:netrw_ftp_cmd= g:netrw_ftp_cmd
++if !exists("g:netrw_ftp_options")
++ let g:netrw_ftp_options= "-i -n"
++endif
+ if !exists("g:netrw_http_cmd")
+  if executable("elinks")
+   let g:netrw_http_cmd = "elinks"
+@@ -119,7 +202,20 @@
+ endif
+ call s:NetrwInit("g:netrw_rcp_cmd"  , "rcp")
+ call s:NetrwInit("g:netrw_rsync_cmd", "rsync")
+-call s:NetrwInit("g:netrw_scp_cmd"  , "scp -q")
++if !exists("g:netrw_scp_cmd")
++ if executable("scp")
++  call s:NetrwInit("g:netrw_scp_cmd" , "scp -q")
++ elseif executable("pscp")
++  if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable('c:\private.ppk')
++   call s:NetrwInit("g:netrw_scp_cmd", 'pscp -i c:\private.ppk')
++  else
++   call s:NetrwInit("g:netrw_scp_cmd", 'pscp -q')
++  endif
++ else
++  call s:NetrwInit("g:netrw_scp_cmd" , "scp -q")
++ endif
++endif
++
+ call s:NetrwInit("g:netrw_sftp_cmd" , "sftp")
+ call s:NetrwInit("g:netrw_ssh_cmd"  , "ssh")
+ 
+@@ -139,7 +235,7 @@
+ " Cygwin Detection ------- {{{3
+ if !exists("g:netrw_cygwin")
+  if has("win32") || has("win95") || has("win64") || has("win16")
+-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
++  if  has("win32unix") && &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+    let g:netrw_cygwin= 1
+   else
+    let g:netrw_cygwin= 0
+@@ -157,15 +253,19 @@
+ call s:NetrwInit("g:netrw_chgwin"      , -1)
+ call s:NetrwInit("g:netrw_compress"    , "gzip")
+ call s:NetrwInit("g:netrw_ctags"       , "ctags")
+-if !exists("g:netrw_cursorline")
+- let g:netrw_cursorline= 1
+- let s:netrw_usercul   = &cursorline
+- let s:netrw_usercuc   = &cursorcolumn
++if exists("g:netrw_cursorline") && !exists("g:netrw_cursor")
++ call netrw#ErrorMsg(s:NOTE,'g:netrw_cursorline is deprecated; use g:netrw_cursor instead',77)
++ let g:netrw_cursor= g:netrw_cursorline
+ endif
++call s:NetrwInit("g:netrw_cursor"      , 2)
++let s:netrw_usercul = &cursorline
++let s:netrw_usercuc = &cursorcolumn
+ " Default values - d-g ---------- {{{3
++call s:NetrwInit("s:didstarstar",0)
+ call s:NetrwInit("g:netrw_dirhist_cnt"      , 0)
+ call s:NetrwInit("g:netrw_decompress"       , '{ ".gz" : "gunzip", ".bz2" : "bunzip2", ".zip" : "unzip", ".tar" : "tar -xf", ".xz" : "unxz" }')
+ call s:NetrwInit("g:netrw_dirhistmax"       , 10)
++call s:NetrwInit("g:netrw_errorlvl"  , s:NOTE)
+ call s:NetrwInit("g:netrw_fastbrowse"       , 1)
+ call s:NetrwInit("g:netrw_ftp_browse_reject", '^total\s\+\d\+$\|^Trying\s\+\d\+.*$\|^KERBEROS_V\d rejected\|^Security extensions not\|No such file\|: connect to address [0-9a-fA-F:]*: No route to host$')
+ if !exists("g:netrw_ftp_list_cmd")
+@@ -191,28 +291,39 @@
+ endif
+ call s:NetrwInit("g:netrw_keepdir",1)
+ if !exists("g:netrw_list_cmd")
++
+  if g:netrw_scp_cmd =~ '^pscp' && executable("pscp")
+-  " provide a 'pscp' listing command
+   if (has("win32") || has("win95") || has("win64") || has("win16")) && filereadable("c:\\private.ppk")
++   " provide a pscp-based listing command
+    let g:netrw_scp_cmd ="pscp -i C:\\private.ppk"
+   endif
+   let g:netrw_list_cmd= g:netrw_scp_cmd." -ls USEPORT HOSTNAME:"
++
+  elseif executable(g:netrw_ssh_cmd)
+-  " provide a default listing command
++  " provide a scp-based default listing command
+   let g:netrw_list_cmd= g:netrw_ssh_cmd." USEPORT HOSTNAME ls -FLa"
++
+  else
+ "  call Decho(g:netrw_ssh_cmd." is not executable")
+   let g:netrw_list_cmd= ""
+  endif
++
+ endif
+ call s:NetrwInit("g:netrw_list_hide","")
+ " Default values - lh-lz ---------- {{{3
++if exists("g:netrw_local_copycmd")
++ let g:netrw_localcopycmd= g:netrw_local_copycmd
++ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_copycmd is deprecated in favor of g:netrw_localcopycmd",84)
++endif
++if !exists("g:netrw_localcmdshell")
++ let g:netrw_localcmdshell= ""
++endif
+ if !exists("g:netrw_localcopycmd")
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   if g:netrw_cygwin
+    let g:netrw_localcopycmd= "cp"
+   else
+-   let g:netrw_localcopycmd= "copy"
++   let g:netrw_localcopycmd= "cmd /c copy"
+   endif
+  elseif has("unix") || has("macunix")
+   let g:netrw_localcopycmd= "cp"
+@@ -220,13 +331,22 @@
+   let g:netrw_localcopycmd= ""
+  endif
+ endif
+-call s:NetrwInit("g:netrw_local_mkdir","mkdir")
++if exists("g:netrw_local_mkdir")
++ let g:netrw_localmkdir= g:netrw_local_mkdir
++ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_mkdir is deprecated in favor of g:netrw_localmkdir",87)
++endif
++call s:NetrwInit("g:netrw_localmkdir","mkdir")
++call s:NetrwInit("g:netrw_remote_mkdir","mkdir")
++if exists("g:netrw_local_movecmd")
++ let g:netrw_localmovecmd= g:netrw_local_movecmd
++ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_movecmd is deprecated in favor of g:netrw_localmovecmd",88)
++endif
+ if !exists("g:netrw_localmovecmd")
+  if has("win32") || has("win95") || has("win64") || has("win16")
+   if g:netrw_cygwin
+    let g:netrw_localmovecmd= "mv"
+   else
+-   let g:netrw_localmovecmd= "move"
++   let g:netrw_localmovecmd= "cmd /c move"
+   endif
+  elseif has("unix") || has("macunix")
+   let g:netrw_localmovecmd= "mv"
+@@ -234,7 +354,11 @@
+   let g:netrw_localmovecmd= ""
+  endif
+ endif
+-call s:NetrwInit("g:netrw_local_rmdir", "rmdir")
++call s:NetrwInit("g:netrw_localrmdir", "rmdir")
++if exists("g:netrw_local_rmdir")
++ let g:netrw_localrmdir= g:netrw_local_rmdir
++ call netrw#ErrorMsg(s:NOTE,"g:netrw_local_rmdir is deprecated in favor of g:netrw_localrmdir",86)
++endif
+ call s:NetrwInit("g:netrw_liststyle"  , s:THINLIST)
+ " sanity checks
+ if g:netrw_liststyle < 0 || g:netrw_liststyle >= s:MAXLIST
+@@ -248,7 +372,7 @@
+ call s:NetrwInit("g:netrw_maxfilenamelen", 32)
+ call s:NetrwInit("g:netrw_menu"          , 1)
+ call s:NetrwInit("g:netrw_mkdir_cmd"     , g:netrw_ssh_cmd." USEPORT HOSTNAME mkdir")
+-call s:NetrwInit("g:netrw_mousemaps"     , (exists("&mouse") && &mouse =~ '[anh]'))
++call s:NetrwInit("g:netrw_mousemaps"     , (exists("+mouse") && &mouse =~ '[anh]'))
+ call s:NetrwInit("g:netrw_retmap"        , 0)
+ if has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin)
+  call s:NetrwInit("g:netrw_chgperm"       , "chmod PERM FILENAME")
+@@ -267,13 +391,13 @@
+ " Default values - s ---------- {{{3
+ " g:netrw_sepchr: picking a character that doesn't appear in filenames that can be used to separate priority from filename
+ call s:NetrwInit("g:netrw_sepchr"        , (&enc == "euc-jp")? "\<Char-0x01>" : "\<Char-0xff>")
+-call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "silent keepj " : "keepj ")
++call s:NetrwInit("s:netrw_silentxfer"    , (exists("g:netrw_silent") && g:netrw_silent != 0)? "sil keepj " : "keepj ")
+ call s:NetrwInit("g:netrw_sort_by"       , "name") " alternatives: date                                      , size
+ call s:NetrwInit("g:netrw_sort_options"  , "")
+ call s:NetrwInit("g:netrw_sort_direction", "normal") " alternative: reverse  (z y x ...)
+ if !exists("g:netrw_sort_sequence")
+  if has("unix")
+-  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
++  let g:netrw_sort_sequence= '[\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,\~\=\*$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
+  else
+   let g:netrw_sort_sequence= '[\/]$,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$'
+  endif
+@@ -283,20 +407,31 @@
+ call s:NetrwInit("g:netrw_use_noswf"        , 0)
+ " Default values - t-w ---------- {{{3
+ call s:NetrwInit("g:netrw_timefmt","%c")
+-call s:NetrwInit("g:netrw_xstrlen",0)
++if !exists("g:netrw_xstrlen")
++ if exists("g:Align_xstrlen")
++  let g:netrw_xstrlen= g:Align_xstrlen
++ elseif exists("g:drawit_xstrlen")
++  let g:netrw_xstrlen= g:drawit_xstrlen
++ elseif &enc == "latin1" || !has("multi_byte")
++  let g:netrw_xstrlen= 0
++ else
++  let g:netrw_xstrlen= 1
++ endif
++endif
+ call s:NetrwInit("g:NetrwTopLvlMenu","Netrw.")
+-call s:NetrwInit("g:netrw_use_errorwindow",1)
+ call s:NetrwInit("g:netrw_win95ftp",1)
+-call s:NetrwInit("g:netrw_winsize",25)
++call s:NetrwInit("g:netrw_winsize",50)
++if g:netrw_winsize ==  0|let g:netrw_winsize=  -1|endif
++if g:netrw_winsize > 100|let g:netrw_winsize= 100|endif
+ " ---------------------------------------------------------------------
+ " Default values for netrw's script variables: {{{2
+ call s:NetrwInit("g:netrw_fname_escape",' ?&;%')
+ if has("win32") || has("win95") || has("win64") || has("win16")
+- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{$')
++ call s:NetrwInit("g:netrw_glob_escape",'*?`{[]$')
+ else
+- call s:NetrwInit("g:netrw_glob_escape",'[]*?`{~$\')
++ call s:NetrwInit("g:netrw_glob_escape",'*[]?`{~$\')
+ endif
+-call s:NetrwInit("g:netrw_menu_escape",'./&? \')
++call s:NetrwInit("g:netrw_menu_escape",'.&? \')
+ call s:NetrwInit("g:netrw_tmpfile_escape",' &;')
+ call s:NetrwInit("s:netrw_map_escape","<|\n\r\\\<C-V>\"")
+ 
+@@ -305,84 +440,152 @@
+ "  files read by network transfer aren't appropriately highlighted.
+ "let g:decho_bufenter = 1	"Decho
+ 
++" ======================
++"  Netrw Initialization: {{{1
++" ======================
++if v:version >= 700 && has("balloon_eval") && !exists("s:initbeval") && !exists("g:netrw_nobeval") && has("syntax") && exists("g:syntax_on")
++ let s:initbeval = &beval
++" let s:initbexpr = &l:bexpr
++ let &l:bexpr    = "netrw#NetrwBalloonHelp()"
++ set beval
++ au BufWinEnter,WinEnter *	if &ft == "netrw"|set beval|else|let &beval= s:initbeval|endif
++endif
++au WinEnter *	if &ft == "netrw"|call s:NetrwInsureWinVars()|endif
++
+ " ==============================
+ "  Netrw Utility Functions: {{{1
+ " ==============================
+ 
++" ---------------------------------------------------------------------
++" netrw#NetrwBalloonHelp: {{{2
++if v:version >= 700 && has("balloon_eval") && &beval == 1 && has("syntax") && exists("g:syntax_on")
++  fun! netrw#NetrwBalloonHelp()
++    if !exists("w:netrw_bannercnt") || v:beval_lnum >= w:netrw_bannercnt || (exists("g:netrw_nobeval") && g:netrw_nobeval)
++     let mesg= ""
++    elseif     v:beval_text == "Netrw" || v:beval_text == "Directory" || v:beval_text == "Listing"
++     let mesg = "i: thin-long-wide-tree  gh: quick hide/unhide of dot-files   qf: quick file info  %:open new file"
++    elseif     getline(v:beval_lnum) =~ '^"\s*/'
++     let mesg = "<cr>: edit/enter   o: edit/enter in horiz window   t: edit/enter in new tab   v:edit/enter in vert window"
++    elseif     v:beval_text == "Sorted" || v:beval_text == "by"
++     let mesg = 's: sort by name, time, or file size   r: reverse sorting order   mt: mark target'
++    elseif v:beval_text == "Sort"   || v:beval_text == "sequence"
++     let mesg = "S: edit sorting sequence"
++    elseif v:beval_text == "Hiding" || v:beval_text == "Showing"
++     let mesg = "a: hiding-showing-all   ctrl-h: editing hiding list   mh: hide/show by suffix"
++    elseif v:beval_text == "Quick" || v:beval_text == "Help"
++     let mesg = "Help: press <F1>"
++    elseif v:beval_text == "Copy/Move" || v:beval_text == "Tgt"
++     let mesg = "mt: mark target   mc: copy marked file to target   mm: move marked file to target"
++    else
++     let mesg= ""
++    endif
++    return mesg
++  endfun
++endif
++
+ " ------------------------------------------------------------------------
+-" s:NetrwOptionSave: save options and set to "standard" form {{{2
++" s:NetrwOptionSave: save options prior to setting to "netrw-buffer-standard" form {{{2
+ "  06/08/07 : removed call to NetrwSafeOptions(), either placed
+ "             immediately after NetrwOptionSave() calls in NetRead
+ "             and NetWrite, or after the s:NetrwEnew() call in
+ "             NetrwBrowse.
+ "             vt: normally its "w:" or "s:" (a variable type)
+ fun! s:NetrwOptionSave(vt)
+-"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$"))
+-
++"  call Dfunc("s:NetrwOptionSave(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%")).">"." winnr($)=".winnr("$")." mod=".&mod." ma=".&ma)
+ "  call Decho(a:vt."netrw_optionsave".(exists("{a:vt}netrw_optionsave")? ("=".{a:vt}netrw_optionsave) : " doesn't exist"))
++
+   if !exists("{a:vt}netrw_optionsave")
+    let {a:vt}netrw_optionsave= 1
+   else
+ "   call Dret("s:NetrwOptionSave : options already saved")
+    return
+   endif
+-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
++"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." diff=".&l:diff)
+ 
+   " Save current settings and current directory
++"  call Decho("saving current settings and current directory")
+   let s:yykeep          = @@
+-  if exists("&l:acd")
+-   let {a:vt}netrw_acdkeep  = &l:acd
+-  endif
++  if exists("&l:acd")|let {a:vt}netrw_acdkeep  = &l:acd|endif
+   let {a:vt}netrw_aikeep    = &l:ai
+   let {a:vt}netrw_awkeep    = &l:aw
++  let {a:vt}netrw_bhkeep    = &l:bh
++  let {a:vt}netrw_blkeep    = &l:bl
++  let {a:vt}netrw_btkeep    = &l:bt
+   let {a:vt}netrw_bombkeep  = &l:bomb
++  let {a:vt}netrw_cedit     = &cedit
+   let {a:vt}netrw_cikeep    = &l:ci
+   let {a:vt}netrw_cinkeep   = &l:cin
+   let {a:vt}netrw_cinokeep  = &l:cino
+   let {a:vt}netrw_comkeep   = &l:com
+   let {a:vt}netrw_cpokeep   = &l:cpo
+   let {a:vt}netrw_diffkeep  = &l:diff
+-  if g:netrw_keepdir
+-   let {a:vt}netrw_dirkeep  = getcwd()
+-  endif
++  let {a:vt}netrw_fenkeep   = &l:fen
++  let {a:vt}netrw_ffkeep    = &l:ff
+   let {a:vt}netrw_fokeep    = &l:fo           " formatoptions
+   let {a:vt}netrw_gdkeep    = &l:gd           " gdefault
+   let {a:vt}netrw_hidkeep   = &l:hidden
+   let {a:vt}netrw_imkeep    = &l:im
++  let {a:vt}netrw_iskkeep   = &l:isk
++  let {a:vt}netrw_lskeep    = &l:ls
++  let {a:vt}netrw_makeep    = &l:ma
+   let {a:vt}netrw_magickeep = &l:magic
++  let {a:vt}netrw_modkeep   = &l:mod
++  let {a:vt}netrw_nukeep    = &l:nu
+   let {a:vt}netrw_repkeep   = &l:report
++  let {a:vt}netrw_rokeep    = &l:ro
+   let {a:vt}netrw_selkeep   = &l:sel
+   let {a:vt}netrw_spellkeep = &l:spell
++  let {a:vt}netrw_tskeep    = &l:ts
+   let {a:vt}netrw_twkeep    = &l:tw           " textwidth
+   let {a:vt}netrw_wigkeep   = &l:wig          " wildignore
++  let {a:vt}netrw_wrapkeep  = &l:wrap
++  let {a:vt}netrw_writekeep = &l:write
++  if g:netrw_use_noswf && has("win32") && !has("win95")
++   let {a:vt}netrw_swfkeep   = &l:swf
++  endif
++
++  " save a few selected netrw-related variables
++"  call Decho("saving a few selected netrw-related variables")
++  if g:netrw_keepdir
++   let {a:vt}netrw_dirkeep  = getcwd()
++  endif
+   if has("win32") && !has("win95")
+    let {a:vt}netrw_swfkeep  = &l:swf          " swapfile
+   endif
+-  if &go =~ 'a' | silent! let {a:vt}netrw_regstar = @* | endif
+-  silent! let {a:vt}netrw_regslash= @/
++  if &go =~# 'a' | sil! let {a:vt}netrw_regstar = @* | endif
++  sil! let {a:vt}netrw_regslash= @/
+ 
+-"  call Dret("s:NetrwOptionSave : win#".winnr()." buf#".bufnr("%"))
++"  call Dret("s:NetrwOptionSave : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+ endfun
+ 
+ " ------------------------------------------------------------------------
+ " s:NetrwOptionRestore: restore options {{{2
+ fun! s:NetrwOptionRestore(vt)
+-"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")." winnr($)=".winnr("$"))
++"  call Dfunc("s:NetrwOptionRestore(vt<".a:vt.">) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
+   if !exists("{a:vt}netrw_optionsave")
+-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
++   if exists("s:nbcd_curpos_{bufnr('%')}")
++"    call Decho("(NetrwOptionRestore) restoring previous position  (s:nbcd_curpos_".bufnr('%')." exists)")
++    keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
++"    call Decho("(NetrwOptionRestore) win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> winnr($)=".winnr("$"))
++"    call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
++    unlet s:nbcd_curpos_{bufnr('%')}
++   else
++"    call Decho("(NetrwOptionRestore) no previous position")
++   endif
++"   call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+ "   call Dret("s:NetrwOptionRestore : ".a:vt."netrw_optionsave doesn't exist")
+    return
+   endif
+   unlet {a:vt}netrw_optionsave
+ 
+-  if exists("&acd")
++  if exists("+acd")
+    if exists("{a:vt}netrw_acdkeep")
+-"    call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
++"    call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+     let curdir = getcwd()
+     let &l:acd = {a:vt}netrw_acdkeep
+     unlet {a:vt}netrw_acdkeep
+     if &l:acd
+-"     call Decho("exe keepjumps lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
++"     call Decho("exe keepj lcd ".fnameescape(curdir))  " NOTE: was g:netrw_fname_escape for some reason
+      try
+       if !exists("&l:acd") && !&l:acd
+        exe 'keepj lcd '.fnameescape(curdir)
+@@ -395,27 +598,41 @@
+   endif
+   if exists("{a:vt}netrw_aikeep")   |let &l:ai     = {a:vt}netrw_aikeep      |unlet {a:vt}netrw_aikeep   |endif
+   if exists("{a:vt}netrw_awkeep")   |let &l:aw     = {a:vt}netrw_awkeep      |unlet {a:vt}netrw_awkeep   |endif
++  if g:netrw_liststyle != s:TREELIST
++   if exists("{a:vt}netrw_bhkeep")  |let &l:bh     = {a:vt}netrw_bhkeep      |unlet {a:vt}netrw_bhkeep   |endif
++  endif
++  if exists("{a:vt}netrw_blkeep")   |let &l:bl     = {a:vt}netrw_blkeep      |unlet {a:vt}netrw_blkeep   |endif
++  if exists("{a:vt}netrw_btkeep")   |let &l:bt     = {a:vt}netrw_btkeep      |unlet {a:vt}netrw_btkeep   |endif
+   if exists("{a:vt}netrw_bombkeep") |let &l:bomb   = {a:vt}netrw_bombkeep    |unlet {a:vt}netrw_bombkeep |endif
++  if exists("{a:vt}netrw_cedit")    |let &cedit    = {a:vt}netrw_cedit       |unlet {a:vt}netrw_cedit    |endif
+   if exists("{a:vt}netrw_cikeep")   |let &l:ci     = {a:vt}netrw_cikeep      |unlet {a:vt}netrw_cikeep   |endif
+   if exists("{a:vt}netrw_cinkeep")  |let &l:cin    = {a:vt}netrw_cinkeep     |unlet {a:vt}netrw_cinkeep  |endif
+   if exists("{a:vt}netrw_cinokeep") |let &l:cino   = {a:vt}netrw_cinokeep    |unlet {a:vt}netrw_cinokeep |endif
+   if exists("{a:vt}netrw_comkeep")  |let &l:com    = {a:vt}netrw_comkeep     |unlet {a:vt}netrw_comkeep  |endif
+   if exists("{a:vt}netrw_cpokeep")  |let &l:cpo    = {a:vt}netrw_cpokeep     |unlet {a:vt}netrw_cpokeep  |endif
+   if exists("{a:vt}netrw_diffkeep") |let &l:diff   = {a:vt}netrw_diffkeep    |unlet {a:vt}netrw_diffkeep |endif
+-  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
+-   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
+-   if exists("{a:vt}netrw_dirkeep")  |exe "keepjumps lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep  |endif
+-  endif
++  if exists("{a:vt}netrw_fenkeep")  |let &l:fen    = {a:vt}netrw_fenkeep     |unlet {a:vt}netrw_fenkeep  |endif
++  if exists("{a:vt}netrw_ffkeep")   |let &l:ff     = {a:vt}netrw_ffkeep      |unlet {a:vt}netrw_ffkeep   |endif
+   if exists("{a:vt}netrw_fokeep")   |let &l:fo     = {a:vt}netrw_fokeep      |unlet {a:vt}netrw_fokeep   |endif
+   if exists("{a:vt}netrw_gdkeep")   |let &l:gd     = {a:vt}netrw_gdkeep      |unlet {a:vt}netrw_gdkeep   |endif
+   if exists("{a:vt}netrw_hidkeep")  |let &l:hidden = {a:vt}netrw_hidkeep     |unlet {a:vt}netrw_hidkeep  |endif
+   if exists("{a:vt}netrw_imkeep")   |let &l:im     = {a:vt}netrw_imkeep      |unlet {a:vt}netrw_imkeep   |endif
+-  if exists("{a:vt}netrw_magic")    |let &l:magic  = {a:vt}netrw_magic       |unlet {a:vt}netrw_magic    |endif
++  if exists("{a:vt}netrw_iskkeep")  |let &l:isk    = {a:vt}netrw_iskkeep     |unlet {a:vt}netrw_iskkeep  |endif
++  if exists("{a:vt}netrw_lskeep")   |let &l:ls     = {a:vt}netrw_lskeep      |unlet {a:vt}netrw_lskeep   |endif
++  if exists("{a:vt}netrw_makeep")   |let &l:ma     = {a:vt}netrw_makeep      |unlet {a:vt}netrw_makeep   |endif
++  if exists("{a:vt}netrw_magickeep")|let &l:magic  = {a:vt}netrw_magickeep   |unlet {a:vt}netrw_magickeep|endif
++  if exists("{a:vt}netrw_modkeep")  |let &l:mod    = {a:vt}netrw_modkeep     |unlet {a:vt}netrw_modkeep  |endif
++  if exists("{a:vt}netrw_nukeep")   |let &l:nu     = {a:vt}netrw_nukeep      |unlet {a:vt}netrw_nukeep   |endif
+   if exists("{a:vt}netrw_repkeep")  |let &l:report = {a:vt}netrw_repkeep     |unlet {a:vt}netrw_repkeep  |endif
++  if exists("{a:vt}netrw_rokeep")   |let &l:ro     = {a:vt}netrw_rokeep      |unlet {a:vt}netrw_rokeep   |endif
+   if exists("{a:vt}netrw_selkeep")  |let &l:sel    = {a:vt}netrw_selkeep     |unlet {a:vt}netrw_selkeep  |endif
+   if exists("{a:vt}netrw_spellkeep")|let &l:spell  = {a:vt}netrw_spellkeep   |unlet {a:vt}netrw_spellkeep|endif
++  " Problem: start with liststyle=0; press <i> : result, following line resets l:ts.
++"  if exists("{a:vt}netrw_tskeep")   |let &l:ts     = {a:vt}netrw_tskeep      |unlet {a:vt}netrw_tskeep   |endif
+   if exists("{a:vt}netrw_twkeep")   |let &l:tw     = {a:vt}netrw_twkeep      |unlet {a:vt}netrw_twkeep   |endif
+   if exists("{a:vt}netrw_wigkeep")  |let &l:wig    = {a:vt}netrw_wigkeep     |unlet {a:vt}netrw_wigkeep  |endif
++  if exists("{a:vt}netrw_wrapkeep") |let &l:wrap   = {a:vt}netrw_wrapkeep    |unlet {a:vt}netrw_wrapkeep |endif
++  if exists("{a:vt}netrw_writekeep")|let &l:write  = {a:vt}netrw_writekeep   |unlet {a:vt}netrw_writekeep|endif
+   if exists("s:yykeep")             |let  @@       = s:yykeep                |unlet s:yykeep             |endif
+   if exists("{a:vt}netrw_swfkeep")
+    if &directory == ""
+@@ -423,3512 +640,4201 @@
+     " netrw will temporarily set the swapfile directory
+     " to the current directory as returned by getcwd().
+     let &l:directory   = getcwd()
+-    silent! let &l:swf = {a:vt}netrw_swfkeep
+-    setlocal directory=
++    sil! let &l:swf = {a:vt}netrw_swfkeep
++    setl directory=
+     unlet {a:vt}netrw_swfkeep
+    elseif &l:swf != {a:vt}netrw_swfkeep
+     " following line causes a Press ENTER in windows -- can't seem to work around it!!!
+-    silent! let &l:swf= {a:vt}netrw_swfkeep
++    sil! let &l:swf= {a:vt}netrw_swfkeep
+     unlet {a:vt}netrw_swfkeep
+    endif
+   endif
+-  if exists("{a:vt}netrw_regstar") |silent! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
+-  if exists("{a:vt}netrw_regslash")|silent! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
++  if exists("{a:vt}netrw_dirkeep") && isdirectory({a:vt}netrw_dirkeep) && g:netrw_keepdir
++   let dirkeep = substitute({a:vt}netrw_dirkeep,'\\','/','g')
++   if exists("{a:vt}netrw_dirkeep")  |exe "keepj lcd ".fnameescape(dirkeep)|unlet {a:vt}netrw_dirkeep  |endif
++  endif
++  if exists("{a:vt}netrw_regstar") |sil! let @*= {a:vt}netrw_regstar |unlet {a:vt}netrw_regstar |endif
++  if exists("{a:vt}netrw_regslash")|sil! let @/= {a:vt}netrw_regslash|unlet {a:vt}netrw_regslash|endif
++  if exists("s:nbcd_curpos_{bufnr('%')}")
++"   call Decho("(NetrwOptionRestore) restoring previous position  (s:nbcd_curpos_".bufnr('%')." exists)")
++   keepj call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
++"   call Decho("(NetrwOptionRestore) unlet s:nbcd_curpos_".bufnr('%'))
++   unlet s:nbcd_curpos_{bufnr('%')}
++  else
++"   call Decho("no previous position")
++  endif
+ 
+-"  call Decho("g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
+-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"  call Decho("diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
+-"  call Dret("s:NetrwOptionRestore : win#".winnr()." buf#".bufnr("%"))
++"  call Decho("(NetrwOptionRestore) g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
++"  call Decho("(NetrwOptionRestore) fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist"))
++"  call Decho("(NetrwOptionRestore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"  call Decho("(NetrwOptionRestore) diff=".&l:diff." win#".winnr()." w:netrw_diffkeep=".(exists("w:netrw_diffkeep")? w:netrw_diffkeep : "doesn't exist"))
++"  call Decho("(NetrwOptionRestore) ts=".&l:ts)
++  " Moved the filetype detect here from NetrwGetFile() because remote files
++  " were having their filetype detect-generated settings overwritten by
++  " NetrwOptionRestore.
++  if &ft != "netrw"
++"   call Decho("(NetrwOptionRestore) filetype detect  (ft=".&ft.")")
++   filetype detect
++  endif
++"  call Dret("s:NetrwOptionRestore : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " s:NetrwSafeOptions: sets options to help netrw do its job {{{2
++"                     Use  s:NetrwSaveOptions() to save user settings
++"                     Use  s:NetrwOptionRestore() to restore user settings
+ fun! s:NetrwSafeOptions()
+ "  call Dfunc("s:NetrwSafeOptions() win#".winnr()." buf#".bufnr("%")."<".bufname(bufnr("%"))."> winnr($)=".winnr("$"))
+ "  call Decho("win#".winnr()."'s ft=".&ft)
+-  setlocal cino=
+-  setlocal com=
+-  setlocal cpo-=aA
+-  if exists("&acd") | setlocal noacd | endif
+-  setlocal nocin noai nobomb noci magic nospell nohid wig= noaw noim
+-  setlocal fo=nroql2
+-  setlocal tw=0
+-  setlocal report=10000
+-  setlocal isk+=@ isk+=* isk+=/
+-  setlocal sel=inclusive
++  if exists("+acd") | setl noacd | endif
++  setl noai
++  setl noaw
++  setl nobomb
++  setl noci
++  setl nocin
++  if g:netrw_liststyle == s:TREELIST
++   setl bh=hide
++  endif
++  setl cino=
++  setl com=
++  setl cpo-=a
++  setl cpo-=A
++  setl fo=nroql2
++   setl nohid
++  setl noim
++  setl isk+=@ isk+=* isk+=/
++  setl magic
++  setl report=10000
++  setl sel=inclusive
++  setl nospell
++  setl tw=0
++  setl wig=
++  set  cedit&
+   if g:netrw_use_noswf && has("win32") && !has("win95")
+-   setlocal noswf
++   setl noswf
+   endif
+-  call s:NetrwCursorline()
++  call s:NetrwCursor()
+ 
+   " allow the user to override safe options
+ "  call Decho("ft<".&ft."> ei=".&ei)
+   if &ft == "netrw"
+-"   call Decho("do any netrw FileType autocmds")
+-   silent keepalt keepjumps doau FileType netrw
++"   call Decho("do any netrw FileType autocmds (doau FileType netrw)")
++   sil! keepalt keepj doau FileType netrw
+   endif
+ 
+-"  call Decho("fo=".&fo.(exists("&acd")? " acd=".&acd : " acd doesn't exist"))
++"  call Decho("fo=".&fo.(exists("+acd")? " acd=".&acd : " acd doesn't exist")." bh=".&l:bh)
+ "  call Dret("s:NetrwSafeOptions")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" netrw#NetrwClean: remove netrw {{{2
+-" supports :NetrwClean  -- remove netrw from first directory on runtimepath
+-"          :NetrwClean! -- remove netrw from all directories on runtimepath
+-fun! netrw#NetrwClean(sys)
+-"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
+-
+-  if a:sys
+-   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
+-  else
+-   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
+-  endif
+-"  call Decho("choice=".choice)
+-  let diddel= 0
+-  let diddir= ""
+-
+-  if choice == 1
+-   for dir in split(&rtp,',')
+-    if filereadable(dir."/plugin/netrwPlugin.vim")
+-"     call Decho("removing netrw-related files from ".dir)
+-     if s:NetrwDelete(dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
+-     if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
+-     if s:NetrwDelete(dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
+-     if s:NetrwDelete(dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
+-     if s:NetrwDelete(dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
+-     if s:NetrwDelete(dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
+-     let diddir= dir
+-     let diddel= diddel + 1
+-     if !a:sys|break|endif
+-    endif
+-   endfor
++" netrw#Explore: launch the local browser in the directory of the current file {{{2
++"          indx:  == -1: Nexplore
++"                 == -2: Pexplore
++"                 ==  +: this is overloaded:
++"                      * If Nexplore/Pexplore is in use, then this refers to the
++"                        indx'th item in the w:netrw_explore_list[] of items which
++"                        matched the */pattern **/pattern *//pattern **//pattern
++"                      * If Hexplore or Vexplore, then this will override
++"                        g:netrw_winsize to specify the qty of rows or columns the
++"                        newly split window should have.
++"          dosplit==0: the window will be split iff the current file has been modified
++"          dosplit==1: the window will be split before running the local browser
++"          style == 0: Explore     style == 1: Explore!
++"                == 2: Hexplore    style == 3: Hexplore!
++"                == 4: Vexplore    style == 5: Vexplore!
++"                == 6: Texplore
++fun! netrw#Explore(indx,dosplit,style,...)
++"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." modifiable=".&modifiable." a:0=".a:0." win#".winnr()." buf#".bufnr("%"))
++  if !exists("b:netrw_curdir")
++   let b:netrw_curdir= getcwd()
++   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
++    let b:netrw_curdir= substitute(b:netrw_curdir,'\','/','g')
++   endif
++"   call Decho("(Explore) set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
+   endif
+-
+-   echohl WarningMsg
+-  if diddel == 0
+-   echomsg "netrw is either not installed or not removable"
+-  elseif diddel == 1
+-   echomsg "removed one copy of netrw from <".diddir.">"
+-  else
+-   echomsg "removed ".diddel." copies of netrw"
++  let curdir     = simplify(b:netrw_curdir)
++  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
++  if !exists("g:netrw_cygwin") && (has("win32") || has("win95") || has("win64") || has("win16"))
++   let curdir= substitute(curdir,'\','/','g')
+   endif
+-   echohl None
++"  call Decho("(Explore) curdir<".curdir.">  curfiledir<".curfiledir.">")
+ 
+-"  call Dret("netrw#NetrwClean")
+-endfun
++  " save registers
++  sil! let keepregstar = @*
++  sil! let keepregplus = @+
++  sil! let keepregslash= @/
+ 
+-" ---------------------------------------------------------------------
+-" netrw#Nread: {{{2
+-fun! netrw#Nread(mode,fname)
+-"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
+-  call netrw#NetrwSavePosn()
+-  call netrw#NetRead(a:mode,a:fname)
+-  call netrw#NetrwRestorePosn()
+-"  call Dret("netrw#Nread")
+-endfun
++  " if dosplit or file has been modified
++  if a:dosplit || &modified || a:style == 6
++"   call Decho("(Explore) case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
++   call s:SaveWinVars()
++   let winsz= g:netrw_winsize
++   if a:indx > 0
++    let winsz= a:indx
++   endif
+ 
+-" ------------------------------------------------------------------------
+-"  Netrw Transfer Functions: {{{1
+-" ===============================
++   if a:style == 0      " Explore, Sexplore
++"    call Decho("(Explore) style=0: Explore or Sexplore")
++    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
++    exe winsz."wincmd s"
+ 
+-" ------------------------------------------------------------------------
+-" netrw#NetRead: responsible for reading a file over the net {{{2
+-"   mode: =0 read remote file and insert before current line
+-"         =1 read remote file and insert after current line
+-"         =2 replace with remote file
+-"         =3 obtain file, but leave in temporary format
+-fun! netrw#NetRead(mode,...)
+-"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw)
++   elseif a:style == 1  "Explore!, Sexplore!
++"    call Decho("(Explore) style=1: Explore! or Sexplore!")
++    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
++    exe "keepalt ".winsz."wincmd v"
+ 
+-  " NetRead: save options {{{3
+-  call s:NetrwOptionSave("w:")
+-  call s:NetrwSafeOptions()
+-  call s:RestoreCursorline()
++   elseif a:style == 2  " Hexplore
++"    call Decho("(Explore) style=2: Hexplore")
++    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
++    exe "keepalt bel ".winsz."wincmd s"
+ 
+-  " NetRead: interpret mode into a readcmd {{{3
+-  if     a:mode == 0 " read remote file before current line
+-   let readcmd = "0r"
+-  elseif a:mode == 1 " read file after current line
+-   let readcmd = "r"
+-  elseif a:mode == 2 " replace with remote file
+-   let readcmd = "%r"
+-  elseif a:mode == 3 " skip read of file (leave as temporary)
+-   let readcmd = "t"
+-  else
+-   exe a:mode
+-   let readcmd = "r"
+-  endif
+-  let ichoice = (a:0 == 0)? 0 : 1
+-"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
++   elseif a:style == 3  " Hexplore!
++"    call Decho("(Explore) style=3: Hexplore!")
++    let winsz= (winsz > 0)? (winsz*winheight(0))/100 : -winsz
++    exe "keepalt abo ".winsz."wincmd s"
+ 
+-  " NetRead: get temporary filename {{{3
+-  let tmpfile= s:GetTempfile("")
+-  if tmpfile == ""
+-"   call Dret("netrw#NetRead : unable to get a tempfile!")
+-   return
+-  endif
++   elseif a:style == 4  " Vexplore
++"    call Decho("(Explore) style=4: Vexplore")
++    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
++    exe "keepalt lefta ".winsz."wincmd v"
+ 
+-  while ichoice <= a:0
++   elseif a:style == 5  " Vexplore!
++"    call Decho("(Explore) style=5: Vexplore!")
++    let winsz= (winsz > 0)? (winsz*winwidth(0))/100 : -winsz
++    exe "keepalt rightb ".winsz."wincmd v"
+ 
+-   " attempt to repeat with previous host-file-etc
+-   if exists("b:netrw_lastfile") && a:0 == 0
+-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+-    let choice = b:netrw_lastfile
+-    let ichoice= ichoice + 1
++   elseif a:style == 6  " Texplore
++    call s:SaveBufVars()
++"    call Decho("(Explore) style  = 6: Texplore")
++    exe "keepalt tabnew ".fnameescape(curdir)
++    call s:RestoreBufVars()
++   endif
++   call s:RestoreWinVars()
++"  else " Decho
++"   call Decho("(Explore) case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
++  endif
++  keepj norm! 0
+ 
++  if a:0 > 0
++"   call Decho("(Explore) case [a:0=".a:0."] > 0: a:1<".a:1.">")
++   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
++"    call Decho("(Explore) ..case a:1<".a:1.">: starts with ~ and unix or cygwin")
++    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
++"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ~ && unix||cygwin)")
++   elseif a:1 == '.'
++"    call Decho("(Explore) ..case a:1<".a:1.">: matches .")
++    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
++    if dirname !~ '/$'
++     let dirname= dirname."/"
++    endif
++"    call Decho("(Explore) ..using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
++   elseif a:1 =~ '\$'
++"    call Decho("(Explore) ..case a:1<".a:1.">: matches ending $")
++    let dirname= simplify(expand(a:1))
++"    call Decho("(Explore) ..using user-specified dirname<".dirname."> with $env-var")
++   elseif a:1 !~ '^\*\{1,2}/' && a:1 !~ '^\a\{3,}://'
++"    call Decho("(Explore) ..case a:1<".a:1.">: other, not pattern or filepattern")
++    let dirname= simplify(a:1)
++"    call Decho("(Explore) ..using user-specified dirname<".dirname.">")
+    else
+-    exe "let choice= a:" . ichoice
+-"    call Decho("no lastfile: choice<" . choice . ">")
++"    call Decho("(Explore) ..case a:1: pattern or filepattern")
++    let dirname= a:1
++   endif
++  else
++   " clear explore
++"   call Decho("(Explore) case a:0=".a:0.": clearing Explore list")
++   call s:NetrwClearExplore()
++"   call Dret("netrw#Explore : cleared list")
++   return
++  endif
+ 
+-    if match(choice,"?") == 0
+-     " give help
+-     echomsg 'NetRead Usage:'
+-     echomsg ':Nread machine:path                         uses rcp'
+-     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
+-     echomsg ':Nread "machine id password path"           uses ftp'
+-     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
+-     echomsg ':Nread fetch://machine/path                 uses fetch'
+-     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+-     echomsg ':Nread http://[user@]machine/path           uses http  wget'
+-     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
+-     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
+-     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
+-     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
+-     sleep 4
+-     break
++"  call Decho("(Explore) dirname<".dirname.">")
++  if dirname =~ '\.\./\=$'
++   let dirname= simplify(fnamemodify(dirname,':p:h'))
++  elseif dirname =~ '\.\.' || dirname == '.'
++   let dirname= simplify(fnamemodify(dirname,':p'))
++  endif
++"  call Decho("(Explore) dirname<".dirname.">  (after simplify)")
+ 
+-    elseif match(choice,'^"') != -1
+-     " Reconstruct Choice if choice starts with '"'
+-"     call Decho("reconstructing choice")
+-     if match(choice,'"$') != -1
+-      " case "..."
+-      let choice=strpart(choice,1,strlen(choice)-2)
+-     else
+-       "  case "... ... ..."
+-      let choice      = strpart(choice,1,strlen(choice)-1)
+-      let wholechoice = ""
++  if dirname =~ '^\*//'
++   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
++"   call Decho("(Explore) case starpat=1: Explore *//pattern")
++   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
++   let starpat= 1
++"   call Decho("(Explore) ..Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
++   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+ 
+-      while match(choice,'"$') == -1
+-       let wholechoice = wholechoice . " " . choice
+-       let ichoice     = ichoice + 1
+-       if ichoice > a:0
+-       	if !exists("g:netrw_quiet")
+-	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
+-	endif
+-"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
+-        return
+-       endif
+-       let choice= a:{ichoice}
+-      endwhile
+-      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
+-     endif
+-    endif
++  elseif dirname =~ '^\*\*//'
++   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
++"   call Decho("(Explore) case starpat=2: Explore **//pattern")
++   let pattern= substitute(dirname,'^\*\*//','','')
++   let starpat= 2
++"   call Decho("(Explore) ..Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
++
++  elseif dirname =~ '/\*\*/'
++   " handle .../**/.../filepat
++"   call Decho("(Explore) case starpat=4: Explore .../**/.../filepat")
++   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
++   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
++    let b:netrw_curdir = prefixdir
++   else
++    let b:netrw_curdir= getcwd().'/'.prefixdir
+    endif
++   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
++   let starpat= 4
++"   call Decho("(Explore) ..pwd<".getcwd()."> dirname<".dirname.">")
++"   call Decho("(Explore) ..case Explore ../**/../filepat (starpat=".starpat.")")
+ 
+-"   call Decho("choice<" . choice . ">")
+-   let ichoice= ichoice + 1
++  elseif dirname =~ '^\*/'
++   " case starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
++   let starpat= 3
++"   call Decho("(Explore) case starpat=3: Explore */filepat (starpat=".starpat.")")
+ 
+-   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
+-   call s:NetrwMethod(choice)
+-   if !exists("b:netrw_method") || b:netrw_method < 0
+-"    call Dfunc("netrw#NetRead : unsupported method")
+-    return
+-   endif
+-   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
++  elseif dirname=~ '^\*\*/'
++   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
++   let starpat= 4
++"   call Decho("(Explore) case starpat=4: Explore **/filepat (starpat=".starpat.")")
+ 
+-   " Check if NetrwBrowse() should be handling this request
+-"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
+-   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^http://'
+-"    call Decho("yes, choice matches '^.*[\/]$'")
+-    keepj call s:NetrwBrowse(0,choice)
+-"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
+-    return
++  else
++   let starpat= 0
++"   call Decho("(Explore) case starpat=0: default")
++  endif
++
++  if starpat == 0 && a:indx >= 0
++   " [Explore Hexplore Vexplore Sexplore] [dirname]
++"   call Decho("(Explore) case starpat==0 && a:indx=".a:indx.": dirname<".dirname.">, handles Explore Hexplore Vexplore Sexplore")
++   if dirname == ""
++    let dirname= curfiledir
++"    call Decho("(Explore) ..empty dirname, using current file's directory<".dirname.">")
++   endif
++   if dirname =~ '^scp://' || dirname =~ '^ftp://'
++    call netrw#Nread(2,dirname)
++    "call s:NetrwBrowse(0,dirname)
++   else
++    if dirname == ""
++     let dirname= getcwd()
++    elseif (has("win32") || has("win95") || has("win64") || has("win16")) && !g:netrw_cygwin
++     if dirname !~ '^[a-zA-Z]:'
++      let dirname= b:netrw_curdir."/".dirname
++     endif
++    elseif dirname !~ '^/'
++     let dirname= b:netrw_curdir."/".dirname
++    endif
++"    call Decho("(Explore) ..calling LocalBrowseCheck(dirname<".dirname.">)")
++    call netrw#LocalBrowseCheck(dirname)
++"    call Decho("(Explore) win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+    endif
++   if exists("w:netrw_bannercnt")
++    " done to handle P08-Ingelrest. :Explore will _Always_ go to the line just after the banner.
++    " If one wants to return the same place in the netrw window, use :Rex instead.
++    exe w:netrw_bannercnt
++   endif
++
++"   call Decho("(Explore) curdir<".curdir.">")
++   " ---------------------------------------------------------------------
++   " Jan 24, 2013: not sure why the following was present.  See P08-Ingelrest
++"   if has("win32") || has("win95") || has("win64") || has("win16")
++"    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
++"   else
++"    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
++"   endif
++   " ---------------------------------------------------------------------
+ 
+-   " ============
+-   " NetRead: Perform Protocol-Based Read {{{3
+-   " ===========================
+-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+-    echo "(netrw) Processing your read request..."
++  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
++  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
++  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
++  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
++  elseif a:indx <= 0
++   " Nexplore, Pexplore, Explore: handle starpat
++"   call Decho("(Explore) case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
++   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
++"    call Decho("(Explore) ..set up <s-up> and <s-down> maps")
++    let s:didstarstar= 1
++    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
++    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+    endif
+ 
+-   ".........................................
+-   " NetRead: (rcp)  NetRead Method #1 {{{3
+-   if  b:netrw_method == 1 " read with rcp
+-"    call Decho("read via rcp (method #1)")
+-   " ER: nothing done with g:netrw_uid yet?
+-   " ER: on Win2K" rcp machine[.user]:file tmpfile
+-   " ER: if machine contains '.' adding .user is required (use $USERNAME)
+-   " ER: the tmpfile is full path: rcp sees C:\... as host C
+-   if s:netrw_has_nt_rcp == 1
+-    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+-     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+-    else
+-     " Any way needed it machine contains a '.'
+-     let uid_machine = g:netrw_machine .'.'. $USERNAME
+-    endif
+-   else
+-    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
+-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+-    else
+-     let uid_machine = g:netrw_machine
++   if has("path_extra")
++"    call Decho("(Explore) ..starpat=".starpat.": has +path_extra")
++    if !exists("w:netrw_explore_indx")
++     let w:netrw_explore_indx= 0
+     endif
+-   endif
+-"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+-   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+-   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-   let b:netrw_lastfile = choice
+ 
+-   ".........................................
+-   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
+-   elseif b:netrw_method  == 2		" read with ftp + <.netrc>
+-"     call Decho("read via ftp+.netrc (method #2)")
+-     let netrw_fname= b:netrw_fname
+-     call s:SaveBufVars()|new|call s:RestoreBufVars()
+-     let filtbuf= bufnr("%")
+-     setlocal ff=unix
+-     keepj put =g:netrw_ftpmode
+-"     call Decho("filter input: ".getline(line("$")))
+-     if exists("g:netrw_ftpextracmd")
+-      keepj put =g:netrw_ftpextracmd
+-"      call Decho("filter input: ".getline(line("$")))
+-     endif
+-     call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
+-"     call Decho("filter input: ".getline(line("$")))
+-     if exists("g:netrw_port") && g:netrw_port != ""
+-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1))
+-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine." ".g:netrw_port,1)
+-     else
+-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+-     endif
+-     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+-      let debugkeep = &debug
+-      setlocal debug=msg
+-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
+-      let &debug    = debugkeep
++    let indx = a:indx
++"    call Decho("(Explore) ..starpat=".starpat.": set indx= [a:indx=".indx."]")
++
++    if indx == -1
++     " Nexplore
++"     call Decho("(Explore) ..case Nexplore with starpat=".starpat.": (indx=".indx.")")
++     if !exists("w:netrw_explore_list") " sanity check
++      keepj call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
++      sil! let @* = keepregstar
++      sil! let @+ = keepregstar
++      sil! let @/ = keepregslash
++"      call Dret("netrw#Explore")
++      return
+      endif
+-     call s:SaveBufVars()
+-     bd!
+-     if bufname("%") == "" && getline("$") == "" && line('$') == 1
+-      " needed when one sources a file in a nolbl setting window via ftp
+-      q!
++     let indx= w:netrw_explore_indx
++     if indx < 0                        | let indx= 0                           | endif
++     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
++     let curfile= w:netrw_explore_list[indx]
++"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
++     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
++      let indx= indx + 1
++"      call Decho("(Explore) ....indx=".indx." (Nexplore while loop)")
++     endwhile
++     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
++"     call Decho("(Explore) ....Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
++
++    elseif indx == -2
++     " Pexplore
++"     call Decho("(Explore) case Pexplore with starpat=".starpat.": (indx=".indx.")")
++     if !exists("w:netrw_explore_list") " sanity check
++      keepj call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
++      sil! let @* = keepregstar
++      sil! let @+ = keepregstar
++      sil! let @/ = keepregslash
++"      call Dret("netrw#Explore")
++      return
+      endif
+-     call s:RestoreBufVars()
+-     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-     let b:netrw_lastfile = choice
++     let indx= w:netrw_explore_indx
++     if indx < 0                        | let indx= 0                           | endif
++     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
++     let curfile= w:netrw_explore_list[indx]
++"     call Decho("(Explore) ....indx=".indx." curfile<".curfile.">")
++     while indx >= 0 && curfile == w:netrw_explore_list[indx]
++      let indx= indx - 1
++"      call Decho("(Explore) ....indx=".indx." (Pexplore while loop)")
++     endwhile
++     if indx < 0                        | let indx= 0                           | endif
++"     call Decho("(Explore) ....Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+ 
+-   ".........................................
+-   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
+-   elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
+-    " Construct execution string (four lines) which will be passed through filter
+-"    call Decho("read via ftp+mipf (method #3)")
+-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+-    call s:SaveBufVars()|new|call s:RestoreBufVars()
+-    let filtbuf= bufnr("%")
+-    setlocal ff=unix
+-    if exists("g:netrw_port") && g:netrw_port != ""
+-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+-"     call Decho("filter input: ".getline('.'))
+     else
+-     keepj put ='open '.g:netrw_machine
+-"     call Decho("filter input: ".getline('.'))
+-    endif
++     " Explore -- initialize
++     " build list of files to Explore with Nexplore/Pexplore
++"     call Decho("(Explore) ..starpat=".starpat.": case Explore: initialize (indx=".indx.")")
++     keepj keepalt call s:NetrwClearExplore()
++     let w:netrw_explore_indx= 0
++     if !exists("b:netrw_curdir")
++      let b:netrw_curdir= getcwd()
++     endif
++"     call Decho("(Explore) ....starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
+ 
+-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+-     keepj put =g:netrw_uid
+-"     call Decho("filter input: ".getline('.'))
+-     keepj put ='\"'.s:netrw_passwd.'\"'
+-"     call Decho("filter input: ".getline('.'))
+-    else
+-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+-"     call Decho("filter input: ".getline('.'))
+-    endif
++     " switch on starpat to build the w:netrw_explore_list of files
++     if starpat == 1
++      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
++"      call Decho("(Explore) ..case starpat=".starpat.": build *//pattern list  (curdir-only srch for files containing pattern)  &hls=".&hls)
++"      call Decho("(Explore) ....pattern<".pattern.">")
++      try
++       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
++      catch /^Vim\%((\a\+)\)\=:E480/
++       keepalt call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
++"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
++       return
++      endtry
++      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
++      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+ 
+-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+-     keepj put =g:netrw_ftpmode
+-"     call Decho("filter input: ".getline('.'))
+-    endif
+-    if exists("g:netrw_ftpextracmd")
+-     put =g:netrw_ftpextracmd
+-"     call Decho("filter input: ".getline('.'))
+-    endif
+-    keepj put ='get \"'.netrw_fname.'\" '.tmpfile
+-"    call Decho("filter input: ".getline('.'))
++     elseif starpat == 2
++      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
++"      call Decho("(Explore) ..case starpat=".starpat.": build **//pattern list  (recursive descent files containing pattern)")
++"      call Decho("(Explore) ....pattern<".pattern.">")
++      try
++       exe "sil keepj noautocmd keepalt vimgrep /".pattern."/gj "."**/*"
++      catch /^Vim\%((\a\+)\)\=:E480/
++       keepalt call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
++       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
++       sil! let @* = keepregstar
++       sil! let @+ = keepregstar
++       sil! let @/ = keepregslash
++"       call Dret("netrw#Explore : no files matched pattern")
++       return
++      endtry
++      let s:netrw_curdir       = b:netrw_curdir
++      let w:netrw_explore_list = getqflist()
++      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
++      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+ 
+-    " perform ftp:
+-    " -i       : turns off interactive prompting from ftp
+-    " -n  unix : DON'T use <.netrc>, even though it exists
+-    " -n  win32: quit being obnoxious about password
+-    norm! 1Gdd
+-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+-    if getline(1) !~ "^$"
+-"     call Decho("error<".getline(1).">")
+-     if !exists("g:netrw_quiet")
+-      call netrw#ErrorMsg(s:ERROR,getline(1),5)
+-     endif
+-    endif
+-    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
+-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-    let b:netrw_lastfile = choice
++     elseif starpat == 3
++      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
++"      call Decho("(Explore) ..case starpat=".starpat.": build */filepat list  (curdir-only srch filenames matching filepat)  &hls=".&hls)
++      let filepat= substitute(dirname,'^\*/','','')
++      let filepat= substitute(filepat,'^[%#<]','\\&','')
++"      call Decho("(Explore) ....b:netrw_curdir<".b:netrw_curdir.">")
++"      call Decho("(Explore) ....filepat<".filepat.">")
++      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
++      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
+ 
+-   ".........................................
+-   " NetRead: (scp) NetRead Method #4 {{{3
+-   elseif     b:netrw_method  == 4	" read with scp
+-"    call Decho("read via scp (method #4)")
+-    if exists("g:netrw_port") && g:netrw_port != ""
+-     let useport= " ".g:netrw_scpport." ".g:netrw_port
+-    else
+-     let useport= ""
+-    endif
+-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-    let b:netrw_lastfile = choice
++     elseif starpat == 4
++      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
++"      call Decho("(Explore) ..case starpat=".starpat.": build **/filepat list  (recursive descent srch filenames matching filepat)  &hls=".&hls)
++      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
++      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
++     endif " switch on starpat to build w:netrw_explore_list
+ 
+-   ".........................................
+-   " NetRead: (http) NetRead Method #5 (wget) {{{3
+-   elseif     b:netrw_method  == 5
+-"    call Decho("read via http (method #5)")
+-    if g:netrw_http_cmd == ""
+-     if !exists("g:netrw_quiet")
+-      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
+-     endif
+-"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
+-     return
+-    endif
++     let w:netrw_explore_listlen = len(w:netrw_explore_list)
++"     call Decho("(Explore) ....w:netrw_explore_list<".string(w:netrw_explore_list).">")
++"     call Decho("(Explore) ....w:netrw_explore_listlen=".w:netrw_explore_listlen)
+ 
+-    if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd")
+-     " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch)
+-"     call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
+-     if exists("g:netrw_http_xcmd")
+-"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1))
+-      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
+-     else
+-"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1))
+-      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
++     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
++      keepalt keepj call netrw#ErrorMsg(s:WARNING,"no files matched",42)
++      sil! let @* = keepregstar
++      sil! let @+ = keepregstar
++      sil! let @/ = keepregslash
++"      call Dret("netrw#Explore : no files matched")
++      return
+      endif
+-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-
+-    else
+-     " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
+-"     call Decho(("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
+-     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
+-     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
+-"     call Decho("netrw_html<".netrw_html.">")
+-"     call Decho("netrw_tag <".netrw_tag.">")
+-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
+-     exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
+-     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
+-     exe 'norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
+-    endif
+-    let b:netrw_lastfile = choice
+-    setlocal ro
+-
+-   ".........................................
+-   " NetRead: (dav) NetRead Method #6 {{{3
+-   elseif     b:netrw_method  == 6
+-"    call Decho("read via cadaver (method #6)")
++    endif  " if indx ... endif
+ 
+-    if !executable(g:netrw_dav_cmd)
+-     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
+-"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
+-     return
+-    endif
+-    if g:netrw_dav_cmd =~ "curl"
+-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
+-     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
+-    else
+-     " Construct execution string (four lines) which will be passed through filter
+-     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+-     new
+-     setlocal ff=unix
+-     if exists("g:netrw_port") && g:netrw_port != ""
+-      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+-     else
+-      keepj put ='open '.g:netrw_machine
+-     endif
+-     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+-     keepj put ='get '.netrw_fname.' '.tmpfile
+-     keepj put ='quit'
++    " NetrwStatusLine support - for exploring support
++    let w:netrw_explore_indx= indx
++"    call Decho("(Explore) ....w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
+ 
+-     " perform cadaver operation:
+-     keepj norm! 1Gdd
+-"    call Decho("executing: %!".g:netrw_dav_cmd)
+-     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
+-     bd!
++    " wrap the indx around, but issue a note
++    if indx >= w:netrw_explore_listlen || indx < 0
++"     call Decho("(Explore) ....wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
++     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
++     let w:netrw_explore_indx= indx
++     keepalt keepj call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
+     endif
+-    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-    let b:netrw_lastfile = choice
+ 
+-   ".........................................
+-   " NetRead: (rsync) NetRead Method #7 {{{3
+-   elseif     b:netrw_method  == 7
+-"    call Decho("read via rsync (method #7)")
+-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
+-    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
+-    let result		 = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+-    let b:netrw_lastfile = choice
++    exe "let dirfile= w:netrw_explore_list[".indx."]"
++"    call Decho("(Explore) ....dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
++    let newdir= substitute(dirfile,'/[^/]*$','','e')
++"    call Decho("(Explore) ....newdir<".newdir.">")
+ 
+-   ".........................................
+-   " NetRead: (fetch) NetRead Method #8 {{{3
+-   "    fetch://[user@]host[:http]/path
+-   elseif     b:netrw_method  == 8
+-"    call Decho("read via fetch (method #8)")
+-    if g:netrw_fetch_cmd == ""
+-     if !exists("g:netrw_quiet")
+-      call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
+-     endif
+-"     call Dret("NetRead")
+-    endif
+-    if exists("g:netrw_option") && g:netrw_option == ":http"
+-     let netrw_option= "http"
+-    else
+-     let netrw_option= "ftp"
++"    call Decho("(Explore) ....calling LocalBrowseCheck(newdir<".newdir.">)")
++    call netrw#LocalBrowseCheck(newdir)
++    if !exists("w:netrw_liststyle")
++     let w:netrw_liststyle= g:netrw_liststyle
+     endif
+-"    call Decho("read via fetch for ".netrw_option)
+-
+-    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
+-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
+-     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
++    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
++     keepalt keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
+     else
+-"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
+-     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
++     keepalt keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
+     endif
++    let w:netrw_explore_mtchcnt = indx + 1
++    let w:netrw_explore_bufnr   = bufnr("%")
++    let w:netrw_explore_line    = line(".")
++    keepalt keepj call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
++"    call Decho("(Explore) ....explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
+ 
+-    let result		= s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
+-    let b:netrw_lastfile = choice
+-    setlocal ro
+-
+-   ".........................................
+-   " NetRead: (sftp) NetRead Method #9 {{{3
+-   elseif     b:netrw_method  == 9
+-"    call Decho("read via sftp (method #9)")
+-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
+-    exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
+-    let result		= s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+-    let b:netrw_lastfile = choice
+-
+-   ".........................................
+-   " NetRead: Complain {{{3
+    else
+-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
++"    call Decho("(Explore) ..your vim does not have +path_extra")
++    if !exists("g:netrw_quiet")
++     keepalt keepj call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
++    endif
++    sil! let @* = keepregstar
++    sil! let @+ = keepregstar
++    sil! let @/ = keepregslash
++"    call Dret("netrw#Explore : missing +path_extra")
++    return
+    endif
+-  endwhile
+-
+-  " NetRead: cleanup {{{3
+-  if exists("b:netrw_method")
+-"   call Decho("cleanup b:netrw_method and b:netrw_fname")
+-   unlet b:netrw_method
+-   unlet b:netrw_fname
+-  endif
+-  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz'
+-"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
+-   call s:NetrwDelete(tmpfile)
+-  endif
+-  call s:NetrwOptionRestore("w:")
+-
+-"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
+-endfun
+-
+-" ------------------------------------------------------------------------
+-" netrw#NetWrite: responsible for writing a file over the net {{{2
+-fun! netrw#NetWrite(...) range
+-"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
+-
+-  " NetWrite: option handling {{{3
+-  let mod= 0
+-  call s:NetrwOptionSave("w:")
+-  call s:NetrwSafeOptions()
+-
+-  " NetWrite: Get Temporary Filename {{{3
+-  let tmpfile= s:GetTempfile("")
+-  if tmpfile == ""
+-"   call Dret("netrw#NetWrite : unable to get a tempfile!")
+-   return
+-  endif
+ 
+-  if a:0 == 0
+-   let ichoice = 0
+   else
+-   let ichoice = 1
++"   call Decho("(Explore) ..default case: Explore newdir<".dirname.">")
++   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
++    sil! unlet w:netrw_treedict
++    sil! unlet w:netrw_treetop
++   endif
++   let newdir= dirname
++   if !exists("b:netrw_curdir")
++    keepj call netrw#LocalBrowseCheck(getcwd())
++   else
++    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
++   endif
+   endif
+ 
+-  let curbufname= expand("%")
+-"  call Decho("curbufname<".curbufname.">")
+-  if &binary
+-   " For binary writes, always write entire file.
+-   " (line numbers don't really make sense for that).
+-   " Also supports the writing of tar and zip files.
+-"   call Decho("(write entire file) silent exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+-   exe "silent keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
+-  elseif g:netrw_cygwin
+-   " write (selected portion of) file to temporary
+-   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
+-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
+-   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
++  " visual display of **/ **// */ Exploration files
++"  call Decho("(Explore) w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
++"  call Decho("(Explore) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
++  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
++"   call Decho("(Explore) s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
++   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
++    " only update match list if current directory isn't the same as before
++"    call Decho("(Explore) only update match list if current directory not the same as before")
++    let s:explore_prvdir = b:netrw_curdir
++    let s:explore_match  = ""
++    let dirlen           = s:Strlen(b:netrw_curdir)
++    if b:netrw_curdir !~ '/$'
++     let dirlen= dirlen + 1
++    endif
++    let prvfname= ""
++    for fname in w:netrw_explore_list
++"     call Decho("(Explore) fname<".fname.">")
++     if fname =~ '^'.b:netrw_curdir
++      if s:explore_match == ""
++       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
++      else
++       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
++      endif
++     elseif fname !~ '^/' && fname != prvfname
++      if s:explore_match == ""
++       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
++      else
++       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
++      endif
++     endif
++     let prvfname= fname
++    endfor
++"    call Decho("(Explore) explore_match<".s:explore_match.">")
++    exe "2match netrwMarkFile /".s:explore_match."/"
++   endif
++   echo "<s-up>==Pexplore  <s-down>==Nexplore"
+   else
+-   " write (selected portion of) file to temporary
+-"   call Decho("(write selected portion) silent exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
+-   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
++   2match none
++   if exists("s:explore_match")  | unlet s:explore_match  | endif
++   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
++   echo " "
++"   call Decho("(Explore) cleared explore match list")
+   endif
+ 
+-  if curbufname == ""
+-   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
+-   " on the temporary file's name.  Deletion of the temporary file during
+-   " cleanup then causes an error message.
+-   0file!
++  sil! let @* = keepregstar
++  sil! let @+ = keepregstar
++  sil! let @/ = keepregslash
++"  call Dret("netrw#Explore : @/<".@/.">")
++endfun
++
++" ---------------------------------------------------------------------
++" netrw#NetrwMakeTgt: make a target out of the directory name provided {{{2
++fun! netrw#NetrwMakeTgt(dname)
++"  call Dfunc("netrw#NetrwMakeTgt(dname<".a:dname.">)")
++   " simplify the target (eg. /abc/def/../ghi -> /abc/ghi)
++  let svpos               = netrw#NetrwSavePosn()
++  let s:netrwmftgt_islocal= (a:dname !~ '^\a\+://')
++"  call Decho("s:netrwmftgt_islocal=".s:netrwmftgt_islocal)
++  if s:netrwmftgt_islocal
++   let netrwmftgt= simplify(a:dname)
++  else
++   let netrwmftgt= a:dname
++  endif
++  if exists("s:netrwmftgt") && netrwmftgt == s:netrwmftgt
++   " re-selected target, so just clear it
++   unlet s:netrwmftgt s:netrwmftgt_islocal
++  else
++   let s:netrwmftgt= netrwmftgt
++  endif
++  if g:netrw_fastbrowse <= 1
++   call s:NetrwRefresh((b:netrw_curdir !~ '\a\+://'),b:netrw_curdir)
+   endif
++  call netrw#NetrwRestorePosn(svpos)
++"  call Dret("netrw#NetrwMakeTgt")
++endfun
+ 
+-  " NetWrite: while choice loop: {{{3
+-  while ichoice <= a:0
++" ---------------------------------------------------------------------
++" netrw#NetrwClean: remove netrw {{{2
++" supports :NetrwClean  -- remove netrw from first directory on runtimepath
++"          :NetrwClean! -- remove netrw from all directories on runtimepath
++fun! netrw#NetrwClean(sys)
++"  call Dfunc("netrw#NetrwClean(sys=".a:sys.")")
+ 
+-   " Process arguments: {{{4
+-   " attempt to repeat with previous host-file-etc
+-   if exists("b:netrw_lastfile") && a:0 == 0
+-"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
+-    let choice = b:netrw_lastfile
+-    let ichoice= ichoice + 1
+-   else
+-    exe "let choice= a:" . ichoice
++  if a:sys
++   let choice= confirm("Remove personal and system copies of netrw?","&Yes\n&No")
++  else
++   let choice= confirm("Remove personal copy of netrw?","&Yes\n&No")
++  endif
++"  call Decho("choice=".choice)
++  let diddel= 0
++  let diddir= ""
+ 
+-    " Reconstruct Choice if choice starts with '"'
+-    if match(choice,"?") == 0
+-     echomsg 'NetWrite Usage:"'
+-     echomsg ':Nwrite machine:path                        uses rcp'
+-     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
+-     echomsg ':Nwrite "machine id password path"          uses ftp'
+-     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
+-     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
+-     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
+-     echomsg ':Nwrite rcp://machine/path                  uses rcp'
+-     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
+-     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
+-     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
+-     sleep 4
+-     break
++  if choice == 1
++   for dir in split(&rtp,',')
++    if filereadable(dir."/plugin/netrwPlugin.vim")
++"     call Decho("removing netrw-related files from ".dir)
++     if s:NetrwDelete(dir."/plugin/netrwPlugin.vim")        |call netrw#ErrorMsg(1,"unable to remove ".dir."/plugin/netrwPlugin.vim",55)        |endif
++     if s:NetrwDelete(dir."/autoload/netrwFileHandlers.vim")|call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwFileHandlers.vim",55)|endif
++     if s:NetrwDelete(dir."/autoload/netrwSettings.vim")    |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrwSettings.vim",55)    |endif
++     if s:NetrwDelete(dir."/autoload/netrw.vim")            |call netrw#ErrorMsg(1,"unable to remove ".dir."/autoload/netrw.vim",55)            |endif
++     if s:NetrwDelete(dir."/syntax/netrw.vim")              |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrw.vim",55)              |endif
++     if s:NetrwDelete(dir."/syntax/netrwlist.vim")          |call netrw#ErrorMsg(1,"unable to remove ".dir."/syntax/netrwlist.vim",55)          |endif
++     let diddir= dir
++     let diddel= diddel + 1
++     if !a:sys|break|endif
++    endif
++   endfor
++  endif
+ 
+-    elseif match(choice,"^\"") != -1
+-     if match(choice,"\"$") != -1
+-       " case "..."
+-      let choice=strpart(choice,1,strlen(choice)-2)
+-     else
+-      "  case "... ... ..."
+-      let choice      = strpart(choice,1,strlen(choice)-1)
+-      let wholechoice = ""
++   echohl WarningMsg
++  if diddel == 0
++   echomsg "netrw is either not installed or not removable"
++  elseif diddel == 1
++   echomsg "removed one copy of netrw from <".diddir.">"
++  else
++   echomsg "removed ".diddel." copies of netrw"
++  endif
++   echohl None
+ 
+-      while match(choice,"\"$") == -1
+-       let wholechoice= wholechoice . " " . choice
+-       let ichoice    = ichoice + 1
+-       if choice > a:0
+-       	if !exists("g:netrw_quiet")
+-	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
+-	endif
+-"        call Dret("netrw#NetWrite")
+-        return
+-       endif
+-       let choice= a:{ichoice}
+-      endwhile
+-      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
++"  call Dret("netrw#NetrwClean")
++endfun
++
++" ---------------------------------------------------------------------
++" netrw#Nread: {{{2
++fun! netrw#Nread(mode,fname)
++"  call Dfunc("netrw#Nread(mode=".a:mode." fname<".a:fname.">)")
++  call netrw#NetrwSavePosn()
++  call netrw#NetRead(a:mode,a:fname)
++  call netrw#NetrwRestorePosn()
++"  call Dret("netrw#Nread")
++endfun
++
++" ------------------------------------------------------------------------
++" netrw#NetrwObtain: {{{2
++"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
++"     islocal=0  obtain from remote source
++"            =1  obtain from local source
++"     fname  :   a filename or a list of filenames
++"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
++fun! netrw#NetrwObtain(islocal,fname,...)
++"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
++  " NetrwStatusLine support - for obtaining support
++
++  if type(a:fname) == 1
++   let fnamelist= [ a:fname ]
++  elseif type(a:fname) == 3
++   let fnamelist= a:fname
++  else
++   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
++"   call Dret("netrw#NetrwObtain")
++   return
++  endif
++"  call Decho("fnamelist<".string(fnamelist).">")
++  if a:0 > 0
++   let tgtdir= a:1
++  else
++   let tgtdir= getcwd()
++  endif
++"  call Decho("tgtdir<".tgtdir.">")
++
++  if exists("b:netrw_islocal") && b:netrw_islocal
++   " obtain a file from local b:netrw_curdir to (local) tgtdir
++"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
++   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
++    let topath= s:ComposePath(tgtdir,"")
++    if (has("win32") || has("win95") || has("win64") || has("win16"))
++     " transfer files one at time
++"     call Decho("transfer files one at a time")
++     for fname in fnamelist
++"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
++      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
++      if v:shell_error != 0
++       call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
++"       call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
++       return
++      endif
++     endfor
++    else
++     " transfer files with one command
++"     call Decho("transfer files with one command")
++     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
++"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
++     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
++     if v:shell_error != 0
++      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localcopycmd<".g:netrw_localcopycmd."> to something that works",80)
++"      call Dret("s:NetrwObtain 0 : failed: ".g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
++      return
+      endif
+     endif
+-   endif
+-   let ichoice= ichoice + 1
+-"   call Decho("choice<" . choice . "> ichoice=".ichoice)
+-
+-   " Determine method of write (ftp, rcp, etc) {{{4
+-   call s:NetrwMethod(choice)
+-   if !exists("b:netrw_method") || b:netrw_method < 0
+-"    call Dfunc("netrw#NetWrite : unsupported method")
+-    return
++   elseif !exists("b:netrw_curdir")
++    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
++   else
++    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
+    endif
+ 
+-   " =============
+-   " NetWrite: Perform Protocol-Based Write {{{3
+-   " ============================
+-   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
+-    echo "(netrw) Processing your write request..."
+-"    call Decho("(netrw) Processing your write request...")
++  else
++   " obtain files from remote b:netrw_curdir to local tgtdir
++"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
++   if type(a:fname) == 1
++    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
+    endif
++   call s:NetrwMethod(b:netrw_curdir)
+ 
+-   ".........................................
+-   " NetWrite: (rcp) NetWrite Method #1 {{{3
+-   if  b:netrw_method == 1
+-"    call Decho("write via rcp (method #1)")
+-    if s:netrw_has_nt_rcp == 1
+-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+-      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
+-     else
+-      let uid_machine = g:netrw_machine .'.'. $USERNAME
+-     endif
++   if b:netrw_method == 4
++    " obtain file using scp
++"    call Decho("obtain via scp (method#4)")
++    if exists("g:netrw_port") && g:netrw_port != ""
++     let useport= " ".g:netrw_scpport." ".g:netrw_port
+     else
+-     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+-      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+-     else
+-      let uid_machine = g:netrw_machine
+-     endif
++     let useport= ""
+     endif
+-"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
+-    exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
+-    let b:netrw_lastfile = choice
+-
+-   ".........................................
+-   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
+-   elseif b:netrw_method == 2
+-"    call Decho("write via ftp+.netrc (method #2)")
+-    let netrw_fname = b:netrw_fname
+-
+-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+-    let bhkeep      = &l:bh
+-    let curbuf      = bufnr("%")
+-    setlocal bh=hide
+-    enew
+-
+-"    call Decho("filter input window#".winnr())
+-    setlocal ff=unix
+-    keepj put =g:netrw_ftpmode
+-"    call Decho("filter input: ".getline('$'))
+-    if exists("g:netrw_ftpextracmd")
+-     keepj put =g:netrw_ftpextracmd
+-"     call Decho("filter input: ".getline("$"))
+-    endif
+-    call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
+-"    call Decho("filter input: ".getline("$"))
+-    if exists("g:netrw_port") && g:netrw_port != ""
+-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
++    if b:netrw_fname =~ '/'
++     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
+     else
+-"     call Decho("filter input window#".winnr())
+-"     call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
++     let path= ""
+     endif
+-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+-    if getline(1) !~ "^$"
+-     if !exists("g:netrw_quiet")
+-      call netrw#ErrorMsg(s:ERROR,getline(1),14)
++    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
++"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
++    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
++
++   elseif b:netrw_method == 2
++    " obtain file using ftp + .netrc
++"     call Decho("obtain via ftp+.netrc (method #2)")
++     call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
++     let tmpbufnr= bufnr("%")
++     setl ff=unix
++     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
++      keepj put =g:netrw_ftpmode
++"      call Decho("filter input: ".getline('$'))
+      endif
+-     let mod=1
+-    endif
+ 
+-    " remove enew buffer (quietly)
+-    let filtbuf= bufnr("%")
+-    exe curbuf."b!"
+-    let &l:bh            = bhkeep
+-    exe filtbuf."bw!"
++     if exists("b:netrw_fname") && b:netrw_fname != ""
++      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
++"      call Decho("filter input: ".getline('$'))
++     endif
+ 
+-    let b:netrw_lastfile = choice
++     if exists("g:netrw_ftpextracmd")
++      keepj put =g:netrw_ftpextracmd
++"      call Decho("filter input: ".getline('$'))
++     endif
++     for fname in fnamelist
++      call setline(line("$")+1,'get "'.fname.'"')
++"      call Decho("filter input: ".getline('$'))
++     endfor
++     if exists("g:netrw_port") && g:netrw_port != ""
++"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
++      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
++     else
++"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
++      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
++     endif
++     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
++     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
++      let debugkeep= &debug
++      setl debug=msg
++      call netrw#ErrorMsg(s:ERROR,getline(1),4)
++      let &debug= debugkeep
++     endif
+ 
+-   ".........................................
+-   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
+    elseif b:netrw_method == 3
+-    " Construct execution string (three or more lines) which will be passed through filter
+-"    call Decho("read via ftp+mipf (method #3)")
+-    let netrw_fname = b:netrw_fname
+-    let bhkeep      = &l:bh
+-
+-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+-    let curbuf      = bufnr("%")
+-    setlocal bh=hide
+-    enew
+-    setlocal ff=unix
++    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
++"    call Decho("obtain via ftp+mipf (method #3)")
++    call s:SaveBufVars()|sil keepjumps new|call s:RestoreBufVars()
++    let tmpbufnr= bufnr("%")
++    setl ff=unix
+ 
+     if exists("g:netrw_port") && g:netrw_port != ""
+      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+-"     call Decho("filter input: ".getline('.'))
++"     call Decho("filter input: ".getline('$'))
+     else
+      keepj put ='open '.g:netrw_machine
+-"     call Decho("filter input: ".getline('.'))
++"     call Decho("filter input: ".getline('$'))
+     endif
+-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+-     keepj put =g:netrw_uid
+-"     call Decho("filter input: ".getline('.'))
+-     keepj put ='\"'.s:netrw_passwd.'\"'
+-"     call Decho("filter input: ".getline('.'))
+-    else
+-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+-"     call Decho("filter input: ".getline('.'))
++
++    if exists("g:netrw_uid") && g:netrw_uid != ""
++     if exists("g:netrw_ftp") && g:netrw_ftp == 1
++      keepj put =g:netrw_uid
++"      call Decho("filter input: ".getline('$'))
++      if exists("s:netrw_passwd") && s:netrw_passwd != ""
++       keepj put ='\"'.s:netrw_passwd.'\"'
++      endif
++"      call Decho("filter input: ".getline('$'))
++     elseif exists("s:netrw_passwd")
++      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
++"      call Decho("filter input: ".getline('$'))
++     endif
+     endif
+-    keepj put =g:netrw_ftpmode
+-"    call Decho("filter input: ".getline('$'))
++
++    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
++     keepj put =g:netrw_ftpmode
++"     call Decho("filter input: ".getline('$'))
++    endif
++
++    if exists("b:netrw_fname") && b:netrw_fname != ""
++     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
++"     call Decho("filter input: ".getline('$'))
++    endif
++
+     if exists("g:netrw_ftpextracmd")
+      keepj put =g:netrw_ftpextracmd
+-"     call Decho("filter input: ".getline("$"))
++"     call Decho("filter input: ".getline('$'))
+     endif
+-    keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
+-"    call Decho("filter input: ".getline('.'))
+-    " save choice/id/password for future use
+-    let b:netrw_lastfile = choice
++
++    if exists("g:netrw_ftpextracmd")
++     keepj put =g:netrw_ftpextracmd
++"     call Decho("filter input: ".getline('$'))
++    endif
++    for fname in fnamelist
++     keepj call setline(line("$")+1,'get "'.fname.'"')
++    endfor
++"    call Decho("filter input: ".getline('$'))
+ 
+     " perform ftp:
+     " -i       : turns off interactive prompting from ftp
+     " -n  unix : DON'T use <.netrc>, even though it exists
+     " -n  win32: quit being obnoxious about password
+     keepj norm! 1Gdd
+-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
++"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
++    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+     if getline(1) !~ "^$"
+-     if  !exists("g:netrw_quiet")
+-      call netrw#ErrorMsg(s:ERROR,getline(1),15)
++"     call Decho("error<".getline(1).">")
++     if !exists("g:netrw_quiet")
++      keepj call netrw#ErrorMsg(s:ERROR,getline(1),5)
+      endif
+-     let mod=1
+     endif
++   elseif !exists("b:netrw_method") || b:netrw_method < 0
++"    call Dfunc("netrw#NetrwObtain : unsupported method")
++    return
++   endif
+ 
+-    " remove enew buffer (quietly)
+-    let filtbuf= bufnr("%")
+-    exe curbuf."b!"
+-    let &l:bh= bhkeep
+-    exe filtbuf."bw!"
+-
+-   ".........................................
+-   " NetWrite: (scp) NetWrite Method #4 {{{3
+-   elseif     b:netrw_method == 4
+-"    call Decho("write via scp (method #4)")
+-    if exists("g:netrw_port") && g:netrw_port != ""
+-     let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
+-    else
+-     let useport= ""
+-    endif
+-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+-    let b:netrw_lastfile = choice
++   " restore status line
++   if type(a:fname) == 1 && exists("s:netrw_users_stl")
++    keepj call s:SetupNetrwStatusLine(s:netrw_users_stl)
++   endif
+ 
+-   ".........................................
+-   " NetWrite: (http) NetWrite Method #5 {{{3
+-   elseif     b:netrw_method == 5
+-"    call Decho("write via http (method #5)")
+-    if !exists("g:netrw_quiet")
+-     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
+-    endif
++  endif
+ 
+-   ".........................................
+-   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
+-   elseif     b:netrw_method == 6
+-"    call Decho("write via cadaver (method #6)")
++  " cleanup
++  if exists("tmpbufnr")
++   if bufnr("%") != tmpbufnr
++    exe tmpbufnr."bw!"
++   else
++    q!
++   endif
++  endif
+ 
+-    " Construct execution string (four lines) which will be passed through filter
+-    let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape)
+-    let bhkeep      = &l:bh
++"  call Dret("netrw#NetrwObtain")
++endfun
+ 
+-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+-    let curbuf      = bufnr("%")
+-    setlocal bh=hide
+-    enew
++" ---------------------------------------------------------------------
++" NetrwStatusLine: {{{2
++fun! NetrwStatusLine()
+ 
+-    setlocal ff=unix
+-    if exists("g:netrw_port") && g:netrw_port != ""
+-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+-    else
+-     keepj put ='open '.g:netrw_machine
+-    endif
+-    if exists("g:netrw_uid") && exists("s:netrw_passwd")
+-     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
+-    endif
+-    keepj put ='put '.tmpfile.' '.netrw_fname
++" vvv NetrwStatusLine() debugging vvv
++"  let g:stlmsg=""
++"  if !exists("w:netrw_explore_bufnr")
++"   let g:stlmsg="!X<explore_bufnr>"
++"  elseif w:netrw_explore_bufnr != bufnr("%")
++"   let g:stlmsg="explore_bufnr!=".bufnr("%")
++"  endif
++"  if !exists("w:netrw_explore_line")
++"   let g:stlmsg=" !X<explore_line>"
++"  elseif w:netrw_explore_line != line(".")
++"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
++"  endif
++"  if !exists("w:netrw_explore_list")
++"   let g:stlmsg=" !X<explore_list>"
++"  endif
++" ^^^ NetrwStatusLine() debugging ^^^
+ 
+-    " perform cadaver operation:
+-    keepj norm! 1Gdd
+-"    call Decho("executing: %!".g:netrw_dav_cmd)
+-    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
++  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
++   " restore user's status line
++   let &stl        = s:netrw_users_stl
++   let &laststatus = s:netrw_users_ls
++   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
++   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
++   return ""
++  else
++   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
++  endif
++endfun
+ 
+-    " remove enew buffer (quietly)
+-    let filtbuf= bufnr("%")
+-    exe curbuf."b!"
+-    let &l:bh            = bhkeep
+-    exe filtbuf."bw!"
++" ---------------------------------------------------------------------
++"  Netrw Transfer Functions: {{{1
++" ===============================
+ 
+-    let b:netrw_lastfile = choice
++" ------------------------------------------------------------------------
++" netrw#NetRead: responsible for reading a file over the net {{{2
++"   mode: =0 read remote file and insert before current line
++"         =1 read remote file and insert after current line
++"         =2 replace with remote file
++"         =3 obtain file, but leave in temporary format
++fun! netrw#NetRead(mode,...)
++"  call Dfunc("netrw#NetRead(mode=".a:mode.",...) a:0=".a:0." ".g:loaded_netrw.((a:0 > 0)? " a:1<".a:1.">" : ""))
+ 
+-   ".........................................
+-   " NetWrite: (rsync) NetWrite Method #7 {{{3
+-   elseif     b:netrw_method == 7
+-"    call Decho("write via rsync (method #7)")
+-"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
+-    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
+-    let b:netrw_lastfile = choice
++  " NetRead: save options {{{3
++  call s:NetrwOptionSave("w:")
++  call s:NetrwSafeOptions()
++  call s:RestoreCursorline()
+ 
+-   ".........................................
+-   " NetWrite: (sftp) NetWrite Method #9 {{{3
+-   elseif     b:netrw_method == 9
+-"    call Decho("read via sftp (method #9)")
+-    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
+-    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
+-     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
+-    else
+-     let uid_machine = g:netrw_machine
+-    endif
+-
+-    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
+-    let bhkeep = &l:bh
+-    let curbuf = bufnr("%")
+-    setlocal bh=hide
+-    enew
+-
+-    setlocal ff=unix
+-    call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
+-"    call Decho("filter input: ".getline('.'))
+-"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
+-    exe s:netrw_silentxfer."%!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1)
+-    let filtbuf= bufnr("%")
+-    exe curbuf."b!"
+-    let &l:bh            = bhkeep
+-    exe filtbuf."bw!"
+-    let b:netrw_lastfile = choice
+-
+-   ".........................................
+-   " NetWrite: Complain {{{3
+-   else
+-    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
+-   endif
+-  endwhile
+-
+-  " NetWrite: Cleanup: {{{3
+-"  call Decho("cleanup")
+-  if s:FileReadable(tmpfile)
+-"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
+-   call s:NetrwDelete(tmpfile)
+-  endif
+-  call s:NetrwOptionRestore("w:")
+-
+-  if a:firstline == 1 && a:lastline == line("$")
+-   " restore modifiability; usually equivalent to set nomod
+-   let &mod= mod
+-  endif
+-
+-  " restore equalalways
+-"  call Dret("netrw#NetWrite")
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" netrw#NetSource: source a remotely hosted vim script {{{2
+-" uses NetRead to get a copy of the file into a temporarily file,
+-"              then sources that file,
+-"              then removes that file.
+-fun! netrw#NetSource(...)
+-"  call Dfunc("netrw#NetSource() a:0=".a:0)
+-  if a:0 > 0 && a:1 == '?'
+-   " give help
+-   echomsg 'NetSource Usage:'
+-   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
+-   echomsg ':Nsource fetch://machine/path                 uses fetch'
+-   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
+-   echomsg ':Nsource http://[user@]machine/path           uses http  wget'
+-   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
+-   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
+-   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
+-   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
+-   sleep 4
++  " NetRead: interpret mode into a readcmd {{{3
++  if     a:mode == 0 " read remote file before current line
++   let readcmd = "0r"
++  elseif a:mode == 1 " read file after current line
++   let readcmd = "r"
++  elseif a:mode == 2 " replace with remote file
++   let readcmd = "%r"
++  elseif a:mode == 3 " skip read of file (leave as temporary)
++   let readcmd = "t"
+   else
+-   let i= 1
+-   while i <= a:0
+-    call netrw#NetRead(3,a:{i})
+-"    call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">")
+-    if s:FileReadable(s:netrw_tmpfile)
+-"     call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile))
+-     exe "so ".fnameescape(s:netrw_tmpfile)
+-"     call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")")
+-     call delete(s:netrw_tmpfile)
+-     unlet s:netrw_tmpfile
+-    else
+-     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
+-    endif
+-    let i= i + 1
+-   endwhile
++   exe a:mode
++   let readcmd = "r"
+   endif
+-"  call Dret("netrw#NetSource")
+-endfun
+-
+-" ===========================================
+-" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
+-"    readcmd == %r : replace buffer with newly read file
+-"            == 0r : read file at top of buffer
+-"            == r  : read file after current line
+-"            == t  : leave file in temporary form (ie. don't read into buffer)
+-fun! s:NetrwGetFile(readcmd, tfile, method)
+-"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
++  let ichoice = (a:0 == 0)? 0 : 1
++"  call Decho("readcmd<".readcmd."> ichoice=".ichoice)
+ 
+-  " readcmd=='t': simply do nothing
+-  if a:readcmd == 't'
+-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
++  " NetRead: get temporary filename {{{3
++  let tmpfile= s:GetTempfile("")
++  if tmpfile == ""
++"   call Dret("netrw#NetRead : unable to get a tempfile!")
+    return
+   endif
+ 
+-  " get name of remote filename (ie. url and all)
+-  let rfile= bufname("%")
+-"  call Decho("rfile<".rfile.">")
+-
+-  if exists("*NetReadFixup")
+-   " for the use of NetReadFixup (not otherwise used internally)
+-   let line2= line("$")
+-  endif
+-
+-  if a:readcmd[0] == '%'
+-  " get file into buffer
+-"   call Decho("get file into buffer")
++  while ichoice <= a:0
+ 
+-   " rename the current buffer to the temp file (ie. tfile)
+-   if g:netrw_cygwin
+-    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
+-   else
+-    let tfile= a:tfile
+-   endif
+-"   call Decho("exe sil! keepalt file ".fnameescape(tfile))
+-   exe "sil! keepalt file ".fnameescape(tfile)
++   " attempt to repeat with previous host-file-etc
++   if exists("b:netrw_lastfile") && a:0 == 0
++"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
++    let choice = b:netrw_lastfile
++    let ichoice= ichoice + 1
+ 
+-   " edit temporary file (ie. read the temporary file in)
+-   if     rfile =~ '\.zip$'
+-"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
+-    call zip#Browse(tfile)
+-   elseif rfile =~ '\.tar$'
+-"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
+-    call tar#Browse(tfile)
+-   elseif rfile =~ '\.tar\.gz$'
+-"    call Decho("handling remote gzip-compressed tar file")
+-    call tar#Browse(tfile)
+-   elseif rfile =~ '\.tar\.bz2$'
+-"    call Decho("handling remote bz2-compressed tar file")
+-    call tar#Browse(tfile)
+-   elseif rfile =~ '\.tar\.xz$'
+-"    call Decho("handling remote xz-compressed tar file")
+-    call tar#Browse(tfile)
+-   elseif rfile =~ '\.txz$'
+-"    call Decho("handling remote xz-compressed tar file (.txz)")
+-    call tar#Browse(tfile)
+    else
+-"    call Decho("edit temporary file")
+-    e!
+-   endif
+-
+-   " rename buffer back to remote filename
+-"   call Decho("exe sil! keepalt file ".fnameescape(rfile))
+-   exe "sil! keepalt file ".fnameescape(rfile)
+-   filetype detect
+-"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
+-   let line1 = 1
+-   let line2 = line("$")
++    exe "let choice= a:" . ichoice
++"    call Decho("no lastfile: choice<" . choice . ">")
+ 
+-  elseif s:FileReadable(a:tfile)
+-   " read file after current line
+-"   call Decho("read file<".a:tfile."> after current line")
+-   let curline = line(".")
+-   let lastline= line("$")
+-"   call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile).">  line#".curline)
+-   exe a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
+-   let line1= curline + 1
+-   let line2= line("$") - lastline + 1
++    if match(choice,"?") == 0
++     " give help
++     echomsg 'NetRead Usage:'
++     echomsg ':Nread machine:path                         uses rcp'
++     echomsg ':Nread "machine path"                       uses ftp   with <.netrc>'
++     echomsg ':Nread "machine id password path"           uses ftp'
++     echomsg ':Nread dav://machine[:port]/path            uses cadaver'
++     echomsg ':Nread fetch://machine/path                 uses fetch'
++     echomsg ':Nread ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
++     echomsg ':Nread http://[user@]machine/path           uses http  wget'
++     echomsg ':Nread rcp://[user@]machine/path            uses rcp'
++     echomsg ':Nread rsync://machine[:port]/path          uses rsync'
++     echomsg ':Nread scp://[user@]machine[[:#]port]/path  uses scp'
++     echomsg ':Nread sftp://[user@]machine[[:#]port]/path uses sftp'
++     sleep 4
++     break
+ 
+-  else
+-   " not readable
+-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"   call Decho("tfile<".a:tfile."> not readable")
+-   call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
+-"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
+-   return
+-  endif
++    elseif match(choice,'^"') != -1
++     " Reconstruct Choice if choice starts with '"'
++"     call Decho("reconstructing choice")
++     if match(choice,'"$') != -1
++      " case "..."
++      let choice= strpart(choice,1,strlen(choice)-2)
++     else
++       "  case "... ... ..."
++      let choice      = strpart(choice,1,strlen(choice)-1)
++      let wholechoice = ""
+ 
+-  " User-provided (ie. optional) fix-it-up command
+-  if exists("*NetReadFixup")
+-"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
+-   call NetReadFixup(a:method, line1, line2)
+-"  else " Decho
+-"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
+-  endif
++      while match(choice,'"$') == -1
++       let wholechoice = wholechoice . " " . choice
++       let ichoice     = ichoice + 1
++       if ichoice > a:0
++       	if !exists("g:netrw_quiet")
++	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",3)
++	endif
++"        call Dret("netrw#NetRead :2 getcwd<".getcwd().">")
++        return
++       endif
++       let choice= a:{ichoice}
++      endwhile
++      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
++     endif
++    endif
++   endif
+ 
+-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+-   " update the Buffers menu
+-   call s:UpdateBuffersMenu()
+-  endif
++"   call Decho("choice<" . choice . ">")
++   let ichoice= ichoice + 1
+ 
+-"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
++   " NetRead: Determine method of read (ftp, rcp, etc) {{{3
++   call s:NetrwMethod(choice)
++   if !exists("b:netrw_method") || b:netrw_method < 0
++"    call Dfunc("netrw#NetRead : unsupported method")
++    return
++   endif
++   let tmpfile= s:GetTempfile(b:netrw_fname) " apply correct suffix
+ 
+- " make sure file is being displayed
+-"  redraw!
++   " Check if NetrwBrowse() should be handling this request
++"   call Decho("checking if NetrwBrowse() should handle choice<".choice."> with netrw_list_cmd<".g:netrw_list_cmd.">")
++   if choice =~ "^.*[\/]$" && b:netrw_method != 5 && choice !~ '^https\=://'
++"    call Decho("yes, choice matches '^.*[\/]$'")
++    keepj call s:NetrwBrowse(0,choice)
++"    call Dret("netrw#NetRead :3 getcwd<".getcwd().">")
++    return
++   endif
+ 
+-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"  call Dret("NetrwGetFile")
+-endfun
++   " ============
++   " NetRead: Perform Protocol-Based Read {{{3
++   " ===========================
++   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
++    echo "(netrw) Processing your read request..."
++   endif
+ 
+-" ------------------------------------------------------------------------
+-" s:NetrwMethod:  determine method of transfer {{{2
+-" Input:
+-"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
+-" Output:
+-"  b:netrw_method= 1: rcp                                             
+-"                  2: ftp + <.netrc>                                  
+-"	           3: ftp + machine, id, password, and [path]filename 
+-"	           4: scp                                             
+-"	           5: http (wget)                                     
+-"	           6: dav
+-"	           7: rsync                                           
+-"	           8: fetch                                           
+-"	           9: sftp                                            
+-"  g:netrw_machine= hostname
+-"  b:netrw_fname  = filename
+-"  g:netrw_port   = optional port number (for ftp)
+-"  g:netrw_choice = copy of input url (choice)
+-fun! s:NetrwMethod(choice)
+-"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
+-
+-   " record current g:netrw_machine, if any
+-   " curmachine used if protocol == ftp and no .netrc
+-   if exists("g:netrw_machine")
+-    let curmachine= g:netrw_machine
+-"    call Decho("curmachine<".curmachine.">")
++   ".........................................
++   " NetRead: (rcp)  NetRead Method #1 {{{3
++   if  b:netrw_method == 1 " read with rcp
++"    call Decho("read via rcp (method #1)")
++   " ER: nothing done with g:netrw_uid yet?
++   " ER: on Win2K" rcp machine[.user]:file tmpfile
++   " ER: if machine contains '.' adding .user is required (use $USERNAME)
++   " ER: the tmpfile is full path: rcp sees C:\... as host C
++   if s:netrw_has_nt_rcp == 1
++    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
++     let uid_machine = g:netrw_machine .'.'. g:netrw_uid
++    else
++     " Any way needed it machine contains a '.'
++     let uid_machine = g:netrw_machine .'.'. $USERNAME
++    endif
+    else
+-    let curmachine= "N O T A HOST"
++    if exists("g:netrw_uid") &&	( g:netrw_uid != "" )
++     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
++    else
++     let uid_machine = g:netrw_machine
++    endif
+    endif
++"   call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
++   exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(uid_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
++   let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
++   let b:netrw_lastfile = choice
+ 
+-  " initialization
+-  let b:netrw_method  = 0
+-  let g:netrw_machine = ""
+-  let b:netrw_fname   = ""
+-  let g:netrw_port    = ""
+-  let g:netrw_choice  = a:choice
+-
+-  " Patterns:
+-  " mipf     : a:machine a:id password filename	     Use ftp
+-  " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+-  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
+-  " rcpurm   : rcp://[user@]host/filename	     Use rcp
+-  " rcphf    : [user@]host:filename		     Use rcp
+-  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
+-  " httpurm  : http://[user@]host/filename	     Use wget
+-  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
+-  " rsyncurm : rsync://host[:port]/path              Use rsync
+-  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
+-  " sftpurm  : sftp://[user@]host/filename  Use scp
+-  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
+-  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
+-  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
+-  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
+-  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
+-  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
+-  let httpurm  = '^http://\([^/]\{-}\)\(/.*\)\=$'
+-  let davurm   = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
+-  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
+-  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
+-  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
+-
+-"  call Decho("determine method:")
+-  " Determine Method
+-  " rcp://user@hostname/...path-to-file
+-  if match(a:choice,rcpurm) == 0
+-"   call Decho("rcp://...")
+-   let b:netrw_method  = 1
+-   let userid          = substitute(a:choice,rcpurm,'\1',"")
+-   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
+-   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
+-   if userid != ""
+-    let g:netrw_uid= userid
+-   endif
++   ".........................................
++   " NetRead: (ftp + <.netrc>)  NetRead Method #2 {{{3
++   elseif b:netrw_method  == 2		" read with ftp + <.netrc>
++"     call Decho("read via ftp+.netrc (method #2)")
++     let netrw_fname= b:netrw_fname
++     keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
++     let filtbuf= bufnr("%")
++     setl ff=unix
++     keepj put =g:netrw_ftpmode
++"     call Decho("filter input: ".getline(line("$")))
++     if exists("g:netrw_ftpextracmd")
++      keepj put =g:netrw_ftpextracmd
++"      call Decho("filter input: ".getline(line("$")))
++     endif
++     call setline(line("$")+1,'get "'.netrw_fname.'" '.tmpfile)
++"     call Decho("filter input: ".getline(line("$")))
++     if exists("g:netrw_port") && g:netrw_port != ""
++"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
++      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
++     else
++"      call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
++      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
++     endif
++     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
++     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
++      let debugkeep = &debug
++      setl debug=msg
++      keepj call netrw#ErrorMsg(s:ERROR,getline(1),4)
++      let &debug    = debugkeep
++     endif
++     call s:SaveBufVars()
++     bd!
++     if bufname("%") == "" && getline("$") == "" && line('$') == 1
++      " needed when one sources a file in a nolbl setting window via ftp
++      q!
++     endif
++     call s:RestoreBufVars()
++     let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
++     let b:netrw_lastfile = choice
+ 
+-  " scp://user@hostname/...path-to-file
+-  elseif match(a:choice,scpurm) == 0
+-"   call Decho("scp://...")
+-   let b:netrw_method  = 4
+-   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
+-   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
+-   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
++   ".........................................
++   " NetRead: (ftp + machine,id,passwd,filename)  NetRead Method #3 {{{3
++   elseif b:netrw_method == 3		" read with ftp + machine, id, passwd, and fname
++    " Construct execution string (four lines) which will be passed through filter
++"    call Decho("read via ftp+mipf (method #3)")
++    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
++    keepj call s:SaveBufVars()|new|keepj call s:RestoreBufVars()
++    let filtbuf= bufnr("%")
++    setl ff=unix
++    if exists("g:netrw_port") && g:netrw_port != ""
++     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
++"     call Decho("filter input: ".getline('.'))
++    else
++     keepj put ='open '.g:netrw_machine
++"     call Decho("filter input: ".getline('.'))
++    endif
+ 
+-  " http://user@hostname/...path-to-file
+-  elseif match(a:choice,httpurm) == 0
+-"   call Decho("http://...")
+-   let b:netrw_method = 5
+-   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
+-   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
++    if exists("g:netrw_uid") && g:netrw_uid != ""
++     if exists("g:netrw_ftp") && g:netrw_ftp == 1
++      keepj put =g:netrw_uid
++"       call Decho("filter input: ".getline('.'))
++      if exists("s:netrw_passwd")
++       keepj put ='\"'.s:netrw_passwd.'\"'
++      endif
++"      call Decho("filter input: ".getline('.'))
++     elseif exists("s:netrw_passwd")
++      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
++"      call Decho("filter input: ".getline('.'))
++     endif
++    endif
+ 
+-  " dav://hostname[:port]/..path-to-file..
+-  elseif match(a:choice,davurm) == 0
+-"   call Decho("dav://...")
+-   let b:netrw_method= 6
+-   if a:choice =~ '^s'
+-    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
+-   else
+-    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
+-   endif
+-   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
++    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
++     keepj put =g:netrw_ftpmode
++"     call Decho("filter input: ".getline('.'))
++    endif
++    if exists("g:netrw_ftpextracmd")
++     keepj put =g:netrw_ftpextracmd
++"     call Decho("filter input: ".getline('.'))
++    endif
++    keepj put ='get \"'.netrw_fname.'\" '.tmpfile
++"    call Decho("filter input: ".getline('.'))
+ 
+-  " rsync://user@hostname/...path-to-file
+-  elseif match(a:choice,rsyncurm) == 0
+-"   call Decho("rsync://...")
+-   let b:netrw_method = 7
+-   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
+-   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
++    " perform ftp:
++    " -i       : turns off interactive prompting from ftp
++    " -n  unix : DON'T use <.netrc>, even though it exists
++    " -n  win32: quit being obnoxious about password
++    keepj norm! 1Gdd
++"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
++    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
++    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
++    if getline(1) !~ "^$"
++"     call Decho("error<".getline(1).">")
++     if !exists("g:netrw_quiet")
++      call netrw#ErrorMsg(s:ERROR,getline(1),5)
++     endif
++    endif
++    call s:SaveBufVars()|bd!|call s:RestoreBufVars()
++    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
++    let b:netrw_lastfile = choice
+ 
+-  " ftp://[user@]hostname[[:#]port]/...path-to-file
+-  elseif match(a:choice,ftpurm) == 0
+-"   call Decho("ftp://...")
+-   let userid	      = substitute(a:choice,ftpurm,'\2',"")
+-   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
+-   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
+-   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
+-"   call Decho("g:netrw_machine<".g:netrw_machine.">")
+-   if userid != ""
+-    let g:netrw_uid= userid
+-   endif
+-   if exists("s:netrw_passwd") && curmachine != g:netrw_machine
+-    " if there's a change in hostname, require password re-entry
+-    unlet s:netrw_passwd
+-   endif
+-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+-    let b:netrw_method = 3
+-   else
+-    if s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
+-     let b:netrw_method= 2
++   ".........................................
++   " NetRead: (scp) NetRead Method #4 {{{3
++   elseif     b:netrw_method  == 4	" read with scp
++"    call Decho("read via scp (method #4)")
++    if exists("g:netrw_port") && g:netrw_port != ""
++     let useport= " ".g:netrw_scpport." ".g:netrw_port
+     else
+-     if !exists("g:netrw_uid") || g:netrw_uid == ""
+-      call NetUserPass()
+-     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
+-      call NetUserPass(g:netrw_uid)
+-    " else just use current g:netrw_uid and s:netrw_passwd
++     let useport= ""
++    endif
++"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
++    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
++    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetRead: (http) NetRead Method #5 (wget) {{{3
++   elseif     b:netrw_method  == 5
++"    call Decho("read via http (method #5)")
++    if g:netrw_http_cmd == ""
++     if !exists("g:netrw_quiet")
++      call netrw#ErrorMsg(s:ERROR,"neither the wget nor the fetch command is available",6)
+      endif
+-     let b:netrw_method= 3
++"     call Dret("netrw#NetRead :4 getcwd<".getcwd().">")
++     return
+     endif
+-   endif
+ 
+-  elseif match(a:choice,fetchurm) == 0
+-"   call Decho("fetch://...")
+-   let b:netrw_method = 8
+-   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
+-   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
+-   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
+-   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
++    if match(b:netrw_fname,"#") == -1 || exists("g:netrw_http_xcmd")
++     " using g:netrw_http_cmd (usually elinks, links, curl, wget, or fetch)
++"     call Decho('using '.g:netrw_http_cmd.' (# not in b:netrw_fname<'.b:netrw_fname.">)")
++     if exists("g:netrw_http_xcmd")
++"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1))
++      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)." ".g:netrw_http_xcmd." ".shellescape(tmpfile,1)
++     else
++"      call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1))
++      exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.b:netrw_fname,1)
++     endif
++     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
+ 
+-  " Issue an ftp : "machine id password [path/]filename"
+-  elseif match(a:choice,mipf) == 0
+-"   call Decho("(ftp) host id pass file")
+-   let b:netrw_method  = 3
+-   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
+-   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
+-   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
+-   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
++    else
++     " wget/curl/fetch plus a jump to an in-page marker (ie. http://abc/def.html#aMarker)
++"     call Decho("wget/curl plus jump (# in b:netrw_fname<".b:netrw_fname.">)")
++     let netrw_html= substitute(b:netrw_fname,"#.*$","","")
++     let netrw_tag = substitute(b:netrw_fname,"^.*#","","")
++"     call Decho("netrw_html<".netrw_html.">")
++"     call Decho("netrw_tag <".netrw_tag.">")
++"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1))
++     exe s:netrw_silentxfer."!".g:netrw_http_cmd." ".shellescape(tmpfile,1)." ".shellescape("http://".g:netrw_machine.netrw_html,1)
++     let result = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
++"     call Decho('<\s*a\s*name=\s*"'.netrw_tag.'"/')
++     exe 'keepj norm! 1G/<\s*a\s*name=\s*"'.netrw_tag.'"/'."\<CR>"
++    endif
++    let b:netrw_lastfile = choice
++"    call Decho("(NetRead) setl ro")
++    setl ro
+ 
+-  " Issue an ftp: "hostname [path/]filename"
+-  elseif match(a:choice,mf) == 0
+-"   call Decho("(ftp) host file")
+-   if exists("g:netrw_uid") && exists("s:netrw_passwd")
+-    let b:netrw_method  = 3
+-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
++   ".........................................
++   " NetRead: (dav) NetRead Method #6 {{{3
++   elseif     b:netrw_method  == 6
++"    call Decho("read via cadaver (method #6)")
+ 
+-   elseif s:FileReadable(expand("$HOME/.netrc"))
+-    let b:netrw_method  = 2
+-    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
+-    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+-   endif
++    if !executable(g:netrw_dav_cmd)
++     call netrw#ErrorMsg(s:ERROR,g:netrw_dav_cmd." is not executable",73)
++"     call Dret("netrw#NetRead : ".g:netrw_dav_cmd." not executable")
++     return
++    endif
++    if g:netrw_dav_cmd =~ "curl"
++"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1))
++     exe s:netrw_silentxfer."!".g:netrw_dav_cmd." ".shellescape("dav://".g:netrw_machine.b:netrw_fname,1)." ".shellescape(tmpfile,1)
++    else
++     " Construct execution string (four lines) which will be passed through filter
++     let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
++     new
++     setl ff=unix
++     if exists("g:netrw_port") && g:netrw_port != ""
++      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
++     else
++      keepj put ='open '.g:netrw_machine
++     endif
++     if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
++      keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
++     endif
++     keepj put ='get '.netrw_fname.' '.tmpfile
++     keepj put ='quit'
+ 
+-  " sftp://user@hostname/...path-to-file
+-  elseif match(a:choice,sftpurm) == 0
+-"   call Decho("sftp://...")
+-   let b:netrw_method = 9
+-   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
+-   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
++     " perform cadaver operation:
++     keepj norm! 1Gdd
++"    call Decho("executing: %!".g:netrw_dav_cmd)
++     exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
++     bd!
++    endif
++    let result           = s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
++    let b:netrw_lastfile = choice
+ 
+-  " Issue an rcp: hostname:filename"  (this one should be last)
+-  elseif match(a:choice,rcphf) == 0
+-"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
+-   let b:netrw_method  = 1
+-   let userid          = substitute(a:choice,rcphf,'\2',"")
+-   let g:netrw_machine = substitute(a:choice,rcphf,'\3',"")
+-   let b:netrw_fname   = substitute(a:choice,rcphf,'\4',"")
+-"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
+-"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
+-"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
+-"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
+-   if userid != ""
+-    let g:netrw_uid= userid
+-   endif
++   ".........................................
++   " NetRead: (rsync) NetRead Method #7 {{{3
++   elseif     b:netrw_method  == 7
++"    call Decho("read via rsync (method #7)")
++"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1))
++    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".shellescape(tmpfile,1)
++    let result		 = s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
++    let b:netrw_lastfile = choice
+ 
+-  else
+-   if !exists("g:netrw_quiet")
+-    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
++   ".........................................
++   " NetRead: (fetch) NetRead Method #8 {{{3
++   "    fetch://[user@]host[:http]/path
++   elseif     b:netrw_method  == 8
++"    call Decho("read via fetch (method #8)")
++    if g:netrw_fetch_cmd == ""
++     if !exists("g:netrw_quiet")
++      keepj call netrw#ErrorMsg(s:ERROR,"fetch command not available",7)
++     endif
++"     call Dret("NetRead")
++     return
++    endif
++    if exists("g:netrw_option") && g:netrw_option == ":https\="
++     let netrw_option= "http"
++    else
++     let netrw_option= "ftp"
++    endif
++"    call Decho("read via fetch for ".netrw_option)
++
++    if exists("g:netrw_uid") && g:netrw_uid != "" && exists("s:netrw_passwd") && s:netrw_passwd != ""
++"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1))
++     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_uid.':'.s:netrw_passwd.'@'.g:netrw_machine."/".b:netrw_fname,1)
++    else
++"     call Decho("exe ".s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1))
++     exe s:netrw_silentxfer."!".g:netrw_fetch_cmd." ".shellescape(tmpfile,1)." ".shellescape(netrw_option."://".g:netrw_machine."/".b:netrw_fname,1)
++    endif
++
++    let result		= s:NetrwGetFile(readcmd,tmpfile, b:netrw_method)
++    let b:netrw_lastfile = choice
++"    call Decho("(NetRead) setl ro")
++    setl ro
++
++   ".........................................
++   " NetRead: (sftp) NetRead Method #9 {{{3
++   elseif     b:netrw_method  == 9
++"    call Decho("read via sftp (method #9)")
++"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile)
++    exe s:netrw_silentxfer."!".g:netrw_sftp_cmd." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)." ".tmpfile
++    let result		= s:NetrwGetFile(readcmd, tmpfile, b:netrw_method)
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetRead: Complain {{{3
++   else
++    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",8)
+    endif
+-   let b:netrw_method  = -1
+-  endif
++  endwhile
+ 
+-  " remove any leading [:#] from port number
+-  if g:netrw_port != ""
+-    let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
++  " NetRead: cleanup {{{3
++  if exists("b:netrw_method")
++"   call Decho("cleanup b:netrw_method and b:netrw_fname")
++   unlet b:netrw_method
++   unlet b:netrw_fname
++  endif
++  if s:FileReadable(tmpfile) && tmpfile !~ '.tar.bz2$' && tmpfile !~ '.tar.gz$' && tmpfile !~ '.zip' && tmpfile !~ '.tar' && readcmd != 't' && tmpfile !~ '.tar.xz$' && tmpfile !~ '.txz'
++"   call Decho("cleanup by deleting tmpfile<".tmpfile.">")
++   keepj call s:NetrwDelete(tmpfile)
+   endif
++  keepj call s:NetrwOptionRestore("w:")
+ 
+-"  call Decho("a:choice       <".a:choice.">")
+-"  call Decho("b:netrw_method <".b:netrw_method.">")
+-"  call Decho("g:netrw_machine<".g:netrw_machine.">")
+-"  call Decho("g:netrw_port   <".g:netrw_port.">")
+-"  if exists("g:netrw_uid")		"Decho
+-"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
+-"  endif					"Decho
+-"  if exists("s:netrw_passwd")		"Decho
+-"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
+-"  endif					"Decho
+-"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
+-"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method)
++"  call Dret("netrw#NetRead :5 getcwd<".getcwd().">")
+ endfun
+ 
+ " ------------------------------------------------------------------------
+-" NetReadFixup: this sort of function is typically written by the user {{{2
+-"               to handle extra junk that their system's ftp dumps
+-"               into the transfer.  This function is provided as an
+-"               example and as a fix for a Windows 95 problem: in my
+-"               experience, win95's ftp always dumped four blank lines
+-"               at the end of the transfer.
+-if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
+- fun! NetReadFixup(method, line1, line2)
+-"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
++" netrw#NetWrite: responsible for writing a file over the net {{{2
++fun! netrw#NetWrite(...) range
++"  call Dfunc("netrw#NetWrite(a:0=".a:0.") ".g:loaded_netrw)
+ 
+-   " sanity checks -- attempt to convert inputs to integers
+-   let method = a:method + 0
+-   let line1  = a:line1 + 0
+-   let line2  = a:line2 + 0
+-   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
+-"    call Dret("NetReadFixup")
+-    return
+-   endif
++  " NetWrite: option handling {{{3
++  let mod= 0
++  call s:NetrwOptionSave("w:")
++  call s:NetrwSafeOptions()
+ 
+-   if method == 3   " ftp (no <.netrc>)
+-    let fourblanklines= line2 - 3
+-    if fourblanklines >= line1
+-     exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d"
+-     call histdel("/",-1)
+-    endif
+-   endif
++  " NetWrite: Get Temporary Filename {{{3
++  let tmpfile= s:GetTempfile("")
++  if tmpfile == ""
++"   call Dret("netrw#NetWrite : unable to get a tempfile!")
++   return
++  endif
+ 
+-"   call Dret("NetReadFixup")
+- endfun
+-endif
++  if a:0 == 0
++   let ichoice = 0
++  else
++   let ichoice = 1
++  endif
+ 
+-" ---------------------------------------------------------------------
+-" NetUserPass: set username and password for subsequent ftp transfer {{{2
+-"   Usage:  :call NetUserPass()			-- will prompt for userid and password
+-"	    :call NetUserPass("uid")		-- will prompt for password
+-"	    :call NetUserPass("uid","password") -- sets global userid and password
+-fun! NetUserPass(...)
++  let curbufname= expand("%")
++"  call Decho("curbufname<".curbufname.">")
++  if &binary
++   " For binary writes, always write entire file.
++   " (line numbers don't really make sense for that).
++   " Also supports the writing of tar and zip files.
++"   call Decho("(write entire file) sil exe w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
++   exe "sil keepj w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
++  elseif g:netrw_cygwin
++   " write (selected portion of) file to temporary
++   let cygtmpfile= substitute(tmpfile,'/cygdrive/\(.\)','\1:','')
++"   call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile))
++   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(cygtmpfile)
++  else
++   " write (selected portion of) file to temporary
++"   call Decho("(write selected portion) sil exe ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile))
++   exe "sil keepj ".a:firstline."," . a:lastline . "w! ".fnameescape(v:cmdarg)." ".fnameescape(tmpfile)
++  endif
+ 
+- " get/set userid
+- if a:0 == 0
+-"  call Dfunc("NetUserPass(a:0<".a:0.">)")
+-  if !exists("g:netrw_uid") || g:netrw_uid == ""
+-   " via prompt
+-   let g:netrw_uid= input('Enter username: ')
++  if curbufname == ""
++   " if the file is [No Name], and one attempts to Nwrite it, the buffer takes
++   " on the temporary file's name.  Deletion of the temporary file during
++   " cleanup then causes an error message.
++   0file!
+   endif
+- else	" from command line
+-"  call Dfunc("NetUserPass(a:1<".a:1.">)")
+-  let g:netrw_uid= a:1
+- endif
+ 
+- " get password
+- if a:0 <= 1 " via prompt
+-"  call Decho("a:0=".a:0." case <=1:")
+-  let s:netrw_passwd= inputsecret("Enter Password: ")
+- else " from command line
+-"  call Decho("a:0=".a:0." case >1: a:2<".a:2.">")
+-  let s:netrw_passwd=a:2
+- endif
++  " NetWrite: while choice loop: {{{3
++  while ichoice <= a:0
+ 
+-"  call Dret("NetUserPass")
+-endfun
++   " Process arguments: {{{4
++   " attempt to repeat with previous host-file-etc
++   if exists("b:netrw_lastfile") && a:0 == 0
++"    call Decho("using b:netrw_lastfile<" . b:netrw_lastfile . ">")
++    let choice = b:netrw_lastfile
++    let ichoice= ichoice + 1
++   else
++    exe "let choice= a:" . ichoice
+ 
+-" ===========================================
+-"  Shared Browsing Support:    {{{1
+-" ===========================================
++    " Reconstruct Choice if choice starts with '"'
++    if match(choice,"?") == 0
++     echomsg 'NetWrite Usage:"'
++     echomsg ':Nwrite machine:path                        uses rcp'
++     echomsg ':Nwrite "machine path"                      uses ftp with <.netrc>'
++     echomsg ':Nwrite "machine id password path"          uses ftp'
++     echomsg ':Nwrite dav://[user@]machine/path           uses cadaver'
++     echomsg ':Nwrite fetch://[user@]machine/path         uses fetch'
++     echomsg ':Nwrite ftp://machine[#port]/path           uses ftp  (autodetects <.netrc>)'
++     echomsg ':Nwrite rcp://machine/path                  uses rcp'
++     echomsg ':Nwrite rsync://[user@]machine/path         uses rsync'
++     echomsg ':Nwrite scp://[user@]machine[[:#]port]/path uses scp'
++     echomsg ':Nwrite sftp://[user@]machine/path          uses sftp'
++     sleep 4
++     break
+ 
+-" ---------------------------------------------------------------------
+-" s:BrowserMaps: {{{2
+-fun! s:BrowserMaps(islocal)
+-"  call Dfunc("s:BrowserMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
+-  if a:islocal
+-"   call Decho("make local maps")
+-   nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+-   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+-   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
+-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+-   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+-   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+-   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+-   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+-   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+-   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+-   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+-   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+-   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+-   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+-   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+-   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+-   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+-   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(1)<cr>
+-   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> c		:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+-   nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("")<cr>
+-   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(1)<cr>
+-   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
+-   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(3)<cr>
+-   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(1)<cr>
+-   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+-   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
+-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+-   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+-   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
+-   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
+-   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
+-   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
+-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
+-   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
+-   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+-   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
+-   inoremap <buffer> <silent> <cr>	<c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
+-   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
+-   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(1)<cr>
+-   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
+-   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
+-   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
+-   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+-   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
+-   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
+-   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
+-   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
+-   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
+-   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
+-   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
+-   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
+-   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
+-   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
+-   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
+-   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(1)<cr>
+-   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> c		<c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
+-   inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("")<cr>
+-   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(1)<cr>
+-   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+-   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(3)<cr>
+-   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(1)<cr>
+-   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+-   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+-   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
+-   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+-   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(1)<cr>
+-   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(1)<cr>
+-   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(4)<cr>
+-   inoremap <buffer> <silent> T		<c-o>:call <SID>NetrwSplit(4)<bar>norm! gT<cr>
+-   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
+-   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
+-   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(5)<cr>
+-   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
+-   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(1)<cr>
+-   if !hasmapto('<Plug>NetrwHideEdit')
+-    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
+-    imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
+-   endif
+-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(1)<cr>
+-   if !hasmapto('<Plug>NetrwRefresh')
+-    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+-    imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
++    elseif match(choice,"^\"") != -1
++     if match(choice,"\"$") != -1
++       " case "..."
++      let choice=strpart(choice,1,strlen(choice)-2)
++     else
++      "  case "... ... ..."
++      let choice      = strpart(choice,1,strlen(choice)-1)
++      let wholechoice = ""
++
++      while match(choice,"\"$") == -1
++       let wholechoice= wholechoice . " " . choice
++       let ichoice    = ichoice + 1
++       if choice > a:0
++       	if !exists("g:netrw_quiet")
++	 call netrw#ErrorMsg(s:ERROR,"Unbalanced string in filename '". wholechoice ."'",13)
++	endif
++"        call Dret("netrw#NetWrite")
++        return
++       endif
++       let choice= a:{ichoice}
++      endwhile
++      let choice= strpart(wholechoice,1,strlen(wholechoice)-1) . " " . strpart(choice,0,strlen(choice)-1)
++     endif
++    endif
+    endif
+-   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
+-   if s:didstarstar || !mapcheck("<s-down>","n")
+-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+-    inoremap <buffer> <silent> <s-down>	:Nexplore<cr>
++   let ichoice= ichoice + 1
++"   call Decho("choice<" . choice . "> ichoice=".ichoice)
++
++   " Determine method of write (ftp, rcp, etc) {{{4
++   keepj call s:NetrwMethod(choice)
++   if !exists("b:netrw_method") || b:netrw_method < 0
++"    call Dfunc("netrw#NetWrite : unsupported method")
++    return
+    endif
+-   if s:didstarstar || !mapcheck("<s-up>","n")
+-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+-    inoremap <buffer> <silent> <s-up>	:Pexplore<cr>
++
++   " =============
++   " NetWrite: Perform Protocol-Based Write {{{3
++   " ============================
++   if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1
++    echo "(netrw) Processing your write request..."
++"    call Decho("(netrw) Processing your write request...")
+    endif
+-   let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
+-   if g:netrw_mousemaps == 1
+-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
+-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
+-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+-    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr>
+-    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
+-    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
+-    exe 'inoremap <buffer> <silent> <rightmouse>  <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++
++   ".........................................
++   " NetWrite: (rcp) NetWrite Method #1 {{{3
++   if  b:netrw_method == 1
++"    call Decho("write via rcp (method #1)")
++    if s:netrw_has_nt_rcp == 1
++     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
++      let uid_machine = g:netrw_machine .'.'. g:netrw_uid
++     else
++      let uid_machine = g:netrw_machine .'.'. $USERNAME
++     endif
++    else
++     if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
++      let uid_machine = g:netrw_uid .'@'. g:netrw_machine
++     else
++      let uid_machine = g:netrw_machine
++     endif
++    endif
++"    call Decho("executing: !".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1))
++    exe s:netrw_silentxfer."!".g:netrw_rcp_cmd." ".s:netrw_rcpmode." ".shellescape(tmpfile,1)." ".shellescape(uid_machine.":".b:netrw_fname,1)
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetWrite: (ftp + <.netrc>) NetWrite Method #2 {{{3
++   elseif b:netrw_method == 2
++"    call Decho("write via ftp+.netrc (method #2)")
++    let netrw_fname = b:netrw_fname
++
++    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
++    let bhkeep      = &l:bh
++    let curbuf      = bufnr("%")
++    setl bh=hide
++    keepalt enew
++
++"    call Decho("filter input window#".winnr())
++    setl ff=unix
++    keepj put =g:netrw_ftpmode
++"    call Decho("filter input: ".getline('$'))
++    if exists("g:netrw_ftpextracmd")
++     keepj put =g:netrw_ftpextracmd
++"     call Decho("filter input: ".getline("$"))
++    endif
++    keepj call setline(line("$")+1,'put "'.tmpfile.'" "'.netrw_fname.'"')
++"    call Decho("filter input: ".getline("$"))
++    if exists("g:netrw_port") && g:netrw_port != ""
++"     call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
++     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
++    else
++"     call Decho("filter input window#".winnr())
++"     call Decho("executing: %!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
++     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
++    endif
++    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
++    if getline(1) !~ "^$"
++     if !exists("g:netrw_quiet")
++      keepj call netrw#ErrorMsg(s:ERROR,getline(1),14)
++     endif
++     let mod=1
++    endif
++
++    " remove enew buffer (quietly)
++    let filtbuf= bufnr("%")
++    exe curbuf."b!"
++    let &l:bh            = bhkeep
++    exe filtbuf."bw!"
++
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetWrite: (ftp + machine, id, passwd, filename) NetWrite Method #3 {{{3
++   elseif b:netrw_method == 3
++    " Construct execution string (three or more lines) which will be passed through filter
++"    call Decho("read via ftp+mipf (method #3)")
++    let netrw_fname = b:netrw_fname
++    let bhkeep      = &l:bh
++
++    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
++    let curbuf      = bufnr("%")
++    setl bh=hide
++    keepalt enew
++    setl ff=unix
++
++    if exists("g:netrw_port") && g:netrw_port != ""
++     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
++"     call Decho("filter input: ".getline('.'))
++    else
++     keepj put ='open '.g:netrw_machine
++"     call Decho("filter input: ".getline('.'))
++    endif
++    if exists("g:netrw_uid") && g:netrw_uid != ""
++     if exists("g:netrw_ftp") && g:netrw_ftp == 1
++      keepj put =g:netrw_uid
++"      call Decho("filter input: ".getline('.'))
++      if exists("s:netrw_passwd") && s:netrw_passwd != ""
++       keepj put ='\"'.s:netrw_passwd.'\"'
++      endif
++"      call Decho("filter input: ".getline('.'))
++     elseif exists("s:netrw_passwd") && s:netrw_passwd != ""
++      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
++"      call Decho("filter input: ".getline('.'))
++     endif
++    endif
++    keepj put =g:netrw_ftpmode
++"    call Decho("filter input: ".getline('$'))
++    if exists("g:netrw_ftpextracmd")
++     keepj put =g:netrw_ftpextracmd
++"     call Decho("filter input: ".getline("$"))
++    endif
++    keepj put ='put \"'.tmpfile.'\" \"'.netrw_fname.'\"'
++"    call Decho("filter input: ".getline('.'))
++    " save choice/id/password for future use
++    let b:netrw_lastfile = choice
++
++    " perform ftp:
++    " -i       : turns off interactive prompting from ftp
++    " -n  unix : DON'T use <.netrc>, even though it exists
++    " -n  win32: quit being obnoxious about password
++    keepj norm! 1Gdd
++"    call Decho("executing: %!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
++    exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
++    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
++    if getline(1) !~ "^$"
++     if  !exists("g:netrw_quiet")
++      call netrw#ErrorMsg(s:ERROR,getline(1),15)
++     endif
++     let mod=1
++    endif
++
++    " remove enew buffer (quietly)
++    let filtbuf= bufnr("%")
++    exe curbuf."b!"
++    let &l:bh= bhkeep
++    exe filtbuf."bw!"
++
++   ".........................................
++   " NetWrite: (scp) NetWrite Method #4 {{{3
++   elseif     b:netrw_method == 4
++"    call Decho("write via scp (method #4)")
++    if exists("g:netrw_port") && g:netrw_port != ""
++     let useport= " ".g:netrw_scpport." ".fnameescape(g:netrw_port)
++    else
++     let useport= ""
++    endif
++"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
++    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.useport." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetWrite: (http) NetWrite Method #5 {{{3
++   elseif     b:netrw_method == 5
++"    call Decho("write via http (method #5)")
++    if !exists("g:netrw_quiet")
++     call netrw#ErrorMsg(s:ERROR,"currently <netrw.vim> does not support writing using http:",16)
++    endif
++
++   ".........................................
++   " NetWrite: (dav) NetWrite Method #6 (cadaver) {{{3
++   elseif     b:netrw_method == 6
++"    call Decho("write via cadaver (method #6)")
++
++    " Construct execution string (four lines) which will be passed through filter
++    let netrw_fname = escape(b:netrw_fname,g:netrw_fname_escape)
++    let bhkeep      = &l:bh
++
++    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
++    let curbuf      = bufnr("%")
++    setl bh=hide
++    keepalt enew
++
++    setl ff=unix
++    if exists("g:netrw_port") && g:netrw_port != ""
++     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
++    else
++     keepj put ='open '.g:netrw_machine
++    endif
++    if exists("g:netrw_uid") && exists("s:netrw_passwd") && g:netrw_uid != ""
++     keepj put ='user '.g:netrw_uid.' '.s:netrw_passwd
++    endif
++    keepj put ='put '.tmpfile.' '.netrw_fname
++
++    " perform cadaver operation:
++    keepj norm! 1Gdd
++"    call Decho("executing: %!".g:netrw_dav_cmd)
++    exe s:netrw_silentxfer."%!".g:netrw_dav_cmd
++
++    " remove enew buffer (quietly)
++    let filtbuf= bufnr("%")
++    exe curbuf."b!"
++    let &l:bh            = bhkeep
++    exe filtbuf."bw!"
++
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetWrite: (rsync) NetWrite Method #7 {{{3
++   elseif     b:netrw_method == 7
++"    call Decho("write via rsync (method #7)")
++"    call Decho("executing: !".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1))
++    exe s:netrw_silentxfer."!".g:netrw_rsync_cmd." ".shellescape(tmpfile,1)." ".shellescape(g:netrw_machine.":".b:netrw_fname,1)
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetWrite: (sftp) NetWrite Method #9 {{{3
++   elseif     b:netrw_method == 9
++"    call Decho("write via sftp (method #9)")
++    let netrw_fname= escape(b:netrw_fname,g:netrw_fname_escape)
++    if exists("g:netrw_uid") &&  ( g:netrw_uid != "" )
++     let uid_machine = g:netrw_uid .'@'. g:netrw_machine
++    else
++     let uid_machine = g:netrw_machine
++    endif
++
++    " formerly just a "new...bd!", that changed the window sizes when equalalways.  Using enew workaround instead
++    let bhkeep = &l:bh
++    let curbuf = bufnr("%")
++    setl bh=hide
++    keepalt enew
++
++    setl ff=unix
++    call setline(1,'put "'.escape(tmpfile,'\').'" '.netrw_fname)
++"    call Decho("filter input: ".getline('.'))
++"    call Decho("executing: %!".g:netrw_sftp_cmd.' '.shellescape(uid_machine,1))
++    let sftpcmd= substitute(g:netrw_sftp_cmd,"%TEMPFILE%",escape(tmpfile,'\'),"g")
++    exe s:netrw_silentxfer."%!".sftpcmd.' '.shellescape(uid_machine,1)
++    let filtbuf= bufnr("%")
++    exe curbuf."b!"
++    let &l:bh            = bhkeep
++    exe filtbuf."bw!"
++    let b:netrw_lastfile = choice
++
++   ".........................................
++   " NetWrite: Complain {{{3
++   else
++    call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",17)
++    let leavemod= 1
+    endif
+-   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+-   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
+-   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+-   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+-   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
+-   exe 'inoremap <buffer> <silent> <Leader>m	<c-o>:call <SID>NetrwMakeDir("")<cr>'
+-   nnoremap <buffer> <F1>		:he netrw-quickhelp<cr>
++  endwhile
+ 
+-  else " remote
+-"   call Decho("make remote maps")
+-   call s:RemotePathAnalysis(b:netrw_curdir)
+-   nnoremap <buffer> <silent> <cr>	:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+-   nnoremap <buffer> <silent> <c-l>	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+-   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+-   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(0)<cr>
+-   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+-   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+-   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+-   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+-   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+-   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+-   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+-   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+-   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+-   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+-   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+-   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+-   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+-   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+-   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+-   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
+-   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
+-   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
+-   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(0)<cr>
+-   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
+-   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(0)<cr>
+-   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
+-   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+-   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(0)<cr>
+-   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+-   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+-   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
+-   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
+-   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
+-   nnoremap <buffer> <silent> T		:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
+-   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
+-   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
+-   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+-   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(0)<cr>
+-   inoremap <buffer> <silent> <cr>	<c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
+-   inoremap <buffer> <silent> <c-l>	<c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+-   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
+-   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(0)<cr>
+-   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
+-   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
+-   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
+-   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+-   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
+-   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
+-   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
+-   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
+-   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
+-   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
+-   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
+-   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
+-   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
+-   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
+-   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
+-   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_cur)<cr>
+-   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
+-   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
+-   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(0)<cr>
+-   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
+-   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(0)<cr>
+-   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(0)<cr>
+-   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
+-   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+-   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
+-   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+-   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(0)<cr>
+-   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(0)<cr>
+-   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(1)<cr>
+-   inoremap <buffer> <silent> T		<c-o>:call <SID>NetrwSplit(1)<bar>norm! gT<cr>
+-   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
+-   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(2)<cr>
+-   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
+-   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(0)<cr>
+-   if !hasmapto('<Plug>NetrwHideEdit')
+-    nmap <buffer> <c-h> <Plug>NetrwHideEdit
+-    imap <buffer> <c-h> <Plug>NetrwHideEdit
++  " NetWrite: Cleanup: {{{3
++"  call Decho("cleanup")
++  if s:FileReadable(tmpfile)
++"   call Decho("tmpfile<".tmpfile."> readable, will now delete it")
++   call s:NetrwDelete(tmpfile)
++  endif
++  call s:NetrwOptionRestore("w:")
++
++  if a:firstline == 1 && a:lastline == line("$")
++   " restore modifiability; usually equivalent to set nomod
++   let &mod= mod
++"   call Decho("(NetWrite)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++  elseif !exists("leavemod")
++   " indicate that the buffer has not been modified since last written
++"   call Decho("(NetWrite) set nomod")
++   set nomod
++"   call Decho("(NetWrite)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++  endif
++
++"  call Dret("netrw#NetWrite")
++endfun
++
++" ---------------------------------------------------------------------
++" netrw#NetSource: source a remotely hosted vim script {{{2
++" uses NetRead to get a copy of the file into a temporarily file,
++"              then sources that file,
++"              then removes that file.
++fun! netrw#NetSource(...)
++"  call Dfunc("netrw#NetSource() a:0=".a:0)
++  if a:0 > 0 && a:1 == '?'
++   " give help
++   echomsg 'NetSource Usage:'
++   echomsg ':Nsource dav://machine[:port]/path            uses cadaver'
++   echomsg ':Nsource fetch://machine/path                 uses fetch'
++   echomsg ':Nsource ftp://[user@]machine[:port]/path     uses ftp   autodetects <.netrc>'
++   echomsg ':Nsource http[s]://[user@]machine/path        uses http  wget'
++   echomsg ':Nsource rcp://[user@]machine/path            uses rcp'
++   echomsg ':Nsource rsync://machine[:port]/path          uses rsync'
++   echomsg ':Nsource scp://[user@]machine[[:#]port]/path  uses scp'
++   echomsg ':Nsource sftp://[user@]machine[[:#]port]/path uses sftp'
++   sleep 4
++  else
++   let i= 1
++   while i <= a:0
++    call netrw#NetRead(3,a:{i})
++"    call Decho("(netrw#NetSource) s:netread_tmpfile<".s:netrw_tmpfile.">")
++    if s:FileReadable(s:netrw_tmpfile)
++"     call Decho("(netrw#NetSource) exe so ".fnameescape(s:netrw_tmpfile))
++     exe "so ".fnameescape(s:netrw_tmpfile)
++"     call Decho("(netrw#NetSource) delete(".s:netrw_tmpfile.")")
++     call delete(s:netrw_tmpfile)
++     unlet s:netrw_tmpfile
++    else
++     call netrw#ErrorMsg(s:ERROR,"unable to source <".a:{i}.">!",48)
++    endif
++    let i= i + 1
++   endwhile
++  endif
++"  call Dret("netrw#NetSource")
++endfun
++
++" ===========================================
++" s:NetrwGetFile: Function to read temporary file "tfile" with command "readcmd". {{{2
++"    readcmd == %r : replace buffer with newly read file
++"            == 0r : read file at top of buffer
++"            == r  : read file after current line
++"            == t  : leave file in temporary form (ie. don't read into buffer)
++fun! s:NetrwGetFile(readcmd, tfile, method)
++"  call Dfunc("NetrwGetFile(readcmd<".a:readcmd.">,tfile<".a:tfile."> method<".a:method.">)")
++
++  " readcmd=='t': simply do nothing
++  if a:readcmd == 't'
++"   call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"   call Dret("NetrwGetFile : skip read of <".a:tfile.">")
++   return
++  endif
++
++  " get name of remote filename (ie. url and all)
++  let rfile= bufname("%")
++"  call Decho("rfile<".rfile.">")
++
++  if exists("*NetReadFixup")
++   " for the use of NetReadFixup (not otherwise used internally)
++   let line2= line("$")
++  endif
++
++  if a:readcmd[0] == '%'
++  " get file into buffer
++"   call Decho("get file into buffer")
++
++   " rename the current buffer to the temp file (ie. tfile)
++   if g:netrw_cygwin
++    let tfile= substitute(a:tfile,'/cygdrive/\(.\)','\1:','')
++   else
++    let tfile= a:tfile
+    endif
+-   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(0)<cr>
+-   if !hasmapto('<Plug>NetrwRefresh')
+-    nmap <buffer> <c-l> <Plug>NetrwRefresh
+-    imap <buffer> <c-l> <Plug>NetrwRefresh
++"   call Decho("exe sil! keepalt file ".fnameescape(tfile))
++   exe "sil! keepalt file ".fnameescape(tfile)
++
++   " edit temporary file (ie. read the temporary file in)
++   if     rfile =~ '\.zip$'
++"    call Decho("handling remote zip file with zip#Browse(tfile<".tfile.">)")
++    call zip#Browse(tfile)
++   elseif rfile =~ '\.tar$'
++"    call Decho("handling remote tar file with tar#Browse(tfile<".tfile.">)")
++    call tar#Browse(tfile)
++   elseif rfile =~ '\.tar\.gz$'
++"    call Decho("handling remote gzip-compressed tar file")
++    call tar#Browse(tfile)
++   elseif rfile =~ '\.tar\.bz2$'
++"    call Decho("handling remote bz2-compressed tar file")
++    call tar#Browse(tfile)
++   elseif rfile =~ '\.tar\.xz$'
++"    call Decho("handling remote xz-compressed tar file")
++    call tar#Browse(tfile)
++   elseif rfile =~ '\.txz$'
++"    call Decho("handling remote xz-compressed tar file (.txz)")
++    call tar#Browse(tfile)
++   else
++"    call Decho("edit temporary file")
++    e!
+    endif
+ 
+-   let mapsafepath     = escape(s:path, s:netrw_map_escape)
+-   let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape)
++   " rename buffer back to remote filename
++"   call Decho("exe sil! keepalt file ".fnameescape(rfile))
++   exe "sil! keepj keepalt file ".fnameescape(rfile)
+ 
+-   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
+-   if g:netrw_mousemaps == 1
+-    nnoremap <buffer> <silent> <leftmouse>   <leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
+-    nnoremap <buffer> <silent> <middlemouse> <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
+-    nnoremap <buffer> <silent> <s-leftmouse> <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+-    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-    inoremap <buffer> <silent> <leftmouse>   <c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr>
+-    inoremap <buffer> <silent> <middlemouse> <c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
+-    inoremap <buffer> <silent> <s-leftmouse> <c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
+-    exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   endif
+-   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+-   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
+-   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
+-   nnoremap <buffer> <F1>			:he netrw-quickhelp<cr>
+-   inoremap <buffer> <F1>			<c-o>:he netrw-quickhelp<cr>
++   " Detect filetype of local version of remote file.
++   " Note that isk must not include a "/" for scripts.vim
++   " to process this detection correctly.
++"   call Decho("detect filetype of local version of remote file")
++   let iskkeep= &l:isk
++   setl isk-=/
++   let &l:isk= iskkeep
++"   call Dredir("renamed buffer back to remote filename<".rfile."> : expand(%)<".expand("%").">","ls!")
++   let line1 = 1
++   let line2 = line("$")
++
++  elseif s:FileReadable(a:tfile)
++   " read file after current line
++"   call Decho("read file<".a:tfile."> after current line")
++   let curline = line(".")
++   let lastline= line("$")
++"   call Decho("exe<".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile).">  line#".curline)
++   exe "keepj ".a:readcmd." ".fnameescape(v:cmdarg)." ".fnameescape(a:tfile)
++   let line1= curline + 1
++   let line2= line("$") - lastline + 1
++
++  else
++   " not readable
++"   call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"   call Decho("tfile<".a:tfile."> not readable")
++   keepj call netrw#ErrorMsg(s:WARNING,"file <".a:tfile."> not readable",9)
++"   call Dret("NetrwGetFile : tfile<".a:tfile."> not readable")
++   return
+   endif
+-  call s:SetRexDir(a:islocal,b:netrw_curdir)
+-"  call Dret("s:BrowserMaps")
+-endfun
+ 
+-" ---------------------------------------------------------------------
+-" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
+-fun! s:ExplorePatHls(pattern)
+-"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
+-  let repat= substitute(a:pattern,'^**/\{1,2}','','')
+-"  call Decho("repat<".repat.">")
+-  let repat= escape(repat,'][.\')
+-"  call Decho("repat<".repat.">")
+-  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
+-"  call Dret("s:ExplorePatHls repat<".repat.">")
+-  return repat
++  " User-provided (ie. optional) fix-it-up command
++  if exists("*NetReadFixup")
++"   call Decho("calling NetReadFixup(method<".a:method."> line1=".line1." line2=".line2.")")
++   keepj call NetReadFixup(a:method, line1, line2)
++"  else " Decho
++"   call Decho("NetReadFixup() not called, doesn't exist  (line1=".line1." line2=".line2.")")
++  endif
++
++  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
++   " update the Buffers menu
++   keepj call s:UpdateBuffersMenu()
++  endif
++
++"  call Decho("readcmd<".a:readcmd."> cmdarg<".v:cmdarg."> tfile<".a:tfile."> readable=".s:FileReadable(a:tfile))
++
++ " make sure file is being displayed
++"  redraw!
++
++"  call Decho("(NetrwGetFile)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"  call Dret("NetrwGetFile")
+ endfun
+ 
+-" ---------------------------------------------------------------------
+-"  s:NetrwBookHistHandler: {{{2
+-"    0: (user: <mb>)   bookmark current directory
+-"    1: (user: <gb>)   change to the bookmarked directory
+-"    2: (user: <qb>)   list bookmarks
+-"    3: (browsing)     record current directory history
+-"    4: (user: <u>)    go up   (previous) bookmark
+-"    5: (user: <U>)    go down (next)     bookmark
+-"    6: (user: <mB>)   delete bookmark
+-fun! s:NetrwBookHistHandler(chg,curdir)
+-"  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
++" ------------------------------------------------------------------------
++" s:NetrwMethod:  determine method of transfer {{{2
++" Input:
++"   choice = url   [protocol:]//[userid@]hostname[:port]/[path-to-file]
++" Output:
++"  b:netrw_method= 1: rcp                                             
++"                  2: ftp + <.netrc>                                  
++"	           3: ftp + machine, id, password, and [path]filename 
++"	           4: scp                                             
++"	           5: http[s] (wget)                                     
++"	           6: dav
++"	           7: rsync                                           
++"	           8: fetch                                           
++"	           9: sftp                                            
++"  g:netrw_machine= hostname
++"  b:netrw_fname  = filename
++"  g:netrw_port   = optional port number (for ftp)
++"  g:netrw_choice = copy of input url (choice)
++fun! s:NetrwMethod(choice)
++"   call Dfunc("NetrwMethod(a:choice<".a:choice.">)")
+ 
+-  if a:chg == 0
+-   " bookmark the current directory
+-"   call Decho("(user: <b>) bookmark the current directory")
+-   if !exists("g:netrw_bookmarklist")
+-    let g:netrw_bookmarklist= []
+-   endif
+-   if index(g:netrw_bookmarklist,a:curdir) == -1
+-    " curdir not currently in g:netrw_bookmarklist, so include it
+-    call add(g:netrw_bookmarklist,a:curdir)
+-    call sort(g:netrw_bookmarklist)
++   " sanity check: choice should have at least three slashes in it
++   if strlen(substitute(a:choice,'[^/]','','g')) < 3
++    call netrw#ErrorMsg(s:ERROR,"not a netrw-style url; netrw uses protocol://[user@]hostname[:port]/[path])",78)
++    let b:netrw_method = -1
++"    call Dret("NetrwMethod : incorrect url format<".a:choice.">")
++    return
+    endif
+-   echo "bookmarked the current directory"
+ 
+-  elseif a:chg == 1
+-   " change to the bookmarked directory
+-"   call Decho("(user: <".v:count."mb>) change to the bookmarked directory")
+-   if exists("g:netrw_bookmarklist[v:count-1]")
+-    exe "e ".fnameescape(g:netrw_bookmarklist[v:count-1])
++   " record current g:netrw_machine, if any
++   " curmachine used if protocol == ftp and no .netrc
++   if exists("g:netrw_machine")
++    let curmachine= g:netrw_machine
++"    call Decho("curmachine<".curmachine.">")
+    else
+-    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
++    let curmachine= "N O T A HOST"
+    endif
+-
+-  elseif a:chg == 2
+-"   redraw!
+-   let didwork= 0
+-   " list user's bookmarks
+-"   call Decho("(user: <q>) list user's bookmarks")
+-   if exists("g:netrw_bookmarklist")
+-"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
+-    let cnt= 1
+-    for bmd in g:netrw_bookmarklist
+-"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
+-     echo "Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1]
+-     let didwork = 1
+-     let cnt     = cnt + 1
+-    endfor
++   if exists("g:netrw_port")
++    let netrw_port= g:netrw_port
+    endif
+ 
+-   " list directory history
+-   let cnt     = g:netrw_dirhist_cnt
+-   let first   = 1
+-   let histcnt = 0
+-   while ( first || cnt != g:netrw_dirhist_cnt )
+-"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
+-    let histcnt= histcnt + 1
+-    if exists("g:netrw_dirhist_{cnt}")
+-"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
+-     echo "Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt}
+-     let didwork= 1
+-    endif
+-    let first = 0
+-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+-    if cnt < 0
+-     let cnt= cnt + g:netrw_dirhistmax
+-    endif
+-   endwhile
+-   if didwork
+-    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
++   " insure that netrw_ftp_cmd starts off every method determination
++   " with the current g:netrw_ftp_cmd
++   let s:netrw_ftp_cmd= g:netrw_ftp_cmd
++
++  " initialization
++  let b:netrw_method  = 0
++  let g:netrw_machine = ""
++  let b:netrw_fname   = ""
++  let g:netrw_port    = ""
++  let g:netrw_choice  = a:choice
++
++  " Patterns:
++  " mipf     : a:machine a:id password filename	     Use ftp
++  " mf	    : a:machine filename		     Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
++  " ftpurm   : ftp://[user@]host[[#:]port]/filename  Use ftp + <.netrc> or g:netrw_uid s:netrw_passwd
++  " rcpurm   : rcp://[user@]host/filename	     Use rcp
++  " rcphf    : [user@]host:filename		     Use rcp
++  " scpurm   : scp://[user@]host[[#:]port]/filename  Use scp
++  " httpurm  : http[s]://[user@]host/filename	     Use wget
++  " davurm   : dav[s]://host[:port]/path             Use cadaver/curl
++  " rsyncurm : rsync://host[:port]/path              Use rsync
++  " fetchurm : fetch://[user@]host[:http]/filename   Use fetch (defaults to ftp, override for http)
++  " sftpurm  : sftp://[user@]host/filename  Use scp
++  let mipf     = '^\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)\s\+\(\S\+\)$'
++  let mf       = '^\(\S\+\)\s\+\(\S\+\)$'
++"  let ftpurm   = '^ftp://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
++"  let rcpurm   = '^rcp://\%(\([^/@]\{-}\)@\)\=\([^/]\{-}\)/\(.*\)$'
++"  let fetchurm = '^fetch://\(\([^/@]\{-}\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
++  let ftpurm   = '^ftp://\(\([^/]*\)@\)\=\([^/#:]\{-}\)\([#:]\d\+\)\=/\(.*\)$'
++  let rcpurm   = '^rcp://\%(\([^/]*\)@\)\=\([^/]\{-}\)/\(.*\)$'
++  let rcphf    = '^\(\(\h\w*\)@\)\=\(\h\w*\):\([^@]\+\)$'
++  let scpurm   = '^scp://\([^/#:]\+\)\%([#:]\(\d\+\)\)\=/\(.*\)$'
++  let httpurm  = '^https\=://\([^/]\{-}\)\(/.*\)\=$'
++  let davurm   = '^davs\=://\([^/]\+\)/\(.*/\)\([-_.~[:alnum:]]\+\)$'
++  let rsyncurm = '^rsync://\([^/]\{-}\)/\(.*\)\=$'
++  let fetchurm = '^fetch://\(\([^/]*\)@\)\=\([^/#:]\{-}\)\(:http\)\=/\(.*\)$'
++  let sftpurm  = '^sftp://\([^/]\{-}\)/\(.*\)\=$'
++
++"  call Decho("determine method:")
++  " Determine Method
++  " Method#1: rcp://user@hostname/...path-to-file {{{3
++  if match(a:choice,rcpurm) == 0
++"   call Decho("rcp://...")
++   let b:netrw_method  = 1
++   let userid          = substitute(a:choice,rcpurm,'\1',"")
++   let g:netrw_machine = substitute(a:choice,rcpurm,'\2',"")
++   let b:netrw_fname   = substitute(a:choice,rcpurm,'\3',"")
++   if userid != ""
++    let g:netrw_uid= userid
+    endif
+ 
+-  elseif a:chg == 3
+-   " saves most recently visited directories (when they differ)
+-"   call Decho("(browsing) record curdir history")
+-   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
+-    let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+-    let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
+-"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
++  " Method#4: scp://user@hostname/...path-to-file {{{3
++  elseif match(a:choice,scpurm) == 0
++"   call Decho("scp://...")
++   let b:netrw_method  = 4
++   let g:netrw_machine = substitute(a:choice,scpurm,'\1',"")
++   let g:netrw_port    = substitute(a:choice,scpurm,'\2',"")
++   let b:netrw_fname   = substitute(a:choice,scpurm,'\3',"")
++
++  " Method#5: http[s]://user@hostname/...path-to-file {{{3
++  elseif match(a:choice,httpurm) == 0
++"   call Decho("http://...")
++   let b:netrw_method = 5
++   let g:netrw_machine= substitute(a:choice,httpurm,'\1',"")
++   let b:netrw_fname  = substitute(a:choice,httpurm,'\2',"")
++
++  " Method#6: dav://hostname[:port]/..path-to-file.. {{{3
++  elseif match(a:choice,davurm) == 0
++"   call Decho("dav://...")
++   let b:netrw_method= 6
++   if a:choice =~ 'davs:'
++    let g:netrw_machine= 'https://'.substitute(a:choice,davurm,'\1/\2',"")
++   else
++    let g:netrw_machine= 'http://'.substitute(a:choice,davurm,'\1/\2',"")
+    endif
++   let b:netrw_fname  = substitute(a:choice,davurm,'\3',"")
+ 
+-  elseif a:chg == 4
+-   " u: change to the previous directory stored on the history list
+-"   call Decho("(user: <u>) chg to prev dir from history")
+-   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
+-   if g:netrw_dirhist_cnt < 0
+-    let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
+-   endif
+-   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+-"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+-     setlocal ma noro
+-"     call Decho("setlocal ma noro")
+-     keepj %d
+-     setlocal nomod
+-"     call Decho("setlocal nomod")
+-    endif
+-"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+-    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
+-   else
+-    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+-    echo "Sorry, no predecessor directory exists yet"
++   " Method#7: rsync://user@hostname/...path-to-file {{{3
++  elseif match(a:choice,rsyncurm) == 0
++"   call Decho("rsync://...")
++   let b:netrw_method = 7
++   let g:netrw_machine= substitute(a:choice,rsyncurm,'\1',"")
++   let b:netrw_fname  = substitute(a:choice,rsyncurm,'\2',"")
++
++   " Methods 2,3: ftp://[user@]hostname[[:#]port]/...path-to-file {{{3
++  elseif match(a:choice,ftpurm) == 0
++"   call Decho("ftp://...")
++   let userid	      = substitute(a:choice,ftpurm,'\2',"")
++   let g:netrw_machine= substitute(a:choice,ftpurm,'\3',"")
++   let g:netrw_port   = substitute(a:choice,ftpurm,'\4',"")
++   let b:netrw_fname  = substitute(a:choice,ftpurm,'\5',"")
++"   call Decho("g:netrw_machine<".g:netrw_machine.">")
++   if userid != ""
++    let g:netrw_uid= userid
+    endif
+ 
+-  elseif a:chg == 5
+-   " U: change to the subsequent directory stored on the history list
+-"   call Decho("(user: <U>) chg to next dir from history")
+-   let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
+-   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
+-"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+-    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+-     setlocal ma noro
+-"     call Decho("setlocal ma noro")
+-     keepj %d
+-"     call Decho("removed all lines from buffer (%d)")
+-     setlocal nomod
+-"     call Decho("setlocal nomod")
++   if curmachine != g:netrw_machine
++    if exists("s:netwr_hup[".g:netrw_machine."]")
++     call NetUserPass("ftp:".g:netrw_machine)
++    elseif exists("s:netrw_passwd")
++     " if there's a change in hostname, require password re-entry
++     unlet s:netrw_passwd
+     endif
+-"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
+-    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
+-   else
+-    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
+-    if g:netrw_dirhist_cnt < 0
+-     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
++    if exists("netrw_port")
++     unlet netrw_port
+     endif
+-    echo "Sorry, no successor directory exists yet"
+-   endif
+-
+-  elseif a:chg == 6
+-   " delete the v:count'th bookmark
+-"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
+-   let savefile= s:NetrwHome()."/.netrwbook"
+-   if filereadable(savefile)
+-    call s:NetrwBookHistSave() " done here to merge bookmarks first
+-    call delete(savefile)
+    endif
+-   call remove(g:netrw_bookmarklist,v:count-1)
+-  endif
+-  call s:NetrwBookmarkMenu()
+-"  call Dret("s:NetrwBookHistHandler")
+-endfun
+ 
+-" ---------------------------------------------------------------------
+-" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
+-"                      Sister function: s:NetrwBookHistSave()
+-fun! s:NetrwBookHistRead()
+-"  call Dfunc("s:NetrwBookHistRead()")
+-  if !exists("s:netrw_initbookhist")
+-   let home    = s:NetrwHome()
+-   let savefile= home."/.netrwbook"
+-   if filereadable(savefile)
+-"    call Decho("sourcing .netrwbook")
+-    exe "so ".savefile
+-   endif
+-   let savefile= home."/.netrwhist"
+-   if filereadable(savefile)
+-"    call Decho("sourcing .netrwhist")
+-    exe "so ".savefile
++   if exists("g:netrw_uid") && exists("s:netrw_passwd")
++    let b:netrw_method = 3
++   else
++    let host= substitute(g:netrw_machine,'\..*$','','')
++    if exists("s:netrw_hup[host]")
++     call NetUserPass("ftp:".host)
++
++    elseif (has("win32") || has("win95") || has("win64") || has("win16")) && s:netrw_ftp_cmd =~ '-[sS]:'
++"     call Decho("has -s: : s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">")
++"     call Decho("          g:netrw_ftp_cmd<".g:netrw_ftp_cmd.">")
++     if g:netrw_ftp_cmd =~ '-[sS]:\S*MACHINE\>'
++      let s:netrw_ftp_cmd= substitute(g:netrw_ftp_cmd,'\<MACHINE\>',g:netrw_machine,'')
++"      call Decho("s:netrw_ftp_cmd<".s:netrw_ftp_cmd.">")
++     endif
++     let b:netrw_method= 2
++    elseif s:FileReadable(expand("$HOME/.netrc")) && !g:netrw_ignorenetrc
++"     call Decho("using <".expand("$HOME/.netrc")."> (readable)")
++     let b:netrw_method= 2
++    else
++     if !exists("g:netrw_uid") || g:netrw_uid == ""
++      call NetUserPass()
++     elseif !exists("s:netrw_passwd") || s:netrw_passwd == ""
++      call NetUserPass(g:netrw_uid)
++    " else just use current g:netrw_uid and s:netrw_passwd
++     endif
++     let b:netrw_method= 3
++    endif
+    endif
+-   let s:netrw_initbookhist= 1
+-   au VimLeave * call s:NetrwBookHistSave()
+-  endif
+-"  call Dret("s:NetrwBookHistRead")
+-endfun
+ 
+-" ---------------------------------------------------------------------
+-" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
+-"                      Sister function: s:NetrwBookHistRead()
+-"                      I used to do this via viminfo but that appears to
+-"                      be unreliable for long-term storage
+-"                      COMBAK: does $HOME work under windows???
+-fun! s:NetrwBookHistSave()
+-"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
+-  let savefile= s:NetrwHome()."/.netrwhist"
+-  1split
+-  call s:NetrwEnew()
+-  setlocal cino= com= cpo-=aA fo=nroql2 tw=0 report=10000 noswf
+-  setlocal nocin noai noci magic nospell nohid wig= noaw
+-  setlocal ma noro write
+-  if exists("&acd") | setlocal noacd | endif
+-  silent %d
++  " Method#8: fetch {{{3
++  elseif match(a:choice,fetchurm) == 0
++"   call Decho("fetch://...")
++   let b:netrw_method = 8
++   let g:netrw_userid = substitute(a:choice,fetchurm,'\2',"")
++   let g:netrw_machine= substitute(a:choice,fetchurm,'\3',"")
++   let b:netrw_option = substitute(a:choice,fetchurm,'\4',"")
++   let b:netrw_fname  = substitute(a:choice,fetchurm,'\5',"")
+ 
+-  " save .netrwhist -- no attempt to merge
+-  silent! file .netrwhist
+-  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
+-  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
+-  let lastline = line("$")
+-  let cnt      = 1
+-  while cnt <= g:netrw_dirhist_cnt
+-   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
+-   let cnt= cnt + 1
+-  endwhile
+-  exe "sil! w! ".savefile
++   " Method#3: Issue an ftp : "machine id password [path/]filename" {{{3
++  elseif match(a:choice,mipf) == 0
++"   call Decho("(ftp) host id pass file")
++   let b:netrw_method  = 3
++   let g:netrw_machine = substitute(a:choice,mipf,'\1',"")
++   let g:netrw_uid     = substitute(a:choice,mipf,'\2',"")
++   let s:netrw_passwd  = substitute(a:choice,mipf,'\3',"")
++   let b:netrw_fname   = substitute(a:choice,mipf,'\4',"")
++   call NetUserPass(g:netrw_machine,g:netrw_uid,s:netrw_passwd)
+ 
+-  sil keepj %d
+-  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
+-   " merge and write .netrwbook
+-   let savefile= s:NetrwHome()."/.netrwbook"
++  " Method#3: Issue an ftp: "hostname [path/]filename" {{{3
++  elseif match(a:choice,mf) == 0
++"   call Decho("(ftp) host file")
++   if exists("g:netrw_uid") && exists("s:netrw_passwd")
++    let b:netrw_method  = 3
++    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
++    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+ 
+-   if filereadable(savefile)
+-    let booklist= deepcopy(g:netrw_bookmarklist)
+-    exe "sil keepj so ".savefile
+-    for bdm in booklist
+-     if index(g:netrw_bookmarklist,bdm) == -1
+-      call add(g:netrw_bookmarklist,bdm)
+-     endif
+-    endfor
+-    call sort(g:netrw_bookmarklist)
+-    exe "sil! w! ".savefile
++   elseif s:FileReadable(expand("$HOME/.netrc"))
++    let b:netrw_method  = 2
++    let g:netrw_machine = substitute(a:choice,mf,'\1',"")
++    let b:netrw_fname   = substitute(a:choice,mf,'\2',"")
+    endif
+ 
+-   " construct and save .netrwbook
+-   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
+-   exe "sil! w! ".savefile
+-  endif
+-  let bgone= bufnr("%")
+-  q!
+-  exe bgone."bwipe!"
+-
+-"  call Dret("s:NetrwBookHistSave")
+-endfun
++  " Method#9: sftp://user@hostname/...path-to-file {{{3
++  elseif match(a:choice,sftpurm) == 0
++"   call Decho("sftp://...")
++   let b:netrw_method = 9
++   let g:netrw_machine= substitute(a:choice,sftpurm,'\1',"")
++   let b:netrw_fname  = substitute(a:choice,sftpurm,'\2',"")
+ 
+-" ---------------------------------------------------------------------
+-" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
+-"  list of the contents of a local or remote directory.  It is assumed that the
+-"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
+-"  with the requested remote hostname first.
+-fun! s:NetrwBrowse(islocal,dirname)
+-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+-"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
+-"  call Decho("tab#".tabpagenr()." win#".winnr())
+-"  call Dredir("ls!")
+-  if !exists("s:netrw_initbookhist")
+-   call s:NetrwBookHistRead()
+-  endif
++  " Method#1: Issue an rcp: hostname:filename"  (this one should be last) {{{3
++  elseif match(a:choice,rcphf) == 0
++"   call Decho("(rcp) [user@]host:file) rcphf<".rcphf.">")
++   let b:netrw_method  = 1
++   let userid          = substitute(a:choice,rcphf,'\2',"")
++   let g:netrw_machine = substitute(a:choice,rcphf,'\3',"")
++   let b:netrw_fname   = substitute(a:choice,rcphf,'\4',"")
++"   call Decho('\1<'.substitute(a:choice,rcphf,'\1',"").">")
++"   call Decho('\2<'.substitute(a:choice,rcphf,'\2',"").">")
++"   call Decho('\3<'.substitute(a:choice,rcphf,'\3',"").">")
++"   call Decho('\4<'.substitute(a:choice,rcphf,'\4',"").">")
++   if userid != ""
++    let g:netrw_uid= userid
++   endif
+ 
+-  " simplify the dirname (especially for ".."s in dirnames)
+-  if a:dirname !~ '^\a\+://'
+-   let dirname= simplify(a:dirname)
++  " Cannot Determine Method {{{3
+   else
+-   let dirname= a:dirname
+-  endif
+-
+-  if exists("s:netrw_skipbrowse")
+-   unlet s:netrw_skipbrowse
+-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
+-   return
+-  endif
+-  if !exists("*shellescape")
+-   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
+-"   call Dret("s:NetrwBrowse : missing shellescape()")
+-   return
+-  endif
+-  if !exists("*fnameescape")
+-   call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70)
+-"   call Dret("s:NetrwBrowse : missing fnameescape()")
+-   return
++   if !exists("g:netrw_quiet")
++    call netrw#ErrorMsg(s:WARNING,"cannot determine method (format: protocol://[user@]hostname[:port]/[path])",45)
++   endif
++   let b:netrw_method  = -1
+   endif
++  "}}}3
+ 
+-  call s:NetrwOptionSave("w:")                                                                                                            
+-
+-  " re-instate any marked files
+-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+-"   call Decho("clearing marked files")
+-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
++  if g:netrw_port != ""
++   " remove any leading [:#] from port number
++   let g:netrw_port = substitute(g:netrw_port,'[#:]\+','','')
++  elseif exists("netrw_port")
++   " retain port number as implicit for subsequent ftp operations
++   let g:netrw_port= netrw_port
+   endif
+ 
+-  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
+-"   call Decho("handle w:netrw_acdkeep:")
+-"   call Decho("keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
+-   exe 'keepj lcd '.fnameescape(dirname)
+-   call s:NetrwSafeOptions()
+-"   call Decho("getcwd<".getcwd().">")
+-
+-  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
+-   " looks like a regular file, attempt transfer
+-"   call Decho("attempt transfer as regular file<".dirname.">")
++"  call Decho("a:choice       <".a:choice.">")
++"  call Decho("b:netrw_method <".b:netrw_method.">")
++"  call Decho("g:netrw_machine<".g:netrw_machine.">")
++"  call Decho("g:netrw_port   <".g:netrw_port.">")
++"  if exists("g:netrw_uid")		"Decho
++"   call Decho("g:netrw_uid    <".g:netrw_uid.">")
++"  endif					"Decho
++"  if exists("s:netrw_passwd")		"Decho
++"   call Decho("s:netrw_passwd <".s:netrw_passwd.">")
++"  endif					"Decho
++"  call Decho("b:netrw_fname  <".b:netrw_fname.">")
++"  call Dret("NetrwMethod : b:netrw_method=".b:netrw_method." g:netrw_port=".g:netrw_port)
++endfun
+ 
+-   " remove any filetype indicator from end of dirname, except for the {{{3
+-   " "this is a directory" indicator (/).
+-   " There shouldn't be one of those here, anyway.
+-   let path= substitute(dirname,'[*=@|]\r\=$','','e')
+-"   call Decho("new path<".path.">")
+-   call s:RemotePathAnalysis(dirname)
++" ------------------------------------------------------------------------
++" NetReadFixup: this sort of function is typically written by the user {{{2
++"               to handle extra junk that their system's ftp dumps
++"               into the transfer.  This function is provided as an
++"               example and as a fix for a Windows 95 problem: in my
++"               experience, win95's ftp always dumped four blank lines
++"               at the end of the transfer.
++if has("win95") && exists("g:netrw_win95ftp") && g:netrw_win95ftp
++ fun! NetReadFixup(method, line1, line2)
++"   call Dfunc("NetReadFixup(method<".a:method."> line1=".a:line1." line2=".a:line2.")")
+ 
+-   " remote-read the requested file into current buffer {{{3
+-   keepj mark '
+-   call s:NetrwEnew(dirname)
+-   call s:NetrwSafeOptions()
+-   setlocal ma noro
+-"   call Decho("setlocal ma noro")
+-   let b:netrw_curdir= dirname
+-"   call Decho("exe sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)." (bt=".&bt.")")
+-   exe "sil! keepalt file ".fnameescape(s:method."://".s:user.s:machine."/".s:path)
+-   exe "sil! keepalt doau BufReadPre ".fnameescape(s:fname)
+-   silent call netrw#NetRead(2,s:method."://".s:user.s:machine."/".s:path)
+-   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz'
+-    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
+-    exe "sil keepalt doau BufReadPost ".fnameescape(s:fname)
++   " sanity checks -- attempt to convert inputs to integers
++   let method = a:method + 0
++   let line1  = a:line1 + 0
++   let line2  = a:line2 + 0
++   if type(method) != 0 || type(line1) != 0 || type(line2) != 0 || method < 0 || line1 <= 0 || line2 <= 0
++"    call Dret("NetReadFixup")
++    return
+    endif
+ 
+-   " save certain window-oriented variables into buffer-oriented variables {{{3
+-   call s:SetBufWinVars()
+-   call s:NetrwOptionRestore("w:")
+-   setlocal ma nomod
++   if method == 3   " ftp (no <.netrc>)
++    let fourblanklines= line2 - 3
++    if fourblanklines >= line1
++     exe "sil keepj ".fourblanklines.",".line2."g/^\s*$/d"
++     call histdel("/",-1)
++    endif
++   endif
+ 
+-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"   call Dret("s:NetrwBrowse : file<".s:fname.">")
+-   return
+-  endif
++"   call Dret("NetReadFixup")
++ endfun
++endif
+ 
+-  " use buffer-oriented WinVars if buffer ones exist but window ones don't {{{3
+-  call s:UseBufWinVars()
++" ---------------------------------------------------------------------
++" NetUserPass: set username and password for subsequent ftp transfer {{{2
++"   Usage:  :call NetUserPass()		               -- will prompt for userid and password
++"	    :call NetUserPass("uid")	               -- will prompt for password
++"	    :call NetUserPass("uid","password")        -- sets global userid and password
++"	    :call NetUserPass("ftp:host")              -- looks up userid and password using hup dictionary
++"	    :call NetUserPass("host","uid","password") -- sets hup dictionary with host, userid, password
++fun! NetUserPass(...)
+ 
+-  " set up some variables {{{3
+-  let b:netrw_browser_active = 1
+-  let dirname                = dirname
+-  let s:last_sort_by         = g:netrw_sort_by
++" call Dfunc("NetUserPass() a:0=".a:0)
+ 
+-  " set up menu {{{3
+-  call s:NetrwMenu(1)
++ if !exists('s:netrw_hup')
++  let s:netrw_hup= {}
++ endif
+ 
+-  " set up buffer {{{3
+-  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
+-  " maintain markfile highlighting
+-  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
+-"   call Decho("bufnr(%)=".bufnr('%'))
+-"   call Decho("exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
+-   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+-  else
+-"   call Decho("2match none")
+-   2match none
+-  endif
+-  if reusing
+-   call s:NetrwOptionRestore("w:")
+-   setlocal noma nomod nowrap
+-"   call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"   call Dret("s:NetrwBrowse : re-using buffer")
+-   return
+-  endif
++ if a:0 == 0
++  " case: no input arguments
+ 
+-  " set b:netrw_curdir to the new directory name {{{3
+-"  call Decho("set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
+-  let b:netrw_curdir= dirname
+-  if b:netrw_curdir =~ '[/\\]$'
+-   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
+-  endif
+-  if b:netrw_curdir == ''
+-   if has("amiga")
+-    " On the Amiga, the empty string connotes the current directory
+-    let b:netrw_curdir= getcwd()
+-   else
+-    " under unix, when the root directory is encountered, the result
+-    " from the preceding substitute is an empty string.
+-    let b:netrw_curdir= '/'
+-   endif
++  " change host and username if not previously entered; get new password
++  if !exists("g:netrw_machine")
++   let g:netrw_machine= input('Enter hostname: ')
+   endif
+-  if !a:islocal && b:netrw_curdir !~ '/$'
+-   let b:netrw_curdir= b:netrw_curdir.'/'
++  if !exists("g:netrw_uid") || g:netrw_uid == ""
++   " get username (user-id) via prompt
++   let g:netrw_uid= input('Enter username: ')
+   endif
+-"  call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+-
+-  " ------------
+-  " (local only) {{{3
+-  " ------------
+-  if a:islocal
+-"   call Decho("local only:")
+-
+-   " Set up ShellCmdPost handling.  Append current buffer to browselist
+-   call s:LocalFastBrowser()
++  " get password via prompting
++  let s:netrw_passwd= inputsecret("Enter Password: ")
+ 
+-  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
+-   if !g:netrw_keepdir
+-"    call Decho("handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
+-"    call Decho("l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
+-    if !exists("&l:acd") || !&l:acd
+-"     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
+-     try
+-      exe 'keepj lcd '.fnameescape(b:netrw_curdir)
+-     catch /^Vim\%((\a\+)\)\=:E472/
+-      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
+-      if exists("w:netrw_prvdir")
+-       let b:netrw_curdir= w:netrw_prvdir
+-      else
+-       call s:NetrwOptionRestore("w:")
+-       setlocal noma nomod nowrap
+-       let b:netrw_curdir= dirname
+-"       call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"       call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
+-       return
+-      endif
+-     endtry
+-    endif
++  " set up hup database
++  let host = substitute(g:netrw_machine,'\..*$','','')
++  if !exists('s:netrw_hup[host]')
++   let s:netrw_hup[host]= {}
++  endif
++  let s:netrw_hup[host].uid    = g:netrw_uid
++  let s:netrw_hup[host].passwd = s:netrw_passwd
++
++ elseif a:0 == 1
++  " case: one input argument
++
++  if a:1 =~ '^ftp:'
++   " get host from ftp:... url
++   " access userid and password from hup (host-user-passwd) dictionary
++   let host = substitute(a:1,'^ftp:','','')
++   let host = substitute(host,'\..*','','')
++   if exists("s:netrw_hup[host]")
++    let g:netrw_uid    = s:netrw_hup[host].uid
++    let s:netrw_passwd = s:netrw_hup[host].passwd
++"    call Decho("get s:netrw_hup[".host."].uid   <".s:netrw_hup[host].uid.">")
++"    call Decho("get s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
++   else
++    let g:netrw_uid    = input("Enter UserId: ")
++    let s:netrw_passwd = inputsecret("Enter Password: ")
+    endif
+ 
+-  " --------------------------------
+-  " remote handling: {{{3
+-  " --------------------------------
+   else
+-"   call Decho("remote only:")
+-
+-   " analyze dirname and g:netrw_list_cmd {{{4
+-"   call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
+-   if dirname =~ "^NetrwTreeListing\>"
+-    let dirname= b:netrw_curdir
+-"    call Decho("(dirname was ".dirname.") dirname<".dirname.">")
+-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
+-    let dirname= substitute(b:netrw_curdir,'\\','/','g')
+-    if dirname !~ '/$'
+-     let dirname= dirname.'/'
+-    endif
+-    let b:netrw_curdir = dirname
+-"    call Decho("(liststyle is TREELIST) dirname<".dirname.">")
++   " case: one input argument, not an url.  Using it as a new user-id.
++   if exists("g:netrw_machine")
++    let host= substitute(g:netrw_machine,'\..*$','','')
+    else
+-    let dirname = substitute(dirname,'\\','/','g')
+-"    call Decho("(normal) dirname<".dirname.">")
++    let g:netrw_machine= input('Enter hostname: ')
+    endif
++   let g:netrw_uid = a:1
++"   call Decho("set g:netrw_uid= <".g:netrw_uid.">")
++   if exists("g:netrw_passwd")
++    " ask for password if one not previously entered
++    let s:netrw_passwd= g:netrw_passwd
++   else
++    let s:netrw_passwd = inputsecret("Enter Password: ")
++   endif
++  endif
+ 
+-   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
+-   if dirname !~ dirpat
+-    if !exists("g:netrw_quiet")
+-     call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
+-    endif
+-    call s:NetrwOptionRestore("w:")
+-    setlocal noma nomod nowrap
+-"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
+-    return
++"  call Decho("host<".host.">")
++  if exists("host")
++   if !exists('s:netrw_hup[host]')
++    let s:netrw_hup[host]= {}
+    endif
+-   let b:netrw_curdir= dirname
+-"   call Decho("b:netrw_curdir<".b:netrw_curdir."> (remote)")
+-  endif  " (additional remote handling)
++   let s:netrw_hup[host].uid    = g:netrw_uid
++   let s:netrw_hup[host].passwd = s:netrw_passwd
++  endif
+ 
+-  " -----------------------
+-  " Directory Listing: {{{3
+-  " -----------------------
+-  call s:BrowserMaps(a:islocal)
+-  call s:PerformListing(a:islocal)
++ elseif a:0 == 2
++  let g:netrw_uid    = a:1
++  let s:netrw_passwd = a:2
+ 
+-  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
+-  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
+-  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
+-  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
+-  " function gets called due to that autocmd; it notices that the following variable is set
+-  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
+-  let s:locbrowseshellcmd= 1
++ elseif a:0 == 3
++  " enter hostname, user-id, and password into the hup dictionary
++  let host = substitute(a:1,'^\a\+:','','')
++  let host = substitute(host,'\..*$','','')
++  if !exists('s:netrw_hup[host]')
++   let s:netrw_hup[host]= {}
++  endif
++  let s:netrw_hup[host].uid    = a:2
++  let s:netrw_hup[host].passwd = a:3
++  let g:netrw_uid              = s:netrw_hup[host].uid
++  let s:netrw_passwd           = s:netrw_hup[host].passwd
++"  call Decho("set s:netrw_hup[".host."].uid   <".s:netrw_hup[host].uid.">")
++"  call Decho("set s:netrw_hup[".host."].passwd<".s:netrw_hup[host].passwd.">")
++ endif
+ 
+-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-"  call Dret("s:NetrwBrowse : did PerformListing")
+-  return
++" call Dret("NetUserPass : uid<".g:netrw_uid."> passwd<".s:netrw_passwd.">")
+ endfun
+ 
++" ===========================================
++"  Shared Browsing Support:    {{{1
++" ===========================================
++
+ " ---------------------------------------------------------------------
+-" s:NetrwFileInfo: supports qf (query for file information) {{{2
+-fun! s:NetrwFileInfo(islocal,fname)
+-"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
+-  if a:islocal
+-   if (has("unix") || has("macunix")) && executable("/bin/ls")
+-    if exists("b:netrw_curdir")
+-"     call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>')
+-     if b:netrw_curdir =~ '/$'
+-      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname))
+-     else
+-      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname))
+-     endif
+-    else
+-"     call Decho('using ls '.a:fname." using cwd<".getcwd().">")
+-     echo system("/bin/ls -lsad ".shellescape(a:fname))
+-    endif
+-   else
+-    " use vim functions to return information about file below cursor
+-"    call Decho("using vim functions to query for file info")
+-    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
+-     let fname= substitute(a:fname,".$","","")
+-    else
+-     let fname= a:fname
++" s:NetrwMaps: {{{2
++fun! s:NetrwMaps(islocal)
++"  call Dfunc("s:NetrwMaps(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
++
++  " set up Rexplore and [ 2-leftmouse-click -or- c-leftmouse ]
++"  call Decho("(NetrwMaps) set up Rexplore command")
++  com! Rexplore if exists("w:netrw_rexlocal")|call s:NetrwRexplore(w:netrw_rexlocal,exists("w:netrw_rexdir")? w:netrw_rexdir : ".")|else|call netrw#ErrorMsg(s:WARNING,"not a former netrw window",79)|endif
++  if g:netrw_mousemaps && g:netrw_retmap
++"   call Decho("(NetrwMaps) set up Rexplore 2-leftmouse")
++   if !hasmapto("<Plug>NetrwReturn")
++    if maparg("<2-leftmouse>","n") == "" || maparg("<2-leftmouse>","n") =~ '^-$'
++"     call Decho("(NetrwMaps) making map for 2-leftmouse")
++     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
++    elseif maparg("<c-leftmouse>","n") == ""
++"     call Decho("(NetrwMaps) making map for c-leftmouse")
++     nmap <unique> <silent> <c-leftmouse>	<Plug>NetrwReturn
+     endif
+-    let t  = getftime(fname)
+-    let sz = getfsize(fname)
+-    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
+-"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
+    endif
+-  else
+-   echo "sorry, \"qf\" not supported yet for remote files"
++   nno <silent> <Plug>NetrwReturn	:Rexplore<cr>
++"   call Decho("(NetrwMaps) made <Plug>NetrwReturn map")
+   endif
+-"  call Dret("s:NetrwFileInfo")
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" s:NetrwGetBuffer: {{{2
+-"   returns 0=cleared buffer
+-"           1=re-used buffer
+-fun! s:NetrwGetBuffer(islocal,dirname)
+-"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
+-  let dirname= a:dirname
+ 
+-  " re-use buffer if possible {{{3
+-"  call Decho("--re-use a buffer if possible--")
+-  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+-   " find NetrwTreeList buffer if there is one
+-"   call Decho("find NetrwTreeList buffer if there is one")
+-   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
+-"    call Decho("  re-use w:netrw_treebufnr=".w:netrw_treebufnr)
+-    let eikeep= &ei
+-    set ei=all
+-    exe "sil! b ".w:netrw_treebufnr
+-    let &ei= eikeep
+-"    call Dret("s:NetrwGetBuffer : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
+-    return
++  if a:islocal
++"   call Decho("(NetrwMaps) make local maps")
++   " local normal-mode maps
++   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(1)<cr>
++   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(1)<cr>
++   nnoremap <buffer> <silent> c		:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
++   nnoremap <buffer> <silent> <cr>	:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
++   nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("")<cr>
++   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
++   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> gd	:<c-u>call <SID>NetrwForceChgDir(1,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> gf	:<c-u>call <SID>NetrwForceFile(1,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(1)<cr>
++   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
++   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(1)<cr>
++   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
++   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
++   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
++   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> mF	:<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
++   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
++   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
++   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
++   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
++   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
++   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
++   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
++   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
++   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
++   nnoremap <buffer> <silent> mX	:<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr>
++   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
++   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(1)<cr>
++   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(3)<cr>
++   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
++   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(1)<cr>
++   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr>
++   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
++   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(1)<cr>
++   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(1)<cr>
++   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(4)<cr>
++   nnoremap <buffer> <silent> Tb	:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
++   nnoremap <buffer> <silent> Th	:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
++   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
++   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
++   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(5)<cr>
++   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
++   nnoremap <buffer> <silent> X		:call <SID>NetrwLocalExecute(expand("<cword>"))"<cr>
++   " local insert-mode maps
++   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(1)<cr>
++   inoremap <buffer> <silent> c		<c-o>:exe "keepjumps lcd ".fnameescape(b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
++   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(1)<cr>
++   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,'../'))<cr>
++   inoremap <buffer> <silent> <cr>	<c-o>:call netrw#LocalBrowseCheck(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord()))<cr>
++   inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("")<cr>
++   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(1)<cr>
++   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(1,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
++   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(1)<cr>
++   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(1)<cr>
++   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(1)<cr>
++   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(1)<cr>
++   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
++   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(1)<cr>
++   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(1)<cr>
++   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(1)<cr>
++   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(1)<cr>
++   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(1)<cr>
++   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(1)<cr>
++   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(1)<cr>
++   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(1)<cr>
++   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(1)<cr>
++   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(1)<cr>
++   inoremap <buffer> <silent> mX	<c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(1)<cr>
++   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(1)<cr>
++   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(1)<cr>
++   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(3)<cr>
++   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
++   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
++   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(1,<SID>NetrwGetWord())<cr>
++   inoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(1,getqflist())<cr>
++   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
++   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(1)<cr>
++   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(1)<cr>
++   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(4)<cr>
++   inoremap <buffer> <silent> Tb	<c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
++   inoremap <buffer> <silent> Th	<c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
++   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,expand("%"))<cr>
++   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,expand("%"))<cr>
++   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(5)<cr>
++   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),0),0)"<cr>
++   if !hasmapto('<Plug>NetrwHideEdit')
++    nmap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
++    imap <buffer> <unique> <c-h> <Plug>NetrwHideEdit
+    endif
+-   let bufnum= -1
+-"   call Decho("  liststyle=TREE but w:netrw_treebufnr doesn't exist")
+-
+-  else
+-   " find buffer number of buffer named precisely the same as dirname {{{3
+-"   call Decho("--find buffer numnber of buffer named precisely the same as dirname--")
+-"   call Dredir("ls!")
+-
+-   " get dirname and associated buffer number
+-   let bufnum  = bufnr(escape(dirname,'\'))
+-"   call Decho("  find buffer<".dirname.">'s number ")
+-"   call Decho("  bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
+-
+-   if bufnum < 0 && dirname !~ '/$'
+-    " try appending a trailing /
+-"    call Decho("  try appending a trailing / to dirname<".dirname.">")
+-    let bufnum= bufnr(escape(dirname.'/','\'))
+-    if bufnum > 0
+-     let dirname= dirname.'/'
+-    endif
++   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(1)<cr>
++   if !hasmapto('<Plug>NetrwRefresh')
++    nmap <buffer> <unique> <c-l> <Plug>NetrwRefresh
++    imap <buffer> <unique> <c-l> <Plug>NetrwRefresh
+    endif
+-
+-   if bufnum < 0 && dirname =~ '/$'
+-    " try removing a trailing /
+-"    call Decho("  try removing a trailing / from dirname<".dirname.">")
+-    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
+-    if bufnum > 0
+-     let dirname= substitute(dirname,'/$','','')
+-    endif
++   nnoremap <buffer> <silent> <Plug>NetrwRefresh		:call <SID>NetrwRefresh(1,<SID>NetrwBrowseChgDir(1,'./'))<cr>
++   if s:didstarstar || !mapcheck("<s-down>","n")
++    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
++    inoremap <buffer> <silent> <s-down>	:Nexplore<cr>
+    endif
+-
+-"   call Decho("  findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
+-   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
+-   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
+-    " handle approximate matches
+-"    call Decho("  handling approx match: bufnum#".bufnum."<".bufname(bufnum)."> approx-dirname<".dirname.">")
+-    let ibuf    = 1
+-    let buflast = bufnr("$")
+-"    call Decho("  findbuf2: buflast=bufnr($)=".buflast)
+-    while ibuf <= buflast
+-     let bname= substitute(bufname(ibuf),'\\','/','g')
+-     let bname= substitute(bname,'.\zs/$','','')
+-"     call Decho("  findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">")
+-     if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
+-      " bname is not empty
+-      " dirname ends with bname,
+-      " dirname doesn't start with /, so its not a absolute path
+-"      call Decho("  findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
+-      break
+-     endif
+-     if bname =~ '^'.dirname.'/\=$'
+-      " bname begins with dirname
+-"      call Decho('  findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
+-      break
+-     endif
+-     if dirname =~ '^'.bname.'/$'
+-"      call Decho('  findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
+-      break
+-     endif
+-     if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1
+-"      call Decho('  findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$')
+-      break
+-     endif
+-     let ibuf= ibuf + 1
+-    endwhile
+-    if ibuf > buflast
+-     let bufnum= -1
+-    else
+-     let bufnum= ibuf
+-    endif
+-"    call Decho("  findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
++   if s:didstarstar || !mapcheck("<s-up>","n")
++    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
++    inoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+    endif
+-  endif
+-
+-  " get enew buffer and name it -or- re-use buffer {{{3
+-  sil! keepj mark '
+-  if bufnum < 0 || !bufexists(bufnum)
+-"   call Decho("--get enew buffer and name it (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
+-   call s:NetrwEnew(dirname)
+-"   call Decho("  got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
+-   " name the buffer
+-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+-    " Got enew buffer; transform into a NetrwTreeListing
+-"    call Decho("--transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
+-    if !exists("s:netrw_treelistnum")
+-     let s:netrw_treelistnum= 1
+-    else
+-     let s:netrw_treelistnum= s:netrw_treelistnum + 1
+-    endif
+-    let w:netrw_treebufnr= bufnr("%")
+-"    call Decho("  exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
+-    exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
+-    set bt=nofile noswf
+-    nnoremap <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
+-    nnoremap <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
+-    nnoremap <silent> <buffer> [[       :silent call <SID>TreeListMove('[')<cr>
+-    nnoremap <silent> <buffer> ]]       :silent call <SID>TreeListMove(']')<cr>
+-"    call Decho("  tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
+-   else
+-"    let v:errmsg= "" " Decho
+-    let escdirname= fnameescape(dirname)
+-"    call Decho("  errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
+-"    call Decho('  exe sil! keepalt file '.escdirname)
+-"    let v:errmsg= "" " Decho
+-    exe 'sil! keepalt file '.escdirname
+-"    call Decho("  errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
++   let mapsafecurdir = escape(b:netrw_curdir, s:netrw_map_escape)
++   if g:netrw_mousemaps == 1
++    nmap <buffer> <leftmouse>   <Plug>NetrwLeftmouse
++    nno  <buffer> <silent>	<Plug>NetrwLeftmouse	<leftmouse>:call <SID>NetrwLeftmouse(1)<cr>
++    nmap <buffer> <s-rightdrag>	<Plug>NetrwRightdrag
++    nno  <buffer> <silent>	<Plug>NetrwRightdrag	<leftmouse>:call <SID>NetrwRightdrag(1)<cr>
++    nmap <buffer> <middlemouse>	<Plug>NetrwMiddlemouse
++    nno  <buffer> <silent>	<Plug>NetrwMiddlemouse	<leftmouse>:call <SID>NetrwPrevWinOpen(1)<cr>
++    nmap <buffer> <s-leftmouse>	<Plug>NetrwSLeftmouse
++    nno  <buffer> <silent>	<Plug>NetrwSLeftmouse   <leftmouse>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
++    nmap <buffer> <2-leftmouse>	<Plug>Netrw2Leftmouse
++    nmap <buffer> <silent>	<Plug>Netrw2Leftmouse	-
++    imap <buffer> <leftmouse>	<Plug>ILeftmouse
++    ino  <buffer> <silent>	<Plug>ILeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(1)<cr>
++    imap <buffer> <middlemouse>	<Plug>IMiddlemouse
++    ino  <buffer> <silent>	<Plug>IMiddlemouse	<c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(1)<cr>
++    imap <buffer> <s-leftmouse>	<Plug>ISLeftmouse
++    ino  <buffer> <silent>	<Plug>ISLeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(1,<SID>NetrwGetWord())<cr>
++    exe 'nnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++    exe 'vnoremap <buffer> <silent> <rightmouse>  <leftmouse>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++    exe 'inoremap <buffer> <silent> <rightmouse>  <c-o><leftmouse><c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
+    endif
+-"   call Decho("  named enew buffer#".bufnr("%")."<".bufname("%").">")
++   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
++   exe 'nnoremap <buffer> <silent> <Leader>m	:call <SID>NetrwMakeDir("")<cr>'
++   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
++   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwLocalRm("'.mapsafecurdir.'")<cr>'
++   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwLocalRename("'.mapsafecurdir.'")<cr>'
++   exe 'inoremap <buffer> <silent> <Leader>m	<c-o>:call <SID>NetrwMakeDir("")<cr>'
++   nnoremap <buffer> <F1>		:he netrw-quickhelp<cr>
+ 
+-  else " Re-use the buffer
+-"   call Decho("--re-use buffer#".bufnum." (bufexists([bufnum=".bufnum."])=".bufexists(bufnum).")")
+-   let eikeep= &ei
+-   set ei=all
+-   if getline(2) =~ '^" Netrw Directory Listing'
+-"    call Decho("  re-use buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  keepalt b ".bufnum)
+-    exe "sil! keepalt b ".bufnum
+-   else
+-"    call Decho("  reusing buffer#".bufnum."<".((bufnum > 0)? bufname(bufnum) : "")."> using:  b ".bufnum)
+-    exe "sil! b ".bufnum
+-   endif
+-   if bufname("%") == '.'
+-"    call Decho("exe sil! keepalt file ".fnameescape(getcwd()))
+-    exe "sil! keepalt file ".fnameescape(getcwd())
++  else " remote
++"   call Decho("(NetrwMaps) make remote maps")
++   call s:RemotePathAnalysis(b:netrw_curdir)
++   " remote normal-mode maps
++   nnoremap <buffer> <silent> <cr>	:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
++   nnoremap <buffer> <silent> <c-l>	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
++   nnoremap <buffer> <silent> -		:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
++   nnoremap <buffer> <silent> a		:call <SID>NetrwHide(0)<cr>
++   nnoremap <buffer> <silent> mb	:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> mc	:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
++   nnoremap <buffer> <silent> md	:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
++   nnoremap <buffer> <silent> me	:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
++   nnoremap <buffer> <silent> mf	:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> mF	:<c-u>call <SID>NetrwUnmarkList(bufnr("%"),b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> mg	:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
++   nnoremap <buffer> <silent> mh	:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
++   nnoremap <buffer> <silent> mm	:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
++   nnoremap <buffer> <silent> mp	:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
++   nnoremap <buffer> <silent> mr	:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
++   nnoremap <buffer> <silent> ms	:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
++   nnoremap <buffer> <silent> mt	:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
++   nnoremap <buffer> <silent> mT	:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
++   nnoremap <buffer> <silent> mu	:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
++   nnoremap <buffer> <silent> mx	:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
++   nnoremap <buffer> <silent> mX	:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
++   nnoremap <buffer> <silent> mz	:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
++   nnoremap <buffer> <silent> gb	:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> gd	:<c-u>call <SID>NetrwForceChgDir(0,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> gf	:<c-u>call <SID>NetrwForceFile(0,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> gh	:<c-u>call <SID>NetrwHidden(0)<cr>
++   nnoremap <buffer> <silent> gp	:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> C		:let g:netrw_chgwin= winnr()<cr>
++   nnoremap <buffer> <silent> i		:call <SID>NetrwListStyle(0)<cr>
++   nnoremap <buffer> <silent> I		:call <SID>NetrwBannerCtrl(1)<cr>
++   nnoremap <buffer> <silent> o		:call <SID>NetrwSplit(0)<cr>
++   nnoremap <buffer> <silent> O		:call <SID>NetrwObtain(0)<cr>
++   nnoremap <buffer> <silent> p		:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
++   nnoremap <buffer> <silent> P		:call <SID>NetrwPrevWinOpen(0)<cr>
++   nnoremap <buffer> <silent> qb	:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> mB	:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> qf	:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
++   nnoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr>
++   nnoremap <buffer> <silent> r		:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
++   nnoremap <buffer> <silent> s		:call <SID>NetrwSortStyle(0)<cr>
++   nnoremap <buffer> <silent> S		:call <SID>NetSortSequence(0)<cr>
++   nnoremap <buffer> <silent> t		:call <SID>NetrwSplit(1)<cr>
++   nnoremap <buffer> <silent> Tb	:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
++   nnoremap <buffer> <silent> Th	:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
++   nnoremap <buffer> <silent> u		:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> U		:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
++   nnoremap <buffer> <silent> v		:call <SID>NetrwSplit(2)<cr>
++   nnoremap <buffer> <silent> x		:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
++   nnoremap <buffer> <silent> %		:call <SID>NetrwOpenFile(0)<cr>
++   " remote insert-mode maps
++   inoremap <buffer> <silent> <cr>	<c-o>:call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()))<cr>
++   inoremap <buffer> <silent> <c-l>	<c-o>:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
++   inoremap <buffer> <silent> -		<c-o>:exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'../'))<cr>
++   inoremap <buffer> <silent> a		<c-o>:call <SID>NetrwHide(0)<cr>
++   inoremap <buffer> <silent> mb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(0,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> mc	<c-o>:<c-u>call <SID>NetrwMarkFileCopy(0)<cr>
++   inoremap <buffer> <silent> md	<c-o>:<c-u>call <SID>NetrwMarkFileDiff(0)<cr>
++   inoremap <buffer> <silent> me	<c-o>:<c-u>call <SID>NetrwMarkFileEdit(0)<cr>
++   inoremap <buffer> <silent> mf	<c-o>:<c-u>call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
++   inoremap <buffer> <silent> mg	<c-o>:<c-u>call <SID>NetrwMarkFileGrep(0)<cr>
++   inoremap <buffer> <silent> mh	<c-o>:<c-u>call <SID>NetrwMarkHideSfx(0)<cr>
++   inoremap <buffer> <silent> mm	<c-o>:<c-u>call <SID>NetrwMarkFileMove(0)<cr>
++   inoremap <buffer> <silent> mp	<c-o>:<c-u>call <SID>NetrwMarkFilePrint(0)<cr>
++   inoremap <buffer> <silent> mr	<c-o>:<c-u>call <SID>NetrwMarkFileRegexp(0)<cr>
++   inoremap <buffer> <silent> ms	<c-o>:<c-u>call <SID>NetrwMarkFileSource(0)<cr>
++   inoremap <buffer> <silent> mt	<c-o>:<c-u>call <SID>NetrwMarkFileTgt(0)<cr>
++   inoremap <buffer> <silent> mT	<c-o>:<c-u>call <SID>NetrwMarkFileTag(0)<cr>
++   inoremap <buffer> <silent> mu	<c-o>:<c-u>call <SID>NetrwUnMarkFile(0)<cr>
++   inoremap <buffer> <silent> mx	<c-o>:<c-u>call <SID>NetrwMarkFileExe(0)<cr>
++   inoremap <buffer> <silent> mX	<c-o>:<c-u>call <SID>NetrwMarkFileVimCmd(0)<cr>
++   inoremap <buffer> <silent> mz	<c-o>:<c-u>call <SID>NetrwMarkFileCompress(0)<cr>
++   inoremap <buffer> <silent> gb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(1,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> gh	<c-o>:<c-u>call <SID>NetrwHidden(0)<cr>
++   inoremap <buffer> <silent> gp	<c-o>:<c-u>call <SID>NetrwChgPerm(0,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> C		<c-o>:let g:netrw_chgwin= winnr()<cr>
++   inoremap <buffer> <silent> i		<c-o>:call <SID>NetrwListStyle(0)<cr>
++   inoremap <buffer> <silent> I		<c-o>:call <SID>NetrwBannerCtrl(1)<cr>
++   inoremap <buffer> <silent> o		<c-o>:call <SID>NetrwSplit(0)<cr>
++   inoremap <buffer> <silent> O		<c-o>:call <SID>NetrwObtain(0)<cr>
++   inoremap <buffer> <silent> p		<c-o>:call <SID>NetrwPreview(<SID>NetrwBrowseChgDir(1,<SID>NetrwGetWord(),1))<cr>
++   inoremap <buffer> <silent> P		<c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
++   inoremap <buffer> <silent> qb	<c-o>:<c-u>call <SID>NetrwBookHistHandler(2,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> mB	<c-o>:<c-u>call <SID>NetrwBookHistHandler(6,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> qf	<c-o>:<c-u>call <SID>NetrwFileInfo(0,<SID>NetrwGetWord())<cr>
++   inoremap <buffer> <silent> qF	:<c-u>call <SID>NetrwMarkFileQFEL(0,getqflist())<cr>
++   inoremap <buffer> <silent> r		<c-o>:let g:netrw_sort_direction= (g:netrw_sort_direction =~ 'n')? 'r' : 'n'<bar>exe "norm! 0"<bar>call <SID>NetrwBrowse(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
++   inoremap <buffer> <silent> s		<c-o>:call <SID>NetrwSortStyle(0)<cr>
++   inoremap <buffer> <silent> S		<c-o>:call <SID>NetSortSequence(0)<cr>
++   inoremap <buffer> <silent> t		<c-o>:call <SID>NetrwSplit(1)<cr>
++   inoremap <buffer> <silent> Tb	<c-o>:<c-u>call <SID>NetrwSetTgt('b',v:count1)<cr>
++   inoremap <buffer> <silent> Th	<c-o>:<c-u>call <SID>NetrwSetTgt('h',v:count)<cr>
++   inoremap <buffer> <silent> u		<c-o>:<c-u>call <SID>NetrwBookHistHandler(4,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> U		<c-o>:<c-u>call <SID>NetrwBookHistHandler(5,b:netrw_curdir)<cr>
++   inoremap <buffer> <silent> v		<c-o>:call <SID>NetrwSplit(2)<cr>
++   inoremap <buffer> <silent> x		<c-o>:call netrw#NetrwBrowseX(<SID>NetrwBrowseChgDir(0,<SID>NetrwGetWord()),1)<cr>
++   inoremap <buffer> <silent> %		<c-o>:call <SID>NetrwOpenFile(0)<cr>
++   if !hasmapto('<Plug>NetrwHideEdit')
++    nmap <buffer> <c-h> <Plug>NetrwHideEdit
++    imap <buffer> <c-h> <Plug>NetrwHideEdit
+    endif
+-   let &ei= eikeep
+-   if line("$") <= 1
+-    call s:NetrwListSettings(a:islocal)
+-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but its empty, so refresh it")
+-    return 0
+-   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+-"    call Decho("--re-use tree listing--")
+-"    call Decho("  clear buffer<".expand("%")."> with :%d")
+-    sil keepj %d
+-    call s:NetrwListSettings(a:islocal)
+-"    call Dret("s:NetrwGetBuffer 0 : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
+-    return 0
+-   else
+-"    call Dret("s:NetrwGetBuffer 1 : buf#".bufnr("%"))
+-    return 1
++   nnoremap <buffer> <silent> <Plug>NetrwHideEdit	:call <SID>NetrwHideEdit(0)<cr>
++   if !hasmapto('<Plug>NetrwRefresh')
++    nmap <buffer> <c-l> <Plug>NetrwRefresh
++    imap <buffer> <c-l> <Plug>NetrwRefresh
+    endif
+-  endif
+ 
+-  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
+-  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
+-  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
+-  "  med    1         D      H
+-  "  fast   2         H      H
+-"  call Decho("--do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
+-  let fname= expand("%")
+-  call s:NetrwListSettings(a:islocal)
+-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
+-  exe "sil! keepalt file ".fnameescape(fname)
++   let mapsafepath     = escape(s:path, s:netrw_map_escape)
++   let mapsafeusermach = escape(s:user.s:machine, s:netrw_map_escape)
++
++   nnoremap <buffer> <silent> <Plug>NetrwRefresh	:call <SID>NetrwRefresh(0,<SID>NetrwBrowseChgDir(0,'./'))<cr>
++   if g:netrw_mousemaps == 1
++    nmap <leftmouse>		<Plug>NetrwLeftmouse
++    nno <buffer> <silent>	<Plug>NetrwLeftmouse	<leftmouse>:call <SID>NetrwLeftmouse(0)<cr>
++    nmap <buffer> <leftdrag>	<Plug>NetrwLeftdrag
++    nno  <buffer> <silent>	<Plug>NetrwLeftdrag	:call <SID>NetrwLeftdrag(0)<cr>
++    nmap <middlemouse>		<Plug>NetrwMiddlemouse
++    nno  <buffer> <silent>	<middlemouse>		<Plug>NetrwMiddlemouse <leftmouse>:call <SID>NetrwPrevWinOpen(0)<cr>
++    nmap <buffer> <s-leftmouse>	<Plug>NetrwSLeftmouse
++    nno  <buffer> <silent>	<Plug>NetrwSLeftmouse   <leftmouse>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
++    nmap <buffer> <2-leftmouse>	<Plug>Netrw2Leftmouse
++    nmap <buffer> <silent>	<Plug>Netrw2Leftmouse	-
++    imap <buffer> <leftmouse>	<Plug>ILeftmouse
++    ino  <buffer> <silent>	<Plug>ILeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwLeftmouse(0)<cr>
++    imap <buffer> <middlemouse>	<Plug>IMiddlemouse
++    ino  <buffer> <silent>	<Plug>IMiddlemouse	<c-o><leftmouse><c-o>:call <SID>NetrwPrevWinOpen(0)<cr>
++    imap <buffer> <s-leftmouse>	<Plug>ISLeftmouse
++    ino  <buffer> <silent>	<Plug>ISLeftmouse	<c-o><leftmouse><c-o>:call <SID>NetrwMarkFile(0,<SID>NetrwGetWord())<cr>
++    exe 'nnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++    exe 'vnoremap <buffer> <silent> <rightmouse> <leftmouse>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++    exe 'inoremap <buffer> <silent> <rightmouse> <c-o><leftmouse><c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   endif
++   exe 'nnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'nnoremap <buffer> <silent> d		:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
++   exe 'nnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'nnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'vnoremap <buffer> <silent> <del>	:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'vnoremap <buffer> <silent> D		:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'vnoremap <buffer> <silent> R		:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'inoremap <buffer> <silent> <del>	<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'inoremap <buffer> <silent> d		<c-o>:call <SID>NetrwMakeDir("'.mapsafeusermach.'")<cr>'
++   exe 'inoremap <buffer> <silent> D		<c-o>:call <SID>NetrwRemoteRm("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   exe 'inoremap <buffer> <silent> R		<c-o>:call <SID>NetrwRemoteRename("'.mapsafeusermach.'","'.mapsafepath.'")<cr>'
++   nnoremap <buffer> <F1>			:he netrw-quickhelp<cr>
++   inoremap <buffer> <F1>			<c-o>:he netrw-quickhelp<cr>
++  endif
+ 
+-  " delete all lines from buffer {{{3
+-"  call Decho("--delete all lines from buffer--")
+-"  call Decho("  clear buffer<".expand("%")."> with :%d")
+-  sil! keepalt keepj %d
++  keepj call s:SetRexDir(a:islocal,b:netrw_curdir)
+ 
+-"  call Dret("s:NetrwGetBuffer 0 : buf#".bufnr("%"))
+-  return 0
++"  call Dret("s:NetrwMaps")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" s:NetrwGetcwd: get the current directory. {{{2
+-"   Change backslashes to forward slashes, if any.
+-"   If doesc is true, escape certain troublesome characters
+-fun! s:NetrwGetcwd(doesc)
+-"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
+-  let curdir= substitute(getcwd(),'\\','/','ge')
+-  if curdir !~ '[\/]$'
+-   let curdir= curdir.'/'
+-  endif
+-  if a:doesc
+-   let curdir= fnameescape(curdir)
+-  endif
+-"  call Dret("NetrwGetcwd <".curdir.">")
+-  return curdir
++" s:ExplorePatHls: converts an Explore pattern into a regular expression search pattern {{{2
++fun! s:ExplorePatHls(pattern)
++"  call Dfunc("s:ExplorePatHls(pattern<".a:pattern.">)")
++  let repat= substitute(a:pattern,'^**/\{1,2}','','')
++"  call Decho("repat<".repat.">")
++  let repat= escape(repat,'][.\')
++"  call Decho("repat<".repat.">")
++  let repat= '\<'.substitute(repat,'\*','\\(\\S\\+ \\)*\\S\\+','g').'\>'
++"  call Dret("s:ExplorePatHls repat<".repat.">")
++  return repat
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
+-fun! s:NetrwGetWord()
+-"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
+-  call s:UseBufWinVars()
+-
+-  " insure that w:netrw_liststyle is set up
+-  if !exists("w:netrw_liststyle")
+-   if exists("g:netrw_liststyle")
+-    let w:netrw_liststyle= g:netrw_liststyle
+-   else
+-    let w:netrw_liststyle= s:THINLIST
+-   endif
+-"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
++"  s:NetrwBookHistHandler: {{{2
++"    0: (user: <mb>)   bookmark current directory
++"    1: (user: <gb>)   change to the bookmarked directory
++"    2: (user: <qb>)   list bookmarks
++"    3: (browsing)     record current directory history
++"    4: (user: <u>)    go up   (previous) bookmark
++"    5: (user: <U>)    go down (next)     bookmark
++"    6: (user: <mB>)   delete bookmark
++fun! s:NetrwBookHistHandler(chg,curdir)
++"  call Dfunc("s:NetrwBookHistHandler(chg=".a:chg." curdir<".a:curdir.">) cnt=".v:count." histcnt=".g:netrw_dirhist_cnt." histmax=".g:netrw_dirhistmax)
++  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
++"   "  call Dret("s:NetrwBookHistHandler - suppressed due to g:netrw_dirhistmax")
++   return
+   endif
+ 
+-  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
+-   " Active Banner support
+-"   call Decho("active banner handling")
+-   keepj norm! 0
+-   let dirname= "./"
+-   let curline= getline('.')
+-
+-   if curline =~ '"\s*Sorted by\s'
+-    keepj norm s
+-    let s:netrw_skipbrowse= 1
+-    echo 'Pressing "s" also works'
+-
+-   elseif curline =~ '"\s*Sort sequence:'
+-    let s:netrw_skipbrowse= 1
+-    echo 'Press "S" to edit sorting sequence'
+-
+-   elseif curline =~ '"\s*Quick Help:'
+-    keepj norm ?
+-    let s:netrw_skipbrowse= 1
+-    echo 'Pressing "?" also works'
+-
+-   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
+-    keepj norm a
+-    let s:netrw_skipbrowse= 1
+-    echo 'Pressing "a" also works'
+-
+-   elseif line("$") > w:netrw_bannercnt
+-    exe 'sil keepj '.w:netrw_bannercnt
++  let ykeep= @@
++  if a:chg == 0
++   " bookmark the current directory
++"   call Decho("(user: <b>) bookmark the current directory")
++   if !exists("g:netrw_bookmarklist")
++    let g:netrw_bookmarklist= []
+    endif
++   if index(g:netrw_bookmarklist,a:curdir) == -1
++    " curdir not currently in g:netrw_bookmarklist, so include it
++    call add(g:netrw_bookmarklist,a:curdir)
++    call sort(g:netrw_bookmarklist)
++   endif
++   echo "bookmarked the current directory"
+ 
+-  elseif w:netrw_liststyle == s:THINLIST
+-"   call Decho("thin column handling")
+-   keepj norm! 0
+-   let dirname= getline('.')
+-
+-  elseif w:netrw_liststyle == s:LONGLIST
+-"   call Decho("long column handling")
+-   keepj norm! 0
+-   let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
++  elseif a:chg == 1
++   " change to the bookmarked directory
++"   call Decho("(user: <".v:count."gb>) change to the bookmarked directory")
++   if exists("g:netrw_bookmarklist[v:count-1]")
++"    call Decho("(user: <".v:count."gb>) bookmarklist=".string(g:netrw_bookmarklist))
++    exe "keepj e ".fnameescape(g:netrw_bookmarklist[v:count-1])
++   else
++    echomsg "Sorry, bookmark#".v:count." doesn't exist!"
++   endif
+ 
+-  elseif w:netrw_liststyle == s:TREELIST
+-"   call Decho("treelist handling")
+-   let dirname= substitute(getline('.'),'^\(| \)*','','e')
++  elseif a:chg == 2
++"   redraw!
++   let didwork= 0
++   " list user's bookmarks
++"   call Decho("(user: <q>) list user's bookmarks")
++   if exists("g:netrw_bookmarklist")
++"    call Decho('list '.len(g:netrw_bookmarklist).' bookmarks')
++    let cnt= 1
++    for bmd in g:netrw_bookmarklist
++"     call Decho("Netrw Bookmark#".cnt.": ".g:netrw_bookmarklist[cnt-1])
++     echo printf("Netrw Bookmark#%-2d: %s",cnt,g:netrw_bookmarklist[cnt-1])
++     let didwork = 1
++     let cnt     = cnt + 1
++    endfor
++   endif
+ 
+-  else
+-"   call Decho("obtain word from wide listing")
+-   let dirname= getline('.')
++   " list directory history
++   let cnt     = g:netrw_dirhist_cnt
++   let first   = 1
++   let histcnt = 0
++   if g:netrw_dirhistmax > 0
++    while ( first || cnt != g:netrw_dirhist_cnt )
++"    call Decho("first=".first." cnt=".cnt." dirhist_cnt=".g:netrw_dirhist_cnt)
++     if exists("g:netrw_dirhist_{cnt}")
++"     call Decho("Netrw  History#".histcnt.": ".g:netrw_dirhist_{cnt})
++      echo printf("Netrw  History#%-2d: %s",histcnt,g:netrw_dirhist_{cnt})
++      let didwork= 1
++     endif
++     let histcnt = histcnt + 1
++     let first   = 0
++     let cnt     = ( cnt - 1 ) % g:netrw_dirhistmax
++     if cnt < 0
++      let cnt= cnt + g:netrw_dirhistmax
++     endif
++    endwhile
++   else
++    let g:netrw_dirhist_cnt= 0
++   endif
++   if didwork
++    call inputsave()|call input("Press <cr> to continue")|call inputrestore()
++   endif
+ 
+-   if !exists("b:netrw_cpf")
+-    let b:netrw_cpf= 0
+-    exe 'silent keepjumps '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+-    call histdel("/",-1)
+-"   call Decho("computed cpf=".b:netrw_cpf)
++  elseif a:chg == 3
++   " saves most recently visited directories (when they differ)
++"   call Decho("(browsing) record curdir history")
++   if !exists("g:netrw_dirhist_cnt") || !exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}") || g:netrw_dirhist_{g:netrw_dirhist_cnt} != a:curdir
++    if g:netrw_dirhistmax > 0
++     let g:netrw_dirhist_cnt                   = ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
++     let g:netrw_dirhist_{g:netrw_dirhist_cnt} = a:curdir
++    endif
++"    call Decho("save dirhist#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
+    endif
+ 
+-"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
+-   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
+-"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
+-"   call Decho("1: dirname<".dirname.">")
+-   if filestart == 0
+-    keepj norm! 0ma
++  elseif a:chg == 4
++   " u: change to the previous directory stored on the history list
++"   call Decho("(user: <u>) chg to prev dir from history")
++   if g:netrw_dirhistmax > 0
++    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - v:count1 ) % g:netrw_dirhistmax
++    if g:netrw_dirhist_cnt < 0
++     let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
++    endif
+    else
+-    call cursor(line("."),filestart+1)
+-    keepj norm! ma
++    let g:netrw_dirhist_cnt= 0
+    endif
+-   let rega= @a
+-   let eofname= filestart + b:netrw_cpf + 1
+-   if eofname <= col("$")
+-    call cursor(line("."),filestart+b:netrw_cpf+1)
+-    keepj norm! "ay`a
++   if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
++"    call Decho("changedir u#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
++    if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
++     setl ma noro
++"     call Decho("(NetrwBookHistHandler) setl ma noro")
++     sil! keepj %d
++     setl nomod
++"     call Decho("(NetrwBookHistHandler) setl nomod")
++"     call Decho("(NetrwBookHistHandler)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++    endif
++"    "    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
++    exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
+    else
+-    keepj norm! "ay$
++    if g:netrw_dirhistmax > 0
++     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + v:count1 ) % g:netrw_dirhistmax
++    else
++     let g:netrw_dirhist_cnt= 0
++    endif
++    echo "Sorry, no predecessor directory exists yet"
+    endif
+-   let dirname = @a
+-   let @a      = rega
+-"   call Decho("2: dirname<".dirname.">")
+-   let dirname= substitute(dirname,'\s\+$','','e')
+-"   call Decho("3: dirname<".dirname.">")
+-  endif
+-
+-  " symlinks are indicated by a trailing "@".  Remove it before further processing.
+-  let dirname= substitute(dirname,"@$","","")
+-
+-  " executables are indicated by a trailing "*".  Remove it before further processing.
+-  let dirname= substitute(dirname,"\*$","","")
+ 
+-"  call Dret("s:NetrwGetWord <".dirname.">")
+-  return dirname
+-endfun
++  elseif a:chg == 5
++   " U: change to the subsequent directory stored on the history list
++"   call Decho("(user: <U>) chg to next dir from history")
++   if g:netrw_dirhistmax > 0
++    let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt + 1 ) % g:netrw_dirhistmax
++    if exists("g:netrw_dirhist_{g:netrw_dirhist_cnt}")
++"    call Decho("changedir U#".g:netrw_dirhist_cnt."<".g:netrw_dirhist_{g:netrw_dirhist_cnt}.">")
++     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
++"      call Decho("(NetrwBookHistHandler) setl ma noro")
++      setl ma noro
++      sil! keepj %d
++"      call Decho("removed all lines from buffer (%d)")
++"      call Decho("(NetrwBookHistHandler) setl nomod")
++      setl nomod
++"      call Decho("(set nomod)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++     endif
++"    call Decho("exe e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt}))
++     exe "keepj e! ".fnameescape(g:netrw_dirhist_{g:netrw_dirhist_cnt})
++    else
++     let g:netrw_dirhist_cnt= ( g:netrw_dirhist_cnt - 1 ) % g:netrw_dirhistmax
++     if g:netrw_dirhist_cnt < 0
++      let g:netrw_dirhist_cnt= g:netrw_dirhist_cnt + g:netrw_dirhistmax
++     endif
++     echo "Sorry, no successor directory exists yet"
++    endif
++   else
++    let g:netrw_dirhist_cnt= 0
++    echo "Sorry, no successor directory exists yet (g:netrw_dirhistmax is ".g:netrw_dirhistmax.")"
++   endif
+ 
+-" ---------------------------------------------------------------------
+-" s:NetrwListSettings: make standard settings for a netrw listing {{{2
+-fun! s:NetrwListSettings(islocal)
+-"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
+-  let fname= bufname("%")
+-"  call Decho("setlocal bt=nofile nobl ma nonu nowrap noro")
+-  setlocal bt=nofile nobl ma nonu nowrap noro
+-"  call Decho("exe sil! keepalt file ".fnameescape(fname))
+-  exe "sil! keepalt file ".fnameescape(fname)
+-  if g:netrw_use_noswf
+-   setlocal noswf
+-  endif
+-"  call Dredir("ls!")
+-"  call Decho("exe setlocal ts=".g:netrw_maxfilenamelen)
+-  exe "setlocal ts=".g:netrw_maxfilenamelen
+-  setlocal isk+=.,~,-
+-  if g:netrw_fastbrowse > a:islocal
+-   setlocal bh=hide
+-  else
+-   setlocal bh=delete
++  elseif a:chg == 6
++   " delete the v:count'th bookmark
++"   call Decho("delete bookmark#".v:count."<".g:netrw_bookmarklist[v:count-1].">")
++   let savefile= s:NetrwHome()."/.netrwbook"
++   if filereadable(savefile)
++"    call Decho("merge bookmarks (active and file)")
++    keepj call s:NetrwBookHistSave() " done here to merge bookmarks first
++"    call Decho("bookmark delete savefile<".savefile.">")
++    keepj call delete(savefile)
++   endif
++"   call Decho("remove g:netrw_bookmarklist[".(v:count-1)."]")
++   keepj call remove(g:netrw_bookmarklist,v:count-1)
++"   call Decho("resulting g:netrw_bookmarklist=".string(g:netrw_bookmarklist))
+   endif
+-"  call Dret("s:NetrwListSettings")
++  call s:NetrwBookmarkMenu()
++  call s:NetrwTgtMenu()
++  let @@= ykeep
++"  call Dret("s:NetrwBookHistHandler")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-"  s:NetrwListStyle: {{{2
+-"  islocal=0: remote browsing
+-"         =1: local browsing
+-fun! s:NetrwListStyle(islocal)
+-"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
+-  let fname             = s:NetrwGetWord()
+-  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
+-  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
+-"  call Decho("fname<".fname.">")
+-"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
+-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
+-
+-  if w:netrw_liststyle == s:THINLIST
+-   " use one column listing
+-"   call Decho("use one column list")
+-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+-
+-  elseif w:netrw_liststyle == s:LONGLIST
+-   " use long list
+-"   call Decho("use long list")
+-   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
++" s:NetrwBookHistRead: this function reads bookmarks and history {{{2
++"                      Sister function: s:NetrwBookHistSave()
++fun! s:NetrwBookHistRead()
++"  call Dfunc("s:NetrwBookHistRead()")
++  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
++"   "  call Dret("s:NetrwBookHistRead - suppressed due to g:netrw_dirhistmax")
++   return
++  endif
++  let ykeep= @@
++  if !exists("s:netrw_initbookhist")
++   let home    = s:NetrwHome()
++   let savefile= home."/.netrwbook"
++   if filereadable(savefile)
++"    call Decho("sourcing .netrwbook")
++    exe "keepalt keepj so ".savefile
++   endif
++   if g:netrw_dirhistmax > 0
++    let savefile= home."/.netrwhist"
++    if filereadable(savefile)
++"    call Decho("sourcing .netrwhist")
++     exe "keepalt keepj so ".savefile
++    endif
++    let s:netrw_initbookhist= 1
++    au VimLeave * call s:NetrwBookHistSave()
++   endif
++  endif
++  let @@= ykeep
++"  call Dret("s:NetrwBookHistRead")
++endfun
+ 
+-  elseif w:netrw_liststyle == s:WIDELIST
+-   " give wide list
+-"   call Decho("use wide list")
+-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
++" ---------------------------------------------------------------------
++" s:NetrwBookHistSave: this function saves bookmarks and history {{{2
++"                      Sister function: s:NetrwBookHistRead()
++"                      I used to do this via viminfo but that appears to
++"                      be unreliable for long-term storage
++fun! s:NetrwBookHistSave()
++"  call Dfunc("s:NetrwBookHistSave() dirhistmax=".g:netrw_dirhistmax)
++  if !exists("g:netrw_dirhistmax") || g:netrw_dirhistmax <= 0
++"   call Dret("s:NetrwBookHistSave : dirhistmax=".g:netrw_dirhistmax)
++   return
++  endif
+ 
+-  elseif w:netrw_liststyle == s:TREELIST
+-"   call Decho("use tree list")
+-   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
++  let savefile= s:NetrwHome()."/.netrwhist"
++  1split
++  call s:NetrwEnew()
++  setl cino= com= cpo-=a cpo-=A fo=nroql2 tw=0 report=10000 noswf
++  setl nocin noai noci magic nospell nohid wig= noaw
++  setl ma noro write
++  if exists("+acd") | setl noacd | endif
++  sil! keepj keepalt %d
+ 
+-  else
+-   call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
+-   let g:netrw_liststyle = s:THINLIST
+-   let w:netrw_liststyle = g:netrw_liststyle
+-   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
+-  endif
+-  setlocal ma noro
+-"  call Decho("setlocal ma noro")
++  " save .netrwhist -- no attempt to merge
++  sil! keepalt file .netrwhist
++  call setline(1,"let g:netrw_dirhistmax  =".g:netrw_dirhistmax)
++  call setline(2,"let g:netrw_dirhist_cnt =".g:netrw_dirhist_cnt)
++  let lastline = line("$")
++  let cnt      = 1
++  while cnt <= g:netrw_dirhist_cnt
++   call setline((cnt+lastline),'let g:netrw_dirhist_'.cnt."='".g:netrw_dirhist_{cnt}."'")
++   let cnt= cnt + 1
++  endwhile
++  exe "sil! w! ".savefile
+ 
+-  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
+-"  call Decho("clear buffer<".expand("%")."> with :%d")
+-  sil! keepj %d
+-  " following prevents tree listing buffer from being marked "modified"
+-  setlocal nomod
++  sil keepj %d
++  if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
++   " merge and write .netrwbook
++   let savefile= s:NetrwHome()."/.netrwbook"
+ 
+-  " refresh the listing
+-"  call Decho("refresh the listing")
+-  let svpos= netrw#NetrwSavePosn()
+-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
+-  call s:NetrwCursorline()
++   if filereadable(savefile)
++    let booklist= deepcopy(g:netrw_bookmarklist)
++    exe "sil keepj keepalt so ".savefile
++    for bdm in booklist
++     if index(g:netrw_bookmarklist,bdm) == -1
++      call add(g:netrw_bookmarklist,bdm)
++     endif
++    endfor
++    call sort(g:netrw_bookmarklist)
++    exe "sil! w! ".savefile
++   endif
+ 
+-  " keep cursor on the filename
+-  sil! keepj $
+-  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+-"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+-  if result <= 0 && exists("w:netrw_bannercnt")
+-   exe "sil! keepj ".w:netrw_bannercnt
++   " construct and save .netrwbook
++   call setline(1,"let g:netrw_bookmarklist= ".string(g:netrw_bookmarklist))
++   exe "sil! w! ".savefile
+   endif
++  let bgone= bufnr("%")
++  q!
++  exe "keepalt ".bgone."bwipe!"
+ 
+-"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
++"  call Dret("s:NetrwBookHistSave")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" s:NetrwBannerCtrl: toggles the display of the banner {{{2
+-fun! s:NetrwBannerCtrl(islocal)
+-"  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
+-
+-  " toggle the banner (enable/suppress)
+-  let g:netrw_banner= !g:netrw_banner
++" s:NetrwBrowse: This function uses the command in g:netrw_list_cmd to provide a {{{2
++"  list of the contents of a local or remote directory.  It is assumed that the
++"  g:netrw_list_cmd has a string, USEPORT HOSTNAME, that needs to be substituted
++"  with the requested remote hostname first.
++fun! s:NetrwBrowse(islocal,dirname)
++  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
++"  call Dfunc("s:NetrwBrowse(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".w:netrw_liststyle." ".g:loaded_netrw." buf#".bufnr("%")."<".bufname("%")."> win#".winnr())
++"  call Decho("(NetrwBrowse) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")." modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
++  " s:NetrwBrowse: initialize history {{{3
++  if !exists("s:netrw_initbookhist")
++   keepj call s:NetrwBookHistRead()
++  endif
+ 
+-  " refresh the listing
+-  let svpos= netrw#NetrwSavePosn()
+-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  " s:NetrwBrowse: simplify the dirname (especially for ".."s in dirnames) {{{3
++  if a:dirname !~ '^\a\+://'
++   let dirname= simplify(a:dirname)
++  else
++   let dirname= a:dirname
++  endif
+ 
+-  " keep cursor on the filename
+-  let fname= s:NetrwGetWord()
+-  sil keepj $
+-  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
+-"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
+-  if result <= 0 && exists("w:netrw_bannercnt")
+-   exe "keepj ".w:netrw_bannercnt
++  if exists("s:netrw_skipbrowse")
++   unlet s:netrw_skipbrowse
++"   call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"   call Dret("s:NetrwBrowse : s:netrw_skipbrowse=".s:netrw_skipbrowse)
++   return
+   endif
+-"  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
+-endfun
+ 
+-" ---------------------------------------------------------------------
+-" s:NetrwBookmarkMenu: Uses menu priorities {{{2
+-"                      .2.[cnt] for bookmarks, and
+-"                      .3.[cnt] for history
+-"                      (see s:NetrwMenu())
+-fun! s:NetrwBookmarkMenu()
+-  if !exists("s:netrw_menucnt")
++  " s:NetrwBrowse: sanity checks: {{{3
++  if !exists("*shellescape")
++   keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing shellescape()",69)
++"   call Dret("s:NetrwBrowse : missing shellescape()")
++   return
++  endif
++  if !exists("*fnameescape")
++   keepj call netrw#ErrorMsg(s:ERROR,"netrw can't run -- your vim is missing fnameescape()",70)
++"   call Dret("s:NetrwBrowse : missing fnameescape()")
+    return
+   endif
+-"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
+ 
+-  " the following test assures that gvim is running, has menus available, and has menus enabled.
+-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+-   if exists("g:NetrwTopLvlMenu")
+-"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
+-    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
+-    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
+-   endif
+-   if !exists("s:netrw_initbookhist")
+-    call s:NetrwBookHistRead()
+-   endif
++  " s:NetrwBrowse: save options: {{{3
++  call s:NetrwOptionSave("w:")                                                                                                            
+ 
+-   " show bookmarked places
+-   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != []
+-    let cnt= 1
+-    for bmd in g:netrw_bookmarklist
+-"     call Decho('silent! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.bmd.'	:e '.bmd)
+-     let bmd= escape(bmd,g:netrw_menu_escape)
++  " s:NetrwBrowse: re-instate any marked files {{{3
++  if exists("s:netrwmarkfilelist_{bufnr('%')}")
++"   call Decho("(NetrwBrowse) clearing marked files")
++   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
++  endif
+ 
+-     " show bookmarks for goto menu
+-     exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.bmd.'	:e '.bmd."\<cr>"
++  if a:islocal && exists("w:netrw_acdkeep") && w:netrw_acdkeep
++   " s:NetrwBrowse: set up "safe" options for local directory/file {{{3
++"   call Decho("(NetrwBrowse) handle w:netrw_acdkeep:")
++"   call Decho("(NetrwBrowse) keepjumps lcd ".fnameescape(dirname)." (due to w:netrw_acdkeep=".w:netrw_acdkeep." - acd=".&acd.")")
++   exe 'keepj lcd '.fnameescape(dirname)
++   call s:NetrwSafeOptions()
++"   call Decho("(NetrwBrowse) getcwd<".getcwd().">")
+ 
+-     " show bookmarks for deletion menu
+-     exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.bmd.'	'.cnt."mB"
+-     let cnt= cnt + 1
+-    endfor
++  elseif !a:islocal && dirname !~ '[\/]$' && dirname !~ '^"'
++   " s:NetrwBrowse: looks like a remote regular file, attempt transfer {{{3
++"   call Decho("(NetrwBrowse) attempt transfer as regular file<".dirname.">")
++
++   " remove any filetype indicator from end of dirname, except for the
++   " "this is a directory" indicator (/).
++   " There shouldn't be one of those here, anyway.
++   let path= substitute(dirname,'[*=@|]\r\=$','','e')
++"   call Decho("(NetrwBrowse) new path<".path.">")
++   call s:RemotePathAnalysis(dirname)
+ 
++   " s:NetrwBrowse: remote-read the requested file into current buffer {{{3
++   keepj mark '
++   call s:NetrwEnew(dirname)
++   call s:NetrwSafeOptions()
++   setl ma noro
++"   call Decho("(NetrwBrowse) setl ma noro")
++   let b:netrw_curdir = dirname
++   let url            = s:method."://".s:user.s:machine.(s:port ? ":".s:port : "")."/".s:path
++"   call Decho("(NetrwBrowse) exe sil! keepalt file ".fnameescape(url)." (bt=".&bt.")")
++   exe "sil! keepj keepalt file ".fnameescape(url)
++   exe "sil! keepj keepalt doau BufReadPre ".fnameescape(s:fname)
++   sil call netrw#NetRead(2,url)
++   if s:path !~ '.tar.bz2$' && s:path !~ '.tar.gz' && s:path !~ '.tar.xz' && s:path !~ '.txz'
++    " netrw.vim and tar.vim have already handled decompression of the tarball; avoiding gzip.vim error
++    exe "sil keepj keepalt doau BufReadPost ".fnameescape(s:fname)
+    endif
+ 
+-   " show directory browsing history
+-   let cnt     = g:netrw_dirhist_cnt
+-   let first   = 1
+-   let histcnt = 0
+-   while ( first || cnt != g:netrw_dirhist_cnt )
+-    let histcnt  = histcnt + 1
+-    let priority = g:netrw_dirhist_cnt + histcnt
+-    if exists("g:netrw_dirhist_{cnt}")
+-     let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape)
+-"     call Decho('silent! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir)
+-     exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir."\<cr>"
+-    endif
+-    let first = 0
+-    let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
+-    if cnt < 0
+-     let cnt= cnt + g:netrw_dirhistmax
+-    endif
+-   endwhile
++   " s:NetrwBrowse: save certain window-oriented variables into buffer-oriented variables {{{3
++   call s:SetBufWinVars()
++   call s:NetrwOptionRestore("w:")
++"   call Decho("(NetrwBrowse) setl ma nomod")
++   setl ma nomod
++"   call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+ 
++"   call Dret("s:NetrwBrowse : file<".s:fname.">")
++   return
+   endif
+-"  call Dret("NetrwBookmarkMenu")
+-endfun
+ 
+-" ---------------------------------------------------------------------
+-"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
+-"                       directory and a new directory name.  Also, if the
+-"                       "new directory name" is actually a file,
+-"                       NetrwBrowseChgDir() edits the file.
+-fun! s:NetrwBrowseChgDir(islocal,newdir,...)
+-"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
++  " use buffer-oriented WinVars if buffer variables exist but associated window variables don't {{{3
++  call s:UseBufWinVars()
+ 
+-  if !exists("b:netrw_curdir")
+-   " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
+-   " and the current window is the NetrwMessage window.
+-"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
+-"   call Decho("getcwd<".getcwd().">")
+-"   call Dredir("ls!")
+-"   call Dret("s:NetrwBrowseChgDir")
+-   return
+-  endif
++  " set up some variables {{{3
++  let b:netrw_browser_active = 1
++  let dirname                = dirname
++  let s:last_sort_by         = g:netrw_sort_by
+ 
+-  call s:NetrwOptionSave("s:")
+-  call s:NetrwSafeOptions()
+-  let nbcd_curpos                = netrw#NetrwSavePosn()
+-  let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
+-  if (has("win32") || has("win95") || has("win64") || has("win16"))
+-   let dirname                   = substitute(b:netrw_curdir,'\\','/','ge')
+-  else
+-   let dirname= b:netrw_curdir
+-  endif
+-  let newdir    = a:newdir
+-  let dolockout = 0
++  " set up menu {{{3
++  keepj call s:NetrwMenu(1)
+ 
+-  " set up o/s-dependent directory recognition pattern
+-  if has("amiga")
+-   let dirpat= '[\/:]$'
++  " get/set-up buffer {{{3
++  let reusing= s:NetrwGetBuffer(a:islocal,dirname)
++  " maintain markfile highlighting
++  if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
++"   call Decho("(NetrwBrowse) bufnr(%)=".bufnr('%'))
++"   call Decho("(NetrwBrowse) exe 2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/")
++   exe "2match netrwMarkFile /".s:netrwmarkfilemtch_{bufnr("%")}."/"
+   else
+-   let dirpat= '[\/]$'
++"   call Decho("(NetrwBrowse) 2match none")
++   2match none
+   endif
+-"  call Decho("dirname<".dirname.">  dirpat<".dirpat.">")
+-
+-  if dirname !~ dirpat
+-   " apparently vim is "recognizing" that it is in a directory and
+-   " is removing the trailing "/".  Bad idea, so I put it back.
+-   let dirname= dirname.'/'
+-"   call Decho("adjusting dirname<".dirname.">")
++  if reusing && line("$") > 1
++   call s:NetrwOptionRestore("w:")
++"   call Decho("(NetrwBrowse) setl noma nomod nowrap")
++   setl noma nomod nowrap
++"   call Decho("(NetrwBrowse) (set noma nomod nowrap)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"   call Dret("s:NetrwBrowse : re-using buffer")
++   return
+   endif
+ 
+-  if newdir !~ dirpat
+-   " ------------
+-   " edit a file:
+-   " ------------
+-"   call Decho('case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
+-    let dirname= s:NetrwTreeDir()
+-    if dirname =~ '/$'
+-     let dirname= dirname.newdir
+-    else
+-     let dirname= s:NetrwTreeDir()."/".newdir
+-    endif
+-"    call Decho("dirname<".dirname.">")
+-"    call Decho("tree listing")
+-   elseif newdir =~ '^\(/\|\a:\)'
+-    let dirname= newdir
++  " set b:netrw_curdir to the new directory name {{{3
++"  call Decho("(NetrwBrowse) set b:netrw_curdir to the new directory name:  (buf#".bufnr("%").")")
++  let b:netrw_curdir= dirname
++  if b:netrw_curdir =~ '[/\\]$'
++   let b:netrw_curdir= substitute(b:netrw_curdir,'[/\\]$','','e')
++  endif
++  if b:netrw_curdir == ''
++   if has("amiga")
++    " On the Amiga, the empty string connotes the current directory
++    let b:netrw_curdir= getcwd()
+    else
+-    let dirname= s:ComposePath(dirname,newdir)
++    " under unix, when the root directory is encountered, the result
++    " from the preceding substitute is an empty string.
++    let b:netrw_curdir= '/'
+    endif
+-"   call Decho("handling a file: dirname<".dirname."> (a:0=".a:0.")")
+-   " this lets NetrwBrowseX avoid the edit
+-   if a:0 < 1
+-"    call Decho("set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
+-    call s:NetrwOptionRestore("s:")
+-    if !exists("s:didsplit")
+-     if     g:netrw_browse_split == 1
+-      new
+-      if !&ea
+-       wincmd _
+-      endif
+-     elseif g:netrw_browse_split == 2
+-      rightb vert new
+-      if !&ea
+-       wincmd |
+-      endif
+-     elseif g:netrw_browse_split == 3
+-      tabnew
+-     elseif g:netrw_browse_split == 4
+-      if s:NetrwPrevWinOpen(2) == 3
+-"       call Dret("s:NetrwBrowseChgDir")
++  endif
++  if !a:islocal && b:netrw_curdir !~ '/$'
++   let b:netrw_curdir= b:netrw_curdir.'/'
++  endif
++"  call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir.">")
++
++  " ------------
++  " (local only) {{{3
++  " ------------
++  if a:islocal
++"   call Decho("(NetrwBrowse) local only:")
++
++   " Set up ShellCmdPost handling.  Append current buffer to browselist
++   call s:LocalFastBrowser()
++
++  " handle g:netrw_keepdir: set vim's current directory to netrw's notion of the current directory {{{3
++   if !g:netrw_keepdir
++"    call Decho("(NetrwBrowse) handle g:netrw_keepdir=".g:netrw_keepdir.": getcwd<".getcwd()."> acd=".&acd)
++"    call Decho("(NetrwBrowse) l:acd".(exists("&l:acd")? "=".&l:acd : " doesn't exist"))
++    if !exists("&l:acd") || !&l:acd
++"     call Decho('exe keepjumps lcd '.fnameescape(b:netrw_curdir))
++     try
++      exe 'keepj lcd '.fnameescape(b:netrw_curdir)
++     catch /^Vim\%((\a\+)\)\=:E472/
++      call netrw#ErrorMsg(s:ERROR,"unable to change directory to <".b:netrw_curdir."> (permissions?)",61)
++      if exists("w:netrw_prvdir")
++       let b:netrw_curdir= w:netrw_prvdir
++      else
++       call s:NetrwOptionRestore("w:")
++"       call Decho("(NetrwBrowse) setl noma nomod nowrap")
++       setl noma nomod nowrap
++"       call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++       let b:netrw_curdir= dirname
++"       call Dret("s:NetrwBrowse : reusing buffer#".(exists("bufnum")? bufnum : 'N/A')."<".dirname."> getcwd<".getcwd().">")
+        return
+       endif
+-     else
+-      " handling a file, didn't split, so remove menu
+-"      call Decho("handling a file+didn't split, so remove menu")
+-      call s:NetrwMenu(0)
+-      " optional change to window
+-      if g:netrw_chgwin >= 1
+-       exe "keepjumps ".g:netrw_chgwin."wincmd w"
+-      endif
+-     endif
++     endtry
+     endif
++   endif
+ 
+-    " the point where netrw actually edits the (local) file
+-    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
+-    if a:islocal
+-"     call Decho("edit local file: exe e! ".fnameescape(dirname))
+-     exe "e! ".fnameescape(dirname)
+-    else
+-"     call Decho("remote file: NetrwBrowse will edit it")
+-    endif
+-    let dolockout= 1
++  " --------------------------------
++  " remote handling: {{{3
++  " --------------------------------
++  else
++"   call Decho("(NetrwBrowse) remote only:")
+ 
+-    " handle g:Netrw_funcref -- call external-to-netrw functions
+-    "   This code will handle g:Netrw_funcref as an individual function reference
+-    "   or as a list of function references.  It will ignore anything that's not
+-    "   a function reference.  See  :help Funcref  for information about function references.
+-    if exists("g:Netrw_funcref")
+-"     call Decho("handle optional Funcrefs")
+-     if type(g:Netrw_funcref) == 2
+-"      call Decho("handling a g:Netrw_funcref")
+-      call g:Netrw_funcref()
+-     elseif type(g:Netrw_funcref) == 3
+-"      call Decho("handling a list of g:Netrw_funcrefs")
+-      for Fncref in g:Netrw_funcref
+-       if type(FncRef) == 2
+-        call FncRef()
+-       endif
+-      endfor
+-     endif
++   " analyze dirname and g:netrw_list_cmd {{{3
++"   call Decho("(NetrwBrowse) b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist")."> dirname<".dirname.">")
++   if dirname =~ "^NetrwTreeListing\>"
++    let dirname= b:netrw_curdir
++"    call Decho("(NetrwBrowse) (dirname was <NetrwTreeListing>) dirname<".dirname.">")
++   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir")
++    let dirname= substitute(b:netrw_curdir,'\\','/','g')
++    if dirname !~ '/$'
++     let dirname= dirname.'/'
+     endif
++    let b:netrw_curdir = dirname
++"    call Decho("(NetrwBrowse) (liststyle is TREELIST) dirname<".dirname.">")
++   else
++    let dirname = substitute(dirname,'\\','/','g')
++"    call Decho("(NetrwBrowse) (normal) dirname<".dirname.">")
+    endif
+ 
+-  elseif newdir =~ '^/'
+-   " ---------------------------------
+-   " just go to the new directory spec
+-   " ---------------------------------
+-"   call Decho('case "just go to new directory spec": newdir<'.newdir.'>')
+-   let dirname= newdir
+-   call s:SetRexDir(a:islocal,dirname)
+-   call s:NetrwOptionRestore("s:")
++   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/]\+\)/\(.*\)$'
++   if dirname !~ dirpat
++    if !exists("g:netrw_quiet")
++     keepj call netrw#ErrorMsg(s:ERROR,"netrw doesn't understand your dirname<".dirname.">",20)
++    endif
++    keepj call s:NetrwOptionRestore("w:")
++"    call Decho("(NetrwBrowse) setl noma nomod nowrap")
++    setl noma nomod nowrap
++"    call Decho("(NetrwBrowse)  ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"    call Dret("s:NetrwBrowse : badly formatted dirname<".dirname.">")
++    return
++   endif
++   let b:netrw_curdir= dirname
++"   call Decho("(NetrwBrowse) b:netrw_curdir<".b:netrw_curdir."> (remote)")
++  endif  " (additional remote handling)
+ 
+-  elseif newdir == './'
+-   " --------------------------
+-   " refresh the directory list
+-   " --------------------------
+-"   call Decho('case "refresh directory listing": newdir == "./"')
+-   call s:SetRexDir(a:islocal,dirname)
++  " -----------------------
++  " Directory Listing: {{{3
++  " -----------------------
++  keepj call s:NetrwMaps(a:islocal)
++  keepj call s:PerformListing(a:islocal)
++  if v:version >= 700 && has("balloon_eval") && &beval == 0 && &l:bexpr == "" && !exists("g:netrw_nobeval")
++   let &l:bexpr= "netrw#NetrwBalloonHelp()"
++"   call Decho("(NetrwBrowse) set up balloon help: l:bexpr=".&l:bexpr)
++   set beval
++  endif
++  call s:NetrwOptionRestore("w:")
+ 
+-  elseif newdir == '../'
+-   " -------------------
+-   " go up one directory
+-   " -------------------
+-"   call Decho('case "go up one directory": newdir == "../"')
++  " The s:LocalBrowseShellCmdRefresh() function is called by an autocmd
++  " installed by s:LocalFastBrowser() when g:netrw_fastbrowse <= 1 (ie. slow, medium speed).
++  " However, s:NetrwBrowse() causes the ShellCmdPost event itself to fire once; setting
++  " the variable below avoids that second refresh of the screen.  The s:LocalBrowseShellCmdRefresh()
++  " function gets called due to that autocmd; it notices that the following variable is set
++  " and skips the refresh and sets s:locbrowseshellcmd to zero. Oct 13, 2008
++  let s:locbrowseshellcmd= 1
+ 
+-   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+-    " force a refresh
+-"    call Decho("clear buffer<".expand("%")."> with :%d")
+-    setlocal noro ma
+-"    call Decho("setlocal noro ma")
+-    keepj %d
+-   endif
++"  call Decho("(NetrwBrowse) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"  call Dret("s:NetrwBrowse : did PerformListing  ft<".&ft.">")
++  return
++endfun
+ 
+-   if has("amiga")
+-    " amiga
+-"    call Decho('case "go up one directory": newdir == "../" and amiga')
+-    if a:islocal
+-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
+-     let dirname= substitute(dirname,'/$','','')
++" ---------------------------------------------------------------------
++" s:NetrwFileInfo: supports qf (query for file information) {{{2
++fun! s:NetrwFileInfo(islocal,fname)
++"  call Dfunc("s:NetrwFileInfo(islocal=".a:islocal." fname<".a:fname.">)")
++  let ykeep= @@
++  if a:islocal
++   if (has("unix") || has("macunix")) && executable("/bin/ls")
++    if exists("b:netrw_curdir")
++"     call Decho('using ls with b:netrw_curdir<'.b:netrw_curdir.'>')
++     if b:netrw_curdir =~ '/$'
++      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir.a:fname))
++     else
++      echo system("/bin/ls -lsad ".shellescape(b:netrw_curdir."/".a:fname))
++     endif
+     else
+-     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
++"     call Decho('using ls '.a:fname." using cwd<".getcwd().">")
++     echo system("/bin/ls -lsad ".shellescape(a:fname))
+     endif
+-"    call Decho("amiga: dirname<".dirname."> (go up one dir)")
+-
+    else
+-    " unix or cygwin
+-"    call Decho('case "go up one directory": newdir == "../" and unix or cygwin')
+-    if a:islocal
+-     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
+-     if dirname == ""
+-      let dirname= '/'
+-     endif
++    " use vim functions to return information about file below cursor
++"    call Decho("using vim functions to query for file info")
++    if !isdirectory(a:fname) && !filereadable(a:fname) && a:fname =~ '[*@/]'
++     let fname= substitute(a:fname,".$","","")
+     else
+-     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
++     let fname= a:fname
+     endif
+-"    call Decho("unix: dirname<".dirname."> (go up one dir)")
++    let t  = getftime(fname)
++    let sz = getfsize(fname)
++    echo a:fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname))
++"    call Decho(fname.":  ".sz."  ".strftime(g:netrw_timefmt,getftime(fname)))
+    endif
+-   call s:SetRexDir(a:islocal,dirname)
++  else
++   echo "sorry, \"qf\" not supported yet for remote files"
++  endif
++  let @@= ykeep
++"  call Dret("s:NetrwFileInfo")
++endfun
+ 
+-  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+-"   call Decho('case liststyle is TREELIST and w:netrw_treedict exists')
+-   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
+-   setlocal noro ma
+-"   call Decho("setlocal noro ma")
+-   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
+-"    call Decho("clear buffer<".expand("%")."> with :%d")
+-    keepj %d
++" ---------------------------------------------------------------------
++" s:NetrwGetBuffer: {{{2
++"   returns 0=cleared buffer
++"           1=re-used buffer
++fun! s:NetrwGetBuffer(islocal,dirname)
++"  call Dfunc("s:NetrwGetBuffer(islocal=".a:islocal." dirname<".a:dirname.">) liststyle=".g:netrw_liststyle)
++"  call Decho("(NetrwGetBuffer) modiable=".&mod." modifiable=".&ma." readonly=".&ro)
++  let dirname= a:dirname
++
++  " re-use buffer if possible {{{3
++"  call Decho("(NetrwGetBuffer) --re-use a buffer if possible--")
++  if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
++   " find NetrwTreeList buffer if there is one
++"   call Decho("(NetrwGetBuffer) case liststyle=treelist: find NetrwTreeList buffer if there is one")
++   if exists("w:netrw_treebufnr") && w:netrw_treebufnr > 0
++"    call Decho("(NetrwGetBuffer)   re-using w:netrw_treebufnr=".w:netrw_treebufnr)
++    setl mod
++    sil! keepj %d
++    let eikeep= &ei
++    set ei=all
++    exe "sil! keepalt b ".w:netrw_treebufnr
++    let &ei= eikeep
++"    call Dret("s:NetrwGetBuffer 0<buffer cleared> : bufnum#".w:netrw_treebufnr."<NetrwTreeListing>")
++    return 0
+    endif
+-   let treedir      = s:NetrwTreeDir()
+-   let s:treecurpos = nbcd_curpos
+-   let haskey= 0
+-"   call Decho("w:netrw_treedict<".string(w:netrw_treedict).">")
++   let bufnum= -1
++"   call Decho("(NetrwGetBuffer)   liststyle=TREE but w:netrw_treebufnr doesn't exist")
+ 
+-   " search treedict for tree dir as-is
+-   if has_key(w:netrw_treedict,treedir)
+-"    call Decho('....searched for treedir<'.treedir.'> : found it!')
+-    let haskey= 1
+-   else
+-"    call Decho('....searched for treedir<'.treedir.'> : not found')
++  else
++   " find buffer number of buffer named precisely the same as dirname {{{3
++"   call Decho("(NetrwGetBuffer) case listtyle not treelist: find buffer numnber of buffer named precisely the same as dirname--")
++
++   " get dirname and associated buffer number
++   let bufnum  = bufnr(escape(dirname,'\'))
++"   call Decho("(NetrwGetBuffer)   find buffer<".dirname.">'s number ")
++"   call Decho("(NetrwGetBuffer)   bufnr(dirname<".escape(dirname,'\').">)=".bufnum)
++
++   if bufnum < 0 && dirname !~ '/$'
++    " try appending a trailing /
++"    call Decho("(NetrwGetBuffer)   try appending a trailing / to dirname<".dirname.">")
++    let bufnum= bufnr(escape(dirname.'/','\'))
++    if bufnum > 0
++     let dirname= dirname.'/'
++    endif
+    endif
+ 
+-   " search treedict for treedir with a / appended
+-   if !haskey && treedir !~ '/$'
+-    if has_key(w:netrw_treedict,treedir."/")
+-     let treedir= treedir."/"
+-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
+-     let haskey = 1
++   if bufnum < 0 && dirname =~ '/$'
++    " try removing a trailing /
++"    call Decho("(NetrwGetBuffer)   try removing a trailing / from dirname<".dirname.">")
++    let bufnum= bufnr(escape(substitute(dirname,'/$','',''),'\'))
++    if bufnum > 0
++     let dirname= substitute(dirname,'/$','','')
++    endif
++   endif
++
++"   call Decho("(NetrwGetBuffer)   findbuf1: bufnum=bufnr('".dirname."')=".bufnum." bufname(".bufnum.")<".bufname(bufnum)."> (initial)")
++   " note: !~ was used just below, but that means using ../ to go back would match (ie. abc/def/  and abc/ matches)
++   if bufnum > 0 && bufname(bufnum) != dirname && bufname(bufnum) != '.'
++    " handle approximate matches
++"    call Decho("(NetrwGetBuffer)   handling approx match: bufnum#".bufnum.">0 AND bufname<".bufname(bufnum).">!=dirname<".dirname."> AND bufname(".bufnum.")!='.'")
++    let ibuf    = 1
++    let buflast = bufnr("$")
++"    call Decho("(NetrwGetBuffer)   findbuf2: buflast=bufnr($)=".buflast)
++    while ibuf <= buflast
++     let bname= substitute(bufname(ibuf),'\\','/','g')
++     let bname= substitute(bname,'.\zs/$','','')
++"     call Decho("(NetrwGetBuffer)   findbuf3: while [ibuf=",ibuf."]<=[buflast=".buflast."]: dirname<".dirname."> bname=bufname(".ibuf.")<".bname.">")
++     if bname != '' && dirname =~ '/'.bname.'/\=$' && dirname !~ '^/'
++      " bname is not empty
++      " dirname ends with bname,
++      " dirname doesn't start with /, so its not a absolute path
++"      call Decho("(NetrwGetBuffer)   findbuf3a: passes test 1 : dirname<".dirname.'> =~ /'.bname.'/\=$ && dirname !~ ^/')
++      break
++     endif
++     if bname =~ '^'.dirname.'/\=$'
++      " bname begins with dirname
++"      call Decho('  findbuf3b: passes test 2 : bname<'.bname.'>=~^'.dirname.'/\=$')
++      break
++     endif
++     if dirname =~ '^'.bname.'/$'
++"      call Decho('  findbuf3c: passes test 3 : dirname<'.dirname.'>=~^'.bname.'/$')
++      break
++     endif
++     if bname != '' && dirname =~ '/'.bname.'$' && bname == bufname("%") && line("$") == 1
++"      call Decho('  findbuf3d: passes test 4 : dirname<'.dirname.'>=~ /'.bname.'$')
++      break
++     endif
++     let ibuf= ibuf + 1
++    endwhile
++    if ibuf > buflast
++     let bufnum= -1
+     else
+-"     call Decho('....searched for treedir<'.treedir.'/> : not found')
++     let bufnum= ibuf
+     endif
++"    call Decho("(NetrwGetBuffer)   findbuf4: bufnum=".bufnum." (ibuf=".ibuf." buflast=".buflast.")")
+    endif
++  endif
+ 
+-   " search treedict for treedir with any trailing / elided
+-   if !haskey && treedir =~ '/$'
+-    let treedir= substitute(treedir,'/$','','')
+-    if has_key(w:netrw_treedict,treedir)
+-"     call Decho('....searched.for treedir<'.treedir.'> found it!')
+-     let haskey = 1
++  " get enew buffer and name it -or- re-use buffer {{{3
++"  call Decho("(NetrwGetBuffer)   get enew buffer and name it OR re-use buffer")
++  sil! keepj keepalt mark '
++  if bufnum < 0 || !bufexists(bufnum)
++"   call Decho("(NetrwGetBuffer) --get enew buffer and name it  (bufnum#".bufnum."<0 OR bufexists(".bufnum.")=".bufexists(bufnum)."==0)")
++   call s:NetrwEnew(dirname)
++"   call Decho("(NetrwGetBuffer)   got enew buffer#".bufnr("%")." (altbuf<".expand("#").">)")
++   " name the buffer
++   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
++    " Got enew buffer; transform into a NetrwTreeListing
++"    call Decho("(NetrwGetBuffer) --transform enew buffer#".bufnr("%")." into a NetrwTreeListing --")
++    if !exists("s:netrw_treelistnum")
++     let s:netrw_treelistnum= 1
+     else
+-"     call Decho('....searched for treedir<'.treedir.'> : not found')
++     let s:netrw_treelistnum= s:netrw_treelistnum + 1
+     endif
++    let w:netrw_treebufnr= bufnr("%")
++"    call Decho("(NetrwGetBuffer)   exe sil! keepalt file NetrwTreeListing ".fnameescape(s:netrw_treelistnum))
++    exe 'sil! keepalt file NetrwTreeListing\ '.fnameescape(s:netrw_treelistnum)
++    set bt=nofile noswf
++    nnoremap <silent> <buffer> [	:sil call <SID>TreeListMove('[')<cr>
++    nnoremap <silent> <buffer> ]	:sil call <SID>TreeListMove(']')<cr>
++    nnoremap <silent> <buffer> [[       :sil call <SID>TreeListMove('[')<cr>
++    nnoremap <silent> <buffer> ]]       :sil call <SID>TreeListMove(']')<cr>
++"    call Decho("(NetrwGetBuffer)   tree listing#".s:netrw_treelistnum." bufnr=".w:netrw_treebufnr)
++   else
++"    let v:errmsg= "" " Decho
++    let escdirname= fnameescape(dirname)
++"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(escdirname<".escdirname.">)=".bufnr(escdirname)." bufname()<".bufname(bufnr(escdirname)).">")
++"    call Decho('  exe sil! keepalt file '.escdirname)
++"    let v:errmsg= "" " Decho
++    exe 'sil! keepalt file '.escdirname
++"    call Decho("(NetrwGetBuffer)   errmsg<".v:errmsg."> bufnr(".escdirname.")=".bufnr(escdirname)."<".bufname(bufnr(escdirname)).">")
+    endif
++"   call Decho("(NetrwGetBuffer)   named enew buffer#".bufnr("%")."<".bufname("%").">")
+ 
+-   if haskey
+-    " close tree listing for selected subdirectory
+-"    call Decho("closing selected subdirectory<".dirname.">")
+-    call remove(w:netrw_treedict,treedir)
+-"    call Decho("removed     entry<".treedir."> from treedict")
+-"    call Decho("yielding treedict<".string(w:netrw_treedict).">")
+-    let dirname= w:netrw_treetop
++  else " Re-use the buffer
++"   call Decho("(NetrwGetBuffer) --re-use buffer#".bufnum." (bufnum#".bufnum.">=0 AND bufexists(".bufnum.")=".bufexists(bufnum)."!=0)")
++   let eikeep= &ei
++   set ei=all
++   if getline(2) =~ '^" Netrw Directory Listing'
++"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> matches "Netrw Directory Listing" : using keepalt b '.bufnum)
++    exe "sil! keepalt b ".bufnum
+    else
+-    " go down one directory
+-    let dirname= substitute(treedir,'/*$','/','')
+-"    call Decho("go down one dir: treedir<".treedir.">")
++"    call Decho("(NetrwGetBuffer)   getline(2)<".getline(2).'> does not match "Netrw Directory Listing" : using b '.bufnum)
++    exe "sil! keepalt b ".bufnum
+    endif
+-   call s:SetRexDir(a:islocal,dirname)
+-   let s:treeforceredraw = 1
+-
+-  else
+-   " go down one directory
+-   let dirname= s:ComposePath(dirname,newdir)
+-"   call Decho("go down one dir: dirname<".dirname."> newdir<".newdir.">")
+-   call s:SetRexDir(a:islocal,dirname)
+-  endif
+-
+-  call s:NetrwOptionRestore("s:")
+-  if dolockout
+-"   call Decho("filewritable(dirname<".dirname.">)=".filewritable(dirname))
+-   if filewritable(dirname)
+-"    call Decho("doing modification lockout settings: ma nomod noro")
+-    setlocal ma nomod noro
++   if bufname("%") == '.'
++"    call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(getcwd()))
++    exe "sil! keepalt file ".fnameescape(getcwd())
++   endif
++   let &ei= eikeep
++   if line("$") <= 1
++    keepj call s:NetrwListSettings(a:islocal)
++"    call Dret("s:NetrwGetBuffer 0<buffer empty> : re-using buffer#".bufnr("%").", but its empty, so refresh it")
++    return 0
++   elseif g:netrw_fastbrowse == 0 || (a:islocal && g:netrw_fastbrowse == 1)
++    keepj call s:NetrwListSettings(a:islocal)
++    sil keepj %d
++"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but refreshing due to g:netrw_fastbrowse=".g:netrw_fastbrowse)
++    return 0
++   elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
++"    call Decho("(NetrwGetBuffer) --re-use tree listing--")
++"    call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
++    sil keepj %d
++    keepj call s:NetrwListSettings(a:islocal)
++"    call Dret("s:NetrwGetBuffer 0<cleared buffer> : re-using buffer#".bufnr("%").", but treelist mode always needs a refresh")
++    return 0
+    else
+-"    call Decho("doing modification lockout settings: ma nomod ro")
+-    setlocal ma nomod ro
++"    call Dret("s:NetrwGetBuffer 1<buffer not cleared> : buf#".bufnr("%"))
++    return 1
+    endif
+-"   call Decho("setlocal ma nomod noro")
+   endif
+ 
+-"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
+-  return dirname
++  " do netrw settings: make this buffer not-a-file, modifiable, not line-numbered, etc {{{3
++  "     fastbrowse  Local  Remote   Hiding a buffer implies it may be re-used (fast)
++  "  slow   0         D      D      Deleting a buffer implies it will not be re-used (slow)
++  "  med    1         D      H
++  "  fast   2         H      H
++"  call Decho("(NetrwGetBuffer) --do netrw settings: make this buffer#".bufnr("%")." not-a-file, modifiable, not line-numbered, etc--")
++  let fname= expand("%")
++  keepj call s:NetrwListSettings(a:islocal)
++"  call Decho("(NetrwGetBuffer) exe sil! keepalt file ".fnameescape(fname))
++  exe "sil! keepj keepalt file ".fnameescape(fname)
++
++  " delete all lines from buffer {{{3
++"  call Decho("(NetrwGetBuffer) --delete all lines from buffer--")
++"  call Decho("(NetrwGetBuffer)   clear buffer<".expand("%")."> with :%d")
++  sil! keepalt keepj %d
++
++"  call Dret("s:NetrwGetBuffer 0<cleared buffer> : tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
++  return 0
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" s:NetrwBrowseX:  (implements "x") executes a special "viewer" script or program for the {{{2
+-"              given filename; typically this means given their extension.
+-"              0=local, 1=remote
+-fun! netrw#NetrwBrowseX(fname,remote)
+-"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
+-
+-  " special core dump handler
+-  if a:fname =~ '/core\(\.\d\+\)\=$'
+-   if exists("g:Netrw_corehandler")
+-    if type(g:Netrw_corehandler) == 2
+-     " g:Netrw_corehandler is a function reference (see :help Funcref)
+-"     call Decho("g:Netrw_corehandler is a funcref")
+-     call g:Netrw_corehandler(a:fname)
+-    elseif type(g:netrw_corehandler) == 3)
+-     " g:Netrw_corehandler is a List of function references (see :help Funcref)
+-"     call Decho("g:Netrw_corehandler is a List")
+-     for Fncref in g:Netrw_corehandler
+-      if type(FncRef) == 2
+-       call FncRef(a:fname)
+-      endif
+-     endfor
+-    endif
+-"    call Dret("NetrwBrowseX : coredump handler invoked")
+-    return
+-   endif
++" s:NetrwGetcwd: get the current directory. {{{2
++"   Change backslashes to forward slashes, if any.
++"   If doesc is true, escape certain troublesome characters
++fun! s:NetrwGetcwd(doesc)
++"  call Dfunc("NetrwGetcwd(doesc=".a:doesc.")")
++  let curdir= substitute(getcwd(),'\\','/','ge')
++  if curdir !~ '[\/]$'
++   let curdir= curdir.'/'
+   endif
+-
+-  " set up the filename
+-  " (lower case the extension, make a local copy of a remote file)
+-  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
+-  if has("win32") || has("win95") || has("win64") || has("win16")
+-   let exten= substitute(exten,'^.*$','\L&\E','')
++  if a:doesc
++   let curdir= fnameescape(curdir)
+   endif
+-"  call Decho("exten<".exten.">")
++"  call Dret("NetrwGetcwd <".curdir.">")
++  return curdir
++endfun
+ 
+-  " seems kde systems often have gnome-open due to dependencies, even though
+-  " gnome-open's subsidiary display tools are largely absent.  Kde systems
+-  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
+-  if !exists("s:haskdeinit")
+-   if has("unix")
+-    let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
+-    if v:shell_error
+-     let s:haskdeinit = 0
+-    endif
++" ---------------------------------------------------------------------
++"  s:NetrwGetWord: it gets the directory/file named under the cursor {{{2
++fun! s:NetrwGetWord()
++"  call Dfunc("s:NetrwGetWord() line#".line(".")." liststyle=".g:netrw_liststyle." virtcol=".virtcol("."))
++  call s:UseBufWinVars()
++
++  " insure that w:netrw_liststyle is set up
++  if !exists("w:netrw_liststyle")
++   if exists("g:netrw_liststyle")
++    let w:netrw_liststyle= g:netrw_liststyle
+    else
+-    let s:haskdeinit= 0
++    let w:netrw_liststyle= s:THINLIST
+    endif
+-"   call Decho("setting s:haskdeinit=".s:haskdeinit)
++"   call Decho("w:netrw_liststyle=".w:netrw_liststyle)
+   endif
+ 
+-  if a:remote == 1
+-   " create a local copy
+-"   call Decho("a:remote=".a:remote.": create a local copy of <".a:fname.">")
+-   setlocal bh=delete
+-   call netrw#NetRead(3,a:fname)
+-   " attempt to rename tempfile
+-   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
+-   let newname= substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
+-"   call Decho("basename<".basename.">")
+-"   call Decho("newname <".newname.">")
+-   if rename(s:netrw_tmpfile,newname) == 0
+-    " renaming succeeded
+-    let fname= newname
+-   else
+-    " renaming failed
+-    let fname= s:netrw_tmpfile
++  if exists("w:netrw_bannercnt") && line(".") < w:netrw_bannercnt
++   " Active Banner support
++"   call Decho("active banner handling")
++   keepj norm! 0
++   let dirname= "./"
++   let curline= getline('.')
++
++   if curline =~ '"\s*Sorted by\s'
++    keepj norm s
++    let s:netrw_skipbrowse= 1
++    echo 'Pressing "s" also works'
++
++   elseif curline =~ '"\s*Sort sequence:'
++    let s:netrw_skipbrowse= 1
++    echo 'Press "S" to edit sorting sequence'
++
++   elseif curline =~ '"\s*Quick Help:'
++    keepj norm ?
++    let s:netrw_skipbrowse= 1
++    echo 'Pressing "?" also works'
++
++   elseif curline =~ '"\s*\%(Hiding\|Showing\):'
++    keepj norm a
++    let s:netrw_skipbrowse= 1
++    echo 'Pressing "a" also works'
++
++   elseif line("$") > w:netrw_bannercnt
++    exe 'sil keepj '.w:netrw_bannercnt
+    endif
++
++  elseif w:netrw_liststyle == s:THINLIST
++"   call Decho("thin column handling")
++   keepj norm! 0
++   let dirname= getline('.')
++
++  elseif w:netrw_liststyle == s:LONGLIST
++"   call Decho("long column handling")
++   keepj norm! 0
++   let dirname= substitute(getline('.'),'^\(\%(\S\+ \)*\S\+\).\{-}$','\1','e')
++
++  elseif w:netrw_liststyle == s:TREELIST
++"   call Decho("treelist handling")
++   let dirname= substitute(getline('.'),'^\(| \)*','','e')
++
+   else
+-   let fname= a:fname
+-   " special ~ handler for local
+-   if fname =~ '^\~' && expand("$HOME") != ""
+-"    call Decho('invoking special ~ handler')
+-    let fname= substitute(fname,'^\~',expand("$HOME"),'')
++"   call Decho("obtain word from wide listing")
++   let dirname= getline('.')
++
++   if !exists("b:netrw_cpf")
++    let b:netrw_cpf= 0
++    exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
++    call histdel("/",-1)
++"   call Decho("computed cpf=".b:netrw_cpf)
+    endif
+-  endif
+-"  call Decho("fname<".fname.">")
+-"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
+ 
+-  " set up redirection
+-  if &srr =~ "%s"
+-   if (has("win32") || has("win95") || has("win64") || has("win16"))
+-    let redir= substitute(&srr,"%s","nul","")
++"   call Decho("buf#".bufnr("%")."<".bufname("%").">")
++   let filestart = (virtcol(".")/b:netrw_cpf)*b:netrw_cpf
++"   call Decho("filestart= ([virtcol=".virtcol(".")."]/[b:netrw_cpf=".b:netrw_cpf."])*b:netrw_cpf=".filestart."  bannercnt=".w:netrw_bannercnt)
++"   call Decho("1: dirname<".dirname.">")
++   if filestart == 0
++    keepj norm! 0ma
+    else
+-    let redir= substitute(&srr,"%s","/dev/null","")
++    call cursor(line("."),filestart+1)
++    keepj norm! ma
+    endif
+-  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
+-   let redir= &srr . "nul"
+-  else
+-   let redir= &srr . "/dev/null"
+-  endif
+-"  call Decho("redir{".redir."} srr{".&srr."}")
+-
+-  " extract any viewing options.  Assumes that they're set apart by quotes.
+-  if exists("g:netrw_browsex_viewer")
+-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+-   if g:netrw_browsex_viewer =~ '\s'
+-    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
+-    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
+-    let oviewer = ''
+-    let cnt     = 1
+-    while !executable(viewer) && viewer != oviewer
+-     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
+-     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
+-     let cnt     = cnt + 1
+-     let oviewer = viewer
+-"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
+-    endwhile
++   let rega= @a
++   let eofname= filestart + b:netrw_cpf + 1
++   if eofname <= col("$")
++    call cursor(line("."),filestart+b:netrw_cpf+1)
++    keepj norm! "ay`a
+    else
+-    let viewer  = g:netrw_browsex_viewer
+-    let viewopt = ""
++    keepj norm! "ay$
+    endif
+-"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
++   let dirname = @a
++   let @a      = rega
++"   call Decho("2: dirname<".dirname.">")
++   let dirname= substitute(dirname,'\s\+$','','e')
++"   call Decho("3: dirname<".dirname.">")
+   endif
+ 
+-  " execute the file handler
+-  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
+-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+-   let ret= netrwFileHandlers#Invoke(exten,fname)
++  " symlinks are indicated by a trailing "@".  Remove it before further processing.
++  let dirname= substitute(dirname,"@$","","")
+ 
+-  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
+-"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
+-"   call Decho("exe silent !".viewer." ".viewopt.shellescape(fname,1).redir)
+-   exe "silent !".viewer." ".viewopt.shellescape(fname,1).redir
+-   let ret= v:shell_error
++  " executables are indicated by a trailing "*".  Remove it before further processing.
++  let dirname= substitute(dirname,"\*$","","")
++
++"  call Dret("s:NetrwGetWord <".dirname.">")
++  return dirname
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwListSettings: make standard settings for a netrw listing {{{2
++fun! s:NetrwListSettings(islocal)
++"  call Dfunc("s:NetrwListSettings(islocal=".a:islocal.")")
++  let fname= bufname("%")
++"  call Decho("(NetrwListSettings) setl bt=nofile nobl ma nonu nowrap noro")
++  setl bt=nofile nobl ma nonu nowrap noro
++"  call Decho("(NetrwListSettings) exe sil! keepalt file ".fnameescape(fname))
++  exe "sil! keepalt file ".fnameescape(fname)
++  if g:netrw_use_noswf
++   setl noswf
++  endif
++"  call Decho("(NetrwListSettings) exe setl ts=".(g:netrw_maxfilenamelen+1))
++  exe "setl ts=".(g:netrw_maxfilenamelen+1)
++  setl isk+=.,~,-
++  if g:netrw_fastbrowse > a:islocal
++   setl bh=hide
++  else
++   setl bh=delete
++  endif
++"  call Dret("s:NetrwListSettings")
++endfun
++
++" ---------------------------------------------------------------------
++"  s:NetrwListStyle: {{{2
++"  islocal=0: remote browsing
++"         =1: local browsing
++fun! s:NetrwListStyle(islocal)
++"  call Dfunc("NetrwListStyle(islocal=".a:islocal.") w:netrw_liststyle=".w:netrw_liststyle)
++  let ykeep             = @@
++  let fname             = s:NetrwGetWord()
++  if !exists("w:netrw_liststyle")|let w:netrw_liststyle= g:netrw_liststyle|endif
++  let w:netrw_liststyle = (w:netrw_liststyle + 1) % s:MAXLIST
++"  call Decho("fname<".fname.">")
++"  call Decho("chgd w:netrw_liststyle to ".w:netrw_liststyle)
++"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "doesn't exist").">")
+ 
+-  elseif has("win32") || has("win64")
+-   if executable("start")
+-"    call Decho('exe silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+-    exe 'silent !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+-   elseif executable("rundll32")
+-"    call Decho('exe silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
+-    exe 'silent !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
+-   else
+-    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
+-   endif
+-   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+-   let ret= v:shell_error
++  if w:netrw_liststyle == s:THINLIST
++   " use one column listing
++"   call Decho("use one column list")
++   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+ 
+-  elseif has("unix") && executable("gnome-open") && !s:haskdeinit
+-"   call Decho("exe silent !gnome-open ".shellescape(fname,1)." ".redir)
+-   exe "sil !gnome-open ".shellescape(fname,1).redir
+-   let ret= v:shell_error
++  elseif w:netrw_liststyle == s:LONGLIST
++   " use long list
++"   call Decho("use long list")
++   let g:netrw_list_cmd = g:netrw_list_cmd." -l"
+ 
+-  elseif has("unix") && executable("kfmclient") && s:haskdeinit
+-"   call Decho("exe silent !kfmclient exec ".shellescape(fname,1)." ".redir)
+-   exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
+-   let ret= v:shell_error
++  elseif w:netrw_liststyle == s:WIDELIST
++   " give wide list
++"   call Decho("use wide list")
++   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+ 
+-  elseif has("macunix") && executable("open")
+-"   call Decho("exe silent !open ".shellescape(fname,1)." ".redir)
+-   exe "sil !open ".shellescape(fname,1)." ".redir
+-   let ret= v:shell_error
++  elseif w:netrw_liststyle == s:TREELIST
++"   call Decho("use tree list")
++   let g:netrw_list_cmd = substitute(g:netrw_list_cmd,' -l','','ge')
+ 
+   else
+-   " netrwFileHandlers#Invoke() always returns 0
+-   let ret= netrwFileHandlers#Invoke(exten,fname)
+-  endif
+-
+-  " if unsuccessful, attempt netrwFileHandlers#Invoke()
+-  if ret
+-   let ret= netrwFileHandlers#Invoke(exten,fname)
++   keepj call netrw#ErrorMsg(s:WARNING,"bad value for g:netrw_liststyle (=".w:netrw_liststyle.")",46)
++   let g:netrw_liststyle = s:THINLIST
++   let w:netrw_liststyle = g:netrw_liststyle
++   let g:netrw_list_cmd  = substitute(g:netrw_list_cmd,' -l','','ge')
+   endif
++  setl ma noro
++"  call Decho("setl ma noro")
+ 
+-  " restoring redraw! after external file handlers
+-  redraw!
++  " clear buffer - this will cause NetrwBrowse/LocalBrowseCheck to do a refresh
++"  call Decho("clear buffer<".expand("%")."> with :%d")
++  sil! keepj %d
++  " following prevents tree listing buffer from being marked "modified"
++"  call Decho("(NetrwListStyle) setl nomod")
++  setl nomod
++"  call Decho("(NetrwListStyle) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+ 
+-  " cleanup: remove temporary file,
+-  "          delete current buffer if success with handler,
+-  "          return to prior buffer (directory listing)
+-  "          Feb 12, 2008: had to de-activiate removal of
+-  "          temporary file because it wasn't getting seen.
+-"  if a:remote == 1 && fname != a:fname
+-"   call Decho("deleting temporary file<".fname.">")
+-"   call s:NetrwDelete(fname)
+-"  endif
++  " refresh the listing
++"  call Decho("(NetrwListStyle) refresh the listing")
++  let svpos= netrw#NetrwSavePosn()
++  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
++  keepj call s:NetrwCursor()
+ 
+-  if a:remote == 1
+-   setlocal bh=delete bt=nofile
+-   if g:netrw_use_noswf
+-    setlocal noswf
+-   endif
+-   exe "keepj norm! \<c-o>"
+-"   redraw!
++  " keep cursor on the filename
++  sil! keepj $
++  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
++"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
++  if result <= 0 && exists("w:netrw_bannercnt")
++   exe "sil! keepj ".w:netrw_bannercnt
+   endif
++  let @@= ykeep
+ 
+-"  call Dret("NetrwBrowseX")
++"  call Dret("NetrwListStyle".(exists("w:netrw_liststyle")? ' : w:netrw_liststyle='.w:netrw_liststyle : ""))
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" s:NetrwChgPerm: (implements "gp") change file permission {{{2
+-fun! s:NetrwChgPerm(islocal,curdir)
+-"  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
+-  call inputsave()
+-  let newperm= input("Enter new permission: ")
+-  call inputrestore()
+-  let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'')
+-  let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'')
+-"  call Decho("chgperm<".chgperm.">")
+-  call system(chgperm)
+-  if v:shell_error != 0
+-   call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75)
+-  endif
+-  if a:islocal
+-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-  endif
+-"  call Dret("s:NetrwChgPerm")
+-endfun
++" s:NetrwBannerCtrl: toggles the display of the banner {{{2
++fun! s:NetrwBannerCtrl(islocal)
++"  call Dfunc("s:NetrwBannerCtrl(islocal=".a:islocal.") g:netrw_banner=".g:netrw_banner)
+ 
+-" ---------------------------------------------------------------------
+-" s:NetrwClearExplore: clear explore variables (if any) {{{2
+-fun! s:NetrwClearExplore()
+-"  call Dfunc("s:NetrwClearExplore()")
+-  2match none
+-  if exists("s:explore_match")        |unlet s:explore_match        |endif
+-  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
+-  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
+-  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
+-  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
+-  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
+-  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
+-  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
+-  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
+-"   redraw!
+-  echo " "
+-  echo " "
+-"  call Dret("s:NetrwClearExplore")
++  let ykeep= @@
++  " toggle the banner (enable/suppress)
++  let g:netrw_banner= !g:netrw_banner
++
++  " refresh the listing
++  let svpos= netrw#NetrwSavePosn()
++  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++
++  " keep cursor on the filename
++  let fname= s:NetrwGetWord()
++  sil keepj $
++  let result= search('\%(^\%(|\+\s\)\=\|\s\{2,}\)\zs'.escape(fname,'.\[]*$^').'\%(\s\{2,}\|$\)','bc')
++"  call Decho("search result=".result." w:netrw_bannercnt=".(exists("w:netrw_bannercnt")? w:netrw_bannercnt : 'N/A'))
++  if result <= 0 && exists("w:netrw_bannercnt")
++   exe "keepj ".w:netrw_bannercnt
++  endif
++  let @@= ykeep
++"  call Dret("s:NetrwBannerCtrl : g:netrw_banner=".g:netrw_banner)
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" netrw#Explore: launch the local browser in the directory of the current file {{{2
+-"          indx:  == -1: Nexplore
+-"                 == -2: Pexplore
+-"                 ==  +: this is overloaded:
+-"                      * If Nexplore/Pexplore is in use, then this refers to the
+-"                        indx'th item in the w:netrw_explore_list[] of items which
+-"                        matched the */pattern **/pattern *//pattern **//pattern
+-"                      * If Hexplore or Vexplore, then this will override
+-"                        g:netrw_winsize to specify the qty of rows or columns the
+-"                        newly split window should have.
+-"          dosplit==0: the window will be split iff the current file has been modified
+-"          dosplit==1: the window will be split before running the local browser
+-"          style == 0: Explore     style == 1: Explore!
+-"                == 2: Hexplore    style == 3: Hexplore!
+-"                == 4: Vexplore    style == 5: Vexplore!
+-"                == 6: Texplore
+-fun! netrw#Explore(indx,dosplit,style,...)
+-"  call Dfunc("netrw#Explore(indx=".a:indx." dosplit=".a:dosplit." style=".a:style.",a:1<".a:1.">) &modified=".&modified." a:0=".a:0)
+-  if !exists("b:netrw_curdir")
+-   let b:netrw_curdir= getcwd()
+-"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
++" s:NetrwBookmarkMenu: Uses menu priorities {{{2
++"                      .2.[cnt] for bookmarks, and
++"                      .3.[cnt] for history
++"                      (see s:NetrwMenu())
++fun! s:NetrwBookmarkMenu()
++  if !exists("s:netrw_menucnt")
++   return
+   endif
+-  let curdir     = simplify(b:netrw_curdir)
+-  let curfiledir = substitute(expand("%:p"),'^\(.*[/\\]\)[^/\\]*$','\1','e')
+-"  call Decho("curdir<".curdir.">  curfiledir<".curfiledir.">")
+-
+-  " save registers
+-  sil! let keepregstar = @*
+-  sil! let keepregplus = @+
+-  sil! let keepregslash= @/
++"  call Dfunc("NetrwBookmarkMenu()  histcnt=".g:netrw_dirhist_cnt." menucnt=".s:netrw_menucnt)
+ 
+-  " if dosplit or file has been modified
+-  if a:dosplit || &modified || a:style == 6
+-"   call Decho("case dosplit=".a:dosplit." modified=".&modified." a:style=".a:style.": dosplit or file has been modified")
+-   call s:SaveWinVars()
+-   let winsize= g:netrw_winsize
+-   if a:indx > 0
+-    let winsize= a:indx
++  " the following test assures that gvim is running, has menus available, and has menus enabled.
++  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
++   if exists("g:NetrwTopLvlMenu")
++"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
++    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks'
++    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete'
++   endif
++   if !exists("s:netrw_initbookhist")
++    call s:NetrwBookHistRead()
+    endif
+ 
+-   if a:style == 0      " Explore, Sexplore
+-"    call Decho("style=0: Explore or Sexplore")
+-    exe winsize."wincmd s"
++   " show bookmarked places
++   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
++    let cnt= 1
++    for bmd in g:netrw_bookmarklist
++     let ebmd= escape(bmd,g:netrw_menu_escape)
++"     call Decho('sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmark.'.ebmd.'	:e '.bmd)
+ 
+-   elseif a:style == 1  "Explore!, Sexplore!
+-"    call Decho("style=1: Explore! or Sexplore!")
+-    exe winsize."wincmd v"
++     " show bookmarks for goto menu
++     exe 'sil! menu '.g:NetrwMenuPriority.".2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks.'.ebmd.'	:e '.bmd."\<cr>"
+ 
+-   elseif a:style == 2  " Hexplore
+-"    call Decho("style=2: Hexplore")
+-    exe "bel ".winsize."wincmd s"
++     " show bookmarks for deletion menu
++     exe 'sil! menu '.g:NetrwMenuPriority.".8.2.".cnt." ".g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Delete.'.ebmd.'	'.cnt."mB"
++     let cnt= cnt + 1
++    endfor
+ 
+-   elseif a:style == 3  " Hexplore!
+-"    call Decho("style=3: Hexplore!")
+-    exe "abo ".winsize."wincmd s"
++   endif
+ 
+-   elseif a:style == 4  " Vexplore
+-"    call Decho("style=4: Vexplore")
+-    exe "lefta ".winsize."wincmd v"
++   " show directory browsing history
++   if g:netrw_dirhistmax > 0
++    let cnt     = g:netrw_dirhist_cnt
++    let first   = 1
++    let histcnt = 0
++    while ( first || cnt != g:netrw_dirhist_cnt )
++     let histcnt  = histcnt + 1
++     let priority = g:netrw_dirhist_cnt + histcnt
++     if exists("g:netrw_dirhist_{cnt}")
++      let histdir= escape(g:netrw_dirhist_{cnt},g:netrw_menu_escape)
++"     call Decho('sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir)
++      exe 'sil! menu '.g:NetrwMenuPriority.".3.".priority." ".g:NetrwTopLvlMenu.'History.'.histdir.'	:e '.histdir."\<cr>"
++     endif
++     let first = 0
++     let cnt   = ( cnt - 1 ) % g:netrw_dirhistmax
++     if cnt < 0
++      let cnt= cnt + g:netrw_dirhistmax
++     endif
++    endwhile
++   endif
+ 
+-   elseif a:style == 5  " Vexplore!
+-"    call Decho("style=5: Vexplore!")
+-    exe "rightb ".winsize."wincmd v"
++  endif
++"  call Dret("NetrwBookmarkMenu")
++endfun
+ 
+-   elseif a:style == 6  " Texplore
+-    call s:SaveBufVars()
+-"    call Decho("style  = 6: Texplore")
+-    tabnew
+-    call s:RestoreBufVars()
+-   endif
+-   call s:RestoreWinVars()
+-"  else " Decho
+-"   call Decho("case a:dosplit=".a:dosplit." AND modified=".&modified." AND a:style=".a:style." is not 6")
++" ---------------------------------------------------------------------
++"  s:NetrwBrowseChgDir: constructs a new directory based on the current {{{2
++"                       directory and a new directory name.  Also, if the
++"                       "new directory name" is actually a file,
++"                       NetrwBrowseChgDir() edits the file.
++fun! s:NetrwBrowseChgDir(islocal,newdir,...)
++"  call Dfunc("s:NetrwBrowseChgDir(islocal=".a:islocal."> newdir<".a:newdir.">) a:0=".a:0." curpos<".string(getpos("."))."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "").">")
++
++  let ykeep= @@
++  if !exists("b:netrw_curdir")
++   " Don't try to change-directory: this can happen, for example, when netrw#ErrorMsg has been called
++   " and the current window is the NetrwMessage window.
++   let @@= ykeep
++"   call Decho("(NetrwBrowseChgDir) b:netrw_curdir doesn't exist!")
++"   call Decho("(NetrwBrowseChgDir) getcwd<".getcwd().">")
++"   call Dret("s:NetrwBrowseChgDir")
++   return
+   endif
+-  keepj norm! 0
+ 
+-  if a:0 > 0
+-"   call Decho("case [a:0=".a:0."] > 0: a:1<".a:1.">")
+-   if a:1 =~ '^\~' && (has("unix") || (exists("g:netrw_cygwin") && g:netrw_cygwin))
+-"    call Decho("case a:1: ~ and unix or cygwin")
+-    let dirname= simplify(substitute(a:1,'\~',expand("$HOME"),''))
+-"    call Decho("using dirname<".dirname.">  (case: ~ && unix||cygwin)")
+-   elseif a:1 == '.'
+-"    call Decho("case a:1: .")
+-    let dirname= simplify(exists("b:netrw_curdir")? b:netrw_curdir : getcwd())
+-    if dirname !~ '/$'
+-     let dirname= dirname."/"
+-    endif
+-"    call Decho("using dirname<".dirname.">  (case: ".(exists("b:netrw_curdir")? "b:netrw_curdir" : "getcwd()").")")
+-   elseif a:1 =~ '\$'
+-"    call Decho("case a:1: $")
+-    let dirname= simplify(expand(a:1))
+-"    call Decho("using user-specified dirname<".dirname."> with $env-var")
+-   elseif a:1 !~ '^\*/'
+-"    call Decho("case a:1: other, not pattern or filepattern")
+-    let dirname= simplify(a:1)
+-"    call Decho("using user-specified dirname<".dirname.">")
+-   else
+-"    call Decho("case a:1: pattern or filepattern")
+-    let dirname= a:1
+-   endif
++  " NetrwBrowseChgDir: save options and initialize {{{3
++  keepj call s:NetrwOptionSave("s:")
++  keepj call s:NetrwSafeOptions()
++  let nbcd_curpos                = netrw#NetrwSavePosn()
++  let s:nbcd_curpos_{bufnr('%')} = nbcd_curpos
++"  call Decho("(NetrwBrowseChgDir) setting s:nbcd_curpos_".bufnr('%')." to SavePosn")
++  if (has("win32") || has("win95") || has("win64") || has("win16"))
++   let dirname                   = substitute(b:netrw_curdir,'\\','/','ge')
+   else
+-   " clear explore
+-"   call Decho("case a:0=".a:0.": clearing Explore list")
+-   call s:NetrwClearExplore()
+-"   call Dret("netrw#Explore : cleared list")
+-   return
++   let dirname= b:netrw_curdir
++  endif
++  let newdir    = a:newdir
++  let dolockout = 0
++
++  " set up o/s-dependent directory recognition pattern
++  if has("amiga")
++   let dirpat= '[\/:]$'
++  else
++   let dirpat= '[\/]$'
++  endif
++"  call Decho("(NetrwBrowseChgDir) dirname<".dirname.">  dirpat<".dirpat.">")
++
++  if dirname !~ dirpat
++   " apparently vim is "recognizing" that it is in a directory and
++   " is removing the trailing "/".  Bad idea, so let's put it back.
++   let dirname= dirname.'/'
++"   call Decho("(NetrwBrowseChgDir) adjusting dirname<".dirname.">")
+   endif
+ 
+-"  call Decho("dirname<".dirname.">")
+-  if dirname =~ '\.\./\=$'
+-   let dirname= simplify(fnamemodify(dirname,':p:h'))
+-  elseif dirname =~ '\.\.' || dirname == '.'
+-   let dirname= simplify(fnamemodify(dirname,':p'))
+-  endif
+-"  call Decho("dirname<".dirname.">  (after simplify)")
++  if newdir !~ dirpat
++   " ------------------------------
++   " NetrwBrowseChgDir: edit a file {{{3
++   " ------------------------------
++"   call Decho('(NetrwBrowseChgDir:edit-a-file) case "handling a file": newdir<'.newdir.'> !~ dirpat<'.dirpat.">")
+ 
+-  if dirname =~ '/\*\*/'
+-   " handle .../**/.../filepat
+-"   call Decho("case Explore .../**/.../filepat")
+-   let prefixdir= substitute(dirname,'^\(.\{-}\)\*\*.*$','\1','')
+-   if prefixdir =~ '^/' || (prefixdir =~ '^\a:/' && (has("win32") || has("win95") || has("win64") || has("win16")))
+-    let b:netrw_curdir = prefixdir
++   " save position for benefit of Rexplore
++   let s:rexposn_{bufnr("%")}= netrw#NetrwSavePosn()
++
++"   call Decho("(NetrwBrowseChgDir:edit-a-file) setting s:rexposn_".bufnr("%")." to SavePosn")
++   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict") && newdir !~ '^\(/\|\a:\)'
++    let dirname= s:NetrwTreeDir()
++    if dirname =~ '/$'
++     let dirname= dirname.newdir
++    else
++     let dirname= s:NetrwTreeDir()."/".newdir
++    endif
++"    call Decho("(NetrwBrowseChgDir:edit-a-file) dirname<".dirname.">")
++"    call Decho("(NetrwBrowseChgDir:edit-a-file) tree listing")
++   elseif newdir =~ '^\(/\|\a:\)'
++    let dirname= newdir
+    else
+-    let b:netrw_curdir= getcwd().'/'.prefixdir
++    let dirname= s:ComposePath(dirname,newdir)
+    endif
+-   let dirname= substitute(dirname,'^.\{-}\(\*\*/.*\)$','\1','')
+-   let starpat= 4;
+-"   call Decho("pwd<".getcwd()."> dirname<".dirname.">")
+-"   call Decho("case Explore ../**/../filepat (starpat=".starpat.")")
++"   call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file: dirname<".dirname."> (a:0=".a:0.")")
++   " this lets NetrwBrowseX avoid the edit
++   if a:0 < 1
++"    call Decho("(NetrwBrowseChgDir:edit-a-file) set up windows for editing<".fnameescape(dirname).">  didsplit=".(exists("s:didsplit")? s:didsplit : "doesn't exist"))
++    keepj call s:NetrwOptionRestore("s:")
++    if !exists("s:didsplit")
++"     call Decho("(NetrwBrowseChgDir:edit-a-file) s:didsplit does not exist; g:netrw_browse_split=".g:netrw_browse_split." win#".winnr())
++     if     g:netrw_browse_split == 1
++      " horizontally splitting the window first
++      keepalt new
++      if !&ea
++       keepalt wincmd _
++      endif
++     elseif g:netrw_browse_split == 2
++      " vertically splitting the window first
++      keepalt rightb vert new
++      if !&ea
++       keepalt wincmd |
++      endif
++     elseif g:netrw_browse_split == 3
++      " open file in new tab
++      keepalt tabnew
++     elseif g:netrw_browse_split == 4
++      " act like "P" (ie. open previous window)
++      if s:NetrwPrevWinOpen(2) == 3
++       let @@= ykeep
++"       call Dret("s:NetrwBrowseChgDir")
++       return
++      endif
++     else
++      " handling a file, didn't split, so remove menu
++"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a file+didn't split, so remove menu")
++      call s:NetrwMenu(0)
++      " optional change to window
++      if g:netrw_chgwin >= 1
++       exe "keepj keepalt ".g:netrw_chgwin."wincmd w"
++      endif
++     endif
++    endif
+ 
+-  elseif dirname =~ '^\*//'
+-   " starpat=1: Explore *//pattern   (current directory only search for files containing pattern)
+-"   call Decho("case Explore *//pattern")
+-   let pattern= substitute(dirname,'^\*//\(.*\)$','\1','')
+-   let starpat= 1
+-"   call Decho("Explore *//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
+-   if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
++    " the point where netrw actually edits the (local) file
++    " if its local only: LocalBrowseCheck() doesn't edit a file, but NetrwBrowse() will
++    if a:islocal
++"     call Decho("(NetrwBrowseChgDir:edit-a-file) edit local file: exe e! ".fnameescape(dirname))
++     exe "keepj keepalt e! ".fnameescape(dirname)
++     call s:NetrwCursor()
++    else
++"     call Decho("(NetrwBrowseChgDir:edit-a-file) remote file: NetrwBrowse will edit it")
++    endif
++    let dolockout= 1
+ 
+-  elseif dirname =~ '^\*\*//'
+-   " starpat=2: Explore **//pattern  (recursive descent search for files containing pattern)
+-"   call Decho("case Explore **//pattern")
+-   let pattern= substitute(dirname,'^\*\*//','','')
+-   let starpat= 2
+-"   call Decho("Explore **//pat: (starpat=".starpat.") dirname<".dirname."> -> pattern<".pattern.">")
++    " handle g:Netrw_funcref -- call external-to-netrw functions
++    "   This code will handle g:Netrw_funcref as an individual function reference
++    "   or as a list of function references.  It will ignore anything that's not
++    "   a function reference.  See  :help Funcref  for information about function references.
++    if exists("g:Netrw_funcref")
++"     call Decho("(NetrwBrowseChgDir:edit-a-file) handle optional Funcrefs")
++     if type(g:Netrw_funcref) == 2
++"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a g:Netrw_funcref")
++      keepj call g:Netrw_funcref()
++     elseif type(g:Netrw_funcref) == 3
++"      call Decho("(NetrwBrowseChgDir:edit-a-file) handling a list of g:Netrw_funcrefs")
++      for Fncref in g:Netrw_funcref
++       if type(FncRef) == 2
++        keepj call FncRef()
++       endif
++      endfor
++     endif
++    endif
++   endif
+ 
+-  elseif dirname =~ '^\*/'
+-   " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+-   let starpat= 3
+-"   call Decho("case Explore */filepat (starpat=".starpat.")")
++  elseif newdir =~ '^/'
++   " ----------------------------------------------------
++   " NetrwBrowseChgDir: just go to the new directory spec {{{3
++   " ----------------------------------------------------
++"   call Decho('(NetrwBrowseChgDir:goto-newdir) case "just go to new directory spec": newdir<'.newdir.'>')
++   let dirname    = newdir
++   keepj call s:SetRexDir(a:islocal,dirname)
++   keepj call s:NetrwOptionRestore("s:")
+ 
+-  elseif dirname=~ '^\*\*/'
+-   " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+-   let starpat= 4
+-"   call Decho("case Explore **/filepat (starpat=".starpat.")")
++  elseif newdir == './'
++   " ---------------------------------------------
++   " NetrwBrowseChgDir: refresh the directory list {{{3
++   " ---------------------------------------------
++"   call Decho('(NetrwBrowseChgDir:refresh-dirlist) case "refresh directory listing": newdir == "./"')
++   keepj call s:SetRexDir(a:islocal,dirname)
+ 
+-  else
+-   let starpat= 0
+-"   call Decho("default case: starpat=".starpat)
+-  endif
++  elseif newdir == '../'
++   " --------------------------------------
++   " NetrwBrowseChgDir: go up one directory {{{3
++   " --------------------------------------
++"   call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../"')
+ 
+-  if starpat == 0 && a:indx >= 0
+-   " [Explore Hexplore Vexplore Sexplore] [dirname]
+-"   call Decho("case starpat==0 && a:indx=".a:indx.": dirname<".dirname."> Explore Hexplore Vexplore Sexplore")
+-   if dirname == ""
+-    let dirname= curfiledir
+-"    call Decho("empty dirname, using current file's directory<".dirname.">")
++   if w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
++    " force a refresh
++"    call Decho("(NetrwBrowseChgDir:go-up) clear buffer<".expand("%")."> with :%d")
++"    call Decho("(NetrwBrowseChgDir:go-up) setl noro ma")
++    setl noro ma
++    keepj %d
+    endif
+-   if dirname =~ '^scp:' || dirname =~ '^ftp:'
+-"    call Decho("calling NetrwBrowse(0,dirname<".dirname.">)")
+-    call s:NetrwBrowse(0,dirname)
++
++   if has("amiga")
++    " amiga
++"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and amiga')
++    if a:islocal
++     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+$\)','\1','')
++     let dirname= substitute(dirname,'/$','','')
++    else
++     let dirname= substitute(dirname,'^\(.*[/:]\)\([^/]\+/$\)','\1','')
++    endif
++"    call Decho("(NetrwBrowseChgDir:go-up) amiga: dirname<".dirname."> (go up one dir)")
++
+    else
+-    if dirname == ""|let dirname= getcwd()|endif
+-"    call Decho("calling LocalBrowseCheck(dirname<".dirname.">)")
+-    call netrw#LocalBrowseCheck(dirname)
++    " unix or cygwin
++"    call Decho('(NetrwBrowseChgDir:go-up) case "go up one directory": newdir == "../" and unix or cygwin')
++    if a:islocal
++     let dirname= substitute(dirname,'^\(.*\)/\([^/]\+\)/$','\1','')
++     if dirname == ""
++      let dirname= '/'
++     endif
++    else
++     let dirname= substitute(dirname,'^\(\a\+://.\{-}/\{1,2}\)\(.\{-}\)\([^/]\+\)/$','\1\2','')
++    endif
++"    call Decho("(NetrwBrowseChgDir:go-up) unix: dirname<".dirname."> (go up one dir)")
+    endif
++   keepj call s:SetRexDir(a:islocal,dirname)
+ 
+-"   call Decho("curdir<".curdir.">")
+-   if has("win32") || has("win95") || has("win64") || has("win16")
+-    keepj call search('\<'.substitute(curdir,'^.*[/\\]','','e').'\>','cW')
+-   else
+-    keepj call search('\<'.substitute(curdir,'^.*/','','e').'\>','cW')
++  elseif exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
++   " --------------------------------------
++   " NetrwBrowseChgDir: Handle Tree Listing {{{3
++   " --------------------------------------
++"   call Decho('(NetrwBrowseChgDir:tree-list) case liststyle is TREELIST and w:netrw_treedict exists')
++   " force a refresh (for TREELIST, wait for NetrwTreeDir() to force the refresh)
++"   call Decho("(NetrwBrowseChgDir) (treelist) setl noro ma")
++   setl noro ma
++   if !(exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("b:netrw_curdir"))
++"    call Decho("(NetrwBrowseChgDir) clear buffer<".expand("%")."> with :%d")
++    keepj %d
+    endif
++   let treedir      = s:NetrwTreeDir()
++   let s:treecurpos = nbcd_curpos
++   let haskey= 0
++"   call Decho("(NetrwBrowseChgDir:tree-list) w:netrw_treedict<".string(w:netrw_treedict).">")
+ 
+-  " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+-  " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+-  " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+-  " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+-  elseif a:indx <= 0
+-   " Nexplore, Pexplore, Explore: handle starpat
+-"   call Decho("case a:indx<=0: Nexplore, Pexplore, <s-down>, <s-up> starpat=".starpat." a:indx=".a:indx)
+-   if !mapcheck("<s-up>","n") && !mapcheck("<s-down>","n") && exists("b:netrw_curdir")
+-"    call Decho("set up <s-up> and <s-down> maps")
+-    let s:didstarstar= 1
+-    nnoremap <buffer> <silent> <s-up>	:Pexplore<cr>
+-    nnoremap <buffer> <silent> <s-down>	:Nexplore<cr>
++   " search treedict for tree dir as-is
++   if has_key(w:netrw_treedict,treedir)
++"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : found it!')
++    let haskey= 1
++   else
++"    call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
+    endif
+ 
+-   if has("path_extra")
+-"    call Decho("starpat=".starpat.": has +path_extra")
+-    if !exists("w:netrw_explore_indx")
+-     let w:netrw_explore_indx= 0
++   " search treedict for treedir with a / appended
++   if !haskey && treedir !~ '/$'
++    if has_key(w:netrw_treedict,treedir."/")
++     let treedir= treedir."/"
++"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
++     let haskey = 1
++    else
++"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'/> : not found')
+     endif
++   endif
+ 
+-    let indx = a:indx
+-"    call Decho("starpat=".starpat.": set indx= [a:indx=".indx."]")
+-
+-    if indx == -1
+-     " Nexplore
+-"     call Decho("case Nexplore with starpat=".starpat.": (indx=".indx.")")
+-     if !exists("w:netrw_explore_list") " sanity check
+-      call netrw#ErrorMsg(s:WARNING,"using Nexplore or <s-down> improperly; see help for netrw-starstar",40)
+-      sil! let @* = keepregstar
+-      sil! let @+ = keepregstar
+-      sil! let @/ = keepregslash
+-"      call Dret("netrw#Explore")
+-      return
+-     endif
+-     let indx= w:netrw_explore_indx
+-     if indx < 0                        | let indx= 0                           | endif
+-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+-     let curfile= w:netrw_explore_list[indx]
+-"     call Decho("indx=".indx." curfile<".curfile.">")
+-     while indx < w:netrw_explore_listlen && curfile == w:netrw_explore_list[indx]
+-      let indx= indx + 1
+-"      call Decho("indx=".indx." (Nexplore while loop)")
+-     endwhile
+-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+-"     call Decho("Nexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+-
+-    elseif indx == -2
+-     " Pexplore
+-"     call Decho("case Pexplore with starpat=".starpat.": (indx=".indx.")")
+-     if !exists("w:netrw_explore_list") " sanity check
+-      call netrw#ErrorMsg(s:WARNING,"using Pexplore or <s-up> improperly; see help for netrw-starstar",41)
+-      sil! let @* = keepregstar
+-      sil! let @+ = keepregstar
+-      sil! let @/ = keepregslash
+-"      call Dret("netrw#Explore")
+-      return
+-     endif
+-     let indx= w:netrw_explore_indx
+-     if indx < 0                        | let indx= 0                           | endif
+-     if indx >= w:netrw_explore_listlen | let indx= w:netrw_explore_listlen - 1 | endif
+-     let curfile= w:netrw_explore_list[indx]
+-"     call Decho("indx=".indx." curfile<".curfile.">")
+-     while indx >= 0 && curfile == w:netrw_explore_list[indx]
+-      let indx= indx - 1
+-"      call Decho("indx=".indx." (Pexplore while loop)")
+-     endwhile
+-     if indx < 0                        | let indx= 0                           | endif
+-"     call Decho("Pexplore: indx= [w:netrw_explore_indx=".w:netrw_explore_indx."]=".indx)
+-
++   " search treedict for treedir with any trailing / elided
++   if !haskey && treedir =~ '/$'
++    let treedir= substitute(treedir,'/$','','')
++    if has_key(w:netrw_treedict,treedir)
++"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched.for treedir<'.treedir.'> found it!')
++     let haskey = 1
+     else
+-     " Explore -- initialize
+-     " build list of files to Explore with Nexplore/Pexplore
+-"     call Decho("starpat=".starpat.": case Explore: initialize (indx=".indx.")")
+-     call s:NetrwClearExplore()
+-     let w:netrw_explore_indx= 0
+-     if !exists("b:netrw_curdir")
+-      let b:netrw_curdir= getcwd()
+-     endif
+-"     call Decho("starpat=".starpat.": b:netrw_curdir<".b:netrw_curdir.">")
+-
+-     " switch on starpat to build the w:netrw_explore_list of files
+-     if starpat == 1
+-      " starpat=1: Explore *//pattern  (current directory only search for files containing pattern)
+-"      call Decho("starpat=".starpat.": build *//pattern list")
+-"      call Decho("pattern<".pattern.">")
+-      try
+-       exe "keepj noautocmd vimgrep /".pattern."/gj ".fnameescape(b:netrw_curdir)."/*"
+-      catch /^Vim\%((\a\+)\)\=:E480/
+-       call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+-"       call Dret("netrw#Explore : unable to find pattern<".pattern.">")
+-       return
+-      endtry
+-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(getqflist(),'bufname(v:val.bufnr)'))
+-      if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+-
+-     elseif starpat == 2
+-      " starpat=2: Explore **//pattern (recursive descent search for files containing pattern)
+-"      call Decho("starpat=".starpat.": build **//pattern list")
+-      try
+-       exe "sil keepj noautocmd vimgrep /".pattern."/gj "."**/*"
+-      catch /^Vim\%((\a\+)\)\=:E480/
+-       call netrw#ErrorMsg(s:WARNING,'no files matched pattern<'.pattern.'>',45)
+-       if &hls | let keepregslash= s:ExplorePatHls(pattern) | endif
+-       silent! let @* = keepregstar
+-       silent! let @+ = keepregstar
+-       silent! let @/ = keepregslash
+-"       call Dret("netrw#Explore : no files matched pattern")
+-       return
+-      endtry
+-      let s:netrw_curdir       = b:netrw_curdir
+-      let w:netrw_explore_list = getqflist()
+-      let w:netrw_explore_list = s:NetrwExploreListUniq(map(w:netrw_explore_list,'s:netrw_curdir."/".bufname(v:val.bufnr)'))
+-
+-     elseif starpat == 3
+-      " starpat=3: Explore */filepat   (search in current directory for filenames matching filepat)
+-"      call Decho("starpat=".starpat.": build */filepat list")
+-      let filepat= substitute(dirname,'^\*/','','')
+-      let filepat= substitute(filepat,'^[%#<]','\\&','')
+-"      call Decho("b:netrw_curdir<".b:netrw_curdir.">")
+-"      call Decho("filepat<".filepat.">")
+-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".filepat),'\n'))
+-      if &hls | let keepregslash= s:ExplorePatHls(filepat) | endif
++"     call Decho('(NetrwBrowseChgDir:tree-list) ....searched for treedir<'.treedir.'> : not found')
++    endif
++   endif
+ 
+-     elseif starpat == 4
+-      " starpat=4: Explore **/filepat  (recursive descent search for filenames matching filepat)
+-"      call Decho("starpat=".starpat.": build **/filepat list")
+-      let w:netrw_explore_list= s:NetrwExploreListUniq(split(expand(b:netrw_curdir."/".dirname),'\n'))
+-      if &hls | let keepregslash= s:ExplorePatHls(dirname) | endif
+-     endif " switch on starpat to build w:netrw_explore_list
++   if haskey
++    " close tree listing for selected subdirectory
++"    call Decho("(NetrwBrowseChgDir:tree-list) closing selected subdirectory<".dirname.">")
++    call remove(w:netrw_treedict,treedir)
++"    call Decho("(NetrwBrowseChgDir) removed     entry<".treedir."> from treedict")
++"    call Decho("(NetrwBrowseChgDir) yielding treedict<".string(w:netrw_treedict).">")
++    let dirname= w:netrw_treetop
++   else
++    " go down one directory
++    let dirname= substitute(treedir,'/*$','/','')
++"    call Decho("(NetrwBrowseChgDir:tree-list) go down one dir: treedir<".treedir.">")
++   endif
++   keepj call s:SetRexDir(a:islocal,dirname)
++   let s:treeforceredraw = 1
+ 
+-     let w:netrw_explore_listlen = len(w:netrw_explore_list)
+-"     call Decho("w:netrw_explore_list<".string(w:netrw_explore_list).">")
+-"     call Decho("w:netrw_explore_listlen=".w:netrw_explore_listlen)
++  else
++   " ----------------------------------------
++   " NetrwBrowseChgDir: Go down one directory {{{3
++   " ----------------------------------------
++   let dirname    = s:ComposePath(dirname,newdir)
++"   call Decho("(NetrwBrowseChgDir:go-down) go down one dir: dirname<".dirname."> newdir<".newdir.">")
++   keepj call s:SetRexDir(a:islocal,dirname)
++  endif
+ 
+-     if w:netrw_explore_listlen == 0 || (w:netrw_explore_listlen == 1 && w:netrw_explore_list[0] =~ '\*\*\/')
+-      call netrw#ErrorMsg(s:WARNING,"no files matched",42)
+-      sil! let @* = keepregstar
+-      sil! let @+ = keepregstar
+-      sil! let @/ = keepregslash
+-"      call Dret("netrw#Explore : no files matched")
+-      return
+-     endif
+-    endif  " if indx ... endif
++ " --------------------------------------
++ " NetrwBrowseChgDir: Restore and Cleanup {{{3
++ " --------------------------------------
++  keepj call s:NetrwOptionRestore("s:")
++  if dolockout
++"   call Decho("(NetrwBrowseChgDir:restore) filewritable(dirname<".dirname.">)=".filewritable(dirname))
++   if filewritable(dirname)
++"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod noro")
++"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
++    setl ma nomod noro
++"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++   else
++"    call Decho("(NetrwBrowseChgDir:restore) doing modification lockout settings: ma nomod ro")
++"    call Decho("(NetrwBrowseChgDir:restore) setl ma nomod noro")
++    setl ma nomod ro
++"    call Decho("(NetrwBrowseChgDir:restore) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++   endif
++  endif
++  let @@= ykeep
+ 
+-    " NetrwStatusLine support - for exploring support
+-    let w:netrw_explore_indx= indx
+-"    call Decho("w:netrw_explore_list<".join(w:netrw_explore_list,',')."> len=".w:netrw_explore_listlen)
++"  call Dret("s:NetrwBrowseChgDir <".dirname."> : curpos<".string(getpos(".")).">")
++  return dirname
++endfun
+ 
+-    " wrap the indx around, but issue a note
+-    if indx >= w:netrw_explore_listlen || indx < 0
+-"     call Decho("wrap indx (indx=".indx." listlen=".w:netrw_explore_listlen.")")
+-     let indx                = (indx < 0)? ( w:netrw_explore_listlen - 1 ) : 0
+-     let w:netrw_explore_indx= indx
+-     call netrw#ErrorMsg(s:NOTE,"no more files match Explore pattern",43)
+-    endif
++" ---------------------------------------------------------------------
++" s:NetrwBrowseX:  (implements "x") executes a special "viewer" script or program for the {{{2
++"              given filename; typically this means given their extension.
++"              0=local, 1=remote
++fun! netrw#NetrwBrowseX(fname,remote)
++"  call Dfunc("NetrwBrowseX(fname<".a:fname."> remote=".a:remote.")")
+ 
+-    exe "let dirfile= w:netrw_explore_list[".indx."]"
+-"    call Decho("dirfile=w:netrw_explore_list[indx=".indx."]= <".dirfile.">")
+-    let newdir= substitute(dirfile,'/[^/]*$','','e')
+-"    call Decho("newdir<".newdir.">")
++  let ykeep      = @@
++  let screenposn = netrw#NetrwSavePosn()
+ 
+-"    call Decho("calling LocalBrowseCheck(newdir<".newdir.">)")
+-    call netrw#LocalBrowseCheck(newdir)
+-    if !exists("w:netrw_liststyle")
+-     let w:netrw_liststyle= g:netrw_liststyle
+-    endif
+-    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:LONGLIST
+-     keepj call search('^'.substitute(dirfile,"^.*/","","").'\>',"W")
+-    else
+-     keepj call search('\<'.substitute(dirfile,"^.*/","","").'\>',"w")
++  " special core dump handler
++  if a:fname =~ '/core\(\.\d\+\)\=$'
++   if exists("g:Netrw_corehandler")
++    if type(g:Netrw_corehandler) == 2
++     " g:Netrw_corehandler is a function reference (see :help Funcref)
++"     call Decho("g:Netrw_corehandler is a funcref")
++     call g:Netrw_corehandler(a:fname)
++    elseif type(g:Netrw_corehandler) == 3
++     " g:Netrw_corehandler is a List of function references (see :help Funcref)
++"     call Decho("g:Netrw_corehandler is a List")
++     for Fncref in g:Netrw_corehandler
++      if type(FncRef) == 2
++       call FncRef(a:fname)
++      endif
++     endfor
+     endif
+-    let w:netrw_explore_mtchcnt = indx + 1
+-    let w:netrw_explore_bufnr   = bufnr("%")
+-    let w:netrw_explore_line    = line(".")
+-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*%{NetrwStatusLine()}')
+-"    call Decho("explore: mtchcnt=".w:netrw_explore_mtchcnt." bufnr=".w:netrw_explore_bufnr." line#".w:netrw_explore_line)
++    call netrw#NetrwRestorePosn(screenposn)
++    let @@= ykeep
++"    call Dret("NetrwBrowseX : coredump handler invoked")
++    return
++   endif
++  endif
+ 
+-   else
+-"    call Decho("your vim does not have +path_extra")
+-    if !exists("g:netrw_quiet")
+-     call netrw#ErrorMsg(s:WARNING,"your vim needs the +path_extra feature for Exploring with **!",44)
++  " set up the filename
++  " (lower case the extension, make a local copy of a remote file)
++  let exten= substitute(a:fname,'.*\.\(.\{-}\)','\1','e')
++  if has("win32") || has("win95") || has("win64") || has("win16")
++   let exten= substitute(exten,'^.*$','\L&\E','')
++  endif
++"  call Decho("exten<".exten.">")
++
++  " seems kde systems often have gnome-open due to dependencies, even though
++  " gnome-open's subsidiary display tools are largely absent.  Kde systems
++  " usually have "kdeinit" running, though...  (tnx Mikolaj Machowski)
++  if !exists("s:haskdeinit")
++   if has("unix") && executable("ps") && !has("win32unix")
++    let s:haskdeinit= system("ps -e") =~ 'kdeinit' 
++    if v:shell_error
++     let s:haskdeinit = 0
+     endif
+-    sil! let @* = keepregstar
+-    sil! let @+ = keepregstar
+-    sil! let @/ = keepregslash
+-"    call Dret("netrw#Explore : missing +path_extra")
+-    return
++   else
++    let s:haskdeinit= 0
+    endif
++"   call Decho("setting s:haskdeinit=".s:haskdeinit)
++  endif
+ 
++  if a:remote == 1
++   " create a local copy
++"   call Decho("(remote) a:remote=".a:remote.": create a local copy of <".a:fname.">")
++   setl bh=delete
++   call netrw#NetRead(3,a:fname)
++   " attempt to rename tempfile
++   let basename= substitute(a:fname,'^\(.*\)/\(.*\)\.\([^.]*\)$','\2','')
++   let newname = substitute(s:netrw_tmpfile,'^\(.*\)/\(.*\)\.\([^.]*\)$','\1/'.basename.'.\3','')
++"   call Decho("basename<".basename.">")
++"   call Decho("newname <".newname.">")
++   if rename(s:netrw_tmpfile,newname) == 0
++    " renaming succeeded
++    let fname= newname
++   else
++    " renaming failed
++    let fname= s:netrw_tmpfile
++   endif
+   else
+-"   call Decho("default case: Explore newdir<".dirname.">")
+-   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && dirname =~ '/'
+-    sil! unlet w:netrw_treedict
+-    sil! unlet w:netrw_treetop
++"   call Decho("(local) a:remote=".a:remote.": handling local copy of <".a:fname.">")
++   let fname= a:fname
++   " special ~ handler for local
++   if fname =~ '^\~' && expand("$HOME") != ""
++"    call Decho('invoking special ~ handler')
++    let fname= substitute(fname,'^\~',expand("$HOME"),'')
+    endif
+-   let newdir= dirname
+-   if !exists("b:netrw_curdir")
+-    call netrw#LocalBrowseCheck(getcwd())
++  endif
++"  call Decho("fname<".fname.">")
++"  call Decho("exten<".exten."> "."netrwFileHandlers#NFH_".exten."():exists=".exists("*netrwFileHandlers#NFH_".exten))
++
++  " set up redirection
++  if &srr =~ "%s"
++   if (has("win32") || has("win95") || has("win64") || has("win16"))
++    let redir= substitute(&srr,"%s","nul","")
+    else
+-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,newdir))
++    let redir= substitute(&srr,"%s","/dev/null","")
+    endif
++  elseif (has("win32") || has("win95") || has("win64") || has("win16"))
++   let redir= &srr . "nul"
++  else
++   let redir= &srr . "/dev/null"
+   endif
++"  call Decho("set up redirection: redir{".redir."} srr{".&srr."}")
+ 
+-  " visual display of **/ **// */ Exploration files
+-"  call Decho("w:netrw_explore_indx=".(exists("w:netrw_explore_indx")? w:netrw_explore_indx : "doesn't exist"))
+-"  call Decho("b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : "n/a").">")
+-  if exists("w:netrw_explore_indx") && exists("b:netrw_curdir")
+-"   call Decho("s:explore_prvdir<".(exists("s:explore_prvdir")? s:explore_prvdir : "-doesn't exist-"))
+-   if !exists("s:explore_prvdir") || s:explore_prvdir != b:netrw_curdir
+-    " only update match list if current directory isn't the same as before
+-"    call Decho("only update match list if current directory not the same as before")
+-    let s:explore_prvdir = b:netrw_curdir
+-    let s:explore_match  = ""
+-    let dirlen           = s:Strlen(b:netrw_curdir)
+-    if b:netrw_curdir !~ '/$'
+-     let dirlen= dirlen + 1
+-    endif
+-    let prvfname= ""
+-    for fname in w:netrw_explore_list
+-"     call Decho("fname<".fname.">")
+-     if fname =~ '^'.b:netrw_curdir
+-      if s:explore_match == ""
+-       let s:explore_match= '\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+-      else
+-       let s:explore_match= s:explore_match.'\|\<'.escape(strpart(fname,dirlen),g:netrw_markfileesc).'\>'
+-      endif
+-     elseif fname !~ '^/' && fname != prvfname
+-      if s:explore_match == ""
+-       let s:explore_match= '\<'.escape(fname,g:netrw_markfileesc).'\>'
+-      else
+-       let s:explore_match= s:explore_match.'\|\<'.escape(fname,g:netrw_markfileesc).'\>'
+-      endif
+-     endif
+-     let prvfname= fname
+-    endfor
+-"    call Decho("explore_match<".s:explore_match.">")
+-    exe "2match netrwMarkFile /".s:explore_match."/"
++  " extract any viewing options.  Assumes that they're set apart by quotes.
++"  call Decho("extract any viewing options")
++  if exists("g:netrw_browsex_viewer")
++"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
++   if g:netrw_browsex_viewer =~ '\s'
++    let viewer  = substitute(g:netrw_browsex_viewer,'\s.*$','','')
++    let viewopt = substitute(g:netrw_browsex_viewer,'^\S\+\s*','','')." "
++    let oviewer = ''
++    let cnt     = 1
++    while !executable(viewer) && viewer != oviewer
++     let viewer  = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\1','')
++     let viewopt = substitute(g:netrw_browsex_viewer,'^\(\(^\S\+\s\+\)\{'.cnt.'}\S\+\)\(.*\)$','\3','')." "
++     let cnt     = cnt + 1
++     let oviewer = viewer
++"     call Decho("!exe: viewer<".viewer.">  viewopt<".viewopt.">")
++    endwhile
++   else
++    let viewer  = g:netrw_browsex_viewer
++    let viewopt = ""
+    endif
+-   echo "<s-up>==Pexplore  <s-down>==Nexplore"
++"   call Decho("viewer<".viewer.">  viewopt<".viewopt.">")
++  endif
++
++  " execute the file handler
++"  call Decho("execute the file handler (if any)")
++  if exists("g:netrw_browsex_viewer") && g:netrw_browsex_viewer == '-'
++"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
++   let ret= netrwFileHandlers#Invoke(exten,fname)
++
++  elseif exists("g:netrw_browsex_viewer") && executable(viewer)
++"   call Decho("g:netrw_browsex_viewer<".g:netrw_browsex_viewer.">")
++"   call Decho("exe sil !".viewer." ".viewopt.shellescape(fname,1).redir)
++   exe "sil !".viewer." ".viewopt.shellescape(fname,1).redir
++   let ret= v:shell_error
++
++  elseif has("win32") || has("win64")
++"   call Decho("windows")
++   if executable("start")
++"    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
++    exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
++   elseif executable("rundll32")
++"    call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1))
++    exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(fname,1)
++   else
++    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
++   endif
++   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
++   let ret= v:shell_error
++
++  elseif has("win32unix")
++   let winfname= 'c:\cygwin'.substitute(fname,'/','\\','g')
++"   call Decho("cygwin: winfname<".shellescape(winfname,1).">")
++   if executable("start")
++"    call Decho('exe sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
++    exe 'sil !start rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
++   elseif executable("rundll32")
++"    call Decho('exe sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1))
++    exe 'sil !rundll32 url.dll,FileProtocolHandler '.shellescape(winfname,1)
++   else
++    call netrw#ErrorMsg(s:WARNING,"rundll32 not on path",74)
++   endif
++   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
++   let ret= v:shell_error
++
++  elseif has("unix") && executable("xdg-open") && !s:haskdeinit
++"   call Decho("unix and xdg-open")
++"   call Decho("exe sil !xdg-open ".shellescape(fname,1)." ".redir)
++   exe "sil !xdg-open ".shellescape(fname,1).redir
++   let ret= v:shell_error
++
++  elseif has("unix") && executable("kfmclient") && s:haskdeinit
++"   call Decho("unix and kfmclient")
++"   call Decho("exe sil !kfmclient exec ".shellescape(fname,1)." ".redir)
++   exe "sil !kfmclient exec ".shellescape(fname,1)." ".redir
++   let ret= v:shell_error
++
++  elseif has("macunix") && executable("open")
++"   call Decho("macunix and open")
++"   call Decho("exe sil !open ".shellescape(fname,1)." ".redir)
++   exe "sil !open ".shellescape(fname,1)." ".redir
++   let ret= v:shell_error
++
+   else
+-   2match none
+-   if exists("s:explore_match")  | unlet s:explore_match  | endif
+-   if exists("s:explore_prvdir") | unlet s:explore_prvdir | endif
+-   echo " "
+-"   call Decho("cleared explore match list")
++   " netrwFileHandlers#Invoke() always returns 0
++   let ret= netrwFileHandlers#Invoke(exten,fname)
+   endif
+ 
+-  sil! let @* = keepregstar
+-  sil! let @+ = keepregstar
+-  sil! let @/ = keepregslash
+-"  call Dret("netrw#Explore : @/<".@/.">")
++  " if unsuccessful, attempt netrwFileHandlers#Invoke()
++  if ret
++   let ret= netrwFileHandlers#Invoke(exten,fname)
++  endif
++
++  " restoring redraw! after external file handlers
++  redraw!
++
++  " cleanup: remove temporary file,
++  "          delete current buffer if success with handler,
++  "          return to prior buffer (directory listing)
++  "          Feb 12, 2008: had to de-activiate removal of
++  "          temporary file because it wasn't getting seen.
++"  if a:remote == 1 && fname != a:fname
++""   call Decho("deleting temporary file<".fname.">")
++"   call s:NetrwDelete(fname)
++"  endif
++
++  if a:remote == 1
++   setl bh=delete bt=nofile
++   if g:netrw_use_noswf
++    setl noswf
++   endif
++   exe "sil! keepj norm! \<c-o>"
++"   redraw!
++  endif
++  call netrw#NetrwRestorePosn(screenposn)
++  let @@= ykeep
++
++"  call Dret("NetrwBrowseX")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwChgPerm: (implements "gp") change file permission {{{2
++fun! s:NetrwChgPerm(islocal,curdir)
++"  call Dfunc("s:NetrwChgPerm(islocal=".a:islocal." curdir<".a:curdir.">)")
++  let ykeep  = @@
++  call inputsave()
++  let newperm= input("Enter new permission: ")
++  call inputrestore()
++  let chgperm= substitute(g:netrw_chgperm,'\<FILENAME\>',shellescape(expand("<cfile>")),'')
++  let chgperm= substitute(chgperm,'\<PERM\>',shellescape(newperm),'')
++"  call Decho("chgperm<".chgperm.">")
++  call system(chgperm)
++  if v:shell_error != 0
++   keepj call netrw#ErrorMsg(1,"changing permission on file<".expand("<cfile>")."> seems to have failed",75)
++  endif
++  if a:islocal
++   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  endif
++  let @@= ykeep
++"  call Dret("s:NetrwChgPerm")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwClearExplore: clear explore variables (if any) {{{2
++fun! s:NetrwClearExplore()
++"  call Dfunc("s:NetrwClearExplore()")
++  2match none
++  if exists("s:explore_match")        |unlet s:explore_match        |endif
++  if exists("s:explore_indx")         |unlet s:explore_indx         |endif
++  if exists("s:netrw_explore_prvdir") |unlet s:netrw_explore_prvdir |endif
++  if exists("s:dirstarstar")          |unlet s:dirstarstar          |endif
++  if exists("s:explore_prvdir")       |unlet s:explore_prvdir       |endif
++  if exists("w:netrw_explore_indx")   |unlet w:netrw_explore_indx   |endif
++  if exists("w:netrw_explore_listlen")|unlet w:netrw_explore_listlen|endif
++  if exists("w:netrw_explore_list")   |unlet w:netrw_explore_list   |endif
++  if exists("w:netrw_explore_bufnr")  |unlet w:netrw_explore_bufnr  |endif
++"   redraw!
++  echo " "
++  echo " "
++"  call Dret("s:NetrwClearExplore")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " s:NetrwExploreListUniq: {{{2
+ fun! s:NetrwExploreListUniq(explist)
+-"  call Dfunc("s:NetrwExploreListUniq(explist)")
++"  call Dfunc("s:NetrwExploreListUniq(explist<".string(a:explist).">)")
+ 
+   " this assumes that the list is already sorted
+   let newexplist= []
+@@ -3939,11 +4845,53 @@
+    endif
+   endfor
+ 
+-"  call Dret("s:NetrwExploreListUniq")
++"  call Dret("s:NetrwExploreListUniq newexplist<".string(newexplist).">")
+   return newexplist
+ endfun
+ 
+ " ---------------------------------------------------------------------
++" s:NetrwForceChgDir: (gd support) Force treatment as a directory {{{2
++fun! s:NetrwForceChgDir(islocal,newdir)
++"  call Dfunc("s:NetrwForceChgDir(islocal=".a:islocal." newdir<".a:newdir.">)")
++  let ykeep= @@
++  if a:newdir !~ '/$'
++   " ok, looks like force is needed to get directory-style treatment
++   if a:newdir =~ '@$'
++    let newdir= substitute(a:newdir,'@$','/','')
++   elseif a:newdir =~ '[*=|\\]$'
++    let newdir= substitute(a:newdir,'.$','/','')
++   else
++    let newdir= a:newdir.'/'
++   endif
++"   call Decho("adjusting newdir<".newdir."> due to gd")
++  else
++   " should already be getting treatment as a directory
++   let newdir= a:newdir
++  endif
++  let newdir= s:NetrwBrowseChgDir(a:islocal,newdir)
++  call s:NetrwBrowse(a:islocal,newdir)
++  let @@= ykeep
++"  call Dret("s:NetrwForceChgDir")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwForceFile: (gf support) Force treatment as a file {{{2
++fun! s:NetrwForceFile(islocal,newfile)
++"  call Dfunc("s:NetrwForceFile(islocal=".a:islocal." newdir<".a:newfile.">)")
++  if a:newfile =~ '[/@*=|\\]$'
++   let newfile= substitute(a:newfile,'.$','','')
++  else
++   let newfile= a:newfile
++  endif
++  if a:islocal
++   call s:NetrwBrowseChgDir(a:islocal,newfile)
++  else
++   call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,newfile))
++  endif
++"  call Dret("s:NetrwForceFile")
++endfun
++
++" ---------------------------------------------------------------------
+ " s:NetrwHide: this function is invoked by the "a" map for browsing {{{2
+ "          and switches the hiding mode.  The actual hiding is done by
+ "          s:NetrwListHide().
+@@ -3952,6 +4900,7 @@
+ "                           2: show hidden files only
+ fun! s:NetrwHide(islocal)
+ "  call Dfunc("NetrwHide(islocal=".a:islocal.") g:netrw_hide=".g:netrw_hide)
++  let ykeep= @@
+   let svpos= netrw#NetrwSavePosn()
+ 
+   if exists("s:netrwmarkfilelist_{bufnr('%')}")
+@@ -3960,7 +4909,7 @@
+ 
+    " hide the files in the markfile list
+    for fname in s:netrwmarkfilelist_{bufnr("%")}
+-"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." isk=".&isk)
++"    call Decho("match(g:netrw_list_hide<".g:netrw_list_hide.'> fname<\<'.fname.'\>>)='.match(g:netrw_list_hide,'\<'.fname.'\>')." l:isk=".&l:isk)
+     if match(g:netrw_list_hide,'\<'.fname.'\>') != -1
+      " remove fname from hiding list
+      let g:netrw_list_hide= substitute(g:netrw_list_hide,'..\<'.escape(fname,g:netrw_fname_escape).'\>..','','')
+@@ -3977,7 +4926,7 @@
+ "     call Decho("hide: g:netrw_list_hide<".g:netrw_list_hide.">")
+     endif
+    endfor
+-   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
++   keepj call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+    let g:netrw_hide= 1
+ 
+   else
+@@ -3986,14 +4935,16 @@
+    let g:netrw_hide=(g:netrw_hide+1)%3
+    exe "keepj norm! 0"
+    if g:netrw_hide && g:netrw_list_hide == ""
+-    call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
++    keepj call netrw#ErrorMsg(s:WARNING,"your hiding list is empty!",49)
++    let @@= ykeep
+ "    call Dret("NetrwHide")
+     return
+    endif
+   endif
+ 
+-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
++  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
++  let @@= ykeep
+ "  call Dret("NetrwHide")
+ endfun
+ 
+@@ -4001,6 +4952,7 @@
+ " s:NetrwHidden: invoked by "gh" {{{2
+ fun! s:NetrwHidden(islocal)
+ "  call Dfunc("s:NetrwHidden()")
++  let ykeep= @@
+   "  save current position
+   let svpos= netrw#NetrwSavePosn()
+ 
+@@ -4014,8 +4966,9 @@
+   endif
+ 
+   " refresh screen and return to saved position
+-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
++  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
++  let @@= ykeep
+ "  call Dret("s:NetrwHidden")
+ endfun
+ 
+@@ -4043,7 +4996,7 @@
+    endif
+   endif
+   " insure that the home directory exists
+-  if !isdirectory(home)
++  if g:netrw_dirhistmax > 0 && !isdirectory(home)
+    if exists("g:netrw_mkdir")
+     call system(g:netrw_mkdir." ".shellescape(home))
+    else
+@@ -4057,11 +5010,18 @@
+ " ---------------------------------------------------------------------
+ " s:NetrwLeftmouse: handles the <leftmouse> when in a netrw browsing window {{{2
+ fun! s:NetrwLeftmouse(islocal)
++  if exists("s:netrwdrag")
++   return
++  endif
+ "  call Dfunc("s:NetrwLeftmouse(islocal=".a:islocal.")")
+ 
++  let ykeep= @@
+   " check if the status bar was clicked on instead of a file/directory name
++  while getchar(0) != 0
++   "clear the input stream
++  endwhile
+   call feedkeys("\<LeftMouse>")
+-  let c= getchar()
++  let c          = getchar()
+   let mouse_lnum = v:mouse_lnum
+   let wlastline  = line('w$')
+   let lastline   = line('$')
+@@ -4069,31 +5029,76 @@
+ "  call Decho("v:mouse_col =".v:mouse_col."     col=".col(".")."  wincol =".wincol()." winwidth   =".winwidth(0))
+   if mouse_lnum >= wlastline + 1 || v:mouse_win != winnr()
+    " appears to be a status bar leftmouse click
++   let @@= ykeep
+ "   call Dret("s:NetrwLeftmouse : detected a status bar leftmouse click")
+    return
+   endif
+   if v:mouse_col != col('.')
++   let @@= ykeep
+ "   call Dret("s:NetrwLeftmouse : detected a vertical separator bar leftmouse click")
+    return
+   endif
+ 
+   if a:islocal
+    if exists("b:netrw_curdir")
+-    call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
++    keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+    endif
+   else
+    if exists("b:netrw_curdir")
+-    call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
++    keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+    endif
+   endif
++  let @@= ykeep
+ "  call Dret("s:NetrwLeftmouse")
+ endfun
+ 
+ " ---------------------------------------------------------------------
++" s:NetrwRightdrag: {{{2
++"DechoTabOn
++fun! s:NetrwRightdrag(islocal)
++"  call Dfunc("s:NetrwRightdrag(islocal=".a:islocal.")")
++  if !exists("s:netrwdrag")
++   let s:netrwdrag     = winnr()
++   call s:NetrwMarkFile(a:islocal,s:NetrwGetWord())
++   if a:islocal
++    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(1)<cr>
++   else
++    nno <silent> <s-rightrelease> <leftmouse>:<c-u>call <SID>NetrwRightrelease(0)<cr>
++   endif
++  endif
++"  call Dret("s:NetrwRightdrag : s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwRightrelease: {{{2
++fun! s:NetrwRightrelease(islocal)
++"  call Dfunc("s:NetrwRightrelease(islocal=".a:islocal.") s:netrwdrag=".s:netrwdrag." buf#".bufnr("%"))
++  if exists("s:netrwdrag")
++   nunmap <s-rightrelease>
++   let tgt = s:NetrwGetWord()
++"   call Decho("target#1: ".tgt)
++   if tgt =~ '/$' && tgt !~ '^\./$'
++    let tgt = b:netrw_curdir."/".tgt
++   else
++    let tgt= b:netrw_curdir
++   endif
++"   call Decho("target#2: ".tgt)
++   call netrw#NetrwMakeTgt(tgt)
++   let curwin= winnr()
++   exe s:netrwdrag."wincmd w"
++   call s:NetrwMarkFileMove(a:islocal)
++   exe curwin."wincmd w"
++   unlet s:netrwdrag
++  endif
++"  call Dret("s:NetrwRightrelease")
++endfun
++
++" ---------------------------------------------------------------------
+ " s:NetrwListHide: uses [range]g~...~d to delete files that match comma {{{2
+ " separated patterns given in g:netrw_list_hide
+ fun! s:NetrwListHide()
+-"  call Dfunc("NetrwListHide() hide=".g:netrw_hide." listhide<".g:netrw_list_hide.">")
++"  call Dfunc("NetrwListHide() g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
++  let ykeep= @@
+ 
+   " find a character not in the "hide" string to use as a separator for :g and :v commands
+   " How-it-works: take the hiding command, convert it into a range.  Duplicate
+@@ -4115,17 +5120,22 @@
+    " Prune the list by hiding any files which match
+    if g:netrw_hide == 1
+ "    call Decho("hiding<".hide."> listhide<".listhide.">")
+-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
++    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'d'
+    elseif g:netrw_hide == 2
+ "    call Decho("showing<".hide."> listhide<".listhide.">")
+-    exe 'sil keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
++    exe 'sil! keepj '.w:netrw_bannercnt.',$g'.sep.hide.sep.'s@^@ /-KEEP-/ @'
+    endif
+   endwhile
+   if g:netrw_hide == 2
+-   exe 'sil keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
+-   exe 'sil keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
++   exe 'sil! keepj '.w:netrw_bannercnt.',$v@^ /-KEEP-/ @d'
++   exe 'sil! keepj '.w:netrw_bannercnt.',$s@^\%( /-KEEP-/ \)\+@@e'
+   endif
+ 
++  " remove any blank lines that have somehow remained.
++  " This seems to happen under Windows.
++  exe 'sil! keepj 1,$g@^\s*$@d'
++
++  let @@= ykeep
+ "  call Dret("NetrwListHide")
+ endfun
+ 
+@@ -4134,6 +5144,7 @@
+ fun! s:NetrwHideEdit(islocal)
+ "  call Dfunc("NetrwHideEdit(islocal=".a:islocal.")")
+ 
++  let ykeep= @@
+   " save current cursor position
+   let svpos= netrw#NetrwSavePosn()
+ 
+@@ -4145,10 +5156,11 @@
+ "  call Decho("new g:netrw_list_hide<".g:netrw_list_hide.">")
+ 
+   " refresh the listing
+-  silent keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
++  sil keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,"./"))
+ 
+   " restore cursor position
+   call netrw#NetrwRestorePosn(svpos)
++  let @@= ykeep
+ 
+ "  call Dret("NetrwHideEdit")
+ endfun
+@@ -4158,6 +5170,7 @@
+ fun! s:NetSortSequence(islocal)
+ "  call Dfunc("NetSortSequence(islocal=".a:islocal.")")
+ 
++  let ykeep= @@
+   let svpos= netrw#NetrwSavePosn()
+   call inputsave()
+   let newsortseq= input("Edit Sorting Sequence: ",g:netrw_sort_sequence)
+@@ -4165,8 +5178,9 @@
+ 
+   " refresh the listing
+   let g:netrw_sort_sequence= newsortseq
+-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
++  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
++  let @@= ykeep
+ 
+ "  call Dret("NetSortSequence")
+ endfun
+@@ -4176,6 +5190,7 @@
+ fun! s:NetrwMakeDir(usrhost)
+ "  call Dfunc("NetrwMakeDir(usrhost<".a:usrhost.">)")
+ 
++  let ykeep= @@
+   " get name of new directory from user.  A bare <CR> will skip.
+   " if its currently a directory, also request will be skipped, but with
+   " a message.
+@@ -4185,6 +5200,7 @@
+ "  call Decho("newdirname<".newdirname.">")
+ 
+   if newdirname == ""
++   let @@= ykeep
+ "   call Dret("NetrwMakeDir : user aborted with bare <cr>")
+    return
+   endif
+@@ -4198,15 +5214,17 @@
+ "   call Decho("fullnewdir<".fullnewdir.">")
+    if isdirectory(fullnewdir)
+     if !exists("g:netrw_quiet")
+-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
++     keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a directory!",24)
+     endif
++    let @@= ykeep
+ "    call Dret("NetrwMakeDir : directory<".newdirname."> exists previously")
+     return
+    endif
+    if s:FileReadable(fullnewdir)
+     if !exists("g:netrw_quiet")
+-     call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
++     keepj call netrw#ErrorMsg(s:WARNING,"<".newdirname."> is already a file!",25)
+     endif
++    let @@= ykeep
+ "    call Dret("NetrwMakeDir : file<".newdirname."> exists previously")
+     return
+    endif
+@@ -4219,8 +5237,14 @@
+     let netrw_origdir= s:NetrwGetcwd(1)
+     exe 'keepj lcd '.fnameescape(b:netrw_curdir)
+ "    call Decho("netrw_origdir<".netrw_origdir.">: lcd b:netrw_curdir<".fnameescape(b:netrw_curdir).">")
+-"    call Decho("exe silent! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1))
+-    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(newdirname,1)
++"    call Decho("exe sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
++    exe "sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1)
++    if v:shell_error != 0
++     let @@= ykeep
++     call netrw#ErrorMsg(s:ERROR,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
++"     call Dret("NetrwMakeDir : failed: sil! !".g:netrw_localmkdir.' '.shellescape(newdirname,1))
++     return
++    endif
+     if !g:netrw_keepdir
+      exe 'keepj lcd '.fnameescape(netrw_origdir)
+ "     call Decho("netrw_keepdir=".g:netrw_keepdir.": keepjumps lcd ".fnameescape(netrw_origdir)." getcwd<".getcwd().">")
+@@ -4243,26 +5267,31 @@
+ "   call Decho("remote mkdir")
+    let mkdircmd  = s:MakeSshCmd(g:netrw_mkdir_cmd)
+    let newdirname= substitute(b:netrw_curdir,'^\%(.\{-}/\)\{3}\(.*\)$','\1','').newdirname
+-"   call Decho("exe silent! !".mkdircmd." ".shellescape(newdirname,1))
++"   call Decho("exe sil! !".mkdircmd." ".shellescape(newdirname,1))
+    exe "sil! !".mkdircmd." ".shellescape(newdirname,1)
+    if v:shell_error == 0
+     " refresh listing
+     let svpos= netrw#NetrwSavePosn()
+-    call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+-    call netrw#NetrwRestorePosn(svpos)
++    keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
++    keepj call netrw#NetrwRestorePosn(svpos)
+    elseif !exists("g:netrw_quiet")
+-    call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
++    keepj call netrw#ErrorMsg(s:ERROR,"unable to make directory<".newdirname.">",27)
+    endif
+ "   redraw!
+ 
+   elseif b:netrw_method == 2
+-   " COMBAK -- future work
+-   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
++   let svpos= netrw#NetrwSavePosn()
++   call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"')
++   keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
+   elseif b:netrw_method == 3
+-   " COMBAK -- future work
+-   call netrw#ErrorMsg(s:ERROR,"making directories via ftp not currently supported",68)
++   let svpos= netrw#NetrwSavePosn()
++   call s:NetrwRemoteFtpCmd("",g:netrw_remote_mkdir.' "'.newdirname.'"')
++   keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
+   endif
+ 
++  let @@= ykeep
+ "  call Dret("NetrwMakeDir")
+ endfun
+ 
+@@ -4283,14 +5312,22 @@
+ "
+ "  Creates a buffer version of islocal
+ "    b:netrw_islocal
+-"
+ fun! s:NetrwMarkFile(islocal,fname)
+ "  call Dfunc("s:NetrwMarkFile(islocal=".a:islocal." fname<".a:fname.">)")
++
++  " sanity check
++  if empty(a:fname)
++"   call Dret("s:NetrwMarkFile : emtpy fname")
++   return
++  endif
++
++  let ykeep   = @@
+   let curbufnr= bufnr("%")
+   let curdir  = b:netrw_curdir
+-  let trailer = '[@=|\/\*]\=\>'
++  let trailer = '[@=|\/\*]\=\ze\%(  \|\t\|$\)'
++
+   if exists("s:netrwmarkfilelist_{curbufnr}")
+-   " markfile list exists
++   " markfile list pre-exists
+ "   call Decho("starting s:netrwmarkfilelist_{curbufnr}<".string(s:netrwmarkfilelist_{curbufnr}).">")
+ "   call Decho("starting s:netrwmarkfilemtch_{curbufnr}<".s:netrwmarkfilemtch_{curbufnr}.">")
+    let b:netrw_islocal= a:islocal
+@@ -4322,8 +5359,7 @@
+       endif
+       let first= 0
+      endfor
+-"     call Decho("ending s:netrwmarkfilelist_"curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
+-"     call Decho("ending s:netrwmarkfilemtch_"curbufnr."<".s:netrwmarkfilemtch_{curbufnr}.">")
++"     call Decho("ending s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}).">")
+     endif
+    endif
+ 
+@@ -4377,7 +5413,8 @@
+ "   call Decho("2match none")
+    2match none
+   endif
+-"  call Dret("s:NetrwMarkFile : netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
++  let @@= ykeep
++"  call Dret("s:NetrwMarkFile : s:netrwmarkfilelist_".curbufnr."<".(exists("s:netrwmarkfilelist_{curbufnr}")? string(s:netrwmarkfilelist_{curbufnr}) : " doesn't exist").">")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+@@ -4394,34 +5431,44 @@
+   let curdir   = b:netrw_curdir
+   let curbufnr = bufnr("%")
+ 
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileCompress")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
+   if exists("s:netrwmarkfilelist_{curbufnr}") && exists("g:netrw_compress") && exists("g:netrw_decompress")
++
++   " for every filename in the marked list
+    for fname in s:netrwmarkfilelist_{curbufnr}
+-    " for every filename in the marked list
+-    for sfx in sort(keys(g:netrw_decompress))
+-     if fname =~ '\'.sfx.'$'
+-      " fname has a suffix indicating that its compressed; apply associated decompression routine
+-      let exe= netrw#WinPath(g:netrw_decompress[sfx])
+-"      call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
+-      if a:islocal
+-       if g:netrw_keepdir
+-        let fname= shellescape(s:ComposePath(curdir,fname))
+-       endif
+-      else
+-       let fname= shellescape(b:netrw_curdir.fname,1)
++    let sfx= substitute(fname,'^.\{-}\(\.\a\+\)$','\1','')
++"    call Decho("extracted sfx<".sfx.">")
++    if exists("g:netrw_decompress['".sfx."']")
++     " fname has a suffix indicating that its compressed; apply associated decompression routine
++     let exe= g:netrw_decompress[sfx]
++"     call Decho("fname<".fname."> is compressed so decompress with <".exe.">")
++     let exe= netrw#WinPath(exe)
++     if a:islocal
++      if g:netrw_keepdir
++       let fname= shellescape(s:ComposePath(curdir,fname))
+       endif
+-      if executable(exe)
+-       if a:islocal
+-	call system(exe." ".fname)
+-       else
+-        call s:RemoteSystem(exe." ".fname)
+-       endif
++     else
++      let fname= shellescape(b:netrw_curdir.fname,1)
++     endif
++     if executable(exe)
++      if a:islocal
++       call system(exe." ".fname)
+       else
+-       call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
++       keepj call s:RemoteSystem(exe." ".fname)
+       endif
+-      break
++     else
++      keepj call netrw#ErrorMsg(s:WARNING,"unable to apply<".exe."> to file<".fname.">",50)
+      endif
+-     unlet sfx
+-    endfor
++    endif
++    unlet sfx
++
+     if exists("exe")
+      unlet exe
+     elseif a:islocal
+@@ -4429,12 +5476,13 @@
+      call system(netrw#WinPath(g:netrw_compress)." ".shellescape(s:ComposePath(b:netrw_curdir,fname)))
+     else
+      " fname not a compressed file, so compress it
+-     call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
++     keepj call s:RemoteSystem(netrw#WinPath(g:netrw_compress)." ".shellescape(fname))
+     endif
+-   endfor
++   endfor	" for every file in the marked list
++
+    call s:NetrwUnmarkList(curbufnr,curdir)
+-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-   call netrw#NetrwRestorePosn(svpos)
++   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
+   endif
+ "  call Dret("s:NetrwMarkFileCompress")
+ endfun
+@@ -4446,42 +5494,112 @@
+ "                      directories.  Uses the local-buffer marked file list.
+ "                      Returns 1=success  (used by NetrwMarkFileMove())
+ "                              0=failure
+-fun! s:NetrwMarkFileCopy(islocal)
+-"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---').">")
++fun! s:NetrwMarkFileCopy(islocal,...)
++"  call Dfunc("s:NetrwMarkFileCopy(islocal=".a:islocal.") target<".(exists("s:netrwmftgt")? s:netrwmftgt : '---')."> a:0=".a:0)
+ 
+-  " sanity checks
+-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
+-   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+-"   call Dret("s:NetrwMarkFileCopy 0")
+-   return 0
++  if !exists("b:netrw_curdir")
++   let b:netrw_curdir= getcwd()
++"   call Decho("set b:netrw_curdir<".b:netrw_curdir."> (used getcwd)")
++  endif
++  let curdir   = b:netrw_curdir
++  let curbufnr = bufnr("%")
++
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileCopy")
++   return
+   endif
+-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
+   if !exists("s:netrwmftgt")
+-   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
++   keepj call netrw#ErrorMsg(s:ERROR,"your marked file target is empty! (:help netrw-mt)",67)
+ "   call Dret("s:NetrwMarkFileCopy 0")
+    return 0
+   endif
+ "  call Decho("sanity chk passed: s:netrwmftgt<".s:netrwmftgt.">")
+-  let curdir   = b:netrw_curdir
+-  let curbufnr = bufnr("%")
+ 
+   if      a:islocal &&  s:netrwmftgt_islocal
+    " Copy marked files, local directory to local directory
+ "   call Decho("copy from local to local")
+-   let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
+-"   call Decho("system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt).")")
+-   call system(netrw#WinPath(g:netrw_localcopycmd)." ".args." ".shellescape(s:netrwmftgt))
++   if !executable(g:netrw_localcopycmd) && g:netrw_localcopycmd !~ '\<cmd\s'
++    call netrw#ErrorMsg(s:ERROR,"g:netrw_localcopycmd<".g:netrw_localcopycmd."> not executable on your system, aborting",91)
++"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localcopycmd<".g:netrw_localcopycmd."> n/a!")
++    return
++   endif
++
++   " copy marked files while within the same directory (ie. allow renaming)
++   if simplify(s:netrwmftgt) == simplify(b:netrw_curdir)
++    if len(s:netrwmarkfilelist_{bufnr('%')}) == 1
++     " only one marked file
++     let args    = shellescape(b:netrw_curdir."/".s:netrwmarkfilelist_{bufnr('%')}[0])
++     let oldname = s:netrwmarkfilelist_{bufnr('%')}[0]
++    elseif a:0 == 1
++     " this happens when the next case was used to recursively call s:NetrwMarkFileCopy()
++     let args    = shellescape(b:netrw_curdir."/".a:1)
++     let oldname = a:1
++    else
++     " copy multiple marked files inside the same directory
++     let s:recursive= 1
++     for oldname in s:netrwmarkfilelist_{bufnr("%")}
++      let ret= s:NetrwMarkFileCopy(a:islocal,oldname)
++      if ret == 0
++       break
++      endif
++     endfor
++     unlet s:recursive
++     call s:NetrwUnmarkList(curbufnr,curdir)
++"     call Dret("s:NetrwMarkFileCopy ".ret)
++     return ret
++    endif
++
++    call inputsave()
++    let newname= input("Copy ".oldname." to : ",oldname,"file")
++    call inputrestore()
++    if newname == ""
++"     call Dret("s:NetrwMarkFileCopy 0")
++     return 0
++    endif
++    let args= shellescape(oldname)
++    let tgt = shellescape(s:netrwmftgt.'/'.newname)
++   else
++    let args= join(map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),"shellescape(b:netrw_curdir.\"/\".v:val)"))
++    let tgt = shellescape(s:netrwmftgt)
++   endif
++   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
++    let args= substitute(args,'/','\\','g')
++    let tgt = substitute(tgt, '/','\\','g')
++   endif
++   if g:netrw_localcopycmd =~ '\s'
++    let copycmd     = substitute(g:netrw_localcopycmd,'\s.*$','','')
++    let copycmdargs = substitute(g:netrw_localcopycmd,'^.\{-}\(\s.*\)$','\1','')
++    let copycmd     = netrw#WinPath(copycmd).copycmdargs
++   else
++    let copycmd = netrw#WinPath(g:netrw_localcopycmd)
++   endif
++"   call Decho("args   <".args.">")
++"   call Decho("tgt    <".tgt.">")
++"   call Decho("copycmd<".copycmd.">")
++"   call Decho("system(".copycmd." ".args." ".tgt.")")
++   call system(copycmd." ".args." ".tgt)
++   if v:shell_error != 0
++    call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localcopycmd<".g:netrw_localcopycmd.">; it doesn't work!",80)
++"    call Dret("s:NetrwMarkFileCopy 0 : failed: system(".g:netrw_localcopycmd." ".args." ".shellescape(s:netrwmftgt))
++    return 0
++   endif
+ 
+   elseif  a:islocal && !s:netrwmftgt_islocal
+    " Copy marked files, local directory to remote directory
+ "   call Decho("copy from local to remote")
+-   call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
++   keepj call s:NetrwUpload(s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+ 
+   elseif !a:islocal &&  s:netrwmftgt_islocal
++   " Copy marked files, remote directory to local directory
+ "   call Decho("copy from remote to local")
+-   call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
++   keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},s:netrwmftgt)
+ 
+   elseif !a:islocal && !s:netrwmftgt_islocal
++   " Copy marked files, remote directory to remote directory
+ "   call Decho("copy from remote to remote")
+    let curdir = getcwd()
+    let tmpdir = s:GetTempfile("")
+@@ -4491,19 +5609,29 @@
+    if exists("*mkdir")
+     call mkdir(tmpdir)
+    else
+-    exe "sil! !".g:netrw_local_mkdir.' '.shellescape(tmpdir,1)
++    exe "sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1)
++    if v:shell_error != 0
++     call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localmkdir<".g:netrw_localmkdir."> to something that works",80)
++"     call Dret("s:NetrwMarkFileCopy : failed: sil! !".g:netrw_localmkdir.' '.shellescape(tmpdir,1) )
++     return
++    endif
+    endif
+    if isdirectory(tmpdir)
+     exe "keepj lcd ".fnameescape(tmpdir)
+-    call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
++    keepj call netrw#NetrwObtain(a:islocal,s:netrwmarkfilelist_{bufnr('%')},tmpdir)
+     let localfiles= map(deepcopy(s:netrwmarkfilelist_{bufnr('%')}),'substitute(v:val,"^.*/","","")')
+-    call s:NetrwUpload(localfiles,s:netrwmftgt)
++    keepj call s:NetrwUpload(localfiles,s:netrwmftgt)
+     if getcwd() == tmpdir
+      for fname in s:netrwmarkfilelist_{bufnr('%')}
+-      call s:NetrwDelete(fname)
++      keepj call s:NetrwDelete(fname)
+      endfor
+      exe "keepj lcd ".fnameescape(curdir)
+-     exe "sil !".g:netrw_local_rmdir." ".shellescape(tmpdir,1)
++     exe "sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1)
++     if v:shell_error != 0
++      call netrw#ErrorMsg(s:WARNING,"consider setting g:netrw_localrmdir<".g:netrw_localrmdir."> to something that works",80)
++"      call Dret("s:NetrwMarkFileCopy : failed: sil !".g:netrw_localrmdir." ".shellescape(tmpdir,1) )
++      return
++     endif
+     else
+      exe "keepj lcd ".fnameescape(curdir)
+     endif
+@@ -4513,20 +5641,21 @@
+   " -------
+   " cleanup
+   " -------
+-"  call Decho("cleanup")
+-
+-  " remove markings from local buffer
+-  call s:NetrwUnmarkList(curbufnr,curdir)
++"   call Decho("cleanup")
++  if !exists("s:recursive")
++   " remove markings from local buffer
++   call s:NetrwUnmarkList(curbufnr,curdir)
++  endif
+ 
+   " refresh buffers
+   if !s:netrwmftgt_islocal
+    call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
+   endif
+   if a:islocal
+-   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
++   keepj call s:NetrwRefreshDir(a:islocal,curdir)
+   endif
+   if g:netrw_fastbrowse <= 1
+-   call s:LocalBrowseShellCmdRefresh()
++   keepj call s:LocalBrowseShellCmdRefresh()
+   endif
+   
+ "  call Dret("s:NetrwMarkFileCopy 1")
+@@ -4542,7 +5671,15 @@
+ "  call Dfunc("s:NetrwMarkFileDiff(islocal=".a:islocal.") b:netrw_curdir<".b:netrw_curdir.">")
+   let curbufnr= bufnr("%")
+ 
+-  if exists("s:netrwmarkfilelist_{curbufnr}")
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileDiff")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
++  if exists("s:netrwmarkfilelist_{."curbufnr}")
+    let cnt    = 0
+    let curdir = b:netrw_curdir
+    for fname in s:netrwmarkfilelist
+@@ -4575,21 +5712,62 @@
+ 
+   let curdir   = b:netrw_curdir
+   let curbufnr = bufnr("%")
++
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileEdit")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
+   if exists("s:netrwmarkfilelist_{curbufnr}")
+    call s:SetRexDir(a:islocal,curdir)
+    let flist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
+    " unmark markedfile list
+ "   call s:NetrwUnmarkList(curbufnr,curdir)
+    call s:NetrwUnmarkAll()
+-"   call Decho("exe silent args ".flist)
+-   exe "silent args ".flist
++"   call Decho("exe sil args ".flist)
++   exe "sil args ".flist
+   endif
++  echo "(use :bn, :bp to navigate files; :Rex to return)"
+   
+ "  call Dret("s:NetrwMarkFileEdit")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary command on marked files, one at a time {{{2
++" s:NetrwMarkFileQFEL: convert a quickfix-error list into a marked file list {{{2
++fun! s:NetrwMarkFileQFEL(islocal,qfel)
++"  call Dfunc("s:NetrwMarkFileQFEL(islocal=".a:islocal.",qfel)")
++  call s:NetrwUnmarkAll()
++  let curbufnr= bufnr("%")
++
++  if !empty(a:qfel)
++   for entry in a:qfel
++    let bufnmbr= entry["bufnr"]
++"    call Decho("bufname(".bufnmbr.")<".bufname(bufnmbr)."> line#".entry["lnum"]." text=".entry["text"])
++    if !exists("s:netrwmarkfilelist_{curbufnr}")
++"     call Decho("case: no marked file list")
++     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
++    elseif index(s:netrwmarkfilelist_{curbufnr},bufname(bufnmbr)) == -1
++     " s:NetrwMarkFile will remove duplicate entries from the marked file list.
++     " So, this test lets two or more hits on the same pattern to be ignored.
++"     call Decho("case: ".bufname(bufnmbr)." not currently in marked file list")
++     call s:NetrwMarkFile(a:islocal,bufname(bufnmbr))
++    else
++"     call Decho("case: ".bufname(bufnmbr)." already in marked file list")
++    endif
++   endfor
++   echo "(use me to edit marked files)"
++  else
++   call netrw#ErrorMsg(s:WARNING,"can't convert quickfix error list; its empty!",92)
++  endif
++
++"  call Dret("s:NetrwMarkFileQFEL")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwMarkFileExe: (invoked by mx) execute arbitrary system command on marked files, one at a time {{{2
+ "                     Uses the local marked-file list.
+ fun! s:NetrwMarkFileExe(islocal)
+ "  call Dfunc("s:NetrwMarkFileExe(islocal=".a:islocal.")")
+@@ -4597,40 +5775,166 @@
+   let curdir   = b:netrw_curdir
+   let curbufnr = bufnr("%")
+ 
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileExe")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
+   if exists("s:netrwmarkfilelist_{curbufnr}")
+    " get the command
+    call inputsave()
+    let cmd= input("Enter command: ","","file")
+    call inputrestore()
+ "   call Decho("cmd<".cmd.">")
++   if cmd == ""
++"    "   call Dret("s:NetrwMarkFileExe : early exit, empty command")
++    return
++   endif
++
++   " apply command to marked files.  Substitute: filename -> %
++   " If no %, then append a space and the filename to the command
++   for fname in s:netrwmarkfilelist_{curbufnr}
++    if a:islocal
++     if g:netrw_keepdir
++      let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname)))
++     endif
++    else
++     let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname))
++    endif
++    if cmd =~ '%'
++     let xcmd= substitute(cmd,'%',fname,'g')
++    else
++     let xcmd= cmd.' '.fname
++    endif
++    if a:islocal
++"     call Decho("local: xcmd<".xcmd.">")
++     let ret= system(xcmd)
++    else
++"     call Decho("remote: xcmd<".xcmd.">")
++     let ret= s:RemoteSystem(xcmd)
++    endif
++    if v:shell_error < 0
++     keepj call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
++     break
++    else
++     echo ret
++    endif
++   endfor
++
++   " unmark marked file list
++   call s:NetrwUnmarkList(curbufnr,curdir)
++
++   " refresh the listing
++   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
++  else
++   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
++  endif
++  
++"  call Dret("s:NetrwMarkFileExe")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwMarkHideSfx: (invoked by mh) (un)hide files having same suffix
++"                  as the marked file(s) (toggles suffix presence)
++"                  Uses the local marked file list.
++fun! s:NetrwMarkHideSfx(islocal)
++"  call Dfunc("s:NetrwMarkHideSfx(islocal=".a:islocal.")")
++  let svpos    = netrw#NetrwSavePosn()
++  let curbufnr = bufnr("%")
++
++  " s:netrwmarkfilelist_{curbufnr}: the List of marked files
++  if exists("s:netrwmarkfilelist_{curbufnr}")
++
++   for fname in s:netrwmarkfilelist_{curbufnr}
++"     call Decho("s:NetrwMarkFileCopy: fname<".fname.">")
++     " construct suffix pattern
++     if fname =~ '\.'
++      let sfxpat= "^.*".substitute(fname,'^.*\(\.[^. ]\+\)$','\1','')
++     else
++      let sfxpat= '^\%(\%(\.\)\@!.\)*$'
++     endif
++     " determine if its in the hiding list or not
++     let inhidelist= 0
++     if g:netrw_list_hide != ""
++      let itemnum = 0
++      let hidelist= split(g:netrw_list_hide,',')
++      for hidepat in hidelist
++       if sfxpat == hidepat
++        let inhidelist= 1
++        break
++       endif
++       let itemnum= itemnum + 1
++      endfor
++     endif
++"     call Decho("fname<".fname."> inhidelist=".inhidelist." sfxpat<".sfxpat.">")
++     if inhidelist
++      " remove sfxpat from list
++      call remove(hidelist,itemnum)
++      let g:netrw_list_hide= join(hidelist,",")
++     elseif g:netrw_list_hide != ""
++      " append sfxpat to non-empty list
++      let g:netrw_list_hide= g:netrw_list_hide.",".sfxpat
++     else
++      " set hiding list to sfxpat
++      let g:netrw_list_hide= sfxpat
++     endif
++    endfor
++
++   " refresh the listing
++   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
++  else
++   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
++  endif
++
++"  call Dret("s:NetrwMarkHideSfx")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwMarkFileVimCmd: (invoked by mX) execute arbitrary vim command on marked files, one at a time {{{2
++"                     Uses the local marked-file list.
++fun! s:NetrwMarkFileVimCmd(islocal)
++"  call Dfunc("s:NetrwMarkFileVimCmd(islocal=".a:islocal.")")
++  let svpos    = netrw#NetrwSavePosn()
++  let curdir   = b:netrw_curdir
++  let curbufnr = bufnr("%")
++
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileVimCmd")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
++  if exists("s:netrwmarkfilelist_{curbufnr}")
++   " get the command
++   call inputsave()
++   let cmd= input("Enter vim command: ","","file")
++   call inputrestore()
++"   call Decho("cmd<".cmd.">")
++   if cmd == ""
++"    "   call Dret("s:NetrwMarkFileVimCmd : early exit, empty command")
++    return
++   endif
+ 
+    " apply command to marked files.  Substitute: filename -> %
+    " If no %, then append a space and the filename to the command
+    for fname in s:netrwmarkfilelist_{curbufnr}
++"    call Decho("fname<".fname.">")
+     if a:islocal
+-     if g:netrw_keepdir
+-      let fname= shellescape(netrw#WinPath(s:ComposePath(curdir,fname)))
+-     endif
+-    else
+-     let fname= shellescape(netrw#WinPath(b:netrw_curdir.fname))
+-    endif
+-    if cmd =~ '%'
+-     let xcmd= substitute(cmd,'%',fname,'g')
+-    else
+-     let xcmd= cmd.' '.fname
+-    endif
+-    if a:islocal
+-"     call Decho("local: xcmd<".xcmd.">")
+-     let ret= system(xcmd)
+-    else
+-"     call Decho("remote: xcmd<".xcmd.">")
+-     let ret= s:RemoteSystem(xcmd)
+-    endif
+-    if v:shell_error < 0
+-     call netrw#ErrorMsg(s:ERROR,"command<".xcmd."> failed, aborting",54)
+-     break
++     1split
++     exe "sil! keepalt e ".fnameescape(fname)
++"     call Decho("local<".fname.">: exe ".cmd)
++     exe cmd
++     exe "sil! keepalt wq!"
+     else
+-     echo ret
++"     call Decho("remote<".fname.">: exe ".cmd." : NOT SUPPORTED YET")
++     echo "sorry, \"mX\" not supported yet for remote files"
+     endif
+    endfor
+ 
+@@ -4638,13 +5942,13 @@
+    call s:NetrwUnmarkList(curbufnr,curdir)
+ 
+    " refresh the listing
+-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-   call netrw#NetrwRestorePosn(svpos)
++   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
+   else
+-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
++   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+   endif
+   
+-"  call Dret("s:NetrwMarkFileExe")
++"  call Dret("s:NetrwMarkFileVimCmd")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+@@ -4695,10 +5999,10 @@
+     endfor
+ 
+    " refresh the listing
+-   call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-   call netrw#NetrwRestorePosn(svpos)
++   keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
+   else
+-   call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
++   keepj call netrw#ErrorMsg(s:ERROR,"no files marked!",59)
+   endif
+ 
+ "  call Dret("s:NetrwMarkHideSfx")
+@@ -4716,30 +6020,47 @@
+ "  call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
+    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "fnameescape(v:val)"))
+    call s:NetrwUnmarkAll()
++  else
++"   call Decho('no marked files, using "*"')
++   let netrwmarkfilelist= "*"
++  endif
+ 
+-   " ask user for pattern
+-   call inputsave()
+-   let pat= input("Enter pattern: ","")
+-   call inputrestore()
+-   if pat !~ '^\s'
+-    if pat !~ '^/'
+-     let pat= '/'.pat.'/'
+-    endif
+-    let pat= " ".pat
+-   endif
++  " ask user for pattern
++  call inputsave()
++  let pat= input("Enter pattern: ","")
++  call inputrestore()
++  let patbang = ""
++  if pat =~ '^!'
++   let patbang = "!"
++   let pat= strpart(pat,2)
++  endif
++  if pat =~ '^\i'
++   let pat    = escape(pat,'/')
++   let pat    = '/'.pat.'/'
++  else
++   let nonisi = pat[0]
++  endif
++
++  " use vimgrep for both local and remote
++"  call Decho("exe vimgrep".patbang." ".pat." ".netrwmarkfilelist)
++  try
++   exe "keepj noautocmd vimgrep".patbang." ".pat." ".netrwmarkfilelist
++  catch /^Vim\%((\a\+)\)\=:E480/
++   keepj call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pat.">",76)
++"   call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pat.">")
++   return
++  endtry
++  echo "(use :cn, :cp to navigate, :Rex to return)"
+ 
+-   " use vimgrep for both local and remote
+-"   call Decho("exe vimgrep".pat." ".netrwmarkfilelist)
+-   try
+-    exe "keepj noautocmd vimgrep".pat." ".netrwmarkfilelist
+-    catch /^Vim\%((\a\+)\)\=:E480/
+-     call netrw#ErrorMsg(s:WARNING,"no match with pattern<".pattern.">",76)
+-"     call Dret("s:NetrwMarkFileGrep : unable to find pattern<".pattern.">")
+-     return
+-   endtry
++  2match none
++  keepj call netrw#NetrwRestorePosn(svpos)
+ 
+-   2match none
+-   call netrw#NetrwRestorePosn(svpos)
++  if exists("nonisi")
++   " original, user-supplied pattern did not begin with a character from isident
++"   call Decho("looking for trailing nonisi<".nonisi."> followed by a j, gj, or jg")
++   if pat =~ nonisi.'j$\|'.nonisi.'gj$\|'.nonisi.'jg$'
++    call s:NetrwMarkFileQFEL(a:islocal,getqflist())
++   endif
+   endif
+ 
+ "  call Dret("s:NetrwMarkFileGrep")
+@@ -4756,14 +6077,15 @@
+   let curbufnr = bufnr("%")
+ 
+   " sanity check
+-  if !exists("s:netrwmarkfilelist_{bufnr('%')}") || empty(s:netrwmarkfilelist_{bufnr('%')})
+-   call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
+ "   call Dret("s:NetrwMarkFileMove")
+    return
+   endif
+-"  call Decho("sanity chk passed: s:netrwmarkfilelist_".bufnr('%')."<".string(s:netrwmarkfilelist_{bufnr('%')}))
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
+   if !exists("s:netrwmftgt")
+-   call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
++   keepj call netrw#ErrorMsg(2,"your marked file target is empty! (:help netrw-mt)",67)
+ "   call Dret("s:NetrwMarkFileCopy 0")
+    return 0
+   endif
+@@ -4773,25 +6095,47 @@
+    " move: local -> local
+ "   call Decho("move from local to local")
+ "   call Decho("(s:NetrwMarkFileMove) local to local move")
+-   if executable(g:netrw_localmovecmd)
+-    for fname in s:netrwmarkfilelist_{bufnr("%")}
+-"     call Decho("system(".g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt).")")
+-     let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".shellescape(s:netrwmftgt))
+-     if v:shell_error < 0
+-      call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> failed, aborting",54)
+-      break
+-     endif
+-    endfor
++   if !executable(g:netrw_localmovecmd) && g:netrw_localmovecmd !~ '\<cmd\s'
++    call netrw#ErrorMsg(s:ERROR,"g:netrw_localmovecmd<".g:netrw_localmovecmd."> not executable on your system, aborting",90)
++"    call Dfunc("s:NetrwMarkFileMove : g:netrw_localmovecmd<".g:netrw_localmovecmd."> n/a!")
++    return
++   endif
++   let tgt         = shellescape(s:netrwmftgt)
++"   call Decho("tgt<".tgt.">")
++   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
++    let tgt         = substitute(tgt, '/','\\','g')
++"    call Decho("windows exception: tgt<".tgt.">")
++    if g:netrw_localmovecmd =~ '\s'
++     let movecmd     = substitute(g:netrw_localmovecmd,'\s.*$','','')
++     let movecmdargs = substitute(g:netrw_localmovecmd,'^.\{-}\(\s.*\)$','\1','')
++     let movecmd     = netrw#WinPath(movecmd).movecmdargs
++"     call Decho("windows exception: movecmd<".movecmd."> (#1: had a space)")
++    else
++     let movecmd = netrw#WinPath(movecmd)
++"     call Decho("windows exception: movecmd<".movecmd."> (#2: no space)")
++    endif
+    else
+-    call netrw#ErrorMsg(s:ERROR,"command<".g:netrw_localmovecmd."> is not executable!",57)
++    let movecmd = netrw#WinPath(g:netrw_localmovecmd)
++"    call Decho("movecmd<".movecmd."> (#3 linux or cygwin)")
+    endif
++   for fname in s:netrwmarkfilelist_{bufnr("%")}
++"    call Decho("system(".movecmd." ".shellescape(fname)." ".tgt.")")
++    if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
++     let fname= substitute(fname,'/','\\','g')
++    endif
++    let ret= system(g:netrw_localmovecmd." ".shellescape(fname)." ".tgt)
++    if v:shell_error != 0
++     call netrw#ErrorMsg(s:ERROR,"tried using g:netrw_localmovecmd<".g:netrw_localmovecmd.">; it doesn't work!",54)
++     break
++    endif
++   endfor
+ 
+   elseif  a:islocal && !s:netrwmftgt_islocal
+    " move: local -> remote
+ "   call Decho("move from local to remote")
+ "   call Decho("copy")
+    let mflist= s:netrwmarkfilelist_{bufnr("%")}
+-   call s:NetrwMarkFileCopy(a:islocal)
++   keepj call s:NetrwMarkFileCopy(a:islocal)
+ "   call Decho("remove")
+    for fname in mflist
+     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
+@@ -4804,7 +6148,7 @@
+ "   call Decho("move from remote to local")
+ "   call Decho("copy")
+    let mflist= s:netrwmarkfilelist_{bufnr("%")}
+-   call s:NetrwMarkFileCopy(a:islocal)
++   keepj call s:NetrwMarkFileCopy(a:islocal)
+ "   call Decho("remove")
+    for fname in mflist
+     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
+@@ -4817,7 +6161,7 @@
+ "   call Decho("move from remote to remote")
+ "   call Decho("copy")
+    let mflist= s:netrwmarkfilelist_{bufnr("%")}
+-   call s:NetrwMarkFileCopy(a:islocal)
++   keepj call s:NetrwMarkFileCopy(a:islocal)
+ "   call Decho("remove")
+    for fname in mflist
+     let barefname = substitute(fname,'^\(.*/\)\(.\{-}\)$','\2','')
+@@ -4836,13 +6180,16 @@
+ 
+   " refresh buffers
+   if !s:netrwmftgt_islocal
+-   call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
++"   call Decho("refresh netrwmftgt<".s:netrwmftgt.">")
++   keepj call s:NetrwRefreshDir(s:netrwmftgt_islocal,s:netrwmftgt)
+   endif
+   if a:islocal
+-   call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
++"   call Decho("refresh b:netrw_curdir<".b:netrw_curdir.">")
++   keepj call s:NetrwRefreshDir(a:islocal,b:netrw_curdir)
+   endif
+   if g:netrw_fastbrowse <= 1
+-   call s:LocalBrowseShellCmdRefresh()
++"   call Decho("since g:netrw_fastbrowse=".g:netrw_fastbrowse.", perform shell cmd refresh")
++   keepj call s:LocalBrowseShellCmdRefresh()
+   endif
+   
+ "  call Dret("s:NetrwMarkFileMove")
+@@ -4854,6 +6201,14 @@
+ fun! s:NetrwMarkFilePrint(islocal)
+ "  call Dfunc("s:NetrwMarkFilePrint(islocal=".a:islocal.")")
+   let curbufnr= bufnr("%")
++
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFilePrint")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+   if exists("s:netrwmarkfilelist_{curbufnr}")
+    let netrwmarkfilelist = s:netrwmarkfilelist_{curbufnr}
+    let curdir            = b:netrw_curdir
+@@ -4868,8 +6223,8 @@
+     endif
+     1split
+     " the autocmds will handle both local and remote files
+-"    call Decho("exe silent e ".escape(fname,' '))
+-    exe "silent e ".fnameescape(fname)
++"    call Decho("exe sil e ".escape(fname,' '))
++    exe "sil e ".fnameescape(fname)
+ "    call Decho("hardcopy")
+     hardcopy
+     q
+@@ -4882,7 +6237,7 @@
+ " ---------------------------------------------------------------------
+ " s:NetrwMarkFileRegexp: (invoked by mr) This function is used to mark {{{2
+ "                        files when given a regexp (for which a prompt is
+-"                        issued).
++"                        issued) (matches to name of files).
+ fun! s:NetrwMarkFileRegexp(islocal)
+ "  call Dfunc("s:NetrwMarkFileRegexp(islocal=".a:islocal.")")
+ 
+@@ -4894,15 +6249,15 @@
+   if a:islocal
+    " get the matching list of files using local glob()
+ "   call Decho("handle local regexp")
+-   let dirname  = escape(b:netrw_curdir,g:netrw_glob_escape)
+-   let files = glob(s:ComposePath(dirname,regexp))
++   let dirname = escape(b:netrw_curdir,g:netrw_glob_escape)
++   let files   = glob(s:ComposePath(dirname,regexp))
+ "   call Decho("files<".files.">")
+    let filelist= split(files,"\n")
+ 
+   " mark the list of files
+   for fname in filelist
+ "   call Decho("fname<".fname.">")
+-   call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','',''))
++   keepj call s:NetrwMarkFile(a:islocal,substitute(fname,'^.*/','',''))
+   endfor
+ 
+   else
+@@ -4915,8 +6270,8 @@
+    set ei=all ma
+ "   call Decho("set ei=all ma")
+    1split
+-   call s:NetrwEnew()
+-   call s:NetrwSafeOptions()
++   keepj call s:NetrwEnew()
++   keepj call s:NetrwSafeOptions()
+    sil keepj norm! "ap
+    keepj 2
+    let bannercnt= search('^" =====','W')
+@@ -4942,12 +6297,13 @@
+    let filelist= getline(1,line("$"))
+    q!
+    for filename in filelist
+-    call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
++    keepj call s:NetrwMarkFile(a:islocal,substitute(filename,'^.*/','',''))
+    endfor
+    unlet filelist
+    let @a  = areg
+    let &ei = eikeep
+   endif
++  echo "  (use me to edit marked files)"
+ 
+ "  call Dret("s:NetrwMarkFileRegexp")
+ endfun
+@@ -4958,6 +6314,14 @@
+ fun! s:NetrwMarkFileSource(islocal)
+ "  call Dfunc("s:NetrwMarkFileSource(islocal=".a:islocal.")")
+   let curbufnr= bufnr("%")
++
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileSource")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
+   if exists("s:netrwmarkfilelist_{curbufnr}")
+    let netrwmarkfilelist = s:netrwmarkfilelist_{bufnr("%")}
+    let curdir            = b:netrw_curdir
+@@ -4988,6 +6352,14 @@
+   let curdir   = b:netrw_curdir
+   let curbufnr = bufnr("%")
+ 
++  " sanity check
++  if !exists("s:netrwmarkfilelist_{curbufnr}") || empty(s:netrwmarkfilelist_{curbufnr})
++   keepj call netrw#ErrorMsg(2,"there are no marked files in this window (:help netrw-mf)",66)
++"   call Dret("s:NetrwMarkFileTag")
++   return
++  endif
++"  call Decho("sanity chk passed: s:netrwmarkfilelist_".curbufnr."<".string(s:netrwmarkfilelist_{curbufnr}))
++
+   if exists("s:netrwmarkfilelist")
+ "   call Decho("s:netrwmarkfilelist".string(s:netrwmarkfilelist).">")
+    let netrwmarkfilelist= join(map(deepcopy(s:netrwmarkfilelist), "shellescape(v:val,".!a:islocal.")"))
+@@ -5023,9 +6395,9 @@
+ " ---------------------------------------------------------------------
+ " s:NetrwMarkFileTgt:  (invoked by mt) This function sets up a marked file target {{{2
+ "   Sets up two variables, 
+-"     s:netrwmftgt : holds the target directory
++"     s:netrwmftgt         : holds the target directory
+ "     s:netrwmftgt_islocal : 0=target directory is remote
+-"                    1=target directory is local
++"                            1=target directory is local
+ fun! s:NetrwMarkFileTgt(islocal)
+ "  call Dfunc("s:NetrwMarkFileTgt(islocal=".a:islocal.")")
+   let svpos  = netrw#NetrwSavePosn()
+@@ -5037,9 +6409,21 @@
+ 
+   " set up target
+   if line(".") < w:netrw_bannercnt
+-   " if cursor in banner region, use b:netrw_curdir for the target
+-   let s:netrwmftgt= b:netrw_curdir
+-"   call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
++   " if cursor in banner region, use b:netrw_curdir for the target unless its already the target
++   if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal") && s:netrwmftgt == b:netrw_curdir
++"    call Decho("cursor in banner region, and target already is <".b:netrw_curdir.">: removing target")
++    unlet s:netrwmftgt s:netrwmftgt_islocal
++    if g:netrw_fastbrowse <= 1
++     call s:LocalBrowseShellCmdRefresh()
++    endif
++    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++    call netrw#NetrwRestorePosn(svpos)
++"    call Dret("s:NetrwMarkFileTgt : removed target")
++    return
++   else
++    let s:netrwmftgt= b:netrw_curdir
++"    call Decho("inbanner: s:netrwmftgt<".s:netrwmftgt.">")
++   endif
+ 
+   else
+    " get word under cursor.
+@@ -5085,6 +6469,7 @@
+ " s:NetrwOpenFile: query user for a filename and open it {{{2
+ fun! s:NetrwOpenFile(islocal)
+ "  call Dfunc("s:NetrwOpenFile(islocal=".a:islocal.")")
++  let ykeep= @@
+   call inputsave()
+   let fname= input("Enter filename: ")
+   call inputrestore()
+@@ -5108,11 +6493,14 @@
+   else
+    exe "e ".fnameescape(fname)
+   endif
++  let @@= ykeep
+ "  call Dret("s:NetrwOpenFile")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " s:NetrwUnmarkList: delete local marked file lists and remove their contents from the global marked-file list {{{2
++"   User access provided by the <mu> mapping. (see :help netrw-mu)
++"   Used by many MarkFile functions.
+ fun! s:NetrwUnmarkList(curbufnr,curdir)
+ "  call Dfunc("s:NetrwUnmarkList(curbufnr=".a:curbufnr." curdir<".a:curdir.">)")
+ 
+@@ -5144,13 +6532,13 @@
+   if exists("s:netrwmarkfilelist")
+    unlet s:netrwmarkfilelist
+   endif
+-  silent call s:NetrwUnmarkAll2()
++  sil call s:NetrwUnmarkAll2()
+   2match none
+ "  call Dret("s:NetrwUnmarkAll")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" s:NetrwUnmarkAll2: {{{2
++" s:NetrwUnmarkAll2: unmark all files from all buffers {{{2
+ fun! s:NetrwUnmarkAll2()
+ "  call Dfunc("s:NetrwUnmarkAll2()")
+   redir => netrwmarkfilelist_let
+@@ -5181,318 +6569,133 @@
+    unlet s:netrwmarkfilelist
+    unlet s:netrwmarkfilelist_{curbufnr}
+    unlet s:netrwmarkfilemtch_{curbufnr}
+-   2match none
+-  endif
+-
+-"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
+-"  call Dret("s:NetrwUnMarkFile")
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" s:NetrwMenu: generates the menu for gvim and netrw {{{2
+-fun! s:NetrwMenu(domenu)
+-
+-  if !exists("g:NetrwMenuPriority")
+-   let g:NetrwMenuPriority= 80
+-  endif
+-
+-  if has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
+-"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
+-
+-   if !exists("s:netrw_menu_enabled") && a:domenu
+-"    call Decho("initialize menu")
+-    let s:netrw_menu_enabled= 1
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.1     '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.5     '.g:NetrwTopLvlMenu.'-Sep1-	:'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.6     '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.7     '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2   '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3   '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4   '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5   '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.10    '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Create\ New\ File<tab>%	%'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.2  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.3  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.4  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.11.5  '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.1  '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2  '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.3  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4  '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.13    '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.1  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.2  '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.3  '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.4  '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.5  '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.6  '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.7  '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.8  '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.9  '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.10 '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.11 '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.12 '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.13 '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.14 '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.14.15 '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.15    '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1  '.g:NetrwTopLvlMenu.'Style.Listing\ Style\ (thin-long-wide-tree)<tab>i	i'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2  '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show<tab>a	a'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3  '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4  '.g:NetrwTopLvlMenu.'Style.Sorting\ Method\ (name-time-size)<tab>s	s'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.17    '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
+-    exe 'sil! menu '.g:NetrwMenuPriority.'.18    '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
+-    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
+-    let s:netrw_menucnt= 28
+-
+-   elseif !a:domenu
+-    let s:netrwcnt = 0
+-    let curwin     = winnr()
+-    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
+-    exe curwin."wincmd w"
+-
+-    if s:netrwcnt <= 1
+-"     call Decho("clear menus")
+-     exe 'sil! unmenu '.g:NetrwTopLvlMenu
+-"     call Decho('exe silent! unmenu '.g:NetrwTopLvlMenu.'*')
+-     sil! unlet s:netrw_menu_enabled
+-    endif
+-   endif
+-"   call Dret("NetrwMenu")
+-  endif
+-
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
+-"                Used by the O maps (as <SID>NetrwObtain())
+-fun! s:NetrwObtain(islocal)
+-"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
+-
+-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+-   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
+-   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
+-   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
+-  else
+-   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
+-  endif
+-
+-"  call Dret("NetrwObtain")
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" netrw#NetrwObtain: {{{2
+-"   netrw#NetrwObtain(islocal,fname[,tgtdirectory])
+-"     islocal=0  obtain from remote source
+-"            =1  obtain from local source
+-"     fname  :   a filename or a list of filenames
+-"     tgtdir :   optional place where files are to go  (not present, uses getcwd())
+-fun! netrw#NetrwObtain(islocal,fname,...)
+-"  call Dfunc("netrw#NetrwObtain(islocal=".a:islocal." fname<".((type(a:fname) == 1)? a:fname : string(a:fname)).">) a:0=".a:0)
+-  " NetrwStatusLine support - for obtaining support
+-
+-  if type(a:fname) == 1
+-   let fnamelist= [ a:fname ]
+-  elseif type(a:fname) == 3
+-   let fnamelist= a:fname
+-  else
+-   call netrw#ErrorMsg(s:ERROR,"attempting to use NetrwObtain on something not a filename or a list",62)
+-"   call Dret("netrw#NetrwObtain")
+-   return
+-  endif
+-"  call Decho("fnamelist<".string(fnamelist).">")
+-  if a:0 > 0
+-   let tgtdir= a:1
+-  else
+-   let tgtdir= getcwd()
+-  endif
+-"  call Decho("tgtdir<".tgtdir.">")
+-
+-  if exists("b:netrw_islocal") && b:netrw_islocal
+-   " obtain a file from local b:netrw_curdir to (local) tgtdir
+-"   call Decho("obtain a file from local ".b:netrw_curdir." to ".tgtdir)
+-   if exists("b:netrw_curdir") && getcwd() != b:netrw_curdir
+-    let topath= s:ComposePath(tgtdir,"")
+-    if (has("win32") || has("win95") || has("win64") || has("win16"))
+-     " transfer files one at time
+-"     call Decho("transfer files one at a time")
+-     for fname in fnamelist
+-"      call Decho("system(".g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath).")")
+-      call system(g:netrw_localcopycmd." ".shellescape(fname)." ".shellescape(topath))
+-     endfor
+-    else
+-     " transfer files with one command
+-"     call Decho("transfer files with one command")
+-     let filelist= join(map(deepcopy(fnamelist),"shellescape(v:val)"))
+-"     call Decho("system(".g:netrw_localcopycmd." ".filelist." ".shellescape(topath).")")
+-     call system(g:netrw_localcopycmd." ".filelist." ".shellescape(topath))
+-    endif
+-   elseif !exists("b:netrw_curdir")
+-    call netrw#ErrorMsg(s:ERROR,"local browsing directory doesn't exist!",36)
+-   else
+-    call netrw#ErrorMsg(s:WARNING,"local browsing directory and current directory are identical",37)
+-   endif
+-
+-  else
+-   " obtain files from remote b:netrw_curdir to local tgtdir
+-"   call Decho("obtain a file from remote ".b:netrw_curdir." to ".tgtdir)
+-   if type(a:fname) == 1
+-    call s:SetupNetrwStatusLine('%f %h%m%r%=%9*Obtaining '.a:fname)
+-   endif
+-   call s:NetrwMethod(b:netrw_curdir)
+-
+-   if b:netrw_method == 4
+-    " obtain file using scp
+-"    call Decho("obtain via scp (method#4)")
+-    if exists("g:netrw_port") && g:netrw_port != ""
+-     let useport= " ".g:netrw_scpport." ".g:netrw_port
+-    else
+-     let useport= ""
+-    endif
+-    if b:netrw_fname =~ '/'
+-     let path= substitute(b:netrw_fname,'^\(.*/\).\{-}$','\1','')
+-    else
+-     let path= ""
+-    endif
+-    let filelist= join(map(deepcopy(fnamelist),'shellescape(g:netrw_machine.":".path.v:val,1)'))
+-"    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1))
+-    exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".filelist." ".shellescape(tgtdir,1)
+-
+-   elseif b:netrw_method == 2
+-    " obtain file using ftp + .netrc
+-"     call Decho("obtain via ftp+.netrc (method #2)")
+-     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
+-     let tmpbufnr= bufnr("%")
+-     setlocal ff=unix
+-     if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+-      keepj put =g:netrw_ftpmode
+-"      call Decho("filter input: ".getline('$'))
+-     endif
+-
+-     if exists("b:netrw_fname") && b:netrw_fname != ""
+-      call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+-"      call Decho("filter input: ".getline('$'))
+-     endif
+-
+-     if exists("g:netrw_ftpextracmd")
+-      keepj put =g:netrw_ftpextracmd
+-"      call Decho("filter input: ".getline('$'))
+-     endif
+-     for fname in fnamelist
+-      call setline(line("$")+1,'get "'.fname.'"')
+-"      call Decho("filter input: ".getline('$'))
+-     endfor
+-     if exists("g:netrw_port") && g:netrw_port != ""
+-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+-     else
+-"      call Decho("executing: %!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+-     endif
+-     " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+-     if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+-      let debugkeep= &debug
+-      setlocal debug=msg
+-      call netrw#ErrorMsg(s:ERROR,getline(1),4)
+-      let &debug= debugkeep
+-     endif
+-
+-   elseif b:netrw_method == 3
+-    " obtain with ftp + machine, id, passwd, and fname (ie. no .netrc)
+-"    call Decho("obtain via ftp+mipf (method #3)")
+-    call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
+-    let tmpbufnr= bufnr("%")
+-    setlocal ff=unix
+-
+-    if exists("g:netrw_port") && g:netrw_port != ""
+-     keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+-"     call Decho("filter input: ".getline('$'))
+-    else
+-     keepj put ='open '.g:netrw_machine
+-"     call Decho("filter input: ".getline('$'))
+-    endif
++   2match none
++  endif
+ 
+-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+-     keepj put =g:netrw_uid
+-"     call Decho("filter input: ".getline('$'))
+-     keepj put ='\"'.s:netrw_passwd.'\"'
+-"     call Decho("filter input: ".getline('$'))
+-    else
+-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+-"     call Decho("filter input: ".getline('$'))
+-    endif
++"  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  call netrw#NetrwRestorePosn(svpos)
++"  call Dret("s:NetrwUnMarkFile")
++endfun
+ 
+-    if exists("g:netrw_ftpmode") && g:netrw_ftpmode != ""
+-     keepj put =g:netrw_ftpmode
+-"     call Decho("filter input: ".getline('$'))
+-    endif
++" ---------------------------------------------------------------------
++" s:NetrwMenu: generates the menu for gvim and netrw {{{2
++fun! s:NetrwMenu(domenu)
+ 
+-    if exists("b:netrw_fname") && b:netrw_fname != ""
+-     keepj call setline(line("$")+1,'cd "'.b:netrw_fname.'"')
+-"     call Decho("filter input: ".getline('$'))
+-    endif
++  if !exists("g:NetrwMenuPriority")
++   let g:NetrwMenuPriority= 80
++  endif
+ 
+-    if exists("g:netrw_ftpextracmd")
+-     keepj put =g:netrw_ftpextracmd
+-"     call Decho("filter input: ".getline('$'))
+-    endif
++  if has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
++"   call Dfunc("NetrwMenu(domenu=".a:domenu.")")
+ 
+-    if exists("g:netrw_ftpextracmd")
+-     keepj put =g:netrw_ftpextracmd
+-"     call Decho("filter input: ".getline('$'))
+-    endif
+-    for fname in fnamelist
+-     keepj call setline(line("$")+1,'get "'.fname.'"')
+-    endfor
+-"    call Decho("filter input: ".getline('$'))
++   if !exists("s:netrw_menu_enabled") && a:domenu
++"    call Decho("initialize menu")
++    let s:netrw_menu_enabled= 1
++    exe 'sil! menu '.g:NetrwMenuPriority.'.1      '.g:NetrwTopLvlMenu.'Help<tab><F1>	<F1>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.5      '.g:NetrwTopLvlMenu.'-Sep1-	:'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.6      '.g:NetrwTopLvlMenu.'Go\ Up\ Directory<tab>-	-'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.7      '.g:NetrwTopLvlMenu.'Apply\ Special\ Viewer<tab>x	x'
++    if g:netrw_dirhistmax > 0
++     exe 'sil! menu '.g:NetrwMenuPriority.'.8.1   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Bookmark\ Current\ Directory<tab>mb	mb'
++     exe 'sil! menu '.g:NetrwMenuPriority.'.8.4   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Prev\ Dir\ (History)<tab>u	u'
++     exe 'sil! menu '.g:NetrwMenuPriority.'.8.5   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.Goto\ Next\ Dir\ (History)<tab>U	U'
++     exe 'sil! menu '.g:NetrwMenuPriority.'.8.6   '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History.List<tab>qb	qb'
++    else
++     exe 'sil! menu '.g:NetrwMenuPriority.'.8     '.g:NetrwTopLvlMenu.'Bookmarks\ and\ History	:echo "(disabled)"'."\<cr>"
++    endif
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.1    '.g:NetrwTopLvlMenu.'Browsing\ Control.Horizontal\ Split<tab>o	o'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.2    '.g:NetrwTopLvlMenu.'Browsing\ Control.Vertical\ Split<tab>v	v'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.3    '.g:NetrwTopLvlMenu.'Browsing\ Control.New\ Tab<tab>t	t'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.4    '.g:NetrwTopLvlMenu.'Browsing\ Control.Preview<tab>p	p'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.5    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ File\ Hiding\ List<tab><ctrl-h>'."	\<c-h>'"
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.6    '.g:NetrwTopLvlMenu.'Browsing\ Control.Edit\ Sorting\ Sequence<tab>S	S'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.7    '.g:NetrwTopLvlMenu.'Browsing\ Control.Quick\ Hide/Unhide\ Dot\ Files<tab>'."gh	gh"
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.8    '.g:NetrwTopLvlMenu.'Browsing\ Control.Refresh\ Listing<tab>'."<ctrl-l>	\<c-l>"
++    exe 'sil! menu '.g:NetrwMenuPriority.'.9.9    '.g:NetrwTopLvlMenu.'Browsing\ Control.Settings/Options<tab>:NetrwSettings	'.":NetrwSettings\<cr>"
++    exe 'sil! menu '.g:NetrwMenuPriority.'.10     '.g:NetrwTopLvlMenu.'Delete\ File/Directory<tab>D	D'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Create\ New\ File<tab>%	%'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.11.1   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Current\ Window<tab><cr>	'."\<cr>"
++    exe 'sil! menu '.g:NetrwMenuPriority.'.11.2   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.Preview\ File/Directory<tab>p	p'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.11.3   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ Previous\ Window<tab>P	P'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.11.4   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Window<tab>o	o'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.11.5   '.g:NetrwTopLvlMenu.'Edit\ File/Dir.In\ New\ Vertical\ Window<tab>v	v'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.12.1   '.g:NetrwTopLvlMenu.'Explore.Directory\ Name	:Explore '
++    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2   '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (curdir\ only)<tab>:Explore\ */	:Explore */'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.12.2   '.g:NetrwTopLvlMenu.'Explore.Filenames\ Matching\ Pattern\ (+subdirs)<tab>:Explore\ **/	:Explore **/'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.12.3   '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (curdir\ only)<tab>:Explore\ *//	:Explore *//'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Files\ Containing\ String\ Pattern\ (+subdirs)<tab>:Explore\ **//	:Explore **//'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Next\ Match<tab>:Nexplore	:Nexplore<cr>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.12.4   '.g:NetrwTopLvlMenu.'Explore.Prev\ Match<tab>:Pexplore	:Pexplore<cr>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.13     '.g:NetrwTopLvlMenu.'Make\ Subdirectory<tab>d	d'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.1   '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ File<tab>mf	mf'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.2   '.g:NetrwTopLvlMenu.'Marked\ Files.Mark\ Files\ by\ Regexp<tab>mr	mr'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.3   '.g:NetrwTopLvlMenu.'Marked\ Files.Hide-Show-List\ Control<tab>a	a'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.4   '.g:NetrwTopLvlMenu.'Marked\ Files.Copy\ To\ Target<tab>mc	mc'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.5   '.g:NetrwTopLvlMenu.'Marked\ Files.Delete<tab>D	D'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.6   '.g:NetrwTopLvlMenu.'Marked\ Files.Diff<tab>md	md'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.7   '.g:NetrwTopLvlMenu.'Marked\ Files.Edit<tab>me	me'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.8   '.g:NetrwTopLvlMenu.'Marked\ Files.Exe\ Cmd<tab>mx	mx'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.9   '.g:NetrwTopLvlMenu.'Marked\ Files.Move\ To\ Target<tab>mm	mm'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.10  '.g:NetrwTopLvlMenu.'Marked\ Files.Obtain<tab>O	O'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.11  '.g:NetrwTopLvlMenu.'Marked\ Files.Print<tab>mp	mp'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.12  '.g:NetrwTopLvlMenu.'Marked\ Files.Replace<tab>R	R'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.13  '.g:NetrwTopLvlMenu.'Marked\ Files.Set\ Target<tab>mt	mt'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.14  '.g:NetrwTopLvlMenu.'Marked\ Files.Tag<tab>mT	mT'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.14.15  '.g:NetrwTopLvlMenu.'Marked\ Files.Zip/Unzip/Compress/Uncompress<tab>mz	mz'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.15     '.g:NetrwTopLvlMenu.'Obtain\ File<tab>O	O'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.thin<tab>i	:let w:netrw_liststyle=0<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.long<tab>i	:let w:netrw_liststyle=1<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.wide<tab>i	:let w:netrw_liststyle=2<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.1.1 '.g:NetrwTopLvlMenu.'Style.Listing.tree<tab>i	:let w:netrw_liststyle=3<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.1 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Show\ All<tab>a	:let g:netrw_hide=0<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.3 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Normal<tab>a	:let g:netrw_hide=1<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.2.2 '.g:NetrwTopLvlMenu.'Style.Normal-Hide-Show.Hidden\ Only<tab>a	:let g:netrw_hide=2<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.3   '.g:NetrwTopLvlMenu.'Style.Reverse\ Sorting\ Order<tab>'."r	r"
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.1 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Name<tab>s       :let g:netrw_sort_by="name"<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.2 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Time<tab>s       :let g:netrw_sort_by="time"<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.16.4.3 '.g:NetrwTopLvlMenu.'Style.Sorting\ Method.Size<tab>s       :let g:netrw_sort_by="size"<cr><c-L>'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.17     '.g:NetrwTopLvlMenu.'Rename\ File/Directory<tab>R	R'
++    exe 'sil! menu '.g:NetrwMenuPriority.'.18     '.g:NetrwTopLvlMenu.'Set\ Current\ Directory<tab>c	c'
++    let s:netrw_menucnt= 28
++    call s:NetrwBookmarkMenu() " provide some history!  uses priorities 2,3, reserves 4, 8.2.x
++    call s:NetrwTgtMenu()      " let bookmarks and history be easy targets
+ 
+-    " perform ftp:
+-    " -i       : turns off interactive prompting from ftp
+-    " -n  unix : DON'T use <.netrc>, even though it exists
+-    " -n  win32: quit being obnoxious about password
+-    keepj norm! 1Gdd
+-"    call Decho("executing: %!".g:netrw_ftp_cmd." -i -n")
+-    exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
+-    " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+-    if getline(1) !~ "^$"
+-"     call Decho("error<".getline(1).">")
+-     if !exists("g:netrw_quiet")
+-      call netrw#ErrorMsg(s:ERROR,getline(1),5)
+-     endif
++   elseif !a:domenu
++    let s:netrwcnt = 0
++    let curwin     = winnr()
++    windo if getline(2) =~ "Netrw" | let s:netrwcnt= s:netrwcnt + 1 | endif
++    exe curwin."wincmd w"
++
++    if s:netrwcnt <= 1
++"     call Decho("clear menus")
++     exe 'sil! unmenu '.g:NetrwTopLvlMenu
++"     call Decho('exe sil! unmenu '.g:NetrwTopLvlMenu.'*')
++     sil! unlet s:netrw_menu_enabled
+     endif
+-   elseif !exists("b:netrw_method") || b:netrw_method < 0
+-"    call Dfunc("netrw#NetrwObtain : unsupported method")
+-    return
+    endif
++"   call Dret("NetrwMenu")
++   return
++  endif
+ 
+-   " restore status line
+-   if type(a:fname) == 1 && exists("s:netrw_users_stl")
+-    call s:SetupNetrwStatusLine(s:netrw_users_stl)
+-   endif
++endfun
+ 
+-  endif
++" ---------------------------------------------------------------------
++" s:NetrwObtain: obtain file under cursor or from markfile list {{{2
++"                Used by the O maps (as <SID>NetrwObtain())
++fun! s:NetrwObtain(islocal)
++"  call Dfunc("NetrwObtain(islocal=".a:islocal.")")
+ 
+-  " cleanup
+-  if exists("tmpbufnr")
+-   if bufnr("%") != tmpbufnr
+-    exe tmpbufnr."bw!"
+-   else
+-    q!
+-   endif
++  let ykeep= @@
++  if exists("s:netrwmarkfilelist_{bufnr('%')}")
++   let islocal= s:netrwmarkfilelist_{bufnr('%')}[1] !~ '^\a\+://'
++   call netrw#NetrwObtain(islocal,s:netrwmarkfilelist_{bufnr('%')})
++   call s:NetrwUnmarkList(bufnr('%'),b:netrw_curdir)
++  else
++   call netrw#NetrwObtain(a:islocal,expand("<cWORD>"))
+   endif
++  let @@= ykeep
+ 
+-"  call Dret("netrw#NetrwObtain")
++"  call Dret("NetrwObtain")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+@@ -5506,6 +6709,7 @@
+ fun! s:NetrwPrevWinOpen(islocal)
+ "  call Dfunc("NetrwPrevWinOpen(islocal=".a:islocal.")")
+ 
++  let ykeep= @@
+   " grab a copy of the b:netrw_curdir to pass it along to newly split windows
+   let curdir    = b:netrw_curdir
+ 
+@@ -5520,19 +6724,21 @@
+    " if only one window, open a new one first
+ "   call Decho("only one window, so open a new one (g:netrw_alto=".g:netrw_alto.")")
+    if g:netrw_preview
+-"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s")
+-    exe (g:netrw_alto? "top " : "bot ")."vert ".g:netrw_winsize."wincmd s"
+-   else
+-"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
+-    exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
++    let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
++"    call Decho("exe ".(g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s")
++    exe (g:netrw_alto? "top " : "bot ")."vert ".winsz."wincmd s"
++   else
++    let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
++"    call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
++    exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
+    endif
+    let didsplit  = 1
+ 
+   else
+-   call s:SaveBufVars()
++   keepj call s:SaveBufVars()
+ "   call Decho("wincmd p")
+    wincmd p
+-   call s:RestoreBufVars()
++   keepj call s:RestoreBufVars()
+    " if the previous window's buffer has been changed (is modified),
+    " and it doesn't appear in any other extant window, then ask the
+    " user if s/he wants to abandon modifications therein.
+@@ -5554,7 +6760,7 @@
+      if choice == 1
+       " Yes -- write file & then browse
+       let v:errmsg= ""
+-      silent w
++      sil w
+       if v:errmsg != ""
+        call netrw#ErrorMsg(s:ERROR,"unable to write <".bufname.">!",30)
+        if didsplit
+@@ -5562,14 +6768,17 @@
+        else
+        	wincmd p
+        endif
++       let @@= ykeep
+ "       call Dret("NetrwPrevWinOpen ".choice." : unable to write <".bufname.">")
+        return choice
+       endif
+ 
+      elseif choice == 2
+       " No -- don't worry about changed file, just browse anyway
+-      setlocal nomod
+-      call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
++"      call Decho("(NetrwPrevWinOpen) setl nomod")
++      setl nomod
++"      call Decho("(NetrwPrevWinOpen) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++      keepj call netrw#ErrorMsg(s:WARNING,bufname." changes to ".bufname." abandoned",31)
+       wincmd p
+ 
+      else
+@@ -5579,6 +6788,7 @@
+       else
+        wincmd p
+       endif
++      let @@= ykeep
+ "      call Dret("NetrwPrevWinOpen ".choice." : cancelled")
+       return choice
+      endif
+@@ -5595,6 +6805,7 @@
+     call s:NetrwBrowse(a:islocal,s:NetrwBrowseChgDir(a:islocal,curword))
+    endif
+   endif
++  let @@= ykeep
+ "  call Dret("NetrwPrevWinOpen ".choice)
+   return choice
+ endfun
+@@ -5644,7 +6855,7 @@
+ "   call Decho("handle uploading a list of files via scp")
+    let curdir= getcwd()
+    if a:tgt =~ '^scp:'
+-    exe "keepjumps silent lcd ".fnameescape(fromdir)
++    exe "keepjumps sil lcd ".fnameescape(fromdir)
+     let filelist= deepcopy(s:netrwmarkfilelist_{bufnr('%')})
+     let args    = join(map(filelist,"shellescape(v:val, 1)"))
+     if exists("g:netrw_port") && g:netrw_port != ""
+@@ -5656,7 +6867,7 @@
+     let tgt     = substitute(a:tgt,'^scp://[^/]\+/\(.*\)$','\1','')
+ "    call Decho("exe ".s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1))
+     exe s:netrw_silentxfer."!".g:netrw_scp_cmd.shellescape(useport,1)." ".args." ".shellescape(machine.":".tgt,1)
+-    exe "keepjumps silent lcd ".fnameescape(curdir)
++    exe "keepjumps sil lcd ".fnameescape(curdir)
+ 
+    elseif a:tgt =~ '^ftp:'
+     call s:NetrwMethod(a:tgt)
+@@ -5678,6 +6889,9 @@
+      keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
+ "     call Decho("filter input: ".getline('$'))
+ 
++     if tgtdir == ""
++      let tgtdir= '/'
++     endif
+      keepj call setline(line("$")+1,'cd "'.tgtdir.'"')
+ "     call Decho("filter input: ".getline('$'))
+ 
+@@ -5687,12 +6901,12 @@
+      endfor
+ 
+      if exists("g:netrw_port") && g:netrw_port != ""
+-"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
++"      call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
++      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+      else
+ "      call Decho("filter input window#".winnr())
+-"      call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+-      exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
++"      call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
++      exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+      endif
+      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+      sil keepj g/Local directory now/d
+@@ -5706,9 +6920,9 @@
+     elseif b:netrw_method == 3
+      " upload with ftp + machine, id, passwd, and fname (ie. no .netrc)
+      let netrw_fname= b:netrw_fname
+-     call s:SaveBufVars()|silent keepjumps new|call s:RestoreBufVars()
++     keepj call s:SaveBufVars()|sil keepj new|keepj call s:RestoreBufVars()
+      let tmpbufnr= bufnr("%")
+-     setlocal ff=unix
++     setl ff=unix
+ 
+      if exists("g:netrw_port") && g:netrw_port != ""
+       keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+@@ -5718,14 +6932,18 @@
+ "      call Decho("filter input: ".getline('$'))
+      endif
+ 
+-     if exists("g:netrw_ftp") && g:netrw_ftp == 1
+-      keepj put =g:netrw_uid
+-"      call Decho("filter input: ".getline('$'))
+-      keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
+-"      call Decho("filter input: ".getline('$'))
+-     else
+-      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
+-"      call Decho("filter input: ".getline('$'))
++     if exists("g:netrw_uid") && g:netrw_uid != ""
++      if exists("g:netrw_ftp") && g:netrw_ftp == 1
++       keepj put =g:netrw_uid
++"       call Decho("filter input: ".getline('$'))
++       if exists("s:netrw_passwd")
++        keepj call setline(line("$")+1,'"'.s:netrw_passwd.'"')
++       endif
++"       call Decho("filter input: ".getline('$'))
++      elseif exists("s:netrw_passwd")
++       keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
++"       call Decho("filter input: ".getline('$'))
++      endif
+      endif
+ 
+      keepj call setline(line("$")+1,'lcd "'.fromdir.'"')
+@@ -5751,14 +6969,14 @@
+      " -n  unix : DON'T use <.netrc>, even though it exists
+      " -n  win32: quit being obnoxious about password
+      keepj norm! 1Gdd
+-"     call Decho("executing: ".s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n")
+-     exe s:netrw_silentxfer."%!".g:netrw_ftp_cmd." -i -n"
++"     call Decho("executing: ".s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
++     exe s:netrw_silentxfer."%!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+      " If the result of the ftp operation isn't blank, show an error message (tnx to Doug Claar)
+      sil keepj g/Local directory now/d
+      call histdel("/",-1)
+      if getline(1) !~ "^$" && !exists("g:netrw_quiet") && getline(1) !~ '^Trying '
+       let debugkeep= &debug
+-      setlocal debug=msg
++      setl debug=msg
+       call netrw#ErrorMsg(s:ERROR,getline(1),15)
+       let &debug = debugkeep
+       let mod    = 1
+@@ -5781,25 +6999,28 @@
+ " s:NetrwPreview: {{{2
+ fun! s:NetrwPreview(path) range
+ "  call Dfunc("NetrwPreview(path<".a:path.">)")
+-  call s:NetrwOptionSave("s:")
+-  call s:NetrwSafeOptions()
++  let ykeep= @@
++  keepj call s:NetrwOptionSave("s:")
++  keepj call s:NetrwSafeOptions()
+   if has("quickfix")
+    if !isdirectory(a:path)
+     if g:netrw_preview && !g:netrw_alto
+-     let pvhkeep= &pvh
+-     let &pvh   = winwidth(0) - g:netrw_winsize
++     let pvhkeep = &pvh
++     let winsz   = (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
++     let &pvh    = winwidth(0) - winsz
+     endif
+     exe (g:netrw_alto? "top " : "bot ").(g:netrw_preview? "vert " : "")."pedit ".fnameescape(a:path)
+     if exists("pvhkeep")
+      let &pvh= pvhkeep
+     endif
+    elseif !exists("g:netrw_quiet")
+-    call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
++    keepj call netrw#ErrorMsg(s:WARNING,"sorry, cannot preview a directory such as <".a:path.">",38)
+    endif
+   elseif !exists("g:netrw_quiet")
+-   call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
++   keepj call netrw#ErrorMsg(s:WARNING,"sorry, to preview your vim needs the quickfix feature compiled in",39)
+   endif
+-  call s:NetrwOptionRestore("s:")
++  keepj call s:NetrwOptionRestore("s:")
++  let @@= ykeep
+ "  call Dret("NetrwPreview")
+ endfun
+ 
+@@ -5808,18 +7029,21 @@
+ fun! s:NetrwRefresh(islocal,dirname)
+ "  call Dfunc("NetrwRefresh(islocal<".a:islocal.">,dirname=".a:dirname.") hide=".g:netrw_hide." sortdir=".g:netrw_sort_direction)
+   " at the current time (Mar 19, 2007) all calls to NetrwRefresh() call NetrwBrowseChgDir() first.
+-  " NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
+-  " Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
+-  setlocal ma noro
+-"  call Decho("setlocal ma noro")
++  " (defunct) NetrwBrowseChgDir() may clear the display; hence a NetrwSavePosn() may not work if its placed here.
++  " (defunct) Also, NetrwBrowseChgDir() now does a NetrwSavePosn() itself.
++  setl ma noro
++"  call Decho("setl ma noro")
+ "  call Decho("clear buffer<".expand("%")."> with :%d")
++  let ykeep      = @@
++  let screenposn = netrw#NetrwSavePosn()
++"  call Decho("clearing buffer prior to refresh")
+   sil! keepj %d
+   if a:islocal
+-   call netrw#LocalBrowseCheck(a:dirname)
++   keepj call netrw#LocalBrowseCheck(a:dirname)
+   else
+-   call s:NetrwBrowse(a:islocal,a:dirname)
++   keepj call s:NetrwBrowse(a:islocal,a:dirname)
+   endif
+-  call netrw#NetrwRestorePosn()
++  keepj call netrw#NetrwRestorePosn(screenposn)
+ 
+   " restore file marks
+   if exists("s:netrwmarkfilemtch_{bufnr('%')}") && s:netrwmarkfilemtch_{bufnr("%")} != ""
+@@ -5830,7 +7054,8 @@
+    2match none
+   endif
+ 
+-"  redraw!
++"  restore
++  let @@= ykeep
+ "  call Dret("NetrwRefresh")
+ endfun
+ 
+@@ -5839,7 +7064,7 @@
+ "                    Called by NetrwMarkFileCopy()
+ "                    Interfaces to s:NetrwRefresh() and s:LocalBrowseShellCmdRefresh()
+ fun! s:NetrwRefreshDir(islocal,dirname)
+-"  call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) fastbrowse=".g:netrw_fastbrowse)
++"  call Dfunc("s:NetrwRefreshDir(islocal=".a:islocal." dirname<".a:dirname.">) g:netrw_fastbrowse=".g:netrw_fastbrowse)
+   if g:netrw_fastbrowse == 0
+    " slowest mode (keep buffers refreshed, local or remote)
+ "   call Decho("slowest mode: keep buffers refreshed, local or remote")
+@@ -5851,18 +7076,18 @@
+     let curwin= winnr()
+ "    call Decho("refresh tgtwin#".tgtwin." (curwin#".curwin.")")
+     exe tgtwin."wincmd w"
+-    call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 
++    keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./')) 
+     exe curwin."wincmd w"
+ 
+    elseif bufnr(a:dirname) > 0
+     let bn= bufnr(a:dirname)
+ "    call Decho("bd bufnr(".a:dirname.")=".bn)
+-    exe "silent bd ".bn
++    exe "sil bd ".bn
+    endif
+ 
+   elseif g:netrw_fastbrowse <= 1
+ "   call Decho("medium-speed mode: refresh local buffers only")
+-   call s:LocalBrowseShellCmdRefresh()
++   keepj call s:LocalBrowseShellCmdRefresh()
+   endif
+ "  call Dret("s:NetrwRefreshDir")
+ endfun
+@@ -5875,6 +7100,7 @@
+ "          front.  An "*" pattern handles the default priority.
+ fun! s:NetrwSetSort()
+ "  call Dfunc("SetSort() bannercnt=".w:netrw_bannercnt)
++  let ykeep= @@
+   if w:netrw_liststyle == s:LONGLIST
+    let seqlist  = substitute(g:netrw_sort_sequence,'\$','\\%(\t\\|\$\\)','ge')
+   else
+@@ -5918,13 +7144,13 @@
+     " sometimes multiple sorting patterns will match the same file or directory.
+     " The following substitute is intended to remove the excess matches.
+     exe 'sil keepj '.w:netrw_bannercnt.',$g/^\d\{3}'.g:netrw_sepchr.'\d\{3}\//s/^\d\{3}'.g:netrw_sepchr.'\(\d\{3}\/\).\@=/\1/e'
+-    call histdel("/",-1)
++    keepj call histdel("/",-1)
+    endif
+    let priority = priority + 1
+   endwhile
+   if exists("starpriority")
+    exe 'sil keepj '.w:netrw_bannercnt.',$v/^\d\{3}'.g:netrw_sepchr.'/s/^/'.starpriority.'/'
+-   call histdel("/",-1)
++   keepj call histdel("/",-1)
+   endif
+ 
+   " Following line associated with priority -- items that satisfy a priority
+@@ -5934,22 +7160,54 @@
+   " priority prefixes need to be removed, but not directories that happen to
+   " be just digits themselves.
+   exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\d\{3}'.g:netrw_sepchr.'\)\%(\d\{3}'.g:netrw_sepchr.'\)\+\ze./\1/e'
+-  call histdel("/",-1)
++  keepj call histdel("/",-1)
++  let @@= ykeep
+ 
+ "  call Dret("SetSort")
+ endfun
+ 
++" ---------------------------------------------------------------------
++" s:NetrwSetTgt: sets the target to the specified choice index {{{2
++"    Implements [count]Tb  (bookhist<b>)
++"               [count]Th  (bookhist<h>)
++"               See :help netrw-qb for how to make the choice.
++fun! s:NetrwSetTgt(bookhist,choice)
++"  call Dfunc("s:NetrwSetTgt(bookhist<".a:bookhist."> choice#".a:choice.")")
++
++  if     a:bookhist == 'b'
++   " supports choosing a bookmark as a target using a qb-generated list
++   let choice= a:choice - 1
++   if exists("g:netrw_bookmarklist[".choice."]")
++    call netrw#NetrwMakeTgt(g:netrw_bookmarklist[choice])
++   else
++    echomsg "Sorry, bookmark#".a:choice." doesn't exist!"
++   endif
++
++  elseif a:bookhist == 'h'
++   " supports choosing a history stack entry as a target using a qb-generated list
++   let choice= (a:choice % g:netrw_dirhistmax) + 1
++   if exists("g:netrw_dirhist_".choice)
++    let histentry = g:netrw_dirhist_{choice}
++    call netrw#NetrwMakeTgt(histentry)
++   else
++    echomsg "Sorry, history#".a:choice." not available!"
++   endif
++  endif
++
++"  call Dret("s:NetrwSetTgt")
++endfun
++
+ " =====================================================================
+ " s:NetrwSortStyle: change sorting style (name - time - size) and refresh display {{{2
+ fun! s:NetrwSortStyle(islocal)
+ "  call Dfunc("s:NetrwSortStyle(islocal=".a:islocal.") netrw_sort_by<".g:netrw_sort_by.">")
+-  call s:NetrwSaveWordPosn()
++  keepj call s:NetrwSaveWordPosn()
+   let svpos= netrw#NetrwSavePosn()
+ 
+   let g:netrw_sort_by= (g:netrw_sort_by =~ 'n')? 'time' : (g:netrw_sort_by =~ 't')? 'size' : 'name'
+   keepj norm! 0
+-  call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
++  keepj call s:NetrwRefresh(a:islocal,s:NetrwBrowseChgDir(a:islocal,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
+ 
+ "  call Dret("s:NetrwSortStyle : netrw_sort_by<".g:netrw_sort_by.">")
+ endfun
+@@ -5965,15 +7223,17 @@
+ fun! s:NetrwSplit(mode)
+ "  call Dfunc("s:NetrwSplit(mode=".a:mode.") alto=".g:netrw_alto." altv=".g:netrw_altv)
+ 
++  let ykeep= @@
+   call s:SaveWinVars()
+ 
+   if a:mode == 0
+    " remote and o
+-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
+-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
++   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
++"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
++   exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
+    let s:didsplit= 1
+-   call s:RestoreWinVars()
+-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
++   keepj call s:RestoreWinVars()
++   keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+    unlet s:didsplit
+ 
+   elseif a:mode == 1
+@@ -5982,26 +7242,28 @@
+ "   call Decho("tabnew")
+    tabnew
+    let s:didsplit= 1
+-   call s:RestoreWinVars()
+-   call s:NetrwBrowse(0,newdir)
++   keepj call s:RestoreWinVars()
++   keepj call s:NetrwBrowse(0,newdir)
+    unlet s:didsplit
+ 
+   elseif a:mode == 2
+    " remote and v
+-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
+-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
++   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
++"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v")
++   exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v"
+    let s:didsplit= 1
+-   call s:RestoreWinVars()
+-   call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
++   keepj call s:RestoreWinVars()
++   keepj call s:NetrwBrowse(0,s:NetrwBrowseChgDir(0,s:NetrwGetWord()))
+    unlet s:didsplit
+ 
+   elseif a:mode == 3
+    " local and o
+-"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s")
+-   exe (g:netrw_alto? "bel " : "abo ").g:netrw_winsize."wincmd s"
++   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winheight(0))/100 : -g:netrw_winsize
++"   call Decho("exe ".(g:netrw_alto? "bel " : "abo ").winsz."wincmd s")
++   exe (g:netrw_alto? "bel " : "abo ").winsz."wincmd s"
+    let s:didsplit= 1
+-   call s:RestoreWinVars()
+-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
++   keepj call s:RestoreWinVars()
++   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+    unlet s:didsplit
+ 
+   elseif a:mode == 4
+@@ -6012,57 +7274,76 @@
+    tabnew
+    let b:netrw_curdir= netrw_curdir
+    let s:didsplit= 1
+-   call s:RestoreWinVars()
+-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
++   keepj call s:RestoreWinVars()
++   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,cursorword))
+    unlet s:didsplit
+ 
+   elseif a:mode == 5
+    " local and v
+-"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v")
+-   exe (g:netrw_altv? "rightb " : "lefta ").g:netrw_winsize."wincmd v"
++   let winsz= (g:netrw_winsize > 0)? (g:netrw_winsize*winwidth(0))/100 : -g:netrw_winsize
++"   call Decho("exe ".(g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v")
++   exe (g:netrw_altv? "rightb " : "lefta ").winsz."wincmd v"
+    let s:didsplit= 1
+-   call s:RestoreWinVars()
+-   call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
++   keepj call s:RestoreWinVars()
++   keepj call netrw#LocalBrowseCheck(s:NetrwBrowseChgDir(1,s:NetrwGetWord()))
+    unlet s:didsplit
+ 
+   else
+-   call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
++   keepj call netrw#ErrorMsg(s:ERROR,"(NetrwSplit) unsupported mode=".a:mode,45)
+   endif
+ 
++  let @@= ykeep
+ "  call Dret("s:NetrwSplit")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" NetrwStatusLine: {{{2
+-fun! NetrwStatusLine()
++" s:NetrwTgtMenu: {{{2
++fun! s:NetrwTgtMenu()
++  if !exists("s:netrw_menucnt")
++   return
++  endif
++"  call Dfunc("s:NetrwTgtMenu()")
+ 
+-" vvv NetrwStatusLine() debugging vvv
+-"  let g:stlmsg=""
+-"  if !exists("w:netrw_explore_bufnr")
+-"   let g:stlmsg="!X<explore_bufnr>"
+-"  elseif w:netrw_explore_bufnr != bufnr("%")
+-"   let g:stlmsg="explore_bufnr!=".bufnr("%")
+-"  endif
+-"  if !exists("w:netrw_explore_line")
+-"   let g:stlmsg=" !X<explore_line>"
+-"  elseif w:netrw_explore_line != line(".")
+-"   let g:stlmsg=" explore_line!={line(.)<".line(".").">"
+-"  endif
+-"  if !exists("w:netrw_explore_list")
+-"   let g:stlmsg=" !X<explore_list>"
+-"  endif
+-" ^^^ NetrwStatusLine() debugging ^^^
++  " the following test assures that gvim is running, has menus available, and has menus enabled.
++  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
++   if exists("g:NetrwTopLvlMenu")
++"    call Decho("removing ".g:NetrwTopLvlMenu."Bookmarks menu item(s)")
++    exe 'sil! unmenu '.g:NetrwTopLvlMenu.'Targets'
++   endif
++   if !exists("s:netrw_initbookhist")
++    call s:NetrwBookHistRead()
++   endif
+ 
+-  if !exists("w:netrw_explore_bufnr") || w:netrw_explore_bufnr != bufnr("%") || !exists("w:netrw_explore_line") || w:netrw_explore_line != line(".") || !exists("w:netrw_explore_list")
+-   " restore user's status line
+-   let &stl        = s:netrw_users_stl
+-   let &laststatus = s:netrw_users_ls
+-   if exists("w:netrw_explore_bufnr")|unlet w:netrw_explore_bufnr|endif
+-   if exists("w:netrw_explore_line") |unlet w:netrw_explore_line |endif
+-   return ""
+-  else
+-   return "Match ".w:netrw_explore_mtchcnt." of ".w:netrw_explore_listlen
++   " target bookmarked places
++   if exists("g:netrw_bookmarklist") && g:netrw_bookmarklist != [] && g:netrw_dirhistmax > 0
++"    call Decho("installing bookmarks as easy targets")
++    let cnt= 1
++    for bmd in g:netrw_bookmarklist
++     let ebmd= escape(bmd,g:netrw_menu_escape)
++     " show bookmarks for goto menu
++"     call Decho("menu: Targets: ".bmd)
++     exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.1.".cnt." ".g:NetrwTopLvlMenu.'Targets.'.ebmd."	:call netrw#NetrwMakeTgt('".bmd."')\<cr>"
++     let cnt= cnt + 1
++    endfor
++   endif
++
++   " target directory browsing history
++   if exists("g:netrw_dirhistmax") && g:netrw_dirhistmax > 0
++"    call Decho("installing history as easy targets (histmax=".g:netrw_dirhistmax.")")
++    let histcnt = 1
++    while histcnt <= g:netrw_dirhistmax
++     let priority = g:netrw_dirhist_cnt + histcnt
++     if exists("g:netrw_dirhist_{histcnt}")
++      let histentry  = g:netrw_dirhist_{histcnt}
++      let ehistentry = escape(histentry,g:netrw_menu_escape)
++"      call Decho("menu: Targets: ".histentry)
++      exe 'sil! menu <silent> '.g:NetrwMenuPriority.".19.2.".priority." ".g:NetrwTopLvlMenu.'Targets.'.ehistentry."	:call netrw#NetrwMakeTgt('".histentry."')\<cr>"
++     endif
++     let histcnt = histcnt + 1
++    endwhile
++   endif
+   endif
++"  call Dret("s:NetrwTgtMenu")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+@@ -6072,12 +7353,12 @@
+ "  call Dfunc("NetrwTreeDir() curline#".line(".")."<".getline('.')."> b:netrw_curdir<".b:netrw_curdir."> tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%").">")
+ 
+   let treedir= b:netrw_curdir
+-"  call Decho("set initial treedir<".treedir.">")
++"  call Decho("(NetrwTreeDir) set initial treedir<".treedir.">")
+   let s:treecurpos= netrw#NetrwSavePosn()
+ 
+   if w:netrw_liststyle == s:TREELIST
+-"   call Decho("w:netrrw_liststyle is TREELIST:")
+-"   call Decho("line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
++"   call Decho("(NetrwTreeDir) w:netrw_liststyle is TREELIST:")
++"   call Decho("(NetrwTreeDir) line#".line(".")." getline(.)<".getline('.')."> treecurpos<".string(s:treecurpos).">")
+ 
+    " extract tree directory if on a line specifying a subdirectory (ie. ends with "/")
+    if getline('.') =~ '/$'
+@@ -6085,13 +7366,13 @@
+    else
+     let treedir= ""
+    endif
+-"   call Decho("treedir<".treedir.">")
++"   call Decho("(NetrwTreeDir) treedir<".treedir.">")
+ 
+    " detect user attempting to close treeroot
+    if getline('.') !~ '|' && getline('.') != '..'
+ "    call Decho("user attempted to close treeroot")
+     " now force a refresh
+-"    call Decho("clear buffer<".expand("%")."> with :%d")
++"    call Decho("(NetrwTreeDir) clear buffer<".expand("%")."> with :%d")
+     sil! keepj %d
+ "    call Dret("NetrwTreeDir <".treedir."> : (side effect) s:treecurpos<".string(s:treecurpos).">")
+     return b:netrw_curdir
+@@ -6099,26 +7380,26 @@
+ 
+    " elide all non-depth information
+    let depth = substitute(getline('.'),'^\(\%(| \)*\)[^|].\{-}$','\1','e')
+-"   call Decho("depth<".depth."> 1st subst (non-depth info removed)")
++"   call Decho("(NetrwTreeDir) depth<".depth."> 1st subst (non-depth info removed)")
+ 
+    " elide first depth
+    let depth = substitute(depth,'^| ','','')
+-"   call Decho("depth<".depth."> 2nd subst (first depth removed)")
++"   call Decho("(NetrwTreeDir) depth<".depth."> 2nd subst (first depth removed)")
+ 
+    " construct treedir by searching backwards at correct depth
+-"   call Decho("constructing treedir<".treedir."> depth<".depth.">")
++"   call Decho("(NetrwTreeDir) constructing treedir<".treedir."> depth<".depth.">")
+    while depth != "" && search('^'.depth.'[^|].\{-}/$','bW')
+     let dirname= substitute(getline('.'),'^\(| \)*','','e')
+     let treedir= dirname.treedir
+     let depth  = substitute(depth,'^| ','','')
+-"    call Decho("constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
++"    call Decho("(NetrwTreeDir) constructing treedir<".treedir.">: dirname<".dirname."> while depth<".depth.">")
+    endwhile
+    if w:netrw_treetop =~ '/$'
+     let treedir= w:netrw_treetop.treedir
+    else
+     let treedir= w:netrw_treetop.'/'.treedir
+    endif
+-"   call Decho("bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
++"   call Decho("(NetrwTreeDir) bufnr(.)=".bufnr("%")." line($)=".line("$")." line(.)=".line("."))
+   endif
+   let treedir= substitute(treedir,'//$','/','')
+ 
+@@ -6132,7 +7413,7 @@
+ "  call Dfunc("NetrwTreeDisplay(dir<".a:dir."> depth<".a:depth.">)")
+ 
+   " insure that there are no folds
+-  setlocal nofen
++  setl nofen
+ 
+   " install ../ and shortdir
+   if a:depth == ""
+@@ -6167,10 +7448,10 @@
+ "   call Decho("dir<".dir."> entry<".entry."> direntry<".direntry.">")
+    if entry =~ '/$' && has_key(w:netrw_treedict,direntry)
+ "    call Decho("<".direntry."> is a key in treedict - display subtree for it")
+-    call s:NetrwTreeDisplay(direntry,depth)
++    keepj call s:NetrwTreeDisplay(direntry,depth)
+    elseif entry =~ '/$' && has_key(w:netrw_treedict,direntry.'/')
+ "    call Decho("<".direntry."/> is a key in treedict - display subtree for it")
+-    call s:NetrwTreeDisplay(direntry.'/',depth)
++    keepj call s:NetrwTreeDisplay(direntry.'/',depth)
+    else
+ "    call Decho("<".entry."> is not a key in treedict (no subtree)")
+     sil! keepj call setline(line("$")+1,depth.entry)
+@@ -6219,9 +7500,10 @@
+ "   call Decho("fname<".fname.">")
+ 
+    " display from treetop on down
+-   call s:NetrwTreeDisplay(w:netrw_treetop,"")
++   keepj call s:NetrwTreeDisplay(w:netrw_treetop,"")
+ 
+ "   call Dret("NetrwTreeListing : bufname<".expand("%").">")
++   return
+   endif
+ endfun
+ 
+@@ -6235,12 +7517,12 @@
+    " cpf: characters per filename
+    " fpl: filenames per line
+    " fpc: filenames per column
+-   setlocal ma noro
+-"   call Decho("setlocal ma noro")
++   setl ma noro
++"   call Decho("setl ma noro")
+    let b:netrw_cpf= 0
+    if line("$") >= w:netrw_bannercnt
+     exe 'sil keepj '.w:netrw_bannercnt.',$g/^./if virtcol("$") > b:netrw_cpf|let b:netrw_cpf= virtcol("$")|endif'
+-    call histdel("/",-1)
++    keepj call histdel("/",-1)
+    else
+ "    call Dret("NetrwWideListing")
+     return
+@@ -6257,7 +7539,7 @@
+ 
+    " make wide display
+    exe 'sil keepj '.w:netrw_bannercnt.',$s/^.*$/\=escape(printf("%-'.b:netrw_cpf.'s",submatch(0)),"\\")/'
+-   call histdel("/",-1)
++   keepj call histdel("/",-1)
+    let fpc         = (line("$") - w:netrw_bannercnt + w:netrw_fpl)/w:netrw_fpl
+    let newcolstart = w:netrw_bannercnt + fpc
+    let newcolend   = newcolstart + fpc - 1
+@@ -6275,11 +7557,23 @@
+     exe "sil! keepj ".newcolstart.','.newcolend.'d'
+     exe 'sil! keepj '.w:netrw_bannercnt
+    endwhile
+-   silent! let @*= keepregstar
++   sil! let @*= keepregstar
+    exe "sil! keepj ".w:netrw_bannercnt.',$s/\s\+$//e'
+-   call histdel("/",-1)
+-   setlocal noma nomod ro
++   keepj call histdel("/",-1)
++   exe "nmap <buffer> <silent> w	/^\\\\|\\s\\s\\zs\\S/\<cr>"
++   exe "nmap <buffer> <silent> b	?^\\\\|\\s\\s\\zs\\S?\<cr>"
++"   call Decho("NetrwWideListing) setl noma nomod ro")
++   setl noma nomod ro
++"   call Decho("(NetrwWideListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+ "   call Dret("NetrwWideListing")
++   return
++  else
++   if hasmapto("w","n")
++    sil! nunmap <buffer> w
++   endif
++   if hasmapto("b","n")
++    sil! nunmap <buffer> b
++   endif
+   endif
+ 
+ endfun
+@@ -6289,33 +7583,47 @@
+ fun! s:PerformListing(islocal)
+ "  call Dfunc("s:PerformListing(islocal=".a:islocal.") bufnr(%)=".bufnr("%")."<".bufname("%").">")
+ 
+-  call s:NetrwSafeOptions()
+-  setlocal noro ma
+-"  call Decho("setlocal noro ma")
++  " set up syntax highlighting {{{3
++"  call Decho("(PerformListing) set up syntax highlighting")
++  if has("syntax")
++   if !exists("g:syntax_on") || !g:syntax_on
++"    call Decho("(PerformListing) but g:syntax_on".(exists("g:syntax_on")? "=".g:syntax_on : "<doesn't exist>"))
++    setl ft=
++   elseif &ft != "netrw"
++    setl ft=netrw
++   endif
++  endif
++
++  keepj call s:NetrwSafeOptions()
++  set noro ma
++"  call Decho("(PerformListing) setl noro ma bh=".&bh)
+ 
+ "  if exists("g:netrw_silent") && g:netrw_silent == 0 && &ch >= 1	" Decho
+-"   call Decho("(netrw) Processing your browsing request...")
++"   call Decho("(PerformListing) (netrw) Processing your browsing request...")
+ "  endif								" Decho
+ 
+ "  call Decho('w:netrw_liststyle='.(exists("w:netrw_liststyle")? w:netrw_liststyle : 'n/a'))
+   if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST && exists("w:netrw_treedict")
+    " force a refresh for tree listings
+-"   call Decho("force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
++"   call Decho("(PerformListing) force refresh for treelisting: clear buffer<".expand("%")."> with :%d")
+    sil! keepj %d
+   endif
+ 
+   " save current directory on directory history list
+-  call s:NetrwBookHistHandler(3,b:netrw_curdir)
++  keepj call s:NetrwBookHistHandler(3,b:netrw_curdir)
+ 
+   " Set up the banner {{{3
+   if g:netrw_banner
+-"   call Decho("set up banner")
+-   keepj put ='\" ============================================================================'
+-   keepj put ='\" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')'
+-   keepj put ='\"   '.b:netrw_curdir
+-   keepj 1d
++"   call Decho("(PerformListing) set up banner")
++   keepj call setline(1,'" ============================================================================')
++   keepj call setline(2,'" Netrw Directory Listing                                        (netrw '.g:loaded_netrw.')')
++   if exists("g:netrw_bannerbackslash") && g:netrw_bannerbackslash
++    keepj call setline(3,'"   '.substitute(b:netrw_curdir,'/','\\','g'))
++   else
++    keepj call setline(3,'"   '.b:netrw_curdir)
++   endif
+    let w:netrw_bannercnt= 3
+-   exe "sil! keepj ".w:netrw_bannercnt
++   keepj exe "sil! keepj ".w:netrw_bannercnt
+   else
+    keepj 1
+    let w:netrw_bannercnt= 1
+@@ -6328,15 +7636,15 @@
+ 
+   " Sorted by... {{{3
+   if g:netrw_banner
+-"   call Decho("handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
++"   call Decho("(PerformListing) handle specified sorting: g:netrw_sort_by<".g:netrw_sort_by.">")
+    if g:netrw_sort_by =~ "^n"
+-"   call Decho("directories will be sorted by name")
++"   call Decho("(PerformListing) directories will be sorted by name")
+     " sorted by name
+     keepj put ='\"   Sorted by      '.sortby
+     keepj put ='\"   Sort sequence: '.g:netrw_sort_sequence
+     let w:netrw_bannercnt= w:netrw_bannercnt + 2
+    else
+-"   call Decho("directories will be sorted by size or time")
++"   call Decho("(PerformListing) directories will be sorted by size or time")
+     " sorted by size or date
+     keepj put ='\"   Sorted by '.sortby
+     let w:netrw_bannercnt= w:netrw_bannercnt + 1
+@@ -6347,7 +7655,7 @@
+   " show copy/move target, if any
+   if g:netrw_banner
+    if exists("s:netrwmftgt") && exists("s:netrwmftgt_islocal")
+-"    call Decho("show copy/move target<".s:netrwmftgt.">")
++"    call Decho("(PerformListing) show copy/move target<".s:netrwmftgt.">")
+     keepj put =''
+     if s:netrwmftgt_islocal
+      sil! keepj call setline(line("."),'"   Copy/Move Tgt: '.s:netrwmftgt.' (local)')
+@@ -6356,14 +7664,14 @@
+     endif
+     let w:netrw_bannercnt= w:netrw_bannercnt + 1
+    else
+-"    call Decho("s:netrwmftgt does not exist, don't make Copy/Move Tgt")
++"    call Decho("(PerformListing) s:netrwmftgt does not exist, don't make Copy/Move Tgt")
+    endif
+    exe "sil! keepj ".w:netrw_bannercnt
+   endif
+ 
+   " Hiding...  -or-  Showing... {{{3
+   if g:netrw_banner
+-"   call Decho("handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
++"   call Decho("(PerformListing) handle hiding/showing (g:netrw_hide=".g:netrw_list_hide." g:netrw_list_hide<".g:netrw_list_hide.">)")
+    if g:netrw_list_hide != "" && g:netrw_hide
+     if g:netrw_hide == 1
+      keepj put ='\"   Hiding:        '.g:netrw_list_hide
+@@ -6382,43 +7690,38 @@
+   if g:netrw_banner
+    let w:netrw_bannercnt= w:netrw_bannercnt + 1
+    exe "sil! keepj ".w:netrw_bannercnt
+-"   call Decho("bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
+-  endif
+-
+-  " set up syntax highlighting {{{3
+-"  call Decho("set up syntax highlighting")
+-  if has("syntax")
+-   setf netrw
+-   if !exists("g:syntax_on") || !g:syntax_on
+-    setlocal ft=
+-   endif
++"   call Decho("(PerformListing) w:netrw_bannercnt=".w:netrw_bannercnt." (should index line just after banner) line($)=".line("$"))
+   endif
+ 
+   " get list of files
+-"  call Decho("Get list of files - islocal=".a:islocal)
++"  call Decho("(PerformListing) Get list of files - islocal=".a:islocal)
+   if a:islocal
+-   call s:LocalListing()
++   keepj call s:LocalListing()
+   else " remote
+-   call s:NetrwRemoteListing()
++   keepj call s:NetrwRemoteListing()
+   endif
+-"  call Decho("g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
+ 
+   " manipulate the directory listing (hide, sort) {{{3
++  if !exists("w:netrw_bannercnt")
++   let w:netrw_bannercnt= 0
++  endif
++"  call Decho("(PerformListing) g:netrw_banner=".g:netrw_banner." w:netrw_bannercnt=".w:netrw_bannercnt." (banner complete)")
++
+   if !g:netrw_banner || line("$") >= w:netrw_bannercnt
+-"   call Decho("manipulate directory listing (hide)")
+-"   call Decho("g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
++"   call Decho("(PerformListing) manipulate directory listing (hide)")
++"   call Decho("(PerformListing) g:netrw_hide=".g:netrw_hide." g:netrw_list_hide<".g:netrw_list_hide.">")
+    if g:netrw_hide && g:netrw_list_hide != ""
+-    call s:NetrwListHide()
++    keepj call s:NetrwListHide()
+    endif
+    if !g:netrw_banner || line("$") >= w:netrw_bannercnt
+-"    call Decho("manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
++"    call Decho("(PerformListing) manipulate directory listing (sort) : g:netrw_sort_by<".g:netrw_sort_by.">")
+ 
+     if g:netrw_sort_by =~ "^n"
+      " sort by name
+-     call s:NetrwSetSort()
++     keepj call s:NetrwSetSort()
+ 
+      if !g:netrw_banner || w:netrw_bannercnt < line("$")
+-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
++"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction." (bannercnt=".w:netrw_bannercnt.")")
+       if g:netrw_sort_direction =~ 'n'
+        " normal direction sorting
+        exe 'sil keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
+@@ -6428,22 +7731,22 @@
+       endif
+      endif
+      " remove priority pattern prefix
+-"     call Decho("remove priority pattern prefix")
++"     call Decho("(PerformListing) remove priority pattern prefix")
+      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{3}'.g:netrw_sepchr.'//e'
+-     call histdel("/",-1)
++     keepj call histdel("/",-1)
+ 
+     elseif a:islocal
+      if !g:netrw_banner || w:netrw_bannercnt < line("$")
+-"      call Decho("g:netrw_sort_direction=".g:netrw_sort_direction)
++"      call Decho("(PerformListing) g:netrw_sort_direction=".g:netrw_sort_direction)
+       if g:netrw_sort_direction =~ 'n'
+-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort')
++"       call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort')
+        exe 'sil! keepj '.w:netrw_bannercnt.',$sort'.' '.g:netrw_sort_options
+       else
+-"       call Decho('exe silent keepjumps '.w:netrw_bannercnt.',$sort!')
++"       call Decho('exe sil keepjumps '.w:netrw_bannercnt.',$sort!')
+        exe 'sil! keepj '.w:netrw_bannercnt.',$sort!'.' '.g:netrw_sort_options
+       endif
+      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{-}\///e'
+-     call histdel("/",-1)
++     keepj call histdel("/",-1)
+      endif
+     endif
+ 
+@@ -6457,31 +7760,35 @@
+   endif
+ 
+   " convert to wide/tree listing {{{3
+-"  call Decho("modify display if wide/tree listing style")
+-  call s:NetrwWideListing()
+-  call s:NetrwTreeListing(b:netrw_curdir)
++"  call Decho("(PerformListing) modify display if wide/tree listing style")
++  keepj call s:NetrwWideListing()
++  keepj call s:NetrwTreeListing(b:netrw_curdir)
+ 
+   if exists("w:netrw_bannercnt") && (line("$") > w:netrw_bannercnt || !g:netrw_banner)
+    " place cursor on the top-left corner of the file listing
+-"   call Decho("place cursor on top-left corner of file listing")
++"   call Decho("(PerformListing) place cursor on top-left corner of file listing")
+    exe 'sil! keepj '.w:netrw_bannercnt
+    sil! keepj norm! 0
+   endif
+ 
+   " record previous current directory
+   let w:netrw_prvdir= b:netrw_curdir
+-"  call Decho("record netrw_prvdir<".w:netrw_prvdir.">")
++"  call Decho("(PerformListing) record netrw_prvdir<".w:netrw_prvdir.">")
+ 
+   " save certain window-oriented variables into buffer-oriented variables {{{3
+-  call s:SetBufWinVars()
+-  call s:NetrwOptionRestore("w:")
++  keepj call s:SetBufWinVars()
++  keepj call s:NetrwOptionRestore("w:")
+ 
+   " set display to netrw display settings
+-"  call Decho("set display to netrw display settings (noma nomod etc)")
++"  call Decho("(PerformListing) set display to netrw display settings (".g:netrw_bufsettings.")")
+   exe "setl ".g:netrw_bufsettings
++  if g:netrw_liststyle == s:LONGLIST
++"   call Decho("(PerformListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
++   exe "setl ts=".(g:netrw_maxfilenamelen+1)
++  endif
+   if exists("s:treecurpos")
+ 
+-   call netrw#NetrwRestorePosn(s:treecurpos)
++   keepj call netrw#NetrwRestorePosn(s:treecurpos)
+    unlet s:treecurpos
+   endif
+ 
+@@ -6524,7 +7831,7 @@
+   " insure that windows have a statusline
+   " make sure statusline is displayed
+   let &stl=a:statline
+-  setlocal laststatus=2
++  setl laststatus=2
+ "  call Decho("stl=".&stl)
+   redraw
+ 
+@@ -6541,10 +7848,18 @@
+ "  call Dfunc("s:NetrwRemoteListing() b:netrw_curdir<".b:netrw_curdir.">)")
+ 
+   call s:RemotePathAnalysis(b:netrw_curdir)
++"  call Decho("b:netrw_method#".(exists("b:netrw_method")? b:netrw_method : 'n/a'))
++"  call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">")
++"  call Decho("ssh  is ".(executable("ssh")?  "" : "not ")."executable")
++"  call Decho("ftp  is ".(executable("ftp")?  "" : "not ")."executable")
++"  call Decho("sftp is ".(executable("sftp")? "" : "not ")."executable")
+ 
+   " sanity check:
+   if exists("b:netrw_method") && b:netrw_method =~ '[235]'
+-"   call Decho("b:netrw_method=".b:netrw_method)
++   " b:netrw_method = 2: ftp+.netrc
++   " b:netrw_method = 3: ftp+machine,id,p/w,filename (ie. no .netrc)
++   " b:netrw_method = 5: wget (http)
++"   call Decho("b:netrw_method=".b:netrw_method." (for ".s:method.")")
+    if !executable("ftp")
+     if !exists("g:netrw_quiet")
+      call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ftp",18)
+@@ -6554,30 +7869,31 @@
+     return
+    endif
+ 
+-  elseif !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ''
++  elseif s:method == "scp" && (!exists("g:netrw_list_cmd") || g:netrw_list_cmd == '')
++"   call Decho("g:netrw_list_cmd<".(exists("g:netrw_list_cmd")? g:netrw_list_cmd : 'n/a').">")
+    if !exists("g:netrw_quiet")
+-    if g:netrw_list_cmd == ""
+-     call netrw#ErrorMsg(s:ERROR,g:netrw_ssh_cmd." is not executable on your system",47)
++    if !exists("g:netrw_list_cmd") || g:netrw_list_cmd == ""
++     keepj call netrw#ErrorMsg(s:ERROR,"neither ssh nor ftp"." is executable on your system",47)
+     else
+-     call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
++     keepj call netrw#ErrorMsg(s:ERROR,"this system doesn't support remote directory listing via ".g:netrw_list_cmd,19)
+     endif
+    endif
+ 
+-   call s:NetrwOptionRestore("w:")
++   keepj call s:NetrwOptionRestore("w:")
+ "   call Dret("s:NetrwRemoteListing")
+    return
+   endif  " (remote handling sanity check)
+ 
+   if exists("b:netrw_method")
+-"   call Decho("setting w:netrw_method<".b:netrw_method.">")
++"   call Decho("setting w:netrw_method to b:netrw_method<".b:netrw_method.">")
+    let w:netrw_method= b:netrw_method
+   endif
+ 
+   if s:method == "ftp"
+-   " use ftp to get remote file listing
++   " use ftp to get remote file listing {{{3
+ "   call Decho("use ftp to get remote file listing")
+-   let s:method  = "ftp"
+-   let listcmd = g:netrw_ftp_list_cmd
++   let s:method = "ftp"
++   let listcmd  = g:netrw_ftp_list_cmd
+    if g:netrw_sort_by =~ '^t'
+     let listcmd= g:netrw_ftp_timelist_cmd
+    elseif g:netrw_sort_by =~ '^s'
+@@ -6595,19 +7911,19 @@
+     " cleanup
+     if g:netrw_ftp_browse_reject != ""
+      exe "sil! keepalt keepj g/".g:netrw_ftp_browse_reject."/keepj d"
+-     call histdel("/",-1)
++     keepj call histdel("/",-1)
+     endif
+     sil! keepj %s/\r$//e
+-    call histdel("/",-1)
++    keepj call histdel("/",-1)
+ 
+-    " if there's no ../ listed, then put ./ and ../ in
++    " if there's no ../ listed, then put ../ in
+     let line1= line(".")
+     exe "sil! keepj ".w:netrw_bannercnt
+-    let line2= search('^\.\.\/\%(\s\|$\)','cnW')
++    let line2= search('\.\.\/\%(\s\|$\)','cnW')
++"    call Decho("search(".'\.\.\/\%(\s\|$\)'."','cnW')=".line2."  w:netrw_bannercnt=".w:netrw_bannercnt)
+     if line2 == 0
+-"     call Decho("netrw is putting ./ and ../ into listing")
++"     call Decho("netrw is putting ../ into listing")
+      sil! keepj put='../'
+-     sil! keepj put='./'
+     endif
+     exe "sil! keepj ".line1
+     sil! keepj norm! 0
+@@ -6616,15 +7932,15 @@
+     if search('^\d\{2}-\d\{2}-\d\{2}\s','n') " M$ ftp site cleanup
+ "     call Decho("M$ ftp cleanup")
+      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\d\{2}-\d\{2}-\d\{2}\s\+\d\+:\d\+[AaPp][Mm]\s\+\%(<DIR>\|\d\+\)\s\+//'
+-     call histdel("/",-1)
++     keepj call histdel("/",-1)
+     else " normal ftp cleanup
+ "     call Decho("normal ftp cleanup")
+      exe 'sil! keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2/e'
+      exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*/$#/#e'
+      exe "sil! keepj ".w:netrw_bannercnt.',$g/ -> /s# -> .*$#/#e'
+-     call histdel("/",-1)
+-     call histdel("/",-1)
+-     call histdel("/",-1)
++     keepj call histdel("/",-1)
++     keepj call histdel("/",-1)
++     keepj call histdel("/",-1)
+     endif
+    endif
+ 
+@@ -6634,35 +7950,35 @@
+    let listcmd= s:MakeSshCmd(g:netrw_list_cmd)
+ "   call Decho("listcmd<".listcmd."> (using g:netrw_list_cmd)")
+    if g:netrw_scp_cmd =~ '^pscp'
+-"    call Decho("1: exe silent r! ".shellescape(listcmd.s:path, 1))
++"    call Decho("1: exe sil r! ".shellescape(listcmd.s:path, 1))
+     exe "sil! keepj r! ".listcmd.shellescape(s:path, 1)
+     " remove rubbish and adjust listing format of 'pscp' to 'ssh ls -FLa' like
+     sil! keepj g/^Listing directory/keepj d
+     sil! keepj g/^d[-rwx][-rwx][-rwx]/keepj s+$+/+e
+     sil! keepj g/^l[-rwx][-rwx][-rwx]/keepj s+$+@+e
+-    call histdel("/",-1)
+-    call histdel("/",-1)
+-    call histdel("/",-1)
++    keepj call histdel("/",-1)
++    keepj call histdel("/",-1)
++    keepj call histdel("/",-1)
+     if g:netrw_liststyle != s:LONGLIST
+      sil! keepj g/^[dlsp-][-rwx][-rwx][-rwx]/keepj s/^.*\s\(\S\+\)$/\1/e
+-     call histdel("/",-1)
++     keepj call histdel("/",-1)
+     endif
+    else
+     if s:path == ""
+-"     call Decho("2: exe silent r! ".listcmd)
+-     exe "sil! keepalt r! ".listcmd
++"     call Decho("2: exe sil r! ".listcmd)
++     exe "sil! keepj keepalt r! ".listcmd
+     else
+-"     call Decho("3: exe silent r! ".listcmd.' '.shellescape(s:path,1))
+-     exe "sil! keepalt r! ".listcmd.' '.shellescape(s:path,1)
++"     call Decho("3: exe sil r! ".listcmd.' '.shellescape(fnameescape(s:path),1))
++     exe "sil! keepj keepalt r! ".listcmd.' '.shellescape(fnameescape(s:path),1)
+ "     call Decho("listcmd<".listcmd."> path<".s:path.">")
+     endif
+    endif
+ 
+    " cleanup
+    if g:netrw_ftp_browse_reject != ""
+-"    call Decho("(cleanup) exe silent! g/".g:netrw_ssh_browse_reject."/keepjumps d")
++"    call Decho("(cleanup) exe sil! g/".g:netrw_ssh_browse_reject."/keepjumps d")
+     exe "sil! g/".g:netrw_ssh_browse_reject."/keepj d"
+-    call histdel("/",-1)
++    keepj call histdel("/",-1)
+    endif
+   endif
+ 
+@@ -6676,13 +7992,12 @@
+     while getline('.') =~ g:netrw_ftp_browse_reject
+      sil! keepj d
+     endwhile
+-    " if there's no ../ listed, then put ./ and ../ in
++    " if there's no ../ listed, then put ../ in
+     let line1= line(".")
+     sil! keepj 1
+     sil! keepj call search('^\.\.\/\%(\s\|$\)','W')
+     let line2= line(".")
+     if line2 == 0
+-     exe 'sil! keepj '.w:netrw_bannercnt."put='./'"
+      if b:netrw_curdir != '/'
+       exe 'sil! keepj '.w:netrw_bannercnt."put='../'"
+      endif
+@@ -6699,9 +8014,9 @@
+     exe 'sil keepj '.w:netrw_bannercnt.',$s/ -> .*$//e'
+     exe 'sil keepj '.w:netrw_bannercnt.',$s/^\(\%(\S\+\s\+\)\{7}\S\+\)\s\+\(\S.*\)$/\2\t\1/e'
+     exe 'sil keepj '.w:netrw_bannercnt
+-    call histdel("/",-1)
+-    call histdel("/",-1)
+-    call histdel("/",-1)
++    keepj call histdel("/",-1)
++    keepj call histdel("/",-1)
++    keepj call histdel("/",-1)
+    endif
+   endif
+ 
+@@ -6741,7 +8056,7 @@
+ 
+    " remove multiple files and directories
+    while ctr <= a:lastline
+-    exe ctr
++    exe "keepj ".ctr
+     let ok= s:NetrwRemoteRmFile(a:path,s:NetrwGetWord(),all)
+     if ok =~ 'q\%[uit]'
+      break
+@@ -6754,8 +8069,8 @@
+ 
+   " refresh the (remote) directory listing
+ "  call Decho("refresh remote directory listing")
+-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
++  keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
+ 
+ "  call Dret("s:NetrwRemoteRm")
+ endfun
+@@ -6802,7 +8117,7 @@
+      let netrw_rm_cmd= s:MakeSshCmd(g:netrw_rm_cmd)
+ "     call Decho("netrw_rm_cmd<".netrw_rm_cmd.">")
+      if !exists("b:netrw_curdir")
+-      call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
++      keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+       let ok="q"
+      else
+       let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
+@@ -6817,14 +8132,13 @@
+ "      call Decho("call system(".netrw_rm_cmd.")")
+       let ret= system(netrw_rm_cmd)
+       if ret != 0
+-       call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
++       keepj call netrw#ErrorMsg(s:WARNING,"cmd<".netrw_rm_cmd."> failed",60)
+       endif
+ "      call Decho("returned=".ret." errcode=".v:shell_error)
+      endif
+     endif
+    elseif ok =~ 'q\%[uit]'
+ "    call Decho("ok==".ok)
+-    break
+    endif
+ 
+   else
+@@ -6845,7 +8159,7 @@
+ 
+    if all || ok =~ 'y\%[es]' || ok == ""
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+-     call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
++     keepj call s:NetrwRemoteFtpCmd(a:path,"rmdir ".a:rmfile)
+     else
+      let rmfile          = substitute(a:path.a:rmfile,'/$','','')
+      let netrw_rmdir_cmd = s:MakeSshCmd(netrw#WinPath(g:netrw_rmdir_cmd)).' '.shellescape(netrw#WinPath(rmfile))
+@@ -6861,13 +8175,13 @@
+ "      call Decho("returned=".ret." errcode=".v:shell_error)
+ 
+       if v:shell_error != 0 && !exists("g:netrw_quiet")
+-      	call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
++      	keepj call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",22)
+       endif
+      endif
+     endif
+ 
+    elseif ok =~ 'q\%[uit]'
+-    break
++"    call Decho("ok==".ok)
+    endif
+   endif
+ 
+@@ -6881,18 +8195,27 @@
+ "  and reverse sorts will be requested of the server but not otherwise
+ "  enforced here.
+ fun! s:NetrwRemoteFtpCmd(path,listcmd)
+-"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) netrw_method=".w:netrw_method)
+-"  call Decho("line($)=".line("$")." bannercnt=".w:netrw_bannercnt)
++"  call Dfunc("NetrwRemoteFtpCmd(path<".a:path."> listcmd<".a:listcmd.">) w:netrw_method=".(exists("w:netrw_method")? w:netrw_method : (exists("b:netrw_method")? b:netrw_method : "???")))
++"  call Decho("line($)=".line("$")." w:netrw_bannercnt=".w:netrw_bannercnt)
++  if !exists("w:netrw_method")
++   if exists("b:netrw_method")
++    let w:netrw_method= b:netrw_method
++   else
++    call netrw#ErrorMsg(2,"(s:NetrwRemoteFtpCmd) internal netrw error",93)
++"    call Dret("NetrwRemoteFtpCmd")
++    return
++   endif
++  endif
+ 
+   " because WinXX ftp uses unix style input
+   let ffkeep= &ff
+-  setlocal ma ff=unix noro
+-"  call Decho("setlocal ma ff=unix noro")
++  setl ma ff=unix noro
++"  call Decho("setl ma ff=unix noro")
+ 
+   " clear off any older non-banner lines
+   " note that w:netrw_bannercnt indexes the line after the banner
+-"  call Decho('exe silent! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
+-  exe "silent! keepjumps ".w:netrw_bannercnt.",$d"
++"  call Decho('exe sil! keepjumps '.w:netrw_bannercnt.",$d  (clear off old non-banner lines)")
++  exe "sil! keepjumps ".w:netrw_bannercnt.",$d"
+ 
+   ".........................................
+   if w:netrw_method == 2 || w:netrw_method == 5
+@@ -6904,31 +8227,41 @@
+     keepj put =g:netrw_ftpextracmd
+ "    call Decho("filter input: ".getline('.'))
+    endif
+-   call setline(line("$")+1,a:listcmd)
++   keepj call setline(line("$")+1,a:listcmd)
+ "   exe "keepjumps ".w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
+    if exists("g:netrw_port") && g:netrw_port != ""
+-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
+-    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
++"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1))
++    exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)." ".shellescape(g:netrw_port,1)
+    else
+-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
+-    exe s:netrw_silentxfer." keepjumps ".w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
++"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1))
++    exe s:netrw_silentxfer." keepj ".w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." -i ".shellescape(g:netrw_machine,1)
+    endif
+ 
+    ".........................................
+   elseif w:netrw_method == 3
+    " ftp + machine,id,passwd,filename:  Method #3
+-    setlocal ff=unix
++    setl ff=unix
+     if exists("g:netrw_port") && g:netrw_port != ""
+      keepj put ='open '.g:netrw_machine.' '.g:netrw_port
+     else
+      keepj put ='open '.g:netrw_machine
+     endif
+ 
+-    if exists("g:netrw_ftp") && g:netrw_ftp == 1
+-     keepj put =g:netrw_uid
+-     keepj put ='\"'.s:netrw_passwd.'\"'
+-    else
+-     keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
++    " handle userid and password
++    let host= substitute(g:netrw_machine,'\..*$','','')
++"    call Decho("host<".host.">")
++    if exists("s:netrw_hup") && exists("s:netrw_hup[host]")
++     call NetUserPass("ftp:".host)
++    endif
++    if exists("g:netrw_uid") && g:netrw_uid != ""
++     if exists("g:netrw_ftp") && g:netrw_ftp == 1
++      keepj put =g:netrw_uid
++      if exists("s:netrw_passwd") && s:netrw_passwd != ""
++       keepj put ='\"'.s:netrw_passwd.'\"'
++      endif
++     elseif exists("s:netrw_passwd")
++      keepj put ='user \"'.g:netrw_uid.'\" \"'.s:netrw_passwd.'\"'
++     endif
+     endif
+ 
+    if a:path != ""
+@@ -6945,28 +8278,28 @@
+     " -n  unix : DON'T use <.netrc>, even though it exists
+     " -n  win32: quit being obnoxious about password
+ "    exe w:netrw_bannercnt.',$g/^./call Decho("ftp#".line(".").": ".getline("."))'
+-"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n")
+-    exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".g:netrw_ftp_cmd." -i -n"
++"    call Decho("exe ".s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options)
++    exe s:netrw_silentxfer.w:netrw_bannercnt.",$!".s:netrw_ftp_cmd." ".g:netrw_ftp_options
+ 
+    ".........................................
+   else
+-   call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
++   keepj call netrw#ErrorMsg(s:WARNING,"unable to comply with your request<" . choice . ">",23)
+   endif
+ 
+   " cleanup for Windows
+   if has("win32") || has("win95") || has("win64") || has("win16")
+    sil! keepj %s/\r$//e
+-   call histdel("/",-1)
++   keepj call histdel("/",-1)
+   endif
+   if a:listcmd == "dir"
+    " infer directory/link based on the file permission string
+    sil! keepj g/d\%([-r][-w][-x]\)\{3}/keepj s@$@/@
+    sil! keepj g/l\%([-r][-w][-x]\)\{3}/keepj s/$/@/
+-   call histdel("/",-1)
+-   call histdel("/",-1)
++   keepj call histdel("/",-1)
++   keepj call histdel("/",-1)
+    if w:netrw_liststyle == s:THINLIST || w:netrw_liststyle == s:WIDELIST || w:netrw_liststyle == s:TREELIST
+     exe "sil! keepj ".w:netrw_bannercnt.',$s/^\%(\S\+\s\+\)\{8}//e'
+-    call histdel("/",-1)
++    keepj call histdel("/",-1)
+    endif
+   endif
+ 
+@@ -7015,7 +8348,7 @@
+     endif
+    
+     if exists("w:netrw_method") && (w:netrw_method == 2 || w:netrw_method == 3)
+-     call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
++     keepj call s:NetrwRemoteFtpCmd(a:path,"rename ".oldname." ".newname)
+     else
+      let oldname= shellescape(a:path.oldname)
+      let newname= shellescape(a:path.newname)
+@@ -7053,17 +8386,67 @@
+   endif
+ 
+   " refresh the directory
+-  call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
++  keepj call s:NetrwRefresh(0,s:NetrwBrowseChgDir(0,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
+ 
+ "  call Dret("NetrwRemoteRename")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-"  Local Directory Browsing Support:    {{{1
+-" ==========================================
+-
+-" ---------------------------------------------------------------------
++"  Local Directory Browsing Support:    {{{1
++" ==========================================
++
++" ---------------------------------------------------------------------
++" netrw#FileUrlRead: handles reading file://* files {{{2
++"   Should accept:   file://localhost/etc/fstab
++"                    file:///etc/fstab
++"                    file:///c:/WINDOWS/clock.avi
++"                    file:///c|/WINDOWS/clock.avi
++"                    file://localhost/c:/WINDOWS/clock.avi
++"                    file://localhost/c|/WINDOWS/clock.avi
++"                    file://c:/foo.txt
++"                    file:///c:/foo.txt
++" and %XX (where X is [0-9a-fA-F] is converted into a character with the given hexadecimal value
++fun! netrw#FileUrlRead(fname)
++"  call Dfunc("netrw#FileUrlRead(fname<".a:fname.">)")
++  let fname = a:fname
++  if fname =~ '^file://localhost/'
++"   call Decho('converting file://localhost/   -to-  file:///')
++   let fname= substitute(fname,'^file://localhost/','file:///','')
++"   call Decho("fname<".fname.">")
++  endif
++  if (has("win32") || has("win95") || has("win64") || has("win16"))
++   if fname  =~ '^file:///\=\a[|:]/'
++"    call Decho('converting file:///\a|/   -to-  file://\a:/')
++    let fname = substitute(fname,'^file:///\=\(\a\)[|:]/','file://\1:/','')
++"    call Decho("fname<".fname.">")
++   endif
++  endif
++  let fname2396 = netrw#RFC2396(fname)
++  let fname2396e= fnameescape(fname2396)
++  let plainfname= substitute(fname2396,'file://\(.*\)','\1',"")
++  if (has("win32") || has("win95") || has("win64") || has("win16"))
++"   call Decho("windows exception for plainfname")
++   if plainfname =~ '^/\+\a:'
++"    call Decho('removing leading "/"s')
++    let plainfname= substitute(plainfname,'^/\+\(\a:\)','\1','')
++   endif
++  endif
++"  call Decho("fname2396<".fname2396.">")
++"  call Decho("plainfname<".plainfname.">")
++  exe "sil doau BufReadPre ".fname2396e
++  exe 'keepj r '.plainfname
++  exe 'sil! bdelete '.plainfname
++  exe 'keepalt file! '.plainfname
++  keepj 1d
++"  call Decho("(FileUrlRead) setl nomod")
++  setl nomod
++"  call Decho("(FileUrlRead) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"  call Dret("netrw#FileUrlRead")
++  exe "sil doau BufReadPost ".fname2396e
++endfun
++
++" ---------------------------------------------------------------------
+ " netrw#LocalBrowseCheck: {{{2
+ fun! netrw#LocalBrowseCheck(dirname)
+   " unfortunate interaction -- split window debugging can't be
+@@ -7073,18 +8456,38 @@
+   " The &ft == "netrw" test was installed because the BufEnter event
+   " would hit when re-entering netrw windows, creating unexpected
+   " refreshes (and would do so in the middle of NetrwSaveOptions(), too)
+-"  call Decho("netrw#LocalBrowseCheck: isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
++"  call Decho("(LocalBrowseCheck) isdir<".a:dirname.">=".isdirectory(a:dirname).((exists("s:treeforceredraw")? " treeforceredraw" : "")))
++"  call Dredir("LocalBrowseCheck","ls!")|redraw!|sleep 3
++  let ykeep= @@
+   if isdirectory(a:dirname)
+-"   call Decho(" ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$"))
+-   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname)
+-    silent! call s:NetrwBrowse(1,a:dirname)
++"   call Decho("(LocalBrowseCheck) is-directory ft<".&ft."> b:netrw_curdir<".(exists("b:netrw_curdir")? b:netrw_curdir : " doesn't exist")."> dirname<".a:dirname.">"." line($)=".line("$")." ft<".&ft."> g:netrw_fastbrowse=".g:netrw_fastbrowse)
++   let svposn= netrw#NetrwSavePosn()
++   if &ft != "netrw" || (exists("b:netrw_curdir") && b:netrw_curdir != a:dirname) || g:netrw_fastbrowse <= 1
++    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
++    keepalt call netrw#NetrwRestorePosn(svposn)
+    elseif &ft == "netrw" && line("$") == 1
+-    silent! call s:NetrwBrowse(1,a:dirname)
++    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
++    keepalt call netrw#NetrwRestorePosn(svposn)
+    elseif exists("s:treeforceredraw")
+     unlet s:treeforceredraw
+-    silent! call s:NetrwBrowse(1,a:dirname)
++    sil! keepj keepalt call s:NetrwBrowse(1,a:dirname)
++    keepalt call netrw#NetrwRestorePosn(svposn)
+    endif
+   endif
++  " following code wipes out currently unused netrw buffers
++  "       IF g:netrw_fastbrowse is zero (ie. slow browsing selected)
++  "   AND IF the listing style is not a tree listing
++  if exists("g:netrw_fastbrowse") && g:netrw_fastbrowse == 0 && g:netrw_liststyle != s:TREELIST
++   let ibuf    = 1
++   let buflast = bufnr("$")
++   while ibuf <= buflast
++    if bufwinnr(ibuf) == -1 && isdirectory(bufname(ibuf))
++     exe "sil! keepalt ".ibuf."bw!"
++    endif
++    let ibuf= ibuf + 1
++   endwhile
++  endif
++  let @@= ykeep
+   " not a directory, ignore it
+ endfun
+ 
+@@ -7092,101 +8495,68 @@
+ "  s:LocalListing: does the job of "ls" for local directories {{{2
+ fun! s:LocalListing()
+ "  call Dfunc("s:LocalListing()")
+-"  call Decho("&ma=".&ma)
+-"  call Decho("&mod=".&mod)
+-"  call Decho("&ro=".&ro)
+-"  call Decho("bufname(%)<".bufname("%").">")
++"  call Decho("(LocalListing) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++"  call Decho("(LocalListing) tab#".tabpagenr()." win#".winnr()." buf#".bufnr("%")."<".bufname("%")."> modified=".&modified." modifiable=".&modifiable." readonly=".&readonly)
+ 
+-"  if exists("b:netrw_curdir") |call Decho('b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("b:netrw_curdir doesn't exist") |endif
+-"  if exists("g:netrw_sort_by")|call Decho('g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("g:netrw_sort_by doesn't exist")|endif
++"  if exists("b:netrw_curdir") |call Decho('(LocalListing) b:netrw_curdir<'.b:netrw_curdir.">")  |else|call Decho("(LocalListing) b:netrw_curdir doesn't exist") |endif
++"  if exists("g:netrw_sort_by")|call Decho('(LocalListing) g:netrw_sort_by<'.g:netrw_sort_by.">")|else|call Decho("(LocalListing) g:netrw_sort_by doesn't exist")|endif
+ 
+   " get the list of files contained in the current directory
+-  let dirname    = escape(b:netrw_curdir,g:netrw_glob_escape)
++  let dirname    = b:netrw_curdir
+   let dirnamelen = s:Strlen(b:netrw_curdir)
+-  let filelist   = glob(s:ComposePath(dirname,"*"))
+-"  call Decho("glob(dirname<".dirname."/*>)=".filelist)
+-  if filelist != ""
+-   let filelist= filelist."\n"
+-  endif
+-  let filelist= filelist.glob(s:ComposePath(dirname,".*"))
+-"  call Decho("glob(dirname<".dirname."/.*>)=".filelist)
+-
+-  " Coding choice: either   elide   ./ if present
+-  "                or       include ./ if not present
+-  if filelist =~ '[\\/]\.[\\/]\=\(\n\|$\)'
+-   " elide /path/. from glob() entries if present
+-"   call Decho("elide /path/. from glob entries if present")
+-   let filelist = substitute(filelist,'\n','\t','g')
+-   let filelist = substitute(filelist,'^[^\t]\+[/\\]\.\t','','')
+-   let filelist = substitute(filelist,'[^\t]\+[/\\]\.$','','')
+-   let filelist = substitute(filelist,'\t\zs[^\t]\+[/\\]\.\t','','')
+-   let filelist = substitute(filelist,'\t','\n','g')
+-  endif
+-"  call Decho("filelist<".filelist.">")
+-  if filelist !~ '[\\/]\.\.[\\/]\=\(\n\|$\)'
++  let filelist   = glob(s:ComposePath(dirname,"*"),0,1)
++  let filelist   = filelist + glob(s:ComposePath(dirname,".*"),0,1)
++"  call Decho("(LocalListing) filelist=".filelist)
++
++  if g:netrw_cygwin == 0 && (has("win32") || has("win95") || has("win64") || has("win16"))
++"   call Decho("(LocalListing) filelist=".string(filelist))
++  elseif index(filelist,'..') == -1 && b:netrw_curdir !~ '/'
+     " include ../ in the glob() entry if its missing
+-"   call Decho("forcibly tacking on ..")
+-   let filelist= filelist."\n".s:ComposePath(b:netrw_curdir,"../")
+-"   call Decho("filelist<".filelist.">")
+-  endif
+-  if b:netrw_curdir == '/'
+-   " remove .. from filelist when current directory is root directory
+-"   call Decho("remove .. from filelist")
+-   let filelist= substitute(filelist,'/\.\.\n','','')
++"   call Decho("(LocalListing) forcibly including on \"..\"")
++   let filelist= filelist+[s:ComposePath(b:netrw_curdir,"../")]
++"   call Decho("(LocalListing) filelist=".string(filelist))
++  endif
++
++"  call Decho("(LocalListing) (before while) dirname<".dirname.">")
++"  call Decho("(LocalListing) (before while) dirnamelen<".dirnamelen.">")
++"  call Decho("(LocalListing) (before while) filelist=".string(filelist))
++
++  if get(g:, 'netrw_dynamic_maxfilenamelen', 0)
++   let filelistcopy           = map(deepcopy(filelist),'fnamemodify(v:val, ":t")')
++   let g:netrw_maxfilenamelen = max(map(filelistcopy,'len(v:val)')) + 1
++"   call Decho("(LocalListing) dynamic_maxfilenamelen: filenames             =".string(filelistcopy))
++"   call Decho("(LocalListing) dynamic_maxfilenamelen: g:netrw_maxfilenamelen=".g:netrw_maxfilenamelen)
+   endif
+-  " remove multiple contiguous newlines
+-  let filelist= substitute(filelist,'\n\{2,}','\n','ge')
+-  if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+-   " change all \s to /s
+-"   call Decho('change all \s to /s')
+-   let filelist= substitute(filelist,'\','/','g')
+-  else
+-   " escape all \s to \\
+-"   call Decho('escape all \s to \\')
+-   let filelist= substitute(filelist,'\','\\','g')
+-  endif
+-
+-"  call Decho("(before while) dirname<".dirname.">")
+-"  call Decho("(before while) dirnamelen<".dirnamelen.">")
+-"  call Decho("(before while) filelist<".filelist.">")
+-
+-  while filelist != ""
+-   if filelist =~ '\n'
+-    let filename = substitute(filelist,'\n.*$','','e')
+-    let filelist = substitute(filelist,'^.\{-}\n\(.*\)$','\1','e')
+-   else
+-    let filename = filelist
+-    let filelist = ""
+-   endif
+-"   call Decho(" ")
+-"   call Decho("(while) filelist<".filelist.">")
+-"   call Decho("(while) filename<".filename.">")
++
++  for filename in filelist
++"   call Decho("(LocalListing)  ")
++"   call Decho("(LocalListing) (while) filename<".filename.">")
+ 
+    if getftype(filename) == "link"
+     " indicate a symbolic link
+-"    call Decho("indicate <".filename."> is a symbolic link with trailing @")
++"    call Decho("(LocalListing) indicate <".filename."> is a symbolic link with trailing @")
+     let pfile= filename."@"
+ 
+    elseif getftype(filename) == "socket"
+     " indicate a socket
+-"    call Decho("indicate <".filename."> is a socket with trailing =")
++"    call Decho("(LocalListing) indicate <".filename."> is a socket with trailing =")
+     let pfile= filename."="
+ 
+    elseif getftype(filename) == "fifo"
+     " indicate a fifo
+-"    call Decho("indicate <".filename."> is a fifo with trailing |")
++"    call Decho("(LocalListing) indicate <".filename."> is a fifo with trailing |")
+     let pfile= filename."|"
+ 
+    elseif isdirectory(filename)
+     " indicate a directory
+-"    call Decho("indicate <".filename."> is a directory with trailing /")
++"    call Decho("(LocalListing) indicate <".filename."> is a directory with trailing /")
+     let pfile= filename."/"
+ 
+    elseif exists("b:netrw_curdir") && b:netrw_curdir !~ '^.*://' && !isdirectory(filename)
+     if (has("win32") || has("win95") || has("win64") || has("win16"))
+      if filename =~ '\.[eE][xX][eE]$' || filename =~ '\.[cC][oO][mM]$' || filename =~ '\.[bB][aA][tT]$'
+       " indicate an executable
+-"      call Decho("indicate <".filename."> is executable with trailing *")
++"      call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
+       let pfile= filename."*"
+      else
+       " normal file
+@@ -7194,7 +8564,7 @@
+      endif
+     elseif executable(filename)
+      " indicate an executable
+-"     call Decho("indicate <".filename."> is executable with trailing *")
++"     call Decho("(LocalListing) indicate <".filename."> is executable with trailing *")
+      let pfile= filename."*"
+     else
+      " normal file
+@@ -7205,55 +8575,55 @@
+     " normal file
+     let pfile= filename
+    endif
+-"   call Decho("pfile<".pfile."> (after *@/ appending)")
++"   call Decho("(LocalListing) pfile<".pfile."> (after *@/ appending)")
+ 
+    if pfile =~ '//$'
+     let pfile= substitute(pfile,'//$','/','e')
+-"    call Decho("change // to /: pfile<".pfile.">")
++"    call Decho("(LocalListing) change // to /: pfile<".pfile.">")
+    endif
+    let pfile= strpart(pfile,dirnamelen)
+    let pfile= substitute(pfile,'^[/\\]','','e')
+-"   call Decho("filename<".filename.">")
+-"   call Decho("pfile   <".pfile.">")
++"   call Decho("(LocalListing) filename<".filename.">")
++"   call Decho("(LocalListing) pfile   <".pfile.">")
+ 
+    if w:netrw_liststyle == s:LONGLIST
+     let sz   = getfsize(filename)
+     let fsz  = strpart("               ",1,15-strlen(sz)).sz
+     let pfile= pfile."\t".fsz." ".strftime(g:netrw_timefmt,getftime(filename))
+-"    call Decho("sz=".sz." fsz=".fsz)
++"    call Decho("(LocalListing) sz=".sz." fsz=".fsz)
+    endif
+ 
+    if     g:netrw_sort_by =~ "^t"
+     " sort by time (handles time up to 1 quintillion seconds, US)
+-"    call Decho("getftime(".filename.")=".getftime(filename))
++"    call Decho("(LocalListing) getftime(".filename.")=".getftime(filename))
+     let t  = getftime(filename)
+     let ft = strpart("000000000000000000",1,18-strlen(t)).t
+-"    call Decho("exe keepjumps put ='".ft.'/'.filename."'")
++"    call Decho("(LocalListing) exe keepjumps put ='".ft.'/'.filename."'")
+     let ftpfile= ft.'/'.pfile
+     sil! keepj put=ftpfile
+ 
+    elseif g:netrw_sort_by =~ "^s"
+     " sort by size (handles file sizes up to 1 quintillion bytes, US)
+-"    call Decho("getfsize(".filename.")=".getfsize(filename))
++"    call Decho("(LocalListing) getfsize(".filename.")=".getfsize(filename))
+     let sz   = getfsize(filename)
+     let fsz  = strpart("000000000000000000",1,18-strlen(sz)).sz
+-"    call Decho("exe keepjumps put ='".fsz.'/'.filename."'")
++"    call Decho("(LocalListing) exe keepj put ='".fsz.'/'.filename."'")
+     let fszpfile= fsz.'/'.pfile
+     sil! keepj put =fszpfile
+ 
+    else
+     " sort by name
+-"    call Decho("exe keepjumps put ='".pfile."'")
++"    call Decho("(LocalListing) exe keepjumps put ='".pfile."'")
+     sil! keepj put=pfile
+    endif
+-  endwhile
++  endfor
+ 
+   " cleanup any windows mess at end-of-line
+   sil! keepj g/^$/d
+   sil! keepj %s/\r$//e
+   call histdel("/",-1)
+-  exe "setlocal ts=".g:netrw_maxfilenamelen
+-"  call Decho("setlocal ts=".g:netrw_maxfilenamelen)
++"  call Decho("(LocalListing) exe setl ts=".(g:netrw_maxfilenamelen+1))
++  exe "setl ts=".(g:netrw_maxfilenamelen+1)
+ 
+ "  call Dret("s:LocalListing")
+ endfun
+@@ -7284,47 +8654,214 @@
+   endif
+   let itab       = 1
+   let buftablist = []
++  let ykeep      = @@
+   while itab <= tabpagenr("$")
+    let buftablist = buftablist + tabpagebuflist()
+    let itab       = itab + 1
+    tabn
+   endwhile
+-"  call Decho("buftablist".string(buftablist))
+-"  call Decho("s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
++"  call Decho("(LocalBrowseShellCmdRefresh) buftablist".string(buftablist))
++"  call Decho("(LocalBrowseShellCmdRefresh) s:netrw_browselist<".(exists("s:netrw_browselist")? string(s:netrw_browselist) : "").">")
+   "  GO through all buffers on netrw_browselist (ie. just local-netrw buffers):
+   "   | refresh any netrw window
+   "   | wipe out any non-displaying netrw buffer
+   let curwin = winnr()
+   let ibl    = 0
+   for ibuf in s:netrw_browselist
+-"   call Decho("bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
++"   call Decho("(LocalBrowseShellCmdRefresh) bufwinnr(".ibuf.") index(buftablist,".ibuf.")=".index(buftablist,ibuf))
+    if bufwinnr(ibuf) == -1 && index(buftablist,ibuf) == -1
+     " wipe out any non-displaying netrw buffer
+-"    call Decho("wiping  buf#".ibuf,"<".bufname(ibuf).">")
++"    call Decho("(LocalBrowseShellCmdRefresh) wiping  buf#".ibuf,"<".bufname(ibuf).">")
+     exe "sil! bd ".fnameescape(ibuf)
+     call remove(s:netrw_browselist,ibl)
+-"    call Decho("browselist=".string(s:netrw_browselist))
++"    call Decho("(LocalBrowseShellCmdRefresh) browselist=".string(s:netrw_browselist))
+     continue
+    elseif index(tabpagebuflist(),ibuf) != -1
+     " refresh any netrw buffer
+-"    call Decho("refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
++"    call Decho("(LocalBrowseShellCmdRefresh) refresh buf#".ibuf.'-> win#'.bufwinnr(ibuf))
+     exe bufwinnr(ibuf)."wincmd w"
+-    call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
++    keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+    endif
+    let ibl= ibl + 1
+   endfor
+   exe curwin."wincmd w"
++  let @@= ykeep
+ 
+ "  call Dret("LocalBrowseShellCmdRefresh")
+ endfun
+ 
+ " ---------------------------------------------------------------------
++" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
++"
++"     g:netrw_    Directory Is
++"     fastbrowse  Local  Remote   
++"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
++"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
++"  fast   2         H      H      
++"
++"  Deleting a buffer means that it will be re-loaded when examined, hence "slow".
++"  Hiding   a buffer means that it will be re-used   when examined, hence "fast".
++"           (re-using a buffer may not be as accurate)
++fun! s:LocalFastBrowser()
++"    call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse."  s:netrw_browser_shellcmd ".(exists("s:netrw_browser_shellcmd")? "exists" : "does not exist"))
++
++  " initialize browselist, a list of buffer numbers that the local browser has used
++  if !exists("s:netrw_browselist")
++"   call Decho("(LocalFastBrowser) initialize s:netrw_browselist")
++   let s:netrw_browselist= []
++  endif
++
++  " append current buffer to fastbrowse list
++  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
++"   call Decho("(LocalFastBrowser) appendng current buffer to browselist")
++   call add(s:netrw_browselist,bufnr("%"))
++"   call Decho("(LocalFastBrowser) browselist=".string(s:netrw_browselist))
++  endif
++
++  " enable autocmd events to handle refreshing/removing local browser buffers
++  "    If local browse buffer is currently showing: refresh it
++  "    If local browse buffer is currently hidden : wipe it
++  "    g:netrw_fastbrowse=0 : slow   speed, never re-use directory listing
++  "                      =1 : medium speed, re-use directory listing for remote only
++  "                      =2 : fast   speed, always re-use directory listing when possible
++  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
++"   call Decho("(LocalFastBrowser) setting up local-browser shell command refresh")
++   let s:netrw_browser_shellcmd= 1
++   augroup AuNetrwShellCmd
++    au!
++    if (has("win32") || has("win95") || has("win64") || has("win16"))
++"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
++     au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
++    else
++     au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
++"     call Decho("(LocalFastBrowser) autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
++    endif
++   augroup END
++  endif
++
++  " user must have changed fastbrowse to its fast setting, so remove
++  " the associated autocmd events
++  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
++"   call Decho("(LocalFastBrowser) remove AuNetrwShellCmd autcmd group")
++   unlet s:netrw_browser_shellcmd
++   augroup AuNetrwShellCmd
++    au!
++   augroup END
++   augroup! AuNetrwShellCmd
++  endif
++
++"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwLocalExecute: uses system() to execute command under cursor ("X" command support) {{{2
++fun! s:NetrwLocalExecute(cmd)
++"  call Dfunc("s:NetrwLocalExecute(cmd<".a:cmd.">)")
++  let ykeep= @@
++  " sanity check
++  if !executable(a:cmd)
++   call netrw#ErrorMsg(s:ERROR,"the file<".a:cmd."> is not executable!",89)
++   let @@= ykeep
++"   call Dret("s:NetrwLocalExecute")
++   return
++  endif
++
++  let optargs= input(":!".a:cmd,"","file")
++"  call Decho("optargs<".optargs.">")
++  let result= system(a:cmd.optargs)
++"  call Decho(result)
++
++  " strip any ansi escape sequences off
++  let result = substitute(result,"\e\\[[0-9;]*m","","g")
++
++  " show user the result(s)
++  echomsg result
++  let @@= ykeep
++
++"  call Dret("s:NetrwLocalExecute")
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwLocalRename: rename a remote file or directory {{{2
++fun! s:NetrwLocalRename(path) range
++"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
++
++  " preparation for removing multiple files/directories
++  let ykeep = @@
++  let ctr   = a:firstline
++  let svpos = netrw#NetrwSavePosn()
++
++  " rename files given by the markfilelist
++  if exists("s:netrwmarkfilelist_{bufnr('%')}")
++   for oldname in s:netrwmarkfilelist_{bufnr("%")}
++"    call Decho("oldname<".oldname.">")
++    if exists("subfrom")
++     let newname= substitute(oldname,subfrom,subto,'')
++"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
++    else
++     call inputsave()
++     let newname= input("Moving ".oldname." to : ",oldname)
++     call inputrestore()
++     if newname =~ '^s/'
++      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
++      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
++"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
++      let newname = substitute(oldname,subfrom,subto,'')
++     endif
++    endif
++    call rename(oldname,newname)
++   endfor
++   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
++  
++  else
++
++   " attempt to rename files/directories
++   while ctr <= a:lastline
++    exe "keepj ".ctr
++
++    " sanity checks
++    if line(".") < w:netrw_bannercnt
++     let ctr= ctr + 1
++     continue
++    endif
++    let curword= s:NetrwGetWord()
++    if curword == "./" || curword == "../"
++     let ctr= ctr + 1
++     continue
++    endif
++
++    keepj norm! 0
++    let oldname= s:ComposePath(a:path,curword)
++"   call Decho("oldname<".oldname.">")
++
++    call inputsave()
++    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
++    call inputrestore()
++
++    call rename(oldname,newname)
++"   call Decho("renaming <".oldname."> to <".newname.">")
++
++    let ctr= ctr + 1
++   endwhile
++  endif
++
++  " refresh the directory
++"  call Decho("refresh the directory listing")
++  keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
++  keepj call netrw#NetrwRestorePosn(svpos)
++  let @@= ykeep
++
++"  call Dret("NetrwLocalRename")
++endfun
++
++" ---------------------------------------------------------------------
+ " s:NetrwLocalRm: {{{2
+ fun! s:NetrwLocalRm(path) range
+ "  call Dfunc("s:NetrwLocalRm(path<".a:path.">)")
+ "  call Decho("firstline=".a:firstline." lastline=".a:lastline)
+ 
+   " preparation for removing multiple files/directories
++  let ykeep = @@
+   let ret   = 0
+   let all   = 0
+   let svpos = netrw#NetrwSavePosn()
+@@ -7373,9 +8910,10 @@
+   " refresh the directory
+ "  call Decho("bufname<".bufname("%").">")
+   if bufname("%") != "NetrwMessage"
+-   call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+-   call netrw#NetrwRestorePosn(svpos)
++   keepj call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
++   keepj call netrw#NetrwRestorePosn(svpos)
+   endif
++  let @@= ykeep
+ 
+ "  call Dret("s:NetrwLocalRm")
+ endfun
+@@ -7396,281 +8934,96 @@
+    " attempt to remove file
+ "   call Decho("attempt to remove file<".rmfile.">")
+    if !all
+-    echohl Statement
+-    call inputsave()
+-    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+-    call inputrestore()
+-    echohl NONE
+-    if ok == ""
+-     let ok="no"
+-    endif
+-"    call Decho("response: ok<".ok.">")
+-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+-"    call Decho("response: ok<".ok."> (after sub)")
+-    if ok =~ 'a\%[ll]'
+-     let all= 1
+-    endif
+-   endif
+-
+-   if all || ok =~ 'y\%[es]' || ok == ""
+-    let ret= s:NetrwDelete(rmfile)
+-"    call Decho("errcode=".v:shell_error." ret=".ret)
+-   endif
+-
+-  else
+-   " attempt to remove directory
+-   if !all
+-    echohl Statement
+-    call inputsave()
+-    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+-    call inputrestore()
+-    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
+-    if ok == ""
+-     let ok="no"
+-    endif
+-    if ok =~ 'a\%[ll]'
+-     let all= 1
+-    endif
+-   endif
+-   let rmfile= substitute(rmfile,'[\/]$','','e')
+-
+-   if all || ok =~ 'y\%[es]' || ok == ""
+-"    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_local_rmdir.') '.shellescape(rmfile).')')
+-    call system(netrw#WinPath(g:netrw_local_rmdir).' '.shellescape(rmfile))
+-"    call Decho("v:shell_error=".v:shell_error)
+-
+-    if v:shell_error != 0
+-"     call Decho("2nd attempt to remove directory<".rmfile.">")
+-     let errcode= s:NetrwDelete(rmfile)
+-"     call Decho("errcode=".errcode)
+-
+-     if errcode != 0
+-      if has("unix")
+-"       call Decho("3rd attempt to remove directory<".rmfile.">")
+-       call system("rm ".shellescape(rmfile))
+-       if v:shell_error != 0 && !exists("g:netrw_quiet")
+-        call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
+-	let ok="no"
+-       endif
+-      elseif !exists("g:netrw_quiet")
+-       call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
+-       let ok="no"
+-      endif
+-     endif
+-    endif
+-   endif
+-  endif
+-
+-"  call Dret("s:NetrwLocalRmFile ".ok)
+-  return ok
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" s:NetrwLocalRename: rename a remote file or directory {{{2
+-fun! s:NetrwLocalRename(path) range
+-"  call Dfunc("NetrwLocalRename(path<".a:path.">)")
+-
+-  " preparation for removing multiple files/directories
+-  let ctr  = a:firstline
+-  let svpos= netrw#NetrwSavePosn()
+-
+-  " rename files given by the markfilelist
+-  if exists("s:netrwmarkfilelist_{bufnr('%')}")
+-   for oldname in s:netrwmarkfilelist_{bufnr("%")}
+-"    call Decho("oldname<".oldname.">")
+-    if exists("subfrom")
+-     let newname= substitute(oldname,subfrom,subto,'')
+-"     call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+-    else
+-     call inputsave()
+-     let newname= input("Moving ".oldname." to : ",oldname)
+-     call inputrestore()
+-     if newname =~ '^s/'
+-      let subfrom = substitute(newname,'^s/\([^/]*\)/.*/$','\1','')
+-      let subto   = substitute(newname,'^s/[^/]*/\(.*\)/$','\1','')
+-"      call Decho("subfrom<".subfrom."> subto<".subto."> newname<".newname.">")
+-      let newname = substitute(oldname,subfrom,subto,'')
+-     endif
+-    endif
+-    call rename(oldname,newname)
+-   endfor
+-   call s:NetrwUnmarkList(bufnr("%"),b:netrw_curdir)
+-  
+-  else
+-
+-   " attempt to rename files/directories
+-   while ctr <= a:lastline
+-    exe "keepj ".ctr
+-
+-    " sanity checks
+-    if line(".") < w:netrw_bannercnt
+-     let ctr= ctr + 1
+-     continue
++    echohl Statement
++    call inputsave()
++    let ok= input("Confirm deletion of file<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
++    call inputrestore()
++    echohl NONE
++    if ok == ""
++     let ok="no"
+     endif
+-    let curword= s:NetrwGetWord()
+-    if curword == "./" || curword == "../"
+-     let ctr= ctr + 1
+-     continue
++"    call Decho("response: ok<".ok.">")
++    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
++"    call Decho("response: ok<".ok."> (after sub)")
++    if ok =~ 'a\%[ll]'
++     let all= 1
+     endif
++   endif
+ 
+-    keepj norm! 0
+-    let oldname= s:ComposePath(a:path,curword)
+-"   call Decho("oldname<".oldname.">")
++   if all || ok =~ 'y\%[es]' || ok == ""
++    let ret= s:NetrwDelete(rmfile)
++"    call Decho("errcode=".v:shell_error." ret=".ret)
++   endif
+ 
++  else
++   " attempt to remove directory
++   if !all
++    echohl Statement
+     call inputsave()
+-    let newname= input("Moving ".oldname." to : ",substitute(oldname,'/*$','','e'))
++    let ok= input("Confirm deletion of directory<".rmfile."> ","[{y(es)},n(o),a(ll),q(uit)] ")
+     call inputrestore()
++    let ok= substitute(ok,'\[{y(es)},n(o),a(ll),q(uit)]\s*','','e')
++    if ok == ""
++     let ok="no"
++    endif
++    if ok =~ 'a\%[ll]'
++     let all= 1
++    endif
++   endif
++   let rmfile= substitute(rmfile,'[\/]$','','e')
+ 
+-    call rename(oldname,newname)
+-"   call Decho("renaming <".oldname."> to <".newname.">")
+-
+-    let ctr= ctr + 1
+-   endwhile
+-  endif
+-
+-  " refresh the directory
+-"  call Decho("refresh the directory listing")
+-  call s:NetrwRefresh(1,s:NetrwBrowseChgDir(1,'./'))
+-  call netrw#NetrwRestorePosn(svpos)
+-
+-"  call Dret("NetrwLocalRename")
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" s:LocalFastBrowser: handles setting up/taking down fast browsing for the local browser {{{2
+-"
+-"     g:netrw_    Directory Is
+-"     fastbrowse  Local  Remote   
+-"  slow   0         D      D      D=Deleting a buffer implies it will not be re-used (slow)
+-"  med    1         D      H      H=Hiding a buffer implies it may be re-used        (fast)
+-"  fast   2         H      H      
+-"
+-"  Deleting a buffer means that it will be re-loaded when examined, hence "slow".
+-"  Hiding   a buffer means that it will be re-used   when examined, hence "fast".
+-"           (re-using a buffer may not be as accurate)
+-fun! s:LocalFastBrowser()
+-"  call Dfunc("LocalFastBrowser() g:netrw_fastbrowse=".g:netrw_fastbrowse)
+-
+-  " initialize browselist, a list of buffer numbers that the local browser has used
+-  if !exists("s:netrw_browselist")
+-"   call Decho("initialize s:netrw_browselist")
+-   let s:netrw_browselist= []
+-  endif
++   if all || ok =~ 'y\%[es]' || ok == ""
++"    call Decho("1st attempt: system(netrw#WinPath(".g:netrw_localrmdir.') '.shellescape(rmfile).')')
++    call system(netrw#WinPath(g:netrw_localrmdir).' '.shellescape(rmfile))
++"    call Decho("v:shell_error=".v:shell_error)
+ 
+-  " append current buffer to fastbrowse list
+-  if empty(s:netrw_browselist) || bufnr("%") > s:netrw_browselist[-1]
+-"   call Decho("appendng current buffer to browselist")
+-   call add(s:netrw_browselist,bufnr("%"))
+-"   call Decho("browselist=".string(s:netrw_browselist))
+-  endif
++    if v:shell_error != 0
++"     call Decho("2nd attempt to remove directory<".rmfile.">")
++     let errcode= s:NetrwDelete(rmfile)
++"     call Decho("errcode=".errcode)
+ 
+-  " enable autocmd events to handle refreshing/removing local browser buffers
+-  "    If local browse buffer is currently showing: refresh it
+-  "    If local browse buffer is currently hidden : wipe it
+-  if !exists("s:netrw_browser_shellcmd") && g:netrw_fastbrowse <= 1
+-"   call Decho("setting up local-browser shell command refresh")
+-   let s:netrw_browser_shellcmd= 1
+-   augroup AuNetrwShellCmd
+-    au!
+-    if (has("win32") || has("win95") || has("win64") || has("win16"))
+-"     call Decho("autocmd: ShellCmdPost * call s:LocalBrowseShellCmdRefresh()")
+-     au ShellCmdPost			*	call s:LocalBrowseShellCmdRefresh()
+-    else
+-     au ShellCmdPost,FocusGained	*	call s:LocalBrowseShellCmdRefresh()
+-"     call Decho("autocmd: ShellCmdPost,FocusGained * call s:LocalBrowseShellCmdRefresh()")
++     if errcode != 0
++      if has("unix")
++"       call Decho("3rd attempt to remove directory<".rmfile.">")
++       call system("rm ".shellescape(rmfile))
++       if v:shell_error != 0 && !exists("g:netrw_quiet")
++        call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",34)
++	let ok="no"
++       endif
++      elseif !exists("g:netrw_quiet")
++       call netrw#ErrorMsg(s:ERROR,"unable to remove directory<".rmfile."> -- is it empty?",35)
++       let ok="no"
++      endif
++     endif
+     endif
+-   augroup END
+-  endif
+-
+-  " user must have changed fastbrowse to its fast setting, so remove
+-  " the associated autocmd events
+-  if g:netrw_fastbrowse > 1 && exists("s:netrw_browser_shellcmd")
+-"   call Decho("remove AuNetrwShellCmd autcmd group")
+-   unlet s:netrw_browser_shellcmd
+-   augroup AuNetrwShellCmd
+-    au!
+-   augroup END
+-   augroup! AuNetrwShellCmd
++   endif
+   endif
+ 
+-"  call Dret("LocalFastBrowser : browselist<".string(s:netrw_browselist).">")
++"  call Dret("s:NetrwLocalRmFile ".ok)
++  return ok
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " Support Functions: {{{1
+ 
+ " ---------------------------------------------------------------------
+-" netrw#ErrorMsg: {{{2
+-"   0=note     = s:NOTE
+-"   1=warning  = s:WARNING
+-"   2=error    = s:ERROR
+-"  Dec 03, 2009 : max errnum currently is 76
+-fun! netrw#ErrorMsg(level,msg,errnum)
+-"  call Dfunc("netrw#ErrorMsg(level=".a:level." msg<".a:msg."> errnum=".a:errnum.") g:netrw_use_errorwindow=".g:netrw_use_errorwindow)
+-
+-  if a:level == 1
+-   let level= "**warning** (netrw) "
+-  elseif a:level == 2
+-   let level= "**error** (netrw) "
+-  else
+-   let level= "**note** (netrw) "
+-  endif
+-"  call Decho("level=".level)
+-
+-  if g:netrw_use_errorwindow
+-   " (default) netrw creates a one-line window to show error/warning
+-   " messages (reliably displayed)
+-
+-   " record current window number for NetrwRestorePosn()'s benefit
+-   let s:winBeforeErr= winnr()
+-"   call Decho("s:winBeforeErr=".s:winBeforeErr)
+-
+-   " getting messages out reliably is just plain difficult!
+-   " This attempt splits the current window, creating a one line window.
+-   if bufexists("NetrwMessage") && bufwinnr("NetrwMessage") > 0
+-"    call Decho("write to NetrwMessage buffer")
+-    exe bufwinnr("NetrwMessage")."wincmd w"
+-"    call Decho("setlocal ma noro")
+-    setlocal ma noro
+-    call setline(line("$")+1,level.a:msg)
+-    keepj $
+-   else
+-"    call Decho("create a NetrwMessage buffer window")
+-    bo 1split
+-    call s:NetrwEnew()
+-    call s:NetrwSafeOptions()
+-    setlocal bt=nofile
+-    file NetrwMessage
+-"    call Decho("setlocal ma noro")
+-    setlocal ma noro
+-    call setline(line("$"),level.a:msg)
+-   endif
+-"   call Decho("wrote msg<".level.a:msg."> to NetrwMessage win#".winnr())
+-   if &fo !~ '[ta]'
+-    syn clear
+-    syn match netrwMesgNote	"^\*\*note\*\*"
+-    syn match netrwMesgWarning	"^\*\*warning\*\*"
+-    syn match netrwMesgError	"^\*\*error\*\*"
+-    hi link netrwMesgWarning WarningMsg
+-    hi link netrwMesgError   Error
+-   endif
+-   setlocal noma ro bh=wipe
+-
++" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
++fun! netrw#WinPath(path)
++"  call Dfunc("netrw#WinPath(path<".a:path.">)")
++  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
++   " remove cygdrive prefix, if present
++   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
++   " remove trailing slash (Win95)
++   let path = substitute(path, '\(\\\|/\)$', '', 'g')
++   " remove escaped spaces
++   let path = substitute(path, '\ ', ' ', 'g')
++   " convert slashes to backslashes
++   let path = substitute(path, '/', '\', 'g')
+   else
+-   " (optional) netrw will show messages using echomsg.  Even if the
+-   " message doesn't appear, at least it'll be recallable via :messages
+-"   redraw!
+-   if a:level == s:WARNING
+-    echohl WarningMsg
+-   elseif a:level == s:ERROR
+-    echohl Error
+-   endif
+-   echomsg level.a:msg
+-"   call Decho("echomsg ***netrw*** ".a:msg)
+-   echohl None
++   let path= a:path
+   endif
+-
+-"  call Dret("netrw#ErrorMsg")
++"  call Dret("netrw#WinPath <".path.">")
++  return path
+ endfun
+ 
+ " ---------------------------------------------------------------------
+@@ -7680,16 +9033,18 @@
+   let eikeep= &ei
+   set ei=all
+   if expand("%") == "NetrwMessage"
+-   exe s:winBeforeErr."wincmd w"
++   if exists("s:winBeforeErr")
++    exe s:winBeforeErr."wincmd w"
++   endif
+   endif
+ 
+   if a:0 > 0
+-   exe a:1
++   exe "keepj ".a:1
+   endif
+ 
+   " restore window
+   if exists("w:netrw_winnr")
+-"   call Decho("restore window: exe silent! ".w:netrw_winnr."wincmd w")
++"   call Decho("(NetrwRestorePosn) restore window: exe sil! ".w:netrw_winnr."wincmd w")
+    exe "sil! ".w:netrw_winnr."wincmd w"
+   endif
+   if v:shell_error == 0
+@@ -7700,29 +9055,29 @@
+ 
+   " restore top-of-screen line
+   if exists("w:netrw_hline")
+-"   call Decho("restore topofscreen: exe norm! ".w:netrw_hline."G0z")
++"   call Decho("(NetrwRestorePosn) restore topofscreen: exe keepj norm! ".w:netrw_hline."G0z")
+    exe "keepj norm! ".w:netrw_hline."G0z\<CR>"
+   endif
+ 
+   " restore position
+   if exists("w:netrw_line") && exists("w:netrw_col")
+-"   call Decho("restore posn: exe norm! ".w:netrw_line."G0".w:netrw_col."|")
++"   call Decho("(NetrwRestorePosn) restore posn: exe keepj norm! ".w:netrw_line."G0".w:netrw_col."|")
+    exe "keepj norm! ".w:netrw_line."G0".w:netrw_col."\<bar>"
+   endif
+ 
+   let &ei= eikeep
+-"  call Dret("netrw#NetrwRestorePosn")
++"  call Dret("netrw#NetrwRestorePosn : line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " netrw#NetrwSavePosn: saves position of cursor on screen {{{2
+ fun! netrw#NetrwSavePosn()
+-"  call Dfunc("netrw#NetrwSavePosn()")
++"  call Dfunc("netrw#NetrwSavePosn() line#".line(".")." col#".col(".")." winline#".winline()." wincol#".wincol())
+   " Save current line and column
+   let w:netrw_winnr= winnr()
+   let w:netrw_line = line(".")
+   let w:netrw_col  = virtcol(".")
+-"  call Decho("currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
++"  call Decho("(NetrwSavePosn) currently, win#".w:netrw_winnr." line#".w:netrw_line." col#".w:netrw_col)
+ 
+   " Save top-of-screen line
+   keepj norm! H0
+@@ -7731,11 +9086,26 @@
+   " set up string holding position parameters
+   let ret          = "let w:netrw_winnr=".w:netrw_winnr."|let w:netrw_line=".w:netrw_line."|let w:netrw_col=".w:netrw_col."|let w:netrw_hline=".w:netrw_hline
+ 
+-  call netrw#NetrwRestorePosn()
++  keepj call netrw#NetrwRestorePosn()
+ "  call Dret("netrw#NetrwSavePosn : winnr=".w:netrw_winnr." line=".w:netrw_line." col=".w:netrw_col." hline=".w:netrw_hline)
+   return ret
+ endfun
+ 
++" ---------------------------------------------------------------------
++" netrw#NetrwAccess: intended to provide access to variable values for netrw's test suite {{{2
++"   0: marked file list of current buffer
++"   1: marked file target
++fun! netrw#NetrwAccess(ilist)
++  if     a:ilist == 0
++   if exists("s:netrwmarkfilelist_".bufnr('%'))
++    return s:netrwmarkfilelist_{bufnr('%')}
++   else
++    return "no-list-buf#".bufnr('%')
++   endif
++  elseif a:ilist == 1
++   return s:netrwmftgt
++endfun
++
+ " ------------------------------------------------------------------------
+ "  netrw#RFC2396: converts %xx into characters {{{2
+ fun! netrw#RFC2396(fname)
+@@ -7750,7 +9120,7 @@
+ fun! s:ComposePath(base,subdir)
+ "  call Dfunc("s:ComposePath(base<".a:base."> subdir<".a:subdir.">)")
+ 
+-  if(has("amiga"))
++  if has("amiga")
+ "   call Decho("amiga")
+    let ec = a:base[s:Strlen(a:base)-1]
+    if ec != '/' && ec != ':'
+@@ -7835,8 +9205,8 @@
+ 
+    " sanity check -- does the temporary file's directory exist?
+    if !isdirectory(substitute(tmpfile,'[^/]\+$','','e'))
+-"    call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
+-    call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
++"    call Decho("(GetTempfile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
++    keepj call netrw#ErrorMsg(s:ERROR,"your <".substitute(tmpfile,'[^/]\+$','','e')."> directory is missing!",2)
+ "    call Dret("s:GetTempfile getcwd<".getcwd().">")
+     return ""
+    endif
+@@ -7883,7 +9253,7 @@
+    endif
+   endif
+ 
+-"  call Decho("ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap)
++"  call Decho("(GetTempFile) ro=".&l:ro." ma=".&l:ma." mod=".&l:mod." wrap=".&l:wrap." (filename<".expand("%")."> win#".winnr()." ft<".&ft.">)")
+ "  call Dret("s:GetTempfile <".tmpfile.">")
+   return tmpfile
+ endfun
+@@ -7918,7 +9288,7 @@
+    if bmshowfuncs != []
+     let bmshowfunc = substitute(bmshowfuncs[0],'^.*:\(call.*BMShow()\).*$','\1','')
+     if bmshowfunc =~ '^call.*BMShow()'
+-     exe "sil! ".bmshowfunc
++     exe "sil! keepj ".bmshowfunc
+     endif
+    endif
+   endif
+@@ -7926,43 +9296,78 @@
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" s:NetrwCursorline: {{{2
+-fun! s:NetrwCursorline()
++" s:NetrwCursor: responsible for setting cursorline/cursorcolumn based upon g:netrw_cursor {{{2
++fun! s:NetrwCursor()
+   if !exists("w:netrw_liststyle")
+    let w:netrw_liststyle= g:netrw_liststyle
+   endif
+-"  call Dfunc("s:NetrwCursorline() liststyle=".w:netrw_liststyle." g:netrw_cursorline=".g:netrw_cursorline." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul)
+-  "
+-  if w:netrw_liststyle != s:WIDELIST
+-   " thin-long-tree listings
+-   if g:netrw_cursorline == 2
+-    setlocal cursorline
+-    let &l:cursorcolumn= s:netrw_usercuc
+-"    call Decho("setlocal cursorline  (cursorcolumn is ".((s:netrw_usercuc)? "on" : "off").")")
+-   elseif g:netrw_cursorline
+-    setlocal cursorline
+-"    call Decho("setlocal cursorline")
++"  call Dfunc("s:NetrwCursor() ft<".&ft."> liststyle=".w:netrw_liststyle." g:netrw_cursor=".g:netrw_cursor." s:netrw_usercuc=".s:netrw_usercuc." s:netrw_usercul=".s:netrw_usercul)
++
++  if &ft != "netrw"
++   " if the current window isn't a netrw directory listing window, then use user cursorline/column
++   " settings.  Affects when netrw is used to read/write a file using scp/ftp/etc.
++"   call Decho("case ft!=netrw: use user cul,cuc")
++   let &l:cursorline   = s:netrw_usercul
++   let &l:cursorcolumn = s:netrw_usercuc
++
++  elseif g:netrw_cursor == 4
++   " all styles: cursorline, cursorcolumn
++"   call Decho("case g:netrw_cursor==4: setl cul cuc")
++   setl cursorline
++   setl cursorcolumn
++
++  elseif g:netrw_cursor == 3
++   " thin-long-tree: cursorline, user's cursorcolumn
++   " wide          : cursorline, cursorcolumn
++   if w:netrw_liststyle == s:WIDELIST
++"    call Decho("case g:netrw_cursor==3 and wide: setl cul cuc")
++    setl cursorline
++    setl cursorcolumn
++   else
++"    call Decho("case g:netrw_cursor==3 and not wide: setl cul (use user's cuc)")
++    setl cursorline
++    let &l:cursorcolumn   = s:netrw_usercuc
++   endif
++
++  elseif g:netrw_cursor == 2
++   " thin-long-tree: cursorline, user's cursorcolumn
++   " wide          : cursorline, user's cursorcolumn
++"   call Decho("case g:netrw_cursor==2: setl cuc (use user's cul)")
++   let &l:cursorcolumn = s:netrw_usercuc
++   setl cursorline
++
++  elseif g:netrw_cursor == 1
++   " thin-long-tree: user's cursorline, user's cursorcolumn
++   " wide          : cursorline,        user's cursorcolumn
++   let &l:cursorcolumn = s:netrw_usercuc
++   if w:netrw_liststyle == s:WIDELIST
++"    call Decho("case g:netrw_cursor==2 and wide: setl cul (use user's cuc)")
++    set cursorline
++   else
++"    call Decho("case g:netrw_cursor==2 and not wide: (use user's cul,cuc)")
++    let &l:cursorline   = s:netrw_usercul
+    endif
+ 
+   else
+-   " wide listings
+-   if g:netrw_cursorline == 2
+-    setlocal cursorline cursorcolumn
+-"    call Decho("setlocal cursorline cursorcolumn")
+-   elseif g:netrw_cursorline
+-    let &l:cursorline= s:netrw_usercul
+-"    call Decho("cursorline is ".((s:netrw_usercul)? "on" : "off").")")
+-   endif
++   " all styles: user's cursorline, user's cursorcolumn
++"   call Decho("default: (use user's cul,cuc)")
++   let &l:cursorline   = s:netrw_usercul
++   let &l:cursorcolumn = s:netrw_usercuc
+   endif
+-"  call Dret("s:NetrwCursorline : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn)
++
++"  call Dret("s:NetrwCursor : l:cursorline=".&l:cursorline." l:cursorcolumn=".&l:cursorcolumn)
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " s:RestoreCursorline: restores cursorline/cursorcolumn to original user settings {{{2
+ fun! s:RestoreCursorline()
+-"  call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%"))
+-  let &l:cursorline   = s:netrw_usercul
+-  let &l:cursorcolumn = s:netrw_usercuc
++"  call Dfunc("s:RestoreCursorline() currently, cul=".&l:cursorline." cuc=".&l:cursorcolumn." win#".winnr()." buf#".bufnr("%")." mod=".&mod)
++  if exists("s:netrw_usercul")
++   let &l:cursorline   = s:netrw_usercul
++  endif
++  if exists("s:netrw_usercuc")
++   let &l:cursorcolumn = s:netrw_usercuc
++  endif
+ "  call Dret("s:RestoreCursorline : restored cul=".&l:cursorline." cuc=".&l:cursorcolumn)
+ endfun
+ 
+@@ -7978,7 +9383,7 @@
+   if !g:netrw_cygwin && (has("win32") || has("win95") || has("win64") || has("win16"))
+    if exists("+shellslash")
+     let sskeep= &shellslash
+-    setlocal noshellslash
++    setl noshellslash
+     let result      = delete(path)
+     let &shellslash = sskeep
+    else
+@@ -7990,7 +9395,7 @@
+    let result= delete(path)
+   endif
+   if result < 0
+-   call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
++   keepj call netrw#ErrorMsg(s:WARNING,"delete(".path.") failed!",71)
+   endif
+ 
+ "  call Dret("s:NetrwDelete ".result)
+@@ -8022,13 +9427,13 @@
+   if exists("b:netrw_option")         |let netrw_option          = b:netrw_option         |endif
+   if exists("b:netrw_prvdir")         |let netrw_prvdir          = b:netrw_prvdir         |endif
+ 
+-  call s:NetrwOptionRestore("w:")
++  keepj call s:NetrwOptionRestore("w:")
+ "  call Decho("generate a buffer with keepjumps keepalt enew!")
+   let netrw_keepdiff= &l:diff
+   keepj keepalt enew!
+   let &l:diff= netrw_keepdiff
+ "  call Decho("bufnr($)=".bufnr("$"))
+-  call s:NetrwOptionSave("w:")
++  keepj call s:NetrwOptionSave("w:")
+ 
+   " copy function-local-variables to buffer variable equivalents
+ "  call Decho("copy function-local variables back to buffer netrw variables")
+@@ -8054,16 +9459,44 @@
+    if b:netrw_curdir =~ '/$'
+     if exists("w:netrw_liststyle") && w:netrw_liststyle == s:TREELIST
+      file NetrwTreeListing
+-     set bt=nowrite noswf
+-     nno <silent> <buffer> [	:silent call <SID>TreeListMove('[')<cr>
+-     nno <silent> <buffer> ]	:silent call <SID>TreeListMove(']')<cr>
++     set bt=nowrite noswf bh=hide
++     nno <silent> <buffer> [	:sil call <SID>TreeListMove('[')<cr>
++     nno <silent> <buffer> ]	:sil call <SID>TreeListMove(']')<cr>
+     else
+      exe "sil! keepalt file ".fnameescape(b:netrw_curdir)
+     endif
+    endif
+   endif
+ 
+-"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#").">")
++"  call Dret("s:NetrwEnew : buf#".bufnr("%")."<".bufname("%")."> expand(%)<".expand("%")."> expand(#)<".expand("#")."> bh=".&bh)
++endfun
++
++" ---------------------------------------------------------------------
++" s:NetrwInsureWinVars: insure that a netrw buffer has its w: variables in spite of a wincmd v or s {{{2
++fun! s:NetrwInsureWinVars()
++"  call Dfunc("s:NetrwInsureWinVars() win#".winnr())
++  if !exists("w:netrw_liststyle")
++   let curbuf = bufnr("%")
++   let curwin = winnr()
++   let iwin   = 1
++   while iwin <= winnr("$")
++    exe iwin."wincmd w"
++    if winnr() != curwin && bufnr("%") == curbuf && exists("w:netrw_liststyle")
++     " looks like ctrl-w_s or ctrl-w_v was used to split a netrw buffer
++     let winvars= w:
++     break
++    endif
++    let iwin= iwin + 1
++   endwhile
++   exe "keepalt ".curwin."wincmd w"
++   if exists("winvars")
++"    call Decho("copying w#".iwin." window variables to w#".curwin)
++    for k in keys(winvars)
++     let w:{k}= winvars[k]
++    endfor
++   endif
++  endif
++"  call Dret("s:NetrwInsureWinVars win#".winnr())
+ endfun
+ 
+ " ------------------------------------------------------------------------
+@@ -8080,7 +9513,7 @@
+ "  changed sorting, etc.  Also see s:NetrwSaveWordPosn().
+ fun! s:NetrwRestoreWordPosn()
+ "  call Dfunc("NetrwRestoreWordPosn()")
+-  silent! call search(s:netrw_saveword,'w')
++  sil! call search(s:netrw_saveword,'w')
+ "  call Dret("NetrwRestoreWordPosn")
+ endfun
+ 
+@@ -8102,7 +9535,7 @@
+ " ---------------------------------------------------------------------
+ " s:RemotePathAnalysis: {{{2
+ fun! s:RemotePathAnalysis(dirname)
+-"  call Dfunc("s:RemotePathAnalysis()")
++"  call Dfunc("s:RemotePathAnalysis(a:dirname<".a:dirname.">)")
+ 
+   let dirpat  = '^\(\w\{-}\)://\(\w\+@\)\=\([^/:#]\+\)\%([:#]\(\d\+\)\)\=/\(.*\)$'
+   let s:method  = substitute(a:dirname,dirpat,'\1','')
+@@ -8131,9 +9564,9 @@
+ fun! s:RemoteSystem(cmd)
+ "  call Dfunc("s:RemoteSystem(cmd<".a:cmd.">)")
+   if !executable(g:netrw_ssh_cmd)
+-   call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
++   keepj call netrw#ErrorMsg(s:ERROR,"g:netrw_ssh_cmd<".g:netrw_ssh_cmd."> is not executable!",52)
+   elseif !exists("b:netrw_curdir")
+-   call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
++   keepj call netrw#ErrorMsg(s:ERROR,"for some reason b:netrw_curdir doesn't exist!",53)
+   else
+    let cmd      = s:MakeSshCmd(g:netrw_ssh_cmd." USEPORT HOSTNAME")
+    let remotedir= substitute(b:netrw_curdir,'^.*//[^/]\+/\(.*\)$','\1','')
+@@ -8183,15 +9616,28 @@
+ "
+ "             s:nbcd_curpos_{bufnr('%')} is set up by s:NetrwBrowseChgDir()
+ fun! s:NetrwRexplore(islocal,dirname)
+-"  call Dfunc("s:NetrwRexplore(islocal=".a:islocal." dirname<".a:dirname.">)")
+-  if a:islocal
+-   call netrw#LocalBrowseCheck(a:dirname)
++  if exists("s:netrwdrag")
++   return
++  endif
++"  call Dfunc("s:NetrwRexplore() w:netrw_rexlocal=".w:netrw_rexlocal." w:netrw_rexdir<".w:netrw_rexdir.">")
++  if !exists("w:netrw_rexlocal")
++"   "   call Dret("s:NetrwRexplore() w:netrw_rexlocal doesn't exist")
++   return
++  endif
++  if w:netrw_rexlocal
++   keepj call netrw#LocalBrowseCheck(w:netrw_rexdir)
+   else
+-   call s:NetrwBrowse(0,a:dirname)
++   keepj call s:NetrwBrowse(0,w:netrw_rexdir)
+   endif
+-  if exists("s:nbcd_curpos_{bufnr('%')}")
+-   call netrw#NetrwRestorePosn(s:nbcd_curpos_{bufnr('%')})
+-   unlet s:nbcd_curpos_{bufnr('%')}
++  if exists("s:initbeval")
++   set beval
++  endif
++  if exists("s:rexposn_".bufnr("%"))
++"   call Decho("(NetrwRexplore) restore posn, then unlet s:rexposn_".bufnr('%'))
++   keepj call netrw#NetrwRestorePosn(s:rexposn_{bufnr('%')})
++   unlet s:rexposn_{bufnr('%')}
++  else
++"   call Decho("(NetrwRexplore) s:rexposn_".bufnr('%')." doesn't exist")
+   endif
+   if exists("s:explore_match")
+    exe "2match netrwMarkFile /".s:explore_match."/"
+@@ -8265,32 +9711,14 @@
+ " s:SetRexDir: set directory for :Rexplore {{{2
+ fun! s:SetRexDir(islocal,dirname)
+ "  call Dfunc("s:SetRexDir(islocal=".a:islocal." dirname<".a:dirname.">)")
+-  " set up Rex and leftmouse-double-click
+-  if a:islocal
+-   exe 'com! Rexplore call s:NetrwRexplore(1,"'.escape(a:dirname,'"\').'")'
+-   if g:netrw_retmap
+-    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
+-     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
+-    endif
+-    let dir = escape(a:dirname, s:netrw_map_escape)
+-    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(1,"'.dir.'")<cr>'
+-   endif
+-  else
+-   exe 'com! Rexplore call s:NetrwRexplore(0,"'.escape(a:dirname,'"\').'")'
+-   if g:netrw_retmap
+-    if !hasmapto("<Plug>NetrwReturn") && maparg("<2-leftmouse>","n") == ""
+-     nmap <unique> <silent> <2-leftmouse>	<Plug>NetrwReturn
+-    endif
+-    let dir = escape(a:dirname, s:netrw_map_escape)
+-    exe 'nnoremap <silent> <Plug>NetrwReturn :call <SID>NetrwRexplore(0,"'.dir.'")<cr>'
+-   endif
+-  endif
+-"  call Dret("s:SetRexDir")
++  let w:netrw_rexdir   = a:dirname
++  let w:netrw_rexlocal = a:islocal
++"  call Dret("s:SetRexDir : win#".winnr()." ".(a:islocal? "local" : "remote")." dir: ".a:dirname)
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " s:Strlen: this function returns the length of a string, even if its {{{2
+-"           using two-byte etc characters.
++"           using multiple-byte characters.
+ "           Solution from Nicolai Weibull, vim docs (:help strlen()), Tony Mechelynck,
+ "           and a bit from me.
+ "           if g:netrw_xstrlen is zero (default), then the builtin strlen() function is used.
+@@ -8317,6 +9745,7 @@
+    call setline(line("."),a:x)
+    let ret= virtcol("$") - 1
+    keepj d
++   keepj norm! k
+    let &mod= modkeep
+ 
+   else
+@@ -8390,12 +9819,12 @@
+ "                      Buffers.Refresh; hence, s:NetrwBMShow() utilizes a "cheat" to call that function anyway.
+ fun! s:UpdateBuffersMenu()
+ "  call Dfunc("s:UpdateBuffersMenu()")
+-  if has("gui") && has("menu") && has("gui_running") && &go =~ 'm' && g:netrw_menu
++  if has("gui") && has("menu") && has("gui_running") && &go =~# 'm' && g:netrw_menu
+    try
+-    silent emenu Buffers.Refresh\ menu
++    sil emenu Buffers.Refresh\ menu
+    catch /^Vim\%((\a\+)\)\=:E/
+     let v:errmsg= ""
+-    silent call s:NetrwBMShow()
++    sil keepj call s:NetrwBMShow()
+    endtry
+   endif
+ "  call Dret("s:UpdateBuffersMenu")
+@@ -8403,7 +9832,7 @@
+ 
+ " ---------------------------------------------------------------------
+ " s:UseBufWinVars: (used by NetrwBrowse() and LocalBrowseCheck() {{{2
+-"              Matching function to BufferWinVars()
++"              Matching function to s:SetBufWinVars()
+ fun! s:UseBufWinVars()
+ "  call Dfunc("s:UseBufWinVars()")
+   if exists("b:netrw_liststyle")       && !exists("w:netrw_liststyle")      |let w:netrw_liststyle       = b:netrw_liststyle      |endif
+@@ -8420,27 +9849,7 @@
+ endfun
+ 
+ " ---------------------------------------------------------------------
+-" netrw#WinPath: tries to insure that the path is windows-acceptable, whether cygwin is used or not {{{2
+-fun! netrw#WinPath(path)
+-"  call Dfunc("netrw#WinPath(path<".a:path.">)")
+-  if (!g:netrw_cygwin || &shell !~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$') && (has("win32") || has("win95") || has("win64") || has("win16"))
+-   " remove cygdrive prefix, if present
+-   let path = substitute(a:path,'/cygdrive/\(.\)','\1:','')
+-   " remove trailing slash (Win95)
+-   let path = substitute(path, '\(\\\|/\)$', '', 'g')
+-   " remove escaped spaces
+-   let path = substitute(path, '\ ', ' ', 'g')
+-   " convert slashes to backslashes
+-   let path = substitute(path, '/', '\', 'g')
+-  else
+-   let path= a:path
+-  endif
+-"  call Dret("netrw#WinPath <".path.">")
+-  return path
+-endfun
+-
+-" ---------------------------------------------------------------------
+-" Settings Restoration: {{{2
++" Settings Restoration: {{{1
+ let &cpo= s:keepcpo
+ unlet s:keepcpo
+ 
+diff -Naur vim73.orig/runtime/autoload/netrwFileHandlers.vim vim73/runtime/autoload/netrwFileHandlers.vim
+--- vim73.orig/runtime/autoload/netrwFileHandlers.vim	2010-05-15 11:03:30.000000000 +0000
++++ vim73/runtime/autoload/netrwFileHandlers.vim	2013-06-07 17:07:06.775655991 +0000
+@@ -1,9 +1,9 @@
+ " netrwFileHandlers: contains various extension-based file handlers for
+ "                    netrw's browsers' x command ("eXecute launcher")
+-" Author:	Charles E. Campbell, Jr.
+-" Date:		Sep 30, 2008
+-" Version:	10
+-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
++" Author:	Charles E. Campbell
++" Date:		May 03, 2013
++" Version:	11b	ASTRO-ONLY
++" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
+ "               Permission is hereby granted to use and distribute this code,
+ "               with or without modifications, provided that this copyright
+ "               notice is copied with it. Like anything else that's free,
+@@ -20,7 +20,7 @@
+ if exists("g:loaded_netrwFileHandlers") || &cp
+  finish
+ endif
+-let g:loaded_netrwFileHandlers= "v10"
++let g:loaded_netrwFileHandlers= "v11b"
+ if v:version < 702
+  echohl WarningMsg
+  echo "***warning*** this version of netrwFileHandlers needs vim 7.2"
+@@ -34,10 +34,10 @@
+ " netrwFileHandlers#Invoke: {{{1
+ fun! netrwFileHandlers#Invoke(exten,fname)
+ "  call Dfunc("netrwFileHandlers#Invoke(exten<".a:exten."> fname<".a:fname.">)")
+-  let fname= a:fname
++  let exten= a:exten
+   " list of supported special characters.  Consider rcs,v --- that can be
+   " supported with a NFH_rcsCOMMAv() handler
+-  if a:fname =~ '[@:,$!=\-+%?;~]'
++  if exten =~ '[@:,$!=\-+%?;~]'
+    let specials= {
+ \   '@' : 'AT',
+ \   ':' : 'COLON',
+@@ -51,20 +51,20 @@
+ \   '?' : 'QUESTION',
+ \   ';' : 'SEMICOLON',
+ \   '~' : 'TILDE'}
+-   let fname= substitute(a:fname,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
++   let exten= substitute(a:exten,'[@:,$!=\-+%?;~]','\=specials[submatch(0)]','ge')
+ "   call Decho('fname<'.fname.'> done with dictionary')
+   endif
+ 
+-  if a:exten != "" && exists("*NFH_".a:exten)
++  if a:exten != "" && exists("*NFH_".exten)
+    " support user NFH_*() functions
+ "   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
+-   exe "let ret= NFH_".a:exten.'("'.fname.'")'
+-  elseif a:exten != "" && exists("*s:NFH_".a:exten)
++   exe "let ret= NFH_".exten.'("'.a:fname.'")'
++  elseif a:exten != "" && exists("*s:NFH_".exten)
+    " use builtin-NFH_*() functions
+ "   call Decho("let ret= netrwFileHandlers#NFH_".a:exten.'("'.fname.'")')
+-   exe "let ret= s:NFH_".a:exten.'("'.fname.'")'
++   exe "let ret= s:NFH_".a:exten.'("'.a:fname.'")'
+   endif
+-  
++
+ "  call Dret("netrwFileHandlers#Invoke 0 : ret=".ret)
+   return 0
+ endfun
+@@ -356,6 +356,7 @@
+ endfun
+ 
+ let &cpo= s:keepcpo
++unlet s:keepcpo
+ " ---------------------------------------------------------------------
+ "  Modelines: {{{1
+ "  vim: fdm=marker
+diff -Naur vim73.orig/runtime/autoload/netrwSettings.vim vim73/runtime/autoload/netrwSettings.vim
+--- vim73.orig/runtime/autoload/netrwSettings.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/autoload/netrwSettings.vim	2013-06-07 17:07:06.792322610 +0000
+@@ -1,8 +1,8 @@
+ " netrwSettings.vim: makes netrw settings simpler
+-" Date:		Sep 03, 2008
+-" Maintainer:	Charles E Campbell, Jr <drchipNOSPAM at campbellfamily dot biz>
+-" Version:	13
+-" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell, Jr. {{{1
++" Date:		May 03, 2013
++" Maintainer:	Charles E Campbell <drchipNOSPAM at campbellfamily dot biz>
++" Version:	14a	ASTRO-ONLY
++" Copyright:    Copyright (C) 1999-2007 Charles E. Campbell {{{1
+ "               Permission is hereby granted to use and distribute this code,
+ "               with or without modifications, provided that this copyright
+ "               notice is copied with it. Like anything else that's free,
+@@ -19,7 +19,7 @@
+ if exists("g:loaded_netrwSettings") || &cp
+   finish
+ endif
+-let g:loaded_netrwSettings = "v13"
++let g:loaded_netrwSettings = "v14a"
+ if v:version < 700
+  echohl WarningMsg
+  echo "***warning*** this version of netrwSettings needs vim 7.0"
+@@ -63,7 +63,7 @@
+   endif
+ 
+   put ='+ ---------------------------------------------'
+-  put ='+  NetrwSettings:  by Charles E. Campbell, Jr.'
++  put ='+  NetrwSettings:  by Charles E. Campbell'
+   put ='+ Press <F1> with cursor atop any line for help'
+   put ='+ ---------------------------------------------'
+   let s:netrw_settings_stop= line(".")
+@@ -88,6 +88,7 @@
+   put = 'let g:netrw_ftpmode           = '.g:netrw_ftpmode
+   put = 'let g:netrw_ignorenetrc       = '.g:netrw_ignorenetrc
+   put = 'let g:netrw_sshport           = '.g:netrw_sshport
++  put = 'let g:netrw_silent            = '.g:netrw_silent
+   put = 'let g:netrw_use_nt_rcp        = '.g:netrw_use_nt_rcp
+   put = 'let g:netrw_win95ftp          = '.g:netrw_win95ftp
+   let s:netrw_xfer_stop= line(".")
+@@ -99,51 +100,81 @@
+   put ='+ Netrw Browser Control'
+   put = 'let g:netrw_alto              = '.g:netrw_alto
+   put = 'let g:netrw_altv              = '.g:netrw_altv
++  put = 'let g:netrw_banner            = '.g:netrw_banner
++  if exists("g:netrw_bannerbackslash")
++   put = 'let g:netrw_bannerbackslash   = '.g:netrw_bannerbackslash
++  else
++   put = '\" let g:netrw_bannerbackslash   = (not defined)'
++  endif
+   put = 'let g:netrw_browse_split      = '.g:netrw_browse_split
+   if exists("g:netrw_browsex_viewer")
+-   put = 'let g:netrw_browsex_viewer    = '.g:netrw_browsex_viewer
++   put = 'let g:netrw_browsex_viewer   = '.g:netrw_browsex_viewer
+   else
+-   put = 'let g:netrw_browsex_viewer    = (not defined)'
++   put = '\" let g:netrw_browsex_viewer   = (not defined)'
+   endif
+   put = 'let g:netrw_compress          = '.g:netrw_compress
+-  put = 'let g:netrw_cursorline        = '.g:netrw_cursorline
++  if exists("g:Netrw_corehandler")
++   put = 'let g:Netrw_corehandler      = '.g:Netrw_corehandler
++  else
++   put = '\" let g:Netrw_corehandler      = (not defined)'
++  endif
++  put = 'let g:netrw_ctags             = '.g:netrw_ctags
++  put = 'let g:netrw_cursor            = '.g:netrw_cursor
+   let decompressline= line("$")
+-  put ='let g:netrw_decompress...'
++  put = 'let g:netrw_decompress        = '.string(g:netrw_decompress)
++  if exists("g:netrw_dynamic_maxfilenamelen")
++   put = 'let g:netrw_dynamic_maxfilenamelen='.g:netrw_dynamic_maxfilenamelen
++  else
++   put = '\" let g:netrw_dynamic_maxfilenamelen= (not defined)'
++  endif
+   put = 'let g:netrw_dirhistmax        = '.g:netrw_dirhistmax
++  put = 'let g:netrw_errorlvl          = '.g:netrw_errorlvl
+   put = 'let g:netrw_fastbrowse        = '.g:netrw_fastbrowse
+   let fnameescline= line("$")
+-  put = 'let g:netrw_fname_escape...'
++  put = 'let g:netrw_fname_escape      = '.string(g:netrw_fname_escape)
+   put = 'let g:netrw_ftp_browse_reject = '.g:netrw_ftp_browse_reject
+   put = 'let g:netrw_ftp_list_cmd      = '.g:netrw_ftp_list_cmd
+   put = 'let g:netrw_ftp_sizelist_cmd  = '.g:netrw_ftp_sizelist_cmd
+   put = 'let g:netrw_ftp_timelist_cmd  = '.g:netrw_ftp_timelist_cmd
+   let globescline= line("$")
+-  put ='let g:netrw_glob_escape...'
++  put = 'let g:netrw_glob_escape       = '.string(g:netrw_glob_escape)
+   put = 'let g:netrw_hide              = '.g:netrw_hide
++  if exists("g:netrw_home")
++   put = 'let g:netrw_home              = '.g:netrw_home
++  else
++   put = '\" let g:netrw_home              = (not defined)'
++  endif
+   put = 'let g:netrw_keepdir           = '.g:netrw_keepdir
+   put = 'let g:netrw_list_cmd          = '.g:netrw_list_cmd
+   put = 'let g:netrw_list_hide         = '.g:netrw_list_hide
+   put = 'let g:netrw_liststyle         = '.g:netrw_liststyle
+   put = 'let g:netrw_localcopycmd      = '.g:netrw_localcopycmd
+-  put = 'let g:netrw_local_mkdir       = '.g:netrw_local_mkdir
++  put = 'let g:netrw_localmkdir        = '.g:netrw_localmkdir
+   put = 'let g:netrw_localmovecmd      = '.g:netrw_localmovecmd
+-  put = 'let g:netrw_local_rmdir       = '.g:netrw_local_rmdir
++  put = 'let g:netrw_localrmdir        = '.g:netrw_localrmdir
+   put = 'let g:netrw_maxfilenamelen    = '.g:netrw_maxfilenamelen
+   put = 'let g:netrw_menu              = '.g:netrw_menu
++  put = 'let g:netrw_mousemaps         = '.g:netrw_mousemaps
+   put = 'let g:netrw_mkdir_cmd         = '.g:netrw_mkdir_cmd
++  if exists("g:netrw_nobeval")
++   put = 'let g:netrw_nobeval           = '.g:netrw_nobeval
++  else
++   put = '\" let g:netrw_nobeval           = (not defined)'
++  endif
++  put = 'let g:netrw_remote_mkdir      = '.g:netrw_remote_mkdir
+   put = 'let g:netrw_preview           = '.g:netrw_preview
+   put = 'let g:netrw_rename_cmd        = '.g:netrw_rename_cmd
+   put = 'let g:netrw_retmap            = '.g:netrw_retmap
+   put = 'let g:netrw_rm_cmd            = '.g:netrw_rm_cmd
+   put = 'let g:netrw_rmdir_cmd         = '.g:netrw_rmdir_cmd
+   put = 'let g:netrw_rmf_cmd           = '.g:netrw_rmf_cmd
+-  put = 'let g:netrw_silent            = '.g:netrw_silent
+   put = 'let g:netrw_sort_by           = '.g:netrw_sort_by
+   put = 'let g:netrw_sort_direction    = '.g:netrw_sort_direction
+   put = 'let g:netrw_sort_options      = '.g:netrw_sort_options
+   put = 'let g:netrw_sort_sequence     = '.g:netrw_sort_sequence
+   put = 'let g:netrw_special_syntax    = '.g:netrw_special_syntax
+   put = 'let g:netrw_ssh_browse_reject = '.g:netrw_ssh_browse_reject
++  put = 'let g:netrw_ssh_cmd           = '.g:netrw_ssh_cmd
+   put = 'let g:netrw_scpport           = '.g:netrw_scpport
+   put = 'let g:netrw_sepchr            = '.g:netrw_sepchr
+   put = 'let g:netrw_sshport           = '.g:netrw_sshport
+diff -Naur vim73.orig/runtime/autoload/phpcomplete.vim vim73/runtime/autoload/phpcomplete.vim
+--- vim73.orig/runtime/autoload/phpcomplete.vim	2010-05-15 11:03:30.000000000 +0000
++++ vim73/runtime/autoload/phpcomplete.vim	2013-06-07 17:07:06.818989201 +0000
+@@ -1,7 +1,7 @@
+ " Vim completion script
+ " Language:	PHP
+ " Maintainer:	Mikolaj Machowski ( mikmach AT wp DOT pl )
+-" Last Change:	2006 May 9
++" Last Change:	2011 Dec 08
+ "
+ "   TODO:
+ "   - Class aware completion:
+@@ -650,6 +650,7 @@
+ 	" this is the most efficient way. The other way
+ 	" is to go through the looong string looking for
+ 	" matching {}
++	let original_window = winnr()
+ 	below 1new
+ 	0put =cfile
+ 	call search('class\s\+'.a:name)
+@@ -667,6 +668,9 @@
+ 	let classcontent = join(classc, "\n")
+ 
+ 	bw! %
++	" go back to where we started
++	exe original_window.'wincmd w'
++
+ 	if extends_class != ''
+ 		let classlocation = phpcomplete#GetClassLocation(extends_class)
+ 		if filereadable(classlocation)
+diff -Naur vim73.orig/runtime/autoload/spellfile.vim vim73/runtime/autoload/spellfile.vim
+--- vim73.orig/runtime/autoload/spellfile.vim	2010-05-15 11:03:31.000000000 +0000
++++ vim73/runtime/autoload/spellfile.vim	2013-06-07 17:07:06.878989030 +0000
+@@ -1,6 +1,6 @@
+ " Vim script to download a missing spell file
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2008 Nov 29
++" Last Change:	2012 Jan 08
+ 
+ if !exists('g:spellfile_URL')
+   " Prefer using http:// when netrw should be able to use it, since
+@@ -70,7 +70,7 @@
+     " Remember the buffer number, we check it below.
+     new
+     let newbufnr = winbufnr(0)
+-    setlocal bin
++    setlocal bin fenc=
+     echo 'Downloading ' . fname . '...'
+     call spellfile#Nread(fname)
+     if getline(2) !~ 'VIMspell'
+@@ -83,7 +83,7 @@
+ 	  " Our buffer has vanished!?  Open a new window.
+ 	  echomsg "download buffer disappeared, opening a new one"
+ 	  new
+-	  setlocal bin
++	  setlocal bin fenc=
+ 	else
+ 	  exe winnr . "wincmd w"
+ 	endif
+@@ -120,6 +120,7 @@
+       else
+ 	let dirname = escape(dirlist[dirchoice], ' ')
+       endif
++      setlocal fenc=
+       exe "write " . dirname . '/' . fname
+ 
+       " Also download the .sug file, if the user wants to.
+diff -Naur vim73.orig/runtime/autoload/sqlcomplete.vim vim73/runtime/autoload/sqlcomplete.vim
+--- vim73.orig/runtime/autoload/sqlcomplete.vim	2010-08-01 13:55:41.000000000 +0000
++++ vim73/runtime/autoload/sqlcomplete.vim	2013-06-07 17:07:06.892322325 +0000
+@@ -1,16 +1,63 @@
+ " Vim OMNI completion script for SQL
+ " Language:    SQL
+ " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+-" Version:     10.0
+-" Last Change: 2010 Jun 11
++" Version:     15.0
++" Last Change: 2013 May 13
++" Homepage:    http://www.vim.org/scripts/script.php?script_id=1572
+ " Usage:       For detailed help
+-"              ":help sql.txt" 
+-"              or ":help ft-sql-omni" 
++"              ":help sql.txt"
++"              or ":help ft-sql-omni"
+ "              or read $VIMRUNTIME/doc/sql.txt
+ 
+ " History
++"
++" TODO
++"     - Jonas Enberg - if no table is found when using column completion
++"       look backwards to a FROM clause and find the first table
++"       and complete it.
++"
++" Version 15.0 (May 2013)
++"     - NF: Changed the SQL precached syntax items, omni_sql_precache_syntax_groups,
++"           to use regular expressions to pick up extended syntax group names.
++"           This requires an updated SyntaxComplete plugin version 13.0.
++"           If the required versions have not been installed, previous
++"           behaviour will not be impacted.
++"
++" Version 14.0 (Dec 2012)
++"     - BF: Added check for cpo
++"
++" Version 13.0 (Dec 2012)
++"     - NF: When completing column lists or drilling into a table
++"           and g:omni_sql_include_owner is enabled, the
++"           only the table name would be replaced with the column
++"           list instead of the table name and owner (if specified).
++"     - NF: When completing column lists using table aliases
++"           and g:omni_sql_include_owner is enabled, account
++"           for the owner name when looking up the table
++"           list instead of the table name and owner (if specified).
++"     - BF: When completing column lists or drilling into a table
++"           and g:omni_sql_include_owner is enabled, the
++"           column list could often not be found for the table.
++"     - BF: When OMNI popped up, possibly the wrong word
++"           would be replaced for column and column list options.
++"
++" Version 12.0 (Feb 2012)
++"     - Partial column name completion did not work when a table
++"       name or table alias was provided (Jonas Enberg).
++"     - Improved the handling of column completion.  First we match any
++"       columns from a previous completion.  If not matches are found, we
++"       consider the partial name to be a table or table alias for the
++"       query and attempt to match on it.
++"
++" Version 11.0 (Jan 2012)
++"     Added g:omni_sql_default_compl_type variable
++"         - You can specify which type of completion to default to
++"           when pressing <C-X><C-O>.  The entire list of available
++"           choices can be found in the calls to sqlcomplete#Map in:
++"               ftplugin/sql.vim
++"
+ " Version 10.0
+-"     Updated PreCacheSyntax() 
++"     Updated PreCacheSyntax()
+ "         - Now returns a List of the syntax items it finds.
+ "           This allows other plugins / scripts to use this list for their own
+ "           purposes.  In this case XPTemplate can use them for a Choose list.
+@@ -18,33 +65,33 @@
+ "           warning if not.
+ "         - Verifies the parameters are the correct type and displays a
+ "           warning if not.
+-"     Updated SQLCWarningMsg() 
++"     Updated SQLCWarningMsg()
+ "         - Prepends warning message with SQLComplete so you know who issued
+ "           the warning.
+-"     Updated SQLCErrorMsg() 
++"     Updated SQLCErrorMsg()
+ "         - Prepends error message with SQLComplete so you know who issued
+ "           the error.
+-"     
+-" Version 9.0
++"
++" Version 9.0 (May 2010)
+ "     This change removes some of the support for tables with spaces in their
+-"     names in order to simplify the regexes used to pull out query table 
++"     names in order to simplify the regexes used to pull out query table
+ "     aliases for more robust table name and column name code completion.
+ "     Full support for "table names with spaces" can be added in again
+ "     after 7.3.
+ "
+ " Version 8.0
+-"     Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left 
++"     Incorrectly re-executed the g:ftplugin_sql_omni_key_right and g:ftplugin_sql_omni_key_left
+ "     when drilling in and out of a column list for a table.
+ "
+-" Version 7.0
++" Version 7.0 (Jan 2010)
+ "     Better handling of object names
+ "
+-" Version 6.0
++" Version 6.0 (Apr 2008)
+ "     Supports object names with spaces "my table name"
+ "
+ " Set completion with CTRL-X CTRL-O to autoloaded function.
+ " This check is in place in case this script is
+-" sourced directly instead of using the autoload feature. 
++" sourced directly instead of using the autoload feature.
+ if exists('&omnifunc')
+     " Do not set the option if already set since this
+     " results in an E117 warning.
+@@ -54,9 +101,11 @@
+ endif
+ 
+ if exists('g:loaded_sql_completion')
+-    finish 
++    finish
+ endif
+-let g:loaded_sql_completion = 100
++let g:loaded_sql_completion = 150
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Maintains filename of dictionary
+ let s:sql_file_table        = ""
+@@ -69,17 +118,19 @@
+ let s:tbl_cols              = []
+ let s:syn_list              = []
+ let s:syn_value             = []
+- 
++
+ " Used in conjunction with the syntaxcomplete plugin
+ let s:save_inc              = ""
+ let s:save_exc              = ""
+-if exists('g:omni_syntax_group_include_sql')
+-    let s:save_inc = g:omni_syntax_group_include_sql
++if !exists('g:omni_syntax_group_include_sql')
++    let g:omni_syntax_group_include_sql = ''
+ endif
+-if exists('g:omni_syntax_group_exclude_sql')
+-    let s:save_exc = g:omni_syntax_group_exclude_sql
++if !exists('g:omni_syntax_group_exclude_sql')
++    let g:omni_syntax_group_exclude_sql = ''
+ endif
+- 
++let s:save_inc = g:omni_syntax_group_include_sql
++let s:save_exc = g:omni_syntax_group_exclude_sql
++
+ " Used with the column list
+ let s:save_prev_table       = ""
+ 
+@@ -90,12 +141,12 @@
+ " Default syntax items to precache
+ if !exists('g:omni_sql_precache_syntax_groups')
+     let g:omni_sql_precache_syntax_groups = [
+-                \ 'syntax',
+-                \ 'sqlKeyword',
+-                \ 'sqlFunction',
+-                \ 'sqlOption',
+-                \ 'sqlType',
+-                \ 'sqlStatement'
++                \ 'syntax\w*',
++                \ 'sqlKeyword\w*',
++                \ 'sqlFunction\w*',
++                \ 'sqlOption\w*',
++                \ 'sqlType\w*',
++                \ 'sqlStatement\w*'
+                 \ ]
+ endif
+ " Set ignorecase to the ftplugin standard
+@@ -110,14 +161,25 @@
+         if g:loaded_dbext >= 300
+             " New to dbext 3.00, by default the table lists include the owner
+             " name of the table.  This is used when determining how much of
+-            " whatever has been typed should be replaced as part of the 
++            " whatever has been typed should be replaced as part of the
+             " code replacement.
+             let g:omni_sql_include_owner = 1
+         endif
+     endif
+ endif
++" Default type of completion used when <C-X><C-O> is pressed
++if !exists('g:omni_sql_default_compl_type')
++    let g:omni_sql_default_compl_type = 'table'
++endif
+ 
+ " This function is used for the 'omnifunc' option.
++" It is called twice by omni and it is responsible
++" for returning the completion list of items.
++" But it must also determine context of what to complete
++" and what to "replace" with the completion.
++" The a:base, is replaced directly with what the user
++" chooses from the choices.
++" The s:prepend provides context for the completion.
+ function! sqlcomplete#Complete(findstart, base)
+ 
+     " Default to table name completion
+@@ -126,6 +188,7 @@
+     if exists('b:sql_compl_type')
+         let compl_type = b:sql_compl_type
+     endif
++    let begindot = 0
+ 
+     " First pass through this function determines how much of the line should
+     " be replaced by whatever is chosen from the completion list
+@@ -134,13 +197,12 @@
+         let line     = getline('.')
+         let start    = col('.') - 1
+         let lastword = -1
+-        let begindot = 0
+         " Check if the first character is a ".", for column completion
+         if line[start - 1] == '.'
+             let begindot = 1
+         endif
+         while start > 0
+-            " Additional code was required to handle objects which 
++            " Additional code was required to handle objects which
+             " can contain spaces like "my table name".
+             if line[start - 1] !~ '\(\w\|\.\)'
+                 " If the previous character is not a period or word character
+@@ -150,7 +212,7 @@
+             elseif line[start - 1] =~ '\w'
+                 " If the previous character is word character continue back
+                 let start -= 1
+-            elseif line[start - 1] =~ '\.' && 
++            elseif line[start - 1] =~ '\.' &&
+                         \ compl_type =~ 'column\|table\|view\|procedure'
+                 " If the previous character is a period and we are completing
+                 " an object which can be specified with a period like this:
+@@ -160,7 +222,10 @@
+                 " If lastword has already been set for column completion
+                 " break from the loop, since we do not also want to pickup
+                 " a table name if it was also supplied.
+-                if lastword != -1 && compl_type == 'column' 
++                " Unless g:omni_sql_include_owner == 1, then we can
++                " include the ownername.
++                if lastword != -1 && compl_type == 'column'
++                            \ && g:omni_sql_include_owner == 0
+                     break
+                 endif
+                 " If column completion was specified stop at the "." if
+@@ -171,8 +236,8 @@
+                 endif
+                 " If omni_sql_include_owner = 0, do not include the table
+                 " name as part of the substitution, so break here
+-                if lastword == -1 && 
+-                            \ compl_type =~ 'table\|view\|procedure\column_csv' && 
++                if lastword == -1 &&
++                            \ compl_type =~ '\<\(table\|view\|procedure\|column\|column_csv\)\>' &&
+                             \ g:omni_sql_include_owner == 0
+                     let lastword = start
+                     break
+@@ -202,7 +267,7 @@
+     let compl_list = []
+ 
+     " Default to table name completion
+-    let compl_type = 'table'
++    let compl_type = g:omni_sql_default_compl_type
+     " Allow maps to specify what type of object completion they want
+     if exists('b:sql_compl_type')
+         let compl_type = b:sql_compl_type
+@@ -216,7 +281,7 @@
+ 
+     if compl_type == 'table' ||
+                 \ compl_type == 'procedure' ||
+-                \ compl_type == 'view' 
++                \ compl_type == 'view'
+ 
+         " This type of completion relies upon the dbext.vim plugin
+         if s:SQLCCheck4dbext() == -1
+@@ -254,7 +319,7 @@
+ 
+         if base == ""
+             " The last time we displayed a column list we stored
+-            " the table name.  If the user selects a column list 
++            " the table name.  If the user selects a column list
+             " without a table name of alias present, assume they want
+             " the previous column list displayed.
+             let base = s:save_prev_table
+@@ -269,20 +334,26 @@
+             let table  = matchstr( base, '^\(.*\.\)\?\zs.*\ze\..*' )
+             let column = matchstr( base, '.*\.\zs.*' )
+ 
++            if g:omni_sql_include_owner == 1 && owner == '' && table != '' && column != ''
++                let owner  = table
++                let table  = column
++                let column = ''
++            endif
++
+             " It is pretty well impossible to determine if the user
+             " has entered:
+             "    owner.table
+             "    table.column_prefix
+-            " So there are a couple of things we can do to mitigate 
++            " So there are a couple of things we can do to mitigate
+             " this issue.
+             "    1.  Check if the dbext plugin has the option turned
+             "        on to even allow owners
+             "    2.  Based on 1, if the user is showing a table list
+-            "        and the DrillIntoTable (using <Right>) then 
++            "        and the DrillIntoTable (using <Right>) then
+             "        this will be owner.table.  In this case, we can
+-            "        check to see the table.column exists in the 
++            "        check to see the table.column exists in the
+             "        cached table list.  If it does, then we have
+-            "        determined the user has actually chosen 
++            "        determined the user has actually chosen
+             "        owner.table, not table.column_prefix.
+             let found = -1
+             if g:omni_sql_include_owner == 1 && owner == ''
+@@ -297,17 +368,46 @@
+             " If the user has indicated not to use table owners at all and
+             " the base ends in a '.' we know they are not providing a column
+             " name, so we can shift the items appropriately.
+-            if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
+-                let owner  = table
+-                let table  = column
+-                let column = ''
+-            endif
++            " if found != -1 || (g:omni_sql_include_owner == 0 && base !~ '\.$')
++            "     let owner  = table
++            "     let table  = column
++            "     let column = ''
++            " endif
+         else
++            " If no "." was provided and the user asked for
++            " column level completion, first attempt the match
++            " on any previous column lists.  If the user asked
++            " for a list of columns comma separated, continue as usual.
++            if compl_type == 'column' && s:save_prev_table != ''
++                " The last time we displayed a column list we stored
++                " the table name.  If the user selects a column list
++                " without a table name of alias present, assume they want
++                " the previous column list displayed.
++                let table     = s:save_prev_table
++                let list_type = ''
++
++                let compl_list  = s:SQLCGetColumns(table, list_type)
++                if ! empty(compl_list)
++                    " If no column prefix has been provided and the table
++                    " name was provided, append it to each of the items
++                    " returned.
++                    let compl_list = filter(deepcopy(compl_list), 'v:val=~"^'.base.'"' )
++
++                    " If not empty, we have a match on columns
++                    " return the list
++                    if ! empty(compl_list)
++                        return compl_list
++                    endif
++                endif
++            endif
++            " Since no columns were found to match the base supplied
++            " assume the user is trying to complete the column list
++            " for a table (and or an alias to a table).
+             let table  = base
+         endif
+ 
+         " Get anything after the . and consider this the table name
+-        " If an owner has been specified, then we must consider the 
++        " If an owner has been specified, then we must consider the
+         " base to be a partial column name
+         " let base  = matchstr( base, '^\(.*\.\)\?\zs.*' )
+ 
+@@ -322,16 +422,25 @@
+                 let list_type     = 'csv'
+             endif
+ 
+-            let compl_list  = s:SQLCGetColumns(table, list_type)
++            " If we are including the OWNER for the objects, then for
++            " table completion, if we have it, it should be included
++            " as there can be the same table names in a database yet
++            " with different owner names.
++            if g:omni_sql_include_owner == 1 && owner != '' && table != ''
++                let compl_list  = s:SQLCGetColumns(owner.'.'.table, list_type)
++            else
++                let compl_list  = s:SQLCGetColumns(table, list_type)
++            endif
++
+             if column != ''
+                 " If no column prefix has been provided and the table
+                 " name was provided, append it to each of the items
+                 " returned.
+-                let compl_list = map(compl_list, "table.'.'.v:val")
++                let compl_list = map(compl_list, 'table.".".v:val')
+                 if owner != ''
+                     " If an owner has been provided append it to each of the
+                     " items returned.
+-                    let compl_list = map(compl_list, "owner.'.'.v:val")
++                    let compl_list = map(compl_list, 'owner.".".v:val')
+                 endif
+             else
+                 let base = ''
+@@ -345,11 +454,14 @@
+         endif
+     elseif compl_type == 'resetCache'
+         " Reset all cached items
+-        let s:tbl_name  = []
+-        let s:tbl_alias = []
+-        let s:tbl_cols  = []
+-        let s:syn_list  = []
+-        let s:syn_value = []
++        let s:tbl_name           = []
++        let s:tbl_alias          = []
++        let s:tbl_cols           = []
++        let s:syn_list           = []
++        let s:syn_value          = []
++        let s:sql_file_table     = ""
++        let s:sql_file_procedure = ""
++        let s:sql_file_view      = ""
+ 
+         let msg = "All SQL cached items have been removed."
+         call s:SQLCWarningMsg(msg)
+@@ -361,22 +473,41 @@
+ 
+     if base != ''
+         " Filter the list based on the first few characters the user entered.
+-        " Check if the text matches at the beginning 
+-        " or 
++        " Check if the text matches at the beginning
++        "         \\(^.base.'\\)
++        " or
+         " Match to a owner.table or alias.column type match
++        "         ^\\(\\w\\+\\.\\)\\?'.base.'\\)
+         " or
+         " Handle names with spaces "my table name"
++        "         "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
++        "
+         let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|^\\(\\w\\+\\.\\)\\?'.base.'\\)"'
+         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\)"'
+         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\(\\.\\)\\?'.base.'\\)"'
+         " let expr = 'v:val '.(g:omni_sql_ignorecase==1?'=~?':'=~#').' "\\(^'.base.'\\|\\([^.]*\\)\\?'.base.'\\)"'
+         let compl_list = filter(deepcopy(compl_list), expr)
++
++        if empty(compl_list) && compl_type == 'table' && base =~ '\.$'
++            " It is possible we could be looking for column name completion
++            " and the user simply hit C-X C-O to lets try it as well
++            " since we had no hits with the tables.
++            " If the base ends with a . it is hard to know if we are
++            " completing table names or column names.
++            let list_type = ''
++
++            let compl_list  = s:SQLCGetColumns(base, list_type)
++        endif
+     endif
+ 
+     if exists('b:sql_compl_savefunc') && b:sql_compl_savefunc != ""
+         let &omnifunc = b:sql_compl_savefunc
+     endif
+ 
++    if empty(compl_list)
++        call s:SQLCWarningMsg( 'Could not find type['.compl_type.'] using prepend[.'.s:prepended.'] base['.a:base.']' )
++    endif
++
+     return compl_list
+ endfunc
+ 
+@@ -384,7 +515,7 @@
+     let syn_group_arr = []
+     let syn_items     = []
+ 
+-    if a:0 > 0 
++    if a:0 > 0
+         if type(a:1) != 3
+             call s:SQLCWarningMsg("Parameter is not a list. Example:['syntaxGroup1', 'syntaxGroup2']")
+             return ''
+@@ -407,7 +538,7 @@
+ function! sqlcomplete#ResetCacheSyntax(...)
+     let syn_group_arr = []
+ 
+-    if a:0 > 0 
++    if a:0 > 0
+         if type(a:1) != 3
+             call s:SQLCWarningMsg("Parameter is not a list. Example:['syntaxGroup1', 'syntaxGroup2']")
+             return ''
+@@ -458,7 +589,7 @@
+ 	" If the popup is not visible, simple perform the normal
+ 	" key behaviour.
+ 	" Must use exec since they key must be preceeded by "\"
+-	" or feedkeys will simply push each character of the string 
++	" or feedkeys will simply push each character of the string
+ 	" rather than the "key press".
+         exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_right.'", "n")'
+     endif
+@@ -475,7 +606,7 @@
+ 	" If the popup is not visible, simple perform the normal
+ 	" key behaviour.
+ 	" Must use exec since they key must be preceeded by "\"
+-	" or feedkeys will simply push each character of the string 
++	" or feedkeys will simply push each character of the string
+ 	" rather than the "key press".
+         exec 'call feedkeys("\'.g:ftplugin_sql_omni_key_left.'", "n")'
+     endif
+@@ -484,16 +615,16 @@
+ 
+ function! s:SQLCWarningMsg(msg)
+     echohl WarningMsg
+-    echomsg 'SQLComplete:'.a:msg 
++    echomsg 'SQLComplete:'.a:msg
+     echohl None
+ endfunction
+-      
++
+ function! s:SQLCErrorMsg(msg)
+     echohl ErrorMsg
+-    echomsg 'SQLComplete:'.a:msg 
++    echomsg 'SQLComplete:'.a:msg
+     echohl None
+ endfunction
+-      
++
+ function! s:SQLCGetSyntaxList(syn_group)
+     let syn_group  = a:syn_group
+     let compl_list = []
+@@ -504,19 +635,23 @@
+         " Return previously cached value
+         let compl_list = s:syn_value[list_idx]
+     else
+-        " Request the syntax list items from the 
++        let s:save_inc = g:omni_syntax_group_include_sql
++        let s:save_exc = g:omni_syntax_group_exclude_sql
++        let g:omni_syntax_group_include_sql = ''
++        let g:omni_syntax_group_exclude_sql = ''
++
++        " Request the syntax list items from the
+         " syntax completion plugin
+         if syn_group == 'syntax'
+             " Handle this special case.  This allows the user
+             " to indicate they want all the syntax items available,
+             " so do not specify a specific include list.
+-            let g:omni_syntax_group_include_sql = ''
++            let syn_value                       = syntaxcomplete#OmniSyntaxList()
+         else
+             " The user has specified a specific syntax group
+             let g:omni_syntax_group_include_sql = syn_group
++            let syn_value                       = syntaxcomplete#OmniSyntaxList(syn_group)
+         endif
+-        let g:omni_syntax_group_exclude_sql = ''
+-        let syn_value                       = syntaxcomplete#OmniSyntaxList()
+         let g:omni_syntax_group_include_sql = s:save_inc
+         let g:omni_syntax_group_exclude_sql = s:save_exc
+         " Cache these values for later use
+@@ -552,7 +687,7 @@
+     let table_alias = a:table_alias
+     let cols        = a:cols
+ 
+-    if g:omni_sql_use_tbl_alias != 'n' 
++    if g:omni_sql_use_tbl_alias != 'n'
+         if table_alias == ''
+             if 'da' =~? g:omni_sql_use_tbl_alias
+                 if table_name =~ '_'
+@@ -562,13 +697,13 @@
+                     setlocal iskeyword-=_
+ 
+                     " Get the first letter of each word
+-                    " [[:alpha:]] is used instead of \w 
++                    " [[:alpha:]] is used instead of \w
+                     " to catch extended accented characters
+                     "
+-                    let table_alias = substitute( 
+-                                \ table_name, 
+-                                \ '\<[[:alpha:]]\+\>_\?', 
+-                                \ '\=strpart(submatch(0), 0, 1)', 
++                    let table_alias = substitute(
++                                \ table_name,
++                                \ '\<[[:alpha:]]\+\>_\?',
++                                \ '\=strpart(submatch(0), 0, 1)',
+                                 \ 'g'
+                                 \ )
+                     " Restore original value
+@@ -596,7 +731,7 @@
+     return cols
+ endfunction
+ 
+-function! s:SQLCGetObjectOwner(object) 
++function! s:SQLCGetObjectOwner(object)
+     " The owner regex matches a word at the start of the string which is
+     " followed by a dot, but doesn't include the dot in the result.
+     " ^           - from beginning of line
+@@ -609,11 +744,29 @@
+     " let owner = matchstr( a:object, '^\s*\zs.*\ze\.' )
+     let owner = matchstr( a:object, '^\("\|\[\)\?\zs\.\{-}\ze\("\|\]\)\?\.' )
+     return owner
+-endfunction 
++endfunction
+ 
+ function! s:SQLCGetColumns(table_name, list_type)
++    if a:table_name =~ '\.'
++        " Check if the owner/creator has been specified
++        let owner  = matchstr( a:table_name, '^\zs.*\ze\..*\..*' )
++        let table  = matchstr( a:table_name, '^\(.*\.\)\?\zs.*\ze\..*' )
++        let column = matchstr( a:table_name, '.*\.\zs.*' )
++
++        if g:omni_sql_include_owner == 1 && owner == '' && table != '' && column != ''
++            let owner  = table
++            let table  = column
++            let column = ''
++        endif
++    else
++        let owner  = ''
++        let table  = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
++        let column = ''
++    endif
++
+     " Check if the table name was provided as part of the column name
+-    let table_name   = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
++    " let table_name   = matchstr(a:table_name, '^["\[\]a-zA-Z0-9_ ]\+\ze\.\?')
++    let table_name   = table
+     let table_cols   = []
+     let table_alias  = ''
+     let move_to_top  = 1
+@@ -636,7 +789,7 @@
+     if list_idx > -1
+         let table_cols = split(s:tbl_cols[list_idx], '\n')
+     else
+-        " Check if we have already cached the column list for this table 
++        " Check if we have already cached the column list for this table
+         " by its alias, assuming the table_name provided was actually
+         " the alias for the table instead
+         "     select *
+@@ -654,7 +807,7 @@
+     " And the table ends in a "." or we are looking for a column list
+     " if list_idx == -1 && (a:table_name =~ '\.' || b:sql_compl_type =~ 'column')
+     " if list_idx == -1 && (a:table_name =~ '\.' || a:list_type =~ 'csv')
+-    if list_idx == -1 
++    if list_idx == -1
+          let saveY      = @y
+          let saveSearch = @/
+          let saveWScan  = &wrapscan
+@@ -665,7 +818,7 @@
+          setlocal nowrapscan
+          " If . was entered, look at the word just before the .
+          " We are looking for something like this:
+-         "    select * 
++         "    select *
+          "      from customer c
+          "     where c.
+          " So when . is pressed, we need to find 'c'
+@@ -692,15 +845,15 @@
+          " if query =~? '^\c\(select\)'
+          if query =~? '^\(select\|update\|delete\)'
+              let found = 1
+-             "  \(\(\<\w\+\>\)\.\)\?   - 
++             "  \(\(\<\w\+\>\)\.\)\?   -
+              " '\c\(from\|join\|,\).\{-}'  - Starting at the from clause (case insensitive)
+              " '\zs\(\(\<\w\+\>\)\.\)\?' - Get the owner name (optional)
+-             " '\<\w\+\>\ze' - Get the table name 
++             " '\<\w\+\>\ze' - Get the table name
+              " '\s\+\<'.table_name.'\>' - Followed by the alias
+              " '\s*\.\@!.*'  - Cannot be followed by a .
+              " '\(\<where\>\|$\)' - Must be followed by a WHERE clause
+              " '.*'  - Exclude the rest of the line in the match
+-             " let table_name_new = matchstr(@y, 
++             " let table_name_new = matchstr(@y,
+              "             \ '\c\(from\|join\|,\).\{-}'.
+              "             \ '\zs\(\("\|\[\)\?.\{-}\("\|\]\)\.\)\?'.
+              "             \ '\("\|\[\)\?.\{-}\("\|\]\)\?\ze'.
+@@ -711,7 +864,16 @@
+              "             \ '\(\<where\>\|$\)'.
+              "             \ '.*'
+              "             \ )
+-             let table_name_new = matchstr(@y, 
++             "
++             "
++             " ''\c\(\<from\>\|\<join\>\|,\)\s*'  - Starting at the from clause (case insensitive)
++             " '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?' - Get the owner name (optional)
++             " '\("\|\[\)\?\w\+\("\|\]\)\?\ze' - Get the table name
++             " '\s\+\%(as\s\+\)\?\<'.matchstr(table_name, '.\{-}\ze\.\?$').'\>' - Followed by the alias
++             " '\s*\.\@!.*'  - Cannot be followed by a .
++             " '\(\<where\>\|$\)' - Must be followed by a WHERE clause
++             " '.*'  - Exclude the rest of the line in the match
++             let table_name_new = matchstr(@y,
+                          \ '\c\(\<from\>\|\<join\>\|,\)\s*'.
+                          \ '\zs\(\("\|\[\)\?\w\+\("\|\]\)\?\.\)\?'.
+                          \ '\("\|\[\)\?\w\+\("\|\]\)\?\ze'.
+@@ -725,7 +887,12 @@
+ 
+              if table_name_new != ''
+                  let table_alias = table_name
+-                 let table_name  = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
++                 if g:omni_sql_include_owner == 1
++                    let table_name  = matchstr( table_name_new, '^\zs\(.\{-}\.\)\?\(.\{-}\.\)\?.*\ze' )
++                 else
++                     " let table_name  = matchstr( table_name_new, '^\(.*\.\)\?\zs.*\ze' )
++                    let table_name  = matchstr( table_name_new, '^\(.\{-}\.\)\?\zs\(.\{-}\.\)\?.*\ze' )
++                 endif
+ 
+                  let list_idx = index(s:tbl_name, table_name, 0, &ignorecase)
+                  if list_idx > -1
+@@ -753,7 +920,7 @@
+ 
+          " Return to previous location
+          call cursor(curline, curcol)
+-         
++
+          if found == 0
+              if g:loaded_dbext > 300
+                  exec 'DBSetOption use_tbl_alias='.saveSettingAlias
+@@ -762,12 +929,13 @@
+              " Not a SQL statement, do not display a list
+              return []
+          endif
+-    endif 
++    endif
+ 
+     if empty(table_cols)
+         " Specify silent mode, no messages to the user (tbl, 1)
+         " Specify do not comma separate (tbl, 1, 1)
+-        let table_cols_str = DB_getListColumn(table_name, 1, 1)
++        " let table_cols_str = DB_getListColumn(table_name, 1, 1)
++        let table_cols_str = DB_getListColumn((owner!=''?owner.'.':'').table_name, 1, 1)
+ 
+         if table_cols_str != ""
+             let s:tbl_name  = add( s:tbl_name,  table_name )
+@@ -793,3 +961,7 @@
+ 
+     return table_cols
+ endfunction
++"  Restore:
++let &cpo= s:keepcpo
++unlet s:keepcpo
++" vim: ts=4 fdm=marker
+diff -Naur vim73.orig/runtime/autoload/syntaxcomplete.vim vim73/runtime/autoload/syntaxcomplete.vim
+--- vim73.orig/runtime/autoload/syntaxcomplete.vim	2010-07-29 19:21:15.000000000 +0000
++++ vim73/runtime/autoload/syntaxcomplete.vim	2013-06-07 17:07:06.905655620 +0000
+@@ -1,38 +1,80 @@
+ " Vim completion script
+ " Language:    All languages, uses existing syntax highlighting rules
+ " Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
+-" Version:     7.0
+-" Last Change: 2010 Jul 29
+-" Usage:       For detailed help, ":help ft-syntax-omni" 
++" Version:     13.0
++" Last Change: 2013 May 14
++" Usage:       For detailed help, ":help ft-syntax-omni"
+ 
+ " History
+ "
++" Version 13.0
++"   - Extended the option omni_syntax_group_include_{filetype}
++"     to accept a comma separated list of regex's rather than
++"     string.  For example, for the javascript filetype you could
++"     use:
++"        let g:omni_syntax_group_include_javascript = 'javascript\w\+,jquery\w\+'
++"   - Some syntax files (perl.vim) use the match // syntax as a mechanism
++"     to identify keywords.  This update attempts to parse the
++"     match syntax and pull out syntax items which are at least
++"     3 words or more.
++"
++" Version 12.0
++"   - It is possible to have '-' as part of iskeyword, when
++"     checking for character ranges, tighten up the regex.
++"     E688: More targets than List items.
++"
++" Version 11.0
++"   - Corrected which characters required escaping during
++"     substitution calls.
++"
++" Version 10.0
++"   - Cycle through all the character ranges specified in the
++"     iskeyword option and build a list of valid word separators.
++"     Prior to this change, only actual characters were used,
++"     where for example ASCII "45" == "-".  If "45" were used
++"     in iskeyword the hyphen would not be picked up.
++"     This introduces a new option, since the character ranges
++"     specified could be multibyte:
++"         let g:omni_syntax_use_single_byte = 1
++"   - This by default will only allow single byte ASCII
++"     characters to be added and an additional check to ensure
++"     the charater is printable (see documentation for isprint).
++"
++" Version 9.0
++"   - Add the check for cpo.
++"
++" Version 8.0
++"   - Updated SyntaxCSyntaxGroupItems()
++"         - Some additional syntax items were also allowed
++"           on nextgroup= lines which were ignored by default.
++"           Now these lines are processed independently.
++"
+ " Version 7.0
+-"     Updated syntaxcomplete#OmniSyntaxList()
++"   - Updated syntaxcomplete#OmniSyntaxList()
+ "         - Looking up the syntax groups defined from a syntax file
+-"           looked for only 1 format of {filetype}GroupName, but some 
++"           looked for only 1 format of {filetype}GroupName, but some
+ "           syntax writers use this format as well:
+ "               {b:current_syntax}GroupName
+-"           OmniSyntaxList() will now check for both if the first
++"   -       OmniSyntaxList() will now check for both if the first
+ "           method does not find a match.
+ "
+ " Version 6.0
+-"     Added syntaxcomplete#OmniSyntaxList()
+-"         - Allows other plugins to use this for their own 
++"   - Added syntaxcomplete#OmniSyntaxList()
++"         - Allows other plugins to use this for their own
+ "           purposes.
+ "         - It will return a List of all syntax items for the
+-"           syntax group name passed in.  
+-"         - XPTemplate for SQL will use this function via the 
++"           syntax group name passed in.
++"         - XPTemplate for SQL will use this function via the
+ "           sqlcomplete plugin to populate a Choose box.
+ "
+ " Version 5.0
+-"     Updated SyntaxCSyntaxGroupItems()
++"   - Updated SyntaxCSyntaxGroupItems()
+ "         - When processing a list of syntax groups, the final group
+ "           was missed in function SyntaxCSyntaxGroupItems.
+ "
+ " Set completion with CTRL-X CTRL-O to autoloaded function.
+ " This check is in place in case this script is
+-" sourced directly instead of using the autoload feature. 
++" sourced directly instead of using the autoload feature.
+ if exists('+omnifunc')
+     " Do not set the option if already set since this
+     " results in an E117 warning.
+@@ -42,9 +84,13 @@
+ endif
+ 
+ if exists('g:loaded_syntax_completion')
+-    finish 
++    finish
+ endif
+-let g:loaded_syntax_completion = 70
++let g:loaded_syntax_completion = 130
++
++" Turn on support for line continuations when creating the script
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+ " Set ignorecase to the ftplugin standard
+ " This is the default setting, but if you define a buffer local
+@@ -61,6 +107,18 @@
+     let g:omni_syntax_use_iskeyword = 1
+ endif
+ 
++" When using iskeyword, this setting controls whether the characters
++" should be limited to single byte characters.
++if !exists('g:omni_syntax_use_single_byte')
++    let g:omni_syntax_use_single_byte = 1
++endif
++
++" When using iskeyword, this setting controls whether the characters
++" should be limited to single byte characters.
++if !exists('g:omni_syntax_use_iskeyword_numeric')
++    let g:omni_syntax_use_iskeyword_numeric = 1
++endif
++
+ " Only display items in the completion window that are at least
+ " this many characters in length.
+ " This is the default setting, but if you define a buffer local
+@@ -71,8 +129,10 @@
+ 
+ " This script will build a completion list based on the syntax
+ " elements defined by the files in $VIMRUNTIME/syntax.
+-let s:syn_remove_words = 'match,matchgroup=,contains,'.
+-            \ 'links to,start=,end=,nextgroup='
++" let s:syn_remove_words = 'match,matchgroup=,contains,'.
++let s:syn_remove_words = 'matchgroup=,contains,'.
++            \ 'links to,start=,end='
++            " \ 'links to,start=,end=,nextgroup='
+ 
+ let s:cache_name = []
+ let s:cache_list = []
+@@ -151,7 +211,7 @@
+ function! syntaxcomplete#OmniSyntaxList(...)
+     if a:0 > 0
+         let parms = []
+-        if 3 == type(a:1) 
++        if 3 == type(a:1)
+             let parms = a:1
+         elseif 1 == type(a:1)
+             let parms = split(a:1, ',')
+@@ -165,7 +225,7 @@
+ function! OmniSyntaxList(...)
+     let list_parms = []
+     if a:0 > 0
+-        if 3 == type(a:1) 
++        if 3 == type(a:1)
+             let list_parms = a:1
+         elseif 1 == type(a:1)
+             let list_parms = split(a:1, ',')
+@@ -201,18 +261,18 @@
+ 
+     let saveL = @l
+     let filetype = substitute(&filetype, '\.', '_', 'g')
+-    
++
+     if empty(list_parms)
+         " Default the include group to include the requested syntax group
+         let syntax_group_include_{filetype} = ''
+         " Check if there are any overrides specified for this filetype
+         if exists('g:omni_syntax_group_include_'.filetype)
+             let syntax_group_include_{filetype} =
+-                        \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g') 
++                        \ substitute( g:omni_syntax_group_include_{filetype},'\s\+','','g')
+             let list_parms = split(g:omni_syntax_group_include_{filetype}, ',')
+             if syntax_group_include_{filetype} =~ '\w'
+-                let syntax_group_include_{filetype} = 
+-                            \ substitute( syntax_group_include_{filetype}, 
++                let syntax_group_include_{filetype} =
++                            \ substitute( syntax_group_include_{filetype},
+                             \ '\s*,\s*', '\\|', 'g'
+                             \ )
+             endif
+@@ -222,24 +282,34 @@
+     endif
+ 
+     " Loop through all the syntax groupnames, and build a
+-    " syntax file which contains these names.  This can 
++    " syntax file which contains these names.  This can
+     " work generically for any filetype that does not already
+     " have a plugin defined.
+     " This ASSUMES the syntax groupname BEGINS with the name
+-    " of the filetype.  From my casual viewing of the vim7\syntax 
++    " of the filetype.  From my casual viewing of the vim7\syntax
+     " directory this is true for almost all syntax definitions.
+     " As an example, the SQL syntax groups have this pattern:
+     "     sqlType
+     "     sqlOperators
+     "     sqlKeyword ...
+-    redir @l
+-    silent! exec 'syntax list '.join(list_parms)
+-    redir END
++    if !empty(list_parms) && empty(substitute(join(list_parms), '[a-zA-Z ]', '', 'g'))
++        " If list_parms only includes word characters, use it to limit
++        " the syntax elements.
++        " If using regex syntax list will fail to find those items, so
++        " simply grab the who syntax list.
++        redir @l
++        silent! exec 'syntax list '.join(list_parms)
++        redir END
++    else
++        redir @l
++        silent! exec 'syntax list'
++        redir END
++    endif
+ 
+     let syntax_full = "\n".@l
+     let @l = saveL
+ 
+-    if syntax_full =~ 'E28' 
++    if syntax_full =~ 'E28'
+                 \ || syntax_full =~ 'E411'
+                 \ || syntax_full =~ 'E415'
+                 \ || syntax_full =~ 'No Syntax items'
+@@ -249,7 +319,7 @@
+     let filetype = substitute(&filetype, '\.', '_', 'g')
+ 
+     let list_exclude_groups = []
+-    if a:0 > 0 
++    if a:0 > 0
+         " Do nothing since we have specific a specific list of groups
+     else
+         " Default the exclude group to nothing
+@@ -257,93 +327,178 @@
+         " Check if there are any overrides specified for this filetype
+         if exists('g:omni_syntax_group_exclude_'.filetype)
+             let syntax_group_exclude_{filetype} =
+-                        \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g') 
++                        \ substitute( g:omni_syntax_group_exclude_{filetype},'\s\+','','g')
+             let list_exclude_groups = split(g:omni_syntax_group_exclude_{filetype}, ',')
+-            if syntax_group_exclude_{filetype} =~ '\w' 
+-                let syntax_group_exclude_{filetype} = 
+-                            \ substitute( syntax_group_exclude_{filetype}, 
++            if syntax_group_exclude_{filetype} =~ '\w'
++                let syntax_group_exclude_{filetype} =
++                            \ substitute( syntax_group_exclude_{filetype},
+                             \ '\s*,\s*', '\\|', 'g'
+                             \ )
+             endif
+         endif
+     endif
+ 
+-    " Sometimes filetypes can be composite names, like c.doxygen
+-    " Loop through each individual part looking for the syntax
+-    " items specific to each individual filetype.
+-    let syn_list = ''
+-    let ftindex  = 0
+-    let ftindex  = match(&filetype, '\w\+', ftindex)
+-
+-    while ftindex > -1
+-        let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
++    if empty(list_parms)
++        let list_parms = [&filetype.'\w\+']
++    endif
+ 
+-        " Syntax rules can contain items for more than just the current 
+-        " filetype.  They can contain additional items added by the user
+-        " via autocmds or their vimrc.
+-        " Some syntax files can be combined (html, php, jsp).
+-        " We want only items that begin with the filetype we are interested in.
+-        let next_group_regex = '\n' .
+-                    \ '\zs'.ft_part_name.'\w\+\ze'.
+-                    \ '\s\+xxx\s\+' 
+-        let index    = 0
+-        let index    = match(syntax_full, next_group_regex, index)
+-
+-        if index == -1 && exists('b:current_syntax') && ft_part_name != b:current_syntax
+-            " There appears to be two standards when writing syntax files.
+-            " Either items begin as:
+-            "     syn keyword {filetype}Keyword         values ...
+-            "     let b:current_syntax = "sql"
+-            "     let b:current_syntax = "sqlanywhere"
+-            " Or
+-            "     syn keyword {syntax_filename}Keyword  values ...
+-            "     let b:current_syntax = "mysql"
+-            " So, we will make the format of finding the syntax group names
+-            " a bit more flexible and look for both if the first fails to 
+-            " find a match.
++    let syn_list = ''
++    let index    = 0
++    for group_regex in list_parms
++        " Sometimes filetypes can be composite names, like c.doxygen
++        " Loop through each individual part looking for the syntax
++        " items specific to each individual filetype.
++        " let ftindex  = 0
++        " let ftindex  = match(syntax_full, group_regex, ftindex)
++
++        " while ftindex > -1
++            " let ft_part_name = matchstr( syntax_full, '\w\+', ftindex )
++
++            " Syntax rules can contain items for more than just the current
++            " filetype.  They can contain additional items added by the user
++            " via autocmds or their vimrc.
++            " Some syntax files can be combined (html, php, jsp).
++            " We want only items that begin with the filetype we are interested in.
+             let next_group_regex = '\n' .
+-                        \ '\zs'.b:current_syntax.'\w\+\ze'.
+-                        \ '\s\+xxx\s\+' 
+-            let index    = 0
++                        \ '\zs'.group_regex.'\ze'.
++                        \ '\s\+xxx\s\+'
+             let index    = match(syntax_full, next_group_regex, index)
+-        endif
+ 
+-        while index > -1
+-            let group_name = matchstr( syntax_full, '\w\+', index )
+-
+-            let get_syn_list = 1
+-            for exclude_group_name in list_exclude_groups
+-                if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
+-                    let get_syn_list = 0
+-                endif
+-            endfor
+-        
+-            " This code is no longer needed in version 6.0 since we have
+-            " augmented the syntax list command to only retrieve the syntax 
+-            " groups we are interested in.
+-            "
+-            " if get_syn_list == 1
+-            "     if syntax_group_include_{filetype} != ''
+-            "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
+-            "             let get_syn_list = 0
+-            "         endif
+-            "     endif
+-            " endif
+-
+-            if get_syn_list == 1
+-                " Pass in the full syntax listing, plus the group name we 
+-                " are interested in.
+-                let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
+-                let syn_list = syn_list . extra_syn_list . "\n"
++            " For the matched group name, strip off any of the regex special
++            " characters and see if we get a match with the current syntax
++            if index == -1 && exists('b:current_syntax') && substitute(group_regex, '[^a-zA-Z ]\+.*', '', 'g') !~ '^'.b:current_syntax
++                " There appears to be two standards when writing syntax files.
++                " Either items begin as:
++                "     syn keyword {filetype}Keyword         values ...
++                "     let b:current_syntax = "sql"
++                "     let b:current_syntax = "sqlanywhere"
++                " Or
++                "     syn keyword {syntax_filename}Keyword  values ...
++                "     let b:current_syntax = "mysql"
++                " So, we will make the format of finding the syntax group names
++                " a bit more flexible and look for both if the first fails to
++                " find a match.
++                let next_group_regex = '\n' .
++                            \ '\zs'.b:current_syntax.'\w\+\ze'.
++                            \ '\s\+xxx\s\+'
++                let index    = 0
++                let index    = match(syntax_full, next_group_regex, index)
+             endif
+ 
+-            let index = index + strlen(group_name)
+-            let index = match(syntax_full, next_group_regex, index)
+-        endwhile
++            while index > -1
++                let group_name = matchstr( syntax_full, '\w\+', index )
++
++                let get_syn_list = 1
++                for exclude_group_name in list_exclude_groups
++                    if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
++                        let get_syn_list = 0
++                    endif
++                endfor
++
++                " This code is no longer needed in version 6.0 since we have
++                " augmented the syntax list command to only retrieve the syntax
++                " groups we are interested in.
++                "
++                " if get_syn_list == 1
++                "     if syntax_group_include_{filetype} != ''
++                "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
++                "             let get_syn_list = 0
++                "         endif
++                "     endif
++                " endif
++
++                if get_syn_list == 1
++                    " Pass in the full syntax listing, plus the group name we
++                    " are interested in.
++                    let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
++                    let syn_list = syn_list . extra_syn_list . "\n"
++                endif
+ 
+-        let ftindex  = ftindex + len(ft_part_name)
+-        let ftindex  = match( &filetype, '\w\+', ftindex )
+-    endwhile
++                let index = index + strlen(group_name)
++                let index = match(syntax_full, next_group_regex, index)
++            endwhile
++
++            " let ftindex  = ftindex + len(ft_part_name)
++            " let ftindex  = match( syntax_full, group_regex, ftindex )
++        " endwhile
++    endfor
++
++"   " Sometimes filetypes can be composite names, like c.doxygen
++"   " Loop through each individual part looking for the syntax
++"   " items specific to each individual filetype.
++"   let syn_list = ''
++"   let ftindex  = 0
++"   let ftindex  = match(&filetype, '\w\+', ftindex)
++
++"   while ftindex > -1
++"       let ft_part_name = matchstr( &filetype, '\w\+', ftindex )
++
++"       " Syntax rules can contain items for more than just the current
++"       " filetype.  They can contain additional items added by the user
++"       " via autocmds or their vimrc.
++"       " Some syntax files can be combined (html, php, jsp).
++"       " We want only items that begin with the filetype we are interested in.
++"       let next_group_regex = '\n' .
++"                   \ '\zs'.ft_part_name.'\w\+\ze'.
++"                   \ '\s\+xxx\s\+'
++"       let index    = 0
++"       let index    = match(syntax_full, next_group_regex, index)
++
++"       if index == -1 && exists('b:current_syntax') && ft_part_name != b:current_syntax
++"           " There appears to be two standards when writing syntax files.
++"           " Either items begin as:
++"           "     syn keyword {filetype}Keyword         values ...
++"           "     let b:current_syntax = "sql"
++"           "     let b:current_syntax = "sqlanywhere"
++"           " Or
++"           "     syn keyword {syntax_filename}Keyword  values ...
++"           "     let b:current_syntax = "mysql"
++"           " So, we will make the format of finding the syntax group names
++"           " a bit more flexible and look for both if the first fails to
++"           " find a match.
++"           let next_group_regex = '\n' .
++"                       \ '\zs'.b:current_syntax.'\w\+\ze'.
++"                       \ '\s\+xxx\s\+'
++"           let index    = 0
++"           let index    = match(syntax_full, next_group_regex, index)
++"       endif
++
++"       while index > -1
++"           let group_name = matchstr( syntax_full, '\w\+', index )
++
++"           let get_syn_list = 1
++"           for exclude_group_name in list_exclude_groups
++"               if '\<'.exclude_group_name.'\>' =~ '\<'.group_name.'\>'
++"                   let get_syn_list = 0
++"               endif
++"           endfor
++
++"           " This code is no longer needed in version 6.0 since we have
++"           " augmented the syntax list command to only retrieve the syntax
++"           " groups we are interested in.
++"           "
++"           " if get_syn_list == 1
++"           "     if syntax_group_include_{filetype} != ''
++"           "         if '\<'.syntax_group_include_{filetype}.'\>' !~ '\<'.group_name.'\>'
++"           "             let get_syn_list = 0
++"           "         endif
++"           "     endif
++"           " endif
++
++"           if get_syn_list == 1
++"               " Pass in the full syntax listing, plus the group name we
++"               " are interested in.
++"               let extra_syn_list = s:SyntaxCSyntaxGroupItems(group_name, syntax_full)
++"               let syn_list = syn_list . extra_syn_list . "\n"
++"           endif
++
++"           let index = index + strlen(group_name)
++"           let index = match(syntax_full, next_group_regex, index)
++"       endwhile
++
++"       let ftindex  = ftindex + len(ft_part_name)
++"       let ftindex  = match( &filetype, '\w\+', ftindex )
++"   endwhile
+ 
+     " Convert the string to a List and sort it.
+     let compl_list = sort(split(syn_list))
+@@ -385,7 +540,7 @@
+     "     \|           - 2nd potential match
+     "     \%$          - matches end of the file or string
+     "     \)           - end a group
+-    let syntax_group = matchstr(a:syntax_full, 
++    let syntax_group = matchstr(a:syntax_full,
+                 \ "\n".a:group_name.'\s\+xxx\s\+\zs.\{-}\ze\(\n\w\|\%$\)'
+                 \ )
+ 
+@@ -395,26 +550,97 @@
+ 
+         " We only want the words for the lines begining with
+         " containedin, but there could be other items.
+-        
++
+         " Tried to remove all lines that do not begin with contained
+         " but this does not work in all cases since you can have
+         "    contained nextgroup=...
+         " So this will strip off the ending of lines with known
+         " keywords.
+-        let syn_list = substitute( 
++        let syn_list = substitute(
+                     \    syntax_group, '\<\('.
+                     \    substitute(
+                     \      escape(s:syn_remove_words, '\\/.*$^~[]')
+                     \      , ',', '\\|', 'g'
+                     \    ).
+                     \    '\).\{-}\%($\|'."\n".'\)'
+-                    \    , "\n", 'g' 
++                    \    , "\n", 'g'
+                     \  )
+ 
+-        " Now strip off the newline + blank space + contained
+-        let syn_list = substitute( 
+-                    \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\)'
+-                    \    , "", 'g' 
++        " Attempt to deal with lines using the match syntax
++        " javaScriptDocTags xxx match /@\(param\|argument\|requires\|file\)\>/
++        " Though it can use any types of regex, so this plugin will attempt
++        " to restrict it
++        " 1.  Only use \( or \%( constructs remove all else
++        " 2   Remove and []s
++        " 3.  Account for match //constructs
++        "                       \%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?
++        " 4.  Hope for the best
++        "
++        "
++        let syn_list_old = syn_list
++        while syn_list =~ '\<match\>\s\+\/'
++            if syn_list =~ 'perlElseIfError'
++                let syn_list = syn_list
++            endif
++            " Check if the match has words at least 3 characters long
++            if syn_list =~ '\<match \/\zs.\{-}\<\w\{3,}\>.\{-}\ze\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+'
++                " Remove everything after / and before the first \(
++                let syn_list = substitute( syn_list, '\<match \/\zs.\{-}\ze\\%\?(.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
++                " Remove everything after \) and up to the ending /
++                let syn_list = substitute( syn_list, '\<match \/.\{-}\\)\zs.\{-}\ze\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
++
++                " Remove any character classes
++                " let syn_list = substitute( syn_list, '\<match /\zs.\{-}\[[^]]*\].\{-}\ze\/ ', '', 'g' )
++                let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\[[^]]*\]\ze.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?', '', 'g' )
++                " Remove any words < 3 characters
++                let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\<\w\{1,2}\>\ze.\{-}\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
++                " Remove all non-word characters
++                " let syn_list = substitute( syn_list, '\<match /\zs.\{-}\<\W\+\>.\{-}\ze\/ ', "", 'g' )
++                " let syn_list = substitute( syn_list, '\%(\<match \/[^/]\{-}\)\@<=\W\+\ze.\{-}\/ ', ' ', 'g' )
++                " Do this by using the outer substitue() call to gather all
++                " text between the match /.../ tags.
++                " The inner substitute() call operates on the text selected
++                " and replaces all non-word characters.
++                let syn_list = substitute( syn_list, '\<match \/\zs\(.\{-}\)\ze\\\@<!\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+'
++                            \ , '\=substitute(submatch(1), "\\W\\+", " ", "g")'
++                            \ , 'g' )
++                " Remove the match / / syntax
++                let syn_list = substitute( syn_list, '\<match \/\(.\{-}\)\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '\1', 'g' )
++            else
++                " No words long enough, remove the match
++                " Remove the match syntax
++                " let syn_list = substitute( syn_list, '\<match \/[^\/]*\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
++                let syn_list = substitute( syn_list, '\<match \/\%(.\{-}\)\?\/\%(\%(ms\|me\|hs\|he\|rs\|re\|lc\)\S\+\)\?\s\+', '', 'g' )
++            endif
++            if syn_list =~ '\<match\>\s\+\/'
++                " Problem removing the match / / tags
++                let syn_list = ''
++            endif
++        endwhile
++
++
++        " Now strip off the newline + blank space + contained.
++        " Also include lines with nextgroup=@someName skip_key_words syntax_element
++                    " \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\|nextgroup=\)'
++                    " \    syn_list, '\%(^\|\n\)\@<=\s*\<\(contained\|nextgroup=[@a-zA-Z,]*\)'
++        let syn_list = substitute(
++                    \    syn_list, '\<\(contained\|nextgroup=[@a-zA-Z,]*\)'
++                    \    , "", 'g'
++                    \ )
++
++        " This can leave lines like this
++        "     =@vimMenuList  skipwhite onoremenu
++        " Strip the special option keywords first
++        "     :h :syn-skipwhite*
++        let syn_list = substitute(
++                    \    syn_list, '\<\(skipwhite\|skipnl\|skipempty\)\>'
++                    \    , "", 'g'
++                    \ )
++
++        " Now remove the remainder of the nextgroup=@someName lines
++        let syn_list = substitute(
++                    \    syn_list, '\%(^\|\n\)\@<=\s*\(@\w\+\)'
++                    \    , "", 'g'
+                     \ )
+ 
+         if b:omni_syntax_use_iskeyword == 0
+@@ -423,19 +649,74 @@
+             " This will replace non-word characters with spaces.
+             let syn_list = substitute( syn_list, '[^0-9A-Za-z_ ]', ' ', 'g' )
+         else
+-            let accept_chars = ','.&iskeyword.','
+-            " Remove all character ranges
+-            " let accept_chars = substitute(accept_chars, ',[^,]\+-[^,]\+,', ',', 'g')
+-            let accept_chars = substitute(accept_chars, ',\@<=[^,]\+-[^,]\+,', '', 'g')
+-            " Remove all numeric specifications
+-            " let accept_chars = substitute(accept_chars, ',\d\{-},', ',', 'g')
+-            let accept_chars = substitute(accept_chars, ',\@<=\d\{-},', '', 'g')
+-            " Remove all commas
+-            let accept_chars = substitute(accept_chars, ',', '', 'g')
+-            " Escape special regex characters
+-            let accept_chars = escape(accept_chars, '\\/.*$^~[]' )
+-            " Remove all characters that are not acceptable
+-            let syn_list = substitute( syn_list, '[^0-9A-Za-z_ '.accept_chars.']', ' ', 'g' )
++            if g:omni_syntax_use_iskeyword_numeric == 1
++                " iskeyword can contain value like this
++                " 38,42,43,45,47-58,60-62,64-90,97-122,_,+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
++                " Numeric values convert to their ASCII equivalent using the
++                " nr2char() function.
++                "     &       38
++                "     *       42
++                "     +       43
++                "     -       45
++                "     ^       94
++                " Iterate through all numeric specifications and convert those
++                " to their ascii equivalent ensuring the character is printable.
++                " If so, add it to the list.
++                let accepted_chars = ''
++                for item in split(&iskeyword, ',')
++                    if item =~ '\d-\d'
++                        " This is a character range (ie 47-58),
++                        " cycle through each character within the range
++                        let [b:start, b:end] = split(item, '-')
++                        for range_item in range( b:start, b:end )
++                            if range_item <= 127 || g:omni_syntax_use_single_byte == 0
++                                if nr2char(range_item) =~ '\p'
++                                    let accepted_chars = accepted_chars . nr2char(range_item)
++                                endif
++                            endif
++                        endfor
++                    elseif item =~ '^\d\+$'
++                        " Only numeric, translate to a character
++                        if item < 127 || g:omni_syntax_use_single_byte == 0
++                            if nr2char(item) =~ '\p'
++                                let accepted_chars = accepted_chars . nr2char(item)
++                            endif
++                        endif
++                    else
++                        if char2nr(item) < 127 || g:omni_syntax_use_single_byte == 0
++                            if item =~ '\p'
++                                let accepted_chars = accepted_chars . item
++                            endif
++                        endif
++                    endif
++                endfor
++                " Escape special regex characters
++                " Looks like the wrong chars are escaped.  In a collection,
++                "      :h /[]
++                "      only `]', `\', `-' and `^' are special:
++                " let accepted_chars = escape(accepted_chars, '\\/.*$^~[]' )
++                let accepted_chars = escape(accepted_chars, ']\-^' )
++                " Remove all characters that are not acceptable
++                let syn_list = substitute( syn_list, '[^A-Za-z'.accepted_chars.']', ' ', 'g' )
++            else
++                let accept_chars = ','.&iskeyword.','
++                " Remove all character ranges
++                " let accept_chars = substitute(accept_chars, ',[^,]\+-[^,]\+,', ',', 'g')
++                let accept_chars = substitute(accept_chars, ',\@<=[^,]\+-[^,]\+,', '', 'g')
++                " Remove all numeric specifications
++                " let accept_chars = substitute(accept_chars, ',\d\{-},', ',', 'g')
++                let accept_chars = substitute(accept_chars, ',\@<=\d\{-},', '', 'g')
++                " Remove all commas
++                let accept_chars = substitute(accept_chars, ',', '', 'g')
++                " Escape special regex characters
++                " Looks like the wrong chars are escaped.  In a collection,
++                "      :h /[]
++                "      only `]', `\', `-' and `^' are special:
++                " let accept_chars = escape(accept_chars, '\\/.*$^~[]' )
++                let accept_chars = escape(accept_chars, ']\-^' )
++                " Remove all characters that are not acceptable
++                let syn_list = substitute( syn_list, '[^0-9A-Za-z_'.accept_chars.']', ' ', 'g' )
++            endif
+         endif
+ 
+         if b:omni_syntax_minimum_length > 0
+@@ -448,3 +729,27 @@
+ 
+     return syn_list
+ endfunction
++
++function! OmniSyntaxShowChars(spec)
++  let result = []
++  for item in split(a:spec, ',')
++    if len(item) > 1
++      if item == '@-@'
++        call add(result, char2nr(item))
++      else
++        call extend(result, call('range', split(item, '-')))
++      endif
++    else
++      if item == '@'  " assume this is [A-Za-z]
++        for [c1, c2] in [['A', 'Z'], ['a', 'z']]
++          call extend(result, range(char2nr(c1), char2nr(c2)))
++        endfor
++      else
++        call add(result, char2nr(item))
++      endif
++    endif
++  endfor
++  return join(map(result, 'nr2char(v:val)'), ', ')
++endfunction
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/autoload/tar.vim vim73/runtime/autoload/tar.vim
+--- vim73.orig/runtime/autoload/tar.vim	2010-08-10 00:02:24.000000000 +0000
++++ vim73/runtime/autoload/tar.vim	2013-06-07 17:07:06.915655592 +0000
+@@ -1,13 +1,13 @@
+ " tar.vim: Handles browsing tarfiles
+ "            AUTOLOAD PORTION
+-" Date:			Aug 09, 2010
+-" Version:		26
+-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
++" Date:			Apr 17, 2013
++" Version:		29
++" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+ " License:		Vim License  (see vim's :help license)
+ "
+ "	Contains many ideas from Michael Toren's <tar.vim>
+ "
+-" Copyright:    Copyright (C) 2005-2009 Charles E. Campbell, Jr. {{{1
++" Copyright:    Copyright (C) 2005-2011 Charles E. Campbell {{{1
+ "               Permission is hereby granted to use and distribute this code,
+ "               with or without modifications, provided that this copyright
+ "               notice is copied with it. Like anything else that's free,
+@@ -22,7 +22,7 @@
+ if &cp || exists("g:loaded_tar")
+  finish
+ endif
+-let g:loaded_tar= "v26"
++let g:loaded_tar= "v29"
+ if v:version < 702
+  echohl WarningMsg
+  echo "***warning*** this version of tar needs vim 7.2"
+@@ -31,6 +31,7 @@
+ endif
+ let s:keepcpo= &cpo
+ set cpo&vim
++"DechoTabOn
+ "call Decho("loading autoload/tar.vim")
+ 
+ " ---------------------------------------------------------------------
+@@ -47,6 +48,17 @@
+ if !exists("g:tar_writeoptions")
+  let g:tar_writeoptions= "uf"
+ endif
++if !exists("g:netrw_cygwin")
++ if has("win32") || has("win95") || has("win64") || has("win16")
++  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
++   let g:netrw_cygwin= 1
++  else
++   let g:netrw_cygwin= 0
++  endif
++ else
++  let g:netrw_cygwin= 0
++ endif
++endif
+ if !exists("g:tar_copycmd")
+  if !exists("g:netrw_localcopycmd")
+   if has("win32") || has("win95") || has("win64") || has("win16")
+@@ -63,24 +75,13 @@
+  endif
+  let g:tar_copycmd= g:netrw_localcopycmd
+ endif
+-if !exists("g:netrw_cygwin")
+- if has("win32") || has("win95") || has("win64") || has("win16")
+-  if &shell =~ '\%(\<bash\>\|\<zsh\>\)\%(\.exe\)\=$'
+-   let g:netrw_cygwin= 1
+-  else
+-   let g:netrw_cygwin= 0
+-  endif
+- else
+-  let g:netrw_cygwin= 0
+- endif
+-endif
+ if !exists("g:tar_extractcmd")
+  let g:tar_extractcmd= "tar -xf"
+ endif
+ 
+ " set up shell quoting character
+ if !exists("g:tar_shq")
+- if exists("&shq") && &shq != ""
++ if exists("+shq") && exists("&shq") && &shq != ""
+   let g:tar_shq= &shq
+  elseif has("win32") || has("win95") || has("win64") || has("win16")
+   if exists("g:netrw_cygwin") && g:netrw_cygwin
+@@ -142,38 +143,38 @@
+   call setline(lastline+1,'" tar.vim version '.g:loaded_tar)
+   call setline(lastline+2,'" Browsing tarfile '.a:tarfile)
+   call setline(lastline+3,'" Select a file with cursor and press ENTER')
+-  $put =''
+-  0d
+-  $
++  keepj $put =''
++  keepj sil! 0d
++  keepj $
+ 
+   let tarfile= a:tarfile
+-  if has("win32") && executable("cygpath")
++  if has("win32unix") && executable("cygpath")
+    " assuming cygwin
+    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
+   endif
+   let curlast= line("$")
+   if tarfile =~# '\.\(gz\|tgz\)$'
+ "   call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+-   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
++   exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   elseif tarfile =~# '\.lrp'
+ "   call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
+-   exe "silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
+-  elseif tarfile =~# '\.bz2$'
++   exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
++  elseif tarfile =~# '\.\(bz2\|tbz\|tb2\)$'
+ "   call Decho("3: exe silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+-   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+-  elseif tarfile =~# '\.lzma$'
++   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
++  elseif tarfile =~# '\.\(lzma\|tlz\)$'
+ "   call Decho("3: exe silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+-   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
++   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   elseif tarfile =~# '\.\(xz\|txz\)$'
+ "   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
+-   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
++   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
+   else
+    if tarfile =~ '^\s*-'
+     " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
+     let tarfile = substitute(tarfile, '-', './-', '')
+    endif
+ "   call Decho("4: exe silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,0))
+-   exe "silent r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
++   exe "sil! r! ".g:tar_cmd." -".g:tar_browseoptions." ".shellescape(tarfile,1)
+   endif
+   if v:shell_error != 0
+    redraw!
+@@ -184,12 +185,12 @@
+   if line("$") == curlast || ( line("$") == (curlast + 1) && getline("$") =~ '\c\%(warning\|error\|inappropriate\|unrecognized\)')
+    redraw!
+    echohl WarningMsg | echo "***warning*** (tar#Browse) ".a:tarfile." doesn't appear to be a tar file" | echohl None
+-   silent %d
++   keepj sil! %d
+    let eikeep= &ei
+    set ei=BufReadCmd,FileReadCmd
+    exe "r ".fnameescape(a:tarfile)
+    let &ei= eikeep
+-   1d
++   keepj sil! 1d
+ "   call Dret("tar#Browse : a:tarfile<".a:tarfile.">")
+    return
+   endif
+@@ -227,7 +228,7 @@
+   " about to make a new window, need to use b:tarfile
+   let tarfile= b:tarfile
+   let curfile= expand("%")
+-  if has("win32") && executable("cygpath")
++  if has("win32unix") && executable("cygpath")
+    " assuming cygwin
+    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
+   endif
+@@ -239,6 +240,8 @@
+   let s:tblfile_{winnr()}= curfile
+   call tar#Read("tarfile:".tarfile.'::'.fname,1)
+   filetype detect
++  set nomod
++  exe 'com! -buffer -nargs=? -complete=file TarDiff	:call tar#Diff(<q-args>,"'.fnameescape(fname).'")'
+ 
+   let &report= repkeep
+ "  call Dret("TarBrowseSelect : s:tblfile_".winnr()."<".s:tblfile_{winnr()}.">")
+@@ -252,7 +255,7 @@
+   set report=10
+   let tarfile = substitute(a:fname,'tarfile:\(.\{-}\)::.*$','\1','')
+   let fname   = substitute(a:fname,'tarfile:.\{-}::\(.*\)$','\1','')
+-  if has("win32") && executable("cygpath")
++  if has("win32unix") && executable("cygpath")
+    " assuming cygwin
+    let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
+   endif
+@@ -286,19 +289,19 @@
+   endif
+   if tarfile =~# '\.bz2$'
+ "   call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+-   exe "silent r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
++   exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   elseif tarfile =~# '\.\(gz\|tgz\)$'
+ "   call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
+-   exe "silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
++   exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   elseif tarfile =~# '\.lrp$'
+ "   call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+-   exe "silent r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
++   exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   elseif tarfile =~# '\.lzma$'
+ "   call Decho("7: exe silent r! lzma -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+-   exe "silent r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
++   exe "sil! r! lzma -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   elseif tarfile =~# '\.\(xz\|txz\)$'
+ "   call Decho("3: exe silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
+-   exe "silent r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
++   exe "sil! r! xz --decompress --stdout -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
+   else
+    if tarfile =~ '^\s*-'
+     " A file name starting with a dash is taken as an option.  Prepend ./ to avoid that.
+@@ -317,7 +320,7 @@
+   exe "file tarfile::".fnameescape(fname)
+ 
+   " cleanup
+-  0d
++  keepj sil! 0d
+   set nomod
+ 
+   let &report= repkeep
+@@ -425,7 +428,7 @@
+  
+    if fname =~ '/'
+     let dirpath = substitute(fname,'/[^/]\+$','','e')
+-    if executable("cygpath")
++    if has("win32unix") && executable("cygpath")
+      let dirpath = substitute(system("cygpath ".shellescape(dirpath, 0)),'\n','','e')
+     endif
+     call mkdir(dirpath,"p")
+@@ -445,7 +448,7 @@
+     let tar_secure= " "
+    endif
+    exe "w! ".fnameescape(fname)
+-   if executable("cygpath")
++   if has("win32unix") && executable("cygpath")
+     let tarfile = substitute(system("cygpath ".shellescape(tarfile,0)),'\n','','e')
+    endif
+  
+@@ -501,6 +504,30 @@
+ endfun
+ 
+ " ---------------------------------------------------------------------
++" tar#Diff: {{{2
++fun! tar#Diff(userfname,fname)
++"  call Dfunc("tar#Diff(userfname<".a:userfname."> fname<".a:fname.")")
++  let fname= a:fname
++  if a:userfname != ""
++   let fname= a:userfname
++  endif
++  if filereadable(fname)
++   " sets current file (from tarball) for diff'ing
++   " splits window vertically
++   " opens original file, sets it for diff'ing
++   " sets up b:tardiff_otherbuf variables so each buffer knows about the other (for closing purposes)
++   diffthis
++   wincmd v
++   exe "e ".fnameescape(fname)
++   diffthis
++  else
++   redraw!
++   echo "***warning*** unable to read file<".fname.">"
++  endif
++"  call Dret("tar#Diff")
++endfun
++
++" ---------------------------------------------------------------------
+ " s:Rmdir: {{{2
+ fun! s:Rmdir(fname)
+ "  call Dfunc("Rmdir(fname<".a:fname.">)")
+diff -Naur vim73.orig/runtime/autoload/tohtml.vim vim73/runtime/autoload/tohtml.vim
+--- vim73.orig/runtime/autoload/tohtml.vim	2010-08-12 19:59:40.000000000 +0000
++++ vim73/runtime/autoload/tohtml.vim	2013-06-07 17:07:06.928988887 +0000
+@@ -1,6 +1,6 @@
+ " Vim autoload file for the tohtml plugin.
+ " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
+-" Last Change: 2010 Aug 12
++" Last Change: 2013 May 31
+ "
+ " Additional contributors:
+ "
+@@ -11,12 +11,286 @@
+ 
+ " this file uses line continuations
+ let s:cpo_sav = &cpo
+-set cpo-=C
++set cpo&vim
+ 
+-func! tohtml#Convert2HTML(line1, line2)
++" Automatically find charsets from all encodings supported natively by Vim. With
++" the 8bit- and 2byte- prefixes, Vim can actually support more encodings than
++" this. Let the user specify these however since they won't be supported on
++" every system.
++"
++" Note, not all of Vim's supported encodings have a charset to use.
++"
++" Names in this list are from:
++"   http://www.iana.org/assignments/character-sets
++" g:tohtml#encoding_to_charset: {{{
++let g:tohtml#encoding_to_charset = {
++      \ 'latin1' : 'ISO-8859-1',
++      \ 'iso-8859-2' : 'ISO-8859-2',
++      \ 'iso-8859-3' : 'ISO-8859-3',
++      \ 'iso-8859-4' : 'ISO-8859-4',
++      \ 'iso-8859-5' : 'ISO-8859-5',
++      \ 'iso-8859-6' : 'ISO-8859-6',
++      \ 'iso-8859-7' : 'ISO-8859-7',
++      \ 'iso-8859-8' : 'ISO-8859-8',
++      \ 'iso-8859-9' : 'ISO-8859-9',
++      \ 'iso-8859-10' : '',
++      \ 'iso-8859-13' : 'ISO-8859-13',
++      \ 'iso-8859-14' : '',
++      \ 'iso-8859-15' : 'ISO-8859-15',
++      \ 'koi8-r' : 'KOI8-R',
++      \ 'koi8-u' : 'KOI8-U',
++      \ 'macroman' : 'macintosh',
++      \ 'cp437' : '',
++      \ 'cp775' : '',
++      \ 'cp850' : '',
++      \ 'cp852' : '',
++      \ 'cp855' : '',
++      \ 'cp857' : '',
++      \ 'cp860' : '',
++      \ 'cp861' : '',
++      \ 'cp862' : '',
++      \ 'cp863' : '',
++      \ 'cp865' : '',
++      \ 'cp866' : 'IBM866',
++      \ 'cp869' : '',
++      \ 'cp874' : '',
++      \ 'cp1250' : 'windows-1250',
++      \ 'cp1251' : 'windows-1251',
++      \ 'cp1253' : 'windows-1253',
++      \ 'cp1254' : 'windows-1254',
++      \ 'cp1255' : 'windows-1255',
++      \ 'cp1256' : 'windows-1256',
++      \ 'cp1257' : 'windows-1257',
++      \ 'cp1258' : 'windows-1258',
++      \ 'euc-jp' : 'EUC-JP',
++      \ 'sjis' : 'Shift_JIS',
++      \ 'cp932' : 'Shift_JIS',
++      \ 'cp949' : '',
++      \ 'euc-kr' : 'EUC-KR',
++      \ 'cp936' : 'GBK',
++      \ 'euc-cn' : 'GB2312',
++      \ 'big5' : 'Big5',
++      \ 'cp950' : 'Big5',
++      \ 'utf-8' : 'UTF-8',
++      \ 'ucs-2' : 'UTF-8',
++      \ 'ucs-2le' : 'UTF-8',
++      \ 'utf-16' : 'UTF-8',
++      \ 'utf-16le' : 'UTF-8',
++      \ 'ucs-4' : 'UTF-8',
++      \ 'ucs-4le' : 'UTF-8',
++      \ }
++lockvar g:tohtml#encoding_to_charset
++" Notes:
++"   1. All UCS/UTF are converted to UTF-8 because it is much better supported
++"   2. Any blank spaces are there because Vim supports it but at least one major
++"      web browser does not according to http://wiki.whatwg.org/wiki/Web_Encodings.
++" }}}
++
++" Only automatically find encodings supported natively by Vim, let the user
++" specify the encoding if it's not natively supported. This function is only
++" used when the user specifies the charset, they better know what they are
++" doing!
++"
++" Names in this list are from:
++"   http://www.iana.org/assignments/character-sets
++" g:tohtml#charset_to_encoding: {{{
++let g:tohtml#charset_to_encoding = {
++      \ 'iso_8859-1:1987' : 'latin1',
++      \ 'iso-ir-100' : 'latin1',
++      \ 'iso_8859-1' : 'latin1',
++      \ 'iso-8859-1' : 'latin1',
++      \ 'latin1' : 'latin1',
++      \ 'l1' : 'latin1',
++      \ 'ibm819' : 'latin1',
++      \ 'cp819' : 'latin1',
++      \ 'csisolatin1' : 'latin1',
++      \ 'iso_8859-2:1987' : 'iso-8859-2',
++      \ 'iso-ir-101' : 'iso-8859-2',
++      \ 'iso_8859-2' : 'iso-8859-2',
++      \ 'iso-8859-2' : 'iso-8859-2',
++      \ 'latin2' : 'iso-8859-2',
++      \ 'l2' : 'iso-8859-2',
++      \ 'csisolatin2' : 'iso-8859-2',
++      \ 'iso_8859-3:1988' : 'iso-8859-3',
++      \ 'iso-ir-109' : 'iso-8859-3',
++      \ 'iso_8859-3' : 'iso-8859-3',
++      \ 'iso-8859-3' : 'iso-8859-3',
++      \ 'latin3' : 'iso-8859-3',
++      \ 'l3' : 'iso-8859-3',
++      \ 'csisolatin3' : 'iso-8859-3',
++      \ 'iso_8859-4:1988' : 'iso-8859-4',
++      \ 'iso-ir-110' : 'iso-8859-4',
++      \ 'iso_8859-4' : 'iso-8859-4',
++      \ 'iso-8859-4' : 'iso-8859-4',
++      \ 'latin4' : 'iso-8859-4',
++      \ 'l4' : 'iso-8859-4',
++      \ 'csisolatin4' : 'iso-8859-4',
++      \ 'iso_8859-5:1988' : 'iso-8859-5',
++      \ 'iso-ir-144' : 'iso-8859-5',
++      \ 'iso_8859-5' : 'iso-8859-5',
++      \ 'iso-8859-5' : 'iso-8859-5',
++      \ 'cyrillic' : 'iso-8859-5',
++      \ 'csisolatincyrillic' : 'iso-8859-5',
++      \ 'iso_8859-6:1987' : 'iso-8859-6',
++      \ 'iso-ir-127' : 'iso-8859-6',
++      \ 'iso_8859-6' : 'iso-8859-6',
++      \ 'iso-8859-6' : 'iso-8859-6',
++      \ 'ecma-114' : 'iso-8859-6',
++      \ 'asmo-708' : 'iso-8859-6',
++      \ 'arabic' : 'iso-8859-6',
++      \ 'csisolatinarabic' : 'iso-8859-6',
++      \ 'iso_8859-7:1987' : 'iso-8859-7',
++      \ 'iso-ir-126' : 'iso-8859-7',
++      \ 'iso_8859-7' : 'iso-8859-7',
++      \ 'iso-8859-7' : 'iso-8859-7',
++      \ 'elot_928' : 'iso-8859-7',
++      \ 'ecma-118' : 'iso-8859-7',
++      \ 'greek' : 'iso-8859-7',
++      \ 'greek8' : 'iso-8859-7',
++      \ 'csisolatingreek' : 'iso-8859-7',
++      \ 'iso_8859-8:1988' : 'iso-8859-8',
++      \ 'iso-ir-138' : 'iso-8859-8',
++      \ 'iso_8859-8' : 'iso-8859-8',
++      \ 'iso-8859-8' : 'iso-8859-8',
++      \ 'hebrew' : 'iso-8859-8',
++      \ 'csisolatinhebrew' : 'iso-8859-8',
++      \ 'iso_8859-9:1989' : 'iso-8859-9',
++      \ 'iso-ir-148' : 'iso-8859-9',
++      \ 'iso_8859-9' : 'iso-8859-9',
++      \ 'iso-8859-9' : 'iso-8859-9',
++      \ 'latin5' : 'iso-8859-9',
++      \ 'l5' : 'iso-8859-9',
++      \ 'csisolatin5' : 'iso-8859-9',
++      \ 'iso-8859-10' : 'iso-8859-10',
++      \ 'iso-ir-157' : 'iso-8859-10',
++      \ 'l6' : 'iso-8859-10',
++      \ 'iso_8859-10:1992' : 'iso-8859-10',
++      \ 'csisolatin6' : 'iso-8859-10',
++      \ 'latin6' : 'iso-8859-10',
++      \ 'iso-8859-13' : 'iso-8859-13',
++      \ 'iso-8859-14' : 'iso-8859-14',
++      \ 'iso-ir-199' : 'iso-8859-14',
++      \ 'iso_8859-14:1998' : 'iso-8859-14',
++      \ 'iso_8859-14' : 'iso-8859-14',
++      \ 'latin8' : 'iso-8859-14',
++      \ 'iso-celtic' : 'iso-8859-14',
++      \ 'l8' : 'iso-8859-14',
++      \ 'iso-8859-15' : 'iso-8859-15',
++      \ 'iso_8859-15' : 'iso-8859-15',
++      \ 'latin-9' : 'iso-8859-15',
++      \ 'koi8-r' : 'koi8-r',
++      \ 'cskoi8r' : 'koi8-r',
++      \ 'koi8-u' : 'koi8-u',
++      \ 'macintosh' : 'macroman',
++      \ 'mac' : 'macroman',
++      \ 'csmacintosh' : 'macroman',
++      \ 'ibm437' : 'cp437',
++      \ 'cp437' : 'cp437',
++      \ '437' : 'cp437',
++      \ 'cspc8codepage437' : 'cp437',
++      \ 'ibm775' : 'cp775',
++      \ 'cp775' : 'cp775',
++      \ 'cspc775baltic' : 'cp775',
++      \ 'ibm850' : 'cp850',
++      \ 'cp850' : 'cp850',
++      \ '850' : 'cp850',
++      \ 'cspc850multilingual' : 'cp850',
++      \ 'ibm852' : 'cp852',
++      \ 'cp852' : 'cp852',
++      \ '852' : 'cp852',
++      \ 'cspcp852' : 'cp852',
++      \ 'ibm855' : 'cp855',
++      \ 'cp855' : 'cp855',
++      \ '855' : 'cp855',
++      \ 'csibm855' : 'cp855',
++      \ 'ibm857' : 'cp857',
++      \ 'cp857' : 'cp857',
++      \ '857' : 'cp857',
++      \ 'csibm857' : 'cp857',
++      \ 'ibm860' : 'cp860',
++      \ 'cp860' : 'cp860',
++      \ '860' : 'cp860',
++      \ 'csibm860' : 'cp860',
++      \ 'ibm861' : 'cp861',
++      \ 'cp861' : 'cp861',
++      \ '861' : 'cp861',
++      \ 'cp-is' : 'cp861',
++      \ 'csibm861' : 'cp861',
++      \ 'ibm862' : 'cp862',
++      \ 'cp862' : 'cp862',
++      \ '862' : 'cp862',
++      \ 'cspc862latinhebrew' : 'cp862',
++      \ 'ibm863' : 'cp863',
++      \ 'cp863' : 'cp863',
++      \ '863' : 'cp863',
++      \ 'csibm863' : 'cp863',
++      \ 'ibm865' : 'cp865',
++      \ 'cp865' : 'cp865',
++      \ '865' : 'cp865',
++      \ 'csibm865' : 'cp865',
++      \ 'ibm866' : 'cp866',
++      \ 'cp866' : 'cp866',
++      \ '866' : 'cp866',
++      \ 'csibm866' : 'cp866',
++      \ 'ibm869' : 'cp869',
++      \ 'cp869' : 'cp869',
++      \ '869' : 'cp869',
++      \ 'cp-gr' : 'cp869',
++      \ 'csibm869' : 'cp869',
++      \ 'windows-1250' : 'cp1250',
++      \ 'windows-1251' : 'cp1251',
++      \ 'windows-1253' : 'cp1253',
++      \ 'windows-1254' : 'cp1254',
++      \ 'windows-1255' : 'cp1255',
++      \ 'windows-1256' : 'cp1256',
++      \ 'windows-1257' : 'cp1257',
++      \ 'windows-1258' : 'cp1258',
++      \ 'extended_unix_code_packed_format_for_japanese' : 'euc-jp',
++      \ 'cseucpkdfmtjapanese' : 'euc-jp',
++      \ 'euc-jp' : 'euc-jp',
++      \ 'shift_jis' : 'sjis',
++      \ 'ms_kanji' : 'sjis',
++      \ 'sjis' : 'sjis',
++      \ 'csshiftjis' : 'sjis',
++      \ 'ibm-thai' : 'cp874',
++      \ 'csibmthai' : 'cp874',
++      \ 'ks_c_5601-1987' : 'cp949',
++      \ 'iso-ir-149' : 'cp949',
++      \ 'ks_c_5601-1989' : 'cp949',
++      \ 'ksc_5601' : 'cp949',
++      \ 'korean' : 'cp949',
++      \ 'csksc56011987' : 'cp949',
++      \ 'euc-kr' : 'euc-kr',
++      \ 'cseuckr' : 'euc-kr',
++      \ 'gbk' : 'cp936',
++      \ 'cp936' : 'cp936',
++      \ 'ms936' : 'cp936',
++      \ 'windows-936' : 'cp936',
++      \ 'gb_2312-80' : 'euc-cn',
++      \ 'iso-ir-58' : 'euc-cn',
++      \ 'chinese' : 'euc-cn',
++      \ 'csiso58gb231280' : 'euc-cn',
++      \ 'big5' : 'big5',
++      \ 'csbig5' : 'big5',
++      \ 'utf-8' : 'utf-8',
++      \ 'iso-10646-ucs-2' : 'ucs-2',
++      \ 'csunicode' : 'ucs-2',
++      \ 'utf-16' : 'utf-16',
++      \ 'utf-16be' : 'utf-16',
++      \ 'utf-16le' : 'utf-16le',
++      \ 'utf-32' : 'ucs-4',
++      \ 'utf-32be' : 'ucs-4',
++      \ 'utf-32le' : 'ucs-4le',
++      \ 'iso-10646-ucs-4' : 'ucs-4',
++      \ 'csucs4' : 'ucs-4'
++      \ }
++lockvar g:tohtml#charset_to_encoding
++"}}}
++
++func! tohtml#Convert2HTML(line1, line2) "{{{
+   let s:settings = tohtml#GetUserSettings()
+ 
+-  if !&diff || s:settings.diff_one_file
++  if !&diff || s:settings.diff_one_file "{{{
+     if a:line2 >= a:line1
+       let g:html_start_line = a:line1
+       let g:html_end_line = a:line2
+@@ -24,31 +298,51 @@
+       let g:html_start_line = a:line2
+       let g:html_end_line = a:line1
+     endif
+-    runtime syntax/2html.vim
+-  else
++    runtime syntax/2html.vim "}}}
++  else "{{{
+     let win_list = []
+     let buf_list = []
+     windo | if &diff | call add(win_list, winbufnr(0)) | endif
+     let s:settings.whole_filler = 1
+     let g:html_diff_win_num = 0
+     for window in win_list
++      " switch to the next buffer to convert
+       exe ":" . bufwinnr(window) . "wincmd w"
++
++      " figure out whether current charset and encoding will work, if not
++      " default to UTF-8
++      if !exists('g:html_use_encoding') &&
++	    \ (((&l:fileencoding=='' || (&l:buftype!='' && &l:buftype!=?'help'))
++	    \      && &encoding!=?s:settings.vim_encoding)
++	    \ || &l:fileencoding!='' && &l:fileencoding!=?s:settings.vim_encoding)
++	echohl WarningMsg
++	echomsg "TOhtml: mismatched file encodings in Diff buffers, using UTF-8"
++	echohl None
++	let s:settings.vim_encoding = 'utf-8'
++	let s:settings.encoding = 'UTF-8'
++      endif
++
++      " set up for diff-mode conversion
+       let g:html_start_line = 1
+       let g:html_end_line = line('$')
+       let g:html_diff_win_num += 1
++
++      " convert this file
+       runtime syntax/2html.vim
++
++      " remember the HTML buffer for later combination
+       call add(buf_list, bufnr('%'))
+     endfor
+     unlet g:html_diff_win_num
+     call tohtml#Diff2HTML(win_list, buf_list)
+-  endif
++  endif "}}}
+ 
+   unlet g:html_start_line
+   unlet g:html_end_line
+   unlet s:settings
+-endfunc
++endfunc "}}}
+ 
+-func! tohtml#Diff2HTML(win_list, buf_list)
++func! tohtml#Diff2HTML(win_list, buf_list) "{{{
+   let xml_line = ""
+   let tag_close = '>'
+ 
+@@ -87,7 +381,7 @@
+   call add(html, '<head>')
+ 
+   " include encoding as close to the top as possible, but only if not already
+-  " contained in XML information (to avoid haggling over content type)
++  " contained in XML information
+   if s:settings.encoding != "" && !s:settings.use_xhtml
+     call add(html, "<meta http-equiv=\"content-type\" content=\"text/html; charset=" . s:settings.encoding . '"' . tag_close)
+   endif
+@@ -97,12 +391,25 @@
+   call add(html, '<meta name="plugin-version" content="'.g:loaded_2html_plugin.'"'.tag_close)
+   call add(html, '<meta name="settings" content="'.
+ 	\ join(filter(keys(s:settings),'s:settings[v:val]'),',').
++	\ ',prevent_copy='.s:settings.prevent_copy.
+ 	\ '"'.tag_close)
++  call add(html, '<meta name="colorscheme" content="'.
++	\ (exists('g:colors_name')
++	\ ? g:colors_name
++	\ : 'none'). '"'.tag_close)
+ 
+   call add(html, '</head>')
+   let body_line_num = len(html)
+-  call add(html, '<body>')
+-  call add(html, '<table border="1" width="100%">')
++  if !empty(s:settings.prevent_copy)
++    call add(html, "<body onload='FixCharWidth(); JumpToLine();'>")
++    call add(html, "<!-- hidden divs used by javascript to get the width of a char -->")
++    call add(html, "<div id='oneCharWidth'>0</div>")
++    call add(html, "<div id='oneInputWidth'><input size='1' value='0'".tag_close."</div>")
++    call add(html, "<div id='oneEmWidth' style='width: 1em;'></div>")
++  else
++    call add(html, '<body onload="JumpToLine();">')
++  endif
++  call add(html, "<table border='1' width='100%' id='vimCodeElement'>")
+ 
+   call add(html, '<tr>')
+   for buf in a:win_list
+@@ -133,7 +440,8 @@
+       let s:body_end_line = getline('.')
+     endif
+ 
+-    " Grab the style information.  Some of this will be duplicated...
++    " Grab the style information. Some of this will be duplicated so only insert
++    " it if it's not already there. {{{
+     1
+     let style_start = search('^<style type="text/css">')
+     1
+@@ -151,22 +459,27 @@
+ 	  let insert_index += 1
+ 	endif
+       endfor
+-    endif
++    endif " }}}
+ 
++    " everything new will get added before the diff styles so diff highlight
++    " properly overrides normal highlight
+     if diff_style_start != 0
+       let insert_index = diff_style_start
+     endif
+ 
+-    " Delete those parts that are not needed so
+-    " we can include the rest into the resulting table
+-    1,/^<body/d_
++    " Delete those parts that are not needed so we can include the rest into the
++    " resulting table.
++    1,/^<body.*\%(\n<!--.*-->\_s\+.*id='oneCharWidth'.*\_s\+.*id='oneInputWidth'.*\_s\+.*id='oneEmWidth'\)\?\zs/d_
+     $
+     ?</body>?,$d_
+     let temp = getline(1,'$')
++    " clean out id on the main content container because we already set it on
++    " the table
++    let temp[0] = substitute(temp[0], " id='vimCodeElement'", "", "")
+     " undo deletion of start and end part
+     " so we can later save the file as valid html
+     " TODO: restore using grabbed lines if undolevel is 1?
+-    normal 2u
++    normal! 2u
+     if s:settings.use_css
+       call add(html, '<td valign="top"><div>')
+     elseif s:settings.use_xhtml
+@@ -190,6 +503,11 @@
+   call add(html, s:body_end_line)
+   call add(html, '</html>')
+ 
++  " The generated HTML is admittedly ugly and takes a LONG time to fold.
++  " Make sure the user doesn't do syntax folding when loading a generated file,
++  " using a modeline.
++  call add(html, '<!-- vim: set foldmethod=manual : -->')
++
+   let i = 1
+   let name = "Diff" . (s:settings.use_xhtml ? ".xhtml" : ".html")
+   " Find an unused file name if current file name is already in use
+@@ -203,18 +521,114 @@
+   " just in case some user autocmd creates content in the new buffer, make sure
+   " it is empty before proceeding
+   %d
++
++  " set the fileencoding to match the charset we'll be using
++  let &l:fileencoding=s:settings.vim_encoding
++
++  " According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte
++  " order mark is highly recommend on the web when using multibyte encodings. But,
++  " it is not a good idea to include it on UTF-8 files. Otherwise, let Vim
++  " determine when it is actually inserted.
++  if s:settings.vim_encoding == 'utf-8'
++    setlocal nobomb
++  else
++    setlocal bomb
++  endif
++
+   call append(0, html)
+ 
+   if len(style) > 0
+     1
+     let style_start = search('^</head>')-1
+ 
++    " add required javascript in reverse order so we can just call append again
++    " and again without adjusting {{{
++
++    " insert script closing tag
++    call append(style_start, [
++	  \ '',
++	  \ s:settings.use_xhtml ? '//]]>' : '-->',
++	  \ "</script>"
++	  \ ])
++
++    " insert script which corrects the size of small input elements in
++    " prevent_copy mode. See 2html.vim for details on why this is needed and how
++    " it works.
++    if !empty(s:settings.prevent_copy)
++      call append(style_start, [
++	    \ '',
++	    \ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
++	    \ 'function FixCharWidth() {',
++	    \ '  /* get the hidden element which gives the width of a single character */',
++	    \ '  var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
++	    \ '  /* get all input elements, we''ll filter on class later */',
++	    \ '  var inputTags = document.getElementsByTagName("input");',
++	    \ '  var ratio = 5;',
++	    \ '  var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
++	    \ '  var emWidth = document.getElementById("oneEmWidth").clientWidth;',
++	    \ '  if (inputWidth > goodWidth) {',
++	    \ '    while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
++	    \ '    ratio += 5;',
++	    \ '  }',
++	    \ '  document.getElementById("vimCodeElement").className = "em"+ratio;',
++	    \ '  }',
++	    \ '}'
++	    \ ])
++    endif
++    "
++    " insert javascript to get IDs from line numbers, and to open a fold before
++    " jumping to any lines contained therein
++    call append(style_start, [
++	  \ "  /* Always jump to new location even if the line was hidden inside a fold, or",
++	  \ "   * we corrected the raw number to a line ID.",
++	  \ "   */",
++	  \ "  if (lineElem) {",
++	  \ "    lineElem.scrollIntoView(true);",
++	  \ "  }",
++	  \ "  return true;",
++	  \ "}",
++	  \ "if ('onhashchange' in window) {",
++	  \ "  window.onhashchange = JumpToLine;",
++	  \ "}"
++	  \ ])
++    if s:settings.dynamic_folds
++      call append(style_start, [
++	    \ "",
++	    \ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
++	    \ "  var node = lineElem;",
++	    \ "  while (node && node.id != 'vimCodeElement')",
++	    \ "  {",
++	    \ "    if (node.className == 'closed-fold')",
++	    \ "    {",
++	    \ "      /* toggle open the fold ID (remove window ID) */",
++	    \ "      toggleFold(node.id.substr(4));",
++	    \ "    }",
++	    \ "    node = node.parentNode;",
++	    \ "  }",
++	    \ ])
++    endif
++    call append(style_start, [
++	  \ "",
++	  \ "/* function to open any folds containing a jumped-to line before jumping to it */",
++	  \ "function JumpToLine()",
++	  \ "{",
++	  \ "  var lineNum;",
++	  \ "  lineNum = window.location.hash;",
++	  \ "  lineNum = lineNum.substr(1); /* strip off '#' */",
++	  \ "",
++	  \ "  if (lineNum.indexOf('L') == -1) {",
++	  \ "    lineNum = 'L'+lineNum;",
++	  \ "  }",
++	  \ "  if (lineNum.indexOf('W') == -1) {",
++	  \ "    lineNum = 'W1'+lineNum;",
++	  \ "  }",
++	  \ "  lineElem = document.getElementById(lineNum);"
++	  \ ])
++
+     " Insert javascript to toggle matching folds open and closed in all windows,
+     " if dynamic folding is active.
+     if s:settings.dynamic_folds
+       call append(style_start, [
+-	    \  "<script type='text/javascript'>",
+-	    \  s:settings.use_xhtml ? '//<![CDATA[' : "  <!--",
+ 	    \  "  function toggleFold(objID)",
+ 	    \  "  {",
+ 	    \  "    for (win_num = 1; win_num <= ".len(a:buf_list)."; win_num++)",
+@@ -231,16 +645,20 @@
+ 	    \  "      }",
+ 	    \  "    }",
+ 	    \  "  }",
+-	    \  s:settings.use_xhtml ? '//]]>' : "  -->",
+-	    \  "</script>"
+ 	    \ ])
+     endif
+ 
++    " insert script tag; javascript is always needed for the line number
++    " normalization for URL hashes
++    call append(style_start, [
++	  \ "<script type='text/javascript'>",
++	  \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
++
+     " Insert styles from all the generated html documents and additional styles
+     " for the table-based layout of the side-by-side diff. The diff should take
+     " up the full browser window (but not more), and be static in size,
+     " horizontally scrollable when the lines are too long. Otherwise, the diff
+-    " is pretty useless for really long lines.
++    " is pretty useless for really long lines. {{{
+     if s:settings.use_css
+       call append(style_start,
+ 	    \ ['<style type="text/css">']+
+@@ -252,28 +670,28 @@
+ 	    \   'td div { overflow: auto; }',
+ 	    \   s:settings.use_xhtml ? '' : '-->',
+ 	    \   '</style>'
+-	    \ ])
+-    endif
++	    \])
++    endif "}}}
+   endif
+ 
+   let &paste = s:old_paste
+   let &magic = s:old_magic
+-endfunc
++endfunc "}}}
+ 
+ " Gets a single user option and sets it in the passed-in Dict, or gives it the
+ " default value if the option doesn't actually exist.
+-func! tohtml#GetOption(settings, option, default)
++func! tohtml#GetOption(settings, option, default) "{{{
+   if exists('g:html_'.a:option)
+     let a:settings[a:option] = g:html_{a:option}
+   else
+     let a:settings[a:option] = a:default
+   endif
+-endfunc
++endfunc "}}}
+ 
+ " returns a Dict containing the values of all user options for 2html, including
+ " default values for those not given an explicit value by the user. Discards the
+ " html_ prefix of the option for nicer looking code.
+-func! tohtml#GetUserSettings()
++func! tohtml#GetUserSettings() "{{{
+   if exists('s:settings')
+     " just restore the known options if we've already retrieved them
+     return s:settings
+@@ -289,21 +707,24 @@
+       let g:html_use_xhtml = g:use_xhtml
+     endif
+ 
+-    " get current option settings with appropriate defaults
+-    call tohtml#GetOption(user_settings,    'no_progress',  !has("statusline") )
+-    call tohtml#GetOption(user_settings,  'diff_one_file',  0 )
+-    call tohtml#GetOption(user_settings,   'number_lines',  &number )
+-    call tohtml#GetOption(user_settings,        'use_css',  1 )
+-    call tohtml#GetOption(user_settings, 'ignore_conceal',  0 )
+-    call tohtml#GetOption(user_settings, 'ignore_folding',  0 )
+-    call tohtml#GetOption(user_settings,  'dynamic_folds',  0 )
+-    call tohtml#GetOption(user_settings,  'no_foldcolumn',  0 )
+-    call tohtml#GetOption(user_settings,   'hover_unfold',  0 )
+-    call tohtml#GetOption(user_settings,         'no_pre',  0 )
+-    call tohtml#GetOption(user_settings,   'whole_filler',  0 )
+-    call tohtml#GetOption(user_settings,      'use_xhtml',  0 )
++    " get current option settings with appropriate defaults {{{
++    call tohtml#GetOption(user_settings,    'no_progress', !has("statusline") )
++    call tohtml#GetOption(user_settings,  'diff_one_file', 0 )
++    call tohtml#GetOption(user_settings,   'number_lines', &number )
++    call tohtml#GetOption(user_settings,       'pre_wrap', &wrap )
++    call tohtml#GetOption(user_settings,        'use_css', 1 )
++    call tohtml#GetOption(user_settings, 'ignore_conceal', 0 )
++    call tohtml#GetOption(user_settings, 'ignore_folding', 0 )
++    call tohtml#GetOption(user_settings,  'dynamic_folds', 0 )
++    call tohtml#GetOption(user_settings,  'no_foldcolumn', user_settings.ignore_folding)
++    call tohtml#GetOption(user_settings,   'hover_unfold', 0 )
++    call tohtml#GetOption(user_settings,         'no_pre', 0 )
++    call tohtml#GetOption(user_settings,     'no_invalid', 0 )
++    call tohtml#GetOption(user_settings,   'whole_filler', 0 )
++    call tohtml#GetOption(user_settings,      'use_xhtml', 0 )
++    " }}}
+     
+-    " override those settings that need it
++    " override those settings that need it {{{
+ 
+     " hover opening implies dynamic folding
+     if user_settings.hover_unfold
+@@ -324,6 +745,8 @@
+     " dynamic folding implies css
+     if user_settings.dynamic_folds
+       let user_settings.use_css = 1
++    else
++      let user_settings.no_foldcolumn = 1 " won't do anything but for consistency and for the test suite
+     endif
+ 
+     " if we're not using CSS we cannot use a pre section because <font> tags
+@@ -332,47 +755,154 @@
+       let user_settings.no_pre = 1
+     endif
+ 
+-    " Figure out proper MIME charset from the 'encoding' option.
+-    if exists("g:html_use_encoding")
++    " pre_wrap doesn't do anything if not using pre or not using CSS
++    if user_settings.no_pre || !user_settings.use_css
++      let user_settings.pre_wrap=0
++    endif
++    "}}}
++
++    " set up expand_tabs option after all the overrides so we know the
++    " appropriate defaults {{{
++    if user_settings.no_pre == 0
++      call tohtml#GetOption(user_settings,
++	    \ 'expand_tabs',
++	    \ &expandtab || &ts != 8 || user_settings.number_lines ||
++	    \   (user_settings.dynamic_folds && !user_settings.no_foldcolumn))
++    else
++      let user_settings.expand_tabs = 1
++    endif
++    " }}}
++
++    " textual options
++    if exists("g:html_use_encoding") "{{{
++      " user specified the desired MIME charset, figure out proper
++      " 'fileencoding' from it or warn the user if we cannot
+       let user_settings.encoding = g:html_use_encoding
++      let user_settings.vim_encoding = tohtml#EncodingFromCharset(g:html_use_encoding)
++      if user_settings.vim_encoding == ''
++	echohl WarningMsg
++	echomsg "TOhtml: file encoding for"
++	      \ g:html_use_encoding
++	      \ "unknown, please set 'fileencoding'"
++	echohl None
++      endif
+     else
+-      let vim_encoding = &encoding
+-      if vim_encoding =~ '^8bit\|^2byte'
+-	let vim_encoding = substitute(vim_encoding, '^8bit-\|^2byte-', '', '')
++      " Figure out proper MIME charset from 'fileencoding' if possible
++      if &l:fileencoding != '' 
++	" If the buffer is not a "normal" type, the 'fileencoding' value may not
++	" be trusted; since the buffer should not be written the fileencoding is
++	" not intended to be used.
++	if &l:buftype=='' || &l:buftype==?'help'
++	  let user_settings.vim_encoding = &l:fileencoding
++	  call tohtml#CharsetFromEncoding(user_settings)
++	else
++	  let user_settings.encoding = '' " trigger detection using &encoding
++	endif
+       endif
+-      if vim_encoding == 'latin1'
+-	let user_settings.encoding = 'iso-8859-1'
+-      elseif vim_encoding =~ "^cp12"
+-	let user_settings.encoding = substitute(vim_encoding, 'cp', 'windows-', '')
+-      elseif vim_encoding == 'sjis' || vim_encoding == 'cp932'
+-	let user_settings.encoding = 'Shift_JIS'
+-      elseif vim_encoding == 'big5' || vim_encoding == 'cp950'
+-	let user_settings.encoding = "Big5"
+-      elseif vim_encoding == 'euc-cn'
+-	let user_settings.encoding = 'GB_2312-80'
+-      elseif vim_encoding == 'euc-tw'
+-	let user_settings.encoding = ""
+-      elseif vim_encoding =~ '^euc\|^iso\|^koi'
+-	let user_settings.encoding = substitute(vim_encoding, '.*', '\U\0', '')
+-      elseif vim_encoding == 'cp949'
+-	let user_settings.encoding = 'KS_C_5601-1987'
+-      elseif vim_encoding == 'cp936'
+-	let user_settings.encoding = 'GBK'
+-      elseif vim_encoding =~ '^ucs\|^utf'
++
++      " else from 'encoding' if possible
++      if &l:fileencoding == '' || user_settings.encoding == ''
++	let user_settings.vim_encoding = &encoding
++	call tohtml#CharsetFromEncoding(user_settings)
++      endif
++
++      " else default to UTF-8 and warn user
++      if user_settings.encoding == ''
++	let user_settings.vim_encoding = 'utf-8'
+ 	let user_settings.encoding = 'UTF-8'
++	echohl WarningMsg
++	echomsg "TOhtml: couldn't determine MIME charset, using UTF-8"
++	echohl None
++      endif
++    endif "}}}
++
++    " Default to making nothing uncopyable, because we default to
++    " not-standards way of doing things, and also because Microsoft Word and
++    " others paste the <input> elements anyway.
++    "
++    " html_prevent_copy only has an effect when using CSS.
++    "
++    " All options:
++    "	  f - fold column
++    "	  n - line numbers (also within fold text)
++    "	  t - fold text
++    "	  d - diff filler
++    "	  c - concealed text (reserved future)
++    "	  l - listchars (reserved possible future)
++    "	  s - signs (reserved possible future)
++    "
++    " Normal text is always selectable.
++    let user_settings.prevent_copy = ""
++    if user_settings.use_css
++      if exists("g:html_prevent_copy")
++	if user_settings.dynamic_folds && !user_settings.no_foldcolumn && g:html_prevent_copy =~# 'f'
++	  let user_settings.prevent_copy .= 'f'
++	endif
++	if user_settings.number_lines && g:html_prevent_copy =~# 'n'
++	  let user_settings.prevent_copy .= 'n'
++	endif
++	if &diff && g:html_prevent_copy =~# 'd'
++	  let user_settings.prevent_copy .= 'd'
++	endif
++	if !user_settings.ignore_folding && g:html_prevent_copy =~# 't'
++	  let user_settings.prevent_copy .= 't'
++	endif
+       else
+-	let user_settings.encoding = ""
++	let user_settings.prevent_copy = ""
+       endif
+     endif
++    if empty(user_settings.prevent_copy)
++      let user_settings.no_invalid = 0
++    endif
+ 
+     " TODO: font
+ 
+     return user_settings
+   endif
+-endfunc
++endfunc "}}}
++
++" get the proper HTML charset name from a Vim encoding option.
++function! tohtml#CharsetFromEncoding(settings) "{{{
++  let l:vim_encoding = a:settings.vim_encoding
++  if exists('g:html_charset_override') && has_key(g:html_charset_override, l:vim_encoding)
++    let a:settings.encoding = g:html_charset_override[l:vim_encoding]
++  else
++    if l:vim_encoding =~ '^8bit\|^2byte'
++      " 8bit- and 2byte- prefixes are to indicate encodings available on the
++      " system that Vim will convert with iconv(), look up just the encoding name,
++      " not Vim's prefix.
++      let l:vim_encoding = substitute(l:vim_encoding, '^8bit-\|^2byte-', '', '')
++    endif
++    if has_key(g:tohtml#encoding_to_charset, l:vim_encoding)
++      let a:settings.encoding = g:tohtml#encoding_to_charset[l:vim_encoding]
++    else
++      let a:settings.encoding = ""
++    endif
++  endif
++  if a:settings.encoding != ""
++    let l:vim_encoding = tohtml#EncodingFromCharset(a:settings.encoding)
++    if l:vim_encoding != ""
++      " if the Vim encoding to HTML encoding conversion is set up (by default or
++      " by the user) to convert to a different encoding, we need to also change
++      " the Vim encoding of the new buffer
++      let a:settings.vim_encoding = l:vim_encoding
++    endif
++  endif
++endfun "}}}
++
++" Get the proper Vim encoding option setting from an HTML charset name.
++function! tohtml#EncodingFromCharset(encoding) "{{{
++  if exists('g:html_encoding_override') && has_key(g:html_encoding_override, a:encoding)
++    return g:html_encoding_override[a:encoding]
++  elseif has_key(g:tohtml#charset_to_encoding, tolower(a:encoding))
++    return g:tohtml#charset_to_encoding[tolower(a:encoding)]
++  else
++    return ""
++  endif
++endfun "}}}
+ 
+ let &cpo = s:cpo_sav
+ unlet s:cpo_sav
+ 
+ " Make sure any patches will probably use consistent indent
+-"   vim: ts=8 sw=2 sts=2 noet
++"   vim: ts=8 sw=2 sts=2 noet fdm=marker
+diff -Naur vim73.orig/runtime/autoload/vimball.vim vim73/runtime/autoload/vimball.vim
+--- vim73.orig/runtime/autoload/vimball.vim	2010-05-15 11:03:30.000000000 +0000
++++ vim73/runtime/autoload/vimball.vim	2013-06-07 17:07:06.945655506 +0000
+@@ -1,9 +1,9 @@
+ " vimball.vim : construct a file containing both paths and files
+ " Author:	Charles E. Campbell, Jr.
+-" Date:		Apr 12, 2010
+-" Version:	31
++" Date:		Jan 17, 2012
++" Version:	35
+ " GetLatestVimScripts: 1502 1 :AutoInstall: vimball.vim
+-" Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.
++" Copyright: (c) 2004-2011 by Charles E. Campbell, Jr.
+ "            The VIM LICENSE applies to Vimball.vim, and Vimball.txt
+ "            (see |copyright|) except use "Vimball" instead of "Vim".
+ "            No warranty, express or implied.
+@@ -14,7 +14,7 @@
+ if &cp || exists("g:loaded_vimball")
+  finish
+ endif
+-let g:loaded_vimball = "v31"
++let g:loaded_vimball = "v35"
+ if v:version < 702
+  echohl WarningMsg
+  echo "***warning*** this version of vimball needs vim 7.2"
+@@ -67,10 +67,10 @@
+ " vimball#MkVimball: creates a vimball given a list of paths to files {{{2
+ " Input:
+ "     line1,line2: a range of lines containing paths to files to be included in the vimball
+-"     writelevel : if true, force a write to filename.vba, even if it exists
++"     writelevel : if true, force a write to filename.vmb, even if it exists
+ "                  (usually accomplished with :MkVimball! ...
+-"     filename   : base name of file to be created (ie. filename.vba)
+-" Output: a filename.vba using vimball format:
++"     filename   : base name of file to be created (ie. filename.vmb)
++" Output: a filename.vmb using vimball format:
+ "     path
+ "     filesize
+ "     [file]
+@@ -80,12 +80,12 @@
+ fun! vimball#MkVimball(line1,line2,writelevel,...) range
+ "  call Dfunc("MkVimball(line1=".a:line1." line2=".a:line2." writelevel=".a:writelevel." vimballname<".a:1.">) a:0=".a:0)
+   if a:1 =~ '\.vim$' || a:1 =~ '\.txt$'
+-   let vbname= substitute(a:1,'\.\a\{3}$','.vba','')
++   let vbname= substitute(a:1,'\.\a\{3}$','.vmb','')
+   else
+    let vbname= a:1
+   endif
+-  if vbname !~ '\.vba$'
+-   let vbname= vbname.'.vba'
++  if vbname !~ '\.vmb$'
++   let vbname= vbname.'.vmb'
+   endif
+ "  call Decho("vbname<".vbname.">")
+   if !a:writelevel && a:1 =~ '[\/]'
+@@ -134,7 +134,7 @@
+    " create/switch to mkvimball tab
+    if !exists("vbtabnr")
+     tabnew
+-    silent! file Vimball
++    sil! file Vimball
+     let vbtabnr= tabpagenr()
+    else
+     exe "tabn ".vbtabnr
+@@ -195,8 +195,8 @@
+ "  call Dfunc("vimball#Vimball(really=".a:really.") a:0=".a:0)
+ 
+   if v:version < 701 || (v:version == 701 && !exists('*fnameescape'))
+-   echoerr "your vim is missing the fnameescape() function"
+-"   call Dret("vimball#Vimball : needs 7.1 with patch 299")
++   echoerr "your vim is missing the fnameescape() function (pls upgrade to vim 7.2 or later)"
++"   call Dret("vimball#Vimball : needs 7.1 with patch 299 or later")
+    return
+   endif
+ 
+@@ -214,13 +214,22 @@
+   " set up vimball tab
+ "  call Decho("setting up vimball tab")
+   tabnew
+-  silent! file Vimball
++  sil! file Vimball
+   let vbtabnr= tabpagenr()
+   let didhelp= ""
+ 
+   " go to vim plugin home
+   if a:0 > 0
++   " let user specify the directory where the vimball is to be unpacked.
++   " If, however, the user did not specify a full path, set the home to be below the current directory
+    let home= expand(a:1)
++   if has("win32") || has("win95") || has("win64") || has("win16")
++	if home !~ '^\a:[/\\]'
++	 let home= getcwd().'/'.a:1
++	endif
++   elseif home !~ '^/'
++	let home= getcwd().'/'.a:1
++   endif
+   else
+    let home= vimball#VimballHome()
+   endif
+@@ -254,11 +263,10 @@
+   while 1 < linenr && linenr < line("$")
+    let fname   = substitute(getline(linenr),'\t\[\[\[1$','','')
+    let fname   = substitute(fname,'\\','/','g')
+-"   let fsize   = getline(linenr+1)+0
+    let fsize   = substitute(getline(linenr+1),'^\(\d\+\).\{-}$','\1','')+0
+-   let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\+\)$','\1','')
++   let fenc    = substitute(getline(linenr+1),'^\d\+\s*\(\S\{-}\)$','\1','')
+    let filecnt = filecnt + 1
+-"   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt)
++"   call Decho("fname<".fname."> fsize=".fsize." filecnt=".filecnt. " fenc=".fenc)
+ 
+    if a:really
+     echomsg "extracted <".fname.">: ".fsize." lines"
+@@ -283,11 +291,14 @@
+ "    call Decho("making directories if they don't exist yet (fname<".fname.">)")
+     let fnamebuf= substitute(fname,'\\','/','g')
+ 	let dirpath = substitute(home,'\\','/','g')
++"	call Decho("init: fnamebuf<".fnamebuf.">")
++"	call Decho("init: dirpath <".dirpath.">")
+     while fnamebuf =~ '/'
+      let dirname  = dirpath."/".substitute(fnamebuf,'/.*$','','')
+ 	 let dirpath  = dirname
+      let fnamebuf = substitute(fnamebuf,'^.\{-}/\(.*\)$','\1','')
+ "	 call Decho("dirname<".dirname.">")
++"	 call Decho("dirpath<".dirpath.">")
+      if !isdirectory(dirname)
+ "      call Decho("making <".dirname.">")
+       if exists("g:vimball_mkdir")
+@@ -306,20 +317,22 @@
+    let linenr   = linenr + 2
+    let lastline = linenr + fsize - 1
+ "   call Decho("exe ".linenr.",".lastline."yank a")
+-   exe "silent ".linenr.",".lastline."yank a"
++   " no point in handling a zero-length file
++   if lastline >= linenr
++    exe "silent ".linenr.",".lastline."yank a"
+ 
+-   " copy "a" buffer into tab
++    " copy "a" buffer into tab
+ "   call Decho('copy "a buffer into tab#'.vbtabnr)
+-   exe "tabn ".vbtabnr
+-   setlocal ma
+-   silent! %d
+-   silent put a
+-   1
+-   silent d
+-
+-   " write tab to file
+-   if a:really
+-    let fnamepath= home."/".fname
++    exe "tabn ".vbtabnr
++    setlocal ma
++    sil! %d
++    silent put a
++    1
++    sil! d
++
++    " write tab to file
++    if a:really
++     let fnamepath= home."/".fname
+ "    call Decho("exe w! ".fnameescape(fnamepath))
+ 	if fenc != ""
+ 	 exe "silent w! ++enc=".fnameescape(fenc)." ".fnameescape(fnamepath)
+@@ -328,17 +341,18 @@
+ 	endif
+ 	echo "wrote ".fnameescape(fnamepath)
+ 	call s:RecordInVar(home,"call delete('".fnamepath."')")
+-   endif
++    endif
+ 
+-   " return to tab with vimball
++    " return to tab with vimball
+ "   call Decho("exe tabn ".curtabnr)
+-   exe "tabn ".curtabnr
++    exe "tabn ".curtabnr
+ 
+-   " set up help if its a doc/*.txt file
++    " set up help if its a doc/*.txt file
+ "   call Decho("didhelp<".didhelp."> fname<".fname.">")
+-   if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
+-   	let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
++    if a:really && didhelp == "" && fname =~ 'doc/[^/]\+\.\(txt\|..x\)$'
++    	let didhelp= substitute(fname,'^\(.*\<doc\)[/\\][^.]*\.\(txt\|..x\)$','\1','')
+ "	call Decho("didhelp<".didhelp.">")
++    endif
+    endif
+ 
+    " update for next file
+@@ -400,7 +414,9 @@
+    let curfile= a:1
+ "   call Decho("case a:0=".a:0.": curfile<".curfile.">")
+   endif
+-  if curfile =~ '\.vba$'
++  if curfile =~ '\.vmb$'
++   let curfile= substitute(curfile,'\.vmb','','')
++  elseif curfile =~ '\.vba$'
+    let curfile= substitute(curfile,'\.vba','','')
+   endif
+   if a:0 >= 2
+@@ -418,13 +434,17 @@
+ "   call Decho(".VimballRecord is readable")
+ "   call Decho("curfile<".curfile.">")
+    keepalt keepjumps 1split 
+-   silent! keepalt keepjumps e .VimballRecord
++   sil! keepalt keepjumps e .VimballRecord
+    let keepsrch= @/
+ "   call Decho('search for ^\M'.curfile.'.\m: ')
+-"   call Decho('search for ^\M'.curfile.'.\mvba: ')
+-"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.vba: ')
++"   call Decho('search for ^\M'.curfile.'.\m{vba|vmb}: ')
++"   call Decho('search for ^\M'.curfile.'\m[-0-9.]*\.{vba|vmb}: ')
+    if search('^\M'.curfile."\m: ".'cw')
+ 	let foundit= 1
++   elseif search('^\M'.curfile.".\mvmb: ",'cw')
++	let foundit= 2
++   elseif search('^\M'.curfile.'\m[-0-9.]*\.vmb: ','cw')
++	let foundit= 2
+    elseif search('^\M'.curfile.".\mvba: ",'cw')
+ 	let foundit= 1
+    elseif search('^\M'.curfile.'\m[-0-9.]*\.vba: ','cw')
+@@ -433,25 +453,29 @@
+     let foundit = 0
+    endif
+    if foundit
+-	let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
++	if foundit == 1
++	 let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vba: ','','')
++	else
++	 let exestring  = substitute(getline("."),'^\M'.curfile.'\m\S\{-}\.vmb: ','','')
++	endif
+     let s:VBRstring= substitute(exestring,'call delete(','','g')
+     let s:VBRstring= substitute(s:VBRstring,"[')]",'','g')
+ "	call Decho("exe ".exestring)
+-	silent! keepalt keepjumps exe exestring
+-	silent! keepalt keepjumps d
++	sil! keepalt keepjumps exe exestring
++	sil! keepalt keepjumps d
+ 	let exestring= strlen(substitute(exestring,'call delete(.\{-})|\=',"D","g"))
+ "	call Decho("exestring<".exestring.">")
+ 	echomsg "removed ".exestring." files"
+    else
+     let s:VBRstring= ''
+-	let curfile    = substitute(curfile,'\.vba','','')
++	let curfile    = substitute(curfile,'\.vmb','','')
+ "    call Decho("unable to find <".curfile."> in .VimballRecord")
+ 	if !exists("s:ok_unablefind")
+      call vimball#ShowMesg(s:WARNING,"(RmVimball) unable to find <".curfile."> in .VimballRecord")
+ 	endif
+    endif
+-   silent! keepalt keepjumps g/^\s*$/d
+-   silent! keepalt keepjumps wq!
++   sil! keepalt keepjumps g/^\s*$/d
++   sil! keepalt keepjumps wq!
+    let @/= keepsrch
+   endif
+   call s:ChgDir(curdir)
+@@ -557,9 +581,19 @@
+ fun! s:ChgDir(newdir)
+ "  call Dfunc("ChgDir(newdir<".a:newdir.">)")
+   if (has("win32") || has("win95") || has("win64") || has("win16"))
+-   exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
+-  else
+-   exe 'silent cd '.fnameescape(a:newdir)
++   try
++    exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
++   catch  /^Vim\%((\a\+)\)\=:E/
++    call mkdir(fnameescape(substitute(a:newdir,'/','\\','g')))
++    exe 'silent cd '.fnameescape(substitute(a:newdir,'/','\\','g'))
++   endtry
++  else
++   try
++    exe 'silent cd '.fnameescape(a:newdir)
++   catch  /^Vim\%((\a\+)\)\=:E/
++    call mkdir(fnameescape(a:newdir))
++    exe 'silent cd '.fnameescape(a:newdir)
++   endtry
+   endif
+ "  call Dret("ChgDir : curdir<".getcwd().">")
+ endfun
+@@ -599,7 +633,7 @@
+    let cmd= expand("%:tr").": "
+ "   call Decho("cmd<".cmd.">")
+ 
+-   silent! keepalt keepjumps e .VimballRecord
++   sil! keepalt keepjumps e .VimballRecord
+    setlocal ma
+    $
+    if exists("s:recordfile") && exists("s:recorddir")
+@@ -616,8 +650,8 @@
+ 
+    " put command into buffer, write .VimballRecord `file
+    keepalt keepjumps put=cmd
+-   silent! keepalt keepjumps g/^\s*$/d
+-   silent! keepalt keepjumps wq!
++   sil! keepalt keepjumps g/^\s*$/d
++   sil! keepalt keepjumps wq!
+    call s:ChgDir(curdir)
+ 
+    if exists("s:recorddir")
+@@ -693,10 +727,11 @@
+   let s:repkeep = &report
+   let s:vekeep  = &ve
+   let s:ffkeep  = &l:ff
++  let s:swfkeep = &l:swf
+   if exists("&acd")
+-   setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix
++   setlocal ei=all ve=all noacd nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
+   else
+-   setlocal ei=all ve=all       nofen noic report=999 nohid bt= ma lz pm= ff=unix
++   setlocal ei=all ve=all       nofen noic report=999 nohid bt= ma lz pm= ff=unix noswf
+   endif
+   " vimballs should be in unix format
+   setlocal ff=unix
+@@ -732,6 +767,9 @@
+ "  call Dret("RestoreSettings")
+ endfun
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " ---------------------------------------------------------------------
+ " Modelines: {{{1
+ " vim: fdm=marker
+diff -Naur vim73.orig/runtime/autoload/zip.vim vim73/runtime/autoload/zip.vim
+--- vim73.orig/runtime/autoload/zip.vim	2010-05-15 11:03:30.000000000 +0000
++++ vim73/runtime/autoload/zip.vim	2013-06-07 17:07:07.148988259 +0000
+@@ -1,10 +1,10 @@
+ " zip.vim: Handles browsing zipfiles
+ "            AUTOLOAD PORTION
+-" Date:		Apr 12, 2010
+-" Version:	23
+-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
++" Date:		Apr 17, 2013
++" Version:	26
++" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+ " License:	Vim License  (see vim's :help license)
+-" Copyright:    Copyright (C) 2005-2008 Charles E. Campbell, Jr. {{{1
++" Copyright:    Copyright (C) 2005-2012 Charles E. Campbell {{{1
+ "               Permission is hereby granted to use and distribute this code,
+ "               with or without modifications, provided that this copyright
+ "               notice is copied with it. Like anything else that's free,
+@@ -19,7 +19,7 @@
+ if &cp || exists("g:loaded_zip")
+  finish
+ endif
+-let g:loaded_zip= "v23"
++let g:loaded_zip= "v26"
+ if v:version < 702
+  echohl WarningMsg
+  echo "***warning*** this version of zip needs vim 7.2"
+@@ -103,38 +103,26 @@
+   set ft=tar
+ 
+   " give header
+-  let lastline= line("$")
+-  call setline(lastline+1,'" zip.vim version '.g:loaded_zip)
+-  call setline(lastline+2,'" Browsing zipfile '.a:zipfile)
+-  call setline(lastline+3,'" Select a file with cursor and press ENTER')
+-  $put =''
+-  0d
+-  $
++  call append(0, ['" zip.vim version '.g:loaded_zip,
++ \                '" Browsing zipfile '.a:zipfile,
++ \                '" Select a file with cursor and press ENTER'])
++  keepj $
+ 
+ "  call Decho("exe silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1))
+-  exe "silent r! ".g:zip_unzipcmd." -l -- ".s:Escape(a:zipfile,1)
++  exe "keepj sil! r! ".g:zip_unzipcmd." -Z -1 -- ".s:Escape(a:zipfile,1)
+   if v:shell_error != 0
+    redraw!
+    echohl WarningMsg | echo "***warning*** (zip#Browse) ".fnameescape(a:zipfile)." is not a zip file" | echohl None
+ "   call inputsave()|call input("Press <cr> to continue")|call inputrestore()
+-   silent %d
++   keepj sil! %d
+    let eikeep= &ei
+    set ei=BufReadCmd,FileReadCmd
+-   exe "r ".fnameescape(a:zipfile)
++   exe "keepj r ".fnameescape(a:zipfile)
+    let &ei= eikeep
+-   1d
++   keepj 1d
+ "   call Dret("zip#Browse")
+    return
+   endif
+-"  call Decho("line 6: ".getline(6))
+-  let namecol= stridx(getline(6),'Name') + 1
+-"  call Decho("namecol=".namecol)
+-  4,$g/^\s*----/d
+-  4,$g/^\s*\a/d
+-  $d
+-  if namecol > 0
+-   exe 'silent 4,$s/^.*\%'.namecol.'c//'
+-  endif
+ 
+   setlocal noma nomod ro
+   noremap <silent> <buffer> <cr> :call <SID>ZipBrowseSelect()<cr>
+@@ -200,16 +188,27 @@
+   else
+    let zipfile = substitute(a:fname,'^.\{-}zipfile:\(.\{-}\)::[^\\].*$','\1','')
+    let fname   = substitute(a:fname,'^.\{-}zipfile:.\{-}::\([^\\].*\)$','\1','')
+-   let fname = substitute(fname, '[', '[[]', 'g')
++   let fname   = substitute(fname, '[', '[[]', 'g')
+   endif
+ "  call Decho("zipfile<".zipfile.">")
+ "  call Decho("fname  <".fname.">")
+ 
+-"  call Decho("exe r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1))
+-  exe "silent r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fname,1)
++  " the following code does much the same thing as
++  "   exe "keepj sil! r! ".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1)
++  " but allows zipfile:... entries in quickfix lists
++  let temp = tempname()
++  let fn   = expand('%:p')
++  exe "sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp
++"  call Decho("exe sil! !".g:zip_unzipcmd." -p -- ".s:Escape(zipfile,1)." ".s:Escape(fnameescape(fname),1).' > '.temp)
++  sil exe 'keepalt file '.temp
++  sil keepj e!
++  sil exe 'keepalt file '.fnameescape(fn)
++  call delete(temp)
++
++  filetype detect
+ 
+   " cleanup
+-  0d
++  keepj 0d
+   set nomod
+ 
+   let &report= repkeep
+@@ -278,7 +277,7 @@
+ 
+   if fname =~ '/'
+    let dirpath = substitute(fname,'/[^/]\+$','','e')
+-   if executable("cygpath")
++   if has("win32unix") && executable("cygpath")
+     let dirpath = substitute(system("cygpath ".s:Escape(dirpath,0)),'\n','','e')
+    endif
+ "   call Decho("mkdir(dirpath<".dirpath.">,p)")
+@@ -290,7 +289,7 @@
+ "  call Decho("zipfile<".zipfile."> fname<".fname.">")
+ 
+   exe "w! ".fnameescape(fname)
+-  if executable("cygpath")
++  if has("win32unix") && executable("cygpath")
+    let zipfile = substitute(system("cygpath ".s:Escape(zipfile,0)),'\n','','e')
+   endif
+ 
+diff -Naur vim73.orig/runtime/colors/koehler.vim vim73/runtime/colors/koehler.vim
+--- vim73.orig/runtime/colors/koehler.vim	2010-05-15 11:03:31.000000000 +0000
++++ vim73/runtime/colors/koehler.vim	2013-06-07 17:07:07.305654478 +0000
+@@ -2,7 +2,7 @@
+ " vim: tw=0 ts=4 sw=4
+ " Vim color file
+ " Maintainer:	Ron Aaron <ron@ronware.org>
+-" Last Change:	2006 Dec 10
++" Last Change:	2013 May 23
+ 
+ hi clear
+ set background=dark
+@@ -43,6 +43,8 @@
+ hi TabLine		  term=bold,reverse  cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
+ hi TabLineFill	  term=bold,reverse  cterm=bold ctermfg=lightblue ctermbg=white gui=bold guifg=blue guibg=white
+ hi TabLineSel	  term=reverse	ctermfg=white ctermbg=lightblue guifg=white guibg=blue
++hi Underlined	  term=underline cterm=bold,underline ctermfg=lightblue guifg=lightblue gui=bold,underline
++hi Ignore		  ctermfg=black ctermbg=black guifg=black guibg=black
+ hi link IncSearch		Visual
+ hi link String			Constant
+ hi link Character		Constant
+diff -Naur vim73.orig/runtime/colors/ron.vim vim73/runtime/colors/ron.vim
+--- vim73.orig/runtime/colors/ron.vim	2010-05-15 11:03:31.000000000 +0000
++++ vim73/runtime/colors/ron.vim	2013-06-07 17:07:07.348987688 +0000
+@@ -2,7 +2,7 @@
+ " vim: tw=0 ts=4 sw=4
+ " Vim color file
+ " Maintainer:	Ron Aaron <ron@ronware.org>
+-" Last Change:	2003 May 02
++" Last Change:	2013 May 24
+ 
+ set background=dark
+ hi clear
+@@ -11,7 +11,7 @@
+ endif
+ let g:colors_name = "ron"
+ hi Normal		guifg=cyan	guibg=black
+-hi NonText		guifg=brown
++hi NonText		guifg=yellow guibg=#303030
+ hi comment		guifg=green
+ hi constant		guifg=cyan	gui=bold
+ hi identifier	guifg=cyan	gui=NONE
+@@ -24,10 +24,11 @@
+ hi Error		guibg=Red
+ hi Todo			guifg=Black	guibg=orange
+ hi Cursor		guibg=#60a060 guifg=#00ff00
+-hi Search		guibg=lightslateblue
++hi Search		guibg=darkgray guifg=black gui=bold 
+ hi IncSearch	gui=NONE guibg=steelblue
+ hi LineNr		guifg=darkgrey
+ hi title		guifg=darkgrey
++hi ShowMarksHL ctermfg=cyan ctermbg=lightblue cterm=bold guifg=yellow guibg=black  gui=bold
+ hi StatusLineNC	gui=NONE guifg=lightblue guibg=darkblue
+ hi StatusLine	gui=bold	guifg=cyan	guibg=blue
+ hi label		guifg=gold2
+@@ -41,3 +42,4 @@
+ hi Folded		guibg=gray30
+ hi FoldColumn	guibg=gray30 guifg=white
+ hi cIf0			guifg=gray
++hi diffOnly	guifg=red gui=bold
+diff -Naur vim73.orig/runtime/compiler/cs.vim vim73/runtime/compiler/cs.vim
+--- vim73.orig/runtime/compiler/cs.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/cs.vim	2013-06-07 17:07:07.458987374 +0000
+@@ -1,19 +1,26 @@
+ " Vim compiler file
+-" Compiler:	ms C#
+-" Maintainer:	Joseph H. Yao (hyao@sina.com)
+-" Last Change:	2004 Mar 27
++" Compiler:	Microsoft Visual Studio C#
++" Maintainer:	Zhou YiChao (broken.zhou@gmail.com)
++" Previous Maintainer:	Joseph H. Yao (hyao@sina.com)
++" Last Change:	2012 Apr 30
+ 
+ if exists("current_compiler")
+   finish
+ endif
+ let current_compiler = "cs"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+ endif
+ 
+-" default errorformat
+ CompilerSet errorformat&
++CompilerSet errorformat+=%f(%l\\,%v):\ %t%*[^:]:\ %m,
++            \%trror%*[^:]:\ %m,
++            \%tarning%*[^:]:\ %m
+ 
+-" default make
+ CompilerSet makeprg=csc\ %
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/decada.vim vim73/runtime/compiler/decada.vim
+--- vim73.orig/runtime/compiler/decada.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/decada.vim	2013-06-07 17:07:07.485653965 +0000
+@@ -15,11 +15,11 @@
+ "    Help Page: compiler-decada
+ "------------------------------------------------------------------------------
+ 
+-if (exists("current_compiler")	    &&
+-   \ current_compiler == "decada")  ||
+-   \ version < 700
++if (exists("current_compiler") && current_compiler == "decada") || version < 700
+    finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ let current_compiler = "decada"
+ 
+@@ -44,6 +44,9 @@
+ execute "CompilerSet makeprg="     . escape (g:decada.Make_Command, ' ')
+ execute "CompilerSet errorformat=" . escape (g:decada.Error_Format, ' ')
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ finish " 1}}}
+ 
+ "------------------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/compiler/erlang.vim vim73/runtime/compiler/erlang.vim
+--- vim73.orig/runtime/compiler/erlang.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/erlang.vim	2013-06-07 17:07:07.515653879 +0000
+@@ -0,0 +1,13 @@
++" Vim compiler file
++" Compiler:     Erlang
++" Maintainer:	Dmitry Vasiliev <dima at hlabs dot org>
++" Last Change:	2012-02-13
++
++if exists("current_compiler")
++  finish
++endif
++let current_compiler = "erlang"
++
++CompilerSet makeprg=erlc\ -Wall\ %
++
++CompilerSet errorformat=%f:%l:\ %m
+diff -Naur vim73.orig/runtime/compiler/g95.vim vim73/runtime/compiler/g95.vim
+--- vim73.orig/runtime/compiler/g95.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/g95.vim	2013-06-07 17:07:07.602320298 +0000
+@@ -0,0 +1,28 @@
++" Compiler: G95
++" Maintainer: H Xu <xuhdev@gmail.com>
++" Version: 0.1.3
++" Last Change: 2012 Apr 30
++" Homepage: http://www.vim.org/scripts/script.php?script_id=3492
++"           https://bitbucket.org/xuhdev/compiler-g95.vim
++" License: Same as Vim
++
++if exists('current_compiler')
++    finish
++endif
++let current_compiler = 'g95'
++let s:keepcpo= &cpo
++set cpo&vim
++
++if exists(":CompilerSet") != 2		" older Vim always used :setlocal
++  command -nargs=* CompilerSet setlocal <args>
++endif
++
++CompilerSet errorformat=
++            \%AIn\ file\ %f:%l,
++            \%-C%p1,
++            \%-Z%trror:\ %m,
++            \%-Z%tarning\ (%n):\ %m,
++            \%-C%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/gcc.vim vim73/runtime/compiler/gcc.vim
+--- vim73.orig/runtime/compiler/gcc.vim	2010-05-30 15:24:23.000000000 +0000
++++ vim73/runtime/compiler/gcc.vim	2013-06-07 17:07:07.618986917 +0000
+@@ -1,7 +1,7 @@
+ " Vim compiler file
+ " Compiler:         GNU C Compiler
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2010-05-30
++" Latest Revision:  2010-10-14
+ 
+ if exists("current_compiler")
+   finish
+@@ -9,7 +9,7 @@
+ let current_compiler = "gcc"
+ 
+ let s:cpo_save = &cpo
+-set cpo-=C
++set cpo&vim
+ 
+ CompilerSet errorformat=
+       \%*[^\"]\"%f\"%*\\D%l:%c:\ %m,
+@@ -18,10 +18,10 @@
+       \\"%f\"%*\\D%l:\ %m,
+       \%-G%f:%l:\ %trror:\ (Each\ undeclared\ identifier\ is\ reported\ only\ once,
+       \%-G%f:%l:\ %trror:\ for\ each\ function\ it\ appears\ in.),
+-      \%f:%l:%c:\ %terror:\ %m,
++      \%f:%l:%c:\ %trror:\ %m,
+       \%f:%l:%c:\ %tarning:\ %m,
+       \%f:%l:%c:\ %m,
+-      \%f:%l:\ %terror:\ %m,
++      \%f:%l:\ %trror:\ %m,
+       \%f:%l:\ %tarning:\ %m,
+       \%f:%l:\ %m,
+       \\"%f\"\\,\ line\ %l%*\\D%c%*[^\ ]\ %m,
+diff -Naur vim73.orig/runtime/compiler/gfortran.vim vim73/runtime/compiler/gfortran.vim
+--- vim73.orig/runtime/compiler/gfortran.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/gfortran.vim	2013-06-07 17:07:07.632320213 +0000
+@@ -0,0 +1,27 @@
++" Compiler: GNU Fortran Compiler
++" Maintainer: H Xu <xuhdev@gmail.com>
++" Version: 0.1.3
++" Last Change: 2012 Apr 30
++" Homepage: http://www.vim.org/scripts/script.php?script_id=3496
++"           https://bitbucket.org/xuhdev/compiler-gfortran.vim
++" License: Same as Vim
++
++if exists('current_compiler')
++    finish
++endif
++let current_compiler = 'gfortran'
++let s:keepcpo= &cpo
++set cpo&vim
++
++if exists(":CompilerSet") != 2		" older Vim always used :setlocal
++  command -nargs=* CompilerSet setlocal <args>
++endif
++
++CompilerSet errorformat=
++            \%A%f:%l.%c:,
++            \%-Z%trror:\ %m,
++            \%-Z%tarning:\ %m,
++            \%-C%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/gnat.vim vim73/runtime/compiler/gnat.vim
+--- vim73.orig/runtime/compiler/gnat.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/gnat.vim	2013-06-07 17:07:07.648986832 +0000
+@@ -17,11 +17,11 @@
+ "    Help Page: compiler-gnat
+ "------------------------------------------------------------------------------
+ 
+-if (exists("current_compiler")	    &&
+-   \ current_compiler == "gnat")    ||
+-   \ version < 700
++if (exists("current_compiler")&& current_compiler == "gnat") || version < 700
+    finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ let current_compiler = "gnat"
+ 
+@@ -62,6 +62,9 @@
+ execute "CompilerSet makeprg="     . escape (g:gnat.Get_Command('Make'), ' ')
+ execute "CompilerSet errorformat=" . escape (g:gnat.Error_Format, ' ')
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ finish " 1}}}
+ 
+ "------------------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/compiler/haml.vim vim73/runtime/compiler/haml.vim
+--- vim73.orig/runtime/compiler/haml.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/haml.vim	2013-06-07 17:07:07.652320155 +0000
+@@ -0,0 +1,28 @@
++" Vim compiler file
++" Compiler:	Haml
++" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
++" Last Change:	2013 May 30
++
++if exists("current_compiler")
++  finish
++endif
++let current_compiler = "haml"
++
++if exists(":CompilerSet") != 2		" older Vim always used :setlocal
++  command -nargs=* CompilerSet setlocal <args>
++endif
++
++let s:cpo_save = &cpo
++set cpo-=C
++
++CompilerSet makeprg=haml\ -c
++
++CompilerSet errorformat=
++      \Haml\ %trror\ on\ line\ %l:\ %m,
++      \Syntax\ %trror\ on\ line\ %l:\ %m,
++      \%-G%.%#
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim:set sw=2 sts=2:
+diff -Naur vim73.orig/runtime/compiler/hp_acc.vim vim73/runtime/compiler/hp_acc.vim
+--- vim73.orig/runtime/compiler/hp_acc.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/hp_acc.vim	2013-06-07 17:07:07.712319984 +0000
+@@ -2,7 +2,7 @@
+ " Compiler:	HP aCC
+ " Maintainer:	Matthias Ulrich <matthias-ulrich@web.de>
+ " URL:          http://www.subhome.de/vim/hp_acc.vim
+-" Last Change:	2005 Nov 19
++" Last Change:	2012 Apr 30
+ "
+ "  aCC --version says: "HP ANSI C++ B3910B A.03.13"
+ "  This compiler has been tested on:
+@@ -19,6 +19,8 @@
+   finish
+ endif
+ let current_compiler = "hp_acc"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -30,4 +32,7 @@
+          \%Z\ \ \ \ %p^%.%#,
+          \%-C%.%#
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:ts=8:sw=4:cindent
+diff -Naur vim73.orig/runtime/compiler/ifort.vim vim73/runtime/compiler/ifort.vim
+--- vim73.orig/runtime/compiler/ifort.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/ifort.vim	2013-06-07 17:07:07.762319841 +0000
+@@ -0,0 +1,27 @@
++" Compiler: Intel Fortran Compiler
++" Maintainer: H Xu <xuhdev@gmail.com>
++" Version: 0.1.1
++" Last Change: 2012 Apr 30
++" Homepage: http://www.vim.org/scripts/script.php?script_id=3497
++"           https://bitbucket.org/xuhdev/compiler-ifort.vim
++" License: Same as Vim
++
++if exists('current_compiler')
++    finish
++endif
++let current_compiler = 'ifort'
++let s:keepcpo= &cpo
++set cpo&vim
++
++if exists(":CompilerSet") != 2		" older Vim always used :setlocal
++  command -nargs=* CompilerSet setlocal <args>
++endif
++
++CompilerSet errorformat=
++            \%A%f(%l):\ %trror\ \#%n:\ %m,
++            \%A%f(%l):\ %tarning\ \#%n:\ %m,
++            \%-Z%p^,
++            \%-G%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/intel.vim vim73/runtime/compiler/intel.vim
+--- vim73.orig/runtime/compiler/intel.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/intel.vim	2013-06-07 17:07:07.768986489 +0000
+@@ -1,12 +1,14 @@
+ " Vim compiler file
+ " Compiler:     Intel C++ 7.1
+ " Maintainer:   David Harrison <david_jr@users.sourceforge.net>
+-" Last Change:  2004 May 16
++" Last Change:  2012 Apr 30
+ 
+ if exists("current_compiler")
+   finish
+ endif
+ let current_compiler = "intel"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -19,3 +21,6 @@
+ 		    \%-Z\ \ %p^,
+ 		    \%-G\\s%#,
+ 		    \%-G%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/irix5_c.vim vim73/runtime/compiler/irix5_c.vim
+--- vim73.orig/runtime/compiler/irix5_c.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/irix5_c.vim	2013-06-07 17:07:07.778986461 +0000
+@@ -1,12 +1,14 @@
+ " Vim compiler file
+ " Compiler:	SGI IRIX 5.3 cc
+ " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
+-" Last Change:	2004 Mar 27
++" Last Change:	2012 Apr 30
+ 
+ if exists("current_compiler")
+   finish
+ endif
+ let current_compiler = "irix5_c"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -19,3 +21,6 @@
+ 		     \%-Z\ %p^,
+ 		     \-G\\s%#,
+ 		     \%-G%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/irix5_cpp.vim vim73/runtime/compiler/irix5_cpp.vim
+--- vim73.orig/runtime/compiler/irix5_cpp.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/irix5_cpp.vim	2013-06-07 17:07:07.795653080 +0000
+@@ -1,12 +1,14 @@
+ " Vim compiler file
+ " Compiler:	SGI IRIX 5.3 CC or NCC
+ " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
+-" Last Change:	2004 Mar 27
++" Last Change:	2012 Apr 30
+ 
+ if exists("current_compiler")
+   finish
+ endif
+ let current_compiler = "irix5_cpp"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -19,3 +21,6 @@
+ 		      \%-Z\ \ %p%^,
+ 		      \%+C\ %\\{10}%.%#,
+ 		      \%-G%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/mcs.vim vim73/runtime/compiler/mcs.vim
+--- vim73.orig/runtime/compiler/mcs.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/mcs.vim	2013-06-07 17:07:07.822319670 +0000
+@@ -1,7 +1,8 @@
+ " Vim compiler file
+ " Compiler:    Mono C# Compiler
+ " Maintainer:  Jarek Sobiecki <harijari@go2.pl>
+-" Latest Revision: 2006-06-18
++" Last Updated By: Peter Collingbourne
++" Latest Revision: 2012 Jul 19
+ 
+ if exists("current_compiler")
+   finish
+@@ -12,13 +13,18 @@
+ set cpo-=C
+ 
+ setlocal errorformat=
++         \%D%.%#Project\ \"%f/%[%^/\"]%#\"%.%#,
++         \%X%.%#Done\ building\ project\ \"%f/%[%^/\"]%#\"%.%#,
++         \%-G%\\s%.%#,
++         \%E%f(%l):\ error\ CS%n:%m,
++         \%W%f(%l):\ warning\ CS%n:%m,
+          \%E%f(%l\\,%c):\ error\ CS%n:%m,
+          \%W%f(%l\\,%c):\ warning\ CS%n:%m,
+          \%E%>syntax\ error\\,%m,%Z%f(%l\\,%c):\ error\ CS%n:%m,
+          \%D%*\\a[%*\\d]:\ Entering\ directory\ `%f',
+          \%X%*\\a[%*\\d]:\ Leaving\ directory\ `%f',
+          \%DMaking\ %*\\a\ in\ %f,
+-         \%G-%.%#
++         \%-G%.%#
+ 
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
+diff -Naur vim73.orig/runtime/compiler/mips_c.vim vim73/runtime/compiler/mips_c.vim
+--- vim73.orig/runtime/compiler/mips_c.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/mips_c.vim	2013-06-07 17:07:07.852319585 +0000
+@@ -1,12 +1,14 @@
+ " Vim compiler file
+ " Compiler:	SGI IRIX 6.5 MIPS C (cc)
+ " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
+-" Last Change:	2004 Mar 27
++" Last Change:	2012 Apr 30
+ 
+ if exists("current_compiler")
+   finish
+ endif
+ let current_compiler = "mips_c"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -19,3 +21,6 @@
+ 		    \%-Z\ \ %p^,
+ 		    \%-G\\s%#,
+ 		    \%-G%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/mipspro_c89.vim vim73/runtime/compiler/mipspro_c89.vim
+--- vim73.orig/runtime/compiler/mipspro_c89.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/mipspro_c89.vim	2013-06-07 17:07:07.855652908 +0000
+@@ -1,12 +1,14 @@
+ " Vim compiler file
+ " Compiler:	SGI IRIX 6.5 MIPSPro C (c89)
+ " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
+-" Last Change:	2004 Mar 27
++" Last Change:	2012 Apr 30
+ 
+ if exists("current_compiler")
+   finish
+ endif
+ let current_compiler = "mipspro_c89"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -20,3 +22,6 @@
+ 		    \%+C\ \ %m,
+ 		    \%-G\\s%#,
+ 		    \%-G%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/mipspro_cpp.vim vim73/runtime/compiler/mipspro_cpp.vim
+--- vim73.orig/runtime/compiler/mipspro_cpp.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/mipspro_cpp.vim	2013-06-07 17:07:07.868986204 +0000
+@@ -1,12 +1,14 @@
+ " Vim compiler file
+ " Compiler:	SGI IRIX 6.5 MIPSPro C++ (CC)
+ " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
+-" Last Change:	2004 Mar 27
++" Last Change:	2012 Apr 30
+ 
+ if exists("current_compiler")
+   finish
+ endif
+ let current_compiler = "mipspro_cpp"
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -19,3 +21,6 @@
+ 		    \%-Z\ \ %p^,
+ 		    \%-G\\s%#,
+ 		    \%-G%.%#
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/msbuild.vim vim73/runtime/compiler/msbuild.vim
+--- vim73.orig/runtime/compiler/msbuild.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/msbuild.vim	2013-06-07 17:07:07.882319499 +0000
+@@ -0,0 +1,21 @@
++" Vim compiler file
++" Compiler:	Microsoft Visual Studio C#
++" Maintainer:	Chiel ten Brinke (ctje92@gmail.com)
++" Last Change:	2013 May 13
++
++if exists("current_compiler")
++  finish
++endif
++let current_compiler = "msbuild"
++let s:keepcpo= &cpo
++set cpo&vim
++
++if exists(":CompilerSet") != 2		" older Vim always used :setlocal
++  command -nargs=* CompilerSet setlocal <args>
++endif
++
++CompilerSet errorformat=\ %#%f(%l\\\,%c):\ %m
++CompilerSet makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/rst.vim vim73/runtime/compiler/rst.vim
+--- vim73.orig/runtime/compiler/rst.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/rst.vim	2013-06-07 17:07:07.988985861 +0000
+@@ -9,7 +9,7 @@
+ let current_compiler = "rst"
+ 
+ let s:cpo_save = &cpo
+-set cpo-=C
++set cpo&vim
+ 
+ setlocal errorformat=
+       \%f:%l:\ (%tEBUG/0)\ %m,
+diff -Naur vim73.orig/runtime/compiler/sass.vim vim73/runtime/compiler/sass.vim
+--- vim73.orig/runtime/compiler/sass.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/sass.vim	2013-06-07 17:07:08.008985804 +0000
+@@ -0,0 +1,30 @@
++" Vim compiler file
++" Compiler:	Sass
++" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
++" Last Change:	2013 May 30
++
++if exists("current_compiler")
++  finish
++endif
++let current_compiler = "sass"
++
++if exists(":CompilerSet") != 2		" older Vim always used :setlocal
++  command -nargs=* CompilerSet setlocal <args>
++endif
++
++let s:cpo_save = &cpo
++set cpo-=C
++
++CompilerSet makeprg=sass\ -c
++
++CompilerSet errorformat=
++      \%f:%l:%m\ (Sass::Syntax%trror),
++      \%ESyntax\ %trror:%m,
++      \%C%\\s%\\+on\ line\ %l\ of\ %f,
++      \%Z%.%#,
++      \%-G%.%#
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim:set sw=2 sts=2:
+diff -Naur vim73.orig/runtime/compiler/tex.vim vim73/runtime/compiler/tex.vim
+--- vim73.orig/runtime/compiler/tex.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/compiler/tex.vim	2013-06-07 17:07:08.085652252 +0000
+@@ -1,11 +1,13 @@
+ " Vim compiler file
+ " Compiler:     TeX
+ " Maintainer:   Artem Chuprina <ran@ran.pp.ru>
+-" Last Change:  2004 Mar 27
++" Last Change:  2012 Apr 30
+ 
+ if exists("current_compiler")
+ 	finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists(":CompilerSet") != 2		" older Vim always used :setlocal
+   command -nargs=* CompilerSet setlocal <args>
+@@ -30,9 +32,6 @@
+ 	let current_compiler = 'make'
+ endif
+ 
+-let s:cpo_save = &cpo
+-set cpo-=C
+-
+ " Value errorformat are taken from vim help, see :help errorformat-LaTeX, with
+ " addition from Srinath Avadhanula <srinath@fastmail.fm>
+ CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m,
+@@ -64,5 +63,5 @@
+ 	\%+Q%*[^()])%r,
+ 	\%+Q[%\\d%*[^()])%r
+ 
+-let &cpo = s:cpo_save
+-unlet s:cpo_save
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/compiler/xbuild.vim vim73/runtime/compiler/xbuild.vim
+--- vim73.orig/runtime/compiler/xbuild.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/compiler/xbuild.vim	2013-06-07 17:07:08.128985461 +0000
+@@ -0,0 +1,22 @@
++" Vim compiler file
++" Compiler:	Mono C#
++" Maintainer:	Chiel ten Brinke (ctje92@gmail.com)
++" Last Change:	2013 May 13
++
++if exists("current_compiler")
++  finish
++endif
++
++let current_compiler = "xbuild"
++let s:keepcpo= &cpo
++set cpo&vim
++
++if exists(":CompilerSet") != 2		" older Vim always used :setlocal
++  command -nargs=* CompilerSet setlocal <args>
++endif
++
++CompilerSet errorformat=\ %#%f(%l\\\,%c):\ %m
++CompilerSet makeprg=xbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/doc/arabic.txt vim73/runtime/doc/arabic.txt
+--- vim73.orig/runtime/doc/arabic.txt	2010-08-15 12:23:19.000000000 +0000
++++ vim73/runtime/doc/arabic.txt	2013-06-07 17:07:08.218985204 +0000
+@@ -1,4 +1,4 @@
+-*arabic.txt*	For Vim version 7.3.  Last change: 2005 Mar 29
++*arabic.txt*	For Vim version 7.3.  Last change: 2010 Nov 13
+ 
+ 
+ 		  VIM REFERENCE MANUAL	  by Nadim Shaikli
+@@ -146,7 +146,7 @@
+ 		:set arabic
+ <
+    The two above noted possible invocations are the preferred manner
+-   in which users are instructed to proceed.  Baring an enabled 'termbidi'
++   in which users are instructed to proceed.  Barring an enabled 'termbidi'
+    setting, both command options:
+ 
+      1. set the appropriate keymap
+diff -Naur vim73.orig/runtime/doc/autocmd.txt vim73/runtime/doc/autocmd.txt
+--- vim73.orig/runtime/doc/autocmd.txt	2010-08-15 12:23:19.000000000 +0000
++++ vim73/runtime/doc/autocmd.txt	2013-06-07 17:07:08.242318471 +0000
+@@ -1,4 +1,4 @@
+-*autocmd.txt*   For Vim version 7.3.  Last change: 2010 Jul 22
++*autocmd.txt*   For Vim version 7.3.  Last change: 2013 May 19
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -33,7 +33,7 @@
+ features, such as editing compressed files (see |gzip-example|).  The usual
+ place to put autocommands is in your .vimrc or .exrc file.
+ 
+-							*E203* *E204* *E143*
++						*E203* *E204* *E143* *E855*
+ WARNING: Using autocommands is very powerful, and may lead to unexpected side
+ effects.  Be careful not to destroy your text.
+ - It's a good idea to do some testing on an expendable copy of a file first.
+@@ -263,8 +263,10 @@
+ 	Startup and exit
+ |VimEnter|		after doing all the startup stuff
+ |GUIEnter|		after starting the GUI successfully
++|GUIFailed|		after starting the GUI failed
+ |TermResponse|		after the terminal response to |t_RV| is received
+ 
++|QuitPre|		when using `:quit`, before deciding whether to quit
+ |VimLeavePre|		before exiting Vim, before writing the viminfo file
+ |VimLeave|		before exiting Vim, after writing the viminfo file
+ 
+@@ -299,6 +301,8 @@
+ |InsertEnter|		starting Insert mode
+ |InsertChange|		when typing <Insert> while in Insert or Replace mode
+ |InsertLeave|		when leaving Insert mode
++|InsertCharPre|		when a character was typed in Insert mode, before
++			inserting it
+ 
+ |ColorScheme|		after loading a color scheme
+ 
+@@ -310,6 +314,7 @@
+ |SessionLoadPost|	after loading a session file
+ 
+ |MenuPopup|		just before showing the popup menu
++|CompleteDone|		after Insert mode completion is done
+ 
+ |User|			to be used in combination with ":doautocmd"
+ 
+@@ -383,6 +388,10 @@
+ 				This does NOT work for ":r file".  Not used
+ 				when the file doesn't exist.  Also used after
+ 				successfully recovering a file.
++				Also triggered for the filetypedetect group
++				when executing ":filetype detect" and when
++				writing an unnamed buffer in a way that the
++				buffer gets a name.
+ 							*BufReadCmd*
+ BufReadCmd			Before starting to edit a new buffer.  Should
+ 				read the file into the buffer. |Cmd-event|
+@@ -446,6 +455,9 @@
+ 				'modified' if successful, unless '+' is in
+ 				'cpo' and writing to another file |cpo-+|.
+ 				The buffer contents should not be changed.
++				When the command resets 'modified' the undo
++				information is adjusted to mark older undo
++				states as 'modified', like |:write| does.
+ 				|Cmd-event|
+ 							*BufWritePost*
+ BufWritePost			After writing the whole buffer to a file
+@@ -469,6 +481,11 @@
+ 							*ColorScheme*
+ ColorScheme			After loading a color scheme. |:colorscheme|
+ 
++							*CompleteDone*
++CompleteDone			After Insert mode completion is done.  Either
++				when something was completed or abandoning
++				completion. |ins-completion|
++
+ 							*CursorHold*
+ CursorHold			When the user doesn't press a key for the time
+ 				specified with 'updatetime'.  Not re-triggered
+@@ -502,10 +519,12 @@
+ 				Not triggered when there is typeahead or when
+ 				an operator is pending.
+ 				For an example see |match-parens|.
+-				Careful: Don't do anything that the user does
+-				not expect or that is slow.
++				Careful: This is triggered very often, don't
++				do anything that the user does not expect or
++				that is slow.
+ 							*CursorMovedI*
+ CursorMovedI			After the cursor was moved in Insert mode.
++				Not triggered when the popup menu is visible.
+ 				Otherwise the same as CursorMoved.
+ 							*EncodingChanged*
+ EncodingChanged			Fires off after the 'encoding' option has been
+@@ -657,12 +676,26 @@
+ 				indicates the new mode.
+ 				Be careful not to move the cursor or do
+ 				anything else that the user does not expect.
++							*InsertCharPre*
++InsertCharPre			When a character is typed in Insert mode,
++				before inserting the char.
++				The |v:char| variable indicates the char typed
++				and can be changed during the event to insert
++				a different character.  When |v:char| is set
++				to more than one character this text is
++				inserted literally.
++				It is not allowed to change the text |textlock|.
++				The event is not triggered when 'paste' is
++				set.
+ 							*InsertEnter*
+ InsertEnter			Just before starting Insert mode.  Also for
+ 				Replace mode and Virtual Replace mode.  The
+ 				|v:insertmode| variable indicates the mode.
+-				Be careful not to move the cursor or do
+-				anything else that the user does not expect.
++				Be careful not to do anything else that the
++				user does not expect.
++				The cursor is restored afterwards.  If you do
++				not want that set |v:char| to a non-empty
++				string.
+ 							*InsertLeave*
+ InsertLeave			When leaving Insert mode.  Also when using
+ 				CTRL-O |i_CTRL-O|.  But not for |i_CTRL-C|.
+@@ -682,7 +715,10 @@
+ QuickFixCmdPre			Before a quickfix command is run (|:make|,
+ 				|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
+ 				|:lgrepadd|, |:vimgrep|, |:lvimgrep|,
+-				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
++				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|,
++				|:cfile|, |:cgetfile|, |:caddfile|, |:lfile|,
++				|:lgetfile|, |:laddfile|, |:helpgrep|,
++				|:lhelpgrep|).
+ 				The pattern is matched against the command
+ 				being run.  When |:grep| is used but 'grepprg'
+ 				is set to "internal" it still matches "grep".
+@@ -693,7 +729,16 @@
+ 							*QuickFixCmdPost*
+ QuickFixCmdPost			Like QuickFixCmdPre, but after a quickfix
+ 				command is run, before jumping to the first
+-				location.  See |QuickFixCmdPost-example|.
++				location. For |:cfile| and |:lfile| commands
++				it is run after error file is read and before
++				moving to the first error. 
++				See |QuickFixCmdPost-example|.
++							*QuitPre*
++QuitPre				When using `:quit`, `:wq` or `:qall`, before
++				deciding whether it closes the current window
++				or quits Vim.  Can be used to close any
++				non-essential window if the current window is
++				the last ordinary window.
+ 							*RemoteReply*
+ RemoteReply			When a reply from a Vim that functions as
+ 				server was received |server2client()|.  The
+@@ -786,13 +831,31 @@
+ TermResponse			After the response to |t_RV| is received from
+ 				the terminal.  The value of |v:termresponse|
+ 				can be used to do things depending on the
+-				terminal version.
++				terminal version.  Note that this event may be
++				triggered halfway executing another event,
++				especially if file I/O, a shell command or
++				anything else that takes time is involved.
++							*TextChanged*
++TextChanged			After a change was made to the text in the
++				current buffer in Normal mode.  That is when
++				|b:changedtick| has changed.
++				Not triggered when there is typeahead or when
++				an operator is pending.
++				Careful: This is triggered very often, don't
++				do anything that the user does not expect or
++				that is slow.
++							*TextChangedI*
++TextChangedI			After a change was made to the text in the
++				current buffer in Insert mode.
++				Not triggered when the popup menu is visible.
++				Otherwise the same as TextChanged.
+ 							*User*
+ User				Never executed automatically.  To be used for
+ 				autocommands that are only executed with
+ 				":doautocmd".
+ 							*UserGettingBored*
+-UserGettingBored		When the user hits CTRL-C.  Just kidding! :-)
++UserGettingBored		When the user presses the same key 42 times.
++				Just kidding! :-)
+ 							*VimEnter*
+ VimEnter			After doing all the startup stuff, including
+ 				loading .vimrc files, executing the "-c cmd"
+@@ -1032,7 +1095,7 @@
+ option will not cause any commands to be executed.
+ 
+ 					*:do* *:doau* *:doautocmd* *E217*
+-:do[autocmd] [group] {event} [fname]
++:do[autocmd] [<nomodeline>] [group] {event} [fname]
+ 			Apply the autocommands matching [fname] (default:
+ 			current file name) for {event} to the current buffer.
+ 			You can use this when the current file name does not
+@@ -1041,8 +1104,8 @@
+ 			It's possible to use this inside an autocommand too,
+ 			so you can base the autocommands for one extension on
+ 			another extension.  Example: >
+-				:au Bufenter *.cpp so ~/.vimrc_cpp
+-				:au Bufenter *.cpp doau BufEnter x.c
++				:au BufEnter *.cpp so ~/.vimrc_cpp
++				:au BufEnter *.cpp doau BufEnter x.c
+ <			Be careful to avoid endless loops.  See
+ 			|autocmd-nested|.
+ 
+@@ -1051,14 +1114,17 @@
+ 			argument is included, Vim executes only the matching
+ 			autocommands for that group.  Note: if you use an
+ 			undefined group name, Vim gives you an error message.
+-
++							*<nomodeline>*
+ 			After applying the autocommands the modelines are
+ 			processed, so that their settings overrule the
+ 			settings from autocommands, like what happens when
+-			editing a file.
++			editing a file. This is skipped when the <nomodeline>
++			argument is present. You probably want to use
++			<nomodeline> for events that are not used when loading
++			a buffer, such as |User|.
+ 
+ 						*:doautoa* *:doautoall*
+-:doautoa[ll] [group] {event} [fname]
++:doautoa[ll] [<nomodeline>] [group] {event} [fname]
+ 			Like ":doautocmd", but apply the autocommands to each
+ 			loaded buffer.  Note that [fname] is used to select
+ 			the autocommands, not the buffers to which they are
+diff -Naur vim73.orig/runtime/doc/change.txt vim73/runtime/doc/change.txt
+--- vim73.orig/runtime/doc/change.txt	2010-08-15 12:23:19.000000000 +0000
++++ vim73/runtime/doc/change.txt	2013-06-07 17:07:08.275651709 +0000
+@@ -1,4 +1,4 @@
+-*change.txt*    For Vim version 7.3.  Last change: 2010 Jul 29
++*change.txt*    For Vim version 7.3.  Last change: 2013 Mar 19
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -71,7 +71,7 @@
+ 			"D" deletes the highlighted text plus all text until
+ 			the end of the line.  {not in Vi}
+ 
+-						*:d* *:de* *:del* *:delete*
++					*:d* *:de* *:del* *:delete* *:dl*
+ :[range]d[elete] [x]	Delete [range] lines (default: current line) [into
+ 			register x].
+ 
+@@ -80,15 +80,16 @@
+ 			(default: current line |cmdline-ranges|) [into
+ 			register x].
+ 
+-These commands delete text.  You can repeat them with the "." command
+-(except ":d") and undo them.  Use Visual mode to delete blocks of text.  See
++These commands delete text.  You can repeat them with the `.` command
++(except `:d`) and undo them.  Use Visual mode to delete blocks of text.  See
+ |registers| for an explanation of registers.
+ 
+ An exception for the d{motion} command: If the motion is not linewise, the
+ start and end of the motion are not in the same line, and there are only
+ blanks before the start and after the end of the motion, the delete becomes
+ linewise.  This means that the delete also removes the line of blanks that you
+-might expect to remain.
++might expect to remain. Use the |o_v| operator to force the motion to be
++characterwise.
+ 
+ Trying to delete an empty region of text (e.g., "d0" in the first column)
+ is an error when 'cpoptions' includes the 'E' flag.
+@@ -131,7 +132,7 @@
+ 			See |ex-flags| for [flags].
+ 
+ These commands delete the <EOL> between lines.  This has the effect of joining
+-multiple lines into one line.  You can repeat these commands (except ":j") and
++multiple lines into one line.  You can repeat these commands (except `:j`) and
+ undo them.
+ 
+ These commands, except "gJ", insert one space in place of the <EOL> unless
+@@ -259,6 +260,12 @@
+ 			<CR>.  CTRL-V <NL> replaces with a <Nul>.
+ 			{Vi: CTRL-V <CR> still replaces with a line break,
+ 			cannot replace something with a <CR>}
++
++			If {char} is CTRL-E or CTRL-Y the character from the
++			line below or above is used, just like with |i_CTRL-E|
++			and |i_CTRL-Y|.  This also works with a count, thus
++			`10r<C-E>` copies 10 characters from the line below.
++
+ 			If you give a [count], Vim replaces [count] characters
+ 			with [count] {char}s.  When {char} is a <CR> or <NL>,
+ 			however, Vim inserts only one <CR>: "5r<CR>" replaces
+@@ -464,9 +471,9 @@
+ made out of spaces with the same indent made out of <Tab>s (and a few spaces
+ if necessary).  If the 'expandtab' option is on, Vim uses only spaces.  Then
+ you can use ">><<" to replace <Tab>s in the indent by spaces (or use
+-":retab!").
++`:retab!`).
+ 
+-To move a line several 'shiftwidth's, use Visual mode or the ":" commands.
++To move a line several 'shiftwidth's, use Visual mode or the `:` commands.
+ For example: >
+ 	Vjj4>		move three lines 4 indents to the right
+ 	:<<<		move current line 3 indents to the left
+@@ -486,7 +493,7 @@
+ works like a filter; not all versions do).  The 'shell' option specifies the
+ shell Vim uses to execute the filter command (See also the 'shelltype'
+ option).  You can repeat filter commands with ".".  Vim does not recognize a
+-comment (starting with '"') after the ":!" command.
++comment (starting with '"') after the `:!` command.
+ 
+ 							*!*
+ !{motion}{filter}	Filter {motion} text lines through the external
+@@ -522,11 +529,11 @@
+ ={motion}		Filter {motion} lines through the external program
+ 			given with the 'equalprg' option.  When the 'equalprg'
+ 			option is empty (this is the default), use the
+-			internal formatting function |C-indenting|.  But when
+-			'indentexpr' is not empty, it will be used instead
+-			|indent-expression|.  When Vim was compiled without
+-			internal formatting then the "indent" program is used
+-			as a last resort.
++			internal formatting function |C-indenting| and
++			|'lisp'|.  But when 'indentexpr' is not empty, it will
++			be used instead |indent-expression|.  When Vim was
++			compiled without internal formatting then the "indent"
++			program is used as a last resort.
+ 
+ 							*==*
+ ==			Filter [count] lines like with ={motion}.
+@@ -573,34 +580,37 @@
+ 			Repeat last :substitute with same search pattern and
+ 			substitute string, but without the same flags.  You
+ 			may add [flags], see |:s_flags|.
+-			Note that after ":substitute" the '&' flag can't be
++			Note that after `:substitute` the '&' flag can't be
+ 			used, it's recognized as a pattern separator.
+-			The space between ":substitute" and the 'c', 'g' and
++			The space between `:substitute` and the 'c', 'g' and
+ 			'r' flags isn't required, but in scripts it's a good
+ 			idea to keep it to avoid confusion.
+ 
+ :[range]~[&][flags] [count]					*:~*
+ 			Repeat last substitute with same substitute string
+ 			but with last used search pattern.  This is like
+-			":&r".  See |:s_flags| for [flags].
++			`:&r`.  See |:s_flags| for [flags].
+ 
+ 								*&*
+-&			Synonym for ":s" (repeat last substitute).  Note
++&			Synonym for `:s` (repeat last substitute).  Note
+ 			that the flags are not remembered, thus it might
+-			actually work differently.  You can use ":&&" to keep
++			actually work differently.  You can use `:&&` to keep
+ 			the flags.
+ 
+ 								*g&*
+-g&			Synonym for ":%s//~/&" (repeat last substitute on all
+-			lines with the same flags).
++g&			Synonym for `:%s//~/&` (repeat last substitute with
++			last search pattern on all lines with the same flags).
++			For example, when you first do a substitution with
++			`:s/pattern/repl/flags` and then `/search` for
++			something else, `g&` will do `:%s/search/repl/flags`.
+ 			Mnemonic: global substitute. {not in Vi}
+ 
+ 						*:snomagic* *:sno*
+-:[range]sno[magic] ...	Same as ":substitute", but always use 'nomagic'.
++:[range]sno[magic] ...	Same as `:substitute`, but always use 'nomagic'.
+ 			{not in Vi}
+ 
+ 						*:smagic* *:sm*
+-:[range]sm[agic] ...	Same as ":substitute", but always use 'magic'.
++:[range]sm[agic] ...	Same as `:substitute`, but always use 'magic'.
+ 			{not in Vi}
+ 
+ 							*:s_flags*
+@@ -610,7 +620,7 @@
+ 	command.  Examples: >
+ 		:&&
+ 		:s/this/that/&
+-<	Note that ":s" and ":&" don't keep the flags.
++<	Note that `:s` and `:&` don't keep the flags.
+ 	{not in Vi}
+ 
+ [c]	Confirm each substitution.  Vim highlights the matching string (with
+@@ -659,6 +669,8 @@
+ [n]	Report the number of matches, do not actually substitute.  The [c]
+ 	flag is ignored.  The matches are reported as if 'report' is zero.
+ 	Useful to |count-items|.
++	If \= |sub-replace-expression| is used, the expression will be
++	evaluated in the |sandbox| at every match.
+ 
+ [p]	Print the line containing the last substitute.
+ 
+@@ -666,14 +678,14 @@
+ 
+ [l]	Like [p] but print the text like |:list|.
+ 
+-[r]	Only useful in combination with ":&" or ":s" without arguments.  ":&r"
+-	works the same way as ":~":  When the search pattern is empty, use the
++[r]	Only useful in combination with `:&` or `:s` without arguments.  `:&r`
++	works the same way as `:~`:  When the search pattern is empty, use the
+ 	previously used search pattern instead of the search pattern from the
+-	last substitute or ":global".  If the last command that did a search
+-	was a substitute or ":global", there is no effect.  If the last
++	last substitute or `:global`.  If the last command that did a search
++	was a substitute or `:global`, there is no effect.  If the last
+ 	command was a search command such as "/", use the pattern from that
+ 	command.
+-	For ":s" with an argument this already happens: >
++	For `:s` with an argument this already happens: >
+ 		:s/blue/red/
+ 		/green
+ 		:s//red/   or  :~   or  :&r
+@@ -690,8 +702,9 @@
+ order to skip the pattern the "magicness" must be known.  Catch 22!
+ 
+ If the {pattern} for the substitute command is empty, the command uses the
+-pattern from the last substitute or ":global" command.  With the [r] flag, the
+-command uses the pattern from the last substitute, ":global", or search
++pattern from the last substitute or `:global` command.  If there is none, but
++there is a previous search pattern, that one is used.  With the [r] flag, the
++command uses the pattern from the last substitute, `:global`, or search
+ command.
+ 
+ If the {string} is omitted the substitute is done as if it's empty.  Thus the
+@@ -716,11 +729,13 @@
+ 
+ 					*sub-replace-special* *:s\=*
+ When the {string} starts with "\=" it is evaluated as an expression, see
+-|sub-replace-expression|.  You can use that for any special characters.
++|sub-replace-expression|.  You can use that for complex replacement or special
++characters.
++
+ Otherwise these characters in {string} have a special meaning:
+ 								*:s%*
+ When {string} is equal to "%" and '/' is included with the 'cpoptions' option,
+-then the {string} of the previous substitute command is used. |cpo-/|
++then the {string} of the previous substitute command is used, see |cpo-/|
+ 
+ magic	nomagic	  action    ~
+   &	  \&	  replaced with the whole matched pattern	     *s/\&*
+@@ -755,12 +770,25 @@
+       \x	  where x is any character not mentioned above:
+ 		  Reserved for future expansion
+ 
++The special meaning is also used inside the third argument {sub} of
++the |substitute()| function with the following exceptions:
++  - A % inserts a percent literally without regard to 'cpoptions'.
++  - magic is always set without regard to 'magic'.
++  - A ~ inserts a tilde literally.
++  - <CR> and \r inserts a carriage-return (CTRL-M).
++  - \<CR> does not have a special meaning. it's just one of \x.
++
+ Examples: >
+   :s/a\|b/xxx\0xxx/g		 modifies "a b"	     to "xxxaxxx xxxbxxx"
+   :s/\([abc]\)\([efg]\)/\2\1/g	 modifies "af fa bg" to "fa fa gb"
+   :s/abcde/abc^Mde/		 modifies "abcde"    to "abc", "de" (two lines)
+   :s/$/\^M/			 modifies "abcde"    to "abcde^M"
+   :s/\w\+/\u\0/g		 modifies "bla bla"  to "Bla Bla"
++  :s/\w\+/\L\u/g		 modifies "BLA bla"  to "Bla Bla"
++
++Note: "\L\u" can be used to capitalize the first letter of a word.  This is
++not compatible with Vi and older versions of Vim, where the "\u" would cancel
++out the "\L". Same for "\U\l".
+ 
+ Note: In previous versions CTRL-V was handled in a special way.  Since this is
+ not Vi compatible, this was removed.  Use a backslash instead.
+@@ -786,17 +814,19 @@
+ Substitute with an expression			*sub-replace-expression*
+ 						*sub-replace-\=*
+ When the substitute string starts with "\=" the remainder is interpreted as an
+-expression.  This does not work recursively: a substitute() function inside
++expression.  This does not work recursively: a |substitute()| function inside
+ the expression cannot use "\=" for the substitute string.
+ 
+ The special meaning for characters as mentioned at |sub-replace-special| does
+-not apply except for "<CR>", "\<CR>" and "\\".  Thus in the result of the
+-expression you need to use two backslashes to get one, put a backslash before a
+-<CR> you want to insert, and use a <CR> without a backslash where you want to
+-break the line.
+-
+-For convenience a <NL> character is also used as a line break.  Prepend a
+-backslash to get a real <NL> character (which will be a NUL in the file).
++not apply except for "<CR>".  A <NL> character is used as a line break, you
++can get one with a double-quote string: "\n".  Prepend a backslash to get a
++real <NL> character (which will be a NUL in the file).
++
++The "\=" notation can also be used inside the third argument {sub} of
++|substitute()| function.  In this case, the special meaning for characters as
++mentioned at |sub-replace-special| does not apply at all. Especially, <CR> and
++<NL> are interpreted not as a line break but as a carriage-return and a
++new-line respectively.
+ 
+ When the result is a |List| then the items are joined with separating line
+ breaks.  Thus each item becomes a line, except that they can contain line
+@@ -834,7 +864,7 @@
+ 
+ 
+ 4.4 Changing tabs					*change-tabs*
+-							*:ret* *:retab*
++							*:ret* *:retab* *:retab!*
+ :[range]ret[ab][!] [new_tabstop]
+ 			Replace all sequences of white-space containing a
+ 			<Tab> with new strings of white-space using the new
+@@ -853,7 +883,7 @@
+ 			Careful: This command modifies any <Tab> characters
+ 			inside of strings in a C program.  Use "\t" to avoid
+ 			this (that's a good habit anyway).
+-			":retab!" may also change a sequence of spaces by
++			`:retab!` may also change a sequence of spaces by
+ 			<Tab> characters, which can mess up a printf().
+ 			{not in Vi}
+ 			Not available when |+ex_extra| feature was disabled at
+@@ -916,8 +946,10 @@
+ {Visual}["x]Y		Yank the highlighted lines [into register x] (for
+ 			{Visual} see |Visual-mode|).  {not in Vi}
+ 
+-							*:y* *:yank*
+-:[range]y[ank] [x]	Yank [range] lines [into register x].
++							*:y* *:yank* *E850*
++:[range]y[ank] [x]	Yank [range] lines [into register x]. Yanking to the
++			"* or "+ registers is possible only when the
++			|+clipboard| feature is included.
+ 
+ :[range]y[ank] [x] {count}
+ 			Yank {count} lines, starting with last line number
+@@ -961,8 +993,12 @@
+ 			current line).  This always works |linewise|, thus
+ 			this command can be used to put a yanked block as new
+ 			lines.
+-			The cursor is left on the first non-blank in the last
+-			new line.
++			If no register is specified, it depends on the 'cb'
++			option: If 'cb' contains "unnamedplus", paste from the
++			+ register |quoteplus|.  Otherwise, if 'cb' contains
++			"unnamed", paste from the * register |quotestar|.
++			Otherwise, paste from the unnamed register
++			|quote_quote|.
+ 			The register can also be '=' followed by an optional
+ 			expression.  The expression continues until the end of
+ 			the command.  You need to escape the '|' and '"'
+@@ -1167,7 +1203,7 @@
+ 
+ 9. Last search pattern register	"/			*quote_/* *quote/*
+ Contains the most recent search-pattern.  This is used for "n" and 'hlsearch'.
+-It is writable with ":let", you can change it to have 'hlsearch' highlight
++It is writable with `:let`, you can change it to have 'hlsearch' highlight
+ other matches without actually searching.  You can't yank or delete into this
+ register.  The search direction is available in |v:searchforward|.
+ Note that the valued is restored when returning from a function
+@@ -1175,12 +1211,12 @@
+ {not in Vi}
+ 
+ 							*@/*
+-You can write to a register with a ":let" command |:let-@|.  Example: >
++You can write to a register with a `:let` command |:let-@|.  Example: >
+ 	:let @/ = "the"
+ 
+ If you use a put command without specifying a register, Vim uses the register
+ that was last filled (this is also the contents of the unnamed register).  If
+-you are confused, use the ":dis" command to find out what Vim will put (this
++you are confused, use the `:dis` command to find out what Vim will put (this
+ command displays all named and numbered registers; the unnamed register is
+ labelled '"').
+ 
+@@ -1387,16 +1423,19 @@
+ middle-comment leader with the end-comment leader and apply any specified
+ alignment, leaving just " */".  There is no need to hit BackSpace first.
+ 
++When there is a match with a middle part, but there also is a maching end part
++which is longer, the end part is used.  This makes a C style comment work
++without requiring the middle part to end with a space.
+ 
+ Here is an example of alignment flags at work to make a comment stand out
+-(kind of looks like a 1 too). Consider comment string >
+-	sr:/***,m:**,ex2:******/
+-
+-                                   /***
+-                                     **<--right aligned from "r" flag
+-                                     **
+-offset 2 spaces from the "2" flag--->**
+-                                   ******/
++(kind of looks like a 1 too). Consider comment string: >
++	:set comments=sr:/***,m:**,ex-2:******/
++<
++                                   /*** ~
++                                     **<--right aligned from "r" flag ~
++                                     ** ~
++offset 2 spaces for the "-2" flag--->** ~
++                                   ******/ ~
+ In this case, the first comment was typed, then return was pressed 4 times,
+ then "/" was pressed to end the comment.
+ 
+@@ -1414,8 +1453,8 @@
+ alignment flags either. The same behaviour can be defined in those other
+ formatting options. One consideration is that 'cindent' has additional options
+ for context based indenting of comments but cannot replicate many three piece
+-indent alignments.  However, 'indentexpr' is has the ability to work better
+-with three piece comments.
++indent alignments.  However, 'indentexpr' has the ability to work better with
++three piece comments.
+ 
+ Other examples: >
+    "b:*"	Includes lines starting with "*", but not if the "*" is
+@@ -1473,6 +1512,7 @@
+ 			first line of a paragraph
+ 		second line of the same paragraph
+ 		third line.
++<	This also works inside comments, ignoring the comment leader.
+ v	Vi-compatible auto-wrapping in insert mode: Only break a line at a
+ 	blank that you have entered during the current insert command.  (Note:
+ 	this is not 100% Vi compatible.  Vi has some "unexpected features" or
+@@ -1493,6 +1533,12 @@
+ 	characters.  Overruled by the 'M' flag.
+ 1	Don't break a line after a one-letter word.  It's broken before it
+ 	instead (if possible).
++j	Where it makes sense, remove a comment leader when joining lines.  For
++	example, joining:
++		int i;   // the index ~
++		         // in the list ~
++	Becomes:
++		int i;   // the index in the list ~
+ 
+ 
+ With 't' and 'c' you can specify when Vim performs auto-wrapping:
+@@ -1536,7 +1582,7 @@
+ 	:set fo=tcrq
+ <
+ 
+-Automatic formatting					*auto-format*
++Automatic formatting				*auto-format* *autoformat*
+ 
+ When the 'a' flag is present in 'formatoptions' text is formatted
+ automatically when inserting text or deleting text.  This works nice for
+@@ -1645,7 +1691,7 @@
+ 			last search pattern is used.  This allows trying out
+ 			a pattern first.
+ 
+-Note that using ":sort" with ":global" doesn't sort the matching lines, it's
++Note that using `:sort` with `:global` doesn't sort the matching lines, it's
+ quite useless.
+ 
+ The details about sorting depend on the library function used.  There is no
+diff -Naur vim73.orig/runtime/doc/cmdline.txt vim73/runtime/doc/cmdline.txt
+--- vim73.orig/runtime/doc/cmdline.txt	2010-08-15 12:23:19.000000000 +0000
++++ vim73/runtime/doc/cmdline.txt	2013-06-07 17:07:08.295651652 +0000
+@@ -1,4 +1,4 @@
+-*cmdline.txt*   For Vim version 7.3.  Last change: 2010 May 07
++*cmdline.txt*   For Vim version 7.3.  Last change: 2013 Mar 16
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -83,9 +83,9 @@
+ CTRL-Q		Same as CTRL-V.  But with some terminals it is used for
+ 		control flow, it doesn't work then.
+ 
+-							*c_<Left>*
++							*c_<Left>* *c_Left*
+ <Left>		cursor left
+-							*c_<Right>*
++							*c_<Right>* *c_Right*
+ <Right>		cursor right
+ 							*c_<S-Left>*
+ <S-Left> or <C-Left>					*c_<C-Left>*
+@@ -93,18 +93,18 @@
+ 							*c_<S-Right>*
+ <S-Right> or <C-Right>					*c_<C-Right>*
+ 		cursor one WORD right
+-CTRL-B or <Home>					*c_CTRL-B* *c_<Home>*
++CTRL-B or <Home>				*c_CTRL-B* *c_<Home>* *c_Home*
+ 		cursor to beginning of command-line
+-CTRL-E or <End>						*c_CTRL-E* *c_<End>*
++CTRL-E or <End>					*c_CTRL-E* *c_<End>* *c_End*
+ 		cursor to end of command-line
+ 
+ 							*c_<LeftMouse>*
+ <LeftMouse>	Move the cursor to the position of the mouse click.
+ 
+-CTRL-H							*c_<BS>* *c_CTRL-H*
++CTRL-H						*c_<BS>* *c_CTRL-H* *c_BS*
+ <BS>		Delete the character in front of the cursor (see |:fixdel| if
+ 		your <BS> key does not do what you want).
+-							*c_<Del>*
++							*c_<Del>* *c_Del*
+ <Del>		Delete the character under the cursor (at end of line:
+ 		character before the cursor) (see |:fixdel| if your <Del>
+ 		key does not do what you want).
+@@ -118,7 +118,7 @@
+ 		preferred behavior, add the following to your .vimrc: >
+ 			:cnoremap <C-U> <C-E><C-U>
+ <
+-							*c_<Insert>*
++						*c_<Insert>* *c_Insert*
+ <Insert>	Toggle between insert and overstrike.  {not in Vi}
+ 
+ {char1} <BS> {char2}	or				*c_digraph*
+@@ -217,16 +217,16 @@
+ 			   :return cmd
+ 			:endfunc
+ <		This doesn't work recursively, thus not when already editing
+-		an expression.
++		an expression.  But it is possible to use in a mapping.
+ 
+ 							*c_CTRL-Y*
+ CTRL-Y		When there is a modeless selection, copy the selection into
+ 		the clipboard. |modeless-selection|
+ 		If there is no selection CTRL-Y is inserted as a character.
+ 
+-CTRL-J						*c_CTRL-J* *c_<NL>* *c_<CR>*
++CTRL-J					*c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
+ <CR> or <NL>	start entered command
+-							*c_<Esc>*
++							*c_<Esc>* *c_Esc*
+ <Esc>		When typed and 'x' not present in 'cpoptions', quit
+ 		Command-line mode without executing.  In macros or when 'x'
+ 		present in 'cpoptions', start entered command.
+@@ -235,12 +235,12 @@
+ 							*c_CTRL-C*
+ CTRL-C		quit command-line without executing
+ 
+-							*c_<Up>*
++							*c_<Up>* *c_Up*
+ <Up>		recall older command-line from history, whose beginning
+ 		matches the current command-line (see below).
+ 		{not available when compiled without the |+cmdline_hist|
+ 		feature}
+-							*c_<Down>*
++							*c_<Down>* *c_Down*
+ <Down>		recall more recent command-line from history, whose beginning
+ 		matches the current command-line (see below).
+ 		{not available when compiled without the |+cmdline_hist|
+@@ -330,12 +330,12 @@
+ 
+ :his[tory] [{name}] [{first}][, [{last}]]
+ 		List the contents of history {name} which can be:
+-		c[md]	 or :	command-line history
+-		s[earch] or /	search string history
+-		e[xpr]	 or =	expression register history
+-		i[nput]	 or @	input line history
+-		d[ebug]	 or >	debug command history
+-		a[ll]		all of the above
++		c[md]	 or :		command-line history
++		s[earch] or / or ?	search string history
++		e[xpr]	 or =		expression register history
++		i[nput]	 or @		input line history
++		d[ebug]	 or >		debug command history
++		a[ll]			all of the above
+ 		{not in Vi}
+ 
+ 		If the numbers {first} and/or {last} are given, the respective
+@@ -372,10 +372,10 @@
+ - Mappings: Only after a ":map" or similar command.
+ - Variable and function names: Only after a ":if", ":call" or similar command.
+ 
+-When Vim was compiled with the |+cmdline_compl| feature disabled, only file
+-names, directories and help items can be completed.  The number of help item
+-matches is limited (currently to 300) to avoid a long delay when there are
+-very many matches.
++When Vim was compiled without the |+cmdline_compl| feature only file names,
++directories and help items can be completed.  The number of help item matches
++is limited (currently to 300) to avoid a long delay when there are very many
++matches.
+ 
+ These are the commands that can be used:
+ 
+@@ -423,7 +423,10 @@
+ 
+ The 'wildchar' option defaults to <Tab> (CTRL-E when in Vi compatible mode; in
+ a previous version <Esc> was used).  In the pattern standard wildcards '*' and
+-'?' are accepted.  '*' matches any string, '?' matches exactly one character.
++'?' are accepted when matching file names.  '*' matches any string, '?'
++matches exactly one character.
++
++The 'wildignorecase' option can be set to ignore case in filenames.
+ 
+ If you like tcsh's autolist completion, you can use this mapping:
+ 	:cnoremap X <C-L><C-D>
+@@ -711,10 +714,15 @@
+ Visual Mode and Range					*v_:*
+ 
+ {Visual}:	Starts a command-line with the Visual selected lines as a
+-		range.  The code ":'<,'>" is used for this range, which makes
++		range.  The code `:'<,'>` is used for this range, which makes
+ 		it possible to select a similar line from the command-line
+ 		history for repeating a command on different Visually selected
+ 		lines.
++		When Visual mode was already ended, a short way to use the
++		Visual area for a range is `:*`.  This requires that "*" does
++		not appear in 'cpo', see |cpo-star|.  Otherwise you will have
++		to type `:'<,'>`
++
+ 
+ ==============================================================================
+ 5. Ex command-line flags				*ex-flags*
+@@ -781,30 +789,34 @@
+ 			       *:<cword>* *:<cWORD>* *:<cfile>* *<cfile>*
+ 			       *:<sfile>* *<sfile>* *:<afile>* *<afile>*
+ 			       *:<abuf>* *<abuf>* *:<amatch>* *<amatch>*
+-			       *E495* *E496* *E497* *E498* *E499* *E500*
++			       *<slnum>* *E495* *E496* *E497* *E499* *E500*
+ Note: these are typed literally, they are not special keys!
+ 	<cword>    is replaced with the word under the cursor (like |star|)
+ 	<cWORD>    is replaced with the WORD under the cursor (see |WORD|)
+ 	<cfile>    is replaced with the path name under the cursor (like what
+ 		   |gf| uses)
+-	<afile>    when executing autocommands, is replaced with the file name
+-		   for a file read or write
+-	<abuf>     when executing autocommands, is replaced with the currently
++	<afile>    When executing autocommands, is replaced with the file name
++		   for a file read or write.
++	<abuf>     When executing autocommands, is replaced with the currently
+ 		   effective buffer number (for ":r file" and ":so file" it is
+ 		   the current buffer, the file being read/sourced is not in a
+ 		   buffer).
+-	<amatch>   when executing autocommands, is replaced with the match for
++	<amatch>   When executing autocommands, is replaced with the match for
+ 		   which this autocommand was executed.  It differs from
+ 		   <afile> only when the file name isn't used to match with
+ 		   (for FileType, Syntax and SpellFileMissing events).
+-	<sfile>    when executing a ":source" command, is replaced with the
+-		   file name of the sourced file;
+-		   when executing a function, is replaced with
++	<sfile>    When executing a ":source" command, is replaced with the
++		   file name of the sourced file.  *E498* 
++		   When executing a function, is replaced with
+ 		   "function {function-name}"; function call nesting is
+ 		   indicated like this:
+ 		   "function {function-name1}..{function-name2}".  Note that
+ 		   filename-modifiers are useless when <sfile> is used inside
+ 		   a function.
++	<slnum>	   When executing a ":source" command, is replaced with the
++	           line number.  *E842*
++		   When executing a function it's the line number relative to
++		   the start of the function.
+ 
+ 							 *filename-modifiers*
+ 	 *:_%:* *::8* *::p* *::.* *::~* *::h* *::t* *::r* *::e* *::s* *::gs*
+@@ -819,10 +831,11 @@
+ 		the home directory.  If the name is a directory a path
+ 		separator is added at the end.  For a file name that does not
+ 		exist and does not have an absolute path the result is
+-		unpredictable.
++		unpredictable.  On MS-Windows an 8.3 filename is expanded to
++		the long name.
+ 	:8	Converts the path to 8.3 short format (currently only on
+-		win32).  Will act on as much of a path that is an existing
+-		path.
++		MS-Windows).  Will act on as much of a path that is an
++		existing path.
+ 	:~	Reduce file name to be relative to the home directory, if
+ 		possible.  File name is unmodified if it is not below the home
+ 		directory.
+@@ -860,7 +873,7 @@
+ 		After this, the previous modifiers can be used again.  For
+ 		example ":p", to make a full path after the substitution.
+ 	:gs?pat?sub?
+-		Substitute all occurrences of "path" with "sub".  Otherwise
++		Substitute all occurrences of "pat" with "sub".  Otherwise
+ 		this works like ":s".
+ 
+ Examples, when the file name is "src/version.c", current dir
+@@ -951,7 +964,7 @@
+ 	\\$home		file "\\", followed by expanded $home
+ 
+ ==============================================================================
+-6. Command-line window				*cmdline-window* *cmdwin*
++7. Command-line window				*cmdline-window* *cmdwin*
+ 							*command-line-window*
+ In the command-line window the command line can be edited just like editing
+ text in any window.  It is a special kind of window, because you cannot leave
+diff -Naur vim73.orig/runtime/doc/debug.txt vim73/runtime/doc/debug.txt
+--- vim73.orig/runtime/doc/debug.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/debug.txt	2013-06-07 17:07:08.328984890 +0000
+@@ -1,4 +1,4 @@
+-*debug.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
++*debug.txt*     For Vim version 7.3.  Last change: 2012 Feb 11
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -15,14 +15,15 @@
+ 
+ ==============================================================================
+ 
+-1. Location of a crash, using gcc and gdb		*debug-gcc*
++1. Location of a crash, using gcc and gdb		*debug-gcc* *gdb*
+ 
+ When Vim crashes in one of the test files, and you are using gcc for
+ compilation, here is what you can do to find out exactly where Vim crashes.
+ This also applies when using the MingW tools.
+ 
+-1. Compile Vim with the "-g" option (there is a line in the Makefile for this,
+-   which you can uncomment).
++1. Compile Vim with the "-g" option (there is a line in the src/Makefile for
++   this, which you can uncomment).  Also make sure "strip" is disabled (do not
++   install it, or use the line "STRIP = /bin/true").
+ 
+ 2. Execute these commands (replace "11" with the test that fails): >
+ 	cd testdir
+@@ -67,7 +68,7 @@
+ some steps to provide a useful bug report.
+ 
+ 
+-GENERIC ~
++3.1 GENERIC ~
+ 
+ You must obtain the debugger symbols (PDB) file for your executable: gvim.pdb
+ for gvim.exe, or vim.pdb for vim.exe. The PDB should be available from the
+@@ -89,7 +90,7 @@
+ 
+ 
+ 								*debug-vs2005*
+-2.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~
++3.2 Debugging Vim crashes with Visual Studio 2005/Visual C++ 2005 Express ~
+ 
+ First launch vim.exe or gvim.exe and then launch Visual Studio.  (If you don't
+ have Visual Studio, follow the instructions at |get-ms-debuggers| to obtain a
+@@ -123,7 +124,7 @@
+ need to save minidumps or you want a just-in-time (postmortem) debugger.
+ 
+ 								*debug-windbg*
+-2.3 Debugging Vim crashes with WinDbg ~
++3.3 Debugging Vim crashes with WinDbg ~
+ 
+ See |get-ms-debuggers| to obtain a copy of WinDbg.
+ 
+@@ -149,7 +150,7 @@
+         .dump vim.dmp
+ <
+ 							*debug-minidump*
+-2.4 Opening a Minidump ~
++3.4 Opening a Minidump ~
+ 
+ If you have a minidump file, you can open it in Visual Studio or in WinDbg.
+ 
+@@ -161,7 +162,7 @@
+ |debug-windbg| to set the Symbol File Path.
+ 
+ 							*get-ms-debuggers*
+-2.5 Obtaining Microsoft Debugging Tools ~
++3.5 Obtaining Microsoft Debugging Tools ~
+ 
+ The Debugging Tools for Windows (including WinDbg) can be downloaded from
+     http://www.microsoft.com/whdc/devtools/debugging/default.mspx
+diff -Naur vim73.orig/runtime/doc/develop.txt vim73/runtime/doc/develop.txt
+--- vim73.orig/runtime/doc/develop.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/develop.txt	2013-06-07 17:07:08.365651452 +0000
+@@ -1,4 +1,4 @@
+-*develop.txt*   For Vim version 7.3.  Last change: 2008 Dec 17
++*develop.txt*   For Vim version 7.3.  Last change: 2013 Apr 27
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -20,6 +20,7 @@
+ Vim is open source software.  Everybody is encouraged to contribute to help
+ improving Vim.  For sending patches a context diff "diff -c" is preferred.
+ Also see http://www.vim.org/tips/tip.php?tip_id=618.
++Also see http://vim.wikia.com/wiki/How_to_make_and_submit_a_patch.
+ 
+ ==============================================================================
+ 1. Design goals						*design-goals*
+@@ -232,6 +233,17 @@
+ new		C++ reserved keyword
+ try		Borland C++ doesn't like it to be used as a variable.
+ 
++clear		Mac curses.h
++echo		Mac curses.h
++instr		Mac curses.h
++meta		Mac curses.h
++newwin		Mac curses.h
++nl		Mac curses.h
++overwrite	Mac curses.h
++refresh		Mac curses.h
++scroll		Mac curses.h
++typeahead	Mac curses.h
++
+ basename()	GNU string function
+ dirname()	GNU string function
+ get_env_value()	Linux system function
+diff -Naur vim73.orig/runtime/doc/diff.txt vim73/runtime/doc/diff.txt
+--- vim73.orig/runtime/doc/diff.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/diff.txt	2013-06-07 17:07:08.375651424 +0000
+@@ -1,4 +1,4 @@
+-*diff.txt*      For Vim version 7.3.  Last change: 2010 Jul 31
++*diff.txt*      For Vim version 7.3.  Last change: 2012 Sep 05
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -86,16 +86,16 @@
+ While already in Vim you can start diff mode in three ways.
+ 
+ 							*E98*
+-:diffsplit {filename}					*:diffs* *:diffsplit*
++:diffs[plit] {filename}					*:diffs* *:diffsplit*
+ 		Open a new window on the file {filename}.  The options are set
+ 		as for "vimdiff" for the current and the newly opened window.
+ 		Also see 'diffexpr'.
+ 
+ 							*:difft* *:diffthis*
+-:diffthis	Make the current window part of the diff windows.  This sets
++:difft[his]	Make the current window part of the diff windows.  This sets
+ 		the options like for "vimdiff".
+ 
+-:diffpatch {patchfile}				 *E816* *:diffp* *:diffpatch*
++:diffp[atch] {patchfile}				 *E816* *:diffp* *:diffpatch*
+ 		Use the current buffer, patch it with the diff found in
+ 		{patchfile} and open a buffer on the result.  The options are
+ 		set as for "vimdiff".
+@@ -123,9 +123,9 @@
+ file for a moment and come back to the same file and be in diff mode again.
+ 
+ 							*:diffo* *:diffoff*
+-:diffoff	Switch off diff mode for the current window.
++:diffo[ff]	Switch off diff mode for the current window.
+ 
+-:diffoff!	Switch off diff mode for the current window and in all windows
++:diffo[ff]!	Switch off diff mode for the current window and in all windows
+ 		in the current tab page where 'diff' is set.
+ 
+ The ":diffoff" command resets the relevant options to their default value.
+@@ -167,8 +167,8 @@
+ possible to view the changes you have made to a buffer since the file was
+ loaded.  Since Vim doesn't allow having two buffers for the same file, you
+ need another buffer.  This command is useful: >
+-	 command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
+-	 	\ | wincmd p | diffthis
++	 command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_
++	 	\ | diffthis | wincmd p | diffthis
+ (this is in |vimrc_example.vim|).  Use ":DiffOrig" to see the differences
+ between the current buffer and the file it was loaded from.
+ 
+@@ -178,7 +178,7 @@
+ nodiff" before hiding it.
+ 
+ 							*:diffu* *:diffupdate*
+-:diffu[pdate]			Update the diff highlighting and folds.
++:diffu[pdate][!]		Update the diff highlighting and folds.
+ 
+ Vim attempts to keep the differences updated when you make changes to the
+ text.  This mostly takes care of inserted and deleted lines.  Changes within a
+@@ -187,6 +187,9 @@
+ 
+ 	:diffupdate
+ 
++If the ! is included Vim will check if the file was changed externally and
++needs to be reloaded.  It will prompt for each changed file, like `:checktime`
++was used.
+ 
+ Vim will show filler lines for lines that are missing in one window but are
+ present in another.  These lines were inserted in another file or deleted in
+@@ -217,7 +220,7 @@
+ 				that parts in the middle that are still the
+ 				same are highlighted anyway.  Only "iwhite" of
+ 				'diffopt' is used here.
+-|hl-DiffDelete| DiffDelete	Deleted lines.  Also called filler lines,
++|hl-DiffDelete|	DiffDelete	Deleted lines.  Also called filler lines,
+ 				because they don't really exist in this
+ 				buffer.
+ 
+@@ -261,10 +264,12 @@
+ 							*do*
+ do		Same as ":diffget" without argument or range.  The "o" stands
+ 		for "obtain" ("dg" can't be used, it could be the start of
+-		"dgg"!).
++		"dgg"!). Note: this doesn't work in Visual mode.
+ 
+ 							*dp*
+ dp		Same as ":diffput" without argument or range.
++		Note: this doesn't work in Visual mode.
++
+ 
+ When no [range] is given, the diff at the cursor position or just above it is
+ affected.  When [range] is used, Vim tries to only put or get the specified
+@@ -328,7 +333,7 @@
+ 
+ The "1a2" item appends the line "bbb".
+ The "4d4" item deletes the line "111".
+-The '7c7" item replaces the line "GGG" with "ggg".
++The "7c7" item replaces the line "GGG" with "ggg".
+ 
+ When 'diffexpr' is not empty, Vim evaluates it to obtain a diff file in the
+ format mentioned.  These variables are set to the file names used:
+@@ -371,9 +376,9 @@
+ If it's not clear what the problem is set the 'verbose' option to one or more
+ to see more messages.
+ 
+-The self-installing Vim includes a diff program.  If you don't have it you
+-might want to download a diff.exe.  For example from
+-http://jlb.twu.net/code/unixkit.php.
++The self-installing Vim for MS-Windows includes a diff program.  If you don't
++have it you might want to download a diff.exe.  For example from
++http://gnuwin32.sourceforge.net/packages/diffutils.htm.
+ 
+ 
+ USING PATCHES					*diff-patchexpr*
+diff -Naur vim73.orig/runtime/doc/digraph.txt vim73/runtime/doc/digraph.txt
+--- vim73.orig/runtime/doc/digraph.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/digraph.txt	2013-06-07 17:07:08.392318043 +0000
+@@ -1,4 +1,4 @@
+-*digraph.txt*   For Vim version 7.3.  Last change: 2010 Apr 11
++*digraph.txt*   For Vim version 7.3.  Last change: 2011 Jan 15
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -40,7 +40,7 @@
+ disabled, the ":digraph" command will display an error message.
+ 
+ Example of the output of ":digraphs": >
+- TH Þ  222  ss ß  223  a! à  224  a' á  225  a> â  226  a? ã  227  a: ä  228
++ TH Ã  222  ss Ã  223  a! Ã   224  a' Ã¡  225  a> Ã¢  226  a? Ã£  227  a: Ã€  228
+ 
+ The first two characters in each column are the characters you have to type to
+ enter the digraph.
+@@ -156,7 +156,7 @@
+ 	Five			5	Hiragana
+ 	Six			6	Katakana
+ 
+-Example: a: is ä  and o: is ö
++Example: a: is Ã€  and o: is Ã¶
+ 
+ These are the RFC1345 digraphs for the one-byte characters.  See the output of
+ ":digraphs" for the others.  The characters above 255 are only available when
+@@ -251,100 +251,1233 @@
+ ~^	PM	0x9e	158	PRIVACY MESSAGE (PM)
+ ~_	AC	0x9f	159	APPLICATION PROGRAM COMMAND (APC)
+ |	NS	0xa0	160	NO-BREAK SPACE
+-¡	!I	0xa1	161	INVERTED EXCLAMATION MARK
+-¢	Ct	0xa2	162	CENT SIGN
+-£	Pd	0xa3	163	POUND SIGN
+-€	Cu	0xa4	164	CURRENCY SIGN
+-¥	Ye	0xa5	165	YEN SIGN
+-Š	BB	0xa6	166	BROKEN BAR
+-§	SE	0xa7	167	SECTION SIGN
+-š	':	0xa8	168	DIAERESIS
+-©	Co	0xa9	169	COPYRIGHT SIGN
+-ª	-a	0xaa	170	FEMININE ORDINAL INDICATOR
+-«	<<	0xab	171	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+-¬	NO	0xac	172	NOT SIGN
+-­	--	0xad	173	SOFT HYPHEN
+-®	Rg	0xae	174	REGISTERED SIGN
+-¯	'm	0xaf	175	MACRON
+-°	DG	0xb0	176	DEGREE SIGN
+-±	+-	0xb1	177	PLUS-MINUS SIGN
+-²	2S	0xb2	178	SUPERSCRIPT TWO
+-³	3S	0xb3	179	SUPERSCRIPT THREE
+-Ž	''	0xb4	180	ACUTE ACCENT
+-µ	My	0xb5	181	MICRO SIGN
+-¶	PI	0xb6	182	PILCROW SIGN
+-·	.M	0xb7	183	MIDDLE DOT
+-ž	',	0xb8	184	CEDILLA
+-¹	1S	0xb9	185	SUPERSCRIPT ONE
+-º	-o	0xba	186	MASCULINE ORDINAL INDICATOR
+-»	>>	0xbb	187	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+-Œ	14	0xbc	188	VULGAR FRACTION ONE QUARTER
+-œ	12	0xbd	189	VULGAR FRACTION ONE HALF
+-Ÿ	34	0xbe	190	VULGAR FRACTION THREE QUARTERS
+-¿	?I	0xbf	191	INVERTED QUESTION MARK
+-À	A!	0xc0	192	LATIN CAPITAL LETTER A WITH GRAVE
+-Á	A'	0xc1	193	LATIN CAPITAL LETTER A WITH ACUTE
+-Â	A>	0xc2	194	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+-Ã	A?	0xc3	195	LATIN CAPITAL LETTER A WITH TILDE
+-Ä	A:	0xc4	196	LATIN CAPITAL LETTER A WITH DIAERESIS
+-Å	AA	0xc5	197	LATIN CAPITAL LETTER A WITH RING ABOVE
+-Æ	AE	0xc6	198	LATIN CAPITAL LETTER AE
+-Ç	C,	0xc7	199	LATIN CAPITAL LETTER C WITH CEDILLA
+-È	E!	0xc8	200	LATIN CAPITAL LETTER E WITH GRAVE
+-É	E'	0xc9	201	LATIN CAPITAL LETTER E WITH ACUTE
+-Ê	E>	0xca	202	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+-Ë	E:	0xcb	203	LATIN CAPITAL LETTER E WITH DIAERESIS
+-Ì	I!	0xcc	204	LATIN CAPITAL LETTER I WITH GRAVE
+-Í	I'	0xcd	205	LATIN CAPITAL LETTER I WITH ACUTE
+-Î	I>	0xce	206	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+-Ï	I:	0xcf	207	LATIN CAPITAL LETTER I WITH DIAERESIS
+-Ð	D-	0xd0	208	LATIN CAPITAL LETTER ETH (Icelandic)
+-Ñ	N?	0xd1	209	LATIN CAPITAL LETTER N WITH TILDE
+-Ò	O!	0xd2	210	LATIN CAPITAL LETTER O WITH GRAVE
+-Ó	O'	0xd3	211	LATIN CAPITAL LETTER O WITH ACUTE
+-Ô	O>	0xd4	212	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+-Õ	O?	0xd5	213	LATIN CAPITAL LETTER O WITH TILDE
+-Ö	O:	0xd6	214	LATIN CAPITAL LETTER O WITH DIAERESIS
+-×	*X	0xd7	215	MULTIPLICATION SIGN
+-Ø	O/	0xd8	216	LATIN CAPITAL LETTER O WITH STROKE
+-Ù	U!	0xd9	217	LATIN CAPITAL LETTER U WITH GRAVE
+-Ú	U'	0xda	218	LATIN CAPITAL LETTER U WITH ACUTE
+-Û	U>	0xdb	219	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+-Ü	U:	0xdc	220	LATIN CAPITAL LETTER U WITH DIAERESIS
+-Ý	Y'	0xdd	221	LATIN CAPITAL LETTER Y WITH ACUTE
+-Þ	TH	0xde	222	LATIN CAPITAL LETTER THORN (Icelandic)
+-ß	ss	0xdf	223	LATIN SMALL LETTER SHARP S (German)
+-à	a!	0xe0	224	LATIN SMALL LETTER A WITH GRAVE
+-á	a'	0xe1	225	LATIN SMALL LETTER A WITH ACUTE
+-â	a>	0xe2	226	LATIN SMALL LETTER A WITH CIRCUMFLEX
+-ã	a?	0xe3	227	LATIN SMALL LETTER A WITH TILDE
+-ä	a:	0xe4	228	LATIN SMALL LETTER A WITH DIAERESIS
+-å	aa	0xe5	229	LATIN SMALL LETTER A WITH RING ABOVE
+-æ	ae	0xe6	230	LATIN SMALL LETTER AE
+-ç	c,	0xe7	231	LATIN SMALL LETTER C WITH CEDILLA
+-è	e!	0xe8	232	LATIN SMALL LETTER E WITH GRAVE
+-é	e'	0xe9	233	LATIN SMALL LETTER E WITH ACUTE
+-ê	e>	0xea	234	LATIN SMALL LETTER E WITH CIRCUMFLEX
+-ë	e:	0xeb	235	LATIN SMALL LETTER E WITH DIAERESIS
+-ì	i!	0xec	236	LATIN SMALL LETTER I WITH GRAVE
+-í	i'	0xed	237	LATIN SMALL LETTER I WITH ACUTE
+-î	i>	0xee	238	LATIN SMALL LETTER I WITH CIRCUMFLEX
+-ï	i:	0xef	239	LATIN SMALL LETTER I WITH DIAERESIS
+-ð	d-	0xf0	240	LATIN SMALL LETTER ETH (Icelandic)
+-ñ	n?	0xf1	241	LATIN SMALL LETTER N WITH TILDE
+-ò	o!	0xf2	242	LATIN SMALL LETTER O WITH GRAVE
+-ó	o'	0xf3	243	LATIN SMALL LETTER O WITH ACUTE
+-ô	o>	0xf4	244	LATIN SMALL LETTER O WITH CIRCUMFLEX
+-õ	o?	0xf5	245	LATIN SMALL LETTER O WITH TILDE
+-ö	o:	0xf6	246	LATIN SMALL LETTER O WITH DIAERESIS
+-÷	-:	0xf7	247	DIVISION SIGN
+-ø	o/	0xf8	248	LATIN SMALL LETTER O WITH STROKE
+-ù	u!	0xf9	249	LATIN SMALL LETTER U WITH GRAVE
+-ú	u'	0xfa	250	LATIN SMALL LETTER U WITH ACUTE
+-û	u>	0xfb	251	LATIN SMALL LETTER U WITH CIRCUMFLEX
+-ü	u:	0xfc	252	LATIN SMALL LETTER U WITH DIAERESIS
+-ý	y'	0xfd	253	LATIN SMALL LETTER Y WITH ACUTE
+-þ	th	0xfe	254	LATIN SMALL LETTER THORN (Icelandic)
+-ÿ	y:	0xff	255	LATIN SMALL LETTER Y WITH DIAERESIS
++Â¡	!I	0xa1	161	INVERTED EXCLAMATION MARK
++Â¢	Ct	0xa2	162	CENT SIGN
++Â£	Pd	0xa3	163	POUND SIGN
++Â€	Cu	0xa4	164	CURRENCY SIGN
++Â¥	Ye	0xa5	165	YEN SIGN
++ÂŠ	BB	0xa6	166	BROKEN BAR
++Â§	SE	0xa7	167	SECTION SIGN
++Âš	':	0xa8	168	DIAERESIS
++Â©	Co	0xa9	169	COPYRIGHT SIGN
++Âª	-a	0xaa	170	FEMININE ORDINAL INDICATOR
++Â«	<<	0xab	171	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
++Â¬	NO	0xac	172	NOT SIGN
++Â­	--	0xad	173	SOFT HYPHEN
++Â®	Rg	0xae	174	REGISTERED SIGN
++Â¯	'm	0xaf	175	MACRON
++Â°	DG	0xb0	176	DEGREE SIGN
++Â±	+-	0xb1	177	PLUS-MINUS SIGN
++Â²	2S	0xb2	178	SUPERSCRIPT TWO
++Â³	3S	0xb3	179	SUPERSCRIPT THREE
++ÂŽ	''	0xb4	180	ACUTE ACCENT
++Âµ	My	0xb5	181	MICRO SIGN
++Â¶	PI	0xb6	182	PILCROW SIGN
++Â·	.M	0xb7	183	MIDDLE DOT
++Âž	',	0xb8	184	CEDILLA
++Â¹	1S	0xb9	185	SUPERSCRIPT ONE
++Âº	-o	0xba	186	MASCULINE ORDINAL INDICATOR
++Â»	>>	0xbb	187	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
++ÂŒ	14	0xbc	188	VULGAR FRACTION ONE QUARTER
++Âœ	12	0xbd	189	VULGAR FRACTION ONE HALF
++ÂŸ	34	0xbe	190	VULGAR FRACTION THREE QUARTERS
++Â¿	?I	0xbf	191	INVERTED QUESTION MARK
++Ã	A!	0xc0	192	LATIN CAPITAL LETTER A WITH GRAVE
++Ã	A'	0xc1	193	LATIN CAPITAL LETTER A WITH ACUTE
++Ã	A>	0xc2	194	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
++Ã	A?	0xc3	195	LATIN CAPITAL LETTER A WITH TILDE
++Ã	A:	0xc4	196	LATIN CAPITAL LETTER A WITH DIAERESIS
++Ã
+	AA	0xc5	197	LATIN CAPITAL LETTER A WITH RING ABOVE
++Ã	AE	0xc6	198	LATIN CAPITAL LETTER AE
++Ã	C,	0xc7	199	LATIN CAPITAL LETTER C WITH CEDILLA
++Ã	E!	0xc8	200	LATIN CAPITAL LETTER E WITH GRAVE
++Ã	E'	0xc9	201	LATIN CAPITAL LETTER E WITH ACUTE
++Ã	E>	0xca	202	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
++Ã	E:	0xcb	203	LATIN CAPITAL LETTER E WITH DIAERESIS
++Ã	I!	0xcc	204	LATIN CAPITAL LETTER I WITH GRAVE
++Ã	I'	0xcd	205	LATIN CAPITAL LETTER I WITH ACUTE
++Ã	I>	0xce	206	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
++Ã	I:	0xcf	207	LATIN CAPITAL LETTER I WITH DIAERESIS
++Ã	D-	0xd0	208	LATIN CAPITAL LETTER ETH (Icelandic)
++Ã	N?	0xd1	209	LATIN CAPITAL LETTER N WITH TILDE
++Ã	O!	0xd2	210	LATIN CAPITAL LETTER O WITH GRAVE
++Ã	O'	0xd3	211	LATIN CAPITAL LETTER O WITH ACUTE
++Ã	O>	0xd4	212	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
++Ã	O?	0xd5	213	LATIN CAPITAL LETTER O WITH TILDE
++Ã	O:	0xd6	214	LATIN CAPITAL LETTER O WITH DIAERESIS
++Ã	*X	0xd7	215	MULTIPLICATION SIGN
++Ã	O/	0xd8	216	LATIN CAPITAL LETTER O WITH STROKE
++Ã	U!	0xd9	217	LATIN CAPITAL LETTER U WITH GRAVE
++Ã	U'	0xda	218	LATIN CAPITAL LETTER U WITH ACUTE
++Ã	U>	0xdb	219	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
++Ã	U:	0xdc	220	LATIN CAPITAL LETTER U WITH DIAERESIS
++Ã	Y'	0xdd	221	LATIN CAPITAL LETTER Y WITH ACUTE
++Ã	TH	0xde	222	LATIN CAPITAL LETTER THORN (Icelandic)
++Ã	ss	0xdf	223	LATIN SMALL LETTER SHARP S (German)
++Ã 	a!	0xe0	224	LATIN SMALL LETTER A WITH GRAVE
++Ã¡	a'	0xe1	225	LATIN SMALL LETTER A WITH ACUTE
++Ã¢	a>	0xe2	226	LATIN SMALL LETTER A WITH CIRCUMFLEX
++Ã£	a?	0xe3	227	LATIN SMALL LETTER A WITH TILDE
++Ã€	a:	0xe4	228	LATIN SMALL LETTER A WITH DIAERESIS
++Ã¥	aa	0xe5	229	LATIN SMALL LETTER A WITH RING ABOVE
++ÃŠ	ae	0xe6	230	LATIN SMALL LETTER AE
++Ã§	c,	0xe7	231	LATIN SMALL LETTER C WITH CEDILLA
++Ãš	e!	0xe8	232	LATIN SMALL LETTER E WITH GRAVE
++Ã©	e'	0xe9	233	LATIN SMALL LETTER E WITH ACUTE
++Ãª	e>	0xea	234	LATIN SMALL LETTER E WITH CIRCUMFLEX
++Ã«	e:	0xeb	235	LATIN SMALL LETTER E WITH DIAERESIS
++Ã¬	i!	0xec	236	LATIN SMALL LETTER I WITH GRAVE
++Ã­	i'	0xed	237	LATIN SMALL LETTER I WITH ACUTE
++Ã®	i>	0xee	238	LATIN SMALL LETTER I WITH CIRCUMFLEX
++Ã¯	i:	0xef	239	LATIN SMALL LETTER I WITH DIAERESIS
++Ã°	d-	0xf0	240	LATIN SMALL LETTER ETH (Icelandic)
++Ã±	n?	0xf1	241	LATIN SMALL LETTER N WITH TILDE
++Ã²	o!	0xf2	242	LATIN SMALL LETTER O WITH GRAVE
++Ã³	o'	0xf3	243	LATIN SMALL LETTER O WITH ACUTE
++ÃŽ	o>	0xf4	244	LATIN SMALL LETTER O WITH CIRCUMFLEX
++Ãµ	o?	0xf5	245	LATIN SMALL LETTER O WITH TILDE
++Ã¶	o:	0xf6	246	LATIN SMALL LETTER O WITH DIAERESIS
++Ã·	-:	0xf7	247	DIVISION SIGN
++Ãž	o/	0xf8	248	LATIN SMALL LETTER O WITH STROKE
++Ã¹	u!	0xf9	249	LATIN SMALL LETTER U WITH GRAVE
++Ãº	u'	0xfa	250	LATIN SMALL LETTER U WITH ACUTE
++Ã»	u>	0xfb	251	LATIN SMALL LETTER U WITH CIRCUMFLEX
++ÃŒ	u:	0xfc	252	LATIN SMALL LETTER U WITH DIAERESIS
++Ãœ	y'	0xfd	253	LATIN SMALL LETTER Y WITH ACUTE
++ÃŸ	th	0xfe	254	LATIN SMALL LETTER THORN (Icelandic)
++Ã¿	y:	0xff	255	LATIN SMALL LETTER Y WITH DIAERESIS
++
++If your Vim is compiled with |multibyte| support and you are using a multibyte
++'encoding', Vim provides this enhanced set of additional digraphs:
++
++							*digraph-table-mbyte*
++char  digraph	hex	dec	official name ~
++Ä	A-	0100	0256	LATIN CAPITAL LETTER A WITH MACRON
++Ä	a-	0101	0257	LATIN SMALL LETTER A WITH MACRON
++Ä	A(	0102	0258	LATIN CAPITAL LETTER A WITH BREVE
++Ä	a(	0103	0259	LATIN SMALL LETTER A WITH BREVE
++Ä	A;	0104	0260	LATIN CAPITAL LETTER A WITH OGONEK
++Ä
+	a;	0105	0261	LATIN SMALL LETTER A WITH OGONEK
++Ä	C'	0106	0262	LATIN CAPITAL LETTER C WITH ACUTE
++Ä	c'	0107	0263	LATIN SMALL LETTER C WITH ACUTE
++Ä	C>	0108	0264	LATIN CAPITAL LETTER C WITH CIRCUMFLEX
++Ä	c>	0109	0265	LATIN SMALL LETTER C WITH CIRCUMFLEX
++Ä	C.	010A	0266	LATIN CAPITAL LETTER C WITH DOT ABOVE
++Ä	c.	010B	0267	LATIN SMALL LETTER C WITH DOT ABOVE
++Ä	C<	010C	0268	LATIN CAPITAL LETTER C WITH CARON
++Ä	c<	010D	0269	LATIN SMALL LETTER C WITH CARON
++Ä	D<	010E	0270	LATIN CAPITAL LETTER D WITH CARON
++Ä	d<	010F	0271	LATIN SMALL LETTER D WITH CARON
++Ä	D/	0110	0272	LATIN CAPITAL LETTER D WITH STROKE
++Ä	d/	0111	0273	LATIN SMALL LETTER D WITH STROKE
++Ä	E-	0112	0274	LATIN CAPITAL LETTER E WITH MACRON
++Ä	e-	0113	0275	LATIN SMALL LETTER E WITH MACRON
++Ä	E(	0114	0276	LATIN CAPITAL LETTER E WITH BREVE
++Ä	e(	0115	0277	LATIN SMALL LETTER E WITH BREVE
++Ä	E.	0116	0278	LATIN CAPITAL LETTER E WITH DOT ABOVE
++Ä	e.	0117	0279	LATIN SMALL LETTER E WITH DOT ABOVE
++Ä	E;	0118	0280	LATIN CAPITAL LETTER E WITH OGONEK
++Ä	e;	0119	0281	LATIN SMALL LETTER E WITH OGONEK
++Ä	E<	011A	0282	LATIN CAPITAL LETTER E WITH CARON
++Ä	e<	011B	0283	LATIN SMALL LETTER E WITH CARON
++Ä	G>	011C	0284	LATIN CAPITAL LETTER G WITH CIRCUMFLEX
++Ä	g>	011D	0285	LATIN SMALL LETTER G WITH CIRCUMFLEX
++Ä	G(	011E	0286	LATIN CAPITAL LETTER G WITH BREVE
++Ä	g(	011F	0287	LATIN SMALL LETTER G WITH BREVE
++Ä 	G.	0120	0288	LATIN CAPITAL LETTER G WITH DOT ABOVE
++Ä¡	g.	0121	0289	LATIN SMALL LETTER G WITH DOT ABOVE
++Ä¢	G,	0122	0290	LATIN CAPITAL LETTER G WITH CEDILLA
++Ä£	g,	0123	0291	LATIN SMALL LETTER G WITH CEDILLA
++Ä€	H>	0124	0292	LATIN CAPITAL LETTER H WITH CIRCUMFLEX
++Ä¥	h>	0125	0293	LATIN SMALL LETTER H WITH CIRCUMFLEX
++ÄŠ	H/	0126	0294	LATIN CAPITAL LETTER H WITH STROKE
++Ä§	h/	0127	0295	LATIN SMALL LETTER H WITH STROKE
++Äš	I?	0128	0296	LATIN CAPITAL LETTER I WITH TILDE
++Ä©	i?	0129	0297	LATIN SMALL LETTER I WITH TILDE
++Äª	I-	012A	0298	LATIN CAPITAL LETTER I WITH MACRON
++Ä«	i-	012B	0299	LATIN SMALL LETTER I WITH MACRON
++Ä¬	I(	012C	0300	LATIN CAPITAL LETTER I WITH BREVE
++Ä­	i(	012D	0301	LATIN SMALL LETTER I WITH BREVE
++Ä®	I;	012E	0302	LATIN CAPITAL LETTER I WITH OGONEK
++Ä¯	i;	012F	0303	LATIN SMALL LETTER I WITH OGONEK
++Ä°	I.	0130	0304	LATIN CAPITAL LETTER I WITH DOT ABOVE
++Ä±	i.	0131	0305	LATIN SMALL LETTER DOTLESS I
++Ä²	IJ	0132	0306	LATIN CAPITAL LIGATURE IJ
++Ä³	ij	0133	0307	LATIN SMALL LIGATURE IJ
++ÄŽ	J>	0134	0308	LATIN CAPITAL LETTER J WITH CIRCUMFLEX
++Äµ	j>	0135	0309	LATIN SMALL LETTER J WITH CIRCUMFLEX
++Ä¶	K,	0136	0310	LATIN CAPITAL LETTER K WITH CEDILLA
++Ä·	k,	0137	0311	LATIN SMALL LETTER K WITH CEDILLA
++Äž	kk	0138	0312	LATIN SMALL LETTER KRA
++Ä¹	L'	0139	0313	LATIN CAPITAL LETTER L WITH ACUTE
++Äº	l'	013A	0314	LATIN SMALL LETTER L WITH ACUTE
++Ä»	L,	013B	0315	LATIN CAPITAL LETTER L WITH CEDILLA
++ÄŒ	l,	013C	0316	LATIN SMALL LETTER L WITH CEDILLA
++Äœ	L<	013D	0317	LATIN CAPITAL LETTER L WITH CARON
++ÄŸ	l<	013E	0318	LATIN SMALL LETTER L WITH CARON
++Ä¿	L.	013F	0319	LATIN CAPITAL LETTER L WITH MIDDLE DOT
++Å	l.	0140	0320	LATIN SMALL LETTER L WITH MIDDLE DOT
++Å	L/	0141	0321	LATIN CAPITAL LETTER L WITH STROKE
++Å	l/	0142	0322	LATIN SMALL LETTER L WITH STROKE
++Å	N'	0143	0323	LATIN CAPITAL LETTER N WITH ACUTE `
++Å	n'	0144	0324	LATIN SMALL LETTER N WITH ACUTE `
++Å
+	N,	0145	0325	LATIN CAPITAL LETTER N WITH CEDILLA `
++Å	n,	0146	0326	LATIN SMALL LETTER N WITH CEDILLA `
++Å	N<	0147	0327	LATIN CAPITAL LETTER N WITH CARON `
++Å	n<	0148	0328	LATIN SMALL LETTER N WITH CARON `
++Å	'n	0149	0329	LATIN SMALL LETTER N PRECEDED BY APOSTROPHE `
++Å	NG	014A	0330	LATIN CAPITAL LETTER ENG
++Å	ng	014B	0331	LATIN SMALL LETTER ENG
++Å	O-	014C	0332	LATIN CAPITAL LETTER O WITH MACRON
++Å	o-	014D	0333	LATIN SMALL LETTER O WITH MACRON
++Å	O(	014E	0334	LATIN CAPITAL LETTER O WITH BREVE
++Å	o(	014F	0335	LATIN SMALL LETTER O WITH BREVE
++Å	O"	0150	0336	LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
++Å	o"	0151	0337	LATIN SMALL LETTER O WITH DOUBLE ACUTE
++Å	OE	0152	0338	LATIN CAPITAL LIGATURE OE
++Å	oe	0153	0339	LATIN SMALL LIGATURE OE
++Å	R'	0154	0340	LATIN CAPITAL LETTER R WITH ACUTE
++Å	r'	0155	0341	LATIN SMALL LETTER R WITH ACUTE
++Å	R,	0156	0342	LATIN CAPITAL LETTER R WITH CEDILLA
++Å	r,	0157	0343	LATIN SMALL LETTER R WITH CEDILLA
++Å	R<	0158	0344	LATIN CAPITAL LETTER R WITH CARON
++Å	r<	0159	0345	LATIN SMALL LETTER R WITH CARON
++Å	S'	015A	0346	LATIN CAPITAL LETTER S WITH ACUTE
++Å	s'	015B	0347	LATIN SMALL LETTER S WITH ACUTE
++Å	S>	015C	0348	LATIN CAPITAL LETTER S WITH CIRCUMFLEX
++Å	s>	015D	0349	LATIN SMALL LETTER S WITH CIRCUMFLEX
++Å	S,	015E	0350	LATIN CAPITAL LETTER S WITH CEDILLA
++Å	s,	015F	0351	LATIN SMALL LETTER S WITH CEDILLA
++Å 	S<	0160	0352	LATIN CAPITAL LETTER S WITH CARON
++Å¡	s<	0161	0353	LATIN SMALL LETTER S WITH CARON
++Å¢	T,	0162	0354	LATIN CAPITAL LETTER T WITH CEDILLA
++Å£	t,	0163	0355	LATIN SMALL LETTER T WITH CEDILLA
++Å€	T<	0164	0356	LATIN CAPITAL LETTER T WITH CARON
++Å¥	t<	0165	0357	LATIN SMALL LETTER T WITH CARON
++ÅŠ	T/	0166	0358	LATIN CAPITAL LETTER T WITH STROKE
++Å§	t/	0167	0359	LATIN SMALL LETTER T WITH STROKE
++Åš	U?	0168	0360	LATIN CAPITAL LETTER U WITH TILDE
++Å©	u?	0169	0361	LATIN SMALL LETTER U WITH TILDE
++Åª	U-	016A	0362	LATIN CAPITAL LETTER U WITH MACRON
++Å«	u-	016B	0363	LATIN SMALL LETTER U WITH MACRON
++Å¬	U(	016C	0364	LATIN CAPITAL LETTER U WITH BREVE
++Å­	u(	016D	0365	LATIN SMALL LETTER U WITH BREVE
++Å®	U0	016E	0366	LATIN CAPITAL LETTER U WITH RING ABOVE
++Å¯	u0	016F	0367	LATIN SMALL LETTER U WITH RING ABOVE
++Å°	U"	0170	0368	LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
++Å±	u"	0171	0369	LATIN SMALL LETTER U WITH DOUBLE ACUTE
++Å²	U;	0172	0370	LATIN CAPITAL LETTER U WITH OGONEK
++Å³	u;	0173	0371	LATIN SMALL LETTER U WITH OGONEK
++ÅŽ	W>	0174	0372	LATIN CAPITAL LETTER W WITH CIRCUMFLEX
++Åµ	w>	0175	0373	LATIN SMALL LETTER W WITH CIRCUMFLEX
++Å¶	Y>	0176	0374	LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
++Å·	y>	0177	0375	LATIN SMALL LETTER Y WITH CIRCUMFLEX
++Åž	Y:	0178	0376	LATIN CAPITAL LETTER Y WITH DIAERESIS
++Å¹	Z'	0179	0377	LATIN CAPITAL LETTER Z WITH ACUTE
++Åº	z'	017A	0378	LATIN SMALL LETTER Z WITH ACUTE
++Å»	Z.	017B	0379	LATIN CAPITAL LETTER Z WITH DOT ABOVE
++ÅŒ	z.	017C	0380	LATIN SMALL LETTER Z WITH DOT ABOVE
++Åœ	Z<	017D	0381	LATIN CAPITAL LETTER Z WITH CARON
++ÅŸ	z<	017E	0382	LATIN SMALL LETTER Z WITH CARON
++Æ 	O9	01A0	0416	LATIN CAPITAL LETTER O WITH HORN
++Æ¡	o9	01A1	0417	LATIN SMALL LETTER O WITH HORN
++Æ¢	OI	01A2	0418	LATIN CAPITAL LETTER OI
++Æ£	oi	01A3	0419	LATIN SMALL LETTER OI
++ÆŠ	yr	01A6	0422	LATIN LETTER YR
++Æ¯	U9	01AF	0431	LATIN CAPITAL LETTER U WITH HORN
++Æ°	u9	01B0	0432	LATIN SMALL LETTER U WITH HORN
++Æµ	Z/	01B5	0437	LATIN CAPITAL LETTER Z WITH STROKE
++Æ¶	z/	01B6	0438	LATIN SMALL LETTER Z WITH STROKE
++Æ·	ED	01B7	0439	LATIN CAPITAL LETTER EZH
++Ç	A<	01CD	0461	LATIN CAPITAL LETTER A WITH CARON
++Ç	a<	01CE	0462	LATIN SMALL LETTER A WITH CARON
++Ç	I<	01CF	0463	LATIN CAPITAL LETTER I WITH CARON
++Ç	i<	01D0	0464	LATIN SMALL LETTER I WITH CARON
++Ç	O<	01D1	0465	LATIN CAPITAL LETTER O WITH CARON
++Ç	o<	01D2	0466	LATIN SMALL LETTER O WITH CARON
++Ç	U<	01D3	0467	LATIN CAPITAL LETTER U WITH CARON
++Ç	u<	01D4	0468	LATIN SMALL LETTER U WITH CARON
++Ç	A1	01DE	0478	LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
++Ç	a1	01DF	0479	LATIN SMALL LETTER A WITH DIAERESIS AND MACRON
++Ç 	A7	01E0	0480	LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
++Ç¡	a7	01E1	0481	LATIN SMALL LETTER A WITH DOT ABOVE AND MACRON
++Ç¢	A3	01E2	0482	LATIN CAPITAL LETTER AE WITH MACRON
++Ç£	a3	01E3	0483	LATIN SMALL LETTER AE WITH MACRON
++Ç€	G/	01E4	0484	LATIN CAPITAL LETTER G WITH STROKE
++Ç¥	g/	01E5	0485	LATIN SMALL LETTER G WITH STROKE
++ÇŠ	G<	01E6	0486	LATIN CAPITAL LETTER G WITH CARON
++Ç§	g<	01E7	0487	LATIN SMALL LETTER G WITH CARON
++Çš	K<	01E8	0488	LATIN CAPITAL LETTER K WITH CARON
++Ç©	k<	01E9	0489	LATIN SMALL LETTER K WITH CARON
++Çª	O;	01EA	0490	LATIN CAPITAL LETTER O WITH OGONEK
++Ç«	o;	01EB	0491	LATIN SMALL LETTER O WITH OGONEK
++Ç¬	O1	01EC	0492	LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
++Ç­	o1	01ED	0493	LATIN SMALL LETTER O WITH OGONEK AND MACRON
++Ç®	EZ	01EE	0494	LATIN CAPITAL LETTER EZH WITH CARON
++Ç¯	ez	01EF	0495	LATIN SMALL LETTER EZH WITH CARON
++Ç°	j<	01F0	0496	LATIN SMALL LETTER J WITH CARON
++ÇŽ	G'	01F4	0500	LATIN CAPITAL LETTER G WITH ACUTE
++Çµ	g'	01F5	0501	LATIN SMALL LETTER G WITH ACUTE
++Ê¿	;S	02BF	0703	MODIFIER LETTER LEFT HALF RING
++Ë	'<	02C7	0711	CARON
++Ë	'(	02D8	0728	BREVE
++Ë	'.	02D9	0729	DOT ABOVE
++Ë	'0	02DA	0730	RING ABOVE
++Ë	';	02DB	0731	OGONEK
++Ë	'"	02DD	0733	DOUBLE ACUTE ACCENT
++Î	A%	0386	0902	GREEK CAPITAL LETTER ALPHA WITH TONOS
++Î	E%	0388	0904	GREEK CAPITAL LETTER EPSILON WITH TONOS
++Î	Y%	0389	0905	GREEK CAPITAL LETTER ETA WITH TONOS
++Î	I%	038A	0906	GREEK CAPITAL LETTER IOTA WITH TONOS
++Î	O%	038C	0908	GREEK CAPITAL LETTER OMICRON WITH TONOS
++Î	U%	038E	0910	GREEK CAPITAL LETTER UPSILON WITH TONOS
++Î	W%	038F	0911	GREEK CAPITAL LETTER OMEGA WITH TONOS
++Î	i3	0390	0912	GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
++Î	A*	0391	0913	GREEK CAPITAL LETTER ALPHA
++Î	B*	0392	0914	GREEK CAPITAL LETTER BETA
++Î	G*	0393	0915	GREEK CAPITAL LETTER GAMMA
++Î	D*	0394	0916	GREEK CAPITAL LETTER DELTA
++Î	E*	0395	0917	GREEK CAPITAL LETTER EPSILON
++Î	Z*	0396	0918	GREEK CAPITAL LETTER ZETA
++Î	Y*	0397	0919	GREEK CAPITAL LETTER ETA
++Î	H*	0398	0920	GREEK CAPITAL LETTER THETA
++Î	I*	0399	0921	GREEK CAPITAL LETTER IOTA
++Î	K*	039A	0922	GREEK CAPITAL LETTER KAPPA
++Î	L*	039B	0923	GREEK CAPITAL LETTER LAMDA
++Î	M*	039C	0924	GREEK CAPITAL LETTER MU
++Î	N*	039D	0925	GREEK CAPITAL LETTER NU
++Î	C*	039E	0926	GREEK CAPITAL LETTER XI
++Î	O*	039F	0927	GREEK CAPITAL LETTER OMICRON
++Î 	P*	03A0	0928	GREEK CAPITAL LETTER PI
++Î¡	R*	03A1	0929	GREEK CAPITAL LETTER RHO
++Î£	S*	03A3	0931	GREEK CAPITAL LETTER SIGMA
++Î€	T*	03A4	0932	GREEK CAPITAL LETTER TAU
++Î¥	U*	03A5	0933	GREEK CAPITAL LETTER UPSILON
++ÎŠ	F*	03A6	0934	GREEK CAPITAL LETTER PHI
++Î§	X*	03A7	0935	GREEK CAPITAL LETTER CHI
++Îš	Q*	03A8	0936	GREEK CAPITAL LETTER PSI
++Î©	W*	03A9	0937	GREEK CAPITAL LETTER OMEGA
++Îª	J*	03AA	0938	GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
++Î«	V*	03AB	0939	GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
++Î¬	a%	03AC	0940	GREEK SMALL LETTER ALPHA WITH TONOS
++Î­	e%	03AD	0941	GREEK SMALL LETTER EPSILON WITH TONOS
++Î®	y%	03AE	0942	GREEK SMALL LETTER ETA WITH TONOS
++Î¯	i%	03AF	0943	GREEK SMALL LETTER IOTA WITH TONOS
++Î°	u3	03B0	0944	GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
++Î±	a*	03B1	0945	GREEK SMALL LETTER ALPHA
++Î²	b*	03B2	0946	GREEK SMALL LETTER BETA
++Î³	g*	03B3	0947	GREEK SMALL LETTER GAMMA
++ÎŽ	d*	03B4	0948	GREEK SMALL LETTER DELTA
++Îµ	e*	03B5	0949	GREEK SMALL LETTER EPSILON
++Î¶	z*	03B6	0950	GREEK SMALL LETTER ZETA
++Î·	y*	03B7	0951	GREEK SMALL LETTER ETA
++Îž	h*	03B8	0952	GREEK SMALL LETTER THETA
++Î¹	i*	03B9	0953	GREEK SMALL LETTER IOTA
++Îº	k*	03BA	0954	GREEK SMALL LETTER KAPPA
++Î»	l*	03BB	0955	GREEK SMALL LETTER LAMDA
++ÎŒ	m*	03BC	0956	GREEK SMALL LETTER MU
++Îœ	n*	03BD	0957	GREEK SMALL LETTER NU
++ÎŸ	c*	03BE	0958	GREEK SMALL LETTER XI
++Î¿	o*	03BF	0959	GREEK SMALL LETTER OMICRON
++Ï	p*	03C0	0960	GREEK SMALL LETTER PI
++Ï	r*	03C1	0961	GREEK SMALL LETTER RHO
++Ï	*s	03C2	0962	GREEK SMALL LETTER FINAL SIGMA
++Ï	s*	03C3	0963	GREEK SMALL LETTER SIGMA
++Ï	t*	03C4	0964	GREEK SMALL LETTER TAU
++Ï
+	u*	03C5	0965	GREEK SMALL LETTER UPSILON
++Ï	f*	03C6	0966	GREEK SMALL LETTER PHI
++Ï	x*	03C7	0967	GREEK SMALL LETTER CHI
++Ï	q*	03C8	0968	GREEK SMALL LETTER PSI
++Ï	w*	03C9	0969	GREEK SMALL LETTER OMEGA
++Ï	j*	03CA	0970	GREEK SMALL LETTER IOTA WITH DIALYTIKA
++Ï	v*	03CB	0971	GREEK SMALL LETTER UPSILON WITH DIALYTIKA
++Ï	o%	03CC	0972	GREEK SMALL LETTER OMICRON WITH TONOS
++Ï	u%	03CD	0973	GREEK SMALL LETTER UPSILON WITH TONOS
++Ï	w%	03CE	0974	GREEK SMALL LETTER OMEGA WITH TONOS
++Ï	'G	03D8	0984	GREEK LETTER ARCHAIC KOPPA
++Ï	,G	03D9	0985	GREEK SMALL LETTER ARCHAIC KOPPA
++Ï	T3	03DA	0986	GREEK LETTER STIGMA
++Ï	t3	03DB	0987	GREEK SMALL LETTER STIGMA
++Ï	M3	03DC	0988	GREEK LETTER DIGAMMA
++Ï	m3	03DD	0989	GREEK SMALL LETTER DIGAMMA
++Ï	K3	03DE	0990	GREEK LETTER KOPPA
++Ï	k3	03DF	0991	GREEK SMALL LETTER KOPPA
++Ï 	P3	03E0	0992	GREEK LETTER SAMPI
++Ï¡	p3	03E1	0993	GREEK SMALL LETTER SAMPI
++ÏŽ	'%	03F4	1012	GREEK CAPITAL THETA SYMBOL
++Ïµ	j3	03F5	1013	GREEK LUNATE EPSILON SYMBOL
++Ð	IO	0401	1025	CYRILLIC CAPITAL LETTER IO
++Ð	D%	0402	1026	CYRILLIC CAPITAL LETTER DJE
++Ð	G%	0403	1027	CYRILLIC CAPITAL LETTER GJE
++Ð	IE	0404	1028	CYRILLIC CAPITAL LETTER UKRAINIAN IE
++Ð
+	DS	0405	1029	CYRILLIC CAPITAL LETTER DZE
++Ð	II	0406	1030	CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
++Ð	YI	0407	1031	CYRILLIC CAPITAL LETTER YI
++Ð	J%	0408	1032	CYRILLIC CAPITAL LETTER JE
++Ð	LJ	0409	1033	CYRILLIC CAPITAL LETTER LJE
++Ð	NJ	040A	1034	CYRILLIC CAPITAL LETTER NJE
++Ð	Ts	040B	1035	CYRILLIC CAPITAL LETTER TSHE
++Ð	KJ	040C	1036	CYRILLIC CAPITAL LETTER KJE
++Ð	V%	040E	1038	CYRILLIC CAPITAL LETTER SHORT U
++Ð	DZ	040F	1039	CYRILLIC CAPITAL LETTER DZHE
++Ð	A=	0410	1040	CYRILLIC CAPITAL LETTER A
++Ð	B=	0411	1041	CYRILLIC CAPITAL LETTER BE
++Ð	V=	0412	1042	CYRILLIC CAPITAL LETTER VE
++Ð	G=	0413	1043	CYRILLIC CAPITAL LETTER GHE
++Ð	D=	0414	1044	CYRILLIC CAPITAL LETTER DE
++Ð	E=	0415	1045	CYRILLIC CAPITAL LETTER IE
++Ð	Z%	0416	1046	CYRILLIC CAPITAL LETTER ZHE
++Ð	Z=	0417	1047	CYRILLIC CAPITAL LETTER ZE
++Ð	I=	0418	1048	CYRILLIC CAPITAL LETTER I
++Ð	J=	0419	1049	CYRILLIC CAPITAL LETTER SHORT I
++Ð	K=	041A	1050	CYRILLIC CAPITAL LETTER KA
++Ð	L=	041B	1051	CYRILLIC CAPITAL LETTER EL
++Ð	M=	041C	1052	CYRILLIC CAPITAL LETTER EM
++Ð	N=	041D	1053	CYRILLIC CAPITAL LETTER EN
++Ð	O=	041E	1054	CYRILLIC CAPITAL LETTER O
++Ð	P=	041F	1055	CYRILLIC CAPITAL LETTER PE
++Ð 	R=	0420	1056	CYRILLIC CAPITAL LETTER ER
++Ð¡	S=	0421	1057	CYRILLIC CAPITAL LETTER ES
++Ð¢	T=	0422	1058	CYRILLIC CAPITAL LETTER TE
++Ð£	U=	0423	1059	CYRILLIC CAPITAL LETTER U
++Ð€	F=	0424	1060	CYRILLIC CAPITAL LETTER EF
++Ð¥	H=	0425	1061	CYRILLIC CAPITAL LETTER HA
++ÐŠ	C=	0426	1062	CYRILLIC CAPITAL LETTER TSE
++Ð§	C%	0427	1063	CYRILLIC CAPITAL LETTER CHE
++Ðš	S%	0428	1064	CYRILLIC CAPITAL LETTER SHA
++Ð©	Sc	0429	1065	CYRILLIC CAPITAL LETTER SHCHA
++Ðª	="	042A	1066	CYRILLIC CAPITAL LETTER HARD SIGN
++Ð«	Y=	042B	1067	CYRILLIC CAPITAL LETTER YERU
++Ð¬	%"	042C	1068	CYRILLIC CAPITAL LETTER SOFT SIGN
++Ð­	JE	042D	1069	CYRILLIC CAPITAL LETTER E
++Ð®	JU	042E	1070	CYRILLIC CAPITAL LETTER YU
++Ð¯	JA	042F	1071	CYRILLIC CAPITAL LETTER YA
++Ð°	a=	0430	1072	CYRILLIC SMALL LETTER A
++Ð±	b=	0431	1073	CYRILLIC SMALL LETTER BE
++Ð²	v=	0432	1074	CYRILLIC SMALL LETTER VE
++Ð³	g=	0433	1075	CYRILLIC SMALL LETTER GHE
++ÐŽ	d=	0434	1076	CYRILLIC SMALL LETTER DE
++Ðµ	e=	0435	1077	CYRILLIC SMALL LETTER IE
++Ð¶	z%	0436	1078	CYRILLIC SMALL LETTER ZHE
++Ð·	z=	0437	1079	CYRILLIC SMALL LETTER ZE
++Ðž	i=	0438	1080	CYRILLIC SMALL LETTER I
++Ð¹	j=	0439	1081	CYRILLIC SMALL LETTER SHORT I
++Ðº	k=	043A	1082	CYRILLIC SMALL LETTER KA
++Ð»	l=	043B	1083	CYRILLIC SMALL LETTER EL
++ÐŒ	m=	043C	1084	CYRILLIC SMALL LETTER EM
++Ðœ	n=	043D	1085	CYRILLIC SMALL LETTER EN
++ÐŸ	o=	043E	1086	CYRILLIC SMALL LETTER O
++Ð¿	p=	043F	1087	CYRILLIC SMALL LETTER PE
++Ñ	r=	0440	1088	CYRILLIC SMALL LETTER ER
++Ñ	s=	0441	1089	CYRILLIC SMALL LETTER ES
++Ñ	t=	0442	1090	CYRILLIC SMALL LETTER TE
++Ñ	u=	0443	1091	CYRILLIC SMALL LETTER U
++Ñ	f=	0444	1092	CYRILLIC SMALL LETTER EF
++Ñ
+	h=	0445	1093	CYRILLIC SMALL LETTER HA
++Ñ	c=	0446	1094	CYRILLIC SMALL LETTER TSE
++Ñ	c%	0447	1095	CYRILLIC SMALL LETTER CHE
++Ñ	s%	0448	1096	CYRILLIC SMALL LETTER SHA
++Ñ	sc	0449	1097	CYRILLIC SMALL LETTER SHCHA
++Ñ	='	044A	1098	CYRILLIC SMALL LETTER HARD SIGN
++Ñ	y=	044B	1099	CYRILLIC SMALL LETTER YERU
++Ñ	%'	044C	1100	CYRILLIC SMALL LETTER SOFT SIGN
++Ñ	je	044D	1101	CYRILLIC SMALL LETTER E
++Ñ	ju	044E	1102	CYRILLIC SMALL LETTER YU
++Ñ	ja	044F	1103	CYRILLIC SMALL LETTER YA
++Ñ	io	0451	1105	CYRILLIC SMALL LETTER IO
++Ñ	d%	0452	1106	CYRILLIC SMALL LETTER DJE
++Ñ	g%	0453	1107	CYRILLIC SMALL LETTER GJE
++Ñ	ie	0454	1108	CYRILLIC SMALL LETTER UKRAINIAN IE
++Ñ	ds	0455	1109	CYRILLIC SMALL LETTER DZE
++Ñ	ii	0456	1110	CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
++Ñ	yi	0457	1111	CYRILLIC SMALL LETTER YI
++Ñ	j%	0458	1112	CYRILLIC SMALL LETTER JE
++Ñ	lj	0459	1113	CYRILLIC SMALL LETTER LJE
++Ñ	nj	045A	1114	CYRILLIC SMALL LETTER NJE
++Ñ	ts	045B	1115	CYRILLIC SMALL LETTER TSHE
++Ñ	kj	045C	1116	CYRILLIC SMALL LETTER KJE
++Ñ	v%	045E	1118	CYRILLIC SMALL LETTER SHORT U
++Ñ	dz	045F	1119	CYRILLIC SMALL LETTER DZHE
++Ñ¢	Y3	0462	1122	CYRILLIC CAPITAL LETTER YAT
++Ñ£	y3	0463	1123	CYRILLIC SMALL LETTER YAT
++Ñª	O3	046A	1130	CYRILLIC CAPITAL LETTER BIG YUS
++Ñ«	o3	046B	1131	CYRILLIC SMALL LETTER BIG YUS
++Ñ²	F3	0472	1138	CYRILLIC CAPITAL LETTER FITA
++Ñ³	f3	0473	1139	CYRILLIC SMALL LETTER FITA
++ÑŽ	V3	0474	1140	CYRILLIC CAPITAL LETTER IZHITSA
++Ñµ	v3	0475	1141	CYRILLIC SMALL LETTER IZHITSA
++Ò	C3	0480	1152	CYRILLIC CAPITAL LETTER KOPPA
++Ò	c3	0481	1153	CYRILLIC SMALL LETTER KOPPA
++Ò	G3	0490	1168	CYRILLIC CAPITAL LETTER GHE WITH UPTURN
++Ò	g3	0491	1169	CYRILLIC SMALL LETTER GHE WITH UPTURN
++×	A+	05D0	1488	HEBREW LETTER ALEF
++×	B+	05D1	1489	HEBREW LETTER BET
++×	G+	05D2	1490	HEBREW LETTER GIMEL
++×	D+	05D3	1491	HEBREW LETTER DALET
++×	H+	05D4	1492	HEBREW LETTER HE
++×	W+	05D5	1493	HEBREW LETTER VAV
++×	Z+	05D6	1494	HEBREW LETTER ZAYIN
++×	X+	05D7	1495	HEBREW LETTER HET
++×	Tj	05D8	1496	HEBREW LETTER TET
++×	J+	05D9	1497	HEBREW LETTER YOD
++×	K%	05DA	1498	HEBREW LETTER FINAL KAF
++×	K+	05DB	1499	HEBREW LETTER KAF
++×	L+	05DC	1500	HEBREW LETTER LAMED
++×	M%	05DD	1501	HEBREW LETTER FINAL MEM
++×	M+	05DE	1502	HEBREW LETTER MEM
++×	N%	05DF	1503	HEBREW LETTER FINAL NUN `
++× 	N+	05E0	1504	HEBREW LETTER NUN `
++×¡	S+	05E1	1505	HEBREW LETTER SAMEKH
++×¢	E+	05E2	1506	HEBREW LETTER AYIN
++×£	P%	05E3	1507	HEBREW LETTER FINAL PE
++×€	P+	05E4	1508	HEBREW LETTER PE
++×¥	Zj	05E5	1509	HEBREW LETTER FINAL TSADI
++×Š	ZJ	05E6	1510	HEBREW LETTER TSADI
++×§	Q+	05E7	1511	HEBREW LETTER QOF
++×š	R+	05E8	1512	HEBREW LETTER RESH
++×©	Sh	05E9	1513	HEBREW LETTER SHIN
++×ª	T+	05EA	1514	HEBREW LETTER TAV
++Ø	,+	060C	1548	ARABIC COMMA
++Ø	;+	061B	1563	ARABIC SEMICOLON
++Ø	?+	061F	1567	ARABIC QUESTION MARK
++Ø¡	H'	0621	1569	ARABIC LETTER HAMZA
++Ø¢	aM	0622	1570	ARABIC LETTER ALEF WITH MADDA ABOVE
++Ø£	aH	0623	1571	ARABIC LETTER ALEF WITH HAMZA ABOVE
++Ø€	wH	0624	1572	ARABIC LETTER WAW WITH HAMZA ABOVE
++Ø¥	ah	0625	1573	ARABIC LETTER ALEF WITH HAMZA BELOW
++ØŠ	yH	0626	1574	ARABIC LETTER YEH WITH HAMZA ABOVE
++Ø§	a+	0627	1575	ARABIC LETTER ALEF
++Øš	b+	0628	1576	ARABIC LETTER BEH
++Ø©	tm	0629	1577	ARABIC LETTER TEH MARBUTA
++Øª	t+	062A	1578	ARABIC LETTER TEH
++Ø«	tk	062B	1579	ARABIC LETTER THEH
++Ø¬	g+	062C	1580	ARABIC LETTER JEEM
++Ø­	hk	062D	1581	ARABIC LETTER HAH
++Ø®	x+	062E	1582	ARABIC LETTER KHAH
++Ø¯	d+	062F	1583	ARABIC LETTER DAL
++Ø°	dk	0630	1584	ARABIC LETTER THAL
++Ø±	r+	0631	1585	ARABIC LETTER REH
++Ø²	z+	0632	1586	ARABIC LETTER ZAIN
++Ø³	s+	0633	1587	ARABIC LETTER SEEN
++ØŽ	sn	0634	1588	ARABIC LETTER SHEEN
++Øµ	c+	0635	1589	ARABIC LETTER SAD
++Ø¶	dd	0636	1590	ARABIC LETTER DAD
++Ø·	tj	0637	1591	ARABIC LETTER TAH
++Øž	zH	0638	1592	ARABIC LETTER ZAH
++Ø¹	e+	0639	1593	ARABIC LETTER AIN
++Øº	i+	063A	1594	ARABIC LETTER GHAIN
++Ù	++	0640	1600	ARABIC TATWEEL
++Ù	f+	0641	1601	ARABIC LETTER FEH
++Ù	q+	0642	1602	ARABIC LETTER QAF
++Ù	k+	0643	1603	ARABIC LETTER KAF
++Ù	l+	0644	1604	ARABIC LETTER LAM
++Ù
+	m+	0645	1605	ARABIC LETTER MEEM
++Ù	n+	0646	1606	ARABIC LETTER NOON
++Ù	h+	0647	1607	ARABIC LETTER HEH
++Ù	w+	0648	1608	ARABIC LETTER WAW
++Ù	j+	0649	1609	ARABIC LETTER ALEF MAKSURA
++Ù	y+	064A	1610	ARABIC LETTER YEH
++Ù	:+	064B	1611	ARABIC FATHATAN
++Ù	"+	064C	1612	ARABIC DAMMATAN
++Ù	=+	064D	1613	ARABIC KASRATAN
++Ù	/+	064E	1614	ARABIC FATHA
++Ù	'+	064F	1615	ARABIC DAMMA
++Ù	1+	0650	1616	ARABIC KASRA
++Ù	3+	0651	1617	ARABIC SHADDA
++Ù	0+	0652	1618	ARABIC SUKUN
++Ù°	aS	0670	1648	ARABIC LETTER SUPERSCRIPT ALEF
++ÙŸ	p+	067E	1662	ARABIC LETTER PEH
++Ú€	v+	06A4	1700	ARABIC LETTER VEH
++Ú¯	gf	06AF	1711	ARABIC LETTER GAF
++Û°	0a	06F0	1776	EXTENDED ARABIC-INDIC DIGIT ZERO
++Û±	1a	06F1	1777	EXTENDED ARABIC-INDIC DIGIT ONE
++Û²	2a	06F2	1778	EXTENDED ARABIC-INDIC DIGIT TWO
++Û³	3a	06F3	1779	EXTENDED ARABIC-INDIC DIGIT THREE
++ÛŽ	4a	06F4	1780	EXTENDED ARABIC-INDIC DIGIT FOUR
++Ûµ	5a	06F5	1781	EXTENDED ARABIC-INDIC DIGIT FIVE
++Û¶	6a	06F6	1782	EXTENDED ARABIC-INDIC DIGIT SIX
++Û·	7a	06F7	1783	EXTENDED ARABIC-INDIC DIGIT SEVEN
++Ûž	8a	06F8	1784	EXTENDED ARABIC-INDIC DIGIT EIGHT
++Û¹	9a	06F9	1785	EXTENDED ARABIC-INDIC DIGIT NINE
++áž	B.	1E02	7682	LATIN CAPITAL LETTER B WITH DOT ABOVE
++áž	b.	1E03	7683	LATIN SMALL LETTER B WITH DOT ABOVE
++áž	B_	1E06	7686	LATIN CAPITAL LETTER B WITH LINE BELOW
++áž	b_	1E07	7687	LATIN SMALL LETTER B WITH LINE BELOW
++áž	D.	1E0A	7690	LATIN CAPITAL LETTER D WITH DOT ABOVE
++áž	d.	1E0B	7691	LATIN SMALL LETTER D WITH DOT ABOVE
++áž	D_	1E0E	7694	LATIN CAPITAL LETTER D WITH LINE BELOW
++áž	d_	1E0F	7695	LATIN SMALL LETTER D WITH LINE BELOW
++áž	D,	1E10	7696	LATIN CAPITAL LETTER D WITH CEDILLA
++áž	d,	1E11	7697	LATIN SMALL LETTER D WITH CEDILLA
++áž	F.	1E1E	7710	LATIN CAPITAL LETTER F WITH DOT ABOVE
++áž	f.	1E1F	7711	LATIN SMALL LETTER F WITH DOT ABOVE
++áž 	G-	1E20	7712	LATIN CAPITAL LETTER G WITH MACRON
++áž¡	g-	1E21	7713	LATIN SMALL LETTER G WITH MACRON
++áž¢	H.	1E22	7714	LATIN CAPITAL LETTER H WITH DOT ABOVE
++áž£	h.	1E23	7715	LATIN SMALL LETTER H WITH DOT ABOVE
++ážŠ	H:	1E26	7718	LATIN CAPITAL LETTER H WITH DIAERESIS
++áž§	h:	1E27	7719	LATIN SMALL LETTER H WITH DIAERESIS
++ážš	H,	1E28	7720	LATIN CAPITAL LETTER H WITH CEDILLA
++áž©	h,	1E29	7721	LATIN SMALL LETTER H WITH CEDILLA
++áž°	K'	1E30	7728	LATIN CAPITAL LETTER K WITH ACUTE
++áž±	k'	1E31	7729	LATIN SMALL LETTER K WITH ACUTE
++ážŽ	K_	1E34	7732	LATIN CAPITAL LETTER K WITH LINE BELOW
++ážµ	k_	1E35	7733	LATIN SMALL LETTER K WITH LINE BELOW
++ážº	L_	1E3A	7738	LATIN CAPITAL LETTER L WITH LINE BELOW
++áž»	l_	1E3B	7739	LATIN SMALL LETTER L WITH LINE BELOW
++ážŸ	M'	1E3E	7742	LATIN CAPITAL LETTER M WITH ACUTE
++áž¿	m'	1E3F	7743	LATIN SMALL LETTER M WITH ACUTE
++á¹	M.	1E40	7744	LATIN CAPITAL LETTER M WITH DOT ABOVE
++á¹	m.	1E41	7745	LATIN SMALL LETTER M WITH DOT ABOVE
++á¹	N.	1E44	7748	LATIN CAPITAL LETTER N WITH DOT ABOVE `
++á¹
+	n.	1E45	7749	LATIN SMALL LETTER N WITH DOT ABOVE `
++á¹	N_	1E48	7752	LATIN CAPITAL LETTER N WITH LINE BELOW `
++á¹	n_	1E49	7753	LATIN SMALL LETTER N WITH LINE BELOW `
++á¹	P'	1E54	7764	LATIN CAPITAL LETTER P WITH ACUTE
++á¹	p'	1E55	7765	LATIN SMALL LETTER P WITH ACUTE
++á¹	P.	1E56	7766	LATIN CAPITAL LETTER P WITH DOT ABOVE
++á¹	p.	1E57	7767	LATIN SMALL LETTER P WITH DOT ABOVE
++á¹	R.	1E58	7768	LATIN CAPITAL LETTER R WITH DOT ABOVE
++á¹	r.	1E59	7769	LATIN SMALL LETTER R WITH DOT ABOVE
++á¹	R_	1E5E	7774	LATIN CAPITAL LETTER R WITH LINE BELOW
++á¹	r_	1E5F	7775	LATIN SMALL LETTER R WITH LINE BELOW
++á¹ 	S.	1E60	7776	LATIN CAPITAL LETTER S WITH DOT ABOVE
++á¹¡	s.	1E61	7777	LATIN SMALL LETTER S WITH DOT ABOVE
++á¹ª	T.	1E6A	7786	LATIN CAPITAL LETTER T WITH DOT ABOVE
++á¹«	t.	1E6B	7787	LATIN SMALL LETTER T WITH DOT ABOVE
++á¹®	T_	1E6E	7790	LATIN CAPITAL LETTER T WITH LINE BELOW
++á¹¯	t_	1E6F	7791	LATIN SMALL LETTER T WITH LINE BELOW
++á¹Œ	V?	1E7C	7804	LATIN CAPITAL LETTER V WITH TILDE
++á¹œ	v?	1E7D	7805	LATIN SMALL LETTER V WITH TILDE
++áº	W!	1E80	7808	LATIN CAPITAL LETTER W WITH GRAVE
++áº	w!	1E81	7809	LATIN SMALL LETTER W WITH GRAVE
++áº	W'	1E82	7810	LATIN CAPITAL LETTER W WITH ACUTE
++áº	w'	1E83	7811	LATIN SMALL LETTER W WITH ACUTE
++áº	W:	1E84	7812	LATIN CAPITAL LETTER W WITH DIAERESIS
++áº
+	w:	1E85	7813	LATIN SMALL LETTER W WITH DIAERESIS
++áº	W.	1E86	7814	LATIN CAPITAL LETTER W WITH DOT ABOVE
++áº	w.	1E87	7815	LATIN SMALL LETTER W WITH DOT ABOVE
++áº	X.	1E8A	7818	LATIN CAPITAL LETTER X WITH DOT ABOVE
++áº	x.	1E8B	7819	LATIN SMALL LETTER X WITH DOT ABOVE
++áº	X:	1E8C	7820	LATIN CAPITAL LETTER X WITH DIAERESIS
++áº	x:	1E8D	7821	LATIN SMALL LETTER X WITH DIAERESIS
++áº	Y.	1E8E	7822	LATIN CAPITAL LETTER Y WITH DOT ABOVE
++áº	y.	1E8F	7823	LATIN SMALL LETTER Y WITH DOT ABOVE
++áº	Z>	1E90	7824	LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
++áº	z>	1E91	7825	LATIN SMALL LETTER Z WITH CIRCUMFLEX
++áº	Z_	1E94	7828	LATIN CAPITAL LETTER Z WITH LINE BELOW
++áº	z_	1E95	7829	LATIN SMALL LETTER Z WITH LINE BELOW
++áº	h_	1E96	7830	LATIN SMALL LETTER H WITH LINE BELOW
++áº	t:	1E97	7831	LATIN SMALL LETTER T WITH DIAERESIS
++áº	w0	1E98	7832	LATIN SMALL LETTER W WITH RING ABOVE
++áº	y0	1E99	7833	LATIN SMALL LETTER Y WITH RING ABOVE
++áº¢	A2	1EA2	7842	LATIN CAPITAL LETTER A WITH HOOK ABOVE
++áº£	a2	1EA3	7843	LATIN SMALL LETTER A WITH HOOK ABOVE
++áºº	E2	1EBA	7866	LATIN CAPITAL LETTER E WITH HOOK ABOVE
++áº»	e2	1EBB	7867	LATIN SMALL LETTER E WITH HOOK ABOVE
++áºŒ	E?	1EBC	7868	LATIN CAPITAL LETTER E WITH TILDE
++áºœ	e?	1EBD	7869	LATIN SMALL LETTER E WITH TILDE
++á»	I2	1EC8	7880	LATIN CAPITAL LETTER I WITH HOOK ABOVE
++á»	i2	1EC9	7881	LATIN SMALL LETTER I WITH HOOK ABOVE
++á»	O2	1ECE	7886	LATIN CAPITAL LETTER O WITH HOOK ABOVE
++á»	o2	1ECF	7887	LATIN SMALL LETTER O WITH HOOK ABOVE
++á»Š	U2	1EE6	7910	LATIN CAPITAL LETTER U WITH HOOK ABOVE
++á»§	u2	1EE7	7911	LATIN SMALL LETTER U WITH HOOK ABOVE
++á»²	Y!	1EF2	7922	LATIN CAPITAL LETTER Y WITH GRAVE
++á»³	y!	1EF3	7923	LATIN SMALL LETTER Y WITH GRAVE
++á»¶	Y2	1EF6	7926	LATIN CAPITAL LETTER Y WITH HOOK ABOVE
++á»·	y2	1EF7	7927	LATIN SMALL LETTER Y WITH HOOK ABOVE
++á»ž	Y?	1EF8	7928	LATIN CAPITAL LETTER Y WITH TILDE
++á»¹	y?	1EF9	7929	LATIN SMALL LETTER Y WITH TILDE
++áŒ	;'	1F00	7936	GREEK SMALL LETTER ALPHA WITH PSILI
++áŒ	,'	1F01	7937	GREEK SMALL LETTER ALPHA WITH DASIA
++áŒ	;!	1F02	7938	GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA
++áŒ	,!	1F03	7939	GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA
++áŒ	?;	1F04	7940	GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA
++áŒ
+	?,	1F05	7941	GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA
++áŒ	!:	1F06	7942	GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI
++áŒ	?:	1F07	7943	GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI
++â	1N	2002	8194	EN SPACE
++â	1M	2003	8195	EM SPACE
++â	3M	2004	8196	THREE-PER-EM SPACE
++â
+	4M	2005	8197	FOUR-PER-EM SPACE
++â	6M	2006	8198	SIX-PER-EM SPACE
++â	1T	2009	8201	THIN SPACE
++â	1H	200A	8202	HAIR SPACE
++â	-1	2010	8208	HYPHEN
++â	-N	2013	8211	EN DASH `
++â	-M	2014	8212	EM DASH
++â	-3	2015	8213	HORIZONTAL BAR
++â	!2	2016	8214	DOUBLE VERTICAL LINE
++â	=2	2017	8215	DOUBLE LOW LINE
++â	'6	2018	8216	LEFT SINGLE QUOTATION MARK
++â	'9	2019	8217	RIGHT SINGLE QUOTATION MARK
++â	.9	201A	8218	SINGLE LOW-9 QUOTATION MARK
++â	9'	201B	8219	SINGLE HIGH-REVERSED-9 QUOTATION MARK
++â	"6	201C	8220	LEFT DOUBLE QUOTATION MARK
++â	"9	201D	8221	RIGHT DOUBLE QUOTATION MARK
++â	:9	201E	8222	DOUBLE LOW-9 QUOTATION MARK
++â	9"	201F	8223	DOUBLE HIGH-REVERSED-9 QUOTATION MARK
++â 	/-	2020	8224	DAGGER
++â¡	/=	2021	8225	DOUBLE DAGGER
++â¥	..	2025	8229	TWO DOT LEADER
++â°	%0	2030	8240	PER MILLE SIGN
++â²	1'	2032	8242	PRIME
++â³	2'	2033	8243	DOUBLE PRIME
++âŽ	3'	2034	8244	TRIPLE PRIME
++âµ	1"	2035	8245	REVERSED PRIME
++â¶	2"	2036	8246	REVERSED DOUBLE PRIME
++â·	3"	2037	8247	REVERSED TRIPLE PRIME
++âž	Ca	2038	8248	CARET
++â¹	<1	2039	8249	SINGLE LEFT-POINTING ANGLE QUOTATION MARK
++âº	>1	203A	8250	SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
++â»	:X	203B	8251	REFERENCE MARK
++âŸ	'-	203E	8254	OVERLINE
++â	/f	2044	8260	FRACTION SLASH
++â°	0S	2070	8304	SUPERSCRIPT ZERO
++âŽ	4S	2074	8308	SUPERSCRIPT FOUR
++âµ	5S	2075	8309	SUPERSCRIPT FIVE
++â¶	6S	2076	8310	SUPERSCRIPT SIX
++â·	7S	2077	8311	SUPERSCRIPT SEVEN
++âž	8S	2078	8312	SUPERSCRIPT EIGHT
++â¹	9S	2079	8313	SUPERSCRIPT NINE
++âº	+S	207A	8314	SUPERSCRIPT PLUS SIGN
++â»	-S	207B	8315	SUPERSCRIPT MINUS
++âŒ	=S	207C	8316	SUPERSCRIPT EQUALS SIGN
++âœ	(S	207D	8317	SUPERSCRIPT LEFT PARENTHESIS
++âŸ	)S	207E	8318	SUPERSCRIPT RIGHT PARENTHESIS
++â¿	nS	207F	8319	SUPERSCRIPT LATIN SMALL LETTER N `
++â	0s	2080	8320	SUBSCRIPT ZERO
++â	1s	2081	8321	SUBSCRIPT ONE
++â	2s	2082	8322	SUBSCRIPT TWO
++â	3s	2083	8323	SUBSCRIPT THREE
++â	4s	2084	8324	SUBSCRIPT FOUR
++â
+	5s	2085	8325	SUBSCRIPT FIVE
++â	6s	2086	8326	SUBSCRIPT SIX
++â	7s	2087	8327	SUBSCRIPT SEVEN
++â	8s	2088	8328	SUBSCRIPT EIGHT
++â	9s	2089	8329	SUBSCRIPT NINE
++â	+s	208A	8330	SUBSCRIPT PLUS SIGN
++â	-s	208B	8331	SUBSCRIPT MINUS
++â	=s	208C	8332	SUBSCRIPT EQUALS SIGN
++â	(s	208D	8333	SUBSCRIPT LEFT PARENTHESIS
++â	)s	208E	8334	SUBSCRIPT RIGHT PARENTHESIS
++â€	Li	20A4	8356	LIRA SIGN
++â§	Pt	20A7	8359	PESETA SIGN
++â©	W=	20A9	8361	WON SIGN
++â¬	Eu	20AC	8364	EURO SIGN
++â	oC	2103	8451	DEGREE CELSIUS
++â
+	co	2105	8453	CARE OF
++â	oF	2109	8457	DEGREE FAHRENHEIT
++â	N0	2116	8470	NUMERO SIGN
++â	PO	2117	8471	SOUND RECORDING COPYRIGHT
++â	Rx	211E	8478	PRESCRIPTION TAKE
++â 	SM	2120	8480	SERVICE MARK
++â¢	TM	2122	8482	TRADE MARK SIGN
++âŠ	Om	2126	8486	OHM SIGN
++â«	AO	212B	8491	ANGSTROM SIGN
++â
+	13	2153	8531	VULGAR FRACTION ONE THIRD
++â
+	23	2154	8532	VULGAR FRACTION TWO THIRDS
++â
+	15	2155	8533	VULGAR FRACTION ONE FIFTH
++â
+	25	2156	8534	VULGAR FRACTION TWO FIFTHS
++â
+	35	2157	8535	VULGAR FRACTION THREE FIFTHS
++â
+	45	2158	8536	VULGAR FRACTION FOUR FIFTHS
++â
+	16	2159	8537	VULGAR FRACTION ONE SIXTH
++â
+	56	215A	8538	VULGAR FRACTION FIVE SIXTHS
++â
+	18	215B	8539	VULGAR FRACTION ONE EIGHTH
++â
+	38	215C	8540	VULGAR FRACTION THREE EIGHTHS
++â
+	58	215D	8541	VULGAR FRACTION FIVE EIGHTHS
++â
+	78	215E	8542	VULGAR FRACTION SEVEN EIGHTHS
++â
+ 	1R	2160	8544	ROMAN NUMERAL ONE
++â
+¡	2R	2161	8545	ROMAN NUMERAL TWO
++â
+¢	3R	2162	8546	ROMAN NUMERAL THREE
++â
+£	4R	2163	8547	ROMAN NUMERAL FOUR
++â
+€	5R	2164	8548	ROMAN NUMERAL FIVE
++â
+¥	6R	2165	8549	ROMAN NUMERAL SIX
++â
+Š	7R	2166	8550	ROMAN NUMERAL SEVEN
++â
+§	8R	2167	8551	ROMAN NUMERAL EIGHT
++â
+š	9R	2168	8552	ROMAN NUMERAL NINE
++â
+©	aR	2169	8553	ROMAN NUMERAL TEN
++â
+ª	bR	216A	8554	ROMAN NUMERAL ELEVEN
++â
+«	cR	216B	8555	ROMAN NUMERAL TWELVE
++â
+°	1r	2170	8560	SMALL ROMAN NUMERAL ONE
++â
+±	2r	2171	8561	SMALL ROMAN NUMERAL TWO
++â
+²	3r	2172	8562	SMALL ROMAN NUMERAL THREE
++â
+³	4r	2173	8563	SMALL ROMAN NUMERAL FOUR
++â
+Ž	5r	2174	8564	SMALL ROMAN NUMERAL FIVE
++â
+µ	6r	2175	8565	SMALL ROMAN NUMERAL SIX
++â
+¶	7r	2176	8566	SMALL ROMAN NUMERAL SEVEN
++â
+·	8r	2177	8567	SMALL ROMAN NUMERAL EIGHT
++â
+ž	9r	2178	8568	SMALL ROMAN NUMERAL NINE
++â
+¹	ar	2179	8569	SMALL ROMAN NUMERAL TEN
++â
+º	br	217A	8570	SMALL ROMAN NUMERAL ELEVEN
++â
+»	cr	217B	8571	SMALL ROMAN NUMERAL TWELVE
++â	<-	2190	8592	LEFTWARDS ARROW
++â	-!	2191	8593	UPWARDS ARROW
++â	->	2192	8594	RIGHTWARDS ARROW
++â	-v	2193	8595	DOWNWARDS ARROW
++â	<>	2194	8596	LEFT RIGHT ARROW
++â	UD	2195	8597	UP DOWN ARROW
++â	<=	21D0	8656	LEFTWARDS DOUBLE ARROW
++â	=>	21D2	8658	RIGHTWARDS DOUBLE ARROW
++â	==	21D4	8660	LEFT RIGHT DOUBLE ARROW
++â	FA	2200	8704	FOR ALL
++â	dP	2202	8706	PARTIAL DIFFERENTIAL
++â	TE	2203	8707	THERE EXISTS
++â
+	/0	2205	8709	EMPTY SET
++â	DE	2206	8710	INCREMENT
++â	NB	2207	8711	NABLA
++â	(-	2208	8712	ELEMENT OF
++â	-)	220B	8715	CONTAINS AS MEMBER
++â	*P	220F	8719	N-ARY PRODUCT `
++â	+Z	2211	8721	N-ARY SUMMATION `
++â	-2	2212	8722	MINUS SIGN
++â	-+	2213	8723	MINUS-OR-PLUS SIGN
++â	*-	2217	8727	ASTERISK OPERATOR
++â	Ob	2218	8728	RING OPERATOR
++â	Sb	2219	8729	BULLET OPERATOR
++â	RT	221A	8730	SQUARE ROOT
++â	0(	221D	8733	PROPORTIONAL TO
++â	00	221E	8734	INFINITY
++â	-L	221F	8735	RIGHT ANGLE
++â 	-V	2220	8736	ANGLE
++â¥	PP	2225	8741	PARALLEL TO
++â§	AN	2227	8743	LOGICAL AND
++âš	OR	2228	8744	LOGICAL OR
++â©	(U	2229	8745	INTERSECTION
++âª	)U	222A	8746	UNION
++â«	In	222B	8747	INTEGRAL
++â¬	DI	222C	8748	DOUBLE INTEGRAL
++â®	Io	222E	8750	CONTOUR INTEGRAL
++âŽ	.:	2234	8756	THEREFORE
++âµ	:.	2235	8757	BECAUSE
++â¶	:R	2236	8758	RATIO
++â·	::	2237	8759	PROPORTION
++âŒ	?1	223C	8764	TILDE OPERATOR
++âŸ	CG	223E	8766	INVERTED LAZY S
++â	?-	2243	8771	ASYMPTOTICALLY EQUAL TO
++â
+	?=	2245	8773	APPROXIMATELY EQUAL TO
++â	?2	2248	8776	ALMOST EQUAL TO
++â	=?	224C	8780	ALL EQUAL TO
++â	HI	2253	8787	IMAGE OF OR APPROXIMATELY EQUAL TO
++â 	!=	2260	8800	NOT EQUAL TO
++â¡	=3	2261	8801	IDENTICAL TO
++â€	=<	2264	8804	LESS-THAN OR EQUAL TO
++â¥	>=	2265	8805	GREATER-THAN OR EQUAL TO
++âª	<*	226A	8810	MUCH LESS-THAN
++â«	*>	226B	8811	MUCH GREATER-THAN
++â®	!<	226E	8814	NOT LESS-THAN
++â¯	!>	226F	8815	NOT GREATER-THAN
++â	(C	2282	8834	SUBSET OF
++â	)C	2283	8835	SUPERSET OF
++â	(_	2286	8838	SUBSET OF OR EQUAL TO
++â	)_	2287	8839	SUPERSET OF OR EQUAL TO
++â	0.	2299	8857	CIRCLED DOT OPERATOR
++â	02	229A	8858	CIRCLED RING OPERATOR
++â¥	-T	22A5	8869	UP TACK
++â
+	.P	22C5	8901	DOT OPERATOR
++â®	:3	22EE	8942	VERTICAL ELLIPSIS
++â¯       .3      22EF    8943    MIDLINE HORIZONTAL ELLIPSIS
++â	Eh	2302	8962	HOUSE
++â	<7	2308	8968	LEFT CEILING
++â	>7	2309	8969	RIGHT CEILING
++â	7<	230A	8970	LEFT FLOOR
++â	7>	230B	8971	RIGHT FLOOR
++â	NI	2310	8976	REVERSED NOT SIGN
++â	(A	2312	8978	ARC
++â	TR	2315	8981	TELEPHONE RECORDER
++â 	Iu	2320	8992	TOP HALF INTEGRAL
++â¡	Il	2321	8993	BOTTOM HALF INTEGRAL
++â©	</	2329	9001	LEFT-POINTING ANGLE BRACKET
++âª	/>	232A	9002	RIGHT-POINTING ANGLE BRACKET
++â£	Vs	2423	9251	OPEN BOX
++â	1h	2440	9280	OCR HOOK
++â	3h	2441	9281	OCR CHAIR
++â	2h	2442	9282	OCR FORK
++â	4h	2443	9283	OCR INVERTED FORK
++â	1j	2446	9286	OCR BRANCH BANK IDENTIFICATION
++â	2j	2447	9287	OCR AMOUNT OF CHECK
++â	3j	2448	9288	OCR DASH
++â	4j	2449	9289	OCR CUSTOMER ACCOUNT NUMBER
++â	1.	2488	9352	DIGIT ONE FULL STOP
++â	2.	2489	9353	DIGIT TWO FULL STOP
++â	3.	248A	9354	DIGIT THREE FULL STOP
++â	4.	248B	9355	DIGIT FOUR FULL STOP
++â	5.	248C	9356	DIGIT FIVE FULL STOP
++â	6.	248D	9357	DIGIT SIX FULL STOP
++â	7.	248E	9358	DIGIT SEVEN FULL STOP
++â	8.	248F	9359	DIGIT EIGHT FULL STOP
++â	9.	2490	9360	DIGIT NINE FULL STOP
++â	hh	2500	9472	BOX DRAWINGS LIGHT HORIZONTAL
++â	HH	2501	9473	BOX DRAWINGS HEAVY HORIZONTAL
++â	vv	2502	9474	BOX DRAWINGS LIGHT VERTICAL
++â	VV	2503	9475	BOX DRAWINGS HEAVY VERTICAL
++â	3-	2504	9476	BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL
++â
+	3_	2505	9477	BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL
++â	3!	2506	9478	BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL
++â	3/	2507	9479	BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL
++â	4-	2508	9480	BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL
++â	4_	2509	9481	BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL
++â	4!	250A	9482	BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL
++â	4/	250B	9483	BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL
++â	dr	250C	9484	BOX DRAWINGS LIGHT DOWN AND RIGHT
++â	dR	250D	9485	BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY
++â	Dr	250E	9486	BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT
++â	DR	250F	9487	BOX DRAWINGS HEAVY DOWN AND RIGHT
++â	dl	2510	9488	BOX DRAWINGS LIGHT DOWN AND LEFT
++â	dL	2511	9489	BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY
++â	Dl	2512	9490	BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT
++â	LD	2513	9491	BOX DRAWINGS HEAVY DOWN AND LEFT
++â	ur	2514	9492	BOX DRAWINGS LIGHT UP AND RIGHT
++â	uR	2515	9493	BOX DRAWINGS UP LIGHT AND RIGHT HEAVY
++â	Ur	2516	9494	BOX DRAWINGS UP HEAVY AND RIGHT LIGHT
++â	UR	2517	9495	BOX DRAWINGS HEAVY UP AND RIGHT
++â	ul	2518	9496	BOX DRAWINGS LIGHT UP AND LEFT
++â	uL	2519	9497	BOX DRAWINGS UP LIGHT AND LEFT HEAVY
++â	Ul	251A	9498	BOX DRAWINGS UP HEAVY AND LEFT LIGHT
++â	UL	251B	9499	BOX DRAWINGS HEAVY UP AND LEFT
++â	vr	251C	9500	BOX DRAWINGS LIGHT VERTICAL AND RIGHT
++â	vR	251D	9501	BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY
++â 	Vr	2520	9504	BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT
++â£	VR	2523	9507	BOX DRAWINGS HEAVY VERTICAL AND RIGHT
++â€	vl	2524	9508	BOX DRAWINGS LIGHT VERTICAL AND LEFT
++â¥	vL	2525	9509	BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY
++âš	Vl	2528	9512	BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT
++â«	VL	252B	9515	BOX DRAWINGS HEAVY VERTICAL AND LEFT
++â¬	dh	252C	9516	BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
++â¯	dH	252F	9519	BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY
++â°	Dh	2530	9520	BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT
++â³	DH	2533	9523	BOX DRAWINGS HEAVY DOWN AND HORIZONTAL
++âŽ	uh	2534	9524	BOX DRAWINGS LIGHT UP AND HORIZONTAL
++â·	uH	2537	9527	BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY
++âž	Uh	2538	9528	BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT
++â»	UH	253B	9531	BOX DRAWINGS HEAVY UP AND HORIZONTAL
++âŒ	vh	253C	9532	BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
++â¿	vH	253F	9535	BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY
++â	Vh	2542	9538	BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT
++â	VH	254B	9547	BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL
++â±	FD	2571	9585	BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT
++â²	BD	2572	9586	BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT
++â	TB	2580	9600	UPPER HALF BLOCK
++â	LB	2584	9604	LOWER HALF BLOCK
++â	FB	2588	9608	FULL BLOCK
++â	lB	258C	9612	LEFT HALF BLOCK
++â	RB	2590	9616	RIGHT HALF BLOCK
++â	.S	2591	9617	LIGHT SHADE
++â	:S	2592	9618	MEDIUM SHADE
++â	?S	2593	9619	DARK SHADE
++â 	fS	25A0	9632	BLACK SQUARE
++â¡	OS	25A1	9633	WHITE SQUARE
++â¢	RO	25A2	9634	WHITE SQUARE WITH ROUNDED CORNERS
++â£	Rr	25A3	9635	WHITE SQUARE CONTAINING BLACK SMALL SQUARE
++â€	RF	25A4	9636	SQUARE WITH HORIZONTAL FILL
++â¥	RY	25A5	9637	SQUARE WITH VERTICAL FILL
++âŠ	RH	25A6	9638	SQUARE WITH ORTHOGONAL CROSSHATCH FILL
++â§	RZ	25A7	9639	SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL
++âš	RK	25A8	9640	SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL
++â©	RX	25A9	9641	SQUARE WITH DIAGONAL CROSSHATCH FILL
++âª	sB	25AA	9642	BLACK SMALL SQUARE
++â¬	SR	25AC	9644	BLACK RECTANGLE
++â­	Or	25AD	9645	WHITE RECTANGLE
++â²	UT	25B2	9650	BLACK UP-POINTING TRIANGLE
++â³	uT	25B3	9651	WHITE UP-POINTING TRIANGLE
++â¶	PR	25B6	9654	BLACK RIGHT-POINTING TRIANGLE
++â·	Tr	25B7	9655	WHITE RIGHT-POINTING TRIANGLE
++âŒ	Dt	25BC	9660	BLACK DOWN-POINTING TRIANGLE
++âœ	dT	25BD	9661	WHITE DOWN-POINTING TRIANGLE
++â	PL	25C0	9664	BLACK LEFT-POINTING TRIANGLE
++â	Tl	25C1	9665	WHITE LEFT-POINTING TRIANGLE
++â	Db	25C6	9670	BLACK DIAMOND
++â	Dw	25C7	9671	WHITE DIAMOND
++â	LZ	25CA	9674	LOZENGE
++â	0m	25CB	9675	WHITE CIRCLE
++â	0o	25CE	9678	BULLSEYE
++â	0M	25CF	9679	BLACK CIRCLE
++â	0L	25D0	9680	CIRCLE WITH LEFT HALF BLACK
++â	0R	25D1	9681	CIRCLE WITH RIGHT HALF BLACK
++â	Sn	25D8	9688	INVERSE BULLET
++â	Ic	25D9	9689	INVERSE WHITE CIRCLE
++â¢	Fd	25E2	9698	BLACK LOWER RIGHT TRIANGLE
++â£	Bd	25E3	9699	BLACK LOWER LEFT TRIANGLE
++â
+	*2	2605	9733	BLACK STAR
++â	*1	2606	9734	WHITE STAR
++â	<H	261C	9756	WHITE LEFT POINTING INDEX
++â	>H	261E	9758	WHITE RIGHT POINTING INDEX
++âº	0u	263A	9786	WHITE SMILING FACE
++â»	0U	263B	9787	BLACK SMILING FACE
++âŒ	SU	263C	9788	WHITE SUN WITH RAYS
++â	Fm	2640	9792	FEMALE SIGN
++â	Ml	2642	9794	MALE SIGN
++â 	cS	2660	9824	BLACK SPADE SUIT
++â¡	cH	2661	9825	WHITE HEART SUIT
++â¢	cD	2662	9826	WHITE DIAMOND SUIT
++â£	cC	2663	9827	BLACK CLUB SUIT
++â©	Md	2669	9833	QUARTER NOTE `
++âª	M8	266A	9834	EIGHTH NOTE `
++â«	M2	266B	9835	BEAMED EIGHTH NOTES
++â­	Mb	266D	9837	MUSIC FLAT SIGN
++â®	Mx	266E	9838	MUSIC NATURAL SIGN
++â¯	MX	266F	9839	MUSIC SHARP SIGN
++â	OK	2713	10003	CHECK MARK
++â	XX	2717	10007	BALLOT X
++â 	-X	2720	10016	MALTESE CROSS
++ã	IS	3000	12288	IDEOGRAPHIC SPACE
++ã	,_	3001	12289	IDEOGRAPHIC COMMA
++ã	._	3002	12290	IDEOGRAPHIC FULL STOP
++ã	+"	3003	12291	DITTO MARK
++ã	+_	3004	12292	JAPANESE INDUSTRIAL STANDARD SYMBOL
++ã
+	*_	3005	12293	IDEOGRAPHIC ITERATION MARK
++ã	;_	3006	12294	IDEOGRAPHIC CLOSING MARK
++ã	0_	3007	12295	IDEOGRAPHIC NUMBER ZERO
++ã	<+	300A	12298	LEFT DOUBLE ANGLE BRACKET
++ã	>+	300B	12299	RIGHT DOUBLE ANGLE BRACKET
++ã	<'	300C	12300	LEFT CORNER BRACKET
++ã	>'	300D	12301	RIGHT CORNER BRACKET
++ã	<"	300E	12302	LEFT WHITE CORNER BRACKET
++ã	>"	300F	12303	RIGHT WHITE CORNER BRACKET
++ã	("	3010	12304	LEFT BLACK LENTICULAR BRACKET
++ã	)"	3011	12305	RIGHT BLACK LENTICULAR BRACKET
++ã	=T	3012	12306	POSTAL MARK
++ã	=_	3013	12307	GETA MARK
++ã	('	3014	12308	LEFT TORTOISE SHELL BRACKET
++ã	)'	3015	12309	RIGHT TORTOISE SHELL BRACKET
++ã	(I	3016	12310	LEFT WHITE LENTICULAR BRACKET
++ã	)I	3017	12311	RIGHT WHITE LENTICULAR BRACKET
++ã	-?	301C	12316	WAVE DASH
++ã	A5	3041	12353	HIRAGANA LETTER SMALL A
++ã	a5	3042	12354	HIRAGANA LETTER A
++ã	I5	3043	12355	HIRAGANA LETTER SMALL I
++ã	i5	3044	12356	HIRAGANA LETTER I
++ã
+	U5	3045	12357	HIRAGANA LETTER SMALL U
++ã	u5	3046	12358	HIRAGANA LETTER U
++ã	E5	3047	12359	HIRAGANA LETTER SMALL E
++ã	e5	3048	12360	HIRAGANA LETTER E
++ã	O5	3049	12361	HIRAGANA LETTER SMALL O
++ã	o5	304A	12362	HIRAGANA LETTER O
++ã	ka	304B	12363	HIRAGANA LETTER KA
++ã	ga	304C	12364	HIRAGANA LETTER GA
++ã	ki	304D	12365	HIRAGANA LETTER KI
++ã	gi	304E	12366	HIRAGANA LETTER GI
++ã	ku	304F	12367	HIRAGANA LETTER KU
++ã	gu	3050	12368	HIRAGANA LETTER GU
++ã	ke	3051	12369	HIRAGANA LETTER KE
++ã	ge	3052	12370	HIRAGANA LETTER GE
++ã	ko	3053	12371	HIRAGANA LETTER KO
++ã	go	3054	12372	HIRAGANA LETTER GO
++ã	sa	3055	12373	HIRAGANA LETTER SA
++ã	za	3056	12374	HIRAGANA LETTER ZA
++ã	si	3057	12375	HIRAGANA LETTER SI
++ã	zi	3058	12376	HIRAGANA LETTER ZI
++ã	su	3059	12377	HIRAGANA LETTER SU
++ã	zu	305A	12378	HIRAGANA LETTER ZU
++ã	se	305B	12379	HIRAGANA LETTER SE
++ã	ze	305C	12380	HIRAGANA LETTER ZE
++ã	so	305D	12381	HIRAGANA LETTER SO
++ã	zo	305E	12382	HIRAGANA LETTER ZO
++ã	ta	305F	12383	HIRAGANA LETTER TA
++ã 	da	3060	12384	HIRAGANA LETTER DA
++ã¡	ti	3061	12385	HIRAGANA LETTER TI
++ã¢	di	3062	12386	HIRAGANA LETTER DI
++ã£	tU	3063	12387	HIRAGANA LETTER SMALL TU
++ã€	tu	3064	12388	HIRAGANA LETTER TU
++ã¥	du	3065	12389	HIRAGANA LETTER DU
++ãŠ	te	3066	12390	HIRAGANA LETTER TE
++ã§	de	3067	12391	HIRAGANA LETTER DE
++ãš	to	3068	12392	HIRAGANA LETTER TO
++ã©	do	3069	12393	HIRAGANA LETTER DO
++ãª	na	306A	12394	HIRAGANA LETTER NA
++ã«	ni	306B	12395	HIRAGANA LETTER NI
++ã¬	nu	306C	12396	HIRAGANA LETTER NU
++ã­	ne	306D	12397	HIRAGANA LETTER NE
++ã®	no	306E	12398	HIRAGANA LETTER NO
++ã¯	ha	306F	12399	HIRAGANA LETTER HA
++ã°	ba	3070	12400	HIRAGANA LETTER BA
++ã±	pa	3071	12401	HIRAGANA LETTER PA
++ã²	hi	3072	12402	HIRAGANA LETTER HI
++ã³	bi	3073	12403	HIRAGANA LETTER BI
++ãŽ	pi	3074	12404	HIRAGANA LETTER PI
++ãµ	hu	3075	12405	HIRAGANA LETTER HU
++ã¶	bu	3076	12406	HIRAGANA LETTER BU
++ã·	pu	3077	12407	HIRAGANA LETTER PU
++ãž	he	3078	12408	HIRAGANA LETTER HE
++ã¹	be	3079	12409	HIRAGANA LETTER BE
++ãº	pe	307A	12410	HIRAGANA LETTER PE
++ã»	ho	307B	12411	HIRAGANA LETTER HO
++ãŒ	bo	307C	12412	HIRAGANA LETTER BO
++ãœ	po	307D	12413	HIRAGANA LETTER PO
++ãŸ	ma	307E	12414	HIRAGANA LETTER MA
++ã¿	mi	307F	12415	HIRAGANA LETTER MI
++ã	mu	3080	12416	HIRAGANA LETTER MU
++ã	me	3081	12417	HIRAGANA LETTER ME
++ã	mo	3082	12418	HIRAGANA LETTER MO
++ã	yA	3083	12419	HIRAGANA LETTER SMALL YA
++ã	ya	3084	12420	HIRAGANA LETTER YA
++ã
+	yU	3085	12421	HIRAGANA LETTER SMALL YU
++ã	yu	3086	12422	HIRAGANA LETTER YU
++ã	yO	3087	12423	HIRAGANA LETTER SMALL YO
++ã	yo	3088	12424	HIRAGANA LETTER YO
++ã	ra	3089	12425	HIRAGANA LETTER RA
++ã	ri	308A	12426	HIRAGANA LETTER RI
++ã	ru	308B	12427	HIRAGANA LETTER RU
++ã	re	308C	12428	HIRAGANA LETTER RE
++ã	ro	308D	12429	HIRAGANA LETTER RO
++ã	wA	308E	12430	HIRAGANA LETTER SMALL WA
++ã	wa	308F	12431	HIRAGANA LETTER WA
++ã	wi	3090	12432	HIRAGANA LETTER WI
++ã	we	3091	12433	HIRAGANA LETTER WE
++ã	wo	3092	12434	HIRAGANA LETTER WO
++ã	n5	3093	12435	HIRAGANA LETTER N `
++ã	vu	3094	12436	HIRAGANA LETTER VU
++ã	"5	309B	12443	KATAKANA-HIRAGANA VOICED SOUND MARK
++ã	05	309C	12444	KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
++ã	*5	309D	12445	HIRAGANA ITERATION MARK
++ã	+5	309E	12446	HIRAGANA VOICED ITERATION MARK
++ã¡	a6	30A1	12449	KATAKANA LETTER SMALL A
++ã¢	A6	30A2	12450	KATAKANA LETTER A
++ã£	i6	30A3	12451	KATAKANA LETTER SMALL I
++ã€	I6	30A4	12452	KATAKANA LETTER I
++ã¥	u6	30A5	12453	KATAKANA LETTER SMALL U
++ãŠ	U6	30A6	12454	KATAKANA LETTER U
++ã§	e6	30A7	12455	KATAKANA LETTER SMALL E
++ãš	E6	30A8	12456	KATAKANA LETTER E
++ã©	o6	30A9	12457	KATAKANA LETTER SMALL O
++ãª	O6	30AA	12458	KATAKANA LETTER O
++ã«	Ka	30AB	12459	KATAKANA LETTER KA
++ã¬	Ga	30AC	12460	KATAKANA LETTER GA
++ã­	Ki	30AD	12461	KATAKANA LETTER KI
++ã®	Gi	30AE	12462	KATAKANA LETTER GI
++ã¯	Ku	30AF	12463	KATAKANA LETTER KU
++ã°	Gu	30B0	12464	KATAKANA LETTER GU
++ã±	Ke	30B1	12465	KATAKANA LETTER KE
++ã²	Ge	30B2	12466	KATAKANA LETTER GE
++ã³	Ko	30B3	12467	KATAKANA LETTER KO
++ãŽ	Go	30B4	12468	KATAKANA LETTER GO
++ãµ	Sa	30B5	12469	KATAKANA LETTER SA
++ã¶	Za	30B6	12470	KATAKANA LETTER ZA
++ã·	Si	30B7	12471	KATAKANA LETTER SI
++ãž	Zi	30B8	12472	KATAKANA LETTER ZI
++ã¹	Su	30B9	12473	KATAKANA LETTER SU
++ãº	Zu	30BA	12474	KATAKANA LETTER ZU
++ã»	Se	30BB	12475	KATAKANA LETTER SE
++ãŒ	Ze	30BC	12476	KATAKANA LETTER ZE
++ãœ	So	30BD	12477	KATAKANA LETTER SO
++ãŸ	Zo	30BE	12478	KATAKANA LETTER ZO
++ã¿	Ta	30BF	12479	KATAKANA LETTER TA
++ã	Da	30C0	12480	KATAKANA LETTER DA
++ã	Ti	30C1	12481	KATAKANA LETTER TI
++ã	Di	30C2	12482	KATAKANA LETTER DI
++ã	TU	30C3	12483	KATAKANA LETTER SMALL TU
++ã	Tu	30C4	12484	KATAKANA LETTER TU
++ã
+	Du	30C5	12485	KATAKANA LETTER DU
++ã	Te	30C6	12486	KATAKANA LETTER TE
++ã	De	30C7	12487	KATAKANA LETTER DE
++ã	To	30C8	12488	KATAKANA LETTER TO
++ã	Do	30C9	12489	KATAKANA LETTER DO
++ã	Na	30CA	12490	KATAKANA LETTER NA
++ã	Ni	30CB	12491	KATAKANA LETTER NI
++ã	Nu	30CC	12492	KATAKANA LETTER NU
++ã	Ne	30CD	12493	KATAKANA LETTER NE
++ã	No	30CE	12494	KATAKANA LETTER NO
++ã	Ha	30CF	12495	KATAKANA LETTER HA
++ã	Ba	30D0	12496	KATAKANA LETTER BA
++ã	Pa	30D1	12497	KATAKANA LETTER PA
++ã	Hi	30D2	12498	KATAKANA LETTER HI
++ã	Bi	30D3	12499	KATAKANA LETTER BI
++ã	Pi	30D4	12500	KATAKANA LETTER PI
++ã	Hu	30D5	12501	KATAKANA LETTER HU
++ã	Bu	30D6	12502	KATAKANA LETTER BU
++ã	Pu	30D7	12503	KATAKANA LETTER PU
++ã	He	30D8	12504	KATAKANA LETTER HE
++ã	Be	30D9	12505	KATAKANA LETTER BE
++ã	Pe	30DA	12506	KATAKANA LETTER PE
++ã	Ho	30DB	12507	KATAKANA LETTER HO
++ã	Bo	30DC	12508	KATAKANA LETTER BO
++ã	Po	30DD	12509	KATAKANA LETTER PO
++ã	Ma	30DE	12510	KATAKANA LETTER MA
++ã	Mi	30DF	12511	KATAKANA LETTER MI
++ã 	Mu	30E0	12512	KATAKANA LETTER MU
++ã¡	Me	30E1	12513	KATAKANA LETTER ME
++ã¢	Mo	30E2	12514	KATAKANA LETTER MO
++ã£	YA	30E3	12515	KATAKANA LETTER SMALL YA
++ã€	Ya	30E4	12516	KATAKANA LETTER YA
++ã¥	YU	30E5	12517	KATAKANA LETTER SMALL YU
++ãŠ	Yu	30E6	12518	KATAKANA LETTER YU
++ã§	YO	30E7	12519	KATAKANA LETTER SMALL YO
++ãš	Yo	30E8	12520	KATAKANA LETTER YO
++ã©	Ra	30E9	12521	KATAKANA LETTER RA
++ãª	Ri	30EA	12522	KATAKANA LETTER RI
++ã«	Ru	30EB	12523	KATAKANA LETTER RU
++ã¬	Re	30EC	12524	KATAKANA LETTER RE
++ã­	Ro	30ED	12525	KATAKANA LETTER RO
++ã®	WA	30EE	12526	KATAKANA LETTER SMALL WA
++ã¯	Wa	30EF	12527	KATAKANA LETTER WA
++ã°	Wi	30F0	12528	KATAKANA LETTER WI
++ã±	We	30F1	12529	KATAKANA LETTER WE
++ã²	Wo	30F2	12530	KATAKANA LETTER WO
++ã³	N6	30F3	12531	KATAKANA LETTER N `
++ãŽ	Vu	30F4	12532	KATAKANA LETTER VU
++ãµ	KA	30F5	12533	KATAKANA LETTER SMALL KA
++ã¶	KE	30F6	12534	KATAKANA LETTER SMALL KE
++ã·	Va	30F7	12535	KATAKANA LETTER VA
++ãž	Vi	30F8	12536	KATAKANA LETTER VI
++ã¹	Ve	30F9	12537	KATAKANA LETTER VE
++ãº	Vo	30FA	12538	KATAKANA LETTER VO
++ã»	.6	30FB	12539	KATAKANA MIDDLE DOT
++ãŒ	-6	30FC	12540	KATAKANA-HIRAGANA PROLONGED SOUND MARK
++ãœ	*6	30FD	12541	KATAKANA ITERATION MARK
++ãŸ	+6	30FE	12542	KATAKANA VOICED ITERATION MARK
++ã
+	b4	3105	12549	BOPOMOFO LETTER B
++ã	p4	3106	12550	BOPOMOFO LETTER P
++ã	m4	3107	12551	BOPOMOFO LETTER M
++ã	f4	3108	12552	BOPOMOFO LETTER F
++ã	d4	3109	12553	BOPOMOFO LETTER D
++ã	t4	310A	12554	BOPOMOFO LETTER T
++ã	n4	310B	12555	BOPOMOFO LETTER N `
++ã	l4	310C	12556	BOPOMOFO LETTER L
++ã	g4	310D	12557	BOPOMOFO LETTER G
++ã	k4	310E	12558	BOPOMOFO LETTER K
++ã	h4	310F	12559	BOPOMOFO LETTER H
++ã	j4	3110	12560	BOPOMOFO LETTER J
++ã	q4	3111	12561	BOPOMOFO LETTER Q
++ã	x4	3112	12562	BOPOMOFO LETTER X
++ã	zh	3113	12563	BOPOMOFO LETTER ZH
++ã	ch	3114	12564	BOPOMOFO LETTER CH
++ã	sh	3115	12565	BOPOMOFO LETTER SH
++ã	r4	3116	12566	BOPOMOFO LETTER R
++ã	z4	3117	12567	BOPOMOFO LETTER Z
++ã	c4	3118	12568	BOPOMOFO LETTER C
++ã	s4	3119	12569	BOPOMOFO LETTER S
++ã	a4	311A	12570	BOPOMOFO LETTER A
++ã	o4	311B	12571	BOPOMOFO LETTER O
++ã	e4	311C	12572	BOPOMOFO LETTER E
++ã	ai	311E	12574	BOPOMOFO LETTER AI
++ã	ei	311F	12575	BOPOMOFO LETTER EI
++ã 	au	3120	12576	BOPOMOFO LETTER AU
++ã¡	ou	3121	12577	BOPOMOFO LETTER OU
++ã¢	an	3122	12578	BOPOMOFO LETTER AN
++ã£	en	3123	12579	BOPOMOFO LETTER EN
++ã€	aN	3124	12580	BOPOMOFO LETTER ANG
++ã¥	eN	3125	12581	BOPOMOFO LETTER ENG
++ãŠ	er	3126	12582	BOPOMOFO LETTER ER
++ã§	i4	3127	12583	BOPOMOFO LETTER I
++ãš	u4	3128	12584	BOPOMOFO LETTER U
++ã©	iu	3129	12585	BOPOMOFO LETTER IU
++ãª	v4	312A	12586	BOPOMOFO LETTER V
++ã«	nG	312B	12587	BOPOMOFO LETTER NG
++ã¬	gn	312C	12588	BOPOMOFO LETTER GN
++ã 	1c	3220	12832	PARENTHESIZED IDEOGRAPH ONE
++ã¡	2c	3221	12833	PARENTHESIZED IDEOGRAPH TWO
++ã¢	3c	3222	12834	PARENTHESIZED IDEOGRAPH THREE
++ã£	4c	3223	12835	PARENTHESIZED IDEOGRAPH FOUR
++ã€	5c	3224	12836	PARENTHESIZED IDEOGRAPH FIVE
++ã¥	6c	3225	12837	PARENTHESIZED IDEOGRAPH SIX
++ãŠ	7c	3226	12838	PARENTHESIZED IDEOGRAPH SEVEN
++ã§	8c	3227	12839	PARENTHESIZED IDEOGRAPH EIGHT
++ãš	9c	3228	12840	PARENTHESIZED IDEOGRAPH NINE
++ï¬	ff	FB00	64256	LATIN SMALL LIGATURE FF
++ï¬	fi	FB01	64257	LATIN SMALL LIGATURE FI
++ï¬	fl	FB02	64258	LATIN SMALL LIGATURE FL
++ï¬
+	ft	FB05	64261	LATIN SMALL LIGATURE LONG S T
++ï¬	st	FB06	64262	LATIN SMALL LIGATURE ST
+ 
+  vim:tw=78:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/editing.txt vim73/runtime/doc/editing.txt
+--- vim73.orig/runtime/doc/editing.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/editing.txt	2013-06-07 17:07:08.435651253 +0000
+@@ -1,4 +1,4 @@
+-*editing.txt*   For Vim version 7.3.  Last change: 2010 Jul 28
++*editing.txt*   For Vim version 7.3.  Last change: 2013 Feb 07
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -276,10 +276,11 @@
+ 			'readonly' option for this buffer.  {not in Vi}
+ 
+ 							*CTRL-^* *CTRL-6*
+-CTRL-^			Edit the alternate file (equivalent to ":e #").
+-			Mostly the alternate file is the previously edited
+-			file.  This is a quick way to toggle between two
+-			files.
++CTRL-^			Edit the alternate file.  Mostly the alternate file is
++			the previously edited file.  This is a quick way to
++			toggle between two files.  It is equivalent to ":e #",
++			except that it also works when there is no file name.
++
+ 			If the 'autowrite' or 'autowriteall' option is on and
+ 			the buffer was changed, write it.
+ 			Mostly the ^ character is positioned on the 6 key,
+@@ -376,8 +377,9 @@
+ embedded spaces must be escaped with a backslash.
+ 
+ 						*wildcard* *wildcards*
+-Wildcards in {file} are expanded.  Which wildcards are supported depends on
+-the system.  These are the common ones:
++Wildcards in {file} are expanded, but as with file completion, 'wildignore'
++and 'suffixes' apply.  Which wildcards are supported depends on the system.
++These are the common ones:
+ 	?	matches one character
+ 	*	matches anything, including nothing
+ 	**	matches anything, including nothing, recurses into directories
+@@ -391,7 +393,7 @@
+ 					*starstar-wildcard*
+ Expanding "**" is possible on Unix, Win32, Mac OS/X and a few other systems.
+ This allows searching a directory tree.  This goes up to 100 directories deep.
+-Note there are some commands where this works slightly different, see
++Note there are some commands where this works slightly differently, see
+ |file-searching|.
+ Example: >
+ 	:n **/*.txt
+@@ -421,9 +423,11 @@
+ external command, by using the syntax `={expr}` e.g.: >
+ 	:e `=tempname()`
+ The expression can contain just about anything, thus this can also be used to
+-avoid the special meaning of '"', '|', '%' and '#'.  Names are to be separated
+-with line breaks.  When the result is a |List| then each item is used as a
+-name.  Line breaks also separate names.
++avoid the special meaning of '"', '|', '%' and '#'.  However, 'wildignore'
++does apply like to other wildcards.
++If the expression returns a string then names are to be separated with line
++breaks.  When the result is a |List| then each item is used as a name.  Line
++breaks also separate names.
+ 
+ 							*++opt* *[++opt]*
+ The [++opt] argument can be used to force the value of 'fileformat',
+@@ -984,6 +988,11 @@
+ If the creation of a backup file fails, the write is not done.  If you want
+ to write anyway add a '!' to the command.
+ 
++							*write-permissions*
++When writing a new file the permissions are read-write.  For unix the mask is
++0666 with additionally umask applied.  When writing a file that was read Vim
++will preserve the permissions, but clear the s-bit.
++
+ 							*write-readonly*
+ When the 'cpoptions' option contains 'W', Vim will refuse to overwrite a
+ readonly file.  When 'W' is not present, ":w!" will overwrite a readonly file,
+@@ -1060,6 +1069,7 @@
+ 			If there are other tab pages and quitting the last
+ 			window in the current tab page the current tab page is
+ 			closed |tab-page|.
++			Triggers the |QuitPre| autocommand event.
+ 
+ :conf[irm] q[uit]	Quit, but give prompt when changes have been made, or
+ 			the last file in the argument list has not been
+@@ -1153,8 +1163,10 @@
+ 							*:confirm* *:conf*
+ :conf[irm] {command}	Execute {command}, and use a dialog when an
+ 			operation has to be confirmed.  Can be used on the
+-			":q", ":qa" and ":w" commands (the latter to over-ride
+-			a read-only setting).
++			|:q|, |:qa| and |:w| commands (the latter to override
++			a read-only setting), and any other command that can
++			fail in such a way, such as |:only|, |:buffer|,
++			|:bdelete|, etc.
+ 
+ Examples: >
+   :confirm w foo
+@@ -1207,13 +1219,13 @@
+ unmodified.
+ 
+ 							*browsefilter*
+-For MS Windows, you can modify the filters that are used in the browse dialog.
+-By setting the g:browsefilter or b:browsefilter variables, you can change the
+-filters globally or locally to the buffer.  The variable is set to a string in
+-the format "{filter label}\t{pattern};{pattern}\n" where {filter label} is the
+-text that appears in the "Files of Type" comboBox, and {pattern} is the
+-pattern which filters the filenames.  Several patterns can be given, separated
+-by ';'.
++For MS Windows and GTK, you can modify the filters that are used in the browse
++dialog.  By setting the g:browsefilter or b:browsefilter variables, you can
++change the filters globally or locally to the buffer.  The variable is set to
++a string in the format "{filter label}\t{pattern};{pattern}\n" where {filter
++label} is the text that appears in the "Files of Type" comboBox, and {pattern}
++is the pattern which filters the filenames.  Several patterns can be given,
++separated by ';'.
+ 
+ For Motif the same format is used, but only the very first pattern is actually
+ used (Motif only offers one pattern, but you can edit it).
+@@ -1221,7 +1233,7 @@
+ For example, to have only Vim files in the dialog, you could use the following
+ command: >
+ 
+-     let g:browsefilter="Vim Scripts\t*.vim\nVim Startup Files\t*vimrc\n"
++     let g:browsefilter = "Vim Scripts\t*.vim\nVim Startup Files\t*vimrc\n"
+ 
+ You can override the filter setting on a per-buffer basis by setting the
+ b:browsefilter variable.  You would most likely set b:browsefilter in a
+@@ -1231,6 +1243,13 @@
+ may want to add "All Files\t*.*\n" as the final filter, so that the user can
+ still access any desired file.
+ 
++To avoid setting browsefilter when Vim does not actually support it, you can
++use has("browsefilter"): >
++
++	if has("browsefilter")
++	   let g:browsefilter = "whatever"
++	endif
++
+ ==============================================================================
+ 7. The current directory				*current-directory*
+ 
+@@ -1340,7 +1359,7 @@
+ cannot be read without the right key.
+ {only available when compiled with the |+cryptv| feature}  *E833*
+ 
+-The text in the swap file and the undo file is also encrypted.
++The text in the swap file and the undo file is also encrypted.  *E843*
+ 
+ Note: The text in memory is not encrypted.  A system administrator may be able
+ to see your text while you are editing it.  When filtering text with
+@@ -1382,6 +1401,8 @@
+ |vimrc| file: >
+ 	set cm=zip
+ 	set cm=blowfish
++The message given for reading and writing a file will show "[crypted]" when
++using zip, "[blowfish]" when using blowfish.
+ 
+ When writing an undo file, the same key and method will be used for the text
+ in the undo file. |persistent-undo|.
+@@ -1431,13 +1452,15 @@
+   history, showing the 'key' value in a viminfo file.
+ - There is never 100% safety.  The encryption in Vim has not been tested for
+   robustness.
+-- The algorithm used is breakable.  A 4 character key in about one hour, a 6
+-  character key in one day (on a Pentium 133 PC).  This requires that you know
+-  some text that must appear in the file.  An expert can break it for any key.
+-  When the text has been decrypted, this also means that the key can be
+-  revealed, and other files encrypted with the same key can be decrypted.
+-- Pkzip uses the same encryption, and US Govt has no objection to its export.
+-  Pkzip's public file APPNOTE.TXT describes this algorithm in detail.
++- The algorithm used for 'cryptmethod' "zip" is breakable.  A 4 character key
++  in about one hour, a 6 character key in one day (on a Pentium 133 PC).  This
++  requires that you know some text that must appear in the file.  An expert
++  can break it for any key.  When the text has been decrypted, this also means
++  that the key can be revealed, and other files encrypted with the same key
++  can be decrypted.
++- Pkzip uses the same encryption as 'cryptmethod' "zip", and US Govt has no
++  objection to its export.  Pkzip's public file APPNOTE.TXT describes this
++  algorithm in detail.
+ - Vim originates from the Netherlands.  That is where the sources come from.
+   Thus the encryption code is not exported from the USA.
+ 
+@@ -1629,6 +1652,6 @@
+ 
+    Note that completion for ":find", ":sfind", and ":tabfind" commands do not
+    currently work with 'path' items that contain a url or use the double star
+-   (/usr/**2) or upward search (;) notations. >
++   with depth limiter (/usr/**2) or upward search (;) notations.
+ 
+  vim:tw=78:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/eval.txt vim73/runtime/doc/eval.txt
+--- vim73.orig/runtime/doc/eval.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/eval.txt	2013-06-07 17:07:08.518984348 +0000
+@@ -1,4 +1,4 @@
+-*eval.txt*	For Vim version 7.3.  Last change: 2010 Aug 15
++*eval.txt*	For Vim version 7.3.  Last change: 2013 May 21
+ 
+ 
+ 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+@@ -39,7 +39,7 @@
+ 							*E712*
+ There are six types of variables:
+ 
+-Number		A 32 bit signed number.  |expr-number| *Number*
++Number		A 32 or 64 bit signed number.  |expr-number| *Number*
+ 		Examples:  -123  0x10  0177
+ 
+ Float		A floating point number. |floating-point-format| *Float*
+@@ -63,21 +63,21 @@
+ are used.
+ 
+ Conversion from a Number to a String is by making the ASCII representation of
+-the Number.  Examples: >
+-	Number 123	-->	String "123"
+-	Number 0	-->	String "0"
+-	Number -1	-->	String "-1"
++the Number.  Examples:
++	Number 123	-->	String "123" ~
++	Number 0	-->	String "0" ~
++	Number -1	-->	String "-1" ~
+ 							*octal*
+ Conversion from a String to a Number is done by converting the first digits
+ to a number.  Hexadecimal "0xf9" and Octal "017" numbers are recognized.  If
+-the String doesn't start with digits, the result is zero.  Examples: >
+-	String "456"	-->	Number 456
+-	String "6bar"	-->	Number 6
+-	String "foo"	-->	Number 0
+-	String "0xf1"	-->	Number 241
+-	String "0100"	-->	Number 64
+-	String "-8"	-->	Number -8
+-	String "+8"	-->	Number 0
++the String doesn't start with digits, the result is zero.  Examples:
++	String "456"	-->	Number 456 ~
++	String "6bar"	-->	Number 6 ~
++	String "foo"	-->	Number 0 ~
++	String "0xf1"	-->	Number 241 ~
++	String "0100"	-->	Number 64 ~
++	String "-8"	-->	Number -8 ~
++	String "+8"	-->	Number 0 ~
+ 
+ To force conversion from String to Number, add zero to it: >
+ 	:echo "0100" + 0
+@@ -91,8 +91,8 @@
+ Note that in the command >
+ 	:if "foo"
+ "foo" is converted to 0, which means FALSE.  To test for a non-empty string,
+-use strlen(): >
+-	:if strlen("foo")
++use empty(): >
++	:if !empty("foo")
+ <				*E745* *E728* *E703* *E729* *E730* *E731*
+ List, Dictionary and Funcref types are not automatically converted.
+ 
+@@ -503,7 +503,7 @@
+ 
+ 
+ Dictionary function ~
+-					*Dictionary-function* *self* *E725*
++				*Dictionary-function* *self* *E725* *E862*
+ When a function is defined with the "dict" attribute it can be used in a
+ special way with a dictionary.	Example: >
+ 	:function Mylen() dict
+@@ -615,7 +615,6 @@
+ 	- expr7			unary minus
+ 	+ expr7			unary plus
+ 
+-
+ |expr8|	expr8[expr1]		byte of a String or item of a |List|
+ 	expr8[expr1 : expr1]	substring of a String or sublist of a |List|
+ 	expr8.name		entry in a |Dictionary|
+@@ -721,7 +720,8 @@
+ 			*expr-<#*  *expr-<=#* *expr-=~#* *expr-!~#*
+ 			*expr-==?* *expr-!=?* *expr->?*  *expr->=?*
+ 			*expr-<?*  *expr-<=?* *expr-=~?* *expr-!~?*
+-			*expr-is*
++			*expr-is* *expr-isnot* *expr-is#* *expr-isnot#*
++			*expr-is?* *expr-isnot?*
+ 		use 'ignorecase'    match case	   ignore case ~
+ equal			==		==#		==?
+ not equal		!=		!=#		!=?
+@@ -731,8 +731,8 @@
+ smaller than or equal	<=		<=#		<=?
+ regexp matches		=~		=~#		=~?
+ regexp doesn't match	!~		!~#		!~?
+-same instance		is
+-different instance	isnot
++same instance		is		is#		is?
++different instance	isnot		isnot#		isnot?
+ 
+ Examples:
+ "abc" ==# "Abc"	  evaluates to 0
+@@ -753,12 +753,14 @@
+ A |Funcref| can only be compared with a |Funcref| and only "equal" and "not
+ equal" can be used.  Case is never ignored.
+ 
+-When using "is" or "isnot" with a |List| this checks if the expressions are
+-referring to the same |List| instance.	A copy of a |List| is different from
+-the original |List|.  When using "is" without a |List| it is equivalent to
+-using "equal", using "isnot" equivalent to using "not equal".  Except that a
+-different type means the values are different.	"4 == '4'" is true, "4 is '4'"
+-is false.
++When using "is" or "isnot" with a |List| or a |Dictionary| this checks if the
++expressions are referring to the same |List| or |Dictionary| instance.  A copy
++of a |List| is different from the original |List|.  When using "is" without
++a |List| or a |Dictionary| it is equivalent to using "equal", using "isnot"
++equivalent to using "not equal".  Except that a different type means the
++values are different: "4 == '4'" is true, "4 is '4'" is false and "0 is []" is
++false and not an error. "is#"/"isnot#" and "is?"/"isnot?" can be used to match
++and ignore case.
+ 
+ When comparing a String with a Number, the String is converted to a Number,
+ and the comparison is done on Numbers.	This means that "0 == 'x'" is TRUE,
+@@ -798,11 +800,12 @@
+ For |Lists| only "+" is possible and then both expr6 must be a list.  The
+ result is a new list with the two lists Concatenated.
+ 
+-expr7 *	 expr7 ..	number multiplication			*expr-star*
+-expr7 /	 expr7 ..	number division				*expr-/*
+-expr7 %	 expr7 ..	number modulo				*expr-%*
++expr7 *	 expr7 ..	Number multiplication			*expr-star*
++expr7 /	 expr7 ..	Number division				*expr-/*
++expr7 %	 expr7 ..	Number modulo				*expr-%*
+ 
+ For all, except ".", Strings are converted to Numbers.
++For bitwise operators see |and()|, |or()| and |xor()|.
+ 
+ Note the difference between "+" and ".":
+ 	"123" + "456" = 579
+@@ -942,7 +945,8 @@
+ 							*expr9*
+ number
+ ------
+-number			number constant		*expr-number*
++number			number constant			*expr-number* 
++						*hex-number* *octal-number*
+ 
+ Decimal, Hexadecimal (starting with 0x or 0X), or Octal (starting with 0).
+ 
+@@ -1115,8 +1119,8 @@
+ 
+ 
+ ==============================================================================
+-3. Internal variable				*internal-variables* *E121*
+-									*E461*
++3. Internal variable				*internal-variables* *E461*
++
+ An internal variable name can be made up of letters, digits and '_'.  But it
+ cannot start with a digit.  It's also possible to use curly braces, see
+ |curly-braces-names|.
+@@ -1146,14 +1150,14 @@
+ 	:    unlet s:[k]
+ 	:endfor
+ <
+-						*buffer-variable* *b:var*
++						*buffer-variable* *b:var* *b:*
+ A variable name that is preceded with "b:" is local to the current buffer.
+ Thus you can have several "b:foo" variables, one for each buffer.
+ This kind of variable is deleted when the buffer is wiped out or deleted with
+ |:bdelete|.
+ 
+ One local buffer variable is predefined:
+-					*b:changedtick-variable* *changetick*
++					*b:changedtick* *changetick*
+ b:changedtick	The total number of changes to the current buffer.  It is
+ 		incremented for each change.  An undo command is also a change
+ 		in this case.  This can be used to perform an action only when
+@@ -1163,21 +1167,21 @@
+ 		    :	call My_Update()
+ 		    :endif
+ <
+-						*window-variable* *w:var*
++						*window-variable* *w:var* *w:*
+ A variable name that is preceded with "w:" is local to the current window.  It
+ is deleted when the window is closed.
+ 
+-						*tabpage-variable* *t:var*
++						*tabpage-variable* *t:var* *t:*
+ A variable name that is preceded with "t:" is local to the current tab page,
+ It is deleted when the tab page is closed. {not available when compiled
+ without the |+windows| feature}
+ 
+-						*global-variable* *g:var*
++						*global-variable* *g:var* *g:*
+ Inside functions global variables are accessed with "g:".  Omitting this will
+ access a variable local to a function.	But "g:" can also be used in any other
+ place if you like.
+ 
+-						*local-variable* *l:var*
++						*local-variable* *l:var* *l:*
+ Inside functions local variables are accessed without prepending anything.
+ But you can also prepend "l:" if you like.  However, without prepending "l:"
+ you may run into reserved variable names.  For example "count".  By itself it
+@@ -1260,7 +1264,7 @@
+ variables for each buffer.  Use local buffer variables instead |b:var|.
+ 
+ 
+-Predefined Vim variables:			*vim-variable* *v:var*
++Predefined Vim variables:			*vim-variable* *v:var* *v:*
+ 
+ 					*v:beval_col* *beval_col-variable*
+ v:beval_col	The number of the column, over which the mouse pointer is.
+@@ -1286,11 +1290,14 @@
+ 
+ 					*v:beval_winnr* *beval_winnr-variable*
+ v:beval_winnr	The number of the window, over which the mouse pointer is. Only
+-		valid while evaluating the 'balloonexpr' option.
++		valid while evaluating the 'balloonexpr' option.  The first
++		window has number zero (unlike most other places where a
++		window gets a number).
+ 
+ 					*v:char* *char-variable*
+ v:char		Argument for evaluating 'formatexpr' and used for the typed
+ 		character when using <expr> in an abbreviation |:map-<expr>|.
++		It is also used by the |InsertCharPre| and |InsertEnter| events.
+ 
+ 			*v:charconvert_from* *charconvert_from-variable*
+ v:charconvert_from
+@@ -1537,13 +1544,19 @@
+ 
+ 					*v:progname* *progname-variable*
+ v:progname	Contains the name (with path removed) with which Vim was
+-		invoked.  Allows you to do special initialisations for "view",
+-		"evim" etc., or any other name you might symlink to Vim.
++		invoked.  Allows you to do special initialisations for |view|,
++		|evim| etc., or any other name you might symlink to Vim.
+ 		Read-only.
+ 
+ 					*v:register* *register-variable*
+-v:register	The name of the register supplied to the last normal mode
+-		command.  Empty if none were supplied. |getreg()| |setreg()|
++v:register	The name of the register in effect for the current normal mode
++		command (regardless of whether that command actually used a
++		register).  Or for the currently executing normal mode mapping
++		(use this in custom commands that take a register).
++		If none is supplied it is the default register '"', unless
++		'clipboard' contains "unnamed" or "unnamedplus", then it is
++		'*' or '+'.
++		Also see |getreg()| and |setreg()|
+ 
+ 					*v:scrollstart* *scrollstart-variable*
+ v:scrollstart	String describing the script or function that caused the
+@@ -1657,6 +1670,15 @@
+ 					*v:warningmsg* *warningmsg-variable*
+ v:warningmsg	Last given warning message.  It's allowed to set this variable.
+ 
++					*v:windowid* *windowid-variable*
++v:windowid	When any X11 based GUI is running or when running in a
++		terminal and Vim connects to the X server (|-X|) this will be
++		set to the window ID.
++		When an MS-Windows GUI is running this will be set to the
++		window handle.
++		Otherwise the value is zero.
++		Note: for windows inside Vim use |winnr()|.
++
+ ==============================================================================
+ 4. Builtin Functions					*functions*
+ 
+@@ -1669,6 +1691,7 @@
+ abs( {expr})			Float or Number  absolute value of {expr}
+ acos( {expr})			Float	arc cosine of {expr}
+ add( {list}, {item})		List	append {item} to |List| {list}
++and( {expr}, {expr})		Number  bitwise AND
+ append( {lnum}, {string})	Number	append {string} below line {lnum}
+ append( {lnum}, {list})		Number	append lines {list} below line {lnum}
+ argc()				Number	number of files in the argument list
+@@ -1693,7 +1716,7 @@
+ 				any	call {func} with arguments {arglist}
+ ceil( {expr})			Float	round {expr} up
+ changenr()			Number	current change number
+-char2nr( {expr})		Number	ASCII value of first char in {expr}
++char2nr( {expr}[, {utf8}])	Number	ASCII/UTF8 value of first char in {expr}
+ cindent( {lnum})		Number	C indent for line {lnum}
+ clearmatches()			none	clear all matches
+ col( {expr})			Number	column nr of cursor or mark
+@@ -1726,7 +1749,8 @@
+ extend( {expr1}, {expr2} [, {expr3}])
+ 				List/Dict insert items of {expr2} into {expr1}
+ exp( {expr})			Float	exponential of {expr}
+-expand( {expr} [, {flag}])	String	expand special keywords in {expr}
++expand( {expr} [, {nosuf} [, {list}]])
++				any	expand special keywords in {expr}
+ feedkeys( {string} [, {mode}])	Number	add key sequence to typeahead buffer
+ filereadable( {file})		Number	TRUE if {file} is a readable file
+ filewritable( {file})		Number	TRUE if {file} is a writable file
+@@ -1748,12 +1772,13 @@
+ foldtextresult( {lnum})		String	text for closed fold at {lnum}
+ foreground( )			Number	bring the Vim window to the foreground
+ function( {name})		Funcref reference to function {name}
+-garbagecollect( [at_exit])	none	free memory, breaking cyclic references
++garbagecollect( [{atexit}])	none	free memory, breaking cyclic references
+ get( {list}, {idx} [, {def}])	any	get item {idx} from {list} or {def}
+ get( {dict}, {key} [, {def}])	any	get item {key} from {dict} or {def}
+ getbufline( {expr}, {lnum} [, {end}])
+ 				List	lines {lnum} to {end} of buffer {expr}
+-getbufvar( {expr}, {varname})	any	variable {varname} in buffer {expr}
++getbufvar( {expr}, {varname} [, {def}])
++				any	variable {varname} in buffer {expr}
+ getchar( [expr])		Number	get one character from the user
+ getcharmod( )			Number	modifiers for the last typed character
+ getcmdline()			String	return the current command-line
+@@ -1774,13 +1799,16 @@
+ getqflist()			List	list of quickfix items
+ getreg( [{regname} [, 1]])	String	contents of register
+ getregtype( [{regname}])	String	type of register
+-gettabvar( {nr}, {varname})	any	variable {varname} in tab {nr}
+-gettabwinvar( {tabnr}, {winnr}, {name})
++gettabvar( {nr}, {varname} [, {def}])
++				any	variable {varname} in tab {nr} or {def}
++gettabwinvar( {tabnr}, {winnr}, {name} [, {def}])
+ 				any	{name} in {winnr} in tab page {tabnr}
+ getwinposx()			Number	X coord in pixels of GUI Vim window
+ getwinposy()			Number	Y coord in pixels of GUI Vim window
+-getwinvar( {nr}, {varname})	any	variable {varname} in window {nr}
+-glob( {expr} [, {flag}])	String	expand file wildcards in {expr}
++getwinvar( {nr}, {varname} [, {def}])
++				any	variable {varname} in window {nr}
++glob( {expr} [, {nosuf} [, {list}]])
++				any	expand file wildcards in {expr}
+ globpath( {path}, {expr} [, {flag}])
+ 				String	do glob({expr}) for all dirs in {path}
+ has( {feature})			Number	TRUE if feature {feature} supported
+@@ -1807,6 +1835,7 @@
+ inputsave()			Number	save and clear typeahead
+ inputsecret( {prompt} [, {text}]) String  like input() but hiding the text
+ insert( {list}, {item} [, {idx}]) List	insert {item} in {list} [before {idx}]
++invert( {expr})			Number  bitwise invert
+ isdirectory( {directory})	Number	TRUE if {directory} is a directory
+ islocked( {expr})		Number	TRUE if {expr} is locked
+ items( {dict})			List	key-value pairs in {dict}
+@@ -1821,9 +1850,11 @@
+ localtime()			Number	current time
+ log( {expr})			Float	natural logarithm (base e) of {expr}
+ log10( {expr})			Float	logarithm of Float {expr} to base 10
++luaeval( {expr}[, {expr}])	any	evaluate |Lua| expression
+ map( {expr}, {string})		List/Dict  change each item in {expr} to {expr}
+-maparg( {name}[, {mode} [, {abbr}]])
+-				String	rhs of mapping {name} in mode {mode}
++maparg( {name}[, {mode} [, {abbr} [, {dict}]]])
++				String or Dict
++					rhs of mapping {name} in mode {mode}
+ mapcheck( {name}[, {mode} [, {abbr}]])
+ 				String	check for mappings matching {name}
+ match( {expr}, {pat}[, {start}[, {count}]])
+@@ -1845,12 +1876,15 @@
+ mode( [expr])			String	current editing mode
+ mzeval( {expr})			any	evaluate |MzScheme| expression
+ nextnonblank( {lnum})		Number	line nr of non-blank line >= {lnum}
+-nr2char( {expr})		String	single char with ASCII value {expr}
++nr2char( {expr}[, {utf8}])	String	single char with ASCII/UTF8 value {expr}
++or( {expr}, {expr})		Number  bitwise OR
+ pathshorten( {expr})		String	shorten directory names in a path
+ pow( {x}, {y})			Float	{x} to the power of {y}
+ prevnonblank( {lnum})		Number	line nr of non-blank line <= {lnum}
+ printf( {fmt}, {expr1}...)	String	format text
+ pumvisible()			Number	whether popup menu is visible
++pyeval( {expr})			any	evaluate |Python| expression
++py3eval( {expr})		any	evaluate |python3| expression
+ range( {expr} [, {max} [, {stride}]])
+ 				List	items from {expr} to {max}
+ readfile( {fname} [, {binary} [, {max}]])
+@@ -1872,6 +1906,8 @@
+ resolve( {filename})		String	get filename a shortcut points to
+ reverse( {list})		List	reverse {list} in-place
+ round( {expr})			Float	round off {expr}
++screencol()			Number	current cursor column
++screenrow()			Number	current cursor row
+ search( {pattern} [, {flags} [, {stopline} [, {timeout}]]])
+ 				Number	search for {pattern}
+ searchdecl( {name} [, {global} [, {thisblock}]])
+@@ -1898,20 +1934,23 @@
+ settabwinvar( {tabnr}, {winnr}, {varname}, {val})    set {varname} in window
+ 					{winnr} in tab page {tabnr} to {val}
+ setwinvar( {nr}, {varname}, {val})	set {varname} in window {nr} to {val}
++sha256( {string})		String	SHA256 checksum of {string}
+ shellescape( {string} [, {special}])
+ 				String	escape {string} for use as shell
+ 					command argument
++shiftwidth()			Number	effective value of 'shiftwidth'
+ simplify( {filename})		String	simplify filename as much as possible
+ sin( {expr})			Float	sine of {expr}
+ sinh( {expr})			Float	hyperbolic sine of {expr}
+-sort( {list} [, {func}])	List	sort {list}, using {func} to compare
++sort( {list} [, {func} [, {dict}]])
++				List	sort {list}, using {func} to compare
+ soundfold( {word})		String	sound-fold {word}
+ spellbadword()			String	badly spelled word at cursor
+ spellsuggest( {word} [, {max} [, {capital}]])
+ 				List	spelling suggestions
+ split( {expr} [, {pat} [, {keepempty}]])
+ 				List	make |List| from {pat} separated {expr}
+-sqrt( {expr}			Float	squar root of {expr}
++sqrt( {expr})			Float	square root of {expr}
+ str2float( {expr})		Float	convert String to Float
+ str2nr( {expr} [, {base}])	Number	convert String to Number
+ strchars( {expr})		Number	character length of the String {expr}
+@@ -1927,13 +1966,14 @@
+ 				Number	last index of {needle} in {haystack}
+ strtrans( {expr})		String	translate string to make it printable
+ strwidth( {expr})		Number	display cell length of the String {expr}
+-submatch( {nr})			String	specific match in ":substitute"
++submatch( {nr})			String	specific match in ":s" or substitute()
+ substitute( {expr}, {pat}, {sub}, {flags})
+ 				String	all {pat} in {expr} replaced with {sub}
+ synID( {lnum}, {col}, {trans})	Number	syntax ID at {lnum} and {col}
+ synIDattr( {synID}, {what} [, {mode}])
+ 				String	attribute {what} of syntax ID {synID}
+ synIDtrans( {synID})		Number	translated syntax ID of {synID}
++synconcealed( {lnum}, {col})	List    info about concealing
+ synstack( {lnum}, {col})	List	stack of syntax IDs at {lnum} and {col}
+ system( {expr} [, {input}])	String	output of shell command/filter {expr}
+ tabpagebuflist( [{arg}])	List	list of buffer numbers in tab page
+@@ -1949,13 +1989,14 @@
+ toupper( {expr})		String	the String {expr} switched to uppercase
+ tr( {src}, {fromstr}, {tostr})	String	translate chars of {src} in {fromstr}
+ 					to chars in {tostr}
+-trunc( {expr}			Float	truncate Float {expr}
++trunc( {expr})			Float	truncate Float {expr}
+ type( {name})			Number	type of variable {name}
+ undofile( {name})		String	undo file name for {name}
+ undotree()			List	undo file tree
+ values( {dict})			List	values in {dict}
+ virtcol( {expr})		Number	screen column of cursor or mark
+ visualmode( [expr])		String	last visual mode used
++wildmenumode()			Number	whether 'wildmenu' mode is active
+ winbufnr( {nr})			Number	buffer number of window {nr}
+ wincol()			Number	window column of the cursor
+ winheight( {nr})		Number	height of window {nr}
+@@ -1967,6 +2008,7 @@
+ winwidth( {nr})			Number	width of window {nr}
+ writefile( {list}, {fname} [, {binary}])
+ 				Number	write list of lines to file {fname}
++xor( {expr}, {expr})		Number  bitwise XOR
+ 
+ abs({expr})							*abs()*
+ 		Return the absolute value of {expr}.  When {expr} evaluates to
+@@ -2006,6 +2048,13 @@
+ 		Use |insert()| to add an item at another position.
+ 
+ 
++and({expr}, {expr})					*and()*
++		Bitwise AND on the two arguments.  The arguments are converted
++		to a number.  A List, Dict or Float argument causes an error.
++		Example: >
++			:let flag = and(bits, 0x80)
++
++
+ append({lnum}, {expr})					*append()*
+ 		When {expr} is a |List|: Append each item of the |List| as a
+ 		text line below line {lnum} in the current buffer.
+@@ -2250,14 +2299,17 @@
+ 		redo it is the number of the redone change.  After undo it is
+ 		one less than the number of the undone change.
+ 
+-char2nr({expr})						*char2nr()*
++char2nr({expr}[, {utf8}])					*char2nr()*
+ 		Return number value of the first char in {expr}.  Examples: >
+ 			char2nr(" ")		returns 32
+ 			char2nr("ABC")		returns 65
+-<		The current 'encoding' is used.  Example for "utf-8": >
++<		When {utf8} is omitted or zero, the current 'encoding' is used.
++		Example for "utf-8": >
+ 			char2nr("á")		returns 225
+ 			char2nr("á"[0])		returns 195
+-<		|nr2char()| does the opposite.
++<		With {utf8} set to 1, always treat as utf-8 characters.
++		A combining character is a separate character.
++		|nr2char()| does the opposite.
+ 
+ cindent({lnum})						*cindent()*
+ 		Get the amount of indent for line {lnum} according the C
+@@ -2277,7 +2329,7 @@
+ 		position given with {expr}.  The accepted positions are:
+ 		    .	    the cursor position
+ 		    $	    the end of the cursor line (the result is the
+-			    number of characters in the cursor line plus one)
++			    number of bytes in the cursor line plus one)
+ 		    'x	    position of mark x (if the mark is not set, 0 is
+ 			    returned)
+ 		Additionally {expr} can be [lnum, col]: a |List| with the line
+@@ -2531,6 +2583,8 @@
+ 		which is 0 if the file was deleted successfully, and non-zero
+ 		when the deletion failed.
+ 		Use |remove()| to delete an item from a |List|.
++		To delete a line from the buffer use |:delete|.  Use |:exe|
++		when the line number is in a variable.
+ 
+ 							*did_filetype()*
+ did_filetype()	Returns non-zero when autocommands are being executed and the
+@@ -2708,13 +2762,15 @@
+ 		{only available when compiled with the |+float| feature}
+ 
+ 
+-expand({expr} [, {flag}])				*expand()*
++expand({expr} [, {nosuf} [, {list}]])				*expand()*
+ 		Expand wildcards and the following special keywords in {expr}.
+-		The result is a String.
++		'wildignorecase' applies.
+ 
+-		When there are several matches, they are separated by <NL>
+-		characters.  [Note: in version 5.0 a space was used, which
+-		caused problems when a file name contains a space]
++		If {list} is given and it is non-zero, a List will be returned.
++		Otherwise the result is a String and when there are several
++		matches, they are separated by <NL> characters.  [Note: in
++		version 5.0 a space was used, which caused problems when a
++		file name contains a space]
+ 
+ 		If the expansion fails, the result is an empty string.	A name
+ 		for a non-existing file is not included.
+@@ -2731,6 +2787,7 @@
+ 			<abuf>		autocmd buffer number (as a String!)
+ 			<amatch>	autocmd matched name
+ 			<sfile>		sourced script file name
++			<slnum>		sourced script file line number
+ 			<cword>		word under the cursor
+ 			<cWORD>		WORD under the cursor
+ 			<client>	the {clientid} of the last received
+@@ -2767,10 +2824,10 @@
+ 		When {expr} does not start with '%', '#' or '<', it is
+ 		expanded like a file name is expanded on the command line.
+ 		'suffixes' and 'wildignore' are used, unless the optional
+-		{flag} argument is given and it is non-zero.  Names for
+-		non-existing files are included.  The "**" item can be used to
+-		search in a directory tree.  For example, to find all "README"
+-		files in the current directory and below: >
++		{nosuf} argument is given and it is non-zero.
++		Names for non-existing files are included.  The "**" item can
++		be used to search in a directory tree.  For example, to find
++		all "README" files in the current directory and below: >
+ 			:echo expand("**/README")
+ <
+ 		Expand() can also be used to expand variables and environment
+@@ -3043,7 +3100,7 @@
+ 		{name} can be a user defined function or an internal function.
+ 
+ 
+-garbagecollect([at_exit])				*garbagecollect()*
++garbagecollect([{atexit}])				*garbagecollect()*
+ 		Cleanup unused |Lists| and |Dictionaries| that have circular
+ 		references.  There is hardly ever a need to invoke this
+ 		function, as it is automatically done when Vim runs out of
+@@ -3053,7 +3110,7 @@
+ 		This is useful if you have deleted a very big |List| and/or
+ 		|Dictionary| with circular references in a script that runs
+ 		for a long time.
+-		When the optional "at_exit" argument is one, garbage
++		When the optional {atexit} argument is one, garbage
+ 		collection will also be done when exiting Vim, if it wasn't
+ 		done before.  This is useful when checking for memory leaks.
+ 
+@@ -3091,7 +3148,7 @@
+ 		Example: >
+ 			:let lines = getbufline(bufnr("myfile"), 1, "$")
+ 
+-getbufvar({expr}, {varname})				*getbufvar()*
++getbufvar({expr}, {varname} [, {def}])				*getbufvar()*
+ 		The result is the value of option or local buffer variable
+ 		{varname} in buffer {expr}.  Note that the name without "b:"
+ 		must be used.
+@@ -3101,8 +3158,8 @@
+ 		doesn't work for a global variable, window-local variable or
+ 		window-local option.
+ 		For the use of {expr}, see |bufname()| above.
+-		When the buffer or variable doesn't exist an empty string is
+-		returned, there is no error message.
++		When the buffer or variable doesn't exist {def} or an empty
++		string is returned, there is no error message.
+ 		Examples: >
+ 			:let bufmodified = getbufvar(1, "&mod")
+ 			:echo "todo myvar = " . getbufvar("todo", "myvar")
+@@ -3129,6 +3186,8 @@
+ 		one-byte character it is the character itself as a number.
+ 		Use nr2char() to convert it to a String.
+ 
++		Use getcharmod() to obtain any additional modifiers.
++
+ 		When the user clicks a mouse button, the mouse event will be
+ 		returned.  The position can then be found in |v:mouse_col|,
+ 		|v:mouse_lnum| and |v:mouse_win|.  This example positions the
+@@ -3167,10 +3226,11 @@
+ 			2	shift
+ 			4	control
+ 			8	alt (meta)
+-			16	mouse double click
+-			32	mouse triple click
+-			64	mouse quadruple click
+-			128	Macintosh only: command
++			16	meta (when it's different from ALT)
++			32	mouse double click
++			64	mouse triple click
++			96	mouse quadruple click (== 32 + 64)
++			128	command (Macintosh only)
+ 		Only the modifiers that have not been included in the
+ 		character itself are obtained.	Thus Shift-a results in "A"
+ 		without a modifier.
+@@ -3187,7 +3247,8 @@
+ 		Return the position of the cursor in the command line as a
+ 		byte count.  The first column is 1.
+ 		Only works when editing the command line, thus requires use of
+-		|c_CTRL-\_e| or |c_CTRL-R_=|.  Returns 0 otherwise.
++		|c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
++		Returns 0 otherwise.
+ 		Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
+ 
+ getcmdtype()						*getcmdtype()*
+@@ -3200,8 +3261,8 @@
+ 		    @	|input()| command
+ 		    -	|:insert| or |:append| command
+ 		Only works when editing the command line, thus requires use of
+-		|c_CTRL-\_e| or |c_CTRL-R_=|.  Returns an empty string
+-		otherwise.
++		|c_CTRL-\_e| or |c_CTRL-R_=| or an expression mapping.
++		Returns an empty string otherwise.
+ 		Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
+ 
+ 							*getcwd()*
+@@ -3239,8 +3300,9 @@
+ 		"rwx" flags represent, in turn, the permissions of the owner
+ 		of the file, the group the file belongs to, and other users.
+ 		If a user does not have a given permission the flag for this
+-		is replaced with the string "-".  Example: >
++		is replaced with the string "-".  Examples: >
+ 			:echo getfperm("/etc/passwd")
++			:echo getfperm(expand("~/.vimrc"))
+ <		This will hopefully (from a security point of view) display
+ 		the string "rw-r--r--" or even "rw-------".
+ 
+@@ -3374,26 +3436,30 @@
+ 		<CTRL-V> is one character with value 0x16.
+ 		If {regname} is not specified, |v:register| is used.
+ 
+-gettabvar({tabnr}, {varname})				*gettabvar()*
++gettabvar({tabnr}, {varname} [, {def}])				*gettabvar()*
+ 		Get the value of a tab-local variable {varname} in tab page
+ 		{tabnr}. |t:var|
+ 		Tabs are numbered starting with one.
+ 		Note that the name without "t:" must be used.
++		When the tab or variable doesn't exist {def} or an empty
++		string is returned, there is no error message.
+ 
+-gettabwinvar({tabnr}, {winnr}, {varname})		*gettabwinvar()*
++gettabwinvar({tabnr}, {winnr}, {varname} [, {def}])		*gettabwinvar()*
+ 		Get the value of window-local variable {varname} in window
+ 		{winnr} in tab page {tabnr}.
+ 		When {varname} starts with "&" get the value of a window-local
+ 		option.
++		When {varname} is empty a dictionary with all window-local
++		variables is returned.
++		Note that {varname} must be the name without "w:".
+ 		Tabs are numbered starting with one.  For the current tabpage
+ 		use |getwinvar()|.
+ 		When {winnr} is zero the current window is used.
+ 		This also works for a global option, buffer-local option and
+ 		window-local option, but it doesn't work for a global variable
+ 		or buffer-local variable.
+-		When {varname} is empty a dictionary with all window-local
+-		variables is returned.
+-		Note that {varname} must be the name without "w:".
++		When the tab, window or variable doesn't exist {def} or an
++		empty string is returned, there is no error message.
+ 		Examples: >
+ 			:let list_is_on = gettabwinvar(1, 2, '&list')
+ 			:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
+@@ -3408,24 +3474,31 @@
+ 		the top of the GUI Vim window.	The result will be -1 if the
+ 		information is not available.
+ 
+-getwinvar({winnr}, {varname})				*getwinvar()*
++getwinvar({winnr}, {varname} [, {def}])				*getwinvar()*
+ 		Like |gettabwinvar()| for the current tabpage.
+ 		Examples: >
+ 			:let list_is_on = getwinvar(2, '&list')
+ 			:echo "myvar = " . getwinvar(1, 'myvar')
+ <
+-glob({expr} [, {flag}])					*glob()*
++glob({expr} [, {nosuf} [, {list}]])				*glob()*
+ 		Expand the file wildcards in {expr}.  See |wildcards| for the
+ 		use of special characters.
+-		The result is a String.
+-		When there are several matches, they are separated by <NL>
+-		characters.
+-		Unless the optional {flag} argument is given and is non-zero,
++
++		Unless the optional {nosuf} argument is given and is non-zero,
+ 		the 'suffixes' and 'wildignore' options apply: Names matching
+ 		one of the patterns in 'wildignore' will be skipped and
+ 		'suffixes' affect the ordering of matches.
+-		If the expansion fails, the result is an empty string.
+-		A name for a non-existing file is not included.
++		'wildignorecase' always applies.
++
++		When {list} is present and it is non-zero the result is a List
++		with all matching files. The advantage of using a List is,
++		you also get filenames containing newlines correctly.
++		Otherwise the result is a String and when there are several
++		matches, they are separated by <NL> characters.
++
++		If the expansion fails, the result is an empty String or List.
++		A name for a non-existing file is not included.  A symbolic
++		link is only included if it points to an existing file.
+ 
+ 		For most systems backticks can be used to get files names from
+ 		any external command.  Example: >
+@@ -3511,6 +3584,9 @@
+ 			"search" or "/"   search pattern history
+ 			"expr"	 or "="   typed expression history
+ 			"input"  or "@"	  input line history
++			"debug"  or ">"   debug command history
++		The {history} string does not need to be the whole name, one
++		character is sufficient.
+ 		If {item} does already exist in the history, it will be
+ 		shifted to become the newest entry.
+ 		The result is a Number: 1 if the operation was successful,
+@@ -3694,10 +3770,10 @@
+ 		Like |input()|, but when the GUI is running and text dialogs
+ 		are supported, a dialog window pops up to input the text.
+ 		Example: >
+-			:let n = inputdialog("value for shiftwidth", &sw)
+-			:if n != ""
+-			:  let &sw = n
+-			:endif
++		   :let n = inputdialog("value for shiftwidth", shiftwidth())
++		   :if n != ""
++		   :  let &sw = n
++		   :endif
+ <		When the dialog is cancelled {cancelreturn} is returned.  When
+ 		omitted an empty string is returned.
+ 		Hitting <Enter> works like pressing the OK button.  Hitting
+@@ -3759,6 +3835,11 @@
+ 		Note that when {item} is a |List| it is inserted as a single
+ 		item.  Use |extend()| to concatenate |Lists|.
+ 
++invert({expr})						*invert()*
++		Bitwise invert.  The argument is converted to a number.  A
++		List, Dict or Float argument causes an error.  Example: >
++			:let bits = invert(bits)
++
+ isdirectory({directory})				*isdirectory()*
+ 		The result is a Number, which is non-zero when a directory
+ 		with the name {directory} exists.  If {directory} doesn't
+@@ -3897,11 +3978,12 @@
+ 		Return the byte count from the start of the buffer for line
+ 		{lnum}.  This includes the end-of-line character, depending on
+ 		the 'fileformat' option for the current buffer.  The first
+-		line returns 1.
++		line returns 1. 'encoding' matters, 'fileencoding' is ignored.
+ 		This can also be used to get the byte count for the line just
+ 		below the last line: >
+ 			line2byte(line("$") + 1)
+-<		This is the file size plus one.
++<		This is the buffer size plus one.  If 'fileencoding' is empty
++		it is the file size plus one.
+ 		When {lnum} is invalid, or the |+byte_offset| feature has been
+ 		disabled at compile time, -1 is returned.
+ 		Also see |byte2line()|, |go| and |:goto|.
+@@ -3941,6 +4023,20 @@
+ <			-2.0
+ 		{only available when compiled with the |+float| feature}
+ 		
++luaeval({expr}[, {expr}])					*luaeval()*
++		Evaluate Lua expression {expr} and return its result converted 
++		to Vim data structures. Second {expr} may hold additional 
++		argument accessible as _A inside first {expr}.
++		Strings are returned as they are.
++		Boolean objects are converted to numbers.
++		Numbers are converted to |Float| values if vim was compiled 
++		with |+float| and to numbers otherwise.
++		Dictionaries and lists obtained by vim.eval() are returned 
++		as-is.
++		Other objects are returned as zero without any errors.
++		See |lua-luaeval| for more details.
++		{only available when compiled with the |+lua| feature}
++
+ map({expr}, {string})					*map()*
+ 		{expr} must be a |List| or a |Dictionary|.
+ 		Replace each item in {expr} with the result of evaluating
+@@ -3959,30 +4055,58 @@
+ 
+ 		The operation is done in-place.  If you want a |List| or
+ 		|Dictionary| to remain unmodified make a copy first: >
+-			:let tlist = map(copy(mylist), ' & . "\t"')
++			:let tlist = map(copy(mylist), ' v:val . "\t"')
+ 
+ <		Returns {expr}, the |List| or |Dictionary| that was filtered.
+ 		When an error is encountered while evaluating {string} no
+ 		further items in {expr} are processed.
+ 
+ 
+-maparg({name}[, {mode} [, {abbr}]])			*maparg()*
+-		Return the rhs of mapping {name} in mode {mode}.  When there
+-		is no mapping for {name}, an empty String is returned.
++maparg({name}[, {mode} [, {abbr} [, {dict}]]])			*maparg()*
++		When {dict} is omitted or zero: Return the rhs of mapping
++		{name} in mode {mode}.  The returned String has special
++		characters translated like in the output of the ":map" command
++		listing.
++		
++		When there is no mapping for {name}, an empty String is
++		returned.
++
++		The {name} can have special key names, like in the ":map"
++		command.
++
+ 		{mode} can be one of these strings:
+ 			"n"	Normal
+-			"v"	Visual
++			"v"	Visual (including Select)
+ 			"o"	Operator-pending
+ 			"i"	Insert
+ 			"c"	Cmd-line
++			"s"	Select
++			"x"	Visual
+ 			"l"	langmap |language-mapping|
+ 			""	Normal, Visual and Operator-pending
+ 		When {mode} is omitted, the modes for "" are used.
++
+ 		When {abbr} is there and it is non-zero use abbreviations
+ 		instead of mappings.
+-		The {name} can have special key names, like in the ":map"
+-		command.  The returned String has special characters
+-		translated like in the output of the ":map" command listing.
++
++		When {dict} is there and it is non-zero return a dictionary
++		containing all the information of the mapping with the
++		following items:
++		  "lhs"	     The {lhs} of the mapping.
++		  "rhs"	     The {rhs} of the mapping as typed.
++		  "silent"   1 for a |:map-silent| mapping, else 0.
++		  "noremap"  1 if the {rhs} of the mapping is not remappable.
++		  "expr"     1 for an expression mapping (|:map-<expr>|).
++		  "buffer"   1 for a buffer local mapping (|:map-local|).
++		  "mode"     Modes for which the mapping is defined. In
++			     addition to the modes mentioned above, these
++			     characters will be used:
++			     " "     Normal, Visual and Operator-pending
++			     "!"     Insert and Commandline mode
++				     (|mapmode-ic|)
++		  "sid"	     The script local ID, used for <sid> mappings
++			     (|<SID>|).
++
+ 		The mappings local to the current buffer are checked first,
+ 		then the global mappings.
+ 		This function can be used to map a key even when it's already
+@@ -4031,6 +4155,7 @@
+ 		{pat} matches.
+ 		A match at the first character or |List| item returns zero.
+ 		If there is no match -1 is returned.
++		For getting submatches see |matchlist()|.
+ 		Example: >
+ 			:echo match("testing", "ing")	" results in 4
+ 			:echo match([1, 'x'], '\a')	" results in 1
+@@ -4236,7 +4361,7 @@
+ 
+ mzeval({expr})							*mzeval()*
+ 		Evaluate MzScheme expression {expr} and return its result
+-		convert to Vim data structures.
++		converted to Vim data structures.
+ 		Numbers and strings are returned as they are.
+ 		Pairs (including lists and improper lists) and vectors are
+ 		returned as Vim |Lists|.
+@@ -4259,14 +4384,16 @@
+ 		below it, zero is returned.
+ 		See also |prevnonblank()|.
+ 
+-nr2char({expr})						*nr2char()*
++nr2char({expr}[, {utf8}])				*nr2char()*
+ 		Return a string with a single character, which has the number
+ 		value {expr}.  Examples: >
+ 			nr2char(64)		returns "@"
+ 			nr2char(32)		returns " "
+-<		The current 'encoding' is used.  Example for "utf-8": >
++<		When {utf8} is omitted or zero, the current 'encoding' is used.
++		Example for "utf-8": >
+ 			nr2char(300)		returns I with bow character
+-<		Note that a NUL character in the file is specified with
++<		With {utf8} set to 1, always return utf-8 characters.
++		Note that a NUL character in the file is specified with
+ 		nr2char(10), because NULs are represented with newline
+ 		characters.  nr2char(0) is a real NUL and terminates the
+ 		string, thus results in an empty string.
+@@ -4295,6 +4422,13 @@
+ 			call setpos('.', save_cursor)
+ <		Also see |setpos()|.
+ 
++or({expr}, {expr})					*or()*
++		Bitwise OR on the two arguments.  The arguments are converted
++		to a number.  A List, Dict or Float argument causes an error.
++		Example: >
++			:let bits = or(bits, 0x80)
++
++
+ pathshorten({expr})					*pathshorten()*
+ 		Shorten directory names in the path {expr} and return the
+ 		result.  The tail, the file name, is kept as-is.  The other
+@@ -4334,6 +4468,7 @@
+ 
+ 		Often used items are:
+ 		  %s	string
++		  %6S	string right-aligned in 6 display cells
+ 		  %6s	string right-aligned in 6 bytes
+ 		  %.9s	string truncated to 9 bytes
+ 		  %c	single byte
+@@ -4448,6 +4583,10 @@
+ 		s	The text of the String argument is used.  If a
+ 			precision is specified, no more bytes than the number
+ 			specified are used.
++		S	The text of the String argument is used.  If a
++			precision is specified, no more display cells than the
++			number specified are used.  Without the |+multi_byte|
++			feature works just like 's'.
+ 
+ 							*printf-f* *E807*
+ 		f	The Float argument is converted into a string of the 
+@@ -4500,6 +4639,29 @@
+ 		This can be used to avoid some things that would remove the
+ 		popup menu.
+ 
++							*E860*
++py3eval({expr})						*py3eval()*
++		Evaluate Python expression {expr} and return its result
++		converted to Vim data structures.
++		Numbers and strings are returned as they are (strings are 
++		copied though, unicode strings are additionally converted to 
++		'encoding').
++		Lists are represented as Vim |List| type.
++		Dictionaries are represented as Vim |Dictionary| type with 
++		keys converted to strings.
++		{only available when compiled with the |+python3| feature}
++
++							*E858* *E859*
++pyeval({expr})						*pyeval()*
++		Evaluate Python expression {expr} and return its result
++		converted to Vim data structures.
++		Numbers and strings are returned as they are (strings are 
++		copied though).
++		Lists are represented as Vim |List| type.
++		Dictionaries are represented as Vim |Dictionary| type, 
++		non-string keys result in error.
++		{only available when compiled with the |+python| feature}
++
+ 							*E726* *E727*
+ range({expr} [, {max} [, {stride}]])				*range()*
+ 		Returns a |List| with Numbers:
+@@ -4727,12 +4889,35 @@
+ 			echo round(-4.5)
+ <			-5.0
+ 		{only available when compiled with the |+float| feature}
+-		
+-		
++
++screencol()							*screencol()*
++		The result is a Number, which is the current screen column of
++		the cursor. The leftmost column has number 1.
++		This function is mainly used for testing.
++
++		Note: Always returns the current screen column, thus if used
++		in a command (e.g. ":echo screencol()") it will return the
++		column inside the command line, which is 1 when the command is
++		executed. To get the cursor position in the file use one of
++		the following mappings: >
++			nnoremap <expr> GG ":echom ".screencol()."\n"
++			nnoremap <silent> GG :echom screencol()<CR>
++<
++screenrow()							*screenrow()*
++		The result is a Number, which is the current screen row of the
++		cursor.  The top line has number one.
++		This function is mainly used for testing.
++
++		Note: Same restrictions as with |screencol()|.
++
+ search({pattern} [, {flags} [, {stopline} [, {timeout}]]])	*search()*
+ 		Search for regexp pattern {pattern}.  The search starts at the
+ 		cursor position (you can use |cursor()| to set it).
+ 
++		When a match has been found its line number is returned.
++		If there is no match a 0 is returned and the cursor doesn't
++		move.  No error message is given.
++
+ 		{flags} is a String, which can contain these character flags:
+ 		'b'	search backward instead of forward
+ 		'c'	accept a match at the cursor position
+@@ -4760,15 +4945,12 @@
+ 		A zero value is equal to not giving the argument.
+ 
+ 		When the {timeout} argument is given the search stops when
+-		more than this many milli seconds have passed.	Thus when
++		more than this many milliseconds have passed.	Thus when
+ 		{timeout} is 500 the search stops after half a second.
+ 		The value must not be negative.  A zero value is like not
+ 		giving the argument.
+ 		{only available when compiled with the |+reltime| feature}
+ 
+-		If there is no match a 0 is returned and the cursor doesn't
+-		move.  No error message is given.
+-		When a match has been found its line number is returned.
+ 							*search()-sub-match*
+ 		With the 'p' flag the returned value is one more than the
+ 		first sub-match in \(\).  One if none of them matched but the
+@@ -4987,7 +5169,8 @@
+ 		line.
+ 
+ setline({lnum}, {text})					*setline()*
+-		Set line {lnum} of the current buffer to {text}.
++		Set line {lnum} of the current buffer to {text}.  To insert
++		lines use |append()|.
+ 		{lnum} is used like with |getline()|.
+ 		When {lnum} is just below the last line the {text} will be
+ 		added as a new line.
+@@ -4998,7 +5181,7 @@
+ 		will be set to the items in the list.  Example: >
+ 			:call setline(5, ['aaa', 'bbb', 'ccc'])
+ <		This is equivalent to: >
+-			:for [n, l] in [[5, 6, 7], ['aaa', 'bbb', 'ccc']]
++			:for [n, l] in [[5, 'aaa'], [6, 'bbb'], [7, 'ccc']]
+ 			:  call setline(n, l)
+ 			:endfor
+ <		Note: The '[ and '] marks are not set.
+@@ -5112,8 +5295,9 @@
+ 
+ 		If {options} contains no register settings, then the default
+ 		is to use character mode unless {value} ends in a <NL>.
+-		Setting the '=' register is not possible.
+-		Returns zero for success, non-zero for failure.
++		Setting the '=' register is not possible, but you can use >
++			:let @= = var_expr
++<		Returns zero for success, non-zero for failure.
+ 
+ 		Examples: >
+ 			:call setreg(v:register, @*)
+@@ -5136,8 +5320,6 @@
+ 		|t:var|
+ 		Note that the variable name without "t:" must be used.
+ 		Tabs are numbered starting with one.
+-		Vim briefly goes to the tab page {tabnr}, this may trigger
+-		TabLeave and TabEnter autocommands.
+ 		This function is not available in the |sandbox|.
+ 
+ settabwinvar({tabnr}, {winnr}, {varname}, {val})	*settabwinvar()*
+@@ -5150,8 +5332,6 @@
+ 		doesn't work for a global or local buffer variable.
+ 		For a local buffer option the global value is unchanged.
+ 		Note that the variable name without "w:" must be used.
+-		Vim briefly goes to the tab page {tabnr}, this may trigger
+-		TabLeave and TabEnter autocommands.
+ 		Examples: >
+ 			:call settabwinvar(1, 1, "&list", 0)
+ 			:call settabwinvar(3, 2, "myvar", "foobar")
+@@ -5163,6 +5343,11 @@
+ 			:call setwinvar(1, "&list", 0)
+ 			:call setwinvar(2, "myvar", "foobar")
+ 
++sha256({string})						*sha256()*
++		Returns a String with 64 hex charactes, which is the SHA256
++		checksum of {string}.
++		{only available when compiled with the |+cryptv| feature}
++
+ shellescape({string} [, {special}])			*shellescape()*
+ 		Escape {string} for use as a shell command argument.
+ 		On MS-Windows and MS-DOS, when 'shellslash' is not set, it
+@@ -5189,6 +5374,23 @@
+ 		    :call system("chmod +w -- " . shellescape(expand("%")))
+ 
+ 
++shiftwidth()						*shiftwidth()*
++		Returns the effective value of 'shiftwidth'. This is the
++		'shiftwidth' value unless it is zero, in which case it is the
++		'tabstop' value.  To be backwards compatible in indent
++		plugins, use this: >
++			if exists('*shiftwidth')
++			  func s:sw()
++			    return shiftwidth()
++			  endfunc
++			else
++			  func s:sw()
++			    return &sw
++			  endfunc
++			endif
++<		And then use s:sw() instead of &sw.
++
++
+ simplify({filename})					*simplify()*
+ 		Simplify the file name as much as possible without changing
+ 		the meaning.  Shortcuts (on MS-Windows) or symbolic links (on
+@@ -5228,7 +5430,7 @@
+ 		{only available when compiled with the |+float| feature}
+ 
+ 
+-sort({list} [, {func}])					*sort()* *E702*
++sort({list} [, {func} [, {dict}]])			*sort()* *E702*
+ 		Sort the items in {list} in-place.  Returns {list}.  If you
+ 		want a list to remain unmodified make a copy first: >
+ 			:let sortedlist = sort(copy(mylist))
+@@ -5236,6 +5438,8 @@
+ 		Numbers sort after Strings, |Lists| after Numbers.
+ 		For sorting text in the current buffer use |:sort|.
+ 		When {func} is given and it is one then case is ignored.
++		{dict} is for functions with the "dict" attribute.  It will be
++		used to set the local variable "self". |Dictionary-function|
+ 		When {func} is a |Funcref| or a function name, this function
+ 		is called to compare items.  The function is invoked with two
+ 		items as argument and must return zero if they are equal, 1 or
+@@ -5316,7 +5520,8 @@
+ 		empty each white-separated sequence of characters becomes an
+ 		item.
+ 		Otherwise the string is split where {pattern} matches,
+-		removing the matched characters.
++		removing the matched characters. 'ignorecase' is not used
++		here, add \c to ignore case. |/\c|
+ 		When the first or last item is empty it is omitted, unless the
+ 		{keepempty} argument is given and it's non-zero.
+ 		Other empty items are kept when {pattern} matches at least one
+@@ -5416,8 +5621,8 @@
+ 		{haystack} of the first occurrence of the String {needle}.
+ 		If {start} is specified, the search starts at index {start}.
+ 		This can be used to find a second match: >
+-			:let comma1 = stridx(line, ",")
+-			:let comma2 = stridx(line, ",", comma1 + 1)
++			:let colon1 = stridx(line, ":")
++			:let colon2 = stridx(line, ":", colon1 + 1)
+ <		The search is done case-sensitive.
+ 		For pattern searches use |match()|.
+ 		-1 is returned if the {needle} does not occur in {haystack}.
+@@ -5507,9 +5712,11 @@
+ 		Also see |strlen()|, |strdisplaywidth()| and |strchars()|.
+ 
+ submatch({nr})						*submatch()*
+-		Only for an expression in a |:substitute| command.  Returns
+-		the {nr}'th submatch of the matched text.  When {nr} is 0
+-		the whole matched text is returned.
++		Only for an expression in a |:substitute| command or
++		substitute() function.
++		Returns the {nr}'th submatch of the matched text.  When {nr}
++		is 0 the whole matched text is returned.
++		Also see |sub-replace-expression|.
+ 		Example: >
+ 			:s/\d\+/\=submatch(0) + 1/
+ <		This finds the first number in the line and adds one to it.
+@@ -5517,26 +5724,37 @@
+ 
+ substitute({expr}, {pat}, {sub}, {flags})		*substitute()*
+ 		The result is a String, which is a copy of {expr}, in which
+-		the first match of {pat} is replaced with {sub}.  This works
+-		like the ":substitute" command (without any flags).  But the
+-		matching with {pat} is always done like the 'magic' option is
+-		set and 'cpoptions' is empty (to make scripts portable).
+-		'ignorecase' is still relevant.  'smartcase' is not used.
+-		See |string-match| for how {pat} is used.
+-		And a "~" in {sub} is not replaced with the previous {sub}.
++		the first match of {pat} is replaced with {sub}.
++		When {flags} is "g", all matches of {pat} in {expr} are
++		replaced.  Otherwise {flags} should be "".
++		
++		This works like the ":substitute" command (without any flags).
++		But the matching with {pat} is always done like the 'magic'
++		option is set and 'cpoptions' is empty (to make scripts
++		portable).  'ignorecase' is still relevant, use |/\c| or |/\C|
++		if you want to ignore or match case and ignore 'ignorecase'.
++		'smartcase' is not used.  See |string-match| for how {pat} is
++		used.
++
++		A "~" in {sub} is not replaced with the previous {sub}.
+ 		Note that some codes in {sub} have a special meaning
+ 		|sub-replace-special|.	For example, to replace something with
+ 		"\n" (two characters), use "\\\\n" or '\\n'.
++
+ 		When {pat} does not match in {expr}, {expr} is returned
+ 		unmodified.
+-		When {flags} is "g", all matches of {pat} in {expr} are
+-		replaced.  Otherwise {flags} should be "".
++
+ 		Example: >
+ 			:let &path = substitute(&path, ",\\=[^,]*$", "", "")
+ <		This removes the last component of the 'path' option. >
+ 			:echo substitute("testing", ".*", "\\U\\0", "")
+ <		results in "TESTING".
+ 
++		When {sub} starts with "\=", the remainder is interpreted as
++		an expression. See |sub-replace-expression|.  Example: >
++			:echo substitute(s, '%\(\x\x\)',
++			   \ '\=nr2char("0x" . submatch(1))', 'g')
++
+ synID({lnum}, {col}, {trans})				*synID()*
+ 		The result is a Number, which is the syntax ID at the position
+ 		{lnum} and {col} in the current window.
+@@ -5558,20 +5776,6 @@
+ 			:echo synIDattr(synID(line("."), col("."), 1), "name")
+ <
+ 
+-synconcealed({lnum}, {col})				*synconcealed()*
+-		The result is a List. The first item in the list is 0 if the
+-		character at the position {lnum} and {col} is not part of a
+-		concealable region, 1 if it is. The second item in the list is
+-		a string. If the first item is 1, the second item contains the
+-		text which will be displayed in place of the concealed text,
+-		depending on the current setting of 'conceallevel'. The third
+-		and final item in the list is a unique number representing the
+-		specific syntax region matched. This allows detection of the
+-		beginning of a new concealable region if there are two
+-		consecutive regions with the same replacement character.
+-		For an example use see $VIMRUNTIME/syntax/2html.vim .
+-
+-
+ synIDattr({synID}, {what} [, {mode}])			*synIDattr()*
+ 		The result is a String, which is the {what} attribute of
+ 		syntax ID {synID}.  This can be used to obtain information
+@@ -5612,6 +5816,20 @@
+ 		highlight the character.  Highlight links given with
+ 		":highlight link" are followed.
+ 
++synconcealed({lnum}, {col})				*synconcealed()*
++		The result is a List. The first item in the list is 0 if the
++		character at the position {lnum} and {col} is not part of a
++		concealable region, 1 if it is. The second item in the list is
++		a string. If the first item is 1, the second item contains the
++		text which will be displayed in place of the concealed text,
++		depending on the current setting of 'conceallevel'. The third
++		and final item in the list is a unique number representing the
++		specific syntax region matched. This allows detection of the
++		beginning of a new concealable region if there are two
++		consecutive regions with the same replacement character.
++		For an example use see $VIMRUNTIME/syntax/2html.vim .
++
++
+ synstack({lnum}, {col})					*synstack()*
+ 		Return a |List|, which is the stack of syntax items at the
+ 		position {lnum} and {col} in the current window.  Each item in
+@@ -5674,9 +5892,9 @@
+ 		omitted the current tab page is used.
+ 		When {arg} is invalid the number zero is returned.
+ 		To get a list of all buffers in all tabs use this: >
+-			tablist = []
++			let buflist = []
+ 			for i in range(tabpagenr('$'))
+-			   call extend(tablist, tabpagebuflist(i + 1))
++			   call extend(buflist, tabpagebuflist(i + 1))
+ 			endfor
+ <		Note that a buffer may appear in more than one window.
+ 
+@@ -5737,8 +5955,9 @@
+ 		If there are no matching tags, then an empty list is returned.
+ 
+ 		To get an exact tag match, the anchors '^' and '$' should be
+-		used in {expr}.  Refer to |tag-regexp| for more information
+-		about the tag search regular expression pattern.
++		used in {expr}.  This also make the function work faster.
++		Refer to |tag-regexp| for more information about the tag
++		search regular expression pattern.
+ 
+ 		Refer to |'tags'| for information about how the tags file is
+ 		located by Vim. Refer to |tags-file-format| for the format of
+@@ -5839,6 +6058,8 @@
+ 		the undo file exists.
+ 		{name} is always expanded to the full path, since that is what
+ 		is used internally.
++		If {name} is empty undofile() returns an empty string, since a
++		buffer without a file name will not write an undo file.
+ 		Useful in combination with |:wundo| and |:rundo|.
+ 		When compiled without the +persistent_undo option this always
+ 		returns an empty string.
+@@ -5898,13 +6119,13 @@
+ 		would be of unlimited width.  When there is a <Tab> at the
+ 		position, the returned Number will be the column at the end of
+ 		the <Tab>.  For example, for a <Tab> in column 1, with 'ts'
+-		set to 8, it returns 8.
++		set to 8, it returns 8. |conceal| is ignored.
+ 		For the byte position use |col()|.
+ 		For the use of {expr} see |col()|.
+ 		When 'virtualedit' is used {expr} can be [lnum, col, off], where
+ 		"off" is the offset in screen columns from the start of the
+ 		character.  E.g., a position within a <Tab> or after the last
+-		character.
++		character.  When "off" is omitted zero is used.
+ 		When Virtual editing is active in the current mode, a position
+ 		beyond the end of the line can be returned. |'virtualedit'|
+ 		The accepted positions are:
+@@ -5947,6 +6168,18 @@
+ 		Dictionary or Float is not a Number or String, thus does not
+ 		cause the mode to be cleared.
+ 
++wildmenumode()					*wildmenumode()*
++		Returns non-zero when the wildmenu is active and zero
++		otherwise.  See 'wildmenu' and 'wildmode'.
++		This can be used in mappings to handle the 'wildcharm' option
++		gracefully. (Makes only sense with |mapmode-c| mappings).
++
++		For example to make <c-j> work like <down> in wildmode, use: >
++    :cnoremap <expr> <C-j> wildmenumode() ? "\<Down>\<Tab>" : "\<c-j>"
++<
++		(Note, this needs the 'wildcharm' option set appropriately).
++
++
+ 							*winbufnr()*
+ winbufnr({nr})	The result is a Number, which is the number of the buffer
+ 		associated with window {nr}.  When {nr} is zero, the number of
+@@ -5979,8 +6212,9 @@
+ winnr([{arg}])	The result is a Number, which is the number of the current
+ 		window.  The top window has number 1.
+ 		When the optional argument is "$", the number of the
+-		last window is returned (the window count).
+-		When the optional argument is "#", the number of the last
++		last window is returned (the window count). >
++			let window_count = winnr('$')
++<		When the optional argument is "#", the number of the last
+ 		accessed window is returned (where |CTRL-W_p| goes to).
+ 		If there is no previous window or it is in another tab page 0
+ 		is returned.
+@@ -6056,8 +6290,16 @@
+ 		To copy a file byte for byte: >
+ 			:let fl = readfile("foo", "b")
+ 			:call writefile(fl, "foocopy", "b")
++
++
++xor({expr}, {expr})					*xor()*
++		Bitwise XOR on the two arguments.  The arguments are converted
++		to a number.  A List, Dict or Float argument causes an error.
++		Example: >
++			:let bits = xor(bits, 0x80)
+ <
+ 
++
+ 							*feature-list*
+ There are three types of features:
+ 1.  Features that are only supported when they have been enabled when Vim
+@@ -6084,6 +6326,7 @@
+ beos			BeOS version of Vim.
+ browse			Compiled with |:browse| support, and browse() will
+ 			work.
++browsefilter		Compiled with support for |browsefilter|.
+ builtin_terms		Compiled with some builtin terminals.
+ byte_offset		Compiled with support for 'o' in 'statusline'
+ cindent			Compiled with 'cindent' support.
+@@ -6093,17 +6336,17 @@
+ cmdline_hist		Compiled with |cmdline-history| support.
+ cmdline_info		Compiled with 'showcmd' and 'ruler' support.
+ comments		Compiled with |'comments'| support.
++compatible		Compiled to be very Vi compatible.
+ cryptv			Compiled with encryption support |encryption|.
+ cscope			Compiled with |cscope| support.
+-compatible		Compiled to be very Vi compatible.
+ debug			Compiled with "DEBUG" defined.
+ dialog_con		Compiled with console dialog support.
+ dialog_gui		Compiled with GUI dialog support.
+ diff			Compiled with |vimdiff| and 'diff' support.
+ digraphs		Compiled with support for digraphs.
+ dnd			Compiled with support for the "~ register |quote_~|.
+-dos32			32 bits DOS (DJGPP) version of Vim.
+ dos16			16 bits DOS version of Vim.
++dos32			32 bits DOS (DJGPP) version of Vim.
+ ebcdic			Compiled on a machine with ebcdic character set.
+ emacs_tags		Compiled with support for Emacs tags.
+ eval			Compiled with expression evaluation support.  Always
+@@ -6126,15 +6369,15 @@
+ gettext			Compiled with message translation |multi-lang|
+ gui			Compiled with GUI enabled.
+ gui_athena		Compiled with Athena GUI.
++gui_gnome		Compiled with Gnome support (gui_gtk is also defined).
+ gui_gtk			Compiled with GTK+ GUI (any version).
+ gui_gtk2		Compiled with GTK+ 2 GUI (gui_gtk is also defined).
+-gui_gnome		Compiled with Gnome support (gui_gtk is also defined).
+ gui_mac			Compiled with Macintosh GUI.
+ gui_motif		Compiled with Motif GUI.
+ gui_photon		Compiled with Photon GUI.
++gui_running		Vim is running in the GUI, or it will start soon.
+ gui_win32		Compiled with MS Windows Win32 GUI.
+ gui_win32s		idem, and Win32s system being used (Windows 3.1)
+-gui_running		Vim is running in the GUI, or it will start soon.
+ hangul_input		Compiled with Hangul input support. |hangul|
+ iconv			Can use iconv() for conversion.
+ insert_expand		Compiled with support for CTRL-X expansion commands in
+@@ -6156,30 +6399,32 @@
+ mksession		Compiled with support for |:mksession|.
+ modify_fname		Compiled with file name modifiers. |filename-modifiers|
+ mouse			Compiled with support mouse.
+-mouseshape		Compiled with support for 'mouseshape'.
+ mouse_dec		Compiled with support for Dec terminal mouse.
+ mouse_gpm		Compiled with support for gpm (Linux console mouse)
+ mouse_netterm		Compiled with support for netterm mouse.
+ mouse_pterm		Compiled with support for qnx pterm mouse.
+ mouse_sysmouse		Compiled with support for sysmouse (*BSD console mouse)
++mouse_sgr		Compiled with support for sgr mouse.
++mouse_urxvt		Compiled with support for urxvt mouse.
+ mouse_xterm		Compiled with support for xterm mouse.
++mouseshape		Compiled with support for 'mouseshape'.
+ multi_byte		Compiled with support for 'encoding'
+ multi_byte_encoding	'encoding' is set to a multi-byte encoding.
+ multi_byte_ime		Compiled with support for IME input method.
+ multi_lang		Compiled with support for multiple languages.
+ mzscheme		Compiled with MzScheme interface |mzscheme|.
+-netbeans_intg		Compiled with support for |netbeans|.
+ netbeans_enabled	Compiled with support for |netbeans| and connected.
++netbeans_intg		Compiled with support for |netbeans|.
+ ole			Compiled with OLE automation support for Win32.
+ os2			OS/2 version of Vim.
+-osfiletype		Compiled with support for osfiletypes |+osfiletype|
+ path_extra		Compiled with up/downwards search in 'path' and 'tags'
+ perl			Compiled with Perl interface.
+ persistent_undo		Compiled with support for persistent undo history.
+ postscript		Compiled with PostScript file printing.
+ printer			Compiled with |:hardcopy| support.
+ profile			Compiled with |:profile| support.
+-python			Compiled with Python interface.
++python			Compiled with Python 2.x interface. |has-python|
++python3			Compiled with Python 3.x interface. |has-python|
+ qnx			QNX version of Vim.
+ quickfix		Compiled with |quickfix| support.
+ reltime			Compiled with |reltime()| support.
+@@ -6190,11 +6435,11 @@
+ signs			Compiled with |:sign| support.
+ smartindent		Compiled with 'smartindent' support.
+ sniff			Compiled with SNiFF interface support.
++spell			Compiled with spell checking support |spell|.
+ startuptime		Compiled with |--startuptime| support.
+ statusline		Compiled with support for 'statusline', 'rulerformat'
+ 			and special formats of 'titlestring' and 'iconstring'.
+ sun_workshop		Compiled with support for Sun |workshop|.
+-spell			Compiled with spell checking support |spell|.
+ syntax			Compiled with syntax highlighting support |syntax|.
+ syntax_items		There are active syntax highlighting items for the
+ 			current buffer.
+@@ -6215,9 +6460,9 @@
+ toolbar			Compiled with support for |gui-toolbar|.
+ unix			Unix version of Vim.
+ user_commands		User-defined commands.
+-viminfo			Compiled with viminfo support.
+-vim_starting		True while initial source'ing takes place.
+ vertsplit		Compiled with vertically split windows |:vsplit|.
++vim_starting		True while initial source'ing takes place. |startup|
++viminfo			Compiled with viminfo support.
+ virtualedit		Compiled with 'virtualedit' option.
+ visual			Compiled with Visual mode.
+ visualextra		Compiled with extra Visual mode commands.
+@@ -6226,16 +6471,18 @@
+ vreplace		Compiled with |gR| and |gr| commands.
+ wildignore		Compiled with 'wildignore' option.
+ wildmenu		Compiled with 'wildmenu' option.
+-windows			Compiled with support for more than one window.
+-winaltkeys		Compiled with 'winaltkeys' option.
+ win16			Win16 version of Vim (MS-Windows 3.1).
+-win32			Win32 version of Vim (MS-Windows 95/98/ME/NT/2000/XP).
+-win64			Win64 version of Vim (MS-Windows 64 bit).
++win32			Win32 version of Vim (MS-Windows 95 and later, 32 or
++			64 bits)
+ win32unix		Win32 version of Vim, using Unix files (Cygwin)
++win64			Win64 version of Vim (MS-Windows 64 bit).
+ win95			Win32 version for MS-Windows 95/98/ME.
++winaltkeys		Compiled with 'winaltkeys' option.
++windows			Compiled with support for more than one window.
+ writebackup		Compiled with 'writebackup' default on.
+ xfontset		Compiled with X fontset support |xfontset|.
+ xim			Compiled with X input method support |xim|.
++xpm_w32			Compiled with pixmap support for Win32.
+ xsmp			Compiled with X session management support.
+ xsmp_interact		Compiled with interactive X session management support.
+ xterm_clipboard		Compiled with support for xterm clipboard.
+@@ -6308,7 +6555,7 @@
+ <
+ See |:verbose-cmd| for more information.
+ 
+-							*E124* *E125*
++							*E124* *E125* *E853*
+ :fu[nction][!] {name}([arguments]) [range] [abort] [dict]
+ 			Define a new function by the name {name}.  The name
+ 			must be made of alphanumeric characters and '_', and
+@@ -6338,6 +6585,8 @@
+ 			is excluded, ":{range}call" will call the function for
+ 			each line in the range, with the cursor on the start
+ 			of each line.  See |function-range-example|.
++			The cursor is still moved to the first line of the
++			range, as is the case with all Ex commands.
+ 
+ 			When the [abort] argument is added, the function will
+ 			abort as soon as an error is detected.
+@@ -6569,9 +6818,9 @@
+ ==============================================================================
+ 6. Curly braces names					*curly-braces-names*
+ 
+-Wherever you can use a variable, you can use a "curly braces name" variable.
+-This is a regular variable name with one or more expressions wrapped in braces
+-{} like this: >
++In most places where you can use a variable, you can use a "curly braces name"
++variable.  This is a regular variable name with one or more expressions
++wrapped in braces {} like this: >
+ 	my_{adjective}_variable
+ 
+ When Vim encounters this, it evaluates the expression inside the braces, puts
+@@ -6607,6 +6856,11 @@
+ 
+ This would call the function "my_func_whizz(parameter)".
+ 
++This does NOT work: >
++  :let i = 3
++  :let @{i} = ''  " error
++  :echo @{i}      " error
++
+ ==============================================================================
+ 7. Commands						*expression-commands*
+ 
+@@ -6741,7 +6995,8 @@
+ :let [{name}, ..., ; {lastname}] -= {expr1}
+ 			Like above, but append/add/subtract the value for each
+ 			|List| item.
+-							*E106*
++
++								*E121*
+ :let {var-name}	..	List the value of variable {var-name}.	Multiple
+ 			variable names may be given.  Special names recognized
+ 			here:				*E738*
+@@ -7027,7 +7282,9 @@
+ 			is terminated.
+ 			Example: >
+ 		:try | throw "oops" | catch /^oo/ | echo "caught" | endtry
+-<
++<			Note that "catch" may need to be on a separate line
++			for when an error causes the parsing to skip the whole
++			line and not see the "|" that separates the commands.
+ 
+ 							*:ec* *:echo*
+ :ec[ho] {expr1} ..	Echoes each {expr1}, with a space in between.  The
+diff -Naur vim73.orig/runtime/doc/evim-fr.1 vim73/runtime/doc/evim-fr.1
+--- vim73.orig/runtime/doc/evim-fr.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/evim-fr.1	2013-06-07 17:07:08.552317586 +0000
+@@ -1,4 +1,4 @@
+-.TH EVIM 1 "16 février 2002 February 16"
++.TH EVIM 1 "16 février 2002"
+ .SH NAME
+ evim \- « Easy Vim », édite un fichier avec Vim sans utiliser les modes
+ .SH SYNOPSIS
+@@ -54,3 +54,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a été traduite David Blanchet.
+ <david.blanchet@free.fr> 2005-03-26.
++Mise à jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/evim-fr.UTF-8.1 vim73/runtime/doc/evim-fr.UTF-8.1
+--- vim73.orig/runtime/doc/evim-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/evim-fr.UTF-8.1	2013-06-07 17:07:08.558984234 +0000
+@@ -1,4 +1,4 @@
+-.TH EVIM 1 "16 fÃ©vrier 2002 February 16"
++.TH EVIM 1 "16 fÃ©vrier 2002"
+ .SH NAME
+ evim \- Â« Easy Vim Â», Ã©dite un fichier avec Vim sans utiliser les modes
+ .SH SYNOPSIS
+@@ -54,3 +54,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a Ã©tÃ© traduite David Blanchet.
+ <david.blanchet@free.fr> 2005-03-26.
++Mise Ã  jour 2013-05-10, Dominique PellÃ© <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/filetype.txt vim73/runtime/doc/filetype.txt
+--- vim73.orig/runtime/doc/filetype.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/filetype.txt	2013-06-07 17:07:08.652317301 +0000
+@@ -1,4 +1,4 @@
+-*filetype.txt*  For Vim version 7.3.  Last change: 2008 Jul 15
++*filetype.txt*  For Vim version 7.3.  Last change: 2013 May 25
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -270,6 +270,9 @@
+ 
+ 
+ 						*autocmd-osfiletypes*
++NOTE: this code is currently disabled, as the RISC OS implementation was
++removed.  In the future this will use the 'filetype' option.
++
+ On operating systems which support storing a file type with the file, you can
+ specify that an autocommand should only be executed if the file is of a
+ certain type.
+@@ -296,8 +299,6 @@
+ 
+ This will match files of type "&fff" whose names start with "diff".
+ 
+-Note that osfiletype checking is skipped if Vim is compiled without the
+-|+osfiletype| feature.
+ 
+ 							*plugin-details*
+ The "plugin" directory can be in any of the directories in the 'runtimepath'
+@@ -602,7 +603,7 @@
+ file: |ft_sql.txt|.
+ 
+ 
+-TEX							*ft-tex-plugin*
++TEX						*ft-tex-plugin* *g:tex_flavor*
+ 
+ If the first line of a *.tex file has the form >
+ 	%&<format>
+diff -Naur vim73.orig/runtime/doc/fold.txt vim73/runtime/doc/fold.txt
+--- vim73.orig/runtime/doc/fold.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/fold.txt	2013-06-07 17:07:08.665650596 +0000
+@@ -60,7 +60,7 @@
+ The nesting of folds is limited with 'foldnestmax'.
+ 
+ Some lines are ignored and get the fold level of the line above or below it,
+-whatever is the lowest.  These are empty or white lines and lines starting
++whichever is lower.  These are empty or white lines and lines starting
+ with a character in 'foldignore'.  White space is skipped before checking for
+ characters in 'foldignore'.  For C use "#" to ignore preprocessor lines.
+ 
+diff -Naur vim73.orig/runtime/doc/ft_ada.txt vim73/runtime/doc/ft_ada.txt
+--- vim73.orig/runtime/doc/ft_ada.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/ft_ada.txt	2013-06-07 17:07:08.678983891 +0000
+@@ -6,20 +6,20 @@
+ ADA								      *ada.vim*
+ 
+ 1.  Syntax Highlighting			    |ft-ada-syntax|
+-2.  Plug-in				    |ft-ada-plugin|
++2.  File type Plug-in			    |ft-ada-plugin|
+ 3.  Omni Completion			    |ft-ada-omni|
+     3.1 Omni Completion with "gnat xref"	|gnat-xref|
+     3.2 Omni Completion with "ctags"		|ada-ctags|
+ 4.  Compiler Support			    |ada-compiler|
+     4.1 GNAT					|compiler-gnat|
+-    4.1 Dec Ada					|compiler-decada|
++    4.2 Dec Ada					|compiler-decada|
+ 5.  References				    |ada-reference|
+     5.1 Options					|ft-ada-options|
+-    5.2 Functions				|ft-ada-functions|
+-    5.3 Commands				|ft-ada-commands|
+-    5.4 Variables				|ft-ada-variables|
+-    5.5 Constants				|ft-ada-constants|
+-8.  Extra Plug-ins			    |ada-extra-plugins|
++    5.2 Commands				|ft-ada-commands|
++    5.3 Variables				|ft-ada-variables|
++    5.4 Constants				|ft-ada-constants|
++    5.5 Functions				|ft-ada-functions|
++6.  Extra Plug-ins			    |ada-extra-plugins|
+ 
+ ==============================================================================
+ 1. Syntax Highlighting ~
+@@ -139,7 +139,7 @@
+ support yet.
+ 
+ ==============================================================================
+-4.  Compiler Support ~
++4. Compiler Support ~
+ 								*ada-compiler*
+ 
+ The Ada mode supports more than one Ada compiler and will automatically load the
+@@ -367,7 +367,7 @@
+ makes no difference.
+ 
+ ------------------------------------------------------------------------------
+-5.3 Commands ~
++5.2 Commands ~
+ 							     *ft-ada-commands*
+ 
+ :AdaRainbow							 *:AdaRainbow*
+@@ -445,7 +445,7 @@
+ 		for Ctags generates.
+ 
+ ------------------------------------------------------------------------------
+-5.2 Functions ~
++5.5 Functions ~
+ 							    *ft-ada-functions*
+ 
+ ada#Word([{line}, {col}])					  *ada#Word()*
+@@ -479,7 +479,7 @@
+ 
+ 
+ ==============================================================================
+-8. Extra Plugins ~
++6. Extra Plugins ~
+ 							   *ada-extra-plugins*
+ 
+ You can optionally install the following extra plug-ins. They work well with
+diff -Naur vim73.orig/runtime/doc/ft_sql.txt vim73/runtime/doc/ft_sql.txt
+--- vim73.orig/runtime/doc/ft_sql.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/ft_sql.txt	2013-06-07 17:07:08.692317187 +0000
+@@ -1,4 +1,4 @@
+-*ft_sql.txt*	For Vim version 7.3.  Last change: 2010 Jul 20
++*ft_sql.txt*	For Vim version 7.3.  Last change: 2013 May 15
+ 
+ by David Fishburn
+ 
+@@ -349,6 +349,7 @@
+ The static maps (which are based on the syntax highlight groups) follow this
+ format: >
+     imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword')<CR><C-X><C-O>
++    imap <buffer> <C-C>k <C-\><C-O>:call sqlcomplete#Map('sqlKeyword\w*')<CR><C-X><C-O>
+ 
+ This command breaks down as: >
+     imap		   - Create an insert map
+@@ -369,6 +370,9 @@
+ 			     command while editing a SQL file.
+     'sqlKeyword'	   - Display the items for the sqlKeyword highlight
+ 			     group
++    'sqlKeyword\w*'	   - A second option available with Vim 7.4 which
++                             uses a regular expression to determine which
++			     syntax groups to use
+     )<CR>		   - Execute the :let command
+     <C-X><C-O>		   - Trigger the standard omni completion key stroke.
+ 			     Passing in 'sqlKeyword' instructs the SQL
+@@ -435,7 +439,7 @@
+ 			     of columns, you can press <Left>, this will
+ 			     replace the column list with the list of tables.
+ 			   - This allows you to quickly drill down into a
+-			     table to view it's columns and back again.
++			     table to view its columns and back again.
+ 			   - <Right> and <Left> can be also be chosen via
+ 			     your |.vimrc| >
+                                 let g:ftplugin_sql_omni_key_right = '<Right>'
+@@ -645,7 +649,7 @@
+ 	- When completing tables, procedure or views and using dbext.vim 3.00
+ 	  or higher the list of objects will also include the owner name.
+ 	  When completing these objects and omni_sql_include_owner is enabled
+-	  the owner name will be be replaced. >
++	  the owner name will be replaced. >
+ 
+     omni_sql_precache_syntax_groups
+ <	- Default:
+diff -Naur vim73.orig/runtime/doc/gui.txt vim73/runtime/doc/gui.txt
+--- vim73.orig/runtime/doc/gui.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/gui.txt	2013-06-07 17:07:08.705650482 +0000
+@@ -1,4 +1,4 @@
+-*gui.txt*       For Vim version 7.3.  Last change: 2010 May 14
++*gui.txt*       For Vim version 7.3.  Last change: 2011 Jul 22
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -147,6 +147,15 @@
+ If you are running the X Window System, you can get information about the
+ window Vim is running in with this command: >
+ 	:!xwininfo -id $WINDOWID
++<
++							*gui-IME* *iBus*
++Input methods for international characters in X that rely on the XIM
++framework, most notably iBus, have been known to produce undesirable results
++in gVim. These may include an inability to enter spaces, or long delays
++between typing a character and it being recognized by the application.
++
++One workaround that has been successful, for unknown reasons, is to prevent
++gvim from forking into the background by starting it with the |-f| argument.
+ 
+ ==============================================================================
+ 2. Scrollbars						*gui-scrollbars*
+@@ -156,26 +165,26 @@
+ 
+ The interface looks like this (with ":set guioptions=mlrb"):
+ 
+-		       +------------------------------+
+-		       | File  Edit		 Help | <- Menu bar (m)
+-		       +-+--------------------------+-+
+-		       |^|			    |^|
+-		       |#| Text area.		    |#|
+-		       | |			    | |
+-		       |v|__________________________|v|
+- Normal status line -> |-+ File.c	       5,2  +-|
+- between Vim windows   |^|""""""""""""""""""""""""""|^|
+-		       | |			    | |
+-		       | | Another file buffer.     | |
+-		       | |			    | |
+-		       |#|			    |#|
+- Left scrollbar (l) -> |#|			    |#| <- Right
+-		       |#|			    |#|    scrollbar (r)
+-		       | |			    | |
+-		       |v|			    |v|
+-		       +-+--------------------------+-+
+-		       | |< ####		   >| | <- Bottom
+-		       +-+--------------------------+-+    scrollbar (b)
++		       +------------------------------+ `
++		       | File  Edit		 Help | <- Menu bar (m) `
++		       +-+--------------------------+-+ `
++		       |^|			    |^| `
++		       |#| Text area.		    |#| `
++		       | |			    | | `
++		       |v|__________________________|v| `
++ Normal status line -> |-+ File.c	       5,2  +-| `
++ between Vim windows   |^|""""""""""""""""""""""""""|^| `
++		       | |			    | | `
++		       | | Another file buffer.     | | `
++		       | |			    | | `
++		       |#|			    |#| `
++ Left scrollbar (l) -> |#|			    |#| <- Right `
++		       |#|			    |#|    scrollbar (r) `
++		       | |			    | | `
++		       |v|			    |v| `
++		       +-+--------------------------+-+ `
++		       | |< ####		   >| | <- Bottom `
++		       +-+--------------------------+-+    scrollbar (b) `
+ 
+ Any of the scrollbar or menu components may be turned off by not putting the
+ appropriate letter in the 'guioptions' string.  The bottom scrollbar is
+diff -Naur vim73.orig/runtime/doc/gui_w16.txt vim73/runtime/doc/gui_w16.txt
+--- vim73.orig/runtime/doc/gui_w16.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/gui_w16.txt	2013-06-07 17:07:08.715650453 +0000
+@@ -16,7 +16,7 @@
+ 
+ Other relevant documentation:
+ |gui.txt|	For generic items of the GUI.
+-|os_msdos.txt|  For items common to DOS and Windows.
++|os_msdos.txt|	For items common to DOS and Windows.
+ |gui_w32.txt|	Some items here are also applicable to the Win16 version.
+ 
+ {Vi does not have a Windows GUI}
+diff -Naur vim73.orig/runtime/doc/gui_w32.txt vim73/runtime/doc/gui_w32.txt
+--- vim73.orig/runtime/doc/gui_w32.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/gui_w32.txt	2013-06-07 17:07:08.755650339 +0000
+@@ -1,4 +1,4 @@
+-*gui_w32.txt*   For Vim version 7.3.  Last change: 2007 Aug 30
++*gui_w32.txt*   For Vim version 7.3.  Last change: 2012 Aug 04
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -17,7 +17,7 @@
+ 
+ Other relevant documentation:
+ |gui.txt|	For generic items of the GUI.
+-|os_win32.txt|  For Win32 specific items.
++|os_win32.txt| 	For Win32 specific items.
+ 
+ {Vi does not have a Windows GUI}
+ 
+@@ -137,6 +137,9 @@
+ And if there already is a gvim running:
+ "Edit with existing gvim"   -- edit the file with the running gvim
+ 
++The "edit with existing Vim" entries can be disabled by adding an entry in the
++registry under HKLM\Software\Vim\Gvim, named DisableEditWithExisting, and with
++any value.
+ 						*install-registry*
+ You can add the "Edit with Vim" menu entry in an easy way by using the
+ "install.exe" program.  It will add several registry entries for you.
+@@ -293,7 +296,9 @@
+ sense for most shell commands which produce output for Vim to use).  If you
+ want Vim to start a program and return immediately, you can use the following
+ syntax on W95 & NT: >
+-	:!start {command}
++	:!start [/min] {command}
++The optional "/min" causes the window to be minimized.
++
+ On Win32s, you will have to go to another window instead.  Don't forget that
+ you must tell Windows 3.1x to keep executing a DOS command in the background
+ while you switch back to Vim.
+@@ -484,4 +489,16 @@
+ And add gvim to the list of applications.  This problem only appears to happen
+ with the Intellimouse driver 2.2 and when "Universal Scrolling" is turned on.
+ 
++
++XPM support						*w32-xpm-support*
++
++Gvim can be build on MS-Windows with support for XPM files.  |+xpm_w32|
++See the Make_mvc.mak file for instructions, search for XPM.
++
++To try out if XPM support works do this: >
++	:help
++	:exe 'sign define vimxpm icon=' . $VIMRUNTIME . '\\vim16x16.xpm'
++	:exe 'sign place 1 line=1 name=vimxpm file=' . expand('%:p')
++<
++
+  vim:tw=78:sw=4:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/gui_x11.txt vim73/runtime/doc/gui_x11.txt
+--- vim73.orig/runtime/doc/gui_x11.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/gui_x11.txt	2013-06-07 17:07:08.765650311 +0000
+@@ -1,4 +1,4 @@
+-*gui_x11.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
++*gui_x11.txt*   For Vim version 7.3.  Last change: 2011 Sep 14
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -53,6 +53,8 @@
+ ":gui -b".
+ 
+ "gvim --nofork" does the same as "gvim -f".
++								*E851* *E852*
++When starting the GUI fails Vim will try to continue running in the terminal.
+ 
+ If you want the GUI to run in the foreground always, include the 'f'
+ flag in 'guioptions'.  |-f|.
+diff -Naur vim73.orig/runtime/doc/hebrew.txt vim73/runtime/doc/hebrew.txt
+--- vim73.orig/runtime/doc/hebrew.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/hebrew.txt	2013-06-07 17:07:08.812316844 +0000
+@@ -93,7 +93,7 @@
+       This is also the keymap when 'keymap=hebrew' is set.  The advantage of
+       'keymap' is that it works properly when using UTF8, e.g. it inserts the
+       correct characters; 'hkmap' does not.  The 'keymap' keyboard can also
+-      insert niqud and te`amim.  To see what those mappings are,look at the
++      insert niqud and te`amim.  To see what those mappings are, look at the
+       keymap file 'hebrew.vim' etc.
+ 
+ 
+diff -Naur vim73.orig/runtime/doc/help.txt vim73/runtime/doc/help.txt
+--- vim73.orig/runtime/doc/help.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/help.txt	2013-06-07 17:07:08.822316815 +0000
+@@ -1,4 +1,4 @@
+-*help.txt*	For Vim version 7.3.  Last change: 2010 Jul 20
++*help.txt*	For Vim version 7.3.  Last change: 2012 Dec 06
+ 
+ 			VIM - main help file
+ 									 k
+@@ -195,12 +195,12 @@
+ 						*standard-plugin-list*
+ Standard plugins ~
+ |pi_getscript.txt| Downloading latest version of Vim scripts
+-|pi_gzip.txt|	   Reading and writing compressed files
+-|pi_netrw.txt|	   Reading and writing files over a network
+-|pi_paren.txt|	   Highlight matching parens
+-|pi_tar.txt|	   Tar file explorer
++|pi_gzip.txt|      Reading and writing compressed files
++|pi_netrw.txt|     Reading and writing files over a network
++|pi_paren.txt|     Highlight matching parens
++|pi_tar.txt|       Tar file explorer
+ |pi_vimball.txt|   Create a self-installing Vim script
+-|pi_zip.txt|	   Zip archive explorer
++|pi_zip.txt|       Zip archive explorer
+ 
+ LOCAL ADDITIONS:				*local-additions*
+ 
+diff -Naur vim73.orig/runtime/doc/helphelp.txt vim73/runtime/doc/helphelp.txt
+--- vim73.orig/runtime/doc/helphelp.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/helphelp.txt	2013-06-07 17:07:08.842316758 +0000
+@@ -1,4 +1,4 @@
+-*helphelp.txt*	For Vim version 7.3.  Last change: 2010 Jul 29
++*helphelp.txt*	For Vim version 7.3.  Last change: 2012 Nov 28
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -7,7 +7,7 @@
+ Help on help files					*helphelp*
+ 
+ 1. Help commands		|online-help|
+-2. Translating help files	|help-translated|
++2. Translated help files	|help-translated|
+ 3. Writing help files		|help-writing|
+ 
+ ==============================================================================
+@@ -188,17 +188,18 @@
+ 			Only for backwards compatibility.  It now executes the
+ 			ToolBar.FindHelp menu entry instead of using a builtin
+ 			dialog.  {only when compiled with |+GUI_GTK|}
+-<			{not in Vi}
++			{not in Vi}
+ 
+ 					*:helpt* *:helptags*
+ 				*E154* *E150* *E151* *E152* *E153* *E670*
+ :helpt[ags] [++t] {dir}
+ 			Generate the help tags file(s) for directory {dir}.
+-			All "*.txt" and "*.??x" files in the directory are
+-			scanned for a help tag definition in between stars.
+-			The "*.??x" files are for translated docs, they
+-			generate the "tags-??" file, see |help-translated|.
+-			The generated tags files are sorted.
++			All "*.txt" and "*.??x" files in the directory and
++			sub-directories are scanned for a help tag definition
++			in between stars.  The "*.??x" files are for
++			translated docs, they generate the "tags-??" file, see
++			|help-translated|.  The generated tags files are
++			sorted.
+ 			When there are duplicates an error message is given.
+ 			An existing tags file is silently overwritten.
+ 			The optional "++t" argument forces adding the
+@@ -218,11 +219,12 @@
+ This is only available when compiled with the |+multi_lang| feature.
+ 
+ At this moment translations are available for:
+-	Chinese - multiple authors
+-	French  - translated by David Blanchet
+-	Italian - translated by Antonio Colombo
+-	Polish  - translated by Mikolaj Machowski
+-	Russian - translated by Vassily Ragosin
++	Chinese  - multiple authors
++	French   - translated by David Blanchet
++	Italian  - translated by Antonio Colombo
++	Japanese - multiple authors
++	Polish   - translated by Mikolaj Machowski
++	Russian  - translated by Vassily Ragosin
+ See the Vim website to find them: http://www.vim.org/translations.php
+ 
+ A set of translated help files consists of these files:
+diff -Naur vim73.orig/runtime/doc/if_cscop.txt vim73/runtime/doc/if_cscop.txt
+--- vim73.orig/runtime/doc/if_cscop.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/if_cscop.txt	2013-06-07 17:07:08.862316701 +0000
+@@ -1,4 +1,4 @@
+-*if_cscop.txt*  For Vim version 7.3.  Last change: 2009 Mar 18
++*if_cscop.txt*  For Vim version 7.3.  Last change: 2011 Jun 12
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Andy Kahn
+@@ -112,8 +112,7 @@
+ 	    :cscope add /projects/vim/cscope.out /usr/local/vim
+ 	    :cscope add cscope.out /usr/local/vim -C
+ <
+-				      *cscope-find* *cs-find*
+-						*E565* *E567*
++				      *cscope-find* *cs-find* *E567*
+     find  : Query cscope.  All cscope query options are available
+ 	    except option #5 ("Change this grep pattern").
+ 
+@@ -198,7 +197,7 @@
+ 
+ 	    USAGE   :cs help
+ 
+-						*E260* *E261*
++							*E261*
+     kill  : Kill a cscope connection (or kill all cscope connections).
+ 
+ 	    USAGE   :cs kill {num|partial_name}
+@@ -265,13 +264,23 @@
+ 	:set cscopequickfix=s-,c-,d-,i-,t-,e-
+ <
+ 							*cscopetag* *cst*
+-If 'cscopetag' set, the commands ":tag" and CTRL-] as well as "vim -t" will
+-always use |:cstag| instead of the default :tag behavior.  Effectively, by
+-setting 'cst', you will always search your cscope databases as well as your
+-tag files.  The default is off.  Examples: >
++If 'cscopetag' is set, the commands ":tag" and CTRL-] as well as "vim -t"
++will always use |:cstag| instead of the default :tag behavior.  Effectively,
++by setting 'cst', you will always search your cscope databases as well as
++your tag files.  The default is off.  Examples: >
+ 	:set cst
+ 	:set nocst
+ <
++							*cscoperelative* *csre*
++If 'cscoperelative' is set, then in absence of a prefix given to cscope
++(prefix is the argument of -P option of cscope), basename of cscope.out
++location (usually the project root directory) will be used as the prefix
++to construct an absolute path.  The default is off.  Note: This option is
++only effective when cscope (cscopeprg) is initialized without a prefix
++path (-P).  Examples: >
++	:set csre
++	:set nocsre
++<
+ 							*cscopetagorder* *csto*
+ The value of 'csto' determines the order in which |:cstag| performs a search.
+ If 'csto' is set to zero, cscope database(s) are searched first, followed
+diff -Naur vim73.orig/runtime/doc/if_lua.txt vim73/runtime/doc/if_lua.txt
+--- vim73.orig/runtime/doc/if_lua.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/if_lua.txt	2013-06-07 17:07:08.868983349 +0000
+@@ -1,4 +1,4 @@
+-*if_lua.txt*    For Vim version 7.3.  Last change: 2010 Jul 22
++*if_lua.txt*    For Vim version 7.3.  Last change: 2012 Jun 29
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Luis Carvalho
+@@ -8,8 +8,11 @@
+ 
+ 1. Commands			|lua-commands|
+ 2. The vim module		|lua-vim|
+-3. Buffer userdata		|lua-buffer|
+-4. Window userdata		|lua-window|
++3. List userdata		|lua-list|
++4. Dict userdata		|lua-dict|
++5. Buffer userdata		|lua-buffer|
++6. Window userdata		|lua-window|
++7. The luaeval function		|lua-luaeval|
+ 
+ {Vi does not have any of these commands}
+ 
+@@ -56,13 +59,14 @@
+ <
+ 
+ 							*:luado*
+-:[range]luado {body}	Execute Lua function "function (line) {body} end" for
+-			each line in the [range], with the function argument
+-			being set to the text of each line in turn, without a
+-			trailing <EOL>. If the value returned by the function
+-			is a string it becomes the text of the line in the
+-			current turn. The default for [range] is the whole
+-			file: "1,$".		      {not in Vi}
++:[range]luado {body}	Execute Lua function "function (line, linenr) {body}
++			end" for each line in the [range], with the function
++			argument being set to the text of each line in turn,
++			without a trailing <EOL>, and the current line number.
++			If the value returned by the function is a string it
++			becomes the text of the line in the current turn. The
++			default for [range] is the whole file: "1,$".
++							{not in Vi}
+ 
+ Examples:
+ >
+@@ -88,11 +92,9 @@
+ All these commands execute a Lua chunk from either the command line (:lua and
+ :luado) or a file (:luafile) with the given line [range]. Similarly to the Lua
+ interpreter, each chunk has its own scope and so only global variables are
+-shared between command calls. Lua default libraries "table", "string", "math",
+-and "package" are available, "io" and "debug" are not, and "os" is restricted
+-to functions "date", "clock", "time", "difftime", and "getenv". In addition,
+-Lua "print" function has its output redirected to the Vim message area, with
+-arguments separated by a white space instead of a tab.
++shared between command calls. All Lua default libraries are available. In
++addition, Lua "print" function has its output redirected to the Vim message
++area, with arguments separated by a white space instead of a tab.
+ 
+ Lua uses the "vim" module (see |lua-vim|) to issue commands to Vim
+ and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
+@@ -108,9 +110,9 @@
+ module also includes routines for buffer, window, and current line queries,
+ Vim evaluation and command execution, and others.
+ 
+-	vim.isbuffer(value)	Returns 'true' (boolean, not string) if
+-				"value" is a buffer userdata and 'false'
+-				otherwise (see |lua-buffer|).
++	vim.list()		Returns an empty list (see |List|).
++
++	vim.dict()		Returns an empty dictionary (see |Dictionary|).
+ 
+ 	vim.buffer([arg])	If "arg" is a number, returns buffer with
+ 				number "arg" in the buffer list or, if "arg"
+@@ -121,16 +123,21 @@
+ 				'true' returns the first buffer in the buffer
+ 				list or else the current buffer.
+ 
+-	vim.iswindow(value)	Returns 'true' (boolean, not string) if
+-				"value" is a window userdata and
+-				'false' otherwise (see |lua-window|).
+-
+ 	vim.window([arg])	If "arg" is a number, returns window with
+ 				number "arg" or 'nil' (nil value, not string)
+ 				if not found. Otherwise, if "toboolean(arg)"
+ 				is 'true' returns the first window or else the
+ 				current window.
+ 
++	vim.type({arg})		Returns the type of {arg}. It is equivalent to
++				Lua's "type" function, but returns "list",
++				"dict", "buffer", or "window" if {arg} is a
++				list, dictionary, buffer, or window,
++				respectively. Examples: >
++					:lua l = vim.list()
++					:lua print(type(l), vim.type(l))
++					:" userdata list
++<
+ 	vim.command({cmd})	Executes the vim (ex-mode) command {cmd}.
+ 				Examples: >
+ 					:lua vim.command"set tw=60"
+@@ -141,7 +148,7 @@
+ 				Vim strings and numbers are directly converted
+ 				to Lua strings and numbers respectively. Vim
+ 				lists and dictionaries are converted to Lua
+-				tables (lists become integer-keyed tables).
++				userdata (see |lua-list| and |lua-dict|).
+ 				Examples: >
+ 					:lua tw = vim.eval"&tw"
+ 					:lua print(vim.eval"{'a': 'one'}".a)
+@@ -157,7 +164,72 @@
+ 
+ 
+ ==============================================================================
+-3. Buffer userdata					*lua-buffer*
++3. List userdata					*lua-list*
++
++List userdata represent vim lists, and the interface tries to follow closely
++Vim's syntax for lists. Since lists are objects, changes in list references in
++Lua are reflected in Vim and vice-versa. A list "l" has the following
++properties and methods:
++
++Properties
++----------
++	o "#l" is the number of items in list "l", equivalent to "len(l)"
++	    in Vim.
++	o "l[k]" returns the k-th item in "l"; "l" is zero-indexed, as in Vim.
++	    To modify the k-th item, simply do "l[k] = newitem"; in
++	    particular, "l[k] = nil" removes the k-th item from "l".
++	o "l()" returns an iterator for "l".
++
++Methods
++-------
++	o "l:add(item)" appends "item" to the end of "l".
++	o "l:insert(item[, pos])" inserts "item" at (optional)
++	    position "pos" in the list. The default value for "pos" is 0.
++
++Examples:
++>
++	:let l = [1, 'item']
++	:lua l = vim.eval('l') -- same 'l'
++	:lua l:add(vim.list())
++	:lua l[0] = math.pi
++	:echo l[0] " 3.141593
++	:lua l[0] = nil -- remove first item
++	:lua l:insert(true, 1)
++	:lua print(l, #l, l[0], l[1], l[-1])
++	:lua for item in l() do print(item) end
++<
++
++==============================================================================
++4. Dict userdata					*lua-dict*
++
++Similarly to list userdata, dict userdata represent vim dictionaries; since
++dictionaries are also objects, references are kept between Lua and Vim. A dict
++"d" has the following properties:
++
++Properties
++----------
++	o "#d" is the number of items in dict "d", equivalent to "len(d)"
++	    in Vim.
++	o "d.key" or "d['key']" returns the value at entry "key" in "d".
++	    To modify the entry at this key, simply do "d.key = newvalue"; in
++	    particular, "d.key = nil" removes the entry from "d".
++	o "d()" returns an iterator for "d" and is equivalent to "items(d)" in
++	    Vim.
++
++Examples:
++>
++	:let d = {'n':10}
++	:lua d = vim.eval('d') -- same 'd'
++	:lua print(d, d.n, #d)
++	:let d.self = d
++	:lua for k, v in d() do print(d, k, v) end
++	:lua d.x = math.pi
++	:lua d.self = nil -- remove entry
++	:echo d
++<
++
++==============================================================================
++5. Buffer userdata					*lua-buffer*
+ 
+ Buffer userdata represent vim buffers. A buffer userdata "b" has the following
+ properties and methods:
+@@ -209,7 +281,7 @@
+ <
+ 
+ ==============================================================================
+-4. Window userdata					*lua-window*
++6. Window userdata					*lua-window*
+ 
+ Window objects represent vim windows. A window userdata "w" has the following
+ properties and methods:
+@@ -241,4 +313,29 @@
+ <
+ 
+ ==============================================================================
+- vim:tw=78:ts=8:ft=help:norl:
++7. The luaeval function					*lua-luaeval* *lua-eval*
++
++The (dual) equivalent of "vim.eval" for passing Lua values to Vim is
++"luaeval". "luaeval" takes an expression string and an optional argument and
++returns the result of the expression. It is semantically equivalent in Lua to:
++>
++	local chunkheader = "local _A = select(1, ...) return "
++	function luaeval (expstr, arg)
++	    local chunk = assert(loadstring(chunkheader .. expstr, "luaeval"))
++	    return chunk(arg) -- return typval
++	end
++<
++Note that "_A" receives the argument to "luaeval". Examples: >
++
++	:echo luaeval('math.pi')
++	:lua a = vim.list():add('newlist')
++	:let a = luaeval('a')
++	:echo a[0] " 'newlist'
++	:function Rand(x,y) " random uniform between x and y
++	:  return luaeval('(_A.y-_A.x)*math.random()+_A.x', {'x':a:x,'y':a:y})
++	:  endfunction
++	:echo Rand(1,10)
++
++
++==============================================================================
++ vim:tw=78:ts=8:noet:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/if_mzsch.txt vim73/runtime/doc/if_mzsch.txt
+--- vim73.orig/runtime/doc/if_mzsch.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/if_mzsch.txt	2013-06-07 17:07:08.878983320 +0000
+@@ -1,4 +1,4 @@
+-*if_mzsch.txt*  For Vim version 7.3.  Last change: 2010 Feb 11
++*if_mzsch.txt*  For Vim version 7.3.  Last change: 2012 Dec 17
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Sergey Khorev
+@@ -11,7 +11,8 @@
+ 3. Threads				|mzscheme-threads|
+ 4. Vim access from MzScheme		|mzscheme-vim|
+ 5. mzeval() Vim function		|mzscheme-mzeval|
+-6. Dynamic loading			|mzscheme-dynamic|
++6. Using Function references		|mzscheme-funcref|
++7. Dynamic loading			|mzscheme-dynamic|
+ 
+ {Vi does not have any of these commands}
+ 
+@@ -21,10 +22,17 @@
+ Based on the work of Brent Fulgham.
+ Dynamic loading added by Sergey Khorev
+ 
+-For downloading MzScheme and other info:
+-	http://www.plt-scheme.org/software/mzscheme/
++MzScheme and PLT Scheme names have been rebranded as Racket. For more
++information please check http://racket-lang.org
+ 
+-Note: On FreeBSD you should use the "drscheme" port.
++Futures and places of Racket version 5.x up to and including 5.3.1 do not
++work correctly with processes created by Vim.
++The simplest solution is to build Racket on your own with these features
++disabled: >
++  ./configure --disable-futures --disable-places --prefix=your-install-prefix
++
++To speed up the process, you might also want to use --disable-gracket and
++--disable-docs
+ 
+ ==============================================================================
+ 1. Commands						*mzscheme-commands*
+@@ -155,8 +163,11 @@
+     (eval {expr-string})	    Evaluate the vim expression into
+ 				    respective MzScheme object: |Lists| are
+ 				    represented as Scheme lists,
+-				    |Dictionaries| as hash tables.
+-				    NOTE the name clashes with MzScheme eval
++				    |Dictionaries| as hash tables,
++				    |Funcref|s as functions (see also
++				    |mzscheme-funcref|)
++				    NOTE the name clashes with MzScheme eval,
++				    use module qualifiers to overcome this.
+     (range-start)		    Start/End of the range passed with
+     (range-end)			    the Scheme command.
+     (beep)			    beep
+@@ -237,7 +248,23 @@
+ evaluate MzScheme expressions and pass their values to VimL.
+ 
+ ==============================================================================
+-6. Dynamic loading				    *mzscheme-dynamic* *E815*
++6. Using Function references				    *mzscheme-funcref*
++
++MzScheme interface allows use of |Funcref|s so you can call Vim functions
++directly from Scheme. For instance: >
++    function! MyAdd2(arg)
++	return a:arg + 2
++    endfunction
++    mz (define f2 (vim-eval "function(\"MyAdd2\")"))
++    mz (f2 7)
++< or : >
++    :mz (define indent (vim-eval "function('indent')"))
++    " return Vim indent for line 12
++    :mz (indent 12)
++<
++
++==============================================================================
++7. Dynamic loading				    *mzscheme-dynamic* *E815*
+ 
+ On MS-Windows the MzScheme libraries can be loaded dynamically. The |:version|
+ output then includes |+mzscheme/dyn|.
+diff -Naur vim73.orig/runtime/doc/if_perl.txt vim73/runtime/doc/if_perl.txt
+--- vim73.orig/runtime/doc/if_perl.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/if_perl.txt	2013-06-07 17:07:08.902316587 +0000
+@@ -1,4 +1,4 @@
+-*if_perl.txt*   For Vim version 7.3.  Last change: 2010 Jul 21
++*if_perl.txt*   For Vim version 7.3.  Last change: 2012 Oct 25
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Sven Verdoolaege
+@@ -44,15 +44,17 @@
+ 	Sven Verdoolaege <skimo@breughel.ufsia.ac.be>
+ 	Matt Gerassimof
+ 
+-Perl for MS-Windows can be found at:
+-http://www.perl.com/CPAN/ports/nt/Standard/x86/
++Perl for MS-Windows can be found at: http://www.perl.com/
++The ActiveState one should work.
+ 
+ ==============================================================================
+ 3. Using the Perl interface				*perl-using*
+ 
+ 							*:perl* *:pe*
+ :pe[rl] {cmd}		Execute Perl command {cmd}.  The current package
+-			is "main".
++			is "main".  Simple example to test if `:perl` is
++			working: >
++				:perl VIM::Msg("Hello")
+ 
+ :pe[rl] << {endpattern}
+ {script}
+@@ -173,7 +175,8 @@
+ VIM::DoCommand({cmd})	Executes Ex command {cmd}.
+ 
+ 							*perl-Eval*
+-VIM::Eval({expr})	Evaluates {expr} and returns (success, val).
++VIM::Eval({expr})	Evaluates {expr} and returns (success, value) in list 
++			context or just value in scalar context.
+ 			success=1 indicates that val contains the value of
+ 			{expr}; success=0 indicates a failure to evaluate
+ 			the expression.  '@x' returns the contents of register
+diff -Naur vim73.orig/runtime/doc/if_pyth.txt vim73/runtime/doc/if_pyth.txt
+--- vim73.orig/runtime/doc/if_pyth.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/if_pyth.txt	2013-06-07 17:07:08.912316559 +0000
+@@ -1,4 +1,4 @@
+-*if_pyth.txt*   For Vim version 7.3.  Last change: 2010 Aug 13
++*if_pyth.txt*   For Vim version 7.3.  Last change: 2013 Jun 02
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Paul Moore
+@@ -6,13 +6,16 @@
+ 
+ The Python Interface to Vim				*python* *Python*
+ 
+-1. Commands			|python-commands|
+-2. The vim module		|python-vim|
+-3. Buffer objects		|python-buffer|
+-4. Range objects		|python-range|
+-5. Window objects		|python-window|
+-6. Dynamic loading		|python-dynamic|
+-7. Python 3			|python3|
++1. Commands					|python-commands|
++2. The vim module				|python-vim|
++3. Buffer objects				|python-buffer|
++4. Range objects				|python-range|
++5. Window objects				|python-window|
++6. Tab page objects				|python-tabpage|
++7. vim.bindeval objects				|python-bindeval-objects|
++8. pyeval(), py3eval() Vim functions		|python-pyeval|
++9. Dynamic loading				|python-dynamic|
++10. Python 3					|python3|
+ 
+ {Vi does not have any of these commands}
+ 
+@@ -26,7 +29,9 @@
+ 
+ 					*:python* *:py* *E205* *E263* *E264*
+ :[range]py[thon] {stmt}
+-			Execute Python statement {stmt}.
++			Execute Python statement {stmt}.  A simple check if
++			the `:python` command is working: >
++				:python print "Hello"
+ 
+ :[range]py[thon] << {endmarker}
+ {script}
+@@ -51,9 +56,25 @@
+ 	EOF
+ 	endfunction
+ <
+-Note: Python is very sensitive to the indenting.  Also make sure the "class"
+-line and "EOF" do not have any indent.
++Note: Python is very sensitive to the indenting.  Make sure the "class" line
++and "EOF" do not have any indent.
+ 
++							*:pydo*
++:[range]pydo {body}	Execute Python function "def _vim_pydo(line, linenr):
++			{body}" for each line in the [range], with the
++			function arguments being set to the text of each line
++			in turn, without a trailing <EOL>, and the current
++			line number. The function should return a string or
++			None. If a string is returned, it becomes the text of
++			the line in the current turn. The default for [range]
++			is the whole file: "1,$".
++			{not in Vi}
++
++Examples:
++>
++	:pydo return "%s\t%d" % (line[::-1], len(line))
++	:pydo if line: return "%4d: %s" % (linenr, line)
++<
+ 							*:pyfile* *:pyf*
+ :[range]pyf[ile] {file}
+ 			Execute the Python script in {file}.  The whole
+@@ -150,7 +171,21 @@
+ 	[{'cmd': '/^eval_expr(arg, nextcmd)$/', 'static': 0, 'name':
+ 	'eval_expr', 'kind': 'f', 'filename': './src/eval.c'}]
+ 
+-
++vim.bindeval(str)					*python-bindeval*
++	Like |python-eval|, but returns special objects described in 
++	|python-bindeval-objects|. These python objects let you modify (|List| 
++	or |Dictionary|) or call (|Funcref|) vim objects.
++
++vim.strwidth(str)					*python-strwidth*
++	Like |strwidth()|: returns number of display cells str occupies, tab 
++	is counted as one cell.
++
++vim.chdir(*args, **kwargs)				*python-chdir*
++vim.fchdir(*args, **kwargs)				*python-fchdir*
++	Run os.chdir or os.fchdir, then all appropriate vim stuff.
++	Note: you should not use these functions directly, use os.chdir and 
++	      os.fchdir instead. Behavior of vim.fchdir is undefined in case 
++	      os.fchdir does not exist.
+ 
+ Error object of the "vim" module
+ 
+@@ -170,12 +205,12 @@
+ 	to which the variables referred.
+ 
+ vim.buffers						*python-buffers*
+-	A sequence object providing access to the list of vim buffers.  The
++	A mapping object providing access to the list of vim buffers.  The
+ 	object supports the following operations: >
+ 	    :py b = vim.buffers[i]	# Indexing (read-only)
+ 	    :py b in vim.buffers	# Membership test
+ 	    :py n = len(vim.buffers)	# Number of elements
+-	    :py for b in vim.buffers:	# Sequential access
++	    :py for b in vim.buffers:	# Iterating over buffer list
+ <
+ vim.windows						*python-windows*
+ 	A sequence object providing access to the list of vim windows.  The
+@@ -184,13 +219,28 @@
+ 	    :py w in vim.windows	# Membership test
+ 	    :py n = len(vim.windows)	# Number of elements
+ 	    :py for w in vim.windows:	# Sequential access
++<	Note: vim.windows object always accesses current tab page. 
++	|python-tabpage|.windows objects are bound to parent |python-tabpage| 
++	object and always use windows from that tab page (or throw vim.error 
++	in case tab page was deleted). You can keep a reference to both 
++	without keeping a reference to vim module object or |python-tabpage|, 
++	they will not lose their properties in this case.
++
++vim.tabpages						*python-tabpages*
++	A sequence object providing access to the list of vim tab pages. The 
++	object supports the following operations: >
++	    :py t = vim.tabpages[i]	# Indexing (read-only)
++	    :py t in vim.tabpages	# Membership test
++	    :py n = len(vim.tabpages)	# Number of elements
++	    :py for t in vim.tabpages:	# Sequential access
+ <
+ vim.current						*python-current*
+ 	An object providing access (via specific attributes) to various
+ 	"current" objects available in vim:
+ 		vim.current.line	The current line (RW)		String
+-		vim.current.buffer	The current buffer (RO)		Buffer
+-		vim.current.window	The current window (RO)		Window
++		vim.current.buffer	The current buffer (RW)		Buffer
++		vim.current.window	The current window (RW)		Window
++		vim.current.tabpage	The current tab page (RW)	TabPage
+ 		vim.current.range	The current line range (RO)	Range
+ 
+ 	The last case deserves a little explanation.  When the :python or
+@@ -198,6 +248,42 @@
+ 	"current range".  A range is a bit like a buffer, but with all access
+ 	restricted to a subset of lines.  See |python-range| for more details.
+ 
++	Note: When assigning to vim.current.{buffer,window,tabpage} it expects 
++	valid |python-buffer|, |python-window| or |python-tabpage| objects 
++	respectively. Assigning triggers normal (with |autocommand|s) 
++	switching to given buffer, window or tab page. It is the only way to 
++	switch UI objects in python: you can't assign to 
++	|python-tabpage|.window attribute. To switch without triggering 
++	autocommands use >
++	    py << EOF
++	    saved_eventignore = vim.options['eventignore']
++	    vim.options['eventignore'] = 'all'
++	    try:
++	        vim.current.buffer = vim.buffers[2] # Switch to buffer 2
++	    finally:
++	        vim.options['eventignore'] = saved_eventignore
++	    EOF
++<
++vim.vars						*python-vars*
++vim.vvars						*python-vvars*
++	Dictionary-like objects holding dictionaries with global (|g:|) and 
++	vim (|v:|) variables respectively. Identical to `vim.bindeval("g:")`, 
++	but faster.
++
++vim.options						*python-options*
++	Object partly supporting mapping protocol (supports setting and 
++	getting items) providing a read-write access to global options.
++	Note: unlike |:set| this provides access only to global options. You
++	cannot use this object to obtain or set local options' values or
++	access local-only options in any fashion. Raises KeyError if no global
++	option with such name exists (i.e. does not raise KeyError for
++	|global-local| options and global only options, but does for window-
++	and buffer-local ones).  Use |python-buffer| objects to access to
++	buffer-local options and |python-window| objects to access to
++	window-local options.
++
++	Type of this object is available via "Options" attribute of vim 
++	module.
+ 
+ Output from Python					*python-output*
+ 	Vim displays all Python code output in the Vim message area.  Normal
+@@ -222,8 +308,9 @@
+ 	- from indexing vim.buffers (|python-buffers|)
+ 	- from the "buffer" attribute of a window (|python-window|)
+ 
+-Buffer objects have one read-only attribute - name - the full file name for
+-the buffer.  They also have three methods (append, mark, and range; see below).
++Buffer objects have two read-only attributes - name - the full file name for
++the buffer, and number - the buffer number.  They also have three methods
++(append, mark, and range; see below).
+ 
+ You can also treat buffer objects as sequence objects.  In this context, they
+ act as if they were lists (yes, they are mutable) of strings, with each
+@@ -238,6 +325,24 @@
+ line numbers, which start from 1.  This is particularly relevant when dealing
+ with marks (see below) which use vim line numbers.
+ 
++The buffer object attributes are:
++	b.vars		Dictionary-like object used to access 
++			|buffer-variable|s.
++	b.options	Mapping object (supports item getting, setting and 
++			deleting) that provides access to buffer-local options 
++			and buffer-local values of |global-local| options. Use 
++			|python-window|.options if option is window-local, 
++			this object will raise KeyError. If option is 
++			|global-local| and local value is missing getting it 
++			will return None.
++	b.name		String, RW. Contains buffer name (full path).
++			Note: when assigning to b.name |BufFilePre| and 
++			|BufFilePost| autocommands are launched.
++	b.number	Buffer number. Can be used as |python-buffers| key.
++			Read-only.
++	b.valid		True or False. Buffer object becomes invalid when 
++			corresponding buffer is wiped out.
++
+ The buffer object methods are:
+ 	b.append(str)	Append a line to the buffer
+ 	b.append(str, nr)  Idem, below line "nr"
+@@ -256,6 +361,8 @@
+ A trailing '\n' is allowed and ignored, so that you can do: >
+ 	:py b.append(f.readlines())
+ 
++Buffer object type is available using "Buffer" attribute of vim module.
++
+ Examples (assume b is the current buffer) >
+ 	:py print b.name		# write the buffer file name
+ 	:py b[0] = "hello!!!"		# replace the top line
+@@ -267,6 +374,9 @@
+ 	:py n = len(b)			# number of lines
+ 	:py (row,col) = b.mark('a')	# named mark
+ 	:py r = b.range(1,5)		# a sub-range of the buffer
++	:py b.vars["foo"] = "bar"	# assign b:foo variable
++	:py b.options["ff"] = "dos"	# set fileformat
++	:py del b.options["ar"]		# same as :set autoread<
+ 
+ ==============================================================================
+ 4. Range objects					*python-range*
+@@ -294,6 +404,8 @@
+ 			for Python's built-in list objects.
+ 	r.append(list, nr)  Idem, after line "nr"
+ 
++Range object type is available using "Range" attribute of vim module.
++
+ Example (assume r is the current range):
+ 	# Send all lines in a range to the default printer
+ 	vim.command("%d,%dhardcopy!" % (r.start+1,r.end+1))
+@@ -304,6 +416,8 @@
+ Window objects represent vim windows.  You can obtain them in a number of ways:
+ 	- via vim.current.window (|python-current|)
+ 	- from indexing vim.windows (|python-windows|)
++	- from indexing "windows" attribute of a tab page (|python-tabpage|)
++	- from the "window" attribute of a tab page (|python-tabpage|)
+ 
+ You can manipulate window objects only through their attributes.  They have no
+ methods, and no sequence or other interface.
+@@ -314,11 +428,167 @@
+ 				This is a tuple, (row,col).
+ 	height (read-write)	The window height, in rows
+ 	width (read-write)	The window width, in columns
++	vars (read-only)	The window |w:| variables. Attribute is 
++				unassignable, but you can change window 
++				variables this way
++	options (read-only)	The window-local options. Attribute is 
++				unassignable, but you can change window 
++				options this way. Provides access only to 
++				window-local options, for buffer-local use 
++				|python-buffer| and for global ones use 
++				|python-options|. If option is |global-local| 
++				and local value is missing getting it will 
++				return None.
++	number (read-only)	Window number.  The first window has number 1.
++				This is zero in case it cannot be determined
++				(e.g. when the window object belongs to other
++				tab page).
++	row, col (read-only)	On-screen window position in display cells.
++				First position is zero.
++	tabpage (read-only)	Window tab page.
++	valid (read-write)	True or False. Window object becomes invalid 
++				when corresponding window is closed.
++
+ The height attribute is writable only if the screen is split horizontally.
+ The width attribute is writable only if the screen is split vertically.
+ 
++Window object type is available using "Window" attribute of vim module.
++
++==============================================================================
++6. Tab page objects					*python-tabpage*
++
++Tab page objects represent vim tab pages. You can obtain them in a number of 
++ways:
++	- via vim.current.tabpage (|python-current|)
++	- from indexing vim.tabpages (|python-tabpages|)
++
++You can use this object to access tab page windows. They have no methods and 
++no sequence or other interfaces.
++
++Tab page attributes are:
++	number		The tab page number like the one returned by 
++			|tabpagenr()|.
++	windows		Like |python-windows|, but for current tab page.
++	vars		The tab page |t:| variables.
++	window		Current tabpage window.
++	valid		True or False. Tab page object becomes invalid when 
++			corresponding tab page is closed.
++
++TabPage object type is available using "TabPage" attribute of vim module.
++
++==============================================================================
++7. vim.bindeval objects				*python-bindeval-objects*
++
++vim.Dictionary object				*python-Dictionary*
++    Dictionary-like object providing access to vim |Dictionary| type.
++    Attributes:
++        Attribute  Description ~
++        locked     One of                       *python-.locked*
++                    Value           Description ~
++                    zero            Variable is not locked
++                    vim.VAR_LOCKED  Variable is locked, but can be unlocked
++                    vim.VAR_FIXED   Variable is locked and can't be unlocked
++                   Read-write. You can unlock locked variable by assigning 
++                   `True` or `False` to this attribute. No recursive locking 
++                   is supported.
++        scope      One of
++                    Value              Description ~
++                    zero               Dictionary is not a scope one
++                    vim.VAR_DEF_SCOPE  |g:| or |l:| dictionary
++                    vim.VAR_SCOPE      Other scope dictionary,
++                                       see |internal-variables|
++    Methods (note: methods do not support keyword arguments):
++        Method      Description ~
++        keys()      Returns a list with dictionary keys.
++        values()    Returns a list with dictionary values.
++        items()     Returns a list of 2-tuples with dictionary contents.
++        update(iterable), update(dictionary), update(**kwargs)
++                    Adds keys to dictionary.
++        get(key[, default=None])
++                    Obtain key from dictionary, returning the default if it is 
++                    not present.
++        pop(key[, default])
++                    Remove specified key from dictionary and return 
++                    corresponding value. If key is not found and default is 
++                    given returns the default, otherwise raises KeyError.
++        popitem()
++                    Remove random key from dictionary and return (key, value) 
++                    pair.
++        has_key(key)
++                    Check whether dictionary contains specified key, similar 
++                    to `key in dict`.
++
++        __new__(), __new__(iterable), __new__(dictionary), __new__(update)
++                    You can use `vim.Dictionary()` to create new vim 
++                    dictionaries. `d=vim.Dictionary(arg)` is the same as 
++                    `d=vim.bindeval('{}');d.update(arg)`. Without arguments 
++                    constructs empty dictionary.
++
++    Examples: >
++        d = vim.Dictionary(food="bar")		# Constructor
++        d['a'] = 'b'				# Item assignment
++        print d['a']				# getting item
++        d.update({'c': 'd'})			# .update(dictionary)
++        d.update(e='f')				# .update(**kwargs)
++        d.update((('g', 'h'), ('i', 'j')))	# .update(iterable)
++        for key in d.keys():			# .keys()
++        for val in d.values():			# .values()
++        for key, val in d.items():		# .items()
++        print isinstance(d, vim.Dictionary)	# True
++        for key in d:				# Iteration over keys
++        class Dict(vim.Dictionary):		# Subclassing
++<
++    Note: when iterating over keys you should not modify dictionary.
++
++vim.List object					*python-List*
++    Sequence-like object providing access to vim |List| type.
++    Supports `.locked` attribute, see |python-.locked|. Also supports the 
++    following methods:
++        Method          Description ~
++        extend(item)    Add items to the list.
++
++        __new__(), __new__(iterable)
++                        You can use `vim.List()` to create new vim lists. 
++                        `l=vim.List(iterable)` is the same as 
++                        `l=vim.bindeval('[]');l.extend(iterable)`. Without 
++                        arguments constructs empty list.
++    Examples: >
++        l = vim.List("abc")		# Constructor, result: ['a', 'b', 'c']
++        l.extend(['abc', 'def'])	# .extend() method
++        print l[1:]			# slicing
++        l[:0] = ['ghi', 'jkl']		# slice assignment
++        print l[0]			# getting item
++        l[0] = 'mno'			# assignment
++        for i in l:			# iteration
++        print isinstance(l, vim.List)	# True
++        class List(vim.List):		# Subclassing
++
++vim.Function object				*python-Function*
++    Function-like object, acting like vim |Funcref| object. Supports `.name` 
++    attribute and is callable. Accepts special keyword argument `self`, see 
++    |Dictionary-function|. You can also use `vim.Function(name)` constructor, 
++    it is the same as `vim.bindeval('function(%s)'%json.dumps(name))`.
++
++    Examples: >
++        f = vim.Function('tr')			# Constructor
++        print f('abc', 'a', 'b')		# Calls tr('abc', 'a', 'b')
++        vim.command('''
++            function DictFun() dict
++                return self
++            endfunction
++        ''')
++        f = vim.bindeval('function("DictFun")')
++        print f(self={})			# Like call('DictFun', [], {})
++        print isinstance(f, vim.Function)	# True
++
++==============================================================================
++8. pyeval() and py3eval() Vim functions			*python-pyeval*
++
++To facilitate bi-directional interface, you can use |pyeval()| and |py3eval()| 
++functions to evaluate Python expressions and pass their values to VimL.
++
+ ==============================================================================
+-6. Dynamic loading					*python-dynamic*
++9. Dynamic loading					*python-dynamic*
+ 
+ On MS-Windows the Python library can be loaded dynamically.  The |:version|
+ output then includes |+python/dyn|.
+@@ -335,12 +605,17 @@
+ sure edit "gvim.exe" and search for "python\d*.dll\c".
+ 
+ ==============================================================================
+-7. Python 3						*python3*
++10. Python 3						*python3*
+ 
+ 							*:py3* *:python3*
+-The |:py3| and |:python3| commands work similar to |:python|.
+-							*:py3file*
+-The |:py3file| command works similar to |:pyfile|.
++The `:py3` and `:python3` commands work similar to `:python`.  A simple check
++if the `:py3` command is working: >
++	:py3 print("Hello")
++<							*:py3file*
++The `:py3file` command works similar to `:pyfile`.
++							*:py3do* *E863*
++The `:py3do` command works similar to `:pydo`.
++
+ 
+ Vim can be built in four ways (:version output):
+ 1. No Python support	    (-python, -python3)
+@@ -355,7 +630,7 @@
+ When doing this on Linux/Unix systems and importing global symbols, this leads
+ to a crash when the second Python version is used.  So either global symbols
+ are loaded but only one Python version is activated, or no global symbols are
+-loaded. The latter makes Python's "import" fail on libaries that expect the
++loaded. The latter makes Python's "import" fail on libraries that expect the
+ symbols to be provided by Vim.
+ 							*E836* *E837*
+ Vim's configuration script makes a guess for all libraries based on one
+@@ -377,6 +652,18 @@
+ 3. You undefine PY_NO_RTLD_GLOBAL in auto/config.h after configuration.  This
+    may crash Vim though.
+ 
++							*has-python*
++You can test what Python version is available with: >
++	if has('python')
++	  echo 'there is Python 2.x'
++  	elseif has('python3')
++	  echo 'there is Python 3.x'
++	endif
++
++Note however, that when Python 2 and 3 are both available and loaded
++dynamically, these has() calls will try to load them.  If only one can be
++loaded at a time, just checking if Python 2 or 3 are available will prevent
++the other one from being available.
+ 
+ ==============================================================================
+  vim:tw=78:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/if_ruby.txt vim73/runtime/doc/if_ruby.txt
+--- vim73.orig/runtime/doc/if_ruby.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/if_ruby.txt	2013-06-07 17:07:08.922316530 +0000
+@@ -1,4 +1,4 @@
+-*if_ruby.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
++*if_ruby.txt*   For Vim version 7.3.  Last change: 2012 Aug 02
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Shugo Maeda
+@@ -25,7 +25,8 @@
+ 1. Commands						*ruby-commands*
+ 
+ 							*:ruby* *:rub*
+-:rub[y] {cmd}		Execute Ruby command {cmd}.
++:rub[y] {cmd}		Execute Ruby command {cmd}.  A command to try it out: >
++				:ruby print "Hello"
+ 
+ :rub[y] << {endpattern}
+ {script}
+@@ -187,12 +188,12 @@
+ ==============================================================================
+ 6. Dynamic loading					*ruby-dynamic*
+ 
+-On MS-Windows the Ruby library can be loaded dynamically.  The |:version|
+-output then includes |+ruby/dyn|.
++On MS-Windows and Unix the Ruby library can be loaded dynamically.  The
++|:version| output then includes |+ruby/dyn|.
+ 
+-This means that Vim will search for the Ruby DLL file only when needed.  When
+-you don't use the Ruby interface you don't need it, thus you can use Vim
+-without this DLL file.
++This means that Vim will search for the Ruby DLL file or shared library only
++when needed.  When you don't use the Ruby interface you don't need it, thus
++you can use Vim even though this library file is not on your system.
+ 
+ You need to install the right version of Ruby for this to work.  You can find
+ the package to download from:
+@@ -208,6 +209,8 @@
+ 
+ If you want to build Vim with Ruby 1.9.1, you need to edit the config.h file
+ and comment-out the check for _MSC_VER.
++You may also need to rename the include directory name to match the version,
++strangely for Ruby 1.9.3 the directory is called 1.9.1.
+ 
+ ==============================================================================
+  vim:tw=78:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/if_tcl.txt vim73/runtime/doc/if_tcl.txt
+--- vim73.orig/runtime/doc/if_tcl.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/if_tcl.txt	2013-06-07 17:07:08.952316444 +0000
+@@ -1,4 +1,4 @@
+-*if_tcl.txt*    For Vim version 7.3.  Last change: 2008 Aug 16
++*if_tcl.txt*    For Vim version 7.3.  Last change: 2012 Aug 02
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Ingo Wilken
+@@ -27,7 +27,9 @@
+ 1. Commands				*tcl-ex-commands* *E571* *E572*
+ 
+ 							*:tcl* *:tc*
+-:tc[l] {cmd}		Execute Tcl command {cmd}.
++:tc[l] {cmd}		Execute Tcl command {cmd}.  A simple check if `:tcl`
++			is working: >
++				:tcl puts "Hello"
+ 
+ :[range]tc[l] << {endmarker}
+ {script}
+diff -Naur vim73.orig/runtime/doc/indent.txt vim73/runtime/doc/indent.txt
+--- vim73.orig/runtime/doc/indent.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/indent.txt	2013-06-07 17:07:08.968983063 +0000
+@@ -1,4 +1,4 @@
+-*indent.txt*    For Vim version 7.3.  Last change: 2010 Jul 30
++*indent.txt*    For Vim version 7.3.  Last change: 2013 May 20
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -128,13 +128,20 @@
+ used CTRL-T or CTRL-D.
+ 
+ 						*cinoptions-values*
+-The 'cinoptions' option sets how Vim performs indentation.  In the list below,
++The 'cinoptions' option sets how Vim performs indentation.  The value after
++the option character can be one of these (N is any number):
++	N	indent N spaces
++	-N	indent N spaces to the left
++	Ns	N times 'shiftwidth' spaces
++	-Ns	N times 'shiftwidth' spaces to the left
++
++In the list below,
+ "N" represents a number of your choice (the number can be negative).  When
+ there is an 's' after the number, Vim multiplies the number by 'shiftwidth':
+ "1s" is 'shiftwidth', "2s" is two times 'shiftwidth', etc.  You can use a
+-decimal point, too: "-0.5s" is minus half a 'shiftwidth'.  The examples below
+-assume a 'shiftwidth' of 4.
+-
++decimal point, too: "-0.5s" is minus half a 'shiftwidth'.
++The examples below assume a 'shiftwidth' of 4.
++							*cino->*
+ 	>N    Amount added for "normal" indent.  Used after a line that should
+ 	      increase the indent (lines starting with "if", an opening brace,
+ 	      etc.).  (default 'shiftwidth').
+@@ -145,6 +152,7 @@
+ 		      foo;		foo;			  foo;
+ 		  }		      }			  }
+ <
++							*cino-e*
+ 	eN    Add N to the prevailing indent inside a set of braces if the
+ 	      opening brace at the End of the line (more precise: is not the
+ 	      first character in a line).  This is useful if you want a
+@@ -160,6 +168,7 @@
+ 		      bar;		  bar;		      bar;
+ 		  }		      }			  }
+ <
++							*cino-n*
+ 	nN    Add N to the prevailing indent for a statement after an "if",
+ 	      "while", etc., if it is NOT inside a set of braces.  This is
+ 	      useful if you want a different indent when there is no '{'
+@@ -174,6 +183,7 @@
+ 		      bar;		  bar;		      bar;
+ 		  }		      }			  }
+ <
++							*cino-f*
+ 	fN    Place the first opening brace of a function or other block in
+ 	      column N.  This applies only for an opening brace that is not
+ 	      inside other braces and is at the start of the line.  What comes
+@@ -184,6 +194,7 @@
+ 		  {			{		      {
+ 		      int foo;		    int foo;		  int foo;
+ <
++							*cino-{*
+ 	{N    Place opening braces N characters from the prevailing indent.
+ 	      This applies only for opening braces that are inside other
+ 	      braces.  (default 0).
+@@ -193,6 +204,7 @@
+ 		  {			{		      {
+ 		      foo;		  foo;		      foo;
+ <
++							*cino-}*
+ 	}N    Place closing braces N characters from the matching opening
+ 	      brace.  (default 0).
+ 
+@@ -202,6 +214,7 @@
+ 		      foo;		  foo;		      foo;
+ 		  }		      }			    }
+ <
++							*cino-^*
+ 	^N    Add N to the prevailing indent inside a set of braces if the
+ 	      opening brace is in column 0.  This can specify a different
+ 	      indent for whole of a function (some may like to set it to a
+@@ -216,6 +229,7 @@
+ 		      }			}		  }
+ 		  }		      }			  }
+ <
++							*cino-L*
+ 	LN    Controls placement of jump labels. If N is negative, the label
+ 	      will be placed at column 1. If N is non-negative, the indent of
+ 	      the label will be the prevailing indent minus N.  (default -1).
+@@ -229,6 +243,7 @@
+ 		      }                   }                   }
+ 		  }                   }                   }
+ <
++							*cino-:*
+ 	:N    Place case labels N characters from the indent of the switch().
+ 	      (default 'shiftwidth').
+ 
+@@ -240,6 +255,7 @@
+ 		      default:	      default:
+ 		  }		      }
+ <
++							*cino-=*
+ 	=N    Place statements occurring after a case label N characters from
+ 	      the indent of the label.  (default 'shiftwidth').
+ 
+@@ -247,6 +263,7 @@
+ 		   case 11:		case 11:  a = a + 1;
+ 		       a = a + 1;		  b = b + 1;
+ <
++							*cino-l*
+ 	lN    If N != 0 Vim will align with a case label instead of the
+ 	      statement after it in the same line.
+ 
+@@ -256,8 +273,10 @@
+ 				    break;	      break;
+ 				}		  }
+ <
++							*cino-b*
+ 	bN    If N != 0 Vim will align a final "break" with the case label,
+ 	      so that case..break looks like a sort of block.  (default: 0).
++	      When using 1, consider adding "0=break" to 'cinkeys'.
+ 
+ 		cino=		    cino=b1 >
+ 		  switch (x)	      switch(x)
+@@ -271,6 +290,7 @@
+ 			  break;	  break;
+ 		  }		      }
+ <
++							*cino-g*
+ 	gN    Place C++ scope declarations N characters from the indent of the
+ 	      block they are in.  (default 'shiftwidth').  A scope declaration
+ 	      can be "public:", "protected:" or "private:".
+@@ -282,6 +302,7 @@
+ 		      private:	      private:
+ 		  }		      }
+ <
++							*cino-h*
+ 	hN    Place statements occurring after a C++ scope declaration N
+ 	      characters from the indent of the label.  (default
+ 	      'shiftwidth').
+@@ -290,6 +311,21 @@
+ 		   public:		public:   a = a + 1;
+ 		       a = a + 1;		  b = b + 1;
+ <
++							*cino-N*
++	NN    Indent inside C++ namespace N characters extra compared to a
++	      normal block.  (default 0).
++
++		cino=			   cino=N-s >
++		  namespace {                namespace {
++		      void function();       void function();
++		  }                          }
++
++		  namespace my               namespace my
++		  {                          {
++		      void function();       void function();
++		  }                          }
++<
++							*cino-p*
+ 	pN    Parameter declarations for K&R-style function declarations will
+ 	      be indented N characters from the margin.  (default
+ 	      'shiftwidth').
+@@ -299,6 +335,7 @@
+ 		      int a;	      int a;			  int a;
+ 		      char b;	      char b;			  char b;
+ <
++							*cino-t*
+ 	tN    Indent a function return type declaration N characters from the
+ 	      margin.  (default 'shiftwidth').
+ 
+@@ -306,6 +343,7 @@
+ 		      int	      int			 int
+ 		  func()	      func()		  func()
+ <
++							*cino-i*
+ 	iN    Indent C++ base class declarations and constructor
+ 	      initializations, if they start in a new line (otherwise they
+ 	      are aligned at the right side of the ':').
+@@ -319,13 +357,18 @@
+ 		      BaseClass(3)	    BaseClass(3)
+ 		  {}			    {}
+ <
+-	+N    Indent a continuation line (a line that spills onto the next) N
+-	      additional characters.  (default 'shiftwidth').
++							*cino-+*
++	+N    Indent a continuation line (a line that spills onto the next)
++              inside a function N additional characters.  (default
++              'shiftwidth').
++              Outside of a function, when the previous line ended in a
++              backslash, the 2 * N is used.
+ 
+ 		cino=			  cino=+10 >
+ 		  a = b + 9 *		    a = b + 9 *
+ 		      c;			      c;
+ <
++							*cino-c*
+ 	cN    Indent comment lines after the comment opener, when there is no
+ 	      other text with which to align, N characters from the comment
+ 	      opener.  (default 3).  See also |format-comments|.
+@@ -335,6 +378,7 @@
+ 		     text.			 text.
+ 		   */			     */
+ <
++							*cino-C*
+ 	CN    When N is non-zero, indent comment lines by the amount specified
+ 	      with the c flag above even if there is other text behind the
+ 	      comment opener.  (default 0).
+@@ -345,12 +389,14 @@
+ 		  ********/		    ********/
+ <	      (Example uses ":set comments& comments-=s1:/* comments^=s0:/*")
+ 
++							*cino-/*
+ 	/N    Indent comment lines N characters extra.  (default 0).
+ 		cino=			  cino=/4 >
+ 		  a = b;		    a = b;
+ 		  /* comment */			/* comment */
+ 		  c = d;		    c = d;
+ <
++							*cino-(*
+ 	(N    When in unclosed parentheses, indent N characters from the line
+ 	      with the unclosed parentheses.  Add a 'shiftwidth' for every
+ 	      unclosed parentheses.  When N is 0 or the unclosed parentheses
+@@ -366,6 +412,7 @@
+ 			  (c2 || c3))		(c2 || c3))
+ 		     {			       {
+ <
++							*cino-u*
+ 	uN    Same as (N, but for one level deeper.  (default 'shiftwidth').
+ 
+ 		cino=			  cino=u2 >
+@@ -373,6 +420,7 @@
+ 			  && (c22345		    && (c22345
+ 			      || c3))		      || c3))
+ <
++							*cino-U*
+ 	UN    When N is non-zero, do not ignore the indenting specified by
+ 	      ( or u in case that the unclosed parentheses is the first
+ 	      non-white character in its line.  (default 0).
+@@ -384,6 +432,7 @@
+ 		       c3			    c3
+ 		      ) && c4;			) && c4;
+ <
++							*cino-w*
+ 	wN    When in unclosed parentheses and N is non-zero and either
+ 	      using "(0" or "u0", respectively, or using "U0" and the unclosed
+ 	      parentheses is the first non-white character in its line, line
+@@ -396,6 +445,7 @@
+ 				|| c3))		    || c3))
+ 		      foo;			foo;
+ <
++							*cino-W*
+ 	WN    When in unclosed parentheses and N is non-zero and either
+ 	      using "(0" or "u0", respectively and the unclosed parentheses is
+ 	      the last non-white character in its line and it is not the
+@@ -410,6 +460,23 @@
+ 		  a_short_line(argument,    a_short_line(argument,
+ 			       argument);		 argument);
+ <
++							*cino-k*
++	kN    When in unclosed parentheses which follow "if", "for" or
++	      "while" and N is non-zero, overrides the behaviour defined by
++	      "(N": causes the indent to be N characters relative to the outer
++	      context (i.e. the line where "if", "for" or "while" is).  Has
++	      no effect on deeper levels of nesting.  Affects flags like "wN"
++	      only for the "if", "for" and "while" conditions.  If 0, defaults
++	      to behaviour defined by the "(N" flag.  (default: 0).
++
++		cino=(0			   cino=(0,ks >
++		  if (condition1	    if (condition1
++		      && condition2)		    && condition2)
++		      action();			action();
++		  function(argument1	    function(argument1
++			   && argument2);	     && argument2);
++<
++							*cino-m*
+ 	mN    When N is non-zero, line up a line starting with a closing
+ 	      parentheses with the first character of the line with the
+ 	      matching opening parentheses.  (default 0).
+@@ -424,6 +491,7 @@
+ 		     )			    )
+ 		      foo;			foo;
+ <
++							*cino-M*
+ 	MN    When N is non-zero, line up a line starting with a closing
+ 	      parentheses with the first character of the previous line.
+ 	      (default 0).
+@@ -433,10 +501,11 @@
+ 			 cond2			   cond2
+ 		     )				   )
+ <
+-					*java-cinoptions* *java-indenting*
+-	jN    Indent java anonymous classes correctly.  The value 'N' is
+-	      currently unused but must be non-zero (e.g. 'j1').  'j1' will
+-	      indent for example the following code snippet correctly: >
++				*java-cinoptions* *java-indenting* *cino-j*
++	jN    Indent Java anonymous classes correctly.  Also works well for
++	      Javascript.  The value 'N' is currently unused but must be
++	      non-zero (e.g. 'j1').  'j1' will indent for example the
++	      following code snippet correctly: >
+ 
+ 		object.add(new ChangeListener() {
+ 		    public void stateChanged(ChangeEvent e) {
+@@ -444,10 +513,11 @@
+ 		    }
+ 		});
+ <
+-				*javascript-cinoptions* *javascript-indenting*
++			*javascript-cinoptions* *javascript-indenting* *cino-J*
+ 	JN    Indent JavaScript object declarations correctly by not confusing
+ 	      them with labels.  The value 'N' is currently unused but must be 
+-	      non-zero (e.g. 'J1'). >
++	      non-zero (e.g. 'J1').  If you enable this you probably also want
++	      to set |cino-j|. >
+ 
+ 		var bar = {
+ 		    foo: {
+@@ -462,23 +532,28 @@
+ 		    }
+ 		}
+ <
++								*cino-)*
+ 	)N    Vim searches for unclosed parentheses at most N lines away.
+ 	      This limits the time needed to search for parentheses.  (default
+ 	      20 lines).
+ 
++								*cino-star*
+ 	*N    Vim searches for unclosed comments at most N lines away.  This
+ 	      limits the time needed to search for the start of a comment.
++	      If your /* */ comments stop indenting after N lines this is the
++	      value you will want to change.
+ 	      (default 70 lines).
+ 
++								*cino-#*
+ 	#N    When N is non-zero recognize shell/Perl comments, starting with
+-	      '#'.  Default N is zero: don't recognizes '#' comments.  Note
++	      '#'.  Default N is zero: don't recognize '#' comments.  Note
+ 	      that lines starting with # will still be seen as preprocessor
+ 	      lines.
+ 
+ 
+ The defaults, spelled out in full, are:
+-	cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,ps,ts,is,+s,
+-			c3,C0,/0,(2s,us,U0,w0,W0,m0,j0,J0,)20,*70,#0
++	cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
++			c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
+ 
+ Vim puts a line in column 1 if:
+ - It starts with '#' (preprocessor directives), if 'cinkeys' contains '#'.
+@@ -502,15 +577,117 @@
+ REMARKS ABOUT SPECIFIC INDENT FILES ~
+ 
+ 
++CLOJURE					*ft-clojure-indent* *clojure-indent*
++
++Clojure indentation differs somewhat from traditional Lisps, due in part to
++the use of square and curly brackets, and otherwise by community convention.
++These conventions are not always universally followed, so the Clojure indent
++script offers a few configurable options, listed below.
++
++If the current vim does not include searchpairpos(), the indent script falls
++back to normal 'lisp' indenting, and the following options are ignored.
++
++							*g:clojure_maxlines*
++
++Set maximum scan distance of searchpairpos(). Larger values trade performance
++for correctness when dealing with very long forms. A value of 0 will scan
++without limits.
++>
++	" Default
++	let g:clojure_maxlines = 100
++<
++
++						*g:clojure_fuzzy_indent*
++					*g:clojure_fuzzy_indent_patterns*
++					*g:clojure_fuzzy_indent_blacklist*
++
++The 'lispwords' option is a list of comma-separated words that mark special
++forms whose subforms must be indented with two spaces.
++
++For example:
++>
++	(defn bad []
++	      "Incorrect indentation")
++
++	(defn good []
++	  "Correct indentation")
++<
++If you would like to specify 'lispwords' with a |pattern| instead, you can use
++the fuzzy indent feature:
++>
++	" Default
++	let g:clojure_fuzzy_indent = 1
++	let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
++	let g:clojure_fuzzy_indent_blacklist =
++		\ ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
++
++	" Legacy comma-delimited string version; the list format above is
++	" recommended. Note that patterns are implicitly anchored with ^ and $
++	let g:clojure_fuzzy_indent_patterns = 'with.*,def.*,let.*'
++<
++|g:clojure_fuzzy_indent_patterns| and |g:clojure_fuzzy_indent_blacklist| are
++|Lists| of patterns that will be matched against the unquoted, unqualified
++symbol at the head of a list. This means that a pattern like "^foo" will match
++all these candidates: "foobar", "my.ns/foobar", and "#'foobar".
++
++Each candidate word is tested for special treatment in this order:
++
++	1. Return true if word is literally in 'lispwords'
++	2. Return false if word matches a pattern in
++	   |g:clojure_fuzzy_indent_blacklist|
++	3. Return true if word matches a pattern in
++	   |g:clojure_fuzzy_indent_patterns|
++	4. Return false and indent normally otherwise
++
++					*g:clojure_special_indent_words*
++
++Some forms in Clojure are indented so that every subform is indented only two
++spaces, regardless of 'lispwords'. If you have a custom construct that should
++be indented in this idiosyncratic fashion, you can add your symbols to the
++default list below.
++>
++	" Default
++	let g:clojure_special_indent_words =
++	   \ 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
++<
++
++					*g:clojure_align_multiline_strings*
++
++Align subsequent lines in multiline strings to the column after the opening
++quote, instead of the same column.
++
++For example:
++>
++	(def default
++	  "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
++	  eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
++	  enim ad minim veniam, quis nostrud exercitation ullamco laboris
++	  nisi ut aliquip ex ea commodo consequat.")
++
++	(def aligned
++	  "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do
++	   eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut
++	   enim ad minim veniam, quis nostrud exercitation ullamco laboris
++	   nisi ut aliquip ex ea commodo consequat.")
++<
++This option is off by default.
++>
++	" Default
++	let g:clojure_align_multiline_strings = 0
++<
++
++
+ FORTRAN							*ft-fortran-indent*
+ 
+-Block if, select case, and where constructs are indented.  Comments, labelled
+-statements and continuation lines are indented if the Fortran is in free
+-source form, whereas they are not indented if the Fortran is in fixed source
+-form because of the left margin requirements.  Hence manual indent corrections
+-will be necessary for labelled statements and continuation lines when fixed
+-source form is being used.  For further discussion of the method used for the
+-detection of source format see |ft-fortran-syntax|.
++Block if, select case, where, and forall constructs are indented.  So are
++type, interface, associate, block, and enum constructs.  The indenting of
++subroutines, functions, modules, and program blocks is optional.  Comments,
++labelled statements and continuation lines are indented if the Fortran is in
++free source form, whereas they are not indented if the Fortran is in fixed
++source form because of the left margin requirements.  Hence manual indent
++corrections will be necessary for labelled statements and continuation lines
++when fixed source form is being used.  For further discussion of the method
++used for the detection of source format see |ft-fortran-syntax|.
+ 
+ Do loops ~
+ All do loops are left unindented by default.  Do loops can be unstructured in
+@@ -537,6 +714,20 @@
+ to get do loops indented in .f90 files and left alone in Fortran files with
+ other extensions such as .for.
+ 
++Program units ~
++The indenting of program units (subroutines, functions, modules, and program
++blocks) is enabled by default but can be suppressed if a lighter, screen-width
++preserving indent style is desired.  To suppress the indenting of program
++units for all fortran files set the global fortran_indent_less variable in
++your .vimrc as follows >
++
++  let fortran_indent_less=1
++
++A finer level of suppression can be achieved by setting the corresponding
++buffer-local variable as follows >
++
++  let b:fortran_indent_less=1
++
+ 
+ PHP				*ft-php-indent* *php-indent* *php-indenting*
+ 
+@@ -549,12 +740,12 @@
+     :%s /\r$//g
+ 
+ Or, you can simply |:let| the variable PHP_removeCRwhenUnix to 1 and the
+-script will silently remove them when Vim loads a PHP file (at each|BufRead|).
++script will silently remove them when Vim loads a PHP file (at each |BufRead|).
+ 
+ OPTIONS: ~
+ 
+ PHP indenting can be altered in several ways by modifying the values of some
+-variables:
++global variables:
+ 
+ 								*php-comment*
+ To not enable auto-formating of comments by default (if you want to use your
+@@ -562,10 +753,21 @@
+     :let g:PHP_autoformatcomment = 0
+ 
+ Else, 't' will be removed from the 'formatoptions' string and "qrowcb" will be
+-added, see|fo-table|for more information.
++added, see |fo-table| for more information.
++-------------
++
++To add extra indentation to single-line comments: >
++    :let g:PHP_outdentSLComments = N
++
++With N being the number of 'shiftwidth' to add.
++
++Only single-line comments will be affected such as: >
++    # Comment
++    // Comment
++    /* Comment */
+ -------------
+ 
+-To add an extra indent to every PHP lines with N being the number of
++To add extra indentation to every PHP lines with N being the number of
+ 'shiftwidth' to add: >
+     :let g:PHP_default_indenting = N
+ 
+@@ -581,7 +783,7 @@
+ 
+ 	$command_hist = TRUE;
+     ?>
+-(Notice the extra indent between the PHP container markers and the code)
++(Notice the extra indentation between the PHP container markers and the code)
+ -------------
+ 
+ To indent PHP tags as the surrounding code: >
+@@ -613,8 +815,10 @@
+ To indent 'case:' and 'default:' statements in switch() blocks: >
+     :let g:PHP_vintage_case_default_indent = 1
+ 
+-(Since in PHP braces are not required inside 'case/default' blocks, by default they are indented at the same level than the 'switch()' to avoid
+-unnecessary indentation)
++In PHP braces are not required inside 'case/default' blocks therefore 'case:'
++and 'default:' are indented at the same level than the 'switch()' to avoid
++meaningless indentation. You can use the above option to return to the
++traditional way.
+ 
+ 
+ PYTHON							*ft-python-indent*
+@@ -631,6 +835,43 @@
+ 	let g:pyindent_continue = '&sw * 2'
+ 
+ 
++R								*ft-r-indent*
++
++Function arguments are aligned if they span for multiple lines. If you prefer
++do not have the arguments of functions aligned, put in your |vimrc|:
++>
++   let r_indent_align_args = 0
++<
++All lines beginning with a comment character, #, get the same indentation
++level of the normal R code. Users of Emacs/ESS may be used to have lines
++beginning with a single # indented in the 40th column, ## indented as R code,
++and ### not indented. If you prefer that lines beginning with comment
++characters are aligned as they are by Emacs/ESS, put in your |vimrc|:
++>
++   let r_indent_ess_comments = 1
++<
++If you prefer that lines beginning with a single # are aligned at a column
++different from the 40th one, you should set a new value to the variable
++r_indent_comment_column, as in the example below:
++>
++   let r_indent_comment_column = 30
++<
++Any code after a line that ends with "<-" is indented. Emacs/ESS does not
++indent the code if it is a top level function. If you prefer that the
++Vim-R-plugin behaves like Emacs/ESS in this regard, put in your |vimrc|:
++>
++   let r_indent_ess_compatible = 1
++<
++Below is an example of indentation with and without this option enabled:
++>
++   ### r_indent_ess_compatible = 1           ### r_indent_ess_compatible = 0
++   foo <-                                    foo <-
++       function(x)                               function(x)
++   {                                             {
++       paste(x)                                      paste(x)
++   }                                             }
++<
++
+ SHELL							*ft-sh-indent*
+ 
+ The amount of indent applied under various circumstances in a shell file can
+diff -Naur vim73.orig/runtime/doc/index.txt vim73/runtime/doc/index.txt
+--- vim73.orig/runtime/doc/index.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/index.txt	2013-06-07 17:07:08.978983035 +0000
+@@ -1,4 +1,4 @@
+-*index.txt*     For Vim version 7.3.  Last change: 2010 Jul 21
++*index.txt*     For Vim version 7.3.  Last change: 2013 Jun 06
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -29,7 +29,7 @@
+ ==============================================================================
+ 1. Insert mode						*insert-index*
+ 
+-tag		char		action	~
++tag		char		action in Insert mode	~
+ -----------------------------------------------------------------------
+ |i_CTRL-@|	CTRL-@		insert previously inserted text and stop
+ 				insert
+@@ -94,8 +94,8 @@
+ |i_CTRL-Z|	CTRL-Z		when 'insertmode' set: suspend Vim
+ |i_<Esc>|	<Esc>		end insert mode (unless 'insertmode' set)
+ |i_CTRL-[|	CTRL-[		same as <Esc>
+-|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N	 go to Normal mode
+-|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G	 go to mode specified with 'insertmode'
++|i_CTRL-\_CTRL-N| CTRL-\ CTRL-N	go to Normal mode
++|i_CTRL-\_CTRL-G| CTRL-\ CTRL-G	go to mode specified with 'insertmode'
+ 		CTRL-\ a - z	reserved for extensions
+ 		CTRL-\ others	not used
+ |i_CTRL-]|	CTRL-]		trigger abbreviation
+@@ -141,7 +141,7 @@
+ |i_<ScrollWheelUp>|	<ScrollWheelUp>		move window three lines up
+ |i_<S-ScrollWheelUp>|	<S-ScrollWheelUp>	move window one page up
+ |i_<ScrollWheelLeft>|	<ScrollWheelLeft>	move window six columns left
+-|i_<S-ScrollWheelLeft>| <S-ScrollWheelLeft>	move window one page left
++|i_<S-ScrollWheelLeft>|	<S-ScrollWheelLeft>	move window one page left
+ |i_<ScrollWheelRight>|	<ScrollWheelRight>	move window six columns right
+ |i_<S-ScrollWheelRight>| <S-ScrollWheelRight>	move window one page right
+ 
+@@ -212,8 +212,8 @@
+ |CTRL-Y|	CTRL-Y		   scroll N lines downwards
+ |CTRL-Z|	CTRL-Z		   suspend program (or start new shell)
+ 		CTRL-[ <Esc>	   not used
+-|CTRL-\_CTRL-N| CTRL-\ CTRL-N	   go to Normal mode (no-op)
+-|CTRL-\_CTRL-G| CTRL-\ CTRL-G	   go to mode specified with 'insertmode'
++|CTRL-\_CTRL-N|	CTRL-\ CTRL-N	   go to Normal mode (no-op)
++|CTRL-\_CTRL-G|	CTRL-\ CTRL-G	   go to mode specified with 'insertmode'
+ 		CTRL-\ a - z	   reserved for extensions
+ 		CTRL-\ others      not used
+ |CTRL-]|	CTRL-]		   :ta to ident under cursor
+@@ -431,7 +431,7 @@
+ |<Insert>|	<Insert>	2  same as "i"
+ |<Left>|	<Left>		1  same as "h"
+ |<LeftMouse>|	<LeftMouse>	1  move cursor to the mouse click position
+-|<MiddleMouse>| <MiddleMouse>	2  same as "gP" at the mouse click position
++|<MiddleMouse>|	<MiddleMouse>	2  same as "gP" at the mouse click position
+ |<PageDown>|	<PageDown>	   same as CTRL-F
+ |<PageUp>|	<PageUp>	   same as CTRL-B
+ |<Right>|	<Right>		1  same as "l"
+@@ -459,7 +459,7 @@
+ 
+ These can be used after an operator or in Visual mode to select an object.
+ 
+-tag		command		   action in Normal mode	~
++tag		command		   action in op-pending and Visual mode	~
+ ------------------------------------------------------------------------------
+ |v_aquote|	a"		   double quoted string
+ |v_a'|		a'		   single quoted string
+@@ -640,7 +640,7 @@
+ |[s|		[s		1  move to the previous misspelled word
+ |[z|		[z		1  move to start of open fold
+ |[{|		[{		1  cursor N times back to unmatched '{'
+-|[<MiddleMouse> [<MiddleMouse>	2  same as "[p"
++|[<MiddleMouse>| [<MiddleMouse>	2  same as "[p"
+ 
+ |]_CTRL-D|	] CTRL-D	   jump to first #define found in current and
+ 				   included files matching the word under the
+@@ -680,7 +680,7 @@
+ |]s|		]s		1  move to next misspelled word
+ |]z|		]z		1  move to end of open fold
+ |]}|		]}		1  cursor N times forward to unmatched '}'
+-|]<MiddleMouse> ]<MiddleMouse>	2  same as "]p"
++|]<MiddleMouse>| ]<MiddleMouse>	2  same as "]p"
+ 
+ ==============================================================================
+ 2.4 Commands starting with 'g'						*g*
+@@ -719,9 +719,13 @@
+ |gH|		gH		   start Select line mode
+ |gI|		gI		2  like "I", but always start in column 1
+ |gJ|		gJ		2  join lines without inserting space
++|gN|		gN	      1,2  find the previous match with the last used
++				   search pattern and Visually select it
+ |gP|		["x]gP		2  put the text [from register x] before the
+ 				   cursor N times, leave the cursor after it
++|gQ|		gQ		    switch to "Ex" mode with Vim editing
+ |gR|		gR		2  enter Virtual Replace mode
++|gT|		gT		   go to the previous tab page
+ |gU|		gU{motion}	2  make Nmove text uppercase
+ |gV|		gV		   don't reselect the previous Visual area
+ 				   when executing a mapping or menu in Select
+@@ -750,6 +754,8 @@
+ 				   lines down
+ |gk|		gk		1  like "k", but when 'wrap' on go N screen
+ 				   lines up
++|gn|		gn	      1,2  find the next match with the last used
++				   search pattern and Visually select it
+ |gm|		gm		1  go to character at middle of the screenline
+ |go|		go		1  cursor to byte N in the buffer
+ |gp|		["x]gp		2  put the text [from register x] after the
+@@ -757,6 +763,7 @@
+ |gq|		gq{motion}	2  format Nmove text
+ |gr|		gr{char}	2  virtual replace N chars with {char}
+ |gs|		gs		   go to sleep for N seconds (default 1)
++|gt|		gt		   go to the next tab page
+ |gu|		gu{motion}	2  make Nmove text lowercase
+ |gv|		gv		   reselect the previous Visual area
+ |gw|		gw{motion}	2  format Nmove text and keep cursor
+@@ -951,11 +958,13 @@
+ "Completion" below refers to context-sensitive completion.  It will complete
+ file names, tags, commands etc. as appropriate.
+ 
++tag		command	      action in Command-line editing mode	~
++------------------------------------------------------------------------------
+ 		CTRL-@		not used
+ |c_CTRL-A|	CTRL-A		do completion on the pattern in front of the
+ 				cursor and insert all matches
+ |c_CTRL-B|	CTRL-B		cursor to begin of command-line
+-|c_CTRL-C|	CTRL-C		same as <ESC>
++|c_CTRL-C|	CTRL-C		same as <Esc>
+ |c_CTRL-D|	CTRL-D		list completions that match the pattern in
+ 				front of the cursor
+ |c_CTRL-E|	CTRL-E		cursor to end of command-line
+@@ -1004,8 +1013,8 @@
+ 		CTRL-Z		not used (reserved for suspend)
+ |c_<Esc>|	<Esc>		abandon command-line without executing it
+ |c_<Esc>|	CTRL-[		same as <Esc>
+-|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N	 go to Normal mode, abandon command-line
+-|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G	 go to mode specified with 'insertmode',
++|c_CTRL-\_CTRL-N| CTRL-\ CTRL-N	go to Normal mode, abandon command-line
++|c_CTRL-\_CTRL-G| CTRL-\ CTRL-G	go to mode specified with 'insertmode',
+ 				abandon command-line
+ 		CTRL-\ a - d	reserved for extensions
+ |c_CTRL-\_e|	CTRL-\ e {expr} replace the command line with the result of
+@@ -1046,6 +1055,8 @@
+ mentioning any arguments.  The optional part of the command name is inside [].
+ The commands are sorted on the non-optional part of their name.
+ 
++tag	      command	      action ~
++------------------------------------------------------------------------------
+ |:!|		:!		filter lines or execute an external command
+ |:!!|		:!!		repeat last ":!" command
+ |:#|		:#		same as ":number"
+@@ -1125,7 +1136,7 @@
+ |:cgetbuffer|	:cgetb[uffer]	get errors from buffer
+ |:cgetexpr|	:cgete[xpr]	get errors from expr
+ |:cgetfile|	:cg[etfile]	read file with error messages
+-|:changes|	:cha[nges]	print the change list
++|:changes|	:changes	print the change list
+ |:chdir|	:chd[ir]	change directory
+ |:checkpath|	:che[ckpath]	list included files
+ |:checktime|	:checkt[ime]	check timestamp of loaded buffers
+@@ -1256,7 +1267,7 @@
+ |:k|		:k		set a mark
+ |:keepalt|	:keepa[lt]	following command keeps the alternate file
+ |:keepmarks|	:kee[pmarks]	following command keeps marks where they are
+-|:keepjumps|	:keepj[jumps]	following command keeps jumplist and marks
++|:keepjumps|	:keepj[umps]	following command keeps jumplist and marks
+ |:lNext|	:lN[ext]	go to previous entry in location list
+ |:lNfile|	:lNf[ile]	go to last entry in previous file
+ |:list|		:l[ist]		print lines
+@@ -1374,7 +1385,7 @@
+ |:promptrepl|	:promptr[epl]	open GUI dialog for search/replace
+ |:perldo|	:perld[o]	execute Perl command for each line
+ |:pop|		:po[p]		jump to older entry in tag stack
+-|:popup|	:pop[up]	popup a menu by name
++|:popup|	:popu[p]	popup a menu by name
+ |:ppop|		:pp[op]		":pop" in preview window
+ |:preserve|	:pre[serve]	write all text to swap file
+ |:previous|	:prev[ious]	go to previous file in argument list
+@@ -1392,8 +1403,10 @@
+ |:pwd|		:pw[d]		print current directory
+ |:py3|		:py3		execute Python 3 command
+ |:python3|	:python3	same as :py3
++|:py3do|	:py3d[o]	execute Python 3 command for each line
+ |:py3file|	:py3f[ile]	execute Python 3 script file
+ |:python|	:py[thon]	execute Python command
++|:pydo|		:pyd[o]		execute Python command for each line
+ |:pyfile|	:pyf[ile]	execute Python script file
+ |:quit|		:q[uit]		quit current window (when one window quit Vim)
+ |:quitall|	:quita[ll]	quit Vim
+@@ -1460,7 +1473,7 @@
+ |:slast|	:sla[st]	split window and go to last file in the
+ 				argument list
+ |:smagic|	:sm[agic]	:substitute with 'magic'
+-|:smap|		:sma[p]		like ":map" but for Select mode
++|:smap|		:smap		like ":map" but for Select mode
+ |:smapclear|	:smapc[lear]	remove all mappings for Select mode
+ |:smenu|	:sme[nu]	add menu for Select mode
+ |:snext|	:sn[ext]	split window and go to next file in the
+@@ -1497,6 +1510,7 @@
+ |:sview|	:sv[iew]	split window and edit file read-only
+ |:swapname|	:sw[apname]	show the name of the current swap file
+ |:syntax|	:sy[ntax]	syntax highlighting
++|:syntime|	:synti[me]	measure syntax highlighting speed
+ |:syncbind|	:sync[bind]	sync scroll binding
+ |:t|		:t		same as ":copy"
+ |:tNext|	:tN[ext]	jump to previous matching tag
+diff -Naur vim73.orig/runtime/doc/insert.txt vim73/runtime/doc/insert.txt
+--- vim73.orig/runtime/doc/insert.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/insert.txt	2013-06-07 17:07:09.012316273 +0000
+@@ -1,4 +1,4 @@
+-*insert.txt*    For Vim version 7.3.  Last change: 2010 Jul 29
++*insert.txt*    For Vim version 7.3.  Last change: 2013 Apr 12
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -380,7 +380,16 @@
+ end of the line, it will be put on the last character in the line.  In
+ mappings it's often better to use <Esc> (first put an "x" in the text, <Esc>
+ will then always put the cursor on it).  Or use CTRL-\ CTRL-O, but then
+-beware of the cursor possibly being beyond the end of the line.
++beware of the cursor possibly being beyond the end of the line.  Note that the
++command following CTRL-\ CTRL-O can still move the cursor, it is not restored
++to its original position.
++
++The CTRL-O command takes you to Normal mode.  If you then use a command enter
++Insert mode again it normally doesn't nest.  Thus when typing "a<C-O>a" and
++then <Esc> takes you back to Normal mode, you do not need to type <Esc> twice.
++An exception is when not typing the command, e.g. when executing a mapping or
++sourcing a script.  This makes mappings work that briefly switch to Insert
++mode.
+ 
+ The shifted cursor keys are not available on all terminals.
+ 
+@@ -394,7 +403,12 @@
+ 
+ This redefines the backspace key to start a new undo sequence.  You can now
+ undo the effect of the backspace key, without changing what you typed before
+-that, with CTRL-O u.
++that, with CTRL-O u.  Another example: >
++
++	:inoremap <CR> <C-]><C-G>u<CR>
++
++This breaks undo at each line break.  It also expands abbreviations before
++this.
+ 
+ Using CTRL-O splits undo: the text typed before and after it is undone
+ separately.  If you want to avoid this (e.g., in a mapping) you might be able
+@@ -479,7 +493,7 @@
+ 							*ins-smarttab*
+ When the 'smarttab' option is on, a <Tab> inserts 'shiftwidth' positions at
+ the beginning of a line and 'tabstop' positions in other places.  This means
+-that often spaces instead of a <Tab> character are inserted.  When 'smarttab
++that often spaces instead of a <Tab> character are inserted.  When 'smarttab'
+ is off, a <Tab> always inserts 'tabstop' positions, and 'shiftwidth' is only
+ used for ">>" and the like.  {not in Vi}
+ 
+@@ -555,12 +569,11 @@
+ In 'list' mode, Virtual Replace mode acts as if it was not in 'list' mode,
+ unless "L" is in 'cpoptions'.
+ 
+-Note that the only times characters beyond the cursor should appear to move
+-are in 'list' mode, and occasionally when 'wrap' is set (and the line changes
+-length to become shorter or wider than the width of the screen), or
+-momentarily when typing over a CTRL character.  A CTRL character takes up two
+-screen spaces.  When replacing it with two normal characters, the first will
+-be inserted and the second will replace the CTRL character.
++Note that the only situations for which characters beyond the cursor should
++appear to move are in List mode |'list'|, and occasionally when 'wrap' is set
++(and the line changes length to become shorter or wider than the width of the
++screen).  In other cases spaces may be inserted to avoid following characters
++to move.
+ 
+ This mode is very useful for editing <Tab> separated columns in tables, for
+ entering new data while keeping all the columns aligned.
+@@ -1006,8 +1019,13 @@
+ number between zero and the cursor column "col('.')".  This involves looking
+ at the characters just before the cursor and including those characters that
+ could be part of the completed item.  The text between this column and the
+-cursor column will be replaced with the matches.  Return -1 if no completion
+-can be done.
++cursor column will be replaced with the matches.
++
++Special return values:
++   -1 If no completion can be done, the completion will be cancelled with an
++      error message.
++   -2 To cancel silently and stay in completion mode.
++   -3 To cancel silently and leave completion mode.
+ 
+ On the second invocation the arguments are:
+    a:findstart  0
+@@ -1017,6 +1035,23 @@
+ The function must return a List with the matching words.  These matches
+ usually include the "a:base" text.  When there are no matches return an empty
+ List.
++
++In order to return more information than the matching words, return a Dict
++that contains the List.  The Dict can have these items:
++	words		The List of matching words (mandatory).
++	refresh		A string to control re-invocation of the function
++			(optional).
++			The only value currently recognized is "always", the
++			effect is that the function is called whenever the
++			leading text is changed.
++Other items are ignored.
++
++For acting upon end of completion, see the |CompleteDone| autocommand event.
++
++For example, the function can contain this: >
++	let matches = ... list of words ...
++	return {'words': matches, 'refresh': 'always'}
++<
+ 						*complete-items*
+ Each list item can either be a string or a Dictionary.  When it is a string it
+ is used as the completion.  When it is a Dictionary it can contain these
+@@ -1034,17 +1069,21 @@
+ 			items that only differ in case are added
+ 	dup		when non-zero this match will be added even when an
+ 			item with the same word is already present.
++	empty		when non-zero this match will be added even when it is
++			an empty string
+ 
+-All of these except 'icase' must be a string.  If an item does not meet these
+-requirements then an error message is given and further items in the list are
+-not used.  You can mix string and Dictionary items in the returned list.
++All of these except 'icase', 'dup' and 'empty' must be a string.  If an item
++does not meet these requirements then an error message is given and further
++items in the list are not used.  You can mix string and Dictionary items in
++the returned list.
+ 
+ The "menu" item is used in the popup menu and may be truncated, thus it should
+ be relatively short.  The "info" item can be longer, it will  be displayed in
+ the preview window when "preview" appears in 'completeopt'.  The "info" item
+ will also remain displayed after the popup menu has been removed.  This is
+ useful for function arguments.  Use a single space for "info" to remove
+-existing text in the preview window.
++existing text in the preview window.  The size of the preview window is three
++lines, but 'previewheight' is used when it has a value of 1 or 2.
+ 
+ The "kind" item uses a single letter to indicate the kind of completion.  This
+ may be used to show the completion differently (different color or icon).
+@@ -1060,9 +1099,9 @@
+ list!  Call |complete_check()| now and then to allow the user to press a key
+ while still searching for matches.  Stop searching when it returns non-zero.
+ 
+-The function is allowed to move the cursor, it is restored afterwards.  This
+-option cannot be set from a |modeline| or in the |sandbox|, for security
+-reasons.
++							*E839* *E840*
++The function is allowed to move the cursor, it is restored afterwards.
++The function is not allowed to move to another window or delete text.
+ 
+ An example that completes the names of the months: >
+ 	fun! CompleteMonths(findstart, base)
+@@ -1767,6 +1806,11 @@
+ containing only a ".".  Watch out for lines starting with a backslash, see
+ |line-continuation|.
+ 
++When in Ex mode (see |-e|) a backslash at the end of the line can be used to
++insert a NUL character.  To be able to have a line ending in a backslash use
++two backslashes.  This means that the number of backslashes is halved, but
++only at the end of the line.
++
+ NOTE: These commands cannot be used with |:global| or |:vglobal|.
+ ":append" and ":insert" don't work properly in between ":if" and
+ ":endif", ":for" and ":endfor", ":while" and ":endwhile".
+@@ -1825,13 +1869,15 @@
+ 			See |++opt| for the possible values of [++opt].
+ 
+ 							*:r!* *:read!*
+-:[range]r[ead] !{cmd}	Execute {cmd} and insert its standard output below
++:[range]r[ead] [++opt] !{cmd}
++			Execute {cmd} and insert its standard output below
+ 			the cursor or the specified line.  A temporary file is
+ 			used to store the output of the command which is then
+ 			read into the buffer.  'shellredir' is used to save
+ 			the output of the command, which can be set to include
+ 			stderr or not.  {cmd} is executed like with ":!{cmd}",
+ 			any '!' is replaced with the previous command |:!|.
++			See |++opt| for the possible values of [++opt].
+ 
+ These commands insert the contents of a file, or the output of a command,
+ into the buffer.  They can be undone.  They cannot be repeated with the "."
+diff -Naur vim73.orig/runtime/doc/intro.txt vim73/runtime/doc/intro.txt
+--- vim73.orig/runtime/doc/intro.txt	2010-08-15 12:23:20.000000000 +0000
++++ vim73/runtime/doc/intro.txt	2013-06-07 17:07:09.022316245 +0000
+@@ -1,4 +1,4 @@
+-*intro.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
++*intro.txt*     For Vim version 7.3.  Last change: 2012 Sep 05
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -135,8 +135,10 @@
+ 
+ Bug reports:				*bugs* *bug-reports* *bugreport.vim*
+ 
+-Send bug reports to: Vim bugs <bugs@vim.org>
+-This is not a maillist but the message is redirected to the Vim maintainer.
++Send bug reports to: Vim Developers <vim_dev@vim.org>
++This is a maillist, many people will see the message.  If you don't want that,
++e.g. because it is a security issue, send it to <bugs@vim.org>, this only goes
++to the Vim maintainer (that's Bram).
+ Please be brief; all the time that is spent on answering mail is subtracted
+ from the time that is spent on improving Vim!  Always give a reproducible
+ example and try to find out which settings or other things influence the
+@@ -300,7 +302,7 @@
+ 
+ []		Characters in square brackets are optional.
+ 
+-						    *count* *[count]* *E489*
++						    *count* *[count]*
+ [count]		An optional number that may precede the command to multiply
+ 		or iterate the command.  If no number is given, a count of one
+ 		is used, unless otherwise noted.  Note that in this manual the
+@@ -392,6 +394,8 @@
+ 							*quotecommandquote*
+ "command"	A reference to a command that you can type is enclosed in
+ 		double quotes.
++`command`	New style command, this distinguishes it from other quoted
++		text and strings.
+ 
+ 					*key-notation* *key-codes* *keycodes*
+ These names for keys are used in the documentation.  They can also be used
+@@ -616,7 +620,6 @@
+ Command-line	 *3	  --	  --	 :start	    --		      --
+ Ex		 :vi	  --	  --	 --	    --	      --
+ 
+--  NA
+ -- not possible
+ 
+ *1 Go from Normal mode to Insert mode by giving the command "i", "I", "a",
+@@ -703,7 +706,7 @@
+ (see below).  The 'linebreak' option can be set to wrap at a blank character.
+ 
+ If the window has room after the last line of the buffer, Vim will show '~' in
+-the first column of the last lines in the window, like this: >
++the first column of the last lines in the window, like this:
+ 
+ 	+-----------------------+
+ 	|some line		|
+@@ -715,7 +718,7 @@
+ Thus the '~' lines indicate that the end of the buffer was reached.
+ 
+ If the last line in a window doesn't fit, Vim will indicate this with a '@' in
+-the first column of the last lines in the window, like this: >
++the first column of the last lines in the window, like this:
+ 
+ 	+-----------------------+
+ 	|first line		|
+@@ -730,7 +733,7 @@
+ When the "lastline" flag is present in the 'display' option, you will not see
+ '@' characters at the left side of window.  If the last line doesn't fit
+ completely, only the part that fits is shown, and the last three characters of
+-the last line are replaced with "@@@", like this: >
++the last line are replaced with "@@@", like this:
+ 
+ 	+-----------------------+
+ 	|first line		|
+diff -Naur vim73.orig/runtime/doc/map.txt vim73/runtime/doc/map.txt
+--- vim73.orig/runtime/doc/map.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/map.txt	2013-06-07 17:07:09.045649511 +0000
+@@ -1,4 +1,4 @@
+-*map.txt*       For Vim version 7.3.  Last change: 2010 Jul 31
++*map.txt*       For Vim version 7.3.  Last change: 2013 May 05
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -49,7 +49,7 @@
+ :nm[ap]	{lhs} {rhs}		|mapmode-n|		*:nm* *:nmap*
+ :vm[ap]	{lhs} {rhs}		|mapmode-v|		*:vm* *:vmap*
+ :xm[ap]	{lhs} {rhs}		|mapmode-x|		*:xm* *:xmap*
+-:smap	{lhs} {rhs}		|mapmode-s|		      *:smap*
++:smap	{lhs} {rhs}		|mapmode-s|		    *:smap*
+ :om[ap]	{lhs} {rhs}		|mapmode-o|		*:om* *:omap*
+ :map!	{lhs} {rhs}		|mapmode-ic|		*:map!*
+ :im[ap]	{lhs} {rhs}		|mapmode-i|		*:im* *:imap*
+@@ -107,6 +107,8 @@
+ :cmapc[lear]			|mapmode-c|		*:cmapc*  *:cmapclear*
+ 			Remove ALL mappings for the modes where the map
+ 			command applies.  {not in Vi}
++			Use the <buffer> argument to remove buffer-local
++			mappings |:map-<buffer>|
+ 			Warning: This also removes the default mappings.
+ 
+ :map				|mapmode-nvo|
+@@ -226,7 +228,7 @@
+ 
+ For abbreviations |v:char| is set to the character that was typed to trigger
+ the abbreviation.  You can use this to decide how to expand the {lhs}.  You
+-can't change v:char and you should not insert it.
++should not either insert or change the v:char.
+ 
+ Be very careful about side effects!  The expression is evaluated while
+ obtaining characters, you may very well make the command dysfunctional.
+@@ -235,11 +237,18 @@
+ - Editing another buffer.
+ - The |:normal| command.
+ - Moving the cursor is allowed, but it is restored afterwards.
+-- You can use getchar(), but the existing typeahead isn't seen and new
+-  typeahead is discarded.
+ If you want the mapping to do any of these let the returned characters do
+ that.
+ 
++You can use getchar(), it consumes typeahead if there is any. E.g., if you
++have these mappings: >
++  inoremap <expr> <C-L> nr2char(getchar())
++  inoremap <expr> <C-L>x "foo"
++If you now type CTRL-L nothing happens yet, Vim needs the next character to
++decide what mapping to use.  If you type 'x' the second mapping is used and
++"foo" is inserted.  If you type any other key the first mapping is used,
++getchar() gets the typed key and returns it.
++
+ Here is an example that inserts a list number that increases: >
+ 	let counter = 0
+ 	inoremap <expr> <C-L> ListItem()
+@@ -480,9 +489,9 @@
+ have to type CTRL-V two times).  Unfortunately, you cannot do this in a vimrc
+ file.
+ 							*<Nop>*
+-A easier way to get a mapping that doesn't produce anything, is to use "<Nop>"
+-for the {rhs}.  This only works when the |<>| notation is enabled.  For
+-example, to make sure that function key 8 does nothing at all: >
++An easier way to get a mapping that doesn't produce anything, is to use
++"<Nop>" for the {rhs}.  This only works when the |<>| notation is enabled.
++For example, to make sure that function key 8 does nothing at all: >
+ 	:map  <F8>  <Nop>
+ 	:map! <F8>  <Nop>
+ <
+@@ -495,7 +504,7 @@
+ 	:set encoding=utf-8
+ The mapping for <M-C> is defined with the latin1 encoding, resulting in a 0xc3
+ byte.  If you type the character á (0xe1 <M-a>) in UTF-8 encoding this is the
+-two bytes 0xc3 0xa1.  You don't want the 0xc3 byte to be mapped then,
++two bytes 0xc3 0xa1.  You don't want the 0xc3 byte to be mapped then or
+ otherwise it would be impossible to type the á character.
+ 
+ 					*<Leader>* *mapleader*
+@@ -518,7 +527,7 @@
+ <LocalLeader> is just like <Leader>, except that it uses "maplocalleader"
+ instead of "mapleader".  <LocalLeader> is to be used for mappings which are
+ local to a buffer.  Example: >
+-      :map <LocalLeader>q  \DoItNow
++      :map <buffer> <LocalLeader>A  oanother line<Esc>
+ <
+ In a global plugin <Leader> should be used and in a filetype plugin
+ <LocalLeader>.  "mapleader" and "maplocalleader" can be equal.  Although, if
+@@ -542,6 +551,7 @@
+ 	<Char-123>	character 123
+ 	<Char-033>	character 27
+ 	<Char-0x7f>	character 127
++	<S-Char-114>    character 114 ('r') shifted ('R')
+ This is useful to specify a (multi-byte) character in a 'keymap' file.
+ Upper and lowercase differences are ignored.
+ 
+@@ -934,11 +944,12 @@
+ 			avoid that a typed {lhs} is expanded, since
+ 			command-line abbreviations apply here.
+ 
+-:ab[breviate] [<expr>] {lhs} {rhs}
++:ab[breviate] [<expr>] [<buffer>] {lhs} {rhs}
+ 			add abbreviation for {lhs} to {rhs}.  If {lhs} already
+ 			existed it is replaced with the new {rhs}.  {rhs} may
+ 			contain spaces.
+ 			See |:map-<expr>| for the optional <expr> argument.
++			See |:map-<buffer>| for the optional <buffer> argument.
+ 
+ 						*:una* *:unabbreviate*
+ :una[bbreviate] {lhs}	Remove abbreviation for {lhs} from the list.  If none
+@@ -948,12 +959,12 @@
+ 			expansion insert a CTRL-V (type it twice).
+ 
+ 						*:norea* *:noreabbrev*
+-:norea[bbrev] [<expr>] [lhs] [rhs]
++:norea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
+ 			same as ":ab", but no remapping for this {rhs} {not
+ 			in Vi}
+ 
+ 						*:ca* *:cabbrev*
+-:ca[bbrev] [<expr>] [lhs] [rhs]
++:ca[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
+ 			same as ":ab", but for Command-line mode only.  {not
+ 			in Vi}
+ 
+@@ -962,12 +973,12 @@
+ 			in Vi}
+ 
+ 						*:cnorea* *:cnoreabbrev*
+-:cnorea[bbrev] [<expr>] [lhs] [rhs]
++:cnorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
+ 			same as ":ab", but for Command-line mode only and no
+ 			remapping for this {rhs} {not in Vi}
+ 
+ 						*:ia* *:iabbrev*
+-:ia[bbrev] [<expr>] [lhs] [rhs]
++:ia[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
+ 			same as ":ab", but for Insert mode only.  {not in Vi}
+ 
+ 						*:iuna* *:iunabbrev*
+@@ -975,18 +986,18 @@
+ 			Vi}
+ 
+ 						*:inorea* *:inoreabbrev*
+-:inorea[bbrev] [<expr>] [lhs] [rhs]
++:inorea[bbrev] [<expr>] [<buffer>] [lhs] [rhs]
+ 			same as ":ab", but for Insert mode only and no
+ 			remapping for this {rhs} {not in Vi}
+ 
+ 							*:abc* *:abclear*
+-:abc[lear]		Remove all abbreviations.  {not in Vi}
++:abc[lear] [<buffer>]	Remove all abbreviations.  {not in Vi}
+ 
+ 							*:iabc* *:iabclear*
+-:iabc[lear]		Remove all abbreviations for Insert mode.  {not in Vi}
++:iabc[lear] [<buffer>]	Remove all abbreviations for Insert mode.  {not in Vi}
+ 
+ 							*:cabc* *:cabclear*
+-:cabc[lear]		Remove all abbreviations for Command-line mode.  {not
++:cabc[lear] [<buffer>]	Remove all abbreviations for Command-line mode.  {not
+ 			in Vi}
+ 
+ 							*using_CTRL-V*
+@@ -1093,16 +1104,20 @@
+ 
+ For starters: See section |40.2| in the user manual.
+ 
+-						*E183* *user-cmd-ambiguous*
++					*E183* *E841* *user-cmd-ambiguous*
+ All user defined commands must start with an uppercase letter, to avoid
+-confusion with builtin commands.  (There are a few builtin commands, notably
+-:Next, :Print and :X, which do start with an uppercase letter.  The builtin
+-will always take precedence in these cases).  The other characters of the user
+-command can be uppercase letters, lowercase letters or digits.  When using
+-digits, note that other commands that take a numeric argument may become
+-ambiguous.  For example, the command ":Cc2" could be the user command ":Cc2"
+-without an argument, or the command ":Cc" with argument "2".  It is advised to
+-put a space between the command name and the argument to avoid these problems.
++confusion with builtin commands.  Exceptions are these builtin commands:
++	:Next
++	:X
++They cannot be used for a user defined command.  ":Print" is also an existing
++command, but it is deprecated and can be overruled.
++
++The other characters of the user command can be uppercase letters, lowercase
++letters or digits.  When using digits, note that other commands that take a
++numeric argument may become ambiguous.  For example, the command ":Cc2" could
++be the user command ":Cc2" without an argument, or the command ":Cc" with
++argument "2".  It is advised to put a space between the command name and the
++argument to avoid these problems.
+ 
+ When using a user-defined command, the command can be abbreviated.  However, if
+ an abbreviation is not unique, an error will be issued.  Furthermore, a
+@@ -1173,13 +1188,15 @@
+ command can take arguments, using the -nargs attribute.  Valid cases are:
+ 
+ 	-nargs=0    No arguments are allowed (the default)
+-	-nargs=1    Exactly one argument is required
+-	-nargs=*    Any number of arguments are allowed (0, 1, or many)
++	-nargs=1    Exactly one argument is required, it includes spaces 
++	-nargs=*    Any number of arguments are allowed (0, 1, or many),
++		    separated by white space
+ 	-nargs=?    0 or 1 arguments are allowed
+ 	-nargs=+    Arguments must be supplied, but any number are allowed
+ 
+ Arguments are considered to be separated by (unescaped) spaces or tabs in this
+-context.
++context, except when there is one argument, then the white space is part of
++the argument.
+ 
+ Note that arguments are used as text, not as expressions.  Specifically,
+ "s:var" will use the script-local variable in the script where the command was
+@@ -1202,23 +1219,32 @@
+ 
+ 	-complete=augroup	autocmd groups
+ 	-complete=buffer	buffer names
++	-complete=behave	:behave suboptions
++	-complete=color		color schemes
+ 	-complete=command	Ex command (and arguments)
++	-complete=compiler	compilers
++	-complete=cscope	|:cscope| suboptions
+ 	-complete=dir		directory names
+ 	-complete=environment	environment variable names
+ 	-complete=event		autocommand events
+ 	-complete=expression	Vim expression
+ 	-complete=file		file and directory names
++	-complete=file_in_path	file and directory names in |'path'|
+ 	-complete=filetype	filetype names |'filetype'|
+ 	-complete=function	function name
+ 	-complete=help		help subjects
+ 	-complete=highlight	highlight groups
++	-complete=history	:history suboptions
++	-complete=locale	locale names (as output of locale -a)
+ 	-complete=mapping	mapping name
+ 	-complete=menu		menus
+ 	-complete=option	options
+ 	-complete=shellcmd	Shell command
++	-complete=sign		|:sign| suboptions
+ 	-complete=syntax	syntax file names |'syntax'|
+ 	-complete=tag		tags
+ 	-complete=tag_listfiles	tags, file names are shown when CTRL-D is hit
++	-complete=user		user names
+ 	-complete=var		user variables
+ 	-complete=custom,{func} custom completion, defined via {func}
+ 	-complete=customlist,{func} custom completion, defined via {func}
+@@ -1285,7 +1311,8 @@
+ 	-range	    Range allowed, default is current line
+ 	-range=%    Range allowed, default is whole file (1,$)
+ 	-range=N    A count (default N) which is specified in the line
+-		    number position (like |:split|)
++		    number position (like |:split|); allows for zero line
++		    number.
+ 	-count=N    A count (default N) which is specified either in the line
+ 		    number position, or as an initial argument (like |:Next|).
+ 		    Specifying -count (without a default) acts like -count=0
+diff -Naur vim73.orig/runtime/doc/mbyte.txt vim73/runtime/doc/mbyte.txt
+--- vim73.orig/runtime/doc/mbyte.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/mbyte.txt	2013-06-07 17:07:09.072316102 +0000
+@@ -1,4 +1,4 @@
+-*mbyte.txt*     For Vim version 7.3.  Last change: 2010 Jul 26
++*mbyte.txt*     For Vim version 7.3.  Last change: 2013 May 18
+ 
+ 
+ 		  VIM REFERENCE MANUAL	  by Bram Moolenaar et al.
+@@ -48,9 +48,9 @@
+ If you already have a compiled Vim program, check if the |+multi_byte| feature
+ is included.  The |:version| command can be used for this.
+ 
+-If +multi_byte is not included, you should compile Vim with "big" features.
+-You can further tune what features are included.  See the INSTALL files in the
+-source directory.
++If +multi_byte is not included, you should compile Vim with "normal", "big" or
++"huge" features.  You can further tune what features are included.  See the
++INSTALL files in the source directory.
+ 
+ 
+ LOCALE
+@@ -280,7 +280,7 @@
+ when compiled for EBCDIC).
+ 
+ Supported 'encoding' values are:			*encoding-values*
+-1   latin1	8-bit characters (ISO 8859-1)
++1   latin1	8-bit characters (ISO 8859-1, also used for cp1252)
+ 1   iso-8859-n	ISO_8859 variant (n = 2 to 15)
+ 1   koi8-r	Russian
+ 1   koi8-u	Ukrainian
+@@ -336,7 +336,11 @@
+ Examples: >
+ 		:set encoding=8bit-cp1252
+ 		:set encoding=2byte-cp932
+-<
++
++The MS-Windows codepage 1252 is very similar to latin1.  For practical reasons
++the same encoding is used and it's called latin1.  'isprint' can be used to
++display the characters 0x80 - 0xA0 or not.
++
+ Several aliases can be used, they are translated to one of the names above.
+ An incomplete list:
+ 
+@@ -471,7 +475,7 @@
+ 	|charset| converter.  Supported |charset|: ISO-2022-CN, ISO-2022-JP,
+ 	ISO-2022-KR, EUC-CN, EUC-JP, EUC-KR, EUC-TW, UTF-7, UTF-8, ISO-8859
+ 	series, Shift_JIS, Big5 and HZ.  Lv can be found at:
+-	http://www.ff.iij4u.or.jp/~nrt/freeware/lv4495.tar.gz
++	http://www.ff.iij4u.or.jp/~nrt/lv/index.html
+ 
+ 
+ 							*mbyte-conversion*
+@@ -611,7 +615,7 @@
+ 	    charsets, such as JIS X 0208, if this field is 0, code points has
+ 	    the same value as GL, and GR if 1.
+ 
+-For example, in case of a 14 dots font corresponding to JIS X 0208, it is
++For example, in case of a 16 dots font corresponding to JIS X 0208, it is
+ written like:
+     -misc-fixed-medium-r-normal--16-110-100-100-c-160-jisx0208.1990-0
+ 
+@@ -793,8 +797,8 @@
+   number of Hira-gana characters are 76.  So, first, we pre-input text as
+   pronounced in Hira-gana, second, we convert Hira-gana to Kanji or Kata-Kana,
+   if needed.  There are some Kana-Kanji conversion server: jserver
+-  (distributed with Wnn, see below) and canna.  Canna could be found at:
+-  ftp://ftp.nec.co.jp/pub/Canna/ (no longer works).
++  (distributed with Wnn, see below) and canna.  Canna can be found at:
++  http://canna.sourceforge.jp/
+ 
+ There is a good input system: Wnn4.2.  Wnn 4.2 contains,
+     xwnmo (|IM-server|)
+@@ -853,7 +857,7 @@
+ 
+ 
+ USING XIM			*multibyte-input* *E284* *E286* *E287* *E288*
+-				*E285* *E291* *E292* *E290* *E289*
++				*E285* *E289*
+ 
+ Note that Display and Input are independent.  It is possible to see your
+ language even though you have no input method for it.  But when your Display
+@@ -1063,7 +1067,7 @@
+ is mapped to "A" and "b" to "B".  Thus the first item is mapped to the second
+ item.  This is done for each line, until the end of the file.
+ These items are exactly the same as what can be used in a |:lnoremap| command,
+-using "<buffer>" to make the mappings local to the buffer..
++using "<buffer>" to make the mappings local to the buffer.
+ You can check the result with this command: >
+ 	:lmap
+ The two items must be separated by white space.  You cannot include white
+@@ -1081,6 +1085,13 @@
+ used for the start of another character.
+ The "accents" keymap uses this.				*keymap-accents*
+ 
++The first column can also be in |<>| form:
++	<C-c>		Ctrl-C
++	<A-c>		Alt-c
++	<A-C>		Alt-C
++Note that the Alt mappings may not work, depending on your keyboard and
++terminal.
++
+ Although it's possible to have more than one character in the second column,
+ this is unusual.  But you can use various ways to specify the character: >
+ 	A	a		literal character
+@@ -1302,8 +1313,8 @@
+ character.)  An exception is NUL (zero) which is displayed as "<00>".
+ 
+ In the file and buffer the full range of Unicode characters can be used (31
+-bits).  However, displaying only works for 16 bit characters, and only for the
+-characters present in the selected font.
++bits).  However, displaying only works for the characters present in the
++selected font.
+ 
+ Useful commands:
+ - "ga" shows the decimal, hexadecimal and octal value of the character under
+diff -Naur vim73.orig/runtime/doc/message.txt vim73/runtime/doc/message.txt
+--- vim73.orig/runtime/doc/message.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/message.txt	2013-06-07 17:07:09.098982692 +0000
+@@ -1,4 +1,4 @@
+-*message.txt*   For Vim version 7.3.  Last change: 2010 Aug 10
++*message.txt*   For Vim version 7.3.  Last change: 2013 Feb 23
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -27,8 +27,8 @@
+ This is especially useful if you accidentally typed <Space> at the hit-enter
+ prompt.  You are then back at the hit-enter prompt and can then scroll further
+ back.
+-Note: when you stopped the output with "q" at the more prompt only up to that
+-point will be displayed.
++Note: If the output has been stopped with "q" at the more prompt, it will only
++be displayed up to this point.
+ The previous command output is cleared when another command produces output.
+ 
+ If you are using translated messages, the first printed line tells who
+@@ -65,7 +65,7 @@
+ LIST OF MESSAGES
+ 			*E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
+ 			*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
+-			*E323* *E341* *E473* *E570* *E685* >
++			*E323* *E341* *E473* *E570* *E685*  >
+   Add to read buffer
+   makemap: Illegal mode
+   Cannot create BalloonEval with both message and callback
+@@ -481,8 +481,10 @@
+ 							*E339*  >
+   Pattern too long
+ 
+-This only happens on systems with 16 bit ints: The compiled regexp pattern is
++This happens on systems with 16 bit ints: The compiled regexp pattern is
+ longer than about 65000 characters.  Try using a shorter pattern.
++It also happens when the offset of a rule doesn't fit in the space available.
++Try simplifying the pattern.
+ 
+ 							*E45*  >
+   'readonly' option is set (add ! to override)
+@@ -728,7 +730,11 @@
+   Can't open file {filename}
+   Can't read file {filename}
+ 
+-Vim cannot read a temporary file.
++Vim cannot read a temporary file.  Especially on Windows, this can be caused
++by wrong escaping of special characters for cmd.exe; the approach was
++changed with patch 7.3.443.  Try using |shellescape()| for all shell arguments
++given to |system()|, or explicitly add escaping with ^.  Also see
++'shellxquote' and 'shellxescape'.
+ 
+ 							*E464*  >
+   Ambiguous use of user-defined command
+diff -Naur vim73.orig/runtime/doc/mlang.txt vim73/runtime/doc/mlang.txt
+--- vim73.orig/runtime/doc/mlang.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/mlang.txt	2013-06-07 17:07:09.105649340 +0000
+@@ -1,4 +1,4 @@
+-*mlang.txt*     For Vim version 7.3.  Last change: 2010 Jul 20
++*mlang.txt*     For Vim version 7.3.  Last change: 2012 Jan 15
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -59,7 +59,7 @@
+ 			system.  Some systems accept aliases like "en" or
+ 			"en_US", but some only accept the full specification
+ 			like "en_US.ISO_8859-1".  On Unix systems you can use
+-			the this command to see what locales are supported: >
++			this command to see what locales are supported: >
+ 				:!locale -a
+ <			With the "messages" argument the language used for
+ 			messages is set.  This can be different when you want,
+@@ -68,7 +68,7 @@
+ 			With the "ctype" argument the language used for
+ 			character encoding is set.  This affects the libraries
+ 			that Vim was linked with.  It's unusual to set this to
+-			a different value from 'encoding'.  This sets
++			a different value from 'encoding' or "C".  This sets
+ 			$LC_CTYPE.
+ 			With the "time" argument the language used for time
+ 			and date messages is set.  This affects strftime().
+diff -Naur vim73.orig/runtime/doc/motion.txt vim73/runtime/doc/motion.txt
+--- vim73.orig/runtime/doc/motion.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/motion.txt	2013-06-07 17:07:09.138982578 +0000
+@@ -1,4 +1,4 @@
+-*motion.txt*    For Vim version 7.3.  Last change: 2010 May 14
++*motion.txt*    For Vim version 7.3.  Last change: 2013 Mar 07
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -57,7 +57,7 @@
+ 	|>|	>	shift right
+ 	|<|	<	shift left
+ 	|zf|	zf	define a fold
+-	|g@|    g@      call function set with the 'operatorfunc' option
++	|g@|	g@	call function set with the 'operatorfunc' option
+ 
+ If the motion includes a count and the operator also had a count before it,
+ the two counts are multiplied.  For example: "2d3w" deletes six words.
+@@ -104,13 +104,14 @@
+ |Visual-mode|.
+ 
+ You can use a ":" command for a motion.  For example "d:call FindEnd()".
+-But this can't be redone with "." if the command is more than one line.
++But this can't be repeated with "." if the command is more than one line.
+ This can be repeated: >
+ 	d:call search("f")<CR>
+ This cannot be repeated: >
+ 	d:if 1<CR>
+ 	   call search("f")<CR>
+ 	endif<CR>
++Note that when using ":" any motion becomes characterwise exclusive.
+ 
+ 
+ FORCING A MOTION TO BE LINEWISE, CHARACTERWISE OR BLOCKWISE
+@@ -269,11 +270,11 @@
+ 			{char} can be entered like with the |f| command.
+ 
+ 							*;*
+-;			Repeat latest f, t, F or T [count] times.
++;			Repeat latest f, t, F or T [count] times. See |cpo-;|
+ 
+ 							*,*
+ ,			Repeat latest f, t, F or T in opposite direction
+-			[count] times.
++			[count] times. See also |cpo-;|
+ 
+ ==============================================================================
+ 3. Up-down motions					*up-down-motions*
+@@ -326,6 +327,7 @@
+ 			non-blank character |linewise|.  If 'startofline' not
+ 			set, keep the same column.
+ 
++							*:[range]*
+ :[range]		Set the cursor on the last line number in [range].
+ 			[range] can also be just one line number, e.g., ":1"
+ 			or ":'m".
+@@ -344,6 +346,8 @@
+ 			last number in it used as the byte count.  End-of-line
+ 			characters are counted depending on the current
+ 			'fileformat' setting.
++			Also see the |line2byte()| function, and the 'o'
++			option in 'statusline'.
+ 			{not in Vi}
+ 			{not available when compiled without the
+ 			|+byte_offset| feature}
+@@ -511,6 +515,8 @@
+ These commands are {not in Vi}.
+ These commands are not available when the |+textobjects| feature has been
+ disabled at compile time.
++Also see `gn` and `gN`, operating on the last search pattern.
++
+ 							*v_aw* *aw*
+ aw			"a word", select [count] words (see |word|).
+ 			Leading or trailing white space is included, but not
+@@ -687,6 +693,7 @@
+ 	"daw"	delete a word				*daw*
+ 	"diW"	delete inner WORD (see |WORD|)		*diW*
+ 	"daW"	delete a WORD (see |WORD|)		*daW*
++	"dgn"   delete the next search pattern match    *dgn*
+ 	"dd"	delete one line				|dd|
+ 	"dis"	delete inner sentence			*dis*
+ 	"das"	delete a sentence			*das*
+@@ -748,6 +755,13 @@
+ 			to be simulated by multiple commands.  (does not move
+ 			the cursor, this is not a motion command).
+ 
++						*m<* *m>*
++m<  or  m>		Set the |'<| or |'>| mark.  Useful to change what the
++			`gv` command selects.  (does not move the cursor, this
++			is not a motion command).
++			Note that the Visual mode cannot be set, only the
++			start and end position.
++
+ 						*:ma* *:mark* *E191*
+ :[range]ma[rk] {a-zA-Z'}
+ 			Set mark {a-zA-Z'} at last line number in [range],
+@@ -1015,8 +1029,6 @@
+ <Tab>		or					*CTRL-I* *<Tab>*
+ CTRL-I			Go to [count] newer cursor position in jump list
+ 			(not a motion command).
+-			In a |quickfix-window| it takes you to the position of
+-			the error under the cursor.
+ 			{not in Vi}
+ 			{not available without the |+jumplist| feature}
+ 
+@@ -1033,20 +1045,20 @@
+ 
+ For example, after three jump commands you have this jump list:
+ 
+-  jump line  col file/line ~
++  jump line  col file/text ~
+     3	  1    0 some text ~
+     2	 70    0 another line ~
+     1  1154   23 end. ~
+  > ~
+ 
+-The "file/line" column shows the file name, or the text at the jump if it is
++The "file/text" column shows the file name, or the text at the jump if it is
+ in the current file (an indent is removed and a long line is truncated to fit
+ in the window).
+ 
+ You are currently in line 1167.  If you then use the CTRL-O command, the
+ cursor is put in line 1154.  This results in:
+ 
+-  jump line  col file/line ~
++  jump line  col file/text ~
+     2	  1    0 some text ~
+     1	 70    0 another line ~
+  >  0  1154   23 end. ~
+@@ -1076,7 +1088,7 @@
+ After the CTRL-O command that got you into line 1154 you could give another
+ jump command (e.g., "G").  The jump list would then become:
+ 
+-  jump line  col file/line ~
++  jump line  col file/text ~
+     4	  1    0 some text ~
+     3	 70    0 another line ~
+     2  1167    0 foo bar ~
+diff -Naur vim73.orig/runtime/doc/netbeans.txt vim73/runtime/doc/netbeans.txt
+--- vim73.orig/runtime/doc/netbeans.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/netbeans.txt	2013-06-07 17:07:09.158982521 +0000
+@@ -1,4 +1,4 @@
+-*netbeans.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
++*netbeans.txt*  For Vim version 7.3.  Last change: 2012 Jan 26
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Gordon Prieur et al.
+@@ -118,7 +118,8 @@
+ uncommenting a line with "--disable-netbeans" in the Makefile.
+ 
+ Currently the NetBeans interface is supported by Vim running in a terminal and
+-by GVim when it is run with one of the following GUIs: GTK, GNOME, and Motif.
++by GVim when it is run with one of the following GUIs: GTK, GNOME, Windows,
++Athena and Motif.
+ 
+ If Motif support is required the user must supply XPM libraries.  See
+ |workshop-xpm| for details on obtaining the latest version of XPM.
+@@ -262,6 +263,12 @@
+ plain UTF-8 text this protocol could also be used with any other communication
+ mechanism.
+ 
++Netbeans messages are processed when Vim is idle, waiting for user input.
++When Vim is run in non-interactive mode, for example when running an automated
++test case that sources a Vim script, the idle loop may not be called often
++enough. In that case, insert |:sleep| commands in the Vim script. The |:sleep|
++command does invoke Netbeans messages processing.
++
+ 6.1 Kinds of messages		|nb-messages|
+ 6.2 Terms			|nb-terms|
+ 6.3 Commands			|nb-commands|
+@@ -819,7 +826,7 @@
+ ==============================================================================
+ 7. NetBeans commands					*netbeans-commands*
+ 
+-							*:nbstart* *E511*
++							*:nbstart* *E511* *E838*
+ :nbs[tart] {connection}	Start a new Netbeans session with {connection} as the
+ 			socket connection parameters.  The format of
+ 			{connection} is described in |netbeans-parameters|.
+@@ -832,11 +839,16 @@
+ 			signs.
+ 
+ 							*:nbkey*
+-:nb[key] {key}		Pass the {key} to the Vim Controller for processing
+-
+-When a hot-key has been installed with the specialKeys command, this command
+-can be used to generate a hotkey messages to the Vim Controller. The events
+-newDotAndMark, keyCommand and keyAtPos are generated (in this order).
++:nb[key] {key}		Pass the {key} to the Vim Controller for processing.
++			When a hot-key has been installed with the specialKeys
++			command, this command can be used to generate a hotkey
++			message to the Vim Controller.
++			This command can also be used to pass any text to the
++			Vim  Controller. It is used by Pyclewn, for example,
++			to build the complete set of gdb commands as Vim user
++			commands.
++			The events newDotAndMark, keyCommand and keyAtPos are
++			generated (in this order).
+ 
+ 
+ ==============================================================================
+diff -Naur vim73.orig/runtime/doc/options.txt vim73/runtime/doc/options.txt
+--- vim73.orig/runtime/doc/options.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/options.txt	2013-06-07 17:07:09.192315759 +0000
+@@ -1,4 +1,4 @@
+-*options.txt*	For Vim version 7.3.  Last change: 2010 Aug 15
++*options.txt*	For Vim version 7.3.  Last change: 2013 Jun 04
+ 
+ 
+ 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+@@ -150,6 +150,18 @@
+ (the ^[ is a real <Esc> here, use CTRL-V <Esc> to enter it)
+ The advantage over a mapping is that it works in all situations.
+ 
++You can define any key codes, e.g.: >
++	:set t_xy=^[foo;
++There is no warning for using a name that isn't recognized.  You can map these
++codes as you like: >
++	:map <t_xy> something
++<								*E846*
++When a key code is not set, it's like it does not exist.  Trying to get its
++value will result in an error: >
++	:set t_kb=
++	:set t_kb
++	E846: Key code not set: t_kb
++
+ The t_xx options cannot be set from a |modeline| or in the |sandbox|, for
+ security reasons.
+ 
+@@ -265,8 +277,10 @@
+ value, ":setlocal list" only changes the local value and ":e two" gets the
+ global value.  Note that if you do this next: >
+ 	:e one
+-You will not get back the 'list' value as it was the last time you edited
+-"one".  The options local to a window are not remembered for each buffer.
++You will get back the 'list' value as it was the last time you edited "one".
++The options local to a window are remembered for each buffer.  This also
++happens when the buffer is not loaded, but they are lost when the buffer is
++wiped out |:bwipe|.
+ 
+ 							*:setl* *:setlocal*
+ :setl[ocal] ...		Like ":set" but set only the value local to the
+@@ -289,9 +303,8 @@
+ 			copying the value.
+ 			{not in Vi}
+ 
+-:se[t] {option}<	Set the local value of {option} to its global value by
+-			making it empty.  Only makes sense for |global-local|
+-			options.
++:se[t] {option}<	For |global-local| options: Remove the local value of
++			{option}, so that the global value will be used.
+ 			{not in Vi}
+ 
+ 							*:setg* *:setglobal*
+@@ -361,6 +374,7 @@
+ 			settings and syntax files to be loaded.
+ 			{not in Vi}
+ 
++				*option-window* *optwin*
+ :bro[wse] se[t]			*:set-browse* *:browse-set* *:opt* *:options*
+ :opt[ions]		Open a window for viewing and setting all options.
+ 			Options are grouped by function.
+@@ -388,6 +402,9 @@
+ contain non-id characters then.  Note that if you want to use this for the
+ "gf" command, you need to add the '{' and '}' characters to 'isfname'.
+ 
++On MS-Windows, if $HOME is not defined as an environment variable, then
++at runtime Vim will set it to the expansion of $HOMEDRIVE$HOMEPATH.
++
+ NOTE: expanding environment variables and "~/" is only done with the ":set"
+ command, not when assigning a value to an option with ":let".
+ 
+@@ -684,6 +701,10 @@
+ 	when the system locale is set to one of CJK locales.  See Unicode
+ 	Standard Annex #11 (http://www.unicode.org/reports/tr11).
+ 
++	Vim may set this option automatically at startup time when Vim is
++	compiled with the |+termresponse| feature and if |t_u7| is set to the
++	escape sequence to request cursor position report.
++
+ 			*'antialias'* *'anti'* *'noantialias'* *'noanti'*
+ 'antialias' 'anti'	boolean (default: off)
+ 			global
+@@ -729,7 +750,7 @@
+ 	- Reset the 'rightleft' option.
+ 	- Disable the use of 'keymap' (without changing its value).
+ 	Note that 'arabicshape' and 'delcombine' are not reset (it is a global
+-	option.
++	option).
+ 	Also see |arabic.txt|.
+ 
+ 					*'arabicshape'* *'arshape'*
+@@ -741,7 +762,7 @@
+ 			feature}
+ 	When on and 'termbidi' is off, the required visual character
+ 	corrections that need to take place for displaying the Arabic language
+-	take affect.  Shaping, in essence, gets enabled; the term is a broad
++	take effect.  Shaping, in essence, gets enabled; the term is a broad
+ 	one which encompasses:
+ 	  a) the changing/morphing of characters based on their location
+ 	     within a word (initial, medial, final and stand-alone).
+@@ -802,7 +823,7 @@
+ 	been set.
+ 
+ 							*'background'* *'bg'*
+-'background' 'bg'	string	(default "dark" or "light")
++'background' 'bg'	string	(default "dark" or "light", see below)
+ 			global
+ 			{not in Vi}
+ 	When set to "dark", Vim will try to use colors that look good on a
+@@ -836,6 +857,12 @@
+ 	color).  To get around this, force the GUI window to be opened by
+ 	putting a ":gui" command in the .gvimrc file, before where the value
+ 	of 'background' is used (e.g., before ":syntax on").
++
++	For MS-DOS, Windows and OS/2 the default is "dark".
++	For other systems "dark" is used when 'term' is "linux",
++	"screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark
++	background.  Otherwise the default is "light".
++
+ 	Normally this option would be set in the .vimrc file.  Possibly
+ 	depending on the terminal name.  Example: >
+ 		:if &term == "pcterm"
+@@ -965,7 +992,7 @@
+ 	- The backup file will be created in the first directory in the list
+ 	  where this is possible.  The directory must exist, Vim will not
+ 	  create it for you.
+-	- Empty means that no backup file will be created ('patchmode' is
++	- Empty means that no backup file will be created ( 'patchmode' is
+ 	  impossible!).  Writing may fail because of this.
+ 	- A directory "." means to put the backup file in the same directory
+ 	  as the edited file.
+@@ -1026,6 +1053,11 @@
+ 	When $TMPDIR, $TMP or $TEMP is not defined, it is not used for the
+ 	default value.  "/tmp/*" is only used for Unix.
+ 
++	WARNING: Not having a backup file means that when Vim fails to write
++	your buffer correctly and then, for whatever reason, Vim exits, you
++	lose both the original file and what you were writing.  Only disable
++	backups if you don't care about losing the file.
++
+ 	Note that environment variables are not expanded.  If you want to use
+ 	$HOME you must expand it explicitly, e.g.: >
+ 		:let backupskip = escape(expand('$HOME'), '\') . '/tmp/*'
+@@ -1081,8 +1113,8 @@
+ 	Vim does not try to send a message to an external debugger (Netbeans
+ 	or Sun Workshop).
+ 
+-	The expression may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	The expression will be evaluated in the |sandbox| when set from a
++	modeline, see |sandbox-option|.
+ 
+ 	It is not allowed to change text or jump to another window while
+ 	evaluating 'balloonexpr' |textlock|.
+@@ -1198,7 +1230,8 @@
+ 			|:bwipeout|
+ 
+ 	CAREFUL: when "unload", "delete" or "wipe" is used changes in a buffer
+-	are lost without a warning.
++	are lost without a warning.  Also, these values may break autocommands
++	that switch between buffers temporarily.
+ 	This option is used together with 'buftype' and 'swapfile' to specify
+ 	special kinds of buffers.   See |special-buffers|.
+ 
+@@ -1425,6 +1458,7 @@
+ 	This option is a list of comma separated names.
+ 	These names are recognized:
+ 
++						*clipboard-unnamed*
+ 	unnamed		When included, Vim will use the clipboard register '*'
+ 			for all yank, delete, change and put operations which
+ 			would normally go to the unnamed register.  When a
+@@ -1434,6 +1468,20 @@
+ 			explicitly accessed using the "* notation.  Also see
+ 			|gui-clipboard|.
+ 
++						*clipboard-unnamedplus*
++	unnamedplus	A variant of the "unnamed" flag which uses the
++			clipboard register '+' (|quoteplus|) instead of
++			register '*' for all yank, delete, change and put
++			operations which would normally go to the unnamed
++			register.  When "unnamed" is also included to the
++			option, yank operations (but not delete, change or
++			put) will additionally copy the text into register
++			'*'.
++			Only available with the |+X11| feature.
++			Availability can be checked with: >
++				if has('unnamedplus')
++<
++						*clipboard-autoselect*
+ 	autoselect	Works like the 'a' flag in 'guioptions': If present,
+ 			then whenever Visual mode is started, or the Visual
+ 			area extended, Vim tries to become the owner of the
+@@ -1445,9 +1493,16 @@
+ 			"autoselect" flag is used.
+ 			Also applies to the modeless selection.
+ 
++						*clipboard-autoselectplus*
++	autoselectplus  Like "autoselect" but using the + register instead of
++			the * register.  Compare to the 'P' flag in
++			'guioptions'.
++
++						*clipboard-autoselectml*
+ 	autoselectml	Like "autoselect", but for the modeless selection
+ 			only.  Compare to the 'A' flag in 'guioptions'.
+ 
++						*clipboard-html*
+ 	html		When the clipboard contains HTML, use this when
+ 			pasting.  When putting text on the clipboard, mark it
+ 			as HTML.  This works to copy rendered HTML from
+@@ -1458,6 +1513,7 @@
+ 			Only supported for GTK version 2 and later.
+ 			Only available with the |+multi_byte| feature.
+ 
++						*clipboard-exclude*
+ 	exclude:{pattern}
+ 			Defines a pattern that is matched against the name of
+ 			the terminal 'term'.  If there is a match, no
+@@ -1496,6 +1552,25 @@
+ 			feature}
+ 	Number of screen lines to use for the command-line window. |cmdwin|
+ 
++						*'colorcolumn'* *'cc'*
++'colorcolumn' 'cc'	string	(default "")
++			local to window
++			{not in Vi}
++			{not available when compiled without the |+syntax|
++			feature}
++	'colorcolumn' is a comma separated list of screen columns that are
++	highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
++	text.  Will make screen redrawing slower.
++	The screen column can be an absolute number, or a number preceded with
++	'+' or '-', which is added to or subtracted from 'textwidth'. >
++
++		:set cc=+1  " highlight column after 'textwidth'
++		:set cc=+1,+2,+3  " highlight three columns after 'textwidth'
++		:hi ColorColumn ctermbg=lightgrey guibg=lightgrey
++<
++	When 'textwidth' is zero then the items with '-' and '+' are not used.
++	A maximum of 256 columns are highlighted.
++
+ 						*'columns'* *'co'* *E594*
+ 'columns' 'co'		number	(default 80 or terminal width)
+ 			global
+@@ -1634,7 +1709,7 @@
+ 	when CTRL-P or CTRL-N are used.  It is also used for whole-line
+ 	completion |i_CTRL-X_CTRL-L|.  It indicates the type of completion
+ 	and the places to scan.  It is a comma separated list of flags:
+-	.	scan the current buffer ('wrapscan' is ignored)
++	.	scan the current buffer ( 'wrapscan' is ignored)
+ 	w	scan buffers from other windows
+ 	b	scan other loaded buffers that are in the buffer list
+ 	u	scan the unloaded buffers that are in the buffer list
+@@ -1680,7 +1755,8 @@
+ 	with CTRL-X CTRL-U. |i_CTRL-X_CTRL-U|
+ 	See |complete-functions| for an explanation of how the function is
+ 	invoked and what it should return.
+-
++	This option cannot be set from a |modeline| or in the |sandbox|, for
++	security reasons.
+ 
+ 						*'completeopt'* *'cot'*
+ 'completeopt' 'cot'	string	(default: "menu,preview")
+@@ -2069,6 +2145,12 @@
+ 								*cpo->*
+ 		>	When appending to a register, put a line break before
+ 			the appended text.
++								*cpo-;*
++		;	When using |,| or |;| to repeat the last |t| search
++			and the cursor is right in front of the searched
++			character, the cursor won't move. When not included,
++			the cursor would skip over it and jump to the
++			following occurrence.
+ 
+ 	POSIX flags.  These are not included in the Vi default value, except
+ 	when $VIM_POSIX was set on startup. |posix|
+@@ -2161,6 +2243,16 @@
+ 	Specifies whether to use quickfix window to show cscope results.
+ 	See |cscopequickfix|.
+ 
++						*'cscoperelative'* *'csre'*
++'cscoperelative' 'csre' boolean (default off)
++			global
++			{not available when compiled without the |+cscope|
++			feature}
++			{not in Vi}
++	In the absence of a prefix (-P) for cscope. setting this option enables
++	to use the basename of cscope.out path as the prefix.
++	See |cscoperelative|.
++
+ 				*'cscopetag'* *'cst'* *'nocscopetag'* *'nocst'*
+ 'cscopetag' 'cst'	boolean (default off)
+ 			global
+@@ -2782,7 +2874,7 @@
+ 	See |file-formats| and |file-read|.
+ 	For the character encoding of the file see 'fileencoding'.
+ 	When 'binary' is set, the value of 'fileformat' is ignored, file I/O
+-	works like it was set to "unix'.
++	works like it was set to "unix".
+ 	This option is set automatically when starting to edit a file and
+ 	'fileformats' is not empty and 'binary' is off.
+ 	When this option is set, after starting to edit a file, the 'modified'
+@@ -2817,13 +2909,14 @@
+ 	  2. If a <NL> is found and 'fileformats' includes "unix", 'fileformat'
+ 	     is set to "unix".  Note that when a <NL> is found without a
+ 	     preceding <CR>, "unix" is preferred over "dos".
+-	  3. If 'fileformats' includes "mac", 'fileformat' is set to "mac".
+-	     This means that "mac" is only chosen when "unix" is not present,
+-	     or when no <NL> is found in the file, and when "dos" is not
+-	     present, or no <CR><NL> is present in the file.
+-	     Also if "unix" was first chosen, but the first <CR> is before
+-	     the first <NL> and there appears to be more <CR>'s than <NL>'s in
+-	     the file, then 'fileformat' is set to "mac".
++	  3. If 'fileformat' has not yet been set, and if 'fileformats'
++	     includes "mac", 'fileformat' is set to "mac".
++	     This means that "mac" is only chosen when:
++	      "unix" is not present or no <NL> is found in the file, and
++	      "dos" is not present or no <CR><NL> is found in the file.
++	     Except: if "unix" was chosen, but there is a <CR> before
++	     the first <NL>, and there appear to be more <CR>s than <NL>s in
++	     the first few lines, "mac" is used.
+ 	  4. If 'fileformat' is still not set, the first name from
+ 	     'fileformats' is used.
+ 	  When reading a file into an existing buffer, the same is done, but
+@@ -2831,6 +2924,9 @@
+ 	  file only, the option is not changed.
+ 	When 'binary' is set, the value of 'fileformats' is not used.
+ 
++	Note that when Vim starts up with an empty buffer this option is not
++	used.  Set 'fileformat' in your .vimrc instead.
++
+ 	For systems with a Dos-like <EOL> (<CR><NL>), when reading files that
+ 	are ":source"ed and for vimrc files, automatic <EOL> detection may be
+ 	done:
+@@ -2847,6 +2943,14 @@
+ 	NOTE: This option is set to the Vi default value when 'compatible' is
+ 	set and to the Vim default value when 'compatible' is reset.
+ 
++		*'fileignorecase'* *'fic'* *'nofileignorecase'* *'nofic'*
++'fileignorecase' 'fic'	boolean	(default on for systems where case in file
++				 names is normally ignored)
++			global
++			{not in Vi}
++	When set case is ignored when using file names and directories.
++	See 'wildignorecase' for only ignoring case when doing completion.
++
+ 					*'filetype'* *'ft'*
+ 'filetype' 'ft'		string (default: "")
+ 			local to buffer
+@@ -2871,8 +2975,6 @@
+ 	This will use the "c" filetype first, then the "doxygen" filetype.
+ 	This works both for filetype plugins and for syntax files.  More than
+ 	one dot may appear.
+-	Do not confuse this option with 'osfiletype', which is for the file
+-	type that is actually stored with the file.
+ 	This option is not copied to another buffer, independent of the 's' or
+ 	'S' flag in 'cpoptions'.
+ 	Only normal file name characters can be used, "/\*?[|<>" are illegal.
+@@ -2966,8 +3068,8 @@
+ 	The expression used for when 'foldmethod' is "expr".  It is evaluated
+ 	for each line to obtain its fold level.  See |fold-expr|.
+ 
+-	The expression may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	The expression will be evaluated in the |sandbox| if set from a
++	modeline, see |sandbox-option|.
+ 	This option can't be set from a |modeline| when the 'diff' option is
+ 	on.
+ 
+@@ -3044,9 +3146,11 @@
+ 			{not in Vi}
+ 			{not available when compiled without the |+folding|
+ 			feature}
+-	Sets the minimum number of screen lines for a fold to be displayed
+-	closed.  Also for manually closed folds.
+-	Note that this only has an effect of what is displayed.  After using
++	Sets the number of screen lines above which a fold can be displayed
++	closed.  Also for manually closed folds.  With the default value of
++	one a fold can only be closed if it takes up two or more screen lines.
++	Set to zero to be able to close folds of just one screen line.
++	Note that this only has an effect on what is displayed.  After using
+ 	"zc" to close a fold, which is displayed open because it's smaller
+ 	than 'foldminlines', a following "zc" may close a containing fold.
+ 
+@@ -3070,6 +3174,10 @@
+ 	Specifies for which type of commands folds will be opened, if the
+ 	command moves the cursor into a closed fold.  It is a comma separated
+ 	list of items.
++	NOTE: When the command is part of a mapping this option is not used.
++	Add the |zv| command to the mapping to get the same effect.
++	(rationale: the mapping may want to control opening folds itself)
++
+ 		item		commands ~
+ 		all		any
+ 		block		"(", "{", "[[", "[{", etc.
+@@ -3084,8 +3192,6 @@
+ 				Also for |[s| and |]s|.
+ 		tag		jumping to a tag: ":ta", CTRL-T, etc.
+ 		undo		undo or redo: "u" and CTRL-R
+-	When the command is part of a mapping this option is not used.  Add
+-	the |zv| command to the mapping to get the same effect.
+ 	When a movement command is used for an operator (e.g., "dl" or "y%")
+ 	this option is not used.  This means the operator will include the
+ 	whole closed fold.
+@@ -3105,8 +3211,8 @@
+ 	An expression which is used to specify the text displayed for a closed
+ 	fold.  See |fold-foldtext|.
+ 
+-	The expression may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	The expression will be evaluated in the |sandbox| if set from a
++	modeline, see |sandbox-option|.
+ 
+ 	It is not allowed to change text or jump to another window while
+ 	evaluating 'foldtext' |textlock|.
+@@ -3151,8 +3257,8 @@
+ 	format function will be used |C-indenting|.
+ 	Environment variables are expanded |:set_env|.  See |option-backslash|
+ 	about including spaces and backslashes.
+-	The expression may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	This option cannot be set from a |modeline| or in the |sandbox|, for
++	security reasons.
+ 
+ 						*'formatexpr'* *'fex'*
+ 'formatexpr' 'fex'	string (default "")
+@@ -3185,8 +3291,9 @@
+ 	When the expression evaluates to non-zero Vim will fall back to using
+ 	the internal format mechanism.
+ 
+-	The expression may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	The expression will be evaluated in the |sandbox| when set from a
++	modeline, see |sandbox-option|.  That stops the option from working,
++	since changing the buffer text is not allowed.
+ 
+ 						*'fsync'* *'fs'*
+ 'fsync' 'fs'		boolean	(default on)
+@@ -3338,7 +3445,7 @@
+ 	    :highlight Cursor gui=NONE guifg=bg guibg=fg
+ <
+ 					*'guifont'* *'gfn'*
+-						   *E235* *E596* *E610* *E611*
++						   *E235* *E596*
+ 'guifont' 'gfn'		string	(default "")
+ 			global
+ 			{not in Vi}
+@@ -3470,6 +3577,10 @@
+ 	to set 'guifontwide' at all unless you want to override the choice
+ 	made by Pango/Xft.
+ 
++	Windows +multibyte only:		*guifontwide_win_mbyte*
++
++	If set and valid, 'guifontwide' is used for IME instead of 'guifont'.
++
+ 						*'guiheadroom'* *'ghr'*
+ 'guiheadroom' 'ghr'	number	(default 50)
+ 			global
+@@ -3483,8 +3594,8 @@
+ 	screen.
+ 
+ 						*'guioptions'* *'go'*
+-'guioptions' 'go'	string	(default "gmrLtT"   (MS-Windows),
+-					 "agimrLtT" (GTK, Motif and Athena))
++'guioptions' 'go'	string	(default "egmrLtT"   (MS-Windows),
++					 "aegimrLtT" (GTK, Motif and Athena))
+ 			global
+ 			{not in Vi}
+ 			{only available when compiled with GUI enabled}
+@@ -3510,6 +3621,9 @@
+ 		windowing system's global selection unless explicitly told to
+ 		by a yank or delete operation for the "* register.
+ 		The same applies to the modeless selection.
++								*'go-P'*
++	  'P'	Like autoselect but using the "+ register instead of the "*
++	  	register.
+ 								*'go-A'*
+ 	  'A'	Autoselect for the modeless selection.  Like 'a', but only
+ 		applies to the modeless selection.
+@@ -3698,9 +3812,10 @@
+ 'highlight' 'hl'	string	(default (as a single string):
+ 				     "8:SpecialKey,@:NonText,d:Directory,
+ 				     e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,
+-				     M:ModeMsg,n:LineNr,r:Question,
+-				     s:StatusLine,S:StatusLineNC,c:VertSplit,
+-				     t:Title,v:Visual,w:WarningMsg,W:WildMenu,
++				     M:ModeMsg,n:LineNr,N:CursorLineNr,
++				     r:Question,s:StatusLine,S:StatusLineNC,
++				     c:VertSplit, t:Title,v:Visual,
++				     w:WarningMsg,W:WildMenu,
+ 				     f:Folded,F:FoldColumn,A:DiffAdd,
+ 				     C:DiffChange,D:DiffDelete,T:DiffText,
+ 				     >:SignColumn,B:SpellBad,P:SpellCap,
+@@ -3726,6 +3841,8 @@
+ 	|hl-ModeMsg|	 M  Mode (e.g., "-- INSERT --")
+ 	|hl-LineNr|	 n  line number for ":number" and ":#" commands, and
+ 			    when 'number' or 'relativenumber' option is set.
++	|hl-CursorLineNr|  N like n for when 'cursorline' or 'relativenumber' is
++			    set.
+ 	|hl-Question|	 r  |hit-enter| prompt and yes/no questions
+ 	|hl-StatusLine|	 s  status line of current window |status-line|
+ 	|hl-StatusLineNC| S  status lines of not-current windows
+@@ -3787,14 +3904,16 @@
+ 	are not applied.
+ 	See also: 'incsearch' and |:match|.
+ 	When you get bored looking at the highlighted matches, you can turn it
+-	off with |:nohlsearch|.  As soon as you use a search command, the
+-	highlighting comes back.
++	off with |:nohlsearch|.  This does not change the option value, as
++	soon as you use a search command, the highlighting comes back.
+ 	'redrawtime' specifies the maximum time spent on finding matches.
+ 	When the search pattern can match an end-of-line, Vim will try to
+ 	highlight all of the matched text.  However, this depends on where the
+ 	search starts.  This will be the first line in the window or the first
+ 	line below a closed fold.  A match in a previous line which is not
+ 	drawn may not continue in a newly drawn line.
++	You can specify whether the highlight status is restored on startup
++	with the 'h' flag in 'viminfo' |viminfo-h|.
+ 	NOTE: This option is reset when 'compatible' is set.
+ 
+ 						*'history'* *'hi'*
+@@ -4003,8 +4122,8 @@
+ 	found.  Allows doing "gf" on the name after an 'include' statement.
+ 	Also used for |<cfile>|.
+ 
+-	The expression may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	The expression will be evaluated in the |sandbox| when set from a
++	modeline, see |sandbox-option|.
+ 
+ 	It is not allowed to change text or jump to another window while
+ 	evaluating 'includeexpr' |textlock|.
+@@ -4047,7 +4166,8 @@
+ 	It is used when a new line is created, for the |=| operator and
+ 	in Insert mode as specified with the 'indentkeys' option.
+ 	When this option is not empty, it overrules the 'cindent' and
+-	'smartindent' indenting.
++	'smartindent' indenting.  When 'lisp' is set, this option is
++	overridden by the Lisp indentation algorithm.
+ 	When 'paste' is set this option is not used for indenting.
+ 	The expression is evaluated with |v:lnum| set to the line number for
+ 	which the indent is to be computed.  The cursor is also in this line
+@@ -4067,8 +4187,8 @@
+ 	See |indent-expression|.
+ 	NOTE: This option is made empty when 'compatible' is set.
+ 
+-	The expression may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	The expression will be evaluated in the |sandbox| when set from a
++	modeline, see |sandbox-option|.
+ 
+ 	It is not allowed to change text or jump to another window while
+ 	evaluating 'indentexpr' |textlock|.
+@@ -4270,6 +4390,8 @@
+ 	"echo &key".  This is to avoid showing it to someone who shouldn't
+ 	know.  It also means you cannot see it yourself once you have set it,
+ 	be careful not to make a typing error!
++	You can use "&key" in an expression to detect whether encryption is
++	enabled.  When 'key' is set it returns "*****" (five stars).
+ 
+ 					*'keymap'* *'kmp'* *E544*
+ 'keymap' 'kmp'		string	(default "")
+@@ -4495,24 +4617,31 @@
+ 			{not in Vi}
+ 	Strings to use in 'list' mode and for the |:list| command.  It is a
+ 	comma separated list of string settings.
++	  						*lcs-eol*
+ 	  eol:c		Character to show at the end of each line.  When
+ 			omitted, there is no extra character at the end of the
+ 			line.
++	  						*lcs-tab*
+ 	  tab:xy	Two characters to be used to show a tab.  The first
+ 			char is used once.  The second char is repeated to
+ 			fill the space that the tab normally occupies.
+ 			"tab:>-" will show a tab that takes four spaces as
+ 			">---".  When omitted, a tab is show as ^I.
++	  						*lcs-trail*
+ 	  trail:c	Character to show for trailing spaces.  When omitted,
+ 			trailing spaces are blank.
++	  						*lcs-extends*
+ 	  extends:c	Character to show in the last column, when 'wrap' is
+ 			off and the line continues beyond the right of the
+ 			screen.
++	  						*lcs-precedes*
+ 	  precedes:c	Character to show in the first column, when 'wrap'
+ 			is off and there is text preceding the character
+ 			visible in the first column.
++	  						*lcs-conceal*
+ 	  conceal:c	Character to show in place of concealed text, when
+ 			'conceallevel' is set to 1.
++	  						*lcs-nbsp*
+ 	  nbsp:c	Character to show for a non-breakable space (character
+ 			0xA0, 160).  Left blank when omitted.
+ 
+@@ -4601,32 +4730,15 @@
+ <	This option cannot be set from a |modeline| or in the |sandbox|, for
+ 	security reasons.
+ 
+-						*'colorcolumn'* *'cc'*
+-'colorcolumn' 'cc'	string	(default "")
+-			local to window
+-			{not in Vi}
+-			{not available when compiled without the |+syntax|
+-			feature}
+-	'colorcolumn' is a comma separated list of screen columns that are
+-	highlighted with ColorColumn |hl-ColorColumn|.  Useful to align
+-	text.  Will make screen redrawing slower.
+-	The screen column can be an absolute number, or a number preceded with
+-	'+' or '-', which is added to or subtracted from 'textwidth'. >
+-
+-		:set cc=+1  " highlight column after 'textwidth'
+-		:set cc=+1,+2,+3  " highlight three columns after 'textwidth'
+-		:hi ColorColumn ctermbg=lightgrey guibg=lightgrey
+-<
+-	When 'textwidth' is zero then the items with '-' and '+' are not used.
+-	A maximum of 256 columns are highlighted.
+-
+ 						*'matchpairs'* *'mps'*
+ 'matchpairs' 'mps'	string	(default "(:),{:},[:]")
+ 			local to buffer
+ 			{not in Vi}
+ 	Characters that form pairs.  The |%| command jumps from one to the
+-	other.  Currently only single byte character pairs are allowed, and
+-	they must be different.  The characters must be separated by a colon.
++	other.
++	Only character pairs are allowed that are different, thus you cannot
++	jump between two double quotes.
++	The characters must be separated by a colon.
+ 	The pairs must be separated by a comma.  Example for including '<' and
+ 	'>' (HTML): >
+ 		:set mps+=<:>
+@@ -4806,6 +4918,10 @@
+ 	   written.  A ":set nomodified" command also resets the original
+ 	   values to the current values and the 'modified' option will be
+ 	   reset.
++	This option is not set when a change is made to the buffer as the
++	result of a BufNewFile, BufRead/BufReadPost, BufWritePost,
++	FileAppendPost or VimLeave autocommand event.  See |gzip-example| for
++	an explanation.
+ 	When 'buftype' is "nowrite" or "nofile" this option may be set, but
+ 	will be ignored.
+ 
+@@ -4994,7 +5110,7 @@
+ 	respectively; see |CTRL-A| for more info on these commands.
+ 	alpha	If included, single alphabetical characters will be
+ 		incremented or decremented.  This is useful for a list with a
+-		letter index a), b), etc.			*octal-number*
++		letter index a), b), etc.	  	*octal-nrformats*
+ 	octal	If included, numbers that start with a zero will be considered
+ 		to be octal.  Example: Using CTRL-A on "007" results in "010".
+ 	hex	If included, numbers starting with "0x" or "0X" will be
+@@ -5014,8 +5130,20 @@
+ 	number.
+ 	When a long, wrapped line doesn't start with the first character, '-'
+ 	characters are put before the number.
+-	See |hl-LineNr| for the highlighting used for the number.
+-	When setting this option, 'relativenumber' is reset.
++	See |hl-LineNr|  and |hl-CursorLineNr| for the highlighting used for
++	the number.
++						*number_relativenumber*
++	The 'relativenumber' option changes the displayed number to be
++	relative to the cursor.  Together with 'number' there are these
++	four combinations (cursor in line 3):
++
++              	'nonu'          'nu'            'nonu'          'nu'
++		'nornu'         'nornu'         'rnu'           'rnu'
++
++	    |apple          |  1 apple      |  2 apple      |  2 apple
++	    |pear           |  2 pear       |  1 pear       |  1 pear
++	    |nobody         |  3 nobody     |  0 nobody     |3   nobody
++	    |there          |  4 there      |  1 there      |  1 there
+ 
+ 						*'numberwidth'* *'nuw'*
+ 'numberwidth' 'nuw'	number	(Vim default: 4  Vi default: 8)
+@@ -5047,6 +5175,8 @@
+ 	invoked and what it should return.
+ 	This option is usually set by a filetype plugin:
+ 	|:filetype-plugin-on|
++	This option cannot be set from a |modeline| or in the |sandbox|, for
++	security reasons.
+ 
+ 
+ 			    *'opendevice'* *'odev'* *'noopendevice'* *'noodev'*
+@@ -5072,20 +5202,12 @@
+ 	security reasons.
+ 
+ 
+-					*'osfiletype'* *'oft'* *E366*
+-'osfiletype' 'oft'	string (RISC-OS default: "Text",
+-				others default: "")
++					*'osfiletype'* *'oft'*
++'osfiletype' 'oft'	string (default: "")
+ 			local to buffer
+ 			{not in Vi}
+-			{only available when compiled with the |+osfiletype|
+-			feature}
+-	Some operating systems store extra information about files besides
+-	name, datestamp and permissions.  This option contains the extra
+-	information, the nature of which will vary between systems.
+-	The value of this option is usually set when the file is loaded, and
+-	is used to set the operating system file type when file is written.
+-	It can affect the pattern matching of the automatic commands.
+-	|autocmd-osfiletypes|
++	This option was supported on RISC OS, which has been removed.
++
+ 
+ 						*'paragraphs'* *'para'*
+ 'paragraphs' 'para'	string	(default "IPLPPPQPP TPHPLIPpLpItpplpipbp")
+@@ -5190,7 +5312,7 @@
+ 	recognized as a compressed file.
+ 	Only normal file name characters can be used, "/\*?[|<>" are illegal.
+ 
+-					*'path'* *'pa'* *E343* *E345* *E347*
++				*'path'* *'pa'* *E343* *E345* *E347* *E854*
+ 'path' 'pa'		string	(default on Unix: ".,/usr/include,,"
+ 				   on OS/2:	  ".,/emx/include,,"
+ 				   other systems: ".,,")
+@@ -5405,6 +5527,19 @@
+ 	matches will be highlighted.  This is used to avoid that Vim hangs
+ 	when using a very complicated pattern.
+ 
++						*'regexpengine'* *'re'*
++'regexpengine' 're'	number	(default 0)
++			global
++			{not in Vi}
++	This selects the default regexp engine. |two-engines|
++	The possible values are:
++		0	automatic selection
++		1	old engine
++		2	NFA engine
++	Note that when using the NFA engine and the pattern contains something
++	that is not supported the pattern will not match.  This is only useful
++	for debugging the regexp engine.
++
+ 		*'relativenumber'* *'rnu'* *'norelativenumber'* *'nornu'*
+ 'relativenumber' 'rnu'	boolean	(default off)
+ 			local to window
+@@ -5421,8 +5556,12 @@
+ 	number.
+ 	When a long, wrapped line doesn't start with the first character, '-'
+ 	characters are put before the number.
+-	See |hl-LineNr| for the highlighting used for the number.
+-	When setting this option, 'number' is reset.
++	See |hl-LineNr|  and |hl-CursorLineNr| for the highlighting used for
++	the number.
++	
++	The number in front of the cursor line also depends on the value of
++	'number', see |number_relativenumber| for all combinations of the two
++	options.
+ 
+ 						*'remap'* *'noremap'*
+ 'remap'			boolean	(default on)
+@@ -5843,16 +5982,20 @@
+ 	security reasons.
+ 
+ 						*'shellcmdflag'* *'shcf'*
+-'shellcmdflag' 'shcf'	string	(default: "-c", MS-DOS and Win32, when 'shell'
+-					does not contain "sh" somewhere: "/c")
++'shellcmdflag' 'shcf'	string	(default: "-c";
++				 MS-DOS and Win32, when 'shell' does not
++				 contain "sh" somewhere: "/c")
+ 			global
+ 			{not in Vi}
+ 	Flag passed to the shell to execute "!" and ":!" commands; e.g.,
+ 	"bash.exe -c ls" or "command.com /c dir".  For the MS-DOS-like
+ 	systems, the default is set according to the value of 'shell', to
+ 	reduce the need to set this option by the user.  It's not used for
+-	OS/2 (EMX figures this out itself).  See |option-backslash| about
+-	including spaces and backslashes.  See |dos-shell|.
++	OS/2 (EMX figures this out itself).
++	On Unix it can have more than one flag.  Each white space separated
++	part is passed as an argument to the shell command.
++	See |option-backslash| about including spaces and backslashes.
++	Also see |dos-shell| for MS-DOS and MS-Windows.
+ 	This option cannot be set from a |modeline| or in the |sandbox|, for
+ 	security reasons.
+ 
+@@ -5873,9 +6016,10 @@
+ 	For Unix the default it "| tee".  The stdout of the compiler is saved
+ 	in a file and echoed to the screen.  If the 'shell' option is "csh" or
+ 	"tcsh" after initializations, the default becomes "|& tee".  If the
+-	'shell' option is "sh", "ksh", "zsh" or "bash" the default becomes
+-	"2>&1| tee".  This means that stderr is also included.  Before using
+-	the 'shell' option a path is removed, thus "/bin/sh" uses "sh".
++	'shell' option is "sh", "ksh", "mksh", "pdksh", "zsh" or "bash" the
++	default becomes "2>&1| tee".  This means that stderr is also included.
++	Before using the 'shell' option a path is removed, thus "/bin/sh" uses
++	"sh".
+ 	The initialization of this option is done after reading the ".vimrc"
+ 	and the other initializations, so that when the 'shell' option is set
+ 	there, the 'shellpipe' option changes automatically, unless it was
+@@ -5954,7 +6098,8 @@
+ 			{not in Vi}
+ 	When on, use temp files for shell commands.  When off use a pipe.
+ 	When using a pipe is not possible temp files are used anyway.
+-	Currently a pipe is only supported on Unix.  You can check it with: >
++	Currently a pipe is only supported on Unix and MS-Windows 2K and
++	later.  You can check it with: >
+ 		:if has("filterpipe")
+ <	The advantage of using a pipe is that nobody can read the temp file
+ 	and the 'shell' command does not need to support redirection.
+@@ -5978,8 +6123,18 @@
+ 	0 and 2: use "shell 'shellcmdflag' cmd" to start external commands
+ 	1 and 3: use "shell cmd" to start external commands
+ 
++						*'shellxescape'* *'sxe'*
++'shellxescape' 'sxe'	string	(default: "";
++				 for MS-DOS and MS-Windows: "\"&|<>()@^")
++			global
++			{not in Vi}
++	When 'shellxquote' is set to "(" then the characters listed in this
++	option will be escaped with a '^' character.  This makes it possible
++	to execute most external commands with cmd.exe.
++
+ 						*'shellxquote'* *'sxq'*
+ 'shellxquote' 'sxq'	string	(default: "";
++					for Win32, when 'shell' is cmd.exe: "("
+ 					for Win32, when 'shell' contains "sh"
+ 					somewhere: "\""
+ 					for Unix, when using system(): "\"")
+@@ -5989,11 +6144,15 @@
+ 	the "!" and ":!" commands.  Includes the redirection.  See
+ 	'shellquote' to exclude the redirection.  It's probably not useful
+ 	to set both options.
+-	This is an empty string by default.  Known to be useful for
+-	third-party shells when using the Win32 version, such as the MKS Korn
+-	Shell or bash, where it should be "\"".  The default is adjusted
+-	according the value of 'shell', to reduce the need to set this option
+-	by the user.  See |dos-shell|.
++	When the value is '(' then ')' is appended. When the value is '"('
++	then ')"' is appended.
++	When the value is '(' then also see 'shellxescape'.
++	This is an empty string by default on most systems, but is known to be
++	useful for on Win32 version, either for cmd.exe which automatically
++	strips off the first and last quote on a command, or 3rd-party shells
++	such as the MKS Korn Shell or bash, where it should be "\"".  The
++	default is adjusted according the value of 'shell', to reduce the need
++	to set this option by the user.  See |dos-shell|.
+ 	This option cannot be set from a |modeline| or in the |sandbox|, for
+ 	security reasons.
+ 
+@@ -6011,6 +6170,8 @@
+ 			local to buffer
+ 	Number of spaces to use for each step of (auto)indent.  Used for
+ 	|'cindent'|, |>>|, |<<|, etc.
++	When zero the 'ts' value will be used.  Use the |shiftwidth()|
++	function to get the effective shiftwidth value.
+ 
+ 						*'shortmess'* *'shm'*
+ 'shortmess' 'shm'	string	(Vim default "filnxtToO", Vi default: "",
+@@ -6214,7 +6375,7 @@
+ 	Override the 'ignorecase' option if the search pattern contains upper
+ 	case characters.  Only used when the search pattern is typed and
+ 	'ignorecase' option is on.  Used for the commands "/", "?", "n", "N",
+-	":g" and ":s".  Not used for "*", "#", "gd", tag search, etc..  After
++	":g" and ":s".  Not used for "*", "#", "gd", tag search, etc.  After
+ 	"*" and "#" you can make 'smartcase' used by doing a "/" command,
+ 	recalling the search pattern from history and hitting <Enter>.
+ 	NOTE: This option is reset when 'compatible' is set.
+@@ -6228,8 +6389,9 @@
+ 	Do smart autoindenting when starting a new line.  Works for C-like
+ 	programs, but can also be used for other languages.  'cindent' does
+ 	something like this, works better in most cases, but is more strict,
+-	see |C-indenting|.  When 'cindent' is on, setting 'si' has no effect.
+-	'indentexpr' is a more advanced alternative.
++	see |C-indenting|.  When 'cindent' is on or 'indentexpr' is set,
++	setting 'si' has no effect.  'indentexpr' is a more advanced
++	alternative.
+ 	Normally 'autoindent' should also be on when using 'smartindent'.
+ 	An indent is automatically inserted:
+ 	- After a line ending in '{'.
+@@ -6273,6 +6435,7 @@
+ 	of 8, while being able to edit like it is set to 'sts'.  However,
+ 	commands like "x" still work on the actual characters.
+ 	When 'sts' is zero, this feature is off.
++	When 'sts' is negative, the value of 'shiftwidth' is used.
+ 	'softtabstop' is set to 0 when the 'paste' option is set.
+ 	See also |ins-expandtab|.  When 'expandtab' is not set, the number of
+ 	spaces is minimized by using <Tab>s.
+@@ -6467,7 +6630,7 @@
+ 	where it was the last time the buffer was edited.
+ 	NOTE: This option is set when 'compatible' is set.
+ 
+-			   *'statusline'* *'stl'* *E540* *E541* *E542*
++			   *'statusline'* *'stl'* *E540* *E542*
+ 'statusline' 'stl'	string	(default empty)
+ 			global or local to window |global-local|
+ 			{not in Vi}
+@@ -6480,12 +6643,15 @@
+ 	normal text.  Each status line item is of the form:
+ 	  %-0{minwid}.{maxwid}{item}
+ 	All fields except the {item} is optional.  A single percent sign can
+-	be given as "%%".  Up to 80 items can be specified.
++	be given as "%%".  Up to 80 items can be specified.  *E541*
+ 
+ 	When the option starts with "%!" then it is used as an expression,
+ 	evaluated and the result is used as the option value.  Example: >
+ 		:set statusline=%!MyStatusLine()
+ <	The result can contain %{} items that will be evaluated too.
++	Note that the "%!" expression is evaluated in the context of the
++	current window and buffer, while %{} items are evaluated in the
++	context of the window that the statusline belongs to.
+ 
+ 	When there is error while evaluating the option then it will be made
+ 	empty to avoid further errors.  Otherwise screen updating would loop.
+@@ -6533,7 +6699,7 @@
+ 	k S   Value of "b:keymap_name" or 'keymap' when |:lmap| mappings are
+ 	      being used: "<keymap>"
+ 	n N   Buffer number.
+-	b N   Value of byte under cursor.
++	b N   Value of character under cursor.
+ 	B N   As above, in hexadecimal.
+ 	o N   Byte number in file of byte under cursor, first byte is 1.
+ 	      Mnemonic: Offset from start of file (with one added)
+@@ -6591,8 +6757,8 @@
+ 	The variable "actual_curbuf" is set to the 'bufnr()' number of the
+ 	real current buffer.
+ 
+-	The 'statusline' option may be evaluated in the |sandbox|, see
+-	|sandbox-option|.
++	The 'statusline' option will be evaluated in the |sandbox| if set from
++	a modeline, see |sandbox-option|.
+ 
+ 	It is not allowed to change text or jump to another window while
+ 	evaluating 'statusline' |textlock|.
+@@ -6705,8 +6871,8 @@
+ 	   usetab	Like "useopen", but also consider windows in other tab
+ 			pages.
+ 	   split	If included, split the current window before loading
+-			a buffer.  Otherwise: do not split, use current window.
+-			Supported in |quickfix| commands that display errors.
++			a buffer for a |quickfix| command that display errors.
++			Otherwise: do not split, use current window.
+ 	   newtab	Like "split", but open a new tab page.  Overrules
+ 			"split" when both are present.
+ 
+@@ -6960,7 +7126,7 @@
+ 			{not in Vi}
+ 	Encoding used for the terminal.  This specifies what character
+ 	encoding the keyboard produces and the display will understand.  For
+-	the GUI it only applies to the keyboard ('encoding' is used for the
++	the GUI it only applies to the keyboard ( 'encoding' is used for the
+ 	display).  Except for the Mac when 'macatsui' is off, then
+ 	'termencoding' should be "macroman".
+ 	In the Win32 console version the default value is the console codepage
+@@ -7035,8 +7201,8 @@
+ 	the file should contain words with similar meaning, separated by
+ 	non-keyword characters (white space is preferred).  Maximum line
+ 	length is 510 bytes.
+-	To obtain a file to be used here, check out the wordlist FAQ at
+-	http://www.hyphenologist.co.uk .
++	To obtain a file to be used here, check out this ftp site:
++	ftp://ftp.ox.ac.uk/pub/wordlists/  First get the README file.
+ 	To include a comma in a file name precede it with a backslash.  Spaces
+ 	after a comma are ignored, otherwise spaces are included in the file
+ 	name.  See |option-backslash| about using backslashes.
+@@ -7311,6 +7477,12 @@
+ 	   jsbterm	JSB term mouse handling.
+ 							*pterm-mouse*
+ 	   pterm	QNX pterm mouse handling.
++							*urxvt-mouse*
++	   urxvt	Mouse handling for the urxvt (rxvt-unicode) terminal.
++							*sgr-mouse*
++	   sgr		Mouse handling for the terminal that emits SGR-styled
++			mouse reporting. Works with xterm version 277 or
++			later.
+ 
+ 	The mouse handling must be enabled at compile time |+mouse_xterm|
+ 	|+mouse_dec| |+mouse_netterm|.
+@@ -7323,6 +7495,7 @@
+ 	or "xterm2" already.  The main use of this option is to set it to
+ 	"xterm", when the terminal name doesn't start with "xterm", but it can
+ 	handle xterm mouse codes.
++	The "sgr" value will be set if the xterm version is 277 or later.
+ 	The "xterm2" value will be set if the xterm version is reported to be
+ 	95 or higher.  This only works when compiled with the |+termresponse|
+ 	feature and if |t_RV| is set to the escape sequence to request the
+@@ -7362,7 +7535,7 @@
+ 	given, no further entry is used.
+ 	See |undo-persistence|.
+ 
+-						*'undofile'* *'udf'*
++				*'undofile'* *'noundofile'* *'udf'* *'noudf'*
+ 'undofile' 'udf'	boolean	(default off)
+ 			local to buffer
+ 			{not in Vi}
+@@ -7374,7 +7547,7 @@
+ 	For more information about this feature see |undo-persistence|.
+ 	The undo file is not read when 'undoreload' causes the buffer from
+ 	before a reload to be saved for undo.
+-	WARNING: this is a very new feature.  Use at your own risk!
++	When 'undofile' is turned off the undo file is NOT deleted.
+ 
+ 						*'undolevels'* *'ul'*
+ 'undolevels' 'ul'	number	(default 100, 1000 for Unix, VMS,
+@@ -7527,15 +7700,18 @@
+ 	parameter.  The following is a list of the identifying characters and
+ 	the effect of their value.
+ 	CHAR	VALUE	~
++							*viminfo-!*
+ 	!	When included, save and restore global variables that start
+ 		with an uppercase letter, and don't contain a lowercase
+ 		letter.  Thus "KEEPTHIS and "K_L_M" are stored, but "KeepThis"
+-		and "_K_L_M" are not.  Only String and Number types are
+-		stored.
++		and "_K_L_M" are not.  Nested List and Dict items may not be
++		read back correctly, you end up with an empty item.
++							*viminfo-quote*
+ 	"	Maximum number of lines saved for each register.  Old name of
+ 		the '<' item, with the disadvantage that you need to put a
+ 		backslash before the ", otherwise it will be recognized as the
+ 		start of a comment!
++							*viminfo-%*
+ 	%	When included, save and restore the buffer list.  If Vim is
+ 		started with a file name argument, the buffer list is not
+ 		restored.  If Vim is started without a file name argument, the
+@@ -7545,38 +7721,48 @@
+ 		When followed by a number, the number specifies the maximum
+ 		number of buffers that are stored.  Without a number all
+ 		buffers are stored.
++							*viminfo-'*
+ 	'	Maximum number of previously edited files for which the marks
+ 		are remembered.  This parameter must always be included when
+ 		'viminfo' is non-empty.
+ 		Including this item also means that the |jumplist| and the
+ 		|changelist| are stored in the viminfo file.
++							*viminfo-/*
+ 	/	Maximum number of items in the search pattern history to be
+ 		saved.  If non-zero, then the previous search and substitute
+ 		patterns are also saved.  When not included, the value of
+ 		'history' is used.
++							*viminfo-:*
+ 	:	Maximum number of items in the command-line history to be
+ 		saved.  When not included, the value of 'history' is used.
++							*viminfo-<*
+ 	<	Maximum number of lines saved for each register.  If zero then
+ 		registers are not saved.  When not included, all lines are
+ 		saved.  '"' is the old name for this item.
+ 		Also see the 's' item below: limit specified in Kbyte.
++							*viminfo-@*
+ 	@	Maximum number of items in the input-line history to be
+ 		saved.  When not included, the value of 'history' is used.
++							*viminfo-c*
+ 	c	When included, convert the text in the viminfo file from the
+ 		'encoding' used when writing the file to the current
+ 		'encoding'.  See |viminfo-encoding|.
++							*viminfo-f*
+ 	f	Whether file marks need to be stored.  If zero, file marks ('0
+ 		to '9, 'A to 'Z) are not stored.  When not present or when
+ 		non-zero, they are all stored.  '0 is used for the current
+ 		cursor position (when exiting or when doing ":wviminfo").
++							*viminfo-h*
+ 	h	Disable the effect of 'hlsearch' when loading the viminfo
+ 		file.  When not included, it depends on whether ":nohlsearch"
+ 		has been used since the last search command.
++							*viminfo-n*
+ 	n	Name of the viminfo file.  The name must immediately follow
+ 		the 'n'.  Must be the last one!  If the "-i" argument was
+ 		given when starting Vim, that file name overrides the one
+ 		given here with 'viminfo'.  Environment variables are expanded
+ 		when opening the file, not when setting the option.
++							*viminfo-r*
+ 	r	Removable media.  The argument is a string (up to the next
+ 		',').  This parameter can be given several times.  Each
+ 		specifies the start of a path for which no marks will be
+@@ -7585,6 +7771,7 @@
+ 		also use it for temp files, e.g., for Unix: "r/tmp".  Case is
+ 		ignored.  Maximum length of each 'r' argument is 50
+ 		characters.
++							*viminfo-s*
+ 	s	Maximum size of an item in Kbyte.  If zero then registers are
+ 		not saved.  Currently only applies to registers.  The default
+ 		"s10" will exclude registers with more than 10 Kbyte of text.
+@@ -7736,9 +7923,9 @@
+ 			{not available when compiled without the |+wildignore|
+ 			feature}
+ 	A list of file patterns.  A file that matches with one of these
+-	patterns is ignored when completing file or directory names, and
+-	influences the result of |expand()|, |glob()| and |globpath()| unless
+-	a flag is passed to disable this.
++	patterns is ignored when expanding |wildcards|, completing file or
++	directory names, and influences the result of |expand()|, |glob()| and
++	|globpath()| unless a flag is passed to disable this.
+ 	The pattern is used like with |:autocmd|, see |autocmd-patterns|.
+ 	Also see 'suffixes'.
+ 	Example: >
+@@ -7747,6 +7934,17 @@
+ 	a pattern from the list.  This avoids problems when a future version
+ 	uses another default.
+ 
++
++			*'wildignorecase'* *'wic'* *'nowildignorecase'* *'nowic'*
++'wildignorecase' 'wic'	boolean	(default off)
++			global
++			{not in Vi}
++	When set case is ignored when completing file names and directories.
++	Has no effect when 'fileignorecase' is set.
++	Does not apply when the shell is used to expand wildcards, which
++	happens when there are special characters.
++
++
+ 				*'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'*
+ 'wildmenu' 'wmnu'	boolean	(default off)
+ 			global
+@@ -7761,6 +7959,7 @@
+ 	CTRL-P/CTRL-N, cause the highlight to move to the appropriate match.
+ 	When 'wildmode' is used, "wildmenu" mode is used where "full" is
+ 	specified.  "longest" and "list" do not start "wildmenu" mode.
++	You can check the current mode with |wildmenumode()|.
+ 	If there are more matches than can fit in the line, a ">" is shown on
+ 	the right and/or a "<" is shown on the left.  The status line scrolls
+ 	as needed.
+@@ -8029,8 +8228,13 @@
+ 			{not in Vi}
+ 	Make a backup before overwriting a file.  The backup is removed after
+ 	the file was successfully written, unless the 'backup' option is
+-	also on.  Reset this option if your file system is almost full.  See
+-	|backup-table| for another explanation.
++	also on.
++	WARNING: Switching this option off means that when Vim fails to write
++	your buffer correctly and then, for whatever reason, Vim exits, you
++	lose both the original file and what you were writing.  Only reset
++	this option if your file system is almost full and it makes the write
++	fail (and make sure not to exit Vim until the write was successful).
++	See |backup-table| for another explanation.
+ 	When the 'backupskip' pattern matches, a backup is not made anyway.
+ 	NOTE: This option is set to the default value when 'compatible' is
+ 	set.
+diff -Naur vim73.orig/runtime/doc/os_risc.txt vim73/runtime/doc/os_risc.txt
+--- vim73.orig/runtime/doc/os_risc.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/os_risc.txt	2013-06-07 17:07:09.345648655 +0000
+@@ -1,322 +1,12 @@
+-*os_risc.txt*   For Vim version 7.3.  Last change: 2010 Aug 07
++*os_risc.txt*   For Vim version 7.3.  Last change: 2011 May 10
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Thomas Leonard
+ 
+ 
+ 						*riscos* *RISCOS* *RISC-OS*
+-This file contains the particularities for the RISC OS version of Vim.
++The RISC OS support has been removed from Vim with patch 7.3.187.
++If you would like to use Vim on RISC OS get the files from before that patch.
+ 
+-The RISC OS port is a completely new port and is not based on the old "archi"
+-port.
+ 
+-1.  File locations		|riscos-locations|
+-2.  Filename munging		|riscos-munging|
+-3.  Command-line use		|riscos-commandline|
+-4.  Desktop (GUI) use		|riscos-gui|
+-5.  Remote use (telnet)		|riscos-remote|
+-6.  Temporary files		|riscos-temp-files|
+-7.  Interrupting		|riscos-interrupt|
+-8.  Memory usage		|riscos-memory|
+-9.  Filetypes			|riscos-filetypes|
+-10. The shell			|riscos-shell|
+-11. Porting new releases	|riscos-porting|
+-
+-If I've missed anything, email me and I'll try to fix it.  In fact, even if I
+-haven't missed anything then email me anyway to give me some confidence that it
+-actually works!
+-
+-Thomas Leonard <tal197@ecs.soton.ac.uk>
+-
+-	[these URLs no longer work...]
+- Port homepage:	http://www.ecs.soton.ac.uk/~tal197/
+-	or try:	http://www.soton.ac.uk/~tal197/
+-
+-==============================================================================
+-							*riscos-locations*
+-1. File locations
+-
+-The Vim executable and shared resource files are all stored inside the !Vim
+-application directory.
+-
+-When !Vim is first seen by the filer, it aliases the *vi and *ex commands to
+-run the command-line versions of Vim (see |riscos-commandline|).
+-
+-!Vim.Resources and !Vim.Resources2 contain the files from the standard Vim
+-distribution, but modified slightly to work within the limits of ADFS, plus
+-some extra files such as the window templates.
+-
+-User choices are read from "Choices:*" and are saved to "<Choices$Write>.*".
+-If you have the new !Boot structure then these should be set up already.  If
+-not, set Choices$Path to a list of directories to search when looking for
+-user configuration files.  Set Choices$Write to the directory you want files
+-to be saved into (so your search patterns and marks can be remembered between
+-sessions).
+-
+-==============================================================================
+-							*riscos-munging*
+-2. Filename munging
+-
+-All pathname munging is disabled by default, so Vim should behave like a
+-normal RISC OS application now.  So, if you want to edit "doc/html" then you
+-actually type "*vi doc/html".
+-
+-The only times munging is done is when:
+-
+-- Searching included files from C programs, since these are always munged.
+-  See |[I|.
+-  Note: make sure you are in the right directory when you use this
+-	command (i.e. the one with subdirectories "c" and "h").
+-
+-- Sourcing files using |:so|.
+-  Paths starting "$VIM/" are munged like this:
+-
+-  $VIM/syntax/help.vim  ->  Vim:syntax.help
+-
+-  Also, files ending in ".vim" have their extensions removed, and slashes
+-  replaced with dots.
+-
+-Some tag files and script files may have to be edited to work under this port.
+-
+-==============================================================================
+-							*riscos-commandline*
+-3. Command-line use
+-
+-To use Vim from the command-line use the "*vi" command (or "*ex" for
+-|Ex-mode|).
+-
+-Type "*vi -h" for a list of options.
+-
+-Running the command-line version of Vim in a large high-color mode may cause
+-the scrolling to be very slow.  Either change to a mode with fewer colors or
+-use the GUI version.
+-
+-Also, holding down Ctrl will slow it down even more, and Ctrl-Shift will
+-freeze it, as usual for text programs.
+-
+-==============================================================================
+-							*riscos-gui*
+-4. Desktop use
+-
+-Limitations:
+-
+-- Left scrollbars don't work properly (right and bottom are fine).
+-- Doesn't increase scroll speed if it gets behind.
+-
+-You can resize the window by dragging the lower-right corner, even though
+-there is no icon shown there.
+-
+-You can use the --rows and --columns arguments to specify the initial size of
+-the Vim window, like this: >
+-
+-  *Vi -g --rows 20 --columns 80
+-
+-The global clipboard is supported, so you can select some text and then
+-paste it directly into another application (provided it supports the
+-clipboard too).
+-
+-Clicking Menu now opens a menu like a normal RISC OS program.  Hold down Shift
+-when clicking Menu to paste (from the global clipboard).
+-
+-Dragging a file to the window replaces the CURRENT buffer (the one with the
+-cursor, NOT the one you dragged to) with the file.
+-
+-Dragging with Ctrl held down causes a new Vim window to be opened for the
+-file (see |:sp|).
+-
+-Dragging a file in with Shift held down in insert mode inserts the pathname of
+-the file.
+-
+-:browse :w opens a standard RISC OS save box.
+-:browse :e opens a directory viewer.
+-
+-For fonts, you have the choice of the system font, an outline font, the system
+-font via ZapRedraw and any of the Zap fonts via ZapRedraw: >
+-
+-  :set guifont=
+-<			To use the system font via the VDU drivers.  Supports
+-			bold and underline.
+->
+-  :set guifont=Corpus.Medium
+-<			Use the named outline font.  You can use any font, but
+-			only monospaced ones like Corpus look right.
+->
+-  :set guifont=Corpus.Medium:w8:h12:b:i
+-<			As before, but with size of 8 point by 12 point, and
+-			in bold italic.
+-			If only one of width and height is given then that
+-			value is used for both.  If neither is given then 10
+-			point is used.
+-
+-Thanks to John Kortink, Vim can use the ZapRedraw module.  Start the font name
+-with "!" (or "!!" for double height), like this: >
+-
+-  :set guifont=!!
+-<			Use the system font, but via ZapRedraw.  This gives a
+-			faster redraw on StrongARM processors, but you can't
+-			get bold or italic text.  Double height.
+->
+-  :set guifont=!script
+-<			Uses the named Zap font (a directory in VimFont$Path).
+-			The redraw is the same speed as for "!!", but you get
+-			a nicer looking font.
+-			Only the "man+" and "script" fonts are supplied
+-			currently, but you can use any of the Zap fonts if
+-			they are in VimFont$Path.
+-			Vim will try to load font files "0", "B", "I" and "IB"
+-			from the named directory.  Only "0" (normal style) MUST
+-			be present.  Link files are not currently supported.
+-
+-Note that when using ZapRedraw the edit bar is drawn in front of the character
+-you are on rather than behind it.  Also redraw is incorrect for screen modes
+-with eigen values of 0.  If the font includes control characters then you can
+-get Vim to display them by changing the 'isprint' option.
+-
+-If you find the scrolling is too slow on your machine, try experimenting
+-with the 'scrolljump' and 'ttyscroll' options.
+-
+-In particular, StrongARM users may find that: >
+-
+-  :set ttyscroll=0
+-
+-makes scrolling faster in high-color modes.
+-
+-=============================================================================
+-							*riscos-remote*
+-5. Remote use (telnet)
+-
+-I have included a built-in termcap entry, but you can edit the termcap file to
+-allow other codes to be used if you want to use Vim from a remote terminal.
+-
+-Although I do not have an internet connection to my Acorn, I have managed to
+-run Vim in a FreeTerm window using the loopback connection.
+-
+-It seems to work pretty well now, using "*vi -T ansi".
+-
+-==============================================================================
+-							*riscos-temp-files*
+-6. Temporary files
+-
+-If Vim crashes then the swap and backup files (if any) will be in the
+-directories set with the 'directory' and 'bdir' options.  By default the swap
+-files are in <Wimp$ScrapDir> (i.e. inside !Scrap) and backups are in the
+-directory you were saving to.  Vim will allow you to try and recover the file
+-when you next try to edit it.
+-
+-To see a list of swap files, press <F12> and type "*vi -r".
+-
+-Vim no longer brings up ATTENTION warnings if you try to edit two files with
+-the same name in different directories.
+-
+-However, it also no longer warns if you try to edit the same file twice (with
+-two copies of Vim), though you will still be warned when you save that the
+-datestamp has changed.
+-
+-==============================================================================
+-							*riscos-interrupt*
+-7. Interrupting
+-
+-To break out of a looping macro, or similar, hold down Escape in the
+-command-line version, or press CTRL-C in the GUI version.
+-
+-==============================================================================
+-							*riscos-memory*
+-8. Memory usage
+-
+-Vim will use dynamic areas on RISC OS 3.5 or later.  If you can use them on
+-older machines then edit the !RunTxt and GVim files.  I don't know what UnixLib
+-does by default on these machines so I'm playing safe.
+-
+-It doesn't work at all well without dynamic areas, since it can't change its
+-memory allocation once running.  Hence you should edit "!Vim.GVim" and
+-"!Vim.!RunTxt" to choose the best size for you.  You probably need at least
+-about 1400K.
+-
+-==============================================================================
+-							*riscos-filetypes*
+-9. Filetypes
+-
+-You can now specify that autocommands are only executed for files of certain
+-types.  The filetype is given in the form &xxx, when xxx is the filetype.
+-
+-Filetypes must be specified by number (e.g. &fff for Text).
+-
+-The system has changed from version 5.3.  The new sequence of events is:
+-
+-- A file is loaded. |'osfiletype'| is set to the RISC OS filetype.
+-- Based on the filetype and pathname, Vim will try to set |'filetype'| to the
+-  Vim-type of the file.
+-- Setting this option may load syntax files and perform other actions.
+-- Saving the file will give it a filetype of |'osfiletype'|.
+-
+-Some examples may make this clearer:
+-
+-  Kind of file loaded	osfiletype	filetype ~
+-  C code "c.hellow"	Text (&fff)	C
+-  LaTeX document	LaTeX (&2a8)	TeX
+-  Draw document		DrawFile (&aff)	(not changed)
+-
+-==============================================================================
+-							*riscos-shell*
+-10. The shell
+-
+-- Bangs (!s) are only replaced if they are followed by a space or end-of-line,
+-  since many pathnames contain them.
+-
+-- You can prefix the command with "~", which stops any output from being
+-  displayed.  This also means that you don't have to press <Enter> afterwards,
+-  and stops the screen from being redrawn. {only in the GUI version}
+-
+-==============================================================================
+-							*riscos-porting*
+-11. Porting new releases to RISC OS
+-
+-Downloading everything you need:
+-
+-- Get the latest source distribution (see www.vim.org)
+-- Get the runtime environment files (e.g. these help files)
+-- Get the RISC OS binary distribution (if possible)
+-
+-
+-Unarchiving:
+-
+-- Create a raFS disk and put the archives on it
+-- Un-gzip them
+-- Un-tar them   (*tar xELf 50 archive/tar)
+-
+-
+-Recompiling the sources:
+-
+-- Create c, s, and h directories.
+-- Put all the header files in "h".	     \
+-- Put all the C files in "c".		     | And lose the extensions
+-- Put the assembler file ("swis/s") in "s".  /
+-- Rename all the files in "proto" to "h", like this:
+-    raFS::VimSrc.source.proto.file/pro
+-	  becomes
+-    raFS::VimSrc.source.h.file_pro
+-- In the files "h.proto" and "c.termlib", search and replace
+-    .pro"
+-       with
+-    _pro.h"
+-- Create a simple Makefile if desired and do "*make -k".
+-  Use "CC = gcc -DRISCOS -DUSE_GUI -O2 -x c" in the Makefile.
+-- Save the binary as !Vim.Vim in the binary distribution.
+-
+-
+-Updating the run-time environment:
+-
+-- Replace old or missing files inside !Vim.Resources with the
+-  new files.
+-- Remove files in "doc" not ending in "/txt", except for "tags".
+-- Lose the extensions from the files in "doc".
+-- Edit the "doc.tags" file.  Remove extensions from the second column: >
+-	:%s/^\(.[^\t]*\t.*\)\.txt\t/\1\t/
+-- Remove extensions from the syntax files.  Split them into two directories
+-  to avoid the 77 entry limit on old ADFS filesystems.
+-- Edit "Vim:FileType" to match "*.c.*" as well as "*/c" and so on.
+-  Add filetype checking too.
+-- Edit "Vim:Menu" and remove all the keys from the menus: >
+-	:%s/<Tab>[^ \t]*//
+-<
+  vim:tw=78:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/os_vms.txt vim73/runtime/doc/os_vms.txt
+--- vim73.orig/runtime/doc/os_vms.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/os_vms.txt	2013-06-07 17:07:09.365648598 +0000
+@@ -1,4 +1,4 @@
+-*os_vms.txt*    For Vim version 7.3.  Last change: 2010 Jul 28
++*os_vms.txt*    For Vim version 7.3.  Last change: 2011 Aug 14
+ 
+ 
+ 		  VIM REFERENCE MANUAL
+@@ -38,9 +38,6 @@
+ Or use one of the mirrors:
+ 	ftp://ftp.vim.org/pub/vim/MIRRORS
+ 
+-You will need both the Unix and Extra archives to build vim.exe for VMS.
+-For using Vim's full power you will need the runtime files as well.
+-
+ You can download precompiled executables from:
+ 	http://www.polarhome.com/vim/
+ 	ftp://ftp.polarhome.com/pub/vim/
+@@ -75,7 +72,7 @@
+ 4. Problems						*vms-problems*
+ 
+ The code has been tested under Open VMS 6.2 - 8.2 on Alpha, VAX and IA64
+-platforms with the DEC C compiler.  It should work without bigger problems.
++platforms with the DEC C compiler.  It should work without big problems.
+ If your system does not have some include libraries you can tune up in
+ OS_VMS_CONF.H file.
+ 
+@@ -88,11 +85,11 @@
+ 
+ Note: Under VAX it should work with the DEC C compiler without problems.  The
+ VAX C compiler is not fully ANSI C compatible in pre-processor directives
+-semantics, therefore you have to use a converter program what will do the lion
++semantics, therefore you have to use a converter program that will do the lion
+ part of the job.  For detailed instructions read file INSTALLvms.txt
+ 
+-MMS_VIM.EXE is build together with VIM.EXE, but for XD.EXE you should
+-change to subdirectory and build it separately.
++MMS_VIM.EXE is build together with VIM.EXE, but for XXD.EXE you should
++change to a subdirectory and build it separately.
+ 
+ CTAGS is not part of the Vim source distribution anymore, however the OpenVMS
+ specific source might contain CTAGS source files as described above.
+@@ -184,9 +181,9 @@
+ 
+ The easiest way is just rename example files.  You may leave the menu file
+ (MENU.VIM) and files vimrc and gvimrc in the original $VIM directory.  It will
+-be default setup for all users, and for users it is enough just to have their
+-own additions or resetting in their home directory in files .vimrc and .gvimrc.
+-It should work without problems.
++be the default setup for all users, and for users it is enough to just have
++their own additions or resetting in their home directory in files .vimrc and
++.gvimrc.  It should work without problems.
+ 
+ Note: Remember, system rc files (default for all users) don't have a leading
+ ".".  So, system rc files are: >
+@@ -200,7 +197,7 @@
+ 	sys$login:.vimrc
+ 	sys$login:.gvimrc
+ 
+-You can check that everything is on the right place with the :version command.
++You can check that everything is at the right place with the :version command.
+ 
+ Example LOGIN.COM: >
+ 
+@@ -209,15 +206,15 @@
+ 	$ gv*im:== spawn/nowait/input=NLA0 mcr VIM:VIM.EXE -g -GEOMETRY 80x40
+ 	$ set disp/create/node=192.168.5.223/trans=tcpip
+ 
+-Note: This set-up should be enough, if you are working on standalone server or
+-clustered environment, but if you want to use Vim as internode editor in
++Note: This set-up should be enough, if you are working on a standalone server or
++clustered environment, but if you want to use Vim as an internode editor in
+ DECNET environment, it will satisfy as well.
+ You just have to define the "whole" path: >
+ 
+ 	$ define VIM "<server_name>[""user password""]::device:<path>"
+ 	$ vi*m :== "mcr VIM:VIM.EXE"
+ 
+-As for example: >
++For example: >
+ 
+ 	$ define VIM "PLUTO::RF10:[UTIL.VIM]"
+ 	$ define VIM "PLUTO""ZAY mypass""::RF10:[UTIL.VIM]" ! if passwd required
+@@ -300,12 +297,12 @@
+ 
+ 4) If you are working on MS-Windows or some other non X/Window environment
+    you need to set up one X server and run Vim as in point 2.
+-   For MS-Windows there are available free X servers as MIX , Omni X etc.,
++   For MS-Windows there are available free X servers as MIX, Omni X etc.,
+    as well as excellent commercial products as eXcursion or ReflectionX with
+    built-in DEC support.
+ 
+ Please note, that executables without GUI are slightly faster during startup
+-then with enabled GUI in character mode. Therefore, if you do not use GUI
++than with enabled GUI in character mode. Therefore, if you do not use GUI
+ features, it is worth to choose non GUI executables.
+ 
+ ==============================================================================
+@@ -326,8 +323,8 @@
+ 8.12 diff-mode
+ 8.13 Allow '$' in C keywords
+ 8.14 VIMTUTOR for beginners
+-8.15 Slow start in console mode issue 
+-8.16 Common VIM directory - different architectures 
++8.15 Slow start in console mode issue
++8.16 Common VIM directory - different architectures
+ 
+ 8.1 Backspace/delete
+ 
+@@ -360,7 +357,7 @@
+ 	:set nowritebackup   " does not have any purpose on VMS.  It's the
+ 			     " default.
+ 
+-Recovery is working perfect as well from the default swap file.
++Recovery is working perfectly as well from the default swap file.
+ Read more with :help swapfile
+ 
+ (Claude Marinier <ClaudeMarinier@xwavesolutions.com> Vim 5.5, Zoltan Arpadffy
+@@ -386,7 +383,7 @@
+ rf10:<user.zay.work>test.c;1
+ 
+ (David Elins <delins@foliage.com>, Jerome Lauret
+-<JLAURET@mail.chem.sunysb.edu> Vim 5.6 )
++<JLAURET@mail.chem.sunysb.edu> Vim 5.6)
+ 
+ 
+ 8.5 Remote host invocation
+@@ -445,14 +442,14 @@
+     builtin_dumb
+ defaulting to 'vt320'
+ ---
+-The solution is to define default terminal name: >
++The solution is to define the default terminal name: >
+ 
+ 	$ ! unknown terminal name.  Let us use vt320 or ansi instead.
+ 	$ ! Note: it's case sensitive
+ 	$ define term "vt320"
+ 
+-Terminals from VT100 to VT320 (as V300, VT220, VT200 ) do not need any extra
+-keyboard mappings.  They should work perfect as they are, including arrows,
++Terminals from VT100 to VT320 (as V300, VT220, VT200) do not need any extra
++keyboard mappings.  They should work perfectly as they are, including arrows,
+ Ins, Del buttons etc., except Backspace in GUI mode.  To solve it, add to
+ .gvimrc: >
+ 
+@@ -465,8 +462,8 @@
+ 
+ 	set ttyfast	" set fast terminal
+ 
+-Note: if you're using Vim on remote host or through very slow connection, it's
+-recommended to avoid fast terminal option with: >
++Note: if you're using Vim on remote host or through a very slow connection, it's
++recommended to avoid the fast terminal option with: >
+ 
+ 	set nottyfast   " set terminal to slow mode
+ 
+@@ -483,8 +480,8 @@
+ 
+ OpenVMS users always have to be aware that the Vim command :! "just" drop them
+ to DCL prompt.  This feature is possible to use without any problem with all
+-DCL commands, but if we want to execute some program as XXD, CTAGS, JTAGS etc.
+-we're running into trouble if we follow the Vim documentation (see: help
++DCL commands, but if we want to execute some programs such as XXD, CTAGS, JTAGS,
++etc.  we're running into trouble if we follow the Vim documentation (see: help
+ xxd).
+ 
+ Solution: Execute with the MC command and add the full path to the executable.
+@@ -534,7 +531,7 @@
+ 
+ 	$define SYS$PRINT HP5ANSI
+ 
+-You can print out whole buffer or just the marked area.
++You can print out the whole buffer or just the marked area.
+ More info under :help hardcopy
+ 
+ (Zoltan Arpadffy, Vim 6.0c)
+@@ -561,16 +558,16 @@
+ From 6.0 diff functionality has been implemented, but OpenVMS does not use
+ GNU/Unix like diff therefore built in diff does not work.
+ There is a simple solution to solve this anomaly.  Install a Unix like diff
+-and Vim will work perfect in diff mode too.  You just have to redefine your
++and Vim will work perfectly in diff mode too.  You just have to redefine your
+ diff program as: >
+ 
+ 	define /nolog diff <GNU_PATH>diff.exe
+ 
+ Another, more sophisticated solution is described below (8.12 diff-mode)
+-There are some other programs as patch, make etc that may cause same problems.
+-At www.polarhome.com is possible to download an GNU package for Alpha and VAX
+-boxes that is meant to solve GNU problems on OpenVMS.
+-( Zoltan Arpadffy, Vim 6.1)
++There are other programs such as patch, make etc that may cause the same
++problems.  At www.polarhome.com is possible to download an GNU package for
++Alpha and VAX boxes that is meant to solve GNU problems on OpenVMS.
++(Zoltan Arpadffy, Vim 6.1)
+ 
+ 
+ 8.12 diff-mode
+@@ -632,7 +629,7 @@
+     3. VIM  diff:  $ VIMDIFF  <FILE1> <FILE2>
+     4. GVIM diff:  $ GVIMDIFF <FILE1> <FILE2>
+ 
+-( Coen Engelbarts, Vim 6.1)
++(Coen Engelbarts, Vim 6.1)
+ 
+ 
+ 8.13 Allow '$' in C keywords
+@@ -653,46 +650,47 @@
+ tag-lookup, work on the whole identifier.  (Ctags on VMS also supports '$' in
+ C keywords since ctags version 5.1.)
+ 
+-( Coen Engelbarts, Vim 6.1)
++(Coen Engelbarts, Vim 6.1)
+ 
+ 8.14 VIMTUTOR for beginners
+ 
+-It exits VIMTUTOR.COM DCL script that can help Vim beginners to learn/make
+-first steps with Vim on OpenVMS.  Depending of binary distribution you may
+-start it with: >
++The VIMTUTOR.COM DCL script can help Vim beginners to learn/make their first
++steps with Vim on OpenVMS.  Depending of binary distribution you may start it
++with: >
+ 
+ 	@vim:vimtutor
+ 
+ (Thomas.R.Wyant III, Vim 6.1)
+ 
+-8.14 Slow start in console mode issue
++8.16 Slow start in console mode issue
+ 
+ As GUI/GTK Vim works equally well in console mode, many administrators
+ deploy those executables system wide.
+ Unfortunately, on a remote slow connections GUI/GTK executables behave rather
+-slow when user wants to run Vim just in the console mode - because of X environment detection timeout.
++slow when user wants to run Vim just in the console mode - because of X
++environment detection timeout.
+ 
+ Luckily, there is a simple solution for that. Administrators need to deploy
+ both GUI/GTK build and just console build executables, like below: >
+ 
+-    |- vim72
++    |- vim73
+     |----- doc
+-    |----- syntax        
++    |----- syntax
+        vimrc    (system rc files)
+        gvimrc
+-       gvim.exe (the renamed GUI or GTK built vim.exe)      
+-       vim.exe  (the console only executable) 
++       gvim.exe (the renamed GUI or GTK built vim.exe)
++       vim.exe  (the console only executable)
+ 
+ Define system symbols like below in for ex in LOGIN.COM or SYLOGIN.COM: >
+ 
+-	$ define/nolog VIM RF10:[UTIL.VIM72] ! where you VIM directory is
++	$ define/nolog VIM RF10:[UTIL.VIM73] ! where you VIM directory is
+ 	$ vi*m  :== mcr VIM:VIM.EXE
+ 	$ gvi*m :== mcr VIM:GVIM.EXE
+ 	$ ! or you can try to spawn with
+ 	$ gv*im :== spawn/nowait/input=NLA0 mcr VIM:GVIM.EXE -g -GEOMETRY 80x40
+ 
+ 
+-Like this, users that do not have X environment and want to use Vim just in 
++Like this, users that do not have X environment and want to use Vim just in
+ console mode can avoid performance problems.
+ 
+ (Zoltan Arpadffy, Vim 7.2)
+@@ -714,8 +712,8 @@
+ +---------------------------------+
+ 
+ It is convenient to have a common VIM directory but execute different
+-executables. 
+-There are more solutions for this problem:
++executables.
++There are several solutions for this problem:
+ 
+ Solution 1.  All executables in the same directory with different names
+ This is easily done with the following script that can be added
+@@ -755,7 +753,7 @@
+ 	$      define/nolog VIM RF10:[UTIL.IA64_EXE] ! IA64 executables
+ 	$ endif
+         $! VIMRUNTIME must be defined in order to find runtime files
+-	$ define/nolog VIMRUNTIME RF10:[UTIL.VIM72]
++	$ define/nolog VIMRUNTIME RF10:[UTIL.VIM73]
+ 
+ A good example for this approach is the [GNU]gnu_tools.com script from
+ GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/
+@@ -769,7 +767,7 @@
+ Version 7.3
+ - CTAGS 5.8 included
+ - VMS compile warnings fixed - floating-point overflow warning corrected on VAX
+-- filepath completition corrected - too many chars were escaped in filename
++- filepath completion corrected - too many chars were escaped in filename
+   and shell commands
+ - the following plugins are included into VMS runtime:
+ 	genutils 2.4, multiselect 2.2, multvals 3.1, selectbuf 4.3,
+@@ -784,10 +782,10 @@
+ Version 7.2 (2008 Aug 9)
+ - VCF files write corrected
+ - CTAGS 5.7 included
+-- corrected make_vms.mms (on VAX gave syntax error) 
++- corrected make_vms.mms (on VAX gave syntax error)
+ 
+ Version 7.1 (2007 Jun 15)
+-- create TAGS file from menu 
++- create TAGS file from menu
+ 
+ Version 7 (2006 May 8)
+ - Improved low level char input (affects just console mode)
+diff -Naur vim73.orig/runtime/doc/os_win32.txt vim73/runtime/doc/os_win32.txt
+--- vim73.orig/runtime/doc/os_win32.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/os_win32.txt	2013-06-07 17:07:09.382315217 +0000
+@@ -1,4 +1,4 @@
+-*os_win32.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
++*os_win32.txt*  For Vim version 7.3.  Last change: 2012 May 18
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by George Reilly
+@@ -313,6 +313,37 @@
+    with :!start do not get passed Vim's open file handles, which means they do
+    not have to be closed before Vim.
+    To avoid this special treatment, use ":! start".
++   There are two optional arguments (see the next Q):
++       /min  the window will be minimized
++       /b    no console window will be opened
++   You can use only one of these flags at a time.  A second one will be
++   treated as the start of the command.
++
++Q. How do I avoid getting a window for programs that I run asynchronously?
++A. You have two possible solutions depending on what you want:
++   1) You may use the /min flag in order to run program in a minimized state
++      with no other changes. It will work equally for console and GUI
++      applications.
++   2) You can use the /b flag to run console applications without creating a
++      console window for them (GUI applications are not affected). But you
++      should use this flag only if the application you run doesn't require any
++      input.  Otherwise it will get an EOF error because its input stream
++      (stdin) would be redirected to \\.\NUL (stdout and stderr too).
++
++   Example for a console application, run Exuberant ctags: >
++        :!start /min ctags -R .
++<  When it has finished you should see file named "tags" in your current
++   directory.  You should notice the window title blinking on your taskbar.
++   This is more noticable for commands that take longer.
++   Now delete the "tags" file and run this command: >
++        :!start /b ctags -R .
++<  You should have the same "tags" file, but this time there will be no
++   blinking on the taskbar.
++   Example for a GUI application: >
++        :!start /min notepad
++        :!start /b notepad
++<  The first command runs notepad minimized and the second one runs it
++   normally.
+ 
+ Q. I'm using Win32s, and when I try to run an external command like "make",
+    Vim doesn't wait for it to finish!  Help!
+diff -Naur vim73.orig/runtime/doc/pattern.txt vim73/runtime/doc/pattern.txt
+--- vim73.orig/runtime/doc/pattern.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pattern.txt	2013-06-07 17:07:09.388981864 +0000
+@@ -1,4 +1,4 @@
+-*pattern.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
++*pattern.txt*   For Vim version 7.3.  Last change: 2013 Jun 02
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -21,7 +21,7 @@
+ 10. Highlighting matches	|match-highlight|
+ 
+ ==============================================================================
+-1. Search commands				*search-commands* *E486*
++1. Search commands				*search-commands*
+ 
+ 							*/*
+ /{pattern}[/]<CR>	Search forward for the [count]'th occurrence of
+@@ -150,6 +150,11 @@
+ All matches for the last used search pattern will be highlighted if you set
+ the 'hlsearch' option.  This can be suspended with the |:nohlsearch| command.
+ 
++When no match is found you get the error: *E486* Pattern not found
++Note that for the |:global| command this behaves like a normal message, for Vi
++compatibility.  For the |:s| command the "e" flag can be used to avoid the
++error message |:s_flags|.
++
+ 					*search-offset* *{offset}*
+ These commands search for the specified pattern.  With "/" and "?" an
+ additional offset may be given.  There are two types of offsets: line offsets
+@@ -214,7 +219,8 @@
+ the search, possibly in another direction or with another count.  Note that
+ two patterns are remembered: One for 'normal' search commands and one for the
+ substitute command ":s".  Each time an empty pattern is given, the previously
+-used pattern is used.
++used pattern is used.  However, if there is no previous search command, a
++previous substitute pattern is used, if possible.
+ 
+ The 'magic' option sticks with the last used pattern.  If you change 'magic',
+ this will not change how the last used pattern will be interpreted.
+@@ -344,6 +350,27 @@
+ 		or  \z( pattern \)		|/\z(|
+ 
+ 
++				*/\%#=* *two-engines*
++Vim includes two regexp engines:
++1. An old, backtracking engine that supports everything.
++2. A new, NFA engine that works much faster on some patterns, but does not
++   support everything.
++
++Vim will automatically select the right engine for you.  However, if you run
++into a problem or want to specifically select one engine or the other, you can
++prepend one of the following to the pattern:
++
++	\%#=0	Force automatic selection.  Only has an effect when
++	        'regexpengine' has been set to a non-zero value.
++	\%#=1	Force using the old engine.
++	\%#=2	Force using the NFA engine.
++
++You can also use the 'regexpengine' option to change the default.
++
++			 *E864* *E868* *E874* *E875* *E876* *E877* *E878*
++If selecting the NFA engine and it runs into something that is not implemented
++the pattern will not match.  This is only useful when debugging Vim.
++
+ ==============================================================================
+ 3. Magic							*/magic*
+ 
+@@ -390,9 +417,10 @@
+ 
+ ==============================================================================
+ 4. Overview of pattern items				*pattern-overview*
++						*E865* *E866* *E867* *E869*
+ 
+ Overview of multi items.				*/multi* *E61* *E62*
+-More explanation and examples below, follow the links.			*E64*
++More explanation and examples below, follow the links.		*E64* *E871*
+ 
+ 	  multi ~
+      'magic' 'nomagic'	matches of the preceding atom ~
+@@ -498,16 +526,18 @@
+ 	x	x	a character with no special meaning matches itself
+ 
+ |/[]|	[]	\[]	any character specified inside the []
+-|/\%[]| \%[]	\%[]	a sequence of optionally matched atoms
++|/\%[]|	\%[]	\%[]	a sequence of optionally matched atoms
+ 
+ |/\c|	\c	\c	ignore case, do not use the 'ignorecase' option
+ |/\C|	\C	\C	match case, do not use the 'ignorecase' option
++|/\Z|	\Z	\Z	ignore differences in Unicode "combining characters".
++			Useful when searching voweled Hebrew or Arabic text.
++
+ |/\m|	\m	\m	'magic' on for the following chars in the pattern
+ |/\M|	\M	\M	'magic' off for the following chars in the pattern
+ |/\v|	\v	\v	the following chars in the pattern are "very magic"
+ |/\V|	\V	\V	the following chars in the pattern are "very nomagic"
+-|/\Z|	\Z	\Z	ignore differences in Unicode "combining characters".
+-			Useful when searching voweled Hebrew or Arabic text.
++|/\%#=|   \%#=1   \%#=1   select regexp engine |/zero-width|
+ 
+ |/\%d|	\%d	\%d	match specified decimal character (eg \%d123)
+ |/\%x|	\%x	\%x	match specified hex character (eg \%x2a)
+@@ -575,7 +605,7 @@
+ \?	Just like \=.  Cannot be used when searching backwards with the "?"
+ 	command. {not in Vi}
+ 
+-						*/\{* *E58* *E60* *E554*
++					*/\{* *E58* *E60* *E554* *E870*
+ \{n,m}	Matches n to m of the preceding atom, as many as possible
+ \{n}	Matches n of the preceding atom
+ \{n,}	Matches at least n of the preceding atom, as many as possible
+@@ -631,17 +661,18 @@
+ 							*/\@!*
+ \@!	Matches with zero width if the preceding atom does NOT match at the
+ 	current position. |/zero-width| {not in Vi}
+-	Like '(?!pattern)" in Perl.
++	Like "(?!pattern)" in Perl.
+ 	Example			matches ~
+ 	foo\(bar\)\@!		any "foo" not followed by "bar"
+-	a.\{-}p\@!		"a", "ap", "app", etc. not followed by a "p"
++	a.\{-}p\@!		"a", "ap", "app", "appp", etc. not immediately
++				followed by a "p"
+ 	if \(\(then\)\@!.\)*$	"if " not followed by "then"
+ 
+ 	Using "\@!" is tricky, because there are many places where a pattern
+ 	does not match.  "a.*p\@!" will match from an "a" to the end of the
+ 	line, because ".*" can match all characters in the line and the "p"
+ 	doesn't match at the end of the line.  "a.\{-}p\@!" will match any
+-	"a", "ap", "aap", etc. that isn't followed by a "p", because the "."
++	"a", "ap", "app", etc. that isn't followed by a "p", because the "."
+ 	can match a "p" and "p\@!" doesn't match after that.
+ 
+ 	You can't use "\@!" to look for a non-match before the matching
+@@ -650,16 +681,24 @@
+ 	"foobar" you could use "\(foo\)\@!...bar", but that doesn't match a
+ 	bar at the start of a line.  Use "\(foo\)\@<!bar".
+ 
++	Useful example: to find "foo" in a line that does not contain "bar": >
++		/^\%(.*bar\)\@!.*\zsfoo
++<	This pattern first checks that there is not a single position in the
++	line where "bar" matches.  If ".*bar" matches somewhere the \@! will
++	reject the pattern.  When there is no match any "foo" will be found.
++	The "\zs" is to have the match start just before "foo".
++
+ 							*/\@<=*
+ \@<=	Matches with zero width if the preceding atom matches just before what
+ 	follows. |/zero-width| {not in Vi}
+-	Like '(?<=pattern)" in Perl, but Vim allows non-fixed-width patterns.
++	Like "(?<=pattern)" in Perl, but Vim allows non-fixed-width patterns.
+ 	Example			matches ~
+ 	\(an\_s\+\)\@<=file	"file" after "an" and white space or an
+ 				end-of-line
+ 	For speed it's often much better to avoid this multi.  Try using "\zs"
+ 	instead |/\zs|.  To match the same as the above example:
+ 		an\_s\+\zsfile
++	At least set a limit for the look-behind, see below.
+ 
+ 	"\@<=" and "\@<!" check for matches just before what follows.
+ 	Theoretically these matches could start anywhere before this position.
+@@ -672,20 +711,37 @@
+ 	Example			matches ~
+ 	\1\@<=,\([a-z]\+\)	",abc" in "abc,abc"
+ 
++\@123<=
++	Like "\@<=" but only look back 123 bytes. This avoids trying lots
++	of matches that are known to fail and make executing the pattern very
++	slow.  Example, check if there is a "<" just before "span":
++		/<\@1<=span
++	This will try matching "<" only one byte before "span", which is the
++	only place that works anyway.
++	After crossing a line boundary, the limit is relative to the end of
++	the line.  Thus the characters at the start of the line with the match
++	are not counted (this is just to keep it simple).
++	The number zero is the same as no limit.
++
+ 							*/\@<!*
+ \@<!	Matches with zero width if the preceding atom does NOT match just
+ 	before what follows.  Thus this matches if there is no position in the
+ 	current or previous line where the atom matches such that it ends just
+ 	before what follows.  |/zero-width| {not in Vi}
+-	Like '(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
++	Like "(?<!pattern)" in Perl, but Vim allows non-fixed-width patterns.
+ 	The match with the preceding atom is made to end just before the match
+ 	with what follows, thus an atom that ends in ".*" will work.
+ 	Warning: This can be slow (because many positions need to be checked
+-	for a match).
++	for a match).  Use a limit if you can, see below.
+ 	Example			matches ~
+ 	\(foo\)\@<!bar		any "bar" that's not in "foobar"
+ 	\(\/\/.*\)\@<!in	"in" which is not after "//"
+ 
++\@123<!
++	Like "\@<!" but only look back 123 bytes. This avoids trying lots of
++	matches that are known to fail and make executing the pattern very
++	slow.
++
+ 							*/\@>*
+ \@>	Matches the preceding atom like matching a whole pattern. {not in Vi}
+ 	Like "(?>pattern)" in Perl.
+@@ -923,7 +979,7 @@
+ \l	lowercase character:		[a-z]		*/\l*
+ \L	non-lowercase character:	[^a-z]		*/\L*
+ \u	uppercase character:		[A-Z]		*/\u*
+-\U	non-uppercase character		[^A-Z]		*/\U*
++\U	non-uppercase character:	[^A-Z]		*/\U*
+ 
+ 	NOTE: Using the atom is faster than the [] form.
+ 
+@@ -948,7 +1004,8 @@
+ ~	matches the last given substitute string	*/~* */\~*
+ 
+ \(\)	A pattern enclosed by escaped parentheses.	*/\(* */\(\)* */\)*
+-	E.g., "\(^a\)" matches 'a' at the start of a line.  *E51* *E54* *E55*
++	E.g., "\(^a\)" matches 'a' at the start of a line.
++	*E51* *E54* *E55* *E872* *E873*
+ 
+ \1      Matches the same string that was matched by	*/\1* *E65*
+ 	the first sub-expression in \( and \). {not in Vi}
+@@ -979,6 +1036,8 @@
+ 	[xyz]		any 'x', 'y' or 'z'
+ 	[a-zA-Z]$	any alphabetic character at the end of a line
+ 	\c[a-z]$	same
++	[Ð-ÑÐÑ]		Russian alphabet (with utf-8 and cp1251)
++
+ 								*/[\n]*
+ 	With "\_" prepended the collection also includes the end-of-line.
+ 	The same can be done by including "\n" in the collection.  The
+@@ -1027,11 +1086,9 @@
+ 	  These items only work for 8-bit characters.
+ 							*/[[=* *[==]*
+ 	- An equivalence class.  This means that characters are matched that
+-	  have almost the same meaning, e.g., when ignoring accents.  The form
+-	  is:
++	  have almost the same meaning, e.g., when ignoring accents.  This
++	  only works for Unicode, latin1 and latin9.  The form is:
+ 		[=a=]
+-	  Currently this is only implemented for latin1.  Also works for the
+-	  latin1 characters in utf-8 and latin9.
+ 							*/[[.* *[..]*
+ 	- A collation element.  This currently simply accepts a single
+ 	  character in the form:
+@@ -1047,6 +1104,8 @@
+ 	  any character that's not in "^]-\bdertnoUux".  "[\xyz]" matches '\',
+ 	  'x', 'y' and 'z'.  It's better to use "\\" though, future expansions
+ 	  may use other characters after '\'.
++	- Omitting the trailing ] is not considered an error. "[]" works like
++	  "[]]", it matches the ']' character.
+ 	- The following translations are accepted when the 'l' flag is not
+ 	  included in 'cpoptions' {not in Vi}:
+ 		\e	<Esc>
+@@ -1152,6 +1211,8 @@
+ Thus only the base characters need to match, the composing characters may be
+ different and the number of composing characters may differ.  Only relevant
+ when 'encoding' is "utf-8".
++Exception: If the pattern starts with one or more composing characters, these
++must match.
+ 
+ When a composing character appears at the start of the pattern of after an
+ item that doesn't include the composing character, a match is found at any
+@@ -1161,8 +1222,20 @@
+ composing character by itself, except that it doesn't matter what comes before
+ this.
+ 
+-The order of composing characters matters, even though changing the order
+-doesn't change what a character looks like.  This may change in the future.
++The order of composing characters does not matter.  Also, the text may have
++more composing characters than the pattern, it still matches.  But all
++composing characters in the pattern must be found in the text.
++
++Suppose B is a base character and x and y are composing characters:
++	pattern		text		match ~
++	Bxy		Bxy		yes (perfect match)
++	Bxy		Byx		yes (order ignored)
++	Bxy		By		no (x missing)
++	Bxy		Bx		no (y missing)
++	Bx		Bx		yes (perfect match)
++	Bx		By		no (x missing)
++	Bx		Bxy		yes (extra y ignored)
++	Bx		Byx		yes (extra y ignored)
+ 
+ ==============================================================================
+ 9. Compare with Perl patterns				*perl-patterns*
+diff -Naur vim73.orig/runtime/doc/pi_getscript.txt vim73/runtime/doc/pi_getscript.txt
+--- vim73.orig/runtime/doc/pi_getscript.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pi_getscript.txt	2013-06-07 17:07:09.412315131 +0000
+@@ -1,15 +1,21 @@
+-*pi_getscript.txt*  For Vim version 7.3.  Last change: 2009 Oct 14
++*pi_getscript.txt*  For Vim version 7.0.  Last change: 2012 Apr 07
+ >
+-		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell, Jr.
++		GETSCRIPT REFERENCE MANUAL  by Charles E. Campbell
+ <
+-Authors:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamilyA.Mbiz>
++Authors:  Charles E. Campbell  <NdrOchip@ScampbellPfamilyA.Mbiz>
+ 	  (remove NOSPAM from the email address)
+ 						*GetLatestVimScripts-copyright*
+-Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.	*glvs-copyright*
+-           The VIM LICENSE applies to getscript.vim and
+-           pi_getscript.txt (see |copyright|) except use
+-           "getscript" instead of "Vim".  No warranty, express or implied.
+-	   Use At-Your-Own-Risk.
++Copyright: (c) 2004-2012 by Charles E. Campbell	*glvs-copyright*
++	The VIM LICENSE (see |copyright|) applies to the files in this
++	package, including getscriptPlugin.vim, getscript.vim,
++	GetLatestVimScripts.dist, and pi_getscript.txt, except use "getscript"
++	instead of "VIM".  Like anything else that's free, getscript and its
++	associated files are provided *as is* and comes with no warranty of
++	any kind, either expressed or implied.  No guarantees of
++	merchantability.  No guarantees of suitability for any purpose.  By
++	using this plugin, you agree that in no event will the copyright
++	holder be liable for any damages resulting from the use of this
++	software. Use at your own risk!
+ 
+ Getscript is a plugin that simplifies retrieval of the latest versions of the
+ scripts that you yourself use!  Typing |:GLVS| will invoke getscript; it will
+@@ -77,7 +83,9 @@
+ 3. GetLatestVimScripts Usage				*glvs-usage* *:GLVS*
+ 
+ Unless it has been defined elsewhere, >
++
+ 	:GLVS
++
+ will invoke GetLatestVimScripts().  If some other plugin has defined that
+ command, then you may type
+ >
+@@ -127,7 +135,8 @@
+ 	http://vim.sourceforge.net/scripts/script.php?script_id=40
+ 
+ The "40" happens to be a ScriptID that GetLatestVimScripts needs to
+-download the associated page.
++download the associated page, and is assigned by vim.sf.net itself
++during initial uploading of the plugin.
+ 
+ The second number on each line gives the script's SourceID.  The SourceID
+ records the count of uploaded scripts as determined by vim.sf.net; hence it
+@@ -151,19 +160,39 @@
+ script is automatically installable.  Getscript will also use this line to
+ help build the GetLatestVimScripts.dat file, by including a line such as: >
+ 
+-	884 1 AutoAlign.vim
++	884 1 :AutoInstall: AutoAlign.vim
+ <
+-in it an AutoAlign.vim line isn't already in GetLatestVimScripts.dat file.
++assuming that such a line isn't already in GetLatestVimScripts.dat file.
+ See |glvs-plugins| for more.  Thus, GetLatestVimScripts thus provides a
+ comprehensive ability to keep your plugins up-to-date!
+ 
++In summary:
++
++  * Optionally tell getscript that it is allowed to build/append a
++    GetLatestVimScripts.dat file based upon already installed plugins: >
++	let g:GetLatestVimScripts_allowautoinstall=1
++<
++  * A line such as >
++	" GetLatestVimScripts: 884  1 :AutoInstall: AutoAlign.vim
++<   in an already-downloaded plugin constitutes the concurrence of the
++    plugin author that getscript may do AutoInstall.  Not all plugins
++    may be AutoInstall-able, and the plugin's author is best situated
++    to know whether or not his/her plugin will AutoInstall properly.
++
++  * A line such as >
++	884 1 :AutoInstall: AutoAlign.vim
++<   in your GetLatestVimScripts.dat file constitutes your permission
++    to getscript to do AutoInstall.  AutoInstall requires both your
++    and the plugin author's permission.  See |GetLatestVimScripts_dat|.
++
++
+ 						*GetLatestVimScripts_dat*
+ As an example of a <GetLatestVimScripts.dat> file:
+ >
+     ScriptID SourceID Filename
+     --------------------------
+-    294 1 Align.vim
+-    120 2 decho.vim
++    294 1 :AutoInstall: Align.vim
++    120 2 Decho.vim
+      40 3 DrawIt.tar.gz
+     451 4 EasyAccents.vim
+     195 5 engspchk.vim
+@@ -201,8 +230,8 @@
+ 	                        ^
+ 	                    scriptid
+ <
+-NOTE: :AutoInstall: is a plugin-author option, not a GetLatestVimScripts.dat~
+-      entry!~
++NOTE: The :AutoInstall: feature requires both the plugin author's and~
++      the user's permission to operate!~
+ 
+ GetLatestVimScripts commands for those scripts are then appended, if not
+ already present, to the user's GetLatest/GetLatestVimScripts.dat file.  It is
+@@ -210,7 +239,7 @@
+ plugins depend upon.
+ 
+ Now, as an author, you probably don't want GetLatestVimScripts to download
+-your own scripts for you yourself, thereby overwriting your not-yet-released
++your own scripts atop your own copy, thereby overwriting your not-yet-released
+ hard work.  GetLatestVimScripts provides a solution for this:  put
+ >
+ 	0 0 yourscriptname
+@@ -314,6 +343,11 @@
+ 	default= $HOME/vimfiles (windows)
+ 		Override where :AutoInstall: scripts will be installed.
+ 		Doesn't override vimball installation.
++>
++	g:GetLatestVimScripts_scriptaddr
++<       default='http://vim.sourceforge.net/script.php?script_id='
++		Override this if your system needs
++	  ...  ='http://vim.sourceforge.net/script/script.php?script_id='
+ 
+ ==============================================================================
+ 8. GetLatestVimScripts Algorithm		*glvs-algorithm* *glvs-alg*
+@@ -351,6 +385,15 @@
+ ==============================================================================
+ 9. GetLatestVimScripts History		*getscript-history* *glvs-hist* {{{1
+ 
++v35 Apr 07, 2012 : * (MengHuan Yu) pointed out that the script url has
++		     changed (somewhat).  However, it doesn't work, and
++		     the original one does (under Linux). I'll make it
++		     yet-another-option.
++v34 Jun 23, 2011 : * handles additional decompression options for tarballs
++                     (tgz taz tbz txz)
++v33 May 31, 2011 : * using fnameescape() instead of escape()
++		   * *.xz support
++v32 Jun 19, 2010 : * (Jan Steffens) added support for xz compression
+ v31 Jun 29, 2008 : * (Bill McCarthy) fixed having hls enabled with getscript
+ 		   * (David Schaefer) the acd option interferes with vimballs
+ 		     Solution: bypass the acd option
+diff -Naur vim73.orig/runtime/doc/pi_gzip.txt vim73/runtime/doc/pi_gzip.txt
+--- vim73.orig/runtime/doc/pi_gzip.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pi_gzip.txt	2013-06-07 17:07:09.418981779 +0000
+@@ -1,4 +1,4 @@
+-*pi_gzip.txt*   For Vim version 7.3.  Last change: 2002 Oct 29
++*pi_gzip.txt*   For Vim version 7.3.  Last change: 2012 Jul 19
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -25,6 +25,8 @@
+ 	*.Z		compress (Lempel-Ziv)
+ 	*.gz		gzip
+ 	*.bz2		bzip2
++	*.lzma		lzma
++	*.xz		xz
+ 
+ That's actually the only thing you need to know.  There are no options.
+ 
+diff -Naur vim73.orig/runtime/doc/pi_netrw.txt vim73/runtime/doc/pi_netrw.txt
+--- vim73.orig/runtime/doc/pi_netrw.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pi_netrw.txt	2013-06-07 17:07:09.482314931 +0000
+@@ -1,22 +1,21 @@
+-*pi_netrw.txt*  For Vim version 7.3.  Last change: 2010 Jul 28
++*pi_netrw.txt*  For Vim version 7.3.  Last change: 2013 May 18
+ 
+-	    -----------------------------------------------------
+-	    NETRW REFERENCE MANUAL    by Charles E. Campbell, Jr.
+-	    -----------------------------------------------------
+-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
++	    ------------------------------------------------
++	    NETRW REFERENCE MANUAL    by Charles E. Campbell
++	    ------------------------------------------------
++Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
+ 	  (remove NOSPAM from Campbell's email first)
+ 
+-Copyright: Copyright (C) 1999-2010 Charles E Campbell, Jr    *netrw-copyright*
+-	   Permission is hereby granted to use and distribute this code, with
+-	   or without modifications, provided that this copyright notice is
+-	   copied with it. Like anything else that's free, netrw.vim,
+-	   netrwPlugin.vim, netrwFileHandlers.vim, netrwSettings.vim,
+-	   syntax/netrw.vim, and pi_netrw.txt are provided *as is* and comes
+-	   with no warranty of any kind, either expressed or implied.  No
+-	   guarantees of merchantability.  No guarantees of suitability for
+-	   any purpose.  By using this plugin, you agree that in no event will
+-	   the copyright holder be liable for any damages resulting from the
+-	   use of this software.
++Copyright: Copyright (C) 1999-2013 Charles E Campbell    *netrw-copyright*
++	The VIM LICENSE applies to the files in this package, including
++	netrw.vim, pi_netrw.txt, netrwFileHandlers.vim, netrwSettings.vim, and
++	syntax/netrw.vim.  Like anything else that's free, netrw.vim and its
++	associated files are provided *as is* and comes with no warranty of
++	any kind, either expressed or implied.  No guarantees of
++	merchantability.  No guarantees of suitability for any purpose.  By
++	using this plugin, you agree that in no event will the copyright
++	holder be liable for any damages resulting from the use of this
++	software. Use at your own risk!
+ 
+ 
+ 		*dav*    *ftp*    *netrw-file*  *rcp*    *scp*
+@@ -26,82 +25,87 @@
+ ==============================================================================
+ 1. Contents						*netrw-contents* {{{1
+ 
+-1.  Contents.............................................|netrw-contents|
+-2.  Starting With Netrw..................................|netrw-start|
+-3.  Netrw Reference......................................|netrw-ref|
+-      EXTERNAL APPLICATIONS AND PROTOCOLS................|netrw-externapp|
+-      READING............................................|netrw-read|
+-      WRITING............................................|netrw-write|
+-      SOURCING...........................................|netrw-source|
+-      DIRECTORY LISTING..................................|netrw-dirlist|
+-      CHANGING THE USERID AND PASSWORD...................|netrw-chgup|
+-      VARIABLES AND SETTINGS.............................|netrw-variables|
+-      PATHS..............................................|netrw-path|
+-4.  Network-Oriented File Transfer.......................|netrw-xfer|
+-      NETRC..............................................|netrw-netrc|
+-      PASSWORD...........................................|netrw-passwd|
+-5.  Activation...........................................|netrw-activate|
+-6.  Transparent File Editing.............................|netrw-transparent|
+-7.  Ex Commands..........................................|netrw-ex|
+-8.  Variables and Options................................|netrw-var|
+-9.  Browsing.............................................|netrw-browse|
+-      Introduction To Browsing...........................|netrw-intro-browse|
+-      Quick Reference: Maps..............................|netrw-browse-maps|
+-      Quick Reference: Commands..........................|netrw-browse-cmds|
+-      Bookmarking A Directory............................|netrw-mb|
+-      Browsing...........................................|netrw-cr|
+-      Browsing With A Horizontally Split Window..........|netrw-o|
+-      Browsing With A New Tab............................|netrw-t|
+-      Browsing With A Vertically Split Window............|netrw-v|
+-      Change Listing Style.(thin wide long tree).........|netrw-i|
+-      Changing To A Bookmarked Directory.................|netrw-gb|
+-      Changing To A Predecessor Directory................|netrw-u|
+-      Changing To A Successor Directory..................|netrw-U|
+-      Customizing Browsing With A User Function..........|netrw-x|
+-      Deleting Bookmarks.................................|netrw-mB|
+-      Deleting Files Or Directories......................|netrw-D|
+-      Directory Exploring Commands.......................|netrw-explore|
+-      Exploring With Stars and Patterns..................|netrw-star|
+-      Displaying Information About File..................|netrw-qf|
+-      Edit File Or Directory Hiding List.................|netrw-ctrl-h|
+-      Editing The Sorting Sequence.......................|netrw-S|
+-      Going Up...........................................|netrw--|
+-      Hiding Files Or Directories........................|netrw-a|
+-      Improving Browsing.................................|netrw-ssh-hack|
+-      Listing Bookmarks And History......................|netrw-qb|
+-      Making A New Directory.............................|netrw-d|
+-      Making The Browsing Directory The Current Directory|netrw-c|
+-      Marking Files......................................|netrw-mf|
+-      Marking Files By Regular Expression................|netrw-mr|
+-      Marked Files: Arbitrary Command....................|netrw-mx|
+-      Marked Files: Compression And Decompression........|netrw-mz|
+-      Marked Files: Copying..............................|netrw-mc|
+-      Marked Files: Diff.................................|netrw-md|
+-      Marked Files: Editing..............................|netrw-me|
+-      Marked Files: Grep.................................|netrw-mg|
+-      Marked Files: Hiding and Unhiding by Suffix........|netrw-mh|
+-      Marked Files: Moving...............................|netrw-mm|
+-      Marked Files: Printing.............................|netrw-mp|
+-      Marked Files: Sourcing.............................|netrw-ms|
+-      Marked Files: Tagging..............................|netrw-mT|
+-      Marked Files: Setting the Target Directory.........|netrw-mt|
+-      Marked Files: Unmarking............................|netrw-mu|
+-      Netrw Browser Variables............................|netrw-browser-var|
+-      Netrw Browsing And Option Incompatibilities........|netrw-incompatible|
+-      Netrw Settings.....................................|netrw-settings|
+-      Obtaining A File...................................|netrw-O|
+-      Preview Window.....................................|netrw-p|
+-      Previous Window....................................|netrw-P|
+-      Refreshing The Listing.............................|netrw-ctrl-l|
+-      Renaming Files Or Directories......................|netrw-move|
+-      Reversing Sorting Order............................|netrw-r|
+-      Selecting Sorting Style............................|netrw-s|
+-      Setting Editing Window.............................|netrw-C|
+-10. Problems and Fixes...................................|netrw-problems|
+-11. Debugging Netrw Itself...............................|netrw-debug|
+-12. History..............................................|netrw-history|
+-13. Todo.................................................|netrw-todo|
+-14. Credits..............................................|netrw-credits|
++1.  Contents..............................................|netrw-contents|
++2.  Starting With Netrw...................................|netrw-start|
++3.  Netrw Reference.......................................|netrw-ref|
++      EXTERNAL APPLICATIONS AND PROTOCOLS.................|netrw-externapp|
++      READING.............................................|netrw-read|
++      WRITING.............................................|netrw-write|
++      SOURCING............................................|netrw-source|
++      DIRECTORY LISTING...................................|netrw-dirlist|
++      CHANGING THE USERID AND PASSWORD....................|netrw-chgup|
++      VARIABLES AND SETTINGS..............................|netrw-variables|
++      PATHS...............................................|netrw-path|
++4.  Network-Oriented File Transfer........................|netrw-xfer|
++      NETRC...............................................|netrw-netrc|
++      PASSWORD............................................|netrw-passwd|
++5.  Activation............................................|netrw-activate|
++6.  Transparent Remote File Editing.......................|netrw-transparent|
++7.  Ex Commands...........................................|netrw-ex|
++8.  Variables and Options.................................|netrw-variables|
++9.  Browsing..............................................|netrw-browse|
++      Introduction To Browsing............................|netrw-intro-browse|
++      Quick Reference: Maps...............................|netrw-browse-maps|
++      Quick Reference: Commands...........................|netrw-browse-cmds|
++      Bookmarking A Directory.............................|netrw-mb|
++      Browsing............................................|netrw-cr|
++      Browsing With A Horizontally Split Window...........|netrw-o|
++      Browsing With A New Tab.............................|netrw-t|
++      Browsing With A Vertically Split Window.............|netrw-v|
++      Change Listing Style.(thin wide long tree)..........|netrw-i|
++      Changing To A Bookmarked Directory..................|netrw-gb|
++      Changing To A Predecessor Directory.................|netrw-u|
++      Changing To A Successor Directory...................|netrw-U|
++      Customizing Browsing With A User Function...........|netrw-x|
++      Deleting Bookmarks..................................|netrw-mB|
++      Deleting Files Or Directories.......................|netrw-D|
++      Directory Exploring Commands........................|netrw-explore|
++      Exploring With Stars and Patterns...................|netrw-star|
++      Displaying Information About File...................|netrw-qf|
++      Edit File Or Directory Hiding List..................|netrw-ctrl-h|
++      Editing The Sorting Sequence........................|netrw-S|
++      Forcing treatment as a file or directory............|netrw-gd| |netrw-gf|
++      Going Up............................................|netrw--|
++      Hiding Files Or Directories.........................|netrw-a|
++      Improving Browsing..................................|netrw-ssh-hack|
++      Listing Bookmarks And History.......................|netrw-qb|
++      Making A New Directory..............................|netrw-d|
++      Making The Browsing Directory The Current Directory.|netrw-c|
++      Marking Files.......................................|netrw-mf|
++      Unmarking Files.....................................|netrw-mF|
++      Marking Files By QuickFix List......................|netrw-qF|
++      Marking Files By Regular Expression.................|netrw-mr|
++      Marked Files: Arbitrary Command.....................|netrw-mx|
++      Marked Files: Compression And Decompression.........|netrw-mz|
++      Marked Files: Copying...............................|netrw-mc|
++      Marked Files: Diff..................................|netrw-md|
++      Marked Files: Editing...............................|netrw-me|
++      Marked Files: Grep..................................|netrw-mg|
++      Marked Files: Hiding and Unhiding by Suffix.........|netrw-mh|
++      Marked Files: Moving................................|netrw-mm|
++      Marked Files: Printing..............................|netrw-mp|
++      Marked Files: Sourcing..............................|netrw-ms|
++      Marked Files: Setting the Target Directory..........|netrw-mt|
++      Marked Files: Tagging...............................|netrw-mT|
++      Marked Files: Target Directory Using Bookmarks......|netrw-Tb|
++      Marked Files: Target Directory Using History........|netrw-Th|
++      Marked Files: Unmarking.............................|netrw-mu|
++      Netrw Browser Variables.............................|netrw-browser-var|
++      Netrw Browsing And Option Incompatibilities.........|netrw-incompatible|
++      Netrw Settings Window...............................|netrw-settings-window|
++      Obtaining A File....................................|netrw-O|
++      Preview Window......................................|netrw-p|
++      Previous Window.....................................|netrw-P|
++      Refreshing The Listing..............................|netrw-ctrl-l|
++      Reversing Sorting Order.............................|netrw-r|
++      Renaming Files Or Directories.......................|netrw-R|
++      Selecting Sorting Style.............................|netrw-s|
++      Setting Editing Window..............................|netrw-C|
++10. Problems and Fixes....................................|netrw-problems|
++11. Debugging Netrw Itself................................|netrw-debug|
++12. History...............................................|netrw-history|
++13. Todo..................................................|netrw-todo|
++14. Credits...............................................|netrw-credits|
+ 
+ {Vi does not have any of this}
+ 
+@@ -140,6 +144,16 @@
+ 	...
+ 	default          login USERID password "PASSWORD"
+ <
++Windows' ftp doesn't support .netrc; however, one may have in one's .vimrc:  >
++
++   let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\MyUserName\MACHINE'
++<
++Netrw will substitute the host's machine name for "MACHINE" from the url it is
++attempting to open, and so one may specify >
++	userid
++	password
++for each site in a separate file: c:\Users\MyUserName\MachineName.
++
+ Now about browsing -- when you just want to look around before editing a
+ file.  For browsing on your current host, just "edit" a directory: >
+ 
+@@ -180,26 +194,26 @@
+ 
+ 	Protocol  Variable	    Default Value
+ 	--------  ----------------  -------------
+-	   dav:  *g:netrw_dav_cmd*   = "cadaver"     if cadaver is executable
+-	   dav:   g:netrw_dav_cmd    = "curl -o"     elseif curl is available
+-	 fetch:  *g:netrw_fetch_cmd* = "fetch -o"    if fetch is available
+-	   ftp:  *g:netrw_ftp_cmd*   = "ftp"
+-	  http:  *g:netrw_http_cmd*  = "elinks"     if   elinks  is available
++	   dav:   *g:netrw_dav_cmd*    = "cadaver"    if cadaver is executable
++	   dav:   g:netrw_dav_cmd    = "curl -o"    elseif curl is available
++	 fetch:   *g:netrw_fetch_cmd*  = "fetch -o"   if fetch is available
++	   ftp:   *g:netrw_ftp_cmd*    = "ftp"
++	  http:   *g:netrw_http_cmd*   = "elinks"     if   elinks  is available
+ 	  http:   g:netrw_http_cmd   = "links"      elseif links is available
+ 	  http:   g:netrw_http_cmd   = "curl"       elseif curl  is available
+ 	  http:   g:netrw_http_cmd   = "wget"       elseif wget  is available
+           http:   g:netrw_http_cmd   = "fetch"      elseif fetch is available
+-	   rcp:  *g:netrw_rcp_cmd*   = "rcp"
+-	 rsync:  *g:netrw_rsync_cmd* = "rsync -a"
+-	   scp:  *g:netrw_scp_cmd*   = "scp -q"
+-	  sftp:  *g:netrw_sftp_cmd*  = "sftp"
++	   rcp:   *g:netrw_rcp_cmd*    = "rcp"
++	 rsync:   *g:netrw_rsync_cmd*  = "rsync -a"
++	   scp:   *g:netrw_scp_cmd*    = "scp -q"
++	  sftp:   *g:netrw_sftp_cmd*   = "sftp"
+ 
+ 	*g:netrw_http_xcmd* : the option string for http://... protocols are
+ 	specified via this variable and may be independently overridden.  By
+ 	default, the option arguments for the http-handling commands are: >
+ 
+ 		    elinks : "-source >"
+-		    links  : "-source >"
++		    links  : "-dump >"
+ 		    curl   : "-o"
+ 		    wget   : "-q -O"
+ 		    fetch  : "-o"
+@@ -272,7 +286,7 @@
+ 	:Nsource "scp://[user@]machine[[:#]port]/path"	uses scp
+ 	:Nsource "sftp://[user@]machine/path"		uses sftp
+ 
+-DIRECTORY LISTING					*netrw-dirlist* {{{2
++DIRECTORY LISTING			*netrw-trailingslash* *netrw-dirlist* {{{2
+ 
+ 	One may browse a directory to get a listing by simply attempting to
+ 	edit the directory: >
+@@ -280,34 +294,42 @@
+ 		:e scp://[user]@hostname/path/
+ 		:e ftp://[user]@hostname/path/
+ <
+-	For remote directories (ie. those using scp or ftp), that trailing
+-	"/" is necessary (the slash tells netrw to treat the argument as a
+-	directory to browse instead of a file to download).
+-
+-	However, the Nread command can also be used to accomplish this:
++	For remote directory listings (ie. those using scp or ftp), that
++	trailing "/" is necessary (the slash tells netrw to treat the argument
++	as a directory to browse instead of as a file to download).
+ 
+-	:Nread [protocol]://[user]@hostname/path/
++	The Nread command may also be used to accomplish this (again, that
++	trailing slash is necessary): >
+ 
++		:Nread [protocol]://[user]@hostname/path/
++<
+ 					*netrw-login* *netrw-password*
+ CHANGING USERID AND PASSWORD		*netrw-chgup* *netrw-userpass* {{{2
+ 
+ 	Attempts to use ftp will prompt you for a user-id and a password.
+-	These will be saved in global variables g:netrw_uid and
+-	s:netrw_passwd; subsequent uses of ftp will re-use those two items to
+-	simplify the further use of ftp.  However, if you need to use a
+-	different user id and/or password, you'll want to call NetUserPass()
++	These will be saved in global variables |g:netrw_uid| and
++	|s:netrw_passwd|; subsequent use of ftp will re-use those two strings,
++	thereby simplifying use of ftp.  However, if you need to use a
++	different user id and/or password, you'll want to call |NetUserPass()|
+ 	first.  To work around the need to enter passwords, check if your ftp
+ 	supports a <.netrc> file in your home directory.  Also see
+ 	|netrw-passwd| (and if you're using ssh/scp hoping to figure out how
+-	to not need to use passwords, look at |netrw-ssh-hack|).
++	to not need to use passwords for scp, look at |netrw-ssh-hack|).
+ 
+ 	:NetUserPass [uid [password]]		-- prompts as needed
+ 	:call NetUserPass()			-- prompts for uid and password
+ 	:call NetUserPass("uid")		-- prompts for password
+ 	:call NetUserPass("uid","password")	-- sets global uid and password
+ 
++(Related topics: |ftp| |netrw-userpass| |netrw-start|)
++
+ NETRW VARIABLES AND SETTINGS				*netrw-variables* {{{2
+-(also see: |netrw-browser-var| |netrw-protocol| |netrw-settings| |netrw-var|)
++    (Also see:
++    |netrw-browser-var|     : netrw browser option variables
++    |netrw-protocol|        : file transfer protocol option variables
++    |netrw-settings|        : additional file transfer options
++    |netrw-browser-options| : these options affect browsing directories
++    )
+ 
+ Netrw provides a lot of variables which allow you to customize netrw to your
+ preferences.  One way to look at them is via the command :NetrwSettings (see
+@@ -316,95 +338,102 @@
+ |netrw-externapp|:
+ 
+  *b:netrw_lastfile*	last file Network-read/written retained on a
+-		      per-buffer basis (supports plain :Nw )
++			per-buffer basis (supports plain :Nw )
+ 
+  *g:netrw_bufsettings*	the settings that netrw buffers have
+- 		      (default) noma nomod nonu nowrap ro nobl
++ 			(default) noma nomod nonu nowrap ro nobl
+ 
+  *g:netrw_chgwin*	specifies a window number where file edits will take
+-		      place.  (also see |netrw-C|)
+-		      (default) not defined
++			place.  (also see |netrw-C|)
++			(default) not defined
+ 
+  *g:Netrw_funcref*	specifies a function (or functions) to be called when
+-		      netrw edits a file.  The file is first edited, and
+-		      then the function reference (|Funcref|) is called.
+-		      This variable may also hold a |List| of Funcrefs.
+-		      (default) not defined
++			netrw edits a file.  The file is first edited, and
++			then the function reference (|Funcref|) is called.
++			This variable may also hold a |List| of Funcrefs.
++			(default) not defined.  (the capital in g:Netrw...
++			is required by its holding a function reference)
+ >
+ 			    Example: place in .vimrc; affects all file opening
+ 			    fun! MyFuncRef()
+ 			    endfun
+ 			    let g:Netrw_funcref= function("MyFuncRef")
+ <
+- *g:netrw_ftp*		if it doesn't exist, use default ftp
+-		      =0 use default ftp		       (uid password)
+-		      =1 use alternate ftp method	  (user uid password)
+-		      If you're having trouble with ftp, try changing the
+-		      value of this variable to see if the alternate ftp
+-		      method works for your setup.
++ *g:netrw_ftp*		   if it doesn't exist, use default ftp
++			=0 use default ftp		       (uid password)
++			=1 use alternate ftp method	  (user uid password)
++			   If you're having trouble with ftp, try changing the
++			   value of this variable to see if the alternate ftp
++			   method works for your setup.
++
++ *g:netrw_ftp_options*     Chosen by default, these options are supposed to turn
++			 interactive prompting off and to restrain ftp from
++			 attempting auto-login upon initial connection.
++			 However, it appears that not all ftp implementations
++			 support this (ex. ncftp).
++		        ="-i -n"
+ 
+  *g:netrw_ftpextracmd*	default: doesn't exist
+-		      If this variable exists, then any string it contains
+-		      will be placed into the commands set to your ftp
+-		      client.  As an example:
+-		        ="passive"
++			If this variable exists, then any string it contains
++			will be placed into the commands set to your ftp
++			client.  As an example:
++			   ="passive"
+ 
+  *g:netrw_ftpmode*	="binary"				    (default)
+-		      ="ascii"
++			="ascii"
+ 
+  *g:netrw_ignorenetrc*	=0 (default for linux, cygwin)
+-		      =1 If you have a <.netrc> file but it doesn't work and
+-		         you want it ignored, then set this variable as
+-		         shown. (default for Windows + cmd.exe)
++			=1 If you have a <.netrc> file but it doesn't work and
++			   you want it ignored, then set this variable as
++			   shown. (default for Windows + cmd.exe)
+ 
+  *g:netrw_menu*		=0 disable netrw's menu
+-		      =1 (default) netrw's menu enabled
++			=1 (default) netrw's menu enabled
+ 
+  *g:netrw_nogx*		if this variable exists, then the "gx" map will not
+-		      be available (see |netrw-gx|)
++			be available (see |netrw-gx|)
+ 
+  *g:netrw_uid*		(ftp) user-id,      retained on a per-vim-session basis
+- *s:netrw_passwd*	(ftp) password,     retained on a per-vim-session basis
++ *s:netrw_passwd* 	(ftp) password,     retained on a per-vim-session basis
+ 
+  *g:netrw_preview*	=0 (default) preview window shown in a horizontally
+-                         split window
+-		      =1 preview window shown in a vertically split window.
+-		      Also affects the "previous window" (see |netrw-P|) in
+-		      the same way.
+-
+- *g:netrw_scpport*      = "-P" : option to use to set port for scp
+- *g:netrw_sshport*      = "-p" : option to use to set port for ssh
+-
+- *g:netrw_sepchr*	=\0xff
+-		      =\0x01 for enc == euc-jp (and perhaps it should be for
+-			                          others, too, please let me
+-						  know)
+-		      Separates priority codes from filenames internally.
+-		      See |netrw-p12|.
++			   split window
++			=1 preview window shown in a vertically split window.
++			   Also affects the "previous window" (see |netrw-P|) in
++			   the same way.
++
++ *g:netrw_scpport*	= "-P" : option to use to set port for scp
++ *g:netrw_sshport*	= "-p" : option to use to set port for ssh
++
++ *g:netrw_sepchr* 	=\0xff
++			=\0x01 for enc == euc-jp (and perhaps it should be for
++			   others, too, please let me know)
++			   Separates priority codes from filenames internally.
++			   See |netrw-p12|.
+ 
+   *g:netrw_silent*	=0 : transfers done normally
+-		      =1 : transfers done silently
++			=1 : transfers done silently
+ 
+  *g:netrw_use_errorwindow* =1 : messages from netrw will use a separate one
+-                              line window.  This window provides reliable
++			      line window.  This window provides reliable
+ 			      delivery of messages. (default)
+ 			 =0 : messages from netrw will use echoerr ;
+ 			      messages don't always seem to show up this
+ 			      way, but one doesn't have to quit the window.
+ 
+  *g:netrw_win95ftp*	=1 if using Win95, will remove four trailing blank
+-		         lines that o/s's ftp "provides" on transfers
+-		      =0 force normal ftp behavior (no trailing line removal)
++			   lines that o/s's ftp "provides" on transfers
++			=0 force normal ftp behavior (no trailing line removal)
+ 
+- *g:netrw_cygwin*	=1 assume scp under windows is from cygwin. Also
+-		         permits network browsing to use ls with time and
+-		         size sorting (default if windows)
+-		      =0 assume Windows' scp accepts windows-style paths
+-		         Network browsing uses dir instead of ls
+-		      This option is ignored if you're using unix
++ *g:netrw_cygwin* 	=1 assume scp under windows is from cygwin. Also
++			   permits network browsing to use ls with time and
++			   size sorting (default if windows)
++			=0 assume Windows' scp accepts windows-style paths
++			   Network browsing uses dir instead of ls
++			   This option is ignored if you're using unix
+ 
+  *g:netrw_use_nt_rcp*	=0 don't use the rcp of WinNT, Win2000 and WinXP
+-		      =1 use WinNT's rcp in binary mode         (default)
++			=1 use WinNT's rcp in binary mode         (default)
+ 
+ PATHS							*netrw-path* {{{2
+ 
+@@ -477,6 +506,9 @@
+ 	let g:netrw_scp_cmd = '"c:\Program Files\PuTTY\pscp.exe" -q -batch'
+ 	let g:netrw_sftp_cmd= '"c:\Program Files\PuTTY\psftp.exe"'
+ <
++(note: it has been reported that windows 7 with putty v0.6's "-batch" option
++       doesn't work, so its best to leave it off for that system)
++
+ See |netrw-p8| for more about putty, pscp, psftp, etc.
+ 
+ Ftp, an old protocol, seems to be blessed by numerous implementations.
+@@ -500,7 +532,24 @@
+ >
+ 	vim ftp://[user@]machine[[:#]portnumber]/path
+ <
+-However, ftp will often need to query the user for the userid and password.
++Windows provides an ftp (typically c:\Windows\System32\ftp.exe) which uses
++an option, -s:filename (filename can and probably should be a full path)
++which contains ftp commands which will be automatically run whenever ftp
++starts.  You may use this feature to enter a user and password for one site: >
++	userid
++	password
++<					*netrw-windows-netrc*  *netrw-windows-s*
++If |g:netrw_ftp_cmd| contains -s:[path/]MACHINE, then (on Windows machines only)
++netrw will substitute the current machine name requested for ftp connections
++for MACHINE.  Hence one can have multiple machine.ftp files containing login
++and password for ftp.  Example: >
++
++    let g:netrw_ftp_cmd= 'c:\Windows\System32\ftp -s:C:\Users\Myself\MACHINE'
++    vim ftp://myhost.somewhere.net/
++will use a file >
++	C:\Users\Myself\myhost.ftp
++<
++Often, ftp will need to query the user for the userid and password.
+ The latter will be done "silently"; ie. asterisks will show up instead of
+ the actually-typed-in password.  Netrw will retain the userid and password
+ for subsequent read/writes from the most recent transfer so subsequent
+@@ -594,6 +643,9 @@
+ 	readable for others.  Don't forget that the system administrator can
+ 	still read the file!  Ie. for Linux/Unix: chmod 600 .netrc
+ 
++Even though Windows' ftp clients typically do not support .netrc, netrw has
++a work-around: see |netrw-windows-s|.
++
+ 
+ PASSWORD						*netrw-passwd*
+ 
+@@ -624,7 +676,7 @@
+ <
+ 
+ ==============================================================================
+-6. Transparent File Editing			*netrw-transparent* {{{1
++6. Transparent Remote File Editing			*netrw-transparent* {{{1
+ 
+ Transparent file transfers occur whenever a regular file read or write
+ (invoked via an |:autocmd| for |BufReadCmd|, |BufWriteCmd|, or |SourceCmd|
+@@ -698,13 +750,15 @@
+ 
+ 
+ ==============================================================================
+-8. Variables and Options		*netrw-options* *netrw-var* {{{1
++8. Variables and Options			*netrw-var* *netrw-settings* {{{1
+ 
+-(if you're interested in the netrw browser settings, see: |netrw-browser-var|)
++(also see: |netrw-options| |netrw-variables| |netrw-protocol|
++           |netrw-browser-settings| |netrw-browser-options| )
+ 
+ The <netrw.vim> script provides several variables which act as options to
+ affect <netrw.vim>'s file transfer behavior.  These variables typically may be
+ set in the user's <.vimrc> file: (see also |netrw-settings| |netrw-protocol|)
++						*netrw-options*
+ >
+                         -------------
+                         Netrw Options
+@@ -736,6 +790,7 @@
+                                 =1 use default method to do ftp >
+ 	-----------------------------------------------------------------------
+ <
++							*netrw-internal-variables*
+ The script will also make use of the following variables internally, albeit
+ temporarily.
+ >
+@@ -874,6 +929,7 @@
+      endfunction
+     endif
+ >
++(Related topics: |ftp| |netrw-userpass| |netrw-start|)
+ 
+ ==============================================================================
+ 9. Browsing		*netrw-browsing* *netrw-browse* *netrw-help* {{{1
+@@ -1023,6 +1079,7 @@
+ 	   v	Enter the file/directory under the cursor in a new   |netrw-v|
+ 		browser window.  A vertical split is used.
+ 	   x	View file with an associated program                 |netrw-x|
++	   X	Execute filename under cursor via |system()|           |netrw-X|
+ 
+ 	   %	Open a new file in netrw's current directory         |netrw-%|
+ 
+@@ -1036,8 +1093,8 @@
+ 	<2-leftmouse>	(gvim only) when:
+ 	                 * in a netrw-selected file, AND
+ 		         * |g:netrw_retmap| == 1     AND
+-		         * the user doesn't already have a <2-leftmouse> mapping
+-			   defined before netrw is autoloaded,
++		         * the user doesn't already have a <2-leftmouse>
++			   mapping defined before netrw is autoloaded,
+ 			then a double clicked leftmouse button will return
+ 			to the netrw browser window.  See |g:netrw_retmap|.
+ 	<s-leftmouse>	(gvim only) like mf, will mark files
+@@ -1129,25 +1186,26 @@
+ horizontal split is used.  (for vertical splitting, see |netrw-v|)
+ 
+ Normally, the o key splits the window horizontally with the new window and
+-cursor at the top.  To change to splitting the window horizontally with the
+-new window and cursor at the bottom, have
+-
+-	let g:netrw_alto = 1
+-
+-in your <.vimrc>.  (also see |netrw-t| |netrw-T| |netrw-v|)
++cursor at the top.
+ 
+ Associated setting variables: |g:netrw_alto| |g:netrw_winsize|
+ 
++Related Actions |netrw-cr| |netrw-p| |netrw-t| |netrw-v|
++Associated setting variables:
++   |g:netrw_alto|    control above/below splitting
++   |g:netrw_winsize| control initial sizing
+ 
+-BROWSING WITH A NEW TAB				*netrw-t* *netrw-T* {{{2
++BROWSING WITH A NEW TAB				*netrw-t*
+ 
+ Normally one enters a file or directory using the <cr>.  The "t" map
+ allows one to open a new window holding the new directory listing or file in
+-a new tab.  The "T" version puts the file or directory into a background tab
+-(see |gT|)
++a new tab.
+ 
+-Related actions:  |netrw-o| |netrw-v|
++If you'd like to have the new listing in a background tab, use |gT|.
+ 
++Related Actions |netrw-cr| |netrw-o| |netrw-p| |netrw-v|
++Associated setting variables:
++   |g:netrw_winsize| control initial sizing
+ 
+ BROWSING WITH A VERTICALLY SPLIT WINDOW			*netrw-v* {{{2
+ 
+@@ -1156,18 +1214,18 @@
+ vertical split is used.  (for horizontal splitting, see |netrw-o|)
+ 
+ Normally, the v key splits the window vertically with the new window and
+-cursor at the left.  To change to splitting the window vertically with the new
+-window and cursor at the right, have
+-
+-	let g:netrw_altv = 1
+-
+-in your <.vimrc>.  (also see: |netrw-o| |netrw-t| |netrw-T|)
++cursor at the left.
+ 
+ There is only one tree listing buffer; using "v" on a displayed subdirectory
+ will split the screen, but the same buffer will be shown twice.
+ 
+ Associated setting variable: |g:netrw_altv| |g:netrw_winsize|
+ 
++Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
++Associated setting variables:
++   |g:netrw_altv|    control right/left splitting
++   |g:netrw_winsize| control initial sizing
++
+ 
+ CHANGE LISTING STYLE  (THIN LONG WIDE TREE)   			*netrw-i* {{{2
+ 
+@@ -1196,6 +1254,18 @@
+ 	let g:netrw_liststyle= 4
+ the tree style will become your default listing style.
+ 
++One typical way to use the netrw tree display is to: >
++
++	vim .
++	(use i until a tree display shows)
++	navigate to a file
++	v  (edit as desired in vertically split window)
++	ctrl-w h  (to return to the netrw listing)
++	P (edit newly selected file in the previous window)
++	ctrl-w h  (to return to the netrw listing)
++	P (edit newly selected file in the previous window)
++	...etc...
++<
+ Associated setting variables: |g:netrw_liststyle| |g:netrw_maxfilenamelen|
+                               |g:netrw_timefmt|   |g:netrw_list_cmd|
+ 
+@@ -1214,6 +1284,8 @@
+ 	{cnt}gb
+ 
+ Any count may be used to reference any of the bookmarks.
++Note that |netrw-qb| shows both bookmarks and history; to go
++to a location stored in the history see |netrw-u| and |netrw-U|.
+ 
+ Related Topics:
+ 	|netrw-mB| how to delete bookmarks
+@@ -1225,10 +1297,17 @@
+ 
+ Every time you change to a new directory (new for the current session),
+ netrw will save the directory in a recently-visited directory history
+-list (unless g:netrw_dirhistmax is zero; by default, it's ten).  With the
++list (unless |g:netrw_dirhistmax| is zero; by default, it's ten).  With the
+ "u" map, one can change to an earlier directory (predecessor).  To do
+ the opposite, see |netrw-U|.
+ 
++The "u" map also accepts counts to go back in the history several slots.
++For your convenience, |netrw-qb| lists the history number which can be
++re-used in that count.
++
++See |g:netrw_dirhistmax| for how to control the quantity of history stack
++slots.
++
+ 
+ CHANGING TO A SUCCESSOR DIRECTORY		*netrw-U* *netrw-downdir* {{{2
+ 
+@@ -1236,6 +1315,11 @@
+ This map is the opposite of the "u" map. (see |netrw-u|)  Use the
+ q map to list both the bookmarks and history. (see |netrw-qb|)
+ 
++The "U" map also accepts counts to go forward in the history several slots.
++
++See |g:netrw_dirhistmax| for how to control the quantity of history stack
++slots.
++
+ 
+ NETRW CLEAN					*netrw-clean* *:NetrwClean*
+ 
+@@ -1368,7 +1452,8 @@
+ 
+ 	g:netrw_rmf_cmd: ssh HOSTNAME rm -f
+ 
+-Associated setting variable: |g:netrw_local_rmdir| |g:netrw_rm_cmd|
++Related topics: |netrw-d|
++Associated setting variable: |g:netrw_localrmdir| |g:netrw_rm_cmd|
+                              |g:netrw_rmdir_cmd|   |g:netrw_ssh_cmd|
+ 
+ 
+@@ -1502,7 +1587,7 @@
+ Associated setting variables: |g:netrw_hide| |g:netrw_list_hide|
+ Associated topics: |netrw-a| |netrw-gh| |netrw-mh|
+ 
+-
++					*netrw-sort-sequence*
+ EDITING THE SORTING SEQUENCE		*netrw-S* *netrw-sortsequence* {{{2
+ 
+ When "Sorted by" is name, one may specify priority via the sorting sequence
+@@ -1527,6 +1612,28 @@
+ Associated setting variables: |g:netrw_sort_sequence| |g:netrw_sort_options|
+ 
+ 
++EXECUTING FILE UNDER CURSOR VIA SYSTEM()			*netrw-X*
++
++Pressing X while the cursor is atop an executable file will yield a prompt
++using the filename asking for any arguments.  Upon pressing a [return], netrw
++will then call |system()| with that command and arguments.  The result will
++be displayed by |:echomsg|, and so |:messages| will repeat display of the
++result.  Ansi escape sequences will be stripped out.
++
++
++FORCING TREATMENT AS A FILE OR DIRECTORY	*netrw-gd* *netrw-gf* {{{2
++
++Remote symbolic links (ie. those listed via ssh or ftp) are problematic
++in that it is difficult to tell whether they link to a file or to a
++directory.
++
++To force treatment as a file: use >
++	gf
++<
++To force treatment as a directory: use >
++	gd
++<
++
+ GOING UP							*netrw--* {{{2
+ 
+ To go up a directory, press "-" or press the <cr> when atop the ../ directory
+@@ -1589,7 +1696,7 @@
+ to toggle between hiding files which begin with a period (dot) and not hiding
+ them.
+ 
+-Associated setting variable: |g:netrw_list_hide|
++Associated setting variable: |g:netrw_list_hide|  |g:netrw_hide|
+ Associated topics: |netrw-a| |netrw-ctrl-h| |netrw-mh|
+ 
+ IMPROVING BROWSING			*netrw-listhack* *netrw-ssh-hack* {{{2
+@@ -1687,22 +1794,23 @@
+ 
+ With the "d" map one may make a new directory either remotely (which depends
+ on the global variable g:netrw_mkdir_cmd) or locally (which depends on the
+-global variable g:netrw_local_mkdir).  Netrw will issue a request for the new
++global variable g:netrw_localmkdir).  Netrw will issue a request for the new
+ directory's name.  A bare <CR> at that point will abort the making of the
+ directory.  Attempts to make a local directory that already exists (as either
+ a file or a directory) will be detected, reported on, and ignored.
+ 
+-Currently, making a directory via ftp is not supported.
+-
+-Associated setting variable: |g:netrw_local_mkdir| |g:netrw_mkdir_cmd|
++Related topics: |netrw-D|
++Associated setting variables:	|g:netrw_localmkdir|  |g:netrw_mkdir_cmd|
++				|g:netrw_remote_mkdir|
+ 
+ 
+ MAKING THE BROWSING DIRECTORY THE CURRENT DIRECTORY	*netrw-c* {{{2
+ 
+ By default, |g:netrw_keepdir| is 1.  This setting means that the current
+-directory will not track the browsing directory.
++directory will not track the browsing directory. (done for backwards
++compatibility with v6's file explorer).
+ 
+-Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory to
++Setting g:netrw_keepdir to 0 tells netrw to make vim's current directory
+ track netrw's browsing directory.
+ 
+ However, given the default setting for g:netrw_keepdir of 1 where netrw
+@@ -1725,6 +1833,7 @@
+     |netrw-mc|	Copy marked files to target
+     |netrw-md|	Apply vimdiff to marked files
+     |netrw-me|	Edit marked files
++    |netrw-mF|	Unmark marked files
+     |netrw-mg|	Apply vimgrep to marked files
+     |netrw-mm|	Move marked files
+     |netrw-mp|	Print marked files
+@@ -1732,6 +1841,7 @@
+     |netrw-mT|	Generate tags using marked files
+     |netrw-mx|	Apply shell command to marked files
+     |netrw-mz|	Compress/Decompress marked files
++    |netrw-qF|	Mark files using quickfix list
+     |netrw-O|	Obtain marked files
+     |netrw-R|	Rename marked files
+ 
+@@ -1740,6 +1850,16 @@
+ with <s-leftmouse> using gvim.  One may unmark all files by pressing
+ "mu" (see |netrw-mu|).
+ 
++Marked files are highlighted using the "netrwMarkFile" highlighting group,
++which by default is linked to "Identifier" (see Identifier under
++|group-name|).  You may change the highlighting group by putting something
++like >
++
++	highlight clear netrwMarkFile
++	hi link netrwMarkFile ..whatever..
++<
++into $HOME/.vim/after/syntax/netrw.vim .
++
+ *markfilelist* *global_markfilelist* *local_markfilelist*
+ All marked files are entered onto the global marked file list; there is only
+ one such list.  In addition, every netrw buffer also has its own local marked
+@@ -1749,6 +1869,22 @@
+ lists.
+ 
+ 
++UNMARKING FILES							*netrw-mF* {{{2
++	(also see |netrw-mf|)
++
++This command will unmark all files in the current buffer.  One may also use
++mf (|netrw-mf|) on a specific file to unmark just that file.
++
++
++MARKING FILES BY QUICKFIX LIST				*netrw-qF*
++	(also see |netrw-mf|)
++
++One may convert the |quickfix-error-lists| into a marked file list using
++"qF".  You may then proceed with commands such as me (|netrw-me|) to
++edit them.  Quickfix error lists are generated, for example, by calls
++to |:vimgrep|.
++
++
+ MARKING FILES BY REGULAR EXPRESSION				*netrw-mr* {{{2
+ 	(also see |netrw-mf|)
+ 
+@@ -1789,7 +1925,8 @@
+ 		      (Uses the global marked file list)
+ 
+ Select a target directory with mt (|netrw-mt|).  Then change directory,
+-select file(s) (see |netrw-mf|), and press "mc".
++select file(s) (see |netrw-mf|), and press "mc".  The copy is done
++from the current window (where one does the mf) to the target.
+ 
+ Associated setting variable: |g:netrw_localcopycmd| |g:netrw_ssh_cmd|
+ 
+@@ -1806,17 +1943,27 @@
+ 
+ This command will place the marked files on the |arglist| and commence
+ editing them.  One may return the to explorer window with |:Rexplore|.
++(use |:n| and |:p| to edit next and previous files in the arglist)
+ 
+ MARKED FILES: GREP						*netrw-mg* {{{2
+ 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+ 		      (uses the global marked file list)
+ 
+-This command will apply |:vimgrep| to the marked files.  The command will ask
+-for the requested pattern; one may enter: >
++This command will apply |:vimgrep| to the marked files.
++The command will ask for the requested pattern; one may then enter: >
++
+ 	/pattern/[g][j]
+ 	! /pattern/[g][j]
+ 	pattern
+ <
++In the cases of "j" option usage as shown above, "mg" will winnow the current
++marked file list to just those possessing the specified pattern.
++Thus, one may use >
++	mr ...file-pattern
++	mg ..contents-pattern
++to have a marked file list satisfying the file-pattern but containing the
++desried contents-pattern.
++
+ MARKED FILES: HIDING AND UNHIDING BY SUFFIX			*netrw-mh* {{{2
+ 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+ 		      (uses the local marked file list)
+@@ -1841,7 +1988,8 @@
+ 	Use at your own risk!
+ 
+ Select a target directory with mt (|netrw-mt|).  Then change directory,
+-select file(s) (see |netrw-mf|), and press "mm".
++select file(s) (see |netrw-mf|), and press "mm".  The move is done
++from the current window (where one does the mf) to the target.
+ 
+ Associated setting variable: |g:netrw_localmovecmd| |g:netrw_ssh_cmd|
+ 
+@@ -1861,6 +2009,36 @@
+ Netrw will source the marked files (using vim's |:source| command)
+ 
+ 
++MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
++     (See |netrw-mf| and |netrw-mr| for how to mark files)
++
++Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
++
++  * If the cursor is atop a file name, then the netrw window's currently
++    displayed directory is used for the copy/move-to target.
++
++  * Also, if the cursor is in the banner, then the netrw window's currently
++    displayed directory is used for the copy/move-to target.
++    Unless the target already is the current directory.  In which case,
++    remove the target.
++
++  * However, if the cursor is atop a directory name, then that directory is
++    used for the copy/move-to target
++
++There is only one copy/move-to target per vim session; ie. the target is a
++script variable (see |s:var|) and is shared between all netrw windows (in an
++instance of vim).
++
++When using menus and gvim, netrw provides a "Targets" entry which allows one
++to pick a target from the list of bookmarks and history.
++
++Related topics:
++      Marking Files......................................|netrw-mf|
++      Marking Files by Regular Expression................|netrw-mr|
++      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
++      Marked Files: Target Directory Using History.......|netrw-Th|
++
++
+ MARKED FILES: TAGGING						*netrw-mT* {{{2
+ 	    (See |netrw-mf| and |netrw-mr| for how to mark files)
+ 		      (uses the global marked file list)
+@@ -1870,7 +2048,7 @@
+ netrw will use ssh (see |g:netrw_ssh_cmd|), and so ssh must be available for
+ this to work on remote systems.  For your local system, see |ctags| on how to
+ get a version.  I myself use hdrtags, currently available at
+-http://mysite.verizon.net/astronaut/src/index.html , and have >
++http://www.drchip.org/astronaut/src/index.html , and have >
+ 
+ 	let g:netrw_ctags= "hdrtag"
+ <
+@@ -1886,34 +2064,48 @@
+ 
+ Associated setting variables: |g:netrw_ctags| |g:netrw_ssh_cmd|
+ 
++MARKED FILES: TARGET DIRECTORY USING BOOKMARKS  		*netrw-Tb* {{{2
+ 
+-MARKED FILES: SETTING THE TARGET DIRECTORY			*netrw-mt* {{{2
+-     (See |netrw-mf| and |netrw-mr| for how to mark files)
++Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
+ 
+-Set the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|):
++The |netrw-qb| map will give you a list of bookmarks (and history).
++One may choose one of the bookmarks to become your marked file
++target by using [count]Tb (default count: 1).
+ 
+-  * if the cursor is atop a file name, then the netrw window's currently
+-    displayed directory is used for the copy/move-to target.
++Related topics:
++      Listing Bookmarks and History......................|netrw-qb|
++      Marked Files: Setting The Target Directory.........|netrw-mt|
++      Marked Files: Target Directory Using History.......|netrw-Th|
++      Marking Files......................................|netrw-mf|
++      Marking Files by Regular Expression................|netrw-mr|
+ 
+-  * also, if the cursor is in the banner, then the netrw window's currently
+-    displayed directory is used for the copy/move-to target.
+ 
+-  * however, if the cursor is atop a directory name, then that directory is
+-    used for the copy/move-to target
++MARKED FILES: TARGET DIRECTORY USING HISTORY	  		*netrw-Th* {{{2
++
++Sets the marked file copy/move-to target (see |netrw-mc| and |netrw-mm|).
++
++The |netrw-qb| map will give you a list of history (and bookmarks).
++One may choose one of the history entries to become your marked file
++target by using [count]Th (default count: 0; ie. the current directory).
++
++Related topics:
++      Listing Bookmarks and History......................|netrw-qb|
++      Marked Files: Setting The Target Directory.........|netrw-mt|
++      Marked Files: Target Directory Using Bookmarks.....|netrw-Tb|
++      Marking Files......................................|netrw-mf|
++      Marking Files by Regular Expression................|netrw-mr|
+ 
+-There is only one copy/move-to target per vim session; ie. the target is a
+-script variable (see |s:var|) and is shared between all netrw windows (in an
+-instance of vim).
+ 
+ MARKED FILES: UNMARKING						*netrw-mu* {{{2
+      (See |netrw-mf| and |netrw-mr| for how to mark files)
+ 
+ The "mu" mapping will unmark all currently marked files.
+ 
+-
++				*netrw-browser-settings*
+ NETRW BROWSER VARIABLES		*netrw-browser-options* *netrw-browser-var* {{{2
+ 
+-(if you're interested in the netrw file transfer settings, see |netrw-options|)
++(if you're interested in the netrw file transfer settings, see |netrw-options|
++ and |netrw-protocol|)
+ 
+ The <netrw.vim> browser provides settings in the form of variables which
+ you may modify; by placing these settings in your <.vimrc>, you may customize
+@@ -1936,6 +2128,10 @@
+ 				NOTE: suppressing the banner is a new feature
+ 				which may cause problems.
+ 
++  *g:netrw_bannerbackslash*	if this variable exists and is not zero, the
++				banner will be displayed with backslashes
++				rather than forward slashes.
++
+   *g:netrw_browse_split*	when browsing, <cr> will open the file by:
+ 				=0: re-using the same window
+ 				=1: horizontally splitting the window first
+@@ -1963,26 +2159,58 @@
+ 				    Will compress marked files with this
+ 				    command
+ 
++  *g:Netrw_corehandler*		Allows one to specify something additional
++				to do when handling <core> files via netrw's
++				browser's "x" command (see |netrw-x|).  If
++				present, g:Netrw_corehandler specifies
++				either one or more function references
++				(see |Funcref|).  (the capital g:Netrw...
++				is required its holding a function reference)
++
++
+   *g:netrw_ctags*		="ctags"
+-				The default external program used to create tags
++				The default external program used to create
++				tags
+ 
+-  *g:netrw_cursorline*		= 1 (default)
+-				will use the |'cursorline'| local setting when
+-				|g:netrw_liststyle| ==0 (thin listing) or
+-				|g:netrw_liststyle| ==1 (long listing) or
+-				|g:netrw_liststyle| ==3 (tree listing)
+-				(ie. doesn't affect the wide listing)
+-				=0: off
+-				=2: like ==1, but the wide listing gets both
+-				cursorline and |'cursorcolumn'|locally set
++  *g:netrw_cursor*		= 2 (default)
++  				This option controls the use of the
++				|'cursorline'| (cul) and |'cursorcolumn'|
++				(cuc) settings by netrw:
++
++				Value   Thin-Long-Tree      Wide
++				 =0      u-cul u-cuc      u-cul u-cuc
++				 =1      u-cul u-cuc        cul u-cuc
++				 =2        cul u-cuc        cul u-cuc
++				 =3        cul u-cuc        cul   cuc
++				 =4        cul   cuc        cul   cuc
++
++				Where
++				  u-cul : user's |'cursorline'|   setting used
++				  u-cuc : user's |'cursorcolumn'| setting used
++				  cul   : |'cursorline'|  locally set
++				  cuc   : |'cursorcolumn'| locally set
+ 
+-  *g:netrw_decompress*		= { ".gz" : "gunzip" ,
++  *g:netrw_decompress*		= { ".gz"  : "gunzip" ,
+ 				    ".bz2" : "bunzip2" ,
+ 				    ".zip" : "unzip" ,
+ 				    ".tar" : "tar -xf"}
+ 				  A dictionary mapping suffices to
+ 				  decompression programs.
+ 
++  *g:netrw_dirhistmax*            =10: controls maximum quantity of past
++                                     history.  May be zero to supppress
++				     history.
++				     (related: |netrw-qb| |netrw-u| |netrw-U|)
++
++  *g:netrw_dynamic_maxfilenamelen* =32: enables dynamic determination of
++				    |g:netrw_maxfilenamelen|, which affects
++				    local file long listing.
++  *g:netrw_errorlvl*		=0: error levels greater than or equal to
++				    this are permitted to be displayed
++				    0: notes
++				    1: warnings
++				    2: errors
++
+   *g:netrw_fastbrowse*		=0: slow speed directory browsing;
+ 				    never re-uses directory listings,
+ 				    always obtains directory listings.
+@@ -2046,7 +2274,10 @@
+ 				These characters in directory names are
+ 				escaped before applying glob()
+ 
+-  *g:netrw_hide*		if true, the hiding list is used
++  *g:netrw_hide*		Controlled by the "a" map (see |netrw-a|)
++				=0 : show all
++				=1 : show not-hidden files
++				=2 : show hidden files only
+ 				 default: =0
+ 
+   *g:netrw_home*		The home directory for where bookmarks and
+@@ -2082,15 +2313,15 @@
+ 				Copies marked files (|netrw-mf|) to target
+ 				directory (|netrw-mt|, |netrw-mc|)
+ 
++  *g:netrw_localmkdir*		command for making a local directory
++				 default: "mkdir"
++
+   *g:netrw_localmovecmd*	="mv" Linux/Unix/MacOS/Cygwin
+ 				="move" Windows
+ 				Moves marked files (|netrw-mf|) to target
+ 				directory (|netrw-mt|, |netrw-mm|)
+ 
+-  *g:netrw_local_mkdir*		command for making a local directory
+-				 default: "mkdir"
+-
+-  *g:netrw_local_rmdir*		remove directory command (rmdir)
++  *g:netrw_localrmdir*		remove directory command (rmdir)
+ 				 default: "rmdir"
+ 
+   *g:netrw_maxfilenamelen*	=32 by default, selected so as to make long
+@@ -2101,16 +2332,26 @@
+ 				columnar.
+ 
+   *g:netrw_mkdir_cmd*		command for making a remote directory
++				via ssh  (also see |g:netrw_remote_mkdir|)
+ 				 default: "ssh USEPORT HOSTNAME mkdir"
+ 
+-  *g:netrw_mousemaps*		=1 (default) enables the mouse buttons
+-				   while browsing:
++  *g:netrw_mousemaps*		  =1 (default) enables mouse buttons while
++  				   browsing to:
+ 				     leftmouse       : open file/directory
+ 				     shift-leftmouse : mark file
+ 				     middlemouse     : same as P
+ 				     rightmouse      : remove file/directory
+ 				=0: disables mouse maps
+ 
++  *g:netrw_nobeval*		doesn't exist (default)
++				If this variable exists, then balloon
++				evaluation will be suppressed
++				(see |'ballooneval'|)
++
++  *g:netrw_remote_mkdir*	command for making a local directory
++				via ftp  (also see |g:netrw_mkdir_cmd|)
++				 default: "mkdir"
++
+   *g:netrw_retmap*		if it exists and is set to one, then:
+ 				 * if in a netrw-selected file, AND
+ 				 * no normal-mode <2-leftmouse> mapping exists,
+@@ -2136,7 +2377,7 @@
+   *g:netrw_rmdir_cmd*		command for removing directories
+ 				 default: "ssh USEPORT HOSTNAME rmdir"
+ 
+-  *g:netrw_rmf_cmd*		 command for removing softlinks
++  *g:netrw_rmf_cmd*		command for removing softlinks
+ 				 default: "ssh USEPORT HOSTNAME rm -f"
+ 
+   *g:netrw_sort_by*		sort by "name", "time", or "size"
+@@ -2161,7 +2402,7 @@
+ 				           \.info$,\.swp$,\.obj$'
+ 
+   *g:netrw_special_syntax*	If true, then certain files will be shown
+-				in special syntax in the browser:
++				using special syntax in the browser:
+ 
+ 					netrwBak     : *.bak
+ 					netrwCompress: *.gz *.bz2 *.Z *.zip
+@@ -2171,7 +2412,7 @@
+ 					netrwMakefile: [mM]akefile *.mak
+ 					netrwObj     : *.o *.obj
+ 					netrwTags    : tags ANmenu ANtags
+-					netrwTilde   : *~ 
++					netrwTilde   : *~
+ 					netrwTmp     : tmp* *tmp
+ 
+ 				These syntax highlighting groups are linked
+@@ -2182,11 +2423,6 @@
+ <				into one's <.vimrc> to use one's own
+ 				preferences.
+ 
+-  *g:netrw_ssh_cmd*		One may specify an executable command
+-				to use instead of ssh for remote actions
+-				such as listing, file removal, etc.
+-				 default: ssh
+-
+   *g:netrw_ssh_browse_reject*	ssh can sometimes produce unwanted lines,
+ 				messages, banners, and whatnot that one doesn't
+ 				want masquerading as "directories" and "files".
+@@ -2194,6 +2430,11 @@
+ 				messages.  By default its value is:
+ 					 '^total\s\+\d\+$'
+ 
++  *g:netrw_ssh_cmd*		One may specify an executable command
++				to use instead of ssh for remote actions
++				such as listing, file removal, etc.
++				 default: ssh
++
+ 
+   *g:netrw_tmpfile_escape*	=' &;'
+ 				escape() is applied to all temporary files
+@@ -2219,8 +2460,14 @@
+ 
+   *g:netrw_winsize*		specify initial size of new windows made with
+ 				"o" (see |netrw-o|), "v" (see |netrw-v|),
+-				|:Hexplore| or |:Vexplore|.
+-				 default: ""
++				|:Hexplore| or |:Vexplore|.  The g:netrw_winsize
++				is an integer describing the percentage of the
++				current netrw buffer's window to be used for
++				the new window.
++				 If g:netrw_winsize is less than zero, then
++				the absolute value of g:netrw_winsize lines
++				or columns will be used for the new window.
++				 default: 50  (for 50%)
+ 
+   *g:netrw_xstrlen*		Controls how netrw computes string lengths,
+ 				including multi-byte characters' string
+@@ -2254,7 +2501,7 @@
+ autochdir sets the current directory to that containing the "file" (even if
+ that "file" is itself a directory).
+ 
+-NETRW SETTINGS						*netrw-settings* {{{2
++NETRW SETTINGS WINDOW				*netrw-settings-window* {{{2
+ 
+ With the NetrwSettings.vim plugin, >
+ 	:NetrwSettings
+@@ -2263,7 +2510,7 @@
+ settings therein will be used.  One may also press "?" on any of the lines for
+ help on what each of the variables do.
+ 
+-(also see: |netrw-browser-var| |netrw-protocol| |netrw-var| |netrw-variables|)
++(also see: |netrw-browser-var| |netrw-protocol| |netrw-variables|)
+ 
+ 
+ ==============================================================================
+@@ -2297,7 +2544,7 @@
+  * To automatically make the currently browsed directory the current
+    directory, see |g:netrw_keepdir|.
+ 
+-
++							*netrw-createfile*
+ OPEN A NEW FILE IN NETRW'S CURRENT DIRECTORY		*netrw-%*
+ 
+ To open a file in netrw's current directory, press "%".  This map will
+@@ -2323,15 +2570,14 @@
+ 	1. Make vertical splitting the default for previewing files
+ 	2. Make the default listing style "tree"
+ 	3. When a vertical preview window is opened, the directory listing
+-	   will use only 30 columns; the rest of the window is used for the
+-	   preview window.
++	   will use only 30% of the columns available; the rest of the window
++	   is used for the preview window.
+ 
+ PREVIOUS WINDOW				*netrw-P* *netrw-prvwin* {{{2
+ 
+ To edit a file or directory in the previously used (last accessed) window (see
+ :he |CTRL-W_p|), press a "P".  If there's only one window, then the one window
+-will be horizontally split (above/below splitting is controlled by
+-|g:netrw_alto|, and its initial size is controlled by |g:netrw_winsize|).
++will be horizontally split (by default).
+ 
+ If there's more than one window, the previous window will be re-used on
+ the selected file/directory.  If the previous window's associated buffer
+@@ -2339,6 +2585,13 @@
+ the user will be asked if s/he wishes to save the buffer first (yes,
+ no, or cancel).
+ 
++Related Actions |netrw-cr| |netrw-o| |netrw-t| |netrw-v|
++Associated setting variables:
++   |g:netrw_alto|    control above/below splitting
++   |g:netrw_altv|    control right/left splitting
++   |g:netrw_preview| control horizontal vs vertical splitting
++   |g:netrw_winsize| control initial sizing
++
+ 
+ REFRESHING THE LISTING			*netrw-ctrl-l* *netrw-ctrl_l* {{{2
+ 
+@@ -2347,6 +2600,15 @@
+ refresh a local directory by using ":e .".
+ 
+ 
++REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
++
++One may toggle between normal and reverse sorting order by pressing the
++"r" key.
++
++Related topics:              |netrw-s|
++Associated setting variable: |g:netrw_sort_direction|
++
++
+ RENAMING FILES OR DIRECTORIES	*netrw-move* *netrw-rename* *netrw-R* {{{2
+ 
+ If there are no marked files: (see |netrw-mf|)
+@@ -2377,15 +2639,6 @@
+ the V (|linewise-visual|).
+ 
+ 
+-REVERSING SORTING ORDER		*netrw-r* *netrw-reverse* {{{2
+-
+-One may toggle between normal and reverse sorting order by pressing the
+-"r" key.
+-
+-Related topics:              |netrw-s|
+-Associated setting variable: |g:netrw_sort_direction|
+-
+-
+ SELECTING SORTING STYLE			*netrw-s* *netrw-sort* {{{2
+ 
+ One may select the sorting style by name, time, or (file) size.  The "s" map
+@@ -2469,9 +2722,9 @@
+ 	P5. My times come up oddly in local browsing
+ 
+ 		Does your system's strftime() accept the "%c" to yield dates
+-		such as "Sun Apr 27 11:49:23 1997"?  If not, do a "man strftime"
+-		and find out what option should be used.  Then put it into
+-		your |.vimrc|: >
++		such as "Sun Apr 27 11:49:23 1997"?  If not, do a
++		"man strftime" and find out what option should be used.  Then
++		put it into your |.vimrc|: >
+ 
+ 			let g:netrw_timefmt= "%X"  (where X is the option)
+ <
+@@ -2604,7 +2857,7 @@
+ 
+ 								*netrw-p11*
+ 	P11. I want to have two windows; a thin one on the left and my editing
+-	     window on the right.  How can I do this?
++	     window on the right.  How may I accomplish this?
+ 
+ 		* Put the following line in your <.vimrc>:
+ 			let g:netrw_altv = 1
+@@ -2650,30 +2903,68 @@
+ 	    "let g:netrw_sftp_cmd = "d:\\dev\\putty\\PSFTP.exe"
+ 	    "let g:netrw_scp_cmd = "d:\\dev\\putty\\PSCP.exe"
+ <
+-
++								*netrw-p14*
++	P14. I'd would like to speed up writes using Nwrite and scp/ssh
++	     style connections.  How?  (Thomer M. Gil)
++
++	     Try using ssh's ControlMaster and ControlPath (see the ssh_config
++	     man page) to share multiple ssh connections over a single network
++	     connection. That cuts out the cryptographic handshake on each
++	     file write, sometimes speeding it up by an order of magnitude.
++	     (see  http://thomer.com/howtos/netrw_ssh.html)
++	     (included by permission)
++
++	     Add the following to your ~/.ssh/config: >
++
++		 # you change "*" to the hostname you care about
++		 Host *
++		   ControlMaster auto
++		   ControlPath /tmp/%r@%h:%p
++
++<	     Then create an ssh connection to the host and leave it running: >
++
++		 ssh -N host.domain.com
++
++<	     Now remotely open a file with Vim's Netrw and enjoy the
++	     zippiness: >
++
++		vim scp://host.domain.com//home/user/.bashrc
++<
++								*netrw-p15*
++	P15. How may I use a double-click instead of netrw's usual single click
++	     to open a file or directory?  (Ben Fritz)
++
++	     First, disable netrw's mapping with >
++		    let g:netrw_mousemaps= 0
++<	     and then create a netrw buffer only mapping in
++	     $HOME/.vim/after/ftplugin/netrw.vim: >
++		    nmap <buffer> <2-leftmouse> <CR>
++<	     Note that setting g:netrw_mousemaps to zero will turn off
++	     all netrw's mouse mappings, not just the <leftmouse> one.
++	     (see |g:netrw_mousemaps|)
+ 
+ ==============================================================================
+ 11. Debugging Netrw Itself				*netrw-debug* {{{1
+ 
+-The <netrw.vim> script is typically available as:
++The <netrw.vim> script is typically available as something like:
+ >
+-	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
+-	/usr/local/share/vim/vim6x/autoload/netrw.vim
+-< -or- >
+ 	/usr/local/share/vim/vim7x/plugin/netrwPlugin.vim
+ 	/usr/local/share/vim/vim7x/autoload/netrw.vim
++< -or- >
++	/usr/local/share/vim/vim6x/plugin/netrwPlugin.vim
++	/usr/local/share/vim/vim6x/autoload/netrw.vim
+ <
+ which is loaded automatically at startup (assuming :set nocp).
+ 
+ 	1. Get the <Decho.vim> script, available as:
+ 
+-	     http://mysite.verizon.net/astronaut/vim/index.html#DECHO
++	     http://www.drchip.org/astronaut/vim/index.html#DECHO
+ 	   or
+ 	     http://vim.sourceforge.net/scripts/script.php?script_id=120
+ 
+ 	  It now comes as a "vimball"; if you're using vim 7.0 or earlier,
+ 	  you'll need to update vimball, too.  See
+-	     http://mysite.verizon.net/astronaut/vim/index.html#VIMBALL
++	     http://www.drchip.org/astronaut/vim/index.html#VIMBALL
+ 
+ 	2. Edit the <netrw.vim> file by typing: >
+ 
+@@ -2706,821 +2997,145 @@
+ ==============================================================================
+ 12. History						*netrw-history* {{{1
+ 
+-	v140: Jul 27, 2010 * (Lech Lorens) unexpected change of window
+-	v139: May 14, 2010 * when viewing remote directory listings and
+-			     changing listing style, going to tree listing
+-			     mode was issuing two rather useless messages
+-			     about the buffer name.  They have now been
+-			     silenced.
+-			   * (Jean Johner) with "behave mswin", clicking
+-			     on a filename in wide mode opened a new file
+-			     with a missing first letter
+-			   * (Britton Kerin) wanted netrw listings to be
+-			     buflisted; the |g:netrw_bufsettings| option
+-			     permits that.
+-	      Jun 18, 2010 * (Jan Steffens) added support for xz compression
+-	      Jun 23, 2010 * vimdiff dir1 dir2 now works
+-	      Jul 27, 2010 * (John Orr) pointed out that the intended maparg
+-			     test for gx was actually testing for g rather
+-			     than gx.  Fixed.
+-	v138: May 01, 2010 * added the bomb setting to the Save-Set-Restore
+-			     option handling (for Tony M)
+-	      May 14, 2010 * (Bram Moolenaar) netrw optionally sets cursorline
+-			     (and sometimes cursorcolumn) for its display.
+-			     This option setting was leaking through with
+-			     remote file handling.
+-	v137: Dec 28, 2009 * modified the preview window handling for
+-			     vertically split windows.  The preview
+-			     window will take up all but g:netrw_winsize
+-			     columns of the original window; those 
+-			     g:netrw_winsize columns will be used for
+-			     the netrw listing.
+-			   * (Simon Dambe) removed "~" from
+-			     |g:netrw_glob_escape| under Windows
+-			   * (Bram Moolenaar) modified test for status bar
+-			     click with leftmouse.  Moved code to
+-			     s:NetrwLeftmouse().
+-	      Feb 24, 2010 * (for Jean Johner) added insert-mode maps; one
+-			     can get into insert mode with netrw via
+-			     ctrl-o :e .
+-	      Mar 15, 2010 * (Dominique PellÃ©) Directory with backslashes such
+-			     as foo\bar were not being entered/left properly
+-	      Mar 15, 2010 * Using :Explore .. and causing two FocusGained
+-			     events caused the directory to change.  Fixed.
+-	      Mar 22, 2010 * Last fix caused problems for *//pat and */filepat
+-			     searches.
+-	      Mar 30, 2010 * With :set hidden and changing listing styles 8
+-			     times, the tree listing buffer was being marked
+-			     as modified upon exit.  Fixed.
+-	v136: Jan 14, 2009 * extended |g:Netrw_funcref| to also handle lists
+-			     of function references
+-	      Jan 14, 2009 * (reported by Marvin Renich) with spell check
+-			     enabled, some filenamess will still being
+-			     displayed as spelling errors.
+-	      Apr 13, 2009 * (BjÃ¶rn Winckler) writing a file using
+-	                     remote scp caused syntax highlighting problem.
+-			     Solution: avoid syntax/syntax.vim's
+-			     au Filetype * syntax setting autocommand by
+-			     checking that the current buffer has the
+-			     netrw filetype before attempting a doau
+-			     in s:NetrwSafeOptions().
+-	      Apr 14, 2009 * (asgeo1) suggested the "T" map (|netrw-T|)
+-	      Apr 14, 2009 * marking wasn't working on executable and
+-			     other special filenames
+-	      Apr 20, 2009 * (Dennis Benzinger) files opened via http have
+-			     their syntax filetype auto-detected
+-	      Jun 19, 2009 * (Yukihiro Nakadaira) help document improvements
+-	      Jul 22, 2009 * g:netrw_browse_split will honor the
+-			     |'equalalways'| setting.
+-	      Jul 29, 2009 * implemented "I" mapping to toggle banner
+-			     (this is experimental and still being debugged)
+-	      Sep 19, 2009 * (Mike McEwan) writes via ftp now send both
+-			     g:netrw_ftpmode and g:netrw_ftpextracmd (if the
+-			     latter exists)
+-	      Dec 02, 2009 * netrw uses vimgrep several places; it now uses
+-			     "noautocmd vimgrep" (should be speedier).
+-	      Dec 03, 2009 * changed back to using -source instead of -dump
+-			     for elinks-using commands. (requested by James
+-			     Vega and Karsten Hopp)
+-	v135: Oct 29, 2008 * using |simplify()| on directory names
+-			     (supporting handling ".."s in directory names)
+-	      Oct 31, 2008 * added special file highlighting for core dumps
+-			     under Unix/Linux.  The default sorting sequence
+-			     now also gives core dumps priority.
+-	      Nov 10, 2008 * uses a call to netrw#Nread() instead of Nread
+-			     to avoid having to use fnameescape()
+-			   * fixed a tree redrawing problem (open directory,
+-			     open subdir, close subdir, close dir)
+-	      Nov 19, 2008 * sprinkled some histdel("/",-1)s through the code
+-			     in an attempt to prevent netrw from changing
+-			     the search history.
+-	      Jan 02, 2009 * |g:Netrw_funcref| included
+-	      Jan 05, 2009 * Explore */ **/ *// **// all clear explorer
+-			     variables
+-	      Jan 05, 2009 * (Panagiotis Louridas) extended s:WinPath()
+-			     to remove cygdrive from non-cygwin Windows
+-			     paths.  Improved the determination as to
+-			     whether or not to do so.
+-	      Jan 13, 2009 * included contains=@NoSpell in every syntax
+-			     group for syntax/netrw.vim .
+-	v134: Sep 30, 2008 * (Sander Marechal) provided a bugfix involving
+-			     the use of the |netrw-t| command with a remote
+-			     directory.
+-	      Sep 30, 2008 * using "x" on a remote jpg was failing; fixed.
+-	      Oct 03, 2008 * bookmarks now go on a list and are stored to
+-			     the first directory on the |'runtimepath'| in
+-			     the hopes of making their retention reliable.
+-			     History now also goes to that directory.
+-	      Oct 07, 2008 * Included check that vim 7.0 or later is in use.
+-	      Oct 07, 2008 * Improved |g:netrw_retmap| handling.
+-	      Oct 12, 2008 * Based upon SÃ©bastien Migniot's suggestion, if
+-			     cadaver isn't available then netrw will try to
+-			     use curl for the dav://... protocol.
+-	      Oct 13, 2008 * added @*/ to netrw buffers' |'iskeyword'|setting
+-			     This lets mf (|netrw-mf|) mark directories, links
+-			     and executables.
+-	      Oct 13, 2008 * avoids a second NetrwBrowse() refresh when
+-			     g:netrw_fastbrowse is <= 1 (slow, medium speed)
+-	      Oct 22, 2008 * |g:netrw_http_xcmd| may now be overridden
+-			     independently of |g:netrw_http_cmd|.
+-	      Oct 23, 2008 * [N] added to the various Explore commands to
+-			     let users specify the width/height of new
+-			     explorer windows, overriding |g:netrw_winsize|.
+-	v133: Aug 10, 2008 * NetReadFixup() for win95 was missing some "a:"s
+-	      Aug 12, 2008 * (Jan MinÃ¡Å) an error condition in NetrwMethod()
+-			     wasn't being used, resulting in "b:netrw_fname
+-			     undefined" errors
+-	      Aug 12, 2008 * (FranÃ§ois Ingeirest) asked that "hi link" be
+-			     changed to hi default link in the netrw syntax
+-			     files.
+-	      Aug 12, 2008 * using s:NetrwUnmarkList() more often.  Filenames
+-			     were being left on the global list when removed
+-			     from the buffer-local lists.
+-	      Aug 14, 2008 * (Joshua Clayton) an errant extra ")" was left in
+-			     the rcp-handling portion of NetRead().
+-	      Sep 03, 2008 * added |'cursorline'| highlighting to thin, long,
+-			     and tree displays.
+-	v132: Aug 06, 2008 * Fixed marked file-based obtain
+-	      Aug 08, 2008 * sourcing a file via ftp from a netrw-generated
+-	                     buffer (or any buffer with |'nobl'|) left an
+-			     empty no-name buffer in its wake.  Fixed.
+-	v130: Jul 31, 2008 * trying out elinks/links for http://host/
+-			     requests.  One problem: in-page links
+-			     (such as with ...#LABEL) are not supported
+-			   * verified that Bram's modified netrwPlugin works
+-	      Aug 01, 2008 * fixed a bug: when sourcing a file via ftp, the
+-			     "filter window" was left behind.
+-	v129: Jul 31, 2008 * bug found in non-mouse enabled vim and some
+-			     local maps
+-	v128: Jul 30, 2008 * much work done in using shellescape() and
+-			     fnameescape()
+-	v126: Jun 30, 2008 * after having gone to a remote directory,
+-	                     <f1> was no longer taking one to the correct
+-			     entry in the help (|netrw-quickhelp|).  Fixed.
+-	      Jul 01, 2008 * extracting the last filename from a wide listing
+-			     missed the last letter when |'virtualedit'| not
+-			     enabled.
+-	      Jul 01, 2008 * vim foo/bar  was creating [Scratch] buffers,
+-			     where bar was also a directory
+-	      Jul 01, 2008 * numerous additional changes were made to netrw
+-			     to use fnameescape() and shellescape() instead
+-			     of escape().  Not all changes have been tested
+-			     as yet...
+-	      Jul 01, 2008 * (James Vega reported) some problems with
+-			     :NetrwSettings (due to no longer used setting
+-			     variables).
+-	      Jul 07, 2008 * Additional numerous changes to support security;
+-	                     shellescape(arg,1), etc.
+-	v125: Apr 07, 2008 * (Cristian Rigamonti) CR provides a patch; he
+-			     noted that gx was failing since its call to
+-			     netrw#NetBrowseX() wasn't updated to
+-			     netrw#NetrwBrowseX().
+-			   * (Stanis Trendelenburg) ST provides a patch to
+-			     supports davs: (dav + ssl)
+-			   * (Rick Choi) noted that directory names comprised
+-			     of three digits were not being displayed by
+-			     the internal browser.  Fixed.
+-			   * (Erik Falor) provided a patch to handle problems
+-			     with changing directory and |'acd'| option.
+-			   * (James Vega, Teemu Likonen) noted that netrw
+-			     wasn't handling multi-byte filenames/directories
+-			     correctly.  Fixed.
+-			   * (Rick) found problem with g:netrw_maxfilenamelen
+-			     being overridden.
+-			   * (James Vega) pointed out that netrw was
+-			     misidentifying all files in a symbolically linked
+-			     directory as being symbolically linked
+-			     themselves.  This particular problem was fixed;
+-			     however, there are now situations where
+-			     symbolically linked files will not be detected.
+-			     Really need an internal vim function to do this
+-			     identification.
+-	      Apr 17, 2008 * When g:netrw_keepdir==0, current directory
+-	                     doesn't necessarily equal b:netrw_curdir
+-			     initially.  Problem is due to the patch directly
+-			     above.
+-			   * Fixed qf to handle case where b:netrw_curdir
+-			     isn't the same as the current directory under
+-			     linux/macosx.
+-			   * New: |netrw-mg| (apply vimgrep to marked files)
+-	      May 05, 2008 * (Rick) pointed out that a "setlocal ts=32" was
+-			     interfering with g:netrw_maxfilenamelen
+-	      May 05, 2008 * (James Vega) a file inside a linked directory
+-			     was showing up as a symbolic link itself.
+-	      May 22, 2008 * symbolic links, fifos, and sockets are now
+-	                     indicated by a trailing @, |, or =, respectively.
+-	      Jun 06, 2008 * Removed numerous bugs from the marked file
+-			     move and copy.  Tested these changes under
+-			     Unix only thus far.
+-			   * :Rexplore returns to the screen position in the
+-			     netrw listing from whence the file was edited
+-	v124: Apr 02, 2008 * (Adrian Rollett) change the line supporting the
+-			    "x" action for mac to use g:netrw_shq
+-	v123: Feb 27, 2008 * Marked files now keeps a "global" marked file
+-			     list.  The global marked file list is used to
+-			     support tag processing and vimdiff'ing
+-			     (|netrw-md| |netrw-mt|)
+-			   * Been insuring that mm and mc works with various
+-			     combinations of local and remote directories
+-			   * (Stefan Bittner) http://.../ should always have
+-			     filetype "html" -- fixed.
+-			   * (Stefan Bittner) a "?" in a http://.../ request
+-			     wasn't being handled correctly.  Fixed by
+-			     removing ? from default |g:netrw_tmpfile_escape|.
+-			   * (Nico Weber) % codes in http://.../ requests
+-			     weren't being handled correctly.  Fixed by
+-			     including % in default |g:netrw_fname_escape|.
+-			   * (Stefan Bittner) attempts to update Buffers.Refresh
+-			     were failing because locale use changed the menu
+-			     names.  I implemented a workaround.
+-	v122: Feb 12, 2008 * bugfix - first sorting sequence match now has
+-			     priority
+-	      Feb 14, 2008 * bugfix - sorting sequence was effectively ignoring
+-			     sequencing priority of anything following '*'
+-			   * toggling a marked file was showing incorrect list
+-			     (list was correct, but displayed matches weren't)
+-			   * |g:netrw_special_syntax| implemented
+-	v121: Feb 11, 2008 * Bram M reported that :e file ... :e . would not
+-			     retain the alternate file.  Fixed -- I hope!
+-			   * bugfix -- apparently v120 broke an explicit
+-			     :Explore dirname
+-	v120: Jan 21, 2008 * |netrw-mt| changed to allow for target selection
+-	                     based on whether or not word under cursor is a
+-			     directory or file, or if cursor is in banner
+-			     area.
+-			   * |netrw-mh| included (hiding by marked-file suffix)
+-			   * functions moved about a bit (improved
+-			     categorization)
+-			   * executable files now displayed with trailing (*)
+-			   * symbolically linked files now displayed with
+-			     trailing (@)
+-			   * Somewhen, s:NetrwMarkFileMove() got damaged.  It
+-			   * is now restored (missing an endif, for example).
+-			   * |netrw-mu| implemented (unmarking marked files)
+-			   * many bugs have been removed from the marked file
+-			     system (tnx to Mark S. for feedback)
+-			   * |netrw-ms| implemented (sourcing marked files)
+-			   * fixed use of P with tree listing style
+-			   * multiple tree listing now supported
+-			   * ./ suppressed
+-			   * changed q -> qb (query bookmarks)
+-			   * implemented |netrw-qf|
+-			   * Explore now has four special list-generation
+-			     modes: */filepat **/filepat
+-			           *//pattern **//pattern
+-			   * gh (|netrw-gh|) is a shortcut for toggling the
+-			     hiding of files and directories beginning with a
+-			     dot
+-	v119: Jan 10, 2008 * When g:netrw_keepdir is false,
+-			     NetrwOptionsRestore() had a problem
+-			     (Bill McCarthy)
+-	      Jan 11, 2008 * Netrw now shows symbolic links with a trailing
+-	                     "@" and special highlighting.
+-	      Jan 15, 2008 * Changed g:netrw_noretmap -> |g:netrw_retmap|.
+-	                     Changed: disabled by default at Bram's
+-			     preference.
+-	v118: Jan 02, 2008 * Fixed a problem with Windows;
+-			     :Explore c:/path/ would not work,
+-			     but :Explore c:/path would.
+-			   * Fixed a bug in s:NetrwOptionRestore() - lcd's
+-			     argument wasn't being properly escaped so it
+-			     wouldn't handle spaces in directory names.
+-			     (Gary Johnson)
+-	v117: Jan 02, 2008 * Fixed a problem with P; had to include
+-			     a b:netrw_curdir bypass (Bram Moolenaar)
+-	v116: Nov 27, 2007 * netrw#LocalBrowseCheck() has &ft=="netrw"
+-			     check to prevent doing a directory listing
+-			     (was getting unexpected directory refreshes
+-			     in the middle of some function calls)
+-			   * NetrwOptionRestore moved after e! filename
+-			     in order to retain user options for editing
+-			     in s:NetrwBrowseChgDir()
+-	      Dec 12, 2007 * Bug fix -- netrw does a better job of retaining
+-	                     user options when editing files under the aegis
+-			     of the browser
+-	v115: Oct 04, 2007 * Erik Remmelzwaal pointed out that the use of
+-			     shellslash in s:GetTempfile() was incorrect
+-	      Oct 11, 2007 * Tracked down and eliminated a bug with editing
+-			     remote *.tar.gz and *.tar.bz2 files
+-	      Oct 11, 2007 * g:netrw_localmovecmd wasn't being initialized
+-			     properly, and g:netrw_localcopycmd was being
+-			     overwritten.
+-	      Oct 12, 2007 * Placed all :Rexplore and <2-leftmouse> setup
+-			     in a new support function (s:SetRexDir()).
+-	      Oct 15, 2007 * new: g:netrw_browse_split == 4; means <cr>
+-			     based selection will use previous window
+-	      Oct 20, 2007 * also checks on |'shellxquote'| to set g:netrw_shq
+-	      Oct 24, 2007 * Explore handles path/**/filename
+-	      Oct 27, 2007 * sourcing remote files often didn't work with ftp,
+-	                     turns out that b:netrw_method was undefined, so
+-			     s:SaveBufVars and s:RestoreBufVars() fixed it.
+-	v114: Sep 28, 2007 * mT, the map that invokes tags, has been improved
+-			     to support use of remote tags files.
+-	      Oct 02, 2007 * changed Netrw menu to use more submenus
+-	v113: Sep 07, 2007 * worked out why the cursor position wasn't being
+-			     saved and restored as intended after doing such
+-			     things as deleting and renaming files.
+-	      Sep 11, 2007 * Fixed bug which effectively disabled <c-l> and
+-			     <c-h> maps
+-	      Sep 18, 2007 * there used to be one NetrwOptionRestore() call at
+-			     the end of the s:NetrwBrowseChgDir() function;
+-			     they're now at the end of every if..elseif..else
+-			     block.  The edit-a-file one is not quite at the end
+-			     of its block; instead, it's just before the edit.
+-			     Restores user options, then this new placement
+-			     allows ftplugins, autocmds, etc to change settings
+-			     (ex. ftplugin/cpp.vim sets cindent).
+-	      Sep 19, 2007 * changed all strlen() calls to use s:Strlen(), a
+-			     function which handles utf-8 wide characters
+-			     correctly.
+-	      Sep 20, 2007 * (Nico Weber) the "x" command has been extended
+-			     to Mac's OS/X (macunix); it now uses open to
+-			     handle |netrw-x| browsing with special files.
+-	      Sep 22, 2007 * Added g:netrw_noretmap to netrw at Tony M's
+-			     request.
+-			   * Included path to NetrwRemoteRmFile()
+-	v112: Aug 18, 2007 * added mx (|netrw-mx|) for executing arbitrary
+-			     commands on marked files
+-	      Aug 22, 2007 * more option save/restore work for
+-			     s:NetrwBrowseChgDir(); s:NetrwOptionSave()
+-			     and s:NetrwOptionRestore() now take a parameter
+-			     specifying the type of variables to be used for
+-			     saving and restoring (either "w:" or "s:")
+-	      Sep 04, 2007 * added the :NetrwClean[!] command
+-	v111: Jul 25, 2007 * using Windows but not using Cygwin, netrw does a
+-			     "file bufname" where the bufname uses /s
+-			     instead of \s; Vim "fixes" it by changing the
+-			     bufname to use \s anyway.  This meant that
+-			     NetrwGetBuffer() didn't find the appropriately
+-			     named buffer, and so would generate a new
+-			     buffer listing; hence the cursor would appear
+-			     to have been moved when doing a preview.
+-			   * added <2-leftmouse> map to return to netrw's
+-			     browser display
+-	      Aug 16, 2007 * added the mark-file system, including
+-			     maps for mf mp mt mz and mu.  Modifications
+-			     made to maps for a D O and R to support
+-			     marked files.
+-	v110: May 10, 2007 * added [ and ] maps to NetrwTreeListing
+-	      May 25, 2007 * |g:netrw_preview| included
+-	      May 29, 2007 * modified netrw#NetBrowseX to consistently use
+-			     g:netrw_shq instead of hardcoded quotes,
+-			     and modified the snippet that sets up redir
+-			     so Windows machines use "nul" instead of
+-			     "/dev/null".
+-	      Jun 01, 2007 * fixed bug -- NetGetBuffer() wasn't always
+-			     recognizing a buffer name match when it should,
+-			     thus resulting in [Scratch] buffers.
+-	      Jun 04, 2007 * Gary Johnson found a bugfix for the "c" mapping
+-			     when the directory is to be made current but
+-			     the name contains spaces.
+-	v109: Mar 26, 2007 * if a directory name includes a "$" character,
+-			     Explore() will use expand() in an attempt to
+-			     decipher the name.
+-	      May 07, 2007 * g:netrw_use_errorwindow now allows one to
+-			     have error messages go to a reliable window
+-			     or to use a less reliable but recallable
+-			     echoerr method
+-	      May 07, 2007 * g:netrw_scpport and g:netrw_sshport support
+-			     use of -P and -p, respectively, to set port
+-			     for scp/ssh.
+-	v108: Jan 03, 2007 * included preview map (|netrw-p|), supporting
+-			     remote browsing
+-			   * netrw can now source remote files
+-	      Jan 26, 2007 * Colton Jamieson noted that remote directory
+-			     browsing did not support alternate port
+-			     selection.  This feature has now been extended
+-			     to apply to all remote browsing commands via ssh.
+-			     (list, remove/delete, rename)
+-	      Jan 31, 2007 * Luis Florit reported that @* was an invalid
+-			     register.  The @* register is now only saved and
+-			     restored if |'guioptions'| contains "a".
+-	      Feb 02, 2007 * Fixed a bug that cropped up when writing files
+-			     via scp using cygwin
+-	      Feb 08, 2007 * tree listing mode managed to stop working again;
+-			     fixed again!
+-	      Feb 15, 2007 * Guido Van Hoecke reported that netrw didn't
+-			     handle browsing well with M$ ftp servers.  He even
+-			     set up a temporary account for me to test with
+-			     (thanks!).  Netrw now can browse M$ ftp servers.
+-	v107: Oct 12, 2006 * bypassed the autowrite option
+-	      Oct 24, 2006 * handles automatic decompression of *.gz and *.bz2
+-			     files
+-	      Nov 03, 2006 * Explore will highlight matching files when
+-			     **/pattern is used (and if the |'hls'| option
+-			     is set)
+-	      Nov 09, 2006 * a debugging line, when enabled, was inadvertently
+-			     bringing up help instead of simply reporting on
+-			     list contents
+-	      Nov 21, 2006 * tree listing improved (cursor remains put)
+-	      Nov 27, 2006 * fixed b:netrw_curdir bug when repeated "i"s were
+-			     pressed.
+-	      Dec 15, 2006 * considerable qty of changes, mostly to share more
+-			     code between local and remote browsing.  Includes
+-			     support for tree-style listing for both remote
+-			     and local browsing.
+-	      Dec 15, 2006 * Included Peter Bengtsson's modifications to
+-			     support the Amiga.
+-	v106: Sep 21, 2006 * removed old v:version<700 code as netrw now
+-			     requires vim 7.0
+-			   * worked around a bug where register * was
+-			     overwritten during local browsing
+-	v104: Sep 05, 2006 * as suggested by Rodolfo Borges, :Explore and
+-			     variants will position the cursor on the file
+-			     just having been edited
+-			   * changed default |g:netrw_sort_sequence| order
+-			   * changed b, Nb to simply mb  (see |netrw-mb|)
+-			   * changed B, NB to simply gb  (see |netrw-gb|)
+-			   * tree listing style (see |g:netrw_liststyle|)
+-			   * attempts to retain the alternate file
+-	v103: Jul 26, 2006 * used Yakov Lerner's tip#1289 to improve netrw
+-			     error message display
+-			   * wide listings didn't handle files with backslashes
+-			     in their names properly.  A symptom was an
+-			     inability to open files.
+-	      Aug 09, 2006 * included "t" mapping for opening tabbed windows,
+-			    both for remote and local browsing
+-			   * changed netrw_longlist to netrw_liststyle
+-	      Aug 15, 2006 * fixed one of the NB maps
+-	      Aug 22, 2006 * changed *Explore commands to use -nargs=* instead
+-			     of -nargs=?.  Allows both -complete=dir _and_ the
+-			     starstar arguments to work (-nargs=? seems to
+-			     require one or the other).
+-	      Aug 23, 2006 * copied all w:.. variables across splits to
+-			     new windows
+-	      Aug 25, 2006 * when g:netrw_browsex_viewer was '-'
+-			     (see |g:netrw_browsex_viewer|) it wasn't causing
+-			     netrwFileHandlers#Invoke() to be called as it
+-			     was expected to.  (tnx Steve Dugaro)
+-	      Aug 29, 2006 * changed NetBrowseX() to use "setlocal ... noswf"
+-			     instead of "set ... noswf"  (tnx Benji Fisher)
+-	      Aug 31, 2006 * tabs and fastbrowse<=1 didn't work together.
+-	v102: Jun 15, 2006 * chgd netrwPlugin to call netrw#LocalBrowseCheck()
+-			   * bugfix: g:netrw_keepdir==0 had stopped working
+-	      Jul 06, 2006 * bugfix: NetOptionSave/Restore now saves/restores
+-			     the unnamed register (|registers|)
+-	      Jul 07, 2006 * |g:netrw_menu| support included
+-	      Jul 13, 2006 * :Texplore command implemented
+-	      Jul 17, 2006 * NetSplit and (Local|Net)BrowseChgDir() were both
+-			     splitting windows.  This affected o, v, and
+-			     g:netrw_browse_split.
+-	      Jul 20, 2006 * works around wildignore setting (was causing
+-			     netrw's local browser not to list wildignore'd
+-			     files)
+-	      Jul 24, 2006 * <leftmouse> acts as a <cr> for selecting a file
+-			     <rightmouse> acts as a <del> for deleting a file
+-	v100: May 14, 2006 * when using Windows and shell==cmd.exe, the
+-			     default for g:netrw_ignorenetrc is now 1
+-			   * bugfix: unwanted ^Ms now removed
+-			     (affected shell==cmd.exe - Windows)
+-			   * added Bookmarks and History to the menu
+-			   * an error message about non-existing
+-			     w:netrw_longlist was appearing during attempts to
+-			     Explore (fixed)
+-			   * g:netrw_shq now available to make netrw use
+-			     specified style of quotes for commands
+-	     May 29, 2006  * user NFH_*() functions were inadvertently being
+-			     ignored
+-			   * fixed a Windows non-cygwin ftp handling problem.
+-			   * hiding pattern candidate separators included some
+-			     characters it shouldn't have (tnx to Osei Poku)
+-	     Jun 01, 2006  * for browsing, netrw was supposed to use "dir"
+-			     instead of "ls -lF" when using
+-			     ftp+non-cygwin+windows.  Fixed.
+-			   * an inadvertently left-in-place debugging statement
+-			     was preventing use of the "x" key with browsing.
+-	     Jun 05, 2006  * g:netrw_nogx available to prevent making the gx
+-			     map (see |g:netrw_nogx|)
+-			   * bugfix, Explore wouldn't change directory
+-			     properly (vim ., :Explore subdirname)
+-	     Jun 06, 2006  * moved history to 2nd line in Netrw menu
+-			   * fixed delete for unix-based systems
+-	     Jun 07, 2006  * x key now works for windows-noncygwin-ftp
+-	     Jun 08, 2006  * Explore */pat and **//pat now wraps
+-	v99: May 09, 2006  * g:netrw_browse_split=3 for opening files in new
+-			     tabs implemented.
+-	     May 12, 2006  * deletes temporary file at end of NetRead()
+-			   * visual mode based Obtain implemented
+-			   * added -complete=dir to the various Explore
+-			     commands
+-	v98: May 02, 2006  * the "p" key didn't work properly when the browsing
+-			     directory name had spaces in it.
+-	v97: May 01, 2006  * exists("&acd") now used to determine if
+-			     the 'acd' option exists
+-			   * "obtain" now works again under Windows
+-	v96:		   * bugfix - the |'acd'| option is not always defined
+-			     but is now bypassed only when it is
+-	v95:		   * bugfix - Hiding mode worked correctly (don't show
+-			     any file matching any of the g:netrw_hide
+-			     patterns), but showing mode was showing only those
+-			     files that didn't match any of the g:netrw_hide
+-			     patterns.  Instead, it now shows all files that
+-			     match any of the g:netrw_hide patterns (the
+-			     difference between a logical and and logical or).
+-	v94:		   * bugfix - a Decho() had a missing quote; only
+-			     affects things when debugging was enabled.
+-	v93:		   * bugfix - removed FocusGained event from causing a
+-			     slow-browser refresh for Windows
+-	v92:		   * :Explore **//pattern implemented
+-			      (**/filepattern was already taken)
+-	v91:		   * :Explore */pattern implemented
+-			   * |'acd'| option bypassed
+-	v90:		   * mark ', as suggested by Yegappan Lakshmanan, used
+-			     to help guarantee entry into the jump list when
+-			     appropriate.
+-			   * <s-down> and <s-up> are no longer defined until a
+-			     :Explore **/pattern  is used (if the user already
+-			     has a map for them).  They will be defined for new
+-			     browser windows from that point forward.
+-	v89:		   * A <s-down>, <s-up>, :Nexplore, or a :Pexplore
+-			     without having first done an :Explore **/pattern
+-			     (see |netrw-starstar|) caused
+-			     a lot of unhelpful error messages to appear
+-	v88:		   * moved DrChip.Netrw menu to Netrw.  Now has
+-			     priority 80 by default.
+-			     g:NetrwTopLvlMenu == "Netrw" and can be changed
+-			     by the user to suit.  The priority is given by
+-			     g:NetrwMenuPriority.
+-			   * Changed filetype for browser displays from
+-			     netrwlist to netrw.
+-	v87:		   * bug fix -- menus were partially disappearing
+-	v85:		   * bug fix -- missing an endif
+-			   * bug fix -- handles spaces in names and directories
+-			     when using ftp-based browsing
+-	v83:		   * disabled stop-acd handling; the change in directory
+-			     handling may allow acd to be used again.
+-			   * D was refusing to delete remote files/directories
+-			     in wide listing mode.
+-	v81:		   * FocusGained also used to refresh/wipe local browser
+-			     directory buffers
+-			   * (bugfix) netrw was leaving [Scratch] buffers behind
+-			     when the user had the "hidden" option set.  The
+-			     'hidden' option is now bypassed.
+-	v80:		   * ShellCmdPost event used in conjunction with
+-			     g:netrw_fastbrowse to refresh/wipe local browser
+-			     directory buffers.
+-	v79:		   * directories are now displayed with nowrap
+-			   * (bugfix) if the column width was smaller than the
+-			     largest file's name, then netrw would hang when
+-			     using wide-listing mode - fixed
+-			   * g:netrw_fastbrowse introduced
+-	v78:		   * progress has been made on allowing spaces inside
+-			     directory names for remote work (reading, writing,
+-			     browsing).  (scp)
+-	v77:		   * Mikolaj Machowski fixed a bug in a substitute cmd
+-			   * g:netrw_browsex_viewer implemented
+-			   * Mikolaj Machowski pointed out that gnome-open is
+-			     often executable under KDE systems, although it is
+-			     effectively not functional.  NetBrowseX now looks
+-			     for "kicker" as a running process to determine if
+-			     KDE is actually running.
+-			   * Explorer's O functionality was inadvertently left
+-			     out.  Netrw now does the same thing, but with the
+-			     "P" key.
+-			   * added g:netrw_browse_split option
+-			   * fixed a bug where the directory contained a "." but
+-			     the file didn't (was treating the dirname from "."
+-			     onwards as a suffix)
+-	v76:		   * "directory is missing" error message now restores
+-			      echo highlighting
+-	v75:		   * file://... now conforms to RFC2396 (thanks to
+-			     S. Zacchiroli)
+-			   * if the binary option is set, then NetWrite() will
+-			     only write the whole file (line numbers don't make
+-			     sense with this).  Supports writing of tar and zip
+-			     files.
+-	v74:		   * bugfix (vim, then :Explore) now works
+-			   * ctrl-L keeps cursor at same screen location (both
+-			     local and remote browsing)
+-			   * netrw now can read remote zip and tar files
+-			   * Obtain now uses WinXP ftp+.netrc successfully
+-	v73:		   * bugfix -- scp://host/path/file was getting named
+-			     incorrectly
+-			   * netrw detects use of earlier-than-7.0 version of
+-			     vim and issues a pertinent error message.
+-			   * netrwSettings.vim is now uses autoloading.  Only
+-			     <netrwPlugin.vim> is needed as a pure plugin
+-			     (ie. always loaded).
+-	v72:		   * bugfix -- formerly, one could prevent the loading
+-			     of netrw by "let g:loaded_netrw=1"; when
+-			     autoloading became supported, this feature was
+-			     lost.  It is now restored.
+-	v71:		   * bugfix -- made some "set nomodifiable"s into
+-			     setlocal variants (allows :e somenewfile  to be
+-			     modifiable as usual)
+-			   * NetrwSettings calls a netrw function, thereby
+-			     assuring that netrw has loaded.  However, if netrw
+-			     does not load for whatever reason, then
+-			     NetrwSettings will now issue a warning message.
+-			   * For what reason I don't recall, when wget and fetch
+-			     are both not present, and an attempt to read a
+-			     http://... url is made, netrw exited.  It now only
+-			     returns.
+-			   * When ch=1, on the second and subsequent uses of
+-			     browsing Netrw would issue a blank line to clear
+-			     the echo'd messages.  This caused an annoying
+-			     "Hit-Enter" prompt; now a blank line message
+-			     is echo'd only if &ch>1.
+-	v70:		   * when using |netrw-O|, the "Obtaining filename"
+-			     message is now shown using |hl-User9|.  If User9
+-			     has not been defined, netrw itself will define it.
+-	v69:		   * Bugfix: win95/98 machines were experiencing a
+-			     "E121: Undefined variable: g:netrw_win95ftp"
+-			     message
+-	v68:		   * double-click-leftmouse selects word under mouse
+-	v67:		   * Passwords which contain blanks will now be
+-			     surrounded by double-quotes automatically (Yongwei)
+-	v66:		   * Netrw now seems to work with a few more Windows
+-			     situations
+-			   * O now obtains a file: remote browsing
+-			     file -> local copy, locally browsing
+-			     file -> current directory (see :pwd)
+-			   * i now cycles between thin, long, and wide listing
+-			     styles
+-			   * NB and Nb are maps that are always available;
+-			     corresponding B and b maps are only available when
+-			     not using wide listing in order to allow them to
+-			     be used for motions
+-	v65:		   * Browser functions now use NetOptionSave/Restore; in
+-			     particular, netrw now works around the report
+-			     setting
+-	v64:		   * Bugfix - browsing a "/" directory (Unix) yielded
+-			     buffers named "[Scratch]" instead of "/"
+-			   * Bugfix - remote browsing with ftp was omitting
+-			     the ./ and ../
+-	v63:		   * netrw now takes advantage of autoload (needs 7.0)
+-			   * Bugfix - using r (to reverse sort) working again
+-	v62:		   * Bugfix - spaces allowed again in directory names
+-			     with g:netrw_keepdir=0.  In fact, I've tested netrw
+-			     with most ANSI punctuation marks for directory
+-			     names.
+-			   * Bugfix - NetrwSettings gave errors when
+-			     g:netrw_silent had not be set.
+-	v61:		   * Document upgrade -- netrw variable-based settings
+-			     all should have tags.  Supports NetrwSettings cmd.
+-			   * Several important variables are window-oriented.
+-			     Netrw has to transfer these across a window split.
+-			     See s:BufWinVars() and s:UseBufWinVars().
+-	v60:		   * When using the i map to switch between long and
+-			     short listings, netrw will now keep cursor on same
+-			     line
+-			   * "Match # of #" now uses status line
+-			   * :Explore **/*.c  will now work from a
+-			     non-netrw-browser window
+-			   * :Explore **/patterns can now be run in separate
+-			     browser windows
+-			   * active banner (hit <cr> will cause various things
+-			     to happen)
+-	v59:		   * bugfix -- another keepalt work-around installed
+-			     (for vim6.3)
+-			   * "Match # of #" for Explore **/pattern matches
+-	v58:		   * Explore and relatives can now handle
+-			     **/somefilepattern (v7)
+-			   * Nexplore and Pexplore introduced (v7).  shift-down
+-			     and shift-up cursor keys will invoke Nexplore and
+-			     Pexplore, respectively.
+-			   * bug fixed with o and v
+-			   * autochdir only worked around for vim when it has
+-			     been compiled with either
+-			     |+netbeans_intg| or |+sun_workshop|
+-			   * Under Windows, all directories and files were
+-			     being preceded with a "/" when local browsing.
+-			     Fixed.
+-			   * When: syntax highlighting is off, laststatus=2, and
+-			     remote browsing is used, sometimes the laststatus
+-			     highlighting bleeds into the entire display.  Work
+-			     around - do an extra redraw in that case.
+-			   * Bugfix: when g:netrw_keepdir=0, due to re-use of
+-			     buffers, netrw didn't change the directory when it
+-			     should've
+-			   * Bugfix: D and R commands work again
+-	v57:		   * Explore and relatives can now handle RO files
+-			   * reverse sort restored with vim7's sort command
+-			   * g:netrw_keepdir now being used to keep the current
+-			     directory unchanged as intended (sense change)
+-			   * vim 6.3 still supported
+-	v56:		   * LocalBrowse now saves autochdir setting, unsets it,
+-			     and restores it before returning.
+-			   * using vim's rename() instead of system +
+-			     local_rename variable
+-			   * avoids changing directory when g:netrw_keepdir is
+-			     false
+-	v55:		   * -bar used with :Explore :Sexplore etc to allow
+-			     multiple commands to be separated by |s
+-			   * browser listings now use the "nowrap" option
+-			   * browser: some unuseful error messages now
+-			     suppressed
+-	v54:		   * For backwards compatibility, Explore and Sexplore
+-			     have been implemented.  In addition, Hexplore and
+-			     Vexplore commands are available, too.
+-			   * <amatch> used instead of <afile> in the
+-			     transparency support (BufReadCmd, FileReadCmd,
+-			     FileWriteCmd)
+-			   * ***netrw*** prepended to various error messages
+-			     netrw may emit
+-			   * g:netrw_port used instead of b:netrw_port for scp
+-			   * any leading [:#] is removed from port numbers
+-	v53:		   * backslashes as well as slashes placed in various
+-			     patterns (ex. g:netrw_sort_sequence) to better
+-			     support Windows
+-	v52:		   * nonumber'ing now set for browsing buffers
+-			   * when the hiding list hid all files, error messages
+-			     ensued. Fixed
+-			   * when browsing, swf is set, but directory is not
+-			     set, when netrw was attempting to restore options,
+-			     vim wanted to save a swapfile to a local directory
+-			     using an url-style path.  Fixed
+-	v51:		   * cygwin detection now automated
+-			     (using windows and &shell is bash)
+-			   * customizable browser "file" rejection patterns
+-			   * directory history
+-			   * :[range]w url  now supported (ie. netrw uses a
+-			     FileWriteCmd event)
+-			   * error messages have a "Press <cr> to continue" to
+-			     allow them to be seen
+-			   * directory browser displays no longer bother the
+-			     swapfile
+-			   * u/U commands to go up and down the history stack
+-			   * history stack may be saved with viminfo with it's
+-			     "!" option
+-			   * bugfixes associated with unwanted [No Files]
+-			     entries
+-	v50:		   * directories now displayed using buftype=nofile;
+-			     should keep the directory names as-is
+-			   * attempts to remove empty "[No File]" buffers
+-			     leftover from :file ..name.. commands
+-			   * bugfix: a "caps-lock" editing difficulty left in
+-			     v49 was fixed
+-			   * syntax highlighting for "Showing:" the hiding list
+-			     included
+-			   * bookmarks can now be retained if "!" is in the
+-			     viminfo option
+-	v49:		   * will use ftp for http://.../ browsing
+-	v48:		   * One may use ftp to do remote host file browsing
+-			   * (windows and !cygwin) remote browsing with ftp can
+-			     now use the "dir" command internally to provide
+-			     listings
+-			   * g:netrw_keepdir now allows one to keep the initial
+-			     current directory as the current directory
+-			     (normally the local file browser makes the
+-			     currently viewed directory the current directory)
+-			   * g:netrw_alto and g:netrw_altv now support
+-			     alternate placement of windows started with o or v
+-			   * Nread ? and Nwrite ?  now uses echomsg (instead of
+-			     echo) so :messages can repeat showing the help
+-			   * bugfix: avoids problems with partial matches of
+-			     directory names to prior buffers with longer names
+-			   * one can suppress error messages with g:netrw_quiet
+-			     ctrl-h used
+-			   * instead of <Leader>h for editing hiding list one
+-			     may edit the sorting sequence with the S map, which
+-			     now allows confirmation of deletion with
+-			     [y(es) n(o) a(ll) q(uit)]
+-			   * the "x" map now handles special file viewing with:
+-			     (windows) rundll32 url.dll (gnome) gnome-open (kde)
+-			     kfmclient If none of these are on the executable
+-			     path, then netrwFileHandlers.vim is used.
+-			   * directory bookmarking during both local and remote
+-			     browsing implemented
+-			   * one may view all, use the hiding list to suppress,
+-			     or use the hiding list to show-only remote and
+-			     local file/directory listings
+-			   * improved unusual file and directory name handling
+-			     preview window support
+-	v47:		   * now handles local browsing.
+-	v46:		   * now handles remote browsing
+-			   * g:netrw_silent (if 1) will cause all transfers to
+-			     be silent
+-	v45:		   * made the [user@]hostname:path form a bit more
+-			     restrictive to better handle errors in using
+-			     protocols (e.g. scp:usr@host:file was being
+-			     recognized as an rcp request)
+-	v44:		   * changed from "rsync -a" to just "rsync"
+-			   * somehow an editing error messed up the test to
+-			     recognize use of the fetch method for NetRead.
+-			   * more debugging statements included
+-	v43:		   * moved "Explanation" comments to <pi_netrw.txt> help
+-			     file as "Network Reference" (|netrw-ref|)
+-			   * <netrw.vim> now uses Dfunc() Decho() and Dret() for
+-			     debugging
+-			   * removed superfluous NetRestorePosn() calls
+-	v42:		   * now does BufReadPre and BufReadPost events on
+-			     file:///* and file://localhost/*
+-	v41:		   * installed file:///* and file://localhost/* handling
+-	v40:		   * prevents redraw when a protocol error occurs so
+-			     that the user may see it
+-	v39:		   * sftp support
+-	v38:		   * Now uses NetRestorePosn() calls with Nread/Nwrite
+-			     commands
+-			   * Temporary files now removed via bwipe! instead of
+-			     bwipe (thanks to Dave Roberts)
+-	v37:		   * Claar's modifications which test if ftp is
+-			     successful, otherwise give an error message
+-			   * After a read, the alternate file was pointing to
+-			     the temp file.  The temp file buffer is now wiped
+-			     out.
+-			   * removed silent from transfer methods so user can
+-			     see what's happening
++	v149:	Apr 18, 2013	* in wide listing format, now have maps for
++				  w and b to move to next/previous file
++		Apr 26, 2013	* one may now copy files in the same
++				  directory; netrw will issue requests for
++				  what names the files should be copied under
++		Apr 29, 2013	* Trying Benzinger's problem again.  Seems
++				  that commenting out the BufEnter and
++				  installing VimEnter (only) works.  Weird
++				  problem!  (tree listing, vim -O Dir1 Dir2)
++		May 01, 2013	* :Explore ftp://... wasn't working.  Fixed.
++		May 02, 2013	* introduced |g:netrw_bannerbackslash| as
++				  requested by Paul Domaskis.
++		May 18, 2013	* More fixes for windows (not cygwin)
++	v148:	Apr 16, 2013	* changed Netrw's Style menu to allow direct
++				  choice of listing style, hiding style, and
++				  sorting style
++	v147:	Nov 24, 2012	* (James McCoy) Even with g:netrw_dirhistmax
++				  at zero, the .vim/ directory would be
++				  created to support history/bookmarks.  I've
++				  gone over netrw to suppress history and
++				  bookmarking when g:netrw_dirhistmax is zero.
++				  For instance, the menus will display
++				  (disabled) when attempts to use
++				  bookmarks/history are made.
++		Nov 29, 2012	* (Kim Jang-hwan) reported that with
++				  g:Align_xstrlen set to 3 that the cursor was
++				  moved (linewise) after invocation.  This
++				  problem also afflicted netrw.
++				  (see |g:netrw_xstrlen|) Fixed.
++		Jan 21, 2013	* (mattn) provided a patch to insert some
++				  endifs needed with the code implementing
++				  |netrw-O|.
++		Jan 24, 2013	* (John Szakmeister) found that remote file
++				  editing resulted in filetype options being
++				  overwritten by NetrwOptionRestore().  I
++				  moved filetype detect from NetrwGetFile()
++				  to NetrwOptionRestore.
++		Feb 17, 2013	* (Yukhiro Nakadaira) provided a patch
++				  correcting some syntax errors.
++		Feb 28, 2013	* (Ingo Karkat) provided a patch preventing
++				  receipt of an |E95| when revisiting a
++				  file://... style url.
++		Mar 18, 2013	* (Gary Johnson) pointed out that changing
++				  cedit to <Esc> caused problems with visincr;
++				  the cedit setting is now bypassed in netrw too.
++		Apr 02, 2013	* (Paul Domaskis) reported an undefined
++				  variable error (s:didstarstar) was
++				  occurring.  It is now defined at
++				  initialization.
++				* included additional sanity checking for the
++				  marked file functions.
++				* included |netrw-qF| and special "j" option
++				  handling for |netrw-mg|
++		Apr 12, 2013	* |netrw-u| and |netrw-U| now handle counts
++				* the former mapping for "T" has been removed;
++				  in its place are new maps, |netrw-Tb| and |netrw-Th|.
++				* the menu now supports a "Targets" entry for
++				  easier target selection. (see |netrw-mt|)
++				* (Paul Domaskis) reported some problems with
++				  moving/copying files under Windows' gvim
++				  (ie. not cygwin).  Fixed.
++				* (Paul Mueller) provided a patch to get
++				  start and rundll working via |netrw-gx|
++				  by bypassing the user's |'shellslash'| option.
++	v146:	Oct 20, 2012	* (David Kotchan) reported that under Windows,
++				  directories named with unusual characters
++				  such as "#" or "$" were not being listed
++				  properly.
++				* (Kenny Lee) reported that the buffer list
++				  was being populated by netrw buffers.
++				  Netrw will now |:bwipe| netrw buffers
++				  upon editing a file if g:netrw_fastbrowse
++				  is zero and its not in tree listing style.
++				* fixed a bug with s:NetrwInit() that
++				  prevented initialization with |Lists| and
++				  |Dictionaries|.
++				* |netrw-mu| now unmarks marked-file lists
++	v145:	Apr 05, 2012	* moved some command from a g:netrw_local_...
++				  format to g:netwr_local... format
++				* included some NOTE level messages about
++				  commands that aren't executable
++				* |g:netrw_errorlvl| (default: NOTE=0)
++				  option introduced
++		May 18, 2012	* (Ilya Dogolazky) a scenario where a
++				  |g:netrw_fastbrowse| of zero did not
++				  have a local directory refreshed fixed.
++		Jul 10, 2012	* (Donatas) |netrw-gb| wasn't working due
++				  to an incorrectly used variable.
++		Aug 09, 2012	* (Bart Baker) netrw was doubling
++				  of entries after a split.
++				* (code by Takahiro Yoshihara) implemented
++				  |g:netrw_dynamic_maxfilenamelen|
++		Aug 31, 2012	* (Andrew Wong) netrw refresh overwriting
++				  the yank buffer.
++	v144: Mar 12, 2012	* when |CTRL-W_s| or |CTRL-W_v| are used,
++				  or their wincmd equivalents, on a netrw
++				  buffer, the netrw's w: variables were
++				  not copied over.  Fixed.
++		Mar 13, 2012	* nbcd_curpos_{bufnr('%')} was commented
++				  out, and was mistakenly used during
++				  RestorePosn.  Unfortunately, I'm not
++				  sure why it was commented out, so this
++				  "fix" may re-introduce an earlier problem.
++		Mar 21, 2012	* included s:rexposn internally to make
++				  :Rex return the cursor to the same pos'n
++				  upon restoration of netrw buffer
++		Mar 27, 2012	* (sjbesse) s:NetrwGetFile() needs to remove
++				  "/" from the netrw buffer's usual |'isk'|
++				  in order to allow "filetype detect" to work
++				  properly for scripts.
++	v143: Jun 01, 2011	* |g:netrw_winsize| will accept a negative
++				  number; the absolute value of it will then
++				  be used to specify lines/columns instead of
++				  a percentage.
++		Jul 05, 2011	* the "d" map now supports mkdir via ftp
++				  See |netrw-d| and |g:netrw_remote_mkdir|
++		Jul 11, 2011	* Changed Explore!, Sexplore!, and Vexplore
++				  to use a percentage of |winwidth()| instead
++				  of a percentage of |winheight()|.
++		Jul 11, 2011	* included support for https://... I'm just
++				  beginning to test this, however.
++		Aug 01, 2011	* changed RestoreOptions to also restore
++				  cursor position in netrw buffers.
++		Aug 12, 2011	* added a note about "%" to the balloon
++		Aug 30, 2011	* if |g:netrw_nobeval| exists, then balloon
++				  evaluation is suppressed.
++		Aug 31, 2011	* (Benjamin R Haskell) provided a patch that
++				  implements non-standard port handling for
++				  files opened via the remote browser.
++		Aug 31, 2011	* Fixed a **//pattern  Explorer bug
++		Sep 15, 2011	* (reported by Francesco Campana) netrw
++				  now permits the "@" to be part of the
++				  user id (if there's an @ that appears
++				  to the right).
++		Nov 21, 2011	* New option: |g:netrw_ftp_options|
++		Dec 07, 2011	* (James Sinclair) provided a fix handling
++				  attempts to use a uid and password when
++				  they weren't defined.  This affected
++				  NetWrite (NetRead already had that fix).
+ 
+ 
+ ==============================================================================
+diff -Naur vim73.orig/runtime/doc/pi_paren.txt vim73/runtime/doc/pi_paren.txt
+--- vim73.orig/runtime/doc/pi_paren.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pi_paren.txt	2013-06-07 17:07:09.485648255 +0000
+@@ -1,4 +1,4 @@
+-*pi_paren.txt*  For Vim version 7.3.  Last change: 2008 Jun 16
++*pi_paren.txt*  For Vim version 7.3.  Last change: 2013 May 08
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -46,7 +46,10 @@
+   closed folds.
+ - 'synmaxcol' times 2 bytes before or after the cursor to avoid a delay
+   in a long line with syntax highlighting.
+-
++- A timeout of 300 msec (60 msec in Insert mode). This can be changed with the
++  g:matchparen_timeout and g:matchparen_insert_timeout variables and their
++  buffer-local equivalents b:matchparen_timeout and
++  b:matchparen_insert_timeout.
+ 
+ If you would like the |%| command to work better, the matchit plugin can be
+ used, see |matchit-install|.  This plugin also helps to skip matches in
+diff -Naur vim73.orig/runtime/doc/pi_tar.txt vim73/runtime/doc/pi_tar.txt
+--- vim73.orig/runtime/doc/pi_tar.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pi_tar.txt	2013-06-07 17:07:09.528981465 +0000
+@@ -1,14 +1,21 @@
+-*pi_tar.txt*	For Vim version 7.3.  Last change: 2010 Aug 09
++*pi_tar.txt*	For Vim version 7.3.  Last change: 2013 Apr 17
+ 
+ 		       +====================+
+ 		       | Tar File Interface |
+ 		       +====================+
+ 
+-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
++Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
+ 	  (remove NOSPAM from Campbell's email first)
+-Copyright 2005-2010: The GPL (gnu public license) applies to	*tar-copyright*
+-	   tar.vim, tarPlugin.vim, and pi_tar.txt.
+-	   No warranty, express or implied.  Use At-Your-Own-Risk.
++Copyright 2005-2012:					*tar-copyright*
++	The VIM LICENSE (see |copyright|) applies to the files in this
++	package, including tarPlugin.vim, tar.vim, and pi_tar.txt.  Like
++	anything else that's except use "tar.vim" instead of "VIM".  Like
++	anything else that's free, tar.vim and its associated files are
++	provided *as is* and comes with no warranty of any kind, either
++	expressed or implied.  No guarantees of merchantability.  No
++	guarantees of suitability for any purpose.  By using this plugin, you
++	agree that in no event will the copyright holder be liable for any
++	damages resulting from the use of this software. Use at your own risk!
+ 
+ ==============================================================================
+ 1. Contents					*tar* *tar-contents*
+@@ -43,6 +50,21 @@
+ 	*g:tar_extractcmd* , which by default is >
+ 		"tar -xf"
+ <
++						*:TarDiff*
++   DIFFERENCING SUPPORT~
++
++   :TarDiff [filename]
++
++	This command will attempt to show the differences between the tarball
++	version of a file and the associated file on the system.  In order to
++	find that file on the system, the script uses the path associated with
++	the file mentioned in the tarball.  If the current directory is not
++	correct for that path, :TarDiff will fail to find the associated file.
++
++	If the [filename] is given, that that filename (and path) will be used
++	to specify the associated file.
++
++
+    PREVENTING LOADING~
+ 
+    If for some reason you do not wish to use vim to examine tar'd files,
+@@ -83,8 +105,13 @@
+ 4. History						*tar-history*
+ 
+ 
++   v28 Jun 23, 2011 * a few more decompression options (tbz tb2 txz)
++   v27 May 31, 2011 * moved cygwin detection before g:tar_copycmd handling
++   		    * inserted additional |:keepj| modifiers
++		    * changed silent  to  sil!  (|:silent|)
+    v26 Aug 09, 2010 * uses buffer-local instead of window variables to hold
+ 		      tarfile name
++		    * inserted keepj before 0d to protect jump list
+    v25 Jun 19, 2010 * (Jan Steffens) added support for xz compression
+    v24 Apr 07, 2009 * :Untarvim command implemented
+        Sep 28, 2009 * Added lzma support
+diff -Naur vim73.orig/runtime/doc/pi_vimball.txt vim73/runtime/doc/pi_vimball.txt
+--- vim73.orig/runtime/doc/pi_vimball.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pi_vimball.txt	2013-06-07 17:07:09.545648084 +0000
+@@ -1,4 +1,4 @@
+-*pi_vimball.txt*	For Vim version 7.3.  Last change: 2010 Apr 12
++*pi_vimball.txt*	For Vim version 7.3.  Last change: 2012 Jan 17
+ 
+ 			       ----------------
+ 			       Vimball Archiver
+@@ -6,16 +6,22 @@
+ 
+ Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
+ 	  (remove NOSPAM from Campbell's email first)
+-Copyright: (c) 2004-2009 by Charles E. Campbell, Jr.	*Vimball-copyright*
+-	   The VIM LICENSE applies to Vimball.vim, and Vimball.txt
+-	   (see |copyright|) except use "Vimball" instead of "Vim".
+-	   No warranty, express or implied.
+-	   Use At-Your-Own-Risk!
++Copyright: (c) 2004-2012 by Charles E. Campbell, Jr.	*Vimball-copyright*
++	The VIM LICENSE (see |copyright|) applies to the files in this
++	package, including vimballPlugin.vim, vimball.vim, and pi_vimball.txt.
++	except use "vimball" instead of "VIM".  Like anything else that's free,
++	vimball.vim and its associated files are provided *as is* and comes with
++	no warranty of any kind, either expressed or implied.  No guarantees
++	of merchantability.  No guarantees of suitability for any purpose.  By
++	using this plugin, you agree that in no event will the copyright
++	holder be liable for any damages resulting from the use of this
++	software. Use at your own risk!
+ 
+ ==============================================================================
+ 1. Contents				*vba* *vimball* *vimball-contents*
+ 
+ 	1. Contents......................................: |vimball-contents|
++	2. Vimball Introduction..........................: |vimball-intro|
+ 	3. Vimball Manual................................: |vimball-manual|
+ 	   MkVimball.....................................: |:MkVimball|
+ 	   UseVimball....................................: |:UseVimball|
+@@ -176,6 +182,24 @@
+ ==============================================================================
+ 4. Vimball History					*vimball-history* {{{1
+ 
++	34 : Sep 22, 2011 * "UseVimball path" now supports a non-full path by
++			    prepending the current directory to it.
++	33 : Apr 02, 2011 * Gave priority to *.vmb over *.vba
++			  * Changed silent! to sil! (shorter)
++			  * Safed |'swf'| setting (during vimball extraction,
++			    its now turned off)
++	32 : May 19, 2010 * (Christian Brabrandt) :so someplugin.vba and
++			    :so someplugin.vba.gz (and the other supported
++			    compression types) now works
++			  * (Jan Steffens) added support for xz compression
++			  * fenc extraction was erroneously picking up the
++			    end of the line number when no file encoding
++			    was present.  Fixed.
++			  * By request, beginning the switchover from the vba
++			    extension to vmb.  Currently both are supported;
++			    MkVimball, however, now will create *.vmb files.
++	     Feb 11, 2011 * motoyakurotsu reported an error with vimball's
++			    handling of zero-length files
+ 	30 : Dec 08, 2008 * fnameescape() inserted to protect error
+ 			    messaging using corrupted filenames from
+ 			    causing problems
+@@ -199,6 +223,8 @@
+ 			    causing problems as reported by Zhang Shuhan
+ 	24 : Nov 15, 2007 * g:vimball_path_escape used by s:Path() to
+ 	                    prevent certain characters from causing trouble
++			    (defunct: |fnameescape()| and |shellescape()|
++			    now used instead)
+ 	22 : Mar 21, 2007 * uses setlocal instead of set during BufEnter
+ 	21 : Nov 27, 2006 * (tnx to Bill McCarthy) vimball had a header
+ 	                    handling problem and it now changes \s to /s
+diff -Naur vim73.orig/runtime/doc/pi_zip.txt vim73/runtime/doc/pi_zip.txt
+--- vim73.orig/runtime/doc/pi_zip.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/pi_zip.txt	2013-06-07 17:07:09.555648055 +0000
+@@ -1,30 +1,31 @@
+-*pi_zip.txt*	For Vim version 7.3.  Last change: 2010 Apr 12
++*pi_zip.txt*	For Vim version 7.3.  Last change: 2013 Apr 17
+ 
+ 				+====================+
+ 				| Zip File Interface |
+ 				+====================+
+ 
+-Author:  Charles E. Campbell, Jr.  <NdrOchip@ScampbellPfamily.AbizM>
++Author:  Charles E. Campbell  <NdrOchip@ScampbellPfamily.AbizM>
+ 	  (remove NOSPAM from Campbell's email first)
+-Copyright: Copyright (C) 2005-2009 Charles E Campbell, Jr *zip-copyright*
+-           Permission is hereby granted to use and distribute this code,
+-	   with or without modifications, provided that this copyright
+-	   notice is copied with it. Like anything else that's free,
+-	   zip.vim, zipPlugin.vim, and pi_zip.txt are provided *as is*
+-	   and it comes with no warranty of any kind, either expressed or
+-	   implied. By using this plugin, you agree that in no event will
+-	   the copyright holder be liable for any damages resulting from
+-	   the use of this software.
++Copyright: Copyright (C) 2005-2012 Charles E Campbell	 *zip-copyright*
++	The VIM LICENSE (see |copyright|) applies to the files in this
++	package, including zipPlugin.vim, zip.vim, and pi_zip.vim.  except use
++	"zip.vim" instead of "VIM".  Like anything else that's free, zip.vim
++	and its associated files are provided *as is* and comes with no
++	warranty of any kind, either expressed or implied.  No guarantees of
++	merchantability.  No guarantees of suitability for any purpose.  By
++	using this plugin, you agree that in no event will the copyright
++	holder be liable for any damages resulting from the use of this
++	software. Use at your own risk!
+ 
+ ==============================================================================
+-1. Contents					*zip* *zip-contents*
++1. Contents						*zip* *zip-contents*
+    1. Contents................................................|zip-contents|
+    2. Usage...................................................|zip-usage|
+    3. Additional Extensions...................................|zip-extension|
+    4. History.................................................|zip-history|
+ 
+ ==============================================================================
+-2. Usage					*zip-usage* *zip-manual*
++2. Usage						*zip-usage* *zip-manual*
+ 
+    When one edits a *.zip file, this plugin will handle displaying a
+    contents page.  Select a file to edit by moving the cursor atop
+@@ -64,17 +65,16 @@
+ 
+    If for some reason you do not wish to use vim to examine zipped files,
+    you may put the following two variables into your <.vimrc> to prevent
+-   the tar plugin from loading: >
++   the zip plugin from loading: >
+ 
+ 	let g:loaded_zipPlugin= 1
+ 	let g:loaded_zip      = 1
+ <
+-<
+ 
+ ==============================================================================
+ 3. Additional Extensions					*zip-extension*
+ 
+-   Apparently there are a number of archivers who generate zip files that
++   Apparently there are a number of archivers which generate zip files that
+    don't use the .zip extension (.jar, .xpi, etc).  To handle such files,
+    place a line in your <.vimrc> file: >
+ 
+@@ -84,7 +84,18 @@
+    should be treated as zip files.
+ 
+ ==============================================================================
+-4. History					*zip-history* {{{1
++4. History							*zip-history* {{{1
++   v26 Nov 15, 2012 * (Jason Spiro) provided a lot of new extensions that
++		      are synonyms for .zip
++   v25 Jun 27, 2011 * using keepj with unzip -Z
++		      (consistent with the -p variant)
++		    * (Ben Staniford) now uses
++			has("win32unix") && executable("cygpath")
++		      before converting to cygwin-style paths
++   v24 Jun 21, 2010 * (CÃ©dric Bosdonnat) unzip seems to need its filenames
++		      fnameescape'd as well as shellquote'd
++		    * (Motoya Kurotsu) inserted keepj before 0d to protect
++		      jump list
+    v17 May 09, 2008 * arno caught a security bug
+    v15 Sep 07, 2007 * &shq now used if not the empty string for g:zip_shq
+    v14 May 07, 2007 * using b:zipfile instead of w:zipfile to avoid problem
+diff -Naur vim73.orig/runtime/doc/quickfix.txt vim73/runtime/doc/quickfix.txt
+--- vim73.orig/runtime/doc/quickfix.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/quickfix.txt	2013-06-07 17:07:09.592314617 +0000
+@@ -1,4 +1,4 @@
+-*quickfix.txt*  For Vim version 7.3.  Last change: 2010 Jul 20
++*quickfix.txt*  For Vim version 7.3.  Last change: 2013 Mar 07
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -215,28 +215,29 @@
+ 
+ 							*:cex* *:cexpr* *E777*
+ :cex[pr][!] {expr}	Create a quickfix list using the result of {expr} and
+-			jump to the first error.  If {expr} is a String, then
+-			each new-line terminated line in the String is
+-			processed using 'errorformat' and the result is added
+-			to the quickfix list.  If {expr} is a List, then each
+-			String item in the list is processed and added to the
+-			quickfix list.  Non String items in the List are
+-			ignored. See |:cc|
+-			for [!].
++			jump to the first error.
++			If {expr} is a String, then each new-line terminated
++			line in the String is processed using the global value
++			of 'errorformat' and the result is added to the
++			quickfix list.
++			If {expr} is a List, then each String item in the list
++			is processed and added to the quickfix list.  Non
++			String items in the List are ignored.
++			See |:cc| for [!].
+ 			Examples: >
+ 				:cexpr system('grep -n xyz *')
+ 				:cexpr getline(1, '$')
+ <
+ 							*:lex* *:lexpr*
+-:lex[pr][!] {expr}	Same as ":cexpr", except the location list for the
++:lex[pr][!] {expr}	Same as |:cexpr|, except the location list for the
+ 			current window is used instead of the quickfix list.
+ 
+ 							*:cgete* *:cgetexpr*
+ :cgete[xpr] {expr}	Create a quickfix list using the result of {expr}.
+-			Just like ":cexpr", but don't jump to the first error.
++			Just like |:cexpr|, but don't jump to the first error.
+ 
+ 							*:lgete* *:lgetexpr*
+-:lgete[xpr] {expr}	Same as ":cgetexpr", except the location list for the
++:lgete[xpr] {expr}	Same as |:cgetexpr|, except the location list for the
+ 			current window is used instead of the quickfix list.
+ 
+ 							*:cad* *:caddexpr*
+@@ -546,13 +547,23 @@
+ modifier is used the buffers are kept loaded.  This makes following searches
+ in the same files a lot faster.
+ 
++Note that |:copen| (or |:lopen| for |:lgrep|) may be used to open a buffer
++containing the search results in linked form.  The |:silent| command may be
++used to suppress the default full screen grep output.  The ":grep!" form of
++the |:grep| command doesn't jump to the first match automatically.  These
++commands can be combined to create a NewGrep command: >
++
++        command! -nargs=+ NewGrep execute 'silent grep! <args>' | copen 42
++
+ 
+ 5.1 using Vim's internal grep
+ 
+ 					*:vim* *:vimgrep* *E682* *E683*
+ :vim[grep][!] /{pattern}/[g][j] {file} ...
+ 			Search for {pattern} in the files {file} ... and set
+-			the error list to the matches.
++			the error list to the matches.  Files matching
++			'wildignore' are ignored; files in 'suffixes' are
++			searched last.
+ 			Without the 'g' flag each line is added only once.
+ 			With 'g' every match is added.
+ 
+@@ -563,6 +574,8 @@
+ 			'ignorecase' applies.  To overrule it put |/\c| in the
+ 			pattern to ignore case or |/\C| to match case.
+ 			'smartcase' is not used.
++			If {pattern} is empty (e.g. // is specified), the last
++			used search pattern is used. |last-pattern|
+ 
+ 			When a number is put before the command this is used
+ 			as the maximum number of matches to find.  Use
+@@ -904,8 +917,8 @@
+ 	%n		error number (finds a number)
+ 	%m		error message (finds a string)
+ 	%r		matches the "rest" of a single-line file message %O/P/Q
+-	%p		pointer line (finds a sequence of '-', '.' or ' ' and
+-			uses the length for the column number)
++	%p		pointer line (finds a sequence of '-', '.', ' ' or
++			tabs and uses the length for the column number)
+ 	%*{conv}	any scanf non-assignable conversion
+ 	%%		the single '%' character
+ 	%s		search text (finds a string)
+diff -Naur vim73.orig/runtime/doc/quickref.txt vim73/runtime/doc/quickref.txt
+--- vim73.orig/runtime/doc/quickref.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/quickref.txt	2013-06-07 17:07:09.622314532 +0000
+@@ -1,4 +1,4 @@
+-*quickref.txt*  For Vim version 7.3.  Last change: 2010 Jul 24
++*quickref.txt*  For Vim version 7.3.  Last change: 2013 May 20
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -7,7 +7,7 @@
+ 
+ 							 *quickref* *Contents*
+  tag	  subject			 tag	  subject	~
+-|Q_ct|  list of help files		|Q_re|	Repeating commands
++|Q_ct|	list of help files		|Q_re|	Repeating commands
+ |Q_lr|	motion: Left-right		|Q_km|	Key mapping
+ |Q_ud|	motion: Up-down			|Q_ab|	Abbreviations
+ |Q_tm|	motion: Text object		|Q_op|	Options
+@@ -27,7 +27,7 @@
+ |Q_co|	change: Complex			|Q_bu|	Buffer list commands
+ |Q_vi|	Visual mode			|Q_sy|	Syntax highlighting
+ |Q_to|	Text objects			|Q_gu|	GUI commands
+-					|Q_fo|  Folding
++					|Q_fo|	Folding
+ 
+ ------------------------------------------------------------------------------
+ N is used to indicate an optional count that can be given before the command.
+@@ -186,7 +186,7 @@
+ |:marks|  :marks	print the active marks
+ |CTRL-O|  N  CTRL-O	go to Nth older position in jump list
+ |CTRL-I|  N  CTRL-I	go to Nth newer position in jump list
+-|:ju|	  :ju[mps]	print the jump list
++|:ju|     :ju[mps]	print the jump list
+ ------------------------------------------------------------------------------
+ *Q_vm*		Various motions
+ 
+@@ -204,30 +204,30 @@
+ ------------------------------------------------------------------------------
+ *Q_ta*		Using tags
+ 
+-|:ta|	   :ta[g][!] {tag}	jump to tag {tag}
+-|:ta|	   :[count]ta[g][!]	jump to [count]'th newer tag in tag list
++|:ta|      :ta[g][!] {tag}	jump to tag {tag}
++|:ta|      :[count]ta[g][!]	jump to [count]'th newer tag in tag list
+ |CTRL-]|      CTRL-]		jump to the tag under cursor, unless changes
+ 				   have been made
+-|:ts|	   :ts[elect][!] [tag]	list matching tags and select one to jump to
++|:ts|      :ts[elect][!] [tag]	list matching tags and select one to jump to
+ |:tjump|   :tj[ump][!] [tag]	jump to tag [tag] or select from list when
+ 				   there are multiple matches
+-|:ltag|	   :lt[ag][!] [tag]	jump to tag [tag] and add matching tags to the
++|:ltag|    :lt[ag][!] [tag]	jump to tag [tag] and add matching tags to the
+ 				   location list
+ 
+-|:tags|	   :tags		print tag list
++|:tags|    :tags		print tag list
+ |CTRL-T|   N  CTRL-T		jump back from Nth older tag in tag list
+-|:po|	   :[count]po[p][!]	jump back from [count]'th older tag in tag list
++|:po|      :[count]po[p][!]	jump back from [count]'th older tag in tag list
+ |:tnext|   :[count]tn[ext][!]	jump to [count]'th next matching tag
+ |:tp|      :[count]tp[revious][!] jump to [count]'th previous matching tag
+-|:tr|	   :[count]tr[ewind][!] jump to [count]'th matching tag
+-|:tl|	   :tl[ast][!]		jump to last matching tag
++|:tr|      :[count]tr[ewind][!]	jump to [count]'th matching tag
++|:tl|      :tl[ast][!]		jump to last matching tag
+ 
+-|:ptag|	   :pt[ag] {tag}	open a preview window to show tag {tag}
+-|CTRL-W_}|     CTRL-W }		like CTRL-] but show tag in preview window
++|:ptag|    :pt[ag] {tag}	open a preview window to show tag {tag}
++|CTRL-W_}|    CTRL-W }		like CTRL-] but show tag in preview window
+ |:pts|     :pts[elect]		like ":tselect" but show tag in preview window
+ |:ptjump|  :ptj[ump]		like ":tjump" but show tag in preview window
+ |:pclose|  :pc[lose]		close tag preview window
+-|CTRL-W_z|     CTRL-W z		close tag preview window
++|CTRL-W_z|    CTRL-W z		close tag preview window
+ ------------------------------------------------------------------------------
+ *Q_sc*		Scrolling
+ 
+@@ -260,7 +260,7 @@
+ |:startreplace| :startr[eplace][!]  start Replace mode, at EOL when [!] used
+ 
+ in Visual block mode:
+-|v_b_I|    I	insert the same text in front of all the selected lines
++|v_b_I|	   I	insert the same text in front of all the selected lines
+ |v_b_A|	   A	append the same text after all the selected lines
+ ------------------------------------------------------------------------------
+ *Q_ai*		Insert mode keys
+@@ -334,16 +334,16 @@
+ *Q_de*		Deleting text
+ 
+ |x|	N  x		delete N characters under and after the cursor
+-|<Del>| N  <Del>	delete N characters under and after the cursor
++|<Del>|	N  <Del>	delete N characters under and after the cursor
+ |X|	N  X		delete N characters before the cursor
+ |d|	N  d{motion}	delete the text that is moved over with {motion}
+-|v_d|	{visual}d	delete the highlighted text
++|v_d|	   {visual}d	delete the highlighted text
+ |dd|	N  dd		delete N lines
+ |D|	N  D		delete to the end of the line (and N-1 more lines)
+ |J|	N  J		join N-1 lines (delete <EOL>s)
+-|v_J|	{visual}J	join the highlighted lines
++|v_J|	   {visual}J	join the highlighted lines
+ |gJ|	N  gJ		like "J", but without inserting spaces
+-|v_gJ|	{visual}gJ	like "{visual}J", but without inserting spaces
++|v_gJ|	   {visual}gJ	like "{visual}J", but without inserting spaces
+ |:d|	:[range]d [x]	delete [range] lines [into register x]
+ ------------------------------------------------------------------------------
+ *Q_cm*		Copying and moving text
+@@ -369,7 +369,7 @@
+ |R|	  N  R		enter Replace mode (repeat the entered text N times)
+ |gR|	  N  gR		enter virtual Replace mode: Like Replace mode but
+ 			   without affecting layout
+-|v_b_r|	  {visual}r{char}
++|v_b_r|	     {visual}r{char}
+ 			in Visual block mode: Replace each char of the
+ 			   selected text with {char}
+ 
+@@ -447,13 +447,13 @@
+ 
+ |visual-index|	list of Visual mode commands.
+ 
+-|v|	   v		start highlighting characters  }  move cursor and use
+-|V|	   V		start highlighting linewise    }  operator to affect
++|v|        v		start highlighting characters  }  move cursor and use
++|V|        V		start highlighting linewise    }  operator to affect
+ |CTRL-V|   CTRL-V	start highlighting blockwise   }  highlighted text
+-|v_o|	   o		exchange cursor position with start of highlighting
+-|gv|	   gv		start highlighting on previous visual area
+-|v_v|	   v		highlight characters or stop highlighting
+-|v_V|	   V		highlight linewise or stop highlighting
++|v_o|      o		exchange cursor position with start of highlighting
++|gv|       gv		start highlighting on previous visual area
++|v_v|      v		highlight characters or stop highlighting
++|v_V|      V		highlight linewise or stop highlighting
+ |v_CTRL-V| CTRL-V	highlight blockwise or stop highlighting
+ ------------------------------------------------------------------------------
+ *Q_to*		Text objects (only in Visual mode or after an operator)
+@@ -509,8 +509,8 @@
+ ------------------------------------------------------------------------------
+ *Q_km*		Key mapping
+ 
+-|:map|	     :ma[p] {lhs} {rhs}	  map {lhs} to {rhs} in Normal and Visual mode
+-|:map!|	     :ma[p]! {lhs} {rhs}  map {lhs} to {rhs} in Insert and Command-line
++|:map|       :ma[p] {lhs} {rhs}	  map {lhs} to {rhs} in Normal and Visual mode
++|:map!|      :ma[p]! {lhs} {rhs}  map {lhs} to {rhs} in Insert and Command-line
+ 				     mode
+ |:noremap|   :no[remap][!] {lhs} {rhs}
+ 				  same as ":map", no remapping for this {rhs}
+@@ -522,19 +522,19 @@
+ 				     Normal and Visual mode
+ |:map_l!|    :ma[p]! [lhs]	  list mappings (starting with [lhs]) for
+ 				     Insert and Command-line mode
+-|:cmap|	     :cmap/:cunmap/:cnoremap
++|:cmap|      :cmap/:cunmap/:cnoremap
+ 				  like ":map!"/":unmap!"/":noremap!" but for
+ 				     Command-line mode only
+-|:imap|	     :imap/:iunmap/:inoremap
++|:imap|      :imap/:iunmap/:inoremap
+ 				  like ":map!"/":unmap!"/":noremap!" but for
+ 				     Insert mode only
+-|:nmap|	     :nmap/:nunmap/:nnoremap
++|:nmap|      :nmap/:nunmap/:nnoremap
+ 				  like ":map"/":unmap"/":noremap" but for
+ 				     Normal mode only
+-|:vmap|	     :vmap/:vunmap/:vnoremap
++|:vmap|      :vmap/:vunmap/:vnoremap
+ 				  like ":map"/":unmap"/":noremap" but for
+ 				     Visual mode only
+-|:omap|	     :omap/:ounmap/:onoremap
++|:omap|      :omap/:ounmap/:onoremap
+ 				  like ":map"/":unmap"/":noremap" but only for
+ 				     when an operator is pending
+ |:mapc|      :mapc[lear]	  remove mappings for Normal and Visual mode
+@@ -657,6 +657,7 @@
+ 'cscopepathcomp'  'cspc'    how many components of the path to show
+ 'cscopeprg'       'csprg'   command to execute cscope
+ 'cscopequickfix'  'csqf'    use quickfix window for cscope results
++'cscoperelative'  'csre'    Use cscope.out path basename as prefix
+ 'cscopetag'       'cst'     use cscope for tag commands
+ 'cscopetagorder'  'csto'    determines ":cstag" search order
+ 'cscopeverbose'   'csverb'  give messages when adding a cscope database
+@@ -690,6 +691,7 @@
+ 'fileencodings'   'fencs'   automatically detected character encodings
+ 'fileformat'	  'ff'	    file format used for file I/O
+ 'fileformats'	  'ffs'     automatically detected values for 'fileformat'
++'fileignorecase'  'fic'     ignore case when using file names
+ 'filetype'	  'ft'	    type of file, used for autocommands
+ 'fillchars'	  'fcs'     characters to use for displaying special items
+ 'fkmap'		  'fk'	    Farsi keyboard mapping
+@@ -800,7 +802,7 @@
+ 'omnifunc'	  'ofu'     function for filetype-specific completion
+ 'opendevice'	  'odev'    allow reading/writing devices on MS-Windows
+ 'operatorfunc'	  'opfunc'  function to be called for |g@| operator
+-'osfiletype'	  'oft'     operating system-specific filetype information
++'osfiletype' 	  'oft'     no longer supported
+ 'paragraphs'	  'para'    nroff macros that separate paragraphs
+ 'paste'			    allow pasting text
+ 'pastetoggle'	  'pt'	    key code that causes 'paste' to toggle
+@@ -822,6 +824,7 @@
+ 'quoteescape'	  'qe'	    escape characters used in a string
+ 'readonly'	  'ro'	    disallow writing the buffer
+ 'redrawtime'	  'rdt'     timeout for 'hlsearch' and |:match| highlighting
++'regexpengine'	  're'	    default regexp engine to use
+ 'relativenumber'  'rnu'	    show relative line number in front of each line
+ 'remap'			    allow mappings to work recursively
+ 'report'		    threshold for reporting nr. of lines changed
+@@ -850,6 +853,7 @@
+ 'shellslash'	  'ssl'     use forward slash for shell file names
+ 'shelltemp'	  'stmp'    whether to use a temp file for shell commands
+ 'shelltype'	  'st'	    Amiga: influences how to use a shell
++'shellxescape'	  'sxe'     characters to escape when 'shellxquote' is (
+ 'shellxquote'	  'sxq'     like 'shellquote', but include redirection
+ 'shiftround'	  'sr'	    round indent to multiple of shiftwidth
+ 'shiftwidth'	  'sw'	    number of spaces to use for (auto)indent step
+@@ -934,6 +938,7 @@
+ 'wildchar'	  'wc'	    command-line character for wildcard expansion
+ 'wildcharm'	  'wcm'     like 'wildchar' but also works when mapped
+ 'wildignore'	  'wig'     files matching these patterns are not completed
++'wildignorecase'  'wic'     ignore case when completing file names
+ 'wildmenu'	  'wmnu'    use menu for command line completion
+ 'wildmode'	  'wim'     mode for 'wildchar' command-line expansion
+ 'wildoptions'	  'wop'     specifies how command line completion is done
+@@ -955,9 +960,9 @@
+ ------------------------------------------------------------------------------
+ *Q_ur*		Undo/Redo commands
+ 
+-|u|	  N  u		undo last N changes
++|u|       N  u		undo last N changes
+ |CTRL-R|  N  CTRL-R	redo last N undone changes
+-|U|	     U		restore last changed line
++|U|          U		restore last changed line
+ ------------------------------------------------------------------------------
+ *Q_et*		External commands
+ 
+@@ -1008,7 +1013,7 @@
+ 				   C4350, etc.)
+ |:normal|	:norm[al][!] {commands}
+ 				execute Normal mode commands
+-|Q|		Q		switch to "Ex" mode
++|Q|		   Q		switch to "Ex" mode
+ 
+ |:redir|	:redir >{file}		redirect messages to {file}
+ |:silent|	:silent[!] {command}	execute {command} silently
+@@ -1084,18 +1089,18 @@
+ ------------------------------------------------------------------------------
+ *Q_ex*		Special Ex characters
+ 
+-|:bar|	    |		separates two commands (not for ":global" and ":!")
++|:bar|      |		separates two commands (not for ":global" and ":!")
+ |:quote|    "		begins comment
+ 
+-|:_%|	    %		current file name (only where a file name is expected)
+-|:_#|	    #[num]	alternate file name [num] (only where a file name is
++|:_%|       %		current file name (only where a file name is expected)
++|:_#|       #[num]	alternate file name [num] (only where a file name is
+ 			   expected)
+ 	Note: The next seven are typed literally; these are not special keys!
+-|:<afile>|  <abuf>	buffer number, for use in an autocommand (only where a
++|:<abuf>|   <abuf>	buffer number, for use in an autocommand (only where a
+ 			   file name is expected)
+-|:<afile>|  <afile>	file name, for user in an autocommand (only where a
++|:<afile>|  <afile>	file name, for use in an autocommand (only where a
+ 			   file name is expected)
+-|:<afile>|  <amatch>	what matched with the pattern, for use in an
++|:<amatch>| <amatch>	what matched with the pattern, for use in an
+ 			   autocommand (only where a file name is expected)
+ |:<cword>|  <cword>	word under the cursor (only where a file name is
+ 			   expected)
+@@ -1168,18 +1173,18 @@
+ 	   Without !: Fail if changes have been made to the current buffer.
+ 	      With !: Discard any changes to the current buffer.
+ |:edit_f|  :e[dit][!] {file}	edit {file}
+-|:edit|	   :e[dit][!]		reload the current file
+-|:enew|	   :ene[w][!]		edit a new, unnamed buffer
++|:edit|    :e[dit][!]		reload the current file
++|:enew|    :ene[w][!]		edit a new, unnamed buffer
+ |:find|    :fin[d][!] {file}	find {file} in 'path' and edit it
+ 
+-|CTRL-^|   N   CTRL-^		edit alternate file N (equivalent to ":e #N")
+-|gf|	       gf  or ]f	edit the file whose name is under the cursor
+-|:pwd|	   :pwd			print the current directory name
+-|:cd|	   :cd [path]		change the current directory to [path]
+-|:cd-|	   :cd -		back to previous current directory
+-|:file|	   :f[ile]		print the current file name and the cursor
++|CTRL-^|   N  CTRL-^		edit alternate file N (equivalent to ":e #N")
++|gf|          gf  or ]f		edit the file whose name is under the cursor
++|:pwd|     :pwd			print the current directory name
++|:cd|      :cd [path]		change the current directory to [path]
++|:cd-|     :cd -		back to previous current directory
++|:file|    :f[ile]		print the current file name and the cursor
+ 				   position
+-|:file|	   :f[ile] {name}	set the current file name to {name}
++|:file|    :f[ile] {name}	set the current file name to {name}
+ |:files|   :files		show alternate file names
+ ------------------------------------------------------------------------------
+ *Q_fl*		Using the argument list			|argument-list|
+@@ -1195,12 +1200,12 @@
+ 
+ 	     in current window    in new window	~
+ |:argument|  :argu[ment] N	  :sar[gument] N	edit file N
+-|:next|	     :n[ext]		  :sn[ext]		edit next file
++|:next|      :n[ext]		  :sn[ext]		edit next file
+ |:next_f|    :n[ext] {arglist}	  :sn[ext] {arglist}	define new arg list
+ 							   and edit first file
+-|:Next|	     :N[ext]		  :sN[ext]		edit previous file
++|:Next|      :N[ext]		  :sN[ext]		edit previous file
+ |:first|     :fir[st]		  :sfir[st]		edit first file
+-|:last|	     :la[st]		  :sla[st]		edit last file
++|:last|      :la[st]		  :sla[st]		edit last file
+ ------------------------------------------------------------------------------
+ *Q_wq*		Writing and quitting
+ 
+@@ -1377,7 +1382,7 @@
+ 		set foldmethod=indent	folding by indent
+ 		set foldmethod=expr	folding by 'foldexpr'
+ 		set foldmethod=syntax	folding by syntax regions
+-		set foldmethod=marker	folding by 'foldmarkers'
++		set foldmethod=marker	folding by 'foldmarker'
+ 
+ |zf|		zf{motion}		operator: Define a fold manually
+ |:fold|		:{range}fold		define a fold for {range} lines
+diff -Naur vim73.orig/runtime/doc/quotes.txt vim73/runtime/doc/quotes.txt
+--- vim73.orig/runtime/doc/quotes.txt	2010-08-15 12:23:21.000000000 +0000
++++ vim73/runtime/doc/quotes.txt	2013-06-07 17:07:09.642314475 +0000
+@@ -1,4 +1,4 @@
+-*quotes.txt*    For Vim version 7.3.  Last change: 2006 Apr 24
++*quotes.txt*    For Vim version 7.3.  Last change: 2010 Nov 03
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -260,15 +260,16 @@
+ 
+ 
+ In summary:
+-     __     ___		    _	    _	_  ___ _____
+-     \ \   / (_)_ __ ___   (_)___  | | | |/ _ \_   _|
+-      \ \ / /| | '_ ` _ \  | / __| | |_| | | | || |
+-       \ V / | | | | | | | | \__ \ |  _  | |_| || |
+-	\_/  |_|_| |_| |_| |_|___/ |_| |_|\___/ |_|
+-	     ____ _____ _   _ _____ _____ _ _
+-	    / ___|_   _| | | |	___|  ___| | |
+-	    \___ \ | | | | | | |_  | |_  | | |
+-	     ___) || | | |_| |	_| |  _| |_|_|
+-	    |____/ |_|	\___/|_|   |_|	 (_|_)	      (Tony Nugent, Australia)
++     __     ___		    _	    _	_  ___ _____ `
++     \ \   / (_)_ __ ___   (_)___  | | | |/ _ \_   _| `
++      \ \ / /| | '_ ` _ \  | / __| | |_| | | | || | `
++       \ V / | | | | | | | | \__ \ |  _  | |_| || | `
++	\_/  |_|_| |_| |_| |_|___/ |_| |_|\___/ |_| `
++	     ____ _____ _   _ _____ _____ _ _ `
++	    / ___|_   _| | | |	___|  ___| | | `
++	    \___ \ | | | | | | |_  | |_  | | | `
++	     ___) || | | |_| |	_| |  _| |_|_| `
++	    |____/ |_|	\___/|_|   |_|	 (_|_)	    (Tony Nugent, Australia) `
++
+ 
+  vim:tw=78:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/repeat.txt vim73/runtime/doc/repeat.txt
+--- vim73.orig/runtime/doc/repeat.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/repeat.txt	2013-06-07 17:07:09.672314389 +0000
+@@ -1,4 +1,4 @@
+-*repeat.txt*    For Vim version 7.3.  Last change: 2009 Nov 04
++*repeat.txt*    For Vim version 7.3.  Last change: 2012 Mar 23
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -102,25 +102,29 @@
+ q{0-9a-zA-Z"}		Record typed characters into register {0-9a-zA-Z"}
+ 			(uppercase to append).  The 'q' command is disabled
+ 			while executing a register, and it doesn't work inside
+-			a mapping.  {Vi: no recording}
++			a mapping and |:normal|.  {Vi: no recording}
+ 
+ q			Stops recording.  (Implementation note: The 'q' that
+ 			stops recording is not stored in the register, unless
+ 			it was the result of a mapping)  {Vi: no recording}
+ 
+ 							*@*
+-@{0-9a-z".=*}		Execute the contents of register {0-9a-z".=*} [count]
++@{0-9a-z".=*+}		Execute the contents of register {0-9a-z".=*+} [count]
+ 			times.  Note that register '%' (name of the current
+ 			file) and '#' (name of the alternate file) cannot be
+-			used.  For "@=" you are prompted to enter an
+-			expression.  The result of the expression is then
+-			executed.  See also |@:|.  {Vi: only named registers}
++			used.
++			The register is executed like a mapping, that means
++			that the difference between 'wildchar' and 'wildcharm'
++			applies.
++			For "@=" you are prompted to enter an expression.  The
++			result of the expression is then executed.
++			See also |@:|.  {Vi: only named registers}
+ 
+ 							*@@* *E748*
+ @@			Repeat the previous @{0-9a-z":*} [count] times.
+ 
+-:[addr]*{0-9a-z".=}						*:@* *:star*
+-:[addr]@{0-9a-z".=*}	Execute the contents of register {0-9a-z".=*} as an Ex
++:[addr]*{0-9a-z".=+}						*:@* *:star*
++:[addr]@{0-9a-z".=*+}	Execute the contents of register {0-9a-z".=*+} as an Ex
+ 			command.  First set cursor at line [addr] (default is
+ 			current line).  When the last line in the register does
+ 			not have a <CR> it will be added automatically when
+diff -Naur vim73.orig/runtime/doc/sign.txt vim73/runtime/doc/sign.txt
+--- vim73.orig/runtime/doc/sign.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/sign.txt	2013-06-07 17:07:09.742314189 +0000
+@@ -1,4 +1,4 @@
+-*sign.txt*      For Vim version 7.3.  Last change: 2010 May 07
++*sign.txt*      For Vim version 7.3.  Last change: 2012 Jul 10
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Gordon Prieur
+@@ -70,12 +70,13 @@
+ :sign define {name} {argument}...
+ 		Define a new sign or set attributes for an existing sign.
+ 		The {name} can either be a number (all digits) or a name
+-		starting with a non-digit.
++		starting with a non-digit.  Leading digits are ignored, thus
++		"0012", "012" and "12" are considered the same name.
+ 		About 120 different signs can be defined.
+ 
+ 		Accepted arguments:
+ 
+-	icon={pixmap}
++	icon={bitmap}
+ 		Define the file name where the bitmap can be found.  Should be
+ 		a full path.  The bitmap should fit in the place of two
+ 		characters.  This is not checked.  If the bitmap is too big it
+@@ -85,6 +86,8 @@
+ 			GTK 1		pixmap (.xpm)
+ 			GTK 2		many
+ 			Motif		pixmap (.xpm)
++			Win32		.bmp, .ico, .cur
++					pixmap (.xpm) |+xpm_w32|
+ 
+ 	linehl={group}
+ 		Highlighting group used for the whole line the sign is placed
+@@ -150,8 +153,14 @@
+ 		Remove the previously placed sign {id} from file {fname}.
+ 		See remark above about {fname} |:sign-fname|.
+ 
++:sign unplace * file={fname}
++		Remove all placed signs in file {fname}.
++
+ :sign unplace {id} buffer={nr}
+-		Same, but use buffer {nr}.
++		Remove the previously placed sign {id} from buffer {nr}.
++
++:sign unplace * buffer={nr}
++		Remove all placed signs in buffer {nr}.
+ 
+ :sign unplace {id}
+ 		Remove the previously placed sign {id} from all files it
+diff -Naur vim73.orig/runtime/doc/spell.txt vim73/runtime/doc/spell.txt
+--- vim73.orig/runtime/doc/spell.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/spell.txt	2013-06-07 17:07:09.755647484 +0000
+@@ -1,4 +1,4 @@
+-*spell.txt*	For Vim version 7.3.  Last change: 2010 Apr 11
++*spell.txt*	For Vim version 7.3.  Last change: 2011 May 25
+ 
+ 
+ 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+@@ -335,6 +335,9 @@
+ |spell-mkspell| about how to create a spell file.  Converting a spell file
+ with "iconv" will NOT work!
+ 
++Note: on VMS ".{enc}.spl" is changed to "_{enc}.spl" to avoid trouble with
++filenames.
++
+ 						    *spell-sug-file* *E781*
+ If there is a file with exactly the same name as the ".spl" file but ending in
+ ".sug", that file will be used for giving better suggestions.  It isn't loaded
+@@ -519,7 +522,7 @@
+ 			Up to eight regions can be combined. *E754* *E755*
+ 			The REP and SAL items of the first .aff file where
+ 			they appear are used. |spell-REP| |spell-SAL|
+-
++								*E845*
+ 			This command uses a lot of memory, required to find
+ 			the optimal word tree (Polish, Italian and Hungarian
+ 			require several hundred Mbyte).  The final result will
+@@ -1241,6 +1244,7 @@
+ Optionally this may be followed by:
+ 	*	the group appears zero or more times, e.g., sm*e
+ 	+	the group appears one or more times, e.g., c+
++	?	the group appears zero times or once, e.g., x?
+ 
+ This is similar to the regexp pattern syntax (but not the same!).  A few
+ examples with the sequence of word flags they require:
+@@ -1248,6 +1252,7 @@
+     COMPOUNDRULE yz	    yz
+     COMPOUNDRULE x+z	    xz xxz xxxz etc.
+     COMPOUNDRULE yx+	    yx yxx yxxx etc.
++    COMPOUNDRULE xy?z	    xz xyz
+ 
+     COMPOUNDRULE [abc]z    az bz cz
+     COMPOUNDRULE [abc]+z   az aaz abaz bz baz bcbz cz caz cbaz etc.
+diff -Naur vim73.orig/runtime/doc/starting.txt vim73/runtime/doc/starting.txt
+--- vim73.orig/runtime/doc/starting.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/starting.txt	2013-06-07 17:07:09.798980694 +0000
+@@ -1,4 +1,4 @@
+-*starting.txt*  For Vim version 7.3.  Last change: 2009 Dec 31
++*starting.txt*  For Vim version 7.3.  Last change: 2013 May 29
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -95,14 +95,14 @@
+ 			(normally not installed)
+ view	vim -R	    Start in read-only mode (see |-R|).		    *view*
+ gvim	vim -g	    Start the GUI (see |gui|).			    *gvim*
+-gex	vim -eg	    Start the GUI in Ex mode.			    *gex*
+-gview	vim -Rg	    Start the GUI in read-only mode.		    *gview*
++gex	vim -eg	    Start the GUI in Ex mode.			  *gex*
++gview	vim -Rg	    Start the GUI in read-only mode.		  *gview*
+ rvim	vim -Z	    Like "vim", but in restricted mode (see |-Z|)   *rvim*
+-rview	vim -RZ	    Like "view", but in restricted mode.	    *rview*
+-rgvim	vim -gZ	    Like "gvim", but in restricted mode.	    *rgvim*
+-rgview	vim -RgZ    Like "gview", but in restricted mode.	    *rgview*
++rview	vim -RZ	    Like "view", but in restricted mode.	  *rview*
++rgvim	vim -gZ	    Like "gvim", but in restricted mode.	  *rgvim*
++rgview	vim -RgZ    Like "gview", but in restricted mode.	  *rgview*
+ evim    vim -y      Easy Vim: set 'insertmode' (see |-y|)	    *evim*
+-eview   vim -yR     Like "evim" in read-only mode		    *eview*
++eview   vim -yR     Like "evim" in read-only mode		  *eview*
+ vimdiff vim -d	    Start in diff mode |diff-mode|
+ gvimdiff vim -gd    Start in diff mode |diff-mode|
+ 
+@@ -244,11 +244,12 @@
+ -Z		Restricted mode.  All commands that make use of an external
+ 		shell are disabled.  This includes suspending with CTRL-Z,
+ 		":sh", filtering, the system() function, backtick expansion,
+-		etc.
++		delete(), rename(), mkdir(), writefile(), libcall(), etc.
+ 		{not in Vi}
+ 
+ 							*-g*
+--g		Start Vim in GUI mode.  See |gui|.  {not in Vi}
++-g		Start Vim in GUI mode.  See |gui|. For the opposite see |-v|.
++		{not in Vi}
+ 
+ 							*-v*
+ -v		Start Ex in Vi mode.  Only makes a difference when the
+@@ -424,12 +425,7 @@
+ 		"-d con:30/10/600/150".  But you can also use it to start
+ 		editing on another device, e.g., AUX:.  {not in Vi}
+ 							*-f*
+--f		Amiga: Do not restart Vim to open a new window.  This
+-		option should be used when Vim is started by a program that
+-		will wait for the edit session to finish (e.g., mail or
+-		readnews).  See |amiga-window|.
+-
+-		GUI: Do not disconnect from the program that started Vim.
++-f		GUI: Do not disconnect from the program that started Vim.
+ 		'f' stands for "foreground".  If omitted, the GUI forks a new
+ 		process and exits the current one.  "-f" should be used when
+ 		gvim is started by a program that will wait for the edit
+@@ -437,8 +433,18 @@
+ 		never to fork, include 'f' in 'guioptions' in your |gvimrc|.
+ 		Careful: You can use "-gf" to start the GUI in the foreground,
+ 		but "-fg" is used to specify the foreground color.  |gui-fork|
++
++		Amiga: Do not restart Vim to open a new window.  This
++		option should be used when Vim is started by a program that
++		will wait for the edit session to finish (e.g., mail or
++		readnews).  See |amiga-window|.
++
++		MS-Windows: This option is not supported.  However, when
++		running Vim with an installed vim.bat or gvim.bat file it
++		works.
+ 		{not in Vi}
+ 
++
+ 							*--nofork*
+ --nofork	GUI: Do not fork.  Same as |-f|.
+ 							*-u* *E282*
+@@ -869,6 +875,7 @@
+ 12. Execute startup commands
+ 	If a "-t" flag was given to Vim, the tag is jumped to.
+ 	The commands given with the |-c| and |+cmd| arguments are executed.
++	The starting flag is reset, has("vim_starting") will now return zero.
+ 	If the 'insertmode' option is set, Insert mode is entered.
+ 	The |VimEnter| autocommands are executed.
+ 
+diff -Naur vim73.orig/runtime/doc/syntax.txt vim73/runtime/doc/syntax.txt
+--- vim73.orig/runtime/doc/syntax.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/syntax.txt	2013-06-07 17:07:09.818980637 +0000
+@@ -1,4 +1,4 @@
+-*syntax.txt*	For Vim version 7.3.  Last change: 2010 Aug 10
++*syntax.txt*	For Vim version 7.3.  Last change: 2013 Jun 06
+ 
+ 
+ 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+@@ -37,6 +37,7 @@
+ 15. Highlighting tags		|tag-highlight|
+ 16. Window-local syntax		|:ownsyntax|
+ 17. Color xterms		|xterm-color|
++18. When syntax is slow		|:syntime|
+ 
+ {Vi does not have any of these commands}
+ 
+@@ -199,7 +200,8 @@
+ If you don't like a distributed syntax file, or you have downloaded a new
+ version, follow the same steps as for |mysyntaxfile| above.  Just make sure
+ that you write the syntax file in a directory that is early in 'runtimepath'.
+-Vim will only load the first syntax file found.
++Vim will only load the first syntax file found, assuming that it sets
++b:current_syntax.
+ 
+ 
+ NAMING CONVENTIONS		    *group-name* *{group-name}* *E669* *W18*
+@@ -379,140 +381,342 @@
+ This is not a syntax file itself, but a script that converts the current
+ window into HTML.  Vim opens a new window in which it builds the HTML file.
+ 
++After you save the resulting file, you can view it with any browser.  The
++colors should be exactly the same as you see them in Vim.  You can jump to
++specific lines by adding (for example) #L123 or #123 to the end of the URL in
++your browser's address bar (#123 only with javascript support). And with
++|g:html_dynamic_folds| enabled, you can show or hide the text that is folded
++in Vim.
++
+ You are not supposed to set the 'filetype' or 'syntax' option to "2html"!
+ Source the script to convert the current file: >
+ 
+ 	:runtime! syntax/2html.vim
+ <
+-							*:TOhtml*
+-Or use the ":TOhtml" user command.  It is defined in a standard plugin.
+-":TOhtml" also works with a range and in a Visual area: >
+-
+-	:10,40TOhtml
+-
+-Warning: This is slow! The script must process every character of every line.
+-Because it is so slow, by default a progress bar is displayed in the
+-statusline for each step that usually takes a long time. If you don't like
+-seeing this progress bar, you can disable it and get a very minor speed
+-improvement with: >
+-
+-	let g:html_no_progress = 1
+-
+-":TOhtml" has another special feature: if the window is in diff mode, it will
+-generate HTML that shows all the related windows.  This can be disabled by
+-setting the g:html_diff_one_file variable: >
+-
+-	let g:html_diff_one_file = 1
++Many variables affect the output of 2html.vim; see below. Any of the on/off
++options listed below can be enabled or disabled by setting them explicitly to
++the desired value, or restored to their default by removing the variable using
++|:unlet|.
+ 
+-After you save the resulting file, you can view it with any browser.  The
+-colors should be exactly the same as you see them in Vim.
++Remarks:
++- Some truly ancient browsers may not show the background colors.
++- From most browsers you can also print the file (in color)!
++- The latest TOhtml may actually work with older versions of Vim, but some
++  features such as conceal support will not function, and the colors may be
++  incorrect for an old Vim without GUI support compiled in.
+ 
++Here is an example how to run the script over all .c and .h files from a
++Unix shell: >
++   for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
++<
++					*g:html_start_line* *g:html_end_line*
+ To restrict the conversion to a range of lines, use a range with the |:TOhtml|
+-command, or set "g:html_start_line" and "g:html_end_line" to the first and
+-last line to be converted.  Example, using the last set Visual area: >
++command below, or set "g:html_start_line" and "g:html_end_line" to the first
++and last line to be converted.  Example, using the last set Visual area: >
+ 
+ 	:let g:html_start_line = line("'<")
+ 	:let g:html_end_line = line("'>")
++	:runtime! syntax/2html.vim
++<
++							*:TOhtml*
++:[range]TOhtml		The ":TOhtml" command is defined in a standard plugin.
++			This command will source |2html.vim| for you. When a
++			range is given, set |g:html_start_line| and
++			|g:html_end_line| to the start and end of the range,
++			respectively. Default range is the entire buffer.
++
++			If the current window is part of a |diff|, unless
++			|g:html_diff_one_file| is set, :TOhtml will convert
++			all windows which are part of the diff in the current
++			tab and place them side-by-side in a <table> element
++			in the generated HTML. When this happens you can jump
++			to lines in specific windows with (for example) #W1L42
++			for line 42 in the first diffed window, or #W3L87 for
++			line 87 in the third. Omitting the window ID will
++			default to the first window if javascript is enabled.
++
++			Examples: >
++
++	:10,40TOhtml " convert lines 10-40 to html
++	:'<,'>TOhtml " convert current/last visual selection
++	:TOhtml      " convert entire buffer
++<
++							*g:html_diff_one_file*
++Default: 0.
++When 0, all windows involved in a |diff| in the current tab page are converted
++to HTML and placed side-by-side in a <table> element.
++When 1, only the current buffer is converted.
++Example: >
++
++	let g:html_diff_one_file = 1
++<
++							 *g:html_whole_filler*
++Default: 0.
++When 0, if |g:html_diff_one_file| is 1, a sequence of more than 3 filler lines
++is displayed as three lines with the middle line mentioning the total number
++of inserted lines.
++When 1, always display all inserted lines as if |g:html_diff_one_file| were
++not set.
++>
++    :let g:html_whole_filler = 1
++<
++				     *TOhtml-performance* *g:html_no_progress*
++Default: 0.
++When 0, display a progress bar in the statusline for each major step in the
++2html.vim conversion process.
++When 1, do not display the progress bar. This offers a minor speed improvement
++but you won't have any idea how much longer the conversion might take; for big
++files it can take a long time!
++Example: >
+ 
+-The lines are numbered according to 'number' option and the Number
+-highlighting.  You can force lines to be numbered in the HTML output by
+-setting "html_number_lines" to non-zero value: >
++	let g:html_no_progress = 1
++<
++You can obtain better performance improvements by also instructing Vim to not
++run interactively, so that too much time is not taken to redraw as the script
++moves through the buffer, switches windows, and the like: >
++
++  vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c
++<
++Note that the -s flag prevents loading your .vimrc and any plugins, so you
++need to explicitly source/enable anything that will affect the HTML
++conversion. See |-E| and |-s-ex| for details. It is probably best to create a
++script to replace all the -c commands and use it with the -u flag instead of
++specifying each command separately.
++
++							 *g:html_number_lines*
++Default: current 'number' setting.
++When 0, buffer text is displayed in the generated HTML without line numbering.
++When 1, a column of line numbers is added to the generated HTML with the same
++highlighting as the line number column in Vim (|hl-LineNr|).
++Force line numbers even if 'number' is not set: >
+    :let g:html_number_lines = 1
+-Force to omit the line numbers by using a zero value: >
++Force to omit the line numbers: >
+    :let g:html_number_lines = 0
+ Go back to the default to use 'number' by deleting the variable: >
+    :unlet g:html_number_lines
+-
+-By default, valid HTML 4.01 using cascading style sheets (CSS1) is generated.
+-If you need to generate markup for really old browsers or some other user
+-agent that lacks basic CSS support, use: >
++<
++							      *g:html_use_css*
++Default: 1.
++When 1, generate valid HTML 4.01 markup with CSS1 styling, supported in all
++modern browsers and most old browsers.
++When 0, generate <font> tags and similar outdated markup. This is not
++recommended but it may work better in really old browsers, email clients,
++forum posts, and similar situations where basic CSS support is unavailable.
++Example: >
+    :let g:html_use_css = 0
++<
++						       *g:html_ignore_conceal*
++Default: 0.
++When 0, concealed text is removed from the HTML and replaced with a character
++from |:syn-cchar| or 'listchars' as appropriate, depending on the current
++value of 'conceallevel'.
++When 1, include all text from the buffer in the generated HTML, even if it is
++|conceal|ed.
+ 
+-Concealed text is removed from the HTML and replaced with the appropriate
+-character from |:syn-cchar| or 'listchars' depending on the current value of
+-'conceallevel'. If you always want to display all text in your document,
+-either set 'conceallevel' to zero before invoking 2html, or use: >
++Either of the following commands will ensure that all text in the buffer is
++included in the generated HTML (unless it is folded): >
+    :let g:html_ignore_conceal = 1
+-
+-Similarly, closed folds are put in the HTML as they are displayed.  If you
+-don't want this, use the |zR| command before invoking 2html, or use: >
++   :setl conceallevel=0
++<
++						       *g:html_ignore_folding*
++Default: 0.
++When 0, text in a closed fold is replaced by the text shown for the fold in
++Vim (|fold-foldtext|). See |g:html_dynamic_folds| if you also want to allow
++the user to expand the fold as in Vim to see the text inside.
++When 1, include all text from the buffer in the generated HTML; whether the
++text is in a fold has no impact at all. |g:html_dynamic_folds| has no effect.
++
++Either of these commands will ensure that all text in the buffer is included
++in the generated HTML (unless it is concealed): >
++   zR
+    :let g:html_ignore_folding = 1
++<
++							*g:html_dynamic_folds*
++Default: 0.
++When 0, text in a closed fold is not included at all in the generated HTML.
++When 1, generate javascript to open a fold and show the text within, just like
++in Vim.
+ 
+-You may want to generate HTML that includes all the data within the folds, and
+-allow the user to view the folded data similar to how they would in Vim. To
+-generate this dynamic fold information, use: >
+-   :let g:html_dynamic_folds = 1
++Setting this variable to 1 causes 2html.vim to always use CSS for styling,
++regardless of what |g:html_use_css| is set to.
+ 
+-Using html_dynamic_folds will imply html_use_css, because it would be far too
+-difficult to do it for old browsers. However, html_ignore_folding overrides
+-html_dynamic_folds.
+-
+-Using html_dynamic_folds will default to generating a foldcolumn in the html
+-similar to Vim's foldcolumn, that will use javascript to open and close the
+-folds in the HTML document. The width of this foldcolumn starts at the current
+-setting of |'foldcolumn'| but grows to fit the greatest foldlevel in your
+-document. If you do not want to show a foldcolumn at all, use: >
++This variable is ignored when |g:html_ignore_folding| is set.
++>
++   :let g:html_dynamic_folds = 1
++<
++							*g:html_no_foldcolumn*
++Default: 0.
++When 0, if |g:html_dynamic_folds| is 1, generate a column of text similar to
++Vim's foldcolumn (|fold-foldcolumn|) the user can click on to toggle folds
++open or closed. The minimum width of the generated text column is the current
++'foldcolumn' setting.
++When 1, do not generate this column; instead, hovering the mouse cursor over
++folded text will open the fold as if |g:html_hover_unfold| were set.
++>
+    :let g:html_no_foldcolumn = 1
+-
+-Using this option, there will be no foldcolumn available to open the folds in
+-the HTML. For this reason, another option is provided: html_hover_unfold.
+-Enabling this option will use CSS 2.0 to allow a user to open a fold by
+-hovering the mouse pointer over it. Note that old browsers (notably Internet
+-Explorer 6) will not support this feature.  Browser-specific markup for IE6 is
+-included to fall back to the normal CSS1 code so that the folds show up
+-correctly for this browser, but they will not be openable without a
+-foldcolumn. Note that using html_hover_unfold will allow modern browsers with
+-disabled javascript to view closed folds. To use this option, use: >
++<
++				*TOhtml-uncopyable-text* *g:html_prevent_copy*
++Default: empty string.
++This option prevents certain regions of the generated HTML from being copied,
++when you select all text in document rendered in a browser and copy it. Useful
++for allowing users to copy-paste only the source text even if a fold column or
++line numbers are shown in the generated content. Specify regions to be
++affected in this way as follows:
++	f:	fold column
++	n:	line numbers (also within fold text)
++	t:	fold text
++	d:	diff filler
++
++Example, to make the fold column and line numbers uncopyable: >
++	:let g:html_prevent_copy = "fn"
++<
++This feature is currently implemented by inserting read-only <input> elements
++into the markup to contain the uncopyable areas. This does not work well in
++all cases. When pasting to some applications which understand HTML, the
++<input> elements also get pasted. But plain-text paste destinations should
++always work.
++
++							   *g:html_no_invalid*
++Default: 0.
++When 0, if |g:html_prevent_copy| is non-empty, an invalid attribute is
++intentionally inserted into the <input> element for the uncopyable areas. This
++increases the number of applications you can paste to without also pasting the
++<input> elements. Specifically, Microsoft Word will not paste the <input>
++elements if they contain this invalid attribute.
++When 1, no invalid markup is ever intentionally inserted, and the generated
++page should validate. However, be careful pasting into Microsoft Word when
++|g:html_prevent_copy| is non-empty; it can be hard to get rid of the <input>
++elements which get pasted.
++
++							 *g:html_hover_unfold*
++Default: 0.
++When 0, the only way to open a fold generated by 2html.vim with
++|g:html_dynamic_folds| set, is to click on the generated fold column.
++When 1, use CSS 2.0 to allow the user to open a fold by moving the mouse
++cursor over the displayed fold text. This is useful to allow users with
++disabled javascript to view the folded text.
++
++Note that old browsers (notably Internet Explorer 6) will not support this
++feature.  Browser-specific markup for IE6 is included to fall back to the
++normal CSS1 styling so that the folds show up correctly for this browser, but
++they will not be openable without a foldcolumn.
++>
+    :let g:html_hover_unfold = 1
+-
+-Setting html_no_foldcolumn with html_dynamic_folds will automatically set
+-html_hover_unfold, because otherwise the folds wouldn't be dynamic.
+-
+-By default "<pre>" and "</pre>" is used around the text.  This makes it show
+-up as you see it in Vim, but without wrapping.	If you prefer wrapping, at the
+-risk of making some things look a bit different, use: >
++<
++					  *TOhtml-wrap-text* *g:html_pre_wrap*
++Default: current 'wrap' setting.
++When 0, if |g:html_no_pre| is 0 or unset, the text in the generated HTML does
++not wrap at the edge of the browser window.
++When 1, if |g:html_use_css| is 1, the CSS 2.0 "white-space:pre-wrap" value is
++used, causing the text to wrap at whitespace at the edge of the browser
++window.
++Explicitly enable text wrapping: >
++   :let g:html_pre_wrap = 1
++Explicitly disable wrapping: >
++   :let g:html_pre_wrap = 0
++Go back to default, determine wrapping from 'wrap' setting: >
++   :unlet g:html_pre_wrap
++<
++							       *g:html_no_pre*
++Default: 0.
++When 0, buffer text in the generated HTML is surrounded by <pre>...</pre>
++tags. Series of whitespace is shown as in Vim without special markup, and tab
++characters can be included literally (see |g:html_expand_tabs|).
++When 1 (not recommended), the <pre> tags are omitted, and a plain <div> is
++used instead. Whitespace is replaced by a series of &nbsp; character
++references, and <br> is used to end each line. This is another way to allow
++text in the generated HTML is wrap (see |g:html_pre_wrap|) which also works in
++old browsers, but may cause noticeable differences between Vim's display and
++the rendered page generated by 2html.vim.
++>
+    :let g:html_no_pre = 1
+-This will use <br> at the end of each line and use "&nbsp;" for repeated
+-spaces.
+-
+-The current value of 'encoding' is used to specify the charset of the HTML
+-file.  This only works for those values of 'encoding' that have an equivalent
+-HTML charset name.  To overrule this set g:html_use_encoding to the name of
+-the charset to be used: >
+-   :let g:html_use_encoding = "foobar"
+-To omit the line that specifies the charset, set g:html_use_encoding to an
+-empty string: >
++<
++							  *g:html_expand_tabs*
++Default: 1 if 'tabstop' is 8, 'expandtab' is 0, and no fold column or line
++		numbers occur in the generated HTML;
++	 0 otherwise.
++When 0, <Tab> characters in the buffer text are replaced with an appropriate
++number of space characters, or &nbsp; references if |g:html_no_pre| is 1.
++When 1, if |g:html_no_pre| is 0 or unset, <Tab> characters in the buffer text
++are included as-is in the generated HTML. This is useful for when you want to
++allow copy and paste from a browser without losing the actual whitespace in
++the source document. Note that this can easily break text alignment and
++indentation in the HTML, unless set by default.
++
++Force |2html.vim| to keep <Tab> characters: >
++   :let g:html_expand_tabs = 0
++<
++Force tabs to be expanded: >
++   :let g:html_expand_tabs = 1
++<
++				    *TOhtml-encoding-detect* *TOhtml-encoding*
++It is highly recommended to set your desired encoding with
++|g:html_use_encoding| for any content which will be placed on a web server.
++
++If you do not specify an encoding, |2html.vim| uses the preferred IANA name
++for the current value of 'fileencoding' if set, or 'encoding' if not.
++'encoding' is always used for certain 'buftype' values. 'fileencoding' will be
++set to match the chosen document encoding.
++
++Automatic detection works for the encodings mentioned specifically by name in
++|encoding-names|, but TOhtml will only automatically use those encodings with
++wide browser support. However, you can override this to support specific
++encodings that may not be automatically detected by default (see options
++below). See http://www.iana.org/assignments/character-sets for the IANA names.
++
++Note, by default all Unicode encodings are converted to UTF-8 with no BOM in
++the generated HTML, as recommended by W3C:
++
++	http://www.w3.org/International/questions/qa-choosing-encodings
++	http://www.w3.org/International/questions/qa-byte-order-mark
++
++							 *g:html_use_encoding*
++Default: none, uses IANA name for current 'fileencoding' as above.
++To overrule all automatic charset detection, set g:html_use_encoding to the
++name of the charset to be used. It is recommended to set this variable to
++something widely supported, like UTF-8, for anything you will be hosting on a
++webserver: >
++   :let g:html_use_encoding = "UTF-8"
++You can also use this option to omit the line that specifies the charset
++entirely, by setting g:html_use_encoding to an empty string (NOT recommended): >
+    :let g:html_use_encoding = ""
+-To go back to the automatic mechanism, delete the g:html_use_encoding
++To go back to the automatic mechanism, delete the |g:html_use_encoding|
+ variable: >
+    :unlet g:html_use_encoding
+ <
+-For diff mode a sequence of more than 3 filler lines is displayed as three
+-lines with the middle line mentioning the total number of inserted lines.  If
+-you prefer to see all the inserted lines use: >
+-    :let g:html_whole_filler = 1
+-And to go back to displaying up to three lines again: >
+-    :unlet g:html_whole_filler
+-<
+-					    *convert-to-XML* *convert-to-XHTML*
+-An alternative is to have the script generate XHTML (XML compliant HTML).  To
+-do this set the "html_use_xhtml" variable: >
++						    *g:html_encoding_override*
++Default: none, autoload/tohtml.vim contains default conversions for encodings
++		mentioned by name at |encoding-names|.
++This option allows |2html.vim| to detect the correct 'fileencoding' when you
++specify an encoding with |g:html_use_encoding| which is not in the default
++list of conversions.
++
++This is a dictionary of charset-encoding pairs that will replace existing
++pairs automatically detected by TOhtml, or supplement with new pairs.
++
++Detect the HTML charset "windows-1252" as the encoding "8bit-cp1252": >
++   :let g:html_encoding_override = {'windows-1252': '8bit-cp1252'}
++<
++						     *g:html_charset_override*
++Default: none, autoload/tohtml.vim contains default conversions for encodings
++		mentioned by name at |encoding-names| and which have wide
++		browser support.
++This option allows |2html.vim| to detect the HTML charset for any
++'fileencoding' or 'encoding' which is not detected automatically. You can also
++use it to override specific existing encoding-charset pairs. For example,
++TOhtml will by default use UTF-8 for all Unicode/UCS encodings. To use UTF-16
++and UTF-32 instead, use: >
++   :let g:html_charset_override = {'ucs-4': 'UTF-32', 'utf-16': 'UTF-16'}
++
++Note that documents encoded in either UTF-32 or UTF-16 have known
++compatibility problems with some major browsers.
++
++			*convert-to-XML* *convert-to-XHTML* *g:html_use_xhtml*
++Default: 0.
++When 0, generate standard HTML 4.01 (strict when possible).
++When 1, generate XHTML 1.0 instead (XML compliant HTML).
++>
+     :let g:html_use_xhtml = 1
+-
+-Any of these options can be enabled or disabled by setting them explicitly to
+-the desired value, or restored to their default by removing the variable using
+-|:unlet|.
+-
+-Remarks:
+-- This only works in a version with GUI support.  If the GUI is not actually
+-  running (possible for X11) it still works, but not very well (the colors
+-  may be wrong).
+-- Some truly ancient browsers may not show the background colors.
+-- From most browsers you can also print the file (in color)!
+-
+-Here is an example how to run the script over all .c and .h files from a
+-Unix shell: >
+-   for f in *.[ch]; do gvim -f +"syn on" +"run! syntax/2html.vim" +"wq" +"q" $f; done
+ <
+ 
+ ABEL						*abel.vim* *ft-abel-syntax*
+@@ -589,7 +793,11 @@
+ 	asmsyntax=nasm
+ Replace "nasm" with the name of the real assembly syntax.  This line must be
+ one of the first five lines in the file.  No non-white text must be
+-immediately before or after this text.
++immediately before or after this text.  Note that specifying asmsyntax=foo is
++equivalent to setting ft=foo in a |modeline|, and that in case of a conflict
++between the two settings the one from the modeline will take precedence (in
++particular, if you have ft=asm in the modeline, you will get the GNU syntax
++highlighting regardless of what is specified as asmsyntax).
+ 
+ The syntax type can always be overruled for a specific buffer by setting the
+ b:asmsyntax variable: >
+@@ -694,10 +902,12 @@
+ c_ansi_typedefs		 ... but do standard ANSI types
+ c_ansi_constants	 ... but do standard ANSI constants
+ c_no_utf		don't highlight \u and \U in strings
+-c_syntax_for_h		use C syntax for *.h files, instead of C++
++c_syntax_for_h		for *.h files use C syntax instead of C++ and use objc
++			syntax instead of objcpp
+ c_no_if0		don't highlight "#if 0" blocks as comments
+ c_no_cformat		don't highlight %-formats in strings
+ c_no_c99		don't highlight C99 standard items
++c_no_c11		don't highlight C11 standard items
+ 
+ When 'foldmethod' is set to "syntax" then /* */ comments and { } blocks will
+ become a fold.  If you don't want comments to become a fold use: >
+@@ -798,6 +1008,14 @@
+ The ColdFusion syntax file is based on the HTML syntax file.
+ 
+ 
++CPP						*cpp.vim* *ft-cpp-syntax*
++
++Most of things are same as |ft-c-syntax|.
++
++Variable		Highlight ~
++cpp_no_c11		don't highlight C++11 standard items
++
++
+ CSH						*csh.vim* *ft-csh-syntax*
+ 
+ This covers the shell named "csh".  Note that on some systems tcsh is actually
+@@ -806,13 +1024,13 @@
+ Detecting whether a file is csh or tcsh is notoriously hard.  Some systems
+ symlink /bin/csh to /bin/tcsh, making it almost impossible to distinguish
+ between csh and tcsh.  In case VIM guesses wrong you can set the
+-"filetype_csh" variable.  For using csh: >
+-
+-	:let filetype_csh = "csh"
++"filetype_csh" variable.  For using csh:  *g:filetype_csh*
++>
++	:let g:filetype_csh = "csh"
+ 
+ For using tcsh: >
+ 
+-	:let filetype_csh = "tcsh"
++	:let g:filetype_csh = "tcsh"
+ 
+ Any script with a tcsh extension or a standard tcsh filename (.tcshrc,
+ tcsh.tcshrc, tcsh.login) will have filetype tcsh.  All other tcsh/csh scripts
+@@ -872,8 +1090,8 @@
+ 
+ 
+ DOCBOOK					*docbk.vim* *ft-docbk-syntax* *docbook*
+-DOCBOOK	XML				*docbkxml.vim* *ft-docbkxml-syntax*
+-DOCBOOK	SGML				*docbksgml.vim* *ft-docbksgml-syntax*
++DOCBOOK XML				*docbkxml.vim* *ft-docbkxml-syntax*
++DOCBOOK SGML				*docbksgml.vim* *ft-docbksgml-syntax*
+ 
+ There are two types of DocBook files: SGML and XML.  To specify what type you
+ are using the "b:docbk_type" variable should be set.  Vim does this for you
+@@ -889,6 +1107,10 @@
+ or: >
+ 	:set filetype=docbkxml
+ 
++You can specify the DocBook version: >
++	:let docbk_ver = 3
++When not set 4 is used.
++
+ 
+ DOSBATCH				*dosbatch.vim* *ft-dosbatch-syntax*
+ 
+@@ -925,9 +1147,9 @@
+ or >
+ 	// vim:syntax=c.doxygen
+ 
+-It can also be done automatically for C, C++, C# and IDL files by setting the
+-global or buffer-local variable load_doxygen_syntax.  This is done by adding
+-the following to your .vimrc. >
++It can also be done automatically for C, C++, C#, IDL and PHP files by setting
++the global or buffer-local variable load_doxygen_syntax.  This is done by
++adding the following to your .vimrc. >
+ 	:let g:load_doxygen_syntax=1
+ 
+ There are a couple of variables that have an effect on syntax highlighting, and
+@@ -1026,22 +1248,24 @@
+ 
+ ERLANG						*erlang.vim* *ft-erlang-syntax*
+ 
+-The erlang highlighting supports Erlang (ERicsson LANGuage).
+-Erlang is case sensitive and default extension is ".erl".
++Erlang is a functional programming language developed by Ericsson.  Files with
++the following extensions are recognized as Erlang files: erl, hrl, yaws.
+ 
+-If you want to disable keywords highlighting, put in your .vimrc: >
+-	:let erlang_keywords = 1
+-If you want to disable built-in-functions highlighting, put in your
+-.vimrc file: >
+-	:let erlang_functions = 1
+-If you want to disable special characters highlighting, put in
+-your .vimrc: >
+-	:let erlang_characters = 1
++The BIFs (built-in functions) are highlighted by default. To disable this,
++put the following line in your vimrc: >
++
++      :let g:erlang_highlight_bifs = 0
++
++To enable highlighting some special atoms, put this in your vimrc: >
++
++      :let g:erlang_highlight_special_atoms = 1
+ 
+ 
+ FLEXWIKI				*flexwiki.vim* *ft-flexwiki-syntax*
+ 
+ FlexWiki is an ASP.NET-based wiki package available at http://www.flexwiki.com
++NOTE: this site currently doesn't work, on Wikipedia is mentioned that
++development stopped in 2009.
+ 
+ Syntax highlighting is available for the most common elements of FlexWiki
+ syntax. The associated ftplugin script sets some buffer-local options to make
+@@ -1093,14 +1317,12 @@
+ FORTRAN					*fortran.vim* *ft-fortran-syntax*
+ 
+ Default highlighting and dialect ~
+-Highlighting appropriate for f95 (Fortran 95) is used by default.  This choice
+-should be appropriate for most users most of the time because Fortran 95 is a
+-superset of Fortran 90 and almost a superset of Fortran 77. Support for 
+-Fortran 2003 and Fortran 2008 features has been introduced and is
+-automatically available in the default (f95) highlighting.
++Highlighting appropriate for Fortran 2008 is used by default.  This choice
++should be appropriate for most users most of the time because Fortran 2008 is 
++almost a superset of previous versions (Fortran 2003, 95, 90, and 77). 
+ 
+ Fortran source code form ~
+-Fortran 9x code can be in either fixed or free source form.  Note that the
++Fortran code can be in either fixed or free source form.  Note that the
+ syntax highlighting will not be correct if the form is incorrectly set.
+ 
+ When you create a new fortran file, the syntax script assumes fixed source
+@@ -1181,52 +1403,54 @@
+ construct.
+ 
+ Non-default fortran dialects ~
+-The syntax script supports five Fortran dialects: f95, f90, f77, the Lahey
+-subset elf90, and the Imagine1 subset F.
+-
+-If you use f77 with extensions, even common ones like do/enddo loops, do/while
+-loops and free source form that are supported by most f77 compilers including
+-g77 (GNU Fortran), then you will probably find the default highlighting
+-satisfactory.  However, if you use strict f77 with no extensions, not even free
+-source form or the MIL STD 1753 extensions, then the advantages of setting the
+-dialect to f77 are that names such as SUM are recognized as user variable
+-names and not highlighted as f9x intrinsic functions, that obsolete constructs
+-such as ASSIGN statements are not highlighted as todo items, and that fixed
+-source form will be assumed.
+-
+-If you use elf90 or F, the advantage of setting the dialect appropriately is
+-that f90 features excluded from these dialects will be highlighted as todo
+-items and that free source form will be assumed as required for these
+-dialects.
+-
+-The dialect can be selected by setting the variable fortran_dialect.  The
+-permissible values of fortran_dialect are case-sensitive and must be "f95",
+-"f90", "f77", "elf" or "F".  Invalid values of fortran_dialect are ignored.
+-
+-If all your fortran files use the same dialect, set fortran_dialect in your
+-.vimrc prior to your syntax on statement.  If the dialect depends upon the file
+-extension, then it is most convenient to set it in a ftplugin file.  For more
+-information on ftplugin files, see |ftplugin|.  For example, if all your
+-fortran files with an .f90 extension are written in the elf subset, your
+-ftplugin file should contain the code >
++The syntax script supports two Fortran dialects: f08 and F. You will probably
++find the default highlighting (f08) satisfactory.  A few legacy constructs
++deleted or declared obsolescent in the 2008 standard are highlighted as todo
++items.
++
++If you use F, the advantage of setting the dialect appropriately is that
++other legacy features excluded from F will be highlighted as todo items and
++that free source form will be assumed. 
++
++The dialect can be selected in various ways.  If all your fortran files use
++the same dialect, set the global variable fortran_dialect in your .vimrc prior
++to your syntax on statement.  The case-sensitive, permissible values of
++fortran_dialect are "f08" or "F".  Invalid values of fortran_dialect are
++ignored.
++
++If the dialect depends upon the file extension, then it is most convenient to
++set a buffer-local variable in a ftplugin file.  For more information on
++ftplugin files, see |ftplugin|.  For example, if all your fortran files with
++an .f90 extension are written in the F subset, your ftplugin file should
++contain the code >
+     let s:extfname = expand("%:e")
+     if s:extfname ==? "f90"
+-	let fortran_dialect="elf"
++	let b:fortran_dialect="F"
+     else
+-	unlet! fortran_dialect
++	unlet! b:fortran_dialect
+     endif
+ Note that this will work only if the "filetype plugin indent on" command
+ precedes the "syntax on" command in your .vimrc file.
+ 
+ Finer control is necessary if the file extension does not uniquely identify
+-the dialect.  You can override the default dialect, on a file-by-file basis, by
+-including a comment with the directive "fortran_dialect=xx" (where xx=f77 or
+-elf or F or f90 or f95) in one of the first three lines in your file.  For
+-example, your older .f files may be written in extended f77 but your newer
+-ones may be F codes, and you would identify the latter by including in the
+-first three lines of those files a Fortran comment of the form >
++the dialect.  You can override the default dialect, on a file-by-file basis,
++by including a comment with the directive "fortran_dialect=xx" (where xx=F or
++f08) in one of the first three lines in your file.  For example, your older .f
++files may be legacy code but your newer ones may be F codes, and you would
++identify the latter by including in the first three lines of those files a
++Fortran comment of the form >
+   ! fortran_dialect=F
+-F overrides elf if both directives are present.
++
++For previous versions of the syntax, you may have set fortran_dialect to the
++now-obsolete values "f77", "f90", "f95", or "elf". Such settings will be
++silently handled as "f08". Users of "elf" may wish to experiment with "F"
++instead. 
++
++The syntax/fortran.vim script contains embedded comments that tell you how to
++comment and/or uncomment some lines to (a) activate recognition of some
++non-standard, vendor-supplied intrinsics and (b) to prevent features deleted
++or declared obsolescent in the 2008 standard from being highlighted as todo
++items. 
+ 
+ Limitations ~
+ Parenthesis checking does not catch too few closing parentheses.  Hollerith
+@@ -1541,11 +1765,6 @@
+ strings, strings, boolean constants and types (this, super) respectively.  I
+ have opted to chose another background for those statements.
+ 
+-In order to help you write code that can be easily ported between Java and
+-C++, all C++ keywords can be marked as an error in a Java program.  To
+-have this add this line in your .vimrc file: >
+-	:let java_allow_cpp_keywords = 0
+-
+ Javadoc is a program that takes special comments out of Java program files and
+ creates HTML pages.  The standard configuration will highlight this HTML code
+ similarly to HTML files (see |html.vim|).  You can even add Javascript
+@@ -1684,19 +1903,10 @@
+ 
+ LUA						*lua.vim* *ft-lua-syntax*
+ 
+-This syntax file may be used for Lua 4.0, Lua 5.0 or Lua 5.1 (the latter is
++The Lua syntax file can be used for versions 4.0, 5.0, 5.1 and 5.2 (5.2 is
+ the default). You can select one of these versions using the global variables
+ lua_version and lua_subversion. For example, to activate Lua
+-4.0 syntax highlighting, use this command: >
+-
+-	:let lua_version = 4
+-
+-If you are using Lua 5.0, use these commands: >
+-
+-	:let lua_version = 5
+-	:let lua_subversion = 0
+-
+-To restore highlighting for Lua 5.1: >
++5.1 syntax highlighting, set the variables like this:
+ 
+ 	:let lua_version = 5
+ 	:let lua_subversion = 1
+@@ -1868,7 +2078,7 @@
+ than you intend to have in your final document.  For this reason, the common
+ practice is to insert a carriage return immediately after all punctuation
+ marks.  If you want to have "even" text in your final processed output, you
+-need to maintaining regular spacing in the input text.  To mark both trailing
++need to maintain regular spacing in the input text.  To mark both trailing
+ spaces and two or more spaces after a punctuation as an error, use: >
+ 
+   :let nroff_space_errors = 1
+@@ -2085,7 +2295,7 @@
+ 
+   let php_parent_error_close = 1
+ 
+-For skipping an php end tag, if there exists an open ( or [ without a closing
++For skipping a php end tag, if there exists an open ( or [ without a closing
+ one: >
+ 
+   let php_parent_error_open = 1
+@@ -2247,24 +2457,33 @@
+ 
+ PYTHON						*python.vim* *ft-python-syntax*
+ 
+-There are four options to control Python syntax highlighting.
++There are six options to control Python syntax highlighting.
+ 
+ For highlighted numbers: >
+-	:let python_highlight_numbers = 1
++	:let python_no_number_highlight = 1
+ 
+ For highlighted builtin functions: >
+-	:let python_highlight_builtins = 1
++	:let python_no_builtin_highlight = 1
+ 
+ For highlighted standard exceptions: >
+-	:let python_highlight_exceptions = 1
++	:let python_no_exception_highlight = 1
+ 
+-For highlighted trailing whitespace and mix of spaces and tabs:
+-	:let python_highlight_space_errors = 1
++For highlighted doctests and code inside: >
++	:let python_no_doctest_highlight = 1
++or >
++	:let python_no_doctest_code_highlight = 1
++(first option implies second one).
++
++For highlighted trailing whitespace and mix of spaces and tabs: >
++	:let python_space_error_highlight = 1
+ 
+ If you want all possible Python highlighting (the same as setting the
+-preceding three options): >
++preceding last option and unsetting all other ones): >
+ 	:let python_highlight_all = 1
+ 
++Note: only existence of these options matter, not their value. You can replace 
++      1 above with anything.
++
+ 
+ QUAKE						*quake.vim* *ft-quake-syntax*
+ 
+@@ -2300,6 +2519,12 @@
+ later, and part earlier) adds.
+ 
+ 
++RESTRUCTURED TEXT			*rst.vim* *ft-rst-syntax*
++
++You may set what syntax definitions should be used for code blocks via
++	let rst_syntax_code_list = ['vim', 'lisp', ...]
++
++
+ REXX						*rexx.vim* *ft-rexx-syntax*
+ 
+ If you notice highlighting errors while scrolling backwards, which are fixed
+@@ -2310,6 +2535,12 @@
+ displayed line.  The default value is 10.  The disadvantage of using a larger
+ number is that redrawing can become slow.
+ 
++Vim tries to guess what type a ".r" file is.  If it can't be detected (from
++comment lines), the default is "r".  To make the default rexx add this line to
++your .vimrc:  *g:filetype_r*
++>
++	:let g:filetype_r = "r"
++
+ 
+ RUBY						*ruby.vim* *ft-ruby-syntax*
+ 
+@@ -2537,8 +2768,41 @@
+ The default is to use the twice sh_minlines.  Set it to a smaller number to
+ speed up displaying.  The disadvantage is that highlight errors may appear.
+ 
++						*g:sh_isk* *g:sh_noisk*
++The shell languages appear to let "." be part of words, commands, etc;
++consequently it should be in the isk for sh.vim.  As of v116 of syntax/sh.vim,
++syntax/sh.vim will append the "." to |'iskeyword'| by default; you may control
++this behavior with: >
++	let g:sh_isk  = '..whatever characters you want as part of iskeyword'
++	let g:sh_noisk= 1  " otherwise, if this exists, the isk will NOT chg
++<
++						*sh-embed*  *sh-awk*
++ Sh: EMBEDDING LANGUAGES~
++
++You may wish to embed languages into sh.  I'll give an example courtesy of
++Lorance Stinson on how to do this with awk as an example. Put the following
++file into $HOME/.vim/after/syntax/sh/awkembed.vim: >
++
++    " AWK Embedding: {{{1
++    " ==============
++    " Shamelessly ripped from aspperl.vim by Aaron Hope.
++    if exists("b:current_syntax")
++      unlet b:current_syntax
++    endif
++    syn include @AWKScript syntax/awk.vim
++    syn region AWKScriptCode matchgroup=AWKCommand start=+[=\\]\@<!'+ skip=+\\'+ end=+'+ contains=@AWKScript contained
++    syn region AWKScriptEmbedded matchgroup=AWKCommand start=+\<awk\>+ skip=+\\$+ end=+[=\\]\@<!'+me=e-1 contains=@shIdList,@shExprList2 nextgroup=AWKScriptCode
++    syn cluster shCommandSubList add=AWKScriptEmbedded
++    hi def link AWKCommand Type
++<
++This code will then let the awk code in the single quotes: >
++	awk '...awk code here...'
++be highlighted using the awk highlighting syntax.  Clearly this may be
++extended to other languages.
+ 
+-SPEEDUP (AspenTech plant simulator)		*spup.vim* *ft-spup-syntax*
++
++SPEEDUP						*spup.vim* *ft-spup-syntax*
++(AspenTech plant simulator)
+ 
+ The Speedup syntax file has some options:
+ 
+@@ -2621,6 +2885,8 @@
+ in your <.vimrc>, and :set fdm=syntax.  I suggest doing the latter via a
+ modeline at the end of your LaTeX file: >
+ 	% vim: fdm=syntax
++If your system becomes too slow, then you might wish to look into >
++ 	http://vim.wikia.com/wiki/Keep_folds_closed_while_inserting_text
+ <
+ 								*tex-nospell*
+  Tex: Don't Want Spell Checking In Comments? ~
+@@ -2629,7 +2895,14 @@
+ prefer that spell checking be disabled in comments in LaTeX files.  To do
+ this, put the following in your <.vimrc>: >
+       let g:tex_comment_nospell= 1
+-<
++The comment lines >
++	% nospell{
++	...
++	% nospell}
++will suppress spell checking between them.  These comment lines spelling
++control are known to be fragile; for example, don't include any of the section
++commands (\part, \chapter, \section, \paragraph, etc) inside nospell blocks
++or interleave environments (such as math) across nospell blocks.
+ 								*tex-verb*
+  Tex: Want Spell Checking in Verbatim Zones?~
+ 
+@@ -2661,6 +2934,38 @@
+ increase them.	This primarily affects synchronizing (i.e. just what group,
+ if any, is the text at the top of the screen supposed to be in?).
+ 
++Another cause of slow highlighting is due to syntax-driven folding; see
++|tex-folding| for a way around this.
++
++								*g:tex_fast*
++
++Finally, if syntax highlighting is still too slow, you may set >
++
++	:let g:tex_fast= ""
++
++in your .vimrc.  Used this way, the g:tex_fast variable causes the syntax
++highlighting script to avoid defining any regions and associated
++synchronization.  The result will be much faster syntax highlighting; the
++price: you will no longer have as much highlighting or any syntax-based
++folding, and you will be missing syntax-based error checking.
++
++You may decide that some syntax is acceptable; you may use the following table
++selectively to enable just some syntax highlighting: >
++
++    b : allow bold and italic syntax
++    c : allow texComment syntax
++    m : allow texMatcher syntax (ie. {...} and [...])
++    M : allow texMath syntax
++    p : allow parts, chapter, section, etc syntax
++    r : allow texRefZone syntax (nocite, bibliography, label, pageref, eqref)
++    s : allow superscript/subscript regions
++    S : allow texStyle syntax
++    v : allow verbatim syntax
++    V : allow texNewEnv and texNewCmd syntax
++<
++As an example, let g:tex_fast= "M" will allow math-associated highlighting
++but suppress all the other region-based syntax highlighting.
++
+ 					    *tex-morecommands* *tex-package*
+  Tex: Want To Highlight More Commands? ~
+ 
+@@ -2669,7 +2974,9 @@
+ package you'll often wish that the distributed syntax/tex.vim would support
+ it.  However, clearly this is impractical.  So please consider using the
+ techniques in |mysyntaxfile-add| to extend or modify the highlighting provided
+-by syntax/tex.vim.
++by syntax/tex.vim.  Please consider uploading any extensions that you write,
++which typically would go in $HOME/after/syntax/tex/[pkgname].vim, to
++http://vim.sf.net/.
+ 
+ 								*tex-error*
+  Tex: Excessive Error Highlighting? ~
+@@ -2731,6 +3038,7 @@
+ following sets of characters: >
+ 
+ 	a = accents/ligatures
++	b = bold and italic
+ 	d = delimiters
+ 	m = math symbols
+ 	g = Greek
+@@ -2739,6 +3047,18 @@
+ By leaving one or more of these out, the associated conceal-character
+ substitution will not be made.
+ 
++						*g:tex_isk*
++ Tex: Controlling What's In A Keyword~
++
++(La)Tex keywords normally use the characters 0-9,a-z,A-Z,192-255 only
++but the "_" is the only one that causes problems.  So, by default,
++syntax/tex.vim overrides the usual |'iskeyword'| setting (using |:setlocal|)
++with one that works for LaTeX.
++
++However, one may override this iskeyword re-setting by setting the
++variable, g:tex_isk, in one's .vimrc to whatever one wishes and
++it will be used instead.
++ 
+ 
+ TF						*tf.vim* *ft-tf-syntax*
+ 
+@@ -2792,7 +3112,7 @@
+    g:vimsyn_folding =~ 'P' : fold python   script
+    g:vimsyn_folding =~ 'r' : fold ruby     script
+    g:vimsyn_folding =~ 't' : fold tcl      script
+-
++<
+ 							*g:vimsyn_noerror*
+ Not all error highlighting that syntax/vim.vim does may be correct; VimL is a
+ difficult language to highlight correctly.  A way to suppress error
+@@ -3174,6 +3494,9 @@
+    :hi par1 ctermfg=red guifg=red
+    :hi par2 ctermfg=blue guifg=blue
+    :hi par3 ctermfg=darkgreen guifg=darkgreen
++<
++						*E849*
++The maximum number of syntax groups is 19999.
+ 
+ ==============================================================================
+ 6. :syntax arguments					*:syn-arguments*
+@@ -3218,11 +3541,12 @@
+ in this way when they have their own highlighting via "matchgroup"
+ 
+ cchar							*:syn-cchar*
+-
++							*E844*
+ The "cchar" argument defines the character shown in place of the item
+ when it is concealed (setting "cchar" only makes sense when the conceal
+ argument is given.) If "cchar" is not set then the default conceal
+-character defined in the 'listchars' option is used. Example: >
++character defined in the 'listchars' option is used.  The character cannot be
++a control character such as Tab.  Example: >
+    :syntax match Entity "&amp;" conceal cchar=&
+ See |hl-Conceal| for highlighting.
+ 
+@@ -3536,7 +3860,7 @@
+ e	end of the matched pattern
+ e+{nr}	end of the matched pattern plus {nr} chars to the right
+ e-{nr}	end of the matched pattern plus {nr} chars to the left
+-{nr}	(for "lc" only): start matching {nr} chars to the left
++{nr}	(for "lc" only): start matching {nr} chars right of the start
+ 
+ Examples: "ms=s+1", "hs=e-2", "lc=3".
+ 
+@@ -3633,10 +3957,10 @@
+ 
+ These extra regular expression items are available in region patterns:
+ 
+-						*/\z(* */\z(\)* *E50* *E52*
+-    \z(\)	Marks the sub-expression as "external", meaning that it is can
+-		be accessed from another pattern match.  Currently only usable
+-		in defining a syntax region start pattern.
++					*/\z(* */\z(\)* *E50* *E52* *E879*
++    \z(\)	Marks the sub-expression as "external", meaning that it can be
++		accessed from another pattern match.  Currently only usable in
++		defining a syntax region start pattern.
+ 
+ 					*/\z1* */\z2* */\z3* */\z4* */\z5*
+     \z1  ...  \z9			*/\z6* */\z7* */\z8* */\z9* *E66* *E67*
+@@ -3711,6 +4035,9 @@
+    :syntax match Stuff "( aaa bbb )" contains=@BigGroup
+    :syntax cluster BigGroup remove=B	" no effect, since B isn't in BigGroup
+    :syntax cluster SmallGroup remove=B	" now bbb isn't matched within Stuff
++<
++						*E848*
++The maximum number of clusters is 9767.
+ 
+ ==============================================================================
+ 9. Including syntax files				*:syn-include* *E397*
+@@ -3750,6 +4077,9 @@
+ 	  with his own version, without replacing the file that does the ":syn
+ 	  include".
+ 
++						*E847*
++The maximum number of includes is 999.
++
+ ==============================================================================
+ 10. Synchronizing				*:syn-sync* *E403* *E404*
+ 
+@@ -3803,7 +4133,7 @@
+ The file will be parsed from the start.  This makes syntax highlighting
+ accurate, but can be slow for long files.  Vim caches previously parsed text,
+ so that it's only slow when parsing the text for the first time.  However,
+-when making changes some part of the next needs to be parsed again (worst
++when making changes some part of the text needs to be parsed again (worst
+ case: to the end of the file).
+ 
+ Using "fromstart" is equivalent to using "minlines" with a very large number.
+@@ -3953,7 +4283,7 @@
+ 
+     :sy[ntax] list {group-name}
+ 
+-To list the syntax groups in one cluster:			*E392*	>
++To list the syntax groups in one cluster:			*E392*	 >
+ 
+     :sy[ntax] list @{cluster-name}
+ 
+@@ -4316,6 +4646,9 @@
+ 							*hl-LineNr*
+ LineNr		Line number for ":number" and ":#" commands, and when 'number'
+ 		or 'relativenumber' option is set.
++							*hl-CursorLineNr*
++CursorLineNr	Like LineNr when 'cursorline' or 'relativenumber' is set for
++		the cursor line.
+ 							*hl-MatchParen*
+ MatchParen	The character under the cursor or just before it, if it
+ 		is a paired bracket, and its match. |pi_paren.txt|
+@@ -4604,7 +4937,7 @@
+ 
+ Once a window has its own syntax, syntax commands executed from other windows
+ on the same buffer (including :syntax clear) have no effect. Conversely, 
+-syntax commands executed from that window do not effect other windows on the
++syntax commands executed from that window do not affect other windows on the
+ same buffer.
+ 
+ A window with its own syntax reverts to normal behavior when another buffer
+@@ -4612,7 +4945,7 @@
+ When splitting the window, the new window will use the original syntax.
+ 
+ ==============================================================================
+-16. Color xterms				*xterm-color* *color-xterm*
++17. Color xterms				*xterm-color* *color-xterm*
+ 
+ Most color xterms have only eight colors.  If you don't get colors with the
+ default setup, it should work with these lines in your .vimrc: >
+@@ -4754,4 +5087,63 @@
+ that Setup / Font / Enable Bold is NOT enabled.
+ (info provided by John Love-Jensen <eljay@Adobe.COM>)
+ 
++
++==============================================================================
++18. When syntax is slow						*:syntime*
++
++This is aimed at authors of a syntax file.
++
++If your syntax causes redrawing to be slow, here are a few hints on making it
++faster.  To see slowness switch on some features that usually interfere, such
++as 'relativenumber' and |folding|.
++
++Note: this is only available when compiled with the |+profile| feature.
++You many need to build Vim with "huge" features.
++
++To find out what patterns are consuming most time, get an overview with this
++sequence: >
++	:syntime on
++	[ redraw the text at least once with CTRL-L ]
++	:syntime report
++
++This will display a list of syntax patterns that were used, sorted by the time
++it took to match them against the text.
++
++:syntime on		Start measuring syntax times.  This will add some
++			overhead to compute the time spent on syntax pattern
++			matching.
++
++:syntime off		Stop measuring syntax times.
++
++:syntime clear		Set all the counters to zero, restart measuring.
++
++:syntime report		Show the syntax items used since ":syntime on" in the
++			current window.  Use a wider display to see more of
++			the output.
++
++			The list is sorted by total time. The columns are:
++			TOTAL		Total time in seconds spent on
++					matching this pattern.
++			COUNT		Number of times the pattern was used.
++			MATCH		Number of times the pattern actually
++					matched
++			SLOWEST		The longest time for one try.
++			AVERAGE		The average time for one try.
++			NAME		Name of the syntax item.  Note that
++					this is not unique.
++			PATTERN		The pattern being used.
++
++Pattern matching gets slow when it has to try many alternatives.  Try to
++include as much literal text as possible to reduce the number of ways a
++pattern does NOT match.
++
++When using the "\@<=" and "\@<!" items, add a maximum size to avoid trying at
++all positions in the current and previous line.  For example, if the item is
++literal text specify the size of that text (in bytes):
++
++"<\@<=span"   	Matches "span" in "<span".  This tries matching with "<" in
++		many places.
++"<\@1<=span"  	Matches the same, but only tries one byte before "span".
++
++
+  vim:tw=78:sw=4:ts=8:ft=help:norl:
+diff -Naur vim73.orig/runtime/doc/tabpage.txt vim73/runtime/doc/tabpage.txt
+--- vim73.orig/runtime/doc/tabpage.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/tabpage.txt	2013-06-07 17:07:09.825647285 +0000
+@@ -1,4 +1,4 @@
+-*tabpage.txt*   For Vim version 7.3.  Last change: 2010 Jul 31
++*tabpage.txt*   For Vim version 7.3.  Last change: 2012 Aug 08
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -113,7 +113,7 @@
+ 		this is a "safe" command.
+ 
+ :tabc[lose][!] {count}
+-		Close tab page {count}.  Fails in the same way as ':tabclose"
++		Close tab page {count}.  Fails in the same way as `:tabclose`
+ 		above.
+ 
+ 							*:tabo* *:tabonly*
+@@ -173,10 +173,20 @@
+ REORDERING TAB PAGES:
+ 
+ :tabm[ove] [N]						*:tabm* *:tabmove*
++:[N]tabm[ove]
+ 		Move the current tab page to after tab page N.  Use zero to
+ 		make the current tab page the first one.  Without N the tab
+ 		page is made the last one.
+ 
++:tabm[ove] +[N]
++:tabm[ove] -[N]
++		Move the current tab page N places to the right (with +) or to
++		the left (with -).
++
++Note that although it is possible to move a tab behind the N-th one by using
++:Ntabmove, it is impossible to move it by N places by using :+Ntabmove. For
++clarification what +N means in this context see |[range]|.
++
+ 
+ LOOPING OVER TAB PAGES:
+ 
+diff -Naur vim73.orig/runtime/doc/tags vim73/runtime/doc/tags
+--- vim73.orig/runtime/doc/tags	2010-08-15 12:54:29.000000000 +0000
++++ vim73/runtime/doc/tags	2013-06-07 17:07:09.852313875 +0000
+@@ -154,12 +154,14 @@
+ 'cscopepathcomp'	options.txt	/*'cscopepathcomp'*
+ 'cscopeprg'	options.txt	/*'cscopeprg'*
+ 'cscopequickfix'	options.txt	/*'cscopequickfix'*
++'cscoperelative'	options.txt	/*'cscoperelative'*
+ 'cscopetag'	options.txt	/*'cscopetag'*
+ 'cscopetagorder'	options.txt	/*'cscopetagorder'*
+ 'cscopeverbose'	options.txt	/*'cscopeverbose'*
+ 'cspc'	options.txt	/*'cspc'*
+ 'csprg'	options.txt	/*'csprg'*
+ 'csqf'	options.txt	/*'csqf'*
++'csre'	options.txt	/*'csre'*
+ 'cst'	options.txt	/*'cst'*
+ 'csto'	options.txt	/*'csto'*
+ 'csverb'	options.txt	/*'csverb'*
+@@ -231,10 +233,12 @@
+ 'fex'	options.txt	/*'fex'*
+ 'ff'	options.txt	/*'ff'*
+ 'ffs'	options.txt	/*'ffs'*
++'fic'	options.txt	/*'fic'*
+ 'fileencoding'	options.txt	/*'fileencoding'*
+ 'fileencodings'	options.txt	/*'fileencodings'*
+ 'fileformat'	options.txt	/*'fileformat'*
+ 'fileformats'	options.txt	/*'fileformats'*
++'fileignorecase'	options.txt	/*'fileignorecase'*
+ 'filetype'	options.txt	/*'filetype'*
+ 'fillchars'	options.txt	/*'fillchars'*
+ 'fk'	options.txt	/*'fk'*
+@@ -279,6 +283,7 @@
+ 'go-F'	options.txt	/*'go-F'*
+ 'go-L'	options.txt	/*'go-L'*
+ 'go-M'	options.txt	/*'go-M'*
++'go-P'	options.txt	/*'go-P'*
+ 'go-R'	options.txt	/*'go-R'*
+ 'go-T'	options.txt	/*'go-T'*
+ 'go-a'	options.txt	/*'go-a'*
+@@ -520,6 +525,8 @@
+ 'noexpandtab'	options.txt	/*'noexpandtab'*
+ 'noexrc'	options.txt	/*'noexrc'*
+ 'nofen'	options.txt	/*'nofen'*
++'nofic'	options.txt	/*'nofic'*
++'nofileignorecase'	options.txt	/*'nofileignorecase'*
+ 'nofk'	options.txt	/*'nofk'*
+ 'nofkmap'	options.txt	/*'nofkmap'*
+ 'nofoldenable'	options.txt	/*'nofoldenable'*
+@@ -650,6 +657,8 @@
+ 'nottybuiltin'	options.txt	/*'nottybuiltin'*
+ 'nottyfast'	options.txt	/*'nottyfast'*
+ 'notx'	options.txt	/*'notx'*
++'noudf'	options.txt	/*'noudf'*
++'noundofile'	options.txt	/*'noundofile'*
+ 'novb'	options.txt	/*'novb'*
+ 'novice'	vi_diff.txt	/*'novice'*
+ 'novisualbell'	options.txt	/*'novisualbell'*
+@@ -659,6 +668,8 @@
+ 'noweirdinvert'	options.txt	/*'noweirdinvert'*
+ 'nowfh'	options.txt	/*'nowfh'*
+ 'nowfw'	options.txt	/*'nowfw'*
++'nowic'	options.txt	/*'nowic'*
++'nowildignorecase'	options.txt	/*'nowildignorecase'*
+ 'nowildmenu'	options.txt	/*'nowildmenu'*
+ 'nowinfixheight'	options.txt	/*'nowinfixheight'*
+ 'nowinfixwidth'	options.txt	/*'nowinfixwidth'*
+@@ -727,9 +738,11 @@
+ 'quote	motion.txt	/*'quote*
+ 'quoteescape'	options.txt	/*'quoteescape'*
+ 'rdt'	options.txt	/*'rdt'*
++'re'	options.txt	/*'re'*
+ 'readonly'	options.txt	/*'readonly'*
+ 'redraw'	vi_diff.txt	/*'redraw'*
+ 'redrawtime'	options.txt	/*'redrawtime'*
++'regexpengine'	options.txt	/*'regexpengine'*
+ 'relativenumber'	options.txt	/*'relativenumber'*
+ 'remap'	options.txt	/*'remap'*
+ 'report'	options.txt	/*'report'*
+@@ -779,6 +792,7 @@
+ 'shellslash'	options.txt	/*'shellslash'*
+ 'shelltemp'	options.txt	/*'shelltemp'*
+ 'shelltype'	options.txt	/*'shelltype'*
++'shellxescape'	options.txt	/*'shellxescape'*
+ 'shellxquote'	options.txt	/*'shellxquote'*
+ 'shiftround'	options.txt	/*'shiftround'*
+ 'shiftwidth'	options.txt	/*'shiftwidth'*
+@@ -848,6 +862,7 @@
+ 'swf'	options.txt	/*'swf'*
+ 'switchbuf'	options.txt	/*'switchbuf'*
+ 'sws'	options.txt	/*'sws'*
++'sxe'	options.txt	/*'sxe'*
+ 'sxq'	options.txt	/*'sxq'*
+ 'syn'	options.txt	/*'syn'*
+ 'synmaxcol'	options.txt	/*'synmaxcol'*
+@@ -957,6 +972,7 @@
+ 't_te'	term.txt	/*'t_te'*
+ 't_ti'	term.txt	/*'t_ti'*
+ 't_ts'	term.txt	/*'t_ts'*
++'t_u7'	term.txt	/*'t_u7'*
+ 't_ue'	term.txt	/*'t_ue'*
+ 't_us'	term.txt	/*'t_us'*
+ 't_ut'	term.txt	/*'t_ut'*
+@@ -1064,10 +1080,12 @@
+ 'wh'	options.txt	/*'wh'*
+ 'whichwrap'	options.txt	/*'whichwrap'*
+ 'wi'	options.txt	/*'wi'*
++'wic'	options.txt	/*'wic'*
+ 'wig'	options.txt	/*'wig'*
+ 'wildchar'	options.txt	/*'wildchar'*
+ 'wildcharm'	options.txt	/*'wildcharm'*
+ 'wildignore'	options.txt	/*'wildignore'*
++'wildignorecase'	options.txt	/*'wildignorecase'*
+ 'wildmenu'	options.txt	/*'wildmenu'*
+ 'wildmode'	options.txt	/*'wildmode'*
+ 'wildoptions'	options.txt	/*'wildoptions'*
+@@ -1177,7 +1195,9 @@
+ +mouse_gpm	various.txt	/*+mouse_gpm*
+ +mouse_netterm	various.txt	/*+mouse_netterm*
+ +mouse_pterm	various.txt	/*+mouse_pterm*
+++mouse_sgr	various.txt	/*+mouse_sgr*
+ +mouse_sysmouse	various.txt	/*+mouse_sysmouse*
+++mouse_urxvt	various.txt	/*+mouse_urxvt*
+ +mouse_xterm	various.txt	/*+mouse_xterm*
+ +mouseshape	various.txt	/*+mouseshape*
+ +multi_byte	various.txt	/*+multi_byte*
+@@ -1187,7 +1207,6 @@
+ +mzscheme/dyn	various.txt	/*+mzscheme\/dyn*
+ +netbeans_intg	various.txt	/*+netbeans_intg*
+ +ole	various.txt	/*+ole*
+-+osfiletype	various.txt	/*+osfiletype*
+ +path_extra	various.txt	/*+path_extra*
+ +perl	various.txt	/*+perl*
+ +perl/dyn	various.txt	/*+perl\/dyn*
+@@ -1237,6 +1256,7 @@
+ +writebackup	various.txt	/*+writebackup*
+ +xfontset	various.txt	/*+xfontset*
+ +xim	various.txt	/*+xim*
+++xpm_w32	various.txt	/*+xpm_w32*
+ +xsmp	various.txt	/*+xsmp*
+ +xsmp_interact	various.txt	/*+xsmp_interact*
+ +xterm_clipboard	various.txt	/*+xterm_clipboard*
+@@ -1373,6 +1393,7 @@
+ /\	pattern.txt	/*\/\\*
+ /\$	pattern.txt	/*\/\\$*
+ /\%#	pattern.txt	/*\/\\%#*
++/\%#=	pattern.txt	/*\/\\%#=*
+ /\%$	pattern.txt	/*\/\\%$*
+ /\%'m	pattern.txt	/*\/\\%'m*
+ /\%(	pattern.txt	/*\/\\%(*
+@@ -1818,6 +1839,7 @@
+ :RmVimball	pi_vimball.txt	/*:RmVimball*
+ :Sexplore	pi_netrw.txt	/*:Sexplore*
+ :TOhtml	syntax.txt	/*:TOhtml*
++:TarDiff	pi_tar.txt	/*:TarDiff*
+ :Texplore	pi_netrw.txt	/*:Texplore*
+ :UseVimball	pi_vimball.txt	/*:UseVimball*
+ :Vexplore	pi_netrw.txt	/*:Vexplore*
+@@ -1826,6 +1848,7 @@
+ :X	editing.txt	/*:X*
+ :XMLent	insert.txt	/*:XMLent*
+ :XMLns	insert.txt	/*:XMLns*
++:[range]	motion.txt	/*:[range]*
+ :\bar	cmdline.txt	/*:\\bar*
+ :_!	cmdline.txt	/*:_!*
+ :_#	cmdline.txt	/*:_#*
+@@ -2087,6 +2110,7 @@
+ :display	change.txt	/*:display*
+ :dj	tagsrch.txt	/*:dj*
+ :djump	tagsrch.txt	/*:djump*
++:dl	change.txt	/*:dl*
+ :dli	tagsrch.txt	/*:dli*
+ :dlist	tagsrch.txt	/*:dlist*
+ :do	autocmd.txt	/*:do*
+@@ -2571,7 +2595,9 @@
+ :pwd	editing.txt	/*:pwd*
+ :py	if_pyth.txt	/*:py*
+ :py3	if_pyth.txt	/*:py3*
++:py3do	if_pyth.txt	/*:py3do*
+ :py3file	if_pyth.txt	/*:py3file*
++:pydo	if_pyth.txt	/*:pydo*
+ :pyf	if_pyth.txt	/*:pyf*
+ :pyfile	if_pyth.txt	/*:pyfile*
+ :python	if_pyth.txt	/*:python*
+@@ -2607,6 +2633,7 @@
+ :resize	windows.txt	/*:resize*
+ :ret	change.txt	/*:ret*
+ :retab	change.txt	/*:retab*
++:retab!	change.txt	/*:retab!*
+ :retu	eval.txt	/*:retu*
+ :return	eval.txt	/*:return*
+ :rew	editing.txt	/*:rew*
+@@ -2849,6 +2876,7 @@
+ :syntax-enable	syntax.txt	/*:syntax-enable*
+ :syntax-on	syntax.txt	/*:syntax-on*
+ :syntax-reset	syntax.txt	/*:syntax-reset*
++:syntime	syntax.txt	/*:syntime*
+ :t	change.txt	/*:t*
+ :tN	tagsrch.txt	/*:tN*
+ :tNext	tagsrch.txt	/*:tNext*
+@@ -3198,10 +3226,12 @@
+ <line1>	map.txt	/*<line1>*
+ <line2>	map.txt	/*<line2>*
+ <lt>	intro.txt	/*<lt>*
++<nomodeline>	autocmd.txt	/*<nomodeline>*
+ <q-args>	map.txt	/*<q-args>*
+ <reg>	map.txt	/*<reg>*
+ <register>	map.txt	/*<register>*
+ <sfile>	cmdline.txt	/*<sfile>*
++<slnum>	cmdline.txt	/*<slnum>*
+ <xCSI>	intro.txt	/*<xCSI>*
+ <xDown>	term.txt	/*<xDown>*
+ <xEnd>	term.txt	/*<xEnd>*
+@@ -3395,6 +3425,7 @@
+ ColorScheme	autocmd.txt	/*ColorScheme*
+ Command-line	cmdline.txt	/*Command-line*
+ Command-line-mode	cmdline.txt	/*Command-line-mode*
++CompleteDone	autocmd.txt	/*CompleteDone*
+ Contents	quickref.txt	/*Contents*
+ Cscope	if_cscop.txt	/*Cscope*
+ CursorHold	autocmd.txt	/*CursorHold*
+@@ -3420,7 +3451,6 @@
+ E103	diff.txt	/*E103*
+ E104	digraph.txt	/*E104*
+ E105	mbyte.txt	/*E105*
+-E106	eval.txt	/*E106*
+ E107	eval.txt	/*E107*
+ E108	eval.txt	/*E108*
+ E109	eval.txt	/*E109*
+@@ -3587,7 +3617,6 @@
+ E258	remote.txt	/*E258*
+ E259	if_cscop.txt	/*E259*
+ E26	rileft.txt	/*E26*
+-E260	if_cscop.txt	/*E260*
+ E261	if_cscop.txt	/*E261*
+ E262	if_cscop.txt	/*E262*
+ E263	if_pyth.txt	/*E263*
+@@ -3620,9 +3649,6 @@
+ E288	mbyte.txt	/*E288*
+ E289	mbyte.txt	/*E289*
+ E29	change.txt	/*E29*
+-E290	mbyte.txt	/*E290*
+-E291	mbyte.txt	/*E291*
+-E292	mbyte.txt	/*E292*
+ E293	message.txt	/*E293*
+ E294	message.txt	/*E294*
+ E295	message.txt	/*E295*
+@@ -3702,7 +3728,6 @@
+ E363	options.txt	/*E363*
+ E364	eval.txt	/*E364*
+ E365	print.txt	/*E365*
+-E366	options.txt	/*E366*
+ E367	autocmd.txt	/*E367*
+ E368	eval.txt	/*E368*
+ E369	pattern.txt	/*E369*
+@@ -3836,7 +3861,6 @@
+ E486	pattern.txt	/*E486*
+ E487	options.txt	/*E487*
+ E488	message.txt	/*E488*
+-E489	intro.txt	/*E489*
+ E49	message.txt	/*E49*
+ E490	fold.txt	/*E490*
+ E492	message.txt	/*E492*
+@@ -3919,7 +3943,6 @@
+ E562	if_cscop.txt	/*E562*
+ E563	if_cscop.txt	/*E563*
+ E564	if_cscop.txt	/*E564*
+-E565	if_cscop.txt	/*E565*
+ E566	if_cscop.txt	/*E566*
+ E567	if_cscop.txt	/*E567*
+ E568	if_cscop.txt	/*E568*
+@@ -3969,8 +3992,6 @@
+ E608	eval.txt	/*E608*
+ E609	if_cscop.txt	/*E609*
+ E61	pattern.txt	/*E61*
+-E610	options.txt	/*E610*
+-E611	options.txt	/*E611*
+ E612	sign.txt	/*E612*
+ E613	print.txt	/*E613*
+ E614	editing.txt	/*E614*
+@@ -4219,10 +4240,49 @@
+ E835	options.txt	/*E835*
+ E836	if_pyth.txt	/*E836*
+ E837	if_pyth.txt	/*E837*
++E838	netbeans.txt	/*E838*
++E839	insert.txt	/*E839*
+ E84	windows.txt	/*E84*
++E840	insert.txt	/*E840*
++E841	map.txt	/*E841*
++E842	cmdline.txt	/*E842*
++E843	editing.txt	/*E843*
++E844	syntax.txt	/*E844*
++E845	spell.txt	/*E845*
++E846	options.txt	/*E846*
++E847	syntax.txt	/*E847*
++E848	syntax.txt	/*E848*
++E849	syntax.txt	/*E849*
+ E85	options.txt	/*E85*
++E850	change.txt	/*E850*
++E851	gui_x11.txt	/*E851*
++E852	gui_x11.txt	/*E852*
++E853	eval.txt	/*E853*
++E854	options.txt	/*E854*
++E855	autocmd.txt	/*E855*
++E858	eval.txt	/*E858*
++E859	eval.txt	/*E859*
+ E86	windows.txt	/*E86*
++E860	eval.txt	/*E860*
++E862	eval.txt	/*E862*
++E863	if_pyth.txt	/*E863*
++E864	pattern.txt	/*E864*
++E865	pattern.txt	/*E865*
++E866	pattern.txt	/*E866*
++E867	pattern.txt	/*E867*
++E868	pattern.txt	/*E868*
++E869	pattern.txt	/*E869*
+ E87	windows.txt	/*E87*
++E870	pattern.txt	/*E870*
++E871	pattern.txt	/*E871*
++E872	pattern.txt	/*E872*
++E873	pattern.txt	/*E873*
++E874	pattern.txt	/*E874*
++E875	pattern.txt	/*E875*
++E876	pattern.txt	/*E876*
++E877	pattern.txt	/*E877*
++E878	pattern.txt	/*E878*
++E879	syntax.txt	/*E879*
+ E88	windows.txt	/*E88*
+ E89	message.txt	/*E89*
+ E90	message.txt	/*E90*
+@@ -4290,6 +4350,7 @@
+ Insert	insert.txt	/*Insert*
+ Insert-mode	insert.txt	/*Insert-mode*
+ InsertChange	autocmd.txt	/*InsertChange*
++InsertCharPre	autocmd.txt	/*InsertCharPre*
+ InsertEnter	autocmd.txt	/*InsertEnter*
+ InsertLeave	autocmd.txt	/*InsertLeave*
+ J	change.txt	/*J*
+@@ -4403,6 +4464,7 @@
+ QuickFixCmdPost-example	quickfix.txt	/*QuickFixCmdPost-example*
+ QuickFixCmdPre	autocmd.txt	/*QuickFixCmdPre*
+ Quickfix	quickfix.txt	/*Quickfix*
++QuitPre	autocmd.txt	/*QuitPre*
+ R	change.txt	/*R*
+ RISC-OS	os_risc.txt	/*RISC-OS*
+ RISCOS	os_risc.txt	/*RISCOS*
+@@ -4434,6 +4496,11 @@
+ T	motion.txt	/*T*
+ TCL	if_tcl.txt	/*TCL*
+ TERM	starting.txt	/*TERM*
++TOhtml-encoding	syntax.txt	/*TOhtml-encoding*
++TOhtml-encoding-detect	syntax.txt	/*TOhtml-encoding-detect*
++TOhtml-performance	syntax.txt	/*TOhtml-performance*
++TOhtml-uncopyable-text	syntax.txt	/*TOhtml-uncopyable-text*
++TOhtml-wrap-text	syntax.txt	/*TOhtml-wrap-text*
+ TSQL	ft_sql.txt	/*TSQL*
+ TTpro-telnet	syntax.txt	/*TTpro-telnet*
+ Tab	intro.txt	/*Tab*
+@@ -4442,6 +4509,8 @@
+ Tcl	if_tcl.txt	/*Tcl*
+ TermChanged	autocmd.txt	/*TermChanged*
+ TermResponse	autocmd.txt	/*TermResponse*
++TextChanged	autocmd.txt	/*TextChanged*
++TextChangedI	autocmd.txt	/*TextChangedI*
+ Transact-SQL	ft_sql.txt	/*Transact-SQL*
+ U	undo.txt	/*U*
+ UTF-8	mbyte.txt	/*UTF-8*
+@@ -4669,6 +4738,7 @@
+ alt-input	debugger.txt	/*alt-input*
+ alternate-file	editing.txt	/*alternate-file*
+ amiga-window	starting.txt	/*amiga-window*
++and()	eval.txt	/*and()*
+ anonymous-function	eval.txt	/*anonymous-function*
+ ant.vim	syntax.txt	/*ant.vim*
+ ap	motion.txt	/*ap*
+@@ -4723,6 +4793,7 @@
+ autocommand	autocmd.txt	/*autocommand*
+ autocommand-events	autocmd.txt	/*autocommand-events*
+ autocommand-pattern	autocmd.txt	/*autocommand-pattern*
++autoformat	change.txt	/*autoformat*
+ autoload	eval.txt	/*autoload*
+ autoload-functions	eval.txt	/*autoload-functions*
+ avoid-hit-enter	version5.txt	/*avoid-hit-enter*
+@@ -4730,7 +4801,8 @@
+ a{	motion.txt	/*a{*
+ a}	motion.txt	/*a}*
+ b	motion.txt	/*b*
+-b:changedtick-variable	eval.txt	/*b:changedtick-variable*
++b:	eval.txt	/*b:*
++b:changedtick	eval.txt	/*b:changedtick*
+ b:changelog_name	filetype.txt	/*b:changelog_name*
+ b:current_syntax-variable	syntax.txt	/*b:current_syntax-variable*
+ b:netrw_lastfile	pi_netrw.txt	/*b:netrw_lastfile*
+@@ -4771,6 +4843,7 @@
+ beval_lnum-variable	eval.txt	/*beval_lnum-variable*
+ beval_text-variable	eval.txt	/*beval_text-variable*
+ beval_winnr-variable	eval.txt	/*beval_winnr-variable*
++bitwise-function	usr_41.txt	/*bitwise-function*
+ blockwise-examples	visual.txt	/*blockwise-examples*
+ blockwise-operators	visual.txt	/*blockwise-operators*
+ blockwise-register	change.txt	/*blockwise-register*
+@@ -4852,6 +4925,8 @@
+ c_<S-Up>	cmdline.txt	/*c_<S-Up>*
+ c_<Tab>	cmdline.txt	/*c_<Tab>*
+ c_<Up>	cmdline.txt	/*c_<Up>*
++c_BS	cmdline.txt	/*c_BS*
++c_CR	cmdline.txt	/*c_CR*
+ c_CTRL-A	cmdline.txt	/*c_CTRL-A*
+ c_CTRL-B	cmdline.txt	/*c_CTRL-B*
+ c_CTRL-C	cmdline.txt	/*c_CTRL-C*
+@@ -4884,6 +4959,15 @@
+ c_CTRL-]	cmdline.txt	/*c_CTRL-]*
+ c_CTRL-^	cmdline.txt	/*c_CTRL-^*
+ c_CTRL-_	cmdline.txt	/*c_CTRL-_*
++c_Del	cmdline.txt	/*c_Del*
++c_Down	cmdline.txt	/*c_Down*
++c_End	cmdline.txt	/*c_End*
++c_Esc	cmdline.txt	/*c_Esc*
++c_Home	cmdline.txt	/*c_Home*
++c_Insert	cmdline.txt	/*c_Insert*
++c_Left	cmdline.txt	/*c_Left*
++c_Right	cmdline.txt	/*c_Right*
++c_Up	cmdline.txt	/*c_Up*
+ c_digraph	cmdline.txt	/*c_digraph*
+ c_wildchar	cmdline.txt	/*c_wildchar*
+ call()	eval.txt	/*call()*
+@@ -4934,12 +5018,55 @@
+ chill.vim	syntax.txt	/*chill.vim*
+ cindent()	eval.txt	/*cindent()*
+ cinkeys-format	indent.txt	/*cinkeys-format*
++cino-#	indent.txt	/*cino-#*
++cino-(	indent.txt	/*cino-(*
++cino-)	indent.txt	/*cino-)*
++cino-+	indent.txt	/*cino-+*
++cino-/	indent.txt	/*cino-\/*
++cino-:	indent.txt	/*cino-:*
++cino-=	indent.txt	/*cino-=*
++cino->	indent.txt	/*cino->*
++cino-C	indent.txt	/*cino-C*
++cino-J	indent.txt	/*cino-J*
++cino-L	indent.txt	/*cino-L*
++cino-M	indent.txt	/*cino-M*
++cino-N	indent.txt	/*cino-N*
++cino-U	indent.txt	/*cino-U*
++cino-W	indent.txt	/*cino-W*
++cino-^	indent.txt	/*cino-^*
++cino-b	indent.txt	/*cino-b*
++cino-c	indent.txt	/*cino-c*
++cino-e	indent.txt	/*cino-e*
++cino-f	indent.txt	/*cino-f*
++cino-g	indent.txt	/*cino-g*
++cino-h	indent.txt	/*cino-h*
++cino-i	indent.txt	/*cino-i*
++cino-j	indent.txt	/*cino-j*
++cino-k	indent.txt	/*cino-k*
++cino-l	indent.txt	/*cino-l*
++cino-m	indent.txt	/*cino-m*
++cino-n	indent.txt	/*cino-n*
++cino-p	indent.txt	/*cino-p*
++cino-star	indent.txt	/*cino-star*
++cino-t	indent.txt	/*cino-t*
++cino-u	indent.txt	/*cino-u*
++cino-w	indent.txt	/*cino-w*
++cino-{	indent.txt	/*cino-{*
++cino-}	indent.txt	/*cino-}*
+ cinoptions-values	indent.txt	/*cinoptions-values*
+ clear-undo	undo.txt	/*clear-undo*
+ clearmatches()	eval.txt	/*clearmatches()*
+ client-server	remote.txt	/*client-server*
+ clientserver	remote.txt	/*clientserver*
+ clipboard	gui.txt	/*clipboard*
++clipboard-autoselect	options.txt	/*clipboard-autoselect*
++clipboard-autoselectml	options.txt	/*clipboard-autoselectml*
++clipboard-autoselectplus	options.txt	/*clipboard-autoselectplus*
++clipboard-exclude	options.txt	/*clipboard-exclude*
++clipboard-html	options.txt	/*clipboard-html*
++clipboard-unnamed	options.txt	/*clipboard-unnamed*
++clipboard-unnamedplus	options.txt	/*clipboard-unnamedplus*
++clojure-indent	indent.txt	/*clojure-indent*
+ cmdarg-variable	eval.txt	/*cmdarg-variable*
+ cmdbang-variable	eval.txt	/*cmdbang-variable*
+ cmdline-arguments	vi_diff.txt	/*cmdline-arguments*
+@@ -5038,6 +5165,7 @@
+ cpo--	options.txt	/*cpo--*
+ cpo-.	options.txt	/*cpo-.*
+ cpo-/	options.txt	/*cpo-\/*
++cpo-;	options.txt	/*cpo-;*
+ cpo-<	options.txt	/*cpo-<*
+ cpo->	options.txt	/*cpo->*
+ cpo-A	options.txt	/*cpo-A*
+@@ -5087,6 +5215,7 @@
+ cpo-x	options.txt	/*cpo-x*
+ cpo-y	options.txt	/*cpo-y*
+ cpo-{	options.txt	/*cpo-{*
++cpp.vim	syntax.txt	/*cpp.vim*
+ crash-recovery	recover.txt	/*crash-recovery*
+ creating-menus	gui.txt	/*creating-menus*
+ credits	intro.txt	/*credits*
+@@ -5107,6 +5236,7 @@
+ cscopepathcomp	if_cscop.txt	/*cscopepathcomp*
+ cscopeprg	if_cscop.txt	/*cscopeprg*
+ cscopequickfix	if_cscop.txt	/*cscopequickfix*
++cscoperelative	if_cscop.txt	/*cscoperelative*
+ cscopetag	if_cscop.txt	/*cscopetag*
+ cscopetagorder	if_cscop.txt	/*cscopetagorder*
+ cscopeverbose	if_cscop.txt	/*cscopeverbose*
+@@ -5114,6 +5244,7 @@
+ cspc	if_cscop.txt	/*cspc*
+ csprg	if_cscop.txt	/*csprg*
+ csqf	if_cscop.txt	/*csqf*
++csre	if_cscop.txt	/*csre*
+ cst	if_cscop.txt	/*cst*
+ csto	if_cscop.txt	/*csto*
+ csverb	if_cscop.txt	/*csverb*
+@@ -5197,6 +5328,7 @@
+ develop-spell-suggestions	develop.txt	/*develop-spell-suggestions*
+ develop.txt	develop.txt	/*develop.txt*
+ development	develop.txt	/*development*
++dgn	motion.txt	/*dgn*
+ dh	change.txt	/*dh*
+ diB	motion.txt	/*diB*
+ diW	motion.txt	/*diW*
+@@ -5220,6 +5352,7 @@
+ digraph-arg	change.txt	/*digraph-arg*
+ digraph-encoding	digraph.txt	/*digraph-encoding*
+ digraph-table	digraph.txt	/*digraph-table*
++digraph-table-mbyte	digraph.txt	/*digraph-table-mbyte*
+ digraph.txt	digraph.txt	/*digraph.txt*
+ digraphs	digraph.txt	/*digraphs*
+ digraphs-changed	version6.txt	/*digraphs-changed*
+@@ -5390,6 +5523,11 @@
+ expr-env-expand	eval.txt	/*expr-env-expand*
+ expr-function	eval.txt	/*expr-function*
+ expr-is	eval.txt	/*expr-is*
++expr-is#	eval.txt	/*expr-is#*
++expr-is?	eval.txt	/*expr-is?*
++expr-isnot	eval.txt	/*expr-isnot*
++expr-isnot#	eval.txt	/*expr-isnot#*
++expr-isnot?	eval.txt	/*expr-isnot?*
+ expr-nesting	eval.txt	/*expr-nesting*
+ expr-number	eval.txt	/*expr-number*
+ expr-option	eval.txt	/*expr-option*
+@@ -5551,8 +5689,10 @@
+ ft-changelog-plugin	filetype.txt	/*ft-changelog-plugin*
+ ft-changelog-syntax	syntax.txt	/*ft-changelog-syntax*
+ ft-chill-syntax	syntax.txt	/*ft-chill-syntax*
++ft-clojure-indent	indent.txt	/*ft-clojure-indent*
+ ft-cobol-syntax	syntax.txt	/*ft-cobol-syntax*
+ ft-coldfusion-syntax	syntax.txt	/*ft-coldfusion-syntax*
++ft-cpp-syntax	syntax.txt	/*ft-cpp-syntax*
+ ft-csh-syntax	syntax.txt	/*ft-csh-syntax*
+ ft-css-omni	insert.txt	/*ft-css-omni*
+ ft-cweb-syntax	syntax.txt	/*ft-cweb-syntax*
+@@ -5623,8 +5763,10 @@
+ ft-python-indent	indent.txt	/*ft-python-indent*
+ ft-python-syntax	syntax.txt	/*ft-python-syntax*
+ ft-quake-syntax	syntax.txt	/*ft-quake-syntax*
++ft-r-indent	indent.txt	/*ft-r-indent*
+ ft-readline-syntax	syntax.txt	/*ft-readline-syntax*
+ ft-rexx-syntax	syntax.txt	/*ft-rexx-syntax*
++ft-rst-syntax	syntax.txt	/*ft-rst-syntax*
+ ft-ruby-omni	insert.txt	/*ft-ruby-omni*
+ ft-ruby-syntax	syntax.txt	/*ft-ruby-syntax*
+ ft-scheme-syntax	syntax.txt	/*ft-scheme-syntax*
+@@ -5688,7 +5830,9 @@
+ g-	undo.txt	/*g-*
+ g0	motion.txt	/*g0*
+ g8	various.txt	/*g8*
++g:	eval.txt	/*g:*
+ g:NetrwTopLvlMenu	pi_netrw.txt	/*g:NetrwTopLvlMenu*
++g:Netrw_corehandler	pi_netrw.txt	/*g:Netrw_corehandler*
+ g:Netrw_funcref	pi_netrw.txt	/*g:Netrw_funcref*
+ g:ada#Comment	ft_ada.txt	/*g:ada#Comment*
+ g:ada#Ctags_Kinds	ft_ada.txt	/*g:ada#Ctags_Kinds*
+@@ -5712,12 +5856,20 @@
+ g:ada_standard_types	ft_ada.txt	/*g:ada_standard_types*
+ g:ada_with_gnat_project_files	ft_ada.txt	/*g:ada_with_gnat_project_files*
+ g:ada_withuse_ordinary	ft_ada.txt	/*g:ada_withuse_ordinary*
++g:clojure_align_multiline_strings	indent.txt	/*g:clojure_align_multiline_strings*
++g:clojure_fuzzy_indent	indent.txt	/*g:clojure_fuzzy_indent*
++g:clojure_fuzzy_indent_blacklist	indent.txt	/*g:clojure_fuzzy_indent_blacklist*
++g:clojure_fuzzy_indent_patterns	indent.txt	/*g:clojure_fuzzy_indent_patterns*
++g:clojure_maxlines	indent.txt	/*g:clojure_maxlines*
++g:clojure_special_indent_words	indent.txt	/*g:clojure_special_indent_words*
+ g:colors_name	options.txt	/*g:colors_name*
+ g:decada	ft_ada.txt	/*g:decada*
+ g:decada.Error_Format	ft_ada.txt	/*g:decada.Error_Format*
+ g:decada.Make()	ft_ada.txt	/*g:decada.Make()*
+ g:decada.Make_Command	ft_ada.txt	/*g:decada.Make_Command*
+ g:decada.Unit_Name()	ft_ada.txt	/*g:decada.Unit_Name()*
++g:filetype_csh	syntax.txt	/*g:filetype_csh*
++g:filetype_r	syntax.txt	/*g:filetype_r*
+ g:gnat	ft_ada.txt	/*g:gnat*
+ g:gnat.Error_Format	ft_ada.txt	/*g:gnat.Error_Format*
+ g:gnat.Find()	ft_ada.txt	/*g:gnat.Find()*
+@@ -5730,9 +5882,31 @@
+ g:gnat.Set_Project_File()	ft_ada.txt	/*g:gnat.Set_Project_File()*
+ g:gnat.Tags()	ft_ada.txt	/*g:gnat.Tags()*
+ g:gnat.Tags_Command	ft_ada.txt	/*g:gnat.Tags_Command*
++g:html_charset_override	syntax.txt	/*g:html_charset_override*
++g:html_diff_one_file	syntax.txt	/*g:html_diff_one_file*
++g:html_dynamic_folds	syntax.txt	/*g:html_dynamic_folds*
++g:html_encoding_override	syntax.txt	/*g:html_encoding_override*
++g:html_end_line	syntax.txt	/*g:html_end_line*
++g:html_expand_tabs	syntax.txt	/*g:html_expand_tabs*
++g:html_hover_unfold	syntax.txt	/*g:html_hover_unfold*
++g:html_ignore_conceal	syntax.txt	/*g:html_ignore_conceal*
++g:html_ignore_folding	syntax.txt	/*g:html_ignore_folding*
++g:html_no_foldcolumn	syntax.txt	/*g:html_no_foldcolumn*
++g:html_no_invalid	syntax.txt	/*g:html_no_invalid*
++g:html_no_pre	syntax.txt	/*g:html_no_pre*
++g:html_no_progress	syntax.txt	/*g:html_no_progress*
++g:html_number_lines	syntax.txt	/*g:html_number_lines*
++g:html_pre_wrap	syntax.txt	/*g:html_pre_wrap*
++g:html_prevent_copy	syntax.txt	/*g:html_prevent_copy*
++g:html_start_line	syntax.txt	/*g:html_start_line*
++g:html_use_css	syntax.txt	/*g:html_use_css*
++g:html_use_encoding	syntax.txt	/*g:html_use_encoding*
++g:html_use_xhtml	syntax.txt	/*g:html_use_xhtml*
++g:html_whole_filler	syntax.txt	/*g:html_whole_filler*
+ g:netrw_alto	pi_netrw.txt	/*g:netrw_alto*
+ g:netrw_altv	pi_netrw.txt	/*g:netrw_altv*
+ g:netrw_banner	pi_netrw.txt	/*g:netrw_banner*
++g:netrw_bannerbackslash	pi_netrw.txt	/*g:netrw_bannerbackslash*
+ g:netrw_browse_split	pi_netrw.txt	/*g:netrw_browse_split*
+ g:netrw_browsex_viewer	pi_netrw.txt	/*g:netrw_browsex_viewer*
+ g:netrw_bufsettings	pi_netrw.txt	/*g:netrw_bufsettings*
+@@ -5740,10 +5914,13 @@
+ g:netrw_chgwin	pi_netrw.txt	/*g:netrw_chgwin*
+ g:netrw_compress	pi_netrw.txt	/*g:netrw_compress*
+ g:netrw_ctags	pi_netrw.txt	/*g:netrw_ctags*
+-g:netrw_cursorline	pi_netrw.txt	/*g:netrw_cursorline*
++g:netrw_cursor	pi_netrw.txt	/*g:netrw_cursor*
+ g:netrw_cygwin	pi_netrw.txt	/*g:netrw_cygwin*
+ g:netrw_dav_cmd	pi_netrw.txt	/*g:netrw_dav_cmd*
+ g:netrw_decompress	pi_netrw.txt	/*g:netrw_decompress*
++g:netrw_dirhistmax	pi_netrw.txt	/*g:netrw_dirhistmax*
++g:netrw_dynamic_maxfilenamelen	pi_netrw.txt	/*g:netrw_dynamic_maxfilenamelen*
++g:netrw_errorlvl	pi_netrw.txt	/*g:netrw_errorlvl*
+ g:netrw_fastbrowse	pi_netrw.txt	/*g:netrw_fastbrowse*
+ g:netrw_fetch_cmd	pi_netrw.txt	/*g:netrw_fetch_cmd*
+ g:netrw_fname_escape	pi_netrw.txt	/*g:netrw_fname_escape*
+@@ -5751,6 +5928,7 @@
+ g:netrw_ftp_browse_reject	pi_netrw.txt	/*g:netrw_ftp_browse_reject*
+ g:netrw_ftp_cmd	pi_netrw.txt	/*g:netrw_ftp_cmd*
+ g:netrw_ftp_list_cmd	pi_netrw.txt	/*g:netrw_ftp_list_cmd*
++g:netrw_ftp_options	pi_netrw.txt	/*g:netrw_ftp_options*
+ g:netrw_ftp_sizelist_cmd	pi_netrw.txt	/*g:netrw_ftp_sizelist_cmd*
+ g:netrw_ftp_timelist_cmd	pi_netrw.txt	/*g:netrw_ftp_timelist_cmd*
+ g:netrw_ftpextracmd	pi_netrw.txt	/*g:netrw_ftpextracmd*
+@@ -5765,17 +5943,19 @@
+ g:netrw_list_cmd	pi_netrw.txt	/*g:netrw_list_cmd*
+ g:netrw_list_hide	pi_netrw.txt	/*g:netrw_list_hide*
+ g:netrw_liststyle	pi_netrw.txt	/*g:netrw_liststyle*
+-g:netrw_local_mkdir	pi_netrw.txt	/*g:netrw_local_mkdir*
+-g:netrw_local_rmdir	pi_netrw.txt	/*g:netrw_local_rmdir*
+ g:netrw_localcopycmd	pi_netrw.txt	/*g:netrw_localcopycmd*
++g:netrw_localmkdir	pi_netrw.txt	/*g:netrw_localmkdir*
+ g:netrw_localmovecmd	pi_netrw.txt	/*g:netrw_localmovecmd*
++g:netrw_localrmdir	pi_netrw.txt	/*g:netrw_localrmdir*
+ g:netrw_maxfilenamelen	pi_netrw.txt	/*g:netrw_maxfilenamelen*
+ g:netrw_menu	pi_netrw.txt	/*g:netrw_menu*
+ g:netrw_mkdir_cmd	pi_netrw.txt	/*g:netrw_mkdir_cmd*
+ g:netrw_mousemaps	pi_netrw.txt	/*g:netrw_mousemaps*
++g:netrw_nobeval	pi_netrw.txt	/*g:netrw_nobeval*
+ g:netrw_nogx	pi_netrw.txt	/*g:netrw_nogx*
+ g:netrw_preview	pi_netrw.txt	/*g:netrw_preview*
+ g:netrw_rcp_cmd	pi_netrw.txt	/*g:netrw_rcp_cmd*
++g:netrw_remote_mkdir	pi_netrw.txt	/*g:netrw_remote_mkdir*
+ g:netrw_retmap	pi_netrw.txt	/*g:netrw_retmap*
+ g:netrw_rm_cmd	pi_netrw.txt	/*g:netrw_rm_cmd*
+ g:netrw_rmdir_cmd	pi_netrw.txt	/*g:netrw_rmdir_cmd*
+@@ -5803,6 +5983,8 @@
+ g:netrw_win95ftp	pi_netrw.txt	/*g:netrw_win95ftp*
+ g:netrw_winsize	pi_netrw.txt	/*g:netrw_winsize*
+ g:netrw_xstrlen	pi_netrw.txt	/*g:netrw_xstrlen*
++g:sh_isk	syntax.txt	/*g:sh_isk*
++g:sh_noisk	syntax.txt	/*g:sh_noisk*
+ g:syntax_on	syntax.txt	/*g:syntax_on*
+ g:tar_browseoptions	pi_tar.txt	/*g:tar_browseoptions*
+ g:tar_cmd	pi_tar.txt	/*g:tar_cmd*
+@@ -5813,6 +5995,9 @@
+ g:tar_secure	pi_tar.txt	/*g:tar_secure*
+ g:tar_writeoptions	pi_tar.txt	/*g:tar_writeoptions*
+ g:tex_conceal	syntax.txt	/*g:tex_conceal*
++g:tex_fast	syntax.txt	/*g:tex_fast*
++g:tex_flavor	filetype.txt	/*g:tex_flavor*
++g:tex_isk	syntax.txt	/*g:tex_isk*
+ g:var	eval.txt	/*g:var*
+ g:vimball_home	pi_vimball.txt	/*g:vimball_home*
+ g:vimball_mkdir	pi_vimball.txt	/*g:vimball_mkdir*
+@@ -5843,6 +6028,7 @@
+ gH	visual.txt	/*gH*
+ gI	insert.txt	/*gI*
+ gJ	change.txt	/*gJ*
++gN	visual.txt	/*gN*
+ gP	change.txt	/*gP*
+ gQ	intro.txt	/*gQ*
+ gR	change.txt	/*gR*
+@@ -5863,6 +6049,7 @@
+ ga	various.txt	/*ga*
+ garbagecollect()	eval.txt	/*garbagecollect()*
+ gd	pattern.txt	/*gd*
++gdb	debug.txt	/*gdb*
+ ge	motion.txt	/*ge*
+ get()	eval.txt	/*get()*
+ get-ms-debuggers	debug.txt	/*get-ms-debuggers*
+@@ -5926,6 +6113,7 @@
+ glvs-plugins	pi_getscript.txt	/*glvs-plugins*
+ glvs-usage	pi_getscript.txt	/*glvs-usage*
+ gm	motion.txt	/*gm*
++gn	visual.txt	/*gn*
+ gnat#Insert_Tags_Header()	ft_ada.txt	/*gnat#Insert_Tags_Header()*
+ gnat#New()	ft_ada.txt	/*gnat#New()*
+ gnat-xref	ft_ada.txt	/*gnat-xref*
+@@ -5952,6 +6140,7 @@
+ gu	change.txt	/*gu*
+ gugu	change.txt	/*gugu*
+ gui	gui.txt	/*gui*
++gui-IME	gui.txt	/*gui-IME*
+ gui-clipboard	gui_w32.txt	/*gui-clipboard*
+ gui-colors	syntax.txt	/*gui-colors*
+ gui-extras	gui.txt	/*gui-extras*
+@@ -6009,6 +6198,7 @@
+ gui_w32.txt	gui_w32.txt	/*gui_w32.txt*
+ gui_x11.txt	gui_x11.txt	/*gui_x11.txt*
+ guifontwide_gtk2	options.txt	/*guifontwide_gtk2*
++guifontwide_win_mbyte	options.txt	/*guifontwide_win_mbyte*
+ guioptions_a	options.txt	/*guioptions_a*
+ guu	change.txt	/*guu*
+ gv	visual.txt	/*gv*
+@@ -6031,6 +6221,7 @@
+ hangulin.txt	hangulin.txt	/*hangulin.txt*
+ has()	eval.txt	/*has()*
+ has-patch	eval.txt	/*has-patch*
++has-python	if_pyth.txt	/*has-python*
+ has_key()	eval.txt	/*has_key()*
+ haskell.vim	syntax.txt	/*haskell.vim*
+ haslocaldir()	eval.txt	/*haslocaldir()*
+@@ -6049,6 +6240,7 @@
+ helphelp	helphelp.txt	/*helphelp*
+ helphelp.txt	helphelp.txt	/*helphelp.txt*
+ hex-editing	tips.txt	/*hex-editing*
++hex-number	eval.txt	/*hex-number*
+ hidden-buffer	windows.txt	/*hidden-buffer*
+ hidden-changed	version5.txt	/*hidden-changed*
+ hidden-menus	gui.txt	/*hidden-menus*
+@@ -6090,6 +6282,7 @@
+ hl-CursorColumn	syntax.txt	/*hl-CursorColumn*
+ hl-CursorIM	syntax.txt	/*hl-CursorIM*
+ hl-CursorLine	syntax.txt	/*hl-CursorLine*
++hl-CursorLineNr	syntax.txt	/*hl-CursorLineNr*
+ hl-DiffAdd	syntax.txt	/*hl-DiffAdd*
+ hl-DiffChange	syntax.txt	/*hl-DiffChange*
+ hl-DiffDelete	syntax.txt	/*hl-DiffDelete*
+@@ -6159,6 +6352,7 @@
+ i<	motion.txt	/*i<*
+ i>	motion.txt	/*i>*
+ iB	motion.txt	/*iB*
++iBus	gui.txt	/*iBus*
+ iW	motion.txt	/*iW*
+ i[	motion.txt	/*i[*
+ i]	motion.txt	/*i]*
+@@ -6354,6 +6548,7 @@
+ intro	intro.txt	/*intro*
+ intro.txt	intro.txt	/*intro.txt*
+ inverse	syntax.txt	/*inverse*
++invert()	eval.txt	/*invert()*
+ ip	motion.txt	/*ip*
+ iquote	motion.txt	/*iquote*
+ is	motion.txt	/*is*
+@@ -6405,6 +6600,7 @@
+ keys()	eval.txt	/*keys()*
+ known-bugs	todo.txt	/*known-bugs*
+ l	motion.txt	/*l*
++l:	eval.txt	/*l:*
+ l:var	eval.txt	/*l:var*
+ lCursor	mbyte.txt	/*lCursor*
+ lace.vim	syntax.txt	/*lace.vim*
+@@ -6414,6 +6610,13 @@
+ last-position-jump	eval.txt	/*last-position-jump*
+ last_buffer_nr()	eval.txt	/*last_buffer_nr()*
+ lc_time-variable	eval.txt	/*lc_time-variable*
++lcs-conceal	options.txt	/*lcs-conceal*
++lcs-eol	options.txt	/*lcs-eol*
++lcs-extends	options.txt	/*lcs-extends*
++lcs-nbsp	options.txt	/*lcs-nbsp*
++lcs-precedes	options.txt	/*lcs-precedes*
++lcs-tab	options.txt	/*lcs-tab*
++lcs-trail	options.txt	/*lcs-trail*
+ left-right-motions	motion.txt	/*left-right-motions*
+ len()	eval.txt	/*len()*
+ less	various.txt	/*less*
+@@ -6464,11 +6667,18 @@
+ lua	if_lua.txt	/*lua*
+ lua-buffer	if_lua.txt	/*lua-buffer*
+ lua-commands	if_lua.txt	/*lua-commands*
++lua-dict	if_lua.txt	/*lua-dict*
++lua-eval	if_lua.txt	/*lua-eval*
++lua-list	if_lua.txt	/*lua-list*
++lua-luaeval	if_lua.txt	/*lua-luaeval*
+ lua-vim	if_lua.txt	/*lua-vim*
+ lua-window	if_lua.txt	/*lua-window*
+ lua.vim	syntax.txt	/*lua.vim*
++luaeval()	eval.txt	/*luaeval()*
+ m	motion.txt	/*m*
+ m'	motion.txt	/*m'*
++m<	motion.txt	/*m<*
++m>	motion.txt	/*m>*
+ m[	motion.txt	/*m[*
+ m]	motion.txt	/*m]*
+ m`	motion.txt	/*m`*
+@@ -6525,6 +6735,7 @@
+ mapmode-v	map.txt	/*mapmode-v*
+ mapmode-x	map.txt	/*mapmode-x*
+ mapping	map.txt	/*mapping*
++mapping-functions	usr_41.txt	/*mapping-functions*
+ mark	motion.txt	/*mark*
+ mark-functions	usr_41.txt	/*mark-functions*
+ mark-motions	motion.txt	/*mark-motions*
+@@ -6636,6 +6847,7 @@
+ mzscheme-commands	if_mzsch.txt	/*mzscheme-commands*
+ mzscheme-dynamic	if_mzsch.txt	/*mzscheme-dynamic*
+ mzscheme-examples	if_mzsch.txt	/*mzscheme-examples*
++mzscheme-funcref	if_mzsch.txt	/*mzscheme-funcref*
+ mzscheme-mzeval	if_mzsch.txt	/*mzscheme-mzeval*
+ mzscheme-sandbox	if_mzsch.txt	/*mzscheme-sandbox*
+ mzscheme-threads	if_mzsch.txt	/*mzscheme-threads*
+@@ -6680,8 +6892,10 @@
+ netrw-P	pi_netrw.txt	/*netrw-P*
+ netrw-R	pi_netrw.txt	/*netrw-R*
+ netrw-S	pi_netrw.txt	/*netrw-S*
+-netrw-T	pi_netrw.txt	/*netrw-T*
++netrw-Tb	pi_netrw.txt	/*netrw-Tb*
++netrw-Th	pi_netrw.txt	/*netrw-Th*
+ netrw-U	pi_netrw.txt	/*netrw-U*
++netrw-X	pi_netrw.txt	/*netrw-X*
+ netrw-a	pi_netrw.txt	/*netrw-a*
+ netrw-activate	pi_netrw.txt	/*netrw-activate*
+ netrw-bookmark	pi_netrw.txt	/*netrw-bookmark*
+@@ -6691,6 +6905,7 @@
+ netrw-browse-maps	pi_netrw.txt	/*netrw-browse-maps*
+ netrw-browser	pi_netrw.txt	/*netrw-browser*
+ netrw-browser-options	pi_netrw.txt	/*netrw-browser-options*
++netrw-browser-settings	pi_netrw.txt	/*netrw-browser-settings*
+ netrw-browser-var	pi_netrw.txt	/*netrw-browser-var*
+ netrw-browsing	pi_netrw.txt	/*netrw-browsing*
+ netrw-c	pi_netrw.txt	/*netrw-c*
+@@ -6700,6 +6915,7 @@
+ netrw-contents	pi_netrw.txt	/*netrw-contents*
+ netrw-copyright	pi_netrw.txt	/*netrw-copyright*
+ netrw-cr	pi_netrw.txt	/*netrw-cr*
++netrw-createfile	pi_netrw.txt	/*netrw-createfile*
+ netrw-credits	pi_netrw.txt	/*netrw-credits*
+ netrw-ctrl-h	pi_netrw.txt	/*netrw-ctrl-h*
+ netrw-ctrl-l	pi_netrw.txt	/*netrw-ctrl-l*
+@@ -6723,7 +6939,9 @@
+ netrw-ftp	pi_netrw.txt	/*netrw-ftp*
+ netrw-ftype	pi_netrw.txt	/*netrw-ftype*
+ netrw-gb	pi_netrw.txt	/*netrw-gb*
++netrw-gd	pi_netrw.txt	/*netrw-gd*
+ netrw-getftype	pi_netrw.txt	/*netrw-getftype*
++netrw-gf	pi_netrw.txt	/*netrw-gf*
+ netrw-gh	pi_netrw.txt	/*netrw-gh*
+ netrw-gp	pi_netrw.txt	/*netrw-gp*
+ netrw-gx	pi_netrw.txt	/*netrw-gx*
+@@ -6736,6 +6954,7 @@
+ netrw-horiz	pi_netrw.txt	/*netrw-horiz*
+ netrw-i	pi_netrw.txt	/*netrw-i*
+ netrw-incompatible	pi_netrw.txt	/*netrw-incompatible*
++netrw-internal-variables	pi_netrw.txt	/*netrw-internal-variables*
+ netrw-intro-browse	pi_netrw.txt	/*netrw-intro-browse*
+ netrw-leftmouse	pi_netrw.txt	/*netrw-leftmouse*
+ netrw-list	pi_netrw.txt	/*netrw-list*
+@@ -6743,6 +6962,7 @@
+ netrw-listhack	pi_netrw.txt	/*netrw-listhack*
+ netrw-login	pi_netrw.txt	/*netrw-login*
+ netrw-mB	pi_netrw.txt	/*netrw-mB*
++netrw-mF	pi_netrw.txt	/*netrw-mF*
+ netrw-mT	pi_netrw.txt	/*netrw-mT*
+ netrw-mb	pi_netrw.txt	/*netrw-mb*
+ netrw-mc	pi_netrw.txt	/*netrw-mc*
+@@ -6776,6 +6996,8 @@
+ netrw-p11	pi_netrw.txt	/*netrw-p11*
+ netrw-p12	pi_netrw.txt	/*netrw-p12*
+ netrw-p13	pi_netrw.txt	/*netrw-p13*
++netrw-p14	pi_netrw.txt	/*netrw-p14*
++netrw-p15	pi_netrw.txt	/*netrw-p15*
+ netrw-p2	pi_netrw.txt	/*netrw-p2*
+ netrw-p3	pi_netrw.txt	/*netrw-p3*
+ netrw-p4	pi_netrw.txt	/*netrw-p4*
+@@ -6795,6 +7017,7 @@
+ netrw-pscp	pi_netrw.txt	/*netrw-pscp*
+ netrw-psftp	pi_netrw.txt	/*netrw-psftp*
+ netrw-putty	pi_netrw.txt	/*netrw-putty*
++netrw-qF	pi_netrw.txt	/*netrw-qF*
+ netrw-qb	pi_netrw.txt	/*netrw-qb*
+ netrw-qf	pi_netrw.txt	/*netrw-qf*
+ netrw-quickcom	pi_netrw.txt	/*netrw-quickcom*
+@@ -6811,8 +7034,10 @@
+ netrw-rightmouse	pi_netrw.txt	/*netrw-rightmouse*
+ netrw-s	pi_netrw.txt	/*netrw-s*
+ netrw-settings	pi_netrw.txt	/*netrw-settings*
++netrw-settings-window	pi_netrw.txt	/*netrw-settings-window*
+ netrw-sexplore	pi_netrw.txt	/*netrw-sexplore*
+ netrw-sort	pi_netrw.txt	/*netrw-sort*
++netrw-sort-sequence	pi_netrw.txt	/*netrw-sort-sequence*
+ netrw-sortsequence	pi_netrw.txt	/*netrw-sortsequence*
+ netrw-source	pi_netrw.txt	/*netrw-source*
+ netrw-ssh-hack	pi_netrw.txt	/*netrw-ssh-hack*
+@@ -6824,6 +7049,7 @@
+ netrw-t	pi_netrw.txt	/*netrw-t*
+ netrw-texplore	pi_netrw.txt	/*netrw-texplore*
+ netrw-todo	pi_netrw.txt	/*netrw-todo*
++netrw-trailingslash	pi_netrw.txt	/*netrw-trailingslash*
+ netrw-transparent	pi_netrw.txt	/*netrw-transparent*
+ netrw-u	pi_netrw.txt	/*netrw-u*
+ netrw-updir	pi_netrw.txt	/*netrw-updir*
+@@ -6833,6 +7059,8 @@
+ netrw-var	pi_netrw.txt	/*netrw-var*
+ netrw-variables	pi_netrw.txt	/*netrw-variables*
+ netrw-vexplore	pi_netrw.txt	/*netrw-vexplore*
++netrw-windows-netrc	pi_netrw.txt	/*netrw-windows-netrc*
++netrw-windows-s	pi_netrw.txt	/*netrw-windows-s*
+ netrw-write	pi_netrw.txt	/*netrw-write*
+ netrw-x	pi_netrw.txt	/*netrw-x*
+ netrw-xfer	pi_netrw.txt	/*netrw-xfer*
+@@ -6933,6 +7161,7 @@
+ notepad	gui_w32.txt	/*notepad*
+ nr2char()	eval.txt	/*nr2char()*
+ nroff.vim	syntax.txt	/*nroff.vim*
++number_relativenumber	options.txt	/*number_relativenumber*
+ numbered-function	eval.txt	/*numbered-function*
+ o	insert.txt	/*o*
+ o_CTRL-V	motion.txt	/*o_CTRL-V*
+@@ -6944,7 +7173,8 @@
+ obtaining-exted	netbeans.txt	/*obtaining-exted*
+ ocaml.vim	syntax.txt	/*ocaml.vim*
+ octal	eval.txt	/*octal*
+-octal-number	options.txt	/*octal-number*
++octal-nrformats	options.txt	/*octal-nrformats*
++octal-number	eval.txt	/*octal-number*
+ oldfiles-variable	eval.txt	/*oldfiles-variable*
+ ole-activation	if_ole.txt	/*ole-activation*
+ ole-eval	if_ole.txt	/*ole-eval*
+@@ -6964,9 +7194,12 @@
+ option-backslash	options.txt	/*option-backslash*
+ option-list	quickref.txt	/*option-list*
+ option-summary	options.txt	/*option-summary*
++option-window	options.txt	/*option-window*
+ options	options.txt	/*options*
+ options-changed	version5.txt	/*options-changed*
+ options.txt	options.txt	/*options.txt*
++optwin	options.txt	/*optwin*
++or()	eval.txt	/*or()*
+ oracle	ft_sql.txt	/*oracle*
+ os2	os_os2.txt	/*os2*
+ os2ansi	os_os2.txt	/*os2ansi*
+@@ -7112,9 +7345,18 @@
+ pumvisible()	eval.txt	/*pumvisible()*
+ put	change.txt	/*put*
+ put-Visual-mode	change.txt	/*put-Visual-mode*
++py3eval()	eval.txt	/*py3eval()*
++pyeval()	eval.txt	/*pyeval()*
+ python	if_pyth.txt	/*python*
++python-.locked	if_pyth.txt	/*python-.locked*
++python-Dictionary	if_pyth.txt	/*python-Dictionary*
++python-Function	if_pyth.txt	/*python-Function*
++python-List	if_pyth.txt	/*python-List*
++python-bindeval	if_pyth.txt	/*python-bindeval*
++python-bindeval-objects	if_pyth.txt	/*python-bindeval-objects*
+ python-buffer	if_pyth.txt	/*python-buffer*
+ python-buffers	if_pyth.txt	/*python-buffers*
++python-chdir	if_pyth.txt	/*python-chdir*
+ python-command	if_pyth.txt	/*python-command*
+ python-commands	if_pyth.txt	/*python-commands*
+ python-current	if_pyth.txt	/*python-current*
+@@ -7122,10 +7364,18 @@
+ python-error	if_pyth.txt	/*python-error*
+ python-eval	if_pyth.txt	/*python-eval*
+ python-examples	if_pyth.txt	/*python-examples*
++python-fchdir	if_pyth.txt	/*python-fchdir*
+ python-input	if_pyth.txt	/*python-input*
++python-options	if_pyth.txt	/*python-options*
+ python-output	if_pyth.txt	/*python-output*
++python-pyeval	if_pyth.txt	/*python-pyeval*
+ python-range	if_pyth.txt	/*python-range*
++python-strwidth	if_pyth.txt	/*python-strwidth*
++python-tabpage	if_pyth.txt	/*python-tabpage*
++python-tabpages	if_pyth.txt	/*python-tabpages*
++python-vars	if_pyth.txt	/*python-vars*
+ python-vim	if_pyth.txt	/*python-vim*
++python-vvars	if_pyth.txt	/*python-vvars*
+ python-window	if_pyth.txt	/*python-window*
+ python-windows	if_pyth.txt	/*python-windows*
+ python.vim	syntax.txt	/*python.vim*
+@@ -7246,19 +7496,9 @@
+ rileft	rileft.txt	/*rileft*
+ rileft.txt	rileft.txt	/*rileft.txt*
+ riscos	os_risc.txt	/*riscos*
+-riscos-commandline	os_risc.txt	/*riscos-commandline*
+-riscos-filetypes	os_risc.txt	/*riscos-filetypes*
+-riscos-gui	os_risc.txt	/*riscos-gui*
+-riscos-interrupt	os_risc.txt	/*riscos-interrupt*
+-riscos-locations	os_risc.txt	/*riscos-locations*
+-riscos-memory	os_risc.txt	/*riscos-memory*
+-riscos-munging	os_risc.txt	/*riscos-munging*
+-riscos-porting	os_risc.txt	/*riscos-porting*
+-riscos-remote	os_risc.txt	/*riscos-remote*
+-riscos-shell	os_risc.txt	/*riscos-shell*
+-riscos-temp-files	os_risc.txt	/*riscos-temp-files*
+ rot13	change.txt	/*rot13*
+ round()	eval.txt	/*round()*
++rst.vim	syntax.txt	/*rst.vim*
+ rsync	pi_netrw.txt	/*rsync*
+ ruby	if_ruby.txt	/*ruby*
+ ruby-buffer	if_ruby.txt	/*ruby-buffer*
+@@ -7310,6 +7550,8 @@
+ save-settings	starting.txt	/*save-settings*
+ scheme.vim	syntax.txt	/*scheme.vim*
+ scp	pi_netrw.txt	/*scp*
++screencol()	eval.txt	/*screencol()*
++screenrow()	eval.txt	/*screenrow()*
+ script	usr_41.txt	/*script*
+ script-here	if_perl.txt	/*script-here*
+ script-local	map.txt	/*script-local*
+@@ -7374,12 +7616,17 @@
+ setwinvar()	eval.txt	/*setwinvar()*
+ sftp	pi_netrw.txt	/*sftp*
+ sgml.vim	syntax.txt	/*sgml.vim*
++sgr-mouse	options.txt	/*sgr-mouse*
++sh-awk	syntax.txt	/*sh-awk*
++sh-embed	syntax.txt	/*sh-embed*
+ sh.vim	syntax.txt	/*sh.vim*
++sha256()	eval.txt	/*sha256()*
+ shell-window	tips.txt	/*shell-window*
+ shell_error-variable	eval.txt	/*shell_error-variable*
+ shellescape()	eval.txt	/*shellescape()*
+ shift	intro.txt	/*shift*
+ shift-left-right	change.txt	/*shift-left-right*
++shiftwidth()	eval.txt	/*shiftwidth()*
+ short-name-changed	version4.txt	/*short-name-changed*
+ showing-menus	gui.txt	/*showing-menus*
+ sign-commands	sign.txt	/*sign-commands*
+@@ -7641,6 +7888,7 @@
+ system-vimrc	starting.txt	/*system-vimrc*
+ s~	change.txt	/*s~*
+ t	motion.txt	/*t*
++t:	eval.txt	/*t:*
+ t:var	eval.txt	/*t:var*
+ t_#2	term.txt	/*t_#2*
+ t_#4	term.txt	/*t_#4*
+@@ -7785,6 +8033,7 @@
+ t_tp	version4.txt	/*t_tp*
+ t_ts	term.txt	/*t_ts*
+ t_ts_old	version4.txt	/*t_ts_old*
++t_u7	term.txt	/*t_u7*
+ t_ue	term.txt	/*t_ue*
+ t_undo	version4.txt	/*t_undo*
+ t_us	term.txt	/*t_us*
+@@ -7955,6 +8204,7 @@
+ try-nesting	eval.txt	/*try-nesting*
+ tutor	usr_01.txt	/*tutor*
+ twice	if_cscop.txt	/*twice*
++two-engines	pattern.txt	/*two-engines*
+ type()	eval.txt	/*type()*
+ type-mistakes	tips.txt	/*type-mistakes*
+ typecorr-settings	usr_41.txt	/*typecorr-settings*
+@@ -7982,6 +8232,7 @@
+ unlisted-buffer	windows.txt	/*unlisted-buffer*
+ up-down-motions	motion.txt	/*up-down-motions*
+ uppercase	change.txt	/*uppercase*
++urxvt-mouse	options.txt	/*urxvt-mouse*
+ use-cpo-save	usr_41.txt	/*use-cpo-save*
+ use-visual-cmds	version4.txt	/*use-visual-cmds*
+ useful-mappings	tips.txt	/*useful-mappings*
+@@ -8034,6 +8285,7 @@
+ utf-8-typing	mbyte.txt	/*utf-8-typing*
+ utf8	mbyte.txt	/*utf8*
+ v	visual.txt	/*v*
++v:	eval.txt	/*v:*
+ v:beval_bufnr	eval.txt	/*v:beval_bufnr*
+ v:beval_col	eval.txt	/*v:beval_col*
+ v:beval_lnum	eval.txt	/*v:beval_lnum*
+@@ -8089,6 +8341,7 @@
+ v:var	eval.txt	/*v:var*
+ v:version	eval.txt	/*v:version*
+ v:warningmsg	eval.txt	/*v:warningmsg*
++v:windowid	eval.txt	/*v:windowid*
+ v_!	change.txt	/*v_!*
+ v_$	visual.txt	/*v_$*
+ v_:	cmdline.txt	/*v_:*
+@@ -8156,11 +8409,13 @@
+ v_g?	change.txt	/*v_g?*
+ v_gF	editing.txt	/*v_gF*
+ v_gJ	change.txt	/*v_gJ*
++v_gN	visual.txt	/*v_gN*
+ v_gV	visual.txt	/*v_gV*
+ v_g]	tagsrch.txt	/*v_g]*
+ v_g_CTRL-G	editing.txt	/*v_g_CTRL-G*
+ v_g_CTRL-]	tagsrch.txt	/*v_g_CTRL-]*
+ v_gf	editing.txt	/*v_gf*
++v_gn	visual.txt	/*v_gn*
+ v_gq	change.txt	/*v_gq*
+ v_gv	visual.txt	/*v_gv*
+ v_gw	change.txt	/*v_gw*
+@@ -8263,13 +8518,27 @@
+ vimdiff	diff.txt	/*vimdiff*
+ vimfiles	options.txt	/*vimfiles*
+ viminfo	starting.txt	/*viminfo*
++viminfo-!	options.txt	/*viminfo-!*
++viminfo-%	options.txt	/*viminfo-%*
++viminfo-'	options.txt	/*viminfo-'*
++viminfo-/	options.txt	/*viminfo-\/*
++viminfo-:	options.txt	/*viminfo-:*
++viminfo-<	options.txt	/*viminfo-<*
++viminfo-@	options.txt	/*viminfo-@*
++viminfo-c	options.txt	/*viminfo-c*
+ viminfo-encoding	starting.txt	/*viminfo-encoding*
+ viminfo-errors	starting.txt	/*viminfo-errors*
++viminfo-f	options.txt	/*viminfo-f*
+ viminfo-file	starting.txt	/*viminfo-file*
+ viminfo-file-marks	starting.txt	/*viminfo-file-marks*
+ viminfo-file-name	starting.txt	/*viminfo-file-name*
++viminfo-h	options.txt	/*viminfo-h*
++viminfo-n	options.txt	/*viminfo-n*
++viminfo-quote	options.txt	/*viminfo-quote*
++viminfo-r	options.txt	/*viminfo-r*
+ viminfo-read	starting.txt	/*viminfo-read*
+ viminfo-read-write	starting.txt	/*viminfo-read-write*
++viminfo-s	options.txt	/*viminfo-s*
+ viminfo-write	starting.txt	/*viminfo-write*
+ vimrc	starting.txt	/*vimrc*
+ vimrc-filetype	usr_05.txt	/*vimrc-filetype*
+@@ -8309,6 +8578,8 @@
+ vt100-function-keys	term.txt	/*vt100-function-keys*
+ w	motion.txt	/*w*
+ w32-clientserver	remote.txt	/*w32-clientserver*
++w32-xpm-support	gui_w32.txt	/*w32-xpm-support*
++w:	eval.txt	/*w:*
+ w:current_syntax	syntax.txt	/*w:current_syntax*
+ w:quickfix_title	quickfix.txt	/*w:quickfix_title*
+ w:var	eval.txt	/*w:var*
+@@ -8317,6 +8588,7 @@
+ whitespace	pattern.txt	/*whitespace*
+ wildcard	editing.txt	/*wildcard*
+ wildcards	editing.txt	/*wildcards*
++wildmenumode()	eval.txt	/*wildmenumode()*
+ win16-!start	gui_w16.txt	/*win16-!start*
+ win16-clipboard	gui_w16.txt	/*win16-clipboard*
+ win16-colors	gui_w16.txt	/*win16-colors*
+@@ -8363,6 +8635,7 @@
+ window-size-functions	usr_41.txt	/*window-size-functions*
+ window-tag	windows.txt	/*window-tag*
+ window-variable	eval.txt	/*window-variable*
++windowid-variable	eval.txt	/*windowid-variable*
+ windows	windows.txt	/*windows*
+ windows-3.1	os_win32.txt	/*windows-3.1*
+ windows-intro	windows.txt	/*windows-intro*
+@@ -8395,6 +8668,7 @@
+ write-filetype-plugin	usr_41.txt	/*write-filetype-plugin*
+ write-library-script	usr_41.txt	/*write-library-script*
+ write-local-help	usr_41.txt	/*write-local-help*
++write-permissions	editing.txt	/*write-permissions*
+ write-plugin	usr_41.txt	/*write-plugin*
+ write-plugin-quickload	usr_41.txt	/*write-plugin-quickload*
+ write-quit	editing.txt	/*write-quit*
+@@ -8417,6 +8691,7 @@
+ xml-folding	syntax.txt	/*xml-folding*
+ xml-omni-datafile	insert.txt	/*xml-omni-datafile*
+ xml.vim	syntax.txt	/*xml.vim*
++xor()	eval.txt	/*xor()*
+ xpm.vim	syntax.txt	/*xpm.vim*
+ xterm-8-bit	term.txt	/*xterm-8-bit*
+ xterm-8bit	term.txt	/*xterm-8bit*
+diff -Naur vim73.orig/runtime/doc/tagsrch.txt vim73/runtime/doc/tagsrch.txt
+--- vim73.orig/runtime/doc/tagsrch.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/tagsrch.txt	2013-06-07 17:07:09.865647170 +0000
+@@ -1,4 +1,4 @@
+-*tagsrch.txt*   For Vim version 7.3.  Last change: 2009 Feb 18
++*tagsrch.txt*   For Vim version 7.3.  Last change: 2011 Oct 28
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -115,7 +115,7 @@
+ 
+ The output of ":tags" looks like this:
+ 
+-   # TO tag      FROM line in file/line
++   # TO tag      FROM line  in file/text
+    1  1 main		 1  harddisk2:text/vim/test
+  > 2  2 FuncA		58  i = FuncA(10);
+    3  1 FuncC	       357  harddisk2:text/vim/src/amiga.c
+@@ -135,7 +135,7 @@
+ deleting/inserting lines, unless this was done by another program (e.g.
+ another instance of Vim).
+ 
+-For the current file, the "file/line" column shows the text at the position.
++For the current file, the "file/text" column shows the text at the position.
+ An indent is removed and a long line is truncated to fit in the window.
+ 
+ You can jump to previously used tags with several commands.  Some examples:
+@@ -164,9 +164,9 @@
+ deleted.  This means that an old branch in the call graph is lost.  After the
+ commands explained above the tag stack will look like this:
+ 
+-   # TO tag	FROM line in file
+-   1 main	       1  harddisk2:text/vim/test
+-   2 FuncB	      59  harddisk2:text/vim/src/main.c
++   # TO tag	FROM line  in file/text
++   1  1 main		1  harddisk2:text/vim/test
++   2  1 FuncB	       59  harddisk2:text/vim/src/main.c
+ 
+ 							*E73*
+ When you try to use the tag stack while it doesn't contain anything you will
+@@ -770,12 +770,12 @@
+ 			{not in Vi}
+ 
+ 							*:dli* *:dlist*
+-:[range]dl[ist][!] [/]string[/]
++:[range]dli[st][!] [/]string[/]
+ 			Like "[D"  and "]D", but search in [range] lines
+ 			(default: whole file).
+ 			See |:search-args| for [/] and [!].  {not in Vi}
+ 			Note that ":dl" works like ":delete" with the "l"
+-			flag.
++			register.
+ 
+ 							*[_CTRL-D*
+ [ CTRL-D		Jump to the first macro definition that contains the
+diff -Naur vim73.orig/runtime/doc/term.txt vim73/runtime/doc/term.txt
+--- vim73.orig/runtime/doc/term.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/term.txt	2013-06-07 17:07:09.872313818 +0000
+@@ -1,4 +1,4 @@
+-*term.txt*      For Vim version 7.3.  Last change: 2009 Nov 05
++*term.txt*      For Vim version 7.3.  Last change: 2013 Mar 13
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -294,6 +294,8 @@
+ 		|termcap-cursor-shape|
+ 	t_RV	request terminal version string (for xterm)	*t_RV* *'t_RV'*
+ 		|xterm-8bit| |v:termresponse| |'ttymouse'| |xterm-codes|
++	t_u7	request cursor position (for xterm)		*t_u7* *'t_u7'*
++		see |'ambiwidth'|
+ 
+ KEY CODES
+ Note: Use the <> form if possible
+@@ -326,7 +328,7 @@
+ 	t_k8	<F8>		function key 8		*<F8>*	*t_k8* *'t_k8'*
+ 	t_k9	<F9>		function key 9		*<F9>*	*t_k9* *'t_k9'*
+ 	t_k;	<F10>		function key 10		*<F10>*	*t_k;* *'t_k;'*
+-	t_F1	<F11>		function key 11		*<F11>* *t_F1* *'t_F1'*
++	t_F1	<F11>		function key 11		*<F11>*	*t_F1* *'t_F1'*
+ 	t_F2	<F12>		function key 12		*<F12>*	*t_F2* *'t_F2'*
+ 	t_F3	<F13>		function key 13		*<F13>*	*t_F3* *'t_F3'*
+ 	t_F4	<F14>		function key 14		*<F14>*	*t_F4* *'t_F4'*
+@@ -356,9 +358,9 @@
+ 	t_kI	<Insert>	insert key			*t_kI* *'t_kI'*
+ 	t_kD	<Del>		delete key			*t_kD* *'t_kD'*
+ 	t_kb	<BS>		backspace key			*t_kb* *'t_kb'*
+-	t_kB	<S-Tab>		back-tab (shift-tab)  *<S-Tab>* *t_kB* *'t_kB'*
++	t_kB	<S-Tab>		back-tab (shift-tab)  *<S-Tab>*	*t_kB* *'t_kB'*
+ 	t_kh	<Home>		home key			*t_kh* *'t_kh'*
+-	t_#2	<S-Home>	shifted home key     *<S-Home>* *t_#2* *'t_#2'*
++	t_#2	<S-Home>	shifted home key     *<S-Home>*	*t_#2* *'t_#2'*
+ 		<xHome>		alternate home key		*<xHome>*
+ 	t_@7	<End>		end key				*t_@7* *'t_@7'*
+ 	t_*7	<S-End>		shifted end key	*<S-End>* *t_star7* *'t_star7'*
+@@ -371,8 +373,8 @@
+ 	t_K5	<kPageDown>	keypad page-down key		*t_K5* *'t_K5'*
+ 	t_K6	<kPlus>		keypad plus key	      *<kPlus>*	*t_K6* *'t_K6'*
+ 	t_K7	<kMinus>	keypad minus key     *<kMinus>*	*t_K7* *'t_K7'*
+-	t_K8	<kDivide>	keypad divide	    *<kDivide>* *t_K8* *'t_K8'*
+-	t_K9	<kMultiply>	keypad multiply   *<kMultiply>* *t_K9* *'t_K9'*
++	t_K8	<kDivide>	keypad divide	    *<kDivide>*	*t_K8* *'t_K8'*
++	t_K9	<kMultiply>	keypad multiply   *<kMultiply>*	*t_K9* *'t_K9'*
+ 	t_KA	<kEnter>	keypad enter key     *<kEnter>*	*t_KA* *'t_KA'*
+ 	t_KB	<kPoint>	keypad decimal point *<kPoint>*	*t_KB* *'t_KB'*
+ 	t_KC	<k0>		keypad 0		 *<k0>*	*t_KC* *'t_KC'*
+@@ -665,6 +667,7 @@
+ 							*xterm-copy-paste*
+ NOTE: In some (older) xterms, it's not possible to move the cursor past column
+ 95.  This is an xterm problem, not Vim's.  Get a newer xterm |color-xterm|.
++Now the limit is 223 columns.
+ 
+ Copy/paste in xterm with (current mode NOT included in 'mouse'):
+ 1. Press left mouse button on first letter of text, move mouse pointer to last
+diff -Naur vim73.orig/runtime/doc/todo.txt vim73/runtime/doc/todo.txt
+--- vim73.orig/runtime/doc/todo.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/todo.txt	2013-06-07 17:07:09.945646942 +0000
+@@ -1,4 +1,4 @@
+-*todo.txt*      For Vim version 7.3.  Last change: 2010 Aug 15
++*todo.txt*      For Vim version 7.3.  Last change: 2013 Jun 06
+ 
+ 
+ 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
+@@ -27,65 +27,759 @@
+ See |develop.txt| for development plans.  You can vote for which items should
+ be worked on, but only if you sponsor Vim development.  See |sponsor|.
+ 
++Issues can also be entered online: http://code.google.com/p/vim/issues/list
++Updates will be forwarded to the vim_dev maillist.  Issues entered there will
++not be repeated below, unless there is extra information.
++
+ 							*known-bugs*
+ -------------------- Known bugs and current work -----------------------
+ 
+-":find e" completion, editing a file in the Vim source directory, 'path' set
+-to "./proto", does not shorten ./proto/eval.pro, probably because of
+-./proto/ex_eval.pro.
++Make it possible to test the status line: add screenchar(col, row).
++Use screen_getbytes().
++Could also add screenattr(col, row), but value is unpredictable.
++Functions to read the actual contents of the screen, so that things like
++conceal can be tested. (Nazri Ramliy, 2013 Feb 18)
++
++function() does not work like before. (lilydjwg, 2013 Jun 4)
++I guess this is caused by patch 7.3.1058:
++"Call of funcref does not succeed in other script."
++
++--- Python interface
++
++Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
++
++Win32: The Python interface only works with one version of Python, selected at
++compile time.  Can this be made to work with version 2.1 and 2.2 dynamically?
++
++Python: Be able to define a Python function that can be called directly from
++Vim script.  Requires converting the arguments and return value, like with
++vim.bindeval().
++
++Python SystemExit exception is not handled properly.  Patch to catch the
++exception and give an error. (Yasuhiro Matsumoto)
++Does not work, tests fail.
++
++Python: crash in test 86 because of int/size_t mixup? (Jun Takimoto, 2013 Jun
++6)
++
++Add a $VIMRUNTIME/python and $VIMRUNTIME/python3 directories?
++
++--- runtime files
++
++Alternate html indent file by Andy Wokula, script 2075.
++
++Syntax file for protocol buffers. (Feng Xiao, 2013 May 9)
++Has an ugly copyright notice.
++Add statement that it does not conflict with Vim license.
++
++Patch for JavaScript syntax. (Kevin Locke, 2013 May 9)
++Claudio didn't respond yet.
++
++upstream_dat, usserver_log et al. syntax files. (Rob Owens, 2013 Jun 5)
++
++--- New regexp engine
++
++Does not work (yet) with NFA:
++- \%u, \%x, \%o, \%d followed by a composing character
++
++Don't call nfa_regmatch() recursively if the "out" state is not going to be
++added anyway.  In run log:
++    > Not adding state 6 to list 4. char -971: NFA_SKIP
++
++Profiling:
++    ./vim -s ~/vim/test/alsa.vim
++    ./vim -s ~/vim/test/todo.vim
++    ./vim -s ~/vim/test/loop.vim
++    ./vim -s ~/vim/test/xml.vim
++
++More test files from the src/pkg/regexp/testdata directory in the Go repo.
++
++It's very slow compared to the old engine...
++Performance tests:
++- ~/vim/text/FeiqCfg.xml (file from Netjune)
++- ~/vim/text/edl.svg  (also XML)
++- glts has five tests. (May 25)
++- ~/vim/test/veryslow.js  display last line (file from Daniel Fetchinson)
++- ~/vim/test/slowsearch
++- ~/vim/test/rgb.vim
++- search for  a.*e*exn  in the vim executable.  Go to last line to use
++  'hlsearch'.
++- Slow combination of folding and PHP syntax highlighting.  Script to
++  reproduce it.  Caused by "syntax sync fromstart" in combination with patch
++  7.2.274.  (Christian Brabandt, 2010 May 27) Generally, folding with
++  'foldmethod' set to "syntax" is slow.  Do profiling to find out why.
++- It does not use any of the optimizations, such as required start pattern.
++- When lists are empty in nfa_regmatch() and match is true, it keeps looping
++  without doing anything.
++
++BT engine: After \@> match and failing submatches are not cleared.
++See test64.
++
++--- bug fixes
++
++:wviminfo does not write old history entries. (Roland Eggner, 2013 Jun 5)
++Another message Jun 6.
++
++Patch to avoid wrong error message for 1.0[0]. (Yasuhiro Matsumoto, 2013 May
++1)
++
++Patch for if_lua. (Luis Carvalho, 2012 Aug 26, update Aug 29, another Aug 30,
++then Sep 1, reminder Oct 14)
++
++Patch for if_perl.  (Ike Devolder, May 27)
++
++Patch to check if 'foldexpr' sets did_emsg. (Christian Brabandt, 2013 Mar 20)
++
++Patch for 'backupcopy' default behavior for symlinks on Windows. (David Pope,
++2012 Mar 21, update Mar 31)
++With fix for memory leak: Ken Takata, 2012 Aug 24
++Another update Sep 24.
++Also patch from Joerg Bornemann, 2013 Apr 30.
++
++Undo problem: line not removed as expected when using setline() from Insert
++mode. (Israel Chauca, 2010 May 13, more in second msg)
++Break undo when CTRL-R = changes the text?  Or save more lines?
++Patch by Christian Brabandt, 2012 Nov 16.
++
++Do allow real tags above the !_TAG entries. Undo older patch. Issue 90.
++
++Matches might be highlighted correctly. Inefficient patch by Christian
++Brabandt, 2013 Feb 26.
++
++Patch to use bold/italic fonts when 'guifontewide' is set. (Ken Takata, 2013
++Mar 31)
++
++Problem with winfixheight and resizing. (Yukihiro Nakadaira, 2011 Sep 17)
++Patch Sep 18.
++
++Patch for IME problems. Remove hacking code for old IM. (Yukihiro Nakadaira,
++2012 Jul 20)
++
++Patch to fix finding toolbar bitmaps.  Issue 129.
++
++Combining characters are not used when executing a register with :@w.
++(William Fugh, 2013 Apr 5, more info from Ben Fritz)
++Patch by Christian Brabandt, 2013 Apr 6.  Second one.
++
++MS-Windows ACL support doesn't work well.  Patch from Ken Takata, 2012 Aug 29.
++Update Aug 31.
++Another patch for MingW, 2012 Dec 29.
++
++Bug in completion menu. (Olivier Teuliere, 2013 Feb 15)
++Patch by Christian Brabandt, Feb 16.
++
++Issue 134: pasting in visual selection in empty buffer.
++Patch by Christian Brabandt, 2013 May 22.
++
++Patch to fix "gn" on single character matches. (Christian Brabandt, 2013 Jun
++2)
++
++'cursorline' is drawn incorrectly in diff mode. Patch by Christian Brabandt,
++2012 Apr 2.
++
++When someone does a silly thing such as setting rows and columns to 65535,
++handle the out-of-memory and set them to sane values? (jimmywang, 2013 May 17)
++
++InsertEnter doesn't prevent the cursor from moving when it goes to another
++line.
++
++":diffoff" does not restore options from before starting diff mode.
++Patch by Christian Brabandt, 2013 May 26.
++
++Can't use multi-byte fill character in custom status line.
++Patch by Christian Wellenbrock, 2013 Jun 2.  Update Jun 3 (second one).
++
++Patch to fix glob() and globpath() with escaped special characters.
++(Adnan Zafar, 2013 Jun 2, tests Jun 3)
++
++--- slightly incompatible changes
++
++Patch to load ~/.vim/vimrc when ~/.vimrc isn't found. (Lech Lorens, 2013 Apr
++13)
++
++It's probably a good idea to make a negative value for 'sts' use the value of
++'sw'.  Patch by So8res, Oct 3 2012
++
++When a buffer-local mapping is used, but a global mapping starts with the same
++characters, Vim currently waits for the next typed character to find out if
++the global mapping matches.  It is probably better to let the local mapping
++win and not wait. (discussion with Andy Wokula, 2013 Jan 30)
++Patch by Michael Henry, 2013 Jan 30, update Feb 15.
++
++Patch to store absolute path for cscope. (Christian Brabandt, 2013 May 31)
++
++---- Fixes to be included before 7.4 above, less important stuff below ----
++
++Several syntax file match "^\s*" which may get underlined if that's in the
++highlight group.  Add a "\zs" after it?
++
++Go through more coverity reports.
++
++Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
++
++Checking runtime scripts: Thilo Six, 2012 Jun 6.
++
++GTK: problem with 'L' in 'guioptions' changing the window width.
++(Aaron Cornelius, 2012 Feb 6)
++
++Javascript file where indent gets stuck on: GalaxyMaster, 2012 May 3.
++
++The CompleteDone autocommand needs some info passed to it:
++- The word that was selected (empty if abandoned complete)
++- Type of completion: tag, omnifunc, user func.
++
++Using ":call foo#d.f()" doesn't autoload the "foo.vim" file.
++That is, calling a dictionary function on an autoloaded dict.
++Works OK for echo, just not for  ":call" and ":call call()". (Ted, 2011 Mar
++17)
++Patch by Christian Brabandt, 2013 Mar 23.
++Not 100% sure this is the right solution.
++
++Win32: When a directory name contains an exclamation mark, completion doesn't
++complete the contents of the directory.  No escaping for the "!"? (Jan
++Stocker, 2012 Jan 5)
++
++Patch to support expression argument to sort() instead of a function name.
++Yasuhiro Matsumoto, 2013 May 31.
++Or should we add a more general mechanism, like lambda functions?
++
++Problem caused by patch 7.3.638: window->open does not update window
++correctly. Issue 91.
++
++Patch to fix that 'cedit' is recognized after :normal. (Christian Brabandt,
++2013 Mar 19, later message)
++
++Patch to view coverage of the tests. (Nazri Ramliy, 2013 Feb 15)
++
++Patch to invert characters differently in GTK. (Yukihiro Nakadaira, 2013 May
++5)
++
++Bug with 'cursorline' in diff mode.  Line being scrolled into view gets
++highlighted as the cursor line.  (Alessandro Ivaldi, 2013 Jun 4)
++
++Patch to add the bufferlist() function. (Yegappan Lakshmanan, 2013 May 5)
++May 17: with winlist() and tabpagelist().
++May 19: with local variables.
++May 28: with options
++
++Patch to support 'u' in interactive substitute. (Christian Brabandt, 2012 Sep
++28)  With tests: Oct 9.
++
++Patch to allow setting w:quickfix_title via setqflist() and setloclist()
++functions. (Christian Brabandt, 2013 May 8, update May 21)
++Patch to add getlocstack() / setlocstack(). (Christian Brabandt, 2013 May 14)
++Second one. Update May 22.
++
++Patch to make fold updates much faster. (Christian Brabandt, 2012 Dec)
++
++Patch for IME handling, adds 'imactivatefunc' and 'imstatusfunc' option.
++(Yukihiro Nakadaira, 2012 Aug 16)
++Patch to improve IME handling. (Yasuhiro Matsumoto, 2012 Jul 18)
++
++Issue 54: document behavior of -complete, also expands arg.
++
++-   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
++    the two into a regex for searching. (Ned Konz)
++Patch by Christian Brabandt, 2013 Apr 20, unfinished.
++
++Bug: findfile("any", "http://;") returns http://any. (Andrew Pimlott, 2013 May
++7)  Not sure if that can be fixed, but when using "file://" it should be
++possible to check if the file exists.
++
++v:register is not directly reset to " after a delete command that specifies a
++register.  It is reset after the next command. (Steve Vermeulen, 2013 Mar 16)
++
++'ff' is wrong for one-line file without EOL. (Issue 77)
+ 
+-Problem with \NL in Ex script. (Ray Frish, 2010 Aug 10)
++Patch to set antialiasing style on Windows. (Ondrej Balaz, 2013 Mar 14)
++Needs a different check for CLEARTYPE_QUALITY.
++
++Issue 72: 'autochdir' causes problems for :vimgrep.
++
++In the ATTENTION message about an existing swap file, mention the name of the
++process that is running.  It might actually be some other program, e.g. after
++a reboot.
++
++MS-Windows: Crash opening very long file name starting with "\\".
++(Christian Brock, 2012 Jun 29)
++
++patch to add "combine" flag to  syntax commands. (so8res, 2012 Dec 6)
++
++Syntax update problem in one buffer opened in two windows, bottom window is
++not correctly updated. (Paul Harris, 2012 Feb 27)
++
++Patch to add assignments in cscope. (Uli Meis, Estabrooks, 2012 Sep 1)
++Alternate patch by Gary Johnson, Sep 4.
++
++Patch to add getsid(). (Tyru, 2011 Oct 2)  Do we want this?  Update Oct 4.
++Or use expand('<sid>')?
++
++Patch to make confirm() display colors. (Christian Brabandt, 2012 Nov 9)
++
++Patch to add functions for signs. (Christian Brabandt, 2013 Jan 27)
++
++Patch to use directX to draw text on Windows.  Adds the 'renderoptions'
++option.  (Taro Muraoka, 2013 Jan 25, update 2013 Apr 3, May 14)
++
++Patch to add 'completeselect' option.  Specifies how to select a candidate in
++insert completion. (Shougo, 2013 May 29)
++Update to add to existing 'completeopt'. 2013 May 30
++
++Problem with refresh:always in completion. (Tyler Wade, 2013 Mar 17)
++
++b:undo_ftplugin cannot call a script-local function. (Boris Danilov, 2013 Jan
++7)
++
++Patch for :tabcloseleft, after closing a tab go to left tab. (William Bowers,
++2012 Aug 4)
++
++Patch to improve equivalence classes in regexp patterns.
++(Christian Brabandt, 2013 Jan 16, update Jan 17)
++
++Patch with suggestions for starting.txt. (Tony Mechelynck, 2012 Oct 24)
++But use Gnome instead of GTK?
++
++Patch to make FocusGained and FocusLost work in modern terminals. (Hayaki
++Saito, 2013 Apr 24)
++
++Should be possible to enable/disable matchparen per window or buffer.
++Add a check for b:no_match_paren in Highlight_matching_Pair() (Marcin
++Szamotulski, 2012 Nov 8)
++
++Crash in autocmd that unloads buffers in a BufUnload event. (Andrew Pimlott,
++2012 Aug 11)  Disallow :new when BufUnload is being handled?
++
++Patch to add ":ldo" and ":cdo", execute commands over quickfix list and
++location list. (Yegappan Lakshmanan, 2013 Jun 2)
++
++MS-Windows resizing problems:
++- Windows window on screen positioning: Patch by Yukihiro Nakadaira, 2012 Jun
++  20.  Uses getWindowRect() instead of GetWindowPlacement()
++- Win32: When the taskbar is at the top of the screen creating the tabbar
++  causes the window to move unnecessarily. (William E. Skeith III, 2012 Jan
++  12) Patch: 2012 Jan 13  Needs more work (2012 Feb 2)
++
++'iminsert' global value set when using ":setlocal iminsert"? (Wu, 2012 Jun 23)
++
++Patch to append regexp to tag commands to make it possible to select one out
++of many matches. (Cody Cutler, 2013 Mar 28)
++
++Help for 'b:undo_indent'. (Thilo Six, 2012 May 28)
++Also question if examples are correct.
++
++It should be possible to make globpath() return a list instead of a string,
++like with glob(). (Greg Novack, 2012 Nov 2)
++
++The input map for CTRL-O in mswin.vim causes problems after CTRL-X CTRL-O.
++Suggestion for another map. (Philip Mat, 2012 Jun 18)
++But use "gi" instead of "a".  Or use CTRL-\ CTRL-O.
++
++Patch to support user name completion on MS-Windows. (Yasuhiro Matsumoto, 2012
++Aug 16)
++
++Have an option for spell checking to not mark any Chinese, Japanese or other
++double-width characters as error.  Or perhaps all characters above 256.
++(Bill Sun)  Helps a lot for mixed Asian and latin text.
++
++When there are no command line arguments ":next" and ":argu" give E163, which
++is confusing.  Should say "the argument list is empty".
++
++URXVT:
++- will get stuck if byte sequence does not contain the expected semicolon.
++- Use urxvt mouse support also in xterm.  Explanations:
++  http://www.midnight-commander.org/ticket/2662
++
++MS-Windows: test 17 fails.  Analysis by Michael Soyka, 2012 Nov 5.
++
++Patch to add tests for if_xcmdsrv.c., Jul 8, need some more work. (Brian Burns)
++New tests Jul 13.   Update Jul 17.  Discussion Jul 18.
++
++When running Vim in silent ex mode, an existing swapfile causes Vim to wait
++for a user action without a prompt. (Maarten Billemont, 2012 Feb 3)
++Do give the prompt? Quit with an error?
++
++Patch to list user digraphs. (Christian Brabandt, 2012 Apr 14)
++
++Patch for input method status. (Hirohito Higashi, 2012 Apr 18)
++
++Patch to use .png icons for the toolbar on MS-Windows. (Martin Gieseking, 2013
++Apr 18)
++
++Patch for has('unnamedplus') docs. (Tony Mechelynck, 2011 Sep 27)
++And one for gui_x11.txt.
++
++-   Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav
++    Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30)
++    Version for latest MacVim: Tobia Conforto, 2009 Nov 23
++    More recent version: https://retracile.net/wiki/VimBreakIndent
++    Posted to vim-dev by Taylor Hedberg, 2011 Nov 25
++    Update by Taylor Hedberg, 2013 May 30.
++
++":cd" doesn't work when current directory path contains "**".
++finddir() has the same problem.  (Yukihiro Nakadaira, 2012 Jan 10)
++Requires a rewrite of the file_file_in_path code.
++
++Problem with l: dictionary being locked in a function. (ZyX, 2011 Jul 21)
++
++Should use has("browsefilter") in ftplugins.  Requires patch 7.3.593.
++
++Update for vim2html.pl. (Tyru, 2013 Feb 22)
++
++Issue 48: foldopen error can't be caught by try/catch
++
++Patch to sort functions starting with '<' after others.  Omit dict functions,
++they can't be called. (Yasuhiro Matsumoto, 2011 Oct 11)
++
++Patch to pass list to or(), and() and xor(). (Yasuhiro Matsumoto, 2012 Feb 8)
++
++Patch to improve "it" and "at" text object matching. (Christian Brabandt, 2011
++Nov 20)
++
++Patch to improve GUI find/replace dialog. (Christian Brabandt, 2012 May 26)
++Update Jun 2.
++
++`] moves to character after insert, instead of the last inserted character.
++(Yukihiro Nakadaira, 2011 Dec 9)
++
++Plugin for Modeleasy. (Massimiliano Tripoli, 2011 Nov 29)
++
++BufWinLeave triggers too late when quitting last window in a tab page. (Lech
++Lorens, 2012 Feb 21)
++
++Patch for 'transparency' option. (Sergiu Dotenco, 2011 Sep 17)
++Only for MS-Windows.  No documentation.  Do we want this?
++
++Patch to support cursor shape in Cygwin console. (Ben bgold, 2011 Dec 27)
++
++Patch to support UTF-8 for Hangul. (Shawn Y.H. Kim, 2011 May 1)
++Needs more work.  Pinged 2012 Jan 4.
++
++Issue 64: when 'incsearch' is on can't paste LF on command line.
++
++On MS-Windows a temp dir with a & init causes system() to fail. (Ben Fritz,
++2012 Jun 19)
++
++'cursorline' is displayed too short when there are concealed characters and
++'list' is set.  (Dennis Preiser)
++Patch 7.3.116 was the wrong solution.
++Christian Brabandt has another incomplete patch. (2011 Jul 13)
++
++With concealed text mouse click doesn't put the cursor in the right position.
++(Herb Sitz)  Fix by Christian Brabandt, 2011 Jun 16.  Doesn't work properly,
++need to make the change in where RET_WIN_BUF_CHARTABSIZE() is called.
++
++Syntax region with 'concealends' and a 'cchar' value, 'conceallevel' set to 2,
++only one of the two ends gets the cchar displayed. (Brett Stahlman, 2010 Aug
++21, Ben Fritz, 2010 Sep 14)
++
++'cursorline' works on a text line only.  Add 'cursorscreenline' for
++highlighting the screen line. (Christian Brabandt, 2012 Mar 31)
++
++Win32: Patch to use task dialogs when available. (Sergiu Dotenco, 2011 Sep 17)
++New feature, requires testing.  Made some remarks.
++
++Win32: Patch for alpha-blended icons and toolbar height. (Sergiu Dotenco, 2011
++Sep 17)  Asked for feedback from others.
++
++Win32: Cannot cd into a directory that starts with a space. (Andy Wokula, 2012
++Jan 19)
++
++Win32: default for 'backupcopy' is wrong for a symbolic link. (mklink one
++two). (Benjamin Fritz, 2012 Mar 15)
++
++Need to escape $HOME on Windows?  (ZyX, 2011 Jul 21)
++
++"2" in 'formatopions' not working in comments. (Christian Corneliussen, 2011
++Oct 26)
++
++Bug in repeating Visual "u". (Lawrence Kesteloot, 2010 Dec 20)
++
++Using "p" in Visual mode while specifying the small delete register "-
++overwrites the register before it is put. (Marcin Szamotulski, 2012 Nov 23)
++
++With "unamedplus" in 'clipboard' pasting in Visual mode causes error for empty
++register. (Michael Seiwald, 2011 Jun 28)  I can't reproduce it.
++
++In GTK Gvim, setting 'lines' and 'columns' to 99999 causes a crash (Tony
++Mechelynck, 2011 Apr 25).  Can reproduce the crash sometimes:
++   gvim -N -u NONE --cmd 'set lines=99999 columns=99999'
++(gvim:25968): Gdk-WARNING **: Native Windows wider or taller than 65535 pixels are not supported
++The program 'gvim' received an X Window System error.
++This probably reflects a bug in the program.
++The error was 'RenderBadPicture (invalid Picture parameter)'.
++  (Details: serial 313 error_code 161 request_code 149 minor_code 8)
++  (Note to programmers: normally, X errors are reported asynchronously;
++   that is, you will receive the error a while after causing it.
++   To debug your program, run it with the --sync command line
++   option to change this behavior. You can then get a meaningful
++   backtrace from your debugger if you break on the gdk_x_error() function.)
++Check that number of pixels doesn't go above 65535?
++
++Windows keys not set properly on Windows 7?  (cncyber, 2010 Aug 26)
++
++When using a Vim server, a # in the path causes an error message.
++(Jeff Lanzarotta, 2011 Feb 17)
++
++Setting $HOME on MS-Windows is not very well documented.  Suggestion by Ben
++Fritz (2011 Oct 27).
+ 
+ Bug: E685 error for func_unref(). (ZyX, 2010 Aug 5)
+ 
+-CTRL-] on help tag |/[\n]| doesn't jump to the right place. (Tony Mechelynck,
+-2010 Aug 8)
++Bug: Windows 7 64 bit system freezes  when 'clipboard' set to "unnamed" and
++doing ":g/test/d".  Putting every delete on the clipboard? (Robert Chan, 2011
++Jun 17)
++
++When there is a ">" in a line that "gq" wraps to the start of the next line,
++then the following line will pick it up as a leader.  Should get the leader
++from the first line, not a wrapped line. (Matt Ackeret, 2012 Feb 27)
++
++Using ":break" or something else that stops executing commands inside a
++":finally" does not rethrow a previously uncaught exception. (ZyX, 2010 Oct
++15)
++
++Vim using lots of memory when joining lines. (John Little, 2010 Dec 3)
++
++Changes to manpage plugin. (Elias Toivanen, 2011 Jul 25)
++
++Patch to make "z=" work when 'spell' is off.  Does this have nasty side
++effects?  (Christian Brabandt, 2012 Aug 5)
++Would also need to do this for spellbadword() and spellsuggest().
++
++Patch for variable tabstops.
++
++On 64 bit MS-Windows "long" is only 32 bits, but we sometimes need to store a
++64 bits value.  Change all number options to use nropt_T and define it to the
++right type.
++
++string() can't parse back "inf" and "nan".  Fix documentation or fix code?
++(ZyX, 2010 Aug 23)
++
++Make 'formatprg' global-local. (Sung Pae)
++
++When doing "redir => s:foo" in a script and then "redir END" somewhere else
++(e.g. in a function) it can't find s:foo.
++
++When setqflist() uses a filename that triggers a BufReadCmd autocommand Vim
++doesn't jump to the correct line with :cfirst. (ZyX,  2011 Sep 18)
++
++7   Make "ga" show the digraph for a character, if it exists.
++Patch from Christian Brabandt, 2011 Aug 19.
+ 
+-":command Print echo 'print'" works, but ":Print" doesn't.  Builtin Print
+-should be overruled. (Aaron Thoma)
++maparg() does not show the <script> flag.  When temporarily changing a
++mapping, how to restore the script ID?
++
++Bug in try/catch: return with invalid compare throws error that isn't caught.
++(ZyX, 2011 Jan 26)
++
++When setting a local option value from the global value, add a script ID that
++indicates this, so that ":verbose set" can give a hint.  Check with options in
++the help file.
++
++After patch 7.3.097 still get E15. (Yukihiro Nakadaira, 2011 Jan 18)
++Also for another example (ZyX, 2011 Jan 24)
++
++Build problem with small features on Mac OS X 10.6. (Rainer, 2011 Jan 24)
++
++"0g@$" puts '] on last byte of multi-byte. (ZyX, 2011 Jan 22)
++
++Patch to support sorting on floating point number.  (Alex Jakushev, 2010 Oct
++30)
++
++Patch to addd TextDeletePost and TextYankPost events. (Philippe Vaucher, 2011
++May 24)  Update May 26.
++
++Patch for :tabrecently. (Hirokazu Yoshida, 2012 Jan 30)
++
++When a script contains "redir => s:foo" but doesn't end redirection, a
++following "redir" command gives an error for not being able to access s:foo.
++(ZyX, 2011 Mar 27)
++
++Problem with "syn sync gouphere". (Gustavo Niemeyer, 2011 Jan 27)
++
++Loading autoload script even when usage is inside "if 0". (Christian Brabandt,
++2010 Dec 18)
++
++With a filler line in diff mode, it isn't displayed in the column with line
++number, but it is in the sign column.  Doesn't look right. (ZyX 2011 Jun 5)
++Patch by Christian Brabandt, 2011 Jun 5.  Introduces new problems.
++
++8   Add a command to jump to the next character highlighted with "Error".
++Patch by Christian Brabandt, uses ]e [e ]t and [t. 2011 Aug 9.
++
++8   Add an event like CursorHold that is triggered repeatedly, not just once
++    after typing something.
++Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
++function that resets did_cursorhold.
++Patch by Christian Brabandt, 2011 May 6.
++
++7   Use "++--", "+++--" for different levels instead of "+---" "+----".
++Patch by Christian Brabandt, 2011 Jul 27.
++Update by Ben Fritz, with fix for TOhtml. (2011 Jul 30)
++
++9   Add %F to 'errorformat': file name without spaces.  Useful on Unix to
++    avoid matching something up to a time 11:22:33.
++Patch by Christian Brabandt, 2011 Jul 27.
++
++Patch to fix \%V item in regexp. (Christian Brabandt, 2010 Nov 8)
++Update Nov 19.  James Vega: still not right.  Christian: it's difficult.
++
++Patch to add up to 99 match groups. (Christian Brabandt, 2010 Dec 22)
++Also add named groups: \%{name}(re)  and \%{name}g
++
++In the sandbox it's not allowed to do many things, but it's possible to change
++or set variables.  Add a way to prevent variables from being changed in the
++sandbox?  E.g.: ":protect g:restore_settings".
+ 
+ GTK: drawing a double-width combining character over single-width characters
+ doesn't look right. (Dominique Pelle, 2010 Aug 8)
+ 
++GTK: tear-off menu does not work. (Kurt Sonnenmoser, 2010 Oct 25)
++
++Win32: tear-off menu does not work when menu language is German. (Markus
++Bossler, 2011 Mar 2)  Fixed by 7.3.095?
++
++Version of netbeans.c for use with MacVim. (Kazuki Sakamoto, 2010 Nov 18)
++
++7.3.014 changed how backslash at end of line works, but still get a NUL when
++there is one backslash. (Ray Frush, 2010 Nov 18)  What does the original ex
++do?
++
++Searching mixed with Visual mode doesn't redraw properly. (James Vega, 2010 Nov
++22)
++
++New esperanto spell file can't be processed. (Dominique Pelle, 2011 Jan 30)
++- move compflags to separate growarray?
++- instead of a regexp use a hashtable.  Expand '?', '*', '+'.  What would be
++  the maximum repeat for * and +?
++
++"L'Italie" noted as a spell error at start of the sentence. (Dominique Pelle,
++2011 Feb 27)
++
++Copy/paste between Vim and Google chrome doesn't work well for multi-byte
++characters. (Ben Haskell, 2010 Sep 17)
++When putting text in the cut buffer (when exiting) and conversion doesn't work
++properly, Prepend "ENC==={value of 'enc'}:" to the text and don't convert?
++Then it should at least work from Vim to Vim and in other applications it's
++clear why it doesn't work.
++Experimental patch by Christian Brabandt, 2012 Apr 19.
++
+ Editing a file with a ^M with 'ff' set to "mac", opening a help file, then the
+ ^M is displayed as ^J sometimes.  Getting 'ff' value from wrong window/buffer?
+ 
++'colorcolumn' has higher priority than hlsearch.  Should probably be the other
++way around. (Nazri Ramliy, 2013 Feb 19)
++
++When Vim is put in the background (SIGTSTP) and then gets a SIGHUP it doesn't
++exit.  It exists as soon as back in the foreground. (Stephen Liang, 2011 Jan
++9)  Caused by vim_handle_signal(SIGNAL_BLOCK); in ui.c.
++
++g` not working correctly when using :edit.  It works OK when editing a file on
++the command line. (Ingo Karkat, 2011 Jan 25)
++
++Since patch 7.2.46 Yankring plugin has become very slow, eventually make Vim
++crash? (Raiwil, 2010 Nov 17)
++
++Patch to add 'systemencoding', convert between 'encoding' and this for file
++names, shell commands and the like.  (Kikuchan, 2010 Oct 14)
++Assume the system converts between the actual encoding of the filesystem to
++the system encoding (usually utf-8).
++
++Patch to add GUI colors to the terminal, when it supports it. (ZyX, 2013 Jan
++26)
++
+ Problem producing tags file when hebrew.frx is present.  It has a BOM.
+ Results in E670. (Tony Mechelynck, 2010 May 2)
+ 
++'beval' option should be global-local.
++
++Ruby: ":ruby print $buffer.number" returns zero.
++
+ setpos() does not restore cursor position after :normal. (Tyru, 2010 Aug 11)
+ 
++7   The 'directory' option supports changing path separators to "%" to make
++    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
++    Patch by Christian Brabandt, 2010 Oct 21.
++
++getpos()/setpos() don't include curswant.  getpos() could return a fifth
++element.  setpos() could accept an optional fifth element.
++Patch by Christian Brabandt, 2010 Sep 6.  Check that new argument is optional
++and that it's documented.
++
++With "tw=55 fo+=a" typing space before ) doesn't work well. (Scott Mcdermott,
++2010 Oct 24)
++
++Patch to add random number generator. (Hong Xu, 2010 Nov 8, update Nov 10)
++Alternative from Christian Brabandt. (2010 Sep 19)
++
++Messages in message.txt are highlighted as examples.
++
++When using cp850 the NBSP (0xff) is not drawn correctly. (Brett Stahlman, 2010
++Oct 22)  'isprint' is set to "@,161-255".
++
+ Test 73 fails on MS-Windows when compiled with DJGPP and run twice.  How to
+ delete the Xfind directory?  Add an rmdir() function, just like we have
+ mkdir().
+ 
++":echo "\x85" =~# '[\u0085]'" returns 1 instead of 0. (ZyX, 2010 Oct 3)
++
+ 'cindent' not correct when 'list' is set. (Zdravi Korusef, 2010 Apr 15)
+ 
++C-indenting: A matching { in a comment is ignored, but intermediate { are not
++checked to be in a comment.  Implement FM_SKIPCOMM flag of findmatchlimit().
++Issue 46.
++
++When 'paste' is changed with 'pastetoggle', the ruler doesn't reflect this
++right away. (Samuel Ferencik, 2010 Dec 7)
++
++Mac with X11: clipboard doesn't work properly. (Raf, 2010 Aug 16)
++
++Using CompilerSet doesn't record where an option was set from.  E.g., in the
++gcc compiler plugin. (Gary Johnson, 2010 Dec 13)
++
+ ":helpgrep" does not put the cursor in the correct column when preceded by
+ accented character. (Tony Mechelynck, 2010 Apr 15)
+ 
++Don't call check_restricted() for histadd(), setbufvar(), settabvar(),
++setwinvar().
++
+ Echo starts in the wrong column:
+     while 1 | let s = input('A') | echo 'R' | endw
+ (Boyko Bantchev, 2010 Aug 9)
+ 
++Patch for GVimExt to show an icon. (Dominik Riebeling, 2010 Nov 7)
++
++When writing a file > 2Gbyte, the reported number of bytes is negative.
++(Antonio Colombo, 2010 Dec 18)
++
+ Patch: Let rare word highlighting overrule good word highlighting.
+-(Jakson A. Aquino, 2010 Jul 30)
++(Jakson A. Aquino, 2010 Jul 30, again 2011 Jul 2)
++
++When 'lines' is 25 and 'scrolloff' is 12, "j" scrolls zero or two lines
++instead of one. (Constantin Pan, 2010 Sep 10)
+ 
+-Patch to make more characters work in dialogs. (Yankwei Jia, 2010 Aug 4)
++Crash in setqflist(). (Benoit Mortgat, 2010 Nov 18)
+ 
+-":drop" does not respect 'autochdir'. (Peter Odding, 2010 Jul 24)
++Gui menu edit/paste in block mode insert only inserts in one line (Bjorn
++Winckler, 2011 May 11)
++Requires a map mode for Insert mode started from blockwise Visual mode.
++
++Writing nested List and Dict in viminfo gives error message and can't be read
++back. (Yukihiro Nakadaira, 2010 Nov 13)
++
++Can 'undolevels' be a buffer-local option?  Helps for making big changes in
++one file only, set 'ul' to -1 only for that buffer.
++Patch by Christian Brabandt, 2010 Dec 17.  Needs test.
+ 
+ Problem with cursor in the wrong column. (SungHyun Nam, 2010 Mar 11)
+ Additional info by Dominique Pelle. (also on 2010 Apr 10)
+ 
++CreateFile and CreateFileW are used without sharing, filewritable() fails when
++the file was already open (e.g. script is being sourced).  Add FILE_SHARE_READ|
++FILE_SHARE_WRITE in mch_access()? (Phillippe Vaucher, 2010 Nov 2)
++
+ Is ~/bin (literally) in $PATH supposed to work?  (Paul, 2010 March 29)
+ Looks like only bash can do it. (Yakov Lerner)
+ 
+-8   Add an event like CursorHold that is triggered repeatedly, not just once
+-    after typing something.
+-Need for CursorHold that retriggers.  Use a key that doesn't do anything, or a
+-function that resets did_cursorhold.
+-
+ Cscope "cs add" stopped working somewhat before 7.2.438. (Gary Johnson, 2010
+ Jun 29)  Caused by 7.2.433?
+ 
+@@ -106,59 +800,66 @@
+ Requires configure check for localtime().
+ Use format year-month-day hr:min:sec.
+ 
++Patch to add "combine" to :syntax, combines highlight attributes. (Nate
++Soares, 2012 Dec 3)
++
++Patch to make ":hi link" also take arguments. (Nate Soares, 2012 Dec 4)
++
+ Shell not recognized properly if it ends in "csh -f". (James Vega, 2009 Nov 3)
+ Find tail?  Might have a / in argument.  Find space?  Might have space in
+ path.
+ 
++Test 51 fails when language set to German. (Marco, 2011 Jan 9)
++Dominique can't reproduce it.
++
++'ambiwidth' should be global-local.
++
+ ":function f(x) keepjumps" creates a function where every command is executed
+ like it has ":keepjumps" before it.
+ 
+ Coverity: ask someone to create new user: Dominique.
+ Check if there are new reported defects: http://scan.coverity.com/rung2.html
+ 
+-When setting 'undofile' while the file is already loaded, but unchanged, try
+-to read the undo file.  Requires computing a checksum of the text. (Andy
+-Wokula)
++Patch to support :undo absolute jump to file save number. (Christian Brabandt,
++2010 Nov 5)
++
++Patch to use 'foldnextmax' also for "marker" foldmethod. (Arnaud Lacombe, 2011
++Jan 7)
+ 
+ Bug with 'incsearch' going to wrong line. (Wolfram Kresse, 2009 Aug 17)
+ Only with "vim -u NONE".
+ 
+ Problem with editing file in binary mode. (Ingo Krabbe, 2009 Oct 8)
+ 
++With 'wildmode' set to "longest:full,full" and pressing Tab once the first
++entry in wildmenu is highlighted, that shouldn't happen. (Yuki Watanabe, 2011
++Feb 12)
++
+ Display error when 'tabline' that includes a file name with double-width
+ characters. (2010 Aug 14, bootleq)
+ 
+ Problem with stop directory in findfile(). (Adam Simpkins, 2009 Aug 26)
+ 
+-Undo problem: line not removed as expected when using setline() from Insert
+-mode. (Israel Chauca, 2010 May 13, more in second msg)
+-Break undo when CTRL-R = changes the text?  Or save more lines?
++Using ']' as the end of a range in a pattern requires double escaping:
++     /[@-\\]]  (Andy Wokula, 2011 Jun 28)
+ 
+-Change to C syntax folding to make it work much faster, but a bit less
+-reliable. (Lech Lorens, 2009 Nov 9)  Enable with an option?
+-Most time is spent in in_id_list().
+-
+-Slow combination of folding and PHP syntax highlighting.  Script to reproduce
+-it.  Caused by "syntax sync fromstart" in combination with patch 7.2.274.
+-(Christian Brabandt, 2010 May 27)
++Syntax priority problem. (Charles Campbell, 2011 Sep 15)
+ 
+ When completion inserts the first match, it may trigger the line to be folded.
+ Disable updating folds while completion is active? (Peter Odding, 2010 Jun 9)
+ 
+-In command line window ":close" doesn't work properly. (Tony Mechelynck, 2009
+-Jun 1)
+-
+ When a:base in 'completefunc' starts with a number it's passed as a number,
+ not a string. (Sean Ma)  Need to add flag to call_func_retlist() to force a
+ string value.
+ 
+-There is no command line completion for ":lmap".
+-
+ Invalid read error in Farsi mode. (Dominique Pelle, 2009 Aug 2)
+ 
+ For running gvim on an USB stick: avoid the OLE registration.  Use a command
+ line argument -noregister.
+ 
++When using an expression in 'statusline' leading white space sometimes goes
++missing (but not always). (ZyX, 2010 Nov 1)
++
+ When a mapping exists both for insert mode and lang-insert mode, the last one
+ doesn't work. (Tyru, 2010 May 6)  Or is this intended?
+ 
+@@ -175,11 +876,18 @@
+ Patch for displaying 0x200c and 0x200d. (Ali Gholami Rudi, 2009 May 6)
+ Probably needs a bit of work.
+ 
+-List of encoding aliases. (Takao Fujiware, 2009 Jul 18)
++List of encoding aliases. (Takao Fujiwara, 2009 Jul 18)
+ Are they all OK?  Update Jul 22.
+ 
++Win32: Improved Makefile for MSVC. (Leonardo Valeri Manera, 2010 Aug 18)
++
+ Win32: Expanding 'path' runs into a maximum size limit. (bgold12, 2009 Nov 15)
+ 
++Win32: Patch for enabling quick edit mode in console. (Craig Barkhouse, 2010
++Sep 1)
++
++Win32: Patch for using .png files for icons. (Charles Peacech, 2012 Feb 5)
++
+ Putting a Visual block while 'visualedit' is "all" does not leave the cursor
+ on the first character. (John Beckett, 2010 Aug 7)
+ 
+@@ -198,7 +906,7 @@
+ When starting Vim with "gvim -f -u non_existent_file > foo.txt" there are a
+ few control characters in the output. (Dale Wiles, 2009 May 28)
+ 
+-'cmdwinheight is only used in last window when 'winheight' is a large value.
++'cmdwinheight' is only used in last window when 'winheight' is a large value.
+ (Tony Mechelynck, 2009 Apr 15)
+ 
+ Status line containing winnr() isn't updated when splitting the window (Clark
+@@ -228,10 +936,6 @@
+ 'delcombine' does not work for the command line. (Tony Mechelynck, 2009 Jul
+ 20)
+ 
+-Unwanted file name escaping: ":echo input('file:' , '', 'file')"
+-And use file name completion on a file with spaces. (Frederic Hardy, 2009 Mar
+-23)
+-
+ Don't load macmap.vim on startup, turn it into a plugin. (Ron Aaron,
+ 2009 Apr 7)  Reminder Apr 14.
+ 
+@@ -267,9 +971,9 @@
+ 
+ Diff mode out of sync. (Gary Johnson, 2010 Aug 4)
+ 
+-Win32: A --remote command that has a directory name starting with a ( doesn't
+-work, the backslash is removed, assuming that it escapes the (. (Valery
+-Kondakoff, 2009 May 13)
++Support a 'systemencoding' option (for Unix).  It specifies the encoding of
++file names. (Kikuchan, 2010 Oct 5).  Useful on a latin1 or double-byte Asian
++system when 'encoding' is "utf-8".
+ 
+ Win32 GUI: Changing manifest helps for dpi changes (Joe Castro, 2009 Mar 27)
+ 
+@@ -288,25 +992,23 @@
+ Directory wrong in session file, caused by ":lcd" in BufEnter autocommand.
+ (Felix Kater, 2009 Mar 3)
+ 
+-maparg() doesn't return the flags, such as <buffer>, <script>, <silent>.
+-These are needed to save and restore a mapping.
+-Also: the rhs string is not always correct. (Hari Krishna Dara, 2009 Sept 29)
++Session file generates error upon loading, cause by --remote-silent-tab.
++(7tommm (ytommm) 2010 Nov 24)
+ 
+ Using ~ works OK on 'a' with composing char, but not on 0x0418  with composing
+ char 0x0301. (Tony Mechelynck, 2009 Mar 4)
+ 
++A function on a dictionary is not profiled. (Zyx, 2010 Dec 25)
++
+ Inconsistent: starting with $LANG set to es_ES.utf-8 gives Spanish
+ messages, even though locale is not supported.  But ":lang messages
+ es_ES.utf-8" gives an error and doesn't switch messages. (Dominique Pelle,
+ 2009 Jan 26)
+ 
+-When $HOME contains special characters, sich as a comma, escape them when used
++When $HOME contains special characters, such as a comma, escape them when used
+ in an option. (Michael Hordijk, 2009 May 5)
+ Turn "esc" argument of expand_env_esc() into string of chars to be escaped.
+ 
+-Can 'undolevels' be a buffer-local option?  Helps for making big changes in
+-one file only, set 'ul' to -1 only for that buffer.
+-
+ Should make 'ignorecase' global-local, so that it makes sense setting it from
+ a modeline.
+ 
+@@ -325,8 +1027,10 @@
+ Completion for ":buf" doesn't work properly on Win32 when 'shellslash' is off.
+ (Henrik Ohman, 2009, Jan 29)
+ 
+-Allow patches to add something to version.c, like with an official patch, so
+-that :version output shows which patches have been applied.
++shellescape() depends on 'shellshash' for quoting.  That doesn't work when
++'shellslash' is set but using cmd.exe. (Ben Fritz)
++Use a different option or let it depend on whether 'shell' looks like a
++unix-like shell?
+ 
+ Bug: in Ex mode (after "Q") backslash before line break, when yanked into a
+ register and executed, results in <Nul>: instead of line break.
+@@ -354,6 +1058,7 @@
+ Also: swap files are in ~/tmp/  One has relative file name ".mozilla/...".
+ 
+ Add v:motion_force. (Kana Natsuno, 2008 Dec 6)
++Maybe call it v:motiontype.
+ 
+ Runtime files for Clojure. (Toralf Wittner, 2008 Jun 25)
+ 
+@@ -374,11 +1079,6 @@
+ option only for when jumping to another buffer, not when the command argument
+ is executed.
+ 
+-Crash with dragn-n-drop of file combined with netrw (Marius Gedminas, 2008 Jun
+-11)  I can't reproduce it.  It's probably caused by a handle_drop() call
+-in combination with autocommands that invoke a ":redraw" command.
+-Another valgrind output Jun 30.
+-
+ ":pedit %" with a BufReadPre autocommand causes the cursor to move to the
+ first line. (Ingo Karkat, 2008 Jul 1)  Ian Kelling is working on this.
+ 
+@@ -403,27 +1103,29 @@
+ Unfinished patch by Ian Kelling, 2008 Jul 11.  Followup Jul 14, need to have
+ another look at it.
+ 
+-Patch for c.vim and cpp.vim syntax files. (Chung-chieh Shan, 2008 Nov 26)
+-
+ c.vim: XXX in a comment is colored yellow, but not when it's after "#if 0".
+ (Ilya Dogolazky, 2009 Aug 7)
+ 
+-Win32:  ":dis +" shows nothing, but "+p does insert text.  Problem with "* and
+-"+ being the same thing?
+-
+ You can type ":w ++bad=x fname", but the ++bad argument is ignored.  Give an
+ error message?  Or is this easy to implement?  (Nathan Stratton Treadway, 2008
+ Aug 20)  This is in ucs2bytes(), search for 0xBF.  Using the ++bad argument is
+ at the other match for 0xBF.
+ 
+-Fix for matchparen HL doesn't work.  beep.
+-
+ When adding "-complete=file" to a user command this also changes how the
+ argument is processed for <f-args>. (Ivan Tishchenko, 2008 Aug 19)
+ 
+ Win32: associating a type with Vim doesn't take care of space after a
+ backslash? (Robert Vibrant, 2008 Jun 5)
+ 
++Win32: bold font doesn't work when 'guifontwide' has been set. (Yue Wu, 2010
++Aug 23)
++
++When 'rightleft' is set, cursorcolumn isn't highlighted after the end of a
++line.  It's also wrong in folds. (Dominique Pelle, 2010 Aug 21)
++
++Using an insert mode expression mapping, cursor is not in the expected
++position. (ZyX, 2010 Aug 29)
++
+ After using <Tab> for command line completion after ":ta blah" and getting E33
+ (no tags file), further editing the command to e.g., ":echo 'blah'", the
+ command is not executed.  Fix by Ian Kelling?
+@@ -438,9 +1140,6 @@
+ either.  Matt Wozniski:  nv_at() calls do_execreg() which uses
+ put_in_typebuf().  Char mapped twice?
+ 
+-8   Some file systems are case-sensitive, some are not.  Turn
+-    CASE_INSENSITIVE_FILENAME into an option, at least for completion.
+-
+ Despite adding save_subexpr() this still doesn't work properly:
+ Regexp: matchlist('12a4aaa', '^\(.\{-}\)\(\%5c\@<=a\+\)\(.\+\)\?')
+ Returns ['12a4', 'aaa', '4aaa'], should be ['12a4', 'aaa', '']
+@@ -457,11 +1156,15 @@
+ an alternate solution, also for src/ex_getln.c.
+ This also fails when the file or directory name contains "%". (Thoml, 2008
+ July 7)
++Using --remote-silent while the current directory has a # in the name does not
++work, the # needs to be escaped. (Tramblay Bruno, 2012 Sep 15)
+ 
+-The str2special() function doesn't handle multi-byte characters properly.
+-Patch from Vladimir Vichniakov, 2007 Apr 24.
+-Should clean up the whole function.  Also allow modifiers like <S-Char-32>?
+-find_special_key() also has this problem.
++When using remote-silent the -R flag is not passed on. (Axel Bender, 2012 May
++31)
++
++Win32: A --remote command that has a directory name starting with a ( doesn't
++work, the backslash is removed, assuming that it escapes the (. (Valery
++Kondakoff, 2009 May 13)
+ 
+ Problem with 'langmap' being used on the rhs of a mapping. (Nikolai Weibull,
+ 2008 May 14)
+@@ -476,6 +1179,14 @@
+ Unexpectedly inserting a double quote. (Anton Woellert, 2008 Mar 23)
+ Works OK when 'cmdheight' is 2.
+ 
++8   Use a mechanism similar to omni completion to figure out the kind of tab
++    for CTRL-] and jump to the appropriate matching tag (if there are
++    several).
++    Alternative: be able to define a function that takes the tag name and uses
++    taglist() to find the right location.  With indication of using CTRL-] so
++    that the context can be taken into account. (Robert Webb)
++Patch by Christian Brabandt, 2013 May 31.
++
+ Test54 should not use shell commands.  Make it portable.
+ 
+ The utf class table is missing some entries:
+@@ -496,6 +1207,9 @@
+ Mac: After a ":vsplit" the left scrollbar doesn't appear until 'columns' is
+ changed or the window is resized.
+ 
++GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
++the window isn't redrawn properly, see two vertical bars.
++
+ Mac: Patch for configure: remove arch from ruby link args. (Knezevic, 2008
+ Mar 5)  Alternative: Kazuki Sakamoto, Mar 7.
+ 
+@@ -513,6 +1227,12 @@
+ result in no matches.  Convert chars to lower case? (Erik Wognsen, 2009 Apr
+ 16)
+ 
++Searching for composing char works, but not when inside []. (ZyX, Benjamin R.
++Haskell, 2010 Aug 24)
++
++Fail to edit file after failed register access.  Error flag remains set?
++(Lech Lorens, 2010 Aug 30)
++
+ Patch for redo register. (Ben Schmidt, 2007 Oct 19)
+ Await response to question to make the register writable.
+ 
+@@ -527,27 +1247,13 @@
+ 
+ try/catch not working for argument of return. (Matt Wozniski, 2008 Sep 15)
+ 
+-Recognize and ignore BOM in error file. (Aleksey Baibarin)
++try/catch not working when inside a for loop. (ZyX, 2011 Jan 25)
+ 
+ ":tab help" always opens a new tab, while ":help" re-uses an existing window.
+ Would be more consistent when an existing tab is re-used. (Tony Mechelynck)
+ 
+-":tab drop filename" doesn't work nicely when "filename" is open in a window
+-in another tab. (Tony Mechelynck, 2009 Feb 13)
+-
+ Add ":nofold".  Range will apply without expanding to closed fold.
+ 
+-Including NFA regexp code:
+-Use "\%#= to set the engine: 0 = automatic, 1 = backtracking, 2 = new.
+-Useful in tests.
+-Performance tests:
+-- ~/vim/test/veryslow.js (file from Daniel Fetchinson)
+-- ~/vim/test/slowsearch
+-- ~/vim/test/rgb.vim
+-- ~/vim/text/FeiqCfg.xml (file from Netjune)
+-- search for  a.*e*exn  in the vim executable.  Go to last line to use
+-  'hlsearch'.
+-
+ Using Aap to build Vim: add remarks about how to set personal preferences.
+ Example on http://www.calmar.ws/tmp/aap.html
+ 
+@@ -560,6 +1266,7 @@
+ 
+ Can't easily close the help window, like ":pc" closes the preview window and
+ ":ccl" closes the quickfix window.  Add ":hclose". (Chris Gaal)
++Patch for :helpclose, Christian Brabandt, 2010 Sep 6.
+ 
+ When 'diffopt' has "context:0" a single deleted line causes two folds to merge
+ and mess up syncing. (Austin Jennings, 2008 Jan 31)
+@@ -569,6 +1276,9 @@
+ 
+ New PHP syntax file, use it? (Peter Hodge)
+ 
++":echoe" in catch block stops processing, while this doesn't happen outside of
++a catch block. (ZyX, 2011 Jun 2)
++
+ 'foldcolumn' in modeline applied to wrong window when using a session. (Teemu
+ Likonen, March 19)
+ 
+@@ -589,6 +1299,9 @@
+ 
+ More AmigaOS4 patches. (Peter Bengtsson, Nov 9)
+ 
++Amiga patches with vbcc. (Adrien Destugues, 2010 Aug 30)
++http://pulkomandy.ath.cx/drop/vim73_vbcc_amiga.diff
++
+ Insert mode completion: When editing the text and pressing CTRL-N again goes
+ back to originally completed text, edited text is gone. (Peng Yu, 2008 Jul 24)
+ Suggestion by Ben Schmidt, 2008 Aug 6.
+@@ -615,9 +1328,6 @@
+ size and then redraw the text, skipping the characters under the popup menu.
+ This should avoid flicker.  Other solution by A.Politz, 2007 Aug 22.
+ 
+-When the popup menu is close to the edge of the window it is truncated.  Patch
+-to anchor the popup menu in a different way. (James Vega, 2008 Jul 30)
+-
+ Windows 98: pasting from the clipboard with text from another application has
+ a trailing NUL.  (Joachim Hofmann)  Perhaps the length specified for CF_TEXT
+ isn't right?
+@@ -643,6 +1353,9 @@
+ However, for backwards compatibility escaping might be necessary.  Check if
+ the user put quotes around the expanded item?
+ 
++A throw in a function causes missing an endif below the call. (Spiros
++Bousbouras, 2011 May 16)
++
+ Error E324 can be given when a cron script has wiped out our temp directory.
+ Give a clear error message about this (and tell them not to wipe out /tmp).
+ 
+@@ -662,15 +1375,32 @@
+ moves the cursor instead of deleting. (Chris Kaiser, 2007 Sep 25)
+ 
+ Patch to use Modern UI 2.0 for the Nsis installer. (Guopeng Wen, 2010 Jul 30)
++Latest version: 2011 May 18
++8   Windows install with NSIS: make it possible to do a silent install, see
++    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
++    Version from Guopeng Wen that does this (2010 Dec 27)
++Alternative: MSI installer: https://github.com/petrkle/vim-msi/
++
++Windows installer should install 32-bit version of right-click handler also on
++64-bit systems. (Brian Cunningham, 2011 Dec 28)
++
++Windows installer could add a "open in new tab of existing Vim" menu entry.
++Gvimext: patch to add "Edit with single Vim &tabbed" menu entry.
++Just have two choices, always using one Vim and selecting between using an
++argument list or opening each file in a separate tab.
++(Erik Falor, 2008 May 21, 2008 Jun 26)
++
++Windows installer: licence text should not use indent, causes bad word wrap.
++(Benjamin Fritz, 2010 Aug 16)
++
++Dos uninstal may delete vim.bat from the wrong directory (e.g., when someone
++makes his own wrapper).  Add a magic string with the version number to the
++.bat file and check for it in the uninstaller.  E.g.
++          # uninstall key: vim7.3*
+ 
+ Changes for Win32 makefile. (Mike Williams, 2007 Jan 22, Alexei Alexandrov,
+ 2007 Feb 8)
+ 
+-Patch for Win32 clipboard under Cygwin. (Frodak Baksik, Feb 15)
+-    Sutcliffe says it works well.
+-    Update 2007 May 22 for Vim 7.1
+-    Update 2008 Dec 2008 for Vim 7.2.xx (Sharonov)
+-
+ Win32: Can't complete shell command names.  Why is setting xp_context in
+ set_one_cmd_context() inside #ifndef BACKSLASH_IN_FILENAME?
+ 
+@@ -708,19 +1438,6 @@
+ 
+ Win32: patch for fullscreen mode. (Liushaolin, 2008 April 17)
+ 
+-Win32: When 'shell' is cmd.exe this command fails:
+-	echo system('"c:/path/echo.exe" "foo bar"')
+-Should we set the default for 'shellxquote' to a double quote, when 'shell'
+-contains "cmd" in the tail?  (Benjamin Fritz, 2008 Oct 13)
+-Also set 'shellcmdflag' to include /s.
+-
+-Win32: When there is 4 Gbyte of memory mch_avail_mem() doesn't work properly.
+-Unfinished patch by Jelle Geerts, 2008 Aug 24.
+-Let mch_avail_mem() return Kbyte instead?
+-
+-Win32: With two monitors, gvim partly on both, and adding/removing a scrollbar
+-Vim resizes and moves to one of the monitors. (Chris Monkiewicz, 2008 Oct)
+-
+ Win32: When 'shell' is bash shellescape() doesn't always do the right thing.
+ Depends on 'shellslash', 'shellquote' and 'shellxquote', but shellescape()
+ only takes 'shellslash' into account.
+@@ -744,9 +1461,6 @@
+ Feature request: Command to go to previous tab, like what CTRL-W p does for
+ windows. (Adam George)
+ 
+-When using input() in a loop and then ":echo" the display column isn't right.
+-(Benjamin Fritz, 2008 Aug 28)  Patch by Ben Schmidt, 2008 Sep 2.
+-
+ F1 - F4 in an xterm produce a different escape sequence when used with a
+ modifier key.  Need to catch three different sequences.  Use K_ZF1, like
+ K_ZHOME? (Dickey, 2007 Dec 2)
+@@ -772,9 +1486,6 @@
+ 
+ ":helpgrep" should use the directory from 'helpfile'.
+ 
+-Patch to dynamically load Python on Solaris. (Danek Duvall, 2009 Feb 16)
+-Needs more work.
+-
+ The need_fileinfo flag is messy.  Instead make the message right away and put
+ it in keep_msg?
+ 
+@@ -802,9 +1513,6 @@
+ input() completion should not insert a backslash to escape a space in a file
+ name?
+ 
+-getpos()/setpos() don't include curswant.  getpos() could return a fifth
+-element.  setpos() could accept an optional fifth element.
+-
+ Ruby completion is insecure.  Can this be fixed?
+ 
+ When 'backupskip' is set from $TEMP special characters need to be escaped.
+@@ -819,9 +1527,6 @@
+ 2008 Nov 10)  call netbeans_file_closed() at the end of buf_freeall(), or in
+ all places where buf_freeall() is called?
+ 
+-":python os.chdir('/tmp')" makes short buffer names invalid. (Xavier de Gaye)
+-Check directory and call shorten_fnames()?
+-
+ aucmd_prepbuf() should also use a window in another tab page.
+ 
+ When unloading a buffer in a BufHidden autocommand the hidden flag is reset?
+@@ -830,12 +1535,6 @@
+ Substituting an area with a line break with almost the same area does change
+ the Visual area.  Can this be fixed? (James Vega, 2006 Sept 15)
+ 
+-Windows installer could add a "open in new tab of existing Vim" menu entry.
+-Gvimext: patch to add "Edit with single Vim &tabbed" menu entry.
+-Just have two choices, always using one Vim and selecting between using an
+-argument list or opening each file in a separate tab.
+-(Erik Falor, 2008 May 21, 2008 Jun 26)
+-
+ GUI: When combining fg en bg make sure they are not equal.
+ 
+ Spell checking: Add a way to specify punctuation characters.  Add the
+@@ -863,9 +1562,6 @@
+ 
+ Mac: Using gvim: netrw window disappears. (Nick Lo, 2006 Jun 21)
+ 
+-Mac: OS/X 10.4 with Python 2.5 installed: configure finds an extra argument
+-that breaks the build. (Brian Victor, 2008 Sep 1)
+-
+ Add an option to specify the character to use when a double-width character is
+ moved to the next line.  Default '>', set to a space to blank it out.  Check
+ that char is single width when it's set (compare with 'listchars').
+@@ -916,6 +1612,12 @@
+ tree stops unexpectedly when using ":cd " and entering a directory that
+ doesn't contain other directories.
+ 
++Setting 'background' resets the Normal background color:
++   highlight Normal ctermbg=DarkGray
++   set background=dark
++This is undesired, 'background' is supposed to tell Vim what the background
++color is, not reset it.
++
+ Linux distributions:
+ - Suggest compiling xterm with --enable-tcap-query, so that nr of colors is
+   known to Vim.  88 colors instead of 16 works better.  See ":help
+@@ -984,6 +1686,9 @@
+ Cursor line at bottom of window instead of halfway after saving view and
+ restoring.  Only with 'nowrap'. (Robert Webb, 2008 Aug 25)
+ 
++Netrw has trouble executing autocommands only for a directory.  Add <isdir>
++and <notisdir> to autocommand patterns?  Also <isfile>?
++
+ Add command modifier that skips wildcard expansion, so that you don't need to
+ put backslashes before special chars, only for white space.
+ 
+@@ -993,17 +1698,14 @@
+ In mswin.vim: Instead of mapping <C-V> for Insert mode in a complicated way,
+ can it be done like ":imap <C-V> <MiddleMouse>" without negative side effects?
+ 
+-Win32: When the GUI tab pages line is displayed Vim jumps from the secondary
+-to the primary monitor. (Afton Lewis, 2007 Mar 9)  Old resizing problem?
+-
+ GTK: when the Tab pages bar appears or disappears while the window is
+ maximized the window is no longer maximized.  Patch that has some idea but
+ doesn't work from Geoffrey Antos, 2008 May 5.
+ Also: the window may no longer fit on the screen, thus the command line is not
+ visible.
+ 
+-GTK: when setting 'columns' in a startup script and doing ":vertical diffsplit"
+-the window isn't redrawn properly, see two vertical bars.
++When right after "vim file", "M" then CTRL-W v the windows are scrolled
++differently and unexpectedly.  Caused by patch 7.2.398?
+ 
+ The magic clipboard format "VimClipboard2" appears in several places.  Should
+ be only one.
+@@ -1033,6 +1735,9 @@
+ name is something like "c:\path\foo.txt:bar", includes a colon.  (Alex
+ Jakushev, 2008 Feb 1)
+ 
++printf() uses the field width in bytes. Can it be made character width,
++perhaps with a modifier?  What does Posix say?
++
+ Small problem displaying diff filler line when opening windows with a script.
+ (David Luyer, 2007 Mar 1 ~/Mail/oldmail/mool/in.15872 )
+ 
+@@ -1066,9 +1771,6 @@
+ VERASE key is Delete.  Set VERASE to Backspace? (patch by Stephane Chazelas,
+ 2007 Oct 16)
+ 
+-When entering a C /* comment, after typing <Enter> for 70 times the indent
+-disappears. (Vincent Beffara, 2008 Jul 3)
+-
+ TermResponse autocommand isn't always triggered when using vimdiff. (Aron
+ Griffis, 2007 Sep 19)
+ 
+@@ -1101,6 +1803,12 @@
+ 2010 Jun 30)
+ 
+ 
++At next release:
++-   Build a huge version by default.
++-   Improve plugin handling: Automatic updates, handle dependencies?
++    E.g. Vundle: https://github.com/gmarik/vundle
++
++
+ More patches:
+ -   Another patch for Javascript indenting. (Hari Kumar, 2010 Jul 11)
+     Needs a few tests.
+@@ -1138,7 +1846,6 @@
+     more friendly for the Vim distribution.
+     New version received 2008 Jan 6.
+     No maintenance in two years...
+--   Patch to access screen under Python. (Marko Mahni, 2010 Jul 18)
+ -   Patch to open dropped files in new tabs. (Michael Trim, 2010 Aug 3)
+ 
+ Awaiting updated patches:
+@@ -1161,9 +1868,6 @@
+ 7   Completion of network shares, patch by Yasuhiro Matsumoto.
+     Update 2004 Sep 6.
+     How does this work?  Missing comments.
+--   Patch for 'breakindent' option: repeat indent for wrapped line. (Vaclav
+-    Smilauer, 2004 Sep 13, fix Oct 31, update 2007 May 30)
+-    Version for latest MacVim: Tobia Conforto, 2009 Nov 23
+ 8   Add a few more command names to the menus.  Patch from Jiri Brezina
+     (28 feb 2002).  Will mess the translations...
+ 7   ATTENTION dialog choices are more logical when "Delete it' appears
+@@ -1319,9 +2023,6 @@
+     the wide functions.
+ 8   On Windows 98 the unicows library is needed to support functions with UCS2
+     file names.  Can we load unicows.dll dynamically?
+-8   When the primary monitor is below or right of the secondary monitor and
+-    Vim is on the secondary monitor it will often move to the primary monitor.
+-    Window position coordinates can be negative. (James Harvey)
+ 8   The -P argument doesn't work very well with many MDI applications.
+     The last argument of CreateWindowEx() should be used, see MSDN docs.
+     Tutorial: http://win32assembly.online.fr/tut32.html
+@@ -1385,8 +2086,6 @@
+     scroll?
+ 7   Scrollbar width doesn't change when selecting other windows appearance.
+     Also background color of Toolbar and rectangle below vert. scrollbar.
+-7   "!start /min cmd" should run in a minimized window, instead of using
+-    "/min" as the command name. (Rogall)
+ 6   Drawing text transparently doesn't seem to work (when drawing part cursor).
+ 8   CTRL key doesn't always work in combination with ALT key.  It does work
+     for function keys, not for alphabetic characters.  Perhaps this is because
+@@ -1433,6 +2132,8 @@
+ 
+ 
+ Athena GUI:
++9   The first event for any button in the menu or toolbar appears to get lost.
++    The second click on a menu does work.
+ 9   When dragging the scrollbar thumb very fast, focus is only obtained in
+     the scrollbar itself.  And the thumb is no longer updated when moving
+     through files.
+@@ -1452,7 +2153,7 @@
+ 
+ 
+ Motif GUI:
+--   gui_mch_browsedir() is missing.
++-   gui_mch_browsedir() is missing, browsedir() doesn't work nicely.
+ 7   Use XmStringCreateLocalized() instead of XmStringCreateSimple()?
+     David Harrison says it's OK (it exists in Motif 1.2).
+ 8   Lesstif: When deleting a menu that's torn off, the torn off menu becomes
+@@ -1483,7 +2184,7 @@
+ 8   When translating menus ignore the part after the Tab, the shortcut.  So
+     that the same menu item with a different shortcut (e.g., for the Mac) are
+     still translated.
+-8   Add menu separators for Amiga, RISCOS.
++8   Add menu separators for Amiga.
+ 8   Add way to specify the file filter for the browse dialog.  At least for
+     browse().
+ 8   Add dialog for search/replace to other GUIs?  Tk has something for this,
+@@ -1662,33 +2363,17 @@
+ 
+ Macintosh:
+ -   GUI: gui_mch_browsedir() is missing.
+-7   Patch to add 'transparency' option.  Disadvantage: it's slow. (Eckehard
+-    Berns, 2004 May 9) http://ecki.to/vim/TransBack-2004-05-09.diff
+-    Needs more work.  Add when someone really wants it.
+ 7   Loading the Perl library only works on OS/X 10.2 or 10.3, never on both.
+     Load the Perl library dynamically see Python sources file dynload_mac
+     (Jack)
+     dynamic linking: http://developer.apple.com/technotes/tn2002/tn2064.html
+-8   Inputting Unicode characters does not work in the terminal.  They appear
+-    to arrive as upper and lower bytes. (David Brown, 2004 April 17)
+-8   Typing Unicode characters doesn't work at all in the GUI.
+ 8   inputdialog() doesn't resize when giving more text lines. (David Fishburn,
+     2006 Sept 28)
+-9   Problems in Carbon version for OS X: (Benji Fisher)
+-    - keyboard shortcuts in the menus get lost.
+-8   The Vim/About menu doesn't work.
+-8   ":gui" doesn't fork.  Enabling the code in gui.c to fork causes a SEGV.
+ 8   Define vim_mkdir() for Macintosh.
+ 8   Define mch_writable() for Macintosh.
+ 9   When DiskLock is running, using a swap file causes a crash.  Appears to be
+     a problem with writing a file that starts with a dot. (Giacalone)
+-9   On G3 Mac, OS version 8, control strip causes characters messed up when
+-    scrolling (CTRL-L cleans it up). (Benji Fisher)
+-9   On G3 Mac, OS version 8, variable-speed scrolling doesn't work, after two
+-    seconds of scrolling the screen freezes. (Benji Fisher)
+ 9   In mac_expandpath() check that handling of backslashes is done properly.
+-8   Standard Mac shortcuts are missing.  (Amerige)
+-8   Handling of non-fixed width fonts is wrong. (Amerige)
+ 
+ 
+ "Small" problems:
+@@ -1712,8 +2397,6 @@
+     the :catch commands are always executed, also when the file is edited
+     normally.  Should reset did_emsg and undo side effects.  Also make sure
+     the ATTENTION message shows up.  Servatius Brandt works on this.
+-8   ":g//" gives "Pattern not found error" with E486.  Should not use the
+-    error number, it's not a regular error message.
+ 7   Vimtutor leaves escape sequence in terminal. This is the xterm response to
+     requesting the version number.  (Yasuhiro Matsumoto)
+ 8   When redirecting and using ":silent" the current column for displaying and
+@@ -1741,11 +2424,8 @@
+ 8   When doing Insert mode completion a mapping cannot recursively call
+     edit(), because the completion information is global.  Put everything in
+     an allocated structure?
+-6   Python: ":py raw_input('prompt')" doesn't work. (Manu Hack)
+ 8   Command line completion: buffers "foo.txt" and "../b/foo.txt", completing
+     ":buf foo<Tab>" doesn't find the second one. (George V. Reilly)
+-7   Output for ":scriptnames" and ":breaklist" should shorten the file names:
+-    use "~/" when possible.
+ 7   mb_off2cells() doesn't work correctly on the tail byte of a double-byte
+     character. (Yasuhiro Matsumoto)  It should return 1 when used on a tail
+     byte, like for utf-8.  Store second byte of double-byte in ScreenLines2[]
+@@ -1772,13 +2452,6 @@
+     works.
+ 8   A very long message in confirm() can't be quit.  Make this possible with
+     CTRL-C.
+-7   clip_x11_own_selection() uses CurrentTime, that is not allowed.  VNC X
+-    server has a problem with this.  (Mark Waggoner) Remembering the timestamp
+-    of events isn't always possible.  We don't get them in an xterm.  GTK
+-    doesn't obtain the selection again when the timestamp differs, thus it
+-    won't work for GTK anyway.
+-8   When the clipboard isn't supported: ":yank*" gives a confusing error
+-    message.  Specifically mention that the register name is invalid.
+ 8   "gf" always excludes trailing punctuation characters.  file_name_in_line()
+     is currently fixed to use ".,:;!".  Add an option to make this
+     configurable?
+@@ -1792,8 +2465,6 @@
+     is a multi-byte character.
+ 8   When appending to a file and 'patchmode' isn't empty, a backup file is
+     always written, even when the original file already exists.
+-7   When using "daw" on the last word in a file and this is a single letter,
+-    nothing is deleted.  Should delete the letter and preceding white space.
+ 9   When getting focus while writing a large file, could warn for this file
+     being changed outside of Vim.  Avoid checking this while the file is being
+     written.
+@@ -2043,6 +2714,9 @@
+ -   Win32, MS-Windows XP: $HOME uses the wrong drive when the user profiles
+     are not on the boot disk.  This is caused by a wrong value of $HOMEDRIVE.
+     This is a bug in XP, see MSKB article 818134.
++-   Win32, MS-Windows: expanding plugin/**/*.vim also picks up
++    dir/ctags.vim,v.  This is because the short file name is something like
++    "ctags~1.vim" and that matches the pattern.
+ -   SunOS 5.5.1 with Motif: The file open dialog does not have a horizontal
+     scroll bar for the "files" selection.  This is a problem in the Motif
+     libraries, get a patch from Sun.
+@@ -2168,8 +2842,6 @@
+ 
+ 
+ User Friendlier:
+-8   Windows install with NSIS: make it possible to do a silent install, see
+-    http://nsis.sourceforge.net/Docs/Chapter4.html#4.12
+ 8   Windows install with install.exe: Use .exe instead of .bat files for
+     links, so that command line arguments are passed on unmodified? (Walter
+     Briscoe)
+@@ -2210,8 +2882,6 @@
+     font, etc.)
+ 8   Make GUI menu in tab pages line configurable.  Like the popup menu.
+ 8   balloons for the tab page labels that are shortened to show the full path.
+-8   :tabmove +N	 move tab page N pages forward
+-8   :tabmove -N	 move tab page N pages backward
+ 7   :tabdup	 duplicate the tab with all its windows.
+ 7   Option to put tab line at the left or right?  Need an option to specify
+     its width.  It's like a separate window with ":tabs" output.
+@@ -2339,7 +3009,6 @@
+ 8   Add "z/" and "z?" for searching in not folded text only.
+ 9   Add search pattern item to only match in closed or open fold and/or fold
+     with certain level.  Allows doing ":g/pat/cmd" to work on closed folds.
+-7   Use "++--", "+++--" for different levels instead of "+---" "+----".
+ 8   When a closed fold is displayed open because of 'foldminlines', the
+     behavior of commands is still like the fold is closed.  How to make the
+     user aware of this?
+@@ -2443,7 +3112,7 @@
+     For Windows, the charset_pairs[] table could be used.  But how do we know
+     if a font exists?
+ -   Do keyboard conversion from 'termencoding' to 'encoding' with
+-    convert_input() for Mac GUI and RiscOS GUI.
++    convert_input() for Mac GUI.
+ -   Add mnemonics from RFC1345 longer than two characters.
+     Support CTRL-K _{mnemonic}_
+ 7   In "-- INSERT (lang) --" show the name of the keymap used instead of
+@@ -2514,12 +3183,13 @@
+     this isn't reset.  Add a special keyword definition for the syntax rules?
+     When this is done, use vim.vim syntax highlighting for help file examples,
+     but without ":" in 'iskeyword' for syntax.
++    Also need a separate 'iskeyword' for the command line, e.g., in a help
++    window ":e /asdf/asdf/" CTRL-W works different.
+ 8   Add specific syntax item to match with parens/braces that don't have a
+     "%" match.  :syntax nomatch cMatchError (,{,[,),},] [contained]
+ 8   Highlight the text between two matching parens (e.g., with a grey
+     background) when on one of the parens or in between them.
+     Option for the matchparen plugin?
+-8   Add a command to jump to the next character highlighted with "Error".
+ 8   When using a cterm, and no ctermfg or ctermbg are defined, use start/stop
+     sequences.	Add remark in docs that :if 'term' == "term-name" should be
+     used.
+@@ -2584,9 +3254,6 @@
+     colors.  And add colors, so that Green+Red becomes Yellow.
+     E.g. for this html:
+ 	<B> bold text <I> italic+bold text </B> italic text </I>
+-7   Wild idea: Not only set highlighting, but also change what is displayed
+-    (e.g., remove characters, so that "<B>bold</B>" can be shown as "bold"):
+-	:syn region boldstuff start="<B>" display="" end="</B>" display=""
+ 7   CTRL-] checks the highlight group for finding out what the tag is.
+ 7   Add an explanation how a list of words can be used to highlight misspelled
+     words.
+@@ -2709,6 +3376,10 @@
+ 				Patch by Ilya Sher, 2004 Mar 4.
+ 				Return a list instead.
+ 	char2hex()		convert char string to hex string.
++	crypt()			encrypt string
++	decrypt()		decrypt string
++	base64enc()		base 64 encoding
++	base64dec()		base 64 decoding
+ 	attributes()		return file protection flags "drwxrwxrwx"
+ 	filecopy(from, to)	Copy a file
+ 	shorten(fname)		shorten a file name, like home_replace()
+@@ -2760,8 +3431,6 @@
+     "command" would use <> notation.
+     Does scratch buffer have a number?  Or re-use same number?
+ 7   Add function to generate unique number (date in milliseconds).
+-7   Automatically load a function from a file when it is called.  Need an
+-    option for the search path. (Sekera)
+ 
+ 
+ Robustness:
+@@ -2813,7 +3482,7 @@
+     http://www.theregister.co.uk/content/4/22908.html. (Andre Pang)
+ 7   Check how performance of loading the wordlist can be improved (adding a
+     lot of abbreviations).
+-7   DOS console: Add t_DL support, to make scrolling faster.
++7   MS-DOS console: Add t_DL support, to make scrolling faster.
+ 7   Compile Ex commands to byte codes.  Store byte codes in a vim script file
+     at the end, after "compiled:.  Make it look like a single comment line
+     for old Vim versions.  Insert first line "Vim script compiled <timestamp>.
+@@ -2821,10 +3490,6 @@
+     Add command to compile a vim script and add it to the file in-place.
+     Split Ex command executing into a parsing and executing phase.
+     Use compiled code for functions, while loops, etc.
+-8   When editing a file with extremely long lines (e.g., an executable), the
+-    "linerest" in readfile() is allocated twice to be able to copy what was
+-    read so far.  Use realloc() instead?  Or split the line when allocating
+-    memory fails and "linerest" is big (> 100000)?
+ 8   When defining autocommands (e.g., from $VIMRUNTIME/filetype.vim), need to
+     compare each pattern with all existing patterns.  Use a hash code to avoid
+     using strcmp() too often?
+@@ -2946,7 +3611,7 @@
+ 
+ 
+ Scrolling:
+-8   Add "zm" command: scroll horizontally to put the cursor in the middle.
++8   Add "zy" command: scroll horizontally to put the cursor in the middle.
+ 6   Add option to set the overlap for CTRL-F and CTRL-B. (Garhi)
+ -   extend 'scrollbind' option: 'scrollopt' words "search", "relative", etc..
+     Also 'e'xecute some commands (search, vertical movements) in all bound
+@@ -3007,12 +3672,6 @@
+     make the filename or the whole option use |wildcards| globing, better
+     would be to merge the 2 kinds of globing. originally (Erik Falor, 2008
+     April 18), updated (Ian Kelling, 2008 July 4)
+-8   Use a mechanism similar to omni completion to figure out the kind of tab
+-    for CTRL-] and jump to the appropriate matching tag (if there are
+-    several).
+-    Alternative: be able to define a function that takes the tag name and uses
+-    taglist() to find the right location.  With indication of using CTRL-] so
+-    that the context can be taken into account. (Robert Webb)
+ 7   Can CTRL-] (jump to tag) include a following "." and "->" to restrict the
+     number of possible matches? Check tags file for an item that has members.
+     (Flemming Madsen)
+@@ -3055,9 +3714,6 @@
+ Win32 GUI:
+ 8   Make debug mode work while starting up (vim -D).  Open console window for
+     the message and input?
+-7   The Python interface only works with one version of Python, selected at
+-    compile time.  Can this be made to work with version 2.1 and 2.2
+-    dynamically?
+ 7   GvimExt: when there are several existing Vims, move the list to a submenu.
+     (Mike McCollister)
+ 8   When using "Edit with Vim" for one file it changes directory, when several
+@@ -3092,7 +3748,7 @@
+ 
+ 
+ GUI:
+-8   Make inputdialog() work for Photon, Amiga, RiscOS.
++8   Make inputdialog() work for Photon, Amiga.
+ -   <C--> cannot be mapped.  Should be possible to recognize this as a
+     normal "-" with the Ctrl modifier.
+ 7   Implement ":popup" for other systems than Windows.
+@@ -3171,6 +3827,8 @@
+ 
+ 
+ Autocommands:
++9   Rework the code from FEAT_OSFILETYPE for autocmd-osfiletypes to use
++    'filetype'.  Only for when the current buffer is known.
+ -   Put autocommand event names in a hashtable for faster lookup?
+ 8   When the SwapExists event is triggered, provide information about the
+     swap file, e.g., whether the process is running, file was modified, etc.
+@@ -3182,8 +3840,6 @@
+     CursorHold), go through the list once and cache the result for a specific
+     buffer.  Invalidate the cache when adding/deleting autocommands or
+     changing the buffer name.
+-8   Add ScriptReadCmd event: used to load remote Vim scripts, e.g.
+-    "vim -u http://mach/path/vimrc".
+ 7   Add TagJump event: do something after jumping to a tag.
+ 8   Add "TagJumpFile" autocommand: When jumping to another file for a tag.
+     Can be used to open "main.c.gz" when "main.c" isn't found.
+@@ -3205,9 +3861,9 @@
+     handled (e.g., other font) (Ron Aaron)
+ 7   When trying to open a directory, trigger an OpenDirectory event.
+ 7   Add file type in front of file pattern: <d> for directory, <l> for link,
+-    <x> for executable, etc.  <&xxx> for Risc OS.  With commas to separate
+-    alternatives.  The autocommand is only executed when both the file type
+-    AND the file pattern match. (Leonard)
++    <x> for executable, etc.  With commas to separate alternatives.  The
++    autocommand is only executed when both the file type AND the file pattern
++    match. (Leonard)
+ 5   Add option that specifies extensions which are to be discarded from the
+     file name.  E.g. 'ausuffix', with ".gz,.orig".  Such that file.c.gz will
+     trigger the "*.c" autocommands.  (Belabas)
+@@ -3234,13 +3890,7 @@
+     PreDirChanged/PostDirChanged
+ 		    - Before/after ":cd" has been used (for changing the
+ 		      window title)
+-    BufReadAction   - replaces reading a file
+-    BufWriteAction  - replaces writing a file
+     ShutDown	    - when the system is about to shut down
+-    InsertCharPre   - user typed character Insert mode, before inserting the
+-		      char.  Pattern is matched with text before the cursor.
+-		      Set v:char to the character, can be changed.
+-		      (not triggered when 'paste' is set).
+     InsertCharPost  - user typed a character in Insert mode, after inserting
+ 		      the char.
+     BufModified	    - When a buffer becomes modified, or unmodified (for
+@@ -3425,9 +4075,6 @@
+ 
+ 
+ Command line history:
+-9   Remember which command lines were actually typed and were not loaded from
+-    viminfo.  When writing viminfo append only these lines, so that lines from
+-    other Vim's are not overwritten.
+ -   Add "KeyWasTyped" flag: It's reset before each command and set when a
+     character from the keyboard is consumed. Value is used to decide to put a
+     command line in history or not. Put line in history if it didn't
+@@ -3451,6 +4098,7 @@
+ 7   Use CTRL-G <count> to repeat what follows.  Useful for inserting a
+     character multiple times or repeating CTRL-Y.
+ -   Make 'revins' work in Replace mode.
++9   Can't use multi-byte characters for 'matchpairs'.
+ 7   Use 'matchpairs' for 'showmatch': When inserting a character check if it
+     appears in the rhs of 'matchpairs'.
+ -   In Insert mode (and command line editing?): Allow undo of the last typed
+@@ -3470,12 +4118,10 @@
+ 
+ 
+ 'cindent', 'smartindent':
+-9   ") :" confuses continuation line: (Colin Bennett, 2007 Dec 14)
+-        cout << "a"
+-                << ") :"
+-                << "y";
+-9   "} else" causes following lines to be indented too much. (Rouben
+-    Rostamian, 2008 Aug 30)
++9   Wrapping a variable initialization should have extra indent:
++	char * veryLongName =
++		"very long string"
++    Also check if "cino=+10" is used correctly.
+ 8   Lisp indenting: "\\" confuses the indenter. (Dorai Sitaram, 2006 May 17)
+ 8   Why are continuation lines outside of a {} block not indented?  E.g.:
+ 	long_type foo =
+@@ -3527,7 +4173,6 @@
+ -   Add option to 'cindent' to set indent for comments outside of {}?
+ -   Make a command to line up a comment after a code line with a previous
+     comment after a code line.	Can 'cindent' do this automatically?
+-7   Add 'j' flag to 'formatoptions': Remove comment leader when joining lines.
+ -   When 'cindent'ing a '}', showmatch is done before fixing the indent.  It
+     looks better when the indent is fixed before the showmatch. (Webb)
+ -   Add option to make indenting work in comments too (for commented-out
+@@ -3618,7 +4263,7 @@
+ 8   In blockwise mode, typed characters are inserted in front of the block,
+     backspace deletes a column before the block. (Steve Hall)
+ 7   Alt-leftmouse starts block mode selection in MS Word.
+-    See http://www.vim.org/tips/tip.php?tip_id=743
++    See http://vim.wikia.com/wiki/Use_Alt-Mouse_to_select_blockwise.
+ 7   Add Cmdline-select mode.  Like Select mode, but used on the command line.
+     - Change gui_send_mouse_event() to pass on mouse events when 'mouse'
+       contains 'C' or 'A'.
+@@ -3686,7 +4331,7 @@
+ -   Add "." command for visual mode: redo last visual command (e.g. ":fmt").
+ 7   Repeating "d:{cmd}" with "." doesn't work. (Benji Fisher)  Somehow remember
+     the command line so that it can be repeated?
+--   Add "gn": repeat last movement command.  Including count.
++-   Add command to repeat last movement.  Including count.
+ -   Add "." command after operator: repeat last command of same operator.  E.g.
+     "c." will repeat last change, also when "x" used since then (Webb).
+     "y." will repeat last yank.
+@@ -3712,21 +4357,14 @@
+ 8   Add a flag to ":abbrev" to eat the character that triggers the
+     abbreviation.  Thus "abb ab xxx" and typing "ab<Space>" inserts "xxx" and
+     not the <Space>.
+-8   Allow mapping of CTRL-@ (anywhere in the LHS).
+ 8   Give a warning when using CTRL-C in the lhs of a mapping.  It will never
+     (?) work.
+ 8   Add a way to save a current mapping and restore it later.  Use a function
+     that returns the mapping command to restore it: mapcmd()?  mapcheck() is
+     not fool proof.  How to handle ambiguous mappings?
+ 7   Add <0x8f> (hex), <033> (octal) and <123> (decimal) to <> notation?
+-7   Allow mapping "Q" and "Q}" at the same time.  Need to put a flag with "Q",
+-    that it needs an extra character before it can match.  See Vile 'maplonger'
+-    option.
+ 7   When someone tries to unmap with a trailing space, and it fails, try
+     unmapping without the trailing space.  Helps for ":unmap xx | unmap yy".
+-7   Make it possible to map 'wildchar', but only when it's a special character
+-    (like CTRL-E).  Currently it's only recognized when typed.  Useful for
+-    mapping a key to do something and then completion.
+ 6   Context-sensitive abbreviations: Specify syntax group(s) in which the
+     abbreviations are to be used.
+ -   Add mappings that take arguments.  Could work like the ":s" command.  For
+@@ -3738,12 +4376,9 @@
+     :map q<Char>	    :s/<Char>/\u\0/g
+     Or implicit:
+     :map q			<Register>d<Number>$
+--   Make it possible to include a <Nul> in the lhs and rhs of a mapping.
+ -   Add command to repeat a whole mapping ("." only repeats the last change in
+     a mapping).  Also: Repeat a whole insert command, including any mappings
+     that it included.  Sort-of automatic recording?
+--   Add an option to ":map" that makes it display the special keys in
+-    <> notation (e.g. <CR> instead of ^M).  Or just always do this?
+ -   Include an option (or flag to 'cpoptions') that makes errors in mappings
+     not flush the rest of the mapping (like nvi does).
+ -   Use context sensitiveness of completion to switch abbreviations and
+@@ -3784,6 +4419,7 @@
+ 
+ 
+ Searching:
++9   Should have an option for :vimgrep to find lines without a match.
+ 8   Add "g/" and "gb" to search for a pattern in the Visually selected text?
+     "g?" is already used for rot13.
+     The vis.vim script has a ":S" command that does something like this.
+@@ -3791,6 +4427,8 @@
+     Use "&/" for searching the text in the Visual area?
+ 9   Add "v" offset: "/pat/v": search for pattern and start Visual mode on the
+     matching text.
++8   Add a modifier to interpret a space like "\_s\+" to make it much easier to
++    search for a phrase.
+ 8   Add a mechanism for recursiveness: "\@(([^()]*\@g[^()]*)\)".  \@g stands
+     for "go recursive here" and \@( \) marks the recursive part.
+     Perl does it this way:
+@@ -3913,6 +4551,9 @@
+ 
+ 
+ Undo:
++9   ":gundo" command: global undo.  Undoes changes spread over multiple files
++    in the order they were made.  Also ":gredo".  Both with a count.  Useful
++    when tests fail after making changes and you forgot in which files.
+ 9   After undo/redo, in the message show whether the buffer is modified or
+     not.
+ 8   Use timestamps for undo, so that a version a certain time ago can be found
+@@ -3987,6 +4628,9 @@
+     should then mean the number of the last buffer.  E.g.: "4,$bdel".
+ 7   Add an option to mostly use slashes in file names.  Separately for
+     internal use and for when executing an external program?
++8   Some file systems are case-sensitive, some are not.  Besides
++    'wildignorecase' there might be more parts inside
++    CASE_INSENSITIVE_FILENAME that are useful on Unix.
+ 
+ 
+ Swap (.swp) files:
+@@ -4085,9 +4729,6 @@
+ Options:
+ 7   ":with option=value | command": temporarily set an option value and
+     restore it after the command has executed.
+-7   Setting an option always sets "w_set_curswant", while this is only
+-    required for a few options.  Only do it for those options to avoid the
+-    side effect.
+ 8   Make "old" number options that really give a number of effects into string
+     options that are a comma separated list.  The old number values should
+     also be supported.
+@@ -4097,6 +4738,7 @@
+ 7   There is 'titleold', why is there no 'iconold'? (Chazelas)
+ 7   Make 'scrolloff' a global-local option, so that it can be different in the
+     quickfix window, for example. (Gary Holloway)
++    Also do 'sidescrolloff'.
+ 
+ 
+ External commands:
+@@ -4169,10 +4811,8 @@
+ 
+ 
+ Digraphs:
+-7   Make "ga" show the digraph for a character, if it exists.
+-    Also the keymap?
+--   Make it possible to enter "r<C-E>" and "r<C-Y>" (get character from line
+-    below/above).
++7   Make "ga" show the keymap for a character, if it exists.
++    Also show the code of the character after conversion to 'filenecoding'.
+ -   Use digraph table to tell Vim about the collating sequence of special
+     characters?
+ 8   Add command to remove one or more (all) digraphs. (Brown)
+@@ -4190,8 +4830,6 @@
+ 8   'backupskip' doesn't write a backup file at all, a bit dangerous for some
+     applications.  Add 'backupelsewhere' to write a backup file in another
+     directory?  Or add a flag to 'backupdir'?
+-7   The 'directory' option supports changing path separators to "%" to make
+-    file names unique, also support this for 'backupdir'. (Mikolaj Machowski)
+ 6   Add an option to write a new, numbered, backup file each time.  Like
+     'patchmode', e.g., 'backupmode'.
+ 6   Make it possible to write 'patchmode' files to a different directory.
+@@ -4290,8 +4928,6 @@
+ 
+ 
+ Various improvements:
+-8   ":sign unplace * file={filename}" should work.  Also: ":sign unplace *
+-    buffer={bufnr}".  So one can remove all signs for one file/buffer.
+ 7   Add plugins for formatting?  Should be able to make a choice depending on
+     the language of a file (English/Korean/Japanese/etc.).
+     Setting the 'langformat' option to "chinese" would load the
+@@ -4316,7 +4952,6 @@
+ 7   Allow a window not to have a statusline.  Makes it possible to use a
+     window as a buffer-tab selection.
+ 8   Allow non-active windows to have a different statusline. (Yakov Lerner)
+-6   Python interface: add vim.message() function. (Michal Vitecek, 2002 Nov 5)
+ 7   Support using ":vert" with User commands.  Add expandable items <vert>.
+     Do the same for ":browse" and ":confirm"?
+     For ":silent" and ":debug" apply to the whole user command.
+@@ -4385,6 +5020,8 @@
+ 3   Make "2d%" work like "d%d%" instead of "d2%"?
+ 7   "g CTRL-O" jumps back to last used buffer.	Skip CTRL-O jumps in the same
+     buffer.  Make jumplist remember the last ten accessed buffers?
++7   Make it possible to set the size of the jumplist (also to a smaller number
++    than the default). (Nikolai Weibull)
+ -   Add code to disable the CAPS key when going from Insert to Normal mode.
+ -   Set date/protection/etc. of the patchfile the same as the original file.
+ -   Use growarray for termcodes[] in term.c
+@@ -4393,7 +5030,7 @@
+     (like "v" makes the operator characterwise-exclusive).  "x" could be used.
+ -   Make a set of operations on list of names: expand wildcards, replace home
+     dir, append a string, delete a string, etc.
+--   Remove mktemp() and use tmpname() only?  Ctags does this.
++-   Remove using mktemp() and use tmpname() only?  Ctags does this.
+ -   When replacing environment variables, and there is one that is not set,
+     turn it into an empty string?  Only when expanding options? (Hiebert)
+ -   Option to set command to be executed instead of producing a beep (e.g. to
+@@ -4478,7 +5115,6 @@
+     expanded.  Is there a better way to do this?
+ -   Add ":@!" command, to ":@" like what ":source!" is to ":source".
+ 8   Add ":@:!": repeat last command with forceit set.
+--   Should be possible to write to a device, e.g. ":w! /dev/null".
+ -   Add 't_normal': Used whenever t_me, t_se, t_ue or t_Zr is empty.
+ -   ":cab map test ^V| je", ":cunab map" doesn't work.	This is vi compatible!
+ -   CTRL-W CTRL-E and CTRL-W CTRL-Y should move the current window up or down
+@@ -4495,6 +5131,7 @@
+ -   Make it possible for the 'showbreak' to be displayed at the end of the
+     line.  Use a comma to separate the part at the end and the start of the
+     line?  Highlight the linebreak characters, add flag in 'highlight'.
++    Make 'showbreak' local to a window.
+ -   Some string options should be expanded if they have wildcards, e.g.
+     'dictionary' when it is "*.h".
+ -   Use a specific type for number and boolean options, making it possible to
+@@ -4545,8 +5182,6 @@
+ -   Add a variant of CTRL-V that stops interpretation of more than one
+     character.	For entering mappings on the command line where a key contains
+     several special characters, e.g. a trailing newline.
+--   Add regex for 'paragraphs' and 'sections': 'parare' and 'sectre'.  Combine
+-    the two into a regex for searching. (Ned Konz)
+ -   Make '2' option in 'formatoptions' also work inside comments.
+ -   Add 's' flag to 'formatoptions': Do not break when inside a string. (Dodt)
+ -   When window size changed (with the mouse) and made too small, set it back
+@@ -4556,9 +5191,6 @@
+ -   ":split file1 file2" adds two more windows (Webb).
+ -   Don't give message "Incomplete last line" when editing binary file.
+ -   Add ":a", ":i" for preloading of named buffers.
+--   Allow autowrite when doing ":e file" (with an option 'eaw').
+--   Allow a "+command" argument before each file name in the Vim command line:
+-    "vim +123 file1 +234 file2 +345 file3". ???
+ -   When entering text, keep other windows on same buffer updated (when a line
+     entered)?
+ -   Check out how screen does output optimizing.  Apparently this is possible
+@@ -4632,8 +5264,6 @@
+     working in another window.  Put cmdline in a separate window?
+ -   Add possibility to put output of Ex commands in a buffer or file, e.g. for
+     ":set all".  ":r :set all"?
+--   'edit' option: When off changing the buffer is not possible (Really
+-    read-only mode).
+ -   When the 'equalalways' option is set, creating a new window should not
+     result in windows to become bigger.  Deleting a window should not result in
+     a window to become smaller (Webb).
+diff -Naur vim73.orig/runtime/doc/uganda.txt vim73/runtime/doc/uganda.txt
+--- vim73.orig/runtime/doc/uganda.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/uganda.txt	2013-06-07 17:07:09.972313532 +0000
+@@ -1,4 +1,4 @@
+-*uganda.txt*    For Vim version 7.3.  Last change: 2010 Aug 07
++*uganda.txt*    For Vim version 7.3.  Last change: 2012 Dec 02
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -238,6 +238,7 @@
+ Holland:	Transfer to the account of "Stichting ICCF Holland" in Lisse.
+ 		This will allow for tax deduction if you live in Holland.
+ 			Postbank, nr. 4548774
++			IBAN: NL95 INGB 0004 5487 74
+ 
+ Germany:	It is possible to make donations that allow for a tax return.
+ 		Check the ICCF web site for the latest information:
+@@ -266,7 +267,7 @@
+ Others:		Transfer to one of these accounts if possible:
+ 		    Postbank, account 4548774
+ 				Swift code: INGB NL 2A
+-				IBAN: NL47 PSTB 0004 5487 74
++				IBAN: NL95 INGB 0004 5487 74
+ 			under the name "stichting ICCF Holland", Lisse
+ 		    If that doesn't work:
+ 		    Rabobank Lisse, account 3765.05.117
+diff -Naur vim73.orig/runtime/doc/undo.txt vim73/runtime/doc/undo.txt
+--- vim73.orig/runtime/doc/undo.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/undo.txt	2013-06-07 17:07:09.988980152 +0000
+@@ -1,4 +1,4 @@
+-*undo.txt*      For Vim version 7.3.  Last change: 2010 Jul 20
++*undo.txt*      For Vim version 7.3.  Last change: 2012 Mar 04
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -35,8 +35,10 @@
+ :red[o]			Redo one change which was undone.  {Vi: no redo}
+ 
+ 							*U*
+-U			Undo all latest changes on one line.  {Vi: while not
+-			moved off of it}
++U			Undo all latest changes on one line, the line where
++			the latest change was made. |U| itself also counts as
++			a change, and thus |U| undoes a previous |U|.
++			{Vi: while not moved off of the last modified line}
+ 
+ The last changes are remembered.  You can use the undo and redo commands above
+ to revert the text to how it was before each change.  You can also apply the
+@@ -125,16 +127,26 @@
+ 
+ 							*:undol* *:undolist*
+ :undol[ist]		List the leafs in the tree of changes.  Example:
+-				number changes   time ~
+-				4      10	 10:34:11
+-				18     4	 11:01:46
++			   number changes  when               saved ~
++			       88      88  2010/01/04 14:25:53
++			      108     107  08/07 12:47:51
++			      136      46  13:33:01             7
++			      166     164  3 seconds ago
+ 
+ 			The "number" column is the change number.  This number
+ 			continuously increases and can be used to identify a
+ 			specific undo-able change, see |:undo|.
+ 			The "changes" column is the number of changes to this
+ 			leaf from the root of the tree.
+-			The "time" column is the time this change was made.
++			The "when" column is the date and time when this
++			change was made.  The four possible formats are:
++			    N seconds ago
++			    HH:MM:SS             hour, minute, seconds
++			    MM/DD HH:MM:SS       idem, with month and day
++			    YYYY/MM/DD HH:MM:SS  idem, with year
++			The "saved" column specifies, if this change was
++			written to disk and which file write it was. This can
++			be used with the |:later| and |:earlier| commands.
+ 			For more details use the |undotree()| function.
+ 
+ 							*g-*
+@@ -148,7 +160,7 @@
+ :earlier {N}d		Go to older text state about {N} days before.
+ 
+ :earlier {N}f		Go to older text state {N} file writes before.
+-			When changes were made since the laste write
++			When changes were made since the last write
+ 			":earlier 1f" will revert the text to the state when
+ 			it was written.  Otherwise it will go to the write
+ 			before that.
+@@ -236,7 +248,9 @@
+ a simple scheme that maps filesystem paths directly to undo files. Vim will
+ detect if an undo file is no longer synchronized with the file it was written
+ for (with a hash of the file contents) and ignore it when the file was changed
+-after the undo file was written, to prevent corruption.
++after the undo file was written, to prevent corruption.  An undo file is also
++ignored if its owner differs from the owner of the edited file.  Set 'verbose'
++to get a message about that when opening a file.
+ 
+ Undo files are normally saved in the same directory as the file.  This can be
+ changed with the 'undodir' option.
+@@ -253,7 +267,12 @@
+ 		(the magic number at the start of the file is wrong), then
+ 		this fails, unless the ! was added.
+ 		If it exists and does look like an undo file it is
+-		overwritten.
++		overwritten. If there is no undo-history, nothing will be 
++		written.
++		Implementation detail: Overwriting happens by first deleting
++		the existing file and then creating a new file with the same
++		name. So it is not possible to overwrite an existing undofile
++		in a write-protected directory.
+ 		{not in Vi}
+ 
+ :rundo {file}	Read undo history from {file}.
+@@ -324,8 +343,8 @@
+ 	A file exists with the name of the undo file to be written, but it
+ 	does not start with the right magic number.  You may want to delete
+ 	this file or rename it.
+-"Skipping undo file write, noting to undo"
+-	There is no undo information not be written, nothing has been changed
++"Skipping undo file write, nothing to undo"
++	There is no undo information to be written, nothing has been changed
+ 	or 'undolevels' is negative.
+ *E829*	An error occurred while writing the undo file.  You may want to try
+ 	again.
+diff -Naur vim73.orig/runtime/doc/usr_01.txt vim73/runtime/doc/usr_01.txt
+--- vim73.orig/runtime/doc/usr_01.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/usr_01.txt	2013-06-07 17:07:09.992313475 +0000
+@@ -1,4 +1,4 @@
+-*usr_01.txt*	For Vim version 7.3.  Last change: 2008 May 07
++*usr_01.txt*	For Vim version 7.3.  Last change: 2010 Nov 03
+ 
+ 		     VIM USER MANUAL - by Bram Moolenaar
+ 
+@@ -40,13 +40,20 @@
+ 	Press  CTRL-]  to jump to a subject under the cursor.
+ 	Press  CTRL-O  to jump back (repeat to go further back).
+ 
+-Many links are in vertical bars, like this: |bars|.  An option name, like
+-'number', a command in double quotes like ":write" and any other word can also
+-be used as a link.  Try it out: Move the cursor to  CTRL-]  and press CTRL-]
+-on it.
++Many links are in vertical bars, like this: |bars|.  The bars themselves may
++be hidden or invisible, see below.  An option name, like 'number', a command
++in double quotes like ":write" and any other word can also be used as a link.
++Try it out: Move the cursor to  CTRL-]  and press CTRL-] on it.
+ 
+ Other subjects can be found with the ":help" command, see |help.txt|.
+ 
++The bars and stars are usually hidden with the |conceal| feature.  They also
++use |hl-Ignore|, using the same color for the text as the background.  You can
++make them visible with: >
++	:set conceallevel=0
++	:hi link HelpBar Normal
++	:hi link HelpStar Normal
++
+ ==============================================================================
+ *01.2*	Vim installed
+ 
+diff -Naur vim73.orig/runtime/doc/usr_05.txt vim73/runtime/doc/usr_05.txt
+--- vim73.orig/runtime/doc/usr_05.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/usr_05.txt	2013-06-07 17:07:10.048979980 +0000
+@@ -1,4 +1,4 @@
+-*usr_05.txt*	For Vim version 7.3.  Last change: 2009 Jun 04
++*usr_05.txt*	For Vim version 7.3.  Last change: 2012 Nov 20
+ 
+ 		     VIM USER MANUAL - by Bram Moolenaar
+ 
+@@ -49,8 +49,7 @@
+ 
+ The vimrc file can contain all the commands that you type after a colon.  The
+ most simple ones are for setting options.  For example, if you want Vim to
+-always start with the 'incsearch' option on, add this line you your vimrc
+-file: >
++always start with the 'incsearch' option on, add this line your vimrc file: >
+ 
+ 	set incsearch
+ 
+diff -Naur vim73.orig/runtime/doc/usr_08.txt vim73/runtime/doc/usr_08.txt
+--- vim73.orig/runtime/doc/usr_08.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/usr_08.txt	2013-06-07 17:07:10.075646571 +0000
+@@ -17,7 +17,7 @@
+ |08.6|	Commands for all windows
+ |08.7|	Viewing differences with vimdiff
+ |08.8|	Various
+-|08.9|  Tab pages
++|08.9|	Tab pages
+ 
+      Next chapter: |usr_09.txt|  Using the GUI
+  Previous chapter: |usr_07.txt|  Editing more than one file
+diff -Naur vim73.orig/runtime/doc/usr_21.txt vim73/runtime/doc/usr_21.txt
+--- vim73.orig/runtime/doc/usr_21.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/usr_21.txt	2013-06-07 17:07:10.165646314 +0000
+@@ -1,4 +1,4 @@
+-*usr_21.txt*	For Vim version 7.3.  Last change: 2008 Nov 09
++*usr_21.txt*	For Vim version 7.3.  Last change: 2012 Nov 02
+ 
+ 		     VIM USER MANUAL - by Bram Moolenaar
+ 
+@@ -282,7 +282,7 @@
+ SESSION HERE, SESSION THERE
+ 
+ The obvious way to use sessions is when working on different projects.
+-Suppose you store you session files in the directory "~/.vim".  You are
++Suppose you store your session files in the directory "~/.vim".  You are
+ currently working on the "secret" project and have to switch to the "boring"
+ project: >
+ 
+@@ -295,7 +295,7 @@
+ next time you load the secret session you can continue where you were at this
+ point.  And finally you load the new "boring" session.
+ 
+-If you open help windows, split and close various window, and generally mess
++If you open help windows, split and close various windows, and generally mess
+ up the window layout, you can go back to the last saved session: >
+ 
+ 	:source ~/.vim/boring.vim
+@@ -423,10 +423,10 @@
+ A VIEW WITH A NAME
+ 
+ The second basic way to use views is by storing the view in a file with a name
+-you chose.  This view can be loaded while editing another file.  Vim will then
+-switch to editing the file specified in the view.  Thus you can use this to
+-quickly switch to editing another file, with all its options set as you saved
+-them.
++you choose.  This view can be loaded while editing another file.  Vim will
++then switch to editing the file specified in the view.  Thus you can use this
++to quickly switch to editing another file, with all its options set as you
++saved them.
+    For example, to save the view of the current file: >
+ 
+ 	:mkview ~/.vim/main.vim
+diff -Naur vim73.orig/runtime/doc/usr_22.txt vim73/runtime/doc/usr_22.txt
+--- vim73.orig/runtime/doc/usr_22.txt	2010-08-15 12:23:22.000000000 +0000
++++ vim73/runtime/doc/usr_22.txt	2013-06-07 17:07:10.178979609 +0000
+@@ -1,4 +1,4 @@
+-*usr_22.txt*	For Vim version 7.3.  Last change: 2010 Feb 21
++*usr_22.txt*	For Vim version 7.3.  Last change: 2012 Nov 15
+ 
+ 		     VIM USER MANUAL - by Bram Moolenaar
+ 
+@@ -326,9 +326,9 @@
+ 
+ The output could look like this:
+ 
+-  1 #h	"help.txt"			line 62 ~
+-  2 %a+	"usr_21.txt"			line 1 ~
+-  3	"usr_toc.txt"			line 1 ~
++  1 #h   "help.txt"			line 62 ~
++  2 %a + "usr_21.txt"			line 1 ~
++  3      "usr_toc.txt"			line 1 ~
+ 
+ The first column contains the buffer number.  You can use this to edit the
+ buffer without having to type the name, see below.
+diff -Naur vim73.orig/runtime/doc/usr_28.txt vim73/runtime/doc/usr_28.txt
+--- vim73.orig/runtime/doc/usr_28.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/usr_28.txt	2013-06-07 17:07:10.235646114 +0000
+@@ -18,7 +18,7 @@
+ |28.7|	Folding by syntax
+ |28.8|	Folding by expression
+ |28.9|	Folding unchanged lines
+-|28.10| Which fold method to use?
++|28.10|	Which fold method to use?
+ 
+      Next chapter: |usr_29.txt|  Moving through programs
+  Previous chapter: |usr_27.txt|  Search commands and patterns
+diff -Naur vim73.orig/runtime/doc/usr_41.txt vim73/runtime/doc/usr_41.txt
+--- vim73.orig/runtime/doc/usr_41.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/usr_41.txt	2013-06-07 17:07:10.315645886 +0000
+@@ -1,4 +1,4 @@
+-*usr_41.txt*	For Vim version 7.3.  Last change: 2010 Jul 20
++*usr_41.txt*	For Vim version 7.3.  Last change: 2013 Feb 20
+ 
+ 		     VIM USER MANUAL - by Bram Moolenaar
+ 
+@@ -313,7 +313,7 @@
+ 	:echo 10 + 5 * 2
+ <	20 ~
+ 
+-Grouping is done with braces.  No surprises here.  Example: >
++Grouping is done with parentheses.  No surprises here.  Example: >
+ 
+ 	:echo (10 + 5) * 2
+ <	30 ~
+@@ -537,7 +537,7 @@
+ list here: |functions|.
+ 
+ A function is called with the ":call" command.  The parameters are passed in
+-between braces, separated by commas.  Example: >
++between parentheses separated by commas.  Example: >
+ 
+ 	:call search("Date: ", "W")
+ 
+@@ -597,7 +597,7 @@
+ 	strridx()		last index of a short string in a long string
+ 	strlen()		length of a string
+ 	substitute()		substitute a pattern match with a string
+-	submatch()		get a specific match in a ":substitute"
++	submatch()		get a specific match in ":s" and substitute()
+ 	strpart()		get part of a string
+ 	expand()		expand special keywords
+ 	iconv()			convert text from one encoding to another
+@@ -661,7 +661,20 @@
+ 	sqrt()			square root
+ 	sin()			sine
+ 	cos()			cosine
++	tan()			tangent
++	asin()			arc sine
++	acos()			arc cosine
+ 	atan()			arc tangent
++	atan2()			arc tangent
++	sinh()			hyperbolic sine
++	cosh()			hyperbolic cosine
++	tanh()			hyperbolic tangent
++
++Other computation:					*bitwise-function*
++	and()			bitwise AND
++	invert()		bitwise invert
++	or()			bitwise OR
++	xor()			bitwise XOR
+ 
+ Variables:						*var-functions*
+ 	type()			type of a variable
+@@ -793,6 +806,8 @@
+ 	synID()			get syntax ID at a specific position
+ 	synIDattr()		get a specific attribute of a syntax ID
+ 	synIDtrans()		get translated syntax ID
++	synstack()		get list of syntax IDs at a specific position
++	synconcealed()		get info about concealing
+ 	diff_hlID()		get highlight ID for diff mode at a position
+ 	matchadd()		define a pattern to highlight (a "match")
+ 	matcharg()		get info about |:match| arguments
+@@ -848,12 +863,15 @@
+ 	winsaveview()		get view of current window
+ 	winrestview()		restore saved view of current window
+ 
+-Various:					*various-functions*
+-	mode()			get current editing mode
+-	visualmode()		last visual mode used
++Mappings:				    *mapping-functions*
+ 	hasmapto()		check if a mapping exists
+ 	mapcheck()		check if a matching mapping exists
+ 	maparg()		get rhs of a mapping
++	wildmenumode()		check if the wildmode is active
++
++Various:					*various-functions*
++	mode()			get current editing mode
++	visualmode()		last visual mode used
+ 	exists()		check if a variable, function, etc. exists
+ 	has()			check if a feature is supported in Vim
+ 	changenr()		return number of most recent change
+@@ -1015,7 +1033,7 @@
+ 
+ 	:function Show(start, ...)
+ 	:  echohl Title
+-	:  echo "Show is " . a:start
++	:  echo "start is " . a:start
+ 	:  echohl None
+ 	:  let index = 1
+ 	:  while index <= a:0
+@@ -1283,7 +1301,7 @@
+ 
+ 	split(a:line)
+ 
+-The split() function takes a string, chops it into white separated words
++The split() function takes a string, chops it into whitespace separated words
+ and returns a list with these words.  Thus in the example it returns: >
+ 
+ 	:echo split('three two five one')
+@@ -1400,7 +1418,7 @@
+ 
+ The ":read" command will fail if the file does not exist.  Instead of
+ generating an error message, this code catches the error and gives the user a
+-nice message instead.
++nice message.
+ 
+ For the commands in between ":try" and ":endtry" errors are turned into
+ exceptions.  An exception is a string.  In the case of an error the string
+@@ -1477,7 +1495,7 @@
+ 
+ 	:set tags=my\ nice\ file
+ 
+-The same example written as >
++The same example written as: >
+ 
+ 	:set tags=my nice file
+ 
+@@ -1566,7 +1584,7 @@
+ 
+ RESTORING THE VIEW
+ 
+-Sometimes you want to make a change and go back to where cursor was.
++Sometimes you want to make a change and go back to where the cursor was.
+ Restoring the relative position would also be nice, so that the same line
+ appears at the top of the window.
+    This example yanks the current line, puts it above the first line in the
+@@ -1666,7 +1684,7 @@
+ HEADER
+ 
+ You will probably add new corrections to the plugin and soon have several
+-versions laying around.  And when distributing this file, people will want to
++versions lying around.  And when distributing this file, people will want to
+ know who wrote this wonderful plugin and where they can send remarks.
+ Therefore, put a header at the top of your plugin: >
+ 
+@@ -1695,6 +1713,7 @@
+  12	set cpo&vim
+  ..
+  42	let &cpo = s:save_cpo
++ 43	unlet s:save_cpo
+ 
+ We first store the old value of 'cpoptions' in the s:save_cpo variable.  At
+ the end of the plugin this value is restored.
+@@ -1941,6 +1960,7 @@
+  40	endif
+  41
+  42	let &cpo = s:save_cpo
++ 43	unlet s:save_cpo
+ 
+ Line 33 wasn't explained yet.  It applies the new correction to the word under
+ the cursor.  The |:normal| command is used to use the new abbreviation.  Note
+@@ -2095,7 +2115,7 @@
+ When an option has a value that is a list of flags or items, consider using
+ "+=" and "-=" to keep the existing value.  Be aware that the user may have
+ changed an option value already.  First resetting to the default value and
+-then changing it often a good idea.  Example: >
++then changing it is often a good idea.  Example: >
+ 
+ 	:setlocal formatoptions& formatoptions+=ro
+ 
+diff -Naur vim73.orig/runtime/doc/usr_toc.txt vim73/runtime/doc/usr_toc.txt
+--- vim73.orig/runtime/doc/usr_toc.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/usr_toc.txt	2013-06-07 17:07:10.455645486 +0000
+@@ -248,7 +248,7 @@
+ 		|28.7|	Folding by syntax
+ 		|28.8|	Folding by expression
+ 		|28.9|	Folding unchanged lines
+-		|28.10| Which fold method to use?
++		|28.10|	Which fold method to use?
+ 
+ |usr_29.txt|  Moving through programs
+ 		|29.1|	Using tags
+diff -Naur vim73.orig/runtime/doc/various.txt vim73/runtime/doc/various.txt
+--- vim73.orig/runtime/doc/various.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/various.txt	2013-06-07 17:07:10.475645429 +0000
+@@ -1,4 +1,4 @@
+-*various.txt*   For Vim version 7.3.  Last change: 2010 Aug 10
++*various.txt*   For Vim version 7.3.  Last change: 2013 May 18
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -101,13 +101,14 @@
+ :[range]P[rint] [count] [flags]
+ 			Just as ":print".  Was apparently added to Vi for
+ 			people that keep the shift key pressed too long...
++			Note: A user command can overrule this command.
+ 			See |ex-flags| for [flags].
+ 
+ 							*:l* *:list*
+ :[range]l[ist] [count] [flags]
+ 			Same as :print, but display unprintable characters
+ 			with '^' and put $ after the line.  This can be
+-			changed with the 'listchars' option.
++			further changed with the 'listchars' option.
+ 			See |ex-flags| for [flags].
+ 
+ 							*:nu* *:number*
+@@ -132,14 +133,17 @@
+ 			specified with {range}, or around the current line
+ 			if there is no {range}.  If there is a {count}, that's
+ 			how many lines you'll see; if there is only one window
+-			then the 'window' option is used, otherwise the
+-			current window size is used.
++			then twice the value of the 'scroll' option is used,
++			otherwise the current window height minus 3 is used.
++
++			If there is a {count} the 'window' option is set to
++			its value.
+ 
+ 			:z can be used either alone or followed by any of
+ 			several punctuation marks.  These have the following
+ 			effect:
+ 
+-			mark   first line    last line      new location   ~
++			mark   first line    last line      new cursor line ~
+ 			----   ----------    ---------      ------------
+ 			+      current line  1 scr forward  1 scr forward
+ 			-      1 scr back    current line   current line
+@@ -167,30 +171,40 @@
+ :norm[al][!] {commands}					*:norm* *:normal*
+ 			Execute Normal mode commands {commands}.  This makes
+ 			it possible to execute Normal mode commands typed on
+-			the command-line.  {commands} is executed like it is
+-			typed.  For undo all commands are undone together.
++			the command-line.  {commands} are executed like they
++			are typed.  For undo all commands are undone together.
+ 			Execution stops when an error is encountered.
++
+ 			If the [!] is given, mappings will not be used.
++			Without it, when this command is called from a
++			non-remappable mapping (|:noremap|), the argument can
++			be mapped anyway.
++
+ 			{commands} should be a complete command.  If
+ 			{commands} does not finish a command, the last one
+ 			will be aborted as if <Esc> or <C-C> was typed.
+-			The display isn't updated while ":normal" is busy.
+ 			This implies that an insert command must be completed
+ 			(to start Insert mode, see |:startinsert|).  A ":"
+ 			command must be completed as well.  And you can't use
+ 			"Q" or "gQ" to start Ex mode.
++
++			The display is not updated while ":normal" is busy.
++
+ 			{commands} cannot start with a space.  Put a count of
+ 			1 (one) before it, "1 " is one space.
++
+ 			The 'insertmode' option is ignored for {commands}.
++
+ 			This command cannot be followed by another command,
+ 			since any '|' is considered part of the command.
++
+ 			This command can be used recursively, but the depth is
+ 			limited by 'maxmapdepth'.
+-			When this command is called from a non-remappable
+-			mapping |:noremap|, the argument can be mapped anyway.
++
+ 			An alternative is to use |:execute|, which uses an
+ 			expression as argument.  This allows the use of
+ 			printable characters to represent special characters.
++
+ 			Example: >
+ 				:exe "normal \<c-w>\<c-w>"
+ <			{not in Vi, of course}
+@@ -351,16 +365,16 @@
+ B  *+mouse_netterm*	Unix only: netterm mouse handling |netterm-mouse|
+ N  *+mouse_pterm*	QNX only: pterm mouse handling |qnx-terminal|
+ N  *+mouse_sysmouse*	Unix only: *BSD console mouse handling |sysmouse|
++B  *+mouse_sgr*		Unix only: sgr mouse handling |sgr-mouse|
++B  *+mouse_urxvt*	Unix only: urxvt mouse handling |urxvt-mouse|
+ N  *+mouse_xterm*	Unix only: xterm mouse handling |xterm-mouse|
+-B  *+multi_byte*	16 and 32 bit characters |multibyte|
++N  *+multi_byte*	16 and 32 bit characters |multibyte|
+    *+multi_byte_ime*	Win32 input method for multibyte chars |multibyte-ime|
+ N  *+multi_lang*	non-English language support |multi-lang|
+ m  *+mzscheme*		Mzscheme interface |mzscheme|
+ m  *+mzscheme/dyn*	Mzscheme interface |mzscheme-dynamic| |/dyn|
+ m  *+netbeans_intg*	|netbeans|
+ m  *+ole*		Win32 GUI only: |ole-interface|
+-   *+osfiletype*	Support for the 'osfiletype' option and filetype
+-			checking in automatic commands.  |autocmd-osfiletypes|
+ N  *+path_extra*	Up/downwards search in 'path' and 'tags'
+ m  *+perl*		Perl interface |perl|
+ m  *+perl/dyn*		Perl interface |perl-dynamic| |/dyn|
+@@ -412,6 +426,7 @@
+ m  *+writebackup*	|'writebackup'| is default on
+ m  *+xim*		X input method |xim|
+    *+xfontset*		X fontset support |xfontset|
++m  *+xpm_w32*		Win32 GUI only: pixmap support |w32-xpm-support|
+    *+xsmp*		XSMP (X session management) support
+    *+xsmp_interact*	interactive XSMP (X session management) support
+ N  *+xterm_clipboard*	Unix only: xterm clipboard handling
+@@ -603,6 +618,10 @@
+ 			"gs" stands for "goto sleep".
+ 			While sleeping the cursor is positioned in the text,
+ 			if at a visible position.  {not in Vi}
++			Also process the received netbeans messages. {only
++			available when compiled with the |+netbeans_intg|
++			feature}
++
+ 
+ 							*g_CTRL-A*
+ g CTRL-A		Only when Vim was compiled with MEM_PROFILING defined
+@@ -610,7 +629,7 @@
+ 			Only useful for debugging Vim.
+ 
+ ==============================================================================
+-3. Using Vim like less or more					*less*
++2. Using Vim like less or more					*less*
+ 
+ If you use the less or more program to view a file, you don't get syntax
+ highlighting.  Thus you would like to use Vim instead.  You can do this by
+diff -Naur vim73.orig/runtime/doc/version5.txt vim73/runtime/doc/version5.txt
+--- vim73.orig/runtime/doc/version5.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/version5.txt	2013-06-07 17:07:10.532311934 +0000
+@@ -1,4 +1,4 @@
+-*version5.txt*  For Vim version 7.3.  Last change: 2008 Dec 17
++*version5.txt*  For Vim version 7.3.  Last change: 2012 Aug 08
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -6,7 +6,7 @@
+ Welcome to Vim Version 5.0!
+ 
+ This document lists the differences between Vim 4.x and Vim 5.0.
+-Although 5.0 is mentioned here, this is also for version 5.1, 5.2, etc..
++Although 5.0 is mentioned here, this is also for version 5.1, 5.2, etc.
+ See |vi_diff.txt| for an overview of differences between Vi and Vim 5.0.
+ See |version4.txt| for differences between Vim 3.0 and Vim 4.0.
+ 
+@@ -3888,7 +3888,7 @@
+ When expand() has a second argument which is non-zero, don't use 'suffixes'
+ and 'wildignore', return all matches.
+ 
+-'O' flag in 'cpoptions: When not included, Vim will not overwrite a file, if
++'O' flag in 'cpoptions' When not included, Vim will not overwrite a file, if
+ it didn't exist when editing started but it does exist when the buffer is
+ written to the file.  The file must have been created outside of Vim, possibly
+ without the user knowing it.  When this is detected after a shell command,
+@@ -4499,7 +4499,7 @@
+ restore all windows when "winsize" was not in 'sessionoptions'. (Webb)
+ 
+ Command line completion for ":buffer" depended on 'ignorecase' for Unix, but
+-not for DOS et al..  Now don't use 'ignorecase', but let it depend on whether
++not for DOS et al.  Now don't use 'ignorecase', but let it depend on whether
+ file names are case sensitive or not (like when expanding file names).
+ 
+ Win32 GUI: (Negri)
+diff -Naur vim73.orig/runtime/doc/version6.txt vim73/runtime/doc/version6.txt
+--- vim73.orig/runtime/doc/version6.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/version6.txt	2013-06-07 17:07:10.602311734 +0000
+@@ -2452,7 +2452,7 @@
+ 
+ ":n *.c" ":cd .." ":n" didn't use the original directory of the file.  Vi only
+ does it for the current file (looks like a bug).  Now remember the buffer used
+-for the entry in the argument list and use it's name (adjusted when doing
++for the entry in the argument list and use its name (adjusted when doing
+ ":cd"), unless it's deleted.
+ 
+ When inserting a special key as its name ("<F8>" as four characters) after
+@@ -3675,7 +3675,7 @@
+ 
+ 
+ Patch 6.0.001
+-Problem:    Loading the sh.vim syntax file causes error messages . (Corinna
++Problem:    Loading the sh.vim syntax file causes error messages. (Corinna
+ 	    Vinschen)
+ Solution:   Add an "if". (Charles Campbell)
+ Files:	    runtime/syntax/sh.vim
+@@ -9091,7 +9091,7 @@
+ Patch 6.1.402
+ Problem:    When evaluating a function name with curly braces, an error
+ 	    is not handled consistently.
+-Solution:   Accept the result of an curly braces expression when an
++Solution:   Accept the result of a curly braces expression when an
+ 	    error was encountered.  Skip evaluating an expression in curly
+ 	    braces when skipping.  (Servatius Brandt)
+ Files:	    src/eval.c
+diff -Naur vim73.orig/runtime/doc/version7.txt vim73/runtime/doc/version7.txt
+--- vim73.orig/runtime/doc/version7.txt	2010-08-15 12:53:08.000000000 +0000
++++ vim73/runtime/doc/version7.txt	2013-06-07 17:07:10.688978153 +0000
+@@ -1,4 +1,4 @@
+-*version7.txt*  For Vim version 7.3.  Last change: 2010 Aug 15
++*version7.txt*  For Vim version 7.3.  Last change: 2012 Aug 08
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -1673,7 +1673,7 @@
+ size.  Use a default size of 10.
+ 
+ This example in the documentation didn't work:
+-    :e `=foo . ".c" `
++    :e `=foo . ".c"`
+ Skip over the expression in `=expr` when looking for comments, |, % and #.
+ 
+ When ":helpgrep" doesn't find anything there is no error message.
+@@ -3587,7 +3587,7 @@
+ 
+ Patch 7.0.085
+ Problem:    When doing "make test" the viminfo file is modified.
+-Solution:   Use another viminfo file after setting 'compatible.
++Solution:   Use another viminfo file after setting 'compatible'.
+ Files:	    src/testdir/test56.in
+ 
+ Patch 7.0.086
+@@ -7314,8 +7314,6 @@
+ 
+ Support syntax and filetype completion for user commands. (Christian Brabandt)
+ 
+-Add completion for ":ownsyntax" and improve completion for ":filetype".
+-
+ Avoid use of the GTK main_loop() so that the GtkFileChooser can be used.
+ (James Vega)
+ 
+@@ -8180,7 +8178,7 @@
+ Files:	    src/ex_getln.c
+ 
+ Patch 7.2.130
+-Problem:    Vim may haing until CTRL-C is typed when using CTRL-Z.
++Problem:    Vim may hang until CTRL-C is typed when using CTRL-Z.
+ Solution:   Avoid using pause().  Also use "volatile" for variables used in
+ 	    signal functions. (Dominique Pelle)
+ Files:	    src/auto/configure, src/configure.in, src/config.h.in,
+@@ -9072,7 +9070,7 @@
+ Problem:    A redraw in a custom statusline with %! may cause a crash.
+ 	    (Yukihiro Nakadaira)
+ Solution:   Make a copy of 'statusline'.  Also fix typo in function name
+-	    redraw_custum_statusline. (partly by Dominique Pelle)
++	    redraw_custom_statusline. (partly by Dominique Pelle)
+ Files:	    src/screen.c
+ 
+ Patch 7.2.281
+diff -Naur vim73.orig/runtime/doc/vi_diff.txt vim73/runtime/doc/vi_diff.txt
+--- vim73.orig/runtime/doc/vi_diff.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/vi_diff.txt	2013-06-07 17:07:10.728978039 +0000
+@@ -1,4 +1,4 @@
+-*vi_diff.txt*   For Vim version 7.3.  Last change: 2010 Jul 20
++*vi_diff.txt*   For Vim version 7.3.  Last change: 2012 Aug 08
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -88,8 +88,9 @@
+ 			   characters
+ Maximum lhs of a mapping   50 characters.
+ Number of different highlighting types: over 30000
+-Range of a Number variable:  -2147483648 to 2147483647 (more on 64 bit
+-			   systems)
++Range of a Number variable:  -2147483648 to 2147483647 (might be more on 64
++			   bit systems)
++Maximum length of a line in a tags file: 512 bytes.
+ 
+ Information for undo and text in registers is kept in memory, thus when making
+ (big) changes the amount of (virtual) memory available limits the number of
+@@ -191,7 +192,7 @@
+ 
+ Spell checking.						|spell|
+ 	When the 'spell' option is set Vim will highlight spelling mistakes.
+-	About 40 languages are currently supported, selected with the
++	About 50 languages are currently supported, selected with the
+ 	'spelllang' option.  In source code only comments and strings are
+ 	checked for spelling.
+ 
+@@ -652,7 +653,7 @@
+ option includes "eol".  You can backspace over the start of insert if the
+ 'backspace' option includes "start".
+ 
+-When the 'paste' option is set, a few option are reset and mapping in insert
++When the 'paste' option is set, a few options are reset and mapping in insert
+ mode and abbreviation are disabled.  This allows for pasting text in windowing
+ systems without unexpected results.  When the 'paste' option is reset, the old
+ option values are restored.
+@@ -988,6 +989,8 @@
+ - vi test 33 sometimes fails for unknown reasons
+ - vi test 250 fails; behavior will be changed in a new revision
+     http://www.opengroup.org/austin/mailarchives/ag-review/msg01710.html
++    (link no longer works, perhaps it's now:
++    https://www.opengroup.org/sophocles/show_mail.tpl?CALLER=show_archive.tpl&source=L&listname=austin-review-l&id=1711)
+ - vi test 310 fails; exit code non-zero when any error occurred?
+ - ex test 24 fails because test is wrong.  Changed between SUSv2 and SUSv3.
+ - ex tests 47, 48, 49, 72, 73 fail because .exrc file isn't read in silent
+diff -Naur vim73.orig/runtime/doc/vim-de.1 vim73/runtime/doc/vim-de.1
+--- vim73.orig/runtime/doc/vim-de.1	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/doc/vim-de.1	2013-06-07 17:07:10.742311334 +0000
+@@ -0,0 +1,478 @@
++.\"*******************************************************************
++.\"
++.\" This file was generated with po4a. Translate the source file.
++.\"
++.\"*******************************************************************
++.\" Translated by bw1 (2008) and Florian Rehnisch <fm-r@gmx.de> (2012)
++.\" Kudos to the folks on vim-dev and debian-l10n-german
++.TH VIM 1 "2006 Apr 11"  
++.SH BEZEICHNUNG
++vim \- Vi IMproved, ein Text\-Editor für Programmierer
++.SH ÜBERSICHT
++.br
++\fBvim\fP [Optionen] [Datei ...]
++.br
++\fBvim\fP [Optionen] \-
++.br
++\fBvim\fP [Optionen] \-t Tag
++.br
++\fBvim\fP [Optionen] \-q [Fehlerdatei]
++.PP
++.br
++\fBex\fP
++.br
++\fBview\fP
++.br
++\fBgvim\fP \fBgview\fP \fBevim\fP \fBeview\fP
++.br
++\fBrvim\fP \fBrview\fP \fBrgvim\fP \fBrgview\fP
++.SH BESCHREIBUNG
++\fBVim\fP ist ein Text\-Editor, der aufwärtskompatibel zu Vi ist. Er kann
++verwendet werden, um alle Arten von Klartext zu bearbeiten. Er ist besonders
++nützlich, um Programme zu bearbeiten.
++.PP
++Vim hat einige Erweiterungen gegenüber Vi, z.B.: Rückgängigmachen in
++mehreren Schritten, mehrere Fenster und Puffer, Syntax\-Hervorhebung,
++Bearbeiten der Befehlszeile, Dateinamenergänzung, eingebaute Hilfe, visuelle
++Auswahl, usw. ... Siehe »:help vi_diff.txt« für eine Übersicht der
++Unterschiede zwischen \fBVim\fP und Vi.
++.PP
++Im laufenden \fBVim\fP kann mit dem Befehl »:help« viel Hilfe durch das
++eingebaute Hilfesystem erlangt werden. Siehe den Abschnitt EINGEBAUTE HILFE
++weiter unten.
++.PP
++Meistens wird \fBVim\fP zum Editieren einer einzigen Datei mit dem folgende
++Befehl gestartet:
++.PP
++  vim Datei
++.PP
++Allgemeiner betrachtet, wird \fBVim\fP folgendermaßen gestartet:
++.PP
++  vim [Optionen] [Dateiliste]
++.PP
++Bei einer fehlenden Dateiliste startet der Editor mit einem leeren
++Puffer. Andernfalls werden nach den folgenden vier Möglichkeiten eine oder
++mehrere Dateien bearbeitet:
++.TP  12
++Datei ...
++Eine Liste von Dateinamen. Die erste Datei wird in den Puffer geladen und
++zur aktuellen. Der Cursor wird auf der ersten Zeile des Puffers
++platziert. Zu den anderen Dateien kann mit dem Befehl »:next« gelangt
++werden. Falls einer der Dateinamen mit einem Bindestrich beginnt, stellen
++Sie der Dateiliste »\-\-« voran.
++.TP 
++\-
++Die zu bearbeitende Datei wird von der Standardeingabe gelesen. Befehle
++werden von der Standardfehlerausgabe gelesen, die ein Text\-Terminal sein
++sollte.
++.TP 
++\-t {Tag}
++Die zu editierende Datei und die anfängliche Cursor\-Position hängen von
++einem »Tag« ab, einer Art Sprungmarke. {Tag} wird in der Tag\-Datei
++nachgeschlagen, die zugehörige Datei wird zur aktuellen und der zugehörige
++Befehl wird ausgeführt. Dies wird meistens für Programme in der Sprache »C«
++benutzt, wobei {Tag} ein Funktionsname sein könnte. Die Wirkung dieses
++Befehls ist, dass die Datei, die die Funktion enthält, als aktuelle im
++Editor geöffnet und angezeigt wird und der Cursor auf dem Beginn der
++Funktion positioniert wird. Siehe »:help tag\-commands«.
++.TP 
++\-q [Fehlerdatei]
++Startet im QuickFix\-Modus. Die Datei [Fehlerdatei] wird gelesen und der
++erste Fehler wird angezeigt. Falls [Fehlerdatei] ausgelassen wird, wird der
++Dateiname aus der Option 'errorfile' verwendet (bei AmigaOS ist dies
++vorgabemäßig »AztecC.Err«, sowie "errors.err« bei anderen). Weitere Fehler
++können mit dem »:cn«\-Befehl angesprungen werden. Siehe ":help quickfix«.
++.PP
++\fBVim\fP reagiert unterschiedlich auf den Namen, der verwendet wird, um Vim zu
++starten (die ausführbare Datei kann dieselbe sein).
++.TP  10
++vim
++der »normale« Weg, alles ist standardmäßig
++.TP 
++ex
++Startet im Ex\-Modus. Mit dem Befehl »:vi« gelangt man in den normalen
++Modus. Funktioniert auch mit dem Argument »\-e«.
++.TP 
++view
++Startet im Nur\-Lesen\-Modus. Die Datei wird vor dem Überschreiben
++geschützt. Dasselbe wird mit dem Parameter »\-R« erreicht.
++.TP 
++gvim gview
++Die grafische Version: Öffnet ein neues Fenster. Dasselbe wird mit dem
++Parameter »\-g« erreicht.
++.TP 
++evim eview
++Die grafische Version im einfachen Modus: Öffnet ein neues Fenster. Dasselbe
++wird mit dem Parameter »\-y« erreicht.
++.TP 
++rvim rview rgvim rgview
++Wie die obigen, aber mit Beschränkungen: Es ist nicht möglich, Shell\-Befehle
++aufzurufen oder mit Unterbrechung in eine Shell zurückzuspringen. Dasselbe
++wird mit dem Parameter »\-Z« erreicht.
++.SH OPTIONEN
++Die Optionen können in beliebiger Reihenfolge vor oder nach den Dateinamen
++angegeben werden. Optionen ohne Parameter können hinter einem einzigen
++Bindestrich gruppiert werden.
++.TP  12
+++[Nummer]
++In der ersten Datei wird der Cursor auf die Zeile [Nummer] gesetzt. Falls
++[Nummer] nicht angegeben wird, wird der Cursor in die letzte Zeile der Datei
++gesetzt.
++.TP 
+++/{Suchmuster}
++In der ersten Datei wird der Cursor auf das erste Auftreten von {Suchmuster}
++gesetzt. Siehe »:help search\-pattern«.
++.TP 
+++{Befehl}
++.TP 
++\-c {Befehl}
++{Befehl} wird nach dem Lesen der ersten Datei ausgeführt. Als {Befehl} wird
++ein Ex\-Befehl erwartet. Sind in {Befehl} Leerzeichen vorhanden, muss alles
++in Anführungszeichen gesetzt werden (hängt von der verwendeten Shell
++ab). Beispiel: vim "+set si" main.c
++.br
++Anmerkung: Sie können bis zu 10 »+«\- oder "\-c«\-Befehle verwenden.
++.TP 
++\-S {Datei}
++{Datei} wird nach dem Lesen der ersten Datei ausgeführt. Dies entspricht »\-c
++"source {Datei}"«. {Datei} darf nicht mit einem Bindestrich (\-)
++anfangen. Wenn kein Dateiname angegeben wird, wird »Session.vim« verwendet
++(Funktioniert nur, wenn »\-S« als letzter Parameter steht).
++.TP 
++\-\-cmd {Befehl}
++Wie »\-c«, aber dieser Befehl wird vor allen VimRC\-Dateien ausgeführt. Sie
++können unabhängig von den »\-c«\-Befehlen bis zu 10 dieser Befehle verwenden.
++.TP 
++\-A
++Falls \fBVim\fP mit Unterstützung für das Schreiben von rechts nach links und
++arabischer Tastaturbelegung compiliert wurde (ARABIC), startet dieser
++Parameter den Modus fürs Arabische (:set arabic). Anderenfalls beendet sich
++\fBVim\fP mit einer Fehlermeldung.
++.TP 
++b
++Binärer Modus: Es werden einige Variablen gesetzt, sodass es möglich ist,
++eine binäre oder ausführbare Datei zu bearbeiten.
++.TP 
++\-C
++Kompatibel: Setzt die Option 'compatible'. Das macht \fBVim\fP im Verhalten
++sehr ähnlich zu Vi, selbst wenn eine VimRC\-Datei existiert.
++.TP 
++\-d
++Startet im diff\-Modus. Es sollten zwei, drei oder vier Dateinamen als
++Parameter übergeben werden. \fBVim\fP öffnet sie alle und zeigt die
++Unterschiede an. Arbeitet wie vimdiff(1).
++.TP 
++\-d {Gerät}
++Öffnet das {Gerät}, um es als Terminal zu nutzen. Nur für AmigaOS. Beispiel:
++"\-d con:20/30/600/150".
++.TP 
++D
++Debug\-Modus: \fBVim\fP geht in den Debug\-Modus, wenn der erste Befehl in einem
++Skript ausgeführt wird.
++.TP 
++\-e
++Startet \fBVim\fP im Ex\-Modus, als würde als ausführbare Datei »ex« aufgerufen.
++.TP 
++\-E
++Startet \fBVim\fP im erweiterten Ex\-Modus, als würde die ausführbare Datei als
++»exim« aufgerufen.
++.TP 
++\-f
++Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
++löst sich nicht von der Shell, in der er aufgerufen wurde. Bei AmigaOS wird
++kein neues Fenster geöffnet. Dieser Parameter wird benutzt, damit das
++aufrufende Programm auf das Beenden des Bearbeitungssitzung wartet (z.B.:
++mail). Bei AmigaOS funktionieren die Befehle »:sh« und ":!« nicht.
++.TP 
++\-\-nofork
++Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
++löst sich nicht von der Shell, in der er aufgerufen wurde.
++.TP 
++\-F
++Wenn \fBVim\fP mit FKMAP\-Unterstützung für das Schreiben von rechts nach links
++und Farsi\-Tastatur\-Belegung kompiliert wurde, startet Vim im Farsi\-Modus,
++d.h. die Optionen 'fkmap' und 'rightleft' werden gesetzt. Andernfalls bricht
++\fBVim\fP mit einer Fehlermeldung ab.
++.TP 
++\-g
++Falls \fBVim\fP mit GUI\-Unterstützung kompiliert wurde, wird die GUI
++aktiviert. Falls keine GUI\-Unterstützung einkompiliert wurde, wird mit einer
++Fehlermeldung abgebrochen.
++.TP 
++\-h
++Gibt eine kleine Hilfe für die Befehlszeilenparameter aus. Danach beendet
++sich \fBVim.\fP
++.TP 
++\-H
++Hebräisch\-Modus, falls \fBVim\fP mit RIGHTLEFT\-Unterstützung für das Schreiben
++von rechts nach links und hebräischer Tastaturbelegung kompiliert wurde,
++werden die Optionen 'hkmap' und 'rightleft' gesetzt. Andernfalls beendet
++sich \fBVim\fP mit einer Fehlermeldung.
++.TP 
++\-i {VimInfo}
++Wenn eine VimInfo\-Datei verwendet wird: Verwendet statt »~/.viminfo« die
++angegebene Datei. Es ist auch möglich die Verwendung einer VimInfo\-Datei
++durch Angabe des Dateinamen »NONE« zu verhindern,
++.TP 
++\-L
++dasselbe wie »\-r«
++.TP 
++\-l
++Lisp\-Modus. Aktiviert die Optionen 'lisp' und 'showmatch'.
++.TP 
++\-m
++Deaktiviert das Verändern von Dateien, indem die Option 'write' gelöscht
++wird. Der Puffer kann verändert werden, nur das Schreiben einer Datei ist
++nicht möglich.
++.TP 
++\-M
++Keine Veränderungen erlaubt: Die Optionen 'modifiable' und 'write' werden
++gelöscht, so dass Änderungen nicht erlaubt sind und Dateien nicht
++geschrieben werden können. Man beachte, dass diese Optionen ('modifiable',
++\&'write') dennnoch nachträglich zum Erlauben von Änderungen gesetzt werden
++können.
++.TP 
++\-N
++Nicht\-kompatibler Modus: Löscht die Option 'compatible'. Dies veranlasst
++\fBVim\fP, sich ein wenig besser, aber weniger Vi\-kompatibel zu verhalten,
++selbst wenn es keine VimRC\-Datei gibt.
++.TP 
++\-n
++Verwendet keine Auslagerungsdatei: Eine Wiederherstellung nach einem Absturz
++ist nicht möglich. Auf einem langsamen Medium (Diskette) kann diese
++Einstellung nützlich sein. Kann auch mit »set uc=0« erreicht werden; kann
++mit »set uc=200« aufgehoben werden.
++.TP 
++\-nb
++\fBVim\fP fungiert als Server für NetBeans. Details siehe Dokumentation.
++.TP 
++\-o[N]
++Öffnet [N] Fenster übereinander. Wenn keine Zahl angegeben wird, öffne ein
++Fenster pro Datei.
++.TP 
++\-O[N]
++Öffnet [N] Fenster nebeneinander. Wenn keine Zahl angegeben wird, öffne ein
++Fenster pro Datei.
++.TP 
++\-p[N]
++Öffnet [N] Reiterseiten. Wenn keine Zahl angegeben wird, öffne eine
++Reiterseite pro Datei.
++.TP 
++\-R
++Nur\-Lesen\-Modus: Die Option 'readonly' wird gesetzt. Der Puffer kann noch
++bearbeitet werden, aber es wird verhindert, eine Datei aus Versehen zu
++überschreiben. Wenn Sie wirklich eine Datei überschreiben wollen, fügen Sie
++dem Ex\-Befehl ein Ausrufezeichen hinzu (wie in »:w!«). Die Option "\-R«
++bedingt die Option »\-n« (siehe oben). Die Option 'readonly' kann durch ":set
++noro« gelöscht werden. Siehe »:help 'readonly'«.
++.TP 
++\-r
++Listet die Auslagerungsdateien und gibt Informationen zu ihrer
++Verwendbarkeit zur Wiederherstellung.
++.TP 
++\-r {Datei}
++Wiederherstellungsmodus: Die Auslagerungsdatei wird zur Wiederherstellung
++verwendet und hat denselben Dateinamen wie die Text\-Datei + ».swp«. Siehe
++":help recovery«.
++.TP 
++\-s
++Der stille Modus: Nur wenn die ausführbare Datei als »ex« aufgerufen wird
++oder vor »\-s« die Option "\-e« gegeben wird.
++.TP 
++\-s {Eingabeskript}
++Die Datei {Eingabeskript} wird gelesen und ausgeführt, als würden Sie die
++Zeichen in ihr tippen. Dasselbe kann mit dem Befehl »:source!
++{Eingabeskript}« erreicht werden. Wird das Ende der Datei vor dem Beenden
++des Editors erreicht, werden weitere Zeichen von der Tastatur gelesen.
++.TP 
++\-T {Terminal}
++Setzt den Namen des benutzten Terminals. Nur erforderlich, wenn die
++Automatik nicht funktioniert. Sollte ein \fBVim\fP bekanntes Terminal sein:
++(builtin) oder in einer termcap\- oder terminfo\-Datei definiert.
++.TP 
++\-u {VimRC}
++Verwendet zur Initialisierung die Befehle in der Datei {VimRC}. Alle anderen
++Initialisierungen werden übersprungen. Benutzen Sie dies, um eine besondere
++Art von Dateien zu bearbeiten. Dies kann auch benutzt werden, um alle
++Initialisierungen zu überspringen, indem der Name »NONE« angegeben wird. Für
++weitere Einzelheiten siehe »:help initialisation« innerhalb von Vim.
++.TP 
++\-U {GvimRC}
++Benutzt die Befehle in der Datei {GvimRC} für die Initialisierung der
++grafischen Oberfläche. Alle anderen Initialisierungen werden
++übersprungen. Dies kann ebenfalls benutzt werden, um alle
++GUI\-Initialisierungen zu überspringen, indem der Name »NONE« angegeben
++wird. Siehe »:help gui\-init« innerhalb von Vim für weitere Einzelheiten.
++.TP 
++\-V[N]
++Ausführlich (verbose): Gibt Meldungen darüber, welche Befehlsdateien
++eingelesen werden, und über das Lesen und Schreiben einer VimInfo\-Datei. Die
++optionale Zahl N ist der Wert für 'verbose'. Vorgabe ist 10.
++.TP 
++\-v
++Startet \fBVim\fP im Vi\-Modus, so als würde die ausführbare Datei mit »vi«
++aufgerufen. Dies wirkt sich nur aus, wenn die ausführbare Datei als »ex«
++aufgerufen wird.
++.TP 
++\-w {Ausgabeskript}
++Alle Zeichen, die eingetippt werden, werden in der Datei {Ausgabeskript}
++aufgezeichnet, solange bis Sie \fBVim\fP beenden. Dies ist nützlich, falls Sie
++eine Skript\-Datei zum Benutzen mit »vim \-s« oder ":source!« erzeugen
++wollen. Falls die Datei {Ausgabeskript} vorhanden ist, werden die Zeichen
++angehängt.
++.TP 
++\-W {Ausgabeskript}
++Wie \-w, aber eine bereits vorhandene Datei wird überschrieben.
++.TP 
++\-x
++Benutzt beim Schreiben von Dateien eine Verschlüsselung. Fragt nach dem
++Schlüssel.
++.TP 
++\-X
++Führt keine Verbindung zum X\-Server durch. Dadurch verkürzt sich die
++Startzeit, aber der Fenstertitel und die Zwischenablage werden nicht
++verwendet.
++.TP 
++\-y
++Startet \fBVim\fP im einfachen Modus, als würde die ausführbare Datei mit
++»evim« oder »eview« aufgerufen. \fBVim\fP verhält sich dann wie ein Editor zum
++Klicken und Tippen.
++.TP 
++\-Z
++Eingeschränkter Modus: Funktioniert, als würde der Name der ausführbaren
++Datei mit »r« beginnen.
++.TP 
++\-\-
++Markiert das Ende der Optionen. Argumente, die folgen, werden als Dateinamen
++behandelt. Dies kann benutzt werden, um einen Dateinamen mit »\-« am Anfang
++zu verwenden.
++.TP 
++\-\-echo\-wid
++Nur GTK\-GUI: Schreibe die Fenster\-ID auf die Standardausgabe.
++.TP 
++\-\-help
++Gibt eine Hilfe\-Nachricht aus und beendet, wie »\-h«.
++.TP 
++\-\-literal
++Nimmt die Dateinamen so wie sie sind und vervollständigt sie nicht nach
++Metazeichen (*,?). Dies wirkt sich nicht unter Unix aus, wo die Shell die
++Metazeichen expandiert.
++.TP 
++\-\-noplugin
++Lade keine Plugins. Impliziert durch »\-u NONE«.
++.TP 
++\-\-remote
++Verbindet mit einem Vim\-Server und lässt ihn die in den restlichen
++Argumenten angegeben Dateien editieren. Wenn kein Server gefunden wird,
++führt dies zu einer Warnmeldung und die Dateien werden im gegenwärtigen Vim
++zum Bearbeiten geöffnet.
++.TP 
++\-\-remote\-expr {Ausdruck}
++Verbindet mit einem Vim\-Server, führt {Ausdruck} aus und zeigt das Ergebnis
++auf der Standardausgabe an.
++.TP 
++\-\-remote\-send {Zeichen}
++Verbindet mit einem Vim\-Server und sendet ihm {Zeichen}.
++.TP 
++\-\-remote\-silent
++Wie »\-\-remote«, aber ohne Warnung, wenn kein Server gefunden wird.
++.TP 
++\-\-remote\-wait
++Wie »\-\-remote«, aber Vim beendet sich nicht, bis die Dateien bearbeitet
++wurden.
++.TP 
++\-\-remote\-wait\-silent
++Wie »\-\-remote\-wait«, aber ohne Warnung, wenn kein Server gefunden wird.
++.TP 
++\-\-serverlist
++Listet die Namen aller gefundenen Vim\-Server auf.
++.TP 
++\-\-servername {Name}
++Benutzt {Name} als Server\-Namen. Wird für den gegenwärtigen Vim benutzt,
++außer es wird mit dem Argument »\-\-remote« benutzt, dann ist es der Name des
++zu kontaktierenden Servers.
++.TP 
++\-\-socketid {id}
++Nur GTK\-GUI: Benutzt den GtkPlug\-Mechanismus, um GVim in einem anderen
++Fenster laufen zu lassen.
++.TP 
++\-\-version
++Versionsinformation anzeigen und beenden
++.SH "EINGEBAUTE HILFE"
++Tippen Sie in \fBVim\fP »:help«, um zu beginnen. Geben Sie ":help begriff« ein,
++um Hilfe über ein bestimmtes Thema zu bekommen. Zum Beispiel »:help ZZ« für
++Hilfe über den Befehl »ZZ«. Benutzen Sie <Tab> und CTRL\-D, um
++Begriffe zu vervollständigen (»:help cmdline\-completion«). Tags sind
++vorhanden, um von einem Ort zum anderen zu springen (eine Art
++Hypertext\-Verknüpfungen, siehe »:help«). Auf diese Weise können alle
++Dokumentations\-Dateien aufgerufen werden, zum Beispiel »:help syntax.txt«.
++.SH DATEIEN
++.TP  15
++/usr/local/lib/vim/doc/*.txt
++Dokumentations\-Dateien für \fBVim\fP. Verwenden Sie »:help doc\-file\-list«, um
++die gesamte Liste zu bekommen.
++.TP 
++/usr/local/lib/vim/doc/tags
++Die »Tag«\-Datei, die verwendet wird, um Informationen in der Dokumentation
++zu finden.
++.TP 
++/usr/local/lib/vim/syntax/syntax.vim
++Die systemweite Einrichtung der Syntaxhervorhebung.
++.TP 
++/usr/local/lib/vim/syntax/*.vim
++Syntaxdateien für die verschiedenen Sprachen.
++.TP 
++/usr/local/lib/vim/vimrc
++Systemweite Einstellungsdatei für \fBVim\fP
++.TP 
++~/.vimrc
++Persönliche Einstellungsdatei für \fBVim\fP
++.TP 
++/usr/local/lib/vim/gvimrc
++Systemweite Einstellungsdatei für GVim
++.TP 
++~/.gvimrc
++Persönliche Einstellungsdatei für GVim
++.TP 
++/usr/local/lib/vim/optwin.vim
++Das Script, das von dem Befehl »:options« verwendet wird, eine schöne
++Möglichkeit, um Optionen zu betrachten und zu setzen.
++.TP 
++/usr/local/lib/vim/menu.vim
++Systemweite Einstellungsdatei für das Menü von GVim
++.TP 
++/usr/local/lib/vim/bugreport.vim
++Das Script zum Generieren eines Fehlerberichts. Siehe »:help bugs«.
++.TP 
++/usr/local/lib/vim/filetype.vim
++Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
++Dateinamens. Siehe »:help 'filetype'«.
++.TP 
++/usr/local/lib/vim/scripts.vim
++Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
++Inhaltes. Siehe »:help 'filetype'«.
++.TP 
++/usr/local/lib/vim/print/*.ps
++Diese Dateien werden zum Drucken von PostScript verwendet.
++.PP
++Für die neuesten Informationen lesen Sie die Vim\-Homepage:
++.br
++<URL:http://www.vim.org/>
++.SH "SIEHE AUCH"
++vimtutor(1)
++.SH AUTOR
++\fBVim\fP wurde größtenteils von Bram Moolenaar erstellt, mit viel Hilfe von
++anderen Leuten. Siehe »:help credits« in \fBVim.\fP
++.br
++\fBVim\fP basiert auf Stevie, der von Tim Thompson, Tony Andrews und
++G.R. (Fred) Walter geschrieben wurde. Es ist jedoch kaum etwas vom
++ursprünglichen Code übrig geblieben.
++.SH FEHLER
++Die sind möglich. Siehe »:help todo« für eine Liste bekannter Probleme.
++.PP
++Beachten Sie, dass gewisse Dinge, die manche Leute als Fehler betrachten
++mögen, in Wirklichkeit durch zu getreue Nachbildung des Vi\-Verhaltens
++verursacht werden. Und falls Sie denken, dass andere Dinge Fehler sind,
++»weil Vi es anders tut«, sollten Sie einen genaueren Blick auf die Datei
++vi_diff.txt werfen (oder in Vim »:help vi_diff.txt« tippen). Sehen Sie sich
++auch die Optionen 'compatible' und 'cpoptions' an.
+diff -Naur vim73.orig/runtime/doc/vim-de.UTF-8.1 vim73/runtime/doc/vim-de.UTF-8.1
+--- vim73.orig/runtime/doc/vim-de.UTF-8.1	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/doc/vim-de.UTF-8.1	2013-06-07 17:07:10.762311277 +0000
+@@ -0,0 +1,478 @@
++.\"*******************************************************************
++.\"
++.\" This file was generated with po4a. Translate the source file.
++.\"
++.\"*******************************************************************
++.\" Translated by bw1 (2008) and Florian Rehnisch <fm-r@gmx.de> (2012)
++.\" Kudos to the folks on vim-dev and debian-l10n-german
++.TH VIM 1 "2006 Apr 11"  
++.SH BEZEICHNUNG
++vim \- Vi IMproved, ein Text\-Editor fÃŒr Programmierer
++.SH ÃBERSICHT
++.br
++\fBvim\fP [Optionen] [Datei âŠ]
++.br
++\fBvim\fP [Optionen] \-
++.br
++\fBvim\fP [Optionen] \-t Tag
++.br
++\fBvim\fP [Optionen] \-q [Fehlerdatei]
++.PP
++.br
++\fBex\fP
++.br
++\fBview\fP
++.br
++\fBgvim\fP \fBgview\fP \fBevim\fP \fBeview\fP
++.br
++\fBrvim\fP \fBrview\fP \fBrgvim\fP \fBrgview\fP
++.SH BESCHREIBUNG
++\fBVim\fP ist ein Text\-Editor, der aufwÃ€rtskompatibel zu Vi ist. Er kann
++verwendet werden, um alle Arten von Klartext zu bearbeiten. Er ist besonders
++nÃŒtzlich, um Programme zu bearbeiten.
++.PP
++Vim hat einige Erweiterungen gegenÃŒber Vi, z.B.: RÃŒckgÃ€ngigmachen in
++mehreren Schritten, mehrere Fenster und Puffer, Syntax\-Hervorhebung,
++Bearbeiten der Befehlszeile, DateinamenergÃ€nzung, eingebaute Hilfe, visuelle
++Auswahl, usw. âŠ Siehe Â»:help vi_diff.txtÂ« fÃŒr eine Ãbersicht der
++Unterschiede zwischen \fBVim\fP und Vi.
++.PP
++Im laufenden \fBVim\fP kann mit dem Befehl Â»:helpÂ« viel Hilfe durch das
++eingebaute Hilfesystem erlangt werden. Siehe den Abschnitt EINGEBAUTE HILFE
++weiter unten.
++.PP
++Meistens wird \fBVim\fP zum Editieren einer einzigen Datei mit dem folgende
++Befehl gestartet:
++.PP
++  vim Datei
++.PP
++Allgemeiner betrachtet, wird \fBVim\fP folgendermaÃen gestartet:
++.PP
++  vim [Optionen] [Dateiliste]
++.PP
++Bei einer fehlenden Dateiliste startet der Editor mit einem leeren
++Puffer. Andernfalls werden nach den folgenden vier MÃ¶glichkeiten eine oder
++mehrere Dateien bearbeitet:
++.TP  12
++Datei âŠ
++Eine Liste von Dateinamen. Die erste Datei wird in den Puffer geladen und
++zur aktuellen. Der Cursor wird auf der ersten Zeile des Puffers
++platziert. Zu den anderen Dateien kann mit dem Befehl Â»:nextÂ« gelangt
++werden. Falls einer der Dateinamen mit einem Bindestrich beginnt, stellen
++Sie der Dateiliste Â»\-\-Â« voran.
++.TP 
++\-
++Die zu bearbeitende Datei wird von der Standardeingabe gelesen. Befehle
++werden von der Standardfehlerausgabe gelesen, die ein Text\-Terminal sein
++sollte.
++.TP 
++\-t {Tag}
++Die zu editierende Datei und die anfÃ€ngliche Cursor\-Position hÃ€ngen von
++einem Â»TagÂ« ab, einer Art Sprungmarke. {Tag} wird in der Tag\-Datei
++nachgeschlagen, die zugehÃ¶rige Datei wird zur aktuellen und der zugehÃ¶rige
++Befehl wird ausgefÃŒhrt. Dies wird meistens fÃŒr Programme in der Sprache Â»CÂ«
++benutzt, wobei {Tag} ein Funktionsname sein kÃ¶nnte. Die Wirkung dieses
++Befehls ist, dass die Datei, die die Funktion enthÃ€lt, als aktuelle im
++Editor geÃ¶ffnet und angezeigt wird und der Cursor auf dem Beginn der
++Funktion positioniert wird. Siehe Â»:help tag\-commandsÂ«.
++.TP 
++\-q [Fehlerdatei]
++Startet im QuickFix\-Modus. Die Datei [Fehlerdatei] wird gelesen und der
++erste Fehler wird angezeigt. Falls [Fehlerdatei] ausgelassen wird, wird der
++Dateiname aus der Option 'errorfile' verwendet (bei AmigaOS ist dies
++vorgabemÃ€Ãig Â»AztecC.ErrÂ«, sowie âerrors.errÂ« bei anderen). Weitere Fehler
++kÃ¶nnen mit dem Â»:cnÂ«\-Befehl angesprungen werden. Siehe â:help quickfixÂ«.
++.PP
++\fBVim\fP reagiert unterschiedlich auf den Namen, der verwendet wird, um Vim zu
++starten (die ausfÃŒhrbare Datei kann dieselbe sein).
++.TP  10
++vim
++der Â»normaleÂ« Weg, alles ist standardmÃ€Ãig
++.TP 
++ex
++Startet im Ex\-Modus. Mit dem Befehl Â»:viÂ« gelangt man in den normalen
++Modus. Funktioniert auch mit dem Argument Â»\-eÂ«.
++.TP 
++view
++Startet im Nur\-Lesen\-Modus. Die Datei wird vor dem Ãberschreiben
++geschÃŒtzt. Dasselbe wird mit dem Parameter Â»\-RÂ« erreicht.
++.TP 
++gvim gview
++Die grafische Version: Ãffnet ein neues Fenster. Dasselbe wird mit dem
++Parameter Â»\-gÂ« erreicht.
++.TP 
++evim eview
++Die grafische Version im einfachen Modus: Ãffnet ein neues Fenster. Dasselbe
++wird mit dem Parameter Â»\-yÂ« erreicht.
++.TP 
++rvim rview rgvim rgview
++Wie die obigen, aber mit BeschrÃ€nkungen: Es ist nicht mÃ¶glich, Shell\-Befehle
++aufzurufen oder mit Unterbrechung in eine Shell zurÃŒckzuspringen. Dasselbe
++wird mit dem Parameter Â»\-ZÂ« erreicht.
++.SH OPTIONEN
++Die Optionen kÃ¶nnen in beliebiger Reihenfolge vor oder nach den Dateinamen
++angegeben werden. Optionen ohne Parameter kÃ¶nnen hinter einem einzigen
++Bindestrich gruppiert werden.
++.TP  12
+++[Nummer]
++In der ersten Datei wird der Cursor auf die Zeile [Nummer] gesetzt. Falls
++[Nummer] nicht angegeben wird, wird der Cursor in die letzte Zeile der Datei
++gesetzt.
++.TP 
+++/{Suchmuster}
++In der ersten Datei wird der Cursor auf das erste Auftreten von {Suchmuster}
++gesetzt. Siehe Â»:help search\-patternÂ«.
++.TP 
+++{Befehl}
++.TP 
++\-c {Befehl}
++{Befehl} wird nach dem Lesen der ersten Datei ausgefÃŒhrt. Als {Befehl} wird
++ein Ex\-Befehl erwartet. Sind in {Befehl} Leerzeichen vorhanden, muss alles
++in AnfÃŒhrungszeichen gesetzt werden (hÃ€ngt von der verwendeten Shell
++ab). Beispiel: vim "+set si" main.c
++.br
++Anmerkung: Sie kÃ¶nnen bis zu 10 Â»+Â«\- oder â\-cÂ«\-Befehle verwenden.
++.TP 
++\-S {Datei}
++{Datei} wird nach dem Lesen der ersten Datei ausgefÃŒhrt. Dies entspricht Â»\-c
++"source {Datei}"Â«. {Datei} darf nicht mit einem Bindestrich (\-)
++anfangen. Wenn kein Dateiname angegeben wird, wird Â»Session.vimÂ« verwendet
++(Funktioniert nur, wenn Â»\-SÂ« als letzter Parameter steht).
++.TP 
++\-\-cmd {Befehl}
++Wie Â»\-cÂ«, aber dieser Befehl wird vor allen VimRC\-Dateien ausgefÃŒhrt. Sie
++kÃ¶nnen unabhÃ€ngig von den Â»\-cÂ«\-Befehlen bis zu 10 dieser Befehle verwenden.
++.TP 
++\-A
++Falls \fBVim\fP mit UnterstÃŒtzung fÃŒr das Schreiben von rechts nach links und
++arabischer Tastaturbelegung compiliert wurde (ARABIC), startet dieser
++Parameter den Modus fÃŒrs Arabische (:set arabic). Anderenfalls beendet sich
++\fBVim\fP mit einer Fehlermeldung.
++.TP 
++b
++BinÃ€rer Modus: Es werden einige Variablen gesetzt, sodass es mÃ¶glich ist,
++eine binÃ€re oder ausfÃŒhrbare Datei zu bearbeiten.
++.TP 
++\-C
++Kompatibel: Setzt die Option 'compatible'. Das macht \fBVim\fP im Verhalten
++sehr Ã€hnlich zu Vi, selbst wenn eine VimRC\-Datei existiert.
++.TP 
++\-d
++Startet im diff\-Modus. Es sollten zwei, drei oder vier Dateinamen als
++Parameter ÃŒbergeben werden. \fBVim\fP Ã¶ffnet sie alle und zeigt die
++Unterschiede an. Arbeitet wie vimdiff(1).
++.TP 
++\-d {GerÃ€t}
++Ãffnet das {GerÃ€t}, um es als Terminal zu nutzen. Nur fÃŒr AmigaOS. Beispiel:
++"\-d con:20/30/600/150".
++.TP 
++D
++Debug\-Modus: \fBVim\fP geht in den Debug\-Modus, wenn der erste Befehl in einem
++Skript ausgefÃŒhrt wird.
++.TP 
++\-e
++Startet \fBVim\fP im Ex\-Modus, als wÃŒrde als ausfÃŒhrbare Datei Â»exÂ« aufgerufen.
++.TP 
++\-E
++Startet \fBVim\fP im erweiterten Ex\-Modus, als wÃŒrde die ausfÃŒhrbare Datei als
++Â»eximÂ« aufgerufen.
++.TP 
++\-f
++Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
++lÃ¶st sich nicht von der Shell, in der er aufgerufen wurde. Bei AmigaOS wird
++kein neues Fenster geÃ¶ffnet. Dieser Parameter wird benutzt, damit das
++aufrufende Programm auf das Beenden des Bearbeitungssitzung wartet (z.B.:
++mail). Bei AmigaOS funktionieren die Befehle Â»:shÂ« und â:!Â« nicht.
++.TP 
++\-\-nofork
++Vordergrund: Bei der GUI\-Version erzeugt \fBVim\fP keinen neuen Prozess und
++lÃ¶st sich nicht von der Shell, in der er aufgerufen wurde.
++.TP 
++\-F
++Wenn \fBVim\fP mit FKMAP\-UnterstÃŒtzung fÃŒr das Schreiben von rechts nach links
++und Farsi\-Tastatur\-Belegung kompiliert wurde, startet Vim im Farsi\-Modus,
++d.h. die Optionen 'fkmap' und 'rightleft' werden gesetzt. Andernfalls bricht
++\fBVim\fP mit einer Fehlermeldung ab.
++.TP 
++\-g
++Falls \fBVim\fP mit GUI\-UnterstÃŒtzung kompiliert wurde, wird die GUI
++aktiviert. Falls keine GUI\-UnterstÃŒtzung einkompiliert wurde, wird mit einer
++Fehlermeldung abgebrochen.
++.TP 
++\-h
++Gibt eine kleine Hilfe fÃŒr die Befehlszeilenparameter aus. Danach beendet
++sich \fBVim.\fP
++.TP 
++\-H
++HebrÃ€isch\-Modus, falls \fBVim\fP mit RIGHTLEFT\-UnterstÃŒtzung fÃŒr das Schreiben
++von rechts nach links und hebrÃ€ischer Tastaturbelegung kompiliert wurde,
++werden die Optionen 'hkmap' und 'rightleft' gesetzt. Andernfalls beendet
++sich \fBVim\fP mit einer Fehlermeldung.
++.TP 
++\-i {VimInfo}
++Wenn eine VimInfo\-Datei verwendet wird: Verwendet statt Â»~/.viminfoÂ« die
++angegebene Datei. Es ist auch mÃ¶glich die Verwendung einer VimInfo\-Datei
++durch Angabe des Dateinamen Â»NONEÂ« zu verhindern,
++.TP 
++\-L
++dasselbe wie Â»\-rÂ«
++.TP 
++\-l
++Lisp\-Modus. Aktiviert die Optionen 'lisp' und 'showmatch'.
++.TP 
++\-m
++Deaktiviert das VerÃ€ndern von Dateien, indem die Option 'write' gelÃ¶scht
++wird. Der Puffer kann verÃ€ndert werden, nur das Schreiben einer Datei ist
++nicht mÃ¶glich.
++.TP 
++\-M
++Keine VerÃ€nderungen erlaubt: Die Optionen 'modifiable' und 'write' werden
++gelÃ¶scht, so dass Ãnderungen nicht erlaubt sind und Dateien nicht
++geschrieben werden kÃ¶nnen. Man beachte, dass diese Optionen ('modifiable',
++\&'write') dennnoch nachtrÃ€glich zum Erlauben von Ãnderungen gesetzt werden
++kÃ¶nnen.
++.TP 
++\-N
++Nicht\-kompatibler Modus: LÃ¶scht die Option 'compatible'. Dies veranlasst
++\fBVim\fP, sich ein wenig besser, aber weniger Vi\-kompatibel zu verhalten,
++selbst wenn es keine VimRC\-Datei gibt.
++.TP 
++\-n
++Verwendet keine Auslagerungsdatei: Eine Wiederherstellung nach einem Absturz
++ist nicht mÃ¶glich. Auf einem langsamen Medium (Diskette) kann diese
++Einstellung nÃŒtzlich sein. Kann auch mit Â»set uc=0Â« erreicht werden; kann
++mit Â»set uc=200Â« aufgehoben werden.
++.TP 
++\-nb
++\fBVim\fP fungiert als Server fÃŒr NetBeans. Details siehe Dokumentation.
++.TP 
++\-o[N]
++Ãffnet [N] Fenster ÃŒbereinander. Wenn keine Zahl angegeben wird, Ã¶ffne ein
++Fenster pro Datei.
++.TP 
++\-O[N]
++Ãffnet [N] Fenster nebeneinander. Wenn keine Zahl angegeben wird, Ã¶ffne ein
++Fenster pro Datei.
++.TP 
++\-p[N]
++Ãffnet [N] Reiterseiten. Wenn keine Zahl angegeben wird, Ã¶ffne eine
++Reiterseite pro Datei.
++.TP 
++\-R
++Nur\-Lesen\-Modus: Die Option 'readonly' wird gesetzt. Der Puffer kann noch
++bearbeitet werden, aber es wird verhindert, eine Datei aus Versehen zu
++ÃŒberschreiben. Wenn Sie wirklich eine Datei ÃŒberschreiben wollen, fÃŒgen Sie
++dem Ex\-Befehl ein Ausrufezeichen hinzu (wie in Â»:w!Â«). Die Option â\-RÂ«
++bedingt die Option Â»\-nÂ« (siehe oben). Die Option 'readonly' kann durch â:set
++noroÂ« gelÃ¶scht werden. Siehe Â»:help 'readonly'Â«.
++.TP 
++\-r
++Listet die Auslagerungsdateien und gibt Informationen zu ihrer
++Verwendbarkeit zur Wiederherstellung.
++.TP 
++\-r {Datei}
++Wiederherstellungsmodus: Die Auslagerungsdatei wird zur Wiederherstellung
++verwendet und hat denselben Dateinamen wie die Text\-Datei + Â».swpÂ«. Siehe
++â:help recoveryÂ«.
++.TP 
++\-s
++Der stille Modus: Nur wenn die ausfÃŒhrbare Datei als Â»exÂ« aufgerufen wird
++oder vor Â»\-sÂ« die Option â\-eÂ« gegeben wird.
++.TP 
++\-s {Eingabeskript}
++Die Datei {Eingabeskript} wird gelesen und ausgefÃŒhrt, als wÃŒrden Sie die
++Zeichen in ihr tippen. Dasselbe kann mit dem Befehl Â»:source!
++{Eingabeskript}Â« erreicht werden. Wird das Ende der Datei vor dem Beenden
++des Editors erreicht, werden weitere Zeichen von der Tastatur gelesen.
++.TP 
++\-T {Terminal}
++Setzt den Namen des benutzten Terminals. Nur erforderlich, wenn die
++Automatik nicht funktioniert. Sollte ein \fBVim\fP bekanntes Terminal sein:
++(builtin) oder in einer termcap\- oder terminfo\-Datei definiert.
++.TP 
++\-u {VimRC}
++Verwendet zur Initialisierung die Befehle in der Datei {VimRC}. Alle anderen
++Initialisierungen werden ÃŒbersprungen. Benutzen Sie dies, um eine besondere
++Art von Dateien zu bearbeiten. Dies kann auch benutzt werden, um alle
++Initialisierungen zu ÃŒberspringen, indem der Name Â»NONEÂ« angegeben wird. FÃŒr
++weitere Einzelheiten siehe Â»:help initialisationÂ« innerhalb von Vim.
++.TP 
++\-U {GvimRC}
++Benutzt die Befehle in der Datei {GvimRC} fÃŒr die Initialisierung der
++grafischen OberflÃ€che. Alle anderen Initialisierungen werden
++ÃŒbersprungen. Dies kann ebenfalls benutzt werden, um alle
++GUI\-Initialisierungen zu ÃŒberspringen, indem der Name Â»NONEÂ« angegeben
++wird. Siehe Â»:help gui\-initÂ« innerhalb von Vim fÃŒr weitere Einzelheiten.
++.TP 
++\-V[N]
++AusfÃŒhrlich (verbose): Gibt Meldungen darÃŒber, welche Befehlsdateien
++eingelesen werden, und ÃŒber das Lesen und Schreiben einer VimInfo\-Datei. Die
++optionale Zahl N ist der Wert fÃŒr 'verbose'. Vorgabe ist 10.
++.TP 
++\-v
++Startet \fBVim\fP im Vi\-Modus, so als wÃŒrde die ausfÃŒhrbare Datei mit Â»viÂ«
++aufgerufen. Dies wirkt sich nur aus, wenn die ausfÃŒhrbare Datei als Â»exÂ«
++aufgerufen wird.
++.TP 
++\-w {Ausgabeskript}
++Alle Zeichen, die eingetippt werden, werden in der Datei {Ausgabeskript}
++aufgezeichnet, solange bis Sie \fBVim\fP beenden. Dies ist nÃŒtzlich, falls Sie
++eine Skript\-Datei zum Benutzen mit Â»vim \-sÂ« oder â:source!Â« erzeugen
++wollen. Falls die Datei {Ausgabeskript} vorhanden ist, werden die Zeichen
++angehÃ€ngt.
++.TP 
++\-W {Ausgabeskript}
++Wie \-w, aber eine bereits vorhandene Datei wird ÃŒberschrieben.
++.TP 
++\-x
++Benutzt beim Schreiben von Dateien eine VerschlÃŒsselung. Fragt nach dem
++SchlÃŒssel.
++.TP 
++\-X
++FÃŒhrt keine Verbindung zum X\-Server durch. Dadurch verkÃŒrzt sich die
++Startzeit, aber der Fenstertitel und die Zwischenablage werden nicht
++verwendet.
++.TP 
++\-y
++Startet \fBVim\fP im einfachen Modus, als wÃŒrde die ausfÃŒhrbare Datei mit
++Â»evimÂ« oder Â»eviewÂ« aufgerufen. \fBVim\fP verhÃ€lt sich dann wie ein Editor zum
++Klicken und Tippen.
++.TP 
++\-Z
++EingeschrÃ€nkter Modus: Funktioniert, als wÃŒrde der Name der ausfÃŒhrbaren
++Datei mit Â»rÂ« beginnen.
++.TP 
++\-\-
++Markiert das Ende der Optionen. Argumente, die folgen, werden als Dateinamen
++behandelt. Dies kann benutzt werden, um einen Dateinamen mit Â»\-Â« am Anfang
++zu verwenden.
++.TP 
++\-\-echo\-wid
++Nur GTK\-GUI: Schreibe die Fenster\-ID auf die Standardausgabe.
++.TP 
++\-\-help
++Gibt eine Hilfe\-Nachricht aus und beendet, wie Â»\-hÂ«.
++.TP 
++\-\-literal
++Nimmt die Dateinamen so wie sie sind und vervollstÃ€ndigt sie nicht nach
++Metazeichen (*,?). Dies wirkt sich nicht unter Unix aus, wo die Shell die
++Metazeichen expandiert.
++.TP 
++\-\-noplugin
++Lade keine Plugins. Impliziert durch Â»\-u NONEÂ«.
++.TP 
++\-\-remote
++Verbindet mit einem Vim\-Server und lÃ€sst ihn die in den restlichen
++Argumenten angegeben Dateien editieren. Wenn kein Server gefunden wird,
++fÃŒhrt dies zu einer Warnmeldung und die Dateien werden im gegenwÃ€rtigen Vim
++zum Bearbeiten geÃ¶ffnet.
++.TP 
++\-\-remote\-expr {Ausdruck}
++Verbindet mit einem Vim\-Server, fÃŒhrt {Ausdruck} aus und zeigt das Ergebnis
++auf der Standardausgabe an.
++.TP 
++\-\-remote\-send {Zeichen}
++Verbindet mit einem Vim\-Server und sendet ihm {Zeichen}.
++.TP 
++\-\-remote\-silent
++Wie Â»\-\-remoteÂ«, aber ohne Warnung, wenn kein Server gefunden wird.
++.TP 
++\-\-remote\-wait
++Wie Â»\-\-remoteÂ«, aber Vim beendet sich nicht, bis die Dateien bearbeitet
++wurden.
++.TP 
++\-\-remote\-wait\-silent
++Wie Â»\-\-remote\-waitÂ«, aber ohne Warnung, wenn kein Server gefunden wird.
++.TP 
++\-\-serverlist
++Listet die Namen aller gefundenen Vim\-Server auf.
++.TP 
++\-\-servername {Name}
++Benutzt {Name} als Server\-Namen. Wird fÃŒr den gegenwÃ€rtigen Vim benutzt,
++auÃer es wird mit dem Argument Â»\-\-remoteÂ« benutzt, dann ist es der Name des
++zu kontaktierenden Servers.
++.TP 
++\-\-socketid {id}
++Nur GTK\-GUI: Benutzt den GtkPlug\-Mechanismus, um GVim in einem anderen
++Fenster laufen zu lassen.
++.TP 
++\-\-version
++Versionsinformation anzeigen und beenden
++.SH "EINGEBAUTE HILFE"
++Tippen Sie in \fBVim\fP Â»:helpÂ«, um zu beginnen. Geben Sie â:help begriffÂ« ein,
++um Hilfe ÃŒber ein bestimmtes Thema zu bekommen. Zum Beispiel Â»:help ZZÂ« fÃŒr
++Hilfe ÃŒber den Befehl Â»ZZÂ«. Benutzen Sie <Tab> und CTRL\-D, um
++Begriffe zu vervollstÃ€ndigen (Â»:help cmdline\-completionÂ«). Tags sind
++vorhanden, um von einem Ort zum anderen zu springen (eine Art
++Hypertext\-VerknÃŒpfungen, siehe Â»:helpÂ«). Auf diese Weise kÃ¶nnen alle
++Dokumentations\-Dateien aufgerufen werden, zum Beispiel Â»:help syntax.txtÂ«.
++.SH DATEIEN
++.TP  15
++/usr/local/lib/vim/doc/*.txt
++Dokumentations\-Dateien fÃŒr \fBVim\fP. Verwenden Sie Â»:help doc\-file\-listÂ«, um
++die gesamte Liste zu bekommen.
++.TP 
++/usr/local/lib/vim/doc/tags
++Die Â»TagÂ«\-Datei, die verwendet wird, um Informationen in der Dokumentation
++zu finden.
++.TP 
++/usr/local/lib/vim/syntax/syntax.vim
++Die systemweite Einrichtung der Syntaxhervorhebung.
++.TP 
++/usr/local/lib/vim/syntax/*.vim
++Syntaxdateien fÃŒr die verschiedenen Sprachen.
++.TP 
++/usr/local/lib/vim/vimrc
++Systemweite Einstellungsdatei fÃŒr \fBVim\fP
++.TP 
++~/.vimrc
++PersÃ¶nliche Einstellungsdatei fÃŒr \fBVim\fP
++.TP 
++/usr/local/lib/vim/gvimrc
++Systemweite Einstellungsdatei fÃŒr GVim
++.TP 
++~/.gvimrc
++PersÃ¶nliche Einstellungsdatei fÃŒr GVim
++.TP 
++/usr/local/lib/vim/optwin.vim
++Das Script, das von dem Befehl Â»:optionsÂ« verwendet wird, eine schÃ¶ne
++MÃ¶glichkeit, um Optionen zu betrachten und zu setzen.
++.TP 
++/usr/local/lib/vim/menu.vim
++Systemweite Einstellungsdatei fÃŒr das MenÃŒ von GVim
++.TP 
++/usr/local/lib/vim/bugreport.vim
++Das Script zum Generieren eines Fehlerberichts. Siehe Â»:help bugsÂ«.
++.TP 
++/usr/local/lib/vim/filetype.vim
++Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
++Dateinamens. Siehe Â»:help 'filetype'Â«.
++.TP 
++/usr/local/lib/vim/scripts.vim
++Mit diesem Script erkennt Vim den Typ einer Datei anhand ihres
++Inhaltes. Siehe Â»:help 'filetype'Â«.
++.TP 
++/usr/local/lib/vim/print/*.ps
++Diese Dateien werden zum Drucken von PostScript verwendet.
++.PP
++FÃŒr die neuesten Informationen lesen Sie die Vim\-Homepage:
++.br
++<URL:http://www.vim.org/>
++.SH "SIEHE AUCH"
++vimtutor(1)
++.SH AUTOR
++\fBVim\fP wurde grÃ¶Ãtenteils von Bram Moolenaar erstellt, mit viel Hilfe von
++anderen Leuten. Siehe Â»:help creditsÂ« in \fBVim.\fP
++.br
++\fBVim\fP basiert auf Stevie, der von Tim Thompson, Tony Andrews und
++G.R. (Fred) Walter geschrieben wurde. Es ist jedoch kaum etwas vom
++ursprÃŒnglichen Code ÃŒbrig geblieben.
++.SH FEHLER
++Die sind mÃ¶glich. Siehe Â»:help todoÂ« fÃŒr eine Liste bekannter Probleme.
++.PP
++Beachten Sie, dass gewisse Dinge, die manche Leute als Fehler betrachten
++mÃ¶gen, in Wirklichkeit durch zu getreue Nachbildung des Vi\-Verhaltens
++verursacht werden. Und falls Sie denken, dass andere Dinge Fehler sind,
++Â»weil Vi es anders tutÂ«, sollten Sie einen genaueren Blick auf die Datei
++vi_diff.txt werfen (oder in Vim Â»:help vi_diff.txtÂ« tippen). Sehen Sie sich
++auch die Optionen 'compatible' und 'cpoptions' an.
+diff -Naur vim73.orig/runtime/doc/vim-fr.1 vim73/runtime/doc/vim-fr.1
+--- vim73.orig/runtime/doc/vim-fr.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/vim-fr.1	2013-06-07 17:07:10.775644572 +0000
+@@ -1,11 +1,11 @@
+-.\" Traduction Lundi 7 août 2000 par Richard Hitier
++.\" Traduction lundi 7 août 2000 par Richard Hitier
+ .\" (richard.hitier@dial.oleane.com)
+ .\" Mise à jour de la traduction par David Blanchet
+ .\" (david.blanchet@free.fr) 2006-06-10
+ .\" Mise à jour de la traduction par Dominique Pellé
+-.\" (dominique.pelle@gmail.com) 2008-11-29
++.\" (dominique.pelle@gmail.com) 2013-05-10
+ .\"
+-.TH VIM 1 "22 Février 2002"
++.TH VIM 1 "22 février 2002"
+ .SH NOM
+ vim \- Vi IMproved, éditeur de texte pour programmeurs
+ .SH SYNOPSIS
+@@ -156,7 +156,7 @@
+ {commande} est interprétée comme une commande Ex.
+ Si la {commande} contient des espaces, elle doit être entourée
+ de doubles-apostrophes (cela dépend du shell utilisé).
+-Exemple: Vim "+set si" main.c
++Exemple : Vim "+set si" main.c
+ .br
+ Note : vous pouvez utiliser jusqu'à 10 commandes "+" ou "\-c".
+ .TP
+@@ -204,7 +204,7 @@
+ \-d {périph}
+ Ouvre {périph} pour l'utiliser comme terminal.
+ Uniquement sur Amiga.
+-Exemple:
++Exemple :
+ "\-d con:20/30/600/150".
+ .TP
+ \-D
+@@ -269,7 +269,7 @@
+ Si
+ .B Vim
+ a été compilé avec le support de la fonctionnalité RIGHTLEFT pour l'édition de
+-fichiers de droite à gauche et les claviers hébreu, cette option lance
++fichiers de droite à gauche et les claviers hébreux, cette option lance
+ .B Vim
+ en mode Hébreu, c.-à-d. avec les options 'hkmap' et 'rightleft' activées.
+ Sinon, un message d'erreur est émis et
+@@ -435,7 +435,7 @@
+ \-\-
+ Délimite la fin des options.
+ Les arguments qui suivent seront considérés comme des noms de fichiers.
+-Cela permet d'éditer des fichier débutant par un '\-'.
++Cela permet d'éditer des fichiers débutant par un '\-'.
+ .TP
+ \-\-echo\-wid
+ IHM graphique GTK uniquement : retourne la Window ID sur stdout.
+@@ -586,3 +586,4 @@
+ .br
+ Cette page de manuel a été mise à jour par David Blanchet.
+ <david.blanchet@free.fr> 2006-04-10.
++Mise à jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/vim-fr.UTF-8.1 vim73/runtime/doc/vim-fr.UTF-8.1
+--- vim73.orig/runtime/doc/vim-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/vim-fr.UTF-8.1	2013-06-07 17:07:10.795644515 +0000
+@@ -1,11 +1,11 @@
+-.\" Traduction Lundi 7 aoÃ»t 2000 par Richard Hitier
++.\" Traduction lundi 7 aoÃ»t 2000 par Richard Hitier
+ .\" (richard.hitier@dial.oleane.com)
+ .\" Mise Ã  jour de la traduction par David Blanchet
+ .\" (david.blanchet@free.fr) 2006-06-10
+ .\" Mise Ã  jour de la traduction par Dominique PellÃ©
+-.\" (dominique.pelle@gmail.com) 2008-11-29
++.\" (dominique.pelle@gmail.com) 2013-05-10
+ .\"
+-.TH VIM 1 "22 FÃ©vrier 2002"
++.TH VIM 1 "22 fÃ©vrier 2002"
+ .SH NOM
+ vim \- Vi IMproved, Ã©diteur de texte pour programmeurs
+ .SH SYNOPSIS
+@@ -156,7 +156,7 @@
+ {commande} est interprÃ©tÃ©e comme une commande Ex.
+ Si la {commande} contient des espaces, elle doit Ãªtre entourÃ©e
+ de doubles-apostrophes (cela dÃ©pend du shell utilisÃ©).
+-Exemple: Vim "+set si" main.c
++Exemple : Vim "+set si" main.c
+ .br
+ Note : vous pouvez utiliser jusqu'Ã  10 commandes "+" ou "\-c".
+ .TP
+@@ -204,7 +204,7 @@
+ \-d {pÃ©riph}
+ Ouvre {pÃ©riph} pour l'utiliser comme terminal.
+ Uniquement sur Amiga.
+-Exemple:
++Exemple :
+ "\-d con:20/30/600/150".
+ .TP
+ \-D
+@@ -269,7 +269,7 @@
+ Si
+ .B Vim
+ a Ã©tÃ© compilÃ© avec le support de la fonctionnalitÃ© RIGHTLEFT pour l'Ã©dition de
+-fichiers de droite Ã  gauche et les claviers hÃ©breu, cette option lance
++fichiers de droite Ã  gauche et les claviers hÃ©breux, cette option lance
+ .B Vim
+ en mode HÃ©breu, c.-Ã -d. avec les options 'hkmap' et 'rightleft' activÃ©es.
+ Sinon, un message d'erreur est Ã©mis et
+@@ -435,7 +435,7 @@
+ \-\-
+ DÃ©limite la fin des options.
+ Les arguments qui suivent seront considÃ©rÃ©s comme des noms de fichiers.
+-Cela permet d'Ã©diter des fichier dÃ©butant par un '\-'.
++Cela permet d'Ã©diter des fichiers dÃ©butant par un '\-'.
+ .TP
+ \-\-echo\-wid
+ IHM graphique GTK uniquement : retourne la Window ID sur stdout.
+@@ -586,3 +586,4 @@
+ .br
+ Cette page de manuel a Ã©tÃ© mise Ã  jour par David Blanchet.
+ <david.blanchet@free.fr> 2006-04-10.
++Mise Ã  jour par Dominique PellÃ© <dominique.pelle@gmail.com> 2013-05-10
+diff -Naur vim73.orig/runtime/doc/vim2html.pl vim73/runtime/doc/vim2html.pl
+--- vim73.orig/runtime/doc/vim2html.pl	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/vim2html.pl	2013-06-07 17:07:10.882310935 +0000
+@@ -214,7 +214,7 @@
+ }
+ 
+ # main
+-usage() if $#ARGV < 2;
++usage() if $#ARGV < 1;
+ 
+ print "Processing tags...\n";
+ readTagFile( $ARGV[ 0 ] );
+diff -Naur vim73.orig/runtime/doc/vimdiff-fr.1 vim73/runtime/doc/vimdiff-fr.1
+--- vim73.orig/runtime/doc/vimdiff-fr.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/vimdiff-fr.1	2013-06-07 17:07:10.895644230 +0000
+@@ -14,7 +14,7 @@
+ .B Vim
+ avec deux (ou trois ou quatre) fichiers.
+ Chaque fichier est ouvert dans sa propre fenêtre.
+-Les différences entres ces fichiers sont mises en surbrillance.
++Les différences entre ces fichiers sont mises en surbrillance.
+ C'est un outil très pratique pour visualiser et reporter les
+ changements entre deux versions d'un même fichier.
+ .PP
+@@ -51,3 +51,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a été traduite par David Blanchet
+ <david.blanchet@free.fr> 2005-03-12.
++Mise à jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/vimdiff-fr.UTF-8.1 vim73/runtime/doc/vimdiff-fr.UTF-8.1
+--- vim73.orig/runtime/doc/vimdiff-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/vimdiff-fr.UTF-8.1	2013-06-07 17:07:10.912310849 +0000
+@@ -14,7 +14,7 @@
+ .B Vim
+ avec deux (ou trois ou quatre) fichiers.
+ Chaque fichier est ouvert dans sa propre fenÃªtre.
+-Les diffÃ©rences entres ces fichiers sont mises en surbrillance.
++Les diffÃ©rences entre ces fichiers sont mises en surbrillance.
+ C'est un outil trÃšs pratique pour visualiser et reporter les
+ changements entre deux versions d'un mÃªme fichier.
+ .PP
+@@ -51,3 +51,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a Ã©tÃ© traduite par David Blanchet
+ <david.blanchet@free.fr> 2005-03-12.
++Mise Ã  jour 2012-05-06, Dominique PellÃ© <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/vimtutor-fr.1 vim73/runtime/doc/vimtutor-fr.1
+--- vim73.orig/runtime/doc/vimtutor-fr.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/vimtutor-fr.1	2013-06-07 17:07:11.022310535 +0000
+@@ -3,7 +3,7 @@
+ vimtutor \- tutoriel Vim
+ .SH SYNOPSIS
+ .br
+-.B vimtutor [-g] [langue]
++.B vimtutor [\-g] [langue]
+ .SH DESCRIPTION
+ .B Vimtutor
+ lance le tutoriel
+@@ -17,7 +17,7 @@
+ .B Vim
+ \.
+ .PP
+-L'argument optionnel -g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
++L'argument optionnel \-g lance vimtutor avec gvim plutôt qu'avec vim, si l'IHM
+ graphique de vim est disponible, ou le lance avec vim si gvim n'est pas
+ disponible.
+ .PP
+@@ -57,3 +57,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a été traduite par David Blanchet
+ <david.blanchet@free.fr> 2004-12-27.
++Mise à jour 2012-05-06, Dominique Pellé <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/vimtutor-fr.UTF-8.1 vim73/runtime/doc/vimtutor-fr.UTF-8.1
+--- vim73.orig/runtime/doc/vimtutor-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/vimtutor-fr.UTF-8.1	2013-06-07 17:07:11.032310506 +0000
+@@ -3,7 +3,7 @@
+ vimtutor \- tutoriel Vim
+ .SH SYNOPSIS
+ .br
+-.B vimtutor [-g] [langue]
++.B vimtutor [\-g] [langue]
+ .SH DESCRIPTION
+ .B Vimtutor
+ lance le tutoriel
+@@ -17,7 +17,7 @@
+ .B Vim
+ \.
+ .PP
+-L'argument optionnel -g lance vimtutor avec gvim plutÃŽt qu'avec vim, si l'IHM
++L'argument optionnel \-g lance vimtutor avec gvim plutÃŽt qu'avec vim, si l'IHM
+ graphique de vim est disponible, ou le lance avec vim si gvim n'est pas
+ disponible.
+ .PP
+@@ -57,3 +57,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a Ã©tÃ© traduite par David Blanchet
+ <david.blanchet@free.fr> 2004-12-27.
++Mise Ã  jour 2012-05-06, Dominique PellÃ© <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/visual.txt vim73/runtime/doc/visual.txt
+--- vim73.orig/runtime/doc/visual.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/visual.txt	2013-06-07 17:07:11.148976840 +0000
+@@ -1,4 +1,4 @@
+-*visual.txt*    For Vim version 7.3.  Last change: 2010 Feb 17
++*visual.txt*    For Vim version 7.3.  Last change: 2012 Aug 15
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -61,15 +61,27 @@
+ 2. Starting and stopping Visual mode			*visual-start*
+ 
+ 						*v* *characterwise-visual*
+-v			start Visual mode per character.
++[count]v		Start Visual mode per character.
++			With [count] select the same number of characters or
++			lines as used for the last Visual operation, but at
++			the current cursor position, multiplied by [count].
++			When the previous Visual operation was on a block both
++			the width and height of the block are multiplied by
++			[count].
++			When there was no previous Visual operation [count]
++			characters are selected.  This is like moving the
++			cursor right N * [count] characters.  One less when
++			'selection' is not "exclusive".
+ 
+ 						*V* *linewise-visual*
+-V			start Visual mode linewise.
++[count]V		Start Visual mode linewise.
++			With [count] select that many lines.
+ 
+ 						*CTRL-V* *blockwise-visual*
+-CTRL-V			start Visual mode blockwise.  Note: Under Windows
++[count]CTRL-V		Start Visual mode blockwise.  Note: Under Windows
+ 			CTRL-V could be mapped to paste text, it doesn't work
+ 			to start Visual mode then, see |CTRL-V-alternative|.
++			[count] is used as with `v` above.
+ 
+ If you use <Esc>, click the left mouse button or use any command that
+ does a jump to another buffer while in Visual mode, the highlighting stops
+@@ -94,6 +106,18 @@
+ 			After using "p" or "P" in Visual mode the text that
+ 			was put will be selected.
+ 
++								*gn* *v_gn*
++gn			Search forward for the last used search pattern, like
++			with `n`, and start Visual mode to select the match.
++			If the cursor is on the match, visually selects it.
++			If an operator is pending, operates on the match.
++			E.g., "dgn" deletes the text of the next match.
++			If Visual mode is active, extends the selection
++			until the end of the next match.
++
++								*gN* *v_gN*
++gN			Like |gn| but searches backward, like with `N`.
++
+ 							*<LeftMouse>*
+ <LeftMouse>		Set the current cursor position.  If Visual mode is
+ 			active it is stopped.  Only when 'mouse' option is
+@@ -269,7 +293,10 @@
+ Another way to operate on the Visual area is using the |/\%V| item in a
+ pattern.  For example, to replace all '(' in the Visual area with '#': >
+ 
+-	:%s/\%V(/X/g
++	:'<,'>s/\%V(/#/g
++
++Note that the "'<,'>" will appear automatically when you press ":" in Visual
++mode.
+ 
+ ==============================================================================
+ 5. Blockwise operators					*blockwise-operators*
+diff -Naur vim73.orig/runtime/doc/windows.txt vim73/runtime/doc/windows.txt
+--- vim73.orig/runtime/doc/windows.txt	2010-08-15 12:23:23.000000000 +0000
++++ vim73/runtime/doc/windows.txt	2013-06-07 17:07:11.165643459 +0000
+@@ -1,4 +1,4 @@
+-*windows.txt*   For Vim version 7.3.  Last change: 2010 Aug 15
++*windows.txt*   For Vim version 7.3.  Last change: 2012 Nov 15
+ 
+ 
+ 		  VIM REFERENCE MANUAL    by Bram Moolenaar
+@@ -174,7 +174,8 @@
+ 		2. WinEnter for the new window
+ 		3. BufLeave for the current buffer
+ 		4. BufEnter for the new buffer
+-		This behaves like a ":split" first, and then a ":e" command.
++		This behaves like a ":split" first, and then an ":enew"
++		command.
+ 
+ :[N]vne[w] [++opt] [+cmd] [file]			*:vne* *:vnew*
+ 		Like |:new|, but split vertically.  If 'equalalways' is set
+@@ -183,7 +184,8 @@
+ 
+ :[N]new [++opt] [+cmd] {file}
+ :[N]sp[lit] [++opt] [+cmd] {file}			*:split_f*
+-		Create a new window and start editing file {file} in it.
++		Create a new window and start editing file {file} in it.  This
++		behaves like a ":split" first, and then an ":e" command.
+ 		If [+cmd] is given, execute the command when the file has been
+ 		loaded |+cmd|.
+ 		Also see |++opt|.
+@@ -246,7 +248,7 @@
+ 
+ These command modifiers can be combined to make a vertically split window
+ occupy the full height.  Example: >
+-	:vertical topleft edit tags
++	:vertical topleft split tags
+ Opens a vertically split, full-height window on the "tags" file at the far
+ left of the Vim window.
+ 
+@@ -937,9 +939,9 @@
+ :buffers[!]					*:buffers* *:ls*
+ :ls[!]		Show all buffers.  Example:
+ 
+-			1 #h  "/test/text"		line 1 ~
+-			2u    "asdf"			line 0 ~
+-			3 %a+ "version.c"		line 1 ~
++			1 #h   "/test/text"		line 1 ~
++			2u     "asdf"			line 0 ~
++			3 %a + "version.c"		line 1 ~
+ 
+ 		When the [!] is included the list will show unlisted buffers
+ 		(the term "unlisted" is a bit confusing then...).
+diff -Naur vim73.orig/runtime/doc/xxd-fr.1 vim73/runtime/doc/xxd-fr.1
+--- vim73.orig/runtime/doc/xxd-fr.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/xxd-fr.1	2013-06-07 17:07:11.205643345 +0000
+@@ -159,7 +159,7 @@
+ comblés par des octets nuls.
+ .PP
+ .I xxd \-r
+-ne génère aucune erreur lors de l'analyse. Le problème sont passés
++ne génère aucune erreur lors de l'analyse. Les problèmes sont passés
+ silencieusement.
+ .PP
+ Lors de l'édition de la représentation hexadécimale, veuillez noter que
+@@ -307,7 +307,7 @@
+ 000fffc: 0000 0000 40                   ....A
+ .PP
+ Créer un fichier d'un octet, contenant seulement le caractère 'A'.
+-Les nombres après '\-r \-s' s'ajoutent au numéros de lignes trouvées dans le
++Le nombre après '\-r \-s' s'ajoute aux numéros de lignes trouvées dans le
+ fichier ; les octets initiaux sont supprimés.
+ .br
+ \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> fichier\fR
+@@ -393,3 +393,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a été traduite par David Blanchet
+ <david.blanchet@free.fr> 2004-12-24.
++Mise à jour 2013-05-10, Dominique Pellé <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/doc/xxd-fr.UTF-8.1 vim73/runtime/doc/xxd-fr.UTF-8.1
+--- vim73.orig/runtime/doc/xxd-fr.UTF-8.1	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/doc/xxd-fr.UTF-8.1	2013-06-07 17:07:11.218976640 +0000
+@@ -159,7 +159,7 @@
+ comblÃ©s par des octets nuls.
+ .PP
+ .I xxd \-r
+-ne gÃ©nÃšre aucune erreur lors de l'analyse. Le problÃšme sont passÃ©s
++ne gÃ©nÃšre aucune erreur lors de l'analyse. Les problÃšmes sont passÃ©s
+ silencieusement.
+ .PP
+ Lors de l'Ã©dition de la reprÃ©sentation hexadÃ©cimale, veuillez noter que
+@@ -307,7 +307,7 @@
+ 000fffc: 0000 0000 40                   ....A
+ .PP
+ CrÃ©er un fichier d'un octet, contenant seulement le caractÃšre 'A'.
+-Les nombres aprÃšs '\-r \-s' s'ajoutent au numÃ©ros de lignes trouvÃ©es dans le
++Le nombre aprÃšs '\-r \-s' s'ajoute aux numÃ©ros de lignes trouvÃ©es dans le
+ fichier ; les octets initiaux sont supprimÃ©s.
+ .br
+ \fI% echo '010000: 41' | xxd \-r \-s \-0x10000 \> fichier\fR
+@@ -393,3 +393,4 @@
+ .SH TRADUCTION
+ Cette page de manuel a Ã©tÃ© traduite par David Blanchet
+ <david.blanchet@free.fr> 2004-12-24.
++Mise Ã  jour 2013-05-10, Dominique PellÃ© <dominique.pelle@gmail.com>
+diff -Naur vim73.orig/runtime/filetype.vim vim73/runtime/filetype.vim
+--- vim73.orig/runtime/filetype.vim	2010-08-03 20:44:00.000000000 +0000
++++ vim73/runtime/filetype.vim	2013-06-07 17:07:11.338976298 +0000
+@@ -1,7 +1,7 @@
+ " Vim support file to detect file types
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2010 Jul 30
++" Last Change:	2013 Jun 01
+ 
+ " Listen very carefully, I will say this only once
+ if exists("did_load_filetypes")
+@@ -17,7 +17,7 @@
+ 
+ " Ignored extensions
+ if exists("*fnameescape")
+-au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.rpmsave,?\+.rpmnew
++au BufNewFile,BufRead ?\+.orig,?\+.bak,?\+.old,?\+.new,?\+.dpkg-dist,?\+.dpkg-old,?\+.dpkg-new,?\+.dpkg-bak,?\+.rpmsave,?\+.rpmnew
+ 	\ exe "doau filetypedetect BufRead " . fnameescape(expand("<afile>:r"))
+ au BufNewFile,BufRead *~
+ 	\ let s:name = expand("<afile>") |
+@@ -75,7 +75,7 @@
+ au BufNewFile,BufRead *.aap			setf aap
+ 
+ " A2ps printing utility
+-au BufNewFile,BufRead etc/a2ps.cfg,etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
++au BufNewFile,BufRead */etc/a2ps.cfg,*/etc/a2ps/*.cfg,a2psrc,.a2psrc setf a2ps
+ 
+ " ABAB/4
+ au BufNewFile,BufRead *.abap			setf abap
+@@ -110,8 +110,7 @@
+ au BufNewFile,BufRead proftpd.conf*		call s:StarSetf('apachestyle')
+ 
+ " Apache config file
+-au BufNewFile,BufRead .htaccess,/etc/httpd/*.conf		 setf apache
+-au BufNewFile,BufRead httpd.conf*,srm.conf*,access.conf*,apache.conf*,apache2.conf*,/etc/apache2/*.conf*,/etc/httpd/conf.d/*.conf* call s:StarSetf('apache')
++au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf		setf apache
+ 
+ " XA65 MOS6510 cross assembler
+ au BufNewFile,BufRead *.a65			setf a65
+@@ -124,17 +123,25 @@
+ 	\ if expand("<afile>") !~? 'Makefile.am\>' | setf elf | endif
+ 
+ " ALSA configuration
+-au BufNewFile,BufRead ~/.asoundrc,/usr/share/alsa/alsa.conf,/etc/asound.conf	setf alsaconf
++au BufNewFile,BufRead .asoundrc,*/usr/share/alsa/alsa.conf,*/etc/asound.conf setf alsaconf
+ 
+ " Arc Macro Language
+ au BufNewFile,BufRead *.aml			setf aml
+ 
++" APT config file
++au BufNewFile,BufRead apt.conf                 setf aptconf
++au BufNewFile,BufRead */.aptitude/config       setf aptconf
++au BufNewFile,BufRead */etc/apt/apt.conf.d/{[-_[:alnum:]]\+,[-_.[:alnum:]]\+.conf} setf aptconf
++
+ " Arch Inventory file
+ au BufNewFile,BufRead .arch-inventory,=tagging-method	setf arch
+ 
+ " ART*Enterprise (formerly ART-IM)
+ au BufNewFile,BufRead *.art			setf art
+ 
++" AsciiDoc
++au BufNewFile,BufRead *.asciidoc		setf asciidoc
++
+ " ASN.1
+ au BufNewFile,BufRead *.asn,*.asn1		setf asn
+ 
+@@ -157,7 +164,7 @@
+ 	\ endif
+ 
+ " Grub (must be before catch *.lst)
+-au BufNewFile,BufRead /boot/grub/menu.lst,/boot/grub/grub.conf,/etc/grub.conf	setf grub
++au BufNewFile,BufRead */boot/grub/menu.lst,*/boot/grub/grub.conf,*/etc/grub.conf setf grub
+ 
+ " Assembly (all kinds)
+ " *.lst is not pure assembly, it has two extra columns (address, byte codes)
+@@ -240,8 +247,8 @@
+   endif
+ endfunc
+ 
+-" Visual Basic Script (close to Visual Basic)
+-au BufNewFile,BufRead *.vbs,*.dsm,*.ctl		setf vb
++" Visual Basic Script (close to Visual Basic) or Visual Basic .NET
++au BufNewFile,BufRead *.vb,*.vbs,*.dsm,*.ctl	setf vb
+ 
+ " IBasic file (similar to QBasic)
+ au BufNewFile,BufRead *.iba,*.ibi		setf ibasic
+@@ -296,7 +303,7 @@
+ au BufNewFile,BufRead *.bl			setf blank
+ 
+ " Blkid cache file
+-au BufNewFile,BufRead /etc/blkid.tab,/etc/blkid.tab.old   setf xml
++au BufNewFile,BufRead */etc/blkid.tab,*/etc/blkid.tab.old   setf xml
+ 
+ " C or lpc
+ au BufNewFile,BufRead *.c			call s:FTlpc()
+@@ -317,21 +324,21 @@
+ 
+ " Calendar
+ au BufNewFile,BufRead calendar			setf calendar
+-au BufNewFile,BufRead */.calendar/*,
+-	\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
+-	\					call s:StarSetf('calendar')
+ 
+ " C#
+ au BufNewFile,BufRead *.cs			setf cs
+ 
++" CSDL
++au BufNewFile,BufRead *.csdl			setf csdl
++
+ " Cabal
+-au BufNewFile,BufRead *.cabal       		setf cabal
++au BufNewFile,BufRead *.cabal			setf cabal
+ 
+ " Cdrdao TOC
+ au BufNewFile,BufRead *.toc			setf cdrtoc
+ 
+ " Cdrdao config
+-au BufNewFile,BufRead etc/cdrdao.conf,etc/defaults/cdrdao,etc/default/cdrdao,~/.cdrdao						setf cdrdaoconf
++au BufNewFile,BufRead */etc/cdrdao.conf,*/etc/defaults/cdrdao,*/etc/default/cdrdao,.cdrdao	setf cdrdaoconf
+ 
+ " Cfengine
+ au BufNewFile,BufRead cfengine.conf		setf cfengine
+@@ -371,7 +378,11 @@
+ 
+ func! s:FTheader()
+   if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
+-    setf objc
++    if exists("g:c_syntax_for_h")
++      setf objc
++    else
++      setf objcpp
++    endif
+   elseif exists("g:c_syntax_for_h")
+     setf c
+   elseif exists("g:ch_syntax_for_h")
+@@ -484,11 +495,14 @@
+ 	\   setf clipper |
+ 	\ endif
+ 
++" Clojure
++au BufNewFile,BufRead *.clj,*.cljs		setf clojure
++
+ " Cmake
+ au BufNewFile,BufRead CMakeLists.txt,*.cmake,*.cmake.in		setf cmake
+ 
+ " Cmusrc
+-au BufNewFile,BufRead ~/.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
++au BufNewFile,BufRead */.cmus/{autosave,rc,command-history,*.theme} setf cmusrc
+ au BufNewFile,BufRead */cmus/{rc,*.theme}			setf cmusrc
+ 
+ " Cobol
+@@ -536,7 +550,7 @@
+ au BufNewFile,BufRead *.cfg			setf cfg
+ 
+ " Cucumber
+-au BufNewFile,BufRead *.feature 		setf cucumber
++au BufNewFile,BufRead *.feature			setf cucumber
+ 
+ " Communicating Sequential Processes
+ au BufNewFile,BufRead *.csp,*.fdr		setf csp
+@@ -553,11 +567,15 @@
+ 	\| endif
+ 
+ " Debian Sources.list
+-au BufNewFile,BufRead /etc/apt/sources.list	setf debsources
++au BufNewFile,BufRead */etc/apt/sources.list		setf debsources
++au BufNewFile,BufRead */etc/apt/sources.list.d/*.list	setf debsources
+ 
+ " Deny hosts
+ au BufNewFile,BufRead denyhosts.conf		setf denyhosts
+ 
++" dnsmasq(8) configuration files
++au BufNewFile,BufRead */etc/dnsmasq.conf	setf dnsmasq
++
+ " ROCKLinux package description
+ au BufNewFile,BufRead *.desc			setf desc
+ 
+@@ -566,7 +584,10 @@
+ 
+ func! s:DtraceCheck()
+   let lines = getline(1, min([line("$"), 100]))
+-  if match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
++  if match(lines, '^module\>\|^import\>') > -1
++    " D files often start with a module and/or import statement.
++    setf d
++  elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
+     setf dtrace
+   else
+     setf d
+@@ -586,7 +607,7 @@
+ au BufNewFile,BufRead *.diff,*.rej,*.patch	setf diff
+ 
+ " Dircolors
+-au BufNewFile,BufRead .dir_colors,/etc/DIR_COLORS	setf dircolors
++au BufNewFile,BufRead .dir_colors,.dircolors,*/etc/DIR_COLORS	setf dircolors
+ 
+ " Diva (with Skill) or InstallShield
+ au BufNewFile,BufRead *.rul
+@@ -626,6 +647,9 @@
+ " DTD (Document Type Definition for XML)
+ au BufNewFile,BufRead *.dtd			setf dtd
+ 
++" DTS/DSTI (device tree files)
++au BufNewFile,BufRead *.dts,*.dtsi		setf dts
++
+ " EDIF (*.edf,*.edif,*.edn,*.edo)
+ au BufNewFile,BufRead *.ed\(f\|if\|n\|o\)	setf edif
+ 
+@@ -677,6 +701,9 @@
+ " Exports
+ au BufNewFile,BufRead exports			setf exports
+ 
++" Falcon
++au BufNewFile,BufRead *.fal			setf falcon
++
+ " Fantom
+ au BufNewFile,BufRead *.fan,*.fwt		setf fan
+ 
+@@ -725,14 +752,18 @@
+ au BufNewFile,BufRead *.ged,lltxxxxx.txt	setf gedcom
+ 
+ " Git
+-autocmd BufNewFile,BufRead *.git/COMMIT_EDITMSG setf gitcommit
+-autocmd BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
+-autocmd BufNewFile,BufRead git-rebase-todo      setf gitrebase
+-autocmd BufNewFile,BufRead .msg.[0-9]*
++au BufNewFile,BufRead *.git/COMMIT_EDITMSG	setf gitcommit
++au BufNewFile,BufRead *.git/MERGE_MSG		setf gitcommit
++au BufNewFile,BufRead *.git/config,.gitconfig,.gitmodules setf gitconfig
++au BufNewFile,BufRead *.git/modules/**/COMMIT_EDITMSG setf gitcommit
++au BufNewFile,BufRead *.git/modules/**/config	setf gitconfig
++au BufNewFile,BufRead */.config/git/config	setf gitconfig
++au BufNewFile,BufRead git-rebase-todo		setf gitrebase
++au BufNewFile,BufRead .msg.[0-9]*
+       \ if getline(1) =~ '^From.*# This line is ignored.$' |
+       \   setf gitsendemail |
+       \ endif
+-autocmd BufNewFile,BufRead *.git/**
++au BufNewFile,BufRead *.git/**
+       \ if getline(1) =~ '^\x\{40\}\>\|^ref: ' |
+       \   setf git |
+       \ endif
+@@ -746,7 +777,15 @@
+ " GPG
+ au BufNewFile,BufRead */.gnupg/options		setf gpg
+ au BufNewFile,BufRead */.gnupg/gpg.conf		setf gpg
+-au BufNewFile,BufRead /usr/**/gnupg/options.skel setf gpg
++au BufNewFile,BufRead */usr/**/gnupg/options.skel setf gpg
++
++" gnash(1) configuration files
++au BufNewFile,BufRead gnashrc,.gnashrc,gnashpluginrc,.gnashpluginrc setf gnash
++
++" Gitolite
++au BufNewFile,BufRead gitolite.conf		setf gitolite
++au BufNewFile,BufRead */gitolite-admin/conf/*	call s:StarSetf('gitolite')
++au BufNewFile,BufRead {,.}gitolite.rc,example.gitolite.rc	setf perl
+ 
+ " Gnuplot scripts
+ au BufNewFile,BufRead *.gpi			setf gnuplot
+@@ -764,7 +803,7 @@
+ au BufNewFile,BufRead *.gsp			setf gsp
+ 
+ " Group file
+-au BufNewFile,BufRead /etc/group,/etc/group-,/etc/group.edit,/etc/gshadow,/etc/gshadow-,/etc/gshadow.edit,/var/backups/group.bak,/var/backups/gshadow.bak  setf group
++au BufNewFile,BufRead */etc/group,*/etc/group-,*/etc/group.edit,*/etc/gshadow,*/etc/gshadow-,*/etc/gshadow.edit,*/var/backups/group.bak,*/var/backups/gshadow.bak  setf group
+ 
+ " GTK RC
+ au BufNewFile,BufRead .gtkrc,gtkrc		setf gtkrc
+@@ -776,7 +815,7 @@
+ au BufNewFile,BufRead *.hsc,*.hsm		setf hamster
+ 
+ " Haskell
+-au BufNewFile,BufRead *.hs,*.hs-boot 		setf haskell
++au BufNewFile,BufRead *.hs,*.hs-boot		setf haskell
+ au BufNewFile,BufRead *.lhs			setf lhaskell
+ au BufNewFile,BufRead *.chs			setf chaskell
+ 
+@@ -823,10 +862,10 @@
+ au BufNewFile,BufRead *.tmpl			setf htmlcheetah
+ 
+ " Host config
+-au BufNewFile,BufRead /etc/host.conf		setf hostconf
++au BufNewFile,BufRead */etc/host.conf		setf hostconf
+ 
+ " Hosts access
+-au BufNewFile,BufRead /etc/hosts.allow,/etc/hosts.deny  setf hostsaccess
++au BufNewFile,BufRead */etc/hosts.allow,*/etc/hosts.deny  setf hostsaccess
+ 
+ " Hyper Builder
+ au BufNewFile,BufRead *.hb			setf hb
+@@ -869,7 +908,9 @@
+   " Cproto files have a comment in the first line and a function prototype in
+   " the second line, it always ends in ";".  Indent files may also have
+   " comments, thus we can't match comments to see the difference.
+-  if getline(2) =~ ';$'
++  " IDL files can have a single ';' in the second line, require at least one
++  " chacter before the ';'.
++  if getline(2) =~ '.;$'
+     setf cpp
+   else
+     exe 'setf ' . a:default
+@@ -884,7 +925,7 @@
+ au BufNewFile,BufRead *.inf,*.INF		setf inform
+ 
+ " Initng
+-au BufNewFile,BufRead /etc/initng/**/*.i,*.ii	setf initng
++au BufNewFile,BufRead */etc/initng/**/*.i,*.ii	setf initng
+ 
+ " Ipfilter
+ au BufNewFile,BufRead ipf.conf,ipf6.conf,ipf.rules	setf ipfilter
+@@ -914,7 +955,7 @@
+ au BufNewFile,BufRead *.jj,*.jjt		setf javacc
+ 
+ " JavaScript, ECMAScript
+-au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx	setf javascript
++au BufNewFile,BufRead *.js,*.javascript,*.es,*.jsx,*.json   setf javascript
+ 
+ " Java Server Pages
+ au BufNewFile,BufRead *.jsp			setf jsp
+@@ -929,6 +970,9 @@
+ " Jgraph
+ au BufNewFile,BufRead *.jgr			setf jgraph
+ 
++" Jovial
++au BufNewFile,BufRead *.jov,*.j73,*.jovial	setf jovial
++
+ " Kixtart
+ au BufNewFile,BufRead *.kix			setf kix
+ 
+@@ -948,7 +992,7 @@
+ au BufNewFile,BufRead *.latte,*.lte		setf latte
+ 
+ " Limits
+-au BufNewFile,BufRead /etc/limits		setf limits
++au BufNewFile,BufRead */etc/limits,*/etc/*limits.conf,*/etc/*limits.d/*.conf	setf limits
+ 
+ " LambdaProlog (*.mod too, see Modsim)
+ au BufNewFile,BufRead *.sig			setf lprolog
+@@ -963,10 +1007,10 @@
+ au BufNewFile,BufRead *.lex,*.l			setf lex
+ 
+ " Libao
+-au BufNewFile,BufRead /etc/libao.conf,*/.libao	setf libao
++au BufNewFile,BufRead */etc/libao.conf,*/.libao	setf libao
+ 
+ " Libsensors
+-au BufNewFile,BufRead /etc/sensors.conf		setf sensors
++au BufNewFile,BufRead */etc/sensors.conf,*/etc/sensors3.conf	setf sensors
+ 
+ " LFTP
+ au BufNewFile,BufRead lftp.conf,.lftprc,*lftp/rc	setf lftp
+@@ -975,7 +1019,7 @@
+ au BufNewFile,BufRead *.ll			setf lifelines
+ 
+ " Lilo: Linux loader
+-au BufNewFile,BufRead lilo.conf*		call s:StarSetf('lilo')
++au BufNewFile,BufRead lilo.conf			setf lilo
+ 
+ " Lisp (*.el = ELisp, *.cl = Common Lisp, *.jl = librep Lisp)
+ if has("fname_case")
+@@ -997,10 +1041,10 @@
+ au BufNewFile,BufRead */LiteStep/*/*.rc		setf litestep
+ 
+ " Login access
+-au BufNewFile,BufRead /etc/login.access		setf loginaccess
++au BufNewFile,BufRead */etc/login.access	setf loginaccess
+ 
+ " Login defs
+-au BufNewFile,BufRead /etc/login.defs		setf logindefs
++au BufNewFile,BufRead */etc/login.defs		setf logindefs
+ 
+ " Logtalk
+ au BufNewFile,BufRead *.lgt			setf logtalk
+@@ -1031,7 +1075,7 @@
+ au BufNewFile,BufRead snd.\d\+,.letter,.letter.\d\+,.followup,.article,.article.\d\+,pico.\d\+,mutt{ng,}-*-\w\+,mutt[[:alnum:]_-]\{6\},ae\d\+.txt,/tmp/SLRN[0-9A-Z.]\+,*.eml setf mail
+ 
+ " Mail aliases
+-au BufNewFile,BufRead /etc/mail/aliases,/etc/aliases	setf mailaliases
++au BufNewFile,BufRead */etc/mail/aliases,*/etc/aliases	setf mailaliases
+ 
+ " Mailcap configuration file
+ au BufNewFile,BufRead .mailcap,mailcap		setf mailcap
+@@ -1042,11 +1086,14 @@
+ " MakeIndex
+ au BufNewFile,BufRead *.ist,*.mst		setf ist
+ 
++" Mallard
++au BufNewFile,BufRead *.page			setf mallard
++
+ " Manpage
+ au BufNewFile,BufRead *.man			setf man
+ 
+ " Man config
+-au BufNewFile,BufRead /etc/man.conf,man.config	setf manconf
++au BufNewFile,BufRead */etc/man.conf,man.config	setf manconf
+ 
+ " Maple V
+ au BufNewFile,BufRead *.mv,*.mpl,*.mws		setf maple
+@@ -1055,7 +1102,7 @@
+ au BufNewFile,BufRead *.map			setf map
+ 
+ " Markdown
+-au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,README.md  setf markdown
++au BufNewFile,BufRead *.markdown,*.mdown,*.mkd,*.mkdn,*.mdwn,README.md  setf markdown
+ 
+ " Mason
+ au BufNewFile,BufRead *.mason,*.mhtml		setf mason
+@@ -1094,11 +1141,14 @@
+ " Maya Extension Language
+ au BufNewFile,BufRead *.mel			setf mel
+ 
++" Mercurial (hg) commit file
++au BufNewFile,BufRead hg-editor-*.txt		setf hgcommit
++
+ " Mercurial config (looks like generic config file)
+ au BufNewFile,BufRead *.hgrc,*hgrc		setf cfg
+ 
+-" Messages
+-au BufNewFile,BufRead /var/log/messages,/var/log/messages.*[0-9]  setf messages
++" Messages (logs mostly)
++au BufNewFile,BufRead */log/{auth,cron,daemon,debug,kern,lpr,mail,messages,news/news,syslog,user}{,.log,.err,.info,.warn,.crit,.notice}{,.[0-9]*,-[0-9]*} setf messages
+ 
+ " Metafont
+ au BufNewFile,BufRead *.mf			setf mf
+@@ -1154,11 +1204,7 @@
+ au BufNewFile,BufRead *.moo			setf moo
+ 
+ " Modconf
+-au BufNewFile,BufRead /etc/modules.conf,/etc/conf.modules	setf modconf
+-au BufNewFile,BufRead /etc/modutils/*
+-	\ if executable(expand("<afile>")) != 1
+-	\|  call s:StarSetf('modconf')
+-	\|endif
++au BufNewFile,BufRead */etc/modules.conf,*/etc/modules,*/etc/conf.modules setf modconf
+ 
+ " Mplayer config
+ au BufNewFile,BufRead mplayer.conf,*/.mplayer/config	setf mplayerconf
+@@ -1175,8 +1221,11 @@
+ " Mysql
+ au BufNewFile,BufRead *.mysql			setf mysql
+ 
++" Mutt setup files (must be before catch *.rc)
++au BufNewFile,BufRead */etc/Muttrc.d/*		call s:StarSetf('muttrc')
++
+ " M$ Resource files
+-au BufNewFile,BufRead *.rc			setf rc
++au BufNewFile,BufRead *.rc,*.rch		setf rc
+ 
+ " MuPAD source
+ au BufRead,BufNewFile *.mu			setf mupad
+@@ -1188,7 +1237,7 @@
+ au BufNewFile,BufRead Mutt{ng,}rc		setf muttrc
+ 
+ " Nano
+-au BufNewFile,BufRead /etc/nanorc,.nanorc	setf nanorc
++au BufNewFile,BufRead */etc/nanorc,.nanorc	setf nanorc
+ 
+ " Nastran input/DMAP
+ "au BufNewFile,BufRead *.dat			setf nastran
+@@ -1199,6 +1248,9 @@
+ " Netrc
+ au BufNewFile,BufRead .netrc			setf netrc
+ 
++" Ninja file
++au BufNewFile,BufRead *.ninja			setf ninja
++
+ " Novell netware batch files
+ au BufNewFile,BufRead *.ncf			setf ncf
+ 
+@@ -1240,10 +1292,10 @@
+ au BufNewFile,BufRead *.nqc			setf nqc
+ 
+ " NSIS
+-au BufNewFile,BufRead *.nsi			setf nsis
++au BufNewFile,BufRead *.nsi,*.nsh		setf nsis
+ 
+ " OCAML
+-au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly	setf ocaml
++au BufNewFile,BufRead *.ml,*.mli,*.mll,*.mly,.ocamlinit	setf ocaml
+ 
+ " Occam
+ au BufNewFile,BufRead *.occ			setf occam
+@@ -1264,13 +1316,13 @@
+ au BufNewFile,BufRead pf.conf			setf pf
+ 
+ " Pam conf
+-au BufNewFile,BufRead /etc/pam.conf		setf pamconf
++au BufNewFile,BufRead */etc/pam.conf		setf pamconf
+ 
+ " PApp
+ au BufNewFile,BufRead *.papp,*.pxml,*.pxsl	setf papp
+ 
+ " Password file
+-au BufNewFile,BufRead /etc/passwd,/etc/passwd-,/etc/passwd.edit,/etc/shadow,/etc/shadow-,/var/backups/passwd.bak,/var/backups/shadow.bak setf passwd
++au BufNewFile,BufRead */etc/passwd,*/etc/passwd-,*/etc/passwd.edit,*/etc/shadow,*/etc/shadow-,*/etc/shadow.edit,*/var/backups/passwd.bak,*/var/backups/shadow.bak setf passwd
+ 
+ " Pascal (also *.p)
+ au BufNewFile,BufRead *.pas			setf pascal
+@@ -1402,7 +1454,7 @@
+ 
+ " Obj 3D file format
+ " TODO: is there a way to avoid MS-Windows Object files?
+-au BufNewFile,BufRead *.obj         		setf obj
++au BufNewFile,BufRead *.obj			setf obj
+ 
+ " Oracle Pro*C/C++
+ au BufNewFile,BufRead *.pc			setf proc
+@@ -1497,7 +1549,7 @@
+ au BufNewFile,BufRead *.pml			setf promela
+ 
+ " Protocols
+-au BufNewFile,BufRead /etc/protocols		setf protocols
++au BufNewFile,BufRead */etc/protocols		setf protocols
+ 
+ " Pyrex
+ au BufNewFile,BufRead *.pyx,*.pxd		setf pyrex
+@@ -1528,7 +1580,7 @@
+ au BufNewFile,BufRead *.rib			setf rib
+ 
+ " Rexx
+-au BufNewFile,BufRead *.rexx,*.rex,*.jrexx,*.rxj,*.orx	setf rexx
++au BufNewFile,BufRead *.rex,*.orx,*.rxo,*.rxj,*.jrexx,*.rexxj,*.rexx,*.testGroup,*.testUnit	setf rexx
+ 
+ " R (Splus)
+ if has("fname_case")
+@@ -1578,13 +1630,17 @@
+     endif
+   endfor
+ 
+-  " Nothing recognized, assume Rexx
+-  setf rexx
++  " Nothing recognized, use user default or assume Rexx
++  if exists("g:filetype_r")
++    exe "setf " . g:filetype_r
++  else
++    " Rexx used to be the default, but R appears to be much more popular.
++    setf r
++  endif
+ endfunc
+ 
+ " Remind
+-au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
+-au BufNewFile,BufRead *.remind,*.rem		setf remind
++au BufNewFile,BufRead .reminders,*.remind,*.rem		setf remind
+ 
+ " Resolv.conf
+ au BufNewFile,BufRead resolv.conf		setf resolv
+@@ -1592,6 +1648,9 @@
+ " Relax NG Compact
+ au BufNewFile,BufRead *.rnc			setf rnc
+ 
++" Relax NG XML
++au BufNewFile,BufRead *.rng			setf rng
++
+ " RPL/2
+ au BufNewFile,BufRead *.rpl			setf rpl
+ 
+@@ -1611,7 +1670,16 @@
+ au BufNewFile,BufRead .irbrc,irbrc		setf ruby
+ 
+ " Ruby
+-au BufNewFile,BufRead *.rb,*.rbw,*.gem,*.gemspec	setf ruby
++au BufNewFile,BufRead *.rb,*.rbw		setf ruby
++
++" RubyGems
++au BufNewFile,BufRead *.gemspec			setf ruby
++
++" Rackup
++au BufNewFile,BufRead *.ru			setf ruby
++
++" Bundler
++au BufNewFile,BufRead Gemfile			setf ruby
+ 
+ " Ruby on Rails
+ au BufNewFile,BufRead *.builder,*.rxml,*.rjs	setf ruby
+@@ -1638,7 +1706,7 @@
+ au BufNewFile,BufRead *.sci,*.sce		setf scilab
+ 
+ " SCSS
+-au BufNewFile,BufRead *.scss 			setf scss
++au BufNewFile,BufRead *.scss			setf scss
+ 
+ " SD: Streaming Descriptors
+ au BufNewFile,BufRead *.sd			setf sd
+@@ -1675,26 +1743,27 @@
+ endfunc
+ 
+ " Services
+-au BufNewFile,BufRead /etc/services		setf services
++au BufNewFile,BufRead */etc/services		setf services
+ 
+ " Service Location config
+-au BufNewFile,BufRead /etc/slp.conf		setf slpconf
++au BufNewFile,BufRead */etc/slp.conf		setf slpconf
+ 
+ " Service Location registration
+-au BufNewFile,BufRead /etc/slp.reg		setf slpreg
++au BufNewFile,BufRead */etc/slp.reg		setf slpreg
+ 
+ " Service Location SPI
+-au BufNewFile,BufRead /etc/slp.spi		setf slpspi
++au BufNewFile,BufRead */etc/slp.spi		setf slpspi
+ 
+ " Setserial config
+-au BufNewFile,BufRead /etc/serial.conf		setf setserial
++au BufNewFile,BufRead */etc/serial.conf		setf setserial
+ 
+ " SGML
+ au BufNewFile,BufRead *.sgm,*.sgml
+ 	\ if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'linuxdoc' |
+ 	\   setf sgmllnx |
+ 	\ elseif getline(1) =~ '<!DOCTYPE.*DocBook' || getline(2) =~ '<!DOCTYPE.*DocBook' |
+-	\   let b:docbk_type="sgml" |
++	\   let b:docbk_type = "sgml" |
++	\   let b:docbk_ver = 4 |
+ 	\   setf docbk |
+ 	\ else |
+ 	\   setf sgml |
+@@ -1714,7 +1783,7 @@
+ " Gentoo ebuilds are actually bash scripts
+ au BufNewFile,BufRead .bashrc*,bashrc,bash.bashrc,.bash_profile*,.bash_logout*,*.bash,*.ebuild call SetFileTypeSH("bash")
+ au BufNewFile,BufRead .kshrc*,*.ksh call SetFileTypeSH("ksh")
+-au BufNewFile,BufRead /etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
++au BufNewFile,BufRead */etc/profile,.profile*,*.sh,*.env call SetFileTypeSH(getline(1))
+ 
+ " Also called from scripts.vim.
+ func! SetFileTypeSH(name)
+@@ -1729,6 +1798,10 @@
+     " Some .sh scripts contain #!/bin/tcsh.
+     call SetFileTypeShell("tcsh")
+     return
++  elseif a:name =~ '\<zsh\>'
++    " Some .sh scripts contain #!/bin/zsh.
++    call SetFileTypeShell("zsh")
++    return
+   elseif a:name =~ '\<ksh\>'
+     let b:is_kornshell = 1
+     if exists("b:is_bash")
+@@ -1797,12 +1870,12 @@
+ endfunc
+ 
+ " Z-Shell script
+-au BufNewFile,BufRead .zprofile,/etc/zprofile,.zfbfmarks  setf zsh
++au BufNewFile,BufRead .zprofile,*/etc/zprofile,.zfbfmarks  setf zsh
+ au BufNewFile,BufRead .zsh*,.zlog*,.zcompdump*  call s:StarSetf('zsh')
+-au BufNewFile,BufRead *.zsh 			setf zsh
++au BufNewFile,BufRead *.zsh			setf zsh
+ 
+ " Scheme
+-au BufNewFile,BufRead *.scm,*.ss		setf scheme
++au BufNewFile,BufRead *.scm,*.ss,*.rkt		setf scheme
+ 
+ " Screen RC
+ au BufNewFile,BufRead .screenrc,screenrc	setf screen
+@@ -1829,6 +1902,8 @@
+ au BufNewFile,BufRead *.cls
+ 	\ if getline(1) =~ '^%' |
+ 	\  setf tex |
++	\ elseif getline(1)[0] == '#' && getline(1) =~ 'rexx' |
++	\  setf rexx |
+ 	\ else |
+ 	\  setf st |
+ 	\ endif
+@@ -1868,7 +1943,7 @@
+ let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
+ func! s:FTRules()
+   let path = expand('<amatch>:p')
+-  if path =~ '^/etc/udev/\%(rules\.d/\)\=.*\.rules$'
++  if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
+     setf udevrules
+     return
+   endif
+@@ -1956,13 +2031,13 @@
+ au BufNewFile,BufRead *.cm			setf voscm
+ 
+ " Sysctl
+-au BufNewFile,BufRead /etc/sysctl.conf		setf sysctl
++au BufNewFile,BufRead */etc/sysctl.conf,*/etc/sysctl.d/*.conf	setf sysctl
+ 
+ " Synopsys Design Constraints
+ au BufNewFile,BufRead *.sdc			setf sdc
+ 
+ " Sudoers
+-au BufNewFile,BufRead /etc/sudoers,sudoers.tmp	setf sudoers
++au BufNewFile,BufRead */etc/sudoers,sudoers.tmp	setf sudoers
+ 
+ " SVG (Scalable Vector Graphics)
+ au BufNewFile,BufRead *.svg			setf svg
+@@ -2089,6 +2164,9 @@
+ " TPP - Text Presentation Program
+ au BufNewFile,BufReadPost *.tpp			setf tpp
+ 
++" Treetop
++au BufRead,BufNewFile *.treetop			setf treetop
++
+ " Trustees
+ au BufNewFile,BufRead trustees.conf		setf trustees
+ 
+@@ -2101,23 +2179,34 @@
+ " TSS - Command Line (temporary)
+ au BufNewFile,BufReadPost *.tsscl		setf tsscl
+ 
++" TWIG files
++au BufNewFile,BufReadPost *.twig		setf twig
++
+ " Motif UIT/UIL files
+ au BufNewFile,BufRead *.uit,*.uil		setf uil
+ 
+ " Udev conf
+-au BufNewFile,BufRead /etc/udev/udev.conf	setf udevconf
++au BufNewFile,BufRead */etc/udev/udev.conf	setf udevconf
+ 
+ " Udev permissions
+-au BufNewFile,BufRead /etc/udev/permissions.d/*.permissions setf udevperm
++au BufNewFile,BufRead */etc/udev/permissions.d/*.permissions setf udevperm
+ "
+ " Udev symlinks config
+-au BufNewFile,BufRead /etc/udev/cdsymlinks.conf	setf sh
++au BufNewFile,BufRead */etc/udev/cdsymlinks.conf	setf sh
+ 
+ " UnrealScript
+ au BufNewFile,BufRead *.uc			setf uc
+ 
+ " Updatedb
+-au BufNewFile,BufRead /etc/updatedb.conf	setf updatedb
++au BufNewFile,BufRead */etc/updatedb.conf	setf updatedb
++
++" Upstart (init(8)) config files
++au BufNewFile,BufRead */usr/share/upstart/*.conf               setf upstart
++au BufNewFile,BufRead */usr/share/upstart/*.override           setf upstart
++au BufNewFile,BufRead */etc/init/*.conf,*/etc/init/*.override  setf upstart
++au BufNewFile,BufRead */.init/*.conf,*/.init/*.override        setf upstart
++au BufNewFile,BufRead */.config/upstart/*.conf                 setf upstart
++au BufNewFile,BufRead */.config/upstart/*.override             setf upstart
+ 
+ " Vera
+ au BufNewFile,BufRead *.vr,*.vri,*.vrh		setf vera
+@@ -2209,15 +2298,18 @@
+ " XFree86 config
+ au BufNewFile,BufRead XF86Config
+ 	\ if getline(1) =~ '\<XConfigurator\>' |
+-	\   let b:xf86c_xfree86_version = 3 |
++	\   let b:xf86conf_xfree86_version = 3 |
+ 	\ endif |
+ 	\ setf xf86conf
++au BufNewFile,BufRead */xorg.conf.d/*.conf
++	\ let b:xf86conf_xfree86_version = 4 |
++	\ setf xf86conf
+ 
+ " Xorg config
+-au BufNewFile,BufRead xorg.conf,xorg.conf-4	let b:xf86c_xfree86_version = 4 | setf xf86conf
++au BufNewFile,BufRead xorg.conf,xorg.conf-4	let b:xf86conf_xfree86_version = 4 | setf xf86conf
+ 
+ " Xinetd conf
+-au BufNewFile,BufRead /etc/xinetd.conf		setf xinetd
++au BufNewFile,BufRead */etc/xinetd.conf		setf xinetd
+ 
+ " XS Perl extension interface language
+ au BufNewFile,BufRead *.xs			setf xs
+@@ -2237,8 +2329,16 @@
+   let n = 1
+   while n < 100 && n < line("$")
+     let line = getline(n)
+-    if line =~ '<!DOCTYPE.*DocBook'
++    " DocBook 4 or DocBook 5.
++    let is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
++    let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
++    if is_docbook4 || is_docbook5
+       let b:docbk_type = "xml"
++      if is_docbook5
++	let b:docbk_ver = 5
++      else
++	let b:docbk_ver = 4
++      endif
+       setf docbk
+       return
+     endif
+@@ -2264,7 +2364,7 @@
+ au BufNewFile,BufRead *.tpm			setf xml
+ 
+ " Xdg menus
+-au BufNewFile,BufRead /etc/xdg/menus/*.menu	setf xml
++au BufNewFile,BufRead */etc/xdg/menus/*.menu	setf xml
+ 
+ " ATI graphics driver configuration
+ au BufNewFile,BufRead fglrxrc			setf xml
+@@ -2273,6 +2373,9 @@
+ au BufNewFile,BufRead *.xlf			setf xml
+ au BufNewFile,BufRead *.xliff			setf xml
+ 
++" XML User Interface Language
++au BufNewFile,BufRead *.xul			setf xml
++
+ " X11 xmodmap (also see below)
+ au BufNewFile,BufRead *Xmodmap			setf xmodmap
+ 
+@@ -2312,6 +2415,12 @@
+ " Yaml
+ au BufNewFile,BufRead *.yaml,*.yml		setf yaml
+ 
++" yum conf (close enough to dosini)
++au BufNewFile,BufRead */etc/yum.conf		setf dosini
++
++" Zimbu
++au BufNewFile,BufRead *.zu			setf zimbu
++
+ " Zope
+ "   dtml (zope dynamic template markup language), pt (zope page template),
+ "   cpt (zope form controller page template)
+@@ -2348,8 +2457,9 @@
+ " Most of these should call s:StarSetf() to avoid names ending in .gz and the
+ " like are used.
+ 
+-" More Apache files.
+-au BufNewFile,BufRead /etc/apache2/conf.*/*,/etc/apache2/sites-*/*,/etc/apache2/mods-*/*		call s:StarSetf('apache')
++" More Apache config files
++au BufNewFile,BufRead access.conf*,apache.conf*,apache2.conf*,httpd.conf*,srm.conf*	call s:StarSetf('apache')
++au BufNewFile,BufRead */etc/apache2/*.conf*,*/etc/apache2/conf.*/*,*/etc/apache2/mods-*/*,*/etc/apache2/sites-*/*,*/etc/httpd/conf.d/*.conf*		call s:StarSetf('apache')
+ 
+ " Asterisk config file
+ au BufNewFile,BufRead *asterisk/*.conf*		call s:StarSetf('asterisk')
+@@ -2361,6 +2471,11 @@
+ " BIND zone
+ au BufNewFile,BufRead */named/db.*,*/bind/db.*	call s:StarSetf('bindzone')
+ 
++" Calendar
++au BufNewFile,BufRead */.calendar/*,
++	\*/share/calendar/*/calendar.*,*/share/calendar/calendar.*
++	\					call s:StarSetf('calendar')
++
+ " Changelog
+ au BufNewFile,BufRead [cC]hange[lL]og*
+ 	\ if getline(1) =~ '; urgency='
+@@ -2370,10 +2485,10 @@
+ 	\|endif
+ 
+ " Crontab
+-au BufNewFile,BufRead crontab,crontab.*,/etc/cron.d/*		call s:StarSetf('crontab')
++au BufNewFile,BufRead crontab,crontab.*,*/etc/cron.d/*		call s:StarSetf('crontab')
+ 
+-" Debian Sources.list
+-au BufNewFile,BufRead /etc/apt/sources.list.d/*	call s:StarSetf('debsources')
++" dnsmasq(8) configuration
++au BufNewFile,BufRead */etc/dnsmasq.d/*		call s:StarSetf('dnsmasq')
+ 
+ " Dracula
+ au BufNewFile,BufRead drac.*			call s:StarSetf('dracula')
+@@ -2390,7 +2505,7 @@
+ 	\|endif
+ 
+ " Gedcom
+-au BufNewFile,BufRead /tmp/lltmp*		call s:StarSetf('gedcom')
++au BufNewFile,BufRead */tmp/lltmp*		call s:StarSetf('gedcom')
+ 
+ " GTK RC
+ au BufNewFile,BufRead .gtkrc*,gtkrc*		call s:StarSetf('gtkrc')
+@@ -2407,8 +2522,11 @@
+ " Kconfig
+ au BufNewFile,BufRead Kconfig.*			call s:StarSetf('kconfig')
+ 
++" Lilo: Linux loader
++au BufNewFile,BufRead lilo.conf*		call s:StarSetf('lilo')
++
+ " Logcheck
+-au BufNewFile,BufRead /etc/logcheck/*.d*/*	call s:StarSetf('logcheck')
++au BufNewFile,BufRead */etc/logcheck/*.d*/*	call s:StarSetf('logcheck')
+ 
+ " Makefile
+ au BufNewFile,BufRead [mM]akefile*		call s:StarSetf('make')
+@@ -2420,7 +2538,11 @@
+ au BufNewFile,BufRead mutt[[:alnum:]._-]\{6\}	setf mail
+ 
+ " Modconf
+-au BufNewFile,BufRead /etc/modprobe.*		call s:StarSetf('modconf')
++au BufNewFile,BufRead */etc/modutils/*
++	\ if executable(expand("<afile>")) != 1
++	\|  call s:StarSetf('modconf')
++	\|endif
++au BufNewFile,BufRead */etc/modprobe.*		call s:StarSetf('modconf')
+ 
+ " Mutt setup file
+ au BufNewFile,BufRead .mutt{ng,}rc*,*/.mutt{ng,}/mutt{ng,}rc*	call s:StarSetf('muttrc')
+@@ -2430,7 +2552,7 @@
+ au BufNewFile,BufRead tmac.*			call s:StarSetf('nroff')
+ 
+ " Pam conf
+-au BufNewFile,BufRead /etc/pam.d/*		call s:StarSetf('pamconf')
++au BufNewFile,BufRead */etc/pam.d/*		call s:StarSetf('pamconf')
+ 
+ " Printcap and Termcap
+ au BufNewFile,BufRead *printcap*
+@@ -2442,6 +2564,23 @@
+ 	\|  let b:ptcap_type = "term" | call s:StarSetf('ptcap')
+ 	\|endif
+ 
++" ReDIF
++" Only used when the .rdf file was not detected to be XML.
++au BufRead,BufNewFile *.rdf			call s:Redif()
++func! s:Redif()
++  let lnum = 1
++  while lnum <= 5 && lnum < line('$')
++    if getline(lnum) =~ "^\ctemplate-type:"
++      setf redif
++      return
++    endif
++    let lnum = lnum + 1
++  endwhile
++endfunc
++
++" Remind
++au BufNewFile,BufRead .reminders*		call s:StarSetf('remind')
++
+ " Vim script
+ au BufNewFile,BufRead *vimrc*			call s:StarSetf('vim')
+ 
+@@ -2453,10 +2592,10 @@
+ 
+ " XFree86 config
+ au BufNewFile,BufRead XF86Config-4*
+-	\ let b:xf86c_xfree86_version = 4 | call s:StarSetf('xf86conf')
++	\ let b:xf86conf_xfree86_version = 4 | call s:StarSetf('xf86conf')
+ au BufNewFile,BufRead XF86Config*
+ 	\ if getline(1) =~ '\<XConfigurator\>'
+-	\|  let b:xf86c_xfree86_version = 3
++	\|  let b:xf86conf_xfree86_version = 3
+ 	\|endif
+ 	\|call s:StarSetf('xf86conf')
+ 
+@@ -2464,28 +2603,37 @@
+ au BufNewFile,BufRead *xmodmap*			call s:StarSetf('xmodmap')
+ 
+ " Xinetd conf
+-au BufNewFile,BufRead /etc/xinetd.d/*		call s:StarSetf('xinetd')
++au BufNewFile,BufRead */etc/xinetd.d/*		call s:StarSetf('xinetd')
++
++" yum conf (close enough to dosini)
++au BufNewFile,BufRead */etc/yum.repos.d/*	call s:StarSetf('dosini')
+ 
+ " Z-Shell script
+ au BufNewFile,BufRead zsh*,zlog*		call s:StarSetf('zsh')
+ 
+ 
++" Plain text files, needs to be far down to not override others.  This avoids
++" the "conf" type being used if there is a line starting with '#'.
++au BufNewFile,BufRead *.txt,*.text		setf text
++
+ 
+ " Use the filetype detect plugins.  They may overrule any of the previously
+ " detected filetypes.
+ runtime! ftdetect/*.vim
+ 
++" NOTE: The above command could have ended the filetypedetect autocmd group
++" and started another one. Let's make sure it has ended to get to a consistent
++" state.
++augroup END
+ 
+ " Generic configuration file (check this last, it's just guessing!)
+-au BufNewFile,BufRead,StdinReadPost *
++au filetypedetect BufNewFile,BufRead,StdinReadPost *
+ 	\ if !did_filetype() && expand("<amatch>") !~ g:ft_ignore_pat
+ 	\    && (getline(1) =~ '^#' || getline(2) =~ '^#' || getline(3) =~ '^#'
+ 	\	|| getline(4) =~ '^#' || getline(5) =~ '^#') |
+ 	\   setf conf |
+ 	\ endif
+ 
+-augroup END
+-
+ 
+ " If the GUI is already running, may still need to install the Syntax menu.
+ " Don't do it when the 'M' flag is included in 'guioptions'.
+diff -Naur vim73.orig/runtime/ftplugin/aap.vim vim73/runtime/ftplugin/aap.vim
+--- vim73.orig/runtime/ftplugin/aap.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/aap.vim	2013-06-07 17:07:11.395642802 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:	Aap recipe
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2003 Nov 04
++" Last Change:	2013 Apr 05
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -19,7 +19,7 @@
+ setlocal fo-=t fo+=croql
+ 
+ " Set 'comments' to format dashed lists in comments.
+-setlocal comments=s:#\ -,m:#\ \,e:#,n:#,fb:-
++setlocal comments=s:#\ -,m:#\ \ ,e:#,n:#,fb:-
+ 
+ " Expand tabs to spaces to avoid trouble.
+ setlocal expandtab
+diff -Naur vim73.orig/runtime/ftplugin/abap.vim vim73/runtime/ftplugin/abap.vim
+--- vim73.orig/runtime/ftplugin/abap.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/abap.vim	2013-06-07 17:07:11.408976098 +0000
+@@ -0,0 +1,29 @@
++" Vim filetype plugin file
++" Language:	ABAP
++" Author:	Steven Oliver <oliver.steven@gmail.com>
++" Copyright:	Copyright (c) 2013 Steven Oliver
++" License:	You may redistribute this under the same terms as Vim itself
++" --------------------------------------------------------------------------
++
++" Only do this when not done yet for this buffer
++if (exists("b:did_ftplugin"))
++  finish
++endif
++let b:did_ftplugin = 1
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++setlocal softtabstop=2 shiftwidth=2
++setlocal suffixesadd=.abap
++
++" Windows allows you to filter the open file dialog
++if has("gui_win32") && !exists("b:browsefilter")
++  let b:browsefilter = "ABAP Source Files (*.abap)\t*.abap\n" .
++                     \ "All Files (*.*)\t*.*\n"
++endif
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim: set sw=4 sts=4 et tw=80 :
+diff -Naur vim73.orig/runtime/ftplugin/abaqus.vim vim73/runtime/ftplugin/abaqus.vim
+--- vim73.orig/runtime/ftplugin/abaqus.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/abaqus.vim	2013-06-07 17:07:11.422309393 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:     Abaqus finite element input file (www.abaqus.com)
+ " Maintainer:   Carl Osterwisch <osterwischc@asme.org>
+-" Last Change:  2008 Oct 5
++" Last Change:  2012 Apr 30
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin") | finish | endif
+@@ -51,7 +51,7 @@
+     \ "Abaqus Results (*.dat)\t*.dat\n" .
+     \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
+     \ "All Files (*.*)\t*.*\n"
+-    let b:undo_ftplugin .= "|unlet b:browsefilter"
++    let b:undo_ftplugin .= "|unlet! b:browsefilter"
+ endif
+ 
+ " Define patterns for the matchit plugin
+@@ -62,7 +62,7 @@
+     \ '\*assembly:\*end\s*assembly,' .
+     \ '\*instance:\*end\s*instance,' .
+     \ '\*step:\*end\s*step'
+-    let b:undo_ftplugin .= "|unlet b:match_ignorecase b:match_words"
++    let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words"
+ endif
+ 
+ " Define keys used to move [count] keywords backward or forward.
+@@ -85,5 +85,13 @@
+ let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]"
+     \ . "|unmap <buffer> <LocalLeader><LocalLeader>"
+ 
++" Undo must be done in nocompatible mode for <LocalLeader>.
++let b:undo_ftplugin = "let s:cpo_save = &cpoptions|"
++    \ . "set cpoptions&vim|"
++    \ . b:undo_ftplugin
++    \ . "|let &cpoptions = s:cpo_save"
++    \ . "|unlet s:cpo_save"
++
+ " Restore saved compatibility options
+ let &cpoptions = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/ada.vim vim73/runtime/ftplugin/ada.vim
+--- vim73.orig/runtime/ftplugin/ada.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/ada.vim	2013-06-07 17:07:11.432309364 +0000
+@@ -7,7 +7,7 @@
+ "		Neil Bird <neil@fnxweb.com>
+ "      $Author: krischik $
+ "	 $Date: 2008-07-08 16:29:01 +0200 (Di, 08 Jul 2008) $
+-"      Version: 4.6
++"      Version: 4.6 with patch from David BÃŒrgin
+ "    $Revision: 887 $
+ "     $HeadURL: https://gnuada.svn.sourceforge.net/svnroot/gnuada/trunk/tools/vim/ftplugin/ada.vim $
+ "      History: 24.05.2006 MK Unified Headers
+@@ -42,7 +42,7 @@
+ 
+ " Section: Comments  {{{1
+ "
+-setlocal comments=O:--,:--\ \
++setlocal comments=O:--,:--\ \ 
+ setlocal commentstring=--\ \ %s
+ setlocal complete=.,w,b,u,t,i
+ 
+diff -Naur vim73.orig/runtime/ftplugin/ant.vim vim73/runtime/ftplugin/ant.vim
+--- vim73.orig/runtime/ftplugin/ant.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/ant.vim	2013-06-07 17:07:11.448975983 +0000
+@@ -41,3 +41,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/art.vim vim73/runtime/ftplugin/art.vim
+--- vim73.orig/runtime/ftplugin/art.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/art.vim	2013-06-07 17:07:11.472309250 +0000
+@@ -12,5 +12,4 @@
+ run ftplugin/lisp.vim
+ 
+ setl lw-=if
+-setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,
+-      \for,schema,while
++setl lw+=def-art-fun,deffacts,defglobal,defrule,defschema,for,schema,while
+diff -Naur vim73.orig/runtime/ftplugin/aspvbs.vim vim73/runtime/ftplugin/aspvbs.vim
+--- vim73.orig/runtime/ftplugin/aspvbs.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/aspvbs.vim	2013-06-07 17:07:11.485642545 +0000
+@@ -57,3 +57,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/c.vim vim73/runtime/ftplugin/c.vim
+--- vim73.orig/runtime/ftplugin/c.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/c.vim	2013-06-07 17:07:11.515642460 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:	C
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2007 Sep 25
++" Last Change:	2012 Jul 10
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -36,11 +36,11 @@
+ 
+ " When the matchit plugin is loaded, this makes the % command skip parens and
+ " braces in comments.
+-let b:match_words = &matchpairs
++let b:match_words = &matchpairs . ',^\s*#\s*if\(\|def\|ndef\)\>:^\s*#\s*elif\>:^\s*#\s*else\>:^\s*#\s*endif\>'
+ let b:match_skip = 's:comment\|string\|character'
+ 
+ " Win32 can filter files in the browse dialog
+-if has("gui_win32") && !exists("b:browsefilter")
++if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
+   if &ft == "cpp"
+     let b:browsefilter = "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
+ 	  \ "C Header Files (*.h)\t*.h\n" .
+diff -Naur vim73.orig/runtime/ftplugin/changelog.vim vim73/runtime/ftplugin/changelog.vim
+--- vim73.orig/runtime/ftplugin/changelog.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/changelog.vim	2013-06-07 17:07:11.552309022 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:         generic Changelog file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2009-05-25
++" Latest Revision:  2012-08-23
+ " Variables:
+ "   g:changelog_timeformat (deprecated: use g:changelog_dateformat instead) -
+ "       description: the timeformat used in ChangeLog entries.
+@@ -99,16 +99,17 @@
+   function! s:try_reading_file(path)
+     try
+       return readfile(a:path)
++    catch
++      return []
+     endtry
+-    return []
+   endfunction
+ 
+   function! s:passwd_field(line, field)
+     let fields = split(a:line, ':', 1)
+-    if len(fields) < field
++    if len(fields) < a:field
+       return ""
+     endif
+-    return fields[field - 1]
++    return fields[a:field - 1]
+   endfunction
+ 
+   function! s:capitalize(word)
+@@ -178,7 +179,7 @@
+     " Look for an entry for today by our user.
+     let date = strftime(g:changelog_dateformat)
+     let search = s:substitute_items(g:changelog_date_entry_search, date,
+-                                  \ g:changelog_username)
++                                  \ s:username())
+     if search(search) > 0
+       " Ok, now we look for the end of the date entry, and add an entry.
+       call cursor(nextnonblank(line('.') + 1), 1)
+@@ -197,7 +198,7 @@
+ 
+       " No entry today, so create a date-user header and insert an entry.
+       let todays_entry = s:substitute_items(g:changelog_new_date_format,
+-                                          \ date, g:changelog_username)
++                                          \ date, s:username())
+       " Make sure we have a cursor positioning.
+       if stridx(todays_entry, '{cursor}') == -1
+         let todays_entry = todays_entry . '{cursor}'
+diff -Naur vim73.orig/runtime/ftplugin/clojure.vim vim73/runtime/ftplugin/clojure.vim
+--- vim73.orig/runtime/ftplugin/clojure.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/clojure.vim	2013-06-07 17:07:11.555642346 +0000
+@@ -0,0 +1,79 @@
++" Vim filetype plugin file
++" Language:     Clojure
++" Author:       Meikel Brandmeyer <mb@kotka.de>
++"
++" Maintainer:   Sung Pae <self@sungpae.com>
++" URL:          https://github.com/guns/vim-clojure-static
++" License:      Same as Vim
++" Last Change:  30 January 2013
++
++" Only do this when not done yet for this buffer
++if exists("b:did_ftplugin")
++    finish
++endif
++let b:did_ftplugin = 1
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++let b:undo_ftplugin = 'setlocal define< formatoptions< comments< commentstring<'
++
++" There will be false positives, but this is better than missing the whole set
++" of user-defined def* definitions.
++setlocal define=\\v[(/]def(ault)@!\\S*
++
++" Remove 't' from 'formatoptions' to avoid auto-wrapping code. The '+=croql'
++" is standard ftplugin boilerplate, although it is arguably intrusive.
++setlocal formatoptions-=t formatoptions+=croql
++
++" Lisp comments are routinely nested (e.g. ;;; SECTION HEADING)
++setlocal comments=n:;
++setlocal commentstring=;\ %s
++
++" Provide insert mode completions for special forms and clojure.core. As
++" 'omnifunc' is set by popular Clojure REPL client plugins, we also set
++" 'completefunc' so that the user has some form of completion available when
++" 'omnifunc' is set and no REPL connection exists.
++for s:setting in ['omnifunc', 'completefunc']
++    if exists('&' . s:setting) && empty(eval('&' . s:setting))
++        execute 'setlocal ' . s:setting . '=clojurecomplete#Complete'
++        let b:undo_ftplugin .= ' | setlocal ' . s:setting . '<'
++    endif
++endfor
++
++" Take all directories of the CLOJURE_SOURCE_DIRS environment variable
++" and add them to the path option.
++"
++" This is a legacy option for VimClojure users.
++if exists('$CLOJURE_SOURCE_DIRS')
++    for s:dir in split($CLOJURE_SOURCE_DIRS, (has("win32") || has("win64")) ? ';' : ':')
++        let s:dir = fnameescape(s:dir)
++        " Whitespace escaping for Windows
++        let s:dir = substitute(s:dir, '\', '\\\\', 'g')
++        let s:dir = substitute(s:dir, '\ ', '\\ ', 'g')
++        execute "setlocal path+=" . s:dir . "/**"
++    endfor
++    let b:undo_ftplugin .= ' | setlocal path<'
++endif
++
++" Skip brackets in ignored syntax regions when using the % command
++if exists('loaded_matchit')
++    let b:match_words = &matchpairs
++    let b:match_skip = 's:comment\|string\|regex\|character'
++    let b:undo_ftplugin .= ' | unlet! b:match_words b:match_skip'
++endif
++
++" Win32 can filter files in the browse dialog
++if has("gui_win32") && !exists("b:browsefilter")
++    let b:browsefilter = "Clojure Source Files (*.clj)\t*.clj\n" .
++                       \ "ClojureScript Source Files (*.cljs)\t*.cljs\n" .
++                       \ "Java Source Files (*.java)\t*.java\n" .
++                       \ "All Files (*.*)\t*.*\n"
++    let b:undo_ftplugin .= ' | unlet! b:browsefilter'
++endif
++
++let &cpo = s:cpo_save
++
++unlet! s:cpo_save s:setting s:dir
++
++" vim:sts=4 sw=4 et:
+diff -Naur vim73.orig/runtime/ftplugin/config.vim vim73/runtime/ftplugin/config.vim
+--- vim73.orig/runtime/ftplugin/config.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/config.vim	2013-06-07 17:07:11.595642231 +0000
+@@ -39,3 +39,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/cs.vim vim73/runtime/ftplugin/cs.vim
+--- vim73.orig/runtime/ftplugin/cs.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/cs.vim	2013-06-07 17:07:11.645642089 +0000
+@@ -10,6 +10,8 @@
+ 
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Set 'formatoptions' to break comment lines but not other lines,
+ " and insert the comment leader when hitting <CR> or using "o".
+@@ -22,3 +24,6 @@
+     let b:browsefilter = "C# Source Files (*.cs)\t*.cs\n" .
+ 		       \ "All Files (*.*)\t*.*\n"
+ endif
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/ftplugin/csc.vim vim73/runtime/ftplugin/csc.vim
+--- vim73.orig/runtime/ftplugin/csc.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/csc.vim	2013-06-07 17:07:11.652308736 +0000
+@@ -24,3 +24,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/csh.vim vim73/runtime/ftplugin/csh.vim
+--- vim73.orig/runtime/ftplugin/csh.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/csh.vim	2013-06-07 17:07:11.658975384 +0000
+@@ -45,3 +45,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/cucumber.vim vim73/runtime/ftplugin/cucumber.vim
+--- vim73.orig/runtime/ftplugin/cucumber.vim	2010-08-09 03:01:52.000000000 +0000
++++ vim73/runtime/ftplugin/cucumber.vim	2013-06-07 17:07:11.672308679 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin
+ " Language:	Cucumber
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 Aug 09
++" Last Change:	2013 Jun 01
+ 
+ " Only do this when not done yet for this buffer
+ if (exists("b:did_ftplugin"))
+@@ -9,6 +9,9 @@
+ endif
+ let b:did_ftplugin = 1
+ 
++let s:keepcpo= &cpo
++set cpo&vim
++
+ setlocal formatoptions-=t formatoptions+=croql
+ setlocal comments=:# commentstring=#\ %s
+ setlocal omnifunc=CucumberComplete
+@@ -18,11 +21,27 @@
+ let b:cucumber_root = expand('%:p:h:s?.*[\/]\%(features\|stories\)\zs[\/].*??')
+ 
+ if !exists("g:no_plugin_maps") && !exists("g:no_cucumber_maps")
+-  nmap <silent><buffer> <C-]>       :<C-U>exe <SID>jump('edit',v:count)<CR>
+-  nmap <silent><buffer> <C-W>]      :<C-U>exe <SID>jump('split',v:count)<CR>
+-  nmap <silent><buffer> <C-W><C-]>  :<C-U>exe <SID>jump('split',v:count)<CR>
+-  nmap <silent><buffer> <C-W>}      :<C-U>exe <SID>jump('pedit',v:count)<CR>
+-  let b:undo_ftplugin .= "| sil! iunmap! <C-]>| sil! iunmap! <C-W>]| sil! iunmap! <C-W><C-]>| sil! iunmap! <C-W>}"
++  nnoremap <silent><buffer> <C-]>       :<C-U>exe <SID>jump('edit',v:count)<CR>
++  nnoremap <silent><buffer> [<C-D>      :<C-U>exe <SID>jump('edit',v:count)<CR>
++  nnoremap <silent><buffer> ]<C-D>      :<C-U>exe <SID>jump('edit',v:count)<CR>
++  nnoremap <silent><buffer> <C-W>]      :<C-U>exe <SID>jump('split',v:count)<CR>
++  nnoremap <silent><buffer> <C-W><C-]>  :<C-U>exe <SID>jump('split',v:count)<CR>
++  nnoremap <silent><buffer> <C-W>d      :<C-U>exe <SID>jump('split',v:count)<CR>
++  nnoremap <silent><buffer> <C-W><C-D>  :<C-U>exe <SID>jump('split',v:count)<CR>
++  nnoremap <silent><buffer> <C-W>}      :<C-U>exe <SID>jump('pedit',v:count)<CR>
++  nnoremap <silent><buffer> [d          :<C-U>exe <SID>jump('pedit',v:count)<CR>
++  nnoremap <silent><buffer> ]d          :<C-U>exe <SID>jump('pedit',v:count)<CR>
++  let b:undo_ftplugin .=
++        \ "|sil! nunmap <buffer> <C-]>" .
++        \ "|sil! nunmap <buffer> [<C-D>" .
++        \ "|sil! nunmap <buffer> ]<C-D>" .
++        \ "|sil! nunmap <buffer> <C-W>]" .
++        \ "|sil! nunmap <buffer> <C-W><C-]>" .
++        \ "|sil! nunmap <buffer> <C-W>d" .
++        \ "|sil! nunmap <buffer> <C-W><C-D>" .
++        \ "|sil! nunmap <buffer> <C-W>}" .
++        \ "|sil! nunmap <buffer> [d" .
++        \ "|sil! nunmap <buffer> ]d"
+ endif
+ 
+ function! s:jump(command,count)
+@@ -38,7 +57,7 @@
+ endfunction
+ 
+ function! s:allsteps()
+-  let step_pattern = '\C^\s*\K\k*\>\s*\zs\S.\{-\}\ze\s*\%(do\|{\)\s*\%(|[^|]*|\s*\)\=\%($\|#\)'
++  let step_pattern = '\C^\s*\K\k*\>\s*(\=\s*\zs\S.\{-\}\ze\s*)\=\s*\%(do\|{\)\s*\%(|[^|]*|\s*\)\=\%($\|#\)'
+   let steps = []
+   for file in split(glob(b:cucumber_root.'/**/*.rb'),"\n")
+     let lines = readfile(file)
+@@ -55,7 +74,7 @@
+ endfunction
+ 
+ function! s:steps(lnum)
+-  let c = indent(a:lnum) + 1
++  let c = match(getline(a:lnum), '\S') + 1
+   while synIDattr(synID(a:lnum,c,1),'name') !~# '^$\|Region$'
+     let c = c + 1
+   endwhile
+@@ -129,4 +148,7 @@
+   return sort(steps)
+ endfunction
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:set sts=2 sw=2:
+diff -Naur vim73.orig/runtime/ftplugin/debchangelog.vim vim73/runtime/ftplugin/debchangelog.vim
+--- vim73.orig/runtime/ftplugin/debchangelog.vim	2010-07-21 18:55:51.000000000 +0000
++++ vim73/runtime/ftplugin/debchangelog.vim	2013-06-07 17:07:11.695641946 +0000
+@@ -3,8 +3,8 @@
+ " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+ " Former Maintainers:   Michael Piefel <piefel@informatik.hu-berlin.de>
+ "                       Stefano Zacchiroli <zack@debian.org>
+-" Last Change:  2010-07-11
+-" License:      GNU GPL, version 2.0 or later
++" Last Change:  2012-01-31
++" License:      Vim License
+ " URL:          http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/debchangelog.vim
+ 
+ " Bug completion requires apt-listbugs installed for Debian packages or
+diff -Naur vim73.orig/runtime/ftplugin/docbk.vim vim73/runtime/ftplugin/docbk.vim
+--- vim73.orig/runtime/ftplugin/docbk.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/docbk.vim	2013-06-07 17:07:11.788975013 +0000
+@@ -0,0 +1,24 @@
++" Vim filetype plugin file
++" Language:	    DocBook
++" Maintainer:	    Nikolai Weibull <now@bitwi.se>
++" Latest Revision:  2012-04-25
++
++if exists('b:did_ftplugin')
++  finish
++endif
++
++if !exists('b:docbk_type')
++  if expand('%:e') == 'sgml'
++    let b:docbk_type = 'sgml'
++  else
++    let b:docbk_type = 'xml'
++  endif
++endif
++
++if b:docbk_type == 'sgml'
++  runtime! ftplugin/sgml.vim ftplugin/sgml_*.vim ftplugin/sgml/*.vim
++else
++  runtime! ftplugin/xml.vim ftplugin/xml_*.vim ftplugin/xml/*.vim
++endif
++
++let b:undo_ftplugin = "unlet! b:docbk_type"
+diff -Naur vim73.orig/runtime/ftplugin/dosbatch.vim vim73/runtime/ftplugin/dosbatch.vim
+--- vim73.orig/runtime/ftplugin/dosbatch.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/dosbatch.vim	2013-06-07 17:07:11.792308337 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:    MS-DOS .bat files
+ " Maintainer:  Mike Williams <mrw@eandem.co.uk>
+-" Last Change: 27th May 2009
++" Last Change: 8th May 2012
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -11,6 +11,9 @@
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " BAT comment formatting
+ setlocal comments=b:rem,b:@rem,b:REM,b:@REM,:::
+ setlocal formatoptions-=t formatoptions+=rol
+@@ -19,3 +22,9 @@
+ if has("gui_win32") && !exists("b:browsefilter")
+   let b:browsefilter = "DOS Batch Files (*.bat, *.cmd)\t*.bat;*.cmd\nAll Files (*.*)\t*.*\n"
+ endif
++
++let b:undo_ftplugin = "setlocal comments< formatoptions<"
++    \ . "| unlet! b:browsefiler"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/dtd.vim vim73/runtime/ftplugin/dtd.vim
+--- vim73.orig/runtime/ftplugin/dtd.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/dtd.vim	2013-06-07 17:07:11.815641603 +0000
+@@ -37,3 +37,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/erlang.vim vim73/runtime/ftplugin/erlang.vim
+--- vim73.orig/runtime/ftplugin/erlang.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/erlang.vim	2013-06-07 17:07:11.848974842 +0000
+@@ -0,0 +1,87 @@
++" Vim ftplugin file
++" Language:     Erlang
++" Author:       Oscar Hellström <oscar@oscarh.net>
++" Contributors: Ricardo Catalinas Jiménez <jimenezrick@gmail.com>
++"               Eduardo Lopez (http://github.com/tapichu)
++" License:      Vim license
++" Version:      2012/01/25
++
++if exists('b:did_ftplugin')
++	finish
++else
++	let b:did_ftplugin = 1
++endif
++
++if exists('s:did_function_definitions')
++	call s:SetErlangOptions()
++	finish
++else
++	let s:did_function_definitions = 1
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++if !exists('g:erlang_keywordprg')
++	let g:erlang_keywordprg = 'erl -man'
++endif
++
++if !exists('g:erlang_folding')
++	let g:erlang_folding = 0
++endif
++
++let s:erlang_fun_begin = '^\a\w*(.*$'
++let s:erlang_fun_end   = '^[^%]*\.\s*\(%.*\)\?$'
++
++function s:SetErlangOptions()
++	if g:erlang_folding
++		setlocal foldmethod=expr
++		setlocal foldexpr=GetErlangFold(v:lnum)
++		setlocal foldtext=ErlangFoldText()
++	endif
++
++	setlocal comments=:%%%,:%%,:%
++	setlocal commentstring=%%s
++
++	setlocal formatoptions+=ro
++	let &l:keywordprg = g:erlang_keywordprg
++endfunction
++
++function GetErlangFold(lnum)
++	let lnum = a:lnum
++	let line = getline(lnum)
++
++	if line =~ s:erlang_fun_end
++		return '<1'
++	endif
++
++	if line =~ s:erlang_fun_begin && foldlevel(lnum - 1) == 1
++		return '1'
++	endif
++
++	if line =~ s:erlang_fun_begin
++		return '>1'
++	endif
++
++	return '='
++endfunction
++
++function ErlangFoldText()
++	let line    = getline(v:foldstart)
++	let foldlen = v:foldend - v:foldstart + 1
++	let lines   = ' ' . foldlen . ' lines: ' . substitute(line, "[\ \t]*", '', '')
++	if foldlen < 10
++		let lines = ' ' . lines
++	endif
++	let retval = '+' . v:folddashes . lines
++
++	return retval
++endfunction
++
++call s:SetErlangOptions()
++
++let b:undo_ftplugin = "setlocal foldmethod< foldexpr< foldtext<"
++	\ . " comments< commentstring< formatoptions<"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/eruby.vim vim73/runtime/ftplugin/eruby.vim
+--- vim73.orig/runtime/ftplugin/eruby.vim	2010-05-27 13:53:42.000000000 +0000
++++ vim73/runtime/ftplugin/eruby.vim	2013-06-07 17:07:11.855641489 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin
+ " Language:		eRuby
+ " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:		2010 Apr 15
++" Last Change:		2012 Mar 11
+ " URL:			http://vim-ruby.rubyforge.org
+ " Anon CVS:		See above site
+ " Release Coordinator:	Doug Kearns <dougkearns@gmail.com>
+@@ -100,5 +100,6 @@
+       \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+ 
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+ 
+ " vim: nowrap sw=2 sts=2 ts=8:
+diff -Naur vim73.orig/runtime/ftplugin/falcon.vim vim73/runtime/ftplugin/falcon.vim
+--- vim73.orig/runtime/ftplugin/falcon.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/falcon.vim	2013-06-07 17:07:11.872308108 +0000
+@@ -0,0 +1,50 @@
++" Vim filetype plugin file
++" Language:     Falcon
++" Author:       Steven Oliver <oliver.steven@gmail.com>
++" Copyright:    Copyright (c) 2009, 2010, 2011, 2012 Steven Oliver
++" License:      You may redistribute this under the same terms as Vim itself
++" --------------------------------------------------------------------------
++" GetLatestVimScripts: 2762 1 :AutoInstall: falcon.vim
++
++" Only do this when not done yet for this buffer
++if (exists("b:did_ftplugin"))
++  finish
++endif
++let b:did_ftplugin = 1
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++setlocal tabstop=4 shiftwidth=4 expandtab fileencoding=utf-8
++setlocal suffixesadd=.fal,.ftd
++
++" Matchit support
++if exists("loaded_matchit") && !exists("b:match_words")
++  let b:match_ignorecase = 0
++
++  let b:match_words =
++	\ '\<\%(if\|case\|while\|until\|for\|do\|class\)\>=\@!' .
++	\ ':' .
++	\ '\<\%(else\|elsif\|when\)\>' .
++	\ ':' .
++	\ '\<end\>' .
++	\ ',{:},\[:\],(:)'
++endif
++
++" Set comments to include dashed lines
++setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
++
++" Windows allows you to filter the open file dialog
++if has("gui_win32") && !exists("b:browsefilter")
++  let b:browsefilter = "Falcon Source Files (*.fal *.ftd)\t*.fal;*.ftd\n" .
++                     \ "All Files (*.*)\t*.*\n"
++endif
++
++let b:undo_ftplugin = "setlocal tabstop< shiftwidth< expandtab< fileencoding<"
++	\ . " suffixesadd< comments<"
++	\ . "| unlet! b:browsefiler"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim: set sw=4 sts=4 et tw=80 :
+diff -Naur vim73.orig/runtime/ftplugin/fortran.vim vim73/runtime/ftplugin/fortran.vim
+--- vim73.orig/runtime/ftplugin/fortran.vim	2010-07-24 10:40:58.000000000 +0000
++++ vim73/runtime/ftplugin/fortran.vim	2013-06-07 17:07:11.902308023 +0000
+@@ -1,17 +1,21 @@
+ " Vim settings file
+-" Language:	Fortran90 (and Fortran95, Fortran77, F and elf90)
+-" Version:	0.46
+-" Last Change:	2010 July 24
++" Language:	Fortran 2008 (and older: Fortran 2003, 95, 90, 77, 66)
++" Version:	0.48
++" Last Change:	2012 Apr. 18
+ " Maintainer:	Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
+ " Usage:	Do :help fortran-plugin from Vim
+ " Credits:
+-" Useful suggestions were made by Stefano Zacchiroli and Hendrik Merx.
++" Useful suggestions were made by Stefano Zacchiroli, Hendrik Merx, and Ben
++" Fritz.
+ 
+ " Only do these settings when not done yet for this buffer
+ if exists("b:did_ftplugin")
+   finish
+ endif
+ 
++let s:cposet=&cpoptions
++set cpoptions&vim
++
+ " Don't do other file type settings for this buffer
+ let b:did_ftplugin = 1
+ 
+@@ -25,7 +29,7 @@
+     " User guarantees fixed source form
+     let b:fortran_fixed_source = 1
+   else
+-    " f90 and f95 allow both fixed and free source form
++    " Modern Fortran allows both fixed and free source form
+     " assume fixed source form unless signs of free source form
+     " are detected in the first five columns of the first s:lmax lines
+     " Detection becomes more accurate and time-consuming if more lines
+@@ -76,10 +80,7 @@
+ setlocal fo+=tcql
+ 
+ setlocal include=^\\c#\\=\\s*include\\s\\+
+-setlocal suffixesadd+=.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
+-
+-let s:cposet=&cpoptions
+-set cpoptions-=C
++setlocal suffixesadd+=.f08,.f03,.f95,.f90,.for,.f,.F,.f77,.ftn,.fpp
+ 
+ " Define patterns for the matchit plugin
+ if !exists("b:match_words")
+@@ -89,6 +90,7 @@
+   let s:notprocedure = '\%(\s\+procedure\>\)\@!'
+   let b:match_ignorecase = 1
+   let b:match_words =
++    \ '(:),' .
+     \ '\<select\s*case\>:' . s:notselect. '\<case\>:\<end\s*select\>,' .
+     \ s:notelse . '\<if\s*(.\+)\s*then\>:' .
+     \ '\<else\s*\%(if\s*(.\+)\s*then\)\=\>:\<end\s*if\>,'.
+@@ -96,6 +98,9 @@
+     \ s:notend . '\<do\>:\<end\s*do\>,'.
+     \ s:notelse . '\<where\>:\<elsewhere\>:\<end\s*where\>,'.
+     \ s:notend . '\<type\s*[^(]:\<end\s*type\>,'.
++    \ s:notend . '\<forall\>:\<end\s*forall\>,'.
++    \ s:notend . '\<associate\>:\<end\s*associate\>,'.
++    \ s:notend . '\<enum\>:\<end\s*enum\>,'.
+     \ s:notend . '\<interface\>:\<end\s*interface\>,'.
+     \ s:notend . '\<subroutine\>:\<end\s*subroutine\>,'.
+     \ s:notend . '\<function\>:\<end\s*function\>,'.
+@@ -105,7 +110,7 @@
+ 
+ " File filters for :browse e
+ if has("gui_win32") && !exists("b:browsefilter")
+-  let b:browsefilter = "Fortran Files (*.f;*.F;*.for;*.f77;*.f90;*.f95;*.fpp;*.ftn)\t*.f;*.F;*.for;*.f77;*.f90;*.f95;*.fpp;*.ftn\n" .
++  let b:browsefilter = "Fortran Files (*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn)\t*.f;*.for;*.f77;*.f90;*.f95;*.f03;*.f08;*.fpp;*.ftn\n" .
+     \ "All Files (*.*)\t*.*\n"
+ endif
+ 
+diff -Naur vim73.orig/runtime/ftplugin/git.vim vim73/runtime/ftplugin/git.vim
+--- vim73.orig/runtime/ftplugin/git.vim	2010-05-21 09:50:35.000000000 +0000
++++ vim73/runtime/ftplugin/git.vim	2013-06-07 17:07:11.948974556 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin
+ " Language:	generic git output
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ " Only do this when not done yet for this buffer
+ if (exists("b:did_ftplugin"))
+@@ -10,7 +10,9 @@
+ let b:did_ftplugin = 1
+ 
+ if !exists('b:git_dir')
+-  if expand('%:p') =~# '\.git\>'
++  if expand('%:p') =~# '[\/]\.git[\/]modules[\/]'
++    " Stay out of the way
++  elseif expand('%:p') =~# '\.git\>'
+     let b:git_dir = matchstr(expand('%:p'),'.*\.git\>')
+   elseif $GIT_DIR != ''
+     let b:git_dir = $GIT_DIR
+diff -Naur vim73.orig/runtime/ftplugin/gitcommit.vim vim73/runtime/ftplugin/gitcommit.vim
+--- vim73.orig/runtime/ftplugin/gitcommit.vim	2010-05-21 09:48:22.000000000 +0000
++++ vim73/runtime/ftplugin/gitcommit.vim	2013-06-07 17:07:11.955641204 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin
+ " Language:	git commit file
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ " Only do this when not done yet for this buffer
+ if (exists("b:did_ftplugin"))
+@@ -11,13 +11,14 @@
+ runtime! ftplugin/git.vim
+ let b:did_ftplugin = 1
+ 
++setlocal nomodeline tabstop=8 formatoptions-=croq formatoptions+=tl
++
++let b:undo_ftplugin = 'setl modeline< tabstop< formatoptions<'
++
+ if &textwidth == 0
+   " make sure that log messages play nice with git-log on standard terminals
+   setlocal textwidth=72
+-  if !exists("b:undo_ftplugin")
+-    let b:undo_ftplugin = ""
+-  endif
+-  let b:undo_ftplugin = b:undo_ftplugin . "|setl tw<"
++  let b:undo_ftplugin .= "|setl tw<"
+ endif
+ 
+ if exists("g:no_gitcommit_commands") || v:version < 700
+@@ -28,8 +29,6 @@
+   let b:git_dir = expand("%:p:h")
+ endif
+ 
+-" Automatically diffing can be done with:
+-"   autocmd FileType gitcommit DiffGitCached | wincmd p
+ command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+ 
+ function! s:diffcomplete(A,L,P)
+@@ -58,11 +57,11 @@
+   else
+     let extra = "-p --stat=".&columns
+   endif
+-  call system(git." diff --cached --no-color ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
++  call system(git." diff --cached --no-color --no-ext-diff ".extra." > ".(exists("*shellescape") ? shellescape(name) : name))
+   exe "pedit ".(exists("*fnameescape") ? fnameescape(name) : name)
+   wincmd P
+   let b:git_dir = a:gitdir
+   command! -bang -bar -buffer -complete=custom,s:diffcomplete -nargs=* DiffGitCached :call s:gitdiffcached(<bang>0,b:git_dir,<f-args>)
+-  nnoremap <silent> q :q<CR>
++  nnoremap <buffer> <silent> q :q<CR>
+   setlocal buftype=nowrite nobuflisted noswapfile nomodifiable filetype=git
+ endfunction
+diff -Naur vim73.orig/runtime/ftplugin/gprof.vim vim73/runtime/ftplugin/gprof.vim
+--- vim73.orig/runtime/ftplugin/gprof.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/gprof.vim	2013-06-07 17:07:12.022307680 +0000
+@@ -0,0 +1,32 @@
++" Language:    gprof
++" Maintainer:  Dominique Pelle <dominique.pelle@gmail.com>
++" Last Change: 2012 May 20
++
++" When cursor is on one line of the gprof call graph,
++" calling this function jumps to this function in the call graph.
++if exists("b:did_ftplugin")
++  finish
++endif
++let b:did_ftplugin=1
++
++fun! <SID>GprofJumpToFunctionIndex()
++  let l:line = getline('.')
++  if l:line =~ '[\d\+\]$'
++    " We're in a line in the call graph.
++    norm $y%
++    call search('^' . escape(@", '[]'), 'sw')
++    norm zz
++  elseif l:line =~ '^\(\s\+[0-9\.]\+\)\{3}\s\+'
++    " We're in line in the flat profile.
++    norm 55|y$
++    call search('^\[\d\+\].*\d\s\+' .  escape(@", '[]*.'), 'sW')
++    norm zz
++  endif
++endfun
++
++" Pressing <C-]> on a line in the gprof flat profile or in
++" the call graph, jumps to the corresponding function inside
++" the flat profile.
++map <silent> <C-]> :call <SID>GprofJumpToFunctionIndex()<CR>
++
++" vim:sw=2 fdm=indent
+diff -Naur vim73.orig/runtime/ftplugin/haml.vim vim73/runtime/ftplugin/haml.vim
+--- vim73.orig/runtime/ftplugin/haml.vim	2010-05-21 09:51:40.000000000 +0000
++++ vim73/runtime/ftplugin/haml.vim	2013-06-07 17:07:12.055640918 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin
+-" Language:		Haml
+-" Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:		2010 May 21
++" Language:	Haml
++" Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
++" Last Change:	2013 Jun 01
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -18,6 +18,7 @@
+ 
+ runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+ unlet! b:did_ftplugin
++set matchpairs-=<:>
+ 
+ " Override our defaults if these were set by an included ftplugin.
+ if exists("b:undo_ftplugin")
+@@ -63,5 +64,6 @@
+       \ " | unlet! b:browsefilter b:match_words | " . s:undo_ftplugin
+ 
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+ 
+ " vim:set sw=2:
+diff -Naur vim73.orig/runtime/ftplugin/hamster.vim vim73/runtime/ftplugin/hamster.vim
+--- vim73.orig/runtime/ftplugin/hamster.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/hamster.vim	2013-06-07 17:07:12.068974213 +0000
+@@ -12,7 +12,7 @@
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
+ 
+-let cpo_save = &cpo
++let s:cpo_save = &cpo
+ set cpo-=C
+ 
+ let b:undo_ftplugin = "setl fo< com< tw< commentstring<"
+@@ -57,5 +57,6 @@
+ endif
+ 
+ setlocal ignorecase
+-let &cpo = cpo_save
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ setlocal cpo+=M		" makes \%( match \)
+diff -Naur vim73.orig/runtime/ftplugin/help.vim vim73/runtime/ftplugin/help.vim
+--- vim73.orig/runtime/ftplugin/help.vim	2010-07-24 12:31:35.000000000 +0000
++++ vim73/runtime/ftplugin/help.vim	2013-06-07 17:07:12.095640804 +0000
+@@ -13,7 +13,10 @@
+ 
+ let b:undo_ftplugin = "setl fo< tw< cole< cocu<"
+ 
+-setlocal formatoptions+=tcroql textwidth=78 cole=2 cocu=nc
++setlocal formatoptions+=tcroql textwidth=78
++if has("conceal")
++  setlocal cole=2 cocu=nc
++endif
+ 
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/html.vim vim73/runtime/ftplugin/html.vim
+--- vim73.orig/runtime/ftplugin/html.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/html.vim	2013-06-07 17:07:12.138974014 +0000
+@@ -88,3 +88,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/initex.vim vim73/runtime/ftplugin/initex.vim
+--- vim73.orig/runtime/ftplugin/initex.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/initex.vim	2013-06-07 17:07:12.172307252 +0000
+@@ -34,5 +34,6 @@
+ setlocal suffixesadd=.tex
+ 
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+ 
+ " vim:sts=2:sw=2:
+diff -Naur vim73.orig/runtime/ftplugin/ishd.vim vim73/runtime/ftplugin/ishd.vim
+--- vim73.orig/runtime/ftplugin/ishd.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/ishd.vim	2013-06-07 17:07:12.182307223 +0000
+@@ -8,6 +8,8 @@
+ 
+ setlocal foldmethod=syntax
+ 
++" Using line continuation here.
++let s:cpo_save = &cpo
+ set cpo-=C
+ 
+ " matchit support
+@@ -26,3 +28,6 @@
+     let b:browsefilter = "InstallShield Files (*.rul)\t*.rul\n" .
+ 		       \ "All Files (*.*)\t*.*\n"
+ endif
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/java.vim vim73/runtime/ftplugin/java.vim
+--- vim73.orig/runtime/ftplugin/java.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/java.vim	2013-06-07 17:07:12.192307195 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:	Java
+ " Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+-" Last Change:  20 Jan 2009
++" Last Change:  2012 Mar 11
+ " URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
+ 
+ if exists("b:did_ftplugin") | finish | endif
+@@ -48,3 +48,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/jsp.vim vim73/runtime/ftplugin/jsp.vim
+--- vim73.orig/runtime/ftplugin/jsp.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/jsp.vim	2013-06-07 17:07:12.212307138 +0000
+@@ -64,3 +64,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/kwt.vim vim73/runtime/ftplugin/kwt.vim
+--- vim73.orig/runtime/ftplugin/kwt.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/kwt.vim	2013-06-07 17:07:12.225640433 +0000
+@@ -1,12 +1,13 @@
+ " Vim filetype plugin file
+ " Language:	Kimwitu++
+-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
+-" Last Change:	16 August 2001
++" Maintainer:	Michael Piefel <entwurf@piefel.de>
++" Last Change:	10 March 2012
+ 
+ " Behaves almost like C++
+ runtime! ftplugin/cpp.vim ftplugin/cpp_*.vim ftplugin/cpp/*.vim
+ 
+-set cpo-=C
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+ " Limit the browser to related files
+ if has("gui_win32") && !exists("b:browsefilter")
+@@ -18,3 +19,14 @@
+ 
+ " Set the errorformat for the Kimwitu++ compiler
+ set efm+=kc%.%#:\ error\ at\ %f:%l:\ %m
++
++if exists("b:undo_ftplugin")
++    let b:undo_ftplugin = b:undo_ftplugin . " | setlocal efm<"
++	\ . "| unlet! b:browsefiler"
++else
++    let b:undo_ftplugin = "setlocal efm<"
++	\ . "| unlet! b:browsefiler"
++endif
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/lisp.vim vim73/runtime/ftplugin/lisp.vim
+--- vim73.orig/runtime/ftplugin/lisp.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/lisp.vim	2013-06-07 17:07:12.292306909 +0000
+@@ -1,10 +1,10 @@
+ " Vim filetype plugin
+ " Language:      Lisp
+ " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
+-" URL:		 http://iamphet.nm.ru/vim
++" URL:		 http://sites.google.com/site/khorser/opensource/vim
+ " Original author:    Dorai Sitaram <ds26@gte.com>
+ " Original URL:		 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+-" Last Change:   Nov 8, 2004
++" Last Change:   Feb 12, 2013
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -19,8 +19,11 @@
+ setl formatoptions-=t
+ setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
+ setl lisp
++setl commentstring=;%s
+ 
+ " make comments behaviour like in c.vim
+ " e.g. insertion of ;;; and ;; on normal "O" or "o" when staying in comment
+ setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|#
+ setl formatoptions+=croql
++
++let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lisp< commentstring<"
+diff -Naur vim73.orig/runtime/ftplugin/logcheck.vim vim73/runtime/ftplugin/logcheck.vim
+--- vim73.orig/runtime/ftplugin/logcheck.vim	2010-07-29 20:32:10.000000000 +0000
++++ vim73/runtime/ftplugin/logcheck.vim	2013-06-07 17:07:12.305640204 +0000
+@@ -1,8 +1,8 @@
+ " Vim filetype plugin file
+ " Language:    Logcheck
+ " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+-" Last Change: 2010 Jul 29
+-" License:     GNU GPL, version 2.0
++" Last Change: 2012 Jan 15
++" License:     Vim License
+ " URL: http://hg.debian.org/hg/pkg-vim/vim/file/unstable/runtime/ftplugin/logcheck.vim
+ 
+ if exists("b:did_ftplugin")
+diff -Naur vim73.orig/runtime/ftplugin/lua.vim vim73/runtime/ftplugin/lua.vim
+--- vim73.orig/runtime/ftplugin/lua.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/lua.vim	2013-06-07 17:07:12.362306709 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file.
+ " Language:	Lua 4.0+
+ " Maintainer:	Max Ischenko <mfi@ukr.net>
+-" Last Change:	2008 Mar 25
++" Last Change:	2012 Mar 07
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -11,6 +11,9 @@
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Set 'formatoptions' to break comment lines but not other lines, and insert
+ " the comment leader when hitting <CR> or using "o".
+ setlocal fo-=t fo+=croql
+@@ -22,8 +25,6 @@
+ 
+ " The following lines enable the macros/matchit.vim plugin for
+ " extended matching with the % key.
+-
+-set cpo-=C
+ if exists("loaded_matchit")
+ 
+   let b:match_ignorecase = 0
+@@ -34,3 +35,8 @@
+     \ '\<repeat\>:\<until\>'
+ 
+ endif " exists("loaded_matchit")
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++let b:undo_ftplugin = "setlocal fo< com< cms< suffixesadd<"
+diff -Naur vim73.orig/runtime/ftplugin/mail.vim vim73/runtime/ftplugin/mail.vim
+--- vim73.orig/runtime/ftplugin/mail.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/mail.vim	2013-06-07 17:07:12.388973300 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:	Mail
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2009 Jun 03
++" Last Change:	2012 Nov 20
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -9,7 +9,7 @@
+ endif
+ let b:did_ftplugin = 1
+ 
+-let b:undo_ftplugin = "setl modeline< tw< fo<"
++let b:undo_ftplugin = "setl modeline< tw< fo< comments<"
+ 
+ " Don't use modelines in e-mail messages, avoid trojan horses and nasty
+ " "jokes" (e.g., setting 'textwidth' to 5).
+@@ -23,6 +23,9 @@
+ " Set 'formatoptions' to break text lines and keep the comment leader ">".
+ setlocal fo+=tcql
+ 
++" Add n:> to 'comments, in case it was removed elsewhere
++setlocal comments+=n:>
++
+ " Add mappings, unless the user doesn't want this.
+ if !exists("no_plugin_maps") && !exists("no_mail_maps")
+   " Quote text by inserting "> "
+diff -Naur vim73.orig/runtime/ftplugin/make.vim vim73/runtime/ftplugin/make.vim
+--- vim73.orig/runtime/ftplugin/make.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/make.vim	2013-06-07 17:07:12.412306567 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:	Make
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 Jun 17
++" Last Change:	2013 Apr 22
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -26,3 +26,8 @@
+ 
+ " Including files.
+ let &l:include = '^\s*include'
++
++" For matchit.vim, suggested by Albert Netymk.
++if exists("loaded_matchit")
++  let b:match_words = '\<if\(n\)\=\(eq\|def\)\>:\<else\>:\<endif\>,\<define\>:\<endef\>'
++endif
+diff -Naur vim73.orig/runtime/ftplugin/man.vim vim73/runtime/ftplugin/man.vim
+--- vim73.orig/runtime/ftplugin/man.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/man.vim	2013-06-07 17:07:12.415639890 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:	man
+ " Maintainer:	SungHyun Nam <goweol@gmail.com>
+-" Last Change:	2008 Sep 17
++" Last Change:	2012 Mar 6
+ 
+ " To make the ":Man" command available before editing a manual page, source
+ " this script from your startup vimrc file.
+@@ -15,6 +15,12 @@
+   endif
+   let b:did_ftplugin = 1
+ 
++  " Ensure Vim is not recursively invoked (man-db does this)
++  " when doing ctrl-[ on a man page reference.
++  if exists("$MANPAGER")
++    let $MANPAGER = ""
++  endif
++
+   " allow dot and dash in manual page name.
+   setlocal iskeyword+=\.,-
+ 
+@@ -29,6 +35,8 @@
+     nnoremap <buffer> <c-t> :call <SID>PopPage()<CR>
+   endif
+ 
++  let b:undo_ftplugin = "setlocal iskeyword<"
++
+ endif
+ 
+ if exists(":Man") != 2
+diff -Naur vim73.orig/runtime/ftplugin/markdown.vim vim73/runtime/ftplugin/markdown.vim
+--- vim73.orig/runtime/ftplugin/markdown.vim	2010-05-21 09:52:36.000000000 +0000
++++ vim73/runtime/ftplugin/markdown.vim	2013-06-07 17:07:12.448973129 +0000
+@@ -1,19 +1,22 @@
+ " Vim filetype plugin
+ " Language:		Markdown
+ " Maintainer:		Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:		2010 May 21
++" Last Change:		2013 May 30
+ 
+ if exists("b:did_ftplugin")
+   finish
+ endif
+ 
+ runtime! ftplugin/html.vim ftplugin/html_*.vim ftplugin/html/*.vim
+-unlet! b:did_ftplugin
+ 
+ setlocal comments=fb:*,fb:-,fb:+,n:> commentstring=>\ %s
+-setlocal formatoptions+=tcqln
++setlocal formatoptions+=tcqln formatoptions-=r formatoptions-=o
+ setlocal formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\|^[-*+]\\s\\+
+ 
+-let b:undo_ftplugin .= "|setl cms< com< fo<"
++if exists('b:undo_ftplugin')
++  let b:undo_ftplugin .= "|setl cms< com< fo< flp<"
++else
++  let b:undo_ftplugin = "setl cms< com< fo< flp<"
++endif
+ 
+ " vim:set sw=2:
+diff -Naur vim73.orig/runtime/ftplugin/matlab.vim vim73/runtime/ftplugin/matlab.vim
+--- vim73.orig/runtime/ftplugin/matlab.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/matlab.vim	2013-06-07 17:07:12.452306452 +0000
+@@ -25,6 +25,4 @@
+ 	\ . "| unlet! b:match_words"
+ 
+ let &cpo = s:save_cpo
+-
+-
+-
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/ocaml.vim vim73/runtime/ftplugin/ocaml.vim
+--- vim73.orig/runtime/ftplugin/ocaml.vim	2010-07-10 12:21:22.000000000 +0000
++++ vim73/runtime/ftplugin/ocaml.vim	2013-06-07 17:07:12.608972672 +0000
+@@ -2,17 +2,18 @@
+ " Maintainer:  David Baelde        <firstname.name@ens-lyon.org>
+ "              Mike Leary          <leary@nwlink.com>
+ "              Markus Mottl        <markus.mottl@gmail.com>
++"              Pierre Vittet       <pierre-vittet@pvittet.com>
+ "              Stefano Zacchiroli  <zack@bononia.it>
+ "              Vincent Aravantinos <firstname.name@imag.fr>
+ " URL:         http://www.ocaml.info/vim/ftplugin/ocaml.vim
+-" Last Change: 2010 Jul 10 - Bugfix, thanks to Pat Rondon
++" Last Change:
++"              2012 Jan 15 - Bugfix :reloading .annot file does not close
++"              splitted view (Pierre Vittet)
++"              2011 Nov 28 - Bugfix + support of multiple ml annotation file
++"              (Pierre Vittet)
++"              2010 Jul 10 - Bugfix, thanks to Pat Rondon
+ "              2008 Jul 17 - Bugfix related to fnameescape (VA)
+-"              2007 Sep 09 - Added .annot support for ocamlbuild, python not 
+-"                            needed anymore (VA)
+-"              2006 May 01 - Added .annot support for file.whateverext (SZ)
+-"	             2006 Apr 11 - Fixed an initialization bug; fixed ASS abbrev (MM)
+-"              2005 Oct 13 - removed GPL; better matchit support (MM, SZ)
+-"
++
+ if exists("b:did_ftplugin")
+   finish
+ endif
+@@ -31,7 +32,7 @@
+ 
+ " Error handling -- helps moving where the compiler wants you to go
+ let s:cposet=&cpoptions
+-set cpo-=C
++set cpo&vim
+ setlocal efm=
+       \%EFile\ \"%f\"\\,\ line\ %l\\,\ characters\ %c-%*\\d:,
+       \%EFile\ \"%f\"\\,\ line\ %l\\,\ character\ %c:%m,
+@@ -211,7 +212,7 @@
+ " cursor position.
+ "
+ " Typing '<LocalLeader>t' (LocalLeader defaults to '\', see :h LocalLeader)
+-" will cause " Ocaml_print_type function to be invoked with the right 
++" will cause " Ocaml_print_type function to be invoked with the right
+ " argument depending on the current mode (visual or not).
+ " >>
+ "
+@@ -221,9 +222,9 @@
+ "   - no need for python support
+ "     + plus : more portable
+ "     + minus: no more lazy parsing, it looks very fast however
+-"     
++"
+ "   - ocamlbuild support, ie.
+-"     + the plugin finds the _build directory and looks for the 
++"     + the plugin finds the _build directory and looks for the
+ "       corresponding file inside;
+ "     + if the user decides to change the name of the _build directory thanks
+ "       to the '-build-dir' option of ocamlbuild, the plugin will manage in
+@@ -232,7 +233,7 @@
+ "     + if ocamlbuild is not used, the usual behaviour holds; ie. the .annot
+ "       file should be in the same directory as the source file;
+ "     + for vim plugin programmers:
+-"       the variable 'b:_build_dir' contains the inferred path to the build 
++"       the variable 'b:_build_dir' contains the inferred path to the build
+ "       directory, even if this one is not named '_build'.
+ "
+ " Bonus :
+@@ -287,24 +288,27 @@
+   endfun
+ 
+     " After call:
+-    " - b:annot_file_path : 
++    "
++    "  Following information have been put in s:annot_file_list, using
++    "  annot_file_name name as key:
++    " - annot_file_path :
+     "                       path to the .annot file corresponding to the
+     "                       source file (dealing with ocamlbuild stuff)
+-    " - b:_build_path: 
++    " - _build_path:
+     "                       path to the build directory even if this one is
+     "                       not named '_build'
++    " - date_of_last annot:
++    "                       Set to 0 until we load the file. It contains the
++    "                       date at which the file has been loaded.
+   function! s:Locate_annotation()
+-    if !b:annotation_file_located
+-
++    let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
++    if !exists ("s:annot_file_list[annot_file_name]")
+       silent exe 'cd' s:Fnameescape(expand('%:p:h'))
+-
+-      let annot_file_name = s:Fnameescape(expand('%:r')).'.annot'
+-
+       " 1st case : the annot file is in the same directory as the buffer (no ocamlbuild)
+-      let b:annot_file_path = findfile(annot_file_name,'.')
+-      if b:annot_file_path != ''
+-        let b:annot_file_path = getcwd().'/'.b:annot_file_path
+-        let b:_build_path = ''
++      let annot_file_path = findfile(annot_file_name,'.')
++      if annot_file_path != ''
++        let annot_file_path = getcwd().'/'.annot_file_path
++        let _build_path = ''
+       else
+         " 2nd case : the buffer and the _build directory are in the same directory
+         "      ..
+@@ -312,15 +316,15 @@
+         "    /    \
+         " _build  .ml
+         "
+-        let b:_build_path = finddir('_build','.')
+-        if b:_build_path != ''
+-          let b:_build_path = getcwd().'/'.b:_build_path
+-          let b:annot_file_path           = findfile(annot_file_name,'_build')
+-          if b:annot_file_path != ''
+-            let b:annot_file_path = getcwd().'/'.b:annot_file_path
++        let _build_path = finddir('_build','.')
++        if _build_path != ''
++          let _build_path = getcwd().'/'._build_path
++          let annot_file_path           = findfile(annot_file_name,'_build')
++          if annot_file_path != ''
++            let annot_file_path = getcwd().'/'.annot_file_path
+           endif
+         else
+-          " 3rd case : the _build directory is in a directory higher in the file hierarchy 
++          " 3rd case : the _build directory is in a directory higher in the file hierarchy
+           "            (it can't be deeper by ocamlbuild requirements)
+           "      ..
+           "     /  \
+@@ -330,65 +334,74 @@
+           "            \
+           "           .ml
+           "
+-          let b:_build_path = finddir('_build',';')
+-          if b:_build_path != ''
+-            let project_path                = substitute(b:_build_path,'/_build$','','')
++          let _build_path = finddir('_build',';')
++          if _build_path != ''
++            let project_path                = substitute(_build_path,'/_build$','','')
+             let path_relative_to_project    = s:Fnameescape(substitute(expand('%:p:h'),project_path.'/','',''))
+-            let b:annot_file_path           = findfile(annot_file_name,project_path.'/_build/'.path_relative_to_project)
++            let annot_file_path           = findfile(annot_file_name,project_path.'/_build/'.path_relative_to_project)
+           else
+-            let b:annot_file_path = findfile(annot_file_name,'**')
++            let annot_file_path = findfile(annot_file_name,'**')
+             "4th case : what if the user decided to change the name of the _build directory ?
+             "           -> we relax the constraints, it should work in most cases
+-            if b:annot_file_path != ''
++            if annot_file_path != ''
+               " 4a. we suppose the renamed _build directory is in the current directory
+-              let b:_build_path = matchstr(b:annot_file_path,'^[^/]*')
+-              if b:annot_file_path != ''
+-                let b:annot_file_path = getcwd().'/'.b:annot_file_path
+-                let b:_build_path     = getcwd().'/'.b:_build_path
++              let _build_path = matchstr(annot_file_path,'^[^/]*')
++              if annot_file_path != ''
++                let annot_file_path = getcwd().'/'.annot_file_path
++                let _build_path     = getcwd().'/'._build_path
+               endif
+             else
++              let annot_file_name = ''
++              "(Pierre Vittet: I have commented 4b because this was chrashing
++              "my vim (it produced infinite loop))
++              "
+               " 4b. anarchy : the renamed _build directory may be higher in the hierarchy
+               " this will work if the file for which we are looking annotations has a unique name in the whole project
+               " if this is not the case, it may still work, but no warranty here
+-              let b:annot_file_path = findfile(annot_file_name,'**;')
+-              let project_path      = s:Find_common_path(b:annot_file_path,expand('%:p:h'))
+-              let b:_build_path       = matchstr(b:annot_file_path,project_path.'/[^/]*')
++              "let annot_file_path = findfile(annot_file_name,'**;')
++              "let project_path      = s:Find_common_path(annot_file_path,expand('%:p:h'))
++              "let _build_path       = matchstr(annot_file_path,project_path.'/[^/]*')
+             endif
+           endif
+         endif
+       endif
+ 
+-      if b:annot_file_path == ''
++      if annot_file_path == ''
+         throw 'E484: no annotation file found'
+       endif
+ 
+       silent exe 'cd' '-'
+-
+-      let b:annotation_file_located = 1
++      let s:annot_file_list[annot_file_name]= [annot_file_path, _build_path, 0]
+     endif
+   endfun
+ 
+-  " This in order to locate the .annot file only once
+-  let b:annotation_file_located = 0
++  " This variable contain a dictionnary of list. Each element of the dictionnary
++  " represent an annotation system. An annotation system is a list with :
++  " - annotation file name as it's key
++  " - annotation file path as first element of the contained list
++  " - build path as second element of the contained list
++  " - annot_file_last_mod (contain the date of .annot file) as third element
++  let s:annot_file_list = {}
+ 
+ " 2. Finding the type information in the annotation file
+-  
++
+   " a. The annotation file is opened in vim as a buffer that
+   " should be (almost) invisible to the user.
+ 
+       " After call:
+       " The current buffer is now the one containing the .annot file.
+       " We manage to keep all this hidden to the user's eye.
+-    function! s:Enter_annotation_buffer()
++    function! s:Enter_annotation_buffer(annot_file_path)
+       let s:current_pos = getpos('.')
+       let s:current_hidden = &l:hidden
+       set hidden
+       let s:current_buf = bufname('%')
+-      if bufloaded(b:annot_file_path)
+-        silent exe 'keepj keepalt' 'buffer' s:Fnameescape(b:annot_file_path)
++      if bufloaded(a:annot_file_path)
++        silent exe 'keepj keepalt' 'buffer' s:Fnameescape(a:annot_file_path)
+       else
+-        silent exe 'keepj keepalt' 'view' s:Fnameescape(b:annot_file_path)
++        silent exe 'keepj keepalt' 'view' s:Fnameescape(a:annot_file_path)
+       endif
++      call setpos(".", [0, 0 , 0 , 0])
+     endfun
+ 
+       " After call:
+@@ -401,27 +414,35 @@
+ 
+       " After call:
+       "   The annot file is loaded and assigned to a buffer.
+-      "   This also handles the modification date of the .annot file, eg. after a 
+-      "   compilation.
+-    function! s:Load_annotation()
+-      if bufloaded(b:annot_file_path) && b:annot_file_last_mod < getftime(b:annot_file_path)
+-        call s:Enter_annotation_buffer()
+-        silent exe "bunload"
+-        call s:Exit_annotation_buffer()
++      "   This also handles the modification date of the .annot file, eg. after a
++      "   compilation (return an updated annot_file_list).
++    function! s:Load_annotation(annot_file_name)
++      let annot = s:annot_file_list[a:annot_file_name]
++      let annot_file_path = annot[0]
++      let annot_file_last_mod = 0
++      if exists("annot[2]")
++        let annot_file_last_mod = annot[2]
++      endif
++      if bufloaded(annot_file_path) && annot_file_last_mod < getftime(annot_file_path)
++        " if there is a more recent file
++        let nr = bufnr(annot_file_path)
++        silent exe 'keepj keepalt' 'bunload' nr
+       endif
+-      if !bufloaded(b:annot_file_path)
+-        call s:Enter_annotation_buffer()
++      if !bufloaded(annot_file_path)
++        call s:Enter_annotation_buffer(annot_file_path)
+         setlocal nobuflisted
+         setlocal bufhidden=hide
+         setlocal noswapfile
+         setlocal buftype=nowrite
+         call s:Exit_annotation_buffer()
+-        let b:annot_file_last_mod = getftime(b:annot_file_path)
++        let annot[2] = getftime(annot_file_path)
++        " List updated with the new date
++        let s:annot_file_list[a:annot_file_name] = annot
+       endif
+     endfun
+-  
++
+   "b. 'search' and 'match' work to find the type information
+-   
++
+       "In:  - lin1,col1: postion of expression first char
+       "     - lin2,col2: postion of expression last char
+       "Out: - the pattern to be looked for to find the block
+@@ -462,12 +483,13 @@
+       let end = line(".") - 1
+       return join(getline(begin,end),"\n")
+     endfun
+-        
++
+       "In:  the pattern to look for in order to match the block
+       "Out: the type information (calls s:Match_data)
+       " Should be called in the annotation buffer
+-    function! s:Extract_type_data(block_pattern)
+-      call s:Enter_annotation_buffer()
++    function! s:Extract_type_data(block_pattern, annot_file_name)
++      let annot_file_path = s:annot_file_list[a:annot_file_name][0]
++      call s:Enter_annotation_buffer(annot_file_path)
+       try
+         if search(a:block_pattern,'e') == 0
+           throw "no_annotation"
+@@ -479,10 +501,10 @@
+       endtry
+       return annotation
+     endfun
+-  
++
+   "c. link this stuff with what the user wants
+   " ie. get the expression selected/under the cursor
+-    
++
+     let s:ocaml_word_char = '\w|[À-ÿ]|'''
+ 
+       "In:  the current mode (eg. "visual", "normal", etc.)
+@@ -527,19 +549,20 @@
+ 
+       "In:  the current mode (eg. "visual", "normal", etc.)
+       "Out: the type information (calls s:Extract_type_data)
+-    function! s:Get_type(mode)
++    function! s:Get_type(mode, annot_file_name)
+       let [lin1,lin2,col1,col2] = s:Match_borders(a:mode)
+-      return s:Extract_type_data(s:Block_pattern(lin1,lin2,col1,col2))
++      return s:Extract_type_data(s:Block_pattern(lin1,lin2,col1,col2), a:annot_file_name)
+     endfun
+-  
++
+   "d. main
+       "In:         the current mode (eg. "visual", "normal", etc.)
+       "After call: the type information is displayed
+     if !exists("*Ocaml_get_type")
+       function Ocaml_get_type(mode)
++        let annot_file_name = s:Fnameescape(expand('%:t:r')).'.annot'
+         call s:Locate_annotation()
+-        call s:Load_annotation()
+-        return s:Get_type(a:mode)
++        call s:Load_annotation(annot_file_name)
++        return s:Get_type(a:mode, annot_file_name)
+       endfun
+     endif
+ 
+diff -Naur vim73.orig/runtime/ftplugin/occam.vim vim73/runtime/ftplugin/occam.vim
+--- vim73.orig/runtime/ftplugin/occam.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/occam.vim	2013-06-07 17:07:12.625639291 +0000
+@@ -9,6 +9,8 @@
+   finish
+ endif
+ let b:did_ftplugin = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ "{{{  Indent settings
+ " Set shift width for indent
+@@ -37,3 +39,11 @@
+ endif
+ "}}}
+ 
++"{{{  Undo settings
++let b:undo_ftplugin = "setlocal shiftwidth< softtabstop< expandtab<"
++	\ . " formatoptions< comments< textwidth<"
++	\ . "| unlet! b:browsefiler"
++"}}}
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/ftplugin/pascal.vim vim73/runtime/ftplugin/pascal.vim
+--- vim73.orig/runtime/ftplugin/pascal.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/pascal.vim	2013-06-07 17:07:12.642305910 +0000
+@@ -1,14 +1,19 @@
+ " Vim filetype plugin file
+ " Language:	pascal
+ " Maintainer:	Dan Sharp <dwsharp at users dot sourceforge dot net>
+-" Last Changed: 20 Jan 2009
++" Last Changed: 11 Apr 2011
+ " URL:		http://dwsharp.users.sourceforge.net/vim/ftplugin
+ 
+ if exists("b:did_ftplugin") | finish | endif
+ let b:did_ftplugin = 1
+ 
+ if exists("loaded_matchit")
+-    let b:match_words='\<\%(begin\|case\|try\)\>:\<end\>'
++    let b:match_ignorecase = 1 " (pascal is case-insensitive)
++
++    let b:match_words = '\<\%(begin\|case\|record\|object\|try\)\>'
++    let b:match_words .= ':\<^\s*\%(except\|finally\)\>:\<end\>'
++    let b:match_words .= ',\<repeat\>:\<until\>'
++    let b:match_words .= ',\<if\>:\<else\>'
+ endif
+ 
+ " Undo the stuff we changed.
+diff -Naur vim73.orig/runtime/ftplugin/perl.vim vim73/runtime/ftplugin/perl.vim
+--- vim73.orig/runtime/ftplugin/perl.vim	2010-07-22 03:46:09.000000000 +0000
++++ vim73/runtime/ftplugin/perl.vim	2013-06-07 17:07:12.682305796 +0000
+@@ -1,8 +1,9 @@
+ " Vim filetype plugin file
+-" Language:     Perl
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" URL:          http://github.com/petdance/vim-perl
+-" Last Change:  2009-08-14
++" Language:      Perl
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2013-05-11
+ 
+ if exists("b:did_ftplugin") | finish | endif
+ let b:did_ftplugin = 1
+@@ -12,7 +13,8 @@
+ let s:save_cpo = &cpo
+ set cpo-=C
+ 
+-setlocal formatoptions+=crq
++setlocal formatoptions-=t
++setlocal formatoptions+=crqol
+ setlocal keywordprg=perldoc\ -f
+ 
+ setlocal comments=:#
+@@ -29,7 +31,7 @@
+ " Provided by Ned Konz <ned at bike-nomad dot com>
+ "---------------------------------------------
+ setlocal include=\\<\\(use\\\|require\\)\\>
+-setlocal includeexpr=substitute(substitute(v:fname,'::','/','g'),'$','.pm','')
++setlocal includeexpr=substitute(substitute(substitute(v:fname,'::','/','g'),'->\*','',''),'$','.pm','')
+ setlocal define=[^A-Za-z_]
+ 
+ " The following line changes a global variable but is necessary to make
+@@ -38,7 +40,7 @@
+ " problem for you, add an after/ftplugin/perl.vim file that contains
+ "       set isfname-=:
+ set isfname+=:
+-"setlocal iskeyword=48-57,_,A-Z,a-z,:
++set iskeyword+=:
+ 
+ " Set this once, globally.
+ if !exists("perlpath")
+@@ -60,12 +62,27 @@
+     endif
+ endif
+ 
+-let &l:path=perlpath
++" Append perlpath to the existing path value, if it is set.  Since we don't
++" use += to do it because of the commas in perlpath, we have to handle the
++" global / local settings, too.
++if &l:path == ""
++    if &g:path == ""
++        let &l:path=perlpath
++    else
++        let &l:path=&g:path.",".perlpath
++    endif
++else
++    let &l:path=&l:path.",".perlpath
++endif
+ "---------------------------------------------
+ 
+ " Undo the stuff we changed.
+-let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp<" .
++let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isf< kp< path<" .
+ 	    \	      " | unlet! b:browsefilter"
+ 
++" proper matching for matchit plugin
++let b:match_skip = 's:comment\|string\|perlQQ\|perlShellCommand\|perlHereDoc\|perlSubstitution\|perlTranslation\|perlMatch\|perlFormatField'
++
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/perl6.vim vim73/runtime/ftplugin/perl6.vim
+--- vim73.orig/runtime/ftplugin/perl6.vim	2010-08-14 19:27:16.000000000 +0000
++++ vim73/runtime/ftplugin/perl6.vim	2013-06-07 17:07:12.705639062 +0000
+@@ -1,9 +1,10 @@
+ " Vim filetype plugin file
+-" Language:     Perl 6
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" URL:          http://github.com/petdance/vim-perl/tree/master
+-" Last Change:  2010-08-10
+-" Contributors: Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
++" Language:      Perl 6
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2013-05-11
++" Contributors:  Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
+ "
+ " Based on ftplugin/perl.vim by Dan Sharp <dwsharp at hotmail dot com>
+ 
+@@ -15,16 +16,19 @@
+ let s:save_cpo = &cpo
+ set cpo-=C
+ 
+-setlocal formatoptions+=crq
++setlocal formatoptions-=t
++setlocal formatoptions+=crqol
++setlocal keywordprg=p6doc
++
+ setlocal comments=:#
+ setlocal commentstring=#%s
+ 
+ " Change the browse dialog on Win32 to show mainly Perl-related files
+ if has("gui_win32")
+     let b:browsefilter = "Perl Source Files (*.pl)\t*.pl\n" .
+-		       \ "Perl Modules (*.pm)\t*.pm\n" .
+-		       \ "Perl Documentation Files (*.pod)\t*.pod\n" .
+-		       \ "All Files (*.*)\t*.*\n"
++               \ "Perl Modules (*.pm)\t*.pm\n" .
++               \ "Perl Documentation Files (*.pod)\t*.pod\n" .
++               \ "All Files (*.*)\t*.*\n"
+ endif
+ 
+ " Provided by Ned Konz <ned at bike-nomad dot com>
+@@ -39,10 +43,35 @@
+ " after/ftplugin/perl6.vim file that contains
+ "       set isfname-=:
+ set isfname+=:
++setlocal iskeyword=48-57,_,A-Z,a-z,:,-
++
++" Set this once, globally.
++if !exists("perlpath")
++    if executable("perl6")
++        try
++            if &shellxquote != '"'
++                let perlpath = system('perl6 -e  "@*INC.join(q/,/).say"')
++            else
++                let perlpath = system("perl6 -e  '@*INC.join(q/,/).say'")
++            endif
++            let perlpath = substitute(perlpath,',.$',',,','')
++        catch /E145:/
++            let perlpath = ".,,"
++        endtry
++    else
++        " If we can't call perl to get its path, just default to using the
++        " current directory and the directory of the current file.
++        let perlpath = ".,,"
++    endif
++endif
++
++let &l:path=perlpath
++"---------------------------------------------
+ 
+ " Undo the stuff we changed.
+ let b:undo_ftplugin = "setlocal fo< com< cms< inc< inex< def< isk<" .
+-	    \         " | unlet! b:browsefilter"
++        \         " | unlet! b:browsefilter"
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/php.vim vim73/runtime/ftplugin/php.vim
+--- vim73.orig/runtime/ftplugin/php.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/php.vim	2013-06-07 17:07:12.722305682 +0000
+@@ -8,8 +8,8 @@
+ 
+ " Make sure the continuation lines below do not cause problems in
+ " compatibility mode.
+-let s:save_cpo = &cpo
+-set cpo-=C
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Define some defaults in case the included ftplugins don't set them.
+ let s:undo_ftplugin = ""
+@@ -79,4 +79,5 @@
+ 	    \	      s:undo_ftplugin
+ 
+ " Restore the saved compatibility options.
+-let &cpo = s:save_cpo
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/ftplugin/plaintex.vim vim73/runtime/ftplugin/plaintex.vim
+--- vim73.orig/runtime/ftplugin/plaintex.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/plaintex.vim	2013-06-07 17:07:12.732305653 +0000
+@@ -32,5 +32,6 @@
+ endif " exists("loaded_matchit")
+ 
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+ 
+ " vim:sts=2:sw=2:
+diff -Naur vim73.orig/runtime/ftplugin/postscr.vim vim73/runtime/ftplugin/postscr.vim
+--- vim73.orig/runtime/ftplugin/postscr.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/postscr.vim	2013-06-07 17:07:12.742305624 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+-" Language:     PostScript
+-" Maintainer:   Mike Williams <mrw@eandem.co.uk>
+-" Last Change:  27th June 2002
++" Language:	PostScript
++" Maintainer:	Mike Williams <mrw@eandem.co.uk>
++" Last Change:  24th April 2012
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -11,6 +11,9 @@
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " PS comment formatting
+ setlocal comments=b:%
+ setlocal formatoptions-=t formatoptions+=rol
+@@ -21,11 +24,15 @@
+   let b:match_words = '<<:>>,\<begin\>:\<end\>,\<save\>:\<restore\>,\<gsave\>:\<grestore\>'
+ endif
+ 
+-set cpo-=C
+-
+ " Define patterns for the browse file filter
+ if has("gui_win32") && !exists("b:browsefilter")
+   let b:browsefilter = "PostScript Files (*.ps)\t*.ps\n" .
+     \ "EPS Files (*.eps)\t*.eps\n" .
+     \ "All Files (*.*)\t*.*\n"
+ endif
++
++let b:undo_ftplugin = "setlocal comments< formatoptions<"
++    \ . "| unlet! b:browsefiler b:match_ignorecase b:match_words"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/pyrex.vim vim73/runtime/ftplugin/pyrex.vim
+--- vim73.orig/runtime/ftplugin/pyrex.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/pyrex.vim	2013-06-07 17:07:12.788972158 +0000
+@@ -2,12 +2,14 @@
+ " Language:	Pyrex
+ " Maintainer:	Marco Barisione <marco.bari@people.it>
+ " URL:		http://marcobari.altervista.org/pyrex_vim.html
+-" Last Change:	2004 May 16
++" Last Change:	2012 May 18
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Behaves just like Python
+ runtime! ftplugin/python.vim ftplugin/python_*.vim ftplugin/python/*.vim
+@@ -20,3 +22,6 @@
+ 			\ "C++ Source Files (*.cpp *.c++)\t*.cpp;*.c++\n" .
+ 			\ "All Files (*.*)\t*.*\n"
+ endif
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/ftplugin/python.vim vim73/runtime/ftplugin/python.vim
+--- vim73.orig/runtime/ftplugin/python.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/python.vim	2013-06-07 17:07:12.798972129 +0000
+@@ -5,6 +5,8 @@
+ 
+ if exists("b:did_ftplugin") | finish | endif
+ let b:did_ftplugin = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ setlocal cinkeys-=0#
+ setlocal indentkeys-=0#
+@@ -41,3 +43,6 @@
+     let b:browsefilter = "Python Files (*.py)\t*.py\n" .
+ 		       \ "All Files (*.*)\t*.*\n"
+ endif
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/ftplugin/qf.vim vim73/runtime/ftplugin/qf.vim
+--- vim73.orig/runtime/ftplugin/qf.vim	2010-07-25 14:15:02.000000000 +0000
++++ vim73/runtime/ftplugin/qf.vim	2013-06-07 17:07:12.805638777 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:     Vim's quickfix window
+ " Maintainer:   Lech Lorens <Lech.Lorens@gmail.com>
+-" Last Changed: 22 Jul 2010
++" Last Changed: 30 Apr 2012
+ 
+ if exists("b:did_ftplugin")
+   finish
+@@ -10,7 +10,7 @@
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
+ 
+-let b:undo_ftplugin = "setl stl<"
++let b:undo_ftplugin = "set stl<"
+ 
+ " Display the command that produced the list in the quickfix window:
+-setlocal stl=%q%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}
++setlocal stl=%t%{exists('w:quickfix_title')?\ '\ '.w:quickfix_title\ :\ ''}\ %=%-15(%l,%c%V%)\ %P
+diff -Naur vim73.orig/runtime/ftplugin/rpl.vim vim73/runtime/ftplugin/rpl.vim
+--- vim73.orig/runtime/ftplugin/rpl.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/rpl.vim	2013-06-07 17:07:12.862305282 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:     RPL/2
+ " Maintainer:   Joël BERTRAND <rpl2@free.fr>
+-" Last Change:	2005 Mar 28
++" Last Change:	2012 Mar 07
+ " Version: 		0.1
+ 
+ " Only do this when not done yet for this buffer
+@@ -18,3 +18,5 @@
+ 
+ " Set 'comments' to format dashed lists in comments.
+ setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
++
++let b:undo_ftplugin = "setlocal fo< comments<"
+diff -Naur vim73.orig/runtime/ftplugin/scheme.vim vim73/runtime/ftplugin/scheme.vim
+--- vim73.orig/runtime/ftplugin/scheme.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/scheme.vim	2013-06-07 17:07:12.895638520 +0000
+@@ -1,13 +1,33 @@
+ " Vim filetype plugin
+ " Language:      Scheme
+ " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
+-" URL:		 http://iamphet.nm.ru/vim
++" URL:		 http://sites.google.com/site/khorser/opensource/vim
+ " Original author:    Dorai Sitaram <ds26@gte.com>
+ " Original URL:		 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+-" Last Change:   Nov 22, 2004
++" Last Change:   Feb 12, 2013
+ 
+-runtime! ftplugin/lisp.vim ftplugin/lisp_*.vim ftplugin/lisp/*.vim
++" Only do this when not done yet for this buffer
++if exists("b:did_ftplugin")
++  finish
++endif
++
++" Don't load another plugin for this buffer
++let b:did_ftplugin = 1
++
++" Copy-paste from ftplugin/lisp.vim
++setl comments=:;
++setl define=^\\s*(def\\k*
++setl formatoptions-=t
++setl iskeyword+=+,-,*,/,%,<,=,>,:,$,?,!,@-@,94
++setl lisp
++setl commentstring=;%s
+ 
++" make comments behaviour like in c.vim
++" e.g. insertion of ;;; and ;; on normal "O" or "o" when staying in comment
++setl comments^=:;;;,:;;,sr:#\|,mb:\|,ex:\|#
++setl formatoptions+=croql
++
++" Scheme-specific settings
+ if exists("b:is_mzscheme") || exists("is_mzscheme")
+     " improve indenting
+     setl iskeyword+=#,%,^
+@@ -24,3 +44,5 @@
+     setl lispwords+=define-values,opt-lambda,case-lambda,syntax-rules,with-syntax,syntax-case
+     setl lispwords+=cond-expand,and-let*,foreign-lambda,foreign-lambda*
+ endif
++
++let b:undo_ftplugin = "setlocal comments< define< formatoptions< iskeyword< lispwords< lisp< commentstring<"
+diff -Naur vim73.orig/runtime/ftplugin/sgml.vim vim73/runtime/ftplugin/sgml.vim
+--- vim73.orig/runtime/ftplugin/sgml.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/sgml.vim	2013-06-07 17:07:12.965638320 +0000
+@@ -37,3 +37,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/sh.vim vim73/runtime/ftplugin/sh.vim
+--- vim73.orig/runtime/ftplugin/sh.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/sh.vim	2013-06-07 17:07:12.978971615 +0000
+@@ -36,3 +36,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/spec.vim vim73/runtime/ftplugin/spec.vim
+--- vim73.orig/runtime/ftplugin/spec.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/spec.vim	2013-06-07 17:07:13.038971444 +0000
+@@ -1,13 +1,16 @@
+ " Plugin to update the %changelog section of RPM spec files
+ " Filename: spec.vim
+ " Maintainer: Gustavo Niemeyer <niemeyer@conectiva.com>
+-" Last Change: Wed, 10 Apr 2002 16:28:52 -0300
++" Last Change: 2012 Mar 07
+ 
+ if exists("b:did_ftplugin")
+ 	finish
+ endif
+ let b:did_ftplugin = 1
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ if !exists("no_plugin_maps") && !exists("no_spec_maps")
+ 	if !hasmapto("<Plug>SpecChangelog")
+ 		map <buffer> <LocalLeader>c <Plug>SpecChangelog
+@@ -166,3 +169,7 @@
+   \ '^Name:^%description:^%clean:^%setup:^%build:^%install:^%files:' .
+   \ '^%package:^%preun:^%postun:^%changelog'
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++let b:undo_ftplugin = "unlet! b:match_ignorecase b:match_words"
+diff -Naur vim73.orig/runtime/ftplugin/sql.vim vim73/runtime/ftplugin/sql.vim
+--- vim73.orig/runtime/ftplugin/sql.vim	2010-08-01 13:57:07.000000000 +0000
++++ vim73/runtime/ftplugin/sql.vim	2013-06-07 17:07:13.052304739 +0000
+@@ -1,8 +1,8 @@
+ " SQL filetype plugin file
+ " Language:    SQL (Common for Oracle, Microsoft SQL Server, Sybase)
+-" Version:     7.0
+-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
+-" Last Change: 2010 Jun 11
++" Version:     11.0
++" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
++" Last Change: 2013 May 13
+ " Download:    http://vim.sourceforge.net/script.php?script_id=454
+ 
+ " For more details please use:
+@@ -30,30 +30,52 @@
+ " To change the default dialect, add the following to your vimrc:
+ "    let g:sql_type_default = 'sqlanywhere'
+ "
+-" This file also creates a command, SQLGetType, which allows you to 
++" This file also creates a command, SQLGetType, which allows you to
+ " determine what the current dialect is in use.
+ "     :SQLGetType
+ "
+ " History
+ "
++" Version 11.0 (May 2013)
++"
++" NF: Updated to use SyntaxComplete's new regex support for syntax groups.
++"
++" Version 10.0 (Dec 2012)
++"
++" NF: Changed all maps to use noremap instead of must map
++" NF: Changed all visual maps to use xnoremap instead of vnoremap as they
++"     should only be used in visual mode and not select mode.
++" BF: Most of the maps were using doubled up backslashes before they were
++"     changed to using the search() function, which meant they no longer
++"     worked.
++"
++" Version 9.0
++"
++" NF: Completes 'b:undo_ftplugin'
++" BF: Correctly set cpoptions when creating script
++"
++" Version 8.0
++"
++" NF: Improved the matchit plugin regex (Talek)
++"
+ " Version 7.0
+-" 
++"
+ " NF: Calls the sqlcomplete#ResetCacheSyntax() function when calling
+ "     SQLSetType.
+ "
+ " Version 6.0
+-" 
++"
+ " NF: Adds the command SQLGetType
+ "
+ " Version 5.0
+-" 
+-" NF: Adds the ability to choose the keys to control SQL completion, just add 
++"
++" NF: Adds the ability to choose the keys to control SQL completion, just add
+ "     the following to your .vimrc:
+ "    let g:ftplugin_sql_omni_key       = '<C-C>'
+ "    let g:ftplugin_sql_omni_key_right = '<Right>'
+ "    let g:ftplugin_sql_omni_key_left  = '<Left>'
+ "
+-" BF: format-options - Auto-wrap comments using textwidth was turned off 
++" BF: format-options - Auto-wrap comments using textwidth was turned off
+ "                      by mistake.
+ 
+ 
+@@ -63,7 +85,7 @@
+ endif
+ 
+ let s:save_cpo = &cpo
+-set cpo=
++set cpo&vim
+ 
+ " Disable autowrapping for code, but enable for comments
+ " t	Auto-wrap text using textwidth
+@@ -77,7 +99,7 @@
+ " This works with both Vim 6 and 7.
+ 
+ if !exists("*SQL_SetType")
+-    " NOTE: You cannot use function! since this file can be 
++    " NOTE: You cannot use function! since this file can be
+     " sourced from within this function.  That will result in
+     " an error reported by Vim.
+     function SQL_GetList(ArgLead, CmdLine, CursorPos)
+@@ -101,9 +123,9 @@
+             "
+             "    Recursively, since there are many filenames that contain
+             "    the word SQL in the indent, syntax and ftplugin directory
+-            let sqls = substitute( sqls, 
+-                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=', 
+-                        \ '\1\n', 
++            let sqls = substitute( sqls,
++                        \ '[\n]\%(.\{-}\)\(\w\+\.\w\+\)\n\@=',
++                        \ '\1\n',
+                         \ 'g'
+                         \ )
+ 
+@@ -138,10 +160,10 @@
+     function SQL_SetType(name)
+ 
+         " User has decided to override default SQL scripts and
+-        " specify a vendor specific version 
++        " specify a vendor specific version
+         " (ie Oracle, Informix, SQL Anywhere, ...)
+         " So check for an remove any settings that prevent the
+-        " scripts from being executed, and then source the 
++        " scripts from being executed, and then source the
+         " appropriate Vim scripts.
+         if exists("b:did_ftplugin")
+             unlet b:did_ftplugin
+@@ -159,10 +181,10 @@
+         endif
+ 
+         " Ensure the name is in the correct format
+-        let new_sql_type = substitute(a:name, 
++        let new_sql_type = substitute(a:name,
+                     \ '\s*\([^\.]\+\)\(\.\w\+\)\?', '\L\1', '')
+ 
+-        " Do not specify a buffer local variable if it is 
++        " Do not specify a buffer local variable if it is
+         " the default value
+         if new_sql_type == 'sql'
+           let new_sql_type = 'sqloracle'
+@@ -171,7 +193,7 @@
+ 
+         " Remove any cached SQL since a new sytax will have different
+         " items and groups
+-        if !exists('g:loaded_sql_completion') || 100 == g:loaded_sql_completion
++        if !exists('g:loaded_sql_completion') || g:loaded_sql_completion >= 100
+             call sqlcomplete#ResetCacheSyntax()
+         endif
+ 
+@@ -199,10 +221,10 @@
+ 
+ if !exists("*SQL_GetType")
+     function SQL_GetType()
+-        if exists('b:sql_type_override') 
++        if exists('b:sql_type_override')
+             echomsg "Current SQL dialect in use:".b:sql_type_override
+         else
+-            echomsg "Current SQL dialect in use:".g:sql_type_default        
++            echomsg "Current SQL dialect in use:".g:sql_type_default
+         endif
+     endfunction
+     command! -nargs=0 SQLGetType :call SQL_GetType()
+@@ -229,7 +251,8 @@
+   finish
+ endif
+ 
+-let b:undo_ftplugin = "setl comments<"
++let b:undo_ftplugin = "setl comments< formatoptions< define< omnifunc<" .
++		    \ " | unlet! b:browsefilter b:match_words"
+ 
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin     = 1
+@@ -276,7 +299,7 @@
+     " doend
+     "
+     " case
+-    " when 
++    " when
+     " when
+     " default
+     " end case
+@@ -290,20 +313,20 @@
+     " WHEN OTHERS THEN
+     "
+     " create[ or replace] procedure|function|event
++                " \ '^\s*\<\%(do\|for\|while\|loop\)\>.*:'.
+ 
+-    let b:match_words =
+-		\ '\<begin\>:\<end\>\W*$,'.
++    " For ColdFusion support
++    setlocal matchpairs+=<:>
++    let b:match_words = &matchpairs .
++		\ ',\<begin\>:\<end\>\W*$,'.
+ 		\
+                 \ s:notend . '\<if\>:'.
+                 \ '\<elsif\>\|\<elseif\>\|\<else\>:'.
+                 \ '\<end\s\+if\>,'.
+                 \
+-                \ '\<do\>\|'.
+-                \ '\<while\>\|'.
+-                \ '\%(' . s:notend . '\<loop\>\)\|'.
+-                \ '\%(' . s:notend . '\<for\>\):'.
+-                \ '\<exit\>\|\<leave\>\|\<break\>\|\<continue\>:'.
+-                \ '\%(\<end\s\+\%(for\|loop\>\)\)\|\<doend\>,'.
++                \ '\(^\s*\)\@<=\(\<\%(do\|for\|while\|loop\)\>.*\):'.
++                \ '\%(\<exit\>\|\<leave\>\|\<break\>\|\<continue\>\):'.
++                \ '\%(\<doend\>\|\%(\<end\s\+\%(for\|while\|loop\>\)\)\),'.
+                 \
+                 \ '\%('. s:notend . '\<case\>\):'.
+                 \ '\%('.s:when_no_matched_or_others.'\):'.
+@@ -335,14 +358,14 @@
+ 
+ " Mappings to move to the next BEGIN ... END block
+ " \W - no characters or digits
+-nmap <buffer> <silent> ]] :call search('\\c^\\s*begin\\>', 'W' )<CR>
+-nmap <buffer> <silent> [[ :call search('\\c^\\s*begin\\>', 'bW' )<CR>
+-nmap <buffer> <silent> ][ :call search('\\c^\\s*end\\W*$', 'W' )<CR>
+-nmap <buffer> <silent> [] :call search('\\c^\\s*end\\W*$', 'bW' )<CR>
+-vmap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'W' )<CR>
+-vmap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*begin\\>', 'bW' )<CR>
+-vmap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'W' )<CR>
+-vmap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\\c^\\s*end\\W*$', 'bW' )<CR>
++nnoremap <buffer> <silent> ]] :call search('\c^\s*begin\>', 'W' )<CR>
++nnoremap <buffer> <silent> [[ :call search('\c^\s*begin\>', 'bW' )<CR>
++nnoremap <buffer> <silent> ][ :call search('\c^\s*end\W*$', 'W' )<CR>
++nnoremap <buffer> <silent> [] :call search('\c^\s*end\W*$', 'bW' )<CR>
++xnoremap <buffer> <silent> ]] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'W' )<CR>
++xnoremap <buffer> <silent> [[ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*begin\>', 'bW' )<CR>
++xnoremap <buffer> <silent> ][ :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'W' )<CR>
++xnoremap <buffer> <silent> [] :<C-U>exec "normal! gv"<Bar>call search('\c^\s*end\W*$', 'bW' )<CR>
+ 
+ 
+ " By default only look for CREATE statements, but allow
+@@ -359,7 +382,7 @@
+ " backwards, you must use \{,1}
+ if !exists('g:ftplugin_sql_objects')
+     let g:ftplugin_sql_objects = 'function,procedure,event,' .
+-                \ '\\(existing\\\\|global\\s\\+temporary\\s\\+\\)\\\{,1}' .
++                \ '\(existing\\|global\s\+temporary\s\+\)\{,1}' .
+                 \ 'table,trigger' .
+                 \ ',schema,service,publication,database,datatype,domain' .
+                 \ ',index,subscription,synchronization,view,variable'
+@@ -380,47 +403,47 @@
+ 
+ " Replace all ,'s with bars, except ones with numbers after them.
+ " This will most likely be a \{,1} string.
+-let s:ftplugin_sql_objects = 
+-            \ '\\c^\\s*' .
+-            \ '\\(\\(' .
+-            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\\\|', 'g') .
+-            \ '\\)\\s\\+\\(or\\s\\+replace\\\s\+\\)\\{,1}\\)\\{,1}' .
+-            \ '\\<\\(' .
+-            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\\\|', 'g') .
+-            \ '\\)\\>' 
++let s:ftplugin_sql_objects =
++            \ '\c^\s*' .
++            \ '\(\(' .
++            \ substitute(g:ftplugin_sql_statements, ',\d\@!', '\\\\|', 'g') .
++            \ '\)\s\+\(or\s\+replace\s\+\)\{,1}\)\{,1}' .
++            \ '\<\(' .
++            \ substitute(g:ftplugin_sql_objects, ',\d\@!', '\\\\|', 'g') .
++            \ '\)\>'
+ 
+ " Mappings to move to the next CREATE ... block
+-exec "nmap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
+-exec "nmap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
++exec "nnoremap <buffer> <silent> ]} :call search('".s:ftplugin_sql_objects."', 'W')<CR>"
++exec "nnoremap <buffer> <silent> [{ :call search('".s:ftplugin_sql_objects."', 'bW')<CR>"
+ " Could not figure out how to use a :call search() string in visual mode
+ " without it ending visual mode
+ " Unfortunately, this will add a entry to the search history
+-exec 'vmap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
+-exec 'vmap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
++exec 'xnoremap <buffer> <silent> ]} /'.s:ftplugin_sql_objects.'<CR>'
++exec 'xnoremap <buffer> <silent> [{ ?'.s:ftplugin_sql_objects.'<CR>'
+ 
+ " Mappings to move to the next COMMENT
+ "
+ " Had to double the \ for the \| separator since this has a special
+ " meaning on maps
+-let b:comment_leader = '\\(--\\\|\\/\\/\\\|\\*\\\|\\/\\*\\\|\\*\\/\\)'
++let b:comment_leader = '\(--\\|\/\/\\|\*\\|\/\*\\|\*\/\)'
+ " Find the start of the next comment
+-let b:comment_start  = '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
+-            \ '\\(\\s*'.b:comment_leader.'\\)'
++let b:comment_start  = '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
++            \ '\(\s*'.b:comment_leader.'\)'
+ " Find the end of the previous comment
+-let b:comment_end = '\\(^\\s*'.b:comment_leader.'.*\\n\\)'.
+-            \ '\\(^\\s*'.b:comment_leader.'\\)\\@!'
++let b:comment_end = '\(^\s*'.b:comment_leader.'.*\n\)'.
++            \ '\(^\s*'.b:comment_leader.'\)\@!'
+ " Skip over the comment
+ let b:comment_jump_over  = "call search('".
+-            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
++            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+             \ "', 'W')"
+ let b:comment_skip_back  = "call search('".
+-            \ '^\\(\\s*'.b:comment_leader.'.*\\n\\)\\@<!'.
++            \ '^\(\s*'.b:comment_leader.'.*\n\)\@<!'.
+             \ "', 'bW')"
+ " Move to the start and end of comments
+ exec 'nnoremap <silent><buffer> ]" :call search('."'".b:comment_start."'".', "W" )<CR>'
+ exec 'nnoremap <silent><buffer> [" :call search('."'".b:comment_end."'".', "W" )<CR>'
+-exec 'vnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
+-exec 'vnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
++exec 'xnoremap <silent><buffer> ]" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_start."'".', "W" )<CR>'
++exec 'xnoremap <silent><buffer> [" :<C-U>exec "normal! gv"<Bar>call search('."'".b:comment_end."'".', "W" )<CR>'
+ 
+ " Comments can be of the form:
+ "   /*
+@@ -429,7 +452,7 @@
+ " or
+ "   --
+ " or
+-"   // 
++"   //
+ setlocal comments=s1:/*,mb:*,ex:*/,:--,://
+ 
+ " Set completion with CTRL-X CTRL-O to autoloaded function.
+@@ -439,42 +462,50 @@
+     " OMNI function prior to setting up the SQL OMNI function
+     let b:sql_compl_savefunc = &omnifunc
+ 
++    " Source it to determine it's version
++    runtime autoload/sqlcomplete.vim
+     " This is used by the sqlcomplete.vim plugin
+     " Source it for it's global functions
+-    runtime autoload/syntaxcomplete.vim 
++    runtime autoload/syntaxcomplete.vim
+ 
+     setlocal omnifunc=sqlcomplete#Complete
+     " Prevent the intellisense plugin from loading
+     let b:sql_vis = 1
+     if !exists('g:omni_sql_no_default_maps')
++        let regex_extra = ''
++        if exists('g:loaded_syntax_completion') && exists('g:loaded_sql_completion')
++            if g:loaded_syntax_completion > 120 && g:loaded_sql_completion > 140
++                let regex_extra = '\\w*'
++            endif
++        endif
+         " Static maps which use populate the completion list
+         " using Vim's syntax highlighting rules
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'a <C-\><C-O>:call sqlcomplete#Map("syntax")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'k <C-\><C-O>:call sqlcomplete#Map("sqlKeyword'.regex_extra.'")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'f <C-\><C-O>:call sqlcomplete#Map("sqlFunction'.regex_extra.'")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'o <C-\><C-O>:call sqlcomplete#Map("sqlOption'.regex_extra.'")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'T <C-\><C-O>:call sqlcomplete#Map("sqlType'.regex_extra.'")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'s <C-\><C-O>:call sqlcomplete#Map("sqlStatement'.regex_extra.'")<CR><C-X><C-O>'
+         " Dynamic maps which use populate the completion list
+         " using the dbext.vim plugin
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'t <C-\><C-O>:call sqlcomplete#Map("table")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'p <C-\><C-O>:call sqlcomplete#Map("procedure")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'v <C-\><C-O>:call sqlcomplete#Map("view")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'c <C-\><C-O>:call sqlcomplete#Map("column")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'l <C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+         " The next 3 maps are only to be used while the completion window is
+         " active due to the <CR> at the beginning of the map
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'L <C-Y><C-\><C-O>:call sqlcomplete#Map("column_csv")<CR><C-X><C-O>'
+         " <C-Right> is not recognized on most Unix systems, so only create
+         " these additional maps on the Windows platform.
+         " If you would like to use these maps, choose a different key and make
+         " the same map in your vimrc.
+         " if has('win32')
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_right.' <C-R>=sqlcomplete#DrillIntoTable()<CR>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key_left.'  <C-R>=sqlcomplete#DrillOutOfColumns()<CR>'
+         " endif
+         " Remove any cached items useful for schema changes
+-        exec 'imap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
++        exec 'inoremap <buffer> '.g:ftplugin_sql_omni_key.'R <C-\><C-O>:call sqlcomplete#Map("resetCache")<CR><C-X><C-O>'
+     endif
+ 
+     if b:sql_compl_savefunc != ""
+@@ -488,6 +519,6 @@
+ endif
+ 
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+ 
+ " vim:sw=4:
+-
+diff -Naur vim73.orig/runtime/ftplugin/svg.vim vim73/runtime/ftplugin/svg.vim
+--- vim73.orig/runtime/ftplugin/svg.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/svg.vim	2013-06-07 17:07:13.092304625 +0000
+@@ -37,3 +37,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/tcl.vim vim73/runtime/ftplugin/tcl.vim
+--- vim73.orig/runtime/ftplugin/tcl.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/tcl.vim	2013-06-07 17:07:13.128971187 +0000
+@@ -32,5 +32,6 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:cpo_save
++unlet s:cpo_save
+ 
+ " vim: set et ts=4 sw=4 tw=78:
+diff -Naur vim73.orig/runtime/ftplugin/tcsh.vim vim73/runtime/ftplugin/tcsh.vim
+--- vim73.orig/runtime/ftplugin/tcsh.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/tcsh.vim	2013-06-07 17:07:13.145637806 +0000
+@@ -37,3 +37,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/tex.vim vim73/runtime/ftplugin/tex.vim
+--- vim73.orig/runtime/ftplugin/tex.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/tex.vim	2013-06-07 17:07:13.158971102 +0000
+@@ -41,5 +41,6 @@
+ endif " exists("loaded_matchit")
+ 
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+ 
+ " vim:sts=2:sw=2:
+diff -Naur vim73.orig/runtime/ftplugin/treetop.vim vim73/runtime/ftplugin/treetop.vim
+--- vim73.orig/runtime/ftplugin/treetop.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/treetop.vim	2013-06-07 17:07:13.158971102 +0000
+@@ -0,0 +1,19 @@
++" Vim filetype plugin file
++" Language:         Treetop
++" Maintainer:       Nikolai Weibull <now@bitwi.se>
++" Latest Revision:  2011-03-14
++
++if exists("b:did_ftplugin")
++  finish
++endif
++let b:did_ftplugin = 1
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++setlocal comments=b:# commentstring=#\ %s formatoptions-=tcroq formatoptions+=l
++
++let b:undo_ftplugin = "setl com< cms< fo<"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/vhdl.vim vim73/runtime/ftplugin/vhdl.vim
+--- vim73.orig/runtime/ftplugin/vhdl.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/vhdl.vim	2013-06-07 17:07:13.228970902 +0000
+@@ -1,8 +1,8 @@
+ " VHDL filetype plugin
+ " Language:    VHDL
+-" Maintainer:  R.Shankar <shankar.r?freescale.com>
++" Maintainer:  R.Shankar <shankar.pec?gmail.com>
+ " Modified By: Gerald Lai <laigera+vim?gmail.com>
+-" Last Change: 2006 Feb 16
++" Last Change: 2011 Dec 11
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -12,6 +12,9 @@
+ " Don't load another plugin for this buffer
+ let b:did_ftplugin = 1
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Set 'formatoptions' to break comment lines but not other lines,
+ " and insert the comment leader when hitting <CR> or using "o".
+ "setlocal fo-=t fo+=croqlm1
+@@ -22,8 +25,6 @@
+ " Format comments to be up to 78 characters long
+ "setlocal tw=75
+ 
+-set cpo-=C
+-
+ " Win32 can filter files in the browse dialog
+ "if has("gui_win32") && !exists("b:browsefilter")
+ "  let b:browsefilter = "Verilog Source Files (*.v)\t*.v\n" .
+@@ -82,3 +83,6 @@
+ vnoremap <buffer><silent>]] :<C-u>cal <SID>CountWrapper(']]')<CR>
+ vnoremap <buffer><silent>[] :<C-u>cal <SID>CountWrapper('[]')<CR>
+ vnoremap <buffer><silent>][ :<C-u>cal <SID>CountWrapper('][')<CR>
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/vim.vim vim73/runtime/ftplugin/vim.vim
+--- vim73.orig/runtime/ftplugin/vim.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/vim.vim	2013-06-07 17:07:13.245637521 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin
+ " Language:	Vim
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2009 Jan 22
++" Last Change:	2012 Mar 21
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+@@ -21,6 +21,10 @@
+ " and insert the comment leader when hitting <CR> or using "o".
+ setlocal fo-=t fo+=croql
+ 
++" To make syntax highlighting of 'vimVar's work correctly we need the colon to
++" be part of keywords. This needs to be done prior to the 'isk+=#' below.
++setlocal isk+=:
++
+ " To allow tag lookup via CTRL-] for autoload functions, '#' must be a
+ " keyword character.  E.g., for netrw#Nread().
+ setlocal isk+=#
+diff -Naur vim73.orig/runtime/ftplugin/xhtml.vim vim73/runtime/ftplugin/xhtml.vim
+--- vim73.orig/runtime/ftplugin/xhtml.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/xhtml.vim	2013-06-07 17:07:13.268970787 +0000
+@@ -64,3 +64,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/xml.vim vim73/runtime/ftplugin/xml.vim
+--- vim73.orig/runtime/ftplugin/xml.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/xml.vim	2013-06-07 17:07:13.285637407 +0000
+@@ -61,3 +61,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/xs.vim vim73/runtime/ftplugin/xs.vim
+--- vim73.orig/runtime/ftplugin/xs.vim	2010-07-22 03:46:09.000000000 +0000
++++ vim73/runtime/ftplugin/xs.vim	2013-06-07 17:07:13.302304026 +0000
+@@ -1,8 +1,9 @@
+ " Vim filetype plugin file
+-" Language:     XS (Perl extension interface language)
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" URL:          http://github.com/petdance/vim-perl
+-" Last Change:  2009-08-14
++" Language:      XS (Perl extension interface language)
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2009-08-14
+ 
+ " Only do this when not done yet for this buffer
+ if exists("b:did_ftplugin")
+diff -Naur vim73.orig/runtime/ftplugin/xsd.vim vim73/runtime/ftplugin/xsd.vim
+--- vim73.orig/runtime/ftplugin/xsd.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/xsd.vim	2013-06-07 17:07:13.308970673 +0000
+@@ -36,3 +36,4 @@
+ 
+ " Restore the saved compatibility options.
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+diff -Naur vim73.orig/runtime/ftplugin/zimbu.vim vim73/runtime/ftplugin/zimbu.vim
+--- vim73.orig/runtime/ftplugin/zimbu.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/ftplugin/zimbu.vim	2013-06-07 17:07:13.348970559 +0000
+@@ -0,0 +1,151 @@
++" Vim filetype plugin file
++" Language:	Zimbu
++" Maintainer:	Bram Moolenaar <Bram@vim.org>
++" Last Change:	2012 Sep 08
++
++" Only do this when not done yet for this buffer
++if exists("b:did_ftplugin")
++  finish
++endif
++
++" Don't load another plugin for this buffer
++let b:did_ftplugin = 1
++
++" Using line continuation here.
++let s:cpo_save = &cpo
++set cpo-=C
++
++let b:undo_ftplugin = "setl fo< com< ofu< efm< tw< et< sts< sw< | if has('vms') | setl isk< | endif"
++
++" Set 'formatoptions' to break comment lines but not other lines,
++" and insert the comment leader when hitting <CR> or using "o".
++setlocal fo-=t fo+=croql
++
++" Set completion with CTRL-X CTRL-O to autoloaded function.
++if exists('&ofu')
++  setlocal ofu=ccomplete#Complete
++endif
++
++" Set 'comments' to format dashed lists in comments.
++" And to keep Zudocu comment characters.
++setlocal comments=sO:#\ -,mO:#\ \ ,:#=,:#-,:#%,:#
++
++setlocal errorformat^=%f\ line\ %l\ col\ %c:\ %m,ERROR:\ %m
++
++" When the matchit plugin is loaded, this makes the % command skip parens and
++" braces in comments.
++let b:match_words = '\(^\s*\)\@<=\(MODULE\|CLASS\|INTERFACE\|BITS\|ENUM\|SHARED\|FUNC\|REPLACE\|DEFINE\|PROC\|EQUAL\|MAIN\|IF\|GENERATE_IF\|WHILE\|REPEAT\|WITH\|DO\|FOR\|SWITCH\|TRY\)\>\|{\s*$:\(^\s*\)\@<=\(ELSE\|ELSEIF\|GENERATE_ELSE\|GENERATE_ELSEIF\|CATCH\|FINALLY\)\>:\(^\s*\)\@<=\(}\|\<UNTIL\>\)'
++
++let b:match_skip = 's:comment\|string\|zimbuchar'
++
++setlocal tw=78
++setlocal et sts=2 sw=2
++
++" Does replace when a dot, space or closing brace is typed.
++func! GCUpperDot(what)
++  if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != '.' && v:char != ')' && v:char != '}' && v:char != ','
++    " no space or dot after the typed text
++    let g:got_char = v:char
++    return a:what
++  endif
++  return GCUpperCommon(a:what)
++endfunc
++
++" Does not replace when a dot is typed.
++func! GCUpper(what)
++  if v:char != ' ' && v:char != "\r" && v:char != "\x1b" && v:char != ')' && v:char != ','
++    " no space or other "terminating" character after the typed text
++    let g:got_char = v:char
++    return a:what
++  endif
++  return GCUpperCommon(a:what)
++endfunc
++
++" Only replaces when a space is typed.
++func! GCUpperSpace(what)
++  if v:char != ' '
++    " no space after the typed text
++    let g:got_char = v:char
++    return a:what
++  endif
++  return GCUpperCommon(a:what)
++endfunc
++
++func! GCUpperCommon(what)
++  let col = col(".") - strlen(a:what)
++  if col > 1 && getline('.')[col - 2] != ' '
++    " no space before the typed text
++    let g:got_char = 999
++    return a:what
++  endif
++  let synName = synIDattr(synID(line("."), col(".") - 2, 1), "name")
++  if synName =~ 'Comment\|String\|zimbuCregion\|\<c'
++    " inside a comment or C code
++    let g:got_char = 777
++    return a:what
++  endif
++    let g:got_char = 1111
++  return toupper(a:what)
++endfunc
++
++iabbr <buffer> <expr> alias GCUpperSpace("alias")
++iabbr <buffer> <expr> arg GCUpperDot("arg")
++iabbr <buffer> <expr> break GCUpper("break")
++iabbr <buffer> <expr> case GCUpperSpace("case")
++iabbr <buffer> <expr> catch GCUpperSpace("catch")
++iabbr <buffer> <expr> check GCUpperDot("check")
++iabbr <buffer> <expr> class GCUpperSpace("class")
++iabbr <buffer> <expr> interface GCUpperSpace("interface")
++iabbr <buffer> <expr> implements GCUpperSpace("implements")
++iabbr <buffer> <expr> shared GCUpperSpace("shared")
++iabbr <buffer> <expr> continue GCUpper("continue")
++iabbr <buffer> <expr> default GCUpper("default")
++iabbr <buffer> <expr> extends GCUpper("extends")
++iabbr <buffer> <expr> do GCUpper("do")
++iabbr <buffer> <expr> else GCUpper("else")
++iabbr <buffer> <expr> elseif GCUpperSpace("elseif")
++iabbr <buffer> <expr> enum GCUpperSpace("enum")
++iabbr <buffer> <expr> exit GCUpper("exit")
++iabbr <buffer> <expr> false GCUpper("false")
++iabbr <buffer> <expr> fail GCUpper("fail")
++iabbr <buffer> <expr> finally GCUpper("finally")
++iabbr <buffer> <expr> for GCUpperSpace("for")
++iabbr <buffer> <expr> func GCUpperSpace("func")
++iabbr <buffer> <expr> if GCUpperSpace("if")
++iabbr <buffer> <expr> import GCUpperSpace("import")
++iabbr <buffer> <expr> in GCUpperSpace("in")
++iabbr <buffer> <expr> io GCUpperDot("io")
++iabbr <buffer> <expr> main GCUpper("main")
++iabbr <buffer> <expr> module GCUpperSpace("module")
++iabbr <buffer> <expr> new GCUpper("new")
++iabbr <buffer> <expr> nil GCUpper("nil")
++iabbr <buffer> <expr> ok GCUpper("ok")
++iabbr <buffer> <expr> proc GCUpperSpace("proc")
++iabbr <buffer> <expr> proceed GCUpper("proceed")
++iabbr <buffer> <expr> return GCUpper("return")
++iabbr <buffer> <expr> step GCUpperSpace("step")
++iabbr <buffer> <expr> switch GCUpperSpace("switch")
++iabbr <buffer> <expr> sys GCUpperDot("sys")
++iabbr <buffer> <expr> this GCUpperDot("this")
++iabbr <buffer> <expr> throw GCUpperSpace("throw")
++iabbr <buffer> <expr> try GCUpper("try")
++iabbr <buffer> <expr> to GCUpperSpace("to")
++iabbr <buffer> <expr> true GCUpper("true")
++iabbr <buffer> <expr> until GCUpperSpace("until")
++iabbr <buffer> <expr> while GCUpperSpace("while")
++iabbr <buffer> <expr> repeat GCUpper("repeat")
++
++nnoremap <silent> <buffer> [[ m`:call ZimbuGoStartBlock()<CR>
++nnoremap <silent> <buffer> ]] m`:call ZimbuGoEndBlock()<CR>
++
++" Using a function makes sure the search pattern is restored
++func! ZimbuGoStartBlock()
++  ?^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
++endfunc
++func! ZimbuGoEndBlock()
++  /^\s*\(FUNC\|PROC\|MAIN\|ENUM\|CLASS\|INTERFACE\)\>
++endfunc
++
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugin/zsh.vim vim73/runtime/ftplugin/zsh.vim
+--- vim73.orig/runtime/ftplugin/zsh.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/ftplugin/zsh.vim	2013-06-07 17:07:13.355637207 +0000
+@@ -1,7 +1,7 @@
+ " Vim filetype plugin file
+ " Language:         Zsh shell script
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2008-07-09
++" Latest Revision:  2011-01-23
+ 
+ if exists("b:did_ftplugin")
+   finish
+@@ -15,5 +15,12 @@
+ 
+ setlocal comments=:# commentstring=#\ %s formatoptions-=t formatoptions+=croql
+ 
++let b:match_words =
++      \   &matchpairs
++      \ . ',\<if\>:\<elif\>:\<else\>:\<fi\>'
++      \ . ',\<case\>:^\s*([^)]*):\<esac\>'
++      \ . ',\<\%(select\|while\|until\|repeat\|for\%(each\)\=\)\>:\<done\>'
++let b:match_skip = 's:comment\|string\|heredoc\|subst'
++
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
+diff -Naur vim73.orig/runtime/ftplugof.vim vim73/runtime/ftplugof.vim
+--- vim73.orig/runtime/ftplugof.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/ftplugof.vim	2013-06-07 17:07:13.368970502 +0000
+@@ -1,11 +1,13 @@
+ " Vim support file to switch off loading plugins for file types
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2002 Apr 04
++" Last Change:	2011 Oct 20
+ 
+ if exists("did_load_ftplugin")
+   unlet did_load_ftplugin
+ endif
+ 
+-" Remove all autocommands in the filetypeplugin group
+-silent! au! filetypeplugin *
++" Remove all autocommands in the filetypeplugin group, if any exist.
++if exists("#filetypeplugin")
++  silent! au! filetypeplugin *
++endif
+diff -Naur vim73.orig/runtime/indent/ada.vim vim73/runtime/indent/ada.vim
+--- vim73.orig/runtime/indent/ada.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/ada.vim	2013-06-07 17:07:13.542303340 +0000
+@@ -39,6 +39,8 @@
+ if exists("*GetAdaIndent")
+    finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if exists("g:ada_with_gnat_project_files")
+    let s:AdaBlockStart = '^\s*\(if\>\|while\>\|else\>\|elsif\>\|loop\>\|for\>.*\<\(loop\|use\)\>\|declare\>\|begin\>\|type\>.*\<is\>[^;]*$\|\(type\>.*\)\=\<record\>\|procedure\>\|function\>\|accept\>\|do\>\|task\>\|package\>\|project\>\|then\>\|when\>\|is\>\)'
+@@ -292,6 +294,9 @@
+    return ind
+ endfunction GetAdaIndent
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ finish " 1}}}
+ 
+ "------------------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/indent/awk.vim vim73/runtime/indent/awk.vim
+--- vim73.orig/runtime/indent/awk.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/awk.vim	2013-06-07 17:07:13.575636579 +0000
+@@ -23,6 +23,7 @@
+ " 26-04-2002 Got initial version working reasonably well
+ " 29-04-2002 Fixed problems in function headers and max line width
+ "	     Added support for two-line if's without curly braces
++" Fixed hang: 2011 Aug 31
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -118,7 +119,7 @@
+ 
+    " Case 1
+    if prev_data =~ ')' && brace_balance < 0
+-      while brace_balance != 0
++      while brace_balance != 0 && prev_lineno > 0
+ 	 let prev_lineno = s:Get_prev_line( prev_lineno )
+ 	 let prev_data = getline( prev_lineno )
+ 	 let brace_balance=brace_balance+s:Get_brace_balance(prev_data,'(',')' )
+@@ -188,6 +189,9 @@
+ 
+ function! s:Seems_continuing( line )
+   " Unfinished lines
++  if a:line =~ '\(--\|++\)\s*$'
++    return 0
++  endif
+   if a:line =~ '[\\,\|\&\+\-\*\%\^]\s*$'
+     return 1
+   endif
+diff -Naur vim73.orig/runtime/indent/clojure.vim vim73/runtime/indent/clojure.vim
+--- vim73.orig/runtime/indent/clojure.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/clojure.vim	2013-06-07 17:07:13.685636265 +0000
+@@ -0,0 +1,398 @@
++" Vim indent file
++" Language:     Clojure
++" Author:       Meikel Brandmeyer <mb@kotka.de>
++" URL:          http://kotka.de/projects/clojure/vimclojure.html
++"
++" Maintainer:   Sung Pae <self@sungpae.com>
++" URL:          https://github.com/guns/vim-clojure-static
++" License:      Same as Vim
++" Last Change:  30 January 2013
++
++" Only load this indent file when no other was loaded.
++if exists("b:did_indent")
++    finish
++endif
++let b:did_indent = 1
++
++let s:save_cpo = &cpo
++set cpo&vim
++
++let b:undo_indent = 'setlocal autoindent< smartindent< lispwords< expandtab< softtabstop< shiftwidth< indentexpr< indentkeys<'
++
++setlocal noautoindent nosmartindent
++setlocal softtabstop=2 shiftwidth=2 expandtab
++setlocal indentkeys=!,o,O
++
++if exists("*searchpairpos")
++
++    if !exists('g:clojure_maxlines')
++        let g:clojure_maxlines = 100
++    endif
++
++    if !exists('g:clojure_fuzzy_indent')
++        let g:clojure_fuzzy_indent = 1
++    endif
++
++    if !exists('g:clojure_fuzzy_indent_patterns')
++        let g:clojure_fuzzy_indent_patterns = ['^with', '^def', '^let']
++    endif
++
++    if !exists('g:clojure_fuzzy_indent_blacklist')
++        let g:clojure_fuzzy_indent_blacklist = ['-fn$', '\v^with-%(meta|out-str|loading-context)$']
++    endif
++
++    if !exists('g:clojure_special_indent_words')
++        let g:clojure_special_indent_words = 'deftype,defrecord,reify,proxy,extend-type,extend-protocol,letfn'
++    endif
++
++    if !exists('g:clojure_align_multiline_strings')
++        let g:clojure_align_multiline_strings = 0
++    endif
++
++    function! s:SynIdName()
++        return synIDattr(synID(line("."), col("."), 0), "name")
++    endfunction
++
++    function! s:CurrentChar()
++        return getline('.')[col('.')-1]
++    endfunction
++
++    function! s:CurrentWord()
++        return getline('.')[col('.')-1 : searchpos('\v>', 'n', line('.'))[1]-2]
++    endfunction
++
++    function! s:IsParen()
++        return s:CurrentChar() =~ '\v[\(\)\[\]\{\}]' &&
++             \ s:SynIdName() !~? '\vstring|comment'
++    endfunction
++
++    " Returns 1 if string matches a pattern in 'patterns', which may be a
++    " list of patterns, or a comma-delimited string of implicitly anchored
++    " patterns.
++    function! s:MatchesOne(patterns, string)
++        let list = type(a:patterns) == type([])
++                   \ ? a:patterns
++                   \ : map(split(a:patterns, ','), '"^" . v:val . "$"')
++        for pat in list
++            if a:string =~ pat | return 1 | endif
++        endfor
++    endfunction
++
++    function! s:SavePosition()
++        let [ _b, l, c, _o ] = getpos(".")
++        let b = bufnr("%")
++        return [b, l, c]
++    endfunction
++
++    function! s:RestorePosition(value)
++        let [b, l, c] = a:value
++        if bufnr("%") != b
++            execute b "buffer!"
++        endif
++        call setpos(".", [0, l, c, 0])
++    endfunction
++
++    function! s:MatchPairs(open, close, stopat)
++        " Stop only on vector and map [ resp. {. Ignore the ones in strings and
++        " comments.
++        if a:stopat == 0
++            let stopat = max([line(".") - g:clojure_maxlines, 0])
++        else
++            let stopat = a:stopat
++        endif
++
++        let pos = searchpairpos(a:open, '', a:close, 'bWn', "!s:IsParen()", stopat)
++        return [pos[0], virtcol(pos)]
++    endfunction
++
++    function! s:ClojureCheckForStringWorker()
++        " Check whether there is the last character of the previous line is
++        " highlighted as a string. If so, we check whether it's a ". In this
++        " case we have to check also the previous character. The " might be the
++        " closing one. In case the we are still in the string, we search for the
++        " opening ". If this is not found we take the indent of the line.
++        let nb = prevnonblank(v:lnum - 1)
++
++        if nb == 0
++            return -1
++        endif
++
++        call cursor(nb, 0)
++        call cursor(0, col("$") - 1)
++        if s:SynIdName() !~? "string"
++            return -1
++        endif
++
++        " This will not work for a " in the first column...
++        if s:CurrentChar() == '"'
++            call cursor(0, col("$") - 2)
++            if s:SynIdName() !~? "string"
++                return -1
++            endif
++            if s:CurrentChar() != '\\'
++                return -1
++            endif
++            call cursor(0, col("$") - 1)
++        endif
++
++        let p = searchpos('\(^\|[^\\]\)\zs"', 'bW')
++
++        if p != [0, 0]
++            return p[1] - 1
++        endif
++
++        return indent(".")
++    endfunction
++
++    function! s:CheckForString()
++        let pos = s:SavePosition()
++        try
++            let val = s:ClojureCheckForStringWorker()
++        finally
++            call s:RestorePosition(pos)
++        endtry
++        return val
++    endfunction
++
++    function! s:ClojureIsMethodSpecialCaseWorker(position)
++        " Find the next enclosing form.
++        call search('\S', 'Wb')
++
++        " Special case: we are at a '(('.
++        if s:CurrentChar() == '('
++            return 0
++        endif
++        call cursor(a:position)
++
++        let nextParen = s:MatchPairs('(', ')', 0)
++
++        " Special case: we are now at toplevel.
++        if nextParen == [0, 0]
++            return 0
++        endif
++        call cursor(nextParen)
++
++        call search('\S', 'W')
++        if g:clojure_special_indent_words =~ '\<' . s:CurrentWord() . '\>'
++            return 1
++        endif
++
++        return 0
++    endfunction
++
++    function! s:IsMethodSpecialCase(position)
++        let pos = s:SavePosition()
++        try
++            let val = s:ClojureIsMethodSpecialCaseWorker(a:position)
++        finally
++            call s:RestorePosition(pos)
++        endtry
++        return val
++    endfunction
++
++    function! GetClojureIndent()
++        " Get rid of special case.
++        if line(".") == 1
++            return 0
++        endif
++
++        " We have to apply some heuristics here to figure out, whether to use
++        " normal lisp indenting or not.
++        let i = s:CheckForString()
++        if i > -1
++            return i + !!g:clojure_align_multiline_strings
++        endif
++
++        call cursor(0, 1)
++
++        " Find the next enclosing [ or {. We can limit the second search
++        " to the line, where the [ was found. If no [ was there this is
++        " zero and we search for an enclosing {.
++        let paren = s:MatchPairs('(', ')', 0)
++        let bracket = s:MatchPairs('\[', '\]', paren[0])
++        let curly = s:MatchPairs('{', '}', bracket[0])
++
++        " In case the curly brace is on a line later then the [ or - in
++        " case they are on the same line - in a higher column, we take the
++        " curly indent.
++        if curly[0] > bracket[0] || curly[1] > bracket[1]
++            if curly[0] > paren[0] || curly[1] > paren[1]
++                return curly[1]
++            endif
++        endif
++
++        " If the curly was not chosen, we take the bracket indent - if
++        " there was one.
++        if bracket[0] > paren[0] || bracket[1] > paren[1]
++            return bracket[1]
++        endif
++
++        " There are neither { nor [ nor (, ie. we are at the toplevel.
++        if paren == [0, 0]
++            return 0
++        endif
++
++        " Now we have to reimplement lispindent. This is surprisingly easy, as
++        " soon as one has access to syntax items.
++        "
++        " - Check whether we are in a special position after a word in
++        "   g:clojure_special_indent_words. These are special cases.
++        " - Get the next keyword after the (.
++        " - If its first character is also a (, we have another sexp and align
++        "   one column to the right of the unmatched (.
++        " - In case it is in lispwords, we indent the next line to the column of
++        "   the ( + sw.
++        " - If not, we check whether it is last word in the line. In that case
++        "   we again use ( + sw for indent.
++        " - In any other case we use the column of the end of the word + 2.
++        call cursor(paren)
++
++        if s:IsMethodSpecialCase(paren)
++            return paren[1] + &shiftwidth - 1
++        endif
++
++        " In case we are at the last character, we use the paren position.
++        if col("$") - 1 == paren[1]
++            return paren[1]
++        endif
++
++        " In case after the paren is a whitespace, we search for the next word.
++        normal! l
++        if s:CurrentChar() == ' '
++            normal! w
++        endif
++
++        " If we moved to another line, there is no word after the (. We
++        " use the ( position for indent.
++        if line(".") > paren[0]
++            return paren[1]
++        endif
++
++        " We still have to check, whether the keyword starts with a (, [ or {.
++        " In that case we use the ( position for indent.
++        let w = s:CurrentWord()
++        if stridx('([{', w[0]) > -1
++            return paren[1]
++        endif
++
++        " Test words without namespace qualifiers and leading reader macro
++        " metacharacters.
++        "
++        " e.g. clojure.core/defn and #'defn should both indent like defn.
++        let ww = substitute(w, "\\v%(.*/|[#'`~@^,]*)(.*)", '\1', '')
++
++        if &lispwords =~ '\V\<' . ww . '\>'
++            return paren[1] + &shiftwidth - 1
++        endif
++
++        if g:clojure_fuzzy_indent
++            \ && !s:MatchesOne(g:clojure_fuzzy_indent_blacklist, ww)
++            \ && s:MatchesOne(g:clojure_fuzzy_indent_patterns, ww)
++            return paren[1] + &shiftwidth - 1
++        endif
++
++        normal! W
++        if paren[0] < line(".")
++            return paren[1] + &shiftwidth - 1
++        endif
++
++        normal! ge
++        return virtcol(".") + 1
++    endfunction
++
++    setlocal indentexpr=GetClojureIndent()
++
++else
++
++    " In case we have searchpairpos not available we fall back to
++    " normal lisp indenting.
++    setlocal indentexpr=
++    setlocal lisp
++    let b:undo_indent .= '| setlocal lisp<'
++
++endif
++
++" Specially indented symbols from clojure.core and clojure.test.
++"
++" Clojure symbols are indented in the defn style when they:
++"
++"   * Define vars and anonymous functions
++"   * Create new lexical scopes or scopes with altered environments
++"   * Create conditional branches from a predicate function or value
++"
++" The arglists for these functions are generally in the form of [x & body];
++" Functions that accept a flat list of forms do not treat the first argument
++" specially and hence are not indented specially.
++
++" Definitions
++setlocal lispwords=
++setlocal lispwords+=bound-fn
++setlocal lispwords+=def
++setlocal lispwords+=definline
++setlocal lispwords+=definterface
++setlocal lispwords+=defmacro
++setlocal lispwords+=defmethod
++setlocal lispwords+=defmulti
++setlocal lispwords+=defn
++setlocal lispwords+=defn-
++setlocal lispwords+=defonce
++setlocal lispwords+=defprotocol
++setlocal lispwords+=defrecord
++setlocal lispwords+=defstruct
++setlocal lispwords+=deftest " clojure.test
++setlocal lispwords+=deftest- " clojure.test
++setlocal lispwords+=deftype
++setlocal lispwords+=extend
++setlocal lispwords+=extend-protocol
++setlocal lispwords+=extend-type
++setlocal lispwords+=fn
++setlocal lispwords+=ns
++setlocal lispwords+=proxy
++setlocal lispwords+=reify
++setlocal lispwords+=set-test " clojure.test
++
++" Binding forms
++setlocal lispwords+=as->
++setlocal lispwords+=binding
++setlocal lispwords+=doall
++setlocal lispwords+=dorun
++setlocal lispwords+=doseq
++setlocal lispwords+=dotimes
++setlocal lispwords+=doto
++setlocal lispwords+=for
++setlocal lispwords+=if-let
++setlocal lispwords+=let
++setlocal lispwords+=letfn
++setlocal lispwords+=locking
++setlocal lispwords+=loop
++setlocal lispwords+=testing " clojure.test
++setlocal lispwords+=when-first
++setlocal lispwords+=when-let
++setlocal lispwords+=with-bindings
++setlocal lispwords+=with-in-str
++setlocal lispwords+=with-local-vars
++setlocal lispwords+=with-open
++setlocal lispwords+=with-precision
++setlocal lispwords+=with-redefs
++setlocal lispwords+=with-redefs-fn
++setlocal lispwords+=with-test " clojure.test
++
++" Conditional branching
++setlocal lispwords+=case
++setlocal lispwords+=cond->
++setlocal lispwords+=cond->>
++setlocal lispwords+=condp
++setlocal lispwords+=if
++setlocal lispwords+=if-not
++setlocal lispwords+=when
++setlocal lispwords+=when-not
++setlocal lispwords+=while
++
++" Exception handling
++setlocal lispwords+=catch
++setlocal lispwords+=try " For aesthetics when enclosing single line
++
++let &cpo = s:save_cpo
++unlet! s:save_cpo
++
++" vim:sts=4 sw=4 et:
+diff -Naur vim73.orig/runtime/indent/cmake.vim vim73/runtime/indent/cmake.vim
+--- vim73.orig/runtime/indent/cmake.vim	2010-06-03 19:56:12.000000000 +0000
++++ vim73/runtime/indent/cmake.vim	2013-06-07 17:07:13.695636236 +0000
+@@ -23,6 +23,8 @@
+ if exists("*CMakeGetIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ fun! CMakeGetIndent(lnum)
+   let this_line = getline(a:lnum)
+@@ -83,3 +85,6 @@
+ 
+   return ind
+ endfun
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/indent/css.vim vim73/runtime/indent/css.vim
+--- vim73.orig/runtime/indent/css.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/css.vim	2013-06-07 17:07:13.742302769 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	    CSS
+ " Maintainer:	    Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2006-12-20
++" Latest Revision:  2012-05-30
+ 
+ if exists("b:did_indent")
+   finish
+@@ -12,9 +12,13 @@
+ setlocal indentkeys=0{,0},!^F,o,O
+ setlocal nosmartindent
+ 
++let b:undo_indent = "setl smartindent< indentkeys< indentexpr<"
++
+ if exists("*GetCSSIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ function s:prevnonblanknoncomment(lnum)
+   let lnum = a:lnum
+@@ -64,8 +68,6 @@
+   let line = getline(v:lnum)
+   if line =~ '^\s*\*'
+     return cindent(v:lnum)
+-  elseif line =~ '^\s*}'
+-    return indent(v:lnum) - &sw
+   endif
+ 
+   let pnum = s:prevnonblanknoncomment(v:lnum - 1)
+@@ -73,12 +75,9 @@
+     return 0
+   endif
+ 
+-  let ind = indent(pnum) + s:count_braces(pnum, 1) * &sw
+-
+-  let pline = getline(pnum)
+-  if pline =~ '}\s*$'
+-    let ind -= (s:count_braces(pnum, 0) - (pline =~ '^\s*}' ? 1 : 0)) * &sw
+-  endif
+-
+-  return ind
++  return indent(pnum) + s:count_braces(pnum, 1) * &sw
++        \ - s:count_braces(v:lnum, 0) * &sw
+ endfunction
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/indent/cucumber.vim vim73/runtime/indent/cucumber.vim
+--- vim73.orig/runtime/indent/cucumber.vim	2010-05-21 09:55:01.000000000 +0000
++++ vim73/runtime/indent/cucumber.vim	2013-06-07 17:07:13.742302769 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	Cucumber
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists("b:did_indent")
+   finish
+@@ -12,6 +12,8 @@
+ setlocal indentexpr=GetCucumberIndent()
+ setlocal indentkeys=o,O,*<Return>,<:>,0<Bar>,0#,=,!^F
+ 
++let b:undo_indent = 'setl ai< inde< indk<'
++
+ " Only define the function once.
+ if exists("*GetCucumberIndent")
+   finish
+@@ -24,35 +26,47 @@
+ function! GetCucumberIndent()
+   let line  = getline(prevnonblank(v:lnum-1))
+   let cline = getline(v:lnum)
++  let nline = getline(nextnonblank(v:lnum+1))
+   let syn = s:syn(prevnonblank(v:lnum-1))
+   let csyn = s:syn(v:lnum)
++  let nsyn = s:syn(nextnonblank(v:lnum+1))
+   if csyn ==# 'cucumberFeature' || cline =~# '^\s*Feature:'
++    " feature heading
+     return 0
+   elseif csyn ==# 'cucumberExamples' || cline =~# '^\s*\%(Examples\|Scenarios\):'
++    " examples heading
+     return 2 * &sw
+   elseif csyn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || cline =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
++    " background, scenario or outline heading
+     return &sw
+   elseif syn ==# 'cucumberFeature' || line =~# '^\s*Feature:'
++    " line after feature heading
+     return &sw
+   elseif syn ==# 'cucumberExamples' || line =~# '^\s*\%(Examples\|Scenarios\):'
++    " line after examples heading
+     return 3 * &sw
+   elseif syn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || line =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):'
++    " line after background, scenario or outline heading
+     return 2 * &sw
+-  elseif cline =~# '^\s*@' && (s:syn(nextnonblank(v:lnum+1)) == 'cucumberFeature' || getline(nextnonblank(v:lnum+1)) =~# '^\s*Feature:' || indent(prevnonblank(v:lnum-1)) <= 0)
++  elseif cline =~# '^\s*[@#]' && (nsyn == 'cucumberFeature' || nline =~# '^\s*Feature:' || indent(prevnonblank(v:lnum-1)) <= 0)
++    " tag or comment before a feature heading
+     return 0
+-  elseif line =~# '^\s*@'
++  elseif cline =~# '^\s*@'
++    " other tags
+     return &sw
+-  elseif cline =~# '^\s*|' && line =~# '^\s*|'
++  elseif cline =~# '^\s*[#|]' && line =~# '^\s*|'
++    " mid-table
++    " preserve indent
+     return indent(prevnonblank(v:lnum-1))
+-  elseif cline =~# '^\s*|' && line =~# '^\s*[^|#]'
++  elseif cline =~# '^\s*|' && line =~# '^\s*[^|]'
++    " first line of a table, relative indent
+     return indent(prevnonblank(v:lnum-1)) + &sw
+-  elseif cline =~# '^\s*[^|# \t]' && line =~# '^\s*|'
++  elseif cline =~# '^\s*[^|]' && line =~# '^\s*|'
++    " line after a table, relative unindent
+     return indent(prevnonblank(v:lnum-1)) - &sw
+-  elseif cline =~# '^\s*$' && line =~# '^\s*|'
+-    let in = indent(prevnonblank(v:lnum-1))
+-    return in == indent(v:lnum) ? in : in - &sw
+-  elseif cline =~# '^\s*#' && getline(v:lnum-1) =~ '^\s*$' && getline(v:lnum+1) =~# '\S'
+-    return indent(getline(v:lnum+1))
++  elseif cline =~# '^\s*#' && getline(v:lnum-1) =~ '^\s*$' && (nsyn =~# '^cucumber\%(Background\|Scenario\|ScenarioOutline\)$' || nline =~# '^\s*\%(Background\|Scenario\|Scenario Outline\):')
++    " comments on scenarios
++    return &sw
+   endif
+   return indent(prevnonblank(v:lnum-1))
+ endfunction
+diff -Naur vim73.orig/runtime/indent/dtd.vim vim73/runtime/indent/dtd.vim
+--- vim73.orig/runtime/indent/dtd.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/dtd.vim	2013-06-07 17:07:13.792302627 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	    DTD (Document Type Definition for XML)
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2008-07-18
++" Latest Revision:  2011-07-08
+ 
+ let s:cpo_save = &cpo
+ set cpo&vim
+@@ -52,7 +52,7 @@
+   let end = a:end
+   let parentheses = [end - 1]
+   while token != ""
+-    let [token, end] = s:lex(a:line, end, '^\%([(),|]\|[A-Za-z0-9_-]\+\)[?*+]\=')
++    let [token, end] = s:lex(a:line, end, '^\%([(),|]\|[A-Za-z0-9_-]\+\|#P\=CDATA\|%[A-Za-z0-9_-]\+;\)[?*+]\=')
+     if token[0] == '('
+       call add(parentheses, end - 1)
+     elseif token[0] == ')'
+@@ -80,7 +80,7 @@
+   let lnum = line('.')
+   let col = col('.')
+   let indent = indent('.')
+-  let line = join(getline(lnum, v:lnum - 1), "\n")
++  let line = lnum == v:lnum ? getline(lnum) : join(getline(lnum, v:lnum - 1), "\n")
+ 
+   let [declaration, end] = s:lex1(line, col)
+   if declaration == ""
+@@ -106,7 +106,7 @@
+     " Check for token following element name.  This can be a specification of
+     " whether the start or end tag may be omitted.  If nothing is found, indent
+     " one level.
+-    let [token, end] = s:lex(line, end)
++    let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)')
+     let n = 0
+     while token =~ '[-O]' && n < 2
+       let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)')
+@@ -214,8 +214,7 @@
+ 
+       " Finally look for the attributeâs default value.  If non exists, indent
+       " two levels.
+-      " TODO: Do validation of keywords (#REQUIRED|#IMPLIED)?
+-      let [default, end] = s:lex(line, end, '^\%("\_[^"]*"\|[^[:space:]]\+\)')
++      let [default, end] = s:lex(line, end, '^\%("\_[^"]*"\|#\(REQUIRED\|IMPLIED\|FIXED\)\)')
+       if default == ""
+         return indent + &sw * 2
+       elseif default == '#FIXED'
+@@ -323,3 +322,4 @@
+ endfunction
+ 
+ let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/indent/eiffel.vim vim73/runtime/indent/eiffel.vim
+--- vim73.orig/runtime/indent/eiffel.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/eiffel.vim	2013-06-07 17:07:13.838969160 +0000
+@@ -1,11 +1,11 @@
+ " Vim indent file
+ " Language:	Eiffel
+-" Maintainer:	Jocelyn Fiat <eiffel@djoce.net>
++" Maintainer:	Jocelyn Fiat <jfiat@eiffel.com>
+ " Previous-Maintainer:	David Clarke <gadicath@dishevelled.net>
++" Contributions from: Thilo Six
+ " $Date: 2004/12/09 21:33:52 $
+ " $Revision: 1.3 $
+-" URL: http://www.djoce.net/page/vim/
+-" Last Change:	2004 Sept 14 : removed specific value for tab (sw)
++" URL: https://github.com/eiffelhub/vim-eiffel
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -23,6 +23,8 @@
+ setlocal indentkeys+==creation,=feature,=inherit,=class,=is,=redefine,=rename,=variant
+ setlocal indentkeys+==invariant,=do,=local,=export
+ 
++let b:undo_indent = "setl smartindent< indentkeys< indentexpr< autoindent< comments< "
++
+ " Define some stuff
+ " keywords grouped by indenting
+ let s:trust_user_indent = '\(+\)\(\s*\(--\).*\)\=$'
+@@ -38,6 +40,9 @@
+   finish
+ endif
+ 
++let s:keepcpo= &cpo
++set cpo&vim
++
+ function GetEiffelIndent()
+ 
+   " Eiffel Class indenting
+@@ -103,4 +108,7 @@
+   return ind
+ endfunction
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:sw=2
+diff -Naur vim73.orig/runtime/indent/erlang.vim vim73/runtime/indent/erlang.vim
+--- vim73.orig/runtime/indent/erlang.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/erlang.vim	2013-06-07 17:07:13.842302484 +0000
+@@ -1,206 +1,1390 @@
+ " Vim indent file
+-" Language:     Erlang
+-" Maintainer:   Csaba Hoch <csaba.hoch@gmail.com>
+-" Contributor:  Edwin Fine <efine145_nospam01 at usa dot net>
+-" Last Change:  2008 Mar 12
++" Language:     Erlang (http://www.erlang.org)
++" Author:       Csaba Hoch <csaba.hoch@gmail.com>
++" Contributors: Edwin Fine <efine145_nospam01 at usa dot net>
++"               Pawel 'kTT' Salata <rockplayer.pl@gmail.com>
++"               Ricardo Catalinas JimÃ©nez <jimenezrick@gmail.com>
++" Last Update:  2013-Jun-01
++" License:      Vim license
++" URL:          https://github.com/hcs42/vim-erlang
++
++" Note About Usage:
++"   This indentation script works best with the Erlang syntax file created by
++"   KreÄ
+imir MarÄŸiÄ (Kresimir Marzic) and maintained by Csaba Hoch.
+ 
+-" Only load this indent file when no other was loaded.
+-if exists("b:did_indent")
++" Notes About Implementation:
++"
++" - LTI = Line to indent.
++" - The index of the first line is 1, but the index of the first column is 0.
++
++
++" Initialization {{{1
++" ==============
++
++" Only load this indent file when no other was loaded
++" Vim 7 or later is needed
++if exists("b:did_indent") || version < 700
+   finish
++else
++  let b:did_indent = 1
+ endif
+-let b:did_indent = 1
+ 
+ setlocal indentexpr=ErlangIndent()
+-setlocal indentkeys+==after,=end,=catch,=),=],=}
++setlocal indentkeys+=0=end,0=of,0=catch,0=after,0=when,0=),0=],0=},0=>>
+ 
+-" Only define the functions once.
++" Only define the functions once
+ if exists("*ErlangIndent")
+-   finish
++  finish
+ endif
+ 
+-" The function go through the whole line, analyses it and sets the indentation
+-" (ind variable).
+-" l: the number of the line to be examined.
+-function s:ErlangIndentAtferLine(l)
+-    let i = 0 " the index of the current character in the line
+-    let length = strlen(a:l) " the length of the line
+-    let ind = 0 " how much should be the difference between the indentation of
+-                " the current line and the indentation of the next line?
+-                " e.g. +1: the indentation of the next line should be equal to
+-                " the indentation of the current line plus one shiftwidth
+-    let lastFun = 0 " the last token was a 'fun'
+-    let lastReceive = 0 " the last token was a 'receive'; needed for 'after'
+-    let lastHashMark = 0 " the last token was a 'hashmark'
+-
+-    while 0<= i && i < length
+-
+-        " m: the next value of the i
+-        if a:l[i] == '%'
+-            break
+-        elseif a:l[i] == '"'
+-            let m = matchend(a:l,'"\%([^"\\]\|\\.\)*"',i)
+-            let lastReceive = 0
+-        elseif a:l[i] == "'"
+-            let m = matchend(a:l,"'[^']*'",i)
+-            let lastReceive = 0
+-        elseif a:l[i] =~# "[a-z]"
+-            let m = matchend(a:l,".[[:alnum:]_]*",i)
+-            if lastFun
+-                let ind = ind - 1
+-                let lastFun = 0
+-                let lastReceive = 0
+-            elseif a:l[(i):(m-1)] =~# '^\%(case\|if\|try\)$'
+-                let ind = ind + 1
+-            elseif a:l[(i):(m-1)] =~# '^receive$'
+-                let ind = ind + 1
+-                let lastReceive = 1
+-            elseif a:l[(i):(m-1)] =~# '^begin$'
+-                let ind = ind + 2
+-                let lastReceive = 0
+-            elseif a:l[(i):(m-1)] =~# '^end$'
+-                let ind = ind - 2
+-                let lastReceive = 0
+-            elseif a:l[(i):(m-1)] =~# '^after$'
+-                if lastReceive == 0
+-                    let ind = ind - 1
+-                else
+-                    let ind = ind + 0
+-                end
+-                let lastReceive = 0
+-            elseif a:l[(i):(m-1)] =~# '^fun$'
+-                let ind = ind + 1
+-                let lastFun = 1
+-                let lastReceive = 0
+-            endif
+-        elseif a:l[i] =~# "[A-Z_]"
+-            let m = matchend(a:l,".[[:alnum:]_]*",i)
+-            let lastReceive = 0
+-        elseif a:l[i] == '$'
+-            let m = i+2
+-            let lastReceive = 0
+-        elseif a:l[i] == "." && (i+1>=length || a:l[i+1]!~ "[0-9]")
+-            let m = i+1
+-            if lastHashMark
+-                let lastHashMark = 0
+-            else
+-                let ind = ind - 1
+-            end
+-            let lastReceive = 0
+-        elseif a:l[i] == '-' && (i+1<length && a:l[i+1]=='>')
+-            let m = i+2
+-            let ind = ind + 1
+-            let lastReceive = 0
+-        elseif a:l[i] == ';'
+-            let m = i+1
+-            let ind = ind - 1
+-            let lastReceive = 0
+-        elseif a:l[i] == '#'
+-            let m = i+1
+-            let lastHashMark = 1
+-        elseif a:l[i] =~# '[({[]'
+-            let m = i+1
+-            let ind = ind + 1
+-            let lastFun = 0
+-            let lastReceive = 0
+-            let lastHashMark = 0
+-        elseif a:l[i] =~# '[)}\]]'
+-            let m = i+1
+-            let ind = ind - 1
+-            let lastReceive = 0
+-        else
+-            let m = i+1
+-        endif
+-
+-        let i = m
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+-    endwhile
++" Logging library {{{1
++" ===============
+ 
+-    return ind
++" Purpose:
++"   Logs the given string using the ErlangIndentLog function if it exists.
++" Parameters:
++"   s: string
++function! s:Log(s)
++  if exists("*ErlangIndentLog")
++    call ErlangIndentLog(a:s)
++  endif
++endfunction
++
++" Line tokenizer library {{{1
++" ======================
++
++" Indtokens are "indentation tokens".
++
++" Purpose:
++"   Calculate the new virtual column after the given segment of a line.
++" Parameters:
++"   line: string
++"   first_index: integer -- the index of the first character of the segment
++"   last_index: integer -- the index of the last character of the segment
++"   vcol: integer -- the virtual column of the first character of the token
++"   tabstop: integer -- the value of the 'tabstop' option to be used
++" Returns:
++"   vcol: integer
++" Example:
++"   " index:    0 12 34567
++"   " vcol:     0 45 89
++"   s:CalcVCol("\t'\tx', b", 1, 4, 4)  -> 10
++function! s:CalcVCol(line, first_index, last_index, vcol, tabstop)
++
++  " We copy the relevent segment of the line, otherwise if the line were
++  " e.g. `"\t", term` then the else branch below would consume the `", term`
++  " part at once.
++  let line = a:line[a:first_index : a:last_index]
++
++  let i = 0
++  let last_index = a:last_index - a:first_index
++  let vcol = a:vcol
++
++  while 0 <= i && i <= last_index
++
++    if line[i] == "\t"
++      " Example (when tabstop == 4):
++      "
++      " vcol + tab -> next_vcol
++      " 0 + tab -> 4
++      " 1 + tab -> 4
++      " 2 + tab -> 4
++      " 3 + tab -> 4
++      " 4 + tab -> 8
++      "
++      " next_i - i == the number of tabs
++      let next_i = matchend(line, '\t*', i + 1)
++      let vcol = (vcol / a:tabstop + (next_i - i)) * a:tabstop
++      call s:Log('new vcol after tab: '. vcol)
++    else
++      let next_i = matchend(line, '[^\t]*', i + 1)
++      let vcol += next_i - i
++      call s:Log('new vcol after other: '. vcol)
++    endif
++    let i = next_i
++  endwhile
+ 
++  return vcol
+ endfunction
+ 
+-function s:FindPrevNonBlankNonComment(lnum)
++" Purpose:
++"   Go through the whole line and return the tokens in the line.
++" Parameters:
++"   line: string -- the line to be examined
++"   string_continuation: bool
++"   atom_continuation: bool
++" Returns:
++"   indtokens = [indtoken]
++"   indtoken = [token, vcol, col]
++"   token = string (examples: 'begin', '<variable>', '}')
++"   vcol = integer (the virtual column of the first character of the token)
++"   col = integer
++function! s:GetTokensFromLine(line, string_continuation, atom_continuation,
++                             \tabstop)
++
++  let linelen = strlen(a:line) " The length of the line
++  let i = 0 " The index of the current character in the line
++  let vcol = 0 " The virtual column of the current character
++  let indtokens = []
++
++  if a:string_continuation
++    let i = matchend(a:line, '^\%([^"\\]\|\\.\)*"', 0)
++    if i == -1
++      call s:Log('    Whole line is string continuation -> ignore')
++      return []
++    else
++      let vcol = s:CalcVCol(a:line, 0, i - 1, 0, a:tabstop)
++      call add(indtokens, ['<string_end>', vcol, i])
++    endif
++  elseif a:atom_continuation
++    let i = matchend(a:line, "^\\%([^'\\\\]\\|\\\\.\\)*'", 0)
++    if i == -1
++      call s:Log('    Whole line is quoted atom continuation -> ignore')
++      return []
++    else
++      let vcol = s:CalcVCol(a:line, 0, i - 1, 0, a:tabstop)
++      call add(indtokens, ['<quoted_atom_end>', vcol, i])
++    endif
++  endif
++
++  while 0 <= i && i < linelen
++
++    let next_vcol = ''
++
++    " Spaces
++    if a:line[i] == ' '
++      let next_i = matchend(a:line, ' *', i + 1)
++
++    " Tabs
++    elseif a:line[i] == "\t"
++      let next_i = matchend(a:line, '\t*', i + 1)
++
++      " See example in s:CalcVCol
++      let next_vcol = (vcol / a:tabstop + (next_i - i)) * a:tabstop
++
++    " Comment
++    elseif a:line[i] == '%'
++      let next_i = linelen
++
++    " String token: "..."
++    elseif a:line[i] == '"'
++      let next_i = matchend(a:line, '\%([^"\\]\|\\.\)*"', i + 1)
++      if next_i == -1
++        call add(indtokens, ['<string_start>', vcol, i])
++      else
++        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
++        call add(indtokens, ['<string>', vcol, i])
++      endif
++
++    " Quoted atom token: '...'
++    elseif a:line[i] == "'"
++      let next_i = matchend(a:line, "\\%([^'\\\\]\\|\\\\.\\)*'", i + 1)
++      if next_i == -1
++        call add(indtokens, ['<quoted_atom_start>', vcol, i])
++      else
++        let next_vcol = s:CalcVCol(a:line, i, next_i - 1, vcol, a:tabstop)
++        call add(indtokens, ['<quoted_atom>', vcol, i])
++      endif
++
++    " Keyword or atom or variable token or number
++    elseif a:line[i] =~# '[a-zA-Z_@0-9]'
++      let next_i = matchend(a:line,
++                           \'[[:alnum:]_@:]*\%(\s*#\s*[[:alnum:]_@:]*\)\=',
++                           \i + 1)
++      call add(indtokens, [a:line[(i):(next_i - 1)], vcol, i])
++
++    " Character token: $<char> (as in: $a)
++    elseif a:line[i] == '$'
++      call add(indtokens, ['$.', vcol, i])
++      let next_i = i + 2
++
++    " Dot token: .
++    elseif a:line[i] == '.'
++
++      let next_i = i + 1
++
++      if i + 1 == linelen || a:line[i + 1] =~# '[[:blank:]%]'
++        " End of clause token: . (as in: f() -> ok.)
++        call add(indtokens, ['<end_of_clause>', vcol, i])
++
++      else
++        " Possibilities:
++        " - Dot token in float: . (as in: 3.14)
++        " - Dot token in record: . (as in: #myrec.myfield)
++        call add(indtokens, ['.', vcol, i])
++      endif
++
++    " Equal sign
++    elseif a:line[i] == '='
++      " This is handled separately so that "=<<" will be parsed as
++      " ['=', '<<'] instead of ['=<', '<']. Although Erlang parses it
++      " currently in the latter way, that may be fixed some day.
++      call add(indtokens, [a:line[i], vcol, i])
++      let next_i = i + 1
++
++    " Three-character tokens
++    elseif i + 1 < linelen &&
++         \ index(['=:=', '=/='], a:line[i : i + 1]) != -1
++      call add(indtokens, [a:line[i : i + 1], vcol, i])
++      let next_i = i + 2
++
++    " Two-character tokens
++    elseif i + 1 < linelen &&
++         \ index(['->', '<<', '>>', '||', '==', '/=', '=<', '>=', '++', '--',
++         \        '::'],
++         \       a:line[i : i + 1]) != -1
++      call add(indtokens, [a:line[i : i + 1], vcol, i])
++      let next_i = i + 2
++
++    " Other character: , ; < > ( ) [ ] { } # + - * / : ? = ! |
++    else
++      call add(indtokens, [a:line[i], vcol, i])
++      let next_i = i + 1
++
++    endif
++
++    if next_vcol == ''
++      let vcol += next_i - i
++    else
++      let vcol = next_vcol
++    endif
++
++    let i = next_i
++
++  endwhile
++
++  return indtokens
++
++endfunction
++
++" TODO: doc, handle "not found" case
++function! s:GetIndtokenAtCol(indtokens, col)
++  let i = 0
++  while i < len(a:indtokens)
++    if a:indtokens[i][2] == a:col
++      return [1, i]
++    elseif a:indtokens[i][2] > a:col
++      return [0, s:IndentError('No token at col ' . a:col . ', ' .
++                              \'indtokens = ' . string(a:indtokens),
++                              \'', '')]
++    endif
++    let i += 1
++  endwhile
++  return [0, s:IndentError('No token at col ' . a:col . ', ' .
++                           \'indtokens = ' . string(a:indtokens),
++                           \'', '')]
++endfunction
++
++" Stack library {{{1
++" =============
++
++" Purpose:
++"   Push a token onto the parser's stack.
++" Parameters:
++"   stack: [token]
++"   token: string
++function! s:Push(stack, token)
++  call s:Log('    Stack Push: "' . a:token . '" into ' . string(a:stack))
++  call insert(a:stack, a:token)
++endfunction
++
++" Purpose:
++"   Pop a token from the parser's stack.
++" Parameters:
++"   stack: [token]
++"   token: string
++" Returns:
++"   token: string -- the removed element
++function! s:Pop(stack)
++  let head = remove(a:stack, 0)
++  call s:Log('    Stack Pop: "' . head . '" from ' . string(a:stack))
++  return head
++endfunction
++
++" Library for accessing and storing tokenized lines {{{1
++" =================================================
++
++" The Erlang token cache: an `lnum -> indtokens` dictionary that stores the
++" tokenized lines.
++let s:all_tokens = {}
++let s:file_name = ''
++let s:last_changedtick = -1
++
++" Purpose:
++"   Clear the Erlang token cache if we have a different file or the file has
++"   been changed since the last indentation.
++function! s:ClearTokenCacheIfNeeded()
++  let file_name = expand('%:p')
++  if file_name != s:file_name ||
++   \ b:changedtick != s:last_changedtick
++    let s:file_name = file_name
++    let s:last_changedtick = b:changedtick
++    let s:all_tokens = {}
++  endif
++endfunction
++
++" Purpose:
++"   Return the tokens of line `lnum`, if that line is not empty. If it is
++"   empty, find the first non-empty line in the given `direction` and return
++"   the tokens of that line.
++" Parameters:
++"   lnum: integer
++"   direction: 'up' | 'down'
++" Returns:
++"   result: [] -- the result is an empty list if we hit the beginning or end
++"                  of the file
++"           | [lnum, indtokens]
++"   lnum: integer -- the index of the non-empty line that was found and
++"                    tokenized
++"   indtokens: [indtoken] -- the tokens of line `lnum`
++function! s:TokenizeLine(lnum, direction)
++
++  call s:Log('Tokenizing starts from line ' . a:lnum)
++  if a:direction == 'up'
+     let lnum = prevnonblank(a:lnum)
++  else " a:direction == 'down'
++    let lnum = nextnonblank(a:lnum)
++  endif
++
++  " We hit the beginning or end of the file
++  if lnum == 0
++    let indtokens = []
++    call s:Log('  We hit the beginning or end of the file.')
++
++    " The line has already been parsed
++  elseif has_key(s:all_tokens, lnum)
++    let indtokens = s:all_tokens[lnum]
++    call s:Log('Cached line ' . lnum . ': ' . getline(lnum))
++    call s:Log("  Tokens in the line:\n    - " . join(indtokens, "\n    - "))
++
++    " The line should be parsed now
++  else
++
++    " Parse the line
+     let line = getline(lnum)
+-    " continue to search above if the current line begins with a '%'
+-    while line =~# '^\s*%.*$'
+-        let lnum = prevnonblank(lnum - 1)
+-        if 0 == lnum
+-            return 0
+-        endif
+-        let line = getline(lnum)
+-    endwhile
+-    return lnum
+-endfunction
++    let string_continuation = s:IsLineStringContinuation(lnum)
++    let atom_continuation = s:IsLineAtomContinuation(lnum)
++    let indtokens = s:GetTokensFromLine(line, string_continuation,
++                                       \atom_continuation, &tabstop)
++    let s:all_tokens[lnum] = indtokens
++    call s:Log('Tokenizing line ' . lnum . ': ' . line)
++    call s:Log("  Tokens in the line:\n    - " . join(indtokens, "\n    - "))
+ 
+-function ErlangIndent()
++  endif
+ 
+-    " Find a non-blank line above the current line.
+-    let lnum = prevnonblank(v:lnum - 1)
++  return [lnum, indtokens]
++endfunction
+ 
+-    " Hit the start of the file, use zero indent.
++" Purpose:
++"   As a helper function for PrevIndToken and NextIndToken, the FindIndToken
++"   function finds the first line with at least one token in the given
++"   direction.
++" Parameters:
++"   lnum: integer
++"   direction: 'up' | 'down'
++" Returns:
++"   result: [] -- the result is an empty list if we hit the beginning or end
++"                  of the file
++"           | indtoken
++function! s:FindIndToken(lnum, dir)
++  let lnum = a:lnum
++  while 1
++    let lnum += (a:dir == 'up' ? -1 : 1)
++    let [lnum, indtokens] = s:TokenizeLine(lnum, a:dir)
+     if lnum == 0
+-        return 0
++      " We hit the beginning or end of the file
++      return []
++    elseif !empty(indtokens)
++      return indtokens[a:dir == 'up' ? -1 : 0]
+     endif
++  endwhile
++endfunction
++
++" Purpose:
++"   Find the token that directly precedes the given token.
++" Parameters:
++"   lnum: integer -- the line of the given token
++"   i: the index of the given token within line `lnum`
++" Returns:
++"   result = [] -- the result is an empty list if the given token is the first
++"                  token of the file
++"          | indtoken
++function! s:PrevIndToken(lnum, i)
++  call s:Log('    PrevIndToken called: lnum=' . a:lnum . ', i =' . a:i)
++
++  " If the current line has a previous token, return that
++  if a:i > 0
++    return s:all_tokens[a:lnum][a:i - 1]
++  else
++    return s:FindIndToken(a:lnum, 'up')
++  endif
++endfunction
+ 
+-    let prevline = getline(lnum)
+-    let currline = getline(v:lnum)
++" Purpose:
++"   Find the token that directly succeeds the given token.
++" Parameters:
++"   lnum: integer -- the line of the given token
++"   i: the index of the given token within line `lnum`
++" Returns:
++"   result = [] -- the result is an empty list if the given token is the last
++"                  token of the file
++"          | indtoken
++function! s:NextIndToken(lnum, i)
++  call s:Log('    NextIndToken called: lnum=' . a:lnum . ', i =' . a:i)
++
++  " If the current line has a next token, return that
++  if len(s:all_tokens[a:lnum]) > a:i + 1
++    return s:all_tokens[a:lnum][a:i + 1]
++  else
++    return s:FindIndToken(a:lnum, 'down')
++  endif
++endfunction
+ 
+-    let ind = indent(lnum) + &sw * s:ErlangIndentAtferLine(prevline)
++" ErlangCalcIndent helper functions {{{1
++" =================================
+ 
+-    " special cases:
+-    if prevline =~# '^\s*\%(after\|end\)\>'
+-        let ind = ind + 2*&sw
++" Purpose:
++"   This function is called when the parser encounters a syntax error.
++"
++"   If we encounter a syntax error, we return
++"   g:erlang_unexpected_token_indent, which is -1 by default. This means that
++"   the indentation of the LTI will not be changed.
++" Parameter:
++"   msg: string
++"   token: string
++"   stack: [token]
++" Returns:
++"   indent: integer
++function! s:IndentError(msg, token, stack)
++  call s:Log('Indent error: ' . a:msg . ' -> return')
++  call s:Log('  Token = ' . a:token . ', ' .
++            \'  stack = ' . string(a:stack))
++  return g:erlang_unexpected_token_indent
++endfunction
++
++" Purpose:
++"   This function is called when the parser encounters an unexpected token,
++"   and the parser will return the number given back by UnexpectedToken.
++"
++"   If we encounter an unexpected token, we return
++"   g:erlang_unexpected_token_indent, which is -1 by default. This means that
++"   the indentation of the LTI will not be changed.
++" Parameter:
++"   token: string
++"   stack: [token]
++" Returns:
++"   indent: integer
++function! s:UnexpectedToken(token, stack)
++  call s:Log('    Unexpected token ' . a:token . ', stack = ' .
++            \string(a:stack) . ' -> return')
++  return g:erlang_unexpected_token_indent
++endfunction
++
++if !exists('g:erlang_unexpected_token_indent')
++  let g:erlang_unexpected_token_indent = -1
++endif
++
++" Purpose:
++"   Return whether the given line starts with a string continuation.
++" Parameter:
++"   lnum: integer
++" Returns:
++"   result: bool
++" Example:
++"   f() ->           % IsLineStringContinuation = false
++"       "This is a   % IsLineStringContinuation = false
++"       multiline    % IsLineStringContinuation = true
++"       string".     % IsLineStringContinuation = true
++function! s:IsLineStringContinuation(lnum)
++  if has('syntax_items')
++    return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangString'
++  else
++    return 0
++  endif
++endfunction
++
++" Purpose:
++"   Return whether the given line starts with an atom continuation.
++" Parameter:
++"   lnum: integer
++" Returns:
++"   result: bool
++" Example:
++"   'function with   % IsLineAtomContinuation = true, but should be false
++"   weird name'() -> % IsLineAtomContinuation = true
++"       ok.          % IsLineAtomContinuation = false
++function! s:IsLineAtomContinuation(lnum)
++  if has('syntax_items')
++    return synIDattr(synID(a:lnum, 1, 0), 'name') =~# '^erlangQuotedAtom'
++  else
++    return 0
++  endif
++endfunction
++
++" Purpose:
++"   Return whether the 'catch' token (which should be the `i`th token in line
++"   `lnum`) is standalone or part of a try-catch block, based on the preceding
++"   token.
++" Parameters:
++"   lnum: integer
++"   i: integer
++" Return:
++"   is_standalone: bool
++function! s:IsCatchStandalone(lnum, i)
++  call s:Log('    IsCatchStandalone called: lnum=' . a:lnum . ', i=' . a:i)
++  let prev_indtoken = s:PrevIndToken(a:lnum, a:i)
++
++  " If we hit the beginning of the file, it is not a catch in a try block
++  if prev_indtoken == []
++    return 1
++  endif
++
++  let prev_token = prev_indtoken[0]
++
++  if prev_token =~# '[A-Z_@0-9]'
++    let is_standalone = 0
++  elseif prev_token =~# '[a-z]'
++    if index(['after', 'and', 'andalso', 'band', 'begin', 'bnot', 'bor', 'bsl',
++            \ 'bsr', 'bxor', 'case', 'catch', 'div', 'not', 'or', 'orelse',
++            \ 'rem', 'try', 'xor'], prev_token) != -1
++      " If catch is after these keywords, it is standalone
++      let is_standalone = 1
++    else
++      " If catch is after another keyword (e.g. 'end') or an atom, it is
++      " part of try-catch.
++      "
++      " Keywords:
++      " - may precede 'catch': end
++      " - may not precede 'catch': fun if of receive when
++      " - unused: cond let query
++      let is_standalone = 0
+     endif
+-    if currline =~# '^\s*end\>'
+-        let ind = ind - 2*&sw
++  elseif index([')', ']', '}', '<string>', '<string_end>', '<quoted_atom>',
++              \ '<quoted_atom_end>', '$.'], prev_token) != -1
++    let is_standalone = 0
++  else
++    " This 'else' branch includes the following tokens:
++    "   -> == /= =< < >= > =:= =/= + - * / ++ -- :: < > ; ( [ { ? = ! . |
++    let is_standalone = 1
++  endif
++
++  call s:Log('   "catch" preceded by "' . prev_token  . '" -> catch ' .
++            \(is_standalone ? 'is standalone' : 'belongs to try-catch'))
++  return is_standalone
++
++endfunction
++
++" Purpose:
++"   This function is called when a begin-type element ('begin', 'case',
++"   '[', '<<', etc.) is found. It asks the caller to return if the stack
++" Parameters:
++"   stack: [token]
++"   token: string
++"   curr_vcol: integer
++"   stored_vcol: integer
++"   sw: integer -- number of spaces to be used after the begin element as
++"                  indentation
++" Returns:
++"   result: [should_return, indent]
++"   should_return: bool -- if true, the caller should return `indent` to Vim
++"   indent -- integer
++function! s:BeginElementFoundIfEmpty(stack, token, curr_vcol, stored_vcol, sw)
++  if empty(a:stack)
++    if a:stored_vcol == -1
++      call s:Log('    "' . a:token . '" directly preceeds LTI -> return')
++      return [1, a:curr_vcol + a:sw]
++    else
++      call s:Log('    "' . a:token .
++                \'" token (whose expression includes LTI) found -> return')
++      return [1, a:stored_vcol]
+     endif
+-    if currline =~# '^\s*after\>'
+-        let plnum = s:FindPrevNonBlankNonComment(v:lnum-1)
+-        if getline(plnum) =~# '^[^%]*\<receive\>\s*\%(%.*\)\=$'
+-            let ind = ind - 1*&sw
+-            " If the 'receive' is not in the same line as the 'after'
+-        else
+-            let ind = ind - 2*&sw
+-        endif
++  else
++    return [0, 0]
++  endif
++endfunction
++
++" Purpose:
++"   This function is called when a begin-type element ('begin', 'case', '[',
++"   '<<', etc.) is found, and in some cases when 'after' and 'when' is found.
++"   It asks the caller to return if the stack is already empty.
++" Parameters:
++"   stack: [token]
++"   token: string
++"   curr_vcol: integer
++"   stored_vcol: integer
++"   end_token: end token that belongs to the begin element found (e.g. if the
++"              begin element is 'begin', the end token is 'end')
++"   sw: integer -- number of spaces to be used after the begin element as
++"                  indentation
++" Returns:
++"   result: [should_return, indent]
++"   should_return: bool -- if true, the caller should return `indent` to Vim
++"   indent -- integer
++function! s:BeginElementFound(stack, token, curr_vcol, stored_vcol, end_token, sw)
++
++  " Return 'return' if the stack is empty
++  let [ret, res] = s:BeginElementFoundIfEmpty(a:stack, a:token, a:curr_vcol,
++                                             \a:stored_vcol, a:sw)
++  if ret | return [ret, res] | endif
++
++  if a:stack[0] == a:end_token
++    call s:Log('    "' . a:token . '" pops "' . a:end_token . '"')
++    call s:Pop(a:stack)
++    if !empty(a:stack) && a:stack[0] == 'align_to_begin_element'
++      call s:Pop(a:stack)
++      if empty(a:stack)
++        return [1, a:curr_vcol]
++      else
++        return [1, s:UnexpectedToken(a:token, a:stack)]
++      endif
++    else
++      return [0, 0]
++    endif
++  else
++    return [1, s:UnexpectedToken(a:token, a:stack)]
++  endif
++endfunction
++
++" Purpose:
++"   This function is called when we hit the beginning of a file or an
++"   end-of-clause token -- i.e. when we found the beginning of the current
++"   clause.
++"
++"   If the stack contains an '->' or 'when', this means that we can return
++"   now, since we were looking for the beginning of the clause.
++" Parameters:
++"   stack: [token]
++"   token: string
++"   stored_vcol: integer
++" Returns:
++"   result: [should_return, indent]
++"   should_return: bool -- if true, the caller should return `indent` to Vim
++"   indent -- integer
++function! s:BeginningOfClauseFound(stack, token, stored_vcol)
++  if !empty(a:stack) && a:stack[0] == 'when'
++    call s:Log('    BeginningOfClauseFound: "when" found in stack')
++    call s:Pop(a:stack)
++    if empty(a:stack)
++      call s:Log('    Stack is ["when"], so LTI is in a guard -> return')
++      return [1, a:stored_vcol + &sw + 2]
++    else
++      return [1, s:UnexpectedToken(a:token, a:stack)]
+     endif
+-    if prevline =~# '^\s*[)}\]]'
+-        let ind = ind + 1*&sw
++  elseif !empty(a:stack) && a:stack[0] == '->'
++    call s:Log('    BeginningOfClauseFound: "->" found in stack')
++    call s:Pop(a:stack)
++    if empty(a:stack)
++      call s:Log('    Stack is ["->"], so LTI is in function body -> return')
++      return [1, a:stored_vcol + &sw]
++    elseif a:stack[0] == ';'
++      call s:Pop(a:stack)
++      if empty(a:stack)
++        call s:Log('    Stack is ["->", ";"], so LTI is in a function head ' .
++                  \'-> return')
++        return [0, a:stored_vcol]
++      else
++        return [1, s:UnexpectedToken(a:token, a:stack)]
++      endif
++    else
++      return [1, s:UnexpectedToken(a:token, a:stack)]
+     endif
+-    if currline =~# '^\s*[)}\]]'
+-        let ind = ind - 1*&sw
++  else
++    return [0, 0]
++  endif
++endfunction
++
++let g:erlang_indent_searchpair_timeout = 2000
++
++" TODO
++function! s:SearchPair(lnum, curr_col, start, middle, end)
++  call cursor(a:lnum, a:curr_col + 1)
++  let [lnum_new, col1_new] = 
++      \searchpairpos(a:start, a:middle, a:end, 'bW',
++                    \'synIDattr(synID(line("."), col("."), 0), "name") ' .
++                    \'=~? "string\\|quotedatom\\|todo\\|comment\\|' . 
++                    \'erlangmodifier"',
++                    \0, g:erlang_indent_searchpair_timeout)
++  return [lnum_new, col1_new - 1]
++endfunction
++
++function! s:SearchEndPair(lnum, curr_col)
++  return s:SearchPair(
++         \ a:lnum, a:curr_col,
++         \ '\<\%(case\|try\|begin\|receive\|if\)\>\|' .
++         \ '\<fun\>\%(\s\|\n\|%.*$\)*(',
++         \ '',
++         \ '\<end\>')
++endfunction
++
++" ErlangCalcIndent {{{1
++" ================
++
++" Purpose:
++"   Calculate the indentation of the given line.
++" Parameters:
++"   lnum: integer -- index of the line for which the indentation should be
++"                    calculated
++"   stack: [token] -- initial stack
++" Return:
++"   indent: integer -- if -1, that means "don't change the indentation";
++"                      otherwise it means "indent the line with `indent`
++"                      number of spaces or equivalent tabs"
++function! s:ErlangCalcIndent(lnum, stack)
++  let res = s:ErlangCalcIndent2(a:lnum, a:stack)
++  call s:Log("ErlangCalcIndent returned: " . res)
++  return res
++endfunction
++
++function! s:ErlangCalcIndent2(lnum, stack)
++
++  let lnum = a:lnum
++  let stored_vcol = -1 " Virtual column of the first character of the token that
++                   " we currently think we might align to.
++  let mode = 'normal'
++  let stack = a:stack
++  let semicolon_abscol = ''
++
++  " Walk through the lines of the buffer backwards (starting from the
++  " previous line) until we can decide how to indent the current line.
++  while 1
++
++    let [lnum, indtokens] = s:TokenizeLine(lnum, 'up')
++
++    " Hit the start of the file
++    if lnum == 0
++      let [ret, res] = s:BeginningOfClauseFound(stack, 'beginning_of_file',
++                                               \stored_vcol)
++      if ret | return res | endif
++
++      return 0
+     endif
+-    if prevline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
+-        let ind = ind + 1*&sw
++
++    let i = len(indtokens) - 1
++    let last_token_of_line = 1
++
++    while i >= 0
++
++      let [token, curr_vcol, curr_col] = indtokens[i]
++      call s:Log('  Analyzing the following token: ' . string(indtokens[i]))
++
++      if len(stack) > 256 " TODO: magic number
++        return s:IndentError('Stack too long', token, stack)
++      endif
++
++      if token == '<end_of_clause>'
++        let [ret, res] = s:BeginningOfClauseFound(stack, token, stored_vcol)
++        if ret | return res | endif
++
++        if stored_vcol == -1
++          call s:Log('    End of clause directly preceeds LTI -> return')
++          return 0
++        else
++          call s:Log('    End of clause (but not end of line) -> return')
++          return stored_vcol
++        endif
++
++      elseif stack == ['prev_term_plus']
++        if token =~# '[a-zA-Z_@]' ||
++         \ token == '<string>' || token == '<string_start>' ||
++         \ token == '<quoted_atom>' || token == '<quoted_atom_start>'
++          call s:Log('    previous token found: curr_vcol + plus = ' .
++                    \curr_vcol . " + " . plus)
++          return curr_vcol + plus
++        endif
++
++      elseif token == 'begin'
++        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
++                                            \stored_vcol, 'end', &sw)
++        if ret | return res | endif
++
++      " case EXPR of BRANCHES end
++      " try EXPR catch BRANCHES end
++      " try EXPR after BODY end
++      " try EXPR catch BRANCHES after BODY end
++      " try EXPR of BRANCHES catch BRANCHES end
++      " try EXPR of BRANCHES after BODY end
++      " try EXPR of BRANCHES catch BRANCHES after BODY end
++      " receive BRANCHES end
++      " receive BRANCHES after BRANCHES end
++
++      " This branch is not Emacs-compatible
++      elseif (index(['of', 'receive', 'after', 'if'], token) != -1 ||
++           \  (token == 'catch' && !s:IsCatchStandalone(lnum, i))) &&
++           \ !last_token_of_line &&
++           \ (empty(stack) || stack == ['when'] || stack == ['->'] ||
++           \  stack == ['->', ';'])
++
++        " If we are after of/receive, but these are not the last
++        " tokens of the line, we want to indent like this:
++        "
++        "   % stack == []
++        "   receive stored_vcol,
++        "           LTI
++        "
++        "   % stack == ['->', ';']
++        "   receive stored_vcol ->
++        "               B;
++        "           LTI
++        "
++        "   % stack == ['->']
++        "   receive stored_vcol ->
++        "               LTI
++        "
++        "   % stack == ['when']
++        "   receive stored_vcol when
++        "               LTI
++
++        " stack = []  =>  LTI is a condition
++        " stack = ['->']  =>  LTI is a branch
++        " stack = ['->', ';']  =>  LTI is a condition
++        " stack = ['when']  =>  LTI is a guard
++        if empty(stack) || stack == ['->', ';']
++          call s:Log('    LTI is in a condition after ' .
++                    \'"of/receive/after/if/catch" -> return')
++          return stored_vcol
++        elseif stack == ['->']
++          call s:Log('    LTI is in a branch after ' .
++                    \'"of/receive/after/if/catch" -> return')
++          return stored_vcol + &sw
++        elseif stack == ['when']
++          call s:Log('    LTI is in a guard after ' .
++                    \'"of/receive/after/if/catch" -> return')
++          return stored_vcol + &sw
++        else
++          return s:UnexpectedToken(token, stack)
++        endif
++
++      elseif index(['case', 'if', 'try', 'receive'], token) != -1
++
++        " stack = []  =>  LTI is a condition
++        " stack = ['->']  =>  LTI is a branch
++        " stack = ['->', ';']  =>  LTI is a condition
++        " stack = ['when']  =>  LTI is in a guard
++        if empty(stack)
++          " pass
++        elseif (token == 'case' && stack[0] == 'of') ||
++             \ (token == 'if') ||
++             \ (token == 'try' && (stack[0] == 'of' ||
++             \                     stack[0] == 'catch' ||
++             \                     stack[0] == 'after')) ||
++             \ (token == 'receive')
++
++          " From the indentation point of view, the keyword
++          " (of/catch/after/end) before the LTI is what counts, so
++          " when we reached these tokens, and the stack already had
++          " a catch/after/end, we didn't modify it.
++          "
++          " This way when we reach case/try/receive (i.e. now),
++          " there is at most one of/catch/after/end token in the
++          " stack.
++          if token == 'case' || token == 'try' ||
++           \ (token == 'receive' && stack[0] == 'after')
++            call s:Pop(stack)
++          endif
++
++          if empty(stack)
++            call s:Log('    LTI is in a condition; matching ' .
++                      \'"case/if/try/receive" found')
++            let stored_vcol = curr_vcol + &sw
++          elseif stack[0] == 'align_to_begin_element'
++            call s:Pop(stack)
++            let stored_vcol = curr_vcol
++          elseif len(stack) > 1 && stack[0] == '->' && stack[1] == ';'
++            call s:Log('    LTI is in a condition; matching ' .
++                      \'"case/if/try/receive" found')
++            call s:Pop(stack)
++            call s:Pop(stack)
++            let stored_vcol = curr_vcol + &sw
++          elseif stack[0] == '->'
++            call s:Log('    LTI is in a branch; matching ' .
++                      \'"case/if/try/receive" found')
++            call s:Pop(stack)
++            let stored_vcol = curr_vcol + 2 * &sw
++          elseif stack[0] == 'when'
++            call s:Log('    LTI is in a guard; matching ' .
++                      \'"case/if/try/receive" found')
++            call s:Pop(stack)
++            let stored_vcol = curr_vcol + 2 * &sw + 2
++          endif
++
++        endif
++
++        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
++                                            \stored_vcol, 'end', &sw)
++        if ret | return res | endif
++
++      elseif token == 'fun'
++        let next_indtoken = s:NextIndToken(lnum, i)
++        call s:Log('    Next indtoken = ' . string(next_indtoken))
++
++        if !empty(next_indtoken) && next_indtoken[0] == '('
++          " We have an anonymous function definition
++          " (e.g. "fun () -> ok end")
++
++          " stack = []  =>  LTI is a condition
++          " stack = ['->']  =>  LTI is a branch
++          " stack = ['->', ';']  =>  LTI is a condition
++          " stack = ['when']  =>  LTI is in a guard
++          if empty(stack)
++            call s:Log('    LTI is in a condition; matching "fun" found')
++            let stored_vcol = curr_vcol + &sw
++          elseif len(stack) > 1 && stack[0] == '->' && stack[1] == ';'
++            call s:Log('    LTI is in a condition; matching "fun" found')
++            call s:Pop(stack)
++            call s:Pop(stack)
++          elseif stack[0] == '->'
++            call s:Log('    LTI is in a branch; matching "fun" found')
++            call s:Pop(stack)
++            let stored_vcol = curr_vcol + 2 * &sw
++          elseif stack[0] == 'when'
++            call s:Log('    LTI is in a guard; matching "fun" found')
++            call s:Pop(stack)
++            let stored_vcol = curr_vcol + 2 * &sw + 2
++          endif
++
++          let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
++                                              \stored_vcol, 'end', &sw)
++          if ret | return res | endif
++        else
++          " Pass: we have a function reference (e.g. "fun f/0")
++        endif
++
++      elseif token == '['
++        " Emacs compatibility
++        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
++                                            \stored_vcol, ']', 1)
++        if ret | return res | endif
++
++      elseif token == '<<'
++        " Emacs compatibility
++        let [ret, res] = s:BeginElementFound(stack, token, curr_vcol,
++                                            \stored_vcol, '>>', 2)
++        if ret | return res | endif
++
++      elseif token == '(' || token == '{'
++
++        let end_token = (token == '(' ? ')' :
++                        \token == '{' ? '}' : 'error')
++
++        if empty(stack)
++          " We found the opening paren whose block contains the LTI.
++          let mode = 'inside'
++        elseif stack[0] == end_token
++          call s:Log('    "' . token . '" pops "' . end_token . '"')
++          call s:Pop(stack)
++
++          if !empty(stack) && stack[0] == 'align_to_begin_element'
++            " We found the opening paren whose closing paren
++            " starts LTI
++            let mode = 'align_to_begin_element'
++          else
++            " We found the opening pair for a closing paren that
++            " was already in the stack.
++            let mode = 'outside'
++          endif
++        else
++          return s:UnexpectedToken(token, stack)
++        endif
++
++        if mode == 'inside' || mode == 'align_to_begin_element'
++
++          if last_token_of_line && i != 0
++            " Examples: {{{
++            "
++            " mode == 'inside':
++            "
++            "     my_func(
++            "       LTI
++            "
++            "     [Variable, {
++            "        LTI
++            "
++            " mode == 'align_to_begin_element':
++            "
++            "     my_func(
++            "       Params
++            "      ) % LTI
++            "
++            "     [Variable, {
++            "        Terms
++            "       } % LTI
++            " }}}
++            let stack = ['prev_term_plus']
++            let plus = (mode == 'inside' ? 2 : 1)
++            call s:Log('    "' . token .
++                      \'" token found at end of line -> find previous token')
++          elseif mode == 'align_to_begin_element'
++            " Examples: {{{
++            "
++            " mode == 'align_to_begin_element' && !last_token_of_line
++            "
++            "     my_func(stored_vcol
++            "            ) % LTI
++            "
++            "     [Variable, {stored_vcol
++            "                } % LTI
++            "
++            " mode == 'align_to_begin_element' && i == 0
++            "
++            "     (
++            "       stored_vcol
++            "     ) % LTI
++            "
++            "     {
++            "       stored_vcol
++            "     } % LTI
++            " }}}
++            call s:Log('    "' . token . '" token (whose closing token ' .
++                      \'starts LTI) found -> return')
++            return curr_vcol
++          elseif stored_vcol == -1
++            " Examples: {{{
++            "
++            " mode == 'inside' && stored_vcol == -1 && !last_token_of_line
++            "
++            "     my_func(
++            "             LTI
++            "     [Variable, {
++            "                 LTI
++            "
++            " mode == 'inside' && stored_vcol == -1 && i == 0
++            "
++            "     (
++            "      LTI
++            "
++            "     {
++            "      LTI
++            " }}}
++            call s:Log('    "' . token .
++                      \'" token (which directly precedes LTI) found -> return')
++            return curr_vcol + 1
++          else
++            " Examples: {{{
++            "
++            " mode == 'inside' && stored_vcol != -1 && !last_token_of_line
++            "
++            "     my_func(stored_vcol,
++            "             LTI
++            "
++            "     [Variable, {stored_vcol,
++            "                 LTI
++            "
++            " mode == 'inside' && stored_vcol != -1 && i == 0
++            "
++            "     (stored_vcol,
++            "      LTI
++            "
++            "     {stored_vcol,
++            "      LTI
++            " }}}
++            call s:Log('    "' . token .
++                      \'" token (whose block contains LTI) found -> return')
++            return stored_vcol
++          endif
++        endif
++
++      elseif index(['end', ')', ']', '}', '>>'], token) != -1
++
++        " If we can be sure that there is synchronization in the Erlang
++        " syntax, we use searchpair to make the script quicker. Otherwise we
++        " just push the token onto the stack and keep parsing.
++    
++        " No synchronization -> no searchpair optimization
++        if !exists('b:erlang_syntax_synced')
++          call s:Push(stack, token)
++
++        " We don't have searchpair optimization for '>>'
++        elseif token == '>>'
++          call s:Push(stack, token)
++
++        elseif token == 'end'
++          let [lnum_new, col_new] = s:SearchEndPair(lnum, curr_col)
++
++          if lnum_new == 0
++            return s:IndentError('Matching token for "end" not found',
++                                \token, stack)
++          else
++            if lnum_new != lnum
++              call s:Log('    Tokenize for "end" <<<<')
++              let [lnum, indtokens] = s:TokenizeLine(lnum_new, 'up')
++              call s:Log('    >>>> Tokenize for "end"')
++            endif
++
++            let [success, i] = s:GetIndtokenAtCol(indtokens, col_new)
++            if !success | return i | endif
++            let [token, curr_vcol, curr_col] = indtokens[i]
++            call s:Log('    Match for "end" in line ' . lnum_new . ': ' .
++                      \string(indtokens[i]))
++          endif
++
++        else " token is one of the following: ')', ']', '}'
++
++          call s:Push(stack, token)
++
++          " We have to escape '[', because this string will be interpreted as a
++          " regexp
++          let open_paren = (token == ')' ? '(' :
++                           \token == ']' ? '\[' :
++                           \               '{')
++
++          let [lnum_new, col_new] = s:SearchPair(lnum, curr_col,
++                                                \open_paren, '', token)
++
++          if lnum_new == 0
++            return s:IndentError('Matching token not found',
++                                \token, stack)
++          else
++            if lnum_new != lnum
++              call s:Log('    Tokenize the opening paren <<<<')
++              let [lnum, indtokens] = s:TokenizeLine(lnum_new, 'up')
++              call s:Log('    >>>>')
++            endif
++
++            let [success, i] = s:GetIndtokenAtCol(indtokens, col_new)
++            if !success | return i | endif
++            let [token, curr_vcol, curr_col] = indtokens[i]
++            call s:Log('    Match in line ' . lnum_new . ': ' .
++                      \string(indtokens[i]))
++
++            " Go back to the beginning of the loop and handle the opening paren
++            continue
++          endif
++        endif
++
++      elseif token == ';'
++
++        if empty(stack)
++          call s:Push(stack, ';')
++        elseif index([';', '->', 'when', 'end', 'after', 'catch'],
++                    \stack[0]) != -1
++          " Pass:
++          "
++          " - If the stack top is another ';', then one ';' is
++          "   enough.
++          " - If the stack top is an '->' or a 'when', then we
++          "   should keep that, because they signify the type of the
++          "   LTI (branch, condition or guard).
++          " - From the indentation point of view, the keyword
++          "   (of/catch/after/end) before the LTI is what counts, so
++          "   if the stack already has a catch/after/end, we don't
++          "   modify it. This way when we reach case/try/receive,
++          "   there will be at most one of/catch/after/end token in
++          "   the stack.
++        else
++          return s:UnexpectedToken(token, stack)
++        endif
++
++      elseif token == '->'
++
++        if empty(stack) && !last_token_of_line
++          call s:Log('    LTI is in expression after arrow -> return')
++          return stored_vcol
++        elseif empty(stack) || stack[0] == ';' || stack[0] == 'end'
++          " stack = [';']  -> LTI is either a branch or in a guard
++          " stack = ['->']  ->  LTI is a condition
++          " stack = ['->', ';']  -> LTI is a branch
++          call s:Push(stack, '->')
++        elseif index(['->', 'when', 'end', 'after', 'catch'], stack[0]) != -1
++          " Pass:
++          "
++          " - If the stack top is another '->', then one '->' is
++          "   enough.
++          " - If the stack top is a 'when', then we should keep
++          "   that, because this signifies that LTI is a in a guard.
++          " - From the indentation point of view, the keyword
++          "   (of/catch/after/end) before the LTI is what counts, so
++          "   if the stack already has a catch/after/end, we don't
++          "   modify it. This way when we reach case/try/receive,
++          "   there will be at most one of/catch/after/end token in
++          "   the stack.
++        else
++          return s:UnexpectedToken(token, stack)
++        endif
++
++      elseif token == 'when'
++
++        " Pop all ';' from the top of the stack
++        while !empty(stack) && stack[0] == ';'
++          call s:Pop(stack)
++        endwhile
++
++        if empty(stack)
++          if semicolon_abscol != ''
++            let stored_vcol = semicolon_abscol
++          endif
++          if !last_token_of_line
++            " Example:
++            "   when A,
++            "        LTI
++            let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
++                                                       \stored_vcol, &sw)
++            if ret | return res | endif
++          else
++            " Example:
++            "   when
++            "       LTI
++            call s:Push(stack, token)
++          endif
++        elseif index(['->', 'when', 'end', 'after', 'catch'], stack[0]) != -1
++          " Pass:
++          " - If the stack top is another 'when', then one 'when' is
++          "   enough.
++          " - If the stack top is an '->' or a 'when', then we
++          "   should keep that, because they signify the type of the
++          "   LTI (branch, condition or guard).
++          " - From the indentation point of view, the keyword
++          "   (of/catch/after/end) before the LTI is what counts, so
++          "   if the stack already has a catch/after/end, we don't
++          "   modify it. This way when we reach case/try/receive,
++          "   there will be at most one of/catch/after/end token in
++          "   the stack.
++        else
++          return s:UnexpectedToken(token, stack)
++        endif
++
++      elseif token == 'of' || token == 'after' ||
++           \ (token == 'catch' && !s:IsCatchStandalone(lnum, i))
++
++        if token == 'after'
++          " If LTI is between an 'after' and the corresponding
++          " 'end', then let's return
++          let [ret, res] = s:BeginElementFoundIfEmpty(stack, token, curr_vcol,
++                                                     \stored_vcol, &sw)
++          if ret | return res | endif
++        endif
++
++        if empty(stack) || stack[0] == '->' || stack[0] == 'when'
++          call s:Push(stack, token)
++        elseif stack[0] == 'catch' || stack[0] == 'after' || stack[0] == 'end'
++          " Pass: From the indentation point of view, the keyword
++          " (of/catch/after/end) before the LTI is what counts, so
++          " if the stack already has a catch/after/end, we don't
++          " modify it. This way when we reach case/try/receive,
++          " there will be at most one of/catch/after/end token in
++          " the stack.
++        else
++          return s:UnexpectedToken(token, stack)
++        endif
++
++      elseif token == '||' && empty(stack) && !last_token_of_line
++
++        call s:Log('    LTI is in expression after "||" -> return')
++        return stored_vcol
++
++      else
++        call s:Log('    Misc token, stack unchanged = ' . string(stack))
++
++      endif
++
++      if empty(stack) || stack[0] == '->' || stack[0] == 'when'
++        let stored_vcol = curr_vcol
++        let semicolon_abscol = ''
++        call s:Log('    Misc token when the stack is empty or has "->" ' .
++                  \'-> setting stored_vcol to ' . stored_vcol)
++      elseif stack[0] == ';'
++        let semicolon_abscol = curr_vcol
++        call s:Log('    Setting semicolon-stored_vcol to ' . stored_vcol)
++      endif
++
++      let i -= 1
++      call s:Log('    Token processed. stored_vcol=' . stored_vcol)
++
++      let last_token_of_line = 0
++
++    endwhile " iteration on tokens in a line
++
++    call s:Log('  Line analyzed. stored_vcol=' . stored_vcol)
++
++    if empty(stack) && stored_vcol != -1 &&
++     \ (!empty(indtokens) && indtokens[0][0] != '<string_end>' &&
++     \                       indtokens[0][0] != '<quoted_atom_end>')
++      call s:Log('    Empty stack at the beginning of the line -> return')
++      return stored_vcol
+     endif
+-    if currline =~# '^\s*\%(catch\)\s*\%(%\|$\)'
+-        let ind = ind - 1*&sw
++
++    let lnum -= 1
++
++  endwhile " iteration on lines
++
++endfunction
++
++" ErlangIndent function {{{1
++" =====================
++
++function! ErlangIndent()
++
++  call s:ClearTokenCacheIfNeeded()
++
++  let currline = getline(v:lnum)
++  call s:Log('Indenting line ' . v:lnum . ': ' . currline)
++
++  if s:IsLineStringContinuation(v:lnum) || s:IsLineAtomContinuation(v:lnum)
++    call s:Log('String or atom continuation found -> ' .
++              \'leaving indentation unchanged')
++    return -1
++  endif
++
++  let ml = matchlist(currline,
++                    \'^\(\s*\)\(\%(end\|of\|catch\|after\)\>\|[)\]}]\|>>\)')
++
++  " If the line has a special beginning, but not a standalone catch
++  if !empty(ml) && !(ml[2] == 'catch' && s:IsCatchStandalone(v:lnum, 0))
++
++    let curr_col = len(ml[1])
++
++    " If we can be sure that there is synchronization in the Erlang
++    " syntax, we use searchpair to make the script quicker.
++    if ml[2] == 'end' && exists('b:erlang_syntax_synced')
++
++      let [lnum, col] = s:SearchEndPair(v:lnum, curr_col)
++
++      if lnum == 0
++        return s:IndentError('Matching token for "end" not found',
++                            \'end', [])
++      else
++        call s:Log('    Tokenize for "end" <<<<')
++        let [lnum, indtokens] = s:TokenizeLine(lnum, 'up')
++        call s:Log('    >>>> Tokenize for "end"')
++
++        let [success, i] = s:GetIndtokenAtCol(indtokens, col)
++        if !success | return i | endif
++        let [token, curr_vcol, curr_col] = indtokens[i]
++        call s:Log('    Match for "end" in line ' . lnum . ': ' .
++                   \string(indtokens[i]))
++        return curr_vcol
++      endif
++
++    else
++
++      call s:Log("  Line type = 'end'")
++      let new_col = s:ErlangCalcIndent(v:lnum - 1,
++                                      \[ml[2], 'align_to_begin_element'])
+     endif
++  else
++    call s:Log("  Line type = 'normal'")
+ 
+-    if ind<0
+-        let ind = 0
++    let new_col = s:ErlangCalcIndent(v:lnum - 1, [])
++    if currline =~# '^\s*when\>'
++      let new_col += 2
+     endif
+-    return ind
++  endif
++
++  if new_col < -1
++    call s:Log('WARNING: returning new_col == ' . new_col)
++    return g:erlang_unexpected_token_indent
++  endif
++
++  return new_col
+ 
+ endfunction
+ 
+-" TODO:
+-" 
+-" f() ->
+-"     x("foo
+-"         bar")
+-"         ,
+-"         bad_indent.
+-"
+-" fun
+-"     init/0,
+-"     bad_indent
+-"
+-"     #rec
+-"     .field,
+-" bad_indent
+-"
+-" case X of
+-"     1 when A; B ->
+-"     bad_indent
++" Cleanup {{{1
++" =======
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ 
++" vim: sw=2 et fdm=marker
+diff -Naur vim73.orig/runtime/indent/falcon.vim vim73/runtime/indent/falcon.vim
+--- vim73.orig/runtime/indent/falcon.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/falcon.vim	2013-06-07 17:07:13.885635694 +0000
+@@ -0,0 +1,158 @@
++" Vim indent file
++" Language: Falcon
++" Maintainer: Steven Oliver <oliver.steven@gmail.com>
++" Website: https://steveno@github.com/steveno/falconpl-vim.git
++" Credits: Thanks to the ruby.vim authors, I borrow a lot!
++" Previous Maintainer: Brent A. Fulgham <bfulgham@debian.org>
++" -----------------------------------------------------------
++
++"======================================
++"       SETUP
++"======================================
++
++" Only load this indent file when no other was loaded.
++if exists("b:did_indent")
++    finish
++endif
++let b:did_indent = 1
++
++setlocal nosmartindent
++
++" Setup indent function and when to use it
++setlocal indentexpr=FalconGetIndent()
++setlocal indentkeys=0{,0},0),0],!^F,o,O,e
++setlocal indentkeys+==~case,=~catch,=~default,=~elif,=~else,=~end,=~\"
++
++" Define the appropriate indent function but only once
++if exists("*FalconGetIndent")
++    finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++"======================================
++"       VARIABLES
++"======================================
++
++" Regex of syntax group names that are strings AND comments
++let s:syng_strcom = '\<falcon\%(String\|StringEscape\|Comment\)\>'
++
++" Regex of syntax group names that are strings
++let s:syng_string = '\<falcon\%(String\|StringEscape\)\>'
++
++" Keywords to indent on
++let s:falcon_indent_keywords = '^\s*\(case\|catch\|class\|enum\|default\|elif\|else' .
++    \ '\|for\|function\|if.*"[^"]*:.*"\|if \(\(:\)\@!.\)*$\|loop\|object\|select' .
++    \ '\|switch\|try\|while\|\w*\s*=\s*\w*([$\)'
++
++" Keywords to deindent on
++let s:falcon_deindent_keywords = '^\s*\(case\|catch\|default\|elif\|else\|end\)'
++
++"======================================
++"       FUNCTIONS
++"======================================
++
++" Check if the character at lnum:col is inside a string
++function s:IsInStringOrComment(lnum, col)
++    return synIDattr(synID(a:lnum, a:col, 1), 'name') =~ s:syng_strcom
++endfunction
++
++"======================================
++"       INDENT ROUTINE
++"======================================
++
++function FalconGetIndent()
++    " Get the line to be indented
++    let cline = getline(v:lnum)
++
++    " Don't reindent comments on first column
++    if cline =~ '^\/\/'
++        return 0
++    endif
++
++    " Find the previous non-blank line
++    let lnum = prevnonblank(v:lnum - 1)
++
++    " Use zero indent at the top of the file
++    if lnum == 0
++        return 0
++    endif
++
++    let prevline=getline(lnum)
++    let ind = indent(lnum)
++    let chg = 0
++
++    " If we are in a multi-line string or line-comment, don't do anything
++    if s:IsInStringOrComment(v:lnum, matchend(cline, '^\s*') + 1 )
++        return indent('.')
++    endif
++
++    " If the start of the line equals a double quote, then indent to the
++    " previous lines first double quote
++    if cline =~? '^\s*"'
++        let chg = chg + &sw
++    endif
++
++    " If previous line started with a double quote and this one
++    " doesn't, unindent
++    if prevline =~? '^\s*"' && cline =~? '^\s*'
++        let chg = chg - &sw
++    endif
++
++    " Indent if proper keyword
++    if prevline =~? s:falcon_indent_keywords
++        let chg = &sw
++    " If previous line opened a parenthesis, and did not close it, indent
++    elseif prevline =~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
++        " Make sure this isn't just a function split between two lines
++        if prevline =~ ',\s*$'
++            return indent(prevnonblank(v:lnum - 1)) + &sw
++        else
++            return match(prevline, '(.*\((.*)\|[^)]\)*.*$') + 1
++        endif
++    elseif prevline =~ '^[^(]*)\s*$'
++        " This line closes a parenthesis. Finds opening.
++        let curr_line = prevnonblank(lnum - 1)
++        while curr_line >= 0
++            let str = getline(curr_line)
++            if str !~ '^.*(\s*[^)]*\((.*)\)*[^)]*$'
++                let curr_line = prevnonblank(curr_line - 1)
++            else
++                break
++            endif
++        endwhile
++        if curr_line < 0
++            return -1
++        endif
++        let ind = indent(curr_line)
++    endif
++
++    " If previous line ends in a semi-colon reset indent to previous
++    " lines setting
++    if prevline =~? ';\s*$' && prevnonblank(prevline) =~? ',\s*$'
++        let chg = chg - (2 * &sw)
++    endif
++
++    " If previous line ended in a comma, indent again
++    if prevline =~? ',\s*$'
++        let chg = chg + &sw
++    endif
++
++    " If previous line ended in a =>, indent again
++    if prevline =~? '=>\s*$'
++        let chg = chg + &sw
++    endif
++
++    " Deindent on proper keywords
++    if cline =~? s:falcon_deindent_keywords
++        let chg = chg - &sw
++    endif
++
++    return ind + chg
++endfunction
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim: set sw=4 sts=4 et tw=80 :
+diff -Naur vim73.orig/runtime/indent/fortran.vim vim73/runtime/indent/fortran.vim
+--- vim73.orig/runtime/indent/fortran.vim	2010-07-21 16:31:02.000000000 +0000
++++ vim73/runtime/indent/fortran.vim	2013-06-07 17:07:13.892302341 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	Fortran95 (and Fortran90, Fortran77, F and elf90)
+-" Version:	0.38
+-" Last Change:	2010 July 21
++" Version:	0.40
++" Last Change:	2011 Dec. 28
+ " Maintainer:	Ajit J. Thakkar <ajit@unb.ca>; <http://www.unb.ca/chem/ajit/>
+ " Usage:	Do :help fortran-indent from Vim
+ 
+@@ -11,9 +11,18 @@
+ endif
+ let b:did_indent = 1
+ 
++let s:cposet=&cpoptions
++set cpoptions&vim
++
+ setlocal indentkeys+==~end,=~case,=~if,=~else,=~do,=~where,=~elsewhere,=~select
+-setlocal indentkeys+==~endif,=~enddo,=~endwhere,=~endselect
+-setlocal indentkeys+==~type,=~interface
++setlocal indentkeys+==~endif,=~enddo,=~endwhere,=~endselect,=~elseif
++setlocal indentkeys+==~type,=~interface,=~forall,=~associate,=~block,=~enum
++setlocal indentkeys+==~endforall,=~endassociate,=~endblock,=~endenum
++if exists("b:fortran_indent_more") || exists("g:fortran_indent_more")
++  setlocal indentkeys+==~function,=~subroutine,=~module,=~contains,=~program
++  setlocal indentkeys+==~endfunction,=~endsubroutine,=~endmodule
++  setlocal indentkeys+==~endprogram
++endif
+ 
+ " Determine whether this is a fixed or free format source file
+ " if this hasn't been done yet
+@@ -61,14 +70,13 @@
+   endif
+ endif
+ 
+-let s:cposet=&cpoptions
+-set cpoptions-=C
+-
+ function FortranGetIndent(lnum)
+   let ind = indent(a:lnum)
+   let prevline=getline(a:lnum)
+   " Strip tail comment
+   let prevstat=substitute(prevline, '!.*$', '', '')
++  let prev2line=getline(a:lnum-1)
++  let prev2stat=substitute(prev2line, '!.*$', '', '')
+ 
+   "Indent do loops only if they are all guaranteed to be of do/end do type
+   if exists("b:fortran_do_enddo") || exists("g:fortran_do_enddo")
+@@ -80,33 +88,64 @@
+     endif
+   endif
+ 
+-  "Add a shiftwidth to statements following if, else, case,
+-  "where, elsewhere, type and interface statements
+-  if prevstat =~? '^\s*\(\d\+\s\)\=\s*\(else\|case\|where\|elsewhere\)\>'
+-	\ ||prevstat =~? '^\s*\(\d\+\s\)\=\s*\(type\|interface\)\>'
+-	\ || prevstat =~? '^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*if\>'
++  "Add a shiftwidth to statements following if, else, else if, case,
++  "where, else where, forall, type, interface and associate statements
++  if prevstat =~? '^\s*\(case\|else\|else\s*if\|else\s*where\)\>'
++	\ ||prevstat=~? '^\s*\(type\|interface\|associate\|enum\)\>'
++	\ ||prevstat=~?'^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*\(forall\|where\|block\)\>'
++	\ ||prevstat=~? '^\s*\(\d\+\s\)\=\s*\(\a\w*\s*:\)\=\s*if\>'
+      let ind = ind + &sw
+     " Remove unwanted indent after logical and arithmetic ifs
+     if prevstat =~? '\<if\>' && prevstat !~? '\<then\>'
+       let ind = ind - &sw
+     endif
+     " Remove unwanted indent after type( statements
+-    if prevstat =~? '\<type\s*('
++    if prevstat =~? '^\s*type\s*('
+       let ind = ind - &sw
+     endif
+   endif
+ 
+-  "Subtract a shiftwidth from else, elsewhere, case, end if,
+-  " end where, end select, end interface and end type statements
++  "Indent program units unless instructed otherwise
++  if !exists("b:fortran_indent_less") && !exists("g:fortran_indent_less")
++    let prefix='\(\(pure\|impure\|elemental\|recursive\)\s\+\)\{,2}'
++    let type='\(\(integer\|real\|double\s\+precision\|complex\|logical'
++          \.'\|character\|type\|class\)\s*\S*\s\+\)\='
++    if prevstat =~? '^\s*\(module\|contains\|program\)\>'
++            \ ||prevstat =~? '^\s*'.prefix.'subroutine\>'
++            \ ||prevstat =~? '^\s*'.prefix.type.'function\>'
++            \ ||prevstat =~? '^\s*'.type.prefix.'function\>'
++      let ind = ind + &sw
++    endif
++    if getline(v:lnum) =~? '^\s*contains\>'
++          \ ||getline(v:lnum)=~? '^\s*end\s*'
++          \ .'\(function\|subroutine\|module\|program\)\>'
++      let ind = ind - &sw
++    endif
++  endif
++
++  "Subtract a shiftwidth from else, else if, elsewhere, case, end if,
++  " end where, end select, end forall, end interface, end associate,
++  " end enum, and end type statements
+   if getline(v:lnum) =~? '^\s*\(\d\+\s\)\=\s*'
+-	\. '\(else\|elsewhere\|case\|end\s*\(if\|where\|select\|interface\|type\)\)\>'
++        \. '\(else\|else\s*if\|else\s*where\|case\|'
++        \. 'end\s*\(if\|where\|select\|interface\|'
++        \. 'type\|forall\|associate\|enum\)\)\>'
+     let ind = ind - &sw
+     " Fix indent for case statement immediately after select
+-    if prevstat =~? '\<select\>'
++    if prevstat =~? '\<select\s\+\(case\|type\)\>'
+       let ind = ind + &sw
+     endif
+   endif
+ 
++  "First continuation line
++  if prevstat =~ '&\s*$' && prev2stat !~ '&\s*$'
++    let ind = ind + &sw
++  endif
++  "Line after last continuation line
++  if prevstat !~ '&\s*$' && prev2stat =~ '&\s*$'
++    let ind = ind - &sw
++  endif
++
+   return ind
+ endfunction
+ 
+diff -Naur vim73.orig/runtime/indent/gitconfig.vim vim73/runtime/indent/gitconfig.vim
+--- vim73.orig/runtime/indent/gitconfig.vim	2010-05-21 09:53:47.000000000 +0000
++++ vim73/runtime/indent/gitconfig.vim	2013-06-07 17:07:13.915635608 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	git config file
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists("b:did_indent")
+   finish
+@@ -12,6 +12,8 @@
+ setlocal indentexpr=GetGitconfigIndent()
+ setlocal indentkeys=o,O,*<Return>,0[,],0;,0#,=,!^F
+ 
++let b:undo_indent = 'setl ai< inde< indk<'
++
+ " Only define the function once.
+ if exists("*GetGitconfigIndent")
+   finish
+diff -Naur vim73.orig/runtime/indent/gitolite.vim vim73/runtime/indent/gitolite.vim
+--- vim73.orig/runtime/indent/gitolite.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/gitolite.vim	2013-06-07 17:07:13.918968932 +0000
+@@ -0,0 +1,45 @@
++" Vim indent file
++" Language:	gitolite configuration
++" URL:		https://github.com/tmatilai/gitolite.vim
++" Maintainer:	Teemu Matilainen <teemu.matilainen@iki.fi>
++" Last Change:	2011-12-24
++
++if exists("b:did_indent")
++  finish
++endif
++let b:did_indent = 1
++
++setlocal autoindent
++setlocal indentexpr=GetGitoliteIndent()
++setlocal indentkeys=o,O,*<Return>,!^F,=repo,\",=
++
++" Only define the function once.
++if exists("*GetGitoliteIndent")
++  finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++function! GetGitoliteIndent()
++  let prevln = prevnonblank(v:lnum-1)
++  let pline = getline(prevln)
++  let cline = getline(v:lnum)
++
++  if cline =~ '^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\|-\)[ \t=]'
++    return &sw
++  elseif cline =~ '^\s*config\s'
++    return &sw
++  elseif pline =~ '^\s*repo\s' && cline =~ '^\s*\(#.*\)\?$'
++    return &sw
++  elseif cline =~ '^\s*#'
++    return indent(prevln)
++  elseif cline =~ '^\s*$'
++    return -1
++  else
++    return 0
++  endif
++endfunction
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/indent/haml.vim vim73/runtime/indent/haml.vim
+--- vim73.orig/runtime/indent/haml.vim	2010-07-27 19:30:13.000000000 +0000
++++ vim73/runtime/indent/haml.vim	2013-06-07 17:07:13.925635579 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	Haml
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists("b:did_indent")
+   finish
+@@ -23,7 +23,7 @@
+ let s:tag = '\%([%.#][[:alnum:]_-]\+\|'.s:attributes.'\)*[<>]*'
+ 
+ if !exists('g:haml_self_closing_tags')
+-  let g:haml_self_closing_tags = 'meta|link|img|hr|br'
++  let g:haml_self_closing_tags = 'base|link|meta|br|hr|img|input'
+ endif
+ 
+ function! GetHamlIndent()
+diff -Naur vim73.orig/runtime/indent/idlang.vim vim73/runtime/indent/idlang.vim
+--- vim73.orig/runtime/indent/idlang.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/idlang.vim	2013-06-07 17:07:13.978968760 +0000
+@@ -1,6 +1,6 @@
+ " IDL (Interactive Data Language) indent file.
+ " Language: IDL (ft=idlang)
+-" Last change:	2002 Sep 23
++" Last change:	2012 May 18
+ " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+ 
+ " Only load this indent file when no other was loaded.
+@@ -9,8 +9,7 @@
+ endif
+ let b:did_indent = 1
+ 
+-setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,
+-		    \0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
++setlocal indentkeys=o,O,0=endif,0=ENDIF,0=endelse,0=ENDELSE,0=endwhile,0=ENDWHILE,0=endfor,0=ENDFOR,0=endrep,0=ENDREP
+ 
+ setlocal indentexpr=GetIdlangIndent(v:lnum)
+ 
+diff -Naur vim73.orig/runtime/indent/java.vim vim73/runtime/indent/java.vim
+--- vim73.orig/runtime/indent/java.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/java.vim	2013-06-07 17:07:14.005635351 +0000
+@@ -1,7 +1,12 @@
+ " Vim indent file
+ " Language:	Java
+-" Maintainer:	Toby Allsopp <toby.allsopp@peace.com> (resigned)
+-" Last Change:	2005 Mar 28
++" Previous Maintainer: Toby Allsopp <toby.allsopp@peace.com>
++" Current Maintainer: Hong Xu <xuhdev@gmail.com>
++" Last Change:	2012 May 18
++" Version: 1.0
++" License: Same as Vim.
++" Copyright (c) 2012 Hong Xu
++" Before 2012, this file is maintained by Toby Allsopp.
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -24,6 +29,8 @@
+ if exists("*GetJavaIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ function! SkipJavaBlanksAndComments(startline)
+   let lnum = a:startline
+@@ -60,6 +67,13 @@
+ 
+   " find start of previous line, in case it was a continuation line
+   let lnum = SkipJavaBlanksAndComments(v:lnum - 1)
++
++  " If the previous line starts with '@', we should have the same indent as
++  " the previous one
++  if getline(lnum) =~ '^\s*@\S\+\s*$'
++    return indent(lnum)
++  endif
++
+   let prev = lnum
+   while prev > 1
+     let next_prev = SkipJavaBlanksAndComments(prev - 1)
+@@ -127,4 +141,7 @@
+   return theIndent
+ endfunction
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vi: sw=2 et
+diff -Naur vim73.orig/runtime/indent/liquid.vim vim73/runtime/indent/liquid.vim
+--- vim73.orig/runtime/indent/liquid.vim	2010-05-21 09:56:11.000000000 +0000
++++ vim73/runtime/indent/liquid.vim	2013-06-07 17:07:14.068968503 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:     Liquid
+ " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists('b:did_indent')
+   finish
+@@ -54,9 +54,8 @@
+   let line  = substitute(line,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
+   let line .= matchstr(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+')
+   let cline = substitute(cline,'\C^\%(\s*{%\s*end\w*\s*%}\)\+','','')
+-  let ind += &sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|tablerow\|capture\)\>')
++  let ind += &sw * s:count(line,'{%\s*\%(if\|elsif\|else\|unless\|ifchanged\|case\|when\|for\|empty\|tablerow\|capture\)\>')
+   let ind -= &sw * s:count(line,'{%\s*end\%(if\|unless\|ifchanged\|case\|for\|tablerow\|capture\)\>')
+-  let ind += &sw * s:count(line,'{%\s*\%(elsif\|else\|when\|empty\)\>')
+   let ind -= &sw * s:count(cline,'{%\s*\%(elsif\|else\|when\|empty\)\>')
+   let ind -= &sw * s:count(cline,'{%\s*end\w*$')
+   return ind
+diff -Naur vim73.orig/runtime/indent/lisp.vim vim73/runtime/indent/lisp.vim
+--- vim73.orig/runtime/indent/lisp.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/lisp.vim	2013-06-07 17:07:14.075635151 +0000
+@@ -1,8 +1,8 @@
+ " Vim indent file
+ " Language:	Lisp
+ " Maintainer:    Sergey Khorev <sergey.khorev@gmail.com>
+-" URL:		 http://iamphet.nm.ru/vim
+-" Last Change:	2005 May 19
++" URL:		 http://sites.google.com/site/khorser/opensource/vim
++" Last Change:	2012 Jan 10
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+diff -Naur vim73.orig/runtime/indent/mp.vim vim73/runtime/indent/mp.vim
+--- vim73.orig/runtime/indent/mp.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/mp.vim	2013-06-07 17:07:14.162301570 +0000
+@@ -1,7 +1,7 @@
+ " MetaPost indent file
+ " Language:	MetaPost
+ " Maintainer:	Eugene Minkovskii <emin@mccme.ru>
+-" Last Change:	2003 Nov 21
++" Last Change:	2012 May 18
+ " Version: 0.1
+ " ==========================================================================
+ 
+@@ -56,6 +56,8 @@
+ if exists("*GetMetaPostIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Auxiliary Definitions: {{{1
+ function! MetaNextNonblankNoncomment(pos)
+@@ -203,4 +205,7 @@
+ endfunction
+ "
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:sw=2:fdm=marker
+diff -Naur vim73.orig/runtime/indent/ocaml.vim vim73/runtime/indent/ocaml.vim
+--- vim73.orig/runtime/indent/ocaml.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/ocaml.vim	2013-06-07 17:07:14.202301456 +0000
+@@ -1,12 +1,12 @@
+ " Vim indent file
+ " Language:     OCaml
+-" Maintainers:	Jean-Francois Yuen   <jfyuen@happycoders.org>
+-"		Mike Leary	     <leary@nwlink.com>
+-"		Markus Mottl	     <markus.mottl@gmail.com>
+-" URL:		http://www.ocaml.info/vim/indent/ocaml.vim
+-" Last Change:  2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
+-"		2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
+-"		2005 Apr 11 - Fixed an indentation bug concerning "let" (MM)
++" Maintainers:  Jean-Francois Yuen   <jfyuen@happycoders.org>
++"               Mike Leary           <leary@nwlink.com>
++"               Markus Mottl         <markus.mottl@gmail.com>
++" URL:          http://www.ocaml.info/vim/indent/ocaml.vim
++" Last Change:  2010 Sep 04 - Added an indentation improvement by Mark Weber
++"               2005 Jun 25 - Fixed multiple bugs due to 'else\nreturn ind' working
++"               2005 May 09 - Added an option to not indent OCaml-indents specially (MM)
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -44,7 +44,7 @@
+ let s:type = '^\s*\%(class\|let\|type\)\>.*='
+ 
+ " Skipping pattern, for comments
+-function s:GetLineWithoutFullComment(lnum)
++function! s:GetLineWithoutFullComment(lnum)
+  let lnum = prevnonblank(a:lnum - 1)
+  let lline = substitute(getline(lnum), '(\*.*\*)\s*$', '', '')
+  while lline =~ '^\s*$' && lnum > 0
+@@ -55,7 +55,7 @@
+ endfunction
+ 
+ " Indent for ';;' to match multiple 'let'
+-function s:GetInd(lnum, pat, lim)
++function! s:GetInd(lnum, pat, lim)
+  let llet = search(a:pat, 'bW')
+  let old = indent(a:lnum)
+  while llet > 0
+@@ -70,18 +70,18 @@
+ endfunction
+ 
+ " Indent pairs
+-function s:FindPair(pstart, pmid, pend)
++function! s:FindPair(pstart, pmid, pend)
+  call search(a:pend, 'bW')
+  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment"'))
+ endfunction
+ 
+ " Indent 'let'
+-function s:FindLet(pstart, pmid, pend)
++function! s:FindLet(pstart, pmid, pend)
+  call search(a:pend, 'bW')
+  return indent(searchpair(a:pstart, a:pmid, a:pend, 'bWn', 'synIDattr(synID(line("."), col("."), 0), "name") =~? "string\\|comment" || getline(".") =~ "^\\s*let\\>.*=.*\\<in\\s*$" || getline(prevnonblank(".") - 1) =~ s:beflet'))
+ endfunction
+ 
+-function GetOCamlIndent()
++function! GetOCamlIndent()
+  " Find a non-commented line above the current line.
+  let lnum = s:GetLineWithoutFullComment(v:lnum)
+ 
+@@ -239,6 +239,20 @@
+  elseif lline =~ '^\s*(\*' && line =~ '^\s*\*'
+    let ind = ind + 1
+ 
++ else
++ " Don't change indentation of this line
++ " for new lines (indent==0) use indentation of previous line
++
++ " This is for preventing removing indentation of these args:
++ "   let f x =
++ "     let y = x + 1 in
++ "     Printf.printf
++ "       "o"           << here
++ "       "oeuth"       << don't touch indentation
++
++   let i = indent(v:lnum)
++   return i == 0 ? ind : i
++
+  endif
+ 
+  " Subtract a 'shiftwidth' after lines matching 'match ... with parser':
+diff -Naur vim73.orig/runtime/indent/occam.vim vim73/runtime/indent/occam.vim
+--- vim73.orig/runtime/indent/occam.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/occam.vim	2013-06-07 17:07:14.215634751 +0000
+@@ -20,6 +20,8 @@
+ if exists("*GetOccamIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ "{{{  Indent definitions
+ " Define carriage return indent
+@@ -180,3 +182,6 @@
+ 
+ endfunction
+ "}}}
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/indent/pascal.vim vim73/runtime/indent/pascal.vim
+--- vim73.orig/runtime/indent/pascal.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/pascal.vim	2013-06-07 17:07:14.222301399 +0000
+@@ -2,7 +2,11 @@
+ " Language:    Pascal
+ " Maintainer:  Neil Carter <n.carter@swansea.ac.uk>
+ " Created:     2004 Jul 13
+-" Last Change: 2005 Jul 05
++" Last Change: 2011 Apr 01
++"
++" This is version 2.0, a complete rewrite.
++"
++" For further documentation, see http://psy.swansea.ac.uk/staff/carter/vim/
+ 
+ 
+ if exists("b:did_indent")
+@@ -38,7 +42,15 @@
+ endfunction
+ 
+ 
++function! s:PurifyCode( line_num )
++	" Strip any trailing comments and whitespace
++	let pureline = 'TODO'
++	return pureline
++endfunction
++
++
+ function! GetPascalIndent( line_num )
++
+ 	" Line 0 always goes at column 0
+ 	if a:line_num == 0
+ 		return 0
+@@ -46,128 +58,171 @@
+ 
+ 	let this_codeline = getline( a:line_num )
+ 
+-	" If in the middle of a three-part comment
++
++	" SAME INDENT
++
++	" Middle of a three-part comment
+ 	if this_codeline =~ '^\s*\*'
+-		return indent( a:line_num )
++		return indent( a:line_num - 1)
+ 	endif
+ 
+-	let prev_codeline_num = s:GetPrevNonCommentLineNum( a:line_num )
+-	let prev_codeline = getline( prev_codeline_num )
+-	let indnt = indent( prev_codeline_num )
+ 
+-	" Compiler directives should always go in column zero.
+-	if this_codeline =~ '^\s*{\(\$IFDEF\|\$ELSE\|\$ENDIF\)'
++	" COLUMN 1 ALWAYS
++
++	" Last line of the program
++	if this_codeline =~ '^\s*end\.'
+ 		return 0
+ 	endif
+ 
+-	" These items have nothing before or after (not even a comment), and
+-	" go on column 0. Make sure that the ^\s* is followed by \( to make
+-	" ORs work properly, and not include the start of line (this must
+-	" always appear).
+-	" The bracketed expression with the underline is a routine
+-	" separator. This is one case where we do indent comment lines.
+-	if this_codeline =~ '^\s*\((\*\ _\+\ \*)\|\<\(const\|var\)\>\)$'
++	" Compiler directives, allowing "(*" and "{"
++	"if this_codeline =~ '^\s*\({\|(\*\)$\(IFDEF\|IFNDEF\|ELSE\|ENDIF\)'
++	if this_codeline =~ '^\s*\({\|(\*\)\$'
+ 		return 0
+ 	endif
+ 
+-	" These items may have text after them, and go on column 0 (in most
+-	" cases). The problem is that "function" and "procedure" keywords
+-	" should be indented if within a class declaration.
+-	if this_codeline =~ '^\s*\<\(program\|type\|uses\|procedure\|function\)\>'
++	" section headers
++	if this_codeline =~ '^\s*\(program\|procedure\|function\|type\)\>'
+ 		return 0
+ 	endif
+ 
+-	" BEGIN
+-	" If the begin does not come after "if", "for", or "else", then it
+-	" goes in column 0
+-	if this_codeline =~ '^\s*begin\>' && prev_codeline !~ '^\s*\<\(if\|for\|else\)\>'
++	" Subroutine separators, lines ending with "const" or "var"
++	if this_codeline =~ '^\s*\((\*\ _\+\ \*)\|\(const\|var\)\)$'
+ 		return 0
+ 	endif
+ 
+-	" These keywords are indented once only.
+-	if this_codeline =~ '^\s*\<\(private\)\>'
+-		return &shiftwidth
+-	endif
+ 
+-	" If the PREVIOUS LINE contained these items, the current line is
+-	" always indented once.
+-	if prev_codeline =~ '^\s*\<\(type\|uses\)\>'
+-		return &shiftwidth
+-	endif
++	" OTHERWISE, WE NEED TO LOOK FURTHER BACK...
+ 
+-	" These keywords are indented once only. Possibly surrounded by
+-	" other chars.
+-	if this_codeline =~ '^.\+\<\(object\|record\)\>'
+-		return &shiftwidth
++	let prev_codeline_num = s:GetPrevNonCommentLineNum( a:line_num )
++	let prev_codeline = getline( prev_codeline_num )
++	let indnt = indent( prev_codeline_num )
++
++
++	" INCREASE INDENT
++
++	" If the PREVIOUS LINE ended in these items, always indent
++	if prev_codeline =~ '\<\(type\|const\|var\)$'
++		return indnt + &shiftwidth
+ 	endif
+ 
+-	" If the previous line was indenting...
+-	if prev_codeline =~ '^\s*\<\(for\|if\|case\|else\|end\ else\)\>'
+-		" then indent.
+-		let indnt = indnt + &shiftwidth
+-		" BUT... if this is the start of a multistatement block then we
+-		" need to align the begin with the previous line.
+-		if this_codeline =~ '^\s*begin\>'
+-			return indnt - &shiftwidth
++	if prev_codeline =~ '\<repeat$'
++		if this_codeline !~ '^\s*until\>'
++			return indnt + &shiftwidth
++		else
++			return indnt
+ 		endif
++	endif
+ 
+-		" We also need to keep the indentation level constant if the
+-		" whole if-then statement was on one line.
+-		if prev_codeline =~ '\<then\>.\+'
+-			let indnt = indnt - &shiftwidth
++	if prev_codeline =~ '\<\(begin\|record\)$'
++		if this_codeline !~ '^\s*end\>'
++			return indnt + &shiftwidth
++		else
++			return indnt
+ 		endif
+ 	endif
+ 
+-	" PREVIOUS-LINE BEGIN
+-	" If the previous line was an indenting keyword then indent once...
+-	if prev_codeline =~ '^\s*\<\(const\|var\|begin\|repeat\|private\)\>'
+-		" But only if this is another var in a list.
+-		if this_codeline !~ '^\s*var\>'
++	" If the PREVIOUS LINE ended with these items, indent if not
++	" followed by "begin"
++	if prev_codeline =~ '\<\(\|else\|then\|do\)$' || prev_codeline =~ ':$'
++		if this_codeline !~ '^\s*begin\>'
+ 			return indnt + &shiftwidth
++		else
++			" If it does start with "begin" then keep the same indent
++			"return indnt + &shiftwidth
++			return indnt
+ 		endif
+ 	endif
+ 
+-	" PREVIOUS-LINE BEGIN
+-	" Indent code after a case statement begin
+-	if prev_codeline =~ '\:\ begin\>'
++	" Inside a parameter list (i.e. a "(" without a ")"). ???? Considers
++	" only the line before the current one. TODO: Get it working for
++	" parameter lists longer than two lines.
++	if prev_codeline =~ '([^)]\+$'
+ 		return indnt + &shiftwidth
+ 	endif
+ 
+-	" These words may have text before them on the line (hence the .*)
+-	" but are followed by nothing. Always indent once only.
+-	if prev_codeline =~ '^\(.*\|\s*\)\<\(object\|record\)\>$'
+-		return indnt + &shiftwidth
++
++	" DECREASE INDENT
++
++	" Lines starting with "else", but not following line ending with
++	" "end".
++	if this_codeline =~ '^\s*else\>' && prev_codeline !~ '\<end$'
++		return indnt - &shiftwidth
+ 	endif
+ 
+-	" If we just closed a bracket that started on a previous line, then
+-	" unindent. But don't return yet -- we need to check for further
+-	" unindentation (for end/until/else)
+-	if prev_codeline =~ '^[^(]*[^*])'
+-		let indnt = indnt - &shiftwidth
++	" Lines after a single-statement branch/loop.
++	" Two lines before ended in "then", "else", or "do"
++	" Previous line didn't end in "begin"
++	let prev2_codeline_num = s:GetPrevNonCommentLineNum( prev_codeline_num )
++	let prev2_codeline = getline( prev2_codeline_num )
++	if prev2_codeline =~ '\<\(then\|else\|do\)$' && prev_codeline !~ '\<begin$'
++		" If the next code line after a single statement branch/loop
++		" starts with "end", "except" or "finally", we need an
++		" additional unindentation.
++		if this_codeline =~ '^\s*\(end;\|except\|finally\|\)$'
++			" Note that we don't return from here.
++			return indnt - &shiftwidth - &shiftwidth
++		endif
++		return indnt - &shiftwidth
+ 	endif
+ 
+-	" At the end of a block, we have to unindent both the current line
+-	" (the "end" for instance) and the newly-created line.
+-	if this_codeline =~ '^\s*\<\(end\|until\|else\)\>'
++	" Lines starting with "until" or "end". This rule must be overridden
++	" by the one for "end" after a single-statement branch/loop. In
++	" other words that rule should come before this one.
++	if this_codeline =~ '^\s*\(end\|until\)\>'
+ 		return indnt - &shiftwidth
+ 	endif
+ 
+-	" If we have opened a bracket and it continues over one line,
+-	" then indent once.
+-	"
+-	" RE = an opening bracket followed by any amount of anything other
+-	" than a closing bracket and then the end-of-line.
+-	"
+-	" If we didn't include the end of line, this RE would match even
+-	" closed brackets, since it would match everything up to the closing
+-	" bracket.
+-	"
+-	" This test isn't clever enough to handle brackets inside strings or
+-	" comments.
+-	if prev_codeline =~ '([^*]\=[^)]*$'
++
++	" MISCELLANEOUS THINGS TO CATCH
++
++	" Most "begin"s will have been handled by now. Any remaining
++	" "begin"s on their own line should go in column 1.
++	if this_codeline =~ '^\s*begin$'
++		return 0
++	endif
++
++
++" ____________________________________________________________________
++" Object/Borland Pascal/Delphi Extensions
++"
++" Note that extended-pascal is handled here, unless it is simpler to
++" handle them in the standard-pascal section above.
++
++
++	" COLUMN 1 ALWAYS
++
++	" section headers at start of line.
++	if this_codeline =~ '^\s*\(interface\|implementation\|uses\|unit\)\>'
++		return 0
++	endif
++
++
++	" INDENT ONCE
++
++	" If the PREVIOUS LINE ended in these items, always indent.
++	if prev_codeline =~ '^\s*\(unit\|uses\|try\|except\|finally\|private\|protected\|public\|published\)$'
+ 		return indnt + &shiftwidth
+ 	endif
+ 
++	" ???? Indent "procedure" and "functions" if they appear within an
++	" class/object definition. But that means overriding standard-pascal
++	" rule where these words always go in column 1.
++
++
++	" UNINDENT ONCE
++
++	if this_codeline =~ '^\s*\(except\|finally\)$'
++		return indnt - &shiftwidth
++	endif
++
++	if this_codeline =~ '^\s*\(private\|protected\|public\|published\)$'
++		return indnt - &shiftwidth
++	endif
++
++
++" ____________________________________________________________________
++
++	" If nothing changed, return same indent.
+ 	return indnt
+ endfunction
+ 
+diff -Naur vim73.orig/runtime/indent/perl.vim vim73/runtime/indent/perl.vim
+--- vim73.orig/runtime/indent/perl.vim	2010-08-09 03:51:45.000000000 +0000
++++ vim73/runtime/indent/perl.vim	2013-06-07 17:07:14.238968018 +0000
+@@ -1,8 +1,9 @@
+ " Vim indent file
+-" Language:     Perl 5
+-" Author:       Andy Lester <andy@petdance.com>
+-" URL:          http://github.com/petdance/vim-perl/tree/master
+-" Last Change:  June 3, 2009
++" Language:      Perl 5
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   May 12, 2013
+ 
+ " Suggestions and improvements by :
+ "   Aaron J. Sherman (use syntax for hints)
+@@ -11,9 +12,9 @@
+ " TODO things that are not or not properly indented (yet) :
+ " - Continued statements
+ "     print "foo",
+-"	"bar";
++"       "bar";
+ "     print "foo"
+-"	if bar();
++"       if bar();
+ " - Multiline regular expressions (m//x)
+ " (The following probably needs modifying the perl syntax file)
+ " - qw() lists
+@@ -34,15 +35,10 @@
+     setlocal indentkeys+=0=EO
+ endif
+ 
+-" Only define the function once.
+-if exists("*GetPerlIndent")
+-    finish
+-endif
+-
+ let s:cpo_save = &cpo
+ set cpo-=C
+ 
+-function GetPerlIndent()
++function! GetPerlIndent()
+ 
+     " Get the line to be indented
+     let cline = getline(v:lnum)
+@@ -52,7 +48,7 @@
+         return 0
+     endif
+ 
+-    " Don't reindent coments on first column
++    " Don't reindent comments on first column
+     if cline =~ '^#.'
+         return 0
+     endif
+@@ -124,7 +120,12 @@
+     " Indent blocks enclosed by {}, (), or []
+     if b:indent_use_syntax
+         " Find a real opening brace
+-        let bracepos = match(line, '[(){}\[\]]', matchend(line, '^\s*[)}\]]'))
++        " NOTE: Unlike Perl character classes, we do NOT need to escape the
++        " closing brackets with a backslash.  Doing so just puts a backslash
++        " in the character class and causes sorrow.  Instead, put the closing
++        " bracket as the first character in the class.
++        let braceclass = '[][(){}]'
++        let bracepos = match(line, braceclass, matchend(line, '^\s*[])}]'))
+         while bracepos != -1
+             let synid = synIDattr(synID(lnum, bracepos + 1, 0), "name")
+             " If the brace is highlighted in one of those groups, indent it.
+@@ -133,7 +134,7 @@
+                         \ || synid == "perlMatchStartEnd"
+                         \ || synid == "perlHereDoc"
+                         \ || synid =~ "^perlFiledescStatement"
+-                        \ || synid =~ '^perl\(Sub\|Block\)Fold'
++                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
+                 let brace = strpart(line, bracepos, 1)
+                 if brace == '(' || brace == '{' || brace == '['
+                     let ind = ind + &sw
+@@ -141,22 +142,22 @@
+                     let ind = ind - &sw
+                 endif
+             endif
+-            let bracepos = match(line, '[(){}\[\]]', bracepos + 1)
++            let bracepos = match(line, braceclass, bracepos + 1)
+         endwhile
+-        let bracepos = matchend(cline, '^\s*[)}\]]')
++        let bracepos = matchend(cline, '^\s*[])}]')
+         if bracepos != -1
+             let synid = synIDattr(synID(v:lnum, bracepos, 0), "name")
+             if synid == ""
+                         \ || synid == "perlMatchStartEnd"
+-                        \ || synid =~ '^perl\(Sub\|Block\)Fold'
++                        \ || synid =~ '^perl\(Sub\|Block\|Package\)Fold'
+                 let ind = ind - &sw
+             endif
+         endif
+     else
+-        if line =~ '[{\[(]\s*\(#[^)}\]]*\)\=$'
++        if line =~ '[{[(]\s*\(#[^])}]*\)\=$'
+             let ind = ind + &sw
+         endif
+-        if cline =~ '^\s*[)}\]]'
++        if cline =~ '^\s*[])}]'
+             let ind = ind - &sw
+         endif
+     endif
+diff -Naur vim73.orig/runtime/indent/perl6.vim vim73/runtime/indent/perl6.vim
+--- vim73.orig/runtime/indent/perl6.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/perl6.vim	2013-06-07 17:07:14.245634666 +0000
+@@ -1,12 +1,13 @@
+ " Vim indent file
+-" Language:     Perl 6
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" URL:          http://github.com/petdance/vim-perl/tree/master
+-" Last Change:  2009-07-04
+-" Contributors: Andy Lester <andy@petdance.com>
+-"               Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
++" Language:      Perl 6
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2013-05-12
++" Contributors:  Andy Lester <andy@petdance.com>
++"                Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
+ "
+-" Adapted from Perl indent file by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
++" Adapted from indent/perl.vim by Rafael Garcia-Suarez <rgarciasuarez@free.fr>
+ 
+ " Suggestions and improvements by :
+ "   Aaron J. Sherman (use syntax for hints)
+@@ -46,15 +47,10 @@
+     setlocal indentkeys+=0=EO
+ endif
+ 
+-" Only define the function once.
+-if exists("*GetPerl6Indent")
+-    finish
+-endif
+-
+ let s:cpo_save = &cpo
+ set cpo-=C
+ 
+-function GetPerl6Indent()
++function! GetPerl6Indent()
+ 
+     " Get the line to be indented
+     let cline = getline(v:lnum)
+diff -Naur vim73.orig/runtime/indent/php.vim vim73/runtime/indent/php.vim
+--- vim73.orig/runtime/indent/php.vim	2010-07-30 20:32:16.000000000 +0000
++++ vim73/runtime/indent/php.vim	2013-06-07 17:07:14.265634609 +0000
+@@ -2,21 +2,23 @@
+ " Language:	PHP
+ " Author:	John Wellesz <John.wellesz (AT) teaser (DOT) fr>
+ " URL:		http://www.2072productions.com/vim/indent/php.vim
+-" Last Change:	2010 Jully 26th
+-" Newsletter:	http://www.2072productions.com/?to=php-indent-for-vim-newsletter.php
+-" Version:	1.33
++" Home:		https://github.com/2072/PHP-Indenting-for-VIm
++" Last Change:	2013 May 10th
++" Version:	1.37
+ "
+ "
+-"  If you find a bug, please report it on GitHub:
+-"	http://github.com/2072/PHP-Indenting-for-VIm/issues
+-"  with an example of code that breaks the algorithm.
++"	Type :help php-indent for available options
+ "
++"	A fully commented version of this file is available on github
+ "
+-"	Thanks a lot for using this script.
+ "
++"  If you find a bug, please open a ticket on github.org
++"  ( https://github.com/2072/PHP-Indenting-for-VIm/issues ) with an example of
++"  code that breaks the algorithm.
+ "
++
+ " NOTE: This script must be used with PHP syntax ON and with the php syntax
+-"	script by Lutz Eymers (http://www.ipdienste.net/data/php.vim ) or with the
++"	script by Lutz Eymers (http://www.isp.de/data/php.vim ) or with the
+ "	script by Peter Hodge (http://www.vim.org/scripts/script.php?script_id=1571 )
+ "	the later is bunbdled by default with Vim 7.
+ "
+@@ -26,7 +28,7 @@
+ "	script will automatically put HereDoc end identifiers at col 1 if
+ "	they are followed by a ';').
+ "
+-"
++
+ " NOTE: If you are editing files in Unix file format and that (by accident)
+ "	there are '\r' before new lines, this script won't be able to proceed
+ "	correctly and will make many mistakes because it won't be able to match
+@@ -38,8 +40,6 @@
+ "	or simply 'let' the option PHP_removeCRwhenUnix to 1 and the script will
+ "	silently remove them when VIM load this script (at each bufread).
+ "
+-" Options: See :help php-indent for available options.
+-
+ 
+ if exists("b:did_indent")
+     finish
+@@ -50,12 +50,19 @@
+ let php_sync_method = 0
+ 
+ 
++
+ if exists("PHP_default_indenting")
+     let b:PHP_default_indenting = PHP_default_indenting * &sw
+ else
+     let b:PHP_default_indenting = 0
+ endif
+ 
++if exists("PHP_outdentSLComments")
++    let b:PHP_outdentSLComments = PHP_outdentSLComments * &sw
++else
++    let b:PHP_outdentSLComments = 0
++endif
++
+ if exists("PHP_BracesAtCodeLevel")
+     let b:PHP_BracesAtCodeLevel = PHP_BracesAtCodeLevel
+ else
+@@ -116,13 +123,20 @@
+ 
+ if exists("*GetPhpIndent")
+     call ResetPhpOptions()
+-    finish
++    finish " XXX -- comment this line for easy dev
+ endif
+ 
+ let s:endline= '\s*\%(//.*\|#.*\|/\*.*\*/\s*\)\=$'
+ let s:PHP_startindenttag = '<?\%(.*?>\)\@!\|<script[^>]*>\%(.*<\/script>\)\@!'
+ 
+ 
++function! DebugPrintReturn(scriptLine)
++
++    echo "debug:" . a:scriptLine
++    call getchar()
++
++endfunction
++
+ function! GetLastRealCodeLNum(startline) " {{{
+ 
+     let lnum = a:startline
+@@ -189,8 +203,6 @@
+ 	let b:InPHPcode_and_script = 0
+     endif
+ 
+-
+-
+     return lnum
+ endfunction " }}}
+ 
+@@ -198,11 +210,11 @@
+ 
+     let line = getline(".")
+ 
+-   if line =~ '\%(".*\)\@<=/\*\%(.*"\)\@=' || line =~ '\%(\%(//\|#\).*\)\@<=/\*'
+-       return 1
+-   else
+-       return 0
+-   endif
++    if line =~ "\\([\"']\\).*/\\*.*\\1" || line =~ '\%(//\|#\).*/\*'
++        return 1
++    else
++        return 0
++    endif
+ endfun
+ 
+ function! Skippmatch()	" {{{
+@@ -314,7 +326,7 @@
+     endif
+ endfunction " }}}
+ 
+-let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|else\)'
++let s:notPhpHereDoc = '\%(break\|return\|continue\|exit\|die\|else\)'
+ let s:blockstart = '\%(\%(\%(}\s*\)\=else\%(\s\+\)\=\)\=if\>\|else\>\|while\>\|switch\>\|case\>\|default\>\|for\%(each\)\=\>\|declare\>\|class\>\|interface\>\|abstract\>\|try\>\|catch\>\)'
+ 
+ let s:autoresetoptions = 0
+@@ -361,14 +373,12 @@
+     if !b:PHP_indentinghuge && b:PHP_lastindented > b:PHP_indentbeforelast
+ 	if b:PHP_indentbeforelast
+ 	    let b:PHP_indentinghuge = 1
+-	    echom 'Large indenting detected, speed optimizations engaged (v1.33)'
+ 	endif
+ 	let b:PHP_indentbeforelast = b:PHP_lastindented
+     endif
+ 
+     if b:InPHPcode_checked && prevnonblank(v:lnum - 1) != b:PHP_lastindented
+ 	if b:PHP_indentinghuge
+-	    echom 'Large indenting deactivated'
+ 	    let b:PHP_indentinghuge = 0
+ 	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
+ 	endif
+@@ -425,7 +435,7 @@
+ 	else
+ 	    let b:InPHPcode = 0
+ 	    let b:UserIsTypingComment = 0
+-	    let b:InPHPcode_tofind = '<?\%(.*?>\)\@!\|<script.*>'
++	    let b:InPHPcode_tofind = s:PHP_startindenttag
+ 	endif
+     endif "!b:InPHPcode_checked }}}
+ 
+@@ -493,7 +503,9 @@
+     endif
+ 
+     " Indent successive // or # comment the same way the first is {{{
++    let addSpecial = 0
+     if cline =~ '^\s*\%(//\|#\|/\*.*\*/\s*$\)'
++	let addSpecial = b:PHP_outdentSLComments
+ 	if b:PHP_LastIndentedWasComment == 1
+ 	    return indent(real_PHP_lastindented)
+ 	endif
+@@ -550,7 +562,7 @@
+     endif
+ 
+     if lnum == 0
+-	return b:PHP_default_indenting
++	return b:PHP_default_indenting + addSpecial
+     endif
+ 
+ 
+@@ -577,17 +589,17 @@
+     endif
+ 
+ 
+-    if last_line =~ '[;}]'.endline && last_line !~ '^)' && last_line !~# s:defaultORcase
++    if last_line =~ '[;}]'.endline && last_line !~ '^[)\]]' && last_line !~# s:defaultORcase
+ 	if ind==b:PHP_default_indenting
+-	    return b:PHP_default_indenting
++	    return b:PHP_default_indenting + addSpecial
+ 	elseif b:PHP_indentinghuge && ind==b:PHP_CurrentIndentLevel && cline !~# '^\s*\%(else\|\%(case\|default\).*:\|[})];\=\)' && last_line !~# '^\s*\%(\%(}\s*\)\=else\)' && getline(GetLastRealCodeLNum(lnum - 1))=~';'.endline
+-	    return b:PHP_CurrentIndentLevel
++	    return b:PHP_CurrentIndentLevel + addSpecial
+ 	endif
+     endif
+ 
+     let LastLineClosed = 0
+ 
+-    let terminated = '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline
++    let terminated = '\%(;\%(\s*\%(?>\|}\)\)\=\|<<<''\=\a\w*''\=$\|^\s*}\)'.endline
+ 
+     let unstated   = '\%(^\s*'.s:blockstart.'.*)\|\%(//.*\)\@<!\<e'.'lse\>\)'.endline
+ 
+@@ -618,19 +630,23 @@
+ 	endwhile
+ 
+     elseif last_line =~# unstated && cline !~ '^\s*);\='.endline
+-	let ind = ind + &sw
+-	return ind
++	let ind = ind + &sw " we indent one level further when the preceding line is not stated
++	return ind + addSpecial
+ 
+-    elseif (ind != b:PHP_default_indenting || last_line =~ '^)' ) && last_line =~ terminated
++    elseif (ind != b:PHP_default_indenting || last_line =~ '^[)\]]' ) && last_line =~ terminated " Added || last_line =~ '^)' on 2007-12-30 (array indenting problem broke other things)
+ 	let previous_line = last_line
+ 	let last_line_num = lnum
+ 	let LastLineClosed = 1
+ 
+ 	while 1
+-	    if previous_line =~ '^\s*}'
+-		let last_line_num = FindOpenBracket(last_line_num)
++	    if previous_line =~ '^\s*}\|;\s*}'.endline " XXX
++
++		call cursor(last_line_num, 1)
++		call search('}\|;\s*}'.endline, 'W')
++		let oldLastLine = last_line_num
++		let last_line_num = searchpair('{', '', '}', 'bW', 'Skippmatch()')
+ 
+-		if getline(last_line_num) =~ '^\s*{'
++		if oldLastLine == last_line_num || getline(last_line_num) =~ '^\s*{'
+ 		    let last_line_num = GetLastRealCodeLNum(last_line_num - 1)
+ 		endif
+ 
+@@ -674,7 +690,7 @@
+ 	    let ind = indent(last_match)
+ 	    let b:PHP_CurrentIndentLevel = b:PHP_default_indenting
+ 
+-	    return ind
++	    return ind + addSpecial
+ 	endif
+     endif
+ 
+@@ -693,7 +709,7 @@
+     if !LastLineClosed
+ 
+ 
+-	if last_line =~# '[{(]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline
++	if last_line =~# '[{(\[]'.endline || last_line =~? '\h\w*\s*(.*,$' && AntepenultimateLine !~ '[,(]'.endline
+ 
+ 	    if !b:PHP_BracesAtCodeLevel || last_line !~# '^\s*{'
+ 		let ind = ind + &sw
+@@ -702,7 +718,7 @@
+ 	    if b:PHP_BracesAtCodeLevel || b:PHP_vintage_case_default_indent == 1
+ 		let b:PHP_CurrentIndentLevel = ind
+ 
+-		return ind
++		return ind + addSpecial
+ 	    endif
+ 
+ 	elseif last_line =~ '\S\+\s*),'.endline
+@@ -712,22 +728,21 @@
+ 	    if openedparent != lnum
+ 		let ind = indent(openedparent)
+ 	    endif
+-	
++
+ 	elseif last_line =~ '^\s*'.s:blockstart
+ 	    let ind = ind + &sw
+ 
+ 
+-
+-	elseif AntepenultimateLine =~ '\%(;\%(\s*?>\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase
++	elseif AntepenultimateLine =~ '\%(;\%(\s*\%(?>\|}\)\)\=\|<<<''\=\a\w*''\=$\|^\s*}\|{\)'.endline . '\|' . s:defaultORcase
+ 	    let ind = ind + &sw
+ 	endif
+ 
+     endif
+ 
+-    if cline =~  '^\s*);\='
++    if cline =~  '^\s*[)\]];\='
+ 	let ind = ind - &sw
+     endif
+ 
+     let b:PHP_CurrentIndentLevel = ind
+-    return ind
++    return ind + addSpecial
+ endfunction
+diff -Naur vim73.orig/runtime/indent/python.vim vim73/runtime/indent/python.vim
+--- vim73.orig/runtime/indent/python.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/python.vim	2013-06-07 17:07:14.308967818 +0000
+@@ -2,7 +2,7 @@
+ " Language:		Python
+ " Maintainer:		Bram Moolenaar <Bram@vim.org>
+ " Original Author:	David Bustos <bustos@caltech.edu>
+-" Last Change:		2006 Jun 18
++" Last Change:		2012 May 01
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -21,6 +21,8 @@
+ if exists("*GetPythonIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Come here when loading the script the first time.
+ 
+@@ -190,4 +192,7 @@
+ 
+ endfunction
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:sw=2
+diff -Naur vim73.orig/runtime/indent/r.vim vim73/runtime/indent/r.vim
+--- vim73.orig/runtime/indent/r.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/r.vim	2013-06-07 17:07:14.312301142 +0000
+@@ -0,0 +1,492 @@
++" Vim indent file
++" Language:	R
++" Author:	Jakson Alves de Aquino <jalvesaq@gmail.com>
++" Last Change:	Fri Feb 15, 2013  08:11PM
++
++
++" Only load this indent file when no other was loaded.
++if exists("b:did_indent")
++    finish
++endif
++let b:did_indent = 1
++
++setlocal indentkeys=0{,0},:,!^F,o,O,e
++setlocal indentexpr=GetRIndent()
++
++" Only define the function once.
++if exists("*GetRIndent")
++    finish
++endif
++
++" Options to make the indentation more similar to Emacs/ESS:
++if !exists("g:r_indent_align_args")
++    let g:r_indent_align_args = 1
++endif
++if !exists("g:r_indent_ess_comments")
++    let g:r_indent_ess_comments = 0
++endif
++if !exists("g:r_indent_comment_column")
++    let g:r_indent_comment_column = 40
++endif
++if ! exists("g:r_indent_ess_compatible")
++    let g:r_indent_ess_compatible = 0
++endif
++
++function s:RDelete_quotes(line)
++    let i = 0
++    let j = 0
++    let line1 = ""
++    let llen = strlen(a:line)
++    while i < llen
++        if a:line[i] == '"'
++            let i += 1
++            let line1 = line1 . 's'
++            while !(a:line[i] == '"' && ((i > 1 && a:line[i-1] == '\' && a:line[i-2] == '\') || a:line[i-1] != '\')) && i < llen
++                let i += 1
++            endwhile
++            if a:line[i] == '"'
++                let i += 1
++            endif
++        else
++            if a:line[i] == "'"
++                let i += 1
++                let line1 = line1 . 's'
++                while !(a:line[i] == "'" && ((i > 1 && a:line[i-1] == '\' && a:line[i-2] == '\') || a:line[i-1] != '\')) && i < llen
++                    let i += 1
++                endwhile
++                if a:line[i] == "'"
++                    let i += 1
++                endif
++            else
++                if a:line[i] == "`"
++                    let i += 1
++                    let line1 = line1 . 's'
++                    while a:line[i] != "`" && i < llen
++                        let i += 1
++                    endwhile
++                    if a:line[i] == "`"
++                        let i += 1
++                    endif
++                endif
++            endif
++        endif
++        if i == llen
++            break
++        endif
++        let line1 = line1 . a:line[i]
++        let j += 1
++        let i += 1
++    endwhile
++    return line1
++endfunction
++
++" Convert foo(bar()) int foo()
++function s:RDelete_parens(line)
++    if s:Get_paren_balance(a:line, "(", ")") != 0
++        return a:line
++    endif
++    let i = 0
++    let j = 0
++    let line1 = ""
++    let llen = strlen(a:line)
++    while i < llen
++        let line1 = line1 . a:line[i]
++        if a:line[i] == '('
++            let nop = 1
++            while nop > 0 && i < llen
++                let i += 1
++                if a:line[i] == ')'
++                    let nop -= 1
++                else
++                    if a:line[i] == '('
++                        let nop += 1 
++                    endif
++                endif
++            endwhile
++            let line1 = line1 . a:line[i]
++        endif
++        let i += 1
++    endwhile
++    return line1
++endfunction
++
++function! s:Get_paren_balance(line, o, c)
++    let line2 = substitute(a:line, a:o, "", "g")
++    let openp = strlen(a:line) - strlen(line2)
++    let line3 = substitute(line2, a:c, "", "g")
++    let closep = strlen(line2) - strlen(line3)
++    return openp - closep
++endfunction
++
++function! s:Get_matching_brace(linenr, o, c, delbrace)
++    let line = SanitizeRLine(getline(a:linenr))
++    if a:delbrace == 1
++        let line = substitute(line, '{$', "", "")
++    endif
++    let pb = s:Get_paren_balance(line, a:o, a:c)
++    let i = a:linenr
++    while pb != 0 && i > 1
++        let i -= 1
++        let pb += s:Get_paren_balance(SanitizeRLine(getline(i)), a:o, a:c)
++    endwhile
++    return i
++endfunction
++
++" This function is buggy because there 'if's without 'else'
++" It must be rewritten relying more on indentation
++function! s:Get_matching_if(linenr, delif)
++"    let filenm = expand("%")
++"    call writefile([filenm], "/tmp/matching_if_" . a:linenr)
++    let line = SanitizeRLine(getline(a:linenr))
++    if a:delif
++        let line = substitute(line, "if", "", "g")
++    endif
++    let elsenr = 0
++    let i = a:linenr
++    let ifhere = 0
++    while i > 0
++        let line2 = substitute(line, '\<else\>', "xxx", "g")
++        let elsenr += strlen(line) - strlen(line2)
++        if line =~ '.*\s*if\s*()' || line =~ '.*\s*if\s*()'
++            let elsenr -= 1
++            if elsenr == 0
++                let ifhere = i
++                break
++            endif
++        endif
++        let i -= 1
++        let line = SanitizeRLine(getline(i))
++    endwhile
++    if ifhere
++        return ifhere
++    else
++        return a:linenr
++    endif
++endfunction
++
++function! s:Get_last_paren_idx(line, o, c, pb)
++    let blc = a:pb
++    let line = substitute(a:line, '\t', s:curtabstop, "g")
++    let theidx = -1
++    let llen = strlen(line)
++    let idx = 0
++    while idx < llen
++        if line[idx] == a:o
++            let blc -= 1
++            if blc == 0
++                let theidx = idx
++            endif
++        else
++            if line[idx] == a:c
++                let blc += 1
++            endif
++        endif
++        let idx += 1
++    endwhile
++    return theidx + 1
++endfunction
++
++" Get previous relevant line. Search back until getting a line that isn't
++" comment or blank
++function s:Get_prev_line(lineno)
++    let lnum = a:lineno - 1
++    let data = getline( lnum )
++    while lnum > 0 && (data =~ '^\s*#' || data =~ '^\s*$')
++        let lnum = lnum - 1
++        let data = getline( lnum )
++    endwhile
++    return lnum
++endfunction
++
++" This function is also used by r-plugin/common_global.vim
++" Delete from '#' to the end of the line, unless the '#' is inside a string.
++function SanitizeRLine(line)
++    let newline = s:RDelete_quotes(a:line)
++    let newline = s:RDelete_parens(newline)
++    let newline = substitute(newline, '#.*', "", "")
++    let newline = substitute(newline, '\s*$', "", "")
++    return newline
++endfunction
++
++function GetRIndent()
++
++    let clnum = line(".")    " current line
++
++    let cline = getline(clnum)
++    if cline =~ '^\s*#'
++        if g:r_indent_ess_comments == 1
++            if cline =~ '^\s*###'
++                return 0
++            endif
++            if cline !~ '^\s*##'
++                return g:r_indent_comment_column
++            endif
++        endif
++    endif
++
++    let cline = SanitizeRLine(cline)
++
++    if cline =~ '^\s*}' || cline =~ '^\s*}\s*)$'
++        let indline = s:Get_matching_brace(clnum, '{', '}', 1)
++        if indline > 0 && indline != clnum
++            let iline = SanitizeRLine(getline(indline))
++            if s:Get_paren_balance(iline, "(", ")") == 0 || iline =~ '(\s*{$'
++                return indent(indline)
++            else
++                let indline = s:Get_matching_brace(indline, '(', ')', 1)
++                return indent(indline)
++            endif
++        endif
++    endif
++
++    " Find the first non blank line above the current line
++    let lnum = s:Get_prev_line(clnum)
++    " Hit the start of the file, use zero indent.
++    if lnum == 0
++        return 0
++    endif
++
++    let line = SanitizeRLine(getline(lnum))
++
++    if &filetype == "rhelp"
++        if cline =~ '^\\dontshow{' || cline =~ '^\\dontrun{' || cline =~ '^\\donttest{' || cline =~ '^\\testonly{'
++            return 0
++        endif
++        if line =~ '^\\examples{' || line =~ '^\\usage{' || line =~ '^\\dontshow{' || line =~ '^\\dontrun{' || line =~ '^\\donttest{' || line =~ '^\\testonly{'
++            return 0
++        endif
++        if line =~ '^\\method{.*}{.*}(.*'
++            let line = substitute(line, '^\\method{\(.*\)}{.*}', '\1', "")
++        endif
++    endif
++
++    if cline =~ '^\s*{'
++        if g:r_indent_ess_compatible && line =~ ')$'
++            let nlnum = lnum
++            let nline = line
++            while s:Get_paren_balance(nline, '(', ')') < 0
++                let nlnum = s:Get_prev_line(nlnum)
++                let nline = SanitizeRLine(getline(nlnum)) . nline
++            endwhile
++            if nline =~ '^\s*function\s*(' && indent(nlnum) == &sw
++                return 0
++            endif
++        endif
++        if s:Get_paren_balance(line, "(", ")") == 0
++            return indent(lnum)
++        endif
++    endif
++
++    " line is an incomplete command:
++    if line =~ '\<\(if\|while\|for\|function\)\s*()$' || line =~ '\<else$' || line =~ '<-$'
++        return indent(lnum) + &sw
++    endif
++
++    " Deal with () and []
++
++    let pb = s:Get_paren_balance(line, '(', ')')
++
++    if line =~ '^\s*{$' || line =~ '(\s*{' || (pb == 0 && (line =~ '{$' || line =~ '(\s*{$'))
++        return indent(lnum) + &sw
++    endif
++
++    let bb = s:Get_paren_balance(line, '[', ']')
++
++    let s:curtabstop = repeat(' ', &tabstop)
++    if g:r_indent_align_args == 1
++
++        if pb == 0 && bb == 0 && (line =~ '.*[,&|\-\*+<>]$' || cline =~ '^\s*[,&|\-\*+<>]')
++            return indent(lnum)
++        endif
++
++        if pb > 0
++            if &filetype == "rhelp"
++                let ind = s:Get_last_paren_idx(line, '(', ')', pb)
++            else
++                let ind = s:Get_last_paren_idx(getline(lnum), '(', ')', pb)
++            endif
++            return ind
++        endif
++
++        if pb < 0 && line =~ '.*[,&|\-\*+<>]$'
++            let lnum = s:Get_prev_line(lnum)
++            while pb < 1 && lnum > 0
++                let line = SanitizeRLine(getline(lnum))
++                let line = substitute(line, '\t', s:curtabstop, "g")
++                let ind = strlen(line)
++                while ind > 0
++                    if line[ind] == ')'
++                        let pb -= 1
++                    else
++                        if line[ind] == '('
++                            let pb += 1
++                        endif
++                    endif
++                    if pb == 1
++                        return ind + 1
++                    endif
++                    let ind -= 1
++                endwhile
++                let lnum -= 1
++            endwhile
++            return 0
++        endif
++
++        if bb > 0
++            let ind = s:Get_last_paren_idx(getline(lnum), '[', ']', bb)
++            return ind
++        endif
++    endif
++
++    let post_block = 0
++    if line =~ '}$'
++        let lnum = s:Get_matching_brace(lnum, '{', '}', 0)
++        let line = SanitizeRLine(getline(lnum))
++        if lnum > 0 && line =~ '^\s*{'
++            let lnum = s:Get_prev_line(lnum)
++            let line = SanitizeRLine(getline(lnum))
++        endif
++        let pb = s:Get_paren_balance(line, '(', ')')
++        let post_block = 1
++    endif
++
++    let post_fun = 0
++    if pb < 0 && line !~ ')\s*[,&|\-\*+<>]$'
++        let post_fun = 1
++        while pb < 0 && lnum > 0
++            let lnum -= 1
++            let linepiece = SanitizeRLine(getline(lnum))
++            let pb += s:Get_paren_balance(linepiece, "(", ")")
++            let line = linepiece . line
++        endwhile
++        if line =~ '{$' && post_block == 0
++            return indent(lnum) + &sw
++        endif
++
++        " Now we can do some tests again
++        if cline =~ '^\s*{'
++            return indent(lnum)
++        endif
++        if post_block == 0
++            let newl = SanitizeRLine(line)
++            if newl =~ '\<\(if\|while\|for\|function\)\s*()$' || newl =~ '\<else$' || newl =~ '<-$'
++                return indent(lnum) + &sw
++            endif
++        endif
++    endif
++
++    if cline =~ '^\s*else'
++        if line =~ '<-\s*if\s*()'
++            return indent(lnum) + &sw
++        else
++            if line =~ '\<if\s*()'
++                return indent(lnum)
++            else
++                return indent(lnum) - &sw
++            endif
++        endif
++    endif
++
++    if bb < 0 && line =~ '.*]'
++        while bb < 0 && lnum > 0
++            let lnum -= 1
++            let linepiece = SanitizeRLine(getline(lnum))
++            let bb += s:Get_paren_balance(linepiece, "[", "]")
++            let line = linepiece . line
++        endwhile
++        let line = s:RDelete_parens(line)
++    endif
++
++    let plnum = s:Get_prev_line(lnum)
++    let ppost_else = 0
++    if plnum > 0
++        let pline = SanitizeRLine(getline(plnum))
++        let ppost_block = 0
++        if pline =~ '}$'
++            let ppost_block = 1
++            let plnum = s:Get_matching_brace(plnum, '{', '}', 0)
++            let pline = SanitizeRLine(getline(plnum))
++            if pline =~ '^\s*{$' && plnum > 0
++                let plnum = s:Get_prev_line(plnum)
++                let pline = SanitizeRLine(getline(plnum))
++            endif
++        endif
++
++        if pline =~ 'else$'
++            let ppost_else = 1
++            let plnum = s:Get_matching_if(plnum, 0)
++            let pline = SanitizeRLine(getline(plnum))
++        endif
++
++        if pline =~ '^\s*else\s*if\s*('
++            let pplnum = s:Get_prev_line(plnum)
++            let ppline = SanitizeRLine(getline(pplnum))
++            while ppline =~ '^\s*else\s*if\s*(' || ppline =~ '^\s*if\s*()\s*\S$'
++                let plnum = pplnum
++                let pline = ppline
++                let pplnum = s:Get_prev_line(plnum)
++                let ppline = SanitizeRLine(getline(pplnum))
++            endwhile
++            while ppline =~ '\<\(if\|while\|for\|function\)\s*()$' || ppline =~ '\<else$' || ppline =~ '<-$'
++                let plnum = pplnum
++                let pline = ppline
++                let pplnum = s:Get_prev_line(plnum)
++                let ppline = SanitizeRLine(getline(pplnum))
++            endwhile
++        endif
++
++        let ppb = s:Get_paren_balance(pline, '(', ')')
++        if ppb < 0 && (pline =~ ')\s*{$' || pline =~ ')$')
++            while ppb < 0 && plnum > 0
++                let plnum -= 1
++                let linepiece = SanitizeRLine(getline(plnum))
++                let ppb += s:Get_paren_balance(linepiece, "(", ")")
++                let pline = linepiece . pline
++            endwhile
++            let pline = s:RDelete_parens(pline)
++        endif
++    endif
++
++    let ind = indent(lnum)
++    let pind = indent(plnum)
++
++    if g:r_indent_align_args == 0 && pb != 0
++        let ind += pb * &sw
++        return ind
++    endif
++
++    if g:r_indent_align_args == 0 && bb != 0
++        let ind += bb * &sw
++        return ind
++    endif
++
++    if ind == pind || (ind == (pind  + &sw) && pline =~ '{$' && ppost_else == 0)
++        return ind
++    endif
++
++    let pline = getline(plnum)
++    let pbb = s:Get_paren_balance(pline, '[', ']')
++
++    while pind < ind && plnum > 0 && ppb == 0 && pbb == 0
++        let ind = pind
++        let plnum = s:Get_prev_line(plnum)
++        let pline = getline(plnum)
++        let ppb = s:Get_paren_balance(pline, '(', ')')
++        let pbb = s:Get_paren_balance(pline, '[', ']')
++        while pline =~ '^\s*else'
++            let plnum = s:Get_matching_if(plnum, 1)
++            let pline = getline(plnum)
++            let ppb = s:Get_paren_balance(pline, '(', ')')
++            let pbb = s:Get_paren_balance(pline, '[', ']')
++        endwhile
++        let pind = indent(plnum)
++        if ind == (pind  + &sw) && pline =~ '{$'
++            return ind
++        endif
++    endwhile
++
++    return ind
++
++endfunction
++
++" vim: sw=4
+diff -Naur vim73.orig/runtime/indent/rst.vim vim73/runtime/indent/rst.vim
+--- vim73.orig/runtime/indent/rst.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/rst.vim	2013-06-07 17:07:14.358967675 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:         reStructuredText Documentation Format
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2006-12-20
++" Latest Revision:  2011-08-03
+ 
+ if exists("b:did_indent")
+   finish
+@@ -16,6 +16,9 @@
+   finish
+ endif
+ 
++let s:itemization_pattern = '^\s*[-*+]\s'
++let s:enumeration_pattern = '^\s*\%(\d\+\|#\)\.\s\+'
++
+ function GetRSTIndent()
+   let lnum = prevnonblank(v:lnum - 1)
+   if lnum == 0
+@@ -25,27 +28,30 @@
+   let ind = indent(lnum)
+   let line = getline(lnum)
+ 
+-  if line =~ '^\s*[-*+]\s'
+-    let ind = ind + 2
+-  elseif line =~ '^\s*\d\+.\s'
+-    let ind = ind + matchend(substitute(line, '^\s*', '', ''), '\d\+.\s\+')
++  if line =~ s:itemization_pattern
++    let ind += 2
++  elseif line =~ s:enumeration_pattern
++    let ind += matchend(line, s:enumeration_pattern)
+   endif
+ 
+   let line = getline(v:lnum - 1)
+ 
++  " Indent :FIELD: lines.  Donât match if there is no text after the field or
++  " if the text ends with a sent-ender.
++   if line =~ '^:.\+:\s\{-1,\}\S.\+[^.!?:]$'
++     return matchend(line, '^:.\{-1,}:\s\+')
++   endif
++
+   if line =~ '^\s*$'
+     execute lnum
+-    call search('^\s*\%([-*+]\s\|\d\+.\s\|\.\.\|$\)', 'bW')
++    call search('^\s*\%([-*+]\s\|\%(\d\+\|#\)\.\s\|\.\.\|$\)', 'bW')
+     let line = getline('.')
+-    if line =~ '^\s*[-*+]'
+-      let ind = ind - 2
+-    elseif line =~ '^\s*\d\+\.\s'
+-      let ind = ind - matchend(substitute(line, '^\s*', '', ''),
+-            \ '\d\+\.\s\+')
++    if line =~ s:itemization_pattern
++      let ind -= 2
++    elseif line =~ s:enumeration_pattern
++      let ind -= matchend(line, s:enumeration_pattern)
+     elseif line =~ '^\s*\.\.'
+-      let ind = ind - 3
+-    else
+-      let ind = ind
++      let ind -= 3
+     endif
+   endif
+ 
+diff -Naur vim73.orig/runtime/indent/sass.vim vim73/runtime/indent/sass.vim
+--- vim73.orig/runtime/indent/sass.vim	2010-05-21 09:55:50.000000000 +0000
++++ vim73/runtime/indent/sass.vim	2013-06-07 17:07:14.375634295 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	Sass
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists("b:did_indent")
+   finish
+@@ -17,7 +17,8 @@
+   finish
+ endif
+ 
+-let s:property = '^\s*:\|^\s*[[:alnum:]-]\+\%(:\|\s*=\)'
++let s:property = '^\s*:\|^\s*[[:alnum:]#{}-]\+\%(:\|\s*=\)'
++let s:extend = '^\s*\%(@extend\|@include\|+\)'
+ 
+ function! GetSassIndent()
+   let lnum = prevnonblank(v:lnum-1)
+@@ -27,7 +28,7 @@
+   let line = substitute(line,'^\s\+','','')
+   let indent = indent(lnum)
+   let cindent = indent(v:lnum)
+-  if line !~ s:property && cline =~ s:property
++  if line !~ s:property && line !~ s:extend && cline =~ s:property
+     return indent + &sw
+   "elseif line =~ s:property && cline !~ s:property
+     "return indent - &sw
+diff -Naur vim73.orig/runtime/indent/sdl.vim vim73/runtime/indent/sdl.vim
+--- vim73.orig/runtime/indent/sdl.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/sdl.vim	2013-06-07 17:07:14.402300885 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	SDL
+-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
+-" Last Change:	2001 Sep 17
++" Maintainer:	Michael Piefel <entwurf@piefel.de>
++" Last Change:	10 December 2011
+ 
+ " Shamelessly stolen from the Vim-Script indent file
+ 
+@@ -19,7 +19,8 @@
+ "  finish
+ endif
+ 
+-set cpo-=C
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+ function! GetSDLIndent()
+   " Find a non-blank line above the current line.
+@@ -72,7 +73,7 @@
+ 
+   " Systems and packages are always in column 0
+   if getline(v:lnum) =~? '^\s*\(\(end\)\=system\|\(end\)\=package\)'
+-    return 0;
++    return 0
+   endif
+ 
+   " Put each end* where the corresponding begin was
+@@ -86,4 +87,7 @@
+   return ind
+ endfunction
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim:sw=2
+diff -Naur vim73.orig/runtime/indent/sqlanywhere.vim vim73/runtime/indent/sqlanywhere.vim
+--- vim73.orig/runtime/indent/sqlanywhere.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/sqlanywhere.vim	2013-06-07 17:07:14.435634123 +0000
+@@ -1,8 +1,8 @@
+ " Vim indent file
+ " Language:    SQL
+-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
+-" Last Change: Mon Apr 02 2007 9:13:47 AM
+-" Version:     1.5
++" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
++" Last Change: 2012 Dec 06
++" Version:     3.0
+ " Download:    http://vim.sourceforge.net/script.php?script_id=495
+ 
+ " Notes:
+@@ -18,6 +18,17 @@
+ " Known Issues:
+ "    The Oracle MERGE statement does not have an end tag associated with
+ "    it, this can leave the indent hanging to the right one too many.
++"
++" History:
++"    3.0 (Dec 2012)
++"        Added cpo check
++"
++"    2.0
++"        Added the FOR keyword to SQLBlockStart to handle (Alec Tica):
++"            for i in 1..100 loop
++"              |<-- I expect to have indentation here
++"            end loop;
++"
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -48,14 +59,16 @@
+ if exists("*GetSQLIndent")
+     finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " List of all the statements that start a new block.
+ " These are typically words that start a line.
+ " IS is excluded, since it is difficult to determine when the
+ " ending block is (especially for procedures/functions).
+ let s:SQLBlockStart = '^\s*\%('.
+-            \ 'if\|else\|elseif\|elsif\|'.
+-                \ 'while\|loop\|do\|'.
++                \ 'if\|else\|elseif\|elsif\|'.
++                \ 'while\|loop\|do\|for\|'.
+                 \ 'begin\|'.
+                 \ 'case\|when\|merge\|exception'.
+                 \ '\)\>'
+@@ -64,7 +77,7 @@
+ " The indent level is also based on unmatched paranethesis
+ " If a line has an extra "(" increase the indent
+ " If a line has an extra ")" decrease the indent
+-function s:CountUnbalancedParan( line, paran_to_check )
++function! s:CountUnbalancedParan( line, paran_to_check )
+     let l = a:line
+     let lp = substitute(l, '[^(]', '', 'g')
+     let l = a:line
+@@ -86,7 +99,7 @@
+ endfunction
+ 
+ " Unindent commands based on previous indent level
+-function s:CheckToIgnoreRightParan( prev_lnum, num_levels )
++function! s:CheckToIgnoreRightParan( prev_lnum, num_levels )
+     let lnum = a:prev_lnum
+     let line = getline(lnum)
+     let ends = 0
+@@ -149,7 +162,7 @@
+ "         something;
+ "    WHEN ...
+ " Should return indent level of exception.
+-function s:GetStmtStarterIndent( keyword, curr_lnum )
++function! s:GetStmtStarterIndent( keyword, curr_lnum )
+     let lnum  = a:curr_lnum
+ 
+     " Default - reduce indent by 1
+@@ -191,7 +204,7 @@
+ 
+ 
+ " Check if the line is a comment
+-function s:IsLineComment(lnum)
++function! s:IsLineComment(lnum)
+     let rc = synIDattr(
+                 \ synID(a:lnum,
+                 \     match(getline(a:lnum), '\S')+1, 0)
+@@ -203,7 +216,7 @@
+ 
+ 
+ " Check if the column is a comment
+-function s:IsColComment(lnum, cnum)
++function! s:IsColComment(lnum, cnum)
+     let rc = synIDattr(synID(a:lnum, a:cnum, 0), "name")
+                 \           =~? "comment"
+ 
+@@ -213,7 +226,7 @@
+ 
+ " Instead of returning a column position, return
+ " an appropriate value as a factor of shiftwidth.
+-function s:ModuloIndent(ind)
++function! s:ModuloIndent(ind)
+     let ind = a:ind
+ 
+     if ind > 0
+@@ -229,7 +242,7 @@
+ 
+ 
+ " Find correct indent of a new line based upon the previous line
+-function GetSQLIndent()
++function! GetSQLIndent()
+     let lnum = v:lnum
+     let ind = indent(lnum)
+ 
+@@ -240,35 +253,27 @@
+     "     return ind
+     " endif
+ 
+-    " while 1
+-        " Get previous non-blank line
+-        let prevlnum = prevnonblank(lnum - 1)
+-        if prevlnum <= 0
+-            return ind
+-        endif
++    " Get previous non-blank line
++    let prevlnum = prevnonblank(lnum - 1)
++    if prevlnum <= 0
++        return ind
++    endif
+ 
+-        if s:IsLineComment(prevlnum) == 1
+-            if getline(v:lnum) =~ '^\s*\*'
+-                let ind = s:ModuloIndent(indent(prevlnum))
+-                return ind + 1
+-            endif
+-            " If the previous line is a comment, then return -1
+-            " to tell Vim to use the formatoptions setting to determine
+-            " the indent to use
+-            " But only if the next line is blank.  This would be true if
+-            " the user is typing, but it would not be true if the user
+-            " is reindenting the file
+-            if getline(v:lnum) =~ '^\s*$'
+-                return -1
+-            endif
++    if s:IsLineComment(prevlnum) == 1
++        if getline(v:lnum) =~ '^\s*\*'
++            let ind = s:ModuloIndent(indent(prevlnum))
++            return ind + 1
++        endif
++        " If the previous line is a comment, then return -1
++        " to tell Vim to use the formatoptions setting to determine
++        " the indent to use
++        " But only if the next line is blank.  This would be true if
++        " the user is typing, but it would not be true if the user
++        " is reindenting the file
++        if getline(v:lnum) =~ '^\s*$'
++            return -1
+         endif
+-
+-    "     let prevline = getline(prevlnum)
+-    "     if prevline !~ '^\s*$'
+-    "         " echom 'previous non blank - break: ' . prevline
+-    "         break
+-    "     endif
+-    " endwhile
++    endif
+ 
+     " echom 'PREVIOUS INDENT: ' . indent(prevlnum) . '  LINE: ' . getline(prevlnum)
+ 
+@@ -382,4 +387,7 @@
+     return s:ModuloIndent(ind)
+ endfunction
+ 
+-" vim:sw=4:
++"  Restore:
++let &cpo= s:keepcpo
++unlet s:keepcpo
++" vim: ts=4 fdm=marker sw=4
+diff -Naur vim73.orig/runtime/indent/tcsh.vim vim73/runtime/indent/tcsh.vim
+--- vim73.orig/runtime/indent/tcsh.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/tcsh.vim	2013-06-07 17:07:14.448967419 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:		C-shell (tcsh)
+-" Maintainer:		Gautam Iyer <gautam@math.uchicago.edu>
+-" Last Modified:	Sat 16 Jun 2007 04:27:45 PM PDT
++" Maintainer:		GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
++" Last Modified:	Sat 10 Dec 2011 09:23:00 AM EST
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -18,8 +18,6 @@
+     finish
+ endif
+ 
+-set cpoptions-=C
+-
+ function TcshGetIndent()
+     " Find a non-blank line above the current line.
+     let lnum = prevnonblank(v:lnum - 1)
+diff -Naur vim73.orig/runtime/indent/tex.vim vim73/runtime/indent/tex.vim
+--- vim73.orig/runtime/indent/tex.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/tex.vim	2013-06-07 17:07:14.452300742 +0000
+@@ -0,0 +1,295 @@
++" Vim indent file
++" Language:     LaTeX
++" Maintainer:   YiChao Zhou <broken.zhou AT gmail.com>
++" Created:      Sat, 16 Feb 2002 16:50:19 +0100
++" Last Change:	2012 Mar 18 19:19:50
++" Version: 0.7
++"   Please email me if you found something we can do.  Bug report and
++"   feature request is welcome.
++
++" Last Update:  {{{
++"               25th Sep 2002, by LH :
++"               (*) better support for the option
++"               (*) use some regex instead of several '||'.
++"               Oct 9th, 2003, by JT:
++"               (*) don't change indentation of lines starting with '%'
++"               2005/06/15, Moshe Kaminsky <kaminsky AT math.huji.ac.il>
++"               (*) New variables:
++"                   g:tex_items, g:tex_itemize_env, g:tex_noindent_env
++"               2011/3/6, by Zhou YiChao <broken.zhou AT gmail.com>
++"               (*) Don't change indentation of lines starting with '%'
++"                   I don't see any code with '%' and it doesn't work properly
++"                   so I add some code.
++"               (*) New features: Add smartindent-like indent for "{}" and  "[]".
++"               (*) New variables: g:tex_indent_brace
++"               2011/9/25, by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Bug fix: smartindent-like indent for "[]"
++"               (*) New features: Align with "&".
++"               (*) New variable: g:tex_indent_and.
++"               2011/10/23 by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Bug fix: improve the smartindent-like indent for "{}" and
++"               "[]".
++"               2012/02/27 by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Bug fix: support default folding marker.
++"               (*) Indent with "&" is not very handy.  Make it not enable by
++"               default.
++"               2012/03/06 by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Modify "&" behavior and make it default again.  Now "&"
++"               won't align when there are more then one "&" in the previous
++"               line.
++"               (*) Add indent "\left(" and "\right)"
++"               (*) Trust user when in "verbatim" and "lstlisting"
++"               2012/03/11 by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Modify "&" so that only indent when current line start with
++"               "&".
++"               2012/03/12 by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Modify indentkeys.
++"               2012/03/18 by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Add &cpo
++"               2013/05/02 by Zhou Yichao <broken.zhou AT gmail.com>
++"               (*) Fix problem about GetTeXIndent checker. Thank Albert Netymk
++"                   for reporting this.
++" }}}
++
++" Document: {{{
++"
++" To set the following options (ok, currently it's just one), add a line like
++"   let g:tex_indent_items = 1
++" to your ~/.vimrc.
++"
++" * g:tex_indent_brace
++"
++"   If this variable is unset or non-zero, it will use smartindent-like style
++"   for "{}" and "[]"
++"   
++" * g:tex_indent_items
++"
++"   If this variable is set, item-environments are indented like Emacs does
++"   it, i.e., continuation lines are indented with a shiftwidth.
++"   
++"   NOTE: I've already set the variable below; delete the corresponding line
++"   if you don't like this behaviour.
++"
++"   Per default, it is unset.
++"   
++"              set                                unset
++"   ----------------------------------------------------------------
++"       \begin{itemize}                      \begin{itemize}  
++"         \item blablabla                      \item blablabla
++"           bla bla bla                        bla bla bla  
++"         \item blablabla                      \item blablabla
++"           bla bla bla                        bla bla bla  
++"       \end{itemize}                        \end{itemize}    
++"
++"
++" * g:tex_items
++"
++"   A list of tokens to be considered as commands for the beginning of an item 
++"   command. The tokens should be separated with '\|'. The initial '\' should 
++"   be escaped. The default is '\\bibitem\|\\item'.
++"
++" * g:tex_itemize_env
++" 
++"   A list of environment names, separated with '\|', where the items (item 
++"   commands matching g:tex_items) may appear. The default is 
++"   'itemize\|description\|enumerate\|thebibliography'.
++"
++" * g:tex_noindent_env
++"
++"   A list of environment names. separated with '\|', where no indentation is 
++"   required. The default is 'document\|verbatim'.
++"
++" * g:tex_indent_and
++"
++"   If this variable is unset or zero, vim will try to align the line with first
++"   "&". This is pretty useful when you use environment like table or align.
++"   Note that this feature need to search back some line, so vim may become
++"   a little slow.
++"
++" }}} 
++
++" Only define the function once
++if exists("b:did_indent")
++    finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++" Define global variable {{{
++
++let b:did_indent = 1
++
++if !exists("g:tex_indent_items")
++    let g:tex_indent_items = 1
++endif
++if !exists("g:tex_indent_brace")
++    let g:tex_indent_brace = 1
++endif
++if !exists("g:tex_indent_and")
++    let g:tex_indent_and = 1
++endif
++if g:tex_indent_items
++    if !exists("g:tex_itemize_env")
++        let g:tex_itemize_env = 'itemize\|description\|enumerate\|thebibliography'
++    endif
++    if !exists('g:tex_items')
++        let g:tex_items = '\\bibitem\|\\item' 
++    endif
++else
++    let g:tex_items = ''
++endif
++
++if !exists("g:tex_indent_paretheses")
++    let g:tex_indent_paretheses = 1
++endif
++
++if !exists("g:tex_noindent_env")
++    let g:tex_noindent_env = 'document\|verbatim\|lstlisting'
++endif "}}}
++
++" VIM Setting " {{{
++setlocal autoindent
++setlocal nosmartindent
++setlocal indentexpr=GetTeXIndent()
++setlocal indentkeys&
++exec 'setlocal indentkeys+=[,(,{,),},],\&' . substitute(g:tex_items, '^\|\(\\|\)', ',=', 'g')
++let g:tex_items = '^\s*' . substitute(g:tex_items, '^\(\^\\s\*\)*', '', '')
++" }}}
++
++function! GetTeXIndent() " {{{
++    " Find a non-blank line above the current line.
++    let lnum = prevnonblank(v:lnum - 1)
++
++    " Comment line is not what we need.
++    while lnum != 0 && getline(lnum) =~ '^\s*%'
++        let lnum = prevnonblank(lnum - 1)
++    endwhile
++
++    " At the start of the file use zero indent.
++    if lnum == 0
++        return 0 
++    endif
++
++    let line = substitute(getline(lnum), '%.*', ' ','g')     " last line
++    let cline = substitute(getline(v:lnum), '%.*', ' ', 'g') " current line
++
++    "  We are in verbatim, so do what our user what.
++    if synIDattr(synID(v:lnum, indent(v:lnum), 1), "name") == "texZone"
++        if empty(cline)
++            return indent(lnum)
++        else
++            return indent(v:lnum)
++        end
++    endif
++    
++    " You want to align with "&"
++    if g:tex_indent_and
++        " Align only when current line start with "&"
++        if line =~ '&.*\\\\' && cline =~ '^\s*&'
++            return indent(v:lnum) + stridx(line, "&") - stridx(cline, "&")
++        endif
++
++        " set line & lnum to the line which doesn't contain "&"
++        while lnum != 0 && (stridx(line, "&") != -1 || line =~ '^\s*%')
++            let lnum = prevnonblank(lnum - 1)
++            let line = getline(lnum)
++        endwhile
++    endif
++
++
++    if lnum == 0
++        return 0 
++    endif
++
++    let ind = indent(lnum)
++
++    " New code for comment: retain the indent of current line
++    if cline =~ '^\s*%'
++        return indent(v:lnum)
++    endif
++
++    " Add a 'shiftwidth' after beginning of environments.
++    " Don't add it for \begin{document} and \begin{verbatim}
++    ""if line =~ '^\s*\\begin{\(.*\)}'  && line !~ 'verbatim' 
++    " LH modification : \begin does not always start a line
++    " ZYC modification : \end after \begin won't cause wrong indent anymore
++    if line =~ '\\begin{.*}' && line !~ g:tex_noindent_env
++        let ind = ind + &sw
++
++        if g:tex_indent_items
++            " Add another sw for item-environments
++            if line =~ g:tex_itemize_env
++                let ind = ind + &sw
++            endif
++        endif
++    endif
++
++    " Subtract a 'shiftwidth' when an environment ends
++    if cline =~ '\\end{.*}' && cline !~ g:tex_noindent_env
++
++        if g:tex_indent_items
++            " Remove another sw for item-environments
++            if cline =~ g:tex_itemize_env
++                let ind = ind - &sw
++            endif
++        endif
++
++        let ind = ind - &sw
++    endif
++
++    if g:tex_indent_brace
++        let sum1 = 0
++        for i in range(0, strlen(line)-1)
++            if line[i] == "}" || line[i] == "]" ||
++                        \ strpart(line, i, 7) == '\right)'
++                let sum1 = max([0, sum1-1])
++            endif
++            if line[i] == "{" || line[i] == "[" ||
++                        \ strpart(line, i, 6) == '\left('
++                let sum1 += 1
++            endif
++        endfor
++
++        let sum2 = 0
++        for i in reverse(range(0, strlen(cline)-1))
++            if cline[i] == "{" || cline[i] == "[" ||
++                        \ strpart(cline, i, 6) == '\left('
++                let sum2 = max([0, sum2-1])
++            endif
++            if cline[i] == "}" || cline[i] == "]" ||
++                        \ strpart(cline, i, 7) == '\right)'
++                let sum2 += 1
++            endif
++        endfor
++
++        let ind += (sum1 - sum2) * &sw
++    endif
++
++    if g:tex_indent_paretheses
++    endif
++
++    " Special treatment for 'item'
++    " ----------------------------
++
++    if g:tex_indent_items
++
++        " '\item' or '\bibitem' itself:
++        if cline =~ g:tex_items
++            let ind = ind - &sw
++        endif
++
++        " lines following to '\item' are intented once again:
++        if line =~ g:tex_items
++            let ind = ind + &sw
++        endif
++
++    endif
++
++    return ind
++endfunction "}}}
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim: set sw=4 textwidth=80:
+diff -Naur vim73.orig/runtime/indent/treetop.vim vim73/runtime/indent/treetop.vim
+--- vim73.orig/runtime/indent/treetop.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/treetop.vim	2013-06-07 17:07:14.488967304 +0000
+@@ -0,0 +1,38 @@
++" Vim indent file
++" Language:         Treetop
++" Maintainer:       Nikolai Weibull <now@bitwi.se>
++" Latest Revision:  2011-03-14
++
++if exists("b:did_indent")
++  finish
++endif
++let b:did_indent = 1
++
++setlocal indentexpr=GetTreetopIndent()
++setlocal indentkeys=0{,0},!^F,o,O,=end
++setlocal nosmartindent
++
++if exists("*GetTreetopIndent")
++  finish
++endif
++
++function GetTreetopIndent()
++  let pnum = prevnonblank(v:lnum - 1)
++  if pnum == 0
++    return 0
++  endif
++
++  let ind = indent(pnum)
++  let line = getline(pnum)
++
++  if line =~ '^\s*\%(grammar\|module\|rule\)\>'
++    let ind += &sw
++  endif
++
++  let line = getline(v:lnum)
++  if line =~ '^\s*end\>'
++    let ind -= &sw
++  end
++
++  retur ind
++endfunction
+diff -Naur vim73.orig/runtime/indent/verilog.vim vim73/runtime/indent/verilog.vim
+--- vim73.orig/runtime/indent/verilog.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/verilog.vim	2013-06-07 17:07:14.505633923 +0000
+@@ -1,6 +1,6 @@
+ " Language:     Verilog HDL
+ " Maintainer:	Chih-Tsun Huang <cthuang@larc.ee.nthu.edu.tw>
+-" Last Change:	Wed Oct 31 16:13:11 CST 2001
++" Last Change:	2011 Dec 10 by Thilo Six
+ " URL:		http://larc.ee.nthu.edu.tw/~cthuang/vim/indent/verilog.vim
+ "
+ " Credits:
+@@ -30,7 +30,8 @@
+   finish
+ endif
+ 
+-set cpo-=C
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+ function GetVerilogIndent()
+ 
+@@ -216,4 +217,7 @@
+   return ind
+ endfunction
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim:sw=2
+diff -Naur vim73.orig/runtime/indent/vhdl.vim vim73/runtime/indent/vhdl.vim
+--- vim73.orig/runtime/indent/vhdl.vim	2010-07-11 12:05:34.000000000 +0000
++++ vim73/runtime/indent/vhdl.vim	2013-06-07 17:07:14.512300571 +0000
+@@ -1,8 +1,8 @@
+ " VHDL indent ('93 syntax)
+ " Language:    VHDL
+ " Maintainer:  Gerald Lai <laigera+vim?gmail.com>
+-" Version:     1.56
+-" Last Change: 2010 Jun 29
++" Version:     1.58
++" Last Change: 2011 Sep 27
+ " URL:         http://www.vim.org/scripts/script.php?script_id=1450
+ 
+ " only load this indent file when no other was loaded
+@@ -95,7 +95,7 @@
+ 
+   " ****************************************************************************************
+   " indent:   align generic variables & port names
+-  " keywords: "generic", "map", "port" + "(", provided current line is part of mapping
++  " keywords: "procedure" + name, "generic", "map", "port" + "(", provided current line is part of mapping
+   " where:    anywhere in previous 2 lines
+   " find following previous non-comment line
+   let pn = prevnonblank(prevn - 1)
+@@ -104,7 +104,7 @@
+     let pn = prevnonblank(pn - 1)
+     let ps = getline(pn)
+   endwhile
+-  if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
++  if (curs =~ '^\s*)' || curs =~? '^\s*\%(\<\%(procedure\|generic\|map\|port\)\>.*\)\@<!\w\+\s*\w*\s*\%(=>\s*\S\+\|:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)\)') && (prevs =~? s:NC.'\<\%(procedure\s\+\S\+\|generic\|map\|port\)\s*(\%(\s*\w\)\=' || (ps =~? s:NC.'\<\%(procedure\|generic\|map\|port\)'.s:ES && prevs =~ '^\s*('))
+     " align closing ")" with opening "("
+     if curs =~ '^\s*)'
+       return ind2 + stridx(prevs_noi, '(')
+@@ -160,12 +160,12 @@
+         " make sure one of these is true
+         " keywords: variable + "<=" without ";" ending
+         " where:    start of previous non-comment line
+-        " keywords: "generic", "map", "port"
++        " keywords: "procedure", "generic", "map", "port"
+         " where:    anywhere in previous non-comment line
+         " keyword:  "("
+         " where:    start of previous non-comment line
+         if m < 3 && ps !~? '^\s*\S\+\s*<=[^;]*'.s:ES
+-          if ps =~? s:NC.'\<\%(generic\|map\|port\)\>' || ps =~ '^\s*('
++          if ps =~? s:NC.'\<\%(procedure\|generic\|map\|port\)\>' || ps =~ '^\s*('
+             let ind = t
+           endif
+           break
+@@ -207,14 +207,26 @@
+   " keyword:  "begin"
+   " where:    anywhere in current line
+   if curs =~? s:NC.'\<begin\>'
+-    let ind = ind - &sw
+     " find previous opening statement of
+     " keywords: "architecture", "block", "entity", "function", "generate", "procedure", "process"
+     let s2 = s:NC.s:NE.'\<\%(architecture\|block\|entity\|function\|generate\|procedure\|process\)\>'
+-    if (curs !~? s2.'.*'.s:NC.'\<begin\>.*'.s:ES && prevs =~? s2) || m == 1
+-      let ind = ind + &sw
++
++    let pn = prevnonblank(curn - 1)
++    let ps = getline(pn)
++    while pn > 0 && (ps =~ '^\s*--' || ps !~? s2)
++      let pn = prevnonblank(pn - 1)
++      let ps = getline(pn)
++
++      if (ps =~? s:NC.'\<begin\>')
++        return indent(pn) - &sw
++      endif
++    endwhile
++
++    if (pn == 0)
++      return ind - &sw
++    else
++      return indent(pn)
+     endif
+-    return ind
+   endif
+ 
+   " indent:   +sw if previous line is previous opening statement
+@@ -319,8 +331,13 @@
+   " indent:   -sw
+   " keywords: "else", "elsif", "end" + "block", "for", "function", "generate", "if", "loop", "procedure", "process", "record", "units"
+   " where:    start of current line
+-  if curs =~? '^\s*\%(else\|elsif\|end\s\+\%(block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units\)\)\>'
+-    return ind - &sw
++  let s5 = 'block\|for\|function\|generate\|if\|loop\|procedure\|process\|record\|units'
++  if curs =~? '^\s*\%(else\|elsif\|end\s\+\%('.s5.'\)\)\>'
++    if prevs =~? '^\s*\%(elsif\|'.s5.'\)'
++      return ind
++    else
++      return ind - &sw
++    endif
+   endif
+ 
+   " indent:   backtrace previous non-comment lines
+@@ -395,9 +412,9 @@
+ 
+   " ****************************************************************************************
+   " indent:   maintain indent of previous opening statement
+-  " keywords: without "generic", "map", "port" + ":" but not ":=" + "in", "out", "inout", "buffer", "linkage", variable & ":="
++  " keywords: without "procedure", "generic", "map", "port" + ":" but not ":=" + "in", "out", "inout", "buffer", "linkage", variable & ":="
+   " where:    start of current line
+-  if curs =~? '^\s*\%(\<\%(generic\|map\|port\)\>.*\)\@<!\S\+\s*:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
++  if curs =~? '^\s*\%(\<\%(procedure\|generic\|map\|port\)\>.*\)\@<!\w\+\s*\w*\s*:[^=]\@=\s*\%(\%(in\|out\|inout\|buffer\|linkage\)\>\|\w\+\s\+:=\)'
+     return ind2
+   endif
+ 
+diff -Naur vim73.orig/runtime/indent/vim.vim vim73/runtime/indent/vim.vim
+--- vim73.orig/runtime/indent/vim.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/vim.vim	2013-06-07 17:07:14.528967190 +0000
+@@ -1,7 +1,7 @@
+ " Vim indent file
+ " Language:	Vim script
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2005 Jul 06
++" Last Change:	2012 Aug 02
+ 
+ " Only load this indent file when no other was loaded.
+ if exists("b:did_indent")
+@@ -12,12 +12,26 @@
+ setlocal indentexpr=GetVimIndent()
+ setlocal indentkeys+==end,=else,=cat,=fina,=END,0\\
+ 
++let b:undo_indent = "setl indentkeys< indentexpr<"
++
+ " Only define the function once.
+ if exists("*GetVimIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ function GetVimIndent()
++  let ignorecase_save = &ignorecase
++  try
++    let &ignorecase = 0
++    return GetVimIndentIntern()
++  finally
++    let &ignorecase = ignorecase_save
++  endtry
++endfunc
++
++function GetVimIndentIntern()
+   " Find a non-blank line above the current line.
+   let lnum = prevnonblank(v:lnum - 1)
+ 
+@@ -44,10 +58,18 @@
+     else
+       let ind = ind + &sw * 3
+     endif
+-  elseif getline(lnum) =~ '\(^\||\)\s*\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\%[lly]\|fu\%[nction]\|el\%[seif]\)\>'
+-    let ind = ind + &sw
+   elseif getline(lnum) =~ '^\s*aug\%[roup]' && getline(lnum) !~ '^\s*aug\%[roup]\s*!\=\s\+END'
+     let ind = ind + &sw
++  else
++    let line = getline(lnum)
++    let i = match(line, '\(^\||\)\s*\(if\|wh\%[ile]\|for\|try\|cat\%[ch]\|fina\%[lly]\|fu\%[nction]\|el\%[seif]\)\>')
++    if i >= 0
++      let ind += &sw
++      if strpart(line, i, 1) == '|' && has('syntax_items')
++            \ && synIDattr(synID(lnum, i, 1), "name") =~ '\(Comment\|String\)$'
++        let ind -= &sw
++      endif
++    endif
+   endif
+ 
+   " If the previous line contains an "end" after a pipe, but not in an ":au"
+@@ -71,4 +93,7 @@
+   return ind
+ endfunction
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:sw=2
+diff -Naur vim73.orig/runtime/indent/xinetd.vim vim73/runtime/indent/xinetd.vim
+--- vim73.orig/runtime/indent/xinetd.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/xinetd.vim	2013-06-07 17:07:14.565633752 +0000
+@@ -15,6 +15,8 @@
+ if exists("*GetXinetdIndent")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ function s:count_braces(lnum, count_open)
+   let n_open = 0
+@@ -48,3 +50,6 @@
+   return indent(pnum) + s:count_braces(pnum, 1) * &sw
+         \ - s:count_braces(v:lnum, 0) * &sw
+ endfunction
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/indent/xml.vim vim73/runtime/indent/xml.vim
+--- vim73.orig/runtime/indent/xml.vim	2010-05-15 11:03:29.000000000 +0000
++++ vim73/runtime/indent/xml.vim	2013-06-07 17:07:14.575633724 +0000
+@@ -1,6 +1,6 @@
+ " Language:	xml
+ " Maintainer:	Johannes Zellner <johannes@zellner.org>
+-" Last Change:	2009-05-26 00:17:25
++" Last Change:	2012 Jul 25
+ " Notes:	1) does not indent pure non-xml code (e.g. embedded scripts)
+ "		2) will be confused by unbalanced tags in comments
+ "		or CDATA sections.
+@@ -12,13 +12,13 @@
+     finish
+ endif
+ let b:did_indent = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " [-- local settings (must come before aborting the script) --]
+ setlocal indentexpr=XmlIndentGet(v:lnum,1)
+ setlocal indentkeys=o,O,*<Return>,<>>,<<>,/,{,}
+ 
+-set cpo-=C
+-
+ if !exists('b:xml_indent_open')
+     let b:xml_indent_open = '.\{-}<\a'
+     " pre tag, e.g. <address>
+@@ -31,8 +31,16 @@
+     " let b:xml_indent_close = '.\{-}</\(address\)\@!'
+ endif
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " [-- finish, if the function already exists --]
+-if exists('*XmlIndentGet') | finish | endif
++if exists('*XmlIndentGet')
++  finish
++endif
++
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ fun! <SID>XmlIndentWithPattern(line, pat)
+     let s = substitute('x'.a:line, a:pat, "\1", 'g')
+@@ -93,4 +101,7 @@
+     return ind
+ endfun
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:ts=8
+diff -Naur vim73.orig/runtime/indent/yaml.vim vim73/runtime/indent/yaml.vim
+--- vim73.orig/runtime/indent/yaml.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/yaml.vim	2013-06-07 17:07:14.612300286 +0000
+@@ -0,0 +1,132 @@
++" Vim indent file
++" Language:         YAML
++" Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com>
++
++" Only load this indent file when no other was loaded.
++if exists('b:did_indent')
++  finish
++endif
++
++let s:save_cpo = &cpo
++set cpo&vim
++
++let b:did_indent = 1
++
++setlocal indentexpr=GetYAMLIndent(v:lnum)
++setlocal indentkeys=!^F,o,O,0#,0},0],<:>,-
++setlocal nosmartindent
++
++let b:undo_indent = 'setlocal indentexpr< indentkeys< smartindent<'
++
++" Only define the function once.
++if exists('*GetYAMLIndent')
++    finish
++endif
++
++if exists('*shiftwidth')
++    let s:shiftwidth = function('shiftwidth')
++else
++    function s:shiftwidth()
++        return &shiftwidth
++    endfunction
++endif
++
++function s:FindPrevLessIndentedLine(lnum, ...)
++    let prevlnum = prevnonblank(a:lnum-1)
++    let curindent = a:0 ? a:1 : indent(a:lnum)
++    while           prevlnum
++                \&&  indent(prevlnum) >=  curindent
++                \&& getline(prevlnum) !~# '^\s*#'
++        let prevlnum = prevnonblank(prevlnum-1)
++    endwhile
++    return prevlnum
++endfunction
++
++function s:FindPrevLEIndentedLineMatchingRegex(lnum, regex)
++    let plilnum = s:FindPrevLessIndentedLine(a:lnum, indent(a:lnum)+1)
++    while plilnum && getline(plilnum) !~# a:regex
++        let plilnum = s:FindPrevLessIndentedLine(plilnum)
++    endwhile
++    return plilnum
++endfunction
++
++let s:mapkeyregex='\v^\s*%(\''%([^'']|'''')*\'''.
++                \        '|\"%([^"\\]|\\.)*\"'.
++                \        '|%(%(\:\ )@!.)*)\:%(\ |$)'
++let s:liststartregex='\v^\s*%(\-%(\ |$))'
++
++function GetYAMLIndent(lnum)
++    if a:lnum == 1 || !prevnonblank(a:lnum-1)
++        return 0
++    endif
++
++    let prevlnum = prevnonblank(a:lnum-1)
++    let previndent = indent(prevlnum)
++
++    let line = getline(a:lnum)
++    if line =~# '^\s*#' && getline(a:lnum-1) =~# '^\s*#'
++        " Comment blocks should have identical indent
++        return previndent
++    elseif line =~# '^\s*[\]}]'
++        " Lines containing only closing braces should have previous indent
++        return indent(s:FindPrevLessIndentedLine(a:lnum))
++    endif
++
++    " Ignore comment lines when calculating indent
++    while getline(prevlnum) =~# '^\s*#'
++        let prevlnum = prevnonblank(prevlnum-1)
++        if !prevlnum
++            return previndent
++        endif
++    endwhile
++
++    let prevline = getline(prevlnum)
++    let previndent = indent(prevlnum)
++
++    " Any examples below assume that shiftwidth=2
++    if prevline =~# '\v[{[:]$|[:-]\ [|>][+\-]?%(\s+\#.*|\s*)$'
++        " Mapping key:
++        "     nested mapping: ...
++        "
++        " - {
++        "     key: [
++        "         list value
++        "     ]
++        " }
++        "
++        " - |-
++        "     Block scalar without indentation indicator
++        return previndent+s:shiftwidth()
++    elseif prevline =~# '\v[:-]\ [|>]%(\d+[+\-]?|[+\-]?\d+)%(\#.*|\s*)$'
++        " - |+2
++        "   block scalar with indentation indicator
++        "#^^ indent+2, not indent+shiftwidth
++        return previndent + str2nr(matchstr(prevline,
++                    \'\v([:-]\ [|>])@<=[+\-]?\d+%([+\-]?%(\s+\#.*|\s*)$)@='))
++    elseif prevline =~# '\v\"%([^"\\]|\\.)*\\$'
++        "    "Multiline string \
++        "     with escaped end"
++        let qidx = match(prevline, '\v\"%([^"\\]|\\.)*\\')
++        return virtcol([prevlnum, qidx+1])
++    elseif line =~# s:liststartregex
++        " List line should have indent equal to previous list line unless it was 
++        " caught by one of the previous rules
++        return indent(s:FindPrevLEIndentedLineMatchingRegex(a:lnum,
++                    \                                       s:liststartregex))
++    elseif line =~# s:mapkeyregex
++        " Same for line containing mapping key
++        return indent(s:FindPrevLEIndentedLineMatchingRegex(a:lnum,
++                    \                                       s:mapkeyregex))
++    elseif prevline =~# '^\s*- '
++        " - List with
++        "   multiline scalar
++        return previndent+2
++    elseif prevline =~# s:mapkeyregex
++        " Mapping with: value
++        "     that is multiline scalar
++        return previndent+s:shiftwidth()
++    endif
++    return previndent
++endfunction
++
++let &cpo = s:save_cpo
+diff -Naur vim73.orig/runtime/indent/zimbu.vim vim73/runtime/indent/zimbu.vim
+--- vim73.orig/runtime/indent/zimbu.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/indent/zimbu.vim	2013-06-07 17:07:14.622300257 +0000
+@@ -0,0 +1,128 @@
++" Vim indent file
++" Language:	Zimbu
++" Maintainer:	Bram Moolenaar <Bram@vim.org>
++" Last Change:	2012 Sep 08
++
++" Only load this indent file when no other was loaded.
++if exists("b:did_indent")
++   finish
++endif
++let b:did_indent = 1
++
++setlocal ai nolisp nocin
++setlocal indentexpr=GetZimbuIndent(v:lnum)
++setlocal indentkeys=0{,0},!^F,o,O,0=ELSE,0=ELSEIF,0=CASE,0=DEFAULT,0=FINALLY
++
++" We impose recommended defaults: no Tabs, 'shiftwidth' = 2
++setlocal sw=2 et
++
++let b:undo_indent = "setl et< sw< ai< indentkeys< indentexpr="
++
++" Only define the function once.
++if exists("*GetZimbuIndent")
++  finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++" Come here when loading the script the first time.
++
++let s:maxoff = 50	" maximum number of lines to look backwards for ()
++
++func GetZimbuIndent(lnum)
++  let prevLnum = prevnonblank(a:lnum - 1)
++  if prevLnum == 0
++    " This is the first non-empty line, use zero indent.
++    return 0
++  endif
++
++  " Taken from Python indenting:
++  " If the previous line is inside parenthesis, use the indent of the starting
++  " line.
++  " Trick: use the non-existing "dummy" variable to break out of the loop when
++  " going too far back.
++  call cursor(prevLnum, 1)
++  let parlnum = searchpair('(\|{\|\[', '', ')\|}\|\]', 'nbW',
++	  \ "line('.') < " . (prevLnum - s:maxoff) . " ? dummy :"
++	  \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
++	  \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
++  if parlnum > 0
++    let plindent = indent(parlnum)
++    let plnumstart = parlnum
++  else
++    let plindent = indent(prevLnum)
++    let plnumstart = prevLnum
++  endif
++
++
++  " When inside parenthesis: If at the first line below the parenthesis add
++  " two 'shiftwidth', otherwise same as previous line.
++  " i = (a
++  "       + b
++  "       + c)
++  call cursor(a:lnum, 1)
++  let p = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
++	  \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
++	  \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
++	  \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
++  if p > 0
++    if p == prevLnum
++      " When the start is inside parenthesis, only indent one 'shiftwidth'.
++      let pp = searchpair('(\|{\|\[', '', ')\|}\|\]', 'bW',
++	  \ "line('.') < " . (a:lnum - s:maxoff) . " ? dummy :"
++	  \ . " synIDattr(synID(line('.'), col('.'), 1), 'name')"
++	  \ . " =~ '\\(Comment\\|String\\|Char\\)$'")
++      if pp > 0
++	return indent(prevLnum) + &sw
++      endif
++      return indent(prevLnum) + &sw * 2
++    endif
++    if plnumstart == p
++      return indent(prevLnum)
++    endif
++    return plindent
++  endif
++
++  let prevline = getline(prevLnum)
++  let thisline = getline(a:lnum)
++
++  " If this line is not a comment and the previous one is then move the
++  " previous line further back.
++  if thisline !~ '^\s*#'
++    while prevline =~ '^\s*#'
++      let prevLnum = prevnonblank(prevLnum - 1)
++      if prevLnum == 0
++	" Only comment lines before this, no indent
++	return 0
++      endif
++      let prevline = getline(prevLnum)
++      let plindent = indent(prevLnum)
++    endwhile
++  endif
++
++  if prevline =~ '^\s*\(IF\|\|ELSEIF\|ELSE\|GENERATE_IF\|\|GENERATE_ELSEIF\|GENERATE_ELSE\|WHILE\|REPEAT\|TRY\|CATCH\|FINALLY\|FOR\|DO\|SWITCH\|CASE\|DEFAULT\|FUNC\|VIRTUAL\|ABSTRACT\|DEFINE\|REPLACE\|FINAL\|PROC\|MAIN\|NEW\|ENUM\|CLASS\|INTERFACE\|BITS\|MODULE\|SHARED\)\>'
++    let plindent += &sw
++  endif
++  if thisline =~ '^\s*\(}\|ELSEIF\>\|ELSE\>\|CATCH\|FINALLY\|GENERATE_ELSEIF\>\|GENERATE_ELSE\>\|UNTIL\>\)'
++    let plindent -= &sw
++  endif
++  if thisline =~ '^\s*\(CASE\>\|DEFAULT\>\)' && prevline !~ '^\s*SWITCH\>'
++    let plindent -= &sw
++  endif
++
++  " line up continued comment that started after some code
++  "   String something   # comment comment
++  "                      # comment
++  if a:lnum == prevLnum + 1 && thisline =~ '^\s*#' && prevline !~ '^\s*#'
++    let n = match(prevline, '#')
++    if n > 1
++      let plindent = n
++    endif
++  endif
++
++  return plindent
++endfunc
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/keymap/belarusian-jcuken.vim vim73/runtime/keymap/belarusian-jcuken.vim
+--- vim73.orig/runtime/keymap/belarusian-jcuken.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/keymap/belarusian-jcuken.vim	2013-06-07 17:07:14.705633352 +0000
+@@ -0,0 +1,87 @@
++" Vim Keymap file for Belarusian characters, layout 'jcuken', classical variant
++" Useful mainly with UTF-8, but may work with other encodings.
++
++" Derived From: russian-jcuken.vim
++" Maintainer:   Aliaksei Nestserau <aliaksei@screencustoms.com>
++" Last Changed: 2012 Jul 23
++
++" All characters are given literally, conversion to another encoding (e.g.,
++" UTF-8) should work.
++scriptencoding utf-8
++
++let b:keymap_name = "by"
++
++loadkeymap
++~	Ð	CYRILLIC CAPITAL LETTER IO
++`	Ñ	CYRILLIC SMALL LETTER IO
++F	Ð	CYRILLIC CAPITAL LETTER A
++<	Ð	CYRILLIC CAPITAL LETTER BE
++D	Ð	CYRILLIC CAPITAL LETTER VE
++U	Ð	CYRILLIC CAPITAL LETTER GHE
++L	Ð	CYRILLIC CAPITAL LETTER DE
++T	Ð	CYRILLIC CAPITAL LETTER IE
++:	Ð	CYRILLIC CAPITAL LETTER ZHE
++P	Ð	CYRILLIC CAPITAL LETTER ZE
++B	Ð	CYRILLIC CAPITAL LETTER I
++Q	Ð	CYRILLIC CAPITAL LETTER SHORT I
++R	Ð	CYRILLIC CAPITAL LETTER KA
++K	Ð	CYRILLIC CAPITAL LETTER EL
++V	Ð	CYRILLIC CAPITAL LETTER EM
++Y	Ð	CYRILLIC CAPITAL LETTER EN
++J	Ð	CYRILLIC CAPITAL LETTER O
++G	Ð	CYRILLIC CAPITAL LETTER PE
++H	Ð 	CYRILLIC CAPITAL LETTER ER
++C	Ð¡	CYRILLIC CAPITAL LETTER ES
++N	Ð¢	CYRILLIC CAPITAL LETTER TE
++E	Ð£	CYRILLIC CAPITAL LETTER U
++A	Ð€	CYRILLIC CAPITAL LETTER EF
++{	Ð¥	CYRILLIC CAPITAL LETTER HA
++W	ÐŠ	CYRILLIC CAPITAL LETTER TSE
++X	Ð§	CYRILLIC CAPITAL LETTER CHE
++I	Ðš	CYRILLIC CAPITAL LETTER SHA
++O	Ð	CYRILLIC CAPITAL LETTER ASYLLABIC U
++}	'	APOSTROPHE
++S	Ð«	CYRILLIC CAPITAL LETTER YERU
++M	Ð¬	CYRILLIC CAPITAL LETTER SOFT SIGN
++\"	Ð­	CYRILLIC CAPITAL LETTER E
++>	Ð®	CYRILLIC CAPITAL LETTER YU
++Z	Ð¯	CYRILLIC CAPITAL LETTER YA
++f	Ð°	CYRILLIC SMALL LETTER A
++,	Ð±	CYRILLIC SMALL LETTER BE
++d	Ð²	CYRILLIC SMALL LETTER VE
++u	Ð³	CYRILLIC SMALL LETTER GHE
++l	ÐŽ	CYRILLIC SMALL LETTER DE
++t	Ðµ	CYRILLIC SMALL LETTER IE
++;	Ð¶	CYRILLIC SMALL LETTER ZHE
++p	Ð·	CYRILLIC SMALL LETTER ZE
++b	Ñ	CYRILLIC SMALL LETTER I
++q	Ð¹	CYRILLIC SMALL LETTER SHORT I
++r	Ðº	CYRILLIC SMALL LETTER KA
++k	Ð»	CYRILLIC SMALL LETTER EL
++v	ÐŒ	CYRILLIC SMALL LETTER EM
++y	Ðœ	CYRILLIC SMALL LETTER EN
++j	ÐŸ	CYRILLIC SMALL LETTER O
++g	Ð¿	CYRILLIC SMALL LETTER PE
++h	Ñ	CYRILLIC SMALL LETTER ER
++c	Ñ	CYRILLIC SMALL LETTER ES
++n	Ñ	CYRILLIC SMALL LETTER TE
++e	Ñ	CYRILLIC SMALL LETTER U
++a	Ñ	CYRILLIC SMALL LETTER EF
++[	Ñ
+	CYRILLIC SMALL LETTER HA
++w	Ñ	CYRILLIC SMALL LETTER TSE
++x	Ñ	CYRILLIC SMALL LETTER CHE
++i	Ñ	CYRILLIC SMALL LETTER SHA
++o	Ñ	CYRILLIC SMALL LETTER ASYLLABIC U
++]	'	APOSTROPHE
++s	Ñ	CYRILLIC SMALL LETTER YERU
++m	Ñ	CYRILLIC SMALL LETTER SOFT SIGN
++'	Ñ	CYRILLIC SMALL LETTER E
++.	Ñ	CYRILLIC SMALL LETTER YU
++z	Ñ	CYRILLIC SMALL LETTER YA
++@	"
++#	'
++$	*
++%	:
++^	,
++&	.
++*	;
+diff -Naur vim73.orig/runtime/lang/menu_af_af.latin1.vim vim73/runtime/lang/menu_af_af.latin1.vim
+--- vim73.orig/runtime/lang/menu_af_af.latin1.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_af_af.latin1.vim	2013-06-07 17:07:15.495631097 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Afrikaas
+ " Maintainer:		Danie Roux <droux@tuks.co.za>
+-" Last Change:		2003 Mar 30
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in latin1, but they work for cp1252 and
+ " iso-8859-15 without conversion as well.
+@@ -150,3 +152,6 @@
+ menutrans Co&lor\ test		Toets\ die\ &kleure
+ menutrans &Highlight\ test	Toets\ die\ verligting
+ menutrans &Convert\ to\ HTML	Verwissel\ na\ HTML
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_ca_es.latin1.vim vim73/runtime/lang/menu_ca_es.latin1.vim
+--- vim73.orig/runtime/lang/menu_ca_es.latin1.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_ca_es.latin1.vim	2013-06-07 17:07:15.535630983 +0000
+@@ -9,6 +9,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in latin1, but they work for cp1252,
+ " iso-8859-15 without conversion as well.
+@@ -311,3 +313,5 @@
+ menutrans Set\ '&syntax'\ only		Només\ el\ ressalt\ de\ sintaxi
+ menutrans Set\ '&filetype'\ too		Carrega\ també\ els\ plugins
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_chinese_gb.936.vim vim73/runtime/lang/menu_chinese_gb.936.vim
+--- vim73.orig/runtime/lang/menu_chinese_gb.936.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_chinese_gb.936.vim	2013-06-07 17:07:15.582297516 +0000
+@@ -9,6 +9,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding cp936
+ 
+@@ -261,3 +263,6 @@
+ menutrans &Convert\ to\ HTML		×ª»»³É\ HTML(&C)
+ menutrans Set\ '&syntax'\ only		œöÉè¶š\ 'syntax'(&S)
+ menutrans Set\ '&filetype'\ too		Ò²Éè¶š\ 'filetype'(&F)
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_chinese_taiwan.950.vim vim73/runtime/lang/menu_chinese_taiwan.950.vim
+--- vim73.orig/runtime/lang/menu_chinese_taiwan.950.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_chinese_taiwan.950.vim	2013-06-07 17:07:15.608964107 +0000
+@@ -1,6 +1,6 @@
+ " Menu Translations:	Traditional Chinese
+ " Translated By:	Hung-Te Lin	<piaip@csie.ntu.edu.tw>
+-" Last Change:		2005/01/28 02:51:38
++" Last Change:		2012 May 01
+ 
+ " {{{ Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+@@ -8,6 +8,8 @@
+ endif
+ let did_menu_trans = 1
+ " }}}
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding cp950
+ 
+@@ -282,4 +284,7 @@
+ endif
+ " }}}
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
+diff -Naur vim73.orig/runtime/lang/menu_cs_cz.iso_8859-2.vim vim73/runtime/lang/menu_cs_cz.iso_8859-2.vim
+--- vim73.orig/runtime/lang/menu_cs_cz.iso_8859-2.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_cs_cz.iso_8859-2.vim	2013-06-07 17:07:15.648963992 +0000
+@@ -1,30 +1,38 @@
+-" Menu Translations:	Czech for ISO-8859-2
+-" Maintainer:		Jiri Brezina <brzj@seznam.cz>
+-" vim:set foldmethod=marker:
+-" $Revision: 1.3 $
+-" $Date: 2005/12/19 22:08:24 $
++" Menu Translations:    Czech (ISO-8859-2)
++" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
++" Previous maintainer:  Jiri Brezina
++" Based on:             menu.vim (2012-10-21)
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+-  finish
++   finish
+ endif
++
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+-scriptencoding ISO-8859-2
++scriptencoding iso-8859-2
+ 
+ " {{{ File menu
+ menutrans &File				&Soubor
+ menutrans &Open\.\.\.<Tab>:e		&Otevøít\.\.\.<Tab>:e
+ menutrans Sp&lit-Open\.\.\.<Tab>:sp	Otevøít\ v\ no&vém\ oknì\.\.\.<Tab>:sp
++menutrans Open\ Tab\.\.\.<Tab>:tabnew	Otevøít\ tab\.\.\.<Tab>:tabnew
+ menutrans &New<Tab>:enew		&Nový<Tab>:enew
+ menutrans &Close<Tab>:close		&Zavøít<Tab>:close
+ menutrans &Save<Tab>:w			&UloŸit<Tab>:w
+ menutrans Save\ &As\.\.\.<Tab>:sav	UloŸit\ &jako\.\.\.<Tab>:sav
+-menutrans Split\ &Diff\ with\.\.\.	Rozdìlit\ okno\ -\ &Diff\.\.\.
+-menutrans Split\ Patched\ &By\.\.\.	Rozdìlit\ okno\ -\ &Patch\.\.\.
+-menutrans &Print			&Tisk
+-menutrans Sa&ve-Exit<Tab>:wqa		U&loŸit\ -\ Konec<Tab>:wqa
+-menutrans E&xit<Tab>:qa			&Konec<Tab>:qa
++if has("printer") || has("unix")
++   menutrans &Print			&Tisk
++endif
++menutrans Sa&ve-Exit<Tab>:wqa		U&loŸit\ a\ ukonèit<Tab>:wqa
++menutrans E&xit<Tab>:qa			&Ukonèit<Tab>:qa
++
++if has("diff")
++   menutrans Split\ &Diff\ with\.\.\.	Rozdìlit\ okno\ -\ &Diff\.\.\.
++   menutrans Split\ Patched\ &By\.\.\.	Rozdìlit\ okno\ -\ &Patch\.\.\.
++endif
+ " }}}
+ 
+ " {{{ Edit menu
+@@ -37,24 +45,32 @@
+ menutrans &Paste<Tab>"+gP		V&loŸit<Tab>"+gP
+ menutrans Put\ &Before<Tab>[p		VloŸit\ &pøed<Tab>[p
+ menutrans Put\ &After<Tab>]p		VloŸi&t\ za<Tab>]p
+-menutrans &Delete<Tab>x			&Smazat<Tab>x
++if has("win32") || has("win16")
++   menutrans &Delete<Tab>x			&Smazat<Tab>x
++endif
+ menutrans &Select\ All<Tab>ggVG		Vy&brat\ v¹e<Tab>ggVG
+-menutrans &Find\.\.\.			&Hledat\.\.\.
+-menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
+-menutrans Options\.\.\.			Volb&y\.\.\.
++if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
++   menutrans &Find\.\.\.			&Hledat\.\.\.
++   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
++else
++   menutrans Find<Tab>/ &Hledat<Tab>/
++   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
++   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
++endif
+ menutrans Settings\ &Window		Nastav&ení\ okna
+-	" {{{2 Edit -1
++" {{{2 Edit -1
++menutrans Startup\ &Settings  Poèáteèní\ &nastavení
+ menutrans &Global\ Settings				&Globální\ nastavení
+ menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Pøepnout\ zvýraznìní\ vzoru<Tab>:set\ hls!
+ menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Pøepnout\ ignorování\ &VERZÁLEK<Tab>:set\ ic!
+ menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Pøepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
+ menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
+ menutrans &Virtual\ Edit				Virtuální\ p&ozice\ kurzoru
+-	menutrans Never						Nikdy
+-	menutrans Block\ Selection				Výbìr\ Bloku
+-	menutrans Insert\ mode					Insert\ mód
+-	menutrans Block\ and\ Insert				Blok\ a\ Insert
+-	menutrans Always					VŸdycky
++menutrans Never						Nikdy
++menutrans Block\ Selection				Výbìr\ Bloku
++menutrans Insert\ mode					Insert\ mód
++menutrans Block\ and\ Insert				Blok\ a\ Insert
++menutrans Always					VŸdycky
+ menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Pøepnout\ Insert\ mó&d<Tab>:set\ im!
+ menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Pøepnout\ kompatibilní\ reŸim\ s\ 'vi'<Tab>:set\ cp!
+ menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledávání\.\.\.
+@@ -63,9 +79,10 @@
+ menutrans Toggle\ &Bottom\ Scrollbar			Pø&epnout\ dolní\ rolovací\ li¹tu
+ menutrans Toggle\ &Left\ Scrollbar			Pøepnout\ &levou\ rolovací\ li¹tu
+ menutrans Toggle\ &Right\ Scrollbar			Pøepnout\ p&ravou\ rolovací\ li¹tu
+-	" {{{2 Edit -2
++" {{{2 Edit -2
+ menutrans F&ile\ Settings				Nastavení\ so&uboru
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Pøepnout\ èíslování\ øá&dkù<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Pøepnout\ relativní\ èíslování\ øá&dkù<Tab>:set\ rnu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Pøepnout\ &List\ mód<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Pøepnout\ zala&mování\ øádkù<Tab>:set\ wrap!
+ menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Pøepnout\ zl&om\ ve\ slovì<Tab>:set\ lbr!
+@@ -76,10 +93,12 @@
+ menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
+ menutrans Te&xt\ Width\.\.\.				©íøka\ te&xtu\.\.\.
+ menutrans &File\ Format\.\.\.				&Formát\ souboru\.\.\.
+-	" {{{2 Edit -3
++" {{{2 Edit -3
+ menutrans C&olor\ Scheme		Barevné\ s&chéma
+ menutrans &Keymap			Klávesová\ m&apa
+-menutrans Select\ Fo&nt\.\.\.		Vybrat\ pís&mo\.\.\.
++if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
++   menutrans Select\ Fo&nt\.\.\.		Vybrat\ pís&mo\.\.\.
++endif
+ " }}}1
+ 
+ " {{{ Programming menu
+@@ -88,46 +107,52 @@
+ menutrans Jump\ &back<Tab>^T		Skoèit\ &zpìt<Tab>^T
+ menutrans Build\ &Tags\ File		&Vytvoøit\ soubor\ tagù
+ 
+-menutrans &Spelling			&Kontrola\ pravopisu
+-menutrans &Spell\ Check\ On		Kontrola\ pravopisu\ &zapnuta
+-menutrans Spell\ Check\ &Off		Kontrola\ pravopisu\ &vypnuta
+-menutrans To\ Next\ error<Tab>]s	&Dal¹í\ chyba<Tab>]s
+-menutrans To\ Previous\ error<Tab>[s	&Pøedchozí\ chyba<Tab>[s
+-menutrans Suggest\ Corrections<Tab>z?	&Návrh\ oprav<Tab>z?
+-menutrans Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
+-menutrans Set\ language\ to\ "en"	Nastav\ jazyk\ na\ "en"
+-menutrans Set\ language\ to\ "en_au"	Nastav\ jazyk\ na\ "en_au"
+-menutrans Set\ language\ to\ "en_ca"	Nastav\ jazyk\ na\ "en_ca"
+-menutrans Set\ language\ to\ "en_gb"	Nastav\ jazyk\ na\ "en_gb"
+-menutrans Set\ language\ to\ "en_nz"	Nastav\ jazyk\ na\ "en_nz"
+-menutrans Set\ language\ to\ "en_us"	Nastav\ jazyk\ na\ "en_us"
+-menutrans Set\ language\ to\ "cz"	Nastav\ jazyk\ na\ "cz"
+-menutrans Set\ language\ to\ "cs_cz"	Nastav\ jazyk\ na\ "cs_cz"
+-menutrans &Find\ More\ Languages	Nalézt\ dal¹í\ &jazyky
+-
+-menutrans &Folding			&Foldy
+-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+-menutrans &View\ Cursor\ Line<Tab>zv	&Zobrazit\ øádek\ kurzoru<Tab>zv
+-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zo&brazit\ pouze\ øádek\ kurzoru\ <Tab>zMzx
+-menutrans C&lose\ more\ folds<Tab>zm	&Vyjmout\ jednu\ úroveò\ foldù<Tab>zm
+-menutrans &Close\ all\ folds<Tab>zM	Zavøí&t\ v¹echny\ foldy<Tab>zM
+-menutrans O&pen\ more\ folds<Tab>zr	Pøidat\ jedn&u\ úroveò\ foldù<Tab>zr
+-menutrans &Open\ all\ folds<Tab>zR	&Otevøít\ v¹echny\ foldy<Tab>zR
+-menutrans Fold\ Met&hod			Metoda\ &skládání
+-	"menutrans M&anual			&Ruènì
+-	"menutrans I&ndent			&Odsazení
+-	"menutrans E&xpression			&Výraz
+-	"menutrans S&yntax			&Syntax
+-	"menutrans &Diff			&Diff
+-	"menutrans Ma&rker			Ma&rker
+-menutrans Create\ &Fold<Tab>zf		Vytvoøit\ &fold<Tab>zf
+-menutrans &Delete\ Fold<Tab>zd		Vymazat\ fol&d<Tab>zd
+-menutrans Delete\ &All\ Folds<Tab>zD	V&ymazat\ v¹echny\ foldy<Tab>zD
+-menutrans Fold\ col&umn\ width		Sloupec\ zob&razení\ foldù
+-
+-menutrans &Update			&Obnovit
+-menutrans &Get\ Block			&Sejmout\ Blok
+-menutrans &Put\ Block			&VloŸit\ Blok
++if has("spell")
++   menutrans &Spelling			&Kontrola\ pravopisu
++   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
++   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
++   menutrans To\ &Next\ error<Tab>]s	&Dal¹í\ chyba<Tab>]s
++   menutrans To\ &Previous\ error<Tab>[s	&Pøedchozí\ chyba<Tab>[s
++   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
++   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
++   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
++   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
++   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
++   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
++   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
++   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
++   menutrans &Find\ More\ Languages	Nalézt\ dal¹í\ &jazyky
++   let g:menutrans_set_lang_to = "Nastavit jazyk na"
++endif
++
++if has("Folding")   
++   menutrans &Folding			&Skládání
++   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
++   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ øádek\ &kurzoru<Tab>zv
++   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ øádek\ kurzoru\ <Tab>zMzx
++   menutrans C&lose\ more\ folds<Tab>zm	SloŸit\ &jednu\ úroveò\ skladù<Tab>zm
++   menutrans &Close\ all\ folds<Tab>zM	SloŸit\ v¹echny\ sklady<Tab>zM
++   menutrans O&pen\ more\ folds<Tab>zr	Pøidat\ jednu\ úroveò\ skladù<Tab>zr
++   menutrans &Open\ all\ folds<Tab>zR	&Otevøít\ v¹echny\ sklady<Tab>zR
++   menutrans Fold\ Met&hod			&Metoda\ skládání
++   menutrans M&anual			&Ruènì
++   menutrans I&ndent			&Odsazení
++   menutrans E&xpression	&Výraz
++   menutrans S&yntax			&Syntaxe
++   menutrans &Diff			&Rozdíly
++   menutrans Ma&rker			&Znaèky
++   menutrans Create\ &Fold<Tab>zf		Vytvoøit\ &sklad<Tab>zf
++   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
++   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ v¹echny\ sklady<Tab>zD
++   menutrans Fold\ col&umn\ width		Sloupec\ zob&razení\ skladù
++endif
++
++if has("diff")
++   menutrans &Update			&Obnovit
++   menutrans &Get\ Block			&Sejmout\ Blok
++   menutrans &Put\ Block			&VloŸit\ Blok
++endif
++
+ menutrans &Make<Tab>:make		&Make<Tab>:make
+ menutrans &List\ Errors<Tab>:cl		Výpis\ &chyb<Tab>:cl
+ menutrans L&ist\ Messages<Tab>:cl!	Výp&is\ zpráv<Tab>:cl!
+@@ -140,7 +165,7 @@
+ menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
+ menutrans &Open<Tab>:copen		&Otevøít<Tab>:copen
+ menutrans &Close<Tab>:cclose		&Zavøít<Tab>:cclose
+-menutrans &Set\ Compiler		N&astavit\ kompilátor
++menutrans Se&T\ Compiler		N&astavit\ kompilátor
+ 
+ menutrans &Convert\ to\ HEX<Tab>:%!xxd	Pøevést\ do\ ¹estnáctkového\ formát&u<Tab>:%!xxd
+ menutrans Conve&rt\ back<Tab>:%!xxd\ -r Pø&evést\ zpìt<Tab>:%!xxd\ -r
+@@ -168,7 +193,6 @@
+ menutrans &Alternate		&Zmìnit
+ menutrans &Next			&Dal¹í
+ menutrans &Previous		&Pøedchozí
+-menutrans [No\ File]		[®ádný\ soubor]
+ " }}}
+ 
+ " {{{ Menu Window
+@@ -219,6 +243,8 @@
+ menutrans &Delete		&Smazat
+ menutrans Select\ Blockwise	Vybrat\ blokovì
+ menutrans Select\ &Word		Vybrat\ &slovo
++menutrans Select\ Pa&ragraph Vybrat\ &odstavec
++menutrans Select\ &Sentence   Vybrat\ vì&tu
+ menutrans Select\ &Line		Vybrat\ &øádek
+ menutrans Select\ &Block	Vybrat\ &blok
+ menutrans Select\ &All		Vybrat\ &v¹e
+@@ -226,39 +252,57 @@
+ 
+ " {{{ The GUI toolbar
+ if has("toolbar")
+-  if exists("*Do_toolbar_tmenu")
+-    delfun Do_toolbar_tmenu
+-  endif
+-  fun Do_toolbar_tmenu()
+-    tmenu ToolBar.Open		Otevøít soubor
+-    tmenu ToolBar.Save		UloŸit soubor
+-    tmenu ToolBar.SaveAll		UloŸit v¹echny soubory
+-    tmenu ToolBar.Print		Tisk
+-    tmenu ToolBar.Undo		Zpìt
+-    tmenu ToolBar.Redo		Zru¹it vrácení
+-    tmenu ToolBar.Cut		Vyøíznout
+-    tmenu ToolBar.Copy		Kopírovat
+-    tmenu ToolBar.Paste		VloŸit
+-    tmenu ToolBar.Find		Hledat...
+-    tmenu ToolBar.FindNext	Hledat dal¹í
+-    tmenu ToolBar.FindPrev	Hledat pøedchozí
+-    tmenu ToolBar.Replace		Nahradit...
+-    if 0	" disabled; These are in the Windows menu
+-      tmenu ToolBar.New		Nové okno
+-      tmenu ToolBar.WinSplit	Rozdìlit okno
+-      tmenu ToolBar.WinMax		Maximalizovat okno
+-      tmenu ToolBar.WinMin		Minimalizovat okno
+-      tmenu ToolBar.WinClose	Zavøít okno
+-    endif
+-    tmenu ToolBar.LoadSesn	Naèíst sezení
+-    tmenu ToolBar.SaveSesn	UloŸit sezení
+-    tmenu ToolBar.RunScript	Spustit skript
+-    tmenu ToolBar.Make		Spustit make
+-    tmenu ToolBar.Shell		Spustit shell
+-    tmenu ToolBar.RunCtags	Spustit ctags
+-    tmenu ToolBar.TagJump		Skoèit na tag pod kurzorem
+-    tmenu ToolBar.Help		Nápovìda
+-    tmenu ToolBar.FindHelp	Hledat nápovìdu k...
+-  endfun
++   if exists("*Do_toolbar_tmenu")
++      delfun Do_toolbar_tmenu
++   endif
++   fun Do_toolbar_tmenu()
++      tmenu ToolBar.Open		Otevøít soubor
++      tmenu ToolBar.Save		UloŸit soubor
++      tmenu ToolBar.SaveAll		UloŸit v¹echny soubory
++      if has("printer") || has("unix")
++         tmenu ToolBar.Print		Tisk
++      endif
++      tmenu ToolBar.Undo		Zpìt
++      tmenu ToolBar.Redo		Zru¹it vrácení
++      tmenu ToolBar.Cut		Vyøíznout
++      tmenu ToolBar.Copy		Kopírovat
++      tmenu ToolBar.Paste		VloŸit
++      tmenu ToolBar.Find		Hledat...
++      tmenu ToolBar.FindNext	Hledat dal¹í
++      tmenu ToolBar.FindPrev	Hledat pøedchozí
++      tmenu ToolBar.Replace		Nahradit...
++      if 0	" disabled; These are in the Windows menu
++         tmenu ToolBar.New		Nové okno
++         tmenu ToolBar.WinSplit	Rozdìlit okno
++         tmenu ToolBar.WinMax		Maximalizovat okno
++         tmenu ToolBar.WinMin		Minimalizovat okno
++         tmenu ToolBar.WinClose	Zavøít okno
++      endif
++      tmenu ToolBar.LoadSesn	Naèíst sezení
++      tmenu ToolBar.SaveSesn	UloŸit sezení
++      tmenu ToolBar.RunScript	Spustit skript
++      tmenu ToolBar.Make		Spustit make
++      tmenu ToolBar.Shell		Spustit shell
++      tmenu ToolBar.RunCtags	Spustit ctags
++      tmenu ToolBar.TagJump		Skoèit na tag pod kurzorem
++      tmenu ToolBar.Help		Nápovìda
++      tmenu ToolBar.FindHelp	Hledat nápovìdu k...
++   endfun
+ endif
+ " }}}
++
++" {{{ DIALOG TEXTS
++let g:menutrans_no_file = "[®ádný soubor]"
++let g:menutrans_help_dialog = "Zadejte hledaný pøíkaz nebo slovo:\n\n\tPøidejte i_ pro pøíkazy vkládacího reŸimu (napø. i_CTRL-X)\n\tPøidejte c_ pro pøíkazy pøíkazové øádky (napø. c_<Del>)\n\tPøidejte ' pro jméno volby (napø. 'shiftwidth')"
++let g:menutrans_path_dialog = "Zadejte cesty pro vyhledávání souborù. Jednotlivé cesty oddìlte èárkou"
++let g:menutrans_tags_dialog = "Zadejte jména souborù s tagy. Jména oddìlte èárkami."
++let g:menutrans_textwidth_dialog = "Zadejte délku øádku (0 pro zakázání formátování):"
++let g:menutrans_fileformat_dialog = "Vyberte typ konce øádkù"
++" }}}" 
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
++
++
++" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
+diff -Naur vim73.orig/runtime/lang/menu_cs_cz.latin1.vim vim73/runtime/lang/menu_cs_cz.latin1.vim
+--- vim73.orig/runtime/lang/menu_cs_cz.latin1.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_cs_cz.latin1.vim	2013-06-07 17:07:15.655630640 +0000
+@@ -1,3 +1,3 @@
+ " Menu Translations:	Czech
+ 
+-source <sfile>:p:h/menu_czech_czech_republic.1252.vim
++source <sfile>:p:h/menu_czech_czech_republic.ascii.vim
+diff -Naur vim73.orig/runtime/lang/menu_cs_cz.utf-8.vim vim73/runtime/lang/menu_cs_cz.utf-8.vim
+--- vim73.orig/runtime/lang/menu_cs_cz.utf-8.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/lang/menu_cs_cz.utf-8.vim	2013-06-07 17:07:15.655630640 +0000
+@@ -0,0 +1,308 @@
++" Menu Translations:    Czech (UTF-8)
++" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
++" Previous maintainer:  Jiri Brezina
++" Based on:             menu.vim (2012-10-21)
++
++" Quit when menu translations have already been done.
++if exists("did_menu_trans")
++   finish
++endif
++
++let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
++
++scriptencoding utf-8
++
++" {{{ File menu
++menutrans &File				&Soubor
++menutrans &Open\.\.\.<Tab>:e		&OtevÅÃ­t\.\.\.<Tab>:e
++menutrans Sp&lit-Open\.\.\.<Tab>:sp	OtevÅÃ­t\ v\ no&vÃ©m\ oknÄ\.\.\.<Tab>:sp
++menutrans Open\ Tab\.\.\.<Tab>:tabnew	OtevÅÃ­t\ tab\.\.\.<Tab>:tabnew
++menutrans &New<Tab>:enew		&NovÃœ<Tab>:enew
++menutrans &Close<Tab>:close		&ZavÅÃ­t<Tab>:close
++menutrans &Save<Tab>:w			&UloÅŸit<Tab>:w
++menutrans Save\ &As\.\.\.<Tab>:sav	UloÅŸit\ &jako\.\.\.<Tab>:sav
++if has("printer") || has("unix")
++   menutrans &Print			&Tisk
++endif
++menutrans Sa&ve-Exit<Tab>:wqa		U&loÅŸit\ a\ ukonÄit<Tab>:wqa
++menutrans E&xit<Tab>:qa			&UkonÄit<Tab>:qa
++
++if has("diff")
++   menutrans Split\ &Diff\ with\.\.\.	RozdÄlit\ okno\ -\ &Diff\.\.\.
++   menutrans Split\ Patched\ &By\.\.\.	RozdÄlit\ okno\ -\ &Patch\.\.\.
++endif
++" }}}
++
++" {{{ Edit menu
++menutrans &Edit				Ãpr&avy
++menutrans &Undo<Tab>u			&ZpÄt<Tab>u
++menutrans &Redo<Tab>^R			Z&ruÅ¡it\ vrÃ¡cenÃ­<Tab>^R
++menutrans Rep&eat<Tab>\.		&Opakovat<Tab>\.
++menutrans Cu&t<Tab>"+x			&VyÅÃ­znout<Tab>"+x
++menutrans &Copy<Tab>"+y			&KopÃ­rovat<Tab>"+y
++menutrans &Paste<Tab>"+gP		V&loÅŸit<Tab>"+gP
++menutrans Put\ &Before<Tab>[p		VloÅŸit\ &pÅed<Tab>[p
++menutrans Put\ &After<Tab>]p		VloÅŸi&t\ za<Tab>]p
++if has("win32") || has("win16")
++   menutrans &Delete<Tab>x			&Smazat<Tab>x
++endif
++menutrans &Select\ All<Tab>ggVG		Vy&brat\ vÅ¡e<Tab>ggVG
++if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
++   menutrans &Find\.\.\.			&Hledat\.\.\.
++   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
++else
++   menutrans Find<Tab>/ &Hledat<Tab>/
++   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
++   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
++endif
++menutrans Settings\ &Window		Nastav&enÃ­\ okna
++" {{{2 Edit -1
++menutrans Startup\ &Settings  PoÄÃ¡teÄnÃ­\ &nastavenÃ­
++menutrans &Global\ Settings				&GlobÃ¡lnÃ­\ nastavenÃ­
++menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&PÅepnout\ zvÃœraznÄnÃ­\ vzoru<Tab>:set\ hls!
++menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		PÅepnout\ ignorovÃ¡nÃ­\ &VERZÃLEK<Tab>:set\ ic!
++menutrans Toggle\ &Showmatch<Tab>:set\ sm!		PÅepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
++menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
++menutrans &Virtual\ Edit				VirtuÃ¡lnÃ­\ p&ozice\ kurzoru
++menutrans Never						Nikdy
++menutrans Block\ Selection				VÃœbÄr\ Bloku
++menutrans Insert\ mode					Insert\ mÃ³d
++menutrans Block\ and\ Insert				Blok\ a\ Insert
++menutrans Always					VÅŸdycky
++menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		PÅepnout\ Insert\ mÃ³&d<Tab>:set\ im!
++menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		PÅepnout\ kompatibilnÃ­\ reÅŸim\ s\ 'vi'<Tab>:set\ cp!
++menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledÃ¡vÃ¡nÃ­\.\.\.
++menutrans Ta&g\ Files\.\.\.				Ta&g\ soubory\.\.\.
++menutrans Toggle\ &Toolbar				PÅepnout\ &Toolbar
++menutrans Toggle\ &Bottom\ Scrollbar			PÅ&epnout\ dolnÃ­\ rolovacÃ­\ liÅ¡tu
++menutrans Toggle\ &Left\ Scrollbar			PÅepnout\ &levou\ rolovacÃ­\ liÅ¡tu
++menutrans Toggle\ &Right\ Scrollbar			PÅepnout\ p&ravou\ rolovacÃ­\ liÅ¡tu
++" {{{2 Edit -2
++menutrans F&ile\ Settings				NastavenÃ­\ so&uboru
++menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	PÅepnout\ ÄÃ­slovÃ¡nÃ­\ ÅÃ¡&dkÅ¯<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! PÅepnout\ relativnÃ­\ ÄÃ­slovÃ¡nÃ­\ ÅÃ¡&dkÅ¯<Tab>:set\ rnu!
++menutrans Toggle\ &List\ Mode<Tab>:set\ list!		PÅepnout\ &List\ mÃ³d<Tab>:set\ list!
++menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		PÅepnout\ zala&movÃ¡nÃ­\ ÅÃ¡dkÅ¯<Tab>:set\ wrap!
++menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	PÅepnout\ zl&om\ ve\ slovÄ<Tab>:set\ lbr!
++menutrans Toggle\ &expand-tab<Tab>:set\ et!		PÅepnout\ &expand-tab<Tab>:set\ et!
++menutrans Toggle\ &auto-indent<Tab>:set\ ai!		PÅepnout\ &auto-indent<Tab>:set\ ai!
++menutrans Toggle\ &C-indenting<Tab>:set\ cin!		PÅepnout\ &C-indenting<Tab>:set\ cin!
++menutrans &Shiftwidth					Nastav&it\ Å¡Ã­Åku\ od&sazenÃ­
++menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
++menutrans Te&xt\ Width\.\.\.				Å Ã­Åka\ te&xtu\.\.\.
++menutrans &File\ Format\.\.\.				&FormÃ¡t\ souboru\.\.\.
++" {{{2 Edit -3
++menutrans C&olor\ Scheme		BarevnÃ©\ s&chÃ©ma
++menutrans &Keymap			KlÃ¡vesovÃ¡\ m&apa
++if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
++   menutrans Select\ Fo&nt\.\.\.		Vybrat\ pÃ­s&mo\.\.\.
++endif
++" }}}1
++
++" {{{ Programming menu
++menutrans &Tools			NÃ¡st&roje
++menutrans &Jump\ to\ this\ tag<Tab>g^]	&SkoÄit\ na\ tag<Tab>g^]
++menutrans Jump\ &back<Tab>^T		SkoÄit\ &zpÄt<Tab>^T
++menutrans Build\ &Tags\ File		&VytvoÅit\ soubor\ tagÅ¯
++
++if has("spell")
++   menutrans &Spelling			&Kontrola\ pravopisu
++   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
++   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
++   menutrans To\ &Next\ error<Tab>]s	&DalÅ¡Ã­\ chyba<Tab>]s
++   menutrans To\ &Previous\ error<Tab>[s	&PÅedchozÃ­\ chyba<Tab>[s
++   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
++   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
++   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
++   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
++   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
++   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
++   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
++   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
++   menutrans &Find\ More\ Languages	NalÃ©zt\ dalÅ¡Ã­\ &jazyky
++   let g:menutrans_set_lang_to = "Nastavit jazyk na"
++endif
++
++if has("Folding")   
++   menutrans &Folding			&SklÃ¡dÃ¡nÃ­
++   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
++   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ ÅÃ¡dek\ &kurzoru<Tab>zv
++   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ ÅÃ¡dek\ kurzoru\ <Tab>zMzx
++   menutrans C&lose\ more\ folds<Tab>zm	SloÅŸit\ &jednu\ ÃºroveÅ\ skladÅ¯<Tab>zm
++   menutrans &Close\ all\ folds<Tab>zM	SloÅŸit\ vÅ¡echny\ sklady<Tab>zM
++   menutrans O&pen\ more\ folds<Tab>zr	PÅidat\ jednu\ ÃºroveÅ\ skladÅ¯<Tab>zr
++   menutrans &Open\ all\ folds<Tab>zR	&OtevÅÃ­t\ vÅ¡echny\ sklady<Tab>zR
++   menutrans Fold\ Met&hod			&Metoda\ sklÃ¡dÃ¡nÃ­
++   menutrans M&anual			&RuÄnÄ
++   menutrans I&ndent			&OdsazenÃ­
++   menutrans E&xpression	&VÃœraz
++   menutrans S&yntax			&Syntaxe
++   menutrans &Diff			&RozdÃ­ly
++   menutrans Ma&rker			&ZnaÄky
++   menutrans Create\ &Fold<Tab>zf		VytvoÅit\ &sklad<Tab>zf
++   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
++   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ vÅ¡echny\ sklady<Tab>zD
++   menutrans Fold\ col&umn\ width		Sloupec\ zob&razenÃ­\ skladÅ¯
++endif
++
++if has("diff")
++   menutrans &Update			&Obnovit
++   menutrans &Get\ Block			&Sejmout\ Blok
++   menutrans &Put\ Block			&VloÅŸit\ Blok
++endif
++
++menutrans &Make<Tab>:make		&Make<Tab>:make
++menutrans &List\ Errors<Tab>:cl		VÃœpis\ &chyb<Tab>:cl
++menutrans L&ist\ Messages<Tab>:cl!	VÃœp&is\ zprÃ¡v<Tab>:cl!
++menutrans &Next\ Error<Tab>:cn		DalÅ¡Ã­\ ch&yba<Tab>:cn
++menutrans &Previous\ Error<Tab>:cp	&PÅedchozÃ­\ chyba<Tab>:cp
++menutrans &Older\ List<Tab>:cold	Sta&rÅ¡Ã­\ seznam<Tab>:cold
++menutrans N&ewer\ List<Tab>:cnew	N&ovÄjÅ¡Ã­\ seznam<Tab>:cnew
++menutrans Error\ &Window		ChybovÃ©\ o&kno
++menutrans SeT\ Compiler			Nas&tavenÃ­\ kompilÃ¡toru
++menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
++menutrans &Open<Tab>:copen		&OtevÅÃ­t<Tab>:copen
++menutrans &Close<Tab>:cclose		&ZavÅÃ­t<Tab>:cclose
++menutrans Se&T\ Compiler		N&astavit\ kompilÃ¡tor
++
++menutrans &Convert\ to\ HEX<Tab>:%!xxd	PÅevÃ©st\ do\ Å¡estnÃ¡ctkovÃ©ho\ formÃ¡t&u<Tab>:%!xxd
++menutrans Conve&rt\ back<Tab>:%!xxd\ -r PÅ&evÃ©st\ zpÄt<Tab>:%!xxd\ -r
++" }}}
++
++" {{{ Syntax menu
++menutrans &Syntax		Synta&xe
++menutrans Set\ '&syntax'\ only	Nastavit\ pouze\ 'synta&x'
++menutrans Set\ '&filetype'\ too	Nastavit\ takÃ©\ '&filetype'
++menutrans &Off			&Vypnout
++menutrans &Manual		&RuÄnÄ
++menutrans A&utomatic		A&utomaticky
++menutrans on/off\ for\ &This\ file	&PÅepnout\ (pro\ tento\ soubor)
++menutrans o&ff\ (this\ file)	vyp&nout\ (pro\ tento\ soubor)
++menutrans Co&lor\ test		Test\ &barev
++menutrans &Highlight\ test	&Test\ zvÃœrazÅovÃ¡nÃ­
++menutrans &Convert\ to\ HTML	PÅevÃ©st\ &do\ HTML
++menutrans &Show\ filetypes\ in\ menu	&Zobrazit\ vÃœbÄr\ moÅŸnostÃ­
++" }}}
++
++" {{{ Menu Buffers
++menutrans &Buffers		&Buffery
++menutrans &Refresh\ menu	&Obnovit\ menu
++menutrans &Delete		Z&ruÅ¡it
++menutrans &Alternate		&ZmÄnit
++menutrans &Next			&DalÅ¡Ã­
++menutrans &Previous		&PÅedchozÃ­
++" }}}
++
++" {{{ Menu Window
++menutrans &Window			&Okna
++menutrans &New<Tab>^Wn			&NovÃ©<Tab>^Wn
++menutrans S&plit<Tab>^Ws		&RozdÄlit<Tab>^Ws
++menutrans Sp&lit\ To\ #<Tab>^W^^	Ro&zdÄlit\ na\ #<Tab>^W^^
++menutrans Split\ &Vertically<Tab>^Wv	RozdÄlit\ &vertikÃ¡lnÄ<Tab>^Wv
++menutrans Split\ File\ E&xplorer	RozdÄlit\ -\ File\ E&xplorer
++menutrans Move\ &To			&PÅesun
++menutrans &Top<Tab>^WK			&Nahoru<Tab>^WK
++menutrans &Bottom<Tab>^WJ		&Dolu<Tab>^WJ
++menutrans &Left\ side<Tab>^WH		&Vlevo<Tab>^WH
++menutrans &Right\ side<Tab>^WL		Vp&ravo<Tab>^WL
++
++menutrans &Close<Tab>^Wc		ZavÅÃ­&t<Tab>^Wc
++menutrans Close\ &Other(s)<Tab>^Wo	ZavÅÃ­t\ &ostatnÃ­<Tab>^Wo
++menutrans Ne&xt<Tab>^Ww			&DalÅ¡Ã­<Tab>^Ww
++menutrans P&revious<Tab>^WW		&PÅedchozÃ­<Tab>^WW
++menutrans &Equal\ Size<Tab>^W=		&StejnÃ¡\ vÃœÅ¡ka<Tab>^W=
++menutrans &Max\ Height<Tab>^W_		MaximÃ¡lnÃ­\ vÃœÅ¡&ka<Tab>^W_
++menutrans M&in\ Height<Tab>^W1_		M&inimÃ¡lnÃ­\ vÃœÅ¡ka<Tab>^W1_
++menutrans Max\ &Width<Tab>^W\|		&MaximÃ¡lnÃ­\ Å¡Ã­Åka<Tab>^W\|
++menutrans Min\ Widt&h<Tab>^W1\|		MinimÃ¡lnÃ­\ Å¡Ã­Åk&a<Tab>^W1\|
++menutrans Rotate\ &Up<Tab>^WR		Rotovat\ na&horu<Tab>^WR
++menutrans Rotate\ &Down<Tab>^Wr		Rotovat\ &dolÅ¯<Tab>^Wr
++
++" {{{ Help menu
++menutrans &Help			&NÃ¡povÄda
++menutrans &Overview<Tab><F1>	&PÅehled<Tab><F1>
++menutrans &User\ Manual		&UÅŸivatelskÃœ\ ManuÃ¡l
++menutrans &How-to\ links	Ho&wto
++menutrans &GUI			&GrafickÃ©\ rozhranÃ­
++menutrans &Credits		&AutoÅi
++menutrans Co&pying		&LicenÄnÃ­\ politika
++menutrans &Sponsor/Register	SponzorovÃ¡nÃ­/&Registrace
++menutrans &Find\.\.\.		&Hledat\.\.\.
++menutrans O&rphans		O&siÅelÃ©\ dÄti
++menutrans &Version		&Verze
++menutrans &About		&O\ aplikaci
++" }}}
++
++" {{{ The popup menu
++menutrans &Undo			&ZpÄt
++menutrans Cu&t			&VyÅÃ­znout
++menutrans &Copy			&KopÃ­rovat
++menutrans &Paste		&VloÅŸit
++menutrans &Delete		&Smazat
++menutrans Select\ Blockwise	Vybrat\ blokovÄ
++menutrans Select\ &Word		Vybrat\ &slovo
++menutrans Select\ Pa&ragraph Vybrat\ &odstavec
++menutrans Select\ &Sentence   Vybrat\ vÄ&tu
++menutrans Select\ &Line		Vybrat\ &ÅÃ¡dek
++menutrans Select\ &Block	Vybrat\ &blok
++menutrans Select\ &All		Vybrat\ &vÅ¡e
++" }}}
++
++" {{{ The GUI toolbar
++if has("toolbar")
++   if exists("*Do_toolbar_tmenu")
++      delfun Do_toolbar_tmenu
++   endif
++   fun Do_toolbar_tmenu()
++      tmenu ToolBar.Open		OtevÅÃ­t soubor
++      tmenu ToolBar.Save		UloÅŸit soubor
++      tmenu ToolBar.SaveAll		UloÅŸit vÅ¡echny soubory
++      if has("printer") || has("unix")
++         tmenu ToolBar.Print		Tisk
++      endif
++      tmenu ToolBar.Undo		ZpÄt
++      tmenu ToolBar.Redo		ZruÅ¡it vrÃ¡cenÃ­
++      tmenu ToolBar.Cut		VyÅÃ­znout
++      tmenu ToolBar.Copy		KopÃ­rovat
++      tmenu ToolBar.Paste		VloÅŸit
++      tmenu ToolBar.Find		Hledat...
++      tmenu ToolBar.FindNext	Hledat dalÅ¡Ã­
++      tmenu ToolBar.FindPrev	Hledat pÅedchozÃ­
++      tmenu ToolBar.Replace		Nahradit...
++      if 0	" disabled; These are in the Windows menu
++         tmenu ToolBar.New		NovÃ© okno
++         tmenu ToolBar.WinSplit	RozdÄlit okno
++         tmenu ToolBar.WinMax		Maximalizovat okno
++         tmenu ToolBar.WinMin		Minimalizovat okno
++         tmenu ToolBar.WinClose	ZavÅÃ­t okno
++      endif
++      tmenu ToolBar.LoadSesn	NaÄÃ­st sezenÃ­
++      tmenu ToolBar.SaveSesn	UloÅŸit sezenÃ­
++      tmenu ToolBar.RunScript	Spustit skript
++      tmenu ToolBar.Make		Spustit make
++      tmenu ToolBar.Shell		Spustit shell
++      tmenu ToolBar.RunCtags	Spustit ctags
++      tmenu ToolBar.TagJump		SkoÄit na tag pod kurzorem
++      tmenu ToolBar.Help		NÃ¡povÄda
++      tmenu ToolBar.FindHelp	Hledat nÃ¡povÄdu k...
++   endfun
++endif
++" }}}
++
++" {{{ DIALOG TEXTS
++let g:menutrans_no_file = "[ÅœÃ¡dnÃœ soubor]"
++let g:menutrans_help_dialog = "Zadejte hledanÃœ pÅÃ­kaz nebo slovo:\n\n\tPÅidejte i_ pro pÅÃ­kazy vklÃ¡dacÃ­ho reÅŸimu (napÅ. i_CTRL-X)\n\tPÅidejte c_ pro pÅÃ­kazy pÅÃ­kazovÃ© ÅÃ¡dky (napÅ. c_<Del>)\n\tPÅidejte ' pro jmÃ©no volby (napÅ. 'shiftwidth')"
++let g:menutrans_path_dialog = "Zadejte cesty pro vyhledÃ¡vÃ¡nÃ­ souborÅ¯. JednotlivÃ© cesty oddÄlte ÄÃ¡rkou"
++let g:menutrans_tags_dialog = "Zadejte jmÃ©na souborÅ¯ s tagy. JmÃ©na oddÄlte ÄÃ¡rkami."
++let g:menutrans_textwidth_dialog = "Zadejte dÃ©lku ÅÃ¡dku (0 pro zakÃ¡zÃ¡nÃ­ formÃ¡tovÃ¡nÃ­):"
++let g:menutrans_fileformat_dialog = "Vyberte typ konce ÅÃ¡dkÅ¯"
++" }}}" 
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
++
++
++" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
+diff -Naur vim73.orig/runtime/lang/menu_czech_czech_republic.1250.vim vim73/runtime/lang/menu_czech_czech_republic.1250.vim
+--- vim73.orig/runtime/lang/menu_czech_czech_republic.1250.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_czech_czech_republic.1250.vim	2013-06-07 17:07:15.665630611 +0000
+@@ -1,14 +1,16 @@
+-" Menu Translations:	Czech for MS-Windows
+-" Maintainer:		Jiri Brezina <brzj@seznam.cz>
+-" vim:set foldmethod=marker:
+-" $Revision: 1.3 $
+-" $Date: 2005/12/19 22:13:30 $
++" Menu Translations:    Czech (CP1250)
++" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
++" Previous maintainer:  Jiri Brezina
++" Based on:             menu.vim (2012-10-21)
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+-  finish
++   finish
+ endif
++
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding cp1250
+ 
+@@ -16,15 +18,21 @@
+ menutrans &File				&Soubor
+ menutrans &Open\.\.\.<Tab>:e		&Otevøít\.\.\.<Tab>:e
+ menutrans Sp&lit-Open\.\.\.<Tab>:sp	Otevøít\ v\ no&vém\ oknì\.\.\.<Tab>:sp
++menutrans Open\ Tab\.\.\.<Tab>:tabnew	Otevøít\ tab\.\.\.<Tab>:tabnew
+ menutrans &New<Tab>:enew		&Nový<Tab>:enew
+ menutrans &Close<Tab>:close		&Zavøít<Tab>:close
+ menutrans &Save<Tab>:w			&Uloit<Tab>:w
+ menutrans Save\ &As\.\.\.<Tab>:sav	Uloit\ &jako\.\.\.<Tab>:sav
+-menutrans Split\ &Diff\ with\.\.\.	Rozdìlit\ okno\ -\ &Diff\.\.\.
+-menutrans Split\ Patched\ &By\.\.\.	Rozdìlit\ okno\ -\ &Patch\.\.\.
+-menutrans &Print			&Tisk
+-menutrans Sa&ve-Exit<Tab>:wqa		U&loit\ -\ Konec<Tab>:wqa
+-menutrans E&xit<Tab>:qa			&Konec<Tab>:qa
++if has("printer") || has("unix")
++   menutrans &Print			&Tisk
++endif
++menutrans Sa&ve-Exit<Tab>:wqa		U&loit\ a\ ukonèit<Tab>:wqa
++menutrans E&xit<Tab>:qa			&Ukonèit<Tab>:qa
++
++if has("diff")
++   menutrans Split\ &Diff\ with\.\.\.	Rozdìlit\ okno\ -\ &Diff\.\.\.
++   menutrans Split\ Patched\ &By\.\.\.	Rozdìlit\ okno\ -\ &Patch\.\.\.
++endif
+ " }}}
+ 
+ " {{{ Edit menu
+@@ -37,24 +45,32 @@
+ menutrans &Paste<Tab>"+gP		V&loit<Tab>"+gP
+ menutrans Put\ &Before<Tab>[p		Vloit\ &pøed<Tab>[p
+ menutrans Put\ &After<Tab>]p		Vloi&t\ za<Tab>]p
+-menutrans &Delete<Tab>x			&Smazat<Tab>x
++if has("win32") || has("win16")
++   menutrans &Delete<Tab>x			&Smazat<Tab>x
++endif
+ menutrans &Select\ All<Tab>ggVG		Vy&brat\ ve<Tab>ggVG
+-menutrans &Find\.\.\.			&Hledat\.\.\.
+-menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
+-menutrans Options\.\.\.			Volb&y\.\.\.
++if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
++   menutrans &Find\.\.\.			&Hledat\.\.\.
++   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
++else
++   menutrans Find<Tab>/ &Hledat<Tab>/
++   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
++   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
++endif
+ menutrans Settings\ &Window		Nastav&ení\ okna
+-	" {{{2 Edit -1
++" {{{2 Edit -1
++menutrans Startup\ &Settings  Poèáteèní\ &nastavení
+ menutrans &Global\ Settings				&Globální\ nastavení
+ menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Pøepnout\ zvýraznìní\ vzoru<Tab>:set\ hls!
+ menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Pøepnout\ ignorování\ &VERZÁLEK<Tab>:set\ ic!
+ menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Pøepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
+ menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
+ menutrans &Virtual\ Edit				Virtuální\ p&ozice\ kurzoru
+-	menutrans Never						Nikdy
+-	menutrans Block\ Selection				Výbìr\ Bloku
+-	menutrans Insert\ mode					Insert\ mód
+-	menutrans Block\ and\ Insert				Blok\ a\ Insert
+-	menutrans Always					Vdycky
++menutrans Never						Nikdy
++menutrans Block\ Selection				Výbìr\ Bloku
++menutrans Insert\ mode					Insert\ mód
++menutrans Block\ and\ Insert				Blok\ a\ Insert
++menutrans Always					Vdycky
+ menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Pøepnout\ Insert\ mó&d<Tab>:set\ im!
+ menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Pøepnout\ kompatibilní\ reim\ s\ 'vi'<Tab>:set\ cp!
+ menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledávání\.\.\.
+@@ -63,9 +79,10 @@
+ menutrans Toggle\ &Bottom\ Scrollbar			Pø&epnout\ dolní\ rolovací\ litu
+ menutrans Toggle\ &Left\ Scrollbar			Pøepnout\ &levou\ rolovací\ litu
+ menutrans Toggle\ &Right\ Scrollbar			Pøepnout\ p&ravou\ rolovací\ litu
+-	" {{{2 Edit -2
++" {{{2 Edit -2
+ menutrans F&ile\ Settings				Nastavení\ so&uboru
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Pøepnout\ èíslování\ øá&dkù<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Pøepnout\ relativní\ èíslování\ øá&dkù<Tab>:set\ rnu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Pøepnout\ &List\ mód<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Pøepnout\ zala&mování\ øádkù<Tab>:set\ wrap!
+ menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Pøepnout\ zl&om\ ve\ slovì<Tab>:set\ lbr!
+@@ -76,10 +93,12 @@
+ menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
+ menutrans Te&xt\ Width\.\.\.				íøka\ te&xtu\.\.\.
+ menutrans &File\ Format\.\.\.				&Formát\ souboru\.\.\.
+-	" {{{2 Edit -3
++" {{{2 Edit -3
+ menutrans C&olor\ Scheme		Barevné\ s&chéma
+ menutrans &Keymap			Klávesová\ m&apa
+-menutrans Select\ Fo&nt\.\.\.		Vybrat\ pís&mo\.\.\.
++if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
++   menutrans Select\ Fo&nt\.\.\.		Vybrat\ pís&mo\.\.\.
++endif
+ " }}}1
+ 
+ " {{{ Programming menu
+@@ -88,46 +107,52 @@
+ menutrans Jump\ &back<Tab>^T		Skoèit\ &zpìt<Tab>^T
+ menutrans Build\ &Tags\ File		&Vytvoøit\ soubor\ tagù
+ 
+-menutrans &Spelling			&Kontrola\ pravopisu
+-menutrans &Spell\ Check\ On		Kontrola\ pravopisu\ &zapnuta
+-menutrans Spell\ Check\ &Off		Kontrola\ pravopisu\ &vypnuta
+-menutrans To\ Next\ error<Tab>]s	&Dalí\ chyba<Tab>]s
+-menutrans To\ Previous\ error<Tab>[s	&Pøedchozí\ chyba<Tab>[s
+-menutrans Suggest\ Corrections<Tab>z?	&Návrh\ oprav<Tab>z?
+-menutrans Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
+-menutrans Set\ language\ to\ "en"	Nastav\ jazyk\ na\ "en"
+-menutrans Set\ language\ to\ "en_au"	Nastav\ jazyk\ na\ "en_au"
+-menutrans Set\ language\ to\ "en_ca"	Nastav\ jazyk\ na\ "en_ca"
+-menutrans Set\ language\ to\ "en_gb"	Nastav\ jazyk\ na\ "en_gb"
+-menutrans Set\ language\ to\ "en_nz"	Nastav\ jazyk\ na\ "en_nz"
+-menutrans Set\ language\ to\ "en_us"	Nastav\ jazyk\ na\ "en_us"
+-menutrans Set\ language\ to\ "cz"	Nastav\ jazyk\ na\ "cz"
+-menutrans Set\ language\ to\ "cs_cz"	Nastav\ jazyk\ na\ "cs_cz"
+-menutrans &Find\ More\ Languages	Nalézt\ dalí\ &jazyky
+-
+-menutrans &Folding			&Foldy
+-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+-menutrans &View\ Cursor\ Line<Tab>zv	&Zobrazit\ øádek\ kurzoru<Tab>zv
+-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zo&brazit\ pouze\ øádek\ kurzoru\ <Tab>zMzx
+-menutrans C&lose\ more\ folds<Tab>zm	&Vyjmout\ jednu\ úroveò\ foldù<Tab>zm
+-menutrans &Close\ all\ folds<Tab>zM	Zavøí&t\ vechny\ foldy<Tab>zM
+-menutrans O&pen\ more\ folds<Tab>zr	Pøidat\ jedn&u\ úroveò\ foldù<Tab>zr
+-menutrans &Open\ all\ folds<Tab>zR	&Otevøít\ vechny\ foldy<Tab>zR
+-menutrans Fold\ Met&hod			Metoda\ &skládání
+-	"menutrans M&anual			&Ruènì
+-	"menutrans I&ndent			&Odsazení
+-	"menutrans E&xpression			&Výraz
+-	"menutrans S&yntax			&Syntax
+-	"menutrans &Diff			&Diff
+-	"menutrans Ma&rker			Ma&rker
+-menutrans Create\ &Fold<Tab>zf		Vytvoøit\ &fold<Tab>zf
+-menutrans &Delete\ Fold<Tab>zd		Vymazat\ fol&d<Tab>zd
+-menutrans Delete\ &All\ Folds<Tab>zD	V&ymazat\ vechny\ foldy<Tab>zD
+-menutrans Fold\ col&umn\ width		Sloupec\ zob&razení\ foldù
+-
+-menutrans &Update			&Obnovit
+-menutrans &Get\ Block			&Sejmout\ Blok
+-menutrans &Put\ Block			&Vloit\ Blok
++if has("spell")
++   menutrans &Spelling			&Kontrola\ pravopisu
++   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
++   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
++   menutrans To\ &Next\ error<Tab>]s	&Dalí\ chyba<Tab>]s
++   menutrans To\ &Previous\ error<Tab>[s	&Pøedchozí\ chyba<Tab>[s
++   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
++   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
++   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
++   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
++   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
++   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
++   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
++   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
++   menutrans &Find\ More\ Languages	Nalézt\ dalí\ &jazyky
++   let g:menutrans_set_lang_to = "Nastavit jazyk na"
++endif
++
++if has("Folding")   
++   menutrans &Folding			&Skládání
++   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
++   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ øádek\ &kurzoru<Tab>zv
++   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ øádek\ kurzoru\ <Tab>zMzx
++   menutrans C&lose\ more\ folds<Tab>zm	Sloit\ &jednu\ úroveò\ skladù<Tab>zm
++   menutrans &Close\ all\ folds<Tab>zM	Sloit\ vechny\ sklady<Tab>zM
++   menutrans O&pen\ more\ folds<Tab>zr	Pøidat\ jednu\ úroveò\ skladù<Tab>zr
++   menutrans &Open\ all\ folds<Tab>zR	&Otevøít\ vechny\ sklady<Tab>zR
++   menutrans Fold\ Met&hod			&Metoda\ skládání
++   menutrans M&anual			&Ruènì
++   menutrans I&ndent			&Odsazení
++   menutrans E&xpression	&Výraz
++   menutrans S&yntax			&Syntaxe
++   menutrans &Diff			&Rozdíly
++   menutrans Ma&rker			&Znaèky
++   menutrans Create\ &Fold<Tab>zf		Vytvoøit\ &sklad<Tab>zf
++   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
++   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ vechny\ sklady<Tab>zD
++   menutrans Fold\ col&umn\ width		Sloupec\ zob&razení\ skladù
++endif
++
++if has("diff")
++   menutrans &Update			&Obnovit
++   menutrans &Get\ Block			&Sejmout\ Blok
++   menutrans &Put\ Block			&Vloit\ Blok
++endif
++
+ menutrans &Make<Tab>:make		&Make<Tab>:make
+ menutrans &List\ Errors<Tab>:cl		Výpis\ &chyb<Tab>:cl
+ menutrans L&ist\ Messages<Tab>:cl!	Výp&is\ zpráv<Tab>:cl!
+@@ -140,7 +165,7 @@
+ menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
+ menutrans &Open<Tab>:copen		&Otevøít<Tab>:copen
+ menutrans &Close<Tab>:cclose		&Zavøít<Tab>:cclose
+-menutrans &Set\ Compiler		N&astavit\ kompilátor
++menutrans Se&T\ Compiler		N&astavit\ kompilátor
+ 
+ menutrans &Convert\ to\ HEX<Tab>:%!xxd	Pøevést\ do\ estnáctkového\ formát&u<Tab>:%!xxd
+ menutrans Conve&rt\ back<Tab>:%!xxd\ -r Pø&evést\ zpìt<Tab>:%!xxd\ -r
+@@ -168,7 +193,6 @@
+ menutrans &Alternate		&Zmìnit
+ menutrans &Next			&Dalí
+ menutrans &Previous		&Pøedchozí
+-menutrans [No\ File]		[ádný\ soubor]
+ " }}}
+ 
+ " {{{ Menu Window
+@@ -219,6 +243,8 @@
+ menutrans &Delete		&Smazat
+ menutrans Select\ Blockwise	Vybrat\ blokovì
+ menutrans Select\ &Word		Vybrat\ &slovo
++menutrans Select\ Pa&ragraph Vybrat\ &odstavec
++menutrans Select\ &Sentence   Vybrat\ vì&tu
+ menutrans Select\ &Line		Vybrat\ &øádek
+ menutrans Select\ &Block	Vybrat\ &blok
+ menutrans Select\ &All		Vybrat\ &ve
+@@ -226,39 +252,57 @@
+ 
+ " {{{ The GUI toolbar
+ if has("toolbar")
+-  if exists("*Do_toolbar_tmenu")
+-    delfun Do_toolbar_tmenu
+-  endif
+-  fun Do_toolbar_tmenu()
+-    tmenu ToolBar.Open		Otevøít soubor
+-    tmenu ToolBar.Save		Uloit soubor
+-    tmenu ToolBar.SaveAll		Uloit vechny soubory
+-    tmenu ToolBar.Print		Tisk
+-    tmenu ToolBar.Undo		Zpìt
+-    tmenu ToolBar.Redo		Zruit vrácení
+-    tmenu ToolBar.Cut		Vyøíznout
+-    tmenu ToolBar.Copy		Kopírovat
+-    tmenu ToolBar.Paste		Vloit
+-    tmenu ToolBar.Find		Hledat...
+-    tmenu ToolBar.FindNext	Hledat dalí
+-    tmenu ToolBar.FindPrev	Hledat pøedchozí
+-    tmenu ToolBar.Replace		Nahradit...
+-    if 0	" disabled; These are in the Windows menu
+-      tmenu ToolBar.New		Nové okno
+-      tmenu ToolBar.WinSplit	Rozdìlit okno
+-      tmenu ToolBar.WinMax		Maximalizovat okno
+-      tmenu ToolBar.WinMin		Minimalizovat okno
+-      tmenu ToolBar.WinClose	Zavøít okno
+-    endif
+-    tmenu ToolBar.LoadSesn	Naèíst sezení
+-    tmenu ToolBar.SaveSesn	Uloit sezení
+-    tmenu ToolBar.RunScript	Spustit skript
+-    tmenu ToolBar.Make		Spustit make
+-    tmenu ToolBar.Shell		Spustit shell
+-    tmenu ToolBar.RunCtags	Spustit ctags
+-    tmenu ToolBar.TagJump		Skoèit na tag pod kurzorem
+-    tmenu ToolBar.Help		Nápovìda
+-    tmenu ToolBar.FindHelp	Hledat nápovìdu k...
+-  endfun
++   if exists("*Do_toolbar_tmenu")
++      delfun Do_toolbar_tmenu
++   endif
++   fun Do_toolbar_tmenu()
++      tmenu ToolBar.Open		Otevøít soubor
++      tmenu ToolBar.Save		Uloit soubor
++      tmenu ToolBar.SaveAll		Uloit vechny soubory
++      if has("printer") || has("unix")
++         tmenu ToolBar.Print		Tisk
++      endif
++      tmenu ToolBar.Undo		Zpìt
++      tmenu ToolBar.Redo		Zruit vrácení
++      tmenu ToolBar.Cut		Vyøíznout
++      tmenu ToolBar.Copy		Kopírovat
++      tmenu ToolBar.Paste		Vloit
++      tmenu ToolBar.Find		Hledat...
++      tmenu ToolBar.FindNext	Hledat dalí
++      tmenu ToolBar.FindPrev	Hledat pøedchozí
++      tmenu ToolBar.Replace		Nahradit...
++      if 0	" disabled; These are in the Windows menu
++         tmenu ToolBar.New		Nové okno
++         tmenu ToolBar.WinSplit	Rozdìlit okno
++         tmenu ToolBar.WinMax		Maximalizovat okno
++         tmenu ToolBar.WinMin		Minimalizovat okno
++         tmenu ToolBar.WinClose	Zavøít okno
++      endif
++      tmenu ToolBar.LoadSesn	Naèíst sezení
++      tmenu ToolBar.SaveSesn	Uloit sezení
++      tmenu ToolBar.RunScript	Spustit skript
++      tmenu ToolBar.Make		Spustit make
++      tmenu ToolBar.Shell		Spustit shell
++      tmenu ToolBar.RunCtags	Spustit ctags
++      tmenu ToolBar.TagJump		Skoèit na tag pod kurzorem
++      tmenu ToolBar.Help		Nápovìda
++      tmenu ToolBar.FindHelp	Hledat nápovìdu k...
++   endfun
+ endif
+ " }}}
++
++" {{{ DIALOG TEXTS
++let g:menutrans_no_file = "[ádný soubor]"
++let g:menutrans_help_dialog = "Zadejte hledaný pøíkaz nebo slovo:\n\n\tPøidejte i_ pro pøíkazy vkládacího reimu (napø. i_CTRL-X)\n\tPøidejte c_ pro pøíkazy pøíkazové øádky (napø. c_<Del>)\n\tPøidejte ' pro jméno volby (napø. 'shiftwidth')"
++let g:menutrans_path_dialog = "Zadejte cesty pro vyhledávání souborù. Jednotlivé cesty oddìlte èárkou"
++let g:menutrans_tags_dialog = "Zadejte jména souborù s tagy. Jména oddìlte èárkami."
++let g:menutrans_textwidth_dialog = "Zadejte délku øádku (0 pro zakázání formátování):"
++let g:menutrans_fileformat_dialog = "Vyberte typ konce øádkù"
++" }}}" 
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
++
++
++" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
+diff -Naur vim73.orig/runtime/lang/menu_czech_czech_republic.ascii.vim vim73/runtime/lang/menu_czech_czech_republic.ascii.vim
+--- vim73.orig/runtime/lang/menu_czech_czech_republic.ascii.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_czech_czech_republic.ascii.vim	2013-06-07 17:07:15.688963878 +0000
+@@ -1,30 +1,38 @@
+-" Menu Translations:	Czech for systems without localization
+-" Maintainer:		Jiri Brezina <brzj@seznam.cz>
+-" vim:set foldmethod=marker:
+-" $Revision: 1.3 $
+-" $Date: 2005/12/19 22:06:56 $
++" Menu Translations:    Czech (latin1 - w/o diacritics)
++" Maintainer:           Jiri Sedlak <jiri_sedlak@users.sourceforge.net>
++" Previous maintainer:  Jiri Brezina
++" Based on:             menu.vim (2012-10-21)
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+-  finish
++   finish
+ endif
+-let did_menu_trans = 1
+ 
++let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
++scriptencoding latin1
+ 
+ " {{{ File menu
+ menutrans &File				&Soubor
+ menutrans &Open\.\.\.<Tab>:e		&Otevrit\.\.\.<Tab>:e
+ menutrans Sp&lit-Open\.\.\.<Tab>:sp	Otevrit\ v\ no&vem\ okne\.\.\.<Tab>:sp
++menutrans Open\ Tab\.\.\.<Tab>:tabnew	Otevrit\ tab\.\.\.<Tab>:tabnew
+ menutrans &New<Tab>:enew		&Novy<Tab>:enew
+ menutrans &Close<Tab>:close		&Zavrit<Tab>:close
+ menutrans &Save<Tab>:w			&Ulozit<Tab>:w
+ menutrans Save\ &As\.\.\.<Tab>:sav	Ulozit\ &jako\.\.\.<Tab>:sav
+-menutrans Split\ &Diff\ with\.\.\.	Rozdelit\ okno\ -\ &Diff\.\.\.
+-menutrans Split\ Patched\ &By\.\.\.	Rozdelit\ okno\ -\ &Patch\.\.\.
+-menutrans &Print			&Tisk
+-menutrans Sa&ve-Exit<Tab>:wqa		U&lozit\ -\ Konec<Tab>:wqa
+-menutrans E&xit<Tab>:qa			&Konec<Tab>:qa
++if has("printer") || has("unix")
++   menutrans &Print			&Tisk
++endif
++menutrans Sa&ve-Exit<Tab>:wqa		U&lozit\ a\ ukoncit<Tab>:wqa
++menutrans E&xit<Tab>:qa			&Ukoncit<Tab>:qa
++
++if has("diff")
++   menutrans Split\ &Diff\ with\.\.\.	Rozdelit\ okno\ -\ &Diff\.\.\.
++   menutrans Split\ Patched\ &By\.\.\.	Rozdelit\ okno\ -\ &Patch\.\.\.
++endif
+ " }}}
+ 
+ " {{{ Edit menu
+@@ -37,24 +45,32 @@
+ menutrans &Paste<Tab>"+gP		V&lozit<Tab>"+gP
+ menutrans Put\ &Before<Tab>[p		Vlozit\ &pred<Tab>[p
+ menutrans Put\ &After<Tab>]p		Vlozi&t\ za<Tab>]p
+-menutrans &Delete<Tab>x			&Smazat<Tab>x
++if has("win32") || has("win16")
++   menutrans &Delete<Tab>x			&Smazat<Tab>x
++endif
+ menutrans &Select\ All<Tab>ggVG		Vy&brat\ vse<Tab>ggVG
+-menutrans &Find\.\.\.			&Hledat\.\.\.
+-menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
+-menutrans Options\.\.\.			Volb&y\.\.\.
++if has("win32")  || has("win16") || has("gui_gtk") || has("gui_kde") || has("gui_motif")
++   menutrans &Find\.\.\.			&Hledat\.\.\.
++   menutrans Find\ and\ Rep&lace\.\.\.	&Nahradit\.\.\.
++else
++   menutrans Find<Tab>/ &Hledat<Tab>/
++   menutrans Find\ and\ Rep&lace<Tab>:%s  &Nahradit<Tab>:%s
++   menutrans Find\ and\ Rep&lace<Tab>:s   &Nahradit<Tab>:s
++endif
+ menutrans Settings\ &Window		Nastav&eni\ okna
+-	" {{{2 Edit -1
++" {{{2 Edit -1
++menutrans Startup\ &Settings  Pocatecni\ &nastaveni
+ menutrans &Global\ Settings				&Globalni\ nastaveni
+ menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Prepnout\ zvyrazneni\ vzoru<Tab>:set\ hls!
+ menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Prepnout\ ignorovani\ &VERZALEK<Tab>:set\ ic!
+ menutrans Toggle\ &Showmatch<Tab>:set\ sm!		Prepnout\ &Showmatch\ \{\(\[\])\}<Tab>:set\ sm!
+ menutrans &Context\ lines				Zobrazit\ konte&xt\ kurzoru
+ menutrans &Virtual\ Edit				Virtualni\ p&ozice\ kurzoru
+-	menutrans Never						Nikdy
+-	menutrans Block\ Selection				Vyber\ Bloku
+-	menutrans Insert\ mode					Insert\ mod
+-	menutrans Block\ and\ Insert				Blok\ a\ Insert
+-	menutrans Always					Vzdycky
++menutrans Never						Nikdy
++menutrans Block\ Selection				Vyber\ Bloku
++menutrans Insert\ mode					Insert\ mod
++menutrans Block\ and\ Insert				Blok\ a\ Insert
++menutrans Always					Vzdycky
+ menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Prepnout\ Insert\ mo&d<Tab>:set\ im!
+ menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Prepnout\ kompatibilni\ rezim\ s\ 'vi'<Tab>:set\ cp!
+ menutrans Search\ &Path\.\.\.				Nastavit\ &cestu\ k\ prohledavani\.\.\.
+@@ -63,9 +79,10 @@
+ menutrans Toggle\ &Bottom\ Scrollbar			Pr&epnout\ dolni\ rolovaci\ listu
+ menutrans Toggle\ &Left\ Scrollbar			Prepnout\ &levou\ rolovaci\ listu
+ menutrans Toggle\ &Right\ Scrollbar			Prepnout\ p&ravou\ rolovaci\ listu
+-	" {{{2 Edit -2
++" {{{2 Edit -2
+ menutrans F&ile\ Settings				Nastaveni\ so&uboru
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	Prepnout\ cislovani\ ra&dku<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu! Prepnout\ relativni\ cislovani\ ra&dku<Tab>:set\ rnu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list!		Prepnout\ &List\ mod<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		Prepnout\ zala&movani\ radku<Tab>:set\ wrap!
+ menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	Prepnout\ zl&om\ ve\ slove<Tab>:set\ lbr!
+@@ -76,10 +93,12 @@
+ menutrans Soft\ &Tabstop				Nastavit\ Soft\ &Tabstop
+ menutrans Te&xt\ Width\.\.\.				Sirka\ te&xtu\.\.\.
+ menutrans &File\ Format\.\.\.				&Format\ souboru\.\.\.
+-	" {{{2 Edit -3
++" {{{2 Edit -3
+ menutrans C&olor\ Scheme		Barevne\ s&chema
+ menutrans &Keymap			Klavesova\ m&apa
+-menutrans Select\ Fo&nt\.\.\.		Vybrat\ pis&mo\.\.\.
++if has("win32") || has("win16") || has("gui_motif") || has("gui_gtk") || has("gui_kde") || has("gui_photon") || has("gui_mac")
++   menutrans Select\ Fo&nt\.\.\.		Vybrat\ pis&mo\.\.\.
++endif
+ " }}}1
+ 
+ " {{{ Programming menu
+@@ -88,46 +107,52 @@
+ menutrans Jump\ &back<Tab>^T		Skocit\ &zpet<Tab>^T
+ menutrans Build\ &Tags\ File		&Vytvorit\ soubor\ tagu
+ 
+-menutrans &Spelling			&Kontrola\ pravopisu
+-menutrans &Spell\ Check\ On		Kontrola\ pravopisu\ &zapnuta
+-menutrans Spell\ Check\ &Off		Kontrola\ pravopisu\ &vypnuta
+-menutrans To\ Next\ error<Tab>]s	&Dalsi\ chyba<Tab>]s
+-menutrans To\ Previous\ error<Tab>[s	&Predchozi\ chyba<Tab>[s
+-menutrans Suggest\ Corrections<Tab>z?	&Navrh\ oprav<Tab>z?
+-menutrans Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
+-menutrans Set\ language\ to\ "en"	Nastav\ jazyk\ na\ "en"
+-menutrans Set\ language\ to\ "en_au"	Nastav\ jazyk\ na\ "en_au"
+-menutrans Set\ language\ to\ "en_ca"	Nastav\ jazyk\ na\ "en_ca"
+-menutrans Set\ language\ to\ "en_gb"	Nastav\ jazyk\ na\ "en_gb"
+-menutrans Set\ language\ to\ "en_nz"	Nastav\ jazyk\ na\ "en_nz"
+-menutrans Set\ language\ to\ "en_us"	Nastav\ jazyk\ na\ "en_us"
+-menutrans Set\ language\ to\ "cz"	Nastav\ jazyk\ na\ "cz"
+-menutrans Set\ language\ to\ "cs_cz"	Nastav\ jazyk\ na\ "cs_cz"
+-menutrans &Find\ More\ Languages	Nalezt\ dalsi\ &jazyky
+-
+-menutrans &Folding			&Foldy
+-menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
+-menutrans &View\ Cursor\ Line<Tab>zv	&Zobrazit\ radek\ kurzoru<Tab>zv
+-menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zo&brazit\ pouze\ radek\ kurzoru\ <Tab>zMzx
+-menutrans C&lose\ more\ folds<Tab>zm	&Vyjmout\ jednu\ uroven\ foldu<Tab>zm
+-menutrans &Close\ all\ folds<Tab>zM	Zavri&t\ vsechny\ foldy<Tab>zM
+-menutrans O&pen\ more\ folds<Tab>zr	Pridat\ jedn&u\ uroven\ foldu<Tab>zr
+-menutrans &Open\ all\ folds<Tab>zR	&Otevrit\ vsechny\ foldy<Tab>zR
+-menutrans Fold\ Met&hod			Metoda\ &skladani
+-	"menutrans M&anual			&Rucne
+-	"menutrans I&ndent			&Odsazeni
+-	"menutrans E&xpression			&Vyraz
+-	"menutrans S&yntax			&Syntax
+-	"menutrans &Diff			&Diff
+-	"menutrans Ma&rker			Ma&rker
+-menutrans Create\ &Fold<Tab>zf		Vytvorit\ &fold<Tab>zf
+-menutrans &Delete\ Fold<Tab>zd		Vymazat\ fol&d<Tab>zd
+-menutrans Delete\ &All\ Folds<Tab>zD	V&ymazat\ vsechny\ foldy<Tab>zD
+-menutrans Fold\ col&umn\ width		Sloupec\ zob&razeni\ foldu
+-
+-menutrans &Update			&Obnovit
+-menutrans &Get\ Block			&Sejmout\ Blok
+-menutrans &Put\ Block			&Vlozit\ Blok
++if has("spell")
++   menutrans &Spelling			&Kontrola\ pravopisu
++   menutrans &Spell\ Check\ On		&Zapnout\ kontrolu\ pravopisu
++   menutrans Spell\ Check\ &Off		&Vypnout \kontrolu\ pravopisu
++   menutrans To\ &Next\ error<Tab>]s	&Dalsi\ chyba<Tab>]s
++   menutrans To\ &Previous\ error<Tab>[s	&Predchozi\ chyba<Tab>[s
++   menutrans Suggest\ &Corrections<Tab>z=	&Navrhnout\ opravy<Tab>z=
++   menutrans &Repeat\ correction<Tab>:spellrepall	Zopakovat\ &opravu<Tab>:spellrepall
++   menutrans Set\ language\ to\ "en"	Nastavit\ jazyk\ na\ "en"
++   menutrans Set\ language\ to\ "en_au"	Nastavit\ jazyk\ na\ "en_au"
++   menutrans Set\ language\ to\ "en_ca"	Nastavit\ jazyk\ na\ "en_ca"
++   menutrans Set\ language\ to\ "en_gb"	Nastavit\ jazyk\ na\ "en_gb"
++   menutrans Set\ language\ to\ "en_nz"	Nastavit\ jazyk\ na\ "en_nz"
++   menutrans Set\ language\ to\ "en_us"	Nastavit\ jazyk\ na\ "en_us"
++   menutrans &Find\ More\ Languages	Nalezt\ dalsi\ &jazyky
++   let g:menutrans_set_lang_to = "Nastavit jazyk na"
++endif
++
++if has("Folding")   
++   menutrans &Folding			&Skladani
++   menutrans &Enable/Disable\ folds<Tab>zi &Ano/Ne<Tab>zi
++   menutrans &View\ Cursor\ Line<Tab>zv	Zobrazit\ radek\ &kurzoru<Tab>zv
++   menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx		Zobrazit\ &pouze\ radek\ kurzoru\ <Tab>zMzx
++   menutrans C&lose\ more\ folds<Tab>zm	Slozit\ &jednu\ uroven\ skladu<Tab>zm
++   menutrans &Close\ all\ folds<Tab>zM	Slozit\ vsechny\ sklady<Tab>zM
++   menutrans O&pen\ more\ folds<Tab>zr	Pridat\ jednu\ uroven\ skladu<Tab>zr
++   menutrans &Open\ all\ folds<Tab>zR	&Otevrit\ vsechny\ sklady<Tab>zR
++   menutrans Fold\ Met&hod			&Metoda\ skladani
++   menutrans M&anual			&Rucne
++   menutrans I&ndent			&Odsazeni
++   menutrans E&xpression	&Vyraz
++   menutrans S&yntax			&Syntaxe
++   menutrans &Diff			&Rozdily
++   menutrans Ma&rker			&Znacky
++   menutrans Create\ &Fold<Tab>zf		Vytvorit\ &sklad<Tab>zf
++   menutrans &Delete\ Fold<Tab>zd		Vymazat\ skla&d<Tab>zd
++   menutrans Delete\ &All\ Folds<Tab>zD	Vymazat\ vsechny\ sklady<Tab>zD
++   menutrans Fold\ col&umn\ width		Sloupec\ zob&razeni\ skladu
++endif
++
++if has("diff")
++   menutrans &Update			&Obnovit
++   menutrans &Get\ Block			&Sejmout\ Blok
++   menutrans &Put\ Block			&Vlozit\ Blok
++endif
++
+ menutrans &Make<Tab>:make		&Make<Tab>:make
+ menutrans &List\ Errors<Tab>:cl		Vypis\ &chyb<Tab>:cl
+ menutrans L&ist\ Messages<Tab>:cl!	Vyp&is\ zprav<Tab>:cl!
+@@ -140,7 +165,7 @@
+ menutrans &Update<Tab>:cwin		O&bnovit<Tab>:cwin
+ menutrans &Open<Tab>:copen		&Otevrit<Tab>:copen
+ menutrans &Close<Tab>:cclose		&Zavrit<Tab>:cclose
+-menutrans &Set\ Compiler		N&astavit\ kompilator
++menutrans Se&T\ Compiler		N&astavit\ kompilator
+ 
+ menutrans &Convert\ to\ HEX<Tab>:%!xxd	Prevest\ do\ sestnactkoveho\ format&u<Tab>:%!xxd
+ menutrans Conve&rt\ back<Tab>:%!xxd\ -r Pr&evest\ zpet<Tab>:%!xxd\ -r
+@@ -168,7 +193,6 @@
+ menutrans &Alternate		&Zmenit
+ menutrans &Next			&Dalsi
+ menutrans &Previous		&Predchozi
+-menutrans [No\ File]		[Zadny\ soubor]
+ " }}}
+ 
+ " {{{ Menu Window
+@@ -219,6 +243,8 @@
+ menutrans &Delete		&Smazat
+ menutrans Select\ Blockwise	Vybrat\ blokove
+ menutrans Select\ &Word		Vybrat\ &slovo
++menutrans Select\ Pa&ragraph Vybrat\ &odstavec
++menutrans Select\ &Sentence   Vybrat\ ve&tu
+ menutrans Select\ &Line		Vybrat\ &radek
+ menutrans Select\ &Block	Vybrat\ &blok
+ menutrans Select\ &All		Vybrat\ &vse
+@@ -226,39 +252,57 @@
+ 
+ " {{{ The GUI toolbar
+ if has("toolbar")
+-  if exists("*Do_toolbar_tmenu")
+-    delfun Do_toolbar_tmenu
+-  endif
+-  fun Do_toolbar_tmenu()
+-    tmenu ToolBar.Open		Otevrit soubor
+-    tmenu ToolBar.Save		Ulozit soubor
+-    tmenu ToolBar.SaveAll		Ulozit vsechny soubory
+-    tmenu ToolBar.Print		Tisk
+-    tmenu ToolBar.Undo		Zpet
+-    tmenu ToolBar.Redo		Zrusit vraceni
+-    tmenu ToolBar.Cut		Vyriznout
+-    tmenu ToolBar.Copy		Kopirovat
+-    tmenu ToolBar.Paste		Vlozit
+-    tmenu ToolBar.Find		Hledat...
+-    tmenu ToolBar.FindNext	Hledat dalsi
+-    tmenu ToolBar.FindPrev	Hledat predchozi
+-    tmenu ToolBar.Replace		Nahradit...
+-    if 0	" disabled; These are in the Windows menu
+-      tmenu ToolBar.New		Nove okno
+-      tmenu ToolBar.WinSplit	Rozdelit okno
+-      tmenu ToolBar.WinMax		Maximalizovat okno
+-      tmenu ToolBar.WinMin		Minimalizovat okno
+-      tmenu ToolBar.WinClose	Zavrit okno
+-    endif
+-    tmenu ToolBar.LoadSesn	Nacist sezeni
+-    tmenu ToolBar.SaveSesn	Ulozit sezeni
+-    tmenu ToolBar.RunScript	Spustit skript
+-    tmenu ToolBar.Make		Spustit make
+-    tmenu ToolBar.Shell		Spustit shell
+-    tmenu ToolBar.RunCtags	Spustit ctags
+-    tmenu ToolBar.TagJump		Skocit na tag pod kurzorem
+-    tmenu ToolBar.Help		Napoveda
+-    tmenu ToolBar.FindHelp	Hledat napovedu k...
+-  endfun
++   if exists("*Do_toolbar_tmenu")
++      delfun Do_toolbar_tmenu
++   endif
++   fun Do_toolbar_tmenu()
++      tmenu ToolBar.Open		Otevrit soubor
++      tmenu ToolBar.Save		Ulozit soubor
++      tmenu ToolBar.SaveAll		Ulozit vsechny soubory
++      if has("printer") || has("unix")
++         tmenu ToolBar.Print		Tisk
++      endif
++      tmenu ToolBar.Undo		Zpet
++      tmenu ToolBar.Redo		Zrusit vraceni
++      tmenu ToolBar.Cut		Vyriznout
++      tmenu ToolBar.Copy		Kopirovat
++      tmenu ToolBar.Paste		Vlozit
++      tmenu ToolBar.Find		Hledat...
++      tmenu ToolBar.FindNext	Hledat dalsi
++      tmenu ToolBar.FindPrev	Hledat predchozi
++      tmenu ToolBar.Replace		Nahradit...
++      if 0	" disabled; These are in the Windows menu
++         tmenu ToolBar.New		Nove okno
++         tmenu ToolBar.WinSplit	Rozdelit okno
++         tmenu ToolBar.WinMax		Maximalizovat okno
++         tmenu ToolBar.WinMin		Minimalizovat okno
++         tmenu ToolBar.WinClose	Zavrit okno
++      endif
++      tmenu ToolBar.LoadSesn	Nacist sezeni
++      tmenu ToolBar.SaveSesn	Ulozit sezeni
++      tmenu ToolBar.RunScript	Spustit skript
++      tmenu ToolBar.Make		Spustit make
++      tmenu ToolBar.Shell		Spustit shell
++      tmenu ToolBar.RunCtags	Spustit ctags
++      tmenu ToolBar.TagJump		Skocit na tag pod kurzorem
++      tmenu ToolBar.Help		Napoveda
++      tmenu ToolBar.FindHelp	Hledat napovedu k...
++   endfun
+ endif
+ " }}}
++
++" {{{ DIALOG TEXTS
++let g:menutrans_no_file = "[Zadny soubor]"
++let g:menutrans_help_dialog = "Zadejte hledany prikaz nebo slovo:\n\n\tPridejte i_ pro prikazy vkladaciho rezimu (napr. i_CTRL-X)\n\tPridejte c_ pro prikazy prikazove radky (napr. c_<Del>)\n\tPridejte ' pro jmeno volby (napr. 'shiftwidth')"
++let g:menutrans_path_dialog = "Zadejte cesty pro vyhledavani souboru. Jednotlive cesty oddelte carkou"
++let g:menutrans_tags_dialog = "Zadejte jmena souboru s tagy. Jmena oddelte carkami."
++let g:menutrans_textwidth_dialog = "Zadejte delku radku (0 pro zakazani formatovani):"
++let g:menutrans_fileformat_dialog = "Vyberte typ konce radku"
++" }}}" 
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
++
++
++" vim:set foldmethod=marker expandtab tabstop=3 shiftwidth=3:
+diff -Naur vim73.orig/runtime/lang/menu_de_de.latin1.vim vim73/runtime/lang/menu_de_de.latin1.vim
+--- vim73.orig/runtime/lang/menu_de_de.latin1.vim	2010-05-16 13:23:48.000000000 +0000
++++ vim73/runtime/lang/menu_de_de.latin1.vim	2013-06-07 17:07:15.718963793 +0000
+@@ -10,6 +10,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in latin1, but they work for cp1252 and
+ " iso-8859-15 without conversion as well.
+@@ -302,3 +304,6 @@
+ let g:menutrans_textwidth_dialog = "Geben Sie eine neue Text-Breite ein (oder 0, um die Formatierung abzuschalten)"
+ let g:menutrans_fileformat_dialog = "Wählen Sie ein Datei-Format aus"
+ " }}}
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_eo.utf-8.vim vim73/runtime/lang/menu_eo.utf-8.vim
+--- vim73.orig/runtime/lang/menu_eo.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_eo.utf-8.vim	2013-06-07 17:07:15.772296974 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Esperanto
+ " Maintainer:		Dominique PELLE <dominique.pelle@free.fr>
+-" Last Change:		2008 Mar 01
++" Last Change:		2012 May 01
+ " 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -455,3 +457,6 @@
+ menutrans Co&lor\ test				Testo\ de\ &koloroj
+ menutrans &Highlight\ test			Testo\ de\ &emfazo
+ menutrans &Convert\ to\ HTML			Konverti\ al\ &HTML
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_es_es.latin1.vim vim73/runtime/lang/menu_es_es.latin1.vim
+--- vim73.orig/runtime/lang/menu_es_es.latin1.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_es_es.latin1.vim	2013-06-07 17:07:15.828963478 +0000
+@@ -2,7 +2,7 @@
+ " Previous translator:	Alejandro López-Valencia <dradul@users.sourceforge.net>
+ " Last translator:	Omar Campagne Polaino <ocampagne@gmail.com>
+ " Version:		7.2.245
+-" Last Change:		2009 Sep 03
++" Last Change:		2012 May 01
+ "
+ 
+ " Quit when menu translations have already been done.
+@@ -10,6 +10,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in latin1, but they work for cp1252,
+ " iso-8859-15 without conversion as well.
+@@ -316,3 +318,6 @@
+ 
+ " Find Help dialog text
+ let g:menutrans_help_dialog = "Introduzca un nombre de comando o palabra para obtener ayuda;\n\nAnteponga i_ para comandos de entrada (e.g.: i_CTRL-X)\nAnteponga c_ para comandos de la línea de comandos (e.g.: c_<Del>)\nAnteponga ` para un nombre de opción (e.g.: `shiftwidth`)"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_fi_fi.latin1.vim vim73/runtime/lang/menu_fi_fi.latin1.vim
+--- vim73.orig/runtime/lang/menu_fi_fi.latin1.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_fi_fi.latin1.vim	2013-06-07 17:07:15.875630012 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Finnish
+ " Maintainer:		Flammie Pirinen <flammie@iki.fi>
+-" Last Change:		2007 Sep 04
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Translations should be in latin1, if it requires latin9 or even unicode,
+ " change this:
+@@ -470,4 +472,7 @@
+   tmenu ToolBar.FindHelp			Etsi ohjeesta
+ endfun
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim: set fileencoding=latin1
+diff -Naur vim73.orig/runtime/lang/menu_fr_fr.latin1.vim vim73/runtime/lang/menu_fr_fr.latin1.vim
+--- vim73.orig/runtime/lang/menu_fr_fr.latin1.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_fr_fr.latin1.vim	2013-06-07 17:07:15.922296545 +0000
+@@ -2,13 +2,15 @@
+ " Maintainer:		Adrien Beau <version.francaise@free.fr>
+ " First Version:	Francois Thunus <thunus@systran.fr>
+ " Last Modification:    David Blanchet <david.blanchet@free.fr>
+-" Last Change:		2006 Apr 30
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in latin1, but they work for cp1252 and
+ " iso-8859-15 without conversion as well.
+@@ -466,3 +468,6 @@
+ menutrans Co&lor\ test				Tester\ les\ co&uleurs
+ menutrans &Highlight\ test			Tester\ les\ g&roupes\ de\ surbrillance
+ menutrans &Convert\ to\ HTML			Con&vertir\ en\ HTML
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_hu_hu.iso_8859-2.vim vim73/runtime/lang/menu_hu_hu.iso_8859-2.vim
+--- vim73.orig/runtime/lang/menu_hu_hu.iso_8859-2.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_hu_hu.iso_8859-2.vim	2013-06-07 17:07:15.968963079 +0000
+@@ -1,7 +1,7 @@
+ " Menu Translations:	Hungarian (Magyar)
+ " Original Translation:	Zoltán Árpádffy
+ " Maintained By:	Kontra Gergely <kgergely@mcl.hu>
+-" Last Change:		2003 May 31
++" Last Change:		2012 May 01
+ " I'm working on defining (unaccented) hotkeys for everything.
+ " I want to remove y and z hotkeys, because on the hungarian keymap they're at
+ " a differrent place.
+@@ -27,6 +27,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding iso-8859-2
+ 
+@@ -256,3 +258,6 @@
+ let g:menutrans_tags_dialog = "Írd be a tag fájl lehetséges elérési útjait, vesszõvel elválasztva"
+ let g:menutrans_textwidth_dialog = "Írd be a szöveg szélességét (0 = formázás kikapcsolva)"
+ let g:menutrans_fileformat_dialog = "Válaszd ki a fájl formátumát"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_hu_hu.utf-8.vim vim73/runtime/lang/menu_hu_hu.utf-8.vim
+--- vim73.orig/runtime/lang/menu_hu_hu.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_hu_hu.utf-8.vim	2013-06-07 17:07:15.978963050 +0000
+@@ -1,7 +1,7 @@
+ " Menu Translations:	Hungarian (Magyar)
+ " Original Translation:	ZoltÃ¡n ÃrpÃ¡dffy
+ " Maintained By:	Kontra Gergely <kgergely@mcl.hu>
+-" Last Change:		2004 Jun 10
++" Last Change:		2012 May 01
+ "
+ " This file was converted from menu_hu_hu.iso_8859-2.vim.  See there for
+ " remarks.
+@@ -11,6 +11,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -240,3 +242,6 @@
+ let g:menutrans_tags_dialog = "Ãrd be a tag fÃ¡jl lehetsÃ©ges elÃ©rÃ©si Ãºtjait, vesszÅvel elvÃ¡lasztva"
+ let g:menutrans_textwidth_dialog = "Ãrd be a szÃ¶veg szÃ©lessÃ©gÃ©t (0 = formÃ¡zÃ¡s kikapcsolva)"
+ let g:menutrans_fileformat_dialog = "VÃ¡laszd ki a fÃ¡jl formÃ¡tumÃ¡t"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_it_it.latin1.vim vim73/runtime/lang/menu_it_it.latin1.vim
+--- vim73.orig/runtime/lang/menu_it_it.latin1.vim	2010-08-13 07:50:32.000000000 +0000
++++ vim73/runtime/lang/menu_it_it.latin1.vim	2013-06-07 17:07:16.015629612 +0000
+@@ -2,13 +2,15 @@
+ " Maintainer:		Antonio Colombo <azc100@gmail.com>
+ "			Vlad Sandrini <vlad.gently@gmail.com>
+ "			Luciano Montanaro <mikelima@cirulla.net>
+-" Last Change:	2010 Ago 13
++" Last Change:	2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding iso-8859-1
+ 
+@@ -348,4 +350,7 @@
+   endfun
+ endif
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim: set sw=2 :
+diff -Naur vim73.orig/runtime/lang/menu_ja.cp932.vim vim73/runtime/lang/menu_ja.cp932.vim
+--- vim73.orig/runtime/lang/menu_ja.cp932.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_ja.cp932.vim	2013-06-07 17:07:16.038962879 +0000
+@@ -1,5 +1,8 @@
+ " Menu Translations:	Japanese (for Windows)
+-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
+-" Last Change:		29-Apr-2004.
++" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
++" Last Change:		15-Jun-2012.
++"
++" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ source <sfile>:p:h/menu_japanese_japan.932.vim
+diff -Naur vim73.orig/runtime/lang/menu_ja.euc-jp.vim vim73/runtime/lang/menu_ja.euc-jp.vim
+--- vim73.orig/runtime/lang/menu_ja.euc-jp.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_ja.euc-jp.vim	2013-06-07 17:07:16.052296174 +0000
+@@ -1,6 +1,9 @@
+ " Menu Translations:	Japanese (for UNIX)
+-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
+-" Last Change:		08:50:47 25-Mar-2001.
++" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
++" Last Change:		15-Jun-2012.
++"
++" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " eucjp is the same as euc-jp.  Source the other one from here.
+ source <sfile>:p:h/menu_ja_jp.euc-jp.vim
+diff -Naur vim73.orig/runtime/lang/menu_ja.eucjp.vim vim73/runtime/lang/menu_ja.eucjp.vim
+--- vim73.orig/runtime/lang/menu_ja.eucjp.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_ja.eucjp.vim	2013-06-07 17:07:16.082296088 +0000
+@@ -1,6 +1,9 @@
+ " Menu Translations:	Japanese (for UNIX)
+-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
+-" Last Change:		08:50:47 25-Mar-2001.
++" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
++" Last Change:		15-Jun-2012.
++"
++" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " eucjp is the same as euc-jp.  Source the other one from here.
+ source <sfile>:p:h/menu_ja_jp.euc-jp.vim
+diff -Naur vim73.orig/runtime/lang/menu_ja.ujis.vim vim73/runtime/lang/menu_ja.ujis.vim
+--- vim73.orig/runtime/lang/menu_ja.ujis.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_ja.ujis.vim	2013-06-07 17:07:16.098962708 +0000
+@@ -1,6 +1,9 @@
+ " Menu Translations:	Japanese (for UNIX)
+-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
+-" Last Change:		08:50:47 25-Mar-2001.
++" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
++" Last Change:		15-Jun-2012.
++"
++" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " ujis is the same as euc-jp.  Source the other one from here.
+ source <sfile>:p:h/menu_ja_jp.euc-jp.vim
+diff -Naur vim73.orig/runtime/lang/menu_ja_jp.cp932.vim vim73/runtime/lang/menu_ja_jp.cp932.vim
+--- vim73.orig/runtime/lang/menu_ja_jp.cp932.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_ja_jp.cp932.vim	2013-06-07 17:07:16.115629327 +0000
+@@ -1,5 +1,8 @@
+ " Menu Translations:	Japanese (for Windows)
+-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
+-" Last Change:		29-Apr-2004.
++" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
++" Last Change:		15-Jun-2012.
++"
++" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ source <sfile>:p:h/menu_japanese_japan.932.vim
+diff -Naur vim73.orig/runtime/lang/menu_ja_jp.euc-jp.vim vim73/runtime/lang/menu_ja_jp.euc-jp.vim
+--- vim73.orig/runtime/lang/menu_ja_jp.euc-jp.vim	2010-05-15 16:15:11.000000000 +0000
++++ vim73/runtime/lang/menu_ja_jp.euc-jp.vim	2013-06-07 17:07:16.125629298 +0000
+@@ -1,14 +1,19 @@
+ " vi:set ts=8 sts=8 sw=8 tw=0:
+ "
+ " Menu Translations:	Japanese (EUC-JP)
+-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
+-" Last Change:		18-Apr-2006.
++" Translated By:	MURAOKA Taro  <koron.kaoriya@gmail.com>
++" Last Change:		12-May-2013.
++"
++" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding euc-jp
+ 
+@@ -99,6 +104,8 @@
+ menutrans F&ile\ Settings		¥Õ¥¡¥€¥ëÀßÄê(&I)
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
+ 	\	¹ÔÈÖ¹æÉœŒšÀÚÂØ(&N)<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
++	\	ÁêÂÐ¹ÔÈÖ¹æÉœŒšÀÚÂØ(&V)<Tab>:set\ rnu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list!
+ 	\ ¥ê¥¹¥È¥â¡Œ¥ÉÀÚÂØ(&L)<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
+@@ -149,7 +156,7 @@
+ " Tools.Spelling Menu
+ menutrans &Spelling			¥¹¥Ú¥ê¥ó¥°(&S)
+ menutrans &Spell\ Check\ On		¥¹¥Ú¥ë¥Á¥§¥Ã¥¯Í­žú(&S)
+-menutrans Spell\ Check\ &Off		¥¹¥Ú¥ë¥Á¥§¥Ã¥¯Í­žú(&O)
++menutrans Spell\ Check\ &Off		¥¹¥Ú¥ë¥Á¥§¥Ã¥¯Ìµžú(&O)
+ menutrans To\ &Next\ error<Tab>]s	Œ¡€Î¥š¥é¡Œ(&N)<Tab>]s
+ menutrans To\ &Previous\ error<Tab>[s	Á°€Î¥š¥é¡Œ(&P)<Tab>[s
+ menutrans Suggest\ &Corrections<Tab>z=	œ€ÀµžõÊä(&C)<Tab>z=
+@@ -234,6 +241,8 @@
+ menutrans &Delete		ºïœü(&D)
+ menutrans Select\ Blockwise	¶ë·Á¥Ö¥í¥Ã¥¯ÁªÂò
+ menutrans Select\ &Word		Ã±žìÁªÂò(&W)
++menutrans Select\ &Sentence	ÊžÁªÂò(&S)
++menutrans Select\ Pa&ragraph	ÃÊÍîÁªÂò(&R)
+ menutrans Select\ &Line		¹ÔÁªÂò(&L)
+ menutrans Select\ &Block	¥Ö¥í¥Ã¥¯ÁªÂò(&B)
+ menutrans Select\ &All		€¹€Ù€ÆÁªÂò(&A)
+@@ -290,49 +299,8 @@
+ menutrans &Highlight\ test	¥Ï¥€¥é¥€¥È¥Æ¥¹¥È(&H)
+ menutrans &Convert\ to\ HTML	HTML€Ø¥³¥ó¥Ð¡Œ¥È(&C)
+ 
+-" Japanese specific menu
+-" À®ÈÝ€ÏiconvŒ¡Âè¡¢É¬€º€·€â»ØÄê€·€¿¥š¥ó¥³¡Œ¥É€Ë€Ê€ë€ï€±€Ç€Ï€Ê€€€³€È€ËÃí°Õ
+-if has('iconv')
+-  " iconv€Î¥Ð¡Œ¥ž¥ç¥óÈœÄê
+-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
+-  "
+-  " ÆÉ€ß¹þ€ß
+-  an 10.395 &File.-SEPICONV- <Nop>
+-  an 10.396.100.100 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..³«€¯(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
+-  if !support_jisx0213
+-    an 10.396.100.110 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..³«€¯(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
+-    an 10.396.100.120 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..³«€¯(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
+-  else
+-    an 10.396.100.110 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..³«€¯(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
+-    an 10.396.100.120 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..³«€¯(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
+-  endif
+-  an 10.396.100.130 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..³«€¯(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
+-
+-  " ºÆÆÉ¹þ
+-  an 10.396.110.100 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ºÆÆÉ¹þ(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
+-  if !support_jisx0213
+-    an 10.396.110.110 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ºÆÆÉ¹þ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
+-    an 10.396.110.120 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ºÆÆÉ¹þ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
+-  else
+-    an 10.396.110.110 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ºÆÆÉ¹þ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
+-    an 10.396.110.120 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ºÆÆÉ¹þ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
+-  endif
+-  an 10.396.110.130 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ºÆÆÉ¹þ(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
+-
+-  " ÊÝÂž
+-  an 10.396.115 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..-SEP1- <Nop>
+-  an 10.396.120.100 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ÊÝÂž(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
+-  if !support_jisx0213
+-    an 10.396.120.110 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ÊÝÂž(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
+-    an 10.396.120.120 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ÊÝÂž(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
+-  else
+-    an 10.396.120.110 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ÊÝÂž(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
+-    an 10.396.120.120 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ÊÝÂž(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
+-  endif
+-  an 10.396.120.130 &File.¥š¥ó¥³¡Œ¥É»ØÄê(&E)\.\.\..ÊÝÂž(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
+-endif
++let &cpo = s:keepcpo
++unlet s:keepcpo
+ 
+ " filler to avoid the line above being recognized as a modeline
+ " filler
+-" filler
+-" filler
+diff -Naur vim73.orig/runtime/lang/menu_ja_jp.eucjp.vim vim73/runtime/lang/menu_ja_jp.eucjp.vim
+--- vim73.orig/runtime/lang/menu_ja_jp.eucjp.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_ja_jp.eucjp.vim	2013-06-07 17:07:16.135629270 +0000
+@@ -1,6 +1,9 @@
+ " Menu Translations:	Japanese (for UNIX)
+-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
+-" Last Change:		08:50:47 25-Mar-2001.
++" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
++" Last Change:		15-Jun-2012.
++"
++" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " eucjp is the same as euc-jp.  Source the other one from here.
+ source <sfile>:p:h/menu_ja_jp.euc-jp.vim
+diff -Naur vim73.orig/runtime/lang/menu_ja_jp.ujis.vim vim73/runtime/lang/menu_ja_jp.ujis.vim
+--- vim73.orig/runtime/lang/menu_ja_jp.ujis.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_ja_jp.ujis.vim	2013-06-07 17:07:16.148962565 +0000
+@@ -1,6 +1,9 @@
+ " Menu Translations:	Japanese (for UNIX)
+-" Translated By:	Muraoka Taro  <koron@tka.att.ne.jp>
+-" Last Change:		08:50:47 25-Mar-2001.
++" Translated By:	MURAOKA Taro <koron.kaoriya@gmail.com>
++" Last Change:		15-Jun-2012.
++"
++" Copyright (C) 2004,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " ujis is the same as euc-jp.  Source the other one from here.
+ source <sfile>:p:h/menu_ja_jp.euc-jp.vim
+diff -Naur vim73.orig/runtime/lang/menu_ja_jp.utf-8.vim vim73/runtime/lang/menu_ja_jp.utf-8.vim
+--- vim73.orig/runtime/lang/menu_ja_jp.utf-8.vim	2010-05-15 16:15:11.000000000 +0000
++++ vim73/runtime/lang/menu_ja_jp.utf-8.vim	2013-06-07 17:07:16.165629184 +0000
+@@ -1,14 +1,19 @@
+ " vi:set ts=8 sts=8 sw=8 tw=0:
+ "
+ " Menu Translations:	Japanese (UTF-8)
+-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
+-" Last Change:		18-Apr-2006.
++" Translated By:	MURAOKA Taro  <koron.kaoriya@gmail.com>
++" Last Change:		12-May-2013.
++"
++" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -99,6 +104,8 @@
+ menutrans F&ile\ Settings		ãã¡ã€ã«èš­å®(&I)
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
+ 	\	è¡çªå·è¡šç€ºåæ¿(&N)<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
++	\	çžå¯Ÿè¡çªå·è¡šç€ºåæ¿(&V)<Tab>:set\ rnu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list!
+ 	\ ãªã¹ãã¢ãŒãåæ¿(&L)<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
+@@ -149,7 +156,7 @@
+ " Tools.Spelling Menu
+ menutrans &Spelling			ã¹ããªã³ã°(&S)
+ menutrans &Spell\ Check\ On		ã¹ãã«ãã§ãã¯æå¹(&S)
+-menutrans Spell\ Check\ &Off		ã¹ãã«ãã§ãã¯æå¹(&O)
++menutrans Spell\ Check\ &Off		ã¹ãã«ãã§ãã¯ç¡å¹(&O)
+ menutrans To\ &Next\ error<Tab>]s	æ¬¡ã®ãšã©ãŒ(&N)<Tab>]s
+ menutrans To\ &Previous\ error<Tab>[s	åã®ãšã©ãŒ(&P)<Tab>[s
+ menutrans Suggest\ &Corrections<Tab>z=	ä¿®æ­£åè£(&C)<Tab>z=
+@@ -234,6 +241,8 @@
+ menutrans &Delete		åé€(&D)
+ menutrans Select\ Blockwise	ç©åœ¢ãã­ãã¯éžæ
+ menutrans Select\ &Word		åèªéžæ(&W)
++menutrans Select\ &Sentence	æéžæ(&S)
++menutrans Select\ Pa&ragraph	æ®µèœéžæ(&R)
+ menutrans Select\ &Line		è¡éžæ(&L)
+ menutrans Select\ &Block	ãã­ãã¯éžæ(&B)
+ menutrans Select\ &All		ãã¹ãŠéžæ(&A)
+@@ -290,49 +299,8 @@
+ menutrans &Highlight\ test	ãã€ã©ã€ããã¹ã(&H)
+ menutrans &Convert\ to\ HTML	HTMLãžã³ã³ããŒã(&C)
+ 
+-" Japanese specific menu
+-" æåŠã¯iconvæ¬¡ç¬¬ãå¿
+ãããæå®ãããšã³ã³ãŒãã«ãªãããã§ã¯ãªãããšã«æ³šæ
+-if has('iconv')
+-  " iconvã®ããŒãžã§ã³å€å®
+-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
+-  "
+-  " èª­ã¿èŸŒã¿
+-  an 10.395 &File.-SEPICONV- <Nop>
+-  an 10.396.100.100 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..éã(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
+-  if !support_jisx0213
+-    an 10.396.100.110 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..éã(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
+-    an 10.396.100.120 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..éã(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
+-  else
+-    an 10.396.100.110 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..éã(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
+-    an 10.396.100.120 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..éã(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
+-  endif
+-  an 10.396.100.130 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..éã(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
+-
+-  " åèª­èŸŒ
+-  an 10.396.110.100 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..åèª­èŸŒ(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
+-  if !support_jisx0213
+-    an 10.396.110.110 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..åèª­èŸŒ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
+-    an 10.396.110.120 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..åèª­èŸŒ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
+-  else
+-    an 10.396.110.110 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..åèª­èŸŒ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
+-    an 10.396.110.120 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..åèª­èŸŒ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
+-  endif
+-  an 10.396.110.130 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..åèª­èŸŒ(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
+-
+-  " ä¿å­
+-  an 10.396.115 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..-SEP1- <Nop>
+-  an 10.396.120.100 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..ä¿å­(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
+-  if !support_jisx0213
+-    an 10.396.120.110 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..ä¿å­(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
+-    an 10.396.120.120 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..ä¿å­(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
+-  else
+-    an 10.396.120.110 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..ä¿å­(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
+-    an 10.396.120.120 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..ä¿å­(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
+-  endif
+-  an 10.396.120.130 &File.ãšã³ã³ãŒãæå®(&E)\.\.\..ä¿å­(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
+-endif
++let &cpo = s:keepcpo
++unlet s:keepcpo
+ 
+ " filler to avoid the line above being recognized as a modeline
+ " filler
+-" filler
+-" filler
+diff -Naur vim73.orig/runtime/lang/menu_japanese_japan.932.vim vim73/runtime/lang/menu_japanese_japan.932.vim
+--- vim73.orig/runtime/lang/menu_japanese_japan.932.vim	2010-05-15 16:15:11.000000000 +0000
++++ vim73/runtime/lang/menu_japanese_japan.932.vim	2013-06-07 17:07:16.175629155 +0000
+@@ -1,14 +1,19 @@
+ " vi:set ts=8 sts=8 sw=8 tw=0:
+ "
+ " Menu Translations:	Japanese (CP932)
+-" Translated By:	MURAOKA Taro  <koron@tka.att.ne.jp>
+-" Last Change:		18-Apr-2006.
++" Translated By:	MURAOKA Taro  <koron.kaoriya@gmail.com>
++" Last Change:		12-May-2013.
++"
++" Copyright (C) 2001-13 MURAOKA Taro <koron.kaoriya@gmail.com>
++" THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding cp932
+ 
+@@ -99,6 +104,8 @@
+ menutrans F&ile\ Settings		t@CÝè(&I)
+ menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!
+ 	\	sÔ\ŠØÖ(&N)<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!
++	\	ÎsÔ\ŠØÖ(&V)<Tab>:set\ rnu!
+ menutrans Toggle\ &List\ Mode<Tab>:set\ list!
+ 	\ Xg[hØÖ(&L)<Tab>:set\ list!
+ menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!
+@@ -149,7 +156,7 @@
+ " Tools.Spelling Menu
+ menutrans &Spelling			XyO(&S)
+ menutrans &Spell\ Check\ On		Xy`FbNLø(&S)
+-menutrans Spell\ Check\ &Off		Xy`FbNLø(&O)
++menutrans Spell\ Check\ &Off		Xy`FbN³ø(&O)
+ menutrans To\ &Next\ error<Tab>]s	ÌG[(&N)<Tab>]s
+ menutrans To\ &Previous\ error<Tab>[s	OÌG[(&P)<Tab>[s
+ menutrans Suggest\ &Corrections<Tab>z=	C³óâ(&C)<Tab>z=
+@@ -234,6 +241,8 @@
+ menutrans &Delete		í(&D)
+ menutrans Select\ Blockwise	é`ubNIð
+ menutrans Select\ &Word		PêIð(&W)
++menutrans Select\ &Sentence	¶Ið(&S)
++menutrans Select\ Pa&ragraph	iIð(&R)
+ menutrans Select\ &Line		sIð(&L)
+ menutrans Select\ &Block	ubNIð(&B)
+ menutrans Select\ &All		·×ÄIð(&A)
+@@ -290,49 +299,8 @@
+ menutrans &Highlight\ test	nCCgeXg(&H)
+ menutrans &Convert\ to\ HTML	HTMLÖRo[g(&C)
+ 
+-" Japanese specific menu
+-" ¬ÛÍiconvæAKžµàwèµœGR[hÉÈéí¯ÅÍÈ¢±ÆÉÓ
+-if has('iconv')
+-  " iconvÌo[W»è
+-  let support_jisx0213 = (iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb") ? 1 : 0
+-  "
+-  " ÇÝÝ
+-  an 10.395 &File.-SEPICONV- <Nop>
+-  an 10.396.100.100 &File.GR[hwè(&E)\.\.\..J­(&O)\.\.\..SJIS(&S)<Tab>fenc=cp932 :browse confirm e ++enc=cp932<CR>
+-  if !support_jisx0213
+-    an 10.396.100.110 &File.GR[hwè(&E)\.\.\..J­(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jp :browse confirm e ++enc=euc-jp<CR>
+-    an 10.396.100.120 &File.GR[hwè(&E)\.\.\..J­(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :browse confirm e ++enc=iso-2022-jp<CR>
+-  else
+-    an 10.396.100.110 &File.GR[hwè(&E)\.\.\..J­(&O)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :browse confirm e ++enc=euc-jisx0213<CR>
+-    an 10.396.100.120 &File.GR[hwè(&E)\.\.\..J­(&O)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :browse confirm e ++enc=iso-2022-jp-3<CR>
+-  endif
+-  an 10.396.100.130 &File.GR[hwè(&E)\.\.\..J­(&O)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :browse confirm e ++enc=utf-8<CR>
+-
+-  " ÄÇ
+-  an 10.396.110.100 &File.GR[hwè(&E)\.\.\..ÄÇ(&R)\.\.\..SJIS(&S)<Tab>fenc=cp932 :e ++enc=cp932<CR>
+-  if !support_jisx0213
+-    an 10.396.110.110 &File.GR[hwè(&E)\.\.\..ÄÇ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jp :e ++enc=euc-jp<CR>
+-    an 10.396.110.120 &File.GR[hwè(&E)\.\.\..ÄÇ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :e ++enc=iso-2022-jp<CR>
+-  else
+-    an 10.396.110.110 &File.GR[hwè(&E)\.\.\..ÄÇ(&R)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :e ++enc=euc-jisx0213<CR>
+-    an 10.396.110.120 &File.GR[hwè(&E)\.\.\..ÄÇ(&R)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :e ++enc=iso-2022-jp-3<CR>
+-  endif
+-  an 10.396.110.130 &File.GR[hwè(&E)\.\.\..ÄÇ(&R)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :e ++enc=utf-8<CR>
+-
+-  " Û¶
+-  an 10.396.115 &File.GR[hwè(&E)\.\.\..-SEP1- <Nop>
+-  an 10.396.120.100 &File.GR[hwè(&E)\.\.\..Û¶(&S)\.\.\..SJIS(&S)<Tab>fenc=cp932 :set fenc=cp932 \| w<CR>
+-  if !support_jisx0213
+-    an 10.396.120.110 &File.GR[hwè(&E)\.\.\..Û¶(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jp :set fenc=euc-jp \| w<CR>
+-    an 10.396.120.120 &File.GR[hwè(&E)\.\.\..Û¶(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp :set fenc=iso-2022-jp \| w<CR>
+-  else
+-    an 10.396.120.110 &File.GR[hwè(&E)\.\.\..Û¶(&S)\.\.\..EUC(&E)<Tab>fenc=euc-jisx0213 :set fenc=euc-jisx0213 \| w<CR>
+-    an 10.396.120.120 &File.GR[hwè(&E)\.\.\..Û¶(&S)\.\.\..JIS(&J)<Tab>fenc=iso-2022-jp-3 :set fenc=iso-2022-jp-3 \| w<CR>
+-  endif
+-  an 10.396.120.130 &File.GR[hwè(&E)\.\.\..Û¶(&S)\.\.\..UTF-8(&8)<Tab>fenc=utf-8 :set fenc=utf-8 \| w<CR>
+-endif
++let &cpo = s:keepcpo
++unlet s:keepcpo
+ 
+ " filler to avoid the line above being recognized as a modeline
+ " filler
+-" filler
+-" filler
+diff -Naur vim73.orig/runtime/lang/menu_ko_kr.euckr.vim vim73/runtime/lang/menu_ko_kr.euckr.vim
+--- vim73.orig/runtime/lang/menu_ko_kr.euckr.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_ko_kr.euckr.vim	2013-06-07 17:07:16.182295803 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Korean
+ " Maintainer:		SungHyun Nam <goweol@gmail.com>
+-" Last Change:		2010 Feb 18
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding euc-kr
+ 
+@@ -42,7 +44,7 @@
+ " Edit menu
+ menutrans &Edit				ÆíÁý(&E)
+ menutrans &Undo<Tab>u			ÃëŒÒ(&U)<Tab>u
+-menutrans &Redo<Tab>^R			ŽÙœÃ œÇÇà(&R)<Tab>^R
++menutrans &Redo<Tab>^R			ŽÙœÃ\ œÇÇà(&R)<Tab>^R
+ menutrans Rep&eat<Tab>\.		µÇÇ®ÀÌ(&e)<Tab>\.
+ menutrans Cu&t<Tab>"+x			ÀÚž£±â(&t)<Tab>"+x
+ menutrans &Copy<Tab>"+y			º¹»ç(&C)<Tab>"+y
+@@ -63,7 +65,7 @@
+ menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ Åä±Û(&S)<Tab>:set\ sm!
+ menutrans &Context\ lines		ÄÜÅØœºÆ®\ ÁÙ(&C)
+ menutrans &Virtual\ Edit		°¡»ó\ ÆíÁý(&V)
+-menutrans Never				»ç¿ë ŸÈ ÇÔ
++menutrans Never				»ç¿ë\ ŸÈ\ ÇÔ
+ menutrans Block\ Selection		ºí·°\ °íž£±â
+ menutrans Insert\ mode			»ðÀÔ\ žðµå
+ menutrans Block\ and\ Insert		ºí·°°ú\ »ðÀÔ
+@@ -92,7 +94,7 @@
+ menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-ÀÎµ§ÆÃ\ Åä±Û(&C)<Tab>:set\ cin!
+ 
+ " other options
+-menutrans &Shiftwidth			œ¬ÇÁÆ® ³Êºñ(&S)
++menutrans &Shiftwidth			œ¬ÇÁÆ®\ ³Êºñ(&S)
+ menutrans Soft\ &Tabstop		ŒÒÇÁÆ®\ ÅÇœºÅé(&T)
+ menutrans Te&xt\ Width\.\.\.		ÅØœºÆ®\ ³Êºñ(&x)\.\.\.
+ menutrans &File\ Format\.\.\.		ÆÄÀÏ\ ÇüœÄ(&F)\.\.\.
+@@ -125,12 +127,12 @@
+ " Tools.Fold Menu
+ menutrans &Folding			Á¢±â(&F)
+ " open close folds
+-menutrans &Enable/Disable\ folds<Tab>zi	Á¢ŽÂ\ ±âŽÉ\ »ç¿ë\ Åä±Û(&E)<Tab>zi
++menutrans &Enable/Disable\ folds<Tab>zi	Á¢±â\ »ç¿ë\ Åä±Û(&E)<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv	Ä¿Œ­\ ÁÙ\ ºž±â(&V)<Tab>zv
+ menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx Ä¿Œ­\ ÁÙžž\ ºž±â(&w)<Tab>zMzx
+ menutrans C&lose\ more\ folds<Tab>zm	Žõ\ ž¹Àº\ Á¢±â\ ŽÝ±â(&l)<Tab>zm
+-menutrans &Close\ all\ folds<Tab>zM	Á¢Èù\ ºÎºÐ\ žðµÎ\ Á¢±â(&C)<Tab>zM
+-menutrans O&pen\ more\ folds<Tab>zr	Žõ ž¹Àº\ Á¢±â\ ¿­±â(&p)<Tab>zr
++menutrans &Close\ all\ folds<Tab>zM	žðµç\ Á¢±â\ ŽÝ±â(&C)<Tab>zM
++menutrans O&pen\ more\ folds<Tab>zr	Žõ\ ž¹Àº\ Á¢±â\ ¿­±â(&p)<Tab>zr
+ menutrans &Open\ all\ folds<Tab>zR	Á¢Èù\ ºÎºÐ\ žðµÎ\ Æì±â(&O)<Tab>zR
+ " fold method
+ menutrans Fold\ Met&hod			Á¢ŽÂ\ ¹æ¹ý(&h)
+@@ -141,11 +143,11 @@
+ "menutrans &Diff				&Diff
+ menutrans Ma&rker			²¿ž®Ç¥(&r)
+ " create and delete folds
+-menutrans Create\ &Fold<Tab>zf		»õ·Î Á¢±â(&F)<Tab>zf
+-menutrans &Delete\ Fold<Tab>zd		¿ÏÀüÈ÷ Æì±â(&D)<Tab>zd
+-menutrans Delete\ &All\ Folds<Tab>zD	žðµÎ\ Æì±â(&A)<Tab>zD
++menutrans Create\ &Fold<Tab>zf		Á¢±â\ »ýŒº(&F)<Tab>zf
++menutrans &Delete\ Fold<Tab>zd		Á¢±â\ »èÁŠ(&D)<Tab>zd
++menutrans Delete\ &All\ Folds<Tab>zD	žðµç\ Á¢±â\ »èÁŠ(&A)<Tab>zD
+ " moving around in folds
+-menutrans Fold\ column\ &width		Á¢À»\ Ä­\ ³Êºñ(&w)
++menutrans Fold\ column\ &width		Á¢±â\ ÄÃ·³\ ³Êºñ(&w)
+ 
+ "menutrans &Diff				&Diff
+ menutrans &Update			°»œÅ(&U)
+@@ -259,3 +261,5 @@
+ menutrans &Highlight\ test	Highlight\ œÃÇè(&H)
+ menutrans &Convert\ to\ HTML	HTML·Î\ º¯È¯(&C)
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_ko_kr.utf-8.vim vim73/runtime/lang/menu_ko_kr.utf-8.vim
+--- vim73.orig/runtime/lang/menu_ko_kr.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_ko_kr.utf-8.vim	2013-06-07 17:07:16.208962394 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Korean
+ " Maintainer:		SungHyun Nam <goweol@gmail.com>
+-" Last Change:		2010 Feb 18
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -42,7 +44,7 @@
+ " Edit menu
+ menutrans &Edit				ížì§(&E)
+ menutrans &Undo<Tab>u			ì·šì(&U)<Tab>u
+-menutrans &Redo<Tab>^R			ë€ì ì€í(&R)<Tab>^R
++menutrans &Redo<Tab>^R			ë€ì\ ì€í(&R)<Tab>^R
+ menutrans Rep&eat<Tab>\.		ëíìŽ(&e)<Tab>\.
+ menutrans Cu&t<Tab>"+x			ìë¥Žêž°(&t)<Tab>"+x
+ menutrans &Copy<Tab>"+y			ë³µì¬(&C)<Tab>"+y
+@@ -63,7 +65,7 @@
+ menutrans Toggle\ &Showmatch<Tab>:set\ sm! Showmatch\ í êž(&S)<Tab>:set\ sm!
+ menutrans &Context\ lines		ìœí
+ì€íž\ ì€(&C)
+ menutrans &Virtual\ Edit		ê°ì\ ížì§(&V)
+-menutrans Never				ì¬ì© ì íš
++menutrans Never				ì¬ì©\ ì\ íš
+ menutrans Block\ Selection		ëžë­\ ê³ ë¥Žêž°
+ menutrans Insert\ mode			ìœì
+\ ëªšë
+ menutrans Block\ and\ Insert		ëžë­ê³Œ\ ìœì
+
+@@ -92,7 +94,7 @@
+ menutrans Toggle\ &C-indenting<Tab>:set\ cin! C-ìžëŽí
+\ í êž(&C)<Tab>:set\ cin!
+ 
+ " other options
+-menutrans &Shiftwidth			ì¬ííž ëë¹(&S)
++menutrans &Shiftwidth			ì¬ííž\ ëë¹(&S)
+ menutrans Soft\ &Tabstop		ìííž\ í­ì€í±(&T)
+ menutrans Te&xt\ Width\.\.\.		í
+ì€íž\ ëë¹(&x)\.\.\.
+ menutrans &File\ Format\.\.\.		íìŒ\ íì(&F)\.\.\.
+@@ -125,12 +127,12 @@
+ " Tools.Fold Menu
+ menutrans &Folding			ì êž°(&F)
+ " open close folds
+-menutrans &Enable/Disable\ folds<Tab>zi	ì ë\ êž°ë¥\ ì¬ì©\ í êž(&E)<Tab>zi
++menutrans &Enable/Disable\ folds<Tab>zi	ì êž°\ ì¬ì©\ í êž(&E)<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv	ì»€ì\ ì€\ ë³Žêž°(&V)<Tab>zv
+ menutrans Vie&w\ Cursor\ Line\ only<Tab>zMzx ì»€ì\ ì€ë§\ ë³Žêž°(&w)<Tab>zMzx
+ menutrans C&lose\ more\ folds<Tab>zm	ë\ ë§ì\ ì êž°\ ë«êž°(&l)<Tab>zm
+-menutrans &Close\ all\ folds<Tab>zM	ì í\ ë¶ë¶\ ëªšë\ ì êž°(&C)<Tab>zM
+-menutrans O&pen\ more\ folds<Tab>zr	ë ë§ì\ ì êž°\ ìŽêž°(&p)<Tab>zr
++menutrans &Close\ all\ folds<Tab>zM	ëªšë \ ì êž°\ ë«êž°(&C)<Tab>zM
++menutrans O&pen\ more\ folds<Tab>zr	ë\ ë§ì\ ì êž°\ ìŽêž°(&p)<Tab>zr
+ menutrans &Open\ all\ folds<Tab>zR	ì í\ ë¶ë¶\ ëªšë\ íŽêž°(&O)<Tab>zR
+ " fold method
+ menutrans Fold\ Met&hod			ì ë\ ë°©ë²(&h)
+@@ -141,11 +143,11 @@
+ "menutrans &Diff				&Diff
+ menutrans Ma&rker			êŒ¬ëŠ¬í(&r)
+ " create and delete folds
+-menutrans Create\ &Fold<Tab>zf		ìë¡ ì êž°(&F)<Tab>zf
+-menutrans &Delete\ Fold<Tab>zd		ìì í íŽêž°(&D)<Tab>zd
+-menutrans Delete\ &All\ Folds<Tab>zD	ëªšë\ íŽêž°(&A)<Tab>zD
++menutrans Create\ &Fold<Tab>zf		ì êž°\ ìì±(&F)<Tab>zf
++menutrans &Delete\ Fold<Tab>zd		ì êž°\ ì­ì (&D)<Tab>zd
++menutrans Delete\ &All\ Folds<Tab>zD	ëªšë \ ì êž°\ ì­ì (&A)<Tab>zD
+ " moving around in folds
+-menutrans Fold\ column\ &width		ì ì\ ì¹ž\ ëë¹(&w)
++menutrans Fold\ column\ &width		ì êž°\ ì»¬ëŒ\ ëë¹(&w)
+ 
+ "menutrans &Diff				&Diff
+ menutrans &Update			ê°±ì (&U)
+@@ -259,3 +261,5 @@
+ menutrans &Highlight\ test	Highlight\ ìí(&H)
+ menutrans &Convert\ to\ HTML	HTMLë¡\ ë³í(&C)
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_nl_nl.latin1.vim vim73/runtime/lang/menu_nl_nl.latin1.vim
+--- vim73.orig/runtime/lang/menu_nl_nl.latin1.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_nl_nl.latin1.vim	2013-06-07 17:07:16.258962251 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Nederlands
+ " Maintainer:		Bram Moolenaar
+-" Last Change:	2004 May 05
++" Last Change:	2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in latin1, but they work for cp1252 and
+ " iso-8859-15 without conversion as well.
+@@ -238,3 +240,6 @@
+ let g:menutrans_tags_dialog = "Typ namen van tag bestanden.\nGebruik commas tussen de namen."
+ let g:menutrans_textwidth_dialog = "Typ de nieuwe tekst breedte (0 om formatteren uit the schakelen): "
+ let g:menutrans_fileformat_dialog = "Selecteer formaat voor het schrijven van het bestand"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_no_no.latin1.vim vim73/runtime/lang/menu_no_no.latin1.vim
+--- vim73.orig/runtime/lang/menu_no_no.latin1.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_no_no.latin1.vim	2013-06-07 17:07:16.295628813 +0000
+@@ -1,6 +1,6 @@
+ " Menu Translations:	Norwegian / Norsk (Bokmål)
+ " Maintainer:		Øyvind A. Holm <sunny@sunbase.org>
+-" Last Change:		2004-05-16 20:00:52 +0200
++" Last Change:		2012 May 01
+ " menu_no_no.latin1.vim 289 2004-05-16 18:00:52Z sunny
+ 
+ " Quit when menu translations have already been done.
+@@ -8,6 +8,8 @@
+ 	finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in ISO-8859-1, but they work for ISO-8859-15 and
+ " CP1252 without conversion as well.
+@@ -229,5 +231,8 @@
+ 	let g:menutrans_textwidth_dialog = "Velg ny tekstbredde (0 for å forhindre formatering): "
+ 	let g:menutrans_fileformat_dialog = "Velg filformat som filen skal lagres med"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ "    vim: set ts=8 sw=8 :
+ " vim600: set fdm=indent :
+diff -Naur vim73.orig/runtime/lang/menu_pl_pl.iso_8859-2.vim vim73/runtime/lang/menu_pl_pl.iso_8859-2.vim
+--- vim73.orig/runtime/lang/menu_pl_pl.iso_8859-2.vim	2010-05-18 20:12:10.000000000 +0000
++++ vim73/runtime/lang/menu_pl_pl.iso_8859-2.vim	2013-06-07 17:07:16.342295346 +0000
+@@ -8,6 +8,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding iso-8859-2
+ 
+@@ -285,3 +287,6 @@
+ let g:menutrans_textwidth_dialog = "WprowadŒ now± szeroko¶æ tekstu (0 wy³±cza przewijanie): "
+ let g:menutrans_fileformat_dialog = "Wybierz format w którym ten plik ma byæ zapisany"
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_pl_pl.utf-8.vim vim73/runtime/lang/menu_pl_pl.utf-8.vim
+--- vim73.orig/runtime/lang/menu_pl_pl.utf-8.vim	2010-05-18 20:08:13.000000000 +0000
++++ vim73/runtime/lang/menu_pl_pl.utf-8.vim	2013-06-07 17:07:16.358961965 +0000
+@@ -8,6 +8,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -285,3 +287,6 @@
+ let g:menutrans_textwidth_dialog = "WprowadÅº nowÄ
+ szerokoÅÄ tekstu (0 wyÅÄ
+cza przewijanie): "
+ let g:menutrans_fileformat_dialog = "Wybierz format w ktÃ³rym ten plik ma byÄ zapisany"
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_polish_poland.1250.vim vim73/runtime/lang/menu_polish_poland.1250.vim
+--- vim73.orig/runtime/lang/menu_polish_poland.1250.vim	2010-05-18 20:12:51.000000000 +0000
++++ vim73/runtime/lang/menu_polish_poland.1250.vim	2013-06-07 17:07:16.382295232 +0000
+@@ -8,6 +8,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding cp1250
+ 
+@@ -285,3 +287,6 @@
+ let g:menutrans_textwidth_dialog = "Wprowad now¹ szerokoæ tekstu (0 wy³¹cza przewijanie): "
+ let g:menutrans_fileformat_dialog = "Wybierz format w którym ten plik ma byæ zapisany"
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Anuluj"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_pt_br.vim vim73/runtime/lang/menu_pt_br.vim
+--- vim73.orig/runtime/lang/menu_pt_br.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_pt_br.vim	2013-06-07 17:07:16.412295146 +0000
+@@ -1,6 +1,6 @@
+ " Menu Translations: Português do Brasil
+ " Maintainer: José de Paula <jose@infoviaweb.com>
+-" Last Change: 2006-09-19 02:30:00-03:00
++" Last Change: 2012 May 01
+ "
+ 
+ " Quit when menu translations have already been done.
+@@ -8,6 +8,8 @@
+ 	finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Translations in latin1 (ISO-8859-1), and should work in
+ " latin9 (ISO-8859-15)
+@@ -283,3 +285,6 @@
+ 
+ " Find Help dialog text
+ let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opção (ex.: `shiftwidth`)"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_pt_pt.vim vim73/runtime/lang/menu_pt_pt.vim
+--- vim73.orig/runtime/lang/menu_pt_pt.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_pt_pt.vim	2013-06-07 17:07:16.445628384 +0000
+@@ -7,6 +7,8 @@
+ 	finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Translations in latin1 (ISO-8859-1), and should work in
+ " latin9 (ISO-8859-15)
+@@ -262,3 +264,6 @@
+ 
+ " Find Help dialog text
+ let g:menutrans_help_dialog = "Digite um comando ou palavra para obter ajuda;\n\nAnteponha i_ para comandos de entrada (ex.: i_CTRL-X)\nAnteponha c_ para comandos da linha de comandos (ex.: c_<Del>)\nAnteponha ` para um nome de opção (ex.: `shiftwidth`)"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_ru_ru.koi8-r.vim vim73/runtime/lang/menu_ru_ru.koi8-r.vim
+--- vim73.orig/runtime/lang/menu_ru_ru.koi8-r.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_ru_ru.koi8-r.vim	2013-06-07 17:07:16.462295004 +0000
+@@ -1,9 +1,10 @@
+ " Menu Translations:	Russian
+-" Maintainer:		vassily ragosin <vrr[at]users.sourceforge.net>
+-" Last Change:		26 Apr 2004
++" Maintainer:		Sergey Alyoshin <alyoshin.s@gmail.com>
++" Previous Maintainer:	vassily ragosin <vrr[at]users.sourceforge.net>
++" Last Change:		29 May 2013
+ " URL:			cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
+ "
+-" $Id: menu_ru_ru.koi8-r.vim,v 1.2 2004/06/16 11:19:21 vimboss Exp $
++" $Id: menu_ru_ru.vim,v 1.1 2004/06/13 16:09:10 vimboss Exp $
+ "
+ " Adopted for RuVim project by Vassily Ragosin.
+ " First translation: Tim Alexeevsky <realtim [at] mail.ru>,
+@@ -16,6 +17,8 @@
+    finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding koi8-r
+ 
+@@ -48,6 +51,7 @@
+ " File menu
+ menutrans &Open\.\.\.<Tab>:e		&ïÔËÒÙÔØ\.\.\.<Tab>:e
+ menutrans Sp&lit-Open\.\.\.<Tab>:sp	ðÏ&ÄÅÌÉÔØ\ ÏËÎÏ\.\.\.<Tab>:sp
++menutrans Open\ Tab\.\.\.<Tab>:tabnew	ïÔËÒÙÔØ\ ×&ËÌÁÄËÕ\.\.\.<Tab>:tabnew
+ menutrans &New<Tab>:enew		&îÏ×ÙÊ<Tab>:enew
+ menutrans &Close<Tab>:close		&úÁËÒÙÔØ<Tab>:close
+ "--------------------
+@@ -75,51 +79,57 @@
+ menutrans &Delete<Tab>x			&õÄÁÌÉÔØ<Tab>x
+ menutrans &Select\ All<Tab>ggVG		÷&ÙÄÅÌÉÔØ\ ×Ó£<Tab>ggVG
+ "--------------------
++" Athena GUI only
++menutrans &Find<Tab>/			&ðÏÉÓË<Tab>/
++menutrans Find\ and\ Rep&lace<Tab>:%s	ðÏÉÓË\ É\ &ÚÁÍÅÎÁ<Tab>:%s
++" End Athena GUI only
+ menutrans &Find\.\.\.<Tab>/		&ðÏÉÓË\.\.\.<Tab>/
+ menutrans Find\ and\ Rep&lace\.\.\.	ðÏÉÓË\ É\ &ÚÁÍÅÎÁ\.\.\.
+ menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s	ðÏÉÓË\ É\ &ÚÁÍÅÎÁ\.\.\.<Tab>:%s
+-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     ðÏÉÓË\ É\ &ÚÁÍÅÎÁ\.\.\.<Tab>:s
++menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s	ðÏÉÓË\ É\ &ÚÁÍÅÎÁ\.\.\.<Tab>:s
+ "--------------------
+ menutrans Settings\ &Window		ïËÎÏ\ ÎÁÓÔÒÏÊËÉ\ &ÏÐÃÉÊ
++menutrans Startup\ &Settings		îÁÓÔÒÏÊËÉ\ ÚÁÐÕÓ&ËÁ
+ menutrans &Global\ Settings		&çÌÏÂÁÌØÎÙÅ\ ÎÁÓÔÒÏÊËÉ
+ menutrans F&ile\ Settings		îÁÓÔÒÏÊËÉ\ &ÆÁÊÌÏ×
+ menutrans C&olor\ Scheme		&ã×ÅÔÏ×ÁÑ\ ÓÈÅÍÁ
+ menutrans &Keymap			òÁÓËÌÁÄËÁ\ ËÌ&Á×ÉÁÔÕÒÙ
+ menutrans Select\ Fo&nt\.\.\.		÷ÙÂÏÒ\ &ÛÒÉÆÔÁ\.\.\.
+ ">>>----------------- Edit/Global settings
+-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	 ðÏÄÓ×ÅÔËÁ\ &ÎÁÊÄÅÎÎÙÈ\ ÓÏÏÔ×ÅÔÓÔ×ÉÊ<Tab>:set\ hls!
+-menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		 &òÅÇÉÓÔÒÏÎÅÚÁ×ÉÓÉÍÙÊ\ ÐÏÉÓË<Tab>:set\ ic!
+-menutrans Toggle\ &Showmatch<Tab>:set\ sm!		 ðÏËÁÚÙ×ÁÔØ\ ÐÁÒÎÙÅ\ &ÜÌÅÍÅÎÔÙ<Tab>:set\ sm!
+-menutrans &Context\ lines				 óÔÒ&ÏË\ ×ÏËÒÕÇ\ ËÕÒÓÏÒÁ
+-menutrans &Virtual\ Edit				 ÷ÉÒ&ÔÕÁÌØÎÏÅ\ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ
+-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		 òÅÖÉÍ\ &÷ÓÔÁ×ËÉ<Tab>:set\ im!
+-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		 &óÏ×ÍÅÓÔÉÍÏÓÔØ\ Ó\ Vi<Tab>:set\ cp!
+-menutrans Search\ &Path\.\.\.				 &ðÕÔØ\ ÄÌÑ\ ÐÏÉÓËÁ\ ÆÁÊÌÏ×\.\.\.
+-menutrans Ta&g\ Files\.\.\.				 æÁÊÌÙ\ &ÍÅÔÏË\.\.\.
+-"
+-menutrans Toggle\ &Toolbar				 &éÎÓÔÒÕÍÅÎÔÁÌØÎÁÑ\ ÐÁÎÅÌØ
+-menutrans Toggle\ &Bottom\ Scrollbar			 ðÏÌÏÓÁ\ ÐÒÏËÒÕÔËÉ\ ×ÎÉ&ÚÕ
+-menutrans Toggle\ &Left\ Scrollbar			 ðÏÌÏÓÁ\ ÐÒÏËÒÕÔËÉ\ Ó&ÌÅ×Á
+-menutrans Toggle\ &Right\ Scrollbar			 ðÏÌÏÓÁ\ ÐÒÏËÒÕÔËÉ\ ÓÐÒ&Á×Á
++menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	ðÏÄÓ×ÅÔËÁ\ &ÎÁÊÄÅÎÎÙÈ\ ÓÏÏÔ×ÅÔÓÔ×ÉÊ<Tab>:set\ hls!
++menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		&òÅÇÉÓÔÒÏÎÅÚÁ×ÉÓÉÍÙÊ\ ÐÏÉÓË<Tab>:set\ ic!
++menutrans Toggle\ &Showmatch<Tab>:set\ sm!		ðÏËÁÚÙ×ÁÔØ\ ÐÁÒÎÙÅ\ &ÜÌÅÍÅÎÔÙ<Tab>:set\ sm!
++menutrans &Context\ lines				óÔÒ&ÏË\ ×ÏËÒÕÇ\ ËÕÒÓÏÒÁ
++menutrans &Virtual\ Edit				÷ÉÒ&ÔÕÁÌØÎÏÅ\ ÒÅÄÁËÔÉÒÏ×ÁÎÉÅ
++menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		òÅÖÉÍ\ &÷ÓÔÁ×ËÉ<Tab>:set\ im!
++menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		&óÏ×ÍÅÓÔÉÍÏÓÔØ\ Ó\ Vi<Tab>:set\ cp!
++menutrans Search\ &Path\.\.\.				&ðÕÔØ\ ÄÌÑ\ ÐÏÉÓËÁ\ ÆÁÊÌÏ×\.\.\.
++menutrans Ta&g\ Files\.\.\.				æÁÊÌÙ\ &ÍÅÔÏË\.\.\.
++"
++menutrans Toggle\ &Toolbar				&éÎÓÔÒÕÍÅÎÔÁÌØÎÁÑ\ ÐÁÎÅÌØ
++menutrans Toggle\ &Bottom\ Scrollbar			ðÏÌÏÓÁ\ ÐÒÏËÒÕÔËÉ\ ×ÎÉ&ÚÕ
++menutrans Toggle\ &Left\ Scrollbar			ðÏÌÏÓÁ\ ÐÒÏËÒÕÔËÉ\ Ó&ÌÅ×Á
++menutrans Toggle\ &Right\ Scrollbar			ðÏÌÏÓÁ\ ÐÒÏËÒÕÔËÉ\ ÓÐÒ&Á×Á
+ ">>>->>>------------- Edit/Global settings/Virtual edit
+-menutrans Never						 ÷ÙËÌÀÞÅÎÏ
+-menutrans Block\ Selection				 ðÒÉ\ ×ÙÄÅÌÅÎÉÉ\ ÂÌÏËÁ
+-menutrans Insert\ mode					 ÷\ ÒÅÖÉÍÅ\ ÷ÓÔÁ×ËÉ
+-menutrans Block\ and\ Insert				 ðÒÉ\ ×ÙÄÅÌÅÎÉÉ\ ÂÌÏËÁ\ É\ ×\ ÒÅÖÉÍÅ\ ÷ÓÔÁ×ËÉ
+-menutrans Always					 ÷ËÌÀÞÅÎÏ\ ×ÓÅÇÄÁ
++menutrans Never						÷ÙËÌÀÞÅÎÏ
++menutrans Block\ Selection				ðÒÉ\ ×ÙÄÅÌÅÎÉÉ\ ÂÌÏËÁ
++menutrans Insert\ mode					÷\ ÒÅÖÉÍÅ\ ÷ÓÔÁ×ËÉ
++menutrans Block\ and\ Insert				ðÒÉ\ ×ÙÄÅÌÅÎÉÉ\ ÂÌÏËÁ\ É\ ×\ ÒÅÖÉÍÅ\ ÷ÓÔÁ×ËÉ
++menutrans Always					÷ËÌÀÞÅÎÏ\ ×ÓÅÇÄÁ
+ ">>>----------------- Edit/File settings
+-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	 &îÕÍÅÒÁÃÉÑ\ ÓÔÒÏË<Tab>:set\ nu!
+-menutrans Toggle\ &List\ Mode<Tab>:set\ list!		 ïÔÏÂÒÁ&ÖÅÎÉÅ\ ÎÅ×ÉÄÉÍÙÈ\ ÓÉÍ×ÏÌÏ×<Tab>:set\ list!
+-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		 &ðÅÒÅÎÏÓ\ ÄÌÉÎÎÙÈ\ ÓÔÒÏË<Tab>:set\ wrap!
+-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	 ðÅÒÅÎÏÓ\ &ÃÅÌÙÈ\ ÓÌÏ×<Tab>:set\ lbr!
+-menutrans Toggle\ &expand-tab<Tab>:set\ et!		 ðÒÏ&ÂÅÌÙ\ ×ÍÅÓÔÏ\ ÔÁÂÕÌÑÃÉÉ<Tab>:set\ et!
+-menutrans Toggle\ &auto-indent<Tab>:set\ ai!		 á×ÔÏÍÁÔÉÞÅÓËÏÅ\ ÆÏÒÍÁÔÉÒÏ×ÁÎÉÅ\ &ÏÔÓÔÕÐÏ×<Tab>:set\ ai!
+-menutrans Toggle\ &C-indenting<Tab>:set\ cin!		 æÏÒÍÁÔÉÒÏ×ÁÎÉÅ\ ÏÔÓÔÕÐÏ×\ ×\ &ÓÔÉÌÅ\ C<Tab>:set\ cin!
++menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	&îÕÍÅÒÁÃÉÑ\ ÓÔÒÏË<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!	ïÔÎÏÓÉÔÅ&ÌØÎÁÑ\ ÎÕÍÅÒÁÃÉÑ\ ÓÔÒÏË<Tab>:set\ nru!
++menutrans Toggle\ &List\ Mode<Tab>:set\ list!		ïÔÏÂÒÁ&ÖÅÎÉÅ\ ÎÅ×ÉÄÉÍÙÈ\ ÓÉÍ×ÏÌÏ×<Tab>:set\ list!
++menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		&ðÅÒÅÎÏÓ\ ÄÌÉÎÎÙÈ\ ÓÔÒÏË<Tab>:set\ wrap!
++menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	ðÅÒÅÎÏÓ\ &ÃÅÌÙÈ\ ÓÌÏ×<Tab>:set\ lbr!
++menutrans Toggle\ &expand-tab<Tab>:set\ et!		ðÒÏ&ÂÅÌÙ\ ×ÍÅÓÔÏ\ ÔÁÂÕÌÑÃÉÉ<Tab>:set\ et!
++menutrans Toggle\ &auto-indent<Tab>:set\ ai!		á×ÔÏÍÁÔÉÞÅÓËÏÅ\ ÆÏÒÍÁÔÉÒÏ×ÁÎÉÅ\ &ÏÔÓÔÕÐÏ×<Tab>:set\ ai!
++menutrans Toggle\ &C-indenting<Tab>:set\ cin!		æÏÒÍÁÔÉÒÏ×ÁÎÉÅ\ ÏÔÓÔÕÐÏ×\ ×\ &ÓÔÉÌÅ\ C<Tab>:set\ cin!
+ ">>>---
+-menutrans &Shiftwidth					 ÷ÅÌÉ&ÞÉÎÁ\ ÏÔÓÔÕÐÁ
+-menutrans Soft\ &Tabstop				 ûÉÒÉÎÁ\ &ÔÁÂÕÌÑÃÉÉ
+-menutrans Te&xt\ Width\.\.\.				 &ûÉÒÉÎÁ\ ÔÅËÓÔÁ\.\.\.
+-menutrans &File\ Format\.\.\.				 &æÏÒÍÁÔ\ ÆÁÊÌÁ\.\.\.
++menutrans &Shiftwidth					÷ÅÌÉ&ÞÉÎÁ\ ÏÔÓÔÕÐÁ
++menutrans Soft\ &Tabstop				ûÉÒÉÎÁ\ &ÔÁÂÕÌÑÃÉÉ
++menutrans Te&xt\ Width\.\.\.				&ûÉÒÉÎÁ\ ÔÅËÓÔÁ\.\.\.
++menutrans &File\ Format\.\.\.				&æÏÒÍÁÔ\ ÆÁÊÌÁ\.\.\.
+ "
+ "
+ "
+@@ -129,6 +139,7 @@
+ menutrans Build\ &Tags\ File				óÏÚÄÁÔØ\ &ÆÁÊÌ\ ÍÅÔÏË
+ "-------------------
+ menutrans &Folding					òÁÂÏÔÁ\ ÓÏ\ &ÓËÌÁÄËÁÍÉ
++menutrans &Spelling					ðÒ&Á×ÏÐÉÓÁÎÉÅ
+ menutrans &Diff						&ïÔÌÉÞÉÑ\ (diff)
+ "-------------------
+ menutrans &Make<Tab>:make				ëÏ&ÍÐÉÌÑÃÉÑ<Tab>:make
+@@ -139,10 +150,26 @@
+ menutrans &Older\ List<Tab>:cold			âÏÌÅÅ\ ÓÔÁÒ&ÙÊ\ ÓÐÉÓÏË\ ÏÛÉÂÏË<Tab>:cold
+ menutrans N&ewer\ List<Tab>:cnew			âÏÌÅÅ\ Ó×Å&ÖÉÊ\ ÓÐÉÓÏË\ ÏÛÉÂÏË<Tab>:cnew
+ menutrans Error\ &Window				ïË&ÎÏ\ ÏÛÉÂÏË
+-menutrans &Set\ Compiler				÷ÙÂÏÒ\ &ËÏÍÐÉÌÑÔÏÒÁ
++menutrans Se&T\ Compiler				÷ÙÂÏÒ\ &ËÏÍÐÉÌÑÔÏÒÁ
+ "-------------------
+ menutrans &Convert\ to\ HEX<Tab>:%!xxd			ð&ÅÒÅ×ÅÓÔÉ\ ×\ HEX<Tab>:%!xxd
+ menutrans Conve&rt\ back<Tab>:%!xxd\ -r			ðÅÒÅ×ÅÓÔÉ\ É&Ú\ HEX<Tab>:%!xxd\ -r
++">>>---------------- Tools/Spelling
++menutrans &Spell\ Check\ On				&÷ËÌ\ ÐÒÏ×ÅÒËÕ\ ÐÒÁ×ÏÐÉÓÁÎÉÑ
++menutrans Spell\ Check\ &Off				÷Ù&ËÌ\ ÐÒÏ×ÅÒËÕ\ ÐÒÁ×ÏÐÉÓÁÎÉÑ
++menutrans To\ &Next\ error<Tab>]s			&óÌÅÄÕÀÝÁÑ\ ÏÛÉÂËÁ
++menutrans To\ &Previous\ error<Tab>[s			&ðÒÅÄÙÄÕÝÁÑ\ ÏÛÉÂËÁ
++menutrans Suggest\ &Corrections<Tab>z=			ðÒÅÄÌÏÖÉÔØ\ ÉÓÐ&ÒÁ×ÌÅÎÉÑ
++menutrans &Repeat\ correction<Tab>:spellrepall		ðÏ×&ÔÏÒÉÔØ\ ÉÓÐÒÁ×ÌÅÎÉÅ\ ÄÌÑ\ ×ÓÅÈ
++"-------------------
++menutrans Set\ language\ to\ "en"			õÓÔÁÎÏ×ÉÔØ\ ÑÚÙË\ "en"
++menutrans Set\ language\ to\ "en_au"			õÓÔÁÎÏ×ÉÔØ\ ÑÚÙË\ "en_au"
++menutrans Set\ language\ to\ "en_ca"			õÓÔÁÎÏ×ÉÔØ\ ÑÚÙË\ "en_ca"
++menutrans Set\ language\ to\ "en_gb"			õÓÔÁÎÏ×ÉÔØ\ ÑÚÙË\ "en_gb"
++menutrans Set\ language\ to\ "en_nz"			õÓÔÁÎÏ×ÉÔØ\ ÑÚÙË\ "en_nz"
++menutrans Set\ language\ to\ "en_us"			õÓÔÁÎÏ×ÉÔØ\ ÑÚÙË\ "en_us"
++menutrans &Find\ More\ Languages			&îÁÊÔÉ\ ÂÏÌØÛÅ\ ÑÚÙËÏ×
++let g:menutrans_set_lang_to =				'õÓÔÁÎÏ×ÉÔØ ÑÚÙË'
+ ">>>---------------- Folds
+ menutrans &Enable/Disable\ folds<Tab>zi			÷ËÌ/×ÙËÌ\ &ÓËÌÁÄËÉ<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv			ïÔËÒÙÔØ\ ÓÔÒÏËÕ\ Ó\ &ËÕÒÓÏÒÏÍ<Tab>zv
+@@ -217,7 +244,7 @@
+ menutrans Max\ &Width<Tab>^W\|				íÁËÓÉÍÁÌØÎÁÑ\ &ÛÉÒÉÎÁ<Tab>^W\|
+ menutrans Min\ Widt&h<Tab>^W1\|				íÉÎÉÍÁÌ&ØÎÁÑ\ ÛÉÒÉÎÁ<Tab>^W1\|
+ ">>>----------------- Window/Move To
+-menutrans &Top<Tab>^WK					îÁ&×ÅÒÈ<Tab>^WK
++menutrans &Top<Tab>^WK					÷&×ÅÒÈ<Tab>^WK
+ menutrans &Bottom<Tab>^WJ				÷&ÎÉÚ<Tab>^WJ
+ menutrans &Left\ side<Tab>^WH				÷&ÌÅ×Ï<Tab>^WH
+ menutrans &Right\ side<Tab>^WL				÷&ÐÒÁ×Ï<Tab>^WL
+@@ -294,3 +321,6 @@
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nï&ÔÍÅÎÁ"
+ "
+ let menutrans_no_file = "[îÅÔ ÆÁÊÌÁ]"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_ru_ru.vim vim73/runtime/lang/menu_ru_ru.vim
+--- vim73.orig/runtime/lang/menu_ru_ru.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_ru_ru.vim	2013-06-07 17:07:16.482294946 +0000
+@@ -1,6 +1,7 @@
+ " Menu Translations:	Russian
+-" Maintainer:		vassily ragosin <vrr[at]users.sourceforge.net>
+-" Last Change:		26 Apr 2004
++" Maintainer:		Sergey Alyoshin <alyoshin.s@gmail.com>
++" Previous Maintainer:	vassily ragosin <vrr[at]users.sourceforge.net>
++" Last Change:		29 May 2013
+ " URL:			cvs://cvs.sf.net:/cvsroot/ruvim/extras/menu/menu_ru_ru.vim
+ "
+ " $Id: menu_ru_ru.vim,v 1.1 2004/06/13 16:09:10 vimboss Exp $
+@@ -16,6 +17,8 @@
+    finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -48,6 +51,7 @@
+ " File menu
+ menutrans &Open\.\.\.<Tab>:e		&ÐÑÐºÑÑÑÑ\.\.\.<Tab>:e
+ menutrans Sp&lit-Open\.\.\.<Tab>:sp	ÐÐŸ&ÐŽÐµÐ»ÐžÑÑ\ ÐŸÐºÐœÐŸ\.\.\.<Tab>:sp
++menutrans Open\ Tab\.\.\.<Tab>:tabnew	ÐÑÐºÑÑÑÑ\ Ð²&ÐºÐ»Ð°ÐŽÐºÑ\.\.\.<Tab>:tabnew
+ menutrans &New<Tab>:enew		&ÐÐŸÐ²ÑÐ¹<Tab>:enew
+ menutrans &Close<Tab>:close		&ÐÐ°ÐºÑÑÑÑ<Tab>:close
+ "--------------------
+@@ -75,51 +79,57 @@
+ menutrans &Delete<Tab>x			&Ð£ÐŽÐ°Ð»ÐžÑÑ<Tab>x
+ menutrans &Select\ All<Tab>ggVG		Ð&ÑÐŽÐµÐ»ÐžÑÑ\ Ð²ÑÑ<Tab>ggVG
+ "--------------------
++" Athena GUI only
++menutrans &Find<Tab>/			&ÐÐŸÐžÑÐº<Tab>/
++menutrans Find\ and\ Rep&lace<Tab>:%s	ÐÐŸÐžÑÐº\ Ðž\ &Ð·Ð°ÐŒÐµÐœÐ°<Tab>:%s
++" End Athena GUI only
+ menutrans &Find\.\.\.<Tab>/		&ÐÐŸÐžÑÐº\.\.\.<Tab>/
+-menutrans Find\ and\ Rep&lace\.\.\.     ÐÐŸÐžÑÐº\ Ðž\ &Ð·Ð°ÐŒÐµÐœÐ°\.\.\.
+-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s     ÐÐŸÐžÑÐº\ Ðž\ &Ð·Ð°ÐŒÐµÐœÐ°\.\.\.<Tab>:%s
+-menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s     ÐÐŸÐžÑÐº\ Ðž\ &Ð·Ð°ÐŒÐµÐœÐ°\.\.\.<Tab>:s
++menutrans Find\ and\ Rep&lace\.\.\.	ÐÐŸÐžÑÐº\ Ðž\ &Ð·Ð°ÐŒÐµÐœÐ°\.\.\.
++menutrans Find\ and\ Rep&lace\.\.\.<Tab>:%s	ÐÐŸÐžÑÐº\ Ðž\ &Ð·Ð°ÐŒÐµÐœÐ°\.\.\.<Tab>:%s
++menutrans Find\ and\ Rep&lace\.\.\.<Tab>:s	ÐÐŸÐžÑÐº\ Ðž\ &Ð·Ð°ÐŒÐµÐœÐ°\.\.\.<Tab>:s
+ "--------------------
+ menutrans Settings\ &Window		ÐÐºÐœÐŸ\ ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž\ &ÐŸÐ¿ÑÐžÐ¹
++menutrans Startup\ &Settings		ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž\ Ð·Ð°Ð¿ÑÑ&ÐºÐ°
+ menutrans &Global\ Settings		&ÐÐ»ÐŸÐ±Ð°Ð»ÑÐœÑÐµ\ ÐœÐ°ÑÑÑÐŸÐ¹ÐºÐž
+ menutrans F&ile\ Settings		ÐÐ°ÑÑÑÐŸÐ¹ÐºÐž\ &ÑÐ°Ð¹Ð»ÐŸÐ²
+ menutrans C&olor\ Scheme		&ÐŠÐ²ÐµÑÐŸÐ²Ð°Ñ\ ÑÑ
+ÐµÐŒÐ°
+ menutrans &Keymap			Ð Ð°ÑÐºÐ»Ð°ÐŽÐºÐ°\ ÐºÐ»&Ð°Ð²ÐžÐ°ÑÑÑÑ
+ menutrans Select\ Fo&nt\.\.\.		ÐÑÐ±ÐŸÑ\ &ÑÑÐžÑÑÐ°\.\.\.
+ ">>>----------------- Edit/Global settings
+-menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!     ÐÐŸÐŽÑÐ²ÐµÑÐºÐ°\ &ÐœÐ°Ð¹ÐŽÐµÐœÐœÑÑ
+\ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÐžÐ¹<Tab>:set\ hls!
+-menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		 &Ð ÐµÐ³ÐžÑÑÑÐŸÐœÐµÐ·Ð°Ð²ÐžÑÐžÐŒÑÐ¹\ Ð¿ÐŸÐžÑÐº<Tab>:set\ ic!
+-menutrans Toggle\ &Showmatch<Tab>:set\ sm!		 ÐÐŸÐºÐ°Ð·ÑÐ²Ð°ÑÑ\ Ð¿Ð°ÑÐœÑÐµ\ &ÑÐ»ÐµÐŒÐµÐœÑÑ<Tab>:set\ sm!
+-menutrans &Context\ lines				 Ð¡ÑÑ&ÐŸÐº\ Ð²ÐŸÐºÑÑÐ³\ ÐºÑÑÑÐŸÑÐ°
+-menutrans &Virtual\ Edit				 ÐÐžÑ&ÑÑÐ°Ð»ÑÐœÐŸÐµ\ ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÐœÐžÐµ
+-menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		 Ð ÐµÐ¶ÐžÐŒ\ &ÐÑÑÐ°Ð²ÐºÐž<Tab>:set\ im!
+-menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		 &Ð¡ÐŸÐ²ÐŒÐµÑÑÐžÐŒÐŸÑÑÑ\ Ñ\ Vi<Tab>:set\ cp!
+-menutrans Search\ &Path\.\.\.				 &ÐÑÑÑ\ ÐŽÐ»Ñ\ Ð¿ÐŸÐžÑÐºÐ°\ ÑÐ°Ð¹Ð»ÐŸÐ²\.\.\.
+-menutrans Ta&g\ Files\.\.\.				 Ð€Ð°Ð¹Ð»Ñ\ &ÐŒÐµÑÐŸÐº\.\.\.
+-"
+-menutrans Toggle\ &Toolbar				 &ÐÐœÑÑÑÑÐŒÐµÐœÑÐ°Ð»ÑÐœÐ°Ñ\ Ð¿Ð°ÐœÐµÐ»Ñ
+-menutrans Toggle\ &Bottom\ Scrollbar			 ÐÐŸÐ»ÐŸÑÐ°\ Ð¿ÑÐŸÐºÑÑÑÐºÐž\ Ð²ÐœÐž&Ð·Ñ
+-menutrans Toggle\ &Left\ Scrollbar			 ÐÐŸÐ»ÐŸÑÐ°\ Ð¿ÑÐŸÐºÑÑÑÐºÐž\ Ñ&Ð»ÐµÐ²Ð°
+-menutrans Toggle\ &Right\ Scrollbar			 ÐÐŸÐ»ÐŸÑÐ°\ Ð¿ÑÐŸÐºÑÑÑÐºÐž\ ÑÐ¿Ñ&Ð°Ð²Ð°
++menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	ÐÐŸÐŽÑÐ²ÐµÑÐºÐ°\ &ÐœÐ°Ð¹ÐŽÐµÐœÐœÑÑ
+\ ÑÐŸÐŸÑÐ²ÐµÑÑÑÐ²ÐžÐ¹<Tab>:set\ hls!
++menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		&Ð ÐµÐ³ÐžÑÑÑÐŸÐœÐµÐ·Ð°Ð²ÐžÑÐžÐŒÑÐ¹\ Ð¿ÐŸÐžÑÐº<Tab>:set\ ic!
++menutrans Toggle\ &Showmatch<Tab>:set\ sm!		ÐÐŸÐºÐ°Ð·ÑÐ²Ð°ÑÑ\ Ð¿Ð°ÑÐœÑÐµ\ &ÑÐ»ÐµÐŒÐµÐœÑÑ<Tab>:set\ sm!
++menutrans &Context\ lines				Ð¡ÑÑ&ÐŸÐº\ Ð²ÐŸÐºÑÑÐ³\ ÐºÑÑÑÐŸÑÐ°
++menutrans &Virtual\ Edit				ÐÐžÑ&ÑÑÐ°Ð»ÑÐœÐŸÐµ\ ÑÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÐœÐžÐµ
++menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Ð ÐµÐ¶ÐžÐŒ\ &ÐÑÑÐ°Ð²ÐºÐž<Tab>:set\ im!
++menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		&Ð¡ÐŸÐ²ÐŒÐµÑÑÐžÐŒÐŸÑÑÑ\ Ñ\ Vi<Tab>:set\ cp!
++menutrans Search\ &Path\.\.\.				&ÐÑÑÑ\ ÐŽÐ»Ñ\ Ð¿ÐŸÐžÑÐºÐ°\ ÑÐ°Ð¹Ð»ÐŸÐ²\.\.\.
++menutrans Ta&g\ Files\.\.\.				Ð€Ð°Ð¹Ð»Ñ\ &ÐŒÐµÑÐŸÐº\.\.\.
++"
++menutrans Toggle\ &Toolbar				&ÐÐœÑÑÑÑÐŒÐµÐœÑÐ°Ð»ÑÐœÐ°Ñ\ Ð¿Ð°ÐœÐµÐ»Ñ
++menutrans Toggle\ &Bottom\ Scrollbar			ÐÐŸÐ»ÐŸÑÐ°\ Ð¿ÑÐŸÐºÑÑÑÐºÐž\ Ð²ÐœÐž&Ð·Ñ
++menutrans Toggle\ &Left\ Scrollbar			ÐÐŸÐ»ÐŸÑÐ°\ Ð¿ÑÐŸÐºÑÑÑÐºÐž\ Ñ&Ð»ÐµÐ²Ð°
++menutrans Toggle\ &Right\ Scrollbar			ÐÐŸÐ»ÐŸÑÐ°\ Ð¿ÑÐŸÐºÑÑÑÐºÐž\ ÑÐ¿Ñ&Ð°Ð²Ð°
+ ">>>->>>------------- Edit/Global settings/Virtual edit
+-menutrans Never						 ÐÑÐºÐ»ÑÑÐµÐœÐŸ
+-menutrans Block\ Selection				 ÐÑÐž\ Ð²ÑÐŽÐµÐ»ÐµÐœÐžÐž\ Ð±Ð»ÐŸÐºÐ°
+-menutrans Insert\ mode					 Ð\ ÑÐµÐ¶ÐžÐŒÐµ\ ÐÑÑÐ°Ð²ÐºÐž
+-menutrans Block\ and\ Insert				 ÐÑÐž\ Ð²ÑÐŽÐµÐ»ÐµÐœÐžÐž\ Ð±Ð»ÐŸÐºÐ°\ Ðž\ Ð²\ ÑÐµÐ¶ÐžÐŒÐµ\ ÐÑÑÐ°Ð²ÐºÐž
+-menutrans Always					 ÐÐºÐ»ÑÑÐµÐœÐŸ\ Ð²ÑÐµÐ³ÐŽÐ°
++menutrans Never						ÐÑÐºÐ»ÑÑÐµÐœÐŸ
++menutrans Block\ Selection				ÐÑÐž\ Ð²ÑÐŽÐµÐ»ÐµÐœÐžÐž\ Ð±Ð»ÐŸÐºÐ°
++menutrans Insert\ mode					Ð\ ÑÐµÐ¶ÐžÐŒÐµ\ ÐÑÑÐ°Ð²ÐºÐž
++menutrans Block\ and\ Insert				ÐÑÐž\ Ð²ÑÐŽÐµÐ»ÐµÐœÐžÐž\ Ð±Ð»ÐŸÐºÐ°\ Ðž\ Ð²\ ÑÐµÐ¶ÐžÐŒÐµ\ ÐÑÑÐ°Ð²ÐºÐž
++menutrans Always					ÐÐºÐ»ÑÑÐµÐœÐŸ\ Ð²ÑÐµÐ³ÐŽÐ°
+ ">>>----------------- Edit/File settings
+-menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	 &ÐÑÐŒÐµÑÐ°ÑÐžÑ\ ÑÑÑÐŸÐº<Tab>:set\ nu!
+-menutrans Toggle\ &List\ Mode<Tab>:set\ list!		 ÐÑÐŸÐ±ÑÐ°&Ð¶ÐµÐœÐžÐµ\ ÐœÐµÐ²ÐžÐŽÐžÐŒÑÑ
+\ ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ²<Tab>:set\ list!
+-menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		 &ÐÐµÑÐµÐœÐŸÑ\ ÐŽÐ»ÐžÐœÐœÑÑ
+\ ÑÑÑÐŸÐº<Tab>:set\ wrap!
+-menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	 ÐÐµÑÐµÐœÐŸÑ\ &ÑÐµÐ»ÑÑ
+\ ÑÐ»ÐŸÐ²<Tab>:set\ lbr!
+-menutrans Toggle\ &expand-tab<Tab>:set\ et!		 ÐÑÐŸ&Ð±ÐµÐ»Ñ\ Ð²ÐŒÐµÑÑÐŸ\ ÑÐ°Ð±ÑÐ»ÑÑÐžÐž<Tab>:set\ et!
+-menutrans Toggle\ &auto-indent<Tab>:set\ ai!		 ÐÐ²ÑÐŸÐŒÐ°ÑÐžÑÐµÑÐºÐŸÐµ\ ÑÐŸÑÐŒÐ°ÑÐžÑÐŸÐ²Ð°ÐœÐžÐµ\ &ÐŸÑÑÑÑÐ¿ÐŸÐ²<Tab>:set\ ai!
+-menutrans Toggle\ &C-indenting<Tab>:set\ cin!		 Ð€ÐŸÑÐŒÐ°ÑÐžÑÐŸÐ²Ð°ÐœÐžÐµ\ ÐŸÑÑÑÑÐ¿ÐŸÐ²\ Ð²\ &ÑÑÐžÐ»Ðµ\ C<Tab>:set\ cin!
++menutrans Toggle\ Line\ &Numbering<Tab>:set\ nu!	&ÐÑÐŒÐµÑÐ°ÑÐžÑ\ ÑÑÑÐŸÐº<Tab>:set\ nu!
++menutrans Toggle\ relati&ve\ Line\ Numbering<Tab>:set\ rnu!	ÐÑÐœÐŸÑÐžÑÐµ&Ð»ÑÐœÐ°Ñ\ ÐœÑÐŒÐµÑÐ°ÑÐžÑ\ ÑÑÑÐŸÐº<Tab>:set\ nru!
++menutrans Toggle\ &List\ Mode<Tab>:set\ list!		ÐÑÐŸÐ±ÑÐ°&Ð¶ÐµÐœÐžÐµ\ ÐœÐµÐ²ÐžÐŽÐžÐŒÑÑ
+\ ÑÐžÐŒÐ²ÐŸÐ»ÐŸÐ²<Tab>:set\ list!
++menutrans Toggle\ Line\ &Wrap<Tab>:set\ wrap!		&ÐÐµÑÐµÐœÐŸÑ\ ÐŽÐ»ÐžÐœÐœÑÑ
+\ ÑÑÑÐŸÐº<Tab>:set\ wrap!
++menutrans Toggle\ W&rap\ at\ word<Tab>:set\ lbr!	ÐÐµÑÐµÐœÐŸÑ\ &ÑÐµÐ»ÑÑ
+\ ÑÐ»ÐŸÐ²<Tab>:set\ lbr!
++menutrans Toggle\ &expand-tab<Tab>:set\ et!		ÐÑÐŸ&Ð±ÐµÐ»Ñ\ Ð²ÐŒÐµÑÑÐŸ\ ÑÐ°Ð±ÑÐ»ÑÑÐžÐž<Tab>:set\ et!
++menutrans Toggle\ &auto-indent<Tab>:set\ ai!		ÐÐ²ÑÐŸÐŒÐ°ÑÐžÑÐµÑÐºÐŸÐµ\ ÑÐŸÑÐŒÐ°ÑÐžÑÐŸÐ²Ð°ÐœÐžÐµ\ &ÐŸÑÑÑÑÐ¿ÐŸÐ²<Tab>:set\ ai!
++menutrans Toggle\ &C-indenting<Tab>:set\ cin!		Ð€ÐŸÑÐŒÐ°ÑÐžÑÐŸÐ²Ð°ÐœÐžÐµ\ ÐŸÑÑÑÑÐ¿ÐŸÐ²\ Ð²\ &ÑÑÐžÐ»Ðµ\ C<Tab>:set\ cin!
+ ">>>---
+-menutrans &Shiftwidth					 ÐÐµÐ»Ðž&ÑÐžÐœÐ°\ ÐŸÑÑÑÑÐ¿Ð°
+-menutrans Soft\ &Tabstop				 ÐšÐžÑÐžÐœÐ°\ &ÑÐ°Ð±ÑÐ»ÑÑÐžÐž
+-menutrans Te&xt\ Width\.\.\.				 &ÐšÐžÑÐžÐœÐ°\ ÑÐµÐºÑÑÐ°\.\.\.
+-menutrans &File\ Format\.\.\.				 &Ð€ÐŸÑÐŒÐ°Ñ\ ÑÐ°Ð¹Ð»Ð°\.\.\.
++menutrans &Shiftwidth					ÐÐµÐ»Ðž&ÑÐžÐœÐ°\ ÐŸÑÑÑÑÐ¿Ð°
++menutrans Soft\ &Tabstop				ÐšÐžÑÐžÐœÐ°\ &ÑÐ°Ð±ÑÐ»ÑÑÐžÐž
++menutrans Te&xt\ Width\.\.\.				&ÐšÐžÑÐžÐœÐ°\ ÑÐµÐºÑÑÐ°\.\.\.
++menutrans &File\ Format\.\.\.				&Ð€ÐŸÑÐŒÐ°Ñ\ ÑÐ°Ð¹Ð»Ð°\.\.\.
+ "
+ "
+ "
+@@ -129,6 +139,7 @@
+ menutrans Build\ &Tags\ File				Ð¡ÐŸÐ·ÐŽÐ°ÑÑ\ &ÑÐ°Ð¹Ð»\ ÐŒÐµÑÐŸÐº
+ "-------------------
+ menutrans &Folding					Ð Ð°Ð±ÐŸÑÐ°\ ÑÐŸ\ &ÑÐºÐ»Ð°ÐŽÐºÐ°ÐŒÐž
++menutrans &Spelling					ÐÑ&Ð°Ð²ÐŸÐ¿ÐžÑÐ°ÐœÐžÐµ
+ menutrans &Diff						&ÐÑÐ»ÐžÑÐžÑ\ (diff)
+ "-------------------
+ menutrans &Make<Tab>:make				ÐÐŸ&ÐŒÐ¿ÐžÐ»ÑÑÐžÑ<Tab>:make
+@@ -139,10 +150,26 @@
+ menutrans &Older\ List<Tab>:cold			ÐÐŸÐ»ÐµÐµ\ ÑÑÐ°Ñ&ÑÐ¹\ ÑÐ¿ÐžÑÐŸÐº\ ÐŸÑÐžÐ±ÐŸÐº<Tab>:cold
+ menutrans N&ewer\ List<Tab>:cnew			ÐÐŸÐ»ÐµÐµ\ ÑÐ²Ðµ&Ð¶ÐžÐ¹\ ÑÐ¿ÐžÑÐŸÐº\ ÐŸÑÐžÐ±ÐŸÐº<Tab>:cnew
+ menutrans Error\ &Window				ÐÐº&ÐœÐŸ\ ÐŸÑÐžÐ±ÐŸÐº
+-menutrans &Set\ Compiler				ÐÑÐ±ÐŸÑ\ &ÐºÐŸÐŒÐ¿ÐžÐ»ÑÑÐŸÑÐ°
++menutrans Se&T\ Compiler				ÐÑÐ±ÐŸÑ\ &ÐºÐŸÐŒÐ¿ÐžÐ»ÑÑÐŸÑÐ°
+ "-------------------
+ menutrans &Convert\ to\ HEX<Tab>:%!xxd			Ð&ÐµÑÐµÐ²ÐµÑÑÐž\ Ð²\ HEX<Tab>:%!xxd
+ menutrans Conve&rt\ back<Tab>:%!xxd\ -r			ÐÐµÑÐµÐ²ÐµÑÑÐž\ Ðž&Ð·\ HEX<Tab>:%!xxd\ -r
++">>>---------------- Tools/Spelling
++menutrans &Spell\ Check\ On				&ÐÐºÐ»\ Ð¿ÑÐŸÐ²ÐµÑÐºÑ\ Ð¿ÑÐ°Ð²ÐŸÐ¿ÐžÑÐ°ÐœÐžÑ
++menutrans Spell\ Check\ &Off				ÐÑ&ÐºÐ»\ Ð¿ÑÐŸÐ²ÐµÑÐºÑ\ Ð¿ÑÐ°Ð²ÐŸÐ¿ÐžÑÐ°ÐœÐžÑ
++menutrans To\ &Next\ error<Tab>]s			&Ð¡Ð»ÐµÐŽÑÑÑÐ°Ñ\ ÐŸÑÐžÐ±ÐºÐ°
++menutrans To\ &Previous\ error<Tab>[s			&ÐÑÐµÐŽÑÐŽÑÑÐ°Ñ\ ÐŸÑÐžÐ±ÐºÐ°
++menutrans Suggest\ &Corrections<Tab>z=			ÐÑÐµÐŽÐ»ÐŸÐ¶ÐžÑÑ\ ÐžÑÐ¿&ÑÐ°Ð²Ð»ÐµÐœÐžÑ
++menutrans &Repeat\ correction<Tab>:spellrepall		ÐÐŸÐ²&ÑÐŸÑÐžÑÑ\ ÐžÑÐ¿ÑÐ°Ð²Ð»ÐµÐœÐžÐµ\ ÐŽÐ»Ñ\ Ð²ÑÐµÑ
+
++"-------------------
++menutrans Set\ language\ to\ "en"			Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ\ ÑÐ·ÑÐº\ "en"
++menutrans Set\ language\ to\ "en_au"			Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ\ ÑÐ·ÑÐº\ "en_au"
++menutrans Set\ language\ to\ "en_ca"			Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ\ ÑÐ·ÑÐº\ "en_ca"
++menutrans Set\ language\ to\ "en_gb"			Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ\ ÑÐ·ÑÐº\ "en_gb"
++menutrans Set\ language\ to\ "en_nz"			Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ\ ÑÐ·ÑÐº\ "en_nz"
++menutrans Set\ language\ to\ "en_us"			Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ\ ÑÐ·ÑÐº\ "en_us"
++menutrans &Find\ More\ Languages			&ÐÐ°Ð¹ÑÐž\ Ð±ÐŸÐ»ÑÑÐµ\ ÑÐ·ÑÐºÐŸÐ²
++let g:menutrans_set_lang_to =				'Ð£ÑÑÐ°ÐœÐŸÐ²ÐžÑÑ ÑÐ·ÑÐº'
+ ">>>---------------- Folds
+ menutrans &Enable/Disable\ folds<Tab>zi			ÐÐºÐ»/Ð²ÑÐºÐ»\ &ÑÐºÐ»Ð°ÐŽÐºÐž<Tab>zi
+ menutrans &View\ Cursor\ Line<Tab>zv			ÐÑÐºÑÑÑÑ\ ÑÑÑÐŸÐºÑ\ Ñ\ &ÐºÑÑÑÐŸÑÐŸÐŒ<Tab>zv
+@@ -217,7 +244,7 @@
+ menutrans Max\ &Width<Tab>^W\|				ÐÐ°ÐºÑÐžÐŒÐ°Ð»ÑÐœÐ°Ñ\ &ÑÐžÑÐžÐœÐ°<Tab>^W\|
+ menutrans Min\ Widt&h<Tab>^W1\|				ÐÐžÐœÐžÐŒÐ°Ð»&ÑÐœÐ°Ñ\ ÑÐžÑÐžÐœÐ°<Tab>^W1\|
+ ">>>----------------- Window/Move To
+-menutrans &Top<Tab>^WK					ÐÐ°&Ð²ÐµÑÑ
+<Tab>^WK
++menutrans &Top<Tab>^WK					Ð&Ð²ÐµÑÑ
+<Tab>^WK
+ menutrans &Bottom<Tab>^WJ				Ð&ÐœÐžÐ·<Tab>^WJ
+ menutrans &Left\ side<Tab>^WH				Ð&Ð»ÐµÐ²ÐŸ<Tab>^WH
+ menutrans &Right\ side<Tab>^WL				Ð&Ð¿ÑÐ°Ð²ÐŸ<Tab>^WL
+@@ -294,3 +321,6 @@
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\nÐ&ÑÐŒÐµÐœÐ°"
+ "
+ let menutrans_no_file = "[ÐÐµÑ ÑÐ°Ð¹Ð»Ð°]"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sk_sk.iso_8859-2.vim vim73/runtime/lang/menu_sk_sk.iso_8859-2.vim
+--- vim73.orig/runtime/lang/menu_sk_sk.iso_8859-2.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_sk_sk.iso_8859-2.vim	2013-06-07 17:07:16.525628156 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Slovak
+ " Translated By:	Martin Lacko <lacko@host.sk>
+-" Last Change:		2003 Mar 30
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding iso-8859-2
+ 
+@@ -230,3 +232,6 @@
+ menutrans Co&lor\ test		Test\ &farieb
+ menutrans &Highlight\ test	&Test\ zvýrazòovania
+ menutrans &Convert\ to\ HTML	&Previes»\ do\ HTML
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sl_si.cp1250.vim vim73/runtime/lang/menu_sl_si.cp1250.vim
+--- vim73.orig/runtime/lang/menu_sl_si.cp1250.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_sl_si.cp1250.vim	2013-06-07 17:07:16.552294747 +0000
+@@ -11,6 +11,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding cp1250
+ 
+@@ -292,3 +294,6 @@
+ let g:menutrans_fileformat_dialog = "Izberite format datoteke"
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklièi"
+ " }}}
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sl_si.latin2.vim vim73/runtime/lang/menu_sl_si.latin2.vim
+--- vim73.orig/runtime/lang/menu_sl_si.latin2.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_sl_si.latin2.vim	2013-06-07 17:07:16.568961366 +0000
+@@ -11,6 +11,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding latin2
+ 
+@@ -292,3 +294,6 @@
+ let g:menutrans_fileformat_dialog = "Izberite format datoteke"
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Preklièi"
+ " }}}
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sl_si.utf-8.vim vim73/runtime/lang/menu_sl_si.utf-8.vim
+--- vim73.orig/runtime/lang/menu_sl_si.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_sl_si.utf-8.vim	2013-06-07 17:07:16.572294689 +0000
+@@ -11,6 +11,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -292,3 +294,6 @@
+ let g:menutrans_fileformat_dialog = "Izberite format datoteke"
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&PrekliÄi"
+ " }}}
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_slovak_slovak_republic.1250.vim vim73/runtime/lang/menu_slovak_slovak_republic.1250.vim
+--- vim73.orig/runtime/lang/menu_slovak_slovak_republic.1250.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_slovak_slovak_republic.1250.vim	2013-06-07 17:07:16.588961309 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:	Slovak
+ " Translated By:	Martin Lacko <lacko@host.sk>
+-" Last Change:		2006 Jun 17
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding cp1250
+ 
+@@ -230,3 +232,6 @@
+ menutrans Co&lor\ test		Test\ &farieb
+ menutrans &Highlight\ test	&Test\ zvýrazòovania
+ menutrans &Convert\ to\ HTML	&Previes\ do\ HTML
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sr_rs.ascii.vim vim73/runtime/lang/menu_sr_rs.ascii.vim
+--- vim73.orig/runtime/lang/menu_sr_rs.ascii.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_sr_rs.ascii.vim	2013-06-07 17:07:16.622294547 +0000
+@@ -7,6 +7,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Help menu
+ menutrans &Help		      Pomo&c
+@@ -256,3 +258,6 @@
+ let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
+ 
+ let menutrans_no_file = "[Nema datoteke]"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sr_rs.iso_8859-2.vim vim73/runtime/lang/menu_sr_rs.iso_8859-2.vim
+--- vim73.orig/runtime/lang/menu_sr_rs.iso_8859-2.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_sr_rs.iso_8859-2.vim	2013-06-07 17:07:16.635627842 +0000
+@@ -7,6 +7,9 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
++
+ scriptencoding iso8859-2
+ 
+ " Help menu
+@@ -257,3 +260,6 @@
+ let g:menutrans_fileformat_dialog = "Izaberite vrstu datoteke"
+ 
+ let menutrans_no_file = "[Nema datoteke]"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sr_rs.iso_8859-5.vim vim73/runtime/lang/menu_sr_rs.iso_8859-5.vim
+--- vim73.orig/runtime/lang/menu_sr_rs.iso_8859-5.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_sr_rs.iso_8859-5.vim	2013-06-07 17:07:16.642294490 +0000
+@@ -7,6 +7,9 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
++
+ scriptencoding iso8859-5
+ 
+ " Help menu
+@@ -257,3 +260,6 @@
+ let g:menutrans_fileformat_dialog = "ž×ÐÑÕàØâÕ Òàáâã ÔÐâÞâÕÚÕ"
+ 
+ let menutrans_no_file = "[œÕÜÐ ÔÐâÞâÕÚÕ]"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_sr_rs.utf-8.vim vim73/runtime/lang/menu_sr_rs.utf-8.vim
+--- vim73.orig/runtime/lang/menu_sr_rs.utf-8.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_sr_rs.utf-8.vim	2013-06-07 17:07:16.655627785 +0000
+@@ -7,6 +7,9 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
++
+ scriptencoding utf-8
+ 
+ " Help menu
+@@ -258,4 +261,7 @@
+ 
+ let menutrans_no_file = "[ÐÐµÐŒÐ° ÐŽÐ°ÑÐŸÑÐµÐºÐµ]"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim: tw=0 keymap=serbian
+diff -Naur vim73.orig/runtime/lang/menu_sv_se.latin1.vim vim73/runtime/lang/menu_sv_se.latin1.vim
+--- vim73.orig/runtime/lang/menu_sv_se.latin1.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_sv_se.latin1.vim	2013-06-07 17:07:16.715627614 +0000
+@@ -1,12 +1,14 @@
+ " Menu Translations:    Swedish
+ " Maintainer:		Johan Svedberg <johan@svedberg.com>
+-" Last Change:		2006 Apr 13
++" Last Change:		2012 May 01
+ 
+ " Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " The translations below are in latin1, but they work for cp1252 and
+ " iso-8859-15 without conversion as well.
+@@ -248,3 +250,6 @@
+ let g:menutrans_tags_dialog = "Skriv in namn på taggfiler.\nSeparera namn med komma."
+ let g:menutrans_textwidth_dialog = "Välj ny textbredd (0 för att förhindra formatering): "
+ let g:menutrans_fileformat_dialog = "Välj filformat som filen ska sparas med"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_uk_ua.cp1251.vim vim73/runtime/lang/menu_uk_ua.cp1251.vim
+--- vim73.orig/runtime/lang/menu_uk_ua.cp1251.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_uk_ua.cp1251.vim	2013-06-07 17:07:16.745627528 +0000
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
++
+ scriptencoding cp1251
+ 
+ " Help menu
+@@ -244,3 +247,5 @@
+ let g:menutrans_textwidth_dialog = "Âêàæ³òü íîâó øèðèíó òåêñòó (0 äëÿ â³äì³íè ôîìàòóâàííÿ)"
+ let g:menutrans_fileformat_dialog = "Âèáåð³òü ôîðìàò ôàéëó"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_uk_ua.koi8-u.vim vim73/runtime/lang/menu_uk_ua.koi8-u.vim
+--- vim73.orig/runtime/lang/menu_uk_ua.koi8-u.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_uk_ua.koi8-u.vim	2013-06-07 17:07:16.748960852 +0000
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
++
+ scriptencoding koi8-u
+ 
+ " Help menu
+@@ -244,3 +247,5 @@
+ let g:menutrans_textwidth_dialog = "÷ËÁÖŠÔØ ÎÏ×Õ ÛÉÒÉÎÕ ÔÅËÓÔÕ (0 ÄÌÑ ×ŠÄÍŠÎÉ ÆÏÍÁÔÕ×ÁÎÎÑ)"
+ let g:menutrans_fileformat_dialog = "÷ÉÂÅÒŠÔØ ÆÏÒÍÁÔ ÆÁÊÌÕ"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_vi_vn.vim vim73/runtime/lang/menu_vi_vn.vim
+--- vim73.orig/runtime/lang/menu_vi_vn.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_vi_vn.vim	2013-06-07 17:07:16.778960766 +0000
+@@ -14,6 +14,8 @@
+    finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -327,3 +329,6 @@
+ let g:menutrans_fileformat_choices = "&Unix\n&Dos\n&Mac\n&Há»§y bá»"
+ "
+ let menutrans_no_file = "[khÃŽng cÃ³ táº­p tin]"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_zh_cn.gb2312.vim vim73/runtime/lang/menu_zh_cn.gb2312.vim
+--- vim73.orig/runtime/lang/menu_zh_cn.gb2312.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_zh_cn.gb2312.vim	2013-06-07 17:07:16.848960566 +0000
+@@ -9,6 +9,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " This causes trouble for a broken iconv (symptom: last character is always
+ " ??).  Without this it works fine anyway, because gbk/cp936 is a superset of
+@@ -264,3 +266,6 @@
+ menutrans &Convert\ to\ HTML		×ª»»³É\ HTML(&C)
+ menutrans Set\ '&syntax'\ only		œöÉè¶š\ 'syntax'(&S)
+ menutrans Set\ '&filetype'\ too		Ò²Éè¶š\ 'filetype'(&F)
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_zh_cn.utf-8.vim vim73/runtime/lang/menu_zh_cn.utf-8.vim
+--- vim73.orig/runtime/lang/menu_zh_cn.utf-8.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/lang/menu_zh_cn.utf-8.vim	2013-06-07 17:07:16.892293776 +0000
+@@ -9,6 +9,8 @@
+   finish
+ endif
+ let did_menu_trans = 1
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ scriptencoding utf-8
+ 
+@@ -261,3 +263,6 @@
+ menutrans &Convert\ to\ HTML		èœ¬æ¢æ\ HTML(&C)
+ menutrans Set\ '&syntax'\ only		ä»
+è®Ÿå®\ 'syntax'(&S)
+ menutrans Set\ '&filetype'\ too		ä¹è®Ÿå®\ 'filetype'(&F)
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/lang/menu_zh_tw.utf-8.vim vim73/runtime/lang/menu_zh_tw.utf-8.vim
+--- vim73.orig/runtime/lang/menu_zh_tw.utf-8.vim	2010-05-15 11:04:03.000000000 +0000
++++ vim73/runtime/lang/menu_zh_tw.utf-8.vim	2013-06-07 17:07:16.932293662 +0000
+@@ -1,6 +1,6 @@
+ " Menu Translations:	Traditional Chinese
+ " Translated By:	Hung-Te Lin	<piaip@csie.ntu.edu.tw>
+-" Last Change:		2005/01/28 02:51:38
++" Last Change:		2012 May 01
+ 
+ " {{{ Quit when menu translations have already been done.
+ if exists("did_menu_trans")
+@@ -9,6 +9,9 @@
+ let did_menu_trans = 1
+ " }}}
+ 
++let s:keepcpo= &cpo
++set cpo&vim
++
+ scriptencoding utf-8
+ 
+ " {{{ Help menu: complete
+@@ -282,4 +285,7 @@
+ endif
+ " }}}
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:foldmethod=marker:nowrap:foldcolumn=2:foldlevel=1
+diff -Naur vim73.orig/runtime/macros/editexisting.vim vim73/runtime/macros/editexisting.vim
+--- vim73.orig/runtime/macros/editexisting.vim	2010-05-15 11:04:01.000000000 +0000
++++ vim73/runtime/macros/editexisting.vim	2013-06-07 17:07:17.005626786 +0000
+@@ -1,6 +1,6 @@
+ " Vim Plugin:	Edit the file with an existing Vim if possible
+ " Maintainer:	Bram Moolenaar
+-" Last Change:	2008 May 29
++" Last Change:	2013 Feb 24
+ 
+ " This is a plugin, drop it in your (Unix) ~/.vim/plugin or (Win32)
+ " $VIM/vimfiles/plugin directory.  Or make a symbolic link, so that you
+@@ -98,7 +98,7 @@
+ 	" Make this tab page the current one and find the window number.
+ 	exe 'tabnext ' . (i + 1)
+ 	let winnr = bufwinnr(a:fname)
+-	break;
++	break
+       endif
+     endfor
+   endif
+diff -Naur vim73.orig/runtime/macros/justify.vim vim73/runtime/macros/justify.vim
+--- vim73.orig/runtime/macros/justify.vim	2010-05-15 11:04:01.000000000 +0000
++++ vim73/runtime/macros/justify.vim	2013-06-07 17:07:17.088959881 +0000
+@@ -1,4 +1,4 @@
+-" Function to left and rigt align text.
++" Function to left and right align text.
+ "
+ " Written by:	Preben "Peppe" Guldberg <c928400@student.dtu.dk>
+ " Created:	980806 14:13 (or around that time anyway)
+@@ -256,18 +256,17 @@
+ 	let str = substitute(str, '\s\+$', '', '')
+ 	let str = substitute(str, '^\s\+', '', '')
+ 	let str = substitute(str, '\s\+', ' ', 'g')
+-	" Use substitute() hack to get strlen in characters instead of bytes
+-	let str_n = strlen(substitute(str, '.', 'x', 'g'))
++	let str_n = strdisplaywidth(str)
+ 
+ 	" Possible addition of space after punctuation
+ 	if exists("join_str")
+ 	    let str = substitute(str, join_str, '\1 ', 'g')
+ 	endif
+-	let join_n = strlen(substitute(str, '.', 'x', 'g')) - str_n
++	let join_n = strdisplaywidth(str) - str_n
+ 
+ 	" Can extraspaces be added?
+ 	" Note that str_n may be less than strlen(str) [joinspaces above]
+-	if strlen(substitute(str, '.', 'x', 'g')) < tw - indent_n && str_n > 0
++	if strdisplaywidth(str) <= tw - indent_n && str_n > 0
+ 	    " How many spaces should be added
+ 	    let s_add = tw - str_n - indent_n - join_n
+ 	    let s_nr  = strlen(substitute(str, '\S', '', 'g') ) - join_n
+diff -Naur vim73.orig/runtime/macros/less.bat vim73/runtime/macros/less.bat
+--- vim73.orig/runtime/macros/less.bat	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/macros/less.bat	2013-06-07 17:07:17.092293205 +0000
+@@ -0,0 +1,10 @@
++@echo off
++rem batch file to start Vim with less.vim.
++rem Read stdin if no arguments were given.
++rem Written by Ken Takata.
++
++if "%1"=="" (
++  vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" -
++) else (
++  vim --cmd "let no_plugin_maps = 1" -c "runtime! macros/less.vim" %*
++)
+diff -Naur vim73.orig/runtime/macros/less.sh vim73/runtime/macros/less.sh
+--- vim73.orig/runtime/macros/less.sh	2010-05-15 11:04:01.000000000 +0000
++++ vim73/runtime/macros/less.sh	2013-06-07 17:07:17.115626471 +0000
+@@ -1,16 +1,24 @@
+ #!/bin/sh
+ # Shell script to start Vim with less.vim.
+-# Read stdin if no arguments were given.
++# Read stdin if no arguments were given and stdin was redirected.
+ 
+ if test -t 1; then
+- if test $# = 0; then
+-   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
++  if test $# = 0; then
++    if test -t 0; then
++      echo "Missing filename" 1>&2
++      exit
++    fi
++    vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' -
+   else
+-   vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
++    vim --cmd 'let no_plugin_maps = 1' -c 'runtime! macros/less.vim' "$@"
+   fi
+ else
+   # Output is not a terminal, cat arguments or stdin
+   if test $# = 0; then
++    if test -t 0; then
++      echo "Missing filename" 1>&2
++      exit
++    fi
+     cat
+   else
+     cat "$@"
+diff -Naur vim73.orig/runtime/macros/less.vim vim73/runtime/macros/less.vim
+--- vim73.orig/runtime/macros/less.vim	2010-05-15 11:04:01.000000000 +0000
++++ vim73/runtime/macros/less.vim	2013-06-07 17:07:17.128959767 +0000
+@@ -1,6 +1,6 @@
+ " Vim script to work like "less"
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2006 Dec 05
++" Last Change:	2012 May 18
+ 
+ " Avoid loading this file twice, allow the user to define his own script.
+ if exists("loaded_less")
+@@ -92,7 +92,8 @@
+ fun! s:NextPage()
+   if line(".") == line("$")
+     if argidx() + 1 >= argc()
+-      quit
++      " Don't quit at the end of the last file
++      return
+     endif
+     next
+     1
+diff -Naur vim73.orig/runtime/macros/matchit.vim vim73/runtime/macros/matchit.vim
+--- vim73.orig/runtime/macros/matchit.vim	2010-05-15 11:04:01.000000000 +0000
++++ vim73/runtime/macros/matchit.vim	2013-06-07 17:07:17.192292919 +0000
+@@ -131,7 +131,7 @@
+     " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+',
+     "  \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>'
+     let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
+-      \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
++      \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
+     " s:all = pattern with all the keywords
+     let match_words = match_words . (strlen(match_words) ? "," : "") . default
+     if match_words !~ s:notslash . '\\\d'
+@@ -649,7 +649,7 @@
+   "   s:all	regexp based on s:pat and the default groups
+   " This part is copied and slightly modified from s:Match_wrapper().
+   let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") .
+-    \ '\/\*:\*\/,#if\%(def\)\=:#else\>:#elif\>:#endif\>'
++    \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>'
+   " Allow b:match_words = "GetVimMatchWords()" .
+   if b:match_words =~ ":"
+     let match_words = b:match_words
+@@ -808,5 +808,6 @@
+ endfun
+ 
+ let &cpo = s:save_cpo
++unlet s:save_cpo
+ 
+ " vim:sts=2:sw=2:
+diff -Naur vim73.orig/runtime/menu.vim vim73/runtime/menu.vim
+--- vim73.orig/runtime/menu.vim	2010-07-17 13:17:21.000000000 +0000
++++ vim73/runtime/menu.vim	2013-06-07 17:07:17.498958710 +0000
+@@ -2,7 +2,7 @@
+ " You can also use this as a start for your own set of menus.
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2009 Feb 26
++" Last Change:	2013 May 17
+ 
+ " Note that ":an" (short for ":anoremenu") is often used to make a menu work
+ " in all modes and avoid side effects from mappings defined by the user.
+@@ -101,7 +101,7 @@
+ an 10.320 &File.Open\ Tab\.\.\.<Tab>:tabnew	:browse tabnew<CR>
+ an 10.325 &File.&New<Tab>:enew			:confirm enew<CR>
+ an <silent> 10.330 &File.&Close<Tab>:close
+-	\ :if winheight(2) < 0 <Bar>
++	\ :if winheight(2) < 0 && tabpagewinnr(2) == 0 <Bar>
+ 	\   confirm enew <Bar>
+ 	\ else <Bar>
+ 	\   confirm close <Bar>
+@@ -132,7 +132,7 @@
+ an 10.620 &File.E&xit<Tab>:qa			:confirm qa<CR>
+ 
+ func! <SID>SelectAll()
+-  exe "norm gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
++  exe "norm! gg" . (&slm == "" ? "VG" : "gH\<C-O>G")
+ endfunc
+ 
+ func! s:FnameEscape(fname)
+@@ -308,8 +308,10 @@
+   endif
+   let n = inputdialog(g:menutrans_textwidth_dialog, &tw)
+   if n != ""
+-    " remove leading zeros to avoid it being used as an octal number
+-    let &tw = substitute(n, "^0*", "", "")
++    " Remove leading zeros to avoid it being used as an octal number.
++    " But keep a zero by itself.
++    let tw = substitute(n, "^0*", "", "")
++    let &tw = tw == '' ? 0 : tw 
+   endif
+ endfun
+ 
+@@ -434,6 +436,10 @@
+       let enc = &enc
+     endif
+ 
++    if !exists("g:menutrans_set_lang_to")
++      let g:menutrans_set_lang_to = 'Set language to'
++    endif
++
+     let found = 0
+     let s = globpath(&rtp, "spell/*." . enc . ".spl")
+     if s != ""
+@@ -441,8 +447,9 @@
+       for f in split(s, "\n")
+ 	let nm = substitute(f, '.*spell[/\\]\(..\)\.[^/\\]*\.spl', '\1', "")
+ 	if nm != "en" && nm !~ '/'
++          let _nm = nm
+ 	  let found += 1
+-	  let menuname = '&Tools.&Spelling.Set\ language\ to\ "' . nm . '"'
++	  let menuname = '&Tools.&Spelling.' . escape(g:menutrans_set_lang_to, "\\. \t|") . '\ "' . nm . '"'
+ 	  exe 'an 40.335.' . n . ' ' . menuname . ' :set spl=' . nm . ' spell<CR>'
+ 	  let s:undo_spellang += ['aun ' . menuname]
+ 	endif
+@@ -452,7 +459,7 @@
+     if found == 0
+       echomsg "Could not find other spell files"
+     elseif found == 1
+-      echomsg "Found spell file " . nm
++      echomsg "Found spell file " . _nm
+     else
+       echomsg "Found " . found . " more spell files"
+     endif
+diff -Naur vim73.orig/runtime/mswin.vim vim73/runtime/mswin.vim
+--- vim73.orig/runtime/mswin.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/mswin.vim	2013-06-07 17:07:17.508958682 +0000
+@@ -1,7 +1,7 @@
+ " Set options and add mapping such that Vim behaves a lot like MS-Windows
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last change:	2006 Apr 02
++" Last change:	2012 Jul 25
+ 
+ " bail out if this isn't wanted (mrsvim.vim uses this).
+ if exists("g:skip_loading_mswin") && g:skip_loading_mswin
+@@ -42,9 +42,10 @@
+ " Visual mode without the +virtualedit feature.  They are pasted as if they
+ " were characterwise instead.
+ " Uses the paste.vim autoload script.
++" Use CTRL-G u to have CTRL-Z only undo the paste.
+ 
+-exe 'inoremap <script> <C-V>' paste#paste_cmd['i']
+-exe 'vnoremap <script> <C-V>' paste#paste_cmd['v']
++exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
++exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
+ 
+ imap <S-Insert>		<C-V>
+ vmap <S-Insert>		<C-V>
+diff -Naur vim73.orig/runtime/optwin.vim vim73/runtime/optwin.vim
+--- vim73.orig/runtime/optwin.vim	2010-07-24 18:52:39.000000000 +0000
++++ vim73/runtime/optwin.vim	2013-06-07 17:07:17.525625301 +0000
+@@ -1,7 +1,7 @@
+ " These commands create the option window.
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2010 Jul 24
++" Last Change:	2013 May 20
+ 
+ " If there already is an option window, jump to that one.
+ if bufwinnr("option-window") > 0
+@@ -10,7 +10,7 @@
+     if @% == "option-window"
+       finish
+     endif
+-    exe "norm! \<C-W>w"
++    wincmd w
+     if s:thiswin == winnr()
+       break
+     endif
+@@ -26,12 +26,8 @@
+ fun! <SID>CR()
+ 
+   " If on a continued comment line, go back to the first comment line
+-  let lnum = line(".")
++  let lnum = search("^[^\t]", 'bWcn')
+   let line = getline(lnum)
+-  while line[0] == "\t"
+-    let lnum = lnum - 1
+-    let line = getline(lnum)
+-  endwhile
+ 
+   " <CR> on a "set" line executes the option line
+   if match(line, "^ \tset ") >= 0
+@@ -82,11 +78,11 @@
+     if getline(a:lnum - 1) =~ "(local to"
+       let local = 1
+       let thiswin = winnr()
+-      exe "norm! \<C-W>p"
++      wincmd p
+       if exists("b:current_syntax") && b:current_syntax == "help"
+-	exe "norm! \<C-W>j"
++	wincmd j
+ 	if winnr() == thiswin
+-	  exe "norm! \<C-W>j"
++	  wincmd j
+ 	endif
+       endif
+     else
+@@ -111,10 +107,10 @@
+   if name == "pt" && &pt =~ "\x80"
+     let val = <SID>PTvalue()
+   else
+-    exe "let val = substitute(&" . name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
++    let val = escape(eval('&' . name), " \t\\\"|")
+   endif
+   if a:local
+-    exe "norm! " . a:thiswin . "\<C-W>w"
++    exe a:thiswin . "wincmd w"
+   endif
+   if match(a:line, "=") >= 0 || (val != "0" && val != "1")
+     call setline(a:lnum, " \tset " . name . "=" . val)
+@@ -139,7 +135,7 @@
+ " Relies on syntax highlighting to be switched on.
+ let s:thiswin = winnr()
+ while exists("b:current_syntax") && b:current_syntax == "help"
+-  exe "norm! \<C-W>w"
++  wincmd w
+   if s:thiswin == winnr()
+     break
+   endif
+@@ -147,7 +143,7 @@
+ 
+ " Open the window
+ new option-window
+-setlocal ts=15 tw=0 noro
++setlocal ts=15 tw=0 noro buftype=nofile
+ 
+ " Insert help and a "set" command for each option.
+ call append(0, '" Each "set" line shows the current value of an option (on the left).')
+@@ -162,9 +158,7 @@
+ 
+ " Init a local binary option
+ fun! <SID>BinOptionL(name)
+-  exe "norm! \<C-W>p"
+-  exe "let val = &" . a:name
+-  exe "norm! \<C-W>p"
++  let val = getwinvar(winnr('#'), '&' . a:name)
+   call append("$", substitute(substitute(" \tset " . val . a:name . "\t" .
+ 	\!val . a:name, "0", "no", ""), "1", "", ""))
+ endfun
+@@ -177,16 +171,13 @@
+ 
+ " Init a local string option
+ fun! <SID>OptionL(name)
+-  exe "norm! \<C-W>p"
+-  exe "let val = substitute(&" . a:name . ', "[ \\t\\\\\"|]", "\\\\\\0", "g")'
+-  exe "norm! \<C-W>p"
++  let val = escape(getwinvar(winnr('#'), '&' . a:name), " \t\\\"|")
+   call append("$", " \tset " . a:name . "=" . val)
+ endfun
+ 
+ " Init a global string option
+ fun! <SID>OptionG(name, val)
+-  call append("$", " \tset " . a:name . "=" . substitute(a:val, '[ \t\\"|]',
+-	\ '\\\0', "g"))
++  call append("$", " \tset " . a:name . "=" . escape(a:val, " \t\\\"|"))
+ endfun
+ 
+ let s:idx = 1
+@@ -267,6 +258,8 @@
+ call <SID>BinOptionG("is", &is)
+ call append("$", "magic\tchange the way backslashes are used in search patterns")
+ call <SID>BinOptionG("magic", &magic)
++call append("$", "regexpengine\tselect the default regexp engine used")
++call <SID>OptionG("re", &re)
+ call append("$", "ignorecase\tignore case when using a search pattern")
+ call <SID>BinOptionG("ic", &ic)
+ call append("$", "smartcase\toverride 'ignorecase' when pattern has upper case characters")
+@@ -315,6 +308,8 @@
+   call append("$", " \tset cspc=" . &cspc)
+   call append("$", "cscopequickfix\twhen to open a quickfix window for cscope")
+   call <SID>OptionG("csqf", &csqf)
++  call append("$", "cscoperelative\tfile names in a cscope file are relative to that file")
++  call <SID>BinOptionG("csre", &csre)
+ endif
+ 
+ 
+@@ -1042,6 +1037,10 @@
+   call append("$", "wildignore\tlist of patterns to ignore files for file name completion")
+   call <SID>OptionG("wig", &wig)
+ endif
++call append("$", "fileignorecase\tignore case when using file names")
++call <SID>BinOptionG("fic", &fic)
++call append("$", "wildignorecase\tignore case when completing file names")
++call <SID>BinOptionG("wic", &wic)
+ if has("wildmenu")
+   call append("$", "wildmenu\tcommand-line completion shows a list of matches")
+   call <SID>BinOptionG("wmnu", &wmnu)
+@@ -1069,6 +1068,8 @@
+ call <SID>OptionG("shq", &shq)
+ call append("$", "shellxquote\tlike 'shellquote' but include the redirection")
+ call <SID>OptionG("sxq", &sxq)
++call append("$", "shellxescape\tcharacters to escape when 'shellxquote' is (")
++call <SID>OptionG("sxe", &sxe)
+ call append("$", "shellcmdflag\targument for 'shell' to execute a command")
+ call <SID>OptionG("shcf", &shcf)
+ call append("$", "shellredir\tused to redirect command output to a file")
+@@ -1340,3 +1341,5 @@
+ let &sc = s:old_sc
+ let &cpo = s:cpo_save
+ unlet s:old_title s:old_icon s:old_ru s:old_sc s:cpo_save s:idx s:lnum
++
++" vim: ts=8 sw=2 sts=2
+diff -Naur vim73.orig/runtime/plugin/getscriptPlugin.vim vim73/runtime/plugin/getscriptPlugin.vim
+--- vim73.orig/runtime/plugin/getscriptPlugin.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/plugin/getscriptPlugin.vim	2013-06-07 17:07:17.572291834 +0000
+@@ -1,6 +1,6 @@
+ " ---------------------------------------------------------------------
+ " getscriptPlugin.vim
+-"  Author:	Charles E. Campbell, Jr.
++"  Author:	Charles E. Campbell
+ "  Date:	Jan 07, 2008
+ "  Installing:	:help glvs-install
+ "  Usage:	:help glvs
+@@ -19,7 +19,7 @@
+  endif
+  finish
+ endif
+-let g:loaded_getscriptPlugin = "v32"
++let g:loaded_getscriptPlugin = "v35"
+ let s:keepcpo                = &cpo
+ set cpo&vim
+ 
+diff -Naur vim73.orig/runtime/plugin/matchparen.vim vim73/runtime/plugin/matchparen.vim
+--- vim73.orig/runtime/plugin/matchparen.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/plugin/matchparen.vim	2013-06-07 17:07:17.598958425 +0000
+@@ -1,19 +1,29 @@
+ " Vim plugin for showing matching parens
+ " Maintainer:  Bram Moolenaar <Bram@vim.org>
+-" Last Change: 2008 Sep 03
++" Last Change: 2013 May 08
+ 
+ " Exit quickly when:
+ " - this plugin was already loaded (or disabled)
+ " - when 'compatible' is set
+-" - the "CursorMoved" autocmd event is not availble.
++" - the "CursorMoved" autocmd event is not available.
+ if exists("g:loaded_matchparen") || &cp || !exists("##CursorMoved")
+   finish
+ endif
+ let g:loaded_matchparen = 1
+ 
++if !exists("g:matchparen_timeout")
++  let g:matchparen_timeout = 300
++endif
++if !exists("g:matchparen_insert_timeout")
++  let g:matchparen_insert_timeout = 60
++endif
++
+ augroup matchparen
+   " Replace all matchparen autocommands
+   autocmd! CursorMoved,CursorMovedI,WinEnter * call s:Highlight_Matching_Pair()
++  if exists('##TextChanged')
++    autocmd! TextChanged,TextChangedI * call s:Highlight_Matching_Pair()
++  endif
+ augroup END
+ 
+ " Skip the rest if it was already done.
+@@ -82,8 +92,9 @@
+   endif
+ 
+   " When not in a string or comment ignore matches inside them.
++  " We match "escape" for special items, such as lispEscapeSpecial.
+   let s_skip ='synIDattr(synID(line("."), col("."), 0), "name") ' .
+-	\ '=~?  "string\\|character\\|singlequote\\|comment"'
++	\ '=~?  "string\\|character\\|singlequote\\|escape\\|comment"'
+   execute 'if' s_skip '| let s_skip = 0 | endif'
+ 
+   " Limit the search to lines visible in the window.
+@@ -95,10 +106,15 @@
+     let stopline = stoplinetop
+   endif
+ 
++  " Limit the search time to 300 msec to avoid a hang on very long lines.
++  " This fails when a timeout is not supported.
++  if mode() == 'i' || mode() == 'R'
++    let timeout = exists("b:matchparen_insert_timeout") ? b:matchparen_insert_timeout : g:matchparen_insert_timeout
++  else
++    let timeout = exists("b:matchparen_timeout") ? b:matchparen_timeout : g:matchparen_timeout
++  endif
+   try
+-    " Limit the search time to 300 msec to avoid a hang on very long lines.
+-    " This fails when a timeout is not supported.
+-    let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, 300)
++    let [m_lnum, m_col] = searchpairpos(c, '', c2, s_flags, s_skip, stopline, timeout)
+   catch /E118/
+     " Can't use the timeout, restrict the stopline a bit more to avoid taking
+     " a long time on closed folds and long lines.
+diff -Naur vim73.orig/runtime/plugin/netrwPlugin.vim vim73/runtime/plugin/netrwPlugin.vim
+--- vim73.orig/runtime/plugin/netrwPlugin.vim	2010-07-27 14:55:00.000000000 +0000
++++ vim73/runtime/plugin/netrwPlugin.vim	2013-06-07 17:07:17.612291720 +0000
+@@ -1,9 +1,9 @@
+ " netrwPlugin.vim: Handles file transfer and remote directory listing across a network
+ "            PLUGIN SECTION
+-" Date:		Jul 27, 2010
+-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
++" Date:		Apr 30, 2013
++" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+ " GetLatestVimScripts: 1075 1 :AutoInstall: netrw.vim
+-" Copyright:    Copyright (C) 1999-2008 Charles E. Campbell, Jr. {{{1
++" Copyright:    Copyright (C) 1999-2012 Charles E. Campbell {{{1
+ "               Permission is hereby granted to use and distribute this code,
+ "               with or without modifications, provided that this copyright
+ "               notice is copied with it. Like anything else that's free,
+@@ -20,13 +20,15 @@
+ if &cp || exists("g:loaded_netrwPlugin")
+  finish
+ endif
+-let g:loaded_netrwPlugin = "v140"
++"DechoTabOn
++let g:loaded_netrwPlugin = "v149"
+ if v:version < 702
+  echohl WarningMsg | echo "***netrw*** you need vim version 7.2 for this version of netrw" | echohl None
+  finish
+ endif
+ let s:keepcpo = &cpo
+ set cpo&vim
++"DechoTabOn
+ 
+ " ---------------------------------------------------------------------
+ " Public Interface: {{{1
+@@ -34,30 +36,26 @@
+ " Local Browsing: {{{2
+ augroup FileExplorer
+  au!
+- au BufEnter * silent! call s:LocalBrowse(expand("<amatch>"))
+- au VimEnter * silent! call s:VimEnter(expand("<amatch>"))
++ " SEE Benzinger problem...
++ au BufEnter *	sil! call s:LocalBrowse(expand("<amatch>"))
++ au VimEnter *	sil! call s:VimEnter(expand("<amatch>"))
+  if has("win32") || has("win95") || has("win64") || has("win16")
+-  au BufEnter .* silent! call s:LocalBrowse(expand("<amatch>"))
++  au BufEnter .* sil! call s:LocalBrowse(expand("<amatch>"))
+  endif
+ augroup END
+ 
+ " Network Browsing Reading Writing: {{{2
+ augroup Network
+  au!
+- if has("win32") || has("win95") || has("win64") || has("win16")
+-  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
+- else
+-  au BufReadCmd  file://*		exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://\(.*\)','\1',""))|exe "bwipe ".fnameescape(expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
+-  au BufReadCmd  file://localhost/*	exe "silent doau BufReadPre ".fnameescape(netrw#RFC2396(expand("<amatch>")))|exe 'e '.fnameescape(substitute(netrw#RFC2396(expand("<amatch>")),'file://localhost/\(.*\)','\1',""))|exe "bwipe ".fnameescape(substitute(expand("<amatch>"),'file://\(\k\+@\)\=','',''))|exe "silent doau BufReadPost ".fnameescape(netrw#RFC2396(expand("<amatch>")))
+- endif
+- au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "silent doau BufReadPost ".fnameescape(expand("<amatch>"))
+- au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe "silent doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "silent doau FileReadPost ".fnameescape(expand("<amatch>"))
+- au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau BufWritePost ".fnameescape(expand("<amatch>"))
+- au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*		exe "silent doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "silent doau FileWritePost ".fnameescape(expand("<amatch>"))
++ au BufReadCmd   file://*									call netrw#FileUrlRead(expand("<amatch>"))
++ au BufReadCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau BufReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(2,expand("<amatch>"))|exe "sil doau BufReadPost ".fnameescape(expand("<amatch>"))
++ au FileReadCmd  ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe "sil doau FileReadPre ".fnameescape(expand("<amatch>"))|call netrw#Nread(1,expand("<amatch>"))|exe "sil doau FileReadPost ".fnameescape(expand("<amatch>"))
++ au BufWriteCmd  ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau BufWritePre ".fnameescape(expand("<amatch>"))|exe 'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau BufWritePost ".fnameescape(expand("<amatch>"))
++ au FileWriteCmd ftp://*,rcp://*,scp://*,dav://*,davs://*,rsync://*,sftp://*			exe "sil doau FileWritePre ".fnameescape(expand("<amatch>"))|exe "'[,']".'Nwrite '.fnameescape(expand("<amatch>"))|exe "sil doau FileWritePost ".fnameescape(expand("<amatch>"))
+  try
+-  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
++  au SourceCmd   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
+  catch /^Vim\%((\a\+)\)\=:E216/
+-  au SourcePre   ftp://*,rcp://*,scp://*,http://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
++  au SourcePre   ftp://*,rcp://*,scp://*,http://*,https://*,dav://*,davs://*,rsync://*,sftp://*	exe 'Nsource '.fnameescape(expand("<amatch>"))
+  endtry
+ augroup END
+ 
+@@ -94,27 +92,37 @@
+   " unfortunate interaction -- debugging calls can't be used here;
+   " the BufEnter event causes triggering when attempts to write to
+   " the DBG buffer are made.
++  if !exists("s:vimentered")
++   return
++  endif
++"  call Decho("s:LocalBrowse(dirname<".a:dirname.">){")
+ "  echomsg "dirname<".a:dirname.">"
+   if has("amiga")
+    " The check against '' is made for the Amiga, where the empty
+    " string is the current directory and not checking would break
+    " things such as the help command.
++"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (amiga)")
+    if a:dirname != '' && isdirectory(a:dirname)
+-    silent! call netrw#LocalBrowseCheck(a:dirname)
++    sil! call netrw#LocalBrowseCheck(a:dirname)
+    endif
+   elseif isdirectory(a:dirname)
+ "   echomsg "dirname<".dirname."> isdir"
+-   silent! call netrw#LocalBrowseCheck(a:dirname)
++"   call Decho("(LocalBrowse) dirname<".a:dirname.">  (not amiga)")
++   sil! call netrw#LocalBrowseCheck(a:dirname)
+   endif
+   " not a directory, ignore it
++"  call Decho("|return s:LocalBrowse }")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+ " s:VimEnter: {{{2
+ fun! s:VimEnter(dirname)
+-  let curwin= winnr()
++"  call Decho("VimEnter(dirname<".a:dirname.">){")
++  let curwin       = winnr()
++  let s:vimentered = 1
+   windo if a:dirname != expand("%")|call s:LocalBrowse(expand("%:p"))|endif
+   exe curwin."wincmd w"
++"  call Decho("|return VimEnter }")
+ endfun
+ 
+ " ---------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/plugin/tarPlugin.vim vim73/runtime/plugin/tarPlugin.vim
+--- vim73.orig/runtime/plugin/tarPlugin.vim	2010-08-10 00:02:24.000000000 +0000
++++ vim73/runtime/plugin/tarPlugin.vim	2013-06-07 17:07:17.648958282 +0000
+@@ -1,6 +1,6 @@
+ " tarPlugin.vim -- a Vim plugin for browsing tarfiles
+ " Original was copyright (c) 2002, Michael C. Toren <mct@toren.net>
+-" Modified by Charles E. Campbell, Jr.
++" Modified by Charles E. Campbell
+ " Distributed under the GNU General Public License.
+ "
+ " Updates are available from <http://michael.toren.net/code/>.  If you
+@@ -14,7 +14,7 @@
+ if &cp || exists("g:loaded_tarPlugin")
+  finish
+ endif
+-let g:loaded_tarPlugin = "v26"
++let g:loaded_tarPlugin = "v29"
+ let s:keepcpo          = &cpo
+ set cpo&vim
+ 
+diff -Naur vim73.orig/runtime/plugin/tohtml.vim vim73/runtime/plugin/tohtml.vim
+--- vim73.orig/runtime/plugin/tohtml.vim	2010-08-12 19:59:26.000000000 +0000
++++ vim73/runtime/plugin/tohtml.vim	2013-06-07 17:07:17.655624930 +0000
+@@ -1,31 +1,170 @@
+ " Vim plugin for converting a syntax highlighted file to HTML.
+ " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
+-" Last Change: 2010 Aug 12
++" Last Change: 2013 May 31
+ "
+ " The core of the code is in $VIMRUNTIME/autoload/tohtml.vim and
+ " $VIMRUNTIME/syntax/2html.vim
+ "
+-" TODO:
++" TODO: {{{
++"   * Options for generating the CSS in external style sheets. New :TOcss
++"     command to convert the current color scheme into a (mostly) generic CSS
++"     stylesheet which can be re-used. Alternate stylesheet support? Good start
++"     by Erik Falor
++"     ( https://groups.google.com/d/topic/vim_use/7XTmC4D22dU/discussion ).
++"   * Add optional argument to :TOhtml command to specify mode (gui, cterm,
++"     term) to use for the styling. Suggestion by "nacitar".
++"   * Add way to override or specify which RGB colors map to the color numbers
++"     in cterm. Get better defaults than just guessing? Suggestion by "nacitar".
++"   * Disable filetype detection until after all processing is done.
++"   * Add option for not generating the hyperlink on stuff that looks like a
++"     URL? Or just color the link to fit with the colorscheme (and only special
++"     when hovering)?
++"   * Bug: Opera does not allow printing more than one page if uncopyable
++"     regions is turned on. Possible solution: Add normal text line numbers with
++"     display:none, set to display:inline for print style sheets, and hide
++"     <input> elements for print, to allow Opera printing multiple pages (and
++"     other uncopyable areas?). May need to make the new text invisible to IE
++"     with conditional comments to prevent copying it, IE for some reason likes
++"     to copy hidden text. Other browsers too?
++"   * Bug: still a 1px gap throughout the fold column when html_prevent_copy is
++"     "fn" in some browsers. Specifically, in Chromium on Ubuntu (but not Chrome
++"     on Windows). Perhaps it is font related?
++"   * Bug: still some gaps in the fold column when html_prevent_copy contains
++"     'd' and showing the whole diff (observed in multiple browsers). Only gaps
++"     on diff lines though.
++"   * Undercurl support via CSS3, with fallback to dotted or something:
++"	https://groups.google.com/d/topic/vim_use/BzXA6He1pHg/discussion
++"   * Redo updates for modified default foldtext (v11) when/if the patch is
++"     accepted to modify it.
++"   * Test case +diff_one_file-dynamic_folds+expand_tabs-hover_unfold
++"		+ignore_conceal-ignore_folding+no_foldcolumn+no_pre+no_progress
++"		+number_lines-pre_wrap-use_css+use_xhtml+whole_filler.xhtml
++"     does not show the whole diff filler as it is supposed to?
++"   * Bug: when 'isprint' is wrong for the current encoding, will generate
++"     invalid content. Can/should anything be done about this? Maybe a separate
++"     plugin to correct 'isprint' based on encoding?
++"   * Check to see if the windows-125\d encodings actually work in Unix without
++"     the 8bit- prefix. Add prefix to autoload dictionaries for Unix if not.
++"   * Font auto-detection similar to
++"     http://www.vim.org/scripts/script.php?script_id=2384 but for a variety of
++"     platforms.
++"   * Error thrown when sourcing 2html.vim directly when plugins are not loaded.
++"   * Pull in code from http://www.vim.org/scripts/script.php?script_id=3113 :
++"	- listchars support
++"	- full-line background highlight
++"	- other?
++"   * Make it so deleted lines in a diff don't create side-scrolling (get it
++"     free with full-line background highlight above).
+ "   * Restore open/closed folds and cursor position after processing each file
+-"     with option not to restore for speed increase
+-"   * Add extra meta info (generation time, etc.)
+-"   * Tidy up so we can use strict doctype more?
++"     with option not to restore for speed increase.
++"   * Add extra meta info (generation time, etc.)?
++"   * Tidy up so we can use strict doctype in even more situations
+ "   * Implementation detail: add threshold for writing the lines to the html
+ "     buffer before we're done (5000 or so lines should do it)
+ "   * TODO comments for code cleanup scattered throughout
++"}}}
+ 
+ if exists('g:loaded_2html_plugin')
+   finish
+ endif
+-let g:loaded_2html_plugin = 'vim7.3_v6'
++let g:loaded_2html_plugin = 'vim7.3_v13'
++
++"
++" Changelog: {{{
++"
++"   7.3_v13 (this version): Keep foldmethod at manual in the generated file and
++"			    insert modeline to set it to manual.
++"			    Fix bug: diff mode with 2 unsaved buffers creates a
++"			    duplicate of one buffer instead of including both.
++"			    Add anchors to each line so you can put '#L123'
++"			    or '#123' at the end of the URL to jump to line 123
++"			    (idea by Andy Spencer). Add javascript to open folds
++"			    to show the anchor being jumped to if it is hidden.
++"			    Fix XML validation error: &nsbp; not part of XML.
++"			    Allow TOhtml to chain together with other commands
++"			    using |.
++"   7.3_v12 (9910cbff5f16): Fix modeline mangling to also work for when multiple
++"			    highlight groups make up the start-of-modeline text.
++"			    Improve render time of page with uncopyable regions
++"			    by not using one-input-per-char. Change name of
++"			    uncopyable option from html_unselectable to
++"			    html_prevent_copy. Added html_no_invalid option and
++"			    default to inserting invalid markup for uncopyable
++"			    regions to prevent MS Word from pasting undeletable
++"			    <input> elements. Fix 'cpo' handling (Thilo Six).
++"		 7.3_v12b1: Add html_unselectable option. Rework logic to
++"			    eliminate post-processing substitute commands in
++"			    favor of doing the work up front. Remove unnecessary
++"			    special treatment of 'LineNr' highlight group. Minor
++"			    speed improvements. Fix modeline mangling in
++"			    generated output so it works for text in the first
++"			    column. Fix missing line number and fold column in
++"			    diff filler lines. Fix that some fonts have a 1px
++"			    gap (using a dirty hack, improvements welcome). Add
++"			    "colorscheme" meta tag. Does NOT include support for
++"			    the new default foldtext added in v11, as the patch
++"			    adding it has not yet been included in Vim.
++"   7.3_v11 ( unreleased ): Support new default foldtext from patch by Christian
++"			    Brabandt in
++"			    http://groups.google.com/d/topic/vim_dev/B6FSGfq9VoI/discussion.
++"			    This patch has not yet been included in Vim, thus
++"			    these changes are removed in the next version.
++"   7.3_v10 (fd09a9c8468e): Fix error E684 when converting a range wholly inside
++"			    multiple nested folds with dynamic folding on.
++"			    Also fix problem with foldtext in this situation.
++"   7.3_v9  (0877b8d6370e): Add html_pre_wrap option active with html_use_css
++"			    and without html_no_pre, default value same as
++"			    'wrap' option, (Andy Spencer). Don't use
++"			    'fileencoding' for converted document encoding if
++"			    'buftype' indicates a special buffer which isn't
++"			    written.
++"   7.3_v8  (85c5a72551e2): Add html_expand_tabs option to allow leaving tab
++"			    characters in generated output (Andy Spencer).
++"			    Escape text that looks like a modeline so Vim
++"			    doesn't use anything in the converted HTML as a
++"			    modeline. Bugfixes: Fix folding when a fold starts
++"			    before the conversion range. Remove fold column when
++"			    there are no folds.
++"   7.3_v7  (840c3cadb842): see betas released on vim_dev below:
++"		  7.3_v7b3: Fixed bug, convert Unicode to UTF-8 all the way.
++"		  7.3_v7b2: Remove automatic detection of encodings that are not
++"			    supported by all major browsers according to
++"			    http://wiki.whatwg.org/wiki/Web_Encodings and
++"			    convert to UTF-8 for all Unicode encodings. Make
++"			    HTML encoding to Vim encoding detection be
++"			    case-insensitive for built-in pairs.
++"		  7.3_v7b1: Remove use of setwinvar() function which cannot be
++"			    called in restricted mode (Andy Spencer). Use
++"			    'fencoding' instead of 'encoding' to determine by
++"			    charset, and make sure the 'fenc' of the generated
++"			    file matches its indicated charset. Add charsets for
++"			    all of Vim's natively supported encodings.
++"   7.3_v6  (0d3f0e3d289b): Really fix bug with 'nowrapscan', 'magic' and other
++"			    user settings interfering with diff mode generation,
++"			    trailing whitespace (e.g. line number column) when
++"			    using html_no_pre, and bugs when using
++"			    html_hover_unfold.
++"   7.3_v5  ( unreleased ): Fix bug with 'nowrapscan' and also with out-of-sync
++"			    folds in diff mode when first line was folded.
++"   7.3_v4  (7e008c174cc3): Bugfixes, especially for xhtml markup, and diff mode
++"   7.3_v3  (a29075150aee): Refactor option handling and make html_use_css
++"			    default to true when not set to anything. Use strict
++"			    doctypes where possible. Rename use_xhtml option to
++"			    html_use_xhtml for consistency. Use .xhtml extension
++"			    when using this option. Add meta tag for settings.
++"   7.3_v2  (80229a724a11): Fix syntax highlighting in diff mode to use both the
++"			    diff colors and the normal syntax colors
++"   7.3_v1  (e7751177126b): Add conceal support and meta tags in output
++"   Pre-v1 baseline: Mercurial changeset 3c9324c0800e
++"}}}
+ 
+ " Define the :TOhtml command when:
+ " - 'compatible' is not set
+ " - this plugin was not already loaded
+-" - user commands are available.
++" - user commands are available. {{{
+ if !&cp && !exists(":TOhtml") && has("user_commands")
+-  command -range=% TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
+-endif
++  command -range=% -bar TOhtml :call tohtml#Convert2HTML(<line1>, <line2>)
++endif "}}}
+ 
+ " Make sure any patches will probably use consistent indent
+-"   vim: ts=8 sw=2 sts=2 noet
++"   vim: ts=8 sw=2 sts=2 noet fdm=marker
+diff -Naur vim73.orig/runtime/plugin/vimballPlugin.vim vim73/runtime/plugin/vimballPlugin.vim
+--- vim73.orig/runtime/plugin/vimballPlugin.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/plugin/vimballPlugin.vim	2013-06-07 17:07:17.672291549 +0000
+@@ -16,18 +16,22 @@
+ if &cp || exists("g:loaded_vimballPlugin")
+  finish
+ endif
+-let g:loaded_vimballPlugin = "v31"
++let g:loaded_vimballPlugin = "v35"
+ let s:keepcpo              = &cpo
+ set cpo&vim
+ 
+ " ------------------------------------------------------------------------------
+ " Public Interface: {{{1
+-com! -ra   -complete=file -na=+ -bang MkVimball call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
+-com! -na=? -complete=dir  UseVimball			call vimball#Vimball(1,<f-args>)
+-com! -na=0                VimballList			call vimball#Vimball(0)
+-com! -na=* -complete=dir  RmVimball				call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
+-au SourceCmd  *.vba.gz,*.vba.bz2,*.vba.zip		call vimball#Decompress(expand("<amatch>"))|call vimball#Vimball(1)
+-au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'| setlocal ma ff=unix noma |endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
++com! -ra   -complete=file -na=+ -bang MkVimball				call vimball#MkVimball(<line1>,<line2>,<bang>0,<f-args>)
++com! -na=? -complete=dir  UseVimball						call vimball#Vimball(1,<f-args>)
++com! -na=0                VimballList						call vimball#Vimball(0)
++com! -na=* -complete=dir  RmVimball							call vimball#SaveSettings()|call vimball#RmVimball(<f-args>)|call vimball#RestoreSettings()
++au BufEnter  *.vba,*.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
++au SourceCmd *.vba.gz,*.vba.bz2,*.vba.zip,*.vba.xz			if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
++au SourceCmd *.vba											if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
++au BufEnter  *.vmb,*.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz	setlocal bt=nofile fmr=[[[,]]] fdm=marker|if &ff != 'unix'|setlocal ma ff=unix noma|endif|call vimball#ShowMesg(0,"Source this file to extract it! (:so %)")
++au SourceCmd *.vmb.gz,*.vmb.bz2,*.vmb.zip,*.vmb.xz			if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|endif|call vimball#Decompress(expand("<amatch>"))|so %|if expand("%")!=expand("<afile>")|close|endif
++au SourceCmd *.vmb											if expand("%")!=expand("<afile>") | exe "1sp" fnameescape(expand("<afile>"))|call vimball#Vimball(1)|close|else|call vimball#Vimball(1)|endif
+ 
+ " =====================================================================
+ " Restoration And Modelines: {{{1
+diff -Naur vim73.orig/runtime/plugin/zipPlugin.vim vim73/runtime/plugin/zipPlugin.vim
+--- vim73.orig/runtime/plugin/zipPlugin.vim	2010-05-15 11:04:01.000000000 +0000
++++ vim73/runtime/plugin/zipPlugin.vim	2013-06-07 17:07:17.685624844 +0000
+@@ -1,9 +1,9 @@
+ " zipPlugin.vim: Handles browsing zipfiles
+ "            PLUGIN PORTION
+-" Date:			Oct 05, 2007
+-" Maintainer:	Charles E Campbell, Jr <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
++" Date:			Nov 15, 2012
++" Maintainer:	Charles E Campbell <NdrOchip@ScampbellPfamily.AbizM-NOSPAM>
+ " License:		Vim License  (see vim's :help license)
+-" Copyright:    Copyright (C) 2005,2006 Charles E. Campbell, Jr. {{{1
++" Copyright:    Copyright (C) 2005-2012 Charles E. Campbell {{{1
+ "               Permission is hereby granted to use and distribute this code,
+ "               with or without modifications, provided that this copyright
+ "               notice is copied with it. Like anything else that's free,
+@@ -20,7 +20,7 @@
+ if &cp || exists("g:loaded_zipPlugin")
+  finish
+ endif
+-let g:loaded_zipPlugin = "v23"
++let g:loaded_zipPlugin = "v26"
+ let s:keepcpo          = &cpo
+ set cpo&vim
+ 
+@@ -40,7 +40,7 @@
+   au FileWriteCmd zipfile:*/*	call zip#Write(expand("<amatch>"))
+  endif
+ 
+- au BufReadCmd   *.zip,*.jar,*.xpi,*.war,*.ear		call zip#Browse(expand("<amatch>"))
++ au BufReadCmd   *.zip,*.jar,*.xpi,*.ja,*.war,*.ear,*.celzip,*.oxt,*.kmz,*.wsz,*.xap,*.docx,*.docm,*.dotx,*.dotm,*.potx,*.potm,*.ppsx,*.ppsm,*.pptx,*.pptm,*.ppam,*.sldx,*.thmx,*.xlam,*.xlsx,*.xlsm,*.xlsb,*.xltx,*.xltm,*.xlam,*.crtx,*.vdw,*.glox,*.gcsx,*.gqsx		call zip#Browse(expand("<amatch>"))
+ augroup END
+ 
+ " ---------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/scripts.vim vim73/runtime/scripts.vim
+--- vim73.orig/runtime/scripts.vim	2010-07-29 20:35:43.000000000 +0000
++++ vim73/runtime/scripts.vim	2013-06-07 17:07:17.995623959 +0000
+@@ -1,7 +1,7 @@
+ " Vim support file to detect file types in scripts
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last change:	2010 Jul 29
++" Last change:	2013 May 24
+ 
+ " This file is called by an autocommand for every file that has just been
+ " loaded into a buffer.  It checks if the type of file can be recognized by
+@@ -152,6 +152,10 @@
+   elseif s:name =~ 'cfengine'
+     set ft=cfengine
+ 
++    " Erlang scripts
++  elseif s:name =~ 'escript'
++    set ft=erlang
++
+   endif
+   unlet s:name
+ 
+@@ -168,7 +172,8 @@
+     call SetFileTypeSH(s:line1)	" defined in filetype.vim
+ 
+     " Z shell scripts
+-  elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>'
++  elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>' ||
++        \ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
+     set ft=zsh
+ 
+   " ELM Mail files
+@@ -197,7 +202,8 @@
+     " - "=== ", line of "=", "---", "+++ " (SVK diff)
+     " - "=== ", "--- ", "+++ " (bzr diff, common case)
+     " - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
+-  elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
++    " - "# HG changeset patch" in first line (Mercurial export format)
++  elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
+ 	\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
+ 	\ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
+ 	\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
+@@ -325,6 +331,17 @@
+   elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
+     set ft=git
+ 
++   " Gprof (gnu profiler)
++   elseif s:line1 == 'Flat profile:'
++     \ && s:line2 == ''
++     \ && s:line3 =~ '^Each sample counts as .* seconds.$'
++     set ft=gprof
++
++  " Erlang terms
++  " (See also: http://www.gnu.org/software/emacs/manual/html_node/emacs/Choosing-Modes.html#Choosing-Modes)
++  elseif s:line1 =~? '-\*-.*erlang.*-\*-'
++    set ft=erlang
++
+   " CVS diff
+   else
+     let s:lnum = 1
+diff -Naur vim73.orig/runtime/spell/br/br_FR.diff vim73/runtime/spell/br/br_FR.diff
+--- vim73.orig/runtime/spell/br/br_FR.diff	2010-05-15 11:03:47.000000000 +0000
++++ vim73/runtime/spell/br/br_FR.diff	2013-06-07 17:07:18.105623645 +0000
+@@ -1,13 +0,0 @@
+-*** br_FR.orig.aff	2010-04-14 18:44:36.365731271 +0200
+---- br_FR.aff	2010-04-14 18:43:31.069137439 +0200
+-***************
+-*** 9,14 ****
+---- 9,16 ----
+-  SET UTF-8
+-  TRY esiaÃ¹nÃ±rtolcdugmphbyfvkwzESIAÃNÃRTOLCDUGMPHBYFVKWZ'
+-  
+-+ MIDWORD '
+-+ 
+-  PFX m Y 1
+-  PFX m   0          m'         [aehiouy]
+-  
+diff -Naur vim73.orig/runtime/spell/br/main.aap vim73/runtime/spell/br/main.aap
+--- vim73.orig/runtime/spell/br/main.aap	2010-05-15 11:03:47.000000000 +0000
++++ vim73/runtime/spell/br/main.aap	2013-06-07 17:07:18.118956940 +0000
+@@ -25,16 +25,16 @@
+ #
+ # Fetching the files from OpenOffice.org.
+ #
+-OODIR = http://extensions.services.openoffice.org/e-files/2207/3
+-:attr {fetch = $OODIR/%file%} dict-br_0.3.oxt
++OODIR = http://extensions.libreoffice.org/extension-center/an-drouizig-breton-spellchecker/releases/0.11/
++:attr {fetch = $OODIR/%file%} dict-br-0.11.oxt
+ 
+ # The files don't depend on the .zip file so that we can delete it.
+ # Only download the zip file if the targets don't exist.
+ br_FR.aff br_FR.dic: {buildcheck=}
+         :assertpkg unzip patch
+-        :fetch dict-br_0.3.oxt
+-        :sys $UNZIP dict-br_0.3.oxt
+-        :delete dict-br_0.3.oxt
++        :fetch dict-br-0.11.oxt
++        :sys $UNZIP dict-br-0.11.oxt
++        :delete dict-br-0.11.oxt
+         :copy dictionaries/br_FR.aff br_FR.aff
+         :copy dictionaries/br_FR.dic br_FR.dic
+         # The br_FR.aff file contains a BOM, remove it.
+@@ -65,12 +65,12 @@
+ 
+ check:
+         :assertpkg unzip diff
+-        :fetch dict-br_0.3.oxt
++        :fetch dict-br-0.11.oxt
+         :mkdir tmp
+         :cd tmp
+         @try:
+             @import stat
+-            :sys $UNZIP ../dict-br_0.3.oxt
++            :sys $UNZIP ../dict-br-0.11.oxt
+             :sys {force} diff ../dictionaries/br_FR.aff br_FR.aff >d
+             @if os.stat('d')[stat.ST_SIZE] > 0:
+                 :copy br_FR.aff ../br_FR.new.aff
+@@ -80,7 +80,7 @@
+         @finally:
+             :cd ..
+             :delete {r}{f}{q} tmp
+-            :delete dict-br_0.3.oxt
++            :delete dict-br-0.11.oxt
+ 
+ 
+ # vim: set sts=4 sw=4 :
+diff -Naur vim73.orig/runtime/spell/en.utf-8.spl vim73/runtime/spell/en.utf-8.spl
+--- vim73.orig/runtime/spell/en.utf-8.spl	2010-05-15 11:03:38.000000000 +0000
++++ vim73/runtime/spell/en.utf-8.spl	2013-06-07 17:07:19.382286666 +0000
+@@ -1,5 +1,5 @@
+ VIMspell2
+-usaucagbnzÂÂÂÂÂÂ
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ Â¡Â¢Â£Â€Â¥ÂŠÂ§ÂšÂ©ÂªÂ«Â¬Â­Â®Â¯Â°Â±Â²Â³ÂŽÂµÂ¶Â·ÂžÂ¹ÂºÂ»ÂŒÂœÂŸÂ¿Ã Ã¡Ã¢Ã£Ã€Ã¥ÃŠÃ§ÃšÃ©ÃªÃ«Ã¬Ã­Ã®Ã¯Ã°Ã±Ã²Ã³ÃŽÃµÃ¶ÃÃžÃ¹ÃºÃ»ÃŒÃœÃŸÃÃ Ã¡Ã¢Ã£Ã€Ã¥ÃŠÃ§ÃšÃ©ÃªÃ«Ã¬Ã­Ã®Ã¯Ã°Ã±Ã²Ã³ÃŽÃµÃ¶Ã·ÃžÃ¹ÃºÃ»ÃŒÃœÃŸÃ¿'K_aeiaeya anaa ananaiieairereairearairarean aanan aaareearareairareeircckchkchtuchtechtichscisdijearereearairearareearierearaireauoeeieiaeirereeirareereairereearereeirewooewoewueewuewuieyafghfphgejggjghfieeiighiuyieaiieyierearieuooieuuighijdijggjgekcckchkqukwquoeauoewoeuooieuooewoouioouphfquwqukscischstishunsionshuntionshuncionssztechtistichtuchuoouieuuoeuewueewufoughuffoughuioouiewuyiwquyiezssZk
+ah(aeiouy)-^*h
+ar(aeiouy)-^*ra(hr)^*a^*
+ah(aeiouy)-h
+ar(aeiouy)-ra(hr)Ã ^*Ã¥^*bb-bbcq-ciaxchxc(eiy)-sckkcough^kfcc<cckdg(eiy)kdd-dtÃ©<e
+eh(aeiouy)-^*h
+er(aeiouy)-^*re(hr)^*enough^$*nfe^*
+eh(aeiouy)-h
+er(aeiouy)-re(hr)ff-ffgn^ngn$ngns$nsgned$n
+gh(aeiouy)-kghgg9kgkhh
+ih(aeiouy)-^*h
+ir(aeiouy)-^*ri(hr)^*i^*ing6n
+ih(aeiouy)-h
+ir(aeiouy)-ri(hr)jkkn^nkk-kklaugh^lfll-llmb$mmmmmmnn-nn
+oh(aeiouy)-^*h
+or(aeiouy)-^*ro(hr)^*o^*
+oh(aeiouy)-h
+or(aeiouy)-ro(hr)phfpn^npp-ppqkrh^rrough^rfrr-rr	sch(eou)-sksc(iey)-sshxsi(ao)-xss-ssti(ao)-xth@tch--tough^tftt-tt
+uh(aeiouy)-^*h
+ur(aeiouy)-^*ru(hr)^*u^*
+uh(aeiouy)-h
+ur(aeiouy)-ru(hr)v^wvfwr^rwh^w	w(aeiou)-wx^sxks	y(aeiou)-yzz-zs
+
+@htht@
+willboymotherfoundnamerundiffersuchofonorevenfourallfatherwouldIneedseeplaceearthahotworldhowhereyemuchstudywasgetwaywellstillfordoesschoolaboutactplantwherefewthinghandbackthinklargehighalsolikemovecallbeenjustandsomedaystartaddgoanyknowlongwaterthislittlereadportgreatrealsayfirstleftlastdon'tsoundcamelifepointfromwhenhewordwentcouldworkafterfivelookputsaidlateeightshowourouttheytwoherestatechangemightsoneveryouiffoodinisitfollowhousestorythanhimtreethatlinehundredwantgrowoldmanbuildgivemayselflightmeantoanswerthroughlearnsixhomewhichthousandfindsmallhardsideoveronlyendsunverynorthgoodowneverykeepsentencetimetooagaindidcoverareuptenuseachthoughtmakedrawanseapressasturnsettellnearhadbymusthasonebigwhileatpagecityweretheretakeplayaskcrossformheadbefarmotherairwriteyearlivebeforesamewiththreefarcomelandninepeopleclosesawbetweenmorewhopartweroundthesewhymestandpicturehelptheirmynowsevenrightnumbershouldnewthemthenspellcancausemanyundermenbutcountryoffnightthemosthistrydownlownoletwhatkinddoyourshemadeusehaveanimalJaÃ Ã¡Ã¢Ã£Ã€Ã¥/eÃšÃ©ÃªÃ«/iÃ¬Ã­Ã®Ã¯/oÃ²Ã³ÃŽÃµÃ¶/uÃ¹ÃºÃ»ÃŒ/nÃ±/cÃ§/yÃ¿Ãœ/sÃ/
+F=±cÿœ4
+'23abcdefghijklmnopqrstuvwxyzÃmnstongsteath
++usaucagbnzÂÂÂÂÂÂ
+ÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂÂ Â¡Â¢Â£Â€Â¥ÂŠÂ§ÂšÂ©ÂªÂ«Â¬Â­Â®Â¯Â°Â±Â²Â³ÂŽÂµÂ¶Â·ÂžÂ¹ÂºÂ»ÂŒÂœÂŸÂ¿Ã Ã¡Ã¢Ã£Ã€Ã¥ÃŠÃ§ÃšÃ©ÃªÃ«Ã¬Ã­Ã®Ã¯Ã°Ã±Ã²Ã³ÃŽÃµÃ¶ÃÃžÃ¹ÃºÃ»ÃŒÃœÃŸÃÃ Ã¡Ã¢Ã£Ã€Ã¥ÃŠÃ§ÃšÃ©ÃªÃ«Ã¬Ã­Ã®Ã¯Ã°Ã±Ã²Ã³ÃŽÃµÃ¶Ã·ÃžÃ¹ÃºÃ»ÃŒÃœÃŸÃ¿'K_aeiaeya anaa ananaiieairareairereairearan aaan aanareairareearareeircckchtechtichtuchschkcisdijearareearairearereearierearaireauoeeieiaeirareeirereereairereearereeirewoewooewuiewuewueeyafphfghgejggjghfiighiuyieeieaiieyierearieuuieuooighijdijggjgekchkcckqukwquoeauoewoeuooewoouioouooieuphfqukquwschstiscishuntionshunsionshuncionssztechtichtistuchuewuoouoeuieuueewufoughuffoughuiewuioouyiwquyiezssZk
+ah(aeiouy)-^*h
+ar(aeiouy)-^*ra(hr)^*a^*
+ah(aeiouy)-h
+ar(aeiouy)-ra(hr)Ã ^*Ã¥^*bb-bbcq-ciaxchxc(eiy)-sckkcough^kfcc<cckdg(eiy)kdd-dtÃ©<e
+eh(aeiouy)-^*h
+er(aeiouy)-^*re(hr)^*enough^$*nfe^*
+eh(aeiouy)-h
+er(aeiouy)-re(hr)ff-ffgn^ngn$ngns$nsgned$n
+gh(aeiouy)-kghgg9kgkhh
+ih(aeiouy)-^*h
+ir(aeiouy)-^*ri(hr)^*i^*ing6n
+ih(aeiouy)-h
+ir(aeiouy)-ri(hr)jkkn^nkk-kklaugh^lfll-llmb$mmmmmmnn-nn
+oh(aeiouy)-^*h
+or(aeiouy)-^*ro(hr)^*o^*
+oh(aeiouy)-h
+or(aeiouy)-ro(hr)phfpn^npp-ppqkrh^rrough^rfrr-rr	sch(eou)-sksc(iey)-sshxsi(ao)-xss-ssti(ao)-xth@tch--tough^tftt-tt
+uh(aeiouy)-^*h
+ur(aeiouy)-^*ru(hr)^*u^*
+uh(aeiouy)-h
+ur(aeiouy)-ru(hr)v^wvfwr^rwh^w	w(aeiou)-wx^sxks	y(aeiou)-yzz-zs
+
+@htht@
+willboymotherfoundnamerundiffersuchofonorevenfourallfatherwouldIneedseeplaceearthahotworldhowhereyemuchstudywasgetwaywellstillfordoesschoolaboutactplantwherefewthinghandbackthinklargehighalsolikemovecallbeenjustandsomedaystartaddgoanyknowlongwaterthislittlereadportgreatrealsayfirstleftlastdon'tsoundcamelifepointfromwhenhewordwentcouldworkafterfivelookputsaidlateeightshowourouttheytwoherestatechangemightsoneveryouiffoodinisitfollowhousestorythanhimtreethatlinehundredwantgrowoldmanbuildgivemayselflightmeantoanswerthroughlearnsixhomewhichthousandfindsmallhardsideoveronlyendsunverynorthgoodowneverykeepsentencetimetooagaindidcoverareuptenuseachthoughtmakedrawanseapressasturnsettellnearhadbymusthasonebigwhileatpagecityweretheretakeplayaskcrossformheadbefarmotherairwriteyearlivebeforesamewiththreefarcomelandninepeopleclosesawbetweenmorewhopartweroundthesewhymestandpicturehelptheirmynowsevenrightnumbershouldnewthemthenspellcancausemanyundermenbutcountryoffnightthemosthistrydownlownoletwhatkinddoyourshemadeusehaveanimalJaÃ Ã¡Ã¢Ã£Ã€Ã¥/eÃšÃ©ÃªÃ«/iÃ¬Ã­Ã®Ã¯/oÃ²Ã³ÃŽÃµÃ¶/uÃ¹ÃºÃ»ÃŒ/nÃ±/cÃ§/yÃ¿Ãœ/sÃ/
+OÍ
+Üÿœ4
+'23abcdefghijklmnopqrstuvwxyzÃmnstongsteath
+ tre4uwt.hwai.sx8tyzaWbgpp's 
+ '-.abcdefghijklmnopqrstuvwxyzatnheslevels
+ km.°a.acr
+hen
+'s
+dehiovwark'sÝsolfv'²séen'uÁskïan'vsitch's'abcdehijlmnorsuybcfglnst
+aÝkusÛ'ÛeÝtaeiïlïlon×edoneimÝsÝdrÛ'nÝgentÛ's
+eh_iÝdm\rÝsent'Ýsse_imdÝslÝyen×te_itÝdm\rÝsoi×raeioryÃ''sy8s'Ýss'ïetÂ'Ýs²teviateiÝdÝsano×n'ïe©
+ms'sEeiouÛcméeinallÝsc²lteæišoÝsÝd	'adlrtïuyÝm'asr²do²ncdnryornwy'sombie'seen'shirHeath²yanttelssionÛ'aÝs*lstwytHhÝst
+e_išo'anKcÝtorrÝse_iÝdn\rctiedïeglnaeijnÈc
+d\rÝsnglsan'aEeil²lïeein²eti\yÛegdoneucteiln*s*dnéo*gess'emsmsrae_itioéorÝd×rÝsaeouÝytzâeianéovelsmyÝe-Ýrsbodie
+dÝt(ot=iùseoÛgïrrmalþils
+'adlmrsuv
+reiÛ'*dÝs"nisthe_icmÝd×rÝsionÛ'iÝssim×tinabßtlÝeÝyintginael\lsÂ'ÄsšieiÝsÝdmranovnÛ'iÝsselness0'ntd
+e_iÝs*sebg*soarou
+naeiou'cdhmïnsadabra'mse_iÝd\rÝsa²mïn'ïosíoiéoveÛ'lnÝsess0eaxc<sdge_imÝdm\rÝsent's¢s
+ent's°s
+agatâeišoanoinptelnmrsmtessÛ'0e	0'ceiotueiossÛ'e_iÝdÝsssa=iÛ'
+eÝsnde_iÝsÝd×rinlúe_iÝsKct-eilm^smindedln
+yessesÝdeÝrÛ'iÝssim\aanindedln*yesse*sntKhlruXvteilÐnÝrsmtéos×m×tbpeiÝsÝdn×rctÛ'^sngtiéovÝeit\yaeirinmxniouslness'0emsnenKctaucteilÐnšoÝsd\rÎslÐnano`vnÛ'iÝss\m×tselÐnmrÎsrdËeil$n*ssttK'jnstza
+K'dÙaaAeiblmeanvÄemÝst	e_iÝzsmsalÛ'aÛeiÝlnia'n'acehiklmnoqrtuycdnprsi×aeim×ei\yiacÛeaiÝsl
+lsanÛ'shimpêath6uulc²ou
+s
+.eilorÝtudlnpsâe_ieraotâeišonéo`vg\lmetšetÛ'
+e_iÝsualßttaeišoÝsb³ntilliti\y0eeÝy$nioni'*såd×rn8vglne0ssÛ'ñeiobanoiÕllþinÛ'
+e_iÝsrims\ydenct\eÛ'-aÝspron
+ellnÝsaiimmYe_iÝsxamJvatâeianéoszae_itioÝnÝdr
+s'
+sae_itioni'*sÝdrÝslmrsuadeiÛ'mdÝsnmgmpodatâei néovenalniyemsÝd\rÝs_iiKcsh¶e_imdÛ'a	eiÝsÅn no
+tnttÛ'a
+eiÝsbnHileÝynessÒ'c×tngerr
+ešim*senti'*sei
+dm
+sentÛ'
+sn
+g²aeudtitxa
+e_iÝsqeiéoveaâe_i×llmrsturatâeianéo`vulatâeišoanéo
+ vasctñeedl$naeit\lti?oéoveÝsd×rÝsome_iÝsîdÛ'drÝstvi'
+baiÏtctallaioymKtinophe×nÝcn×ei*clIeedïoaeiorÝye7a'õbÝdKnrsnoaïr^níoel nÝr<svae_ib`lÝdm×rÝsle*oomat	
+idnÛ'ilnoÝsuÝcftiycñeatio\ness
+0'pshileÛei\sloÛuògenr	9mowledge_i€m	[aådm×rÝsent
+ '¢su
+×eÑelnérsuyKtc	ïiagøuøtsticPai>s	auaiinta
+e_iÝsnceÛ'shi×perstsce_iÝdÅnÝs	[ae_iÝdmÝsitiéoœvÝstaYe_i×lncceiouyÛ'aÝsKgdmeþil$n*rs*toni\yÛeouÃsbnpsatÛ'iÝsc	a>sy×mhooblisÂ'ÛeÝsti×cïxlait	e×c
+Û'a
+ehiorÄsu'eíonovgièo'sÝcKdumÛ'*snÛ'	[a
+e_iÝsaeitâeæišol$nÝsst²n×re6salr
+diff -Naur vim73.orig/runtime/spell/en.utf-8.sug vim73/runtime/spell/en.utf-8.sug
+--- vim73.orig/runtime/spell/en.utf-8.sug	2010-05-15 11:03:45.000000000 +0000
++++ vim73/runtime/spell/en.utf-8.sug	2013-06-07 17:07:19.495619676 +0000
+@@ -1,372 +1,319 @@
+-VIMsugF=±cÏ]*@bfhklmnprstwxy @bfhklmnprstwxy@nbfhklmnprstwxyns*tkn*s*ssfGtmb*kklnr*s*n*s*tn*s*y*slst*y*n*s*txGnGyfk*sGyl*yNbknNrstyksGy*lGt*sGt*tksl*s*ysGmGnf*n*n*s	klmGnstwGxšlr*sf*k*sGyk*s@*ltlškn*sttr*k­s*sGyksšl]twxètGrGn*stGkNskl*nNpst­rgn*yk*n*s*twxlprgs*k*sGkr*stGynsGmf*sšlnGsGmstk*sšlkn*ssšl*sGy*sþtGxGklGm*sGttlgn*ykGpt*ngrClGbfhklmnprstxy?bks]twxr?nkšl6n*stwx*nšr*s*tr*sGtn*s*tGsAtklnrGsttxfšln*s*tkšl6n*stywx*sGy*nGsnb*s
++VIMsugOÍ
+ÜÏJ*@bfhklmnprstwxy @bfhklmnprstwxy@nbfhklmnprstwxyns*tkn*s*ssfGtmb*kklnr*s*n*s*tn*s*y*slst*y*n*s*txGnGyfk*sGyl*yNbknNrstyksGy*lGt*sGt*tksl*s*ysGmGnf*n*n*s	klmGnstwGxšlr*sf*k*sGyk*s@*ltlškn*sttr*k­s*sGyksšl]twxètGrGn*stGkNskl*nNpst­rgn*yk*n*s*twxlprgs*k*sGkr*stGynsGmf*sšlnGsGmstk*sšlkn*ssšl*sGy*sþtGxGklGm*sGttlgn*ykGpt*ngrClGbfhklmnprstxy?bks]twxr?nkšl6n*stwx*nšr*s*tr*sGtn*s*tGsAtklnrGsttxfšln*s*tkšl6n*stywx*sGy*nGsnb*s
+ lgr*s*sywm*n*stwxGbšr*ks*yšlgn
+ bfk*mnstx*y?tGn2sšln*stxšlgnGsšl*nr*s*tGyšl*ynl*skGsAtšlgn*sGkGn*t€fšlGnr*s*tGytwxAf*n*s*tmn*s*tNnsGmGtn*sb]twxl
+ y@fklm*nstGys]twx2sk*ys*yl*sèt*yGm*n*s*twxn*s*tGyCm*nGsAtrwf
+G@fhklmnpstxy]twxGmGnCmn*stwxl*s*s*y÷b*n*s*t¯s*s€ttšl6n?sf*tšl6n*skGm*n*s*tCm*n*sn*s*t*l*sstwyG@
+bfklCmnpstx*ln*s*tšlèsGtbšln*stxl*syt*yšlGs€tèrnr2s]tšlmnsÁtgx*stsGmGt]f*nstwxšlÈnHs*tG@šlstGx*s*tšlm*n,s*tGynt2ttwxfytÉf*n*s*t	kšlmnrstGyGl2s¡nÁsëtwxkpÀstxÉfšlÈns2tEnurr*sGyßkwx	ëfk­lmnrs*tGn]twxn­l*sGtTbšlCm*nGsAt÷x]kCmrstwxGyšl6n*y2f*sGy*fšlÈn*s*tšl6nsCmn*sAtsns*tGs*t*lTmµn*s@bfhklmnprstwxCyklTprtwx*f?nmGklk*ksGy*n*sgw*pl*f]kl*nr*stgyn?st*y]s*n*sGy*kënn*sAn*s*tl*m?nsµtxGy*n*sGtwÅy*n*t*n*tlnµrs]t;mGn*s*tµkt*n*s2tšt
+b]klmnprstx]y?f*n*s]t*np*stlnks]tyts]twxCm*n*s*tfGnrstnGsAtl*s]smnwt¿pgxst­lG@fkInstgwgx*n*stk*n*s*t*nësCtGyÉf
+ l€nGr*stwxšlGn*s*tn*sl*n*sAt
+bfk*mn]prstxCylgnèt*yGm*n*s*tàns7twxGy*n*sGt*kGs€t]xsnGs*t6nt!nr*s*n*s*tGy*fGnšrGs*tnlrs*mGtnrstCx*nès€t*y­l*sgtGmtAkPr*s€f?s
+bhklGmGnrstGyTnGtGxn*sGttëtl*n*s*tkGnsl,s*yGm*n*s
+tšt fšln*st?h­l6n*sGkGs*tGn*s*yfkqlGn*stGyl6n*yrtNss*mGt*ns*tgt
+ *klCmpr]stwgy*sPyl*s]twx"nstwx*n*r*s*tAfk*n]s*ttwx*f*n*s*tk*nr*sAn*tN@bfklmnpst]wxynt"nšlnrstwxsspstwxlst*tgx*nGr*s*t]s]tn*s*t]tgxf*n*s*t*sštÆk*n*s*t¶bfn*p*s*tx­sxTn@fk*n*stxsTtúlrsgstglAsštl*nèr*s*tk*yàn*s*trtsúnmsGmTtGmnëstãtAkm*n*s*twxkn*sGtxGyttGk]f*n*s*t
+ w@bhGlCmGnp*st*rgn
+bfhklmnprstx*lstkr]bšl6nÜtNlgrs*n]pÜs*t*yNnp*sGtlf*n*t¿k*s*tÅyst*stGyf6nštšl*r*slnrx*n*s*tµyµtGnµtlqsb*n]twxršlÈnp*s*t
+-Sf]km*n]pr*stPy"l]kn]pstx*k*n*tGpN@bfghklmnpr]stwxG@lGn*s*tšt*ylGt]pGl*nr]sGt*s]tGfk2s*yšs*tG@ns*tgsGn]stTxšlgm*snGst	fÈkÇmGn]s*tgwGyNk*n*sGtšlm?nsGyNlGtGfGk]kGln*st*ntPr*sšl*n*s*t]kln*r*stwxgn,s­t*ygk*nGsGt*n*s*tPw
+GbCkGlGmn6pr*sGty÷m*sGn*r*s@mgkG@bfhklmnprstwxyGklm*sGtGwgn*sèt*y*sGx*bklTn*sGtŒl]twxns€t*n*s*t*yntkwtlÇssÜtGklâmGp*sýtwxNmtwx*n­r*s*ti@bfhk­lmnpstxyrGm]twxÆkètGy*kCmkstGy€ks­s*núr*stwx*nqs*tGkGsCt]sÇtGfšlÈn*sGtwxšlnr,s*tGyGnýtwxGl)nýtwxlGnskkNs*ytkss*m*npGtÈt	*blmnpwr*sGttwxëf*n*s*twnttwxÜfAn*s*tkstGm2sGt*n*stwxÉflnGsxCms*tÅyÈ@ÑbfklmgnrstCwwxGyNkGln¿kGklprGssxs*yGm
+tntÇnf*k*sGyk*st*ybCm*sAtÕk*sknstÇwGyAsGy*n*sGtwxTlr*sGyGkxgnb6mn*s*tGs!tb
+mnstxGyVll*s*s*yGk	¡lªsGt©n	þb*fšln*s*txGyGnsGt*sixGySn
+-GklCmnr]stxÅyGknkèsGttØrp÷sxnl*tnwx*txG@bfkGlmnp'rstxyŒlst6n€k*sb*n*stwxGk*s÷kšlAn*s*tlÉstwx*strlsNs*yAfšlGn*s*tn*s2sGtGymGnGst­yGksGys6lGn*s2f*n*stGxGyGkšl6n*fšlGmnstšlsAt*n*s*twxGymGnskl*sGtGkGt@bfhklmnprstwxymAklnr*s¥tèkGt*k§nt*sÚxblqmstýtx*nr*s*twxtwx*fAn*s*ttwxb2fAn*sAt*nr*s*twx*lGn	flmnrstxGbmnps]tx*n*sätwxgtfšl6n*sètnšr*sn*sGyúkNsKs€tÑbm*n!stxnßtAf*n	¡r*sëtGn;twxÑb2fGnGsÉt
++Sf]km*n]pr*stPy"l]kn]pstx*k*n*tGpN@bfghklmnpr]stwxG@lGn*s*tšt*ylGt]pGl*nr]sGt*s]tGfk2s*yšs*tG@ns*tgsGn]stTxšlgm*snGst	fÈkÇmGn]s*tgwGyNk*n*sGtšlm?nsGyNlGtGfGk]kGln*st*ntPr*sšl*n*s*t]kln*r*stwxgn,s­t*ygk*nGsGt*n*s*tPw
+GbCkGlGmn6pr*sGty÷m*sGn*r*s@mgkG@bfhklmnprstwxyGklm*sGtGwgn*sèt*y*sGx*bklTn*sGtŒl]twxns€t*n*s*t*yntkwtlÇssÜtGklâmGp*sýtwxNmtwx*n­r*s*ti@bfhk­lmnpstxyrGm]twxÆkètGy*kCmkstGy€ks­s*núr*stwx*nqs*tGkGsCt]sÇtGfšlÈn*sGtwxšlnr,s*tGyGnýtwxGl)nýtwxlGnskkNs*ytkss*m*npGtÈt	*blmnpwr*sttwxëf*n*s*twnkstGm2sGt*n*stwxÉflnGsxCms*tÅy*stwxÜfAn*s*tÈ@ÑbfklmgnrstCwwxGyNkGln¿kGklprGssxs*yGm
+tntÇnf*k*sGyk*st*ybCm*sAtÕk*sknstÇwGyAsGy*n*sGtwxTlr*sGyGkxgnb6mn*s*tGs!tb
+mnstxGyVll*s*s*yGk	¢lªsGt©n	þb*fšln*s*txGyGnsGt*sixGySn
++GklCmnr]stxÅyGknkèsGttØrp÷sxnl*tnwx*txG@bfkGlmnp'rstxyŒlst6n€k*sb*n*stwxGk*s÷kšlAn*s*tlÉstwx*strlsNs*yAfšlGn*s*tn*s2sGtGymGnGst­yGksGys6lGn*s2f*n*shtGxGy*fšlGm6nst*n*s*twxGymGnskl*sGtGkGt@bfhklmnprstwxymAklnr*s¥tèkGt*k§nt*sÚxblqmstýtx*nr*s*twxtwx*fAn*s*ttwxb2fAn*sAt*nr*s*twx*lGn	flmnrstxGbmnps]tx*n*sätwxgtfšl6n*sètnšr*sn*sGyúkNsKs€tÑbm*n!stxnßtAf*n	¢r*sëtGn;twxÑb2fGnGsÉt
+ sbGfßkšlnrstGy6kgsnlskGm*nrst*yTkGyNm*s
+-¶twx*yTtGlnGr*sAtwxšlAt*@*kšlnp*stb*nGs*twxl]twxf*n`r*s*t¿k*s*tÅy€kqsšl*núrGstl*nr*s]twx€ksèt	bklnrst xtwxbnr*sëtxšlès€tNn]twxbknrstwxb7twxb*n*sätwxb*n*sätwxÉfÉtbGf*n*stwx*f]knstxGtx­l]twxb2f*n*s*tb*n*stl*sytGrnšrHsmnpsätxGyntl*n*s*twx2s*y]sTxrb2fšl*n*stGwlNnnlsësGm
+t*nGr*stwxlšr*s*t	b*flnr]sätxl6nèt*y?s*yšlgnÁs€t]twx*y
+-õn2sb*sl
+b÷fkl*npèrstwxl]twxèt*ylwtn*s*tGxÁsAtrýtxtwxAn*sAtnb
+-l*sbëfGm*n*sGtllþbCmnwr*stwxšlGsGtx	Ilšl
+-énšr
+ÉfkTlmnúprstxlgn*snp*sÜtrunqsúklGnstxqsgt*yb2f*s`l
+ñbbl*nip*sëtbn*s*t
+fklmnpstwx*yh¥k]twxkbl
+-prtwx|kbAf*n*s*tTkzn*s*yl6nrHsÁt*ltsAkšlGmgnúl*flnAlsšrnr*stwxršlgn*s*ysttsrrôlb*n*s*tGn,s*twxGyAf€k*n*s*tnGršrsAtGfGkn
+ck*n*s*thkmsytrk
+-ésnGs]twx¯rtGmywlbfhklmnprstxGyf
++­twx*yTtGlnGr*sAtwxšlAt*@*kšlnp*stb*nGs*twxl]twxf*n`r*s*t¿k*s*tÅy€kqsšl*núrGstl*nr*s]twx€ksèt	bklnrst xtwxbnr*sëtxšlès€tNn]twxbknrstwxb7twxb*n*sätwxb*n*sätwxÉfÉtbGf*n*stwx*f]knstxGtx­l]twxb2f*n*s*tb*n*stl*sytGrnšrHsmnpsätxGyntl*n*s*twx2s*y]sTxrb2fšl*n*stGwlNnnlsësGm
+t*nGr*stwxlšr*s*t	b*flnr]sätxl6nèt*y?s*yšlgnÁs€t]twx*y
++ìn2sb*sl
+b÷fkl*npèrstwxl]twxèt*ylwtn*s*tGxÁsAtrýtxtwxAn*sAtnb
++l*sbëfGm*n*sGtllþbCmnwr*stwxšlGsGtx	Jlšl
++ànšr
+ÉfkTlmnúprstxlgn*snp*sÜtrunqsúklGnstxqsgt*yb2f*s`l
+èbbl*nip*sëtbn*s*t
+fklmnpstwx*yh¥k]twxkbl
++grtwx|kbAf*n*s*tTkzn*s*yl6nrHsÁt*ltsAkšlGmgnúl*flnAlsšrnr*stwxršlgn*s*ysttsrrôlb*n*s*tGn,s*twxGyAf€k*n*s*tnGršrsAtGfGkn
+Zk*n*s*thkmsytrk
++àsnGs]twx¯rtGmywlbfhklmnprstxGyf
+ l*s?sšlÈnHs.twxGntr*lGnšln*sGtlwr*sGnqsèt*y©k
+-én*sxGyn*sxk*lmGsGt?n*k£lirGs­lCmÈnGs*t*wGyGkGm*stkn*sGyAt*f*n*sAtGn­rGr*sGtGbGln*sblGnPr*s*tbGlGm*np*s*tk*s*t*ytwxl*syk@bfhklmnprstwxy*kGm*s
+-hk*lCmnrstew?fGkÆnGrGn,sGyGk
+|lGm*sÆtx*yGn*sGtGn6r*s
+bfklGmnrst¯xCytk*nqs*t?r*s
+GtGfšl*sGt*yG@f*kmGs]tx?lrkk
+sÈtm*s*bgt*f*k*n*sGtNbGlmGnGs÷b?r*sbIfhklwmnprstxyqlr*skslGt€k,sln*s*tG@ôn]sÁt*yGb¯kCmGnstGy?f*stšlCr*sl*t
+GsGy@kGnsÁtGy=m
+-l*nGtn*r*s
+t*stCr*s	
+©b!fšlm*nr*s*tèsät
+@fklmn\pstTwxrpNs*y¿k6r*s*tÅy
++àn*sxGyn*sxklms€t?n*k£lirGs­lCmÈnGs*t*wGyGkGm*stkn*sGyAt*f*n*sAtGn­rGr*sGtGbGln*sblGnPr*s*tbGlGm*np*s*tk*s*t*ytwxl*syk@bfhklmnprstwxy*kGm*s
++hk*lCmnrstew?fGkÆnGrGn,sGyGk
+slGm*sÆtx*yGn*sGtGn6r*s
+bfklGmnrst¯xCytk*nqs*t?r*s
+>tGfšl*sGt*yG@f*kmGs]tx?lrkk
+sÈtm*s*bgt*f*k*n*sGtNbGlmGnGs÷b?r*sbIfhklwmnprstxyqlr*skslGt€k,sln*s*tG@ôn]sÁt*yGb¯kCmGnstGy?f*stšlCr*sl*t
+>sGy@kGnsÁtGy=m
++l*nGtn*r*s
+t*stCr*s	
+ b!fšlm*nr*s*tèsät
+@fklmn\pstTwxrpNs*y¿k6r*s*tÅy
+ l*stwxk*n*s*trÁfGmkmysns]s=tktxyntAk,snk*l*skrfAkGyksšl*stflkrÊfGmk*st
+p*sÇtGy*syn]pm€k]kmGnTkkn*sGy*lrs*n*t*yGl*sGt*k*s]twx
+-bÃhknpGrstàxGkrGtgswr?sGt
+bGkšlGmn?rGstwxGy*f­lAnr*s*tšlgn*y*stNfwmty
+GnbGn*sGyÜl
+G@bfklmGnGr|stwx?m.ls]txGn*r
+-énGyGkGl*mGn*s*t	fGkCmØngpstwgtm*n*sßt
+-õtk`s­lfkCmn*stGxGyÇm*sšl*s*tb2fhCkGl÷mnprstwwxCyC@GtGm*rGrGstGr*sG@GsGn*sýtwx*y*sgt	kšlmnrstwxšl*s?tfGs2s7twx]sèt*f*n*s*ty
+nG@h*l*rbfhkblmnprstw*xrGn*sGyl?nsxGt*w*mNyG@?l*s*twxnp*stšlGmGn*s*tÇb*kGnGstwx!fšl*n*s*twlGs
+bf*hklmGn
+pstx*yNl?snGssf
+tGt*ynwrgt*swtGmn*stGy€ktr*sfkšl*sgxAkr*sk÷tAfšlmGn*s*tGn*s*tm
+¿ptsb*s*syšlGmgn*sGt?lwmGnÑbGf+nGr*s€twy*lmn
+Ôr*sksGyšrsmnsGtCxpGkGn*sGtbf*sGmGn*s@bfhklmnprstGwxyy:s
+]bfklnrstàwxGy¥l*n6rëstwx*r*sGykmnstxGyGl*s*n*st*kIsGt
+©bGmn*s*twx]n	¡r*s*tGyCmGn*s*tkGsGt	klGm*nstxyGl*n*s*twxb*fCmAnGr*sAt*l.r*slTn*sk"kl*m*n*stGy*kšlCm*n*sÁtr*six*lGs
++bÃhknpGrstàxGkrGtgswr?sGt
+bGkšlGmn?rGstwxGy*f­lAnr*s*tšlgn*y*stNfwmty
+>nbGn*sGyÜl
+G@bfklmGnGrsstwx?m.ls]txGn*r
++ànGyGkGl*mGn*s*t	fGkCmØngpstwgtm*n*sßt
++ìtk`s­lfkCmn*stGxGyÇm*sšl*s*tb2fhCkGl÷mnprstwwxCyC@GtGm*rGrGstGr*sG@GsGn*sýtwx*y*sgt	kšlmnrstwxšl*s?tfGs2s7twx]sèt*f*n*s*ty
+nG@h*l*rbfhkblmnprstw*xrGn*sGyl?nsxGt*w*mNyG@?l*s*twxnp*stšlGmGn*s*tÇb*kGnGstwx!fšl*n*s*twlGs
+bf*hklmGn
+pstx*yNl?snGssf
+vtGt*ynwrgt*swtGmn*stGy€ktr*sfkšl*sgxAkr*sk÷tAfšlmGn*s*tGn*s*tm
+¶ptsb*s*syšlGmgn*sGt?lwmGnÑbGf+nGr*s€twy*lmn
+Ër*sksGyšrsmnsGtCxpGkGn*sGtbf*sGmGn*s@bfhklmnprstGwxyy:s
+]bfklnrstàwxGy¥l*n6rëstwx*r*sGykmnstxGyGl*s*n*st*kIsGt
+ bGmn*s*twx]n	¢r*s*tGyCmGn*s*tkGsGt	klGm*nstxyGl*n*s*twxb*fCmAnGr*sAt*l.r*slTn*sk"kl*m*n*stGy*kšlCm*n*sÁtr*six*lGs
+ bklCmGnPrs*tÅystrAsètm*n*s*t
+-énwm]nGr2s*t@bGlGrstytlGnësykgn*sèt*yšlGm6n]sAkwms¬mGlÇrsþbYlnr*s¯tÑbGkGnrÁstwxgn*s*yëf*sn*s]twxGy	kCmnúrs7twxCym*sýtwx
+qfšl6nnr*s
+bfhklGmnprstx
+|lnGsTsfritsGtk*sksGyÁsëtrt¥snGs€tGhGkšlnpstwxGstšlGs*s*tµy
+bf*kNlCm*nr¯s*twxGysn	¡s*tkGtxnGkGn*s
+@fklmnrstwxy*k]stGykkrëstwxb*fšl6n*slxobnGsýtwx
+©bCm*n2s
+
+qfkmnp;rstwxyþbNnûtwxnt
+©b*n*s*twx*n*stb*n*s*twxTbbÉfCm*n*s2t
+|lëkšlÈn*sGt
+ñb*n*s*tþbns§nGtb]lCm*n*stxmnr*s*tGyGs€tb9l
+bfklmnpstxþb/bCm*nst*n*sätx§nln*stwxþb]twxk*n*s*tbllgnšt*yCm*ns*t*yGm=tNp*sGt*sotšlgn
+rgx
+-
+ab2fšlCmnGrsGtwxCm*nGs*tšlGm6nGt!f§n*sGybnblb
+4slgnèt	æbfšlnp*s>twxbšl6nètlGs]twx?syt*yt¹b*f
+bAfGkšlCmngrs]twxy¹b*l*@šlàn­stšlGn*s*tGyšl6n*sÁth*n*sún?tCmPr*s
+©b
+|lCmn*s*t*nGs*twr	klGmnLsÈtCxyn*svs*sÁty*mG@Ct6l*n*s
+-bôfkwlCmnr*stl*sšlGn*sÑb*sGyšl	TrGs­t
+bAfGklwmÈnrstxGyl*t]sèt*yGk
+QlGn,stx*yšlgn*sGyšlÈn*n*sKtwxGy2fšlÈn*s*tGngpn*s]twxl*ssyt*yÈl*s$ @bfhklmnprstwxy
+-G@Tklmnr]stxk6nèp*s*yksGy*n*st*k]sktGyTbAnks?t6klnpsklmsGtTnkTksGyftAksGm*n*srGkGyntTr*s!tfksšl*ysGm=t
+bfklnprst?wxk]lmn*txÏnënn?s	f]kmns.t
+x*y
+'bAn*s*tNn?xks?tAn*n*sÜtGm*t*n*stbSl*n*sÜtts*sGtÏ@Tbúfkn?stwx
+©bAn|rIt?t?xlGn*s*ts*t*s*t?bf]mtsbn*tgnr
+¿túk	Tbfk
+cnr*sAtgwšl?@s*t2f@bfklmnrst*wxyºfkšlm?rgmTb*tlCmGnsÁt*yr[bgnGt
++ànwm]nGr2s*t@bGlGrstytlGnësykgn*sèt*yšlGm6n]sAkwms£mGlÇrsþbYlnr*s¯tÑbGkGnrÁstwxgn*s*yëf*sn*s]twxGy	kCmnúrs7twxCym*sýtwx
+hfšl6nnr*s
+bfhklGmnprstx
+slnGsTsfritsGtk*sksGyÁsëtrt¥snGs€tGhGkšlnpstwxGstšlGs*s*tµy
+bf*kNlCm*nr¯s*twxGysn	¢s*tkGtxnGkGn*s
+@fklmnrstwxy*k]stGykkrëstwxb*fšl6n*slxobnGsýtwx
+ bCm*n2s
+
+hfkmnp;rstwxyþbNnûtwxnt
+ b*n*s*twx*n*stb*n*s*twxTbbÉfCm*n*s2t
+slëkšlÈn*sGt
+èb*n*s*tþbns§nGtb]lCm*n*stomnr*s*tGyGs€tb9l
+bfklmnpstxþb&bCm*nst*n*sätx§nln*stwxþb]twxk*n*s*tbllgnšt*yCm*ns*t*yGm=tNp*sGt*sftšlgn
+rgx
++
+Xb2fšlCmnGrsGtwxCm*nGs*tšlGm6nGt!f§n*sGybnblb
++slgnèt	Ýbfšlnp*s>twxbšl6nètlGs]twx?syt*yt°b*f
+bAfGkšlCmngrs]twxy°b*l*@šl×n­stšlGn*s*tGyšl6n*sÁth*n*sún?tCmPr*s
+ b
+slCmn*s*t*nGs*twr	klGmnCsÈtCxyn*svs*sÁty*mG@Ct6l*n*s
++bôfkwlCmnr*stl*sšlGn*sÑb*sGyšl	UrGs­t
+bAfGklwmÈnrstxGyl*t]sèt*yGk
+HlGn,stx*yšlgn*sGyšlÈn*n*sKtwxGy2fšlÈn*s*tGngpn*s]twxl*ssyt*yÈl*s$ @bfhklmnprstwxy
++G@Tklmnr]stxk6nèp*s*yksGy*n*st*k]sktGyTbAnks?t6klnpsklmsGtTnkTksGyftAksGm*n*srGkGyntTr*s!tfksšl*ysGm=t
+bfklnprst?w	xk]lmn*txÆnënn?s	f]kmns.t
+x*y
+
+bAn*s*tNn?xks?tAn*n*sÜtGm*t*n*stbSl*n*sÜtts*sGtÆ@Tbúfkn?stwx
+ bAn|rIt?t?xlGn*s*ts*t*s*t?bf]mtsb	n*tgnr
+¶túk	Tbfük
+Znr*sAtgwšl?@s*t2f@bfklmnrst*wxyºfkšlm?rgmTb*tlCmGnsÁt*yrRbgnGt
+ bfsklnrstxTbÜnm*ns]tNyAt;twxb*nës*tGyTbÉf
+-l
+¿m*n*sëtn2s*sAtæbfklmnprstgwx*ylCm*n?r*sAtb*tnsýtxšlNsþbGn*s*tb*n*sätwxlgn*sètšlgnôr]stxœr*s­lAnbCm*n*s*tl	¡t*y!sf	ttb?s	sbšlCmGnr,s.twx*lAnýtwx
+-õnlnèrstxGyšlr?st*y?sèt*s*tGyšl*t2fGkšr*s*tGyGlnkl]mstx*y*t?xþb2f*s*tGy
+-bfl*mGnrsGtGyl6n*s?t*yGs*tywm*n*smGt­lGn*t
+æbØfkl?mnrstwxy	¡ln*s*twxÁsFtm*nµstxnt
+l*sl*s6n?s*ylsÁtbþn*str*s*tGyktßrÑfšln*s*tšlws
+æbÜf]klCmnèr*st*ygnsèt*yÁs€t
+-bkšlCm]n*s
+÷twxGytwx*f*nšr*s*t
+-bf?klnr2s]t	ªxlNršlgn*tsèt*yšlCmGs€t*nèsFt*yblnTb*n*s*tAnsk
+bf]klmnprst]xytwxb*fnšr*s*twxsGtús
+@*f*mnpst?wwx*yfšl6n?s*yGsGtÑf2m*t*fGn*s*t	 kšlnp?r*s*tln*sèt*kšlgnsètšl6n*s*tGk*nrstb*t	¡lbCm*n*s*tšl*n?rs*t*y]m*tšl6n?s*t*y*kúl€n*st/bšlÈnr*s*t6kGs*np*sttÑbl?n
+rt*fn*t fkstTntÑrrlAsGtÃy@bfhklmnprstswxyšlgn?rGklGsýtwxGt*yTklnPr*sbún*s*tr*snÁsAtCmnr*stwxšlsGtšfb*f*n*s*t]@bfGhkšlmnprst2wxyGnúrGt	GbGlCmGnr*sAtGxn*xl)ns]twxGybgt*ylgnyt*yØbn
+2rtèsAt?s*tGk¹lmGnIstox*nGtšl*n*sb*s]ts%t*xfþk*n]pGrvstbšl6n*t?rf*nPr*sAtGywmGns*twpÅkwmGf
+-bfšlmnpr*stbCmnrs*tèsGtÈn*ttsb}t*stPtkšls]tb
+Ôtr*s*tbAtlCmnr]stbúkmntxn
+Gtšl6n*tústbhmslyt*ynôstwxsbAn
+ðb*n*s*tobnt­s€tbAk*nës*t
+bfklmnrstwx*yÝlmn?stbtGyns*tx]sAtën*t¹n
+ðb*tl
+ðnrústwxcs*yb§n2sÁt*f*t?k6n?s*ykgss
+¿l€nAs*t
+-sbôfklÂmnpstnúr]tTxÑbt*yÑbÈnGsëtukšl6n*s0tšl2nrtÑb?n2twxxn
+-bØfl mnrstxGymgn?s*y]n¡ns*txb*sAsfl*n*t¯tTx
+'b*tnt¹b*tšlšrnl*s*tsb€nbGn*tæbl*nrst*ns*t	¡tblýtwxlt*s]twxGy
+¿lG@bofklmnpstgwxyblúræbCmAn*s³t*s?t*yn*sttwxl*nšr*s*tgxklšl*n*sFttwxob*t
+-b'fšlCm€nÏpëstGyšl*n*s*twxþbfklnstŒl*tgyl*nAsèt*y
+sbCmGn*s;twxpst
+¿l
+bhklmnprstxstÑbgrstÑb*tšlÈnNtúr*s*yNn±pšlGs?tbWklGmnr?stÉkØn?rs?t!ts?t2fns*tIsb2f*tlgn*syt*y-bšl2n*s*t|b]twx¹bšl6np?stxnTbln*t
+-bfšlmnrIs*tGyTbšl6n*tšrAtsItÏxb¯klGmnTblAn*s*t
+
+'bfklCmnÃrs
+ÍtGyšl.twxšl*n
+¿r*s*s?tšl6n2s*tbGkGnës*tb*n*s*t
+bfGhkšlmn*pst]xy?lr
+¿lgnGtbln*s*tÈn?s*t*y
+-obTklCm¡nstGxGyNh6n?s*yGkšlÈn*sGtTb*f*s*tàb"nt¹b]k*n*st?r*sn*st*ns*tAkCm*núr*s*tnr*s*tyb
+lšr*tlgnt*ygyTlb*nst^kbn*sGtks	¡t@bfklmnprstxGy
+tklróxNs?x?s*tb*k*ntAkblns
+CtTb?ftëfNsskGns­t÷wGyšl*mGnAstwxrtbÃl*n?syr*s
+-klm*npr*stxTb*tgn?s*yTn?sl?sÃlAt	bf­ln?r*s*twxb*tnsb*tlrSstxmyntb*s*t
+ñbGt?fs*t*f*t?n*tTb?n*t|bôl*n­stwx*f*ngr*s*t
+-bTfkTlm6nØr*stl*n*s*t
+¿r*sk*sGyTb
+ÑbfzklnprsAtGyb]twx?s?t*yIs*k*sTt?s?t*twxbCmn*s*tklIs
+@fhklmnstxyxs
+-tbúklmúnØsSt?f
+¿ntAfbtb*nët	Ghk
+¿lmprswxÏtbúr*tÏxyúptyPnØsnúrAstšl6n*sGysúx
+wkúlm*npØr*stwwxNn*sPrnQr*súxØr
+fklCmnprsýtwxGy?r
+ut?wn*sPsk|bntšl?tnxrgsØtÑbzps*ttAnAtpttrÃlb
+¿l?r]twxmësèt
+-bfklmnprstl
+¿sØx?múr*t?k*n*stùr
+fkmänÃrst?w?xy
+wr
+ðb*n¯s
+/t?b
+nmn*t2t
+©bk*t
+©b*tnxk
+¿l*n*s
+t?x
+ðtlrtgsèt
+-bfk±lmnpstxlmft
+©bklntx
+Ôt?kÏtÑb*tnúkÏrtk?sfúpst
+¿s
+¿rútnstØsplÜtbšl*túkrþs?tgxt?fk
+¿rIstr?b
+žnÜfkn*ttobAfAtgt
+2x-btëf*tTbØf?lnpst
+¿l*stGk
+¿r*s*t
+-bkšl
+wmnrstx*lAtTbšlgnGsGtnTtsAnbfhklmnpstùwxyAkl*s*tl?m?nr?skGn*s*t
+št
+Hk
+n*t?xfkúl mnstÏrnsTbAn*tGl?rsØltQrGk*stPr*s*tbGk*s*t¹b?fCmnst*yGstb*m*s
+/t*s*tGyØk
+Fmn?rtúr
+-t
+¿fkšls*t?l*t?m*snrst*stnbstntÏs
+©b]r*t
+-b|flnpçrst?xØf*yºbAnGs*tntcs
+'t*nr*s*tk|nt*fAt	
+©b¯k*lØmInst*ybCm*n*sGtGl­s@bfklmnprstwxytx€k	wsl*sksGylrstGkÁtkt
+Nrn?sútxl?tln*tätwxÏf
+¿klgnrsItkpst*yrTfy@*sët*k*sgtGyTb*kGn*sëtGybntèsAtk?twx	?@lmn¯prstÑfCm*n
+¿r*s*tún
+¿sf*k.s t¥k
+]búkšlmInp*stPw?xb]lul
+štwx
+Obn*sGy
+ssÑf÷f?ls*tßt
+bfklGmn?prs;twx*y9lr*s?tbkCmn*s*t2xn
+2sès€t*n*st*kGs€t*sèt*ytblnp
+¿r*s*xIl(n?s*yGkšlgn*s2twxhl	kTlgn]prstxbxCm*n*s]twxþb*nr*stšlÁtfšlgn?sšlgnèt	fšlmn	¡rs*tGyAkšl*snt€lšlGs*tGlGn	
+¿fkl
+nrstxTb*ntwx*fk*nNr*s*tb*txgr*sæbúkns]tx?y*kšlbAn*tfës*t*k*t/bAfšl*ngrsÁtm
+÷n
+lGnbkmÈn*sGtl
+õtxØn
+2n2fnpr*stÑblAtkúnt
+t
+abnr2s*tbšlGsAtl*nGs*tGy
+bfklmnprstCx*ylgn?sèt?x*yl*t*ym*n*sýtwxt*kNsbCm!ñnstwx*ygn*tÑbúlNn?pgsþtkšlGm*n]stxtAf*l*s­ln*s
+¿tGyšlësTb?l*n*s*t	k
+¿lmnpstÏxtxëf*n?r*s*tn*ttl*n*s*twxsèt*y*k*t*k*n*s*tGy?k*s*t?f*tfšl6n*s
+©bk*tgytršlCmÈnsýtxÅynl*ss*yGm*n*sGtwx`@fÏp
+cr*stþb
+Vl¡n?t	
+fkmnslsk*nps*t
+t¶bElp*st@s
+-t€n*tAkÑrV@Tkxr
+¿ntm*n*s*tNnt*ks*nAt @bfhklmnprstwxylTmgn?rgsfty
+[klTnrtwx*m*sÁtGygsµt]xÑbGk*n*s2tGy
+*@fklmnrst]wgyskxÃnTlNstwbúk*n?p*s*tPwwxšl?n*tb­lGnstxlgn*sšt*yTb*sšlmÈngr*s*tn
+ŒtGlmnGs*ttr*s*kGyšlGsAtúxæbGnsAtÉklns]twxsèt*yGmAn*s=twxšlGsAtlnGrs*t]mt*n2ttwm
+r
+bf?hklmnrstwxnmntl]txNnwx
+-@bkmGnrsÆt
+ÍxGn*sþtgwkGs
+-tsk*twm*s*ynp*stGyk2sItÏs€t]k	fknrstwxGy*twx*stwxf*n*sÜtxbšlmGn*st¿p*sAk*sGyšl$]n*sGy
+G@
+ðbfGkTln*pëstwxGy Ãl,sGt*f*n*sGtGy	bkl*n*stwxGyNntwx*n*sAt?nsb?r*t
+b
+ÍfGklCmÈnr*s*tGyn
+bfkCmn]prstCxyl
+Gr*n
+-r*s*tþbTknr 2stGy]stšlGx­@Aflgnšr*sgnsyt*y]k*lGnGsFt|bn*tGs!tšlÈnGpsGt*n
+žr*s*t*ngrNs
+b£fklnprstxGy*lCm*n*s*t­lr]s*tsbtAkgsk6nsr?s*ykAlsGy	Ñbf]l*ns.txGytrTbtëfn*t*l*tr*s*t6n	
+s2tGk*s*tÅy
+abGl*n*stGyúk*s*y	Ñb*klœnr*stwxItwx*ygk*sGyšl€nšr*s*tG@|b
+fklmnprstxyæblCm?nPr*sqs*ynGy
+r*s?txCm*tfšlÈnsÁt¿kšl6n*s*tÅy	³f
+Vlqn]r*s!tTwwxnGp*s*tl*s*t#5syt*yGm*s
+@fúklCmnprstwgy*sTtGy?mšt
+ m
+nsDtwxPyTmGn*stbnr*sgtwx!l*sfst?lAn*s
+©bAf¿k*n*s
+/twxnp*sGtwxCrb*fskGlGn*s*t@bf
+¿hklmnprstxyºf*slGnØt*t*yb?l]mn*s]twx€s	?hkGlnstxyIt*klGmr*snx*lp*stGyúl>s¿rþbfšlÈn	¡r*s*tšlgn*sštnl*sènÈnstx*y*n*sëtn*six	f]l*npTrstGxlCm?ykAlAkrsp^l
+-bfkšlmGnstxstm
+©b
+¿lNnr?tgx
+->fkl
+smAnp*s	
+tGwšln*sØt?sÏtgks
+Gt
+bGf*klCm*nr*stwxGy'm
+©bns]tgxr*sixn*s
+ÿt
+©b*fšlGn*sÁtnks	bÉfklnpst$_rHt*lNn6n*tøk*m*tmën*sAtw*y`@
+bkAlAnpgr]sGtnxGy^stwx*fšr*tÆs$[tf*lGnGtm*n*s*t*sGw
+bfklmnprstxy*lim*nÏr*sAt
+flnÊprs]twx
+-érsþt*n?sgtbm*n*stwx[bntwxšl€n*tšlgnèrÑbf*n*s*t	¡r*tNnåt?ybšl*nst*l*sGyšl?s*tlGmnstwxIn?yäsÅtfm*n*s*twxÆk*tÇtÑbAf€k*nšr*s*tæbGmúp*t2f*nšr*s*t
+b?fFk*lnrÁstx*yl*tšt' xklGstÏxt*fšl6n-byl€n*súbk#1ln2sGytþbGrk*@*kCm*n*s*tµyb?klGn?tkml
+ntr*k*y
+bfklmnprstwµyl6ngn%ýp*yGn¯stwx
+'b*f*n*s*twfCm*n*s*t*ykn*s|rÑbsëtwxGm*stGy*k*s*kmAnGstnGtnx*l*tnrt0tCsmnTtrNs*tås*kps*t'ltblxmntr£n*l*n*s*t]nµf]kl]nGps!t]tsb]kâmnr*sµtk?rs|bGn*s*t*fNswmGnp?r*sk*t
+@fklmn?prstxšl6ns*y*nr	b?n*tk2n*stÅml6n?s*y6n*ynšl?sgktb*n*sëtbšlnsAt*yGs}tšlgn?s­tGkšln*s*tšlsbtgn*s]@bfklmnprstwCxGyxnNsbl*n*s*tGyr]sTbTl*nhrs*tCtnqst*yk*sb*n*t?r*s*tGnrAtk)nk
+¿l*n*st-bën*tCmAn6r*s*t?@šl?nprws*tbknst*strs
+/tkCm*ns*t?l*nGm
+-t|mtgxÑb*k*n,s*tGm*nt*kšlsytGf*nr*s*t*t*yCm
+w@
+b
+÷hÀk"glÚm(np*sÝtGw@bf*hklmnprstwxklÐr+s=tGyGmèr*lm*kl*s(krGt¯n]t@?lnr­km*sGyÅn	GklÅmnGprsts6tywm*spGsTtGst*k	¡rfmGn*styTksGy*sTtbGn*s*tf
+-l*s*n*s*tÅy*n*sgt
+ybfkmnpstxÅyot¹bGknstwxGyAf€k*sgb]kšl*nGrGstšl*s*yèsÇt§nGsGt€fTkGn*s*tskGn*sg@?kst6k
+fhkšlmnpIstÇw
+-éxywrIsGmnttt6nÜt?@zn*st*sët?xgl*fkCm*n*pstGstèm*s6t	
+tgm*tlkèsTt
+bfhklnprstxGyllr*twxGmAsGlAn*s*tns]twxb2fsGtmtwxAfšl*n*s*t*n­stšlgns*n*s*tixr*sbtwx*fšlÈns*t*nës*t2fGl€n*sGt!f€kšlÈn
+ós*t-bGkn*stwxl*s
+ÿs*yëf*nšr*s*t
+bkl
+smn*stwxy]l*np*s*t¬lèsGtGn*pt
+-€fäklmnrÁstGy*k	¡r*s
+Gtix*y*klkTkGyGstÜn+fGk]m*n]s*tnGx*k*n*sklk*sGt
+' @]fklmnr;stwx*ylslGyk*ytñr€klGmNn*pst£kšt*yGm*n*s=twx
+ršlqnsÁtGm*s=tNf*lNn*sGtwb*f*n*sGtglNn*s!t]kln*sGtlCm*n*s*t@bfhklmnprstwxymGnr*stk]swx*l*stgk*s€klGnšr
+-wsÇtGy*sètÉkl*nrs#ót.k*s§n*s
+'b*sgnGr*sGty@mk*s
+bflGmnGprstwxCyÉršlÏm*n
+r*s*tqlCmGnstwxäl*sAfl*n*s*tŽfGnTt­lÈn*s*twx0fknsItGx*y*kGt@ÏfGk
+n*styrlpÑb!k`sws
+fklmGnèrstwwxyGxblCmGnèrstgnGt*yNt
+-
+-n*s*s€yn*s
+ZkšlGmgn*sCtGy	bkl*nr*s]twxs*yGnGyGkGrGtGl*s	GhlGmnr*stwxGns/bqsÑb¯stÉxs
+©b€f*n*s*t*k*l*sGt
+-bÜflgmnpGrst
+|l*sÏfs2twxGn*s»tknGsttAfäs)st|bb	
+fkAn*stgxrès=tCl*s
+G@þbklmnÚprstwxybšl*sýtwx
+k*s*yb*sGstHsèt¯fTkGm*sGy	
+@-b§n,s*t*fšlAn*sAtGyÉnCk*n*sktwmn*stÐwÀf9l*sGt@)nsÈt
+mrsNyp6l@bfhklmnprstwxym*s tlGn
+pGsÇtklInÇrs.tšlGnCs*s­t*y6twhklrs-€ty*lGswx6n]t*yn]twxt`lGxk*ns*s]twxbfGl
+G@
+b*klGmnprst]wxGn]p*stwx*n*s]twxbCm*nGsNtwxbÚlCm*nHsGt	
+cbGl*np*stPwGxtwx
+|l*n*s*nsr*s*tIn
+-bCfmn*ps+ítx*yNbGk*s*st*kGn*s*tikšl6nn
+4s
+@bfGklGmn/prGstlGk*n*stywm*sÐwb
+l
+r*sýt"Rxšl*sGt*kNl&)s*kËr
+-fhklGmnstxrn€tGw*nÈrGsèkGsšlGsÁtGn*sCt!n*s*tlGngns*y
+-	
+hklnrstxÅysn*sGtG@ÈnPr*sgtGk*lGs6kmqnGs.txtrÙkGl*n2sGt€kGmsrsGk÷tlGnl(nës!tGy
+-b?fk­lCm.Æn*stCyÅtn*sþtGs&ðt@bfhklmnprstwxyrt*sgtylIn¿k­lÈn*s*tgxÅy*lysšlm*n*stGk­sykNn*s*y/bn*sýtwxwf*sGt
+-
+¿@sbGf*kmGn
+ÜstxNn?sAn*s*txGnësCmAn*s*tÊ@*k*lr*s
+-fkln$ŒpstGxGyyskÃsG@whšlGnGs	GbkInp*sGtCx*yTksGy
+@kmn*stgxk*sGyès€tk*s]ks*tGf*l*sGyšl6n,s*y#Yf*kšlÈns*tGyGkNlGt
+õ@Gn*swl*nlwmGn
+sbGlnrtwxynlAsfEl*n*s*txšl	¡t6tklmnrs*tlÜnGfAkTbmhs
+-énptt
+ m=t}rxrns*yšlGmElGn*s @bfhklmnprstwxy*les*b*sklnr)/str*s0f­n*sët*yµkAk*n*s
+©bgfkln?pstxÆy.stwx*f*l*n*s*tnr*sGtPw*y]kGs	
+sstAfkrs
+2x*nës*t*ns*tšl*m6n*sþb­l
+smÈnrst*l*sGy*kšl*sGy*nsrs*tl*nGhilGmGnr	
+swxàn*s*t
+bklGmnGprstx÷y,Ûl^s*stfNmb]fNm*nTstwx*fšlÈnšr*s*tkCmGn±r¯sGtwxt*fšl*s
+G@flGm*nopÁs=tgwwxµy*k*n*s*tÈkn*stGyTb*fCm*ns*tÜfkšlqn*sët*ntwxn
+-%lÐs
+@b]fNhknrstwwxµyTk*nsGtGy*k*nGstGk*n*s*t2xs*šy	NfGkšlGmànqstwxAk*n*s*tšlGnr*s*tGyn€s]twxGy,sGt*nGs*t
+b£fkGl÷mnprstox]l4ršlÆrs*n*s
+÷tšbflstx]r*str*sbGntwxAf*n+(r*s*tšlGnšrs*y
+GbCm€n*s*trtn*s*tÑb,ÛlAn*s*twx¹bfGn*sÊtwxr€k*s*t*f!kÈn$rsAt
+G@bfhGklmnrstxl*sNk?l6n*sèt*yàbGkNnAsGyGsgtšlnèrs*yGl*sGy	fÑk­lGmqn*sÁtGy
+'b¿kšl6n*s*tÅy&Ün*s	T@$>flnrstwxsGtSyCm,s]tGn­t*n*sGtµy
+abfšlqnsÜtwxšlgnštbf	Thk­lGmnpGrst|xGyŒltxb€f*n*s*t*kgr*s*tµyþn.rëstwxb2fn*s*t]k¬l*nGsÇtGn*sµt
+©bkšlGn2sÁtlGn
+rAfGkšlÈns*t
+b±fklmÈnpsty*ln*sGt]rsGttgx
+jb*f*n*s*t*y*l*s]tk:n:r-ðtwx(nšlÈn*s*tknr*s*twx]yšlm*s*st]p*s]xGyn*skrès
+-t
+bfk*lnGprstixGyšl*sštšlmCm*s	GklGmn*s
+÷tgw*ys*ys­ft*y­n#Ykn*sÜtl]s]k
+lGnÅr*sâtGybGkCm
+Ín*s]t	@flmnÑpstr*sGt±fG@f?lNsG@±f?lAks¡l±fnG@±ffk*s4nnNn4ns±f4Vw
+¹@
+bfklmnwprst*x¹l*sonGs*tŸw*n*sGtëx*ybInrs*tixkprGk6n?s*l2m»t€n*s*t@bfØhklmnprstwGyy ÃlNln*sCtxGysppÇr*sbIlCmnsGtNbhšlnGxNbÝsknPr*sGykswxGyÏbClGn*s€tkšlëmGstGlm*sÇlstkpr
+y*Æm*nsGtGy
+tGmGn*str*sl*s]twxkGnrsÈxy
+-õn*stÇnr*sGf*sµspk*l*s
+bsfklmGnprstw?x]lGrwb6l*sgxfGm
+jns]tGxbyrµnGs*s÷xÇnGr*str*sG@Glgnir*s	ýtGxG@bfklmnGprstwxyNlGn*sGtNlGnèr*sGtÜx	h­lmnrsItÜxtGnGs*tÁs(ÝtGykGt.ifkGmn*stTkGnÐsGyNm
+bfkl$
+-mnpstxl5npstsf*n*s*t÷k]kPm*ssprf¹m¹km
+Gs*ynßk*slGn¯s*t*wsÇtlGmGn*stgfTnbk*n*stgl€k*n*s*t€kynµm
+m
+ÇbGhkšlmÈnst*xGyÑbffl!nst¹lkâbÇkf*s*t*@GlNw	bfNhkGnrs/yxgkNlgt-fll*sGpGt€nAs*t*ytGmTrbfhklmnpstwxGyGk*nNr*sGt*y?l€nr*st*m*s	¡l6ns*y*lún*l¹nIsGt?kAn*s,t*yb*n*s*tGsTt5b]k*nGsÁtšln$òrs	ÿtGyGs*t*y
+÷kGl
+ÌmGn*sµtwx
+bÚfklmn ÷rs*twx*yÜr*s*k*n*s*t*y&œn€nGs*t*@*n*s*tGw"lGn*s*t
+-flGmn$spÈr*styÙksGynGyGkGntG@±f*s*klÈns*t*y*swt*yNn
+-ét
+G@ºfkl75nprGs*tµxyglGn*s2sGt*yrštfgkk*s*tqlGn*s4Q@4Yf4jns4|t4wf4yk]k*nätGnr*s*tås*tlmrsnÚkGnGskgnNstlws+Ubùk*lr*sfGnp*k*n*kGnl@bfhklmnprstwxywf6hGklmn.nprst% wâxy­hÁmGn*sGtGk*sGtµk*sGyGbIm*nGt*m*sCtGb*k*ss÷fkgfbNhklGm7ÜnGprst÷wxyGk*n*sGtsfkhns*t*ylGmrfk*sGyNs*tAkGl)nsÁtGyl*s*t]k*sot]lGnNr*s*t÷wGkGpNhl*nst*xCnkµtir
+Çbyfkl*mnrstyGkGl*n*sätwxIfNhCm/Zn*s*tGyšlèrGsGt*xhGkn*s*tGyhtÇbl€n*s*tskÃs	flmnpsot%/y€nr*s*tls*tGm
+-
+-tGfµtG@n*s*kGn,s*sth*sGl*n*s*t¹kGt]@bfhklmnprstwxy*lnr*sCt*stGxGnèr*sgkl]r*tGmnCrGsGt*s$ít6kílwmrGs-ðtwx"n
+Gfäk2žm/Znpr*s]t]xGyr]f*n]sGtGyG@boknrsyGlGršlstfilªlÀn*s
+-bfhk*mGnPrst' sgkGl5mGt*f?t±f*sÇtGn*s*tGy]k|lGnGpÅs!Dt	0fIkGl]mGnstGyÆk*s
+fklmGnpstNwGyl*sGn*sàt*kCp*sµt]x*yšlgn?sGtGn]sGt
++l
+¶m*n*sëtn2s*sAtÝbfklmnprstgwx*ylCm*n?r*sAtb*tnsýtxšlNsþbGn*s*tb*n*sätwxlgn*sètšlgnër]stxœr*s­lAnbCm*n*s*tl	¢t*y!sf	utb6s	sbšlCmGnr,s.twx*lAnýtwx
++ìnlnèrstxGyšlr6st*y?sèt*s*tGyšl*t2fGkšr*s*tGyGlnkl]mstx*y*t?xþb2f*s*tGy
++bfl*mGnrsGtGyl6n*s?t*yGs*tywm*n*smGt­lGn*t
+ÝbÏfkl?mnrstwxüy	¢ln*s*twxÁs=tm*nµstxnt
+
+l*sl*s6n?s*ylsÁtbõn*str*s*tGyktßrÑfšln*s*tšlws
+ÝbÜf]klCmnèr*st*ygnsèt*yÁs€t
++bkšlCm]n*s
+îtwxGytwx*f*nšr*s*t
++bf?klnr2s]t	«xlNršlgn*tsèt*yšlCmGs€t*nès=t*yblnTb*n*s*tAnsk
+bf]klmnprst]xytwxb*fnšr*s*twxsGtús
+@*f*mnpst?wwx*yfšl6n?s*yGsGtÑf2m*t*fGn*s*t	 kšlnp?r*s*tln*sèt*kšlgnsètšl6n*s*tGk*nrstb*t	¢lbCm*n*s*tšl*n?rs*t*yTm*tšl6n?s*t*y*kúln*st&bšlÈnr*s*t6kGs*np*sttÑbl?n
+rüt*fn*t fkstTntÈrrlAsGtÃy@bfhklmnprstswxyšlgn?rGklGsýtwxGt*yTklnPr*sbún*s*tr*snÁsAtCmnr*stwxšlsGtšfb*f*n*s*t]@bfGhkšlmnprst2wxyGnúrGt	GbGlCmGnr*sAtGxn*xl)ns]twxGybgt*ylgnyt*yÏbn
+)rtèsAt?s*tGk°lmGnIstfx*nGtšl*n*sb*s]ts
+t*xfõk*n]pGrvstbšl6n*t?rf*nPr*sAtGywmGns*twpÅkwmGf
++bfšlGmnpr*stbCmnrs*tèsGtÈn*ttsbttkšls]tb
+Ëtr*s*tbAtlCmnr]stbúkmüntxn
+>tšl6n*tústbhmslyt*ynësütwxsbAn
+çb*n*s*tobnt­s€tbAk*nësSt
+bfklmnrstwx*yÔlmn?stbtGyns*tx]sAtën*t°n
+çb*tl
+çnrústwxZs*yb§n2sÁt*f*t?k6n?s*ykgss
+¶l€nAs*t
++sbëfklÂmnpstnúrTtTxÑbt*yÑbÈnGsëtukšl6n*s'tšl)nrtÑb?n2twxxn
+
+bÏfl mnrstxGymgn?s*yTn¡ns*txb*sAsfl*n*tŠtTx
+
+b*t
+nt°b*tšlšrnl*s*tsb€nbGn*tÝbl*nrst*ns*t	¢tblýtwxlt*s]twxGy
+¶lG@bffklmnpstgwxyblúrÝbCmAn*sªt*s?t*yn*sttwxl*nšr*s*tgxklšl*n*s=ttwxob*t
++b
+fšlCm€nÆpëstGyšl*n*s*twxþbfklnstŒl*tgyl*nAsèt*y
+sbCmGn*s;twxpst
+¶l
+bhklmnprstxstÑbgrstÑb*tšlÈnNtúr*s*yNnšpšlGs?tbWklGmnr?stºkÏn?rs?t!ts?t2fns*tIsb2f*tlgn*syt*y
+bšl)n*s*tsb]twx°bšl6np?stxnTbln*t
++bfšlmnrIs*tGyTbšl6n*tšrAtsItÆxbŠklGmnTblAn*s*t
+
+
+bfklCmnÃrs
+ÄtGyšl.twxšl*n
+¶r*s*s?tšl6n2s*tbGkGnës*tb*n*s*t
+bfGhkšlmn*pst]xy?lr
+¶lgnGtbln*s*tÈn?s*t*y
++obTklCm¡nstGxGyNh6n6s*yGkšlÈn*sGtTb*f*s*tàb"n	t°b]k*n*st?r*sn*st*ns*tAkCm*núr*s*tnr*s*tyb
+
+lšr*tlgnt*ygyTlb*nstUkbn*sGtks	¢t@bfklmnprstxGy
+tklräxNs?x?s*tb*k*ntAkblns
+4tTb?ftëfNsskGns­t÷wGyšl*mGnAstwxrtbÃl*n?syr*s
++klm*npr*stxTb*tgn?s*yTn?sl6sÃlAt	bf­ln?r*s*twxb*tnsb*tlrSstxmyntb*s*t
+èbGt?fs*t*f*t6n*tTb?n*tsbôl*n­stwx*f*ngr*s*t
++bTfkTlm6nÏr*stl*n*s*t
+¶r*sk*sGyTb
+ÑbfzklnprsAtGyb]twx?s?t*yIs*k*sTt?s?t*twxbCmn*s*tklIs
+@fhklmnstxyxs
++
+tbúklmúnÏsSt?f
+¶ntAfbtb*nët	Ghk
+¶lmprswxÆtbúr*tÆxyúptyPnÏsnúrAstšl6n*sGysúx
+wkúlm*npÏr*stwwxNn*sPrnHr*súxÏr
+fklCmnprsýtwxGy?r
+ft?wn*sPsksb	ntšl?tnxrgsÏtÑbzps*ttAnAtpt	trÃlb
+¶l?r]twxmësèt
++bfklmnprstl
+¶sÏx?múr*t6k*n*stðr
+fkmänÃrst?w?xy
+hr
+çb*n¯s
+ t?bnmn*t2t
+ bk*t
+ b*tnxk
+¶l*n*s
+wt?x
+çtlrtgsèt
++bfkšlmnpstxlm]t
+ bklntx
+Ët?kÆtÑb*tnúkÆrtk?sfúpüst
+¶s
+¶rútnstÏsplÜtbšl*túkrõs?tgxt?fk
+¶rIstr?b
+©nÜfkn*ttobAfAtgt
+)x
+btëf*tTbÏf?lnpst
+¶l*stGk
+¶r*s*t
++bkšl
+hmnrstx*lAtTbšlgnGsGtnTtsAnbfhklmnpstwxyAkl*s*tl?m?nr?skGn*s*t
+t
+9k
+n*t?xfkúl mnstÆrnsTbAn*tGl?rsÏltHrGk*stPr*s*tbGk*s*t°b?fCmnst*yGsütb*m*s
+ t*s*tGyÏk
+7mn?rütúr
++
+t
+¶fkšls*t?l*t?m*snrst*st	nbstnòtÆs
+ b]r*t
++b|flnpØrst?xÏf*yºbAnGs*tntZs
+t*nr*s*tk|nt*fAt	
+ bŠk*lÏmInst*yPtbCm*n*sGtGl­s@bfklmnprstwxytx€k	xsl*sksGylrstGkÁtkt
+?rn?sútxl?tln*tätwxÆf
+¶klgnrsItkpst*yrTfy@*sët*k*sgtGyTb*kGn*sëtGybntèsAtk?twx	?@lmnŠprstÑfCm*n
+¶r*s*tún
+¶sf*k.st¥k
+]búkšlmInp*stPw?xb]lul
+twx
+Fbn*sGy
+ssÑf÷f?ls*tßt
+bfklGmn?prs;twx*y9lr*s?tbkCmn*s*t2xn
+)sès€t*n*st*kGs€t*sèt*ytblnp
+¶r*s*xIln?s*yGkšlgn*s)twx_l	kTlgn]prstxbxCm*n*s]twxþb*nr*stšlÁtfšlgn?sšlgnèt	fšlmn	¢rs*tGyAkšl*snt€lšlGs*tGlGn	
+¶fkl
+nrstxTb*ntwx*fk*nNr*s*tb*txgr*sÝbúkns]tx?y*kšlbAn*tfës*t*k*t&bAfšl*ngrsÁtm
+èn
+lGnbkmÈn*sGtl
+ætxØn
+)n2fnpr*stÑblAtkúnt
+t
+Xbnr2s*tbšlGsAtl*nGs*tGy
+bfklmnprstCx*ylgn?sèt?x*yl*t*ym*n*sýtwxt*kNsbCm!änstwx*ygn*tÑbúlNn?pgsõtkšlGm*n]stxtAf*l*s­ln*s
+¶tGyšlësTb?l*n*s*t	k
+¶lmnpstÆxtxëf*n?r*s*tn*ttl*n*s*twxsèt*y*k*t*k*n*s*tGy?k*s*t?f*tfšl6n*s
+ bk*tgytršlCmÈnsýtxÅynl*ss*yGm*n*sGtwx`@üfÆp
+Zr*stþb
+Ml¡n?t	fkmnslsk*nps*t
+t§b<lp*st@s
++
+t€n*tAkÈrG@Tkxr
+¶ntm*n*s*tNnt*ks*nAt @bfhklmnprstwxylTmgn?rgs]ty
+RklTnrtwx*m*sÁtGygsµt]xÑbGk*n*s2tGy
+*@fklmnrst]wgyskxÃnTlNstnbúk*n?p*s*tPwwxšl?n*tb­lGnstxlgn*sšt*yTb*sšlmÈngr*s*tn
+­tGlmnGs*ttr*s*kGyšlGsAtúxÝbGnsAtºklns]twxsèt*yGmAn*s=twxšlGsAtlnGrs*t]mt*n2ttwm
+r
+bf?hklmnrstwxnmntl]txNnwx
++@bkmGnrsÆt
+ÄxGn*sõtgwkGs
++
+tsk*twm*s*ynp*stGyk2sItÆstTk	fk	nrstwxGy*twx*stwxf*n*sÜtxbšlmGn*st¿p*sAk*sGyšl$Pn*sGy
+G@
+çbfGkEln*pëstwxGy ¶l,sGt*f*n*sGtGy	bkl*n*stwxGyNntwx*n*sAt0nsb?r*t
+b
+ÄfGklCmÈnr*s*tGyn
+bfkCmn]prstCxyl
+>r*n
+ûr*s*tþbTknr #stGy]stšlGx­@Aflgnšr*sgnsyt*y]k*lGnGs=tsbn*tGs!tšlÈnGpsGt*n
+©r*s*t*ngrNs
+b£fklnprstxGy*lCm*n*s*t­lr]s*tsbtAkgsk6nsr?s*ykAlsGy	Ñbf]l*ns.txGytrTbtëfn*t*l*tr*s*t6n	s2tGk*s*tÅy
+XbGl*n*stGyúk*s*y	Ñb*klŽnr*stwxItwx*ygk*sGyšl€nšr*s*tG@sb
+fklmnprstxyÝblCm?nPr*sqs*ynGy
+vr*s?txCm*tfšlÈnsÁt¿kšl6n*s*tÅy	ªf
+Mlhn]r*s!tTwwxnGp*s*tl*s*t#(syt*yGm*s
+@fúklCmnprstwgy*sTtGy?mšt
+mns;twxPyTmGn*stb
+nr*sgtwx!	l*sfst0lAn*s
+ bAf¿k*n*s
+ twxnp*sGtwxCrb*fskGlGn*s*t@bf
+¶hklmnprstxyºf*slGnÏt*t*yb?lTmn*s]twx€s	?hkGlnstxyIt*klGmr*snx*lp*stGyúl>s¿rþbfšlÈn	¢r*s*tšlgn*sštnl*sènÈnstx*y*n*sëtn*six	f]l*npTrstGxlCm?ykAlAkrspUl
++bfkšlmGnstxstm
+ b
+¶lNnr?tgx
++5fkl
+dmAnp*s	tGwšl
+n*sÏt?sÆtgks
+>t
+bGf*klCm*nr*stwxGy
+m
+ bns]tgxr*sixn*s
+ðt
+ b*fšlGn*sÁtnks	bÉfklnpst$RrHt*lNn6n*tøk*m*tmën*sAtw*y`@
+bkAlAnpgr]sGtnxGyUstwx*fšr*tÆs$Ntf*lGnGtm*n*s*t*sGw
+bfklmnprstxy*lim*nÆr*sAt
+qflnÊpr	s]twx
++àrsõt*n?sgtbm*n*stwxRbntwxšl€n*tšlgnèrÑbf*n*s*t	¢r*tNnåt?ybšl*nst*l*sGyšl?s*tlGmnstwxIn?yÛsÅtfm*n*s*twxÆk*tÇtÑbAf€k*nšr*s*tÝbGmúp*t2f*nšr*s*t
+b?f=k*lnrÁstx*yl*tšt'xklGstÀxt*fšl6n
+byl€n*súbk#$ln2sGytþbGrk*@*kCm*n*s*tµyb?klGn?tkml
+ntr*k*y
+bfklmnprstwµyl6ngn%ðp*yGn¯stwx
+
+b*f*n*s*twfCm*n*s*t*ykn*s|rÑbsëtwxGm*stGy*k*s*kmAnGstnGtnx*l*tnrt'tCsmnTtrNs*tås*kps*t
+ltblxmntr£n*l*n*s*t]nµf]kl]nGps!t]tsb]kâmnr*sµtk?rssbGn*s*t*fNswmGnp?r*sk*t
+@fklmn?prstxšl6ns*y*nür	b?n*tk2n*stÅml6n?s*y6n*ynšl6sgktb*n*sëtbšlnsAt*yGsttšlgn?s­tGkšln*s*tšlsbtgn*s]@bfklmnprstwCxGyxnNsbl*n*s*tGyrTsTbTl*n_rs*tCtnqst*yk*sb*n*t?r*s*tGnrAtk(õnk
+¶l*n*st
+bën*tCmAn6r*s*t?@šl?nprws*tbknst*strs
+ tkCm*ns*t?l*nGm
++
+t|mtgxÑb*k*n,s*tGm*nt*kšlsytGf*nr*s*t*t*yCm
+w@
+b
+îh·k"ZlÚmnp*sÔtGw@bf*hklmnprstwxklÇr+s=tGyGmèr*lm*kl*s(krGt¯n]t@?lnr­km*sGyÅn	GklÅmnGprsts6tywm*spGsTtGst*k	¢rfmGn*styTksGy*sTtbGn*s*tf
++l*s*n*s*tÅy*n*sgt
+ybfkmnpstxÅyft°bGknstwxGyAf€k*sgb]kšl*nGrGstšl*s*yèsÇt§nGsGt€fTkGn*s*tskGn*sg@?kst6k
+fhkšlmnpIstÇw
++àxywrIsGmnttt6nÜt?@zn*st*sët?xgl*fkCm*n*pstGstèm*s6t	tgm*tlkèsTt
+bfhklnprstxGyllr*twxGmAsGlAn*s*tns]twxb2fsGtmtwxAfšl*n*s*t*n­stšlgns*n*s*tixr*sbtwx*fšlÈns*t*nës*t2fGl€n*sGt!f€kšlÈn
+ês*t
+bGkn*stwxl*s
+ðs*yëf*nšr*s*t
+bkl
+dmn*stwxy]l*np*s*t¬lèsGtGn*pt
++€fäklmnrÁstGy*k	¢r*s
+>tix*y*klkTkGyGstÜn+fGk]m*n]s*tnGx*k*n*sklk*sGt
+'@]fklmnr;stwx*ylslGyk*ytèr€klGmNn*pstkšt*yGm*n*s=twx
+ršlhnsÁtGm*s=tNf*lNn*sGtnb*f*n*sGtglNn*s!t]kln*sGtlCm*n*s*t@bfhklmnprstwxymGnr*stk]swx*l*stgk*s€klGnšr
++nsÇtGy*sètºkl*nrs#æt.k*s§n*s
+
+b*sgnGr*sGty@mk*s
+bflGmnGprstwxCyºršlÆm*n
+r*s*tqlCmGnstwxÛl*sAfl*n*s*t«fGnTt­lÈn*s*twx'fknsItGx*y*kGt@ÆfGk
+n*styrlpÑb!k`sws
+fklmGnèrstwwxyGxblCmGnèrstgnGt*yNt
++
+n*s*s€yn*s
+KkšlGmgn*sCtGy	bkl*nr*s]twxs*yGnGyGkGrGtGl*s	GhlGmnr*stwxGns&bqsÑbŠstºxs
+ b€f*n*s*t*k*l*sGt
++bÜflgmnpGrst
+sl*sÆfs2twxGn*s²tknGsttAfÛs(õstsbb	fkAn*stgxrès=tCl*s
+G@þbklmnÚprstwxybšl*sýtwx
+k*s*yb*sGstHsètŠfTkGm*sGy	@
+b§n,s*t*fšlAn*sAtGyÀnCk*n*s\twmn*stÇw·f9l*sGt@)nsÈt
+mrsNyp6l@bfhklmnprstwxym*s tlGn
+ypGsÇtklInÇrs.tšlGn:s*s­t*y6twhklrs-ty*lGswx6n]t*yn]twxt`lGxk*ns*s]twxbfGl
+G@
+b*klGmnprst]wxGn]p*stwx*n*s]twxbCm*nGsNtwxbÚlCm*nHsGt	
+ZbGl*np*stPwGxtwx
+sl*n*s*nsr*s*tIn
++bCfmn*ps+àtx*yNbGk*s*st*kGn*s*tikšl6nn
++s
+@bfGklGmn.öprGstlGk*n*stywm*sÇwb
+l
+r*sýt"Exšl*sGt*kNl&
+s*kÂr
++fhklGmnstxrn€tGw*nÈrGsèkGsšlGsÁtGn*sCt!un*s*tlGngns*y
++	hklnrstxÅysn*sGtG@ÈnPr*sgtGk*lGs6kmhnGs.txtrÐkGl*n2sGt€kGmsrsGk÷tlGnlnës!tGy
++b?fk­lCm.¹n*stCyÅtn*sõtGs&ãt@bfhklmnprstwxyrt*sgtplIn¿k­lÈn*s*tgxÅy*lysšlm*n*stGk­sykNn*s*y&bn*sýtwxwf*sGt
++
+¶@sbGf*kmGn
+ÍstxNn?sAn*s*txGnësCmAn*s*tÊ@*k*lr*s
++fkln$¯pstGxGyyskÃsG@whšlGnGs	GbkInp*sGtCx*yTksGy
+@kmn*stgxk*sGyès€tk*s]ks*tGf*l*sGyšl6n,s*y#Lf*kšlÈns*tGyGkNlGt
+æ@Gn*swl*nlwmGnsbGlnrtwxynlAsf<l*n*s*txšl	¢t6tklmnrs*tlÜnGfAkTbmhs
++ànptt
+m=t}rxrns*yšlGm<lGn*s @bfhklmnprstwxy*l\s*b*sklnr)"str*s0f­n*sât*yµkAk*n*s
+©bgfkln0pstx·y.stwx*f*l*n*s*tnr*sGtPw*y]kGs	sstAfkrs
+)x*nës*t*ns*tšl*m6n*sþb­l
+dmÈnrst*l*sGy*kšl*sGy*nsr
+s*tl*nGhilGmGnr	swx×n*s*t
+bklGmnGprstx÷y,ÎlUs*stfNmb]fNm*nTstwx*fšlÈnšr*s*tkCmGnšr¯sGtwxt*fšl*s
+G@flGm*nfpÁs=tgwwxµy*k*n*s*tÈkn*stGyTb*fCm*ns*tÜfkšlhn*sët*nûtwxn
++&lÐs
+@b]fNhknrstwwxµyTk*nsGtGy*k*nGstGk*n*s*t2xs*y	NfGkšlGm×nqstwxAk*n*s*tšlGnr*s*tGyn€s]twxGy,sGt*nGs*t
+b£fkGl÷mnprstfx]l4ršlÆrs*n*s
+îtšbflstx]r*str*sbGntwxAf*n+r*s*tšlGnšrs*y
+>bCm€n*s*trtn*s*tÑb,ÎlAn*s*twx°bfGn*sÊtwxr€k*s*t*f!kÈn$rsAt
+G@bfhGklmnrstxl*sNk?l6n*sèt*yàbGkNnAsGyGsgtšl
+nèrs*yGl*sGy	fÑk­lGmhn*sÁtGy
+
+b¿kšl6n*s*tÅy&Ïn*s	T@$1flnrstwxsGtSyCm,s]tGn­t*n*sGtµy
+XbfšlhnsÜtwxšlgnštbf	Uhk­lGmnpGrstsxGyŒltxb€f*n*s*t*kgr*s*tµyõn.rëstwxb2fn*s*t]k¬l*nGsÇtGn*sµt
+ bkšlGn2sÁtlGn
+vrAfGkšlÈns*t
+bšfklmÈnpsty*ln*sGt]rsGttgx
+ab*f*n*s*t*y*l*s]tk:n:r-ãtwxnšlÈn*s*tknr*s*twx]yšlm*s*süt]p*s]xGyn*skrès
++
+t
+bfk*lnGprstixGyšl*sštšlmCm*s	GklGmn*s
+ètgw*ys*ys­ft*y­n#Lkn*sÜtl]s]k
+vlGnÅr*sâtGybGkCm
+Ÿn*s]t	@flmnÈpstr*sGtšfG@f?lNsG@šf?lAkslšfnG@šffk*s4anNn4asšf4Iw
+°@
+bfklmnwprst*x°l*sfnGs*tŸw*n*sGtëx*ybInrs*tixkpürGk6n?s*l2m²t€n*s*t@bfØhklmnprstwGyy ¶lNln*sCtxGysppÇr*sbIlCmnsGtNbhšlnGxNbÔsknPr*sGykswxGyÏbClGn*s€tkšlâmGstGlm*sÇlstkpr
+y*¹m*nsGtGy
+tGmGn*str*sl*s]twxkGnrsÈxy
++ìn*stÇnr*sGf*sµspk*l*s
+bsfklmGnprstw?x]lGrwb6l*sgxfGm
+[ns]tGxbyrµnGs*s÷xÇnGr*str*sG@Glgnir*s	þtGxG@bfklmnGprstwxyNlGn*sGtNlGnèr*sGtÜx	h­lmnrsItÜxtGnGs*tÁs(ÐtGykGt.\fkGmn*stTkGnÐsGyNm
+bfkl#ýmnpstxl5npstsf*n*s*t÷k]kPm*ssprf°m°km
+>s*y
+nßk*slGn¯s*t*wsÇtlGmGn*stgfTnbk*n*stgl€k*n*s*t€kyn¬m
+m
+ÇbGhkšlmÈnst*xGyÑbffl!nst°lkâbÇkf*s*t*@GlNw	bfNhkGnrs/lxgkNlgt-Yll*sGpGt€nAs*t*ytGmTrbfhklmnpstwxGyGk*nNr*sGt*y?l€nr*st*m*s	¢l6ns*y*lún*l°nIsGt?kAn*s,t*yb*n*s*tGsTt5rb]k*nGsÁtšln$års
++tGyGs*t*y
+îkGl
+œmGn*sµtwx
+bÚfklmn êrs*twx*yÜr*s*k*n*s*t*y&°n€nGs*t*@*n*s*tGw"lGn*s*t
++flGmn$fpÈr*styÐksGynGyGkGntG@šf*s*klÈns*t*y*swt*yNn
++àt
+G@ºfkl7(nprGs*tµxyglGn*s2sGt*yrštfgkk*s*tqlGn*s4D@4Lf4]ns4ot4jf4lk]k*nätGnr*s*tås*tlmrsnÚkGnGskgnNstlws+Hbðk*lr*sfGnp*k*n*kGnl@bfhklmnprstwxywf6hGklmn.aprst%wâxy­hÁmGn*sGtGk*sGtµk*sGyGbIm*nGt*m*sCtGb*k*ss÷fkgfbNhklGm7ÏnGprst÷wxyGk*n*sGtsfkhns*t*ylGmrfk*sGyNs*tAkGl)nÿsÁtGyl*s*t]k*sft]lGnNr*s*t÷wGkGpNhl*nst*xCnkµtir
+Çbyfkl*mnrstyGkGl*n*sätwxIfNhCm/Mn*s*tGyšlèrGsGt*xhGkn*s*tGyhtÇbl€n*s*tskÃs	flmnpsft%"y€nr*s*tls*tGm
++
+tGfµtG@n*s*kGn,s*sth*sGl*n*s*t°kGt]@bfhklmnprstwxy*lnr*sCt*stGxGnèr*sgkl]r*tGmnCrGsGt*s$àtílwmrGs-ãtwx"n
+Gfäk2«m/Mnpr*s]t]xGyr]f*n]sGtGyG@bfknrsyGlGršlstfilªl·n*s
++bfhk*mGnPrst'sgkGl5wmGt*f?tšf*sÇtGn*s*tGy]kslGnGpÅs!7t	0fIkGl]mGnstGy·k*s
+fklmGnpstNwGyl*sGn*sàt*kCp*sµt]x*yšlgn?sGtGn]sGt
+ µbNh*kGlGn]pr*s]x]kGm*sGtGx	I@Tbsf
+-
+-l*nr*s3Ñt	@f]klGm]p!^sGyršp*k*r7(k*yGk]lGmGn?st]xšl6n*šs	*klnGpGr*sGtGxGf*yCl*n*sgm*n*sGt@bfhklmnprstwxyšl6nSrs*m*s*t
+-Gklím-AnrGs8Át*x
+Cy*k*st*kGn*s*tGy-blnrstGx6nsGtGwGyGsGxGk*sGyGnGrsykgkGnGp*st*s2tw@bNfhklmnsprstwxGy]lGnrsTt*sµyCt*@GsItGx]k­lCr*sätG@Gf]k)/s*y]lGn*sšlGnqs*tGy*fònGsGtlm
+-
+-n?p*st?n*yµ@Gn*sGy*n]p*s*tGl*tGk*n*s*y
+bfØkulnCprstw]xGyGk*lNl
+ns@GsCt6k*lTr*s)|@G@±f­hklµm*n*pGrst3x]yšl	TmnPrsotgnGsixNk*n*s)­t
+-6b\f­l(nrs*txy€n*s*tgnGr*sGklnGp9rÐs*tGtGy68sGt
+-wbGkšlGmnsAtCxy*OlGs?y	âbfäkmnst*yŒlm*nës*tGy*kGn*s*t*yšl*nGs*tGfCkšlÈnrs*tAn*sGt*y@bfhklmnprstwxystšl6n?s*yG@(r]s*tNn*tÀm*n*stglCmGns¯t*ysbGnGr?h*nÁs!t9rsgnÈk
+-lGn5*sGtµysfkwm*nNp*stGnÇr*sGkIn­ršlgnGxGmGn*sGtm*nnt	
+t	G@]knGp*rsGtysk*sþsfšl(ns]t*yGk8šs*s¯t
+G@Cbsf]h?kwmGn6$s*t]x
+b*fshGklnprstwgx
+-GklGnpyrstsxGyGb€n*s*tr]l=tkþs€l©@­h*n*sGtwkÈnPrs*tux*y6n*s*tCm*n*sAtklgmGnŽrsGk­s*kGn*s(t,@bfhklmnprst*wxyGkGlGnŽr*sGxGyklenGrs]tÑxtwx6r*sns*yGsët¡nèr*s*tCmt
+b6hklmnrsotGyGk*l*nGkGtšlAnGr*s.œt*ygbGn¯sGtšl?nwr*sètNf]l*np*tt*nÁs*t*sµt*b6kTnsèt*yG@b­lGn*s*n*s*tšlGswtñyGlGtl*n*s*t*yf­l€n
+rst*yhl]mGnspwr*sbºfühklmngprstwyÈk*ll*nGstwxþn*s*tGnšr*sGy*n2s*t*yGnGpsNwGkšlGn*sAn*s*tGyšlwm6ntGkNn*pšlgnèr*swkwmtG@*s?l*n*sm*ns*t*y]kNnwmGn*sGtGkl*nstGn
+r*k*s*tµyâlsAtwxmn*stixèr*s@bfhklmnâprstwxy	bNhlGnrst*y6n2s
+ôyÙn*tn*tk­hIklnÁr*stn*s1Bn6klCmÈnrs.t!n*sGy!tGhGlún*s?t@bfhGklmnprst7Üwxyrgk*sGlTrGtlCr"s*sGtCyn¯sG@zh*k­lÇrGsMt"n*sGtGk*nèstAkqswbgl*stGwGlGnGs*t6n*stk*ln*s*tGyÁsøt
+-bfhGlnpst-fwlGns*t*y*lGt,s*ttGnGrkt
+rGkGnr	Tl*k*n
+-r*s
+ÁbfühklÈn/ypstwxGy?l*sÃb*kGlmsnixh*sgtål;ºs*ysfGlGn*stÇwomGn*s
+bNfIl?mn]rstNw]xyÇb*s*n6r*sGyGn*sgwGfoxsflGn*st*k*stgr*sGkGs*sgy
+b<áfhklnGrstGw*yllGn
+nšlÈnsGtNkGnGsGt*y­hšl*nGs*tbn*t	wb/êflGnüps*tÇw*ns*t*ytÇrG@bfklmn?pÇrs*twxIy6k?nrs]t*xGyNk?lNrGtNhílwm=Mnrsmgb*s*sCt
+-gb:ŠfšlGmÈnqsÁtGwGyznGr*sGkšlGnGstGy?b
+lNm­stNw*nNr*s*tGlGnsGtyl6n*sGtbnr*s*t	
+f*k*s*n*sGy
+flGmÈnpGrsGt<w*y*k*sSt*yl÷mn­rs*txÙkGm*s*stGr*sGyn*st
+rn
+kbfklmnprHstwxyGl?n*sGtGykTlGr*s*tÅy	
+x	­lGmInrstwxyqlsbf*nèr*s*tÇwGbGkGnšrst*yGkgn*s*kGn*s	G@GknPrs*t]x*ybsfhGnstèrskTlwmp*s
+-
+-tÐwpwsn*sGl	¡rkNln r*sàt*n*st±k!Dklgn*sGyGf*y
+bºfklCnrstwGx*ylgnns*t*yšlGsGt]nsµtPwšl*m6nµl*s*tšlsGy*n*shtwxGl*n*t­kGlGt
+|l~nèr*sGt
+bkRln*sÇwl*ns*tV@GsbfhklmnprstwxyG@Gkl*n/r*s*tGk*sGt*yklns5tÅyšlwxCmGnsGtµy?r*s­tstGm*s5Ot­h	GklgmnGprGs*tg@gb*l*n*r*s*tGk*nt
+ab
+-fkmn¬r&)stixGyNlCr*tGnrGsGtn*yn*s*t*sIt]kgm*n*sGt	]@Gkl?EnGpGrsGtGkës
+hkšl*nGrsµtNwGxGy]lGmGs­l*n*s*tëm*sGtGnxrNs
+-8Á@*fkGlImn]sµt8Áy]lGsnx
+f-fklwm1ønpGr*stwGyCm*n*s*t*yrGnGtr*sGt]p*sGn!tbmGnwr*sGtp*sG@êkÇlGnGsÅtµxGfâmn*sgtCl*s
+b>NkGlGnþpNrsGtwTxlCtGk*t	kln.r*sGtPw0Px	¡lp*s*tntNwGf*n*stCmr*sAnëtf*s*tGbfhklmnprs-€tw*yŒl*rwfokGtGkâmNhn*s*t*ykGngps=tGlGnGsGtüw*nÇrs5tNk&Žm*ns*tGy*@Nl*s*t
+bwklgmnprsGtw+x¿k]n¶r*s*y*k*mÁsät G@Glr]s»b?1t*kGlGmn*sGt*ks­mnCtt@bfhklmnprstwxy
+bf&ŽhklmGnrstw/rtGn*tl6n*s*y¯mn2sGt*yGsGtbglGn*rs*t*knsÉt*y*lGsntGn*x*p*sÜt*@Gt
++
+l*nr*s3Ät	@f]klGm]p!QsGyršp*k*r7k*yGk]lGmGn?st]xšl6n*s	*klnGpGr*sGtGxGf*yCl*n*sgm*n*sGt@bfhklmnprstwxyšl6nSrs*m*s*t
++Gklím-4nrGs8Žt*x
+4y*k*st*kGn*s*tGy
+blnrstGx6nsGtGwGyGsGxGk*sGyGnGrsykgkGnGp*st*s2tw@bNfhklmnsprstwxGy]lGnrsTt*sµyCt*@GsItGx]k­lCr*sätG@Gf]k)"s*y]lGn*sšlGnqs*tGy*fénGsGtlm
++
+n?p*st?n*yµ@Gn*sGy*n]p*s*tGl*tGk*n*s*y
+bfØkulnCprstw]xGyGk*lNl
+yns@GsCt6k*lTr*s)o@G@šf­hklµm*n*pGrst3yx]yšl	UmnPrsftgnGsixNk*n*s) t
++6b\f­lnrs*txy€n*s*tgnGr*sGklnGp8úrÐs*tGtGy6+sGt
++wbGkšlGmnsAtCxy*BlGs?y	âbfäkmnst*yŒlm*nës*tGy*kGn*s*t*yšl*nGs*tGfCkšlÈnrs*tAn*sGt*y@bfhklmnprstwxystšl6n?s*yG@(tr]s*tNn*t·m*n*stglCmGns¯t*ysbGnGr?h*nÁs!t9
++rsgnÈk
++lGn5
+sGtµysfkwm*nNp*stGnÇr*sGkIn­ršlgnGxGmGn*sGtm*nnt	t	G@]knGp*rsGtysk*sõsfšlns]t*yGk8s*s¯t
+G@:bsf]h?kwmGn6s*t]x
+b*fshGklnprstwgx
++GklGnpyrstsxGyGb€n*s*tr]l=tkõs€l @­h*n*sGtwkÈnPrs*tux*y5ón*s*tCm*n*sAtklgmGn«rsGk­s*kGn*s(tt,@bfhklmnprst*wxyGkGlGn«r*sGxGykl\nGrs]tÑxtwx6r*sns*yGsët¡nèr*s*t:mt
+b6hklmnrsftGyGk*l*nGkGtšlAnGr*s.°t*ygbGn¯sGtšl?nwr*sßtNf]l*np*tt*nÁs*t*sµt*b6kTnsèt*yG@b­lGn*s*n*s*tšlGswtèyGlGtl*n*s*t*yf­l€n
+vrst*yhl]mGnspwr*sbºfühklmngprstwyÈk*ll*nGstwxõn*s*tGnšr*sGy*n2s*t*yGnGpsNwGkšlGn*sAn*s*tGyšlwm6ntGkNn*pšlgnèr*swkwmtG@*s0l*n*sm*ns*t*y]kNnwmGn*sGtGkl*nstGn
+r*k*s*tµyâlsAtwxmn*stixèr*s@bfhklmnâprstwxy	bNhlGnrst*y6n2s
+åyÐn*tn*tük­hIklnÁr*stn*s15n6klCmÈnrs.t!n*sGy!tGhGlún*s?t@bfhGklmnprst7Ïwxyrgk*sGlTrGtlCr"s*sGtCyn¯sG@zh*k­lÇrGsDt"n*sGtGk*nèstAkqswbgl*stGwGlGnGs*t6n*stk*ln*s*tGyÁsït
++bfhGlnpst-YwlGns*t*y*lGt,s*ttGnGrkt
+vrGkGnr	Ul*k*n
++
+r*s
+ÁbfühklÈn/lpstwxGy?l*sÃb*kGlmsnixh*sgtål;¬s*ysfGlGn*stÇwfmGn*s
+bNfIl0mn]rstNw]xyÇb*s*n6r*sGyGn*sgwGffxsflGn*st*k*stgr*sGkGs*sgy
+b<ÓfhklnGrstGw*yllGn
+vnšlÈnsGtNkGnGsGt*y­hšl*nGs*tbn*t	wb/ÝflGnüps*tÇw*ns*t*ytÇrG@bfklmn?pÇrs*twxIy6k?nrs]t*xGyNk?lNrGtNhílwm=?nrsmgb*s*sCt
++gb:fšlGmÈnqsÁtGwGyznGr*sGkšlGnGstGy?b
+vlNm­stNw*nNr*s*tGlGnsGtyl6n*sGtbnr*s*t	f*k*s*n*sGy
+flGmÈnpGrsGt<w*y*k*sSt*yl÷mn­rs*txÐkGm*s*stGr*sGyn*st
+rn
+vkbfklmnprHstwxyGl?n*sGtGykTlGr*s*tÅy	x	­lGmInrstwxyqlsbf*nèr*s*tÇwGbGkGnšrst*yGkgn*s*kGn*s	G@GknPrs*t]x*ybsfhGnstèrskTlwmp*s
++
+tÇwpwsn*sGl	¢rkNlnr*sàt*n*stšk!7klgn*sGyGf*y
+bºfklCnrstwGx*ylgnns*t*yšlGsGt]nsµtPwšl*m6nµl*s*tšlsGy*n*shtwxGl*n*t­kGlGt
+slunèr*sGt
+bkRln*sÇwl*ns*tG@GsbfhklmnprstwxyG@Gkl*n/r*s*tGk*sGt*yklns5wtÅyšlwxCmGnsGtµy?r*s­tstGm*s5Bt­h	GklgmnGprGs*tg@gb*l*n*r*s*tGk*nt
+Xb
++fkmn¬r&
+stixGyNlCr*tGnrGsGtn*yn*s*t*sIt]kgm*n*sGt	]@Gkl?7nGpGrsGtGkës
+hkšl*nGrsµtNwGxGy]lGmGs­l*n*s*tëm*sGtGnorNs
++8Ž@*fkGlImn]sµt8Žy]lGsnx
+f-Yklwm1ënpGr*stwGyCm*n*s*t*yrGnGtr*sGt]p*sGn!tbmGnwr*sGtp*sG@ákÇlGnGsÅtµxGfâmn*sgt:l*s
+b>@kGlGnõpNrsGtwTxlCtGk*t	kln.r*sGtPw0Cx	¢lp*s*tntNwGf*n*stCmr*sAnëtf*s*tGbfhklmnprs-tw*yŒl*rwffkGtGkâmNhn*s*t*ykGngps=xtGlGnGsGtüw*nÇrs5tNk&§m*ns*tGy*@Nl*s*t
+bwklgmnprsGtw"x¿k]n¶r*s*y*k*mÁsät G@Glr]s²b?#t*kGlGmn*sGt*ks­mnCtt@bfhklmnprstwxy
+bf&§hklmGnrstw/rtGn*tl6n*s*y¯mn2sGt*yGsGtbglGn*rs*t*knsÉt*y*lGsntGn*x*p*sÜt*@Gt
+ Nbsfklnr*st]x­l*s mÈns*tPw*yšlgnGt6k*s
+-bsfklÈnèrsGt*yÃlGt6l*s]twx*sTtwxšl6n*sšt!n*s
+@**f6klnr
+stfx*ykšl*snÆrn?sGt*y*kGsÁsät[b€n*st2xšlgn,s	G@šlGm75nGr*s*t7ry*l*nGr
+à@bfGklCmnrstxyTbGln*s"f6nsÁt*y*nGstwb.twxNh*ln*stwxGyëf
+b÷fhkl!DmÈnstwxyGl:n
+lGf­lGnr*s*tGy
+TbfGk~lCmGnrGs&)t
+2x*yŒlgn*sGlGns*tGynësl*svs*y*m*såt*x@bfhklmnprstwxyšl*m6nsGtÅyklÈnNrst*y*ns;tÈnBt*y2t4ïkšm*sGt	f6klÈnr:s*t*yn*s*t*stm*n;otÇn*s
+Gklmnsprstwx*y*kGmnr*s]twx*ksGn*s
+-t»bšl?rGsGmn*s*t*yšlÁsAt¹b÷mnßrst*yGkGnGs'žtGfšlGmGnètGln]twxµsgf*sGp£k*n2s*t*y
+@bf+k(Ýln9pGrs,t|x*y/yr*t,Ûl*n*s*tynÁs€t$>lGkšlGstwxšl6nst*yir
+@NhklGmGnst;xGyrpAksGy*@GnGs*tGy*n*sGt*yšlÈns*tGy	*fl€n]r+Fs*t÷x*yGk*s*y
++bsfklÈnèrsGt*yÃlGt6l*s]twx*sTtwxšl6n*sšt!n*s
+@*
+f6klnrstWx*ykšl*snÆrn?sGt*y*kGsÁsätRb€n*st2xšlgn,s	G@šlGm7(nGr*s*t7ey*l*nGr
+à@bfGklCmnrstxyTbGln*s"f6nsÁt*y*nGstnb.twxNh*ln*stwxGyëf
+b÷fhkl!7mÈnstwxyGl:n
+vlGf­lGnr*s*tGy
+TbfGkulCmGnrGs&
+t
+)x*yŒlgn*sGlGns*tGynësl*svs*y*m*såt*x@bfhklmnprstwxyšl*m6nsGtÅyklÈnNrst*y*ns;tÈn9t*y2t4âkšm*sGt	f6klÈnr9ùs*t*yn*s*t*stm*n;atÇn*s
+Gklmnsprstwx*y*kGmnr*s]twx*ksGn*s
++
+t²bšl?{rGsGmn*s*t*yšlÁsAt°b÷mnßrst*yGkGnGs'«tGfšlGmGnètGln]twxµsgf*sGpk*n2s*t*y
+@bf+k(Ðln9pGrs,tsx*y/lr*t,Îl*n*s*tynÁs€t$1lGkšlGstwxšl6nst*yir
+@NhklGmGnst;xGyrpAksGy*@GnGs*tGy*n*sGt*yšlÈns*tGy	*fl€n]r+9s*t÷x*yGk*s*y
+ bf
+-
+-kšl
+nrs*tGyil
+-k­l¹mnGpst;xµywbšlGsotGxkqn*sGt1øpšlÈn*s]twx
+fNhkl2mÈngpstÐxGy
+ðbk]s*tµylwx*lGp*s	Gf)ngpPrës]twxGyNbfkl|mnprstwxGy:gn&étGxwl*n*sGtGf*kns]tGyšl6nGtylÈnpGstwr*@wl*s	bsfgl€n*s]twxGyGm*nGp*sCt?p*sGyGkGmGr*sGtGn2s	>Nb*f
+-
+-l/Znpr*sGtÈns*t*y	bklÈnpsµt*yGk?ølGbGnGtsGt*yn*sGt
+bfh-fk
+lGmGnpstwNxÅly?n*sÚw?l*sgxl*f*sGpNspNw]krbfhkl
+smnsrstwoxyl€n*sktt*l*nNnGs¡lNnGp*s]twx
+-Nh*klqnrstwxGysètAn*s*twxšlGmÈn*s
+twx.ih*n*s*tGyšln#5stšlgn*sètGn*s*twx šlGnstGyft©kGtÑb!f*n*s*tGkGrz@bfshklmnprstÇw®xybk*rGtstNtNlGr*sGt	sbTlÈnrs]tx*y
+f?n*sßtnl*nèr*s*tHs	¡t*yfkn	wsÁt*y
+©@*nksGy€knêslGn*sk*yTksGy­ls7txGnPr*s*t?l9r­lGnšrþs*tGy	5bºfšlÈnpsty*nNsGn¿rÚf*n*sÇw
+bh*ÒklmnGprs*txylt*n*sGnGr*s¯t*yn*stlHs*y	sbNhGkGl*nwpGsGt*nµs*tGymstµy÷k*l*sGm*n*sGtkšln*sGp*sl*n*sl*swnnèrsGt2xGs*y@bfhklmnprstwxynsGt*yCkGs	Èk)­lm*nr]stGx<×bGkNn!n*s*tG@lmGnr*sCt*n2sètGy*r*lNn*sGfl*mnGsGtÜn*sGttšlgn*sAt
+¹@whklmnrstx*yšl*n>sÁt*yn?x*st*nr*s*twxl*nÁstgwGk*yšlGnrs*tGknGsät*n*stGl*n*sf­l6n]rGsèt*s*tÅyšln2sl*nGsStwxAs*ygfk*ýmns.t*y*nÝstTr]sGtkFynps*tÇw#Yn*tgns*x*y=nGt
+-hk¡lIm€nstxGy?nGt	
+abflns¯tGxGygbGnGtGn*s¯ys6n*swt*sÅt€kGmGnsAtCyCk
+-!klhnTprs*tNwixšlÈn"®s*yµn*lwm*n6pwm*n]sGtÐw>Ñl*npr¯sGtGw]f*sGy
+n*sGy
+-bfkl7fmnst*y*kll*sårlÈnsGt*yèk*ns*t*y­lGsšl*m6n*t
+-blGmnrsÉtwx-€yNlCtCmn*s*t*yGsgt*s
+twxGy
+?b6_fh
+-
+-klmnrs*tÇwGy­ln2s*tGsëtGnGp*s*tlAnqsÁtk*nGp!^s*tGx¯swtGklwmon*stµk*n*s*t6n*s	
+¿fšlwmÀnGrstNw]n*sPwNbClAmn*sÙtkGlGs0
+-t
+õ@bfGhkl!mnp]rstwxyB klNnNsl*mGnr*st6nGt*y*ks§n*s*nGskl*nGr*sG@*stwx*y	?bfGkšlGnF,st*ygr*t*n*stwxGyGs;twxNl*sGtÅfGm
+t
+bfk­lnGp]rst*yGkGlGn­l6n*sÁt?wGfgl*mGnGs*tHtšl6n2s*nÅr*swb*lGn2sG@ G@bf­hklmnprst
+-
+-wx7ryk5
+mGk]lÇr¿kln*s*tÅy6n*sTt*yGswxn,prCs*tAkl2s*yfAk*n*s*tGykšlmnsÁty*strAk(Ýnn	ýsGm*n*s	ÿtwxgsTtkl¬n*str*skrÁf4Øtr*sAkGyG@±fkšlnGstrof¬lGn*s*tG@lCrGtGtygmGklGnstwx Åk#5s*yGm*n?p*s
+-
+-tAf*n*s*tGy
+÷fklGmnpÁrst>wyür*sGt*ys*st?t	
+mGf*kGlGp*s1øtn@­s
+-tfšlÈnyr2sGty	ýrp*ss¯tlmn
+4sTks5t*@?nst*ylÈns*tgk*ybÇhklmnpÁrst
+wGx*yGkGlGkGlGt*k*sGt*y*l
+-
+-n[bšl*nGsGtNlNn]l
+n*slGnstxkGm*sGtgyn@t*sTtGykÃs*twx
+l*n*s*tsfp*sln
+k@kl6Ixr Åp+dnrèfk@bfhklmnprstwxy	NkCl¯mnrstGw,s­tAxGb*k*s*y*n*s¯tþn*s2t
+GbfhklmnrstGxyr*sTnAswk
+©bGkGnGp*sCmGnBs*tGn
+-és]b]lGnPr*s]twx*k*n&)s=MtGxGy6kGn*sßtab{fBln*s]txßnèr*s6hs
+g@kl70mn@¢rst*xy*nLr*s*t*k*n*sµtµyGk
+mlGm*nsGtNw?n*sGbGk*stšlwmÈn*stšlÈnIs*t*y°h?stNw?l*mnGr*sGtPwhlsYt­nwltG@b*fNhklmnprstwxyGk*l*sGt*kGnJCr*sÅtG@@b,nGst*y*sypwkÊn*p*sk*nIsµtPy*m*s*yGk*n*s*tgfÇn*s*tGy
+fkGlNm*n
+p*stPwxlNrn­rGnrsGm*n*tmlNr	klmÈn]r*s*tgyšl­r*s÷t*ygbtGkGmGx*yšl6nGpTsGt@bfshklmnprstw2xyºfÚkšl6nTps*y*kÁln
+-
+-rGtbhklmnpGrstwwx]yIklr*stG@Gtšl*st2t*ywrs*tGf(n*t*nr?sw@*stxhnGsy*s(wif
+nst*fGt*kmGnpr*sb*s
+lG@*k*ft*sët	gb­l*ýmnprsGt,s?tàt#fGmNsGk*n*s*t*yh]kGmGnzsot0àlGkGnsÈtsfGm*n*s
+twxºfülNmGn*sGtG@*n2sÁtGy
+-÷b×fwmnCp*stswCy-yk*stwx*f*n(r*s*tAkGlGmnPr*s
+bGfNkGlÇmnGprsGt]y*k*lCr*kšl*s*nGp*s*tGy±k*síwÎlGnGrs*t?y	]b?f<hGkGnsGtNwwt@bfhklmnprstwxGym*k*l*y]kl?nrsÁtÈnst*y*s?w
+bl­nr*s*tGk6n*s*y*st*st*kÝsÇnGtDël-mnr*s*t*ysÁtšlGn*s*twxGf*nkqnstCxyk*sGyGkøn*s*tGyGn*sTtfCk*tAk,s*y
+NbklGmÈnstGwx&)y	¡lNn*sTbšlGmÈn*s
+twxGk'r*sëtGy
+Ê@b*kl*nPrst÷x*yIkJjyGny? *s	Gbh*kGlGmGns"!t1økßtšl6n
+t
+-fklímGnwp*styrÙk*s*tükwl6nos*fñr*slGn,<rGs1øt]xók
+-
+qfklGmGn(p­r-vsÁt7(k*yGktb*s*nÅp*s?tbfklmnprstswxoylGmšr*sGyNn*sGw*lr*s
+bIfGk<Älm-€nGpDŸrs
+-
+-ty<×bGn*h*n*tp*sÚnêkGlGn*s]n*s*sÈt]kGp
+-BbÇfGk*nr*sGtGxyšlGm*s*yfsk­lGmÈn*st*@?w­lsGyb5fühklmnEÒprstwAx*šy]kGl
+-
+-rgs
+-÷@]flGn]pr*sGt
+xisft*nzs*tßbn*s*tGyG@?sCtÇbšlGst5nkGlÈnGstCsG@üfGn*sNwsfmGnp*stšlÈnsGkwrn*shšl(m6n*sgfGkN~bwmn*s*t»b*s*@wbBfklnprstw?xynrGt*swx(Ýt?h2sGt*yGns*t*y*s	ýtt6mfGnÚsÇbk*sGtx]xØt
+©@k ÃlwmGn­rtßn*sGsgtGl?rØk*sÇ@bfhklmnpGrstwx;yBlrGt*yAk*s5tÆynGtlGn*r*sGt*sgty
+-
+-f7(kGnIp*st*k*nèr*s*t]f*s)$b?f]kGstJjyGnAs*ngx	ÇbDbkÆl
+smn*stGyÇb*st€kÎr	
+©b×fßkšl
+-
+-n*st?wšr*sGy*@*n*sÈtk*lGm*sGyG@bfhklmnprstw]xGyGk^lnr*sGttšlwm*nèr*s*tCk*sítl*sGxGyNlÂn]psGtCbwflÈnCpSsGt*y*@on*s*y»b*f*kn*sGt*yG@gf&ðnGtÇb*nGsµtln*prGstGwNn*sCtGyGkGln*s+FtTblqsètµs-ftGy
+Gfghkl¯mnµprâs;txy­r*s*tkšl*nèr*sÁt*y*nÁsAtk2ÏnsÅtGy
+-lrN7f2sètmGnÙkJÓsl*s*nsfGkwmgr`l*sbfhklmnprstwxyÈkLèl|nrµt&ekGkI]lGn?st*n*s*t÷x*ínt*nr*s2t	GfhCklFnGr*sàtGk]ptr*ls	ÇbGkmnsp2sGt*yGnGp*s*k*n*sGt*lGnpsGtt6r*sixšbšlKnstGxGm*s
+tgmgrTsGtNlGnrIsGt*f?skGm3ånstGyèm
+ÆnkGnstGx
+yostr*skÚtk*sgyÁs
+-üfklwmÈnpstgxGf6nÏr*sp*ysxp	TrGkGlnr*sGk(Ýn	*fGkšl6nGpšr*sGx	*fµkGlgmn]r*sGt]kGt*lGp	Tr*sGt*n*st
+G@*fGkGlwmGnGr*sÈt*xÙy
+ÇbEÒh
+-
+-k­lGmn-fpÁrBs]tGwGx*nCs*t
+-bfkmnp
+rstrÕt.ãnåhnr€ksNmskTpn*sÇbkl*n	¡r*s­trfZk*s
+@bfklmnprstx%lGm­sftyrªtlk*sßtlnystlsk*lt
+¿mGbl	tmrstyks
+-
+-m
+-
+-mèstTk*s*k*m*s*tñkNkGt@*kgstrèp€kG
+slGnGxk
+mnst,Ûff*sÆl@Tt*x÷fln6plr*kstf6nètÃkÇmnr5Oswxf*s*tµynt
+-
+-rínGptrksl*s+dtsgmGl*nr*s
+@Nbfklm<npstxTmSr
+blGn*kTr*swb.Æn
+rsGtylws*s*tgxk­ykšl*nstGyrAk
+sktx|n%Ír*s
+n)$lËnfGn(5tGBlGr*n*s*tynmßklmGnr*kGt
+s@bfhklmnprstwxy
+-klmþnrstGwyšlwn*s€kGns­sèt*k*lNn*sGn*sGtCyÇbwmsGk*lr*sGl]swl*s GbÃfhklGmngprstw{xypNlyLt­lwm*nGs*tknGrstwx­r:s:@sAt6n/tÇk*n*r*s*tyÇk
+-fkšl*npqstwxsygrIlGlAm*n1r*s*tÇw
+-GklG
+mnGrGsGtGxGy*s­tšlGmGn*sO«tGlGn
+rs*tgw*m*n*sGt?
+bshGn*s5OxG@b6hkl70mnNprst]wxyGk*lGklGnGpþsGtgft*xsgk*xNkšlnrsÁtGyšl*nrGsAt*n*s*t*šy
+-b-ff-€k­lmn€stixntGs]t*nèr*sGx
+-bGkIl@inGp*sGtgxGykn2sÅtr?pGn*s€t
+-sbšlGm(nGr2sëtgxGyGnskÃsl*sbGfklCmn]prs;¿twxyrtbfn*s*txGfGh*sGtGlGn*sGtks-€tgbGnÇbGnn*s*tx­sAt
+x2fGn*s£r*sNfGnÅtGbGmG@bfhklmnprstwxyÈk>ÕlGnGr¯sIty@Il Ån*sCtTrwTl*tGlàm*p*s6tNkwlPRnGr*sGt
+bGkl
+sm/Znrst!öxBy6k*l*sštGm*y*sètGy*nèr*s*t	GbGl*mnÅp]r*sGt*stls
+@­hGkšlCmGn*pstx)y
+bbGlàn*sGyb€fëkšl*n*sèt*s4Üt
+-"b0f6kGln,sGtGxy*sGtswp*s
+Gk	kln*r*stPwy*ýmr*s*sPwàf*ysf*nGsGtnGpG,r*s]tGykGlGs*fTlnrIsýtxGstGsGyšlGnEÒlGrItGmGnGp*sÚt*ylm*n*sëtTn*stÚh@bfhklmnprstwxybGns*t6xb)$lgm70pmr
+&Žf6hklÈnrIstGxyglGs*kšlnrsÁt*y*s+CtGm*sGtgxG@GkGm*n*s-Ãt"RxGn:r¯s
+hkl*mnrsâtNxy1BnGlGswxGfn*sGtGw*y(kGsGt*kmGns]t*s:ÌtGm*n*s
+twxNn?s*tGywk*stÈnàn]lGnGrHótG@fklmnCprstwx/MyGl*nb,stwx*ylgnyt*fAn*sët*ygbGknGp*sGxn÷x*kstGysp*k*r*sfGmësGy*ksGy*fgkGn7fp*sµtGysbf*kšl*n*sëtšl#5sètGk*s*xšlÈnGpGn2st*y
+G@bUµfkšlnprstx
+ybGklGn]r*sÅtGn]st*kÇrkšl*nsâtCxGy*n*sGtGy*n]s¯t*yGnN%s*tšlÈns*t*yAk¡l*nr!s*tGyGk*swxGlGnbfåhklmGnGprstNwxGyllTrNl*sl€nrIs*ty*nAs*t*ygf*k6ns*yGm*sGtGy^s:ÌtGkytgw*yfwm€n*sGtwxGy	]k+lÀmGnWrs*t*wætgfšl(n*p*s*tGy
+-bk*lGnArst*wGyl]tl*s
+ðb*n*sGtmGnG,r
+-
+-n
+-€bfkGlmnGpstwxµyk*s*tÅywxl*sNn$
+tÚb6hšlGnGstGnsšlGn*s=twxGnGr*s*tGy	T@bf±hklmnprstw*x;Ùy*klGt	
+wCwbkGlgrsµtÅy
+Gtwxlnr*s*@Nsšt*ys*tÜs*n?p*skGl"®s*ykNsGy?@µk]n*sGtgf*nsGt>ék*n*p*sGtGm*n*s*tGyGm2s5tèmnrs*tGy5b*n*s*tf*lGmGn*t
+b?ky@CkGrÈtbfhklAmnprstwxGyGklEÒrNs|tbNl-fn
+ctCxGlGp?tk*n*s*tgk
+-énsGt*yšlgn*twxšlGnNrsGtGy­lgn*s*túl­l€nGsGt*ykmÈnsCtw*y=pG@sš@Afr*sGtGlGtwylgn*sit*y	*@GkGm+nPrsGtylnÃrs]twx
+kls
+wb?fk
+lGmn6psrstSÈw*xwkGlGsšl*stwb*sGnr*sEVtlA&nGt	Tbmsnesst¯@bfhklmnprstwxµyGklGmnrstn*s¯tCyb*n*stxr*sGkl*y5kGn*s*t2mtwxb*f*s*t,Ûl2fnGr*s*tlst*yk*tÙk*n*s*tGybAn*s*tl6n	¡t*ym	GklnGprGsGt*yšl*stAk­s=k*sGy
+GhkGlnF<p*rs7twx*yâmGsNbGlr*s-Ãtwx
+­fklGmGnp­rstwCxGy¹bNn*sûtx*n*sÁt*yl)­s
+smnr*s
+t<sTb€twx
+-TbAfCmnrstwxGyGkšl*sGtn*s*tGy*sx*m*n*s*t=Ml
+b
+÷fkl
+-émnrstx*ylsgtNpµnCr*stwxšlÈns*t	bkmnstwx¯ys&étwxšlnsÁtnt*nr*s*twxgn*sšt*yšlnGs€tšlGtBÿf2nrÁtšl*s*yb*fšlÈns*t¿kÏlnstµyÑb*n*sGtGwixb*stwxbGm*n*s*tþbhm*nstxns]twxþbÉf;s
+ðbAfGn*sAt!f*sGfGnGr*stxšlGn*sÅt	æblm
+nr*stxtnt-·l*n*s*tGlqsGt2f*sn*s*sât
+Gf*kwm|nr*stÐw*xGylGr*sixgn?s*yGlmnr*stGy=n*sNw*sýtwxGysb*lGn*s
+bÈk­lmGnrëstÐwwxGynkGp*swxGyf*n*s*tGyšlštNflín*shtgnvs*yC@bfhklmnprstwxyGklrGs
+twxgys*yGm*n*sþtwxibGk*sGt
+b-Úfklmnrstxyl*n*s*tlànšrsýtxšl*n*sÁtnl*nèrs*t	]fknsätGwwx*y¿r*stwx*f*lAn*s*tëfqn*s*tTblqnHstxšlgnšr*sGybCm¡nstxën*s*tsk*n*sAtnl*sG
+sèt*y
+©bGlnGr2st]st*n*s*tx
+nTŠbkšl
+Rn¯sëtxn
+-%l*sñbnrGs*twxšlgnGs€tþxèsýtwxn*s­l*n,sbn*s*tosbGm
+-étbfklmnprstGwxy
+-
+-nÐsšlÈnGr*sÁtlstwx*fšlGn
+Ír*s*tGfmnøs]twx*yNnúr*k*sGt*b/utkql*nGst*stwxf*mGr*s*tšl*s6t	Tls	bGfknstxGy*s]tx±n*nÁs€txšlwmGn@-p*s*tÐwlÈn*s*tGytwx*y	Çb*f*hGkGn*stwx*f*n)r*sÓt	bfk*mn]r*s!tšl*sètGsätwxngls0kÈnpVÙsÁtíwGygyb*kGlGnGr*stGkGlrÙk*y	!Db­hkšlÈn*r	wst%ïl*n­r*s*tnGr*sGtwxµy
+-ßhklCnsJtPwxGyšlgn*sGxgnpsètix*ygpbGm*n*sGtwxl*sšt*yšl6nètn*s@bfklmnprstÐwxµygsËtGkÁrstn¿x
+'b
+-
+-ln*stxès!fèr,snBslnr*sCttCm*nGs!tþxpýtwx
+bGf[mn-WpGstÐwxGyšl*n*sGt*fšlnšr*sýtwx	¡sGtGnGp	G@sb€np0r*stwxtwx€f*fšl*n*s*t	bsfknGpstuxn*sAsètGst­lsGt*st7fršlnr*s*tšlyr*sAkýtwxkrwstx2s6t*nÁstxTr*sn*fll*s6nAsGyšl6nst
+nèr*s*t
+b*klØmnpr]stGx=lGkwx*nÁstCxln*s*tsp*sbkn*s2twxt
+.x
+©bf*n*s*tšl6nÈs*n*s€tšlDn7txn"ûl*sn*pl­r*sbfhklmnprstwxylrgy+n*sšt*ygkGnGyb¿k]lGs]tÅyþn*sYtlGn
+rstwxGyk]m*s÷t*ygwšl6nt%ïl*s
+abfÈn6r*s*tGyšlèt
+bfNlmn'žps.tw*y&)rÇlPr*sQXnG@±fGsšl*mhtGkwmèlnpsbGmnAstwxlrttwx!f*n*s*t
+Ænr6n*s*yb2sGrAsGy
+bkl
+smn*pArstüx.s©t	bykšlGmGn*sGtwxšlCm*n*s2tGylnr]sGtptss€k
+bfklnprstwxyNn*stwxAf*nZâr*s*t¿klnÁs
+ctxÅy*sx=n*n5Os*twx
+-%lCmstwx4Ømb*fl*n*s*t-b*n*sGtfšrstlxänknèsúklt	ýk(ün:swxšl6n*sètgw*yptÇn
+twxAfAn*s*t*ykšl]Šm6ns*n*stwx*n
+Sr*s*tt	?nwm*nswwm*t	Üfknèpstwxyn*n÷tµkGs;t/Õxb*knTr*s*tk
+lAfšlÈnr 2stGy)rëfGr*sn]tCl*tn]²lGns*tf*nGpsTùtGlQün*r*sGt	bglCmnGpGsGtGx	Tk*skNmInhsGtGkml]tw@bfNhklnüprstxylGtgn?sèt*yl*s*tGkCsÃmn!r*stwx­y*šsÉtGfk*nšr*s*t	KhFíkšl*nGst]x*y9Xr*s	
+fCklInstwxygn*sÁt*y]nÉsÉfšl*nHs*t
+-élklmÈn3ÑstGyGlGmGn*s*ngr]st*yG@GnAfÈnwr*s
+ÔtGy
+?@EÒbfGkln]r]sÁtwxGy*s.twxGn,ws]twx*y*nKs*t]n2sTŠb"k*nrs
+ct@bfhklmnprstwxyGl*s?t
+-<zklGmÈnsprs!t*y*kgn*sÁt*y*ntwxAf*nšr*s*t6t
+G@
+Íklmn*rst]xyk(ns*t*ysGyGn*s:Ìtšl*n=s*tšlàn*sCtGkšlÈnsýtxGy&împ*tÐwp	
+sGmNnEïbfÇklgmnprstßwxGygkGn*sGmGns*t*yGkGs&)tGmn2sGyšl6nsp*s*tb!f­lÈnrs*t*ns*tGtgxn*sGkl*s
+g kmnèrsthwwxCyngbšlGnGs*tšl2mn6p*t*nGs€fGn*r*sÅtyÚf*s
+G@bwflnpërstwwx
+-
+-yl*n*rs*t*y(ns*t*yÅk ¿n]sGt*yklGsstkqsèt*yTlÈnIsGt*yšbGfwm]n*s*tk*nr*s*t~lGm*s*yµlž@bfhklmnÈprstwExLcyGklþnÊrgxl-fnGt*sGtGyGnGs
+hÈk?
+lÈnGprsGtLx*y
+Zs	*kšln
+rsýtwx*y|y]l?n*sgt*kšlGsGm*sGy	÷bsfyk7ül*s<LtNwGybfÇhklmnpGrsÁt<wxµyKr@*l*sšlPr*srGtyskësw*yk§nsGy
+-él€@¶nsGfskšl*nGsGtglCr*skšl&îmGntswgprn*sGyl?sGt>ÍtNlGtGx	fklH¶nIstAx*yGnNr/Zn*s*t*y
+abAfwkšlÈns*t*nHs*t#t bfklmnprstwwxIyGkGlCmgnr*sGy*k*nµt
+-bklGmGnGr*stÅyCsgxgf6n?sGt*ylÆs]k
+nrs]txGyn]smn*n*s*tgx?kGmqnsGt*yšlÈnGr?sšl*nGs]tby	blnrIs*tGx*yšlgnGst@in*s*t*ftNknGs*tTxf*sµtGy4+r*s
+sbfklsmÈnrBs*tCylGr*s€nxGkgns*ygmgsGk
+-wlNn*sGt
+-Úbfklnrst=xGy¿k¹l6n*sÁtÆy#íl€nrGsItnt(fímpxxrlitLckÈnLsÁt*y*fkšl*n&)sGt!DxGk
+-l]n*s*tf
+]ks*tlttkÀkylGmn*s*t	¡l|bGn2sGt'wGy*@blAn*s*t*sÇw
+-blGmnpst]x*yn*s*yStšlsGm*sGtr*sGn*s*t*y
+b)­fkClm1ønpGrstÐw*xèb:lGkmÇnGtn*sàttklnhsšlr$ŒfGmkÙkNsGyl*sy sTt@ktl*sGtwykGnqsGt*lÈrG@bfhklmnprstwxyGkD	l]ŠmGnèr*sGy¿kšlGn¯s*tµyGl)$t	hwkl*ýmnGrGs]tMÎs*nGs@tGyNbÈnGp*s 2t¯yklnpGstwyl Ån£k*sl't€k Ãl*swx
+-G@GfkšlGm*nGstGyn*s*k,Ûs	TfNhšlgnGprhsGyAkâsGy	GlÏmnr*sßtGx*yšlàsGf*s
+w-ffTlÈnHs*t*yGkšlgnTst)$wy*kànÅpèr*s*tnx	
+r*@fklmn-·prstGwxCy-bkšlGns*tÅytwxÜfšrInls]twx7twx*y*kgmÈnGrsIt*y±b6h*n
+Srs]tšlGnsGtAf*s]kGlnNp*stwx0m*st0rsKtgm*nGsGtGm*sÁt*l&ðnšr*s*tGybnlšr*sGkèr*sPyn*psÑb€nGr*s*tlAfbbwkn*sG@
+©keŽx@bfhklmnprstwxyGb*s]kl$r*sGtGy*k	¡t
+à@*f¿klnrs*tGxÅyGk*sµyw@Gl*s*nAsGtGyEïklmgpGsItr
+blmGnGprstx-fy*f]m*n*s*tysm*k*l*sgbTÜnÊfkGmqs]xµy*sLt­r*s
+wbfk[mnpÁrsty*lGxGf-€nGrs*tGyÇbGmGsGtÁsÇt6n*s*t­r*sGyGns
+-t
+G@*bkClGmnwrstxyl*nFst*r*sÇbßf
+skqlmGnop­rstNwx*yG@*tGkšlwm*n*sGtwx	*fGk­lGn
+¿pr*s*tšlGnGp6klnrsGt*x'm*s]ttn	¡sGtNn±p*s
+fGhklGmnpstx]y*lGmÇn75n*st*ysrk­lGm*sGtÓl*sltk*n*sGt*yGk*s]twx*l*sAtgxGl*n6p*sGtwxkGr*sTk*s
+ybklCmn p	¡rstüw­x]yGlGn*sFbk*s*y*nGpGsGtGf?lGnr*s*t=fkšlm>Ñn*s*tgm*sGnpGkLclGmGnGsGtlgmÈnGp­rG
+sGtwm>Ít*y
+l*nstÇb
+NbLfklnrst+Cxy*sstGwok*nèrhsGtG@k*nGrGst6±yGkgxbl*sGnwyAn*p*s*t&)k*l*s)|lGnGsGynG@*s*tbf
+hGklmnprs]twGyGk*lâm*s*n6r*sGtGn*sgt*yTknGrs@t	Gf*kGlGnšrGsGt÷w	¡n*sGtAn*s*tGkGnGt
+b]f8Áklmnprs>ÕtwGx*når*s*tgxGlGn*sGtwykn*p*swhBrsGxGm­p	ÿtG@k*sgtl*tk5ksGy*nGrs*tGm*sGtµyfkms]twxKl]Šmys
+sS£kŒkwtšl6nšr*s*ttn÷p@bfhklmnprstwxyklGmDGnrstAkJ
+r*sGyk*syt*ykGy)nGp*sGt*yf2m*s*t
+r*l2t
+@fGklmnrst*wxyr6~m*bšl
+-
+-nrAsÁt*y-fbGn*sGmGnsår*s
+-sfklGmnrstxnAsýtwx6nvsèt*yšl*st.n
+ên*sGyšl6nAsètšlGnërs*tnÐsgfGkàtšlmn'r*sGy]sGy*lëstfGnEsGnrs:n@bfihklmnprstwxynrGsM5t@atl*sgÏt6nÁt*ygm*sÁygfLr*s]th)­knGrs]t*ytr*s2tGkGsGtwkGršlGnstíw70t*@Pr*sGl.r
+©tNf]k*n*s'Et*x*šyCfGkpstGkÇlTrsy
+
+jfFíkšlmÈn(rHs]twwxGyGfGnGtGkNsGt*OlÈns*tnGrGs6tÅkbfhklmnßprstwx]yGklr*ywk6nèt*y2s]twx¿k?lGn*s*tÅyNsIt9lGm*s*tNhGkInsÁt*yGm*n*stwx*kGr*s*@GkA&n*stwx€fšr	@bk*m*nGp­rGstlGs*yKr*s%@wlGmH`nGs[RtGx
+fklmnCprstygxklGn*s1:r*stwx*y€f*nGr*s*tC@1Bb*sÇbGswt§n2s]twxGy!fk*nGp]Šr*sGy
+bGf*klmGn+¶rs.txiyGn
+-estwxšl*n]s*t'k*n*s*twxGk2mGn*sGtGmn*s
+-G@S>bßfTknps\DtykGsGt*nGwGpGtwx?hEÒklGn*stf
+*@bfklnp
+-
+-rstGy	*@Mk	¡lwmnrs:tÁsAt*yGns*tNywk]twwlGnGsb*s]t*yrnxÈnèrstwx*yšl"n*sÁtÑb*n*s*twx
+-b<lnGpGrs
+-ítBÝx*yÇl*nšrGs*tGmGnèr¯t	
+'b?fulGnGr*s!twx@<b Gf&ŽhklmnGprstNwxy2n@bfhGklGm@inprstwxyšlÀnsgw*y*lTr*sGtGl?sÁtGxgnGtG@f?kns*y*sGt÷xÅt]_l*s7¬nAs*x4«f*st?wnNr*sët*sgt*Ol*m6nr;ÍstnTn*snsItftAn*šr*s*tbwyGmÈns*ynGwNrs€tGm*s*tGy€nsÁt*y
+©b*n*s*tgx
+-±f*hlm=ïnÂstwxGyšlÈn*s€k*l*n*s
+
+-
+-bfhQklmnrs*twQšy]lgm*slGmCtGb?kgn*sÁt*y]k*nGsGn*stixyrNmGnGsGt/MyÚbklwm*stGyGpµtGn­rGrGtwknp­r*s,t*kGnGtNbfGklwmGnprstww?x*yEÒr*kNnGstsf*sfÁsCtwxgfkGn*st0àxy*ým*s6twx]k*n2tn*k*xGkGnGpèrsgk*s	gklGmnIstµxy*n*s*twyšlsOtwxsfGm*sšlÈnGs*tixNlnGsk*s­lGstgm*sgtC@bfüh7klmnprstAwgxyG@Gk*l)nGl2s*f*sGtGygn*rIk*ns€txGyb*n*sGt2sGt*núr*s*t)|l*sýt*wwxÚf­l6n
+-t	Ñflb7nrsÁtgw*y2s*yglGnës*t	
+b*n*sbfhklmnprst<wxyÈkkl
+rGk
+Ìn*rIsGlGnGt	k
+smnrs]twxGy*n2s*tšl6n*sGt>Ñns¯t*yI@GlGnGs
+thšlGmnbœs€tGyÁsGtGnr*s*fGs
+-GblGmGn)|rÁstwxGy mÈns*t*yGm*sTtgxšlgnGr*swmGn1Bp*sCtÇwGlGmGnšr*stn*slrGn*yšlgnGp*s<bwfl*sixGf*k
+-^bklmnrsGtÝxgl]s*swyGn?sgxÇhåkEsGt*n*tGy	±fGkln*prIst*n*yGfÚlGnGs*t*n2s*työm*shÓn*s*t
+NbGfklmnGprstwGxgkpGrGs­tGpHsètGyfGn*sGmshtNyÈk­lGstxÃhGlGnGs*xGyÇbGn*s*tNb*ÒkGns*t2s*tGlGm
+-
+-nsLt
+lGn*sll*s@bfhklmnprstwxybfNhgklmn6prstwy]lGtµkBlGnB nësGt*yft{tkwxgkGlGnGs5
+fßn*sÐtGlßn*tºkl(mGnHskTkÐsGy*litGxlGrGn*s?t
+-wbDbklGngpÇrs
+-ít?yGnsÁt
+#ëbfklm©n*prsGtCynÇmn*s}k*nës*tGwGyGkn*s*t]k*sGm*stf
+b÷fkGlmn*pr*styhÁn*s*st)n*s*kgtbfGkGnx*s÷tsbGm*sng
+-@bfhklmnprstwxCyG@Gk
+ÔlZØr*sGtNyl]n¯sbÂtNn*sGtGlGm6tCf­l*nr*s*twwG@Gk*s
+
+@whGkwlX.mn.npCrsGt)­x*ywh*k*s±fGkGnGtwhGkwl*s7¯t
+-:bfGklmn;¿st)­x¿ks*tÅy!kqsšt*ym*sGt3Lsèt
+-hk*lNmGnwrstGxytrtynmšlhs
+©b÷fGm*n*s*twx*sÒyNnþs@bfhklmnpstwxGy*s)ylr!^sÇtkw	¡rbÈklµn?rsGx]mGtytrtÒy*lmnrs]tNpÇm,sfGm*sštGy
+mfkgn*sGt*yR
+tGk
+-pln*p*stkr*s*s
+t*klsGtCxygsTtt	?rrGtkD\s$>rNfkmÚpsÚtNnpèrGtksGykXClnTmpŸk*f*mn	¡r*sGtys>tpÀn*s
+cfGtmGnGp­rJÓs
+bfg­klm]n*pd¬stb w;Ùy	¡r*sl€m&ðnqsGn*sšt*yAkr*sGylÁsGtG@
+absknlHmn.npÁrIs*tswGx*yl*s *sGtS©rimGtNfšlÈnGt@bfshklmnprstwxyGn*p*swxÈkclGnÁr*skl$ mnsGt¯yGtwx§n2stNm*sk*s)$x
+*@lAmn&)rstNwÇx*yšlGmôr*swxšl!nGstn*sGyM5tGp*s*tGyÁns*t*st*ybGlGn
+÷pgr2¬stmšb
+G@±fGkâl1*mGnrstxGyªn*s*t%ýxGyGkÇp*swx¿rGslGn*sGk*sGywm<nrNsGt0àkTn)p6k*lGstwxGy*f*n*s*tGyO«knÉst*stGn­r*s*twxñ@ bfklmnprstSwxGyÚklAmnrsÐt*m?n*tk*sxnl*t2s*tt*tGylmpGrs*twxgmn?r*st*yr96rpnGtt*fCm*s*t@_f96nt*yrlÐs*y
+kln*sßt
+÷n?rsC
+t*kšlsm*nÁs!txln*@l?ngprtbkôsGtgxÅyNn]s^3twxkD\srBmšlm*nVÙstx*y*sËtšlCmÈn*s*tl6n*sty*l*y*k­rRlmGnTrstnx
+'nwk)
+-p
+2n*ssnGkGlGnsµtkšlwmÈn*sGtGybk­lmn*sGkk«t!Dt?@*k
+G@bfk|lngprstµykl*nrGs*tixÀmGn*styÇpIn*t¿k*sGtÅy*nr*s*t.fGm*sGystGkGmšlGmœr2sþbl*mnqs*ty]s*y*s,tgl*s€kgnGs@bfhklmnprstwxyTl
+4sGkTlGm6rGs
+-S©@kl
+nrsGt*wÅytr
+©bGn*s*tGk6nsât*y
+abGmGn*sGt§nN%tGlGmnTr*sCt*st]l*s
+bwklmnrstxSyl*sgn	¡tGkšln,st*y*kGlGn*s*r*s_µwNnpBÝsGyGnGsGt]fGk­l]m*ns*tGk*s-€tÇn÷pNr
+yGnGpGt=@@¢knsotGy4ñl*nGsGt
+-5@7klGmn
+rs]twxk
+4sšt*yk*st/l*n*s*t*n*sGtwxwyºfkmml?rstsh€l*sGn*sgtlGrßsGtGw
+©bGnstwxGy*n*s
+twxb)­f*nšr*s*tGf*hl*nHsÁtGwkqs*y
+K
+fklmnprstG,wGxyGlg
+-nGppcr*sGtGyl*sGtqlwr/b*swxbkGnrªs*kl]mqn!×s]twxGyÁs*ylb*kGlg@bfklmn-€prstÇwGykGlEÒn*r*swtçlŒlGt&)l5mmÄns*tp^n	Lb&)fGn6psÁtx*yšlÈnGtGn]s÷t
+-
+©bkšlmÈnrsDbtGyšlµrbšl6n*s­t
+bgfGk­lGnGp#5s*tNx*y	GkGl*mGnrësÁtwx?kšlGn	¡r*s*tgkEÒlGt
+-?f-WhÙkšlnrsGtGybGk*nGs*tmGn*s*sþtGmGn
+t*n*p*s*t
+*@b*f*klÇmGnsGt*x*yi@kÐs*yÃrNn*t¯@bGßfÈhklmnprstwxyG@Gln*r*sgt*stšlytblÀmGn*s*tGxôl*sësGtnsÁtCy*n*s=twxbTfGkNn*sGk*l*s{t	*bhAk*nGrl»s]twx(pGkGlGrn*s*tybGk­lÈn*sCtwx
+-G@k­l*mnrGs*tGyrès(Ýt*lGn*sGmIÀsG@*n*tGn*sQüybklAmGn6rsG@Gl*rGnCr*swbn*swyf*s@bfklmnprstwxy*f]t9hk÷kôlGnr*s"n*sl6n]rI
+stGn*sGt*yGnGr*s*t
+fklmn]_prstynGtGyšlCm*n*s*t	bkšln
+rs?±t*yklsGyGkšlgn*sètf¿k*tgywlnpsGykItgxr hfstwxC
+k]f¿p*str¿k*n*s*t"k*n*s*t*fGkn*s]tÅyyk*nµt	bkGlÈnèr*sëtwxCmAnn5*sGy
+Ç@sbwhkdŠlGmnèrstÅyn*sCm*n*s!sGy€n*s
++
+kšl
+nrs*tGyil
++k­l°mnGpst;xµywbšlGsftGxkhn*sGt1ëpšlÈn*s]twx
+fNhkl2mÈngpstÇxGy
+çbk]s*tµylwx*lGp*s	Gf)ngpPrës]twxGyNbfklsmnprstwxGy:Yn&ÜtGxwl*n*sGtGf*k
+ns]tGyšl6nGtylÈnpGstwr*@wl*s	bsfgl€n*s]twxGyGm*nGp*sCt?p*sGyGkGmGr*sGtGn2s	>@b*f
++
+l/Mnpr*sGtÈns*t*y	bklÈnpsµt*yGk?êlGbGnGtsGt*yn*sGt
+bfh-Yk
+vlGmGnpstwNxÅly?n*sÚw0l*sgxl*f*sGpNspNw]krbfhkl
+dmnsrstwfxyl€n*s\tt*l*nNnGslNnGp*s]twx
++Nh*klhnrstwxGysètAn*s*twxšlGmÈn*s
+twx.\h*n*s*tGyšln#(stšlgn*sètGn*s*twx šlGnstGyft©kGtÑb!f*n*s*tGkGrz@bfshklmnprstÇw¥xybk*rGtstNtNlGr*sGt	sbTlÈnrs]tx*y
+f?n*sßtnl*nèr*s*tHs	¢t*yfkn	xsÁt*y
+ @*nksGy€knáslGn*sk*yTksGy­ls7txGnPr*s*t?l8úr­lGnšrõs*tGy	5rbºfšlÈnpsty*nNsGn¿rÚf*n*sÇw
+bh*ÅklmnGprs*txylt*n*sGnGr*s¯t*yn*stlHs*y	sbNhGkGl*nwpGsGt*nµs*tGymstµy÷k*l*sGm*n*sGtkšln*sGp*sl*n*s	l*snèrsGt2xGs*y@bfhklmnprstwxynsGt*yCkGs	Èk) lm*nr]stGx<ÉbGkNn!n*s*tG@lmGnr*sCt*n2sètGy*r*lNn*sGfl*mnGsGtÜn*sGttšlgn*sAt
+°@whklmnrstx*yšl*n>sÁt*yn?x*st*nr*s*twxl*nÁstgwGk*yšlGnrs*tGknGsät*n*stGl*n*sf­l6n]rGsèt*s*tÅyšln2sl*nGsStwxAs*ygfk*ðmns.t*y*nÔstTr]sGtkFknps*tÇw#Ln*tgns*x*y=xnGt
++hklIm€nstxGy?nGt	
+Xbflns¯tGxGygbGnGtGn*s¯ys6n*swt*sÅt€kGmGnsAtCyCk
++!klhnTprs*tNwixšlÈn"¡s*yµn*lwm*n6pwm*n]sGtÇw>Ãl*npr¯sGtGw]f*sGy
+n*sGy
++bfkl7Ymnst*y*kll*sårlÈnsGt*yèk*ns*t*y­lGsšl*m6n*t
++blGmnrsÉtwx-yNlCtCmn*s*t*yGsgt*s
+twxGy
+?b6Rfh
++
+klmnrs*tÇwGy­ln2s*tGsëtGnGp*s*tlAnqsÁtk*nGp!Qs*tGx¯swtGklwmfn*stµk*n*s*t6n*s	
+¶fšlwm·nGrstNw]n*sPwNbClAumn*sÐtkGlGs/ýt
+ì@bfGhkl!mnp]rstwxyBklNnNsl*mGnr*st6nGt*y*ks§n*s*nGskl*nGr*sG@*stwx*y	?bfGkšlGnF
+st*ygr*t*n*sûtwxGyGs;twxNl*sGtÅfGm
+t
+bfk­lnGp]rst*yGkGlGn­l6n*sÁt?wGfgl*mGnGs*tGÿtšl6n2s*nÅr*swb*lGn2sG@ G@bf­hklmnprst
++
+wx7eyk5mGk]lÇr¿kln*s*tÅy6n*sTt*yGswxn#prCs*tAkl2s*yfAk*n*s*tGykšlmnsÁty*strAk(Ðnn	þsGm*n*s
++twxgsTtkl£n*str*skrÁf4Ëtr*sAkGyG@šfkšlnGstrff¬lGn*s*tG@lCrGtGtygmGklGnstwx žk#(s*yGm*n?p*s
++
+tAf*n*s*tGy
+÷fklGmnpÁrst>wyür*sGt*ys*st?t	mGf*kGlGp*s1ëtn@­s
++
+tfšlÈnyr2sGty	þrp*ss¯tlmn
++sTks5rt*@?nst*ylÈns*tgk*ybÇhklmnpÁrst
+vwGx*yGkGlGkGlGt*k*sGt*y*l
++
+nRbšl*nGsGtNlNn]l
+n*slGnstxkGm*sGtgyn@t*sTtGykÃs*twxøl*n*s*tsfp*sln
+yk@kl6<xr žp+Wnrèfþk@bfhklmnprstwxy	NkCl¯mnrstGw,s­tAxGb*k*s*y*n*s¯tõn*s2t
+GbfhklmnrstGxyr*sTnAswk
+ bGkGnGp*sCmGnBs*tGn
++às]b]lGnPr*s]twx*k*n&
+s=?tGxGy6kGn*sßtXbrfB
+ln*s]txßnèr*s6hs
+g@kl7#mn@rst*xy*nLr*s*t*k*n*sµtµyGk
+^lGm*nsGtNw?n*sGbGk*stšlwmÈn*stšlÈnIs*t*y§h?stNw?l*mnGr*sGtPwhlsYt­nwltG@b*fNhklmnprstwxyGk*l*sGt*kGnJ3r*sÅtG@@b,nGst*y*sypnkÊn*p*sk*nIsµtPy*m*s*yGk*n*s*tgfÇn*s*tGy
+fkGlNm*n
+p*stPwxlNrn­rGnrsGm*n*tmlNr	klmÈn]r*s*tgyšl­r*s÷t*ygbtGkGmGx*yšl6nGpTsGt@bfshklmnprstw2xyºfÚkšl6nTps*y*kÁln
++
+rGtbhklmnpGrstwwxTyIklr*stG@Gtšl*st2t*ywrs*tGf(rn*t*nr?sw@*stxhnGsy*s(twifnst*fGt*kmGnpr*sb*s
+lG@*k*ft*sët	gb­l*ðmnprsGt,s?tàt"÷fGmNsGk*n*s*t*yh]kGmGnqsft0ÓlGkGnsÈtsfGm*n*s
+twxºfülNmGn*sGtG@*n2sÁtGy
++÷bÎfwmnCp*stswCy-lk*stwx*f*n(r*s*tAkGlGmnPr*s
+bGfNkGlÇmnGprsGt]y*k*lCr*kšl*s*nGp*s*tGyšk*síwÅlGnGrs*t?y	Tb?f<hGkGnsGtNwwt@bfhklmnprstwxGym*k*l*y]kl?nrsÁtÈnst*y*s?w
+bl­nr*s*tGk6n*s*y*st*st*kÔsÇnGtDÝl-mnr*s*t*ysÁtšlGn*s*twxGf*nkhnstCxyk*sGyGkïn*s*tGyGn*sTtfCk*tAk,s*y
+NbklGmÈnstGwx&
+y	¢lNn*sTbšlGmÈn*s
+twxGk'r*sëtGy
+Ê@b*kl*nPrst÷x*yIkJZyGny? *s	Gbh*kGlGmGns"t1ëkßtšl6n
+t
++fklímGnwp*styrÐk*s*tükwl6nos*fèr*slGn,/rGs1ët]xäk
++
+hfklGmGn(p­r-isÁt7k*yGktb*s*nÅp*s?tbfklmnprstswxfylGmšr*sGyNn*sGw*lr*s
+bIfGk<¶lm-nGpD°rs
++
+ty<ÉbGn*h*n*tp*sÚnákGlGn*s]n*s*sÈt]kGp
++BbÇfGk*nr*sGtGxyšlGm*s*yfsk­lGmÈn*st*@?w­lsGyb5fühklmnEÄprstwAx*y]kGl
++
+rgs
++÷@]flGn]pr*sGt
+vxisft*nqs*tßbn*s*tGyG@?sCtÇbšlGst5wnkGlÈnGstCsG@üfGn*sNwsfmGnp*stšlÈnsGkwrn*shšl(tm6n*sgfGkNnbwmn*s*t²b*s*@wbBfklnprstw6xynrGt*swx(Ðt?h2sGt*yGns*t*y*s	þtt6mfGnÚsÇbk*sGtx]xØt
+ @k ¶lwmGn­rtßn*sGsgtGl?rØk*sÇ@bfhklmnpGrstwx;yB
+lrGt*yAk*s5wt·ynGtlGn*r*sGt*sgty
++
+f7kGnIp*st*k*nèr*s*t]f*s)b?f]kGstJZyGnAs*ngx	ÇbDTkÆl
+dmn*stGyÇb*st€kÅr	
+ bÎfßkšl
++
+n*st?wšr*sGy*@*n*sÈtk*lGm*sGyG@bfhklmnprstw]xGyGkUlnr*sGttšlwm*nèr*s*tCk*sítl*sGxGyNl¹n]psGtCbwflÈnCpSsGt*y*@fn*s*y²b*f*kn*sGt*yG@gf&ãnGtÇb*nGsµtln*prGstGwNn*sCtGyGkGln*s+9tTblqsètµs-YtGy
+Gfghkl¯mnµprâs;txy­r*s*tkšl*nèr*sÁt*y*nÁsAtk2ÂnsÅtGy
++lrN'f2sètmGnÐkJÃsl*s*nsfGkwmgr`l*sbfhklmnprstwxyÈkLØlsnrµt&XkGkIMlGn?st*n*s*t÷x*ànt*nr*s2t	GfhCkl=nGr*sàtGk]ptr*ls	ÇbGkmnsp2sGt*yGnGp*s*k*n*sGt*lGnpsGtt6r*sixšbšlKnstGxGm*s
+tgmgrTsGtNlGnrIsGt*f?skGm3ØnstGyèm
+·nkGnstGx
+yostr*skÚtk*sgyÁs
++üfklwmÈnpstgxGf6nÆr*sp*ysxp	UrGkGlnr*sGk(Ðn	*fGkšl6nGpšr*sGx	*fµkGlgmn]r*sGt]kGt*lGp	Ur*sGt*n*st
+G@*fGkGlwmGnGr*sÈt*xÐy
+ÇbEÄh
++
+k­lGmn-YpÁrBs]tGwGx*nCs*t
++bfkmnp
+rstrÌt.Önåhnr€ksNmskTpn*sÇbkl*n	¢r*s­trfQk*s
+@bfklmnprstx
+lGm­s]tyrªtlk*sßtlnystlsk*lt
+¶mGbl	umrstyks
++
+m
++
+mèstTk*s*k*m*s*tèkNkGt@*kgstrèp€kGslGnGxk
+mnst,Îff*sÆl@Tt*x÷fln6plr*kstf6nètÃkÇmnr5Bswxf*s*tµynt
++
+rínGptrksl*s+WtsgmGl*nr*s
+@Nbfklm<npstxTmRðr
+blGn*kTr*swb.¹n
+vrsGtylws*s*tgxk­ykšl*nstGyrAk
+sktx|n%Àr*s
+n)lÂnfGn((tG2lGr*n*s*tynmßklmGnr*kGts@bfhklmnprstwxy
++klmõnrstGwyšlwn*s€kGns­sèt*k*lNn*sGn*sGtCyÇbwmsGk*lr*sGl]swl*s GbÃfhklGmngprstwrxypNlyLt­lwm*nGs*tknGrstwx­r:s:2sAt6n/tÇk*n*r*s*tyÇk
++fkšl*npqstwxsygrIlGlAm*n1r*s*tÇw
++GklGumnGrGsGtGxGy*s­tšlGmGn*sOtGlGn
+vrs*tgw*m*n*sGt>ÿbshGn*s5BxG@b6hkl7#mnNprst]wxyGk*lGklGnGpõsGtgft*xsgk*xNkšlnrsÁtGyšl*nrGsAt*n*s*t*y
++b-Yf-k­lmn€stixntGs]t*nèr*sGx
++bGkIl@[nGp*sGtgxGykn2sÅtr?pGn*s€t
++sbšlGmnGr2sëtgxGyGnskÃsl*sbGfklCmn]prs;±twxyrtbfn*s*txGfGh*sGtGlGn*sGtks-tgbGnÇbGnn*s*tx­sAt
+vx2fGn*s£r*sNfGnŒtGbGmG@bfhklmnprstwxyÈk>ÇlGnGr¯sIty@Il žn*sCtTrwTl*tGlàm*p*s6tNkwlPBnGr*sGt
+bGkl
+dm/Mnrst!éxBy6k*l*sštGm*y*sètGy*nèr*s*t	GbGl*mnÅp]r*sGt*stls
+@­hGkšlCmGn*pstx(õy
+bbGlàn*sGyb€fëkšl*n*sèt*s4Ït
++"b0f6kGln,sGtGxy*sGtswp*s
+>k	kln*r*stPwy*ðmr*s*sPwàf*ysf*nGsGtnGpG
+r*s]tGykGlGs*fTlnrIsýtxGstGsGyšlGnEÄlGrItGmGnGp*sÚt*ylm*n*sëtTn*stÚh@bfhklmnprstwxybGns*t6xb)lgm7#pdr
+&§f6hklÈnrIstGxyglGs*kšlnrsÁt*y*s+6tGm*sGtgxG@GkGm*n*s-¶t"ExGn:r¯s
+hkl*mnrsâtNxy15nGlGswxGfn*sGtGw*y(tkGsGt*kmGns]t*s:ŸtGm*n*s
+twxNn?s*tGywk*stÈn×n]lGnGrHãtG@fklmnCprstwx/@yGl*nb,stwx*ylgnyt*fAn*sët*ygbGknGp*sGxn÷x*kstGysp*k*r*sfGmësGy*ksGy*fgkGn7Yp*sµtGysbf*kšl*n*sëtšl#(sètGk*s*xšlÈnGpGn2st*y
+G@bU¥fkšlnprstx
+ybGklGn]r*sÅtGn]st*kÇrkšl*nsâtCxGy*n*sGtGy*n]s¯t*yGnNs*tšlÈns*t*yAkl*nr!s*tGyGk*swxGlGnbfåhklmGnGprstNwxGyllTrNl*sl€nrIs*ty*nAs*t*ygf*k6ns*yGm*sGtGyUs:ŸtGkytgw*yfwm€n*sGtwxGy	]k*ûl·mGnWrs*t*wÝtgfšln*p*s*tGy
++bk*lGnAurst*wGyl]tl*s
+çb*n*sGtmGnG
+r
++
+n
+-bfkGlmnGpstwxµyk*s*tÅywxl*sNn#ÿtÚb6hšlGnGstGnsšlGn*s=xtwxGnGr*s*tGy	U@bfšhklmnprstw*x;Ëy*klGt	wCwbkGlgrsµtÅy
+>twxlnr*s*@Nsšt*ys*tÜs*n?p*skGl"¡s*ykNsGy?@µk]n*sGtgf*nsGt>Ûk*n*p*sGtGm*n*s*tGyGm2s5wtèmnrs*tGy5rb*n*s*tf*lGmGn*t
+b?ky@CkGrÈtbfhklAumnprstwxGyGklEÄrNs|tbNl-Yn
+ZtCxGlGp?tk*n*s*tgk
++ànsGt*yšlgn*twxšlGnNrsGtGy­lgn*s*túl­l€nGsGt*ykmÈnsCtw*y=pG@sš@Afr*sGtGlGtwylgn*sit*y	*@GkGm*ûnPrsGtylnÃrs]twx
+vkls
+wb?fk
+lGmn6psrstSžw*xwkGlGsšl*stwb*sGnr*sEHtlAnGt	Ubmsn\sst¯@bfhklmnprstwxµyGklGmnrstn*s¯tCyb*n*stxr*sGkl*y5wkGn*s*t2mtwxb*f*s*t,Îl2fnGr*s*tlst*yk*tÐk*n*s*tGybAn*s*tl6n	¢t*ym	GklnGprGsGt*yšl*stAk­s=xk*sGy
+GhkGlnF.p*rs7twx*yâmGsNbGlr*s-¶twx
+­fklGmGnp­rstwCxGy°bNn*sûtx*n*sÁt*yl) s
+dmnr*s
+t3sTb€twx
++TbAfCmnrstwxGyGkšl*sGtn*s*tGy*sx*m*n*s*t=?l
+b
+îfkl
++àmnrstx*ylsgtNpµnCr*stwxšlÈns*t	bkmnstwx¯ys&ÜtwxšlÿnsÁtnt*nr*s*twxgn*sšt*yšlnGs€tšlGtBñf)nrÁtšl*s*yb*fšlÈns*t¿kÏlnstµyÑb*n*sGtGwixb*sûtwxbGm*n*s*tþbhm*nstxns]twxþbÉf;s
+çbAfGn*sAt!f*sGfGnGr*stxšlGn*sÅt	Ýblm
+nr*stxtnt-ªl*n*s*tGlqsGt2f*sn*s*sât
+Gf*kwmsnr*stÇw*xGylGr*sixgn?s*yGlmnr*stGy=un*sNw*sýtwxGysb*lGn*s
+bÈk­lmGnrëstÇwwxGynkGp*swxGyf*n*s*tGyšlštNflín*shtgnvs*yC@bfhklmnprstwxyGklrGs
+twxgys*yGm*n*sõtwxibGk*sGt
+b-Ífklmnrstxyl*n*s*tlànrsýtxšl*n*sÁtnl*nèrs*t	]fk
+nsätGwwx*y¿r*stwx*f*lAn*s*tëfhn*s*tTblhnHstxšlgnšr*sGybCm¡nstxën*s*tsk*n*sAtnl*sGsèt*y
+ bGlnGr2st]st*n*s*tx
+nTbkšl
+In¯sëtxn
++&l*sèbnrGs*twxšlgnGs€tþxèsýtwxn*s­l*n,sbn*s*tfsbGm
++àtbfklmnprstGwxy
++
+nÐsšlÈnGr*sÁtlstwx*fšlGn
+Ÿr*s*tGfmnés]twx*yNnúr*k*sGt*b/htkql*nGst*stwxf*mGr*s*tšl*s6t	Uls	bGfknstxGy*s]txšn*nÁs€txšlwmGn@p*s*tÇwlÈn*s*tGytwx*y	Çb*f*hGkGn*stwx*f*n(õr*sÓt	bfk*mn]r*s!tšl*sètGsätwxngls0skÈnpVÉsÁtíwGygyb*kGlGnGr*stGkGlrÐk*y	!7b­hkšlÈn*r	xst%âl*n­r*s*tnGr*sGtwxµy
++ßhklCnsJptPwxGyšlgn*sGxgnpsètix*ygpbGm*n*sGtwxl*sšt*yšl6nètn*s@bfklmnprstÇwxµygsÂtGkÁrstn¿x
+
+b
++
+ln*stxès!fèr,snBslnr*sCftCm*nGs!tþxpýtwx
+bGf[mn-JpGstÇwxGyšl*n*sGt*fšlnšr*sýtwx	¢sGtGnGp	G@sb€np0r*stwxtwx€f*fšl*n*s*t	bsfknGpstuxn*sAsètGst­lsGt*st7Yršlnr*s*tšlyr*sAkýtwxkrwstx2s6t*nÁstxTr*sn*fll*s6nAsGyšl6nst
+nèr*s*t
+b*klØmnpr]stGx=xlGkwx*nÁstCxln*s*tsp*sbkn*s2twxt
+%x
+ bf*n*s*tšl6nÈs*n*s€tšlDyn7txn"îl*sn*pl­r*sbfhklmnprstwxylrgy+n*sšt*ygkGnGyb¿k]lGs]tÅyõn*sYtlGn
+yrstwxGyk]m*s÷t*ygwšl6nt%âl*s
+XbfÈn6r*s*tGyšlèt
+bfNlmn'«ps.tw*y&
+rÇlPr*sQHnG@šfGsšl*mhtGkwmèlnpsbGmnAsûtwxlrttwx!f*n*s*t
+·nr6n*s*yb2sGrAsGy
+bkl
+dmn*pArstüx.s©t	bykšlGmGn*sGtwxšlCm*n*s2tGylnr]sGtptssk
+bfklnprstwxyNn*stwxAf*nZÒr*s*t¿klnÁs
+ZtxÅy*sx=xn*n5Bs*twx
++&lCmstwx4Ëmb*fl*n*s*t
+b*n*sGtfšrstlxänknèsúklt	þk(ïn1swxšl6n*sètgw*yptÇn
+vtwxAfAn*s*t*ykšl]m6ns*n*stwx*n
+Jr*s*tt	@nwm*nswwm*t	Üfknèpstwxyn*n÷tµkGs;t/Èxb*knTr*s*tk
+lAfšlÈnr #stGy(õrëfGr*sn]tCl*tn]¢lGns*tf*nGpsTétGlQìn*r*sGt	bglCmnGpGsGtGx	Uk*skNmInhsGtGkmlTtw@bfNhklnüprstxylGtgn?sèt*yl*s*tGkCsÃmn!r*stwx­y*sÉtGfk*nšr*s*t	K
+hFßkšl*nGst]x*y9Jr*s	
+fCklInstwxygn*sÁt*y]nÉsÉfšl*nHs*t
++àlklmÈn3ÄstGyGlGmGn*s*ngr]st*yG@GnAfÈnwr*s
+ËtGy
+?@EÄbfGkln]r]sÁtwxGy*s.twxGn,js]twx*y*nKs*t]n2sTb"k*nrs
+Zt@bfhklmnprstwxyGl*s?t
++<lklGmÈnsprs!t*y*kgn*sÁt*y*ntwxAf*nšr*s*t5ót
+G@
+Äklmn*rst]xykns*t*ysGyGn*s:Ÿtšl*n=xs*tšlàn*sCtGkšlÈnsýtxGy&ámp*tÇwp	sGmNnEábfÇklgmnprstßwxGygkGn*sGmGns*t*yGkGs&
+tGmn2sGyšl6nsp*s*tb!f­lÈnrs*t*ns*tGtgxn*sGkl*s
+g kmnèrsthwwxCyngbšlGnGs*tšl2mn6p*t*nGs€fGn*r*sÅtyÚf*s
+G@bwflnpârstwwx
++
+yl*n*rs*t*yns*t*yÅk ²n]sGt*yklGsstkqsèt*yTlÈnIsGt*yšbGfwm]n*s*tk*nr*s*tulGm*s*yµl¯@bfhklmnÈprstwE{xLSyGklõnÊrgxl-YnGt*sGtGyGnGs
+hÈk>ÿlÈnGprsGtLx*y
+Ks	*kšln
+rsýtwx*y|y]l?n*sgt*kšlGsGm*sGy	÷bsfyk7ïl*s<>tNwGybfÇhklmnpGrsÁt<wxµyK
+r@*l*sšlPr*srGtyskësw*yk§nsGy
++àl€@¶nsGfskšl*nGsGtglCr*skšl&ámGntswgprn*sGyl?sGt>¿tNlGtGx	fklHŠnIstAux*yGnNr/Mn*s*t*y
+XbAfwkšlÈns*t*nHs*t#g bfklmnprstwwxIyGkGlCmgnr*sGy*k*nµt
++bklGmGnGr*stÅyCsgxgf6n?sGt*ylÆs]knrs]txGyn]smn*n*s*tgx?kGmhnsGt*yšlÈnGr?sšl*nGs]tby	blnrIs*tGx*yšlgnGst@[n*s*t*ftNknGs*tTxf*sµtGy4
+r*s
+sbfklsmÈnrBs*tCylGr*s€nxGkgns*ygmgsGk
++nlNn*sGt
+-Íbfklnrst4xGy¿k°l6n*sÁt·y#àl€nrGsItnt(tfímpxorlitLSkÈnCsÁt*y*fkšl*n&
+sGt!7xGk
++l]n*s*tf
+Nks*tlttk·kylGmn*s*t	¢lsbGn2sGt'wGy*@blAn*s*t*sÇw
++blGmnpst]x*yn*s*yStšlsGm*sGtr*sGn*s*t*y
+b) fkClm1ënpGrstÇw*xèb:lG[mÇnGtn*sàttklnhsšlr$¯fGmkÐkNsGyl*sysTt@ktl*sGtwykGnqsGt*lÈrG@bfhklmnprstwxyGkCûl]mGnèr*sGy¿kšlGn¯s*tµyGl)t	hwkl*ðmnGrGs]tMŸs*nGs@tGyNbÈnGp*s #t¯yklnpGstwyl žnk*sl't€k ¶l*swx
++G@GfkšlGm*nGstGyn*s*k,Îs	TfNhšlgnGprhsGyAkâsGy	GlÆmnr*sßtGx*yšlàsGf*s
+w-YfTlÈnHs*t*yGkšlgnTst)wy*kànÅpèr*s*tnx	r*@fklmn-ªprstGwxCy
+bkšlGns*tÅytwxÜfšrInls]twx7twx*y*kgmÈnGrsIt*yšb6h*n
+Jrs]tšlGnsGtAf*s]kGlnNp*stwx0m*st/ûrsBtgm*nGsGtGm*sÁt*l&ãnšr*s*tGybnlšr*sGkèr*sPyn*psÑb€nGr*s*tlAfbbwkn*sG@
+ ke€x@bfhklmnprstwxyGb*s]kl$r*sGtGy*k	¢t
++à@¿klnrs*tGxÅyGk*sµyw@Gl*s*nAsGtGyEáklmgpGsIt	r
+blmGnGprstx-Yy*f]m*n*s*tysm*k*l*sgbTÌnÊfkGmqs]xµy*sLt­r*s
+wbfk[mnpÁrsty*lGxGf-nGrs*tGyÇbGmGsGtÁsÇt6n*s*t­r*sGyGns
++
+t
+G@*bkClGmnwrstxyl*n=st*r*sÇbßf
+dkqlmGnfp­rstNwx*yG@*tGkšlwm*n*sGtwx	*fGk­lGn
+¶p	r*s*tšlGnGp6klnrsGt*x
+m*s]ttn	¢sGtNnšp*s
+fGhklGmnpstx]y*lGmÇn7(n*st*ysrk­lGm*sGtÓl*sltk*n*sGt*yGk*s]twx*l*sAtgxGl*n6p*sGtwxkGr*sTk*s
+ybklCmnp	¢rstüw­x]yGlGn*sFTk*s*y*nGpGsGtGf?lGnr*s*t=fkšlm>Ãn*s*tgm*sGnpGkLSlGmGnGsGtlgmÈnGp­rGsGtwm>¿t*y
+yl*nstÇb
+NbLfklnrst+6xy*sstGwfk*nèrhsGtG@k*nGrGst6€yGkgxbl*sGnwyAn*p*s*t&
+k*l*s)olGnGsGynG@*s*tbf
+vhGklmnprs]twGyGk*lâm*s*n6r*sGtGn*sgt*yTknGrs@t	Gf*kGlGnšrGsGt÷w	¢n*sGt8n*s*tGkGnGt
+b]f8Žklmnprs>ÇtwGx*når*s*tgxGlGn*sGtwykn*p*swh9rsGxGm­p
++tG@k*sgtl*tk5ksGy*nGrs*tGm*sGtµyfkms]twxK
+l]mys
+ysSk³kwtšl6nšr*s*ttn÷p@bfhklmnprstwxyklGmD9nrstAkIûr*sGyk*syt*ykGy)nGp*sGt*yf2m*s*t
+r*l2t
+@fGklmnrst*wxyr6qm*bšl
++
+nrAsÁt*y-YbGn*sGmGnsår*s
++sfklGmnrstxnAsýtwx6nvsèt*yšl*st.n
+án*sGyšl6nAsètšlGnârs*tnÐsgfGkàtšlmn'r*sGy]sGy*lëstfGn<sGnrs:n@bfihklmnprstwxynrGsM%t@Stl*sgŸt6nÁt*ygm*sÁygfLr*s]th) knGrs]t*ytr*s2tGkGsGtwkGršlGnstíw7#t*@Pr*sGl.r
+ tNf]k*n*s'8t*x*yCfGkpstGkÇlTrsy
+
+[fFßkšlmÈn(rHs]twwxGyGfGnGtGkNsGt*BlÈns*tnGrGs6tŒkbfhklmnßprstwx]yGklr*ywk6nèt*y2s]twx¿k?lGn*s*tÅyNsIt9lGm*s*tNhGkInsÁt*yGm*n*stwx*kGr*s*@GkAn*stwx€fšr	@bk*m*nGp­rGstlGs*yKr*s
+@wlGmHPnGs[BtGx
+fklmnCprstygxklGn*s1-r*stwx*y€f*nGr*s*tC@15b*sÇbGswt§n2s]twxGy!fk*nGp]r*sGy
+bGf*klmGn+©rs.txiyGn
++\stwxšl*n]s*t
+k*n*s*twxGk2mGn*sGtGmn*s
++G@S.bßfTknps\4tykGsGt*nGwGpGtwx?hEÄklGn*stf
+*@bfklnp
++
+rstGy	*@Dk	¢lwmnrs:tÁsAt*yGns*tNywk]twwlGnGsb*s]t*yrnxÈnèrstwx*yšl"n*sÁtÑb*n*s*twx
++b3lnGpGrs
++ätBÏx*yÇl*nšrGs*tGmGnèr¯t	
+
+b?fulGnGr*s!twx@<b 8f&§hklmnGprstNwxy2n@bfhGklGm@[nprstwxyšl·nsgw*y*lTr*sGtGl?sÁtGxgnGtG@f?kns*y*sGt÷xÅt]Ol*s7nAs*x4f*st?wnNr*sët*sgt*Bl*m6nr;¿stnTn*snsItWtAn*r*s*tbwyGmÈns*ynGwNrs€tGm*s*tGy€nsÁt*y
+ b*n*s*tgx
++šf*hlm=án¹stwxGyšlÈn*s€k*l*n*s
+
++
+bfhQklmnrs*twQy]lgm*slGmCtGb?kgn*sÁt*y]k*nGsGn*stixyrNmGnGsGt/@yÚbklwm*stGyGpµtGn­rGrGtwknp­r*s,t*kGnGtNbfGklwmGnprstww?x*yEÄr*kNnGstsf*sfÁsCtwxgfkGn*st0Óxy*ðm*s6twx]k*n2tn*k*xGkGnGpèrsgk*s	gklGmnIstµxy*n*s*twyšlsOtwxsfGm*sšlÈnGs*tixNlnGsk*s­lGstgm*sgtC@bfüh7klmnprstAuwgxyG@Gk*l)nGl2s*f*sGtGygn*rIk*ns€txGyb*n*sGt2sGt*núr*s*t)ol*sýt*wwxÚf­l6n
++t	Ñflb'nrsÁtgw*y2s*yglGnës*t	b*n*sbfhklmnprst<wxyÈk\l
+rGk
+œn*rIsGlGnGt	k
+dmnrs]twxGy*n2s*tšl6n*sGt>Ãns¯t*yI@GlGnGs
+vthšlGmnb­s€tGyÁsGtGnr*s*fGs
++GblGmGn)orÁstwxGy mÈns*t*yGm*sTtgxšlgnGr*swmGn15p*sCtÇwGlGmGnšr*stn*slrGn*yšlgnGp*s<bwfl*sixGf*k
++UbklmnrsGtÔxgl]s*swyGn?sgxÇhåk<sGt*n*tGy	šfGkln*prIst*n*yGfÚlGnGs*t*n2s*tyím*shÂn*s*t
+NbGfklmnGprstwGxgkpGrGs­tGpHsètGyfGn*sGmshtNyÈk­lGstxÃhGlGnGs*xGyÇbGn*s*tNb*ÅkGns*t2s*tGlGm
++
+nsLt
+ylGn*sll*s@bfhklmnprstwxybfNhgklmn6prstwy]lGtµkB
+lGnBnësGt*yftrtkwxgkGlGnGs5fßn*sÐtGlßn*tºkl(tmGnHskTkÐsGy*litGxlGrGn*s?t
++wbDTklGngpÇrs
++ät6yGnsÁt
+#Þbfklm©n*prsGtCynÇmn*s}k*nës*tGwGyGkn*s*t]k*sGm*stf
+b÷fkGlmn*pr*styhÁn*s*st)n*s*kgtbfGkGnx*s÷tsbGm*sn@bfhklmnprstwxCy*r*s)yG@Gk
+ËlZÈr*sGtNyl]n¯sb²tNn*sGtGlGm6tCf­l*nr*s*twwG@Gk*s
+
+@whGkwlX
+mn.apCrsGt) x*ywh*k*sšfGkGnGtwhGkwl*s7¢t
++:bfGklmn;±st) x¿kús*tÅy!kqsšt*ym*sGt3?sèt
++hk*lNmGnwrstGxytrtynmšlhs
+ b÷fGm*n*s*twx*sÉyNnõsG@bfhklmnpstwxGylr!QsÇtkw	¢rbÈklµn?rsGx]mGtytrtÉy*lmnrs]tNpÇm,sfGm*sštGy
+mfkgn*sGt*yRt
++gln*p*stkr*s*s
+t*klsGtCxygsTtt	@rrGtkDNs$1rNfkmÚpsÚtNnpèrGtksGykX3lnTmp­k*f*mn	¢r*sGtys5tp¯n*s
+ZfGtmGnGp­rJÃs
+bfgklm]n*pdstbw;Ëy	¢r*sl€m&ãnqsGn*sšt*yAkr*sGylÁsGtG@
+XbskmôlHmn.apÁrIs*tswGxGyl*s *sGtSrimGtNfšlÈnGt@bfshklmnprstwxyGn*p*swxÈkZlGnÁr*skl$mnsGt¯yGtwx§n2stNm*sk*s)x
+*@lAumn&
+rstNwÇx*yšlGmôr*swxšl!unGstn*sGyM%tGp*s*tGyÁns*t*st*ybGlGn
+îpgr2stmšb
+G@šfGkâl1
+mGnrstxGyªn*s*t%ðxGyGkÇp*swx¿rGslGn*sGk*sGywm3nrNsGt0ÓkTn)p6k*lGstwxGy*f*n*s*tGyOknÉst*stGn­r*s*twxè@bfklmnprstSwxGyÚklAmnrsÇt*m?n*tk*sxnl*t2s*tt*tGylmpGrs*twxgmn?r*st*yr9(rpnGtt*fCm*s*t@Qf9(nt*yrlÐs*y
+ykln*sßt
+în?rsCt*kšlsm*nÁs!txcn*@l?ngprtbkôsGtgxÅyNn]s^#twxkDNsrBmšlm*nVÉstx*y*sÂtšlCmÈn*s*tl6n*sty*l*y*k­rRlmGnTrstnx
+
+nwk(ýp
+)n*ssnGkGlGnsµtkšlwmÈn*sGtGybk­lmn*sGkkt!7t?@*k
+G@bfkslngprstµykl*nrGs*tix·mGn*styÇpIn*t¿k*sGtÅy*nr*s*t.fGm*sGystGkGmšlGmœr2sþbl*mnqs*ty]s*y*s,tgl*s€kgnGs@bfhklmnprstwxyEl
++sGkTlGm6rGs
++S@kl
+nrsGt*wÅytr
+ bGn*s*tGk6nsât*y
+XbGmGn*sGt§nNtGlGmnTr*sCt*st]l*s
+bwklmnrstxSyl*sgn	¢tGkšln,st*y*kGlGn*s*r*s_¥wNnpBÏsGyGnGsGt]fGk­l]m*ns*tGk*s-tÇn÷pNr
+wyGnGpGt=@@knsftGy4äl*nGsGt
++5w@7klGmn
+rs]twxk
++sšt*yk*st l*n*s*t*n*sGtwxwyºfkm\l?rstsh€l*sGn*sgtlGrßsGtGw
+ bGnstwxGy*n*s
+twxb) f*nšr*s*tGf*hl*nHsÁtGwkqs*y
+JûfklmnprstG
+wGxyGlfùnGppSr*sGtGyl*sGtqlwr&b*swxbkGnrªs*kl]mhn!Ês]twxGyÁs*ylb*kGlg@bfklmn-prstÇwGykGlEÄn*r*swtØlŒlGt&
+l5rmm³ns*tpUn	Lb&
+fGn6psÁtx*yšlÈnGtGn]s÷t
++
+ bkšlmÈnrsDTtGyšlµrübšl6n*s­t
+bgfGk­lGnGp#(s*tNx*y	GkGl*mGnrësÁtwx?kšlGn	¢r*s*tgkEÄlGt
++?f-JhÐkšlnrsGtGybGk*nGs*tmGn*s*sõtGmGn
+t*n*p*s*t
+*@b*f*klÇmGnsGt*x*yi@kÐs*yÃrNn*t¯@bGÏfÈhklmnprstwxyG@Gln*r*sgt*stšlytbl·mGn*s*tGxôl*sësGtnsÁtCy*n*s=twxbTfGkNn*sGk*l*srt	*bhAk*nGrlªs]twx(tpGkGlGrn*s*tybGk­lÈn*sCtwx
++G@k­l*mnrGs*tGyrès(Ðt*lGn*sGmI°sG@*n*tGn*sQìybklAmGn6rsG@Gl*rGnCr*swbn*swyf*s@bfklmnprstwxy*f]t9
++hkækôlGnr*s"n*sl6n]rI
+stGn*sGt*yGnGr*s*t
+f
+klmn]OprstynGtGyšlCm*n*s*t	bkšln
+rs?£t*yklsGyGkšlgn*sètf¿k*tgywlnpsGykItgxr hfstwxCk]f¿p*str¿k*n*s*t"k*n*s*t*fGkn*s]tÅyyk*nµt	bkGlÈnèr*sëtwxCmAnn5
+sGy
+Ç@s~bwhkdlGmnèrstÅyn*sCm*n*s!sGy€n*s
+ Ab
+f?k¯lnr*sGt]xk*ks
+-@fàklmGnrGstrpAksGyqmy?s*nPrs*tgn*sGypgrsGx÷yrqtt:gn*tµkl<Änrs*Rt¿kGns*t]y%hn
+
+p
+twxn]t]s¿xfxÆk*s*t
+Bb!lmGnpGr]sâtwx
+-
+-ymNnbPrr]tsvôn÷fGk*np*sGtxGngr*sFdmbfkv
+lmnÀprstÇwxy
+-len*sb6ln*stwxšl]sèm*n*s*tn68s*tNn*s]tGkGnGstfkGln]pstGysl<×twxšl*n*stTf*n*s*t	ýbGn*stÇrGp*s*top*sBSlfGmn(sm*n2s*tFíkšl]sixGf*n*s*ti@bfhklmnprstwxy]kl<n*rGtAkgnsÁt*y
+Wbf¿klÅnrstxyBsGt*ybkNf*fšlÅn*s*t*nµsGnGsGy
+-
+ckl
+sm
+n-€prstwxkGn2s*yGsÁtCk*s*f*k*nšr*s*tw@bfhkšlmnrstwwx¯yÁr@gr*st*sÜtkglrs*tGyyfGnGr?sGx
+-
+-kšl6$sGtqsèt÷b6kIÏm*nsGtwx*fGn*s*tGyCkGt@vÂfµnpsGt
+
+m*ssyxGl?s
+t
+÷bqhGkblAnPrstxyšlGmGn*s
+twxGyšl*n*s*tGygp*sym*n*swkn?r
+GbfklmnpstxGyk*slGs]twx*n*s]twx*y7(kgn,wsyt*yn*sl*sGy*kšl
+m*sGtlGstnj¯sšlGn]sßtwx*fGkšlÈn*s*tGy*ln*sGy *@-fb
+sfNhklmngp*stNwIxyfpflwxrCn*sGt­l*n*str*k*l
+ðbšlGn­rsTtGy]s*t@ k
+*f*kšlGmGn*pG9r-€sûtwxUµf~kwm/wnAÀsšln*šp*slGstÙrGnr*s*n*s,tlGn*s*tCyÀm=
+bfNh[klmnprsµtNw*yClGk6mnV?sGt*ysk*sGtCkGlGx	bkl*nrstx­l]n*s*k2s*sÏtGy
+©bGm*n*s=twx
+©b]lwm*n*Ês*t$mGn*l(n*s*t]m*nGmGnht
+@Gbkln	ÿprsGtxkl*slJCrkTksGy Ãl*st*lGmgk*s0
+-tGhGmGs
+lfGhlCmn?pGstlwGxGn*sètlGs?f*slµnGrtfkrªs¿k*s*t&ey2s*tµyGlGp@bfhklmnprstwxy
+büfklmnirsGtwGxl*sGtNn*s*yb*np?sCl*rOt
+¿@­l
+¿m6n*s*@t	¡l*n*sNwNlsGtzyt
+GbNhÒklGmGnrsÁtxGyCm>Ñnt×sÁtÐwGx*yGnH`s*tyNp*sGk*t	ýt
+@èfGhklmnrstZØxy$sl*sabGnNrs]txnbtksÁt*yÅsšlÈn*s
+twxGb*r±kGstCl^n2stGy*k
+l*sgtbbykšl6n*s*t­lGn*rsGtGygflGmGr*sstÀn
+4sbGfhklmnprstwxžyGkNn*sGtGwNynk*tšr*s*x
+bg
+-fNhkGlGmnpstwx7üy-b§n*stºf*n*s*tl*s­s*yTtwßk*nªs*tGnsGt*bGr*skšl]m:@sGtx*st*h*n*s*t
+fGhCklmnpGs\Ütw*y
+-
+-lèkn*sÁsTt*s7t6lyssfGkGn!stl*tn*stlåy	fÈk)|lgmH¶nërqs*tšlÈn,sÁtyrNs
+abGfn*s]twx
+Ç@b
+qfkn¶pÀrBsÁty -frgt+UpÑb*n
+sk*sGt*@Gn*sNw
+G@bfklnüprst*x·y	*kl(nüpors5ty6ns*w*ysk*s*tqpJjsglGt*ksèt*y
+©bšlGn*s*twxGyk-lGstwxel€fGl*n*s*tGyb©kls]twxk*s*yšlgn*s*y-€km*sþtbëf€krGsGt@bfhklmnprstwxyržklKni»r*st*sTt
+r_·klÏnrsGfk*nr
+GtnšsGtÏksCb!f*kgn
+-Tbklnr*stxy*ltxGf*lbkÏmnÙtiwgy
+l^t&œkgmGtlÅs*lÅnwr*sÑsÅmr
+-ésGt
+t
+bf$[klmnprstÏxhT*yl$[nB n
+Dk
+nr5kb€lnp*stxsCtñtÏklGprt6nwyt°h*ntGl?n*bfTmwrstmÏt*nNsèt€f€kgrt_·rk?nr*sµtbft*nšrx¿rnxkrÂmßnstwxylHtkGn*ts+UtkTûmpstx.ltl	ýt
+s cnt|ðn*fkÇmx$]m*s@gfkn|stkhÙk*lntCmSÀršl
+r|s
+Grklâmprtkn
+ršsTtbktnNnšrsk*l
+lr*s'p*sfkGn¯st¶kl*msúk
+m'xb*f.lfklp
+ÿr}7st}Txn	ýrox
+ÿsFbk¶n*f*sGy
+
+÷bf*klCmnrwstgymÈn]stk*nGsÏxfkl¹m6nstxtHxb7fm*srt
+Cmgsx&ÉfGl*sktrÆpTr*f€ksbTngbs*yGnpNngt
+fhk
+lnprstxGyÏl
+DnypÀ@úfkgr
+Ôt¿nåtÏwrsnt^xpstnr*sCtkGlgt|Ùt*ln_·rGtx€kÏmñngsgt
+kl1Bmnp*rståwßxyk*lnrstbGtúk*n*l
+šs?lgr*p?r*l*nstsxÑk*stTfNs
+EfgkFbr ÷sµtxlsn@at*kn*pr*sGt*n?tkt*nHtTk
+÷km*sp6@-€@f.hklmnprstmwx7ryr*s}(nþrsEÇtnxsb*k?nÏt@f*y(Ñkn*stGlsgtwxt€rG@±f7	m?r*stÏxk6n*srt^x*f$]mbÙf*l|mn
+p&œtÅyGksúfpk)
+-ptlr÷sm/wpXnr-îk
+Dkm*sÏxnsAt*m
+-t*ynTkÚlgkgtÏklÇn<n^l*n*s
+šbGfwklÚmnrz¥stsxGy]mns¯t*k*s*tGmTtG@šlGs&)nHs*t
+bfklmnpstwx5OyEl?n*r*s*syxEl)Ån*s*tFk*ybn
+sGk*nftÇb*k*lGstšm*r@sy¹xX.@kn*s¯tGnèr*sÃt	€f€kÚl*n*prGsGtnwlsNmÜn?s*t
+bfklmànprstwyGkNl*s.œlNri@GfGlnirAÀsGnsÁt*yšlÈn*s*twxG@µkGnGsGtpCr*swmPr*sÐwG@GlGmGn*sGt*šyGm6nZâr
+4st*s]twxGy
+-b]fGkl@inrstßy	ÿkGn*s*t*yGlGmNn*sJjt­s*tšlGm6n¹@kwm*rGtèl*sbfhklmnprstwxyGkln*sèt*y*s	
+tb¿kblgn*sbœtÅyGfGmlwmGnGpÇr*sg@]b*y	GfknCpskt_\wGyLr*kGsšl*m6n*s*t]kTlr*sGt*sAxGbhGl*nGs*t5mokGpGt
+-	?fklCmnstxGylGnyÅs6nVÙsèt*y*s
+-õtlGn*s*tNwwx6l*yAfšlGn*s*t*y
+0n2s
+-bhG,k*lGmGnNp*stlGtlkFbyGkNn­r*s*fšlGn6r*s*tGy@okglsGt{x6ns*yt°tGln*sGt­m*sbCk
+-
+-lnstGxkšlgnsr*l*m*ssf·lnår*s*tNhl*s?w,wsèt*y)Åkwlm7fn÷rGsGtflX.m*sGtcp@bfhklmnprstwxy
+GbCfklnPrIstGw÷x*yn*skGnÜsGt*ykGmGnGs*tnAkGn*sGkl*nrs(tkGmInsGt*Êx*yšlGnswx
+HpsÁtGkGx"nGt
+sbklmn#rst+xytx
+abëfšlÈns*tµf]n*s*tbTÞnèr*s*tkGs*s# t2fšl6n*sÁtlGnësëtys^[tÈnK$r*s*t*kn6pGstwk*s/ykGn*sbfhklmnprst@Äwxygk*l*sGt*lNrsGtgx
+-énGsGh*lGnÇr*s*t
+pÀ@gb*k­l*mn
+r
+4sTtwx*y]knGp*s*tgy*sqt
+b	ýfh]k
+nGp	¡rstwxrÂs]l*mGsGmGn2sètGyšlGnèr*s*t:k}nGsGl]m
+-
+-nhstwxGy€f
+ÇbëfkGlimGnGstsw*y¬nGf*kGlGn*sGy	Çb-€fk 2lnr*s2t
+nr
+f*mAsbl*n^rs*tGy2kšlnsEÒbGn*s@bfhklmnprst8
+wxyGnGrGsÈkól€nGrst*y
+-õtnk?s*yGklrGs6n*sÅt*ybGk*nqs*tGmGs
+b*klymÈnrstwx*yñkm*s*ytlñk0foHmNnGpG
+sGy.nkGs*t*f*nr*s*tGm*yT@
+õk*y
+-bklnpšrsH÷tyGk
+-
+-nšr*s*tGf*k*sšr*st*ynr*sšlÈn8&s*t*x*yglNs8èt0lGr
+@WÌfk*OlGm*nprst/xGyr*spln*s¯t@sgm
+fk­s*ttnpDx*sšt*yGkCmÇn7fp*s*tGy
++@fàklmGnrGstrpAksGyqmy6s*nPrs*tgn*sGypgrsGx÷yrqtt:Yn*tµkl<¶nrs*Et¿kGns*t]y$øhn
+p
+twxn]t]s¿xfxÆk*s*t
+Bb!ylmGnpGr]sâtwx
++
+ymNnbPrr]tsvân÷fGk*np*sGtxGngr*sFVmbfkuúlmn·prs
+tÇwxy
++l\n*sb6ln*stwxšl]sèm*n*s*tn6+s*tNn*s]tGkGnGstfkGln]pstGysl<Étwxšl*n*stTf*n*s*t	þbGn*stÇrGp*s*tfp*sBElfGmnsm*n2s*tFßkšl]sixGf*n*s*ti@bfhklmnprstwxy]kl<n*rGtAkgnsÁt*y
+Vÿbf¿klÅnrstxyBsGt*ybkNf*fšlÅn*s*t*n¬sGnGsGy
++
+Zkl
+dm
+n-prstwxkGn2s*yGsÁtCk*s*f*k*nšr*s*tw@bfhkšlmnrstwwx¯yÁr@gr*st*sÜtkglrs*tGyyfGnGr?sGx
++
+kšl6sGtqsèt÷b6kI¿m*nsGtwx*fGn*s*tGyCkGt@v°fµnpsGt
+
+m*ssyxGl?s
+t
+÷bhhGkblAnPrstxyšlGmGn*s
+twxGyšl*n*s*tGygp*sym*n*swkn?r
+GbfklmnpstxGy	k*slGs]twx*n*s]twx*y7kgn,jsyt*yn*sl*sGy*kšl
+m*sGtlGstnjsšlGn]sßtwx*fGkšlÈn*s*tGy*ln*sGy *@-Yb
+dfNhklmngp*stNwIxyfpflwxrCn*sGt­l*n*str*k*l
+çbšlGn­rsTtGy]s*t@k
+*f*kšlGmGn*p	r-sûtwxU¥fukwm/jnA²sšln*p*slGstÐrGnr*s*n*s,tlGn*s*tCy·m<ýbfNh[klmnprsµtNw*yClGk6mnV/sGt*ysk*sGtCkGlGx	bkl*nrstx­l]n*s*k2s*sÆtGy
+ bGm*n*s=twx
+ b]lwm*n*œs*t$mGn*ln*s*t]m*nGmGnht
+@Gbkln
++prsGtxkl*slJ3rkTksGy ¶l*st*lGmgk*s/ýtGhGmGs
+lfGhl:mn?pGstlwGxGn*sètlGs?f*slµnGrtfkrªs¿k*s*t&Xy2s*tµyGlGp@bfhklmnprstwxy
+büfklmnirsGtwGxl*sGtNn*s*yb*np?sCl*rOxt
+¶@­l
+¶m6n*s*@t	¢l*n*sNwNlsGtzgt
+GbNhÉklGmGnrsÁtxGyCm>ÃntÅsÁtÇwGx*yGnHPs*tyNp*sGk*t	þt
+@èfGhklmnrstZÈxy$fl*sXbGnNrs]txnbtksÁt*yÅsšlÈn*s
+twxGb*rškGstClUn2stGy*k
+vl*sgtbbykšl6n*s*t­lGn*rsGtGygflGmGr*sst·n
++sbGfhklmnprstwx¯yGkNn*sGtGwNynk*tšr*s*x
+bfùfNhkGlGmnpstwx7ïy
+b§n*stºf*n*s*tl*s­s*yTtwßk*nªs*tGnsGt*bGr*skšl]m:2sGtx*st*h*n*s*t
+fGhCklmnpGs\Ìtw*y
++
+lèkn*sÁsTt*s7
+t6lyssfGkGn!stl*tn*stlåy	fÈk)olgmHŠnârqs*tšlÈn,sÁtyrNs
+XbGfn*s]twx
+Ç@b
+hfkn¶p·rBsÁty -Yrgt+HpÑb*nsk*sGt*@Gn*sNw
+G@bfklnüprst*x·y	*klnüpfrs5ty6ns*w*ysk*s*tqpJZsglGt*ksèt*y
+ bšlGn*s*twxGyk-lGstwx\l€fGl*n*s*tGyb©kls]twxk*s*yšlgn*s*y-km*sþtbëf€krGsGt@bfhklmnprstwxyrŠklK
+niªr*st*sTt
+r_§klÆnrsGfk*nr
+>tnšsGtÆksCb!f*kgn
++Tbklnr*stxy*ltxGf*lbkÆm
+nÐtiwgy
+lUt&°kgmGtlÅs*lÅnwr*sÈsÅmr
++àsGtt
+bf$NklmnprstÆxhTyl$NnBn
+5k
+nr5kblnp*stxsCtètÆklGprt6nwyth*ntGl?n*bfTmwrstmÆt*nNsètfkgrt_§rk6nr*sµtbft*nšrx¿rnxkr°mßnstwxylHtkGn*ts+HtkTëmpstx.ltl	þt
+vs Tnt|Þn*fkÇmx$Pm*s@gfkn|stkqhÐk*lntCmS°ršl
+r|s
+>rklâmprtknršsTtbktnNnšrsk*l
+lr*s'p*sfkGn¯st¶kl*msúkm
+xb*f.lfklp
+ðr}%st}Bxn	þronx
+ðsFTk¶n*f*sGy
+
+èbf*klCmnrwstgymÈn]stk*nGsÆxfkl°m6nstxt9xb7Ym*srt
+4mgsx&ŒfGl*sktrÆpTr*fksbTngbs*yGnpNngt
+fhk
+lnprstxGyÆl
+5nyp¯@ëfkgr
+Ët¿nåtÆwrsnt^pxpstnr*sCtkGlgt|Çt*ln_§rGtxkÆmèngsgt
+kl15mnp*rståwßxyk*lnrstbGtúk*n*l
+s?lgr*p?r*l*nstsxÑk*stTfNs
+<fgkFTr êsµtxlsn@St*kn*pr*sGt*n?tkt*nHtTk
+èkm*sp6@-@f.hklmnprstdwx7eyr*s}nõrsE¹tnxsb*k?nÆt@f*y(Äkn*stGlsgtwxtrG@šf6üm?r*stÆxk6n*srtUx*f$PmbÐf*l|mn
+p&°tÅyGksëfpk(ýptlr÷sm/jpXznr-ák
+5km*sÆxnsAt*m
++
+t*ynTkÚlgkgtÆklÇn<unUl*n*s
+šbGfwklÚmnrzstsxGy]mns¯t*k*s*tGmTtG@šlGs&
+nHs*t
+bfklmnpstw
+x5By<l?n*r*s*syx<l)žn*s*tFk*ybn
+sGk*nWtÇb*k*lGstšm*rz@sy°xX
+@kn*s¯tGnèr*sÃt	€f€kÚl*n*prGsGtnwlsNmÜn?s*t
+bfklmànprstwyGkNl*s.°lNri@GfGlnirA²sGnsÁt*yšlÈn*s*twxG@µkGnGsGtpCr*swmPr*sÇwG@GlGmGn*sGt*yGm6nZÒr
++st*s]twxGy
++b]fGkl@[nrstßy
++kGn*s*t*yGlGmNn*sJZt­s*tšlGm6n°@kwm*rGtèl*sbfhklmnprstwxyGkln*sèt*y*s	tb¿kblgn*sb­tÅyGfGmlwmGnGpÇr*sg@]b*y	GfknCps\t_LwGyLr*kGsšl*m6n*s*t]kTlr*sGt*sAxGbhGl*nGs*t5wmfkGpGt
++	@fklCmnstxGylGnyŒs6nVÉsèt*y*s
++ìtlGn*s*tNwwx6l*yAfšlGn*s*t*y
+'n2s
++bhG
+k*lGmGnNp*stlGtlkFTyGkNn­r*s*fšlGn6r*s*tGy@fkglsGtrx6ns*yttGln*sGt­m*sbCk
++
+lnstGxkšlgnsr*l*m*ssf·lnår*s*tNhl*s?w,jsèt*y)žkwlm7Yn÷rGsGtflX
+m*sGtc	p@bfhklmnprstwxy
+GbCfklnPrIstGw÷x*yn*sþkGnÜsGt*ykGmGnGs*tnAkGn*sGkl*nrs(tkGmInsGt*œx*yšlGnswx
+9psÁtGkGx"nGt
+sbklmnrst"xytx
+XbëfšlÈns*tµf]n*s*tbTÎnèr*s*tkGs*s#t2fšl6n*sÁtlGnësëtys^KtÈnKr*s*t*kn6pGstwk*s/lkGn*sbfhklmnprst@¶wxygk*l*sGt*lNrsGtgx
++ànGsGh*lGnÇr*s*t
+p¯@gb*k­l*mn
+r
++sTtwx*y]knGp*s*tgy*sqt
+b	þfh]k
+nGp	¢rstwxrÂs]l*mGsGmGn2sètGyšlGnèr*s*t:ktnGsGl]m
++
+nhstwxGy€f
+ÇbëfkGlimGnGstsw*y£nGf*kGlGn*sGy	Çb-fk #lnr*s2t
+vnr
+f*mAsbl*nUrs*tGy2kšlnsEÄbGn*s@bfhklmnprst8wxyGnGrGsÈkêl€nGrst*y
++ìtnk?s*yGklrGs6n*sÅt*ybGk*nqs*tGmGs
+b*klymÈnrstwx*yßkm*s*ytlßk0fo7mNnGpGsGy.akGs*t*f*nr*s*tGm*yT@
+æk*y
++bÿklnpšrsHçtyGk
++
+nšr*s*tGf*k*sšr*st*ymôr*sšlÈn8s*t*x*yglNs8Ût/ûlGr
+@WŒfk*BlGm*nprst/xGyr*s
+pln*s¯t@sgm
+fk­s*ttnp4x*sšt*yGkCmÇn7Yp*s*tGy
+ fCklGnrsGtwxGy
+-lgn*sk*yÙksGy
+m*n*s*t*yšlsmgn	Tb?1fÈns.ãtNwwx*ypklÓm*ns:tµyVÙsèt*yik*n*s*twxGyb*fühoHklmnr*stÐwwxylyr*sGpAs*yn*sGtšlgn*st­l6nèrsÑbf*n*s*t	Nb€kšlCnorsÁtÇwGn]sètüh1Bm*n*s
+bfklGmnrstCxyWlGr­l]m*slGnrs*tès
+tqsGt*y*kšlGm*nsGtÈns*tGy*nqs*twx*stón*sh6p*slmng@lÈnrsGt*y*st)­t@bfhklmnpMrstwxGn
+4s
+©yllwtgmnxs*k*s-€ygmtÐy
+-ÍrbNlmnrot	
+yZØsGy1øf}=yktrl
+-éyG@fr*s
+y*k,s*kqsms@tCxtr?tFdpr*sp
+©ybkstyt+Uyx
+-érxy*sÅy
+÷kt
+lTmTngp	TxgkGtmrk
+Gm
+bfkolnpHtrstwxGyclrgt*y
+-kMGlÃrGnCrk*ln*sGtÁs!twklGmn]r]·s
+Ìt*ks*tGyskGl*s|b2fGn*sGtlf*n*s*twx@bfhklmnprstwxyGnsš@GlArG@¹lGrGtwf]lrßnsxMt
+GbÃh]kdµlnrstCx4ÜyGfÁstšl­r$ŒfGsTtt7frlGn]r]txgn2sèt*y ÅkGnGpst*yšlÈn*sGtwx/wm*sGy÷bnGr*s­kGn*six*k*nstGl*n*s*tgy
+n*s 2lngpEÒr*s*k]t*@
+m*ngp2sGtGy
+fkolGmnPrÉstGxyl6nGlGyybGkGskr*s€nIpl*s8Of@bfghklmn
+õprst"/wxyAl6kñl-fr*s
+àklgnÙsGl©nrsGfGlGmt)l*sGmGnLs¯t*yGkm­n*sGt*k*ns*t*nGs€tx­lèr
+abGk*n2stwxGyëfAn*s*tGtr«yšl(Ýn	¡r*sštGx7fnghglÃwå@Tn
+sbGkClCmnGprst*ybGk*n*sGt|mwr*sf*npr*sstLìwg@ÆnybGfhkl
+smn*prst<wµxy]k*sGtAn*tG,lGnGr*stFbp*s	kšl]nrs]t¯x*ys*n*sKtsèt*y*m*n*s*twxšlGm6n*sGtGkšlGstk*n*s*tlšlr*sGk*l
+-
+-ns*t*y	±bfklGn*sCtGyŒlgnGkGl*sës*yGk­l*n3rÅstwxšl*nGs*tGyÇk*nGrs*x@bfhklmnprstwxyGngr*sLyblnNrÈsqÛtxlsèt*y
+/tGf*km*n*sg­t*sµt*s5tnl	¡r*s
+bkl2žmnrst]wxyl*nr*s*tkAnqr]stwxÉfGr*skn*s]ty*nÁs€tR sklÈnGstx	Tb!fšlÈnPrstGyGf*sGylGnÑbk­lnùsµtGyGsTxšlònTr*s€tixµy	þbAfk	¡lnrqs*tl*nGsAtTxGl*n*t*ynl*n*s*ts*yl*n*skgsÇtb¯lns]t+ít"RxsÅt1t
+
+fklmnprstxwyCmn*st"RxtwxAfGl*n*s*t	
+fGkmns]t
+Íx*yb*nSp*s*twxk*lGsibúptk2sg@fnstgxGykrb*n*t]f]l¿pgr*stØk
+k*s)$x*s*twxÅy	b]fGkm.Ænstx	bn*sþtfšlÈn*stšl6nÝsn*slf*nšr*s*tmšrstylGr%tšl6ntgl*n7¯rGs*tGysßm*fkGmr]s*txb9l
+sm*n*slgn	¡t*y*l*n*t
+-lGnšlkn*s
+-fklmn­p%styëkúrGlgm*n]Fs]twxk*npcpvs*t*ynZâr*s.ãk*Æs*t*nr*s*tGy-·nGtsËtdn*sdt
+@bfklmnprstxGm*n*s.ãlyrlgsn]s*tt*kGrÝsk*spDtGyn*sstšrx§nsUµtwx*sHtl*n*stwxGfmnt*sgxAfšlÈnrstGbgkšl*n]stGy
+ÆkGmAnšr*s*tGy	
+©bf-€k­l*nr*stšl6n,sklgnsyttwxnGp
+@Ghk­lmn}(pst»x­s,ýt*lGn*rs*t­ln*sxøls¿xbCm*n*sAt¹lAnpGstZQl*sGmGn
+-TbGfGk­lAmGnrsGtGn*str*s
+bklCmnrstxy	?l|Ùs]knýtwxts*n*s
+t
+-
+-kn
+Ôs*twx*y
+kNnôst*nr*s*t§nätgx	fkGm)/npstwx	
+rcªtrÂx>rp]s*ttgx	€fÆkšl6nr*sixGy*lGs*yGl*m*n]stxy
+2r
+Ín4Îx*shtGynëstwxlCm*n*sätwl*nknpGstwxGy*nstwxtr*s*n*twxIf*n*s*tkGsAtb7fl*nF,s*tgxGy@bfklmnprstwxygs
+-
+-tyGptr*sx*l)n*s*tGyb*n*st"RxGfGn*s­ln]pr*s
+ctwxk*n]bptwxf*sšls*m*t"kGs?tyt*ns*tTb€npGsþttwxAf2sNkšlGm*nGstÑbšlCmGn*s*txkGnrqsttwx!f*nGs*t*nësÁtbAfNnëstwx*fšlGn*s*tÎk*nqs*tbšlÈnsÁt
+-kl-€mnr&)stÇwylësk6nIsTt*yNsGyšlÁsItTxGk­l*n*s]twxk*s]twxtýtwxGl­m*s)|@µnANnmGn*sp(5@bfwhklmnprstlFxy!r­ln*s*tÅy*n*s
+÷twx
+-sblmÃngrstxGy*n?r*s­t*yNn*sTt'kšlgn*s]t¹b
+-íf,n>Nr]sAt
+ÿkAns*tJ1yknršs§nätwxklKòm*nstx*fGmGn*sgkl*nTrsAt­l]n2sls
+m	úk*lGnGpstwxGyëfGk*l	bkGlmGnAp]st*l"nn*s*twxGyšl*n*s)twxm*nšr*s*tyqnpk*n*s*tNf*n*s]k
+-pnIs	sblCm€nrs@¢t*y*nµr,sšt*y1BnÆsTbÑfAnGs*t@bfklmnpGBrstwxy
+2mGnNsyS£pGkl?n*ygnsèt*y	TbklÈnr
+4s 2tÅyšl*swxk6ns*yTks*y(n*s*t	­lÈn$spstGwwx*y*f*nr€r*s*tkmnGp*s=t*ytr*ksns*tšlom*sGtCklnGr(sAsGy
+-?@/b
+qfklGnGp!stšlm*sštqsèt*yGk­lþpèr*skB nrtxstšlgnësèt€f*sGy*n*stwx
+'b2fl*sšbÉf*n*stšl¡n
+-ér*s*tbfklmnprst*wGxGyÈk*lGtkšlm6nGrd¬sštTl]snüslnFdrstn
+ss¿t$]n*s]tøn*s]twx]klGnpEírstnlüsrxns*mþt<ztGmnGk}(pßst­yl	¡r}7s$_k«nr?àsÝt$_ntAfÆk	Gkl*ÆmGn*rqsÁtGygns*y*mwxknt
+npcrGs ÷tr*sktrl}7k]tGk*sItGlnbl*n*s*t"fNk*n*sx
+@bfklmnpstrpsÇtGysbElysxk
+sln6$stHt*y*kgsTtgx£knstGk*stŽr*slrys/Ãt@GkEl*sGy(5m*sTx€klr€k*kGmÇpsGy@bfhklmnprstwxv°y*wlGnGr*s*twxgn*sÁtGy]kl.nmsgns*ywpGnGsGt	GbklnrGsIt+(wk*n*s*tGyNbšlgnrGsGt*ysÁt*m*n*sþtwxGn*stk7tGk*ns*tTkmns*tGx*y*kÐsGyGstCkgln*sGt*stgk*l*s*t
+-b-€klGmànPrstxs*yGmþtësÁtGy
+-bAkšlGmGnèrsGtGyqlNmGpgt*fI
+r*s]t
+bfklmnGrstx8Áy/k*s*tÅylr*s
+y/ÃfkCm*n*s,t{w1nGk­lsÉy€n*s*twxfGk"n*sqÄtmk­lgnGrHsytšltsy*l
+-pmGn*sGtGy
+-
+-büfgk­l=Mmnp*rGst(w*xGy*kGsixb­lNntwx]lGmGnr*snòs€fGnr*sGkswxGy­tšl]n*sGt
+NbÑf6hGklþnPr*sGtPwix2sgtboHf|kl[mnßpGrstwGxyGklwt n*yr*sèt*y'(nGtfgl*nGst/ylšlGn*sGtb*n*s¯t*k*nGr*sGkTl*n*s*ts­ten
+@sbGf?hkl
+mnrstk
+n*s$srmnswlsGy*kTt*n*s6±tGn
+r*skwx	Ty	f
+hklmgn*st*kLsO«s*¯y
+-
+-ntlGn$r*s*tGn*sxnßkNs*ygy@bfhklmnprstwxy
+f­h+Ukul*mnrs*tGy
+-l&)tµkGm*sxMtqs]tsküx
+G@GbfklnrstTx|yl*n*s*t*k~n*s*t+nr2stgxÅs*nèr*sf?hk*nstl*n*s*t*k*yl»nwt*nir*s*t"fGkGl*n]stµyÐkl]bßmGn÷p*stšlm6n?sSp*bGk­lGmÈns*t*mGn*s*tbfhklmnprst]wxGyÇnrGtx?nýtwxfEl*nr*s*t*n]sb*n]stwx*n?r
+bfk[m@in?rstx*ybGn*r*s*t§nstxflGn*s*tšlgn*sytšk*yfÈn*s*tšlgnytßnàtAnšr*s]twxnrsgn*sGy
+ðbl*n]pHstwx*f*nèr*s*t	kšlCm+nèrst
+ÕxÑf*n*s*t@bšlgn*s?wGnÇrb*nr*s*tr¿s
+-bfkGlns*txÅyÆk*s*tÅy
+©rtwxëfm*nœr*s*tt(r*s*n]st]°xšlGm*s*n*sqtbCmAn*s*tbln*stTxs*y*swxgkGl]n*s*t
+bGìf9kAlCm€nGp?r*s*twxGyšlCmn*s*tšl*nšrd¬s*t
+-bGlmoHnor8Ásot]xyl*n*s*tútn*ss*sgxtr
+ctgxà@bfhklmnprstäwxGyGkèln*s6±tGyÖs*tlnr*sGttwx
+©b*n*s*tGym^pÇfln*stwxmµbswx
+'bn*sdt	¡lGs*t*fAn*s]twx
+bkšlmnrstwx*y*lr]tgxl]twxbn*s-·twx*nqsGt*nqsÁt
+qfšl6n*str*sB n*t
+-bwfwlnp-€r*s8Át)$xnn*sAtDxstbGl*n*sätwxql­nqs
+ct
+
+-
+-bfhkl
+mInrstgxkqmqn]twxr*mGsPrs]twx,st*y}mk*sès
+-)twx	klÈnp*stwxGynrm*nb*n*stwx*nšrIttls*ngxr*stk*n*twxDtwx	"k]lm*nr*sëtxn?b*n*s*ton	bGl*núr*stwxÅyl]rqs]twx
+G@Gkmn]pstgwxyn­stëfšlÈn*s*tTb'fCmGns*tànGs*ts?t
+bëf­hGkšlmnpst)$xGy*r*s*yšnšl­sGt)$l
+ct?fGnrGs*tbn*s*t$sxGy
+bfklGmnrsJt*yGl7fr	b¿kšlgn*sTtwxÅy*n­r*sAns*yšlgn*swx<#kGsGtGn*s*tGyšln*s]tèrGsbfNhkGmnprst*šwxyGklGtGn*sÁt*ybGk
+n*sAt	k*lnèrstwxGyšlCm*nsšl@in*s%twxb¡n*s*tk*nwpNCst]x*n*txl*n*s*t2s*yl]sÇtPy*n*sotGyæb"kGmwen*stwx
+-bfgkmGnÇr*s2tGyšlgn(sèt
+-énn*s*tl*six*n]p*s*t
+bfklmnprstxy]klnrst€ns*tkuxFdnbCm*n*s*tgx*l*s*tÅyb¿kGl*n+sGtÅy)­lBbnr]sGtfGst*s*tÅy*st*np*s*tl*s*tgybnrr*sÈn*s*tàkGtGfºnørstCxGyGk¡n*stwxr*sB n7twxlf€kGnPrs*t*nG
+s*twx]klnr]s]tm*ns*tpyncœttltKs	¡sAtmkGkgm*nGs]tÅy'f4l6n'²r*sàt
+-/b+klÈn
+ur
+s*twxµy*n*s]tgx*ykGn*s*tGn*s?yÚ@bfhklmnprstwxy*l*sGt
+-@kÁlnrs]twxÅymr*s]twxSs]twxNs÷xCm*n*stkCm*n*s*tltt
+f'²kl
+np³rst
+ëx*yŒltns]tgx*yrGkCmGn*sÉt)ÅknsGt­yt	àbCklnrs]twxcœsšl*ns*tx?ntwx*fšr*l9r*s*mNn*p
+*fok­l]mànpr*stwx"k6nGs]lGmÈn*stCm*n*s]twxGy@bfhklm(nprs)­t­wxGy
+÷k*r*sPwGsxMtGnrGf*s*yšl6nqsvôr*sInGp*stxGy¿k]s*ngt­f*t[Bl]nbGklGm*n*sGtlnsGt*yqs*yTlGsNmGn*sÀ b]fGhklmnprstxylk]x)n*swx]kn*sGtwxfknsÓtwxyb*nGsýtwxšl*nätxb2fCm*n*s*t*n?p*tnšl*n-€styCmàn*s*tlPr*sgr]t
+b;fhk9mnprstx*lýtwxnôs]twxúkr
+cmGsotëfGln
+cs*ttTb*n*stx&Ôfkstwx&Ôfob*n*s*tbÑfCm€n*sGtf
+©k*n3ÑstPw)$xÙkGnèr]s*tGy
+-¹bÚfGk¬lÈnrsta`xl€nës]twxGy2fšl*n*s*tGy*kn]sb*n	Nbfkln)/stGys]t]skt*y«kšl*nIs.ãtbGn*stGybf6hklmnprstwxy*@Gk,ÛlmyrsGtGxókút	sbl*n*ps3Ñt^#xPyO×sGtgx*n*r*sGt	lwmnrIst)$x*y*n?r*s]twx*ybSlCm*n]sëtwxgnwx]l
+-bfÇhkn*stwx¥y*l¿r
+ðbn*s*tG@
+ctgx­s€t*fšlàns*tbn¿pÁr¯sÈtlàn*s*tGy
+- s@b(Ýlànstwx*yQütGklGm6n*y*sÇwGyºfšlCm(nrs*tAl
+@bkln*prst"Rx*y*stæb%f*n*s*tn*s*t"xµy¥tšls2žt	
+xþb2f*s*yk*nôs
+ZtwxPy­lýtwx·f*t]·fskGn*s*tk(n*s*tGy	bCfXl
+sm*np*st!nTb?fglàn*sýtwxbfklmn9pr@àst-fwoxsylnGtGtx¿k¹lÈnwrHs*t*yšl*n*s]twxCmGnEJs*t*y*s]tgxÁstTx*stO×s
+-wbk­lGmn*stwx*y*stwxÉf*nr*sAtwb*n*s*tk*n*s€t)$@!f*s*t	bGfCm*n*s*twxµyš@Gl*n*sGtbn*p*s*t*xGlšr*skmn*slsb*n*s*tblO×si@xrAnKD@bfhklmnprstwxyGklþr?s2t]kGn*st*y*sÜtGy	¿kl*mqns]tgxy6np*s*y*n
+s
+bGk*lúnGsIt
+wblmnµprstGwx
+-GfkGmGnqrsätwx*y	¡sšlGmÈn*s*twxn?àkt±rfGmNn]twx*kGr*sGy*s«t_9f*n*s*t/4n	bfknstwx*y/rr*s*n*tGyksÏtGyšlGnGsGtGm
+-
+-n*s
+/twx*f*nr*s*tGp*ybnpIstwxstÚk`r*s*týtwx*n	Xr*s*t	bk­lm*n]stwxGlyrNl*s*tfšl
+n*sÁtšl6nytls]tGykCm*sPytgx*ncªr*s*tbfkGlCmnGp?1rstgwCxÅy
+štwxbl*nÀr*s]tgxk*sBsgx
+-lrGstwx7stwxbAf*l*n*s*tkšlGns*txlúlm*np*s*tZ9k!fšlGn*s*t
+-bklGmànpGr]st]Šw*yfµnÁp?sr*s*n*s*tGy]f*yÞlGkGnGpr*s*t&b"kln;smk*y
+bAfklmnšrs*twxwfJAk*n*s*t*ycœn*s*sŠtš@GkGn*sCtNfmnGp<×r*s*tTkNnJÓs?m*n]p,sGt
+µfkl]mn]rs:ÿt]xGybon*s*t*nCp*s*tNb*stbGn*s@&Übf*h
+cklmnprstwGxGyl*tNnHs*yGbnGr
+n
+-tÇbl*nGs*tgnVÙsèt*yCm]n*s*ts)$tún=ïtlÈnPrBs*t*@*n*t@Ákl@¢mÈnst0msèt*yµtÇbGh*l*s@bfhklmnprstwxy
+büflmnIp*rs*tw?nÇrgyn*s*y
+pšl
+¿mgnS[s)­t@zytCy?s
+¿w*kzsGtG@bfhklmnprstÞwgxyn*stqsGtlm¿nrs]twxèlGmgsÉf*kX.mCtklmnrsttwxf*n*s*tšlgnBsèt*nstkf*s)
+rNnpGtNkCn¿t:k*nþrst?pÉs¶t
+
+-nr"kGfµp&ÉpGtwxkónr*sÅsGymfmnstGyšlns.twxšrÁs€t
+sn
+Gr*s*yk)$rstxB²nr*s*tRssb2f*n*s*tbGl*n*s*tlänlm*nstDxk*yân*sxsmsf6k*sÇw*kNl]nprt¿lHìbfk6s*srÂx?kyrm*s
+hknstn*sGtwxGkšl*sGx?@Gn*sGy
+fihk]lmn6p*rstwxynGs
+sm%Inrwx]bpgbnsp*s*t*k	
+tt*làn*s*tnrqstwxGyGstx&Ôf*tblýtwxeklGn*sbtGyÆs*ytx
+©bAf*n*s*tn*lšr*snos
+sbfk`ÑlÇmnÇprstiyGk]twxGl*ns*tgxèn*sGtwxChkdnSÀp*stwxAf*n	¡r*s*tGkt?1rTl*nr*s*tµl*s
+l
+@bfklmnrstwxy*l]t
+ðbØl*ns*tixÅylnwpèrqstwx*n*s*yGmGs*fZØn*s*t
+NbGkšlàn/êpstGwúxGy*n*sÜtx-€nšlgnsGy
+rGt)
+x
+-G@fhk*n	
+psrGst?lÇn*lGsGtG@75n*s*t7rybklnstGyl]FnsGt±f*syt*y	¡lGsGtl*sGy	ab*f€kCmòn*stÐwk*nspèrsl*s$ítwxgf
+b*klGmÀnpsGtlwµyIl?nbfGnys`œf?stSl*l7fp*tGnGr*s
+t
+-GbÇf
+k*lGmnCrGstks*h
+n*s;@bfhklmnprstwxy]lnrs1øt*yNfGsësGx	S>fGkloHnNrIsGt*y*n*sot*ywlr,sGfNslmÈns]tGw*yG@*ns*t*ybf6hk	¡lmnprstÇwxyGkll*s*@Bl*nr*sGtl*nGp*s*t*s*xumsGtt2hr*ssGt?p*sGyGlGn*st*nr*s*tl*nGs*tGm#5s:7tGy*f*l*sMt
+-*f@kl*mÈnšrIsëtGxcNlGnGps*t*y*n*sGtÇw
+bfl*mnpsMt3Ñx*yGk*n*s*tlnr­k
+ctwxnGsTxXkf*stk]txl*n*s*twxlÈnPrs*t*yÚfkšlp]stwxr]b¿pkAtwxn]sxi@<bfNhklGm(nprostx*yk¹l*s*tÅynwx*n*r*s`twm*nqsÜt*y"s*k*lGn*s*y
+
+¿bµfhkl
+smnrs*t*ygl*r	Tm*nâs*t*yCfšlGs­lGn*s*tGylGn]syt*y	sfk­lnPr*stGy6r*s]tGh*skGn£sbf?hklmnpstwxCyolGnsGt*y	¿k­lÈnGp]s*tTxÅy
+-b
+VlnGpGrsýt"Rx*yßb³k*nsÁt*y	!Dbh]knp*s*tVxŠkšl8Át*n*s*tóx	?
+kÈnspNrIs¯tTx*yÇblGnsty*n]·s*t*nr*s*tl*m*sCtsfn*s:tGy+Ak
+b2fGklGmnrs*tGysGydn*s*twxGf*l*sGt&ðyGmÈn*ps*tkšlÈn*ps*t*y
+@yübfkl
+smnpstAx*y­fšl*s?lØnÇrEVns*tGy*fgk Åk?nsèt*yŸkGsGyGkjnGtfšlGmgn*sz
+tx
+-lgn
+G@
+ab2fAkwlgmnpr*sGt7ryG@±f*sGtl*n]twx
+bG
+fklmnrstÉxGy/rot*nGyNbkn*s*t*yk*sGyGrNsñrGsk*lnGs*tGyglGsšl*n,s*tšlwm6n5tÐw]l*sGyGnPr*s*t?y
+ÇbNkšlwmn?prs*t{w*y
+-l*nGs*tGngt
+bþhkl*nGprsJYtwokGp*sGb]kGn*sGt"kCtkGpir*f*sGt@bfhklmnprstwbix>ëyºf*nàr*s*t,Ûl*nrÁsätGxGynëstwx*y*nšr*sÜtGybfhklmnprstwlFx*l<ns?bmÆpÅstGxn*sAtl¹t*pGt	bflmnrstngnrgsfÆkfkTlst?s¡Rtr+Ustl
+Gtgxsšlgntn?nr*lt¡k^ktk)sµmptlÆrfÆkgygrfgk6n2sÅt*yl*kÆlGnptlr?st?y' f?núffGklNmzÐnÁstl?fúk6n?s€ylgrs¡Çk*yµl°n|­prst*yfkpst>l^k?lÆfÆk*y?s*tgxNr*yfk¡ÇlGnstGyÆl~Órl*sÅt}%tgxšlGnpt/êkrës
+fk
+ÿlmn/êprstgx*nsn*nr*sfG@]bgnst?n*t
+St*f*mGn­rs±y(2f
+-?bf.hzlnprstgngt*lgy*n
+ÿrµfGnsGtptglgxrkýtgxm*r;n*@?l^n)­rGl]t
+-klGmnst­wxGyG@*y*ngrGs*t*fÅk*sGtb!×fwmÈnÇr*s*tšln*slGs	+kšl]mNnrGsGt*y2bln]ps*t*y*nGt*y·f­lqsÁt
+-NbfklØm*nTst6xsGn*pJCrs*t*yZk*yl(nrs*tgwGy*nâs*t
+GfklÈn*p
+rs.œtw?xyàfNnGs]n2s*y2stGk$>rl*sokNhGmGn*sÁtCybyfhkl&îm>Ñnp­rstÐwxyGkyrntls
+-
+-lGn	¡t*yspwsšlGm6n*sþtGnÉsGtwxCy­l*n*sTlfÈhk­l.œmnprst?wxGyh*n*s*tàmšlGstp*sGn*stšlÈnsÁtGyGlwp*stGn]_r*t	¡r*s*yGkGn*pGnIs*t*xwy@bfhklmnprstwxy
+büfšlÀnrstTw*xGyGn*s*t*yCn*tTln?k*sblÈnrGstCw6nyt*yšl6nGr*sßyln]r*sswTx ck*sGtØlGrGsGt
+bgf6hdµl
+Gmnårs¹t*y?kårGst:k*s-îtNbÅktGk*nbhkšlmn+(p
+rstNw¯x*y:gl*krs*ypÀ@Gml
+nšl
+-
+-skšlGn*t*fTl*mn
+r*sGtësètn?s*y©@*sG@Kòf
+hklmGnG
+për5÷stixGy§n*s*yb0lbkGm*n}Ãp)Ås*t
+÷blmGnrst
+qf6kmÈns¯t*yzn*s$Œtbnnf*nGs*t*tHxGnt6r*kn2slštkšlGm
+-
+-nqstGy4ïs*tGn?rk"l7Ün*st?wIl?m?r*nr*s*t[BkGs
+fµk­lmÀnpr
+stwxy*sAÃt
+lGln
+p*sCysp?xxp*s©k*slnGp*s*tÃkšl*stkÀr@šlwr*sGt$_s@bfhklmnprstwxyGp*sGt
+o@IklGmnèrs/'t2x*yGk*n*sGtGwGk*nsGtblGn
+¿r*sàtGxÈk*s*xGkÈnsGtGw*y6lEVt
+bfshln?prst)$x*yGk*lGt
+-lNrNs*k*nGrGs*t*yGkšlGnšrGs*t*m*nsµtgk(m*s<zt
+qfm.rètn*s2sGy	hnClmbænrst*y
+žnúnGp¿sètGkGnGr*sGy!DbGn*stkÈrÇblGs	TŠbl(nCrstxGyPk*sPw*yKr*sšl6n]tGfGm€nsÁtGyšlÈn*sGt
+bklGmnNpr3Ñstx*yl*s6nsèt*yrGntsèt*yšl6nGtgxk*lGsGt*n?r*s*tb*flnsÁt*y
+-íflGmGnrqsGyGklnGpl*ss*ybfhklmnprstOûwwxCyÀk<lÇn*sGtAkbœl*sGk*lGm*srY¢sGm*sGtkkqnFs>tNwwx¯yn*st*stl*s#5sèt*yTl*nr]s€t0ÑxGn*s*y*làpJYrGsGt
+NbfÈklGmnpsGtGykNlGt­l*n*sGtwxGn#5sèt*yåh*sGsTtykGn*sžtgxgnÇršlÈn?s*tGk­nârIsGtsf*nsGtG@bfhklmnprstwxy­kšlgn?s6klqnsGtxÅy2sètlGn*s*tgn*s	¡t*ydmr]tGws*w
+bGklmn
+
+rstx*y	šl*mAnr*s7twx*yGn:pst?p*s*bkt
+f*n*swm@-p*sXCtÐwGykr*sGt~lfk
+-lms*tt$
+-mrfGm]k*sGy*s$
+tk$ŒpGfGp
+bA&fklmnstGwx]yGkGl:nn*s]twxk*yntGl*n	¡r*s*twxCk*mšrGstfGk*nr*st
+2r*n*s*t*yšlgn?sGnNp*s*tb!folGn]rs*t±fkšlÈn
+Írs¯t*yNkGmn!^stgx*y.ifGl¯s
+
+ñbfklmGnrstx*yGl*sµtbTklÈns*t*y*k*ngr*s*tGx*nës*t*ylpDr­sGtGkPr*stixNhmr*s	@b6k>Hlnr*s*tšl*nësÁt?fl*sgn,s*ygl*sršsGw?t
+bfkTlmnrstAxZšyln€k#YyGl*n*s]tlgnApss*tGy
+<bfklÈnst?wx*yll*sIn?r*s*t*k
+-én?t*y*r*s¯tGmn*s*ttmÄn*s*tnl*s­s*ygbXkèt	bÜfyh$[kšl@ins*t	b*fklànG
+sëtNx*Ol6n
+4sèt*y
+fÓbfkmmlmnNpstw^#x*y
+'bÊkNl's*tÅyr*s]bNfpGn*s
+/t€kšls*stÜfgfšl6nGt
+-Gkšl*mGnr*sGt0Mx*yÑk*s]twxGyEÒlwm*sbfklmnGprstwgx*y
+ólCtlgnGr*x6ns*yl
+mnGswrGt*k75n2s]t*yGb*sGtGklGs*ns*t*x*yÐkmNr,sGt*šw*kn*s(l*sixGk]l*sGbGkl*sGt*sStG@wmGn*sGt]_f]kl*n*stgnFsèt*ym~	ph.nk*n*s*t*@bfÂhklmnprstLcwCxCy,lrGy­lGm]twx	AkŒlGmGn*r*stNyëtGfhlGnÈrTs]twxkGn,wsšt*yTk*sGyGknsbl2sGtGyNsGtkšlGmÈnostGf*sGtGnp]r*s*tGy	tt*st*suxBtšl*mÈn*st'r*sGfGkÅn*s*tGybfGhklmnprstPwxylykgnGnÈr*t	whlmnGpswtx~	tnËmGsn*srÂtwwkn2sGtGyksGys*tklNm*stlrÊf*mk$rÑb*klGnGsGt*n*st*yG@"klnsrst*s
+ts]twxfšr*s]nës
+ab*snGs*tGy*n*sètGk*nGs*t
+-ºfNh¹lmn=ªr=­sÙtGy õk
+'bCmÈn*s*tØn*swwFífm*sbb@bfklmnprstwxys|tikGklnTrs]têy
+GbfskNlmÈnsÁt*x*ylwb*n*s*twxGkšl*nIsGt
+TbklniprstCxy€n*s*t*ykGnCs*t*m*s*t*y*lNn*t]r*s÷xl*n*skb\fhklmnprstJôwwxyllxyr2lNnCsLr*sGxÇb*n*sÈt*yn*stkm*s*tGkqsKb!nGstwx*n;{r*s*t]lGn*sGtGm€n*s*tb*nÈr*s:Ìt2fwk*ln6r*s*t
+-én*s
+)`@bc&hkšlmn7fpFstwyG@GkGn?lNmn*stgygh*sGkn]t	bT\f*kšlGnNrIs*t-fsfšlÈns|DtGkGl!t*@bfÇklnprst÷wxGy;l?nGt-fnCt:gnGstwx*yGf*nšr*s*tGst*nšr*s*twxGkGnrs]t*ylAn*s*t*nPr*s*trÂkGlGn*s*tx	Ms]Šr*ssfgl*np*stGxm*s*b@ÇbÏfhklm(nGrstwx*yÇn*p	Çbl€nNpÈrsGtGy*s*t*y*k€sGy¯s6t
+GblGm*stfGn*s*tskkybfshkµlwmGnpnCrY¢stGxG,y*sGtëxNnGp÷bšlgnqsGk]lGr*sGt?xšlÀns*t
+bfklímnrstwx*lírG@¿k*s*tÆyGkGp*s-fbÇkGn*sotx*yGn]s*nCstšrësn*tGns*tšlgnsÁt*sGxcNl@bfbDhklmnp­rstwxyklm.ilgt]_bGnGrgt*lGnèrs*tŒk*k/ylnCr*s*t*k:@s	bl€nGprst*yArn?rs*t*y$fšl6nrsFÿl*n*s*t*nqsÁt*yJôb)$lGn"p*s*tk­lUPnst*y
+-O @blm6nLrsGt*x6kühGn*s]twx*y
+jnÇbGm*n*sÜtbÂlGnst*y*tPxkm]s-WyÇbÑf§{kn*sGt
+»bfklGmns*tw*xy¿kGrstwÅyp*sngfÉtkGmrsGyl*s]tfÙkGy*nsGt*y*n­sAtf*t=r1Bl*spk*n*s*t*yGmGn*t
+ðbGnPrs*t*ybgl*n*sktG9xGk]t
+f÷klCmnp
+stwGy
+©bk*s*tÆy# twxšlèr*s*tix^l@DnAkGl*n]pR>r*stJôbfB hkl
+smnGprst?wy?@slLr*sGtn's*t*yCl*nGs&ðt]kGm*n*pës*tGyëkšlmÈn*stÐw©^nk*swxšlgnr*sgk	Tl*n*sGk
+-
+-ln*stGw*nGs*tix	šlmnßp	¡rs*t*yªhtlÃm*nrIs*tKwgn*sštGyšlgntAks
+å@bDklmn(5prs*t?w*nsGt2x*n*s	ÿtwx*n*s*tgyrG9y­f*kGnGsik@bfhklmnprstNwx]y÷mÈnsGt*yIkGn*s*t*y]l*n*sZštGl*r*nSr*s*t&Žh€nst]w*yGl#gr*s€nps*t*wClGns*t*y
+-
+ÍbNhW kl€n
+àstëx*y*k*s÷t]lGnGrb!n6$stTbGk*n*s*tKyl*shtn6$s*t
+b-ffgklmnpPrs5tx*yNnrgk*n*s*t*ypGtÇbGnGs*tÁl
+-énCl&îm*s*tšlGpGt	bGf*kwmGn*sÅt*yklGtCl*n*s*tobCf]klmn9(prs]twwxPy-k!ömGn]pst*yGmGn*s
+twxGsGyGkl]stt-ssbGkšlgp-€stsGl*s*xGfGr*sCtGyfm*sGtr	ÿn*sÇt
+yGbGngpstkÇn
+ps¯Ék*s
+]@bfklmnprstGkGln	Tp#YrssytgxGkgx^k6p¶l]nPr*sfl÷m ns
+tn	¡s!æt	hlkAm
+npstGwkKs
+l*n*s
+t*k*lwr*sbf€k*lGmn*sGbf.Æk]lšrVs*kTlØns*str*sk*n*tbf	¡kCnptlNnGrgs
+-tk*n#5s*tÄn@­st*x:ÿsËtGymgl*stAkElr'kqsGy
+@sfkNmnprstx+sËtGyßkl	¡mÈnpdsGyßn*y*l*sýtwx*sym*kësštGy,7sÇtS@*nGr,s*tk*l*nr*s*tGylGstwxk*n*s*tTyrnÅts*yšlGmGn*s*twxr*nGsGtÈk
+l]nTp*s*styk
+lm*sgtxYr€kXCst
+Íkqs	¡kGklnp¯stxk*sy­h*sùkpßm­r@bfhklmnprstwxy
+bKkl%ÍmGnþpr:stwGxyGlrGtµx*ks*y*ln*sßtGlirCr*tGxl*smsn·@tlb
+[sG@ÚbwfGhklmn8Uprst*wxy7l@¢n*sGtwx	T@bhkl*m¡n?pst÷wx*ylr?lúsšpItlúnr*s*tG@gn?s*yNn*yGmp*s?tGkl»n	Gk7¬lGnGp*s]twxGy?kGnn*r*skšl6n*st]l*n*s*tGr*s*tfGkGnGs*tGy
+-
+-n*s*t	GkšlCmÈn*p*s*tGy	bºfGk
+2l@in*sÁtGyIk*nèr*sët*n*s÷x
+@bS>fklmnrstx&eyÇnGrb5mürl¡n]sctwxKt
+]fkCmnpèr*stàwx*y*n*sDtwxTÚm*n*s*tb*nèr*s*tšlnšrGsbn*stxItšr*sGy
+-ŠAblkšl€nNpstxGy-bÉf4lGn*sšt*y	!fšl*mqn­r*s*tGynGr*sbkGlns]t@y*Æm*n*stwxNm*n*s*t]s!tx
+©b­l]twxqt
+abflCmòn*st¿kšl6n*sktÅyCm*n*stwxGy*fAnGr*s*t	bM\klCmànsët*y*n]s*t*yGmGnGtn*s­lšr*s
+GbGklmnGprGstwxy÷kGtAn*st
+qfGn*stgn*sGtr*s*ttr%k]twx@bfhklmnprst7Üwxywl6ngkIl?1sGtGl"n*sµtGxGmNn*sulGns&étGwCx>Wt
+*@Gb,Ûf]kmnGprs
+-
+-txywk*n*stwx*nqsGtwxb*nÅstwx€fšr*sf*s*tšlGmÈns¶r	*knpÚrGstw)$xMÎst*nèr*s*twxlCm*nrs*tb*n*s*tgx]swx
+ðb*n*s*twx€kHs
+:ÌbfåhklNm*nrstwxGyl*s*tÅy]fgx)Ûswxs*y
+©b*n*s*tèsGtwxbGmGn*st€k	?rwx%mGnr*s*tGyGk]l*sGy	sf]kolIn*pGr*st*l]twx
+-GflmGn5Äpst¯xybn*stAl)
+tklšt*yëfšl@in*s*t	bëf©kAn*sëtwxyGnp
+bfkl\Ümnp,ÛstGwwxy­lšryt*rGtGblNr*skGpèkNn*tšlm*sCy
+-b!f­l ÅmGnr*stwxGkôllGnÉsÁt
+DkrnosbnG@bfklGmnGprqstÇwwxylllGn]twx*f6n*yl*n*s]twxšlûsèt*y€k­s€t*lGmn*s]t6klGr*s*k*nÑr*s*tixGy*bl*sGk*swt=n*s*n$_p*sGt@bf:3hklmnprstwxy*mGn*s	G@Èk*lGnr*sGtGyGk*satwxk¹lnr)
+stwxsmkGm*ns*tGy0lGnsbÈn*s*t*šyk*s÷wKKr	bmnrstwx*yn*sot$ kf*k*nGstrnos*kšlgnå@f6k]mGsAk*ns*tGyn*sµtGy
+#ëb2fklÈnÇr¯s*twx*yk*sTk*sGyGf/k
+n,?r*stCxGk*nrs*twx*k*n*s*tGykšlgnGstwx0n*r*t*fglGn*sGt@gl*nGpr*stAk*sGypcmNn-Ws*n]twx-b
+màn2sýtwx
+-fkšlmGnwpÉstGylgn*t*y2Op*@šl
+n*s*kšlGn*s
+b'fØk­lnr*s!t+xyšl*st,s*xGmgnësGyGnp*sNr*sgkglnCr*sGtGfnGp*s]h*nPr]st·l*sg @bfhklmnprstwxy*syl*sk*sly)k
+-9fklÈnrs¯tNwyGbGt	sf*kn*pqstNwy*n¬Gr*yGlÀmGn*s*ttGnTr*x*k=lNngrsGm]s]kn
+-bkglnCprGstwx*k*nèr*s*tGyfšlst*ksfÁs>tksGy*m*nGs*tÈngpstox*yšlB n*t*npArës*t×lngt	
+mCt
+-ÑbklnrstxGylGn*s©Ìk*s*ylën*t*stGy*nrÑbctwxTŠb!fÆmAnr	wsëtgkgsbn*s*tl*n*s*tklnrst*ygnGswmGnsCt*y*ns*t­lTÚmÈnr:ÿstšl6n*s*yšlÈnGr*s*t*st*n2s*t€n6r*s*twxGyGklqns.tF
+s*y
+	
+@bCf8Áklmànp*stªf*nšr*sGt
+k*mGnkm*nôs*tšl*s]twx?p
+!DbdŠfGklGmÈnrIstGyk]twx*ykÿl*sGyGsgtGy*@Gk*n^sItGn]r@*nslAktf€@bfhklmnprstwxy-€k9l*n	Xr*st÷xW&n*sGkl
+©mGn*sÈn*sGt*yGlGmGsYtGy
+bªñfGkl*mnrstwx*y2ñlt*m€n­rs*t*yGnÁsGtxÇy*klGnGrësýtwx*yGk*s|t]r*s*tÃwgknGpstGy]kšl*sGtšlGn*t
+©b*n¯s*tGyGk­lnïr*s
+¿týtx­bwm*n
+rstúxCm*n*s*tGy*nèr*sGtGklGnGpr*s*t*sGtPyp*stU*r*f\Ün*sëtGy
+bfkla7m¥np)
+r3Ñstwy*lkr
+l]l*p*sk*n*p*s7t*y+dtspGt
+-bGkGl$
+-mGnår*sGtGywmGn*swïn*@bfhT^klKòmnrs	
+txG,y6kGl?l6r*sGtÅyGk:It]fGmGnsG
+t*yšln*s*twx	¡l6nGs	\b*kšlÇn*rÁsÈtuxfGlGmnqsµtxrnlkGkgn*str*scªl*sGy?nGr|DtbšlnGp*st%ïl*n*s*t
+©tbGlAnCsGtwgxGpÇršnG@bfklFÎmnprstw*x*y?lr*sÅs*tln1:r*s]twxNnèt*y
+-fkm]nrstwx
+cy
+ðbTkTnsýtwxGynÁsRtÑbAnqs*tÊt*f*n	¡r+s*tNknGst*xþb²n*s*tl?r
+-fkGm*nyrstx*y*n*s%twx$>rtwxAnšr*s*tb€f/Zn*s*t*s*twxbGntwxAfAn*s*t	TlX.mnwpstxyAl s»tGk*n,r*s*t
+Ínµr*sBt
+*kšlm5SnGp·r]s­twx?yn_,t@bfhklmnprstwxyºfwl*n*s*tGyGklnGnrsUµt1Bm>ÑnsÁtx*y!mGn]tGlGswm*tÐw
+@bklGmn4+rstGwwx&eySÀnlGn*s*tPm*s*yGkInNrqsÁt¯y*sylfs­s*nb5tbfGl*n*s,tpy^r!fšl(ns*tNw*y&îmþp*t{w*k*l*str
+:Šbhklnrstx*yšp*sšlm*s@t*kèt¡n?rAstwxy*nšr*s*tNy*nLsªfNhlm*n>¯sGttrÙk*sGyGm*n*s*tGyGl*stGy
+-b
+ófšlÈnrs*tixGy6klgnGsGtGynf]²l*s
+bGfkmn]pvrsgjt*xoylGsGtGyCs*sGtwxGyNnsG@±flGsšlÈn*s*tTwgxbfNhGklwmnpwrstWÌwylØn*sµt€ns*t*yl€nNr*s*t*kn2s*t*y]@šlGs¢&tl*nèr*st
+Õn*s*tk*n*p*s*t?l+Un
+-
+-t*f©k*lèr	wsGtgs
+­@bk«lFmnipstx*y*l?nGrGtsblCm(nstwx
+-bšlGmgnr6stwx*yšl*n*s*t*y*n­r*s*tNbšl*s
+bfklmnpñrstjxystn$ xkGlmnrswxqr]sb*n*s*tDx
+ðbGlÈn*s*tb­l*n*st­s4ñt-fk}7lnrs]tx*kt;Ík$]n]bpýswxGtDx)lgp0stDx
+ðb*f*nr*s*tkgnstwxrf]twxb*fbGlÈn*s*twx*k­stHxšln*s*tGstFÿllNnrstGwnštn*s*twxèsëtbTf*n*s*twxTnt­r*s]·f¿kS£l*n`rGs*tl*s­hTlÈnrkàsGtGyGn
+©t*lwmQ0np*s*t
+b7ffkl!ñnèrst÷wx*yGkl*sgk*s*yk*n*sGtyGs]twxf*nhsi
+fkGm*n*sßtGy*lšr)/s*twx-fyGpCtJâlGm6nVÙsGy
+bfklmnprstGxyGkWl­l6nT@*s]twxGmAnFs*t*yCkšl6n*sbGsrÂtNn]s*n*stxGygp
+r
+fAkGlGm€nrs*twixGyŒlGrgk­lGmGn¹@!Dkñl*sbfklmnGprsÁtswxGyl*s6n	¡r*s*y*lnèr*s*klèk*n*s*t*y]kGln*sšlGmnGsGtHìhlAsGykm*n@-p*s*tÐwmnGyn*s*s*tixn	Il*sb]liInGr*s*t
+-wfÜklGmB²nrst*yr*sGtg@³m|s|m2sGyèm
+klAm(n-WpsCtw*x?yl*@Pn?n*s*y)
+t]lwmbfklmnprstwwxy	GklCmnPrs¥t]y;f]kCm*n*sÁttGlCm*n*s*t
+-2fkälCm€nrGstwr&étwxbn*s*txsšlgn*rGl*n*s*t
+Ç@fklmnprstwx*yr*sb*n*s*tGy*nKKr*s*tbf
+cmr>s]twxGn)­twxbfps]tRËbtAnGr*s*t>s<ztbkGnstxGytwx€f*n*s2t
+l*n*s;twx
+©b*fšln*s2t+nëstwxCm*n*sAtGyÂr
+bkmnpGr{Est
+-óxÅybBl*n*s*tCmAn*sýtwx!DbnbNntwx*fAnšr*s*ttl!ntwx f*sšlÈns2t*tgxb2fn*stwxTfšlAn*sAtšl$3nGp
+]sGt
+bfklnr*stPwxybCm*n*s]twx¹k*yšlqs]twx	Gfgk­l(n|Dr*s*tGyn
+|l	blmn>stwx
+y.ãkÓl*stŸDwCm*s*tÅyšlgn
+rqstwx*y³bNnšlGn*stwxl*n*s*t*nÁr*s*t
+G@bfhkz^lmnstxGklyrkl¿mrs2žtwx
+-óxnœx33trÓtkIlm
+HpàbNn*s6tšl€sAt:n*sAtGy	kšlCmnrs*tGyúrŸDkGl	¡rGtAl*ns*tgtn*st	¯kl*mnrstxCmns*t^#x
+cy*nnr*s*tCm*nGr*sAtsfstb*nèr*s*twxCmD9n*sAt	¿bf0Pk(np]stwx
+©bGlAn*s*txnl*n*sätwxšlÈn*sAtGy		bëfGlCmn]sAtxTb2fAkn,sëtxGnAsM5n*s*t
+-bmfkGlnps*tPy2ñl*n*s*ttf*n*s*tk*s.ãt*stwxÑbëf*n*s*tšlGmgnp*tkwt2fhmGn*stxinb.lb]m*nór*s*tyl
+bfklmnoprstwxGyl(n*sGtqsyt¿kŒln:@s*tÅytk*nësÜt*f
+jlmGtt	bCkÈnèr2sEÇtwx*ynàpœæsGl*s
+-õtGy	fkšl*n]stxGy*k
+-ltwx2fšl6n?sTbGn*s*tbk
+Cnstwx
+cytDxb&Ôf*n*s*tixtwx
+ab2fAn*sëtfAn*sttfGh*kšlgn*stºf*nwr*s*tb)|lGnr*sÜtwxÅfgkgsb]kn7twxl7fm*n*s*tNkt
+ln*r*sšlx4+rbfhklmnprstwxyl]sGt*xŒls]twxhGknrstwxµtksGtGm*tfGn*s*tb€f€k*nšrsAtJjs
+Çbühkšln"/p	¡rstwxyTk*n*s*tGyIk*nGsGtGf­l€n'r*sßtGykS©wG@*knGsGtwxWbnstwxGm
+-t*yëfšlgn*s
+byühk­l
+sm€n*pGs{twxÐhšl*sGl]nGr+U@BÑbfhk­lmnpúrs]txGyl?n?r
+-éltrlGnn*s7twxngr*sGt©tGklymGs€tl*s*tþk*n*stwxy*m*xkl7¯lb*k*lLlGn*sGt
+bGfh­l-€mB²nIst-€xGyhÓkbGl*n*s*twxGkl
+©mgn*s*t*n,s*t*ybCmGnGp*sëtbÚflGnsnM,klGm
+-é@GbfhklÀmnp
+rst*w?
+xsyNlGn
+s*t*xGlúnns*t*yåhfnsGt*yG@±fm*sínšl*p*skGnd¬stdµl*ns*t*yG@]l*sy4Q@4Yf4jn7yst±fw±fnjn*sGl
+Ìm*n*st*n*pÇr*s*t*ylmGnTrs*t*yGns&)t*y&œnbŸDfklmnprstwCxy)­lGr*sGtGkílNn
+r*skGnrGt*yifnGtnGp
+-õt*kësGy
+-GbfklGn2rstwxþbgl9lQr*s£k*y*sKt*kGmGn*p*sGkn*s*yÜkik*sCtm;n*sswyN%sGy
+pwmGtGx]fNkGn*s
+bfCklmnprst?y6±kl*sGnGsx¯t-€n*sy@GnpnGmNsmGn¹5s5t*@k
+s]t	f?hklGn:grsÒt¿kGs*tÅyl1:r:s©Ìk*skCtpcrCln¯s*t'ksGtGy€n6r*sGtbflnptn$®kk	ÿsÇt*s@tp£rÇtGxGfGpxYrsf*k*s@bfhklmnprstwxybAfhoHkmmlwmnprstgwGy?nÅtlgnCtGswtJYrws€n]s*twpt:nr*topr*sGn*sGßw	&Žfkld¬nrstGxÜn*sÈnqsÁt*y"Rfih*kn*stx*kès€tšlgntsf*sGy*m*n
+;{bfklnT\prst*w¯yÆkGmCr*s*tÅyCngsGt*kngrstGyíkGsGtÀmGsGtbGm€n*s*tk2sÁt]t
+.xlÈns*t
+-*b*f-€kGlmGnGpGsGtn­sAtbfhzklmnprstwxyGkln*sgnr*syt*yân*sGyLctGxI]lGrGsGxÇl*mGsGfGkn#5s]tgx*y*kGstšl
+s*kn*sGt(l*s?tix
+åhk­lwmGngrÁstÐw*yšlGns*tGy6l*nGpGsGt	GfGkCm!np2s*tGy
+ÇbNfšl
+ÍmnÈps@Òt70w0Mx*y*lGs]tV?x
+sb€fkTlmÈnGprsûtwxGyµp*tglqsGl)nN%s*tGy]kGm*sšlnGp*sGt*yl*ns*t?n*yGm*sNw@bfhklmnprstwxyGm6ns
+št*y	6fhhl
+-
+-nrGsGtGy?fn*sÁt*ysGk*s*tPw
+hklPm!n;¿rÅs>HtëxµysmNnF<sÇnwx6n*sGw*ylGs:ItCm*s@>NbßfµÕklâmn?prstGw÷yCr*kÑm*yºk*ns*tGmGn*s*twxGm
+nvsètGn*sKwÇl*sÜs*y*b?k*lnst?x*n?r2s¯tÇb*lGnt*n
+-r*s
+÷bf­hkšl6nrstGxGy?mGn*sÇn*r*sÞblGn*s|tGys*ywkšlnr*s?wGn*sxšlGn,s*t*y	klGnàpr*stGwsn?xpz
+sèr2sGl
+jnsGtñwGy?fšl*n*s*t	<áf6kTl2mnp*st­h*n*sgkwrItbnr*sGtGyÅ®lk*s[Bk
+bf­hkl²æmnrstw>Wx*l*rNslgm?nGr6$s?p*sGwgl*mstwx*nër*s*tGf6nqsètygwnGs*tgxJj@TlIns*t?f*np*s*tl?sn*s*tGy'r*lšrGtG@*lnstGxwy-fswm&ÜnpGrÅs*tÐwNbAn*sGtG@bÝfhknlnp¯rs]tNw*xGyl*sGtgy*stGlYtNl÷r
+-és*t	kfNhkl*n]sGt*xNnwr*s*k6n?s*y	]lGm*n]rs*t*x*y*fþkGl*ns*tGy@)bfhklm€nÇprst]wxy*kirNlr*m*sGt
+*ÒflmÈnprsGtñw]x*yšlgm*nGs*twmGtgkGr*n*sGtGw*y*kInr*sèt*yësGyGkGnsGt
+-b*k*lwmGn*s]twxGys€l
+bfklÀmx#np*sCtyGk*lGr?lGn*sotGn*sst*yGnNr*sbfhklmnprstwx
+-
+-yGkl]nÇr*sÅ
+lGkGmGm*nwr*stwx2f*n*s*tnsýtwx*yšlGmGn*sGt]lNn*r*st+(rÇbšl*nGs*t?xGlGnGpr*sskl€ns*tPw*yEk*s*yšl2mÈn*s*tofŠkGl*s,twG@?pšlGmgn*sG@*n€tNl*pGtGl€ns*tGl*n*sGt
+G@kln*prs
+-ítsw*yGr*sGtGn*s÷t]xgl*nèr*sGtGy€nqs*t*x*yin*s*tPwbfhklmngpDbrstwxy9lGt*yWb¿kGr*s*tÅyGm?rswm*n*s*tlÏn6rGs]twxNr Åkn]sÁt*y*lnGkšlÏmstb?hšlGn*s*t]y*f­lmgn2sÁtlgnNt*y	Ñbk­l*n]p*s*tyl*rwp*s5@gk
+l*sn€n*sNw@bfklmnprstxÜysmlAÃnwt¿kjQr*s*tÅy
+-G@hlNmnrF&sœ;tGyptJjnšls]tgxt*ks[stÁs]kNn*s*t*yGk]nûs;twxµyGlGn*t­hGk*l*nGsÁt	6k*nrs*t\w+x*y€ns*tt~Xnkl*n*s*tšl6nkÛtbf­ klmn6prsGtNwwxGyIlNnGÊr?1sl6n*sGt*ybšlnsÁt*y>!ltG@ClnGr*sNsGt6hšl
+¿mvsGtGl*n*s*t*šynss&ðl@bfhklmnprstwxIy*sgwGklInr*sGtGyGk;Ín*kl*sGtwxGyGkv
+lGnCrGsGtGxwfGl*nGsGt
+CfGkl*ýmnGprsCtNwgnr*st*y*nNs*tØr*yfGkMÎsrþnNfÅn]s?EfIk	¡lnûsÁt*y?@]kCln*sGtbkšlÈmGnsøtGkTn*s*lGr*s
+Gb±f*n*sGt*y?fGkGlprwsofþs7twx
+-]b
+qf1ølGmnGrs*tGyhgkŠrGsšlGnQós*t
+*f¡ªkl@mnp
+stíw*yb*s*yGsIt?r*sGtGkGnsgtGyånbGlGn]pGrhsÜt	CkGlGmn*st*w]xsCrGkånGps]tånb5klGn*stgf*n*s*tšl6nGsbfEòhklmnprstÆÚwwxyGlnwsGtŒlílLrkGnNlGn*sGk*n*pœr*stwCnÑfÐn*s*tGkGm*n*s*tGy]f
+)tGbk*n*s*tGwhyÈswšx6h9Xk*l*n€r*s@bfhklmnprstwxyGmA&n*s*t	wh$sklnrIs]t*yG@Gs*yGkGs*k]l	flnrIstGxµy*n*s*tÅyNbsfÈnrsGt*y*k2sGy(sGxNl~n*s*t*yÚf4lGmns*t*yGs6t5b*s*tGh]nbfhCkl"mnprsžtNw=xGyGklGnyrGt*kgn*y*l:@sGf
+-
+-l*sAns¬t*y	?fúhl*Æn+(pèrGsGtf*yNnr*sGm]n*s*tGyñhwk]m*np*s*tCrbfhk­lmnrstw+xywl*sGylTmGn6±r*sGtGx*f*k*s*bgfNbglÈns*t*ywkglGnsNy?fl?w;kšls*s€¯tf¯kGl.Æn
+Œp*sGtl]msyrDëkšl6n*stGyÁnsr
+bh÷klxmn9prs¯t2xGyG@wrÜk(n+Cs*yåhèr,sGtGngr*s*tsf*t*n?s*tbGn*sbn@bfklsmnprs*tGxµyolNmNpÀr*sŒlPr€s­l*n*sGy6mGn2s*y*kšl*ns*tix?y*m*sþtwkwl®[n*s*tßk*n*s*t*yyk*n*s=tyn@
+bklwmnNpstwsxyGnsy
+
+ObGfwkŠlÈnrs*tCx*ygn*s*kGnqs*tCkšlgmGsGt
+-lÌzmÈnpèrstPw*yèrsixsfxlir*skÁl
+-
+-nrs*tCyGhGl*spck*ns*txGyk
+õ@GmsGt*ySkhn*s
+bfklmnrstwx|yGkAÀl*nÇr*sGt*flGlµp*sÇt*íf*kÈnèrsGt*y7ÜnGtåh*nGs5t*f]kGlLcn*sGtAk?lGn*stGkGnGkÇl*n*pPr*sÇln*sšlÊ€n*pCtbfhklmnpstw]xy	*k*lGmhnèr'sGt*y]l*nNp*st:gl*m*nr*stJ
+f]pfglr*s*ns*t	b*n*sMtwxÈns*t¯y*kGm*n]pst÷fßmkGnªsšlgnr*sfGm*kGyk¡lm*nGs*tbGkTlAnr*s­f?p:Ìt5nr*saµt÷xk
+-
+-t	5b
+÷km*n*stxGy*sMt	sbf
+lmnGp*sCyGlGr*ss*s2tGn¯s,tnGxosèt	ºbšlGmÈnPrs*tGy*nGrGtëx
+-ébGls2ýlns-€t@­m
+-J÷bkdµlCmÈnOšpst*yGkíl	ªñfklnwrs:tGy-ff[Bs*y*nGsGtbf-fhklmnprsCtw*xGy+k*lH6rGlCr*sGkšlwmn
+¿r*sµt*@Gk*n*s*t?f6kns*t*yStGkÝsbkšlGnñrs*t6kTrNk*sGt*sÇtr*t*kGmM¬nGs*t*y/êk
+lGp*st?fGp*s2tGfGk*l
+jns*t
+-bGflwmÈnrsGtCyG@*l*n?s*t*y
+fCklwmnrs]twNynkGmGn*s*y]k*sGyin*swmwtiflGmÈnNsCk*y&@bfhklmn]prst]wx*yGk*rÝs*tÅy*lNnt*s	Tx*st	­hGlGmnstx*yh:p*stl*s*tCfGnrhsnÇbgÏr
+Çb­hkGmn]p*rMÎstw*y
+n*s*tåxG@*k*pGsGtGnÅsGt*n?s*t*x	G@þbGhÇln]rsÝyšlèr*sGt÷k*tk€nÁstxbr€lGns7t*xr*mCtkGl*mGn*sb
+-Gbwfµkl*mnrsñwkG
+t*y]blsf*f
+lAmGn*stGnyrsGt*y	GklXVmGn6$s*tGxGyn*s*tbr' kGfGkTm*stGns*twmÐwùZÃëãÀ
+	¡YesÁ¶
+*œútpÁS
+GP"TÁe.­ó
++lgn*sk*yÐksGy
+m*n*s*t*yšlsmgn	Tb?#fÈns.ÖtNwwx*ygklÁm*ns:tµyVÉsèt*yik*n*s*twxGyb*füho7klmnr*stÇwwxylyr*sGpAs*yn*sGtšlgn*st­l6nèrsÑbf*n*s*t	Nb€kšlCnfrsÁtÇwGn]sètüh15m*n*s
+bfklGmnrstCxyWlGr­l]m*slGnrs*tès
+tqsGt*y*kšlGm*nsGtÈns*tGy*nqs*twx*stän*sh6p*slmng@lÈnrsGt*y*st) t@bfhklmnpLôrstwxGn
++s
+ yllwtgmnwîs*k*s-ygmtÇy
++ÄrbNlmnrft	yZÈsGy1ëf}+yktrl
++àyG@fr*s
+y*k,s*kqsms@tCxtr6tFVpr*sp
+ ybkstyt+Hyx
++àroy*sŒy
+èktslTmTngp	UxgkGtmrk
+>m
+bfkflnpHdrstwxGyZlrgt*y
++kM7lÃrGnCrk*ln*sGtÁs!twklGmn]r]§s
+œt*ks*tGyskGl*ssb2fGn*sGtlf*n*s*twx@bfhklmnprstwxyGnsš@GlArG@°lGrGtwf]lrÍnsx;t
+GbÃh]kd¥lnrstCx4ÏyGfÁstšl­r$¯fGsTtt7YrlGn]r]txgn2sèt*y žkGnGpst*yšlÈn*sGtwx/jm*sGy÷bnGr*s­kGn*six*k*nstGl*n*s*tgy
+n*s #lngpEÄr*s*k]t*@
+m*ngp2sGtGy
+fkflGmnPrÉstGxyl6nGlGyybGkGskr*s€nIpl*s8Bf@bfghklmn
+ìprst""wxyAul6kèl-Yr*s
+×klgnÐsGl©nrsGfGlGmt)l*sGmGnCs¯t*yGkm­n*sGt*k*ns*t*nGs€tx­lèr
+XbGk*n2stwxGyëfAn*s*tGtryšl(Ðn	¢r*sštGx7YnghglÃwå@Tn
+sbGkClCmnGprst*ybGk*n*sGt|mwr*sf*npr*sstLÜwg@ÆnybGfhkl
+dmn*prst<wµxy]k*sGtAn*tG
+lGnGr*stFTp*s	kšl]nrs]t¯x*ys*n*sKtsèt*y*m*n*s*twxšlGm6n*sGtGkšlGstk*n*s*tlšlr*sGk*l
++
+ns*t*y	šbfklGn*sCtGyŒlgnGkGl*sës*yGk­l*n$rÅstwxšl*nGs*tGyÇk*nGrs*x@bfhklmnprstwxyGngr*sLyblnNrÈsqÉtxlsèt*y
+ tGf*km*n*sgt*s¬t*s5rtnl	¢r*s
+bkl2«mnrst]wxyl*nr*s*tkAnqr]stwxÉfGr*skn*s]ty*nÁs€tR{ sklÈnGstx	Tb!fšlÈnPrstGyGf*sGylGnÑbk­lnðsµtGyGsTxšlénTr*s€tixµy	þbAfk	¢lnrqs*tl*nGsAtTxGl*n*t*ynl*n*s*ts*yl*n*skgsÇtb¯lns]t+àt"ExsÅt0ót
+
+vfklmnprstxwyCmn*st"ExtwxAfGl*n*s*t	
+fGkmns]t
+Äx*yb*nS
+p*s*twxk*lGsibúptk2sg@fnstgxGykrb*n*t]f]l¿pgr*stÏk
+yk*s)x*s*twxÅy	b]fGkm.¹nstx	bn*sõtfšlÈn*stšl6nÔsn*slf*nšr*s*tmšrstylGr
+tšl6ntgl*n7¢rGs*tGysßm*fkGmr]s*txb9l
+dm*n*slgn	¢t*y*l*n*t
++lGnšlksn*s
++fklmn­p
+styëkúrGlgm*n]6s]twxk*npSpvs*t*ynZÒr*s.Ök*¹s*t*nr*s*tGy-ªnGtsÂtdon*sdot
+@bfklmnprstxGm*n*s.Ölyrlgsn]s*tt*kGrÔsk*sp4tGyn*sstšrx§nsU¥twx*sHtl*n*stwxGfmnt*sgxAfšlÈnrstGbgkšl*n]stGy
+·kGmAnšr*s*tGy	
+ bf-k­l*nr*stšl6n,sklgnsyt
+twxnGp
+@Ghk­lmn}pst»x­s,ðt*lGn*rs*t­ln*sxæls¿xbCm*n*sAt°lAnpGstZAl*sGmGn
++TbGfGk­lAmGnrsGtGn*str*s
+bklCmnrstxy	@l|Çs]knýtwxts*n*s
+t
++
+kn
+Ës*twx*y
+kNnôst*nr*s*t§nätgx	fkGm)"npstwx	rctr°x5rp]s*ttgx	€fÆkšl6nr*sixGy*lGs*yGl*m*n]stxy
+)r
+Ÿn4Áx*shtGynëstwxlCm*n*sätwl*nknpGstwxGy*nstwxtr*s*n*twxIf*n*s*tkGsAtb7Yl*nF
+s*tgxGy@bfklmnprstwxygs
++
+tyGptr*sx*l)n*s*tGyb*n*st"ExGfGn*s­ln]pr*s
+Ztwxk*n]bptwxf*sšls*m*t"kGs?tyt*ns*tTb€npGsõttwxAf2sNkšlGm*nGstÑbšlCmGn*s*txkGnrqsttwx!f*nGs*t*nësÁtbAfNnëstwx*fšlGn*s*tÅk*nqs*tbšlÈnsÁt
++kl-mnr&
+stÇwylësk6nIsTt*yNsGyšlÁsItTxGk­l*n*s]twxk*s]twxtëtwxGl­m*s)o@µnA@nmGn*sp((@bfwhklmnprstl5xy!r­ln*s*tÅy*n*s
+îtwx
++sblmÃngrstxGy*n?r*s­t*yNn*sTt
+kšlgn*s]t°b
++äf,n>@r]sAt
+ðkAns*tJ!yknršs§nätwxklKâm*nstx*fGmGn*sgkl*nTrsAt­l]n2sls
+m	úk*lGnGpstwxGyëfGk*l	bkGlmGnAp]st*l"nn*s*twxGyšl*n*s)twxm*nšr*s*tyqnpk*n*s*tNf*n*s]k
++gnIs	sblCm€nrs@t*y*n£r,sšt*y15nÆsTbÑfAnGs*t@bfklmnpG2rstwxy
+)mGnNsySpGkl?n*ygnsèt*y	TbklÈnr
++s #tÅyšl*swxk6ns*yTks*yn*s*t	­lÈn$fpstGwwx*y*f*nrr*s*tkmnGp*s=xt*ytr*ksns*tšlfm*sGtCklnGrsAsGy
++?@&b
+hfklGnGp!stšlm*sštqsèt*yGk­lõpèr*skBnrtxstšlgnësèt€f*sGy*n*stwx
+
+b2fl*sšbÉf*n*stšl¡n
++àr*s*tbfklmnprst*wGxGyÈk*lGtkšlm6nGrdsštTl]snêslnFVrstn
+ss¿t$Pn*sTtæn*s]twx]klGnpEßrstnlêsrxns*mõt<ltGmrnGk}pßst­yl	¢r}%s$Rk¢nr?ÒsÔt$RntAfÆk	Gkl*¹mGn*rqsÁtGygns*y*mwxkntnpSrGs êtr*sktrrl}%k]tGk*sItGlnbl*n*s*t"fNk*n*sx
+@bfklmnpstrpsÇtGysb<lyszxk
+sln6stHt*y*kgsTtgxknstGk*st«r*slrys/¶t@Gk<l*sGy((m*sTx€klr€k*kGmÇpsGy@bfhklmnprstwxvy*wlGnGr*s*twxgn*sÁtGy]kl.amsgns*ywpGnGsGt	GbklnrGsIt+wk*n*s*tGyNbšlgnrGsGt*ysÁt*m*n*sõtwxGn*stk7
+tGk*ns*tTkmns*tGx*y*kÐsGyGstCkgln*sGt*stgk*l*s*t
++b-klGm×nPrstxs*yGmõtësÁtGy
++bAkšlGmGnèrsGtGyqlNmGpgt*fI
+r*s]t
+bfklmnGrstx8Žy.ök*s*tÅylr*s
+vy/¶fkCm*n*s,trw1nGk­lsÀy€n*s*twxfGk"n*sq²tmk­lgnGrHsytšltsy*l
++gmGn*sGtGy
++
+büfgk­l=?mnp*rGst(tw*xGy*kGsixb­lNnûtwx]lGmGnr*snàs€fGnr*sGkswxGy­tšl]n*sGt
+NbÑf6hGklõnPr*sGtPwix2sgtbo7fskl[mnßpGrstwGxyGklwtn*yr*sèt*y'nGtfgl*nGst/llšlGn*sGtb*n*s¯t*k*nGr*sGkTl*n*s*ts­t\n
+@sbGf?hkl
+mnrstk
+n*s$frmnswlsGy*kTt*n*s6€tGn
+r*skwx	Uy	f
+hklmgn*st*kLsOs*¢y
++
+ntlGn$r*s*tGn*sxnßkNs*ygy@bfhklmnprstwxy
+f­h+Hkul*mnrs*tGy
++l&
+tµkGm*sx;tqs]tsküx
+G@GbfklnrstTxsyl*n*s*t*kun*s*t+nr2stgxÅs*nèr*sf?hk*nstl*n*s*t*k*ylªnwt*nir*s*t"fGkGl*n]stµyÇkl]bßmGn÷p*stšlm6n?sSp*bGk­lGmÈns*t*mGn*s*tbfhklmnprst]wxGyÇnrGtx?nýtwxfEl*nr*s*t*n]sb*n]stwx*n?{r
+bfk[m@[n?{rstx*ybGn*r*s*t§nstxflGn*s*tšlgn*sytšk*yfÈn*s*tšlgnytßnàtAnšr*s]twxnrsgn*sGy
+çbl*n]pHstwx*f*nèr*s*t	kšlCm+nèrst
+ÆxÑf*n*s*t@bšlgn*s?wGnÇrb*nr*s*tr¿s
++bfkGlns*txÅyÆk*s*tÅy
+ rtwxëfm*nŽr*s*tt(r*s*n]st] xšlGm*s*n*sqtbCmAn*s*tbln*stTxs*y*swxgkGl]n*s*t
+bGÜf9kAlCm€nGp?r*s*twxGyšlCmn*s*tšl*nšrds*t
++bGlmo7nfr8Žsft]xyl*n*s*tútn*ss*sgxtr
+Ztgxà@bfhklmnprstÛwxGyGkèln*s6€tGyÄs*tlnr*sGttwx
+ b*n*s*tGymUpÇfln*stwxmµbswx
+
+bn*sdot	¢lGs*t*fAn*s]twx
+bkšlmnrsûtwx*y*lr]tgxl]twxbn*s-ªtwx*nqsGt*nqsÁt
+hfšl6n*str*sBn*t
++bwfwlnp-r*s8Žt)xnn*sAt2xstbGl*n*sätwxql­nqs
+Zt
+
++
+bfhkl
+mInrstgxkqmqn]twxr*mGsPrs]twx,st*y}[k*sès
++*twx	klÈnp*stwxGynrm*nb*n*stwx*nšrIttls*ngxr*stk*n*twx;twx	"k]lm*nr*sëtxqn?b*n*s*tfn	bGl*núr*stwxÅyl]rqs]twx
+G@Gkmn]pstgwxyøn­stëfšlÈn*s*tTb
+fCm*ns*tànGs*ts?t
+bëf­hGkšlmnpst)xGy*r*s*ynšl­sGt)l
+Zt?fGnrGs*tbn*s*t$fxGy
+bfklGmnrsJt*yGl7Yr	b¿kšlgn*sTtwxÅy*n­r*sAns*yšlgn*swx<kGsGtGn*s*tGyšln*s]tèrGsbfNhkGmnprst*wxyGklGtGn*sÁt*ybGk
+n*sAt	k*lnèrstwxGyšlCm*nsšl@[n*s
+twxb¡n*s*tk*nwpN3st]x*n*txl*n*s*t2s*yl]sÇtPy*n*sftGyÝb"kGmwSn*stwx
++bfgkmGnÇr*s2tGyšlgnsèt
++ànn*s*tl*six*nTp*s*t
+bfklmnprstxy]klnrst€ns*tkuxFVnbCm*n*s*tgx*l*s*tÅyb¿kGl*n+sGtÅy) lBbnr]sGtfGs|t*s*tÅy*st*np*s*tl*s*tgybnrr*sÈn*s*tàkGtGfºnørstCxGyGk¡n*stwxr*sBn7twxcf€kGnPrs*t*nGs*twx]klnr]s]tm*ns*t^ync­ttltK
+s	¢sAtdkGkgm*nGs]tÅy
+f"l6n'¥r*sàt
++&b*ûklÈn
+frs*twxµy*n*s]tgx*ykGn*s*tGn*s?yÚ@bfhklmnprstwxy*l*sGt
++@kÁlnrs]twxÅymr*s]twxSs]twxNs÷xCm*n*stkCm*n*s*tltt
+f'¥kl
+np¡rst
+Üx*yŒltns]tgx*yrGkCmGn*sÉt)žknsGt­yt	àbCklnrs]twxc­sšl*ns*tx?ntwx*fšr*l9
++r*s*mNn*p
+*ffk­l]mànpr*stwx"k6nGs]lGmÈn*stCm*n*s]twxGy@|bfhklmnprs) t­wxGy
+èk*r*sPwGsx;tGnrGf*s*yšl6nqsvâr*sInGp*stxGy¿k]s*ngt­f*t[2l]nbGklGm*n*sGtlnsGt*yqs*yBlGsNmGn*s· b]fGhklmnprstxylk]x)n*swx]kún*sGtwxfknsÁtwxyb*nGsýtwxšl*nätxb2fCm*n*s*t*n?p*tnšl*n-styCm×n*s*tlPr*sgr]t
+b;fhk8úmnpürstx*lýtwxnës]twxúkr
+ZmGsftëfGln
+Zs*ttTb*n*stx&Çfkstwx&Çfob*n*s*tbÑfCm€n*sGtf
+ k*n3ÄstPw)xÐkGnèr]s*tGy
++°bÚfGk¬lÈnrstaPxl€nës]twxGy2fšl*n*s*tGy*kn]sb*n	Nbfkln)"stGys]t]s\t*y¢kšl*nIs.ÖtbGn*stGybf6hklmnprstwxy*@Gk,ÎlmyrsGtGxókút	sbl*n*ps3Ät^xPyOÇsGtgx*n*r*sGt	lwmnrIst)x*y*n?r*s]twx*ybSlCm*n]sëtwxgnwx]l
++bfÇhkn*stwxy*l¿r
+çbn*s*tG@
+Ztgx­s€t*fšl×ns*tbn¿pÁr¯sÈtlàn*s*tGy
++ s@b(Ðl×nstwx*yQìtGklGm6n*y*sÇwGyºfšlCmnrs*tAl
+@bkln*prst"Ex*y*stÝbf*n*s*tn*s*t"xµy¥tšls2«t	xþb2f*s*yk*nôs
+KtwxPy­lýtwx¥f*t]§fskGn*s*tkn*s*tGy	bCfXl
+dm*np*st!	nTb-fgl×n*sýtwxbfklmn9pr@Òst-Ywfxs~ylnGtGtx¿k°lÈnwrHs*t*yšl*n*s]twxCmGnE<s*t*y*s]tgxÁstTx*stOÇs
++nbk­lGmn*stwx*y*stwxÉf*nr*sAtnb*n*s*tk*n*s€t)@!f*s*t	bGfCm*n*s*twxµyš@Gl*n*sGtbn*p*s*t*xGlšr*skmn*slsb*n*s*tblOÇsi@xrAnK4@bfhklmnprstwxyGklþr?s)t]kGn*st*y*sÜtGy	¿kl*mqns]tgxy6np*s*y*n
+sbGk*lúnGsIt
+wblmnµprstGwx
++GfkGmGnqrsätwx*y	¢sšlGmÈn*s*twxn?ÒktšrfGmNn]twx*kGr*sGy*s¢t_)f*n*s*t/'n	bfknstwx*y/rr*s*n*tGyksÆtGyšlGnGsGtGm
++
+n*s
+ twx*f*nr*s*tGp*ybnpIstwxstÚk`r*s*týtwx*n	Yr*s*t	bk­lm*n]stwxGlyrNl*s*tfšl
+n*sÁtšl6nytls]tGykCm*sPytgx*ncr*s*tbfkGlCmnGp?#rstgwCxÅy
+twxbl*n·r*s]tgxk*sBsgx
++lrGstwx7sytwxbAf*l*n*s*tkšlGns*txlúlm*np*s*tZ)k!fšlGn*s*t
+
+bklGm×npGr]st]w*yfµnÁp?sr*s*n*s*tGy]f*yÞlGkGnGpr*s*tb"kln;smk*y
+bAfklmnšrs*twxwfJ1k*n*s*t*yc­n*s*stš@GkGn*s:tNfmnGp<Ér*s*tTkNnJÃs?m*n]p,sGt
+µfkl]mn]rs:ñt]xGybfn*s*t*nCp*s*tNb*stbGn*s@&Ïbf*h
+ZklmnprstwGxGyl*tNnHs*yGbnGr
+vn
++tÇbl*nGs*tgnVÉsèt*yCm]n*s*ts)tún=átlÈnPrBs*t*@*n*t@Ákl@mÈnst0msèt*yµtÇbGh*l*s@bfhklmnprstwxy
+büflmnIp*rs*tw?nÇrgyn*s*y
+ypšl
+¶mgnSKs) t@zgtCy?s
+¶w*kzqsGtG@bfhklmnprstÞwgxyn*stqsGtlm¿nrs]twxèlGmgsÉf*kX
+mCtklmnrsttwxf*n*s*tšlgnBsèt*nstYf*s)rNnpGtNkCn¿t1k*nõrst?pÉs¶t
+nr"kGfµp&ŒpGtwxkänr*sÅsGydfmnstGyšlns.twxšrÁs€t
+dn
+>r*s*yk)rstxB€nr*s*tRyssb2f*n*s*tbGl*n*s*tlÓnlm*nst2xk*yân*sxsmsf6k*sÇw*kNl]nprt¿lHÜbfk6s*sr°x?kgrm*s
+hknstn*sGtwxGkšl*sGx?@Gn*sGy
+fihk]lmn6p*rstwxy
+nGs
+dm%<nrwx]bpfòbnsp*s*t*k	tt*làn*s*tnrqstwxGyGstx&Çf*tblýtwx\klGn*sbtGyÆs*ytx
+ bAf*n*s*tn*lšr*sn^s
+sbfk`ÁlÇmnÇprstiyGk]twxGl*ns*tgxßn*s5twxChkdnS°p*stwxAf*n	¢r*s*tGkt?#rTl*nr*s*tµl*s
+kü@bfklmnrstwxy*l]t
+çbØl*ns*tixÅylnwpèrqstwx*n*s*yGmGs*fZÈn*s*t
+NbGkšlàn/ÝpstGwúxGy*n*sÜtx-nšlgnsGy
+rGt)x
++G@fhk*n	psrGst?lÇn*lGsGtG@7(n*s*t7eybklnstGyl]6nsGtšf*syt*y	¢lGsGtl*sGy	Xb*fkCmén*stÇwk*nspèrsl*s$àtwxgf
+b*klGm·npsGtlwµyIl?nbfGnys`­f?stSl*l7Yp*tGnGr*s
+t
++GbÇf
+vk*lGmnCrGstks*h
+vn*s;@bfhklmnprstwxy]lnrs1ët*yNfGsësGx	S.fGklo7nNrIsGt*y*n*sft*ywlr,sGfNslmÈns]tGw*yG@*ns*t*ybf6hk	¢lmnprstÇwxyGkll*s*@B
+l*nr*sGtl*nGp*s*t*s*xcmsGtt2[r*ssGt0p*sGyGlGn*st*nr*s*tl*nGs*tGm#(s:)tGy*f*l*s;t
++*f@kl*mÈnšrIsëtGxc>lGnGps*t*y*n*sGtÇw
++bflnps;t3Äx*yGk*n*s*tlnr­k
+ZtwxnGsTxXzkf*stk]txl*n*s*twxlÈnPrs*t*yÚfkšlp]stwxr]b¿pkAtwxn]sxi@<bfNhklGmnprfstx*yk§l*s*tÅy
+nwx*n*r*s`twm*nqsÜt*y"s*k*lGn*s*y
+
+¶bµfhkl
+dmnrs*t*ygl*r	Um*nâs*t*yCfšlGs­lGn*s*tGylGn]syt*y	sfk€lnPr*stGy6r*s]tGh*skGn£sbf?hklmnpstwxCyflGnsGt*y	¿k­lÈnGp]s*tTxÅy
++b
+MlnGpGrsýt"Ex*yßb¡k*nsÁt*y	!7bh]knp*s*tVxkšl8Žt*n*s*täx	>ÿkÈnspNrIs¯tTx*yÇblGnsty*n]§s*t*nr*s*tl*m*sCtsfn*s:tGy+4k
+b2fGklGmnrs*tGysGydon*s*twxGf*l*sGt&ãyGmÈn*ps*tkšlÈn*ps*t*y
+@yêbfkl
+dmnpstAux*y­fšl*s?lØnÇrEHns*tGy*fgk žk0nsèt*yŸkGsGyGkjnGtfšlGmgn*sz
+tx
++lgn
+G@
+Xb2fAkwlgmnpr*sGt7eyG@šf*sGtl*n]twx
+bGufklmnrstÉxGy/rft*nGyNbkn*s*t*yk*sGyGrNsèrGsk*lnGs*tGyglGsšl*n,s*tšlwm6n5tÇw]l*sGyGnPr*s*t?y
+ÇbNkšlwmn?prs*trw*yøl*nGs*tGngt
+bõhkl*nGprsJItwfkGp*sGb]kGn*sGt"kCtkGpir*f*sGt@bfhklmnprstwbYx>Ýyºf*n×r*s*t,Îl*nrÁsätGxGynëstwx*y*nšr*sÜtGybfhklmnprstwl5x*l3ns?bmÆpÅstGxn*sAtl°t*pGt	bflmnrstòngnrgsfÆkfkTlst?s¡?tr+Hstl
+>tgxsšlgntn?nr*lt¡okUktk(õs£mpt
+lÆrfÆkgygrfgk6n2sÅt*yòl*kÆlGnptlr?st?y'f6núffGklNmzŸnÁstl?fúk6n?s€ylUrs¡Žk*y£l§n|prst*yfkpst5lUk?lÆfÆk*y?s*tgxNr*yfk¡ŽlGnstGyÆl~Árl*sÅt}tgxšlGnpt/Ýkrës
+fk
+ðlmn/Ýprstgx*nsn*nr*sfG@Tbgnst6n*t
+Dt*f*mGn­rsšy(%f
++?bf.hhlnprstgngt*lgy*n
+ðrµfGnsGtptglgxrkýtgxm*r;n*@?lUn) rGl]t
++klGmnst­wxGyG@*y*ngrGs*t*fŒk*sGtb!ÊfwmÈnÇr*s*tšln*slGs	+kšl]mNnrGsGt*y2bln]ps*t*y*nGt*y¥f­lqsÁt
++NbfklØm*nTst6wxsGn*pJ3rs*t*yQk*ylnrs*tgwGy*nâs*t
+GfklÈn*p
+rs.°tw?xyàfNnGs]n2s*y2stGk$1rl*sfkNhGmGn*sÁtCybyfhkl&ám>Ãnp­rstÇwxyGkyrntls
++
+lGn	¢t*yspwsšlGm6n*sõtGnÉsGtwxCy­l*n*sTlfÈhk­l.°mnprst?wxGyh*n*s*tàmšlGstp*sGn*stšlÈnsÁtGyGlwp*stGn]Or*t	¢r*s*yGkGn*pGnIs*t*xwy@bfhklmnprstwxy
+büfšl·nrstTw*xGyGn*s*t*yCn*tTln?k*sblÈnrGstCw6nyt*yšl6nGr*sßyln]r*sswTx Tk*sGtØlGrGsGt
+bgf6hd¥l
+>mnårs°t*y0kårGst:k*s-átNbŒktGk*nbhkšlmn+p
+rstNw¯x*y:Yl*krs*yp¯@Gmkünšl
++
+skšlGn*t*fTl*mn
+r*sGtësètn?s*y @*sG@Kâf
+vhklmGnGupâr5êstixGy§n*s*yb0lbkGm*n}±p)žs*t
+èblmGnrst
+hf6kmÈns¯t*yzn*s$¯tbn	nf*nGs*t*t9xGnt6r*kn2slštkšlGm
++
+nqstGy4âs*tGn?rk"l7Ïn*st?wIl?m?r*nr*s*t[2kGs
+fµk­lm·nprstwxy*sAµt
+lGln
+p*sCysp?xop*s k*slnGp*s*tÃkšl*stk·r@šlwr*sGt$Rs@bfhklmnprstwxyGp*sGt
+f@IklGmnèrs/t2x*yGk*n*sGtGwGk*nsGtblGn
+¶r*sàtGxÈk*s*xGkÈnsGtGw*y6lEHt
+bfshln?prst)x*yGk*lGt
++lNrNs*k*nGrGs*t*yGkšlGnšrGs*t*m*nsµtgk(tm*s<lt
+hfm.rètn*s2sGy	hn2lmbÖnrst*y
+©núnGp¿sètGkGnGr*sGy!7bGn*stkÈrÇblGs	TblnCrstxGyPk*sPw*yK
+r*sšl6n]tGfGm€nsÁtGyšlÈn*sGt
+bklGmnNpr3Ästx*yl*s6nsèt*yrGntsèt*yšl6nGtgxk*lGsGt*n?r*s*tb*flnsÁt*y
++äflGmGnrqsGyGklnGpl*ss*ybfhklmnprstOëwwxCy·k)lÇn*sGtAkb­l*sGk*lGm*srYsGm*sGt\khn=s>tNwwx¯yn*st*stl*s#(sèt*yTl*nr]s€t0ÄxGn*s*y*làpJIrGsGt
+NbfÈklGmnpsGtGykNlGt­l*n*sGtwxGn#(sèt*yåh*sGsTtykGn*s¯tgxgnÇršlÈn?s*tGk­nârIsGtsf*nsGtG@bfhklmnprstwxy­kšlgn?s6klqnsGtxÅy2sètlGn*s*tgn*s	¢t*ydmr]tGws*w
+bGklmn
+
+rstx*y	šl*mAnr*s7twx*yGn:pst?p*s*bkt
+f*n*swm@p*sX3tÇwGykr*sGtulfk
++lms*tt#ýmrfGmTk*sGy*s#ÿtk$¯pGfGp
+bAfklmnstGwx]yGkGl:nn*s]twxk*yntGl*n	¢r*s*twxCk*mšrGstfGk*nr*st
+)r*n*s*t*yšlgn?sGnNp*s*tb!fflGn]rs*tšfkšlÈn
+Ÿrs¯t*yNkGmn!Qstgx*y.\fGl¯s
+
+èbfklmGnrstx*yGl*sµtbTklÈns*t*y*k*ngr*s*tGx*nës*t*ylp4r­sGtGkPr*stixNhdr*s	@b6k>:lnr*s*tšl*nësÁt?fl*sgn,s*ygl*srsGw0t
+bfkTlmnrstAuxZyln€k#LyGl*n*s]tlgnApss*tGy
+<bfklÈnst?wx*yll*sIn?r*s*t*k
++àn?t*y*r*s¯tGmn*s*ttm³n*s*tnl*s­s*ygbXzkèt	bÜfyh$Nkšl@[ns*t	b*fklànGsëtNx*Bl6n
++sèt*y
+fÂbfkm\lmnNpstw^x*y
+
+bžkNls*tÅyr*s]bNfpGn*s
+ t€kšls*stÜfgfšl6nGt
++Gkšl*mGnr*sGt0@x*yÈk*s]twxGyEÄlwm*sbfklmnGprstwgx*y
+êlCtlgnGr*x6ns*yl
+mnGswrGt*k7(n2s]t*yGb*sGtGklGs*ns*t*x*yÇkmNr,sGt*w*kn*s(l*sixGk]l*sGbGkl*sGt*sStG@wmGn*sGt]Of]kl*n*stgnFsèt*ym}÷ph.ak*n*s*t*@bf°hklmnprstLSwCxCy,lrGy­lGm]twx	AkŒlGmGn*r*stNyëtGfVlGnÈrTs]twxkGn,jsšt*yTk*sGyGknsbl2sGtGyNsGtkšlGmÈnfstGf*sGtGnp]r*s*tGy	ut*st*sux9tšl*mÈn*st'r*sGfGkÅn*s*tGybfGhklmnprstPwxylykgnGnÈr*t	whlmnGpswtx}÷tnÂmGsn*sr°twwkn2sGtGyksGystklNm*stlrÊf*mþk$rÑb*klGnGsGt*n*st*yG@"klnsrst*s
+ts]twxfšr*s]nës
+Xb*snGs*tGy*n*sètGk*nGs*t
++ºfNh°lmn=r=sÐtGy èk
+
+bCmÈn*s*tØn*swwFßfm*sbb@bfklmnprstwxys|tikGklnTrs]táy
+GbfskNlmÈnsÁt*x*ylnb*n*s*twxGkšl*nIsGt
+TbklniprstCxy€n*s*t*ykGnCs*t*m*s*t*y*lNn*t]r*s÷xl*n*skbJfhklmnprstJäwwxyllxgr2lNnCsLr*sGxÇb*n*sÈt*yn*stkm*s*tGkqsBb!nGstwx*n;mr*s*t]lGn*sGtGm€n*s*tb*nÈr*s:Ÿt2fwk*ln6r*s*t
++àn*s
+)S@bchkšlmn7Yp=stwyG@GkGn?lNmn*stgygh*sGkn]t	bTLf*kšlGnNrIs*t-YsfšlÈns|2tGkGl!t*@bfÇklnprst÷wxGy;l?nGt-YnCt:YnGstwx*yGf*nšr*s*tGst*nšr*s*twxGkGnrs]t*ylAn*s*t*nPr*s*tr°kGlGn*s*tx	Ns]r*ssfgl*np*stGxm*s*b@ÇbÏfhklmnGrstwx*yÇn*p	Çbl€nNpÈrsGtGy*s*t*y*k€sGy¯s6t
+>blGm*stfGn*s*ts\kybfshkµlwmGnpn2rYstGxG
+y*sGtëxNnGp÷bšlgnqsGk]lGr*sGt?xšl·ns*t
+bfklímnrstwx*lírG@¿k*s*t·yGkGp*s-YbÇkGn*sftx*yGn]s*n:stšrësn*tGns*tšlgnsÁt*sGxc>l@bfb4hklmnp­rstwxyklm.\lgt]ObGnGrgt*lGnèrs*t³k*k/llnCr*s*t*k:2s	bl€nGprst*yArn?rs*t*y$fšl6nrsFñl*n*s*t*nqsÁt*yJäb)lGn"p*s*tk­lU@nst*y
++O@blm6nLxrsGt*x6kühGn*s]twx*y
+[nÇbGm*n*sÜtb²lGnst*y*tPxkm]s-JyÇbÑf§hkn*sGt
+²bfklGmns*tw*xy¿kGrstwÅyp*sngfÉtkGmrsGyl*s]tfÐkGy*nsGt*y*n­sAtf*t=r15l*spk*n*s*t*yGmGn*t
+çbGnPrs*t*ybgl*n*skt	xGk]t
+f÷klCmnpstwGy
+ bk*s*t·y#twxšlèr*s*tixUl@6nAkGl*n]pR.r*stJäbfBhkl
+dmnGprst?wy?@
+óslLr*sGtn'us*t*yCl*nGs&ãt]kGm*n*pës*tGyëkšlmÈn*stÇw©Knk*swxšlgnr*sgk	Ul*n*sGk
++
+ln*stGw*nGs*tix	šlmnßp	¢rs*t*yªUtlÃm*nrIs*tK
+wgn*sštGyšlgntAks
+å@b4klmn((prs*t?w*nsGt2x*n*s
++twx*n*s*tgyr	y­f*kGnGsik@bfhklmnprstNwx]y÷mÈnsGt*yIkGn*s*t*y]l*n*sZtGl*r*nSr*s*t&§h€nst]w*yGl#Zr*s€nps*t*wClGns*t*y
++
+ÄbNhWkl€n
+Îstëx*y*k*s÷t]lGnGrb!n6stTbGk*n*s*tK
+yl*shtn6s*t
+b-YfgklmnpPrs5tx*yNnrgk*n*s*t*ypGtÇbGnGs*tÁl
++ànCl&ám*s*tšlGpGt	bGf*kwmGn*sÅt*yklGtCl*n*s*tobCf]klmn9prs]twwxPy-k!émGn]pst*yGmGn*s
+twxGsGyGkl]stt-ssbGkšlgp-stsGl*s*xGfGr*sCtGyfm*sGtr
++n*sÇt
+yGbGngpstkÇn
+vps¯¶k*s
+]@bfklmnprstGkGln	Up#LrssytgxGkgxUk6p¶l]nPr*sfl÷mns
+tn	¢s!Ùt	hckAum
+npstGwkBs
+l*n*s
+t*k*lwr*sbf€k*lGmn*sGbf.¹k]lšrVs*kTlØns*str*sk*n*tbf	¢k:nptlNnGrgs
++
+tk*n#(s*t²n@­st*x:ñsÂtGymgl*stAk<lr
+kqsGy
+@sfkNmnprstx+sÂtGyßkl	¢mÈnpRsGyßn*y*l*sýtwx*sym*kësštGy,*sÇtS
+@*nGr,s*tk*l*nr*s*tGyrlGstwxk*n*s*tTyrnŒts*yšlGmGn*s*twxr*nGsGtÈk
+l]nTp*s*styk
+lm*sgtxGr€kX3st
+Äkqs	¢kGklnþp¯stxk*sy­h*sðkpÍm­r@bfhklmnprstwxy
+bBkl%ÀmGnþpr9ùstwGxyGlrGtµx*ks*y*ln*sßtGlirCr*tGxl*smsn¥@tlb
+RsG@ÚbwfGhklmn8Hprst*wxy7l@n*sGtwx	U@bhkl*m¡n0pst÷wx*ylr?lúsšpItlúnr*s*tG@gn?s*yNn*yGmp*s6tGklªn	Gk7lGnGp*s]twxGy?kGnn*r*skšl6n*st]l*n*s*tGr*s*tfGkGnGs*tGy
++
+n*s*t	GkšlCmÈn*p*s*tGy	bºfGk
+)l@[n*sÁtGyIk*nèr*sët*n*s÷x
+@bS.fklmnrstx&XyÇnGrb%mürl¡n]sctwxKt
+]fkCmnpèr*stàwx*y*n*s;twxTÊm*n*s*tb*nèr*s*tšlnšrGsbn*stxItšr*sGy
++Š.blkšl€nNpstxGy
+bÉf"lGn*st*y	!fšl*mhn­r*s*tGynGr*sbkGlns]t@{y*¹m*n*stwxNm*n*s*t]s!tx
+ b­l]twxqt
+XbflCmén*st¿kšl6n*s\tÅyCm*n*stwxGy*fAnGr*s*t	bMLklCm×nsët*y*n]s*t*yGmGnGtn*s­lšr*s
+GbGklmnGprGstwxy÷kGtAn*st
+hfGn*stgn*sGtr*s*ttr$øk]twx@bfhklmnprst7Ïwxywl6ngkIl?#sGtGl"n*sµtGxGmNn*sclGns&ÜtGwCx>It
+*@Gb,Îf]kmnGprs
++
+txywk*n*stwx*nqsGtwxb*nÅstwx€fšr*sf*s*tšlGmÈns§r	*knpÚrGstw)xMŸst*nèr*s*twxlCm*nrs*tb*n*s*tgx]swx
+çb*n*s*twx€kHs
+:ŸbfåhklNm*nrstwxGyl*s*tÅy]fgx)Îswxs*y
+ b*n*s*tès5twxbGmGn*st€k	@rwx$ømGnr*s*tGyGk]l*sGy	sf]kflIn*pGr*st*l]twx
++GflmGn5·pst¯xybn*stAl)tklšt*yëfšl@[n*s*t	bëf©kAn*sëtwxyGnqp
+bfkl\Ìmnp,ÎstGwwxy­lšryt*rGtGblNr*skGpèkNn*tšlþm*sCy
++b!f­l žmGnr*stwxGkôllGnÉsÁt
+5krn^sbnG@bfklGmnGprqstÇwwxylllGn]twx*f6n*yl*n*s]twxšlésèt*y€k­s€t*lGmn*s]t6klGr*s*k*nÑr*s*tixGy*bl*sGk*swt=xn*s*n$Rp*sGt@bf:%hklmnprstwxy*mGn*s	G@Èk*lGnr*sGtGyGk*sOtwxk°lnr)stwxsmkGm*ns*tGy0lGnsbÈn*s*t*yk*s÷wK;r	bmnrstwx*yn*sft$kf*k*nGstrnfs*kšlgnå@f6k]mGsAk*ns*tGyn*sµtGy
+#Þb2fklÈnÇr¯s*twx*yk*sTk*sGyGf/|k
+n,2r*stCxGk*nrs*twx*k*n*s*tGykšlgnGstwx0n*r*t*fglGn*sGt@gl*nGpr*stAk*sGypSmNn-Js*n]twx
+b
+m×n2sýtwx
++fkšlmGnwpÉstGylgn*t*y2Bp*@šl
+n*s*kšlGn*s
+b
+fØk­lnr*s!t"xyšl*st,s*xGmgnësGyGnp*sNr*sgkglnCr*sGtGfnGp*s]h*nPr]st¥l*sg @bfhklmnprstwxy*syl*sk*sly(õk
++8úfklÈnrs¯tNwyGbGt	sf*kn*pqstNwy*n¬4r*yGl·mGn*s*ttGnTr*x*k=xlNngrsGm]s]kn
++bkglnCprGstwx*k*nèr*s*tGyfšl~st*ksfÁs>	tksGy*m*nGs*tÈngpstfx*yšlBn*t*npArës*tÄlngt	mCt
++ÑbklnrstxGylGn*s©¹k*s*y|lën*t*stGy*nrÑbctwxTb!fÆmAnr	xsëtgkgsbn*s*tl*n*s*tklnrst*ygnGswmGnsCt*y*ns*t­lTÊmÈnr:ñstšl6n*s*yšlÈnGr*s*t*st*n2s*t€n6r*s*twxGyGklhns.tEýs*y
+	@bCf8Žklmànp*stf*nšr*sGt
+vk*mGnkm*nôs*tšl*s]twx6p
+!7bdfGklGmÈnrIstGyk]twx*ykðl*sGyGsgtGy*@Gk*nUsItGn]r@*nslAktf€@bfhklmnprstwxy-k9l*n	Yr*st÷xWn*sGkl
+ mGn*sÈn*sGt*yGlGmGsYtGy
+bªÞfGkl*mnrstwx*y2ält*m€n­rs*t*yGnÁsGtxÇy*klGnGrësýtwx*yGk*sst]r*s*tÃwgknGpstGy]kšl*sGtšlGn*t
+ b*n¯s*tGyGk­lnàr*s
+¶týtx­bwm*n
+vrstúxCm*n*s*tGy*nèr*sGtGklGnGpr*s*t*sGtPyp*stUr*f\Ìn*sëtGy
+bfkla'mnp)r3Ästwy*l\r
+l]l*p*sk*n*p*s7t*y+WtspGt
++bGkGl#ýmGnår*sGtGywmGn*swÝn*@bfhTNklKâmnrs	txG
+y6kGl?l6r*sGtÅyGk:;t]fGmGnsGut*yšln*s*twx	¢l6nGs	Jb*kšlÇn*rÁsÈtuxfGlGmnqsµtxrnlkGkgn*str*scl*sGy?nGr|2tbšlnGp*st%âl*n*s*t
+ tbGlAnCsGtwgxGpÇršnG@bfklFÀmnprstw*x*y?lr*sÅs*tln1-r*s]twxNnèt*y
++fkm]nrstwx
+Zy
+çbTkTnsýtwxGynÁsRrtÑbAnqs*tÊt*f*n	¢r+s*tNknGst*xþb n*s*tl?r
++fkGm*nyrstx*y*n*s
+twx$1rtwxAnšr*s*tb€f/Mn*s*t*s*twxbGntwxAfAn*s*t	TlX
+mnwpstxyAls²tGk*n#r*s*t
+Ÿnµr*s9t
+*kšlm5FnGp·r]s­twx?yn_
+t@bfhklmnprstwxyºfwl*n*s*tGyGklnG^rsU¥t15m>ÃnsÁtx*y!mGn]tGlGswm*tÇw
+@bklGmn4
+rstGwwx&XyS°nlGn*s*tPm*s*yGkInNrqsÁt¯y*sylfs­s*nb%tbfGl*n*s#tpyUr!fšlns*tNw*y&ámõp*trw*k*l*str
+:bhklnrstx*yšp*sšlm*s@t*kèt¡n?rAstwxy*nšr*s*tNy*nLsfNhlm*n>¡sGttrÐk*sGyGm*n*s*tGyGl*stGy
++b
+êfšlÈnrs*tixGy6klgnGsGtGynf]¢l*s
+bGfkmn]pdrsgYt*xfylGsGtGyCs*sGtwxGyNnsG@šflGsšlÈn*s*tTwgxbfNhGklwmnpwrstWŒwylØn*sµt€ns*t*yrlnNr*s*t*kn2s*t*yT@šlGs¢tl*nèr*st
+Æn*s*tk*n*p*s*t?l+Hn
++
+t*fk*lèr	xsGtgs
+­@bk«l=mnipstx*y*l?nGrGtsblCmnstwx
++bšlGmgn|r$stwx*yšl*n*s*t*y*n­r*s*tNbšl*s
+bfklmnpèrstXxystn$xkGlm	nrswxqr]sb*n*s*t2x
+çbGlÈn*s*tb­l*n*st­s4ät-Yk}%lnrs]tx*kt;¿k$Pn]bpýswxGt2x)lgp'st2x
+çb*f*nr*s*tkgnstwxrf]twxb*fbGlÈn*s*twx*k­st9xšln*s*tGstFñllNnrstGwntn*s*twxèsëtbTf*n*s*twxTnt­r*s]§f¿kSl*n`rGs*tl*s­hTlÈnrkÏsGtGyGn
+ t*lwmQ np*s*t
+b7Yfkl!änèrst÷wx*yGkl*sgk*s*yk*n*sGtyGs]twxf*n_si
+fkGm*n*sßtGy*lšr)"s*twx-YyGpCtJÒlGm6nVÉsGy
+bfklmnprstGxyGkWl­l6nT@*s]twxGmAn=s*t*yCkšl6n*sbGsr°tNn]s*n*stxGygp
+vr
+fAkGlGm€nrs*twixGyŒlGrgk­lGmGn°@!7kèl*sbfklmnGprsÁtswxGyl*s6n	¢r*s*y*lnèr*s*klèk*n*s*t*y]kGln*sšlGmnGsGtHÜhlAsGykm*n@p*s*tÇwdnGyn*s*s*tixn	Jl*sb]li8nGr*s*t
++wfÊklGmB€nrst*yr*sGtg@¡m|s|m2sGyèm
+klAumn-JpsCtw*x?yl*@Pn?n*s*y)t]lwmbfklmnprstwwxy	GklCmnPrs¥t]y;f]kCm*n*sÁttGlCm*n*s*t
++2fkälCm€nrGstwr&Ütwxbn*s*txsšlgn*rGl*n*s*t
+Ç@fklmnprstwx*yr*sb*n*s*tGy*nK;r*s*tbf
+Zmr>s]twxGn) twxbfps]tR»btAnGr*s*t>s<ltbkGnstxGytwx€f*n*s2tùl*n*s;twx
+ b*fšln*s2t+nëstwxCm*n*sAtGyÂr
+bkmnpGr{3st
++êxÅybB
+l*n*s*tCmAn*sýtwx!7bnbNntwx*fAnšr*s*ttl!ntwxf*sšlÈns)t*tgxb2fn*stwxTfšlAn*sAtšl$&nGp
+NsGt
+bfklnr*stPwxybCm*n*s]twx°k*yšlqs]twx	Gfgk­ln|2r*s*tGyn
+sl	blmn,stwx
+y.ÖkÁl*stŸ1wCm*s*tÅyšlgn
+rqstwx*yªbNnšlGn*stwxl*n*s*t*nÁr*s*t
+G@bfhkzLlmnstxGklyrkl¿mrs2«twx
++êxnœx3&trÁtk7lm
+9pàbNn*s6tšl€sAt1n*sAtGy	kšlCmnrs*tGyúrŸ1kGl	¢rGtAl*ns*tgtn*st	Škl*mnrstxCmns*t^x
+Zy*nmôr*s*tCm*nGr*sAtsfstb*nèr*s*twxCmD+n*sAt	¿bf0Cknp]stwx
+ bGlAn*s*txnl*n*sätwxšlÈn*sAtGy		bëfGlCmn]sAtxTb2fAkn,sëtxGnAsM%n*s*t
++bdfkGlnps*tPy2äl*n*s*ttf*n*s*tk*s.Öt*stwxÑbëf*n*s*tšlGmgnp*tkwt2fhmGn*stxinb.lb]m*när*s*tpl
+bfklmnfprstwxGyln*sGtqsyt¿kŒln:2s*tÅytk*nësÜt*f
+[lmGt|t	bCkÈnèr2sE¹twx*ynàpœÓsGl*s
++ìtGy	fkšl*n]stxGy*k
++ltwx2fšl6n?sTbGn*s*tbk
+4nsÿtwx
+Zyt2xb&Çf*n*s*tixtwx
+Xb2fAn*sëtfAn*sbtfGh*kšlgn*stºf*nwr*s*tb)olGnr*sÜtwxÅfgkgsb]kn7twxl7Ym*n*s*tNktsln*r*sšlx4
+rbfhklmnprstwxyl]sGt*xŒls]twxhGknrstwx£t\sGtGm*tfGn*s*tb€f€k*nšrsAtJZs
+Çbühkšln""p	¢r	stwxyTk*n*s*tGyIk*nGsGtGf­l€n'r*sßtGykSwG@*knGsGtwxVÿbnstwxGm
++
+t*yëfšlgn*s
+byêhk­l
+dm€n*pGsrtwxÇhšl*sGl]nGr+H@BÃbfhk­lmnpúrs]txGyl?n?r
++àltrlGnn*s7twxngr*sGt©tGklymGs€tl*s*tõk*n*stwxy*m*xkl7¢lb*k*lLlGn*sGt
+bGfh­l-mB€nIst-xGyhÂkbGl*n*s*twxGkl
+ mgn*s*t*n,s*t*ybCmGnGp*sëtbÚflGnsnM
+klGm
++à@Gbfhkl·mnp
+rst*w>ÿxsyNlGns*t*xGlúnns*t*yåhfnsGt*yG@šfm*sínšl*p*skGndstd¥l*ns*t*yG@]l*sy4D@4Lf4]n7lstšfwšfnjn*sGl
+œm*n*st*n*pÇr*s*t*ylmGnTrs*t*yGns&
+t*y&°nbŸ1fklmnprstwCxy) lGr*sGtGkílNn
+vr*skGnrGt*yifqnGtnGp
++ìt*kësGy
++GbfklGn)rstwxõbgl9l?r*sk*y*sKt*kGmGn*p*sGkn*s*yÜkik*sCtm;n*sswyNsGy
+pwmGtGxTfNkGn*s
+bfCklmnprst?y6€kl*sGnGsxt-n*sy@GnpnGmNsmGn¹"s5t*@ks]t	f?hklGn:YrsÉt¿kGs*tÅyl1-r:s©¹k*skCtpSrCln¯s*t
+ksGtGy€n6r*sGtbflnptn$¡kk
++sÇt*s@tp£rÇtGxGfGpxGrsf*k*s@bfhklmnprstwxybAufho7km\lwmnprstgwGy?nÅtlgnCtGswtJIrws€n]s*twpt:nr*tfpr*sGn*sGÏw	&§fkldnrstGxÜn*sÈnqsÁt*y"Efih*kn*stx*kès€tšlgntsf*sGy*m*n
+;mbfklnTLprst*w¯yÆkGmCr*s*tÅyCngsGt*kngrstGyíkGsGt·mGsGtbGm€n*s*tk2sÁt]t
+%xlÈns*t
++*b*f-kGlmGnGpGsGtn­sAtbfhqklmnprstwxyGkln*sgnr*syt*yân*sGyLStGxIMlGrGsGxÇl*mGsGfGkn#(s]tgx*y*kGstšls*kn*sGt(l*s?tix
+åhk­lwmGngrÁstÇw*yšlGns*tGy6l*nGpGsGt	GfGkCm!unp2s*tGy
+ÇbNfšl
+ÄmnÈps@Ät7#w0@x*y*lGs]tV/x
+sb€fkTlmÈnGprsûtwxGyµp*tglqsGl)nNs*tGy]kGm*sšlnGp*sGt*yl*ns*t?n*yGm*sNw@bfhklmnprstwxyGm6ns
+t*y	6f_hl
++
+nrGsGtGy?fn*sÁt*ysGk*s*tPw
+hklPm!n;±rÅs>:tëxµyamNnF.sÇnwx6n*sGw*ylGs:;tCm*s@>@bßfµÂklâmn?prstGw÷yCr*k¿m*y±k*ns*tGmGn*s*twxGm
+nvsètGn*sK
+wÇl*sÜs*y*b?k*lnst?x*n?r2s¯tÇb*lGnt*n
++
+r*s
+÷bf­hkšl6nrstGxGy?mGn*sÇn*r*sÌblGn*sstGys*ywkšlnr*s?wGn*sxšlGn,s*t*y	klGnàpr*stGwsn?xpz
+sèr2sGl
+[nsGtèwGy?fšl*n*s*t	<Óf6kTl2mnp*st­h*n*sgkwrItbnr*sGtGyÅlk*s[2k
+bf­hkl²Ómnrstw>Ix*l*rNslgm?nGr6s?p*sGwgl*mstwx*nâr*s*tGf6nqsètygwnGs*tgxJZ@TlIns*t?f*np*s*tl?sn*s*tGy'r*lšrGtG@*lnstGxwy-Yswm&ÏnpGrÅs*tÇwNbAn*sGtG@bÔfhkmôlnp¯rs]tNw*xGyl*sGtgy*stGlYtNl÷r
++às*t	kqfNhkl*n]sGt*xNnwr*s*k6n?s*y	]lGm*n]rs*t*x*y*fþkGl*ns*tGy@bfhklm€nÇprst]wxy*kirNlr*m*sGt
+*ÅflmÈnprsGtèw]x*yšlgm*nGs*twmGtgkGr*n*sGtGw*y*kInr*sèt*yësGyGkGnsGt
++b*k*lwmGn*s]twxGysl
+bfklÀmxnp*sCtyGk*lGr?lGn*sftGn*sst*yGnNr*sbfhklmnprstwx
++
+yGkl]nÇr*sÄølGkGmGm*nwr*stwx2f*n*s*tnsýtwx*yšlGmGn*sGt]lNn*r*st+rÇbšl*nGs*t?xGlGnGpr*sskl€ns*tPw*yEk*s*yšl2mÈn*s*tffkGl*s,twG@?pšlGmgn*sG@*n€tNl*pGtGl€ns*tGl*n*sGt
+G@kln*prs
++ätsw*yGr*sGtGn*s÷t]xgl*nèr*sGtGy€nqs*t*x*yin*s*tPwbfhklmngpDTrstwxy9lGt*yVÿb¿kGr*s*tÅyGm?rswm*n*s*tlÆn6rGs]twxNr žk
+n]sÁt*y*lnGkšlÆmlstb?hšlGn*s*t]y*f­lmgn2sÁtlgnNt*y	Ñbk­l*n]p*s*tyl*rwp*s5@gk
+vl*sn€n*sNw@bfklmnprstxÜyamlAµnwt¿kj@r*s*tÅy
++G@hlNmnrFsœ(tGyptJZnšls]tgxt*ks[stÁs]kNn*s*t*yGk]nés;twxµyGlGn*t­hGk*l*nGsÁt	6k*nrs*tSw"x*y€ns*tt~Fnkl*n*s*tšl6nkÊtbf­klmn6wprsGtNwwxGyIlNnGºr?#sl6n*sGt*ybšlnsÁt*y>ltG@ClnGr*sNsGt6hšl
+¶mvsGtGl*n*s*t*ynss&ãl@bfhklmnprstwxIy*sgwGklInr*sGtGyGk;¿n*kl*sGtwxGyGkuúlGnCrGsGtGxwfGl*nGsGt
+CfGkl*ðmnGprsCtNwgnr*st*y*nNs*tØr*yfGkMŸsrõnNfÅn]s?7fIk	¢lnésÁt*y?@]kClln*sGtbkšlÈmGnsïtGkTn*s*lGr*s
+>bšf*n*sGt*y0fGkGlprwsffõs7twx
++]b
+hf1ëlGmnGrs*tGyhgkŠrGsšlGnQãs*t
+*f¡kl?úmnpstíw*yb*s*yGsIt?r*sGtGkGnsgtGyånbGlGn]pGrhsÜt	CkGlGmn*st*w]xsCrGkånGps]tånb5wklGn*stgf*n*s*tšl6nGsbfEähklmnprstÆÇwwxyGlnwsGtŒlílLrkGnNlGn*sGk*n*pŽr*stwCnÑfÐn*s*tGkGm*n*s*tGy]f
+ tGbk*n*s*tGwhyÈswšx6h9Jk*l*n€r*s@bfhklmnprstwxyGmAn*s*t	wh$fklnrIs]t*yG@Gs*yGkGs*k]l	flnrIstGxµy*n*s*tÅyNbsfÈnrsGt*y*k2sGysGxNlun*s*t*yÚf"lGmns*t*yGs6t5rb*s*tGh]nbfhCkl"mnprs¯tNw=xxGyGklGnyrGt*kgn*y*l:2sGf
++
+l*sAns¬t*y	?fúhl*¹n+pèrGsGtf*yNnr*sGm]n*s*tGyèhwk]m*np*s*tCrbfhk­lmnrstw"xywl*sGylTmGn6€r*sGtGx*f*k*s*bgfNbglÈns*t*ywkglGnsNy?fl?w;kšls*s€tf¯kGl.¹n
+­p*sGtl]msyrDÝkšl6n*stGyÁnsr
+bh÷klomn9prs¯t2xGyG@wrÜk(rn+6s*yåhèr,sGtGngr*s*tsf*t*n?s*tbGn*sbnï@bfklsmnprs*tGxµyflNmNp·r*sŒlPrs­l*n*sGy6mGn2s*y*kšl*ns*tix?y*m*sõtwkwl®Hn*s*tßk*n*s*t*yyk*n*s=xtyn@
+bklwmnNpstwsxyGnsy
+
+FbGfwkŠlÈnrs*tCx*ygn*s*kGnqs*tCkšlgmGsGt
++lÌgmÈnpèrstPw*yèrsixsfolir*skÁl
++
+nrs*t:yGhGl*spSk*ns*txGyk
+æ@GmsGt*ySkhn*s
+bfklmnrstwxsyGkA²l*nÇr*sGt*flGlµp*sÇt*àf*kÈnèrsGt*y7ÏnGtåh*nGs5t*f]kGlLSn*sGtAuk?lGn*stGkGnGkÇl*n*pPr*sÇln*sšlÊn*pCtbfhklmnpstw]xy	*k*lGmhnèr'{sGt*y]l*nNp*st:Yl*m*nr*stIýf]pfglr*s*ns*t	b*n*s;twxÈns*t¯y*kGm*n]pst÷fßmkGnªsšlgnr*sfGm*kGyklm*nGs*tbGkTlAnr*s­f?p:Ÿt5nr*sa¥t÷xk
++
+t	5rb
+îkm*n*stxGy*s;t	sbf
+lmnGp*sCyGlGr*ss*s2tGn¯s,tnGxfsèt	ºbšlGmÈnPrs*tGy*nGrGtëx
++àbGls2ðlnzs-t@­m
++Jçbkd¥lCmÈnOpst*yGkíl	ªÞfklnwrs:tGy-Yf[2s*y*nGsGtbf-YhklmnprsCtw*xGy+k*lH&rGlCr*sGkšlwmn
+¶r*sµt*@Gk*n*s*t?f5ókns*t*yStGkÔsbkšlGnèrs*t6kTrNk*sGt*sÇtr*t*kGmMnGs*t*y/Ýk
+vlGp*st?fGp*s2tGfGk*l
+[ns*t
++bGflwmÈnrsGtCyG@*l*n?s*t*y
+fCklwmnrs]twNynkGmGn*s*y]k*sGyin*swmwtiflGmÈnNsCk*y&@bfhklmn]prst]wx*yGk*rÔs*tÅy*lNnt*s	Ux*st	­hGlGmnstx*yh1p*stl*s*tCfGnrhsnÇbgŸr
+Çb­hkGmn]p*rMŸstw*y
+vn*s*tåxG@*k*pGsGtGnÅsGt*n?s*t*x	G@õbGhÇln]rsÔyšlèr*sGt÷k*tk€nÁstxbrlGns7t*xr*mCtkGl*mGn*sb
++Gbwfµkl*mnrsèwkGut*yTblsf*f
+vlAumGn*stGnyrsGt*y	GklXFmGn6s*tGxGyn*s*tbr'kGfGkTm*stGns*twmÇwùNÃëãÀ
+	¡YesÁ¶
+*œútpÁS
+GP"TÁe.­ó
+ FæÁÆ	
+-
+
+Ÿ¡TÁò	vOÁÎíöë	ÁµD£­£±£¯£®ÂhÂiÂkÁÆÓÁlïÁµ\Áµ`Áµ]Áµ^ÁÆÕÁÆ×ÁÆÙÁÆÖÂ3ÄÂDÂG
+ ÂJ
+ ÂI
+@@ -404,40 +351,40 @@
+ Â¢§Â{pÂ¢Â£ç
+Â¡ÿÂ²Â³òpäú:>Á<ÞøÁjùÁn7Õ,Â¡úÂ¡÷0§ÂrrèðVÁ¡#ÁÙ-Ô§{Â¡ìÂ£à§ C'D&§¡§¢uvopdefg§ëÂ€Â€Â€Â€§æ§ç§íÂ€Â€Â€Â€Â€§ì§éÂ}
+§êÂ€Â€	Â€=¥Ânv}Â¡¬Â¡¯Â¡®Â¡­ÂÈÂÑÂÉ
+ ÂÍÂÎÂÊÂËÂu\§t
+VÁ>ªyÁØÝÁÈÂ¡$§uÁ©xÁÍ1¬ÂwÂÓPÂÔÂü>¥Âtâ¡§âÂqô
+iÂÙÂØ
+jÂ×Â£dÂ£cÂÚÂÛ ÊÁ©IÁSmwÁÉÁÉ ËÁ©IÁjãµÂµŒ
+¶·Â0Â2ÂfÍÂ1š6š7œŸÂ9õÂ7Â8Â=ÁÂªÁÂ¬»ÂšÐž¹ÈÂe
+ÂµÁ
+Œ§Á©ÁÔ»údÁ©ÁÇ©u!Õ
+"_
+¿¥e
+É&Á2.
+ ©	
+-#¢?ÁV4>
+Â;
+c
+OÁdáô
++#¢?ÁV4>
+Â;
+c
+OÁdáï
+ ÞÁÆJ£¢
+Ë
+ÇÌÁ¹%Á¹&,ÁŠ_ÁY?ÁÃÂ1OÁÃÁÃÁÃ-ÁŠaÂgÂhÂÂÍÁž=Áž>ÂsÂtãÁšÁÑf¶ÁÄqÁÄ
+ÁÄÁÄÁÄ
+ÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄÁÄ	ÁÄ
+ ÁÄ
+ÂâÂ}£pqŒœÂ
+ÏÂ
+ÐÎÁ¬~Âœ
+ÏÁ¬~ÂœÂÂÁžNÁžOFÁ«Ê
+ÁbÁ¶>Á¶?Á¹Á¹TU#Á¹Á¹Á¹Á¹Á¹Á¶ÔÁ¶ÕÁžFÁžGÂ0Á¹Á¹
+Á¹Á¹ Á¹Á¹Á¹
+
+EÈÔÁ=1AMŽÁUFÁyúPOpÁËê³AÂ%Â&ÁÃÔÁÃÕÁÃÖÁÃÎÁÃÑÁÃÐÁÃÏÁÃÒÁÃÓÃe%&'ÂÂ
+ÁŽÔÂÂÂÂŽÁÁß"Á¶DÁ¶EÁ¶FÁ¶7Á¶HÁ¶IÁ¶(Á¶)Á¶-Á¶*Á¶+Á¶KÁ¶LÃe·Ãež$ÄËÇÆÅÈÉ		
+	
+	
+
+	
+ ~Á\·ÁÕ}ŒXÃe Ãe¢¥ÂqgÁž]Áž^¥ÂqfÁ¶.Á¶2Á¶/Á¶0Á¶3Á¶4©~ÔÁU-BŒ
+
+ oÁXmÁyùPQnÁËê!³;ÂOÂPªÁÃ«Á¹î­ÁÃ
+Á¹
+ÁÔ1ÁÍÌÂÓÁÃÁÃ(uþÁ©­¹Áj
+Áfû
+ ÍÁÌ|³EÂY,ÁÄÁÐ
+ÔÕÌÓÏÎÍÐÑÁÃÌÁÃÍÁž6Áž:Áž7Áž8¡š€£¢¥Š)æÁªÇÃ©ÁÐ
+ÂÂVÂW*Â 
+-Á¹Á¹Á¶
+Á¶
+Á¶
+Á¶ÂLÂMÁ¶Á¶Á¶Á¶Á¶Á¶	ÁŽË
+ÃÂ¡ùÃe¥ÁÇ4ÁÇ6ÁÇ8
+NÁ°
+
+O
+FÂÙÁzÝ­Ò©
+°±²¬«
+ª­®-5601/.23
+4óÁ³NÁ¶ëÁßÈÁ¶Á¶Á¶
++Á¹Á¹Á¶
+Á¶
+Á¶
+Á¶ÂLÂMÁ¶Á¶Á¶Á¶Á¶Á¶	ÁŽË
+ÃÂ¡ùÃe¥ÁÇ4ÁÇ6ÁÇ8
+NÁ°
+
+O
+FÂÙÁzÝ­Ò©
+°±²¬«
+ª­®
+4óÁ³NÁ¶ëÁßÈÁ¶Á¶Á¶
+ á
+5óÁ³MÁ¶ÁášÁ¶Á¶Á¶Á¶Á¶Á¶Á¶5TÁÒÁÝ#¥6
+-RÁÏÁÝ#¥:S;<>¥7S8RDEGNOMJH9<=:?@8BCZ[
+HÁšáÁàÕ¬ÂxÂy
+J
+Èc"s§ò®ÿÍÁÎí*³¬s
+ÁTLÝÁdŸ$
+·Á×j- Â
+¢Â
+£Â
+¥Áž³ÁžŽÁž°Áž±Áž«Áž¬ÁžRÿÁT\Á€
+Q
+RÁÃÉÂ­Â®Â°Â²Â±ÁÇRÁÕÿÃe«Ãe¬ÂŽÂµÂ¶Â·ÁžSzÁÕúÁÃÝÁÃÚÁÃÛ/
+Âõ
+6
+7
+:
+;
+@
+8
+90Â
+õª
+=
+B
+C
+A
+>«
+ Á¶VÁ¶WÁ¶XÁ¶YÂ
+ŠÂ
+šÂ
+©Â
+ªÁ¶\
+Á¶e
+Á¶b
+Á¶`Á¶gÁ¶]
+Á¶^
+ÂzÁ¶OÁ¶QÁ¶RÁÃ­ÁÃ®ÁÃ¯ÂÂÁ¶rÁ¶sÂ
+·Â
+«Â
+¬Â
+®Â
+ŒÂ
+¯Â
+°Â
+²Â
+³Â
+ŽÂ
+¶Â
+ºÂ
+ž
+K
+Çs
+ÁR@_s
+ÁTLÒ+ÁyìWÁ×jÂTÂjÂSÂaÂcÂbP
+]Âª[Q
+·®	aÁ
+Áe Á+Á×µÁÇSÁÇTÉ
+-Â	
+?@TK
+ÂfABÁž®Áž¯ÂUÂWÂoÂXÂV¯Ãk
+°Ãk
+iãO'±Áþ{Á®ÁÈN¡nÂ*oklmržÃu7zðNYÁþÂIù{è­ÃHsò
+g
+htuvwj×H'°
+Áþq
+Á¬ÁÈMyðNÂã%&$ÂKÂLÂÂÂÂÂ
+Â
+ ]^Áº[ÁÓÁÜ¯ÁÃàÁÃá¡¢`dabÁóÁžVÁÃåÁÃæÁÃð,-/0Â[Â\Â]Â^Â_ÁÃñÁÃòÁÃóÁÃô*+ÁºcÁÓsÁÜ®ÁÃìÁÃéÁÃêÁÃïÁÓwÁÃíÁÃîÁÃãÁÃäÂaÂcÂdÂbÂkÂlÚ×
+3Áe®êÁÎ)ä2p
+uûqst
+š
+ª
+«
+¬
+©
+³¬bc
+Ž«	å!29:èéçQæêë
+
+÷Âô
+
+*Á³ËÁàöÁžÁžÁž
+Ÿí÷øïóðòîôõ#f
+ 
+¢
+£
+¥
+xÿ
+yþ
+Š
+§gÝúcÀÂrCÁÎBÃeµÃe¶ÙÂX>ÁÎFÂp ×ÙÚÝÜØ
+°
+±
+¶
+žimjk£éÝ%Ig1 .Áá0ÁWšÁ{%é¶müýþÁž·LhÁ&Áà¿Á±
+Å
+º
+»ÀÁÃ~ž¹Q	E
+œ Þjá×ÁüÁÞÜ»á»Œ\]S
+ZàTjá`aVWR	
+-|àÁÓ
+X6
+
+
+Â*ed¥Á%
+¿
+Â
+Ã
+À
+Á¥Á%ÁÇbÁÇc)Ž[
+$á
+
+¥d
++RÁÏÁÝ#¥:S;<>¥7S8RDEGNOMJH9<=:?@8BCZ[
+HÁšáÁàÕ¬ÂxÂy-5601/.23
+J
+Èc"s§ò®ÿÍÁÎí*³¬s
+ÁTLÝÁdŸ$
+·Á×j- Â
+¢Â
+£Â
+¥Áž³ÁžŽÁž°Áž±Áž«Áž¬ÁžRÿÁT\Á€
+Q
+RÁÃÉÂ­Â®Â°Â²Â±ÁÇRÁÕÿÃe«Ãe¬ÂŽÂµÂ¶Â·ÁžSzÁÕúÁÃÝÁÃÚÁÃÛ/
+Âõ
+6
+7
+:
+;
+@
+8
+90Â
+õª
+=
+B
+C
+A
+>«
+ Á¶VÁ¶WÁ¶XÁ¶YÂ
+ŠÂ
+šÂ
+©Â
+ªÁ¶\
+Á¶e
+Á¶b
+Á¶`Á¶gÁ¶]
+Á¶^
+ÂzÁ¶OÁ¶QÁ¶RÁÃ­ÁÃ®ÁÃ¯ÂÂÁ¶rÁ¶sÂ
+·Â
+«Â
+¬Â
+®Â
+ŒÂ
+¯Â
+°Â
+²Â
+³Â
+ŽÂ
+¶Â
+ºÂ
+ž
+K
+Çs
+ÁR@_s
+ÁTLÒ+ÁyìWÁ×jÂTÂjÂSÂaÂcÂbP
+]Âª[Q
+·®	aÁ
+Áe Á+Á×µÁÇSÁÇTÉ
++Â	
+?@TK
+ÂfABÁž®Áž¯ÂUÂWÂoÂXÂV¯Ãk
+°Ãk
+iãO'±Áþ{Á®ÁÈN¡nÂ*oklmržÃu7zðNYÁþÂIù{è­ÃHsò
+g
+htuvwj×H'°
+Áþq
+Á¬ÁÈMyðNÂã%&$ÂKÂLÂÂÂÂÂ
+Â
+ ]^Áº[ÁÓÁÜ¯ÁÃàÁÃá¡¢`dabÁóÁžVÁÃåÁÃæÁÃð,-/0Â[Â\Â]Â^Â_ÁÃñÁÃòÁÃóÁÃô*+ÁºcÁÓsÁÜ®ÁÃìÁÃéÁÃêÁÃïÁÓwÁÃíÁÃîÁÃãÁÃäÂaÂcÂdÂbÂkÂlÚ×
+3Áe®êÁÎ)p
+uûqst
+š
+ª
+«
+¬
+©
+³¬bc
+Ž«	å!29:èéçQæêë
+
+÷Âô
+
+*Á³ËÁàöÁžÁžÁž
+Ÿí÷øïóðòîôõ#f
+ 
+¢
+£
+¥
+xÿ
+yþ
+Š
+§gÝúcÀÂrCÁÎBÃeµÃe¶ÙÂX>ÁÎFÂp ×ÙÚÝÜØ
+°
+±
+¶
+žimjk£éÝ%Ig1 .Áá0ÁWšÁ{%müýþÁž·LhÁ&ÁàÁŽÊÅ
+º
+»~ž¹
+œ Þjá×ÁüÁÞÜ»á»ŒŒàŸáßàÁÓ
+
+
+
+Â*ed¥Á%
+¿
+Â
+Ã
+À
+Á¥Á%ÁÇbÁÇc)Ž[
+$á
+
+¥d
+ 
+u
+ À"UB
+ÁkX
+Ÿ
+ 	«?
+±ÁR
+ 9;	cl]Áb]'
+-°C
++°?
+ ìØÁÁ )ÁËpÁËqÁÎ2ÁÖ1ÁË>ÁË?ÁË@Â€fÂ€gÁÎ4ÁÎ5ÁÎ6Â€kÁÎÁÎÁÎ
+ÁÎ
+ÁÎ3ÁÖ/ÁËUÁËVÁËXÁËYÂ€rÂ€sÂ€uÁÊãÁÊòÁÊåÁÊôÁÊäÁÊæÁÊçÁÊëÁÊìÁÊîÁÊïÁÊÍÁÊÐÁÊ÷ÁÊÿÁÊúÁÊûÁÊùÁÊøÁÊüÁÊýÁÊÏÁÊÎÁÊÊÁÊËÁË
+ÁËÁËÁËÁË
+ ÁË
+ÁÊÑÁÊÖÁÊÜÁÊÝÁÊÞÁÊáÁÊ×ÁÊØÁÊÕÁÊÒÁÊÓÁÊÙÁÊÚšVÁ£«ÁËÂ¹ÂºÂ»ÂŒšWÁ£°ÁËÁËÁËÁÊjÁËLÁÉÁÉÁÉÁÉÁÉÁÉÁÉÁÉÁÉúÁÉÿÁÉýÁÉûÁÊÁÊÁÊ¡ÁÊGÁÊJÁÊNÁÊIÁÊHÁÊKÁÊLÁÊÁÊÁÊÁÊÁÊÁÊÁÊÁÊÁÊÁg9ÁÊ
+ÁÊ	ÁÊÁÊ
+ÁÊÁÊ
+ÁÊ
+ÁÊ#ÁÊÁÊ
+ÁÊ
+ÁÊ ÁÊ!ÁÉ*ÁÉ+ÁËEÁËFÁËGÁË6ÁËIÁËÁËÁËÁËÁËÁËÁÊlÁÊmÁÊpÁÊ+ÁÊ-ÁÊ,ÁËAÁÊ/ÁÊ0ÁÊ2ÁÉO
+Ê<ÁÉX!ÁÉYÁÉTÓ<ÁÊ=ÁÊ?ÁÉS	Ê<ÁÉPÕ>ÁÉQÁÉRÁÉUÓ<ÁÉVÒ;ÁÊ@ÁÊCÁÊDÁÊBÁÊAÁÊEÁÊFÁÊc¥ÁÊÁÊ^ÁÊ_ÁÊbÁÊUÁÊVÁÊWÁÊZÁÊiÓÁÎ=ÁÊ[
+/ÁÊ]ÁÊdÁÌúÁÌûÁÌýÁÌþÁÉ:B
+ ÁÙÓÁÊzÁÊ{ÁÊÁÊÁÊÁÊÁÊÁÉJÁÉ?EÁÉ@ÁÉAÁÉKÁÉMÁÊÁÊÁÊÁÉ=3	ÁÙSÁÉ>ÁÉ;DÁÉGÁÉHÁË
+ÁË
+ÁÉD
+6ÁÊÁÊÁÉE
+2ÁÊQÁÊRÄ~
+ 
+Á£ ÂZÂ€dšgšhšišjÂ
+ÆÂ
+ÇÁË#¶·§ª
+ ²­®¬	«¯°§SÅ~
+
+Á£ÂXÂ€eÁÉ]ŸÁÖ;š
+šÁÉf
+ÉÁÎ0ÁÎ)ÁÎ*ššÁÉd
+ÊÁÖ3ÁÉa
+ÍÁÉbÁÉ^
+ÍÁÉ_
+Ìwë£ÈÁ3ÎýÓÁfdÁláÁË=ÂÂ1šZÁ¢ÁÔÁÉlÁÉwš[Á¢Áh+Â1¢ÁÉqÁÉmÁÉnÁÉx'ÁÊ©ÁÊ¥ÁÊŠÁÊªÁÊšÁÊ­ÁÊ®ÁÉ|ÁÊ ÁÊ€ÁÉy%ÁÉzÁÊ¯ÁÊ±ÁÊµÁÊ°ÁÊ²ÁÊ³€Ç
+Á'Íü¿ÁÒEÂšmšnšoštÁ-špšvšušqšrÓ¡E[TÂ|çÔÂ€ÁËKÁËRÁËNÁËMÁËLÁËOÁËP
+n¢ŠfÁ£ÀÁÙ'
+o¹žÁÆYÁÙÍŸ¿³ŒÁµùlÁµûkÁµúkÁµükÁµýkÁµþkº»ÃÂÁÄÅÁË|ÁÌ"ÁËªIÁË«ÁËº<ÁË»ÁË¬ÁË­ÁË®ÁË¯ÁË°ÁË±ÁËŒÁËœÁËŸÁËÁÁËÀÁË¿ÁËÂÁËÃÁËÅ0ÁË·=ÁËžÁË¹ÁË²ÁËŽÁËµÁË³ÁÌöÁÌ÷ÁËßÁËàÁÌEÁÌFÁÌMÁÌNÁÌIÁÌHÁÌGÁÌJÁÌKÁËâTÁÌ7ÁÌ<ÁÌ:ÁÌ8ÁÌAÁÌ>ÁÌ?ÁÌoÁÌjÁÌuÁÌrÁÌpÁÌnÁÌkÁÌlÁËãÁÌyÁÌzÁÌ{ÁÌ~ÁÌÁÌOÁÌPÁÌQÁÌSÁÌTÁËát	ÁÌ^ÁÌB'ÁÌCÁÌ[
+ÁÌX	ÁÌVÁÌbÁÌ_ÁÌ`ÁÌvtÁÌwsÁÌìÁÌñÁÌïÁÌíÁÌÁÌ
+ÁÌÁÌÁÌ
+ÁÌÁÌÁÌÁÌÁÌÁÌÁËiÁËÁË^ÁË^ÁË]ÁË^ÁËhÁËgÁËiÁË}cÒÁËfÁËæÁË~ÁËÁË
+fÕÁËdÏÁËgÔÁËëÁËìÁËÁËÁË	ÁËÁËÁËÁËÁÌ/ÁÌÁÌÁÌÁÌÁÌÁÌÁÌ	ÁÌÁÌÁÌ
+ÁÌ
+-ÁÌ
+ÁÌ3ÁËùÁËýÁËúÁËûÁËþÁËÿÁÌßÁÌâÁÌáÁÌàÁÌãÁÌäÁÌ1ÁÌÇÁÌÆÁÌÈÁÌÖÁÌ×ÁÌØÁÌÚÁÌÛÁÌÉÁÌÄÁÌÂÁÉ.ÁÉ/ÁÌÜÁÌÝÁÌ0ÁÌ.ÁÌ+ ÁÌÒÁÌÓÁÌÔÁÌ,
+ÁÌÌÁÌÍÁÌÏÁÌÐÁÌÑÁÌ4ÁÌ5ÁÌ
+ÁÌ£ÁÌŽÁÌµÁÌ ÁÃöšÁÌ­ÁÌ°ÁÌ¯ÁÌ®ÁÌ±ÁÌ²ÁÌ¬ÁÌªÁÌ¥ÁÌŠÁÌ§ÇÁÉ3m	ËÁÉÇÌÎÈÉÁÉÈÊÏßÂDÂFÁÌ
+ÁË+ÜÁÉ:uÝÞÐÁÆ]XÑÁÈõXÁËÉÁËÊÓÁÈøÁËÌÁËÍÁË£ÁËŠÁË¥ÁË€ÁË§ÁËšÁÌ*ÚÁÉ1l	ÁÌ
+ÁÌÁÌ×ÁÈ÷EsØÁËÔÁËÑ
+ÁËÏÔÁÉŸÁË×ÕÁÉŒÁËÙÁËÚÁËÛÁËÝÁÌ'ÁÌ(ÁËÁËÁËÁËÁË ÁË¡ÁËSÁËTÃv1äë¡¯^
+9c
+
+
+Á£JÁQýÁ,ÁÀã1ëèéêìÁÉ3ÁÉ6ÁÉ5ÁÉ4ÁÉ7ÁÉ8ÁËmÁËnÁËjÁËkÁÉÁÉŠÁÉÁÉÁÉ¢ÁÉ£ÁÉ€ÁÉ¥ÁÉ§ÁÉÁÉšÁÉ©íÁÉ~ÁÉÁÉÁÉÁÉÁÉÁÉÁÉ
+ÁÉ«ÁÉ·ÁÉ­ÁÉžÁÉ¬ÁÉ®ÁÉ°ÁÉ±ÁÉ³ÁÉ²ÁÉ¯óõöçòÁ¢Câ 
+ÁÉÕâÁÉÔâÁÉÅÁÉÆÁÉÇÁË^ÁË_ÁÉÄä
+ÁÉÃâ
+ÁÉÂá¢ÁËbæÁÆ¯T	,ÁÉáÁÉâÁÉÞÁÉßÁÉàÁÉåÁÉíÁÉîÁÉ\>ÁÉ\ÁÉ÷/ÁË'ÁË)ÁË3ÁË*ÁË+ÁË,ÁË.ÁË0ÁË/ÁË2ÁÉÁÉÁÉW<ÁÉV:ÁÉìÁÉ0ÁÉéÁÉæÁÉçÁÉÛÁÉÜŠ¿i:f
+OMì£Áæ­R	oÊ%ÁMÁØÉ·
+
+
+Ê
+[ÁŽÁÒ
+\ÁŽ
+]ÁŽÁËx
+`ÁÇÁÍÁ×ÁÍÁÍÁ×ÁÍ¥®ÕÙÁÍMÁÍPÁÍOÁÍNÁÍQÁÍRÁÍÁÍÁÍÁÍÁÍÁÍ		ÁÍ
+ÁÍ	ÁÍ
+
+ÁÍ
++ÁÌ
+ÁÌ3ÁËùÁËýÁËúÁËûÁËþÁËÿÁÌßÁÌâÁÌáÁÌàÁÌãÁÌäÁÌ1ÁÌÇÁÌÆÁÌÈÁÌÖÁÌ×ÁÌØÁÌÚÁÌÛÁÌÉÁÌÄÁÌÂÁÉ.ÁÉ/ÁÌÜÁÌÝÁÌ0ÁÌ.ÁÌ+ ÁÌÒÁÌÓÁÌÔÁÌ,
+ÁÌÌÁÌÍÁÌÏÁÌÐÁÌÑÁÌ4ÁÌ5ÁÌ
+ÁÌ£ÁÌŽÁÌµÁÌ ÁÃöšÁÌ­ÁÌ°ÁÌ¯ÁÌ®ÁÌ±ÁÌ²ÁÌ¬ÁÌªÁÌ¥ÁÌŠÁÌ§ÇÁÉ3m	ËÁÉÇÌÎÈÉÁÉÈÊÏßÂDÂFÁÌ
+ÁË+ÜÁÉ:uÝÞÐÁÆ]XÑÁÈõXÁËÉÁËÊÓÁÈøÁËÌÁËÍÁË£ÁËŠÁË¥ÁË€ÁË§ÁËšÁÌ*ÚÁÉ1l	ÁÌ
+ÁÌÁÌ×ÁÈ÷EsØÁËÔÁËÑ
+ÁËÏÔÁÉŸÁË×ÕÁÉŒÁËÙÁËÚÁËÛÁËÝÁÌ'ÁÌ(ÁËÁËÁËÁËÁË ÁË¡ÁËSÁËTÃv1äë¡¯^
+9c
+
+
+Á£JÁQýÁ,ÁÀã1ëèéêìÁÉ3ÁÉ6ÁÉ5ÁÉ4ÁÉ7ÁÉ8ÁËmÁËnÁËjÁËkÁÉÁÉŠÁÉÁÉÁÉ¢ÁÉ£ÁÉ€ÁÉ¥ÁÉ§ÁÉÁÉšÁÉ©íÁÉ~ÁÉÁÉÁÉÁÉÁÉÁÉÁÉ
+ÁÉ«ÁÉ·ÁÉ­ÁÉžÁÉ¬ÁÉ®ÁÉ°ÁÉ±ÁÉ³ÁÉ²ÁÉ¯óõöçòÁ¢Câ 
+ÁÉÕâÁÉÔâÁÉÅÁÉÆÁÉÇÁË^ÁË_ÁÉÄä
+ÁÉÃâ
+ÁÉÂá¢ÁËbæÁÆ¯T	,ÁÉáÁÉâÁÉÞÁÉßÁÉàÁÉåÁÉíÁÉîÁÉ\>ÁÉ\ÁÉ÷/ÁË'ÁË)ÁË3ÁË*ÁË+ÁË,ÁË.ÁË0ÁË/ÁË2ÁÉÁÉÁÉW<ÁÉV:ÁÉìÁÉ0ÁÉéÁÉæÁÉçÁÉÛÁÉÜŠ¿[:f
+OMì£Áæ­R	oÊ%ÁMÁØÉ·
+
+
+Ê
+[ÁŽÁÒ
+\ÁŽ
+]ÁŽÁËx
+`ÁÇÁÍÁ×ÁÍÁÍÁ×ÁÍÀ¡îÕÙÁÍMÁÍPÁÍOÁÍNÁÍQÁÍRÁÍÁÍÁÍÁÍÁÍÁÍ		ÁÍ
+ÁÍ	ÁÍ
+
+ÁÍ
+ 
+ ÁÍ
+
+ ÚÖ×©ŸHîÁŠxÐÁÍpÁÍvÁÍrÁÍwÁÍqÁÍsÁÍtÁÍYÁÍ\
+ ÁÍb
+ÁÍ_
+-ÁÍ]
+ÁÍZ
+ÁÍ[
+ÁÍcÁÍn¥¬¥­÷žîÁš
+ÁÍ0ÁÍ.ÁÍ/ÁÍ6ÁÍ7ÁÍ8ÁÍ;ø¢¹ÁšùÁÊ
+	ÁÉü9ÁÍ*ÁÍ+ÁÍ
+
+ÁÍ
+üÂDþÂBýÂDÁÍ,ûúÁÊ%ÁÉû5ÁÍ $ÁÍ!ÁÍ"ÁÍxÁÍyÁÍ1:ÁÍ3ÁÍ4ÁÍ2ÁÍ|ÁÍzÁÍÁÍÁÍÁÍÁÍÁÍÁÍ
+ÁÍIYÁÍåÁÍÝÁÍÞÁÍàÁÍáÁÎ
+ÁÎÁÍæ&ÁÎ
+ÁÎÁÎ	ÁÍýÁÍŒÁÍ¢ÁÍ³ÁÍ¥
++ÁÍ]
+ÁÍZ
+ÁÍ[
+ÁÍcÁÍn¥¬¥­÷ÊíîÁš
+ÁÍ0ÁÍ.ÁÍ/ÁÍ6ÁÍ7ÁÍ8ÁÍ;øË¡îÁšùÁÊ
+	ÁÉü9ÁÍ*ÁÍ+ÁÍ
+
+ÁÍ
+üÂDþÂBýÂDÁÍ,ûúÁÊ%ÁÉû5ÁÍ $ÁÍ!ÁÍ"ÁÍxÁÍyÁÍ1:ÁÍ3ÁÍ4ÁÍ2ÁÍ|ÁÍzÁÍÁÍÁÍÁÍÁÍÁÍÁÍ
+ÁÍIYÁÍåÁÍÝÁÍÞÁÍàÁÍáÁÎ
+ÁÎÁÍæ&ÁÎ
+ÁÎÁÎ	ÁÍýÁÍŒÁÍ¢ÁÍ³ÁÍ¥
+ QÁÍŠÁÍ¬ÁÍ­ÁÍšZÁÍ¯PÁÍ§YÁÍ©ZÁÍªYÁÄrÁÍœÁÍŸÁÍ¿ÁÄsÁÍKÁ¹.ºÁÍèÁÍëÁÍìÁÍïÁÍÁÁÍÀÁ¹/ÃÁÍôÁÍõÁÍòÁÍøÁÍêÁÍúÁÍûÁÍüÁÃÀÁÃÄûÁÎÁÎÁÍÃÁÃÁÁÃÂÁÍÄÁÍÌÁÍÓÁÍÏÁÍÎÁÍÍÁÍÐÁÍÑÁÍJÁÎÁÍÖÁÍ£ÁÍ€ÁÍÕÁÎÁÎÁÍÇÁÍÈÁÍÆÁÍËÁÍ×ÁÍØÁÍÙÁÍÚÁÍÛÁÍÜÁÎÁÍµ\ÁÍŽÁÍžÁÍ·ÁÍ¶ÁÍ¹ÁÍºÁÎÁÎËšÀgNœMìÁ3So	ãÁÖ[
+ Â€
+Â€
+Á¶zÊÁÙC
+ ÁËuÁËv¥¥Âß
+Â€
+-Â€Á¶{Á¶|§¿ÁÇ[xWÁÖUÁÍÁÖÞÂ€~Á¶}Á¶~Á¶ÁÍÁÍÁÍ
+^ÁÉ6ÁÖZÁÍ
+_ÁÉ6ÁÖYÁÍÁÍÁÍÁÍÂ€Â€ÁÉ1ÁÉ2ÁÉÑÁÉÒîØ·ÁÆFÁÉÉÁÉÊÁÉÐÁÉÍÁÉËñïÕ¶ÁÆEð'Â€­Â€¡Â€¢
+Â€£Â€€Â€šÂ€¥Â€ŠÂ€©Â€ªÂ€®Â€¯Â€°(Á¶tÁ¶uÂ€Â€â#å	858
+WÉo=YÁüT_ßœÁm'ÁgIÁÛ­ÂÅÂÁÃ°HÁÃøÁÃúÂÆ
+éÂÇ
+êÂµ
+ëÂÊ
+í
+îÂÃ
+ï
+ð
+ò
+ó
+ß
+â
+á
+à
+ö
+÷
+ã
+äÁ¹*Á¹+ÂŠÂ§ÂšmNÁ§¯ÁÚænÂ¡Â£Â€ÂÈÂÉÂ¢oMÂst
+{ÂdÁgÁÂÃÂÄ
+|
+Â
+
+
+
++Â€Á¶{Á¶|§¿ÁÇ[xWÁÖUÁÍÁÖÞÂ€~Á¶}Á¶~Á¶ÁÍÁÍÁÍ
+^ÁÉ6ÁÖZÁÍ
+_ÁÉ6ÁÖYÁÍÁÍÁÍÁÍÂ€Â€ÁÉ1ÁÉ2ÁÉÑÁÉÒîØ·ÁÆFÁÉÉÁÉÊÁÉÐÁÉÍÁÉËñïÕ¶ÁÆEð'Â€­Â€¡Â€¢
+Â€£Â€€Â€šÂ€¥Â€ŠÂ€©Â€ªÂ€®Â€¯Â€°(Á¶tÁ¶uÂ€Â€µ	&#å	858
+WÉo=YÁüT_ßœÁm'ÁgIÁÛ­ÂÅÂÁÃ°HÁÃøÁÃúÂÆ
+éÂÇ
+êÂµ
+ëÂÊ
+í
+îÂÃ
+ï
+ð
+ò
+ó
+ß
+â
+á
+à
+ö
+÷
+ã
+äÁ¹*Á¹+ÂŠÂ§ÂšmNÁ§¯ÁÚænÂ¡Â£Â€ÂÈÂÉÂ¢oMÂst
+{ÂdÁgÁÂÃÂÄ
+|
+Â
+
+
+
+ 
+ 	
+-
+!
+l
+
+:-Á&vÁÓ÷j
+Ï¹ÂŸ
+Ó
+Ô
+Ö
+×
+@,;
+käÁŒÁßmi
+«
+ÐÂÞ
+ÑÂÝÁ¶Á¶Á¶#$ÂËÂÍÁŸŠÁÃ»
+Á²ûÁÞ¬Á¶ÁÞ¬Âœu§
+ÿËæ	85$
+WE=ÁZ0CxÁWHÁgPÂ1£Â1€ÁžÁžÂÀ9Á³JÁžÁž
+ÁžÁÃÊÁÃËÁžÁÄjÁÄk
+?P
+ö
++
+!
+l
+\2:-Á&vÁÓ÷j
+Ï¹ÂŸ]
+Ó
+Ô
+Ö
+×S
+(@,;
+käÁŒÁßmiT7«`aV{ÂÞW
+ÑÂÝÁ¶Á¶Á¶#$ÂËÂÍÁŸŠÁÃ»
+Á²ûÁÞ¬Á¶ÁÞ¬Âœu§
+ÿËµ	
++ 	85$
+WE=ÁZ0CxÁWHÁgPÂ1£Â1€ÁžÁžÂÀ9Á³JÁžÁž
+ÁžÁÃÊÁÃËÁžÁÄjÁÄkX5?P
+ö
+ õÁ§ÁÔ
+
+þ
+
+÷Â
+ý
+
+þÁ¹à
+ýÁ¹ßÁ¹0Á¹1%ÁŸÛ&ÁŸÛÁ¶ÞÁ¶ßÁ¶âÁ¶àÁÞ§Á¶áÂÂÁžYÁžZ
+Ù CÁÁÓ
+ÛÂ8Â9
+Ý GÂsÂ<¥"¥!
+Ú ?ÁÁÓ
+Ü BÂs
+
+ :uÁõñÝÁEDHIÃH,JÃH,ÂÂÂÁžÁžÁžÁžÁžÁž
+®ÁöÎÁÂã
+ |k
+Œ
+" u	V
+@@ -528,8 +475,8 @@
+ ÃmÃm
+Ãm
+Ãlþ7ÃlÿÃm
+ÃlèÃmÃmÃmÃmÃlô!Ãm=Ãm<Ãm>Ãm?Ãm6Ãm7nojkC|/Á©^Á`¯Üñ	¶fÝÁiZXÁÓ8ÃhõÃhöÃh÷Â'õÂ'í
+ Â'î
+ Â!âÂF
+Â)+Â),Â!ãÂF
+Â#äÂ#æÂ#Ù	Â#àÂ#ÜÂ#ÛÂ#ÚÂ#ÝÂ#ÞÃhú¢ÃkÃk Â&
+ñÃl²ÃhùòÃl³ÃhüÃhûÃhý ÕÂ"ðÂ"ñÂ"óÂ"ôÂ"õÂ"öÖÁ«6Áa.ÂHsÁÀ6ÁÀ5ÁÀ6ÁÚUÁÎHÁÀÂÂ"èÂ"éÂ"êÂ"ëÂ"ìúÁ«6Áa*ÂHuÁÀ6Áhœ	Â?­)Â)Â)	Â)Â)
+Â)ÂFJÂ)Â)À
+
+
+
+sÁšîQÁb±ÂFe#@wÃhRÃhUÃhTÃhS/ÚÛÃgžÁÀÁgÌ ÁÀÁgÌ ÁŸÇ;<67ÁÀiÁÀj@Á©A0ÁŸÈ¢ÁŸÉÂ°ÃplËÌÃs?Ãs@ÒÃShÕÂ"#Â"$Â"!Â""Â"&Ãg·ÖÃS9ÔÂ
+ŸÁÍ¬Â¡Â¢Â#çÂEcÂ#êÂ#éÂ#èÂE{Â#ëÂ#ìÂ£Â€cÃhEÃhF5Â"ÈÂ"ÉÂ"ÊÂ"ËÂ"ÌÃh 
+Ãh!
+Ãh"ÃhÃfzÃhdÇJ
+Â
+îhÂ?ôÂÂ(
+Â(Ãh2Ãh4Ãh6Ãh3Ãh73Â"×Â"ØÂ"ÕÂ"ÖÈL
+Â
+gÂ?üÃh:.Ãh15ÁÀ-Áb£ÂF^
+lÃl1ÁÀ.Ãh@Â"ÍÂFvÂ"ÎÃhBÃhAÂ#îÂ#ïÂEYÂ#òÂ#ñÂ#ðÃh=Â(&Â('Â((Ãh>Ãh<-ÃhiÃhj`ÃS
+aÃRÃbÃRÃ2Á
+
+zÁšîLÁhÂA	
+Â|Â"âÃh*Â"ãÂ"äÂ"æÃh+4ÁŸÏÂ¬ÉÃh&Ãh(Ãh)Ãh'ÁŸÐÁŸÑÁd	
+
+Á©©Â¬Ì !
+
+
+
+
+
+
+-ÁŸÍÂ©GÃhXÆ
+"ÙÂ
+ü×Â?e" @w*Â)¹Â?Ãi
+Â"Þ×Â%úÃhYÄäüÂ
+ü8 ÂD Â"Ü×Â?£
+ÃhWÂ&Â&ÁÀ3ÁgïÁÀ4ÁgïÁÀ5ÁÀ=ÁÀ>ÁÀ<Áb€×Â"àÖÁÀ6ÁÀ7ÁÀ8ÁÀ9ÁÀAÁÀBÃk]78ÁÀ}Áb}
+ö
+ÂG%Á¿ÃhrÁÀ
+ÁÀÂ#óÂ#ôÂ#õÂ#öÂE~Â#÷Á¿Á¿Á¿Á¿Á¿Â"÷Â"øÃhsÃhvÃhwÃhxÃhuÁŸÝÁŸÞÃf|Ãf{Â"ÿ2ÁruÁÍÙÑÂ#
+ÂFyÂ#ÃhÃhÂ#ÁxŠÁÍÜÂ#Â#Â#ÃhÃhÁÀÂ§äÃh{ÁÀÂ§åÃhz
+*ÁŸÃhÃhÃhÃhÃhÂ##Â#$Â#%Â#'ÃhÂ#(Â#)Ãf~ÁŸÁŸÁŸÃhÃf}ÃhÂ#Â#Â#Â#Â#-Â#.Â#*Â#+Â#,Â#0ÃhÃhÂ#1Â#2ÃhÃhÃhÃhÂ#6Â#4Â#5ÃhÃhÃhÁŸTÁŸãÁŸâÁŸáÁŸÂ¯ÔÂ#!ÂFcÂ#Â#Â#Â#Â#Â#Â#Â#
+Â#Â#!Â# ÃhÃmCÁÀ~Áb|
+ô,Â#ÂLKÂ#ÁÀÁÀÂ#Â#Â#
+-Â#
+Â#ÂFx÷Á«)fCÁgb3·"Áq4X
+ÁÌßÂ#øÂ#ùÃhšÃh§Â#EÂFeÂ#FÂFeÂ#
+Â#Â#Â#Â#Â#ÃhÛÃhÜÃhÝÃhÚÃhŠÃhÓÃhÔÃhÕÃhÖÃh×Ãh«Â#ÂFLÂ#Â#ÃhØÂ)ÍÂEÂ#?Â#@Â#AÂ#CÂ)ÎÃh¬Ãh­Ãh®Ãh±Â#GÂ#HÂ#IÂ#JÂ#NÂ#OÂ#PÂ#RÃh²Â#KÂ#LÂ#MÃh¯ÃnhÂ)Ãh°Â)Â)Â(]ÂE8ÃfÃlÃlÃlŸÃgÀ
+ÙÃk]EÃk^Ãk_Ãk`ÁÀ,`Â­åÃgÁ¯ÃgÄÃlÁÀ&ÁÀ(ÁÀ'ÃlÃl ÁÀ%øÁ«(bÁgu	WÔÁr
+ÁÒj¯Ão¥ÃoŠÂ#;ÂFaÂ#<Â#8Â#9Â#:Â#>Â#UÂ#SÂ#TÃhœÂ#hÂ#iÂ#kÃg»Þ&ÃhÀÂ(	ÃhÆÃhÇÃhÃh³ÃhŽÃh¶Ãh¡Â#lÂ#mÂ(ÂAÂ(	ÃhÃhÃh Â#nÂ#oÂ#pÂ#rÂ)7Â@DÃh¹ÃhºÃhŒÃhžÂ#bÂ#cÂ#dÂ#eÂ#fÂ#gÃg¿éÃo£Ão€Â#sÂ#tÂ#uÂ#vÂ#wÂ#VÂ#WÂ#YÃhÅÂ#ZÂFeÂ#[Â#\Â#^Â#_Â#`ÃhÁÃhÂÃhÃÃhÄÌÁ©4hÁa£$ÂG
+l
+
+ÃflÃfÃfÃflÃpmÃpnÃl¡¿Ãl¢ÃnbÃnaÃndÃhÈÂ"3Â"OÂ#}Â#~Â#Â#Â"NÂMÂ#DÃnfÂ"MÃhÉÃhÊÂ#Â#ÃhÑÃhÒÂ#ÂFMÃhÍÃhÏÃhÐÁŸê4ÁŸé4ËÁ©
+4Áb4ŽÂEÈÂ"'Â"(Â"*Â"+Â",ÃnQÂ#{ÂFQÂ#xÂ#yÂ#zÂ#|ÃhÌÂ"2 ÂE3eÃgœÂ"1Â".Ãh£Ãh€Â"/Ãh¥Â(Â(ÃnkÃnlÃnmÃnnÃnoÃpoÂ"TÂ"UÃppÃgÃÂ)Â?GÂ"7Â"8Â":Â"4Â"5Â"6Â";ÃhïÃhòÃhñûüÃhðÃgÊÂ#Â#Â#Â#Â#ÂFKÂ#Â#Â#Â#Â#Â)Â?JÁŸÁŸÁŸÁŸÁŸÁŸÂ"BÂ"<Â"?Â">Â"=Â"@Â"AÂ"CÂ"DÃgÉÕúÃgÇ»Á©
++ÁŸÍÂ©GÃhXÆ
+"ÙÂ
+ü×Â?e" @w*Â)¹Â?Ãi
+Â"Þ×Â%úÃhYÄäüÂ
+ü8 ÂD Â"Ü×Â?£
+ÃhWÂ&Â&ÁÀ3ÁgïÁÀ4ÁgïÁÀ5ÁÀ=ÁÀ>ÁÀ<Áb€×Â"àÖÁÀ6ÁÀ7ÁÀ8ÁÀ9ÁÀAÁÀBÃk]78ÁÀ}Áb}
+ö
+ÂG%Á¿ÃhrÁÀ
+ÁÀÂ#óÂ#ôÂ#õÂ#öÂE~Â#÷Á¿Á¿Á¿Á¿Á¿Â"÷Â"øÃhsÃhvÃhwÃhxÃhuÁŸÝÁŸÞÂ"ÿ2ÁruÁÍÙÑÂ#
+ÂFyÂ#ÃhÃhÂ#ÁxŠÁÍÜÂ#Â#Â#ÃhÃhÁÀÂ§äÃh{ÁÀÂ§åÃhz
+*ÁŸÃhÃhÃhÃhÃhÂ##Â#$Â#%Â#'ÃhÂ#(Â#)Ãf~ÁŸÁŸÁŸÃhÃf}ÃhÂ#Â#Â#Â#Â#-Â#.Â#*Â#+Â#,Â#0ÃhÃhÂ#1Â#2ÃhÃhÃhÃhÂ#6Â#4Â#5ÃhÃhÃhÁŸTÁŸãÁŸâÁŸáÁŸÂ¯ÔÂ#!ÂFcÂ#Â#Â#Â#Â#Â#Â#Â#
+Â#Â#!Â# ÃhÃmCÁÀ~Áb|
+ô,Â#ÂLKÂ#ÁÀÁÀÂ#Â#Â#
++Â#
+Â#ÂFxÃf|Ãf{÷Á«)fCÁgb3·"Áq4X
+ÁÌßÂ#øÂ#ùÃhšÃh§Â#EÂFeÂ#FÂFeÂ#
+Â#Â#Â#Â#Â#ÃhÛÃhÜÃhÝÃhÚÃhŠÃhÓÃhÔÃhÕÃhÖÃh×Ãh«Â#ÂFLÂ#Â#ÃhØÂ)ÍÂEÂ#?Â#@Â#AÂ#CÂ)ÎÃh¬Ãh­Ãh®Ãh±Â#GÂ#HÂ#IÂ#JÂ#NÂ#OÂ#PÂ#RÃh²Â#KÂ#LÂ#MÃh¯ÃnhÂ)Ãh°Â)Â)Â(]ÂE8ÃfÃlÃlÃlŸÃgÀ
+ÙÃk]EÃk^Ãk_Ãk`ÁÀ,`Â­åÃgÁ¯ÃgÄÃlÁÀ&ÁÀ(ÁÀ'ÃlÃl ÁÀ%øÁ«(bÁgu	WÔÁr
+ÁÒj¯Ão¥ÃoŠÂ#;ÂFaÂ#<Â#8Â#9Â#:Â#>Â#UÂ#SÂ#TÃhœÂ#hÂ#iÂ#kÃg»Þ&ÃhÀÂ(	ÃhÆÃhÇÃhÃh³ÃhŽÃh¶Ãh¡Â#lÂ#mÂ(ÂAÂ(	ÃhÃhÃh Â#nÂ#oÂ#pÂ#rÂ)7Â@DÃh¹ÃhºÃhŒÃhžÂ#bÂ#cÂ#dÂ#eÂ#fÂ#gÃg¿éÃo£Ão€Â#sÂ#tÂ#uÂ#vÂ#wÂ#VÂ#WÂ#YÃhÅÂ#ZÂFeÂ#[Â#\Â#^Â#_Â#`ÃhÁÃhÂÃhÃÃhÄÌÁ©4hÁa£$ÂG
+l
+
+ÃflÃfÃfÃflÃpmÃpnÃl¡¿Ãl¢ÃnbÃnaÃndÃhÈÂ"3Â"OÂ#}Â#~Â#Â#Â"NÂMÂ#DÃnfÂ"MÃhÉÃhÊÂ#Â#ÃhÑÃhÒÂ#ÂFMÃhÍÃhÏÃhÐÁŸê4ÁŸé4ËÁ©
+4Áb4ŽÂEÈÂ"'Â"(Â"*Â"+Â",ÃnQÂ#{ÂFQÂ#xÂ#yÂ#zÂ#|ÃhÌÂ"2 ÂE3eÃgœÂ"1Â".Ãh£Ãh€Â"/Ãh¥Â(Â(ÃnkÃnlÃnmÃnnÃnoÃpoÂ"TÂ"UÃppÃgÃÂ)Â?GÂ"7Â"8Â":Â"4Â"5Â"6Â";ÃhïÃhòÃhñûüÃhðÃgÊÂ#Â#Â#Â#Â#ÂFKÂ#Â#Â#Â#Â#Â)Â?JÁŸÁŸÁŸÁŸÁŸÁŸÂ"BÂ"<Â"?Â">Â"=Â"@Â"AÂ"CÂ"DÃgÉÕúÃgÇ»Á©
+ ÁgCæÇÂ(ZÂ([Â#ûÂ#üÂ#þÂ#ÿÃhêÁÀRÁÀXÁÀYÁÀUÁÀSÁŸìÂ#£ÂF\Â#€Â#ŠÂ# Â#¡Â#¢Â#§ÁŸîÁŸïÁŸôÁŸõÁŸòÂªÁŸíÁd­Â#ÂFMÂ#Â#Â#Ãf£FÂ!üÂ!ýÃhéM:Á­Ágë
+?Â#Æ	Â#ÈÂ#ÉÂ#ÌÂ#ÕÂ#ÇÂ#ËÂ#ÊÂ#ÒÂ#Ó;Á­Ágé
+><Á­Ãl»ÃlŒ=ÃYé'ÁšÒÁc
+2%ÇÉÂ>æÁÀõÁhóÂ(7GÇÂ""ÁÀMÁgèÂAÜÂ(6ÃlÆÂÞÂ#«Â#¬Â#šÂ#©Â#ªÂ#­ÃhëÂ#®Â#¯ŒÁ©uÁb¿M
+3ÌÄÂ@%Â#±ÂF[Ãf€ÃlŽÃl¶ÃlµÂ)!ÁÀcÁÀdÁÀaÁcWÂFXÁÀbÁcWÂ#¹iÃlŸÁÀ_Áa&1
+ÂAŸªÃlžÃl¹LÁ©Ž]ÁcXÂFMÁÀ]Á¿Á¿Á¿Á¿ÁdÖÁ¿ÁdÕÂ!Â!îÁ©÷
+ Á`w
+:ÆÉÂ>Ò6
+Â#œÂFDÂ#ŸÂ#ºÂ#»Â#ŒÂ#ÀÃiÃl¿ÃlÁÃlÃÃlÀÃlÄÃlÅÃiÃiÃlÇÂ#ÄÂ#ÅÂ#ÁÂ#ÂÂ#ÃÂ!Â"Â(IÂ(JÂ"<Ãi	Ãi
+ ÃiÂ!ÿÂH«Â(FÂ??Â(GÂ(WÁŸöSÃiÁŸüÁŸýÁŸûÁcOÂ"NÁŸùRÁŸ÷ÁiGÂ(AÂ(BÂ(@Â(?Â(CÂ(DQÁ«ŠÁh.ÆÁ¿Á¿	Á¿
+Á¿Á¿
+@@ -686,7 +633,7 @@
+ 	
+Aœ=E
+œUb¿VC¿Y¿\¿Z¿X¿W=¿¿¿¿¿¿wšýšà
+yMo
+Ì­¿­¿šç
+a
+	­I1­­šá
+JHŸ
+šæ­z­{­§­š©©	­­©
+
+ L×©©©©©©©©
+
+ L×¿|©
+©"©ÁASÁAT©­ÙÿÔ
+ËŽ	²²²³· ·¡³ü²µ²¶žnžo³ý³ú³^ žržtžsžqžužvªw
+h
+·»	»
+ »
+ÁKdÁKeªyªzª
+jÈª·»»ª}^.
+f	·ªx¡
+iÊ­Ý»­Þ»ÁDJªug
+æ
+Œ S«ÈÁCÁKhÁKiÁKjªvI
+¿ þÊ²ÀÁC-ÁC.ÁKk°y
+{Æ³··°Az° ³
+³
+³³
+°óÆ±Þ/IÁCÁC­ßúÑ
+C
+wýŽ	²œ²Ã²Ä­ÚÔ
+SG
+ ¹©¹ª³ ³"³#³&³%³!±á/Q³±â±¯^O³O²Æ
+ÜÌ·£Ì¹Û¹Ü¹Ý¹á¹Þ¹ßª¶
+²Ç©%	³t7	³¬	³«³w³x³z³{
+³}³~³³
+³y²Èª
+
+³q8	ª·³k³l³
+³³¡ªžD ³³ªŸaž±ªºª»ª¿`Á@!Á@"ª¹@ ³nô³o³³³­ý·Í·Î­ÿ®­þªÂÈØ·¬·­³³³
+CÓ³
+>·Ð³
+Ab³¹ë¹ì©E1Ö8L7	ng8È	$ô=Q/
+-æ€Ç
+	G
+
+4
+ì
+D
+N5®	.µ€µ§µŠµ¥ž_Á@c©d©ežaðÁApÁAqÁAlÁAnÁAožQ©S©UÁ@©gž[©X¢n©^©_©[¢m©{©}©~©x©y©©©©ž©±ÿ²ÁJßÁJà©©©©©ÁK­ÁK¯ÁK°ÁK®©k«ÁK
+ÁKª¿¥¿Š©i©j©
+©
+©©©©ªàÁAtžµž¶ž²ž³©#e@ìe	;
+ÁÆ««©€¢nÁK©§©¥¢l©Š
+±è
+±ê³[³\±ëþ±é±#@­æ Ø³c­³5ÀµÎµÏÁMX
+ÁMZ
+ÁM[
+ÁMY
+ÁJïÁM\ÁMaÁM`ÁM_©'¢È©(ÁMgÁMh©$æ?ìe	®ÝÄ©£b
+îL³]€Û­¬
+e«
+²©©¡©©ª|¹­µð°îþ'UžžÁAÁAÁK«ÁK¬ÁAÁAÁAÁAÁA­ï
+$Œ1²­ð
+%»1XÁJöžžž²Už|ñž}ðž³1ž©~qÏ
+ñÿ#
+T
++æ€Ç
+	G
+
+4
+ì
+D
+N5®	.µ€µ§µŠµ¥ž_Á@c©d©ežaðÁApÁAqÁAlÁAnÁAožQ©S©UÁ@©gž[©X¢n©^©_©[¢m©{©}©~©x©y©©©©ž©±ÿ²ÁJßÁJà©©©©©ÁK­ÁK¯ÁK°ÁK®©k«ÁK
+ÁKª©i©j©
+©
+©©©©ªÎ¿ŠÎžµž¶ž²ž³©#e@ìe	;
+ÁÆ««©€¢nÁK©§©¥¢l©Š
+±è
+±ê³[³\±ëþ±é±#@­æ Ø³c­³5ÀµÎµÏÁMX
+ÁMZ
+ÁM[
+ÁMY
+ÁJïÁM\ÁMaÁM`ÁM_©'¢È©(ÁMgÁMh©$æ?ìe	®ÝÄ©£b
+îL³]€Û­¬
+e«
+²©©¡©©ª|¹­µð°îþ'UžžÁAÁAÁK«ÁK¬ÁAÁAÁAÁAÁA­ï
+$Œ1²­ð
+%»1XÁJöžžž²Už|ñž}ðž³1ž©~qÏ
+ñÿ#
+T
+ Æ	.`
+GT$:*
+Œ+­âž3ÁC/ÁC0±÷í±øíÁJæÁJçº_º`Á@ž1ž2žz«
+Ì#:«
+(ÁJœÁJŒ©yqÎþ3Y
+ Î
+"^
+Ò9;Q)±
+ª ºaºb­ã&ÿœ³ÐžóúÁMtÁAzûÁAxÁMvÁMw©M¹
+	
+1Ÿ©ª©°©«©¬­ó©¶©·­ô©¹è©ºç²1¿²1ŸªŠª§©N¹
+	
+0ŸÁJÊ©Hk©Jk©µ©Ik©R
+@¢¹®¹²¹³¹Ž¹°¹¶¹·³Ry³Uw³S­­
+k­®
+j³N¬³Q¬³P«³O­³4
+ùWž.«	+
+ø¡©Œ©œ©*
+÷Z³T³V³W©+ó«
+-M«-M©F1IJC1L	
+Ò	h32>±	%	!dô
+ C[#
+æ
+€Ç
+E
+8	%Ç
+z­
+
+5
+4®°ÁD
+ÁD
+«
+«
+ÁDÁDÁKÁKÁD©À©Ã©Â©Á·Á-žÁD©Ê©Í©Î©Ë·Âä©Ó©Ù©Ö©Ï©Ò©Ñ©Ð·îÁOÁOÁOÁO®®µÓ=µÔ;©Þ©ß©Ú©Ý©Ü©Ûž4ž5°µ%ÎÙ}÷NèÁD©K{·þ
+ñßü©á©ã©âÁOÁO©äÁA®ÁA¯µÕCµÖC©ì©ï©í$©îÁA±©ö©ú©÷©øµ×µØÁA²©ñ©ò©ó©ô©Æ
+µ
+
+ñ©ç©ë©è©éÁDÁD°ºæd°»©%#.6€H
+Rì
+@@ -1240,7 +1187,7 @@
+ Á`ÁjÁkÁÝÁcÁdÁbÁfÁ×
+ 
+Ám
+Ál
+Áv
+Ás
+Áq
+Án
+Áo
+ÁØÁsü
+Áþa
+Áþ^
+Áþ_
+ÁYjGvÿÁlól
+ÎK^'·ðëœåtŽÁÂ7àÂ<ŸÂ<¿ÁYkFŠ
+
+
+jÁb}lîËŒ²àt³ÁnÁnÁŸÁŒ
+ÁYKÁYLÁðßÁðàÁKûÂ<ßÂ<ÞÂ<ÝÂ<àÂ<áÁYÁrÁEÁí4ÁSêÂA"ÂAÂA ÁðôÁOÄÂ@¹ÁYHùÁj
+UÆÁí=Áí@ÁíAÁíBÁí>ÁíDÁíEÁéàÁí:Áí9Áí<ÁíFÁíGÁYÁrÁEÁYzGùÁnsÅR
+ÁíJÁY}ÁÑÁY|Áº
+Áí8ÁY{Áí5ÁY~ÁYÁPi±
+DR	ù>PÐ®ÁbÖFÍ¶
+%Ü
+	¶Näy¿!ÁDP÷Â×Â×Â<¥ÁÝÁvŒžÁ[7Á[8Á[9ÁYUÊÁcá³ob
+·öîÀÁUÁTÁYZ²ûÁfÁVÁXÁYÁÿÜÁP
+ÁfÁðãÁ\Á]ÁYPÁYQÂ<§ÁðæÁðèÁðéÁð>ÁðçÁÿôÂCbÂCcÁÿõÁ[/ÁX×ªÁ|ùÁXØÁoÁYAÁYBÁYCÁ[0Á[2Á[1ÁÀÁ¶:Á[
+Â{ÚÂÕùÂÕúÂÕüÂÖÂÖÂÖÂÖÂÖÁ[Â{ÙÂÕýÁ¿ÁÁ	Á¹ÈÁÂÁÅÁÆÁÄÁYDšµÁj¢ÿ¶€cŸ,:Á³cÂEÂEÂE ÂE¡ÁÁ}@Â4³Â4ŽÁð@ÁðAÁð?ÁYE°ÒÁwŒžŸeÁP(
+ã";0b
+(ÊZÝ
+
+
+£¹
+
+ÊŠ i
+Gñ"Á^`e*5"^JGk3
+"
+
+ö 
+¢$'£
+Xk4q
+M
+ Ž
+?g&B
+Fw~ 9¯
+5
+nK)	+
+TSÊ	×©5$Á±
+í&5
+	"
+-Â;ÁöPÁöQÂ;ÁYî¥Án}Ásñ<·ýŸÁÕÂ8ÆÁÁn
+}Ásð;·ý»ÁÕÂ8ÂÁÁñÁæ%Â7èÂ×)Â×*Án
+ÁP/ÁP0ÁYïÁV
+ÔÁ<ÁV
+ÓÁ;Á÷/Á÷0ÁP*l
+É[=2ÁkwÁ@JÁÄÁöÁö"Áö!Áö Á[ÏÁnHÁnIÁXUÁ ØÁY£ÁY€ÁXVÁá÷Áê8ÂCÁê9Á~uÁ÷%Á÷&ÂÕPÂÕQÁ~vÁö%ÁöÁP,ÁŠúÁP-ÁøÁøÁö)Áö*ÁP+k$;1ÁkvÁ@JÁÄÁVLÁö
+ÁnKÁZ\ÝÁZ]ÜÁnPÁnQÂÕSÁXÁXÁXÁXÁV&Á÷(Á÷)Â9?Áí\žÁí]·Áö+Áö,Á÷'ÁP1"Õ K
+û³ÁwBÁAr
+ÜÃÁÒÂ;xÁYö§>rÁ¯«ÂAÂÖäÂÖçÂÖåÂÖæÁYùÁY÷²¬ÁYøÁ5ÁYÁYÁYÁYÁY ÁY¡Â;qÂ;sÂ;tÂ;rÁPVÕ
+!m§JÁºpÁV,
+Áí_Áí`Â?vÁV>+ÁXkÁV?*ÁXmÁXnÁZ.ÁZ/ÁZ0ÁV;ÁV<ÁZ1	Áå8ÁZ:
+ÁZ7	ÁZ5
+ÁZ2
++Â;ÁöPÁöQÂ;ÁYî¥Án}Ásñ<·ýŸÁÕÂ8ÆÁÁn
+}Ásð;·ý»ÁÕÂ8ÂÁÁñÁæ%Â7èÂ×)Â×*Án
+ÁP/ÁP0ÁYïÁV
+ÔÁ<ÁV
+ÓÁ;Á÷/Á÷0ÁP*l
+ÉÞ}=2ÁkwÁ@JÁÄÁöÁö"Áö!Áö ÁnHÁnIÁXUÁ ØÁY£ÁY€ÁXVÁá÷Áê8ÂCÁê9Á~uÁ÷%Á÷&ÂÕPÂÕQÁ~vÁö%ÁöÁP,ÁŠúÁP-ÁøÁøÁö)Áö*ÁP+k$;1ÁkvÁ@JÁÄÁVLÁö
+ÁnKÁZ\ÝÁZ]ÜÁnPÁnQÂÕSÁXÁXÁXÁXÁV&Á÷(Á÷)Â9?Áí\žÁí]·Áö+Áö,Á÷'ÁP1"Õ K
+û³ÁwBÁAr
+ÜÃÁÒÂ;xÁYö§>rÁ¯«ÂAÂÖäÂÖçÂÖåÂÖæÁYùÁY÷²¬ÁYøÁ5ÁYÁYÁYÁYÁY ÁY¡Â;qÂ;sÂ;tÂ;rÁPVÕ
+!m§JÁºpÁV,
+Áí_Áí`Â?vÁV>+ÁXkÁV?*ÁXmÁXnÁZ.ÁZ/ÁZ0ÁV;ÁV<ÁZ1	Áå8ÁZ:
+ÁZ7	ÁZ5
+ÁZ2
+ ÁZ3
+ ÁíTÁíZÁíWÁíUÁZEÁVÁZFÁP2"Ô Kä²ÁmUÁNÜÃÁÒÁn8úÁ7Á8ÁZ_
+ÁœöÂ;{Â;yÂ;zÁZ`ÁÒÁniÁnkÁnlÁnjÂCÂCÁXLq
+3ÜTç	
+D¹ÁhYÁ@
+
+ Á
+ÁÌÁÍÂ@ÐÁÏÁÐÁPW
+ QÁzÁA²ÁýàÁýáÁY¶
+@@ -1358,10 +1305,10 @@
+ Â]
+ÂL/ÂL.Â]NÂ]RÂ]SÂ]VÂ]WÂ]YÂ]XÂ]aÂKú)ÂL$Â]OÂ][Â]\Â]^Â]_Â]bÂKù)ÂKø%©}Â]iÂ]jÂ\ÓÂ\ÔÂ]eÂ]cÂ]dÂ]fÂ]lÂ]gÂ]hÂL'©Â]mÂ]nÂ\äÂ\åÂL(šÂL
+ÂV.ÂV/ÂLÂ\ÖÂ\×Â]sBÐ4
+o#&XN÷¥
+ž~(
+².ÿB
+IcÉJÂcÜÂfwÛ	XVÏ	'Â~Â~Â~Â~Â~Â~Â~Â~Â~ÂuºÂuŒÂu¿Â¿Âu»ÂpNÂpOÂ~Â~ÂÇÂ~ŠÂ~šÂ~¢Â~£ÂuÀåÂuÁÂuÂÂhqÂhrÂ~©Âp*ÂhX
+Âh[Âh\ÂhZÂh]Âh^Âf{ñ¿~Âp1Âp.Âp/Âp2Âp3Âf|ñ¿
+zÂÅÂÈÂÉÂhvê8Â~Â~ Â~Â~¡Âxa8Â~ÂxbÂfxÛNT
+Ä		ÂpKÂpLÂhjÂ~«ÂhkÂ~­Âp4tÂp6Âp8Âp:Âp7ÂpAÂpBÂpCÂpDÂpEÂpFÂ·Âp'cÂp(Âp5Âp;Âp<Âp>Âp?Â~¬ÂžÂÌÂÍÂÐÂpPÂpSÂpTÂpQÂpRÂoTÂpWÂ]}?^3ÂjÂj
+Âd
+ÂxÐÂxÑÂ]>
+O§ÂdÂdÂ]>
+OŠÂxÚÂxÙÂdÏÂdÍÂdÌÂxÛÂxÜÂdÂxäÂxåÂxæÂj
+³Âj
+Âj Â?Â@Â]~A(~ÂxôÂxõÂj¯+
+;Â}6Â}7Â}8ÂxøÂ}3Â}4Â}5ÂxùÂj!Â^Æîp?¯ÍEù
+
+9{ÂfÂÕÂÖÂØÂÔÂÙÂ}ÛÂ}ÜÂpµ
+ñFÂ}ÔÂu§FÂfŒdÂ}ÕÂ}ÖÂ}×Â}ØÂ}ÙÂ}ÚÂfŸçÂfÀÝÂfÄÂfÅÂfœãÂiÊÂiËÂiÍÂiÎÂ}ÁÂ}ÅÂ}ÆÂ}ÇÂâÂãÂ}ÂÂ}ÃÂfÊ­|E ±Â­Â®ÂïÂfË§Å!°ÂÂÂ^ÇRÂi]Âi`Âi^Âi_ÂifRÂ^ÉÝ
+ e?~E÷
+ °Â}ÑÂ}ÒÂ^ÍÜÂnÂrEö
+"œÂyœóÂÂÂÂÂiÓöÂ
+,Â_Â_¢Â_£ÂyÜÂ_«5Â_¬	,Â_¶Â_·ÂyÝÂ_Â_ÂiÐÂiÑÂyÌøÂyÒøÂyÓôÂyÔøÂyÕ÷Â_žøÂxÊÂyØÂiÏÂyäÂyåÂ_Â_Â_Â_Â_Â_Â_Â_ÂpœÂ_¹ÂlNÂlOÂ_Â_ Â_ºÂ_€Â_¥Â_ŠÂ]
+XC}h
+
+-7
+ 
+
+ 
+ b
+&'6AuÂ4
+ø%9>e2äaŒÍÞÛ22¯ÂÂ] ÂköÂ]¡Âeo
+œÂ]šÂ]©ÂlÂlÂ`~
+óÂ`Â]Â]Âj*Âj+Â]ªÃ
+œÂlÂlÂlÂlÂ`Â`ÂjcÂjdÂ`Âl8Âl9ÂeÂl4Âl1Âl2Â`Âj¥ÂjŠÂjaÂjbÂeÂeÂrŸÂr¿ÂeÂeÂl
+Âl
+Â]eyû÷ÂjsÂjiÂjjÂjtÂ^ükÂjh·Â^ýÂ_ÂjoÂjmÂjnÂ]Ê§Â]Ë§ÂjpÂ]d	qû÷Â_ÂjkÂjlÂ]£bpŒ
+Õ	±
+S1Âl Âl"Âl!ÂjÂjÂ`g¡qÂ`h¡pÂj>SÂj?SÂl$Âl&Âl'Âl%Â^ÑFWäÂjÂjÂ^âÂ^áFWäÂl*Âl,Âj@ÂjÂjÂjAÂ]€bpŒ
+Õ	±
+S0Â]®ÂjBÂjCÂqÂqÂj(Âj)Âdr#Âds#Â^Â^@Â^ÂjÀ:vÂ_ý>
+pÂjÂjÂq!Âq"Â^Â^Â_ü>
+oÂ_ÂjÂjÂ^§3ŠÂIô
+[6i	
+1
+=M
+YÎn ÂyÂÖÂyÂ_\Â_SÂ_TÂ_]Â_VÂ_WÂ_YÂ_ZÂ_[Â_`Â_aÂ^
+ØÂ^
+"·Â_k5€B
+Â_bÂ_cÂ_eÂ_l7C
+ÂdŠÂd¥Âd€Âd¡Âd¢Âd§Âd®cÂ_nÂjÂjÂ_oÂ^
+©ÞÂ_Â_Â_Â_Â_Â_Â_ÂrÂrÂrÂ]ÿ
++7
+ 
+
+ 
+ b
+&'6AuÂ4
+ø%9>e2äaŒÍÞÛ22¯ÂÂ] ÂköÂ]¡Âj2Âj3Âj4Âj5Âeo
+œÂ]šÂ]©ÂlÂlÂ`~
+óÂ`Â]Â]Âj*Âj+Â]ªÃ
+œÂlÂlÂlÂlÂ`Â`ÂjcÂjdÂ`Âl8Âl9ÂeÂl4Âl1Âl2Â`Âj¥ÂjŠÂjaÂjbÂeÂeÂrŸÂr¿ÂeÂeÂl
+Âl
+Â]eyû÷ÂjsÂjiÂjjÂjtÂ^ükÂjh·Â^ýÂ_ÂjoÂjmÂjnÂ]Ê§Â]Ë§ÂjpÂ]d	qû÷Â_ÂjkÂjlÂ]£bpŒ
+Õ	±
+S1Âl Âl"Âl!ÂjÂjÂ`g¡qÂ`h¡pÂj>SÂj?SÂl$Âl&Âl'Âl%Â^ÑFWäÂjÂjÂ^âÂ^áFWäÂl*Âl,Âj@ÂjÂjÂjAÂ]€bpŒ
+Õ	±
+S0Â]®ÂjBÂjCÂqÂqÂj(Âj)Âdr#Âds#Â^Â^@Â^ÂjÀ:vÂ_ý>
+pÂjÂjÂjFÛÂjGÛÂ^Â^Â_ü>
+oÂ_ÂjÂjÂ^§3ŠÂIô
+[6i	
+1
+=M
+YÎn ÂyÂÖÂyÂ_\Â_SÂ_TÂ_]Â_VÂ_WÂ_YÂ_ZÂ_[Â_`Â_aÂ^
+ØÂ^
+"·Â_k5€B
+Â_bÂ_cÂ_eÂ_l7C
+ÂdŠÂd¥Âd€Âd¡Âd¢Âd§Âd®cÂ_nÂjÂjÂ_oÂ^
+©ÞÂ_Â_Â_Â_Â_Â_Â_ÂrÂrÂrÂ]ÿ
+ 
+ŠØÁIÞ
+S	663	
+'ëI°Â_$Â_%Â_qÂ_rÂ^B:BŽÂ_"Â_#Â^ã$
+
+oØÂ_GÂ_HÂ_)Â_*Â_+Â_fÂ_gÂn Â_JÂ_KÂj Âj¡Â_PÂ_QÂ^ä#
+
+-	:Â_.Â_-Â_NÂ_OÂ_5Â_6Â_4Â_3Â_2Â_/Â_0Â_81Â_90Â_FÂ^
+Â^
+Â_Âd°Â_ Â_w
+
+Ü;\Â^Â^Â_x
+
+
+Û:[Âl/Â^dú
+é
+ézöhÂd|@Âd}@Âj2Âj3Âj4Âj5Âq.Âq1Âq5Âq6Âq7Âq8Âq:Âq;Âq<Âq=Âq/Âq3Âq2Âq4Â^ Â^!Âq]Âq_Âq`Âq^Â^4Â^5ÂqÆÂqcÂqgÂqdÂqeÂ^öÒÂ^÷ÒÂqÂqÂqÂq\ÂqiÂqaÂqbÂqvÂn`óÂqzÂqIÂqJÂjKÂ^),Â^**ÂjLÂq&tÂq'sÂqoÂqtÂqrÂqpÂqqÂqjÂqkÂTÂ^%(ÂqNÂ^&'ÂqEÂqHÂ^$$ÂqFÂ^[Âq{ÂqXÂqYÂn^Â^\Âq|Âq}ÂjÇÂ^GÂjFÂjGÂ^-Â^/Âq~ÂqÂqÂqÂqÂqÂq)Â^
+FÂqÂqÂqÂq
+ÂqÂqÂqÂ]F
+
+
+-Â]Âq*Âq-Â]SCÈ	ÂqwÂqxÂrÂrÂqÂqÂqÂqÂqŠÂq©Âq§ÂqšÂq£Âq¢Âq€Âq Âq¡Â^Lù
+å
+é|Â\ÂqŒÂqœÂq·ÂqžÂq­Â^8yÂq±Â^9zÂq®ÂqŽÂqµÂq¶ÂqÁÂqÂÂqÃÂqBÂqCÂ^=ÂqŸÂ^:Âq»Âq¿Â^;ÂqÀÂ_ze
+2ßÂr¥ÂqÄÂj6lÂj7ÂqPÂrŠÂr§Â_{e
+2àÂqQOÂqRÂ`xÀÂ^(Â`yÀÂqÌÂqËÂqÑÂqÍÂqÏÂqÒÂqÓÂq>Âq?Âr¢Âr£Âq@ÂqAÂnbÂncÂdÓþ§ÂdÓþ§Â]WAPC}	Y
+7
+
++	:Â_.Â_-Â_NÂ_OÂ_5Â_6Â_4Â_3Â_2Â_/Â_0Â_81Â_90Â_FÂ^
+Â^
+Â_Âd°Â_ Â_w
+
+Ü;\Â^Â^Â_x
+
+
+Û:[Âl/Â^dú
+é
+ézöhÂd|@Âd}@Âq.Âq1Âq5Âq6Âq7Âq8Âq:Âq;Âq<Âq=Âq/Âq3Âq2Âq4Â^ Â^!Âq]Âq_Âq`Âq^Â^4Â^5ÂqÆÂqcÂqgÂqdÂqeÂ^öÒÂ^÷ÒÂqÂqÂqÂq\ÂqiÂqaÂqbÂqvÂn`óÂqzÂqIÂqJÂjKÂ^),Â^**ÂjLÂq&tÂq'sÂqoÂqtÂqrÂqpÂqqÂqjÂqkÂTÂ^%(ÂqNÂ^&'ÂqEÂqHÂ^$$ÂqFÂ^[Âq{ÂqXÂqYÂn^Â^\Âq|Âq}ÂjÇÂ^GÂ^-Â^/Âq~ÂqÂqÂqÂqÂqÂq)Â^
+FÂqÂqÂqÂq
+ÂqÂqÂqÂ]F
+
+
++Â]Âq*Âq-Â]SCÈ	ÂqwÂqxÂrÂrÂqÂqÂqÂqÂqŠÂq©Âq§ÂqšÂq£Âq¢Âq€Âq Âq¡Â^Lù
+å
+é|Â\ÂqŒÂqœÂq·ÂqžÂq­Â^8yÂq±Â^9zÂq®ÂqŽÂqµÂq¶ÂqÁÂqÂÂqÃÂqBÂqCÂ^=ÂqŸÂ^:Âq»Âq¿Â^;ÂqÀÂ_ze
+2ßÂr¥ÂqÄÂr¡ÂqPÂrŠÂr§Â_{e
+2àÂqQOÂqRÂ`xÂ^(Â`yÂqÌÂqËÂqÑÂqÍÂqÏÂqÒÂqÓÂq>Âq?Âr¢Âr£Âq@ÂqAÂnbÂncÂdÓþ§ÂdÓþ§Â]WAPC}	Y
+7
+
+ 
+ 
+
+RÂ£Ð5µ×6
+ø' =Îf	±®O
+R
+ š
+ ÂÂxÂ^Âp§Âp£Â`}(Âp¥ÂpŠÂpšÂi{Âi~ÂiÂi|Âeì!ÂiÂiÂiÂi
+ÂiÂiÂi¥Âi§ÂiŠÂe Âe¡Âe¢Âe£Âeì	Âi
+Âi	Âi
+Âi
+@@ -1370,8 +1317,8 @@
+ ÂxÂ_
+Â_
+Â_
+Â_Â_Â`d¯Â`eÂ`fÂi¯Âi±Âi°Âi²ÂlÂlÂi³Â^Ö	h5
+ Œ
+
+ _¥
+-MIjÂlÂlÂeÂe~ÂeÂeÂjYÂjZÂ^ÚÂ^ÛÂevÂ]ã³Â]Ú³Â]Â]Â]ÂjSÂjTÂer­ Â]± Â]²ÂjRÂ]¯ŠÂ]°ŠÂes¬ÂeÂeÂ]³Â]ŽRÂfÂfÂ^×g>Á|
+
+-
+ÂyŸÂ^ñÂeÂj[Âj\Ây¿ÂyÀÂ^óÂÅÂÆÂl:Âl;ÂikÂ`Â`ÂilÂ^þÂ^ÿmÂioÂÃÂÄÂ^ô<§Ý
+Ú>f³ÂrÅÂrÆÂ^õ;§Ý
+Ú¥Â_¯4
+©B#+5
+
+4		
+A·]Øã.$
+
+PW
+ÒI8$#
+t\
++MIjÂlÂlÂeÂe~ÂeÂeÂjYÂjZÂ^ÚÂ^ÛÂevÂ]ã³Â]Ú³Â]Â]Â]ÂjSÂjTÂer
+®ÿ Â]± Â]²ÂjRÂ]¯ŠÂ]°ŠÂes
+­ÿÂeÂeÂ]³Â]ŽRÂfÂfÂ^×g>Á|
+
++
+ÂyŸÂ^ñÂeÂj[Âj\Ây¿ÂyÀÂ^óEÂj9ÂÅÂÆÂl:Âl;ÂikÂ`Â`ÂilÂ^þÂ^ÿmÂioÂÃÂÄÂ^ô<§Ý
+Ú>f³ÂrÅÂrÆÂ^õ;§Ý
+Ú¥Â_¯4
+©B#+5
+
+4		
+A·]Øã.$
+
+PW
+ÒI8$#
+t\
+ eÂ`ÓÂ`ÔÂsÄÂaÂaÂaÂ`cåÂ_æÂ_çÂ_êÂ_åéÂajÂafÂagÂahÂlÂlÂe±Âe²*ÂÞÂßÂ`cåÂa¯fÂaÂaÂaÂasÂarÂmÂaÂaÂaÂaÂlÌLÂlÍÂlÎÂlÑÂs®Âs°Âs±Âs¯Âa!Âa
+ÂaÂa±eÂa"Âa$Âa%Âa#Âa³eÂa°fcÂa	Âa
+ Âa
+Ârû|ÂrüÂzyÂm`Âm
+ÂzSÂzTÂ`2
+B
+?fÂsjÂsÊÂzOÂ`éÂ`êÂzKÂzLÂzMÂzNÂsÐÂaÂa
+ÂsAÂsBÂs>Âs?Âa@ó
+FÂaGÂaCÂa9Âa:Âa;Âa<Âa=Âa>ÂaAòBÂs<Â`ëÂ`ìÂ`íÂ`îÂ`ïÂaDÂaEÂaFÂ÷Âs}Âs~ÂrÌÂ]{ÍX2
+-?
+ÂsHÂsIÂ]|Âs9Â`·Â`žÂa^ÔŽÂçÂÂÂÂèÂsÓÂsÔÂæÂsKÂsLÂsFÂsGÂsNÂ_òmÅÂ_óÂsÂsÂsÂs
+ÂlàÂadÂÂsÂsÂ_÷sÂÂ_øuÂsmÂsnÂsoÂs¶ÂaeÂa|Â`ŒÌÂsÂsÂ`œËÂ_ðÒK
+
+#
+(
+Hœª&4$ŒÜ3"n64!x&	
+d
+ÂlÂlÂs¡Âl{WÂÕÂl|Âs^Âs_ÂlÚÂsÂlÙÂlÂlÂaQMÂaTÂs[Âs\ÂaRB
+ÂaPÂa~ÂaÂa}ÂsÂsÂ_ñÒK
+
+
+5
+(
+­&4»
+!£.&	
+oÂaVÂaWÂeÈÂeÉÂaÂÂlÂl
+Â`ÁZø2
+JÂaÂaÂaLO
+*ÂlÂlwÂloÂlrÂlsÂlpÂluÂlvÂlyÂlzÂlxÂazwÂlwÂmÂmÂs·ÂsžÂa`ÂaÂaÂsÒÂ`ÄÂ`ÅÂ`ÆÂ`ÇÂadÂròÂsŠÂscEÂ`ÊªÛÂaÂaÂ`ÌÂ`Ë§}³Âs»Âlª Âl±Âl­Âl¬\Âl«Âz(Âz)Âl®Âl¯ÂavÂawÂ_°4
+
+!"	+
+2		
+@Ž6
+±ä,$
+
+ O	C
+¶L7 
+@@ -1643,7 +1590,7 @@
+ Âä
+ ÂñiÂñjÂØž
+èêÏ	¥
+Âõ¥ÂãÅÕÂøFÂøGÂØ¶ÂØ²u|éÎ©ÂØ³øæÐ
+¥ÂåÂåÂØÂØÂñqÂñtÂñrÂñpÂØ¥©ÂØŠÂÜAÂÜBÂÜ?
+,ÂÜ@ÂäRÂñÂØ§«
+ +	ÂñÂñÂØ©ÂñÂñÂäQÂÜ<ÂÜ:µÂõ³ÂõŽÂæÂæpÂæsÂæzÂævÂæuÂætÂæwÂæxÂærÂæ{ÂæqÂØïÂØðÂæ&ÂæÂæÂØô¢ôÂæ|,Âæ~ÂæÂæ}Âæ IÂæÂæÂæÂæÂæÂæÂæÂæÂæÂæÂæÂØñ^9ÂÜSEÂæÂÜPHÂÜQFÂæÂæ
+ÂæÂæÂæ©ÂæšÂæ¬Âæ«ÂæªÂæ­Â×v@
+-µ
+ËÉÏ=@°k
++µ
+ËÉÏ=@°Ä§
+ =)<	KuA-
+X"Z2\Á-*
+Âå²ÂåŽÂå³ÂåµÂØÂÂØÃÂö¡Âö¢Âö£Âß°Âß±Âß­Âß®ÂöšÂû³ÂôdÂöÂôeÂö€·
+ZÂûµÂÙCÏÂöª
+Âö«
+ÂóÍÂóÎÂâMÂçŸÂçÁÂçÄÂçÀÂç¿ÂçÂÂçÃÂáÆÂáÄÂáÃÂáÉÂáÇÂáÅÂáËÂáÌÂÙJÈÂâLráÂöŸáÂö¿Âá%
+Á)ÂòEÂòFÂöÂö ÂöÂáÂà¢ÂàÂàÂàÂàšÂàŒÂàœÂàÂà Âà²Âà¥Âà£ÂàµÂà¶Âà©ÂàªÂá 
+$
+
+Á)Âáý
+ Âç¥Âç Âç¡Âç	Âæi4ÂælÂækÂæjÂæmÂænÂç¢Âç£ÂÙ
+k9
+
+À£Ô¶bÁ3ÂßÂß~ÂßÂßÂßÂßÂßwÂßzÂßyÂßxÂß{Âß|ÂàÅÂàÇÂàËÂàÆÂàÈÂàÉÂæYÂàwÂàxÂà}Âå Âå¡Âà{ÂàyÂÝOÂÝRÂÝQÂÝPÂÝSÂÝTÂàÂàÂØÖ±6
+æÁ¬šÂàÂØ×ŽAÂàÑÂàÐÂàÏÂàÌÂàÍÂàEÂöÏÂàÛÂæK
+ÂæN
+ÂæM
+ÂæL
+ÂæI
+ ÂæJ
+@@ -1653,12 +1600,12 @@
+ Âê
+ ÂåŒÂåœÂ×Èu®ãßgã7ñòÂáÂáÂáÂáÂçÅÂçÉÂçÈÂçÆÂáÂáÂáÂáÂáÂÝi&+
+ÂáSÂáÂáQÂáUÂáPÂ×É s²Ãh
+ññÂÝh%
+Âá,Âá-Âß¥Âá1Âá2ÂßšÂá0ÂæÅÂÝ
+
++aÂß¥Âáœ
+ 
+-ÂóÇ	ÂÝaÂâ1Ââ8Ââ4Ââ3Ââ2Ââ5Ââ6ÂÝú
+`kÂÜŠgûalÂßÂßÂßÂßÂßÂßÂßÂß¡Âß ÂßÂß¢Âß£Âß©Âß¬Âß«ÂßªÂêÂê
+Âá£æÂá€æÂÙØÊ
+
+M
+
+
+ÂæCÂæDÂóÂóÂáÛÍÂáâÂáÞÂáãÂáÝÌÂáÜÂáßÂáàÂÝn
+Ò
+
+M!Ââ;Ââ<ÂáÍÂáÎpùÂáÏpÂæ8ÂáÐ
+iÂæ;Âæ=Âæ>Âæ<ÂÙÙ
+y
+:$
+MŸE	pÂæ&Âæ'Âæ(ÂôkÂáè
+:ÂôlÂômÂáç
+:
+-Âáæ
+:ÂÝl
+I
+!Fà
+b
+öÂæ1Âæ2ÂáÚÂæ,Âæ.Âæ-ÂáøÂáùÂáÔ$
+&ÂóCÂáÓ
+-
+!
+ÂáðÂáëÂáìÂáîÂáïÂáäÂáêÂáÒ"
+(Âæ@ÂáÕ
+NÂá×ÂáØÂáÖ
+KÂö°Â÷CÂáþÂâÂâÂáÿÂáüÂáýÂ×¶ôhµK8xÍ=).ãô
++ÂóÇ	ÂÝaÂâ1Ââ8Ââ4Ââ3Ââ2Ââ5Ââ6ÂÝú
+`kÂÜŠgûalÂßÂßÂßÂßÂßÂßÂßÂß¡Âß ÂßÂß¢Âß£Âß©Âß¬Âß«ÂßªÂêÂê
+Âá£æÂá€æÂÙØÊ
+h
+
+ÂæCÂæDÂóÂóÂáÛÍÂáâÂáÞÂáãÂáÝÌÂáÜÂáßÂáàÂÝn
+Ò
+
+M!Ââ;Ââ<ÂáÍÂáÎpùÂáÏpÂæ8ÂáÐ
+iÂæ;Âæ=Âæ>Âæ<ÂÙÙ
+y
+:$kŸE	pÂæ&Âæ'Âæ(ÂôkÂáè
+:ÂôlÂômÂáç
+:
++Âáæ
+:ÂÝl
+I
+!Fà
+b
+Âæ1Âæ2ÂáÚÂæ,Âæ.Âæ-ÂáøÂáùÂáÔ$
+&ÂáÓ
++
+!ÂáðÂáëÂáìÂáîÂáïÂáäÂáêÂáÒ"
+(Âæ@ÂáÕ
+NÂá×ÂáØÂáÖ
+KÂö°Â÷CÂáþÂâÂâÂáÿÂáüÂáýÂ×¶ôhµK8xÍ=).ãá±ô
+ =)C	Eu
+.-òU"Xy·VÁ)ÂúÂúÂúÂúÂâIÂâJÂâKÃBÃCÂûYÂûZÂÛóÂÝ#ÂÝ!ÂÝ&ÂÝ%ÂÝ$ÂÝ"Âä<ÂâEkã
+Âç°ÂÛôXdâ
+ÂÛ÷ÂâOÂâPÂâQÂÝ'ÂÝ)ÂÝ*ÂÝ(ÂÝ+ÂÝ,ÂÝ.ÂÝ/ÂÝ-ÂáÀk_œéÂÝMÂß³(š
+ë'ðÂçœÂßŽéÂì¯ÂæÂæ
+-ÂæÂæ
+Âæ
+ÂæÂæÂæÂæÂØâÂæÂæÂßµ*'ÂêµÂìÂÝN"0Âì ÂÝp2ÂìÂú€Âú¥Â×·ûªëüìN«0y£ä
+|A"'Q=Q	âÁ))Â×ÎÚÂ×ÏÂá§ÂÝ
+ÂâÂâÂâÂÝ
+ÂÝÂâ@ÂÝ}
+ÂÝÂÝ	ÂÝ~ÂÝÂÝÂÝÂâ
+@Ââ
+ÂØãÂçŒÂß¶Âß¹ÂßžÂß·ÂØäÂâ
+®Ââ
+ÂâÂå®
+Âå¯Âå°ÂÝÂÝÂÝÂØÎ?R\ÂØæFÂØçEÂ×Ã
+
+&
+WÂâÂâÂâÂØÏÞkF\ÂØÑ\ÂÝrÂÝsÂ×¿Â×ÀÂâ'Â×ŸÂâ)Ââ*Â×º
+-
+ªú
+XzA 
+
+ÂØËãÖ3Âá±Â×»$
+%
+öÂô\Ââ Ââ!Âô]Â×Å·Âö¥ÂöÙÂöÚÂöŠÂØéÂØêÂÙ
+¯ÂÙ¹ÂÝw
+Ïë
+/ÂÝyÂÝzÂÝ{ÂÙç
+Ë
+ÂÙžÂóÂóÂó Âó¡ÂóÂåÛ¿BÂåÜ¿BÂØÿ*;\që
+öNE¬pÌ
+
+ëJÂ÷q
+
+ZÂ÷r
+
+YÂçÍtÂçÑÂçÖrÂçÐrÂçÎžÂèDHÂèEÂèFÂèJÂÙÂÙÂÙ	
+A|.Ù
++ÂæÂæ
+Âæ
+ÂæÂæÂæÂæÂØâÂæÂæÂßµ*'ÂêµÂìÂÝN"0Âì ÂÝp2ÂìÂú€Âú¥Â×·ûªëüìN«0y£ä
+|="'Q=Q	âÁ))Â×ÎÚÂ×ÏÂá§ÂÝ
+ÂâÂâÂâÂÝ
+ÂÝÂâ@ÂÝ}
+ÂÝÂÝ	ÂÝ~ÂÝÂÝÂÝÂâ
+@Ââ
+ÂØãÂçŒÂß¶Âß¹ÂßžÂß·ÂØäÂâ
+®Ââ
+ÂâÂå®
+Âå¯Âå°ÂÝÂÝÂÝÂØÎ?R\ÂØæFÂØçEÂ×Ã
+
+&
+×ÂâÂâÂâÂØÏÞ×F\ÂØÑ\ÂÝrÂÝsÂ×¿Â×ÀÂâ'Â×ŸÂâ)Ââ*Â×º
++
+ªú
+Xz= 
+
+ÂØËãÖ3Âá±Â×»$
+%
+öÂô\Ââ Ââ!Âô]Â×Å·Âö¥ÂöÙÂöÚÂöŠÂØéÂØêÂÙ
+¯ÂÙ¹ÂÝw
+Ïë
+/ÂÝyÂÝzÂÝ{ÂÙç
+Ë
+ÂÙžÂóÂóÂó Âó¡ÂóÂåÛ¿BÂåÜ¿BÂØÿ*;\që
+öNE¬pÌ
+
+ëJÂ÷q
+
+ZÂ÷r
+
+YÂçÍtÂçÑÂçÖrÂçÐrÂçÎžÂèDHÂèEÂèFÂèJÂÙÂÙÂÙ	
+A|.Ù
+ +ÂèÂ÷šÂ÷©Âèh-Âè<Âè=Âè@ÂèAÂèBÂèCÂÙ	Œ	-Ø
++Âèb1ÜÂècÂÙÂÙ	ÂèPUÛÂòyÂ÷tÂèm:ìÂ÷ÂÝæÂÝçÂÝåÂènÂèoÂèpÂèÂèÂèÂè	
+=3ÙÂèvÂèÂèÂèwÂèyÂè
+ Âè
+ÂèÂèk
+ ÂèÂèÂò{ÂèsÂètÂè
+ÂèÂÜÄW­
+^-F	ìÂÜÅ×ÂÜÇW³
+_rÂèšÂè©Âè«Âè¬ÂÜÉT±
+Z,GÂÜ²VŽ
+^rÂÜÈW³
+_rÂÞ ²
+^qÂò}Âò~ÂÞ+ÂÞ,ÂÙ
+
+Kõ
+F\Ë("ôSÂè~ÂèÂèÂèÂè
+ÂèÂèÂèÂèÂè!]Â÷Â÷ÂÙ
+ŒEô*2
+ïSÂÜZÂÜ[ÂÞ/
+Â÷Âè 
+.á
+Âè6Âè7Âè8Âè:ÂèOÂè5Âè;#
+Âè4ÂèÂèÂèÂèÂ÷dÂÞ0ÂÞ1Â÷fÂ÷eÂçÙÂçÞÂçÜÂçÚÂûÜÂÙÂÙ£ÈÂÙÂÙÂÙÂÙÂÙÂÙÂÙ|$;\
+
+@@ -1762,7 +1709,7 @@
+ f{}ÁS¡6ÃÃÃÃÃÃ;êÃ?UÃ&(ÆÃ
+ÃÃ&)ÅÃ(¬"xÃ?YÃ;ÀÃ;ÁÃ;ÂÃ:«Ã;ÄÃ<Á]ãÂ²2¬'oÂþDÙY9(rÃ&/Ã&0Ã&1Ã&:Ã&2Ã&6Ã&5Ã&3Ã&4Ã&7Ã&8Ã$ÃÃÃ&;Ã&<Ã&=Ã&,Ã?WÃ%Ã&Á]ubÂÍK õ¯Y(îÃ$GÃ$HÃ$<Ã$JÃòÃ@Ã@Ã@Ã@Ã$WÃ$XÃ¢Ã£Ã
+€Bf Ã$PÃ
+¥Bh	Ã$[Ã$LÃ$AÃ$BÃ$DÃ$CÁg×ÂnbJ9ô·n
+ãÃ$EÃ$FÃ$SÂþEõš§Ã;Ã$]Ã$^Ã$`Ã$aÂþGŠ
+%ÂþIÂþHŠ
+%Ã;çÃ;èÃ?ëÃ?èÃ?éÃÅÃÆÃ?ìÃŒ×ÁX¢ÃÃÁyÃ$mÂþ~ÂþÃòÃóÃôÃõÂþ}Ã$kÃ$lÃÃÃÃñÂþyÁµÂþ{Âþ|ÂþzÁµÃ
+»ÁoÖÃ/
+ÁÃ<
+ÃïÃðÃ<Á[ìÊXÂ
+ 
+
+ ]Þ ž
+¥²WK; ,I=
+--
+<K1;UmcJ
+T1ÁT"
+s'3ºÃnÃpÃqÃ<KÃoÃi	
+ îÃ
+PÃ-
+Ã-Ã
+~Ãv
+ç
+ÃøÃùÃs ¶ÃuÃ&Ãz­Ã{Ã|Âþ_Âþ`Ãj
+ë
+¥Ãr©€Ãk:jîÃ>ÃnÃl<XÃmÃwÃ?É;GóÁwrÃ
++Ã
+*Ã
+,Ã
+.Ã
+-Ã¡Ã¢ÂýÁ
+ÔyÃ	#ÂýÂ
+ÓyÃÈ×öÁäÃ
+ÃÃÃ
+ÍÁäÃÃ	mÃDÉÃÃÃÃÃ	nÃÂ)ÃÃ)Ã@& 5GóÃBÃ	ZÃCÆd%ÃÃ	\Ã
+ÂþÕÂþÖÂþ×ÂþØÃÓÃÔÃÃÃÃ¥GFÜb#ÃF©vÁÂý»ÂýŒÃ-ÁÃ-ŒÃ-ÀÃ-œÃ-A¿Ã
+Ã
+Ã
+Ã
+Ã«ŠÌ`Ã-vÃ-ÃŠF€Ã-8Ã§ŠÌ
++-
+<K1;Umc?
+
+T1ÁT"
+s'3ºÃnÃpÃqÃ<KÃoÃi	
+ îÃ
+PÃ-
+Ã-Ã
+~Ãv
+ç
+ÃøÃùÃs ¶ÃuÃ&Ãz­Ã{Ã|Âþ_Âþ`Ãj
+ë
+¥Ãr©€Ãk:jîÃ>ÃnÃl<XÃmÃwÃ?É;GóÁwrÃ
++Ã
+*Ã
+,Ã
+.Ã
+-Ã¡Ã¢ÂýÁ
+ÔyÃ	#ÂýÂ
+ÓyÃÈ×öÁäÃ
+ÃÃÃ
+ÍÁäÃÃ	mÃDÉÃÃÃÃÃ	nÃÂ)ÃÃ)Ã@& 5GóÃBÃ	ZÃCÆd%ÃÃ	\Ã
+ÂþÕÂþÖÂþ×ÂþØÃÓÃÔÃÃÃÃ¥GFÜb#ÃF©vÁÂý»ÂýŒÃ-ÁÃ-ŒÃ-ÀÃ-œÃ-A¿Ã
+Ã
+Ã
+Ã
+Ã«ŠÌ`Ã-vÃ-ÃŠF€Ã-8Ã§ŠÌ
+ 
+cÃ;ûÃ;üÃ;ñ
+ Âý¥ÂýŠÃ-Á[í%Â\
+ª
+Pc'
+aÞ	¢TË$NPÁ\ÃgÃaÃbÃÃÃhÃ\ ÃÃq;
+ Ã
+­
+@@ -1776,7 +1723,7 @@
+ ÙÃÃÁg4Ág5Â£°Ág6Â£°Ã	,Ã	-ÁgÂM
+¬	!
+a=
+KÝ¢T
+xÅ$MÆÁ[üÃ
+ }ÃÃ®lÃ£Z$ÃSÃTÃUÁg(	ÂMœú€®fMš
+CR
+Ä	Xè«ÁgFÃ
+9Ã
+:Ã
+;Ã
+VÃ
+WÖÃ`ÁgBÂU¿	ºcßÃ¿ÁBÔÃ-0ÁgHÁg(ÂXÁú?j`;Ã¬Ã-,Ág@ÂUÈ·bÃ
+ uÃ
+-vÃÃÃÃÃ-¢ÃjÃlÃkÁgCÂ£8€0ÁgDÂ£7ÃPÃQÃ-¥Ã-šÃ-£Ã-ªÂþbbJ
+:
+Ó?Ã%Ã
+^ÃÃÃŽÃµÁ\ÂŠ'cÎo1Ÿ_ÁjÃ	HÃ	IÃ;cÃ;dÃ;bÁgWÁg[ÁgXÁgYÁgÁgÁgÁgÁgÁgÁgÁgRÁgSÁgUÁgVÁg_Ág\Ág]Ã;aÃÈ Êv
+ÁjØÁg`ÁgcÁgbÁgaÁgdÁgfÁggÁgeÃèÊÃÆà"[Ã
+šÃ
+©Ã
+®Ã
+§	[Ã
+­Ã
+ªÃ
+«ÃÉõÁgiÃ
+ÉÃÒûÃ
+ÊÃ
+ÌÃÎÃÍÃÊûÃ
+ÈÃËûÃ
+ÏÁ\ÂŠ&a	Ën0®¿£Áj
+ÁgvÁgjÁgmÁglÁgkÁgnÁgoÃ-?ÁgqÁguÁgrÁgsÁgIÁgNÁgLÁgJÃ	L¥ÁgwÁg{ÁgxÁgyÁg|Ág~Ág}ÁgOÁgPÃÇa×ÃÝÃÞÃßÃ¯UÃ-Ã
+
+Ã-Ã-Ã°UÃ
+Ã	N¥ÂýÄ7 Š:PÌJZS
+³1Z
+èN
+*o
+H«99
++vÃÃÃÃÃ-¢ÃjÃlÃkÁgCÂ£8€0ÁgDÂ£7ÃPÃQÃ-¥Ã-šÃ-£Ã-ªÂþbbJ
+:
+Ó?Ã%Ã
+^ÃÃÃŽÃµÁ\ÂŠ'cÎo1Ÿ_Á\Ã	HÃ	IÃ;cÃ;dÃ;bÁgWÁg[ÁgXÁgYÁgÁgÁgÁgÁgÁgÁgÁgRÁgSÁgUÁgVÁg_Ág\Ág]ÃÈ Êv
+ÁjØÁg`ÁgcÁgbÁgaÁgdÁgfÁggÁgeÃèÊÃÆà"[Ã
+šÃ
+©Ã
+®Ã
+§	[Ã
+­Ã
+ªÃ
+«ÃÉõÁgiÃ
+ÉÃÒûÃ
+ÊÃ
+ÌÃÎÃÍÃÊûÃ
+ÈÃËûÃ
+ÏÁ\ÂŠ&a	Ën0®¿£Áj
+ÁgvÁgjÁgmÁglÁgkÁgnÁgoÃ-?ÁgqÁguÁgrÁgsÁgIÁgNÁgLÁgJÃ	L¥ÁgwÁg{ÁgxÁgyÁg|Ág~Ág}ÁgOÁgPÃÇa×ÃÝÃÞÃßÃ¯UÃ-Ã
+
+Ã-Ã-Ã°UÃ
+Ã	N¥ÂýÄ7 Š:PÌJZS
+³1Z
+èN
+*o
+H«99
+ ÁWšØBÃ	PÃ	QÃHÃIÃJÃKÃcÃYÃZÃ\Ã]Ã^Ã_Ã`ÃbÃdÃ
+ÜÃ
+ÝÃcÃdÃbÃeÃfÃ
+ßÃ
+àÃ
+KÃ
+NÃ
+ÙÃ
+LÃ
+MÃêÃëÃ
+ ~šÃ?Ã@Ã,Ã' Ã2Ã1Ã0Ã-Ã.Ã)Ã(Ã
+{ÃÃEÃFÃ÷oõ­`íÃ	Ã
+ _Ã
+ìÃwÃzÃxÃyÃkÃ
+ÓÃ
+ÎÃrÃsÃ
+ÕÃ
+ÐÂýÅ	
+79£9
+ge
+ª
+)
+Ü3")}üÀ9ÁXÉÃ"!ÃCÃ
+çBÃ 
+­Ã¹;
+@@ -1793,12 +1740,12 @@
+ £œÃ
+ œÃFÃºH
+Y&5â£íÃÿ©ÅÃýÍÔÃÃEÃHÃKÃJÃIÃFÃGÃLÃùÃúÃ
+îÃSÅ2ê¬
+ôúÃ,Ã-Ã
+5ÃÃÃ
+6ÃÃÃÃÃÃ<Ã<Ã
+ÃÃdÊ/ÃÃÃkÃ	U¥Ã	T¥Ã
+ JÂ
+--äöÁ\ÃcÅœÃ
+`Ã
+bÃ
+cÃ
+aÃ
+Ã
+Ã
+dÃ
+eÃ
+þÃ
+ÿÂýÈ®Œ
+
+ áM¿SC~x
+(Á[Ã!KVÁcÃÇÃÎÃjÃÈÃÉÃ`YÃaÃ"JWÁ`ÃÉÃI%XÃJÃËÃM ÃIÃJÃ£Ã€ÃÑÃÃ3ÃÓÃóÃôÂý×t
+ÂýàÂýØÂýÙ÷ÃLÂýÞÂýßÃOÃPÃ-ÓÃÏÝÃ
+ŽÃÖÃ×ÃØÃÕßÃÑäÃQÃRÃ3Ã4ÃÐ
+×$ÃÔÃLàÃ
+ÀÃ
+¹ÃM
+kÃ
+·Ã
+ºÃ
+»Ã
+ŒÃ
+œÃÙÁf»ÂLŠ<ÃªÃ©Ã«Âýá
+Âýâ
++-äöÁ\ÃcÅœÃ
+`Ã
+bÃ
+cÃ
+aÃ
+Ã
+Ã
+dÃ
+eÃ
+þÃ
+ÿÂýÈ®Œ
+
+ áM¿SC~{
+(Á[Ã!KVÁcÃÇÃÎÃjÃÈÃÉÃ`YÃaÃ"JWÁ`ÃÉÃI%XÃJÃËÃM ÃIÃJÃ£Ã€ÃÑÃÃ3ÃÓÃóÃôÂý×t
+ÂýàÂýØÂýÙ÷ÃLÂýÞÂýßÃOÃPÃ-ÓÃÏÝÃ
+ŽÃÖÃ×ÃØÃÕßÃÑäÃQÃRÃ3Ã4ÃÐ
+×$ÃÔÃLàÃ
+ÀÃ
+¹ÃM
+kÃ
+·Ã
+ºÃ
+»Ã
+ŒÃ
+œÃÙÁf»ÂLŠ<ÃªÃ©Ã«Âýá
+Âýâ
+ ÂýåÃUÆŠ(ÁfŒÂ Ä³¥Ã	cÃ	dÃ	fÃÃŠ(Ã	_Ã	`Ã	aÃQÌÕ£YÂýòéIPd×B=ÃÜÃâÃßÃÝÃÚÃwbÃ}cÃxaÃyeÃäEÃ7Ã9Ã:Ã8Ã*ÂýÊÂýÌÂýÍÂýÏÂýËÂýÎÃ~ÃÃÃÃàÃáÂýóòBL
+X
+ ÎB=ÃãBÃ$`Ã%`ÃÃ
+ÃTòSr
+Rh¡œp
+Ã¹ÃÁÃŒÃÀÃºÃÂÃ?Ã  Ã"ÃBÃCÃFÃGÃR
+ S
+ ®£T¶ÃSšúÃÃ=ÃæÃçÃãÃçÃåÃäÃèÃ#ÃèÃêÃëÃéÃíÃêÃòÃóÃõÃîÃïÃðÃëÃ÷	ÃøÃé
+-ÃþÃî
+ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÂþwÅ
+K
+¿C}
+m	'
+ÁWÃ-RÃ-SÂýîÂýïÂýñÃ
++ÃþÃî
+ÃÃÃÃÃÃÃÃÃÃÃÃÃÃÃÂþwÅ
+K
+¿C}
+p
+'
+ÁWÃ-RÃ-SÂýîÂýïÂýñÃ
+ ±çÃH®£\¯ÂýæÂýçÂýéÂýêÂýëÃ
+ Ã
+ ÁfžÂ
+
+¿€2èSjš;
+M9u
+
+Á\ÃöÃ
+@@ -1828,7 +1775,7 @@
+ .^
+[Û
+'ž	='^Èù
+ Jm7d^I;LH<
+ )
+àYWr%39U
+	íw
+-#²	z>1
++#§	z>1
+ ÁTÝ³
+ 
+ s'ìÃêÃëÃìÃíÃîÃ-Ã·ÃžÃrÃÕÃMÃNÃPÃQÃEÃFÃÃÝÁ|/ÃòÃóÃsÃ}Ã~Ã
+diff -Naur vim73.orig/runtime/spell/ga/ga_IE.diff vim73/runtime/spell/ga/ga_IE.diff
+--- vim73.orig/runtime/spell/ga/ga_IE.diff	2010-05-15 11:03:54.000000000 +0000
++++ vim73/runtime/spell/ga/ga_IE.diff	2013-06-07 17:07:19.828952057 +0000
+@@ -29,7 +29,7 @@
+ + # soundslike mapping from Aspell
+ + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
+ + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
+-+ # version 2.0
+++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
+ + 
+ + SAL followup 0                    # else breaks QU^, e.g.
+ + SAL collapse_result 1             # no double letters in resulting strings
+diff -Naur vim73.orig/runtime/spell/gd/gd_GB.diff vim73/runtime/spell/gd/gd_GB.diff
+--- vim73.orig/runtime/spell/gd/gd_GB.diff	2010-05-15 11:03:33.000000000 +0000
++++ vim73/runtime/spell/gd/gd_GB.diff	2013-06-07 17:07:19.862285295 +0000
+@@ -25,7 +25,7 @@
+ + # soundslike mapping from Aspell
+ + # Aspell phonetics for Irish, by Kevin Scannell <scannell@slu.edu>
+ + # Copyright 2002, 2003 Kevin P. Scannell, distributed under GNU GPL
+-+ # version 2.0
+++ # version 2.0 or the Vim license (attribution by Kevin Scannell, Jan 2012)
+ + 
+ + SAL followup 0                    # else breaks QU^, e.g.
+ + SAL collapse_result 1             # no double letters in resulting strings
+diff -Naur vim73.orig/runtime/spell/hu/main.aap vim73/runtime/spell/hu/main.aap
+--- vim73.orig/runtime/spell/hu/main.aap	2010-05-15 11:03:51.000000000 +0000
++++ vim73/runtime/spell/hu/main.aap	2013-06-07 17:07:20.005618220 +0000
+@@ -7,19 +7,20 @@
+     :progsearch VIM vim
+ 
+ SPELLDIR = ..
++VIMRC = ../spell.vim
+ FILES    = hu_HU.aff hu_HU.dic
+ 
+ all: $SPELLDIR/hu.iso-8859-2.spl $SPELLDIR/hu.utf-8.spl \
+         $SPELLDIR/hu.cp1250.spl ../README_hu.txt
+ 
+ $SPELLDIR/hu.iso-8859-2.spl : $FILES
+-        :sys env LANG=hu_HU.ISO8859-2 $VIM -u NONE -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
++        :sys env LANG=hu_HU.ISO8859-2 $VIM -u $VIMRC -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+ 
+ $SPELLDIR/hu.utf-8.spl : $FILES
+-        :sys env LANG=hu_HU.UTF-8 $VIM -u NONE -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
++        :sys env LANG=hu_HU.UTF-8 $VIM -u $VIMRC -e -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+ 
+ $SPELLDIR/hu.cp1250.spl : $FILES
+-        :sys $VIM -u NONE -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/hu hu_HU" -c q
++        :sys $VIM -u $VIMRC -e -c "set enc=cp1250" -c "mkspell! $SPELLDIR/hu hu_HU" -c q
+ 
+ ../README_hu.txt: README_hu_HU.txt
+         :copy $source $target
+diff -Naur vim73.orig/runtime/spell/spell.vim vim73/runtime/spell/spell.vim
+--- vim73.orig/runtime/spell/spell.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/spell/spell.vim	2013-06-07 17:07:20.705616221 +0000
+@@ -0,0 +1,4 @@
++" Settings for when generating spellfiles.
++"
++" Assume we have 2 Gbyte RAM available.
++set mkspellmem=1800000,6000,1600
+diff -Naur vim73.orig/runtime/spell/sv/sv_SE.diff vim73/runtime/spell/sv/sv_SE.diff
+--- vim73.orig/runtime/spell/sv/sv_SE.diff	2010-07-11 16:02:02.000000000 +0000
++++ vim73/runtime/spell/sv/sv_SE.diff	2013-06-07 17:07:20.748949430 +0000
+@@ -27,7 +27,7 @@
+ + # soundslike mapping from Aspell
+ + # swedish_phonet.dat - Swedish phonetic transformation rules for aspell
+ + # Copyright (C) 2000  Martin Norbäck  <d95mback@dtek.chalmers.se>
+-+ # distributed under GNU GPL
+++ # distributed under GNU GPL or the Vim license, at your choice.
+ + # version 0.2
+ + 
+ + SAL &	&
+diff -Naur vim73.orig/runtime/synmenu.vim vim73/runtime/synmenu.vim
+--- vim73.orig/runtime/synmenu.vim	2010-08-15 12:52:26.000000000 +0000
++++ vim73/runtime/synmenu.vim	2013-06-07 17:07:21.045615250 +0000
+@@ -124,16 +124,17 @@
+ an 50.20.370 &Syntax.C.Config.Generic\ Config\ file :cal SetSyn("conf")<CR>
+ an 50.20.380 &Syntax.C.CRM114 :cal SetSyn("crm")<CR>
+ an 50.20.390 &Syntax.C.Crontab :cal SetSyn("crontab")<CR>
+-an 50.20.400 &Syntax.C.CSP :cal SetSyn("csp")<CR>
+-an 50.20.410 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
+-an 50.20.420 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
+-an 50.20.430 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
+-an 50.20.440 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
+-an 50.20.450 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
+-an 50.20.460 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
+-an 50.20.470 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
+-an 50.20.480 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
+-an 50.20.490 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
++an 50.20.400 &Syntax.C.CSDL :cal SetSyn("csdl")<CR>
++an 50.20.410 &Syntax.C.CSP :cal SetSyn("csp")<CR>
++an 50.20.420 &Syntax.C.Ctrl-H :cal SetSyn("ctrlh")<CR>
++an 50.20.430 &Syntax.C.Cucumber :cal SetSyn("cucumber")<CR>
++an 50.20.440 &Syntax.C.CUDA :cal SetSyn("cuda")<CR>
++an 50.20.450 &Syntax.C.CUPL.CUPL :cal SetSyn("cupl")<CR>
++an 50.20.460 &Syntax.C.CUPL.Simulation :cal SetSyn("cuplsim")<CR>
++an 50.20.470 &Syntax.C.CVS.commit\ file :cal SetSyn("cvs")<CR>
++an 50.20.480 &Syntax.C.CVS.cvsrc :cal SetSyn("cvsrc")<CR>
++an 50.20.490 &Syntax.C.Cyn++ :cal SetSyn("cynpp")<CR>
++an 50.20.500 &Syntax.C.Cynlib :cal SetSyn("cynlib")<CR>
+ an 50.30.100 &Syntax.DE.D :cal SetSyn("d")<CR>
+ an 50.30.110 &Syntax.DE.Datascript :cal SetSyn("datascript")<CR>
+ an 50.30.120 &Syntax.DE.Debian.Debian\ ChangeLog :cal SetSyn("debchangelog")<CR>
+diff -Naur vim73.orig/runtime/syntax/2html.vim vim73/runtime/syntax/2html.vim
+--- vim73.orig/runtime/syntax/2html.vim	2010-08-12 19:57:26.000000000 +0000
++++ vim73/runtime/syntax/2html.vim	2013-06-07 17:07:21.072281840 +0000
+@@ -1,6 +1,6 @@
+ " Vim syntax support file
+ " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
+-" Last Change: 2010 Aug 12
++" Last Change: 2013 May 31
+ "
+ " Additional contributors:
+ "
+@@ -20,7 +20,7 @@
+ " this file uses line continuations
+ let s:cpo_sav = &cpo
+ let s:ls  = &ls
+-set cpo-=C
++set cpo&vim
+ 
+ let s:end=line('$')
+ 
+@@ -33,26 +33,155 @@
+ 
+ let s:settings = tohtml#GetUserSettings()
+ 
++if !exists('s:FOLDED_ID')
++  let s:FOLDED_ID  = hlID("Folded")     | lockvar s:FOLDED_ID
++  let s:FOLD_C_ID  = hlID("FoldColumn") | lockvar s:FOLD_C_ID
++  let s:LINENR_ID  = hlID('LineNr')     | lockvar s:LINENR_ID
++  let s:DIFF_D_ID  = hlID("DiffDelete") | lockvar s:DIFF_D_ID
++  let s:DIFF_A_ID  = hlID("DiffAdd")    | lockvar s:DIFF_A_ID
++  let s:DIFF_C_ID  = hlID("DiffChange") | lockvar s:DIFF_C_ID
++  let s:DIFF_T_ID  = hlID("DiffText")   | lockvar s:DIFF_T_ID
++  let s:CONCEAL_ID = hlID('Conceal')    | lockvar s:CONCEAL_ID
++endif
++
++" Whitespace
++if s:settings.pre_wrap
++  let s:whitespace = "white-space: pre-wrap; "
++else
++  let s:whitespace = ""
++endif
++
++if !empty(s:settings.prevent_copy)
++  if s:settings.no_invalid
++    " User has decided they don't want invalid markup. Still works in
++    " OpenOffice, and for text editors, but when pasting into Microsoft Word the
++    " input elements get pasted too and they cannot be deleted (at least not
++    " easily).
++    let s:unselInputType = ""
++  else
++    " Prevent from copy-pasting the input elements into Microsoft Word where
++    " they cannot be deleted easily by deliberately inserting invalid markup.
++    let s:unselInputType = " type='invalid_input_type'"
++  endif
++endif
++
+ " When not in gui we can only guess the colors.
++" TODO - is this true anymore?
+ if has("gui_running")
+   let s:whatterm = "gui"
+ else
+   let s:whatterm = "cterm"
+   if &t_Co == 8
+-    let s:cterm_color = {0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00", 4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"}
++    let s:cterm_color = {
++	    \   0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00",
++	    \   4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"
++	    \ }
+   else
+-    let s:cterm_color = {0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00", 12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"}
++    let s:cterm_color = {
++	    \   0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 
++	    \   4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 
++	    \   8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00",
++	    \   12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"
++	    \ }
+ 
+     " Colors for 88 and 256 come from xterm.
+     if &t_Co == 88
+-      call extend(s:cterm_color, {16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff", 20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff", 24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff", 28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff", 32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff", 36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff", 40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff", 44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff", 48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff", 52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff", 56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff", 60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff", 64: "#ff0000"})
+-      call extend(s:cterm_color, {65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00", 69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00", 73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00", 77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e", 81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2", 85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"})
++      call extend(s:cterm_color, {
++	    \   16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff",
++	    \   20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff",
++	    \   24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff",
++	    \   28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff",
++	    \   32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff",
++	    \   36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff",
++	    \   40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff",
++	    \   44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff",
++	    \   48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff",
++	    \   52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff",
++	    \   56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff",
++	    \   60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff",
++	    \   64: "#ff0000"
++	    \ })
++      call extend(s:cterm_color, {
++	    \   65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00",
++	    \   69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00",
++	    \   73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00",
++	    \   77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e",
++	    \   81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2",
++	    \   85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"
++	    \ })
+     elseif &t_Co == 256
+-      call extend(s:cterm_color, {16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af", 20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f", 24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff", 28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af", 32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f", 36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff", 40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af", 44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f", 48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff", 52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af", 56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f", 60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff", 64: "#5f8700"})
+-      call extend(s:cterm_color, {65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7", 69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87", 73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700", 77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7", 81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87", 85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000", 89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7", 93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87", 97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700", 101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7", 105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87", 109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"})
+-      call extend(s:cterm_color, {113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7", 117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87", 121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000", 125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7", 129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87", 133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700", 137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7", 141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87", 145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700", 149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7", 153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87", 157: "#afffaf", 158: "#afffd7"})
+-      call extend(s:cterm_color, {159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087", 163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00", 167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7", 171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787", 175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00", 179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7", 183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787", 187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00", 191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7", 195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087", 199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00", 203: "#ff5f5f", 204: "#ff5f87"})
+-      call extend(s:cterm_color, {205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700", 209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7", 213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87", 217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700", 221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7", 225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87", 229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808", 233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030", 237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858", 241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080", 245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8", 249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0", 253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"})
++      call extend(s:cterm_color, {
++	    \   16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af",
++	    \   20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f",
++	    \   24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff",
++	    \   28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af",
++	    \   32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f",
++	    \   36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff",
++	    \   40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af",
++	    \   44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f",
++	    \   48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff",
++	    \   52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af",
++	    \   56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f",
++	    \   60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff",
++	    \   64: "#5f8700"
++	    \ })
++      call extend(s:cterm_color, {
++	    \   65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7",
++	    \   69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87",
++	    \   73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700",
++	    \   77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7",
++	    \   81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87",
++	    \   85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000",
++	    \   89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7",
++	    \   93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87",
++	    \   97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700",
++	    \   101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7",
++	    \   105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87",
++	    \   109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"
++	    \ })
++      call extend(s:cterm_color, {
++	    \   113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7",
++	    \   117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87",
++	    \   121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000",
++	    \   125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7",
++	    \   129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87",
++	    \   133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700",
++	    \   137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7",
++	    \   141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87",
++	    \   145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700",
++	    \   149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7",
++	    \   153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87",
++	    \   157: "#afffaf", 158: "#afffd7"
++	    \ })
++      call extend(s:cterm_color, {
++	    \   159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087",
++	    \   163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00",
++	    \   167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7",
++	    \   171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787",
++	    \   175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00",
++	    \   179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7",
++	    \   183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787",
++	    \   187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00",
++	    \   191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7",
++	    \   195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087",
++	    \   199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00",
++	    \   203: "#ff5f5f", 204: "#ff5f87"
++	    \ })
++      call extend(s:cterm_color, {
++	    \   205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700",
++	    \   209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7",
++	    \   213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87",
++	    \   217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700",
++	    \   221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7",
++	    \   225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87",
++	    \   229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808",
++	    \   233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030",
++	    \   237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858",
++	    \   241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080",
++	    \   245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8",
++	    \   249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0",
++	    \   253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"
++	    \ })
+     endif
+   endif
+ endif
+@@ -73,19 +202,33 @@
+   endfun
+ endif
+ 
++" Find out the background and foreground color for use later
++let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
++let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
++if s:fgc == ""
++  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
++endif
++if s:bgc == ""
++  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
++endif
++
+ if !s:settings.use_css
+   " Return opening HTML tag for given highlight id
+-  function! s:HtmlOpening(id)
++  function! s:HtmlOpening(id, extra_attrs)
+     let a = ""
+     if synIDattr(a:id, "inverse")
+       " For inverse, we always must set both colors (and exchange them)
+       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
+-      let a = a . '<span style="background-color: ' . ( x != "" ? x : s:fgc ) . '">'
++      let a = a . '<span '.a:extra_attrs.'style="background-color: ' . ( x != "" ? x : s:fgc ) . '">'
+       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
+       let a = a . '<font color="' . ( x != "" ? x : s:bgc ) . '">'
+     else
+       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
+-      if x != "" | let a = a . '<span style="background-color: ' . x . '">' | endif
++      if x != ""
++	let a = a . '<span '.a:extra_attrs.'style="background-color: ' . x . '">'
++      elseif !empty(a:extra_attrs)
++	let a = a . '<span '.a:extra_attrs.'>'
++      endif
+       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
+       if x != "" | let a = a . '<font color="' . x . '">' | endif
+     endif
+@@ -96,7 +239,7 @@
+   endfun
+ 
+   " Return closing HTML tag for given highlight id
+-  function! s:HtmlClosing(id)
++  function! s:HtmlClosing(id, has_extra_attrs)
+     let a = ""
+     if synIDattr(a:id, "underline") | let a = a . "</u>" | endif
+     if synIDattr(a:id, "italic") | let a = a . "</i>" | endif
+@@ -107,24 +250,190 @@
+       let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
+       if x != "" | let a = a . '</font>' | endif
+       let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
+-      if x != "" | let a = a . '</span>' | endif
++      if x != "" || a:has_extra_attrs | let a = a . '</span>' | endif
+     endif
+     return a
+   endfun
+ endif
+ 
++" Use a different function for formatting based on user options. This way we
++" can avoid a lot of logic during the actual execution.
++"
++" Build the function line by line containing only what is needed for the options
++" in use for maximum code sharing with minimal branch logic for greater speed.
++"
++" Note, 'exec' commands do not recognize line continuations, so must concatenate
++" lines rather than continue them.
++if s:settings.use_css
++  " save CSS to a list of rules to add to the output at the end of processing
++
++  " first, get the style names we need
++  let wrapperfunc_lines = [
++	\ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, make_unselectable, unformatted)',
++	\ '',
++	\ '  let l:style_name = synIDattr(a:style_id, "name", s:whatterm)'
++	\ ]
++  if &diff
++    let wrapperfunc_lines += [
++	\ '  let l:diff_style_name = synIDattr(a:diff_style_id, "name", s:whatterm)']
++
++  " Add normal groups and diff groups to separate lists so we can order them to
++  " allow diff highlight to override normal highlight
++
++  " if primary style IS a diff style, grab it from the diff cache instead
++  " (always succeeds because we pre-populate it)
++  let wrapperfunc_lines += [
++	\ '',
++	\ '  if a:style_id == s:DIFF_D_ID || a:style_id == s:DIFF_A_ID ||'.
++	\ '          a:style_id == s:DIFF_C_ID || a:style_id == s:DIFF_T_ID',
++	\ '    let l:saved_style = get(s:diffstylelist,a:style_id)',
++	\ '  else'
++	\ ]
++  endif
++
++  " get primary style info from cache or build it on the fly if not found
++  let wrapperfunc_lines += [
++	\ '    let l:saved_style = get(s:stylelist,a:style_id)',
++	\ '    if type(l:saved_style) == type(0)',
++	\ '      unlet l:saved_style',
++	\ '      let l:saved_style = s:CSS1(a:style_id)',
++	\ '      if l:saved_style != ""',
++	\ '        let l:saved_style = "." . l:style_name . " { " . l:saved_style . "}"',
++	\ '      endif',
++	\ '      let s:stylelist[a:style_id]= l:saved_style',
++	\ '    endif'
++	\ ]
++  if &diff
++    let wrapperfunc_lines += [ '  endif' ]
++  endif
++
++  " Build the wrapper tags around the text. It turns out that caching these
++  " gives pretty much zero performance gain and adds a lot of logic.
++
++  let wrapperfunc_lines += [
++	\ '',
++	\ '  if l:saved_style == "" && empty(a:extra_attrs)'
++	\ ]
++  if &diff
++    let wrapperfunc_lines += [
++	\ '    if a:diff_style_id <= 0'
++	\ ]
++  endif
++  " no surroundings if neither primary nor diff style has any info
++  let wrapperfunc_lines += [
++	\ '       return a:text'
++	\ ]
++  if &diff
++    " no primary style, but diff style
++    let wrapperfunc_lines += [
++	\ '     else',
++	\ '       return "<span class=\"" .l:diff_style_name . "\">".a:text."</span>"',
++	\ '     endif'
++	\ ]
++  endif
++  " open tag for non-empty primary style
++  let wrapperfunc_lines += [
++	\ '  else']
++  " non-empty primary style. handle either empty or non-empty diff style.
++  "
++  " separate the two classes by a space to apply them both if there is a diff
++  " style name, unless the primary style is empty, then just use the diff style
++  " name
++  let diffstyle =
++	  \ (&diff ? '(a:diff_style_id <= 0 ? "" : " ". l:diff_style_name) .'
++	  \        : "")
++  if s:settings.prevent_copy == ""
++    let wrapperfunc_lines += [
++	  \ '    return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\">".a:text."</span>"'
++	  \ ]
++  else
++
++    "
++    " Wrap the <input> in a <span> to allow fixing the stupid bug in some fonts
++    " which cause browsers to display a 1px gap between lines when these
++    " <input>s have a background color (maybe not really a bug, this isn't
++    " well-defined)
++    "
++    " use strwidth, because we care only about how many character boxes are
++    " needed to size the input, we don't care how many characters (including
++    " separately counted composing chars, from strchars()) or bytes (from
++    " len())the string contains. strdisplaywidth() is not needed because none of
++    " the unselectable groups can contain tab characters (fold column, fold
++    " text, line number).
++    "
++    " Note, if maxlength property needs to be added in the future, it will need
++    " to use strchars(), because HTML specifies that the maxlength parameter
++    " uses the number of unique codepoints for its limit.
++    let wrapperfunc_lines += [
++	  \ '    if a:make_unselectable',
++	  \ '      return "<span ".a:extra_attrs."class=\"" . l:style_name .'.diffstyle.'"\">'.
++	  \                '<input'.s:unselInputType.' class=\"" . l:style_name .'.diffstyle.'"\"'.
++	  \                 ' value=\"".substitute(a:unformatted,''\s\+$'',"","")."\"'.
++	  \                 ' onselect=''this.blur(); return false;'''.
++	  \                 ' onmousedown=''this.blur(); return false;'''.
++	  \                 ' onclick=''this.blur(); return false;'''.
++	  \                 ' readonly=''readonly'''.
++	  \                 ' size=\"".strwidth(a:unformatted)."\"'.
++	  \                 (s:settings.use_xhtml ? '/' : '').'></span>"',
++	  \ '    else',
++	  \ '      return "<span ".a:extra_attrs."class=\"" . l:style_name .'. diffstyle .'"\">".a:text."</span>"'
++	  \ ]
++  endif
++  let wrapperfunc_lines += [
++	\ '  endif',
++	\ 'endfun'
++	\ ]
++else
++  " Non-CSS method just needs the wrapper.
++  "
++  " Functions used to get opening/closing automatically return null strings if
++  " no styles exist.
++  if &diff
++    let wrapperfunc_lines = [
++	  \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, unusedarg, unusedarg2)',
++	  \ '  return s:HtmlOpening(a:style_id, a:extra_attrs).(a:diff_style_id <= 0 ? "" :'.
++	  \                                     's:HtmlOpening(a:diff_style_id, "")).a:text.'.
++	  \   '(a:diff_style_id <= 0 ? "" : s:HtmlClosing(a:diff_style_id, 0)).s:HtmlClosing(a:style_id, !empty(a:extra_attrs))',
++	  \ 'endfun'
++	  \ ]
++  else
++    let wrapperfunc_lines = [
++	  \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, extra_attrs, text, unusedarg, unusedarg2)',
++	  \ '  return s:HtmlOpening(a:style_id, a:extra_attrs).a:text.s:HtmlClosing(a:style_id, !empty(a:extra_attrs))',
++	  \ 'endfun'
++	  \ ]
++  endif
++endif
++
++" create the function we built line by line above
++exec join(wrapperfunc_lines, "\n")
++
++let s:diff_mode = &diff
++
+ " Return HTML valid characters enclosed in a span of class style_name with
+ " unprintable characters expanded and double spaces replaced as necessary.
+-function! s:HtmlFormat(text, style_name, diff_style_name)
++"
++" TODO: eliminate unneeded logic like done for BuildStyleWrapper
++function! s:HtmlFormat(text, style_id, diff_style_id, extra_attrs, make_unselectable)
+   " Replace unprintable characters
+-  let formatted = strtrans(a:text)
++  let unformatted = strtrans(a:text)
+ 
+-  " separate the two classes by a space to apply them both if there is a diff
+-  " style name
+-  let l:style_name = a:style_name . (a:diff_style_name == '' ? '' : ' ') . a:diff_style_name
++  let formatted = unformatted
+ 
+   " Replace the reserved html characters
+-  let formatted = substitute(substitute(substitute(substitute(substitute(formatted, '&', '\&amp;', 'g'), '<', '\&lt;', 'g'), '>', '\&gt;', 'g'), '"', '\&quot;', 'g'), "\x0c", '<hr class="PAGE-BREAK">', 'g')
++  let formatted = substitute(formatted, '&', '\&amp;',  'g')
++  let formatted = substitute(formatted, '<', '\&lt;',   'g')
++  let formatted = substitute(formatted, '>', '\&gt;',   'g')
++  let formatted = substitute(formatted, '"', '\&quot;', 'g')
++  " &apos; is not valid in HTML but it is in XHTML, so just use the numeric
++  " reference for it instead. Needed because it could appear in quotes
++  " especially if unselectable regions is turned on.
++  let formatted = substitute(formatted, '"', '\&#0039;', 'g')
++
++  " Replace a "form feed" character with HTML to do a page break
++  " TODO: need to prevent this in unselectable areas? Probably it should never
++  " BE in an unselectable area...
++  let formatted = substitute(formatted, "\x0c", '<hr class="PAGE-BREAK">', 'g')
+ 
+   " Replace double spaces, leading spaces, and trailing spaces if needed
+   if ' ' != s:HtmlSpace
+@@ -133,31 +442,103 @@
+     let formatted = substitute(formatted, ' \+$', s:HtmlSpace, 'g')
+   endif
+ 
+-  " Enclose in a span of class style_name
+-  let formatted = '<span class="' . l:style_name . '">' . formatted . '</span>'
++  " Enclose in the correct format
++  return s:BuildStyleWrapper(a:style_id, a:diff_style_id, a:extra_attrs, formatted, a:make_unselectable, unformatted)
++endfun
+ 
+-  " Add the class to class list if it's not there yet.
+-  " Add normal groups to the beginning so diff groups can override them.
+-  let s:id = hlID(a:style_name)
+-  if index(s:idlist, s:id ) == -1
+-    if a:style_name =~ 'Diff\%(Add\|Change\|Delete\|Text\)'
+-      call add(s:idlist, s:id)
+-    else
+-      call insert(s:idlist, s:id)
+-    endif
++" set up functions to call HtmlFormat in certain ways based on whether the
++" element is supposed to be unselectable or not
++if s:settings.prevent_copy =~# 'n'
++  if s:settings.number_lines
++    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
++      if a:lnr > 0
++	return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.'" ', 1)
++      else
++	return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
++      endif
++    endfun
++  else
++    " if lines are not being numbered the only reason this function gets called
++    " is to put the line IDs on each line; "text" will be emtpy but lnr will
++    " always be non-zero, however we don't want to use the <input> because that
++    " won't work as nice for empty text
++    function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
++      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.'" ', 0)
++    endfun
+   endif
+-  
+-  " Add the diff highlight class to class list if used and it's not there yet.
+-  " Add diff groups to the end so they override the other highlighting.
+-  if a:diff_style_name != ""
+-    let s:diff_id = hlID(a:diff_style_name)
+-    if index(s:idlist, s:diff_id) == -1
+-      call add(s:idlist, s:diff_id)
++else
++  function! s:HtmlFormat_n(text, style_id, diff_style_id, lnr)
++    if a:lnr > 0
++      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 'id="'.(exists('g:html_diff_win_num') ? 'W'.g:html_diff_win_num : "").'L'.a:lnr.'" ', 0)
++    else
++      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
+     endif
++  endfun
++endif
++if s:settings.prevent_copy =~# 'd'
++  function! s:HtmlFormat_d(text, style_id, diff_style_id)
++    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
++  endfun
++else
++  function! s:HtmlFormat_d(text, style_id, diff_style_id)
++    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
++  endfun
++endif
++if s:settings.prevent_copy =~# 'f'
++  " Note the <input> elements for fill spaces will have a single space for
++  " content, to allow active cursor CSS selection to work.
++  "
++  " Wrap the whole thing in a span for the 1px padding workaround for gaps.
++  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
++    let l:input_open = "<input readonly='readonly'".s:unselInputType.
++	  \ " onselect='this.blur(); return false;'".
++	  \ " onmousedown='this.blur(); ".a:click." return false;'".
++	  \ " onclick='return false;' size='".
++	  \ string(a:len + (empty(a:char2) ? 0 : 1) + a:numfill) .
++	  \ "' "
++    let l:common_attrs = "class='FoldColumn' value='"
++    let l:input_close = (s:settings.use_xhtml ? "' />" : "'>")
++    return "<span class='".a:class."'>".
++	  \ l:input_open.l:common_attrs.repeat(a:char, a:len).
++	  \ (!empty(a:char2) ? a:char2 : "").
++	  \ l:input_close . "</span>"
++  endfun
++  function! s:FoldColumn_fill()
++    return s:FoldColumn_build('', s:foldcolumn, 0, '', 'FoldColumn', '')
++  endfun
++else
++  " For normal fold columns, simply space-pad to the desired width (note that
++  " the FoldColumn definition includes a whitespace:pre rule)
++  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
++    return "<a href='#' class='".a:class."' onclick='".a:click."'>".
++	  \ repeat(a:char, a:len).a:char2.repeat(' ', a:numfill).
++	  \ "</a>"
++  endfun
++  function! s:FoldColumn_fill()
++    return s:HtmlFormat(repeat(' ', s:foldcolumn), s:FOLD_C_ID, 0, "", 0)
++  endfun
++endif
++if s:settings.prevent_copy =~# 't'
++  " put an extra empty span at the end for dynamic folds, so the linebreak can
++  " be surrounded. Otherwise do it as normal.
++  "
++  " TODO: isn't there a better way to do this, than placing it here and using a
++  " substitute later?
++  if s:settings.dynamic_folds
++    function! s:HtmlFormat_t(text, style_id, diff_style_id)
++      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1) .
++	    \ s:HtmlFormat("", a:style_id, 0, "", 0)
++    endfun
++  else
++    function! s:HtmlFormat_t(text, style_id, diff_style_id)
++      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 1)
++    endfun
+   endif
+-
+-  return formatted
+-endfun
++else
++  function! s:HtmlFormat_t(text, style_id, diff_style_id)
++    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, "", 0)
++  endfun
++endif
+ 
+ " Return CSS style describing given highlight id (can be empty)
+ function! s:CSS1(id)
+@@ -172,7 +553,15 @@
+     let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
+     if x != "" | let a = a . "color: " . x . "; " | endif
+     let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
+-    if x != "" | let a = a . "background-color: " . x . "; " | endif
++    if x != ""
++      let a = a . "background-color: " . x . "; "
++      " stupid hack because almost every browser seems to have at least one font
++      " which shows 1px gaps between lines which have background
++      let a = a . "padding-bottom: 1px; "
++    elseif (a:id == s:FOLDED_ID || a:id == s:LINENR_ID || a:id == s:FOLD_C_ID) && !empty(s:settings.prevent_copy)
++      " input elements default to a different color than the rest of the page
++      let a = a . "background-color: " . s:bgc . "; "
++    endif
+   endif
+   if synIDattr(a:id, "bold") | let a = a . "font-weight: bold; " | endif
+   if synIDattr(a:id, "italic") | let a = a . "font-style: italic; " | endif
+@@ -232,7 +621,11 @@
+ let s:orgbufnr = winbufnr(0)
+ let s:origwin_stl = &l:stl
+ if expand("%") == ""
+-  exec 'new Untitled.'.(s:settings.use_xhtml ? 'x' : '').'html'
++  if exists('g:html_diff_win_num')
++    exec 'new Untitled_win'.g:html_diff_win_num.'.'.(s:settings.use_xhtml ? 'x' : '').'html'
++  else
++    exec 'new Untitled.'.(s:settings.use_xhtml ? 'x' : '').'html'
++  endif
+ else
+   exec 'new %.'.(s:settings.use_xhtml ? 'x' : '').'html'
+ endif
+@@ -250,7 +643,6 @@
+ let s:newwin_stl = &l:stl
+ 
+ " on the new window, set the least time-consuming fold method
+-let s:old_fdm = &foldmethod
+ let s:old_fen = &foldenable
+ setlocal foldmethod=manual
+ setlocal nofoldenable
+@@ -265,6 +657,19 @@
+ let s:old_magic = &magic
+ set magic
+ 
++" set the fileencoding to match the charset we'll be using
++let &l:fileencoding=s:settings.vim_encoding
++
++" According to http://www.w3.org/TR/html4/charset.html#doc-char-set, the byte
++" order mark is highly recommend on the web when using multibyte encodings. But,
++" it is not a good idea to include it on UTF-8 files. Otherwise, let Vim
++" determine when it is actually inserted.
++if s:settings.vim_encoding == 'utf-8'
++  setlocal nobomb
++else
++  setlocal bomb
++endif
++
+ let s:lines = []
+ 
+ if s:settings.use_xhtml
+@@ -283,7 +688,7 @@
+ let s:HtmlEndline = ''
+ if s:settings.no_pre
+   let s:HtmlEndline = '<br' . s:tag_close
+-  let s:LeadingSpace = '&nbsp;'
++  let s:LeadingSpace = s:settings.use_xhtml ? '&#160;' : '&nbsp;'
+   let s:HtmlSpace = '\' . s:LeadingSpace
+ endif
+ 
+@@ -305,7 +710,12 @@
+ call add(s:lines, '<meta name="syntax" content="'.s:current_syntax.'"'.s:tag_close)
+ call add(s:lines, '<meta name="settings" content="'.
+       \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
++      \ ',prevent_copy='.s:settings.prevent_copy.
+       \ '"'.s:tag_close)
++call add(s:lines, '<meta name="colorscheme" content="'.
++      \ (exists('g:colors_name')
++      \ ? g:colors_name
++      \ : 'none'). '"'.s:tag_close)
+ 
+ if s:settings.use_css
+   if s:settings.dynamic_folds
+@@ -381,12 +791,17 @@
+   endif
+ endif
+ 
++" insert script tag; javascript is always needed for the line number
++" normalization for URL hashes
++call extend(s:lines, [
++      \ "",
++      \ "<script type='text/javascript'>",
++      \ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
++
+ " insert javascript to toggle folds open and closed
+ if s:settings.dynamic_folds
+   call extend(s:lines, [
+ 	\ "",
+-	\ "<script type='text/javascript'>",
+-	\ s:settings.use_xhtml ? '//<![CDATA[' : "<!--",
+ 	\ "function toggleFold(objID)",
+ 	\ "{",
+ 	\ "  var fold;",
+@@ -399,22 +814,157 @@
+ 	\ "  {",
+ 	\ "    fold.className = 'closed-fold';",
+ 	\ "  }",
+-	\ "}",
+-	\ s:settings.use_xhtml ? '//]]>' : '-->',
+-	\ "</script>"
+-	\])
++	\ "}"
++	\ ])
++endif
++
++" insert javascript to get IDs from line numbers, and to open a fold before
++" jumping to any lines contained therein
++call extend(s:lines, [
++      \ "",
++      \ "/* function to open any folds containing a jumped-to line before jumping to it */",
++      \ "function JumpToLine()",
++      \ "{",
++      \ "  var lineNum;",
++      \ "  lineNum = window.location.hash;",
++      \ "  lineNum = lineNum.substr(1); /* strip off '#' */",
++      \ "",
++      \ "  if (lineNum.indexOf('L') == -1) {",
++      \ "    lineNum = 'L'+lineNum;",
++      \ "  }",
++      \ "  lineElem = document.getElementById(lineNum);"
++      \ ])
++if s:settings.dynamic_folds
++  call extend(s:lines, [
++	\ "",
++	\ "  /* navigate upwards in the DOM tree to open all folds containing the line */",
++	\ "  var node = lineElem;",
++	\ "  while (node && node.id != 'vimCodeElement')",
++	\ "  {",
++	\ "    if (node.className == 'closed-fold')",
++	\ "    {",
++	\ "      node.className = 'open-fold';",
++	\ "    }",
++	\ "    node = node.parentNode;",
++	\ "  }",
++	\ ])
++endif
++call extend(s:lines, [
++      \ "  /* Always jump to new location even if the line was hidden inside a fold, or",
++      \ "   * we corrected the raw number to a line ID.",
++      \ "   */",
++      \ "  if (lineElem) {",
++      \ "    lineElem.scrollIntoView(true);",
++      \ "  }",
++      \ "  return true;",
++      \ "}",
++      \ "if ('onhashchange' in window) {",
++      \ "  window.onhashchange = JumpToLine;",
++      \ "}"
++      \ ])
++
++" Small text columns like the foldcolumn and line number column need a weird
++" hack to work around Webkit's and (in versions prior to 9) IE's lack of support
++" for the 'ch' unit without messing up Opera, which also doesn't support it but
++" works anyway.
++"
++" The problem is that without the 'ch' unit, it is not possible to specify a
++" size of an <input> in terms of character widths. Only Opera seems to do the
++" "sensible" thing and make the <input> sized to fit exactly as many characters
++" as specified by its "size" attribute, but the spec actually says "at least
++" wide enough to fit 'size' characters", so the other browsers are technically
++" correct as well.
++"
++" Anyway, this leads to two diffculties:
++"   1. The foldcolumn is made up of multiple elements side-by-side with
++"      different sizes, each of which has their own extra padding added. Thus, a
++"      column made up of one item of size 1 and another of size 2 would not
++"      necessarily be equal in size to another line's foldcolumn with a single
++"      item of size 3.
++"   2. The extra padding added to the <input> elements adds up to make the
++"      foldcolumn and line number column too wide, especially in Webkit
++"      browsers.
++"
++" So, the full workaround is:
++"   1. Define a default size in em, equal to the number of characters in the
++"      input element, in case javascript is disabled and the browser does not
++"      support the 'ch' unit. Unfortunately this makes Opera no longer work
++"      properly without javascript. 1em per character is much too wide but it
++"      looks better in webkit browsers than unaligned columns.
++"   2. Insert the following javascript to run at page load, which checks for the
++"      width of a single character (in an extraneous page element inserted
++"      before the page title, and set to hidden) and compares it to the width of
++"      another extra <input> element with only one character. If the width
++"      matches, the script does nothing more, but if not, it will figure out the
++"      fraction of an em unit which would correspond with a ch unit if there
++"      were one, and set the containing element (<pre> or <div>) to a class with
++"      pre-defined rules which is closest to that fraction of an em. Rules are
++"      defined from 0.05 em to 1em per ch.
++if !empty(s:settings.prevent_copy)
++  call extend(s:lines, [
++	\ '',
++	\ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
++	\ 'function FixCharWidth() {',
++	\ '  /* get the hidden element which gives the width of a single character */',
++	\ '  var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
++	\ '  /* get all input elements, we''ll filter on class later */',
++	\ '  var inputTags = document.getElementsByTagName("input");',
++	\ '  var ratio = 5;',
++	\ '  var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
++	\ '  var emWidth = document.getElementById("oneEmWidth").clientWidth;',
++	\ '  if (inputWidth > goodWidth) {',
++	\ '    while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
++	\ '    ratio += 5;',
++	\ '  }',
++	\ '  document.getElementById("vimCodeElement").className = "em"+ratio;',
++	\ '  }',
++	\ '}'
++	\ ])
+ endif
+ 
++" insert script closing tag
++call extend(s:lines, [
++      \ '',
++      \ s:settings.use_xhtml ? '//]]>' : '-->',
++      \ "</script>"
++      \ ])
++
++call extend(s:lines, ["</head>"])
++if !empty(s:settings.prevent_copy)
++  call extend(s:lines,
++	\ ["<body onload='FixCharWidth(); JumpToLine();'>",
++	\ "<!-- hidden divs used by javascript to get the width of a char -->",
++	\ "<div id='oneCharWidth'>0</div>",
++	\ "<div id='oneInputWidth'><input size='1' value='0'".s:tag_close."</div>",
++	\ "<div id='oneEmWidth' style='width: 1em;'></div>"
++	\ ])
++else
++  call extend(s:lines, ["<body onload='JumpToLine();'>"])
++endif
+ if s:settings.no_pre
+-  call extend(s:lines, ["</head>", "<body>"])
++  " if we're not using CSS we use a font tag which can't have a div inside
++  if s:settings.use_css
++    call extend(s:lines, ["<div id='vimCodeElement'>"])
++  endif
+ else
+-  call extend(s:lines, ["</head>", "<body>", "<pre>"])
++  call extend(s:lines, ["<pre id='vimCodeElement'>"])
+ endif
+ 
+ exe s:orgwin . "wincmd w"
+ 
+-" List of all id's
+-let s:idlist = []
++" caches of style data
++" initialize to include line numbers if using them
++if s:settings.number_lines
++  let s:stylelist = { s:LINENR_ID : ".LineNr { " . s:CSS1( s:LINENR_ID ) . "}" }
++else
++  let s:stylelist = {}
++endif
++let s:diffstylelist = {
++      \   s:DIFF_A_ID : ".DiffAdd { " . s:CSS1( s:DIFF_A_ID ) . "}",
++      \   s:DIFF_C_ID : ".DiffChange { " . s:CSS1( s:DIFF_C_ID ) . "}",
++      \   s:DIFF_D_ID : ".DiffDelete { " . s:CSS1( s:DIFF_D_ID ) . "}",
++      \   s:DIFF_T_ID : ".DiffText { " . s:CSS1( s:DIFF_T_ID ) . "}"
++      \ }
+ 
+ " set up progress bar in the status line
+ if !s:settings.no_progress
+@@ -545,9 +1095,6 @@
+       " level, so subtract 2 from index of first non-dash after the dashes
+       " in order to get the fold level of the current fold
+       let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
+-      if s:level+1 > s:foldcolumn
+-	let s:foldcolumn = s:level+1
+-      endif
+       " store fold info for later use
+       let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
+       call add(s:allfolds, s:newfold)
+@@ -577,9 +1124,6 @@
+       " level, so subtract 2 from index of first non-dash after the dashes
+       " in order to get the fold level of the current fold
+       let s:level = match(foldtextresult(s:lnum), '+-*\zs[^-]') - 2
+-      if s:level+1 > s:foldcolumn
+-	let s:foldcolumn = s:level+1
+-      endif
+       let s:newfold = {'firstline': s:lnum, 'lastline': foldclosedend(s:lnum), 'level': s:level,'type': "closed-fold"}
+       " only add the fold if we don't already have it
+       if empty(s:allfolds) || index(s:allfolds, s:newfold) == -1
+@@ -609,6 +1153,74 @@
+ 
+   " close all folds again so we can get the fold text as we go
+   silent! %foldclose!
++
++  " Go through and remove folds we don't need to (or cannot) process in the
++  " current conversion range
++  "
++  " If a fold is removed which contains other folds, which are included, we need
++  " to adjust the level of the included folds as used by the conversion logic
++  " (avoiding special cases is good)
++  "
++  " Note any time we remove a fold, either all of the included folds are in it,
++  " or none of them, because we only remove a fold if neither its start nor its
++  " end are within the conversion range.
++  let leveladjust = 0
++  for afold in s:allfolds
++    let removed = 0
++    if exists("g:html_start_line") && exists("g:html_end_line")
++      if afold.firstline < g:html_start_line
++	if afold.lastline <= g:html_end_line && afold.lastline >= g:html_start_line
++	  " if a fold starts before the range to convert but stops within the
++	  " range, we need to include it. Make it start on the first converted
++	  " line.
++	  let afold.firstline = g:html_start_line
++	else
++	  " if the fold lies outside the range or the start and stop enclose
++	  " the entire range, don't bother parsing it
++	  call remove(s:allfolds, index(s:allfolds, afold))
++	  let removed = 1
++	  if afold.lastline > g:html_end_line
++	    let leveladjust += 1
++	  endif
++	endif
++      elseif afold.firstline > g:html_end_line
++	" If the entire fold lies outside the range we need to remove it.
++	call remove(s:allfolds, index(s:allfolds, afold))
++	let removed = 1
++      endif
++    elseif exists("g:html_start_line")
++      if afold.firstline < g:html_start_line
++	" if there is no last line, but there is a first line, the end of the
++	" fold will always lie within the region of interest, so keep it
++	let afold.firstline = g:html_start_line
++      endif
++    elseif exists("g:html_end_line")
++      " if there is no first line we default to the first line in the buffer so
++      " the fold start will always be included if the fold itself is included.
++      " If however the entire fold lies outside the range we need to remove it.
++      if afold.firstline > g:html_end_line
++	call remove(s:allfolds, index(s:allfolds, afold))
++	let removed = 1
++      endif
++    endif
++    if !removed
++      let afold.level -= leveladjust
++      if afold.level+1 > s:foldcolumn
++	let s:foldcolumn = afold.level+1
++      endif
++    endif
++  endfor
++
++  " if we've removed folds containing the conversion range from processing,
++  " getting foldtext as we go won't know to open the removed folds, so the
++  " foldtext would be wrong; open them now.
++  "
++  " Note that only when a start and an end line is specified will a fold
++  " containing the current range ever be removed.
++  while leveladjust > 0
++    exe g:html_start_line."foldopen"
++    let leveladjust -= 1
++  endwhile
+ endif
+ 
+ " Now loop over all lines in the original text to convert to html.
+@@ -656,6 +1268,13 @@
+ 
+ let s:foldId = 0
+ 
++if !s:settings.expand_tabs
++  " If keeping tabs, add them to printable characters so we keep them when
++  " formatting text (strtrans() doesn't replace printable chars)
++  let s:old_isprint = &isprint
++  setlocal isprint+=9
++endif
++
+ while s:lnum <= s:end
+ 
+   " If there are filler lines for diff mode, show these above the line.
+@@ -672,15 +1291,22 @@
+ 
+       if !s:settings.no_pre
+ 	" HTML line wrapping is off--go ahead and fill to the margin
++	" TODO: what about when CSS wrapping is turned on?
+ 	let s:new = s:new . repeat(s:difffillchar, &columns - strlen(s:new) - s:margin)
+       else
+ 	let s:new = s:new . repeat(s:difffillchar, 3)
+       endif
+ 
+-      let s:new = s:HtmlFormat(s:new, "DiffDelete", "")
++      let s:new = s:HtmlFormat_d(s:new, s:DIFF_D_ID, 0)
+       if s:settings.number_lines
+-	" Indent if line numbering is on; must be after escaping.
+-	let s:new = repeat(s:LeadingSpace, s:margin) . s:new
++	" Indent if line numbering is on. Indent gets style of line number
++	" column.
++	let s:new = s:HtmlFormat_n(repeat(' ', s:margin), s:LINENR_ID, 0, 0) . s:new
++      endif
++      if s:settings.dynamic_folds && !s:settings.no_foldcolumn && s:foldcolumn > 0
++	" Indent for foldcolumn if there is one. Assume it's empty, there should
++	" not be a fold for deleted lines in diff mode.
++	let s:new = s:FoldColumn_fill() . s:new
+       endif
+       call add(s:lines, s:new.s:HtmlEndline)
+ 
+@@ -693,8 +1319,6 @@
+   " Start the line with the line number.
+   if s:settings.number_lines
+     let s:numcol = repeat(' ', s:margin - 1 - strlen(s:lnum)) . s:lnum . ' '
+-  else
+-    let s:numcol = ""
+   endif
+ 
+   let s:new = ""
+@@ -702,14 +1326,14 @@
+   if has('folding') && !s:settings.ignore_folding && foldclosed(s:lnum) > -1 && !s:settings.dynamic_folds
+     "
+     " This is the beginning of a folded block (with no dynamic folding)
+-    "
+-    let s:new = s:numcol . foldtextresult(s:lnum)
++    let s:new = foldtextresult(s:lnum)
+     if !s:settings.no_pre
+       " HTML line wrapping is off--go ahead and fill to the margin
+       let s:new = s:new . repeat(s:foldfillchar, &columns - strlen(s:new))
+     endif
+ 
+-    let s:new = s:HtmlFormat(s:new, "Folded", "")
++    " put numcol in a separate group for sake of unselectable text
++    let s:new = (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, s:lnum): "") . s:HtmlFormat_t(s:new, s:FOLDED_ID, 0)
+ 
+     " Skip to the end of the fold
+     let s:new_lnum = foldclosedend(s:lnum)
+@@ -734,7 +1358,7 @@
+ 	call remove(s:foldstack, 0)
+       endwhile
+ 
+-      " Now insert an opening any new folds that start on this line
++      " Now insert an opening for any new folds that start on this line
+       let s:firstfold = 1
+       while !empty(s:allfolds) && get(s:allfolds,0).firstline == s:lnum
+ 	let s:foldId = s:foldId + 1
+@@ -751,38 +1375,46 @@
+ 	if !s:settings.no_foldcolumn
+ 	  " add fold column that can open the new fold
+ 	  if s:allfolds[0].level > 1 && s:firstfold
+-	    let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
+-	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1) . "</a>"
++	    let s:new = s:new . s:FoldColumn_build('|', s:allfolds[0].level - 1, 0, "",
++		  \ 'toggle-open FoldColumn','javascript:toggleFold("fold'.s:foldstack[0].id.'");')
+ 	  endif
+-	  let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>+</a>"
+-	  let s:new = s:new . "<a class='toggle-open "
++	  " add the filler spaces separately from the '+' char so that it can be
++	  " shown/hidden separately during a hover unfold
++	  let s:new = s:new . s:FoldColumn_build("+", 1, 0, "",
++		\ 'toggle-open FoldColumn', 'javascript:toggleFold("fold'.s:foldId.'");')
+ 	  " If this is not the last fold we're opening on this line, we need
+ 	  " to keep the filler spaces hidden if the fold is opened by mouse
+ 	  " hover. If it is the last fold to open in the line, we shouldn't hide
+ 	  " them, so don't apply the toggle-filler class.
+-	  if get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum
+-	    let s:new = s:new . "toggle-filler "
+-	  endif
+-	  let s:new = s:new . "FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
+-	  let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level) . "</a>"
++	  let s:new = s:new . s:FoldColumn_build(" ", 1, s:foldcolumn - s:allfolds[0].level - 1, "",
++		\ 'toggle-open FoldColumn'. (get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum ?" toggle-filler" :""),
++		\ 'javascript:toggleFold("fold'.s:foldId.'");')
+ 
+ 	  " add fold column that can close the new fold
+-	  let s:new = s:new . "<a class='toggle-closed FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
+-	  if s:firstfold
+-	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1)
+-	  endif
+-	  let s:new = s:new . "-"
+-	  " only add spaces if we aren't opening another fold on the same line
++	  " only add extra blank space if we aren't opening another fold on the
++	  " same line
+ 	  if get(s:allfolds, 1, {'firstline': 0}).firstline != s:lnum
+-	    let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level)
++	    let s:extra_space = s:foldcolumn - s:allfolds[0].level
++	  else
++	    let s:extra_space = 0
++	  endif
++	  if s:firstfold
++	    " the first fold in a line has '|' characters from folds opened in
++	    " previous lines, before the '-' for this fold
++	    let s:new .= s:FoldColumn_build('|', s:allfolds[0].level - 1, s:extra_space, '-',
++		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.'");')
++	  else
++	    " any subsequent folds in the line only add a single '-'
++	    let s:new = s:new . s:FoldColumn_build("-", 1, s:extra_space, "",
++		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.'");')
+ 	  endif
+-	  let s:new = s:new . "</a>"
+ 	  let s:firstfold = 0
+ 	endif
+ 
+-	" add fold text, moving the span ending to the next line so collapsing
+-	" of folds works correctly
+-	let s:new = s:new . substitute(s:HtmlFormat(s:numcol . foldtextresult(s:lnum), "Folded", ""), '</span>', s:HtmlEndline.'\n\0', '')
++	" Add fold text, moving the span ending to the next line so collapsing
++	" of folds works correctly.
++	" Put numcol in a separate group for sake of unselectable text.
++	let s:new = s:new . (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0, 0) : "") . substitute(s:HtmlFormat_t(foldtextresult(s:lnum), s:FOLDED_ID, 0), '</span>', s:HtmlEndline.'\n\0', '')
+ 	let s:new = s:new . "<span class='fulltext'>"
+ 
+ 	" open the fold now that we have the fold text to allow retrieval of
+@@ -802,14 +1434,13 @@
+ 	  " add the empty foldcolumn for unfolded lines if there is a fold
+ 	  " column at all
+ 	  if s:foldcolumn > 0
+-	    let s:new = s:new . s:HtmlFormat(repeat(' ', s:foldcolumn), "FoldColumn", "")
++	    let s:new = s:new . s:FoldColumn_fill()
+ 	  endif
+ 	else
+ 	  " add the fold column for folds not on the opening line
+ 	  if get(s:foldstack, 0).firstline < s:lnum
+-	    let s:new = s:new . "<a class='FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
+-	    let s:new = s:new . repeat('|', s:foldstack[0].level)
+-	    let s:new = s:new . repeat(' ', s:foldcolumn - s:foldstack[0].level) . "</a>"
++	    let s:new = s:new . s:FoldColumn_build('|', s:foldstack[0].level, s:foldcolumn - s:foldstack[0].level, "",
++		  \ 'FoldColumn', 'javascript:toggleFold("fold'.s:foldstack[0].id.'");')
+ 	  endif
+ 	endif
+       endif
+@@ -817,8 +1448,9 @@
+ 
+     " Now continue with the unfolded line text
+     if s:settings.number_lines
+-      " TODO: why not use the real highlight name here?
+-      let s:new = s:new . s:HtmlFormat(s:numcol, "lnr", "")
++      let s:new = s:new . s:HtmlFormat_n(s:numcol, s:LINENR_ID, 0, s:lnum)
++    else
++      let s:new = s:new . s:HtmlFormat_n("", s:LINENR_ID, 0, s:lnum)
+     endif
+ 
+     " Get the diff attribute, if any.
+@@ -832,7 +1464,6 @@
+ 
+     " most of the time we won't use the diff_id, initialize to zero
+     let s:diff_id = 0
+-    let s:diff_id_name = ""
+ 
+     while s:col <= s:len || (s:col == 1 && s:diffattr)
+       let s:startcol = s:col " The start column for processing text
+@@ -871,47 +1502,45 @@
+       endif
+ 
+       if s:settings.ignore_conceal || !s:concealinfo[0]
+-	" Expand tabs
++	" Expand tabs if needed
+ 	let s:expandedtab = strpart(s:line, s:startcol - 1, s:col - s:startcol)
+-	let s:offset = 0
+-	let s:idx = stridx(s:expandedtab, "\t")
+-	while s:idx >= 0
+-	  if has("multi_byte_encoding")
+-	    if s:startcol + s:idx == 1
+-	      let s:i = &ts
+-	    else
+-	      if s:idx == 0
+-		let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c')
++	if s:settings.expand_tabs
++	  let s:offset = 0
++	  let s:idx = stridx(s:expandedtab, "\t")
++	  while s:idx >= 0
++	    if has("multi_byte_encoding")
++	      if s:startcol + s:idx == 1
++		let s:i = &ts
+ 	      else
+-		let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c')
++		if s:idx == 0
++		  let s:prevc = matchstr(s:line, '.\%' . (s:startcol + s:idx + s:offset) . 'c')
++		else
++		  let s:prevc = matchstr(s:expandedtab, '.\%' . (s:idx + 1) . 'c')
++		endif
++		let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
++		let s:i = &ts - (s:vcol % &ts)
+ 	      endif
+-	      let s:vcol = virtcol([s:lnum, s:startcol + s:idx + s:offset - len(s:prevc)])
+-	      let s:i = &ts - (s:vcol % &ts)
++	      let s:offset -= s:i - 1
++	    else
++	      let s:i = &ts - ((s:idx + s:startcol - 1) % &ts)
+ 	    endif
+-	    let s:offset -= s:i - 1
+-	  else
+-	    let s:i = &ts - ((s:idx + s:startcol - 1) % &ts)
+-	  endif
+-	  let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
+-	  let s:idx = stridx(s:expandedtab, "\t")
+-	endwhile
++	    let s:expandedtab = substitute(s:expandedtab, '\t', repeat(' ', s:i), '')
++	    let s:idx = stridx(s:expandedtab, "\t")
++	  endwhile
++	end
+ 
+ 	" get the highlight group name to use
+ 	let s:id = synIDtrans(s:id)
+-	let s:id_name = synIDattr(s:id, "name", s:whatterm)
+-	if s:diff_id
+-	  let s:diff_id_name = synIDattr(s:diff_id, "name", s:whatterm)
+-	endif
+       else
+ 	" use Conceal highlighting for concealed text
+-	let s:id_name = 'Conceal'
++	let s:id = s:CONCEAL_ID
+ 	let s:expandedtab = s:concealinfo[1]
+       endif
+ 
+-      " Output the text with the same synID, with class set to {s:id_name},
+-      " unless it has been concealed completely.
++      " Output the text with the same synID, with class set to the highlight ID
++      " name, unless it has been concealed completely.
+       if strlen(s:expandedtab) > 0
+-	let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id_name, s:diff_id_name)
++	let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id, s:diff_id, "", 0)
+       endif
+     endwhile
+   endif
+@@ -936,9 +1565,9 @@
+   endwhile
+ 
+   " add fold column to the style list if not already there
+-  let s:id = hlID('FoldColumn')
+-  if index(s:idlist, s:id) == -1
+-    call insert(s:idlist, s:id)
++  let s:id = s:FOLD_C_ID
++  if !has_key(s:stylelist, s:id)
++    let s:stylelist[s:id] = '.FoldColumn { ' . s:CSS1(s:id) . '}'
+   endif
+ endif
+ 
+@@ -947,7 +1576,7 @@
+     " Close off the font tag that encapsulates the whole <body>
+     call extend(s:lines, ["</font>", "</body>", "</html>"])
+   else
+-    call extend(s:lines, ["</body>", "</html>"])
++    call extend(s:lines, ["</div>", "</body>", "</html>"])
+   endif
+ else
+   call extend(s:lines, ["</pre>", "</body>", "</html>"])
+@@ -957,91 +1586,119 @@
+ call setline(1, s:lines)
+ unlet s:lines
+ 
++" Mangle modelines so Vim doesn't try to use HTML text as a modeline if editing
++" this file in the future; need to do this after generating all the text in case
++" the modeline text has different highlight groups which all turn out to be
++" stripped from the final output.
++%s!\v(%(^|\s+)%(vim?|ex)):!\1\&#0058;!ge
++
++" The generated HTML is admittedly ugly and takes a LONG time to fold.
++" Make sure the user doesn't do syntax folding when loading a generated file,
++" using a modeline.
++call append(line('$'), "<!-- vim: set foldmethod=manual : -->")
++
+ " Now, when we finally know which, we define the colors and styles
+ if s:settings.use_css
+   1;/<style type="text/+1
+ endif
+ 
+-" Find out the background and foreground color.
+-let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
+-let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
+-if s:fgc == ""
+-  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
+-endif
+-if s:bgc == ""
+-  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
+-endif
+-
+ " Normal/global attributes
+ " For Netscape 4, set <body> attributes too, though, strictly speaking, it's
+ " incorrect.
+ if s:settings.use_css
+   if s:settings.no_pre
+-    execute "normal! A\nbody { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }\e"
++    call append('.', "body { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }")
++    +
+   else
+-    execute "normal! A\npre { font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }\e"
++    call append('.', "pre { " . s:whitespace . "font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }")
++    +
+     yank
+     put
+     execute "normal! ^cwbody\e"
++    " body should not have the wrap formatting, only the pre section
++    if s:whitespace != ''
++      exec 's#'.s:whitespace
++    endif
+   endif
+-else
+-  execute '%s:<body>:<body bgcolor="' . s:bgc . '" text="' . s:fgc . '">\r<font face="'. s:htmlfont .'">'
+-endif
+-
+-" Line numbering attributes
+-if s:settings.number_lines
+-  if s:settings.use_css
+-    execute "normal! A\n.lnr { " . s:CSS1(hlID("LineNr")) . "}\e"
+-  else
+-    execute '%s+^<span class="lnr">\([^<]*\)</span>+' . s:HtmlOpening(hlID("LineNr")) . '\1' . s:HtmlClosing(hlID("LineNr")) . '+g'
+-  endif
+-endif
+-
+-" Gather attributes for all other classes
+-if !s:settings.no_progress && !empty(s:idlist)
+-  let s:pgb = s:ProgressBar("Processing classes:", len(s:idlist),s:newwin)
+-endif
+-while !empty(s:idlist)
+-  let s:attr = ""
+-  let s:id = remove(s:idlist, 0)
+-  let s:attr = s:CSS1(s:id)
+-  let s:id_name = synIDattr(s:id, "name", s:whatterm)
+-
+-  " If the class has some attributes, export the style, otherwise DELETE all
+-  " its occurences to make the HTML shorter
+-  if s:attr != ""
+-    if s:settings.use_css
+-      execute "normal! A\n." . s:id_name . " { " . s:attr . "}"
+-    else
+-      " replace spans of just this class name with non-CSS style markup
+-      execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '\1' . s:HtmlClosing(s:id) . '+ge'
+-      " Replace spans of this class name AND a diff class with non-CSS style
+-      " markup surrounding a span of just the diff class. The diff class will
+-      " be handled later because we know that information is at the end.
+-      execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '<span class="\1">\2</span>' . s:HtmlClosing(s:id) . '+ge'
++  " fix browser inconsistencies (sometimes within the same browser) of different
++  " default font size for different elements
++  call append('.', '* { font-size: 1em; }')
++  +
++  " if we use any input elements for unselectable content, make sure they look
++  " like normal text
++  if !empty(s:settings.prevent_copy)
++    call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '.s:htmlfont.'; }')
++    +
++    " ch units for browsers which support them, em units for a somewhat
++    " reasonable fallback. Also make sure the special elements for size
++    " calculations aren't seen.
++    call append('.', [
++	  \ "input[size='1'] { width: 1em; width: 1ch; }",
++	  \ "input[size='2'] { width: 2em; width: 2ch; }",
++	  \ "input[size='3'] { width: 3em; width: 3ch; }",
++	  \ "input[size='4'] { width: 4em; width: 4ch; }",
++	  \ "input[size='5'] { width: 5em; width: 5ch; }",
++	  \ "input[size='6'] { width: 6em; width: 6ch; }",
++	  \ "input[size='7'] { width: 7em; width: 7ch; }",
++	  \ "input[size='8'] { width: 8em; width: 8ch; }",
++	  \ "input[size='9'] { width: 9em; width: 9ch; }",
++	  \ "input[size='10'] { width: 10em; width: 10ch; }",
++	  \ "input[size='11'] { width: 11em; width: 11ch; }",
++	  \ "input[size='12'] { width: 12em; width: 12ch; }",
++	  \ "input[size='13'] { width: 13em; width: 13ch; }",
++	  \ "input[size='14'] { width: 14em; width: 14ch; }",
++	  \ "input[size='15'] { width: 15em; width: 15ch; }",
++	  \ "input[size='16'] { width: 16em; width: 16ch; }",
++	  \ "input[size='17'] { width: 17em; width: 17ch; }",
++	  \ "input[size='18'] { width: 18em; width: 18ch; }",
++	  \ "input[size='19'] { width: 19em; width: 19ch; }",
++	  \ "input[size='20'] { width: 20em; width: 20ch; }",
++	  \ "#oneCharWidth, #oneEmWidth, #oneInputWidth { padding: 0; margin: 0; position: absolute; left: -999999px; visibility: hidden; }"
++	  \ ])
++    +21
++    for w in range(5, 100, 5)
++      let base = 0.01 * w
++      call append('.', join(map(range(1,20), "'.em'.w.' input[size='''.v:val.'''] { width: '.string(v:val*base).'em; }'")))
++      +
++    endfor
++    if s:settings.prevent_copy =~# 'f'
++    " Make the cursor show active fold columns as active areas, and empty fold
++    " columns as not interactive.
++      call append('.', ['input.FoldColumn { cursor: pointer; }',
++	    \ 'input.FoldColumn[value=""] { cursor: default; }'
++	    \ ])
++      +2
+     endif
+-  else
+-    execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+ge'
+-    execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+<span class="\1">\2</span>+ge'
+-    if s:settings.use_css
+-      1;/<\/style>/-2
++    " make line number column show as non-interactive if not selectable
++    if s:settings.prevent_copy =~# 'n'
++      call append('.', 'input.LineNr { cursor: default; }')
++      +
++    endif
++    " make fold text and line number column within fold text show as
++    " non-interactive if not selectable
++    if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding
++      call append('.', 'input.Folded { cursor: default; }')
++      +
+     endif
+   endif
++else
++  execute '%s:<body\([^>]*\):<body bgcolor="' . s:bgc . '" text="' . s:fgc . '"\1>\r<font face="'. s:htmlfont .'"'
++endif
+ 
+-  if !s:settings.no_progress
+-    call s:pgb.incr()
+-    if s:pgb.needs_redraw
+-      redrawstatus
+-      let s:pgb.needs_redraw = 0
+-      " TODO: sleep here to show the progress bar, but only if total time spent
+-      " so far on this step is < 1 second? Too slow for batch runs like the test
+-      " suite to sleep all the time. Maybe there's no good reason to sleep at
+-      " all.
+-    endif
++" Gather attributes for all other classes. Do diff first so that normal
++" highlight groups are inserted before it.
++if s:settings.use_css
++  if s:diff_mode
++    call append('.', filter(map(keys(s:diffstylelist), "s:diffstylelist[v:val]"), 'v:val != ""'))
+   endif
+-endwhile
++  if !empty(s:stylelist)
++    call append('.', filter(map(keys(s:stylelist), "s:stylelist[v:val]"), 'v:val != ""'))
++  endif
++endif
+ 
+ " Add hyperlinks
++" TODO: add option to not do this? Maybe just make the color the same as the
++" text highlight group normally is?
+ %s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|&gt;\|&lt;\|&quot;\)+<a href="\1">\1</a>\2+ge
+ 
+ " The DTD
+@@ -1060,9 +1717,11 @@
+ " Cleanup
+ %s:\s\+$::e
+ 
+-" Restore old settings
++" Restore old settings (new window first)
++"
++" Don't bother restoring foldmethod in case it was syntax because the markup is
++" so weirdly formatted it can take a LONG time.
+ let &l:foldenable = s:old_fen
+-let &l:foldmethod = s:old_fdm
+ let &report = s:old_report
+ let &title = s:old_title
+ let &icon = s:old_icon
+@@ -1070,29 +1729,40 @@
+ let &magic = s:old_magic
+ let @/ = s:old_search
+ let &more = s:old_more
++
++" switch to original window to restore those settings
+ exe s:orgwin . "wincmd w"
++
++if !s:settings.expand_tabs
++  let &l:isprint = s:old_isprint
++endif
++let &l:stl = s:origwin_stl
+ let &l:et = s:old_et
+ let &l:scrollbind = s:old_bind
++
++" and back to the new window again to end there
+ exe s:newwin . "wincmd w"
++
++let &l:stl = s:newwin_stl
+ exec 'resize' s:old_winheight
+ let &l:winfixheight = s:old_winfixheight
+ 
+-call setwinvar(s:orgwin,'&stl', s:origwin_stl)
+-call setwinvar(s:newwin,'&stl', s:newwin_stl)
+ let &ls=s:ls
+ 
+ " Save a little bit of memory (worth doing?)
+-unlet s:htmlfont
++unlet s:htmlfont s:whitespace
+ unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
+-unlet s:old_magic s:old_more s:old_fdm s:old_fen s:old_winheight
+-unlet s:whatterm s:idlist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
+-unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo
++unlet s:old_magic s:old_more s:old_fen s:old_winheight
++unlet! s:old_isprint
++unlet s:whatterm s:stylelist s:diffstylelist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
++unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo s:diff_mode
+ unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:origwin_stl
+ unlet! s:newwin_stl s:current_syntax
+ if !v:profiling
+   delfunc s:HtmlColor
+   delfunc s:HtmlFormat
+   delfunc s:CSS1
++  delfunc s:BuildStyleWrapper
+   if !s:settings.use_css
+     delfunc s:HtmlOpening
+     delfunc s:HtmlClosing
+@@ -1110,8 +1780,8 @@
+ endif
+ 
+ unlet! s:new_lnum s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace
+-unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:foldcolumn
+-unlet s:foldstack s:allfolds s:foldId s:numcol s:settings
++unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:numcol s:foldcolumn
++unlet s:foldstack s:allfolds s:foldId s:settings
+ 
+ let &cpo = s:cpo_sav
+ unlet! s:cpo_sav
+diff -Naur vim73.orig/runtime/syntax/abap.vim vim73/runtime/syntax/abap.vim
+--- vim73.orig/runtime/syntax/abap.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/abap.vim	2013-06-07 17:07:21.115615050 +0000
+@@ -1,8 +1,9 @@
+ " Vim ABAP syntax file
+ "    Language: SAP - ABAP/R4
+-"    Revision: 1.0
+-"  Maintainer: Marius Piedallu van Wyk <marius@e.co.za>
+-" Last Change: 2006 Apr 13
++"    Revision: 2.1
++"  Maintainer: Marius Piedallu van Wyk <lailoken@gmail.com>
++" Last Change: 2012 Oct 23
++"     Comment: Thanks to EPI-USE Labs for all your assistance. :)
+ 
+ " For version  < 6.0: Clear all syntax items
+ " For version >= 6.0: Quit when a syntax file was already loaded
+@@ -15,101 +16,153 @@
+ " Always ignore case
+ syn case ignore
+ 
+-" Symbol Operators
+-syn match   abapSymbolOperator  "[+\-/=<>$]"
+-syn match   abapSymbolOperator  "\*"
+-syn match   abapSymbolOperator  "[<>]="
+-syn match   abapSymbolOperator  "<>"
+-syn match   abapSymbolOperator  "\*\*"
+-syn match   abapSymbolOperator  "[()]"
+-syn match   abapSymbolOperator  "[:,\.]"
++" Symbol Operators (space delimited)
++syn match   abapSymbolOperator  "\W+\W"
++syn match   abapSymbolOperator  "\W-\W"
++syn match   abapSymbolOperator  "\W/\W"
++syn match   abapSymbolOperator  "\W%\W"
++syn match   abapSymbolOperator  "\W=\W"
++syn match   abapSymbolOperator  "\W<\W"
++syn match   abapSymbolOperator  "\W>\W"
++syn match   abapSymbolOperator  "\W\*\W"
++syn match   abapSymbolOperator  "\W[<>]=\W"
++syn match   abapSymbolOperator  "\W<>\W"
++syn match   abapSymbolOperator  "\W\*\*\W"
++syn match   abapSymbolOperator  "\[\]"
++syn match   abapSymbolOperator  "->\*\?"
++syn match   abapSymbolOperator  "=>"
++syn match   abapSymbolOperator  "[()~:,\.&$]"
+ 
+ " Literals
+-syn region  abapString matchgroup=abapString start="'" end="'" contains=abapStringEscape
+-syn match   abapStringEscape contained "''"
++syn region  abapCharString matchgroup=abapCharString start="'" end="'" contains=abapCharStringEscape
++syn match   abapCharStringEscape contained "''"
+ 
+-syn match   abapNumber  "-\=\<\d\+\>"
++syn region  abapString matchgroup=abapString start="`" end="`" contains=abapStringEscape
++syn match   abapStringEscape contained "``"
++
++syn match   abapNumber  "\-\=\<\d\+\>"
+ syn region  abapHex     matchgroup=abapHex start="X'" end="'"
+ 
+ if version >= 600
+-  setlocal iskeyword=-,48-57,_,A-Z,a-z
++  setlocal iskeyword=48-57,_,A-Z,a-z,/
+ else
+-  set iskeyword=-,48-57,_,A-Z,a-z
++  set iskeyword=48-57,_,A-Z,a-z,/
+ endif
+ 
++syn match   abapNamespace        "\</\w\+/"
++
++" multi-word statements
++syn match   abapComplexStatement "\<\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\>"
++syn match   abapComplexStatement "\<NO\W\+STANDARD\W\+PAGE\W\+HEADING\>"
++syn match   abapComplexStatement "\<\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\>"
++syn match   abapComplexStatement "\<\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\>"
++syn match   abapComplexStatement "\<\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\>"
++syn match   abapComplexStatement "\<NO\W\+INTERVALS\>"
++syn match   abapComplexStatement "\<RESPECTING\W\+BLANKS\>"
++syn match   abapComplexStatement "\<SEPARATED\W\+BY\>"
++syn match   abapComplexStatement "\<USING\(\W\+EDIT\W\+MASK\)\?\>"
++syn match   abapComplexStatement "\<WHERE\(\W\+LINE\)\?\>"
++syn match   abapComplexStatement "\<RADIOBUTTON\W\+GROUP\>"
++syn match   abapComplexStatement "\<REF\W\+TO\>"
++syn match   abapComplexStatement "\<\(PUBLIC\|PRIVATE\|PROTECTED\)\(\W\+SECTION\)\?\>"
++syn match   abapComplexStatement "\<DELETING\W\+\(TRAILING\|LEADING\)\>"
++syn match   abapComplexStatement "\<\(ALL\W\+OCCURRENCES\)\|\(\(FIRST\|LAST\)\W\+OCCURRENCE\)\>"
++syn match   abapComplexStatement "\<INHERITING\W\+FROM\>"
++syn match   abapComplexStatement "\<\(UP\W\+\)\?TO\>"
++
++" hyphenated-word statements
++syn match   abapComplexStatement "\<LINE-COUNT\>"
++syn match   abapComplexStatement "\<ADD-CORRESPONDING\>"
++syn match   abapComplexStatement "\<AUTHORITY-CHECK\>"
++syn match   abapComplexStatement "\<BREAK-POINT\>"
++syn match   abapComplexStatement "\<CLASS-DATA\>"
++syn match   abapComplexStatement "\<CLASS-METHODS\>"
++syn match   abapComplexStatement "\<CLASS-METHOD\>"
++syn match   abapComplexStatement "\<DIVIDE-CORRESPONDING\>"
++syn match   abapComplexStatement "\<EDITOR-CALL\>"
++syn match   abapComplexStatement "\<END-OF-DEFINITION\>"
++syn match   abapComplexStatement "\<END-OF-PAGE\>"
++syn match   abapComplexStatement "\<END-OF-SELECTION\>"
++syn match   abapComplexStatement "\<FIELD-GROUPS\>"
++syn match   abapComplexStatement "\<FIELD-SYMBOLS\>"
++syn match   abapComplexStatement "\<FUNCTION-POOL\>"
++syn match   abapComplexStatement "\<IS\W\+\(NOT\W\+\)\?\(ASSIGNED\|BOUND\|INITIAL\|SUPPLIED\)\>"
++syn match   abapComplexStatement "\<MOVE-CORRESPONDING\>"
++syn match   abapComplexStatement "\<MULTIPLY-CORRESPONDING\>"
++syn match   abapComplexStatement "\<NEW-LINE\>"
++syn match   abapComplexStatement "\<NEW-PAGE\>"
++syn match   abapComplexStatement "\<NEW-SECTION\>"
++syn match   abapComplexStatement "\<PRINT-CONTROL\>"
++syn match   abapComplexStatement "\<RP-PROVIDE-FROM-LAST\>"
++syn match   abapComplexStatement "\<SELECT-OPTIONS\>"
++syn match   abapComplexStatement "\<SELECTION-SCREEN\>"
++syn match   abapComplexStatement "\<START-OF-SELECTION\>"
++syn match   abapComplexStatement "\<SUBTRACT-CORRESPONDING\>"
++syn match   abapComplexStatement "\<SYNTAX-CHECK\>"
++syn match   abapComplexStatement "\<SYNTAX-TRACE\>"
++syn match   abapComplexStatement "\<TOP-OF-PAGE\>"
++syn match   abapComplexStatement "\<TYPE-POOL\>"
++syn match   abapComplexStatement "\<TYPE-POOLS\>"
++syn match   abapComplexStatement "\<LINE-SIZE\>"
++syn match   abapComplexStatement "\<LINE-COUNT\>"
++syn match   abapComplexStatement "\<MESSAGE-ID\>"
++syn match   abapComplexStatement "\<DISPLAY-MODE\>"
++syn match   abapComplexStatement "\<READ\(-ONLY\)\?\>"
++
+ " ABAP statements
+-syn keyword abapStatement ADD ADD-CORRESPONDING ASSIGN AT AUTHORITY-CHECK
+-syn keyword abapStatement BACK BREAK-POINT
+-syn keyword abapStatement CALL CASE CHECK CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
+-syn keyword abapStatement DATA DEFINE DELETE DESCRIBE DETAIL DIVIDE DIVIDE-CORRESPONDING DO
+-syn keyword abapStatement EDITOR-CALL ELSE ELSEIF END-OF-DEFINITION END-OF-PAGE END-OF-SELECTION ENDAT ENDCASE ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDLOOP ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDWHILE EXEC EXPORT EXPORTING EXTRACT
+-syn keyword abapStatement FETCH FIELD-GROUPS FIELD-SYMBOLS FIELDS FORM FORMAT FREE FUNCTION FUNCTION-POOL
++syn keyword abapStatement ADD ALIAS ALIASES ASSERT ASSIGN ASSIGNING AT
++syn keyword abapStatement BACK
++syn keyword abapStatement CALL CASE CATCH CHECK CLASS CLEAR CLOSE CNT COLLECT COMMIT COMMUNICATION COMPUTE CONCATENATE CONDENSE CONSTANTS CONTINUE CONTROLS CONVERT CREATE CURRENCY
++syn keyword abapStatement DATA DEFINE DEFINITION DEFERRED DELETE DESCRIBE DETAIL DIVIDE DO
++syn keyword abapStatement ELSE ELSEIF ENDAT ENDCASE ENDCLASS ENDDO ENDEXEC ENDFORM ENDFUNCTION ENDIF ENDIFEND ENDINTERFACE ENDLOOP ENDMETHOD ENDMODULE ENDON ENDPROVIDE ENDSELECT ENDTRY ENDWHILE EVENT EVENTS EXEC EXIT EXPORT EXPORTING EXTRACT
++syn keyword abapStatement FETCH FIELDS FORM FORMAT FREE FROM FUNCTION
+ syn keyword abapStatement GENERATE GET
+ syn keyword abapStatement HIDE
+-syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INPUT INSERT
+-syn keyword abapStatement LEAVE LIKE LOAD LOCAL LOOP
+-syn keyword abapStatement MESSAGE MODIFY MODULE MOVE MOVE-CORRESPONDING MULTIPLY MULTIPLY-CORRESPONDING
+-syn keyword abapStatement NEW-LINE NEW-PAGE NEW-SECTION
+-syn keyword abapStatement ON OVERLAY
+-syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PRINT-CONTROL PROGRAM PROVIDE PUT
+-syn keyword abapStatement RAISE RANGES READ RECEIVE REFRESH REJECT REPLACE REPORT RESERVE RESTORE ROLLBACK RP-PROVIDE-FROM-LAST
+-syn keyword abapStatement SCAN SCROLL SEARCH SELECT SELECT-OPTIONS SELECTION-SCREEN SET SHIFT SKIP SORT SPLIT START-OF-SELECTION STATICS STOP SUBMIT SUBTRACT SUBTRACT-CORRESPONDING SUM SUMMARY SUPPRESS SYNTAX-CHECK SYNTAX-TRACE
+-syn keyword abapStatement TABLES TOP-OF-PAGE TRANSFER TRANSLATE TYPE TYPE-POOL TYPE-POOLS TYPES
+-syn keyword abapStatement UNPACK UPDATE
++syn keyword abapStatement IF IMPORT IMPORTING INDEX INFOTYPES INITIALIZATION INTERFACE INTERFACES INPUT INSERT IMPLEMENTATION 
++syn keyword abapStatement LEAVE LIKE LINE LOAD LOCAL LOOP
++syn keyword abapStatement MESSAGE METHOD METHODS MODIFY MODULE MOVE MULTIPLY
++syn keyword abapStatement ON OVERLAY OPTIONAL OTHERS
++syn keyword abapStatement PACK PARAMETERS PERFORM POSITION PROGRAM PROVIDE PUT
++syn keyword abapStatement RAISE RANGES RECEIVE RECEIVING REDEFINITION REFERENCE REFRESH REJECT REPLACE REPORT RESERVE RESTORE RETURNING ROLLBACK
++syn keyword abapStatement SCAN SCROLL SEARCH SELECT SET SHIFT SKIP SORT SORTED SPLIT STANDARD STATICS STEP STOP SUBMIT SUBTRACT SUM SUMMARY SUPPRESS
++syn keyword abapStatement TABLES TIMES TRANSFER TRANSLATE TRY TYPE TYPES
++syn keyword abapStatement UNASSIGN ULINE UNPACK UPDATE
+ syn keyword abapStatement WHEN WHILE WINDOW WRITE
+ 
+ " More statemets
++syn keyword abapStatement LINES
++syn keyword abapStatement INTO GROUP BY HAVING ORDER BY SINGLE
++syn keyword abapStatement APPENDING CORRESPONDING FIELDS OF TABLE
++syn keyword abapStatement LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER ROWS CONNECTING
+ syn keyword abapStatement OCCURS STRUCTURE OBJECT PROPERTY
+ syn keyword abapStatement CASTING APPEND RAISING VALUE COLOR
+-syn keyword abapStatement LINE-SIZE LINE-COUNT MESSAGE-ID
+-syn keyword abapStatement CHANGING EXCEPTIONS DEFAULT CHECKBOX COMMENT
+-syn keyword abapStatement ID NUMBER FOR DISPLAY-MODE TITLE OUTPUT
+-
+-" More multi-word statements
+-syn match   abapStatement "\(\W\|^\)\(WITH\W\+\(HEADER\W\+LINE\|FRAME\|KEY\)\|WITH\)\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)NO\W\+STANDARD\W\+PAGE\W\+HEADING\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)\(EXIT\W\+FROM\W\+STEP\W\+LOOP\|EXIT\)\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)\(BEGIN\W\+OF\W\+\(BLOCK\|LINE\)\|BEGIN\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)\(END\W\+OF\W\+\(BLOCK\|LINE\)\|END\W\+OF\)\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)IS\W\+INITIAL\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)NO\W\+INTERVALS\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)SEPARATED\W\+BY\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)\(USING\W\+\(EDIT\W\+MASK\)\|USING\)\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)\(WHERE\W\+\(LINE\)\)\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)RADIOBUTTON\W\+GROUP\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapStatement "\(\W\|^\)REF\W\+TO\(\W\|$\)"ms=s+1,me=e-1
++syn keyword abapStatement CHANGING EXCEPTION EXCEPTIONS DEFAULT CHECKBOX COMMENT
++syn keyword abapStatement ID NUMBER FOR TITLE OUTPUT
+ 
+ " Special ABAP specific tables:
+-syn match   abapSpecial       "\(\W\|^\)\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)\(\W\|$\)"ms=s+1,me=e-1
+-syn match   abapSpecialTables "\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
+-syn match   abapSpecial       "\(\W\|^\)\w\+-\(\w\+-\w\+\|\w\+\)"ms=s+1 contains=abapSpecialTables
++syn match   abapSpecialTables "\<\(sy\|\(p\|pa\)\d\d\d\d\|t\d\d\d.\|innnn\)-"me=e-1 contained
++syn match   abapStructure     "\<\w\+-[^\>]"me=e-2 contains=abapSpecialTables,abapStatement,abapComplexStatement
++syn match   abapField         "-\w\+"ms=s+1
+ 
+ " Pointer
+ syn match   abapSpecial  "<\w\+>"
+ 
+-" Abap constants:
++" Abap common constants:
+ syn keyword abapSpecial  TRUE FALSE NULL SPACE
+ 
+ " Includes
+ syn region abapInclude   start="include" end="." contains=abapComment
+ 
+ " Types
+-syn keyword abapTypes    c n i p f d t x
++syn keyword abapTypes    c n i p f d t x string xstring decfloat16 decfloat34
+ 
+ " Atritmitic operators
+ syn keyword abapOperator abs sign ceil floor trunc frac acos asin atan cos sin tan
+ syn keyword abapOperator cosh sinh tanh exp log log10 sqrt
+ 
+ " String operators
+-syn keyword abapOperator strlen xstrlen charlen numofchar dbmaxlen
++syn keyword abapStatement strlen xstrlen charlen numofchar dbmaxlen
+ 
+-" Table operators
+-syn keyword abapOperator lines
+-
+-" Table operators (SELECT operators)
+-syn keyword abapOperator INTO FROM WHERE GROUP BY HAVING ORDER BY SINGLE
+-syn keyword abapOperator APPENDING CORRESPONDING FIELDS OF TABLE
+-syn keyword abapOperator LEFT RIGHT OUTER INNER JOIN AS CLIENT SPECIFIED BYPASSING BUFFER UP TO ROWS CONNECTING
+ syn keyword abapOperator EQ NE LT LE GT GE NOT AND OR XOR IN LIKE BETWEEN
+ 
+ " An error? Not strictly... but cannot think of reason this is intended.
+@@ -119,6 +172,7 @@
+ syn region  abapComment  start="^\*" end="$" contains=abapTodo
+ syn match   abapComment  "\".*" contains=abapTodo
+ syn keyword abapTodo     contained TODO NOTE
++syn match   abapTodo     "\#EC\W\+\w\+"
+ 
+ " Define the default highlighting.
+ " For version 5.7 and earlier: only when not done already
+@@ -134,13 +188,20 @@
+   HiLink abapError          Error
+   HiLink abapComment        Comment
+   HiLink abapInclude        Include
++  HiLink abapStatement      Statement
++  HiLink abapComplexStatement      Statement
+   HiLink abapSpecial        Special
+-  HiLink abapSpecialTables  PreProc
++  HiLink abapNamespace      Special
++  HiLink abapSpecialTables  Special
+   HiLink abapSymbolOperator abapOperator
+   HiLink abapOperator       Operator
+-  HiLink abapStatement      Statement
++  HiLink abapCharString     String
+   HiLink abapString         String
+   HiLink abapFloat          Float
++  HiLink abapTypes          Type
++  HiLink abapSymbol         Structure
++  HiLink abapStructure      Structure
++  HiLink abapField          Variable
+   HiLink abapNumber         Number
+   HiLink abapHex            Number
+ 
+diff -Naur vim73.orig/runtime/syntax/abel.vim vim73/runtime/syntax/abel.vim
+--- vim73.orig/runtime/syntax/abel.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/abel.vim	2013-06-07 17:07:21.148948288 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	ABEL
+-" Maintainer:	John Cook <john.cook@kla-tencor.com>
+-" Last Change:	2001 Sep 2
++" Maintainer:	John Cook <johncook3@gmail.com>
++" Last Change:	2011 Dec 27
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " this language is oblivious to case
+ syn case ignore
+ 
+@@ -164,4 +167,8 @@
+ endif
+ 
+ let b:current_syntax = "abel"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim:ts=8
+diff -Naur vim73.orig/runtime/syntax/ada.vim vim73/runtime/syntax/ada.vim
+--- vim73.orig/runtime/syntax/ada.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/ada.vim	2013-06-07 17:07:21.175614879 +0000
+@@ -32,6 +32,8 @@
+ if exists("b:current_syntax") || version < 700
+     finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ let b:current_syntax = "ada"
+ 
+@@ -352,6 +354,9 @@
+ " this speeds things up greatly.
+ syntax sync minlines=1 maxlines=1
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ finish " 1}}}
+ 
+ "------------------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/syntax/aptconf.vim vim73/runtime/syntax/aptconf.vim
+--- vim73.orig/runtime/syntax/aptconf.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/aptconf.vim	2013-06-07 17:07:21.305614507 +0000
+@@ -0,0 +1,512 @@
++" Vim syntax file
++" Language:	APT config file
++" Maintainer:	Yann Amar <quidame@poivron.org>
++" Last Change:	2013 Apr 12
++
++" For version 5.x: Clear all syntax items
++" For version 6.x and 7.x: Quit when a syntax file was already loaded
++if !exists("main_syntax")
++  if version < 600
++    syntax clear
++  elseif exists("b:current_syntax")
++    finish
++  endif
++  let main_syntax = 'aptconf'
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++" Errors:
++" Catch all that is not overridden by next rules/items:
++syn match	aptconfError		display '[^[:blank:]]'
++syn match	aptconfError		display '^[^[:blank:]][^:{]*'
++
++" Options:
++" Define a general regular expression for the options that are not defined
++" later as keywords. Following apt.conf(5), we know that options are case
++" insensitive, and can contain alphanumeric characters and '/-:._+'; we
++" assume that there can not be consecutive colons (::) which is used as
++" syntax operator; we also assume that an option name can not start or end
++" by a colon.
++syn case	ignore
++syn match	aptconfRegexpOpt	'[-[:alnum:]/.+_]\+\(:[-[:alnum:]/.+_]\+\)*' contained display
++
++" Keywords:
++setlocal iskeyword+=/,-,.,_,+
++"setlocal iskeyword+=: is problematic, because of the '::' separator
++
++" Incomplete keywords will be treated differently than completely bad strings:
++syn keyword	aptconfGroupIncomplete
++	\ a[cquire] a[ptitude] d[ebtags] d[ebug] d[ir] d[pkg] d[select]
++	\ o[rderlist] p[ackagemanager] p[kgcachegen] q[uiet] r[pm]
++	\ u[nattended-upgrade]
++
++" Only the following keywords can be used at toplevel (to begin an option):
++syn keyword	aptconfGroup
++	\ acquire apt aptitude debtags debug dir dpkg dselect
++	\ orderlist packagemanager pkgcachegen quiet rpm
++	\ unattended-upgrade
++
++" Possible options for each group:
++" Acquire: {{{
++syn keyword	aptconfAcquire contained
++	\ cdrom Check-Valid-Until CompressionTypes ForceHash ftp gpgv
++	\ GzipIndexes http https Languages Max-ValidTime Min-ValidTime PDiffs
++	\ Queue-Mode Retries Source-Symlinks
++
++syn keyword	aptconfAcquireCDROM contained
++	\ AutoDetect CdromOnly Mount UMount
++
++syn keyword	aptconfAcquireCompressionTypes contained
++	\ bz2 lzma gz Order
++
++syn keyword	aptconfAcquireFTP contained
++	\ Passive Proxy ProxyLogin Timeout
++
++syn keyword	aptconfAcquireHTTP contained
++	\ AllowRedirect Dl-Limit Max-Age No-Cache No-Store Pipeline-Depth
++	\ Proxy Timeout User-Agent
++
++syn keyword	aptconfAcquireHTTPS contained
++	\ CaInfo CaPath CrlFile IssuerCert SslCert SslForceVersion SslKey
++	\ Verify-Host Verify-Peer
++
++syn keyword	aptconfAcquireMaxValidTime contained
++	\ Debian Debian-Security
++
++syn keyword	aptconfAcquirePDiffs contained
++	\ FileLimit SizeLimit
++
++syn cluster	aptconfAcquire_ contains=aptconfAcquire,
++	\ aptconfAcquireCDROM,aptconfAcquireCompressionTypes,aptconfAcquireFTP,
++	\ aptconfAcquireHTTP,aptconfAcquireHTTPS,aptconfAcquireMaxValidTime,
++	\ aptconfAcquirePDiffs
++" }}}
++" Apt: {{{
++syn keyword	aptconfApt contained
++	\ Architecture Architectures Archive Authentication AutoRemove
++	\ Build-Essential Cache Cache-Grow Cache-Limit Cache-Start CDROM
++	\ Changelogs Clean-Installed Compressor Default-Release
++	\ Force-LoopBreak Get Ignore-Hold Immediate-Configure
++	\ Install-Recommends Install-Suggests Keep-Fds List-Cleanup
++	\ NeverAutoRemove Never-MarkAuto-Sections Periodic Status-Fd Update
++
++syn keyword	aptconfAptAuthentication contained
++	\ TrustCDROM
++
++syn keyword	aptconfAptAutoRemove contained
++	\ RecommendsImportant SuggestsImportant
++
++syn keyword	aptconfAptCache contained
++	\ AllNames AllVersions Generate GivenOnly Important Installed NamesOnly
++	\ RecurseDepends ShowFull
++
++syn keyword	aptconfAptCDROM contained
++	\ Fast NoAct NoMount Rename
++
++syn keyword	aptconfAptChangelogs contained
++	\ Server
++
++syn keyword	aptconfAptCompressor contained
++	\ bzip2 gzip lzma xz
++
++syn keyword	aptconfAptCompressorAll contained
++	\ Binary CompressArg Cost Extension Name UncompressArg
++
++syn keyword	aptconfAptGet contained
++	\ AllowUnauthenticated Arch-Only Assume-No Assume-Yes AutomaticRemove
++	\ Build-Dep-Automatic Compile Diff-Only Download Download-Only Dsc-Only
++	\ Fix-Broken Fix-Missing Force-Yes HideAutoRemove Host-Architecture
++	\ List-Cleanup Only-Source Print-URIs Purge ReInstall Remove
++	\ Show-Upgraded Show-User-Simulation-Note Show-Versions Simulate
++	\ Tar-Only Trivial-Only Upgrade
++
++syn keyword	aptconfAptPeriodic contained
++	\ AutocleanInterval BackupArchiveInterval BackupLevel
++	\ Download-Upgradeable-Packages MaxAge MaxSize MinAge
++	\ Unattended-Upgrade Update-Package-Lists Verbose
++
++syn keyword	aptconfAptUpdate contained
++	\ Pre-Invoke Post-Invoke Post-Invoke-Success
++
++syn cluster	aptconfApt_ contains=aptconfApt,
++	\ aptconfAptAuthentication,aptconfAptAutoRemove,aptconfAptCache,
++	\ aptconfAptCDROM,aptconfAptChangelogs,aptconfAptCompressor,
++	\ aptconfAptCompressorAll,aptconfAptGet,aptconfAptPeriodic,
++	\ aptconfAptUpdate
++" }}}
++" Aptitude: {{{
++syn keyword	aptconfAptitude contained
++	\ Allow-Null-Upgrade Always-Use-Safe-Resolver Autoclean-After-Update
++	\ Auto-Install Auto-Fix-Broken Cmdline Debtags-Binary
++	\ Debtags-Update-Options Delete-Unused Delete-Unused-Pattern
++	\ Display-Planned-Action Forget-New-On-Install Forget-New-On-Update
++	\ Get-Root-Command Ignore-Old-Tmp Ignore-Recommends-Important
++	\ Keep-Recommends Keep-Suggests Keep-Unused-Pattern LockFile Log
++	\ Logging Parse-Description-Bullets Pkg-Display-Limit ProblemResolver
++	\ Purge-Unused Recommends-Important Safe-Resolver Screenshot Sections
++	\ Simulate Spin-Interval Suggests-Important Suppress-Read-Only-Warning
++	\ Theme Track-Dselect-State UI Warn-Not-Root
++
++syn keyword	aptconfAptitudeCmdline contained
++	\ Always-Prompt Assume-Yes Disable-Columns Download-Only Fix-Broken
++	\ Ignore-Trust-Violations Package-Display-Format Package-Display-Width
++	\ Progress Request-Strictness Resolver-Debug Resolver-Dump
++	\ Resolver-Show-Steps Safe-Upgrade Show-Deps Show-Size-Changes
++	\ Show-Versions Show-Why Simulate Verbose Version-Display-Format
++	\ Versions-Group-By Versions-Show-Package-Names Visual-Preview
++	\ Why-Display-Mode
++
++syn keyword	aptconfAptitudeCmdlineProgress contained
++	\ Percent-On-Right Retain-Completed
++
++syn keyword	aptconfAptitudeCmdlineSafeUpgrade contained
++	\ No-New-Installs
++
++syn keyword	aptconfAptitudeLogging contained
++	\ File Levels
++
++syn keyword	aptconfAptitudeProblemResolver contained
++	\ Allow-Break-Holds BreakHoldScore Break-Hold-Level BrokenScore
++	\ DefaultResolutionScore Discard-Null-Solution
++	\ EssentialRemoveScore ExtraScore FullReplacementScore FutureHorizon
++	\ Hints ImportantScore Infinity InstallScore Keep-All-Level KeepScore
++	\ NonDefaultScore Non-Default-Level OptionalScore PreserveAutoScore
++	\ PreserveManualScore RemoveScore Remove-Essential-Level Remove-Level
++	\ RequiredScore ResolutionScore Safe-Level SolutionCost StandardScore
++	\ StepLimit StepScore Trace-Directory Trace-File
++	\ UndoFullReplacementScore UnfixedSoftScore UpgradeScore
++
++syn keyword	aptconfAptitudeSafeResolver contained
++	\ No-New-Installs No-New-Upgrades Show-Resolver-Actions
++
++syn keyword	aptconfAptitudeScreenshot contained
++	\ Cache-Max IncrementalLoadLimit
++
++syn keyword	aptconfAptitudeSections contained
++	\ Descriptions Top-Sections
++
++syn keyword	aptconfAptitudeUI contained
++	\ Advance-On-Action Auto-Show-Reasons Default-Grouping
++	\ Default-Package-View Default-Preview-Grouping Default-Sorting
++	\ Description-Visible-By-Default Exit-On-Last-Close Fill-Text
++	\ Flat-View-As-First-View HelpBar Incremental-Search InfoAreaTabs
++	\ KeyBindings MenuBar-Autohide Minibuf-Download-Bar Minibuf-Prompts
++	\ New-package-Commands Package-Display-Format Package-Header-Format
++	\ Package-Status-Format Pause-After-Download Preview-Limit
++	\ Prompt-On-Exit Styles ViewTabs
++
++syn keyword	aptconfAptitudeUIKeyBindings contained
++	\ ApplySolution Begin BugReport Cancel Changelog ChangePkgTreeGrouping
++	\ ChangePkgTreeLimit ChangePkgTreeSorting ClearAuto CollapseAll
++	\ CollapseTree Commit Confirm Cycle CycleNext CycleOrder CyclePrev
++	\ DelBOL DelBack DelEOL DelForward Dependencies DescriptionCycle
++	\ DescriptionDown DescriptionUp DoInstallRun Down DpkgReconfigure
++	\ DumpResolver EditHier End ExamineSolution ExpandAll ExpandTree
++	\ FirstSolution ForbidUpgrade ForgetNewPackages Help HistoryNext
++	\ HistoryPrev Hold Install InstallSingle Keep LastSolution Left
++	\ LevelDown LevelUp MarkUpgradable MineFlagSquare MineLoadGame
++	\ MineSaveGame MineSweepSquare MineUncoverSquare MineUncoverSweepSquare
++	\ NextPage NextSolution No Parent PrevPage PrevSolution Purge
++	\ PushButton Quit QuitProgram RejectBreakHolds Refresh Remove
++	\ ReInstall RepeatSearchBack ReSearch ReverseDependencies Right
++	\ SaveHier Search SearchBack SearchBroken SetAuto ShowHideDescription
++	\ SolutionActionApprove SolutionActionReject ToggleExpanded
++	\ ToggleMenuActive Undo Up UpdatePackageList Versions Yes
++
++syn keyword	aptconfAptitudeUIStyles contained
++	\ Bullet ChangeLogNewerVersion Default DepBroken DisabledMenuEntry
++	\ DownloadHit DownloadProgress EditLine Error Header HighlightedMenuBar
++	\ HighlightedMenuEntry MediaChange MenuBar MenuBorder MenuEntry
++	\ MineBomb MineBorder MineFlag MineNumber1 MineNumber2 MineNumber3
++	\ MineNumber4 MineNumber5 MineNumber6 MineNumber7 MineNumber8
++	\ MultiplexTab MultiplexTabHighlighted PkgBroken PkgBrokenHighlighted
++	\ PkgIsInstalled PkgIsInstalledHighlighted PkgNotInstalled
++	\ PkgNotInstalledHighlighted PkgToDowngrade PkgToDowngradeHighlighted
++	\ PkgToHold PkgToHoldHighlighted PkgToInstall PkgToInstallHighlighted
++	\ PkgToRemove PkgToRemoveHighlighted PkgToUpgrade
++	\ PkgToUpgradeHighlighted Progress SolutionActionApproved
++	\ SolutionActionRejected Status TreeBackground TrustWarning
++
++syn keyword	aptconfAptitudeUIStylesElements contained
++	\ bg clear fg flip set
++
++syn cluster	aptconfAptitude_ contains=aptconfAptitude,
++	\ aptconfAptitudeCmdline,aptconfAptitudeCmdlineProgress,
++	\ aptconfAptitudeCmdlineSafeUpgrade,aptconfAptitudeLogging,
++	\ aptconfAptitudeProblemResolver,aptconfAptitudeSafeResolver,
++	\ aptconfAptitudeScreenshot,aptconfAptitudeSections,aptconfAptitudeUI,
++	\ aptconfAptitudeUIKeyBindings,aptconfAptitudeUIStyles,
++	\ aptconfAptitudeUIStylesElements
++" }}}
++" DebTags: {{{
++syn keyword	aptconfDebTags contained
++	\ Vocabulary
++
++syn cluster	aptconfDebTags_ contains=aptconfDebTags
++" }}}
++" Debug: {{{
++syn keyword	aptconfDebug contained
++	\ Acquire aptcdrom BuildDeps Hashes IdentCdrom Nolocking
++	\ pkgAcquire pkgAutoRemove pkgCacheGen pkgDepCache pkgDPkgPM
++	\ pkgDPkgProgressReporting pkgInitialize pkgOrderList
++	\ pkgPackageManager pkgPolicy pkgProblemResolver sourceList
++
++syn keyword	aptconfDebugAcquire contained
++	\ cdrom Ftp gpgv Http Https netrc
++
++syn keyword	aptconfDebugPkgAcquire contained
++	\ Auth Diffs RRed Worker
++
++syn keyword	aptconfDebugPkgDepCache contained
++	\ AutoInstall Marker
++
++syn keyword	aptconfDebugPkgProblemResolver contained
++	\ ShowScores
++
++syn cluster	aptconfDebug_ contains=aptconfDebug,
++	\ aptconfDebugAcquire,aptconfDebugPkgAcquire,aptconfDebugPkgDepCache,
++	\ aptconfDebugPkgProblemResolver
++" }}}
++" Dir: {{{
++syn keyword	aptconfDir contained
++	\ Aptitude Bin Cache Etc Ignore-Files-Silently Log Media Parts RootDir
++	\ State
++
++syn keyword	aptconfDirAptitude contained
++	\ state
++
++syn keyword	aptconfDirBin contained
++	\ apt-get apt-cache dpkg dpkg-buildpackage dpkg-source gpg gzip Methods
++	\ solvers
++
++syn keyword	aptconfDirCache contained
++	\ Archives Backup pkgcache srcpkgcache
++
++syn keyword	aptconfDirEtc contained
++	\ Main Netrc Parts Preferences PreferencesParts SourceList SourceParts
++	\ VendorList VendorParts Trusted TrustedParts
++
++syn keyword	aptconfDirLog contained
++	\ History Terminal
++
++syn keyword	aptconfDirMedia contained
++	\ MountPath
++
++syn keyword	aptconfDirState contained
++	\ cdroms extended_states Lists mirrors status
++
++syn cluster	aptconfDir_ contains=aptconfDir,
++	\ aptconfDirAptitude,aptconfDirBin,aptconfDirCache,aptconfDirEtc,
++	\ aptconfDirLog,aptconfDirMedia,aptconfDirState
++" }}}
++" DPkg: {{{
++syn keyword	aptconfDPkg contained
++	\ Build-Options Chroot-Directory ConfigurePending FlushSTDIN MaxArgs
++	\ MaxBytes NoTriggers options Pre-Install-Pkgs Pre-Invoke Post-Invoke
++	\ Run-Directory StopOnError Tools TriggersPending
++
++syn keyword	aptconfDPkgTools contained
++	\ Options Version
++
++syn cluster	aptconfDPkg_ contains=aptconfDPkg,
++	\ aptconfDPkgOrderList,aptconfDPkgOrderListScore,aptconfDPkgTools
++" }}}
++" DSelect: {{{
++syn keyword	aptconfDSelect contained
++	\ CheckDir Clean Options PromptAfterUpdate UpdateOptions
++
++syn cluster	aptconfDSelect_ contains=aptconfDSelect
++" }}}
++" OrderList: {{{
++syn keyword	aptconfOrderList contained
++	\ Score
++
++syn keyword	aptconfOrderListScore contained
++	\ Delete Essential Immediate PreDepends
++
++syn cluster	aptconfOrderList_ contains=aptconfOrderList,
++	\ aptconfOrderListScore
++" }}}
++" PackageManager: {{{
++syn keyword	aptconfPackageManager contained
++	\ Configure
++
++syn cluster	aptconfPackageManager_ contains=aptconfPackageManager
++" }}}
++" PkgCacheGen: {{{
++syn keyword	aptconfPkgCacheGen contained
++	\ Essential
++
++syn cluster	aptconfPkgCacheGen_ contains=aptconfPkgCacheGen
++" }}}
++" Quiet: {{{
++syn keyword	aptconfQuiet contained
++	\ NoUpdate
++
++syn cluster	aptconfQuiet_ contains=aptconfQuiet
++" }}}
++" Rpm: {{{
++syn keyword	aptconfRpm contained
++	\ Post-Invoke Pre-Invoke
++
++syn cluster	aptconfRpm_ contains=aptconfRpm
++" }}}
++" Unattened Upgrade: {{{
++syn keyword	aptconfUnattendedUpgrade contained
++	\ AutoFixInterruptedDpkg Automatic-Reboot InstallOnShutdown Mail
++	\ MailOnlyOnError MinimalSteps Origins-Pattern Package-Blacklist
++	\ Remove-Unused-Dependencies
++
++syn cluster	aptconfUnattendedUpgrade_ contains=aptconfUnattendedUpgrade
++" }}}
++
++syn case	match
++
++" Now put all the keywords (and 'valid' options) in a single cluster:
++syn cluster	aptconfOptions contains=aptconfRegexpOpt,
++	\ @aptconfAcquire_,@aptconfApt_,@aptconfAptitude_,@aptconfDebTags_,
++	\ @aptconfDebug_,@aptconfDir_,@aptconfDPkg_,@aptconfDSelect_,
++	\ @aptconfOrderList_,@aptconfPackageManager_,@aptconfPkgCacheGen_,
++	\ @aptconfQuiet_,@aptconfRpm_,@aptconfUnattendedUpgrade_
++
++" Syntax:
++syn match	aptconfSemiColon	';'
++syn match	aptconfDoubleColon	'::'
++syn match	aptconfCurlyBraces	'[{}]'
++syn region	aptconfValue		start='"' end='"' oneline display
++syn region	aptconfInclude		matchgroup=aptconfOperator start='{' end='}' contains=ALLBUT,aptconfGroup,aptconfGroupIncomplete,@aptconfCommentSpecial
++syn region	aptconfInclude		matchgroup=aptconfOperator start='::' end='{'me=s-1 contains=@aptconfOptions,aptconfError display
++syn region	aptconfInclude		matchgroup=aptconfOperator start='::' end='::\|\s'me=s-1 oneline contains=@aptconfOptions,aptconfError display
++
++" Basic Syntax Errors: XXX avoid to generate false positives !!!
++"
++" * Invalid comment format (seems to not cause errors, but...):
++syn match	aptconfAsError		display '^#.*'
++"
++" * When a semicolon is missing after a double-quoted string:
++" There are some cases (for example in the Dir group of options, but not only)
++" where this syntax is valid. So we don't treat it as a strict error.
++syn match	aptconfAsError		display '"[^"]*"[^;]'me=e-1
++syn match	aptconfAsError		display '"[^"]*"$'
++"
++" * When double quotes are missing around a value (before a semicolon):
++" This omission has no effect if the value is a single string (without blank
++" characters). But apt.conf(5) says that quotes are required, and this item
++" avoids to match unquoted keywords.
++syn match	aptconfAsError		display '\s[^"[:blank:]]*[^}"];'me=e-1
++"
++" * When only one double quote is missing around a value (before a semicolon):
++" No comment for that: it must be highly visible.
++syn match	aptconfError		display '\(\s\|;\)"[^"[:blank:]]\+;'me=e-1
++syn match	aptconfError		display '\(\s\|;\)[^"[:blank:]]\+";'me=e-1
++"
++" * When space is missing between option and (quoted) value:
++" TODO (partially implemented)
++syn match	aptconfError		display '::[^[:blank:]]*"'
++
++" Special Actions:
++syn match	aptconfAction		'^#\(clear\|include\)\>'
++syn region	aptconfAction		matchgroup=aptconfAction start='^#clear\>' end=';'me=s-1 oneline contains=aptconfGroup,aptconfDoubleColon,@aptconfOptions
++syn region	aptconfAction		matchgroup=aptconfAction start='^#include\>' end=';'me=s-1 oneline contains=aptconfRegexpOpt
++
++" Comments:
++syn keyword	aptconfTodo		TODO FIXME NOTE XXX contained
++syn cluster	aptconfCommentSpecial	contains=@Spell,aptconfTodo
++syn match	aptconfComment		'//.*' contains=@aptconfCommentSpecial
++syn region	aptconfComment		start='/\*' end='\*/' contains=@aptconfCommentSpecial
++
++" Highlight Definitions:
++hi def link aptconfTodo				Todo
++hi def link aptconfError			Error
++hi def link aptconfComment			Comment
++hi def link aptconfOperator			Operator
++
++hi def link aptconfAction			PreProc
++hi def link aptconfOption			Type
++hi def link aptconfValue			String
++hi def link aptconfRegexpOpt			Normal
++hi def link aptconfAsError			Special
++
++hi def link aptconfSemiColon			aptconfOperator
++hi def link aptconfDoubleColon			aptconfOperator
++hi def link aptconfCurlyBraces			aptconfOperator
++
++hi def link aptconfGroupIncomplete		Special
++hi def link aptconfGroup			aptconfOption
++
++hi def link aptconfAcquire			aptconfOption
++hi def link aptconfAcquireCDROM			aptconfOption
++hi def link aptconfAcquireCompressionTypes	aptconfOption
++hi def link aptconfAcquireFTP			aptconfOption
++hi def link aptconfAcquireHTTP			aptconfOption
++hi def link aptconfAcquireHTTPS			aptconfOption
++hi def link aptconfAcquireMaxValidTime		aptconfOption
++hi def link aptconfAcquirePDiffs		aptconfOption
++
++hi def link aptconfApt				aptconfOption
++hi def link aptconfAptAuthentication		aptconfOption
++hi def link aptconfAptAutoRemove		aptconfOption
++hi def link aptconfAptCache			aptconfOption
++hi def link aptconfAptCDROM			aptconfOption
++hi def link aptconfAptChangelogs		aptconfOption
++hi def link aptconfAptCompressor		aptconfOption
++hi def link aptconfAptCompressorAll		aptconfOption
++hi def link aptconfAptGet			aptconfOption
++hi def link aptconfAptPeriodic			aptconfOption
++hi def link aptconfAptUpdate			aptconfOption
++
++hi def link aptconfAptitude			aptconfOption
++hi def link aptconfAptitudeCmdline		aptconfOption
++hi def link aptconfAptitudeCmdlineProgress	aptconfOption
++hi def link aptconfAptitudeCmdlineSafeUpgrade	aptconfOption
++hi def link aptconfAptitudeLogging		aptconfOption
++hi def link aptconfAptitudeProblemResolver	aptconfOption
++hi def link aptconfAptitudeSafeResolver		aptconfOption
++hi def link aptconfAptitudeScreenshot		aptconfOption
++hi def link aptconfAptitudeSections		aptconfOption
++hi def link aptconfAptitudeUI			aptconfOption
++hi def link aptconfAptitudeUIKeyBindings	aptconfOption
++hi def link aptconfAptitudeUIStyles		aptconfOption
++hi def link aptconfAptitudeUIStylesElements	aptconfOption
++
++hi def link aptconfDebTags			aptconfOption
++
++hi def link aptconfDebug			aptconfOption
++hi def link aptconfDebugAcquire			aptconfOption
++hi def link aptconfDebugPkgAcquire		aptconfOption
++hi def link aptconfDebugPkgDepCache		aptconfOption
++hi def link aptconfDebugPkgProblemResolver	aptconfOption
++
++hi def link aptconfDir				aptconfOption
++hi def link aptconfDirAptitude			aptconfOption
++hi def link aptconfDirBin			aptconfOption
++hi def link aptconfDirCache			aptconfOption
++hi def link aptconfDirEtc			aptconfOption
++hi def link aptconfDirLog			aptconfOption
++hi def link aptconfDirMedia			aptconfOption
++hi def link aptconfDirState			aptconfOption
++
++hi def link aptconfDPkg				aptconfOption
++hi def link aptconfDPkgTools			aptconfOption
++
++hi def link aptconfDSelect			aptconfOption
++
++hi def link aptconfOrderList			aptconfOption
++hi def link aptconfOrderListScore		aptconfOption
++
++hi def link aptconfPackageManager		aptconfOption
++
++hi def link aptconfPkgCacheGen			aptconfOption
++
++hi def link aptconfQuiet			aptconfOption
++
++hi def link aptconfRpm				aptconfOption
++
++hi def link aptconfUnattendedUpgrade		aptconfOption
++
++let b:current_syntax = "aptconf"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/art.vim vim73/runtime/syntax/art.vim
+--- vim73.orig/runtime/syntax/art.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/art.vim	2013-06-07 17:07:21.332281098 +0000
+@@ -2,12 +2,15 @@
+ " Language:      ART-IM and ART*Enterprise
+ " Maintainer:    Dorai Sitaram <ds26@gte.com>
+ " URL:		 http://www.ccs.neu.edu/~dorai/vimplugins/vimplugins.html
+-" Last Change:   Nov 6, 2002
++" Last Change:   2011 Dec 28 by Thilo Six
+ 
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ 
+ syn keyword artspform => and assert bind
+@@ -42,3 +45,6 @@
+ hi def link artvariable function
+ 
+ let b:current_syntax = "art"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/asciidoc.vim vim73/runtime/syntax/asciidoc.vim
+--- vim73.orig/runtime/syntax/asciidoc.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/asciidoc.vim	2013-06-07 17:07:21.342281069 +0000
+@@ -0,0 +1,183 @@
++" Vim syntax file
++" Language:     AsciiDoc
++" Author:       Stuart Rackham <srackham@gmail.com> (inspired by Felix
++"               Obenhuber's original asciidoc.vim script).
++" URL:          http://asciidoc.org/
++" Licence:      GPL (http://www.gnu.org)
++" Remarks:      Vim 6 or greater
++" Limitations:
++" 
++" - Nested quoted text formatting is highlighted according to the outer
++"   format.
++" - If a closing Example Block delimiter may be mistaken for a title
++"   underline. A workaround is to insert a blank line before the closing
++"   delimiter.
++" - Lines within a paragraph starting with equals characters are
++"   highlighted as single-line titles.
++" - Lines within a paragraph beginning with a period are highlighted as
++"   block titles.
++
++
++if exists("b:current_syntax")
++  finish
++endif
++
++syn clear
++syn sync fromstart
++syn sync linebreaks=100
++
++" Run :help syn-priority to review syntax matching priority.
++syn keyword asciidocToDo TODO FIXME CHECK TEST XXX ZZZ DEPRECATED
++syn match asciidocBackslash /\\/
++syn region asciidocIdMarker start=/^\$Id:\s/ end=/\s\$$/
++syn match asciidocCallout /\\\@<!<\d\{1,2}>/
++syn match asciidocOpenBlockDelimiter /^--$/
++syn match asciidocLineBreak /[ \t]+$/ containedin=asciidocList
++syn match asciidocRuler /^'\{3,}$/
++syn match asciidocPagebreak /^<\{3,}$/
++syn match asciidocEntityRef /\\\@<!&[#a-zA-Z]\S\{-};/
++syn region asciidocLiteralParagraph start=/\(\%^\|\_^\s*\n\)\@<=\s\+\S\+/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocToDo
++syn match asciidocURL /\\\@<!\<\(http\|https\|ftp\|file\|irc\):\/\/[^| \t]*\(\w\|\/\)/
++syn match asciidocEmail /[\\.:]\@<!\(\<\|<\)\w\(\w\|[.-]\)*@\(\w\|[.-]\)*\w>\?[0-9A-Za-z_]\@!/
++syn match asciidocAttributeRef /\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}/
++
++" As a damage control measure quoted patterns always terminate at a blank
++" line (see 'Limitations' above).
++syn match asciidocQuotedAttributeList /\\\@<!\[[a-zA-Z0-9_-][a-zA-Z0-9 _-]*\][+_'`#*]\@=/
++syn match asciidocQuotedSubscript /\\\@<!\~\S\_.\{-}\(\~\|\n\s*\n\)/ contains=asciidocEntityRef
++syn match asciidocQuotedSuperscript /\\\@<!\^\S\_.\{-}\(\^\|\n\s*\n\)/ contains=asciidocEntityRef
++
++syn match asciidocQuotedMonospaced /\(^\|[| \t([.,=\]]\)\@<=+\([+ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(+\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
++syn match asciidocQuotedMonospaced2 /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(`\([| \t)[\],.?!;:=]\|$\)\@=\)/
++syn match asciidocQuotedUnconstrainedMonospaced /[\\+]\@<!++\S\_.\{-}\(++\|\n\s*\n\)/ contains=asciidocEntityRef
++
++syn match asciidocQuotedEmphasized /\(^\|[| \t([.,=\]]\)\@<=_\([_ \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(_\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
++syn match asciidocQuotedEmphasized2 /\(^\|[| \t([.,=\]]\)\@<='\([' \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
++syn match asciidocQuotedUnconstrainedEmphasized /\\\@<!__\S\_.\{-}\(__\|\n\s*\n\)/ contains=asciidocEntityRef
++
++syn match asciidocQuotedBold /\(^\|[| \t([.,=\]]\)\@<=\*\([* \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(\*\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
++syn match asciidocQuotedUnconstrainedBold /\\\@<!\*\*\S\_.\{-}\(\*\*\|\n\s*\n\)/ contains=asciidocEntityRef
++
++" Don't allow ` in single quoted (a kludge to stop confusion with `monospaced`).
++syn match asciidocQuotedSingleQuoted /\(^\|[| \t([.,=\]]\)\@<=`\([` \n\t]\)\@!\([^`]\|\n\(\s*\n\)\@!\)\{-}[^` \t]\('\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
++
++syn match asciidocQuotedDoubleQuoted /\(^\|[| \t([.,=\]]\)\@<=``\([` \n\t]\)\@!\(.\|\n\(\s*\n\)\@!\)\{-}\S\(''\([| \t)[\],.?!;:=]\|$\)\@=\)/ contains=asciidocEntityRef
++
++syn match asciidocDoubleDollarPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=\$\$..\{-}\(\$\$\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
++syn match asciidocTriplePlusPassthrough /\\\@<!\(^\|[^0-9a-zA-Z$]\)\@<=+++..\{-}\(+++\([^0-9a-zA-Z$]\|$\)\@=\|^$\)/
++
++syn match asciidocAdmonition /^\u\{3,15}:\(\s\+.*\)\@=/
++
++syn region asciidocTable_OLD start=/^\([`.']\d*[-~_]*\)\+[-~_]\+\d*$/ end=/^$/
++syn match asciidocBlockTitle /^\.[^. \t].*[^-~_]$/ contains=asciidocQuoted.*,asciidocAttributeRef
++syn match asciidocTitleUnderline /[-=~^+]\{2,}$/ transparent contained contains=NONE
++syn match asciidocOneLineTitle /^=\{1,5}\s\+\S.*$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash
++syn match asciidocTwoLineTitle /^[^. +/].*[^.]\n[-=~^+]\{3,}$/ contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocTitleUnderline
++
++syn match asciidocAttributeList /^\[[^[ \t].*\]$/
++syn match asciidocQuoteBlockDelimiter /^_\{4,}$/
++syn match asciidocExampleBlockDelimiter /^=\{4,}$/
++syn match asciidocSidebarDelimiter /^*\{4,}$/
++
++" See http://vimdoc.sourceforge.net/htmldoc/usr_44.html for excluding region
++" contents from highlighting.
++syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?|/ containedin=asciidocTableBlock contained
++syn region asciidocTableBlock matchgroup=asciidocTableDelimiter start=/^|=\{3,}$/ end=/^|=\{3,}$/ keepend contains=ALL
++syn match asciidocTablePrefix /\(\S\@<!\(\([0-9.]\+\)\([*+]\)\)\?\([<\^>.]\{,3}\)\?\([a-z]\)\?\)\?!/ containedin=asciidocTableBlock contained
++syn region asciidocTableBlock2 matchgroup=asciidocTableDelimiter2 start=/^!=\{3,}$/ end=/^!=\{3,}$/ keepend contains=ALL
++
++syn match asciidocListContinuation /^+$/
++syn region asciidocLiteralBlock start=/^\.\{4,}$/ end=/^\.\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
++syn region asciidocListingBlock start=/^-\{4,}$/ end=/^-\{4,}$/ contains=asciidocCallout,asciidocToDo keepend
++syn region asciidocCommentBlock start="^/\{4,}$" end="^/\{4,}$" contains=asciidocToDo
++syn region asciidocPassthroughBlock start="^+\{4,}$" end="^+\{4,}$"
++
++" Allowing leading \w characters in the filter delimiter is to accomodate
++" the pre version 8.2.7 syntax and may be removed in future releases.
++syn region asciidocFilterBlock start=/^\w*\~\{4,}$/ end=/^\w*\~\{4,}$/
++
++syn region asciidocMacroAttributes matchgroup=asciidocRefMacro start=/\\\@<!<<"\{-}\(\w\|-\|_\|:\|\.\)\+"\?,\?/ end=/\(>>\)\|^$/ contains=asciidocQuoted.* keepend
++syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{2}\(\w\|-\|_\|:\|\.\)\+,\?/ end=/\]\{2}/ keepend
++syn region asciidocMacroAttributes matchgroup=asciidocAnchorMacro start=/\\\@<!\[\{3}\(\w\|-\|_\|:\|\.\)\+/ end=/\]\{3}/ keepend
++syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/[\\0-9a-zA-Z]\@<!\w\(\w\|-\)*:\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef,asciidocEntityRef keepend
++" Highlight macro that starts with an attribute reference (a common idiom).
++syn region asciidocMacroAttributes matchgroup=asciidocMacro start=/\(\\\@<!{\w\(\w\|[-,+]\)*\([=!@#$%?:].*\)\?}\)\@<=\S\{-}\[/ skip=/\\\]/ end=/\]\|^$/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
++syn region asciidocMacroAttributes matchgroup=asciidocIndexTerm start=/\\\@<!(\{2,3}/ end=/)\{2,3}/ contains=asciidocQuoted.*,asciidocAttributeRef keepend
++
++syn match asciidocCommentLine "^//\([^/].*\|\)$" contains=asciidocToDo
++
++syn region asciidocAttributeEntry start=/^:\w/ end=/:\(\s\|$\)/ oneline
++
++" Lists.
++syn match asciidocListBullet /^\s*\zs\(-\|\*\{1,5}\)\ze\s/
++syn match asciidocListNumber /^\s*\zs\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\ze\s\+/
++syn region asciidocListLabel start=/^\s*/ end=/\(:\{2,4}\|;;\)$/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocToDo keepend
++" DEPRECATED: Horizontal label.
++syn region asciidocHLabel start=/^\s*/ end=/\(::\|;;\)\(\s\+\|\\$\)/ oneline contains=asciidocQuoted.*,asciidocMacroAttributes keepend
++" Starts with any of the above.
++syn region asciidocList start=/^\s*\(-\|\*\{1,5}\)\s/ start=/^\s*\(\(\d\+\.\)\|\.\{1,5}\|\(\a\.\)\|\([ivxIVX]\+)\)\)\s\+/ start=/.\+\(:\{2,4}\|;;\)$/ end=/\(^[=*]\{4,}$\)\@=/ end=/\(^\(+\|--\)\?\s*$\)\@=/ contains=asciidocList.\+,asciidocQuoted.*,asciidocMacroAttributes,asciidocAttributeRef,asciidocEntityRef,asciidocEmail,asciidocURL,asciidocBackslash,asciidocCommentLine,asciidocAttributeList,asciidocToDo
++
++hi def link asciidocAdmonition Special
++hi def link asciidocAnchorMacro Macro
++hi def link asciidocAttributeEntry Special
++hi def link asciidocAttributeList Special
++hi def link asciidocAttributeMacro Macro
++hi def link asciidocAttributeRef Special
++hi def link asciidocBackslash Special
++hi def link asciidocBlockTitle Title
++hi def link asciidocCallout Label
++hi def link asciidocCommentBlock Comment
++hi def link asciidocCommentLine Comment
++hi def link asciidocDoubleDollarPassthrough Special
++hi def link asciidocEmail Macro
++hi def link asciidocEntityRef Special
++hi def link asciidocExampleBlockDelimiter Type
++hi def link asciidocFilterBlock Type
++hi def link asciidocHLabel Label
++hi def link asciidocIdMarker Special
++hi def link asciidocIndexTerm Macro
++hi def link asciidocLineBreak Special
++hi def link asciidocOpenBlockDelimiter Label
++hi def link asciidocListBullet Label
++hi def link asciidocListContinuation Label
++hi def link asciidocListingBlock Identifier
++hi def link asciidocListLabel Label
++hi def link asciidocListNumber Label
++hi def link asciidocLiteralBlock Identifier
++hi def link asciidocLiteralParagraph Identifier
++hi def link asciidocMacroAttributes Label
++hi def link asciidocMacro Macro
++hi def link asciidocOneLineTitle Title
++hi def link asciidocPagebreak Type
++hi def link asciidocPassthroughBlock Identifier
++hi def link asciidocQuoteBlockDelimiter Type
++hi def link asciidocQuotedAttributeList Special
++hi def link asciidocQuotedBold Special
++hi def link asciidocQuotedDoubleQuoted Label
++hi def link asciidocQuotedEmphasized2 Type
++hi def link asciidocQuotedEmphasized Type
++hi def link asciidocQuotedMonospaced2 Identifier
++hi def link asciidocQuotedMonospaced Identifier
++hi def link asciidocQuotedSingleQuoted Label
++hi def link asciidocQuotedSubscript Type
++hi def link asciidocQuotedSuperscript Type
++hi def link asciidocQuotedUnconstrainedBold Special
++hi def link asciidocQuotedUnconstrainedEmphasized Type
++hi def link asciidocQuotedUnconstrainedMonospaced Identifier
++hi def link asciidocRefMacro Macro
++hi def link asciidocRuler Type
++hi def link asciidocSidebarDelimiter Type
++hi def link asciidocTableBlock2 NONE
++hi def link asciidocTableBlock NONE
++hi def link asciidocTableDelimiter2 Label
++hi def link asciidocTableDelimiter Label
++hi def link asciidocTable_OLD Type
++hi def link asciidocTablePrefix2 Label
++hi def link asciidocTablePrefix Label
++hi def link asciidocToDo Todo
++hi def link asciidocTriplePlusPassthrough Special
++hi def link asciidocTwoLineTitle Title
++hi def link asciidocURL Macro
++let b:current_syntax = "asciidoc"
++
++" vim: wrap et sw=2 sts=2:
+diff -Naur vim73.orig/runtime/syntax/asm.vim vim73/runtime/syntax/asm.vim
+--- vim73.orig/runtime/syntax/asm.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/asm.vim	2013-06-07 17:07:21.345614393 +0000
+@@ -3,7 +3,7 @@
+ " Maintainer:	Erik Wognsen <erik.wognsen@gmail.com>
+ "		Previous maintainer:
+ "		Kevin Dahlhausen <kdahlhaus@yahoo.com>
+-" Last Change:	2010 Apr 18
++" Last Change:	2012 Apr 09
+ 
+ " Thanks to Ori Avtalion for feedback on the comment markers!
+ 
+@@ -15,6 +15,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ 
+ " storage types
+@@ -40,7 +43,7 @@
+ " Various #'s as defined by GAS ref manual sec 3.6.2.1
+ " Technically, the first decNumber def is actually octal,
+ " since the value of 0-7 octal is the same as 0-7 decimal,
+-" I prefer to map it as decimal:
++" I (Kevin) prefer to map it as decimal:
+ syn match decNumber		"0\+[1-7]\=[\t\n$,; ]"
+ syn match decNumber		"[1-9]\d*"
+ syn match octNumber		"0[0-7][0-7]\+"
+@@ -49,14 +52,39 @@
+ 
+ syn keyword asmTodo		contained TODO
+ 
+-" GAS supports various comment markers as described here:
+-" http://sourceware.org/binutils/docs-2.19/as/Comments.html
+-" I have commented out the ARM comment marker "@" by default as I think more
+-" people are using "@" with the .type directive. See
+-" http://sourceware.org/binutils/docs-2.19/as/Type.html
++
++" GAS supports one type of multi line comments:
+ syn region asmComment		start="/\*" end="\*/" contains=asmTodo
++
++" GAS (undocumentedly?) supports C++ style comments. Unlike in C/C++ however,
++" a backslash ending a C++ style comment does not extend the comment to the
++" next line (hence the syntax region does not define 'skip="\\$"')
++syn region asmComment		start="//" end="$" keepend contains=asmTodo
++
++" Line comment characters depend on the target architecture and command line
++" options and some comments may double as logical line number directives or
++" preprocessor commands. This situation is described at
++" http://sourceware.org/binutils/docs-2.22/as/Comments.html
++" Some line comment characters have other meanings for other targets. For
++" example, .type directives may use the `@' character which is also an ARM
++" comment marker.
++" As a compromise to accommodate what I arbitrarily assume to be the most
++" frequently used features of the most popular architectures (and also the
++" non-GNU assembly languages that use this syntax file because their asm files
++" are also named *.asm), the following are used as line comment characters:
+ syn match asmComment		"[#;!|].*" contains=asmTodo
+-" syn match asmComment		"@.*" contains=asmTodo
++
++" Side effects of this include:
++" - When `;' is used to separate statements on the same line (many targets
++"   support this), all statements except the first get highlighted as
++"   comments. As a remedy, remove `;' from the above.
++" - ARM comments are not highlighted correctly. For ARM, uncomment the
++"   following two lines and comment the one above.
++"syn match asmComment		"@.*" contains=asmTodo
++"syn match asmComment		"^#.*" contains=asmTodo
++
++" Advanced users of specific architectures will probably want to change the
++" comment highlighting or use a specific, more comprehensive syntax file.
+ 
+ syn match asmInclude		"\.include"
+ syn match asmCond		"\.if"
+@@ -97,7 +125,7 @@
+   HiLink octNumber	Number
+   HiLink binNumber	Number
+ 
+-  HiLink asmIdentifier Identifier
++  HiLink asmIdentifier	Identifier
+   HiLink asmType	Type
+ 
+   delcommand HiLink
+@@ -105,4 +133,7 @@
+ 
+ let b:current_syntax = "asm"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/asn.vim vim73/runtime/syntax/asn.vim
+--- vim73.orig/runtime/syntax/asn.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/asn.vim	2013-06-07 17:07:21.372280984 +0000
+@@ -2,7 +2,7 @@
+ " Language:	ASN.1
+ " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
+ " URL:		http://www.fleiner.com/vim/syntax/asn.vim
+-" Last Change:	2001 Apr 26
++" Last Change:	2012 Oct 05
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " keyword definitions
+ syn keyword asnExternal		DEFINITIONS BEGIN END IMPORTS EXPORTS FROM
+ syn match   asnExternal		"\<IMPLICIT\s\+TAGS\>"
+@@ -76,6 +79,8 @@
+   delcommand HiLink
+ endif
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ let b:current_syntax = "asn"
+ 
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/autoit.vim vim73/runtime/syntax/autoit.vim
+--- vim73.orig/runtime/syntax/autoit.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/autoit.vim	2013-06-07 17:07:21.448947431 +0000
+@@ -6,6 +6,15 @@
+ " Script URL:	http://www.vim.org/scripts/script.php?script_id=1239
+ " ChangeLog:	Please visit the script URL for detailed change information
+ 
++" Quit when a syntax file was already loaded.
++if exists("b:current_syntax")
++  finish
++endif
++let s:keepcpo= &cpo
++set cpo&vim
++
++let b:current_syntax = "autoit"
++
+ " AutoIt is not case dependent
+ syn case ignore
+ 
+@@ -1108,4 +1117,8 @@
+ hi def link autoitStyle Type
+ hi def link autoitConst Type
+ hi def link autoitSend Type
++
+ syn sync minlines=50
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/syntax/automake.vim vim73/runtime/syntax/automake.vim
+--- vim73.orig/runtime/syntax/automake.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/automake.vim	2013-06-07 17:07:21.475614022 +0000
+@@ -2,8 +2,8 @@
+ " Language:	automake Makefile.am
+ " Maintainer:   Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+ " Former Maintainer:	John Williams <jrw@pobox.com>
+-" Last Change:	2007-10-14
+-" URL: http://git.debian.org/?p=pkg-vim/vim.git;a=blob_plain;f=runtime/syntax/automake.vim;hb=debian
++" Last Change:	2011-06-13
++" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/automake.vim
+ "
+ " XXX This file is in need of a new maintainer, Debian VIM Maintainers maintain
+ "     it only because patches have been submitted for it by Debian users and the
+@@ -17,6 +17,12 @@
+ " when they are used in an inappropriate place, such as in defining
+ " EXTRA_SOURCES.
+ 
++" Standard syntax initialization
++if version < 600
++  syntax clear
++elseif exists("b:current_syntax")
++  finish
++endif
+ 
+ " Read the Makefile syntax to start with
+ if version < 600
+@@ -25,27 +31,28 @@
+   runtime! syntax/make.vim
+ endif
+ 
+-syn match automakePrimary "^[A-Za-z0-9_]\+\(_PROGRAMS\|LIBRARIES\|_LIST\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_JAVA\|_LTLIBRARIES\)\s*="me=e-1
+-syn match automakePrimary "^TESTS\s*="me=e-1
+-syn match automakeSecondary "^[A-Za-z0-9_]\+\(_SOURCES\|_LDADD\|_LIBADD\|_LDFLAGS\|_DEPENDENCIES\|_CPPFLAGS\)\s*="me=e-1
+-syn match automakeSecondary "^OMIT_DEPENDENCIES\s*="me=e-1
+-syn match automakeExtra "^EXTRA_[A-Za-z0-9_]\+\s*="me=e-1
+-syn match automakeOptions "^\(AUTOMAKE_OPTIONS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*="me=e-1
+-syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*="me=e-1
+-syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*="me=e-1
+-syn match automakeConditional "^\(if\s*[a-zA-Z0-9_]\+\|else\|endif\)\s*$"
++syn match automakePrimary "^\w\+\(_PROGRAMS\|_LIBRARIES\|_LISP\|_PYTHON\|_JAVA\|_SCRIPTS\|_DATA\|_HEADERS\|_MANS\|_TEXINFOS\|_LTLIBRARIES\)\s*\ze+\=="
++syn match automakePrimary "^TESTS\s*\ze+\=="me=e-1
++syn match automakeSecondary "^\w\+\(_SOURCES\|_LIBADD\|_LDADD\|_LDFLAGS\|_DEPENDENCIES\|_AR\|_CCASFLAGS\|_CFLAGS\|_CPPFLAGS\|_CXXFLAGS\|_FCFLAGS\|_FFLAGS\|_GCJFLAGS\|_LFLAGS\|_LIBTOOLFLAGS\|OBJCFLAGS\|RFLAGS\|UPCFLAGS\|YFLAGS\)\s*\ze+\=="
++syn match automakeSecondary "^\(LDADD\|ARFLAGS\|OMIT_DEPENDENCIES\|AM_MAKEFLAGS\|\(AM_\)\=\(MAKEINFOFLAGS\|RUNTESTDEFAULTFLAGS\|ETAGSFLAGS\|CTAGSFLAGS\|JAVACFLAGS\)\)\s*\ze+\=="
++syn match automakeExtra "^EXTRA_\w\+\s*\ze+\=="
++syn match automakeOptions "^\(ACLOCAL_AMFLAGS\|AUTOMAKE_OPTIONS\|DISTCHECK_CONFIGURE_FLAGS\|ETAGS_ARGS\|TAGS_DEPENDENCIES\)\s*\ze+\=="
++syn match automakeClean "^\(MOSTLY\|DIST\|MAINTAINER\)\=CLEANFILES\s*\ze+\=="
++syn match automakeSubdirs "^\(DIST_\)\=SUBDIRS\s*\ze+\=="
++syn match automakeConditional "^\(if\s*!\=\w\+\|else\|endif\)\s*$"
+ 
+-syn match automakeSubst     "@[a-zA-Z0-9_]\+@"
+-syn match automakeSubst     "^\s*@[a-zA-Z0-9_]\+@"
++syn match automakeSubst     "@\w\+@"
++syn match automakeSubst     "^\s*@\w\+@"
+ syn match automakeComment1 "#.*$" contains=automakeSubst
+ syn match automakeComment2 "##.*$"
+ 
+ syn match automakeMakeError "$[{(][^})]*[^a-zA-Z0-9_})][^})]*[})]" " GNU make function call
++syn match automakeMakeError "^AM_LDADD\s*\ze+\==" " Common mistake
+ 
+-syn region automakeNoSubst start="^EXTRA_[a-zA-Z0-9_]*\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
+-syn region automakeNoSubst start="^DIST_SUBDIRS\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
+-syn region automakeNoSubst start="^[a-zA-Z0-9_]*_SOURCES\s*=" end="$" contains=ALLBUT,automakeNoSubst transparent
+-syn match automakeBadSubst  "@\([a-zA-Z0-9_]*@\=\)\=" contained
++syn region automakeNoSubst start="^EXTRA_\w*\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
++syn region automakeNoSubst start="^DIST_SUBDIRS\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
++syn region automakeNoSubst start="^\w*_SOURCES\s*+\==" end="$" contains=ALLBUT,automakeNoSubst transparent
++syn match automakeBadSubst  "@\(\w*@\=\)\=" contained
+ 
+ syn region  automakeMakeDString start=+"+  skip=+\\"+  end=+"+  contains=makeIdent,automakeSubstitution
+ syn region  automakeMakeSString start=+'+  skip=+\\'+  end=+'+  contains=makeIdent,automakeSubstitution
+diff -Naur vim73.orig/runtime/syntax/awk.vim vim73/runtime/syntax/awk.vim
+--- vim73.orig/runtime/syntax/awk.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/awk.vim	2013-06-07 17:07:21.492280641 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	awk, nawk, gawk, mawk
+-" Maintainer:	Antonio Colombo <azc10@yahoo.com>
+-" Last Change:	2005 Mar 16
++" Maintainer:	Antonio Colombo <azc100@gmail.com>
++" Last Change:	2012 May 18
+ 
+ " AWK  ref.  is: Alfred V. Aho, Brian W. Kernighan, Peter J. Weinberger
+ " The AWK Programming Language, Addison-Wesley, 1988
+@@ -25,6 +25,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " A bunch of useful Awk keywords
+ " AWK  ref. p. 188
+ syn keyword awkStatement	break continue delete exit
+@@ -87,7 +90,7 @@
+ 
+ " String and Character constants
+ " Highlight special characters (those which have a backslash) differently
+-syn region  awkString	start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=awkSpecialCharacter,awkSpecialPrintf
++syn region  awkString	start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,awkSpecialCharacter,awkSpecialPrintf
+ syn match   awkSpecialCharacter contained "\\."
+ 
+ " Some of these combinations may seem weird, but they work.
+@@ -129,7 +132,7 @@
+ " Put this above those to override them.
+ " Put this in a 'match "\<printf\=\>.*;\="' to make it not override
+ " less/greater than (most of the time), but it won't work yet because
+-" keywords allways have precedence over match & region.
++" keywords always have precedence over match & region.
+ " File I/O: (print foo, bar > "filename") & for nawk (getline < "filename")
+ "syn match  awkFileIO		contained ">"
+ "syn match  awkFileIO		contained "<"
+@@ -138,7 +141,7 @@
+ syn match  awkSemicolon	";"
+ syn match  awkComma		","
+ 
+-syn match  awkComment	"#.*" contains=awkTodo
++syn match  awkComment	"#.*" contains=@Spell,awkTodo
+ 
+ syn match  awkLineSkip	"\\$"
+ 
+@@ -155,7 +158,7 @@
+ 
+ " define the default highlighting
+ " For version 5.7 and earlier: only when not done already
+-" For version 5.8 and later: only when an item doesn't have highlightling yet
++" For version 5.8 and later: only when an item doesn't have highlighting yet
+ if version >= 508 || !exists("did_awk_syn_inits")
+   if version < 508
+     let did_awk_syn_inits = 1
+@@ -213,4 +216,7 @@
+ 
+ let b:current_syntax = "awk"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/ayacc.vim vim73/runtime/syntax/ayacc.vim
+--- vim73.orig/runtime/syntax/ayacc.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/ayacc.vim	2013-06-07 17:07:21.498947289 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	AYacc
+ " Maintainer:	Mathieu Clabaut <mathieu.clabaut@free.fr>
+-" LastChange:	02 May 2001
++" LastChange:	2011 Dec 25
+ " Original:	Yacc, maintained by Dr. Charles E. Campbell, Jr.
+ " Comment:	     Replaced sourcing c.vim file by ada.vim and rename yacc*
+ "		in ayacc*
+@@ -22,6 +22,9 @@
+    unlet b:current_syntax
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Clusters
+ syn cluster	ayaccActionGroup	contains=ayaccDelim,cInParen,cTodo,cIncluded,ayaccDelim,ayaccCurlyError,ayaccUnionCurly,ayaccUnion,cUserLabel,cOctalZero,cCppOut2,cCppSkip,cErrInBracket,cErrInParen,cOctalError
+ syn cluster	ayaccUnionGroup	contains=ayaccKey,cComment,ayaccCurly,cType,cStructure,cStorageClass,ayaccUnionCurly
+@@ -83,4 +86,6 @@
+ 
+ let b:current_syntax = "ayacc"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=15
+diff -Naur vim73.orig/runtime/syntax/basic.vim vim73/runtime/syntax/basic.vim
+--- vim73.orig/runtime/syntax/basic.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/basic.vim	2013-06-07 17:07:21.535613851 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	BASIC
+ " Maintainer:	Allan Kelly <allan@fruitloaf.co.uk>
+-" Last Change:	Tue Sep 14 14:24:23 BST 1999
++" Last Change:  2011 Dec 25 by Thilo Six
+ 
+ " First version based on Micro$soft QBASIC circa 1989, as documented in
+ " 'Learn BASIC Now' by Halvorson&Rygmyr. Microsoft Press 1989.
+@@ -16,6 +16,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " A bunch of useful BASIC keywords
+ syn keyword basicStatement	BEEP beep Beep BLOAD bload Bload BSAVE bsave Bsave
+ syn keyword basicStatement	CALL call Call ABSOLUTE absolute Absolute
+@@ -171,4 +174,6 @@
+ 
+ let b:current_syntax = "basic"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/bc.vim vim73/runtime/syntax/bc.vim
+--- vim73.orig/runtime/syntax/bc.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/bc.vim	2013-06-07 17:07:21.542280498 +0000
+@@ -1,7 +1,8 @@
+ " Vim syntax file
+ " Language:	bc - An arbitrary precision calculator language
+ " Maintainer:	Vladimir Scholtz <vlado@gjh.sk>
+-" Last change:	2001 Sep 02
++" Last change:	2012 Jun 01
++" 		(Dominique Pelle added @Spell)
+ " Available on:	www.gjh.sk/~vlado/bc.vim
+ 
+ " For version 5.x: Clear all syntax items
+@@ -31,14 +32,14 @@
+ syn match bcIdentifier		"[a-z_][a-z0-9_]*"
+ 
+ " String
+- syn match bcString		"\"[^"]*\""
++ syn match bcString		"\"[^"]*\"" contains=@Spell
+ 
+ " Number
+ syn match bcNumber		"[0-9]\+"
+ 
+ " Comment
+-syn match bcComment		"\#.*"
+-syn region bcComment		start="/\*" end="\*/"
++syn match bcComment		"\#.*" contains=@Spell
++syn region bcComment		start="/\*" end="\*/" contains=@Spell
+ 
+ " Parent ()
+ syn cluster bcAll contains=bcList,bcIdentifier,bcNumber,bcKeyword,bcType,bcConstant,bcString,bcParentError
+diff -Naur vim73.orig/runtime/syntax/bib.vim vim73/runtime/syntax/bib.vim
+--- vim73.orig/runtime/syntax/bib.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/bib.vim	2013-06-07 17:07:21.562280441 +0000
+@@ -2,7 +2,7 @@
+ " Language:	BibTeX (bibliographic database format for (La)TeX)
+ " Maintainer:	Bernd Feige <Bernd.Feige@gmx.net>
+ " Filenames:	*.bib
+-" Last Change:	Aug 02, 2005
++" Last Change:	2011 Dec 25
+ 
+ " Thanks to those who pointed out problems with this file or supplied fixes!
+ 
+@@ -16,6 +16,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Ignore case
+ syn case ignore
+ 
+@@ -34,6 +37,8 @@
+ syn keyword bibEntryKw contained	school series title type volume year
+ " Non-standard:
+ syn keyword bibNSEntryKw contained	abstract isbn issn keywords url
++" AMS mref http://www.ams.org/mref
++syn keyword bibNSEntryKw contained	mrclass mrnumber mrreviewer fjournal coden
+ 
+ " Clusters
+ " ========
+@@ -55,11 +60,11 @@
+ " Actually, 5.8 <= Vim < 6.0 would ignore the `fold' keyword anyway, but Vim<5.8 would produce
+ " an error, so we explicitly distinguish versions with and without folding functionality:
+ if version < 600
+-  syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment
++  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent contains=bibType,bibEntryData nextgroup=bibComment
+ else
+-  syn region bibEntry start=/@\S\+[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
++  syn region bibEntry start=/@\S\+\s*[{(]/ end=/^\s*[})]/ transparent fold contains=bibType,bibEntryData nextgroup=bibComment
+ endif
+-syn region bibComment2 start=/@Comment[{(]/ end=/^\s*@/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
++syn region bibComment2 start=/@Comment\s*[{(]/ end=/^\s*[})]/me=e-1 contains=@bibCommentContents nextgroup=bibEntry
+ 
+ " Synchronization
+ " ===============
+@@ -91,3 +96,6 @@
+ endif
+ 
+ let b:current_syntax = "bib"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/bindzone.vim vim73/runtime/syntax/bindzone.vim
+--- vim73.orig/runtime/syntax/bindzone.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/bindzone.vim	2013-06-07 17:07:21.575613736 +0000
+@@ -1,13 +1,13 @@
+ " Vim syntax file
+-" Language:     BIND zone files (RFC1035)
++" Language:     BIND zone files (RFC 1035)
+ " Maintainer:   Julian Mehnle <julian@mehnle.net>
+ " URL:          http://www.mehnle.net/source/odds+ends/vim/syntax/
+-" Last Change:  Thu 2006-04-20 12:30:45 UTC
++" Last Change:  Thu 2011-07-16 20:42:00 UTC
+ " 
+ " Based on an earlier version by ÐÑÑÐµÑÐ»Ð°Ð² ÐÐŸÑÐ±Ð°ÐœÐµÐ² (Slava Gorbanev), with
+ " heavy modifications.
+ " 
+-" $Id: bindzone.vim,v 1.2 2006/04/20 22:06:21 vimboss Exp $
++" $Id: bindzone.vim 12 2011-07-16 21:09:57Z julian $
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -23,7 +23,7 @@
+ syn region      zoneRRecord     start=/^/ end=/$/ contains=zoneOwnerName,zoneSpecial,zoneTTL,zoneClass,zoneRRType,zoneComment,zoneUnknown
+ 
+ syn match       zoneDirective   /^\$ORIGIN\s\+/   nextgroup=zoneOrigin,zoneUnknown
+-syn match       zoneDirective   /^\$TTL\s\+/      nextgroup=zoneNumber,zoneUnknown
++syn match       zoneDirective   /^\$TTL\s\+/      nextgroup=zoneTTL,zoneUnknown
+ syn match       zoneDirective   /^\$INCLUDE\s\+/  nextgroup=zoneText,zoneUnknown
+ syn match       zoneDirective   /^\$GENERATE\s/
+ 
+@@ -34,9 +34,9 @@
+ syn match       zoneDomain      contained  /[^[:space:]!"#$%&'()*+,\/:;<=>?@[\]\^`{|}~]\+\(\s\|;\|$\)\@=/
+ 
+ syn match       zoneSpecial     contained /^[@*.]\s/
+-syn match       zoneTTL         contained /\<\d[0-9HhWwDd]*\>/  nextgroup=zoneClass,zoneRRType skipwhite
+-syn keyword     zoneClass       contained IN CHAOS              nextgroup=zoneRRType,zoneTTL   skipwhite
+-syn keyword     zoneRRType      contained A AAAA CNAME HINFO MX NS PTR SOA SRV TXT nextgroup=zoneRData skipwhite
++syn match       zoneTTL         contained /\s\@<=\d[0-9WwDdHhMmSs]*\(\s\|$\)\@=/ nextgroup=zoneClass,zoneRRType skipwhite
++syn keyword     zoneClass       contained IN CHAOS nextgroup=zoneRRType,zoneTTL skipwhite
++syn keyword     zoneRRType      contained A AAAA CNAME DNAME HINFO MX NS PTR SOA SRV TXT SPF nextgroup=zoneRData skipwhite
+ syn match       zoneRData       contained /[^;]*/ contains=zoneDomain,zoneIPAddr,zoneIP6Addr,zoneText,zoneNumber,zoneParen,zoneUnknown
+ 
+ syn match       zoneIPAddr      contained /\<[0-9]\{1,3}\(\.[0-9]\{1,3}\)\{,3}\>/
+@@ -66,7 +66,7 @@
+ syn match       zoneSerial      contained /\<[0-9]\{9,10}\(\s\|;\|$\)\@=/
+ 
+ syn match       zoneErrParen    /)/
+-syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneNumber,zoneComment
++syn region      zoneParen       contained start="(" end=")" contains=zoneSerial,zoneTTL,zoneNumber,zoneComment
+ syn match       zoneComment     /;.*/
+ 
+ " Define the default highlighting.
+diff -Naur vim73.orig/runtime/syntax/blank.vim vim73/runtime/syntax/blank.vim
+--- vim73.orig/runtime/syntax/blank.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/blank.vim	2013-06-07 17:07:21.588947032 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:     Blank 1.4.1
+ " Maintainer:   Rafal M. Sulejman <unefunge@friko2.onet.pl>
+-" Last change:  21 Jul 2000
++" Last change:  2011 Dec 28 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ 
+ " Blank instructions
+@@ -43,4 +46,7 @@
+ endif
+ 
+ let b:current_syntax = "blank"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/bzr.vim vim73/runtime/syntax/bzr.vim
+--- vim73.orig/runtime/syntax/bzr.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/bzr.vim	2013-06-07 17:07:21.642280213 +0000
+@@ -1,10 +1,10 @@
+ " Vim syntax file
+ " Language:     Bazaar (bzr) commit file
+-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
+-" URL:          http://www.hlabs.spb.ru/vim/bzr.vim
+-" Last Change:  2009-01-27
++" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
++" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/bzr.vim
++" Last Change:  2012-02-11
+ " Filenames:    bzr_log.*
+-" Version:      1.2.1
++" Version:      1.2.2
+ "
+ " Thanks:
+ "
+diff -Naur vim73.orig/runtime/syntax/c.vim vim73/runtime/syntax/c.vim
+--- vim73.orig/runtime/syntax/c.vim	2010-08-13 09:17:32.000000000 +0000
++++ vim73/runtime/syntax/c.vim	2013-06-07 17:07:21.645613537 +0000
+@@ -1,13 +1,16 @@
+ " Vim syntax file
+ " Language:	C
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2009 Nov 17
++" Last Change:	2013 Jun 06
+ 
+ " Quit when a (custom) syntax file was already loaded
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " A bunch of useful C keywords
+ syn keyword	cStatement	goto break return continue asm
+ syn keyword	cLabel		case default
+@@ -18,7 +21,7 @@
+ 
+ " It's easy to accidentally add a space after a backslash that was intended
+ " for line continuation.  Some compilers allow it, which makes it
+-" unpredicatable and should be avoided.
++" unpredictable and should be avoided.
+ syn match	cBadContinuation contained "\\\s\+$"
+ 
+ " cCommentGroup allows adding matches for special things in comments
+@@ -31,9 +34,15 @@
+   syn match	cSpecial	display contained "\\\(u\x\{4}\|U\x\{8}\)"
+ endif
+ if exists("c_no_cformat")
+-  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell
++  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
+   " cCppString: same as cString, but ends at end of line
+-  syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,@Spell
++  if !exists("cpp_no_cpp11") " ISO C++11
++    syn region cCppString	start=+\(L\|u\|u8\|U\|R\|LR\|u8R\|uR\|UR\)\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
++  else
++    syn region cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
++  endif
++  syn region	cCppOut2	contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
++  syn region	cCppSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
+ else
+   if !exists("c_no_c99") " ISO C99
+     syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlLjzt]\|ll\|hh\)\=\([aAbdiuoxXDOUfFeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+@@ -41,7 +50,7 @@
+     syn match	cFormat		display "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
+   endif
+   syn match	cFormat		display "%%" contained
+-  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell
++  syn region	cString		start=+L\="+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
+   " cCppString: same as cString, but ends at end of line
+   syn region	cCppString	start=+L\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end='$' contains=cSpecial,cFormat,@Spell
+ endif
+@@ -59,6 +68,25 @@
+ syn match	cSpecialCharacter display "'\\x\x\{1,2}'"
+ syn match	cSpecialCharacter display "L'\\x\x\+'"
+ 
++if !exists("c_no_c11") " ISO C11
++  if exists("c_no_cformat")
++    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,@Spell extend
++  else
++    syn region	cString		start=+\%(U\|u8\=\)"+ skip=+\\\\\|\\"+ end=+"+ contains=cSpecial,cFormat,@Spell extend
++  endif
++  syn match	cCharacter	"[Uu]'[^\\]'"
++  syn match	cCharacter	"[Uu]'[^']*'" contains=cSpecial
++  if exists("c_gnu")
++    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abefnrtv]'"
++    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abefnrtv]'"
++  else
++    syn match	cSpecialError	"[Uu]'\\[^'\"?\\abfnrtv]'"
++    syn match	cSpecialCharacter "[Uu]'\\['\"?\\abfnrtv]'"
++  endif
++  syn match	cSpecialCharacter display "[Uu]'\\\o\{1,3}'"
++  syn match	cSpecialCharacter display "[Uu]'\\x\x\+'"
++endif
++
+ "when wanted, highlight trailing white space
+ if exists("c_space_errors")
+   if !exists("c_no_trail_space_error")
+@@ -71,40 +99,69 @@
+ 
+ " This should be before cErrInParen to avoid problems with #define ({ xxx })
+ if exists("c_curly_error")
+-  syntax match cCurlyError "}"
+-  syntax region	cBlock		start="{" end="}" contains=ALLBUT,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
++  syn match cCurlyError "}"
++  syn region	cBlock		start="{" end="}" contains=ALLBUT,cBadBlock,cCurlyError,@cParenGroup,cErrInParen,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell fold
+ else
+-  syntax region	cBlock		start="{" end="}" transparent fold
++  syn region	cBlock		start="{" end="}" transparent fold
+ endif
+ 
+ "catch errors caused by wrong parenthesis and brackets
+ " also accept <% for {, %> for }, <: for [ and :> for ] (C99)
+ " But avoid matching <::.
+-syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
++syn cluster	cParenGroup	contains=cParenError,cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserLabel,cBitField,cOctalZero,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom
+ if exists("c_no_curly_error")
+-  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
+-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+-  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+-  syn match	cParenError	display ")"
+-  syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
++  if &filetype ==# 'cpp' && !exists("cpp_no_cpp11")
++    syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
++    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
++    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
++    syn match	cParenError	display ")"
++    syn match	cErrInParen	display contained "^^<%\|^%>"
++  else
++    syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
++    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
++    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
++    syn match	cParenError	display ")"
++    syn match	cErrInParen	display contained "^[{}]\|^<%\|^%>"
++  endif
+ elseif exists("c_no_bracket_error")
+-  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
+-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+-  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
+-  syn match	cParenError	display ")"
+-  syn match	cErrInParen	display contained "[{}]\|<%\|%>"
++  if &filetype ==# 'cpp' && !exists("cpp_no_cpp11")
++    syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cCppString,@Spell
++    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
++    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
++    syn match	cParenError	display ")"
++    syn match	cErrInParen	display contained "<%\|%>"
++  else
++    syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cCppString,@Spell
++    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
++    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cParen,cString,@Spell
++    syn match	cParenError	display ")"
++    syn match	cErrInParen	display contained "[{}]\|<%\|%>"
++  endif
+ else
+-  syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
+-  " cCppParen: same as cParen but ends at end-of-line; used in cDefine
+-  syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
+-  syn match	cParenError	display "[\])]"
+-  syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
+-  syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
++  if &filetype ==# 'cpp' && !exists("cpp_no_cpp11")
++    syn region	cParen		transparent start='(' end=')' contains=ALLBUT,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
++    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
++    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
++    syn match	cParenError	display "[\])]"
++    syn match	cErrInParen	display contained "<%\|%>"
++    syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' contains=ALLBUT,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
++  else
++    syn region	cParen		transparent start='(' end=')' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cCppParen,cErrInBracket,cCppBracket,cCppString,@Spell
++    " cCppParen: same as cParen but ends at end-of-line; used in cDefine
++    syn region	cCppParen	transparent start='(' skip='\\$' excludenl end=')' end='$' contained contains=ALLBUT,@cParenGroup,cErrInBracket,cParen,cBracket,cString,@Spell
++    syn match	cParenError	display "[\])]"
++    syn match	cErrInParen	display contained "[\]{}]\|<%\|%>"
++    syn region	cBracket	transparent start='\[\|<::\@!' end=']\|:>' end='}'me=s-1 contains=ALLBUT,cBlock,@cParenGroup,cErrInParen,cCppParen,cCppBracket,cCppString,@Spell
++  endif
+   " cCppBracket: same as cParen but ends at end-of-line; used in cDefine
+   syn region	cCppBracket	transparent start='\[\|<::\@!' skip='\\$' excludenl end=']\|:>' end='$' contained contains=ALLBUT,@cParenGroup,cErrInParen,cParen,cBracket,cString,@Spell
+   syn match	cErrInBracket	display contained "[);{}]\|<%\|%>"
+ endif
+ 
++if &filetype ==# 'c' || exists("cpp_no_cpp11")
++  syn region	cBadBlock	keepend start="{" end="}" contained containedin=cParen,cBracket,cBadBlock transparent fold
++endif
++
+ "integer number, or floating point number without a dot and with "f".
+ syn case ignore
+ syn match	cNumbers	display transparent "\<\d\|\.\d" contains=cNumber,cFloat,cOctalError,cOctal
+@@ -140,16 +197,16 @@
+   " need to use a special type of cString: cCommentString, which also ends on
+   " "*/", and sees a "*" at the start of the line as comment again.
+   " Unfortunately this doesn't very well work for // type of comments :-(
+-  syntax match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
+-  syntax region cCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
+-  syntax region cComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
+-  syntax region  cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
++  syn match	cCommentSkip	contained "^\s*\*\($\|\s\+\)"
++  syn region cCommentString	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end=+\*/+me=s-1 contains=cSpecial,cCommentSkip
++  syn region cComment2String	contained start=+L\=\\\@<!"+ skip=+\\\\\|\\"+ end=+"+ end="$" contains=cSpecial
++  syn region  cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cComment2String,cCharacter,cNumbersCom,cSpaceError,@Spell
+   if exists("c_no_comment_fold")
+     " Use "extend" here to have preprocessor lines not terminate halfway a
+     " comment.
+-    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
++    syn region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell extend
+   else
+-    syntax region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
++    syn region cComment	matchgroup=cCommentStart start="/\*" end="\*/" contains=@cCommentGroup,cCommentStartError,cCommentString,cCharacter,cNumbersCom,cSpaceError,@Spell fold extend
+   endif
+ else
+   syn region	cCommentL	start="//" skip="\\$" end="$" keepend contains=@cCommentGroup,cSpaceError,@Spell
+@@ -160,8 +217,8 @@
+   endif
+ endif
+ " keep a // comment separately, it terminates a preproc. conditional
+-syntax match	cCommentError	display "\*/"
+-syntax match	cCommentStartError display "/\*"me=e-1 contained
++syn match	cCommentError	display "\*/"
++syn match	cCommentStartError display "/\*"me=e-1 contained
+ 
+ syn keyword	cOperator	sizeof
+ if exists("c_gnu")
+@@ -176,7 +233,7 @@
+   syn keyword   cType		mbstate_t wctrans_t wint_t wctype_t
+ endif
+ if !exists("c_no_c99") " ISO C99
+-  syn keyword	cType		bool complex
++  syn keyword	cType		_Bool bool _Complex complex _Imaginary imaginary
+   syn keyword	cType		int8_t int16_t int32_t int64_t
+   syn keyword	cType		uint8_t uint16_t uint32_t uint64_t
+   syn keyword	cType		int_least8_t int_least16_t int_least32_t int_least64_t
+@@ -198,6 +255,16 @@
+ if !exists("c_no_c99")
+   syn keyword	cStorageClass	inline restrict
+ endif
++if !exists("c_no_c11")
++  syn keyword	cStorageClass	_Alignas alignas
++  syn keyword	cOperator	_Alignof alignof
++  syn keyword	cStorageClass	_Atomic
++  syn keyword	cOperator	_Generic
++  syn keyword	cStorageClass	_Noreturn noreturn
++  syn keyword	cOperator	_Static_assert static_assert
++  syn keyword	cStorageClass	_Thread_local thread_local
++  syn keyword   cType		char16_t char32_t
++endif
+ 
+ if !exists("c_no_ansi") || exists("c_ansi_constants") || exists("c_gnu")
+   if exists("c_gnu")
+@@ -270,28 +337,42 @@
+ endif
+ 
+ " Accept %: for # (C99)
+-syn region      cPreCondit      start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$"  keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
+-syn match	cPreCondit	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
++syn region	cPreCondit	start="^\s*\(%:\|#\)\s*\(if\|ifdef\|ifndef\|elif\)\>" skip="\\$" end="$" keepend contains=cComment,cCommentL,cCppString,cCharacter,cCppParen,cParenError,cNumbers,cCommentError,cSpaceError
++syn match	cPreConditMatch	display "^\s*\(%:\|#\)\s*\(else\|endif\)\>"
+ if !exists("c_no_if0")
++  syn cluster	cCppOutInGroup	contains=cCppInIf,cCppInElse,cCppInElse2,cCppOutIf,cCppOutIf2,cCppOutElse,cCppInSkip,cCppOutSkip
++  syn region	cCppOutWrapper	start="^\s*\(%:\|#\)\s*if\s\+0\+\s*\($\|//\|/\*\|&\)" end=".\@=\|$" contains=cCppOutIf,cCppOutElse,@NoSpell fold
++  syn region	cCppOutIf	contained start="0\+" matchgroup=cCppOutWrapper end="^\s*\(%:\|#\)\s*endif\>" contains=cCppOutIf2,cCppOutElse
+   if !exists("c_no_if0_fold")
+-    syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2 fold
++    syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell fold
+   else
+-    syn region	cCppOut		start="^\s*\(%:\|#\)\s*if\s\+0\+\>" end=".\@=\|$" contains=cCppOut2
++    syn region	cCppOutIf2	contained matchgroup=cCppOutWrapper start="0\+" end="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0\+\s*\($\|//\|/\*\|&\)\)\@!\|endif\>\)"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
+   endif
+-  syn region	cCppOut2	contained start="0" end="^\s*\(%:\|#\)\s*\(endif\>\|else\>\|elif\>\)" contains=cSpaceError,cCppSkip
+-  syn region	cCppSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppSkip
++  syn region	cCppOutElse	contained matchgroup=cCppOutWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=TOP,cPreCondit
++  syn region	cCppInWrapper	start="^\s*\(%:\|#\)\s*if\s\+0*[1-9]\d*\s*\($\|//\|/\*\||\)" end=".\@=\|$" contains=cCppInIf,cCppInElse fold
++  syn region	cCppInIf	contained matchgroup=cCppInWrapper start="\d\+" end="^\s*\(%:\|#\)\s*endif\>" contains=TOP,cPreCondit
++  if !exists("c_no_if0_fold")
++    syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2 fold
++  else
++    syn region	cCppInElse	contained start="^\s*\(%:\|#\)\s*\(else\>\|elif\s\+\(0*[1-9]\d*\s*\($\|//\|/\*\||\)\)\@!\)" end=".\@=\|$" containedin=cCppInIf contains=cCppInElse2
++  endif
++  syn region	cCppInElse2	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(else\|elif\)\([^/]\|/[^/*]\)*" end="^\s*\(%:\|#\)\s*endif\>"me=s-1 contains=cSpaceError,cCppOutSkip,@Spell
++  syn region	cCppOutSkip	contained start="^\s*\(%:\|#\)\s*\(if\>\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" contains=cSpaceError,cCppOutSkip
++  syn region	cCppInSkip	contained matchgroup=cCppInWrapper start="^\s*\(%:\|#\)\s*\(if\s\+\(\d\+\s*\($\|//\|/\*\||\|&\)\)\@!\|ifdef\>\|ifndef\>\)" skip="\\$" end="^\s*\(%:\|#\)\s*endif\>" containedin=cCppOutElse,cCppInIf,cCppInSkip contains=TOP,cPreProc
+ endif
+ syn region	cIncluded	display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ syn match	cIncluded	display contained "<[^>]*>"
+ syn match	cInclude	display "^\s*\(%:\|#\)\s*include\>\s*["<]" contains=cIncluded
+ "syn match cLineSkip	"\\$"
+-syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti
++syn cluster	cPreProcGroup	contains=cPreCondit,cIncluded,cInclude,cDefine,cErrInParen,cErrInBracket,cUserLabel,cSpecial,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cString,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cParen,cBracket,cMulti,cBadBlock
+ syn region	cDefine		start="^\s*\(%:\|#\)\s*\(define\|undef\)\>" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
+ syn region	cPreProc	start="^\s*\(%:\|#\)\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@cPreProcGroup,@Spell
+ 
+ " Highlight User Labels
+-syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOut,cCppOut2,cCppSkip,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
+-syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
++syn cluster	cMultiGroup	contains=cIncluded,cSpecial,cCommentSkip,cCommentString,cComment2String,@cCommentGroup,cCommentStartError,cUserCont,cUserLabel,cBitField,cOctalZero,cCppOutWrapper,cCppInWrapper,@cCppOutInGroup,cFormat,cNumber,cFloat,cOctal,cOctalError,cNumbersCom,cCppParen,cCppBracket,cCppString
++if &filetype ==# 'c' || exists("cpp_no_cpp11")
++  syn region	cMulti		transparent start='?' skip='::' end=':' contains=ALLBUT,@cMultiGroup,@Spell
++endif
+ " Avoid matching foo::bar() in C++ by requiring that the next char is not ':'
+ syn cluster	cLabelGroup	contains=cUserLabel
+ syn match	cUserCont	display "^\s*\I\i*\s*:$" contains=@cLabelGroup
+@@ -354,6 +435,9 @@
+ hi def link cIncluded		cString
+ hi def link cError		Error
+ hi def link cStatement		Statement
++hi def link cCppInWrapper	cCppOutWrapper
++hi def link cCppOutWrapper	cPreCondit
++hi def link cPreConditMatch	cPreCondit
+ hi def link cPreCondit		PreCondit
+ hi def link cType		Type
+ hi def link cConstant		Constant
+@@ -365,10 +449,14 @@
+ hi def link cSpecial		SpecialChar
+ hi def link cTodo		Todo
+ hi def link cBadContinuation	Error
+-hi def link cCppSkip		cCppOut
+-hi def link cCppOut2		cCppOut
++hi def link cCppOutSkip		cCppOutIf2
++hi def link cCppInElse2		cCppOutIf2
++hi def link cCppOutIf2		cCppOut2  " Old syntax group for #if 0 body
++hi def link cCppOut2		cCppOut  " Old syntax group for #if of #if 0
+ hi def link cCppOut		Comment
+ 
+ let b:current_syntax = "c"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/cfg.vim vim73/runtime/syntax/cfg.vim
+--- vim73.orig/runtime/syntax/cfg.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/cfg.vim	2013-06-07 17:07:21.758946546 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Good old CFG files
+ " Maintainer:	Igor N. Prischepoff (igor@tyumbit.ru, pri_igor@mail.ru)
+-" Last change:	2001 Sep 02
++" Last change:	2012 Aug 11
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -18,7 +18,7 @@
+ "Dos Drive:\Path
+ syn match CfgDirectory "[a-zA-Z]:\\\p*" contained
+ "Parameters
+-syn match   CfgParams    ".*="me=e-1 contains=CfgComment
++syn match   CfgParams    ".\{0}="me=e-1 contains=CfgComment
+ "... and their values (don't want to highlight '=' sign)
+ syn match   CfgValues    "=.*"hs=s+1 contains=CfgDirectory,UncPath,CfgComment,CfgString,CfgOnOff
+ 
+diff -Naur vim73.orig/runtime/syntax/cl.vim vim73/runtime/syntax/cl.vim
+--- vim73.orig/runtime/syntax/cl.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/cl.vim	2013-06-07 17:07:21.872279556 +0000
+@@ -1,9 +1,14 @@
+ " Vim syntax file
+-" Language:	cl ("Clever Language" by Multibase, http://www.mbase.com.au)
+-" Filename extensions: *.ent, *.eni
+-" Maintainer:	Philip Uren <philuSPAX@ieee.org> - Remove SPAX spam block
+-" Last update:	Wed Apr 12 08:47:18 EST 2006
+-" $Id: cl.vim,v 1.3 2006/04/12 21:43:28 vimboss Exp $
++" Language:		CL
++" 			(pronounced alphabetically: "Cee-El".
++" 			CL stands for Clever Language,
++" 			but the language is CL, not "Clever".
++" 			CL was created by Multibase, http://www.mbase.com.au)
++" Filename extensions:	*.ent
++"			*.eni
++" Maintainer:		Philip Uren	<philuSPAX@ieee.org> Remove SPAX spam block
++" Version:              6
++" Last Change:		Mar 06 2013
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -14,9 +19,9 @@
+ endif
+ 
+ if version >= 600
+-	setlocal iskeyword=@,48-57,_,-,
++	setlocal iskeyword=@,48-57,_,-
+ else
+-	set iskeyword=@,48-57,_,-,
++	set iskeyword=@,48-57,_,-
+ endif
+ 
+ syn case ignore
+@@ -24,12 +29,12 @@
+ syn sync lines=300
+ 
+ "If/else/elsif/endif and while/wend mismatch errors
+-syn match	clifError		"\<wend\>"
+-syn match	clifError		"\<elsif\>"
+-syn match	clifError		"\<else\>"
+-syn match	clifError		"\<endif\>"
++syn match	clifError	"\<wend\>"
++syn match	clifError	"\<elsif\>"
++syn match	clifError	"\<else\>"
++syn match	clifError	"\<endif\>"
+ 
+-syn match	clSpaceError		"\s\+$"
++syn match	clSpaceError	"\s\+$"
+ 
+ " If and while regions
+ syn region	clLoop		transparent matchgroup=clWhile start="\<while\>" matchgroup=clWhile end="\<wend\>" contains=ALLBUT,clBreak,clProcedure
+@@ -40,7 +45,7 @@
+ syn match	clNeedsWork	contained	"NEED[S]*\s\s*WORK"
+ syn keyword	clDebug		contained	debug
+ 
+-syn match	clComment	"#.*$"		contains=clTodo,clNeedsWork
++syn match	clComment	"#.*$"		contains=clTodo,clNeedsWork,@Spell
+ syn region	clProcedure	oneline		start="^\s*[{}]" end="$"
+ syn match	clInclude	"^\s*include\s.*"
+ 
+@@ -60,8 +65,8 @@
+ 
+ syn match	clNumber	"\<\d\+\(u\=l\=\|lu\|f\)\>"
+ 
+-syn region	clString	matchgroup=clQuote	start=+"+ end=+"+	skip=+\\"+
+-syn region	clString	matchgroup=clQuote	start=+'+ end=+'+	skip=+\\'+
++syn region	clString	matchgroup=clQuote	start=+"+ end=+"+	skip=+\\"+ contains=@Spell
++syn region	clString	matchgroup=clQuote	start=+'+ end=+'+	skip=+\\'+ contains=@Spell
+ 
+ syn keyword	clReserved	ERROR EXIT INTERRUPT LOCKED LREPLY MODE MCOL MLINE MREPLY NULL REPLY V1 V2 V3 V4 V5 V6 V7 V8 V9 ZERO BYPASS GOING_BACK AAUTO ABORT ABORT ALIGN BIGE CONVERT FNUM GOBACK HANGUP JUSTIFY NEXIT OUTPUT RAUTO RAWDISPLAY RAWPRINT REPEAT SKIP TAB TRIM LCOUNT PCOUNT PLINES SLINES SCOLS MATCH LMATCH
+ 
+diff -Naur vim73.orig/runtime/syntax/clean.vim vim73/runtime/syntax/clean.vim
+--- vim73.orig/runtime/syntax/clean.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/clean.vim	2013-06-07 17:07:21.885612851 +0000
+@@ -2,7 +2,8 @@
+ " Language:		Clean
+ " Author:		Pieter van Engelen <pietere@sci.kun.nl>
+ " Co-Author:	Arthur van Leeuwen <arthurvl@sci.kun.nl>
+-" Last Change:	Fri Sep 29 11:35:34 CEST 2000
++" Previous Change:	2011 Dec 25 by Thilo Six
++" Last Change:	2013 Apr 25 by JurriÃ«n Stutterheim
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -12,10 +13,13 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Some Clean-keywords
+ syn keyword cleanConditional if case
+ syn keyword cleanLabel let! with where in of
+-syn keyword cleanInclude from import
++syn keyword cleanInclude from import qualified
+ syn keyword cleanSpecial Start
+ syn keyword cleanKeyword infixl infixr infix
+ syn keyword cleanBasicType Int Real Char Bool String
+@@ -91,4 +95,6 @@
+ 
+ let b:current_syntax = "clean"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=4
+diff -Naur vim73.orig/runtime/syntax/clipper.vim vim73/runtime/syntax/clipper.vim
+--- vim73.orig/runtime/syntax/clipper.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/clipper.vim	2013-06-07 17:07:21.898946147 +0000
+@@ -2,7 +2,7 @@
+ " Language:	Clipper 5.2 & FlagShip
+ " Maintainer:	C R Zamana <zamana@zip.net>
+ " Some things based on c.vim by Bram Moolenaar and pascal.vim by Mario Eusebio
+-" Last Change:	Sat Sep 09 2000
++" Last Change:	2011 Dec 29 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Exceptions for my "Very Own" (TM) user variables naming style.
+ " If you don't like this, comment it
+ syn match  clipperUserVariable	"\<[a,b,c,d,l,n,o,u,x][A-Z][A-Za-z0-9_]*\>"
+@@ -140,4 +143,6 @@
+ 
+ let b:current_syntax = "clipper"
+ 
+-" vim: ts=4
++let &cpo = s:cpo_save
++unlet s:cpo_save
++" vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/clojure.vim vim73/runtime/syntax/clojure.vim
+--- vim73.orig/runtime/syntax/clojure.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/clojure.vim	2013-06-07 17:07:21.918946089 +0000
+@@ -0,0 +1,134 @@
++" Vim syntax file
++" Language:     Clojure
++" Authors:      Toralf Wittner <toralf.wittner@gmail.com>
++"               modified by Meikel Brandmeyer <mb@kotka.de>
++" URL:          http://kotka.de/projects/clojure/vimclojure.html
++"
++" Maintainer:   Sung Pae <self@sungpae.com>
++" URL:          https://github.com/guns/vim-clojure-static
++" License:      Same as Vim
++" Last Change:  05 February 2013
++
++if version < 600
++    syntax clear
++elseif exists("b:current_syntax")
++    finish
++endif
++
++setlocal iskeyword+=?,-,*,!,+,/,=,<,>,.,:,$
++
++" Generated from https://github.com/guns/vim-clojure-static/blob/vim-release-002/vim_clojure_static.clj
++" Clojure 1.5.0-RC6
++syntax keyword clojureConstant nil
++syntax keyword clojureBoolean false true
++syntax keyword clojureSpecial . catch clojure.core/fn clojure.core/let clojure.core/loop def do finally fn if let loop monitor-enter monitor-exit new quote recur set! throw try var
++syntax keyword clojureException catch finally throw try
++syntax keyword clojureCond case clojure.core/case clojure.core/cond clojure.core/cond-> clojure.core/cond->> clojure.core/condp clojure.core/if-let clojure.core/if-not clojure.core/when clojure.core/when-first clojure.core/when-let clojure.core/when-not cond cond-> cond->> condp if-let if-not when when-first when-let when-not
++syntax keyword clojureRepeat clojure.core/doall clojure.core/dorun clojure.core/doseq clojure.core/dotimes clojure.core/while doall dorun doseq dotimes while
++syntax keyword clojureDefine clojure.core/definline clojure.core/definterface clojure.core/defmacro clojure.core/defmethod clojure.core/defmulti clojure.core/defn clojure.core/defn- clojure.core/defonce clojure.core/defprotocol clojure.core/defrecord clojure.core/defstruct clojure.core/deftype definline definterface defmacro defmethod defmulti defn defn- defonce defprotocol defrecord defstruct deftype
++syntax keyword clojureMacro -> ->> .. amap and areduce as-> assert binding bound-fn clojure.core/-> clojure.core/->> clojure.core/.. clojure.core/amap clojure.core/and clojure.core/areduce clojure.core/as-> clojure.core/assert clojure.core/binding clojure.core/bound-fn clojure.core/comment clojure.core/declare clojure.core/delay clojure.core/dosync clojure.core/doto clojure.core/extend-protocol clojure.core/extend-type clojure.core/for clojure.core/future clojure.core/gen-class clojure.core/gen-interface clojure.core/import clojure.core/io! clojure.core/lazy-cat clojure.core/lazy-seq clojure.core/letfn clojure.core/locking clojure.core/memfn clojure.core/ns clojure.core/or clojure.core/proxy clojure.core/proxy-super clojure.core/pvalues clojure.core/refer-clojure clojure.core/reify clojure.core/some-> clojure.core/some->> clojure.core/sync clojure.core/time clojure.core/with-bindings clojure.core/with-in-str clojure.core/with-loading-context clojure.core/with-local-vars clojure.core/with-open clojure.core/with-out-str clojure.core/with-precision clojure.core/with-redefs comment declare delay dosync doto extend-protocol extend-type for future gen-class gen-interface import io! lazy-cat lazy-seq letfn locking memfn ns or proxy proxy-super pvalues refer-clojure reify some-> some->> sync time with-bindings with-in-str with-loading-context with-local-vars with-open with-out-str with-precision with-redefs
++syntax keyword clojureFunc * *' + +' - -' ->ArrayChunk ->Vec ->VecNode ->VecSeq -cache-protocol-fn -reset-methods / < <= = == > >= accessor aclone add-classpath add-watch agent agent-error agent-errors aget alength alias all-ns alter alter-meta! alter-var-root ancestors apply array-map aset aset-boolean aset-byte aset-char aset-double aset-float aset-int aset-long aset-short assoc assoc! assoc-in associative? atom await await-for await1 bases bean bigdec bigint biginteger bit-and bit-and-not bit-clear bit-flip bit-not bit-or bit-set bit-shift-left bit-shift-right bit-test bit-xor boolean boolean-array booleans bound-fn* bound? butlast byte byte-array bytes cast char char-array char? chars chunk chunk-append chunk-buffer chunk-cons chunk-first chunk-next chunk-rest chunked-seq? class class? clear-agent-errors clojure-version clojure.core/* clojure.core/*' clojure.core/+ clojure.core/+' clojure.core/- clojure.core/-' clojure.core/->ArrayChunk clojure.core/->Vec clojure.core/->VecNode clojure.core/->VecSeq clojure.core/-cache-protocol-fn clojure.core/-reset-methods clojure.core// clojure.core/< clojure.core/<= clojure.core/= clojure.core/== clojure.core/> clojure.core/>= clojure.core/accessor clojure.core/aclone clojure.core/add-classpath clojure.core/add-watch clojure.core/agent clojure.core/agent-error clojure.core/agent-errors clojure.core/aget clojure.core/alength clojure.core/alias clojure.core/all-ns clojure.core/alter clojure.core/alter-meta! clojure.core/alter-var-root clojure.core/ancestors clojure.core/apply clojure.core/array-map clojure.core/aset clojure.core/aset-boolean clojure.core/aset-byte clojure.core/aset-char clojure.core/aset-double clojure.core/aset-float clojure.core/aset-int clojure.core/aset-long clojure.core/aset-short clojure.core/assoc clojure.core/assoc! clojure.core/assoc-in clojure.core/associative? clojure.core/atom clojure.core/await clojure.core/await-for clojure.core/await1 clojure.core/bases clojure.core/bean clojure.core/bigdec clojure.core/bigint clojure.core/biginteger clojure.core/bit-and clojure.core/bit-and-not clojure.core/bit-clear clojure.core/bit-flip clojure.core/bit-not clojure.core/bit-or clojure.core/bit-set clojure.core/bit-shift-left clojure.core/bit-shift-right clojure.core/bit-test clojure.core/bit-xor clojure.core/boolean clojure.core/boolean-array clojure.core/booleans clojure.core/bound-fn* clojure.core/bound? clojure.core/butlast clojure.core/byte clojure.core/byte-array clojure.core/bytes clojure.core/cast clojure.core/char clojure.core/char-array clojure.core/char? clojure.core/chars clojure.core/chunk clojure.core/chunk-append clojure.core/chunk-buffer clojure.core/chunk-cons clojure.core/chunk-first clojure.core/chunk-next clojure.core/chunk-rest clojure.core/chunked-seq? clojure.core/class clojure.core/class? clojure.core/clear-agent-errors clojure.core/clojure-version clojure.core/coll? clojure.core/commute clojure.core/comp clojure.core/comparator clojure.core/compare clojure.core/compare-and-set! clojure.core/compile clojure.core/complement clojure.core/concat clojure.core/conj clojure.core/conj! clojure.core/cons clojure.core/constantly clojure.core/construct-proxy clojure.core/contains? clojure.core/count clojure.core/counted? clojure.core/create-ns clojure.core/create-struct clojure.core/cycle clojure.core/dec clojure.core/dec' clojure.core/decimal? clojure.core/delay? clojure.core/deliver clojure.core/denominator clojure.core/deref clojure.core/derive clojure.core/descendants clojure.core/destructure clojure.core/disj clojure.core/disj! clojure.core/dissoc clojure.core/dissoc! clojure.core/distinct clojure.core/distinct? clojure.core/double clojure.core/double-array clojure.core/doubles clojure.core/drop clojure.core/drop-last clojure.core/drop-while clojure.core/empty clojure.core/empty? clojure.core/ensure clojure.core/enumeration-seq clojure.core/error-handler clojure.core/error-mode clojure.core/eval clojure.core/even? clojure.core/every-pred clojure.core/every? clojure.core/ex-data clojure.core/ex-info clojure.core/extend clojure.core/extenders clojure.core/extends? clojure.core/false? clojure.core/ffirst clojure.core/file-seq clojure.core/filter clojure.core/filterv clojure.core/find clojure.core/find-keyword clojure.core/find-ns clojure.core/find-protocol-impl clojure.core/find-protocol-method clojure.core/find-var clojure.core/first clojure.core/flatten clojure.core/float clojure.core/float-array clojure.core/float? clojure.core/floats clojure.core/flush clojure.core/fn? clojure.core/fnext clojure.core/fnil clojure.core/force clojure.core/format clojure.core/frequencies clojure.core/future-call clojure.core/future-cancel clojure.core/future-cancelled? clojure.core/future-done? clojure.core/future? clojure.core/gensym clojure.core/get clojure.core/get-in clojure.core/get-method clojure.core/get-proxy-class clojure.core/get-thread-bindings clojure.core/get-validator clojure.core/group-by clojure.core/hash clojure.core/hash-combine clojure.core/hash-map clojure.core/hash-set clojure.core/identical? clojure.core/identity clojure.core/ifn? clojure.core/in-ns clojure.core/inc clojure.core/inc' clojure.core/init-proxy clojure.core/instance? clojure.core/int clojure.core/int-array clojure.core/integer? clojure.core/interleave clojure.core/intern clojure.core/interpose clojure.core/into clojure.core/into-array clojure.core/ints clojure.core/isa? clojure.core/iterate clojure.core/iterator-seq clojure.core/juxt clojure.core/keep clojure.core/keep-indexed clojure.core/key clojure.core/keys clojure.core/keyword clojure.core/keyword? clojure.core/last clojure.core/line-seq clojure.core/list clojure.core/list* clojure.core/list? clojure.core/load clojure.core/load-file clojure.core/load-reader clojure.core/load-string clojure.core/loaded-libs clojure.core/long clojure.core/long-array clojure.core/longs clojure.core/macroexpand clojure.core/macroexpand-1 clojure.core/make-array clojure.core/make-hierarchy clojure.core/map clojure.core/map-indexed clojure.core/map? clojure.core/mapcat clojure.core/mapv clojure.core/max clojure.core/max-key clojure.core/memoize clojure.core/merge clojure.core/merge-with clojure.core/meta clojure.core/method-sig clojure.core/methods clojure.core/min clojure.core/min-key clojure.core/mod clojure.core/munge clojure.core/name clojure.core/namespace clojure.core/namespace-munge clojure.core/neg? clojure.core/newline clojure.core/next clojure.core/nfirst clojure.core/nil? clojure.core/nnext clojure.core/not clojure.core/not-any? clojure.core/not-empty clojure.core/not-every? clojure.core/not= clojure.core/ns-aliases clojure.core/ns-imports clojure.core/ns-interns clojure.core/ns-map clojure.core/ns-name clojure.core/ns-publics clojure.core/ns-refers clojure.core/ns-resolve clojure.core/ns-unalias clojure.core/ns-unmap clojure.core/nth clojure.core/nthnext clojure.core/nthrest clojure.core/num clojure.core/number? clojure.core/numerator clojure.core/object-array clojure.core/odd? clojure.core/parents clojure.core/partial clojure.core/partition clojure.core/partition-all clojure.core/partition-by clojure.core/pcalls clojure.core/peek clojure.core/persistent! clojure.core/pmap clojure.core/pop clojure.core/pop! clojure.core/pop-thread-bindings clojure.core/pos? clojure.core/pr clojure.core/pr-str clojure.core/prefer-method clojure.core/prefers clojure.core/print clojure.core/print-ctor clojure.core/print-simple clojure.core/print-str clojure.core/printf clojure.core/println clojure.core/println-str clojure.core/prn clojure.core/prn-str clojure.core/promise clojure.core/proxy-call-with-super clojure.core/proxy-mappings clojure.core/proxy-name clojure.core/push-thread-bindings clojure.core/quot clojure.core/rand clojure.core/rand-int clojure.core/rand-nth clojure.core/range clojure.core/ratio? clojure.core/rational? clojure.core/rationalize clojure.core/re-find clojure.core/re-groups clojure.core/re-matcher clojure.core/re-matches clojure.core/re-pattern clojure.core/re-seq clojure.core/read clojure.core/read-line clojure.core/read-string clojure.core/realized? clojure.core/reduce clojure.core/reduce-kv clojure.core/reduced clojure.core/reduced? clojure.core/reductions clojure.core/ref clojure.core/ref-history-count clojure.core/ref-max-history clojure.core/ref-min-history clojure.core/ref-set clojure.core/refer clojure.core/release-pending-sends clojure.core/rem clojure.core/remove clojure.core/remove-all-methods clojure.core/remove-method clojure.core/remove-ns clojure.core/remove-watch clojure.core/repeat clojure.core/repeatedly clojure.core/replace clojure.core/replicate clojure.core/require clojure.core/reset! clojure.core/reset-meta! clojure.core/resolve clojure.core/rest clojure.core/restart-agent clojure.core/resultset-seq clojure.core/reverse clojure.core/reversible? clojure.core/rseq clojure.core/rsubseq clojure.core/satisfies? clojure.core/second clojure.core/select-keys clojure.core/send clojure.core/send-off clojure.core/send-via clojure.core/seq clojure.core/seq? clojure.core/seque clojure.core/sequence clojure.core/sequential? clojure.core/set clojure.core/set-agent-send-executor! clojure.core/set-agent-send-off-executor! clojure.core/set-error-handler! clojure.core/set-error-mode! clojure.core/set-validator! clojure.core/set? clojure.core/short clojure.core/short-array clojure.core/shorts clojure.core/shuffle clojure.core/shutdown-agents clojure.core/slurp clojure.core/some clojure.core/some-fn clojure.core/sort clojure.core/sort-by clojure.core/sorted-map clojure.core/sorted-map-by clojure.core/sorted-set clojure.core/sorted-set-by clojure.core/sorted? clojure.core/special-symbol? clojure.core/spit clojure.core/split-at clojure.core/split-with clojure.core/str clojure.core/string? clojure.core/struct clojure.core/struct-map clojure.core/subs clojure.core/subseq clojure.core/subvec clojure.core/supers clojure.core/swap! clojure.core/symbol clojure.core/symbol? clojure.core/take clojure.core/take-last clojure.core/take-nth clojure.core/take-while clojure.core/test clojure.core/the-ns clojure.core/thread-bound? clojure.core/to-array clojure.core/to-array-2d clojure.core/trampoline clojure.core/transient clojure.core/tree-seq clojure.core/true? clojure.core/type clojure.core/unchecked-add clojure.core/unchecked-add-int clojure.core/unchecked-byte clojure.core/unchecked-char clojure.core/unchecked-dec clojure.core/unchecked-dec-int clojure.core/unchecked-divide-int clojure.core/unchecked-double clojure.core/unchecked-float clojure.core/unchecked-inc clojure.core/unchecked-inc-int clojure.core/unchecked-int clojure.core/unchecked-long clojure.core/unchecked-multiply clojure.core/unchecked-multiply-int clojure.core/unchecked-negate clojure.core/unchecked-negate-int clojure.core/unchecked-remainder-int clojure.core/unchecked-short clojure.core/unchecked-subtract clojure.core/unchecked-subtract-int clojure.core/underive clojure.core/update-in clojure.core/update-proxy clojure.core/use clojure.core/val clojure.core/vals clojure.core/var-get clojure.core/var-set clojure.core/var? clojure.core/vary-meta clojure.core/vec clojure.core/vector clojure.core/vector-of clojure.core/vector? clojure.core/with-bindings* clojure.core/with-meta clojure.core/with-redefs-fn clojure.core/xml-seq clojure.core/zero? clojure.core/zipmap coll? commute comp comparator compare compare-and-set! compile complement concat conj conj! cons constantly construct-proxy contains? count counted? create-ns create-struct cycle dec dec' decimal? delay? deliver denominator deref derive descendants destructure disj disj! dissoc dissoc! distinct distinct? double double-array doubles drop drop-last drop-while empty empty? ensure enumeration-seq error-handler error-mode eval even? every-pred every? ex-data ex-info extend extenders extends? false? ffirst file-seq filter filterv find find-keyword find-ns find-protocol-impl find-protocol-method find-var first flatten float float-array float? floats flush fn? fnext fnil force format frequencies future-call future-cancel future-cancelled? future-done? future? gensym get get-in get-method get-proxy-class get-thread-bindings get-validator group-by hash hash-combine hash-map hash-set identical? identity ifn? in-ns inc inc' init-proxy instance? int int-array integer? interleave intern interpose into into-array ints isa? iterate iterator-seq juxt keep keep-indexed key keys keyword keyword? last line-seq list list* list? load load-file load-reader load-string loaded-libs long long-array longs macroexpand macroexpand-1 make-array make-hierarchy map map-indexed map? mapcat mapv max max-key memoize merge merge-with meta method-sig methods min min-key mod munge name namespace namespace-munge neg? newline next nfirst nil? nnext not not-any? not-empty not-every? not= ns-aliases ns-imports ns-interns ns-map ns-name ns-publics ns-refers ns-resolve ns-unalias ns-unmap nth nthnext nthrest num number? numerator object-array odd? parents partial partition partition-all partition-by pcalls peek persistent! pmap pop pop! pop-thread-bindings pos? pr pr-str prefer-method prefers print print-ctor print-simple print-str printf println println-str prn prn-str promise proxy-call-with-super proxy-mappings proxy-name push-thread-bindings quot rand rand-int rand-nth range ratio? rational? rationalize re-find re-groups re-matcher re-matches re-pattern re-seq read read-line read-string realized? reduce reduce-kv reduced reduced? reductions ref ref-history-count ref-max-history ref-min-history ref-set refer release-pending-sends rem remove remove-all-methods remove-method remove-ns remove-watch repeat repeatedly replace replicate require reset! reset-meta! resolve rest restart-agent resultset-seq reverse reversible? rseq rsubseq satisfies? second select-keys send send-off send-via seq seq? seque sequence sequential? set set-agent-send-executor! set-agent-send-off-executor! set-error-handler! set-error-mode! set-validator! set? short short-array shorts shuffle shutdown-agents slurp some some-fn sort sort-by sorted-map sorted-map-by sorted-set sorted-set-by sorted? special-symbol? spit split-at split-with str string? struct struct-map subs subseq subvec supers swap! symbol symbol? take take-last take-nth take-while test the-ns thread-bound? to-array to-array-2d trampoline transient tree-seq true? type unchecked-add unchecked-add-int unchecked-byte unchecked-char unchecked-dec unchecked-dec-int unchecked-divide-int unchecked-double unchecked-float unchecked-inc unchecked-inc-int unchecked-int unchecked-long unchecked-multiply unchecked-multiply-int unchecked-negate unchecked-negate-int unchecked-remainder-int unchecked-short unchecked-subtract unchecked-subtract-int underive update-in update-proxy use val vals var-get var-set var? vary-meta vec vector vector-of vector? with-bindings* with-meta with-redefs-fn xml-seq zero? zipmap
++syntax keyword clojureVariable *1 *2 *3 *agent* *allow-unresolved-vars* *assert* *clojure-version* *command-line-args* *compile-files* *compile-path* *compiler-options* *data-readers* *default-data-reader-fn* *e *err* *file* *flush-on-newline* *fn-loader* *in* *math-context* *ns* *out* *print-dup* *print-length* *print-level* *print-meta* *print-readably* *read-eval* *read-whitelist* *source-path* *unchecked-math* *use-context-classloader* *verbose-defrecords* *warn-on-reflection* EMPTY-NODE char-escape-string char-name-string clojure.core/*1 clojure.core/*2 clojure.core/*3 clojure.core/*agent* clojure.core/*allow-unresolved-vars* clojure.core/*assert* clojure.core/*clojure-version* clojure.core/*command-line-args* clojure.core/*compile-files* clojure.core/*compile-path* clojure.core/*compiler-options* clojure.core/*data-readers* clojure.core/*default-data-reader-fn* clojure.core/*e clojure.core/*err* clojure.core/*file* clojure.core/*flush-on-newline* clojure.core/*fn-loader* clojure.core/*in* clojure.core/*math-context* clojure.core/*ns* clojure.core/*out* clojure.core/*print-dup* clojure.core/*print-length* clojure.core/*print-level* clojure.core/*print-meta* clojure.core/*print-readably* clojure.core/*read-eval* clojure.core/*read-whitelist* clojure.core/*source-path* clojure.core/*unchecked-math* clojure.core/*use-context-classloader* clojure.core/*verbose-defrecords* clojure.core/*warn-on-reflection* clojure.core/EMPTY-NODE clojure.core/char-escape-string clojure.core/char-name-string clojure.core/default-data-readers clojure.core/primitives-classnames clojure.core/print-dup clojure.core/print-method clojure.core/unquote clojure.core/unquote-splicing default-data-readers primitives-classnames print-dup print-method unquote unquote-splicing
++
++" Keywords are symbols:
++"   static Pattern symbolPat = Pattern.compile("[:]?([\\D&&[^/]].*/)?([\\D&&[^/]][^/]*)");
++" But they:
++"   * Must not end in a : or /
++"   * Must not have two adjacent colons except at the beginning
++"   * Must not contain any reader metacharacters except for ' and #
++syntax match clojureKeyword "\v:{1,2}%([^ \n\r\t()\[\]{}";@^`~\\%/]+/)*[^ \n\r\t()\[\]{}";@^`~\\%/]+:@<!"
++
++syntax region clojureString start=/L\="/ skip=/\\\\\|\\"/ end=/"/
++
++syntax match clojureCharacter "\\."
++syntax match clojureCharacter "\\o[0-7]\{3\}"
++syntax match clojureCharacter "\\u[0-9]\{4\}"
++syntax match clojureCharacter "\\space"
++syntax match clojureCharacter "\\tab"
++syntax match clojureCharacter "\\newline"
++syntax match clojureCharacter "\\return"
++syntax match clojureCharacter "\\backspace"
++syntax match clojureCharacter "\\formfeed"
++
++let s:radixChars = "0123456789abcdefghijklmnopqrstuvwxyz"
++for s:radix in range(2, 36)
++    execute 'syntax match clojureNumber "\c\<-\?' . s:radix . 'r[' . strpart(s:radixChars, 0, s:radix) . ']\+\>"'
++endfor
++unlet! s:radixChars s:radix
++
++syntax match clojureNumber "\<-\=[0-9]\+\(\.[0-9]*\)\=\(M\|\([eE][-+]\?[0-9]\+\)\)\?\>"
++syntax match clojureNumber "\<-\=[0-9]\+N\?\>"
++syntax match clojureNumber "\<-\=0x[0-9a-fA-F]\+\>"
++syntax match clojureNumber "\<-\=[0-9]\+/[0-9]\+\>"
++
++syntax match clojureVarArg "&"
++
++syntax match clojureQuote "'"
++syntax match clojureQuote "`"
++syntax match clojureUnquote "\~"
++syntax match clojureUnquote "\~@"
++syntax match clojureMeta "\^"
++syntax match clojureDeref "@"
++syntax match clojureAnonArg "%\(\d\|&\)\?"
++syntax match clojureDispatch "\v#[\^\'\=\<]?"
++
++syntax region clojureRegexp start=/L\=\#"/ skip=/\\\\\|\\"/ end=/"/
++
++syntax match clojureComment ";.*$" contains=clojureTodo,@Spell
++syntax match clojureComment "#!.*$"
++syntax match clojureComment "#_"
++
++syntax keyword clojureTodo contained FIXME XXX TODO FIXME: XXX: TODO:
++
++syntax region clojureSexp   matchgroup=clojureParen start="("  matchgroup=clojureParen end=")"  contains=TOP,@Spell
++syntax region clojureVector matchgroup=clojureParen start="\[" matchgroup=clojureParen end="\]" contains=TOP,@Spell
++syntax region clojureMap    matchgroup=clojureParen start="{"  matchgroup=clojureParen end="}"  contains=TOP,@Spell
++
++" Highlight superfluous closing parens, brackets and braces.
++syntax match clojureError "]\|}\|)"
++
++syntax sync fromstart
++
++if version >= 600
++    command -nargs=+ HiLink highlight default link <args>
++else
++    command -nargs=+ HiLink highlight link <args>
++endif
++
++HiLink clojureConstant  Constant
++HiLink clojureBoolean   Boolean
++HiLink clojureCharacter Character
++HiLink clojureKeyword   Keyword
++HiLink clojureNumber    Number
++HiLink clojureString    String
++HiLink clojureRegexp    Constant
++
++HiLink clojureVariable  Identifier
++HiLink clojureCond      Conditional
++HiLink clojureDefine    Define
++HiLink clojureException Exception
++HiLink clojureFunc      Function
++HiLink clojureMacro     Macro
++HiLink clojureRepeat    Repeat
++
++HiLink clojureSpecial   Special
++HiLink clojureVarArg    Special
++HiLink clojureQuote     SpecialChar
++HiLink clojureUnquote   SpecialChar
++HiLink clojureMeta      SpecialChar
++HiLink clojureDeref     SpecialChar
++HiLink clojureAnonArg   SpecialChar
++HiLink clojureDispatch  SpecialChar
++
++HiLink clojureComment   Comment
++HiLink clojureTodo      Todo
++
++HiLink clojureError     Error
++
++HiLink clojureParen     Delimiter
++
++delcommand HiLink
++
++let b:current_syntax = "clojure"
++
++" vim:sts=4 sw=4 et:
+diff -Naur vim73.orig/runtime/syntax/cmake.vim vim73/runtime/syntax/cmake.vim
+--- vim73.orig/runtime/syntax/cmake.vim	2010-06-03 19:56:12.000000000 +0000
++++ vim73/runtime/syntax/cmake.vim	2013-06-07 17:07:21.925612737 +0000
+@@ -4,7 +4,8 @@
+ " Language:     CMake
+ " Author:       Andy Cedilnik <andy.cedilnik@kitware.com>
+ " Maintainer:   Karthik Krishnan <karthik.krishnan@kitware.com>
+-" Last Change:  $Date: 2008-08-25 14:31:28 $
++" Last Change:  2012 Jun 01
++" 		(Dominique Pelle added @Spell)
+ " Version:      $Revision: 1.10 $
+ "
+ " Licence:      The CMake license applies to this file. See
+@@ -18,10 +19,12 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ syn case ignore
+ syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained
+-syn region cmakeComment start="#" end="$" contains=cmakeTodo
++syn region cmakeComment start="#" end="$" contains=@Spell,cmakeTodo
+ syn region cmakeRegistry start=/\[/ end=/]/
+             \ contained oneline contains=CONTAINED,cmakeTodo,cmakeEscaped
+ syn region cmakeVariableValue start=/\${/ end=/}/
+@@ -78,4 +81,7 @@
+ 
+ let b:current_syntax = "cmake"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ "EOF"
+diff -Naur vim73.orig/runtime/syntax/cpp.vim vim73/runtime/syntax/cpp.vim
+--- vim73.orig/runtime/syntax/cpp.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/cpp.vim	2013-06-07 17:07:22.018945804 +0000
+@@ -1,7 +1,8 @@
+ " Vim syntax file
+ " Language:	C++
+-" Maintainer:	Ken Shan <ccshan@post.harvard.edu>
+-" Last Change:	2002 Jul 15
++" Current Maintainer:	vim-jp (https://github.com/vim-jp/cpp-vim)
++" Previous Maintainer:	Ken Shan <ccshan@post.harvard.edu>
++" Last Change:	2012 Jun 14
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -19,7 +20,7 @@
+   unlet b:current_syntax
+ endif
+ 
+-" C++ extentions
++" C++ extensions
+ syn keyword cppStatement	new delete this friend using
+ syn keyword cppAccess		public protected private
+ syn keyword cppType		inline virtual explicit export bool wchar_t
+@@ -30,9 +31,16 @@
+ syn match cppCast		"\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
+ syn keyword cppStorageClass	mutable
+ syn keyword cppStructure	class typename template namespace
+-syn keyword cppNumber		NPOS
+ syn keyword cppBoolean		true false
+ 
++" C++ 11 extensions
++if !exists("cpp_no_cpp11")
++  syn keyword cppType		override final
++  syn keyword cppExceptions	noexcept
++  syn keyword cppStorageClass	constexpr decltype
++  syn keyword cppConstant	nullptr
++endif
++
+ " The minimum and maximum operators in GNU C++
+ syn match cppMinMax "[<>]?"
+ 
+@@ -52,8 +60,8 @@
+   HiLink cppType		Type
+   HiLink cppStorageClass	StorageClass
+   HiLink cppStructure		Structure
+-  HiLink cppNumber		Number
+   HiLink cppBoolean		Boolean
++  HiLink cppConstant		Constant
+   delcommand HiLink
+ endif
+ 
+diff -Naur vim73.orig/runtime/syntax/crontab.vim vim73/runtime/syntax/crontab.vim
+--- vim73.orig/runtime/syntax/crontab.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/crontab.vim	2013-06-07 17:07:22.055612366 +0000
+@@ -5,8 +5,7 @@
+ " License: This file can be redistribued and/or modified under the same terms
+ "   as Vim itself.
+ " Filenames: /tmp/crontab.* used by "crontab -e"
+-" URL: http://trific.ath.cx/Ftp/vim/syntax/crontab.vim
+-" Last Change: 2006-04-20
++" Last Change: 2012-05-16
+ "
+ " crontab line format:
+ " Minutes   Hours   Days   Months   Days_of_Week   Commands # comments
+@@ -30,7 +29,7 @@
+ syntax keyword crontabDow7 contained sun mon tue wed thu fri sat
+ 
+ syntax region crontabCmd start="\S" end="$" skipwhite contained keepend contains=crontabPercent
+-syntax match crontabCmnt "^\s*#.*"
++syntax match crontabCmnt "^\s*#.*" contains=@Spell
+ syntax match crontabPercent "[^\\]%.*"lc=1 contained
+ 
+ syntax match crontabNick "^\s*@\(reboot\|yearly\|annually\|monthly\|weekly\|daily\|midnight\|hourly\)\>" nextgroup=crontabCmd skipwhite
+diff -Naur vim73.orig/runtime/syntax/csc.vim vim73/runtime/syntax/csc.vim
+--- vim73.orig/runtime/syntax/csc.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/csc.vim	2013-06-07 17:07:22.065612337 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language: Essbase script
+ " Maintainer:	Raul Segura Acevedo <raulseguraaceved@netscape.net>
+-" Last change:	2001 Sep 25
++" Last change:	2011 Dec 25 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+ 	finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " folds: fix/endfix and comments
+ sy	region	EssFold start="\<Fix" end="EndFix" transparent fold
+ 
+@@ -196,4 +199,6 @@
+ 
+ let b:current_syntax = "csc"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/csdl.vim vim73/runtime/syntax/csdl.vim
+--- vim73.orig/runtime/syntax/csdl.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/csdl.vim	2013-06-07 17:07:22.078945633 +0000
+@@ -0,0 +1,536 @@
++" Vim syntax file
++" Language: Curated Stream Definition Language (CSDL)
++" Maintainer: Jacek Artymiak
++" Latest Revision: 25 February 2013
++
++if exists("b:current_syntax")
++  finish
++endif
++
++setlocal iskeyword=.,@,48-57,_,192-255
++syn case ignore 
++
++syn match csdlKeyword "tag "
++syn match csdlKeyword "stream "
++syn match csdlKeyword "return "
++
++syn keyword csdlOperator contains
++syn match csdlOperator "cs contains"
++syn keyword csdlOperator substr
++syn match csdlOperator "cs substr"
++syn keyword csdlOperator contains_any
++syn match csdlOperator "cs contains_any"
++syn keyword csdlOperator any
++syn match csdlOperator "cs any"
++syn keyword csdlOperator contains_near
++syn match csdlOperator "cs contains_near"
++syn keyword csdlOperator exists
++syn keyword csdlOperator in
++syn keyword csdlOperator url_in
++syn match csdlOperator "=="
++syn match csdlOperator "!="
++syn match csdlOperator "cs =="
++syn match csdlOperator "cs !="
++syn match csdlOperator ">"
++syn match csdlOperator ">="
++syn match csdlOperator "<"
++syn match csdlOperator "<="
++syn keyword csdlOperator regex_partial
++syn keyword csdlOperator regex_exact
++syn keyword csdlOperator geo_box
++syn keyword csdlOperator geo_radius
++syn keyword csdlOperator geo_polygon
++
++syn keyword csdlLogicalOperator and
++syn keyword csdlLogicalOperator or
++syn keyword csdlLogicalOperator not
++
++syn match csdlTarget 'reddit\.title'
++syn match csdlTarget 'reddit\.content'
++syn match csdlTarget 'reddit\.contenttype'
++syn match csdlTarget 'reddit\.link'
++syn match csdlTarget 'reddit\.author\.name'
++syn match csdlTarget 'reddit\.author\.link'
++syn match csdlTarget 'reddit\.type'
++syn match csdlTarget 'reddit\.thread'
++syn match csdlTarget 'interaction\.type'
++syn match csdlTarget 'interaction\.title'
++syn match csdlTarget 'interaction\.content'
++syn match csdlTarget 'interaction\.source'
++syn match csdlTarget 'interaction\.geo'
++syn match csdlTarget 'interaction\.link'
++syn match csdlTarget 'interaction\.author\.username'
++syn match csdlTarget 'interaction\.author\.name'
++syn match csdlTarget 'interaction\.author\.id'
++syn match csdlTarget 'interaction\.author\.avatar'
++syn match csdlTarget 'interaction\.author\.link'
++syn match csdlTarget 'interaction\.sample'
++syn match csdlTarget 'links\.title'
++syn match csdlTarget 'links\.url'
++syn keyword csdlTarget links.normalized_url
++syn match csdlTarget 'links\.hops'
++syn match csdlTarget 'links\.code'
++syn match csdlTarget 'links\.domain'
++syn keyword csdlTarget links.retweet_count
++syn match csdlTarget 'links\.age'
++syn keyword csdlTarget links.meta.content_type
++syn match csdlTarget 'links\.meta\.charset'
++syn match csdlTarget 'links\.meta\.lang'
++syn match csdlTarget 'links\.meta\.keywords'
++syn match csdlTarget 'links\.meta\.description'
++syn match csdlTarget 'links\.meta\.newskeywords'
++syn match csdlTarget 'links\.meta\.standout'
++syn match csdlTarget 'links\.meta\.opengraph\.type'
++syn match csdlTarget 'links\.meta\.opengraph\.title'
++syn match csdlTarget 'links\.meta\.opengraph\.image'
++syn match csdlTarget 'links\.meta\.opengraph\.url'
++syn match csdlTarget 'links\.meta\.opengraph\.description'
++syn keyword csdlTarget links.meta.opengraph.site_name
++syn match csdlTarget 'links\.meta\.opengraph\.email'
++syn keyword csdlTarget links.meta.opengraph.phone_number
++syn keyword csdlTarget links.meta.opengraph.fax_number
++syn match csdlTarget 'links\.meta\.opengraph\.geo'
++syn keyword csdlTarget links.meta.opengraph.street_address
++syn match csdlTarget 'links\.meta\.opengraph\.locality'
++syn match csdlTarget 'links\.meta\.opengraph\.region'
++syn keyword csdlTarget links.meta.opengraph.postal_code
++syn match csdlTarget 'links\.meta\.opengraph\.activity'
++syn match csdlTarget 'links\.meta\.opengraph\.sport'
++syn match csdlTarget 'links\.meta\.opengraph\.bar'
++syn match csdlTarget 'links\.meta\.opengraph\.company'
++syn match csdlTarget 'links\.meta\.opengraph\.cafe'
++syn match csdlTarget 'links\.meta\.opengraph\.hotel'
++syn match csdlTarget 'links\.meta\.opengraph\.restaurant'
++syn match csdlTarget 'links\.meta\.opengraph\.cause'
++syn keyword csdlTarget links.meta.opengraph.sports_league
++syn keyword csdlTarget links.meta.opengraph.sports_team
++syn match csdlTarget 'links\.meta\.opengraph\.band'
++syn match csdlTarget 'links\.meta\.opengraph\.government'
++syn keyword csdlTarget links.meta.opengraph.non_profit
++syn match csdlTarget 'links\.meta\.opengraph\.school'
++syn match csdlTarget 'links\.meta\.opengraph\.university'
++syn match csdlTarget 'links\.meta\.opengraph\.actor'
++syn match csdlTarget 'links\.meta\.opengraph\.athlete'
++syn match csdlTarget 'links\.meta\.opengraph\.author'
++syn match csdlTarget 'links\.meta\.opengraph\.director'
++syn match csdlTarget 'links\.meta\.opengraph\.musician'
++syn match csdlTarget 'links\.meta\.opengraph\.politician'
++syn keyword csdlTarget links.meta.opengraph.public_figure
++syn match csdlTarget 'links\.meta\.opengraph\.city'
++syn match csdlTarget 'links\.meta\.opengraph\.country'
++syn match csdlTarget 'links\.meta\.opengraph\.landmark'
++syn keyword csdlTarget links.meta.opengraph.state_province
++syn match csdlTarget 'links\.meta\.opengraph\.album'
++syn match csdlTarget 'links\.meta\.opengraph\.book'
++syn match csdlTarget 'links\.meta\.opengraph\.drink'
++syn match csdlTarget 'links\.meta\.opengraph\.food'
++syn match csdlTarget 'links\.meta\.opengraph\.game'
++syn match csdlTarget 'links\.meta\.opengraph\.movie'
++syn match csdlTarget 'links\.meta\.opengraph\.product'
++syn match csdlTarget 'links\.meta\.opengraph\.song'
++syn keyword csdlTarget links.meta.opengraph.tv_show
++syn match csdlTarget 'links\.meta\.opengraph\.blog'
++syn match csdlTarget 'links\.meta\.opengraph\.website'
++syn match csdlTarget 'links\.meta\.opengraph\.article'
++syn match csdlTarget 'links\.meta\.twitter\.card'
++syn match csdlTarget 'links\.meta\.twitter\.site'
++syn keyword csdlTarget links.meta.twitter.site_id
++syn match csdlTarget 'links\.meta\.twitter\.creator'
++syn keyword csdlTarget links.meta.twitter.creator_id
++syn match csdlTarget 'links\.meta\.twitter\.url'
++syn match csdlTarget 'links\.meta\.twitter\.description'
++syn match csdlTarget 'links\.meta\.twitter\.title'
++syn match csdlTarget 'links\.meta\.twitter\.image'
++syn keyword csdlTarget links.meta.twitter.image_width
++syn keyword csdlTarget links.meta.twitter.image_height
++syn match csdlTarget 'links\.meta\.twitter\.player'
++syn keyword csdlTarget links.meta.twitter.player_width
++syn keyword csdlTarget links.meta.twitter.player_height
++syn keyword csdlTarget links.meta.twitter.player_stream
++syn keyword csdlTarget links.meta.twitter.player_stream_content_type
++syn match csdlTarget 'myspace\.link'
++syn match csdlTarget 'myspace\.content'
++syn match csdlTarget 'myspace\.contenttype'
++syn match csdlTarget 'myspace\.category'
++syn match csdlTarget 'myspace\.author\.username'
++syn match csdlTarget 'myspace\.author\.name'
++syn match csdlTarget 'myspace\.author\.id'
++syn match csdlTarget 'myspace\.author\.link'
++syn match csdlTarget 'myspace\.author\.avatar'
++syn match csdlTarget 'myspace\.geo'
++syn match csdlTarget 'myspace\.verb'
++syn match csdlTarget 'newscred\.type'
++syn match csdlTarget 'newscred\.article\.domain'
++syn match csdlTarget 'newscred\.video\.domain'
++syn match csdlTarget 'newscred\.article\.topics'
++syn match csdlTarget 'newscred\.video\.topics'
++syn match csdlTarget 'newscred\.article\.category'
++syn match csdlTarget 'newscred\.video\.category'
++syn match csdlTarget 'newscred\.article\.title'
++syn match csdlTarget 'newscred\.video\.title'
++syn match csdlTarget 'newscred\.article\.content'
++syn match csdlTarget 'newscred\.article\.fulltext'
++syn match csdlTarget 'newscred\.article\.authors'
++syn match csdlTarget 'newscred\.image\.caption'
++syn match csdlTarget 'newscred\.video\.caption'
++syn match csdlTarget 'newscred\.image\.attribution\.text'
++syn match csdlTarget 'newscred\.image\.attribution\.link'
++syn match csdlTarget 'newscred\.source\.name'
++syn match csdlTarget 'newscred\.source\.link'
++syn match csdlTarget 'newscred\.source\.domain'
++syn keyword csdlTarget newscred.source.media_type
++syn keyword csdlTarget newscred.source.company_type
++syn match csdlTarget 'newscred\.source\.country'
++syn match csdlTarget 'newscred\.source\.circulation'
++syn match csdlTarget 'newscred\.source\.founded'
++syn match csdlTarget 'imdb\.title'
++syn match csdlTarget 'imdb\.content'
++syn match csdlTarget 'imdb\.contenttype'
++syn match csdlTarget 'imdb\.link'
++syn match csdlTarget 'imdb\.author\.name'
++syn match csdlTarget 'imdb\.author\.link'
++syn match csdlTarget 'imdb\.type'
++syn match csdlTarget 'imdb\.thread'
++syn match csdlTarget 'amazon\.title'
++syn match csdlTarget 'amazon\.content'
++syn match csdlTarget 'amazon\.contenttype'
++syn match csdlTarget 'amazon\.link'
++syn match csdlTarget 'amazon\.author\.name'
++syn match csdlTarget 'amazon\.author\.link'
++syn match csdlTarget 'amazon\.type'
++syn match csdlTarget 'amazon\.thread'
++syn match csdlTarget 'salience\.content\.sentiment'
++syn match csdlTarget 'salience\.content\.topics'
++syn match csdlTarget 'salience\.title\.sentiment'
++syn match csdlTarget 'salience\.title\.topics'
++syn match csdlTarget 'salience\.content\.entities\.name'
++syn match csdlTarget 'salience\.content\.entities\.type'
++syn match csdlTarget 'salience\.title\.entities\.name'
++syn match csdlTarget 'salience\.title\.entities\.type'
++syn match csdlTarget 'klout\.score'
++syn match csdlTarget 'klout\.network'
++syn match csdlTarget 'klout\.amplification'
++syn keyword csdlTarget klout.true_reach
++syn match csdlTarget 'klout\.topics'
++syn match csdlTarget 'wikipedia\.author\.talk'
++syn match csdlTarget 'wikipedia\.author\.contributions'
++syn match csdlTarget 'wikipedia\.author\.username'
++syn match csdlTarget 'wikipedia\.body'
++syn match csdlTarget 'wikipedia\.title'
++syn match csdlTarget 'wikipedia\.images'
++syn match csdlTarget 'wikipedia\.categories'
++syn match csdlTarget 'wikipedia\.externallinks'
++syn match csdlTarget 'wikipedia\.ns'
++syn match csdlTarget 'wikipedia\.namespace'
++syn match csdlTarget 'wikipedia\.pageid'
++syn match csdlTarget 'wikipedia\.parentid'
++syn match csdlTarget 'wikipedia\.oldlen'
++syn match csdlTarget 'wikipedia\.newlen'
++syn match csdlTarget 'wikipedia\.changetype'
++syn match csdlTarget 'wikipedia\.diff\.from'
++syn match csdlTarget 'wikipedia\.diff\.to'
++syn match csdlTarget 'wikipedia\.diff\.changes\.added'
++syn match csdlTarget 'wikipedia\.diff\.changes\.removed'
++syn keyword csdlTarget demographic.twitter_activity
++syn match csdlTarget 'demographic\.location\.country'
++syn keyword csdlTarget demographic.location.us_state
++syn match csdlTarget 'demographic\.location\.city'
++syn match csdlTarget 'demographic\.type'
++syn match csdlTarget 'demographic\.sex'
++syn match csdlTarget 'demographic\.status\.relationship'
++syn match csdlTarget 'demographic\.status\.work'
++syn keyword csdlTarget demographic.likes_and_interests
++syn keyword csdlTarget demographic.first_language
++syn match csdlTarget 'demographic\.professions'
++syn match csdlTarget 'demographic\.services'
++syn keyword csdlTarget demographic.large_accounts_followed
++syn keyword csdlTarget demographic.age_range.start
++syn keyword csdlTarget demographic.age_range.end
++syn match csdlTarget 'demographic\.income\.start'
++syn match csdlTarget 'demographic\.income\.end'
++syn keyword csdlTarget demographic.main_street.dressed_by
++syn keyword csdlTarget demographic.main_street.shop_at
++syn keyword csdlTarget demographic.main_street.eat_and_drink_at
++syn match csdlTarget 'demographic\.accounts\.categories'
++syn match csdlTarget 'tumblr\.activity'
++syn match csdlTarget 'tumblr\.source\.blogid'
++syn match csdlTarget 'tumblr\.dest\.blogid'
++syn match csdlTarget 'tumblr\.dest\.postid'
++syn match csdlTarget 'tumblr\.root\.blogid'
++syn match csdlTarget 'tumblr\.root\.postid'
++syn match csdlTarget 'tumblr\.blogid'
++syn keyword csdlTarget tumblr.blog_name
++syn match csdlTarget 'tumblr\.type'
++syn match csdlTarget 'tumblr\.title'
++syn match csdlTarget 'tumblr\.body'
++syn match csdlTarget 'tumblr\.text'
++syn match csdlTarget 'tumblr\.tags'
++syn keyword csdlTarget tumblr.track_name
++syn match csdlTarget 'tumblr\.album'
++syn match csdlTarget 'tumblr\.link'
++syn match csdlTarget 'tumblr\.meta\.url'
++syn match csdlTarget 'tumblr\.meta\.type'
++syn match csdlTarget 'tumblr\.meta\.description'
++syn keyword csdlTarget tumblr.meta.likes_local
++syn keyword csdlTarget tumblr.meta.likes_global
++syn keyword csdlTarget tumblr.meta.reblogged_global
++syn match csdlTarget 'demographic\.gender'
++syn match csdlTarget 'flickr\.title'
++syn match csdlTarget 'flickr\.content'
++syn match csdlTarget 'flickr\.contenttype'
++syn match csdlTarget 'flickr\.link'
++syn match csdlTarget 'flickr\.author\.name'
++syn match csdlTarget 'flickr\.author\.link'
++syn match csdlTarget 'flickr\.author\.username'
++syn match csdlTarget 'flickr\.type'
++syn match csdlTarget 'flickr\.thread'
++syn match csdlTarget 'twitter\.text'
++syn match csdlTarget 'twitter\.source'
++syn match csdlTarget 'twitter\.mentions'
++syn keyword csdlTarget twitter.mention_ids
++syn match csdlTarget 'twitter\.links'
++syn match csdlTarget 'twitter\.domains'
++syn keyword csdlTarget twitter.in_reply_to_screen_name
++syn keyword csdlTarget twitter.in_reply_to_user_id
++syn keyword csdlTarget twitter.in_reply_to_status_id
++syn keyword csdlTarget twitter.filter_level
++syn match csdlTarget 'twitter\.lang'
++syn match csdlTarget 'twitter\.geo'
++syn match csdlTarget 'twitter\.user\.description'
++syn match csdlTarget 'twitter\.user\.location'
++syn keyword csdlTarget twitter.user.statuses_count
++syn keyword csdlTarget twitter.user.followers_count
++syn keyword csdlTarget twitter.user.follower_ratio
++syn keyword csdlTarget twitter.user.profile_age
++syn keyword csdlTarget twitter.user.friends_count
++syn keyword csdlTarget twitter.user.screen_name
++syn match csdlTarget 'twitter\.user\.lang'
++syn keyword csdlTarget twitter.user.time_zone
++syn match csdlTarget 'twitter\.user\.name'
++syn match csdlTarget 'twitter\.user\.id'
++syn keyword csdlTarget twitter.user.listed_count
++syn match csdlTarget 'twitter\.user\.url'
++syn match csdlTarget 'twitter\.user\.verified'
++syn keyword csdlTarget twitter.place.place_type
++syn match csdlTarget 'twitter\.place\.country'
++syn keyword csdlTarget twitter.place.country_code
++syn keyword csdlTarget twitter.place.full_name
++syn match csdlTarget 'twitter\.place\.name'
++syn match csdlTarget 'twitter\.place\.url'
++syn match csdlTarget 'twitter\.place\.attributes\.locality'
++syn match csdlTarget 'twitter\.place\.attributes\.region'
++syn keyword csdlTarget twitter.place.attributes.street_address
++syn match csdlTarget 'twitter\.status'
++syn match csdlTarget 'twitter\.retweet\.text'
++syn match csdlTarget 'twitter\.retweet\.elapsed'
++syn match csdlTarget 'twitter\.retweet\.source'
++syn keyword csdlTarget twitter.retweet.filter_level
++syn match csdlTarget 'twitter\.retweet\.lang'
++syn match csdlTarget 'twitter\.retweet\.user\.description'
++syn match csdlTarget 'twitter\.retweet\.user\.location'
++syn keyword csdlTarget twitter.retweet.user.statuses_count
++syn keyword csdlTarget twitter.retweet.user.followers_count
++syn keyword csdlTarget twitter.retweet.user.follower_ratio
++syn keyword csdlTarget twitter.retweet.user.profile_age
++syn keyword csdlTarget twitter.retweet.user.friends_count
++syn keyword csdlTarget twitter.retweet.user.screen_name
++syn match csdlTarget 'twitter\.retweet\.user\.lang'
++syn keyword csdlTarget twitter.retweet.user.time_zone
++syn match csdlTarget 'twitter\.retweet\.user\.name'
++syn match csdlTarget 'twitter\.retweet\.user\.id'
++syn keyword csdlTarget twitter.retweet.user.listed_count
++syn match csdlTarget 'twitter\.retweet\.user\.url'
++syn match csdlTarget 'twitter\.retweet\.user\.verified'
++syn match csdlTarget 'twitter\.retweeted\.id'
++syn match csdlTarget 'twitter\.retweeted\.source'
++syn keyword csdlTarget twitter.retweeted.in_reply_to_screen_name
++syn keyword csdlTarget twitter.retweeted.in_reply_to_user_id_str
++syn keyword csdlTarget twitter.retweeted.in_reply_to_status_id
++syn match csdlTarget 'twitter\.retweet\.count'
++syn match csdlTarget 'twitter\.retweet\.mentions'
++syn keyword csdlTarget twitter.retweet.mention_ids
++syn match csdlTarget 'twitter\.retweet\.links'
++syn match csdlTarget 'twitter\.retweet\.domains'
++syn match csdlTarget 'twitter\.retweeted\.user\.description'
++syn match csdlTarget 'twitter\.retweeted\.user\.location'
++syn keyword csdlTarget twitter.retweeted.user.statuses_count
++syn keyword csdlTarget twitter.retweeted.user.followers_count
++syn keyword csdlTarget twitter.retweeted.user.follower_ratio
++syn keyword csdlTarget twitter.retweeted.user.profile_age
++syn keyword csdlTarget twitter.retweeted.user.friends_count
++syn keyword csdlTarget twitter.retweeted.user.screen_name
++syn match csdlTarget 'twitter\.retweeted\.user\.lang'
++syn keyword csdlTarget twitter.retweeted.user.time_zone
++syn match csdlTarget 'twitter\.retweeted\.user\.name'
++syn match csdlTarget 'twitter\.retweeted\.user\.id'
++syn keyword csdlTarget twitter.retweeted.user.listed_count
++syn match csdlTarget 'twitter\.retweeted\.user\.url'
++syn match csdlTarget 'twitter\.retweeted\.user\.verified'
++syn match csdlTarget 'twitter\.retweeted\.geo'
++syn keyword csdlTarget twitter.retweeted.place.place_type
++syn match csdlTarget 'twitter\.retweeted\.place\.country'
++syn keyword csdlTarget twitter.retweeted.place.country_code
++syn keyword csdlTarget twitter.retweeted.place.full_name
++syn match csdlTarget 'twitter\.retweeted\.place\.name'
++syn match csdlTarget 'twitter\.retweeted\.place\.url'
++syn match csdlTarget 'twitter\.retweeted\.place\.attributes'
++syn match csdlTarget 'twitter\.hashtags'
++syn match csdlTarget 'twitter\.retweet\.hashtags'
++syn match csdlTarget 'twitter\.media\.type'
++syn keyword csdlTarget twitter.media.media_url
++syn keyword csdlTarget twitter.media.display_url
++syn match csdlTarget 'twitter\.retweet\.media\.type'
++syn keyword csdlTarget twitter.retweet.media.media_url
++syn keyword csdlTarget twitter.retweet.media.display_url
++syn match csdlTarget 'blog\.title'
++syn match csdlTarget 'blog\.content'
++syn match csdlTarget 'blog\.contenttype'
++syn match csdlTarget 'blog\.link'
++syn match csdlTarget 'blog\.domain'
++syn match csdlTarget 'blog\.author\.name'
++syn match csdlTarget 'blog\.author\.link'
++syn match csdlTarget 'blog\.author\.avatar'
++syn match csdlTarget 'blog\.author\.username'
++syn match csdlTarget 'blog\.type'
++syn match csdlTarget 'blog\.post\.link'
++syn match csdlTarget 'blog\.post\.title'
++syn match csdlTarget 'facebook\.author\.name'
++syn match csdlTarget 'facebook\.author\.link'
++syn match csdlTarget 'facebook\.author\.id'
++syn match csdlTarget 'facebook\.author\.avatar'
++syn match csdlTarget 'facebook\.message'
++syn match csdlTarget 'facebook\.description'
++syn match csdlTarget 'facebook\.caption'
++syn match csdlTarget 'facebook\.type'
++syn match csdlTarget 'facebook\.application'
++syn match csdlTarget 'facebook\.source'
++syn match csdlTarget 'facebook\.link'
++syn match csdlTarget 'facebook\.name'
++syn match csdlTarget 'facebook\.to\.names'
++syn match csdlTarget 'facebook\.to\.ids'
++syn match csdlTarget 'facebook\.og\.title'
++syn match csdlTarget 'facebook\.og\.location'
++syn match csdlTarget 'facebook\.og\.photos'
++syn match csdlTarget 'facebook\.og\.by'
++syn match csdlTarget 'facebook\.og\.description'
++syn match csdlTarget 'facebook\.og\.type'
++syn match csdlTarget 'facebook\.og\.length'
++syn match csdlTarget 'facebook\.likes\.count'
++syn match csdlTarget 'facebook\.likes\.names'
++syn match csdlTarget 'facebook\.likes\.ids'
++syn match csdlTarget 'topix\.title'
++syn match csdlTarget 'topix\.content'
++syn match csdlTarget 'topix\.contenttype'
++syn match csdlTarget 'topix\.link'
++syn match csdlTarget 'topix\.author\.name'
++syn match csdlTarget 'topix\.type'
++syn match csdlTarget 'topix\.thread'
++syn match csdlTarget 'topix\.author\.location'
++syn match csdlTarget 'bitly\.user\.agent'
++syn keyword csdlTarget bitly.url_hash
++syn match csdlTarget 'bitly\.share\.hash'
++syn match csdlTarget 'bitly\.cname'
++syn keyword csdlTarget bitly.referring_url
++syn keyword csdlTarget bitly.referring_domain
++syn match csdlTarget 'bitly\.url'
++syn match csdlTarget 'bitly\.domain'
++syn keyword csdlTarget bitly.country_code
++syn keyword csdlTarget bitly.geo_region_code
++syn match csdlTarget 'bitly\.country'
++syn keyword csdlTarget bitly.geo_region
++syn keyword csdlTarget bitly.geo_city
++syn match csdlTarget 'bitly\.geo'
++syn match csdlTarget 'bitly\.timezone'
++syn match csdlTarget 'trends\.type'
++syn match csdlTarget 'trends\.content'
++syn match csdlTarget 'trends\.source'
++syn match csdlTarget 'board\.title'
++syn match csdlTarget 'board\.content'
++syn match csdlTarget 'board\.contenttype'
++syn match csdlTarget 'board\.link'
++syn match csdlTarget 'board\.domain'
++syn match csdlTarget 'board\.author\.name'
++syn match csdlTarget 'board\.author\.link'
++syn match csdlTarget 'board\.author\.avatar'
++syn match csdlTarget 'board\.author\.username'
++syn match csdlTarget 'board\.type'
++syn match csdlTarget 'board\.thread'
++syn match csdlTarget 'board\.author\.location'
++syn match csdlTarget 'board\.author\.signature'
++syn match csdlTarget 'board\.author\.registered'
++syn match csdlTarget 'board\.author\.age'
++syn match csdlTarget 'board\.author\.gender'
++syn match csdlTarget 'video\.title'
++syn match csdlTarget 'video\.content'
++syn match csdlTarget 'video\.contenttype'
++syn match csdlTarget 'video\.domain'
++syn match csdlTarget 'video\.author\.name'
++syn match csdlTarget 'video\.author\.link'
++syn match csdlTarget 'video\.author\.avatar'
++syn match csdlTarget 'video\.author\.username'
++syn match csdlTarget 'video\.type'
++syn match csdlTarget 'video\.videolink'
++syn match csdlTarget 'video\.commentslink'
++syn match csdlTarget 'video\.duration'
++syn match csdlTarget 'video\.thumbnail'
++syn match csdlTarget 'video\.category'
++syn match csdlTarget 'video\.tags'
++syn match csdlTarget '2ch\.title'
++syn match csdlTarget '2ch\.content'
++syn match csdlTarget '2ch\.contenttype'
++syn match csdlTarget '2ch\.link'
++syn match csdlTarget '2ch\.author\.name'
++syn match csdlTarget '2ch\.type'
++syn match csdlTarget '2ch\.thread'
++syn match csdlTarget 'dailymotion\.title'
++syn match csdlTarget 'dailymotion\.content'
++syn match csdlTarget 'dailymotion\.contenttype'
++syn match csdlTarget 'dailymotion\.author\.link'
++syn match csdlTarget 'dailymotion\.author\.username'
++syn match csdlTarget 'dailymotion\.videolink'
++syn match csdlTarget 'dailymotion\.duration'
++syn match csdlTarget 'dailymotion\.thumbnail'
++syn match csdlTarget 'dailymotion\.category'
++syn match csdlTarget 'dailymotion\.tags'
++syn match csdlTarget 'language\.tag'
++syn match csdlTarget 'language\.confidence'
++syn match csdlTarget 'digg\.type'
++syn match csdlTarget 'digg\.user\.name'
++syn match csdlTarget 'digg\.user\.fullname'
++syn match csdlTarget 'digg\.user\.registered'
++syn match csdlTarget 'digg\.user\.profileviews'
++syn match csdlTarget 'digg\.user\.icon'
++syn match csdlTarget 'digg\.user\.links'
++syn match csdlTarget 'digg\.item\.status'
++syn match csdlTarget 'digg\.item\.description'
++syn match csdlTarget 'digg\.item\.title'
++syn match csdlTarget 'digg\.item\.diggs'
++syn match csdlTarget 'digg\.item\.comments'
++syn match csdlTarget 'digg\.item\.topic'
++syn match csdlTarget 'digg\.comment\.buries'
++syn match csdlTarget 'digg\.comment\.diggs'
++syn match csdlTarget 'digg\.comment\.text'
++syn match csdlTarget 'youtube\.title'
++syn match csdlTarget 'youtube\.content'
++syn match csdlTarget 'youtube\.contenttype'
++syn match csdlTarget 'youtube\.author\.name'
++syn match csdlTarget 'youtube\.author\.link'
++syn match csdlTarget 'youtube\.type'
++syn match csdlTarget 'youtube\.videolink'
++syn match csdlTarget 'youtube\.commentslink'
++syn match csdlTarget 'youtube\.duration'
++syn match csdlTarget 'youtube\.thumbnail'
++syn match csdlTarget 'youtube\.category'
++syn match csdlTarget 'youtube\.tags'
++
++syn match csdlComment "^\/\/.*$"
++syn match csdlComment "^\/\*.*$"
++syn match csdlComment "^.*\*\/$"
++
++highlight link csdlKeyword Statement
++highlight link csdlOperator Operator
++highlight link csdlLogicalOperator Operator
++highlight link csdlTarget Constant
++highlight link csdlComment Comment
++"
++let b:current_syntax = "csdl"
+diff -Naur vim73.orig/runtime/syntax/css.vim vim73/runtime/syntax/css.vim
+--- vim73.orig/runtime/syntax/css.vim	2010-07-28 10:40:39.000000000 +0000
++++ vim73/runtime/syntax/css.vim	2013-06-07 17:07:22.112278871 +0000
+@@ -1,10 +1,12 @@
+ " Vim syntax file
+-" Language:	Cascading Style Sheets
+-" Maintainer:	Claudio Fleiner <claudio@fleiner.com>
+-" URL:		http://www.fleiner.com/vim/syntax/css.vim
+-" Last Change:	2010 Jul 28
+-" CSS2 by Nikolai Weibull
+-" Full CSS2, HTML4 support by Yeti
++" Language:     Cascading Style Sheets
++" Previous Contributor List:
++"               Claudio Fleiner <claudio@fleiner.com> (Maintainer)
++"               Yeti            (Add full CSS2, HTML4 support)
++"               Nikolai Weibull (Add CSS2 support)
++" Maintainer:   Jules Wang      <w.jq0722@gmail.com>
++" URL:          https://github.com/JulesWang/css.vim
++" Last Change:  2012 Dec 15
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -17,8 +19,12 @@
+   let main_syntax = 'css'
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ 
++" All HTML4 tags
+ syn keyword cssTagName abbr acronym address applet area a b base
+ syn keyword cssTagName basefont bdo big blockquote body br button
+ syn keyword cssTagName caption center cite code col colgroup dd del
+@@ -27,32 +33,51 @@
+ syn keyword cssTagName iframe img input ins isindex kbd label legend li
+ syn keyword cssTagName link map menu meta noframes noscript ol optgroup
+ syn keyword cssTagName option p param pre q s samp script select small
+-syn keyword cssTagName span strike strong style sub sup tbody td
++syn keyword cssTagName span strike strong style sub sup table tbody td
+ syn keyword cssTagName textarea tfoot th thead title tr tt ul u var
+-syn match cssTagName "\<table\>"
+-syn match cssTagName "\*"
++syn keyword cssTagName object
+ 
+-syn match cssTagName "@page\>" nextgroup=cssDefinition
++" HTML5 new tags 5*6=30
++syn keyword cssTagName article aside audio bdi canvas command
++syn keyword cssTagName datalist details embed figcaption figure footer
++syn keyword cssTagName header hgroup keygen mark meter nav
++syn keyword cssTagName output progress rt rp ruby section
++syn keyword cssTagName source summary time track video wbr
++
++" Tags not supported in HTML5
++syn keyword cssDeprecated acronym applet basefont big center dir
++syn keyword cssDeprecated font frame frameset noframes strike tt
+ 
+-syn match cssSelectorOp "[+>.]"
+-syn match cssSelectorOp2 "[~|]\?=" contained
++"syn match cssTagName "\<table\>"
++syn match cssTagName "\*"
++
++" selectors
++syn match cssSelectorOp "[,>+]"
++syn match cssSelectorOp2 "[~|^$*]\?=" contained
++" FIXME: add HTML5 attribute
+ syn region cssAttributeSelector matchgroup=cssSelectorOp start="\[" end="]" transparent contains=cssUnicodeEscape,cssSelectorOp2,cssStringQ,cssStringQQ
+ 
++" .class and #id
++syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
++
+ try
+ syn match cssIdentifier "#[A-Za-zÀ-ÿ_@][A-Za-zÀ-ÿ0-9_@-]*"
+ catch /^.*/
+ syn match cssIdentifier "#[A-Za-z_@][A-Za-z0-9_@-]*"
+ endtry
+ 
++syn match cssTagName "@page\>" nextgroup=cssDefinition
++" FIXME: use cssVendor here
++syn match cssTagName "@\(-\(webkit\|moz\|o\|ms\)-\)\=keyframes\>" nextgroup=cssDefinition
+ 
+ syn match cssMedia "@media\>" nextgroup=cssMediaType skipwhite skipnl
+ syn keyword cssMediaType contained screen print aural braile embosed handheld projection ty tv all nextgroup=cssMediaComma,cssMediaBlock skipwhite skipnl
+-syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl
++"syn match cssMediaComma "," nextgroup=cssMediaType skipwhite skipnl
+ syn region cssMediaBlock transparent matchgroup=cssBraces start='{' end='}' contains=cssTagName,cssError,cssComment,cssDefinition,cssURL,cssUnicodeEscape,cssIdentifier
+ 
+ syn match cssValueInteger contained "[-+]\=\d\+"
+ syn match cssValueNumber contained "[-+]\=\d\+\(\.\d*\)\="
+-syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\)"
++syn match cssValueLength contained "[-+]\=\d\+\(\.\d*\)\=\(%\|mm\|cm\|in\|pt\|pc\|em\|ex\|px\|rem\)"
+ syn match cssValueAngle contained "[-+]\=\d\+\(\.\d*\)\=\(deg\|grad\|rad\)"
+ syn match cssValueTime contained "+\=\d\+\(\.\d*\)\=\(ms\|s\)"
+ syn match cssValueFrequency contained "+\=\d\+\(\.\d*\)\=\(Hz\|kHz\)"
+@@ -66,27 +91,115 @@
+ syn match cssUnicodeRange contained "U+[0-9A-Fa-f?]\+"
+ syn match cssUnicodeRange contained "U+\x\+-\x\+"
+ 
++" The 16 basic color names
+ syn keyword cssColor contained aqua black blue fuchsia gray green lime maroon navy olive purple red silver teal yellow
++
++" 130 more color names
++syn keyword cssColor contained aliceblue antiquewhite aquamarine azure
++syn keyword cssColor contained beige bisque blanchedalmond blueviolet brown burlywood
++syn keyword cssColor contained cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson cyan
++syn match cssColor contained /dark\(blue\|cyan\|goldenrod\|gray\|green\|grey\|khaki\)/
++syn match cssColor contained /dark\(magenta\|olivegreen\|orange\|orchid\|red\|salmon\|seagreen\)/
++syn match cssColor contained /darkslate\(blue\|gray\|grey\)/
++syn match cssColor contained /dark\(turquoise\|violet\)/
++syn keyword cssColor contained deeppink deepskyblue dimgray dimgrey dodgerblue firebrick
++syn keyword cssColor contained floralwhite forestgreen gainsboro ghostwhite gold
++syn keyword cssColor contained goldenrod greenyellow grey honeydew hotpink
++syn keyword cssColor contained indianred indigo ivory khaki lavender lavenderblush lawngreen
++syn keyword cssColor contained lemonchiffon limegreen linen magenta
++syn match cssColor contained /light\(blue\|coral\|cyan\|goldenrodyellow\|gray\|green\)/
++syn match cssColor contained /light\(grey\|pink\|salmon\|seagreen\|skyblue\|yellow\)/
++syn match cssColor contained /light\(slategray\|slategrey\|steelblue\)/
++syn match cssColor contained /medium\(aquamarine\|blue\|orchid\|purple\|seagreen\)/
++syn match cssColor contained /medium\(slateblue\|springgreen\|turquoise\|violetred\)/
++syn keyword cssColor contained midnightblue mintcream mistyrose moccasin navajowhite
++syn keyword cssColor contained oldlace olivedrab orange orangered orchid
++syn match cssColor contained /pale\(goldenrod\|green\|turquoise\|violetred\)/
++syn keyword cssColor contained papayawhip peachpuff peru pink plum powderblue
++syn keyword cssColor contained rosybrown royalblue saddlebrown salmon sandybrown
++syn keyword cssColor contained seagreen seashell sienna skyblue slateblue
++syn keyword cssColor contained slategray slategrey snow springgreen steelblue tan
++syn keyword cssColor contained thistle tomato turquoise violet wheat
++syn keyword cssColor contained whitesmoke yellowgreen
++
+ " FIXME: These are actually case-insentivie too, but (a) specs recommend using
+ " mixed-case (b) it's hard to highlight the word `Background' correctly in
+ " all situations
+ syn case match
+ syn keyword cssColor contained ActiveBorder ActiveCaption AppWorkspace ButtonFace ButtonHighlight ButtonShadow ButtonText CaptionText GrayText Highlight HighlightText InactiveBorder InactiveCaption InactiveCaptionText InfoBackground InfoText Menu MenuText Scrollbar ThreeDDarkShadow ThreeDFace ThreeDHighlight ThreeDLightShadow ThreeDShadow Window WindowFrame WindowText Background
+ syn case ignore
++
++syn match cssImportant contained "!\s*important\>"
++
+ syn match cssColor contained "\<transparent\>"
+ syn match cssColor contained "\<white\>"
+ syn match cssColor contained "#[0-9A-Fa-f]\{3\}\>"
+ syn match cssColor contained "#[0-9A-Fa-f]\{6\}\>"
+-"syn match cssColor contained "\<rgb\s*(\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*,\s*\d\+\(\.\d*\)\=%\=\s*)"
+-syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" oneline keepend
+-syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\)\s*(" end=")" oneline keepend
+ 
+-syn match cssImportant contained "!\s*important\>"
+-
+-syn keyword cssCommonAttr contained auto none inherit
++syn region cssURL contained matchgroup=cssFunctionName start="\<url\s*(" end=")" oneline keepend
++syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgb\|clip\|attr\|counter\|rect\|cubic-bezier\)\s*(" end=")" oneline keepend
++syn region cssFunction contained matchgroup=cssFunctionName start="\<\(rgba\|hsl\|hsla\)\s*(" end=")" oneline keepend
++syn region cssFunction contained matchgroup=cssFunctionName start="\<\(linear\|radial\)-gradient\s*(" end=")" oneline keepend
++syn region cssFunction contained matchgroup=cssFunctionName start="\<\(matrix\(3d\)\=\|scale\(3d\|X\|Y|\Z\)\=\|translate\(3d\|X\|Y|\Z\)\=\|skew\(X\|Y\)\=\|rotate\(3d\|X\|Y|\Z\)\=\|perspective\)\s*(" end=")" oneline keepend
++
++" Prop and Attr
++" Reference: http://www.w3schools.com/cssref/default.asp
++syn keyword cssCommonAttr contained auto none inherit all
+ syn keyword cssCommonAttr contained top bottom
+ syn keyword cssCommonAttr contained medium normal
+ 
++
++syn match cssAnimationProp contained "\<animation\(-\(name\|duration\|timing-function\|delay\|iteration-cout\|play-state\)\)\=\>"
++
++
++syn keyword cssAnimationAttr contained infinite alternate paused running
++" bugfix: escape linear-gradient
++syn match cssAnimationAttr contained "\<linear\(-gradient\)\@!\>"
++syn match cssAnimationAttr contained "\<ease\(-\(in-out\|out\|in\)\)\=\>"
++
++syn match cssBackgroundProp contained "\<background\(-\(color\|image\|attachment\|position\|clip\|origin\|size\)\)\=\>"
++syn keyword cssBackgroundAttr contained center fixed over contain
++syn match cssBackgroundAttr contained "\<no-repeat\>"
++syn match cssBackgroundAttr contained "\<repeat\(-[xy]\)\=\>"
++syn match cssBackgroundAttr contained "\<\(border\|content\|padding\)-box\>"
++
++
++syn match cssBorderOutlineProp contained "\<border\(-\(top\|right\|bottom\|left\)\)\=\(-\(width\|color\|style\)\)\=\>"
++syn match cssBorderOutlineProp contained "\<outline\(-\(width\|style\|color\)\)\=\>"
++syn match cssBorderOutlineProp contained "\<border-\(top\|bottom\)-\(left\|right\)\(-radius\)\=\>"
++syn match cssBorderOutlineProp contained "\<border-image\(-\(outset\|repeat\|slice\|source\|width\)\)\=\>"
++syn match cssBorderOutlineProp contained "\<border-radius\>"
++syn keyword cssBorderOutlineAttr contained thin thick medium
++syn keyword cssBorderOutlineAttr contained dotted dashed solid double groove ridge inset outset
++syn keyword cssBorderOutlineAttr contained hidden visible scroll collapse
++syn keyword cssBorderOutlineAttr contained stretch round
++
++
++syn match cssBoxProp contained "\<overflow\(-\(x\|y\|style\)\)\=\>"
++syn match cssBoxProp contained "\<rotation\(-point\)=\>"
++syn keyword cssBoxAttr contained visible hidden scroll auto
++syn match cssBoxAttr contained "\<no-\(display\|content\)\>"
++
++syn keyword cssColorProp contained opacity
++syn match cssColorProp contained "\<color-profile\>"
++syn match cssColorProp contained "\<rendering-intent\>"
++
++
++syn match cssDimensionProp contained "\<\(min\|max\)-\(width\|height\)\>"
++syn keyword cssDimensionProp contained height
++syn keyword cssDimensionProp contained width
++
++" shadow and sizing are in other property groups
++syn match cssFlexibleBoxProp contained "\<box-\(align\|direction\|flex\|ordinal-group\|orient\|pack\|shadow\|sizing\)\>"
++syn keyword cssFlexibleBoxAttr contained start end center baseline stretch
++syn keyword cssFlexibleBoxAttr contained normal reverse
++syn keyword cssFlexibleBoxAttr contained single mulitple
++syn keyword cssFlexibleBoxAttr contained horizontal
++" bugfix: escape vertial-align
++syn match cssFlexibleBoxAttr contained "\<vertical\(-align\)\@!\>"
++syn match cssFlexibleBoxAttr contained "\<\(inline\|block\)-axis\>"
++
++
+ syn match cssFontProp contained "\<font\(-\(family\|style\|variant\|weight\|size\(-adjust\)\=\|stretch\)\)\=\>"
+ syn match cssFontAttr contained "\<\(sans-\)\=\<serif\>"
+ syn match cssFontAttr contained "\<small\(-\(caps\|caption\)\)\=\>"
+@@ -95,67 +208,92 @@
+ syn match cssFontAttr contained "\<status-bar\>"
+ syn match cssFontAttr contained "\<\(\(ultra\|extra\|semi\|status-bar\)-\)\=\(condensed\|expanded\)\>"
+ syn keyword cssFontAttr contained cursive fantasy monospace italic oblique
+-syn keyword cssFontAttr contained bold bolder lighter larger smaller
+-syn keyword cssFontAttr contained icon menu
+-syn match cssFontAttr contained "\<caption\>"
+-syn keyword cssFontAttr contained large smaller larger
+-syn keyword cssFontAttr contained narrower wider
+-
+-syn keyword cssColorProp contained color
+-syn match cssColorProp contained "\<background\(-\(color\|image\|attachment\|position\)\)\=\>"
+-syn keyword cssColorAttr contained center scroll fixed
+-syn match cssColorAttr contained "\<repeat\(-[xy]\)\=\>"
+-syn match cssColorAttr contained "\<no-repeat\>"
++syn keyword cssFontAttr contained bold bolder light lighter larger smaller
++syn keyword cssFontAttr contained icon menu caption
++syn keyword cssFontAttr contained large smaller larger narrower wider
++syn keyword cssFontAttr contained Courier Arial Georgia Times
+ 
+-syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
+-syn match cssTextAttr contained "\<line-through\>"
+-syn match cssTextAttr contained "\<text-indent\>"
+-syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
+-syn keyword cssTextAttr contained underline overline blink sub super middle
+-syn keyword cssTextAttr contained capitalize uppercase lowercase center justify baseline sub super
+-
+-syn match cssBoxProp contained "\<\(margin\|padding\|border\)\(-\(top\|right\|bottom\|left\)\)\=\>"
+-syn match cssBoxProp contained "\<border-\(\(\(top\|right\|bottom\|left\)-\)\=\(width\|color\|style\)\)\=\>"
+-syn match cssBoxProp contained "\<\(width\|z-index\)\>"
+-syn match cssBoxProp contained "\<\(min\|max\)-\(width\|height\)\>"
+-syn keyword cssBoxProp contained width height float clear overflow clip visibility
+-syn keyword cssBoxAttr contained thin thick both
+-syn keyword cssBoxAttr contained dotted dashed solid double groove ridge inset outset
+-syn keyword cssBoxAttr contained hidden visible scroll collapse
+ 
+-syn keyword cssGeneratedContentProp contained content quotes
++syn keyword cssGeneratedContentProp contained content quotes crop
+ syn match cssGeneratedContentProp contained "\<counter-\(reset\|increment\)\>"
+-syn match cssGeneratedContentProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
++syn match cssGeneratedContentProp contained "\<move-to\>"
++syn match cssGeneratedContentProp contained "\<page-policy\>"
+ syn match cssGeneratedContentAttr contained "\<\(no-\)\=\(open\|close\)-quote\>"
+-syn match cssAuralAttr contained "\<lower\>"
+-syn match cssGeneratedContentAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
+-syn match cssGeneratedContentAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
+-syn match cssGeneratedContentAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
+-syn keyword cssGeneratedContentAttr contained disc circle square hebrew armenian georgian
+-syn keyword cssGeneratedContentAttr contained inside outside
+-
+-syn match cssPagingProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
+-syn keyword cssPagingProp contained size marks inside orphans widows
+-syn keyword cssPagingAttr contained landscape portrait crop cross always avoid
+ 
+-syn keyword cssUIProp contained cursor
+-syn match cssUIProp contained "\<outline\(-\(width\|style\|color\)\)\=\>"
+-syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>"
+-syn keyword cssUIAttr contained default crosshair pointer move wait help
+-syn keyword cssUIAttr contained thin thick
+-syn keyword cssUIAttr contained dotted dashed solid double groove ridge inset outset
+-syn keyword cssUIAttr contained invert
+-
+-syn match cssRenderAttr contained "\<marker\>"
+-syn match cssRenderProp contained "\<\(display\|marker-offset\|unicode-bidi\|white-space\|list-item\|run-in\|inline-table\)\>"
+-syn keyword cssRenderProp contained position top bottom direction
+-syn match cssRenderProp contained "\<\(left\|right\)\>"
+-syn keyword cssRenderAttr contained block inline compact
+-syn match cssRenderAttr contained "\<table\(-\(row-gorup\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
+-syn keyword cssRenderAttr contained static relative absolute fixed
+-syn keyword cssRenderAttr contained ltr rtl embed bidi-override pre nowrap
+-syn match cssRenderAttr contained "\<bidi-override\>"
+ 
++syn match cssGridProp contained "\<grid-\(columns\|rows\)\>"
++
++syn match cssHyerlinkProp contained "\<target\(-\(name\|new\|position\)\)\=\>"
++
++syn match cssListProp contained "\<list-style\(-\(type\|position\|image\)\)\=\>"
++syn match cssListAttr contained "\<\(lower\|upper\)-\(roman\|alpha\|greek\|latin\)\>"
++syn match cssListAttr contained "\<\(hiragana\|katakana\)\(-iroha\)\=\>"
++syn match cssListAttr contained "\<\(decimal\(-leading-zero\)\=\|cjk-ideographic\)\>"
++syn keyword cssListAttr contained disc circle square hebrew armenian georgian
++syn keyword cssListAttr contained inside outside
++
++
++syn match cssMarginProp contained "\<margin\(-\(top\|right\|bottom\|left\)\)\=\>"
++
++syn match cssMultiColumnProp contained "\<column\(-\(\break-\(after\|before\)\|count\|gap\|rule\(-\(color\|style\|width\)\)\=\)\|span\|width\)\=\>"
++
++
++syn match cssPaddingProp contained "\<padding\(-\(top\|right\|bottom\|left\)\)\=\>"
++
++syn keyword cssPositioningProp contained bottom clear clip display float left
++syn keyword cssPositioningProp contained position right top visibility
++syn match cssPositioningProp contained "\<z-index\>"
++syn keyword cssPositioningAttr contained block inline compact
++syn match cssPositioningAttr contained "\<table\(-\(row-gorup\|\(header\|footer\)-group\|row\|column\(-group\)\=\|cell\|caption\)\)\=\>"
++syn keyword cssPositioningAttr contained left right both
++syn match cssPositioningAttr contained "\<list-item\>"
++syn match cssPositioningAttr contained "\<inline-\(block\|table\)\>"
++syn keyword cssPositioningAttr contained static relative absolute fixed
++
++syn match cssPrintProp contained "\<page\(-break-\(before\|after\|inside\)\)\=\>"
++syn keyword cssPrintProp contained orphans widows
++syn keyword cssPrintAttr contained landscape portrait crop cross always avoid
++
++syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\)\>"
++syn keyword cssTableAttr contained fixed collapse separate show hide once always
++
++
++syn keyword cssTextProp contained color direction
++syn match cssTextProp "\<\(\(word\|letter\)-spacing\|text\(-\(decoration\|transform\|align\|index\|shadow\)\)\=\|vertical-align\|unicode-bidi\|line-height\)\>"
++syn match cssTextProp contained "\<text-\(justify\|\outline\|overflow\|warp\|align-last\)\>"
++syn match cssTextProp contained "\<word-\(break\|\wrap\)\>"
++syn match cssTextProp contained "\<white-space\>"
++syn match cssTextProp contained "\<hanging-punctuation\>"
++syn match cssTextProp contained "\<punctuation-trim\>"
++syn match cssTextAttr contained "\<line-through\>"
++syn match cssTextAttr contained "\<text-indent\>"
++syn match cssTextAttr contained "\<\(text-\)\=\(top\|bottom\)\>"
++syn keyword cssTextAttr contained ltr rtl embed nowrap
++syn keyword cssTextAttr contained underline overline blink sub super middle
++syn keyword cssTextAttr contained capitalize uppercase lowercase
++syn keyword cssTextAttr contained center justify baseline sub super
++syn match cssTextAttr contained "\<pre\(-\(line\|wrap\)\)\=\>"
++syn match cssTextAttr contained "\<\(allow\|force\)-end\>"
++syn keyword cssTextAttr contained start end adjacent
++syn match cssTextAttr contained "\<inter-\(word\|ideographic\|cluster\)\>"
++syn keyword cssTextAttr contained distribute kashida first last
++syn keyword cssTextAttr contained clip ellipsis unrestricted suppress
++syn match cssTextAttr contained "\<break-all\>"
++syn match cssTextAttr contained "\<break-word\>"
++syn keyword cssTextAttr contained hyphenate
++
++
++syn match cssTransformProp contained "\<transform\(-\(origin\|style\)\)\=\>"
++syn match cssTransformProp contained "\<perspective\(-origin\)\=\>"
++syn match cssTransformProp contained "\<backface-visibility\>"
++
++syn match cssTransitionProp contained "\<transition\(-\(delay\|duration\|property\|timing-function\)\)\=\>"
++
++syn match cssUIProp contained "\<nav-\(down\|index\|left\|right\|up\)\=\>"
++syn match cssUIProp contained "\<outline-offset\>"
++syn match cssUIProp contained "\<box-sizing\>"
++syn keyword cssUIProp contained appearance icon resize
++syn keyword cssUIAttr contained window button menu field
+ 
+ syn match cssAuralProp contained "\<\(pause\|cue\)\(-\(before\|after\)\)\=\>"
+ syn match cssAuralProp contained "\<\(play-during\|speech-rate\|voice-family\|pitch\(-range\)\=\|speak\(-\(punctuation\|numerals\)\)\=\)\>"
+@@ -171,30 +309,54 @@
+ syn match cssAuralAttr contained "\<\(x-\)\=\(slow\|fast\)\>"
+ syn keyword cssAuralAttr contained faster slower
+ syn keyword cssAuralAttr contained male female child code digits continuous
++syn match cssAuralAttr contained "\<lower\>"
++
++" cursor
++syn keyword cssUIProp contained cursor
++syn match cssUIAttr contained "\<[ns]\=[ew]\=-resize\>"
++syn keyword cssUIAttr contained crosshair default help move pointer
++syn keyword cssUIAttr contained progress wait
++
++" FIXME: I could not find them in reference
++syn keyword cssUIAttr contained invert maker size zoom
++syn match cssRenderAttr contained "\<run-in\>"
++syn match cssRenderAttr contained "\<text-rendering\>"
++syn match cssRenderAttr contained "\<font-smoothing\>"
++syn match cssRenderProp contained "\<marker-offset\>"
++syn match cssRenderAttr contained "\<bidi-override\>"
+ 
+-syn match cssTableProp contained "\<\(caption-side\|table-layout\|border-collapse\|border-spacing\|empty-cells\|speak-header\)\>"
+-syn keyword cssTableAttr contained fixed collapse separate show hide once always
+ 
+ " FIXME: This allows cssMediaBlock before the semicolon, which is wrong.
+ syn region cssInclude start="@import" end=";" contains=cssComment,cssURL,cssUnicodeEscape,cssMediaType
+ syn match cssBraces contained "[{}]"
+ syn match cssError contained "{@<>"
+-syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape
++syn region cssDefinition transparent matchgroup=cssBraces start='{' end='}' contains=css.*Attr,css.*Prop,cssComment,cssValue.*,cssColor,cssURL,cssImportant,cssError,cssStringQ,cssStringQQ,cssFunction,cssUnicodeEscape,cssVendor,cssDefinition
+ syn match cssBraceError "}"
+ 
+-syn match cssPseudoClass ":\S*" contains=cssPseudoClassId,cssUnicodeEscape
+-syn keyword cssPseudoClassId contained link visited active hover focus before after left right
++" Pseudo class
++syn match cssPseudoClass ":[A-Za-z0-9_-]*" contains=cssPseudoClassId,cssUnicodeEscape
++syn keyword cssPseudoClassId link visited active hover focus before after left right lang
+ syn match cssPseudoClassId contained "\<first\(-\(line\|letter\|child\)\)\=\>"
+-syn region cssPseudoClassLang matchgroup=cssPseudoClassId start=":lang(" end=")" oneline
++" FIXME: handle functions.
++"syn region cssPseudoClassLang matchgroup=cssPseudoClassId start="lang(" end=")"
++syn match cssPseudoClassId contained "\<\(last\|only\|nth\|nth-last\)-child\>"
++syn match cssPseudoClassId contained "\<\(first\|last\|only\|nth\|nth-last\)-of-type\>"
++syn keyword cssPseudoClassId root empty target enable disabled checked not invalid
++syn match cssPseudoClassId contained  "::\(-moz-\)\=selection"
+ 
++" Comment
+ syn region cssComment start="/\*" end="\*/" contains=@Spell
++syn region cssComment start="//" skip="\\$" end="$" keepend contains=@Spell
+ 
+ syn match cssUnicodeEscape "\\\x\{1,6}\s\?"
+ syn match cssSpecialCharQQ +\\"+ contained
+ syn match cssSpecialCharQ +\\'+ contained
+ syn region cssStringQQ start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=cssUnicodeEscape,cssSpecialCharQQ
+ syn region cssStringQ start=+'+ skip=+\\\\\|\\'+ end=+'+ contains=cssUnicodeEscape,cssSpecialCharQ
+-syn match cssClassName "\.[A-Za-z][A-Za-z0-9_-]\+"
++
++" Vendor Prefix
++syn match cssVendor contained "\(-\(webkit\|moz\|o\|ms\)-\)"
++
+ 
+ if main_syntax == "css"
+   syn sync minlines=10
+@@ -212,31 +374,75 @@
+   endif
+ 
+   HiLink cssComment Comment
++  HiLink cssVendor Comment
+   HiLink cssTagName Statement
++  HiLink cssDeprecated Error
+   HiLink cssSelectorOp Special
+   HiLink cssSelectorOp2 Special
+-  HiLink cssFontProp StorageClass
+-  HiLink cssColorProp StorageClass
+-  HiLink cssTextProp StorageClass
++
++  HiLink cssAnimationProp StorageClass
++  HiLink cssBackgroundProp StorageClass
++  HiLink cssBorderOutlineProp StorageClass
+   HiLink cssBoxProp StorageClass
+-  HiLink cssRenderProp StorageClass
+-  HiLink cssAuralProp StorageClass
+-  HiLink cssRenderProp StorageClass
++  HiLink cssColorProp StorageClass
++  HiLink cssContentForPagedMediaProp StorageClass
++  HiLink cssDimensionProp StorageClass
++  HiLink cssFlexibleBoxProp StorageClass
++  HiLink cssFontProp StorageClass
+   HiLink cssGeneratedContentProp StorageClass
+-  HiLink cssPagingProp StorageClass
++  HiLink cssGridProp StorageClass
++  HiLink cssHyerlinkProp StorageClass
++  HiLink cssLineboxProp StorageClass
++  HiLink cssListProp StorageClass
++  HiLink cssMarginProp StorageClass
++  HiLink cssMarqueeProp StorageClass
++  HiLink cssMultiColumnProp StorageClass
++  HiLink cssPaddingProp StorageClass
++  HiLink cssPagedMediaProp StorageClass
++  HiLink cssPositioningProp StorageClass
++  HiLink cssPrintProp StorageClass
++  HiLink cssRubyProp StorageClass
++  HiLink cssSpeechProp StorageClass
+   HiLink cssTableProp StorageClass
++  HiLink cssTextProp StorageClass
++  HiLink cssTransformProp StorageClass
++  HiLink cssTransitionProp StorageClass
+   HiLink cssUIProp StorageClass
+-  HiLink cssFontAttr Type
+-  HiLink cssColorAttr Type
+-  HiLink cssTextAttr Type
++  HiLink cssAuralProp StorageClass
++  HiLink cssRenderProp StorageClass
++
++  HiLink cssAnimationAttr Type
++  HiLink cssBackgroundAttr Type
++  HiLink cssBorderOutlineAttr Type
+   HiLink cssBoxAttr Type
+-  HiLink cssRenderAttr Type
+-  HiLink cssAuralAttr Type
++  HiLink cssColorAttr Type
++  HiLink cssContentForPagedMediaAttr Type
++  HiLink cssDimensionAttr Type
++  HiLink cssFlexibleBoxAttr Type
++  HiLink cssFontAttr Type
+   HiLink cssGeneratedContentAttr Type
+-  HiLink cssPagingAttr Type
++  HiLink cssGridAttr Type
++  HiLink cssHyerlinkAttr Type
++  HiLink cssLineboxAttr Type
++  HiLink cssListAttr Type
++  HiLink cssMarginAttr Type
++  HiLink cssMarqueeAttr Type
++  HiLink cssMultiColumnAttr Type
++  HiLink cssPaddingAttr Type
++  HiLink cssPagedMediaAttr Type
++  HiLink cssPositioningAttr Type
++  HiLink cssPrintAttr Type
++  HiLink cssRubyAttr Type
++  HiLink cssSpeechAttr Type
+   HiLink cssTableAttr Type
++  HiLink cssTextAttr Type
++  HiLink cssTransformAttr Type
++  HiLink cssTransitionAttr Type
+   HiLink cssUIAttr Type
++  HiLink cssAuralAttr Type
++  HiLink cssRenderAttr Type
+   HiLink cssCommonAttr Type
++
+   HiLink cssPseudoClassId PreProc
+   HiLink cssPseudoClassLang Constant
+   HiLink cssValueLength Number
+@@ -277,6 +483,7 @@
+   unlet main_syntax
+ endif
+ 
+-
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+ 
+diff -Naur vim73.orig/runtime/syntax/cucumber.vim vim73/runtime/syntax/cucumber.vim
+--- vim73.orig/runtime/syntax/cucumber.vim	2010-05-21 09:42:35.000000000 +0000
++++ vim73/runtime/syntax/cucumber.vim	2013-06-07 17:07:22.152278756 +0000
+@@ -2,60 +2,72 @@
+ " Language:     Cucumber
+ " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
+ " Filenames:    *.feature
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists("b:current_syntax")
+     finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ syn case match
+ syn sync minlines=20
+ 
+ let g:cucumber_languages = {
+-      \"en": {"and": "And\\>", "background": "Background\\>", "but": "But\\>", "examples": "Scenarios\\>\\|Examples\\>", "feature": "Feature\\>", "given": "Given\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Outline\\>", "then": "Then\\>", "when": "When\\>"},
++      \"en": {"and": "And\\>", "background": "Background\\>", "but": "But\\>", "examples": "Scenarios\\>\\|Examples\\>", "feature": "Business Need\\>\\|Feature\\>\\|Ability\\>", "given": "Given\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Template\\>\\|Scenario Outline\\>", "then": "Then\\>", "when": "When\\>"},
+       \"ar": {"and": "\\%u0648\\>", "background": "\\%u0627\\%u0644\\%u062e\\%u0644\\%u0641\\%u064a\\%u0629\\>", "but": "\\%u0644\\%u0643\\%u0646\\>", "examples": "\\%u0627\\%u0645\\%u062b\\%u0644\\%u0629\\>", "feature": "\\%u062e\\%u0627\\%u0635\\%u064a\\%u0629\\>", "given": "\\%u0628\\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648\\>", "scenario_outline": "\\%u0633\\%u064a\\%u0646\\%u0627\\%u0631\\%u064a\\%u0648 \\%u0645\\%u062e\\%u0637\\%u0637\\>", "then": "\\%u0627\\%u0630\\%u0627\\%u064b\\>\\|\\%u062b\\%u0645\\>", "when": "\\%u0639\\%u0646\\%u062f\\%u0645\\%u0627\\>\\|\\%u0645\\%u062a\\%u0649\\>"},
+       \"bg": {"and": "\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u0438\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>", "but": "\\%u041d\\%u043e\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>", "given": "\\%u0414\\%u0430\\%u0434\\%u0435\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0420\\%u0430\\%u043c\\%u043a\\%u0430 \\%u043d\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0430\\%u0442\\%u043e\\>"},
++      \"bm": {"and": "Dan\\>", "background": "Latar Belakang\\>", "but": "Tetapi\\>", "examples": "Contoh \\>", "feature": "Fungsi\\>", "given": "Bagi\\>", "scenario": "Senario\\>", "scenario_outline": "Menggariskan Senario \\>", "then": "Kemudian\\>", "when": "Apabila\\>"},
+       \"ca": {"and": "I\\>", "background": "Antecedents\\>\\|Rerefons\\>", "but": "Per\\%u00f2\\>", "examples": "Exemples\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalitat\\>", "given": "At\\%u00e8s\\>\\|Donada\\>\\|Donat\\>\\|Atesa\\>", "scenario": "Escenari\\>", "scenario_outline": "Esquema de l'escenari\\>", "then": "Aleshores\\>\\|Cal\\>", "when": "Quan\\>"},
+-      \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Pozad\\%u00ed\\>\\|Kontext\\>", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady\\>", "feature": "Po\\%u017eadavek\\>", "given": "Pokud\\>", "scenario": "Sc\\%u00e9n\\%u00e1\\%u0159\\>", "scenario_outline": "N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e\\>\\|Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\>", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"},
++      \"cs": {"and": "A tak\\%u00e9\\>\\|A\\>", "background": "Pozad\\%u00ed\\>\\|Kontext\\>", "but": "Ale\\>", "examples": "P\\%u0159\\%u00edklady\\>", "feature": "Po\\%u017eadavek\\>", "given": "Za p\\%u0159edpokladu\\>\\|Pokud\\>", "scenario": "Sc\\%u00e9n\\%u00e1\\%u0159\\>", "scenario_outline": "N\\%u00e1\\%u010drt Sc\\%u00e9n\\%u00e1\\%u0159e\\>\\|Osnova sc\\%u00e9n\\%u00e1\\%u0159e\\>", "then": "Pak\\>", "when": "Kdy\\%u017e\\>"},
+       \"cy-GB": {"and": "A\\>", "background": "Cefndir\\>", "but": "Ond\\>", "examples": "Enghreifftiau\\>", "feature": "Arwedd\\>", "given": "Anrhegedig a\\>", "scenario": "Scenario\\>", "scenario_outline": "Scenario Amlinellol\\>", "then": "Yna\\>", "when": "Pryd\\>"},
+       \"da": {"and": "Og\\>", "background": "Baggrund\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskab\\>", "given": "Givet\\>", "scenario": "Scenarie\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
+       \"de": {"and": "Und\\>", "background": "Grundlage\\>", "but": "Aber\\>", "examples": "Beispiele\\>", "feature": "Funktionalit\\%u00e4t\\>", "given": "Gegeben sei\\>\\|Angenommen\\>", "scenario": "Szenario\\>", "scenario_outline": "Szenariogrundriss\\>", "then": "Dann\\>", "when": "Wenn\\>"},
++      \"el": {"and": "\\%u039a\\%u03b1\\%u03b9\\>", "background": "\\%u03a5\\%u03c0\\%u03cc\\%u03b2\\%u03b1\\%u03b8\\%u03c1\\%u03bf\\>", "but": "\\%u0391\\%u03bb\\%u03bb\\%u03ac\\>", "examples": "\\%u03a0\\%u03b1\\%u03c1\\%u03b1\\%u03b4\\%u03b5\\%u03af\\%u03b3\\%u03bc\\%u03b1\\%u03c4\\%u03b1\\>\\|\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03b1\\>", "feature": "\\%u0394\\%u03c5\\%u03bd\\%u03b1\\%u03c4\\%u03cc\\%u03c4\\%u03b7\\%u03c4\\%u03b1\\>\\|\\%u039b\\%u03b5\\%u03b9\\%u03c4\\%u03bf\\%u03c5\\%u03c1\\%u03b3\\%u03af\\%u03b1\\>", "given": "\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5 \\%u03cc\\%u03c4\\%u03b9\\>\\|\\%u0394\\%u03b5\\%u03b4\\%u03bf\\%u03bc\\%u03ad\\%u03bd\\%u03bf\\%u03c5\\>", "scenario": "\\%u03a3\\%u03b5\\%u03bd\\%u03ac\\%u03c1\\%u03b9\\%u03bf\\>", "scenario_outline": "\\%u03a0\\%u03b5\\%u03c1\\%u03b9\\%u03b3\\%u03c1\\%u03b1\\%u03c6\\%u03ae \\%u03a3\\%u03b5\\%u03bd\\%u03b1\\%u03c1\\%u03af\\%u03bf\\%u03c5\\>", "then": "\\%u03a4\\%u03cc\\%u03c4\\%u03b5\\>", "when": "\\%u038c\\%u03c4\\%u03b1\\%u03bd\\>"},
+       \"en-Scouse": {"and": "An\\>", "background": "Dis is what went down\\>", "but": "Buh\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Youse know when youse got\\>\\|Givun\\>", "scenario": "The thing of it is\\>", "scenario_outline": "Wharrimean is\\>", "then": "Den youse gotta\\>\\|Dun\\>", "when": "Youse know like when\\>\\|Wun\\>"},
+-      \"en-au": {"and": "N\\>", "background": "Background\\>", "but": "Cept\\>", "examples": "Cobber\\>", "feature": "Crikey\\>", "given": "Ya know how\\>", "scenario": "Mate\\>", "scenario_outline": "Blokes\\>", "then": "Ya gotta\\>", "when": "When\\>"},
++      \"en-au": {"and": "Too right\\>", "background": "First off\\>", "but": "Yeah nah\\>", "examples": "You'll wanna\\>", "feature": "Pretty much\\>", "given": "Y'know\\>", "scenario": "Awww, look mate\\>", "scenario_outline": "Reckon it's like\\>", "then": "But at the end of the day I reckon\\>", "when": "It's just unbelievable\\>"},
+       \"en-lol": {"and": "AN\\>", "background": "B4\\>", "but": "BUT\\>", "examples": "EXAMPLZ\\>", "feature": "OH HAI\\>", "given": "I CAN HAZ\\>", "scenario": "MISHUN\\>", "scenario_outline": "MISHUN SRSLY\\>", "then": "DEN\\>", "when": "WEN\\>"},
++      \"en-old": {"and": "Ond\\>\\|7\\>", "background": "\\%u00c6r\\>\\|Aer\\>", "but": "Ac\\>", "examples": "Se \\%u00f0e\\>\\|Se \\%u00fee\\>\\|Se the\\>", "feature": "Hw\\%u00e6t\\>\\|Hwaet\\>", "given": "\\%u00d0urh\\>\\|\\%u00deurh\\>\\|Thurh\\>", "scenario": "Swa\\>", "scenario_outline": "Swa hw\\%u00e6r swa\\>\\|Swa hwaer swa\\>", "then": "\\%u00d0a \\%u00f0e\\>\\|\\%u00dea \\%u00fee\\>\\|\\%u00dea\\>\\|\\%u00d0a\\>\\|Tha the\\>\\|Tha\\>", "when": "\\%u00d0a\\>\\|\\%u00dea\\>\\|Tha\\>"},
++      \"en-pirate": {"and": "Aye\\>", "background": "Yo-ho-ho\\>", "but": "Avast!\\>", "examples": "Dead men tell no tales\\>", "feature": "Ahoy matey!\\>", "given": "Gangway!\\>", "scenario": "Heave to\\>", "scenario_outline": "Shiver me timbers\\>", "then": "Let go and haul\\>", "when": "Blimey!\\>"},
+       \"en-tx": {"and": "And y'all\\>", "background": "Background\\>", "but": "But y'all\\>", "examples": "Examples\\>", "feature": "Feature\\>", "given": "Given y'all\\>", "scenario": "Scenario\\>", "scenario_outline": "All y'all\\>", "then": "Then y'all\\>", "when": "When y'all\\>"},
+       \"eo": {"and": "Kaj\\>", "background": "Fono\\>", "but": "Sed\\>", "examples": "Ekzemploj\\>", "feature": "Trajto\\>", "given": "Donita\\%u0135o\\>", "scenario": "Scenaro\\>", "scenario_outline": "Konturo de la scenaro\\>", "then": "Do\\>", "when": "Se\\>"},
+-      \"es": {"and": "Y\\>", "background": "Antecedentes\\>", "but": "Pero\\>", "examples": "Ejemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esquema del escenario\\>", "then": "Entonces\\>", "when": "Cuando\\>"},
++      \"es": {"and": "Y\\>", "background": "Antecedentes\\>", "but": "Pero\\>", "examples": "Ejemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esquema del escenario\\>", "then": "Entonces\\>", "when": "Cuando\\>"},
+       \"et": {"and": "Ja\\>", "background": "Taust\\>", "but": "Kuid\\>", "examples": "Juhtumid\\>", "feature": "Omadus\\>", "given": "Eeldades\\>", "scenario": "Stsenaarium\\>", "scenario_outline": "Raamstsenaarium\\>", "then": "Siis\\>", "when": "Kui\\>"},
++      \"fa": {"and": "\\%u0648\\>", "background": "\\%u0632\\%u0645\\%u06cc\\%u0646\\%u0647\\>", "but": "\\%u0627\\%u0645\\%u0627\\>", "examples": "\\%u0646\\%u0645\\%u0648\\%u0646\\%u0647 \\%u0647\\%u0627\\>", "feature": "\\%u0648\\%u0650\\%u06cc\\%u0698\\%u06af\\%u06cc\\>", "given": "\\%u0628\\%u0627 \\%u0641\\%u0631\\%u0636\\>", "scenario": "\\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "scenario_outline": "\\%u0627\\%u0644\\%u06af\\%u0648\\%u06cc \\%u0633\\%u0646\\%u0627\\%u0631\\%u06cc\\%u0648\\>", "then": "\\%u0622\\%u0646\\%u06af\\%u0627\\%u0647\\>", "when": "\\%u0647\\%u0646\\%u06af\\%u0627\\%u0645\\%u06cc\\>"},
+       \"fi": {"and": "Ja\\>", "background": "Tausta\\>", "but": "Mutta\\>", "examples": "Tapaukset\\>", "feature": "Ominaisuus\\>", "given": "Oletetaan\\>", "scenario": "Tapaus\\>", "scenario_outline": "Tapausaihio\\>", "then": "Niin\\>", "when": "Kun\\>"},
+-      \"fr": {"and": "Et\\>", "background": "Contexte\\>", "but": "Mais\\>", "examples": "Exemples\\>", "feature": "Fonctionnalit\\%u00e9\\>", "given": "Etant donn\\%u00e9\\>\\|Soit\\>", "scenario": "Sc\\%u00e9nario\\>", "scenario_outline": "Plan du sc\\%u00e9nario\\>\\|Plan du Sc\\%u00e9nario\\>", "then": "Alors\\>", "when": "Lorsqu'\\|Lorsque\\>\\|Quand\\>"},
++      \"fr": {"and": "Et\\>", "background": "Contexte\\>", "but": "Mais\\>", "examples": "Exemples\\>", "feature": "Fonctionnalit\\%u00e9\\>", "given": "\\%u00c9tant donn\\%u00e9es\\>\\|\\%u00c9tant donn\\%u00e9s\\>\\|\\%u00c9tant donn\\%u00e9e\\>\\|\\%u00c9tant donn\\%u00e9\\>\\|Etant donn\\%u00e9es\\>\\|Etant donn\\%u00e9s\\>\\|Etant donn\\%u00e9e\\>\\|Etant donn\\%u00e9\\>\\|Soit\\>", "scenario": "Sc\\%u00e9nario\\>", "scenario_outline": "Plan du sc\\%u00e9nario\\>\\|Plan du Sc\\%u00e9nario\\>", "then": "Alors\\>", "when": "Lorsqu'\\|Lorsque\\>\\|Quand\\>"},
++      \"gl": {"and": "E\\>", "background": "Contexto\\>", "but": "Mais\\>\\|Pero\\>", "examples": "Exemplos\\>", "feature": "Caracter\\%u00edstica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Escenario\\>", "scenario_outline": "Esbozo do escenario\\>", "then": "Ent\\%u00f3n\\>\\|Logo\\>", "when": "Cando\\>"},
+       \"he": {"and": "\\%u05d5\\%u05d2\\%u05dd\\>", "background": "\\%u05e8\\%u05e7\\%u05e2\\>", "but": "\\%u05d0\\%u05d1\\%u05dc\\>", "examples": "\\%u05d3\\%u05d5\\%u05d2\\%u05de\\%u05d0\\%u05d5\\%u05ea\\>", "feature": "\\%u05ea\\%u05db\\%u05d5\\%u05e0\\%u05d4\\>", "given": "\\%u05d1\\%u05d4\\%u05d9\\%u05e0\\%u05ea\\%u05df\\>", "scenario": "\\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "scenario_outline": "\\%u05ea\\%u05d1\\%u05e0\\%u05d9\\%u05ea \\%u05ea\\%u05e8\\%u05d7\\%u05d9\\%u05e9\\>", "then": "\\%u05d0\\%u05d6\\%u05d9\\>\\|\\%u05d0\\%u05d6\\>", "when": "\\%u05db\\%u05d0\\%u05e9\\%u05e8\\>"},
++      \"hi": {"and": "\\%u0924\\%u0925\\%u093e\\>\\|\\%u0914\\%u0930\\>", "background": "\\%u092a\\%u0943\\%u0937\\%u094d\\%u0920\\%u092d\\%u0942\\%u092e\\%u093f\\>", "but": "\\%u092a\\%u0930\\>", "examples": "\\%u0909\\%u0926\\%u093e\\%u0939\\%u0930\\%u0923\\>", "feature": "\\%u0930\\%u0942\\%u092a \\%u0932\\%u0947\\%u0916\\>", "given": "\\%u091a\\%u0942\\%u0902\\%u0915\\%u093f\\>\\|\\%u092f\\%u0926\\%u093f\\>\\|\\%u0905\\%u0917\\%u0930\\>", "scenario": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f\\>", "scenario_outline": "\\%u092a\\%u0930\\%u093f\\%u0926\\%u0943\\%u0936\\%u094d\\%u092f \\%u0930\\%u0942\\%u092a\\%u0930\\%u0947\\%u0916\\%u093e\\>", "then": "\\%u0924\\%u092c\\>", "when": "\\%u091c\\%u092c\\>"},
+       \"hr": {"and": "I\\>", "background": "Pozadina\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primjeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadano\\>\\|Zadani\\>\\|Zadan\\>", "scenario": "Scenarij\\>", "scenario_outline": "Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
+-      \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r\\>", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k\\>", "feature": "Jellemz\\%u0151\\>", "given": "Ha\\>", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\>", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat\\>", "then": "Akkor\\>", "when": "Majd\\>"},
++      \"hu": {"and": "\\%u00c9s\\>", "background": "H\\%u00e1tt\\%u00e9r\\>", "but": "De\\>", "examples": "P\\%u00e9ld\\%u00e1k\\>", "feature": "Jellemz\\%u0151\\>", "given": "Amennyiben\\>\\|Adott\\>", "scenario": "Forgat\\%u00f3k\\%u00f6nyv\\>", "scenario_outline": "Forgat\\%u00f3k\\%u00f6nyv v\\%u00e1zlat\\>", "then": "Akkor\\>", "when": "Amikor\\>\\|Majd\\>\\|Ha\\>"},
+       \"id": {"and": "Dan\\>", "background": "Dasar\\>", "but": "Tapi\\>", "examples": "Contoh\\>", "feature": "Fitur\\>", "given": "Dengan\\>", "scenario": "Skenario\\>", "scenario_outline": "Skenario konsep\\>", "then": "Maka\\>", "when": "Ketika\\>"},
+-      \"it": {"and": "E\\>", "background": "Contesto\\>", "but": "Ma\\>", "examples": "Esempi\\>", "feature": "Funzionalit\\%u00e0\\>", "given": "Dato\\>", "scenario": "Scenario\\>", "scenario_outline": "Schema dello scenario\\>", "then": "Allora\\>", "when": "Quando\\>"},
++      \"is": {"and": "Og\\>", "background": "Bakgrunnur\\>", "but": "En\\>", "examples": "Atbur\\%u00f0ar\\%u00e1sir\\>\\|D\\%u00e6mi\\>", "feature": "Eiginleiki\\>", "given": "Ef\\>", "scenario": "Atbur\\%u00f0ar\\%u00e1s\\>", "scenario_outline": "L\\%u00fdsing Atbur\\%u00f0ar\\%u00e1sar\\>\\|L\\%u00fdsing D\\%u00e6ma\\>", "then": "\\%u00de\\%u00e1\\>", "when": "\\%u00deegar\\>"},
++      \"it": {"and": "E\\>", "background": "Contesto\\>", "but": "Ma\\>", "examples": "Esempi\\>", "feature": "Funzionalit\\%u00e0\\>", "given": "Dato\\>\\|Data\\>\\|Dati\\>\\|Date\\>", "scenario": "Scenario\\>", "scenario_outline": "Schema dello scenario\\>", "then": "Allora\\>", "when": "Quando\\>"},
+       \"ja": {"and": "\\%u304b\\%u3064", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u3057\\%u304b\\%u3057\\|\\%u305f\\%u3060\\%u3057\\|\\%u4f46\\%u3057", "examples": "\\%u30b5\\%u30f3\\%u30d7\\%u30eb\\>\\|\\%u4f8b\\>", "feature": "\\%u30d5\\%u30a3\\%u30fc\\%u30c1\\%u30e3\\>\\|\\%u6a5f\\%u80fd\\>", "given": "\\%u524d\\%u63d0", "scenario": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\>", "scenario_outline": "\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30a2\\%u30a6\\%u30c8\\%u30e9\\%u30a4\\%u30f3\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\%u30fc\\%u30c8\\>\\|\\%u30b7\\%u30ca\\%u30ea\\%u30aa\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>\\|\\%u30c6\\%u30f3\\%u30d7\\%u30ec\\>", "then": "\\%u306a\\%u3089\\%u3070", "when": "\\%u3082\\%u3057"},
+       \"ko": {"and": "\\%uadf8\\%ub9ac\\%uace0", "background": "\\%ubc30\\%uacbd\\>", "but": "\\%ud558\\%uc9c0\\%ub9cc\\|\\%ub2e8", "examples": "\\%uc608\\>", "feature": "\\%uae30\\%ub2a5\\>", "given": "\\%uc870\\%uac74\\|\\%uba3c\\%uc800", "scenario": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624\\>", "scenario_outline": "\\%uc2dc\\%ub098\\%ub9ac\\%uc624 \\%uac1c\\%uc694\\>", "then": "\\%uadf8\\%ub7ec\\%uba74", "when": "\\%ub9cc\\%uc77c\\|\\%ub9cc\\%uc57d"},
+       \"lt": {"and": "Ir\\>", "background": "Kontekstas\\>", "but": "Bet\\>", "examples": "Pavyzd\\%u017eiai\\>\\|Scenarijai\\>\\|Variantai\\>", "feature": "Savyb\\%u0117\\>", "given": "Duota\\>", "scenario": "Scenarijus\\>", "scenario_outline": "Scenarijaus \\%u0161ablonas\\>", "then": "Tada\\>", "when": "Kai\\>"},
+       \"lu": {"and": "an\\>\\|a\\>", "background": "Hannergrond\\>", "but": "m\\%u00e4\\>\\|awer\\>", "examples": "Beispiller\\>", "feature": "Funktionalit\\%u00e9it\\>", "given": "ugeholl\\>", "scenario": "Szenario\\>", "scenario_outline": "Plang vum Szenario\\>", "then": "dann\\>", "when": "wann\\>"},
+       \"lv": {"and": "Un\\>", "background": "Situ\\%u0101cija\\>\\|Konteksts\\>", "but": "Bet\\>", "examples": "Piem\\%u0113ri\\>\\|Paraugs\\>", "feature": "Funkcionalit\\%u0101te\\>\\|F\\%u012b\\%u010da\\>", "given": "Kad\\>", "scenario": "Scen\\%u0101rijs\\>", "scenario_outline": "Scen\\%u0101rijs p\\%u0113c parauga\\>", "then": "Tad\\>", "when": "Ja\\>"},
+       \"nl": {"and": "En\\>", "background": "Achtergrond\\>", "but": "Maar\\>", "examples": "Voorbeelden\\>", "feature": "Functionaliteit\\>", "given": "Gegeven\\>\\|Stel\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstract Scenario\\>", "then": "Dan\\>", "when": "Als\\>"},
+-      \"no": {"and": "Og\\>", "background": "Bakgrunn\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskap\\>", "given": "Gitt\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
+-      \"pl": {"and": "Oraz\\>", "background": "Za\\%u0142o\\%u017cenia\\>", "but": "Ale\\>", "examples": "Przyk\\%u0142ady\\>", "feature": "W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\>", "given": "Zak\\%u0142adaj\\%u0105c\\>", "scenario": "Scenariusz\\>", "scenario_outline": "Szablon scenariusza\\>", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>"},
+-      \"pt": {"and": "E\\>", "background": "Contexto\\>", "but": "Mas\\>", "examples": "Exemplos\\>", "feature": "Funcionalidade\\>", "given": "Dado\\>", "scenario": "Cen\\%u00e1rio\\>\\|Cenario\\>", "scenario_outline": "Esquema do Cen\\%u00e1rio\\>\\|Esquema do Cenario\\>", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"},
+-      \"ro": {"and": "Si\\>", "background": "Conditii\\>", "but": "Dar\\>", "examples": "Exemplele\\>", "feature": "Functionalitate\\>", "given": "Daca\\>", "scenario": "Scenariu\\>", "scenario_outline": "Scenariul de sablon\\>", "then": "Atunci\\>", "when": "Cand\\>"},
+-      \"ro-RO": {"and": "\\%u0218i\\>", "background": "Condi\\%u0163ii\\>", "but": "Dar\\>", "examples": "Exemplele\\>", "feature": "Func\\%u021bionalitate\\>", "given": "Dac\\%u0103\\>", "scenario": "Scenariu\\>", "scenario_outline": "Scenariul de \\%u015fablon\\>", "then": "Atunci\\>", "when": "C\\%u00e2nd\\>"},
+-      \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>", "but": "\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u0417\\%u043d\\%u0430\\%u0447\\%u0435\\%u043d\\%u0438\\%u044f\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>\\|\\%u0424\\%u0438\\%u0447\\%u0430\\>", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u0415\\%u0441\\%u043b\\%u0438\\>"},
+-      \"sk": {"and": "A\\>", "background": "Pozadie\\>", "but": "Ale\\>", "examples": "Pr\\%u00edklady\\>", "feature": "Po\\%u017eiadavka\\>", "given": "Pokia\\%u013e\\>", "scenario": "Scen\\%u00e1r\\>", "scenario_outline": "N\\%u00e1\\%u010drt Scen\\%u00e1ru\\>", "then": "Tak\\>", "when": "Ke\\%u010f\\>"},
++      \"no": {"and": "Og\\>", "background": "Bakgrunn\\>", "but": "Men\\>", "examples": "Eksempler\\>", "feature": "Egenskap\\>", "given": "Gitt\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomal\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e5r\\>"},
++      \"pl": {"and": "Oraz\\>\\|I\\>", "background": "Za\\%u0142o\\%u017cenia\\>", "but": "Ale\\>", "examples": "Przyk\\%u0142ady\\>", "feature": "W\\%u0142a\\%u015bciwo\\%u015b\\%u0107\\>\\|Potrzeba biznesowa\\>\\|Funkcja\\>\\|Aspekt\\>", "given": "Zak\\%u0142adaj\\%u0105c\\>\\|Maj\\%u0105c\\>", "scenario": "Scenariusz\\>", "scenario_outline": "Szablon scenariusza\\>", "then": "Wtedy\\>", "when": "Je\\%u017celi\\>\\|Je\\%u015bli\\>\\|Kiedy\\>\\|Gdy\\>"},
++      \"pt": {"and": "E\\>", "background": "Cen\\%u00e1rio de Fundo\\>\\|Cenario de Fundo\\>\\|Contexto\\>\\|Fundo\\>", "but": "Mas\\>", "examples": "Cen\\%u00e1rios\\>\\|Exemplos\\>\\|Cenarios\\>", "feature": "Caracter\\%u00edstica\\>\\|Funcionalidade\\>\\|Caracteristica\\>", "given": "Dadas\\>\\|Dados\\>\\|Dada\\>\\|Dado\\>", "scenario": "Cen\\%u00e1rio\\>\\|Cenario\\>", "scenario_outline": "Delinea\\%u00e7\\%u00e3o do Cen\\%u00e1rio\\>\\|Esquema do Cen\\%u00e1rio\\>\\|Delineacao do Cenario\\>\\|Esquema do Cenario\\>", "then": "Ent\\%u00e3o\\>\\|Entao\\>", "when": "Quando\\>"},
++      \"ro": {"and": "\\%u015ei\\>\\|\\%u0218i\\>\\|Si\\>", "background": "Context\\>", "but": "Dar\\>", "examples": "Exemple\\>", "feature": "Func\\%u0163ionalitate\\>\\|Func\\%u021bionalitate\\>\\|Functionalitate\\>", "given": "Da\\%u0163i fiind\\>\\|Da\\%u021bi fiind\\>\\|Dati fiind\\>\\|Date fiind\\>\\|Dat fiind\\>", "scenario": "Scenariu\\>", "scenario_outline": "Structur\\%u0103 scenariu\\>\\|Structura scenariu\\>", "then": "Atunci\\>", "when": "C\\%u00e2nd\\>\\|Cand\\>"},
++      \"ru": {"and": "\\%u041a \\%u0442\\%u043e\\%u043c\\%u0443 \\%u0436\\%u0435\\>\\|\\%u0422\\%u0430\\%u043a\\%u0436\\%u0435\\>\\|\\%u0418\\>", "background": "\\%u041f\\%u0440\\%u0435\\%u0434\\%u044b\\%u0441\\%u0442\\%u043e\\%u0440\\%u0438\\%u044f\\>\\|\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>", "but": "\\%u041d\\%u043e\\>\\|\\%u0410\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u044b\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>\\|\\%u0421\\%u0432\\%u043e\\%u0439\\%u0441\\%u0442\\%u0432\\%u043e\\>\\|\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u044f\\>", "given": "\\%u0414\\%u043e\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\>\\|\\%u041f\\%u0443\\%u0441\\%u0442\\%u044c\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u044f\\>", "then": "\\%u0422\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u041a\\%u043e\\%u0433\\%u0434\\%u0430\\>\\|\\%u0415\\%u0441\\%u043b\\%u0438\\>"},
++      \"sk": {"and": "A z\\%u00e1rove\\%u0148\\>\\|A taktie\\%u017e\\>\\|A tie\\%u017e\\>\\|A\\>", "background": "Pozadie\\>", "but": "Ale\\>", "examples": "Pr\\%u00edklady\\>", "feature": "Po\\%u017eiadavka\\>\\|Vlastnos\\%u0165\\>\\|Funkcia\\>", "given": "Za predpokladu\\>\\|Pokia\\%u013e\\>", "scenario": "Scen\\%u00e1r\\>", "scenario_outline": "N\\%u00e1\\%u010drt Scen\\%u00e1ru\\>\\|N\\%u00e1\\%u010drt Scen\\%u00e1ra\\>\\|Osnova Scen\\%u00e1ra\\>", "then": "Potom\\>\\|Tak\\>", "when": "Ke\\%u010f\\>\\|Ak\\>"},
+       \"sr-Cyrl": {"and": "\\%u0418\\>", "background": "\\%u041a\\%u043e\\%u043d\\%u0442\\%u0435\\%u043a\\%u0441\\%u0442\\>\\|\\%u041f\\%u043e\\%u0437\\%u0430\\%u0434\\%u0438\\%u043d\\%u0430\\>\\|\\%u041e\\%u0441\\%u043d\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0438\\>", "examples": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0438\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041c\\%u043e\\%u0433\\%u0443\\%u045b\\%u043d\\%u043e\\%u0441\\%u0442\\>\\|\\%u041e\\%u0441\\%u043e\\%u0431\\%u0438\\%u043d\\%u0430\\>", "given": "\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u043e\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0435\\>\\|\\%u0417\\%u0430\\%u0434\\%u0430\\%u0442\\%u0438\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043c\\%u0435\\%u0440\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0458\\%u0430\\>\\|\\%u041a\\%u043e\\%u043d\\%u0446\\%u0435\\%u043f\\%u0442\\>\\|\\%u0421\\%u043a\\%u0438\\%u0446\\%u0430\\>", "then": "\\%u041e\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u041a\\%u0430\\%u0434\\%u0430\\>\\|\\%u041a\\%u0430\\%u0434\\>"},
+       \"sr-Latn": {"and": "I\\>", "background": "Kontekst\\>\\|Pozadina\\>\\|Osnova\\>", "but": "Ali\\>", "examples": "Scenariji\\>\\|Primeri\\>", "feature": "Mogu\\%u0107nost\\>\\|Funkcionalnost\\>\\|Mogucnost\\>\\|Osobina\\>", "given": "Zadato\\>\\|Zadate\\>\\|Zatati\\>", "scenario": "Scenario\\>\\|Primer\\>", "scenario_outline": "Struktura scenarija\\>\\|Koncept\\>\\|Skica\\>", "then": "Onda\\>", "when": "Kada\\>\\|Kad\\>"},
+-      \"sv": {"and": "Och\\>", "background": "Bakgrund\\>", "but": "Men\\>", "examples": "Exempel\\>", "feature": "Egenskap\\>", "given": "Givet\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"},
++      \"sv": {"and": "Och\\>", "background": "Bakgrund\\>", "but": "Men\\>", "examples": "Exempel\\>", "feature": "Egenskap\\>", "given": "Givet\\>", "scenario": "Scenario\\>", "scenario_outline": "Abstrakt Scenario\\>\\|Scenariomall\\>", "then": "S\\%u00e5\\>", "when": "N\\%u00e4r\\>"},
++      \"th": {"and": "\\%u0e41\\%u0e25\\%u0e30\\>", "background": "\\%u0e41\\%u0e19\\%u0e27\\%u0e04\\%u0e34\\%u0e14\\>", "but": "\\%u0e41\\%u0e15\\%u0e48\\>", "examples": "\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e0a\\%u0e38\\%u0e14\\%u0e02\\%u0e2d\\%u0e07\\%u0e15\\%u0e31\\%u0e27\\%u0e2d\\%u0e22\\%u0e48\\%u0e32\\%u0e07\\>", "feature": "\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e15\\%u0e49\\%u0e2d\\%u0e07\\%u0e01\\%u0e32\\%u0e23\\%u0e17\\%u0e32\\%u0e07\\%u0e18\\%u0e38\\%u0e23\\%u0e01\\%u0e34\\%u0e08\\>\\|\\%u0e04\\%u0e27\\%u0e32\\%u0e21\\%u0e2a\\%u0e32\\%u0e21\\%u0e32\\%u0e23\\%u0e16\\>\\|\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2b\\%u0e25\\%u0e31\\%u0e01\\>", "given": "\\%u0e01\\%u0e33\\%u0e2b\\%u0e19\\%u0e14\\%u0e43\\%u0e2b\\%u0e49\\>", "scenario": "\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "scenario_outline": "\\%u0e42\\%u0e04\\%u0e23\\%u0e07\\%u0e2a\\%u0e23\\%u0e49\\%u0e32\\%u0e07\\%u0e02\\%u0e2d\\%u0e07\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>\\|\\%u0e2a\\%u0e23\\%u0e38\\%u0e1b\\%u0e40\\%u0e2b\\%u0e15\\%u0e38\\%u0e01\\%u0e32\\%u0e23\\%u0e13\\%u0e4c\\>", "then": "\\%u0e14\\%u0e31\\%u0e07\\%u0e19\\%u0e31\\%u0e49\\%u0e19\\>", "when": "\\%u0e40\\%u0e21\\%u0e37\\%u0e48\\%u0e2d\\>"},
++      \"tl": {"and": "\\%u0c2e\\%u0c30\\%u0c3f\\%u0c2f\\%u0c41\\>", "background": "\\%u0c28\\%u0c47\\%u0c2a\\%u0c25\\%u0c4d\\%u0c2f\\%u0c02\\>", "but": "\\%u0c15\\%u0c3e\\%u0c28\\%u0c3f\\>", "examples": "\\%u0c09\\%u0c26\\%u0c3e\\%u0c39\\%u0c30\\%u0c23\\%u0c32\\%u0c41\\>", "feature": "\\%u0c17\\%u0c41\\%u0c23\\%u0c2e\\%u0c41\\>", "given": "\\%u0c1a\\%u0c46\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c2c\\%u0c21\\%u0c3f\\%u0c28\\%u0c26\\%u0c3f\\>", "scenario": "\\%u0c38\\%u0c28\\%u0c4d\\%u0c28\\%u0c3f\\%u0c35\\%u0c47\\%u0c36\\%u0c02\\>", "scenario_outline": "\\%u0c15\\%u0c25\\%u0c28\\%u0c02\\>", "then": "\\%u0c05\\%u0c2a\\%u0c4d\\%u0c2a\\%u0c41\\%u0c21\\%u0c41\\>", "when": "\\%u0c08 \\%u0c2a\\%u0c30\\%u0c3f\\%u0c38\\%u0c4d\\%u0c25\\%u0c3f\\%u0c24\\%u0c3f\\%u0c32\\%u0c4b\\>"},
+       \"tr": {"and": "Ve\\>", "background": "Ge\\%u00e7mi\\%u015f\\>", "but": "Fakat\\>\\|Ama\\>", "examples": "\\%u00d6rnekler\\>", "feature": "\\%u00d6zellik\\>", "given": "Diyelim ki\\>", "scenario": "Senaryo\\>", "scenario_outline": "Senaryo tasla\\%u011f\\%u0131\\>", "then": "O zaman\\>", "when": "E\\%u011fer ki\\>"},
+-      \"uk": {"and": "\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e\\>", "then": "\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>"},
++      \"tt": {"and": "\\%u04ba\\%u04d9\\%u043c\\>\\|\\%u0412\\%u04d9\\>", "background": "\\%u041a\\%u0435\\%u0440\\%u0435\\%u0448\\>", "but": "\\%u041b\\%u04d9\\%u043a\\%u0438\\%u043d\\>\\|\\%u04d8\\%u043c\\%u043c\\%u0430\\>", "examples": "\\%u04ae\\%u0440\\%u043d\\%u04d9\\%u043a\\%u043b\\%u04d9\\%u0440\\>\\|\\%u041c\\%u0438\\%u0441\\%u0430\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u04ae\\%u0437\\%u0435\\%u043d\\%u0447\\%u04d9\\%u043b\\%u0435\\%u043a\\%u043b\\%u0435\\%u043b\\%u0435\\%u043a\\>\\|\\%u041c\\%u04e9\\%u043c\\%u043a\\%u0438\\%u043d\\%u043b\\%u0435\\%u043a\\>", "given": "\\%u04d8\\%u0439\\%u0442\\%u0438\\%u043a\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\%u043d\\%u044b\\%u04a3 \\%u0442\\%u04e9\\%u0437\\%u0435\\%u043b\\%u0435\\%u0448\\%u0435\\>", "then": "\\%u041d\\%u04d9\\%u0442\\%u0438\\%u0497\\%u04d9\\%u0434\\%u04d9\\>", "when": "\\%u04d8\\%u0433\\%u04d9\\%u0440\\>"},
++      \"uk": {"and": "\\%u0410 \\%u0442\\%u0430\\%u043a\\%u043e\\%u0436\\>\\|\\%u0422\\%u0430\\>\\|\\%u0406\\>", "background": "\\%u041f\\%u0435\\%u0440\\%u0435\\%u0434\\%u0443\\%u043c\\%u043e\\%u0432\\%u0430\\>", "but": "\\%u0410\\%u043b\\%u0435\\>", "examples": "\\%u041f\\%u0440\\%u0438\\%u043a\\%u043b\\%u0430\\%u0434\\%u0438\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0456\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e, \\%u0449\\%u043e\\>\\|\\%u041f\\%u0440\\%u0438\\%u043f\\%u0443\\%u0441\\%u0442\\%u0438\\%u043c\\%u043e\\>\\|\\%u041d\\%u0435\\%u0445\\%u0430\\%u0439\\>\\|\\%u0414\\%u0430\\%u043d\\%u043e\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430 \\%u0441\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0456\\%u044e\\>", "then": "\\%u0422\\%u043e\\%u0434\\%u0456\\>\\|\\%u0422\\%u043e\\>", "when": "\\%u042f\\%u043a\\%u0449\\%u043e\\>\\|\\%u041a\\%u043e\\%u043b\\%u0438\\>"},
+       \"uz": {"and": "\\%u0412\\%u0430\\>", "background": "\\%u0422\\%u0430\\%u0440\\%u0438\\%u0445\\>", "but": "\\%u041b\\%u0435\\%u043a\\%u0438\\%u043d\\>\\|\\%u0411\\%u0438\\%u0440\\%u043e\\%u043a\\>\\|\\%u0410\\%u043c\\%u043c\\%u043e\\>", "examples": "\\%u041c\\%u0438\\%u0441\\%u043e\\%u043b\\%u043b\\%u0430\\%u0440\\>", "feature": "\\%u0424\\%u0443\\%u043d\\%u043a\\%u0446\\%u0438\\%u043e\\%u043d\\%u0430\\%u043b\\>", "given": "\\%u0410\\%u0433\\%u0430\\%u0440\\>", "scenario": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439\\>", "scenario_outline": "\\%u0421\\%u0446\\%u0435\\%u043d\\%u0430\\%u0440\\%u0438\\%u0439 \\%u0441\\%u0442\\%u0440\\%u0443\\%u043a\\%u0442\\%u0443\\%u0440\\%u0430\\%u0441\\%u0438\\>", "then": "\\%u0423\\%u043d\\%u0434\\%u0430\\>", "when": "\\%u0410\\%u0433\\%u0430\\%u0440\\>"},
+       \"vi": {"and": "V\\%u00e0\\>", "background": "B\\%u1ed1i c\\%u1ea3nh\\>", "but": "Nh\\%u01b0ng\\>", "examples": "D\\%u1eef li\\%u1ec7u\\>", "feature": "T\\%u00ednh n\\%u0103ng\\>", "given": "Bi\\%u1ebft\\>\\|Cho\\>", "scenario": "T\\%u00ecnh hu\\%u1ed1ng\\>\\|K\\%u1ecbch b\\%u1ea3n\\>", "scenario_outline": "Khung t\\%u00ecnh hu\\%u1ed1ng\\>\\|Khung k\\%u1ecbch b\\%u1ea3n\\>", "then": "Th\\%u00ec\\>", "when": "Khi\\>"},
+-      \"zh-CN": {"and": "\\%u800c\\%u4e14", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982", "scenario": "\\%u573a\\%u666f\\>", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\>", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"},
+-      \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u8a2d", "scenario": "\\%u5834\\%u666f\\>\\|\\%u5287\\%u672c\\>", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\>\\|\\%u5287\\%u672c\\%u5927\\%u7db1\\>", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}}
++      \"zh-CN": {"and": "\\%u800c\\%u4e14\\|\\%u5e76\\%u4e14\\|\\%u540c\\%u65f6", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8bbe\\|\\%u5047\\%u5b9a", "scenario": "\\%u573a\\%u666f\\>\\|\\%u5267\\%u672c\\>", "scenario_outline": "\\%u573a\\%u666f\\%u5927\\%u7eb2\\>\\|\\%u5267\\%u672c\\%u5927\\%u7eb2\\>", "then": "\\%u90a3\\%u4e48", "when": "\\%u5f53"},
++      \"zh-TW": {"and": "\\%u800c\\%u4e14\\|\\%u4e26\\%u4e14\\|\\%u540c\\%u6642", "background": "\\%u80cc\\%u666f\\>", "but": "\\%u4f46\\%u662f", "examples": "\\%u4f8b\\%u5b50\\>", "feature": "\\%u529f\\%u80fd\\>", "given": "\\%u5047\\%u5982\\|\\%u5047\\%u8a2d\\|\\%u5047\\%u5b9a", "scenario": "\\%u5834\\%u666f\\>\\|\\%u5287\\%u672c\\>", "scenario_outline": "\\%u5834\\%u666f\\%u5927\\%u7db1\\>\\|\\%u5287\\%u672c\\%u5927\\%u7db1\\>", "then": "\\%u90a3\\%u9ebc", "when": "\\%u7576"}}
+ 
+ function! s:pattern(key)
+   let language = matchstr(getline(1),'#\s*language:\s*\zs\S\+')
+@@ -71,13 +83,15 @@
+ endfunction
+ 
+ function! s:Add(name)
+-  let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","Comment","Table"],'"cucumber".a:name.v:val'),",")
++  let next = " skipempty skipwhite nextgroup=".join(map(["Region","AndRegion","ButRegion","Comment","String","Table"],'"cucumber".a:name.v:val'),",")
+   exe "syn region cucumber".a:name.'Region matchgroup=cucumber'.a:name.' start="\%(^\s*\)\@<=\%('.s:pattern(tolower(a:name)).'\)" end="$"'.next
+   exe 'syn region cucumber'.a:name.'AndRegion matchgroup=cucumber'.a:name.'And start="\%(^\s*\)\@<='.s:pattern('and').'" end="$" contained'.next
+   exe 'syn region cucumber'.a:name.'ButRegion matchgroup=cucumber'.a:name.'But start="\%(^\s*\)\@<='.s:pattern('but').'" end="$" contained'.next
+   exe 'syn match cucumber'.a:name.'Comment "\%(^\s*\)\@<=#.*" contained'.next
++  exe 'syn region cucumber'.a:name.'String start=+\%(^\s*\)\@<="""+ end=+"""+ contained'.next
+   exe 'syn match cucumber'.a:name.'Table "\%(^\s*\)\@<=|.*" contained contains=cucumberDelimiter'.next
+   exe 'hi def link cucumber'.a:name.'Comment cucumberComment'
++  exe 'hi def link cucumber'.a:name.'String cucumberString'
+   exe 'hi def link cucumber'.a:name.'But cucumber'.a:name.'And'
+   exe 'hi def link cucumber'.a:name.'And cucumber'.a:name
+   exe 'syn cluster cucumberStepRegions add=cucumber'.a:name.'Region,cucumber'.a:name.'AndRegion,cucumber'.a:name.'ButRegion'
+@@ -97,9 +111,8 @@
+ 
+ syn match   cucumberPlaceholder   "<[^<>]*>" contained containedin=@cucumberStepRegions
+ syn match   cucumberExampleTable  "\%(^\s*\)\@<=|.*" contains=cucumberDelimiter
+-syn match   cucumberDelimiter     "|" contained
+-syn match   cucumberTags          "\%(^\s*\)\@<=\%(@[^@[:space:]]\+\s\+\)*@[^@[:space:]]\+\s*$"
+-syn region  cucumberString   start=+\%(^\s*\)\@<="""+ end=+"""+
++syn match   cucumberDelimiter     "\\\@<!\%(\\\\\)*\zs|" contained
++syn match   cucumberTags          "\%(^\s*\)\@<=\%(@[^@[:space:]]\+\s\+\)*@[^@[:space:]]\+\s*$" contains=@NoSpell
+ 
+ call s:Add('Then')
+ call s:Add('When')
+@@ -123,4 +136,7 @@
+ 
+ let b:current_syntax = "cucumber"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:set sts=2 sw=2:
+diff -Naur vim73.orig/runtime/syntax/cupl.vim vim73/runtime/syntax/cupl.vim
+--- vim73.orig/runtime/syntax/cupl.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/cupl.vim	2013-06-07 17:07:22.168945376 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	CUPL
+-" Maintainer:	John Cook <john.cook@kla-tencor.com>
+-" Last Change:	2001 Apr 25
++" Maintainer:	John Cook <johncook3@gmail.com>
++" Last Change:	2011 Dec 27
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " this language is oblivious to case.
+ syn case ignore
+ 
+@@ -127,4 +130,8 @@
+ endif
+ 
+ let b:current_syntax = "cupl"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim:ts=8
+diff -Naur vim73.orig/runtime/syntax/cweb.vim vim73/runtime/syntax/cweb.vim
+--- vim73.orig/runtime/syntax/cweb.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/cweb.vim	2013-06-07 17:07:22.215611909 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	CWEB
+ " Maintainer:	Andreas Scherer <andreas.scherer@pobox.com>
+-" Last Change:	April 30, 2001
++" Last Change:	2011 Dec 25 by Thilo Six
+ 
+ " Details of the CWEB language can be found in the article by Donald E. Knuth
+ " and Silvio Levy, "The CWEB System of Structured Documentation", included as
+@@ -36,6 +36,9 @@
+ " C/C++ section of a CWEB chunk or in inner C/C++ context in "|...|" groups.
+ syntax include @webIncludedC <sfile>:p:h/cpp.vim
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Inner C/C++ context (ICC) should be quite simple as it's comprised of
+ " material in "|...|"; however the naive definition for this region would
+ " hickup at the innocious "\|" TeX macro.  Note: For the time being we expect
+@@ -77,4 +80,6 @@
+ 
+ let b:current_syntax = "cweb"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/d.vim vim73/runtime/syntax/d.vim
+--- vim73.orig/runtime/syntax/d.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/d.vim	2013-06-07 17:07:22.285611709 +0000
+@@ -1,18 +1,23 @@
+-" Vim syntax file for the D programming language (version 1.053 and 2.039).
++" Vim syntax file for the D programming language (version 1.076 and 2.063).
+ "
+-" Language:	D
+-" Maintainer:	Jason Mills<jasonmills@nf.sympatico.ca>
+-" Last Change:	2010 Jan 07
+-" Version:	0.18
++" Language:     D
++" Maintainer:   Jesse Phillips <Jesse.K.Phillips+D@gmail.com>
++" Last Change:  2013 May 21
++" Version:      0.25
+ "
+ " Contributors:
+-"   - Kirk McDonald: version 0.17 updates, with minor modifications
+-"     (http://paste.dprogramming.com/dplmb7qx?view=hidelines)
+-"   - Jesse K. Phillips: patch for some keywords and attributes (annotations), with modifications
+-"   - Tim Keating: patch to fix a bug in highlighting the `\` literal
+-"   - Frank Benoit: Fixed a bug that caused some identifiers and numbers to highlight as octal number errors.
++"   - Jason Mills: original Maintainer
++"   - Kirk McDonald
++"   - Tim Keating
++"   - Frank Benoit
++"   - Shougo Matsushita
++"   - Ellery Newcomer
++"   - Steven N. Oliver
++"   - Sohgo Takeuchi
++"   - Robert Clipsham
+ "
+-" Please email me with bugs, comments, and suggestions.
++" Please submit bugs/comments/suggestions to the github repo: 
++" https://github.com/JesseKPhillips/d.vim
+ "
+ " Options:
+ "   d_comment_strings - Set to highlight strings and numbers in comments.
+@@ -20,107 +25,174 @@
+ "   d_hl_operator_overload - Set to highlight D's specially named functions
+ "   that when overloaded implement unary and binary operators (e.g. opCmp).
+ "
+-" Todo:
+-"   - Determine a better method of sync'ing than simply setting minlines
+-"   to a large number.
+-"
+-"   - Several keywords (e.g., in, out, inout) are both storage class and
+-"   statements, depending on their context. Perhaps use pattern matching to
+-"   figure out which and highlight appropriately. For now I have made such
+-"   keywords storage classes so their highlighting is consistent with other
+-"   keywords that are commonly used with them, but are true storage classes,
+-"   such as lazy. Similarly, I made some statement keywords (e.g. body) storage
+-"   classes.
+-"
+-"   - Mark contents of the asm statement body as special
+-"
+-"   - Maybe highlight the 'exit', 'failure', and 'success' parts of the
+-"   scope() statement.
+-"
+-"   - Highlighting DDoc comments.
+-"
++"   d_hl_object_types - Set to highlight some common types from object.di.
+ 
+ " Quit when a syntax file was already loaded
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++" Support cpoptions
++let s:cpo_save = &cpo
++set cpo&vim
++
++" Set the current syntax to be known as d
++let b:current_syntax = "d"
++
+ " Keyword definitions
+ "
+-syn keyword dExternal		import package module extern
+-syn keyword dConditional	if else switch
+-syn keyword dBranch		goto break continue
+-syn keyword dRepeat		while for do foreach foreach_reverse
+-syn keyword dBoolean		true false
+-syn keyword dConstant		null
+-syn keyword dConstant		__FILE__ __LINE__ __EOF__ __VERSION__
+-syn keyword dConstant		__DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
+-
+-syn keyword dTypedef		alias typedef
+-syn keyword dStructure		template interface class struct union
+-syn keyword dEnum		enum
+-syn keyword dOperator		new delete typeof typeid cast align is
+-syn keyword dOperator		this super
++syn keyword dExternal              contained import module
++syn keyword dAssert                assert
++syn keyword dConditional           if else switch
++syn keyword dBranch                goto break continue
++syn keyword dRepeat                while for do foreach foreach_reverse
++syn keyword dBoolean               true false
++syn keyword dConstant              null
++syn keyword dConstant              __FILE__ __LINE__ __EOF__ __VERSION__
++syn keyword dConstant              __DATE__ __TIME__ __TIMESTAMP__ __VENDOR__
++syn keyword dConstant              __MODULE__ __FUNCTION__ __PRETTY_FUNCTION__
++syn keyword dTypedef               alias typedef
++syn keyword dStructure             template interface class struct union
++syn keyword dEnum                  enum
++syn keyword dOperator              new delete typeof typeid cast align is
++syn keyword dOperator              this super
+ if exists("d_hl_operator_overload")
+-  syn keyword dOpOverload	opNeg opCom opPostInc opPostDec opCast opAdd opSub opSub_r
+-  syn keyword dOpOverload	opMul opDiv opDiv_r opMod opMod_r opAnd opOr opXor
+-  syn keyword dOpOverload	opShl opShl_r opShr opShr_r opUShr opUShr_r opCat
+-  syn keyword dOpOverload	opCat_r opEquals opEquals opCmp
+-  syn keyword dOpOverload	opAssign opAddAssign opSubAssign opMulAssign opDivAssign
+-  syn keyword dOpOverload	opModAssign opAndAssign opOrAssign opXorAssign
+-  syn keyword dOpOverload	opShlAssign opShrAssign opUShrAssign opCatAssign
+-  syn keyword dOpOverload	opIndex opIndexAssign opCall opSlice opSliceAssign opPos
+-  syn keyword dOpOverload	opAdd_r opMul_r opAnd_r opOr_r opXor_r opIn opIn_r
+-  syn keyword dOpOverload	opPow opDispatch opStar opDot opApply opApplyReverse
++  syn keyword dOpOverload          opNeg opCom opPostInc opPostDec opCast opAdd
++  syn keyword dOpOverload          opSub opSub_r opMul opDiv opDiv_r opMod 
++  syn keyword dOpOverload          opMod_r opAnd opOr opXor opShl opShl_r opShr
++  syn keyword dOpOverload          opShr_r opUShr opUShr_r opCat
++  syn keyword dOpOverload          opCat_r opEquals opCmp
++  syn keyword dOpOverload          opAssign opAddAssign opSubAssign opMulAssign
++  syn keyword dOpOverload          opDivAssign opModAssign opAndAssign 
++  syn keyword dOpOverload          opOrAssign opXorAssign opShlAssign 
++  syn keyword dOpOverload          opShrAssign opUShrAssign opCatAssign
++  syn keyword dOpOverload          opIndex opIndexAssign opIndexOpAssign
++  syn keyword dOpOverload          opCall opSlice opSliceAssign opSliceOpAssign 
++  syn keyword dOpOverload          opPos opAdd_r opMul_r opAnd_r opOr_r opXor_r
++  syn keyword dOpOverload          opIn opIn_r opPow opDispatch opStar opDot 
++  syn keyword dOpOverload          opApply opApplyReverse opDollar
++  syn keyword dOpOverload          opUnary opIndexUnary opSliceUnary
++  syn keyword dOpOverload          opBinary opBinaryRight
+ endif
+-syn keyword dType		ushort int uint long ulong float
+-syn keyword dType		void byte ubyte double bit char wchar ucent cent
+-syn keyword dType		short bool dchar string wstring dstring
+-syn keyword dType		real ireal ifloat idouble creal cfloat cdouble
+-syn keyword dDebug		deprecated unittest
+-syn keyword dExceptions		throw try catch finally
+-syn keyword dScopeDecl		public protected private export
+-syn keyword dStatement		version debug return with
+-syn keyword dStatement		function delegate __traits asm mixin macro
+-syn keyword dStorageClass	in out inout ref lazy scope body
+-syn keyword dStorageClass	pure nothrow
+-syn keyword dStorageClass	auto static override final abstract volatile __gshared __thread
+-syn keyword dStorageClass	synchronized immutable shared const invariant lazy
+-syn keyword dPragma		pragma
++
++syn keyword dType                  byte ubyte short ushort int uint long ulong cent ucent
++syn keyword dType                  void bool Object
++syn keyword dType                  float double real
++syn keyword dType                  ushort int uint long ulong float
++syn keyword dType                  char wchar dchar string wstring dstring
++syn keyword dType                  ireal ifloat idouble creal cfloat cdouble
++syn keyword dType                  size_t ptrdiff_t sizediff_t equals_t hash_t
++if exists("d_hl_object_types")
++  syn keyword dType                Object Throwable AssociativeArray Error Exception
++  syn keyword dType                Interface OffsetTypeInfo TypeInfo TypeInfo_Typedef
++  syn keyword dType                TypeInfo_Enum TypeInfo_Pointer TypeInfo_Array
++  syn keyword dType                TypeInfo_StaticArray TypeInfo_AssociativeArray
++  syn keyword dType                TypeInfo_Function TypeInfo_Delegate TypeInfo_Class
++  syn keyword dType                ClassInfo TypeInfo_Interface TypeInfo_Struct
++  syn keyword dType                TypeInfo_Tuple TypeInfo_Const TypeInfo_Invariant
++  syn keyword dType                TypeInfo_Shared TypeInfo_Inout MemberInfo
++  syn keyword dType                MemberInfo_field MemberInfo_function ModuleInfo
++endif
++syn keyword dDebug                 deprecated unittest invariant
++syn keyword dExceptions            throw try catch finally
++syn keyword dScopeDecl             public protected private export package 
++syn keyword dStatement             debug return with
++syn keyword dStatement             function delegate __ctfe mixin macro __simd
++syn keyword dStatement             in out body
++syn keyword dStorageClass          contained in out scope
++syn keyword dStorageClass          inout ref lazy pure nothrow
++syn keyword dStorageClass          auto static override final abstract volatile
++syn keyword dStorageClass          __gshared __vector
++syn keyword dStorageClass          synchronized shared immutable const lazy
++syn keyword dIdentifier            _arguments _argptr __vptr __monitor
++syn keyword dIdentifier             _ctor _dtor __argTypes __overloadset
++syn keyword dScopeIdentifier       contained exit success failure
++syn keyword dTraitsIdentifier      contained isAbstractClass isArithmetic
++syn keyword dTraitsIdentifier      contained isAssociativeArray isFinalClass
++syn keyword dTraitsIdentifier      contained isPOD isNested isFloating
++syn keyword dTraitsIdentifier      contained isIntegral isScalar isStaticArray
++syn keyword dTraitsIdentifier      contained isUnsigned isVirtualFunction
++syn keyword dTraitsIdentifier      contained isVirtualMethod isAbstractFunction
++syn keyword dTraitsIdentifier      contained isFinalFunction isStaticFunction
++syn keyword dTraitsIdentifier      contained isRef isOut isLazy hasMember
++syn keyword dTraitsIdentifier      contained identifier getAttributes getMember
++syn keyword dTraitsIdentifier      contained getOverloads getProtection
++syn keyword dTraitsIdentifier      contained getVirtualFunctions
++syn keyword dTraitsIdentifier      contained getVirtualMethods parent
++syn keyword dTraitsIdentifier      contained classInstanceSize allMembers
++syn keyword dTraitsIdentifier      contained derivedMembers isSame compiles
++syn keyword dPragmaIdentifier      contained lib msg startaddress GNU_asm
++syn keyword dExternIdentifier      contained Windows Pascal Java System D
++syn keyword dAttribute             contained safe trusted system
++syn keyword dAttribute             contained property disable
++syn keyword dVersionIdentifier     contained DigitalMars GNU LDC SDC D_NET
++syn keyword dVersionIdentifier     contained X86 X86_64 ARM PPC PPC64 IA64 MIPS MIPS64 Alpha
++syn keyword dVersionIdentifier     contained SPARC SPARC64 S390 S390X HPPA HPPA64 SH SH64
++syn keyword dVersionIdentifier     contained linux Posix OSX FreeBSD Windows Win32 Win64
++syn keyword dVersionIdentifier     contained OpenBSD BSD Solaris AIX SkyOS SysV3 SysV4 Hurd
++syn keyword dVersionIdentifier     contained Cygwin MinGW
++syn keyword dVersionIdentifier     contained LittleEndian BigEndian
++syn keyword dVersionIdentifier     contained D_InlineAsm_X86 D_InlineAsm_X86_64
++syn keyword dVersionIdentifier     contained D_Version2 D_Coverage D_Ddoc D_LP64 D_PIC
++syn keyword dVersionIdentifier     contained unittest none all
++
++syn cluster dComment contains=dNestedComment,dBlockComment,dLineComment
++
++" Highlight the sharpbang
++syn match dSharpBang "\%^#!.*"     display
+ 
+ " Attributes/annotations
+-syn match dAnnotation	"@[_$a-zA-Z][_$a-zA-Z0-9_]*\>"
++syn match dAnnotation	"@[_$a-zA-Z][_$a-zA-Z0-9_]*\>" contains=dAttribute
++
++" Version Identifiers
++syn match dVersion      "\<version\>"
++syn match dVersion      "\<version\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+7 contains=dVersionIdentifier
++
++" Scope Identifiers
++syn match dStatement    "\<scope\>"
++syn match dStatement    "\<scope\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+5 contains=dScopeIdentifier
++
++" Traits Statement
++syn match dStatement    "\<__traits\>"
++syn match dStatement    "\<__traits\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dTraitsIdentifier
+ 
+-" Assert is a statement and a module name.
+-syn match dAssert "^assert\>"
+-syn match dAssert "[^.]\s*\<assert\>"ms=s+1
++" Pragma Statement
++syn match dPragma       "\<pragma\>"
++syn match dPragma       "\<pragma\s*([_a-zA-Z][_a-zA-Z0-9]*\>"he=s+8 contains=dPragmaIdentifier
++
++" Necessary to highlight C++ in extern modifiers.
++syn match dExternIdentifier "C\(++\)\?" contained
++
++" Extern Identifiers
++syn match dExternal     "\<extern\>"
++syn match dExtern       "\<extern\s*([_a-zA-Z][_a-zA-Z0-9\+]*\>"he=s+6 contains=dExternIdentifier
++
++" Make import a region to prevent highlighting keywords
++syn region dImport start="import" end=";" contains=dExternal,@dComment
++
++" Make module a region to prevent highlighting keywords
++syn region dImport start="module" end=";" contains=dExternal,@dComment
+ 
+ " dTokens is used by the token string highlighting
+ syn cluster dTokens contains=dExternal,dConditional,dBranch,dRepeat,dBoolean
+ syn cluster dTokens add=dConstant,dTypedef,dStructure,dOperator,dOpOverload
+ syn cluster dTokens add=dType,dDebug,dExceptions,dScopeDecl,dStatement
+-syn cluster dTokens add=dStorageClass,dPragma,dAssert,dAnnotation
++syn cluster dTokens add=dStorageClass,dPragma,dAssert,dAnnotation,dEnum
+ 
+-" Marks contents of the asm statment body as special
+-"
+-" TODO
+-"syn match dAsmStatement "\<asm\>"
+-"syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement
+-"
+-"hi def link dAsmBody dUnicode
+-"hi def link dAsmStatement dStatement
++" Create a match for parameter lists to identify storage class
++syn region paramlist start="(" end=")" contains=@dTokens
+ 
+ " Labels
+ "
+ " We contain dScopeDecl so public: private: etc. are not highlighted like labels
+ syn match dUserLabel    "^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=dLabel,dScopeDecl,dEnum
+-syn keyword dLabel	case default
++syn keyword dLabel      case default
+ 
+ syn cluster dTokens add=dUserLabel,dLabel
+ 
+ " Comments
+ "
+-syn keyword dTodo	contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
++syn keyword dTodo                                                                contained TODO FIXME TEMP REFACTOR REVIEW HACK BUG XXX
+ syn match dCommentStar	contained "^\s*\*[^/]"me=e-1
+ syn match dCommentStar	contained "^\s*\*$"
+ syn match dCommentPlus	contained "^\s*+[^/]"me=e-1
+@@ -129,12 +201,12 @@
+   syn region dBlockCommentString	contained start=+"+ end=+"+ end=+\*/+me=s-1,he=s-1 contains=dCommentStar,dUnicode,dEscSequence,@Spell
+   syn region dNestedCommentString	contained start=+"+ end=+"+ end="+"me=s-1,he=s-1 contains=dCommentPlus,dUnicode,dEscSequence,@Spell
+   syn region dLineCommentString		contained start=+"+ end=+$\|"+ contains=dUnicode,dEscSequence,@Spell
+-  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
+-  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
++  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
++  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
+   syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
+ else
+-  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell
+-  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell
++  syn region dBlockComment	start="/\*"  end="\*/" contains=dBlockCommentString,dTodo,@Spell fold
++  syn region dNestedComment	start="/+"  end="+/" contains=dNestedComment,dNestedCommentString,dTodo,@Spell fold
+   syn match  dLineComment	"//.*" contains=dLineCommentString,dTodo,@Spell
+ endif
+ 
+@@ -248,54 +320,241 @@
+ " TODO: Highlight following Integer and optional Filespec.
+ syn region  dPragma start="#\s*\(line\>\)" skip="\\$" end="$"
+ 
++" Block
++"
++syn region dBlock	start="{" end="}" transparent fold
++
+ 
+ " The default highlighting.
+ "
+-hi def link dBinary		Number
+-hi def link dDec		Number
+-hi def link dHex		Number
+-hi def link dOctal		Number
+-hi def link dFloat		Float
+-hi def link dHexFloat		Float
+-hi def link dDebug		Debug
+-hi def link dBranch		Conditional
+-hi def link dConditional	Conditional
+-hi def link dLabel		Label
+-hi def link dUserLabel		Label
+-hi def link dRepeat		Repeat
+-hi def link dExceptions		Exception
+-hi def link dAssert		Statement
+-hi def link dStatement		Statement
+-hi def link dScopeDecl		dStorageClass
+-hi def link dStorageClass	StorageClass
+-hi def link dBoolean		Boolean
+-hi def link dUnicode		Special
+-hi def link dTokenStringBrack	String
+-hi def link dHereString		String
+-hi def link dNestString		String
+-hi def link dDelimString	String
+-hi def link dRawString		String
+-hi def link dString		String
+-hi def link dHexString		String
+-hi def link dCharacter		Character
+-hi def link dEscSequence	SpecialChar
+-hi def link dSpecialCharError	Error
+-hi def link dOctalError		Error
+-hi def link dOperator		Operator
+-hi def link dOpOverload		Identifier
+-hi def link dConstant		Constant
+-hi def link dTypedef		Typedef
+-hi def link dEnum		Structure
+-hi def link dStructure		Structure
+-hi def link dTodo		Todo
+-hi def link dType		Type
+-hi def link dLineComment	Comment
+-hi def link dBlockComment	Comment
+-hi def link dNestedComment	Comment
+-hi def link dExternal		Include
+-hi def link dPragma		PreProc
+-hi def link dAnnotation		PreProc
++hi def link dBinary              Number
++hi def link dDec                 Number
++hi def link dHex                 Number
++hi def link dOctal               Number
++hi def link dFloat               Float
++hi def link dHexFloat            Float
++hi def link dDebug               Debug
++hi def link dBranch              Conditional
++hi def link dConditional         Conditional
++hi def link dLabel               Label
++hi def link dUserLabel           Label
++hi def link dRepeat              Repeat
++hi def link dExceptions          Exception
++hi def link dAssert              Statement
++hi def link dStatement           Statement
++hi def link dScopeDecl           dStorageClass
++hi def link dStorageClass        StorageClass
++hi def link dBoolean             Boolean
++hi def link dUnicode             Special
++hi def link dTokenStringBrack    String
++hi def link dHereString          String
++hi def link dNestString          String
++hi def link dDelimString         String
++hi def link dRawString           String
++hi def link dString              String
++hi def link dHexString           String
++hi def link dCharacter           Character
++hi def link dEscSequence         SpecialChar
++hi def link dSpecialCharError    Error
++hi def link dOctalError          Error
++hi def link dOperator            Operator
++hi def link dOpOverload          Identifier
++hi def link dConstant            Constant
++hi def link dTypedef             Typedef
++hi def link dEnum                Structure
++hi def link dStructure           Structure
++hi def link dTodo                Todo
++hi def link dType                Type
++hi def link dLineComment         Comment
++hi def link dBlockComment        Comment
++hi def link dNestedComment       Comment
++hi def link dExternal            Include
++hi def link dAnnotation          PreProc
++hi def link dSharpBang           PreProc
++hi def link dAttribute           StorageClass
++hi def link dIdentifier          Identifier
++hi def link dVersion             dStatement
++hi def link dVersionIdentifier   Identifier
++hi def link dScopeIdentifier     Identifier
++hi def link dTraitsIdentifier    Identifier
++hi def link dPragma              PreProc
++hi def link dPragmaIdentifier    Identifier
++hi def link dExtern              dExternal
++hi def link dExternIdentifier    Identifier
+ 
+-let b:current_syntax = "d"
++" Marks contents of the asm statment body as special
++
++syn match dAsmStatement "\<asm\>"
++syn region dAsmBody start="asm[\n]*\s*{"hs=e+1 end="}"he=e-1 contains=dAsmStatement,dAsmOpCode,@dComment,DUserLabel
++
++hi def link dAsmBody dUnicode
++hi def link dAsmStatement dStatement
++hi def link dAsmOpCode Identifier
++
++syn keyword dAsmOpCode contained	aaa		aad		aam		aas
++syn keyword dAsmOpCode contained	add		addpd		addps		addsd
++syn keyword dAsmOpCode contained	and		andnpd		andnps		andpd
++syn keyword dAsmOpCode contained	arpl		bound		bsf		bsr
++syn keyword dAsmOpCode contained	bt		btc		btr		bts
++syn keyword dAsmOpCode contained	call		bswap		andps		addss
++syn keyword dAsmOpCode contained	cbw		cdq		clc		cld
++syn keyword dAsmOpCode contained	cli		clts		cmc		cmova
++syn keyword dAsmOpCode contained	cmovb		cmovbe		cmovc		cmove
++syn keyword dAsmOpCode contained	cmovge		cmovl		cmovle		cmovna
++syn keyword dAsmOpCode contained	cmovnae		cmovg		cmovae		clflush
++syn keyword dAsmOpCode contained	cmovnb		cmovnbe		cmovnc		cmovne
++syn keyword dAsmOpCode contained	cmovnge		cmovnl		cmovnle		cmovno
++syn keyword dAsmOpCode contained	cmovns		cmovnz		cmovo		cmovp
++syn keyword dAsmOpCode contained	cmovpo		cmovs		cmovz		cmp
++syn keyword dAsmOpCode contained	cmppd		cmovpe		cmovnp		cmovng
++syn keyword dAsmOpCode contained	cmpps		cmps		cmpsb		cmpsd
++syn keyword dAsmOpCode contained	cmpsw		cmpxch8b	cmpxchg		comisd
++syn keyword dAsmOpCode contained	cpuid		cvtdq2pd	cvtdq2ps	cvtpd2dq
++syn keyword dAsmOpCode contained	cvtpd2ps	cvtpi2pd	cvtpi2ps	cvtps2dq
++syn keyword dAsmOpCode contained	cvtps2pd	cvtpd2pi	comiss		cmpss
++syn keyword dAsmOpCode contained	cvtps2pi	cvtsd2si	cvtsd2ss	cvtsi2sd
++syn keyword dAsmOpCode contained	cvtss2sd	cvtss2si	cvttpd2dq	cvttpd2pi
++syn keyword dAsmOpCode contained	cvttps2pi	cvttsd2si	cvttss2si	cwd
++syn keyword dAsmOpCode contained	da		daa		das		db
++syn keyword dAsmOpCode contained	dd		cwde		cvttps2dq	cvtsi2ss
++syn keyword dAsmOpCode contained	de		dec		df		di
++syn keyword dAsmOpCode contained	divpd		divps		divsd		divss
++syn keyword dAsmOpCode contained	dq		ds		dt		dw
++syn keyword dAsmOpCode contained	enter		f2xm1		fabs		fadd
++syn keyword dAsmOpCode contained	faddp		emms		dl		div
++syn keyword dAsmOpCode contained	fbld		fbstp		fchs		fclex
++syn keyword dAsmOpCode contained	fcmovbe		fcmove		fcmovnb		fcmovnbe
++syn keyword dAsmOpCode contained	fcmovnu		fcmovu		fcom		fcomi
++syn keyword dAsmOpCode contained	fcomp		fcompp		fcos		fdecstp
++syn keyword dAsmOpCode contained	fdisi		fcomip		fcmovne		fcmovb
++syn keyword dAsmOpCode contained	fdiv		fdivp		fdivr		fdivrp
++syn keyword dAsmOpCode contained	ffree		fiadd		ficom		ficomp
++syn keyword dAsmOpCode contained	fidivr		fild		fimul		fincstp
++syn keyword dAsmOpCode contained	fist		fistp		fisub		fisubr
++syn keyword dAsmOpCode contained	fld		finit		fidiv		feni
++syn keyword dAsmOpCode contained	fld1		fldcw		fldenv		fldl2e
++syn keyword dAsmOpCode contained	fldlg2		fldln2		fldpi		fldz
++syn keyword dAsmOpCode contained	fmulp		fnclex		fndisi		fneni
++syn keyword dAsmOpCode contained	fnop		fnsave		fnstcw		fnstenv
++syn keyword dAsmOpCode contained	fnstsw		fninit		fmul		fldl2t
++syn keyword dAsmOpCode contained	fpatan		fprem		fprem1		fptan
++syn keyword dAsmOpCode contained	frstor		fsave		fscale		fsetpm
++syn keyword dAsmOpCode contained	fsincos		fsqrt		fst		fstcw
++syn keyword dAsmOpCode contained	fstp		fstsw		fsub		fsubp
++syn keyword dAsmOpCode contained	fsubr		fstenv		fsin		frndint
++syn keyword dAsmOpCode contained	fsubrp		ftst		fucom		fucomi
++syn keyword dAsmOpCode contained	fucomp		fucompp		fwait		fxam
++syn keyword dAsmOpCode contained	fxrstor		fxsave		fxtract		fyl2x
++syn keyword dAsmOpCode contained	hlt		idiv		imul		in
++syn keyword dAsmOpCode contained	inc		fyl2xp1		fxch		fucomip
++syn keyword dAsmOpCode contained	ins		insb		insd		insw
++syn keyword dAsmOpCode contained	into		invd		invlpg		iret
++syn keyword dAsmOpCode contained	ja		jae		jb		jbe
++syn keyword dAsmOpCode contained	jcxz		je		jecxz		jg
++syn keyword dAsmOpCode contained	jge		jc		iretd		int
++syn keyword dAsmOpCode contained	jl		jle		jmp		jna
++syn keyword dAsmOpCode contained	jnb		jnbe		jnc		jne
++syn keyword dAsmOpCode contained	jnge		jnl		jnle		jno
++syn keyword dAsmOpCode contained	jns		jnz		jo		jp
++syn keyword dAsmOpCode contained	jpe		jnp		jng		jnae
++syn keyword dAsmOpCode contained	jpo		js		jz		lahf
++syn keyword dAsmOpCode contained	ldmxcsr		lds		lea		leave
++syn keyword dAsmOpCode contained	lfence		lfs		lgdt		lgs
++syn keyword dAsmOpCode contained	lldt		lmsw		lock		lods
++syn keyword dAsmOpCode contained	lodsb		lidt		les		lar
++syn keyword dAsmOpCode contained	lodsd		lodsw		loop		loope
++syn keyword dAsmOpCode contained	loopnz		loopz		lsl		lss
++syn keyword dAsmOpCode contained	maskmovdqu	maskmovq	maxpd		maxps
++syn keyword dAsmOpCode contained	maxss		mfence		minpd		minps
++syn keyword dAsmOpCode contained	minsd		maxsd		ltr		loopne
++syn keyword dAsmOpCode contained	minss		mov		movapd		movaps
++syn keyword dAsmOpCode contained	movdq2q		movdqa		movdqu		movhlps
++syn keyword dAsmOpCode contained	movhps		movlhps		movlpd		movlps
++syn keyword dAsmOpCode contained	movmskps	movntdq		movnti		movntpd
++syn keyword dAsmOpCode contained	movntps		movmskpd	movhpd		movd
++syn keyword dAsmOpCode contained	movntq		movq		movq2dq		movs
++syn keyword dAsmOpCode contained	movsd		movss		movsw		movsx
++syn keyword dAsmOpCode contained	movups		movzx		mul		mulpd
++syn keyword dAsmOpCode contained	mulsd		mulss		neg		nop
++syn keyword dAsmOpCode contained	not		mulps		movupd		movsb
++syn keyword dAsmOpCode contained	or		orpd		orps		out
++syn keyword dAsmOpCode contained	outsb		outsd		outsw		packssdw
++syn keyword dAsmOpCode contained	packuswb	paddb		paddd		paddq
++syn keyword dAsmOpCode contained	paddsw		paddusb		paddusw		paddw
++syn keyword dAsmOpCode contained	pand		paddsb		packsswb	outs
++syn keyword dAsmOpCode contained	pandn		pavgb		pavgw		pcmpeqb
++syn keyword dAsmOpCode contained	pcmpeqw		pcmpgtb		pcmpgtd		pcmpgtw
++syn keyword dAsmOpCode contained	pinsrw		pmaddwd		pmaxsw		pmaxub
++syn keyword dAsmOpCode contained	pminub		pmovmskb	pmulhuw		pmulhw
++syn keyword dAsmOpCode contained	pmullw		pminsw		pextrw		pcmpeqd
++syn keyword dAsmOpCode contained	pmuludq		pop		popa		popad
++syn keyword dAsmOpCode contained	popfd		por		prefetchnta	prefetcht0
++syn keyword dAsmOpCode contained	prefetcht2	psadbw		pshufd		pshufhw
++syn keyword dAsmOpCode contained	pshufw		pslld		pslldq		psllq
++syn keyword dAsmOpCode contained	psllw		pshuflw		prefetcht1	popf
++syn keyword dAsmOpCode contained	psrad		psraw		psrld		psrldq
++syn keyword dAsmOpCode contained	psrlw		psubb		psubd		psubq
++syn keyword dAsmOpCode contained	psubsw		psubusb		psubusw		psubw
++syn keyword dAsmOpCode contained	punpckhdq	punpckhqdq	punpckhwd	punpcklbw
++syn keyword dAsmOpCode contained	punpckldq	punpckhbw	psubsb		psrlq
++syn keyword dAsmOpCode contained	punpcklqdq	punpcklwd	push		pusha
++syn keyword dAsmOpCode contained	pushf		pushfd		pxor		rcl
++syn keyword dAsmOpCode contained	rcpss		rcr		rdmsr		rdpmc
++syn keyword dAsmOpCode contained	rep		repe		repne		repnz
++syn keyword dAsmOpCode contained	repz		rdtsc		rcpps		pushad
++syn keyword dAsmOpCode contained	ret		retf		rol		ror
++syn keyword dAsmOpCode contained	rsqrtps		rsqrtss		sahf		sal
++syn keyword dAsmOpCode contained	sbb		scas		scasb		scasd
++syn keyword dAsmOpCode contained	seta		setae		setb		setbe
++syn keyword dAsmOpCode contained	setc		scasw		sar		rsm
++syn keyword dAsmOpCode contained	sete		setg		setge		setl
++syn keyword dAsmOpCode contained	setna		setnae		setnb		setnbe
++syn keyword dAsmOpCode contained	setne		setng		setnge		setnl
++syn keyword dAsmOpCode contained	setno		setnp		setns		setnz
++syn keyword dAsmOpCode contained	seto		setnle		setnc		setle
++syn keyword dAsmOpCode contained	setp		setpe		setpo		sets
++syn keyword dAsmOpCode contained	sfence		sgdt		shl		shld
++syn keyword dAsmOpCode contained	shrd		shufpd		shufps		sidt
++syn keyword dAsmOpCode contained	smsw		sqrtpd		sqrtps		sqrtsd
++syn keyword dAsmOpCode contained	sqrtss		sldt		shr		setz
++syn keyword dAsmOpCode contained	stc		std		sti		stmxcsr
++syn keyword dAsmOpCode contained	stosb		stosd		stosw		str
++syn keyword dAsmOpCode contained	subpd		subps		subsd		subss
++syn keyword dAsmOpCode contained	sysexit		test		ucomisd		ucomiss
++syn keyword dAsmOpCode contained	ud2		sysenter	sub		stos
++syn keyword dAsmOpCode contained	unpckhpd	unpckhps	unpcklpd	unpcklps
++syn keyword dAsmOpCode contained	verw		wbinvd		wrmsr		xadd
++syn keyword dAsmOpCode contained	xchg		xlatb		xor		xorpd
++syn keyword dAsmOpCode contained	xorps		pfrcpit1	pfmin		movddup
++syn keyword dAsmOpCode contained	addsubpd	addsubps	fisttp		haddps
++syn keyword dAsmOpCode contained	hsubpd		hsubps		lddqu		monitor
++syn keyword dAsmOpCode contained	haddpd		xlat		wait		verr
++syn keyword dAsmOpCode contained	movshdup	movsldup	mwait		pfcmpeq
++syn keyword dAsmOpCode contained	pavgusb		pf2id		pfacc		pfadd
++syn keyword dAsmOpCode contained	pfcmpge		pfcmpgt		pfmax		pfmul
++syn keyword dAsmOpCode contained	pfnacc		pfpnacc		pfrcp		pfrcpit1
++syn keyword dAsmOpCode contained	pfrsqit1	pfrsqrt		pfsub		pfsubr
++syn keyword dAsmOpCode contained	pmulhrw 	pswapd		syscall		sysret
++syn keyword dAsmOpCode contained	vpmuldq		xgetbv		cmpxchg8b	cmpxchg16b
++syn keyword dAsmOpCode contained	pabsb		pabsd		pabsw		palignr
++syn keyword dAsmOpCode contained	phaddd		phaddsw		phaddw		phsubd
++syn keyword dAsmOpCode contained	phsubsw		phsubw		pmaddubsw	pmulhrsw
++syn keyword dAsmOpCode contained	pshufb		psignb		psignd		psignw
++syn keyword dAsmOpCode contained	popfq		pushfq		blendpd		blendps
++syn keyword dAsmOpCode contained	blendvpd	blendvps	extractps	insertps
++syn keyword dAsmOpCode contained	movntdqa	mpsadbw		packusdw	pblendvb
++syn keyword dAsmOpCode contained	pblendw		pcmpeqq		pextrb		pextrd
++syn keyword dAsmOpCode contained	pextrq		phminposuw	pinsrb		pinsrd
++syn keyword dAsmOpCode contained	pinsrq		pmaxsb		pmaxsd		pmaxud
++syn keyword dAsmOpCode contained	pmaxuw		pminsb		pminsd		pminud
++syn keyword dAsmOpCode contained	pminuw		pmulld		ptest		roundpd
++syn keyword dAsmOpCode contained	roundps		roundsd		roundss		pmuldq
++syn keyword dAsmOpCode contained	pmovsxbd	pmovsxdq	pmovzxbq	pmovzxdq
++syn keyword dAsmOpCode contained	pmovsxbq	pmovsxwd	pmovzxbq	pmovzxwd
++syn keyword dAsmOpCode contained	pmovsxbw	pmovsxwq	pmovzxbw	pmovzxwq
++syn keyword dAsmOpCode contained	crc32		pcmpestri	pcmpestrm	pcmpgtq
++syn keyword dAsmOpCode contained	pcmpistri	pcmpistrm	popcnt		pi2fd
++syn keyword dAsmOpCode contained	adc
+ 
+-" vim: ts=8 noet
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/datascript.vim vim73/runtime/syntax/datascript.vim
+--- vim73.orig/runtime/syntax/datascript.vim	2010-08-01 19:45:43.000000000 +0000
++++ vim73/runtime/syntax/datascript.vim	2013-06-07 17:07:22.288945033 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Datascript
+ " Maintainer:	Dominique Pelle <dominique.pelle@gmail.com>
+-" Last Change:	2010-08-01
++" Last Change:	2012 Apr 30
+ "
+ " DataScript is a formal language for modelling binary datatypes,
+ " bitstreams or file formats. For more information, see:
+@@ -12,6 +12,8 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ syn keyword dsPackage      import package
+ syn keyword dsType         bit string
+@@ -88,3 +90,6 @@
+ hi def link dsComment           Comment
+ 
+ let b:current_syntax = "datascript"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/syntax/debchangelog.vim vim73/runtime/syntax/debchangelog.vim
+--- vim73.orig/runtime/syntax/debchangelog.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/debchangelog.vim	2013-06-07 17:07:22.345611538 +0000
+@@ -3,8 +3,8 @@
+ " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+ " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
+ "                     Wichert Akkerman <wakkerma@debian.org>
+-" Last Change: 2010 May 06
+-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debchangelog.vim
++" Last Change: 2013 May 05
++" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debchangelog.vim
+ 
+ " Standard syntax initialization
+ if version < 600
+@@ -19,7 +19,7 @@
+ " Define some common expressions we can use later on
+ syn match debchangelogName	contained "^[[:alnum:]][[:alnum:].+-]\+ "
+ syn match debchangelogUrgency	contained "; urgency=\(low\|medium\|high\|critical\|emergency\)\( \S.*\)\="
+-syn match debchangelogTarget	contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|%(etch|lenny)-%(backports|volatile)|%(dapper|hardy|jaunty|karmic|lucid|maverick)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
++syn match debchangelogTarget	contained "\v %(frozen|unstable|%(testing|%(old)=stable)%(-proposed-updates|-security)=|experimental|squeeze-%(backports%(-sloppy)=|volatile)|wheezy-backports|%(lucid|precise|quantal|raring|saucy)%(-%(security|proposed|updates|backports|commercial|partner))=)+"
+ syn match debchangelogVersion	contained "(.\{-})"
+ syn match debchangelogCloses	contained "closes:\_s*\(bug\)\=#\=\_s\=\d\+\(,\_s*\(bug\)\=#\=\_s\=\d\+\)*"
+ syn match debchangelogLP	contained "\clp:\s\+#\d\+\(,\s*#\d\+\)*"
+diff -Naur vim73.orig/runtime/syntax/debcontrol.vim vim73/runtime/syntax/debcontrol.vim
+--- vim73.orig/runtime/syntax/debcontrol.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/debcontrol.vim	2013-06-07 17:07:22.348944862 +0000
+@@ -3,8 +3,8 @@
+ " Maintainer:  Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+ " Former Maintainers: Gerfried Fuchs <alfie@ist.org>
+ "                     Wichert Akkerman <wakkerma@debian.org>
+-" Last Change: 2009 Aug 17
+-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debcontrol.vim
++" Last Change: 2013 May 05
++" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debcontrol.vim
+ 
+ " Standard syntax initialization
+ if version < 600
+@@ -24,10 +24,11 @@
+ syn match debControlSpace " "
+ 
+ " Define some common expressions we can use later on
+-syn match debcontrolArchitecture contained "\%(all\|any\|alpha\|amd64\|arm\%(e[bl]\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\|hurd-i386\|kfreebsd-\%(i386\|amd64\|gnu\)\|knetbsd-i386\|kopensolaris-i386\|netbsd-\%(alpha\|i386\)\)"
++syn match debcontrolArchitecture contained "\%(all\|linux-any\|\%(any-\)\=\%(alpha\|amd64\|arm\%(e[bl]\|hf\)\=\|avr32\|hppa\|i386\|ia64\|lpia\|m32r\|m68k\|mips\%(el\)\=\|powerpc\|ppc64\|s390x\=\|sh[34]\(eb\)\=\|sh\|sparc\%(64\)\=\)\|hurd-\%(i386\|any\)\|kfreebsd-\%(i386\|amd64\|any\)\|knetbsd-\%(i386\|any\)\|kopensolaris-\%(i386\|any\)\|netbsd-\%(alpha\|i386\|any\)\|any\)"
++syn match debcontrolMultiArch contained "\%(no\|foreign\|allowed\|same\)"
+ syn match debcontrolName contained "[a-z0-9][a-z0-9+.-]\+"
+ syn match debcontrolPriority contained "\(extra\|important\|optional\|required\|standard\)"
+-syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
++syn match debcontrolSection contained "\v((contrib|non-free|non-US/main|non-US/contrib|non-US/non-free|restricted|universe|multiverse)/)?(admin|cli-mono|comm|database|debian-installer|debug|devel|doc|editors|education|electronics|embedded|fonts|games|gnome|gnustep|gnu-r|graphics|hamradio|haskell|httpd|interpreters|introspection|java|kde|kernel|libs|libdevel|lisp|localization|mail|math|metapackages|misc|net|news|ocaml|oldlibs|otherosfs|perl|php|python|ruby|science|shells|sound|text|tex|utils|vcs|video|web|x11|xfce|zope)"
+ syn match debcontrolPackageType contained "u\?deb"
+ syn match debcontrolVariable contained "\${.\{-}}"
+ syn match debcontrolDmUpload contained "\cyes"
+@@ -37,36 +38,40 @@
+ syn match debcontrolHTTPUrl contained "\vhttps?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
+ syn match debcontrolVcsSvn contained "\vsvn%(\+ssh)?://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
+ syn match debcontrolVcsCvs contained "\v%(\-d *)?:pserver:[^@]+\@[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?:/[^[:space:]]*%( [^[:space:]]+)?$"
+-syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?$"
++syn match debcontrolVcsGit contained "\v%(git|http)://[[:alnum:]][-[:alnum:]]*[[:alnum:]]?(\.[[:alnum:]][-[:alnum:]]*[[:alnum:]]?)*\.[[:alpha:]][-[:alnum:]]*[[:alpha:]]?(:\d+)?(/[^[:space:]]*)?%(\s+-b\s+[^ ~^:?*[\\]+)?$"
+ 
+ " An email address
+ syn match	debcontrolEmail	"[_=[:alnum:]\.+-]\+@[[:alnum:]\./\-]\+"
+ syn match	debcontrolEmail	"<.\{-}>"
+ 
+ " #-Comments
+-syn match debcontrolComment "^#.*$"
++syn match debcontrolComment "^#.*$" contains=@Spell
+ 
+ syn case ignore
+ 
+ " List of all legal keys
+-syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|XC-Package-Type\|\%(XS-\)\=DM-Upload-Allowed\): *"
++syn match debcontrolKey contained "^\%(Source\|Package\|Section\|Priority\|\%(XSBC-Original-\)\=Maintainer\|Uploaders\|Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|Standards-Version\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Essential\|Architecture\|Multi-Arch\|Description\|Bugs\|Origin\|X[SB]-Python-Version\|Homepage\|\(XS-\)\=Vcs-\(Browser\|Arch\|Bzr\|Cvs\|Darcs\|Git\|Hg\|Mtn\|Svn\)\|\%(XC-\)\=Package-Type\): *"
++
++syn match debcontrolDeprecatedKey contained "^\%(\%(XS-\)\=DM-Upload-Allowed\): *"
+ 
+ " Fields for which we do strict syntax checking
+ syn region debcontrolStrictField start="^Architecture" end="$" contains=debcontrolKey,debcontrolArchitecture,debcontrolSpace oneline
++syn region debcontrolStrictField start="^Multi-Arch" end="$" contains=debcontrolKey,debcontrolMultiArch oneline
+ syn region debcontrolStrictField start="^\(Package\|Source\)" end="$" contains=debcontrolKey,debcontrolName oneline
+ syn region debcontrolStrictField start="^Priority" end="$" contains=debcontrolKey,debcontrolPriority oneline
+ syn region debcontrolStrictField start="^Section" end="$" contains=debcontrolKey,debcontrolSection oneline
+-syn region debcontrolStrictField start="^XC-Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
++syn region debcontrolStrictField start="^\%(XC-\)\=Package-Type" end="$" contains=debcontrolKey,debcontrolPackageType oneline
+ syn region debcontrolStrictField start="^Homepage" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
+ syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-\%(Browser\|Arch\|Bzr\|Darcs\|Hg\)" end="$" contains=debcontrolKey,debcontrolHTTPUrl oneline keepend
+ syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Svn" end="$" contains=debcontrolKey,debcontrolVcsSvn,debcontrolHTTPUrl oneline keepend
+ syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Cvs" end="$" contains=debcontrolKey,debcontrolVcsCvs oneline keepend
+ syn region debcontrolStrictField start="^\%(XS-\)\=Vcs-Git" end="$" contains=debcontrolKey,debcontrolVcsGit oneline keepend
+-syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolKey,debcontrolDmUpload oneline
++syn region debcontrolStrictField start="^\%(XS-\)\=DM-Upload-Allowed" end="$" contains=debcontrolDeprecatedKey,debcontrolDmUpload oneline
+ 
+ " Catch-all for the other legal fields
+ syn region debcontrolField start="^\%(\%(XSBC-Original-\)\=Maintainer\|Standards-Version\|Essential\|Bugs\|Origin\|X[SB]-Python-Version\|\%(XS-\)\=Vcs-Mtn\):" end="$" contains=debcontrolKey,debcontrolVariable,debcontrolEmail oneline
+ syn region debcontrolMultiField start="^\%(Build-\%(Conflicts\|Depends\)\%(-Indep\)\=\|\%(Pre-\)\=Depends\|Recommends\|Suggests\|Provides\|Replaces\|Conflicts\|Enhances\|Breaks\|Uploaders\|Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment
++syn region debcontrolMultiFieldSpell start="^\%(Description\):" skip="^ " end="^$"me=s-1 end="^[^ #]"me=s-1 contains=debcontrolKey,debcontrolEmail,debcontrolVariable,debcontrolComment,@Spell
+ 
+ " Associate our matches and regions with pretty colours
+ if version >= 508 || !exists("did_debcontrol_syn_inits")
+@@ -80,8 +85,10 @@
+   HiLink debcontrolKey		Keyword
+   HiLink debcontrolField	Normal
+   HiLink debcontrolStrictField	Error
++  HiLink debcontrolDeprecatedKey	Error
+   HiLink debcontrolMultiField	Normal
+   HiLink debcontrolArchitecture	Normal
++  HiLink debcontrolMultiArch	Normal
+   HiLink debcontrolName		Normal
+   HiLink debcontrolPriority	Normal
+   HiLink debcontrolSection	Normal
+diff -Naur vim73.orig/runtime/syntax/debsources.vim vim73/runtime/syntax/debsources.vim
+--- vim73.orig/runtime/syntax/debsources.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/debsources.vim	2013-06-07 17:07:22.362278157 +0000
+@@ -2,8 +2,8 @@
+ " Language:     Debian sources.list
+ " Maintainer:   Debian Vim Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+ " Former Maintainer: Matthijs Mohlmann <matthijs@cacholong.nl>
+-" Last Change: 2010 May 06
+-" URL: http://hg.debian.org/hg/pkg-vim/vim/raw-file/tip/runtime/syntax/debsources.vim
++" Last Change: 2013 May 05
++" URL: http://anonscm.debian.org/hg/pkg-vim/vim/raw-file/unstable/runtime/syntax/debsources.vim
+ 
+ " Standard syntax initialization
+ if version < 600
+@@ -23,7 +23,7 @@
+ 
+ " Match uri's
+ syn match debsourcesUri            +\(http://\|ftp://\|[rs]sh://\|debtorrent://\|\(cdrom\|copy\|file\):\)[^' 	<>"]\++
+-syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(etch\|lenny\|squeeze\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|dapper\|hardy\|jaunty\|karmic\|lucid\|maverick\)\([-[:alnum:]_./]*\)+
++syn match debsourcesDistrKeyword   +\([[:alnum:]_./]*\)\(squeeze\|wheezy\|\(old\)\=stable\|testing\|unstable\|sid\|rc-buggy\|experimental\|lucid\|precise\|quantal\|raring\|saucy\)\([-[:alnum:]_./]*\)+
+ 
+ " Associate our matches and regions with pretty colours
+ hi def link debsourcesLine            Error
+diff -Naur vim73.orig/runtime/syntax/dircolors.vim vim73/runtime/syntax/dircolors.vim
+--- vim73.orig/runtime/syntax/dircolors.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/dircolors.vim	2013-06-07 17:07:22.458944547 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         dircolors(1) input file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2006-06-23
++" Latest Revision:  2012-04-25
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -17,6 +17,8 @@
+ syn keyword dircolorsKeyword    TERM LEFT LEFTCODE RIGHT RIGHTCODE END ENDCODE
+ 
+ syn keyword dircolorsKeyword    NORMAL NORM FILE DIR LNK LINK SYMLINK ORPHAN
++                                \ RESET MULTIHARDLINK CAPABILITY SETUID SETGID
++                                \ STICKY STICKY_OTHER_WRITABLE OTHER_WRITABLE 
+                                 \ MISSING FIFO PIPE SOCK BLK BLOCK CHR CHAR
+                                 \ DOOR EXEC
+                                 \ nextgroup=@dircolorsColors skipwhite
+diff -Naur vim73.orig/runtime/syntax/dirpager.vim vim73/runtime/syntax/dirpager.vim
+--- vim73.orig/runtime/syntax/dirpager.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/dirpager.vim	2013-06-07 17:07:22.485611138 +0000
+@@ -0,0 +1,56 @@
++" Vim syntax file
++" Maintainer:	  Thilo Six
++" Contact:	  <vim-dev at vim dot org>
++"		  http://www.vim.org/maillist.php#vim-dev
++"
++" Description:	  display directory content inside Vim with syntax
++"		  highlighting
++" File:		  runtime/syntax/dirpager.vim
++" Last Change:	  2012 May 19
++" Modeline:	  vim: ts=8:sw=2:sts=2:
++"
++" Credits:	  dirpager.vim is derived from Nikolai Weibulls dircolors.vim
++"
++" License:	  VIM License
++"		  Vim is Charityware, see ":help Uganda"
++"
++" Usage:	  $ ls -la | view -c "set ft=dirpager" -
++"
++"
++",----[ ls(1posix) ]--------------------------------------------------
++"
++" The  <entry type> character shall describe the type of file, as
++"       follows:
++"
++"       d	Directory.
++"       b	Block special file.
++"       c	Character special file.
++"       l (ell)	Symbolic link.
++"       p	FIFO.
++"       -	Regular file.
++"
++
++if exists("b:current_syntax") || &compatible
++  finish
++endif
++
++setlocal nowrap
++
++syn keyword  DirPagerTodo	contained FIXME TODO XXX NOTE
++
++syn region   DirPagerExe	start='^...x\|^......x\|^.........x' end='$'	contains=DirPagerTodo,@Spell
++syn region   DirPagerDir	start='^d' end='$'	contains=DirPagerTodo,@Spell
++syn region   DirPagerLink	start='^l' end='$'	contains=DirPagerTodo,@Spell
++syn region   DirPagerSpecial	start='^b' end='$'	contains=DirPagerTodo,@Spell
++syn region   DirPagerSpecial	start='^c' end='$'	contains=DirPagerTodo,@Spell
++syn region   DirPagerFifo	start='^p' end='$'	contains=DirPagerTodo,@Spell
++
++hi def link  DirPagerTodo	Todo
++hi def	     DirPagerExe	ctermfg=Green	    guifg=Green
++hi def	     DirPagerDir	ctermfg=Blue	    guifg=Blue
++hi def	     DirPagerLink	ctermfg=Cyan	    guifg=Cyan
++hi def	     DirPagerSpecial	ctermfg=Yellow	    guifg=Yellow
++hi def	     DirPagerFifo	ctermfg=Brown	    guifg=Brown
++
++let b:current_syntax = "dirpager"
++
+diff -Naur vim73.orig/runtime/syntax/django.vim vim73/runtime/syntax/django.vim
+--- vim73.orig/runtime/syntax/django.vim	2010-05-19 19:57:56.000000000 +0000
++++ vim73/runtime/syntax/django.vim	2013-06-07 17:07:22.498944433 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Django template
+ " Maintainer:	Dave Hodder <dmh@dmh.org.uk>
+-" Last Change:	2010 May 19
++" Last Change:	2012 Apr 09
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -21,7 +21,7 @@
+ syn keyword djangoStatement contained autoescape csrf_token empty
+ " FIXME ==, !=, <, >, <=, and >= should be djangoStatements:
+ " syn keyword djangoStatement contained == != < > <= >=
+-syn keyword djangoStatement contained and as block endblock by cycle debug else
++syn keyword djangoStatement contained and as block endblock by cycle debug else elif
+ syn keyword djangoStatement contained extends filter endfilter firstof for
+ syn keyword djangoStatement contained endfor if endif ifchanged endifchanged
+ syn keyword djangoStatement contained ifequal endifequal ifnotequal
+@@ -45,7 +45,7 @@
+ syn keyword djangoFilter contained lower make_list phone2numeric pluralize
+ syn keyword djangoFilter contained pprint random removetags rjust slice slugify
+ syn keyword djangoFilter contained safe safeseq stringformat striptags
+-syn keyword djangoFilter contained time timesince timeuntil title
++syn keyword djangoFilter contained time timesince timeuntil title truncatechars
+ syn keyword djangoFilter contained truncatewords truncatewords_html unordered_list upper urlencode
+ syn keyword djangoFilter contained urlize urlizetrunc wordcount wordwrap yesno
+ 
+diff -Naur vim73.orig/runtime/syntax/dnsmasq.vim vim73/runtime/syntax/dnsmasq.vim
+--- vim73.orig/runtime/syntax/dnsmasq.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/dnsmasq.vim	2013-06-07 17:07:22.522277700 +0000
+@@ -0,0 +1,229 @@
++" Vim syntax file
++" Maintainer:	Thilo Six
++" Contact:	<vim-dev at vim dot org>
++"		http://www.vim.org/maillist.php#vim-dev
++"
++" Description:	highlight dnsmasq configuration files
++" File:		runtime/syntax/dnsmasq.vim
++" Version:	2.61-1
++" Last Change:	2012 May 19
++" Modeline:	vim: ts=8:sw=2:sts=2:
++"
++" Credits:	Igor N. Prischepoff
++"		Doug Kearns
++"		David Ne\v{c}as
++"		Christian Brabandt
++"
++" License:	VIM License
++"		Vim is Charityware, see ":help Uganda"
++"
++" Options:	You might want to add this to your vimrc:
++"
++"		if &background == "dark"
++"		  " dnsmasq.vim
++"		    let dnsmasq_backrgound_light = 0
++"		else
++"		    let dnsmasq_backrgound_light = 1
++"		endif
++"
++
++" For version 5.x: Clear all syntax items
++" For version 6.x: Quit when a syntax file was already loaded
++if version < 600
++    syntax clear
++elseif exists("b:current_syntax") || &compatible
++    finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++if !exists("b:dnsmasq_backrgound_light")
++	if exists("dnsmasq_backrgound_light")
++		let b:dnsmasq_backrgound_light = dnsmasq_backrgound_light
++	else
++		let b:dnsmasq_backrgound_light = 0
++	endif
++endif
++
++
++" case on
++syn case match
++
++syn match   DnsmasqValues   "=.*"hs=s+1 contains=DnsmasqComment,DnsmasqSpecial
++syn match   DnsmasqSpecial  display '=\|@\|,\|!\|:'	  nextgroup=DnsmasqValues
++syn match   DnsmasqSpecial  "#"
++
++syn match   DnsmasqIPv4	    "\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>"	nextgroup=DnsmasqSubnet2,DnsmasqRange
++syn match   DnsmasqSubnet   "\<255.\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{2\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>"
++syn match   DnsmasqSubnet2  contained "\/\([0-4]\?[0-9]\)\>"
++syn match   DnsmasqRange    contained "-"
++syn match   DnsmasqMac	    "\<\(\x\x\?:\)\{5}\x\x\?"
++
++syn match   DnsmasqTime	    "\<\(\d\{1,3}\)[hm]\>"
++
++" String
++syn match   DnsmasqString   "\".*\""  contains=@Spell
++syn match   DnsmasqString   "'.*'"    contains=@Spell
++
++" Comments
++syn keyword DnsmasqTodo	    FIXME TODO XXX NOTE contained
++syn match   DnsmasqComment  "\(^\|\s\+\)#.*$"   contains=@Spell,DnsmasqTodo
++
++" highlight trailing spaces
++syn match   DnsmasqTrailSpace	   "[ \t]\+$"
++syn match   DnsmasqTrailSpace	   "[ \t]\+$" containedin=ALL
++
++syn match DnsmasqKeywordSpecial    "\<set\>:"me=e-1
++syn match DnsmasqKeywordSpecial    "\<tag\>:"me=e-1
++syn match DnsmasqKeywordSpecial    ",\<static\>"hs=s+1	  contains=DnsmasqSpecial
++syn match DnsmasqKeywordSpecial    ",\<infinite\>"hs=s+1  contains=DnsmasqSpecial
++syn match DnsmasqKeywordSpecial    "\<encap\>:"me=e-1
++syn match DnsmasqKeywordSpecial    "\<interface\>:"me=e-1
++syn match DnsmasqKeywordSpecial    "\<vi-encap\>:"me=e-1
++syn match DnsmasqKeywordSpecial    "\<net\>:"me=e-1
++syn match DnsmasqKeywordSpecial    "\<vendor\>:"me=e-1
++syn match DnsmasqKeywordSpecial    "\<opt\>:"me=e-1
++syn match DnsmasqKeywordSpecial    "\<option\>:"me=e-1
++syn match DnsmasqKeywordSpecial    ",\<ignore\>"hs=s+1	  contains=DnsmasqSpecial
++syn match DnsmasqKeywordSpecial    "\<id\>:"me=e-1
++
++syn match DnsmasqKeyword    "^\s*add-mac\>"
++syn match DnsmasqKeyword    "^\s*addn-hosts\>"
++syn match DnsmasqKeyword    "^\s*address\>"
++syn match DnsmasqKeyword    "^\s*alias\>"
++syn match DnsmasqKeyword    "^\s*all-servers\>"
++syn match DnsmasqKeyword    "^\s*bind-interfaces\>"
++syn match DnsmasqKeyword    "^\s*bogus-nxdomain\>"
++syn match DnsmasqKeyword    "^\s*bogus-priv\>"
++syn match DnsmasqKeyword    "^\s*bootp-dynamic\>"
++syn match DnsmasqKeyword    "^\s*bridge-interface\>"
++syn match DnsmasqKeyword    "^\s*cache-size\>"
++syn match DnsmasqKeyword    "^\s*clear-on-reload\>"
++syn match DnsmasqKeyword    "^\s*cname\>"
++syn match DnsmasqKeyword    "^\s*conf-dir\>"
++syn match DnsmasqKeyword    "^\s*conf-file\>"
++syn match DnsmasqKeyword    "^\s*conntrack\>"
++syn match DnsmasqKeyword    "^\s*dhcp-alternate-port\>"
++syn match DnsmasqKeyword    "^\s*dhcp-authoritative\>"
++syn match DnsmasqKeyword    "^\s*dhcp-boot\>"
++syn match DnsmasqKeyword    "^\s*dhcp-broadcast\>"
++syn match DnsmasqKeyword    "^\s*dhcp-circuitid\>"
++syn match DnsmasqKeyword    "^\s*dhcp-client-update\>"
++syn match DnsmasqKeyword    "^\s*dhcp-duid\>"
++syn match DnsmasqKeyword    "^\s*dhcp-fqdn\>"
++syn match DnsmasqKeyword    "^\s*dhcp-generate-names\>"
++syn match DnsmasqKeyword    "^\s*dhcp-host\>"
++syn match DnsmasqKeyword    "^\s*dhcp-hostsfile\>"
++syn match DnsmasqKeyword    "^\s*dhcp-ignore\>"
++syn match DnsmasqKeyword    "^\s*dhcp-ignore-names\>"
++syn match DnsmasqKeyword    "^\s*dhcp-lease-max\>"
++syn match DnsmasqKeyword    "^\s*dhcp-leasefile\>"
++syn match DnsmasqKeyword    "^\s*dhcp-luascript\>"
++syn match DnsmasqKeyword    "^\s*dhcp-mac\>"
++syn match DnsmasqKeyword    "^\s*dhcp-match\>"
++syn match DnsmasqKeyword    "^\s*dhcp-no-override\>"
++syn match DnsmasqKeyword    "^\s*dhcp-option\>"
++syn match DnsmasqKeyword    "^\s*dhcp-option-force\>"
++syn match DnsmasqKeyword    "^\s*dhcp-optsfile\>"
++syn match DnsmasqKeyword    "^\s*dhcp-proxy\>"
++syn match DnsmasqKeyword    "^\s*dhcp-range\>"
++syn match DnsmasqKeyword    "^\s*dhcp-remoteid\>"
++syn match DnsmasqKeyword    "^\s*dhcp-script\>"
++syn match DnsmasqKeyword    "^\s*dhcp-scriptuser\>"
++syn match DnsmasqKeyword    "^\s*dhcp-sequential-ip\>"
++syn match DnsmasqKeyword    "^\s*dhcp-subscrid\>"
++syn match DnsmasqKeyword    "^\s*dhcp-userclass\>"
++syn match DnsmasqKeyword    "^\s*dhcp-vendorclass\>"
++syn match DnsmasqKeyword    "^\s*dns-forward-max\>"
++syn match DnsmasqKeyword    "^\s*domain\>"
++syn match DnsmasqKeyword    "^\s*domain-needed\>"
++syn match DnsmasqKeyword    "^\s*edns-packet-max\>"
++syn match DnsmasqKeyword    "^\s*enable-dbus\>"
++syn match DnsmasqKeyword    "^\s*enable-ra\>"
++syn match DnsmasqKeyword    "^\s*enable-tftp\>"
++syn match DnsmasqKeyword    "^\s*except-interface\>"
++syn match DnsmasqKeyword    "^\s*expand-hosts\>"
++syn match DnsmasqKeyword    "^\s*filterwin2k\>"
++syn match DnsmasqKeyword    "^\s*group\>"
++syn match DnsmasqKeyword    "^\s*host-record\>"
++syn match DnsmasqKeyword    "^\s*interface\>"
++syn match DnsmasqKeyword    "^\s*interface-name\>"
++syn match DnsmasqKeyword    "^\s*keep-in-foreground\>"
++syn match DnsmasqKeyword    "^\s*leasefile-ro\>"
++syn match DnsmasqKeyword    "^\s*listen-address\>"
++syn match DnsmasqKeyword    "^\s*local\>"
++syn match DnsmasqKeyword    "^\s*localmx\>"
++syn match DnsmasqKeyword    "^\s*local-ttl\>"
++syn match DnsmasqKeyword    "^\s*localise-queries\>"
++syn match DnsmasqKeyword    "^\s*log-async\>"
++syn match DnsmasqKeyword    "^\s*log-dhcp\>"
++syn match DnsmasqKeyword    "^\s*log-facility\>"
++syn match DnsmasqKeyword    "^\s*log-queries\>"
++syn match DnsmasqKeyword    "^\s*max-ttl\>"
++syn match DnsmasqKeyword    "^\s*min-port\>"
++syn match DnsmasqKeyword    "^\s*mx-host\>"
++syn match DnsmasqKeyword    "^\s*mx-target\>"
++syn match DnsmasqKeyword    "^\s*naptr-record\>"
++syn match DnsmasqKeyword    "^\s*neg-ttl\>"
++syn match DnsmasqKeyword    "^\s*no-daemon\>"
++syn match DnsmasqKeyword    "^\s*no-dhcp-interface\>"
++syn match DnsmasqKeyword    "^\s*no-hosts\>"
++syn match DnsmasqKeyword    "^\s*no-negcache\>"
++syn match DnsmasqKeyword    "^\s*no-ping\>"
++syn match DnsmasqKeyword    "^\s*no-poll\>"
++syn match DnsmasqKeyword    "^\s*no-resolv\>"
++syn match DnsmasqKeyword    "^\s*pid-file\>"
++syn match DnsmasqKeyword    "^\s*port\>"
++syn match DnsmasqKeyword    "^\s*proxy-dnssec\>"
++syn match DnsmasqKeyword    "^\s*ptr-record\>"
++syn match DnsmasqKeyword    "^\s*pxe-prompt\>"
++syn match DnsmasqKeyword    "^\s*pxe-service\>"
++syn match DnsmasqKeyword    "^\s*query-port\>"
++syn match DnsmasqKeyword    "^\s*read-ethers\>"
++syn match DnsmasqKeyword    "^\s*rebind-domain-ok\>"
++syn match DnsmasqKeyword    "^\s*rebind-localhost-ok\>"
++syn match DnsmasqKeyword    "^\s*resolv-file\>"
++syn match DnsmasqKeyword    "^\s*selfmx\>"
++syn match DnsmasqKeyword    "^\s*server\>"
++syn match DnsmasqKeyword    "^\s*srv-host\>"
++syn match DnsmasqKeyword    "^\s*stop-dns-rebind\>"
++syn match DnsmasqKeyword    "^\s*strict-order\>"
++syn match DnsmasqKeyword    "^\s*tag-if\>"
++syn match DnsmasqKeyword    "^\s*test\>"
++syn match DnsmasqKeyword    "^\s*tftp-max\>"
++syn match DnsmasqKeyword    "^\s*tftp-lowercase\>"
++syn match DnsmasqKeyword    "^\s*tftp-no-blocksize\>"
++syn match DnsmasqKeyword    "^\s*tftp-port-range\>"
++syn match DnsmasqKeyword    "^\s*tftp-root\>"
++syn match DnsmasqKeyword    "^\s*tftp-secure\>"
++syn match DnsmasqKeyword    "^\s*tftp-unique-root\>"
++syn match DnsmasqKeyword    "^\s*txt-record\>"
++syn match DnsmasqKeyword    "^\s*user\>"
++syn match DnsmasqKeyword    "^\s*version\>"
++
++
++if b:dnsmasq_backrgound_light == 1
++    hi def DnsmasqKeyword	ctermfg=DarkGreen guifg=DarkGreen
++else
++    hi def link DnsmasqKeyword  Keyword
++endif
++hi def link DnsmasqKeywordSpecial Type
++hi def link DnsmasqTodo		Todo
++hi def link DnsmasqSpecial	Constant
++hi def link DnsmasqIPv4		Identifier
++hi def link DnsmasqSubnet2	DnsmasqSubnet
++hi def link DnsmasqSubnet	DnsmasqMac
++hi def link DnsmasqRange	DnsmasqMac
++hi def link DnsmasqMac		Preproc
++hi def link DnsmasqTime		Preproc
++hi def link DnsmasqComment	Comment
++hi def link DnsmasqTrailSpace	DiffDelete
++hi def link DnsmasqString	Constant
++hi def link DnsmasqValues	Normal
++
++let b:current_syntax = "dnsmasq"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+diff -Naur vim73.orig/runtime/syntax/docbk.vim vim73/runtime/syntax/docbk.vim
+--- vim73.orig/runtime/syntax/docbk.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/docbk.vim	2013-06-07 17:07:22.532277671 +0000
+@@ -1,9 +1,10 @@
+ " Vim syntax file
+ " Language:	DocBook
+ " Maintainer:	Devin Weaver <vim@tritarget.com>
++" Last Updated By: Shlomi Fish
+ " URL:		http://tritarget.com/pub/vim/syntax/docbk.vim
+-" Last Change:	$Date: 2005/06/23 22:31:01 $
+-" Version:	$Revision: 1.2 $
++" Last Change:	2012 Nov 28
++" Version:	1.2 (and modified after that)
+ " Thanks to Johannes Zellner <johannes@zellner.org> for the default to XML
+ " suggestion.
+ 
+@@ -28,6 +29,15 @@
+     let b:docbk_type = 'xml'
+   endif
+ endif
++
++if !exists('b:docbk_ver')
++  if exists('docbk_ver')
++    let b:docbk_ver = docbk_ver
++  else
++    let b:docbk_ver = 4
++  endif
++end
++
+ if 'xml' == b:docbk_type
+     doau Syntax xml
+     syn cluster xmlTagHook add=docbkKeyword
+@@ -40,81 +50,121 @@
+     syn case ignore
+ endif
+ 
+-" <comment> has been removed and replace with <remark> in DocBook 4.0
+-" <comment> kept for backwards compatability.
+-syn keyword docbkKeyword abbrev abstract accel ackno acronym action contained
+-syn keyword docbkKeyword address affiliation alt anchor answer appendix contained
+-syn keyword docbkKeyword application area areaset areaspec arg artheader contained
+-syn keyword docbkKeyword article articleinfo artpagenums attribution audiodata contained
+-syn keyword docbkKeyword audioobject author authorblurb authorgroup contained
+-syn keyword docbkKeyword authorinitials beginpage bibliodiv biblioentry contained
+-syn keyword docbkKeyword bibliography bibliomisc bibliomixed bibliomset contained
+-syn keyword docbkKeyword biblioset blockquote book bookbiblio bookinfo contained
+-syn keyword docbkKeyword bridgehead callout calloutlist caption caution contained
+-syn keyword docbkKeyword chapter citation citerefentry citetitle city contained
+-syn keyword docbkKeyword classname cmdsynopsis co collab collabname contained
+-syn keyword docbkKeyword colophon colspec command comment computeroutput contained
+-syn keyword docbkKeyword confdates confgroup confnum confsponsor conftitle contained
+-syn keyword docbkKeyword constant contractnum contractsponsor contrib contained
+-syn keyword docbkKeyword copyright corpauthor corpname country database contained
+-syn keyword docbkKeyword date dedication docinfo edition editor email contained
+-syn keyword docbkKeyword emphasis entry entrytbl envar epigraph equation contained
+-syn keyword docbkKeyword errorcode errorname errortype example fax figure contained
+-syn keyword docbkKeyword filename firstname firstterm footnote footnoteref contained
++syn keyword docbkKeyword abbrev abstract accel acronym address contained
++syn keyword docbkKeyword affiliation alt anchor answer appendix contained
++syn keyword docbkKeyword application area areaset areaspec arg contained
++syn keyword docbkKeyword article artpagenums attribution audiodata contained
++syn keyword docbkKeyword audioobject author authorgroup contained
++syn keyword docbkKeyword authorinitials bibliocoverage bibliodiv contained
++syn keyword docbkKeyword biblioentry bibliography biblioid contained
++syn keyword docbkKeyword bibliolist bibliomisc bibliomixed contained
++syn keyword docbkKeyword bibliomset biblioref bibliorelation contained
++syn keyword docbkKeyword biblioset bibliosource blockquote book contained
++syn keyword docbkKeyword bridgehead callout calloutlist caption contained
++syn keyword docbkKeyword caution chapter citation citebiblioid contained
++syn keyword docbkKeyword citerefentry citetitle city classname contained
++syn keyword docbkKeyword classsynopsis classsynopsisinfo cmdsynopsis contained
++syn keyword docbkKeyword co code col colgroup collab colophon contained
++syn keyword docbkKeyword colspec command computeroutput confdates contained
++syn keyword docbkKeyword confgroup confnum confsponsor conftitle contained
++syn keyword docbkKeyword constant constructorsynopsis contractnum contained
++syn keyword docbkKeyword contractsponsor contrib copyright coref contained
++syn keyword docbkKeyword country database date dedication contained
++syn keyword docbkKeyword destructorsynopsis edition editor email contained
++syn keyword docbkKeyword emphasis entry entrytbl envar epigraph contained
++syn keyword docbkKeyword equation errorcode errorname errortext contained
++syn keyword docbkKeyword errortype example exceptionname fax contained
++syn keyword docbkKeyword fieldsynopsis figure filename firstname contained
++syn keyword docbkKeyword firstterm footnote footnoteref contained
+ syn keyword docbkKeyword foreignphrase formalpara funcdef funcparams contained
+ syn keyword docbkKeyword funcprototype funcsynopsis funcsynopsisinfo contained
+-syn keyword docbkKeyword function glossary glossdef glossdiv glossentry contained
+-syn keyword docbkKeyword glosslist glosssee glossseealso glossterm graphic contained
+-syn keyword docbkKeyword graphicco group guibutton guiicon guilabel contained
++syn keyword docbkKeyword function glossary glossdef glossdiv contained
++syn keyword docbkKeyword glossentry glosslist glosssee glossseealso contained
++syn keyword docbkKeyword glossterm group guibutton guiicon guilabel contained
+ syn keyword docbkKeyword guimenu guimenuitem guisubmenu hardware contained
+-syn keyword docbkKeyword highlights holder honorific imagedata imageobject contained
+-syn keyword docbkKeyword imageobjectco important index indexdiv indexentry contained
+-syn keyword docbkKeyword indexterm informalequation informalexample contained
+-syn keyword docbkKeyword informalfigure informaltable inlineequation contained
+-syn keyword docbkKeyword inlinegraphic inlinemediaobject interface contained
+-syn keyword docbkKeyword interfacedefinition invpartnumber isbn issn contained
+-syn keyword docbkKeyword issuenum itemizedlist itermset jobtitle keycap contained
+-syn keyword docbkKeyword keycode keycombo keysym keyword keywordset label contained
+-syn keyword docbkKeyword legalnotice lineage lineannotation link listitem contained
+-syn keyword docbkKeyword literal literallayout lot lotentry manvolnum contained
+-syn keyword docbkKeyword markup medialabel mediaobject mediaobjectco contained
+-syn keyword docbkKeyword member menuchoice modespec mousebutton msg msgaud contained
+-syn keyword docbkKeyword msgentry msgexplan msginfo msglevel msgmain contained
+-syn keyword docbkKeyword msgorig msgrel msgset msgsub msgtext note contained
+-syn keyword docbkKeyword objectinfo olink option optional orderedlist contained
+-syn keyword docbkKeyword orgdiv orgname otheraddr othercredit othername contained
+-syn keyword docbkKeyword pagenums para paramdef parameter part partintro contained
+-syn keyword docbkKeyword phone phrase pob postcode preface primary contained
+-syn keyword docbkKeyword primaryie printhistory procedure productname contained
+-syn keyword docbkKeyword productnumber programlisting programlistingco contained
+-syn keyword docbkKeyword prompt property pubdate publisher publishername contained
+-syn keyword docbkKeyword pubsnumber qandadiv qandaentry qandaset question contained
+-syn keyword docbkKeyword quote refclass refdescriptor refentry contained
++syn keyword docbkKeyword holder honorific imagedata imageobject contained
++syn keyword docbkKeyword imageobjectco important index indexdiv contained
++syn keyword docbkKeyword indexentry indexterm informalequation contained
++syn keyword docbkKeyword informalexample informalfigure contained
++syn keyword docbkKeyword informaltable initializer inlineequation contained
++syn keyword docbkKeyword inlinemediaobject interfacename issuenum contained
++syn keyword docbkKeyword itemizedlist itermset jobtitle keycap contained
++syn keyword docbkKeyword keycode keycombo keysym keyword keywordset contained
++syn keyword docbkKeyword label legalnotice lineage lineannotation contained
++syn keyword docbkKeyword link listitem literal literallayout contained
++syn keyword docbkKeyword manvolnum markup mathphrase mediaobject contained
++syn keyword docbkKeyword member menuchoice methodname methodparam contained
++syn keyword docbkKeyword methodsynopsis modifier mousebutton msg contained
++syn keyword docbkKeyword msgaud msgentry msgexplan msginfo msglevel contained
++syn keyword docbkKeyword msgmain msgorig msgrel msgset msgsub contained
++syn keyword docbkKeyword msgtext note olink ooclass ooexception contained
++syn keyword docbkKeyword oointerface option optional orderedlist contained
++syn keyword docbkKeyword orgdiv orgname otheraddr othercredit contained
++syn keyword docbkKeyword othername package pagenums para paramdef contained
++syn keyword docbkKeyword parameter part partintro personblurb contained
++syn keyword docbkKeyword personname phone phrase pob postcode contained
++syn keyword docbkKeyword preface primary primaryie printhistory contained
++syn keyword docbkKeyword procedure productname productnumber contained
++syn keyword docbkKeyword programlisting programlistingco prompt contained
++syn keyword docbkKeyword property pubdate publisher publishername contained
++syn keyword docbkKeyword qandadiv qandaentry qandaset question quote contained
++syn keyword docbkKeyword refclass refdescriptor refentry contained
+ syn keyword docbkKeyword refentrytitle reference refmeta refmiscinfo contained
+ syn keyword docbkKeyword refname refnamediv refpurpose refsect1 contained
+-syn keyword docbkKeyword refsect1info refsect2 refsect2info refsect3 contained
+-syn keyword docbkKeyword refsect3info refsynopsisdiv refsynopsisdivinfo contained
+-syn keyword docbkKeyword releaseinfo remark replaceable returnvalue revhistory contained
+-syn keyword docbkKeyword revision revnumber revremark row sbr screen contained
+-syn keyword docbkKeyword screenco screeninfo screenshot secondary contained
+-syn keyword docbkKeyword secondaryie sect1 sect1info sect2 sect2info sect3 contained
+-syn keyword docbkKeyword sect3info sect4 sect4info sect5 sect5info section contained
+-syn keyword docbkKeyword sectioninfo see seealso seealsoie seeie seg contained
+-syn keyword docbkKeyword seglistitem segmentedlist segtitle seriesinfo contained
+-syn keyword docbkKeyword seriesvolnums set setindex setinfo sgmltag contained
+-syn keyword docbkKeyword shortaffil shortcut sidebar simpara simplelist contained
+-syn keyword docbkKeyword simplesect spanspec state step street structfield contained
+-syn keyword docbkKeyword structname subject subjectset subjectterm contained
+-syn keyword docbkKeyword subscript substeps subtitle superscript surname contained
+-syn keyword docbkKeyword symbol synopfragment synopfragmentref synopsis contained
+-syn keyword docbkKeyword systemitem table tbody term tertiary tertiaryie contained
+-syn keyword docbkKeyword textobject tfoot tgroup thead tip title contained
+-syn keyword docbkKeyword titleabbrev toc tocback tocchap tocentry tocfront contained
+-syn keyword docbkKeyword toclevel1 toclevel2 toclevel3 toclevel4 toclevel5 contained
+-syn keyword docbkKeyword tocpart token trademark type ulink userinput contained
++syn keyword docbkKeyword refsect2 refsect3 refsection refsynopsisdiv contained
++syn keyword docbkKeyword releaseinfo remark replaceable returnvalue contained
++syn keyword docbkKeyword revdescription revhistory revision contained
++syn keyword docbkKeyword revnumber revremark row sbr screen screenco contained
++syn keyword docbkKeyword screenshot secondary secondaryie sect1 contained
++syn keyword docbkKeyword sect2 sect3 sect4 sect5 section see seealso contained
++syn keyword docbkKeyword seealsoie seeie seg seglistitem contained
++syn keyword docbkKeyword segmentedlist segtitle seriesvolnums set contained
++syn keyword docbkKeyword setindex shortaffil shortcut sidebar contained
++syn keyword docbkKeyword simpara simplelist simplemsgentry contained
++syn keyword docbkKeyword simplesect spanspec state step contained
++syn keyword docbkKeyword stepalternatives street subject subjectset contained
++syn keyword docbkKeyword subjectterm subscript substeps subtitle contained
++syn keyword docbkKeyword superscript surname symbol synopfragment contained
++syn keyword docbkKeyword synopfragmentref synopsis systemitem table contained
++syn keyword docbkKeyword task taskprerequisites taskrelated contained
++syn keyword docbkKeyword tasksummary tbody td term termdef tertiary contained
++syn keyword docbkKeyword tertiaryie textdata textobject tfoot tgroup contained
++syn keyword docbkKeyword th thead tip title titleabbrev toc tocentry contained
++syn keyword docbkKeyword token tr trademark type uri userinput contained
+ syn keyword docbkKeyword varargs variablelist varlistentry varname contained
+-syn keyword docbkKeyword videodata videoobject void volumenum warning contained
+-syn keyword docbkKeyword wordasword xref year contained
++syn keyword docbkKeyword videodata videoobject void volumenum contained
++syn keyword docbkKeyword warning wordasword xref year contained
++
++if b:docbk_ver == 4
++  syn keyword docbkKeyword ackno action appendixinfo articleinfo contained
++  syn keyword docbkKeyword authorblurb beginpage bibliographyinfo contained
++  syn keyword docbkKeyword blockinfo bookinfo chapterinfo contained
++  syn keyword docbkKeyword collabname corpauthor corpcredit contained
++  syn keyword docbkKeyword corpname glossaryinfo graphic graphicco contained
++  syn keyword docbkKeyword highlights indexinfo inlinegraphic contained
++  syn keyword docbkKeyword interface invpartnumber isbn issn lot contained
++  syn keyword docbkKeyword lotentry medialabel mediaobjectco contained
++  syn keyword docbkKeyword modespec objectinfo partinfo contained
++  syn keyword docbkKeyword prefaceinfo pubsnumber refentryinfo contained
++  syn keyword docbkKeyword referenceinfo refsect1info refsect2info contained
++  syn keyword docbkKeyword refsect3info refsectioninfo contained
++  syn keyword docbkKeyword refsynopsisdivinfo screeninfo sect1info contained
++  syn keyword docbkKeyword sect2info sect3info sect4info sect5info contained
++  syn keyword docbkKeyword sectioninfo setindexinfo setinfo contained
++  syn keyword docbkKeyword sgmltag sidebarinfo structfield contained
++  syn keyword docbkKeyword structname tocback tocchap tocfront contained
++  syn keyword docbkKeyword toclevel1 toclevel2 toclevel3 toclevel4 contained
++  syn keyword docbkKeyword toclevel5 tocpart ulink contained
++
++else
++  syn keyword docbkKeyword acknowledgements annotation arc contained
++  syn keyword docbkKeyword constraint constraintdef cover contained
++  syn keyword docbkKeyword extendedlink givenname info lhs locator contained
++  syn keyword docbkKeyword multimediaparam nonterminal org person contained
++  syn keyword docbkKeyword production productionrecap contained
++  syn keyword docbkKeyword productionset rhs tag tocdiv topic contained
++
++endif
+ 
+ " Add special emphasis on some regions. Thanks to Rory Hunter <roryh@dcs.ed.ac.uk> for these ideas.
+ syn region docbkRegion start="<emphasis>"lc=10 end="</emphasis>"me=e-11 contains=xmlRegion,xmlEntity,sgmlRegion,sgmlEntity keepend
+diff -Naur vim73.orig/runtime/syntax/dosini.vim vim73/runtime/syntax/dosini.vim
+--- vim73.orig/runtime/syntax/dosini.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/dosini.vim	2013-06-07 17:07:22.572277557 +0000
+@@ -1,9 +1,12 @@
+ " Vim syntax file
+-" Language:	Configuration File (ini file) for MSDOS/MS Windows
+-" Version Info: @(#)dosini.vim 1.6 97/12/15 08:54:12
+-" Author:       Sean M. McKee <mckee@misslink.net>
+-" Maintainer:   Nima Talebi <nima@it.net.au>
+-" Last Change:	Mon, 26 Jun 2006 22:07:28 +1000
++" Language:               Configuration File (ini file) for MSDOS/MS Windows
++" Version:                2.1
++" Original Author:        Sean M. McKee <mckee@misslink.net>
++" Previous Maintainer:    Nima Talebi <nima@it.net.au>
++" Current Maintainer:     Hong Xu <xuhdev@gmail.com>
++" Homepage:               http://www.vim.org/scripts/script.php?script_id=3747
++"                         https://bitbucket.org/xuhdev/syntax-dosini.vim
++" Last Change:            2011 Nov 8
+ 
+ 
+ " For version 5.x: Clear all syntax items
+@@ -17,9 +20,12 @@
+ " shut case off
+ syn case ignore
+ 
+-syn match  dosiniLabel		"^.\{-}="
+-syn region dosiniHeader		start="^\[" end="\]"
+-syn match  dosiniComment	"^;.*$"
++syn match  dosiniNumber   "\<\d\+\>"
++syn match  dosiniNumber   "\<\d*\.\d\+\>"
++syn match  dosiniNumber   "\<\d\+e[+-]\=\d\+\>"
++syn match  dosiniLabel    "^.\{-}="
++syn region dosiniHeader   start="^\s*\[" end="\]"
++syn match  dosiniComment  "^[#;].*$"
+ 
+ " Define the default highlighting.
+ " For version 5.7 and earlier: only when not done already
+@@ -32,13 +38,14 @@
+     command -nargs=+ HiLink hi def link <args>
+   endif
+ 
+-	HiLink dosiniHeader	Special
+-	HiLink dosiniComment	Comment
+-	HiLink dosiniLabel	Type
++  HiLink dosiniNumber   Number
++  HiLink dosiniHeader   Special
++  HiLink dosiniComment  Comment
++  HiLink dosiniLabel    Type
+ 
+   delcommand HiLink
+ endif
+ 
+ let b:current_syntax = "dosini"
+ 
+-" vim:ts=8
++" vim: sts=2 sw=2 et
+diff -Naur vim73.orig/runtime/syntax/dot.vim vim73/runtime/syntax/dot.vim
+--- vim73.orig/runtime/syntax/dot.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/dot.vim	2013-06-07 17:07:22.582277529 +0000
+@@ -3,7 +3,7 @@
+ " Filenames:    *.dot
+ " Maintainer:   Markus Mottl  <markus.mottl@gmail.com>
+ " URL:          http://www.ocaml.info/vim/syntax/dot.vim
+-" Last Change:  2006 Feb 05
++" Last Change:  2011 May 17 - improved identifier matching + two new keywords
+ "               2001 May 04 - initial version
+ 
+ " For version 5.x: Clear all syntax items
+@@ -47,10 +47,10 @@
+ 
+ " Edge attributes
+ syn keyword  dotType arrowhead arrowsize arrowtail constraint decorateP
+-syn keyword  dotType dir headclip headlabel labelangle labeldistance
++syn keyword  dotType dir headclip headlabel headport labelangle labeldistance
+ syn keyword  dotType labelfontcolor labelfontname labelfontsize
+ syn keyword  dotType minlen port_label_distance samehead sametail
+-syn keyword  dotType tailclip taillabel weight
++syn keyword  dotType tailclip taillabel tailport weight
+ 
+ " Shared attributes (graphs, nodes, edges)
+ syn keyword  dotType color
+@@ -67,7 +67,7 @@
+ syn match    dotKeyChar  "->"
+ 
+ " Identifier
+-syn match    dotIdentifier /\<\w\+\>/
++syn match    dotIdentifier /\<\w\+\(:\w\+\)\?\>/
+ 
+ " Synchronization
+ syn sync minlines=50
+diff -Naur vim73.orig/runtime/syntax/dtd.vim vim73/runtime/syntax/dtd.vim
+--- vim73.orig/runtime/syntax/dtd.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/dtd.vim	2013-06-07 17:07:22.642277357 +0000
+@@ -13,17 +13,11 @@
+ " TODO:
+ "   - improve synchronizing.
+ 
+-if version < 600
+-    syntax clear
+-    let __dtd_cpo_save__ = &cpo
+-    set cpo&
+-else
+-    if exists("b:current_syntax")
+-	finish
+-    endif
+-    let s:dtd_cpo_save = &cpo
+-    set cpo&vim
++if exists("b:current_syntax")
++    finish
+ endif
++let s:dtd_cpo_save = &cpo
++set cpo&vim
+ 
+ if !exists("dtd_ignore_case")
+     " I prefer having the case takes into consideration.
+@@ -168,13 +162,8 @@
+     delcommand HiLink
+ endif
+ 
+-if version < 600
+-    let &cpo = __dtd_cpo_save__
+-    unlet __dtd_cpo_save__
+-else
+-    let &cpo = s:dtd_cpo_save
+-    unlet s:dtd_cpo_save
+-endif
++let &cpo = s:dtd_cpo_save
++unlet s:dtd_cpo_save
+ 
+ let b:current_syntax = "dtd"
+ 
+diff -Naur vim73.orig/runtime/syntax/dts.vim vim73/runtime/syntax/dts.vim
+--- vim73.orig/runtime/syntax/dts.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/dts.vim	2013-06-07 17:07:22.675610595 +0000
+@@ -0,0 +1,28 @@
++" Vim syntax file
++" Language:	dts/dtsi (device tree files)
++" Maintainer:	Daniel Mack <vim@zonque.org>
++" Last Change:	2013 Apr 05
++
++if exists("b:current_syntax")
++  finish
++endif
++
++syntax region dtsComment        start="/\*"  end="\*/"
++syntax match  dtsReference      "&[[:alpha:][:digit:]_]\+"
++syntax region dtsBinaryProperty start="\[" end="\]" 
++syntax match  dtsStringProperty "\".*\""
++syntax match  dtsKeyword        "/.*/"
++syntax match  dtsLabel          "^[[:space:]]*[[:alpha:][:digit:]_]\+:"
++syntax match  dtsNode           /[[:alpha:][:digit:]-_]\+\(@[0-9a-fA-F]\+\|\)[[:space:]]*{/he=e-1
++syntax region dtsCellProperty   start="<" end=">" contains=dtsReference,dtsBinaryProperty,dtsStringProperty,dtsComment
++syntax region dtsCommentInner   start="/\*"  end="\*/"
++
++hi def link dtsCellProperty     Number
++hi def link dtsBinaryProperty   Number
++hi def link dtsStringProperty   String
++hi def link dtsKeyword          Include
++hi def link dtsLabel            Label
++hi def link dtsNode             Structure
++hi def link dtsReference        Macro
++hi def link dtsComment          Comment
++hi def link dtsCommentInner     Comment 
+diff -Naur vim73.orig/runtime/syntax/eiffel.vim vim73/runtime/syntax/eiffel.vim
+--- vim73.orig/runtime/syntax/eiffel.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/eiffel.vim	2013-06-07 17:07:22.725610453 +0000
+@@ -1,10 +1,10 @@
+ " Eiffel syntax file
+ " Language:	Eiffel
+-" Maintainer:	Reimer Behrends <behrends@cse.msu.edu>
+-"		With much input from Jocelyn Fiat <fiat@eiffel.com>
+-" See http://www.cse.msu.edu/~behrends/vim/ for the most current version.
+-" Last Change:	2001 May 09
+-
++" Maintainer: Jocelyn Fiat <jfiat@eiffel.com>
++" Previous maintainer:	Reimer Behrends <behrends@cse.msu.edu>
++" Contributions from: Thilo Six
++" 
++" URL: https://github.com/eiffelhub/vim-eiffel
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+ if version < 600
+@@ -13,6 +13,9 @@
+   finish
+ endif
+ 
++let s:keepcpo= &cpo
++set cpo&vim
++
+ " Option handling
+ 
+ if exists("eiffel_ignore_case")
+@@ -40,7 +43,7 @@
+ 
+ " Keyword definitions
+ 
+-syn keyword eiffelTopStruct	indexing feature creation inherit
++syn keyword eiffelTopStruct	note indexing feature creation inherit
+ syn match   eiffelTopStruct	"\<class\>"
+ syn match   eiffelKeyword	"\<end\>"
+ syn match   eiffelTopStruct	"^end\>\(\s*--\s\+class\s\+\<[A-Z][A-Z0-9_]*\>\)\=" contains=eiffelClassName
+@@ -48,27 +51,30 @@
+ syn match eiffelBracketError	"\]"
+ syn region eiffelGeneric	transparent matchgroup=eiffelBrackets start="\[" end="\]" contains=ALLBUT,eiffelBracketError,eiffelGenericDecl,eiffelStringError,eiffelStringEscape,eiffelGenericCreate,eiffelTopStruct
+ if exists("eiffel_ise")
++  syn match   eiffelAgent	"\<agent\>"
++  syn match   eiffelConvert	"\<convert\>"
+   syn match   eiffelCreate	"\<create\>"
+   syn match   eiffelTopStruct	contained "\<create\>"
++  syn match   eiffelTopStruct	contained "\<convert\>"
+   syn match   eiffelGenericCreate  contained "\<create\>"
+   syn match   eiffelTopStruct	"^create\>"
+   syn region  eiffelGenericDecl	transparent matchgroup=eiffelBrackets contained start="\[" end="\]" contains=ALLBUT,eiffelCreate,eiffelTopStruct,eiffelGeneric,eiffelBracketError,eiffelStringEscape,eiffelStringError,eiffelBrackets
+   syn region  eiffelClassHeader	start="^class\>" end="$" contains=ALLBUT,eiffelCreate,eiffelGenericCreate,eiffelGeneric,eiffelStringEscape,eiffelStringError,eiffelBrackets
+ endif
+-syn keyword eiffelDeclaration	is do once deferred unique local
+-syn keyword eiffelDeclaration	Unique
++syn keyword eiffelDeclaration	is do once deferred unique local attribute assign
++syn keyword eiffelDeclaration	attached detachable Unique
+ syn keyword eiffelProperty	expanded obsolete separate frozen
+ syn keyword eiffelProperty	prefix infix
+ syn keyword eiffelInheritClause	rename redefine undefine select export as
+ syn keyword eiffelAll		all
+-syn keyword eiffelKeyword	external alias
++syn keyword eiffelKeyword	external alias some
+ syn keyword eiffelStatement	if else elseif inspect
+ syn keyword eiffelStatement	when then
+ syn match   eiffelAssertion	"\<require\(\s\+else\)\=\>"
+ syn match   eiffelAssertion	"\<ensure\(\s\+then\)\=\>"
+ syn keyword eiffelAssertion	check
+ syn keyword eiffelDebug		debug
+-syn keyword eiffelStatement	from until loop
++syn keyword eiffelStatement	across from until loop
+ syn keyword eiffelAssertion	variant
+ syn match   eiffelAssertion	"\<invariant\>"
+ syn match   eiffelTopStruct	"^invariant\>"
+@@ -126,6 +132,11 @@
+ syn match eiffelParenError	")"
+ syn region eiffelParen		transparent start="(" end=")" contains=ALLBUT,eiffelParenError,eiffelStringError,eiffelStringEscape
+ 
++if exists("eiffel_fold")
++"    setlocal foldmethod=indent
++"    syn sync fromstart
++endif
++
+ " Should suffice for even very long strings and expressions
+ syn sync lines=40
+ 
+@@ -150,6 +161,8 @@
+   HiLink eiffelException	Statement
+   HiLink eiffelGenericCreate	Statement
+ 
++  HiLink eiffelAgent		Statement
++  HiLink eiffelConvert		Statement
+ 
+   HiLink eiffelTopStruct	PreProc
+ 
+@@ -193,4 +206,7 @@
+ 
+ let b:current_syntax = "eiffel"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/erlang.vim vim73/runtime/syntax/erlang.vim
+--- vim73.orig/runtime/syntax/erlang.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/erlang.vim	2013-06-07 17:07:22.782276957 +0000
+@@ -1,229 +1,258 @@
+ " Vim syntax file
+-" Language:    erlang (ERicsson LANGuage)
+-"              http://www.erlang.se
+-"              http://www.erlang.org
+-" Maintainer:  Csaba Hoch <csaba.hoch@gmail.com>
+-" Former Maintainer:  KreÄ
+imir MarÄŸiÄ (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
+-" Last update: 12-Mar-2008
+-" Filenames:   .erl
+-
+-
+-" There are three sets of highlighting in here:
+-" One is "erlang_characters", second is "erlang_functions" and third
+-" is "erlang_keywords".
+-" If you want to disable keywords highlighting, put in your .vimrc:
+-"       let erlang_keywords=1
+-" If you want to disable erlang BIF highlighting, put in your .vimrc
+-" this:
+-"       let erlang_functions=1
+-" If you want to disable special characters highlighting, put in
+-" your .vimrc:
+-"       let erlang_characters=1
+-
++" Language:     Erlang (http://www.erlang.org)
++" Maintainer:   Csaba Hoch <csaba.hoch@gmail.com>
++" Last Update:  2013-Jun-01
++" License:      Vim license
++" URL:          https://github.com/hcs42/vim-erlang
++
++" Acknowledgements: This script was originally created by Kresimir Marzic [1].
++" The script was then revamped by Csaba Hoch [2]. During the revamp, the new
++" highlighting style and some code was taken from the Erlang syntax script
++" that is part of vimerl [3], created by Oscar HellstrÃ¶m [4] and improved by
++" Ricardo Catalinas JimÃ©nez [5].
++
++" [1]: KreÄ
+imir MarÄŸiÄ (Kresimir Marzic) <kmarzic@fly.srk.fer.hr>
++" [2]: Csaba Hoch <csaba.hoch@gmail.com>
++" [3]: https://github.com/jimenezrick/vimerl
++" [4]: Oscar HellstrÃ¶m <oscar@oscarh.net> (http://oscar.hellstrom.st)
++" [5]: Ricardo Catalinas JimÃ©nez <jimenezrick@gmail.com>
++
++" Customization:
++"
++" To use the old highlighting style, add this to your .vimrc:
++"
++"     let g:erlang_old_style_highlight = 1
++"
++" To highlight further module attributes, add them to
++" ~/.vim/after/syntax/erlang.vim:
++"
++"     syn keyword erlangAttribute myattr1 myattr2 contained
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+ if version < 600
+     syntax clear
+-elseif exists ("b:current_syntax")
++elseif exists("b:current_syntax")
+     finish
+ endif
+ 
+-
+ " Case sensitive
+ syn case match
+ 
+-
+-if ! exists ("erlang_characters")
+-
+-    " Basic elements
+-    syn match   erlangComment          "%.*$" contains=erlangAnnotation,erlangTodo
+-    syn match   erlangAnnotation       " \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)" contained
+-    syn match   erlangAnnotation       "`[^']*'" contained
+-    syn keyword erlangTodo             TODO FIXME XXX contained
+-    syn match   erlangModifier         "\~\a\|\\\a\|\\\\" contained
+-    syn match   erlangSpecialCharacter ":\|_\|@\|\\\|\"\|\."
+-    syn match   erlangSeparator        "(\|)\|{\|}\|\[\|]\||\|||\|;\|,\|?\|->\|#" contained
+-    syn region  erlangString           start=+"+ skip=+\\.+ end=+"+ contains=erlangModifier
+-    syn region  erlangAtom             start=+'+ skip=+\\'+ end=+'+
+-
+-    " Operators
+-    syn match   erlangOperator         "+\|-\|\*\|\/"
+-    syn keyword erlangOperator         div rem or xor bor bxor bsl bsr
+-    syn keyword erlangOperator         and band not bnot andalso orelse
+-    syn match   erlangOperator         "==\|/=\|=:=\|=/=\|<\|=<\|>\|>="
+-    syn match   erlangOperator         "++\|--\|=\|!\|<-"
+-
+-    " Numbers
+-    syn match   erlangNumberInteger    "\d\+" contains=erlangSeparator
+-    syn match   erlangNumberFloat1     "\d\+\.\d\+" contains=erlangSeparator
+-    syn match   erlangNumberFloat2     "\d\+\(\.\d\+\)\=[eE][+-]\=\d\+\(\.\d\+\)\=" contains=erlangSeparator
+-    syn match   erlangNumberFloat3     "\d\+[#]\x\+" contains=erlangSeparator
+-    syn match   erlangNumberHex        "$\x\+" contains=erlangSeparator
+-
+-    " Ignore '_' and '-' in words
+-    syn match   erlangWord             "\h\+\w*"
+-
+-    syn match   erlangChar             /\$./
++if version >= 600
++  setlocal iskeyword+=$,@-@
+ endif
+ 
+-if ! exists ("erlang_functions")
+-    " Functions call
+-    syn match   erlangFCall      "\%(\w\+\s*\.\s*\)*\w\+\s*[:@]\s*\w\+"
+-
+-    " build-in-functions (BIFs)
+-    syn keyword erlangBIF        abs alive apply atom_to_list
+-    syn keyword erlangBIF        binary_to_list binary_to_term
+-    syn keyword erlangBIF        concat_binary
+-    syn keyword erlangBIF        date disconnect_node
+-    syn keyword erlangBIF        element erase exit
+-    syn keyword erlangBIF        float float_to_list
+-    syn keyword erlangBIF        get get_keys group_leader
+-    syn keyword erlangBIF        halt hd
+-    syn keyword erlangBIF        integer_to_list is_alive
+-    syn keyword erlangBIF        length link list_to_atom list_to_binary
+-    syn keyword erlangBIF        list_to_float list_to_integer list_to_pid
+-    syn keyword erlangBIF        list_to_tuple load_module
+-    syn keyword erlangBIF        make_ref monitor_node
+-    syn keyword erlangBIF        node nodes now
+-    syn keyword erlangBIF        open_port
+-    syn keyword erlangBIF        pid_to_list process_flag
+-    syn keyword erlangBIF        process_info process put
+-    syn keyword erlangBIF        register registered round
+-    syn keyword erlangBIF        self setelement size spawn
+-    syn keyword erlangBIF        spawn_link split_binary statistics
+-    syn keyword erlangBIF        term_to_binary throw time tl trunc
+-    syn keyword erlangBIF        tuple_to_list
+-    syn keyword erlangBIF        unlink unregister
+-    syn keyword erlangBIF        whereis
+-
+-    " Other BIFs
+-    syn keyword erlangBIF        atom binary constant function integer
+-    syn keyword erlangBIF        list number pid ports port_close port_info
+-    syn keyword erlangBIF        reference record
+-
+-    " erlang:BIFs
+-    syn keyword erlangBIF        check_process_code delete_module
+-    syn keyword erlangBIF        get_cookie hash math module_loaded
+-    syn keyword erlangBIF        preloaded processes purge_module set_cookie
+-    syn keyword erlangBIF        set_node
+-
+-    " functions of math library
+-    syn keyword erlangFunction   acos asin atan atan2 cos cosh exp
+-    syn keyword erlangFunction   log log10 pi pow power sin sinh sqrt
+-    syn keyword erlangFunction   tan tanh
+-
+-    " Other functions
+-    syn keyword erlangFunction   call module_info parse_transform
+-    syn keyword erlangFunction   undefined_function
+-
+-    " Modules
+-    syn keyword erlangModule     error_handler
+-endif
++" Comments
++syn match erlangComment           '%.*$' contains=erlangCommentAnnotation,erlangTodo
++syn match erlangCommentAnnotation ' \@<=@\%(clear\|docfile\|end\|headerfile\|todo\|TODO\|type\|author\|copyright\|doc\|reference\|see\|since\|title\|version\|deprecated\|hidden\|private\|equiv\|spec\|throws\)' contained
++syn match erlangCommentAnnotation /`[^']*'/ contained
++syn keyword erlangTodo            TODO FIXME XXX contained
++syn match erlangShebang           '^#!.*'
++
++" Numbers (minimum base is 2, maximum is 36.)
++syn match erlangNumberInteger '\<\d\+\>'
++syn match erlangNumberInteger '\<\%([2-9]\|[12]\d\|3[0-6]\)\+#[[:alnum:]]\+\>'
++syn match erlangNumberFloat   '\<\d\+\.\d\+\%([eE][+-]\=\d\+\)\=\>'
++
++" Strings, atoms, characters
++syn region erlangString            start=/"/ end=/"/ contains=erlangStringModifier
++syn region erlangQuotedAtom        start=/'/ end=/'/ contains=erlangQuotedAtomModifier
++syn match erlangStringModifier     '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
++syn match erlangQuotedAtomModifier '\~\a\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)' contained
++syn match erlangModifier           '\$\%([^\\]\|\\\%(\o\{1,3}\|x\x\x\|x{\x\+}\|\^.\|.\)\)'
++
++" Operators, separators
++syn match erlangOperator   '==\|=:=\|/=\|=/=\|<\|=<\|>\|>=\|++\|--\|=\|!\|<-\|+\|-\|\*\|\/'
++syn keyword erlangOperator div rem or xor bor bxor bsl bsr and band not bnot andalso orelse
++syn match erlangBracket    '{\|}\|\[\|]\||\|||'
++syn match erlangPipe       '|'
++syn match erlangRightArrow '->'
++
++" Atoms, function calls (order is important)
++syn match erlangAtom           '\<\l[[:alnum:]_@]*' contains=erlangBoolean
++syn keyword erlangBoolean      true false contained
++syn match erlangLocalFuncCall  '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangBIF
++syn match erlangLocalFuncRef   '\<\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@='
++syn match erlangGlobalFuncCall '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*(\)\@=' contains=erlangComment
++syn match erlangGlobalFuncRef  '\<\%(\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*\.\%(\s\|\n\|%.*\n\)*\)*\a[[:alnum:]_@]*\%(\s\|\n\|%.*\n\)*:\%(\s\|\n\|%.*\n\)*\a[[:alnum:]_@]*\>\%(\%(\s\|\n\|%.*\n\)*/\)\@=' contains=erlangComment
++
++" Variables, macros, records
++syn match erlangVariable '\<[A-Z_][[:alnum:]_@]*'
++syn match erlangMacro    '??\=[[:alnum:]_@]\+'
++syn match erlangMacro    '\%(-define(\)\@<=[[:alnum:]_@]\+'
++syn match erlangRecord   '#\s*\l[[:alnum:]_@]*'
++
++" Bitstrings
++syn match erlangBitType '\%(\/\%(\s\|\n\|%.*\n\)*\)\@<=\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\%(\%(\s\|\n\|%.*\n\)*-\%(\s\|\n\|%.*\n\)*\%(integer\|float\|binary\|bytes\|bitstring\|bits\|binary\|utf8\|utf16\|utf32\|signed\|unsigned\|big\|little\|native\|unit\)\)*' contains=erlangComment
++
++" Constants and Directives
++syn match erlangUnknownAttribute '-\%(\s\|\n\|%.*\n\)*\l[[:alnum:]_@]*' contains=erlangComment
++syn match erlangAttribute '-\%(\s\|\n\|%.*\n\)*\%(behaviou\=r\|compile\|export\|file\|import\|module\|author\|copyright\|doc\|vsn\|on_load\|export_type\)' contains=erlangComment
++syn match erlangInclude   '-\%(\s\|\n\|%.*\n\)*\%(include\|include_lib\)\>' contains=erlangComment
++syn match erlangRecordDef '-\%(\s\|\n\|%.*\n\)*record\>' contains=erlangComment
++syn match erlangDefine    '-\%(\s\|\n\|%.*\n\)*\%(define\|undef\)\>' contains=erlangComment
++syn match erlangPreCondit '-\%(\s\|\n\|%.*\n\)*\%(ifdef\|ifndef\|else\|endif\)\>' contains=erlangComment
++syn match erlangType      '-\%(\s\|\n\|%.*\n\)*\%(spec\|type\|opaque\|callback\)\>' contains=erlangComment
++
++" Keywords
++syn keyword erlangKeyword after begin case catch cond end fun if let of query
++syn keyword erlangKeyword receive when try
++
++" Build-in-functions (BIFs)
++syn keyword erlangBIF abs alive apply atom_to_binary atom_to_list contained
++syn keyword erlangBIF binary_part binary_to_atom contained
++syn keyword erlangBIF binary_to_existing_atom binary_to_float contained
++syn keyword erlangBIF binary_to_integer bitstring_to_list contained
++syn keyword erlangBIF binary_to_list binary_to_term bit_size contained
++syn keyword erlangBIF byte_size check_old_code check_process_code contained
++syn keyword erlangBIF concat_binary date delete_module demonitor contained
++syn keyword erlangBIF disconnect_node element erase error exit contained
++syn keyword erlangBIF float float_to_binary float_to_list contained
++syn keyword erlangBIF garbage_collect get get_keys group_leader contained
++syn keyword erlangBIF halt hd integer_to_binary integer_to_list contained
++syn keyword erlangBIF iolist_to_binary iolist_size is_alive contained
++syn keyword erlangBIF is_atom is_binary is_bitstring is_boolean contained
++syn keyword erlangBIF is_float is_function is_integer is_list contained
++syn keyword erlangBIF is_number is_pid is_port is_process_alive contained
++syn keyword erlangBIF is_record is_reference is_tuple length link contained
++syn keyword erlangBIF list_to_atom list_to_binary contained
++syn keyword erlangBIF list_to_bitstring list_to_existing_atom contained
++syn keyword erlangBIF list_to_float list_to_integer list_to_pid contained
++syn keyword erlangBIF list_to_tuple load_module make_ref max min contained
++syn keyword erlangBIF module_loaded monitor monitor_node node contained
++syn keyword erlangBIF nodes now open_port pid_to_list port_close contained
++syn keyword erlangBIF port_command port_connect pre_loaded contained
++syn keyword erlangBIF process_flag process_flag process_info contained
++syn keyword erlangBIF process purge_module put register registered contained
++syn keyword erlangBIF round self setelement size spawn spawn_link contained
++syn keyword erlangBIF spawn_monitor spawn_opt split_binary contained
++syn keyword erlangBIF statistics term_to_binary throw time tl contained
++syn keyword erlangBIF trunc tuple_size tuple_to_list unlink contained
++syn keyword erlangBIF unregister whereis contained
++
++" Sync at the beginning of functions: if this is not used, multiline string
++" are not always recognized, and the indentation script cannot use the
++" "searchpair" (because it would not always skip strings and comments when
++" looking for keywords and opening parens/brackets).
++syn sync match erlangSync grouphere NONE "^[a-z]\s*("
++let b:erlang_syntax_synced = 1
+ 
+-if ! exists ("erlang_keywords")
+-    " Constants and Directives
+-    syn match   erlangDirective  "-behaviour\|-behavior"
+-    syn match   erlangDirective  "-compile\|-define\|-else\|-endif\|-export\|-file"
+-    syn match   erlangDirective  "-ifdef\|-ifndef\|-import\|-include_lib\|-include"
+-    syn match   erlangDirective  "-module\|-record\|-undef"
+-
+-    syn match   erlangConstant   "-author\|-copyright\|-doc\|-vsn"
+-
+-    " Keywords
+-    syn keyword erlangKeyword    after begin case catch
+-    syn keyword erlangKeyword    cond end fun if
+-    syn keyword erlangKeyword    let of query receive
+-    syn keyword erlangKeyword    when
+-    syn keyword erlangKeyword    try
+-
+-    " Processes
+-    syn keyword erlangProcess    creation current_function dictionary
+-    syn keyword erlangProcess    group_leader heap_size high initial_call
+-    syn keyword erlangProcess    linked low memory_in_use message_queue
+-    syn keyword erlangProcess    net_kernel node normal priority
+-    syn keyword erlangProcess    reductions registered_name runnable
+-    syn keyword erlangProcess    running stack_trace status timer
+-    syn keyword erlangProcess    trap_exit waiting
+-
+-    " Ports
+-    syn keyword erlangPort       command count_in count_out creation in
+-    syn keyword erlangPort       in_format linked node out owner packeting
+-
+-    " Nodes
+-    syn keyword erlangNode       atom_tables communicating creation
+-    syn keyword erlangNode       current_gc current_reductions current_runtime
+-    syn keyword erlangNode       current_wall_clock distribution_port
+-    syn keyword erlangNode       entry_points error_handler friends
+-    syn keyword erlangNode       garbage_collection magic_cookie magic_cookies
+-    syn keyword erlangNode       module_table monitored_nodes name next_ref
+-    syn keyword erlangNode       ports preloaded processes reductions
+-    syn keyword erlangNode       ref_state registry runtime wall_clock
+-
+-    " Reserved
+-    syn keyword erlangReserved   apply_lambda module_info module_lambdas
+-    syn keyword erlangReserved   record record_index record_info
++" Define the default highlighting. See ":help group-name" for the groups and
++" their colors.
+ 
+-    " Extras
+-    syn keyword erlangExtra      badarg nocookie false fun true
++let s:old_style = (exists("g:erlang_old_style_highlight") && g:erlang_old_style_highlight == 1)
+ 
+-    " Signals
+-    syn keyword erlangSignal     badsig kill killed exit normal
+-endif
++" For version 5.7 and earlier: only when not done already
++" For version 5.8 and later: only when an item doesn't have highlighting yet
++if version >= 508 || !exists("did_erlang_inits")
++  if version < 508
++    let did_erlang_inits = 1
++    command -nargs=+ HiLink hi link <args>
++  else
++    command -nargs=+ HiLink hi def link <args>
++  endif
++
++  " Comments
++  HiLink erlangComment Comment
++  HiLink erlangCommentAnnotation Special
++  HiLink erlangTodo Todo
++  HiLink erlangShebang Comment
++
++  " Numbers
++  HiLink erlangNumberInteger Number
++  HiLink erlangNumberFloat Float
++
++  " Strings, atoms, characters
++  HiLink erlangString String
++
++  if s:old_style
++    HiLink erlangQuotedAtom Type
++  else
++    HiLink erlangQuotedAtom String
++  endif
++
++  HiLink erlangStringModifier Special
++  HiLink erlangQuotedAtomModifier Special
++  HiLink erlangModifier Special
++
++  " Operators, separators
++  HiLink erlangOperator Operator
++  HiLink erlangRightArrow Operator
++  if s:old_style
++    HiLink erlangBracket Normal
++    HiLink erlangPipe Normal
++  else
++    HiLink erlangBracket Delimiter
++    HiLink erlangPipe Delimiter
++  endif
++
++  " Atoms, functions, variables, macros
++  if s:old_style
++    HiLink erlangAtom Normal
++    HiLink erlangLocalFuncCall Normal
++    HiLink erlangLocalFuncRef Normal
++    HiLink erlangGlobalFuncCall Function
++    HiLink erlangGlobalFuncRef Function
++    HiLink erlangVariable Normal
++    HiLink erlangMacro Normal
++    HiLink erlangRecord Normal
++  else
++    HiLink erlangAtom String
++    HiLink erlangLocalFuncCall Normal
++    HiLink erlangLocalFuncRef Normal
++    HiLink erlangGlobalFuncCall Normal
++    HiLink erlangGlobalFuncRef Normal
++    HiLink erlangVariable Identifier
++    HiLink erlangMacro Macro
++    HiLink erlangRecord Structure
++  endif
++
++  " Bitstrings
++  if !s:old_style
++    HiLink erlangBitType Type
++  endif
++
++  " Constants and Directives
++  if s:old_style
++    HiLink erlangAttribute Type
++    HiLink erlangMacroDef Type
++    HiLink erlangUnknownAttribute Normal
++    HiLink erlangInclude Type
++    HiLink erlangRecordDef Type
++    HiLink erlangDefine Type
++    HiLink erlangPreCondit Type
++    HiLink erlangType Type
++  else
++    HiLink erlangAttribute Keyword
++    HiLink erlangMacroDef Macro
++    HiLink erlangUnknownAttribute Normal
++    HiLink erlangInclude Include
++    HiLink erlangRecordDef Keyword
++    HiLink erlangDefine Define
++    HiLink erlangPreCondit PreCondit
++    HiLink erlangType Type
++  endif
+ 
++  " Keywords
++  HiLink erlangKeyword Keyword
+ 
++  " Build-in-functions (BIFs)
++  HiLink erlangBIF Function
+ 
+-" Define the default highlighting.
+-" For version 5.7 and earlier: only when not done already
+-" For version 5.8 and later: only when an item doesn't have highlighting yet
+-if version >= 508 || !exists ("did_erlang_inits")
+-    if version < 508
+-        let did_erlang_inits = 1
+-        command -nargs=+ HiLink hi link <args>
+-    else
+-        command -nargs=+ HiLink hi def link <args>
+-    endif
+-
+-    " erlang_characters
+-    HiLink erlangComment Comment
+-    HiLink erlangAnnotation Special
+-    HiLink erlangTodo Todo
+-    HiLink erlangSpecialCharacter Special
+-    HiLink erlangSeparator Normal
+-    HiLink erlangModifier Special
+-    HiLink erlangOperator Operator
+-    HiLink erlangString String
+-    HiLink erlangAtom Type
+-
+-    HiLink erlangNumberInteger Number
+-    HiLink erlangNumberFloat1 Float
+-    HiLink erlangNumberFloat2 Float
+-    HiLink erlangNumberFloat3 Float
+-    HiLink erlangNumberFloat4 Float
+-    HiLink erlangNumberHex Number
+-
+-    HiLink erlangWord Normal
+-
+-    " erlang_functions
+-    HiLink erlangFCall Function
+-    HiLink erlangBIF Function
+-    HiLink erlangFunction Function
+-    HiLink erlangModuleFunction Function
+-
+-    " erlang_keywords
+-    HiLink erlangDirective Type
+-    HiLink erlangConstant Type
+-    HiLink erlangKeyword Keyword
+-    HiLink erlangProcess Special
+-    HiLink erlangPort Special
+-    HiLink erlangNode Special
+-    HiLink erlangReserved Statement
++  if s:old_style
++    HiLink erlangBoolean Statement
++    HiLink erlangExtra Statement
++    HiLink erlangSignal Statement
++  else
++    HiLink erlangBoolean Boolean
+     HiLink erlangExtra Statement
+     HiLink erlangSignal Statement
++  endif
+ 
+-    delcommand HiLink
++  delcommand HiLink
+ endif
+ 
+-
+ let b:current_syntax = "erlang"
+ 
++" vim: sw=2 et
+diff -Naur vim73.orig/runtime/syntax/expect.vim vim73/runtime/syntax/expect.vim
+--- vim73.orig/runtime/syntax/expect.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/expect.vim	2013-06-07 17:07:22.872276700 +0000
+@@ -1,7 +1,8 @@
+ " Vim syntax file
+ " Language:	Expect
+ " Maintainer:	Ralph Jennings <knowbudy@oro.net>
+-" Last Change:	2001 May 09
++" Last Change:	2012 Jun 01
++" 		(Dominique Pelle added @Spell)
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -72,11 +73,12 @@
+   "syn match  expectIdentifier	"\<[a-z_][a-z0-9_]*\>"
+ syn case match
+ 
+-syn region  expectString	start=+"+  end=+"+  contains=expectVariables,expectSpecial
++syn region  expectString	start=+"+  end=+"+  contains=@Spell,expectVariables,expectSpecial
+ 
+ " Are these really comments in Expect? (I never use it, so I'm just guessing).
+ syn keyword expectTodo		contained TODO
+-syn match   expectComment		"#.*$" contains=expectTodo
++syn match   expectComment	"#.*$" contains=@Spell,expectTodo
++syn match   expectSharpBang	"\%^#!.*"
+ 
+ " Define the default highlighting.
+ " For version 5.7 and earlier: only when not done already
+@@ -89,6 +91,7 @@
+     command -nargs=+ HiLink hi def link <args>
+   endif
+ 
++  HiLink expectSharpBang	PreProc
+   HiLink expectVariables	Special
+   HiLink expectCommand		Function
+   HiLink expectStatement	Statement
+diff -Naur vim73.orig/runtime/syntax/falcon.vim vim73/runtime/syntax/falcon.vim
+--- vim73.orig/runtime/syntax/falcon.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/falcon.vim	2013-06-07 17:07:22.885609996 +0000
+@@ -0,0 +1,199 @@
++" Vim syntax file
++" Language:     Falcon
++" Maintainer:   Steven Oliver <oliver.steven@gmail.com>
++" Website:      http://github.com/steveno/vim-files/blob/master/syntax/falcon.vim
++" Credits:      Thanks the ruby.vim authors, I borrowed a lot!
++"               Thanks to the lisp authors for the rainbow code!
++" -------------------------------------------------------------------------------
++
++" When wanted, highlight the trailing whitespace.
++if exists("c_space_errors")
++    if !exists("c_no_trail_space_error")
++        syn match falconSpaceError "\s\+$"
++    endif
++
++    if !exists("c_no_tab_space_error")
++        syn match falconSpaceError " \+\t"me=e-1
++    endif
++endif
++
++" Symbols
++syn match falconSymbol "\(;\|,\|\.\)"
++syn match falconSymbolOther "\(#\|@\)" display
++
++" Operators
++syn match falconOperator "\(+\|-\|\*\|/\|=\|<\|>\|\*\*\|!=\|\~=\)"
++syn match falconOperator "\(<=\|>=\|=>\|\.\.\|<<\|>>\|\"\)"
++
++" Clusters
++syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=@falconStringSpecial fold
++syn case match
++
++" Keywords
++syn keyword falconKeyword all allp any anyp as attributes brigade cascade catch choice class const
++syn keyword falconKeyword continue def directive do list dropping enum eq eval exit export from function
++syn keyword falconKeyword give global has hasnt in init innerfunc lambda launch launch len List list
++syn keyword falconKeyword load notin object pass print printl provides raise return self sender static to
++syn keyword falconKeyword try xamp
++
++" Error Type Keywords
++syn keyword falconKeyword CloneError CodeError Error InterruprtedError IoError MathError
++syn keyword falconKeyword ParamError RangeError SyntaxError TraceStep TypeError
++
++" Todo
++syn keyword falconTodo DEBUG FIXME NOTE TODO XXX
++
++" Conditionals
++syn keyword falconConditional and case default else end if iff
++syn keyword falconConditional elif or not switch select
++syn match   falconConditional "end\s\if"
++
++" Loops
++syn keyword falconRepeat break for loop forfirst forlast formiddle while
++
++" Booleans
++syn keyword falconBool true false
++
++" Constants
++syn keyword falconConst PI E nil
++syn match   falconConstant  "\%(\%([.@$]\@<!\.\)\@<!\<\|::\)\_s*\zs\u\w*\%(\>\|::\)\@=\%(\s*(\)\@!"
++
++" Comments
++syn match falconCommentSkip contained "^\s*\*\($\|\s\+\)"
++syn region falconComment start="/\*" end="\*/" contains=@falconCommentGroup,falconSpaceError,falconTodo
++syn region falconCommentL start="//" end="$" keepend contains=@falconCommentGroup,falconSpaceError,falconTodo
++syn match falconSharpBang "\%^#!.*" display
++syn sync ccomment falconComment
++
++" Numbers
++syn match falconNumbers transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
++syn match falconNumbersCom contained transparent "\<[+-]\=\d\|[+-]\=\.\d" contains=falconIntLiteral,falconFloatLiteral,falconHexadecimal,falconOctal
++syn match falconHexadecimal contained "\<0x\x\+\>"
++syn match falconOctal contained "\<0\o\+\>"
++syn match falconIntLiteral contained "[+-]\<d\+\(\d\+\)\?\>"
++syn match falconFloatLiteral contained "[+-]\=\d\+\.\d*"
++syn match falconFloatLiteral contained "[+-]\=\d*\.\d*"
++
++" Includes
++syn keyword falconInclude load import
++
++" Expression Substitution and Backslash Notation
++syn match falconStringEscape "\\\\\|\\[abefnrstv]\|\\\o\{1,3}\|\\x\x\{1,2}" contained display
++syn match falconStringEscape "\%(\\M-\\C-\|\\C-\\M-\|\\M-\\c\|\\c\\M-\|\\c\|\\C-\|\\M-\)\%(\\\o\{1,3}\|\\x\x\{1,2}\|\\\=\S\)" contained display
++syn region falconSymbol start="[]})\"':]\@<!:\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
++
++" Normal String and Shell Command Output
++syn region falconString matchgroup=falconStringDelimiter start="\"" end="\"" skip="\\\\\|\\\"" contains=falconStringEscape fold
++syn region falconString matchgroup=falconStringDelimiter start="'" end="'" skip="\\\\\|\\'" fold
++syn region falconString matchgroup=falconStringDelimiter start="`" end="`" skip="\\\\\|\\`" contains=falconStringEscape fold
++
++" Generalized Single Quoted String, Symbol and Array of Strings
++syn region falconString matchgroup=falconStringDelimiter start="%[qw]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)"  end="\z1" skip="\\\\\|\\\z1" fold
++syn region falconString matchgroup=falconStringDelimiter start="%[qw]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
++syn region falconString matchgroup=falconStringDelimiter start="%[qw]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
++syn region falconString matchgroup=falconStringDelimiter start="%[qw]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
++syn region falconString matchgroup=falconStringDelimiter start="%[qw](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
++syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" fold
++syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]{" end="}" skip="\\\\\|\\}" fold contains=falconDelimEscape
++syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]<" end=">" skip="\\\\\|\\>" fold contains=falconDelimEscape
++syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s]\[" end="\]" skip="\\\\\|\\\]" fold contains=falconDelimEscape
++syn region falconSymbol matchgroup=falconSymbolDelimiter start="%[s](" end=")" skip="\\\\\|\\)" fold contains=falconDelimEscape
++
++" Generalized Double Quoted String and Array of Strings and Shell Command Output
++syn region falconString matchgroup=falconStringDelimiter start="%\z([~`!@#$%^&*_\-+|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
++syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\z([~`!@#$%^&*_\-+=|\:;"',.?/]\)" end="\z1" skip="\\\\\|\\\z1" contains=falconStringEscape fold
++syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\={" end="}" skip="\\\\\|\\}" contains=falconStringEscape,falconDelimEscape fold
++syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=<" end=">" skip="\\\\\|\\>" contains=falconStringEscape,falconDelimEscape fold
++syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=\[" end="\]" skip="\\\\\|\\\]" contains=falconStringEscape,falconDelimEscape fold
++syn region falconString matchgroup=falconStringDelimiter start="%[QWx]\=(" end=")" skip="\\\\\|\\)" contains=falconStringEscape,falconDelimEscape fold
++
++syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<\z(\h\w*\)\ze+hs=s+2 matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
++syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<"\z([^"]*\)"\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
++syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<'\z([^']*\)'\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ fold keepend
++syn region falconString start=+\%(\%(class\s*\|\%([]})"'.]\|::\)\)\_s*\|\w\)\@<!<<`\z([^`]*\)`\ze+hs=s+2  matchgroup=falconStringDelimiter end=+^\z1$+ contains=falconStringEscape fold keepend
++
++syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-\z(\h\w*\)\ze+hs=s+3 matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
++syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-"\z([^"]*\)"\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
++syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-'\z([^']*\)'\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ fold keepend
++syn region falconString start=+\%(\%(class\s*\|\%([]}).]\|::\)\)\_s*\|\w\)\@<!<<-`\z([^`]*\)`\ze+hs=s+3  matchgroup=falconStringDelimiter end=+^\s*\zs\z1$+ contains=falconStringEscape fold keepend
++
++" Falcon rainbox to highlight parens in varying colors
++if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
++    syn region falconParen0           matchgroup=hlLevel0 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen1
++    syn region falconParen1 contained matchgroup=hlLevel1 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen2
++    syn region falconParen2 contained matchgroup=hlLevel2 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen3
++    syn region falconParen3 contained matchgroup=hlLevel3 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen4
++    syn region falconParen4 contained matchgroup=hlLevel4 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen5
++    syn region falconParen5 contained matchgroup=hlLevel5 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen6
++    syn region falconParen6 contained matchgroup=hlLevel6 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen7
++    syn region falconParen7 contained matchgroup=hlLevel7 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen8
++    syn region falconParen8 contained matchgroup=hlLevel8 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen9
++    syn region falconParen9 contained matchgroup=hlLevel9 start="`\=(" end=")" skip="|.\{-}|" contains=@falconListCluster,falconParen0
++endif
++
++" Setup the colors for the rainbox
++if exists("g:falcon_rainbow") && g:falcon_rainbow != 0
++    if &bg == "dark"
++        hi def hlLevel0 ctermfg=red         guifg=red1
++        hi def hlLevel1 ctermfg=yellow      guifg=orange1
++        hi def hlLevel2 ctermfg=green       guifg=yellow1
++        hi def hlLevel3 ctermfg=cyan        guifg=greenyellow
++        hi def hlLevel4 ctermfg=magenta     guifg=green1
++        hi def hlLevel5 ctermfg=red         guifg=springgreen1
++        hi def hlLevel6 ctermfg=yellow      guifg=cyan1
++        hi def hlLevel7 ctermfg=green       guifg=slateblue1
++        hi def hlLevel8 ctermfg=cyan        guifg=magenta1
++        hi def hlLevel9 ctermfg=magenta     guifg=purple1
++    else
++        hi def hlLevel0 ctermfg=red         guifg=red3
++        hi def hlLevel1 ctermfg=darkyellow  guifg=orangered3
++        hi def hlLevel2 ctermfg=darkgreen   guifg=orange2
++        hi def hlLevel3 ctermfg=blue        guifg=yellow3
++        hi def hlLevel4 ctermfg=darkmagenta guifg=olivedrab4
++        hi def hlLevel5 ctermfg=red         guifg=green4
++        hi def hlLevel6 ctermfg=darkyellow  guifg=paleturquoise3
++        hi def hlLevel7 ctermfg=darkgreen   guifg=deepskyblue4
++        hi def hlLevel8 ctermfg=blue        guifg=darkslateblue
++        hi def hlLevel9 ctermfg=darkmagenta guifg=darkviolet
++    endif
++endif
++
++" Syntax Synchronizing
++syn sync minlines=10 maxlines=100
++
++" Define the default highlighting
++if !exists("did_falcon_syn_inits")
++    command -nargs=+ HiLink hi def link <args>
++
++    HiLink falconKeyword          Keyword
++    HiLink falconCommentString    String
++    HiLink falconTodo             Todo
++    HiLink falconConditional      Keyword
++    HiLink falconRepeat           Repeat
++    HiLink falconcommentSkip      Comment
++    HiLink falconComment          Comment
++    HiLink falconCommentL         Comment
++    HiLink falconConst            Constant
++    HiLink falconConstants        Constant
++    HiLink falconOperator         Operator
++    HiLink falconSymbol           Normal
++    HiLink falconSpaceError       Error
++    HiLink falconHexadecimal      Number
++    HiLink falconOctal            Number
++    HiLink falconIntLiteral       Number
++    HiLink falconFloatLiteral     Float
++    HiLink falconStringEscape     Special
++    HiLink falconStringDelimiter  Delimiter
++    HiLink falconString           String
++    HiLink falconBool             Constant
++    HiLink falconSharpBang        PreProc
++    HiLink falconInclude          Include
++    HiLink falconSymbol           Constant
++    HiLink falconSymbolOther      Delimiter
++    delcommand HiLink
++endif
++
++let b:current_syntax = "falcon"
++
++" vim: set sw=4 sts=4 et tw=80 :
++
+diff -Naur vim73.orig/runtime/syntax/fasm.vim vim73/runtime/syntax/fasm.vim
+--- vim73.orig/runtime/syntax/fasm.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/fasm.vim	2013-06-07 17:07:22.918943234 +0000
+@@ -1,10 +1,10 @@
+ " Vim syntax file
+ " Language:	Flat Assembler (FASM)
+ " Maintainer:	Ron Aaron <ron@ronware.org>
+-" Last Change:	2004 May 16
++" Last Change:	2012/02/13
+ " Vim URL:	http://www.vim.org/lang.html
+ " FASM Home:	http://flatassembler.net/
+-" FASM Version: 1.52
++" FASM Version: 1.56
+ 
+ if version < 600
+   syntax clear
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ setlocal iskeyword=a-z,A-Z,48-57,.,_
+ setlocal isident=a-z,A-Z,48-57,.,_
+ syn case ignore
+@@ -97,7 +100,7 @@
+ syn keyword fasmDirective	elf entry executable export extern far fixups format gui
+ syn keyword fasmDirective	import label ms mz native near notpageable pe public readable
+ syn keyword fasmDirective	repeat resource section segment shareable stack times
+-syn keyword fasmDirective	use16 use32 virtual wdm writeable
++syn keyword fasmDirective	use16 use32 virtual wdm writable writeable
+ syn keyword fasmOperator 	as at defined eq eqtype from mod on ptr rva used
+ 
+ syn match	fasmNumericOperator	"[+-/*]"
+@@ -142,4 +145,8 @@
+ hi def link	fasmLabel label
+ hi def link	fasmPrefix preproc
+ let b:current_syntax = "fasm"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8 sw=8 :
+diff -Naur vim73.orig/runtime/syntax/forth.vim vim73/runtime/syntax/forth.vim
+--- vim73.orig/runtime/syntax/forth.vim	2010-05-29 12:09:37.000000000 +0000
++++ vim73/runtime/syntax/forth.vim	2013-06-07 17:07:22.985609710 +0000
+@@ -1,13 +1,13 @@
+ " Vim syntax file
+ " Language:    FORTH
+ " Maintainer:  Christian V. J. Brüssow <cvjb@cvjb.de>
+-" Last Change: Di 07 Jul 2009 21:38:45 CEST
++" Last Change: So 27 Mai 2012 15:56:28 CEST
+ " Filenames:   *.fs,*.ft
+ " URL:	       http://www.cvjb.de/comp/vim/forth.vim
+ 
+-" $Id: forth.vim,v 1.12 2008/07/07 21:39:12 bruessow Exp $
++" $Id: forth.vim,v 1.14 2012/05/27 15:57:22 bruessow Exp $
+ 
+-" The list of keywords is incomplete, compared with the offical ANS
++" The list of keywords is incomplete, compared with the official ANS
+ " wordlist. If you use this language, please improve it, and send me
+ " the patches.
+ "
+@@ -17,6 +17,14 @@
+ 
+ " Many Thanks to...
+ "
++" 2012-05-13:
++" Dominique Pellé <dominique dot pelle at gmail dot com> for sending the
++" patch to allow spellchecking of strings, comments, ...
++" 
++" 2012-01-07:
++" Thilo Six <T.Six at gmx dot de> send a patch for cpoptions.
++" See the discussion at http://thread.gmane.org/gmane.editors.vim.devel/32151
++"
+ " 2009-06-28:
+ " Josh Grams send a patch to allow the parenthesis comments at the
+ " beginning of a line. That patch also fixed a typo in one of the
+@@ -40,14 +48,14 @@
+ " Bill McCarthy <WJMc@...> and Ilya Sher <ilya-vim@...>
+ " Who found a bug in the ccomment line in 2004!!!
+ " I'm really very sorry, that it has taken two years to fix that
+-" in the offical version of this file. Shame on me.
++" in the official version of this file. Shame on me.
+ " I think my face will be red the next ten years...
+ "
+ " 2006-05-21:
+ " Thomas E. Vaughan <tevaugha at ball dot com> send me a patch
+ " for the parenthesis comment word, so words with a trailing
+ " parenthesis will not start the highlighting for such comments.
+-" 
++"
+ " 2003-05-10:
+ " Andrew Gaul <andrew at gaul.org> send me a patch for
+ " forthOperators.
+@@ -80,6 +88,9 @@
+     finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Synchronization method
+ syn sync ccomment
+ syn sync maxlines=200
+@@ -125,7 +136,7 @@
+ syn keyword forthOperators 0< 0<= 0<> 0= 0> 0>= < <= <> = > >= U< U<=
+ syn keyword forthOperators U> U>= D0< D0<= D0<> D0= D0> D0>= D< D<= D<>
+ syn keyword forthOperators D= D> D>= DU< DU<= DU> DU>= WITHIN ?NEGATE
+-syn keyword forthOperators ?DNEGATE 
++syn keyword forthOperators ?DNEGATE
+ 
+ " stack manipulations
+ syn keyword forthStack DROP NIP DUP OVER TUCK SWAP ROT -ROT ?DUP PICK ROLL
+@@ -171,7 +182,7 @@
+ syn keyword forthDefine <INTERPRETATION COMPILATION> <COMPILATION ] LASTXT
+ syn keyword forthDefine COMP' POSTPONE, FIND-NAME NAME>INT NAME?INT NAME>COMP
+ syn keyword forthDefine NAME>STRING STATE C; CVARIABLE
+-syn keyword forthDefine , 2, F, C, 
++syn keyword forthDefine , 2, F, C,
+ syn match forthDefine "\[IFDEF]"
+ syn match forthDefine "\[IFUNDEF]"
+ syn match forthDefine "\[THEN]"
+@@ -210,7 +221,7 @@
+ syn region forthCharOps start=+."\s+ skip=+\\"+ end=+"+
+ 
+ " char-number conversion
+-syn keyword forthConversion <<# <# # #> #>> #S (NUMBER) (NUMBER?) CONVERT D>F 
++syn keyword forthConversion <<# <# # #> #>> #S (NUMBER) (NUMBER?) CONVERT D>F
+ syn keyword forthConversion D>S DIGIT DPL F>D HLD HOLD NUMBER S>D SIGN >NUMBER
+ syn keyword forthConversion F>S S>F
+ 
+@@ -225,7 +236,7 @@
+ syn keyword forthVocs VOCABULARY DEFINITIONS
+ 
+ " File keywords
+-syn keyword forthFileMode R/O R/W W/O BIN 
++syn keyword forthFileMode R/O R/W W/O BIN
+ syn keyword forthFileWords OPEN-FILE CREATE-FILE CLOSE-FILE DELETE-FILE
+ syn keyword forthFileWords RENAME-FILE READ-FILE READ-LINE KEY-FILE
+ syn keyword forthFileWords KEY?-FILE WRITE-FILE WRITE-LINE EMIT-FILE
+@@ -249,22 +260,22 @@
+ syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe]\d\+\>'
+ syn match forthFloat '\<-\=\d*[.]\=\d\+[DdEe][-+]\d\+\>'
+ 
+-" XXX If you find this overkill you can remove it. this has to come after the
++" XXX If you find this overkill you can remove it. This has to come after the
+ " highlighting for numbers otherwise it has no effect.
+ syn region forthComment start='0 \[if\]' end='\[endif\]' end='\[then\]' contains=forthTodo
+ 
+ " Strings
+-syn region forthString start=+\.*\"+ end=+"+ end=+$+
++syn region forthString start=+\.*\"+ end=+"+ end=+$+ contains=@Spell
+ " XXX
+-syn region forthString start=+s\"+ end=+"+ end=+$+
+-syn region forthString start=+c\"+ end=+"+ end=+$+
++syn region forthString start=+s\"+ end=+"+ end=+$+ contains=@Spell
++syn region forthString start=+c\"+ end=+"+ end=+$+ contains=@Spell
+ 
+ " Comments
+-syn match forthComment '\\\s.*$' contains=forthTodo,forthSpaceError
+-syn region forthComment start='\\S\s' end='.*' contains=forthTodo,forthSpaceError
+-syn match forthComment '\.(\s[^)]*)' contains=forthTodo,forthSpaceError
+-syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=forthTodo,forthSpaceError
+-syn region forthComment start='/\*' end='\*/' contains=forthTodo,forthSpaceError
++syn match forthComment '\\\s.*$' contains=@Spell,forthTodo,forthSpaceError
++syn region forthComment start='\\S\s' end='.*' contains=@Spell,forthTodo,forthSpaceError
++syn match forthComment '\.(\s[^)]*)' contains=@Spell,forthTodo,forthSpaceError
++syn region forthComment start='\(^\|\s\)\zs(\s' skip='\\)' end=')' contains=@Spell,forthTodo,forthSpaceError
++syn region forthComment start='/\*' end='\*/' contains=@Spell,forthTodo,forthSpaceError
+ 
+ " Include files
+ syn match forthInclude '^INCLUDE\s\+\k\+'
+@@ -288,7 +299,7 @@
+ 	command -nargs=+ HiLink hi def link <args>
+     endif
+ 
+-    " The default methods for highlighting. Can be overriden later.
++    " The default methods for highlighting. Can be overridden later.
+     HiLink forthTodo Todo
+     HiLink forthOperators Operator
+     HiLink forthMath Number
+@@ -331,4 +342,6 @@
+ 
+ let b:current_syntax = "forth"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim:ts=8:sw=4:nocindent:smartindent:
+diff -Naur vim73.orig/runtime/syntax/fortran.vim vim73/runtime/syntax/fortran.vim
+--- vim73.orig/runtime/syntax/fortran.vim	2010-07-22 20:26:18.000000000 +0000
++++ vim73/runtime/syntax/fortran.vim	2013-06-07 17:07:22.998943005 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+-" Language:	Fortran95 (and Fortran90, Fortran77, F and elf90)
+-" Version:	0.89
+-" Last Change:	2010 July 21
++" Language:	Fortran 2008 (and earlier versions: 2003, 95, 90, and 77)
++" Version:	0.94
++" Last Change:	2012 June 18
+ " Maintainer:	Ajit J. Thakkar (ajit AT unb.ca); <http://www.unb.ca/chem/ajit/>
+ " Usage:	For instructions, do :help fortran-syntax from Vim
+ " Credits:
+@@ -11,63 +11,48 @@
+ "  Walter Dieudonné, Alexander Wagner, Roman Bertle, Charles Rendleman,
+ "  Andrew Griffiths, Joe Krahn, and Hendrik Merx.
+ 
+-" For version 5.x: Clear all syntax items
+-" For version 6.x: Quit if a syntax file is already loaded
+-if version < 600
+-  syntax clear
+-elseif exists("b:current_syntax")
++if exists("b:current_syntax")
+   finish
+ endif
+ 
+-" let b:fortran_dialect = fortran_dialect if set correctly by user
+-if exists("fortran_dialect")
+-  if fortran_dialect =~ '\<\(f\(9[05]\|77\)\|elf\|F\)\>'
+-    let b:fortran_dialect = matchstr(fortran_dialect,'\<\(f\(9[05]\|77\)\|elf\|F\)\>')
+-  else
+-    echohl WarningMsg | echo "Unknown value of fortran_dialect" | echohl None
+-    let b:fortran_dialect = "unknown"
+-  endif
+-else
+-  let b:fortran_dialect = "unknown"
+-endif
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+-" fortran_dialect not set or set incorrectly by user,
+-if b:fortran_dialect == "unknown"
+-  " set b:fortran_dialect from directive in first three lines of file
+-  let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
+-  if b:fortran_retype =~ '\<fortran_dialect\s*=\s*F\>'
+-    let b:fortran_dialect = "F"
+-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*elf\>'
+-    let b:fortran_dialect = "elf"
+-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f90\>'
+-    let b:fortran_dialect = "f90"
+-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f95\>'
+-    let b:fortran_dialect = "f95"
+-  elseif b:fortran_retype =~ '\<fortran_dialect\s*=\s*f77\>'
+-    let b:fortran_dialect = "f77"
+-  else
+-    " no directive found, so assume f95
+-    let b:fortran_dialect = "f95"
+-  endif
+-  unlet b:fortran_retype
++" Choose fortran_dialect using the priority:
++" source file directive > buffer-local value > global value > default
++" try using directive in first three lines of file
++let b:fortran_retype = getline(1)." ".getline(2)." ".getline(3)
++if b:fortran_retype =~? '\<fortran_dialect\s*=\s*F\>'
++  let b:fortran_dialect = "F"
++elseif b:fortran_retype =~? '\<fortran_dialect\s*=\s*f08\>'
++  let b:fortran_dialect = "f08"
++elseif !exists("b:fortran_dialect")
++  if exists("g:fortran_dialect") && g:fortran_dialect =~# '\<F\|f08\>'
++    " try global variable
++    let b:fortran_dialect = g:fortran_dialect
++  else         " nothing found, so use default
++    let b:fortran_dialect = "f08"
++  endif
++endif
++unlet! b:fortran_retype
++" make sure buffer-local value is not invalid
++if b:fortran_dialect !~# '\<F\|f08\>'
++  let b:fortran_dialect = "f08"
+ endif
+ 
+ " Choose between fixed and free source form if this hasn't been done yet
+ if !exists("b:fortran_fixed_source")
+-  if b:fortran_dialect == "elf" || b:fortran_dialect == "F"
+-    " elf and F require free source form
++  if b:fortran_dialect == "F"
++    " F requires free source form
+     let b:fortran_fixed_source = 0
+-  elseif b:fortran_dialect == "f77"
+-    " f77 requires fixed source form
+-    let b:fortran_fixed_source = 1
+   elseif exists("fortran_free_source")
+-    " User guarantees free source form for all f90 and f95 files
++    " User guarantees free source form for all fortran files
+     let b:fortran_fixed_source = 0
+   elseif exists("fortran_fixed_source")
+-    " User guarantees fixed source form for all f90 and f95 files
++    " User guarantees fixed source form for all fortran files
+     let b:fortran_fixed_source = 1
+   else
+-    " f90 and f95 allow both fixed and free source form.
++    " Modern fortran still allows both free and fixed source form.
+     " Assume fixed source form unless signs of free source form
+     " are detected in the first five columns of the first s:lmax lines.
+     " Detection becomes more accurate and time-consuming if more lines
+@@ -93,29 +78,18 @@
+ 
+ syn case ignore
+ 
+-if b:fortran_dialect !=? "f77"
+-  if version >= 600
+-    if b:fortran_fixed_source == 1
+-      syn match fortranConstructName	"^\s\{6,}\zs\a\w*\ze\s*:"
+-    else
+-      syn match fortranConstructName	"^\s*\zs\a\w*\ze\s*:"
+-    endif
+-    if exists("fortran_more_precise")
+-      syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
+-      syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
+-      syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
+-    endif
+-  else
+-    if b:fortran_fixed_source == 1
+-      syn match fortranConstructName	"^\s\{6,}\a\w*\s*:"
+-    else
+-      syn match fortranConstructName	"^\s*\a\w*\s*:"
+-    endif
+-  endif
++if b:fortran_fixed_source == 1
++  syn match fortranConstructName	"^\s\{6,}\zs\a\w*\ze\s*:"
++else
++  syn match fortranConstructName	"^\s*\zs\a\w*\ze\s*:"
++endif
++if exists("fortran_more_precise")
++  syn match fortranConstructName "\(\<end\s*do\s\+\)\@<=\a\w*"
++  syn match fortranConstructName "\(\<end\s*if\s\+\)\@<=\a\w*"
++  syn match fortranConstructName "\(\<end\s*select\s\+\)\@<=\a\w*"
+ endif
+ 
+-syn match   fortranUnitHeader	"\<end\>"
+-
++syn match fortranUnitHeader	"\<end\>"
+ syn match fortranType		"\<character\>"
+ syn match fortranType		"\<complex\>"
+ syn match fortranType		"\<integer\>"
+@@ -130,6 +104,7 @@
+ syn keyword fortranKeyword	return stop
+ syn keyword fortranConditional	else then
+ syn match fortranConditional	"\<if\>"
++syn match fortranConditionalOb	"\<if\s*(.*)\s*\d\+\s*,\s*\d\+\s*,\s*\d\+\s*$"
+ syn match fortranRepeat		"\<do\>"
+ 
+ syn keyword fortranTodo		contained todo fixme
+@@ -141,6 +116,7 @@
+ syn match fortranOperator	"\.\s*n\=eqv\s*\."
+ syn match fortranOperator	"\.\s*\(and\|or\|not\)\s*\."
+ syn match fortranOperator	"\(+\|-\|/\|\*\)"
++syn match fortranTypeOb		"\<character\s*\*"
+ 
+ syn match fortranBoolean	"\.\s*\(true\|false\)\s*\."
+ 
+@@ -155,17 +131,17 @@
+ 
+ syn keyword fortranIO		access blank direct exist file fmt form formatted iostat name named nextrec number opened rec recl sequential status unformatted unit
+ 
+-syn keyword fortran66Intrinsic		alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
++syn keyword fortranIntrinsicR		alog alog10 amax0 amax1 amin0 amin1 amod cabs ccos cexp clog csin csqrt dabs dacos dasin datan datan2 dcos dcosh ddim dexp dint dlog dlog10 dmax1 dmin1 dmod dnint dsign dsin dsinh dsqrt dtan dtanh float iabs idim idint idnint ifix isign max0 max1 min0 min1 sngl
+ 
+ " Intrinsics provided by some vendors
+-syn keyword fortranExtraIntrinsic	algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama erf erfc gamma iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
++syn keyword fortranExtraIntrinsic	algama cdabs cdcos cdexp cdlog cdsin cdsqrt cqabs cqcos cqexp cqlog cqsin cqsqrt dcmplx dconjg derf derfc dfloat dgamma dimag dlgama iqint qabs qacos qasin qatan qatan2 qcmplx qconjg qcos qcosh qdim qerf qerfc qexp qgamma qimag qlgama qlog qlog10 qmax1 qmin1 qmod qnint qsign qsin qsinh qsqrt qtan qtanh
+ 
+-syn keyword fortran77Intrinsic	abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
+-syn match fortran77Intrinsic	"\<len\s*[(,]"me=s+3
+-syn match fortran77Intrinsic	"\<real\s*("me=s+4
++syn keyword fortranIntrinsic	abs acos aimag aint anint asin atan atan2 char cmplx conjg cos cosh exp ichar index int log log10 max min nint sign sin sinh sqrt tan tanh
++syn match fortranIntrinsic	"\<len\s*[(,]"me=s+3
++syn match fortranIntrinsic	"\<real\s*("me=s+4
+ syn match fortranType		"\<implicit\s\+real"
+ syn match fortranType		"^\s*real\>"
+-syn match fortran90Intrinsic	"\<logical\s*("me=s+7
++syn match fortranIntrinsic	"\<logical\s*("me=s+7
+ syn match fortranType		"\<implicit\s\+logical"
+ syn match fortranType		"^\s*logical\>"
+ 
+@@ -173,13 +149,13 @@
+ " Integers
+ syn match fortranNumber	display "\<\d\+\(_\a\w*\)\=\>"
+ " floating point number, without a decimal point
+-syn match fortranFloatNoDec	display	"\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
++syn match fortranFloatIll	display	"\<\d\+[deq][-+]\=\d\+\(_\a\w*\)\=\>"
+ " floating point number, starting with a decimal point
+-syn match fortranFloatIniDec	display	"\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
++syn match fortranFloatIll	display	"\.\d\+\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+ " floating point number, no digits after decimal
+-syn match fortranFloatEndDec	display	"\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
++syn match fortranFloatIll	display	"\<\d\+\.\([deq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+ " floating point number, D or Q exponents
+-syn match fortranFloatDExp	display	"\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
++syn match fortranFloatIll	display	"\<\d\+\.\d\+\([dq][-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+ " floating point number
+ syn match fortranFloat	display	"\<\d\+\.\d\+\(e[-+]\=\d\+\)\=\(_\a\w*\)\=\>"
+ " Numbers in formats
+@@ -197,131 +173,131 @@
+ syn match fortranLabelNumber	display	"^   \d\d\=\s"ms=s+3,me=e-1
+ syn match fortranLabelNumber	display	"^    \d\s"ms=s+4,me=e-1
+ 
+-if version >= 600 && exists("fortran_more_precise")
++if exists("fortran_more_precise")
+   " Numbers as targets
+   syn match fortranTarget	display	"\(\<if\s*(.\+)\s*\)\@<=\(\d\+\s*,\s*\)\{2}\d\+\>"
+   syn match fortranTarget	display	"\(\<do\s\+\)\@<=\d\+\>"
+   syn match fortranTarget	display	"\(\<go\s*to\s*(\=\)\@<=\(\d\+\s*,\s*\)*\d\+\>"
+ endif
+ 
+-syn keyword fortranTypeEx	external
+-syn keyword fortranIOEx		format
+-syn match fortranKeywordEx	"\<continue\>"
++syn keyword fortranTypeR	external
++syn keyword fortranIOR		format
++syn match fortranKeywordR	"\<continue\>"
+ syn match fortranKeyword	"^\s*\d\+\s\+continue\>"
+-syn match fortranKeywordEx	"\<go\s*to\>"
+-syn region fortranStringEx	start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
+-syn keyword fortran77IntrinsicEx	dim lge lgt lle llt mod
+-syn keyword fortranKeywordOb	assign pause to
+-
+-if b:fortran_dialect != "f77"
+-
+-  syn match fortranType         "\<type\>"
+-  syn keyword fortranType	none
+-
+-  syn keyword fortranStructure	private public intent optional
+-  syn keyword fortranStructure	pointer target allocatable
+-  syn keyword fortranStorageClass	in out
+-  syn match fortranStorageClass	"\<kind\s*="me=s+4
+-  syn match fortranStorageClass	"\<len\s*="me=s+3
+-
+-  syn match fortranUnitHeader	"\<module\>"
+-  syn keyword fortranUnitHeader	use only contains
+-  syn keyword fortranUnitHeader	result operator assignment
+-  syn match fortranUnitHeader	"\<interface\>"
+-  syn match fortranUnitHeader	"\<recursive\>"
+-  syn keyword fortranKeyword	allocate deallocate nullify cycle exit
+-  syn match fortranConditional	"\<select\>"
+-  syn keyword fortranConditional	case default where elsewhere
+-
+-  syn match fortranOperator	"\(\(>\|<\)=\=\|==\|/=\|=\)"
+-  syn match fortranOperator	"=>"
+-
+-  syn region fortranString	start=+"+ end=+"+	contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
+-  syn keyword fortranIO		pad position action delim readwrite
+-  syn keyword fortranIO		eor advance nml
+-
+-  syn keyword fortran90Intrinsic	adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
+-  syn keyword fortran90Intrinsic	scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
+-  syn match fortran90Intrinsic		"\<not\>\(\s*\.\)\@!"me=s+3
+-  syn match fortran90Intrinsic	"\<kind\>\s*[(,]"me=s+4
+-
+-  syn match  fortranUnitHeader	"\<end\s*function"
+-  syn match  fortranUnitHeader	"\<end\s*interface"
+-  syn match  fortranUnitHeader	"\<end\s*module"
+-  syn match  fortranUnitHeader	"\<end\s*program"
+-  syn match  fortranUnitHeader	"\<end\s*subroutine"
+-  syn match  fortranRepeat	"\<end\s*do"
+-  syn match  fortranConditional	"\<end\s*where"
+-  syn match  fortranConditional	"\<select\s*case"
+-  syn match  fortranConditional	"\<end\s*select"
+-  syn match  fortranType	"\<end\s*type"
+-  syn match  fortranType	"\<in\s*out"
+-
+-  syn keyword fortranUnitHeaderEx	procedure
+-  syn keyword fortranIOEx		namelist
+-  syn keyword fortranConditionalEx	while
+-  syn keyword fortran90IntrinsicEx	achar iachar transfer
++syn match fortranKeyword  	"\<go\s*to\>"
++syn match fortranKeywordDel  	"\<go\s*to\ze\s\+.*,\s*(.*$"
++syn match fortranKeywordOb  	"\<go\s*to\ze\s*(\d\+.*$"
++syn region fortranStringR	start=+'+ end=+'+ contains=fortranContinueMark,fortranLeftMargin,fortranSerialNumber
++syn keyword fortranIntrinsicR	dim lge lgt lle llt mod
++syn keyword fortranKeywordDel	assign pause
++
++syn match fortranType           "\<type\>"
++syn keyword fortranType	        none
++
++syn keyword fortranStructure	private public intent optional
++syn keyword fortranStructure	pointer target allocatable
++syn keyword fortranStorageClass	in out
++syn match fortranStorageClass	"\<kind\s*="me=s+4
++syn match fortranStorageClass	"\<len\s*="me=s+3
++
++syn match fortranUnitHeader	"\<module\>"
++syn keyword fortranUnitHeader	use only contains
++syn keyword fortranUnitHeader	result operator assignment
++syn match fortranUnitHeader	"\<interface\>"
++syn match fortranUnitHeader	"\<recursive\>"
++syn keyword fortranKeyword	allocate deallocate nullify cycle exit
++syn match fortranConditional	"\<select\>"
++syn keyword fortranConditional	case default where elsewhere
++
++syn match fortranOperator	"\(\(>\|<\)=\=\|==\|/=\|=\)"
++syn match fortranOperator	"=>"
++
++syn region fortranString	start=+"+ end=+"+	contains=fortranLeftMargin,fortranContinueMark,fortranSerialNumber
++syn keyword fortranIO		pad position action delim readwrite
++syn keyword fortranIO		eor advance nml
++
++syn keyword fortranIntrinsic	adjustl adjustr all allocated any associated bit_size btest ceiling count cshift date_and_time digits dot_product eoshift epsilon exponent floor fraction huge iand ibclr ibits ibset ieor ior ishft ishftc lbound len_trim matmul maxexponent maxloc maxval merge minexponent minloc minval modulo mvbits nearest pack precision present product radix random_number random_seed range repeat reshape rrspacing
++syn keyword fortranIntrinsic	scale scan selected_int_kind selected_real_kind set_exponent shape size spacing spread sum system_clock tiny transpose trim ubound unpack verify
++syn match fortranIntrinsic		"\<not\>\(\s*\.\)\@!"me=s+3
++syn match fortranIntrinsic	"\<kind\>\s*[(,]"me=s+4
++
++syn match  fortranUnitHeader	"\<end\s*function"
++syn match  fortranUnitHeader	"\<end\s*interface"
++syn match  fortranUnitHeader	"\<end\s*module"
++syn match  fortranUnitHeader	"\<end\s*program"
++syn match  fortranUnitHeader	"\<end\s*subroutine"
++syn match  fortranRepeat	"\<end\s*do"
++syn match  fortranConditional	"\<end\s*where"
++syn match  fortranConditional	"\<select\s*case"
++syn match  fortranConditional	"\<end\s*select"
++syn match  fortranType	"\<end\s*type"
++syn match  fortranType	"\<in\s*out"
++
++syn keyword fortranType	        procedure
++syn match  fortranType	        "\<module\ze\s\+procedure\>"
++syn keyword fortranIOR		namelist
++syn keyword fortranConditionalR	while
++syn keyword fortranIntrinsicR	achar iachar transfer
+ 
+-  syn keyword fortranInclude		include
+-  syn keyword fortran90StorageClassR	sequence
+-endif
++syn keyword fortranInclude		include
++syn keyword fortranStorageClassR	sequence
+ 
+ syn match   fortranConditional	"\<end\s*if"
+ syn match   fortranIO		contains=fortranOperator "\<e\(nd\|rr\)\s*=\s*\d\+"
+ syn match   fortranConditional	"\<else\s*if"
+ 
+-syn keyword fortranUnitHeaderR	entry
++syn keyword fortranUnitHeaderOb	entry
+ syn match fortranTypeR		display "double\s\+precision"
+ syn match fortranTypeR		display "double\s\+complex"
+ syn match fortranUnitHeaderR	display "block\s\+data"
+ syn keyword fortranStorageClassR	common equivalence data
+-syn keyword fortran77IntrinsicR	dble dprod
+-syn match   fortran77OperatorR	"\.\s*[gl][et]\s*\."
+-syn match   fortran77OperatorR	"\.\s*\(eq\|ne\)\s*\."
+-
+-if b:fortran_dialect == "f95" || b:fortran_dialect == "F"
+-  syn keyword fortranRepeat		forall
+-  syn match fortranRepeat		"\<end\s*forall"
+-  syn keyword fortran95Intrinsic	null cpu_time
+-  syn match fortranType			"\<elemental\>"
+-  syn match fortranType			"\<pure\>"
+-  if exists("fortran_more_precise")
+-    syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
+-  endif
++syn keyword fortranIntrinsicR	dble dprod
++syn match   fortranOperatorR	"\.\s*[gl][et]\s*\."
++syn match   fortranOperatorR	"\.\s*\(eq\|ne\)\s*\."
++
++syn keyword fortranRepeat		forall
++syn match fortranRepeat		"\<end\s*forall"
++syn keyword fortranIntrinsic	null cpu_time
++syn match fortranType			"\<elemental\>"
++syn match fortranType			"\<pure\>"
++if exists("fortran_more_precise")
++  syn match fortranConstructName "\(\<end\s*forall\s\+\)\@<=\a\w*\>"
+ endif
+ 
+-if b:fortran_dialect == "f95"
++if b:fortran_dialect == "f08"
+   " F2003
+-  syn keyword fortran03Intrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
++  syn keyword fortranIntrinsic        command_argument_count get_command get_command_argument get_environment_variable is_iostat_end is_iostat_eor move_alloc new_line selected_char_kind same_type_as extends_type_of
+   " ISO_C_binding
+-  syn keyword fortran03Constant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
+-  syn keyword fortran03Constant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
+-  syn keyword fortran03Intrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
+-  syn keyword fortran03Type             c_ptr c_funptr
++  syn keyword fortranConstant         c_null_char c_alert c_backspace c_form_feed c_new_line c_carriage_return c_horizontal_tab c_vertical_tab
++  syn keyword fortranConstant         c_int c_short c_long c_long_long c_signed_char c_size_t c_int8_t c_int16_t c_int32_t c_int64_t c_int_least8_t c_int_least16_t c_int_least32_t c_int_least64_t c_int_fast8_t c_int_fast16_t c_int_fast32_t c_int_fast64_t c_intmax_t C_intptr_t c_float c_double c_long_double c_float_complex c_double_complex c_long_double_complex c_bool c_char c_null_ptr c_null_funptr
++  syn keyword fortranIntrinsic        iso_c_binding c_loc c_funloc c_associated  c_f_pointer c_f_procpointer
++  syn keyword fortranType             c_ptr c_funptr
+   " ISO_Fortran_env
+-  syn keyword fortran03Constant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
++  syn keyword fortranConstant         iso_fortran_env character_storage_size error_unit file_storage_size input_unit iostat_end iostat_eor numeric_storage_size output_unit
+   " IEEE_arithmetic
+-  syn keyword fortran03Intrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
++  syn keyword fortranIntrinsic        ieee_arithmetic ieee_support_underflow_control ieee_get_underflow_mode ieee_set_underflow_mode
+ 
+-  syn keyword fortran03ReadWrite	flush wait
+-  syn keyword fortran03IO	        decimal round iomsg
+-  syn keyword fortran03Type             asynchronous nopass non_overridable pass protected volatile abstract extends import
+-  syn keyword fortran03Type             non_intrinsic value bind deferred generic final enumerator class
+-  syn match fortran03Type               "\<associate\>"
+-  syn match fortran03Type               "\<end\s*associate"
+-  syn match fortran03Type               "\<enum\s*,\s*bind\s*(\s*c\s*)"
+-  syn match fortran03Type               "\<end\s*enum"
+-  syn match fortran03Conditional	"\<select\s*type"
+-  syn match fortran03Conditional        "\<type\s*is\>"
+-  syn match fortran03UnitHeader         "\<abstract\s*interface\>"
+-  syn match fortran03Operator           "\([\|]\)"
++  syn keyword fortranReadWrite	flush wait
++  syn keyword fortranIO 	      decimal round iomsg
++  syn keyword fortranType             asynchronous nopass non_overridable pass protected volatile abstract extends import
++  syn keyword fortranType             non_intrinsic value bind deferred generic final enumerator
++  syn match fortranType               "\<class\>"
++  syn match fortranType               "\<associate\>"
++  syn match fortranType               "\<end\s*associate"
++  syn match fortranType               "\<enum\s*,\s*bind\s*(\s*c\s*)"
++  syn match fortranType               "\<end\s*enum"
++  syn match fortranConditional	"\<select\s*type"
++  syn match fortranConditional        "\<type\s*is\>"
++  syn match fortranConditional        "\<class\s*is\>"
++  syn match fortranUnitHeader         "\<abstract\s*interface\>"
++  syn match fortranOperator           "\([\|]\)"
+ 
+   " F2008
+-  syn keyword fortran08Intrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
+-  syn keyword fortran08Intrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
+-  syn keyword fortran08Intrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
+-  syn keyword fortran08IO               newunit
+-  syn keyword fortran08Type             contiguous
++  syn keyword fortranIntrinsic        acosh asinh atanh bessel_j0 bessel_j1 bessel_jn bessel_y0 bessel_y1 bessel_yn erf erfc erfc_scaled gamma log_gamma hypot norm2
++  syn keyword fortranIntrinsic        atomic_define atomic_ref execute_command_line leadz trailz storage_size merge_bits
++  syn keyword fortranIntrinsic        bge bgt ble blt dshiftl dshiftr findloc iall iany iparity image_index lcobound ucobound maskl maskr num_images parity popcnt poppar shifta shiftl shiftr this_image
++  syn keyword fortranIO               newunit
++  syn keyword fortranType             contiguous
+ endif
+ 
+ syn cluster fortranCommentGroup contains=fortranTodo
+@@ -341,9 +317,7 @@
+   syn match fortranContinueMark		display "&"
+ endif
+ 
+-if b:fortran_dialect != "f77"
+-  syn match fortranComment	excludenl "!.*$" contains=@fortranCommentGroup,@spell
+-endif
++syn match fortranComment	excludenl "!.*$" contains=@fortranCommentGroup,@spell
+ 
+ "cpp is often used with Fortran
+ syn match	cPreProc		"^\s*#\s*\(define\|ifdef\)\>.*"
+@@ -363,7 +337,7 @@
+   syn sync minlines=30
+ endif
+ 
+-if version >= 600 && exists("fortran_fold")
++if exists("fortran_fold")
+ 
+   if (b:fortran_fixed_source == 1)
+     syn region fortranProgram transparent fold keepend start="^\s*program\s\+\z(\a\w*\)" skip="^\([!c*]\|\s*#\).*$" excludenl end="\<end\s*\(program\(\s\+\z1\>\)\=\|$\)" contains=ALLBUT,fortranModule
+@@ -407,134 +381,95 @@
+ endif
+ 
+ " Define the default highlighting.
+-" For version 5.7 and earlier: only when not done already
+-" For version 5.8 and later: only when an item doesn't have highlighting yet
+-if version >= 508 || !exists("did_fortran_syn_inits")
+-  if version < 508
+-    let did_fortran_syn_inits = 1
+-    command -nargs=+ HiLink hi link <args>
+-  else
+-    command -nargs=+ HiLink hi def link <args>
+-  endif
+-
+-  " The default highlighting differs for each dialect.
+-  " Transparent groups:
+-  " fortranParen, fortranLeftMargin
+-  " fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
+-  " fortranBlockData
+-  " fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
+-  " fortranMultiCommentLines
+-  HiLink fortranKeyword 	Keyword
+-  HiLink fortranConstructName	Identifier
+-  HiLink fortran03Conditional	fortranConditional
+-  HiLink fortranConditional	Conditional
+-  HiLink fortranRepeat		Repeat
+-  HiLink fortranTodo		Todo
+-  if (b:fortran_fixed_source == 1)
+-    HiLink fortranContinueMark	Todo
+-  else
+-    HiLink fortranContinueMark	Keyword
+-  endif
+-  HiLink fortranString		String
+-  HiLink fortranNumber		Number
+-  HiLink fortran03Operator	fortranOperator
+-  HiLink fortranOperator	Operator
+-  HiLink fortranBoolean		Boolean
+-  HiLink fortranLabelError	Error
+-  HiLink fortranObsolete	Todo
+-  HiLink fortran03Type  	fortranType
+-  HiLink fortran08Type	        fortranType
+-  HiLink fortranType		Type
+-  HiLink fortranStructure	Type
+-  HiLink fortranStorageClass	StorageClass
+-  HiLink fortranCall		Function
+-  HiLink fortran03UnitHeader	fortranUnitHeader
+-  HiLink fortranUnitHeader	fortranPreCondit
+-  HiLink fortran03ReadWrite	fortranReadWrite
+-  HiLink fortranReadWrite	Keyword
+-  HiLink fortran03IO		fortranIO
+-  HiLink fortran08IO		fortranIO
+-  HiLink fortranIO		Keyword
+-  HiLink fortran95Intrinsic	fortran90Intrinsic
+-  HiLink fortran77Intrinsic	fortran90Intrinsic
+-  HiLink fortran90Intrinsic	Function
+-  HiLink fortran03Intrinsic	Function
+-  HiLink fortran08Intrinsic	Function
+-  HiLink fortran03Constant	Function
+-
+-  if ( b:fortran_dialect == "elf" || b:fortran_dialect == "F" )
+-    HiLink fortranKeywordOb	fortranObsolete
+-    HiLink fortran66Intrinsic	fortranObsolete
+-    HiLink fortran77IntrinsicR	fortranObsolete
+-    HiLink fortranUnitHeaderR	fortranObsolete
+-    HiLink fortranTypeR		fortranObsolete
+-    HiLink fortranStorageClassR	fortranObsolete
+-    HiLink fortran90StorageClassR	fortranObsolete
+-    HiLink fortran77OperatorR	fortranObsolete
+-    HiLink fortranInclude	fortranObsolete
+-  else
+-    HiLink fortranKeywordOb	fortranKeyword
+-    HiLink fortran66Intrinsic	fortran90Intrinsic
+-    HiLink fortran77IntrinsicR	fortran90Intrinsic
+-    HiLink fortranUnitHeaderR	fortranPreCondit
+-    HiLink fortranTypeR		fortranType
+-    HiLink fortranStorageClassR	fortranStorageClass
+-    HiLink fortran77OperatorR	fortranOperator
+-    HiLink fortranInclude	Include
+-    HiLink fortran90StorageClassR	fortranStorageClass
+-  endif
+-
+-  if ( b:fortran_dialect == "F" )
+-    HiLink fortranLabelNumber	fortranObsolete
+-    HiLink fortranTarget	fortranObsolete
+-    HiLink fortranFormatSpec	fortranObsolete
+-    HiLink fortranFloatDExp	fortranObsolete
+-    HiLink fortranFloatNoDec	fortranObsolete
+-    HiLink fortranFloatIniDec	fortranObsolete
+-    HiLink fortranFloatEndDec	fortranObsolete
+-    HiLink fortranTypeEx	fortranObsolete
+-    HiLink fortranIOEx		fortranObsolete
+-    HiLink fortranKeywordEx	fortranObsolete
+-    HiLink fortranStringEx	fortranObsolete
+-    HiLink fortran77IntrinsicEx	fortranObsolete
+-    HiLink fortranUnitHeaderEx	fortranObsolete
+-    HiLink fortranConditionalEx	fortranObsolete
+-    HiLink fortran90IntrinsicEx	fortranObsolete
+-  else
+-    HiLink fortranLabelNumber	Special
+-    HiLink fortranTarget	Special
+-    HiLink fortranFormatSpec	Identifier
+-    HiLink fortranFloatDExp	fortranFloat
+-    HiLink fortranFloatNoDec	fortranFloat
+-    HiLink fortranFloatIniDec	fortranFloat
+-    HiLink fortranFloatEndDec	fortranFloat
+-    HiLink fortranTypeEx	fortranType
+-    HiLink fortranIOEx		fortranIO
+-    HiLink fortranKeywordEx	fortranKeyword
+-    HiLink fortranStringEx	fortranString
+-    HiLink fortran77IntrinsicEx	fortran90Intrinsic
+-    HiLink fortranUnitHeaderEx	fortranUnitHeader
+-    HiLink fortranConditionalEx	fortranConditional
+-    HiLink fortran90IntrinsicEx	fortran90Intrinsic
+-  endif
+-
+-  HiLink fortranFloat		Float
+-  HiLink fortranPreCondit	PreCondit
+-  HiLink fortranInclude		Include
+-  HiLink cIncluded		fortranString
+-  HiLink cInclude		Include
+-  HiLink cPreProc		PreProc
+-  HiLink cPreCondit		PreCondit
+-  HiLink fortranParenError	Error
+-  HiLink fortranComment		Comment
+-  HiLink fortranSerialNumber	Todo
+-  HiLink fortranTab		Error
+-  " Vendor extensions
+-  HiLink fortranExtraIntrinsic	Function
++" The default highlighting differs for each dialect.
++" Transparent groups:
++" fortranParen, fortranLeftMargin
++" fortranProgram, fortranModule, fortranSubroutine, fortranFunction,
++" fortranBlockData
++" fortran77Loop, fortran90Loop, fortranIfBlock, fortranCase
++" fortranMultiCommentLines
++hi def link fortranKeyword 	Keyword
++hi def link fortranConstructName	Identifier
++hi def link fortranConditional	Conditional
++hi def link fortranRepeat	Repeat
++hi def link fortranTodo		Todo
++hi def link fortranContinueMark	Special
++hi def link fortranString	String
++hi def link fortranNumber	Number
++hi def link fortranOperator	Operator
++hi def link fortranBoolean	Boolean
++hi def link fortranLabelError	Error
++hi def link fortranObsolete	Todo
++hi def link fortranType		Type
++hi def link fortranStructure	Type
++hi def link fortranStorageClass	StorageClass
++hi def link fortranCall		Function
++hi def link fortranUnitHeader	fortranPreCondit
++hi def link fortranReadWrite	Keyword
++hi def link fortranIO		Keyword
++hi def link fortranIntrinsic	Function
++hi def link fortranConstant	Constant
++
++" To stop deleted & obsolescent features being highlighted as Todo items,
++" comment out the next 5 lines and uncomment the 5 lines after that
++hi def link fortranUnitHeaderOb    fortranObsolete
++hi def link fortranKeywordOb       fortranObsolete
++hi def link fortranConditionalOb   fortranObsolete
++hi def link fortranTypeOb          fortranObsolete
++hi def link fortranKeywordDel      fortranObsolete
++"hi def link fortranUnitHeaderOb    fortranUnitHeader
++"hi def link fortranKeywordOb       fortranKeyword
++"hi def link fortranConditionalOb   fortranConditional
++"hi def link fortranTypeOb          fortranType
++"hi def link fortranKeywordDel      fortranKeyword
++
++if b:fortran_dialect == "F"
++  hi! def link fortranIntrinsicR	fortranObsolete
++  hi! def link fortranUnitHeaderR	fortranObsolete
++  hi! def link fortranTypeR		fortranObsolete
++  hi! def link fortranStorageClassR	fortranObsolete
++  hi! def link fortranOperatorR 	fortranObsolete
++  hi! def link fortranInclude   	fortranObsolete
++  hi! def link fortranLabelNumber	fortranObsolete
++  hi! def link fortranTarget	        fortranObsolete
++  hi! def link fortranFloatIll	        fortranObsolete
++  hi! def link fortranIOR		fortranObsolete
++  hi! def link fortranKeywordR	        fortranObsolete
++  hi! def link fortranStringR	        fortranObsolete
++  hi! def link fortranConditionalR	fortranObsolete
++else
++  hi! def link fortranIntrinsicR	fortranIntrinsic
++  hi! def link fortranUnitHeaderR	fortranPreCondit
++  hi! def link fortranTypeR		fortranType
++  hi! def link fortranStorageClassR	fortranStorageClass
++  hi! def link fortranOperatorR	        fortranOperator
++  hi! def link fortranInclude	        Include
++  hi! def link fortranLabelNumber	Special
++  hi! def link fortranTarget	        Special
++  hi! def link fortranFloatIll	        fortranFloat
++  hi! def link fortranIOR		fortranIO
++  hi! def link fortranKeywordR	        fortranKeyword
++  hi! def link fortranStringR	        fortranString
++  hi! def link fortranConditionalR	fortranConditional
++endif
++
++hi def link fortranFormatSpec	Identifier
++hi def link fortranFloat	Float
++hi def link fortranPreCondit	PreCondit
++hi def link cIncluded		fortranString
++hi def link cInclude		Include
++hi def link cPreProc		PreProc
++hi def link cPreCondit		PreCondit
++hi def link fortranParenError	Error
++hi def link fortranComment	Comment
++hi def link fortranSerialNumber	Todo
++hi def link fortranTab		Error
+ 
+-  delcommand HiLink
+-endif
++" Uncomment the next line if you use extra intrinsics provided by vendors
++"hi def link fortranExtraIntrinsic	Function
+ 
+ let b:current_syntax = "fortran"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8 tw=132
+diff -Naur vim73.orig/runtime/syntax/fstab.vim vim73/runtime/syntax/fstab.vim
+--- vim73.orig/runtime/syntax/fstab.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/fstab.vim	2013-06-07 17:07:23.048942863 +0000
+@@ -1,9 +1,9 @@
+ " Vim syntax file
+ " Language: fstab file
+-" Maintaner: Radu Dineiu <radu.dineiu@gmail.com>
+-" URL: http://ld.yi.org/vim/fstab.vim
+-" Last Change: 2009 Feb 04
+-" Version: 0.93
++" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
++" URL: https://raw.github.com/rid9/vim-fstab/master/fstab.vim
++" Last Change: 2013 May 21
++" Version: 1.0
+ "
+ " Credits:
+ "   David Necas (Yeti) <yeti@physics.muni.cz>
+@@ -11,10 +11,13 @@
+ "   Georgi Georgiev <chutz@gg3.net>
+ "   James Vega <jamessan@debian.org>
+ "   Elias Probst <mail@eliasprobst.eu>
+-"
++
+ " Options:
+ "   let fstab_unknown_fs_errors = 1
+ "     highlight unknown filesystems as errors
++"
++"   let fstab_unknown_device_errors = 0
++"     do not highlight unknown devices as errors
+ 
+ if version < 600
+ 	syntax clear
+@@ -22,15 +25,18 @@
+ 	finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " General
+ syn cluster fsGeneralCluster contains=fsComment
+-syn match fsComment /\s*#.*/
++syn match fsComment /\s*#.*/ contains=@Spell
+ syn match fsOperator /[,=:#]/
+ 
+ " Device
+ syn cluster fsDeviceCluster contains=fsOperator,fsDeviceKeyword,fsDeviceError
+ syn match fsDeviceError /\%([^a-zA-Z0-9_\/#@:\.-]\|^\w\{-}\ze\W\)/ contained
+-syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts sysfs usbfs
++syn keyword fsDeviceKeyword contained none proc linproc tmpfs devpts devtmpfs sysfs usbfs
+ syn keyword fsDeviceKeyword contained LABEL nextgroup=fsDeviceLabel
+ syn keyword fsDeviceKeyword contained UUID nextgroup=fsDeviceUUID
+ syn keyword fsDeviceKeyword contained sshfs nextgroup=fsDeviceSshfs
+@@ -47,7 +53,7 @@
+ " Type
+ syn cluster fsTypeCluster contains=fsTypeKeyword,fsTypeUnknown
+ syn match fsTypeUnknown /\s\+\zs\w\+/ contained
+-syn keyword fsTypeKeyword contained adfs ados affs atfs audiofs auto autofs befs bfs cd9660 cfs cifs coda cramfs devfs devpts e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse hfs hpfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix msdos ncpfs nfs none ntfs null nwfs overlay ovlfs portal proc procfs ptyfs qnx4 reiserfs romfs shm smbfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xfs zisofs
++syn keyword fsTypeKeyword contained adfs ados affs anon_inodefs atfs audiofs auto autofs bdev befs bfs btrfs binfmt_misc cd9660 cfs cgroup cifs coda configfs cpuset cramfs devfs devpts devtmpfs e2compr efs ext2 ext2fs ext3 ext4 fdesc ffs filecore fuse fuseblk fusectl hfs hpfs hugetlbfs iso9660 jffs jffs2 jfs kernfs lfs linprocfs mfs minix mqueue msdos ncpfs nfs nfsd nilfs2 none ntfs null nwfs overlay ovlfs pipefs portal proc procfs pstore ptyfs qnx4 reiserfs ramfs romfs securityfs shm smbfs squashfs sockfs sshfs std subfs swap sysfs sysv tcfs tmpfs udf ufs umap umsdos union usbfs userfs vfat vs3fs vxfs wrapfs wvfs xenfs xfs zisofs
+ 
+ " Options
+ " -------
+@@ -71,6 +77,11 @@
+ syn match fsOptionsKeywords contained /\<bs=/ nextgroup=fsOptionsSize
+ syn keyword fsOptionsKeywords contained protect usemp verbose
+ 
++" Options: btrfs
++syn match fsOptionsKeywords contained /\<\%(subvol\|subvolid\|subvolrootid\|device\|compress\|compress-force\|fatal_errors\)=/ nextgroup=fsOptionsString
++syn match fsOptionsKeywords contained /\<\%(max_inline\|alloc_start\|thread_pool\|metadata_ratio\|check_int_print_mask\)=/ nextgroup=fsOptionsNumber
++syn keyword fsOptionsKeywords contained degraded nodatasum nodatacow nobarrier ssd ssd_spread noacl notreelog flushoncommit space_cache nospace_cache clear_cache user_subvol_rm_allowed autodefrag inode_cache enospc_debug recovery check_int check_int_data skip_balance discard
++
+ " Options: cd9660
+ syn keyword fsOptionsKeywords contained extatt gens norrip nostrictjoilet
+ 
+@@ -84,7 +95,7 @@
+ syn keyword fsOptionsExt2Check contained none normal strict
+ syn keyword fsOptionsExt2Errors contained continue panic
+ syn match fsOptionsExt2Errors contained /\<remount-ro\>/
+-syn keyword fsOptionsKeywords contained acl bsddf minixdf debug grpid bsdgroups minixdf noacl nocheck nogrpid oldalloc orlov sysvgroups nouid32 nobh user_xattr nouser_xattr
++syn keyword fsOptionsKeywords contained acl bsddf minixdf debug grpid bsdgroups minixdf nocheck nogrpid oldalloc orlov sysvgroups nouid32 nobh user_xattr nouser_xattr
+ 
+ " Options: ext3
+ syn match fsOptionsKeywords contained /\<journal=/ nextgroup=fsOptionsExt3Journal
+@@ -92,7 +103,7 @@
+ syn match fsOptionsKeywords contained /\<commit=/ nextgroup=fsOptionsNumber
+ syn keyword fsOptionsExt3Journal contained update inum
+ syn keyword fsOptionsExt3Data contained journal ordered writeback
+-syn keyword fsOptionsKeywords contained noload user_xattr nouser_xattr acl noacl
++syn keyword fsOptionsKeywords contained noload user_xattr nouser_xattr acl
+ 
+ " Options: ext4
+ syn match fsOptionsKeywords contained /\<journal=/ nextgroup=fsOptionsExt4Journal
+@@ -216,7 +227,7 @@
+ syn match fsFreqPass /\s\+.\{-}$/ contains=@fsFreqPassCluster,@fsGeneralCluster contained
+ 
+ " Whole line comments
+-syn match fsCommentLine /^#.*$/
++syn match fsCommentLine /^#.*$/ contains=@Spell
+ 
+ if version >= 508 || !exists("did_config_syntax_inits")
+ 	if version < 508
+@@ -241,7 +252,10 @@
+ 		HiLink fsTypeUnknown Error
+ 	endif
+ 
+-	HiLink fsDeviceError Error
++	if !exists('fstab_unknown_device_errors') || fstab_unknown_device_errors == 1
++		HiLink fsDeviceError Error
++	endif
++
+ 	HiLink fsMountPointError Error
+ 	HiLink fsMountPointKeyword Keyword
+ 	HiLink fsFreqPassError Error
+@@ -277,4 +291,7 @@
+ 
+ let b:current_syntax = "fstab"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8 ft=vim
+diff -Naur vim73.orig/runtime/syntax/fvwm.vim vim73/runtime/syntax/fvwm.vim
+--- vim73.orig/runtime/syntax/fvwm.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/fvwm.vim	2013-06-07 17:07:23.065609482 +0000
+@@ -12,6 +12,8 @@
+ if exists("b:current_syntax")
+     finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Fvwm configuration files are case insensitive
+ syn case ignore
+@@ -635,3 +637,6 @@
+ hi def link fvwmModuleName	Function
+ 
+ let b:current_syntax = "fvwm"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/syntax/gdb.vim vim73/runtime/syntax/gdb.vim
+--- vim73.orig/runtime/syntax/gdb.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/gdb.vim	2013-06-07 17:07:23.085609425 +0000
+@@ -2,7 +2,7 @@
+ " Language:	GDB command files
+ " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
+ " URL:		http://www.fleiner.com/vim/syntax/gdb.vim
+-" Last Change:	2009 May 25
++" Last Change:	2012 Oct 05
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn keyword gdbInfo contained address architecture args breakpoints catch common copying dcache
+ syn keyword gdbInfo contained display files float frame functions handle line
+ syn keyword gdbInfo contained locals program registers scope set sharedlibrary signals
+@@ -32,7 +35,7 @@
+ syn match gdbStatmentContainer "^\s*\S\+" contains=gdbStatement,gdbFuncDef
+ syn match gdbStatement "^\s*info" nextgroup=gdbInfo skipwhite skipempty
+ 
+-" some commonly used abreviations
++" some commonly used abbreviations
+ syn keyword gdbStatement c disp undisp disas p
+ 
+ syn region gdbDocument matchgroup=gdbFuncDef start="\<document\>.*$" matchgroup=gdbFuncDef end="^end\s*$"
+@@ -65,12 +68,12 @@
+ syn match gdbSet "\<demangle-style\>"
+ syn match gdbSet "\<output-radix\>"
+ 
+-syn match gdbComment "^\s*#.*"
++syn match gdbComment "^\s*#.*" contains=@Spell
+ 
+ syn match gdbVariable "\$\K\k*"
+ 
+ " Strings and constants
+-syn region  gdbString		start=+"+  skip=+\\\\\|\\"+  end=+"+
++syn region  gdbString		start=+"+  skip=+\\\\\|\\"+  end=+"+ contains=@Spell
+ syn match   gdbCharacter	"'[^']*'" contains=gdbSpecialChar,gdbSpecialCharError
+ syn match   gdbCharacter	"'\\''" contains=gdbSpecialChar
+ syn match   gdbCharacter	"'[^\\]'"
+@@ -108,4 +111,6 @@
+ 
+ let b:current_syntax = "gdb"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/gdmo.vim vim73/runtime/syntax/gdmo.vim
+--- vim73.orig/runtime/syntax/gdmo.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/gdmo.vim	2013-06-07 17:07:23.105609367 +0000
+@@ -1,9 +1,9 @@
+ " Vim syntax file
+ " Language:	GDMO
+ "		(ISO-10165-4; Guidelines for the Definition of Managed Object)
+-" Maintainer:	Gyuman Kim <violino@dooly.modacom.co.kr>
+-" URL:		http://dooly.modacom.co.kr/gdmo.vim
+-" Last change:	2001 Sep 02
++" Maintainer:	Gyuman (Chester) Kim <violkim@gmail.com>
++" URL:		http://classicalprogrammer.wikidot.com/local--files/vim-syntax-file-for-gdmo/gdmo.vim
++" Last change:	8th June, 2011
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+diff -Naur vim73.orig/runtime/syntax/gitcommit.vim vim73/runtime/syntax/gitcommit.vim
+--- vim73.orig/runtime/syntax/gitcommit.vim	2010-05-21 09:39:11.000000000 +0000
++++ vim73/runtime/syntax/gitcommit.vim	2013-06-07 17:07:23.125609310 +0000
+@@ -2,7 +2,7 @@
+ " Language:	git commit file
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+ " Filenames:	*.git/COMMIT_EDITMSG
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -16,7 +16,7 @@
+ endif
+ 
+ syn include @gitcommitDiff syntax/diff.vim
+-syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^$\|^#\@=/ contains=@gitcommitDiff
++syn region gitcommitDiff start=/\%(^diff --\%(git\|cc\|combined\) \)\@=/ end=/^\%(diff --\|$\|#\)\@=/ fold contains=@gitcommitDiff
+ 
+ syn match   gitcommitFirstLine	"\%^[^#].*"  nextgroup=gitcommitBlank skipnl
+ syn match   gitcommitSummary	"^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow contains=@Spell
+@@ -26,7 +26,7 @@
+ syn match   gitcommitHead	"^\%(#   .*\n\)\+#$" contained transparent
+ syn match   gitcommitOnBranch	"\%(^# \)\@<=On branch" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
+ syn match   gitcommitOnBranch	"\%(^# \)\@<=Your branch .\{-\} '" contained containedin=gitcommitComment nextgroup=gitcommitBranch skipwhite
+-syn match   gitcommitBranch	"[^ \t']\+" contained
++syn match   gitcommitBranch	"[^ ']\+" contained
+ syn match   gitcommitNoBranch	"\%(^# \)\@<=Not currently on any branch." contained containedin=gitcommitComment
+ syn match   gitcommitHeader	"\%(^# \)\@<=.*:$"	contained containedin=gitcommitComment
+ syn region  gitcommitAuthor	matchgroup=gitCommitHeader start=/\%(^# \)\@<=\%(Author\|Committer\):/ end=/$/ keepend oneline contained containedin=gitcommitComment transparent
+@@ -35,7 +35,7 @@
+ syn region  gitcommitUntracked	start=/^# Untracked files:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUntrackedFile fold
+ syn match   gitcommitUntrackedFile  "\t\@<=.*"	contained
+ 
+-syn region  gitcommitDiscarded	start=/^# Changed but not updated:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
++syn region  gitcommitDiscarded	start=/^# Change\%(s not staged for commit\|d but not updated\):/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitDiscardedType fold
+ syn region  gitcommitSelected	start=/^# Changes to be committed:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitSelectedType fold
+ syn region  gitcommitUnmerged	start=/^# Unmerged paths:/ end=/^#$\|^#\@!/ contains=gitcommitHeader,gitcommitHead,gitcommitUnmergedType fold
+ 
+diff -Naur vim73.orig/runtime/syntax/gitolite.vim vim73/runtime/syntax/gitolite.vim
+--- vim73.orig/runtime/syntax/gitolite.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/gitolite.vim	2013-06-07 17:07:23.145609253 +0000
+@@ -0,0 +1,86 @@
++" Vim syntax file
++" Language:	gitolite configuration
++" URL:		https://github.com/tmatilai/gitolite.vim
++" Maintainer:	Teemu Matilainen <teemu.matilainen@iki.fi>
++" Last Change:	2011-12-25
++
++if exists("b:current_syntax")
++  finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++" Comment
++syn match	gitoliteComment		"\(^\|\s\)#.*" contains=gitoliteTodo
++syn keyword	gitoliteTodo		TODO FIXME XXX NOT contained
++
++" Groups, users and repos
++syn match	gitoliteGroupDef	"\(^\s*\)\@<=@[^=]\{-1,}\(\s*=\)\@=" contains=gitoliteSpaceError,gitoliteUserError nextgroup=gitoliteGroupDefSep
++syn match	gitoliteGroupDefSep	"\s*=" contained nextgroup=gitoliteRepoLine
++syn match	gitoliteRepoDef		"^\s*repo\s" nextgroup=gitoliteRepoLine
++
++syn match	gitoliteRepoLine	".*" contained transparent contains=gitoliteGroup,gitoliteWildRepo,gitoliteCreator,gitoliteExtCmdHelper,gitoliteRepoError,gitoliteComment
++syn match	gitoliteUserLine	".*" contained transparent contains=gitoliteGroup,gitolitePreProc,gitoliteUserError,gitoliteComment
++
++syn match	gitoliteWildRepo	"[ \t=]\@<=[^ \t]*[\\^$|()[\]*?{},][^ \t]*" contained contains=gitoliteCreator,gitoliteRepoError
++syn match	gitoliteGroup		"[ \t=]\@<=@[^ \t]\+" contained contains=gitoliteUserError
++
++syn keyword	gitoliteCreator		CREATER CREATOR contained
++syn keyword	gitolitePreProc		CREATER CREATOR READERS WRITERS contained
++
++syn match	gitoliteExtCmdHelper	"[ \t=]\@<=EXTCMD/" contained nextgroup=gitoliteExtCmd
++syn match	gitoliteExtCmd		"rsync\(\s\|$\)" contained
++
++" Illegal characters
++syn match	gitoliteRepoError	"[^ \t0-9a-zA-Z._@+/\\^$|()[\]*?{},-]\+" contained
++syn match	gitoliteUserError	"[^ \t0-9a-zA-Z._@+-]\+" contained
++syn match	gitoliteSpaceError	"\s\+" contained
++
++" Permission
++syn match	gitoliteKeyword		"^\s*\(C\|R\|RW\|RW+\|RWC\|RW+C\|RWD\|RW+D\|RWCD\|RW+CD\)[ \t=]\@=" nextgroup=gitoliteRefex
++syn match	gitoliteKeyword		"^\s*-[ \t=]\@=" nextgroup=gitoliteDenyRefex
++syn match	gitoliteRefex		"[^=]*="he=e-1 contained contains=gitoliteSpecialRefex,gitoliteGroup nextgroup=gitoliteUserLine
++syn match	gitoliteDenyRefex	"[^=]*="he=e-1 contained contains=gitoliteSpecialRefex,gitoliteGroup nextgroup=gitoliteDenyUsers
++syn match	gitoliteSpecialRefex	"\sNAME/"he=e-1 contained
++syn match	gitoliteSpecialRefex	"/USER/"hs=s+1,he=e-1 contained
++syn match	gitoliteDenyUsers	".*" contained contains=gitoliteUserError,gitoliteComment
++
++" Configuration
++syn match	gitoliteKeyword		"^\s*config\s\+" nextgroup=gitoliteConfVariable
++syn match	gitoliteConfVariable	"[^=]*" contained
++
++" Include
++syn match	gitoliteInclude		"^\s*\(include\|subconf\)\s"
++
++" String
++syn region	gitoliteString		start=+"+ end=+"+ oneline
++
++" Define the default highlighting
++hi def link gitoliteComment		Comment
++hi def link gitoliteTodo		Todo
++hi def link gitoliteGroupDef		gitoliteGroup
++hi def link gitoliteGroup		Identifier
++hi def link gitoliteWildRepo		Special
++hi def link gitoliteRepoError		gitoliteError
++hi def link gitoliteUserError		gitoliteError
++hi def link gitoliteSpaceError		gitoliteError
++hi def link gitoliteError		Error
++hi def link gitoliteCreator		gitolitePreProc
++hi def link gitolitePreProc		PreProc
++hi def link gitoliteExtCmdHelper	PreProc
++hi def link gitoliteExtCmd		Special
++hi def link gitoliteRepoDef		Type
++hi def link gitoliteKeyword		Keyword
++hi def link gitoliteRefex		String
++hi def link gitoliteDenyRefex		gitoliteRefex
++hi def link gitoliteSpecialRefex	PreProc
++hi def link gitoliteDenyUsers		WarningMsg
++hi def link gitoliteConfVariable	Identifier
++hi def link gitoliteInclude		Include
++hi def link gitoliteString		String
++
++let b:current_syntax = "gitolite"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/gitrebase.vim vim73/runtime/syntax/gitrebase.vim
+--- vim73.orig/runtime/syntax/gitrebase.vim	2010-05-21 09:41:12.000000000 +0000
++++ vim73/runtime/syntax/gitrebase.vim	2013-06-07 17:07:23.148942577 +0000
+@@ -2,7 +2,7 @@
+ " Language:	git rebase --interactive
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+ " Filenames:	git-rebase-todo
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -17,7 +17,9 @@
+ syn match   gitrebaseEdit   "\v^e%(dit)=>"   nextgroup=gitrebaseCommit skipwhite
+ syn match   gitrebaseSquash "\v^s%(quash)=>" nextgroup=gitrebaseCommit skipwhite
+ syn match   gitrebaseFixup  "\v^f%(ixup)=>"  nextgroup=gitrebaseCommit skipwhite
++syn match   gitrebaseExec   "\v^%(x|exec)>" nextgroup=gitrebaseCommand skipwhite
+ syn match   gitrebaseSummary ".*"               contains=gitrebaseHash contained
++syn match   gitrebaseCommand ".*"                                      contained
+ syn match   gitrebaseComment "^#.*"             contains=gitrebaseHash
+ syn match   gitrebaseSquashError "\v%^%(s%(quash)=>|f%(ixup)=>)" nextgroup=gitrebaseCommit skipwhite
+ 
+@@ -28,6 +30,7 @@
+ hi def link gitrebaseEdit           PreProc
+ hi def link gitrebaseSquash         Type
+ hi def link gitrebaseFixup          Special
++hi def link gitrebaseExec           Function
+ hi def link gitrebaseSummary        String
+ hi def link gitrebaseComment        Comment
+ hi def link gitrebaseSquashError    Error
+diff -Naur vim73.orig/runtime/syntax/gnash.vim vim73/runtime/syntax/gnash.vim
+--- vim73.orig/runtime/syntax/gnash.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/gnash.vim	2013-06-07 17:07:23.172275844 +0000
+@@ -0,0 +1,99 @@
++" Vim syntax file
++" Maintainer: 	Thilo Six
++" Contact:	<vim-dev at vim dot org>
++"		http://www.vim.org/maillist.php#vim-dev
++"
++" Description: 	highlight gnash configuration files
++"		http://www.gnu.org/software/gnash/manual/gnashuser.html#gnashrc
++" File:		runtime/syntax/gnash.vim
++" Last Change: 	2012 May 19
++" Modeline:	vim: ts=8:sw=2:sts=2:
++"
++" Credits:	derived from Nikolai Weibulls readline.vim
++"
++" License:	VIM License
++"		Vim is Charityware, see ":help Uganda"
++"
++
++" For version 5.x: Clear all syntax items
++" For version 6.x: Quit when a syntax file was already loaded
++if version < 600
++    syntax clear
++elseif exists("b:current_syntax") || &compatible
++    finish
++endif
++
++syn case match
++syn keyword GnashTodo	    contained TODO FIXME XXX NOTE
++
++" Comments
++syn match   GnashComment    "^#.*$"   contains=@Spell,GnashTodo
++syn match   GnashComment    "\s#.*$"  contains=@Spell,GnashTodo
++
++syn match   GnashNumber	    display '\<\d\+\>'
++
++syn case ignore
++syn keyword GnashOn	    ON YES TRUE
++syn keyword GnashOff	    OFF NO FALSE
++
++syn match GnashSet	    '^\s*set\>'
++syn match GnashSet	    '^\s*append\>'
++
++syn match GnashKeyword	    '\<CertDir\>'
++syn match GnashKeyword      '\<ASCodingErrorsVerbosity\>'
++syn match GnashKeyword      '\<CertFile\>'
++syn match GnashKeyword      '\<EnableExtensions\>'
++syn match GnashKeyword      '\<HWAccel\>'
++syn match GnashKeyword      '\<LCShmKey\>'
++syn match GnashKeyword      '\<LocalConnection\>'
++syn match GnashKeyword      '\<MalformedSWFVerbosity\>'
++syn match GnashKeyword      '\<Renderer\>'
++syn match GnashKeyword      '\<RootCert\>'
++syn match GnashKeyword      '\<SOLReadOnly\>'
++syn match GnashKeyword      '\<SOLSafeDir\>'
++syn match GnashKeyword      '\<SOLreadonly\>'
++syn match GnashKeyword      '\<SOLsafedir\>'
++syn match GnashKeyword      '\<StartStopped\>'
++syn match GnashKeyword      '\<StreamsTimeout\>'
++syn match GnashKeyword      '\<URLOpenerFormat\>'
++syn match GnashKeyword      '\<XVideo\>'
++syn match GnashKeyword      '\<actionDump\>'
++syn match GnashKeyword      '\<blacklist\>'
++syn match GnashKeyword      '\<debugger\>'
++syn match GnashKeyword      '\<debuglog\>'
++syn match GnashKeyword      '\<delay\>'
++syn match GnashKeyword      '\<enableExtensions\>'
++syn match GnashKeyword      '\<flashSystemManufacturer\>'
++syn match GnashKeyword      '\<flashSystemOS\>'
++syn match GnashKeyword      '\<flashVersionString\>'
++syn match GnashKeyword      '\<ignoreFSCommand\>'
++syn match GnashKeyword      '\<ignoreShowMenu\>'
++syn match GnashKeyword      '\<insecureSSL\>'
++syn match GnashKeyword      '\<localSandboxPath\>'
++syn match GnashKeyword      '\<localdomain\>'
++syn match GnashKeyword      '\<localhost\>'
++syn match GnashKeyword      '\<microphoneDevice\>'
++syn match GnashKeyword      '\<parserDump\>'
++syn match GnashKeyword      '\<pluginsound\>'
++syn match GnashKeyword      '\<quality\>'
++syn match GnashKeyword      '\<solLocalDomain\>'
++syn match GnashKeyword      '\<sound\>'
++syn match GnashKeyword      '\<splashScreen\>'
++syn match GnashKeyword      '\<startStopped\>'
++syn match GnashKeyword      '\<streamsTimeout\>'
++syn match GnashKeyword      '\<urlOpenerFormat\>'
++syn match GnashKeyword      '\<verbosity\>'
++syn match GnashKeyword      '\<webcamDevice\>'
++syn match GnashKeyword      '\<whitelist\>'
++syn match GnashKeyword      '\<writelog\>'
++
++hi def link GnashOn	    Identifier
++hi def link GnashOff	    Preproc
++hi def link GnashComment    Comment
++hi def link GnashTodo	    Todo
++hi def link GnashNumber	    Type
++hi def link GnashSet	    String
++hi def link GnashKeyword    Keyword
++
++let b:current_syntax = "gnash"
++
+diff -Naur vim73.orig/runtime/syntax/gp.vim vim73/runtime/syntax/gp.vim
+--- vim73.orig/runtime/syntax/gp.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/gp.vim	2013-06-07 17:07:23.188942463 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+-" Language:	gp (version 2.4)
++" Language:	gp (version 2.5)
+ " Maintainer:	Karim Belabas <Karim.Belabas@math.u-bordeaux.fr>
+-" Last change:	2007 Oct 1
++" Last change:	2012 Jan 08
+ " URL:		http://pari.math.u-bordeaux.fr
+ 
+ if version < 600
+@@ -10,21 +10,30 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " control statements
+ syntax keyword gpStatement	break return next
+ syntax keyword gpConditional	if
+-syntax keyword gpRepeat		until while for fordiv forprime forstep forvec
++syntax keyword gpRepeat		until while for fordiv forell forprime 
++syntax keyword gpRepeat		forsubgroup forstep forvec
+ " storage class
+ syntax keyword gpScope		my local global
+ " defaults
+-syntax keyword gpInterfaceKey	colors compatible datadir debug debugfiles
+-syntax keyword gpInterfaceKey	debugmem echo factor_add_primes format help
+-syntax keyword gpInterfaceKey	histsize lines log logfile new_galois_format
++syntax keyword gpInterfaceKey	breakloop colors compatible
++syntax keyword gpInterfaceKey	datadir debug debugfiles debugmem 
++syntax keyword gpInterfaceKey	echo factor_add_primes factor_proven format 
++syntax keyword gpInterfaceKey	graphcolormap graphcolors
++syntax keyword gpInterfaceKey	help histfile histsize 
++syntax keyword gpInterfaceKey	lines linewrap log logfile new_galois_format
+ syntax keyword gpInterfaceKey	output parisize path prettyprinter primelimit
+-syntax keyword gpInterfaceKey	prompt prompt_cont psfile realprecision secure
+-syntax keyword gpInterfaceKey	seriesprecision simplify strictmatch TeXstyle timer
++syntax keyword gpInterfaceKey	prompt prompt_cont psfile 
++syntax keyword gpInterfaceKey	readline realprecision recover 
++syntax keyword gpInterfaceKey	secure seriesprecision simplify strictmatch
++syntax keyword gpInterfaceKey	TeXstyle timer
+ 
+-syntax match   gpInterface	"^\s*\\[a-z].*"
++syntax match gpInterface	"^\s*\\[a-z].*"
+ syntax keyword gpInterface	default
+ syntax keyword gpInput		read input
+ 
+@@ -79,4 +88,6 @@
+ endif
+ 
+ let b:current_syntax = "gp"
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/gpg.vim vim73/runtime/syntax/gpg.vim
+--- vim73.orig/runtime/syntax/gpg.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/gpg.vim	2013-06-07 17:07:23.192275787 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         gpg(1) configuration file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2007-06-17
++" Latest Revision:  2010-10-14
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -54,7 +54,7 @@
+                         \ personal-digest-preferences photo-viewer
+                         \ recipient s2k-cipher-algo s2k-digest-algo s2k-mode
+                         \ secret-keyring set-filename set-policy-url status-fd
+-                        \ trusted-key verify-options
++                        \ trusted-key verify-options keyid-format list-options
+ syn keyword gpgOption   contained skipwhite nextgroup=gpgArgError
+                         \ allow-freeform-uid allow-non-selfsigned-uid
+                         \ allow-secret-key-import always-trust
+diff -Naur vim73.orig/runtime/syntax/gprof.vim vim73/runtime/syntax/gprof.vim
+--- vim73.orig/runtime/syntax/gprof.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/gprof.vim	2013-06-07 17:07:23.222275701 +0000
+@@ -0,0 +1,69 @@
++" Vim syntax file
++" Language: Syntax for Gprof Output
++" Maintainer: Dominique Pelle <dominique.pelle@gmail.com>
++" Last Change: 2012 May 20
++
++" Quit when a syntax file was already loaded
++if exists("b:current_syntax")
++	finish
++endif
++let s:keepcpo= &cpo
++set cpo&vim
++
++syn case match
++syn sync minlines=100
++
++" Flat profile
++syn match gprofFlatProfileTitle
++  \ "^Flat profile:$" 
++syn region gprofFlatProfileHeader 
++  \ start="^Each sample counts as.*"
++  \ end="^ time.*name\s*$"
++syn region gprofFlatProfileTrailer
++  \ start="^\s*%\s\+the percentage of the total running time.*"
++  \ end="^\s*the gprof listing if it were to be printed\."
++
++" Call graph
++syn match gprofCallGraphTitle "Call graph (explanation follows)"
++syn region gprofCallGraphHeader
++  \ start="^granularity: each sample hit covers.*"
++  \ end="^\s*index % time\s\+self\s\+children\s\+called\s\+name$"
++syn match gprofCallGraphFunction "\s\+\(\d\+\.\d\+\s\+\)\{3}\([0-9+]\+\)\?\s\+[a-zA-Z_<].*\ze\["
++syn match gprofCallGraphSeparator "^-\+$"
++syn region gprofCallGraphTrailer
++  \ start="This table describes the call tree of the program"
++  \ end="^\s*the cycle.$"
++
++" Index
++syn region gprofIndex
++  \ start="^Index by function name$"
++  \ end="\%$"
++
++syn match gprofIndexFunctionTitle "^Index by function name$"
++
++syn match gprofNumbers "^\s\+[0-9 ./+]\+"
++syn match gprofFunctionIndex "\[\d\+\]"
++syn match gprofSpecial "<\(spontaneous\|cycle \d\+\)>"
++
++hi def link gprofFlatProfileTitle      Title
++hi def link gprofFlatProfileHeader     Comment
++hi def link gprofFlatProfileFunction   Number
++hi def link gprofFlatProfileTrailer    Comment
++
++hi def link gprofCallGraphTitle        Title
++hi def link gprofCallGraphHeader       Comment
++hi def link gprofFlatProfileFunction   Number
++hi def link gprofCallGraphFunction     Special
++hi def link gprofCallGraphTrailer      Comment
++hi def link gprofCallGraphSeparator    Label
++
++hi def link gprofFunctionIndex         Label
++hi def link gprofSpecial               SpecialKey
++hi def link gprofNumbers               Number
++
++hi def link gprofIndexFunctionTitle Title
++
++let b:current_syntax = "gprof"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/syntax/groovy.vim vim73/runtime/syntax/groovy.vim
+--- vim73.orig/runtime/syntax/groovy.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/groovy.vim	2013-06-07 17:07:23.245608968 +0000
+@@ -1,13 +1,16 @@
+ " Vim syntax file
+ " Language:	Groovy
+-" Maintainer:	Alessio Pace <billy.corgan@tiscali.it>
+-" Version: 	0.1.9b
+-" URL:	  http://www.vim.org/scripts/script.php?script_id=945	
+-" Last Change:	6/4/2004
++" Original Author:	Alessio Pace <billy.corgan@tiscali.it>
++" Maintainer:	Tobias Rapp <yahuxo@gmx.de>
++" Version: 	0.1.13
++" URL:	  http://www.vim.org/scripts/script.php?script_id=945
++" Last Change:	2013 Apr 24
+ 
++" THE ORIGINAL AUTHOR'S NOTES:
++"
+ " This is my very first vim script, I hope to have
+ " done it the right way.
+-" 
++"
+ " I must directly or indirectly thank the author of java.vim and ruby.vim:
+ " I copied from them most of the stuff :-)
+ "
+@@ -16,11 +19,10 @@
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+ "
+-" HOWTO USE IT (INSTALL):
+-" [groovy is still not recognized by vim! :-( ]
++" HOWTO USE IT (INSTALL) when not part of the distribution:
+ "
+ " 1) copy the file in the (global or user's $HOME/.vim/syntax/) syntax folder
+-" 
++"
+ " 2) add this line to recognize groovy files by filename extension:
+ "
+ " au BufNewFile,BufRead *.groovy  setf groovy
+@@ -36,7 +38,7 @@
+ "  endif
+ "
+ "  in the global scripts.vim file or in $HOME/.vim/scripts.vim
+-" 
++"
+ " 4) open/write a .groovy file or a groovy script :-)
+ "
+ " Let me know if you like it or send me patches, so that I can improve it
+@@ -53,6 +55,9 @@
+   let main_syntax='groovy'
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " don't use standard HiLink, it will not work with included syntax files
+ if version < 508
+   command! -nargs=+ GroovyHiLink hi link <args>
+@@ -69,7 +74,7 @@
+ 
+ " keyword definitions
+ syn keyword groovyExternal        native package
+-syn match groovyExternal          "\<import\(\s\+static\>\)\?"
++syn match groovyExternal          "\<import\>\(\s\+static\>\)\?"
+ syn keyword groovyError           goto const
+ syn keyword groovyConditional     if else switch
+ syn keyword groovyRepeat          while for do
+@@ -99,11 +104,11 @@
+ if exists("groovy_highlight_groovy_lang_ids") || exists("groovy_highlight_groovy_lang") || exists("groovy_highlight_all")
+   " groovy.lang.*
+   syn keyword groovyLangClass  Closure MetaMethod GroovyObject
+-  
++
+   syn match groovyJavaLangClass "\<System\>"
+   syn keyword groovyJavaLangClass  Cloneable Comparable Runnable Serializable Boolean Byte Class Object
+   syn keyword groovyJavaLangClass  Character CharSequence ClassLoader Compiler
+-  " syn keyword groovyJavaLangClass  Integer Double Float Long 
++  " syn keyword groovyJavaLangClass  Integer Double Float Long
+   syn keyword groovyJavaLangClass  InheritableThreadLocal Math Number Object Package Process
+   syn keyword groovyJavaLangClass  Runtime RuntimePermission InheritableThreadLocal
+   syn keyword groovyJavaLangClass  SecurityManager Short StrictMath StackTraceElement
+@@ -157,18 +162,18 @@
+ 
+ " Groovy JDK stuff
+ syn keyword groovyJDKBuiltin    as def in
+-syn keyword groovyJDKOperOverl  div minus plus abs round power multiply 
+-syn keyword groovyJDKMethods 	each call inject sort print println 
++syn keyword groovyJDKOperOverl  div minus plus abs round power multiply
++syn keyword groovyJDKMethods 	each call inject sort print println
+ syn keyword groovyJDKMethods    getAt putAt size push pop toList getText writeLine eachLine readLines
+-syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift 
++syn keyword groovyJDKMethods    withReader withStream withWriter withPrintWriter write read leftShift
+ syn keyword groovyJDKMethods    withWriterAppend readBytes splitEachLine
+-syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter 
+-syn keyword groovyJDKMethods    compareTo next previous isCase 
++syn keyword groovyJDKMethods    newInputStream newOutputStream newPrintWriter newReader newWriter
++syn keyword groovyJDKMethods    compareTo next previous isCase
+ syn keyword groovyJDKMethods    times step toInteger upto any collect dump every find findAll grep
+-syn keyword groovyJDKMethods    inspect invokeMethods join 
++syn keyword groovyJDKMethods    inspect invokeMethods join
+ syn keyword groovyJDKMethods    getErr getIn getOut waitForOrKill
+ syn keyword groovyJDKMethods    count tokenize asList flatten immutable intersect reverse reverseEach
+-syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile 
++syn keyword groovyJDKMethods    subMap append asWritable eachByte eachLine eachFile
+ syn cluster groovyTop add=groovyJDKBuiltin,groovyJDKOperOverl,groovyJDKMethods
+ 
+ " no useful I think, so I comment it..
+@@ -245,11 +250,17 @@
+ " Strings and constants
+ syn match   groovySpecialError     contained "\\."
+ syn match   groovySpecialCharError contained "[^']"
+-syn match   groovySpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\)"
++syn match   groovySpecialChar      contained "\\\([4-9]\d\|[0-3]\d\d\|[\"\\'ntbrf]\|u\x\{4\}\|\$\)"
++syn match   groovyRegexChar        contained "\\."
+ syn region  groovyString          start=+"+ end=+"+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
+-syn region  groovyString          start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
++syn region  groovyString          start=+'+ end=+'+ end=+$+ contains=groovySpecialChar,groovySpecialError,@Spell
++syn region  groovyString          start=+"""+ end=+"""+ contains=groovySpecialChar,groovySpecialError,@Spell,groovyELExpr
++syn region  groovyString          start=+'''+ end=+'''+ contains=groovySpecialChar,groovySpecialError,@Spell
++" regex string
++syn region groovyString           start='/[^/]'  end='/' contains=groovySpecialChar,groovyRegexChar,groovyELExpr
+ " syn region groovyELExpr start=+${+ end=+}+ keepend contained
+- syn match groovyELExpr /\${.\{-}}/ contained
++syn match groovyELExpr /\${.\{-}}/ contained
++syn match groovyELExpr /\$[a-zA-Z_][a-zA-Z0-9_.]*/ contained
+ GroovyHiLink groovyELExpr Identifier
+ 
+ " TODO: better matching. I am waiting to understand how it really works in groovy
+@@ -327,7 +338,7 @@
+     GroovyHiLink groovyDebugSpecialCharacter DebugSpecial
+     GroovyHiLink groovyDebugCharacter        DebugString
+     GroovyHiLink groovyDebugParen            Debug
+-  
++
+     GroovyHiLink DebugString               String
+     GroovyHiLink DebugSpecial              Special
+     GroovyHiLink DebugBoolean              Boolean
+@@ -335,7 +346,7 @@
+   endif
+ endif
+ 
+-" Match all Exception classes 
++" Match all Exception classes
+ syn match groovyExceptions        "\<Exception\>\|\<[A-Z]\{1,}[a-zA-Z0-9]*Exception\>"
+ 
+ 
+@@ -345,7 +356,7 @@
+ exec "syn sync ccomment groovyComment minlines=" . groovy_minlines
+ 
+ 
+-" ################### 
++" ###################
+ " Groovy stuff
+ " syn match groovyOperator		"|[ ,a-zA-Z0-9_*]\+|"
+ 
+@@ -408,6 +419,7 @@
+   GroovyHiLink groovySpecialError	Error
+   GroovyHiLink groovySpecialCharError	Error
+   GroovyHiLink groovyString		String
++  GroovyHiLink groovyRegexChar		String
+   GroovyHiLink groovyCharacter		Character
+   GroovyHiLink groovySpecialChar	SpecialChar
+   GroovyHiLink groovyNumber		Number
+@@ -421,15 +433,15 @@
+   GroovyHiLink groovyConstant		Constant
+   GroovyHiLink groovyTypedef		Typedef
+   GroovyHiLink groovyTodo		Todo
+-  
++
+   GroovyHiLink groovyCommentTitle	SpecialComment
+   GroovyHiLink groovyDocTags		Special
+   GroovyHiLink groovyDocParam		Function
+   GroovyHiLink groovyCommentStar	groovyComment
+-  
++
+   GroovyHiLink groovyType		Type
+   GroovyHiLink groovyExternal		Include
+-  
++
+   GroovyHiLink htmlComment		Special
+   GroovyHiLink htmlCommentPart		Special
+   GroovyHiLink groovySpaceError		Error
+@@ -448,4 +460,7 @@
+ 
+ let b:spell_options="contained"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/group.vim vim73/runtime/syntax/group.vim
+--- vim73.orig/runtime/syntax/group.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/group.vim	2013-06-07 17:07:23.255608939 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         group(5) user group file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2006-04-19
++" Latest Revision:  2012-08-05
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -12,7 +12,7 @@
+ 
+ syn match   groupBegin          display '^' nextgroup=groupName
+ 
+-syn match   groupName           contained display '[a-z_][a-z0-9_-]\{0,15}'
++syn match   groupName           contained display '[^:]\+'
+                                 \ nextgroup=groupPasswordColon
+ 
+ syn match   groupPasswordColon  contained display ':'
+@@ -30,7 +30,7 @@
+ 
+ syn match   groupUserListColon  contained display ':' nextgroup=groupUserList
+ 
+-syn match   groupUserList       contained '[a-z_][a-z0-9_-]*'
++syn match   groupUserList       contained '[^,]\+'
+                                 \ nextgroup=groupUserListSep
+ 
+ syn match   groupUserListSep    contained display ',' nextgroup=groupUserList
+diff -Naur vim73.orig/runtime/syntax/gsp.vim vim73/runtime/syntax/gsp.vim
+--- vim73.orig/runtime/syntax/gsp.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/gsp.vim	2013-06-07 17:07:23.285608853 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	GSP - GNU Server Pages (v. 0.86)
+ " Created By:	Nathaniel Harward nharward@yahoo.com
+-" Last Changed: Dec. 12, 2000
++" Last Changed: 2012 Jan 08 by Thilo Six
+ " Filenames:    *.gsp
+ " URL:		http://www.constructicon.com/~nharward/vim/syntax/gsp.vim
+ 
+@@ -34,6 +34,9 @@
+   syn include @gspJava syntax/java.vim
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Add <java> as an HTML tag name along with its args
+ syn keyword htmlTagName contained java
+ syn keyword htmlArg     contained type file page
+@@ -57,3 +60,6 @@
+ if main_syntax == 'gsp'
+   unlet main_syntax
+ endif
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/hb.vim vim73/runtime/syntax/hb.vim
+--- vim73.orig/runtime/syntax/hb.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/hb.vim	2013-06-07 17:07:23.368941949 +0000
+@@ -2,7 +2,7 @@
+ " Language:	Hyper Builder
+ " Maintainer:	Alejandro Forero Cuervo
+ " URL:		http://bachue.com/hb/vim/syntax/hb.vim
+-" Last Change:	2001 Sep 02
++" Last Change:	2012 Jan 08 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Read the HTML syntax to start with
+ "syn include @HTMLStuff <sfile>:p:h/htmlhb.vim
+ 
+@@ -94,4 +97,6 @@
+ 
+ let b:current_syntax = "hb"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/help.vim vim73/runtime/syntax/help.vim
+--- vim73.orig/runtime/syntax/help.vim	2010-07-18 21:18:04.000000000 +0000
++++ vim73/runtime/syntax/help.vim	2013-06-07 17:07:23.372275273 +0000
+@@ -1,16 +1,19 @@
+ " Vim syntax file
+ " Language:	Vim help file
+ " Maintainer:	Bram Moolenaar (Bram@vim.org)
+-" Last Change:	2009 May 18
++" Last Change:	2013 Jun 02
+ 
+ " Quit when a (custom) syntax file was already loaded
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn match helpHeadline		"^[-A-Z .][-A-Z0-9 .()]*[ \t]\+\*"me=e-1
+-syn match helpSectionDelim	"^=\{3,}.*===$"
+-syn match helpSectionDelim	"^-\{3,}.*--$"
++syn match helpSectionDelim	"^===.*===$"
++syn match helpSectionDelim	"^---.*--$"
+ syn region helpExample		matchgroup=helpIgnore start=" >$" start="^>$" end="^[^ \t]"me=e-1 end="^<"
+ if has("ebcdic")
+   syn match helpHyperTextJump	"\\\@<!|[^"*|]\+|" contains=helpBar
+@@ -21,16 +24,30 @@
+   syn match helpHyperTextEntry	"\*[#-)!+-~]\+\*\s"he=e-1 contains=helpStar
+   syn match helpHyperTextEntry	"\*[#-)!+-~]\+\*$" contains=helpStar
+ endif
+-syn match helpBar		contained "|" conceal
+-syn match helpStar		contained "\*" conceal
++if has("conceal")
++  syn match helpBar		contained "|" conceal
++  syn match helpBacktick	contained "`" conceal
++  syn match helpStar		contained "\*" conceal
++else
++  syn match helpBar		contained "|"
++  syn match helpBacktick	contained "`"
++  syn match helpStar		contained "\*"
++endif
+ syn match helpNormal		"|.*====*|"
++syn match helpNormal		"|||"
+ syn match helpNormal		":|vim:|"	" for :help modeline
+ syn match helpVim		"Vim version [0-9.a-z]\+"
+ syn match helpVim		"VIM REFERENCE.*"
+ syn match helpOption		"'[a-z]\{2,\}'"
+ syn match helpOption		"'t_..'"
++syn match helpCommand		"`[^` ]\+`"hs=s+1,he=e-1 contains=helpBacktick
+ syn match helpHeader		"\s*\zs.\{-}\ze\s\=\~$" nextgroup=helpIgnore
+-syn match helpIgnore		"." contained conceal
++syn match helpGraphic		".* \ze`$" nextgroup=helpIgnore
++if has("conceal")
++  syn match helpIgnore		"." contained conceal
++else
++  syn match helpIgnore		"." contained
++endif
+ syn keyword helpNote		note Note NOTE note: Note: NOTE: Notes Notes:
+ syn match helpSpecial		"\<N\>"
+ syn match helpSpecial		"\<N\.$"me=e-1
+@@ -135,12 +152,14 @@
+ hi def link helpIgnore		Ignore
+ hi def link helpHyperTextJump	Subtitle
+ hi def link helpBar		Ignore
++hi def link helpBacktick	Ignore
+ hi def link helpStar		Ignore
+ hi def link helpHyperTextEntry	String
+ hi def link helpHeadline	Statement
+ hi def link helpHeader		PreProc
+ hi def link helpSectionDelim	PreProc
+ hi def link helpVim		Identifier
++hi def link helpCommand		Comment
+ hi def link helpExample		Comment
+ hi def link helpOption		Type
+ hi def link helpNotVi		Special
+@@ -185,4 +204,6 @@
+ 
+ let b:current_syntax = "help"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8 sw=2
+diff -Naur vim73.orig/runtime/syntax/hgcommit.vim vim73/runtime/syntax/hgcommit.vim
+--- vim73.orig/runtime/syntax/hgcommit.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/hgcommit.vim	2013-06-07 17:07:23.412275158 +0000
+@@ -0,0 +1,27 @@
++" Vim syntax file
++" Language:	hg (Mercurial) commit file
++" Maintainer:	Ken Takata <kentkt at csc dot jp>
++" Last Change:	2012 Aug 23
++" Filenames:	hg-editor-*.txt
++" License:	VIM License
++" URL:		https://github.com/k-takata/hg-vim
++
++if exists("b:current_syntax")
++  finish
++endif
++
++syn match hgcommitComment "^HG:.*$"             contains=@NoSpell
++syn match hgcommitUser    "^HG: user: \zs.*$"   contains=@NoSpell contained containedin=hgcommitComment
++syn match hgcommitBranch  "^HG: branch \zs.*$"  contains=@NoSpell contained containedin=hgcommitComment
++syn match hgcommitAdded   "^HG: \zsadded .*$"   contains=@NoSpell contained containedin=hgcommitComment
++syn match hgcommitChanged "^HG: \zschanged .*$" contains=@NoSpell contained containedin=hgcommitComment
++syn match hgcommitRemoved "^HG: \zsremoved .*$" contains=@NoSpell contained containedin=hgcommitComment
++
++hi def link hgcommitComment Comment
++hi def link hgcommitUser    String
++hi def link hgcommitBranch  String
++hi def link hgcommitAdded   Identifier
++hi def link hgcommitChanged Special
++hi def link hgcommitRemoved Constant
++
++let b:current_syntax = "hgcommit"
+diff -Naur vim73.orig/runtime/syntax/hostsaccess.vim vim73/runtime/syntax/hostsaccess.vim
+--- vim73.orig/runtime/syntax/hostsaccess.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/hostsaccess.vim	2013-06-07 17:07:23.462275016 +0000
+@@ -0,0 +1,27 @@
++" Vim syntax file
++" Language:	hosts.deny, hosts.allow configuration files
++" Maintainer:	Thilo Six <T.Six@gmx.de>
++" Last Change:	2011 May 01
++" Derived From: conf.vim
++" Credits:	Bram Moolenaar
++"
++" This file is there to get at least a minimal highlighting.
++" A later version may be improved.
++
++
++" Quit when a (custom) syntax file was already loaded
++if exists("b:current_syntax")
++  finish
++endif
++
++" For a starter we just use conf.vim for highlighting
++if version < 600
++  so <sfile>:p:h/conf.vim
++else
++  runtime! syntax/conf.vim
++  unlet b:current_syntax
++endif
++
++
++let b:current_syntax = "hostsaccess"
++" vim: ts=8 sw=2
+diff -Naur vim73.orig/runtime/syntax/html.vim vim73/runtime/syntax/html.vim
+--- vim73.orig/runtime/syntax/html.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/html.vim	2013-06-07 17:07:23.478941635 +0000
+@@ -2,7 +2,7 @@
+ " Language:	HTML
+ " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
+ " URL:		http://www.fleiner.com/vim/syntax/html.vim
+-" Last Change:  2006 Jun 19
++" Last Change:	2012 Oct 05
+ 
+ " Please check :help html.vim for some comments and a description of the options
+ 
+@@ -17,6 +17,9 @@
+   let main_syntax = 'html'
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " don't use standard HiLink, it will not work with included syntax files
+ if version < 508
+   command! -nargs=+ HtmlHiLink hi link <args>
+@@ -37,7 +40,7 @@
+ syn region  htmlString   contained start=+'+ end=+'+ contains=htmlSpecialChar,javaScriptExpression,@htmlPreproc
+ syn match   htmlValue    contained "=[\t ]*[^'" \t>][^ \t>]*"hs=s+1   contains=javaScriptExpression,@htmlPreproc
+ syn region  htmlEndTag             start=+</+      end=+>+ contains=htmlTagN,htmlTagError
+-syn region  htmlTag                start=+<[^/]+   end=+>+ contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
++syn region  htmlTag                start=+<[^/]+   end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent,htmlCssDefinition,@htmlPreproc,@htmlArgCluster
+ syn match   htmlTagN     contained +<\s*[-a-zA-Z0-9]\++hs=s+1 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
+ syn match   htmlTagN     contained +</\s*[-a-zA-Z0-9]\++hs=s+2 contains=htmlTagName,htmlSpecialTagName,@htmlTagNameCluster
+ syn match   htmlTagError contained "[^>]<"ms=s+1
+@@ -98,11 +101,11 @@
+ 
+ " Comments (the real ones or the old netscape ones)
+ if exists("html_wrong_comments")
+-  syn region htmlComment                start=+<!--+    end=+--\s*>+
++  syn region htmlComment                start=+<!--+    end=+--\s*>+ contains=@Spell
+ else
+-  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError
++  syn region htmlComment                start=+<!+      end=+>+   contains=htmlCommentPart,htmlCommentError,@Spell
+   syn match  htmlCommentError contained "[^><!]"
+-  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc
++  syn region htmlCommentPart  contained start=+--+      end=+--\s*+  contains=@htmlPreProc,@Spell
+ endif
+ syn region htmlComment                  start=+<!DOCTYPE+ keepend end=+>+
+ 
+@@ -147,7 +150,8 @@
+   syn region htmlItalicUnderlineBold contained start="<b\>" end="</b>"me=e-4 contains=@htmlTop
+   syn region htmlItalicUnderlineBold contained start="<strong\>" end="</strong>"me=e-9 contains=@htmlTop
+ 
+-  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,javaScript,@htmlPreproc
++  syn match htmlLeadingSpace "^\s\+" contained
++  syn region htmlLink start="<a\>\_[^>]*\<href\>" end="</a>"me=e-4 contains=@Spell,htmlTag,htmlEndTag,htmlSpecialChar,htmlPreProc,htmlComment,htmlLeadingSpace,javaScript,@htmlPreproc
+   syn region htmlH1 start="<h1\>" end="</h1>"me=e-5 contains=@htmlTop
+   syn region htmlH2 start="<h2\>" end="</h2>"me=e-5 contains=@htmlTop
+   syn region htmlH3 start="<h3\>" end="</h3>"me=e-5 contains=@htmlTop
+@@ -164,8 +168,8 @@
+   " JAVA SCRIPT
+   syn include @htmlJavaScript syntax/javascript.vim
+   unlet b:current_syntax
+-  syn region  javaScript start=+<script[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
+-  syn region  htmlScriptTag     contained start=+<script+ end=+>+       contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
++  syn region  javaScript start=+<script\_[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlJavaScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
++  syn region  htmlScriptTag     contained start=+<script+ end=+>+ fold contains=htmlTagN,htmlString,htmlArg,htmlValue,htmlTagError,htmlEvent
+   HtmlHiLink htmlScriptTag htmlTag
+ 
+   " html events (i.e. arguments that include javascript commands)
+@@ -189,7 +193,7 @@
+   " VB SCRIPT
+   syn include @htmlVbScript syntax/vb.vim
+   unlet b:current_syntax
+-  syn region  javaScript start=+<script [^>]*language *=[^>]*vbscript[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
++  syn region  javaScript start=+<script \_[^>]*language *=\_[^>]*vbscript\_[^>]*>+ keepend end=+</script>+me=s-1 contains=@htmlVbScript,htmlCssStyleComment,htmlScriptTag,@htmlPreproc
+ endif
+ 
+ syn cluster htmlJavaScript      add=@htmlPreproc
+@@ -246,6 +250,7 @@
+     HtmlHiLink htmlItalicBoldUnderline     htmlBoldUnderlineItalic
+     HtmlHiLink htmlItalicUnderlineBold     htmlBoldUnderlineItalic
+     HtmlHiLink htmlLink                    Underlined
++    HtmlHiLink htmlLeadingSpace            None
+     if !exists("html_my_rendering")
+       hi def htmlBold                term=bold cterm=bold gui=bold
+       hi def htmlBoldUnderline       term=bold,underline cterm=bold,underline gui=bold,underline
+@@ -289,4 +294,6 @@
+   unlet main_syntax
+ endif
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/idl.vim vim73/runtime/syntax/idl.vim
+--- vim73.orig/runtime/syntax/idl.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/idl.vim	2013-06-07 17:07:23.578941349 +0000
+@@ -2,7 +2,7 @@
+ " Language:    IDL (Interface Description Language)
+ " Created By:  Jody Goldberg
+ " Maintainer:  Michael Geddes <vim@frog.wheelycreek.net>
+-" Last Change:  Thu Apr 13 2006
++" Last Change:  2012 Jan 11
+ 
+ 
+ " This is an experiment.  IDL's structure is simple enough to permit a full
+@@ -17,303 +17,310 @@
+ " History:
+ " 2.0: Michael's new version
+ " 2.1: Support for Vim 7 spell (Anduin Withers)
+-"      
++"
+ 
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
+-if exists("idlsyntax_showerror")
+-  syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
+-endif
++let s:cpo_save = &cpo
++try
++  set cpo&vim
+ 
+-syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
++  if exists("idlsyntax_showerror")
++    syn match idlError +\S+ skipwhite skipempty nextgroup=idlError
++  endif
+ 
+-" Misc basic
+-syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
+-syn match   idlEnumComma   contained ","
+-syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
+-syn match   idlSemiColon   contained ";"
+-syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
+-syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
+-syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
+-syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
+-syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
+-syn match   idlLiteral     contained "0"
+-syn match   idlLiteral     contained "\.\d\+"
+-syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
+-syn match   idlLiteral     contained "0[0-7]\+"
+-syn keyword idlLiteral     contained TRUE FALSE
+-
+-" Comments
+-syn keyword idlTodo        contained TODO FIXME XXX
+-syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
+-syn match  idlComment      "//.*" contains=idlTodo,@Spell
+-syn match  idlCommentError "\*/"
+-
+-" C style Preprocessor
+-syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
+-syn match  idlIncluded    contained "<[^>]*>"
+-syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
+-syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
+-syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
+-
+-" Constants
+-syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
+-
+-" Attribute
+-syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
+-syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
+-
+-" Types
+-syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
+-syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
+-syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
+-syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
+-syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
+-syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
+-syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
+-syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
+-
+-" Modules
+-syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
+-syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
+-syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
+-
+-" Interfaces
+-syn cluster idlCommentable contains=idlComment
+-syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
+-
+-syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+-syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
+-syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
+-syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
+-syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
+-syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
+-syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
+-syn match   idlSectionColon contained ":"
+-
+-
+-syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
+-syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
+-syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
+-
+-syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
+-syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
+-
+-syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
+-syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
+-
+-syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
+-syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
+-syn keyword idlCoclassAttribute contained default source
+-"syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
+-
+-syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
+-syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
+-
+-syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
+-syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
+-if !exists('idl_no_ms_extensions')
+-syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
+-endif
+-syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
+-" skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+-syn match idlErrorBrace contained "}"
+-syn match idlErrorBracket contained ")"
+-syn match idlErrorSquareBracket contained "\]"
+-
+-syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
+-
+-" Raises
+-syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+-
+-" Context
+-syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
+-
+-" Operation
+-syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
+-syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
+-syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
+-syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
+-syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
+-syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
+-syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
+-syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
+-syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
+-syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
+-
+-if !exists('idl_no_ms_extensions')
+-syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
+-  syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
++  syn region idlCppQuote start='\<cpp_quote\s*(' end=')' contains=idlString
+ 
+-  syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
+-  syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
+-endif
++  " Misc basic
++  syn match   idlId          contained "[a-zA-Z][a-zA-Z0-9_]*" skipwhite skipempty nextgroup=idlEnumComma,idlEnumNumber
++  syn match   idlEnumComma   contained ","
++  syn match   idlEnumNumber  contained "=" skipwhite skipempty nextgroup=idlString,idlLiteral
++  syn match   idlSemiColon   contained ";"
++  syn match   idlCommaArg    contained ","                      skipempty skipwhite nextgroup=idlSimpDecl
++  syn region  idlArraySize1  contained start=:\[: end=:\]:      skipempty skipwhite nextgroup=idlArraySize1,idlError,idlSemiColon,idlCommaArg contains=idlArraySize1,idlLiteral
++  syn match   idlSimpDecl    contained "[a-zA-Z][a-zA-Z0-9_]*"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlCommaArg,idlArraySize1
++  syn region  idlString      contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+ contains=@Spell
++  syn match   idlLiteral     contained "[1-9]\d*\(\.\d*\)\="
++  syn match   idlLiteral     contained "0"
++  syn match   idlLiteral     contained "\.\d\+"
++  syn match   idlLiteral     contained "0x[0-9A-Fa-f]\+"
++  syn match   idlLiteral     contained "0[0-7]\+"
++  syn keyword idlLiteral     contained TRUE FALSE
++
++  " Comments
++  syn keyword idlTodo        contained TODO FIXME XXX
++  syn region idlComment      start="/\*"  end="\*/" contains=idlTodo,@Spell
++  syn match  idlComment      "//.*" contains=idlTodo,@Spell
++  syn match  idlCommentError "\*/"
++
++  " C style Preprocessor
++  syn region idlIncluded    contained start=+"+  skip=+\\\(\\\\\)*"+  end=+"+
++  syn match  idlIncluded    contained "<[^>]*>"
++  syn match  idlInclude     "^[ \t]*#[ \t]*include\>[ \t]*["<]" contains=idlIncluded,idlString
++  syn region idlPreCondit   start="^[ \t]*#[ \t]*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=idlComment,idlCommentError
++  syn region idlDefine      start="^[ \t]*#[ \t]*\(define\>\|undef\>\)" skip="\\$" end="$" contains=idlLiteral,idlString
++
++  " Constants
++  syn keyword idlConst    const                             skipempty skipwhite nextgroup=idlBaseType,idlBaseTypeInt
++
++  " Attribute
++  syn keyword idlROAttr   readonly                          skipempty skipwhite nextgroup=idlAttr
++  syn keyword idlAttr     attribute                         skipempty skipwhite nextgroup=idlBaseTypeInt,idlBaseType
++
++  " Types
++  syn region  idlD4          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlSeqType,idlBaseTypeInt,idlBaseType,idlLiteral
++  syn keyword idlSeqType     contained sequence             skipempty skipwhite nextgroup=idlD4
++  syn keyword idlBaseType    contained float double char boolean octet any skipempty skipwhite nextgroup=idlSimpDecl
++  syn keyword idlBaseTypeInt contained short long           skipempty skipwhite nextgroup=idlSimpDecl
++  syn keyword idlBaseType    contained unsigned             skipempty skipwhite nextgroup=idlBaseTypeInt
++  syn region  idlD1          contained start="<" end=">"    skipempty skipwhite nextgroup=idlSimpDecl contains=idlString,idlLiteral
++  syn keyword idlBaseType    contained string               skipempty skipwhite nextgroup=idlD1,idlSimpDecl
++  syn match   idlBaseType    contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*"  skipempty skipwhite nextgroup=idlSimpDecl
++
++  " Modules
++  syn region  idlModuleContent contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon contains=idlUnion,idlStruct,idlEnum,idlInterface,idlComment,idlTypedef,idlConst,idlException,idlModule
++  syn match   idlModuleName  contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlModuleContent,idlError,idlSemiColon
++  syn keyword idlModule      module                         skipempty skipwhite nextgroup=idlModuleName
++
++  " Interfaces
++  syn cluster idlCommentable contains=idlComment
++  syn cluster idlContentCluster contains=idlUnion,idlStruct,idlEnum,idlROAttr,idlAttr,idlOp,idlOneWayOp,idlException,idlConst,idlTypedef,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlInterfaceSections
++
++  syn region  idlInterfaceContent contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
++  syn match   idlInheritFrom2 contained ","                     skipempty skipwhite nextgroup=idlInheritFrom
++  syn match   idlInheritFrom contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlInheritFrom2,idlInterfaceContent
++  syn match   idlInherit contained ":"                            skipempty skipwhite nextgroup=idlInheritFrom
++  syn match   idlInterfaceName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlInterfaceContent,idlInherit,idlError,idlSemiColon
++  syn keyword idlInterface     interface dispinterface          skipempty skipwhite nextgroup=idlInterfaceName
++  syn keyword idlInterfaceSections contained properties methods skipempty skipwhite nextgroup=idlSectionColon,idlError
++  syn match   idlSectionColon contained ":"
++
++
++  syn match   idlLibraryName  contained  "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlLibraryContent,idlError,idlSemiColon
++  syn keyword idlLibrary      library                           skipempty skipwhite nextgroup=idlLibraryName
++  syn region  idlLibraryContent contained start="{" end="}"     skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlCommentable,idlAttributes,idlErrorSquareBracket,idlErrorBracket,idlImportlib,idlCoclass,idlTypedef,idlInterface
++
++  syn keyword idlImportlib contained importlib                  skipempty skipwhite nextgroup=idlStringArg
++  syn region idlStringArg contained start="(" end=")"           contains=idlString nextgroup=idlError,idlSemiColon,idlErrorBrace,idlErrorSquareBracket
++
++  syn keyword idlCoclass coclass contained                      skipempty skipwhite nextgroup=idlCoclassName
++  syn match   idlCoclassName "[a-zA-Z0-9_]\+" contained         skipempty skipwhite nextgroup=idlCoclassDefinition,idlError,idlSemiColon
++
++  syn region idlCoclassDefinition contained start="{" end="}"   contains=idlCoclassAttributes,idlInterface,idlErrorBracket,idlErrorSquareBracket skipempty skipwhite nextgroup=idlError,idlSemiColon
++  syn region idlCoclassAttributes contained start=+\[+ end=+]+  skipempty skipwhite nextgroup=idlInterface contains=idlErrorBracket,idlErrorBrace,idlCoclassAttribute
++  syn keyword idlCoclassAttribute contained default source
++  "syn keyword idlInterface       interface                      skipempty skipwhite nextgroup=idlInterfaceStubName
++
++  syn match idlImportString       +"\f\+"+                      skipempty skipwhite nextgroup=idlError,idlSemiColon
++  syn keyword idlImport           import                        skipempty skipwhite nextgroup=idlImportString
++
++  syn region  idlAttributes start="\[" end="\]"                 contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace,idlComment
++  syn keyword idlAttribute contained propput propget propputref id helpstring object uuid pointer_default
++  if !exists('idl_no_ms_extensions')
++  syn keyword idlAttribute contained nonextensible dual version aggregatable restricted hidden noncreatable oleautomation
++  endif
++  syn region idlAttributeParam contained start="(" end=")"      contains=idlString,idlUuid,idlLiteral,idlErrorBrace,idlErrorSquareBracket
++  " skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
++  syn match idlErrorBrace contained "}"
++  syn match idlErrorBracket contained ")"
++  syn match idlErrorSquareBracket contained "\]"
++
++  syn match idlUuid         contained +[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}+
++
++  " Raises
++  syn keyword idlRaises     contained raises               skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
++
++  " Context
++  syn keyword idlContext    contained context              skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon
++
++  " Operation
++  syn match   idlParmList   contained ","                  skipempty skipwhite nextgroup=idlOpParms
++  syn region  idlArraySize  contained start="\[" end="\]"  skipempty skipwhite nextgroup=idlArraySize,idlParmList contains=idlArraySize,idlLiteral
++  syn match   idlParmName   contained "[a-zA-Z0-9_]\+"     skipempty skipwhite nextgroup=idlParmList,idlArraySize
++  syn keyword idlParmInt    contained short long           skipempty skipwhite nextgroup=idlParmName
++  syn keyword idlParmType   contained unsigned             skipempty skipwhite nextgroup=idlParmInt
++  syn region  idlD3         contained start="<" end=">"    skipempty skipwhite nextgroup=idlParmName contains=idlString,idlLiteral
++  syn keyword idlParmType   contained string               skipempty skipwhite nextgroup=idlD3,idlParmName
++  syn keyword idlParmType   contained void float double char boolean octet any    skipempty skipwhite nextgroup=idlParmName
++  syn match   idlParmType   contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlParmName
++  syn keyword idlOpParms    contained in out inout         skipempty skipwhite nextgroup=idlParmType
++
++  if !exists('idl_no_ms_extensions')
++  syn keyword idlOpParms    contained retval optional      skipempty skipwhite nextgroup=idlParmType
++    syn match idlOpParms contained +\<\(iid_is\|defaultvalue\)\s*([^)]*)+ skipempty skipwhite nextgroup=idlParamType
+ 
+-syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
+-syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
+-syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
+-syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
+-syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
+-syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
+-syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
+-syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
+-syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
+-syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
+-
+-" Enum
+-syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
+-syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
+-syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
+-
+-" Typedef
+-syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
+-
+-if !exists('idl_no_extensions')
+-  syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
+-
+-  syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
+-
+-  syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+-  syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
+-  syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
+-  " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
+-
+-  " Enum typedef
+-  syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
+-  syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
+-  syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
++    syn keyword idlVariantType  contained BSTR VARIANT VARIANT_BOOL long short unsigned double CURRENCY DATE
++    syn region idlSafeArray contained matchgroup=idlVariantType start=+SAFEARRAY(\s*+ end=+)+ contains=idlVariantType
++  endif
+ 
+-  syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
+-endif
++  syn region  idlOpContents contained start="(" end=")"    skipempty skipwhite nextgroup=idlRaises,idlContext,idlError,idlSemiColon contains=idlOpParms,idlSafeArray,idlVariantType,@idlCommentable
++  syn match   idlOpName   contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlOpContents
++  syn keyword idlOpInt    contained short long             skipempty skipwhite nextgroup=idlOpName
++  syn region  idlD2       contained start="<" end=">"      skipempty skipwhite nextgroup=idlOpName contains=idlString,idlLiteral
++  syn keyword idlOp       contained unsigned               skipempty skipwhite nextgroup=idlOpInt
++  syn keyword idlOp       contained string                 skipempty skipwhite nextgroup=idlD2,idlOpName
++  syn keyword idlOp       contained void float double char boolean octet any  skipempty skipwhite nextgroup=idlOpName
++  syn match   idlOp       contained "[a-zA-Z0-9_]\+[ \t]*\(::[ \t]*[a-zA-Z0-9_]\+\)*" skipempty skipwhite nextgroup=idlOpName
++  syn keyword idlOp       contained void                   skipempty skipwhite nextgroup=idlOpName
++  syn keyword idlOneWayOp contained oneway                 skipempty skipwhite nextgroup=idOp
++
++  " Enum
++  syn region  idlEnumContents contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlId,idlAttributes,@idlCommentable
++  syn match   idlEnumName contained "[a-zA-Z0-9_]\+"       skipempty skipwhite nextgroup=idlEnumContents
++  syn keyword idlEnum     enum                             skipempty skipwhite nextgroup=idlEnumName,idlEnumContents
++
++  " Typedef
++  syn keyword idlTypedef typedef                          skipempty skipwhite nextgroup=idlTypedefOtherTypeQualifier,idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError
++
++  if !exists('idl_no_extensions')
++    syn keyword idlTypedefOtherTypeQualifier contained struct enum interface nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlDefAttributes,idlError skipwhite
++
++    syn region  idlDefAttributes        contained start="\[" end="\]" contains=idlAttribute,idlAttributeParam,idlErrorBracket,idlErrorBrace skipempty skipwhite nextgroup=idlDefBaseType,idlDefBaseTypeInt,idlDefSeqType,idlDefv1Enum,idlDefEnum,idlDefOtherType,idlError
++
++    syn keyword idlDefBaseType      contained float double char boolean octet any  skipempty skipwhite nextgroup=idlTypedefDecl,idlError
++    syn keyword idlDefBaseTypeInt   contained short long                           skipempty skipwhite nextgroup=idlTypedefDecl,idlError
++    syn match idlDefOtherType       contained +\<\k\+\>+ skipempty                 nextgroup=idlTypedefDecl,idlError
++    " syn keyword idlDefSeqType     contained sequence                             skipempty skipwhite nextgroup=idlD4
++
++    " Enum typedef
++    syn keyword idlDefEnum          contained enum skipempty                       skipwhite nextgroup=idlDefEnumName,idlDefEnumContents
++    syn match   idlDefEnumName      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlDefEnumContents,idlTypedefDecl
++    syn region  idlDefEnumContents  contained start="{" end="}"                    skipempty skipwhite nextgroup=idlError,idlTypedefDecl contains=idlId,idlAttributes
+ 
+-" Struct
+-syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
+-syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
+-syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
+-
+-" Exception
+-syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
+-
+-" Union
+-syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
+-syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
+-syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
+-syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
+-syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
+-syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
+-syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
+-syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
+-syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
+-
+-if !exists('idl_no_extensions')
+-  syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
+-  syn sync maxlines=1000 minlines=100
+-else
+-  syn sync lines=200
+-endif
+-" syn sync fromstart
++    syn match   idlTypedefDecl      contained "[a-zA-Z0-9_]\+"                     skipempty skipwhite nextgroup=idlError,idlSemiColon
++  endif
+ 
+-if !exists("did_idl_syntax_inits")
+-  let did_idl_syntax_inits = 1
+-  " The default methods for highlighting.  Can be overridden later
+-  command -nargs=+ HiLink hi def link <args>
+-
+-  HiLink idlInclude             Include
+-  HiLink idlPreProc             PreProc
+-  HiLink idlPreCondit           PreCondit
+-  HiLink idlDefine              Macro
+-  HiLink idlIncluded            String
+-  HiLink idlString              String
+-  HiLink idlComment             Comment
+-  HiLink idlTodo                Todo
+-  HiLink idlLiteral             Number
+-  HiLink idlUuid                Number
+-  HiLink idlType                Type
+-  HiLink idlVariantType         idlType
+-
+-  HiLink idlModule              Keyword
+-  HiLink idlInterface           Keyword
+-  HiLink idlEnum                Keyword
+-  HiLink idlStruct              Keyword
+-  HiLink idlUnion               Keyword
+-  HiLink idlTypedef             Keyword
+-  HiLink idlException           Keyword
+-  HiLink idlTypedefOtherTypeQualifier keyword
+-
+-  HiLink idlModuleName          Typedef
+-  HiLink idlInterfaceName       Typedef
+-  HiLink idlEnumName            Typedef
+-  HiLink idlStructName          Typedef
+-  HiLink idlUnionName           Typedef
+-
+-  HiLink idlBaseTypeInt         idlType
+-  HiLink idlBaseType            idlType
+-  HiLink idlSeqType             idlType
+-  HiLink idlD1                  Paren
+-  HiLink idlD2                  Paren
+-  HiLink idlD3                  Paren
+-  HiLink idlD4                  Paren
+-  "HiLink idlArraySize          Paren
+-  "HiLink idlArraySize1         Paren
+-  HiLink idlModuleContent       Paren
+-  HiLink idlUnionContent        Paren
+-  HiLink idlStructContent       Paren
+-  HiLink idlEnumContents        Paren
+-  HiLink idlInterfaceContent    Paren
+-
+-  HiLink idlSimpDecl            Identifier
+-  HiLink idlROAttr              StorageClass
+-  HiLink idlAttr                Keyword
+-  HiLink idlConst               StorageClass
+-
+-  HiLink idlOneWayOp            StorageClass
+-  HiLink idlOp                  idlType
+-  HiLink idlParmType            idlType
+-  HiLink idlOpName              Function
+-  HiLink idlOpParms             SpecialComment
+-  HiLink idlParmName            Identifier
+-  HiLink idlInheritFrom         Identifier
+-  HiLink idlAttribute           SpecialComment
+-
+-  HiLink idlId                  Constant
+-  "HiLink idlCase               Keyword
+-  HiLink idlCaseLabel           Constant
+-
+-  HiLink idlErrorBracket        Error
+-  HiLink idlErrorBrace          Error
+-  HiLink idlErrorSquareBracket  Error
+-
+-  HiLink idlImport              Keyword
+-  HiLink idlImportString        idlString
+-  HiLink idlCoclassAttribute    StorageClass
+-  HiLink idlLibrary             Keyword
+-  HiLink idlImportlib           Keyword
+-  HiLink idlCoclass             Keyword
+-  HiLink idlLibraryName         Typedef
+-  HiLink idlCoclassName         Typedef
+-  " hi idlLibraryContent guifg=red
+-  HiLink idlTypedefDecl         Typedef
+-  HiLink idlDefEnum             Keyword
+-  HiLink idlDefv1Enum           Keyword
+-  HiLink idlDefEnumName         Typedef
+-  HiLink idlDefEnumContents     Paren
+-  HiLink idlDefBaseTypeInt      idlType
+-  HiLink idlDefBaseType         idlType
+-  HiLink idlDefSeqType          idlType
+-  HiLink idlInterfaceSections   Label
++  " Struct
++  syn region  idlStructContent   contained start="{" end="}"   skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlBaseType,idlBaseTypeInt,idlSeqType,@idlCommentable,idlEnum,idlUnion
++  syn match   idlStructName      contained "[a-zA-Z0-9_]\+"    skipempty skipwhite nextgroup=idlStructContent
++  syn keyword idlStruct          struct                        skipempty skipwhite nextgroup=idlStructName
++
++  " Exception
++  syn keyword idlException       exception                     skipempty skipwhite nextgroup=idlStructName
++
++  " Union
++  syn match   idlColon            contained ":"                skipempty skipwhite nextgroup=idlCase,idlSeqType,idlBaseType,idlBaseTypeInt
++  syn region  idlCaseLabel        contained start="" skip="::" end=":"me=e-1 skipempty skipwhite nextgroup=idlColon contains=idlLiteral,idlString
++  syn keyword idlCase             contained case               skipempty skipwhite nextgroup=idlCaseLabel
++  syn keyword idlCase             contained default            skipempty skipwhite nextgroup=idlColon
++  syn region  idlUnionContent     contained start="{" end="}"  skipempty skipwhite nextgroup=idlError,idlSemiColon,idlSimpDecl contains=idlCase
++  syn region  idlSwitchType       contained start="(" end=")"  skipempty skipwhite nextgroup=idlUnionContent
++  syn keyword idlUnionSwitch      contained switch             skipempty skipwhite nextgroup=idlSwitchType
++  syn match   idlUnionName        contained "[a-zA-Z0-9_]\+"   skipempty skipwhite nextgroup=idlUnionSwitch
++  syn keyword idlUnion            union                        skipempty skipwhite nextgroup=idlUnionName
++
++  if !exists('idl_no_extensions')
++    syn sync match  idlInterfaceSync grouphere idlInterfaceContent "\<\(disp\)\=interface\>\s\+\k\+\s*:\s*\k\+\_s*{" skipempty skipwhite nextgroup=idlError,idlSemiColon contains=@idlContentCluster,@idlCommentable
++    syn sync maxlines=1000 minlines=100
++  else
++    syn sync lines=200
++  endif
++  " syn sync fromstart
+ 
+-  if exists("idlsyntax_showerror")
+-    if exists("idlsyntax_showerror_soft")
+-      hi default idlError guibg=#d0ffd0
+-    else
+-      HiLink idlError Error
++  if !exists("did_idl_syntax_inits")
++    let did_idl_syntax_inits = 1
++    " The default methods for highlighting.  Can be overridden later
++    command -nargs=+ HiLink hi def link <args>
++
++    HiLink idlInclude             Include
++    HiLink idlPreProc             PreProc
++    HiLink idlPreCondit           PreCondit
++    HiLink idlDefine              Macro
++    HiLink idlIncluded            String
++    HiLink idlString              String
++    HiLink idlComment             Comment
++    HiLink idlTodo                Todo
++    HiLink idlLiteral             Number
++    HiLink idlUuid                Number
++    HiLink idlType                Type
++    HiLink idlVariantType         idlType
++
++    HiLink idlModule              Keyword
++    HiLink idlInterface           Keyword
++    HiLink idlEnum                Keyword
++    HiLink idlStruct              Keyword
++    HiLink idlUnion               Keyword
++    HiLink idlTypedef             Keyword
++    HiLink idlException           Keyword
++    HiLink idlTypedefOtherTypeQualifier keyword
++
++    HiLink idlModuleName          Typedef
++    HiLink idlInterfaceName       Typedef
++    HiLink idlEnumName            Typedef
++    HiLink idlStructName          Typedef
++    HiLink idlUnionName           Typedef
++
++    HiLink idlBaseTypeInt         idlType
++    HiLink idlBaseType            idlType
++    HiLink idlSeqType             idlType
++    HiLink idlD1                  Paren
++    HiLink idlD2                  Paren
++    HiLink idlD3                  Paren
++    HiLink idlD4                  Paren
++    "HiLink idlArraySize          Paren
++    "HiLink idlArraySize1         Paren
++    HiLink idlModuleContent       Paren
++    HiLink idlUnionContent        Paren
++    HiLink idlStructContent       Paren
++    HiLink idlEnumContents        Paren
++    HiLink idlInterfaceContent    Paren
++
++    HiLink idlSimpDecl            Identifier
++    HiLink idlROAttr              StorageClass
++    HiLink idlAttr                Keyword
++    HiLink idlConst               StorageClass
++
++    HiLink idlOneWayOp            StorageClass
++    HiLink idlOp                  idlType
++    HiLink idlParmType            idlType
++    HiLink idlOpName              Function
++    HiLink idlOpParms             SpecialComment
++    HiLink idlParmName            Identifier
++    HiLink idlInheritFrom         Identifier
++    HiLink idlAttribute           SpecialComment
++
++    HiLink idlId                  Constant
++    "HiLink idlCase               Keyword
++    HiLink idlCaseLabel           Constant
++
++    HiLink idlErrorBracket        Error
++    HiLink idlErrorBrace          Error
++    HiLink idlErrorSquareBracket  Error
++
++    HiLink idlImport              Keyword
++    HiLink idlImportString        idlString
++    HiLink idlCoclassAttribute    StorageClass
++    HiLink idlLibrary             Keyword
++    HiLink idlImportlib           Keyword
++    HiLink idlCoclass             Keyword
++    HiLink idlLibraryName         Typedef
++    HiLink idlCoclassName         Typedef
++    " hi idlLibraryContent guifg=red
++    HiLink idlTypedefDecl         Typedef
++    HiLink idlDefEnum             Keyword
++    HiLink idlDefv1Enum           Keyword
++    HiLink idlDefEnumName         Typedef
++    HiLink idlDefEnumContents     Paren
++    HiLink idlDefBaseTypeInt      idlType
++    HiLink idlDefBaseType         idlType
++    HiLink idlDefSeqType          idlType
++    HiLink idlInterfaceSections   Label
++
++    if exists("idlsyntax_showerror")
++      if exists("idlsyntax_showerror_soft")
++        hi default idlError guibg=#d0ffd0
++      else
++        HiLink idlError Error
++      endif
+     endif
++    delcommand HiLink
+   endif
+-  delcommand HiLink
+-endif
+-
+-let b:current_syntax = "idl"
+ 
++  let b:current_syntax = "idl"
++finally
++  let &cpo = s:cpo_save
++  unlet s:cpo_save
++endtry
+ " vim: sw=2 et
+diff -Naur vim73.orig/runtime/syntax/idlang.vim vim73/runtime/syntax/idlang.vim
+--- vim73.orig/runtime/syntax/idlang.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/idlang.vim	2013-06-07 17:07:23.582274673 +0000
+@@ -1,6 +1,6 @@
+ " Interactive Data Language syntax file (IDL, too  [:-)]
+ " Maintainer: Aleksandar Jelenak <ajelenak AT yahoo.com>
+-" Last change: 2003 Apr 25
++" Last change: 2011 Apr 11
+ " Created by: Hermann Rochholz <Hermann.Rochholz AT gmx.de>
+ 
+ " Remove any old syntax stuff hanging around
+@@ -113,7 +113,7 @@
+ syn keyword idlangRoutine F_PDF FACTORIAL FFT FILE_CHMOD FILE_DELETE
+ syn keyword idlangRoutine FILE_EXPAND_PATH FILE_MKDIR FILE_TEST FILE_WHICH
+ syn keyword idlangRoutine FILEPATH FINDFILE FINDGEN FINITE FIX FLICK FLOAT
+-syn keyword idlangRoutine FLOOR FLOW3 FLTARR FLUSH FOR FORMAT_AXIS_VALUES
++syn keyword idlangRoutine FLOOR FLOW3 FLTARR FLUSH FORMAT_AXIS_VALUES
+ syn keyword idlangRoutine FORWARD_FUNCTION FREE_LUN FSTAT FULSTR FUNCT
+ syn keyword idlangRoutine FV_TEST FX_ROOT FZ_ROOTS GAMMA GAMMA_CT
+ syn keyword idlangRoutine GAUSS_CVF GAUSS_PDF GAUSS2DFIT GAUSSFIT GAUSSINT
+diff -Naur vim73.orig/runtime/syntax/ist.vim vim73/runtime/syntax/ist.vim
+--- vim73.orig/runtime/syntax/ist.vim	2010-05-15 11:03:55.000000000 +0000
++++ vim73/runtime/syntax/ist.vim	2013-06-07 17:07:23.718940949 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Makeindex style file, *.ist
+ " Maintainer:	Peter Meszaros <pmeszaros@effice.hu>
+-" Last Change:	May 4, 2001
++" Last Change:	2012 Jan 08 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ if version >= 600
+   setlocal iskeyword=$,@,48-57,_
+ else
+@@ -67,4 +70,6 @@
+ 
+ let b:current_syntax = "ist"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8 sw=2
+diff -Naur vim73.orig/runtime/syntax/jam.vim vim73/runtime/syntax/jam.vim
+--- vim73.orig/runtime/syntax/jam.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/jam.vim	2013-06-07 17:07:23.732274245 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	JAM
+ " Maintainer:	Ralf Lemke (ralflemk@t-online.de)
+-" Last change:	09-10-2000
++" Last change:	2012 Jan 08 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ if version >= 600
+   setlocal iskeyword=@,48-57,_,-
+ else
+@@ -249,4 +252,6 @@
+ 
+ let b:current_syntax = "jam"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/java.vim vim73/runtime/syntax/java.vim
+--- vim73.orig/runtime/syntax/java.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/java.vim	2013-06-07 17:07:23.755607511 +0000
+@@ -1,7 +1,8 @@
+-" Vim syntax file " Language:	  Java
++" Vim syntax file
++" Language:	Java
+ " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
+ " URL:		http://www.fleiner.com/vim/syntax/java.vim
+-" Last Change:	2010 March 23
++" Last Change:	2012 Oct 05
+ 
+ " Please check :help java.vim for comments on some of the options available.
+ 
+@@ -17,6 +18,9 @@
+   syn region javaFold start="{" end="}" transparent fold
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " don't use standard HiLink, it will not work with included syntax files
+ if version < 508
+   command! -nargs=+ JavaHiLink hi link <args>
+@@ -26,7 +30,8 @@
+ 
+ " some characters that cannot be in a java program (outside a string)
+ syn match javaError "[\\@`]"
+-syn match javaError "<<<\|\.\.\|=>\|<>\|||=\|&&=\|[^-]->\|\*\/"
++syn match javaError "<<<\|\.\.\|=>\|||=\|&&=\|[^-]->\|\*\/"
++
+ syn match javaOK "\.\.\."
+ 
+ " use separate name so that it can be deleted in javacc.vim
+@@ -120,11 +125,8 @@
+ syn match   javaUserLabel	"^\s*[_$a-zA-Z][_$a-zA-Z0-9_]*\s*:"he=e-1 contains=javaLabel
+ syn keyword javaLabel		default
+ 
+-if !exists("java_allow_cpp_keywords")
+-  syn keyword javaError auto delete extern friend inline redeclared
+-  syn keyword javaError register signed sizeof struct template typedef union
+-  syn keyword javaError unsigned operator
+-endif
++" highlighting C++ keywords as errors removed, too many people find it
++" annoying.  Was: if !exists("java_allow_cpp_keywords")
+ 
+ " The following cluster contains all java groups except the contained ones
+ syn cluster javaTop add=javaExternal,javaError,javaError,javaBranch,javaLabelRegion,javaLabel,javaConditional,javaRepeat,javaBoolean,javaConstant,javaTypedef,javaOperator,javaType,javaType,javaStatement,javaStorageClass,javaAssert,javaExceptions,javaMethodDecl,javaClassDecl,javaClassDecl,javaClassDecl,javaScopeDecl,javaError,javaError2,javaUserLabel,javaLangObject,javaAnnotation,javaVarArg
+@@ -164,7 +166,7 @@
+   syn region  javaDocComment	start="/\*\*"  end="\*/" keepend contains=javaCommentTitle,@javaHtml,javaDocTags,javaDocSeeTag,javaTodo,@Spell
+   syn region  javaCommentTitle	contained matchgroup=javaDocComment start="/\*\*"   matchgroup=javaCommentTitle keepend end="\.$" end="\.[ \t\r<&]"me=e-1 end="[^{]@"me=s-2,he=s-1 end="\*/"me=s-1,he=s-1 contains=@javaHtml,javaCommentStar,javaTodo,@Spell,javaDocTags,javaDocSeeTag
+ 
+-  syn region javaDocTags	 contained start="{@\(link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
++  syn region javaDocTags	 contained start="{@\(code\|link\|linkplain\|inherit[Dd]oc\|doc[rR]oot\|value\)" end="}"
+   syn match  javaDocTags	 contained "@\(param\|exception\|throws\|since\)\s\+\S\+" contains=javaDocParam
+   syn match  javaDocParam	 contained "\s\S\+"
+   syn match  javaDocTags	 contained "@\(version\|author\|return\|deprecated\|serial\|serialField\|serialData\)\>"
+@@ -344,5 +346,7 @@
+ endif
+ 
+ let b:spell_options="contained"
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ 
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/javacc.vim vim73/runtime/syntax/javacc.vim
+--- vim73.orig/runtime/syntax/javacc.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/javacc.vim	2013-06-07 17:07:23.768940807 +0000
+@@ -2,7 +2,7 @@
+ " Language:	JavaCC, a Java Compiler Compiler written by JavaSoft
+ " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
+ " URL:		http://www.fleiner.com/vim/syntax/javacc.vim
+-" Last Change:	2001 Jun 20
++" Last Change:	2012 Oct 05
+ 
+ " Uses java.vim, and adds a few special things for JavaCC Parser files.
+ " Those files usually have the extension  *.jj
+@@ -15,6 +15,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " source the java.vim file
+ if version < 600
+   source <sfile>:p:h/java.vim
+@@ -44,7 +47,7 @@
+ syn keyword javaccPackages COMMON_TOKEN_ACTION IGNORE_CASE CHOICE_AMBIGUITY_CHECK
+ syn keyword javaccPackages OTHER_AMBIGUITY_CHECK STATIC LOOKAHEAD ERROR_REPORTING
+ syn keyword javaccPackages USER_TOKEN_MANAGER  USER_CHAR_STREAM JAVA_UNICODE_ESCAPE
+-syn keyword javaccPackages UNICODE_INPUT
++syn keyword javaccPackages UNICODE_INPUT JDK_VERSION
+ syn match javaccPackages "PARSER_END([^)]*)"
+ syn match javaccPackages "PARSER_BEGIN([^)]*)"
+ syn match javaccSpecToken "<EOF>"
+@@ -73,5 +76,7 @@
+ endif
+ 
+ let b:current_syntax = "javacc"
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ 
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/javascript.vim vim73/runtime/syntax/javascript.vim
+--- vim73.orig/runtime/syntax/javascript.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/javascript.vim	2013-06-07 17:07:23.785607426 +0000
+@@ -7,7 +7,7 @@
+ "		(ss) repaired several quoting and grouping glitches
+ "		(ss) fixed regex parsing issue with multiple qualifiers [gi]
+ "		(ss) additional factoring of keywords, globals, and members
+-" Last Change:	2010 Mar 25
++" Last Change:	2012 Oct 05
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -23,6 +23,9 @@
+   let main_syntax = 'javascript'
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Drop fold if it set but vim doesn't support it.
+ if version < 600 && exists("javaScript_fold")
+   unlet javaScript_fold
+@@ -131,5 +134,7 @@
+ if main_syntax == 'javascript'
+   unlet main_syntax
+ endif
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ 
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/jovial.vim vim73/runtime/syntax/jovial.vim
+--- vim73.orig/runtime/syntax/jovial.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/jovial.vim	2013-06-07 17:07:23.832273959 +0000
+@@ -0,0 +1,110 @@
++" Vim syntax file
++" Language: JOVIAL J73
++" Version: 1.2
++" Maintainer: Paul McGinnis <paulmcg@aol.com>
++" Last Change: 2011/06/17
++" Remark: Based on MIL-STD-1589C for JOVIAL J73 language
++
++" Quit when a (custom) syntax file was already loaded
++if exists("b:current_syntax")
++  finish
++endif
++
++syn case ignore
++
++syn keyword jovialTodo TODO FIXME XXX contained
++
++" JOVIAL beads - first digit is number of bits, [0-9A-V] is the bit value
++" representing 0-31 (for 5 bits on the bead)
++syn match jovialBitConstant "[1-5]B'[0-9A-V]'"
++
++syn match jovialNumber "\<\d\+\>"
++
++syn match jovialFloat "\d\+E[-+]\=\d\+"
++syn match jovialFloat "\d\+\.\d*\(E[-+]\=\d\+\)\="
++syn match jovialFloat "\.\d\+\(E[-+]\=\d\+\)\="
++
++syn region jovialComment start=/"/ end=/"/ contains=jovialTodo
++syn region jovialComment start=/%/ end=/%/ contains=jovialTodo
++
++" JOVIAL variable names. This rule is to prevent conflicts with strings.
++" Handle special case where ' character can be part of a JOVIAL variable name.
++syn match jovialIdentifier "[A-Z\$][A-Z0-9'\$]\+"
++
++syn region jovialString start="\s*'" skip=/''/ end=/'/ oneline
++
++" JOVIAL compiler directives -- see Section 9 in MIL-STD-1589C
++syn region jovialPreProc start="\s*![A-Z]\+" end=/;/
++
++syn keyword jovialOperator AND OR NOT XOR EQV MOD
++
++" See Section 2.1 in MIL-STD-1589C for data types
++syn keyword jovialType ITEM B C P V
++syn match jovialType "\<S\(,R\|,T\|,Z\)\=\>"
++syn match jovialType "\<U\(,R\|,T\|,Z\)\=\>"
++syn match jovialType "\<F\(,R\|,T\|,Z\)\=\>"
++syn match jovialType "\<A\(,R\|,T\|,Z\)\=\>"
++
++syn keyword jovialStorageClass STATIC CONSTANT PARALLEL BLOCK N M D W
++
++syn keyword jovialStructure TABLE STATUS
++
++syn keyword jovialConstant NULL
++
++syn keyword jovialBoolean FALSE TRUE
++
++syn keyword jovialTypedef TYPE
++
++syn keyword jovialStatement ABORT BEGIN BY BYREF BYRES BYVAL CASE COMPOOL
++syn keyword jovialStatement DEF DEFAULT DEFINE ELSE END EXIT FALLTHRU FOR
++syn keyword jovialStatement GOTO IF INLINE INSTANCE LABEL LIKE OVERLAY POS
++syn keyword jovialStatement PROC PROGRAM REC REF RENT REP RETURN START STOP
++syn keyword jovialStatement TERM THEN WHILE
++
++" JOVIAL extensions, see section 8.2.2 in MIL-STD-1589C
++syn keyword jovialStatement CONDITION ENCAPSULATION EXPORTS FREE HANDLER IN INTERRUPT NEW
++syn keyword jovialStatement PROTECTED READONLY REGISTER SIGNAL TO UPDATE WITH WRITEONLY ZONE
++
++" implementation specific constants and functions, see section 1.4 in MIL-STD-1589C
++syn keyword jovialConstant BITSINBYTE BITSINWORD LOCSINWORD
++syn keyword jovialConstant BYTESINWORD BITSINPOINTER INTPRECISION
++syn keyword jovialConstant FLOATPRECISION FIXEDPRECISION FLOATRADIX
++syn keyword jovialConstant MAXFLOATPRECISION MAXFIXEDPRECISION
++syn keyword jovialConstant MAXINTSIZE MAXBYTES MAXBITS
++syn keyword jovialConstant MAXTABLESIZE MAXSTOP MINSTOP MAXSIGDIGITS
++syn keyword jovialFunction BYTEPOS MAXINT MININT
++syn keyword jovialFunction IMPLFLOATPRECISION IMPLFIXEDPRECISION IMPLINTSIZE
++syn keyword jovialFunction MINSIZE MINFRACTION MINSCALE MINRELPRECISION
++syn keyword jovialFunction MAXFLOAT MINFLOAT FLOATRELPRECISION
++syn keyword jovialFunction FLOATUNDERFLOW MAXFIXED MINFIXED
++
++" JOVIAL built-in functions
++syn keyword jovialFunction LOC NEXT BIT BYTE SHIFTL SHIFTR ABS SGN BITSIZE
++syn keyword jovialFunction BYTESIZE WORDSIZE LBOUND UBOUND NWDSEN FIRST
++syn keyword jovialFunction LAST NENT
++
++" Define the default highlighting.
++hi def link jovialBitConstant Number
++hi def link jovialBoolean Boolean
++hi def link jovialComment Comment
++hi def link jovialConstant Constant
++hi def link jovialFloat Float
++hi def link jovialFunction Function
++" No color highlighting for JOVIAL identifiers. See above,
++" this is to prevent confusion with JOVIAL strings
++"hi def link jovialIdentifier Identifier
++hi def link jovialNumber Number
++hi def link jovialOperator Operator
++hi def link jovialPreProc PreProc
++hi def link jovialStatement Statement
++hi def link jovialStorageClass StorageClass
++hi def link jovialString String
++hi def link jovialStructure Structure
++hi def link jovialTodo Todo
++hi def link jovialType Type
++hi def link jovialTypedef Typedef
++
++
++let b:current_syntax = "jovial"
++
++" vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/kwt.vim vim73/runtime/syntax/kwt.vim
+--- vim73.orig/runtime/syntax/kwt.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/kwt.vim	2013-06-07 17:07:23.868940521 +0000
+@@ -1,6 +1,6 @@
+ " Vim syntax file
+ " Language:	kimwitu++
+-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
++" Maintainer:	Michael Piefel <entwurf@piefel.de>
+ " Last Change:	2 May 2001
+ 
+ " For version 5.x: Clear all syntax items
+diff -Naur vim73.orig/runtime/syntax/lex.vim vim73/runtime/syntax/lex.vim
+--- vim73.orig/runtime/syntax/lex.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/lex.vim	2013-06-07 17:07:23.958940264 +0000
+@@ -1,8 +1,8 @@
+ " Vim syntax file
+ " Language:	Lex
+-" Maintainer:	Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+-" Last Change:	Sep 11, 2009
+-" Version:	10
++" Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
++" Last Change:	Nov 14, 2012
++" Version:	14
+ " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
+ "
+ " Option:
+@@ -17,28 +17,23 @@
+ endif
+ 
+ " Read the C/C++ syntax to start with
+-if version >= 600
+-  if exists("lex_uses_cpp")
+-    runtime! syntax/cpp.vim
+-  else
+-    runtime! syntax/c.vim
+-  endif
+-  unlet b:current_syntax
+-else
+-  if exists("lex_uses_cpp")
+-    so <sfile>:p:h/cpp.vim
+-  else
+-    so <sfile>:p:h/c.vim
++let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:lex_uses_cpp")? "/cpp.vim" : "/c.vim"))
++if !filereadable(s:Cpath)
++ for s:Cpath in split(globpath(&rtp,(exists("g:lex_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
++  if filereadable(fnameescape(s:Cpath))
++   let s:Cpath= fnameescape(s:Cpath)
++   break
+   endif
++ endfor
+ endif
++exe "syn include @lexCcode ".s:Cpath
+ 
+ " --- ========= ---
+ " --- Lex stuff ---
+ " --- ========= ---
+ 
+-"I'd prefer to use lex.* , but vim doesn't handle forward definitions yet
+-syn cluster lexListGroup		contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatString,lexPatTag,lexPatTag,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,lexPatCode,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
+-syn cluster lexListPatCodeGroup	contains=lexAbbrvBlock,lexAbbrv,lexAbbrv,lexAbbrvRegExp,lexInclude,lexPatBlock,lexPat,lexBrace,lexPatTag,lexPatTag,lexPatTagZoneStart,lexPatComment,lexPatCodeLine,lexMorePat,lexPatSep,lexSlashQuote,cInParen,cUserLabel,cOctalZero,cCppSkip,cErrInBracket,cErrInParen,cOctalError,cCppOut2,cCommentStartError,cParenError
++" Options Section
++syn match lexOptions '^%\s*option\>.*$' contains=lexPatString
+ 
+ " Abbreviations Section
+ if has("folding")
+@@ -50,50 +45,69 @@
+ syn match  lexAbbrv		"^%[sx]"					contained
+ syn match  lexAbbrvRegExp	"\s\S.*$"lc=1				contained nextgroup=lexAbbrv,lexInclude
+ if has("folding")
+- syn region lexInclude	fold matchgroup=lexSep	start="^%{"	end="%}"	contained	contains=ALLBUT,@lexListGroup
++ syn region lexInclude	fold matchgroup=lexSep	start="^%{"	end="%}"	contained	contains=@lexCcode
+  syn region lexAbbrvComment	fold			start="^\s\+/\*"	end="\*/"	contains=@Spell
++ syn region lexAbbrvComment	fold			start="\%^/\*"	end="\*/"	contains=@Spell
+  syn region lexStartState	fold matchgroup=lexAbbrv	start="^%\a\+"	end="$"	contained
+ else
+- syn region lexInclude	matchgroup=lexSep		start="^%{"	end="%}"	contained	contains=ALLBUT,@lexListGroup
++ syn region lexInclude	matchgroup=lexSep		start="^%{"	end="%}"	contained	contains=@lexCcode
+  syn region lexAbbrvComment				start="^\s\+/\*"	end="\*/"	contains=@Spell
++ syn region lexAbbrvComment				start="\%^/\*"	end="\*/"	contains=@Spell
+  syn region lexStartState	matchgroup=lexAbbrv		start="^%\a\+"	end="$"	contained
+ endif
+ 
+ "%% : Patterns {Actions}
+ if has("folding")
+- syn region lexPatBlock	fold matchgroup=Todo	start="^%%$" matchgroup=Todo	end="^%%$"	skipnl skipwhite	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
+- syn region lexPat		fold			start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1		contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
++ syn region lexPatBlock	fold matchgroup=Todo	start="^%%$" matchgroup=Todo	end="^%\ze%$"	skipnl	skipwhite	nextgroup=lexFinalCodeBlock	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude
++ syn region lexPat		fold			start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1	skipwhite	contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
++ syn region lexPatInclude	fold matchgroup=lexSep	start="^%{"	end="%}"	contained	contains=lexPatCode
+  syn region lexBrace	fold			start="\[" skip=+\\\\\|\\+	end="]"			contained
+  syn region lexPatString	fold matchgroup=String	start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
+ else
+- syn region lexPatBlock	matchgroup=Todo		start="^%%$" matchgroup=Todo	end="^%%$"	skipnl skipwhite	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat
+- syn region lexPat					start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1		contained nextgroup=lexMorePat,lexPatSep contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
++ syn region lexPatBlock	matchgroup=Todo		start="^%%$" matchgroup=Todo	end="^%%$"	skipnl	skipwhite	nextgroup=lexFinalCodeBlock	contains=lexPatTag,lexPatTagZone,lexPatComment,lexPat,lexPatInclude
++ syn region lexPat					start=+\S+ skip="\\\\\|\\."	end="\s"me=e-1	skipwhite	contained nextgroup=lexMorePat,lexPatSep,lexPattern contains=lexPatTag,lexPatString,lexSlashQuote,lexBrace
++ syn region lexPatInclude	matchgroup=lexSep		start="^%{"	end="%}"	contained	contains=lexPatCode
+  syn region lexBrace				start="\[" skip=+\\\\\|\\+	end="]"			contained
+  syn region lexPatString	matchgroup=String		start=+"+	skip=+\\\\\|\\"+	matchgroup=String end=+"+	contained
+ endif
+ syn match  lexPatTag	"^<\I\i*\(,\I\i*\)*>"			contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
+-syn match  lexPatTagZone	"^<\I\i*\(,\I\i*\)*>\s*\ze{"		contained nextgroup=lexPatTagZoneStart
++syn match  lexPatTagZone	"^<\I\i*\(,\I\i*\)*>\s\+\ze{"			contained nextgroup=lexPatTagZoneStart
+ syn match  lexPatTag	+^<\I\i*\(,\I\i*\)*>*\(\\\\\)*\\"+		contained nextgroup=lexPat,lexPatTag,lexMorePat,lexPatSep
++
++" Lex Patterns
++syn region lexPattern	start='[^ \t{}]'	end="$"			contained	contains=lexPatRange
++syn region lexPatRange	matchgroup=Delimiter	start='\['	skip='\\\\\|\\.'	end='\]'	contains=lexEscape
++syn match  lexEscape	'\%(\\\\\)*\\.'				contained
++
+ if has("folding")
+- syn region  lexPatTagZoneStart matchgroup=lexPatTag	fold	start='{' end='}'	contained contains=lexPat,lexPatComment
++ syn region lexPatTagZoneStart matchgroup=lexPatTag	fold	start='{' end='}'	contained contains=lexPat,lexPatComment
+  syn region lexPatComment	start="\s\+/\*" end="\*/"	fold	skipnl	contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
+ else
+- syn region  lexPatTagZoneStart matchgroup=lexPatTag		start='{' end='}'	contained contains=lexPat,lexPatComment
++ syn region lexPatTagZoneStart matchgroup=lexPatTag		start='{' end='}'	contained contains=lexPat,lexPatComment
+  syn region lexPatComment	start="\s\+/\*" end="\*/"		skipnl	contained contains=cTodo skipwhite nextgroup=lexPatComment,lexPat,@Spell
+ endif
+-syn match  lexPatCodeLine	".*$"					contained contains=ALLBUT,@lexListGroup
++syn match  lexPatCodeLine	"[^{\[].*"				contained contains=@lexCcode
+ syn match  lexMorePat	"\s*|\s*$"			skipnl	contained nextgroup=lexPat,lexPatTag,lexPatComment
+ syn match  lexPatSep	"\s\+"					contained nextgroup=lexMorePat,lexPatCode,lexPatCodeLine
+ syn match  lexSlashQuote	+\(\\\\\)*\\"+				contained
+ if has("folding")
+- syn region lexPatCode matchgroup=Delimiter start="{" end="}"	fold	skipnl contained contains=ALLBUT,@lexListPatCodeGroup
++ syn region lexPatCode matchgroup=Delimiter start="{" end="}"	fold	skipnl contained contains=@lexCcode,lexCFunctions
+ else
+- syn region lexPatCode matchgroup=Delimiter start="{" end="}"		skipnl contained contains=ALLBUT,@lexListPatCodeGroup
++ syn region lexPatCode matchgroup=Delimiter start="{" end="}"	skipnl	contained contains=@lexCcode,lexCFunctions
+ endif
+ 
++" Lex "functions" which may appear in C/C++ code blocks
+ syn keyword lexCFunctions	BEGIN	input	unput	woutput	yyleng	yylook	yytext
+ syn keyword lexCFunctions	ECHO	output	winput	wunput	yyless	yymore	yywrap
+ 
++" %%
++"  lexAbbrevBlock
++" %%
++"  lexPatBlock
++" %%
++"  lexFinalCodeBlock
++syn region lexFinalCodeBlock matchgroup=Todo start="%$"me=e-1 end="\%$"	contained	contains=@lexCcode
++
+ " <c.vim> includes several ALLBUTs; these have to be treated so as to exclude lex* groups
+ syn cluster cParenGroup	add=lex.*
+ syn cluster cDefineGroup	add=lex.*
+@@ -102,26 +116,27 @@
+ 
+ " Synchronization
+ syn sync clear
+-syn sync minlines=300
++syn sync minlines=500
+ syn sync match lexSyncPat	grouphere  lexPatBlock	"^%[a-zA-Z]"
+ syn sync match lexSyncPat	groupthere lexPatBlock	"^<$"
+ syn sync match lexSyncPat	groupthere lexPatBlock	"^%%$"
+ 
+ " The default highlighting.
+ hi def link lexAbbrvComment	lexPatComment
+-hi def link lexBrace	lexPat
+-hi def link lexPatTagZone	lexPatTag
+-hi def link lexSlashQuote	lexPat
+-
+ hi def link lexAbbrvRegExp	Macro
+ hi def link lexAbbrv	SpecialChar
++hi def link lexBrace	lexPat
+ hi def link lexCFunctions	Function
++hi def link lexCstruct	cStructure
+ hi def link lexMorePat	SpecialChar
++hi def link lexOptions	PreProc
+ hi def link lexPatComment	Comment
+ hi def link lexPat		Function
+ hi def link lexPatString	Function
+ hi def link lexPatTag	Special
++hi def link lexPatTagZone	lexPatTag
+ hi def link lexSep		Delimiter
++hi def link lexSlashQuote	lexPat
+ hi def link lexStartState	Statement
+ 
+ let b:current_syntax = "lex"
+diff -Naur vim73.orig/runtime/syntax/liquid.vim vim73/runtime/syntax/liquid.vim
+--- vim73.orig/runtime/syntax/liquid.vim	2010-05-21 09:47:22.000000000 +0000
++++ vim73/runtime/syntax/liquid.vim	2013-06-07 17:07:24.035606712 +0000
+@@ -2,7 +2,7 @@
+ " Language:     Liquid
+ " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
+ " Filenames:    *.liquid
+-" Last Change:	2010 May 21
++" Last Change:	2013 May 30
+ 
+ if exists('b:current_syntax')
+   finish
+@@ -71,8 +71,9 @@
+ syn region  liquidStatement  matchgroup=liquidDelimiter start="{%" end="%}" contains=@liquidStatement containedin=ALLBUT,@liquidExempt keepend
+ syn region  liquidExpression matchgroup=liquidDelimiter start="{{" end="}}" contains=@liquidExpression  containedin=ALLBUT,@liquidExempt keepend
+ syn region  liquidComment    matchgroup=liquidDelimiter start="{%\s*comment\s*%}" end="{%\s*endcomment\s*%}" contains=liquidTodo,@Spell containedin=ALLBUT,@liquidExempt keepend
++syn region  liquidRaw        matchgroup=liquidDelimiter start="{%\s*raw\s*%}" end="{%\s*endraw\s*%}" contains=TOP,@liquidExempt containedin=ALLBUT,@liquidExempt keepend
+ 
+-syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,@liquidStatement,liquidYamlHead
++syn cluster liquidExempt contains=liquidStatement,liquidExpression,liquidComment,liquidRaw,@liquidStatement,liquidYamlHead
+ syn cluster liquidStatement contains=liquidConditional,liquidRepeat,liquidKeyword,@liquidExpression
+ syn cluster liquidExpression contains=liquidOperator,liquidString,liquidNumber,liquidFloat,liquidBoolean,liquidNull,liquidEmpty,liquidPipe,liquidForloop
+ 
+diff -Naur vim73.orig/runtime/syntax/lisp.vim vim73/runtime/syntax/lisp.vim
+--- vim73.orig/runtime/syntax/lisp.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/lisp.vim	2013-06-07 17:07:24.052273331 +0000
+@@ -1,8 +1,8 @@
+ " Vim syntax file
+ " Language:    Lisp
+ " Maintainer:  Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+-" Last Change: Mar 05, 2009
+-" Version:     21
++" Last Change: Nov 16, 2010
++" Version:     22
+ " URL:	       http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
+ "
+ "  Thanks to F Xavier Noria for a list of 978 Common Lisp symbols
+@@ -32,7 +32,7 @@
+ " ---------------------------------------------------------------------
+ " Clusters: {{{1
+ syn cluster			lispAtomCluster		contains=lispAtomBarSymbol,lispAtomList,lispAtomNmbr0,lispComment,lispDecl,lispFunc,lispLeadWhite
+-syn cluster			lispBaseListCluster	contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispSpecial,lispSymbol,lispVar,lispLeadWhite
++syn cluster			lispBaseListCluster	contains=lispAtom,lispAtomBarSymbol,lispAtomMark,lispBQList,lispBarSymbol,lispComment,lispConcat,lispDecl,lispFunc,lispKey,lispList,lispNumber,lispEscapeSpecial,lispSymbol,lispVar,lispLeadWhite
+ if exists("g:lisp_instring")
+  syn cluster			lispListCluster		contains=@lispBaseListCluster,lispString,lispInString,lispInStringString
+ else
+@@ -68,7 +68,7 @@
+ syn match lispAtom			"'[^ \t()]\+"			contains=lispAtomMark
+ syn match lispAtomBarSymbol		!'|..\{-}|!			contains=lispAtomMark
+ syn region lispAtom			start=+'"+			skip=+\\"+ end=+"+
+-syn region lispAtomList			contained			matchgroup=Special start="("	skip="|.\{-}|" matchgroup=Special end=")"	contains=@lispAtomCluster,lispString,lispSpecial
++syn region lispAtomList			contained			matchgroup=Special start="("	skip="|.\{-}|" matchgroup=Special end=")"	contains=@lispAtomCluster,lispString,lispEscapeSpecial
+ syn match lispAtomNmbr			contained			"\<\d\+"
+ syn match lispLeadWhite			contained			"^\s\+"
+ 
+@@ -537,16 +537,16 @@
+ syn match lispNumber		"-\=\(\.\d\+\|\d\+\(\.\d*\)\=\)\([dDeEfFlL][-+]\=\d\+\)\="
+ syn match lispNumber		"-\=\(\d\+/\d\+\)"
+ 
+-syn match lispSpecial		"\*\w[a-z_0-9-]*\*"
+-syn match lispSpecial		!#|[^()'`,"; \t]\+|#!
+-syn match lispSpecial		!#x\x\+!
+-syn match lispSpecial		!#o\o\+!
+-syn match lispSpecial		!#b[01]\+!
+-syn match lispSpecial		!#\\[ -}\~]!
+-syn match lispSpecial		!#[':][^()'`,"; \t]\+!
+-syn match lispSpecial		!#([^()'`,"; \t]\+)!
+-syn match lispSpecial		!#\\\%(Space\|Newline\|Tab\|Page\|Rubout\|Linefeed\|Return\|Backspace\)!
+-syn match lispSpecial		"\<+[a-zA-Z_][a-zA-Z_0-9-]*+\>"
++syn match lispEscapeSpecial		"\*\w[a-z_0-9-]*\*"
++syn match lispEscapeSpecial		!#|[^()'`,"; \t]\+|#!
++syn match lispEscapeSpecial		!#x\x\+!
++syn match lispEscapeSpecial		!#o\o\+!
++syn match lispEscapeSpecial		!#b[01]\+!
++syn match lispEscapeSpecial		!#\\[ -}\~]!
++syn match lispEscapeSpecial		!#[':][^()'`,"; \t]\+!
++syn match lispEscapeSpecial		!#([^()'`,"; \t]\+)!
++syn match lispEscapeSpecial		!#\\\%(Space\|Newline\|Tab\|Page\|Rubout\|Linefeed\|Return\|Backspace\)!
++syn match lispEscapeSpecial		"\<+[a-zA-Z_][a-zA-Z_0-9-]*+\>"
+ 
+ syn match lispConcat		"\s\.\s"
+ syn match lispParenError	")"
+@@ -585,7 +585,7 @@
+   HiLink lispMark		Delimiter
+   HiLink lispNumber		Number
+   HiLink lispParenError		Error
+-  HiLink lispSpecial		Type
++  HiLink lispEscapeSpecial	Type
+   HiLink lispString		String
+   HiLink lispTodo		Todo
+   HiLink lispVar		Statement
+diff -Naur vim73.orig/runtime/syntax/logindefs.vim vim73/runtime/syntax/logindefs.vim
+--- vim73.orig/runtime/syntax/logindefs.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/logindefs.vim	2013-06-07 17:07:24.092273217 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         login.defs(5) configuration file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2006-04-19
++" Latest Revision:  2010-11-29
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -10,83 +10,163 @@
+ let s:cpo_save = &cpo
+ set cpo&vim
+ 
+-syn keyword logindefsTodo       contained TODO FIXME XXX NOTE
+-
+-syn region  logindefsComment    display oneline start='^\s*#' end='$'
+-                                \ contains=logindefsTodo,@Spell
+-
+-syn match   logindefsString     contained '[[:graph:]]\+'
+-
+-syn match   logindefsPath       contained '[[:graph:]]\+'
+-
+-syn match   logindefsPaths      contained '[[:graph:]]\+'
+-                                \ nextgroup=logindefsPathDelim
+-
+-syn match   logindefsPathDelim  contained ':' nextgroup=logindefsPaths
+-
+-syn keyword logindefsBoolean    contained yes no
+-
+-syn match   logindefsDecimal    contained '\<\d\+\>'
+-
+-syn match   logindefsOctal      contained display '\<0\o\+\>'
+-                                \ contains=logindefsOctalZero
+-syn match   logindefsOctalZero  contained display '\<0'
+-syn match   logindefsOctalError contained display '\<0\o*[89]\d*\>'
+-
+-syn match   logindefsHex        contained display '\<0x\x\+\>'
+-
+-syn cluster logindefsNumber     contains=logindefsDecimal,logindefsOctal,
+-                                \ logindefsOctalError,logindefsHex
+-
+-syn match   logindefsBegin      display '^'
+-                                \ nextgroup=logindefsKeyword,logindefsComment
+-                                \ skipwhite
+-
+-syn keyword logindefsKeyword    contained CHFN_AUTH CLOSE_SESSIONS CREATE_HOME
+-                                \ DEFAULT_HOME FAILLOG_ENAB LASTLOG_ENAB
+-                                \ LOG_OK_LOGINS LOG_UNKFAIL_ENAB MAIL_CHECK_ENAB
+-                                \ MD5_CRYPT_ENAB OBSCURE_CHECKS_ENAB
+-                                \ PASS_ALWAYS_WARN PORTTIME_CHECKS_ENAB
+-                                \ QUOTAS_ENAB SU_WHEEL_ONLY SYSLOG_SG_ENAB
+-                                \ SYSLOG_SU_ENAB USERGROUPS_ENAB
+-                                \ nextgroup=logindefsBoolean skipwhite
+-
+-syn keyword logindefsKeyword    contained CHFN_RESTRICT CONSOLE CONSOLE_GROUPS
+-                                \ ENV_TZ ENV_HZ FAKE_SHELL SU_NAME LOGIN_STRING
+-                                \ NOLOGIN_STR TTYGROUP USERDEL_CMD
+-                                \ nextgroup=logindefsString skipwhite
+-
+-syn keyword logindefsKeyword    contained ENVIRON_FILE FTMP_FILE HUSHLOGIN_FILE
+-                                \ ISSUE_FILE MAIL_DIR MAIL_FILE NOLOGINS_FILE
+-                                \ NOLOGINS_FILE TTYTYPE_FILE QMAIL_DIR
+-                                \ SULOG_FILE
+-                                \ nextgroup=logindefsPath skipwhite
+-
+-syn keyword logindefsKeyword    contained CRACKLIB_DICTPATH ENV_PATH
+-                                \ ENV_ROOTPATH ENV_SUPATH MOTD_FILE
+-                                \ nextgroup=logindefsPaths skipwhite
+-
+-syn keyword logindefsKeyword    contained ERASECHAR FAIL_DELAY GETPASS_ASTERISKS
+-                                \ GID_MAX GID_MIN KILLCHAR LOGIN_RETRIES
+-                                \ LOGIN_TIMEOUT PASS_CHANGE_TRIES PASS_MAX_DAYS
+-                                \ PASS_MAX_LEN PASS_MIN_DAYS PASS_MIN_LEN
+-                                \ PASS_WARN_AGE TTYPERM UID_MAX UID_MIN ULIMIT
+-                                \ UMASK
+-                                \ nextgroup=@logindefsNumber skipwhite
+-
+-hi def link logindefsTodo       Todo
+-hi def link logindefsComment    Comment
+-hi def link logindefsString     String
+-hi def link logindefsPath       String
+-hi def link logindefsPaths      logindefsPath
+-hi def link logindefsPathDelim  Delimiter
+-hi def link logindefsBoolean    Boolean
+-hi def link logindefsDecimal    Number
+-hi def link logindefsOctal      Number
+-hi def link logindefsOctalZero  PreProc
+-hi def link logindefsOctalError Error
+-hi def link logindefsHex        Number
+-hi def link logindefsKeyword    Keyword
++syn match   logindefsBegin          display '^'
++                                    \ nextgroup=
++                                    \   logindefsComment,
++                                    \   @logindefsKeyword
++                                    \ skipwhite
++
++syn region  logindefsComment        display oneline start='^\s*#' end='$'
++                                    \ contains=logindefsTodo,@Spell
++
++syn keyword logindefsTodo           contained TODO FIXME XXX NOTE
++
++syn cluster logindefsKeyword        contains=
++                                    \ logindefsBooleanKeyword,
++                                    \ logindefsEncryptKeyword,
++                                    \ logindefsNumberKeyword,
++                                    \ logindefsPathKeyword,
++                                    \ logindefsPathsKeyword,
++                                    \ logindefsStringKeyword
++
++syn keyword logindefsBooleanKeyword contained
++                                    \ CHFN_AUTH
++                                    \ CHSH_AUTH
++                                    \ CREATE_HOME
++                                    \ DEFAULT_HOME
++                                    \ FAILLOG_ENAB
++                                    \ LASTLOG_ENAB
++                                    \ LOG_OK_LOGINS
++                                    \ LOG_UNKFAIL_ENAB
++                                    \ MAIL_CHECK_ENAB
++                                    \ MD5_CRYPT_ENAB
++                                    \ OBSCURE_CHECKS_ENAB
++                                    \ PASS_ALWAYS_WARN
++                                    \ PORTTIME_CHECKS_ENAB
++                                    \ QUOTAS_ENAB
++                                    \ SU_WHEEL_ONLY
++                                    \ SYSLOG_SG_ENAB
++                                    \ SYSLOG_SU_ENAB
++                                    \ USERGROUPS_ENAB
++                                    \ nextgroup=logindefsBoolean skipwhite
++
++syn keyword logindefsBoolean        contained yes no
++
++syn keyword logindefsEncryptKeyword contained
++                                    \ ENCRYPT_METHOD
++                                    \ nextgroup=logindefsEncryptMethod skipwhite
++
++syn keyword logindefsEncryptMethod  contained
++                                    \ DES
++                                    \ MD5
++                                    \ SHA256
++                                    \ SHA512
++
++syn keyword logindefsNumberKeyword  contained
++                                    \ ERASECHAR
++                                    \ FAIL_DELAY
++                                    \ GID_MAX
++                                    \ GID_MIN
++                                    \ KILLCHAR
++                                    \ LOGIN_RETRIES
++                                    \ LOGIN_TIMEOUT
++                                    \ MAX_MEMBERS_PER_GROUP
++                                    \ PASS_CHANGE_TRIES
++                                    \ PASS_MAX_DAYS
++                                    \ PASS_MIN_DAYS
++                                    \ PASS_WARN_AGE
++                                    \ PASS_MAX_LEN
++                                    \ PASS_MIN_LEN
++                                    \ SHA_CRYPT_MAX_ROUNDS
++                                    \ SHA_CRYPT_MIN_ROUNDS
++                                    \ SYS_GID_MAX
++                                    \ SYS_GID_MIN
++                                    \ SYS_UID_MAX
++                                    \ SYS_UID_MIN
++                                    \ UID_MAX
++                                    \ UID_MIN
++                                    \ ULIMIT
++                                    \ UMASK
++                                    \ nextgroup=@logindefsNumber skipwhite
++
++syn cluster logindefsNumber         contains=
++                                    \ logindefsDecimal,
++                                    \ logindefsHex,
++                                    \ logindefsOctal,
++                                    \ logindefsOctalError
++
++syn match   logindefsDecimal        contained '\<\d\+\>'
++
++syn match   logindefsHex            contained display '\<0x\x\+\>'
++
++syn match   logindefsOctal          contained display '\<0\o\+\>'
++                                    \ contains=logindefsOctalZero
++syn match   logindefsOctalZero      contained display '\<0'
++
++syn match   logindefsOctalError     contained display '\<0\o*[89]\d*\>'
++
++syn keyword logindefsPathKeyword    contained
++                                    \ ENVIRON_FILE
++                                    \ FAKE_SHELL
++                                    \ FTMP_FILE
++                                    \ HUSHLOGIN_FILE
++                                    \ ISSUE_FILE
++                                    \ MAIL_DIR
++                                    \ MAIL_FILE
++                                    \ NOLOGINS_FILE
++                                    \ SULOG_FILE
++                                    \ TTYTYPE_FILE
++                                    \ nextgroup=logindefsPath skipwhite
++
++syn match   logindefsPath           contained '[[:graph:]]\+'
++
++syn keyword logindefsPathsKeyword   contained
++                                    \ CONSOLE
++                                    \ ENV_PATH
++                                    \ ENV_SUPATH
++                                    \ MOTD_FILE
++                                    \ nextgroup=logindefsPaths skipwhite
++
++syn match   logindefsPaths          contained '[^:]\+'
++                                    \ nextgroup=logindefsPathDelim
++
++syn match   logindefsPathDelim      contained ':' nextgroup=logindefsPaths
++
++syn keyword logindefsStringKeyword  contained
++                                    \ CHFN_RESTRICT
++                                    \ CONSOLE_GROUPS
++                                    \ ENV_HZ
++                                    \ ENV_TZ
++                                    \ LOGIN_STRING
++                                    \ SU_NAME
++                                    \ TTYGROUP
++                                    \ TTYPERM
++                                    \ USERDEL_CMD
++                                    \ nextgroup=logindefsString skipwhite
++
++syn match   logindefsString         contained '[[:graph:]]\+'
++
++hi def link logindefsComment        Comment
++hi def link logindefsTodo           Todo
++hi def link logindefsKeyword        Keyword
++hi def link logindefsBooleanKeyword logindefsKeyword
++hi def link logindefsEncryptKeyword logindefsKeyword
++hi def link logindefsNumberKeyword  logindefsKeyword
++hi def link logindefsPathKeyword    logindefsKeyword
++hi def link logindefsPathsKeyword   logindefsKeyword
++hi def link logindefsStringKeyword  logindefsKeyword
++hi def link logindefsBoolean        Boolean
++hi def link logindefsEncryptMethod  Type
++hi def link logindefsNumber         Number
++hi def link logindefsDecimal        logindefsNumber
++hi def link logindefsHex            logindefsNumber
++hi def link logindefsOctal          logindefsNumber
++hi def link logindefsOctalZero      PreProc
++hi def link logindefsOctalError     Error
++hi def link logindefsPath           String
++hi def link logindefsPaths          logindefsPath
++hi def link logindefsPathDelim      Delimiter
++hi def link logindefsString         String
+ 
+ let b:current_syntax = "logindefs"
+ 
+diff -Naur vim73.orig/runtime/syntax/logtalk.vim vim73/runtime/syntax/logtalk.vim
+--- vim73.orig/runtime/syntax/logtalk.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/logtalk.vim	2013-06-07 17:07:24.102273188 +0000
+@@ -2,7 +2,7 @@
+ "
+ " Language:	Logtalk
+ " Maintainer:	Paulo Moura <pmoura@logtalk.org>
+-" Last Change:	Oct 31, 2008
++" Last Change:	February 4, 2012
+ 
+ 
+ " Quit when a syntax file was already loaded:
+@@ -13,6 +13,8 @@
+ 	finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+ " Logtalk is case sensitive:
+ 
+@@ -75,8 +77,13 @@
+ 
+ " Logtalk directives
+ 
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- if("			matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- elif("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn match	logtalkDirTag		":- else\."
++syn match	logtalkDirTag		":- endif\."
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- alias("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- calls("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- coinductive("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- encoding("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- initialization("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- info("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+@@ -89,17 +96,27 @@
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- protected("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- private("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- meta_predicate("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- meta_non_terminal("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- op("			matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- set_logtalk_flag("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- synchronized("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn match	logtalkDirTag		":- synchronized\."
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- uses("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn match	logtalkDirTag		":- threaded\."
+ 
+ 
++" Prolog directives
++
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- ensure_loaded("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- include("     	matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- set_prolog_flag("	matchgroup=logtalkDirTag	end=")\."	contains=ALL
++
++
+ " Module directives
+ 
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- module("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- export("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
++syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- reexport("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ syn region	logtalkDir		matchgroup=logtalkDirTag	start=":- use_module("		matchgroup=logtalkDirTag	end=")\."	contains=ALL
+ 
+ 
+@@ -109,7 +126,7 @@
+ 
+ syn match	logtalkBuiltIn		"\<\(object\|protocol\|category\)_property\ze("
+ 
+-syn match	logtalkBuiltIn		"\<complements_object\ze("
++syn match	logtalkBuiltIn		"\<co\(mplements_object\|nforms_to_protocol\)\ze("
+ syn match	logtalkBuiltIn		"\<extends_\(object\|protocol\|category\)\ze("
+ syn match	logtalkBuiltIn		"\<imp\(orts_category\|lements_protocol\)\ze("
+ syn match	logtalkBuiltIn		"\<\(instantiat\|specializ\)es_class\ze("
+@@ -119,7 +136,7 @@
+ 
+ syn match	logtalkBuiltIn		"\<\(curren\|se\)t_logtalk_flag\ze("
+ 
+-syn match	logtalkBuiltIn		"\<logtalk_\(compile\|l\(ibrary_path\|oad\)\)\ze("
++syn match	logtalkBuiltIn		"\<logtalk_\(compile\|l\(ibrary_path\|oad\|oad_context\)\)\ze("
+ 
+ syn match	logtalkBuiltIn		"\<\(for\|retract\)all\ze("
+ 
+@@ -145,7 +162,7 @@
+ syn match	logtalkBuiltInMethod	"\<before\ze("
+ syn match	logtalkBuiltInMethod	"\<after\ze("
+ 
+-syn match	logtalkBuiltInMethod	"\<expand_term\ze("
++syn match	logtalkBuiltInMethod	"\<expand_\(goal\|term\)\ze("
+ syn match	logtalkBuiltInMethod	"\<\(goal\|term\)_expansion\ze("
+ syn match	logtalkBuiltInMethod	"\<phrase\ze("
+ 
+@@ -182,12 +199,14 @@
+ syn match	logtalkKeyword		"\<atom\(ic\)\?\ze("
+ syn match	logtalkKeyword		"\<integer\ze("
+ syn match	logtalkKeyword		"\<float\ze("
+-syn match	logtalkKeyword		"\<compound\ze("
++syn match	logtalkKeyword		"\<c\(allable\|ompound\)\ze("
+ syn match	logtalkKeyword		"\<n\(onvar\|umber\)\ze("
++syn match	logtalkKeyword		"\<ground\ze("
+ 
+ 
+ " Term comparison
+ 
++syn match	logtalkKeyword		"\<compare\ze("
+ syn match	logtalkOperator		"@=<"
+ syn match	logtalkOperator		"=="
+ syn match	logtalkOperator		"\\=="
+@@ -202,6 +221,7 @@
+ syn match	logtalkKeyword		"\<arg\ze("
+ syn match	logtalkOperator		"=\.\."
+ syn match	logtalkKeyword		"\<copy_term\ze("
++syn match	logtalkKeyword		"\<numbervars\ze("
+ 
+ 
+ " Arithemtic evaluation
+@@ -250,6 +270,7 @@
+ " Logic and control
+ 
+ syn match	logtalkOperator		"\\+"
++syn match	logtalkKeyword		"\<ignore\ze("
+ syn match	logtalkKeyword		"\<once\ze("
+ syn match	logtalkKeyword		"\<repeat\>"
+ 
+@@ -269,6 +290,11 @@
+ syn match	logtalkKeyword		"\<halt\>"
+ 
+ 
++" Sorting
++
++syn match	logtalkKeyword		"\<\(key\)\?sort\ze("
++
++
+ " Evaluable functors
+ 
+ syn match	logtalkOperator		"+"
+@@ -277,6 +303,8 @@
+ syn match	logtalkOperator		"//"
+ syn match	logtalkOperator		"/"
+ syn match	logtalkKeyword		"\<r\(ound\|em\)\ze("
++syn match	logtalkKeyword		"\<e\>"
++syn match	logtalkKeyword		"\<pi\>"
+ syn match	logtalkKeyword		"\<rem\>"
+ syn match	logtalkKeyword		"\<mod\ze("
+ syn match	logtalkKeyword		"\<mod\>"
+@@ -311,7 +339,12 @@
+ syn match	logtalkOperator		"|"
+ 
+ 
+-" Logtalk numbers
++" Logtalk existential quantifier operator
++
++syn match	logtalkOperator		"\^"
++
++
++" Logtalk numbers 
+ 
+ syn match	logtalkNumber		"\<\d\+\>"
+ syn match	logtalkNumber		"\<\d\+\.\d\+\>"
+@@ -333,6 +366,17 @@
+ syn region	logtalkBlockComment	start="/\*"	end="\*/"	fold
+ syn match	logtalkLineComment	"%.*"
+ 
++syn cluster	logtalkComment		contains=logtalkBlockComment,logtalkLineComment
++
++
++" Logtalk conditional compilation folding
++
++syn region logtalkIfContainer transparent keepend extend start=":- if(" end=":- endif\." containedin=ALLBUT,@logtalkComment contains=NONE
++syn region logtalkIf transparent fold keepend start=":- if(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
++syn region logtalkElseIf transparent fold keepend start=":- elif(" end=":- \(else\.\|elif(\)"ms=s-1,me=s-1 contained containedin=logtalkIfContainer nextgroup=logtalkElseIf,logtalkElse contains=TOP
++syn region logtalkElse transparent fold keepend start=":- else\." end=":- endif\." contained containedin=logtalkIfContainer contains=TOP
++
++
+ 
+ " Logtalk entity folding
+ 
+@@ -362,6 +406,11 @@
+ 	HiLink	logtalkOpenEntityDir	Normal
+ 	HiLink	logtalkOpenEntityDirTag	PreProc
+ 
++	HiLink	logtalkIfContainer	PreProc
++	HiLink	logtalkIf		PreProc
++	HiLink	logtalkElseIf		PreProc
++	HiLink	logtalkElse		PreProc
++
+ 	HiLink	logtalkEntity		Normal
+ 
+ 	HiLink	logtalkEntityRel	Normal
+@@ -396,3 +445,6 @@
+ 
+ 
+ let b:current_syntax = "logtalk"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/lout.vim vim73/runtime/syntax/lout.vim
+--- vim73.orig/runtime/syntax/lout.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/lout.vim	2013-06-07 17:07:24.128939779 +0000
+@@ -1,13 +1,21 @@
+ " Vim syntax file
+ " Language:    Lout
+ " Maintainer:  Christian V. J. Brüssow <cvjb@cvjb.de>
+-" Last Change: Son 22 Jun 2003 20:43:26 CEST
++" Last Change: So 12 Feb 2012 15:15:03 CET
+ " Filenames:   *.lout,*.lt
+-" URL:			http://www.cvjb.de/comp/vim/lout.vim
+-" $Id: lout.vim,v 1.1 2004/06/13 17:52:18 vimboss Exp $
++" URL:         http://www.cvjb.de/comp/vim/lout.vim
++
++" $Id: lout.vim,v 1.4 2012/02/12 15:16:17 bruessow Exp $
+ "
+ " Lout: Basser Lout document formatting system.
+ 
++" Many Thanks to...
++" 
++" 2012-02-12:
++" Thilo Six <T.Six at gmx dot de> send a patch for cpoptions.
++" See the discussion at http://thread.gmane.org/gmane.editors.vim.devel/32151
++
++
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+ if version < 600
+@@ -16,6 +24,9 @@
+ 	finish
+ endif
+ 
++let s:cpo_save=&cpo
++set cpo&vim
++
+ " Lout is case sensitive
+ syn case match
+ 
+@@ -136,4 +147,7 @@
+ 
+ let b:current_syntax = "lout"
+ 
++let &cpo=s:cpo_save
++unlet s:cpo_save
++
+ " vim:ts=8:sw=4:nocindent:smartindent:
+diff -Naur vim73.orig/runtime/syntax/lpc.vim vim73/runtime/syntax/lpc.vim
+--- vim73.orig/runtime/syntax/lpc.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/lpc.vim	2013-06-07 17:07:24.138939750 +0000
+@@ -2,7 +2,7 @@
+ " Language:	LPC
+ " Maintainer:	Shizhu Pan <poet@mudbuilder.net>
+ " URL:		http://poet.tomud.com/pub/lpc.vim.bz2
+-" Last Change:	2003 May 11
++" Last Change:	2011 Dec 10 by Thilo Six
+ " Comments:	If you are using Vim 6.2 or later, see :h lpc.vim for
+ "		file type recognizing, if not, you had to use modeline.
+ 
+@@ -17,6 +17,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Nodule: Keywords {{{1
+ 
+ " LPC keywords
+@@ -345,7 +348,6 @@
+ setlocal cindent
+ setlocal fo-=t fo+=croql
+ setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
+-set cpo-=C
+ 
+ " Win32 can filter files in the browse dialog
+ if has("gui_win32") && !exists("b:browsefilter")
+@@ -451,5 +453,8 @@
+ 
+ let b:current_syntax = "lpc"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim:ts=8:nosta:sw=2:ai:si:
+ " vim600:set fdm=marker: }}}1
+diff -Naur vim73.orig/runtime/syntax/lsl.vim vim73/runtime/syntax/lsl.vim
+--- vim73.orig/runtime/syntax/lsl.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/lsl.vim	2013-06-07 17:07:24.178939636 +0000
+@@ -1,12 +1,14 @@
+ " Vim syntax file
+ " Language:	Linden Scripting Language
+ " Maintainer:	Timo Frenay <timo@frenay.net>
+-" Last Change:	2008 Mar 29
++" Last Change:	2012 Apr 30
+ 
+ " Quit when a syntax file was already loaded
+ if exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Initializations
+ syn case match
+@@ -269,4 +271,7 @@
+ 
+ let b:current_syntax = "lsl"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/lua.vim vim73/runtime/syntax/lua.vim
+--- vim73.orig/runtime/syntax/lua.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/lua.vim	2013-06-07 17:07:24.205606226 +0000
+@@ -1,11 +1,11 @@
+ " Vim syntax file
+-" Language:	Lua 4.0, Lua 5.0 and Lua 5.1
+-" Maintainer:	Marcus Aurelius Farias <marcus.cf 'at' bol com br>
++" Language:	Lua 4.0, Lua 5.0, Lua 5.1 and Lua 5.2
++" Maintainer:	Marcus Aurelius Farias <masserahguard-lua 'at' yahoo com>
+ " First Author:	Carlos Augusto Teixeira Mendes <cmendes 'at' inf puc-rio br>
+-" Last Change:	2006 Aug 10
++" Last Change:	2012 Aug 12
+ " Options:	lua_version = 4 or 5
+-"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1)
+-"		default 5.1
++"		lua_subversion = 0 (4.0, 5.0) or 1 (5.1) or 2 (5.2)
++"		default 5.2
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -15,10 +15,13 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ if !exists("lua_version")
+-  " Default is lua 5.1
++  " Default is lua 5.2
+   let lua_version = 5
+-  let lua_subversion = 1
++  let lua_subversion = 2
+ elseif !exists("lua_subversion")
+   " lua_version exists, but lua_subversion doesn't. So, set it to 0
+   let lua_subversion = 0
+@@ -30,14 +33,14 @@
+ syn sync minlines=100
+ 
+ " Comments
+-syn keyword luaTodo             contained TODO FIXME XXX
+-syn match   luaComment          "--.*$" contains=luaTodo,@Spell
++syn keyword luaTodo            contained TODO FIXME XXX
++syn match   luaComment         "--.*$" contains=luaTodo,@Spell
+ if lua_version == 5 && lua_subversion == 0
+-  syn region  luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
+-  syn region  luaInnerComment   contained transparent start="\[\[" end="\]\]"
++  syn region luaComment        matchgroup=luaComment start="--\[\[" end="\]\]" contains=luaTodo,luaInnerComment,@Spell
++  syn region luaInnerComment   contained transparent start="\[\[" end="\]\]"
+ elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+   " Comments in Lua 5.1: --[[ ... ]], [=[ ... ]=], [===[ ... ]===], etc.
+-  syn region  luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
++  syn region luaComment        matchgroup=luaComment start="--\[\z(=*\)\[" end="\]\z1\]" contains=luaTodo,@Spell
+ endif
+ 
+ " First line may start with #!
+@@ -45,60 +48,69 @@
+ 
+ " catch errors caused by wrong parenthesis and wrong curly brackets or
+ " keywords placed outside their respective blocks
++syn region luaParen      transparent                     start='(' end=')' contains=ALLBUT,luaParenError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
++syn region luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaBraceError,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaBlock,luaLoopBlock,luaIn,luaStatement
+ 
+-syn region luaParen transparent start='(' end=')' contains=ALLBUT,luaError,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
+-syn match  luaError ")"
+-syn match  luaError "}"
++syn match  luaParenError ")"
++syn match  luaBraceError "}"
+ syn match  luaError "\<\%(end\|else\|elseif\|then\|until\|in\)\>"
+ 
+-" Function declaration
+-syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
++" function ... end
++syn region luaFunctionBlock transparent matchgroup=luaFunction start="\<function\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
+ 
+-" if then else elseif end
+-syn keyword luaCond contained else
++" if ... then
++syn region luaIfThen transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4           contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaIn nextgroup=luaThenEnd skipwhite skipempty
+ 
+ " then ... end
+-syn region luaCondEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaRepeat
++syn region luaThenEnd contained transparent matchgroup=luaCond start="\<then\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaThenEnd,luaIn
+ 
+ " elseif ... then
+-syn region luaCondElseif contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
++syn region luaElseifThen contained transparent matchgroup=luaCond start="\<elseif\>" end="\<then\>" contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
+ 
+-" if ... then
+-syn region luaCondStart transparent matchgroup=luaCond start="\<if\>" end="\<then\>"me=e-4 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaCondEnd skipwhite skipempty
++" else
++syn keyword luaElse contained else
+ 
+ " do ... end
+-syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
++syn region luaBlock transparent matchgroup=luaStatement start="\<do\>" end="\<end\>"          contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
+ 
+ " repeat ... until
+-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat
++syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<repeat\>" end="\<until\>"   contains=ALLBUT,luaTodo,luaSpecial,luaElseifThen,luaElse,luaThenEnd,luaIn
+ 
+ " while ... do
+-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaRepeat nextgroup=luaBlock skipwhite skipempty
++syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<while\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd,luaIn nextgroup=luaBlock skipwhite skipempty
+ 
+ " for ... do and for ... in ... do
+-syn region luaRepeatBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2 contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd nextgroup=luaBlock skipwhite skipempty
++syn region luaLoopBlock transparent matchgroup=luaRepeat start="\<for\>" end="\<do\>"me=e-2   contains=ALLBUT,luaTodo,luaSpecial,luaIfThen,luaElseifThen,luaElse,luaThenEnd nextgroup=luaBlock skipwhite skipempty
+ 
+-" Following 'else' example. This is another item to those
+-" contains=ALLBUT,... because only the 'for' luaRepeatBlock contains it.
+-syn keyword luaRepeat contained in
++syn keyword luaIn contained in
+ 
+ " other keywords
+ syn keyword luaStatement return local break
+-syn keyword luaOperator  and or not
+-syn keyword luaConstant  nil
++if lua_version > 5 || (lua_version == 5 && lua_subversion >= 2)
++  syn keyword luaStatement goto
++  syn match luaLabel "::\I\i*::"
++endif
++syn keyword luaOperator and or not
++syn keyword luaConstant nil
+ if lua_version > 4
+   syn keyword luaConstant true false
+ endif
+ 
+ " Strings
+ if lua_version < 5
+-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
+-elseif lua_version == 5 && lua_subversion == 0
+-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"[\]]\|\\\d\{,3}"
+-  syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
+-elseif lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+-  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\\d\{,3}"
+-  syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
++  syn match  luaSpecial contained "\\[\\abfnrtv\'\"]\|\\[[:digit:]]\{,3}"
++elseif lua_version == 5
++  if lua_subversion == 0
++    syn match  luaSpecial contained #\\[\\abfnrtv'"[\]]\|\\[[:digit:]]\{,3}#
++    syn region luaString2 matchgroup=luaString start=+\[\[+ end=+\]\]+ contains=luaString2,@Spell
++  else
++    if lua_subversion == 1
++      syn match  luaSpecial contained #\\[\\abfnrtv'"]\|\\[[:digit:]]\{,3}#
++    else " Lua 5.2
++      syn match  luaSpecial contained #\\[\\abfnrtvz'"]\|\\x[[:xdigit:]]\{2}\|\\[[:digit:]]\{,3}#
++    endif
++    syn region luaString2 matchgroup=luaString start="\[\z(=*\)\[" end="\]\z1\]" contains=@Spell
++  endif
+ endif
+ syn region luaString  start=+'+ end=+'+ skip=+\\\\\|\\'+ contains=luaSpecial,@Spell
+ syn region luaString  start=+"+ end=+"+ skip=+\\\\\|\\"+ contains=luaSpecial,@Spell
+@@ -106,20 +118,21 @@
+ " integer number
+ syn match luaNumber "\<\d\+\>"
+ " floating point number, with dot, optional exponent
+-syn match luaFloat  "\<\d\+\.\d*\%(e[-+]\=\d\+\)\=\>"
++syn match luaNumber  "\<\d\+\.\d*\%([eE][-+]\=\d\+\)\=\>"
+ " floating point number, starting with a dot, optional exponent
+-syn match luaFloat  "\.\d\+\%(e[-+]\=\d\+\)\=\>"
++syn match luaNumber  "\.\d\+\%([eE][-+]\=\d\+\)\=\>"
+ " floating point number, without dot, with exponent
+-syn match luaFloat  "\<\d\+e[-+]\=\d\+\>"
++syn match luaNumber  "\<\d\+[eE][-+]\=\d\+\>"
+ 
+ " hex numbers
+-if lua_version > 5 || (lua_version == 5 && lua_subversion >= 1)
+-  syn match luaNumber "\<0x\x\+\>"
++if lua_version >= 5
++  if lua_subversion == 1
++    syn match luaNumber "\<0[xX]\x\+\>"
++  elseif lua_subversion >= 2
++    syn match luaNumber "\<0[xX][[:xdigit:].]\+\%([pP][-+]\=\d\+\)\=\>"
++  endif
+ endif
+ 
+-" tables
+-syn region  luaTableBlock transparent matchgroup=luaTable start="{" end="}" contains=ALLBUT,luaTodo,luaSpecial,luaCond,luaCondElseif,luaCondEnd,luaCondStart,luaBlock,luaRepeatBlock,luaRepeat,luaStatement
+-
+ syn keyword luaFunc assert collectgarbage dofile error next
+ syn keyword luaFunc print rawget rawset tonumber tostring type _VERSION
+ 
+@@ -144,127 +157,170 @@
+   syn keyword luaFunc format strfind gsub
+   syn keyword luaFunc getinfo getlocal setlocal setcallhook setlinehook
+ elseif lua_version == 5
+-  " Not sure if all these functions need to be highlighted...
+-  syn keyword luaFunc _G getfenv getmetatable ipairs loadfile
+-  syn keyword luaFunc loadstring pairs pcall rawequal
+-  syn keyword luaFunc require setfenv setmetatable unpack xpcall
++  syn keyword luaFunc getmetatable setmetatable
++  syn keyword luaFunc ipairs pairs
++  syn keyword luaFunc pcall xpcall
++  syn keyword luaFunc _G loadfile rawequal require
+   if lua_subversion == 0
++    syn keyword luaFunc getfenv setfenv
++    syn keyword luaFunc loadstring unpack
+     syn keyword luaFunc gcinfo loadlib LUA_PATH _LOADED _REQUIREDNAME
+-  elseif lua_subversion == 1
+-    syn keyword luaFunc load module select
+-    syn match luaFunc /package\.cpath/
+-    syn match luaFunc /package\.loaded/
+-    syn match luaFunc /package\.loadlib/
+-    syn match luaFunc /package\.path/
+-    syn match luaFunc /package\.preload/
+-    syn match luaFunc /package\.seeall/
+-    syn match luaFunc /coroutine\.running/
++  else
++    syn keyword luaFunc load select
++    syn match   luaFunc /\<package\.cpath\>/
++    syn match   luaFunc /\<package\.loaded\>/
++    syn match   luaFunc /\<package\.loadlib\>/
++    syn match   luaFunc /\<package\.path\>/
++    if lua_subversion == 1
++      syn keyword luaFunc getfenv setfenv
++      syn keyword luaFunc loadstring module unpack
++      syn match   luaFunc /\<package\.loaders\>/
++      syn match   luaFunc /\<package\.preload\>/
++      syn match   luaFunc /\<package\.seeall\>/
++    elseif lua_subversion == 2
++      syn keyword luaFunc _ENV rawlen
++      syn match   luaFunc /\<package\.config\>/
++      syn match   luaFunc /\<package\.preload\>/
++      syn match   luaFunc /\<package\.searchers\>/
++      syn match   luaFunc /\<package\.searchpath\>/
++      syn match   luaFunc /\<bit32\.arshift\>/
++      syn match   luaFunc /\<bit32\.band\>/
++      syn match   luaFunc /\<bit32\.bnot\>/
++      syn match   luaFunc /\<bit32\.bor\>/
++      syn match   luaFunc /\<bit32\.btest\>/
++      syn match   luaFunc /\<bit32\.bxor\>/
++      syn match   luaFunc /\<bit32\.extract\>/
++      syn match   luaFunc /\<bit32\.lrotate\>/
++      syn match   luaFunc /\<bit32\.lshift\>/
++      syn match   luaFunc /\<bit32\.replace\>/
++      syn match   luaFunc /\<bit32\.rrotate\>/
++      syn match   luaFunc /\<bit32\.rshift\>/
++    endif
++    syn match luaFunc /\<coroutine\.running\>/
+   endif
+-  syn match   luaFunc /coroutine\.create/
+-  syn match   luaFunc /coroutine\.resume/
+-  syn match   luaFunc /coroutine\.status/
+-  syn match   luaFunc /coroutine\.wrap/
+-  syn match   luaFunc /coroutine\.yield/
+-  syn match   luaFunc /string\.byte/
+-  syn match   luaFunc /string\.char/
+-  syn match   luaFunc /string\.dump/
+-  syn match   luaFunc /string\.find/
+-  syn match   luaFunc /string\.len/
+-  syn match   luaFunc /string\.lower/
+-  syn match   luaFunc /string\.rep/
+-  syn match   luaFunc /string\.sub/
+-  syn match   luaFunc /string\.upper/
+-  syn match   luaFunc /string\.format/
+-  syn match   luaFunc /string\.gsub/
++  syn match   luaFunc /\<coroutine\.create\>/
++  syn match   luaFunc /\<coroutine\.resume\>/
++  syn match   luaFunc /\<coroutine\.status\>/
++  syn match   luaFunc /\<coroutine\.wrap\>/
++  syn match   luaFunc /\<coroutine\.yield\>/
++  syn match   luaFunc /\<string\.byte\>/
++  syn match   luaFunc /\<string\.char\>/
++  syn match   luaFunc /\<string\.dump\>/
++  syn match   luaFunc /\<string\.find\>/
++  syn match   luaFunc /\<string\.format\>/
++  syn match   luaFunc /\<string\.gsub\>/
++  syn match   luaFunc /\<string\.len\>/
++  syn match   luaFunc /\<string\.lower\>/
++  syn match   luaFunc /\<string\.rep\>/
++  syn match   luaFunc /\<string\.sub\>/
++  syn match   luaFunc /\<string\.upper\>/
+   if lua_subversion == 0
+-    syn match luaFunc /string\.gfind/
+-    syn match luaFunc /table\.getn/
+-    syn match luaFunc /table\.setn/
+-    syn match luaFunc /table\.foreach/
+-    syn match luaFunc /table\.foreachi/
+-  elseif lua_subversion == 1
+-    syn match luaFunc /string\.gmatch/
+-    syn match luaFunc /string\.match/
+-    syn match luaFunc /string\.reverse/
+-    syn match luaFunc /table\.maxn/
++    syn match luaFunc /\<string\.gfind\>/
++  else
++    syn match luaFunc /\<string\.gmatch\>/
++    syn match luaFunc /\<string\.match\>/
++    syn match luaFunc /\<string\.reverse\>/
+   endif
+-  syn match   luaFunc /table\.concat/
+-  syn match   luaFunc /table\.sort/
+-  syn match   luaFunc /table\.insert/
+-  syn match   luaFunc /table\.remove/
+-  syn match   luaFunc /math\.abs/
+-  syn match   luaFunc /math\.acos/
+-  syn match   luaFunc /math\.asin/
+-  syn match   luaFunc /math\.atan/
+-  syn match   luaFunc /math\.atan2/
+-  syn match   luaFunc /math\.ceil/
+-  syn match   luaFunc /math\.sin/
+-  syn match   luaFunc /math\.cos/
+-  syn match   luaFunc /math\.tan/
+-  syn match   luaFunc /math\.deg/
+-  syn match   luaFunc /math\.exp/
+-  syn match   luaFunc /math\.floor/
+-  syn match   luaFunc /math\.log/
+-  syn match   luaFunc /math\.log10/
+-  syn match   luaFunc /math\.max/
+-  syn match   luaFunc /math\.min/
+   if lua_subversion == 0
+-    syn match luaFunc /math\.mod/
++    syn match luaFunc /\<table\.getn\>/
++    syn match luaFunc /\<table\.setn\>/
++    syn match luaFunc /\<table\.foreach\>/
++    syn match luaFunc /\<table\.foreachi\>/
+   elseif lua_subversion == 1
+-    syn match luaFunc /math\.fmod/
+-    syn match luaFunc /math\.modf/
+-    syn match luaFunc /math\.cosh/
+-    syn match luaFunc /math\.sinh/
+-    syn match luaFunc /math\.tanh/
++    syn match luaFunc /\<table\.maxn\>/
++  elseif lua_subversion == 2
++    syn match luaFunc /\<table\.pack\>/
++    syn match luaFunc /\<table\.unpack\>/
++  endif
++  syn match   luaFunc /\<table\.concat\>/
++  syn match   luaFunc /\<table\.sort\>/
++  syn match   luaFunc /\<table\.insert\>/
++  syn match   luaFunc /\<table\.remove\>/
++  syn match   luaFunc /\<math\.abs\>/
++  syn match   luaFunc /\<math\.acos\>/
++  syn match   luaFunc /\<math\.asin\>/
++  syn match   luaFunc /\<math\.atan\>/
++  syn match   luaFunc /\<math\.atan2\>/
++  syn match   luaFunc /\<math\.ceil\>/
++  syn match   luaFunc /\<math\.sin\>/
++  syn match   luaFunc /\<math\.cos\>/
++  syn match   luaFunc /\<math\.tan\>/
++  syn match   luaFunc /\<math\.deg\>/
++  syn match   luaFunc /\<math\.exp\>/
++  syn match   luaFunc /\<math\.floor\>/
++  syn match   luaFunc /\<math\.log\>/
++  syn match   luaFunc /\<math\.max\>/
++  syn match   luaFunc /\<math\.min\>/
++  if lua_subversion == 0
++    syn match luaFunc /\<math\.mod\>/
++    syn match luaFunc /\<math\.log10\>/
++  else
++    if lua_subversion == 1
++      syn match luaFunc /\<math\.log10\>/
++    endif
++    syn match luaFunc /\<math\.huge\>/
++    syn match luaFunc /\<math\.fmod\>/
++    syn match luaFunc /\<math\.modf\>/
++    syn match luaFunc /\<math\.cosh\>/
++    syn match luaFunc /\<math\.sinh\>/
++    syn match luaFunc /\<math\.tanh\>/
+   endif
+-  syn match   luaFunc /math\.pow/
+-  syn match   luaFunc /math\.rad/
+-  syn match   luaFunc /math\.sqrt/
+-  syn match   luaFunc /math\.frexp/
+-  syn match   luaFunc /math\.ldexp/
+-  syn match   luaFunc /math\.random/
+-  syn match   luaFunc /math\.randomseed/
+-  syn match   luaFunc /math\.pi/
+-  syn match   luaFunc /io\.stdin/
+-  syn match   luaFunc /io\.stdout/
+-  syn match   luaFunc /io\.stderr/
+-  syn match   luaFunc /io\.close/
+-  syn match   luaFunc /io\.flush/
+-  syn match   luaFunc /io\.input/
+-  syn match   luaFunc /io\.lines/
+-  syn match   luaFunc /io\.open/
+-  syn match   luaFunc /io\.output/
+-  syn match   luaFunc /io\.popen/
+-  syn match   luaFunc /io\.read/
+-  syn match   luaFunc /io\.tmpfile/
+-  syn match   luaFunc /io\.type/
+-  syn match   luaFunc /io\.write/
+-  syn match   luaFunc /os\.clock/
+-  syn match   luaFunc /os\.date/
+-  syn match   luaFunc /os\.difftime/
+-  syn match   luaFunc /os\.execute/
+-  syn match   luaFunc /os\.exit/
+-  syn match   luaFunc /os\.getenv/
+-  syn match   luaFunc /os\.remove/
+-  syn match   luaFunc /os\.rename/
+-  syn match   luaFunc /os\.setlocale/
+-  syn match   luaFunc /os\.time/
+-  syn match   luaFunc /os\.tmpname/
+-  syn match   luaFunc /debug\.debug/
+-  syn match   luaFunc /debug\.gethook/
+-  syn match   luaFunc /debug\.getinfo/
+-  syn match   luaFunc /debug\.getlocal/
+-  syn match   luaFunc /debug\.getupvalue/
+-  syn match   luaFunc /debug\.setlocal/
+-  syn match   luaFunc /debug\.setupvalue/
+-  syn match   luaFunc /debug\.sethook/
+-  syn match   luaFunc /debug\.traceback/
++  syn match   luaFunc /\<math\.pow\>/
++  syn match   luaFunc /\<math\.rad\>/
++  syn match   luaFunc /\<math\.sqrt\>/
++  syn match   luaFunc /\<math\.frexp\>/
++  syn match   luaFunc /\<math\.ldexp\>/
++  syn match   luaFunc /\<math\.random\>/
++  syn match   luaFunc /\<math\.randomseed\>/
++  syn match   luaFunc /\<math\.pi\>/
++  syn match   luaFunc /\<io\.close\>/
++  syn match   luaFunc /\<io\.flush\>/
++  syn match   luaFunc /\<io\.input\>/
++  syn match   luaFunc /\<io\.lines\>/
++  syn match   luaFunc /\<io\.open\>/
++  syn match   luaFunc /\<io\.output\>/
++  syn match   luaFunc /\<io\.popen\>/
++  syn match   luaFunc /\<io\.read\>/
++  syn match   luaFunc /\<io\.stderr\>/
++  syn match   luaFunc /\<io\.stdin\>/
++  syn match   luaFunc /\<io\.stdout\>/
++  syn match   luaFunc /\<io\.tmpfile\>/
++  syn match   luaFunc /\<io\.type\>/
++  syn match   luaFunc /\<io\.write\>/
++  syn match   luaFunc /\<os\.clock\>/
++  syn match   luaFunc /\<os\.date\>/
++  syn match   luaFunc /\<os\.difftime\>/
++  syn match   luaFunc /\<os\.execute\>/
++  syn match   luaFunc /\<os\.exit\>/
++  syn match   luaFunc /\<os\.getenv\>/
++  syn match   luaFunc /\<os\.remove\>/
++  syn match   luaFunc /\<os\.rename\>/
++  syn match   luaFunc /\<os\.setlocale\>/
++  syn match   luaFunc /\<os\.time\>/
++  syn match   luaFunc /\<os\.tmpname\>/
++  syn match   luaFunc /\<debug\.debug\>/
++  syn match   luaFunc /\<debug\.gethook\>/
++  syn match   luaFunc /\<debug\.getinfo\>/
++  syn match   luaFunc /\<debug\.getlocal\>/
++  syn match   luaFunc /\<debug\.getupvalue\>/
++  syn match   luaFunc /\<debug\.setlocal\>/
++  syn match   luaFunc /\<debug\.setupvalue\>/
++  syn match   luaFunc /\<debug\.sethook\>/
++  syn match   luaFunc /\<debug\.traceback\>/
+   if lua_subversion == 1
+-    syn match luaFunc /debug\.getfenv/
+-    syn match luaFunc /debug\.getmetatable/
+-    syn match luaFunc /debug\.getregistry/
+-    syn match luaFunc /debug\.setfenv/
+-    syn match luaFunc /debug\.setmetatable/
++    syn match luaFunc /\<debug\.getfenv\>/
++    syn match luaFunc /\<debug\.setfenv\>/
++    syn match luaFunc /\<debug\.getmetatable\>/
++    syn match luaFunc /\<debug\.setmetatable\>/
++    syn match luaFunc /\<debug\.getregistry\>/
++  elseif lua_subversion == 2
++    syn match luaFunc /\<debug\.getmetatable\>/
++    syn match luaFunc /\<debug\.setmetatable\>/
++    syn match luaFunc /\<debug\.getregistry\>/
++    syn match luaFunc /\<debug\.getuservalue\>/
++    syn match luaFunc /\<debug\.setuservalue\>/
++    syn match luaFunc /\<debug\.upvalueid\>/
++    syn match luaFunc /\<debug\.upvaluejoin\>/
+   endif
+ endif
+ 
+@@ -281,24 +337,31 @@
+ 
+   HiLink luaStatement		Statement
+   HiLink luaRepeat		Repeat
++  HiLink luaFor			Repeat
+   HiLink luaString		String
+   HiLink luaString2		String
+   HiLink luaNumber		Number
+-  HiLink luaFloat		Float
+   HiLink luaOperator		Operator
++  HiLink luaIn			Operator
+   HiLink luaConstant		Constant
+   HiLink luaCond		Conditional
++  HiLink luaElse		Conditional
+   HiLink luaFunction		Function
+   HiLink luaComment		Comment
+   HiLink luaTodo		Todo
+   HiLink luaTable		Structure
+   HiLink luaError		Error
++  HiLink luaParenError		Error
++  HiLink luaBraceError		Error
+   HiLink luaSpecial		SpecialChar
+   HiLink luaFunc		Identifier
++  HiLink luaLabel		Label
+ 
+   delcommand HiLink
+ endif
+ 
+ let b:current_syntax = "lua"
+ 
+-" vim: et ts=8
++let &cpo = s:cpo_save
++unlet s:cpo_save
++" vim: et ts=8 sw=2
+diff -Naur vim73.orig/runtime/syntax/mail.vim vim73/runtime/syntax/mail.vim
+--- vim73.orig/runtime/syntax/mail.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/mail.vim	2013-06-07 17:07:24.242272788 +0000
+@@ -1,14 +1,17 @@
+ " Vim syntax file
+ " Language:		Mail file
+ " Previous Maintainer:	Felix von Leitner <leitner@math.fu-berlin.de>
+-" Maintainer:		Gautam Iyer <gi1242@users.sourceforge.net>
+-" Last Change:		Thu 06 Nov 2008 10:10:55 PM PST
++" Maintainer:		GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
++" Last Change:		Thu 02 Feb 2012 08:47:04 PM EST
+ 
+ " Quit when a syntax file was already loaded
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " The mail header is recognized starting with a "keyword:" line and ending
+ " with an empty line or other line that can't be in the header. All lines of
+ " the header are highlighted. Headers of quoted messages (quoted with >) are
+@@ -89,7 +92,7 @@
+ hi def link mailHeaderEmail	mailEmail
+ hi def link mailEmail		Special
+ hi def link mailURL		String
+-hi def link mailSubject		LineNR
++hi def link mailSubject		Title
+ hi def link mailQuoted1		Comment
+ hi def link mailQuoted3		mailQuoted1
+ hi def link mailQuoted5		mailQuoted1
+@@ -104,3 +107,6 @@
+ hi def link mailQuoteExp6	mailQuoted6
+ 
+ let b:current_syntax = "mail"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/make.vim vim73/runtime/syntax/make.vim
+--- vim73.orig/runtime/syntax/make.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/make.vim	2013-06-07 17:07:24.285605998 +0000
+@@ -2,7 +2,7 @@
+ " Language:	Makefile
+ " Maintainer:	Claudio Fleiner <claudio@fleiner.com>
+ " URL:		http://www.fleiner.com/vim/syntax/make.vim
+-" Last Change:	2008 Aug 04
++" Last Change:	2012 Oct 05
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -12,6 +12,10 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
++
+ " some special characters
+ syn match makeSpecial	"^\s*[@+-]\+"
+ syn match makeNextLine	"\\\n\s*"
+@@ -25,8 +29,8 @@
+ hi link makeOverride makeStatement
+ hi link makeExport makeStatement
+ 
+-" Koehler: catch unmatched define/endef keywords.  endef only matches it is by itself on a line
+-syn region makeDefine start="^\s*define\s" end="^\s*endef\s*$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
++" catch unmatched define/endef keywords.  endef only matches it is by itself on a line, possibly followed by a commend
++syn region makeDefine start="^\s*define\s" end="^\s*endef\s*\(#.*\)\?$" contains=makeStatement,makeIdent,makePreCondit,makeDefine
+ 
+ " Microsoft Makefile specials
+ syn case ignore
+@@ -48,8 +52,8 @@
+ 
+ " make targets
+ " syn match makeSpecTarget	"^\.\(SUFFIXES\|PHONY\|DEFAULT\|PRECIOUS\|IGNORE\|SILENT\|EXPORT_ALL_VARIABLES\|KEEP_STATE\|LIBPATTERNS\|NOTPARALLEL\|DELETE_ON_ERROR\|INTERMEDIATE\|POSIX\|SECONDARY\)\>"
+-syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
+ syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:$"me=e-1 nextgroup=makeSource
++syn match makeImplicit		"^\.[A-Za-z0-9_./\t -]\+\s*:[^=]"me=e-2 nextgroup=makeSource
+ 
+ syn region makeTarget	transparent matchgroup=makeTarget start="^[A-Za-z0-9_./$()%-][A-Za-z0-9_./\t $()%-]*:\{1,2}[^:=]"rs=e-1 end=";"re=e-1,me=e-1 end="[^\\]$" keepend contains=makeIdent,makeSpecTarget,makeNextLine skipnl nextGroup=makeCommands
+ syn match makeTarget		"^[A-Za-z0-9_./$()%*@-][A-Za-z0-9_./\t $()%*@-]*::\=\s*$" contains=makeIdent,makeSpecTarget skipnl nextgroup=makeCommands,makeCommandError
+@@ -134,4 +138,6 @@
+ 
+ let b:current_syntax = "make"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/mallard.vim vim73/runtime/syntax/mallard.vim
+--- vim73.orig/runtime/syntax/mallard.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/mallard.vim	2013-06-07 17:07:24.302272617 +0000
+@@ -0,0 +1,37 @@
++" Vim syntax file
++" Language:    Mallard
++" Maintainer:  Jaromir Hradilek <jhradilek@gmail.com>
++" URL:         https://github.com/jhradilek/vim-syntax
++" Last Change: 11 February 2013
++" Description: A syntax file for the Mallard markup language according to
++"              Mallard 1.0 DRAFT as of 2013-02-11.
++
++if exists("b:current_syntax")
++  finish
++endif
++
++do Syntax xml
++syn cluster xmlTagHook add=mallardTagName
++syn spell toplevel
++syn case match
++
++syn keyword mallardTagName app cite cmd code col colgroup comment contained
++syn keyword mallardTagName credit desc em email example figure contained
++syn keyword mallardTagName file gui guiseq info input item key contained
++syn keyword mallardTagName keyseq license link links list listing contained
++syn keyword mallardTagName media name note output p page quote contained
++syn keyword mallardTagName revision screen section span steps contained
++syn keyword mallardTagName subtitle synopsis sys table tbody td contained
++syn keyword mallardTagName terms tfoot thead title tr tree var contained
++syn keyword mallardTagName years contained
++
++syn region mallardComment start="<comment\>" end="</comment>"me=e-10 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
++syn region mallardEmphasis start="<em\>" end="</em>"me=e-5 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
++syn region mallardTitle start="<title\>" end="</title>"me=e-8 contains=xmlTag,xmlNamespace,xmlTagName,xmlEndTag,xmlRegion,xmlEntity,@Spell keepend
++
++hi def link mallardComment  Comment
++hi def link mallardTagName  Statement
++hi def link mallardTitle    Title
++hi def mallardEmphasis term=italic cterm=italic gui=italic
++
++let b:current_syntax = "mallard"
+diff -Naur vim73.orig/runtime/syntax/markdown.vim vim73/runtime/syntax/markdown.vim
+--- vim73.orig/runtime/syntax/markdown.vim	2010-05-21 09:46:29.000000000 +0000
++++ vim73/runtime/syntax/markdown.vim	2013-06-07 17:07:24.338939179 +0000
+@@ -2,50 +2,66 @@
+ " Language:     Markdown
+ " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
+ " Filenames:    *.markdown
+-" Last Change:	2010 May 21
++" Last Change:  2013 May 30
+ 
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++if !exists('main_syntax')
++  let main_syntax = 'markdown'
++endif
++
+ runtime! syntax/html.vim
+ unlet! b:current_syntax
+ 
++if !exists('g:markdown_fenced_languages')
++  let g:markdown_fenced_languages = []
++endif
++for s:type in map(copy(g:markdown_fenced_languages),'matchstr(v:val,"[^=]*$")')
++  if s:type =~ '\.'
++    let b:{matchstr(s:type,'[^.]*')}_subtype = matchstr(s:type,'\.\zs.*')
++  endif
++  exe 'syn include @markdownHighlight'.substitute(s:type,'\.','','g').' syntax/'.matchstr(s:type,'[^.]*').'.vim'
++  unlet! b:current_syntax
++endfor
++unlet! s:type
++
+ syn sync minlines=10
+ syn case ignore
+ 
+-syn match markdownValid '[<>]\S\@!'
++syn match markdownValid '[<>]\c[a-z/$!]\@!'
+ syn match markdownValid '&\%(#\=\w*;\)\@!'
+ 
+-syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock
++syn match markdownLineStart "^[<@]\@!" nextgroup=@markdownBlock,htmlSpecialChar
+ 
+ syn cluster markdownBlock contains=markdownH1,markdownH2,markdownH3,markdownH4,markdownH5,markdownH6,markdownBlockquote,markdownListMarker,markdownOrderedListMarker,markdownCodeBlock,markdownRule
+-syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop
++syn cluster markdownInline contains=markdownLineBreak,markdownLinkText,markdownItalic,markdownBold,markdownCode,markdownEscape,@htmlTop,markdownError
+ 
+-syn match markdownH1 ".\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule
+-syn match markdownH2 ".\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule
++syn match markdownH1 "^.\+\n=\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
++syn match markdownH2 "^.\+\n-\+$" contained contains=@markdownInline,markdownHeadingRule,markdownAutomaticLink
+ 
+ syn match markdownHeadingRule "^[=-]\+$" contained
+ 
+-syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline contained
+-syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline contained
+-syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline contained
+-syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline contained
+-syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline contained
+-syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline contained
++syn region markdownH1 matchgroup=markdownHeadingDelimiter start="##\@!"      end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
++syn region markdownH2 matchgroup=markdownHeadingDelimiter start="###\@!"     end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
++syn region markdownH3 matchgroup=markdownHeadingDelimiter start="####\@!"    end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
++syn region markdownH4 matchgroup=markdownHeadingDelimiter start="#####\@!"   end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
++syn region markdownH5 matchgroup=markdownHeadingDelimiter start="######\@!"  end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
++syn region markdownH6 matchgroup=markdownHeadingDelimiter start="#######\@!" end="#*\s*$" keepend oneline contains=@markdownInline,markdownAutomaticLink contained
+ 
+-syn match markdownBlockquote ">\s" contained nextgroup=@markdownBlock
++syn match markdownBlockquote ">\%(\s\|$\)" contained nextgroup=@markdownBlock
+ 
+ syn region markdownCodeBlock start="    \|\t" end="$" contained
+ 
+ " TODO: real nesting
+-syn match markdownListMarker " \{0,4\}[-*+]\%(\s\+\S\)\@=" contained
+-syn match markdownOrderedListMarker " \{0,4}\<\d\+\.\%(\s*\S\)\@=" contained
++syn match markdownListMarker "\%(\t\| \{0,4\}\)[-*+]\%(\s\+\S\)\@=" contained
++syn match markdownOrderedListMarker "\%(\t\| \{0,4}\)\<\d\+\.\%(\s\+\S\)\@=" contained
+ 
+ syn match markdownRule "\* *\* *\*[ *]*$" contained
+ syn match markdownRule "- *- *-[ -]*$" contained
+ 
+-syn match markdownLineBreak "\s\{2,\}$"
++syn match markdownLineBreak " \{2,\}$"
+ 
+ syn region markdownIdDeclaration matchgroup=markdownLinkDelimiter start="^ \{0,3\}!\=\[" end="\]:" oneline keepend nextgroup=markdownUrl skipwhite
+ syn match markdownUrl "\S\+" nextgroup=markdownUrlTitle skipwhite contained
+@@ -61,14 +77,23 @@
+ 
+ syn region markdownItalic start="\S\@<=\*\|\*\S\@=" end="\S\@<=\*\|\*\S\@=" keepend contains=markdownLineStart
+ syn region markdownItalic start="\S\@<=_\|_\S\@=" end="\S\@<=_\|_\S\@=" keepend contains=markdownLineStart
+-syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart
+-syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart
++syn region markdownBold start="\S\@<=\*\*\|\*\*\S\@=" end="\S\@<=\*\*\|\*\*\S\@=" keepend contains=markdownLineStart,markdownItalic
++syn region markdownBold start="\S\@<=__\|__\S\@=" end="\S\@<=__\|__\S\@=" keepend contains=markdownLineStart,markdownItalic
+ syn region markdownBoldItalic start="\S\@<=\*\*\*\|\*\*\*\S\@=" end="\S\@<=\*\*\*\|\*\*\*\S\@=" keepend contains=markdownLineStart
+ syn region markdownBoldItalic start="\S\@<=___\|___\S\@=" end="\S\@<=___\|___\S\@=" keepend contains=markdownLineStart
+-syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" transparent keepend contains=markdownLineStart
++syn region markdownCode matchgroup=markdownCodeDelimiter start="`" end="`" keepend contains=markdownLineStart
+ syn region markdownCode matchgroup=markdownCodeDelimiter start="`` \=" end=" \=``" keepend contains=markdownLineStart
++syn region markdownCode matchgroup=markdownCodeDelimiter start="^\s*```.*$" end="^\s*```\ze\s*$" keepend
++
++if main_syntax ==# 'markdown'
++  for s:type in g:markdown_fenced_languages
++    exe 'syn region markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\..*','','').' matchgroup=markdownCodeDelimiter start="^\s*```'.matchstr(s:type,'[^=]*').'\>.*$" end="^\s*```\ze\s*$" keepend contains=@markdownHighlight'.substitute(matchstr(s:type,'[^=]*$'),'\.','','g')
++  endfor
++  unlet! s:type
++endif
+ 
+ syn match markdownEscape "\\[][\\`*_{}()#+.!-]"
++syn match markdownError "\w\@<=_\w\@="
+ 
+ hi def link markdownH1                    htmlH1
+ hi def link markdownH2                    htmlH2
+@@ -99,7 +124,11 @@
+ hi def link markdownCodeDelimiter         Delimiter
+ 
+ hi def link markdownEscape                Special
++hi def link markdownError                 Error
+ 
+ let b:current_syntax = "markdown"
++if main_syntax ==# 'markdown'
++  unlet main_syntax
++endif
+ 
+ " vim:set sw=2:
+diff -Naur vim73.orig/runtime/syntax/masm.vim vim73/runtime/syntax/masm.vim
+--- vim73.orig/runtime/syntax/masm.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/masm.vim	2013-06-07 17:07:24.348939150 +0000
+@@ -2,8 +2,8 @@
+ " Language:	Microsoft Macro Assembler (80x86)
+ " Orig Author:	Rob Brady <robb@datatone.com>
+ " Maintainer:	Wu Yongwei <wuyongwei@gmail.com>
+-" Last Change:	$Date: 2007/04/21 13:20:15 $
+-" $Revision: 1.44 $
++" Last Change:	$Date: 2012/02/04 12:45:39 $
++" $Revision: 1.46 $
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -13,6 +13,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ 
+ 
+@@ -184,6 +187,12 @@
+ syn keyword masmRegister	TR3 TR4 TR5 TR6 TR7
+ syn match   masmRegister	"ST([0-7])"
+ 
++" x86-64 registers
++syn keyword masmRegister	RAX RBX RCX RDX RSI RDI RBP RSP
++syn keyword masmRegister	R8 R9 R10 R11 R12 R13 R14 R15
++syn keyword masmRegister	R8D R9D R10D R11D R12D R13D R14D R15D
++syn keyword masmRegister	R8W R9W R10W R11W R12W R13W R14W R15W
++syn keyword masmRegister	R8B R9B R10B R11B R12B R13B R14B R15B
+ 
+ " Instruction prefixes
+ syn keyword masmOpcode		LOCK REP REPE REPNE REPNZ REPZ
+@@ -340,4 +349,7 @@
+ 
+ let b:current_syntax = "masm"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/matlab.vim vim73/runtime/syntax/matlab.vim
+--- vim73.orig/runtime/syntax/matlab.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/matlab.vim	2013-06-07 17:07:24.392272360 +0000
+@@ -4,6 +4,8 @@
+ " Credits:	Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
+ "		Original author: Mario Eusebio
+ " Last Change:	Wed Jan 13 11:12:34 CET 2010
++" 		sinh added to matlab implicit commands
++" Change History:
+ " 		- 'global' and 'persistent' keyword are now recognized
+ 
+ " For version 5.x: Clear all syntax items
+@@ -68,7 +70,7 @@
+ syn keyword matlabFunction		error eval function
+ 
+ syn keyword matlabImplicit		abs acos atan asin cos cosh exp log prod sum
+-syn keyword matlabImplicit		log10 max min sign sin sqrt tan reshape
++syn keyword matlabImplicit		log10 max min sign sin sinh sqrt tan reshape
+ 
+ syn match matlabError	"-\=\<\d\+\.\d\+\.[^*/\\^]"
+ syn match matlabError	"-\=\<\d\+\.\d\+[eEdD][-+]\=\d\+\.\([^*/\\^]\)"
+diff -Naur vim73.orig/runtime/syntax/mma.vim vim73/runtime/syntax/mma.vim
+--- vim73.orig/runtime/syntax/mma.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/mma.vim	2013-06-07 17:07:24.488938750 +0000
+@@ -1,12 +1,12 @@
+ " Vim syntax file
+ " Language:     Mathematica
+ " Maintainer:   steve layland <layland@wolfram.com>
+-" Last Change:  Thu May 19 21:36:04 CDT 2005
++" Last Change:  2012 Feb 03 by Thilo Six
+ " Source:       http://members.wri.com/layland/vim/syntax/mma.vim
+ "               http://vim.sourceforge.net/scripts/script.php?script_id=1273
+ " Id:           $Id: mma.vim,v 1.4 2006/04/14 20:40:38 vimboss Exp $
+ " NOTE:
+-" 
++"
+ " Empty .m files will automatically be presumed as Matlab files
+ " unless you have the following in your .vimrc:
+ "
+@@ -14,7 +14,7 @@
+ "
+ " I also recommend setting the default 'Comment' hilighting to something
+ " other than the color used for 'Function', since both are plentiful in
+-" most mathematica files, and they are often the same color (when using 
++" most mathematica files, and they are often the same color (when using
+ " background=dark).
+ "
+ " Credits:
+@@ -24,11 +24,11 @@
+ "    from the Java vim syntax file by Claudio Fleiner.  Thanks!
+ " o  Everything else written by steve <layland@wolfram.com>
+ "
+-" Bugs: 
+-" o  Vim 6.1 didn't really have support for character classes 
++" Bugs:
++" o  Vim 6.1 didn't really have support for character classes
+ "    of other named character classes.  For example, [\a\d]
+ "    didn't work.  Therefore, a lot of this code uses explicit
+-"    character classes instead: [0-9a-zA-Z] 
++"    character classes instead: [0-9a-zA-Z]
+ "
+ " TODO:
+ "   folding
+@@ -41,6 +41,9 @@
+     finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Group Definitions:
+ syntax cluster mmaNotes contains=mmaTodo,mmaFixme
+ syntax cluster mmaComments contains=mmaComment,mmaFunctionComment,mmaItem,mmaFunctionTitle,mmaCommentStar
+@@ -58,7 +61,7 @@
+ syntax keyword mmaVariable True False None Automatic All Null C General
+ 
+ " mathematical constants:
+-syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher 
++syntax keyword mmaVariable Pi I E Infinity ComplexInfinity Indeterminate GoldenRatio EulerGamma Degree Catalan Khinchin Glaisher
+ 
+ " stream data / atomic heads:
+ syntax keyword mmaVariable Byte Character Expression Number Real String Word EndOfFile Integer Symbol
+@@ -80,7 +83,7 @@
+ syntax keyword mmaVariable Black Blue Brown Cyan Gray Green Magenta Orange Pink Purple Red White Yellow
+ 
+ " function attributes
+-syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub 
++syntax keyword mmaVariable Protected Listable OneIdentity Orderless Flat Constant NumericFunction Locked ReadProtected HoldFirst HoldRest HoldAll HoldAllComplete SequenceHold NHoldFirst NHoldRest NHoldAll Temporary Stub
+ 
+ " Comment Sections:
+ "   this:
+@@ -135,25 +138,25 @@
+ 
+ " Patterns:
+ "   Each pattern marker below can be Blank[] (_), BlankSequence[] (__)
+-"   or BlankNullSequence[] (___).  Most examples below can also be 
++"   or BlankNullSequence[] (___).  Most examples below can also be
+ "   combined, for example Pattern tests with Default values.
+-"   
++"
+ "   _Head                   Anonymous patterns
+-"   name_Head 
++"   name_Head
+ "   name:(_Head|_Head2)     Named patterns
+-"    
++"
+ "   _Head : val
+ "   name:_Head:val          Default values
+ "
+-"   _Head?testQ, 
++"   _Head?testQ,
+ "   _Head?(test[#]&)        Pattern tests
+ "
+ "   name_Head/;test[name]   Conditionals
+-"   
++"
+ "   _Head:.                 Predefined Default
+ "
+ "   .. ...                  Pattern Repeat
+-   
++
+ syntax match mmaPatternError "\%(_\{4,}\|)\s*&\s*)\@!\)" contained
+ 
+ "pattern name:
+@@ -172,7 +175,7 @@
+ "   >= <= < >
+ "   += -= *=
+ "   /= ++ --    Math
+-"   ^* 
++"   ^*
+ "   -> :>       Rules
+ "   @@ @@@      Apply
+ "   /@ //@      Map
+@@ -200,7 +203,7 @@
+ syntax match mmaPureFunction "&"
+ 
+ " Named Functions:
+-" Since everything is pretty much a function, get this straight 
++" Since everything is pretty much a function, get this straight
+ " from context
+ syntax match mmaGenericFunction "[A-Za-z0-9`]\+\s*\%([@[]\|/:\|/\=/@\)\@=" contains=mmaOperator
+ syntax match mmaGenericFunction "\~\s*[^~]\+\s*\~"hs=s+1,he=e-1 contains=mmaOperator,mmaBoring
+@@ -223,7 +226,7 @@
+ syntax match mmaError "\%([/]{3,}\|[&:|+*?~-]\{3,}\|[.=]\{4,}\|_\@<=\.\{2,}\|`\{2,}\)" containedin=ALLBUT,@mmaComments,@mmaStrings
+ 
+ " Punctuation:
+-" things that shouldn't really be highlighted, or highlighted 
++" things that shouldn't really be highlighted, or highlighted
+ " in they're own group if you _really_ want. :)
+ "  ( ) { }
+ " TODO - use Delimiter group?
+@@ -251,9 +254,9 @@
+ 
+ "function MmaFoldText()
+ "    let line = getline(v:foldstart)
+-"    
++"
+ "    let lines = v:foldend-v:foldstart+1
+-"    
++"
+ "    let sub = substitute(line, '(\*\+|\*\+)|[-*_]\+', '', 'g')
+ "
+ "    if match(line, '(\*') != -1
+@@ -264,7 +267,7 @@
+ "
+ "    return v:folddashes.' '.lines.' '.sub
+ "endf
+-    
++
+ "this is slow for computing folds, but it does so accurately
+ syntax sync fromstart
+ 
+@@ -288,8 +291,8 @@
+ 		command -nargs=+ HiLink hi def link <args>
+ 	endif
+ 
+-    " NOTE - the following links are not guaranteed to 
+-    " look good under all colorschemes.  You might need to 
++    " NOTE - the following links are not guaranteed to
++    " look good under all colorschemes.  You might need to
+     " :so $VIMRUNTIME/syntax/hitest.vim and tweak these to
+     " look good in yours
+ 
+@@ -323,3 +326,6 @@
+ endif
+ 
+ let b:current_syntax = "mma"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/mmix.vim vim73/runtime/syntax/mmix.vim
+--- vim73.orig/runtime/syntax/mmix.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/mmix.vim	2013-06-07 17:07:24.502272046 +0000
+@@ -1,12 +1,13 @@
+ " Vim syntax file
+ " Language:	MMIX
+ " Maintainer:	Dirk Hüsken, <huesken@informatik.uni-tuebingen.de>
+-" Last Change:	Wed Apr 24 01:18:52 CEST 2002
++" Last Change:	2012 Jun 01
++" 		(Dominique Pelle added @Spell)
+ " Filenames:	*.mms
+ " URL: http://homepages.uni-tuebingen.de/student/dirk.huesken/vim/syntax/mmix.vim
+ 
+ " Limitations:	Comments must start with either % or //
+-"		(preferrably %, Knuth-Style)
++"		(preferably %, Knuth-Style)
+ 
+ if version < 600
+   syntax clear
+@@ -23,7 +24,7 @@
+ syn match decNumber		"[0-9]*"
+ syn match octNumber		"0[0-7][0-7]\+"
+ syn match hexNumber		"#[0-9a-fA-F]\+"
+-syn region mmixString		start=+"+ skip=+\\"+ end=+"+
++syn region mmixString		start=+"+ skip=+\\"+ end=+"+ contains=@Spell
+ syn match mmixChar		"'.'"
+ 
+ " ...and more special MMIX stuff
+@@ -40,9 +41,9 @@
+ syn keyword mmixPseudo		is loc greg
+ 
+ " comments
+-syn match mmixComment		"%.*"
+-syn match mmixComment		"//.*"
+-syn match mmixComment		"^\*.*"
++syn match mmixComment		"%.*" contains=@Spell
++syn match mmixComment		"//.*" contains=@Spell
++syn match mmixComment		"^\*.*" contains=@Spell
+ 
+ 
+ syn keyword mmixOpcode	trap fcmp fun feql fadd fix fsub fixu
+diff -Naur vim73.orig/runtime/syntax/monk.vim vim73/runtime/syntax/monk.vim
+--- vim73.orig/runtime/syntax/monk.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/monk.vim	2013-06-07 17:07:24.578938493 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language: Monk (See-Beyond Technologies)
+ " Maintainer: Mike Litherland <litherm@ccf.org>
+-" Last Change: March 6, 2002
++" Last Change: 2012 Feb 03 by Thilo Six
+ 
+ " This syntax file is good enough for my needs, but others
+ " may desire more features.  Suggestions and bug reports
+@@ -29,6 +29,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ 
+ " Fascist highlighting: everything that doesn't fit the rules is an error...
+@@ -226,3 +229,6 @@
+ endif
+ 
+ let b:current_syntax = "monk"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/mrxvtrc.vim vim73/runtime/syntax/mrxvtrc.vim
+--- vim73.orig/runtime/syntax/mrxvtrc.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/mrxvtrc.vim	2013-06-07 17:07:24.632271674 +0000
+@@ -1,13 +1,16 @@
+-" Created	: Wed 26 Apr 2006 01:20:53 AM CDT
+-" Modified	: Mon 27 Aug 2007 12:10:37 PM PDT
+-" Author	: Gautam Iyer <gi1242@users.sourceforge.net>
+ " Description	: Vim syntax file for mrxvtrc (for mrxvt-0.5.0 and up)
++" Created	: Wed 26 Apr 2006 01:20:53 AM CDT
++" Modified	: Thu 02 Feb 2012 08:37:45 PM EST
++" Maintainer	: GI <a@b.c>, where a='gi1242+vim', b='gmail', c='com'
+ 
+ " Quit when a syntax file was already loaded
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case match
+ 
+ " Errors
+@@ -274,3 +277,6 @@
+ hi def link mrxvtrcSubwin	mrxvtrcStrVal
+ 
+ let b:current_syntax = "mrxvtrc"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/msidl.vim vim73/runtime/syntax/msidl.vim
+--- vim73.orig/runtime/syntax/msidl.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/msidl.vim	2013-06-07 17:07:24.642271646 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:     MS IDL (Microsoft dialect of Interface Description Language)
+ " Maintainer:   Vadim Zeitlin <vadim@wxwindows.org>
+-" Last Change:  2003 May 11
++" Last Change:  2012 Feb 12 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Misc basic
+ syn match   msidlId		"[a-zA-Z][a-zA-Z0-9_]*"
+ syn match   msidlUUID		"{\?[[:xdigit:]]\{8}-\([[:xdigit:]]\{4}-\)\{3}[[:xdigit:]]\{12}}\?"
+@@ -89,4 +92,6 @@
+ 
+ let b:current_syntax = "msidl"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vi: set ts=8 sw=4:
+diff -Naur vim73.orig/runtime/syntax/muttrc.vim vim73/runtime/syntax/muttrc.vim
+--- vim73.orig/runtime/syntax/muttrc.vim	2010-08-09 18:25:08.000000000 +0000
++++ vim73/runtime/syntax/muttrc.vim	2013-06-07 17:07:24.702271475 +0000
+@@ -2,9 +2,9 @@
+ " Language:	Mutt setup files
+ " Original:	Preben 'Peppe' Guldberg <peppe-vim@wielders.org>
+ " Maintainer:	Kyle Wheeler <kyle-muttrc.vim@memoryhole.net>
+-" Last Change:	9 Aug 2010
++" Last Change:	2 Feb 2012
+ 
+-" This file covers mutt version 1.5.20 (and most of the mercurial tip)
++" This file covers mutt version 1.5.21 (and most of the mercurial tip)
+ " Included are also a few features from 1.4.2.1
+ 
+ " For version 5.x: Clear all syntax items
+@@ -15,6 +15,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Set the keyword characters
+ if version < 600
+   set isk=@,48-57,_,-
+@@ -22,6 +25,11 @@
+   setlocal isk=@,48-57,_,-
+ endif
+ 
++" handling optional variables
++if !exists("use_mutt_sidebar")
++  let use_mutt_sidebar=0
++endif
++
+ syn match muttrcComment		"^# .*$" contains=@Spell
+ syn match muttrcComment		"^#[^ ].*$"
+ syn match muttrcComment		"^#$"
+@@ -98,7 +106,7 @@
+ syn region  muttrcKey		contained start=+'+ skip=+\\\\\|\\'+ end=+'+	contains=muttrcKeySpecial,muttrcKeyName
+ syn match   muttrcKeyName	contained "\<f\%(\d\|10\)\>"
+ syn match   muttrcKeyName	contained "\\[trne]"
+-syn match   muttrcKeyName	contained "\c<\%(BackSpace\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
++syn match   muttrcKeyName	contained "\c<\%(BackSpace\|BackTab\|Delete\|Down\|End\|Enter\|Esc\|Home\|Insert\|Left\|PageDown\|PageUp\|Return\|Right\|Space\|Tab\|Up\)>"
+ syn match   muttrcKeyName	contained "<F[0-9]\+>"
+ 
+ syn keyword muttrcVarBool	skipwhite contained allow_8bit allow_ansi arrow_cursor ascii_chars askbcc askcc attach_split auto_tag autoedit beep beep_new nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+@@ -207,6 +215,9 @@
+ syn keyword muttrcVarBool	skipwhite contained invthread_received invtilde invuncollapse_jump invuse_8bitmime nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+ syn keyword muttrcVarBool	skipwhite contained invuse_domain invuse_envelope_from invuse_from invuse_idn invuse_ipv6 nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+ syn keyword muttrcVarBool	skipwhite contained invuser_agent invwait_key invweed invwrap_search invwrite_bcc nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
++if use_mutt_sidebar == 1
++    syn keyword muttrcVarBool skipwhite contained sidebar_visible sidebar_sort nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
++endif
+ 
+ syn keyword muttrcVarQuad	skipwhite contained abort_nosubject abort_unmodified bounce copy nextgroup=muttrcSetQuadAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+ syn keyword muttrcVarQuad	skipwhite contained crypt_verify_sig delete fcc_attach forward_edit honor_followup_to nextgroup=muttrcSetQuadAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+@@ -232,6 +243,9 @@
+ syn keyword muttrcVarNum	skipwhite contained score_threshold_flag score_threshold_read search_context sendmail_wait sleep_time nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+ syn keyword muttrcVarNum	skipwhite contained smime_timeout ssl_min_dh_prime_bits timeout time_inc wrap wrapmargin nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+ syn keyword muttrcVarNum	skipwhite contained write_inc nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
++if use_mutt_sidebar == 1
++    syn keyword muttrcVarNum skipwhite contained sidebar_width nextgroup=muttrcSetNumAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
++endif
+ 
+ syn match muttrcFormatErrors contained /%./
+ 
+@@ -372,6 +386,9 @@
+ syn keyword muttrcVarStr	contained skipwhite smtp_url smtp_authenticators smtp_pass sort sort_alias sort_aux nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+ syn keyword muttrcVarStr	contained skipwhite sort_browser spam_separator spoolfile ssl_ca_certificates_file ssl_client_cert nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+ syn keyword muttrcVarStr	contained skipwhite status_chars tmpdir to_chars tunnel visual nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
++if use_mutt_sidebar == 1
++    syn keyword muttrcVarStr skipwhite contained sidebar_delim nextgroup=muttrcSetStrAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
++endif
+ 
+ " Present in 1.4.2.1 (pgp_create_traditional was a bool then)
+ syn keyword muttrcVarBool	contained skipwhite imap_force_ssl noimap_force_ssl invimap_force_ssl nextgroup=muttrcSetBoolAssignment,muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+@@ -417,7 +434,10 @@
+ syn keyword muttrcAlternateKeyword contained alternates unalternates
+ syn region muttrcAlternatesLine keepend start=+^\s*\%(un\)\?alternates\s+ skip=+\\$+ end=+$+ contains=muttrcAlternateKeyword,muttrcGroupDef,muttrcRXPat,muttrcUnHighlightSpace,muttrcComment
+ 
+-syn match muttrcVariable	contained "\\\@<!\$[a-zA-Z_-]\+"
++" muttrcVariable includes a prefix because partial strings are considered
++" valid.
++syn match muttrcVariable	contained "\\\@<![a-zA-Z_-]*\$[a-zA-Z_-]\+" contains=muttrcVariableInner
++syn match muttrcVariableInner	contained "\$[a-zA-Z_-]\+"
+ syn match muttrcEscapedVariable	contained "\\\$[a-zA-Z_-]\+"
+ 
+ syn match muttrcBadAction	contained "[^<>]\+" contains=muttrcEmail
+@@ -450,6 +470,9 @@
+ syn match muttrcFunction	contained "\<collapse-\%(parts\|thread\|all\)\>"
+ syn match muttrcFunction	contained "\<view-\%(attach\|attachments\|file\|mailcap\|name\|text\)\>"
+ syn match muttrcFunction	contained "\<\%(backspace\|backward-char\|bol\|bottom\|bottom-page\|buffy-cycle\|clear-flag\|complete\%(-query\)\?\|copy-file\|create-alias\|detach-file\|eol\|exit\|extract-keys\|\%(imap-\)\?fetch-mail\|forget-passphrase\|forward-char\|group-reply\|help\|ispell\|jump\|limit\|list-reply\|mail\|mail-key\|mark-as-new\|middle-page\|new-mime\|noop\|pgp-menu\|query\|query-append\|quit\|quote-char\|read-subthread\|redraw-screen\|refresh\|rename-file\|reply\|select-new\|set-flag\|shell-escape\|skip-quoted\|sort\|subscribe\|sync-mailbox\|top\|top-page\|transpose-chars\|unsubscribe\|untag-pattern\|verify-key\|what-key\|write-fcc\)\>"
++if use_mutt_sidebar == 1
++    syn match muttrcFunction    contained "\<sidebar-\%(prev\|next\|open\|scroll-up\|scroll-down\)"
++endif
+ syn match muttrcAction		contained "<[^>]\{-}>" contains=muttrcBadAction,muttrcFunction,muttrcKeyName
+ 
+ syn keyword muttrcCommand	set     skipwhite nextgroup=muttrcVPrefix,muttrcVarBool,muttrcVarQuad,muttrcVarNum,muttrcVarStr
+@@ -523,7 +546,7 @@
+ syn match muttrcSimplePat contained "!\?\^\?[~][dr]\s*\%(\%(-\?[0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)\|\%(\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)*\)-\%([0-9]\{1,2}\%(/[0-9]\{1,2}\%(/[0-9]\{2}\%([0-9]\{2}\)\?\)\?\)\?\%([+*-][0-9]\+[ymwd]\)\?\)\?\)\|\%([<>=][0-9]\+[ymwd]\)\|\%(`[^`]\+`\)\|\%(\$[a-zA-Z0-9_-]\+\)\)" contains=muttrcShellString,muttrcVariable
+ syn match muttrcSimplePat contained "!\?\^\?[~][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatRXContainer
+ syn match muttrcSimplePat contained "!\?\^\?[%][bBcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
+-syn match muttrcSimplePat contained "!\?\^\?[=][bh]\s*" nextgroup=muttrcSimplePatString
++syn match muttrcSimplePat contained "!\?\^\?[=][bcCefhHiLstxy]\s*" nextgroup=muttrcSimplePatString
+ syn region muttrcSimplePat contained keepend start=+!\?\^\?[~](+ end=+)+ contains=muttrcSimplePat
+ "syn match muttrcSimplePat contained /'[^~=%][^']*/ contains=muttrcRXString
+ syn region muttrcSimplePatString contained keepend start=+"+ end=+"+ skip=+\\"+
+@@ -557,9 +580,12 @@
+ syn region muttrcColorRXPat	contained start=+\s*"+ skip=+\\"+ end=+"\s*+ keepend skipwhite contains=muttrcRXString2 nextgroup=muttrcColorMatchCount,muttrcColorMatchCountNL
+ syn keyword muttrcColorField	contained attachment body bold error hdrdefault header index indicator markers message normal quoted search signature status tilde tree underline
+ syn match   muttrcColorField	contained "\<quoted\d\=\>"
++if use_mutt_sidebar == 1
++    syn keyword muttrcColorField contained sidebar_new
++endif
+ syn keyword muttrcColor	contained black blue cyan default green magenta red white yellow
+ syn keyword muttrcColor	contained brightblack brightblue brightcyan brightdefault brightgreen brightmagenta brightred brightwhite brightyellow
+-syn match   muttrcColor	contained "\<\%(bright\)\=color\d\{1,2}\>"
++syn match   muttrcColor	contained "\<\%(bright\)\=color\d\{1,3}\>"
+ " Now for the structure of the color line
+ syn match muttrcColorRXNL	contained skipnl "\s*\\$" nextgroup=muttrcColorRXPat,muttrcColorRXNL
+ syn match muttrcColorBG 	contained /\s*[$]\?\w\+/ contains=muttrcColor,muttrcVariable,muttrcUnHighlightSpace nextgroup=muttrcColorRXPat,muttrcColorRXNL
+@@ -641,7 +667,7 @@
+   HiLink muttrcSetQuadAssignment	Boolean
+   HiLink muttrcSetStrAssignment	String
+   HiLink muttrcEmail		Special
+-  HiLink muttrcVariable		Special
++  HiLink muttrcVariableInner	Special
+   HiLink muttrcEscapedVariable	String
+   HiLink muttrcHeader		Type
+   HiLink muttrcKeySpecial	SpecialChar
+@@ -765,4 +791,6 @@
+ 
+ let b:current_syntax = "muttrc"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ "EOF	vim: ts=8 noet tw=100 sw=8 sts=0 ft=vim
+diff -Naur vim73.orig/runtime/syntax/nasm.vim vim73/runtime/syntax/nasm.vim
+--- vim73.orig/runtime/syntax/nasm.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/nasm.vim	2013-06-07 17:07:24.748938008 +0000
+@@ -1,9 +1,10 @@
+ " Vim syntax file
+ " Language:	NASM - The Netwide Assembler (v0.98)
+-" Maintainer:	Manuel M.H. Stol	<mmh.stol@gmx.net>
+-" Last Change:	2003 May 11
+-" Vim URL:	http://www.vim.org/lang.html
+-" NASM Home:	http://www.cryogen.com/Nasm/
++" Maintainer:	Andriy Sokolov	<andriy145@gmail.com>
++" Original Author:	Manuel M.H. Stol	<Manuel.Stol@allieddata.nl>
++" Former Maintainer:	Manuel M.H. Stol	<Manuel.Stol@allieddata.nl>
++" Last Change:	2012 Feb 7
++" NASM Home:	http://www.nasm.us/
+ 
+ 
+ 
+@@ -47,14 +48,14 @@
+ "  in NASM: 'Everything is a Label'
+ "  Definition Label = label defined by %[i]define or %[i]assign
+ "  Identifier Label = label defined as first non-keyword on a line or %[i]macro
+-syn match   nasmLabelError	"$\=\(\d\+\K\|[#\.@]\|\$\$\k\)\k*\>"
++syn match   nasmLabelError	"$\=\(\d\+\K\|[#.@]\|\$\$\k\)\k*\>"
+ syn match   nasmLabel		"\<\(\h\|[?@]\)\k*\>"
+ syn match   nasmLabel		"[\$\~]\(\h\|[?@]\)\k*\>"lc=1
+ "  Labels starting with one or two '.' are special
+ syn match   nasmLocalLabel	"\<\.\(\w\|[#$?@~]\)\k*\>"
+ syn match   nasmLocalLabel	"\<\$\.\(\w\|[#$?@~]\)\k*\>"ms=s+1
+ if !exists("nasm_no_warn")
+-  syn match  nasmLabelWarn	"\<\~\=\$\=[_\.][_\.\~]*\>"
++  syn match  nasmLabelWarn	"\<\~\=\$\=[_.][_.\~]*\>"
+ endif
+ if exists("nasm_loose_syntax")
+   syn match   nasmSpecialLabel	"\<\.\.@\k\+\>"
+@@ -91,7 +92,6 @@
+ syn match   nasmNumberError	"\<\~\s*\d\+\.\d*\(e[+-]\=\d\+\)\=\>"
+ 
+ 
+-
+ " Netwide Assembler Storage Directives:
+ "  Storage types
+ syn keyword nasmTypeError	DF EXTRN FWORD RESF TBYTE
+@@ -160,6 +160,7 @@
+ "syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="^\s*UNION\>"hs=e-4 end="^\s*ENDUNION\>"re=e-8 contains=@nasmGrpCntnMacro
+ "syn region  nasmInMacStrucDef	contained transparent matchgroup=nasmStructure keepend start="\<IUNION\>" end="\<IEND\(UNION\)\=\>" contains=@nasmGrpCntnMacro,nasmInStructure
+ syn region  nasmInMacPreConDef	contained transparent matchgroup=nasmInMacPreCondit start="^\s*%ifnidni\>"hs=e-7 start="^\s*%if\(idni\|n\(ctx\|def\|idn\|num\|str\)\)\>"hs=e-6 start="^\s*%if\(ctx\|def\|idn\|nid\|num\|str\)\>"hs=e-5 start="^\s*%ifid\>"hs=e-4 start="^\s*%if\>"hs=e-2 end="%endif\>" contains=@nasmGrpCntnMacro,nasmInMacPreCondit,nasmInPreCondit
++" Todo: allow STRUC/ISTRUC to be used inside preprocessor conditional block
+ syn match   nasmInMacPreCondit	contained transparent "ctx\s"lc=3 skipwhite nextgroup=@nasmGrpNxtCtx
+ syn match   nasmInMacPreCondit	contained "^\s*%elifctx\>"hs=e-7 skipwhite nextgroup=@nasmGrpNxtCtx
+ syn match   nasmInMacPreCondit	contained "^\s*%elifnctx\>"hs=e-8 skipwhite nextgroup=@nasmGrpNxtCtx
+@@ -179,7 +180,7 @@
+   syn region nasmPreConditDef	transparent matchgroup=nasmCtxPreCondit start="^\s*%ifnctx\>"hs=e-6 start="^\s*%ifctx\>"hs=e-5 end="%endif\>" contains=@nasmGrpCntnPreCon
+   syn match  nasmCtxPreProc	"^\s*%pop\>"hs=e-3
+   if exists("nasm_loose_syntax")
+-    syn match   nasmCtxLocLabel	"%$\+\(\w\|[#\.?@~]\)\k*\>"
++    syn match   nasmCtxLocLabel	"%$\+\(\w\|[#.?@~]\)\k*\>"
+   else
+     syn match   nasmCtxLocLabel	"%$\+\(\h\|[?@]\)\k*\>"
+   endif
+@@ -210,15 +211,17 @@
+ syn cluster nasmGrpPreCondits	contains=nasmPreConditDef,@nasmGrpInPreCondits,nasmCtxPreProc,nasmCtxLocLabel
+ 
+ "  Other pre-processor statements
+-syn match   nasmPreProc		"^\s*%rep\>"hs=e-3
++syn match   nasmPreProc		"^\s*%\(rep\|use\)\>"hs=e-3
+ syn match   nasmPreProc		"^\s*%line\>"hs=e-4
+-syn match   nasmPreProc		"^\s*%\(clear\|error\)\>"hs=e-5
+-syn match   nasmPreProc		"^\s*%endrep\>"hs=e-6
+-syn match   nasmPreProc		"^\s*%exitrep\>"hs=e-7
++syn match   nasmPreProc		"^\s*%\(clear\|error\|fatal\)\>"hs=e-5
++syn match   nasmPreProc		"^\s*%\(endrep\|strlen\|substr\)\>"hs=e-6
++syn match   nasmPreProc		"^\s*%\(exitrep\|warning\)\>"hs=e-7
+ syn match   nasmDefine		"^\s*%undef\>"hs=e-5
+ syn match   nasmDefine		"^\s*%\(assign\|define\)\>"hs=e-6
+ syn match   nasmDefine		"^\s*%i\(assign\|define\)\>"hs=e-7
++syn match   nasmDefine		"^\s*%unmacro\>"hs=e-7
+ syn match   nasmInclude		"^\s*%include\>"hs=e-7
++" Todo: Treat the line tail after %fatal, %error, %warning as text
+ 
+ "  Multiple pre-processor instructions on single line detection (obsolete)
+ "syn match   nasmPreProcError	+^\s*\([^\t "%';][^"%';]*\|[^\t "';][^"%';]\+\)%\a\+\>+
+@@ -231,6 +234,7 @@
+ syn match   nasmGen08Register	"\<[A-D][HL]\>"
+ syn match   nasmGen16Register	"\<\([A-D]X\|[DS]I\|[BS]P\)\>"
+ syn match   nasmGen32Register	"\<E\([A-D]X\|[DS]I\|[BS]P\)\>"
++syn match   nasmGen64Register	"\<R\([A-D]X\|[DS]I\|[BS]P\|[89]\|1[0-5]\|[89][WD]\|1[0-5][WD]\)\>"
+ syn match   nasmSegRegister	"\<[C-GS]S\>"
+ syn match   nasmSpcRegister	"\<E\=IP\>"
+ syn match   nasmFpuRegister	"\<ST\o\>"
+@@ -244,10 +248,10 @@
+ syn match   nasmRegisterError	"\<ST\((\d)\|[8-9]\>\)"
+ syn match   nasmRegisterError	"\<E\([A-D][HL]\|[C-GS]S\)\>"
+ "  Memory reference operand (address):
+-syn match   nasmMemRefError	"[\[\]]"
++syn match   nasmMemRefError	"[[\]]"
+ syn cluster nasmGrpCntnMemRef	contains=ALLBUT,@nasmGrpComments,@nasmGrpPreProcs,@nasmGrpInStrucs,nasmMemReference,nasmMemRefError
+-syn match   nasmInMacMemRef	contained "\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
+-syn match   nasmMemReference	"\[[^;\[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
++syn match   nasmInMacMemRef	contained "\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmInMacLabel,nasmInMacLblWarn,nasmInMacParam
++syn match   nasmMemReference	"\[[^;[\]]\{-}\]" contains=@nasmGrpCntnMemRef,nasmPreProcError,nasmCtxLocLabel
+ 
+ 
+ 
+@@ -298,20 +302,21 @@
+ syn match   nasmStdInstruction	"\<POP\>"
+ syn keyword nasmStdInstruction	AAA AAD AAM AAS ADC ADD AND
+ syn keyword nasmStdInstruction	BOUND BSF BSR BSWAP BT[C] BTR BTS
+-syn keyword nasmStdInstruction	CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW
+-syn keyword nasmStdInstruction	CMPXCHG CMPXCHG8B CPUID CWD[E]
++syn keyword nasmStdInstruction	CALL CBW CDQ CLC CLD CMC CMP CMPSB CMPSD CMPSW CMPSQ
++syn keyword nasmStdInstruction	CMPXCHG CMPXCHG8B CPUID CWD[E] CQO
+ syn keyword nasmStdInstruction	DAA DAS DEC DIV ENTER
+-syn keyword nasmStdInstruction	IDIV IMUL INC INT[O] IRET[D] IRETW
++syn keyword nasmStdInstruction	IDIV IMUL INC INT[O] IRET[D] IRETW IRETQ
+ syn keyword nasmStdInstruction	JCXZ JECXZ JMP
+-syn keyword nasmStdInstruction	LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD
++syn keyword nasmStdInstruction	LAHF LDS LEA LEAVE LES LFS LGS LODSB LODSD LODSQ
+ syn keyword nasmStdInstruction	LODSW LOOP[E] LOOPNE LOOPNZ LOOPZ LSS
+-syn keyword nasmStdInstruction	MOVSB MOVSD MOVSW MOVSX MOVZX MUL NEG NOP NOT
+-syn keyword nasmStdInstruction	OR POPA[D] POPAW POPF[D] POPFW
+-syn keyword nasmStdInstruction	PUSH[AD] PUSHAW PUSHF[D] PUSHFW
++syn keyword nasmStdInstruction	MOVSB MOVSD MOVSW MOVSX MOVSQ MOVZX MUL NEG NOP NOT
++syn keyword nasmStdInstruction	OR POPA[D] POPAW POPF[D] POPFW POPFQ
++syn keyword nasmStdInstruction	PUSH[AD] PUSHAW PUSHF[D] PUSHFW PUSHFQ
+ syn keyword nasmStdInstruction	RCL RCR RETF RET[N] ROL ROR
+ syn keyword nasmStdInstruction	SAHF SAL SAR SBB SCASB SCASD SCASW
+-syn keyword nasmStdInstruction	SHL[D] SHR[D] STC STD STOSB STOSD STOSW SUB
++syn keyword nasmStdInstruction	SHL[D] SHR[D] STC STD STOSB STOSD STOSW STOSQ SUB
+ syn keyword nasmStdInstruction	TEST XADD XCHG XLATB XOR
++syn keyword nasmStdInstruction	LFENCE MFENCE SFENCE
+ 
+ 
+ " System Instructions: (usually privileged)
+diff -Naur vim73.orig/runtime/syntax/natural.vim vim73/runtime/syntax/natural.vim
+--- vim73.orig/runtime/syntax/natural.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/natural.vim	2013-06-07 17:07:24.765604627 +0000
+@@ -1,9 +1,9 @@
+ " Vim syntax file
+ "
+ " Language:	NATURAL
+-" Version:	2.1.0.3
++" Version:	2.1.0.5
+ " Maintainer:	Marko von Oppen <marko@von-oppen.com>
+-" Last Changed:	2008-07-29 01:40:52
++" Last Changed:	2012-02-05 18:50:43
+ " Support:	http://www.von-oppen.com/
+ 
+ " For version 5.x: Clear all syntax items
+@@ -17,6 +17,9 @@
+   setlocal iskeyword+=-,*,#,+,_,/
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " NATURAL is case insensitive
+ syntax case ignore
+ 
+@@ -206,4 +209,7 @@
+ 
+ let b:current_syntax = "natural"
+ 
+-" vim:set ts=8 sw=8 noet ft=vim:
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim:set ts=8 sw=8 noet ft=vim list:
+diff -Naur vim73.orig/runtime/syntax/netrw.vim vim73/runtime/syntax/netrw.vim
+--- vim73.orig/runtime/syntax/netrw.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/netrw.vim	2013-06-07 17:07:24.795604541 +0000
+@@ -1,7 +1,7 @@
+ " Language   : Netrw Remote-Directory Listing Syntax
+ " Maintainer : Charles E. Campbell, Jr.
+-" Last change: Jan 14, 2009
+-" Version    : 16
++" Last change: Dec 18, 2012
++" Version    : 17
+ " ---------------------------------------------------------------------
+ 
+ " Syntax Clearing: {{{1
+@@ -22,7 +22,7 @@
+ syn match  netrwDir		"\%(\S\+ \)*\S\+/"					contains=netrwClassify,@NoSpell
+ syn match  netrwSizeDate	"\<\d\+\s\d\{1,2}/\d\{1,2}/\d\{4}\s"	skipwhite	contains=netrwDateSep,@NoSpell	nextgroup=netrwTime
+ syn match  netrwSymLink		"\%(\S\+ \)*\S\+@\ze\%(\s\{2,}\|$\)"  			contains=netrwClassify,@NoSpell
+-syn match  netrwExe		"\%(\S\+ \)*\S\+\*\ze\%(\s\{2,}\|$\)" 			contains=netrwClassify,@NoSpell
++syn match  netrwExe		"\%(\S\+ \)*\S*[^~]\*\ze\%(\s\{2,}\|$\)" 		contains=netrwClassify,@NoSpell
+ syn match  netrwTreeBar		"^\%([-+|] \)\+"					contains=netrwTreeBarSpace	nextgroup=@netrwTreeGroup
+ syn match  netrwTreeBarSpace	" "					contained
+ 
+@@ -56,14 +56,17 @@
+  if has("unix")
+   syn match netrwCoreDump	"\<core\%(\.\d\+\)\=\>"				contains=netrwTreeBar,@NoSpell
+  endif
++ syn match netrwLex		"\(\S\+ \)*\S\+\.\%(l\|lex\)\>"			contains=netrwTreeBar,@NoSpell
++ syn match netrwYacc		"\(\S\+ \)*\S\+\.y\>"				contains=netrwTreeBar,@NoSpell
+  syn match netrwData		"\(\S\+ \)*\S\+\.dat\>"				contains=netrwTreeBar,@NoSpell
+- syn match netrwHdr		"\(\S\+ \)*\S\+\.h\>"				contains=netrwTreeBar,@NoSpell
++ syn match netrwDoc		"\(\S\+ \)*\S\+\.\%(doc\|txt\|pdf\|ps\)"	contains=netrwTreeBar,@NoSpell
++ syn match netrwHdr		"\(\S\+ \)*\S\+\.\%(h\|hpp\)\>"			contains=netrwTreeBar,@NoSpell
+  syn match netrwLib		"\(\S\+ \)*\S*\.\%(a\|so\|lib\|dll\)\>"		contains=netrwTreeBar,@NoSpell
+  syn match netrwMakeFile	"\<[mM]akefile\>\|\(\S\+ \)*\S\+\.mak\>"	contains=netrwTreeBar,@NoSpell
+  syn match netrwObj		"\(\S\+ \)*\S*\.\%(o\|obj\)\>"			contains=netrwTreeBar,@NoSpell
+- syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar,@NoSpell
+  syn match netrwTags		"\<\(ANmenu\|ANtags\)\>"			contains=netrwTreeBar,@NoSpell
+- syn match netrwTilde		"\(\S\+ \)*\S\+\~\>"				contains=netrwTreeBar,@NoSpell
++ syn match netrwTags    	"\<tags\>"					contains=netrwTreeBar,@NoSpell
++ syn match netrwTilde		"\(\S\+ \)*\S\+\~\*\=\>"			contains=netrwTreeBar,@NoSpell
+  syn match netrwTmp		"\<tmp\(\S\+ \)*\S\+\>\|\(\S\+ \)*\S*tmp\>"	contains=netrwTreeBar,@NoSpell
+ endif
+ 
+@@ -88,19 +91,22 @@
+  hi default link netrwTimeSep	netrwDateSep
+  hi default link netrwComma	netrwComment
+  hi default link netrwHide	netrwComment
+- hi default link netrwMarkFile	Identifier
++ hi default link netrwMarkFile	TabLineSel
+ 
+  " special syntax highlighting (see :he g:netrw_special_syntax)
+  hi default link netrwBak	NonText
+  hi default link netrwCompress	Folded
+  hi default link netrwCoreDump	WarningMsg
+  hi default link netrwData	DiffChange
++ hi default link netrwHdr	netrwPlain
++ hi default link netrwLex	netrwPlain
+  hi default link netrwLib	DiffChange
+  hi default link netrwMakefile	DiffChange
+  hi default link netrwObj	Folded
+  hi default link netrwTilde	Folded
+  hi default link netrwTmp	Folded
+  hi default link netrwTags	Folded
++ hi default link netrwYacc	netrwPlain
+ endif
+ 
+ " Current Syntax: {{{1
+diff -Naur vim73.orig/runtime/syntax/ninja.vim vim73/runtime/syntax/ninja.vim
+--- vim73.orig/runtime/syntax/ninja.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/ninja.vim	2013-06-07 17:07:24.805604513 +0000
+@@ -0,0 +1,81 @@
++" ninja build file syntax.
++" Language: ninja build file as described at
++"           http://martine.github.com/ninja/manual.html
++" Version: 1.3
++" Last Change: 2013/04/16
++" Maintainer: Nicolas Weber <nicolasweber@gmx.de>
++" Version 1.3 of this script is in the upstream vim repository and will be
++" included in the next vim release. If you change this, please send your change
++" upstream.
++
++" ninja lexer and parser are at
++" https://github.com/martine/ninja/blob/master/src/lexer.in.cc
++" https://github.com/martine/ninja/blob/master/src/manifest_parser.cc
++
++if exists("b:current_syntax")
++  finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++syn case match
++
++syn match ninjaComment /#.*/  contains=@Spell
++
++" Toplevel statements are the ones listed here and
++" toplevel variable assignments (ident '=' value).
++" lexer.in.cc, ReadToken() and manifest_parser.cc, Parse()
++syn match ninjaKeyword "^build\>"
++syn match ninjaKeyword "^rule\>"
++syn match ninjaKeyword "^pool\>"
++syn match ninjaKeyword "^default\>"
++syn match ninjaKeyword "^include\>"
++syn match ninjaKeyword "^subninja\>"
++
++" Both 'build' and 'rule' begin a variable scope that ends
++" on the first line without indent. 'rule' allows only a
++" limited set of magic variables, 'build' allows general
++" let assignments.
++" manifest_parser.cc, ParseRule()
++syn region ninjaRule start="^rule" end="^\ze\S" contains=ALL transparent
++syn keyword ninjaRuleCommand contained command deps depfile description generator
++                                     \ pool restat rspfile rspfile_content
++
++syn region ninjaPool start="^pool" end="^\ze\S" contains=ALL transparent
++syn keyword ninjaPoolCommand contained depth
++
++" Strings are parsed as follows:
++" lexer.in.cc, ReadEvalString()
++" simple_varname = [a-zA-Z0-9_-]+;
++" varname = [a-zA-Z0-9_.-]+;
++" $$ -> $
++" $\n -> line continuation
++" '$ ' -> escaped space
++" $simple_varname -> variable
++" ${varname} -> variable
++
++syn match   ninjaWrapLineOperator "\$$"
++syn match   ninjaSimpleVar "\$[a-zA-Z0-9_-]\+"
++syn match   ninjaVar       "\${[a-zA-Z0-9_.-]\+}"
++
++" operators are:
++" variable assignment =
++" rule definition :
++" implicit dependency |
++" order-only dependency ||
++syn match ninjaOperator "\(=\|:\||\|||\)\ze\s"
++
++hi def link ninjaComment Comment
++hi def link ninjaKeyword Keyword
++hi def link ninjaRuleCommand Statement
++hi def link ninjaPoolCommand Statement
++hi def link ninjaWrapLineOperator ninjaOperator
++hi def link ninjaOperator Operator
++hi def link ninjaSimpleVar ninjaVar
++hi def link ninjaVar Identifier
++
++let b:current_syntax = "ninja"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/nroff.vim vim73/runtime/syntax/nroff.vim
+--- vim73.orig/runtime/syntax/nroff.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/nroff.vim	2013-06-07 17:07:24.825604456 +0000
+@@ -1,8 +1,8 @@
+ " VIM syntax file
+ " Language:	nroff/groff
+-" Maintainer:	Alejandro López-Valencia <dradul@yahoo.com>
+-" URL:		http://dradul.tripod.com/vim
+-" Last Change:	2006 Apr 14
++" Maintainer:	Pedro Alejandro López-Valencia <palopezv@gmail.com>
++" URL:		http://vorbote.wordpress.com/
++" Last Change:	2012 Feb 2
+ "
+ " {{{1 Acknowledgements
+ "
+@@ -31,6 +31,9 @@
+ 	finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ "
+ " {{{1 plugin settings...
+ "
+@@ -256,4 +259,6 @@
+ 
+ let b:current_syntax = "nroff"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim600: set fdm=marker fdl=2:
+diff -Naur vim73.orig/runtime/syntax/objc.vim vim73/runtime/syntax/objc.vim
+--- vim73.orig/runtime/syntax/objc.vim	2010-05-15 11:03:55.000000000 +0000
++++ vim73/runtime/syntax/objc.vim	2013-06-07 17:07:24.868937665 +0000
+@@ -3,7 +3,10 @@
+ " Maintainer:	    Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
+ " Ex-maintainer:    Anthony Hodsdon <ahodsdon@fastmail.fm>
+ " First Author:	    Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
+-" Last Change:	    2007 Feb 21
++" Last Change:	    2013 Feb 20
++"
++" 2013 Feb 19       Revised based on a patch sent to the maintainer by 
++"                   Christos Kontas <xakon@yahoo.com> on 2012 Dec 12.
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -12,6 +15,8 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ if &filetype != 'objcpp'
+   " Read the C syntax to start with
+@@ -46,6 +51,11 @@
+ syn match  objcDirective    "@encode\|@protocol\|@selector"
+ syn match  objcDirective    "@try\|@catch\|@finally\|@throw\|@synchronized"
+ 
++ " New directives introduced with Objc-2.0
++syn match  objcDirective    "@property\|@synthesize\|@dynamic"
++syn match  objcDirective    "@optional\|@required"
++syn match  objcDirective    "@autoreleasepool"
++
+ " Match the ObjC method types
+ "
+ " NOTE: here I match only the indicators, this looks
+@@ -107,4 +117,7 @@
+ 
+ let b:current_syntax = "objc"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/ocaml.vim vim73/runtime/syntax/ocaml.vim
+--- vim73.orig/runtime/syntax/ocaml.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/ocaml.vim	2013-06-07 17:07:24.895604256 +0000
+@@ -5,9 +5,9 @@
+ "               Karl-Heinz Sylla  <Karl-Heinz.Sylla@gmd.de>
+ "               Issac Trotts      <ijtrotts@ucdavis.edu>
+ " URL:          http://www.ocaml.info/vim/syntax/ocaml.vim
+-" Last Change:  2007 Apr 13 - Added highlighting of nativeints (MM)
+-"               2006 Oct 09 - More highlighting improvements to numbers (MM)
+-"               2006 Sep 19 - Improved highlighting of numbers (Florent Monnier)
++" Last Change:  2010 Oct 11 - Added highlighting of lnot (MM, thanks to Erick Matsen)
++"               2010 Sep 03 - Fixed escaping bug (MM, thanks to Florent Monnier)
++"               2010 Aug 07 - Fixed module type bug (MM)
+ 
+ " A minor patch was applied to the official version so that object/end
+ " can be distinguished from begin/end, which is used for indentation,
+@@ -24,14 +24,14 @@
+ " OCaml is case sensitive.
+ syn case match
+ 
++" Access to the method of an object
++syn match    ocamlMethod       "#"
++
+ " Script headers highlighted like comments
+ syn match    ocamlComment   "^#!.*"
+ 
+ " Scripting directives
+-syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\)\>"
+-
+-" Script headers highlighted like comments
+-syn match    ocamlComment      "^#!.*"
++syn match    ocamlScript "^#\<\(quit\|labels\|warnings\|directory\|cd\|load\|use\|install_printer\|remove_printer\|require\|thread\|trace\|untrace\|untrace_all\|print_depth\|print_length\|camlp4o\)\>"
+ 
+ " lowercase identifier - the standard way to match
+ syn match    ocamlLCIdentifier /\<\(\l\|_\)\(\w\|'\)*\>/
+@@ -69,7 +69,7 @@
+ 
+ syn cluster  ocamlAENoParen contains=ocamlBraceErr,ocamlBrackErr,ocamlCommentErr,ocamlCountErr,ocamlDoErr,ocamlDoneErr,ocamlEndErr,ocamlThenErr
+ 
+-syn cluster  ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlPreMPRestr,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod
++syn cluster  ocamlContained contains=ocamlTodo,ocamlPreDef,ocamlModParam,ocamlModParam1,ocamlPreMPRestr,ocamlMPRestr,ocamlMPRestr1,ocamlMPRestr2,ocamlMPRestr3,ocamlModRHS,ocamlFuncWith,ocamlFuncStruct,ocamlModTypeRestr,ocamlModTRWith,ocamlWith,ocamlWithRest,ocamlModType,ocamlFullMod,ocamlVal
+ 
+ 
+ " Enclosing delimiters
+@@ -109,9 +109,6 @@
+ 
+ "" Modules
+ 
+-" "struct"
+-syn region   ocamlStruct matchgroup=ocamlModule start="\<struct\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
+-
+ " "sig"
+ syn region   ocamlSig matchgroup=ocamlModule start="\<sig\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr,ocamlModule
+ syn region   ocamlModSpec matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contained contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlModTRWith,ocamlMPRestr
+@@ -124,8 +121,8 @@
+ 
+ " "module" - somewhat complicated stuff ;-)
+ syn region   ocamlModule matchgroup=ocamlKeyword start="\<module\>" matchgroup=ocamlModule end="\<\u\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlPreDef
+-syn region   ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|="me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
+-syn region   ocamlModParam start="([^*]" end=")" contained contains=@ocamlAENoParen,ocamlModParam1
++syn region   ocamlPreDef start="."me=e-1 matchgroup=ocamlKeyword end="\l\|=\|)"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam,ocamlModTypeRestr,ocamlModTRWith nextgroup=ocamlModPreRHS
++syn region   ocamlModParam start="([^*]" end=")" contained contains=@ocamlAENoParen,ocamlModParam1,ocamlVal
+ syn match    ocamlModParam1 "\<\u\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlPreMPRestr
+ 
+ syn region   ocamlPreMPRestr start="."me=e-1 end=")"me=e-1 contained contains=@ocamlAllErrs,ocamlComment,ocamlMPRestr,ocamlModTypeRestr
+@@ -135,6 +132,8 @@
+ syn region   ocamlMPRestr2 start="\sfunctor\(\s\|(\)\="me=e-1 matchgroup=ocamlKeyword end="->" contained contains=@ocamlAllErrs,ocamlComment,ocamlModParam skipwhite skipempty nextgroup=ocamlFuncWith,ocamlMPRestr2
+ syn match    ocamlMPRestr3 "\w\(\w\|'\)*\(\.\w\(\w\|'\)*\)*" contained
+ syn match    ocamlModPreRHS "=" contained skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
++syn keyword  ocamlKeyword val
++syn region   ocamlVal matchgroup=ocamlKeyword start="\<val\>" matchgroup=ocamlLCIdentifier end="\<\l\(\w\|'\)*\>" contains=@ocamlAllErrs,ocamlComment skipwhite skipempty nextgroup=ocamlMPRestr
+ syn region   ocamlModRHS start="." end=".\w\|([^*]"me=e-2 contained contains=ocamlComment skipwhite skipempty nextgroup=ocamlModParam,ocamlFullMod
+ syn match    ocamlFullMod "\<\u\(\w\|'\)*\(\.\u\(\w\|'\)*\)*" contained skipwhite skipempty nextgroup=ocamlFuncWith
+ 
+@@ -146,8 +145,11 @@
+ syn match    ocamlWith "\<\(\u\(\w\|'\)*\.\)*\w\(\w\|'\)*\>" contained skipwhite skipempty nextgroup=ocamlWithRest
+ syn region   ocamlWithRest start="[^)]" end=")"me=e-1 contained contains=ALLBUT,@ocamlContained
+ 
++" "struct"
++syn region   ocamlStruct matchgroup=ocamlModule start="\<\(module\s\+\)\=struct\>" matchgroup=ocamlModule end="\<end\>" contains=ALLBUT,@ocamlContained,ocamlEndErr
++
+ " "module type"
+-syn region   ocamlKeyword start="\<module\>\s*\<type\>" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
++syn region   ocamlKeyword start="\<module\>\s*\<type\>\(\s*\<of\>\)\=" matchgroup=ocamlModule end="\<\w\(\w\|'\)*\>" contains=ocamlComment skipwhite skipempty nextgroup=ocamlMTDef
+ syn match    ocamlMTDef "=\s*\w\(\w\|'\)*\>"hs=s+1,me=s
+ 
+ syn keyword  ocamlKeyword  and as assert class
+@@ -159,7 +161,7 @@
+ syn keyword  ocamlKeyword  method mutable new of
+ syn keyword  ocamlKeyword  parser private raise rec
+ syn keyword  ocamlKeyword  try type
+-syn keyword  ocamlKeyword  val virtual when while with
++syn keyword  ocamlKeyword  virtual when while with
+ 
+ if exists("ocaml_revised")
+   syn keyword  ocamlKeyword  do value
+@@ -174,7 +176,7 @@
+ syn keyword  ocamlType     int int32 int64 lazy_t list nativeint option
+ syn keyword  ocamlType     string unit
+ 
+-syn keyword  ocamlOperator asr lor lsl lsr lxor mod not
++syn keyword  ocamlOperator asr lnot lor lsl lsr lxor mod not
+ 
+ syn match    ocamlConstructor  "(\s*)"
+ syn match    ocamlConstructor  "\[\s*\]"
+@@ -189,6 +191,7 @@
+ syn match    ocamlModPath      "\u\(\w\|'\)*\."he=e-1
+ 
+ syn match    ocamlCharacter    "'\\\d\d\d'\|'\\[\'ntbr]'\|'.'"
++syn match    ocamlCharacter    "'\\x\x\x'"
+ syn match    ocamlCharErr      "'\\\d\d'\|'\\\d'"
+ syn match    ocamlCharErr      "'\\[^\'ntbr]'"
+ syn region   ocamlString       start=+"+ skip=+\\\\\|\\"+ end=+"+
+@@ -220,7 +223,7 @@
+ syn match    ocamlNumber        "\<-\=0[x|X]\(\x\|_\)\+[l|L|n]\?\>"
+ syn match    ocamlNumber        "\<-\=0[o|O]\(\o\|_\)\+[l|L|n]\?\>"
+ syn match    ocamlNumber        "\<-\=0[b|B]\([01]\|_\)\+[l|L|n]\?\>"
+-syn match    ocamlFloat         "\<-\=\d\(_\|\d\)*\.\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
++syn match    ocamlFloat         "\<-\=\d\(_\|\d\)*\.\?\(_\|\d\)*\([eE][-+]\=\d\(_\|\d\)*\)\=\>"
+ 
+ " Labels
+ syn match    ocamlLabel        "\~\(\l\|_\)\(\w\|'\)*"lc=1
+@@ -294,6 +297,7 @@
+ 
+   HiLink ocamlConstructor  Constant
+ 
++  HiLink ocamlVal          Keyword
+   HiLink ocamlModPreRHS    Keyword
+   HiLink ocamlMPRestr2	   Keyword
+   HiLink ocamlKeyword	   Keyword
+diff -Naur vim73.orig/runtime/syntax/opl.vim vim73/runtime/syntax/opl.vim
+--- vim73.orig/runtime/syntax/opl.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/opl.vim	2013-06-07 17:07:24.928937494 +0000
+@@ -1,6 +1,7 @@
+ " Vim syntax file
+ " Language:	OPL
+ " Maintainer:	Czo <Olivier.Sirol@lip6.fr>
++" Last Change:	2012 Feb 03 by Thilo Six
+ " $Id: opl.vim,v 1.1 2004/06/13 17:34:11 vimboss Exp $
+ 
+ " Open Psion Language... (EPOC16/EPOC32)
+@@ -13,6 +14,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " case is not significant
+ syn case ignore
+ 
+@@ -93,4 +97,6 @@
+ 
+ let b:current_syntax = "opl"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/pamconf.vim vim73/runtime/syntax/pamconf.vim
+--- vim73.orig/runtime/syntax/pamconf.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/pamconf.vim	2013-06-07 17:07:24.945604113 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         pam(8) configuration file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2006-04-19
++" Latest Revision:  2011-08-03
+ 
+ 
+ if exists("b:current_syntax")
+@@ -33,7 +33,7 @@
+                                     \ pamconfTypeLineCont skipwhite skipnl
+ 
+ syn keyword pamconfControl          contained requisite required sufficient
+-                                    \ optional
++                                    \ optional include substack
+                                     \ nextgroup=pamconfMPath,
+                                     \ pamconfControlLineContH skipwhite
+ 
+@@ -57,7 +57,9 @@
+                                     \ bad_item and default
+                                     \ nextgroup=pamconfControlValueEq
+ 
+-syn match   pamconfControlValueEq   contained '=' nextgroup=pamconfControlAction
++syn match   pamconfControlValueEq   contained '='
++                                    \ nextgroup=pamconfControlActionN,
++                                    \           pamconfControlAction
+ 
+ syn match   pamconfControlActionN   contained '\d\+\>'
+                                     \ nextgroup=pamconfControlValues,
+diff -Naur vim73.orig/runtime/syntax/perl.vim vim73/runtime/syntax/perl.vim
+--- vim73.orig/runtime/syntax/perl.vim	2010-08-11 21:46:38.000000000 +0000
++++ vim73/runtime/syntax/perl.vim	2013-06-07 17:07:25.028937208 +0000
+@@ -1,22 +1,24 @@
+ " Vim syntax file
+-" Language:     Perl 5
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" URL:          http://github.com/petdance/vim-perl/tree/master
+-" Last Change:  2010-08-10
+-" Contributors: Andy Lester <andy@petdance.com>
+-"               Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
+-"               Lukas Mai <l.mai.web.de>
+-"               Nick Hibma <nick@van-laarhoven.org>
+-"               Sonia Heimann <niania@netsurf.org>
+-"               and many others.
++" Language:      Perl 5
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Homepage:      http://github.com/vim-perl/vim-perl/tree/master
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2013-05-11
++" Contributors:  Andy Lester <andy@petdance.com>
++"                Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
++"                Lukas Mai <l.mai.web.de>
++"                Nick Hibma <nick@van-laarhoven.org>
++"                Sonia Heimann <niania@netsurf.org>
++"                Rob Hoelz <rob@hoelz.ro>
++"                and many others.
+ "
+-" Please download most recent version first before mailing
++" Please download the most recent version first, before mailing
+ " any comments.
+ "
+ " The following parameters are available for tuning the
+ " perl syntax highlighting, with defaults given:
+ "
+-" unlet perl_include_pod
++" let perl_include_pod = 1
+ " unlet perl_no_scope_in_variables
+ " unlet perl_no_extended_vars
+ " unlet perl_string_as_statement
+@@ -27,21 +29,29 @@
+ " unlet perl_fold_blocks
+ " let perl_nofold_packages = 1
+ " let perl_nofold_subs = 1
++" unlet perl_fold_anonymous_subs
+ 
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
++if exists('&regexpengine')
++  let s:regexpengine=&regexpengine
++  set regexpengine=1
++endif
+ 
+ " POD starts with ^=<word> and ends with ^=cut
+ 
+-if exists("perl_include_pod")
++if !exists("perl_include_pod") || perl_include_pod == 1
+   " Include a while extra syntax file
+   syn include @Pod syntax/pod.vim
+   unlet b:current_syntax
+   if exists("perl_fold")
+-    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold
+-    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold
++    syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend fold extend
++    syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend fold extend
+   else
+     syn region perlPOD start="^=[a-z]" end="^=cut" contains=@Pod,@Spell,perlTodo keepend
+     syn region perlPOD start="^=cut" end="^=cut" contains=perlTodo keepend
+@@ -63,10 +73,13 @@
+ " All keywords
+ "
+ syn match perlConditional		"\<\%(if\|elsif\|unless\|given\|when\|default\)\>"
+-syn match perlConditional		"\<else\>" nextgroup=perlElseIfError skipwhite skipnl skipempty
++syn match perlConditional		"\<else\%(\%(\_s\*if\>\)\|\>\)" contains=perlElseIfError skipwhite skipnl skipempty
+ syn match perlRepeat			"\<\%(while\|for\%(each\)\=\|do\|until\|continue\)\>"
+ syn match perlOperator			"\<\%(defined\|undef\|eq\|ne\|[gl][et]\|cmp\|not\|and\|or\|xor\|not\|bless\|ref\|do\)\>"
+-syn match perlControl			"\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>"
++" for some reason, adding this as the nextgroup for perlControl fixes BEGIN
++" folding issues...
++syn match perlFakeGroup 		"" contained
++syn match perlControl			"\<\%(BEGIN\|CHECK\|INIT\|END\|UNITCHECK\)\>\_s*" nextgroup=perlFakeGroup
+ 
+ syn match perlStatementStorage		"\<\%(my\|our\|local\|state\)\>"
+ syn match perlStatementControl		"\<\%(return\|last\|next\|redo\|goto\|break\)\>"
+@@ -93,9 +106,9 @@
+ 
+ syn match perlStatementMisc		"\<\%(warn\|formline\|reset\|scalar\|prototype\|lock\|tied\=\|untie\)\>"
+ 
+-syn keyword perlTodo			TODO TBD FIXME XXX NOTE contained
++syn keyword perlTodo			TODO TODO: TBD TBD: FIXME FIXME: XXX XXX: NOTE NOTE: contained
+ 
+-syn region perlStatementIndirObjWrap	matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|print\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock
++syn region perlStatementIndirObjWrap   matchgroup=perlStatementIndirObj start="\<\%(map\|grep\|sort\|printf\=\|say\|system\|exec\)\>\s*{" end="}" contains=@perlTop,perlGenericBlock extend
+ 
+ syn match perlLabel      "^\s*\h\w*\s*::\@!\%(\<v\d\+\s*:\)\@<!"
+ 
+@@ -146,14 +159,14 @@
+   syn region perlArrow		matchgroup=perlArrow start="->\s*{" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+   syn match  perlArrow		"->\s*{\s*\I\i*\s*}" contains=perlVarSimpleMemberName nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+   syn region perlArrow		matchgroup=perlArrow start="->\s*\$*\I\i*\s*(" end=")" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contained
+-  syn region perlVarBlock	matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+-  syn region perlVarBlock2	matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end="}" contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
++  syn region perlVarBlock	matchgroup=perlVarPlain start="\%($#\|[$@]\)\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
++  syn region perlVarBlock2	matchgroup=perlVarPlain start="[%&*]\$*{" skip="\\}" end=+}\|\%(\%(<<\%('\|"\)\?\)\@=\)+ contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+   syn match  perlVarPlain2	"[%&*]\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+   syn match  perlVarPlain	"\%(\$#\|[@$]\)\$*{\I\i*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+-  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
+-  syn match  perlVarSimpleMember	"\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained
++  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\={" skip="\\}" end="}" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
++  syn match  perlVarSimpleMember	"\%(->\)\={\s*\I\i*\s*}" nextgroup=perlVarMember,perlVarSimpleMember,perlMethod contains=perlVarSimpleMemberName contained extend
+   syn match  perlVarSimpleMemberName	"\I\i*" contained
+-  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod
++  syn region perlVarMember	matchgroup=perlVarPlain start="\%(->\)\=\[" skip="\\]" end="]" contained contains=@perlExpr nextgroup=perlVarMember,perlVarSimpleMember,perlMethod extend
+   syn match perlPackageConst	"__PACKAGE__" nextgroup=perlMethod
+   syn match  perlMethod		"->\$*\I\i*" contained nextgroup=perlVarSimpleMember,perlVarMember,perlMethod
+ endif
+@@ -168,13 +181,13 @@
+ 
+ " Special characters in strings and matches
+ syn match  perlSpecialString	"\\\%(\o\{1,3}\|x\%({\x\+}\|\x\{1,2}\)\|c.\|[^cx]\)" contained extend
+-syn match  perlSpecialStringU2	"\\." extend contained transparent contains=NONE
++syn match  perlSpecialStringU2	"\\." extend contained contains=NONE
+ syn match  perlSpecialStringU	"\\\\" contained
+ syn match  perlSpecialMatch	"\\[1-9]" contained extend
+ syn match  perlSpecialMatch	"\\g\%(\d\+\|{\%(-\=\d\+\|\h\w*\)}\)" contained
+ syn match  perlSpecialMatch	"\\k\%(<\h\w*>\|'\h\w*'\)" contained
+ syn match  perlSpecialMatch	"{\d\+\%(,\%(\d\+\)\=\)\=}" contained
+-syn match  perlSpecialMatch	"\[[]-]\=[^\[\]]*[]-]\=\]" contained
++syn match  perlSpecialMatch	"\[[]-]\=[^\[\]]*[]-]\=\]" contained extend
+ syn match  perlSpecialMatch	"[+*()?.]" contained
+ syn match  perlSpecialMatch	"(?[#:=!]" contained
+ syn match  perlSpecialMatch	"(?[impsx]*\%(-[imsx]\+\)\=)" contained
+@@ -186,10 +199,9 @@
+ "
+ " Highlight lines with only whitespace (only in blank delimited here documents) as errors
+ syn match  perlNotEmptyLine	"^\s\+$" contained
+-" Highlight '} else if (...) {', it should be '} else { if (...) { ' or
+-" '} elsif (...) {'.
+-syn match perlElseIfError	"\s\+if" contained
+-syn keyword perlElseIfError	elseif
++" Highlight "} else if (...) {", it should be "} else { if (...) { " or "} elsif (...) {"
++syn match perlElseIfError	"else\_s*if" containedin=perlConditional
++syn keyword perlElseIfError	elseif containedin=perlConditional
+ 
+ " Variable interpolation
+ "
+@@ -217,32 +229,32 @@
+ syn match  perlVStringV	"\<v" contained
+ 
+ 
+-syn region perlParensSQ		start=+(+ end=+)+ extend contained transparent contains=perlParensSQ,@perlInterpSQ keepend
+-syn region perlBracketsSQ	start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsSQ,@perlInterpSQ keepend
+-syn region perlBracesSQ		start=+{+ end=+}+ extend contained transparent contains=perlBracesSQ,@perlInterpSQ keepend
+-syn region perlAnglesSQ		start=+<+ end=+>+ extend contained transparent contains=perlAnglesSQ,@perlInterpSQ keepend
+-
+-syn region perlParensDQ		start=+(+ end=+)+ extend contained transparent contains=perlParensDQ,@perlInterpDQ keepend
+-syn region perlBracketsDQ	start=+\[+ end=+\]+ extend contained transparent contains=perlBracketsDQ,@perlInterpDQ keepend
+-syn region perlBracesDQ		start=+{+ end=+}+ extend contained transparent contains=perlBracesDQ,@perlInterpDQ keepend
+-syn region perlAnglesDQ		start=+<+ end=+>+ extend contained transparent contains=perlAnglesDQ,@perlInterpDQ keepend
++syn region perlParensSQ		start=+(+ end=+)+ extend contained contains=perlParensSQ,@perlInterpSQ keepend
++syn region perlBracketsSQ	start=+\[+ end=+\]+ extend contained contains=perlBracketsSQ,@perlInterpSQ keepend
++syn region perlBracesSQ		start=+{+ end=+}+ extend contained contains=perlBracesSQ,@perlInterpSQ keepend
++syn region perlAnglesSQ		start=+<+ end=+>+ extend contained contains=perlAnglesSQ,@perlInterpSQ keepend
++
++syn region perlParensDQ		start=+(+ end=+)+ extend contained contains=perlParensDQ,@perlInterpDQ keepend
++syn region perlBracketsDQ	start=+\[+ end=+\]+ extend contained contains=perlBracketsDQ,@perlInterpDQ keepend
++syn region perlBracesDQ		start=+{+ end=+}+ extend contained contains=perlBracesDQ,@perlInterpDQ keepend
++syn region perlAnglesDQ		start=+<+ end=+>+ extend contained contains=perlAnglesDQ,@perlInterpDQ keepend
+ 
+ 
+ " Simple version of searches and matches
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[cgimopsx]*+ contains=@perlInterpMatch keepend
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[cgimopsx]*+ contains=@perlInterpMatch keepend
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[cgimopsx]*+ contains=@perlInterpSQ keepend
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash keepend
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[cgimopsx]*+ contains=@perlInterpMatch,perlParensDQ keepend
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\>\s*\z([^[:space:]'([{<#]\)+ end=+\z1[msixpodualgc]*+ contains=@perlInterpMatch keepend
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m#+ end=+#[msixpodualgc]*+ contains=@perlInterpMatch keepend
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*'+ end=+'[msixpodualgc]*+ contains=@perlInterpSQ keepend
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash keepend
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*(+ end=+)[msixpodualgc]*+ contains=@perlInterpMatch,perlParensDQ keepend
+ 
+ " A special case for m{}, m<> and m[] which allows for comments and extra whitespace in the pattern
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ keepend
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[cgimopsx]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][cgimopsx]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*{+ end=+}[msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracesDQ
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*<+ end=+>[msixpodualgc]*+ contains=@perlInterpMatch,perlAnglesDQ keepend
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!m\s*\[+ end=+\][msixpodualgc]*+ contains=@perlInterpMatch,perlComment,perlBracketsDQ keepend
+ 
+ " Below some hacks to recognise the // variant. This is virtually impossible to catch in all
+ " cases as the / is used in so many other ways, but these should be the most obvious ones.
+-syn region perlMatch	matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[cgimopsx]*+ contains=@perlInterpSlash
++syn region perlMatch	matchgroup=perlMatchStartEnd start="\%([$@%&*]\@<!\%(\<split\|\<while\|\<if\|\<unless\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=/\%(/=\)\@!" start=+^/\%(/=\)\@!+ start=+\s\@<=/\%(/=\)\@![^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!+ skip=+\\/+ end=+/[msixpodualgc]*+ contains=@perlInterpSlash
+ 
+ 
+ " Substitutions
+@@ -254,13 +266,13 @@
+ syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*(+ end=+)+ contains=@perlInterpMatch,perlParensDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+ syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*<+ end=+>+ contains=@perlInterpMatch,perlAnglesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+ syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*\[+ end=+\]+ contains=@perlInterpMatch,perlBracketsDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+-syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend
+-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[ecgimopsx]*+ keepend contained contains=@perlInterpDQ
+-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[ecgimopsx]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
+-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
+-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[ecgimopsx]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend
+-syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[ecgimopsx]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
+-syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'[ecgimopsx]*+ contained contains=@perlInterpSQ keepend 
++syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!s\s*{+ end=+}+ contains=@perlInterpMatch,perlBracesDQ nextgroup=perlSubstitutionGQQ skipwhite skipempty skipnl keepend extend
++syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]'([{<]\)+ end=+\z1[msixpodualgcer]*+ keepend contained contains=@perlInterpDQ
++syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlParensDQ keepend
++syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracketsDQ keepend
++syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlBracesDQ keepend extend
++syn region perlSubstitutionGQQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[msixpodualgcer]*+ contained contains=@perlInterpDQ,perlAnglesDQ keepend
++syn region perlSubstitutionSQ		matchgroup=perlMatchStartEnd start=+'+  end=+'[msixpodualgcer]*+ contained contains=@perlInterpSQ keepend
+ 
+ " Translations
+ " perlMatch is the first part, perlTranslation* is the second, translator part.
+@@ -270,48 +282,48 @@
+ syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
+ syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
+ syn region perlMatch	matchgroup=perlMatchStartEnd start=+\<\%(::\|'\|->\)\@<!\%(tr\|y\)\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ nextgroup=perlTranslationGQ skipwhite skipempty skipnl
+-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cds]*+ contained
+-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[cds]*+ contains=perlParensSQ contained
+-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][cds]*+ contains=perlBracketsSQ contained
+-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[cds]*+ contains=perlBracesSQ contained
+-syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[cds]*+ contains=perlAnglesSQ contained
++syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\z([^[:space:]([{<]\)+ end=+\z1[cdsr]*+ contained
++syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+(+ end=+)[cdsr]*+ contains=perlParensSQ contained
++syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+\[+ end=+\][cdsr]*+ contains=perlBracketsSQ contained
++syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+{+ end=+}[cdsr]*+ contains=perlBracesSQ contained
++syn region perlTranslationGQ		matchgroup=perlMatchStartEnd start=+<+ end=+>[cdsr]*+ contains=perlAnglesSQ contained
+ 
+ 
+ " Strings and q, qq, qw and qr expressions
+ 
+-syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend
+-syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
+-
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend
+-
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend
+-
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1[imosx]*+ contains=@perlInterpMatch keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/[imosx]*+ contains=@perlInterpSlash keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#[imosx]*+ contains=@perlInterpMatch keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'[imosx]*+ contains=@perlInterpSQ keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend
++syn region perlStringUnexpanded	matchgroup=perlStringStartEnd start="'" end="'" contains=@perlInterpSQ keepend extend
++syn region perlString		matchgroup=perlStringStartEnd start=+"+  end=+"+ contains=@perlInterpDQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q#+ end=+#+ contains=@perlInterpSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*(+ end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*\[+ end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*{+ end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q\s*<+ end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
++
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\>\s*\z([^[:space:]#([{<]\)+ end=+\z1+ contains=@perlInterpDQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]#+ end=+#+ contains=@perlInterpDQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*(+ end=+)+ contains=@perlInterpDQ,perlParensDQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*\[+ end=+\]+ contains=@perlInterpDQ,perlBracketsDQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*{+ end=+}+ contains=@perlInterpDQ,perlBracesDQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!q[qx]\s*<+ end=+>+ contains=@perlInterpDQ,perlAnglesDQ keepend extend
++
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\z([^[:space:]#([{<]\)+  end=+\z1+ contains=@perlInterpSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw#+  end=+#+ contains=@perlInterpSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*(+  end=+)+ contains=@perlInterpSQ,perlParensSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*\[+  end=+\]+ contains=@perlInterpSQ,perlBracketsSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*{+  end=+}+ contains=@perlInterpSQ,perlBracesSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qw\s*<+  end=+>+ contains=@perlInterpSQ,perlAnglesSQ keepend extend
++
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\>\s*\z([^[:space:]#([{<'/]\)+  end=+\z1[imosx]*+ contains=@perlInterpMatch keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*/+  end=+/[imosx]*+ contains=@perlInterpSlash keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr#+  end=+#[imosx]*+ contains=@perlInterpMatch keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*'+  end=+'[imosx]*+ contains=@perlInterpSQ keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*(+  end=+)[imosx]*+ contains=@perlInterpMatch,perlParensDQ keepend extend
+ 
+ " A special case for qr{}, qr<> and qr[] which allows for comments and extra whitespace in the pattern
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend
+-syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*{+  end=+}[imosx]*+ contains=@perlInterpMatch,perlBracesDQ,perlComment keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*<+  end=+>[imosx]*+ contains=@perlInterpMatch,perlAnglesDQ,perlComment keepend extend
++syn region perlQQ		matchgroup=perlStringStartEnd start=+\<\%(::\|'\|->\)\@<!qr\s*\[+  end=+\][imosx]*+ contains=@perlInterpMatch,perlBracketsDQ,perlComment keepend extend
+ 
+ " Constructs such as print <<EOF [...] EOF, 'here' documents
+ "
+@@ -319,14 +331,14 @@
+ " 'if $a' in 'print <<EOF if $a'). This is almost impossible to get right it
+ " seems due to the 'auto-extending nature' of regions.
+ if exists("perl_fold")
+-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold
+-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold
+-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold
+-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold
+-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold
+-  syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold
++  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ fold extend
++  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ fold extend
++  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ fold extend
++  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine fold extend
++  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*''+           end=+^$+    contains=@perlInterpSQ,perlNotEmptyLine fold extend
++  syn region perlAutoload	matchgroup=perlStringStartEnd start=+<<\s*\(['"]\=\)\z(END_\%(SUB\|OF_FUNC\|OF_AUTOLOAD\)\)\1+ end=+^\z1$+ contains=ALL fold extend
+ else
+-  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\)+    end=+^\z1$+ contains=@perlInterpDQ
++  syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\z(\I\i*\).*+    end=+^\z1$+ contains=@perlInterpDQ
+   syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*"\z([^\\"]*\%(\\.[^\\"]*\)*\)"+ end=+^\z1$+ contains=@perlInterpDQ
+   syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*'\z([^\\']*\%(\\.[^\\']*\)*\)'+ end=+^\z1$+ contains=@perlInterpSQ
+   syn region perlHereDoc	matchgroup=perlStringStartEnd start=+<<\s*""+           end=+^$+    contains=@perlInterpDQ,perlNotEmptyLine
+@@ -349,13 +361,13 @@
+ else
+     syn match perlSubAttributesCont "\h\w*\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained
+     syn region perlSubAttributesCont matchgroup=perlSubAttributesCont start="\h\w*(" end=")\_s*\%(:\_s*\)\=" nextgroup=@perlSubAttrMaybe contained contains=@perlInterpSQ,perlParensSQ
+-    syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError
++    syn cluster perlSubAttrMaybe contains=perlSubAttributesCont,perlSubError,perlFakeGroup
+     syn match perlSubAttributes "" contained nextgroup=perlSubError
+     syn match perlSubAttributes ":\_s*" contained nextgroup=@perlSubAttrMaybe
+ endif
+ syn match perlSubPrototypeError "(\%(\_s*\%(\%(\\\%([$@%&*]\|\[[$@%&*]\+\]\)\|[$&*]\|[@%]\%(\_s*)\)\@=\|;\%(\_s*[)$@%&*\\]\)\@=\|_\%(\_s*[);]\)\@=\)\_s*\)*\)\@>\zs\_[^)]\+" contained
+-syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes contained contains=perlSubPrototypeError
+-syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype
++syn match perlSubPrototype +(\_[^)]*)\_s*\|+ nextgroup=perlSubAttributes,perlComment contained contains=perlSubPrototypeError
++syn match perlSubName +\%(\h\|::\|'\w\)\%(\w\|::\|'\w\)*\_s*\|+ contained nextgroup=perlSubPrototype,perlComment
+ 
+ syn match perlFunction +\<sub\>\_s*+ nextgroup=perlSubName
+ 
+@@ -371,7 +383,7 @@
+ syn match  perlString "\I\@<!-\?\I\i*\%(\s*=>\)\@="
+ 
+ " All other # are comments, except ^#!
+-syn match  perlComment		"#.*" contains=perlTodo,@Spell
++syn match  perlComment		"#.*" contains=perlTodo,@Spell extend
+ syn match  perlSharpBang	"^#!.*"
+ 
+ " Formats
+@@ -385,9 +397,11 @@
+ 
+ " __END__ and __DATA__ clauses
+ if exists("perl_fold")
+-  syntax region perlDATA		start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA fold
++  syntax region perlDATA		start="^__DATA__$" skip="." end="." fold
++  syntax region perlDATA		start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA fold
+ else
+-  syntax region perlDATA		start="^__\%(DATA\|END\)__$" skip="." end="." contains=perlPOD,@perlDATA
++  syntax region perlDATA		start="^__DATA__$" skip="." end="."
++  syntax region perlDATA		start="^__END__$" skip="." end="." contains=perlPOD,@perlDATA
+ endif
+ 
+ "
+@@ -400,8 +414,15 @@
+     syn region perlPackageFold start="^package \S\+;\s*\%(#.*\)\=$" end="^1;\=\s*\%(#.*\)\=$" end="\n\+package"me=s-1 transparent fold keepend
+   endif
+   if !exists("perl_nofold_subs")
+-    syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
+-    syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
++    if exists("perl_fold_anonymous_subs") && perl_fold_anonymous_subs
++      syn region perlSubFold     start="\<sub\>[^\n;]*{" end="}" transparent fold keepend extend
++      syn region perlSubFold     start="\<\%(BEGIN\|END\|CHECK\|INIT\)\>\s*{" end="}" transparent fold keepend
++
++      syn region perlBraces start="{" end="}" transparent extend
++    else
++      syn region perlSubFold     start="^\z(\s*\)\<sub\>.*[^};]$" end="^\z1}\s*\%(#.*\)\=$" transparent fold keepend
++      syn region perlSubFold start="^\z(\s*\)\<\%(BEGIN\|END\|CHECK\|INIT\|UNITCHECK\)\>.*[^};]$" end="^\z1}\s*$" transparent fold keepend
++    endif
+   endif
+ 
+   if exists("perl_fold_blocks")
+@@ -418,6 +439,9 @@
+ 
+ command -nargs=+ HiLink hi def link <args>
+ 
++" NOTE: If you're linking new highlight groups to perlString, please also put
++"       them into b:match_skip in ftplugin/perl.vim.
++
+ " The default highlighting.
+ HiLink perlSharpBang		PreProc
+ HiLink perlControl		PreProc
+@@ -505,6 +529,22 @@
+ HiLink perlSpecialMatch		perlSpecial
+ HiLink perlDATA			perlComment
+ 
++" NOTE: Due to a bug in Vim (or more likely, a misunderstanding on my part),
++"       I had to remove the transparent property from the following regions
++"       in order to get them to highlight correctly.  Feel free to remove
++"       these and reinstate the transparent property if you know how.
++HiLink perlParensSQ		perlString
++HiLink perlBracketsSQ		perlString
++HiLink perlBracesSQ		perlString
++HiLink perlAnglesSQ		perlString
++
++HiLink perlParensDQ		perlString
++HiLink perlBracketsDQ		perlString
++HiLink perlBracesDQ		perlString
++HiLink perlAnglesDQ		perlString
++
++HiLink perlSpecialStringU2	perlString
++
+ " Possible errors
+ HiLink perlNotEmptyLine		Error
+ HiLink perlElseIfError		Error
+@@ -539,5 +579,13 @@
+ 
+ let b:current_syntax = "perl"
+ 
++if exists('&regexpengine')
++  let &regexpengine=s:regexpengine
++  unlet s:regexpengine
++endif
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " XXX Change to sts=4:sw=4
+ " vim:ts=8:sts=2:sw=2:expandtab:ft=vim
+diff -Naur vim73.orig/runtime/syntax/perl6.vim vim73/runtime/syntax/perl6.vim
+--- vim73.orig/runtime/syntax/perl6.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/perl6.vim	2013-06-07 17:07:25.062270447 +0000
+@@ -1,12 +1,13 @@
+ " Vim syntax file
+-" Language:     Perl 6
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" Homepage:     http://github.com/petdance/vim-perl/tree/master
+-" Last Change:  2009-07-04
+-
+-" Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org>
+-"               Moritz Lenz <moritz@faui2k3.org>
+-"               Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
++" Language:      Perl 6
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Homepage:      http://github.com/vim-perl/vim-perl/tree/master
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2009-07-04
++
++" Contributors:  Luke Palmer <fibonaci@babylonia.flatirons.org>
++"                Moritz Lenz <moritz@faui2k3.org>
++"                Hinrik Ãrn SigurÃ°sson <hinrik.sig@gmail.com>
+ "
+ " This is a big undertaking. Perl 6 is the sort of language that only Perl
+ " can parse. But I'll do my best to get vim to.
+@@ -67,6 +68,8 @@
+ elseif exists("b:current_syntax")
+     finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " identifiers
+ syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*"
+@@ -1021,7 +1024,7 @@
+ " TODO: mostly stolen from perl.vim, might need more work
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%([$@%&*]\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\%(\<\%(split\|while\|until\|if\|unless\)\|\.\.\|[-+*!~(\[{=]\)\s*\)\@<=//\@!"
+     \ start="^//\@!"
+     \ start=+\s\@<=/[^[:space:][:digit:]$@%=]\@=\%(/\_s*\%([([{$@%&*[:digit:]"'`]\|\_s\w\|[[:upper:]_abd-fhjklnqrt-wyz]\)\)\@!/\@!+
+     \ skip="\\/"
+@@ -1031,7 +1034,7 @@
+ " m/foo/, mm/foo/, rx/foo/
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=//\@!"
+     \ skip="\\/"
+     \ end="/"
+     \ keepend
+@@ -1040,7 +1043,7 @@
+ " m!foo!, mm!foo!, rx!foo!
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!!\@!"
+     \ skip="\\!"
+     \ end="!"
+     \ keepend
+@@ -1049,7 +1052,7 @@
+ " m$foo$, mm$foo$, rx$foo$, m|foo|, mm|foo|, rx|foo|, etc
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)\$\@!"
+     \ skip="\\\z1"
+     \ end="\z1"
+     \ keepend
+@@ -1058,7 +1061,7 @@
+ " m (foo), mm (foo), rx (foo)
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!)\@!"
+     \ skip="\\)"
+     \ end=")"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1066,7 +1069,7 @@
+ " m[foo], mm[foo], rx[foo]
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!]\@!"
+     \ skip="\\]"
+     \ end="]"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1074,7 +1077,7 @@
+ " m{foo}, mm{foo}, rx{foo}
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!}\@!"
+     \ skip="\\}"
+     \ end="}"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1082,7 +1085,7 @@
+ " m<foo>, mm<foo>, rx<foo>
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!>\@!"
+     \ skip="\\>"
+     \ end=">"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1090,7 +1093,7 @@
+ " mÂ«fooÂ», mmÂ«fooÂ», rxÂ«fooÂ»
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=Â«Â»\@!Â»\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<\%(mm\?\|rx\)\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=Â«Â»\@!Â»\@!"
+     \ skip="\\Â»"
+     \ end="Â»"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1100,7 +1103,7 @@
+ " s/foo/bar/
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=/"
+     \ skip="\\/"
+     \ end="/"me=e-1
+     \ keepend
+@@ -1119,7 +1122,7 @@
+ " s!foo!bar!
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=!"
+     \ skip="\\!"
+     \ end="!"me=e-1
+     \ keepend
+@@ -1138,7 +1141,7 @@
+ " s$foo$bar$, s|foo|bar, etc
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([\"'`|,$]\)"
+     \ skip="\\\z1"
+     \ end="\z1"me=e-1
+     \ keepend
+@@ -1157,7 +1160,7 @@
+ " s{foo}
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<={}\@!"
+     \ skip="\\}"
+     \ end="}"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1165,7 +1168,7 @@
+ " s[foo]
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\[]\@!"
+     \ skip="\\]"
+     \ end="]"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1173,7 +1176,7 @@
+ " s<foo>
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=<>\@!"
+     \ skip="\\>"
+     \ end=">"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1181,7 +1184,7 @@
+ " sÂ«fooÂ»
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=Â«Â»\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=Â«Â»\@!"
+     \ skip="\\Â»"
+     \ end="Â»"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1189,7 +1192,7 @@
+ " s (foo)
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<s\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s\+\)\@<=()\@!"
+     \ skip="\\)"
+     \ end=")"
+     \ contains=@p6Regexen,@p6Variables
+@@ -1199,7 +1202,7 @@
+ " m:P5//
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=/"
+     \ skip="\\/"
+     \ end="/"
+     \ contains=@p6RegexP5,p6Variable,p6VarExclam,p6VarMatch,p6VarNum
+@@ -1207,7 +1210,7 @@
+ " m:P5!!
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=!"
+     \ skip="\\!"
+     \ end="!"
+     \ contains=@p6RegexP5,p6Variable,p6VarSlash,p6VarMatch,p6VarNum
+@@ -1215,7 +1218,7 @@
+ " m:P5$$, m:P5||, etc
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=\z([\"'`|,$]\)"
+     \ skip="\\\z1"
+     \ end="\z1"
+     \ contains=@p6RegexP5,@p6Variables
+@@ -1223,7 +1226,7 @@
+ " m:P5 ()
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s\+\)\@<=()\@!"
+     \ skip="\\)"
+     \ end=")"
+     \ contains=@p6RegexP5,@p6Variables
+@@ -1231,7 +1234,7 @@
+ " m:P5[]
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=[]\@!"
+     \ skip="\\]"
+     \ end="]"
+     \ contains=@p6RegexP5,@p6Variables
+@@ -1239,7 +1242,7 @@
+ " m:P5{}
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<={}\@!"
+     \ skip="\\}"
+     \ end="}"
+     \ contains=@p6RegexP5,p6Variables
+@@ -1247,7 +1250,7 @@
+ " m:P5<>
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=<>\@!"
+     \ skip="\\>"
+     \ end=">"
+     \ contains=@p6RegexP5,p6Variables
+@@ -1255,7 +1258,7 @@
+ " m:P5Â«Â»
+ syn region p6Match
+     \ matchgroup=p6Quote
+-    \ start="\%(\<m\s*:P\%(erl\)\?5\s*\)\@<=Â«Â»\@!"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<m\s*:P\%(erl\)\?5\s*\)\@<=Â«Â»\@!"
+     \ skip="\\Â»"
+     \ end="Â»"
+     \ contains=@p6RegexP5,p6Variables
+@@ -1265,7 +1268,7 @@
+ " tr/foo/bar/, tr|foo|bar, etc
+ syn region p6String
+     \ matchgroup=p6Quote
+-    \ start="\%(\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
++    \ start="\%(\%(::\|[$@%&][.!^:*?]\?\|\.\)\@<!\<tr\%(\s*:!\?\k\%(\k\|[-']\K\@=\)*\%(([^)]*)\)\?\)*\s*\)\@<=\z([/\"'`|!,$]\)"
+     \ skip="\\\z1"
+     \ end="\z1"me=e-1
+     \ contains=p6RxRange
+@@ -2246,4 +2249,7 @@
+ 
+ let b:current_syntax = "perl6"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:ts=8:sts=4:sw=4:expandtab:ft=vim
+diff -Naur vim73.orig/runtime/syntax/pf.vim vim73/runtime/syntax/pf.vim
+--- vim73.orig/runtime/syntax/pf.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/pf.vim	2013-06-07 17:07:25.072270418 +0000
+@@ -1,7 +1,8 @@
+ " pf syntax file
+-" Language:	OpenBSD packet filter configuration (pf.conf)
+-" Maintainer:	Camiel Dobbelaar <cd@sentia.nl>
+-" Last Change:	2003 May 27
++" Language:        OpenBSD packet filter configuration (pf.conf)
++" Original Author: Camiel Dobbelaar <cd@sentia.nl>
++" Maintainer:      Lauri Tirkkonen <lotheac@iki.fi>
++" Last Change:     2013 Apr 02
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -14,7 +15,7 @@
+ setlocal foldmethod=syntax
+ syn sync fromstart
+ 
+-syn cluster	pfNotLS		contains=pfComment,pfTodo,pfVarAssign
++syn cluster	pfNotLS		contains=pfTodo,pfVarAssign
+ syn keyword	pfCmd		altq anchor antispoof binat nat pass
+ syn keyword	pfCmd		queue rdr scrub table set
+ syn keyword	pfService	auth bgp domain finger ftp http https ident
+diff -Naur vim73.orig/runtime/syntax/pfmain.vim vim73/runtime/syntax/pfmain.vim
+--- vim73.orig/runtime/syntax/pfmain.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/pfmain.vim	2013-06-07 17:07:25.088937037 +0000
+@@ -1,10 +1,11 @@
+ " Vim syntax file
+ " Language:	Postfix main.cf configuration
+ " Maintainer:	KELEMEN Peter <Peter dot Kelemen at cern dot ch>
+-" Last Change:	2006 Apr 15
+-" Version:	0.20
++" Last Update:  Hong Xu
++" Last Change:	2011 May 14
++" Version:	0.40
+ " URL:		http://cern.ch/fuji/vim/syntax/pfmain.vim
+-" Comment:	Based on Postfix 2.3.x defaults.
++" Comment:	Based on Postfix 2.9 defaults.
+ 
+ if version < 600
+ 	syntax clear
+@@ -22,7 +23,9 @@
+ syntax sync minlines=1
+ 
+ syntax keyword pfmainConf 2bounce_notice_recipient
++syntax keyword pfmainConf access_map_defer_code
+ syntax keyword pfmainConf access_map_reject_code
++syntax keyword pfmainConf address_verify_cache_cleanup_interval
+ syntax keyword pfmainConf address_verify_default_transport
+ syntax keyword pfmainConf address_verify_local_transport
+ syntax keyword pfmainConf address_verify_map
+@@ -36,6 +39,7 @@
+ syntax keyword pfmainConf address_verify_relay_transport
+ syntax keyword pfmainConf address_verify_relayhost
+ syntax keyword pfmainConf address_verify_sender
++syntax keyword pfmainConf address_verify_sender_dependent_default_transport_maps
+ syntax keyword pfmainConf address_verify_sender_dependent_relayhost_maps
+ syntax keyword pfmainConf address_verify_service_name
+ syntax keyword pfmainConf address_verify_transport_maps
+@@ -83,22 +87,31 @@
+ syntax keyword pfmainConf connection_cache_status_update_time
+ syntax keyword pfmainConf connection_cache_ttl_limit
+ syntax keyword pfmainConf content_filter
++syntax keyword pfmainConf cyrus_sasl_config_path
+ syntax keyword pfmainConf daemon_directory
+ syntax keyword pfmainConf daemon_timeout
++syntax keyword pfmainConf data_directory
+ syntax keyword pfmainConf debug_peer_level
+ syntax keyword pfmainConf debug_peer_list
+ syntax keyword pfmainConf default_database_type
+ syntax keyword pfmainConf default_delivery_slot_cost
+ syntax keyword pfmainConf default_delivery_slot_discount
+ syntax keyword pfmainConf default_delivery_slot_loan
++syntax keyword pfmainConf default_destination_concurrency_failed_cohort_limit
+ syntax keyword pfmainConf default_destination_concurrency_limit
++syntax keyword pfmainConf default_destination_concurrency_negative_feedback
++syntax keyword pfmainConf default_destination_concurrency_positive_feedback
++syntax keyword pfmainConf default_destination_rate_delay
+ syntax keyword pfmainConf default_destination_recipient_limit
+ syntax keyword pfmainConf default_extra_recipient_limit
++syntax keyword pfmainConf default_filter_nexthop
+ syntax keyword pfmainConf default_minimum_delivery_slots
+ syntax keyword pfmainConf default_privs
+ syntax keyword pfmainConf default_process_limit
+ syntax keyword pfmainConf default_rbl_reply
+ syntax keyword pfmainConf default_recipient_limit
++syntax keyword pfmainConf default_recipient_refill_delay
++syntax keyword pfmainConf default_recipient_refill_limit
+ syntax keyword pfmainConf default_transport
+ syntax keyword pfmainConf default_verp_delimiters
+ syntax keyword pfmainConf defer_code
+@@ -109,15 +122,22 @@
+ syntax keyword pfmainConf delay_warning_time
+ syntax keyword pfmainConf deliver_lock_attempts
+ syntax keyword pfmainConf deliver_lock_delay
++syntax keyword pfmainConf destination_concurrency_feedback_debug
++syntax keyword pfmainConf detect_8bit_encoding_header
+ syntax keyword pfmainConf disable_dns_lookups
+ syntax keyword pfmainConf disable_mime_input_processing
+ syntax keyword pfmainConf disable_mime_output_conversion
+ syntax keyword pfmainConf disable_verp_bounces
+ syntax keyword pfmainConf disable_vrfy_command
++syntax keyword pfmainConf dnsblog_reply_delay
++syntax keyword pfmainConf dnsblog_service_name
+ syntax keyword pfmainConf dont_remove
+ syntax keyword pfmainConf double_bounce_sender
+ syntax keyword pfmainConf duplicate_filter_limit
++syntax keyword pfmainConf empty_address_default_transport_maps_lookup_key
+ syntax keyword pfmainConf empty_address_recipient
++syntax keyword pfmainConf empty_address_relayhost_maps_lookup_key
++syntax keyword pfmainConf enable_long_queue_ids
+ syntax keyword pfmainConf enable_original_recipient
+ syntax keyword pfmainConf error_notice_recipient
+ syntax keyword pfmainConf error_service_name
+@@ -151,13 +171,16 @@
+ syntax keyword pfmainConf inet_interfaces
+ syntax keyword pfmainConf inet_protocols
+ syntax keyword pfmainConf initial_destination_concurrency
++syntax keyword pfmainConf internal_mail_filter_classes
+ syntax keyword pfmainConf invalid_hostname_reject_code
+ syntax keyword pfmainConf ipc_idle
+ syntax keyword pfmainConf ipc_timeout
+ syntax keyword pfmainConf ipc_ttl
+ syntax keyword pfmainConf line_length_limit
++syntax keyword pfmainConf lmtp_address_preference
+ syntax keyword pfmainConf lmtp_bind_address
+ syntax keyword pfmainConf lmtp_bind_address6
++syntax keyword pfmainConf lmtp_body_checks
+ syntax keyword pfmainConf lmtp_cname_overrides_servername
+ syntax keyword pfmainConf lmtp_connect_timeout
+ syntax keyword pfmainConf lmtp_connection_cache_destinations
+@@ -172,23 +195,34 @@
+ syntax keyword pfmainConf lmtp_destination_recipient_limit
+ syntax keyword pfmainConf lmtp_discard_lhlo_keyword_address_maps
+ syntax keyword pfmainConf lmtp_discard_lhlo_keywords
++syntax keyword pfmainConf lmtp_dns_resolver_options
+ syntax keyword pfmainConf lmtp_enforce_tls
+ syntax keyword pfmainConf lmtp_generic_maps
++syntax keyword pfmainConf lmtp_header_checks
+ syntax keyword pfmainConf lmtp_host_lookup
+ syntax keyword pfmainConf lmtp_lhlo_name
+ syntax keyword pfmainConf lmtp_lhlo_timeout
+ syntax keyword pfmainConf lmtp_line_length_limit
+ syntax keyword pfmainConf lmtp_mail_timeout
++syntax keyword pfmainConf lmtp_mime_header_checks
+ syntax keyword pfmainConf lmtp_mx_address_limit
+ syntax keyword pfmainConf lmtp_mx_session_limit
++syntax keyword pfmainConf lmtp_nested_header_checks
++syntax keyword pfmainConf lmtp_per_record_deadline
+ syntax keyword pfmainConf lmtp_pix_workaround_delay_time
++syntax keyword pfmainConf lmtp_pix_workaround_maps
+ syntax keyword pfmainConf lmtp_pix_workaround_threshold_time
++syntax keyword pfmainConf lmtp_pix_workarounds
+ syntax keyword pfmainConf lmtp_quit_timeout
+ syntax keyword pfmainConf lmtp_quote_rfc821_envelope
+ syntax keyword pfmainConf lmtp_randomize_addresses
+ syntax keyword pfmainConf lmtp_rcpt_timeout
++syntax keyword pfmainConf lmtp_reply_filter
+ syntax keyword pfmainConf lmtp_rset_timeout
++syntax keyword pfmainConf lmtp_sasl_auth_cache_name
++syntax keyword pfmainConf lmtp_sasl_auth_cache_time
+ syntax keyword pfmainConf lmtp_sasl_auth_enable
++syntax keyword pfmainConf lmtp_sasl_auth_soft_bounce
+ syntax keyword pfmainConf lmtp_sasl_mechanism_filter
+ syntax keyword pfmainConf lmtp_sasl_password_maps
+ syntax keyword pfmainConf lmtp_sasl_path
+@@ -201,10 +235,34 @@
+ syntax keyword pfmainConf lmtp_skip_5xx_greeting
+ syntax keyword pfmainConf lmtp_starttls_timeout
+ syntax keyword pfmainConf lmtp_tcp_port
++syntax keyword pfmainConf lmtp_tls_CAfile
++syntax keyword pfmainConf lmtp_tls_CApath
++syntax keyword pfmainConf lmtp_tls_block_early_mail_reply
++syntax keyword pfmainConf lmtp_tls_cert_file
++syntax keyword pfmainConf lmtp_tls_ciphers
++syntax keyword pfmainConf lmtp_tls_dcert_file
++syntax keyword pfmainConf lmtp_tls_dkey_file
++syntax keyword pfmainConf lmtp_tls_eccert_file
++syntax keyword pfmainConf lmtp_tls_eckey_file
+ syntax keyword pfmainConf lmtp_tls_enforce_peername
++syntax keyword pfmainConf lmtp_tls_exclude_ciphers
++syntax keyword pfmainConf lmtp_tls_fingerprint_cert_match
++syntax keyword pfmainConf lmtp_tls_fingerprint_digest
++syntax keyword pfmainConf lmtp_tls_key_file
++syntax keyword pfmainConf lmtp_tls_loglevel
++syntax keyword pfmainConf lmtp_tls_mandatory_ciphers
++syntax keyword pfmainConf lmtp_tls_mandatory_exclude_ciphers
++syntax keyword pfmainConf lmtp_tls_mandatory_protocols
+ syntax keyword pfmainConf lmtp_tls_note_starttls_offer
+ syntax keyword pfmainConf lmtp_tls_per_site
++syntax keyword pfmainConf lmtp_tls_policy_maps
++syntax keyword pfmainConf lmtp_tls_protocols
+ syntax keyword pfmainConf lmtp_tls_scert_verifydepth
++syntax keyword pfmainConf lmtp_tls_secure_cert_match
++syntax keyword pfmainConf lmtp_tls_security_level
++syntax keyword pfmainConf lmtp_tls_session_cache_database
++syntax keyword pfmainConf lmtp_tls_session_cache_timeout
++syntax keyword pfmainConf lmtp_tls_verify_cert_match
+ syntax keyword pfmainConf lmtp_use_tls
+ syntax keyword pfmainConf lmtp_xforward_timeout
+ syntax keyword pfmainConf local_command_shell
+@@ -229,6 +287,7 @@
+ syntax keyword pfmainConf manpage_directory
+ syntax keyword pfmainConf maps_rbl_domains
+ syntax keyword pfmainConf maps_rbl_reject_code
++syntax keyword pfmainConf master_service_disable
+ syntax keyword pfmainConf masquerade_classes
+ syntax keyword pfmainConf masquerade_domains
+ syntax keyword pfmainConf masquerade_exceptions
+@@ -239,10 +298,31 @@
+ syntax keyword pfmainConf message_reject_characters
+ syntax keyword pfmainConf message_size_limit
+ syntax keyword pfmainConf message_strip_characters
++syntax keyword pfmainConf milter_command_timeout
++syntax keyword pfmainConf milter_connect_macros
++syntax keyword pfmainConf milter_connect_timeout
++syntax keyword pfmainConf milter_content_timeout
++syntax keyword pfmainConf milter_data_macros
++syntax keyword pfmainConf milter_default_action
++syntax keyword pfmainConf milter_end_of_data_macros
++syntax keyword pfmainConf milter_end_of_header_macros
++syntax keyword pfmainConf milter_header_checks
++syntax keyword pfmainConf milter_helo_macros
++syntax keyword pfmainConf milter_macro_daemon_name
++syntax keyword pfmainConf milter_macro_v
++syntax keyword pfmainConf milter_mail_macros
++syntax keyword pfmainConf milter_protocol
++syntax keyword pfmainConf milter_rcpt_macros
++syntax keyword pfmainConf milter_unknown_command_macros
+ syntax keyword pfmainConf mime_boundary_length_limit
+ syntax keyword pfmainConf mime_header_checks
+ syntax keyword pfmainConf mime_nesting_limit
+ syntax keyword pfmainConf minimal_backoff_time
++syntax keyword pfmainConf multi_instance_directories
++syntax keyword pfmainConf multi_instance_enable
++syntax keyword pfmainConf multi_instance_group
++syntax keyword pfmainConf multi_instance_name
++syntax keyword pfmainConf multi_instance_wrapper
+ syntax keyword pfmainConf multi_recipient_bounce_reject_code
+ syntax keyword pfmainConf mydestination
+ syntax keyword pfmainConf mydomain
+@@ -253,23 +333,74 @@
+ syntax keyword pfmainConf nested_header_checks
+ syntax keyword pfmainConf newaliases_path
+ syntax keyword pfmainConf non_fqdn_reject_code
++syntax keyword pfmainConf non_smtpd_milters
+ syntax keyword pfmainConf notify_classes
+ syntax keyword pfmainConf owner_request_special
+ syntax keyword pfmainConf parent_domain_matches_subdomains
+ syntax keyword pfmainConf permit_mx_backup_networks
+ syntax keyword pfmainConf pickup_service_name
+ syntax keyword pfmainConf plaintext_reject_code
++syntax keyword pfmainConf postmulti_control_commands
++syntax keyword pfmainConf postmulti_start_commands
++syntax keyword pfmainConf postmulti_stop_commands
++syntax keyword pfmainConf postscreen_access_list
++syntax keyword pfmainConf postscreen_bare_newline_action
++syntax keyword pfmainConf postscreen_bare_newline_enable
++syntax keyword pfmainConf postscreen_bare_newline_ttl
++syntax keyword pfmainConf postscreen_blacklist_action
++syntax keyword pfmainConf postscreen_cache_cleanup_interval
++syntax keyword pfmainConf postscreen_cache_map
++syntax keyword pfmainConf postscreen_cache_retention_time
++syntax keyword pfmainConf postscreen_client_connection_count_limit
++syntax keyword pfmainConf postscreen_command_count_limit
++syntax keyword pfmainConf postscreen_command_filter
++syntax keyword pfmainConf postscreen_command_time_limit
++syntax keyword pfmainConf postscreen_disable_vrfy_command
++syntax keyword pfmainConf postscreen_discard_ehlo_keyword_address_maps
++syntax keyword pfmainConf postscreen_discard_ehlo_keywords
++syntax keyword pfmainConf postscreen_dnsbl_action
++syntax keyword pfmainConf postscreen_dnsbl_reply_map
++syntax keyword pfmainConf postscreen_dnsbl_sites
++syntax keyword pfmainConf postscreen_dnsbl_threshold
++syntax keyword pfmainConf postscreen_dnsbl_ttl
++syntax keyword pfmainConf postscreen_enforce_tls
++syntax keyword pfmainConf postscreen_expansion_filter
++syntax keyword pfmainConf postscreen_forbidden_commands
++syntax keyword pfmainConf postscreen_greet_action
++syntax keyword pfmainConf postscreen_greet_banner
++syntax keyword pfmainConf postscreen_greet_ttl
++syntax keyword pfmainConf postscreen_greet_wait
++syntax keyword pfmainConf postscreen_helo_required
++syntax keyword pfmainConf postscreen_non_smtp_command_action
++syntax keyword pfmainConf postscreen_non_smtp_command_enable
++syntax keyword pfmainConf postscreen_non_smtp_command_ttl
++syntax keyword pfmainConf postscreen_pipelining_action
++syntax keyword pfmainConf postscreen_pipelining_enable
++syntax keyword pfmainConf postscreen_pipelining_ttl
++syntax keyword pfmainConf postscreen_post_queue_limit
++syntax keyword pfmainConf postscreen_pre_queue_limit
++syntax keyword pfmainConf postscreen_reject_footer
++syntax keyword pfmainConf postscreen_tls_security_level
++syntax keyword pfmainConf postscreen_use_tls
++syntax keyword pfmainConf postscreen_watchdog_timeout
++syntax keyword pfmainConf postscreen_whitelist_interfaces
+ syntax keyword pfmainConf prepend_delivered_header
++syntax keyword pfmainConf process_id
+ syntax keyword pfmainConf process_id_directory
++syntax keyword pfmainConf process_name
+ syntax keyword pfmainConf propagate_unmatched_extensions
+ syntax keyword pfmainConf proxy_interfaces
+ syntax keyword pfmainConf proxy_read_maps
++syntax keyword pfmainConf proxy_write_maps
++syntax keyword pfmainConf proxymap_service_name
++syntax keyword pfmainConf proxywrite_service_name
+ syntax keyword pfmainConf qmgr_clog_warn_time
+ syntax keyword pfmainConf qmgr_fudge_factor
+ syntax keyword pfmainConf qmgr_message_active_limit
+ syntax keyword pfmainConf qmgr_message_recipient_limit
+ syntax keyword pfmainConf qmgr_message_recipient_minimum
+ syntax keyword pfmainConf qmqpd_authorized_clients
++syntax keyword pfmainConf qmqpd_client_port_logging
+ syntax keyword pfmainConf qmqpd_error_delay
+ syntax keyword pfmainConf qmqpd_timeout
+ syntax keyword pfmainConf queue_directory
+@@ -285,6 +416,7 @@
+ syntax keyword pfmainConf recipient_canonical_maps
+ syntax keyword pfmainConf recipient_delimiter
+ syntax keyword pfmainConf reject_code
++syntax keyword pfmainConf reject_tempfail_action
+ syntax keyword pfmainConf relay_clientcerts
+ syntax keyword pfmainConf relay_destination_concurrency_limit
+ syntax keyword pfmainConf relay_destination_recipient_limit
+@@ -296,23 +428,28 @@
+ syntax keyword pfmainConf relocated_maps
+ syntax keyword pfmainConf remote_header_rewrite_domain
+ syntax keyword pfmainConf require_home_directory
++syntax keyword pfmainConf reset_owner_alias
+ syntax keyword pfmainConf resolve_dequoted_address
+ syntax keyword pfmainConf resolve_null_domain
+ syntax keyword pfmainConf resolve_numeric_domain
+ syntax keyword pfmainConf rewrite_service_name
+ syntax keyword pfmainConf sample_directory
++syntax keyword pfmainConf send_cyrus_sasl_authzid
+ syntax keyword pfmainConf sender_bcc_maps
+ syntax keyword pfmainConf sender_canonical_classes
+ syntax keyword pfmainConf sender_canonical_maps
++syntax keyword pfmainConf sender_dependent_default_transport_maps
+ syntax keyword pfmainConf sender_dependent_relayhost_maps
+ syntax keyword pfmainConf sendmail_path
+ syntax keyword pfmainConf service_throttle_time
+ syntax keyword pfmainConf setgid_group
+ syntax keyword pfmainConf show_user_unknown_table_name
+ syntax keyword pfmainConf showq_service_name
++syntax keyword pfmainConf smtp_address_preference
+ syntax keyword pfmainConf smtp_always_send_ehlo
+ syntax keyword pfmainConf smtp_bind_address
+ syntax keyword pfmainConf smtp_bind_address6
++syntax keyword pfmainConf smtp_body_checks
+ syntax keyword pfmainConf smtp_cname_overrides_servername
+ syntax keyword pfmainConf smtp_connect_timeout
+ syntax keyword pfmainConf smtp_connection_cache_destinations
+@@ -327,25 +464,35 @@
+ syntax keyword pfmainConf smtp_destination_recipient_limit
+ syntax keyword pfmainConf smtp_discard_ehlo_keyword_address_maps
+ syntax keyword pfmainConf smtp_discard_ehlo_keywords
++syntax keyword pfmainConf smtp_dns_resolver_options
+ syntax keyword pfmainConf smtp_enforce_tls
+ syntax keyword pfmainConf smtp_fallback_relay
+ syntax keyword pfmainConf smtp_generic_maps
++syntax keyword pfmainConf smtp_header_checks
+ syntax keyword pfmainConf smtp_helo_name
+ syntax keyword pfmainConf smtp_helo_timeout
+ syntax keyword pfmainConf smtp_host_lookup
+ syntax keyword pfmainConf smtp_line_length_limit
+ syntax keyword pfmainConf smtp_mail_timeout
++syntax keyword pfmainConf smtp_mime_header_checks
+ syntax keyword pfmainConf smtp_mx_address_limit
+ syntax keyword pfmainConf smtp_mx_session_limit
++syntax keyword pfmainConf smtp_nested_header_checks
+ syntax keyword pfmainConf smtp_never_send_ehlo
+ syntax keyword pfmainConf smtp_pix_workaround_delay_time
++syntax keyword pfmainConf smtp_pix_workaround_maps
+ syntax keyword pfmainConf smtp_pix_workaround_threshold_time
++syntax keyword pfmainConf smtp_pix_workarounds
+ syntax keyword pfmainConf smtp_quit_timeout
+ syntax keyword pfmainConf smtp_quote_rfc821_envelope
+ syntax keyword pfmainConf smtp_randomize_addresses
+ syntax keyword pfmainConf smtp_rcpt_timeout
++syntax keyword pfmainConf smtp_reply_filter
+ syntax keyword pfmainConf smtp_rset_timeout
++syntax keyword pfmainConf smtp_sasl_auth_cache_name
++syntax keyword pfmainConf smtp_sasl_auth_cache_time
+ syntax keyword pfmainConf smtp_sasl_auth_enable
++syntax keyword pfmainConf smtp_sasl_auth_soft_bounce
+ syntax keyword pfmainConf smtp_sasl_mechanism_filter
+ syntax keyword pfmainConf smtp_sasl_password_maps
+ syntax keyword pfmainConf smtp_sasl_path
+@@ -360,18 +507,33 @@
+ syntax keyword pfmainConf smtp_starttls_timeout
+ syntax keyword pfmainConf smtp_tls_CAfile
+ syntax keyword pfmainConf smtp_tls_CApath
++syntax keyword pfmainConf smtp_tls_block_early_mail_reply
+ syntax keyword pfmainConf smtp_tls_cert_file
+ syntax keyword pfmainConf smtp_tls_cipherlist
++syntax keyword pfmainConf smtp_tls_ciphers
+ syntax keyword pfmainConf smtp_tls_dcert_file
+ syntax keyword pfmainConf smtp_tls_dkey_file
++syntax keyword pfmainConf smtp_tls_eccert_file
++syntax keyword pfmainConf smtp_tls_eckey_file
+ syntax keyword pfmainConf smtp_tls_enforce_peername
++syntax keyword pfmainConf smtp_tls_exclude_ciphers
++syntax keyword pfmainConf smtp_tls_fingerprint_cert_match
++syntax keyword pfmainConf smtp_tls_fingerprint_digest
+ syntax keyword pfmainConf smtp_tls_key_file
+ syntax keyword pfmainConf smtp_tls_loglevel
++syntax keyword pfmainConf smtp_tls_mandatory_ciphers
++syntax keyword pfmainConf smtp_tls_mandatory_exclude_ciphers
++syntax keyword pfmainConf smtp_tls_mandatory_protocols
+ syntax keyword pfmainConf smtp_tls_note_starttls_offer
+ syntax keyword pfmainConf smtp_tls_per_site
++syntax keyword pfmainConf smtp_tls_policy_maps
++syntax keyword pfmainConf smtp_tls_protocols
+ syntax keyword pfmainConf smtp_tls_scert_verifydepth
++syntax keyword pfmainConf smtp_tls_secure_cert_match
++syntax keyword pfmainConf smtp_tls_security_level
+ syntax keyword pfmainConf smtp_tls_session_cache_database
+ syntax keyword pfmainConf smtp_tls_session_cache_timeout
++syntax keyword pfmainConf smtp_tls_verify_cert_match
+ syntax keyword pfmainConf smtp_use_tls
+ syntax keyword pfmainConf smtp_xforward_timeout
+ syntax keyword pfmainConf smtpd_authorized_verp_clients
+@@ -383,8 +545,10 @@
+ syntax keyword pfmainConf smtpd_client_event_limit_exceptions
+ syntax keyword pfmainConf smtpd_client_message_rate_limit
+ syntax keyword pfmainConf smtpd_client_new_tls_session_rate_limit
++syntax keyword pfmainConf smtpd_client_port_logging
+ syntax keyword pfmainConf smtpd_client_recipient_rate_limit
+ syntax keyword pfmainConf smtpd_client_restrictions
++syntax keyword pfmainConf smtpd_command_filter
+ syntax keyword pfmainConf smtpd_data_restrictions
+ syntax keyword pfmainConf smtpd_delay_open_until_valid_rcpt
+ syntax keyword pfmainConf smtpd_delay_reject
+@@ -401,18 +565,22 @@
+ syntax keyword pfmainConf smtpd_helo_restrictions
+ syntax keyword pfmainConf smtpd_history_flush_threshold
+ syntax keyword pfmainConf smtpd_junk_command_limit
++syntax keyword pfmainConf smtpd_milters
+ syntax keyword pfmainConf smtpd_noop_commands
+ syntax keyword pfmainConf smtpd_null_access_lookup_key
+ syntax keyword pfmainConf smtpd_peername_lookup
++syntax keyword pfmainConf smtpd_per_record_deadline
+ syntax keyword pfmainConf smtpd_policy_service_max_idle
+ syntax keyword pfmainConf smtpd_policy_service_max_ttl
+ syntax keyword pfmainConf smtpd_policy_service_timeout
+ syntax keyword pfmainConf smtpd_proxy_ehlo
+ syntax keyword pfmainConf smtpd_proxy_filter
++syntax keyword pfmainConf smtpd_proxy_options
+ syntax keyword pfmainConf smtpd_proxy_timeout
+ syntax keyword pfmainConf smtpd_recipient_limit
+ syntax keyword pfmainConf smtpd_recipient_overshoot_limit
+ syntax keyword pfmainConf smtpd_recipient_restrictions
++syntax keyword pfmainConf smtpd_reject_footer
+ syntax keyword pfmainConf smtpd_reject_unlisted_recipient
+ syntax keyword pfmainConf smtpd_reject_unlisted_sender
+ syntax keyword pfmainConf smtpd_restriction_classes
+@@ -426,59 +594,142 @@
+ syntax keyword pfmainConf smtpd_sasl_type
+ syntax keyword pfmainConf smtpd_sender_login_maps
+ syntax keyword pfmainConf smtpd_sender_restrictions
++syntax keyword pfmainConf smtpd_service_name
+ syntax keyword pfmainConf smtpd_soft_error_limit
+ syntax keyword pfmainConf smtpd_starttls_timeout
+ syntax keyword pfmainConf smtpd_timeout
+ syntax keyword pfmainConf smtpd_tls_CAfile
+ syntax keyword pfmainConf smtpd_tls_CApath
++syntax keyword pfmainConf smtpd_tls_always_issue_session_ids
+ syntax keyword pfmainConf smtpd_tls_ask_ccert
+ syntax keyword pfmainConf smtpd_tls_auth_only
+ syntax keyword pfmainConf smtpd_tls_ccert_verifydepth
+ syntax keyword pfmainConf smtpd_tls_cert_file
+ syntax keyword pfmainConf smtpd_tls_cipherlist
++syntax keyword pfmainConf smtpd_tls_ciphers
+ syntax keyword pfmainConf smtpd_tls_dcert_file
+ syntax keyword pfmainConf smtpd_tls_dh1024_param_file
+ syntax keyword pfmainConf smtpd_tls_dh512_param_file
+ syntax keyword pfmainConf smtpd_tls_dkey_file
++syntax keyword pfmainConf smtpd_tls_eccert_file
++syntax keyword pfmainConf smtpd_tls_eckey_file
++syntax keyword pfmainConf smtpd_tls_eecdh_grade
++syntax keyword pfmainConf smtpd_tls_exclude_ciphers
++syntax keyword pfmainConf smtpd_tls_fingerprint_digest
+ syntax keyword pfmainConf smtpd_tls_key_file
+ syntax keyword pfmainConf smtpd_tls_loglevel
++syntax keyword pfmainConf smtpd_tls_mandatory_ciphers
++syntax keyword pfmainConf smtpd_tls_mandatory_exclude_ciphers
++syntax keyword pfmainConf smtpd_tls_mandatory_protocols
++syntax keyword pfmainConf smtpd_tls_protocols
+ syntax keyword pfmainConf smtpd_tls_received_header
+ syntax keyword pfmainConf smtpd_tls_req_ccert
++syntax keyword pfmainConf smtpd_tls_security_level
+ syntax keyword pfmainConf smtpd_tls_session_cache_database
+ syntax keyword pfmainConf smtpd_tls_session_cache_timeout
+ syntax keyword pfmainConf smtpd_tls_wrappermode
+ syntax keyword pfmainConf smtpd_use_tls
+ syntax keyword pfmainConf soft_bounce
+ syntax keyword pfmainConf stale_lock_time
++syntax keyword pfmainConf stress
+ syntax keyword pfmainConf strict_7bit_headers
+ syntax keyword pfmainConf strict_8bitmime
+ syntax keyword pfmainConf strict_8bitmime_body
+ syntax keyword pfmainConf strict_mime_encoding_domain
+ syntax keyword pfmainConf strict_rfc821_envelopes
++syntax keyword pfmainConf strict_7bit_headers
++syntax keyword pfmainConf strict_8bitmime
++syntax keyword pfmainConf strict_8bitmime_body
++syntax keyword pfmainConf strict_mailbox_ownership
++syntax keyword pfmainConf strict_mime_encoding_domain
++syntax keyword pfmainConf strict_rfc821_envelopes
+ syntax keyword pfmainConf sun_mailtool_compatibility
+ syntax keyword pfmainConf swap_bangpath
+ syntax keyword pfmainConf syslog_facility
+ syntax keyword pfmainConf syslog_name
++syntax keyword pfmainConf tcp_windowsize
++syntax keyword pfmainConf tls_append_default_CA
+ syntax keyword pfmainConf tls_daemon_random_bytes
++syntax keyword pfmainConf tls_disable_workarounds
++syntax keyword pfmainConf tls_eecdh_strong_curve
++syntax keyword pfmainConf tls_eecdh_ultra_curve
++syntax keyword pfmainConf tls_export_cipherlist
++syntax keyword pfmainConf tls_high_cipherlist
++syntax keyword pfmainConf tls_low_cipherlist
++syntax keyword pfmainConf tls_medium_cipherlist
++syntax keyword pfmainConf tls_null_cipherlist
++syntax keyword pfmainConf tls_preempt_cipherlist
+ syntax keyword pfmainConf tls_random_bytes
+ syntax keyword pfmainConf tls_random_exchange_name
+ syntax keyword pfmainConf tls_random_prng_update_period
+ syntax keyword pfmainConf tls_random_reseed_period
+ syntax keyword pfmainConf tls_random_source
++syntax keyword pfmainConf tlsproxy_enforce_tls
++syntax keyword pfmainConf tlsproxy_service_name
++syntax keyword pfmainConf tlsproxy_tls_CAfile
++syntax keyword pfmainConf tlsproxy_tls_CApath
++syntax keyword pfmainConf tlsproxy_tls_always_issue_session_ids
++syntax keyword pfmainConf tlsproxy_tls_ask_ccert
++syntax keyword pfmainConf tlsproxy_tls_ccert_verifydepth
++syntax keyword pfmainConf tlsproxy_tls_cert_file
++syntax keyword pfmainConf tlsproxy_tls_ciphers
++syntax keyword pfmainConf tlsproxy_tls_dcert_file
++syntax keyword pfmainConf tlsproxy_tls_dh1024_param_file
++syntax keyword pfmainConf tlsproxy_tls_dh512_param_file
++syntax keyword pfmainConf tlsproxy_tls_dkey_file
++syntax keyword pfmainConf tlsproxy_tls_eccert_file
++syntax keyword pfmainConf tlsproxy_tls_eckey_file
++syntax keyword pfmainConf tlsproxy_tls_eecdh_grade
++syntax keyword pfmainConf tlsproxy_tls_exclude_ciphers
++syntax keyword pfmainConf tlsproxy_tls_fingerprint_digest
++syntax keyword pfmainConf tlsproxy_tls_key_file
++syntax keyword pfmainConf tlsproxy_tls_loglevel
++syntax keyword pfmainConf tlsproxy_tls_mandatory_ciphers
++syntax keyword pfmainConf tlsproxy_tls_mandatory_exclude_ciphers
++syntax keyword pfmainConf tlsproxy_tls_mandatory_protocols
++syntax keyword pfmainConf tlsproxy_tls_protocols
++syntax keyword pfmainConf tlsproxy_tls_req_ccert
++syntax keyword pfmainConf tlsproxy_tls_security_level
++syntax keyword pfmainConf tlsproxy_tls_session_cache_timeout
++syntax keyword pfmainConf tlsproxy_use_tls
++syntax keyword pfmainConf tlsproxy_watchdog_timeout
+ syntax keyword pfmainConf trace_service_name
++syntax keyword pfmainConf transport_delivery_slot_cost
++syntax keyword pfmainConf transport_delivery_slot_discount
++syntax keyword pfmainConf transport_delivery_slot_loan
++syntax keyword pfmainConf transport_destination_concurrency_failed_cohort_limit
++syntax keyword pfmainConf transport_destination_concurrency_limit
++syntax keyword pfmainConf transport_destination_concurrency_negative_feedback
++syntax keyword pfmainConf transport_destination_concurrency_positive_feedback
++syntax keyword pfmainConf transport_destination_rate_delay
++syntax keyword pfmainConf transport_destination_recipient_limit
++syntax keyword pfmainConf transport_extra_recipient_limit
++syntax keyword pfmainConf transport_initial_destination_concurrency
+ syntax keyword pfmainConf transport_maps
++syntax keyword pfmainConf transport_minimum_delivery_slots
++syntax keyword pfmainConf transport_recipient_limit
++syntax keyword pfmainConf transport_recipient_refill_delay
++syntax keyword pfmainConf transport_recipient_refill_limit
+ syntax keyword pfmainConf transport_retry_time
+ syntax keyword pfmainConf trigger_timeout
+ syntax keyword pfmainConf undisclosed_recipients_header
+ syntax keyword pfmainConf unknown_address_reject_code
++syntax keyword pfmainConf unknown_address_tempfail_action
+ syntax keyword pfmainConf unknown_client_reject_code
++syntax keyword pfmainConf unknown_helo_hostname_tempfail_action
+ syntax keyword pfmainConf unknown_hostname_reject_code
+ syntax keyword pfmainConf unknown_local_recipient_reject_code
+ syntax keyword pfmainConf unknown_relay_recipient_reject_code
+ syntax keyword pfmainConf unknown_virtual_alias_reject_code
+ syntax keyword pfmainConf unknown_virtual_mailbox_reject_code
++syntax keyword pfmainConf unverified_recipient_defer_code
+ syntax keyword pfmainConf unverified_recipient_reject_code
++syntax keyword pfmainConf unverified_recipient_reject_reason
++syntax keyword pfmainConf unverified_recipient_tempfail_action
++syntax keyword pfmainConf unverified_sender_defer_code
+ syntax keyword pfmainConf unverified_sender_reject_code
++syntax keyword pfmainConf unverified_sender_reject_reason
++syntax keyword pfmainConf unverified_sender_tempfail_action
+ syntax keyword pfmainConf verp_delimiter_filter
+ syntax keyword pfmainConf virtual_alias_domains
+ syntax keyword pfmainConf virtual_alias_expansion_limit
+@@ -496,7 +747,9 @@
+ syntax keyword pfmainConf virtual_transport
+ syntax keyword pfmainConf virtual_uid_maps
+ syntax match pfmainRef "$\<2bounce_notice_recipient\>"
++syntax match pfmainRef "$\<access_map_defer_code\>"
+ syntax match pfmainRef "$\<access_map_reject_code\>"
++syntax match pfmainRef "$\<address_verify_cache_cleanup_interval\>"
+ syntax match pfmainRef "$\<address_verify_default_transport\>"
+ syntax match pfmainRef "$\<address_verify_local_transport\>"
+ syntax match pfmainRef "$\<address_verify_map\>"
+@@ -510,6 +763,7 @@
+ syntax match pfmainRef "$\<address_verify_relay_transport\>"
+ syntax match pfmainRef "$\<address_verify_relayhost\>"
+ syntax match pfmainRef "$\<address_verify_sender\>"
++syntax match pfmainRef "$\<address_verify_sender_dependent_default_transport_maps\>"
+ syntax match pfmainRef "$\<address_verify_sender_dependent_relayhost_maps\>"
+ syntax match pfmainRef "$\<address_verify_service_name\>"
+ syntax match pfmainRef "$\<address_verify_transport_maps\>"
+@@ -557,22 +811,31 @@
+ syntax match pfmainRef "$\<connection_cache_status_update_time\>"
+ syntax match pfmainRef "$\<connection_cache_ttl_limit\>"
+ syntax match pfmainRef "$\<content_filter\>"
++syntax match pfmainRef "$\<cyrus_sasl_config_path\>"
+ syntax match pfmainRef "$\<daemon_directory\>"
+ syntax match pfmainRef "$\<daemon_timeout\>"
++syntax match pfmainRef "$\<data_directory\>"
+ syntax match pfmainRef "$\<debug_peer_level\>"
+ syntax match pfmainRef "$\<debug_peer_list\>"
+ syntax match pfmainRef "$\<default_database_type\>"
+ syntax match pfmainRef "$\<default_delivery_slot_cost\>"
+ syntax match pfmainRef "$\<default_delivery_slot_discount\>"
+ syntax match pfmainRef "$\<default_delivery_slot_loan\>"
++syntax match pfmainRef "$\<default_destination_concurrency_failed_cohort_limit\>"
+ syntax match pfmainRef "$\<default_destination_concurrency_limit\>"
++syntax match pfmainRef "$\<default_destination_concurrency_negative_feedback\>"
++syntax match pfmainRef "$\<default_destination_concurrency_positive_feedback\>"
++syntax match pfmainRef "$\<default_destination_rate_delay\>"
+ syntax match pfmainRef "$\<default_destination_recipient_limit\>"
+ syntax match pfmainRef "$\<default_extra_recipient_limit\>"
++syntax match pfmainRef "$\<default_filter_nexthop\>"
+ syntax match pfmainRef "$\<default_minimum_delivery_slots\>"
+ syntax match pfmainRef "$\<default_privs\>"
+ syntax match pfmainRef "$\<default_process_limit\>"
+ syntax match pfmainRef "$\<default_rbl_reply\>"
+ syntax match pfmainRef "$\<default_recipient_limit\>"
++syntax match pfmainRef "$\<default_recipient_refill_delay\>"
++syntax match pfmainRef "$\<default_recipient_refill_limit\>"
+ syntax match pfmainRef "$\<default_transport\>"
+ syntax match pfmainRef "$\<default_verp_delimiters\>"
+ syntax match pfmainRef "$\<defer_code\>"
+@@ -583,15 +846,22 @@
+ syntax match pfmainRef "$\<delay_warning_time\>"
+ syntax match pfmainRef "$\<deliver_lock_attempts\>"
+ syntax match pfmainRef "$\<deliver_lock_delay\>"
++syntax match pfmainRef "$\<destination_concurrency_feedback_debug\>"
++syntax match pfmainRef "$\<detect_8bit_encoding_header\>"
+ syntax match pfmainRef "$\<disable_dns_lookups\>"
+ syntax match pfmainRef "$\<disable_mime_input_processing\>"
+ syntax match pfmainRef "$\<disable_mime_output_conversion\>"
+ syntax match pfmainRef "$\<disable_verp_bounces\>"
+ syntax match pfmainRef "$\<disable_vrfy_command\>"
++syntax match pfmainRef "$\<dnsblog_reply_delay\>"
++syntax match pfmainRef "$\<dnsblog_service_name\>"
+ syntax match pfmainRef "$\<dont_remove\>"
+ syntax match pfmainRef "$\<double_bounce_sender\>"
+ syntax match pfmainRef "$\<duplicate_filter_limit\>"
++syntax match pfmainRef "$\<empty_address_default_transport_maps_lookup_key\>"
+ syntax match pfmainRef "$\<empty_address_recipient\>"
++syntax match pfmainRef "$\<empty_address_relayhost_maps_lookup_key\>"
++syntax match pfmainRef "$\<enable_long_queue_ids\>"
+ syntax match pfmainRef "$\<enable_original_recipient\>"
+ syntax match pfmainRef "$\<error_notice_recipient\>"
+ syntax match pfmainRef "$\<error_service_name\>"
+@@ -625,13 +895,16 @@
+ syntax match pfmainRef "$\<inet_interfaces\>"
+ syntax match pfmainRef "$\<inet_protocols\>"
+ syntax match pfmainRef "$\<initial_destination_concurrency\>"
++syntax match pfmainRef "$\<internal_mail_filter_classes\>"
+ syntax match pfmainRef "$\<invalid_hostname_reject_code\>"
+ syntax match pfmainRef "$\<ipc_idle\>"
+ syntax match pfmainRef "$\<ipc_timeout\>"
+ syntax match pfmainRef "$\<ipc_ttl\>"
+ syntax match pfmainRef "$\<line_length_limit\>"
++syntax match pfmainRef "$\<lmtp_address_preference\>"
+ syntax match pfmainRef "$\<lmtp_bind_address\>"
+ syntax match pfmainRef "$\<lmtp_bind_address6\>"
++syntax match pfmainRef "$\<lmtp_body_checks\>"
+ syntax match pfmainRef "$\<lmtp_cname_overrides_servername\>"
+ syntax match pfmainRef "$\<lmtp_connect_timeout\>"
+ syntax match pfmainRef "$\<lmtp_connection_cache_destinations\>"
+@@ -646,23 +919,34 @@
+ syntax match pfmainRef "$\<lmtp_destination_recipient_limit\>"
+ syntax match pfmainRef "$\<lmtp_discard_lhlo_keyword_address_maps\>"
+ syntax match pfmainRef "$\<lmtp_discard_lhlo_keywords\>"
++syntax match pfmainRef "$\<lmtp_dns_resolver_options\>"
+ syntax match pfmainRef "$\<lmtp_enforce_tls\>"
+ syntax match pfmainRef "$\<lmtp_generic_maps\>"
++syntax match pfmainRef "$\<lmtp_header_checks\>"
+ syntax match pfmainRef "$\<lmtp_host_lookup\>"
+ syntax match pfmainRef "$\<lmtp_lhlo_name\>"
+ syntax match pfmainRef "$\<lmtp_lhlo_timeout\>"
+ syntax match pfmainRef "$\<lmtp_line_length_limit\>"
+ syntax match pfmainRef "$\<lmtp_mail_timeout\>"
++syntax match pfmainRef "$\<lmtp_mime_header_checks\>"
+ syntax match pfmainRef "$\<lmtp_mx_address_limit\>"
+ syntax match pfmainRef "$\<lmtp_mx_session_limit\>"
++syntax match pfmainRef "$\<lmtp_nested_header_checks\>"
++syntax match pfmainRef "$\<lmtp_per_record_deadline\>"
+ syntax match pfmainRef "$\<lmtp_pix_workaround_delay_time\>"
++syntax match pfmainRef "$\<lmtp_pix_workaround_maps\>"
+ syntax match pfmainRef "$\<lmtp_pix_workaround_threshold_time\>"
++syntax match pfmainRef "$\<lmtp_pix_workarounds\>"
+ syntax match pfmainRef "$\<lmtp_quit_timeout\>"
+ syntax match pfmainRef "$\<lmtp_quote_rfc821_envelope\>"
+ syntax match pfmainRef "$\<lmtp_randomize_addresses\>"
+ syntax match pfmainRef "$\<lmtp_rcpt_timeout\>"
++syntax match pfmainRef "$\<lmtp_reply_filter\>"
+ syntax match pfmainRef "$\<lmtp_rset_timeout\>"
++syntax match pfmainRef "$\<lmtp_sasl_auth_cache_name\>"
++syntax match pfmainRef "$\<lmtp_sasl_auth_cache_time\>"
+ syntax match pfmainRef "$\<lmtp_sasl_auth_enable\>"
++syntax match pfmainRef "$\<lmtp_sasl_auth_soft_bounce\>"
+ syntax match pfmainRef "$\<lmtp_sasl_mechanism_filter\>"
+ syntax match pfmainRef "$\<lmtp_sasl_password_maps\>"
+ syntax match pfmainRef "$\<lmtp_sasl_path\>"
+@@ -675,10 +959,31 @@
+ syntax match pfmainRef "$\<lmtp_skip_5xx_greeting\>"
+ syntax match pfmainRef "$\<lmtp_starttls_timeout\>"
+ syntax match pfmainRef "$\<lmtp_tcp_port\>"
++syntax match pfmainRef "$\<lmtp_tls_CAfile\>"
++syntax match pfmainRef "$\<lmtp_tls_CApath\>"
++syntax match pfmainRef "$\<lmtp_tls_block_early_mail_reply\>"
++syntax match pfmainRef "$\<lmtp_tls_cert_file\>"
++syntax match pfmainRef "$\<lmtp_tls_ciphers\>"
++syntax match pfmainRef "$\<lmtp_tls_dcert_file\>"
++syntax match pfmainRef "$\<lmtp_tls_dkey_file\>"
++syntax match pfmainRef "$\<lmtp_tls_eccert_file\>"
++syntax match pfmainRef "$\<lmtp_tls_eckey_file\>"
+ syntax match pfmainRef "$\<lmtp_tls_enforce_peername\>"
++syntax match pfmainRef "$\<lmtp_tls_exclude_ciphers\>"
++syntax match pfmainRef "$\<lmtp_tls_fingerprint_cert_match\>"
++syntax match pfmainRef "$\<lmtp_tls_fingerprint_digest\>"
++syntax match pfmainRef "$\<lmtp_tls_key_file\>"
++syntax match pfmainRef "$\<lmtp_tls_loglevel\>"
++syntax match pfmainRef "$\<lmtp_tls_mandatory_ciphers\>"
++syntax match pfmainRef "$\<lmtp_tls_mandatory_exclude_ciphers\>"
++syntax match pfmainRef "$\<lmtp_tls_mandatory_protocols\>"
+ syntax match pfmainRef "$\<lmtp_tls_note_starttls_offer\>"
+ syntax match pfmainRef "$\<lmtp_tls_per_site\>"
++syntax match pfmainRef "$\<lmtp_tls_policy_maps\>"
++syntax match pfmainRef "$\<lmtp_tls_protocols\>"
+ syntax match pfmainRef "$\<lmtp_tls_scert_verifydepth\>"
++syntax match pfmainRef "$\<lmtp_tls_session_cache_timeout\>"
++syntax match pfmainRef "$\<lmtp_tls_verify_cert_match\>"
+ syntax match pfmainRef "$\<lmtp_use_tls\>"
+ syntax match pfmainRef "$\<lmtp_xforward_timeout\>"
+ syntax match pfmainRef "$\<local_command_shell\>"
+@@ -703,6 +1008,7 @@
+ syntax match pfmainRef "$\<manpage_directory\>"
+ syntax match pfmainRef "$\<maps_rbl_domains\>"
+ syntax match pfmainRef "$\<maps_rbl_reject_code\>"
++syntax match pfmainRef "$\<master_service_disable\>"
+ syntax match pfmainRef "$\<masquerade_classes\>"
+ syntax match pfmainRef "$\<masquerade_domains\>"
+ syntax match pfmainRef "$\<masquerade_exceptions\>"
+@@ -713,10 +1019,31 @@
+ syntax match pfmainRef "$\<message_reject_characters\>"
+ syntax match pfmainRef "$\<message_size_limit\>"
+ syntax match pfmainRef "$\<message_strip_characters\>"
++syntax match pfmainRef "$\<milter_command_timeout\>"
++syntax match pfmainRef "$\<milter_connect_macros\>"
++syntax match pfmainRef "$\<milter_connect_timeout\>"
++syntax match pfmainRef "$\<milter_content_timeout\>"
++syntax match pfmainRef "$\<milter_data_macros\>"
++syntax match pfmainRef "$\<milter_default_action\>"
++syntax match pfmainRef "$\<milter_end_of_data_macros\>"
++syntax match pfmainRef "$\<milter_end_of_header_macros\>"
++syntax match pfmainRef "$\<milter_header_checks\>"
++syntax match pfmainRef "$\<milter_helo_macros\>"
++syntax match pfmainRef "$\<milter_macro_daemon_name\>"
++syntax match pfmainRef "$\<milter_macro_v\>"
++syntax match pfmainRef "$\<milter_mail_macros\>"
++syntax match pfmainRef "$\<milter_protocol\>"
++syntax match pfmainRef "$\<milter_rcpt_macros\>"
++syntax match pfmainRef "$\<milter_unknown_command_macros\>"
+ syntax match pfmainRef "$\<mime_boundary_length_limit\>"
+ syntax match pfmainRef "$\<mime_header_checks\>"
+ syntax match pfmainRef "$\<mime_nesting_limit\>"
+ syntax match pfmainRef "$\<minimal_backoff_time\>"
++syntax match pfmainRef "$\<multi_instance_directories\>"
++syntax match pfmainRef "$\<multi_instance_enable\>"
++syntax match pfmainRef "$\<multi_instance_group\>"
++syntax match pfmainRef "$\<multi_instance_name\>"
++syntax match pfmainRef "$\<multi_instance_wrapper\>"
+ syntax match pfmainRef "$\<multi_recipient_bounce_reject_code\>"
+ syntax match pfmainRef "$\<mydestination\>"
+ syntax match pfmainRef "$\<mydomain\>"
+@@ -727,23 +1054,77 @@
+ syntax match pfmainRef "$\<nested_header_checks\>"
+ syntax match pfmainRef "$\<newaliases_path\>"
+ syntax match pfmainRef "$\<non_fqdn_reject_code\>"
++syntax match pfmainRef "$\<non_smtpd_milters\>"
+ syntax match pfmainRef "$\<notify_classes\>"
+ syntax match pfmainRef "$\<owner_request_special\>"
+ syntax match pfmainRef "$\<parent_domain_matches_subdomains\>"
+ syntax match pfmainRef "$\<permit_mx_backup_networks\>"
+ syntax match pfmainRef "$\<pickup_service_name\>"
+ syntax match pfmainRef "$\<plaintext_reject_code\>"
++syntax match pfmainRef "$\<postmulti_control_commands\>"
++syntax match pfmainRef "$\<postmulti_start_commands\>"
++syntax match pfmainRef "$\<postmulti_stop_commands\>"
++syntax match pfmainRef "$\<postscreen_access_list\>"
++syntax match pfmainRef "$\<postscreen_bare_newline_action\>"
++syntax match pfmainRef "$\<postscreen_bare_newline_enable\>"
++syntax match pfmainRef "$\<postscreen_bare_newline_ttl\>"
++syntax match pfmainRef "$\<postscreen_blacklist_action\>"
++syntax match pfmainRef "$\<postscreen_cache_cleanup_interval\>"
++syntax match pfmainRef "$\<postscreen_cache_map\>"
++syntax match pfmainRef "$\<postscreen_cache_retention_time\>"
++syntax match pfmainRef "$\<postscreen_client_connection_count_limit\>"
++syntax match pfmainRef "$\<postscreen_command_count_limit\>"
++syntax match pfmainRef "$\<postscreen_command_filter\>"
++syntax match pfmainRef "$\<postscreen_command_time_limit\>"
++syntax match pfmainRef "$\<postscreen_disable_vrfy_command\>"
++syntax match pfmainRef "$\<postscreen_discard_ehlo_keyword_address_maps\>"
++syntax match pfmainRef "$\<postscreen_discard_ehlo_keywords\>"
++syntax match pfmainRef "$\<postscreen_dnsbl_action\>"
++syntax match pfmainRef "$\<postscreen_dnsbl_reply_map\>"
++syntax match pfmainRef "$\<postscreen_dnsbl_sites\>"
++syntax match pfmainRef "$\<postscreen_dnsbl_threshold\>"
++syntax match pfmainRef "$\<postscreen_dnsbl_ttl\>"
++syntax match pfmainRef "$\<postscreen_enforce_tls\>"
++syntax match pfmainRef "$\<postscreen_expansion_filter\>"
++syntax match pfmainRef "$\<postscreen_forbidden_commands\>"
++syntax match pfmainRef "$\<postscreen_greet_action\>"
++syntax match pfmainRef "$\<postscreen_greet_banner\>"
++syntax match pfmainRef "$\<postscreen_greet_ttl\>"
++syntax match pfmainRef "$\<postscreen_greet_wait\>"
++syntax match pfmainRef "$\<postscreen_helo_required\>"
++syntax match pfmainRef "$\<postscreen_non_smtp_command_action\>"
++syntax match pfmainRef "$\<postscreen_non_smtp_command_enable\>"
++syntax match pfmainRef "$\<postscreen_non_smtp_command_ttl\>"
++syntax match pfmainRef "$\<postscreen_pipelining_action\>"
++syntax match pfmainRef "$\<postscreen_pipelining_enable\>"
++syntax match pfmainRef "$\<postscreen_pipelining_ttl\>"
++syntax match pfmainRef "$\<postscreen_post_queue_limit\>"
++syntax match pfmainRef "$\<postscreen_pre_queue_limit\>"
++syntax match pfmainRef "$\<postscreen_reject_footer\>"
++syntax match pfmainRef "$\<postscreen_tls_security_level\>"
++syntax match pfmainRef "$\<lmtp_tls_secure_cert_match\>"
++syntax match pfmainRef "$\<lmtp_tls_security_level\>"
++syntax match pfmainRef "$\<lmtp_tls_session_cache_database\>"
++syntax match pfmainRef "$\<postscreen_use_tls\>"
++syntax match pfmainRef "$\<postscreen_watchdog_timeout\>"
++syntax match pfmainRef "$\<postscreen_whitelist_interfaces\>"
+ syntax match pfmainRef "$\<prepend_delivered_header\>"
++syntax match pfmainRef "$\<process_id\>"
+ syntax match pfmainRef "$\<process_id_directory\>"
++syntax match pfmainRef "$\<process_name\>"
+ syntax match pfmainRef "$\<propagate_unmatched_extensions\>"
+ syntax match pfmainRef "$\<proxy_interfaces\>"
+ syntax match pfmainRef "$\<proxy_read_maps\>"
++syntax match pfmainRef "$\<proxy_write_maps\>"
++syntax match pfmainRef "$\<proxymap_service_name\>"
++syntax match pfmainRef "$\<proxywrite_service_name\>"
+ syntax match pfmainRef "$\<qmgr_clog_warn_time\>"
+ syntax match pfmainRef "$\<qmgr_fudge_factor\>"
+ syntax match pfmainRef "$\<qmgr_message_active_limit\>"
+ syntax match pfmainRef "$\<qmgr_message_recipient_limit\>"
+ syntax match pfmainRef "$\<qmgr_message_recipient_minimum\>"
+ syntax match pfmainRef "$\<qmqpd_authorized_clients\>"
++syntax match pfmainRef "$\<qmqpd_client_port_logging\>"
+ syntax match pfmainRef "$\<qmqpd_error_delay\>"
+ syntax match pfmainRef "$\<qmqpd_timeout\>"
+ syntax match pfmainRef "$\<queue_directory\>"
+@@ -759,6 +1140,7 @@
+ syntax match pfmainRef "$\<recipient_canonical_maps\>"
+ syntax match pfmainRef "$\<recipient_delimiter\>"
+ syntax match pfmainRef "$\<reject_code\>"
++syntax match pfmainRef "$\<reject_tempfail_action\>"
+ syntax match pfmainRef "$\<relay_clientcerts\>"
+ syntax match pfmainRef "$\<relay_destination_concurrency_limit\>"
+ syntax match pfmainRef "$\<relay_destination_recipient_limit\>"
+@@ -770,23 +1152,28 @@
+ syntax match pfmainRef "$\<relocated_maps\>"
+ syntax match pfmainRef "$\<remote_header_rewrite_domain\>"
+ syntax match pfmainRef "$\<require_home_directory\>"
++syntax match pfmainRef "$\<reset_owner_alias\>"
+ syntax match pfmainRef "$\<resolve_dequoted_address\>"
+ syntax match pfmainRef "$\<resolve_null_domain\>"
+ syntax match pfmainRef "$\<resolve_numeric_domain\>"
+ syntax match pfmainRef "$\<rewrite_service_name\>"
+ syntax match pfmainRef "$\<sample_directory\>"
++syntax match pfmainRef "$\<send_cyrus_sasl_authzid\>"
+ syntax match pfmainRef "$\<sender_bcc_maps\>"
+ syntax match pfmainRef "$\<sender_canonical_classes\>"
+ syntax match pfmainRef "$\<sender_canonical_maps\>"
++syntax match pfmainRef "$\<sender_dependent_default_transport_maps\>"
+ syntax match pfmainRef "$\<sender_dependent_relayhost_maps\>"
+ syntax match pfmainRef "$\<sendmail_path\>"
+ syntax match pfmainRef "$\<service_throttle_time\>"
+ syntax match pfmainRef "$\<setgid_group\>"
+ syntax match pfmainRef "$\<show_user_unknown_table_name\>"
+ syntax match pfmainRef "$\<showq_service_name\>"
++syntax match pfmainRef "$\<smtp_address_preference\>"
+ syntax match pfmainRef "$\<smtp_always_send_ehlo\>"
+ syntax match pfmainRef "$\<smtp_bind_address\>"
+ syntax match pfmainRef "$\<smtp_bind_address6\>"
++syntax match pfmainRef "$\<smtp_body_checks\>"
+ syntax match pfmainRef "$\<smtp_cname_overrides_servername\>"
+ syntax match pfmainRef "$\<smtp_connect_timeout\>"
+ syntax match pfmainRef "$\<smtp_connection_cache_destinations\>"
+@@ -801,25 +1188,35 @@
+ syntax match pfmainRef "$\<smtp_destination_recipient_limit\>"
+ syntax match pfmainRef "$\<smtp_discard_ehlo_keyword_address_maps\>"
+ syntax match pfmainRef "$\<smtp_discard_ehlo_keywords\>"
++syntax match pfmainRef "$\<smtp_dns_resolver_options\>"
+ syntax match pfmainRef "$\<smtp_enforce_tls\>"
+ syntax match pfmainRef "$\<smtp_fallback_relay\>"
+ syntax match pfmainRef "$\<smtp_generic_maps\>"
++syntax match pfmainRef "$\<smtp_header_checks\>"
+ syntax match pfmainRef "$\<smtp_helo_name\>"
+ syntax match pfmainRef "$\<smtp_helo_timeout\>"
+ syntax match pfmainRef "$\<smtp_host_lookup\>"
+ syntax match pfmainRef "$\<smtp_line_length_limit\>"
+ syntax match pfmainRef "$\<smtp_mail_timeout\>"
++syntax match pfmainRef "$\<smtp_mime_header_checks\>"
+ syntax match pfmainRef "$\<smtp_mx_address_limit\>"
+ syntax match pfmainRef "$\<smtp_mx_session_limit\>"
++syntax match pfmainRef "$\<smtp_nested_header_checks\>"
+ syntax match pfmainRef "$\<smtp_never_send_ehlo\>"
+ syntax match pfmainRef "$\<smtp_pix_workaround_delay_time\>"
++syntax match pfmainRef "$\<smtp_pix_workaround_maps\>"
+ syntax match pfmainRef "$\<smtp_pix_workaround_threshold_time\>"
++syntax match pfmainRef "$\<smtp_pix_workarounds\>"
+ syntax match pfmainRef "$\<smtp_quit_timeout\>"
+ syntax match pfmainRef "$\<smtp_quote_rfc821_envelope\>"
+ syntax match pfmainRef "$\<smtp_randomize_addresses\>"
+ syntax match pfmainRef "$\<smtp_rcpt_timeout\>"
++syntax match pfmainRef "$\<smtp_reply_filter\>"
+ syntax match pfmainRef "$\<smtp_rset_timeout\>"
++syntax match pfmainRef "$\<smtp_sasl_auth_cache_name\>"
++syntax match pfmainRef "$\<smtp_sasl_auth_cache_time\>"
+ syntax match pfmainRef "$\<smtp_sasl_auth_enable\>"
++syntax match pfmainRef "$\<smtp_sasl_auth_soft_bounce\>"
+ syntax match pfmainRef "$\<smtp_sasl_mechanism_filter\>"
+ syntax match pfmainRef "$\<smtp_sasl_password_maps\>"
+ syntax match pfmainRef "$\<smtp_sasl_path\>"
+@@ -834,18 +1231,33 @@
+ syntax match pfmainRef "$\<smtp_starttls_timeout\>"
+ syntax match pfmainRef "$\<smtp_tls_CAfile\>"
+ syntax match pfmainRef "$\<smtp_tls_CApath\>"
++syntax match pfmainRef "$\<smtp_tls_block_early_mail_reply\>"
+ syntax match pfmainRef "$\<smtp_tls_cert_file\>"
+ syntax match pfmainRef "$\<smtp_tls_cipherlist\>"
++syntax match pfmainRef "$\<smtp_tls_ciphers\>"
+ syntax match pfmainRef "$\<smtp_tls_dcert_file\>"
+ syntax match pfmainRef "$\<smtp_tls_dkey_file\>"
++syntax match pfmainRef "$\<smtp_tls_eccert_file\>"
++syntax match pfmainRef "$\<smtp_tls_eckey_file\>"
+ syntax match pfmainRef "$\<smtp_tls_enforce_peername\>"
++syntax match pfmainRef "$\<smtp_tls_exclude_ciphers\>"
++syntax match pfmainRef "$\<smtp_tls_fingerprint_cert_match\>"
++syntax match pfmainRef "$\<smtp_tls_fingerprint_digest\>"
+ syntax match pfmainRef "$\<smtp_tls_key_file\>"
+ syntax match pfmainRef "$\<smtp_tls_loglevel\>"
++syntax match pfmainRef "$\<smtp_tls_mandatory_ciphers\>"
++syntax match pfmainRef "$\<smtp_tls_mandatory_exclude_ciphers\>"
++syntax match pfmainRef "$\<smtp_tls_mandatory_protocols\>"
+ syntax match pfmainRef "$\<smtp_tls_note_starttls_offer\>"
+ syntax match pfmainRef "$\<smtp_tls_per_site\>"
++syntax match pfmainRef "$\<smtp_tls_policy_maps\>"
++syntax match pfmainRef "$\<smtp_tls_protocols\>"
+ syntax match pfmainRef "$\<smtp_tls_scert_verifydepth\>"
++syntax match pfmainRef "$\<smtp_tls_secure_cert_match\>"
++syntax match pfmainRef "$\<smtp_tls_security_level\>"
+ syntax match pfmainRef "$\<smtp_tls_session_cache_database\>"
+ syntax match pfmainRef "$\<smtp_tls_session_cache_timeout\>"
++syntax match pfmainRef "$\<smtp_tls_verify_cert_match\>"
+ syntax match pfmainRef "$\<smtp_use_tls\>"
+ syntax match pfmainRef "$\<smtp_xforward_timeout\>"
+ syntax match pfmainRef "$\<smtpd_authorized_verp_clients\>"
+@@ -857,8 +1269,10 @@
+ syntax match pfmainRef "$\<smtpd_client_event_limit_exceptions\>"
+ syntax match pfmainRef "$\<smtpd_client_message_rate_limit\>"
+ syntax match pfmainRef "$\<smtpd_client_new_tls_session_rate_limit\>"
++syntax match pfmainRef "$\<smtpd_client_port_logging\>"
+ syntax match pfmainRef "$\<smtpd_client_recipient_rate_limit\>"
+ syntax match pfmainRef "$\<smtpd_client_restrictions\>"
++syntax match pfmainRef "$\<smtpd_command_filter\>"
+ syntax match pfmainRef "$\<smtpd_data_restrictions\>"
+ syntax match pfmainRef "$\<smtpd_delay_open_until_valid_rcpt\>"
+ syntax match pfmainRef "$\<smtpd_delay_reject\>"
+@@ -875,18 +1289,22 @@
+ syntax match pfmainRef "$\<smtpd_helo_restrictions\>"
+ syntax match pfmainRef "$\<smtpd_history_flush_threshold\>"
+ syntax match pfmainRef "$\<smtpd_junk_command_limit\>"
++syntax match pfmainRef "$\<smtpd_milters\>"
+ syntax match pfmainRef "$\<smtpd_noop_commands\>"
+ syntax match pfmainRef "$\<smtpd_null_access_lookup_key\>"
+ syntax match pfmainRef "$\<smtpd_peername_lookup\>"
++syntax match pfmainRef "$\<smtpd_per_record_deadline\>"
+ syntax match pfmainRef "$\<smtpd_policy_service_max_idle\>"
+ syntax match pfmainRef "$\<smtpd_policy_service_max_ttl\>"
+ syntax match pfmainRef "$\<smtpd_policy_service_timeout\>"
+ syntax match pfmainRef "$\<smtpd_proxy_ehlo\>"
+ syntax match pfmainRef "$\<smtpd_proxy_filter\>"
++syntax match pfmainRef "$\<smtpd_proxy_options\>"
+ syntax match pfmainRef "$\<smtpd_proxy_timeout\>"
+ syntax match pfmainRef "$\<smtpd_recipient_limit\>"
+ syntax match pfmainRef "$\<smtpd_recipient_overshoot_limit\>"
+ syntax match pfmainRef "$\<smtpd_recipient_restrictions\>"
++syntax match pfmainRef "$\<smtpd_reject_footer\>"
+ syntax match pfmainRef "$\<smtpd_reject_unlisted_recipient\>"
+ syntax match pfmainRef "$\<smtpd_reject_unlisted_sender\>"
+ syntax match pfmainRef "$\<smtpd_restriction_classes\>"
+@@ -900,59 +1318,142 @@
+ syntax match pfmainRef "$\<smtpd_sasl_type\>"
+ syntax match pfmainRef "$\<smtpd_sender_login_maps\>"
+ syntax match pfmainRef "$\<smtpd_sender_restrictions\>"
++syntax match pfmainRef "$\<smtpd_service_name\>"
+ syntax match pfmainRef "$\<smtpd_soft_error_limit\>"
+ syntax match pfmainRef "$\<smtpd_starttls_timeout\>"
+ syntax match pfmainRef "$\<smtpd_timeout\>"
+ syntax match pfmainRef "$\<smtpd_tls_CAfile\>"
+ syntax match pfmainRef "$\<smtpd_tls_CApath\>"
++syntax match pfmainRef "$\<smtpd_tls_always_issue_session_ids\>"
+ syntax match pfmainRef "$\<smtpd_tls_ask_ccert\>"
+ syntax match pfmainRef "$\<smtpd_tls_auth_only\>"
+ syntax match pfmainRef "$\<smtpd_tls_ccert_verifydepth\>"
+ syntax match pfmainRef "$\<smtpd_tls_cert_file\>"
+ syntax match pfmainRef "$\<smtpd_tls_cipherlist\>"
++syntax match pfmainRef "$\<smtpd_tls_ciphers\>"
+ syntax match pfmainRef "$\<smtpd_tls_dcert_file\>"
+ syntax match pfmainRef "$\<smtpd_tls_dh1024_param_file\>"
+ syntax match pfmainRef "$\<smtpd_tls_dh512_param_file\>"
+ syntax match pfmainRef "$\<smtpd_tls_dkey_file\>"
++syntax match pfmainRef "$\<smtpd_tls_eccert_file\>"
++syntax match pfmainRef "$\<smtpd_tls_eckey_file\>"
++syntax match pfmainRef "$\<smtpd_tls_eecdh_grade\>"
++syntax match pfmainRef "$\<smtpd_tls_exclude_ciphers\>"
++syntax match pfmainRef "$\<smtpd_tls_fingerprint_digest\>"
+ syntax match pfmainRef "$\<smtpd_tls_key_file\>"
+ syntax match pfmainRef "$\<smtpd_tls_loglevel\>"
++syntax match pfmainRef "$\<smtpd_tls_mandatory_ciphers\>"
++syntax match pfmainRef "$\<smtpd_tls_mandatory_exclude_ciphers\>"
++syntax match pfmainRef "$\<smtpd_tls_mandatory_protocols\>"
++syntax match pfmainRef "$\<smtpd_tls_protocols\>"
+ syntax match pfmainRef "$\<smtpd_tls_received_header\>"
+ syntax match pfmainRef "$\<smtpd_tls_req_ccert\>"
++syntax match pfmainRef "$\<smtpd_tls_security_level\>"
+ syntax match pfmainRef "$\<smtpd_tls_session_cache_database\>"
+ syntax match pfmainRef "$\<smtpd_tls_session_cache_timeout\>"
+ syntax match pfmainRef "$\<smtpd_tls_wrappermode\>"
+ syntax match pfmainRef "$\<smtpd_use_tls\>"
+ syntax match pfmainRef "$\<soft_bounce\>"
+ syntax match pfmainRef "$\<stale_lock_time\>"
++syntax match pfmainRef "$\<stress\>"
+ syntax match pfmainRef "$\<strict_7bit_headers\>"
+ syntax match pfmainRef "$\<strict_8bitmime\>"
+ syntax match pfmainRef "$\<strict_8bitmime_body\>"
+ syntax match pfmainRef "$\<strict_mime_encoding_domain\>"
+ syntax match pfmainRef "$\<strict_rfc821_envelopes\>"
++syntax match pfmainRef "$\<strict_7bit_headers\>"
++syntax match pfmainRef "$\<strict_8bitmime\>"
++syntax match pfmainRef "$\<strict_8bitmime_body\>"
++syntax match pfmainRef "$\<strict_mailbox_ownership\>"
++syntax match pfmainRef "$\<strict_mime_encoding_domain\>"
++syntax match pfmainRef "$\<strict_rfc821_envelopes\>"
+ syntax match pfmainRef "$\<sun_mailtool_compatibility\>"
+ syntax match pfmainRef "$\<swap_bangpath\>"
+ syntax match pfmainRef "$\<syslog_facility\>"
+ syntax match pfmainRef "$\<syslog_name\>"
++syntax match pfmainRef "$\<tcp_windowsize\>"
++syntax match pfmainRef "$\<tls_append_default_CA\>"
+ syntax match pfmainRef "$\<tls_daemon_random_bytes\>"
++syntax match pfmainRef "$\<tls_disable_workarounds\>"
++syntax match pfmainRef "$\<tls_eecdh_strong_curve\>"
++syntax match pfmainRef "$\<tls_eecdh_ultra_curve\>"
++syntax match pfmainRef "$\<tls_export_cipherlist\>"
++syntax match pfmainRef "$\<tls_high_cipherlist\>"
++syntax match pfmainRef "$\<tls_low_cipherlist\>"
++syntax match pfmainRef "$\<tls_medium_cipherlist\>"
++syntax match pfmainRef "$\<tls_null_cipherlist\>"
++syntax match pfmainRef "$\<tls_preempt_cipherlist\>"
+ syntax match pfmainRef "$\<tls_random_bytes\>"
+ syntax match pfmainRef "$\<tls_random_exchange_name\>"
+ syntax match pfmainRef "$\<tls_random_prng_update_period\>"
+ syntax match pfmainRef "$\<tls_random_reseed_period\>"
+ syntax match pfmainRef "$\<tls_random_source\>"
++syntax match pfmainRef "$\<tlsproxy_enforce_tls\>"
++syntax match pfmainRef "$\<tlsproxy_service_name\>"
++syntax match pfmainRef "$\<tlsproxy_tls_CAfile\>"
++syntax match pfmainRef "$\<tlsproxy_tls_CApath\>"
++syntax match pfmainRef "$\<tlsproxy_tls_always_issue_session_ids\>"
++syntax match pfmainRef "$\<tlsproxy_tls_ask_ccert\>"
++syntax match pfmainRef "$\<tlsproxy_tls_ccert_verifydepth\>"
++syntax match pfmainRef "$\<tlsproxy_tls_cert_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_ciphers\>"
++syntax match pfmainRef "$\<tlsproxy_tls_dcert_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_dh1024_param_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_dh512_param_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_dkey_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_eccert_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_eckey_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_eecdh_grade\>"
++syntax match pfmainRef "$\<tlsproxy_tls_exclude_ciphers\>"
++syntax match pfmainRef "$\<tlsproxy_tls_fingerprint_digest\>"
++syntax match pfmainRef "$\<tlsproxy_tls_key_file\>"
++syntax match pfmainRef "$\<tlsproxy_tls_loglevel\>"
++syntax match pfmainRef "$\<tlsproxy_tls_mandatory_ciphers\>"
++syntax match pfmainRef "$\<tlsproxy_tls_mandatory_exclude_ciphers\>"
++syntax match pfmainRef "$\<tlsproxy_tls_mandatory_protocols\>"
++syntax match pfmainRef "$\<tlsproxy_tls_protocols\>"
++syntax match pfmainRef "$\<tlsproxy_tls_req_ccert\>"
++syntax match pfmainRef "$\<tlsproxy_tls_security_level\>"
++syntax match pfmainRef "$\<tlsproxy_tls_session_cache_timeout\>"
++syntax match pfmainRef "$\<tlsproxy_use_tls\>"
++syntax match pfmainRef "$\<tlsproxy_watchdog_timeout\>"
+ syntax match pfmainRef "$\<trace_service_name\>"
++syntax match pfmainRef "$\<transport_delivery_slot_cost\>"
++syntax match pfmainRef "$\<transport_delivery_slot_discount\>"
++syntax match pfmainRef "$\<transport_delivery_slot_loan\>"
++syntax match pfmainRef "$\<transport_destination_concurrency_failed_cohort_limit\>"
++syntax match pfmainRef "$\<transport_destination_concurrency_limit\>"
++syntax match pfmainRef "$\<transport_destination_concurrency_negative_feedback\>"
++syntax match pfmainRef "$\<transport_destination_concurrency_positive_feedback\>"
++syntax match pfmainRef "$\<transport_destination_rate_delay\>"
++syntax match pfmainRef "$\<transport_destination_recipient_limit\>"
++syntax match pfmainRef "$\<transport_extra_recipient_limit\>"
++syntax match pfmainRef "$\<transport_initial_destination_concurrency\>"
+ syntax match pfmainRef "$\<transport_maps\>"
++syntax match pfmainRef "$\<transport_minimum_delivery_slots\>"
++syntax match pfmainRef "$\<transport_recipient_limit\>"
++syntax match pfmainRef "$\<transport_recipient_refill_delay\>"
++syntax match pfmainRef "$\<transport_recipient_refill_limit\>"
+ syntax match pfmainRef "$\<transport_retry_time\>"
+ syntax match pfmainRef "$\<trigger_timeout\>"
+ syntax match pfmainRef "$\<undisclosed_recipients_header\>"
+ syntax match pfmainRef "$\<unknown_address_reject_code\>"
++syntax match pfmainRef "$\<unknown_address_tempfail_action\>"
+ syntax match pfmainRef "$\<unknown_client_reject_code\>"
++syntax match pfmainRef "$\<unknown_helo_hostname_tempfail_action\>"
+ syntax match pfmainRef "$\<unknown_hostname_reject_code\>"
+ syntax match pfmainRef "$\<unknown_local_recipient_reject_code\>"
+ syntax match pfmainRef "$\<unknown_relay_recipient_reject_code\>"
+ syntax match pfmainRef "$\<unknown_virtual_alias_reject_code\>"
+ syntax match pfmainRef "$\<unknown_virtual_mailbox_reject_code\>"
++syntax match pfmainRef "$\<unverified_recipient_defer_code\>"
+ syntax match pfmainRef "$\<unverified_recipient_reject_code\>"
++syntax match pfmainRef "$\<unverified_recipient_reject_reason\>"
++syntax match pfmainRef "$\<unverified_recipient_tempfail_action\>"
++syntax match pfmainRef "$\<unverified_sender_defer_code\>"
+ syntax match pfmainRef "$\<unverified_sender_reject_code\>"
++syntax match pfmainRef "$\<unverified_sender_reject_reason\>"
++syntax match pfmainRef "$\<unverified_sender_tempfail_action\>"
+ syntax match pfmainRef "$\<verp_delimiter_filter\>"
+ syntax match pfmainRef "$\<virtual_alias_domains\>"
+ syntax match pfmainRef "$\<virtual_alias_expansion_limit\>"
+@@ -969,6 +1470,7 @@
+ syntax match pfmainRef "$\<virtual_minimum_uid\>"
+ syntax match pfmainRef "$\<virtual_transport\>"
+ syntax match pfmainRef "$\<virtual_uid_maps\>"
++
+ syntax keyword pfmainWord all
+ syntax keyword pfmainWord check_address_map
+ syntax keyword pfmainWord check_ccert_access
+@@ -987,17 +1489,29 @@
+ syntax keyword pfmainWord check_sender_mx_access
+ syntax keyword pfmainWord check_sender_ns_access
+ syntax keyword pfmainWord class
++syntax keyword pfmainWord client_address
++syntax keyword pfmainWord client_port
+ syntax keyword pfmainWord defer_if_permit
+ syntax keyword pfmainWord defer_if_reject
+ syntax keyword pfmainWord dns
++syntax keyword pfmainWord drop
++syntax keyword pfmainWord dunno
++syntax keyword pfmainWord enforce
+ syntax keyword pfmainWord envelope_recipient
+ syntax keyword pfmainWord envelope_sender
++syntax keyword pfmainWord export
+ syntax keyword pfmainWord header_recipient
+ syntax keyword pfmainWord header_sender
++syntax keyword pfmainWord high
+ syntax keyword pfmainWord host
++syntax keyword pfmainWord ignore
+ syntax keyword pfmainWord ipv4
+ syntax keyword pfmainWord ipv6
++syntax keyword pfmainWord localtime
++syntax keyword pfmainWord low
++syntax keyword pfmainWord medium
+ syntax keyword pfmainWord native
++syntax keyword pfmainWord null
+ syntax keyword pfmainWord permit
+ syntax keyword pfmainWord permit_auth_destination
+ syntax keyword pfmainWord permit_inet_interfaces
+@@ -1008,6 +1522,7 @@
+ syntax keyword pfmainWord permit_tls_all_clientcerts
+ syntax keyword pfmainWord permit_tls_clientcerts
+ syntax keyword pfmainWord reject
++syntax keyword pfmainWord reject_authenticated_sender_login_mismatch
+ syntax keyword pfmainWord reject_invalid_helo_hostname
+ syntax keyword pfmainWord reject_invalid_hostname
+ syntax keyword pfmainWord reject_maps_rbl
+@@ -1041,8 +1556,23 @@
+ syntax keyword pfmainWord reject_unverified_sender
+ syntax keyword pfmainWord sleep
+ syntax keyword pfmainWord smtpd_access_maps
++syntax keyword pfmainWord server_name
++syntax keyword pfmainWord speed_adjust
+ syntax keyword pfmainWord subnet
+ syntax keyword pfmainWord warn_if_reject
++syntax keyword pfmainWord CRYPTOPRO_TLSEXT_BUG
++syntax keyword pfmainWord DONT_INSERT_EMPTY_FRAGMENTS
++syntax keyword pfmainWord LEGACY_SERVER_CONNECT
++syntax keyword pfmainWord MICROSOFT_BIG_SSLV3_BUFFER
++syntax keyword pfmainWord MICROSOFT_SESS_ID_BUG
++syntax keyword pfmainWord MSIE_SSLV2_RSA_PADDING
++syntax keyword pfmainWord NETSCAPE_CHALLENGE_BUG
++syntax keyword pfmainWord NETSCAPE_REUSE_CIPHER_CHANGE_BUG
++syntax keyword pfmainWord SSLEAY_080_CLIENT_DH_BUG
++syntax keyword pfmainWord SSLREF2_REUSE_CERT_TYPE_BUG
++syntax keyword pfmainWord TLS_BLOCK_PADDING_BUG
++syntax keyword pfmainWord TLS_D5_BUG
++syntax keyword pfmainWord TLS_ROLLBACK_BUG
+ 
+ syntax keyword pfmainDict	btree cidr environ hash nis pcre proxy regexp sdbm sdbm static tcp unix
+ syntax keyword pfmainQueueDir	incoming active deferred corrupt hold
+diff -Naur vim73.orig/runtime/syntax/php.vim vim73/runtime/syntax/php.vim
+--- vim73.orig/runtime/syntax/php.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/php.vim	2013-06-07 17:07:25.108936980 +0000
+@@ -1,11 +1,10 @@
+ " Vim syntax file
+ " Language: php PHP 3/4/5
+-" Maintainer: Peter Hodge <toomuchphp-vim@yahoo.com>
+-" Last Change:  June 9, 2006
+-" URL: http://www.vim.org/scripts/script.php?script_id=1571
+-"
+-" Former Maintainer:  Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+-" Former URL: http://svn.debian.org/wsvn/pkg-vim/trunk/runtime/syntax/php.vim?op=file&rev=0&sc=0
++" Maintainer: Jason Woofenden <jason@jasonwoof.com>
++" Last Change: Dec 11, 2012
++" URL: https://gitorious.org/jasonwoof/vim-syntax/blobs/master/php.vim
++" Former Maintainers: Peter Hodge <toomuchphp-vim@yahoo.com>
++"         Debian VIM Maintainers <pkg-vim-maintainers@lists.alioth.debian.org>
+ "
+ " Note: If you are using a colour terminal with dark background, you will probably find
+ "       the 'elflord' colorscheme is much better for PHP's syntax than the default
+@@ -55,14 +54,6 @@
+ "        the string would be highlighted as an error, what is incorrect.
+ "    ii) Same problem if you are setting php_folding = 2 with a closing
+ "        } inside an string on the first line of this string.
+-"
+-"  - A double-quoted string like this:
+-"      "$foo->someVar->someOtherVar->bar"
+-"    will highight '->someOtherVar->bar' as though they will be parsed
+-"    as object member variables, but PHP only recognizes the first
+-"    object member variable ($foo->someVar).
+-"
+-"
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -119,6 +110,10 @@
+   syn cluster phpAddStrings add=@htmlTop
+ endif
+ 
++" make sure we can use \ at the begining of the line to do a continuation
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case match
+ 
+ " Env Variables
+@@ -132,7 +127,7 @@
+ 
+ syn case ignore
+ 
+-syn keyword phpConstant  __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__  contained
++syn keyword phpConstant  __LINE__ __FILE__ __FUNCTION__ __METHOD__ __CLASS__ __DIR__ __NAMESPACE__  contained
+ 
+ 
+ " Function and Methods ripped from php_manual_de.tar.gz Jan 2003
+@@ -187,6 +182,7 @@
+ syn keyword phpFunctions  ingres_autocommit ingres_close ingres_commit ingres_connect ingres_fetch_array ingres_fetch_object ingres_fetch_row ingres_field_length ingres_field_name ingres_field_nullable ingres_field_precision ingres_field_scale ingres_field_type ingres_num_fields ingres_num_rows ingres_pconnect ingres_query ingres_rollback  contained
+ syn keyword phpFunctions  ircg_channel_mode ircg_disconnect ircg_fetch_error_msg ircg_get_username ircg_html_encode ircg_ignore_add ircg_ignore_del ircg_is_conn_alive ircg_join ircg_kick ircg_lookup_format_messages ircg_msg ircg_nick ircg_nickname_escape ircg_nickname_unescape ircg_notice ircg_part ircg_pconnect ircg_register_format_messages ircg_set_current ircg_set_file ircg_set_on_die ircg_topic ircg_whois  contained
+ syn keyword phpFunctions  java_last_exception_clear java_last_exception_get contained
++syn keyword phpFunctions  json_decode json_encode json_last_error contained
+ syn keyword phpFunctions  ldap_8859_to_t61 ldap_add ldap_bind ldap_close ldap_compare ldap_connect ldap_count_entries ldap_delete ldap_dn2ufn ldap_err2str ldap_errno ldap_error ldap_explode_dn ldap_first_attribute ldap_first_entry ldap_first_reference ldap_free_result ldap_get_attributes ldap_get_dn ldap_get_entries ldap_get_option ldap_get_values_len ldap_get_values ldap_list ldap_mod_add ldap_mod_del ldap_mod_replace ldap_modify ldap_next_attribute ldap_next_entry ldap_next_reference ldap_parse_reference ldap_parse_result ldap_read ldap_rename ldap_search ldap_set_option ldap_set_rebind_proc ldap_sort ldap_start_tls ldap_t61_to_8859 ldap_unbind  contained
+ syn keyword phpFunctions  lzf_compress lzf_decompress lzf_optimized_for contained
+ syn keyword phpFunctions  ezmlm_hash mail contained
+@@ -274,7 +270,7 @@
+ syn keyword phpLabel  case default switch contained
+ 
+ " Statement
+-syn keyword phpStatement  return break continue exit  contained
++syn keyword phpStatement  return break continue exit goto  contained
+ 
+ " Keyword
+ syn keyword phpKeyword  var const contained
+@@ -283,7 +279,7 @@
+ syn keyword phpType bool[ean] int[eger] real double float string array object NULL  contained
+ 
+ " Structure
+-syn keyword phpStructure  extends implements instanceof parent self contained
++syn keyword phpStructure  namespace extends implements instanceof parent self contained
+ 
+ " Operator
+ syn match phpOperator "[-=+%^&|*!.~?:]" contained display
+@@ -303,11 +299,41 @@
+ syn region  phpIdentifierComplex  matchgroup=phpParent start="{\$"rs=e-1 end="}"  contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
+ syn region  phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
+ 
++" Interpolated indentifiers (inside strings)
++	syn match phpBrackets "[][}{]" contained display
++	" errors
++		syn match phpInterpSimpleError "\[[^]]*\]" contained display  " fallback (if nothing else matches)
++		syn match phpInterpSimpleError "->[^a-zA-Z_]" contained display
++		" make sure these stay above the correct DollarCurlies so they don't take priority
++		syn match phpInterpBogusDollarCurley "${[^}]*}" contained display  " fallback (if nothing else matches)
++	syn match phpinterpSimpleBracketsInner "\w\+" contained
++	syn match phpInterpSimpleBrackets "\[\h\w*]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
++	syn match phpInterpSimpleBrackets "\[\d\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
++	syn match phpInterpSimpleBrackets "\[0[xX]\x\+]" contained contains=phpBrackets,phpInterpSimpleBracketsInner
++	syn match phpInterpSimple "\$\h\w*\(\[[^]]*\]\|->\h\w*\)\?" contained contains=phpInterpSimpleBrackets,phpIdentifier,phpInterpSimpleError,phpMethods,phpMemberSelector display
++	syn match phpInterpVarname "\h\w*" contained
++	syn match phpInterpMethodName "\h\w*" contained " default color
++	syn match phpInterpSimpleCurly "\${\h\w*}"  contains=phpInterpVarname contained extend
++	syn region phpInterpDollarCurley1Helper matchgroup=phpParent start="{" end="\[" contains=phpInterpVarname contained
++	syn region phpInterpDollarCurly1 matchgroup=phpParent start="\${\h\w*\["rs=s+1 end="]}" contains=phpInterpDollarCurley1Helper,@phpClConst contained extend
++
++	syn match phpInterpDollarCurley2Helper "{\h\w*->" contains=phpBrackets,phpInterpVarname,phpMemberSelector contained
++
++	syn region phpInterpDollarCurly2 matchgroup=phpParent start="\${\h\w*->"rs=s+1 end="}" contains=phpInterpDollarCurley2Helper,phpInterpMethodName contained
++
++	syn match phpInterpBogusDollarCurley "${\h\w*->}" contained display
++	syn match phpInterpBogusDollarCurley "${\h\w*\[]}" contained display
++
++	syn region phpInterpComplex matchgroup=phpParent start="{\$"rs=e-1 end="}" contains=phpIdentifier,phpMemberSelector,phpVarSelector,phpIdentifierComplexP contained extend
++	syn region phpIdentifierComplexP matchgroup=phpParent start="\[" end="]" contains=@phpClInside contained
++	" define a cluster to get all interpolation syntaxes for double-quoted strings
++	syn cluster phpInterpDouble contains=phpInterpSimple,phpInterpSimpleCurly,phpInterpDollarCurly1,phpInterpDollarCurly2,phpInterpBogusDollarCurley,phpInterpComplex
++
+ " Methoden
+ syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display
+ 
+ " Include
+-syn keyword phpInclude  include require include_once require_once contained
++syn keyword phpInclude  include require include_once require_once use contained
+ 
+ " Peter Hodge - added 'clone' keyword
+ " Define
+@@ -323,10 +349,18 @@
+ " Float
+ syn match phpFloat  "\(-\=\<\d+\|-\=\)\.\d\+\>" contained display
+ 
+-" SpecialChar
+-syn match phpSpecialChar  "\\[abcfnrtyv\\]" contained display
+-syn match phpSpecialChar  "\\\d\{3}"  contained contains=phpOctalError display
+-syn match phpSpecialChar  "\\x\x\{2}" contained display
++" Backslash escapes
++	syn case match
++	" for double quotes and heredoc
++	syn match phpBackslashSequences  "\\[fnrtv\\\"$]" contained display
++	syn match phpBackslashSequences  "\\\d\{1,3}"  contained contains=phpOctalError display
++	syn match phpBackslashSequences  "\\x\x\{1,2}" contained display
++	" additional sequence for double quotes only
++	syn match phpBackslashDoubleQuote "\\[\"]" contained display
++	" for single quotes only
++	syn match phpBackslashSingleQuote "\\[\\']" contained display
++	syn case ignore
++
+ 
+ " Error
+ syn match phpOctalError "[89]"  contained display
+@@ -355,23 +389,32 @@
+ 
+ " String
+ if exists("php_parent_error_open")
+-  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
+-  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained keepend
+-  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend
++  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained keepend
++  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained keepend
++  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings,phpBackslashSingleQuote contained keepend
+ else
+-  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
+-  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpSpecialChar,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
+-  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings contained keepend extend
++  syn region  phpStringDouble matchgroup=None start=+"+ skip=+\\\\\|\\"+ end=+"+  contains=@phpAddStrings,phpBackslashSequences,phpBackslashDoubleQuote,@phpInterpDouble contained extend keepend
++  syn region  phpBacktick matchgroup=None start=+`+ skip=+\\\\\|\\"+ end=+`+  contains=@phpAddStrings,phpIdentifier,phpBackslashSequences,phpIdentifierSimply,phpIdentifierComplex contained extend keepend
++  syn region  phpStringSingle matchgroup=None start=+'+ skip=+\\\\\|\\'+ end=+'+  contains=@phpAddStrings,phpBackslashSingleQuote contained keepend extend
+ endif
+ 
+-" HereDoc
++" HereDoc and NowDoc
+ if version >= 600
+   syn case match
+-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\I\i*\)$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
++
++  " HereDoc
++  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\I\i*\)\2$" end="^\z1\(;\=$\)\@=" contained contains=phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
++" including HTML,JavaScript,SQL even if not enabled via options
++  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
++  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
++  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\(\"\=\)\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)\2$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpBackslashSequences,phpMethodsVar keepend extend
++
++  " NowDoc
++  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\I\i*\)'$" end="^\z1\(;\=$\)\@=" contained keepend extend
+ " including HTML,JavaScript,SQL even if not enabled via options
+-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop,phpIdentifier,phpIdentifierSimply,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
+-  syn region  phpHereDoc  matchgroup=Delimiter start="\(<<<\)\@<=\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript,phpIdentifierSimply,phpIdentifier,phpIdentifierComplex,phpSpecialChar,phpMethodsVar keepend extend
++  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(html\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@="  contained contains=@htmlTop keepend extend
++  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(sql\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@=" contained contains=@sqlTop keepend extend
++  syn region  phpNowDoc  matchgroup=Delimiter start="\(<<<\)\@<='\z(\(\I\i*\)\=\(javascript\)\c\(\i*\)\)'$" end="^\z1\(;\=$\)\@="  contained contains=@htmlJavascript keepend extend
+   syn case ignore
+ endif
+ 
+@@ -388,7 +431,7 @@
+ endif
+ 
+ syn cluster phpClConst  contains=phpFunctions,phpIdentifier,phpConditional,phpRepeat,phpStatement,phpOperator,phpRelation,phpStringSingle,phpStringDouble,phpBacktick,phpNumber,phpFloat,phpKeyword,phpType,phpBoolean,phpStructure,phpMethodsVar,phpConstant,phpCoreConstant,phpException
+-syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc
++syn cluster phpClInside contains=@phpClConst,phpComment,phpLabel,phpParent,phpParentError,phpInclude,phpHereDoc,phpNowDoc
+ syn cluster phpClFunction contains=@phpClInside,phpDefine,phpParentError,phpStorageClass
+ syn cluster phpClTop  contains=@phpClFunction,phpFoldFunction,phpFoldClass,phpFoldInterface,phpFoldTry,phpFoldCatch
+ 
+@@ -451,17 +494,14 @@
+   syn keyword phpStorageClass final global private protected public static  contained
+ endif
+ 
++" TODO: fold on "trait". For now just make sure it gets colored:
++syn keyword phpStructure trait
++
+ " ================================================================
+ " Peter Hodge - June 9, 2006
+ " Some of these changes (highlighting isset/unset/echo etc) are not so
+ " critical, but they make things more colourful. :-)
+ 
+-" corrected highlighting for an escaped '\$' inside a double-quoted string
+-syn match phpSpecialChar  "\\\$"  contained display
+-
+-" highlight object variables inside strings
+-syn match phpMethodsVar "->\h\w*" contained contains=phpMethods,phpMemberSelector display containedin=phpStringDouble
+-
+ " highlight constant E_STRICT
+ syntax case match
+ syntax keyword phpCoreConstant E_STRICT contained
+@@ -612,11 +652,21 @@
+   HiLink   phpType  Type
+   HiLink   phpInclude Include
+   HiLink   phpDefine  Define
+-  HiLink   phpSpecialChar SpecialChar
++  HiLink   phpBackslashSequences SpecialChar
++  HiLink   phpBackslashDoubleQuote SpecialChar
++  HiLink   phpBackslashSingleQuote SpecialChar
+   HiLink   phpParent  Delimiter
++  HiLink   phpBrackets  Delimiter
+   HiLink   phpIdentifierConst Delimiter
+   HiLink   phpParentError Error
+   HiLink   phpOctalError  Error
++  HiLink   phpInterpSimpleError Error
++  HiLink   phpInterpBogusDollarCurley Error
++  HiLink   phpInterpDollarCurly1 Error
++  HiLink   phpInterpDollarCurly2 Error
++  HiLink   phpInterpSimpleBracketsInner String
++  HiLink   phpInterpSimpleCurly Delimiter
++  HiLink   phpInterpVarname Identifier
+   HiLink   phpTodo  Todo
+   HiLink   phpMemberSelector  Structure
+   if exists("php_oldStyle")
+@@ -628,13 +678,13 @@
+   hi  phpIdentifier guifg=DarkGray ctermfg=Brown
+   hi  phpIdentifierSimply guifg=DarkGray ctermfg=Brown
+   else
+-  HiLink  phpIntVar Identifier
+-  HiLink  phpEnvVar Identifier
+-  HiLink  phpOperator Operator
+-  HiLink  phpVarSelector  Operator
+-  HiLink  phpRelation Operator
+-  HiLink  phpIdentifier Identifier
+-  HiLink  phpIdentifierSimply Identifier
++  HiLink   phpIntVar Identifier
++  HiLink   phpEnvVar Identifier
++  HiLink   phpOperator Operator
++  HiLink   phpVarSelector  Operator
++  HiLink   phpRelation Operator
++  HiLink   phpIdentifier Identifier
++  HiLink   phpIdentifierSimply Identifier
+   endif
+ 
+   delcommand HiLink
+@@ -646,4 +696,8 @@
+   unlet main_syntax
+ endif
+ 
++" put cpoptions back the way we found it
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8 sts=2 sw=2 expandtab
+diff -Naur vim73.orig/runtime/syntax/pine.vim vim73/runtime/syntax/pine.vim
+--- vim73.orig/runtime/syntax/pine.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/pine.vim	2013-06-07 17:07:25.175603456 +0000
+@@ -12,9 +12,9 @@
+ endif
+ 
+ if version >= 600
+-  setlocal iskeyword=@,48-57,_,128-167,224-235,-,
++  setlocal iskeyword=@,48-57,_,128-167,224-235,-
+ else
+-  set iskeyword=@,48-57,_,128-167,224-235,-,
++  set iskeyword=@,48-57,_,128-167,224-235,-
+ endif
+ 
+ syn keyword pineConfig addrbook-sort-rule
+diff -Naur vim73.orig/runtime/syntax/po.vim vim73/runtime/syntax/po.vim
+--- vim73.orig/runtime/syntax/po.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/po.vim	2013-06-07 17:07:25.245603256 +0000
+@@ -1,10 +1,10 @@
+ " Vim syntax file
+ " Language:	po (gettext)
+ " Maintainer:	Dwayne Bailey <dwayne@translate.org.za>
+-" Last Change:	2008 Sep 17
++" Last Change:	2012 Apr 30
+ " Contributors: Dwayne Bailey (Most advanced syntax highlighting)
+ "               Leonardo Fontenelle (Spell checking)
+-"               SungHyun Nam <goweol@gmail.com> (Original maintainer)
++"               Nam SungHyun <namsh@kldp.org> (Original maintainer)
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -13,6 +13,8 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ syn sync minlines=10
+ 
+@@ -39,7 +41,7 @@
+                             \ contains=@Spell,poSpecial,poFormat,poHeaderItem,poCommentKDEError,poHeaderUndefined,poPluralKDEError,poMsguniqError,poKDEdesktopFile,poHtml,poAcceleratorStr,poHtmlNot,poVariable
+ 
+ " Header and Copyright
+-syn match     poHeaderItem "\(Project-Id-Version\|Report-Msgid-Bugs-To\|POT-Creation-Date\|PO-Revision-Date\|Last-Translator\|Language-Team\|MIME-Version\|Content-Type\|Content-Transfer-Encoding\|Plural-Forms\|X-Generator\): " contained
++syn match     poHeaderItem "\(Project-Id-Version\|Report-Msgid-Bugs-To\|POT-Creation-Date\|PO-Revision-Date\|Last-Translator\|Language-Team\|Language\|MIME-Version\|Content-Type\|Content-Transfer-Encoding\|Plural-Forms\|X-Generator\): " contained
+ syn match     poHeaderUndefined "\(PACKAGE VERSION\|YEAR-MO-DA HO:MI+ZONE\|FULL NAME <EMAIL@ADDRESS>\|LANGUAGE <LL@li.org>\|CHARSET\|ENCODING\|INTEGER\|EXPRESSION\)" contained
+ syn match     poCopyrightUnset "SOME DESCRIPTIVE TITLE\|FIRST AUTHOR <EMAIL@ADDRESS>, YEAR\|Copyright (C) YEAR Free Software Foundation, Inc\|YEAR THE PACKAGE\'S COPYRIGHT HOLDER\|PACKAGE" contained
+ 
+@@ -132,4 +134,7 @@
+ 
+ let b:current_syntax = "po"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:set ts=8 sts=2 sw=2 noet:
+diff -Naur vim73.orig/runtime/syntax/pod.vim vim73/runtime/syntax/pod.vim
+--- vim73.orig/runtime/syntax/pod.vim	2010-08-10 18:27:29.000000000 +0000
++++ vim73/runtime/syntax/pod.vim	2013-06-07 17:07:25.258936552 +0000
+@@ -1,9 +1,10 @@
+ " Vim syntax file
+-" Language:     Perl POD format
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" Previously:   Scott Bigham <dsb@killerbunnies.org>
+-" URL:          http://github.com/petdance/vim-perl
+-" Last Change:  2009-08-14
++" Language:      Perl POD format
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Previously:    Scott Bigham <dsb@killerbunnies.org>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2013 May 30
+ 
+ " To add embedded POD documentation highlighting to your syntax file, add
+ " the commands:
+@@ -26,7 +27,11 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " POD commands
++syn match podCommand    "^=encoding"  nextgroup=podCmdText contains=@NoSpell
+ syn match podCommand    "^=head[1234]"  nextgroup=podCmdText contains=@NoSpell
+ syn match podCommand    "^=item"        nextgroup=podCmdText contains=@NoSpell
+ syn match podCommand    "^=over"        nextgroup=podOverIndent skipwhite contains=@NoSpell
+@@ -85,6 +90,100 @@
+   delcommand HiLink
+ endif
+ 
++if exists("perl_pod_spellcheck_headings")
++  " Spell-check headings
++  syn clear podCmdText
++  syn match podCmdText    ".*$" contained contains=podFormat
++endif
++
++if exists("perl_pod_formatting")
++  " By default, escapes like C<> are not checked for spelling. Remove B<>
++  " and I<> from the list of escapes.
++  syn clear podFormat
++  syn region podFormat start="[CLF]<[^<]"me=e-1 end=">" oneline contains=podFormat,@NoSpell
++  syn region podFormat start="[CLF]<<\s" end="\s>>" oneline contains=podFormat,@NoSpell
++
++  " Don't spell-check inside E<>, but ensure that the E< itself isn't
++  " marked as a spelling mistake.
++  syn match podFormat   "E<\(\d\+\|\I\i*\)>" contains=podEscape,podEscape2,@NoSpell
++
++  " Z<> is a mock formatting code. Ensure Z<> on its own isn't marked as a
++  " spelling mistake.
++  syn match podFormat   "Z<>" contains=podEscape,podEscape2,@NoSpell
++
++  " These are required so that whatever is *within* B<...>, I<...>, etc. is
++  " spell-checked, but not the B, I, ... itself.
++  syn match podBoldOpen    "B<" contains=@NoSpell
++  syn match podItalicOpen  "I<" contains=@NoSpell
++  syn match podNoSpaceOpen "S<" contains=@NoSpell
++  syn match podIndexOpen   "X<" contains=@NoSpell
++
++  " Same as above but for the << >> syntax.
++  syn match podBoldAlternativeDelimOpen    "B<< " contains=@NoSpell
++  syn match podItalicAlternativeDelimOpen  "I<< " contains=@NoSpell
++  syn match podNoSpaceAlternativeDelimOpen "S<< " contains=@NoSpell
++  syn match podIndexAlternativeDelimOpen   "X<< " contains=@NoSpell
++
++  " Add support for spell checking text inside B<>, I<>, S<> and X<>.
++  syn region podBold start="B<[^<]"me=e end=">" oneline contains=podBoldItalic,podBoldOpen
++  syn region podBoldAlternativeDelim start="B<<\s" end="\s>>" oneline contains=podBoldAlternativeDelimOpen
++
++  syn region podItalic start="I<[^<]"me=e end=">" oneline contains=podItalicBold,podItalicOpen
++  syn region podItalicAlternativeDelim start="I<<\s" end="\s>>" oneline contains=podItalicAlternativeDelimOpen
++
++  " Nested bold/italic and vice-versa
++  syn region podBoldItalic contained start="I<[^<]"me=e end=">" oneline
++  syn region podItalicBold contained start="B<[^<]"me=e end=">" oneline
++
++  syn region podNoSpace start="S<[^<]"ms=s-2 end=">"me=e oneline contains=podNoSpaceOpen
++  syn region podNoSpaceAlternativeDelim start="S<<\s"ms=s-2 end="\s>>"me=e oneline contains=podNoSpaceAlternativeDelimOpen
++
++  syn region podIndex start="X<[^<]"ms=s-2 end=">"me=e oneline contains=podIndexOpen
++  syn region podIndexAlternativeDelim start="X<<\s"ms=s-2 end="\s>>"me=e oneline contains=podIndexAlternativeDelimOpen
++
++  " Restore this (otherwise B<> is shown as bold inside verbatim)
++  syn match podVerbatimLine	"^\s.*$" contains=@NoSpell
++
++  " Ensure formatted text can be displayed in headings and items
++  syn clear podCmdText
++
++  if exists("perl_pod_spellcheck_headings")
++    syn match podCmdText ".*$" contained contains=podFormat,podBold,
++          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
++          \podBoldOpen,podItalicOpen,podBoldAlternativeDelimOpen,
++          \podItalicAlternativeDelimOpen,podNoSpaceOpen
++  else
++    syn match podCmdText ".*$" contained contains=podFormat,podBold,
++          \podBoldAlternativeDelim,podItalic,podItalicAlternativeDelim,
++          \@NoSpell
++  endif
++
++  " Specify how to display these
++  hi def podBold term=bold cterm=bold gui=bold
++
++  hi link podBoldAlternativeDelim podBold
++  hi link podBoldAlternativeDelimOpen podBold
++  hi link podBoldOpen podBold
++
++  hi link podNoSpace                 Identifier
++  hi link podNoSpaceAlternativeDelim Identifier
++
++  hi link podIndex                   Identifier
++  hi link podIndexAlternativeDelim   Identifier
++
++  hi def podItalic term=italic cterm=italic gui=italic
++
++  hi link podItalicAlternativeDelim podItalic
++  hi link podItalicAlternativeDelimOpen podItalic
++  hi link podItalicOpen podItalic
++
++  hi def podBoldItalic term=italic,bold cterm=italic,bold gui=italic,bold
++  hi def podItalicBold term=italic,bold cterm=italic,bold gui=italic,bold
++endif
++
+ let b:current_syntax = "pod"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/pov.vim vim73/runtime/syntax/pov.vim
+--- vim73.orig/runtime/syntax/pov.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/pov.vim	2013-06-07 17:07:25.272269847 +0000
+@@ -1,9 +1,7 @@
+ " Vim syntax file
+-" This is a GENERATED FILE. Please always refer to source file at the URI below.
+-" Language: PoV-Ray(tm) 3.5 Scene Description Language
+-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+-" Last Change: 2003 Apr 25
+-" URL: http://physics.muni.cz/~yeti/download/syntax/pov.vim
++" Language: PoV-Ray(tm) 3.7 Scene Description Language
++" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
++" Last Change: 2011-04-23
+ " Required Vim Version: 6.0
+ 
+ " Setup
+@@ -22,20 +20,21 @@
+ 
+ " Top level stuff
+ syn keyword povCommands global_settings
+-syn keyword povObjects array atmosphere background bicubic_patch blob box camera component cone cubic cylinder disc fog height_field isosurface julia_fractal lathe light_group light_source mesh mesh2 object parametric pattern photons plane poly polygon prism quadric quartic rainbow sky_sphere smooth_triangle sor sphere sphere_sweep spline superellipsoid text torus triangle
++syn keyword povObjects array atmosphere background bicubic_patch blob box camera component cone cubic cylinder disc fog height_field isosurface julia_fractal lathe light_group light_source mesh mesh2 object ovus parametric pattern photons plane poly polygon polynomial prism quadric quartic rainbow sky_sphere smooth_triangle sor sphere sphere_sweep spline superellipsoid text torus triangle
+ syn keyword povCSG clipped_by composite contained_by difference intersection merge union
+ syn keyword povAppearance interior material media texture interior_texture texture_list
+ syn keyword povGlobalSettings ambient_light assumed_gamma charset hf_gray_16 irid_wavelength max_intersections max_trace_level number_of_waves radiosity noise_generator
+ syn keyword povTransform inverse matrix rotate scale translate transform
+ 
+ " Descriptors
+-syn keyword povDescriptors finish normal pigment uv_mapping uv_vectors vertex_vectors
+-syn keyword povDescriptors adc_bailout always_sample brightness count error_bound distance_maximum gray_threshold load_file low_error_factor max_sample media minimum_reuse nearest_count normal pretrace_end pretrace_start recursion_limit save_file
+-syn keyword povDescriptors color colour gray rgb rgbt rgbf rgbft red green blue
++syn keyword povDescriptors finish inside_vector normal pigment uv_mapping uv_vectors vertex_vectors
++syn keyword povDescriptors adc_bailout always_sample brightness count error_bound distance_maximum gray_threshold load_file low_error_factor maximum_reuse max_sample media minimum_reuse mm_per_unit nearest_count normal pretrace_end pretrace_start recursion_limit save_file
++syn keyword povDescriptors color colour rgb rgbt rgbf rgbft srgb srgbf srgbt srgbft
++syn match povDescriptors "\<\(red\|green\|blue\|gray\)\>"
+ syn keyword povDescriptors bump_map color_map colour_map image_map material_map pigment_map quick_color quick_colour normal_map texture_map image_pattern pigment_pattern
+-syn keyword povDescriptors ambient brilliance conserve_energy crand diffuse fresnel irid metallic phong phong_size refraction reflection reflection_exponent roughness specular
+-syn keyword povDescriptors cylinder fisheye omnimax orthographic panoramic perspective spherical ultra_wide_angle
+-syn keyword povDescriptors agate average brick boxed bozo bumps cells checker crackle cylindrical dents facets function gradient granite hexagon julia leopard magnet mandel marble onion planar quilted radial ripples slope spherical spiral1 spiral2 spotted tiles tiles2 toroidal waves wood wrinkles
++syn keyword povDescriptors ambient brilliance conserve_energy crand diffuse fresnel irid metallic phong phong_size refraction reflection reflection_exponent roughness specular subsurface
++syn keyword povDescriptors cylinder fisheye mesh_camera omnimax orthographic panoramic perspective spherical ultra_wide_angle
++syn keyword povDescriptors agate aoi average brick boxed bozo bumps cells checker crackle cylindrical dents facets function gradient granite hexagon julia leopard magnet mandel marble onion pavement planar quilted radial ripples slope spherical spiral1 spiral2 spotted square tiles tile2 tiling toroidal triangular waves wood wrinkles
+ syn keyword povDescriptors density_file
+ syn keyword povDescriptors area_light shadowless spotlight parallel
+ syn keyword povDescriptors absorption confidence density emission intervals ratio samples scattering variance
+@@ -46,32 +45,35 @@
+ " Modifiers
+ syn keyword povModifiers caustics dispersion dispersion_samples fade_color fade_colour fade_distance fade_power ior
+ syn keyword povModifiers bounded_by double_illuminate hierarchy hollow no_shadow open smooth sturm threshold water_level
++syn keyword povModifiers importance no_radiosity
+ syn keyword povModifiers hypercomplex max_iteration precision quaternion slice
+ syn keyword povModifiers conic_sweep linear_sweep
+ syn keyword povModifiers flatness type u_steps v_steps
+-syn keyword povModifiers aa_level aa_threshold adaptive falloff jitter looks_like media_attenuation media_interaction method point_at radius tightness
+-syn keyword povModifiers angle aperture blur_samples confidence direction focal_point h_angle location look_at right sky up v_angle variance
+-syn keyword povModifiers all bump_size filter interpolate map_type once slope_map transmit use_alpha use_color use_colour use_index
++syn keyword povModifiers aa_level aa_threshold adaptive area_illumination falloff jitter looks_like media_attenuation media_interaction method point_at radius tightness
++syn keyword povModifiers angle aperture bokeh blur_samples confidence direction focal_point h_angle location look_at right sky up v_angle variance
++syn keyword povModifiers all bump_size gamma interpolate map_type once premultiplied slope_map use_alpha use_color use_colour use_index
++syn match povModifiers "\<\(filter\|transmit\)\>"
+ syn keyword povModifiers black_hole agate_turb brick_size control0 control1 cubic_wave density_map flip frequency interpolate inverse lambda metric mortar octaves offset omega phase poly_wave ramp_wave repeat scallop_wave sine_wave size strength triangle_wave thickness turbulence turb_depth type warp
+ syn keyword povModifiers eccentricity extinction
+ syn keyword povModifiers arc_angle falloff_angle width
+ syn keyword povModifiers accuracy all_intersections altitude autostop circular collect coords cutaway_textures dist_exp expand_thresholds exponent exterior gather global_lights major_radius max_trace no_bump_scale no_image no_reflection orient orientation pass_through precompute projected_through range_divider solid spacing split_union tolerance
+ 
+ " Words not marked `reserved' in documentation, but...
+-syn keyword povBMPType alpha gif iff jpeg pgm png pot ppm sys tga tiff contained
++syn keyword povBMPType alpha exr gif hdr iff jpeg pgm png pot ppm sys tga tiff
+ syn keyword povFontType ttf contained
+ syn keyword povDensityType df3 contained
+ syn keyword povCharset ascii utf8 contained
+ 
+ " Math functions on floats, vectors and strings
+-syn keyword povFunctions abs acos acosh asc asin asinh atan atan2 atanh ceil cos cosh defined degrees dimensions dimension_size div exp file_exists floor int internal ln log max min mod pow radians rand seed select sin sinh sqrt strcmp strlen tan tanh val vdot vlength vstr vturbulence
++syn keyword povFunctions abs acos acosh asc asin asinh atan atan2 atanh bitwise_and bitwise_or bitwise_xor ceil cos cosh defined degrees dimensions dimension_size div exp file_exists floor inside int internal ln log max min mod pow prod radians rand seed select sin sinh sqrt strcmp strlen sum tan tanh val vdot vlength vstr vturbulence
+ syn keyword povFunctions min_extent max_extent trace vcross vrotate vaxis_rotate vnormalize vturbulence
+-syn keyword povFunctions chr concat substr str strupr strlwr
++syn keyword povFunctions chr concat datetime now substr str strupr strlwr
+ syn keyword povJuliaFunctions acosh asinh atan cosh cube pwr reciprocal sinh sqr tanh
+ 
+ " Specialities
+-syn keyword povConsts clock clock_delta clock_on final_clock final_frame frame_number initial_clock initial_frame image_width image_height false no off on pi t true u v version x y yes z
+-syn match povDotItem "\.\@<=\(blue\|green\|filter\|red\|transmit\|t\|u\|v\|x\|y\|z\)\>" display
++syn keyword povConsts clock clock_delta clock_on final_clock final_frame frame_number initial_clock initial_frame input_file_name image_width image_height false no off on pi true version yes
++syn match povConsts "\<[tuvxyz]\>"
++syn match povDotItem "\.\@<=\(blue\|green\|gray\|filter\|red\|transmit\|hf\|t\|u\|v\|x\|y\|z\)\>" display
+ 
+ " Comments
+ syn region povComment start="/\*" end="\*/" contains=povTodo,povComment
+@@ -83,16 +85,18 @@
+ syn cluster povPRIVATE add=povTodo
+ 
+ " Language directives
+-syn match povConditionalDir "#\s*\(else\|end\|if\|ifdef\|ifndef\|switch\|while\)\>"
++syn match povConditionalDir "#\s*\(else\|end\|for\|if\|ifdef\|ifndef\|switch\|while\)\>"
+ syn match povLabelDir "#\s*\(break\|case\|default\|range\)\>"
+-syn match povDeclareDir "#\s*\(declare\|default\|local\|macro\|undef\|version\)\>"
++syn match povDeclareDir "#\s*\(declare\|default\|local\|macro\|undef\|version\)\>" nextgroup=povDeclareOption skipwhite
++syn keyword povDeclareOption deprecated once contained nextgroup=povDeclareOption skipwhite
+ syn match povIncludeDir "#\s*include\>"
+ syn match povFileDir "#\s*\(fclose\|fopen\|read\|write\)\>"
++syn keyword povFileDataType uint8 sint8 unit16be uint16le sint16be sint16le sint32le sint32be
+ syn match povMessageDir "#\s*\(debug\|error\|render\|statistics\|warning\)\>"
+ syn region povFileOpen start="#\s*fopen\>" skip=+"[^"]*"+ matchgroup=povOpenType end="\<\(read\|write\|append\)\>" contains=ALLBUT,PovParenError,PovBraceError,@PovPRIVATE transparent keepend
+ 
+ " Literal strings
+-syn match povSpecialChar "\\\d\d\d\|\\." contained
++syn match povSpecialChar "\\u\x\{4}\|\\\d\d\d\|\\." contained
+ syn region povString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=povSpecialChar oneline
+ syn cluster povPRIVATE add=povSpecialChar
+ 
+@@ -112,7 +116,7 @@
+ hi def link povString String
+ hi def link povFileOpen Constant
+ hi def link povConsts Constant
+-hi def link povDotItem Constant
++hi def link povDotItem povSpecial
+ hi def link povBMPType povSpecial
+ hi def link povCharset povSpecial
+ hi def link povDensityType povSpecial
+@@ -123,8 +127,10 @@
+ hi def link povConditionalDir PreProc
+ hi def link povLabelDir PreProc
+ hi def link povDeclareDir Define
++hi def link povDeclareOption Define
+ hi def link povIncludeDir Include
+ hi def link povFileDir PreProc
++hi def link povFileDataType Special
+ hi def link povMessageDir Debug
+ hi def link povAppearance povDescriptors
+ hi def link povObjects povDescriptors
+diff -Naur vim73.orig/runtime/syntax/povini.vim vim73/runtime/syntax/povini.vim
+--- vim73.orig/runtime/syntax/povini.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/povini.vim	2013-06-07 17:07:25.295603114 +0000
+@@ -1,9 +1,7 @@
+ " Vim syntax file
+-" This is a GENERATED FILE. Please always refer to source file at the URI below.
+-" Language: PoV-Ray(tm) 3.5 configuration/initialization files
+-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+-" Last Change: 2002-06-01
+-" URL: http://physics.muni.cz/~yeti/download/syntax/povini.vim
++" Language: PoV-Ray(tm) 3.7 configuration/initialization files
++" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
++" Last Change: 2011-04-24
+ " Required Vim Version: 6.0
+ 
+ " Setup
+@@ -25,15 +23,17 @@
+ syn match poviniLabel "^.\{-1,}\ze=" transparent contains=poviniKeyword nextgroup=poviniBool,poviniNumber
+ syn keyword poviniBool On Off True False Yes No
+ syn match poviniNumber "\<\d*\.\=\d\+\>"
+-syn keyword poviniKeyword Clock Initial_Frame Final_Frame Initial_Clock Final_Clock Subset_Start_Frame Subset_End_Frame Cyclic_Animation Field_Render Odd_Field
++syn keyword poviniKeyword Clock Initial_Frame Final_Frame Frame_Final Frame_Step Initial_Clock Final_Clock Subset_Start_Frame Subset_End_Frame Cyclic_Animation Clockless_Animation Real_Time_Raytracing Field_Render Odd_Field Work_Threads
+ syn keyword poviniKeyword Width Height Start_Column Start_Row End_Column End_Row Test_Abort Test_Abort_Count Continue_Trace Create_Ini
+-syn keyword poviniKeyword Display Video_Mode Palette Display_Gamma Pause_When_Done Verbose Draw_Vistas Preview_Start_Size Preview_End_Size
+-syn keyword poviniKeyword Output_to_File Output_File_Type Output_Alpha Bits_Per_Color Output_File_Name Buffer_Output Buffer_Size
++syn keyword poviniKeyword Display Video_Mode Palette Display_Gamma Pause_When_Done Verbose Draw_Vistas Preview_Start_Size Preview_End_Size Render_Block_Size Render_Block_Step Render_Pattern Max_Image_Buffer_Memory
++syn keyword poviniKeyword Output_to_File Output_File_Type Output_Alpha Bits_Per_Color Output_File_Name Buffer_Output Buffer_Size Dither Dither_Method File_Gamma
++syn keyword poviniKeyword BSP_Base BSP_Child BSP_Isect BSP_Max BSP_Miss
+ syn keyword poviniKeyword Histogram_Type Histogram_Grid_Size Histogram_Name
+ syn keyword poviniKeyword Input_File_Name Include_Header Library_Path Version
+ syn keyword poviniKeyword Debug_Console Fatal_Console Render_Console Statistic_Console Warning_Console All_Console Debug_File Fatal_File Render_File Statistic_File Warning_File All_File Warning_Level
+-syn keyword poviniKeyword Quality Radiosity Bounding Bounding_Threshold Light_Buffer Vista_Buffer Remove_Bounds Split_Unions Antialias Sampling_Method Antialias_Threshold Jitter Jitter_Amount Antialias_Depth
++syn keyword poviniKeyword Quality Bounding Bounding_Method Bounding_Threshold Light_Buffer Vista_Buffer Remove_Bounds Split_Unions Antialias Sampling_Method Antialias_Threshold Jitter Jitter_Amount Antialias_Depth Antialias_Gamma
+ syn keyword poviniKeyword Pre_Scene_Return Pre_Frame_Return Post_Scene_Return Post_Frame_Return User_Abort_Return Fatal_Error_Return
++syn keyword poviniKeyword Radiosity Radiosity_File_Name Radiosity_From_File Radiosity_To_File Radiosity_Vain_Pretrace High_Reproducibility
+ syn match poviniShellOut "^\s*\(Pre_Scene_Command\|Pre_Frame_Command\|Post_Scene_Command\|Post_Frame_Command\|User_Abort_Command\|Fatal_Error_Command\)\>" nextgroup=poviniShellOutEq skipwhite
+ syn match poviniShellOutEq "=" nextgroup=poviniShellOutRHS skipwhite contained
+ syn match poviniShellOutRHS "[^;]\+" skipwhite contained contains=poviniShellOutSpecial
+diff -Naur vim73.orig/runtime/syntax/progress.vim vim73/runtime/syntax/progress.vim
+--- vim73.orig/runtime/syntax/progress.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/progress.vim	2013-06-07 17:07:25.442269361 +0000
+@@ -3,14 +3,15 @@
+ " Filename extensions:	*.p (collides with Pascal),
+ "			*.i (collides with assembler)
+ "			*.w (collides with cweb)
+-" Maintainer:		Philip Uren		<philuSPAX@ieee.org> Remove "SPAX" spam block
+-" Contributors:         Chris Ruprecht		<chrup@mac.com> (Chris, where are you now?)
+-"			Mikhail Kuperblum	<mikhail@whasup.com>
+-"			John Florian		<jflorian@voyager.net>
+-" Last Change:		Wed Apr 12 08:55:35 EST 2006
+-" $Id: progress.vim,v 1.3 2006/04/12 21:48:47 vimboss Exp $
++" Maintainer:		Philip Uren		<philuSPAXY@ieee.org> Remove SPAXY spam block
++" Contributors:         Matthew Stickney	<mtstickneySPAXY@gmail.com>
++" 			Chris Ruprecht		<chrisSPAXY@ruprecht.org>
++"			Mikhail Kuperblum	<mikhailSPAXY@whasup.com>
++"			John Florian		<jflorianSPAXY@voyager.net>
++" Version:              13
++" Last Change:		Nov 11 2012
+ 
+-" For version 5.x: Clear all syntax items
++" For version 5.x: Clear all syntax item
+ " For version 6.x: Quit when a syntax file was already loaded
+ if version < 600
+ 	syntax clear
+@@ -18,6 +19,9 @@
+ 	finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ if version >= 600
+   setlocal iskeyword=@,48-57,_,-,!,#,$,%
+ else
+@@ -30,159 +34,250 @@
+ syn case ignore
+ 
+ " Progress Blocks of code and mismatched "end." errors.
+-syn match	ProgressEndError	"\<end\>"
+-syn region	ProgressDoBlock		transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+-syn region	ProgressForBlock	transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+-syn region	ProgressRepeatBlock	transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+-syn region	ProgressCaseBlock	transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
++syn match   ProgressEndError		"\<end\>"
++syn region ProgressDoBlock transparent matchgroup=ProgressDo start="\<do\>" matchgroup=ProgressDo end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
++syn region ProgressForBlock transparent matchgroup=ProgressFor start="\<for\>" matchgroup=ProgressFor end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
++syn region ProgressRepeatBlock transparent matchgroup=ProgressRepeat start="\<repeat\>" matchgroup=ProgressRepeat end="\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
++syn region ProgressCaseBlock transparent matchgroup=ProgressCase start="\<case\>" matchgroup=ProgressCase end="\<end\scase\>\|\<end\>" contains=ALLBUT,ProgressProcedure,ProgressFunction
+ 
+ " These are Progress reserved words,
+ " and they could go in ProgressReserved,
+ " but I found it more helpful to highlight them in a different color.
+-syn keyword	ProgressConditional	if else then when otherwise
+-syn keyword	ProgressFor		each where
++syn keyword ProgressConditional	if else then when otherwise
++syn keyword ProgressFor				each where
+ 
+ " Make those TODO and debugging notes stand out!
+-syn keyword	ProgressTodo		contained	TODO BUG FIX
+-syn keyword	ProgressDebug		contained	DEBUG
+-syn keyword	ProgressDebug		debugger
+-syn match  	ProgressTodo            contained	"NEED[S]*\s\s*WORK"
++syn keyword ProgressTodo			contained	TODO BUG FIX
++syn keyword ProgressDebug			contained	DEBUG
++syn keyword ProgressDebug			debugger
+ 
+ " If you like to highlight the whole line of
+ " the start and end of procedures
+ " to make the whole block of code stand out:
+-syn match	ProgressProcedure	"^\s*procedure.*"
+-syn match	ProgressProcedure	"^\s*end\s\s*procedure.*"
+-syn match	ProgressFunction	"^\s*function.*"
+-syn match	ProgressFunction	"^\s*end\s\s*function.*"
++syn match ProgressProcedure		"^\s*procedure.*"
++syn match ProgressProcedure		"^\s*end\s\s*procedure.*"
++syn match ProgressFunction		"^\s*function.*"
++syn match ProgressFunction		"^\s*end\s\s*function.*"
+ " ... otherwise use this:
+ " syn keyword ProgressFunction	procedure function
+ 
+-syn keyword	ProgressReserved	accum[ulate] active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending] assign at attr[-space]
+-syn keyword	ProgressReserved	authorization auto-ret[urn] avail[able] back[ground] before-h[ide] begins bell between blank break btos by call can-do can-find
+-syn keyword	ProgressReserved	center[ed] character check chr clear clipboard col colon color col[umn] column-lab[el] col[umns] compiler connected control count-of
+-syn keyword	ProgressReserved	cpstream create ctos current current-changed current-lang[uage] current-window current_date curs[or] database dataservers
+-syn keyword	ProgressReserved	dbcodepage dbcollation dbname dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimal decimals declare
+-syn keyword	ProgressReserved	def default default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp
+-syn keyword	ProgressReserved	disp[lay] distinct dos down drop editing enable encode entry error-stat[us] escape etime except exclusive
+-syn keyword	ProgressReserved	exclusive[-lock] exclusive-web-us[er] exists export false fetch field field[s] file-info[rmation] fill find find-case-sensitive
+-syn keyword	ProgressReserved	find-global find-next-occurrence find-prev-occurrence find-select find-wrap-around first first-of focus font form form[at]
+-syn keyword	ProgressReserved	fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line frame-name frame-row frame-val[ue]
+-syn keyword	ProgressReserved	from from-c[hars] from-p[ixels] gateway[s] get-byte get-codepage[s] get-coll[ations] get-key-val[ue] getbyte global go-on
+-syn keyword	ProgressReserved	go-pend[ing] grant graphic-e[dge] group having header help hide import in index indicator input input-o[utput] insert
+-syn keyword	ProgressReserved	integer into is is-attr[-space] join kblabel key-code key-func[tion] key-label keycode keyfunc[tion] keylabel keys keyword label
+-syn keyword	ProgressReserved	last last-even[t] last-key last-of lastkey ldbname leave library like line-count[er] listi[ng] locked lookup machine-class
+-syn keyword	ProgressReserved	map member message message-lines mouse mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s]
+-syn keyword	ProgressReserved	no-lock no-map no-mes[sage] no-pause no-prefe[tch] no-undo no-val[idate] no-wait not null num-ali[ases] num-dbs num-entries
+-syn keyword	ProgressReserved	of off old on open opsys option or os-append os-command os-copy os-create-dir os-delete os-dir os-drive[s] os-error os-rename
+-syn keyword	ProgressReserved	os2 os400 output overlay page page-bot[tom] page-num[ber] page-top param[eter] pause pdbname persist[ent] pixels
+-syn keyword	ProgressReserved	preproc[ess] privileges proc-ha[ndle] proc-st[atus] process program-name Progress prompt prompt[-for] promsgs propath provers[ion]
+-syn keyword	ProgressReserved	put put-byte put-key-val[ue] putbyte query query-tuning quit r-index rcode-informatio[n] readkey recid record-len[gth] rect[angle]
+-syn keyword	ProgressReserved	release reposition retain retry return return-val[ue] revert revoke run save schema screen screen-io screen-lines
+-syn keyword	ProgressReserved	scroll sdbname search seek select self session set setuser[id] share[-lock] shared show-stat[s] skip some space status stream
+-syn keyword	ProgressReserved	stream-io string-xref system-dialog table term term[inal] text text-cursor text-seg[-growth] this-procedure time title
+-syn keyword	ProgressReserved	to today top-only trans trans[action] trigger triggers trim true underl[ine] undo unform[atted] union unique unix up update
+-syn keyword	ProgressReserved	use-index use-revvideo use-underline user user[id] using v6frame value values variable view view-as vms wait-for web-con[text]
+-syn keyword	ProgressReserved	window window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xref yes _cbit
+-syn keyword	ProgressReserved	_control _list _memory _msg _pcontrol _serial[-num] _trace 
++syn keyword ProgressReserved	accum[ulate] active-form active-window add alias all alter ambig[uous] analyz[e] and any apply as asc[ending]
++syn keyword ProgressReserved	assign asynchronous at attr[-space] audit-control audit-policy authorization auto-ret[urn] avail[able] back[ground]
++syn keyword ProgressReserved	before-h[ide] begins bell between big-endian blank break buffer-comp[are] buffer-copy by by-pointer by-variant-point[er] call
++syn keyword ProgressReserved	can-do can-find case case-sen[sitive] cast center[ed] check chr clear clipboard codebase-locator colon color column-lab[el]
++syn keyword ProgressReserved	col[umns] com-self compiler connected control copy-lob count-of cpstream create current current-changed current-lang[uage]
++syn keyword ProgressReserved	current-window current_date curs[or] database dataservers dataset dataset-handle db-remote-host dbcodepage dbcollation dbname
++syn keyword ProgressReserved	dbparam dbrest[rictions] dbtaskid dbtype dbvers[ion] dde deblank debug-list debugger decimals declare default
++syn keyword ProgressReserved	default-noxl[ate] default-window def[ine] delete delimiter desc[ending] dict[ionary] disable discon[nect] disp[lay] distinct do dos
++syn keyword ProgressReserved	down drop dynamic-cast dynamic-func[tion] dynamic-new each editing else enable encode end entry error-stat[us] escape
++syn keyword ProgressReserved	etime event-procedure except exclusive[-lock] exclusive-web[-user] exists export false fetch field[s] file-info[rmation]
++syn keyword ProgressReserved	fill find find-case-sensitive find-global find-next-occurrence find-prev-occurrence find-select find-wrap-around first
++syn keyword ProgressReserved	first-of focus font for form[at] fram[e] frame-col frame-db frame-down frame-field frame-file frame-inde[x] frame-line
++syn keyword ProgressReserved	frame-name frame-row frame-val[ue] from from-c[hars] from-p[ixels] function-call-type gateway[s] get-attr-call-type get-byte
++syn keyword ProgressReserved	get-codepage[s] get-coll[ations] get-column get-error-column get-error-row get-file-name get-file-offse[t] get-key-val[ue]
++syn keyword ProgressReserved	get-message-type get-row getbyte global go-on go-pend[ing] grant graphic-e[dge] group having header help hide host-byte-order if
++syn keyword ProgressReserved	import in index indicator input input-o[utput] insert into is is-attr[-space] join kblabel key-code key-func[tion] key-label
++syn keyword ProgressReserved	keycode keyfunc[tion] keylabel keys keyword label last last-even[t] last-key last-of lastkey ldbname leave library like
++syn keyword ProgressReserved	like-sequential line-count[er] listi[ng] little-endian locked log-manager lookup machine-class map member message message-lines mouse
++syn keyword ProgressReserved	mpe new next next-prompt no no-attr[-space] no-error no-f[ill] no-help no-hide no-label[s] no-lobs no-lock no-map
++syn keyword ProgressReserved	no-mes[sage] no-pause no-prefe[tch] no-return-val[ue] no-undo no-val[idate] no-wait not now null num-ali[ases] num-dbs num-entries
++syn keyword ProgressReserved	of off old on open opsys option or os-append os-command os-copy os-create-dir os-delete os-dir os-drive[s] os-error
++syn keyword ProgressReserved	os-rename otherwise output overlay page page-bot[tom] page-num[ber] page-top param[eter] password-field pause pdbname
++syn keyword ProgressReserved	persist[ent] pixels preproc[ess] privileges proc-ha[ndle] proc-st[atus] procedure-call-type process profiler program-name progress
++syn keyword ProgressReserved	prompt[-for] promsgs propath provers[ion] publish put put-byte put-key-val[ue] putbyte query query-tuning quit r-index
++syn keyword ProgressReserved	rcode-info[rmation] read-available read-exact-num readkey recid record-len[gth] rect[angle] release repeat reposition retain retry return
++syn keyword ProgressReserved	return-val[ue] revert revoke row-created row-deleted row-modified row-unmodified run save sax-comple[te] sax-parser-error
++syn keyword ProgressReserved	sax-running sax-uninitialized sax-write-begin sax-write-complete sax-write-content sax-write-element sax-write-error
++syn keyword ProgressReserved	sax-write-idle sax-write-tag schema screen screen-io screen-lines scroll sdbname search search-self search-target security-policy
++syn keyword ProgressReserved	seek select self session set set-attr-call-type setuser[id] share[-lock] shared show-stat[s] skip some source-procedure
++syn keyword ProgressReserved	space status stream stream-handle stream-io string-xref subscribe super system-dialog table table-handle target-procedure
++syn keyword ProgressReserved	term[inal] text text-cursor text-seg[-grow] then this-object this-procedure time title to today top-only trans[action] trigger
++syn keyword ProgressReserved	triggers trim true underl[ine] undo unform[atted] union unique unix unless-hidden unsubscribe up update use-index use-revvideo
++syn keyword ProgressReserved	use-underline user[id] using value values view view-as wait-for web-con[text] when where while window window-delayed-min[imize]
++syn keyword ProgressReserved	window-maxim[ized] window-minim[ized] window-normal with work-tab[le] workfile write xcode xcode-session-key xref xref-xml yes
+ 
+ " Strings. Handles embedded quotes.
+ " Note that, for some reason, Progress doesn't use the backslash, "\"
+ " as the escape character; it uses tilde, "~".
+-syn region	ProgressString		matchgroup=ProgressQuote	start=+"+ end=+"+	skip=+\~'\|\~\~+
+-syn region	ProgressString		matchgroup=ProgressQuote	start=+'+ end=+'+	skip=+\~'\|\~\~+
++syn region ProgressString matchgroup=ProgressQuote start=+"+ end=+"+ skip=+\~'\|\~\~\|\~"+ contains=@Spell
++syn region ProgressString matchgroup=ProgressQuote start=+'+ end=+'+ skip=+\~'\|\~\~\|\~"+ contains=@Spell
+ 
+-syn match	ProgressIdentifier	"\<[a-zA-Z_%#]+\>()"
++syn match  ProgressIdentifier		"\<[a-zA-Z_][a-zA-Z0-9_]*\>()"
+ 
+-" syn match	ProgressDelimiter	"()"
++" syn match  ProgressDelimiter		"()"
+ 
+-syn match	ProgressMatrixDelimiter	"[][]"
+-" If you prefer you can highlight the range
+-"syn match	ProgressMatrixDelimiter	"[\d\+\.\.\d\+]"
++syn match  ProgressMatrixDelimiter	"[][]"
++" If you prefer you can highlight the range:
++"syn match  ProgressMatrixDelimiter	"[\d\+\.\.\d\+]"
+ 
+-syn match	ProgressNumber		"\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
+-syn match	ProgressByte		"\$[0-9a-fA-F]\+"
++syn match  ProgressNumber		"\<\-\=\d\+\(u\=l\=\|lu\|f\)\>"
++syn match  ProgressByte			"\$[0-9a-fA-F]\+"
+ 
+ " More values: Logicals, and Progress's unknown value, ?.
+-syn match	ProgressNumber		"?"
+-syn keyword	ProgressNumber		true false yes no
++syn match   ProgressNumber				"?"
++syn keyword ProgressNumber		true false yes no
+ 
+ " If you don't like tabs:
+-syn match	ProgressShowTab		"\t"
++syn match ProgressShowTab "\t"
+ 
+-" If you don't like white space on the end of lines:
+-" syn match	ProgressSpaceError	"\s\+$"
++" If you don't like white space on the end of lines, uncomment this:
++" syn match   ProgressSpaceError "\s\+$"
+ 
+-syn region	ProgressComment		start="/\*" end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug
+-syn region	ProgressInclude		start="^[ 	]*[{][^&]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
+-syn region	ProgressPreProc		start="&" end="\>" contained
++syn region ProgressComment		start="/\*"  end="\*/" contains=ProgressComment,ProgressTodo,ProgressDebug,@Spell
++syn region ProgressInclude		start="^[ 	]*[{]" end="[}]" contains=ProgressPreProc,ProgressOperator,ProgressString,ProgressComment
++syn region ProgressPreProc		start="&" end="\>" contained
+ 
+ " This next line works reasonably well.
+-" syn match	ProgressOperator        "[!;|)(:.><+*=-]"
++" syn match ProgressOperator        "[!;|)(:.><+*=-]"
+ "
+ " Progress allows a '-' to be part of an identifier.  To be considered
+ " the subtraction/negation operation operator it needs a non-word
+ " character on either side.  Also valid are cases where the minus
+ " operation appears at the beginning or end of a line.
+ " This next line trips up on "no-undo" etc.
+-" syn match	ProgressOperator	"[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
+-syn match	ProgressOperator	"[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
++" syn match ProgressOperator    "[!;|)(:.><+*=]\|\W-\W\|^-\W\|\W-$"
++syn match ProgressOperator      "[!;|)(:.><+*=]\|\s-\s\|^-\s\|\s-$"
+ 
+-syn keyword	ProgressOperator	<= <> >= abs[olute] accelerator across add-first add-last advise alert-box allow-replication ansi-only anywhere append appl-alert[-boxes] application as-cursor ask-overwrite
+-syn keyword	ProgressOperator	attach[ment] auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-z[ap] available-formats ave[rage] avg backward[s] base-key batch[-mode] bgc[olor] binary
+-syn keyword	ProgressOperator	bind-where block-iteration-display border-bottom border-bottom-ch[ars] border-bottom-pi[xels] border-left border-left-char[s] border-left-pixe[ls] border-right border-right-cha[rs]
+-syn keyword	ProgressOperator	border-right-pix[els] border-t[op] border-t[op-chars] border-top-pixel[s] both bottom box box-select[able] browse browse-header buffer buffer-chars buffer-lines
+-syn keyword	ProgressOperator	button button[s] byte cache cache-size can-query can-set cancel-break cancel-button caps careful-paint case-sensitive cdecl char[acter] character_length charset
+-syn keyword	ProgressOperator	checked choose clear-select[ion] close code codepage codepage-convert col-of colon-align[ed] color-table column-bgc[olor] column-dcolor column-fgc[olor] column-font
+-syn keyword	ProgressOperator	column-label-bgc[olor] column-label-dcolor column-label-fgc[olor] column-label-font column-of column-pfc[olor] column-sc[rolling] combo-box command compile complete
+-syn keyword	ProgressOperator	connect constrained contents context context-pop[up] control-containe[r] c[ontrol-form] convert-to-offse[t] convert count cpcase cpcoll cpint[ernal] cplog
+-syn keyword	ProgressOperator	cpprint cprcodein cprcodeout cpterm crc-val[ue] c[reate-control] create-result-list-entry create-test-file current-column current-environm[ent] current-iteration
+-syn keyword	ProgressOperator	current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-entry-retur[n] data-t[ype] date date-f[ormat] day db-references
+-syn keyword	ProgressOperator	dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] dec[imal] default-b[utton] default-extensio[n] defer-lob-fetch define defined delete-char delete-current-row
+-syn keyword	ProgressOperator	delete-line delete-selected-row delete-selected-rows deselect-focused-row deselect-rows deselect-selected-row d[esign-mode] dialog-box dialog-help dir disabled display-message
+-syn keyword	ProgressOperator	display-t[ype] double drag-enabled drop-down drop-down-list dump dynamic echo edge edge[-chars] edge-p[ixels] editor empty end-key endkey entered eq error error-col[umn]
+-syn keyword	ProgressOperator	error-row event-t[ype] event[s] exclusive-id execute exp expand extended extent external extract fetch-selected-row fgc[olor] file file-name file-off[set] file-type
+-syn keyword	ProgressOperator	filename fill-in filled filters first-child first-column first-proc[edure] first-tab-i[tem] fixed-only float focused-row font-based-layout font-table force-file
+-syn keyword	ProgressOperator	fore[ground] form-input forward[s] frame-spa[cing] frame-x frame-y frequency from-cur[rent] full-height full-height-char[s] full-height-pixe[ls] full-pathn[ame]
+-syn keyword	ProgressOperator	full-width full-width[-chars] full-width-pixel[s] ge get get-blue[-value] g[et-char-property] get-double get-dynamic get-file get-float get-green[-value]
+-syn keyword	ProgressOperator	get-iteration get-license get-long get-message get-number get-pointer-value get-red[-value] get-repositioned-row get-selected-wid[get] get-short get-signature get-size
+-syn keyword	ProgressOperator	get-string get-tab-item get-text-height get-text-height-char[s] get-text-height-pixe[ls] get-text-width get-text-width-c[hars] get-text-width-pixel[s] get-unsigned-short
+-syn keyword	ProgressOperator	grayed grid-factor-horizont[al] grid-factor-vert[ical] grid-set grid-snap grid-unit-height grid-unit-height-cha[rs] grid-unit-height-pix[els] grid-unit-width grid-unit-width-char[s]
+-syn keyword	ProgressOperator	grid-unit-width-pixe[ls] grid-visible gt handle height height[-chars] height-p[ixels] help-con[text] helpfile-n[ame] hidden hint hori[zontal] hwnd image image-down
+-syn keyword	ProgressOperator	image-insensitive image-size image-size-c[hars] image-size-pixel[s] image-up immediate-display index-hint indexed-reposition info[rmation] init init[ial] initial-dir
+-syn keyword	ProgressOperator	initial-filter initiate inner inner-chars inner-lines insert-b[acktab] insert-file insert-row insert-string insert-t[ab] int[eger] internal-entries is-lead-byte
+-syn keyword	ProgressOperator	is-row-selected is-selected item items-per-row join-by-sqldb keep-frame-z-ord[er] keep-messages keep-tab-order key keyword-all label-bgc[olor] label-dc[olor] label-fgc[olor]
+-syn keyword	ProgressOperator	label-font label-pfc[olor] labels language[s] large large-to-small last-child last-tab-i[tem] last-proce[dure] lc le leading left left-align[ed] left-trim length
+-syn keyword	ProgressOperator	line list-events list-items list-query-attrs list-set-attrs list-widgets load l[oad-control] load-icon load-image load-image-down load-image-insensitive load-image-up
+-syn keyword	ProgressOperator	load-mouse-point[er] load-small-icon log logical lookahead lower lt manual-highlight margin-extra margin-height margin-height-ch[ars] margin-height-pi[xels] margin-width
+-syn keyword	ProgressOperator	margin-width-cha[rs] margin-width-pix[els] matches max max-chars max-data-guess max-height max-height[-chars] max-height-pixel[s] max-rows max-size max-val[ue] max-width
+-syn keyword	ProgressOperator	max-width[-chars] max-width-p[ixels] maximize max[imum] memory menu menu-bar menu-item menu-k[ey] menu-m[ouse] menubar message-area message-area-font message-line
+-syn keyword	ProgressOperator	min min-height min-height[-chars] min-height-pixel[s] min-size min-val[ue] min-width min-width[-chars] min-width-p[ixels] min[imum] mod modified mod[ulo] month mouse-p[ointer]
+-syn keyword	ProgressOperator	movable move-after-tab-i[tem] move-before-tab-[item] move-col[umn] move-to-b[ottom] move-to-eof move-to-t[op] multiple multiple-key multitasking-interval must-exist
+-syn keyword	ProgressOperator	name native ne new-row next-col[umn] next-sibling next-tab-ite[m] next-value no-apply no-assign no-bind-where no-box no-column-scroll[ing] no-convert no-current-value
+-syn keyword	ProgressOperator	no-debug no-drag no-echo no-index-hint no-join-by-sqldb no-lookahead no-row-markers no-scrolling no-separate-connection no-separators no-und[erline] no-word-wrap
+-syn keyword	ProgressOperator	none num-but[tons] num-col[umns] num-copies num-formats num-items num-iterations num-lines num-locked-colum[ns] num-messages num-results num-selected num-selected-rows
+-syn keyword	ProgressOperator	num-selected-widgets num-tabs num-to-retain numeric numeric-f[ormat] octet_length ok ok-cancel on-frame[-border] ordered-join ordinal orientation os-getenv outer
+-syn keyword	ProgressOperator	outer-join override owner page-size page-wid[th] paged parent partial-key pascal pathname pfc[olor] pinnable pixels-per-colum[n] pixels-per-row popup-m[enu] popup-o[nly]
+-syn keyword	ProgressOperator	position precision presel[ect] prev prev-col[umn] prev-sibling prev-tab-i[tem] primary printer-control-handle printer-setup private-d[ata] profiler Progress-s[ource]
+-syn keyword	ProgressOperator	publish put-double put-float put-long put-short put-string put-unsigned-short query-off-end question radio-buttons radio-set random raw raw-transfer read-file read-only
+-syn keyword	ProgressOperator	real recursive refresh refreshable replace replace-selection-text replication-create replication-delete replication-write request resiza[ble] resize retry-cancel
+-syn keyword	ProgressOperator	return-ins[erted] return-to-start-di[r] reverse-from right right-align[ed] right-trim round row row-ma[rkers] row-of rowid rule rule-row rule-y save-as save-file
+-syn keyword	ProgressOperator	screen-val[ue] scroll-bars scroll-delta scroll-horiz-value scroll-offset scroll-to-current-row scroll-to-i[tem] scroll-to-selected-row scroll-vert-value scrollable
+-syn keyword	ProgressOperator	scrollbar-horizo[ntal] scrollbar-vertic[al] scrolled-row-positio[n] scrolling se-check-pools se-enable-of[f] se-enable-on se-num-pools se-use-messa[ge] section select-focused-row
+-syn keyword	ProgressOperator	select-next-row select-prev-row select-repositioned-row select-row selectable selected selected-items selection-end selection-list selection-start selection-text
+-syn keyword	ProgressOperator	send sensitive separate-connection separators set-blue[-value] set-break set-cell-focus set-contents set-dynamic set-green[-value] set-leakpoint set-pointer-valu[e]
+-syn keyword	ProgressOperator	s[et-property] set-red[-value] set-repositioned-row set-selection set-size set-wait[-state] side-lab side-lab[e] side-lab[el] side-label-handl[e] side-lab[els] silent
+-syn keyword	ProgressOperator	simple single size size-c[hars] size-p[ixels] slider smallint sort source source-procedure sql sqrt start status-area status-area-font status-bar stdcall stenciled stop stoppe[d]
+-syn keyword	ProgressOperator	stored-proc[edure] string sub-ave[rage] sub-count sub-max[imum] sub-me[nu] sub-menu-help sub-min[imum] sub-total subscribe subst[itute] substr[ing] subtype sum super suppress-warning[s]
+-syn keyword	ProgressOperator	system-alert-box[es] system-help tab-position tabbable target target-procedure temp-dir[ectory] temp-table terminate text-selected three-d through thru tic-marks time-source title-bgc[olor]
+-syn keyword	ProgressOperator	title-dc[olor] title-fgc[olor] title-fo[nt] to-rowid toggle-box tool-bar top topic total trailing trunc[ate] type unbuff[ered] unique-id unload unsubscribe upper use use-dic[t-exps]
+-syn keyword	ProgressOperator	use-filename use-text v6display valid-event valid-handle validate validate-condition validate-message var[iable] vert[ical] virtual-height virtual-height-c[hars]
+-syn keyword	ProgressOperator	virtual-height-pixel[s] virtual-width virtual-width-ch[ars] virtual-width-pi[xels] visible wait warning weekday widget widget-e[nter] widget-h[andle] widget-l[eave]
+-syn keyword	ProgressOperator	widget-pool width width[-chars] width-p[ixels] window-name window-sta[te] window-sys[tem] word-wrap x-of y-of year yes-no yes-no-cancel _dcm
++syn keyword ProgressOperator	<= <> >=
++syn keyword ProgressOperator	abs[olute] accelerator accept-changes accept-row-changes across active actor add-buffer add-calc-col[umn]
++syn keyword ProgressOperator	add-columns-from add-events-proc[edure] add-fields-from add-first add-header-entry add-index-field add-interval add-last
++syn keyword ProgressOperator	add-like-col[umn] add-like-field add-like-index add-new-field add-new-index add-rel[ation] add-schema-location add-source-buffer
++syn keyword ProgressOperator	add-super-proc[edure] adm-data advise after-buffer after-rowid after-table alert-box allow-column-searching allow-replication alternate-key
++syn keyword ProgressOperator	always-on-top ansi-only anywhere append append-child appl-alert[-boxes] appl-context-id application apply-callback appserver-info
++syn keyword ProgressOperator	appserver-password appserver-userid array-m[essage] ask-overwrite assembly async-request-count async-request-handle attach-data-source
++syn keyword ProgressOperator	attached-pairlist attach attribute-names audit-enabled audit-event-context authentication-failed auto-comp[letion] auto-delete
++syn keyword ProgressOperator	auto-delete-xml auto-end-key auto-endkey auto-go auto-ind[ent] auto-resize auto-synchronize auto-val[idate] auto-z[ap] automatic
++syn keyword ProgressOperator	available-formats ave[rage] avg backward[s] base-ade base-key basic-logging batch[-mode] batch-size before-buffer before-rowid
++syn keyword ProgressOperator	before-table begin-event-group bgc[olor] binary bind bind-where blob block-iteration-display border-b[ottom-chars]
++syn keyword ProgressOperator	border-bottom-p[ixels] border-l[eft-chars] border-left-p[ixels] border-r[ight-chars] border-right-p[ixels] border-t[op-chars]
++syn keyword ProgressOperator	border-top-p[ixels] both bottom box box-select[able] browse buffer buffer-chars buffer-create buffer-delete buffer-field buffer-handle
++syn keyword ProgressOperator	buffer-lines buffer-n[ame] buffer-releas[e] buffer-validate buffer-value button[s] by-reference by-value byte bytes-read
++syn keyword ProgressOperator	bytes-written cache cache-size call-name call-type can-crea[te] can-dele[te] can-query can-read can-set can-writ[e] cancel-break
++syn keyword ProgressOperator	cancel-button cancel-requests cancelled caps careful-paint catch cdecl chained char[acter] character_length charset checked
++syn keyword ProgressOperator	child-buffer child-num choose class class-type clear-appl-context clear-log clear-select[ion] clear-sort-arrow[s]
++syn keyword ProgressOperator	client-connection-id client-principal client-tty client-type client-workstation clob clone-node close close-log code codepage
++syn keyword ProgressOperator	codepage-convert col-of collate colon-align[ed] color-table column-bgc[olor] column-codepage column-dcolor column-fgc[olor]
++syn keyword ProgressOperator	column-font column-movable column-of column-pfc[olor] column-read-only column-resizable column-sc[rolling] com-handle combo-box
++syn keyword ProgressOperator	command compare[s] compile complete config-name connect constructor contents context context-help context-help-file
++syn keyword ProgressOperator	context-help-id context-pop[up] control-box control-fram[e] convert convert-to-offs[et] copy-dataset copy-sax-attributes
++syn keyword ProgressOperator	copy-temp-table count cpcase cpcoll cpint[ernal] cplog cpprint cprcodein cprcodeout cpterm crc-val[ue] create-like
++syn keyword ProgressOperator	create-like-sequential create-node create-node-namespace create-result-list-entry create-test-file current-column current-env[ironment]
++syn keyword ProgressOperator	current-iteration current-query current-result-row current-row-modified current-value cursor-char cursor-line cursor-offset data-b[ind]
++syn keyword ProgressOperator	data-entry-ret[urn] data-rel[ation] data-source data-source-complete-map data-source-modified data-source-rowid data-t[ype] date
++syn keyword ProgressOperator	date-f[ormat] day db-references dcolor dde-error dde-i[d] dde-item dde-name dde-topic debu[g] debug-alert
++syn keyword ProgressOperator	declare-namespace decrypt default-buffer-handle default-but[ton] default-commit default-ex[tension] default-string
++syn keyword ProgressOperator	default-value define-user-event-manager defined delete-char delete-current-row delete-header-entry delete-line delete-node
++syn keyword ProgressOperator	delete-result-list-entry delete-selected-row delete-selected-rows descript[ion] deselect-focused-row deselect-rows deselect-selected-row
++syn keyword ProgressOperator	destructor detach-data-source dialog-box dir directory disable-auto-zap disable-connections disable-dump-triggers
++syn keyword ProgressOperator	disable-load-triggers disabled display-message display-timezone display-t[ype] domain-description domain-name domain-type double
++syn keyword ProgressOperator	drag-enabled drop-down drop-down-list drop-target dump dump-logging-now dynamic dynamic-current-value dynamic-next-value echo
++syn keyword ProgressOperator	edge[-chars] edge-p[ixels] edit-can-paste edit-can-undo edit-clear edit-copy edit-cut edit-paste edit-undo editor empty
++syn keyword ProgressOperator	empty-dataset empty-temp-table enable-connections enabled encoding encrypt encrypt-audit-mac-key encryption-salt end-document
++syn keyword ProgressOperator	end-element end-event-group end-file-drop end-key end-user-prompt endkey entered entry-types-list eq error error-col[umn]
++syn keyword ProgressOperator	error-object-detail error-row error-stack-trace error-string event-group-id event-procedure-context event-t[ype] events exclusive-id
++syn keyword ProgressOperator	execute execution-log exp expand expandable expire explicit export-principal extended extent external extract
++syn keyword ProgressOperator	fetch-selected-row fgc[olor] file file-create-d[ate] file-create-t[ime] file-mod-d[ate] file-mod-t[ime] file-name file-off[set]
++syn keyword ProgressOperator	file-size file-type filename fill-in fill-mode fill-where-string filled filters final finally find-by-rowid find-current
++syn keyword ProgressOperator	find-first find-last find-unique finder first-async[-request] first-buffer first-child first-column first-data-source
++syn keyword ProgressOperator	first-dataset first-form first-object first-proc[edure] first-query first-serv[er] first-server-socket first-socket
++syn keyword ProgressOperator	first-tab-i[tem] fit-last-column fix-codepage fixed-only flat-button float focused-row focused-row-selected font-table force-file
++syn keyword ProgressOperator	fore[ground] foreign-key-hidden form-input form-long-input formatte[d] forward-only forward[s] fragmen[t] frame-spa[cing] frame-x
++syn keyword ProgressOperator	frame-y frequency from-cur[rent] full-height[-chars] full-height-p[ixels] full-pathn[ame] full-width[-chars]
++syn keyword ProgressOperator	full-width-p[ixels] function ge generate-pbe-key generate-pbe-salt generate-random-key generate-uuid get get-attribute get-attribute-node
++syn keyword ProgressOperator	get-binary-data get-bits get-blue[-value] get-browse-col[umn] get-buffer-handle get-byte-order get-bytes get-bytes-available
++syn keyword ProgressOperator	get-callback-proc-context get-callback-proc-name get-cgi-list get-cgi-long-value get-cgi-value get-changes get-child get-child-rel[ation]
++syn keyword ProgressOperator	get-config-value get-curr[ent] get-dataset-buffer get-dir get-document-element get-double get-dropped-file get-dynamic get-file
++syn keyword ProgressOperator	get-firs[t] get-float get-green[-value] get-header-entr[y] get-index-by-namespace-name get-index-by-qname get-iteration get-last
++syn keyword ProgressOperator	get-localname-by-index get-long get-message get-next get-node get-number get-parent get-pointer-value get-prev get-printers get-property
++syn keyword ProgressOperator	get-qname-by-index get-red[-value] get-rel[ation] get-repositioned-row get-rgb[-value] get-selected[-widget] get-serialized get-short
++syn keyword ProgressOperator	get-signature get-size get-socket-option get-source-buffer get-string get-tab-item get-text-height[-chars] get-text-height-p[ixels]
++syn keyword ProgressOperator	get-text-width[-chars] get-text-width-p[ixels] get-top-buffer get-type-by-index get-type-by-namespace-name get-type-by-qname
++syn keyword ProgressOperator	get-unsigned-long get-unsigned-short get-uri-by-index get-value-by-index get-value-by-namespace-name get-value-by-qname
++syn keyword ProgressOperator	get-wait[-state] grayed grid-factor-h[orizontal] grid-factor-v[ertical] grid-snap grid-unit-height[-chars] grid-unit-height-p[ixels]
++syn keyword ProgressOperator	grid-unit-width[-chars] grid-unit-width-p[ixels] grid-visible group-box gt guid handle handler has-lobs has-records height[-chars]
++syn keyword ProgressOperator	height-p[ixels] help-topic hex-decode hex-encode hidden hint hori[zontal] html-charset html-end-of-line html-end-of-page
++syn keyword ProgressOperator	html-frame-begin html-frame-end html-header-begin html-header-end html-title-begin html-title-end hwnd icfparam[eter] icon
++syn keyword ProgressOperator	ignore-current-mod[ified] image image-down image-insensitive image-size image-size-c[hars] image-size-p[ixels] image-up immediate-display
++syn keyword ProgressOperator	implements import-node import-principal in-handle increment-exclusive-id index-hint index-info[rmation] indexed-reposition
++syn keyword ProgressOperator	info[rmation] inherit-bgc[olor] inherit-fgc[olor] inherits init[ial] initial-dir initial-filter initialize-document-type initiate
++syn keyword ProgressOperator	inner inner-chars inner-lines input-value insert-attribute insert-b[acktab] insert-before insert-file insert-row
++syn keyword ProgressOperator	insert-string insert-t[ab] instantiating-procedure int[eger] interface internal-entries interval invoke is-clas[s]
++syn keyword ProgressOperator	is-codepage-fixed is-column-codepage is-lead-byte is-open is-parameter-set is-row-selected is-selected is-xml iso-date item
++syn keyword ProgressOperator	items-per-row join-by-sqldb keep-connection-open keep-frame-z[-order] keep-messages keep-security-cache keep-tab-order key
++syn keyword ProgressOperator	keyword-all label-bgc[olor] label-dc[olor] label-fgc[olor] label-font label-pfc[olor] labels landscape language[s] large
++syn keyword ProgressOperator	large-to-small last-async[-request] last-batch last-child last-form last-object last-proce[dure] last-serv[er] last-server-socket
++syn keyword ProgressOperator	last-socket last-tab-i[tem] lc le leading left left-align[ed] left-trim length line list-events list-item-pairs list-items
++syn keyword ProgressOperator	list-property-names list-query-attrs list-set-attrs list-widgets literal-question load load-domains load-icon load-image load-image-down
++syn keyword ProgressOperator	load-image-insensitive load-image-up load-mouse-p[ointer] load-picture load-small-icon lob-dir local-host local-name local-port
++syn keyword ProgressOperator	locator-column-number locator-line-number locator-public-id locator-system-id locator-type lock-registration log log-audit-event
++syn keyword ProgressOperator	log-entry-types log-threshold logfile-name logging-level logical login-expiration-timestamp login-host login-state logout long[char]
++syn keyword ProgressOperator	longchar-to-node-value lookahead lower lt mandatory manual-highlight margin-extra margin-height[-chars] margin-height-p[ixels]
++syn keyword ProgressOperator	margin-width[-chars] margin-width-p[ixels] mark-new mark-row-state matches max-button max-chars max-data-guess max-height[-chars]
++syn keyword ProgressOperator	max-height-p[ixels] max-rows max-size max-val[ue] max-width[-chars] max-width-p[ixels] maximize max[imum] maximum-level memory memptr
++syn keyword ProgressOperator	memptr-to-node-value menu menu-bar menu-item menu-k[ey] menu-m[ouse] menubar merge-by-field merge-changes merge-row-changes message-area
++syn keyword ProgressOperator	message-area-font method min-button min-column-width-c[hars] min-column-width-p[ixels] min-height[-chars] min-height-p[ixels]
++syn keyword ProgressOperator	min-schema-marshal min-size min-val[ue] min-width[-chars] min-width-p[ixels] min[imum] modified mod[ulo] month mouse-p[ointer] movable
++syn keyword ProgressOperator	move-after[-tab-item] move-befor[e-tab-item] move-col[umn] move-to-b[ottom] move-to-eof move-to-t[op] mtime multi-compile multiple
++syn keyword ProgressOperator	multiple-key multitasking-interval must-exist must-understand name namespace-prefix namespace-uri native ne needs-appserver-prompt
++syn keyword ProgressOperator	needs-prompt nested new-instance new-row next-col[umn] next-rowid next-sibling next-tab-ite[m] next-value no-apply
++syn keyword ProgressOperator	no-array-m[essage] no-assign no-attr-l[ist] no-auto-validate no-bind-where no-box no-console no-convert no-current-value no-debug
++syn keyword ProgressOperator	no-drag no-echo no-empty-space no-focus no-index-hint no-inherit-bgc[olor] no-inherit-fgc[olor] no-join-by-sqldb no-lookahead
++syn keyword ProgressOperator	no-row-markers no-schema-marshal no-scrollbar-v[ertical] no-separate-connection no-separators no-tab[-stop] no-und[erline]
++syn keyword ProgressOperator	no-word-wrap node-value node-value-to-longchar node-value-to-memptr nonamespace-schema-location none normalize not-active
++syn keyword ProgressOperator	num-buffers num-but[tons] num-child-relations num-children num-col[umns] num-copies num-dropped-files num-fields num-formats
++syn keyword ProgressOperator	num-header-entries num-items num-iterations num-lines num-locked-col[umns] num-log-files num-messages num-parameters num-references
++syn keyword ProgressOperator	num-relations num-repl[aced] num-results num-selected-rows num-selected[-widgets] num-source-buffers num-tabs num-to-retain
++syn keyword ProgressOperator	num-top-buffers num-visible-col[umns] numeric numeric-dec[imal-point] numeric-f[ormat] numeric-sep[arator] object ok ok-cancel
++syn keyword ProgressOperator	on-frame[-border] ordered-join ordinal orientation origin-handle origin-rowid os-getenv outer outer-join override owner owner-document
++syn keyword ProgressOperator	page-size page-wid[th] paged parent parent-buffer parent-rel[ation] parse-status partial-key pascal pathname
++syn keyword ProgressOperator	pbe-hash-alg[orithm] pbe-key-rounds perf[ormance] persistent-cache-disabled persistent-procedure pfc[olor] pixels-per-col[umn]
++syn keyword ProgressOperator	pixels-per-row popup-m[enu] popup-o[nly] portrait position precision prefer-dataset prepare-string prepared presel[ect] prev
++syn keyword ProgressOperator	prev-col[umn] prev-sibling prev-tab-i[tem] primary printer printer-control-handle printer-hdc printer-name printer-port
++syn keyword ProgressOperator	printer-setup private private-d[ata] proce[dure] procedure-name progress-s[ource] property protected proxy proxy-password
++syn keyword ProgressOperator	proxy-userid public public-id published-events put-bits put-bytes put-double put-float put-long put-short put-string
++syn keyword ProgressOperator	put-unsigned-long put-unsigned-short query-close query-off-end query-open query-prepare question quoter radio-buttons radio-set random
++syn keyword ProgressOperator	raw raw-transfer read read-file read-only read-xml read-xmlschema real recursive reference-only refresh
++syn keyword ProgressOperator	refresh-audit-policy refreshable register-domain reject-changes reject-row-changes rejected relation-fi[elds] relations-active remote
++syn keyword ProgressOperator	remote-host remote-port remove-attribute remove-child remove-events-proc[edure] remove-super-proc[edure] replace replace-child
++syn keyword ProgressOperator	replace-selection-text replication-create replication-delete replication-write reposition-back[ward] reposition-forw[ard] reposition-to-row
++syn keyword ProgressOperator	reposition-to-rowid request reset resiza[ble] resize restart-row restart-rowid result retain-s[hape] retry-cancel return-ins[erted]
++syn keyword ProgressOperator	return-to-start-di[r] return-value-data-type returns reverse-from rgb-v[alue] right right-align[ed] right-trim roles round rounded
++syn keyword ProgressOperator	routine-level row row-height[-chars] row-height-p[ixels] row-ma[rkers] row-of row-resizable row-state rowid rule run-proc[edure]
++syn keyword ProgressOperator	save-as save-file save-row-changes save-where-string sax-attributes sax-parse sax-parse-first sax-parse-next sax-reader
++syn keyword ProgressOperator	sax-writer schema-change schema-location schema-marshal schema-path screen-val[ue] scroll-bars scroll-delta scroll-offset
++syn keyword ProgressOperator	scroll-to-current-row scroll-to-i[tem] scroll-to-selected-row scrollable scrollbar-h[orizontal] scrollbar-v[ertical]
++syn keyword ProgressOperator	scrolled-row-pos[ition] scrolling seal seal-timestamp section select-all select-focused-row select-next-row select-prev-row select-row
++syn keyword ProgressOperator	selectable selected selection-end selection-list selection-start selection-text send sensitive separate-connection
++syn keyword ProgressOperator	separator-fgc[olor] separators server server-connection-bo[und] server-connection-bound-re[quest] server-connection-co[ntext]
++syn keyword ProgressOperator	server-connection-id server-operating-mode server-socket session-end session-id set-actor set-appl-context set-attribute
++syn keyword ProgressOperator	set-attribute-node set-blue[-value] set-break set-buffers set-byte-order set-callback set-callback-procedure set-client set-commit
++syn keyword ProgressOperator	set-connect-procedure set-contents set-db-client set-dynamic set-green[-value] set-input-source set-must-understand set-node
++syn keyword ProgressOperator	set-numeric-form[at] set-option set-output-destination set-parameter set-pointer-val[ue] set-property set-read-response-procedure
++syn keyword ProgressOperator	set-red[-value] set-repositioned-row set-rgb[-value] set-rollback set-selection set-serialized set-size set-socket-option
++syn keyword ProgressOperator	set-sort-arrow set-wait[-state] short show-in-task[bar] side-label-h[andle] side-lab[els] silent simple single single-character size
++syn keyword ProgressOperator	size-c[hars] size-p[ixels] skip-deleted-rec[ord] slider small-icon small-title smallint soap-fault soap-fault-actor
++syn keyword ProgressOperator	soap-fault-code soap-fault-detail soap-fault-string soap-header soap-header-entryref socket sort sort-ascending sort-number source
++syn keyword ProgressOperator	sql sqrt ssl-server-name standalone start-document start-element start[ing] startup-parameters state-detail static
++syn keyword ProgressOperator	status-area status-area-font stdcall stop stop-parsing stoppe[d] stored-proc[edure] stretch-to-fit strict string string-value
++syn keyword ProgressOperator	sub-ave[rage] sub-count sub-max[imum] sub-menu sub-menu-help sub-min[imum] sub-total subst[itute] substr[ing] subtype sum
++syn keyword ProgressOperator	super-proc[edures] suppress-namespace-processing suppress-w[arnings] suspend symmetric-encryption-algorithm symmetric-encryption-iv
++syn keyword ProgressOperator	symmetric-encryption-key symmetric-support synchronize system-alert[-boxes] system-help system-id tab-position tab-stop table-crc-list
++syn keyword ProgressOperator	table-list table-num[ber] target temp-dir[ectory] temp-table temp-table-prepar[e] terminate text-selected three-d through throw
++syn keyword ProgressOperator	thru tic-marks time-source timezone title-bgc[olor] title-dc[olor] title-fgc[olor] title-fo[nt] to-rowid toggle-box
++syn keyword ProgressOperator	tooltip tooltips top top-nav-query topic total tracking-changes trailing trans-init-proc[edure] transaction-mode
++syn keyword ProgressOperator	transpar[ent] trunc[ate] ttcodepage type type-of unbox unbuff[ered] unique-id unique-match unload unsigned-byte unsigned-integer
++syn keyword ProgressOperator	unsigned-long unsigned-short update-attribute upper url url-decode url-encode url-password url-userid use use-dic[t-exps]
++syn keyword ProgressOperator	use-filename use-text use-widget-pool user-id valid-event valid-handle valid-object validate validate-expressio[n]
++syn keyword ProgressOperator	validate-message validate-seal validate-xml validation-enabled var[iable] verb[ose] version vert[ical] view-first-column-on-reopen
++syn keyword ProgressOperator	virtual-height[-chars] virtual-height-p[ixels] virtual-width[-chars] virtual-width-p[ixels] visible void wait warning weekday where-string
++syn keyword ProgressOperator	widget widget-e[nter] widget-h[andle] widget-id widget-l[eave] widget-pool width[-chars] width-p[ixels] window-name
++syn keyword ProgressOperator	window-sta[te] window-sys[tem] word-index word-wrap work-area-height-p[ixels] work-area-width-p[ixels] work-area-x work-area-y
++syn keyword ProgressOperator	write-cdata write-characters write-comment write-data-element write-empty-element write-entity-ref write-external-dtd
++syn keyword ProgressOperator	write-fragment write-message write-processing-instruction write-status write-xml write-xmlschema x x-document x-noderef x-of
++syn keyword ProgressOperator	xml-data-type xml-node-name xml-node-type xml-schema-pat[h] xml-suppress-namespace-processing y y-of year year-offset yes-no
++syn keyword ProgressOperator	yes-no-cancel
+ 
+-syn keyword	ProgressType		char[acter] int[eger] format
+-syn keyword	ProgressType		var[iable] log[ical] da[te]
++syn keyword ProgressType	char[acter] int[eger] int64 dec[imal] log[ical] da[te] datetime datetime-tz
+ 
+ syn sync lines=800
+ 
+@@ -190,42 +285,45 @@
+ " For version 5.7 and earlier: only when not done already
+ " For version 5.8 and later: only when an item doesn't have highlighting yet
+ if version >= 508 || !exists("did_progress_syntax_inits")
+-  if version < 508
+-	let did_progress_syntax_inits = 1
+-	command -nargs=+ HiLink hi link <args>
+-  else
+-	command -nargs=+ HiLink hi def link <args>
+-  endif
+-
+-  " The default methods for highlighting. Can be overridden later.
+-  HiLink ProgressByte			Number
+-  HiLink ProgressCase			Repeat
+-  HiLink ProgressComment		Comment
+-  HiLink ProgressConditional		Conditional
+-  HiLink ProgressDebug			Debug
+-  HiLink ProgressDo			Repeat
+-  HiLink ProgressEndError		Error
+-  HiLink ProgressFor			Repeat
+-  HiLink ProgressFunction		Procedure
+-  HiLink ProgressIdentifier		Identifier
+-  HiLink ProgressInclude		Include
+-  HiLink ProgressMatrixDelimiter	Identifier
+-  HiLink ProgressNumber			Number
+-  HiLink ProgressOperator		Operator
+-  HiLink ProgressPreProc		PreProc
+-  HiLink ProgressProcedure		Procedure
+-  HiLink ProgressQuote			Delimiter
+-  HiLink ProgressRepeat			Repeat
+-  HiLink ProgressReserved		Statement
+-  HiLink ProgressSpaceError		Error
+-  HiLink ProgressString			String
+-  HiLink ProgressTodo			Todo
+-  HiLink ProgressType			Statement
+-  HiLink ProgressShowTab		Error
++	if version < 508
++		let did_progress_syntax_inits = 1
++		command -nargs=+ HiLink hi link <args>
++	else
++		command -nargs=+ HiLink hi def link <args>
++	endif
++
++	" The default methods for highlighting. Can be overridden later.
++	HiLink ProgressByte		Number
++	HiLink ProgressCase		Repeat
++	HiLink ProgressComment		Comment
++	HiLink ProgressConditional	Conditional
++	HiLink ProgressDebug		Debug
++	HiLink ProgressDo		Repeat
++	HiLink ProgressEndError		Error
++	HiLink ProgressFor		Repeat
++	HiLink ProgressFunction		Procedure
++	HiLink ProgressIdentifier	Identifier
++	HiLink ProgressInclude		Include
++	HiLink ProgressMatrixDelimiter	Identifier
++	HiLink ProgressNumber		Number
++	HiLink ProgressOperator		Operator
++	HiLink ProgressPreProc		PreProc
++	HiLink ProgressProcedure	Procedure
++	HiLink ProgressQuote		Delimiter
++	HiLink ProgressRepeat		Repeat
++	HiLink ProgressReserved		Statement
++	HiLink ProgressSpaceError	Error
++	HiLink ProgressString		String
++	HiLink ProgressTodo		Todo
++	HiLink ProgressType		Statement
++	HiLink ProgressShowTab		Error
+ 
+-  delcommand HiLink
++	delcommand HiLink
+ endif
+ 
+ let b:current_syntax = "progress"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8 sw=8
+diff -Naur vim73.orig/runtime/syntax/prolog.vim vim73/runtime/syntax/prolog.vim
+--- vim73.orig/runtime/syntax/prolog.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/prolog.vim	2013-06-07 17:07:25.475602600 +0000
+@@ -1,8 +1,8 @@
+ " Vim syntax file
+ " Language:    PROLOG
+ " Maintainers: Thomas Koehler <jean-luc@picard.franken.de>
+-" Last Change: 2009 Dec 04
+-" URL:	       http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
++" Last Change: 2013 May 23
++" URL:         http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/prolog.vim
+ 
+ " There are two sets of highlighting in here:
+ " If the "prolog_highlighting_clean" variable exists, it is rather sparse.
+@@ -21,14 +21,14 @@
+ " Very simple highlighting for comments, clause heads and
+ " character codes.  It respects prolog strings and atoms.
+ 
+-syn region   prologCComment	start=+/\*+ end=+\*/+
+-syn match    prologComment	+%.*+
++syn region   prologCComment start=+/\*+ end=+\*/+
++syn match    prologComment  +%.*+
+ 
+-syn keyword  prologKeyword	module meta_predicate multifile dynamic
+-syn match    prologCharCode	+0'\\\=.+
+-syn region   prologString      start=+"+ skip=+\\\\\|\\"+ end=+"+
+-syn region   prologAtom                start=+'+ skip=+\\\\\|\\'+ end=+'+
+-syn region   prologClauseHead   start=+^[a-z][^(]*(+ skip=+\.[^		]+ end=+:-\|\.$\|\.[	 ]\|-->+ contains=prologComment,prologCComment,prologString
++syn keyword  prologKeyword  module meta_predicate multifile dynamic
++syn match    prologCharCode +0'\\\=.+
++syn region   prologString   start=+"+ skip=+\\\\\|\\"+ end=+"+
++syn region   prologAtom     start=+'+ skip=+\\\\\|\\'+ end=+'+
++syn region   prologClause   matchgroup=prologClauseHead start=+^\s*[a-z]\w*+ matchgroup=Normal end=+\.\s\|\.$+ contains=ALLBUT,prologClause
+ 
+ if !exists("prolog_highlighting_clean")
+ 
+@@ -40,12 +40,12 @@
+   syn keyword prologKeyword   arg     current_prolog_flag     put_char
+   syn keyword prologKeyword   asserta fail    put_code
+   syn keyword prologKeyword   assertz findall read
+-  syn keyword prologKeyword   at_end_of_stream	      float   read_term
++  syn keyword prologKeyword   at_end_of_stream        float   read_term
+   syn keyword prologKeyword   atom    flush_output    repeat
+   syn keyword prologKeyword   atom_chars      functor retract
+-  syn keyword prologKeyword   atom_codes      get_byte	      set_input
+-  syn keyword prologKeyword   atom_concat     get_char	      set_output
+-  syn keyword prologKeyword   atom_length     get_code	      set_prolog_flag
++  syn keyword prologKeyword   atom_codes      get_byte        set_input
++  syn keyword prologKeyword   atom_concat     get_char        set_output
++  syn keyword prologKeyword   atom_length     get_code        set_prolog_flag
+   syn keyword prologKeyword   atomic  halt    set_stream_position
+   syn keyword prologKeyword   bagof   integer setof
+   syn keyword prologKeyword   call    is      stream_property
+@@ -54,7 +54,7 @@
+   syn keyword prologKeyword   char_conversion number  true
+   syn keyword prologKeyword   clause  number_chars    unify_with_occurs_check
+   syn keyword prologKeyword   close   number_codes    var
+-  syn keyword prologKeyword   compound	      once    write
++  syn keyword prologKeyword   compound        once    write
+   syn keyword prologKeyword   copy_term       op      write_canonical
+   syn keyword prologKeyword   current_char_conversion open    write_term
+   syn keyword prologKeyword   current_input   peek_byte       writeq
+@@ -63,11 +63,13 @@
+   syn match   prologOperator "=\\=\|=:=\|\\==\|=<\|==\|>=\|\\=\|\\+\|<\|>\|="
+   syn match   prologAsIs     "===\|\\===\|<=\|=>"
+ 
+-  syn match   prologNumber	      "\<[0123456789]*\>'\@!"
++  syn match   prologNumber            "\<[0123456789]*\>'\@!"
+   syn match   prologCommentError      "\*/"
+   syn match   prologSpecialCharacter  ";"
+   syn match   prologSpecialCharacter  "!"
+-  syn match   prologQuestion	      "?-.*\."	contains=prologNumber
++  syn match   prologSpecialCharacter  ":-"
++  syn match   prologSpecialCharacter  "-->"
++  syn match   prologQuestion          "?-.*\."  contains=prologNumber
+ 
+ 
+ endif
+@@ -87,27 +89,29 @@
+   endif
+ 
+   " The default highlighting.
+-  HiLink prologComment		Comment
+-  HiLink prologCComment		Comment
+-  HiLink prologCharCode		Special
++  HiLink prologComment          Comment
++  HiLink prologCComment         Comment
++  HiLink prologCharCode         Special
+ 
+   if exists ("prolog_highlighting_clean")
+ 
+-    HiLink prologKeyword	Statement
+-    HiLink prologClauseHead	Statement
++    HiLink prologKeyword        Statement
++    HiLink prologClauseHead     Statement
++    HiLink prologClause Normal
+ 
+   else
+ 
+-    HiLink prologKeyword	Keyword
+-    HiLink prologClauseHead	Constant
+-    HiLink prologQuestion	PreProc
++    HiLink prologKeyword        Keyword
++    HiLink prologClauseHead     Constant
++    HiLink prologClause Normal
++    HiLink prologQuestion       PreProc
+     HiLink prologSpecialCharacter Special
+-    HiLink prologNumber		Number
+-    HiLink prologAsIs		Normal
+-    HiLink prologCommentError	Error
+-    HiLink prologAtom		String
+-    HiLink prologString		String
+-    HiLink prologOperator	Operator
++    HiLink prologNumber         Number
++    HiLink prologAsIs           Normal
++    HiLink prologCommentError   Error
++    HiLink prologAtom           String
++    HiLink prologString         String
++    HiLink prologOperator       Operator
+ 
+   endif
+ 
+diff -Naur vim73.orig/runtime/syntax/python.vim vim73/runtime/syntax/python.vim
+--- vim73.orig/runtime/syntax/python.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/python.vim	2013-06-07 17:07:25.562269019 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Python
+ " Maintainer:	Neil Schemenauer <nas@python.ca>
+-" Last Change:	2009-10-13
++" Last Change:	2013 Feb 26
+ " Credits:	Zvezdan Petkovic <zpetkovic@acm.org>
+ "		Neil Schemenauer <nas@python.ca>
+ "		Dmitry Vasiliev
+@@ -45,6 +45,11 @@
+   finish
+ endif
+ 
++" We need nocompatible mode in order to continue lines with backslashes.
++" Original setting will be restored.
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Keep Python keywords in alphabetical order inside groups for easy
+ " comparison with the table in the 'Python Language Reference'
+ " http://docs.python.org/reference/lexical_analysis.html#keywords.
+@@ -231,7 +236,7 @@
+ " Notice that the end of a string, either ''', or """, will end the contained
+ " doctest too.  Thus, we do *not* need to have it as an end pattern.
+ if !exists("python_no_doctest_highlight")
+-  if !exists("python_no_doctest_code_higlight")
++  if !exists("python_no_doctest_code_highlight")
+     syn region pythonDoctest
+ 	  \ start="^\s*>>>\s" end="^\s*$"
+ 	  \ contained contains=ALLBUT,pythonDoctest,@Spell
+@@ -292,4 +297,7 @@
+ 
+ let b:current_syntax = "python"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim:set sw=2 sts=2 ts=8 noet:
+diff -Naur vim73.orig/runtime/syntax/r.vim vim73/runtime/syntax/r.vim
+--- vim73.orig/runtime/syntax/r.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/r.vim	2013-06-07 17:07:25.595602257 +0000
+@@ -1,111 +1,221 @@
+ " Vim syntax file
+-" Language:	R (GNU S)
+-" Maintainer:	Vaidotas Zemlys <zemlys@gmail.com>
+-" Last Change:  2006 Apr 30
+-" Filenames:	*.R *.Rout *.r *.Rhistory *.Rt *.Rout.save *.Rout.fail
+-" URL:		http://uosis.mif.vu.lt/~zemlys/vim-syntax/r.vim
+-
+-" First maintainer Tom Payne <tom@tompayne.org>
+-" Modified to make syntax less colourful and added the highlighting of
+-" R assignment arrow
+-
+-" For version 5.x: Clear all syntax items
+-" For version 6.x: Quit when a syntax file was already loaded
+-if version < 600
+-  syntax clear
+-elseif exists("b:current_syntax")
++" Language:	      R (GNU S)
++" Maintainer:	      Jakson Aquino <jalvesaq@gmail.com>
++" Former Maintainers: Vaidotas Zemlys <zemlys@gmail.com>
++" 		      Tom Payne <tom@tompayne.org>
++" Last Change:	      Sun May 19, 2013  05:59PM
++" Filenames:	      *.R *.r *.Rhistory *.Rt
++" 
++" NOTE: The highlighting of R functions is defined in the
++" r-plugin/functions.vim, which is part of vim-r-plugin2:
++" http://www.vim.org/scripts/script.php?script_id=2628
++"
++" CONFIGURATION:
++"   syntax folding can be turned on by
++"
++"      let r_syntax_folding = 1
++"
++" Some lines of code were borrowed from Zhuojun Chen.
++
++if exists("b:current_syntax")
+   finish
+ endif
+ 
+-if version >= 600
+-  setlocal iskeyword=@,48-57,_,.
+-else
+-  set iskeyword=@,48-57,_,.
++setlocal iskeyword=@,48-57,_,.
++
++if exists("g:r_syntax_folding")
++  setlocal foldmethod=syntax
+ endif
+ 
+ syn case match
+ 
+ " Comment
+-syn match rComment /\#.*/
++syn match rComment contains=@Spell "#.*"
+ 
+-" Constant
+-" string enclosed in double quotes
+-syn region rString start=/"/ skip=/\\\\\|\\"/ end=/"/
+-" string enclosed in single quotes
+-syn region rString start=/'/ skip=/\\\\\|\\'/ end=/'/
+-" number with no fractional part or exponent
+-syn match rNumber /\d\+/
+-" floating point number with integer and fractional parts and optional exponent
+-syn match rFloat /\d\+\.\d*\([Ee][-+]\=\d\+\)\=/
+-" floating point number with no integer part and optional exponent
+-syn match rFloat /\.\d\+\([Ee][-+]\=\d\+\)\=/
+-" floating point number with no fractional part and optional exponent
+-syn match rFloat /\d\+[Ee][-+]\=\d\+/
++" Roxygen
++syn match rOKeyword contained "@\(param\|return\|name\|rdname\|examples\|include\|docType\)"
++syn match rOKeyword contained "@\(S3method\|TODO\|aliases\|alias\|assignee\|author\|callGraphDepth\|callGraph\)"
++syn match rOKeyword contained "@\(callGraphPrimitives\|concept\|exportClass\|exportMethod\|exportPattern\|export\|formals\)"
++syn match rOKeyword contained "@\(format\|importClassesFrom\|importFrom\|importMethodsFrom\|import\|keywords\)"
++syn match rOKeyword contained "@\(method\|nord\|note\|references\|seealso\|setClass\|slot\|source\|title\|usage\)"
++syn match rOComment contains=@Spell,rOKeyword "#'.*"
++
++
++if &filetype == "rhelp"
++  " string enclosed in double quotes
++  syn region rString contains=rSpecial,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
++  " string enclosed in single quotes
++  syn region rString contains=rSpecial,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
++else
++  " string enclosed in double quotes
++  syn region rString contains=rSpecial,rStrError,@Spell start=/"/ skip=/\\\\\|\\"/ end=/"/
++  " string enclosed in single quotes
++  syn region rString contains=rSpecial,rStrError,@Spell start=/'/ skip=/\\\\\|\\'/ end=/'/
++endif
++
++syn match rStrError display contained "\\."
+ 
+-" Identifier
+-" identifier with leading letter and optional following keyword characters
+-syn match rIdentifier /\a\k*/
+-" identifier with leading period, one or more digits, and at least one non-digit keyword character
+-syn match rIdentifier /\.\d*\K\k*/
++
++" New line, carriage return, tab, backspace, bell, feed, vertical tab, backslash
++syn match rSpecial display contained "\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
++
++" Hexadecimal and Octal digits
++syn match rSpecial display contained "\\\(x\x\{1,2}\|[0-8]\{1,3}\)"
++
++" Unicode characters
++syn match rSpecial display contained "\\u\x\{1,4}"
++syn match rSpecial display contained "\\U\x\{1,8}"
++syn match rSpecial display contained "\\u{\x\{1,4}}"
++syn match rSpecial display contained "\\U{\x\{1,8}}"
+ 
+ " Statement
+ syn keyword rStatement   break next return
+ syn keyword rConditional if else
+ syn keyword rRepeat      for in repeat while
+ 
+-" Constant
+-syn keyword rConstant LETTERS letters month.ab month.name pi
++" Constant (not really)
++syn keyword rConstant T F LETTERS letters month.abb month.name pi
++syn keyword rConstant R.version.string
++
++syn keyword rNumber   NA_integer_ NA_real_ NA_complex_ NA_character_ 
++
++" Constants
+ syn keyword rConstant NULL
+ syn keyword rBoolean  FALSE TRUE
+-syn keyword rNumber   NA
+-syn match rArrow /<\{1,2}-/
++syn keyword rNumber   NA Inf NaN 
+ 
+-" Type
+-syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame 
++" integer
++syn match rInteger "\<\d\+L"
++syn match rInteger "\<0x\([0-9]\|[a-f]\|[A-F]\)\+L"
++syn match rInteger "\<\d\+[Ee]+\=\d\+L"
++
++" number with no fractional part or exponent
++syn match rNumber "\<\d\+\>"
++" hexadecimal number 
++syn match rNumber "\<0x\([0-9]\|[a-f]\|[A-F]\)\+"
++
++" floating point number with integer and fractional parts and optional exponent
++syn match rFloat "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\="
++" floating point number with no integer part and optional exponent
++syn match rFloat "\<\.\d\+\([Ee][-+]\=\d\+\)\="
++" floating point number with no fractional part and optional exponent
++syn match rFloat "\<\d\+[Ee][-+]\=\d\+"
++
++" complex number
++syn match rComplex "\<\d\+i"
++syn match rComplex "\<\d\++\d\+i"
++syn match rComplex "\<0x\([0-9]\|[a-f]\|[A-F]\)\+i"
++syn match rComplex "\<\d\+\.\d*\([Ee][-+]\=\d\+\)\=i"
++syn match rComplex "\<\.\d\+\([Ee][-+]\=\d\+\)\=i"
++syn match rComplex "\<\d\+[Ee][-+]\=\d\+i"
++
++syn match rOperator    "&"
++syn match rOperator    '-'
++syn match rOperator    '\*'
++syn match rOperator    '+'
++syn match rOperator    '='
++if &filetype != "rmd" && &filetype != "rrst"
++  syn match rOperator    "[|!<>^~/:]"
++else
++  syn match rOperator    "[|!<>^~`/:]"
++endif
++syn match rOperator    "%\{2}\|%\S*%"
++syn match rOpError  '\*\{3}'
++syn match rOpError  '//'
++syn match rOpError  '&&&'
++syn match rOpError  '|||'
++syn match rOpError  '<<'
++syn match rOpError  '>>'
++
++syn match rArrow "<\{1,2}-"
++syn match rArrow "->\{1,2}"
+ 
+ " Special
+-syn match rDelimiter /[,;:]/
++syn match rDelimiter "[,;:]"
+ 
+ " Error
+-syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
+-syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
+-syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
+-syn match rError      /[)\]}]/
+-syn match rBraceError /[)}]/ contained
+-syn match rCurlyError /[)\]]/ contained
+-syn match rParenError /[\]}]/ contained
++if exists("g:r_syntax_folding")
++  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError fold
++  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError fold
++  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError fold
++else
++  syn region rRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rError,rBraceError,rCurlyError
++  syn region rRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rError,rBraceError,rParenError
++  syn region rRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rError,rCurlyError,rParenError
++endif
+ 
+-" Define the default highlighting.
+-" For version 5.7 and earlier: only when not done already
+-" For version 5.8 and later: only when an item doesn't have highlighting yet
+-if version >= 508 || !exists("did_r_syn_inits")
+-  if version < 508
+-    let did_r_syn_inits = 1
+-    command -nargs=+ HiLink hi link <args>
+-  else
+-    command -nargs=+ HiLink hi def link <args>
+-  endif
+-  HiLink rComment     Comment
+-  HiLink rConstant    Constant
+-  HiLink rString      String
+-  HiLink rNumber      Number
+-  HiLink rBoolean     Boolean
+-  HiLink rFloat       Float
+-  HiLink rStatement   Statement
+-  HiLink rConditional Conditional
+-  HiLink rRepeat      Repeat
+-  HiLink rIdentifier  Normal
+-  HiLink rArrow	      Statement	
+-  HiLink rType        Type
+-  HiLink rDelimiter   Delimiter
+-  HiLink rError       Error
+-  HiLink rBraceError  Error
+-  HiLink rCurlyError  Error
+-  HiLink rParenError  Error
+-  delcommand HiLink
++syn match rError      "[)\]}]"
++syn match rBraceError "[)}]" contained
++syn match rCurlyError "[)\]]" contained
++syn match rParenError "[\]}]" contained
++
++" Source list of R functions. The list is produced by the Vim-R-plugin
++" http://www.vim.org/scripts/script.php?script_id=2628
++runtime r-plugin/functions.vim
++
++syn match rDollar display contained "\$"
++syn match rDollar display contained "@"
++
++" List elements will not be highlighted as functions:
++syn match rLstElmt "\$[a-zA-Z0-9\\._]*" contains=rDollar
++syn match rLstElmt "@[a-zA-Z0-9\\._]*" contains=rDollar
++
++" Functions that may add new objects
++syn keyword rPreProc     library require attach detach source
++
++if &filetype == "rhelp"
++    syn match rHelpIdent '\\method'
++    syn match rHelpIdent '\\S4method'
+ endif
+ 
++" Type
++syn keyword rType array category character complex double function integer list logical matrix numeric vector data.frame 
++
++" Name of object with spaces
++if &filetype != "rmd" && &filetype != "rrst"
++  syn region rNameWSpace start="`" end="`"
++endif
++
++if &filetype == "rhelp"
++  syn match rhPreProc "^#ifdef.*" 
++  syn match rhPreProc "^#endif.*" 
++  syn match rhSection "\\dontrun\>"
++endif
++
++" Define the default highlighting.
++hi def link rArrow       Statement	
++hi def link rBoolean     Boolean
++hi def link rBraceError  Error
++hi def link rComment     Comment
++hi def link rOComment    Comment
++hi def link rComplex     Number
++hi def link rConditional Conditional
++hi def link rConstant    Constant
++hi def link rCurlyError  Error
++hi def link rDelimiter   Delimiter
++hi def link rDollar      SpecialChar
++hi def link rError       Error
++hi def link rFloat       Float
++hi def link rFunction    Function
++hi def link rHelpIdent   Identifier
++hi def link rhPreProc    PreProc
++hi def link rhSection    PreCondit
++hi def link rInteger     Number
++hi def link rLstElmt	 Normal
++hi def link rNameWSpace  Normal
++hi def link rNumber      Number
++hi def link rOperator    Operator
++hi def link rOpError     Error
++hi def link rParenError  Error
++hi def link rPreProc     PreProc
++hi def link rRepeat      Repeat
++hi def link rSpecial     SpecialChar
++hi def link rStatement   Statement
++hi def link rString      String
++hi def link rStrError    Error
++hi def link rType        Type
++hi def link rOKeyword    Title
++
+ let b:current_syntax="r"
+ 
+ " vim: ts=8 sw=2
+-
+diff -Naur vim73.orig/runtime/syntax/ratpoison.vim vim73/runtime/syntax/ratpoison.vim
+--- vim73.orig/runtime/syntax/ratpoison.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/ratpoison.vim	2013-06-07 17:07:25.625602171 +0000
+@@ -1,8 +1,9 @@
+ " Vim syntax file
+ " Language:	Ratpoison configuration/commands file ( /etc/ratpoisonrc ~/.ratpoisonrc )
+-" Maintainer:	Doug Kearns <djkea2@gus.gscit.monash.edu.au>
+-" URL:		http://gus.gscit.monash.edu.au/~djkea2/vim/syntax/ratpoison.vim
+-" Last Change:	2005 Oct 06
++" Maintainer:	Magnus Woldrich <m@japh.se>
++" URL:		http://github.com/trapd00r/vim-syntax-ratpoison
++" Last Change:	2011 Apr 11
++" Previous Maintainer:	Doug Kearns <djkea2@gus.gscit.monash.edu.au>
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -94,6 +95,13 @@
+ syn keyword ratpoisonSetArg	bgcolor
+ syn keyword ratpoisonSetArg	border		contained nextgroup=ratpoisonNumberArg
+ syn keyword ratpoisonSetArg	fgcolor
++syn keyword ratpoisonSetArg	fwcolor
++syn keyword ratpoisonSetArg	bwcolor
++syn keyword ratpoisonSetArg	historysize
++syn keyword ratpoisonSetArg	historycompaction
++syn keyword ratpoisonSetArg	historyexpansion
++syn keyword ratpoisonSetArg	topkmap
++syn keyword ratpoisonSetArg	barinpadding
+ syn keyword ratpoisonSetArg	font
+ syn keyword ratpoisonSetArg	framesels
+ syn keyword ratpoisonSetArg	inputwidth	contained nextgroup=ratpoisonNumberArg
+diff -Naur vim73.orig/runtime/syntax/rcs.vim vim73/runtime/syntax/rcs.vim
+--- vim73.orig/runtime/syntax/rcs.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/rcs.vim	2013-06-07 17:07:25.648935438 +0000
+@@ -1,10 +1,10 @@
+ " Vim syntax file
+ " Language:     RCS file
+-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
+-" URL:          http://www.hlabs.spb.ru/vim/rcs.vim
+-" Revision:     $Id: rcs.vim,v 1.2 2006/03/27 16:41:00 vimboss Exp $
++" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
++" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/rcs.vim
++" Last Change:  2012-02-11
+ " Filenames:    *,v
+-" Version:      1.11
++" Version:      1.12
+ 
+ " Options:
+ "   rcs_folding = 1   For folding strings
+diff -Naur vim73.orig/runtime/syntax/readline.vim vim73/runtime/syntax/readline.vim
+--- vim73.orig/runtime/syntax/readline.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/readline.vim	2013-06-07 17:07:25.685602000 +0000
+@@ -1,11 +1,11 @@
+ " Vim syntax file
+ " Language:         readline(3) configuration file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2009-05-25
++" Latest Revision:  2012-04-25
+ "   readline_has_bash - if defined add support for bash specific
+ "                       settings/functions
+ 
+-if exists("b:current_syntax")
++if exists('b:current_syntax')
+   finish
+ endif
+ 
+@@ -14,163 +14,382 @@
+ 
+ setlocal iskeyword+=-
+ 
+-syn keyword readlineTodo        contained TODO FIXME XXX NOTE
++syn match   readlineKey         contained
++                              \ '\S'
++                              \ nextgroup=readlineKeyTerminator
++
++syn match   readlineBegin       display '^'
++                              \ nextgroup=readlineComment,
++                              \           readlineConditional,
++                              \           readlineInclude,
++                              \           readlineKeyName,
++                              \           readlineKey,
++                              \           readlineKeySeq,
++                              \           readlineKeyword
++                              \ skipwhite
++
++syn region  readlineComment     contained display oneline
++                                \ start='#'
++                                \ end='$'
++                                \ contains=readlineTodo,
++                                \          @Spell
++
++syn keyword readlineTodo        contained
++                              \ TODO
++                              \ FIXME
++                              \ XXX
++                              \ NOTE
++
++syn match   readlineConditional contained
++                              \ '$if\>'
++                              \ nextgroup=readlineTest,
++                              \           readlineTestApp
++                              \ skipwhite
++
++syn keyword readlineTest        contained
++                              \ mode
++                              \ nextgroup=readlineTestModeEq
++
++syn match   readlineTestModeEq  contained
++                              \ '='
++                              \ nextgroup=readlineEditingMode
++
++syn keyword readlineTest        contained
++                              \ term
++                              \ nextgroup=readlineTestTermEq
++
++syn match   readlineTestTermEq  contained
++                              \ '='
++                              \ nextgroup=readlineTestTerm
++
++syn match   readlineTestTerm    contained
++                              \ '\S\+'
++
++syn match   readlineTestApp     contained
++                              \ '\S\+'
++
++syn match   readlineConditional contained display
++                              \ '$\%(else\|endif\)\>'
++
++syn match   readlineInclude     contained display
++                              \ '$include\>'
++                              \ nextgroup=readlinePath
+ 
+-syn region  readlineComment     display oneline start='^\s*#' end='$'
+-                                \ contains=readlineTodo,@Spell
+-
+-syn match   readlineString      '^\s*[A-Za-z-]\+:'me=e-1 contains=readlineKeys
+-syn region  readlineString      display oneline start=+"+ skip=+\\\\\|\\"+
+-                                \ end=+"+ contains=readlineKeysTwo
++syn match   readlinePath        contained display
++                              \ '.\+'
+ 
+ syn case ignore
+-syn keyword readlineKeys        contained Control Meta Del Esc Escape LFD
+-                                \ Newline Ret Return Rubout Space Spc Tab
++syn match   readlineKeyName     contained display
++                              \ nextgroup=readlineKeySeparator,
++                              \           readlineKeyTerminator
++                              \ '\%(Control\|Del\|Esc\|Escape\|LFD\|Meta\|Newline\|Ret\|Return\|Rubout\|Space\|Spc\|Tab\)'
+ syn case match
+ 
+-syn match   readlineKeysTwo     contained display
+-                                \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{3}\)+
+-
+-syn match   readlineKeymaps     contained display
+-                                \ 'emacs\(-standard\|-meta\|-ctlx\)\='
+-syn match   readlineKeymaps     contained display
+-                                \ 'vi\(-move\|-command\|-insert\)\='
+-
+-syn keyword readlineBellStyles  contained audible visible none
+-
+-syn match   readlineNumber      contained display '\<\d\+\>'
++syn match   readlineKeySeparator  contained
++                                \ '-'
++                                \ nextgroup=readlineKeyName,
++                                \           readlineKey
++
++syn match   readlineKeyTerminator contained
++                                \ ':'
++                                \ nextgroup=readlineFunction
++                                \ skipwhite
++
++syn region  readlineKeySeq     contained display oneline
++                              \ start=+"+
++                              \ skip=+\\\\\|\\"+
++                              \ end=+"+
++                              \ contains=readlineKeyEscape
++                              \ nextgroup=readlineKeyTerminator
++
++syn match   readlineKeyEscape   contained display
++                              \ +\\\([CM]-\|[e\\"'abdfnrtv]\|\o\{3}\|x\x\{2}\)+
++
++syn keyword readlineKeyword     contained
++                              \ set
++                              \ nextgroup=readlineVariable
++                              \ skipwhite
++
++syn keyword readlineVariable    contained 
++                              \ nextgroup=readlineBellStyle
++                              \ skipwhite
++                              \ bell-style
++
++syn keyword readlineVariable    contained
++                              \ nextgroup=readlineBoolean
++                              \ skipwhite
++                              \ bind-tty-special-chars
++                              \ completion-ignore-case
++                              \ completion-map-case
++                              \ convert-meta
++                              \ disable-completion
++                              \ echo-control-characters
++                              \ enable-keypad
++                              \ enable-meta-key
++                              \ expand-tilde
++                              \ history-preserve-point
++                              \ horizontal-scroll-mode
++                              \ input-meta
++                              \ meta-flag
++                              \ mark-directories
++                              \ mark-modified-lines
++                              \ mark-symlinked-directories
++                              \ match-hidden-files
++                              \ menu-complete-display-prefix
++                              \ output-meta
++                              \ page-completions
++                              \ print-completions-horizontally
++                              \ revert-all-at-newline
++                              \ show-all-if-ambiguous
++                              \ show-all-if-unmodified
++                              \ skip-completed-text
++                              \ visible-stats
++
++syn keyword readlineVariable    contained
++                              \ nextgroup=readlineString
++                              \ skipwhite
++                              \ comment-begin
++                              \ isearch-terminators
++
++syn keyword readlineVariable    contained
++                              \ nextgroup=readlineNumber
++                              \ skipwhite
++                              \ completion-display-width
++                              \ completion-prefix-display-length
++                              \ completion-query-items
++                              \ history-size
++
++syn keyword readlineVariable    contained
++                              \ nextgroup=readlineEditingMode
++                              \ skipwhite
++                              \ editing-mode
++
++syn keyword readlineVariable    contained
++                              \ nextgroup=readlineKeymap
++                              \ skipwhite
++                              \ keymap
++
++syn keyword readlineBellStyle   contained
++                              \ audible
++                              \ visible
++                              \ none
+ 
+ syn case ignore
+-syn keyword readlineBoolean     contained on off
++syn keyword readlineBoolean     contained
++                              \ on
++                              \ off
+ syn case match
+ 
+-syn keyword readlineIfOps       contained mode term
+-
+-syn region  readlineConditional display oneline transparent
+-                                \ matchgroup=readlineConditional
+-                                \ start='^\s*$if' end="$"
+-                                \ contains=readlineIfOps,readlineKeymaps
+-syn match   readlineConditional display '^\s*$\(else\|endif\)\>'
+-
+-syn match   readlineInclude     display '^\s*$include\>'
+-
+-syn region  readlineSet         display oneline transparent
+-                                \ matchgroup=readlineKeyword start='^\s*set\>'
+-                                \ end="$"me=e-1 contains=readlineNumber,
+-                                \ readlineBoolean,readlineKeymaps,
+-                                \ readlineBellStyles,readlineSettings
+-
+-syn keyword readlineSettings    contained bell-style comment-begin
+-                                \ completion-ignore-case completion-query-items
+-                                \ convert-meta disable-completion editing-mode
+-                                \ enable-keypad expand-tilde
+-                                \ horizontal-scroll-mode mark-directories
+-                                \ keymap mark-modified-lines meta-flag
+-                                \ input-meta output-meta
+-                                \ print-completions-horizontally
+-                                \ show-all-if-ambiguous visible-stats
+-                                \ prefer-visible-bell blink-matching-paren
+-                                \ match-hidden-files history-preserve-point
+-                                \ isearch-terminators
+-
+-syn region  readlineBinding     display oneline transparent
+-                                \ matchgroup=readlineKeyword start=':' end='$'
+-                                \ contains=readlineKeys,readlineFunctions
+-
+-syn keyword readlineFunctions   contained display
+-                                \ beginning-of-line end-of-line forward-char
+-                                \ backward-char forward-word backward-word
+-                                \ clear-screen redraw-current-line
+-                                \ accept-line previous-history
+-                                \ next-history beginning-of-history
+-                                \ end-of-history reverse-search-history
+-                                \ forward-search-history
+-                                \ non-incremental-reverse-search-history
+-                                \ non-incremental-forward-search-history
+-                                \ history-search-forward
+-                                \ history-search-backward
+-                                \ yank-nth-arg yank-last-arg
+-                                \ delete-char backward-delete-char
+-                                \ forward-backward-delete-char quoted-insert
+-                                \ tab-insert self-insert transpose-chars
+-                                \ transpose-words upcase-word downcase-word
+-                                \ capitalize-word overwrite-mode kill-line
+-                                \ backward-kill-line unix-line-discard
+-                                \ kill-whole-line kill-word backward-kill-word
+-                                \ unix-word-rubout unix-filename-rubout
+-                                \ delete-horizontal-space kill-region
+-                                \ copy-region-as-kill copy-backward-word
+-                                \ copy-forward-word yank yank-pop
+-                                \ digit-argument universal-argument complete
+-                                \ possible-completions insert-completions
+-                                \ menu-complete delete-char-or-list
+-                                \ start-kbd-macro end-kbd-macro
+-                                \ call-last-kbd-macro re-read-init-file
+-                                \ abort do-uppercase-version prefix-meta
+-                                \ undo revert-line tilde-expand set-mark
+-                                \ exchange-point-and-mark character-search
+-                                \ character-search-backward insert-comment
+-                                \ dump-functions dump-variables dump-macros
+-                                \ emacs-editing-mode vi-editing-mode
+-                                \ vi-complete vi-char-search vi-redo
+-                                \ vi-search vi-arg-digit vi-append-eol
+-                                \ vi-prev-word vi-change-to vi-delete-to
+-                                \ vi-end-word vi-fetch-history vi-insert-beg
+-                                \ vi-search-again vi-put vi-replace
+-                                \ vi-subst vi-yank-to vi-first-print
+-                                \ vi-yank-arg vi-goto-mark vi-append-mode
+-                                \ vi-insertion-mode prev-history vi-set-mark
+-                                \ vi-search-again vi-put vi-change-char
+-                                \ vi-subst vi-delete vi-yank-to
+-                                \ vi-column vi-change-case vi-overstrike
+-                                \ vi-overstrike-delete do-lowercase-version
+-                                \ delete-char-or-list tty-status
+-                                \ arrow-key-prefix vi-back-to-indent vi-bword
+-                                \ vi-bWord vi-eword vi-eWord vi-fword vi-fWord
+-                                \ vi-next-word
+-                                \ vi-movement-mode
++syn region  readlineString      contained display oneline
++                              \ matchgroup=readlineStringDelimiter
++                              \ start=+"+
++                              \ skip=+\\\\\|\\"+
++                              \ end=+"+
++
++syn match   readlineNumber      contained display
++                              \ '[+-]\d\+\>'
++
++syn keyword readlineEditingMode contained
++                              \ emacs
++                              \ vi
++
++syn match   readlineKeymap      contained display
++                              \ 'emacs\%(-\%(standard\|meta\|ctlx\)\)\=\|vi\%(-\%(move\|command\|insert\)\)\='
++
++syn keyword readlineFunction    contained
++                              \ beginning-of-line
++                              \ end-of-line
++                              \ forward-char
++                              \ backward-char
++                              \ forward-word
++                              \ backward-word
++                              \ clear-screen
++                              \ redraw-current-line
++                              \
++                              \ accept-line
++                              \ previous-history
++                              \ next-history
++                              \ beginning-of-history
++                              \ end-of-history
++                              \ reverse-search-history
++                              \ forward-search-history
++                              \ non-incremental-reverse-search-history
++                              \ non-incremental-forward-search-history
++                              \ history-search-forward
++                              \ history-search-backward
++                              \ yank-nth-arg
++                              \ yank-last-arg
++                              \
++                              \ delete-char
++                              \ backward-delete-char
++                              \ forward-backward-delete-char
++                              \ quoted-insert
++                              \ tab-insert
++                              \ self-insert
++                              \ transpose-chars
++                              \ transpose-words
++                              \ upcase-word
++                              \ downcase-word
++                              \ capitalize-word
++                              \ overwrite-mode
++                              \
++                              \ kill-line
++                              \ backward-kill-line
++                              \ unix-line-discard
++                              \ kill-whole-line
++                              \ kill-word
++                              \ backward-kill-word
++                              \ unix-word-rubout
++                              \ unix-filename-rubout
++                              \ delete-horizontal-space
++                              \ kill-region
++                              \ copy-region-as-kill
++                              \ copy-backward-word
++                              \ copy-forward-word
++                              \ yank
++                              \ yank-pop
++                              \
++                              \ digit-argument
++                              \ universal-argument
++                              \
++                              \ complete
++                              \ possible-completions
++                              \ insert-completions
++                              \ menu-complete
++                              \ menu-complete-backward
++                              \ delete-char-or-list
++                              \
++                              \ start-kbd-macro
++                              \ end-kbd-macro
++                              \ call-last-kbd-macro
++                              \
++                              \ re-read-init-file
++                              \ abort
++                              \ do-uppercase-version
++                              \ prefix-meta
++                              \ undo
++                              \ revert-line
++                              \ tilde-expand
++                              \ set-mark
++                              \ exchange-point-and-mark
++                              \ character-search
++                              \ character-search-backward
++                              \ skip-csi-sequence
++                              \ insert-comment
++                              \ dump-functions
++                              \ dump-variables
++                              \ dump-macros
++                              \ emacs-editing-mode
++                              \ vi-editing-mode
++                              \
++                              \ vi-eof-maybe
++                              \ vi-movement-mode
++                              \ vi-undo
++                              \ vi-match
++                              \ vi-tilde-expand
++                              \ vi-complete
++                              \ vi-char-search
++                              \ vi-redo
++                              \ vi-search
++                              \ vi-arg-digit
++                              \ vi-append-eol
++                              \ vi-prev-word
++                              \ vi-change-to
++                              \ vi-delete-to
++                              \ vi-end-word
++                              \ vi-char-search
++                              \ vi-fetch-history
++                              \ vi-insert-beg
++                              \ vi-search-again
++                              \ vi-put
++                              \ vi-replace
++                              \ vi-subst
++                              \ vi-char-search
++                              \ vi-next-word
++                              \ vi-yank-to
++                              \ vi-first-print
++                              \ vi-yank-arg
++                              \ vi-goto-mark
++                              \ vi-append-mode
++                              \ vi-prev-word
++                              \ vi-change-to
++                              \ vi-delete-to
++                              \ vi-end-word
++                              \ vi-char-search
++                              \ vi-insert-mode
++                              \ vi-set-mark
++                              \ vi-search-again
++                              \ vi-put
++                              \ vi-change-char
++                              \ vi-subst
++                              \ vi-char-search
++                              \ vi-undo
++                              \ vi-next-word
++                              \ vi-delete
++                              \ vi-yank-to
++                              \ vi-column
++                              \ vi-change-case
+ 
+ if exists("readline_has_bash")
+-  syn keyword readlineFunctions contained
+-                                \ shell-expand-line history-expand-line
+-                                \ magic-space alias-expand-line
+-                                \ history-and-alias-expand-line
+-                                \ insert-last-argument operate-and-get-next
+-                                \ forward-backward-delete-char
+-                                \ delete-char-or-list complete-filename
+-                                \ possible-filename-completions
+-                                \ complete-username
+-                                \ possible-username-completions
+-                                \ complete-variable
+-                                \ possible-variable-completions
+-                                \ complete-hostname
+-                                \ possible-hostname-completions
+-                                \ complete-command
+-                                \ possible-command-completions
+-                                \ dynamic-complete-history
+-                                \ complete-into-braces
+-                                \ glob-expand-word glob-list-expansions
+-                                \ display-shell-version glob-complete-word
+-                                \ edit-and-execute-command
++  syn keyword readlineFunction  contained
++                              \ shell-expand-line
++                              \ history-expand-line
++                              \ magic-space
++                              \ alias-expand-line
++                              \ history-and-alias-expand-line
++                              \ insert-last-argument
++                              \ operate-and-get-next
++                              \ forward-backward-delete-char
++                              \ delete-char-or-list
++                              \ complete-filename
++                              \ possible-filename-completions
++                              \ complete-username
++                              \ possible-username-completions
++                              \ complete-variable
++                              \ possible-variable-completions
++                              \ complete-hostname
++                              \ possible-hostname-completions
++                              \ complete-command
++                              \ possible-command-completions
++                              \ dynamic-complete-history
++                              \ complete-into-braces
++                              \ glob-expand-word
++                              \ glob-list-expansions
++                              \ display-shell-version
++                              \ glob-complete-word
++                              \ edit-and-execute-command
+ endif
+ 
+-hi def link readlineComment     Comment
+-hi def link readlineTodo        Todo
+-hi def link readlineString      String
+-hi def link readlineKeys        SpecialChar
+-hi def link readlineKeysTwo     SpecialChar
+-hi def link readlineKeymaps     Constant
+-hi def link readlineBellStyles  Constant
+-hi def link readlineNumber      Number
+-hi def link readlineBoolean     Boolean
+-hi def link readlineIfOps       Type
+-hi def link readlineConditional Conditional
+-hi def link readlineInclude     Include
+-hi def link readlineKeyword     Keyword
+-hi def link readlineSettings    Type
+-hi def link readlineFunctions   Type
++hi def link readlineKey           readlineKeySeq
++hi def link readlineComment       Comment
++hi def link readlineTodo          Todo
++hi def link readlineConditional   Conditional
++hi def link readlineTest          Type
++hi def link readlineDelimiter     Delimiter
++hi def link readlineTestModeEq    readlineEq
++hi def link readlineTestTermEq    readlineEq
++hi def link readlineTestTerm      readlineString
++hi def link readlineTestAppEq     readlineEq
++hi def link readlineTestApp       readlineString
++hi def link readlineInclude       Include
++hi def link readlinePath          String
++hi def link readlineKeyName       SpecialChar
++hi def link readlineKeySeparator  readlineKeySeq
++hi def link readlineKeyTerminator readlineDelimiter
++hi def link readlineKeySeq        String
++hi def link readlineKeyEscape     SpecialChar
++hi def link readlineKeyword       Keyword
++hi def link readlineVariable      Identifier
++hi def link readlineBellStyle     Constant
++hi def link readlineBoolean       Boolean
++hi def link readlineString        String
++hi def link readlineStringDelimiter readlineString
++hi def link readlineNumber        Number
++hi def link readlineEditingMode   Constant
++hi def link readlineKeymap        Constant
++hi def link readlineFunction      Function
+ 
+-let b:current_syntax = "readline"
++let b:current_syntax = 'readline'
+ 
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/redif.vim vim73/runtime/syntax/redif.vim
+--- vim73.orig/runtime/syntax/redif.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/redif.vim	2013-06-07 17:07:25.712268590 +0000
+@@ -0,0 +1,972 @@
++" Vim syntax file
++" Language:          ReDIF
++" Maintainer:        Axel Castellane <axel.castellane@polytechnique.edu>
++" Last Change:       2013 April 17
++" Original Author:   Axel Castellane
++" Source:            http://openlib.org/acmes/root/docu/redif_1.html
++" File Extension:    rdf
++" Note:              The ReDIF format is used by RePEc.
++
++" To be compatible with Vim 5.8 use:
++if version < 600
++  syntax clear
++elseif exists("b:current_syntax")
++  finish
++endif
++
++" ReDIF is case-insensitive
++syntax case ignore
++
++" Structure: Some fields determine what fields can come next. For example:
++"       Template-Type
++"       *-Name
++"       File-URL
++"       *-Institution
++" Those fields span a syntax region over several lines so that these regions
++" can only contain their respective items.
++
++" Any line which is not a correct template or part of an argument is an error.
++" This comes at the very beginning, so it has the lowest priority and will
++" only match if nothing else did.
++syntax match redifWrongLine /^.\+/ display
++
++highlight def link redifWrongLine redifError
++
++" Comments must start with # and it must be the first character of the line,
++" otherwise I believe that they are considered as part of an argument.
++syntax match redifComment /^#.*/ containedin=ALL display
++
++" Defines the 9 possible multi-lines regions of Template-Type and the fields
++" they can contain.
++syntax region redifRegionTemplatePaper start=/^Template-Type:\_s*ReDIF-Paper \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPaper,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
++syntax region redifRegionTemplateArticle start=/^Template-Type:\_s*ReDIF-Article \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArticle,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
++syntax region redifRegionTemplateChapter start=/^Template-Type:\_s*ReDIF-Chapter \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsChapter,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
++syntax region redifRegionTemplateBook start=/^Template-Type:\_s*ReDIF-Book \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsBook,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
++syntax region redifRegionTemplateSoftware start=/^Template-Type:\_s*ReDIF-Software \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSoftware,redifWrongLine,redifRegionClusterAuthor,redifRegionClusterFile fold
++syntax region redifRegionTemplateArchive start=/^Template-Type:\_s*ReDIF-Archive \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsArchive,redifWrongLine fold
++syntax region redifRegionTemplateSeries start=/^Template-Type:\_s*ReDIF-Series \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsSeries,redifWrongLine,redifRegionClusterProvider,redifRegionClusterPublisher,redifRegionClusterEditor fold
++syntax region redifRegionTemplateInstitution start=/^Template-Type:\_s*ReDIF-Institution \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsInstitution,redifWrongLine,redifRegionClusterPrimary,redifRegionClusterSecondary,redifRegionClusterTertiary,redifRegionClusterQuaternary fold
++syntax region redifRegionTemplatePerson start=/^Template-Type:\_s*ReDIF-Person \d\+\.\d\+/ end=/^Template-Type:/me=s-1 contains=redifContainerFieldsPerson,redifWrongLine,redifRegionClusterWorkplace fold
++
++" All fields are foldable (These come before clusters, so they have lower
++" priority). So they are contained in a foldable syntax region.
++syntax region redifContainerFieldsPaper start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldRevisionDate,redifFieldPublicationStatus,redifFieldNote,redifFieldLength,redifFieldSeries,redifFieldAvailability,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsArticle start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldLanguage,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationStatus,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldRestriction,redifFieldPrice,redifFieldNotification,redifFieldPublicationType,redifFieldJournal,redifFieldVolume,redifFieldYear,redifFieldIssue,redifFieldMonth,redifFieldPages,redifFieldNumber,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsChapter start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldContactEmail,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldBookTitle,redifFieldYear,redifFieldMonth,redifFieldPages,redifFieldChapter,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldInBook,redifFieldOrderURL,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsBook start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTitle,redifFieldHandleOfWork,redifFieldContactEmail,redifFieldYear,redifFieldMonth,redifFieldVolume,redifFieldEdition,redifFieldSeries,redifFieldISBN,redifFieldPublicationStatus,redifFieldNote,redifFieldAbstract,redifFieldClassificationJEL,redifFieldKeywords,redifFieldHasChapter,redifFieldPrice,redifFieldOrderURL,redifFieldNumber,redifFieldCreationDate,redifFieldPublicationDate,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsSoftware start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfWork,redifFieldTitle,redifFieldProgrammingLanguage,redifFieldAbstract,redifFieldNumber,redifFieldVersion,redifFieldClassificationJEL,redifFieldKeywords,redifFieldSize,redifFieldSeries,redifFieldCreationDate,redifFieldRevisionDate,redifFieldNote,redifFieldRequires,redifFieldArticleHandle,redifFieldBookHandle,redifFieldChapterHandle,redifFieldPaperHandle,redifFieldSoftwareHandle,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsArchive start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfArchive,redifFieldURL,redifFieldMaintainerEmail,redifFieldName,redifFieldMaintainerName,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldClassificationJEL,redifFieldHomepage,redifFieldDescription,redifFieldNotification,redifFieldRestriction,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsSeries start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldName,redifFieldHandleOfSeries,redifFieldMaintainerEmail,redifFieldType,redifFieldOrderEmail,redifFieldOrderHomepage,redifFieldOrderPostal,redifFieldPrice,redifFieldRestriction,redifFieldMaintainerPhone,redifFieldMaintainerFax,redifFieldMaintainerName,redifFieldDescription,redifFieldClassificationJEL,redifFieldKeywords,redifFieldNotification,redifFieldISSN,redifFieldFollowup,redifFieldPredecessor,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsInstitution start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfInstitution,redifFieldPrimaryDefunct,redifFieldSecondaryDefunct,redifFieldTertiaryDefunct,redifFieldTemplateType,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsPerson start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldHandleOfPerson,redifFieldNameFull,redifFieldNameFirst,redifFieldNameLast,redifFieldNamePrefix,redifFieldNameMiddle,redifFieldNameSuffix,redifFieldNameASCII,redifFieldEmail,redifFieldHomepage,redifFieldFax,redifFieldPostal,redifFieldPhone,redifFieldWorkplaceOrganization,redifFieldAuthorPaper,redifFieldAuthorArticle,redifFieldAuthorSoftware,redifFieldAuthorBook,redifFieldAuthorChapter,redifFieldEditorBook,redifFieldEditorSeries,redifFieldClassificationJEL,redifFieldShortId,redifFieldLastLoginDate,redifFieldRegisteredDate,redifWrongLine contained transparent fold
++
++" Defines the 10 possible clusters and what they can contain
++" A field not in the cluster ends the cluster.
++syntax region redifRegionClusterWorkplace start=/^Workplace-Name:/ skip=/^Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsWorkplace fold
++syntax region redifRegionClusterPrimary start=/^Primary-Name:/ skip=/^Primary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPrimary fold
++syntax region redifRegionClusterSecondary start=/^Secondary-Name:/ skip=/^Secondary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsSecondary fold
++syntax region redifRegionClusterTertiary start=/^Tertiary-Name:/ skip=/^Tertiary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsTertiary fold
++syntax region redifRegionClusterQuaternary start=/^Quaternary-Name:/ skip=/^Quaternary-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsQuaternary fold
++syntax region redifRegionClusterProvider start=/^Provider-Name:/ skip=/^Provider-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsProvider fold
++syntax region redifRegionClusterPublisher start=/^Publisher-Name:/ skip=/^Publisher-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsPublisher fold
++syntax region redifRegionClusterAuthor start=/^Author-Name:/ skip=/^Author-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterAuthorWorkplace,redifContainerFieldsAuthor fold
++syntax region redifRegionClusterEditor start=/^Editor-Name:/ skip=/^Editor-\%(Name\%(-First\|-Last\)\|Homepage\|Email\|Fax\|Postal\|Phone\|Person\|Workplace-Name\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifRegionClusterEditorWorkplace,redifContainerFieldsEditor fold
++syntax region redifRegionClusterFile start=/^File-URL:/ skip=/^File-\%(Format\|Function\|Size\|Restriction\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsFile fold
++
++" The foldable containers of the clusters.
++syntax region redifContainerFieldsWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldWorkplaceName,redifFieldWorkplaceHomepage,redifFieldWorkplaceNameEnglish,redifFieldWorkplacePostal,redifFieldWorkplaceLocation,redifFieldWorkplaceEmail,redifFieldWorkplacePhone,redifFieldWorkplaceFax,redifFieldWorkplaceInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsPrimary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPrimaryName,redifFieldPrimaryHomepage,redifFieldPrimaryNameEnglish,redifFieldPrimaryPostal,redifFieldPrimaryLocation,redifFieldPrimaryEmail,redifFieldPrimaryPhone,redifFieldPrimaryFax,redifFieldPrimaryInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsSecondary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldSecondaryName,redifFieldSecondaryHomepage,redifFieldSecondaryNameEnglish,redifFieldSecondaryPostal,redifFieldSecondaryLocation,redifFieldSecondaryEmail,redifFieldSecondaryPhone,redifFieldSecondaryFax,redifFieldSecondaryInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsTertiary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldTertiaryName,redifFieldTertiaryHomepage,redifFieldTertiaryNameEnglish,redifFieldTertiaryPostal,redifFieldTertiaryLocation,redifFieldTertiaryEmail,redifFieldTertiaryPhone,redifFieldTertiaryFax,redifFieldTertiaryInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsQuaternary start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldQuaternaryName,redifFieldQuaternaryHomepage,redifFieldQuaternaryNameEnglish,redifFieldQuaternaryPostal,redifFieldQuaternaryLocation,redifFieldQuaternaryEmail,redifFieldQuaternaryPhone,redifFieldQuaternaryFax,redifFieldQuaternaryInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsProvider start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldProviderName,redifFieldProviderHomepage,redifFieldProviderNameEnglish,redifFieldProviderPostal,redifFieldProviderLocation,redifFieldProviderEmail,redifFieldProviderPhone,redifFieldProviderFax,redifFieldProviderInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsPublisher start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldPublisherName,redifFieldPublisherHomepage,redifFieldPublisherNameEnglish,redifFieldPublisherPostal,redifFieldPublisherLocation,redifFieldPublisherEmail,redifFieldPublisherPhone,redifFieldPublisherFax,redifFieldPublisherInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsAuthor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorName,redifFieldAuthorNameFirst,redifFieldAuthorNameLast,redifFieldAuthorHomepage,redifFieldAuthorEmail,redifFieldAuthorFax,redifFieldAuthorPostal,redifFieldAuthorPhone,redifFieldAuthorPerson,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsEditor start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorName,redifFieldEditorNameFirst,redifFieldEditorNameLast,redifFieldEditorHomepage,redifFieldEditorEmail,redifFieldEditorFax,redifFieldEditorPostal,redifFieldEditorPhone,redifFieldEditorPerson,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsFile start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldFileURL,redifFieldFileFormat,redifFieldFileFunction,redifFieldFileSize,redifFieldFileRestriction,redifWrongLine contained transparent fold
++
++" The two clusters in cluster (must be presented after to have priority over
++" fields containers)
++syntax region redifRegionClusterAuthorWorkplace start=/^Author-Workplace-Name:/ skip=/^Author-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsAuthorWorkplace fold
++syntax region redifRegionClusterEditorWorkplace start=/^Editor-Workplace-Name:/ skip=/^Editor-Workplace-\%(Name-English\|Homepage\|Postal\|Location\|Email\|Phone\|Fax\|Institution\):/ end=/^\S\{-}:/me=s-1 contained contains=redifWrongLine,redifContainerFieldsEditorWorkplace fold
++
++" Their foldable fields containers
++syntax region redifContainerFieldsAuthorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldAuthorWorkplaceName,redifFieldAuthorWorkplaceHomepage,redifFieldAuthorWorkplaceNameEnglish,redifFieldAuthorWorkplacePostal,redifFieldAuthorWorkplaceLocation,redifFieldAuthorWorkplaceEmail,redifFieldAuthorWorkplacePhone,redifFieldAuthorWorkplaceFax,redifFieldAuthorWorkplaceInstitution,redifWrongLine contained transparent fold
++syntax region redifContainerFieldsEditorWorkplace start=/^\S\{-}:/ end=/^\S\{-}:/me=s-1 contains=redifFieldEditorWorkplaceName,redifFieldEditorWorkplaceHomepage,redifFieldEditorWorkplaceNameEnglish,redifFieldEditorWorkplacePostal,redifFieldEditorWorkplaceLocation,redifFieldEditorWorkplaceEmail,redifFieldEditorWorkplacePhone,redifFieldEditorWorkplaceFax,redifFieldEditorWorkplaceInstitution,redifWrongLine contained transparent fold
++
++" All the possible fields
++"     Note: The "Handle" field is handled a little bit differently, because it
++"     does not have the same meaning depending on the Template-Type. See:
++" 	  /redifFieldHandleOf....
++syntax match redifFieldAbstract /^Abstract:/ skipwhite skipempty nextgroup=redifArgumentAbstract contained
++syntax match redifFieldArticleHandle /^Article-Handle:/ skipwhite skipempty nextgroup=redifArgumentArticleHandle contained
++syntax match redifFieldAuthorArticle /^Author-Article:/ skipwhite skipempty nextgroup=redifArgumentAuthorArticle contained
++syntax match redifFieldAuthorBook /^Author-Book:/ skipwhite skipempty nextgroup=redifArgumentAuthorBook contained
++syntax match redifFieldAuthorChapter /^Author-Chapter:/ skipwhite skipempty nextgroup=redifArgumentAuthorChapter contained
++syntax match redifFieldAuthorEmail /^Author-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorEmail contained
++syntax match redifFieldAuthorFax /^Author-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorFax contained
++syntax match redifFieldAuthorHomepage /^Author-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorHomepage contained
++syntax match redifFieldAuthorName /^Author-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorName contained
++syntax match redifFieldAuthorNameFirst /^Author-Name-First:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameFirst contained
++syntax match redifFieldAuthorNameLast /^Author-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentAuthorNameLast contained
++syntax match redifFieldAuthorPaper /^Author-Paper:/ skipwhite skipempty nextgroup=redifArgumentAuthorPaper contained
++syntax match redifFieldAuthorPerson /^Author-Person:/ skipwhite skipempty nextgroup=redifArgumentAuthorPerson contained
++syntax match redifFieldAuthorPhone /^Author-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorPhone contained
++syntax match redifFieldAuthorPostal /^Author-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorPostal contained
++syntax match redifFieldAuthorSoftware /^Author-Software:/ skipwhite skipempty nextgroup=redifArgumentAuthorSoftware contained
++syntax match redifFieldAuthorWorkplaceEmail /^Author-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceEmail contained
++syntax match redifFieldAuthorWorkplaceFax /^Author-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceFax contained
++syntax match redifFieldAuthorWorkplaceHomepage /^Author-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceHomepage contained
++syntax match redifFieldAuthorWorkplaceInstitution /^Author-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceInstitution contained
++syntax match redifFieldAuthorWorkplaceLocation /^Author-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceLocation contained
++syntax match redifFieldAuthorWorkplaceName /^Author-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceName contained
++syntax match redifFieldAuthorWorkplaceNameEnglish /^Author-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplaceNameEnglish contained
++syntax match redifFieldAuthorWorkplacePhone /^Author-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePhone contained
++syntax match redifFieldAuthorWorkplacePostal /^Author-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentAuthorWorkplacePostal contained
++syntax match redifFieldAvailability /^Availability:/ skipwhite skipempty nextgroup=redifArgumentAvailability contained
++syntax match redifFieldBookHandle /^Book-Handle:/ skipwhite skipempty nextgroup=redifArgumentBookHandle contained
++syntax match redifFieldBookTitle /^Book-Title:/ skipwhite skipempty nextgroup=redifArgumentBookTitle contained
++syntax match redifFieldChapterHandle /^Chapter-Handle:/ skipwhite skipempty nextgroup=redifArgumentChapterHandle contained
++syntax match redifFieldChapter /^Chapter:/ skipwhite skipempty nextgroup=redifArgumentChapter contained
++syntax match redifFieldClassificationJEL /^Classification-JEL:/ skipwhite skipempty nextgroup=redifArgumentClassificationJEL contained
++syntax match redifFieldContactEmail /^Contact-Email:/ skipwhite skipempty nextgroup=redifArgumentContactEmail contained
++syntax match redifFieldCreationDate /^Creation-Date:/ skipwhite skipempty nextgroup=redifArgumentCreationDate contained
++syntax match redifFieldDescription /^Description:/ skipwhite skipempty nextgroup=redifArgumentDescription contained
++syntax match redifFieldEdition /^Edition:/ skipwhite skipempty nextgroup=redifArgumentEdition contained
++syntax match redifFieldEditorBook /^Editor-Book:/ skipwhite skipempty nextgroup=redifArgumentEditorBook contained
++syntax match redifFieldEditorEmail /^Editor-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorEmail contained
++syntax match redifFieldEditorFax /^Editor-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorFax contained
++syntax match redifFieldEditorHomepage /^Editor-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorHomepage contained
++syntax match redifFieldEditorName /^Editor-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorName contained
++syntax match redifFieldEditorNameFirst /^Editor-Name-First:/ skipwhite skipempty nextgroup=redifArgumentEditorNameFirst contained
++syntax match redifFieldEditorNameLast /^Editor-Name-Last:/ skipwhite skipempty nextgroup=redifArgumentEditorNameLast contained
++syntax match redifFieldEditorPerson /^Editor-Person:/ skipwhite skipempty nextgroup=redifArgumentEditorPerson contained
++syntax match redifFieldEditorPhone /^Editor-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorPhone contained
++syntax match redifFieldEditorPostal /^Editor-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorPostal contained
++syntax match redifFieldEditorSeries /^Editor-Series:/ skipwhite skipempty nextgroup=redifArgumentEditorSeries contained
++syntax match redifFieldEditorWorkplaceEmail /^Editor-Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceEmail contained
++syntax match redifFieldEditorWorkplaceFax /^Editor-Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceFax contained
++syntax match redifFieldEditorWorkplaceHomepage /^Editor-Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceHomepage contained
++syntax match redifFieldEditorWorkplaceInstitution /^Editor-Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceInstitution contained
++syntax match redifFieldEditorWorkplaceLocation /^Editor-Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceLocation contained
++syntax match redifFieldEditorWorkplaceName /^Editor-Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceName contained
++syntax match redifFieldEditorWorkplaceNameEnglish /^Editor-Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplaceNameEnglish contained
++syntax match redifFieldEditorWorkplacePhone /^Editor-Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePhone contained
++syntax match redifFieldEditorWorkplacePostal /^Editor-Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentEditorWorkplacePostal contained
++syntax match redifFieldEmail /^Email:/ skipwhite skipempty nextgroup=redifArgumentEmail contained
++syntax match redifFieldFax /^Fax:/ skipwhite skipempty nextgroup=redifArgumentFax contained
++syntax match redifFieldFileFormat /^File-Format:/ skipwhite skipempty nextgroup=redifArgumentFileFormat contained
++syntax match redifFieldFileFunction /^File-Function:/ skipwhite skipempty nextgroup=redifArgumentFileFunction contained
++syntax match redifFieldFileRestriction /^File-Restriction:/ skipwhite skipempty nextgroup=redifArgumentFileRestriction contained
++syntax match redifFieldFileSize /^File-Size:/ skipwhite skipempty nextgroup=redifArgumentFileSize contained
++syntax match redifFieldFileURL /^File-URL:/ skipwhite skipempty nextgroup=redifArgumentFileURL contained
++syntax match redifFieldFollowup /^Followup:/ skipwhite skipempty nextgroup=redifArgumentFollowup contained
++syntax match redifFieldHandleOfArchive /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfArchive contained
++syntax match redifFieldHandleOfInstitution /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfInstitution contained
++syntax match redifFieldHandleOfPerson /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfPerson contained
++syntax match redifFieldHandleOfSeries /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfSeries contained
++syntax match redifFieldHandleOfWork /^Handle:/ skipwhite skipempty nextgroup=redifArgumentHandleOfWork contained
++syntax match redifFieldHasChapter /^HasChapter:/ skipwhite skipempty nextgroup=redifArgumentHasChapter contained
++syntax match redifFieldHomepage /^Homepage:/ skipwhite skipempty nextgroup=redifArgumentHomepage contained
++syntax match redifFieldInBook /^In-Book:/ skipwhite skipempty nextgroup=redifArgumentInBook contained
++syntax match redifFieldISBN /^ISBN:/ skipwhite skipempty nextgroup=redifArgumentISBN contained
++syntax match redifFieldISSN /^ISSN:/ skipwhite skipempty nextgroup=redifArgumentISSN contained
++syntax match redifFieldIssue /^Issue:/ skipwhite skipempty nextgroup=redifArgumentIssue contained
++syntax match redifFieldJournal /^Journal:/ skipwhite skipempty nextgroup=redifArgumentJournal contained
++syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
++syntax match redifFieldKeywords /^Keywords:/ skipwhite skipempty nextgroup=redifArgumentKeywords contained
++syntax match redifFieldLanguage /^Language:/ skipwhite skipempty nextgroup=redifArgumentLanguage contained
++syntax match redifFieldLastLoginDate /^Last-Login-Date:/ skipwhite skipempty nextgroup=redifArgumentLastLoginDate contained
++syntax match redifFieldLength /^Length:/ skipwhite skipempty nextgroup=redifArgumentLength contained
++syntax match redifFieldMaintainerEmail /^Maintainer-Email:/ skipwhite skipempty nextgroup=redifArgumentMaintainerEmail contained
++syntax match redifFieldMaintainerFax /^Maintainer-Fax:/ skipwhite skipempty nextgroup=redifArgumentMaintainerFax contained
++syntax match redifFieldMaintainerName /^Maintainer-Name:/ skipwhite skipempty nextgroup=redifArgumentMaintainerName contained
++syntax match redifFieldMaintainerPhone /^Maintainer-Phone:/ skipwhite skipempty nextgroup=redifArgumentMaintainerPhone contained
++syntax match redifFieldMonth /^Month:/ skipwhite skipempty nextgroup=redifArgumentMonth contained
++syntax match redifFieldNameASCII /^Name-ASCII:/ skipwhite skipempty nextgroup=redifArgumentNameASCII contained
++syntax match redifFieldNameFirst /^Name-First:/ skipwhite skipempty nextgroup=redifArgumentNameFirst contained
++syntax match redifFieldNameFull /^Name-Full:/ skipwhite skipempty nextgroup=redifArgumentNameFull contained
++syntax match redifFieldNameLast /^Name-Last:/ skipwhite skipempty nextgroup=redifArgumentNameLast contained
++syntax match redifFieldNameMiddle /^Name-Middle:/ skipwhite skipempty nextgroup=redifArgumentNameMiddle contained
++syntax match redifFieldNamePrefix /^Name-Prefix:/ skipwhite skipempty nextgroup=redifArgumentNamePrefix contained
++syntax match redifFieldNameSuffix /^Name-Suffix:/ skipwhite skipempty nextgroup=redifArgumentNameSuffix contained
++syntax match redifFieldName /^Name:/ skipwhite skipempty nextgroup=redifArgumentName contained
++syntax match redifFieldNote /^Note:/ skipwhite skipempty nextgroup=redifArgumentNote contained
++syntax match redifFieldNotification /^Notification:/ skipwhite skipempty nextgroup=redifArgumentNotification contained
++syntax match redifFieldNumber /^Number:/ skipwhite skipempty nextgroup=redifArgumentNumber contained
++syntax match redifFieldOrderEmail /^Order-Email:/ skipwhite skipempty nextgroup=redifArgumentOrderEmail contained
++syntax match redifFieldOrderHomepage /^Order-Homepage:/ skipwhite skipempty nextgroup=redifArgumentOrderHomepage contained
++syntax match redifFieldOrderPostal /^Order-Postal:/ skipwhite skipempty nextgroup=redifArgumentOrderPostal contained
++syntax match redifFieldOrderURL /^Order-URL:/ skipwhite skipempty nextgroup=redifArgumentOrderURL contained
++syntax match redifFieldPages /^Pages:/ skipwhite skipempty nextgroup=redifArgumentPages contained
++syntax match redifFieldPaperHandle /^Paper-Handle:/ skipwhite skipempty nextgroup=redifArgumentPaperHandle contained
++syntax match redifFieldPhone /^Phone:/ skipwhite skipempty nextgroup=redifArgumentPhone contained
++syntax match redifFieldPostal /^Postal:/ skipwhite skipempty nextgroup=redifArgumentPostal contained
++syntax match redifFieldPredecessor /^Predecessor:/ skipwhite skipempty nextgroup=redifArgumentPredecessor contained
++syntax match redifFieldPrice /^Price:/ skipwhite skipempty nextgroup=redifArgumentPrice contained
++syntax match redifFieldPrimaryDefunct /^Primary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentPrimaryDefunct contained
++syntax match redifFieldPrimaryEmail /^Primary-Email:/ skipwhite skipempty nextgroup=redifArgumentPrimaryEmail contained
++syntax match redifFieldPrimaryFax /^Primary-Fax:/ skipwhite skipempty nextgroup=redifArgumentPrimaryFax contained
++syntax match redifFieldPrimaryHomepage /^Primary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentPrimaryHomepage contained
++syntax match redifFieldPrimaryInstitution /^Primary-Institution:/ skipwhite skipempty nextgroup=redifArgumentPrimaryInstitution contained
++syntax match redifFieldPrimaryLocation /^Primary-Location:/ skipwhite skipempty nextgroup=redifArgumentPrimaryLocation contained
++syntax match redifFieldPrimaryName /^Primary-Name:/ skipwhite skipempty nextgroup=redifArgumentPrimaryName contained
++syntax match redifFieldPrimaryNameEnglish /^Primary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentPrimaryNameEnglish contained
++syntax match redifFieldPrimaryPhone /^Primary-Phone:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPhone contained
++syntax match redifFieldPrimaryPostal /^Primary-Postal:/ skipwhite skipempty nextgroup=redifArgumentPrimaryPostal contained
++syntax match redifFieldProgrammingLanguage /^Programming-Language:/ skipwhite skipempty nextgroup=redifArgumentProgrammingLanguage contained
++syntax match redifFieldProviderEmail /^Provider-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
++syntax match redifFieldProviderFax /^Provider-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
++syntax match redifFieldProviderHomepage /^Provider-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
++syntax match redifFieldProviderInstitution /^Provider-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
++syntax match redifFieldProviderLocation /^Provider-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
++syntax match redifFieldProviderName /^Provider-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
++syntax match redifFieldProviderNameEnglish /^Provider-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
++syntax match redifFieldProviderPhone /^Provider-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
++syntax match redifFieldProviderPostal /^Provider-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
++syntax match redifFieldPublicationDate /^Publication-Date:/ skipwhite skipempty nextgroup=redifArgumentPublicationDate contained
++syntax match redifFieldPublicationStatus /^Publication-Status:/ skipwhite skipempty nextgroup=redifArgumentPublicationStatus contained
++syntax match redifFieldPublicationType /^Publication-Type:/ skipwhite skipempty nextgroup=redifArgumentPublicationType contained
++syntax match redifFieldQuaternaryEmail /^Quaternary-Email:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryEmail contained
++syntax match redifFieldQuaternaryFax /^Quaternary-Fax:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryFax contained
++syntax match redifFieldQuaternaryHomepage /^Quaternary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryHomepage contained
++syntax match redifFieldQuaternaryInstitution /^Quaternary-Institution:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryInstitution contained
++syntax match redifFieldQuaternaryLocation /^Quaternary-Location:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryLocation contained
++syntax match redifFieldQuaternaryName /^Quaternary-Name:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryName contained
++syntax match redifFieldQuaternaryNameEnglish /^Quaternary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryNameEnglish contained
++syntax match redifFieldQuaternaryPhone /^Quaternary-Phone:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPhone contained
++syntax match redifFieldQuaternaryPostal /^Quaternary-Postal:/ skipwhite skipempty nextgroup=redifArgumentQuaternaryPostal contained
++syntax match redifFieldRegisteredDate /^Registered-Date:/ skipwhite skipempty nextgroup=redifArgumentRegisteredDate contained
++syntax match redifFieldRequires /^Requires:/ skipwhite skipempty nextgroup=redifArgumentRequires contained
++syntax match redifFieldRestriction /^Restriction:/ skipwhite skipempty nextgroup=redifArgumentRestriction contained
++syntax match redifFieldRevisionDate /^Revision-Date:/ skipwhite skipempty nextgroup=redifArgumentRevisionDate contained
++syntax match redifFieldSecondaryDefunct /^Secondary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentSecondaryDefunct contained
++syntax match redifFieldSecondaryEmail /^Secondary-Email:/ skipwhite skipempty nextgroup=redifArgumentSecondaryEmail contained
++syntax match redifFieldSecondaryFax /^Secondary-Fax:/ skipwhite skipempty nextgroup=redifArgumentSecondaryFax contained
++syntax match redifFieldSecondaryHomepage /^Secondary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentSecondaryHomepage contained
++syntax match redifFieldSecondaryInstitution /^Secondary-Institution:/ skipwhite skipempty nextgroup=redifArgumentSecondaryInstitution contained
++syntax match redifFieldSecondaryLocation /^Secondary-Location:/ skipwhite skipempty nextgroup=redifArgumentSecondaryLocation contained
++syntax match redifFieldSecondaryName /^Secondary-Name:/ skipwhite skipempty nextgroup=redifArgumentSecondaryName contained
++syntax match redifFieldSecondaryNameEnglish /^Secondary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentSecondaryNameEnglish contained
++syntax match redifFieldSecondaryPhone /^Secondary-Phone:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPhone contained
++syntax match redifFieldSecondaryPostal /^Secondary-Postal:/ skipwhite skipempty nextgroup=redifArgumentSecondaryPostal contained
++syntax match redifFieldSeries /^Series:/ skipwhite skipempty nextgroup=redifArgumentSeries contained
++syntax match redifFieldShortId /^Short-Id:/ skipwhite skipempty nextgroup=redifArgumentShortId contained
++syntax match redifFieldSize /^Size:/ skipwhite skipempty nextgroup=redifArgumentSize contained
++syntax match redifFieldSoftwareHandle /^Software-Handle:/ skipwhite skipempty nextgroup=redifArgumentSoftwareHandle contained
++syntax match redifFieldTemplateType /^Template-Type:/ skipwhite skipempty nextgroup=redifArgumentTemplateType contained
++syntax match redifFieldTertiaryDefunct /^Tertiary-Defunct:/ skipwhite skipempty nextgroup=redifArgumentTertiaryDefunct contained
++syntax match redifFieldTertiaryEmail /^Tertiary-Email:/ skipwhite skipempty nextgroup=redifArgumentTertiaryEmail contained
++syntax match redifFieldTertiaryFax /^Tertiary-Fax:/ skipwhite skipempty nextgroup=redifArgumentTertiaryFax contained
++syntax match redifFieldTertiaryHomepage /^Tertiary-Homepage:/ skipwhite skipempty nextgroup=redifArgumentTertiaryHomepage contained
++syntax match redifFieldTertiaryInstitution /^Tertiary-Institution:/ skipwhite skipempty nextgroup=redifArgumentTertiaryInstitution contained
++syntax match redifFieldTertiaryLocation /^Tertiary-Location:/ skipwhite skipempty nextgroup=redifArgumentTertiaryLocation contained
++syntax match redifFieldTertiaryName /^Tertiary-Name:/ skipwhite skipempty nextgroup=redifArgumentTertiaryName contained
++syntax match redifFieldTertiaryNameEnglish /^Tertiary-Name-English:/ skipwhite skipempty nextgroup=redifArgumentTertiaryNameEnglish contained
++syntax match redifFieldTertiaryPhone /^Tertiary-Phone:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPhone contained
++syntax match redifFieldTertiaryPostal /^Tertiary-Postal:/ skipwhite skipempty nextgroup=redifArgumentTertiaryPostal contained
++syntax match redifFieldTitle /^Title:/ skipwhite skipempty nextgroup=redifArgumentTitle contained
++syntax match redifFieldType /^Type:/ skipwhite skipempty nextgroup=redifArgumentType contained
++syntax match redifFieldURL /^URL:/ skipwhite skipempty nextgroup=redifArgumentURL contained
++syntax match redifFieldVersion /^Version:/ skipwhite skipempty nextgroup=redifArgumentVersion contained
++syntax match redifFieldVolume /^Volume:/ skipwhite skipempty nextgroup=redifArgumentVolume contained
++syntax match redifFieldWorkplaceEmail /^Workplace-Email:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceEmail contained
++syntax match redifFieldWorkplaceFax /^Workplace-Fax:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceFax contained
++syntax match redifFieldWorkplaceHomepage /^Workplace-Homepage:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceHomepage contained
++syntax match redifFieldWorkplaceInstitution /^Workplace-Institution:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceInstitution contained
++syntax match redifFieldWorkplaceLocation /^Workplace-Location:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceLocation contained
++syntax match redifFieldWorkplaceName /^Workplace-Name:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceName contained
++syntax match redifFieldWorkplaceNameEnglish /^Workplace-Name-English:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceNameEnglish contained
++syntax match redifFieldWorkplaceOrganization /^Workplace-Organization:/ skipwhite skipempty nextgroup=redifArgumentWorkplaceOrganization contained
++syntax match redifFieldWorkplacePhone /^Workplace-Phone:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePhone contained
++syntax match redifFieldWorkplacePostal /^Workplace-Postal:/ skipwhite skipempty nextgroup=redifArgumentWorkplacePostal contained
++syntax match redifFieldYear /^Year:/ skipwhite skipempty nextgroup=redifArgumentYear contained
++
++highlight def link redifFieldAbstract redifField
++highlight def link redifFieldArticleHandle redifField
++highlight def link redifFieldAuthorArticle redifField
++highlight def link redifFieldAuthorBook redifField
++highlight def link redifFieldAuthorChapter redifField
++highlight def link redifFieldAuthorEmail redifField
++highlight def link redifFieldAuthorFax redifField
++highlight def link redifFieldAuthorHomepage redifField
++highlight def link redifFieldAuthorName redifField
++highlight def link redifFieldAuthorNameFirst redifField
++highlight def link redifFieldAuthorNameLast redifField
++highlight def link redifFieldAuthorPaper redifField
++highlight def link redifFieldAuthorPerson redifField
++highlight def link redifFieldAuthorPhone redifField
++highlight def link redifFieldAuthorPostal redifField
++highlight def link redifFieldAuthorSoftware redifField
++highlight def link redifFieldAuthorWorkplaceEmail redifField
++highlight def link redifFieldAuthorWorkplaceFax redifField
++highlight def link redifFieldAuthorWorkplaceHomepage redifField
++highlight def link redifFieldAuthorWorkplaceInstitution redifField
++highlight def link redifFieldAuthorWorkplaceLocation redifField
++highlight def link redifFieldAuthorWorkplaceName redifField
++highlight def link redifFieldAuthorWorkplaceNameEnglish redifField
++highlight def link redifFieldAuthorWorkplacePhone redifField
++highlight def link redifFieldAuthorWorkplacePostal redifField
++highlight def link redifFieldAvailability redifField
++highlight def link redifFieldBookHandle redifField
++highlight def link redifFieldBookTitle redifField
++highlight def link redifFieldChapterHandle redifField
++highlight def link redifFieldChapter redifField
++highlight def link redifFieldClassificationJEL redifField
++highlight def link redifFieldContactEmail redifField
++highlight def link redifFieldCreationDate redifField
++highlight def link redifFieldDescription redifField
++highlight def link redifFieldEdition redifField
++highlight def link redifFieldEditorBook redifField
++highlight def link redifFieldEditorEmail redifField
++highlight def link redifFieldEditorFax redifField
++highlight def link redifFieldEditorHomepage redifField
++highlight def link redifFieldEditorName redifField
++highlight def link redifFieldEditorNameFirst redifField
++highlight def link redifFieldEditorNameLast redifField
++highlight def link redifFieldEditorPerson redifField
++highlight def link redifFieldEditorPhone redifField
++highlight def link redifFieldEditorPostal redifField
++highlight def link redifFieldEditorSeries redifField
++highlight def link redifFieldEditorWorkplaceEmail redifField
++highlight def link redifFieldEditorWorkplaceFax redifField
++highlight def link redifFieldEditorWorkplaceHomepage redifField
++highlight def link redifFieldEditorWorkplaceInstitution redifField
++highlight def link redifFieldEditorWorkplaceLocation redifField
++highlight def link redifFieldEditorWorkplaceName redifField
++highlight def link redifFieldEditorWorkplaceNameEnglish redifField
++highlight def link redifFieldEditorWorkplacePhone redifField
++highlight def link redifFieldEditorWorkplacePostal redifField
++highlight def link redifFieldEmail redifField
++highlight def link redifFieldFax redifField
++highlight def link redifFieldFileFormat redifField
++highlight def link redifFieldFileFunction redifField
++highlight def link redifFieldFileRestriction redifField
++highlight def link redifFieldFileSize redifField
++highlight def link redifFieldFileURL redifField
++highlight def link redifFieldFollowup redifField
++highlight def link redifFieldHandleOfArchive redifField
++highlight def link redifFieldHandleOfInstitution redifField
++highlight def link redifFieldHandleOfPerson redifField
++highlight def link redifFieldHandleOfSeries redifField
++highlight def link redifFieldHandleOfWork redifField
++highlight def link redifFieldHasChapter redifField
++highlight def link redifFieldHomepage redifField
++highlight def link redifFieldInBook redifField
++highlight def link redifFieldISBN redifField
++highlight def link redifFieldISSN redifField
++highlight def link redifFieldIssue redifField
++highlight def link redifFieldJournal redifField
++highlight def link redifFieldKeywords redifField
++highlight def link redifFieldKeywords redifField
++highlight def link redifFieldLanguage redifField
++highlight def link redifFieldLastLoginDate redifField
++highlight def link redifFieldLength redifField
++highlight def link redifFieldMaintainerEmail redifField
++highlight def link redifFieldMaintainerFax redifField
++highlight def link redifFieldMaintainerName redifField
++highlight def link redifFieldMaintainerPhone redifField
++highlight def link redifFieldMonth redifField
++highlight def link redifFieldNameASCII redifField
++highlight def link redifFieldNameFirst redifField
++highlight def link redifFieldNameFull redifField
++highlight def link redifFieldNameLast redifField
++highlight def link redifFieldNameMiddle redifField
++highlight def link redifFieldNamePrefix redifField
++highlight def link redifFieldNameSuffix redifField
++highlight def link redifFieldName redifField
++highlight def link redifFieldNote redifField
++highlight def link redifFieldNotification redifField
++highlight def link redifFieldNumber redifField
++highlight def link redifFieldOrderEmail redifField
++highlight def link redifFieldOrderHomepage redifField
++highlight def link redifFieldOrderPostal redifField
++highlight def link redifFieldOrderURL redifField
++highlight def link redifFieldPages redifField
++highlight def link redifFieldPaperHandle redifField
++highlight def link redifFieldPhone redifField
++highlight def link redifFieldPostal redifField
++highlight def link redifFieldPredecessor redifField
++highlight def link redifFieldPrice redifField
++highlight def link redifFieldPrimaryDefunct redifField
++highlight def link redifFieldPrimaryEmail redifField
++highlight def link redifFieldPrimaryFax redifField
++highlight def link redifFieldPrimaryHomepage redifField
++highlight def link redifFieldPrimaryInstitution redifField
++highlight def link redifFieldPrimaryLocation redifField
++highlight def link redifFieldPrimaryName redifField
++highlight def link redifFieldPrimaryNameEnglish redifField
++highlight def link redifFieldPrimaryPhone redifField
++highlight def link redifFieldPrimaryPostal redifField
++highlight def link redifFieldProgrammingLanguage redifField
++highlight def link redifFieldProviderEmail redifField
++highlight def link redifFieldProviderFax redifField
++highlight def link redifFieldProviderHomepage redifField
++highlight def link redifFieldProviderInstitution redifField
++highlight def link redifFieldProviderLocation redifField
++highlight def link redifFieldProviderName redifField
++highlight def link redifFieldProviderNameEnglish redifField
++highlight def link redifFieldProviderPhone redifField
++highlight def link redifFieldProviderPostal redifField
++highlight def link redifFieldPublicationDate redifField
++highlight def link redifFieldPublicationStatus redifField
++highlight def link redifFieldPublicationType redifField
++highlight def link redifFieldQuaternaryEmail redifField
++highlight def link redifFieldQuaternaryFax redifField
++highlight def link redifFieldQuaternaryHomepage redifField
++highlight def link redifFieldQuaternaryInstitution redifField
++highlight def link redifFieldQuaternaryLocation redifField
++highlight def link redifFieldQuaternaryName redifField
++highlight def link redifFieldQuaternaryNameEnglish redifField
++highlight def link redifFieldQuaternaryPhone redifField
++highlight def link redifFieldQuaternaryPostal redifField
++highlight def link redifFieldRegisteredDate redifField
++highlight def link redifFieldRequires redifField
++highlight def link redifFieldRestriction redifField
++highlight def link redifFieldRevisionDate redifField
++highlight def link redifFieldSecondaryDefunct redifField
++highlight def link redifFieldSecondaryEmail redifField
++highlight def link redifFieldSecondaryFax redifField
++highlight def link redifFieldSecondaryHomepage redifField
++highlight def link redifFieldSecondaryInstitution redifField
++highlight def link redifFieldSecondaryLocation redifField
++highlight def link redifFieldSecondaryName redifField
++highlight def link redifFieldSecondaryNameEnglish redifField
++highlight def link redifFieldSecondaryPhone redifField
++highlight def link redifFieldSecondaryPostal redifField
++highlight def link redifFieldSeries redifField
++highlight def link redifFieldShortId redifField
++highlight def link redifFieldSize redifField
++highlight def link redifFieldSoftwareHandle redifField
++highlight def link redifFieldTemplateType redifField
++highlight def link redifFieldTertiaryDefunct redifField
++highlight def link redifFieldTertiaryEmail redifField
++highlight def link redifFieldTertiaryFax redifField
++highlight def link redifFieldTertiaryHomepage redifField
++highlight def link redifFieldTertiaryInstitution redifField
++highlight def link redifFieldTertiaryLocation redifField
++highlight def link redifFieldTertiaryName redifField
++highlight def link redifFieldTertiaryNameEnglish redifField
++highlight def link redifFieldTertiaryPhone redifField
++highlight def link redifFieldTertiaryPostal redifField
++highlight def link redifFieldTitle redifField
++highlight def link redifFieldTitle redifField
++highlight def link redifFieldType redifField
++highlight def link redifFieldURL redifField
++highlight def link redifFieldVersion redifField
++highlight def link redifFieldVolume redifField
++highlight def link redifFieldWorkplaceEmail redifField
++highlight def link redifFieldWorkplaceFax redifField
++highlight def link redifFieldWorkplaceHomepage redifField
++highlight def link redifFieldWorkplaceInstitution redifField
++highlight def link redifFieldWorkplaceLocation redifField
++highlight def link redifFieldWorkplaceName redifField
++highlight def link redifFieldWorkplaceNameEnglish redifField
++highlight def link redifFieldWorkplaceOrganization redifField
++highlight def link redifFieldWorkplacePhone redifField
++highlight def link redifFieldWorkplacePostal redifField
++highlight def link redifFieldYear redifField
++
++" Deprecated
++"     same as Provider-*
++"     nextgroup=redifArgumentProvider*
++syntax match redifFieldPublisherEmail /^Publisher-Email:/ skipwhite skipempty nextgroup=redifArgumentProviderEmail contained
++syntax match redifFieldPublisherFax /^Publisher-Fax:/ skipwhite skipempty nextgroup=redifArgumentProviderFax contained
++syntax match redifFieldPublisherHomepage /^Publisher-Homepage:/ skipwhite skipempty nextgroup=redifArgumentProviderHomepage contained
++syntax match redifFieldPublisherInstitution /^Publisher-Institution:/ skipwhite skipempty nextgroup=redifArgumentProviderInstitution contained
++syntax match redifFieldPublisherLocation /^Publisher-Location:/ skipwhite skipempty nextgroup=redifArgumentProviderLocation contained
++syntax match redifFieldPublisherName /^Publisher-Name:/ skipwhite skipempty nextgroup=redifArgumentProviderName contained
++syntax match redifFieldPublisherNameEnglish /^Publisher-Name-English:/ skipwhite skipempty nextgroup=redifArgumentProviderNameEnglish contained
++syntax match redifFieldPublisherPhone /^Publisher-Phone:/ skipwhite skipempty nextgroup=redifArgumentProviderPhone contained
++syntax match redifFieldPublisherPostal /^Publisher-Postal:/ skipwhite skipempty nextgroup=redifArgumentProviderPostal contained
++
++highlight def link redifFieldPublisherEmail redifFieldDeprecated
++highlight def link redifFieldPublisherFax redifFieldDeprecated
++highlight def link redifFieldPublisherHomepage redifFieldDeprecated
++highlight def link redifFieldPublisherInstitution redifFieldDeprecated
++highlight def link redifFieldPublisherLocation redifFieldDeprecated
++highlight def link redifFieldPublisherName redifFieldDeprecated
++highlight def link redifFieldPublisherNameEnglish redifFieldDeprecated
++highlight def link redifFieldPublisherPhone redifFieldDeprecated
++highlight def link redifFieldPublisherPostal redifFieldDeprecated
++
++" Standard arguments
++"    By default, they contain all the argument until another field is started:
++"        start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1
++"    For arguments that must not span more than one line, use a match:
++"        /\%(^\S\{-}:\)\@!\S.*/
++"        AND ADD "display"
++"    This is faster.
++"
++"    Those arguments are not highlighted so far. They are here for future
++"    extensions.
++"    TODO Find more RegEx for these arguments
++"    	TODO Fax, Phone
++"    	TODO URL, Homepage
++"    	TODO Keywords
++"    	TODO Classification-JEL
++"    	TODO Short-Id, Author-Person, Editor-Person
++"
++"    Arguments that may span several lines:
++syntax region redifArgumentAuthorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentFileFunction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentIssue start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentJournal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentOrderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrice start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrimaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrimaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentProviderLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentProviderPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentQuaternaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentQuaternaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentRequires start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSecondaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSecondaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentTertiaryLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentTertiaryPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentVersion start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplacePostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++
++" Arguments that may not span several lines:
++"    If you are sure that these arguments cannot span several lines, change
++"    them to a match:
++"        /\%(^\S\{-}:\)\@!\S.*/
++"    AND ADD "display" after "contained"
++"        You can use this command on each line that you want to change:
++"        :s+\Vregion \(\w\+\) start=/\\%(^\\S\\{-}:\\)\\@!\\S/ end=/^\\S\\{-}:/me=s-1 contained+match \1 /\\%(^\\S\\{-}:\\)\\@!\\S.*/ contained display
++syntax region redifArgumentAuthorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorPostal start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentAuthorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorPerson start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorWorkplaceLocation start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentEditorWorkplacePhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentFileURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentMaintainerFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentMaintainerName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentMaintainerPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentNameFirst start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentNameFull start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentNameLast start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentNameMiddle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentNamePrefix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentNameSuffix start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentNumber start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentOrderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentOrderURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrimaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrimaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrimaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrimaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentPrimaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentProviderFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentProviderHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentProviderName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentProviderNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentProviderPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentQuaternaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentQuaternaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentQuaternaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentQuaternaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentQuaternaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSecondaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSecondaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSecondaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSecondaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSecondaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentSeries start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentShortId start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentTertiaryFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentTertiaryHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentTertiaryName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentTertiaryNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentTertiaryPhone start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentURL start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplaceFax start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplaceHomepage start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplaceName start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplaceNameEnglish start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++syntax region redifArgumentWorkplaceOrganization start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contained
++
++" Special arguments
++"    Those arguments require special values
++"    TODO Improve some RegEx
++"    	TODO Improve Emails
++"    	TODO Improve ISBN
++"    	TODO Improve ISSN
++"    	TODO Improve spell check (add words from economics.
++"    	   expl=macroeconometrics, Schumpeterian, IS-LM, etc.)
++"
++"    Template-Type
++syntax match redifArgumentTemplateType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectTemplateType contained display
++syntax match redifCorrectTemplateType /ReDIF-\%(Paper\|Article\|Chapter\|Book\|Software\|Archive\|Series\|Institution\|Person\)/ nextgroup=redifTemplateVersionNumberContainer contained display
++syntax match redifTemplateVersionNumberContainer /.\+/ contains=redifTemplateVersionNumber contained display
++syntax match redifTemplateVersionNumber / \d\+\.\d\+/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentTemplateType redifError
++highlight def link redifCorrectTemplateType Constant
++highlight def link redifTemplateVersionNumber Number
++highlight def link redifTemplateVersionNumberContainer redifError
++
++"    Handles:
++"
++"        Handles of Works:
++syntax match redifArgumentHandleOfWork /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentAuthorArticle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentAuthorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentAuthorChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentAuthorPaper /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentAuthorSoftware /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentEditorBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentEditorSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentInBook /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentHasChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentArticleHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentBookHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentChapterHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentPaperHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifArgumentSoftwareHandle /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfWork contained display
++syntax match redifCorrectHandleOfWork /RePEc:\a\a\a:\%(_\@!\w\)\{6}:\S\+/ contains=redifForbiddenCharactersInHandle,redifBestPracticeInHandle nextgroup=redifWrongLineEnding contained display
++" TODO Are those characters really forbidden???
++syntax match redifForbiddenCharactersInHandle /[\/*?"<>|]/ contained display
++syntax match redifBestPracticeInHandle /\<\%([vi]:[1-9]\d*\|y:[1-9]\d\{3}\|p:[1-9]\d*-[1-9]\d*\|i:\%(jan\|feb\|mar\|apr\|may\|jun\|jul\|aug\|sep\|oct\|nov\|dec\|spr\|sum\|aut\|win\|spe\|Q[1-4]\|\d\d-\d\d\)\|Q:[1-4]\)\>/ contained display
++
++highlight def link redifArgumentHandleOfWork redifError
++highlight def link redifArgumentAuthorArticle redifError
++highlight def link redifArgumentAuthorBook redifError
++highlight def link redifArgumentAuthorChapter redifError
++highlight def link redifArgumentAuthorPaper redifError
++highlight def link redifArgumentAuthorSoftware redifError
++highlight def link redifArgumentEditorBook redifError
++highlight def link redifArgumentEditorSeries redifError
++highlight def link redifArgumentInBook redifError
++highlight def link redifArgumentHasChapter redifError
++highlight def link redifArgumentArticleHandle redifError
++highlight def link redifArgumentBookHandle redifError
++highlight def link redifArgumentChapterHandle redifError
++highlight def link redifArgumentPaperHandle redifError
++highlight def link redifArgumentSoftwareHandle redifError
++highlight def link redifForbiddenCharactersInHandle redifError
++highlight def link redifBestPracticeInHandle redifSpecial
++
++"        Handles of Series:
++syntax match redifArgumentHandleOfSeries /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
++syntax match redifArgumentFollowup /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
++syntax match redifArgumentPredecessor /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfSeries contained display
++syntax match redifCorrectHandleOfSeries /RePEc:\a\a\a:\%(_\@!\w\)\{6}/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentHandleOfSeries redifError
++highlight def link redifArgumentFollowup redifError
++highlight def link redifArgumentPredecessor redifError
++
++"        Handles of Archives:
++syntax match redifArgumentHandleOfArchive /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfArchive contained display
++syntax match redifCorrectHandleOfArchive /RePEc:\a\a\a/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentHandleOfArchive redifError
++
++"        Handles of Person:
++syntax match redifArgumentHandleOfPerson /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfPerson contained display
++syntax match redifCorrectHandleOfPerson /\%(\%(:\@!\S\)\{-}:\)\{2}[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\):\S\+/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentHandleOfPerson redifError
++
++"        Handles of Institution:
++syntax match redifArgumentAuthorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentEditorWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentPrimaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentProviderInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentPublisherInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentQuaternaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentSecondaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentTertiaryInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentWorkplaceInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentHandleOfInstitution /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentPrimaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentSecondaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++syntax match redifArgumentTertiaryDefunct /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectHandleOfInstitution contained display
++" TODO Are digits authorized? Apparently not.
++" Country codes:
++" http://www.iso.org/iso/country_codes/iso_3166_code_lists/country_names_and_code_elements.htm
++syntax match redifCorrectHandleOfInstitution /RePEc:\a\a\a:\a\{5}\(ea\|af\|ax\|al\|dz\|as\|ad\|ao\|ai\|aq\|ag\|ar\|am\|aw\|au\|at\|az\|bs\|bh\|bd\|bb\|by\|be\|bz\|bj\|bm\|bt\|bo\|bq\|ba\|bw\|bv\|br\|io\|bn\|bg\|bf\|bi\|kh\|cm\|ca\|cv\|ky\|cf\|td\|cl\|cn\|cx\|cc\|co\|km\|cg\|cd\|ck\|cr\|ci\|hr\|cu\|cw\|cy\|cz\|dk\|dj\|dm\|do\|ec\|eg\|sv\|gq\|er\|ee\|et\|fk\|fo\|fj\|fi\|fr\|gf\|pf\|tf\|ga\|gm\|ge\|de\|gh\|gi\|gr\|gl\|gd\|gp\|gu\|gt\|gg\|gn\|gw\|gy\|ht\|hm\|va\|hn\|hk\|hu\|is\|in\|id\|ir\|iq\|ie\|im\|il\|it\|jm\|jp\|je\|jo\|kz\|ke\|ki\|kp\|kr\|kw\|kg\|la\|lv\|lb\|ls\|lr\|ly\|li\|lt\|lu\|mo\|mk\|mg\|mw\|my\|mv\|ml\|mt\|mh\|mq\|mr\|mu\|yt\|mx\|fm\|md\|mc\|mn\|me\|ms\|ma\|mz\|mm\|na\|nr\|np\|nl\|nc\|nz\|ni\|ne\|ng\|nu\|nf\|mp\|no\|om\|pk\|pw\|ps\|pa\|pg\|py\|pe\|ph\|pn\|pl\|pt\|pr\|qa\|re\|ro\|ru\|rw\|bl\|sh\|kn\|lc\|mf\|pm\|vc\|ws\|sm\|st\|sa\|sn\|rs\|sc\|sl\|sg\|sx\|sk\|si\|sb\|so\|za\|gs\|ss\|es\|lk\|sd\|sr\|sj\|sz\|se\|ch\|sy\|tw\|tj\|tz\|th\|tl\|tg\|tk\|to\|tt\|tn\|tr\|tm\|tc\|tv\|ug\|ua\|ae\|gb\|us\|um\|uy\|uz\|vu\|ve\|vn\|vg\|vi\|wf\|eh\|ye\|zm\|zw\)/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentHandleOfInstitution redifError
++highlight def link redifArgumentPrimaryDefunct redifError
++highlight def link redifArgumentSecondaryDefunct redifError
++highlight def link redifArgumentTertiaryDefunct redifError
++
++"    Emails:
++syntax match redifArgumentAuthorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentAuthorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentContactEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentEditorEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentEditorWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentMaintainerEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentOrderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentPrimaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentProviderEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentPublisherEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentQuaternaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentSecondaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentTertiaryEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifArgumentWorkplaceEmail /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectEmail contained display
++syntax match redifCorrectEmail /\%(@\@!\S\)\+@\%(@\@!\S\)\+/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentAuthorEmail redifError
++highlight def link redifArgumentAuthorWorkplaceEmail redifError
++highlight def link redifArgumentContactEmail redifError
++highlight def link redifArgumentEditorEmail redifError
++highlight def link redifArgumentEditorWorkplaceEmail redifError
++highlight def link redifArgumentEmail redifError
++highlight def link redifArgumentMaintainerEmail redifError
++highlight def link redifArgumentOrderEmail redifError
++highlight def link redifArgumentPrimaryEmail redifError
++highlight def link redifArgumentProviderEmail redifError
++highlight def link redifArgumentPublisherEmail redifError
++highlight def link redifArgumentQuaternaryEmail redifError
++highlight def link redifArgumentSecondaryEmail redifError
++highlight def link redifArgumentTertiaryEmail redifError
++highlight def link redifArgumentWorkplaceEmail redifError
++
++"    Language
++"    Source: https://en.wikipedia.org/wiki/List_of_ISO_639-1_codes
++syntax match redifArgumentLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectLanguage contained display
++syntax match redifCorrectLanguage /\<\(aa\|ab\|af\|ak\|als\|am\|an\|ang\|ar\|arc\|as\|ast\|av\|ay\|az\|ba\|bar\|bat-smg\|bcl\|be\|be-x-old\|bg\|bh\|bi\|bm\|bn\|bo\|bpy\|br\|bs\|bug\|bxr\|ca\|ce\|ceb\|ch\|cho\|chr\|chy\|co\|cr\|cs\|csb\|cu\|cv\|cy\|da\|de\|diq\|dsb\|dv\|dz\|ee\|el\|en\|eo\|es\|et\|eu\|ext\|fa\|ff\|fi\|fiu-vro\|fj\|fo\|fr\|frp\|fur\|fy\|ga\|gd\|gil\|gl\|gn\|got\|gu\|gv\|ha\|haw\|he\|hi\|ho\|hr\|ht\|hu\|hy\|hz\|ia\|id\|ie\|ig\|ii\|ik\|ilo\|io\|is\|it\|iu\|ja\|jbo\|jv\|ka\|kg\|ki\|kj\|kk\|kl\|km\|kn\|khw\|ko\|kr\|ks\|ksh\|ku\|kv\|kw\|ky\|la\|lad\|lan\|lb\|lg\|li\|lij\|lmo\|ln\|lo\|lt\|lv\|map-bms\|mg\|mh\|mi\|mk\|ml\|mn\|mo\|mr\|ms\|mt\|mus\|my\|na\|nah\|nap\|nd\|nds\|nds-nl\|ne\|new\|ng\|nl\|nn\|no\|nr\|nso\|nrm\|nv\|ny\|oc\|oj\|om\|or\|os\|pa\|pag\|pam\|pap\|pdc\|pi\|pih\|pl\|pms\|ps\|pt\|qu\|rm\|rmy\|rn\|ro\|roa-rup\|ru\|rw\|sa\|sc\|scn\|sco\|sd\|se\|sg\|sh\|si\|simple\|sk\|sl\|sm\|sn\|so\|sq\|sr\|ss\|st\|su\|sv\|sw\|ta\|te\|tet\|tg\|th\|ti\|tk\|tl\|tlh\|tn\|to\|tpi\|tr\|ts\|tt\|tum\|tw\|ty\|udm\|ug\|uk\|ur\|uz\|ve\|vi\|vec\|vls\|vo\|wa\|war\|wo\|xal\|xh\|yi\|yo\|za\|zh\|zh-min-nan\|zh-yue\|zu\)\>/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentLanguage redifError
++highlight def link redifCorrectLanguage redifSpecial
++
++"    Length
++"    Based on the example in the documentation. But apparently any field is
++"    possible
++syntax region redifArgumentLength start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodLength contained
++syntax match redifGoodLength /1 page\|[1-9]\d*\%( pages\)\=/ contained display
++
++highlight def link redifGoodLength redifSpecial
++
++"    Publication-Type
++syntax match redifArgumentPublicationType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPublicationType contained display
++syntax match redifCorrectPublicationType /\<\(journal article\|book\|book chapter\|working paper\|conference paper\|report\|other\)\>/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentPublicationType redifError
++highlight def link redifCorrectPublicationType redifSpecial
++
++"    Publication-Status
++syntax region redifArgumentPublicationStatus start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifSpecialPublicationStatus contained
++syntax match redifSpecialPublicationStatus /published\|forthcoming/ nextgroup=redifCorrectPublicationStatus contained display
++syntax region redifCorrectPublicationStatus start=/./ end=/^\S\{-}:/me=s-1 contained
++
++highlight def link redifArgumentPublicationStatus redifError
++highlight def link redifSpecialPublicationStatus redifSpecial
++
++"    Month
++"    TODO Are numbers also allowed?
++syntax match redifArgumentMonth /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodMonth contained display
++syntax match redifGoodMonth /\<\(Jan\%(uary\)\=\|Feb\%(ruary\)\=\|Mar\%(ch\)\=\|Apr\%(il\)\=\|May\|June\=\|July\=\|Aug\%(ust\)\=\|Sep\%(tember\)\=\|Oct\%(ober\)\=\|Nov\%(ember\)\=\|Dec\%(ember\)\=\)\>/ contained display
++
++highlight def link redifGoodMonth redifSpecial
++
++"    Integers: Volume, Chapter
++syntax match redifArgumentVolume /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
++syntax match redifArgumentChapter /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectInteger contained display
++syntax match redifCorrectInteger /[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentVolume redifError
++highlight def link redifArgumentChapter redifError
++
++"    Year
++syntax match redifArgumentYear /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectYear contained display
++syntax match redifCorrectYear /[1-9]\d\{3}/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentYear redifError
++
++"    Edition
++"    Based on the example in the documentation.
++syntax match redifArgumentEdition /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodEdition contained display
++syntax match redifGoodEdition /1st\|2nd\|3rd\|[4-9]th\|[1-9]\d*\%(1st\|2nd\|3rd\|[4-9]th\)\|[1-9]\d*/ contained display
++
++highlight def link redifGoodEdition redifSpecial
++
++"    ISBN
++syntax match redifArgumentISBN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISBN contained display
++syntax match redifGoodISBN /\d[0-9-]\{8,15}\d/ contained display
++
++highlight def link redifGoodISBN redifSpecial
++
++"    ISSN
++syntax match redifArgumentISSN /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodISSN contained display
++syntax match redifGoodISSN /\d\{4}-\d\{3}[0-9X]/ contained display
++
++highlight def link redifGoodISSN redifSpecial
++
++"    File-Size
++"    Based on the example in the documentation.
++syntax region redifArgumentFileSize start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=redifGoodSize contained
++syntax match redifGoodSize /kb\|bytes/ contained display
++
++highlight def link redifGoodSize redifSpecial
++
++"    Type
++syntax match redifArgumentType /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectType contained display
++syntax match redifCorrectType /ReDIF-Paper\|ReDIF-Software\|ReDIF-Article\|ReDIF-Chapter\|ReDIF-Book/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentType redifError
++highlight def link redifCorrectType redifSpecial
++
++"    Dates: Publication-Date, Creation-Date, Revision-Date,
++"    Last-Login-Date, Registration-Date
++syntax match redifArgumentCreationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
++syntax match redifArgumentLastLoginDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
++syntax match redifArgumentPublicationDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
++syntax match redifArgumentRegisteredDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
++syntax match redifArgumentRevisionDate /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectDate contained display
++syntax match redifCorrectDate /[1-9]\d\{3}\%(-02\%(-[12]\d\|-0[1-9]\)\=\|-\%(0[469]\|11\)\%(-30\|-[12]\d\|-0[1-9]\)\=\|-\%(0[13578]\|1[02]\)\%(-3[01]\|-[12]\d\|-0[1-9]\)\=\)\=/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentCreationDate redifError
++highlight def link redifArgumentLastLoginDate redifError
++highlight def link redifArgumentPublicationDate redifError
++highlight def link redifArgumentRegisteredDate redifError
++highlight def link redifArgumentRevisionDate redifError
++
++"    Classification-JEL
++syntax match redifArgumentClassificationJEL /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectJEL contained display
++syntax match redifCorrectJEL /\<\%(\u\d\{,2}[,; \t]\s*\)*\u\d\{,2}/ contains=redifSpecialJEL nextgroup=redifWrongLineEnding contained display
++syntax match redifSpecialJEL /\<\u\d\{,2}/ contained display
++
++highlight def link redifArgumentClassificationJEL redifError
++highlight def link redifSpecialJEL redifSpecial
++
++"    Pages
++syntax match redifArgumentPages /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectPages contained display
++syntax match redifCorrectPages /[1-9]\d*-[1-9]\d*/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifArgumentPages redifError
++
++"    Name-ASCII
++syntax match redifArgumentNameASCII /\%(^\S\{-}:\)\@!\S.*/ contains=redifCorrectNameASCII contained display
++syntax match redifCorrectNameASCII /[ -~]/ contained display
++
++highlight def link redifArgumentNameASCII redifError
++
++"    Programming-Language
++syntax match redifArgumentProgrammingLanguage /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodProgrammingLanguage contained display
++syntax match redifGoodProgrammingLanguage /\<c++\|\<\%(c\|dos executable\|executable\|fortran\|gauss\|gretl\|java\|mathematica\|matlab\|octave\|ox\|perl\|python\|rats\|r\|shazam\|s-plus\|stata\|tsp international\)\>/ nextgroup=redifWrongLineEnding contained display
++
++highlight def link redifGoodProgrammingLanguage redifSpecial
++
++"    File-Format
++"    TODO The link in the documentation that gives the list of possible formats is broken.
++"    ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/media-types
++"    These are based on the examples in the documentation.
++syntax match redifArgumentFileFormat /\%(^\S\{-}:\)\@!\S.*/ contains=redifGoodFormat contained display
++syntax match redifGoodFormat "\a\+/[[:alpha:]+-]\+" nextgroup=redifWrongLineEnding contains=redifSpecialFormat contained display
++syntax match redifSpecialFormat "application/atom+xml\|application/ecmascript\|application/EDI-X12\|application/EDIFACT\|application/json\|application/javascript\|application/octet-stream\|application/ogg\|application/pdf\|application/postscript\|application/rdf+xml\|application/rss+xml\|application/soap+xml\|application/font-woff\|application/xhtml+xml\|application/xml\|application/xml-dtd\|application/xop+xml\|application/zip\|application/gzip\|audio/basic\|audio/L24\|audio/mp4\|audio/mpeg\|audio/ogg\|audio/vorbis\|audio/vnd.rn-realaudio\|audio/vnd.wave\|audio/webm\|image/gif\|image/jpeg\|image/pjpeg\|image/png\|image/svg+xml\|image/tiff\|image/vnd.microsoft.icon\|message/http\|message/imdn+xml\|message/partial\|message/rfc822\|model/example\|model/iges\|model/mesh\|model/vrml\|model/x3d+binary\|model/x3d+vrml\|model/x3d+xml\|multipart/mixed\|multipart/alternative\|multipart/related\|multipart/form-data\|multipart/signed\|multipart/encrypted\|text/cmd\|text/css\|text/csv\|text/html\|text/javascript\|text/plain\|text/vcard\|text/xml\|video/mpeg\|video/mp4\|video/ogg\|video/quicktime\|video/webm\|video/x-matroska\|video/x-ms-wmv\|video/x-flv" contained display
++
++highlight def link redifSpecialFormat redifSpecial
++highlight def link redifArgumentFileFormat redifError
++
++" Keywords
++"     Spell checked
++syntax match redifArgumentKeywords /\%(^\S\{-}:\)\@!\S.*/ contains=@Spell,redifKeywordsSemicolon contained
++syntax match redifKeywordsSemicolon /;/ contained
++
++highlight def link redifKeywordsSemicolon redifSpecial
++
++" Other spell-checked arguments
++"    Very useful when copy-pasting abstracts that may contain hyphens or
++"    ligatures.
++syntax region redifArgumentAbstract start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentAvailability start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentBookTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentDescription start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentFileRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentNote start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentNotification start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentRestriction start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++syntax region redifArgumentTitle start=/\%(^\S\{-}:\)\@!\S/ end=/^\S\{-}:/me=s-1 contains=@Spell contained
++
++" Wrong line ending
++syntax match redifWrongLineEnding /.\+/ contained display
++
++highlight def link redifWrongLineEnding redifError
++
++" Final highlight
++highlight def link redifComment Comment
++highlight def link redifError Error
++highlight def link redifField Identifier
++highlight def link redifFieldDeprecated Identifier
++highlight def link redifSpecial Special
++" For deprecated fields:
++highlight redifFieldDeprecated term=undercurl cterm=undercurl gui=undercurl guisp=DarkGrey
++
++" Sync: The template-type (ReDIF-Paper, ReDIF-Archive, etc.) influences which
++" fields can follow. Thus sync must search backwards for it.
++"
++" I would like to simply ask VIM to search backward for the first occurence of
++" /^Template-Type:/, but it does not seem to be possible, so I have to start
++" from the beginning of the file... This might slow down a lot for files that
++" contain a lot of Template-Type statements.
++syntax sync fromstart
++
++" The problem with syntax sync match (tried below), it is that, for example,
++" it cannot realize when it is inside a Author-Name cluster, which is inside a
++" Template-Type template...
++"
++" TODO Is this linecont pattern really useful? It seems to work anyway...
++"syntax sync linecont /^\(Template-Type:\)\=\s*$/
++" TODO This sync is surprising... It seems to work on several lines even
++" though I replaced \_s* by \s*, even without the linecont pattern...
++"syntax sync match redifSyncForTemplatePaper groupthere redifRegionTemplatePaper /^Template-Type:\s*ReDIF-Paper \d\+\.\d\+/
++"syntax sync match redifSyncForTemplateArticle groupthere redifRegionTemplateArticle /^Template-Type:\s*ReDIF-Article \d\+\.\d\+/
++"syntax sync match redifSyncForTemplateChapter groupthere redifRegionTemplateChapter /^Template-Type:\s*ReDIF-Chapter \d\+\.\d\+/
++"syntax sync match redifSyncForTemplateBook groupthere redifRegionTemplateBook /^Template-Type:\s*ReDIF-Book \d\+\.\d\+/
++"syntax sync match redifSyncForTemplateSoftware groupthere redifRegionTemplateSoftware /^Template-Type:\s*ReDIF-Software \d\+\.\d\+/
++"syntax sync match redifSyncForTemplateArchive groupthere redifRegionTemplateArchive /^Template-Type:\s*ReDIF-Archive \d\+\.\d\+/
++"syntax sync match redifSyncForTemplateSeries groupthere redifRegionTemplateSeries /^Template-Type:\s*ReDIF-Series \d\+\.\d\+/
++"syntax sync match redifSyncForTemplateInstitution groupthere redifRegionTemplateInstitution /^Template-Type:\s*ReDIF-Institution \d\+\.\d\+/
++"syntax sync match redifSyncForTemplatePerson groupthere redifRegionTemplatePerson /^Template-Type:\s*ReDIF-Person \d\+\.\d\+/
++
++" I do not really know how sync linebreaks works, but it helps when making
++" changes on the argument when this argument is not on the same line than its
++" field. I just assume that people won't leave more than one line of
++" whitespace between fields and arguments (which is already very unlikely)
++" hence the value of 2.
++syntax sync linebreaks=2
++
++" Since folding is defined by the syntax, set foldmethod to syntax.
++set foldmethod=syntax
++
++" Set "b:current_syntax" to the name of the syntax at the end:
++let b:current_syntax="redif"
+diff -Naur vim73.orig/runtime/syntax/resolv.vim vim73/runtime/syntax/resolv.vim
+--- vim73.orig/runtime/syntax/resolv.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/resolv.vim	2013-06-07 17:07:25.752268476 +0000
+@@ -1,11 +1,13 @@
+ " Vim syntax file
+ " Language: resolver configuration file
+-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+-" Original Maintaner: Radu Dineiu <littledragon@altern.org>
+-" License: This file can be redistribued and/or modified under the same terms
+-"   as Vim itself.
+-" URL: http://trific.ath.cx/Ftp/vim/syntax/resolv.vim
+-" Last Change: 2006-04-16
++" Maintainer: Radu Dineiu <radu.dineiu@gmail.com>
++" URL: https://raw.github.com/rid9/vim-resolv/master/resolv.vim
++" Last Change: 2013 May 21
++" Version: 1.0
++"
++" Credits:
++"   David Necas (Yeti) <yeti@physics.muni.cz>
++"   Stefano Zacchiroli <zack@debian.org>
+ 
+ if version < 600
+ 	syntax clear
+@@ -42,8 +44,6 @@
+ syn match resolvOptions /^\s*options\>/ nextgroup=resolvOption skipwhite
+ 
+ " Options
+-" FIXME: The manual page and the source code do not exactly agree on the set
+-" of allowed options
+ syn match resolvOption /\<\%(debug\|no_tld_query\|rotate\|no-check-names\|inet6\)\>/ contained nextgroup=resolvOption skipwhite
+ syn match resolvOption /\<\%(ndots\|timeout\|attempts\):\d\+\>/ contained contains=resolvOperator nextgroup=resolvOption skipwhite
+ 
+diff -Naur vim73.orig/runtime/syntax/reva.vim vim73/runtime/syntax/reva.vim
+--- vim73.orig/runtime/syntax/reva.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/reva.vim	2013-06-07 17:07:25.768935095 +0000
+@@ -1,10 +1,10 @@
+ " Vim syntax file
+ " Language:	Reva Forth
+-" Version:	7.1
+-" Last Change:	2008/01/11
++" Version:	2011.2
++" Last Change:	2012/02/13
+ " Maintainer:	Ron Aaron <ron@ronware.org>
+ " URL:		http://ronware.org/reva/
+-" Filetypes:	*.rf *.frt 
++" Filetypes:	*.rf *.frt
+ " NOTE: 	You should also have the ftplugin/reva.vim file to set 'isk'
+ 
+ " For version 5.x: Clear all syntax items and don't load
+@@ -17,10 +17,13 @@
+    finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn clear
+ 
+ " Synchronization method
+-syn sync ccomment 
++syn sync ccomment
+ syn sync maxlines=100
+ 
+ 
+@@ -39,7 +42,7 @@
+ syn case match
+ " basic mathematical and logical operators
+ syn keyword revaoperators + - * / mod /mod negate abs min max umin umax
+-syn keyword revaoperators and or xor not invert 1+ 1- 
++syn keyword revaoperators and or xor not invert 1+ 1-
+ syn keyword revaoperators m+ */ */mod m* um* m*/ um/mod fm/mod sm/rem
+ syn keyword revaoperators d+ d- dnegate dabs dmin dmax > < = >> << u< <>
+ 
+@@ -53,10 +56,10 @@
+ " address operations
+ syn keyword revamemory @ ! +! c@ c! 2@ 2! align aligned allot allocate here free resize
+ syn keyword revaadrarith chars char+ cells cell+ cell cell- 2cell+ 2cell- 3cell+ 4cell+
+-syn keyword revamemblks move fill 
++syn keyword revamemblks move fill
+ 
+ " conditionals
+-syn keyword revacond if else then =if >if <if <>if if0  ;; catch throw 
++syn keyword revacond if else then =if >if <if <>if if0  ;; catch throw
+ 
+ " iterations
+ syn keyword revaloop while repeat until again
+@@ -66,18 +69,18 @@
+ syn match revaColonDef '\<noname:\|\<:\s+' contains=revaComment
+ syn keyword revaEndOfColonDef ; ;inline
+ syn keyword revadefine constant constant, variable create variable,
+-syn keyword revadefine user value to +to defer! defer@ defer is does> immediate 
++syn keyword revadefine user value to +to defer! defer@ defer is does> immediate
+ syn keyword revadefine compile literal ' [']
+ 
+ " Built in words
+ com! -nargs=+ Builtin syn keyword revaBuiltin <args>
+ Builtin execute ahead interp bye >body here pad words make
+ Builtin accept close cr creat delete ekey emit fsize ioerr key?
+-Builtin mtime open/r open/rw read rename seek space spaces stat 
++Builtin mtime open/r open/rw read rename seek space spaces stat
+ Builtin tell type type_ write (seek) (argv) (save) 0; 0drop;
+ Builtin >class >lz >name >xt alias alias: appname argc asciiz, asciizl,
+ Builtin body> clamp depth disassemble findprev fnvhash getenv here,
+-Builtin iterate last! last@ later link lz> lzmax os parse/ peek 
++Builtin iterate last! last@ later link lz> lzmax os parse/ peek
+ Builtin peek-n pop prior push put rp@ rpick save setenv slurp
+ Builtin stack-empty? stack-iterate stack-size stack: THROW_BADFUNC
+ Builtin THROW_BADLIB THROW_GENERIC used xt>size z,
+@@ -88,21 +91,21 @@
+ Builtin (-lib) (bye) (call) (else) (find) (func) (here) (if (lib) (s0) (s^)
+ Builtin (to~) (while) >in >rel ?literal appstart cold compiling? context? d0 default_class
+ Builtin defer? dict dolstr dostr find-word h0 if) interp isa onexit
+-Builtin onstartup pdoes pop>ebx prompt rel> rp0 s0 src srcstr state str0 then,> then> tib 
++Builtin onstartup pdoes pop>ebx prompt rel> rp0 s0 src srcstr state str0 then,> then> tib
+ Builtin tp vector vector! word? xt? .ver revaver revaver# && '' 'constant 'context
+ Builtin 'create 'defer 'does 'forth 'inline 'macro 'macront 'notail 'value 'variable
+ Builtin (.r) (context) (create) (header) (hide) (inline) (p.r) (words~) (xfind)
+ Builtin ++ -- , -2drop -2nip -link -swap . .2x .classes .contexts .funcs .libs .needs .r
+ Builtin .rs .x 00; 0do 0if 1, 2, 3, 2* 2/ 2constant 2variable 3dup 4dup ;then >base >defer
+ Builtin >rr ? ?do @execute @rem appdir argv as back base base! between chain cleanup-libs
+-Builtin cmove> context?? ctrl-c ctx>name data: defer: defer@def dictgone do_cr eleave 
+-Builtin endcase endof eval exception exec false find func: header heapgone help help/ 
++Builtin cmove> context?? ctrl-c ctx>name data: defer: defer@def dictgone do_cr eleave
++Builtin endcase endof eval exception exec false find func: header heapgone help help/
+ Builtin hex# hide inline{ last lastxt lib libdir literal, makeexename mnotail ms ms@
+-Builtin newclass noop nosavedict notail nul of off on p: padchar parse parseln 
+-Builtin parsews rangeof rdepth remains reset reva revaused rol8 rr> scratch setclass sp 
++Builtin newclass noop nosavedict notail nul of off on p: padchar parse parseln
++Builtin parsews rangeof rdepth remains reset reva revaused rol8 rr> scratch setclass sp
+ Builtin strof super> temp time&date true turnkey? undo vfunc: w! w@
+ Builtin xchg xchg2 xfind xt>name xwords { {{ }} }  _+ _1+ _1- pathsep case \||
+-" p[ [''] [ ['] 
++" p[ [''] [ [']
+ 
+ 
+ " debugging
+@@ -116,11 +119,11 @@
+ " syn region revaCharOps start=+."\s+ skip=+\\"+ end=+"+
+ 
+ " char-number conversion
+-syn keyword revaconversion s>d >digit digit> >single >double >number >float 
++syn keyword revaconversion s>d >digit digit> >single >double >number >float
+ 
+ " contexts
+-syn keyword revavocs forth macro inline  
+-syn keyword revavocs context: 
++syn keyword revavocs forth macro inline
++syn keyword revavocs context:
+ syn match revavocs /\<\~[^~ ]*/
+ syn match revavocs /[^~ ]*\~\>/
+ 
+@@ -135,7 +138,7 @@
+ 
+ " Strings
+ " syn region revaString start=+\.\?\"+ end=+"+ end=+$+
+-syn region revaString start=/"/ skip=/\\"/ end=/"/ 
++syn region revaString start=/"/ skip=/\\"/ end=/"/
+ 
+ " Comments
+ syn region revaComment start='\\S\s' end='.*' contains=revaTodo
+@@ -187,5 +190,7 @@
+ endif
+ 
+ let b:current_syntax = "reva"
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ 
+ " vim: ts=8:sw=4:nocindent:smartindent:
+diff -Naur vim73.orig/runtime/syntax/rexx.vim vim73/runtime/syntax/rexx.vim
+--- vim73.orig/runtime/syntax/rexx.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/rexx.vim	2013-06-07 17:07:25.785601714 +0000
+@@ -1,14 +1,8 @@
+ " Vim syntax file
+ " Language:	Rexx
+ " Maintainer:	Thomas Geulig <geulig@nentec.de>
+-" Last Change:  2005 Dez  9, added some <http://www.ooRexx.org>-coloring,
+-"                            line comments, do *over*, messages, directives,
+-"                            highlighting classes, methods, routines and requires
+-"               2007 Oct 17, added support for new ooRexx 3.2 features
+-"               Rony G. Flatscher <rony.flatscher@wu-wien.ac.at>
+-"
++" Last Change:  2012 Sep 14, added support for new ooRexx 4.0 features
+ " URL:		http://www.geulig.de/vim/rexx.vim
+-"
+ " Special Thanks to Dan Sharp <dwsharp@hotmail.com> and Rony G. Flatscher
+ " <Rony.Flatscher@wu-wien.ac.at> for comments and additions
+ 
+@@ -54,7 +48,7 @@
+ syn match rexxRegularCallSignal contained "\<\(call\|signal\)\s\(\s*on\>\|\s*off\>\)\@!\(\k\+\ze\|\ze(\)\(\s*\|;\|$\|(\)"
+ syn region rexxLabel contained start="\<\(call\|signal\)\>\s*\zs\(\k*\|(\)" end="\ze\(\s*\|;\|$\|(\)" containedin=rexxRegularCallSignal
+ 
+-syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)"
++syn match rexxExceptionHandling contained "\<\(call\|signal\)\>\s\+\<\(on\|off\)\>.*\(;\|$\)" contains=rexxComment
+ 
+ " hilite label given after keyword "name"
+ syn match rexxLabel "name\s\+\zs\k\+\ze" containedin=rexxExceptionHandling
+@@ -74,13 +68,14 @@
+ syn match rexxLoopKeywords "\<\(to\|by\|for\|until\|while\|over\)\>" containedin=doLoopSelectLabelRegion
+ 
+ " must be after Conditional phrases!
+-syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\<over\>\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" 
++syn match doLoopSelectLabelRegion "\<\(do\|loop\|select\)\>\s\+\(label\s\+\)\?\(\s\+\k\+\s\+\zs\<over\>\)\?\k*\(\s\+forever\)\?\(\s\|;\|$\)" contains=doLoopSelectLabelRegion,rexxStartValueAssignment,rexxLoopKeywords
+ 
+ " color label's name
+ syn match rexxLabel2 "\<\(do\|loop\|select\)\>\s\+label\s\+\zs\k*\ze" containedin=doLoopSelectLabelRegion
+ 
+ " make sure control variable is normal
+-syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\<over\>" containedin=doLoopSelectLabelRegion
++" TODO: re-activate ?
++"rgf syn match rexxControlVariable        "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\s\+\<over\>" containedin=doLoopSelectLabelRegion
+ 
+ " make sure control variable assignment is normal
+ syn match rexxStartValueAssignment       "\<\(do\|loop\)\>\(\s\+label\s\+\k*\)\?\s\+\zs.*\ze\(=.*\)\?\s\+\<to\>" containedin=doLoopSelectLabelRegion
+@@ -96,7 +91,8 @@
+ syn match rexxTrace "\(^\|;\|:\)\s*\<trace\>\s\+\<\K\k*\>"
+ 
+ " Raise statement
+-syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
++" syn match rexxRaise "\(^\|;\|:\)\s\+\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
++syn match rexxRaise "\(^\|;\|:\)\s*\<raise\>\s*\<\(propagate\|error\|failure\|syntax\|user\)\>\?" contains=rexxRaise2
+ syn match rexxRaise2 "\<\(additional\|array\|description\|exit\|propagate\|return\)\>" containedin=rexxRaise
+ 
+ " Forward statement
+@@ -142,19 +138,36 @@
+ syn keyword rexxSpecialVariable  .environment .error .input .local .methods .output .rs .stderr .stdin .stdout .stdque
+ 
+ " Constants
+-syn keyword rexxConst .true .false .nil .endOfLine .line
++syn keyword rexxConst .true .false .nil .endOfLine .line .context
++
++" Rexx numbers
++" int like number
++syn match rexxNumber '\d\+' contained
++syn match rexxNumber '[-+]\s*\d\+' contained
++
++" Floating point number with decimal
++syn match rexxNumber '\d\+\.\d*' contained
++syn match rexxNumber '[-+]\s*\d\+\.\d*' contained
++
++" Floating point like number with E
++syn match rexxNumber '[-+]\s*\d*[eE][\-+]\d\+' contained
++syn match rexxNumber '\d*[eE][\-+]\d\+' contained
++
++" Floating point like number with E and decimal point (+,-)
++syn match rexxNumber '[-+]\s*\d*\.\d*[eE][\-+]\d\+' contained
++syn match rexxNumber '\d*\.\d*[eE][\-+]\d\+' contained
+ 
+-syn match rexxNumber "\(-\|+\)\?\s*\zs\<\(\d\+\.\?\|\d*\.\d\+\(E\(+\|-\)\d\{2,2}\)\?\)\?\>"
+ 
+ " ooRexx builtin classes (as of version 3.2.0, fall 2007), first define dot to be o.k. in keywords
+ syn keyword rexxBuiltinClass .Alarm .ArgUtil .Array .Bag .CaselessColumnComparator
+ syn keyword rexxBuiltinClass .CaselessComparator .CaselessDescendingComparator .CircularQueue
+ syn keyword rexxBuiltinClass .Class .Collection .ColumnComparator .Comparable .Comparator
+-syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .InputOutputStream
++syn keyword rexxBuiltinClass .DateTime .DescendingComparator .Directory .File .InputOutputStream
+ syn keyword rexxBuiltinClass .InputStream .InvertingComparator .List .MapCollection
+ syn keyword rexxBuiltinClass .Message .Method .Monitor .MutableBuffer .Object
+-syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Properties .Queue
+-syn keyword rexxBuiltinClass .Relation .RexxQueue .Set .SetCollection .Stem .Stream
++syn keyword rexxBuiltinClass .OrderedCollection .OutputStream .Package .Properties .Queue
++syn keyword rexxBuiltinClass .RegularExpression .Relation .RexxContext .RexxQueue .Routine
++syn keyword rexxBuiltinClass .Set .SetCollection .Stem .Stream
+ syn keyword rexxBuiltinClass .StreamSupplier .String .Supplier .Table .TimeSpan
+ 
+ " Windows-only classes
+@@ -163,7 +176,8 @@
+ syn keyword rexxBuiltinClass .DialogExtensions .DlgArea .DlgAreaU .DynamicDialog
+ syn keyword rexxBuiltinClass .EditControl .InputBox .IntegerBox .ListBox .ListChoice
+ syn keyword rexxBuiltinClass .ListControl .MenuObject .MessageExtensions .MultiInputBox
+-syn keyword rexxBuiltinClass .MultiListChoice .PasswordBox .PlainBaseDialog .PlainUserDialog
++syn keyword rexxBuiltinClass .MultiListChoice .OLEObject .OLEVariant
++syn keyword rexxBuiltinClass .PasswordBox .PlainBaseDialog .PlainUserDialog
+ syn keyword rexxBuiltinClass .ProgressBar .ProgressIndicator .PropertySheet .RadioButton
+ syn keyword rexxBuiltinClass .RcDialog .ResDialog .ScrollBar .SingleSelection .SliderControl
+ syn keyword rexxBuiltinClass .StateIndicator .StaticControl .TabControl .TimedMessage
+@@ -171,22 +185,34 @@
+ syn keyword rexxBuiltinClass .WindowExtensions .WindowObject .WindowsClassesBase .WindowsClipboard
+ syn keyword rexxBuiltinClass .WindowsEventLog .WindowsManager .WindowsProgramManager .WindowsRegistry
+ 
++" BSF4ooRexx classes
++syn keyword rexxBuiltinClass .BSF .bsf.dialog .bsf_proxy
++syn keyword rexxBuiltinClass .UNO .UNO_ENUM .UNO_CONSTANTS .UNO_PROPERTIES
++
+ " ooRexx directives, ---rgf location important, otherwise directives in top of file not matched!
+ syn region rexxClassDirective     start="::\s*class\s*"ms=e+1    end="\ze\(\s\|;\|$\)"
+ syn region rexxMethodDirective    start="::\s*method\s*"ms=e+1   end="\ze\(\s\|;\|$\)"
+ syn region rexxRequiresDirective  start="::\s*requires\s*"ms=e+1 end="\ze\(\s\|;\|$\)"
+ syn region rexxRoutineDirective   start="::\s*routine\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
+ syn region rexxAttributeDirective start="::\s*attribute\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
++" rgf, 2012-09-09
++syn region rexxOptionsDirective   start="::\s*options\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
++syn region rexxConstantDirective  start="::\s*constant\s*"ms=e+1  end="\ze\(\s\|;\|$\)"
++
++syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxNumber,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective,rexxOptionsDirective,rexxConstantDirective keepend
++
++syn match rexxOptionsDirective2 "\<\(digits\|form\|fuzz\|trace\)\>" containedin = rexxOptionsDirective3
++syn region rexxOptionsDirective3 start="\(^\|;\)\s*::\s*options\s"ms=e+1  end="\($\|;\)" contains=rexxString,rexxNumber,rexxVariable,rexxComment,rexxLineComment containedin = rexxDirective
+ 
+-syn region rexxDirective start="\(^\|;\)\s*::\s*\w\+"  end="\($\|;\)" contains=rexxString,rexxComment,rexxLineComment,rexxClassDirective,rexxMethodDirective,rexxRoutineDirective,rexxRequiresDirective,rexxAttributeDirective keepend
+ 
+ syn region rexxVariable start="\zs\<\(\.\)\@!\K\k\+\>\ze\s*\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)" end="\(\_$\|.\)"me=e-1
+-syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze" 
++syn match rexxVariable "\(=\|,\|)\|%\|\]\|\\\||\|&\|+=\|-=\|<\|>\)\s*\zs\K\k*\ze"
+ 
+ " rgf, 2007-07-22: unfortunately, the entire region is colored (not only the
+ " patterns), hence useless (vim 7.0)! (syntax-docs hint that that should work)
+ " attempt: just colorize the parenthesis in matching colors, keep content
+ "          transparent to keep the formatting already done to it!
++" TODO: test on 7.3
+ " syn region par1 matchgroup=par1 start="(" matchgroup=par1 end=")" transparent contains=par2
+ " syn region par2 matchgroup=par2 start="(" matchgroup=par2 end=")" transparent contains=par3 contained
+ " syn region par3 matchgroup=par3 start="(" matchgroup=par3 end=")" transparent contains=par4 contained
+@@ -200,11 +226,11 @@
+ " syn region par4 matchgroup=par4 start="(" end=")" contains=par5 contained
+ " syn region par5 matchgroup=par5 start="(" end=")" contains=par1 contained
+ 
+-hi par1 ctermfg=red 		guifg=red
+-hi par2 ctermfg=blue 		guifg=blue
+-hi par3 ctermfg=darkgreen 	guifg=darkgreen
+-hi par4 ctermfg=darkyellow	guifg=darkyellow
+-hi par5 ctermfg=darkgrey 	guifg=darkgrey
++hi par1 ctermfg=red 		guifg=red          "guibg=grey
++hi par2 ctermfg=blue 		guifg=blue         "guibg=grey
++hi par3 ctermfg=darkgreen 	guifg=darkgreen    "guibg=grey
++hi par4 ctermfg=darkyellow	guifg=darkyellow   "guibg=grey
++hi par5 ctermfg=darkgrey 	guifg=darkgrey     "guibg=grey
+ 
+ " line continuation (trailing comma or single dash)
+ syn sync linecont "\(,\|-\ze-\@!\)\ze\s*\(--.*\|\/\*.*\)*$"
+@@ -214,7 +240,7 @@
+ " endif
+ " exec "syn sync ccomment rexxComment minlines=" . rexx_minlines
+ 
+-" always scan from start, PCs are powerful enough for that in 2007 !
++" always scan from start, PCs have long become to be powerful enough for that
+ exec "syn sync fromstart"
+ 
+ " Define the default highlighting.
+@@ -236,7 +262,7 @@
+   HiLink endIterateLeaveLabelRegion	rexxKeyword
+   HiLink rexxLoopKeywords	rexxKeyword " Todo
+ 
+-  HiLink rexxNumber		Normal	
++  HiLink rexxNumber		Normal "DiffChange
+ "  HiLink rexxIdentifier		DiffChange
+ 
+   HiLink rexxRegularCallSignal	Statement
+@@ -249,7 +275,7 @@
+   HiLink rexxCommentError	rexxError
+   HiLink rexxError		Error
+   HiLink rexxKeyword		Statement
+-  HiLink rexxKeywordStatements	Statement  
++  HiLink rexxKeywordStatements	Statement
+ 
+   HiLink rexxFunction		Function
+   HiLink rexxString		String
+@@ -271,6 +297,13 @@
+   HiLink rexxRequiresDirective	Include
+   HiLink rexxRoutineDirective	rexxFunction
+ 
++" rgf, 2012-09-09
++  HiLink rexxOptionsDirective	rexxFunction
++  HiLink rexxOptionsDirective2  rexxOptionsDirective
++  HiLink rexxOptionsDirective3  Normal " rexxOptionsDirective
++
++  HiLink rexxConstantDirective	rexxFunction
++
+   HiLink rexxConst		Constant
+   HiLink rexxTypeSpecifier	Type
+   HiLink rexxBuiltinClass	rexxTypeSpecifier
+diff -Naur vim73.orig/runtime/syntax/rhelp.vim vim73/runtime/syntax/rhelp.vim
+--- vim73.orig/runtime/syntax/rhelp.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/rhelp.vim	2013-06-07 17:07:25.802268333 +0000
+@@ -1,10 +1,11 @@
+ " Vim syntax file
+ " Language:    R Help File
+-" Maintainer:  Johannes Ranke <jranke@uni-bremen.de>
+-" Last Change: 2010 Apr 22
+-" Version:     0.7.3
+-" SVN:		   $Id: rhelp.vim 88 2010-04-22 19:37:09Z ranke $
+-" Remarks:     - Now includes R syntax highlighting in the appropriate
++" Maintainer: Jakson Aquino <jalvesaq@gmail.com>
++" Former Maintainer: Johannes Ranke <jranke@uni-bremen.de>
++" Last Change: Fri Oct 14, 2011  09:54PM
++" Version:     0.7.4
++" SVN:		   $Id: rhelp.vim 90 2010-11-22 10:58:11Z ranke $
++" Remarks:     - Includes R syntax highlighting in the appropriate
+ "                sections if an r.vim file is in the same directory or in the
+ "                default debian location.
+ "              - There is no Latex markup in equations
+@@ -24,30 +25,40 @@
+ 
+ syn case match
+ 
+-" R help identifiers {{{
++" R help identifiers {{{1
+ syn region rhelpIdentifier matchgroup=rhelpSection	start="\\name{" end="}" 
+ syn region rhelpIdentifier matchgroup=rhelpSection	start="\\alias{" end="}" 
+-syn region rhelpIdentifier matchgroup=rhelpSection	start="\\pkg{" end="}" 
+-syn region rhelpIdentifier matchgroup=rhelpSection	start="\\item{" end="}" contained contains=rhelpDots
+-syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end=/}/ contained
++syn region rhelpIdentifier matchgroup=rhelpSection	start="\\pkg{" end="}" contains=rhelpLink
++syn region rhelpIdentifier matchgroup=rhelpSection start="\\method{" end="}" contained
++syn region rhelpIdentifier matchgroup=rhelpSection start="\\Rdversion{" end="}"
+ 
+ " Highlighting of R code using an existing r.vim syntax file if available {{{1
+ syn include @R syntax/r.vim
+-syn match rhelpDots		"\\dots" containedin=@R
+-syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpSection
+-syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpIdentifier,rhelpS4method
+-syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end=/}/ contains=@R
+-syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end=/}/ contains=@R contained
+-syn region rhelpRcode matchgroup=Delimiter start="\\code{" matchgroup=Delimiter transparent end=/}/ contains=@R,rhelpLink contained
+-syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=/)/ contains=@R,rhelpDots contained
+-syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end=/}/ contains=@R
+ 
+ " Strings {{{1
+-syn region rhelpString start=/"/ end=/"/ 
++syn region rhelpString start=/"/ skip=/\\"/ end=/"/ contains=rhelpSpecialChar,rhelpCodeSpecial,rhelpLink contained
++
++" Special characters in R strings
++syn match rhelpCodeSpecial display contained "\\\\\(n\|r\|t\|b\|a\|f\|v\|'\|\"\)\|\\\\"
+ 
+-" Special characters  ( \$ \& \% \# \{ \} \_) {{{1
++" Special characters  ( \$ \& \% \# \{ \} \_)
+ syn match rhelpSpecialChar        "\\[$&%#{}_]"
+ 
++
++" R code {{{1
++syn match rhelpDots		"\\dots" containedin=@R
++syn region rhelpRcode matchgroup=Delimiter start="\\examples{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpLink,rhelpIdentifier,rhelpString,rhelpSpecialChar,rhelpSection
++syn region rhelpRcode matchgroup=Delimiter start="\\usage{" matchgroup=Delimiter transparent end="}" contains=@R,rhelpIdentifier,rhelpS4method
++syn region rhelpRcode matchgroup=Delimiter start="\\synopsis{" matchgroup=Delimiter transparent end="}" contains=@R
++syn region rhelpRcode matchgroup=Delimiter start="\\special{" matchgroup=Delimiter transparent end="}" contains=@R
++syn region rhelpRcode matchgroup=Delimiter start="\\code{" skip='\\\@<!{.\{-}\\\@<!}' transparent end="}" contains=@R,rhelpDots,rhelpString,rhelpSpecialChar,rhelpLink keepend
++syn region rhelpS4method matchgroup=Delimiter start="\\S4method{.*}(" matchgroup=Delimiter transparent end=")" contains=@R,rhelpDots
++syn region rhelpSexpr matchgroup=Delimiter start="\\Sexpr{" matchgroup=Delimiter transparent end="}" contains=@R
++
++" PreProc {{{1
++syn match rhelpPreProc "^#ifdef.*" 
++syn match rhelpPreProc "^#endif.*" 
++
+ " Special Delimiters {{{1
+ syn match rhelpDelimiter		"\\cr"
+ syn match rhelpDelimiter		"\\tab "
+@@ -111,9 +122,13 @@
+ syn match rhelpKeyword	"\\Omega"
+ 
+ " Links {{{1
+-syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend
+-syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend
+-syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend
++syn region rhelpLink matchgroup=rhelpSection start="\\link{" end="}" contained keepend extend
++syn region rhelpLink matchgroup=rhelpSection start="\\link\[.\{-}\]{" end="}" contained keepend extend
++syn region rhelpLink matchgroup=rhelpSection start="\\linkS4class{" end="}" contained keepend extend
++
++" Verbatim like {{{1
++syn region rhelpVerbatim matchgroup=rhelpType start="\\samp{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
++syn region rhelpVerbatim matchgroup=rhelpType start="\\verb{" skip='\\\@<!{.\{-}\\\@<!}' end="}" contains=rhelpSpecialChar,rhelpComment
+ 
+ " Type Styles {{{1
+ syn match rhelpType		"\\emph\>"
+@@ -123,16 +138,18 @@
+ syn match rhelpType		"\\dQuote\>"
+ syn match rhelpType		"\\preformatted\>"
+ syn match rhelpType		"\\kbd\>"
+-syn match rhelpType		"\\samp\>"
+ syn match rhelpType		"\\eqn\>"
+ syn match rhelpType		"\\deqn\>"
+ syn match rhelpType		"\\file\>"
+ syn match rhelpType		"\\email\>"
+ syn match rhelpType		"\\url\>"
++syn match rhelpType		"\\href\>"
+ syn match rhelpType		"\\var\>"
+ syn match rhelpType		"\\env\>"
+ syn match rhelpType		"\\option\>"
+ syn match rhelpType		"\\command\>"
++syn match rhelpType		"\\newcommand\>"
++syn match rhelpType		"\\renewcommand\>"
+ syn match rhelpType		"\\dfn\>"
+ syn match rhelpType		"\\cite\>"
+ syn match rhelpType		"\\acronym\>"
+@@ -140,6 +157,7 @@
+ " rhelp sections {{{1
+ syn match rhelpSection		"\\encoding\>"
+ syn match rhelpSection		"\\title\>"
++syn match rhelpSection		"\\item\>"
+ syn match rhelpSection		"\\description\>"
+ syn match rhelpSection		"\\concept\>"
+ syn match rhelpSection		"\\arguments\>"
+@@ -153,11 +171,11 @@
+ syn match rhelpSection		"\\docType\>"
+ syn match rhelpSection		"\\format\>"
+ syn match rhelpSection		"\\source\>"
+-syn match rhelpSection     "\\itemize\>"
+-syn match rhelpSection     "\\describe\>"
+-syn match rhelpSection     "\\enumerate\>"
+-syn match rhelpSection     "\\item "
+-syn match rhelpSection     "\\item$"
++syn match rhelpSection    "\\itemize\>"
++syn match rhelpSection    "\\describe\>"
++syn match rhelpSection    "\\enumerate\>"
++syn match rhelpSection    "\\item "
++syn match rhelpSection    "\\item$"
+ syn match rhelpSection		"\\tabular{[lcr]*}"
+ syn match rhelpSection		"\\dontrun\>"
+ syn match rhelpSection		"\\dontshow\>"
+@@ -165,16 +183,18 @@
+ syn match rhelpSection		"\\donttest\>"
+ 
+ " Freely named Sections {{{1
+-syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end=/}/ 
+-syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end=/}/ 
++syn region rhelpFreesec matchgroup=Delimiter start="\\section{" matchgroup=Delimiter transparent end="}"
++syn region rhelpFreesubsec matchgroup=Delimiter start="\\subsection{" matchgroup=Delimiter transparent end="}" 
++
++syn match rhelpDelimiter "{\|\[\|(\|)\|\]\|}"
+ 
+ " R help file comments {{{1
+-syn match rhelpComment /%.*$/ contained 
++syn match rhelpComment /%.*$/
+ 
+ " Error {{{1
+-syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpCurlyError
+-syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ transparent contains=ALLBUT,rhelpError,rhelpBraceError,rhelpParenError
+-syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ transparent contains=ALLBUT,rhelpError,rhelpCurlyError,rhelpParenError
++syn region rhelpRegion matchgroup=Delimiter start=/(/ matchgroup=Delimiter end=/)/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
++syn region rhelpRegion matchgroup=Delimiter start=/{/ matchgroup=Delimiter end=/}/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
++syn region rhelpRegion matchgroup=Delimiter start=/\[/ matchgroup=Delimiter end=/]/ contains=@Spell,rhelpCodeSpecial,rhelpComment,rhelpDelimiter,rhelpDots,rhelpFreesec,rhelpFreesubsec,rhelpIdentifier,rhelpKeyword,rhelpLink,rhelpPreProc,rhelpRComment,rhelpRcode,rhelpRegion,rhelpS4method,rhelpSection,rhelpSexpr,rhelpSpecialChar,rhelpString,rhelpType,rhelpVerbatim
+ syn match rhelpError      /[)\]}]/
+ syn match rhelpBraceError /[)}]/ contained
+ syn match rhelpCurlyError /[)\]]/ contained
+@@ -190,17 +210,21 @@
+   else
+     command -nargs=+ HiLink hi def link <args>
+   endif
++  HiLink rhelpVerbatim    String
++  HiLink rhelpDelimiter   Delimiter
+   HiLink rhelpIdentifier  Identifier
+   HiLink rhelpString      String
++  HiLink rhelpCodeSpecial Special
+   HiLink rhelpKeyword     Keyword
+   HiLink rhelpDots        Keyword
+   HiLink rhelpLink        Underlined
+-  HiLink rhelpType	      Type
++  HiLink rhelpType        Type
+   HiLink rhelpSection     PreCondit
+   HiLink rhelpError       Error
+   HiLink rhelpBraceError  Error
+   HiLink rhelpCurlyError  Error
+   HiLink rhelpParenError  Error
++  HiLink rhelpPreProc     PreProc
+   HiLink rhelpDelimiter   Delimiter
+   HiLink rhelpComment     Comment
+   HiLink rhelpRComment    Comment
+diff -Naur vim73.orig/runtime/syntax/rng.vim vim73/runtime/syntax/rng.vim
+--- vim73.orig/runtime/syntax/rng.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/rng.vim	2013-06-07 17:07:25.828934924 +0000
+@@ -0,0 +1,25 @@
++" Vim syntax file
++" Language:    RELAX NG
++" Maintainer:  Jaromir Hradilek <jhradilek@gmail.com>
++" URL:         https://github.com/jhradilek/vim-rng
++" Last Change: 25 March 2013
++" Description: A syntax file for RELAX NG, a schema language for XML
++
++if exists('b:current_syntax')
++  finish
++endif
++
++do Syntax xml
++syn spell toplevel
++syn cluster xmlTagHook add=rngTagName
++syn case match
++
++syn keyword rngTagName anyName attribute choice data define div contained
++syn keyword rngTagName element empty except externalRef grammar contained
++syn keyword rngTagName group include interleave list mixed name contained
++syn keyword rngTagName notAllowed nsName oneOrMore optional param contained
++syn keyword rngTagName parentRef ref start text value zeroOrMore contained
++
++hi def link rngTagName Statement
++
++let b:current_syntax = 'rng'
+diff -Naur vim73.orig/runtime/syntax/rpl.vim vim73/runtime/syntax/rpl.vim
+--- vim73.orig/runtime/syntax/rpl.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/rpl.vim	2013-06-07 17:07:25.868934810 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	RPL/2
+ " Version:	0.15.15 against RPL/2 version 4.00pre7i
+-" Last Change:	2003 august 24
++" Last Change:	2012 Feb 03 by Thilo Six
+ " Maintainer:	Joël BERTRAND <rpl2@free.fr>
+ " URL:		http://www.makalis.fr/~bertrand/rpl2/download/vim/indent/rpl.vim
+ " Credits:	Nothing
+@@ -14,6 +14,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Keyword characters (not used)
+ " set iskeyword=33-127
+ 
+@@ -488,4 +491,6 @@
+ 
+ let b:current_syntax = "rpl"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8 tw=132
+diff -Naur vim73.orig/runtime/syntax/rst.vim vim73/runtime/syntax/rst.vim
+--- vim73.orig/runtime/syntax/rst.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/rst.vim	2013-06-07 17:07:25.872268133 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         reStructuredText documentation format
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2010-01-23
++" Latest Revision:  2013-06-03
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -135,14 +135,34 @@
+ syn match   rstStandaloneHyperlink  contains=@NoSpell
+       \ "\<\%(\%(\%(https\=\|file\|ftp\|gopher\)://\|\%(mailto\|news\):\)[^[:space:]'\"<>]\+\|www[[:alnum:]_-]*\.[[:alnum:]_-]\+\.[^[:space:]'\"<>]\+\)[[:alnum:]/]"
+ 
+-" TODO: Use better syncing.  I donât know the specifics of syncing well enough,
+-" though.
+-syn sync minlines=50 linebreaks=1
++syn region rstCodeBlock contained matchgroup=rstDirective
++      \ start=+\%(sourcecode\|code\%(-block\)\=\)::\s+
++      \ skip=+^$+
++      \ end=+^\s\@!+ 
++      \ contains=@NoSpell
++syn cluster rstDirectives add=rstCodeBlock
++
++if !exists('g:rst_syntax_code_list')
++    let g:rst_syntax_code_list = ['vim', 'java', 'cpp', 'lisp', 'php', 'python', 'perl']
++endif
++
++for code in g:rst_syntax_code_list
++    unlet! b:current_syntax
++    exe 'syn include @rst'.code.' syntax/'.code.'.vim'
++    exe 'syn region rstDirective'.code.' matchgroup=rstDirective fold '
++                \.'start=#\%(sourcecode\|code\%(-block\)\=\)::\s\+'.code.'\s*$# '
++                \.'skip=#^$# '
++                \.'end=#^\s\@!# contains=@NoSpell,@rst'.code
++    exe 'syn cluster rstDirectives add=rstDirective'.code
++endfor
++
++" TODO: Use better syncing.
++syn sync minlines=50 linebreaks=2
+ 
+ hi def link rstTodo                         Todo
+ hi def link rstComment                      Comment
+-hi def link rstSections                     Type
+-hi def link rstTransition                   Type
++hi def link rstSections                     Title
++hi def link rstTransition                   rstSections
+ hi def link rstLiteralBlock                 String
+ hi def link rstQuotedLiteralBlock           String
+ hi def link rstDoctestBlock                 PreProc
+@@ -168,6 +188,7 @@
+ hi def link rstCitationReference            Identifier
+ hi def link rstHyperLinkReference           Identifier
+ hi def link rstStandaloneHyperlink          Identifier
++hi def link rstCodeBlock                    String
+ 
+ let b:current_syntax = "rst"
+ 
+diff -Naur vim73.orig/runtime/syntax/sas.vim vim73/runtime/syntax/sas.vim
+--- vim73.orig/runtime/syntax/sas.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sas.vim	2013-06-07 17:07:25.935601286 +0000
+@@ -1,7 +1,9 @@
+ " Vim syntax file
+ " Language:	SAS
+ " Maintainer:	James Kidd <james.kidd@covance.com>
+-" Last Change:  18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com>
++" Last Change:  2012 Apr 20
++"               Corrected bug causing some keywords to appear as strings instead
++"               18 Jul 2008 by Paulo Tanimoto <ptanimoto@gmail.com>
+ "               Fixed comments with * taking multiple lines.
+ "               Fixed highlighting of macro keywords.
+ "               Added words to cases that didn't fit anywhere.
+@@ -211,16 +213,7 @@
+ 
+ " These don't fit anywhere else (Bob Heckel).
+ " Added others that were missing.
+-syn match sasUnderscore	"_ALL_"
+-syn match sasUnderscore "_AUTOMATIC_"
+-syn match sasUnderscore	"_CHARACTER_"
+-syn match sasUnderscore	"_INFILE_"
+-syn match sasUnderscore	"_N_"
+-syn match sasUnderscore "_NAME_"
+-syn match sasUnderscore	"_NULL_"
+-syn match sasUnderscore	"_NUMERIC_"
+-syn match sasUnderscore "_USER_"
+-syn match sasUnderscore	"_WEBOUT_"
++syn keyword sasUnderscore	_ALL_ _AUTOMATIC_ _CHARACTER_ _INFILE_ _N_ _NAME_ _NULL_ _NUMERIC_ _USER_ _WEBOUT_
+ 
+ " End of SAS Functions
+ 
+diff -Naur vim73.orig/runtime/syntax/sass.vim vim73/runtime/syntax/sass.vim
+--- vim73.orig/runtime/syntax/sass.vim	2010-08-09 18:06:23.000000000 +0000
++++ vim73/runtime/syntax/sass.vim	2013-06-07 17:07:25.948934581 +0000
+@@ -2,7 +2,7 @@
+ " Language:	Sass
+ " Maintainer:	Tim Pope <vimNOSPAM@tpope.org>
+ " Filenames:	*.sass
+-" Last Change:	2010 Aug 9
++" Last Change:	2013 May 30
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -17,8 +17,8 @@
+ 
+ syn region sassDefinition matchgroup=cssBraces start="{" end="}" contains=TOP
+ 
+-syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
+-syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
++syn match sassProperty "\%([{};]\s*\|^\)\@<=\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:" contains=css.*Prop skipwhite nextgroup=sassCssAttribute contained containedin=sassDefinition
++syn match sassProperty "^\s*\zs\s\%(\%([[:alnum:]-]\|#{[^{}]*}\)\+\s*:\|:[[:alnum:]-]\+\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
+ syn match sassProperty "^\s*\zs\s\%(:\=[[:alnum:]-]\+\s*=\)"hs=s+1 contains=css.*Prop skipwhite nextgroup=sassCssAttribute
+ syn match sassCssAttribute +\%("\%([^"]\|\\"\)*"\|'\%([^']\|\\'\)*'\|#{[^{}]*}\|[^{};]\)*+ contained contains=@sassCssAttributes,sassVariable,sassFunction,sassInterpolation
+ syn match sassDefault "!default\>" contained
+@@ -34,14 +34,19 @@
+ syn match sassFunction "\<\%(percentage\|round\|ceil\|floor\|abs\)\>(\@=" contained
+ syn match sassFunction "\<\%(type-of\|unit\|unitless\|comparable\)\>(\@=" contained
+ 
+-syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,sassProperty
++syn region sassInterpolation matchgroup=sassInterpolationDelimiter start="#{" end="}" contains=@sassCssAttributes,sassVariable,sassFunction containedin=cssStringQ,cssStringQQ,cssPseudoClass,sassProperty
+ 
+ syn match sassMixinName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
+-syn match sassMixin  "^="               nextgroup=sassMixinName
++syn match sassMixin  "^="               nextgroup=sassMixinName skipwhite
+ syn match sassMixin  "\%([{};]\s*\|^\s*\)\@<=@mixin"   nextgroup=sassMixinName skipwhite
+ syn match sassMixing "^\s\+\zs+"        nextgroup=sassMixinName
+ syn match sassMixing "\%([{};]\s*\|^\s*\)\@<=@include" nextgroup=sassMixinName skipwhite
+ syn match sassExtend "\%([{};]\s*\|^\s*\)\@<=@extend"
++syn match sassPlaceholder "\%([{};]\s*\|^\s*\)\@<=%"   nextgroup=sassMixinName skipwhite
++
++syn match sassFunctionName "[[:alnum:]_-]\+" contained nextgroup=sassCssAttribute
++syn match sassFunctionDecl "\%([{};]\s*\|^\s*\)\@<=@function"   nextgroup=sassFunctionName skipwhite
++syn match sassReturn "\%([{};]\s*\|^\s*\)\@<=@return"
+ 
+ syn match sassEscape     "^\s*\zs\\"
+ syn match sassIdChar     "#[[:alnum:]_-]\@=" nextgroup=sassId
+@@ -53,11 +58,11 @@
+ " TODO: Attribute namespaces
+ " TODO: Arithmetic (including strings and concatenation)
+ 
+-syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssURL,cssUnicodeEscape,cssMediaType
++syn region sassInclude start="@import" end=";\|$" contains=scssComment,cssStringQ,cssStringQQ,cssURL,cssUnicodeEscape,cssMediaType
+ syn region sassDebugLine end=";\|$" matchgroup=sassDebug start="@debug\>" contains=@sassCssAttributes,sassVariable,sassFunction
+ syn region sassWarnLine end=";\|$" matchgroup=sassWarn start="@warn\>" contains=@sassCssAttributes,sassVariable,sassFunction
+-syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
+-syn keyword sassFor from to through contained
++syn region sassControlLine matchgroup=sassControl start="@\%(if\|else\%(\s\+if\)\=\|while\|for\|each\)\>" end="[{};]\@=\|$" contains=sassFor,@sassCssAttributes,sassVariable,sassFunction
++syn keyword sassFor from to through in contained
+ 
+ syn keyword sassTodo        FIXME NOTE TODO OPTIMIZE XXX contained
+ syn region  sassComment     start="^\z(\s*\)//"  end="^\%(\z1 \)\@!" contains=sassTodo,@Spell
+@@ -70,7 +75,10 @@
+ hi def link sassFunction                Function
+ hi def link sassMixing                  PreProc
+ hi def link sassMixin                   PreProc
++hi def link sassPlaceholder             PreProc
+ hi def link sassExtend                  PreProc
++hi def link sassFunctionDecl            PreProc
++hi def link sassReturn                  PreProc
+ hi def link sassTodo                    Todo
+ hi def link sassInclude                 Include
+ hi def link sassDebug                   sassControl
+diff -Naur vim73.orig/runtime/syntax/scheme.vim vim73/runtime/syntax/scheme.vim
+--- vim73.orig/runtime/syntax/scheme.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/scheme.vim	2013-06-07 17:07:25.982267819 +0000
+@@ -1,13 +1,13 @@
+ " Vim syntax file
+ " Language:	Scheme (R5RS + some R6RS extras)
+-" Last Change:	2009 Nov 27
++" Last Change:	2012 May 13
+ " Maintainer:	Sergey Khorev <sergey.khorev@gmail.com>
+ " Original author:	Dirk van Deun <dirk@igwe.vub.ac.be>
+ 
+ " This script incorrectly recognizes some junk input as numerals:
+ " parsing the complete system of Scheme numerals using the pattern
+ " language is practically impossible: I did a lax approximation.
+- 
++
+ " MzScheme extensions can be activated with setting is_mzscheme variable
+ 
+ " Suggestions and bug reports are solicited by the author.
+@@ -22,6 +22,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ 
+ " Fascist highlighting: everything that doesn't fit the rules is an error...
+@@ -117,7 +120,7 @@
+ syn keyword schemeFunc hashtable-delete! hashtable-contains? hashtable-update!
+ syn keyword schemeFunc hashtable-copy hashtable-clear! hashtable-keys
+ syn keyword schemeFunc hashtable-entries hashtable-equivalence-function hashtable-hash-function
+-syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash 
++syn keyword schemeFunc hashtable-mutable? equal-hash string-hash string-ci-hash symbol-hash
+ syn keyword schemeFunc find for-all exists filter partition fold-left fold-right
+ syn keyword schemeFunc remp remove remv remq memp assp cons*
+ 
+@@ -154,11 +157,11 @@
+ syn region schemeStruc matchgroup=Delimiter start="#\[" matchgroup=Delimiter end="\]" contains=ALL
+ 
+ " Simple literals:
+-syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+
++syn region schemeString start=+\%(\\\)\@<!"+ skip=+\\[\\"]+ end=+"+ contains=@Spell
+ 
+ " Comments:
+ 
+-syn match	schemeComment	";.*$"
++syn match	schemeComment	";.*$" contains=@Spell
+ 
+ 
+ " Writing out the complete description of Scheme numerals without
+@@ -189,7 +192,7 @@
+ if exists("b:is_mzscheme") || exists("is_mzscheme")
+     " MzScheme extensions
+     " multiline comment
+-    syn region	schemeComment start="#|" end="|#"
++    syn region	schemeComment start="#|" end="|#" contains=@Spell
+ 
+     " #%xxx are the special MzScheme identifiers
+     syn match schemeOther "#%[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+@@ -207,7 +210,7 @@
+     syn keyword schemeExtSyntax free-identifier=? bound-identifier=? module-identifier=? syntax-object->datum
+     syn keyword schemeExtSyntax datum->syntax-object
+     syn keyword schemeExtSyntax let-values let*-values letrec-values set!-values fluid-let parameterize begin0
+-    syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature 
++    syn keyword schemeExtSyntax error raise opt-lambda define-values unit unit/sig define-signature
+     syn keyword schemeExtSyntax invoke-unit/sig define-values/invoke-unit/sig compound-unit/sig import export
+     syn keyword schemeExtSyntax link syntax quasisyntax unsyntax with-syntax
+ 
+@@ -231,7 +234,7 @@
+     syn keyword schemeExtFunc exn:i/o:tcp? exn:i/o:udp? exn:misc? exn:misc:application? exn:misc:unsupported? exn:module? exn:read? exn:read:non-char?
+     syn keyword schemeExtFunc exn:special-comment? exn:syntax? exn:thread? exn:user? exn:variable? exn:application:mismatch?
+     " Command-line parsing
+-    syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each 
++    syn keyword schemeExtFunc command-line current-command-line-arguments once-any help-labels multi once-each
+ 
+     " syntax quoting, unquoting and quasiquotation
+     syn region schemeUnquote matchgroup=Delimiter start="#," end=![ \t\[\]()";]!me=e-1 contains=ALL
+@@ -247,7 +250,7 @@
+ 
+ if exists("b:is_chicken") || exists("is_chicken")
+     " multiline comment
+-    syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=schemeMultilineComment
++    syntax region schemeMultilineComment start=/#|/ end=/|#/ contains=@Spell,schemeMultilineComment
+ 
+     syn match schemeOther "##[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+     syn match schemeExtSyntax "#:[-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+@@ -262,8 +265,8 @@
+     syn keyword schemeExtFunc ##core#inline ##sys#error ##sys#update-errno
+ 
+     " here-string
+-    syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+
+- 
++    syn region schemeString start=+#<<\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
++
+     if filereadable(expand("<sfile>:p:h")."/cpp.vim")
+ 	unlet! b:current_syntax
+ 	syn include @ChickenC <sfile>:p:h/cpp.vim
+@@ -282,7 +285,7 @@
+ 
+     " suggested by Alex Queiroz
+     syn match schemeExtSyntax "#![-a-z!$%&*/:<=>?^_~0-9+.@#%]\+"
+-    syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ 
++    syn region schemeString start=+#<#\s*\z(.*\)+ end=+^\z1$+ contains=@Spell
+ endif
+ 
+ " Synchronization and the wrapping up...
+@@ -322,3 +325,6 @@
+ endif
+ 
+ let b:current_syntax = "scheme"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/sd.vim vim73/runtime/syntax/sd.vim
+--- vim73.orig/runtime/syntax/sd.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/sd.vim	2013-06-07 17:07:26.032267676 +0000
+@@ -3,7 +3,7 @@
+ " License: This file can be redistribued and/or modified under the same terms
+ "   as Vim itself.
+ " URL: http://netstudent.polito.it/vim_syntax/
+-" Last Change: 2006-09-27
++" Last Change: 2012 Feb 03 by Thilo Six
+ 
+ if version < 600
+         syntax clear
+@@ -11,6 +11,9 @@
+         finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " Always ignore case
+ syn case ignore
+ 
+@@ -24,13 +27,13 @@
+ syn match sdIP contained /\%(\d\{1,4}\.\)\{3}\d\{1,4}/ contains=@sdIPCluster
+ 
+ " Statements
+-syn keyword sdStatement AGGREGATE AUDIO_CHANNELS 
++syn keyword sdStatement AGGREGATE AUDIO_CHANNELS
+ syn keyword sdStatement BYTE_PER_PCKT BIT_PER_SAMPLE BITRATE
+ syn keyword sdStatement CLOCK_RATE CODING_TYPE CREATOR
+ syn match sdStatement /^\s*CODING_TYPE\>/ nextgroup=sdCoding skipwhite
+ syn match sdStatement /^\s*ENCODING_NAME\>/ nextgroup=sdEncoding skipwhite
+ syn keyword sdStatement FILE_NAME FRAME_LEN FRAME_RATE FORCE_FRAME_RATE
+-syn keyword sdStatement LICENSE 
++syn keyword sdStatement LICENSE
+ syn match sdStatement /^\s*MEDIA_SOURCE\>/ nextgroup=sdSource skipwhite
+ syn match sdStatement /^\s*MULTICAST\>/ nextgroup=sdIP skipwhite
+ syn keyword sdStatement PAYLOAD_TYPE PKT_LEN PRIORITY
+@@ -73,3 +76,6 @@
+ endif
+ 
+ let b:current_syntax = "sd"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/sdl.vim vim73/runtime/syntax/sdl.vim
+--- vim73.orig/runtime/syntax/sdl.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/sdl.vim	2013-06-07 17:07:26.058934267 +0000
+@@ -1,6 +1,6 @@
+ " Vim syntax file
+ " Language:	SDL
+-" Maintainer:	Michael Piefel <piefel@informatik.hu-berlin.de>
++" Maintainer:	Michael Piefel <entwurf@piefel.de>
+ " Last Change:	2 May 2001
+ 
+ " For version 5.x: Clear all syntax items
+diff -Naur vim73.orig/runtime/syntax/sendpr.vim vim73/runtime/syntax/sendpr.vim
+--- vim73.orig/runtime/syntax/sendpr.vim	2010-05-15 11:03:55.000000000 +0000
++++ vim73/runtime/syntax/sendpr.vim	2013-06-07 17:07:26.065600915 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language: FreeBSD send-pr file
+ " Maintainer: Hendrik Scholz <hendrik@scholz.net>
+-" Last Change: 2002 Mar 21
++" Last Change: 2012 Feb 03
+ "
+ " http://raisdorf.net/files/misc/send-pr.vim
+ 
+@@ -13,6 +13,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn match sendprComment /^SEND-PR:/
+ " email address
+ syn match sendprType /<[a-zA-Z0-9\-\_\.]*@[a-zA-Z0-9\-\_\.]*>/
+@@ -30,3 +33,6 @@
+ hi def link sendprType      Type
+ hi def link sendprString    String
+ hi def link sendprLabel     Label
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/sgmldecl.vim vim73/runtime/syntax/sgmldecl.vim
+--- vim73.orig/runtime/syntax/sgmldecl.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sgmldecl.vim	2013-06-07 17:07:26.105600800 +0000
+@@ -12,6 +12,8 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ syn case ignore
+ 
+@@ -76,4 +78,8 @@
+ endif
+ 
+ let b:current_syntax = "sgmldecl"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:set tw=78 ts=4:
+diff -Naur vim73.orig/runtime/syntax/sgmllnx.vim vim73/runtime/syntax/sgmllnx.vim
+--- vim73.orig/runtime/syntax/sgmllnx.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sgmllnx.vim	2013-06-07 17:07:26.122267419 +0000
+@@ -1,8 +1,7 @@
+ " Vim syntax file
+ " Language:	SGML-linuxdoc (supported by old sgmltools-1.x)
+-"		(for more information, visit www.sgmltools.org)
+ " Maintainer:	SungHyun Nam <goweol@gmail.com>
+-" Last Change:	2008 Sep 17
++" Last Change:	2013 May 13
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -29,7 +28,7 @@
+ syn keyword sgmllnxTagName contained article author date toc title sect verb
+ syn keyword sgmllnxTagName contained abstract tscreen p itemize item enum
+ syn keyword sgmllnxTagName contained descrip quote htmlurl code ref
+-syn keyword sgmllnxTagName contained tt tag bf
++syn keyword sgmllnxTagName contained tt tag bf it url
+ syn match   sgmllnxTagName contained "sect\d\+"
+ 
+ " Comments
+diff -Naur vim73.orig/runtime/syntax/sh.vim vim73/runtime/syntax/sh.vim
+--- vim73.orig/runtime/syntax/sh.vim	2010-08-05 20:00:59.000000000 +0000
++++ vim73/runtime/syntax/sh.vim	2013-06-07 17:07:26.135600715 +0000
+@@ -1,9 +1,9 @@
+ " Vim syntax file
+ " Language:		shell (sh) Korn shell (ksh) bash (sh)
+-" Maintainer:		Dr. Charles E. Campbell, Jr.  <NdrOchipS@PcampbellAfamily.Mbiz>
++" Maintainer:		Charles E. Campbell  <NdrOchipS@PcampbellAfamily.Mbiz>
+ " Previous Maintainer:	Lennart Schultz <Lennart.Schultz@ecmwf.int>
+-" Last Change:		Aug 04, 2010
+-" Version:		114
++" Last Change:		Mar 04, 2013
++" Version:		129
+ " URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
+ " For options and settings, please use:      :help ft-sh-syntax
+ " This file includes many ideas from ?ric Brunet (eric.brunet@ens.fr)
+@@ -16,12 +16,41 @@
+   finish
+ endif
+ 
++" AFAICT "." should be considered part of the iskeyword.  Using iskeywords in
++" syntax is dicey, so the following code permits the user to
++"  g:sh_isk set to a string	: specify iskeyword.
++"  g:sh_noisk exists	: don't change iskeyword
++"  g:sh_noisk does not exist	: (default) append "." to iskeyword
++if exists("g:sh_isk") && type(g:sh_isk) == 1	" user specifying iskeyword
++ exe "setl isk=".g:sh_isk
++elseif !exists("g:sh_noisk")		" optionally prevent appending '.' to iskeyword
++ setl isk+=.
++endif
++
++" trying to answer the question: which shell is /bin/sh, really?
++" If the user has not specified any of g:is_kornshell, g:is_bash, g:is_posix, g:is_sh, then guess.
++if !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix") && !exists("g:is_sh")
++ if executable("/bin/sh")
++  if     resolve("/bin/sh") =~ 'bash$'
++   let g:is_bash= 1
++  elseif resolve("/bin/sh") =~ 'ksh$'
++   let g:is_ksh = 1
++  endif
++ elseif executable("/usr/bin/sh")
++  if     resolve("/usr/bin//sh") =~ 'bash$'
++   let g:is_bash= 1
++  elseif resolve("/usr/bin//sh") =~ 'ksh$'
++   let g:is_ksh = 1
++  endif
++ endif
++endif
++
+ " handling /bin/sh with is_kornshell/is_sh {{{1
+ " b:is_sh is set when "#! /bin/sh" is found;
+ " However, it often is just a masquerade by bash (typically Linux)
+ " or kornshell (typically workstations with Posix "sh").
+-" So, when the user sets "is_bash" or "is_kornshell",
+-" a b:is_sh is converted into b:is_bash/b:is_kornshell,
++" So, when the user sets "g:is_bash", "g:is_kornshell",
++" or "g:is_posix", a b:is_sh is converted into b:is_bash/b:is_kornshell,
+ " respectively.
+ if !exists("b:is_kornshell") && !exists("b:is_bash")
+   if exists("g:is_posix") && !exists("g:is_kornshell")
+@@ -50,16 +79,19 @@
+  echomsg "Ignoring g:sh_fold_enabled=".g:sh_fold_enabled."; need to re-compile vim for +fold support"
+ endif
+ if !exists("s:sh_fold_functions")
+- let s:sh_fold_functions = 1
++ let s:sh_fold_functions= and(g:sh_fold_enabled,1)
+ endif
+ if !exists("s:sh_fold_heredoc")
+- let s:sh_fold_heredoc   = 2
++ let s:sh_fold_heredoc  = and(g:sh_fold_enabled,2)
+ endif
+ if !exists("s:sh_fold_ifdofor")
+- let s:sh_fold_ifdofor   = 4
++ let s:sh_fold_ifdofor  = and(g:sh_fold_enabled,4)
+ endif
+ if g:sh_fold_enabled && &fdm == "manual"
+- setlocal fdm=syntax
++ " Given that	the	user provided g:sh_fold_enabled
++ " 	AND	g:sh_fold_enabled is manual (usual default)
++ " 	implies	a desire for syntax-based folding
++ setl fdm=syntax
+ endif
+ 
+ " sh syntax is case sensitive {{{1
+@@ -74,17 +106,17 @@
+ syn cluster shArithParenList	contains=shArithmetic,shCaseEsac,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shExDoubleQuote,shRedir,shSingleQuote,shDoubleQuote,shStatement,shVariable,shAlias,shTest,shCtrlSeq,shSpecial,shParen,bashSpecialVariables,bashStatement
+ syn cluster shArithList	contains=@shArithParenList,shParenError
+ syn cluster shCaseEsacList	contains=shCaseStart,shCase,shCaseBar,shCaseIn,shComment,shDeref,shDerefSimple,shCaseCommandSub,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote,shCtrlSeq,@shErrorList,shStringSpecial,shCaseRange
+-syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
+-syn cluster shColonList	contains=@shCaseList
+-syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shEscape,shNumber,shOperator,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial
++syn cluster shCaseList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq
++"syn cluster shColonList	contains=@shCaseList
++syn cluster shCommandSubList	contains=shArithmetic,shDeref,shDerefSimple,shEcho,shEscape,shNumber,shOption,shPosnParm,shExSingleQuote,shSingleQuote,shExDoubleQuote,shDoubleQuote,shStatement,shVariable,shSubSh,shAlias,shTest,shCtrlSeq,shSpecial,shCmdParenRegion
+ syn cluster shCurlyList	contains=shNumber,shComma,shDeref,shDerefSimple,shDerefSpecial
+-syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shPosnParm,shCtrlSeq,shSpecial
++syn cluster shDblQuoteList	contains=shCommandSub,shDeref,shDerefSimple,shEscape,shPosnParm,shCtrlSeq,shSpecial
+ syn cluster shDerefList	contains=shDeref,shDerefSimple,shDerefVar,shDerefSpecial,shDerefWordError,shDerefPPS
+ syn cluster shDerefVarList	contains=shDerefOp,shDerefVarArray,shDerefOpError
+-syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
++syn cluster shEchoList	contains=shArithmetic,shCommandSub,shDeref,shDerefSimple,shEscape,shExpr,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shCtrlSeq,shEchoQuote
+ syn cluster shExprList1	contains=shCharClass,shNumber,shOperator,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shDblBrace,shDeref,shDerefSimple,shCtrlSeq
+ syn cluster shExprList2	contains=@shExprList1,@shCaseList,shTest
+-syn cluster shFunctionList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
++syn cluster shFunctionList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shHereDoc,shIf,shOption,shRedir,shSetList,shSource,shStatement,shVariable,shOperator,shCtrlSeq
+ if exists("b:is_kornshell") || exists("b:is_bash")
+  syn cluster shFunctionList	add=shRepeat
+  syn cluster shFunctionList	add=shDblBrace,shDblParen
+@@ -93,10 +125,10 @@
+ syn cluster shHereList	contains=shBeginHere,shHerePayload
+ syn cluster shHereListDQ	contains=shBeginHere,@shDblQuoteList,shHerePayload
+ syn cluster shIdList	contains=shCommandSub,shWrapLineOperator,shSetOption,shDeref,shDerefSimple,shRedir,shExSingleQuote,shExDoubleQuote,shSingleQuote,shDoubleQuote,shExpr,shCtrlSeq,shStringSpecial
+-syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet
+-syn cluster shSubShList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
+-syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
+-
++syn cluster shIfList	contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey,shFunctionOne,shFunctionTwo
++syn cluster shLoopList	contains=@shCaseList,shTestOpr,shExpr,shDblBrace,shConditional,shCaseEsac,shTest,@shErrorList,shSet,shOption
++syn cluster shSubShList	contains=@shCommandSubList,shCaseEsac,shColon,shCommandSub,shComment,shDo,shEcho,shExpr,shFor,shIf,shRedir,shSetList,shSource,shStatement,shVariable,shCtrlSeq,shOperator
++syn cluster shTestList	contains=shCharClass,shComment,shCommandSub,shDeref,shDerefSimple,shExDoubleQuote,shDoubleQuote,shExpr,shNumber,shOperator,shExSingleQuote,shSingleQuote,shTestOpr,shTest,shCtrlSeq
+ " Echo: {{{1
+ " ====
+ " This one is needed INSIDE a CommandSub, so that `echo bla` be correct
+@@ -111,28 +143,30 @@
+ " =====
+ if exists("b:is_kornshell") || exists("b:is_bash")
+  syn match shStatement "\<alias\>"
+- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\w\+\)\@=" skip="\\$" end="\>\|`"
+- syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\w\+=\)\@=" skip="\\$" end="="
++ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+\)\@="  skip="\\$" end="\>\|`"
++ syn region shAlias matchgroup=shStatement start="\<alias\>\s\+\(\h[-._[:alnum:]]\+=\)\@=" skip="\\$" end="="
+ endif
+ 
+ " Error Codes: {{{1
+ " ============
+-syn match   shDoError "\<done\>"
+-syn match   shIfError "\<fi\>"
+-syn match   shInError "\<in\>"
+-syn match   shCaseError ";;"
+-syn match   shEsacError "\<esac\>"
+-syn match   shCurlyError "}"
+-syn match   shParenError ")"
+-syn match   shOK	'\.\(done\|fi\|in\|esac\)'
+-if exists("b:is_kornshell")
+- syn match     shDTestError "]]"
++if !exists("g:sh_no_error")
++ syn match   shDoError "\<done\>"
++ syn match   shIfError "\<fi\>"
++ syn match   shInError "\<in\>"
++ syn match   shCaseError ";;"
++ syn match   shEsacError "\<esac\>"
++ syn match   shCurlyError "}"
++ syn match   shParenError ")"
++ syn match   shOK	'\.\(done\|fi\|in\|esac\)'
++ if exists("b:is_kornshell")
++  syn match     shDTestError "]]"
++ endif
++ syn match     shTestError "]"
+ endif
+-syn match     shTestError "]"
+ 
+ " Options: {{{1
+ " ====================
+-syn match   shOption	"\s\zs[-+][-_a-zA-Z0-9]\+\>"
++syn match   shOption	"\s\zs[-+][-_a-zA-Z0-9#]\+"
+ syn match   shOption	"\s\zs--[^ \t$`'"|]\+"
+ 
+ " File Redirection Highlighted As Operators: {{{1
+@@ -152,8 +186,8 @@
+ 
+ " Subshells: {{{1
+ " ==========
+-syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"	contains=@shExprList2 nextgroup=shMoreSpecial
+-syn region shSubSh transparent matchgroup=shSubShRegion start="(" end=")"	contains=@shSubShList nextgroup=shMoreSpecial
++syn region shExpr  transparent matchgroup=shExprRegion  start="{" end="}"		contains=@shExprList2 nextgroup=shMoreSpecial
++syn region shSubSh transparent matchgroup=shSubShRegion start="[^(]\zs(" end=")"	contains=@shSubShList nextgroup=shMoreSpecial
+ 
+ " Tests: {{{1
+ "=======
+@@ -162,7 +196,7 @@
+ syn match  shTestOpr	contained	"<=\|>=\|!=\|==\|-.\>\|-\(nt\|ot\|ef\|eq\|ne\|lt\|le\|gt\|ge\)\>\|[!<>]"
+ syn match  shTestOpr	contained	'=' skipwhite nextgroup=shTestDoubleQuote,shTestSingleQuote,shTestPattern
+ syn match  shTestPattern	contained	'\w\+'
+-syn match  shTestDoubleQuote	contained	'"[^"]*"'
++syn match  shTestDoubleQuote	contained	'\%(\%(\\\\\)*\\\)\@<!"[^"]*"'
+ syn match  shTestSingleQuote	contained	'\\.'
+ syn match  shTestSingleQuote	contained	"'[^']*'"
+ if exists("b:is_kornshell") || exists("b:is_bash")
+@@ -176,14 +210,15 @@
+ 
+ " Loops: do, if, while, until {{{1
+ " ======
+-if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
++if s:sh_fold_ifdofor
+  syn region shDo	fold transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
+- syn region shIf	fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey
+- syn region shFor	fold matchgroup=shLoop start="\<for\_s" end="\<in\_s" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
++ syn region shIf	fold transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
++ syn region shFor	fold matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\_s" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
+ else
+  syn region shDo	transparent matchgroup=shConditional start="\<do\>" matchgroup=shConditional end="\<done\>" contains=@shLoopList
+- syn region shIf	transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional end="\<;\_s*then\>" end="\<fi\>"   contains=@shLoopList,shDblBrace,shDblParen,shFunctionKey
+- syn region shFor	matchgroup=shLoop start="\<for\_s" end="\<in\>" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
++ syn region shIf	transparent matchgroup=shConditional start="\<if\_s" matchgroup=shConditional skip=+-fi\>+ end="\<;\_s*then\>" end="\<fi\>"   contains=@shIfList
++ syn region shFor	matchgroup=shLoop start="\<for\ze\_s\s*\%(((\)\@!" end="\<in\>" end="\<do\>"me=e-2	contains=@shLoopList,shDblParen skipwhite nextgroup=shCurlyIn
++ syn match  shForPP	'\<for\>\ze\_s*(('
+ endif
+ if exists("b:is_kornshell") || exists("b:is_bash")
+  syn cluster shCaseList	add=shRepeat
+@@ -202,7 +237,7 @@
+ " ====
+ syn match   shCaseBar	contained skipwhite "\(^\|[^\\]\)\(\\\\\)*\zs|"		nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
+ syn match   shCaseStart	contained skipwhite skipnl "("			nextgroup=shCase,shCaseBar
+-if (g:sh_fold_enabled % (s:sh_fold_ifdofor * 2))/s:sh_fold_ifdofor
++if s:sh_fold_ifdofor
+  syn region  shCase	fold contained skipwhite skipnl matchgroup=shSnglCase start="\%(\\.\|[^#$()'" \t]\)\{-}\zs)"  end=";;" end="esac"me=s-1 contains=@shCaseList nextgroup=shCaseStart,shCase,shComment
+  syn region  shCaseEsac	fold matchgroup=shConditional start="\<case\>" end="\<esac\>"	contains=@shCaseEsacList
+ else
+@@ -212,19 +247,23 @@
+ syn keyword shCaseIn	contained skipwhite skipnl in			nextgroup=shCase,shCaseStart,shCaseBar,shComment,shCaseExSingleQuote,shCaseSingleQuote,shCaseDoubleQuote
+ if exists("b:is_bash")
+  syn region  shCaseExSingleQuote	matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
+-else
++elseif !exists("g:sh_no_error")
+  syn region  shCaseExSingleQuote	matchgroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
+ endif
+ syn region  shCaseSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=shStringSpecial		skipwhite skipnl nextgroup=shCaseBar	contained
+ syn region  shCaseDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\\\\|\\.+ end=+"+	contains=@shDblQuoteList,shStringSpecial	skipwhite skipnl nextgroup=shCaseBar	contained
+ syn region  shCaseCommandSub	start=+`+ skip=+\\\\\|\\.+ end=+`+		contains=@shCommandSubList		skipwhite skipnl nextgroup=shCaseBar	contained
+-syn region  shCaseRange	matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+]+	contained
+-
++if exists("b:is_bash")
++ syn region  shCaseRange	matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+	contained	contains=shCharClass
++ syn match   shCharClass	'\[:\%(alnum\|alpha\|ascii\|blank\|cntrl\|digit\|graph\|lower\|print\|punct\|space\|upper\|word\|or\|xdigit\):\]'			contained
++else
++ syn region  shCaseRange	matchgroup=Delimiter start=+\[+ skip=+\\\\+ end=+\]+	contained
++endif
+ " Misc: {{{1
+ "======
+ syn match   shWrapLineOperator "\\$"
+-syn region  shCommandSub   start="`" skip="\\\\\|\\." end="`" contains=@shCommandSubList
+-syn match   shEscape	contained	'\\.'
++syn region  shCommandSub   start="`" skip="\\\\\|\\." end="`"	contains=@shCommandSubList
++syn match   shEscape	contained	'\%(\\\\\)*\\.'
+ 
+ " $() and $(()): {{{1
+ " $(..) is not supported by sh (Bourne shell).  However, apparently
+@@ -235,30 +274,35 @@
+ if exists("b:is_kornshell") || exists("b:is_bash")
+  syn region shCommandSub matchgroup=shCmdSubRegion start="\$("  skip='\\\\\|\\.' end=")"  contains=@shCommandSubList
+  syn region shArithmetic matchgroup=shArithRegion  start="\$((" skip='\\\\\|\\.' end="))" contains=@shArithList
++ syn region shArithmetic matchgroup=shArithRegion  start="\$\[" skip='\\\\\|\\.' end="\]" contains=@shArithList
+  syn match  shSkipInitWS contained	"^\s\+"
+-else
++elseif !exists("g:sh_no_error")
+  syn region shCommandSub matchgroup=Error start="\$(" end=")" contains=@shCommandSubList
+ endif
++syn region shCmdParenRegion matchgroup=shCmdSubRegion start="(" skip='\\\\\|\\.' end=")"	contains=@shCommandSubList
+ 
+ if exists("b:is_bash")
+  syn cluster shCommandSubList add=bashSpecialVariables,bashStatement
+  syn cluster shCaseList add=bashAdminStatement,bashStatement
+- syn keyword bashSpecialVariables contained BASH BASH_ENV BASH_VERSINFO BASH_VERSION CDPATH DIRSTACK EUID FCEDIT FIGNORE GLOBIGNORE GROUPS HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_MESSAGES LINENO MACHTYPE MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELLOPTS SHLVL TIMEFORMAT TIMEOUT UID auto_resume histchars
+- syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep install less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
++ syn keyword bashSpecialVariables contained auto_resume BASH BASH_ALIASES BASH_ALIASES BASH_ARGC BASH_ARGC BASH_ARGV BASH_ARGV BASH_CMDS BASH_CMDS BASH_COMMAND BASH_COMMAND BASH_ENV BASH_EXECUTION_STRING BASH_EXECUTION_STRING BASH_LINENO BASH_LINENO BASHOPTS BASHOPTS BASHPID BASHPID BASH_REMATCH BASH_REMATCH BASH_SOURCE BASH_SOURCE BASH_SUBSHELL BASH_SUBSHELL BASH_VERSINFO BASH_VERSION BASH_XTRACEFD BASH_XTRACEFD CDPATH COLUMNS COLUMNS COMP_CWORD COMP_CWORD COMP_KEY COMP_KEY COMP_LINE COMP_LINE COMP_POINT COMP_POINT COMPREPLY COMPREPLY COMP_TYPE COMP_TYPE COMP_WORDBREAKS COMP_WORDBREAKS COMP_WORDS COMP_WORDS COPROC COPROC DIRSTACK EMACS EMACS ENV ENV EUID FCEDIT FIGNORE FUNCNAME FUNCNAME FUNCNEST FUNCNEST GLOBIGNORE GROUPS histchars HISTCMD HISTCONTROL HISTFILE HISTFILESIZE HISTIGNORE HISTSIZE HISTTIMEFORMAT HISTTIMEFORMAT HOME HOSTFILE HOSTNAME HOSTTYPE IFS IGNOREEOF INPUTRC LANG LC_ALL LC_COLLATE LC_CTYPE LC_CTYPE LC_MESSAGES LC_NUMERIC LC_NUMERIC LINENO LINES LINES MACHTYPE MAIL MAILCHECK MAILPATH MAPFILE MAPFILE OLDPWD OPTARG OPTERR OPTIND OSTYPE PATH PIPESTATUS POSIXLY_CORRECT POSIXLY_CORRECT PPID PROMPT_COMMAND PS1 PS2 PS3 PS4 PWD RANDOM READLINE_LINE READLINE_LINE READLINE_POINT READLINE_POINT REPLY SECONDS SHELL SHELL SHELLOPTS SHLVL TIMEFORMAT TIMEOUT TMPDIR TMPDIR UID
++ syn keyword bashStatement chmod clear complete du egrep expr fgrep find gnufind gnugrep grep less ls mkdir mv rm rmdir rpm sed sleep sort strip tail touch
+  syn keyword bashAdminStatement daemon killall killproc nice reload restart start status stop
++ syn keyword bashStatement	command compgen
+ endif
+ 
+ if exists("b:is_kornshell")
+  syn cluster shCommandSubList add=kshSpecialVariables,kshStatement
+  syn cluster shCaseList add=kshStatement
+  syn keyword kshSpecialVariables contained CDPATH COLUMNS EDITOR ENV ERRNO FCEDIT FPATH HISTFILE HISTSIZE HOME IFS LINENO LINES MAIL MAILCHECK MAILPATH OLDPWD OPTARG OPTIND PATH PPID PS1 PS2 PS3 PS4 PWD RANDOM REPLY SECONDS SHELL TMOUT VISUAL
+- syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep install killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail touch tput
++ syn keyword kshStatement cat chmod clear cp du egrep expr fgrep find grep killall less ls mkdir mv nice printenv rm rmdir sed sort strip stty tail touch tput
++ syn keyword kshStatement command setgroups setsenv
+ endif
+ 
+ syn match   shSource	"^\.\s"
+ syn match   shSource	"\s\.\s"
+ "syn region  shColon	start="^\s*:" end="$" end="\s#"me=e-2 contains=@shColonList
+-syn region  shColon	start="^\s*\zs:" end="$" end="\s#"me=e-2
++"syn region  shColon	start="^\s*\zs:" end="$" end="\s#"me=e-2
++syn match   shColon	'^\s*\zs:'
+ 
+ " String And Character Constants: {{{1
+ "================================
+@@ -270,16 +314,17 @@
+ if exists("b:is_bash")
+  syn region  shExSingleQuote	matchgroup=shQuote start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial,shSpecial
+  syn region  shExDoubleQuote	matchgroup=shQuote start=+\$"+ skip=+\\\\\|\\.\|\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,shSpecial
+-else
++elseif !exists("g:sh_no_error")
+  syn region  shExSingleQuote	matchGroup=Error start=+\$'+ skip=+\\\\\|\\.+ end=+'+	contains=shStringSpecial
+  syn region  shExDoubleQuote	matchGroup=Error start=+\$"+ skip=+\\\\\|\\.+ end=+"+	contains=shStringSpecial
+ endif
+ syn region  shSingleQuote	matchgroup=shQuote start=+'+ end=+'+		contains=@Spell
+-syn region  shDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
++syn region  shDoubleQuote	matchgroup=shQuote start=+\%(\%(\\\\\)*\\\)\@<!"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
++"syn region  shDoubleQuote	matchgroup=shQuote start=+"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial,@Spell
+ syn match   shStringSpecial	"[^[:print:] \t]"	contained
+ syn match   shStringSpecial	"\%(\\\\\)*\\[\\"'`$()#]"
+-syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial
+-syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"
++syn match   shSpecial	"[^\\]\zs\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial,shComment
++syn match   shSpecial	"^\%(\\\\\)*\\[\\"'`$()#]"	nextgroup=shComment
+ syn match   shMoreSpecial	"\%(\\\\\)*\\[\\"'`$()#]" nextgroup=shMoreSpecial contained
+ 
+ " Comments: {{{1
+@@ -288,6 +333,7 @@
+ syn keyword	shTodo	contained		COMBAK FIXME TODO XXX
+ syn match	shComment		"^\s*\zs#.*$"	contains=@shCommentGroup
+ syn match	shComment		"\s\zs#.*$"	contains=@shCommentGroup
++syn match	shComment	contained	"#.*$"	contains=@shCommentGroup
+ syn match	shQuickComment	contained	"#.*$"
+ 
+ " Here Documents: {{{1
+@@ -300,51 +346,52 @@
+  syn region shHereDoc matchgroup=shRedir start="<<\s*\**\.\**"	matchgroup=shRedir	end="^\.$"	contains=@shDblQuoteList
+  syn region shHereDoc matchgroup=shRedir start="<<-\s*\**\.\**"	matchgroup=shRedir	end="^\s*\.$"	contains=@shDblQuoteList
+ 
+-elseif (g:sh_fold_enabled % (s:sh_fold_heredoc * 2))/s:sh_fold_heredoc
+- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"	contains=@shDblQuoteList
+- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\"\z(\S*\)\""		matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<\s*'\z(\S*\)'"		matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$"	contains=@shDblQuoteList
+- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\"\z(\S*\)\""		matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*'\z(\S*\)'"		matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*'\z(\S*\)'"		matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*'\z(\S*\)'"		matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir fold start="<<\\\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
++elseif s:sh_fold_heredoc
++ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\z([^ \t|]*\)"		matchgroup=shRedir end="^\z1\s*$"	contains=@shDblQuoteList
++ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<\s*'\z([^ \t|]*\)'"		matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\z([^ \t|]*\)"		matchgroup=shRedir end="^\s*\z1\s*$"	contains=@shDblQuoteList
++ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*'\z([^ \t|]*\)'"		matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\z([^ \t|]*\)"	matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*'\z([^ \t|]*\)'"	matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\z([^ \t|]*\)"	matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<-\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<\s*\\\_$\_s*'\z([^ \t|]*\)'"	matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir fold start="<<\\\z([^ \t|]*\)"		matchgroup=shRedir end="^\z1\s*$"
+ 
+ else
+- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z(\S*\)"	matchgroup=shRedir end="^\z1\s*$"    contains=@shDblQuoteList
+- syn region shHereDoc matchgroup=shRedir start="<<\s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<-\s*\z(\S*\)"		matchgroup=shRedir end="^\s*\z1\s*$" contains=@shDblQuoteList
+- syn region shHereDoc matchgroup=shRedir start="<<-\s*'\z(\S*\)'"	matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<\s*'\z(\S*\)'"	matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<-\s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\z(\S*\)"	matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\z(\S*\)"	matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*'\z(\S*\)'"	matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*'\z(\S*\)'"	matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z(\S*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
+- syn region shHereDoc matchgroup=shRedir start="<<\\\z(\S*\)"		matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\=\z([^ \t|]*\)"		matchgroup=shRedir end="^\z1\s*$"    contains=@shDblQuoteList
++ syn region shHereDoc matchgroup=shRedir start="<<\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<-\s*\z([^ \t|]*\)"		matchgroup=shRedir end="^\s*\z1\s*$" contains=@shDblQuoteList
++ syn region shHereDoc matchgroup=shRedir start="<<-\s*'\z([^ \t|]*\)'"		matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<\s*'\z([^ \t|]*\)'"		matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<-\s*\"\z([^ \t|]*\)\""		matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\z([^ \t|]*\)"		matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\z([^ \t|]*\)"		matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*'\z([^ \t|]*\)'"		matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*'\z([^ \t|]*\)'"		matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir end="^\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<-\s*\\\_$\_s*\"\z([^ \t|]*\)\""	matchgroup=shRedir end="^\s*\z1\s*$"
++ syn region shHereDoc matchgroup=shRedir start="<<\\\z([^ \t|]*\)"		matchgroup=shRedir end="^\z1\s*$"
+ endif
+ 
+ " Here Strings: {{{1
+ " =============
+-if exists("b:is_bash")
+- syn match shRedir "<<<"
++" available for: bash; ksh (really should be ksh93 only) but not if its a posix
++if exists("b:is_bash") || (exists("b:is_kornshell") && !exists("g:is_posix"))
++ syn match shRedir "<<<"	skipwhite	nextgroup=shCmdParenRegion
+ endif
+ 
+ " Identifiers: {{{1
+ "=============
+ syn match  shSetOption	"\s\zs[-+][a-zA-Z0-9]\+\>"	contained
+ syn match  shVariable	"\<\([bwglsav]:\)\=[a-zA-Z0-9.!@_%+,]*\ze="	nextgroup=shSetIdentifier
+-syn match  shSetIdentifier	"="		contained	nextgroup=shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote
++syn match  shSetIdentifier	"="		contained	nextgroup=shCmdParenRegion,shPattern,shDeref,shDerefSimple,shDoubleQuote,shExDoubleQuote,shSingleQuote,shExSingleQuote
+ if exists("b:is_bash")
+  syn region shSetList oneline matchgroup=shSet start="\<\(declare\|typeset\|local\|export\|unset\)\>\ze[^/]" end="$"	matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+#\|=" contains=@shIdList
+- syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"			matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
++ syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="\ze[;|)]\|$"			matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+=" contains=@shIdList
+ elseif exists("b:is_kornshell")
+  syn region shSetList oneline matchgroup=shSet start="\<\(typeset\|export\|unset\)\>\ze[^/]" end="$"		matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+  syn region shSetList oneline matchgroup=shSet start="\<set\>\ze[^/]" end="$"				matchgroup=shSetListDelim end="\ze[}|);&]" matchgroup=NONE end="\ze\s\+[#=]" contains=@shIdList
+@@ -358,15 +405,15 @@
+ endif
+ 
+ if exists("b:is_bash")
+- if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions
+-  syn region shFunctionOne fold	matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{" end="}"	contains=@shFunctionList			skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
++ if s:sh_fold_functions
++  syn region shFunctionOne fold	matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{"	end="}"	contains=@shFunctionList			skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
+   syn region shFunctionTwo fold	matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{"	end="}"	contains=shFunctionKey,@shFunctionList contained	skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
+  else
+   syn region shFunctionOne	matchgroup=shFunction start="^\s*\h[-a-zA-Z_0-9]*\s*()\_s*{"	end="}"	contains=@shFunctionList
+   syn region shFunctionTwo	matchgroup=shFunction start="\h[-a-zA-Z_0-9]*\s*\%(()\)\=\_s*{"	end="}"	contains=shFunctionKey,@shFunctionList contained
+  endif
+ else
+- if (g:sh_fold_enabled % (s:sh_fold_functions * 2))/s:sh_fold_functions
++ if s:sh_fold_functions
+   syn region shFunctionOne fold	matchgroup=shFunction start="^\s*\h\w*\s*()\_s*{" end="}"	contains=@shFunctionList			skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
+   syn region shFunctionTwo fold	matchgroup=shFunction start="\h\w*\s*\%(()\)\=\_s*{"	end="}"	contains=shFunctionKey,@shFunctionList contained	skipwhite skipnl nextgroup=shFunctionStart,shQuickComment
+  else
+@@ -377,9 +424,11 @@
+ 
+ " Parameter Dereferencing: {{{1
+ " ========================
+-syn match  shDerefSimple	"\$\%(\h\w*\|\d\)"
++syn match  shDerefSimple	"\$\%(\k\+\|\d\)"
+ syn region shDeref	matchgroup=PreProc start="\${" end="}"	contains=@shDerefList,shDerefVarArray
+-syn match  shDerefWordError	"[^}$[]"	contained
++if !exists("g:sh_no_error")
++ syn match  shDerefWordError	"[^}$[]"	contained
++endif
+ syn match  shDerefSimple	"\$[-#*@!?]"
+ syn match  shDerefSimple	"\$\$"
+ if exists("b:is_bash") || exists("b:is_kornshell")
+@@ -391,12 +440,12 @@
+ " ====================================
+ if exists("b:is_bash")
+  syn region shDeref	matchgroup=PreProc start="\${!" end="\*\=}"	contains=@shDerefList,shDerefOp
+- syn match  shDerefVar	contained	"{\@<=!\w\+"		nextgroup=@shDerefVarList
++ syn match  shDerefVar	contained	"{\@<=!\k\+"		nextgroup=@shDerefVarList
+ endif
+ 
+ syn match  shDerefSpecial	contained	"{\@<=[-*@?0]"		nextgroup=shDerefOp,shDerefOpError
+ syn match  shDerefSpecial	contained	"\({[#!]\)\@<=[[:alnum:]*@_]\+"	nextgroup=@shDerefVarList,shDerefOp
+-syn match  shDerefVar	contained	"{\@<=\w\+"		nextgroup=@shDerefVarList
++syn match  shDerefVar	contained	"{\@<=\k\+"		nextgroup=@shDerefVarList
+ 
+ " sh ksh bash : ${var[... ]...}  array reference: {{{1
+ syn region  shDerefVarArray   contained	matchgroup=shDeref start="\[" end="]"	contains=@shCommandSubList nextgroup=shDerefOp,shDerefOpError
+@@ -410,8 +459,14 @@
+ "    ksh bash : ${parameter##pattern} remove large left  pattern
+ "    ksh bash : ${parameter%pattern}  remove small right pattern
+ "    ksh bash : ${parameter%%pattern} remove large right pattern
++"        bash : ${parameter^pattern}  Case modification
++"        bash : ${parameter^^pattern} Case modification
++"        bash : ${parameter,pattern}  Case modification
++"        bash : ${parameter,,pattern} Case modification
+ syn cluster shDerefPatternList	contains=shDerefPattern,shDerefString
+-syn match shDerefOpError	contained	":[[:punct:]]"
++if !exists("g:sh_no_error")
++ syn match shDerefOpError	contained	":[[:punct:]]"
++endif
+ syn match  shDerefOp	contained	":\=[-=?]"	nextgroup=@shDerefPatternList
+ syn match  shDerefOp	contained	":\=+"	nextgroup=@shDerefPatternList
+ if exists("b:is_bash") || exists("b:is_kornshell")
+@@ -421,6 +476,9 @@
+  syn region shDerefPattern	contained	start="{" end="}"	contains=shDeref,shDerefSimple,shDerefString,shCommandSub nextgroup=shDerefPattern
+  syn match  shDerefEscape	contained	'\%(\\\\\)*\\.'
+ endif
++if exists("b:is_bash")
++ syn match  shDerefOp	contained	"[,^]\{1,2}"	nextgroup=@shDerefPatternList
++endif
+ syn region shDerefString	contained	matchgroup=shDerefDelim start=+\%(\\\)\@<!'+ end=+'+		contains=shStringSpecial
+ syn region shDerefString	contained	matchgroup=shDerefDelim start=+\%(\\\)\@<!"+ skip=+\\"+ end=+"+	contains=@shDblQuoteList,shStringSpecial
+ syn match  shDerefString	contained	"\\["']"	nextgroup=shDerefPattern
+@@ -434,18 +492,20 @@
+  " bash : ${parameter//pattern/string}
+  " bash : ${parameter//pattern}
+  syn match  shDerefPPS	contained	'/\{1,2}'	nextgroup=shDerefPPSleft
+- syn region shDerefPPSleft	contained	start='.'	skip=@\%(\\\)\/@ matchgroup=shDerefOp end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList
+- syn region shDerefPPSright	contained	start='.'	end='\ze}'	contains=@shCommandSubList
++ syn region shDerefPPSleft	contained	start='.'	skip=@\%(\\\\\)*\\/@ matchgroup=shDerefOp	end='/' end='\ze}' nextgroup=shDerefPPSright contains=@shCommandSubList
++ syn region shDerefPPSright	contained	start='.'	skip=@\%(\\\\\)\+@		end='\ze}'	contains=@shCommandSubList
+ endif
+ 
+ " Arithmetic Parenthesized Expressions: {{{1
+-syn region shParen matchgroup=shArithRegion start='(\ze[^(]' end=')' contains=@shArithParenList
++syn region shParen matchgroup=shArithRegion start='[^$]\zs(\%(\ze[^(]\|$\)' end=')' contains=@shArithParenList
+ 
+ " Useful sh Keywords: {{{1
+ " ===================
+ syn keyword shStatement break cd chdir continue eval exec exit kill newgrp pwd read readonly return shift test trap ulimit umask wait
+ syn keyword shConditional contained elif else then
+-syn keyword shCondError elif else then
++if !exists("g:sh_no_error")
++ syn keyword shCondError elif else then
++endif
+ 
+ " Useful ksh Keywords: {{{1
+ " ====================
+@@ -512,6 +572,7 @@
+ hi def link shEcho	shString
+ hi def link shEchoDelim	shOperator
+ hi def link shEchoQuote	shString
++hi def link shForPP	shLoop
+ hi def link shEmbeddedEcho	shString
+ hi def link shEscape	shCommandSub
+ hi def link shExDoubleQuote	shDoubleQuote
+@@ -547,6 +608,7 @@
+   hi def link bashStatement		shStatement
+   hi def link shFunctionParen		Delimiter
+   hi def link shFunctionDelim		Delimiter
++  hi def link shCharClass		shSpecial
+ endif
+ if exists("b:is_kornshell")
+   hi def link kshSpecialVariables	shShellVariables
+@@ -554,20 +616,22 @@
+   hi def link shFunctionParen		Delimiter
+ endif
+ 
+-hi def link shCaseError		Error
+-hi def link shCondError		Error
+-hi def link shCurlyError		Error
+-hi def link shDerefError		Error
+-hi def link shDerefOpError		Error
+-hi def link shDerefWordError		Error
+-hi def link shDoError		Error
+-hi def link shEsacError		Error
+-hi def link shIfError		Error
+-hi def link shInError		Error
+-hi def link shParenError		Error
+-hi def link shTestError		Error
+-if exists("b:is_kornshell")
+-  hi def link shDTestError		Error
++if !exists("g:sh_no_error")
++ hi def link shCaseError		Error
++ hi def link shCondError		Error
++ hi def link shCurlyError		Error
++ hi def link shDerefError		Error
++ hi def link shDerefOpError		Error
++ hi def link shDerefWordError		Error
++ hi def link shDoError		Error
++ hi def link shEsacError		Error
++ hi def link shIfError		Error
++ hi def link shInError		Error
++ hi def link shParenError		Error
++ hi def link shTestError		Error
++ if exists("b:is_kornshell")
++   hi def link shDTestError		Error
++ endif
+ endif
+ 
+ hi def link shArithmetic		Special
+diff -Naur vim73.orig/runtime/syntax/sisu.vim vim73/runtime/syntax/sisu.vim
+--- vim73.orig/runtime/syntax/sisu.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/sisu.vim	2013-06-07 17:07:26.228933781 +0000
+@@ -1,6 +1,8 @@
+-"SiSU Vim syntax file
+-"SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
+-"SiSU Markup:     SiSU (sisu-2.0.1, 2010-03-17)
++" SiSU Vim syntax file
++" SiSU Maintainer: Ralph Amissah <ralph@amissah.com>
++" SiSU Markup:     SiSU (sisu-4.0.9)
++" Last Change:     2013-02-22
++" URL (sisu-4.1.0): <http://git.sisudoc.org/?p=code/sisu.git;a=blob;f=data/sisu/conf/editor-syntax-etc/vim/syntax/sisu.vim;hb=HEAD>
+ "(originally looked at Ruby Vim by Mirko Nasato)
+ 
+ if version < 600
+@@ -9,15 +11,18 @@
+   finish
+ else
+ endif
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+-" Errors:
++"% "Errors:
+ syn match sisu_error contains=sisu_link,sisu_error_wspace "<![^ei]\S\+!>"
+ 
+-" Markers Identifiers:
++"% "Markers Identifiers:
+ if !exists("sisu_no_identifiers")
+   syn match   sisu_mark_endnote                                           "\~^"
+-  syn match   sisu_break               contains=@NoSpell                  "<br>\|<br />"
+-  syn match   sisu_control             contains=@NoSpell                  "<:p[bn]>"
++  syn match   sisu_break               contains=@NoSpell                  " \\\\\( \|$\)\|<br>\|<br />"
++  syn match   sisu_control             contains=@NoSpell                  "^\(-\\\\-\|=\\\\=\|-\.\.-\|<:p[bn]>\)\s*$"
++  syn match   sisu_control             contains=@NoSpell                  "^<:\(bo\|---\)>\s*$"
+   syn match   sisu_marktail                                               "[~-]#"
+   syn match   sisu_control                                                "\""
+   syn match   sisu_underline                                              "\(^\| \)_[a-zA-Z0-9]\+_\([ .,]\|$\)"
+@@ -28,14 +33,19 @@
+   syn match   sisu_require             contains=@NoSpell                  "^<<\s*[a-zA-Z0-9^._-]\+\.ss[it]$"
+   syn match   sisu_require             contains=@NoSpell                  "^<<{[a-zA-Z0-9^._-]\+\.ss[it]}$"
+   syn match   sisu_structure                                              "^:A\~$"
+-  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|note\):\s" "group=sisu_header_content
+-  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|translator\|illustrator\|photographer\|audio\|digitized_by\|prepared_by\):\s"
+-  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|audio\|digitization\|license\|all\):\s"                                         "access_rights license
+-  syn match   sisu_sub_header_classify                                    "^\s\+:\(type\|subject\|topic_register\|keywords\|coverage\|relation\|format\|identifier\|isbn\|dewey\|loc\|pg\):\s"
+-  syn match   sisu_sub_header_dates                                       "^\s\+:\(published\|available\|created\|issued\|valid\|modified\|added_to_site\|translated\|original_publication\):\s"
+-  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|institution\|nationality\|source\):\s"
+-  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|italics\|bold\|skin\|stamp\|promo\|ad\|manpage\):\s"
+-  syn match   sisu_sub_header_notes                                       "^\s\+:\(comment\|abstract\|description\|history\|prefix\|prefix_[ab]\):\s"
++
++"% "Document Sub Headers:
++  syn match   sisu_sub_header_title                                       "^\s\+:\(subtitle\|short\|edition\|language\|lang_char\|note\):\s" "group=sisu_header_content
++  syn match   sisu_sub_header_creator                                     "^\s\+:\(author\|editor\|contributor\|illustrator\|photographer\|translator\|digitized_by\|prepared_by\|audio\|video\):\s"                               " &hon &institution
++  syn match   sisu_sub_header_rights                                      "^\s\+:\(copyright\|text\|translation\|illustrations\|photographs\|preparation\|digitization\|audio\|video\|license\|all\):\s"                   " access_rights license
++  syn match   sisu_sub_header_classify                                    "^\s\+:\(topic_register\|keywords\|subject\|dewey\|loc\):\s"
++  syn match   sisu_sub_header_identifier                                  "^\s\+:\(oclc\|isbn\):\s"
++  syn match   sisu_sub_header_date                                        "^\s\+:\(added_to_site\|available\|created\|issued\|modified\|published\|valid\|translated\|original_publication\):\s"
++  syn match   sisu_sub_header_original                                    "^\s\+:\(publisher\|date\|language\|lang_char\|institution\|nationality\|source\):\s"
++  syn match   sisu_sub_header_make                                        "^\s\+:\(headings\|num_top\|breaks\|language\|italics\|bold\|emphasis\|substitute\|omit\|plaintext_wrap\|texpdf_font_mono\|texpdf_font\|stamp\|promo\|ad\|manpage\|home_button_text\|home_button_image\|cover_image\|footer\):\s"
++  syn match   sisu_sub_header_notes                                       "^\s\+:\(description\|abstract\|comment\|coverage\|relation\|source\|history\|type\|format\|prefix\|prefix_[ab]\|suffix\):\s"
++
++"% "semantic markers: (ignore)
+   syn match   sisu_sem_marker                                             ";{\|};[a-z._]*[a-z]"
+   syn match   sisu_sem_marker_block                                       "\([a-z][a-z._]*\|\):{\|}:[a-z._]*[a-z]"
+   syn match   sisu_sem_ex_marker                                          ";\[\|\];[a-z._]*[a-z]"
+@@ -46,80 +56,128 @@
+   syn match   sisu_sem_ex_content contains=sisu_error,sisu_error_wspace,sisu_content_alt,sisu_link,sisu_linked,sisu_break,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker ";\[[^}].\{-}\];[a-z]\+"
+ endif
+ 
+-"URLs Numbers And ASCII Codes:
++"% "URLs Numbers And ASCII Codes:
+ syn match   sisu_number                              "\<\(0x\x\+\|0b[01]\+\|0\o\+\|0\.\d\+\|0\|[1-9][\.0-9_]*\)\>"
+ syn match   sisu_number                              "?\(\\M-\\C-\|\\c\|\\C-\|\\M-\)\=\(\\\o\{3}\|\\x\x\{2}\|\\\=\w\)"
+ 
+-"Tuned Error: (is error if not already matched)
++"% "Tuned Error: (is error if not already matched)
+ syn match sisu_error             contains=sisu_error "[\~/\*!_]{\|}[\~/\*!_]"
+ syn match sisu_error             contains=sisu_error "<a href\|</a>]"
+ 
+-"Simple Paired Enclosed Markup:
++"% "Simple Paired Enclosed Markup:
+ "url/link
+ syn region sisu_link contains=sisu_error,sisu_error_wspace matchgroup=sisu_action start="^<<\s*|[a-zA-Z0-9^._-]\+|@|[a-zA-Z0-9^._-]\+|"rs=s+2 end="$"
+-"header
++
++"% "Document Header:
++" title
+ syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_title matchgroup=sisu_header start="^[@]title:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" creator
+ syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_creator matchgroup=sisu_header start="^[@]creator:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" dates
++syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_date matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" publisher
++syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" rights
+ syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_rights matchgroup=sisu_header start="^[@]rights:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" classify document
+ syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_classify matchgroup=sisu_header start="^[@]classify:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_dates matchgroup=sisu_header start="^[@]date:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_publisher matchgroup=sisu_header start="^[@]publisher:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" identifier document
++syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_identifier matchgroup=sisu_header start="^[@]identifier:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" original language (depreciated)
+ syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_original matchgroup=sisu_header start="^[@]original:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+-syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_source matchgroup=sisu_header start="^[@]source:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" notes
++syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_notes matchgroup=sisu_header start="^[@]notes:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++" links of interest
+ syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_linked,sisu_sub_header_links matchgroup=sisu_header start="^[@]links:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
+-"headings
+-syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$"
+-"grouped text
+-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table"
+-syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$"
+-syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(alt\|group\|poem\){" end="^}\(alt\|group\|poem\)"
++" make, processing instructions
++syn region sisu_header_content contains=sisu_error,sisu_comment,sisu_break,sisu_link,sisu_sub_header_make matchgroup=sisu_header start="^[@]make:[+-]\?\(\s\|\n\)"rs=e-1 end="\n$"
++
++"% "Headings:
++syn region sisu_heading contains=sisu_mark_endnote,sisu_content_endnote,sisu_marktail,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_ocn,sisu_error,sisu_error_wspace matchgroup=sisu_structure start="^\([1-8]\|:\?[A-C]\)\~\(\S\+\|[^-]\)" end="$"
++
++"% "Block Group Text:
++" table
++syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^table{.\+" end="}table"
++" table
++syn region sisu_content_alt contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^{\(t\|table\)\(\~h\)\?\(\sc[0-9]\+;\)\?[0-9; ]*}" end="\n$"
++" block, group, poem, alt
++syn region sisu_content_alt contains=sisu_mark_endnote,sisu_content_endnote,sisu_link,sisu_mark,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_contain start="^\(block\|group\|poem\|alt\){" end="^}\(block\|group\|poem\|alt\)"
++" code
+ syn region sisu_content_alt contains=sisu_error matchgroup=sisu_contain start="^code{" end="^}code"
+-"endnotes
+-syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n"
+-syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n"
+-syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$"
+-"links and images
+-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|\.\./\)\S\+" oneline
+-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline
+-syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline
+-"some line operations
+-syn region sisu_control contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_control start="\(\(^\| \)!_ \|<:b>\)" end="$"
+-syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$"
++
++"% "Endnotes:
++" regular endnote or asterisk or plus sign endnote
++syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker matchgroup=sisu_mark_endnote start="\~{[*+]*" end="}\~" skip="\n"
++" numbered asterisk or plus sign endnote
++syn region sisu_content_endnote contains=sisu_link,sisu_strikeout,sisu_underline,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break,sisu_sem_block,sisu_sem_content,sisu_sem_marker matchgroup=sisu_mark_endnote start="\~\[[*+]*" end="\]\~" skip="\n"
++" endnote content marker (for binary content marking)
++syn region sisu_content_endnote contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_link,sisu_identifier,sisu_error,sisu_error_wspace,sisu_mark,sisu_break matchgroup=sisu_mark_endnote start="\^\~" end="\n$"
++
++"% "Links And Images:
++" image with url link (and possibly footnote of url)
++syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="}\(https\?:/\/\|:\|\.\.\/\|#\)\S\+" oneline
++" sisu outputs, short notation
++syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_sem_block,sisu_error matchgroup=sisu_link start="{\(\~^\s\)\?" end="\[[1-5][sS]*\]}\S\+\.ss[tm]" oneline
++" image
++syn region sisu_linked contains=sisu_fontface,sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_link start="{" end="}image" oneline
++
++"% "Some Line Operations:
++" bold line
++syn region sisu_bold contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^!_ " end=" \\\\\|$"
++" indent and bullet paragraph
++syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\) " end="$"
++" indent and bullet (bold start) paragraph
++syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_\([1-9*]\|[1-9]\*\)!_\? " end=" \\\\\|$"
++" hanging indent paragraph [proposed]
++syn region sisu_normal contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9] " end="$"
++" hanging indent (bold start/ definition) paragraph [proposed]
++syn region sisu_bold contains=sisu_fontface,sisu_bold,sisu_control,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_sem_block,sisu_sem_content,sisu_sem_marker_block,sisu_sem_marker,sisu_sem_ex_marker_block,sisu_sem_ex_marker,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^_[0-9]\?_[0-9]!_\? " end=" \\\\\|$"
++" list numbering
+ syn region sisu_normal contains=sisu_strikeout,sisu_identifier,sisu_content_endnote,sisu_mark_endnote,sisu_link,sisu_linked,sisu_error,sisu_error_wspace matchgroup=sisu_markpara start="^\(#[ 1]\|_# \)" end="$"
+-"font face curly brackets
++
++"% "Font Face Curly Brackets:
+ "syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_sem start="\S\+:{" end="}:[^<>,.!?:; ]\+" oneline
++" book index:
+ syn region sisu_index matchgroup=sisu_index_block start="^={" end="}"
+-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*"
+-syn region sisu_control contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!"
+-syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_"
+-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/"
+-syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+"
+-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^"
+-syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="},"
++" emphasis:
++syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\*{" end="}\*"
++" bold:
++syn region sisu_bold contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="!{" end="}!"
++" underscore:
++syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="_{" end="}_"
++" italics:
++syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="/{" end="}/"
++" added:
++syn region sisu_underline contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="+{" end="}+"
++" superscript:
++syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="\^{" end="}\^"
++" subscript:
++syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start=",{" end="},"
++" monospace:
++syn region sisu_identifier contains=sisu_strikeout,sisu_number,sisu_bold,sisu_control,sisu_identifier,sisu_error matchgroup=sisu_fontface start="#{" end="}#"
++" strikethrough:
+ syn region sisu_strikeout contains=sisu_error matchgroup=sisu_fontface start="-{" end="}-"
+-syn region sisu_html contains=sisu_error contains=sisu_strikeout matchgroup=sisu_contain start="<a href=\".\{-}\">" end="</a>" oneline
+-"single words bold italicise etc. "workon
+-syn region sisu_control contains=sisu_error matchgroup=sisu_control start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline
++
++"% "Single Words Bold Italicise Etc: (depreciated)
++syn region sisu_bold contains=sisu_error matchgroup=sisu_bold start="\([ (]\|^\)\*[^\|{\n\~\\]"hs=e-1 end="\*"he=e-0 skip="[a-zA-Z0-9']" oneline
+ syn region sisu_identifier contains=sisu_error matchgroup=sisu_content_alt start="\([ ]\|^\)/[^{ \|\n\\]"hs=e-1 end="/\[ \.\]" skip="[a-zA-Z0-9']" oneline
+ "misc
+ syn region sisu_identifier contains=sisu_error matchgroup=sisu_fontface start="\^[^ {\|\n\\]"rs=s+1 end="\^[ ,.;:'})\\\n]" skip="[a-zA-Z0-9']" oneline
+ 
+-"Expensive Mode:
++"% "Expensive Mode:
+ if !exists("sisu_no_expensive")
+ else " not Expensive
+   syn region  sisu_content_alt  matchgroup=sisu_control start="^\s*def\s" matchgroup=NONE end="[?!]\|\>" skip="\.\|\(::\)" oneline
+ endif " Expensive?
+ 
+-"Headers And Headings: (Document Instructions)
++"% "Headers And Headings: (Document Instructions)
+ syn match sisu_control contains=sisu_error,sisu_error_wspace "4\~! \S\+"
+ syn region  sisu_markpara contains=sisu_error,sisu_error_wspace start="^=begin" end="^=end.*$"
+ 
+-"Errors:
++"% "Errors:
+ syn match sisu_error_wspace contains=sisu_error_wspace "^\s\+[^:]"
+ syn match sisu_error_wspace contains=sisu_error_wspace "\s\s\+"
+-syn match sisu_error_wspace contains=sisu_error_wspace " \s*$"
++syn match sisu_error_wspace contains=sisu_error_wspace "\s\+$"
+ syn match sisu_error contains=sisu_error_wspace "\t\+"
+ syn match sisu_error contains=sisu_error,sisu_error_wspace "\([^ (][_\\]\||[^ (}]\)https\?:\S\+"
+ syn match sisu_error contains=sisu_error "_\?https\?:\S\+[}><]"
+@@ -140,37 +198,38 @@
+ syn match sisu_error contains=sisu_error,sisu_match,sisu_strikeout,sisu_contain,sisu_content_alt,sisu_mark,sisu_break,sisu_number "<[a-zA-Z\/]\+>"
+ syn match sisu_error  "/\?<\([biu]\)>[^(</\1>)]\{-}\n$"
+ 
+-"Error Exceptions:
++"% "Error Exceptions:
+ syn match sisu_control "\n$" "contains=ALL
+-syn match sisu_control " //"
++"syn match sisu_control " //"
+ syn match sisu_error   "%{"
+ syn match sisu_error   "<br>_\?https\?:\S\+\|_\?https\?:\S\+<br>"
+ syn match sisu_error   "[><]_\?https\?:\S\+\|_\?https\?:\S\+[><]"
+ syn match sisu_comment "^%\{1,2\}.\+"
+ 
+-"Definitions Default Highlighting:
++"% "Definitions Default Highlighting:
+ hi def link sisu_normal                Normal
++hi def link sisu_bold                  Statement
+ hi def link sisu_header                PreProc
+ hi def link sisu_header_content        Normal
+ hi def link sisu_sub_header_title      Statement
+ hi def link sisu_sub_header_creator    Statement
++hi def link sisu_sub_header_date       Statement
++hi def link sisu_sub_header_publisher  Statement
+ hi def link sisu_sub_header_rights     Statement
+ hi def link sisu_sub_header_classify   Statement
+-hi def link sisu_sub_header_dates      Statement
+-hi def link sisu_sub_header_make       Statement
++hi def link sisu_sub_header_identifier Statement
++hi def link sisu_sub_header_original   Statement
+ hi def link sisu_sub_header_links      Statement
+-hi def link sisu_sub_header_publisher  Statement
+ hi def link sisu_sub_header_notes      Statement
+-hi def link sisu_sub_header_original   Statement
+-hi def link sisu_sub_header_source     Statement
++hi def link sisu_sub_header_make       Statement
+ hi def link sisu_heading               Title
+ hi def link sisu_structure             Operator
+ hi def link sisu_contain               Include
+-hi def link sisu_mark_endnote          Include
++hi def link sisu_mark_endnote          Delimiter
+ hi def link sisu_require               NonText
+ hi def link sisu_link                  NonText
+ hi def link sisu_linked                String
+-hi def link sisu_fontface              Include
++hi def link sisu_fontface              Delimiter
+ hi def link sisu_strikeout             DiffDelete
+ hi def link sisu_content_alt           Special
+ hi def link sisu_sem_content           SpecialKey
+@@ -186,7 +245,7 @@
+ hi def link sisu_index                 SpecialKey
+ hi def link sisu_index_block           Visual
+ hi def link sisu_content_endnote       Special
+-hi def link sisu_control               Define
++hi def link sisu_control               Delimiter
+ hi def link sisu_ocn                   Include
+ hi def link sisu_number                Number
+ hi def link sisu_identifier            Function
+@@ -202,3 +261,5 @@
+ hi def link sisu_error_wspace          Error
+ hi def link sisu_error                 Error
+ let b:current_syntax = "sisu"
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/slice.vim vim73/runtime/syntax/slice.vim
+--- vim73.orig/runtime/syntax/slice.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/slice.vim	2013-06-07 17:07:26.292266934 +0000
+@@ -20,6 +20,7 @@
+ syn keyword sliceBoolean    false true
+ 
+ " Include directives
++syn region  sliceIncluded    display contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ syn match   sliceIncluded   display contained "<[^>]*>"
+ syn match   sliceInclude    display "^\s*#\s*include\>\s*["<]" contains=sliceIncluded
+ 
+diff -Naur vim73.orig/runtime/syntax/smil.vim vim73/runtime/syntax/smil.vim
+--- vim73.orig/runtime/syntax/smil.vim	2010-05-15 11:03:54.000000000 +0000
++++ vim73/runtime/syntax/smil.vim	2013-06-07 17:07:26.395599972 +0000
+@@ -2,7 +2,7 @@
+ " Language:	SMIL (Synchronized Multimedia Integration Language)
+ " Maintainer:	Herve Foucher <Herve.Foucher@helio.org>
+ " URL:		http://www.helio.org/vim/syntax/smil.vim
+-" Last Change:	2003 May 11
++" Last Change:	2012 Feb 03 by Thilo Six
+ 
+ " To learn more about SMIL, please refer to http://www.w3.org/AudioVideo/
+ " and to http://www.helio.org/products/smil/tutorial/
+@@ -15,6 +15,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " SMIL is case sensitive
+ syn case match
+ 
+@@ -151,4 +154,6 @@
+   unlet main_syntax
+ endif
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/snnspat.vim vim73/runtime/syntax/snnspat.vim
+--- vim73.orig/runtime/syntax/snnspat.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/snnspat.vim	2013-06-07 17:07:26.442266506 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	SNNS pattern file
+ " Maintainer:	Davide Alberani <alberanid@bigfoot.com>
+-" Last Change:	28 Apr 2001
++" Last Change:	2012 Feb 03 by Thilo Six
+ " Version:	0.2
+ " URL:		http://digilander.iol.it/alberanid/vim/syntax/snnspat.vim
+ "
+@@ -14,6 +14,8 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
+ 
+ " anything that isn't part of the header, a comment or a number
+ " is wrong
+@@ -65,4 +67,6 @@
+ 
+ let b:current_syntax = "snnspat"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8 sw=2
+diff -Naur vim73.orig/runtime/syntax/spice.vim vim73/runtime/syntax/spice.vim
+--- vim73.orig/runtime/syntax/spice.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/spice.vim	2013-06-07 17:07:26.505599658 +0000
+@@ -1,7 +1,8 @@
+ " Vim syntax file
+ " Language:	Spice circuit simulator input netlist
+ " Maintainer:	Noam Halevy <Noam.Halevy.motorola.com>
+-" Last Change:	12/08/99
++" Last Change:	2012 Jun 01
++" 		(Dominique Pelle added @Spell)
+ "
+ " This is based on sh.vim by Lennart Schultz
+ " but greatly simplified
+@@ -19,8 +20,8 @@
+ 
+ syn keyword	spiceTodo	contained TODO
+ 
+-syn match spiceComment  "^ \=\*.*$"
+-syn match spiceComment  "\$.*$"
++syn match spiceComment  "^ \=\*.*$" contains=@Spell
++syn match spiceComment  "\$.*$" contains=@Spell
+ 
+ " Numbers, all with engineering suffixes and optional units
+ "==========================================================
+diff -Naur vim73.orig/runtime/syntax/spup.vim vim73/runtime/syntax/spup.vim
+--- vim73.orig/runtime/syntax/spup.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/spup.vim	2013-06-07 17:07:26.522266277 +0000
+@@ -1,8 +1,8 @@
+ " Vim syntax file
+ " Language:     Speedup, plant simulator from AspenTech
+ " Maintainer:   Stefan.Schwarzer <s.schwarzer@ndh.net>
+-" URL:			http://www.ndh.net/home/sschwarzer/download/spup.vim
+-" Last Change:  2003 May 11
++" URL:		http://www.ndh.net/home/sschwarzer/download/spup.vim
++" Last Change:  2012 Feb 03 by Thilo Six
+ " Filename:     spup.vim
+ 
+ " Bugs
+@@ -25,6 +25,9 @@
+     finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " don't hightlight several keywords like subsections
+ "let strict_subsections = 1
+ 
+@@ -43,7 +46,7 @@
+ 
+ " Speedup SECTION regions
+ syn case ignore
+-syn region spupCdi		  matchgroup=spupSection start="^CDI"		 end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary
++syn region spupCdi	  matchgroup=spupSection start="^CDI"	     end="^\*\*\*\*" contains=spupCdiSubs,@spupOrdinary
+ syn region spupConditions matchgroup=spupSection start="^CONDITIONS" end="^\*\*\*\*" contains=spupConditionsSubs,@spupOrdinary,spupConditional,spupOperator,spupCode
+ syn region spupDeclare    matchgroup=spupSection start="^DECLARE"    end="^\*\*\*\*" contains=spupDeclareSubs,@spupOrdinary,spupTypes,spupCode
+ syn region spupEstimation matchgroup=spupSection start="^ESTIMATION" end="^\*\*\*\*" contains=spupEstimationSubs,@spupOrdinary
+@@ -63,7 +66,7 @@
+ syn region spupUnit       matchgroup=spupSection start="^UNIT"       end="^\*\*\*\*" contains=spupUnitSubs,@spupOrdinary
+ 
+ " Subsections
+-syn keyword spupCdiSubs		   INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained
++syn keyword spupCdiSubs	       INPUT FREE OUTPUT LINEARTIME MINNONZERO CALCULATE FILES SCALING contained
+ syn keyword spupDeclareSubs    TYPE STREAM contained
+ syn keyword spupEstimationSubs ESTIMATE SSEXP DYNEXP RESULT contained
+ syn keyword spupExternalSubs   TRANSMIT RECEIVE contained
+@@ -183,7 +186,7 @@
+ syn sync maxlines=500
+ 
+ syn sync match spupSyncOperation  grouphere spupOperation  "^OPERATION"
+-syn sync match spupSyncCdi		  grouphere spupCdi		   "^CDI"
++syn sync match spupSyncCdi	  grouphere spupCdi	   "^CDI"
+ syn sync match spupSyncConditions grouphere spupConditions "^CONDITIONS"
+ syn sync match spupSyncDeclare    grouphere spupDeclare    "^DECLARE"
+ syn sync match spupSyncEstimation grouphere spupEstimation "^ESTIMATION"
+@@ -207,71 +210,73 @@
+ " For version 5.8 and later: only when an item doesn't have highlighting yet
+ if version >= 508 || !exists("did_spup_syn_inits")
+     if version < 508
+-		let did_spup_syn_inits = 1
+-		command -nargs=+ HiLink hi link <args>
+-	else
+-		command -nargs=+ HiLink hi def link <args>
++	let did_spup_syn_inits = 1
++	command -nargs=+ HiLink hi link <args>
++    else
++	command -nargs=+ HiLink hi def link <args>
+     endif
+ 
+-	HiLink spupCdi			spupSection
+-	HiLink spupConditions	spupSection
+-	HiLink spupDeclare		spupSection
+-	HiLink spupEstimation	spupSection
+-	HiLink spupExternal		spupSection
+-	HiLink spupFlowsheet	spupSection
+-	HiLink spupFunction		spupSection
+-	HiLink spupGlobal		spupSection
+-	HiLink spupHomotopy		spupSection
+-	HiLink spupMacro		spupSection
+-	HiLink spupModel		spupSection
+-	HiLink spupOperation	spupSection
+-	HiLink spupOptions		spupSection
+-	HiLink spupProcedure	spupSection
+-	HiLink spupProfiles		spupSection
+-	HiLink spupReport		spupSection
+-	HiLink spupTitle		spupConstant  " this is correct, truly ;)
+-	HiLink spupUnit			spupSection
+-
+-	HiLink spupCdiSubs		  spupSubs
+-	HiLink spupConditionsSubs spupSubs
+-	HiLink spupDeclareSubs	  spupSubs
+-	HiLink spupEstimationSubs spupSubs
+-	HiLink spupExternalSubs   spupSubs
+-	HiLink spupFlowsheetSubs  spupSubs
+-	HiLink spupFunctionSubs   spupSubs
+-	HiLink spupHomotopySubs   spupSubs
+-	HiLink spupMacroSubs	  spupSubs
+-	HiLink spupModelSubs	  spupSubs
+-	HiLink spupOperationSubs  spupSubs
+-	HiLink spupOptionsSubs	  spupSubs
+-	HiLink spupProcedureSubs  spupSubs
+-	HiLink spupReportSubs	  spupSubs
+-	HiLink spupUnitSubs		  spupSubs
+-
+-	HiLink spupCode			   Normal
+-	HiLink spupComment		   Comment
+-	HiLink spupComment2		   spupComment
+-	HiLink spupConditional	   Statement
+-	HiLink spupConstant		   Constant
+-	HiLink spupError		   Error
+-	HiLink spupHelp			   Normal
+-	HiLink spupIdentifier	   Identifier
+-	HiLink spupNumber		   Constant
+-	HiLink spupOperator		   Special
+-	HiLink spupOpenBrace	   spupError
+-	HiLink spupSection		   Statement
+-	HiLink spupSpecial		   spupTextprocGeneric
+-	HiLink spupStreams		   Type
+-	HiLink spupString		   Constant
+-	HiLink spupSubs			   Statement
+-	HiLink spupSymbol		   Special
+-	HiLink spupTextprocError   Normal
+-	HiLink spupTextprocGeneric PreProc
+-	HiLink spupTypes		   Type
++    HiLink spupCdi	    spupSection
++    HiLink spupConditions   spupSection
++    HiLink spupDeclare	    spupSection
++    HiLink spupEstimation   spupSection
++    HiLink spupExternal	    spupSection
++    HiLink spupFlowsheet    spupSection
++    HiLink spupFunction	    spupSection
++    HiLink spupGlobal	    spupSection
++    HiLink spupHomotopy	    spupSection
++    HiLink spupMacro	    spupSection
++    HiLink spupModel	    spupSection
++    HiLink spupOperation    spupSection
++    HiLink spupOptions	    spupSection
++    HiLink spupProcedure    spupSection
++    HiLink spupProfiles	    spupSection
++    HiLink spupReport	    spupSection
++    HiLink spupTitle	    spupConstant  " this is correct, truly ;)
++    HiLink spupUnit	    spupSection
++
++    HiLink spupCdiSubs	      spupSubs
++    HiLink spupConditionsSubs spupSubs
++    HiLink spupDeclareSubs    spupSubs
++    HiLink spupEstimationSubs spupSubs
++    HiLink spupExternalSubs   spupSubs
++    HiLink spupFlowsheetSubs  spupSubs
++    HiLink spupFunctionSubs   spupSubs
++    HiLink spupHomotopySubs   spupSubs
++    HiLink spupMacroSubs      spupSubs
++    HiLink spupModelSubs      spupSubs
++    HiLink spupOperationSubs  spupSubs
++    HiLink spupOptionsSubs    spupSubs
++    HiLink spupProcedureSubs  spupSubs
++    HiLink spupReportSubs     spupSubs
++    HiLink spupUnitSubs	      spupSubs
++
++    HiLink spupCode	       Normal
++    HiLink spupComment	       Comment
++    HiLink spupComment2	       spupComment
++    HiLink spupConditional     Statement
++    HiLink spupConstant	       Constant
++    HiLink spupError	       Error
++    HiLink spupHelp	       Normal
++    HiLink spupIdentifier      Identifier
++    HiLink spupNumber	       Constant
++    HiLink spupOperator	       Special
++    HiLink spupOpenBrace       spupError
++    HiLink spupSection	       Statement
++    HiLink spupSpecial	       spupTextprocGeneric
++    HiLink spupStreams	       Type
++    HiLink spupString	       Constant
++    HiLink spupSubs	       Statement
++    HiLink spupSymbol	       Special
++    HiLink spupTextprocError   Normal
++    HiLink spupTextprocGeneric PreProc
++    HiLink spupTypes	       Type
+ 
+     delcommand HiLink
+ endif
+ 
+ let b:current_syntax = "spup"
+ 
+-" vim:ts=4
++let &cpo = s:cpo_save
++unlet s:cpo_save
++" vim:ts=8
+diff -Naur vim73.orig/runtime/syntax/sqlanywhere.vim vim73/runtime/syntax/sqlanywhere.vim
+--- vim73.orig/runtime/syntax/sqlanywhere.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sqlanywhere.vim	2013-06-07 17:07:26.562266163 +0000
+@@ -1,11 +1,12 @@
+-
+ " Vim syntax file
+ " Language:    SQL, Adaptive Server Anywhere
+-" Maintainer:  David Fishburn <fishburn at ianywhere dot com>
+-" Last Change: 2009 Mar 15
+-" Version:     11.0.1
+-
+-" Description: Updated to Adaptive Server Anywhere 11.0.1
++" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
++" Last Change: 2013 May 13
++" Version:     16.0.0
++
++" Description: Updated to Adaptive Server Anywhere 16.0.0
++"              Updated to Adaptive Server Anywhere 12.0.1 (including spatial data)
++"              Updated to Adaptive Server Anywhere 11.0.1
+ "              Updated to Adaptive Server Anywhere 10.0.1
+ "              Updated to Adaptive Server Anywhere  9.0.2
+ "              Updated to Adaptive Server Anywhere  9.0.1
+@@ -26,33 +27,34 @@
+ syn keyword sqlSpecial  false null true
+ 
+ " common functions
+-syn keyword sqlFunction	 count sum avg min max debug_eng isnull
+-syn keyword sqlFunction	 greater lesser argn string ymd todate
+-syn keyword sqlFunction	 totimestamp date today now utc_now
+-syn keyword sqlFunction	 number identity years months weeks days
+-syn keyword sqlFunction	 hours minutes seconds second minute hour
+-syn keyword sqlFunction	 day month year dow date_format substr
+-syn keyword sqlFunction	 substring byte_substr length byte_length
+-syn keyword sqlFunction	 datalength ifnull evaluate list
+-syn keyword sqlFunction	 soundex similar difference like_start
+-syn keyword sqlFunction	 like_end regexp_compile
+-syn keyword sqlFunction	 regexp_compile_patindex remainder abs
+-syn keyword sqlFunction	 graphical_plan plan explanation ulplan
+-syn keyword sqlFunction	 graphical_ulplan long_ulplan
+-syn keyword sqlFunction	 short_ulplan rewrite watcomsql
+-syn keyword sqlFunction	 transactsql dialect estimate
+-syn keyword sqlFunction	 estimate_source index_estimate
+-syn keyword sqlFunction	 experience_estimate traceback wsql_state
+-syn keyword sqlFunction	 lang_message dateadd datediff datepart
+-syn keyword sqlFunction	 datename dayname monthname quarter
+-syn keyword sqlFunction	 tsequal hextoint inttohex rand textptr
+-syn keyword sqlFunction	 rowid grouping stddev variance rank
+-syn keyword sqlFunction	 dense_rank density percent_rank user_name
+-syn keyword sqlFunction	 user_id str stuff char_length nullif
+-syn keyword sqlFunction	 sortkey compare ts_index_statistics
+-syn keyword sqlFunction	 ts_table_statistics isdate isnumeric
+-syn keyword sqlFunction	 get_identity lookup newid uuidtostr
+-syn keyword sqlFunction	 strtouuid varexists
++syn keyword sqlFunction  abs argn avg bintohex bintostr
++syn keyword sqlFunction  byte_length byte_substr char_length
++syn keyword sqlFunction  compare count count_big datalength date
++syn keyword sqlFunction  date_format dateadd datediff datename
++syn keyword sqlFunction  datepart day dayname days debug_eng
++syn keyword sqlFunction  dense_rank density dialect difference
++syn keyword sqlFunction  dow estimate estimate_source evaluate
++syn keyword sqlFunction  experience_estimate explanation
++syn keyword sqlFunction  get_identity graphical_plan
++syn keyword sqlFunction  graphical_ulplan greater grouping
++syn keyword sqlFunction  hextobin hextoint hour hours identity
++syn keyword sqlFunction  ifnull index_estimate inttohex isdate
++syn keyword sqlFunction  isencrypted isnull isnumeric
++syn keyword sqlFunction  lang_message length lesser like_end
++syn keyword sqlFunction  like_start list long_ulplan lookup max
++syn keyword sqlFunction  min minute minutes month monthname
++syn keyword sqlFunction  months newid now nullif number
++syn keyword sqlFunction  percent_rank plan quarter rand rank
++syn keyword sqlFunction  regexp_compile regexp_compile_patindex
++syn keyword sqlFunction  remainder rewrite rowid second seconds
++syn keyword sqlFunction  short_ulplan similar sortkey soundex
++syn keyword sqlFunction  stddev stack_trace str string strtobin strtouuid stuff
++syn keyword sqlFunction  subpartition substr substring sum switchoffset sysdatetimeoffset
++syn keyword sqlFunction  textptr todate todatetimeoffset today totimestamp traceback transactsql
++syn keyword sqlFunction  ts_index_statistics ts_table_statistics
++syn keyword sqlFunction  tsequal ulplan user_id user_name utc_now
++syn keyword sqlFunction  uuidtostr varexists variance watcomsql
++syn keyword sqlFunction  weeks wsql_state year years ymd
+ 
+ " 9.0.1 functions
+ syn keyword sqlFunction	 acos asin atan atn2 cast ceiling convert cos cot
+@@ -68,6 +70,9 @@
+ syn keyword sqlFunction	 connection_extended_property text_handle_vector_match
+ syn keyword sqlFunction	 read_client_file write_client_file
+ 
++" 12.0.1 functions
++syn keyword sqlFunction	 http_response_header
++
+ " string functions
+ syn keyword sqlFunction	 ascii char left ltrim repeat
+ syn keyword sqlFunction	 space right rtrim trim lcase ucase
+@@ -359,7 +364,7 @@
+ 
+ " http functions
+ syn keyword sqlFunction	 http_header http_variable
+-syn keyword sqlFunction	 next_http_header next_http_variable
++syn keyword sqlFunction	 next_http_header next_http_response_header next_http_variable
+ syn keyword sqlFunction	 sa_set_http_header sa_set_http_option
+ syn keyword sqlFunction	 sa_http_variable_info sa_http_header_info
+ 
+@@ -367,119 +372,244 @@
+ syn keyword sqlFunction	 http_encode http_decode
+ syn keyword sqlFunction	 html_encode html_decode
+ 
++" XML function support
++syn keyword sqlFunction	 openxml xmlelement xmlforest xmlgen xmlconcat xmlagg
++syn keyword sqlFunction	 xmlattributes
++
++" Spatial Compatibility Functions
++syn keyword sqlFunction  ST_BdMPolyFromText
++syn keyword sqlFunction  ST_BdMPolyFromWKB
++syn keyword sqlFunction  ST_BdPolyFromText
++syn keyword sqlFunction  ST_BdPolyFromWKB
++syn keyword sqlFunction  ST_CPolyFromText
++syn keyword sqlFunction  ST_CPolyFromWKB
++syn keyword sqlFunction  ST_CircularFromTxt
++syn keyword sqlFunction  ST_CircularFromWKB
++syn keyword sqlFunction  ST_CompoundFromTxt
++syn keyword sqlFunction  ST_CompoundFromWKB
++syn keyword sqlFunction  ST_GeomCollFromTxt
++syn keyword sqlFunction  ST_GeomCollFromWKB
++syn keyword sqlFunction  ST_GeomFromText
++syn keyword sqlFunction  ST_GeomFromWKB
++syn keyword sqlFunction  ST_LineFromText
++syn keyword sqlFunction  ST_LineFromWKB
++syn keyword sqlFunction  ST_MCurveFromText
++syn keyword sqlFunction  ST_MCurveFromWKB
++syn keyword sqlFunction  ST_MLineFromText
++syn keyword sqlFunction  ST_MLineFromWKB
++syn keyword sqlFunction  ST_MPointFromText
++syn keyword sqlFunction  ST_MPointFromWKB
++syn keyword sqlFunction  ST_MPolyFromText
++syn keyword sqlFunction  ST_MPolyFromWKB
++syn keyword sqlFunction  ST_MSurfaceFromTxt
++syn keyword sqlFunction  ST_MSurfaceFromWKB
++syn keyword sqlFunction  ST_OrderingEquals
++syn keyword sqlFunction  ST_PointFromText
++syn keyword sqlFunction  ST_PointFromWKB
++syn keyword sqlFunction  ST_PolyFromText
++syn keyword sqlFunction  ST_PolyFromWKB
++" Spatial Structural Methods
++syn keyword sqlFunction  ST_CoordDim
++syn keyword sqlFunction  ST_CurveN
++syn keyword sqlFunction  ST_Dimension
++syn keyword sqlFunction  ST_EndPoint
++syn keyword sqlFunction  ST_ExteriorRing
++syn keyword sqlFunction  ST_GeometryN
++syn keyword sqlFunction  ST_GeometryType
++syn keyword sqlFunction  ST_InteriorRingN
++syn keyword sqlFunction  ST_Is3D
++syn keyword sqlFunction  ST_IsClosed
++syn keyword sqlFunction  ST_IsEmpty
++syn keyword sqlFunction  ST_IsMeasured
++syn keyword sqlFunction  ST_IsRing
++syn keyword sqlFunction  ST_IsSimple
++syn keyword sqlFunction  ST_IsValid
++syn keyword sqlFunction  ST_NumCurves
++syn keyword sqlFunction  ST_NumGeometries
++syn keyword sqlFunction  ST_NumInteriorRing
++syn keyword sqlFunction  ST_NumPoints
++syn keyword sqlFunction  ST_PointN
++syn keyword sqlFunction  ST_StartPoint
++"Spatial Computation
++syn keyword sqlFunction  ST_Length
++syn keyword sqlFunction  ST_Area
++syn keyword sqlFunction  ST_Centroid
++syn keyword sqlFunction  ST_Area
++syn keyword sqlFunction  ST_Centroid
++syn keyword sqlFunction  ST_IsWorld
++syn keyword sqlFunction  ST_Perimeter
++syn keyword sqlFunction  ST_PointOnSurface
++syn keyword sqlFunction  ST_Distance
++" Spatial Input/Output
++syn keyword sqlFunction  ST_AsBinary
++syn keyword sqlFunction  ST_AsGML
++syn keyword sqlFunction  ST_AsGeoJSON
++syn keyword sqlFunction  ST_AsSVG
++syn keyword sqlFunction  ST_AsSVGAggr
++syn keyword sqlFunction  ST_AsText
++syn keyword sqlFunction  ST_AsWKB
++syn keyword sqlFunction  ST_AsWKT
++syn keyword sqlFunction  ST_AsXML
++syn keyword sqlFunction  ST_GeomFromBinary
++syn keyword sqlFunction  ST_GeomFromShape
++syn keyword sqlFunction  ST_GeomFromText
++syn keyword sqlFunction  ST_GeomFromWKB
++syn keyword sqlFunction  ST_GeomFromWKT
++syn keyword sqlFunction  ST_GeomFromXML
++" Spatial Cast Methods
++syn keyword sqlFunction  ST_CurvePolyToPoly
++syn keyword sqlFunction  ST_CurveToLine
++syn keyword sqlFunction  ST_ToCircular
++syn keyword sqlFunction  ST_ToCompound
++syn keyword sqlFunction  ST_ToCurve
++syn keyword sqlFunction  ST_ToCurvePoly
++syn keyword sqlFunction  ST_ToGeomColl
++syn keyword sqlFunction  ST_ToLineString
++syn keyword sqlFunction  ST_ToMultiCurve
++syn keyword sqlFunction  ST_ToMultiLine
++syn keyword sqlFunction  ST_ToMultiPoint
++syn keyword sqlFunction  ST_ToMultiPolygon
++syn keyword sqlFunction  ST_ToMultiSurface
++syn keyword sqlFunction  ST_ToPoint
++syn keyword sqlFunction  ST_ToPolygon
++syn keyword sqlFunction  ST_ToSurface
++
++" Array functions 16.x
++syn keyword sqlFunction	 array array_agg array_max_cardinality trim_array
++syn keyword sqlFunction	 error_line error_message error_procedure
++syn keyword sqlFunction	 error_sqlcode error_sqlstate error_stack_trace
++
++
+ " keywords
+-syn keyword sqlKeyword	 absolute accent action active add address aes_decrypt
+-syn keyword sqlKeyword	 after aggregate algorithm allow_dup_row allowed
+-syn keyword sqlKeyword	 alter and ansi_substring any as append apply asc ascii ase
+-syn keyword sqlKeyword	 assign at atan2 atomic attach attended audit authorization
++syn keyword sqlKeyword	 absolute accent access account action active activate add address admin
++syn keyword sqlKeyword	 aes_decrypt after aggregate algorithm allow_dup_row allow allowed alter
++syn keyword sqlKeyword	 always and angular ansi_substring any as append apply
++syn keyword sqlKeyword	 arbiter array asc ascii ase
++syn keyword sqlKeyword	 assign at atan2 atomic attended
++syn keyword sqlKeyword	 audit auditing authentication authorization axis
+ syn keyword sqlKeyword	 autoincrement autostop batch bcp before
+ syn keyword sqlKeyword	 between bit_and bit_length bit_or bit_substr bit_xor
+ syn keyword sqlKeyword	 blank blanks block
+-syn keyword sqlKeyword	 both bottom unbounded break breaker bufferpool
++syn keyword sqlKeyword	 both bottom unbounded breaker bufferpool
+ syn keyword sqlKeyword	 build bulk by byte bytes cache calibrate calibration
+-syn keyword sqlKeyword	 cancel capability cascade cast
+-syn keyword sqlKeyword	 catalog ceil changes char char_convert check checksum
+-syn keyword sqlKeyword	 class classes client cmp
++syn keyword sqlKeyword	 cancel capability cardinality cascade cast
++syn keyword sqlKeyword	 catalog catch ceil change changes char char_convert
++syn keyword sqlKeyword	 check checkpointlog checksum class classes client cmp
+ syn keyword sqlKeyword	 cluster clustered collation
+ syn keyword sqlKeyword	 column columns
+-syn keyword sqlKeyword	 command comment committed comparisons
++syn keyword sqlKeyword	 command comments committed commitid comparisons
+ syn keyword sqlKeyword	 compatible component compressed compute computes
+ syn keyword sqlKeyword	 concat configuration confirm conflict connection
+ syn keyword sqlKeyword	 console consolidate consolidated
+-syn keyword sqlKeyword	 constraint constraints content continue
+-syn keyword sqlKeyword	 convert coordinator copy count count_set_bits
+-syn keyword sqlKeyword	 crc createtime cross cube cume_dist
++syn keyword sqlKeyword	 constraint constraints content
++syn keyword sqlKeyword	 convert coordinate coordinator copy count count_set_bits
++syn keyword sqlKeyword	 crc createtime critical cross cube cume_dist
+ syn keyword sqlKeyword	 current cursor data data database
+-syn keyword sqlKeyword	 current_timestamp current_user
++syn keyword sqlKeyword	 current_timestamp current_user cycle
+ syn keyword sqlKeyword	 databases datatype dba dbfile
+ syn keyword sqlKeyword	 dbspace dbspaces dbspacename debug decoupled
+ syn keyword sqlKeyword	 decrypted default defaults default_dbspace deferred
+ syn keyword sqlKeyword	 definer definition
+ syn keyword sqlKeyword	 delay deleting delimited dependencies desc
+-syn keyword sqlKeyword	 description detach deterministic directory
+-syn keyword sqlKeyword	 disable disabled distinct do domain download duplicate
+-syn keyword sqlKeyword	 dsetpass dttm dynamic each editproc ejb
+-syn keyword sqlKeyword	 else elseif empty enable encapsulated encrypted end
+-syn keyword sqlKeyword	 encoding endif engine environment erase error escape escapes event
+-syn keyword sqlKeyword	 event_parameter every except exception exclude excluded exclusive exec
++syn keyword sqlKeyword	 description deterministic directory
++syn keyword sqlKeyword	 disable disabled disallow distinct disksandbox disk_sandbox
++syn keyword sqlKeyword	 dn do domain download duplicate
++syn keyword sqlKeyword	 dsetpass dttm dynamic each earth editproc effective ejb
++syn keyword sqlKeyword	 elimination ellipsoid else elseif
++syn keyword sqlKeyword	 email empty enable encapsulated encrypted encryption end
++syn keyword sqlKeyword	 encoding endif engine environment erase error errors escape escapes event
++syn keyword sqlKeyword	 event_parameter every exception exclude excluded exclusive exec
+ syn keyword sqlKeyword	 existing exists expanded expiry express exprtype extended_property
+ syn keyword sqlKeyword	 external externlogin factor failover false
+-syn keyword sqlKeyword	 fastfirstrow fieldproc file files filler
+-syn keyword sqlKeyword	 fillfactor finish first first_keyword first_value
+-syn keyword sqlKeyword	 following force foreign format forxml forxml_sep fp frame
+-syn keyword sqlKeyword	 freepage french fresh full function gb get_bit go global
++syn keyword sqlKeyword	 fastfirstrow feature fieldproc file files filler
++syn keyword sqlKeyword	 fillfactor final finish first first_keyword first_value
++syn keyword sqlKeyword	 flattening
++syn keyword sqlKeyword	 following force foreign format forjson forxml forxml_sep fp frame
++syn keyword sqlKeyword	 free freepage french fresh full function
++syn keyword sqlKeyword	 gb generic get_bit go global grid
+ syn keyword sqlKeyword	 group handler hash having header hexadecimal
+ syn keyword sqlKeyword	 hidden high history hg hng hold holdlock host
+ syn keyword sqlKeyword	 hours http_body http_session_timeout id identified identity ignore
+ syn keyword sqlKeyword	 ignore_dup_key ignore_dup_row immediate
+-syn keyword sqlKeyword	 in inactiv inactive inactivity included incremental
+-syn keyword sqlKeyword	 index index_enabled index_lparen indexonly info
+-syn keyword sqlKeyword	 inline inner inout insensitive inserting
+-syn keyword sqlKeyword	 instead integrated
+-syn keyword sqlKeyword	 internal intersection into introduced invoker iq is isolation
++syn keyword sqlKeyword	 in inactiv inactive inactivity included increment incremental
++syn keyword sqlKeyword	 index index_enabled index_lparen indexonly info information
++syn keyword sqlKeyword	 inheritance inline inner inout insensitive inserting
++syn keyword sqlKeyword	 instead
++syn keyword sqlKeyword	 internal intersection into introduced inverse invoker
++syn keyword sqlKeyword	 iq is isolation
+ syn keyword sqlKeyword	 jar java java_location java_main_userid java_vm_options
+-syn keyword sqlKeyword	 jconnect jdk join kb key keep kerberos language last
+-syn keyword sqlKeyword	 last_keyword last_value lateral ld left len lf ln level like
++syn keyword sqlKeyword	 jconnect jdk join json kb key keys keep language last
++syn keyword sqlKeyword	 last_keyword last_value lateral latitude
++syn keyword sqlKeyword	 ld ldap left len linear lf ln level like
+ syn keyword sqlKeyword	 limit local location log
+-syn keyword sqlKeyword	 logging login logscan long low lru main manual mark
+-syn keyword sqlKeyword	 match matched materialized max maximum mb membership
+-syn keyword sqlKeyword	 merge metadata methods minimum minutes mirror mode modify monitor move mru
+-syn keyword sqlKeyword	 multiplex name named national native natural new next no
+-syn keyword sqlKeyword	 noholdlock nolock nonclustered none not
+-syn keyword sqlKeyword	 notify null nullable_constant nulls object oem_string of off offline
+-syn keyword sqlKeyword	 old on online only openstring optimization optimizer option
+-syn keyword sqlKeyword	 or order others out outer over
++syn keyword sqlKeyword	 logging logical login logscan long longitude low lru ls
++syn keyword sqlKeyword	 main major manage manual mark master
++syn keyword sqlKeyword	 match matched materialized max maxvalue maximum mb measure median membership
++syn keyword sqlKeyword	 merge metadata methods migrate minimum minor minutes minvalue mirror
++syn keyword sqlKeyword	 mode modify monitor move mru multiplex
++syn keyword sqlKeyword	 name named namespaces national native natural new next nextval
++syn keyword sqlKeyword	 ngram no noholdlock nolock nonclustered none normal not
++syn keyword sqlKeyword	 notify null nullable_constant nulls
++syn keyword sqlKeyword	 object objects oem_string of off offline offset olap
++syn keyword sqlKeyword	 old on online only openstring operator
++syn keyword sqlKeyword	 optimization optimizer option
++syn keyword sqlKeyword	 or order ordinality organization others out outer over owner
+ syn keyword sqlKeyword	 package packetsize padding page pages
+-syn keyword sqlKeyword	 paglock parallel part partial partition partitions partner password path
+-syn keyword sqlKeyword	 pctfree plan policy populate port postfilter preceding precision
+-syn keyword sqlKeyword	 prefetch prefilter prefix preserve preview primary
+-syn keyword sqlKeyword	 prior priority priqty private privileges procedure profile
++syn keyword sqlKeyword	 paglock parallel parameter parent part partial
++syn keyword sqlKeyword	 partition partitions partner password path pctfree
++syn keyword sqlKeyword	 permissions perms plan planar policy polygon populate port postfilter preceding
++syn keyword sqlKeyword	 precisionprefetch prefilter prefix preserve preview previous
++syn keyword sqlKeyword	 primary prior priority priqty private privilege privileges procedure profile profiling
+ syn keyword sqlKeyword	 property_is_cumulative property_is_numeric public publication publish publisher
+ syn keyword sqlKeyword	 quiesce quote quotes range readclientfile readcommitted reader readfile readonly
+ syn keyword sqlKeyword	 readpast readuncommitted readwrite rebuild
+ syn keyword sqlKeyword	 received recompile recover recursive references
+-syn keyword sqlKeyword	 referencing refresh regex regexp regexp_substr relative relocate
+-syn keyword sqlKeyword	 rename repeatable repeatableread
+-syn keyword sqlKeyword	 replicate request_timeout required rereceive resend reserve reset
+-syn keyword sqlKeyword	 resizing resolve resource respect
+-syn keyword sqlKeyword	 restrict result retain
+-syn keyword sqlKeyword	 returns reverse right role
+-syn keyword sqlKeyword	 rollup root row row_number rowlock rows save
++syn keyword sqlKeyword	 referencing regex regexp regexp_substr relative relocate
++syn keyword sqlKeyword	 rename repeatable repeatableread replicate replication
++syn keyword sqlKeyword	 requests request_timeout required rereceive resend reserve reset
++syn keyword sqlKeyword	 resizing resolve resource respect restart
++syn keyword sqlKeyword	 restrict result retain retries
++syn keyword sqlKeyword	 returns reverse right role roles
++syn keyword sqlKeyword	 rollup root row row_number rowlock rows rowtype
+ syn keyword sqlKeyword	 sa_index_hash sa_internal_fk_verify sa_internal_termbreak
+ syn keyword sqlKeyword	 sa_order_preserving_hash sa_order_preserving_hash_big sa_order_preserving_hash_prefix
+-syn keyword sqlKeyword	 schedule schema scope scripted scroll seconds secqty security
+-syn keyword sqlKeyword	 send sensitive sent serializable
+-syn keyword sqlKeyword	 server server session set_bit set_bits sets
+-syn keyword sqlKeyword	 share simple since site size skip
+-syn keyword sqlKeyword	 snapshot soapheader soap_header split some sorted_data
+-syn keyword sqlKeyword	 sqlcode sqlid sqlflagger sqlstate sqrt square
+-syn keyword sqlKeyword	 stacker stale statement statistics status stddev_pop stddev_samp
+-syn keyword sqlKeyword	 stemmer stogroup stoplist store
++syn keyword sqlKeyword	 sa_file_free_pages sa_internal_type_from_catalog sa_internal_valid_hash
++syn keyword sqlKeyword	 sa_internal_validate_value sa_json_element
++syn keyword sqlKeyword	 scale schedule schema scope script scripted scroll search seconds secqty security
++syn keyword sqlKeyword	 semi send sensitive sent sequence serializable
++syn keyword sqlKeyword	 server severity session set_bit set_bits sets
++syn keyword sqlKeyword	 shapefile share side simple since site size skip
++syn keyword sqlKeyword	 snap snapshot soapheader soap_header
++syn keyword sqlKeyword	 spatial split some sorted_data
++syn keyword sqlKeyword	 sql sqlcode sqlid sqlflagger sqlstate sqrt square
++syn keyword sqlKeyword	 stacker stale state statement statistics status stddev_pop stddev_samp
++syn keyword sqlKeyword	 stemmer stogroup stoplist storage store
+ syn keyword sqlKeyword	 strip stripesizekb striping subpages subscribe subscription
+-syn keyword sqlKeyword	 subtransaction suser_id suser_name synchronization
+-syn keyword sqlKeyword	 syntax_error table tablock
+-syn keyword sqlKeyword	 tablockx tb temp template temporary term then
+-syn keyword sqlKeyword	 ties timezone to to_char to_nchar top traced_plan tracing
+-syn keyword sqlKeyword	 transfer transaction transactional tries true
+-syn keyword sqlKeyword	 tsequal type tune uncommitted unconditionally
+-syn keyword sqlKeyword	 unenforced unicode unique union unistr unknown unlimited unload
++syn keyword sqlKeyword	 subtransaction suser_id suser_name suspend synchronization
++syn keyword sqlKeyword	 syntax_error table tables tablock
++syn keyword sqlKeyword	 tablockx target tb temp template temporary term then ties
++syn keyword sqlKeyword	 timezone timeout tls to to_char to_nchar tolerance top
++syn keyword sqlKeyword	 trace traced_plan tracing
++syn keyword sqlKeyword	 transfer transform transaction transactional treat tries
++syn keyword sqlKeyword	 true try tsequal type tune uncommitted unconditionally
++syn keyword sqlKeyword	 unenforced unicode unique unistr unit unknown unlimited unload
+ syn keyword sqlKeyword	 unpartition unquiesce updatetime updating updlock upgrade upload
+-syn keyword sqlKeyword	 upper use user
++syn keyword sqlKeyword	 upper usage use user
+ syn keyword sqlKeyword	 using utc utilities validproc
+ syn keyword sqlKeyword	 value values varchar variable
+-syn keyword sqlKeyword	 varying var_pop var_samp vcat verify versions view virtual wait
+-syn keyword sqlKeyword	 warning wd web when where window with with_auto
++syn keyword sqlKeyword	 varying var_pop var_samp vcat verbosity
++syn keyword sqlKeyword	 verify versions view virtual wait
++syn keyword sqlKeyword	 warning wd web when where with with_auto
+ syn keyword sqlKeyword	 with_auto with_cube with_rollup without
+ syn keyword sqlKeyword	 with_lparen within word work workload write writefile
+-syn keyword sqlKeyword	 writeclientfile writer writers writeserver xlock zeros
+-" XML function support
+-syn keyword sqlFunction	 openxml xmlelement xmlforest xmlgen xmlconcat xmlagg
+-syn keyword sqlFunction	 xmlattributes
++syn keyword sqlKeyword	 writeclientfile writer writers writeserver xlock
++syn keyword sqlKeyword	 war xml zeros zone
++" XML
+ syn keyword sqlKeyword	 raw auto elements explicit
+ " HTTP support
+ syn keyword sqlKeyword	 authorization secure url service next_soap_header
+ " HTTP 9.0.2 new procedure keywords
+-syn keyword sqlKeyword	 namespace certificate clientport proxy
++syn keyword sqlKeyword	 namespace certificate certificates clientport proxy trusted_certificates_file
+ " OLAP support 9.0.0
+ syn keyword sqlKeyword	 covar_pop covar_samp corr regr_slope regr_intercept
+ syn keyword sqlKeyword	 regr_count regr_r2 regr_avgx regr_avgy
+@@ -489,37 +619,123 @@
+ syn keyword sqlKeyword	 character dec options proc reference
+ syn keyword sqlKeyword	 subtrans tran syn keyword
+ 
++" Login Mode Options
++syn keyword sqlKeywordLogin	 standard integrated kerberos LDAPUA
++syn keyword sqlKeywordLogin	 cloudadmin mixed
++
++" Spatial Predicates
++syn keyword sqlKeyword   ST_Contains
++syn keyword sqlKeyword   ST_ContainsFilter
++syn keyword sqlKeyword   ST_CoveredBy
++syn keyword sqlKeyword   ST_CoveredByFilter
++syn keyword sqlKeyword   ST_Covers
++syn keyword sqlKeyword   ST_CoversFilter
++syn keyword sqlKeyword   ST_Crosses
++syn keyword sqlKeyword   ST_Disjoint
++syn keyword sqlKeyword   ST_Equals
++syn keyword sqlKeyword   ST_EqualsFilter
++syn keyword sqlKeyword   ST_Intersects
++syn keyword sqlKeyword   ST_IntersectsFilter
++syn keyword sqlKeyword   ST_IntersectsRect
++syn keyword sqlKeyword   ST_OrderingEquals
++syn keyword sqlKeyword   ST_Overlaps
++syn keyword sqlKeyword   ST_Relate
++syn keyword sqlKeyword   ST_Touches
++syn keyword sqlKeyword   ST_Within
++syn keyword sqlKeyword   ST_WithinFilter
++" Spatial Set operations
++syn keyword sqlKeyword   ST_Affine
++syn keyword sqlKeyword   ST_Boundary
++syn keyword sqlKeyword   ST_Buffer
++syn keyword sqlKeyword   ST_ConvexHull
++syn keyword sqlKeyword   ST_ConvexHullAggr
++syn keyword sqlKeyword   ST_Difference
++syn keyword sqlKeyword   ST_Intersection
++syn keyword sqlKeyword   ST_IntersectionAggr
++syn keyword sqlKeyword   ST_SymDifference
++syn keyword sqlKeyword   ST_Union
++syn keyword sqlKeyword   ST_UnionAggr
++" Spatial Bounds
++syn keyword sqlKeyword   ST_Envelope
++syn keyword sqlKeyword   ST_EnvelopeAggr
++syn keyword sqlKeyword   ST_Lat
++syn keyword sqlKeyword   ST_LatMax
++syn keyword sqlKeyword   ST_LatMin
++syn keyword sqlKeyword   ST_Long
++syn keyword sqlKeyword   ST_LongMax
++syn keyword sqlKeyword   ST_LongMin
++syn keyword sqlKeyword   ST_M
++syn keyword sqlKeyword   ST_MMax
++syn keyword sqlKeyword   ST_MMin
++syn keyword sqlKeyword   ST_Point
++syn keyword sqlKeyword   ST_X
++syn keyword sqlKeyword   ST_XMax
++syn keyword sqlKeyword   ST_XMin
++syn keyword sqlKeyword   ST_Y
++syn keyword sqlKeyword   ST_YMax
++syn keyword sqlKeyword   ST_YMin
++syn keyword sqlKeyword   ST_Z
++syn keyword sqlKeyword   ST_ZMax
++syn keyword sqlKeyword   ST_ZMin
++" Spatial Collection Aggregates
++syn keyword sqlKeyword   ST_GeomCollectionAggr
++syn keyword sqlKeyword   ST_LineStringAggr
++syn keyword sqlKeyword   ST_MultiCurveAggr
++syn keyword sqlKeyword   ST_MultiLineStringAggr
++syn keyword sqlKeyword   ST_MultiPointAggr
++syn keyword sqlKeyword   ST_MultiPolygonAggr
++syn keyword sqlKeyword   ST_MultiSurfaceAggr
++syn keyword sqlKeyword   ST_Perimeter
++syn keyword sqlKeyword   ST_PointOnSurface
++" Spatial SRS
++syn keyword sqlKeyword   ST_CompareWKT
++syn keyword sqlKeyword   ST_FormatWKT
++syn keyword sqlKeyword   ST_ParseWKT
++syn keyword sqlKeyword   ST_TransformGeom
++syn keyword sqlKeyword   ST_GeometryTypeFromBaseType
++syn keyword sqlKeyword   ST_SnapToGrid
++syn keyword sqlKeyword   ST_Transform
++syn keyword sqlKeyword   ST_SRID
++syn keyword sqlKeyword   ST_SRIDFromBaseType
++syn keyword sqlKeyword   ST_LoadConfigurationData
++" Spatial Indexes
++syn keyword sqlKeyword   ST_LinearHash
++syn keyword sqlKeyword   ST_LinearUnHash
+ 
+ syn keyword sqlOperator	 in any some all between exists
+ syn keyword sqlOperator	 like escape not is and or
+-syn keyword sqlOperator  intersect minus
+-syn keyword sqlOperator  prior distinct
++syn keyword sqlOperator  minus
++syn keyword sqlOperator  prior distinct unnest
+ 
+-syn keyword sqlStatement allocate alter backup begin call case
+-syn keyword sqlStatement checkpoint clear close commit configure connect
+-syn keyword sqlStatement create deallocate declare delete describe
+-syn keyword sqlStatement disconnect drop execute exit explain fetch
++syn keyword sqlStatement allocate alter attach backup begin break call case catch
++syn keyword sqlStatement checkpoint clear close comment commit configure connect
++syn keyword sqlStatement continue create deallocate declare delete describe
++syn keyword sqlStatement detach disconnect drop except execute exit explain fetch
+ syn keyword sqlStatement for forward from get goto grant help if include
+-syn keyword sqlStatement input insert install leave load lock loop
+-syn keyword sqlStatement message open output parameter parameters passthrough
+-syn keyword sqlStatement prepare print put raiserror read readtext release
++syn keyword sqlStatement input insert install intersect leave load lock loop
++syn keyword sqlStatement message open output parameters passthrough
++syn keyword sqlStatement prepare print put raiserror read readtext refresh release
+ syn keyword sqlStatement remote remove reorganize resignal restore resume
+-syn keyword sqlStatement return revoke rollback savepoint select
++syn keyword sqlStatement return revoke rollback save savepoint select
+ syn keyword sqlStatement set setuser signal start stop synchronize
+-syn keyword sqlStatement system trigger truncate unload update
+-syn keyword sqlStatement validate waitfor whenever while writetext
++syn keyword sqlStatement system trigger truncate try union unload update
++syn keyword sqlStatement validate waitfor whenever while window writetext
+ 
+ 
+-syn keyword sqlType	 char long varchar text
+-syn keyword sqlType	 bigint decimal double float int integer numeric
++syn keyword sqlType	 char nchar long varchar nvarchar text ntext uniqueidentifierstr xml
++syn keyword sqlType	 bigint bit decimal double varbit
++syn keyword sqlType	 float int integer numeric
+ syn keyword sqlType	 smallint tinyint real
+ syn keyword sqlType	 money smallmoney
+-syn keyword sqlType	 bit
+-syn keyword sqlType	 date datetime smalldate time timestamp
+-syn keyword sqlType	 binary image varbinary uniqueidentifier
+-syn keyword sqlType	 xml unsigned
+-" New types 10.0.0
+-syn keyword sqlType	 varbit nchar nvarchar
++syn keyword sqlType	 date datetime datetimeoffset smalldatetime time timestamp
++syn keyword sqlType	 binary image varray varbinary uniqueidentifier
++syn keyword sqlType	 unsigned
++" Spatial types
++syn keyword sqlType	 st_geometry st_point st_curve st_surface st_geomcollection
++syn keyword sqlType	 st_linestring st_circularstring st_compoundcurve
++syn keyword sqlType	 st_curvepolygon st_polygon
++syn keyword sqlType	 st_multipoint st_multicurve st_multisurface
++syn keyword sqlType	 st_multilinestring st_multipolygon
+ 
+ syn keyword sqlOption    Allow_nulls_by_default
+ syn keyword sqlOption    Allow_read_client_file
+@@ -533,8 +749,10 @@
+ syn keyword sqlOption    Ansinull
+ syn keyword sqlOption    Auditing
+ syn keyword sqlOption    Auditing_options
++syn keyword sqlOption    Auto_commit_on_create_local_temp_index
+ syn keyword sqlOption    Background_priority
+ syn keyword sqlOption    Blocking
++syn keyword sqlOption    Blocking_others_timeout
+ syn keyword sqlOption    Blocking_timeout
+ syn keyword sqlOption    Chained
+ syn keyword sqlOption    Checkpoint_time
+@@ -551,23 +769,29 @@
+ syn keyword sqlOption    Database_authentication
+ syn keyword sqlOption    Date_format
+ syn keyword sqlOption    Date_order
++syn keyword sqlOption    db_publisher
+ syn keyword sqlOption    Debug_messages
+ syn keyword sqlOption    Dedicated_task
+ syn keyword sqlOption    Default_dbspace
+ syn keyword sqlOption    Default_timestamp_increment
+ syn keyword sqlOption    Delayed_commit_timeout
+ syn keyword sqlOption    Delayed_commits
++syn keyword sqlOption    Divide_by_zero_error
+ syn keyword sqlOption    Escape_character
+ syn keyword sqlOption    Exclude_operators
+ syn keyword sqlOption    Extended_join_syntax
++syn keyword sqlOption    Extern_login_credentials
+ syn keyword sqlOption    Fire_triggers
+ syn keyword sqlOption    First_day_of_week
+ syn keyword sqlOption    For_xml_null_treatment
+ syn keyword sqlOption    Force_view_creation
+ syn keyword sqlOption    Global_database_id
+ syn keyword sqlOption    Http_session_timeout
++syn keyword sqlOption    Http_connection_pool_basesize
++syn keyword sqlOption    Http_connection_pool_timeout
+ syn keyword sqlOption    Integrated_server_name
+ syn keyword sqlOption    Isolation_level
++syn keyword sqlOption    Java_class_path
+ syn keyword sqlOption    Java_location
+ syn keyword sqlOption    Java_main_userid
+ syn keyword sqlOption    Java_vm_options
+@@ -586,6 +810,7 @@
+ syn keyword sqlOption    Max_statement_count
+ syn keyword sqlOption    Max_temp_space
+ syn keyword sqlOption    Min_password_length
++syn keyword sqlOption    Min_role_admins
+ syn keyword sqlOption    Nearest_century
+ syn keyword sqlOption    Non_keywords
+ syn keyword sqlOption    Odbc_describe_binary_as_varbinary
+@@ -603,6 +828,7 @@
+ syn keyword sqlOption    Preserve_source_format
+ syn keyword sqlOption    Prevent_article_pkey_update
+ syn keyword sqlOption    Priority
++syn keyword sqlOption    Progress_messages
+ syn keyword sqlOption    Query_mem_timeout
+ syn keyword sqlOption    Quoted_identifier
+ syn keyword sqlOption    Read_past_deleted
+@@ -610,6 +836,7 @@
+ syn keyword sqlOption    Remote_idle_timeout
+ syn keyword sqlOption    Replicate_all
+ syn keyword sqlOption    Request_timeout
++syn keyword sqlOption    Reserved_keywords
+ syn keyword sqlOption    Return_date_time_as_string
+ syn keyword sqlOption    Rollback_on_deadlock
+ syn keyword sqlOption    Row_counts
+@@ -619,6 +846,12 @@
+ syn keyword sqlOption    Sql_flagger_error_level
+ syn keyword sqlOption    Sql_flagger_warning_level
+ syn keyword sqlOption    String_rtruncation
++syn keyword sqlOption    st_geometry_asbinary_format
++syn keyword sqlOption    st_geometry_astext_format
++syn keyword sqlOption    st_geometry_asxml_format
++syn keyword sqlOption    st_geometry_describe_type
++syn keyword sqlOption    st_geometry_interpolation
++syn keyword sqlOption    st_geometry_on_invalid
+ syn keyword sqlOption    Subsume_row_locks
+ syn keyword sqlOption    Suppress_tds_debugging
+ syn keyword sqlOption    Synchronize_mirror_on_commit
+@@ -627,6 +860,7 @@
+ syn keyword sqlOption    Time_format
+ syn keyword sqlOption    Time_zone_adjustment
+ syn keyword sqlOption    Timestamp_format
++syn keyword sqlOption    Timestamp_with_time_zone_format
+ syn keyword sqlOption    Truncate_timestamp_values
+ syn keyword sqlOption    Tsql_outer_joins
+ syn keyword sqlOption    Tsql_variables
+@@ -634,9 +868,11 @@
+ syn keyword sqlOption    Update_statistics
+ syn keyword sqlOption    Upgrade_database_capability
+ syn keyword sqlOption    User_estimates
++syn keyword sqlOption    Uuid_has_hyphens
+ syn keyword sqlOption    Verify_password_function
+ syn keyword sqlOption    Wait_for_commit
+ syn keyword sqlOption    Webservice_namespace_host
++syn keyword sqlOption    Webservice_sessionid_name
+ 
+ " Strings and characters:
+ syn region sqlString		start=+"+    end=+"+ contains=@Spell
+@@ -654,32 +890,18 @@
+ syn sync ccomment sqlDashComment
+ syn sync ccomment sqlSlashComment
+ 
+-" Define the default highlighting.
+-" For version 5.7 and earlier: only when not done already
+-" For version 5.8 and later: only when an item doesn't have highlighting yet
+-if version >= 508 || !exists("did_sql_syn_inits")
+-    if version < 508
+-        let did_sql_syn_inits = 1
+-        command -nargs=+ HiLink hi link <args>
+-    else
+-        command -nargs=+ HiLink hi link <args>
+-    endif
+-
+-    HiLink sqlDashComment	Comment
+-    HiLink sqlSlashComment	Comment
+-    HiLink sqlMultiComment	Comment
+-    HiLink sqlNumber	        Number
+-    HiLink sqlOperator	        Operator
+-    HiLink sqlSpecial	        Special
+-    HiLink sqlKeyword	        Keyword
+-    HiLink sqlStatement	        Statement
+-    HiLink sqlString	        String
+-    HiLink sqlType	        Type
+-    HiLink sqlFunction	        Function
+-    HiLink sqlOption	        PreProc
+-
+-    delcommand HiLink
+-endif
++hi def link sqlDashComment	Comment
++hi def link sqlSlashComment	Comment
++hi def link sqlMultiComment	Comment
++hi def link sqlNumber	        Number
++hi def link sqlOperator	        Operator
++hi def link sqlSpecial	        Special
++hi def link sqlKeyword	        Keyword
++hi def link sqlStatement	Statement
++hi def link sqlString	        String
++hi def link sqlType	        Type
++hi def link sqlFunction	        Function
++hi def link sqlOption	        PreProc
+ 
+ let b:current_syntax = "sqlanywhere"
+ 
+diff -Naur vim73.orig/runtime/syntax/sqlhana.vim vim73/runtime/syntax/sqlhana.vim
+--- vim73.orig/runtime/syntax/sqlhana.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/sqlhana.vim	2013-06-07 17:07:26.588932753 +0000
+@@ -0,0 +1,293 @@
++" Vim syntax file
++" Language:    SQL, SAP HANA In Memory Database
++" Maintainer:  David Fishburn <dfishburn dot vim at gmail dot com>
++" Last Change: 2012 Oct 23
++" Version:     SP4 b (Q2 2012)
++" Homepage:    http://www.vim.org/scripts/script.php?script_id=4275
++
++" Description: Updated to SAP HANA SP4
++"
++" For version 5.x: Clear all syntax items
++" For version 6.x: Quit when a syntax file was already loaded
++if version < 600
++    syntax clear
++elseif exists("b:current_syntax")
++    finish
++endif
++
++syn case ignore
++
++" The SQL reserved words, defined as keywords.
++" These were pulled from the following SQL reference:
++"     http://help.sap.com/hana/hana_sql_en.pdf
++" An easy approach is to copy all text from the PDF
++" into a Vim buffer.  The keywords are in UPPER case,
++" so you can run the following commands to be left with
++" mainly the UPPER case words:
++"   1.  Delete all words that do not begin with a Capital
++"       %s/\(\<[^A-Z]\w*\>\)//g
++"   2.  Remove all words where the 2nd letter is not a Capital
++"       %s/\(\<[A-Z][^A-Z]\w*\>\)//g
++"   3.  Remove all non-word (or space) characters
++"       %s/[^0-9A-Za-z_ ]*//g
++"   4.  Remove some known words
++"       %s/\<\(SAP\|HANA\|OK\|AG\|IBM\|DB2\|AIX\|POWER\d\+\|UNIX\)\>//g
++"   5.  Remove blank lines and trailing spaces
++"       %s/\s\+$//g
++"       %s/^\s\+//g
++"       %s/^$\n//g
++"   6.  Convert spaces to newlines remove single character
++"       %s/[ ]\+/\r/g
++"       %g/^\w$/d
++"   7.  Sort and remove duplicates
++"       :sort
++"       :Uniq
++"   8.  Use the WhatsMissing plugin against the sqlhana.vim file.
++"   9.  Generated a file of all UPPER cased words which should not
++"       be in the syntax file.  These items should be removed
++"       from the list in step 7.  You can use WhatsNotMissing
++"       between step 7 and this new file to weed out the words
++"       we know are not syntax related.
++"  10.  Use the WhatsMissingRemoveMatches to remove the words
++"       from step 9.
++
++syn keyword sqlSpecial  false null true
++
++" Supported Functions for Date/Time types
++syn keyword sqlFunction	 ADD_DAYS ADD_MONTHS ADD_SECONDS ADD_YEARS COALESCE
++syn keyword sqlFunction	 CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_UTCDATE
++syn keyword sqlFunction	 CURRENT_UTCTIME CURRENT_UTCTIMESTAMP
++syn keyword sqlFunction	 DAYNAME DAYOFMONTH DAYOFYEAR DAYS_BETWEEN EXTRACT
++syn keyword sqlFunction	 GREATEST HOUR IFNULL ISOWEEK LAST_DAY LEAST LOCALTOUTC
++syn keyword sqlFunction	 MINUTE MONTH MONTHNAME NEXT_DAY NOW QUARTER SECOND
++syn keyword sqlFunction	 SECONDS_BETWEEN UTCTOLOCAL WEEK WEEKDAY YEAR
++
++syn keyword sqlFunction	 TO_CHAR TO_DATE TO_DATS TO_NCHAR TO_TIME TO_TIMESTAMP UTCTOLOCAL
++
++" Aggregate
++syn keyword sqlFunction	 COUNT MIN MAX SUM AVG STDDEV VAR
++
++" Datatype conversion
++syn keyword sqlFunction	 CAST TO_ALPHANUM TO_BIGINT TO_BINARY TO_BLOB TO_CHAR TO_CLOB
++syn keyword sqlFunction	 TO_DATE TO_DATS TO_DECIMAL TO_DOUBLE TO_INT TO_INTEGER TO_NCHAR
++syn keyword sqlFunction	 TO_NCLOB TO_NVARCHAR TO_REAL TO_SECONDDATE TO_SMALLDECIMAL
++syn keyword sqlFunction	 TO_SMALLINT TO_TIME TO_TIMESTAMP TO_TINYINT TO_VARCHAR TO_VARBINARY
++
++" Number functions
++syn keyword sqlFunction	 ABS ACOS ASIN ATAN ATAN2 BINTOHEX BITAND CEIL COS COSH COT
++syn keyword sqlFunction	 EXP FLOOR GREATEST HEXTOBIN LEAST LN LOG MOD POWER ROUND
++syn keyword sqlFunction	 SIGN SIN SINH SQRT TAN TANH UMINUS
++
++" String functions
++syn keyword sqlFunction	 ASCII CHAR CONCAT LCASE LENGTH LOCATE LOWER LPAD LTRIM
++syn keyword sqlFunction	 NCHAR REPLACE RPAD RTRIM SUBSTR_AFTER SUBSTR_BEFORE
++syn keyword sqlFunction	 SUBSTRING TRIM UCASE UNICODE UPPER
++
++" Miscellaneous functions
++syn keyword sqlFunction	 COALESCE CURRENT_CONNECTION CURRENT_SCHEMA CURRENT_USER
++syn keyword sqlFunction	 GROUPING_ID IFNULL MAP NULLIF SESSION_CONTEXT SESSION_USER SYSUUIDSQL
++syn keyword sqlFunction	 GET_NUM_SERVERS
++
++
++" sp_ procedures
++" syn keyword sqlFunction  sp_addalias
++
++
++" Reserved keywords
++syn keyword sqlkeyword   ALL AS AT BEFORE
++syn keyword sqlkeyword   BEGIN BOTH BY
++syn keyword sqlkeyword   CONDITION
++syn keyword sqlkeyword   CURRVAL CURSOR DECLARE
++syn keyword sqlkeyword   DISTINCT DO ELSE ELSEIF ELSIF
++syn keyword sqlkeyword   END EXCEPTION EXEC
++syn keyword sqlkeyword   FOR FROM GROUP
++syn keyword sqlkeyword   HAVING IN
++syn keyword sqlkeyword   INOUT INTO IS
++syn keyword sqlkeyword   LEADING
++syn keyword sqlkeyword   LOOP MINUS NATURAL NEXTVAL
++syn keyword sqlkeyword   OF ON ORDER OUT
++syn keyword sqlkeyword   PRIOR RETURN RETURNS REVERSE
++syn keyword sqlkeyword   ROWID SELECT
++syn keyword sqlkeyword   SQL START STOP SYSDATE
++syn keyword sqlkeyword   SYSTIME SYSTIMESTAMP SYSUUID
++syn keyword sqlkeyword   TRAILING USING UTCDATE
++syn keyword sqlkeyword   UTCTIME UTCTIMESTAMP VALUES
++syn keyword sqlkeyword   WHILE
++syn keyword sqlkeyword   ANY SOME EXISTS ESCAPE
++
++" IF keywords
++syn keyword sqlkeyword	 IF
++
++" CASE keywords
++syn keyword sqlKeyword	 WHEN THEN
++
++" Syntax rules common to TEXT and SHORTTEXT keywords
++syn keyword sqlKeyword	 LANGUAGE DETECTION LINGUISTIC
++syn keyword sqlkeyword   MIME TYPE
++syn keyword sqlkeyword   EXACT WEIGHT FUZZY FUZZINESSTHRESHOLD SEARCH
++syn keyword sqlkeyword   PHRASE INDEX RATIO REBUILD
++syn keyword sqlkeyword   CONFIGURATION
++syn keyword sqlkeyword   SEARCH ONLY
++syn keyword sqlkeyword   FAST PREPROCESS
++syn keyword sqlkeyword   SYNC SYNCHRONOUS ASYNC ASYNCHRONOUS FLUSH QUEUE
++syn keyword sqlkeyword   EVERY AFTER MINUTES DOCUMENTS SUSPEND
++
++" Statement keywords (i.e. after ALTER or CREATE)
++syn keyword sqlkeyword   AUDIT POLICY
++syn keyword sqlkeyword   FULLTEXT
++syn keyword sqlkeyword   SEQUENCE RESTART
++syn keyword sqlkeyword   TABLE
++syn keyword sqlkeyword   PROCEDURE STATISTICS
++syn keyword sqlkeyword   SCHEMA
++syn keyword sqlkeyword   SYNONYM
++syn keyword sqlkeyword   VIEW
++syn keyword sqlkeyword   COLUMN
++syn keyword sqlkeyword   SYSTEM LICENSE
++syn keyword sqlkeyword   SESSION
++syn keyword sqlkeyword   CANCEL WORK
++syn keyword sqlkeyword   PLAN CACHE
++syn keyword sqlkeyword   LOGGING NOLOGGING RETENTION
++syn keyword sqlkeyword   RECONFIGURE SERVICE
++syn keyword sqlkeyword   RESET MONITORING
++syn keyword sqlkeyword   SAVE DURATION PERFTRACE FUNCTION_PROFILER
++syn keyword sqlkeyword   SAVEPOINT
++syn keyword sqlkeyword   USER
++syn keyword sqlkeyword   ROLE
++syn keyword sqlkeyword   ASC DESC
++syn keyword sqlkeyword   OWNED
++syn keyword sqlkeyword   DEPENDENCIES SCRAMBLE
++
++" Create sequence
++syn keyword sqlkeyword   INCREMENT MAXVALUE MINVALUE CYCLE
++
++" Create table
++syn keyword sqlkeyword   HISTORY GLOBAL LOCAL TEMPORARY
++
++" Create trigger
++syn keyword sqlkeyword   TRIGGER REFERENCING EACH DEFAULT
++syn keyword sqlkeyword   SIGNAL RESIGNAL MESSAGE_TEXT OLD NEW
++syn keyword sqlkeyword   EXIT HANDLER SQL_ERROR_CODE
++syn keyword sqlkeyword   TARGET CONDITION SIGNAL
++
++" Alter table
++syn keyword sqlkeyword   ADD DROP MODIFY GENERATED ALWAYS
++syn keyword sqlkeyword   UNIQUE BTREE CPBTREE PRIMARY KEY
++syn keyword sqlkeyword   CONSTRAINT PRELOAD NONE
++syn keyword sqlkeyword   ROW THREADS BATCH
++syn keyword sqlkeyword   MOVE PARTITION TO LOCATION PHYSICAL OTHERS
++syn keyword sqlkeyword   ROUNDROBIN PARTITIONS HASH RANGE VALUE
++syn keyword sqlkeyword   PERSISTENT DELTA AUTO AUTOMERGE
++
++" Create audit policy
++syn keyword sqlkeyword   AUDITING SUCCESSFUL UNSUCCESSFUL
++syn keyword sqlkeyword	 PRIVILEGE STRUCTURED CHANGE LEVEL
++syn keyword sqlkeyword	 EMERGENCY ALERT CRITICAL WARNING INFO
++
++" Privileges
++syn keyword sqlkeyword   DEBUG EXECUTE
++
++" Schema
++syn keyword sqlkeyword   CASCADE RESTRICT PARAMETERS SCAN
++
++" Traces
++syn keyword sqlkeyword   CLIENT CRASHDUMP EMERGENCYDUMP
++syn keyword sqlkeyword   INDEXSERVER NAMESERVER DAEMON
++syn keyword sqlkeyword   CLEAR REMOVE TRACES
++
++" Reclaim
++syn keyword sqlkeyword   RECLAIM DATA VOLUME VERSION SPACE DEFRAGMENT SPARSIFY
++
++" Join
++syn keyword sqlkeyword   INNER OUTER LEFT RIGHT FULL CROSS JOIN
++syn keyword sqlkeyword   GROUPING SETS ROLLUP CUBE
++syn keyword sqlkeyword   BEST LIMIT OFFSET
++syn keyword sqlkeyword   WITH SUBTOTAL BALANCE TOTAL
++syn keyword sqlkeyword   TEXT_FILTER FILL UP SORT MATCHES TOP
++syn keyword sqlkeyword   RESULT OVERVIEW PREFIX MULTIPLE RESULTSETS
++
++" Lock
++syn keyword sqlkeyword   EXCLUSIVE MODE NOWAIT
++
++" Transaction
++syn keyword sqlkeyword   TRANSACTION ISOLATION READ COMMITTED
++syn keyword sqlkeyword   REPEATABLE SERIALIZABLE WRITE
++
++" Saml
++syn keyword sqlkeyword   SAML ASSERTION PROVIDER SUBJECT ISSUER
++
++" User
++syn keyword sqlkeyword   PASSWORD IDENTIFIED EXTERNALLY ATTEMPTS ATTEMPTS
++syn keyword sqlkeyword	 ENABLE DISABLE OFF LIFETIME FORCE DEACTIVATE
++syn keyword sqlkeyword	 ACTIVATE IDENTITY KERBEROS
++
++" Grant
++syn keyword sqlkeyword   ADMIN BACKUP CATALOG SCENARIO INIFILE MONITOR
++syn keyword sqlkeyword   OPTIMIZER OPTION
++syn keyword sqlkeyword   RESOURCE STRUCTUREDPRIVILEGE TRACE
++
++" Import
++syn keyword sqlkeyword   CSV FILE CONTROL NO CHECK SKIP FIRST LIST
++syn keyword sqlkeyword	 RECORD DELIMITED FIELD OPTIONALLY ENCLOSED FORMAT
++
++" Roles
++syn keyword sqlkeyword   PUBLIC CONTENT_ADMIN MODELING MONITORING
++
++" Miscellaneous
++syn keyword sqlkeyword   APPLICATION BINARY IMMEDIATE COREFILE SECURITY DEFINER
++syn keyword sqlkeyword   DUMMY INVOKER MATERIALIZED MESSEGE_TEXT PARAMETER PARAMETERS
++syn keyword sqlkeyword   PART
++syn keyword sqlkeyword   CONSTANT SQLEXCEPTION SQLWARNING
++
++syn keyword sqlOperator  WHERE BETWEEN LIKE NULL CONTAINS
++syn keyword sqlOperator  AND OR NOT CASE
++syn keyword sqlOperator  UNION INTERSECT EXCEPT
++
++syn keyword sqlStatement ALTER CALL CALLS CREATE DROP RENAME TRUNCATE
++syn keyword sqlStatement DELETE INSERT UPDATE EXPLAIN
++syn keyword sqlStatement MERGE REPLACE UPSERT SELECT
++syn keyword sqlStatement SET UNSET LOAD UNLOAD
++syn keyword sqlStatement CONNECT DISCONNECT COMMIT LOCK ROLLBACK
++syn keyword sqlStatement GRANT REVOKE
++syn keyword sqlStatement EXPORT IMPORT
++
++
++syn keyword sqlType	 DATE TIME SECONDDATE TIMESTAMP TINYINT SMALLINT
++syn keyword sqlType	 INT INTEGER BIGINT SMALLDECIMAL DECIMAL
++syn keyword sqlType	 REAL DOUBLE FLOAT
++syn keyword sqlType	 VARCHAR NVARCHAR ALPHANUM SHORTTEXT VARBINARY
++syn keyword sqlType	 BLOB CLOB NCLOB TEXT DAYDATE
++
++syn keyword sqlOption    Webservice_namespace_host
++
++" Strings and characters:
++syn region sqlString		start=+"+    end=+"+ contains=@Spell
++syn region sqlString		start=+'+    end=+'+ contains=@Spell
++
++" Numbers:
++syn match sqlNumber		"-\=\<\d*\.\=[0-9_]\>"
++
++" Comments:
++syn region sqlDashComment	start=/--/ end=/$/ contains=@Spell
++syn region sqlSlashComment	start=/\/\// end=/$/ contains=@Spell
++syn region sqlMultiComment	start="/\*" end="\*/" contains=sqlMultiComment,@Spell
++syn cluster sqlComment	contains=sqlDashComment,sqlSlashComment,sqlMultiComment,@Spell
++syn sync ccomment sqlComment
++syn sync ccomment sqlDashComment
++syn sync ccomment sqlSlashComment
++
++hi def link sqlDashComment	Comment
++hi def link sqlSlashComment	Comment
++hi def link sqlMultiComment	Comment
++hi def link sqlNumber	        Number
++hi def link sqlOperator	        Operator
++hi def link sqlSpecial	        Special
++hi def link sqlKeyword	        Keyword
++hi def link sqlStatement	Statement
++hi def link sqlString	        String
++hi def link sqlType	        Type
++hi def link sqlFunction	        Function
++hi def link sqlOption	        PreProc
++
++let b:current_syntax = "sqlhana"
++
++" vim:sw=4:
+diff -Naur vim73.orig/runtime/syntax/sqr.vim vim73/runtime/syntax/sqr.vim
+--- vim73.orig/runtime/syntax/sqr.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sqr.vim	2013-06-07 17:07:26.625599315 +0000
+@@ -43,11 +43,11 @@
+ syn keyword    sqrSection     end-footing end-heading end-procedure
+ syn keyword    sqrSection     end-program end-report end-setup
+ 
+-syn keyword    sqrParagraph   alter-color-map alter-conection
++syn keyword    sqrParagraph   alter-color-map alter-connection
+ syn keyword    sqrParagraph   alter-locale alter-printer alter-report
+ syn keyword    sqrParagraph   begin-document begin-execute begin-select
+ syn keyword    sqrParagraph   begin-sql declare-chart declare-image
+-syn keyword    sqrParagraph   declare-color-map declare-conection
++syn keyword    sqrParagraph   declare-color-map declare-connection
+ syn keyword    sqrParagraph   declare-layout declare-printer
+ syn keyword    sqrParagraph   declare-report declare-procedure
+ syn keyword    sqrParagraph   declare-toc declare-variable end-declare
+@@ -224,16 +224,16 @@
+   " See also the sqrString section above for handling of ! characters
+   " inside of strings.  (Those patterns override the ones below.)
+   syn match	sqrComment	/!\@<!!\([^!=].*\|$\)/ contains=sqrTodo
+-  "				  the ! can't be preceeded by another !,
++  "				  the ! can't be preceded by another !,
+   "				  and must be followed by at least one
+   "				  character other than ! or =, or immediately
+   "				  by the end-of-line
+   syn match	sqrComment	/^!=.*/ contains=sqrTodo
+   syn match	sqrComment	/^!!.*/ contains=sqrTodo
+   syn match	sqrError	/^\s\+\zs!=.*/
+-  "				  it's an error to have "!=" preceeded by
++  "				  it's an error to have "!=" preceded by
+   "				  just whitespace on the line ("!="
+-  "				  preceeded by non-whitespace is treated
++  "				  preceded by non-whitespace is treated
+   "				  as neither a comment nor an error, since
+   "				  it is often correct, i.e.
+   "				    if #count != 7
+@@ -259,7 +259,7 @@
+ 
+ " Define the default highlighting.
+ " For version 5.7 and earlier, only when not done already.
+-" For version 5.8 and later, only when an item doesn;t have hightlighting yet.
++" For version 5.8 and later, only when an item doesn't have highlighting yet.
+ if version >= 508 || !exists("did_sqr_syn_inits")
+   if version < 508
+     let did_sqr_syn_inits = 1
+diff -Naur vim73.orig/runtime/syntax/sshconfig.vim vim73/runtime/syntax/sshconfig.vim
+--- vim73.orig/runtime/syntax/sshconfig.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sshconfig.vim	2013-06-07 17:07:26.642265934 +0000
+@@ -1,7 +1,10 @@
+ " Vim syntax file
+-" Language: OpenSSH client configuration file (ssh_config)
+-" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+-" Last Change: 2009-07-09
++" Language:	OpenSSH client configuration file (ssh_config)
++" Author:	David Necas (Yeti)
++" Maintainer:   Leonard Ehrenfried <leonard.ehrenfried@web.de>	
++" Last Change:	2012 Feb 24 
++" SSH Version:	5.9p1
++"
+ 
+ " Setup
+ if version >= 600
+@@ -18,70 +21,162 @@
+   set iskeyword=_,-,a-z,A-Z,48-57
+ endif
+ 
+-syn case ignore
++
++" case on
++syn case match
++
+ 
+ " Comments
+-syn match sshconfigComment "#.*$" contains=sshconfigTodo
+-syn keyword sshconfigTodo TODO FIXME NOT contained
++syn match sshconfigComment "^#.*$" contains=sshconfigTodo
++syn match sshconfigComment "\s#.*$" contains=sshconfigTodo
++
++syn keyword sshconfigTodo TODO FIXME NOTE contained
++
+ 
+ " Constants
+ syn keyword sshconfigYesNo yes no ask
+ syn keyword sshconfigYesNo any auto
+-syn keyword sshconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
+-syn keyword sshconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
+-syn keyword sshconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
++syn keyword sshconfigYesNo force autoask none
++
++syn keyword sshconfigCipher  3des blowfish
++syn keyword sshconfigCiphers aes128-cbc 3des-cbc blowfish blowfish-cbc cast128-cbc
++syn keyword sshconfigCiphers aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr
++syn keyword sshconfigCiphers arcfour arcfour128 arcfour256 cast128-cbc
++
+ syn keyword sshconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
+ syn keyword sshconfigMAC hmac-md5-96
+-syn match sshconfigMAC "\<umac-64@openssh\.com\>"
++syn keyword sshconfigMAC hmac-sha2-256 hmac-sha2-256-96 hmac-sha2-512
++syn keyword sshconfigMAC hmac-sha2-512-96
++syn match   sshconfigMAC "\<umac-64@openssh\.com\>"
++
+ syn keyword sshconfigHostKeyAlg ssh-rsa ssh-dss
+-syn keyword sshconfigPreferredAuth hostbased publickey password
++syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp256-cert-v01@openssh\.com\>"
++syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp384-cert-v01@openssh\.com\>"
++syn match   sshconfigHostKeyAlg "\<ecdsa-sha2-nistp521-cert-v01@openssh\.com\>"
++syn match   sshconfigHostKeyAlg "\<ssh-rsa-cert-v01@openssh\.com\>"
++syn match   sshconfigHostKeyAlg "\<ssh-dss-cert-v01@openssh\.com\>"
++syn match   sshconfigHostKeyAlg "\<ssh-rsa-cert-v00@openssh\.com\>"
++syn match   sshconfigHostKeyAlg "\<ssh-dss-cert-v00@openssh\.com\>"
++syn keyword sshconfigHostKeyAlg ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521
++
++syn keyword sshconfigPreferredAuth hostbased publickey password gssapi-with-mic
+ syn keyword sshconfigPreferredAuth keyboard-interactive
++
+ syn keyword sshconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
+ syn keyword sshconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
+ syn keyword sshconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
+ syn keyword sshconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
+-syn match sshconfigVar "%[rhpldun]\>"
++syn keyword sshconfigAddressFamily  inet inet6
++
++syn match   sshconfigIPQoS	"af1[1234]"
++syn match   sshconfigIPQoS	"af2[23]"
++syn match   sshconfigIPQoS	"af3[123]"
++syn match   sshconfigIPQoS	"af4[123]"
++syn match   sshconfigIPQoS	"cs[0-7]"
++syn keyword sshconfigIPQoS	ef lowdelay throughput reliability
++syn keyword sshconfigKbdInteractive bsdauth pam skey
++
++syn keyword sshconfigKexAlgo	ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
++syn keyword sshconfigKexAlgo	diffie-hellman-group-exchange-sha256
++syn keyword sshconfigKexAlgo	diffie-hellman-group-exchange-sha1
++syn keyword sshconfigKexAlgo	diffie-hellman-group14-sha1
++syn keyword sshconfigKexAlgo	diffie-hellman-group1-sha1
++
++syn keyword sshconfigTunnel	point-to-point ethernet
++
++syn match sshconfigVar "%[rhplLdun]\>"
+ syn match sshconfigSpecial "[*?]"
+ syn match sshconfigNumber "\d\+"
+ syn match sshconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
+ syn match sshconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>"
+ syn match sshconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}[:/]\d\+\>"
++syn match sshconfigHostPort "\(Host \)\@<=.\+"
++syn match sshconfigHostPort "\(HostName \)\@<=.\+"
++
++" case off
++syn case ignore
++
+ 
+ " Keywords
+ syn keyword sshconfigHostSect Host
++
+ syn keyword sshconfigKeyword AddressFamily
+-syn keyword sshconfigKeyword BatchMode BindAddress
+-syn keyword sshconfigKeyword ChallengeResponseAuthentication CheckHostIP
+-syn keyword sshconfigKeyword Cipher Ciphers ClearAllForwardings
+-syn keyword sshconfigKeyword Compression CompressionLevel ConnectTimeout
+-syn keyword sshconfigKeyword ConnectionAttempts ControlMaster
+-syn keyword sshconfigKeyword ControlPath DynamicForward
+-syn keyword sshconfigKeyword EnableSSHKeysign EscapeChar ExitOnForwardFailure
+-syn keyword sshconfigKeyword ForwardAgent ForwardX11
++syn keyword sshconfigKeyword BatchMode
++syn keyword sshconfigKeyword BindAddress
++syn keyword sshconfigKeyword ChallengeResponseAuthentication
++syn keyword sshconfigKeyword CheckHostIP
++syn keyword sshconfigKeyword Cipher
++syn keyword sshconfigKeyword Ciphers
++syn keyword sshconfigKeyword ClearAllForwardings
++syn keyword sshconfigKeyword Compression
++syn keyword sshconfigKeyword CompressionLevel
++syn keyword sshconfigKeyword ConnectTimeout
++syn keyword sshconfigKeyword ConnectionAttempts
++syn keyword sshconfigKeyword ControlMaster
++syn keyword sshconfigKeyword ControlPath
++syn keyword sshconfigKeyword ControlPersist
++syn keyword sshconfigKeyword DynamicForward
++syn keyword sshconfigKeyword EnableSSHKeysign
++syn keyword sshconfigKeyword EscapeChar
++syn keyword sshconfigKeyword ExitOnForwardFailure
++syn keyword sshconfigKeyword ForwardAgent
++syn keyword sshconfigKeyword ForwardX11
++syn keyword sshconfigKeyword ForwardX11Timeout
+ syn keyword sshconfigKeyword ForwardX11Trusted
+ syn keyword sshconfigKeyword GSSAPIAuthentication
+-syn keyword sshconfigKeyword GSSAPIDelegateCredentials GatewayPorts
++syn keyword sshconfigKeyword GSSAPIClientIdentity
++syn keyword sshconfigKeyword GSSAPIDelegateCredentials
++syn keyword sshconfigKeyword GSSAPIKeyExchange
++syn keyword sshconfigKeyword GSSAPIRenewalForcesRekey
++syn keyword sshconfigKeyword GSSAPIServerIdentity
++syn keyword sshconfigKeyword GSSAPITrustDNS
++syn keyword sshconfigKeyword GSSAPITrustDns
++syn keyword sshconfigKeyword GatewayPorts
+ syn keyword sshconfigKeyword GlobalKnownHostsFile
+-syn keyword sshconfigKeyword HostKeyAlgorithms HashKnownHosts
+-syn keyword sshconfigKeyword HostKeyAlias HostName HostbasedAuthentication
+-syn keyword sshconfigKeyword IdentitiesOnly IdentityFile
+-syn keyword sshconfigKeyword KbdInteractiveAuthentication KbdInteractiveDevices
+-syn keyword sshconfigKeyword LocalCommand LocalForward LogLevel
++syn keyword sshconfigKeyword HashKnownHosts
++syn keyword sshconfigKeyword HostKeyAlgorithms
++syn keyword sshconfigKeyword HostKeyAlias
++syn keyword sshconfigKeyword HostName
++syn keyword sshconfigKeyword HostbasedAuthentication
++syn keyword sshconfigKeyword IPQoS
++syn keyword sshconfigKeyword IdentitiesOnly
++syn keyword sshconfigKeyword IdentityFile
++syn keyword sshconfigKeyword KbdInteractiveAuthentication
++syn keyword sshconfigKeyword KbdInteractiveDevices
++syn keyword sshconfigKeyword KexAlgorithms
++syn keyword sshconfigKeyword LocalCommand
++syn keyword sshconfigKeyword LocalForward
++syn keyword sshconfigKeyword LogLevel
+ syn keyword sshconfigKeyword MACs
+ syn keyword sshconfigKeyword NoHostAuthenticationForLocalhost
+ syn keyword sshconfigKeyword NumberOfPasswordPrompts
+-syn keyword sshconfigKeyword PasswordAuthentication PermitLocalCommand
+-syn keyword sshconfigKeyword Port PreferredAuthentications Protocol
+-syn keyword sshconfigKeyword ProxyCommand PubkeyAuthentication
++syn keyword sshconfigKeyword PKCS11Provider
++syn keyword sshconfigKeyword PasswordAuthentication
+ syn keyword sshconfigKeyword PermitLocalCommand
+-syn keyword sshconfigKeyword RSAAuthentication RemoteForward RekeyLimit
++syn keyword sshconfigKeyword Port
++syn keyword sshconfigKeyword PreferredAuthentications
++syn keyword sshconfigKeyword Protocol
++syn keyword sshconfigKeyword ProxyCommand
++syn keyword sshconfigKeyword PubkeyAuthentication
++syn keyword sshconfigKeyword RSAAuthentication
++syn keyword sshconfigKeyword RekeyLimit
++syn keyword sshconfigKeyword RemoteForward
++syn keyword sshconfigKeyword RequestTTY
+ syn keyword sshconfigKeyword RhostsRSAAuthentication
+-syn keyword sshconfigKeyword SendEnv ServerAliveCountMax ServerAliveInterval
+-syn keyword sshconfigKeyword SmartcardDevice StrictHostKeyChecking
+-syn keyword sshconfigKeyword Tunnel TunnelDevice
+-syn keyword sshconfigKeyword TCPKeepAlive UsePrivilegedPort User
++syn keyword sshconfigKeyword SendEnv
++syn keyword sshconfigKeyword ServerAliveCountMax
++syn keyword sshconfigKeyword ServerAliveInterval
++syn keyword sshconfigKeyword SmartcardDevice
++syn keyword sshconfigKeyword StrictHostKeyChecking
++syn keyword sshconfigKeyword TCPKeepAlive
++syn keyword sshconfigKeyword Tunnel
++syn keyword sshconfigKeyword TunnelDevice
++syn keyword sshconfigKeyword UseBlacklistedKeys
++syn keyword sshconfigKeyword UsePrivilegedPort
++syn keyword sshconfigKeyword User
+ syn keyword sshconfigKeyword UserKnownHostsFile
+-syn keyword sshconfigKeyword VerifyHostKeyDNS VisualHostKey
++syn keyword sshconfigKeyword VerifyHostKeyDNS
++syn keyword sshconfigKeyword VisualHostKey
+ syn keyword sshconfigKeyword XAuthLocation
+ 
+ " Define the default highlighting
+@@ -100,10 +195,16 @@
+   HiLink sshconfigConstant       Constant
+   HiLink sshconfigYesNo          sshconfigEnum
+   HiLink sshconfigCipher         sshconfigEnum
++  HiLink sshconfigCiphers	 sshconfigEnum
+   HiLink sshconfigMAC            sshconfigEnum
+   HiLink sshconfigHostKeyAlg     sshconfigEnum
+   HiLink sshconfigLogLevel       sshconfigEnum
+   HiLink sshconfigSysLogFacility sshconfigEnum
++  HiLink sshconfigAddressFamily  sshconfigEnum
++  HiLink sshconfigIPQoS		 sshconfigEnum
++  HiLink sshconfigKbdInteractive sshconfigEnum
++  HiLink sshconfigKexAlgo	 sshconfigEnum
++  HiLink sshconfigTunnel	 sshconfigEnum
+   HiLink sshconfigPreferredAuth  sshconfigEnum
+   HiLink sshconfigVar            sshconfigEnum
+   HiLink sshconfigEnum           Identifier
+@@ -114,3 +215,5 @@
+ endif
+ 
+ let b:current_syntax = "sshconfig"
++
++" vim:set ts=8 sw=2 sts=2:
+diff -Naur vim73.orig/runtime/syntax/sshdconfig.vim vim73/runtime/syntax/sshdconfig.vim
+--- vim73.orig/runtime/syntax/sshdconfig.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/sshdconfig.vim	2013-06-07 17:07:26.668932525 +0000
+@@ -1,7 +1,12 @@
+ " Vim syntax file
+-" Language: OpenSSH server configuration file (sshd_config)
+-" Maintainer: David Necas (Yeti) <yeti@physics.muni.cz>
+-" Last Change: 2009-07-09
++" Language:	OpenSSH server configuration file (sshd_config)
++" Maintainer:	David Necas (Yeti)
++" Maintainer:   Leonard Ehrenfried <leonard.ehrenfried@web.de>	
++" Modified By:	Thilo Six
++" Originally:	2009-07-09
++" Last Change:	2011 Oct 31 
++" SSH Version:	5.9p1
++"
+ 
+ " Setup
+ if version >= 600
+@@ -18,27 +23,63 @@
+   set iskeyword=_,-,a-z,A-Z,48-57
+ endif
+ 
+-syn case ignore
++
++" case on
++syn case match
++
+ 
+ " Comments
+-syn match sshdconfigComment "#.*$" contains=sshdconfigTodo
+-syn keyword sshdconfigTodo TODO FIXME NOT contained
++syn match sshdconfigComment "^#.*$" contains=sshdconfigTodo
++syn match sshdconfigComment "\s#.*$" contains=sshdconfigTodo
++
++syn keyword sshdconfigTodo TODO FIXME NOTE contained
+ 
+ " Constants
+ syn keyword sshdconfigYesNo yes no none
++
+ syn keyword sshdconfigAddressFamily any inet inet6
++
+ syn keyword sshdconfigCipher aes128-cbc 3des-cbc blowfish-cbc cast128-cbc
+-syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes256-ctr
++syn keyword sshdconfigCipher aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr
+ syn keyword sshdconfigCipher arcfour arcfour128 arcfour256 cast128-cbc
++
+ syn keyword sshdconfigMAC hmac-md5 hmac-sha1 hmac-ripemd160 hmac-sha1-96
+ syn keyword sshdconfigMAC hmac-md5-96
+-syn match sshdconfigMAC "\<umac-64@openssh\.com\>"
++syn keyword sshdconfigMAC hmac-sha2-256 hmac-sha256-96 hmac-sha2-512
++syn keyword sshdconfigMAC hmac-sha2-512-96
++syn match   sshdconfigMAC "\<umac-64@openssh\.com\>"
++
+ syn keyword sshdconfigRootLogin without-password forced-commands-only
++
+ syn keyword sshdconfigLogLevel QUIET FATAL ERROR INFO VERBOSE
+ syn keyword sshdconfigLogLevel DEBUG DEBUG1 DEBUG2 DEBUG3
+ syn keyword sshdconfigSysLogFacility DAEMON USER AUTH AUTHPRIV LOCAL0 LOCAL1
+ syn keyword sshdconfigSysLogFacility LOCAL2 LOCAL3 LOCAL4 LOCAL5 LOCAL6 LOCAL7
++
++syn keyword sshdconfigCompression    delayed
++
++syn match   sshdconfigIPQoS	"af1[1234]"
++syn match   sshdconfigIPQoS	"af2[23]"
++syn match   sshdconfigIPQoS	"af3[123]"
++syn match   sshdconfigIPQoS	"af4[123]"
++syn match   sshdconfigIPQoS	"cs[0-7]"
++syn keyword sshdconfigIPQoS	ef lowdelay throughput reliability
++
++syn keyword sshdconfigKexAlgo	ecdh-sha2-nistp256 ecdh-sha2-nistp384 ecdh-sha2-nistp521
++syn keyword sshdconfigKexAlgo	diffie-hellman-group-exchange-sha256
++syn keyword sshdconfigKexAlgo	diffie-hellman-group-exchange-sha1
++syn keyword sshdconfigKexAlgo	diffie-hellman-group14-sha1
++syn keyword sshdconfigKexAlgo	diffie-hellman-group1-sha1
++
++syn keyword sshdconfigTunnel	point-to-point ethernet
++
++syn keyword sshdconfigSubsystem internal-sftp
++
++syn match sshdconfigVar	    "%[hu]\>"
++syn match sshdconfigVar	    "%%"
++
+ syn match sshdconfigSpecial "[*?]"
++
+ syn match sshdconfigNumber "\d\+"
+ syn match sshdconfigHostPort "\<\(\d\{1,3}\.\)\{3}\d\{1,3}\(:\d\+\)\?\>"
+ syn match sshdconfigHostPort "\<\([-a-zA-Z0-9]\+\.\)\+[-a-zA-Z0-9]\{2,}\(:\d\+\)\?\>"
+@@ -46,38 +87,93 @@
+ syn match sshdconfigHostPort "\<\(\x\{,4}:\)\+\x\{,4}:\d\+\>"
+ syn match sshdconfigTime "\<\(\d\+[sSmMhHdDwW]\)\+\>"
+ 
++
++" case off
++syn case ignore
++
++
+ " Keywords
+ syn keyword sshdconfigMatch Host User Group Address
+-syn keyword sshdconfigKeyword AcceptEnv AddressFamily AllowAgentForwarding
+-syn keyword sshdconfigKeyword AllowGroups AllowTcpForwarding
+-syn keyword sshdconfigKeyword AllowUsers AuthorizedKeysFile
++
++syn keyword sshdconfigKeyword AcceptEnv
++syn keyword sshdconfigKeyword AddressFamily
++syn keyword sshdconfigKeyword AllowAgentForwarding
++syn keyword sshdconfigKeyword AllowGroups
++syn keyword sshdconfigKeyword AllowTcpForwarding
++syn keyword sshdconfigKeyword AllowUsers
++syn keyword sshdconfigKeyword AuthorizedKeysFile
++syn keyword sshdconfigKeyword AuthorizedPrincipalsFile
+ syn keyword sshdconfigKeyword Banner
+-syn keyword sshdconfigKeyword ChallengeResponseAuthentication ChrootDirectory
+-syn keyword sshdconfigKeyword Ciphers ClientAliveCountMax
+-syn keyword sshdconfigKeyword ClientAliveInterval Compression
+-syn keyword sshdconfigKeyword DenyGroups DenyUsers
++syn keyword sshdconfigKeyword ChallengeResponseAuthentication
++syn keyword sshdconfigKeyword ChrootDirectory
++syn keyword sshdconfigKeyword Ciphers
++syn keyword sshdconfigKeyword ClientAliveCountMax
++syn keyword sshdconfigKeyword ClientAliveInterval
++syn keyword sshdconfigKeyword Compression
++syn keyword sshdconfigKeyword DebianBanner
++syn keyword sshdconfigKeyword DenyGroups
++syn keyword sshdconfigKeyword DenyUsers
+ syn keyword sshdconfigKeyword ForceCommand
+-syn keyword sshdconfigKeyword GatewayPorts GSSAPIAuthentication
++syn keyword sshdconfigKeyword GSSAPIAuthentication
+ syn keyword sshdconfigKeyword GSSAPICleanupCredentials
+-syn keyword sshdconfigKeyword HostbasedAuthentication HostKey
+-syn keyword sshdconfigKeyword IgnoreRhosts IgnoreUserKnownHosts
+-syn keyword sshdconfigKeyword KerberosAuthentication KerberosGetAFSToken
+-syn keyword sshdconfigKeyword KerberosOrLocalPasswd KerberosTicketCleanup
++syn keyword sshdconfigKeyword GSSAPIKeyExchange
++syn keyword sshdconfigKeyword GSSAPIStoreCredentialsOnRekey
++syn keyword sshdconfigKeyword GSSAPIStrictAcceptorCheck
++syn keyword sshdconfigKeyword GatewayPorts
++syn keyword sshdconfigKeyword HostCertificate
++syn keyword sshdconfigKeyword HostKey
++syn keyword sshdconfigKeyword HostbasedAuthentication
++syn keyword sshdconfigKeyword HostbasedUsesNameFromPacketOnly
++syn keyword sshdconfigKeyword IPQoS
++syn keyword sshdconfigKeyword IgnoreRhosts
++syn keyword sshdconfigKeyword IgnoreUserKnownHosts
++syn keyword sshdconfigKeyword KbdInteractiveAuthentication
++syn keyword sshdconfigKeyword KerberosAuthentication
++syn keyword sshdconfigKeyword KerberosGetAFSToken
++syn keyword sshdconfigKeyword KerberosOrLocalPasswd
++syn keyword sshdconfigKeyword KerberosTicketCleanup
++syn keyword sshdconfigKeyword KexAlgorithms
+ syn keyword sshdconfigKeyword KeyRegenerationInterval
+-syn keyword sshdconfigKeyword ListenAddress LoginGraceTime LogLevel
+-syn keyword sshdconfigKeyword MACs Match MaxAuthTries MaxSessions MaxStartups
+-syn keyword sshdconfigKeyword PasswordAuthentication PermitEmptyPasswords
+-syn keyword sshdconfigKeyword PermitRootLogin PermitOpen PermitTunnel
+-syn keyword sshdconfigKeyword PermitUserEnvironment PidFile Port
+-syn keyword sshdconfigKeyword PrintLastLog PrintMotd Protocol
++syn keyword sshdconfigKeyword ListenAddress
++syn keyword sshdconfigKeyword LogLevel
++syn keyword sshdconfigKeyword LoginGraceTime
++syn keyword sshdconfigKeyword MACs
++syn keyword sshdconfigKeyword Match
++syn keyword sshdconfigKeyword MaxAuthTries
++syn keyword sshdconfigKeyword MaxSessions
++syn keyword sshdconfigKeyword MaxStartups
++syn keyword sshdconfigKeyword PasswordAuthentication
++syn keyword sshdconfigKeyword PermitBlacklistedKeys
++syn keyword sshdconfigKeyword PermitEmptyPasswords
++syn keyword sshdconfigKeyword PermitOpen
++syn keyword sshdconfigKeyword PermitRootLogin
++syn keyword sshdconfigKeyword PermitTunnel
++syn keyword sshdconfigKeyword PermitUserEnvironment
++syn keyword sshdconfigKeyword PidFile
++syn keyword sshdconfigKeyword Port
++syn keyword sshdconfigKeyword PrintLastLog
++syn keyword sshdconfigKeyword PrintMotd
++syn keyword sshdconfigKeyword Protocol
+ syn keyword sshdconfigKeyword PubkeyAuthentication
+-syn keyword sshdconfigKeyword RhostsRSAAuthentication RSAAuthentication
+-syn keyword sshdconfigKeyword ServerKeyBits ShowPatchLevel StrictModes
+-syn keyword sshdconfigKeyword Subsystem SyslogFacility
++syn keyword sshdconfigKeyword RSAAuthentication
++syn keyword sshdconfigKeyword RevokedKeys
++syn keyword sshdconfigKeyword RhostsRSAAuthentication
++syn keyword sshdconfigKeyword ServerKeyBits
++syn keyword sshdconfigKeyword ShowPatchLevel
++syn keyword sshdconfigKeyword StrictModes
++syn keyword sshdconfigKeyword Subsystem
++syn keyword sshdconfigKeyword SyslogFacility
+ syn keyword sshdconfigKeyword TCPKeepAlive
+-syn keyword sshdconfigKeyword UseDNS UseLogin UsePAM UsePrivilegeSeparation
+-syn keyword sshdconfigKeyword X11DisplayOffset X11Forwarding
+-syn keyword sshdconfigKeyword X11UseLocalhost XAuthLocation
++syn keyword sshdconfigKeyword TrustedUserCAKeys
++syn keyword sshdconfigKeyword UseDNS
++syn keyword sshdconfigKeyword UseLogin
++syn keyword sshdconfigKeyword UsePAM
++syn keyword sshdconfigKeyword UsePrivilegeSeparation
++syn keyword sshdconfigKeyword X11DisplayOffset
++syn keyword sshdconfigKeyword X11Forwarding
++syn keyword sshdconfigKeyword X11UseLocalhost
++syn keyword sshdconfigKeyword XAuthLocation
++
+ 
+ " Define the default highlighting
+ if version >= 508 || !exists("did_sshdconfig_syntax_inits")
+@@ -101,6 +197,12 @@
+   HiLink sshdconfigRootLogin      sshdconfigEnum
+   HiLink sshdconfigLogLevel       sshdconfigEnum
+   HiLink sshdconfigSysLogFacility sshdconfigEnum
++  HiLink sshdconfigVar		  sshdconfigEnum
++  HiLink sshdconfigCompression    sshdconfigEnum
++  HiLink sshdconfigIPQoS	  sshdconfigEnum
++  HiLink sshdconfigKexAlgo	  sshdconfigEnum
++  HiLink sshdconfigTunnel	  sshdconfigEnum
++  HiLink sshdconfigSubsystem	  sshdconfigEnum
+   HiLink sshdconfigEnum           Function
+   HiLink sshdconfigSpecial        Special
+   HiLink sshdconfigKeyword        Keyword
+@@ -109,3 +211,5 @@
+ endif
+ 
+ let b:current_syntax = "sshdconfig"
++
++" vim:set ts=8 sw=2 sts=2:
+diff -Naur vim73.orig/runtime/syntax/st.vim vim73/runtime/syntax/st.vim
+--- vim73.orig/runtime/syntax/st.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/st.vim	2013-06-07 17:07:26.672265849 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Smalltalk
+ " Maintainer:	Arndt Hesse <hesse@self.de>
+-" Last Change:	2001 May 09
++" Last Change:	2012 Feb 12 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " some Smalltalk keywords and standard methods
+ syn keyword	stKeyword	super self class true false new not
+ syn keyword	stKeyword	notNil isNil inspect out nil
+@@ -100,3 +103,6 @@
+ endif
+ 
+ let b:current_syntax = "st"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/sudoers.vim vim73/runtime/syntax/sudoers.vim
+--- vim73.orig/runtime/syntax/sudoers.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sudoers.vim	2013-06-07 17:07:26.698932439 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         sudoers(5) configuration files
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2007-08-02
++" Latest Revision:  2011-02-24
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -149,10 +149,86 @@
+ 
+ " TODO: could also deal with special characters here
+ syn match   sudoersBooleanParameter contained '!' nextgroup=sudoersBooleanParameter skipwhite skipnl
+-syn keyword sudoersBooleanParameter contained long_opt_prompt ignore_dot mail_always mail_badpass mail_no_user mail_no_perms tty_tickets lecture authenticate root_sudo log_host log_year shell_noargs set_home always_set_home path_info preserve_groups fqdn insults requiretty env_editor rootpw runaspw targetpw set_logname stay_setuid env_reset use_loginclass nextgroup=sudoersParameterListComma skipwhite skipnl
+-syn keyword sudoersIntegerParameter contained passwd_tries loglinelen timestamp_timeout passwd_timeout umask nextgroup=sudoersIntegerParameterEquals skipwhite skipnl
+-syn keyword sudoersStringParameter  contained mailsub badpass_message timestampdir timestampowner passprompt runas_default syslog_goodpri syslog_badpri editor logfile syslog mailerpath mailerflags mailto exempt_group verifypw listpw nextgroup=sudoersStringParameterEquals skipwhite skipnl
+-syn keyword sudoersListParameter    contained env_check env_delete env_keep nextgroup=sudoersListParameterEquals skipwhite skipnl
++syn keyword sudoersBooleanParameter contained skipwhite skipnl
++                                  \ always_set_home
++                                  \ authenticate
++                                  \ closefrom_override
++                                  \ env_editor
++                                  \ env_reset
++                                  \ fqdn
++                                  \ ignore_dot
++                                  \ ignore_local_sudoers
++                                  \ insults
++                                  \ log_host
++                                  \ log_year
++                                  \ long_otp_prompt
++                                  \ mail_always
++                                  \ mail_badpass
++                                  \ mail_no_host
++                                  \ mail_no_perms
++                                  \ mail_no_user
++                                  \ noexec
++                                  \ path_info
++                                  \ passprompt_override
++                                  \ preserve_groups
++                                  \ requiretty
++                                  \ root_sudo
++                                  \ rootpw
++                                  \ runaspw
++                                  \ set_home
++                                  \ set_logname
++                                  \ setenv
++                                  \ shell_noargs
++                                  \ stay_setuid
++                                  \ targetpw
++                                  \ tty_tickets
++                                  \ visiblepw
++
++syn keyword sudoersIntegerParameter contained
++                                  \ nextgroup=sudoersIntegerParameterEquals
++                                  \ skipwhite skipnl
++                                  \ closefrom
++                                  \ passwd_tries
++                                  \ loglinelen
++                                  \ passwd_timeout
++                                  \ timestamp_timeout
++                                  \ umask
++
++syn keyword sudoersStringParameter  contained
++                                  \ nextgroup=sudoersStringParameterEquals
++                                  \ skipwhite skipnl
++                                  \ badpass_message
++                                  \ editor
++                                  \ mailsub
++                                  \ noexec_file
++                                  \ passprompt
++                                  \ runas_default
++                                  \ syslog_badpri
++                                  \ syslog_goodpri
++                                  \ sudoers_locale
++                                  \ timestampdir
++                                  \ timestampowner
++                                  \ askpass
++                                  \ env_file
++                                  \ exempt_group
++                                  \ lecture
++                                  \ lecture_file
++                                  \ listpw
++                                  \ logfile
++                                  \ mailerflags
++                                  \ mailerpath
++                                  \ mailfrom
++                                  \ mailto
++                                  \ secure_path
++                                  \ syslog
++                                  \ verifypw
++
++syn keyword sudoersListParameter    contained
++                                  \ nextgroup=sudoersListParameterEquals
++                                  \ skipwhite skipnl
++                                  \ env_check
++                                  \ env_delete
++                                  \ env_keep
+ 
+ syn match   sudoersParameterListComma contained ',' nextgroup=@sudoersParameter skipwhite skipnl
+ 
+diff -Naur vim73.orig/runtime/syntax/svn.vim vim73/runtime/syntax/svn.vim
+--- vim73.orig/runtime/syntax/svn.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/svn.vim	2013-06-07 17:07:26.745598973 +0000
+@@ -1,14 +1,16 @@
+ " Vim syntax file
+ " Language:     Subversion (svn) commit file
+-" Maintainer:   Dmitry Vasiliev <dima at hlabs dot spb dot ru>
+-" URL:          http://www.hlabs.spb.ru/vim/svn.vim
+-" Revision:     $Id: svn.vim 683 2008-07-30 11:52:38Z hdima $
++" Maintainer:   Dmitry Vasiliev <dima at hlabs dot org>
++" URL:          https://github.com/hdima/vim-scripts/blob/master/syntax/svn.vim
++" Last Change:  2012-07-21
+ " Filenames:    svn-commit*.tmp
+-" Version:      1.6
++" Version:      1.9
+ 
+ " Contributors:
+ "   Stefano Zacchiroli
+ "   A. S. Budden
++"   Myk Taylor
++"   Ingo Karkat
+ 
+ " For version 5.x: Clear all syntax items.
+ " For version 6.x: Quit when a syntax file was already loaded.
+@@ -18,11 +20,14 @@
+   finish
+ endif
+ 
+-syn region svnRegion    start="^--.*--$" end="\%$" contains=ALL contains=@NoSpell
++syn region svnText      start="\%^" end="^--.*--$"me=s-1 contains=@Spell
++
++syn region svnRegion    start="^--.*--$" end="\%$" contains=ALL
+ syn match svnRemoved    "^D    .*$" contained
+-syn match svnAdded      "^A[ M]   .*$" contained
+-syn match svnModified   "^M[ M]   .*$" contained
+-syn match svnProperty   "^_M   .*$" contained
++syn match svnRenamed    "^R[ M][ U][ +] .*$" contained
++syn match svnAdded      "^A[ M][ U][ +] .*$" contained
++syn match svnModified   "^M[ M][ U]  .*$" contained
++syn match svnProperty   "^_M[ U]  .*$" contained
+ 
+ " Synchronization.
+ syn sync clear
+@@ -44,6 +49,7 @@
+   HiLink svnAdded       Identifier
+   HiLink svnModified    Special
+   HiLink svnProperty    Special
++  HiLink svnRenamed     Special
+ 
+   delcommand HiLink
+ endif
+diff -Naur vim73.orig/runtime/syntax/synload.vim vim73/runtime/syntax/synload.vim
+--- vim73.orig/runtime/syntax/synload.vim	2010-08-08 13:25:06.000000000 +0000
++++ vim73/runtime/syntax/synload.vim	2013-06-07 17:07:26.772265563 +0000
+@@ -1,6 +1,6 @@
+ " Vim syntax support file
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2010 Aug 08
++" Last Change:	2012 Sep 25
+ 
+ " This file sets up for syntax highlighting.
+ " It is loaded from "syntax.vim" and "manual.vim".
+@@ -46,6 +46,8 @@
+       echohl None
+     endif
+     let s = &filetype
++  elseif s == "OFF"
++    let s = ""
+   endif
+ 
+   if s != ""
+@@ -59,7 +61,7 @@
+ 
+ 
+ " Handle adding doxygen to other languages (C, C++, C#, IDL)
+-au Syntax c,cpp,cs,idl
++au Syntax c,cpp,cs,idl,php
+ 	\ if (exists('b:load_doxygen_syntax') && b:load_doxygen_syntax)
+ 	\	|| (exists('g:load_doxygen_syntax') && g:load_doxygen_syntax)
+ 	\   | runtime! syntax/doxygen.vim
+diff -Naur vim73.orig/runtime/syntax/sysctl.vim vim73/runtime/syntax/sysctl.vim
+--- vim73.orig/runtime/syntax/sysctl.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/sysctl.vim	2013-06-07 17:07:26.798932154 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:         sysctl.conf(5) configuration file
+ " Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2006-04-19
++" Latest Revision:  2011-05-02
+ 
+ if exists("b:current_syntax")
+   finish
+@@ -13,7 +13,7 @@
+ syn match   sysctlBegin   display '^'
+                           \ nextgroup=sysctlToken,sysctlComment skipwhite
+ 
+-syn match   sysctlToken   contained display '\S\+'
++syn match   sysctlToken   contained display '[^=]\+'
+                           \ nextgroup=sysctlTokenEq skipwhite
+ 
+ syn match   sysctlTokenEq contained display '=' nextgroup=sysctlValue skipwhite
+diff -Naur vim73.orig/runtime/syntax/taskdata.vim vim73/runtime/syntax/taskdata.vim
+--- vim73.orig/runtime/syntax/taskdata.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/taskdata.vim	2013-06-07 17:07:26.885598573 +0000
+@@ -11,6 +11,8 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " Key Names for values.
+ syn keyword taskdataKey		description due end entry imask mask parent
+@@ -40,4 +42,7 @@
+ 
+ let b:current_syntax = "taskdata"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:noexpandtab
+diff -Naur vim73.orig/runtime/syntax/taskedit.vim vim73/runtime/syntax/taskedit.vim
+--- vim73.orig/runtime/syntax/taskedit.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/taskedit.vim	2013-06-07 17:07:26.905598516 +0000
+@@ -11,6 +11,8 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ syn match taskeditHeading	"^\s*#\s*Name\s\+Editable details\s*$" contained
+ syn match taskeditHeading	"^\s*#\s*-\+\s\+-\+\s*$" contained
+@@ -32,4 +34,7 @@
+ 
+ let b:current_syntax = "taskedit"
+ 
++let &cpo = s:keepcpo
++unlet s:keepcpo
++
+ " vim:noexpandtab
+diff -Naur vim73.orig/runtime/syntax/tasm.vim vim73/runtime/syntax/tasm.vim
+--- vim73.orig/runtime/syntax/tasm.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/tasm.vim	2013-06-07 17:07:26.908931840 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language: TASM: turbo assembler by Borland
+ " Maintaner: FooLman of United Force <foolman@bigfoot.com>
+-" Last change: 22 aug 2000
++" Last Change: 2012 Feb 03 by Thilo Six
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,6 +11,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn case ignore
+ syn match tasmLabel "^[\ \t]*[@a-z_$][a-z0-9_$@]*\ *:"
+ syn keyword tasmDirective ALIAS ALIGN ARG ASSUME %BIN CATSRT CODESEG
+@@ -120,3 +123,6 @@
+ endif
+ 
+ let b:curret_syntax = "tasm"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/tex.vim vim73/runtime/syntax/tex.vim
+--- vim73.orig/runtime/syntax/tex.vim	2010-08-13 11:58:36.000000000 +0000
++++ vim73/runtime/syntax/tex.vim	2013-06-07 17:07:26.965598344 +0000
+@@ -1,9 +1,9 @@
+ " Vim syntax file
+ " Language:	TeX
+-" Maintainer:	Dr. Charles E. Campbell, Jr. <NdrchipO@ScampbellPfamily.AbizM>
+-" Last Change:	Aug 12, 2010 
+-" Version:	57
+-" URL:		http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
++" Maintainer:	Charles E. Campbell <NdrchipO@ScampbellPfamily.AbizM>
++" Last Change:	Mar 11, 2013
++" Version:	78
++" URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_TEX
+ "
+ " Notes: {{{1
+ "
+@@ -37,6 +37,8 @@
+ elseif exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ scriptencoding utf-8
+ 
+ " Define the default highlighting. {{{1
+@@ -50,14 +52,29 @@
+   command -nargs=+ HiLink hi def link <args>
+  endif
+ endif
+-if exists("g:tex_tex") && !exists("g:tex_no_error")
+- let g:tex_no_error= 1
++if exists("g:tex_no_error") && g:tex_no_error
++ let s:tex_no_error= 1
++endif
++
++" by default, enable all region-based highlighting
++let s:tex_fast= "bcmMprsSvV"
++if exists("g:tex_fast")
++ if type(g:tex_fast) != 1
++  " g:tex_fast exists and is not a string, so
++  " turn off all optional region-based highighting
++  let s:tex_fast= ""
++ else
++  let s:tex_fast= g:tex_fast
++ endif
++ let s:tex_no_error= 1
++else
++ let s:tex_fast= "bcmMprsSvV"
+ endif
+ 
+ " let user determine which classes of concealment will be supported
+ "   a=accents/ligatures d=delimiters m=math symbols  g=Greek  s=superscripts/subscripts
+ if !exists("g:tex_conceal")
+- let s:tex_conceal= 'admgs'
++ let s:tex_conceal= 'abdmgs'
+ else
+  let s:tex_conceal= g:tex_conceal
+ endif
+@@ -67,11 +84,11 @@
+ "   g:tex_stylish to 1      (for    "*.sty" mode)
+ "    or to           0 else (normal "*.tex" mode)
+ " or on a buffer-by-buffer basis with b:tex_stylish
+-let b:extfname=expand("%:e")
++let s:extfname=expand("%:e")
+ if exists("g:tex_stylish")
+  let b:tex_stylish= g:tex_stylish
+ elseif !exists("b:tex_stylish")
+- if b:extfname == "sty" || b:extfname == "cls" || b:extfname == "clo" || b:extfname == "dtx" || b:extfname == "ltx"
++ if s:extfname == "sty" || s:extfname == "cls" || s:extfname == "clo" || s:extfname == "dtx" || s:extfname == "ltx"
+   let b:tex_stylish= 1
+  else
+   let b:tex_stylish= 0
+@@ -89,30 +106,40 @@
+  setl fdm=syntax
+ endif
+ 
+-" (La)TeX keywords: only use the letters a-zA-Z {{{1
++" (La)TeX keywords: uses the characters 0-9,a-z,A-Z,192-255 only... {{{1
+ " but _ is the only one that causes problems.
+-if version < 600
+-  set isk-=_
+-  if b:tex_stylish
+-    set isk+=@
+-  endif
++" One may override this iskeyword setting by providing
++" g:tex_isk
++if exists("g:tex_isk")
++ exe "setlocal isk=".g:tex_isk
+ else
+-  setlocal isk-=_
+-  if b:tex_stylish
+-    setlocal isk+=@
+-  endif
++ setlocal isk=48-57,a-z,A-Z,192-255
++endif
++if b:tex_stylish
++  setlocal isk+=@-@
++endif
++if exists("g:tex_nospell") && g:tex_nospell && !exists("g:tex_comment_nospell")
++ let g:tex_comment_nospell= 1
+ endif
+ 
+ " Clusters: {{{1
+ " --------
+-syn cluster texCmdGroup		contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSectionMarker,texSectionName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
+-if !exists("g:tex_no_error")
++syn cluster texCmdGroup		contains=texCmdBody,texComment,texDefParm,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texBeginEnd,texBeginEndName,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle
++if !exists("s:tex_no_error")
+  syn cluster texCmdGroup	add=texMathError
+ endif
+ syn cluster texEnvGroup		contains=texMatcher,texMathDelim,texSpecialChar,texStatement
+-syn cluster texFoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texSectionMarker,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract
+-syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
+-syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
++syn cluster texFoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texItalStyle,texNoSpell
++syn cluster texBoldGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texBoldStyle,texBoldItalStyle,texNoSpell
++syn cluster texItalGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texInputFile,texLength,texLigature,texMatcher,texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ,texNewCmd,texNewEnv,texOnlyMath,texOption,texParen,texRefZone,texSection,texBeginEnd,texSectionZone,texSpaceCode,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,@texMathZones,texTitle,texAbstract,texItalStyle,texItalBoldStyle,texNoSpell
++if !exists("g:tex_nospell") || !g:tex_nospell
++ syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,@Spell
++ syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,@Spell,texStyleMatcher
++else
++ syn cluster texMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
++ syn cluster texStyleGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption,texStyleStatement,texStyleMatcher
++endif
++syn cluster texPreambleMatchGroup	contains=texAccent,texBadMath,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMatcher,texNewCmd,texNewEnv,texOnlyMath,texParen,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone,texInputFile,texOption
+ syn cluster texRefGroup		contains=texMatcher,texComment,texDelimiter
+ if !exists("tex_no_math")
+  syn cluster texMathZones	contains=texMathZoneV,texMathZoneW,texMathZoneX,texMathZoneY,texMathZoneZ
+@@ -120,7 +147,7 @@
+  syn cluster texMathDelimGroup	contains=texMathDelimBad,texMathDelimKey,texMathDelimSet1,texMathDelimSet2
+  syn cluster texMathMatchGroup	contains=@texMathZones,texComment,texDefCmd,texDelimiter,texDocType,texInput,texLength,texLigature,texMathDelim,texMathMatcher,texMathOper,texNewCmd,texNewEnv,texRefZone,texSection,texSpecialChar,texStatement,texString,texTypeSize,texTypeStyle,texZone
+  syn cluster texMathZoneGroup	contains=texComment,texDelimiter,texLength,texMathDelim,texMathMatcher,texMathOper,texMathSymbol,texMathText,texRefZone,texSpecialChar,texStatement,texTypeSize,texTypeStyle
+- if !exists("g:tex_no_error")
++ if !exists("s:tex_no_error")
+   syn cluster texMathMatchGroup	add=texMathError
+   syn cluster texMathZoneGroup	add=texMathError
+  endif
+@@ -141,22 +168,30 @@
+ endif
+ 
+ " Try to flag {} and () mismatches: {{{1
+-if !exists("g:tex_no_error")
+- syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup,texError
+- syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup,texError
+-else
+- syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup
+- syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup
++if s:tex_fast =~ 'm'
++  if !exists("s:tex_no_error")
++   syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup,texError
++   syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup,texError,@NoSpell
++  else
++   syn region texMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texMatchGroup
++   syn region texMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texMatchGroup
++  endif
++  if !exists("g:tex_nospell") || !g:tex_nospell
++   syn region texParen		start="("						end=")"		contains=@texMatchGroup,@Spell
++  else
++   syn region texParen		start="("						end=")"		contains=@texMatchGroup
++  endif
+ endif
+-syn region texParen		start="("						end=")"		contains=@texMatchGroup,@Spell
+-if !exists("g:tex_no_error")
++if !exists("s:tex_no_error")
+  syn match  texError		"[}\])]"
+ endif
+-if !exists("tex_no_math")
+- if !exists("g:tex_no_error")
+-  syn match  texMathError	"}"	contained
+- endif
+- syn region texMathMatcher	matchgroup=Delimiter start="{"  skip="\\\\\|\\}"  end="}" end="%stopzone\>" contained contains=@texMathMatchGroup
++if s:tex_fast =~ 'M'
++  if !exists("tex_no_math")
++   if !exists("s:tex_no_error")
++    syn match  texMathError	"}"	contained
++   endif
++   syn region texMathMatcher	matchgroup=Delimiter	start="{"          skip="\\\\\|\\}"     end="}" end="%stopzone\>"	contained contains=@texMathMatchGroup
++  endif
+ endif
+ 
+ " TeX/LaTeX keywords: {{{1
+@@ -166,7 +201,7 @@
+   syn match texStatement	"\\[a-zA-Z@]\+"
+ else
+   syn match texStatement	"\\\a\+"
+-  if !exists("g:tex_no_error")
++  if !exists("s:tex_no_error")
+    syn match texError		"\\\a*@[a-zA-Z@]*"
+   endif
+ endif
+@@ -174,9 +209,10 @@
+ " TeX/LaTeX delimiters: {{{1
+ syn match texDelimiter		"&"
+ syn match texDelimiter		"\\\\"
++syn match texDelimiter		"[{}]"
+ 
+ " Tex/Latex Options: {{{1
+-syn match texOption	"[^\\]\zs#\d\+\|^#\d\+"
++syn match texOption		"[^\\]\zs#\d\+\|^#\d\+"
+ 
+ " texAccent (tnx to Karim Belabas) avoids annoying highlighting for accents: {{{1
+ if b:tex_stylish
+@@ -192,17 +228,21 @@
+ syn match texLigature		"\\\([ijolL]\|ae\|oe\|ss\|AA\|AE\|OE\)$"
+ 
+ " \begin{}/\end{} section markers: {{{1
+-syn match  texSectionMarker	"\\begin\>\|\\end\>" nextgroup=texSectionName
+-syn region texSectionName	matchgroup=Delimiter start="{" end="}"  contained	nextgroup=texSectionModifier	contains=texComment
+-syn region texSectionModifier	matchgroup=Delimiter start="\[" end="]" contained	contains=texComment
++syn match  texBeginEnd		"\\begin\>\|\\end\>" nextgroup=texBeginEndName
++if s:tex_fast =~ 'm'
++  syn region texBeginEndName	matchgroup=Delimiter	start="{"		end="}"	contained	nextgroup=texBeginEndModifier	contains=texComment
++  syn region texBeginEndModifier	matchgroup=Delimiter	start="\["		end="]"	contained	contains=texComment,@NoSpell
++endif
+ 
+ " \documentclass, \documentstyle, \usepackage: {{{1
+-syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texSectionName,texDocTypeArgs
+-syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texSectionName	contains=texComment
++syn match  texDocType		"\\documentclass\>\|\\documentstyle\>\|\\usepackage\>"	nextgroup=texBeginEndName,texDocTypeArgs
++if s:tex_fast =~ 'm'
++  syn region texDocTypeArgs	matchgroup=Delimiter start="\[" end="]"			contained	nextgroup=texBeginEndName	contains=texComment,@NoSpell
++endif
+ 
+ " Preamble syntax-based folding support: {{{1
+ if g:tex_fold_enabled && has("folding")
+- syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texMatchGroup
++ syn region texPreamble	transparent fold	start='\zs\\documentclass\>' end='\ze\\begin{document}'	contains=texStyle,@texPreambleMatchGroup
+ endif
+ 
+ " TeX input: {{{1
+@@ -210,7 +250,9 @@
+ syn match texInputFile		"\\include\(graphics\|list\)\=\(\[.\{-}\]\)\=\s*{.\{-}}"	contains=texStatement,texInputCurlies,texInputFileOpt
+ syn match texInputFile		"\\\(epsfig\|input\|usepackage\)\s*\(\[.*\]\)\={.\{-}}"		contains=texStatement,texInputCurlies,texInputFileOpt
+ syn match texInputCurlies	"[{}]"								contained
+-syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
++if s:tex_fast =~ 'm'
++ syn region texInputFileOpt	matchgroup=Delimiter start="\[" end="\]"			contained	contains=texComment
++endif
+ 
+ " Type Styles (LaTeX 2.09): {{{1
+ syn match texTypeStyle		"\\rm\>"
+@@ -223,8 +265,10 @@
+ syn match texTypeStyle		"\\tt\>"
+ 
+ " Type Styles: attributes, commands, families, etc (LaTeX2E): {{{1
+-syn match texTypeStyle		"\\textbf\>"
+-syn match texTypeStyle		"\\textit\>"
++if s:tex_conceal !~ 'b'
++ syn match texTypeStyle		"\\textbf\>"
++ syn match texTypeStyle		"\\textit\>"
++endif
+ syn match texTypeStyle		"\\textmd\>"
+ syn match texTypeStyle		"\\textrm\>"
+ syn match texTypeStyle		"\\textsc\>"
+@@ -274,32 +318,70 @@
+ syn match texSpaceCodeChar    "`\\\=.\(\^.\)\==\(\d\|\"\x\{1,6}\|`.\)"	contained
+ 
+ " Sections, subsections, etc: {{{1
+-if g:tex_fold_enabled && has("folding")
+- syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup,@Spell
+- syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup,@Spell
+- syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup,@Spell
+- syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup,@Spell
+- syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
+- syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+- syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup,@Spell
+- syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup,@Spell
+- syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup,@Spell
+- syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup,@Spell
+-else
+- syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
+- syn region texPartZone			matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
+- syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
+- syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
+- syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
+- syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
+- syn region texParaZone			matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup,@Spell
+- syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup,@Spell
+- syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
+- syn region texAbstract			matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
++if s:tex_fast =~ 'p'
++  if !exists("g:tex_nospell") || !g:tex_nospell
++   if g:tex_fold_enabled && has("folding")
++    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup,@Spell
++    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup,@Spell
++    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup,@Spell
++    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup,@Spell
++    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup,@Spell
++    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
++    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup,@Spell
++    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup,@Spell
++    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup,@Spell
++    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup,@Spell
++   else
++    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup,@Spell
++    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup,@Spell
++    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup,@Spell
++    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup,@Spell
++    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup,@Spell
++    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup,@Spell
++    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup,@Spell
++    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup,@Spell
++    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup,@Spell
++    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup,@Spell
++   endif
++  else
++   if g:tex_fold_enabled && has("folding")
++    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											fold contains=@texFoldGroup,@texDocGroup
++    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								fold contains=@texFoldGroup,@texPartGroup
++    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							fold contains=@texFoldGroup,@texChapterGroup
++    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					fold contains=@texFoldGroup,@texSectionGroup
++    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSectionGroup
++    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				fold contains=@texFoldGroup,@texSubSubSectionGroup
++    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			fold contains=@texFoldGroup,@texParaGroup
++    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	fold contains=@texFoldGroup
++    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													fold contains=@texFoldGroup
++    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											fold contains=@texFoldGroup
++   else
++    syn region texDocZone			matchgroup=texSection start='\\begin\s*{\s*document\s*}' end='\\end\s*{\s*document\s*}'											contains=@texFoldGroup,@texDocGroup
++    syn region texPartZone		matchgroup=texSection start='\\part\>'			 end='\ze\s*\\\%(part\>\|end\s*{\s*document\s*}\)'								contains=@texFoldGroup,@texPartGroup
++    syn region texChapterZone		matchgroup=texSection start='\\chapter\>'		 end='\ze\s*\\\%(chapter\>\|part\>\|end\s*{\s*document\s*}\)'							contains=@texFoldGroup,@texChapterGroup
++    syn region texSectionZone		matchgroup=texSection start='\\section\>'		 end='\ze\s*\\\%(section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'					contains=@texFoldGroup,@texSectionGroup
++    syn region texSubSectionZone		matchgroup=texSection start='\\subsection\>'		 end='\ze\s*\\\%(\%(sub\)\=section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSectionGroup
++    syn region texSubSubSectionZone	matchgroup=texSection start='\\subsubsection\>'		 end='\ze\s*\\\%(\%(sub\)\{,2}section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'				contains=@texFoldGroup,@texSubSubSectionGroup
++    syn region texParaZone		matchgroup=texSection start='\\paragraph\>'		 end='\ze\s*\\\%(paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'			contains=@texFoldGroup,@texParaGroup
++    syn region texSubParaZone		matchgroup=texSection start='\\subparagraph\>'		 end='\ze\s*\\\%(\%(sub\)\=paragraph\>\|\%(sub\)*section\>\|chapter\>\|part\>\|end\s*{\s*document\s*}\)'	contains=@texFoldGroup
++    syn region texTitle			matchgroup=texSection start='\\\%(author\|title\)\>\s*{' end='}'													contains=@texFoldGroup
++    syn region texAbstract		matchgroup=texSection start='\\begin\s*{\s*abstract\s*}' end='\\end\s*{\s*abstract\s*}'											contains=@texFoldGroup
++   endif
++  endif
++endif
++
++" particular support for bold and italic {{{1
++if s:tex_fast =~ 'b'
++  if s:tex_conceal =~ 'b'
++   syn region texBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
++   syn region texBoldItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
++   syn region texItalStyle	matchgroup=texTypeStyle start="\\textit\s*{" end="}" concealends contains=@texItalGroup
++   syn region texItalBoldStyle	matchgroup=texTypeStyle start="\\textbf\s*{" end="}" concealends contains=@texBoldGroup
++  endif
+ endif
+ 
+ " Bad Math (mismatched): {{{1
+-if !exists("tex_no_math")
++if !exists("g:tex_no_math") && !exists("s:tex_no_error")
+  syn match texBadMath		"\\end\s*{\s*\(array\|gathered\|bBpvV]matrix\|split\|subequations\|smallmatrix\|xxalignat\)\s*}"
+  syn match texBadMath		"\\end\s*{\s*\(align\|alignat\|displaymath\|displaymath\|eqnarray\|equation\|flalign\|gather\|math\|multline\|xalignat\)\*\=\s*}"
+  syn match texBadMath		"\\[\])]"
+@@ -320,17 +402,21 @@
+     let foldcmd= ""
+    endif
+    exe "syn cluster texMathZones add=".grpname
+-   exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
+-   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+-   exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
++   if s:tex_fast =~ 'M'
++    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
++    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
++    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
++   endif
+    exe 'hi def link '.grpname.' texMath'
+    if a:starform
+     let grpname  = "texMathZone".a:sfx.'S'
+     let syncname = "texSyncMathZone".a:sfx.'S'
+     exe "syn cluster texMathZones add=".grpname
+-    exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
+-    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
+-    exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
++    if s:tex_fast =~ 'M'
++     exe 'syn region '.grpname.' start='."'".'\\begin\s*{\s*'.a:mathzone.'\*\s*}'."'".' end='."'".'\\end\s*{\s*'.a:mathzone.'\*\s*}'."'".' keepend contains=@texMathZoneGroup'.foldcmd
++     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
++     exe 'syn sync match '.syncname.' grouphere '.grpname.' "\\begin\s*{\s*'.a:mathzone.'\*\s*}"'
++    endif
+     exe 'hi def link '.grpname.' texMath'
+    endif
+  endfun
+@@ -350,42 +436,85 @@
+  call TexNewMathZone("L","xxalignat",0)
+ 
+  " Inline Math Zones: {{{2
+- if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
+-  syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
+-  syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
+-  syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"		concealends contains=@texMathZoneGroup
+-  syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	concealends keepend		contains=@texMathZoneGroup
+- else
+-  syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend contains=@texMathZoneGroup
+-  syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend contains=@texMathZoneGroup
+-  syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"	contains=@texMathZoneGroup
+-  syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	keepend		contains=@texMathZoneGroup
++ if s:tex_fast =~ 'M'
++  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'd'
++   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
++   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend concealends contains=@texMathZoneGroup
++   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"		concealends contains=@texMathZoneGroup
++   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	concealends keepend		contains=@texMathZoneGroup
++  else
++   syn region texMathZoneV	matchgroup=Delimiter start="\\("			matchgroup=Delimiter end="\\)\|%stopzone\>"	keepend contains=@texMathZoneGroup
++   syn region texMathZoneW	matchgroup=Delimiter start="\\\["			matchgroup=Delimiter end="\\]\|%stopzone\>"	keepend contains=@texMathZoneGroup
++   syn region texMathZoneX	matchgroup=Delimiter start="\$" skip="\\\\\|\\\$"	matchgroup=Delimiter end="\$" end="%stopzone\>"	contains=@texMathZoneGroup
++   syn region texMathZoneY	matchgroup=Delimiter start="\$\$" 			matchgroup=Delimiter end="\$\$" end="%stopzone\>"	keepend		contains=@texMathZoneGroup
++  endif
++  syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement end="}" end="%stopzone\>"	contains=@texMathZoneGroup
+  endif
+- syn region texMathZoneZ	matchgroup=texStatement start="\\ensuremath\s*{"	matchgroup=texStatement end="}" end="%stopzone\>"	contains=@texMathZoneGroup
+ 
+  syn match texMathOper		"[_^=]" contained
+ 
+  " Text Inside Math Zones: {{{2
+- syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
++ if s:tex_fast =~ 'M'
++  if !exists("g:tex_nospell") || !g:tex_nospell
++   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup,@Spell
++  else
++   syn region texMathText matchgroup=texStatement start='\\\(\(inter\)\=text\|mbox\)\s*{'	end='}'	contains=@texFoldGroup
++  endif
++ endif
+ 
+  " \left..something.. and \right..something.. support: {{{2
+  syn match   texMathDelimBad	contained		"\S"
+  if has("conceal") && &enc == 'utf-8' && s:tex_conceal =~ 'm'
+   syn match   texMathDelim	contained		"\\left\\{\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar={
+   syn match   texMathDelim	contained		"\\right\\}\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad contains=texMathSymbol cchar=}
++  let s:texMathDelimList=[
++     \ ['<'            , '<'] ,
++     \ ['>'            , '>'] ,
++     \ ['('            , '('] ,
++     \ [')'            , ')'] ,
++     \ ['\['           , '['] ,
++     \ [']'            , ']'] ,
++     \ ['\\{'          , '{'] ,
++     \ ['\\}'          , '}'] ,
++     \ ['|'            , '|'] ,
++     \ ['\\|'          , 'â'] ,
++     \ ['\\backslash'  , '\'] ,
++     \ ['\\downarrow'  , 'â'] ,
++     \ ['\\Downarrow'  , 'â'] ,
++     \ ['\\langle'     , '<'] ,
++     \ ['\\lbrace'     , '['] ,
++     \ ['\\lceil'      , 'â'] ,
++     \ ['\\lfloor'     , 'â'] ,
++     \ ['\\lgroup'     , 'â'] ,
++     \ ['\\lmoustache' , 'â'] ,
++     \ ['\\rangle'     , '>'] ,
++     \ ['\\rbrace'     , ']'] ,
++     \ ['\\rceil'      , 'â'] ,
++     \ ['\\rfloor'     , 'â'] ,
++     \ ['\\rgroup'     , 'â'] ,
++     \ ['\\rmoustache' , 'â'] ,
++     \ ['\\uparrow'    , 'â'] ,
++     \ ['\\Uparrow'    , 'â'] ,
++     \ ['\\updownarrow', 'â'] ,
++     \ ['\\Updownarrow', 'â']]
++  syn match texMathDelim	'\\[bB]igg\=[lr]' contained nextgroup=texMathDelimBad
++  for texmath in s:texMathDelimList
++   exe "syn match texMathDelim	'\\\\[bB]igg\\=[lr]\\=".texmath[0]."'	contained conceal cchar=".texmath[1]
++  endfor
++
+  else
+   syn match   texMathDelim	contained		"\\\(left\|right\)\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
++  syn match   texMathDelim	contained		"\\[bB]igg\=[lr]\=\>"	skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
++  syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
++  syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
++  syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
++  syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
++  syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
++  syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
++  syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
+  endif
+- syn match   texMathDelim	contained		"\\\([bB]igg\=[lr]\)\>"			skipwhite nextgroup=texMathDelimSet1,texMathDelimSet2,texMathDelimBad
+  syn match   texMathDelim	contained		"\\\(left\|right\)arrow\>\|\<\([aA]rrow\|brace\)\=vert\>"
+  syn match   texMathDelim	contained		"\\lefteqn\>"
+- syn match   texMathDelimSet2	contained	"\\"		nextgroup=texMathDelimKey,texMathDelimBad
+- syn match   texMathDelimSet1	contained	"[<>()[\]|/.]\|\\[{}|]"
+- syn keyword texMathDelimKey	contained	backslash       lceil           lVert           rgroup          uparrow
+- syn keyword texMathDelimKey	contained	downarrow       lfloor          rangle          rmoustache      Uparrow
+- syn keyword texMathDelimKey	contained	Downarrow       lgroup          rbrace          rvert           updownarrow
+- syn keyword texMathDelimKey	contained	langle          lmoustache      rceil           rVert           Updownarrow
+- syn keyword texMathDelimKey	contained	lbrace          lvert           rfloor
+ endif
+ 
+ " Special TeX characters  ( \$ \& \% \# \{ \} \_ \S \P ) : {{{1
+@@ -412,81 +541,85 @@
+ syn case ignore
+ syn keyword texTodo		contained		combak	fixme	todo	xxx
+ syn case match
+-if b:extfname == "dtx"
++if s:extfname == "dtx"
+   syn match texComment		"\^\^A.*$"	contains=@texCommentGroup
+   syn match texComment		"^%\+"		contains=@texCommentGroup
+ else
+   if g:tex_fold_enabled
+    " allows syntax-folding of 2 or more contiguous comment lines
+    " single-line comments are not folded
+-   syn match  texComment	"%.*$"		contains=@texCommentGroup
+-   syn region texComment	start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]' fold
++   syn match  texComment	"%.*$"			contains=@texCommentGroup
++   if s:tex_fast =~ 'c'
++    syn region texComment	start="^\zs\s*%.*\_s*%"	skip="^\s*%"	end='^\ze\s*[^%]' fold
++    syn region texNoSpell	contained fold		matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
++   endif
+   else
+-   syn match texComment		"%.*$"		contains=@texCommentGroup
++   syn match texComment		"%.*$"			contains=@texCommentGroup
++   if s:tex_fast =~ 'c'
++    syn region texNoSpell	contained		matchgroup=texComment start="%\s*nospell\s*{"	end="%\s*nospell\s*}"	contains=@texFoldGroup,@NoSpell
++   endif
+   endif
+ endif
+ 
+ " Separate lines used for verb` and verb# so that the end conditions {{{1
+ " will appropriately terminate.
+ " If g:tex_verbspell exists, then verbatim texZones will permit spellchecking there.
+-if exists("g:tex_verbspell") && g:tex_verbspell
+- syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
+- " listings package:
+- syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
+- " moreverb package:
+- syn region texZone		start="\\begin{verbatimtab}"		end="\\end{verbatimtab}\|%stopzone\>"	contains=@Spell
+- syn region texZone		start="\\begin{verbatimwrite}"		end="\\end{verbatimwrite}\|%stopzone\>"	contains=@Spell
+- syn region texZone		start="\\begin{boxedverbatim}"		end="\\end{boxedverbatim}\|%stopzone\>"	contains=@Spell
+- if version < 600
+-  syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"			contains=@Spell
+-  syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"			contains=@Spell
+- else
+-   if b:tex_stylish
+-    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
++if s:tex_fast =~ 'v'
++  if exists("g:tex_verbspell") && g:tex_verbspell
++   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"	contains=@Spell
++   " listings package:
++   syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"	contains=@Spell
++   if version < 600
++    syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"			contains=@Spell
++    syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"			contains=@Spell
+    else
+-    syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
++     if b:tex_stylish
++      syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"			contains=@Spell
++     else
++      syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"			contains=@Spell
++     endif
+    endif
+- endif
+-else
+- syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
+- " listings package:
+- syn region texZone		start="\\begin{lstlisting}"		end="\\end{lstlisting}\|%stopzone\>"
+- " moreverb package:
+- syn region texZone		start="\\begin{verbatimtab}"		end="\\end{verbatimtab}\|%stopzone\>"
+- syn region texZone		start="\\begin{verbatimwrite}"		end="\\end{verbatimwrite}\|%stopzone\>"
+- syn region texZone		start="\\begin{boxedverbatim}"		end="\\end{boxedverbatim}\|%stopzone\>"
+- if version < 600
+-  syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"
+-  syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"
+- else
+-   if b:tex_stylish
+-     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
++  else
++   syn region texZone		start="\\begin{[vV]erbatim}"		end="\\end{[vV]erbatim}\|%stopzone\>"
++   if version < 600
++    syn region texZone		start="\\verb\*\=`"			end="`\|%stopzone\>"
++    syn region texZone		start="\\verb\*\=#"			end="#\|%stopzone\>"
+    else
+-     syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
++     if b:tex_stylish
++       syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z@]\)"	end="\z1\|%stopzone\>"
++     else
++       syn region texZone		start="\\verb\*\=\z([^\ta-zA-Z]\)"	end="\z1\|%stopzone\>"
++     endif
+    endif
+- endif
++  endif
+ endif
+ 
+ " Tex Reference Zones: {{{1
+-syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
+-syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
+-syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
+-syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
+-syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
+-syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
++if s:tex_fast =~ 'r'
++  syn region texZone		matchgroup=texStatement start="@samp{"			end="}\|%stopzone\>"	contains=@texRefGroup
++  syn region texRefZone		matchgroup=texStatement start="\\nocite{"		end="}\|%stopzone\>"	contains=@texRefGroup
++  syn region texRefZone		matchgroup=texStatement start="\\bibliography{"		end="}\|%stopzone\>"	contains=@texRefGroup
++  syn region texRefZone		matchgroup=texStatement start="\\label{"		end="}\|%stopzone\>"	contains=@texRefGroup
++  syn region texRefZone		matchgroup=texStatement start="\\\(page\|eq\)ref{"	end="}\|%stopzone\>"	contains=@texRefGroup
++  syn region texRefZone		matchgroup=texStatement start="\\v\=ref{"		end="}\|%stopzone\>"	contains=@texRefGroup
++  syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
++  syn region texCite	contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
++endif
+ syn match  texRefZone		'\\cite\%([tp]\*\=\)\=' nextgroup=texRefOption,texCite
+-syn region texRefOption	contained	matchgroup=Delimiter start='\[' end=']'		contains=@texRefGroup,texRefZone	nextgroup=texRefOption,texCite
+-syn region texCite	contained	matchgroup=Delimiter start='{' end='}'		contains=@texRefGroup,texRefZone,texCite
+ 
+ " Handle newcommand, newenvironment : {{{1
+ syn match  texNewCmd				"\\newcommand\>"			nextgroup=texCmdName skipwhite skipnl
+-syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
+-syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
+-syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
++if s:tex_fast =~ 'V'
++  syn region texCmdName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texCmdArgs,texCmdBody skipwhite skipnl
++  syn region texCmdArgs contained matchgroup=Delimiter start="\["rs=s+1 end="]"		nextgroup=texCmdBody skipwhite skipnl
++  syn region texCmdBody contained matchgroup=Delimiter start="{"rs=s+1 skip="\\\\\|\\[{}]"	matchgroup=Delimiter end="}" contains=@texCmdGroup
++endif
+ syn match  texNewEnv				"\\newenvironment\>"			nextgroup=texEnvName skipwhite skipnl
+-syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
+-syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
+-syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
++if s:tex_fast =~ 'V'
++  syn region texEnvName contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvBgn skipwhite skipnl
++  syn region texEnvBgn  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		nextgroup=texEnvEnd skipwhite skipnl contains=@texEnvGroup
++  syn region texEnvEnd  contained matchgroup=Delimiter start="{"rs=s+1  end="}"		skipwhite skipnl contains=@texEnvGroup
++endif
+ 
+ " Definitions/Commands: {{{1
+ syn match texDefCmd				"\\def\>"				nextgroup=texDefName skipwhite skipnl
+@@ -507,11 +640,15 @@
+ syn match texString		"\(``\|''\|,,\)"
+ 
+ " makeatletter -- makeatother sections
+-if !exists("g:tex_no_error")
+- syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
++if !exists("s:tex_no_error")
++ if s:tex_fast =~ 'S'
++  syn region texStyle			matchgroup=texStatement start='\\makeatletter' end='\\makeatother'	contains=@texStyleGroup contained
++ endif
+  syn match  texStyleStatement		"\\[a-zA-Z@]\+"	contained
+- syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
+- syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
++ if s:tex_fast =~ 'S'
++  syn region texStyleMatcher		matchgroup=Delimiter start="{" skip="\\\\\|\\[{}]"	end="}"		contains=@texStyleGroup,texError	contained
++  syn region texStyleMatcher		matchgroup=Delimiter start="\["				end="]"		contains=@texStyleGroup,texError	contained
++ endif
+ endif
+ 
+ " Conceal mode support (supports set cole=2) {{{1
+@@ -521,30 +658,38 @@
+  " (many of these symbols were contributed by BjÃ¶rn Winckler)
+  if s:tex_conceal =~ 'm'
+   let s:texMathList=[
++    \ ['|'		, 'â'],
++    \ ['aleph'		, 'âµ'],
++    \ ['amalg'		, 'â'],
+     \ ['angle'		, 'â '],
+     \ ['approx'		, 'â'],
+     \ ['ast'		, 'â'],
+     \ ['asymp'		, 'â'],
+     \ ['backepsilon'	, 'â'],
+     \ ['backsimeq'	, 'â'],
++    \ ['backslash'	, 'â'],
+     \ ['barwedge'	, 'âŒ'],
+     \ ['because'	, 'âµ'],
+     \ ['between'	, 'â¬'],
+     \ ['bigcap'		, 'â©'],
++    \ ['bigcirc'	, 'â'],
+     \ ['bigcup'		, 'âª'],
+     \ ['bigodot'	, 'â'],
+     \ ['bigoplus'	, 'â'],
+     \ ['bigotimes'	, 'â'],
+     \ ['bigsqcup'	, 'â'],
+     \ ['bigtriangledown', 'â'],
++    \ ['bigtriangleup'	, 'â'],
+     \ ['bigvee'		, 'â'],
+     \ ['bigwedge'	, 'â'],
+     \ ['blacksquare'	, 'â'],
+     \ ['bot'		, 'â¥'],
++    \ ['bowtie'	        , 'â'],
+     \ ['boxdot'		, 'â¡'],
+     \ ['boxminus'	, 'â'],
+     \ ['boxplus'	, 'â'],
+     \ ['boxtimes'	, 'â '],
++    \ ['bullet'	        , 'â¢'],
+     \ ['bumpeq'		, 'â'],
+     \ ['Bumpeq'		, 'â'],
+     \ ['cap'		, 'â©'],
+@@ -557,29 +702,36 @@
+     \ ['circlearrowright', 'â»'],
+     \ ['circledast'	, 'â'],
+     \ ['circledcirc'	, 'â'],
++    \ ['clubsuit'	, 'â£'],
+     \ ['complement'	, 'â'],
+     \ ['cong'		, 'â
+'],
+     \ ['coprod'		, 'â'],
++    \ ['copyright'	, 'Â©'],
+     \ ['cup'		, 'âª'],
+     \ ['Cup'		, 'â'],
+     \ ['curlyeqprec'	, 'â'],
+     \ ['curlyeqsucc'	, 'â'],
+     \ ['curlyvee'	, 'â'],
+     \ ['curlywedge'	, 'â'],
++    \ ['dagger'	        , 'â '],
+     \ ['dashv'		, 'â£'],
++    \ ['ddagger'	, 'â¡'],
++    \ ['ddots'	        , 'â±'],
+     \ ['diamond'	, 'â'],
++    \ ['diamondsuit'	, 'â¢'],
+     \ ['div'		, 'Ã·'],
+     \ ['doteq'		, 'â'],
+     \ ['doteqdot'	, 'â'],
+     \ ['dotplus'	, 'â'],
++    \ ['dots'		, 'âŠ'],
+     \ ['dotsb'		, 'â¯'],
+     \ ['dotsc'		, 'âŠ'],
+-    \ ['dots'		, 'âŠ'],
+     \ ['dotsi'		, 'â¯'],
+     \ ['dotso'		, 'âŠ'],
+     \ ['doublebarwedge'	, 'â©'],
+     \ ['downarrow'	, 'â'],
+     \ ['Downarrow'	, 'â'],
++    \ ['ell'		, 'â'],
+     \ ['emptyset'	, 'â
+'],
+     \ ['eqcirc'		, 'â'],
+     \ ['eqsim'		, 'â'],
+@@ -588,52 +740,67 @@
+     \ ['equiv'		, 'â¡'],
+     \ ['exists'		, 'â'],
+     \ ['fallingdotseq'	, 'â'],
++    \ ['flat'		, 'â­'],
+     \ ['forall'		, 'â'],
++    \ ['frown'		, 'â'],
+     \ ['ge'		, 'â¥'],
+     \ ['geq'		, 'â¥'],
+     \ ['geqq'		, 'â§'],
+     \ ['gets'		, 'â'],
++    \ ['gg'		, 'â«'],
+     \ ['gneqq'		, 'â©'],
+     \ ['gtrdot'		, 'â'],
+     \ ['gtreqless'	, 'â'],
+     \ ['gtrless'	, 'â·'],
+     \ ['gtrsim'		, 'â³'],
++    \ ['hbar'		, 'â'],
++    \ ['heartsuit'	, 'â¡'],
+     \ ['hookleftarrow'	, 'â©'],
+     \ ['hookrightarrow'	, 'âª'],
+     \ ['iiint'		, 'â­'],
+     \ ['iint'		, 'â¬'],
+     \ ['Im'		, 'â'],
++    \ ['imath'		, 'É©'],
+     \ ['in'		, 'â'],
+     \ ['infty'		, 'â'],
+     \ ['int'		, 'â«'],
+     \ ['lceil'		, 'â'],
+     \ ['ldots'		, 'âŠ'],
+     \ ['le'		, 'â€'],
+-    \ ['leftarrow'	, 'âµ'],
+-    \ ['Leftarrow'	, 'âž'],
+-    \ ['leftarrowtail'	, 'â¢'],
++    \ ['leadsto'	, 'â'],
+     \ ['left('		, '('],
+     \ ['left\['		, '['],
+     \ ['left\\{'	, '{'],
++    \ ['leftarrow'	, 'âµ'],
++    \ ['Leftarrow'	, 'âž'],
++    \ ['leftarrowtail'	, 'â¢'],
++    \ ['leftharpoondown', 'âœ'],
++    \ ['leftharpoonup'	, 'âŒ'],
++    \ ['leftrightarrow'	, 'â'],
+     \ ['Leftrightarrow'	, 'â'],
+     \ ['leftrightsquigarrow', 'â­'],
+     \ ['leftthreetimes'	, 'â'],
+     \ ['leq'		, 'â€'],
++    \ ['leq'		, 'â€'],
+     \ ['leqq'		, 'âŠ'],
+     \ ['lessdot'	, 'â'],
+     \ ['lesseqgtr'	, 'â'],
+     \ ['lesssim'	, 'â²'],
+     \ ['lfloor'		, 'â'],
++    \ ['ll'		, 'âª'],
++    \ ['lmoustache'     , 'â­'],
+     \ ['lneqq'		, 'âš'],
+     \ ['ltimes'		, 'â'],
+     \ ['mapsto'		, 'âŠ'],
+     \ ['measuredangle'	, 'â¡'],
+     \ ['mid'		, 'â£'],
++    \ ['models'		, 'â'],
+     \ ['mp'		, 'â'],
+     \ ['nabla'		, 'â'],
++    \ ['natural'	, 'â®'],
+     \ ['ncong'		, 'â'],
+-    \ ['nearrow'	, 'â'],
+     \ ['ne'		, 'â '],
++    \ ['nearrow'	, 'â'],
+     \ ['neg'		, 'Â¬'],
+     \ ['neq'		, 'â '],
+     \ ['nexists'	, 'â'],
+@@ -669,35 +836,45 @@
+     \ ['oslash'		, 'â'],
+     \ ['otimes'		, 'â'],
+     \ ['owns'		, 'â'],
++    \ ['P'	        , 'Â¶'],
++    \ ['parallel'	, 'â'],
+     \ ['partial'	, 'â'],
+     \ ['perp'		, 'â¥'],
+     \ ['pitchfork'	, 'â'],
+     \ ['pm'		, 'Â±'],
+-    \ ['precapprox'	, 'âª·'],
+     \ ['prec'		, 'âº'],
++    \ ['precapprox'	, 'âª·'],
+     \ ['preccurlyeq'	, 'âŒ'],
+     \ ['preceq'		, 'âª¯'],
+     \ ['precnapprox'	, 'âª¹'],
+     \ ['precneqq'	, 'âªµ'],
+     \ ['precsim'	, 'âŸ'],
++    \ ['prime'		, 'â²'],
+     \ ['prod'		, 'â'],
+     \ ['propto'		, 'â'],
+     \ ['rceil'		, 'â'],
+     \ ['Re'		, 'â'],
+     \ ['rfloor'		, 'â'],
+-    \ ['rightarrow'	, 'â¶'],
+-    \ ['Rightarrow'	, 'â¹'],
+-    \ ['rightarrowtail'	, 'â£'],
+     \ ['right)'		, ')'],
+     \ ['right]'		, ']'],
+     \ ['right\\}'	, '}'],
++    \ ['rightarrow'	, 'â¶'],
++    \ ['Rightarrow'	, 'â¹'],
++    \ ['rightarrowtail'	, 'â£'],
++    \ ['rightleftharpoons', 'â'],
+     \ ['rightsquigarrow', 'â'],
+     \ ['rightthreetimes', 'â'],
+     \ ['risingdotseq'	, 'â'],
++    \ ['rmoustache'     , 'â®'],
+     \ ['rtimes'		, 'â'],
++    \ ['S'	        , 'Â§'],
+     \ ['searrow'	, 'â'],
+     \ ['setminus'	, 'â'],
++    \ ['sharp'		, 'â¯'],
+     \ ['sim'		, 'âŒ'],
++    \ ['simeq'		, 'â'],
++    \ ['smile'		, 'â¿'],
++    \ ['spadesuit'	, 'â '],
+     \ ['sphericalangle'	, 'â¢'],
+     \ ['sqcap'		, 'â'],
+     \ ['sqcup'		, 'â'],
+@@ -705,20 +882,22 @@
+     \ ['sqsubseteq'	, 'â'],
+     \ ['sqsupset'	, 'â'],
+     \ ['sqsupseteq'	, 'â'],
++    \ ['star'		, 'â«'],
+     \ ['subset'		, 'â'],
+     \ ['Subset'		, 'â'],
+     \ ['subseteq'	, 'â'],
+     \ ['subseteqq'	, 'â«
+'],
+     \ ['subsetneq'	, 'â'],
+     \ ['subsetneqq'	, 'â«'],
+-    \ ['succapprox'	, 'âªž'],
+     \ ['succ'		, 'â»'],
++    \ ['succapprox'	, 'âªž'],
+     \ ['succcurlyeq'	, 'âœ'],
+     \ ['succeq'		, 'âª°'],
+     \ ['succnapprox'	, 'âªº'],
+     \ ['succneqq'	, 'âª¶'],
+     \ ['succsim'	, 'â¿'],
+     \ ['sum'		, 'â'],
++    \ ['supset'		, 'â'],
+     \ ['Supset'		, 'â'],
+     \ ['supseteq'	, 'â'],
+     \ ['supseteqq'	, 'â«'],
+@@ -730,6 +909,7 @@
+     \ ['times'		, 'Ã'],
+     \ ['to'		, 'â'],
+     \ ['top'		, 'â€'],
++    \ ['triangle'	, 'â'],
+     \ ['triangleleft'	, 'â²'],
+     \ ['trianglelefteq'	, 'âŽ'],
+     \ ['triangleq'	, 'â'],
+@@ -747,13 +927,21 @@
+     \ ['vDash'		, 'âš'],
+     \ ['Vdash'		, 'â©'],
+     \ ['vdots'		, 'â®'],
+-    \ ['veebar'		, 'â»'],
+     \ ['vee'		, 'âš'],
++    \ ['veebar'		, 'â»'],
+     \ ['Vvdash'		, 'âª'],
+     \ ['wedge'		, 'â§'],
++    \ ['wp'		, 'â'],
+     \ ['wr'		, 'â']]
++"    \ ['jmath'		, 'X']
++"    \ ['uminus'	, 'X']
++"    \ ['uplus'		, 'X']
+   for texmath in s:texMathList
+-   exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
++   if texmath[0] =~ '\w$'
++    exe "syn match texMathSymbol '\\\\".texmath[0]."\\>' contained conceal cchar=".texmath[1]
++   else
++    exe "syn match texMathSymbol '\\\\".texmath[0]."' contained conceal cchar=".texmath[1]
++   endif
+   endfor
+ 
+   if &ambw == "double"
+@@ -763,6 +951,27 @@
+    syn match texMathSymbol '\\gg\>'			contained conceal cchar=â«
+    syn match texMathSymbol '\\ll\>'			contained conceal cchar=âª
+   endif
++
++  syn match texMathSymbol '\\hat{a}' contained conceal cchar=Ã¢
++  syn match texMathSymbol '\\hat{A}' contained conceal cchar=Ã
++  syn match texMathSymbol '\\hat{c}' contained conceal cchar=Ä
++  syn match texMathSymbol '\\hat{C}' contained conceal cchar=Ä
++  syn match texMathSymbol '\\hat{e}' contained conceal cchar=Ãª
++  syn match texMathSymbol '\\hat{E}' contained conceal cchar=Ã
++  syn match texMathSymbol '\\hat{g}' contained conceal cchar=Ä
++  syn match texMathSymbol '\\hat{G}' contained conceal cchar=Ä
++  syn match texMathSymbol '\\hat{i}' contained conceal cchar=Ã®
++  syn match texMathSymbol '\\hat{I}' contained conceal cchar=Ã
++  syn match texMathSymbol '\\hat{o}' contained conceal cchar=ÃŽ
++  syn match texMathSymbol '\\hat{O}' contained conceal cchar=Ã
++  syn match texMathSymbol '\\hat{s}' contained conceal cchar=Å
++  syn match texMathSymbol '\\hat{S}' contained conceal cchar=Å
++  syn match texMathSymbol '\\hat{u}' contained conceal cchar=Ã»
++  syn match texMathSymbol '\\hat{U}' contained conceal cchar=Ã
++  syn match texMathSymbol '\\hat{w}' contained conceal cchar=Åµ
++  syn match texMathSymbol '\\hat{W}' contained conceal cchar=ÅŽ
++  syn match texMathSymbol '\\hat{y}' contained conceal cchar=Å·
++  syn match texMathSymbol '\\hat{Y}' contained conceal cchar=Å¶
+  endif
+ 
+  " Greek {{{2
+@@ -814,8 +1023,10 @@
+ 
+  " Superscripts/Subscripts {{{2
+  if s:tex_conceal =~ 's'
+-  syn region texSuperscript	matchgroup=Delimiter start='\^{'	end='}'	contained concealends contains=texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
+-  syn region texSubscript	matchgroup=Delimiter start='_{'		end='}'	contained concealends contains=texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
++  if s:tex_fast =~ 's'
++   syn region texSuperscript	matchgroup=Delimiter start='\^{'	skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSuperscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
++   syn region texSubscript	matchgroup=Delimiter start='_{'		skip="\\\\\|\\[{}]" end='}'	contained concealends contains=texSpecialChar,texSubscripts,texStatement,texSubscript,texSuperscript,texMathMatcher
++  endif
+   fun! s:SuperSub(group,leader,pat,cchar)
+     exe 'syn match '.a:group." '".a:leader.a:pat."' contained conceal cchar=".a:cchar
+     exe 'syn match '.a:group."s '".a:pat."' contained conceal cchar=".a:cchar.' nextgroup='.a:group.'s'
+@@ -873,6 +1084,9 @@
+   call s:SuperSub('texSuperscript','\^','T','áµ')
+   call s:SuperSub('texSuperscript','\^','U','áµ')
+   call s:SuperSub('texSuperscript','\^','W','áµ')
++  call s:SuperSub('texSuperscript','\^',',','ïž')
++  call s:SuperSub('texSuperscript','\^',':','ïž')
++  call s:SuperSub('texSuperscript','\^',';','ïž')
+   call s:SuperSub('texSuperscript','\^','+','âº')
+   call s:SuperSub('texSuperscript','\^','-','â»')
+   call s:SuperSub('texSuperscript','\^','<','Ë')
+@@ -897,6 +1111,7 @@
+   call s:SuperSub('texSubscript','_','i','áµ¢')
+   call s:SuperSub('texSubscript','_','o','â')
+   call s:SuperSub('texSubscript','_','u','áµ€')
++  call s:SuperSub('texSubscript','_',',','ïž')
+   call s:SuperSub('texSubscript','_','+','â')
+   call s:SuperSub('texSubscript','_','-','â')
+   call s:SuperSub('texSubscript','_','/','Ë')
+@@ -939,18 +1154,23 @@
+      endfor
+    endfun
+    "                  \`  \'  \^  \"  \~  \.  \c  \H  \k  \r  \u  \v
+-   call s:Accents('a','Ã ','Ã¡','Ã¢','Ã€','Ã£',' ',' ',' ','Ä
+','Ã¥','Ä','Ä')
+-   call s:Accents('A','Ã','Ã','Ã','Ã','Ã',' ',' ',' ','Ä','Ã
+','Ä','Ä')
++   call s:Accents('a','Ã ','Ã¡','Ã¢','Ã€','Ã£','È§',' ',' ','Ä
+','Ã¥','Ä','Ä')
++   call s:Accents('A','Ã','Ã','Ã','Ã','Ã','ÈŠ',' ',' ','Ä','Ã
+','Ä','Ä')
+    call s:Accents('c',' ','Ä','Ä',' ',' ','Ä','Ã§',' ',' ',' ',' ','Ä')
+    call s:Accents('C',' ','Ä','Ä',' ',' ','Ä','Ã',' ',' ',' ',' ','Ä')
+    call s:Accents('d',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ä')
+    call s:Accents('D',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ä')
+    call s:Accents('e','Ãš','Ã©','Ãª','Ã«','áºœ','Ä','È©',' ','Ä',' ','Ä','Ä')
+    call s:Accents('E','Ã','Ã','Ã','Ã','áºŒ','Ä','Èš',' ','Ä',' ','Ä','Ä')
+-   call s:Accents('g',' ',' ',' ',' ',' ','Ä¡','Ä£',' ',' ',' ','Ä',' ')
+-   call s:Accents('G',' ',' ',' ',' ',' ','Ä ','Ä¢',' ',' ',' ','Ä',' ')
++   call s:Accents('g',' ','Çµ','Ä',' ',' ','Ä¡','Ä£',' ',' ',' ','Ä',' ')
++   call s:Accents('G',' ','ÇŽ','Ä',' ',' ','Ä ','Ä¢',' ',' ',' ','Ä',' ')
++   call s:Accents('h',' ',' ','Ä¥',' ',' ',' ',' ',' ',' ',' ',' ','È')
++   call s:Accents('H',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','È')
+    call s:Accents('i','Ã¬','Ã­','Ã®','Ã¯','Ä©','Ä¯',' ',' ',' ',' ','Ä­',' ')
+    call s:Accents('I','Ã','Ã','Ã','Ã','Äš','Ä°',' ',' ',' ',' ','Ä¬',' ')
++   call s:Accents('J',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','Ç°')
++   call s:Accents('k',' ',' ',' ',' ',' ',' ','Ä·',' ',' ',' ',' ',' ')
++   call s:Accents('K',' ',' ',' ',' ',' ',' ','Ä¶',' ',' ',' ',' ',' ')
+    call s:Accents('l',' ','Äº','ÄŸ',' ',' ',' ','ÄŒ',' ',' ',' ',' ','ÄŸ')
+    call s:Accents('L',' ','Ä¹','Äœ',' ',' ',' ','Ä»',' ',' ',' ',' ','Äœ')
+    call s:Accents('n',' ','Å',' ',' ','Ã±',' ','Å',' ',' ',' ',' ','Å')
+@@ -959,12 +1179,12 @@
+    call s:Accents('O','Ã','Ã','Ã','Ã','Ã','È®',' ','Å','Çª',' ','Å',' ')
+    call s:Accents('r',' ','Å',' ',' ',' ',' ','Å',' ',' ',' ',' ','Å')
+    call s:Accents('R',' ','Å',' ',' ',' ',' ','Å',' ',' ',' ',' ','Å')
+-   call s:Accents('s',' ','Å','Å',' ',' ',' ','Å',' ',' ',' ',' ','Å¡')
++   call s:Accents('s',' ','Å','Å',' ',' ',' ','Å',' ','È¿',' ',' ','Å¡')
+    call s:Accents('S',' ','Å','Å',' ',' ',' ','Å',' ',' ',' ',' ','Å ')
+    call s:Accents('t',' ',' ',' ',' ',' ',' ','Å£',' ',' ',' ',' ','Å¥')
+    call s:Accents('T',' ',' ',' ',' ',' ',' ','Å¢',' ',' ',' ',' ','Å€')
+-   call s:Accents('u','Ã¹','Ãº','Ã»','ÃŒ','Å©',' ',' ','Å±',' ','Å¯','Å­',' ')
+-   call s:Accents('U','Ã','Ã','Ã','Ã','Åš',' ',' ','Å°',' ','Å®','Å¬',' ')
++   call s:Accents('u','Ã¹','Ãº','Ã»','ÃŒ','Å©',' ',' ','Å±','Å³','Å¯','Å­','Ç')
++   call s:Accents('U','Ã','Ã','Ã','Ã','Åš',' ',' ','Å°','Å²','Å®','Å¬','Ç')
+    call s:Accents('w',' ',' ','Åµ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
+    call s:Accents('W',' ',' ','ÅŽ',' ',' ',' ',' ',' ',' ',' ',' ',' ')
+    call s:Accents('y','á»³','Ãœ','Å·','Ã¿','á»¹',' ',' ',' ',' ',' ',' ',' ')
+@@ -1015,8 +1235,8 @@
+ if did_tex_syntax_inits == 1
+  let did_tex_syntax_inits= 2
+   " TeX highlighting groups which should share similar highlighting
+-  if !exists("g:tex_no_error")
+-   if !exists("tex_no_math")
++  if !exists("s:tex_no_error")
++   if !exists("g:tex_no_math")
+     HiLink texBadMath		texError
+     HiLink texMathDelimBad	texError
+     HiLink texMathError		texError
+@@ -1027,6 +1247,10 @@
+    HiLink texError		Error
+   endif
+ 
++  hi texBoldStyle		gui=bold	cterm=bold
++  hi texItalStyle		gui=italic	cterm=italic
++  hi texBoldItalStyle		gui=bold,italic cterm=bold,italic
++  hi texItalBoldStyle		gui=bold,italic cterm=bold,italic
+   HiLink texCite		texRefZone
+   HiLink texDefCmd		texDef
+   HiLink texDefName		texDef
+@@ -1044,6 +1268,8 @@
+    HiLink texGreek		texStatement
+    HiLink texSuperscript	texStatement
+    HiLink texSubscript		texStatement
++   HiLink texSuperscripts 	texSuperscript
++   HiLink texSubscripts 	texSubscript
+    HiLink texMathSymbol		texStatement
+    HiLink texMathZoneV		texMath
+    HiLink texMathZoneW		texMath
+@@ -1052,8 +1278,8 @@
+    HiLink texMathZoneV		texMath
+    HiLink texMathZoneZ		texMath
+   endif
+-  HiLink texSectionMarker	texCmdName
+-  HiLink texSectionName		texSection
++  HiLink texBeginEnd		texCmdName
++  HiLink texBeginEndName	texSection
+   HiLink texSpaceCode		texStatement
+   HiLink texStyleStatement	texStatement
+   HiLink texTypeSize		texType
+@@ -1088,7 +1314,9 @@
+   delcommand HiLink
+ endif
+ 
+-" Current Syntax: {{{1
+-unlet b:extfname
++" Cleanup: {{{1
++unlet s:extfname
+ let   b:current_syntax = "tex"
++let &cpo               = s:keepcpo
++unlet s:keepcpo
+ " vim: ts=8 fdm=marker
+diff -Naur vim73.orig/runtime/syntax/treetop.vim vim73/runtime/syntax/treetop.vim
+--- vim73.orig/runtime/syntax/treetop.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/treetop.vim	2013-06-07 17:07:27.065598059 +0000
+@@ -0,0 +1,110 @@
++" Vim syntax file
++" Language:         Treetop
++" Maintainer:       Nikolai Weibull <now@bitwi.se>
++" Latest Revision:  2011-03-14
++
++if exists("b:current_syntax")
++  finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++syn keyword treetopTodo
++      \ contained
++      \ TODO
++      \ FIXME
++      \ XXX
++      \ NOTE
++
++syn match treetopComment
++                        \ '#.*'
++                        \ display
++                        \ contains=treetopTodo
++
++syn include @treetopRuby syntax/ruby.vim
++unlet b:current_syntax
++
++syn keyword treetopKeyword
++                         \ require
++                         \ end
++syn region  treetopKeyword
++                         \ matchgroup=treetopKeyword
++                         \ start='\<\%(grammar\|include\|module\)\>\ze\s'
++                         \ end='$'
++                         \ transparent
++                         \ oneline
++                         \ keepend
++                         \ contains=@treetopRuby
++syn keyword treetopKeyword
++                         \ rule
++                         \ nextgroup=treetopRuleName
++                         \ skipwhite skipnl
++
++syn match   treetopGrammarName
++                             \ '\u\w*'
++                             \ contained
++
++syn match   treetopRubyModuleName
++                                \ '\u\w*'
++                                \ contained
++
++syn match   treetopRuleName
++                          \ '\h\w*'
++                          \ contained
++
++syn region  treetopString
++                        \ matchgroup=treetopStringDelimiter
++                        \ start=+"+
++                        \ end=+"+
++syn region  treetopString
++                        \ matchgroup=treetopStringDelimiter
++                        \ start=+'+
++                        \ end=+'+
++
++syn region  treetopCharacterClass
++                                \ matchgroup=treetopCharacterClassDelimiter
++                                \ start=+\[+
++                                \ skip=+\\\]+
++                                \ end=+\]+
++
++syn region  treetopRubyBlock
++                           \ matchgroup=treetopRubyBlockDelimiter
++                           \ start=+{+
++                           \ end=+}+
++                           \ contains=@treetopRuby
++
++syn region  treetopSemanticPredicate
++                           \ matchgroup=treetopSemanticPredicateDelimiter
++                           \ start=+[!&]{+
++                           \ end=+}+
++                           \ contains=@treetopRuby
++
++syn region  treetopSubclassDeclaration
++                           \ matchgroup=treetopSubclassDeclarationDelimiter
++                           \ start=+<+
++                           \ end=+>+
++                           \ contains=@treetopRuby
++
++syn match   treetopEllipsis
++                          \ +''+
++
++hi def link treetopTodo                         Todo
++hi def link treetopComment                      Comment
++hi def link treetopKeyword                      Keyword
++hi def link treetopGrammarName                  Constant
++hi def link treetopRubyModuleName               Constant
++hi def link treetopRuleName                     Identifier
++hi def link treetopString                       String
++hi def link treetopStringDelimiter              treetopString
++hi def link treetopCharacterClass               treetopString
++hi def link treetopCharacterClassDelimiter      treetopCharacterClass
++hi def link treetopRubyBlockDelimiter           PreProc
++hi def link treetopSemanticPredicateDelimiter   PreProc
++hi def link treetopSubclassDeclarationDelimiter PreProc
++hi def link treetopEllipsis                     Special
++
++let b:current_syntax = 'treetop'
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
+diff -Naur vim73.orig/runtime/syntax/tsalt.vim vim73/runtime/syntax/tsalt.vim
+--- vim73.orig/runtime/syntax/tsalt.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/tsalt.vim	2013-06-07 17:07:27.108931268 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Telix (Modem Comm Program) SALT Script
+ " Maintainer:	Sean M. McKee <mckee@misslink.net>
+-" Last Change:	2001 May 09
++" Last Change:	2012 Feb 03 by Thilo Six
+ " Version Info: @(#)tsalt.vim	1.5	97/12/16 08:11:15
+ 
+ " For version 5.x: Clear all syntax items
+@@ -12,6 +12,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " turn case matching off
+ syn case ignore
+ 
+@@ -211,4 +214,6 @@
+ 
+ let b:current_syntax = "tsalt"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/tt2.vim vim73/runtime/syntax/tt2.vim
+--- vim73.orig/runtime/syntax/tt2.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/tt2.vim	2013-06-07 17:07:27.162264449 +0000
+@@ -0,0 +1,210 @@
++" Language:      TT2 (Perl Template Toolkit)
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Author:        Moriki, Atsushi <4woods+vim@gmail.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2013-05-12
++"
++" Instration:
++"   put tt2.vim and tt2html.vim in to your syntax diretory.
++"
++"   add below in your filetype.vim.
++"       au BufNewFile,BufRead *.tt2 setf tt2
++"           or
++"       au BufNewFile,BufRead *.tt2
++"           \ if ( getline(1) . getline(2) . getline(3) =~ '<\chtml' |
++"           \           && getline(1) . getline(2) . getline(3) !~ '<[%?]' ) |
++"           \   || getline(1) =~ '<!DOCTYPE HTML' |
++"           \   setf tt2html |
++"           \ else |
++"           \   setf tt2 |
++"           \ endif
++"
++"   define START_TAG, END_TAG
++"       "ASP"
++"       :let b:tt2_syn_tags = '<% %>'
++"       "PHP"
++"       :let b:tt2_syn_tags = '<? ?>'
++"       "TT2 and HTML"
++"       :let b:tt2_syn_tags = '\[% %] <!-- -->'
++"
++" Changes:
++"           0.1.3
++"               Changed fileformat from 'dos' to 'unix'
++"               Deleted 'echo' that print obstructive message
++"           0.1.2
++"               Added block comment syntax
++"               e.g. [%# COMMENT
++"                        COMMENT TOO %]
++"                    [%# IT'S SAFE %]  HERE IS OUTSIDE OF TT2 DIRECTIVE
++"                    [% # WRONG!! %]   HERE STILL BE COMMENT
++"           0.1.1
++"               Release
++"           0.1.0
++"               Internal
++"
++" License: follow Vim :help uganda
++"
++
++if !exists("b:tt2_syn_tags")
++    let b:tt2_syn_tags = '\[% %]'
++    "let b:tt2_syn_tags = '\[% %] \[\* \*]'
++endif
++
++if !exists("b:tt2_syn_inc_perl")
++    let b:tt2_syn_inc_perl = 1
++endif
++
++if exists("b:current_syntax")
++  finish
++endif
++
++let s:cpo_save = &cpo
++set cpo&vim
++
++syn case match
++
++syn cluster tt2_top_cluster contains=tt2_perlcode,tt2_tag_region
++
++" TT2 TAG Region
++if exists("b:tt2_syn_tags")
++
++    let s:str = b:tt2_syn_tags . ' '
++    let s:str = substitute(s:str,'^ \+','','g')
++    let s:str = substitute(s:str,' \+',' ','g')
++
++    while stridx(s:str,' ') > 0
++
++        let s:st = strpart(s:str,0,stridx(s:str,' '))
++        let s:str = substitute(s:str,'[^ ]* ','',"")
++
++        let s:ed = strpart(s:str,0,stridx(s:str,' '))
++        let s:str = substitute(s:str,'[^ ]* ','',"")
++
++        exec 'syn region  tt2_tag_region '.
++                    \ 'matchgroup=tt2_tag '.
++                    \ 'start=+\(' . s:st .'\)[-]\=+ '.
++                    \ 'end=+[-]\=\(' . s:ed . '\)+ '.
++                    \ 'contains=@tt2_statement_cluster keepend extend'
++
++        exec 'syn region  tt2_commentblock_region '.
++                    \ 'matchgroup=tt2_tag '.
++                    \ 'start=+\(' . s:st .'\)[-]\=\(#\)\@=+ '.
++                    \ 'end=+[-]\=\(' . s:ed . '\)+ '.
++                    \ 'keepend extend'
++
++        "Include Perl syntax when 'PERL' 'RAWPERL' block
++        if b:tt2_syn_inc_perl
++            syn include @Perl $VIMRUNTIME/syntax/perl.vim
++            exec 'syn region tt2_perlcode '.
++                        \ 'start=+\(\(RAW\)\=PERL\s*[-]\=' . s:ed . '\(\n\)\=\)\@<=+ ' .
++                        \ 'end=+' . s:st . '[-]\=\s*END+me=s-1 contains=@Perl keepend'
++        endif
++
++        "echo 'TAGS ' . s:st . ' ' . s:ed
++        unlet s:st
++        unlet s:ed
++    endwhile
++
++else
++
++    syn region  tt2_tag_region
++                \ matchgroup=tt2_tag
++                \ start=+\(\[%\)[-]\=+
++                \ end=+[-]\=%\]+
++                \ contains=@tt2_statement_cluster keepend extend
++
++    syn region  tt2_commentblock_region
++                \ matchgroup=tt2_tag
++                \ start=+\(\[%\)[-]\=#+
++                \ end=+[-]\=%\]+
++                \ keepend extend
++
++    "Include Perl syntax when 'PERL' 'RAWPERL' block
++    if b:tt2_syn_inc_perl
++        syn include @Perl $VIMRUNTIME/syntax/perl.vim
++        syn region tt2_perlcode
++                    \ start=+\(\(RAW\)\=PERL\s*[-]\=%]\(\n\)\=\)\@<=+
++                    \ end=+\[%[-]\=\s*END+me=s-1
++                    \ contains=@Perl keepend
++    endif
++endif
++
++" Directive
++syn keyword tt2_directive contained
++            \ GET CALL SET DEFAULT DEBUG
++            \ LAST NEXT BREAK STOP BLOCK
++            \ IF IN UNLESS ELSIF FOR FOREACH WHILE SWITCH CASE
++            \ USE PLUGIN MACRO META
++            \ TRY FINAL RETURN LAST
++            \ CLEAR TO STEP AND OR NOT MOD DIV
++            \ ELSE PERL RAWPERL END
++syn match   tt2_directive +|+ contained
++syn keyword tt2_directive contained nextgroup=tt2_string_q,tt2_string_qq,tt2_blockname skipwhite skipempty
++            \ INSERT INCLUDE PROCESS WRAPPER FILTER
++            \ THROW CATCH
++syn keyword tt2_directive contained nextgroup=tt2_def_tag skipwhite skipempty
++            \ TAGS
++
++syn match   tt2_def_tag "\S\+\s\+\S\+\|\<\w\+\>" contained
++
++syn match   tt2_variable  +\I\w*+                           contained
++syn match   tt2_operator  "[+*/%:?-]"                       contained
++syn match   tt2_operator  "\<\(mod\|div\|or\|and\|not\)\>"  contained
++syn match   tt2_operator  "[!=<>]=\=\|&&\|||"               contained
++syn match   tt2_operator  "\(\s\)\@<=_\(\s\)\@="            contained
++syn match   tt2_operator  "=>\|,"                           contained
++syn match   tt2_deref     "\([[:alnum:]_)\]}]\s*\)\@<=\."   contained
++syn match   tt2_comment   +#.*$+                            contained extend
++syn match   tt2_func      +\<\I\w*\(\s*(\)\@=+              contained nextgroup=tt2_bracket_r skipempty skipwhite
++"
++syn region  tt2_bracket_r  start=+(+ end=+)+                contained contains=@tt2_statement_cluster keepend extend
++syn region  tt2_bracket_b start=+\[+ end=+]+                contained contains=@tt2_statement_cluster keepend extend
++syn region  tt2_bracket_b start=+{+  end=+}+                contained contains=@tt2_statement_cluster keepend extend
++
++syn region  tt2_string_qq start=+"+ end=+"+ skip=+\\"+      contained contains=tt2_ivariable keepend extend
++syn region  tt2_string_q  start=+'+ end=+'+ skip=+\\'+      contained keepend extend
++
++syn match   tt2_ivariable  +\$\I\w*\>\(\.\I\w*\>\)*+        contained
++syn match   tt2_ivariable  +\${\I\w*\>\(\.\I\w*\>\)*}+      contained
++
++syn match   tt2_number    "\d\+"        contained
++syn match   tt2_number    "\d\+\.\d\+"  contained
++syn match   tt2_number    "0x\x\+"      contained
++syn match   tt2_number    "0\o\+"       contained
++
++syn match   tt2_blockname "\f\+"                       contained                        nextgroup=tt2_blockname_joint skipwhite skipempty
++syn match   tt2_blockname "$\w\+"                      contained contains=tt2_ivariable nextgroup=tt2_blockname_joint skipwhite skipempty
++syn region  tt2_blockname start=+"+ end=+"+ skip=+\\"+ contained contains=tt2_ivariable nextgroup=tt2_blockname_joint keepend skipwhite skipempty
++syn region  tt2_blockname start=+'+ end=+'+ skip=+\\'+ contained                        nextgroup=tt2_blockname_joint keepend skipwhite skipempty
++syn match   tt2_blockname_joint "+"                    contained                        nextgroup=tt2_blockname skipwhite skipempty
++
++syn cluster tt2_statement_cluster contains=tt2_directive,tt2_variable,tt2_operator,tt2_string_q,tt2_string_qq,tt2_deref,tt2_comment,tt2_func,tt2_bracket_b,tt2_bracket_r,tt2_number
++
++" Synchronizing
++syn sync minlines=50
++
++hi def link tt2_tag         Type
++hi def link tt2_tag_region  Type
++hi def link tt2_commentblock_region Comment
++hi def link tt2_directive   Statement
++hi def link tt2_variable    Identifier
++hi def link tt2_ivariable   Identifier
++hi def link tt2_operator    Statement
++hi def link tt2_string_qq   String
++hi def link tt2_string_q    String
++hi def link tt2_blockname   String
++hi def link tt2_comment     Comment
++hi def link tt2_func        Function
++hi def link tt2_number      Number
++
++if exists("b:tt2_syn_tags")
++    unlet b:tt2_syn_tags
++endif
++
++let b:current_syntax = "tt2"
++
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
++" vim:ts=4:sw=4
+diff -Naur vim73.orig/runtime/syntax/tt2html.vim vim73/runtime/syntax/tt2html.vim
+--- vim73.orig/runtime/syntax/tt2html.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/tt2html.vim	2013-06-07 17:07:27.168931097 +0000
+@@ -0,0 +1,20 @@
++" Language:      TT2 embedded with HTML
++" Maintainer:    vim-perl <vim-perl@googlegroups.com>
++" Author:        Moriki, Atsushi <4woods+vim@gmail.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2010-07-21
++
++if exists("b:current_syntax")
++    finish
++endif
++
++runtime! syntax/html.vim
++unlet b:current_syntax
++
++runtime! syntax/tt2.vim
++unlet b:current_syntax
++
++syn cluster htmlPreProc add=@tt2_top_cluster
++
++let b:current_syntax = "tt2html"
+diff -Naur vim73.orig/runtime/syntax/tt2js.vim vim73/runtime/syntax/tt2js.vim
+--- vim73.orig/runtime/syntax/tt2js.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/tt2js.vim	2013-06-07 17:07:27.182264392 +0000
+@@ -0,0 +1,20 @@
++" Language:      TT2 embedded with Javascript
++" Maintainer:    Andy Lester <andy@petdance.com>
++" Author:        Yates, Peter <pd.yates@gmail.com>
++" Homepage:      http://github.com/vim-perl/vim-perl
++" Bugs/requests: http://github.com/vim-perl/vim-perl/issues
++" Last Change:   2013-04-10
++
++if exists("b:current_syntax")
++    finish
++endif
++
++runtime! syntax/javascript.vim
++unlet b:current_syntax
++
++runtime! syntax/tt2.vim
++unlet b:current_syntax
++
++syn cluster javascriptPreProc add=@tt2_top_cluster
++
++let b:current_syntax = "tt2js"
+diff -Naur vim73.orig/runtime/syntax/uil.vim vim73/runtime/syntax/uil.vim
+--- vim73.orig/runtime/syntax/uil.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/uil.vim	2013-06-07 17:07:27.238930897 +0000
+@@ -1,10 +1,9 @@
+ " Vim syntax file
+ " Language:	Motif UIL (User Interface Language)
+ " Maintainer:	Thomas Koehler <jean-luc@picard.franken.de>
+-" Last Change:	2009 Dec 04
++" Last Change:	2013 May 23
+ " URL:		http://gott-gehabt.de/800_wer_wir_sind/thomas/Homepage/Computer/vim/syntax/uil.vim
+ 
+-
+ " Quit when a syntax file was already loaded
+ if version < 600
+    syntax clear
+@@ -21,22 +20,22 @@
+ 
+ syn keyword uilTodo contained	TODO
+ 
+-" String and Character contstants
++" String and Character constants
+ " Highlight special characters (those which have a backslash) differently
+ syn match   uilSpecial contained "\\\d\d\d\|\\."
+-syn region  uilString		start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=uilSpecial
++syn region  uilString		start=+"+  skip=+\\\\\|\\"+  end=+"+  contains=@Spell,uilSpecial
+ syn match   uilCharacter	"'[^\\]'"
+-syn region  uilString		start=+'+  skip=+\\\\\|\\"+  end=+'+  contains=uilSpecial
++syn region  uilString		start=+'+  skip=+\\\\\|\\'+  end=+'+  contains=@Spell,uilSpecial
+ syn match   uilSpecialCharacter	"'\\.'"
+-syn match   uilSpecialStatement	"Xm[^ =(){}]*"
++syn match   uilSpecialStatement	"Xm[^	 =(){}:;]*"
+ syn match   uilSpecialFunction	"MrmNcreateCallback"
+-syn match   uilRessource	"XmN[^ =(){}]*"
++syn match   uilRessource	"XmN[^	 =(){}:;]*"
+ 
+ syn match  uilNumber		"-\=\<\d*\.\=\d\+\(e\=f\=\|[uU]\=[lL]\=\)\>"
+-syn match  uilNumber		"0[xX][0-9a-fA-F]\+\>"
++syn match  uilNumber		"0[xX]\x\+\>"
+ 
+-syn region uilComment		start="/\*"  end="\*/" contains=uilTodo
+-syn match  uilComment		"!.*" contains=uilTodo
++syn region uilComment		start="/\*"  end="\*/" contains=@Spell,uilTodo
++syn match  uilComment		"!.*" contains=@Spell,uilTodo
+ syn match  uilCommentError	"\*/"
+ 
+ syn region uilPreCondit		start="^#\s*\(if\>\|ifdef\>\|ifndef\>\|elif\>\|else\>\|endif\>\)"  skip="\\$"  end="$" contains=uilComment,uilString,uilCharacter,uilNumber,uilCommentError
+diff -Naur vim73.orig/runtime/syntax/upstart.vim vim73/runtime/syntax/upstart.vim
+--- vim73.orig/runtime/syntax/upstart.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/upstart.vim	2013-06-07 17:07:27.258930840 +0000
+@@ -0,0 +1,112 @@
++" Vim syntax file
++" Language:	Upstart job files
++" Maintainer:	Michael Biebl <biebl@debian.org>
++"		James Hunt <james.hunt@ubuntu.com>
++" Last Change:	2012 Jan 16
++" License:	The Vim license
++" Version:	0.4
++" Remark:	Syntax highlighting for Upstart (init(8)) job files.
++"
++" It is inspired by the initng syntax file and includes sh.vim to do the
++" highlighting of script blocks.
++
++if version < 600
++	syntax clear
++elseif exists("b:current_syntax")
++	finish
++endif
++
++let is_bash = 1
++syn include @Shell syntax/sh.vim
++
++syn case match
++
++" avoid need to use 'match' for most events
++setlocal iskeyword+=-
++
++syn match upstartComment /#.*$/ contains=upstartTodo
++syn keyword upstartTodo TODO FIXME contained
++
++syn region upstartString start=/"/ end=/"/ skip=/\\"/
++
++syn region upstartScript matchgroup=upstartStatement start="script" end="end script" contains=@upstartShellCluster
++
++syn cluster upstartShellCluster contains=@Shell
++
++" one argument
++syn keyword upstartStatement description author version instance expect
++syn keyword upstartStatement pid kill normal console env exit export
++syn keyword upstartStatement umask nice oom chroot chdir exec
++
++" two arguments
++syn keyword upstartStatement limit
++
++" one or more arguments (events)
++syn keyword upstartStatement emits
++
++syn keyword upstartStatement on start stop
++
++" flag, no parameter
++syn keyword upstartStatement respawn service instance manual debug task
++
++" prefix for exec or script 
++syn keyword upstartOption pre-start post-start pre-stop post-stop
++
++" option for kill
++syn keyword upstartOption timeout
++" option for oom
++syn keyword upstartOption never
++" options for console
++syn keyword upstartOption output owner
++" options for expect
++syn keyword upstartOption fork daemon
++" options for limit
++syn keyword upstartOption unlimited
++
++" 'options' for start/stop on
++syn keyword upstartOption and or
++
++" Upstart itself and associated utilities
++syn keyword upstartEvent runlevel
++syn keyword upstartEvent started
++syn keyword upstartEvent starting
++syn keyword upstartEvent startup
++syn keyword upstartEvent stopped
++syn keyword upstartEvent stopping
++syn keyword upstartEvent control-alt-delete
++syn keyword upstartEvent keyboard-request
++syn keyword upstartEvent power-status-changed
++
++" D-Bus
++syn keyword upstartEvent dbus-activation
++
++" Display Manager (ie gdm)
++syn keyword upstartEvent desktop-session-start
++syn keyword upstartEvent login-session-start
++
++" mountall
++syn keyword upstartEvent all-swaps
++syn keyword upstartEvent filesystem
++syn keyword upstartEvent mounted
++syn keyword upstartEvent mounting
++syn keyword upstartEvent local-filesystems
++syn keyword upstartEvent remote-filesystems
++syn keyword upstartEvent virtual-filesystems
++
++" SysV umountnfs.sh
++syn keyword upstartEvent mounted-remote-filesystems
++
++" upstart-udev-bridge and ifup/down
++syn match   upstartEvent /\<\i\{-1,}-device-\(added\|removed\|up\|down\)/
++
++" upstart-socket-bridge
++syn keyword upstartEvent socket
++
++hi def link upstartComment   Comment
++hi def link upstartTodo	     Todo
++hi def link upstartString    String
++hi def link upstartStatement Statement
++hi def link upstartOption    Type
++hi def link upstartEvent     Define
++
++let b:current_syntax = "upstart"
+diff -Naur vim73.orig/runtime/syntax/valgrind.vim vim73/runtime/syntax/valgrind.vim
+--- vim73.orig/runtime/syntax/valgrind.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/valgrind.vim	2013-06-07 17:07:27.272264135 +0000
+@@ -2,7 +2,7 @@
+ " Language: Valgrind Memory Debugger Output
+ " Maintainer: Roger Luethi <rl@hellgate.ch>
+ " Program URL: http://devel-home.kde.org/~sewardj/
+-" Last Change: 2002 Apr 07
++" Last Change: 2012 Apr 30
+ "
+ " Notes: mostly based on strace.vim and xml.vim
+ 
+@@ -10,6 +10,8 @@
+ if exists("b:current_syntax")
+ 	finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ syn case match
+ syn sync minlines=50
+@@ -97,3 +99,6 @@
+ hi def link valgrindSrc		Statement
+ 
+ let b:current_syntax = "valgrind"
++
++let &cpo = s:keepcpo
++unlet s:keepcpo
+diff -Naur vim73.orig/runtime/syntax/verilog.vim vim73/runtime/syntax/verilog.vim
+--- vim73.orig/runtime/syntax/verilog.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/syntax/verilog.vim	2013-06-07 17:07:27.298930726 +0000
+@@ -1,7 +1,7 @@
+ " Vim syntax file
+ " Language:	Verilog
+ " Maintainer:	Mun Johl <Mun.Johl@emulex.com>
+-" Last Update:  Fri Oct 13 11:44:32 PDT 2006
++" Last Update:  Wed Jul 20 16:04:19 PDT 2011
+ 
+ " For version 5.x: Clear all syntax items
+ " For version 6.x: Quit when a syntax file was already loaded
+@@ -11,11 +11,13 @@
+    finish
+ endif
+ 
+-" Set the local value of the 'iskeyword' option
++" Set the local value of the 'iskeyword' option.
++" NOTE: '?' was added so that verilogNumber would be processed correctly when
++"       '?' is the last character of the number.
+ if version >= 600
+-   setlocal iskeyword=@,48-57,_,192-255
++   setlocal iskeyword=@,48-57,63,_,192-255
+ else
+-   set iskeyword=@,48-57,_,192-255
++   set iskeyword=@,48-57,63,_,192-255
+ endif
+ 
+ " A bunch of useful Verilog keywords
+@@ -48,7 +50,7 @@
+ syn keyword verilogConditional if else case casex casez default endcase
+ syn keyword verilogRepeat      forever repeat while for
+ 
+-syn keyword verilogTodo contained TODO
++syn keyword verilogTodo contained TODO FIXME
+ 
+ syn match   verilogOperator "[&|~><!)(*#%@+/=?:;}{,.\^\-\[\]]"
+ 
+@@ -113,17 +115,17 @@
+    " The default highlighting.
+    HiLink verilogCharacter       Character
+    HiLink verilogConditional     Conditional
+-   HiLink verilogRepeat		 Repeat
+-   HiLink verilogString		 String
+-   HiLink verilogTodo		 Todo
+-   HiLink verilogComment	 Comment
+-   HiLink verilogConstant	 Constant
+-   HiLink verilogLabel		 Label
+-   HiLink verilogNumber		 Number
+-   HiLink verilogOperator	 Special
+-   HiLink verilogStatement	 Statement
+-   HiLink verilogGlobal		 Define
+-   HiLink verilogDirective	 SpecialComment
++   HiLink verilogRepeat          Repeat
++   HiLink verilogString          String
++   HiLink verilogTodo            Todo
++   HiLink verilogComment         Comment
++   HiLink verilogConstant        Constant
++   HiLink verilogLabel           Label
++   HiLink verilogNumber          Number
++   HiLink verilogOperator        Special
++   HiLink verilogStatement       Statement
++   HiLink verilogGlobal          Define
++   HiLink verilogDirective       SpecialComment
+    HiLink verilogEscape		 Special
+ 
+    delcommand HiLink
+diff -Naur vim73.orig/runtime/syntax/vhdl.vim vim73/runtime/syntax/vhdl.vim
+--- vim73.orig/runtime/syntax/vhdl.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/vhdl.vim	2013-06-07 17:07:27.335597288 +0000
+@@ -2,7 +2,8 @@
+ " Language:	VHDL
+ " Maintainer:	Czo <Olivier.Sirol@lip6.fr>
+ " Credits:	Stephan Hegel <stephan.hegel@snc.siemens.com.cn>
+-" $Id: vhdl.vim,v 1.1 2004/06/13 15:34:56 vimboss Exp $
++" Last Change:	2012 Jun 01
++" 		(Dominique Pelle added @Spell)
+ 
+ " VHSIC Hardware Description Language
+ " Very High Scale Integrated Circuit
+@@ -15,6 +16,9 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " This is not VHDL. I use the C-Preprocessor cpp to generate different binaries
+ " from one VHDL source file. Unfortunately there is no preprocessor for VHDL
+ " available. If you don't like this, please remove the following lines.
+@@ -53,11 +57,11 @@
+ syn match   vhdlNone      "\<else\s\+if\>$"
+ syn match   vhdlNone      "\<else\s\+if\>\s"
+ 
+-" Predifined VHDL types
++" Predefined VHDL types
+ syn keyword vhdlType bit bit_vector
+ syn keyword vhdlType character boolean integer real time
+ syn keyword vhdlType string severity_level
+-" Predifined standard ieee VHDL types
++" Predefined standard ieee VHDL types
+ syn keyword vhdlType positive natural signed unsigned
+ syn keyword vhdlType line text
+ syn keyword vhdlType std_logic std_logic_vector
+@@ -125,7 +129,7 @@
+ syn match  vhdlVector "O\"[0-7_]\+\""
+ syn match  vhdlVector "X\"[0-9a-f_]\+\""
+ syn match  vhdlCharacter "'.'"
+-syn region vhdlString start=+"+  end=+"+
++syn region vhdlString start=+"+  end=+"+ contains=@Spell
+ 
+ " floating numbers
+ syn match vhdlNumber "-\=\<\d\+\.\d\+\(E[+\-]\=\d\+\)\>"
+@@ -147,7 +151,7 @@
+ syn match vhdlTime "\<\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
+ syn match vhdlTime "\<\d\+\.\d\+\s\+\(\([fpnum]s\)\|\(sec\)\|\(min\)\|\(hr\)\)\>"
+ 
+-syn match vhdlComment "--.*$"
++syn match vhdlComment "--.*$" contains=@Spell
+ " syn match vhdlGlobal "[\'$#~!%@?\^\[\]{}\\]"
+ 
+ " Define the default highlighting.
+@@ -181,4 +185,6 @@
+ 
+ let b:current_syntax = "vhdl"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8
+diff -Naur vim73.orig/runtime/syntax/vim.vim vim73/runtime/syntax/vim.vim
+--- vim73.orig/runtime/syntax/vim.vim	2010-08-04 20:21:21.000000000 +0000
++++ vim73/runtime/syntax/vim.vim	2013-06-07 17:07:27.402263764 +0000
+@@ -1,14 +1,16 @@
+ " Vim syntax file
+ " Language:	Vim 7.3 script
+ " Maintainer:	Dr. Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+-" Last Change:	August 04, 2010
+-" Version:	7.3-04
++" Last Change:	May 29, 2013
++" Version:	7.3-25
+ " Automatically generated keyword lists: {{{1
+ 
+ " Quit when a syntax file was already loaded {{{2
+ if exists("b:current_syntax")
+   finish
+ endif
++let s:keepcpo= &cpo
++set cpo&vim
+ 
+ " vimTodo: contains common special-notices for comments {{{2
+ " Use the vimCommentGroup cluster to add your own.
+@@ -16,31 +18,32 @@
+ syn cluster vimCommentGroup	contains=vimTodo,@Spell
+ 
+ " regular vim commands {{{2
+-syn keyword vimCommand contained	abc[lear] argdo argu[ment] bel[owright] bN[ext] breakd[el] b[uffer] caddb[uffer] cb[uffer] cex[pr] cg[etfile] checkt[ime] cnew[er] col[der] con[tinue] cq[uit] delc[ommand] diffoff diffu[pdate] dr[op] echom[sg] em[enu] endt[ry] exi[t] fina[lly] fix[del] foldd[oopen] go[to] hid[e] ij[ump] isp[lit] k laddb[uffer] la[st] lch[dir] lex[pr] lgete[xpr] l[ist] lmak[e] lN[ext] loc[kmarks] lpf[ile] lt[ag] lv[imgrep] ma[rk] mk[exrc] mkv[imrc] mz[scheme] new noh[lsearch] on[ly] ped[it] popu prev[ious] prof[ile] pta[g] ptn[ext] pts[elect] py[thon] r[ead] redr[aw] ret[ab] rightb[elow] rundo san[dbox] sbf[irst] sbN[ext] scripte[ncoding] setg[lobal] sh[ell] sla[st] sme sni[ff] sor[t] spelli[nfo] sp[lit] startg[replace] st[op] sunme syncbind tabd[o] tabl[ast] tabN[ext] tabs tcld[o] th[row] tm[enu] tp[revious] tu undoj[oin] uns[ilent] vert[ical] vi[sual] wa[ll] winp[os] wp[revious] ws[verb] xa[ll] xmenu xnoremenu
+-syn keyword vimCommand contained	abo[veleft] arge[dit] as[cii] bf[irst] bo[tright] breakl[ist] buffers cad[dexpr] cc cf[ile] c[hange] cla[st] cn[ext] colo[rscheme] cope[n] cr[ewind] d[elete] diffpatch dig[raphs] ds[earch] echon emenu* endw[hile] f[ile] fin[d] fo[ld] foldo[pen] gr[ep] his[tory] il[ist] iuna[bbrev] keepalt lad[dexpr] later lcl[ose] lf[ile] lg[etfile] ll lmapc[lear] lnf[ile] lockv[ar] lp[revious] lua lvimgrepa[dd] marks mks[ession] mod[e] nbc[lose] n[ext] nu[mber] o[pen] pe[rl] popu[p] p[rint] promptf[ind] ptf[irst] ptN[ext] pu[t] qa[ll] rec[over] redraws[tatus] retu[rn] rub[y] ru[ntime] sa[rgument] sbl[ast] sbp[revious] scrip[tnames] setl[ocal] sign sl[eep] smenu sno[magic] so[urce] spellr[epall] spr[evious] star[tinsert] stopi[nsert] sunmenu t tabe[dit] tabm[ove] tabo[nly] ta[g] tclf[ile] tj[ump] tn[ext] tr[ewind] tu[nmenu] undol[ist] up[date] vie[w] vmapc[lear] wh[ile] win[size] wq wundo x[it] XMLent xunme
+-syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bl[ast] bp[revious] br[ewind] bun[load] caddf[ile] ccl[ose] cfir[st] changes cl[ist] cN[ext] comc[lear] co[py] cuna[bbrev] delf[unction] diffpu[t] di[splay] dsp[lit] e[dit] endfo[r] ene[w] files fini[sh] foldc[lose] for grepa[dd] iabc[lear] imapc[lear] j[oin] keepj[umps] laddf[ile] lb[uffer] le[ft] lfir[st] lgr[ep] lla[st] lnew[er] lNf[ile] lol[der] lr[ewind] luado lw[indow] mat[ch] mksp[ell] m[ove] nb[key] N[ext] ol[dfiles] opt[ions] perld[o] pp[op] P[rint] promptr[epl] ptj[ump] ptp[revious] pw[d] q[uit] redi[r] reg[isters] rew[ind] rubyd[o] rv[iminfo] sav[eas] sbm[odified] sbr[ewind] se[t] sf[ind] sil[ent] sm[agic] sn[ext] snoreme spelld[ump] spellu[ndo] sre[wind] startr[eplace] sts[elect] sus[pend] tab tabf[ind] tabnew tabp[revious] tags te[aroff] tl[ast] tN[ext] try una[bbreviate] unh[ide] verb[ose] vim[grep] vne[w] winc[md] wn[ext] wqa[ll] wv[iminfo] xmapc[lear] XMLns xunmenu
+-syn keyword vimCommand contained	arga[dd] argl[ocal] ba[ll] bm[odified] brea[k] bro[wse] bw[ipeout] cal[l] cd cgetb[uffer] chd[ir] clo[se] cnf[ile] comp[iler] cpf[ile] cw[indow] delm[arks] diffsplit dj[ump] earlier el[se] endf[unction] ex filetype fir[st] folddoc[losed] fu[nction] ha[rdcopy] if is[earch] ju[mps] kee[pmarks] lan[guage] lc[d] lefta[bove] lgetb[uffer] lgrepa[dd] lli[st] lne[xt] lo[adview] lop[en] ls luafile mak[e] menut[ranslate] mkvie[w] mzf[ile] nbs[tart] nmapc[lear] omapc[lear] pc[lose] po[p] pre[serve] profd[el] ps[earch] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red[o] res[ize] ri[ght] rubyf[ile] sal[l] sba[ll] sbn[ext] sb[uffer] setf[iletype] sfir[st] sim[alt] sm[ap] sN[ext] snoremenu spe[llgood] spellw[rong] sta[g] stj[ump] sun[hide] sv[iew] tabc[lose] tabfir[st] tabn[ext] tabr[ewind] tc[l] tf[irst] tm to[pleft] ts[elect] u[ndo] unlo[ckvar] ve[rsion] vimgrepa[dd] vs[plit] windo wN[ext] w[rite] X xme xnoreme y[ank]
+-syn keyword vimCommand contained	argd[elete] ar[gs] bd[elete] bn[ext] breaka[dd] bufdo cabc[lear] cat[ch] ce[nter] cgete[xpr] che[ckpath] cmapc[lear] cNf[ile] conf[irm] cp[revious] debugg[reedy] diffg[et] diffthis dl[ist] echoe[rr] elsei[f] en[dif] 
+-syn match   vimCommand contained	"\<z[-+^.=]"
++syn keyword vimCommand contained	a arga[dd] ar[gs] bar bn[ext] breaka[dd] bu bw[ipeout] caddf[ile] cd cgete[xpr] checkt[ime] cmdname cnf com con[tinue] cq[uit] cw[indow] delc[ommand] diffg[et] diffpu[t] dig[raphs] dr[op] earlier el[se] endfo[r] ene[w] filename fin[d] folddoc[losed] fu[nction] gui helpg[rep] ia in j[oin] kee[pmarks] laddf[ile] lb[uffer] le[ft] lgetb[uffer] l[ist] lN lNf lo[adview] lpf[ile] luado mak[e] menut[ranslate] mks[ession] mod[e] n new noautocmd on[ly] pc[lose] popu p[rint] promptr[epl] ptn pts[elect] py[thon] quote redi[r] res[ize] ru rv[iminfo] sbf[irst] sbr[ewind] scscope sfir[st] sim[alt] sme snoreme spe spellw[rong] star st[op] sunmenu syn ta tabf[ind] tabnew tabr[ewind] tcld[o] tj[ump] tN tp[revious] tu u[ndo] unlo[ckvar] verb[ose] vim[grep] vne[w] win wn[ext] w[rite] xa[ll] XMLent xunme
++syn keyword vimCommand contained	ab argd[elete] argu[ment] bd[elete] bN[ext] breakd[el] buf c cal[l] ce[nter] cg[etfile] cl cn cNf comc[lear] cope[n] cr[ewind] d d[elete] diffo diffsplit di[splay] ds[earch] ec elsei[f] endfun ex files fini[sh] foldd[oopen] g gvim helpt[ags] iabc[lear] index ju[mps] l lan lc[d] lefta[bove] lgete[xpr] ll lne lnf[ile] locale lp[revious] luafile Man mes mksp[ell] m[ove] N n[ext] noh[lsearch] o[pen] pe popu[p] P[rint] ps[earch] ptN pu[t] python3 r red[o] ret[ab] rub[y] sal[l] sbl[ast] sb[uffer] se[t] sh[ell] sl smenu snoremenu spelld[ump] sp[lit] start stopi[nsert] sus[pend] sync tab tabfir[st] tabn[ext] tabs tclf[ile] tl[ast] tn[ext] tr tu[nmenu] undoj[oin] uns[ilent] ve[rsion] vimgrepa[dd] vs[plit] winc[md] wN[ext] ws[verb] x[it] XMLns xunmenu
++syn keyword vimCommand contained	abc[lear] argdo as[cii] bel[owright] bo[tright] breakl[ist] bufdo cabc[lear] cat[ch] cex[pr] c[hange] cla[st] cN cnf[ile] comment co[py] cs de delf diffoff difft dj[ump] dsp[lit] echoe[rr] em[enu] endf[unction] exi[t] filet fir[st] foldo[pen] get h hi if intro k la lan[guage] lch[dir] let@ lg[etfile] lla[st] lnew[er] lNf[ile] loc[kmarks] lr[ewind] lv[imgrep] ma[rk] messages mkv mv nbc[lose] N[ext] nu[mber] opt[ions] ped[it] pp[op] pro pta[g] ptn[ext] pw[d] q re redr[aw] retu[rn] rubyd[o] san[dbox] sbm[odified] scrip setf[iletype] si sla[st] sn[ext] s@\n@\=\r" spe[llgood] spr[evious] startg[replace] sts[elect] sv[iew] syncbind tabc[lose] tabl[ast] tabN[ext] ta[g] te[aroff] tm tN[ext] tr[ewind] u undol[ist] up[date] vert[ical] vi[sual] w windo wp[revious] wundo xmapc[lear] xnoreme xwininfo
++syn keyword vimCommand contained	abo[veleft] arge[dit] au bf[irst] bp[revious] br[ewind] b[uffer] cad cb[uffer] cf[ile] changes cl[ist] cnew[er] cNf[ile] comp[iler] count cscope debug delf[unction] DiffOrig diffthis dl[ist] dwim echom[sg] emenu* en[dif] exu[sage] filetype fix[del] for go[to] ha[rdcopy] hid[e] ij[ump] is[earch] keepa lad la[st] lcl[ose] lex[pr] lgr[ep] lli[st] lne[xt] lo lockv[ar] ls lvimgrepa[dd] marks mk mkvie[w] mz nb[key] nkf o ownsyntax pe[rl] pr profd[el] ptf[irst] ptN[ext] py qa[ll] r[ead] redraws[tatus] rew[ind] rubyf[ile] sa[rgument] sbn[ext] scripte[ncoding] setg[lobal] sig sl[eep] sN[ext] so spelli[nfo] sre[wind] star[tinsert] sun[hide] sw[apname] synlist tabd[o] tabm[ove] tabo[nly] tags tf[irst] tm[enu] TOhtml try un unh[ide] v vi viu[sage] wa[ll] winp[os] wq wv[iminfo] xme xnoremenu y[ank]
++syn keyword vimCommand contained	al[l] argg[lobal] bad[d] bl[ast] br bro[wse] buffers caddb[uffer] cc cfir[st] chd[ir] clo[se] cn[ext] col[der] con cpf[ile] cstag debugg[reedy] delm[arks] diffp diffu[pdate] do e echon en endt[ry] f fin fo[ld] fu gr[ep] h[elp] his[tory] il[ist] isp[lit] keepalt laddb[uffer] lat lcs lf[ile] lgrepa[dd] lmak[e] lN[ext] loadk lol[der] lt[ag] lw[indow] mat[ch] mkdir mkv[imrc] mzf[ile] nbs[tart] nmapc[lear] ol[dfiles] p perld[o] pre[serve] prof[ile] ptj[ump] ptp[revious] py3 q[uit] rec[over] reg[isters] ri[ght] rundo sav[eas] sbN[ext] scrip[tnames] setl[ocal] sign sm[agic] sni[ff] sor[t] spellr[epall] st startr[eplace] sunme sy t tabe[dit] tabN tabp[revious] tc[l] th[row] tn to[pleft] ts[elect] una[bbreviate] unl ve vie[w] vmapc[lear] wh[ile] win[size] wqa[ll] x xmenu xterm errormsg
++syn keyword vimCommand contained	ar argl[ocal] ba[ll] bm[odified] brea[k] browseset bun[load] cad[dexpr] ccl[ose] cgetb[uffer] che[ckpath] cmapc[lear] cN[ext] colo[rscheme] conf[irm] cp[revious] cuna[bbrev] del di diffpatch dig doau ea e[dit] endf endw[hile] f[ile] fina[lly] foldc[lose] fun grepa[dd] helpf[ind] i imapc[lear] iuna[bbrev] keepj[umps] lad[dexpr] later lcscope lfir[st] lh[elpgrep] lmapc[lear] lnf loadkeymap lop[en] lua ma menut mk[exrc] mo mz[scheme] ne noa omapc[lear] P po[p] prev[ious] promptf[ind] ptl[ast] ptr[ewind] pyf[ile] quita[ll] red Ren rightb[elow] ru[ntime] sba[ll] sbp[revious] scs sf[ind] sil[ent] sm[ap] sno[magic] so[urce] spellu[ndo] sta[g] stj[ump] 
++syn match   vimCommand contained	"\<z[-+^.=]\="
+ 
+ " vimOptions are caught only when contained in a vimSet {{{2
+-syn keyword vimOption contained	acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscopetag csto cwh dg dip eadirection ek equalprg ex fdi fen fileencodings flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imi incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape restorescreen rnu rulerformat scr sect sft shellredir shm showmode sj smd spell splitbelow ssl stl sw sxq tabpagemax tags tbis terse thesaurus titleold toolbariconsize tsr ttyfast tx undofile ut verbosefile virtualedit wb wfw wildcharm winaltkeys winminwidth wmnu write
+-syn keyword vimOption contained	ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetagorder csverb debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt revins ro runtimepath scroll sections sh shellslash shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile syn tabstop tagstack tbs textauto tildeop titlestring top ttimeout ttym uc undolevels vb vfile visualbell wc wh wildignore window winwidth wmw writeany
+-syn keyword vimOption contained	akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopeverbose cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformats fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imak ims indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt readonly ri rs sb scrollbind secure shcf shelltemp shortname shq sm so spellfile spr st sts swapsync synmaxcol tag tal tenc textmode timeout tl tpm ttimeoutlen ttymouse udf undoreload vbs vi vop wcm whichwrap wildmenu winfixheight wiv wop writebackup
+-syn keyword vimOption contained	al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cspc cul def diff display edcompatible endofline errorformat fcl fdm fex filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imc imsearch indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight redrawtime rightleft rtp sbo scrolljump sel shell shelltype showbreak si smartcase softtabstop spelllang sps sta su swb syntax tagbsearch tb term textwidth timeoutlen tm tr ttm ttyscroll udir updatecount vdir viewdir wa wd wi wildmode winfixwidth wiw wrap writedelay
+-syn keyword vimOption contained	aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp csprg cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imcmdline inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf ta taglength tbi termbidi tf title to ts tty ttytype ul updatetime ve viewoptions wak weirdinvert wig wildoptions winheight wm wrapmargin ws
+-syn keyword vimOption contained	allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csqf cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imd include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw remap rl ruf sc scrollopt selectmode shellpipe shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf tabline tagrelative tbidi termencoding tgst titlelen toolbar tsl ttybuiltin tw undodir ur verbose viminfo warn wfh wildchar wim winminheight wmh wrapscan ww
+-syn keyword vimOption contained	altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix cst cursorline dex digraph ead ei equalalways eventignore fde fdt fileencoding fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imdisable includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe report rlc ruler scb scs sessionoptions shellquote shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws 
++syn keyword vimOption contained	acd ambiwidth arabicshape autowriteall backupdir bdlay binary breakat bufhidden cd ci cinw co commentstring confirm cpoptions cscoperelative csre cursorcolumn delcombine diffopt ea efm ep et fdc fdo ffs fk foldcolumn foldmethod formatoptions gd go guifont guitabtooltip hid hkp iconstring imd include inex isi js kp linebreak lm lz matchpairs maxmemtot mkspellmem mod mousef mouset nf oft pa path pheader previewheight printmbcharset pvw remap rl ruf sc scrollopt selectmode shellpipe shellxquote showcmd sidescroll smartindent sol spellsuggest sr stal sua swf syntax taglength tbidi terse tildeop tl tpm ttimeoutlen ttymouse udf undoreload vbs vi vop wcm whichwrap wildignore winaltkeys winminwidth wmnu write
++syn keyword vimOption contained	ai ambw ari aw backupext beval biosk brk buflisted cdpath cin cinwords cocu compatible consk cpt cscopetag cst cursorline dex digraph ead ei equalalways eventignore fde fdt fileencoding fkmap foldenable foldminlines formatprg gdefault gp guifontset helpfile hidden hl ignorecase imdisable includeexpr inf isident key langmap lines lmap ma matchtime mco ml modeline mousefocus mousetime nrformats ofu para pdev pi previewwindow printmbfont qe report rlc ruler scb scs sessionoptions shellquote shiftround showfulltag sidescrolloff smarttab sp spf srr startofline suffixes switchbuf ta tagrelative tbis textauto timeout tm tr ttm ttyscroll udir updatecount vdir viewdir wa wd wi wildignorecase window winwidth wmw writeany
++syn keyword vimOption contained	akm anti arshape awa backupskip bex bioskey browsedir buftype cedit cindent clipboard cole complete conskey crb cscopetagorder csto cwh dg dip eadirection ek equalprg ex fdi fen fileencodings flp foldexpr foldnestmax fp gfm grepformat guifontwide helpheight highlight hlg im imi incsearch infercase isk keymap langmenu linespace loadplugins macatsui maxcombine mef mls modelines mousehide mp nu omnifunc paragraphs penc pm printdevice printoptions quoteescape restorescreen rnu rulerformat scr sect sft shellredir shiftwidth showmatch siso smc spc spl ss statusline suffixesadd sws tabline tags tbs textmode timeoutlen to ts tty ttytype ul updatetime ve viewoptions wak weirdinvert wic wildmenu winfixheight wiv wop writebackup
++syn keyword vimOption contained	al antialias autochdir background balloondelay bexpr bk bs casemap cf cink cmdheight colorcolumn completefunc copyindent cryptmethod cscopeverbose csverb debug dict dir eb enc errorbells expandtab fdl fenc fileformat fml foldignore foldopen fs gfn grepprg guiheadroom helplang history hls imactivatekey iminsert inde insertmode iskeyword keymodel laststatus lisp lpl magic maxfuncdepth menuitems mm modifiable mousem mps number opendevice paste pex pmbcs printencoding prompt rdt revins ro runtimepath scroll sections sh shellslash shm showmode sj smd spell splitbelow ssl stl sw sxe tabpagemax tagstack tenc textwidth title toolbar tsl ttybuiltin tw undodir ur verbose viminfo warn wfh wig wildmode winfixwidth wiw wrap writedelay
++syn keyword vimOption contained	aleph ar autoindent backspace ballooneval bg bkc bsdir cb cfu cinkeys cmdwinheight columns completeopt cot cscopepathcomp cspc cuc deco dictionary directory ed encoding errorfile exrc fdls fencs fileformats fmr foldlevel foldtext fsync gfs gtl guioptions hf hk hlsearch imak ims indentexpr is isp keywordprg lazyredraw lispwords ls makeef maxmapdepth mfd mmd modified mousemodel msm numberwidth operatorfunc pastetoggle pexpr pmbfn printexpr pt readonly ri rs sb scrollbind secure shcf shelltemp shortmess showtabline slm sn spellcapcheck splitright ssop stmp swapfile sxq tabstop tal term tf titlelen toolbariconsize tsr ttyfast tx undofile ut verbosefile virtualedit wb wfw wildchar wildoptions winheight wm wrapmargin ws
++syn keyword vimOption contained	allowrevins arab autoread backup balloonexpr bh bl bsk cc ch cino cmp com concealcursor cp cscopeprg csprg cul def diff display edcompatible endofline errorformat fcl fdm fex filetype fo foldlevelstart formatexpr ft gfw gtt guipty hh hkmap ic imc imsearch indentkeys isf isprint km lbr list lsp makeprg maxmem mh mmp more mouses mzq nuw opfunc patchexpr pfn popt printfont pumheight redrawtime rightleft rtp sbo scrolljump sel shell shelltype shortname shq sm so spellfile spr st sts swapsync syn tag tb termbidi tgst titleold top ttimeout ttym uc undolevels vb vfile visualbell wc wh wildcharm wim winminheight wmh wrapscan ww
++syn keyword vimOption contained	altkeymap arabic autowrite backupcopy bdir bin bomb bt ccv charconvert cinoptions cms comments conceallevel cpo cscopequickfix csqf cursorbind define diffexpr dy ef eol esckeys fcs fdn ff fillchars foldclose foldmarker formatlistpat gcr ghr guicursor guitablabel hi hkmapp icon imcmdline inc indk isfname joinspaces kmp lcs listchars lw mat maxmempattern mis mmt mouse mouseshape mzquantum odev osfiletype patchmode ph preserveindent printheader pvh relativenumber rightleftcmd ru sbr scrolloff selection shellcmdflag shellxescape showbreak si smartcase softtabstop spelllang sps sta su swb synmaxcol tagbsearch tbi termencoding thesaurus titlestring 
+ 
+ " vimOptions: These are the turn-off setting variants {{{2
+-syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopetag nocsverb nocursorbind nodeco nodiff noeb noek noeol noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowinfixheight nowiv nowrap nowrite nowritebackup
+-syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopeverbose nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
+-syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocst nocul nocursorline nodg noea noedcompatible 
++syn keyword vimOption contained	noacd noallowrevins noantialias noarabic noarshape noautoread noaw noballooneval nobinary nobk nobuflisted nocin noconfirm nocopyindent nocscopetag nocsverb nocursorbind nodeco nodiff noeb noek noequalalways noesckeys noex noexrc nofk nofoldenable nogdefault nohid nohk nohkmapp nohls noic noignorecase noimc noimd noincsearch noinfercase nois nojs nolbr nolisp noloadplugins nolz nomacatsui nomh nomod nomodifiable nomore nomousefocus nonu noodev nopaste nopreserveindent noprompt noreadonly noremap norevins norightleft nornu nors noruler nosc noscrollbind nosecure noshellslash noshiftround noshowcmd noshowmatch nosi nosmartcase nosmarttab nosn nospell nosplitright nosr nosta nostmp noswf notagbsearch notagstack notbidi notermbidi notextauto notf notildeop notitle notop nottimeout nottyfast novb nowa nowb nowfh nowildignorecase* * nowinfixheight nowiv nowrap nowrite nowritebackup
++syn keyword vimOption contained	noai noaltkeymap noar noarabicshape noautochdir noautowrite noawa nobeval nobiosk nobl nocf nocindent noconsk nocp nocscopeverbose nocuc nocursorcolumn nodelcombine nodigraph noed noendofline noerrorbells noet noexpandtab nofen nofkmap nogd noguipty nohidden nohkmap nohkp nohlsearch noicon noim noimcmdline noimdisable noinf noinsertmode nojoinspaces nolazyredraw nolinebreak nolist nolpl noma nomagic noml nomodeline nomodified nomousef nomousehide nonumber noopendevice nopi nopreviewwindow nopvw norelativenumber norestorescreen nori norl noro noru nosb noscb noscs nosft noshelltemp noshortname noshowfulltag noshowmode nosm nosmartindent nosmd nosol nosplitbelow nospr nossl nostartofline noswapfile nota notagrelative notbi notbs noterse notextmode notgst notimeout noto notr nottybuiltin notx novisualbell nowarn noweirdinvert nowfw nowildmenu nowinfixwidth nowmnu nowrapscan nowriteany nows
++syn keyword vimOption contained	noakm noanti noarab noari noautoindent noautowriteall nobackup nobin nobioskey nobomb noci nocompatible noconskey nocrb nocst nocul nocursorline nodg noea noedcompatible noeol 
+ 
+ " vimOptions: These are the invertible variants {{{2
+-syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscopetag invcsverb invcursorbind invdeco invdiff inveb invek inveol inverrorbells invet invexpandtab invfen invfkmap invgd invguipty invhidden invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invvisualbell invwarn invweirdinvert invwfw invwinfixheight invwiv invwrap invwrite invwritebackup
+-syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopeverbose invcuc invcursorcolumn invdelcombine invdigraph inved invendofline invequalalways invesckeys invex invexrc invfk invfoldenable invgdefault invhid invhk invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invvb invwa invwb invwfh invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
+-syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcst invcul invcursorline invdg invea invedcompatible 
++syn keyword vimOption contained	invacd invallowrevins invantialias invarabic invarshape invautoread invaw invballooneval invbinary invbk invbuflisted invcin invconfirm invcopyindent invcscopetag invcsverb invcursorbind invdeco invdiff inveb invek invequalalways invesckeys invex invexrc invfk invfoldenable invgdefault invhid invhk invhkmapp invhls invic invignorecase invimc invimd invincsearch invinfercase invis invjs invlbr invlisp invloadplugins invlz invmacatsui invmh invmod invmodifiable invmore invmousefocus invnu invodev invpaste invpreserveindent invprompt invreadonly invremap invrevins invrightleft invrnu invrs invruler invsc invscrollbind invsecure invshellslash invshiftround invshowcmd invshowmatch invsi invsmartcase invsmarttab invsn invspell invsplitright invsr invsta invstmp invswf invtagbsearch invtagstack invtbidi invtermbidi invtextauto invtf invtildeop invtitle invtop invttimeout invttyfast invvb invwa invwb invwfh invwildignorecase* * invwinfixheight invwiv invwrap invwrite invwritebackup
++syn keyword vimOption contained	invai invaltkeymap invar invarabicshape invautochdir invautowrite invawa invbeval invbiosk invbl invcf invcindent invconsk invcp invcscopeverbose invcuc invcursorcolumn invdelcombine invdigraph inved invendofline inverrorbells invet invexpandtab invfen invfkmap invgd invguipty invhidden invhkmap invhkp invhlsearch invicon invim invimcmdline invimdisable invinf invinsertmode invjoinspaces invlazyredraw invlinebreak invlist invlpl invma invmagic invml invmodeline invmodified invmousef invmousehide invnumber invopendevice invpi invpreviewwindow invpvw invrelativenumber invrestorescreen invri invrl invro invru invsb invscb invscs invsft invshelltemp invshortname invshowfulltag invshowmode invsm invsmartindent invsmd invsol invsplitbelow invspr invssl invstartofline invswapfile invta invtagrelative invtbi invtbs invterse invtextmode invtgst invtimeout invto invtr invttybuiltin invtx invvisualbell invwarn invweirdinvert invwfw invwildmenu invwinfixwidth invwmnu invwrapscan invwriteany invws
++syn keyword vimOption contained	invakm invanti invarab invari invautoindent invautowriteall invbackup invbin invbioskey invbomb invci invcompatible invconskey invcrb invcst invcul invcursorline invdg invea invedcompatible inveol 
+ 
+ " termcap codes (which can also be set) {{{2
+ syn keyword vimOption contained	t_AB t_al t_bc t_ce t_cl t_Co t_cs t_Cs t_CS t_CV t_da t_db t_dl t_DL t_EI t_F1 t_F2 t_F3 t_F4 t_F5 t_F6 t_F7 t_F8 t_F9 t_fs t_IE t_IS t_k1 t_K1 t_k2 t_k3 t_K3 t_k4 t_K4 t_k5 t_K5 t_k6 t_K6 t_k7 t_K7 t_k8 t_K8 t_k9 t_K9 t_KA t_kb t_kB t_KB t_KC t_kd t_kD t_KD t_ke t_KE t_KF t_KG t_kh t_KH t_kI t_KI t_KJ t_KK t_kl t_KL t_kN t_kP t_kr t_ks t_ku t_le t_mb t_md t_me t_mr t_ms t_nd t_op t_RI t_RV t_Sb t_se t_Sf t_SI t_so t_sr t_te t_ti t_ts t_ue t_us t_ut t_vb t_ve t_vi t_vs t_WP t_WS t_xs t_ZH t_ZR
+@@ -59,7 +62,7 @@
+ 
+ " AutoCmd Events {{{2
+ syn case ignore
+-syn keyword vimAutoEvent contained	BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
++syn keyword vimAutoEvent contained	BufAdd BufCreate BufDelete BufEnter BufFilePost BufFilePre BufHidden BufLeave BufNew BufNewFile BufRead BufReadCmd BufReadPost BufReadPre BufUnload BufWinEnter BufWinLeave BufWipeout BufWrite BufWriteCmd BufWritePost BufWritePre Cmd-event CmdwinEnter CmdwinLeave ColorScheme CursorHold CursorHoldI CursorMoved CursorMovedI EncodingChanged FileAppendCmd FileAppendPost FileAppendPre FileChangedRO FileChangedShell FileChangedShellPost FileEncoding FileReadCmd FileReadPost FileReadPre FileType FileWriteCmd FileWritePost FileWritePre FilterReadPost FilterReadPre FilterWritePost FilterWritePre FocusGained FocusLost FuncUndefined GUIEnter GUIFailed InsertChange InsertCharPre InsertEnter InsertLeave MenuPopup QuickFixCmdPost QuickFixCmdPre RemoteReply SessionLoadPost ShellCmdPost ShellFilterPost SourceCmd SourcePre SpellFileMissing StdinReadPost StdinReadPre SwapExists Syntax TabEnter TabLeave TermChanged TermResponse User UserGettingBored VimEnter VimLeave VimLeavePre VimResized WinEnter WinLeave 
+ 
+ " Highlight commonly used Groupnames {{{2
+ syn keyword vimGroup contained	Comment Constant String Character Number Boolean Float Identifier Function Statement Conditional Repeat Label Operator Keyword Exception PreProc Include Define Macro PreCondit Type StorageClass Structure Typedef Special SpecialChar Tag Delimiter SpecialComment Debug Underlined Ignore Error Todo 
+@@ -70,11 +73,11 @@
+ syn case match
+ 
+ " Function Names {{{2
+-syn keyword vimFuncName contained	abs append argv atan2 bufexists bufname byte2line ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert items len line localtime map match matchdelete matchstr min mode nextnonblank pathshorten prevnonblank pumvisible readfile reltimestr remote_foreground remote_read remove repeat reverse search searchpair searchpos serverlist setcmdpos setloclist setpos setreg settabwinvar shellescape sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol winbufnr winheight winnr winrestview winwidth
+-syn keyword vimFuncName contained	acos argc asin browse buflisted bufnr byteidx changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave isdirectory join libcall line2byte log maparg matchadd matchend max mkdir mzeval nr2char pow printf range reltime remote_expr remote_peek remote_send rename resolve round searchdecl searchpairpos server2client setbufvar setline setmatches setqflist settabvar setwinvar simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode wincol winline winrestcmd winsaveview writefile
+-syn keyword vimFuncName contained	add argidx atan browsedir bufloaded bufwinnr call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret islocked keys libcallnr lispindent log10 mapcheck matcharg matchlist 
++syn keyword vimFuncName contained	abs and argidx atan browsedir bufloaded bufwinnr call char2nr col complete_check cos cscope_connection delete diff_hlID eval exists expr8 filereadable finddir floor fnamemodify foldlevel foreground get getchar getcmdpos getfontname getftime getloclist getpos getregtype getwinposx glob has_key histadd histnr hostname index inputlist inputsecret isdirectory join libcall line2byte log map match matchdelete matchstr mkdir nextnonblank pathshorten printf pyeval reltime remote_foreground remote_read remove repeat reverse search searchpair searchpos serverlist setcmdpos setloclist setpos setreg settabwinvar shellescape simplify sinh soundfold spellsuggest sqrt str2nr strdisplaywidth stridx strlen strridx strwidth substitute synID synIDtrans system tabpagenr tagfiles tan tempname toupper trunc undofile values visualmode wincol winline winrestcmd winsaveview writefile
++syn keyword vimFuncName contained	acos append argv atan2 bufexists bufname byte2line ceil cindent complete confirm cosh cursor did_filetype empty eventhandler exp extend filewritable findfile fmod foldclosed foldtext function getbufline getcharmod getcmdtype getfperm getftype getmatches getqflist gettabvar getwinposy globpath haslocaldir histdel hlexists iconv input inputrestore insert islocked keys libcallnr lispindent log10 maparg matchadd matchend max mode nr2char pow pumvisible range reltimestr remote_peek remote_send rename resolve round searchdecl searchpairpos server2client setbufvar setline setmatches setqflist settabvar setwinvar shiftwidth sin sort spellbadword split str2float strchars strftime string strpart strtrans submatch synconcealed synIDattr synstack tabpagebuflist tabpagewinnr taglist tanh tolower tr type undotree virtcol winbufnr winheight winnr winrestview winwidth xor
++syn keyword vimFuncName contained	add argc asin browse buflisted bufnr byteidx changenr clearmatches complete_add copy count deepcopy diff_filler escape executable expand feedkeys filter float2nr fnameescape foldclosedend foldtextresult garbagecollect getbufvar getcmdline getcwd getfsize getline getpid getreg gettabwinvar getwinvar has hasmapto histget hlID indent inputdialog inputsave invert items len line localtime luaeval mapcheck matcharg matchlist min mzeval or prevnonblank py3eval readfile remote_expr 
+ 
+-"--- syntax above generated by mkvimvim ---
++"--- syntax here and above generated by mkvimvim ---
+ " Special Vim Highlighting (not automatic) {{{1
+ 
+ " commands not picked up by the generator (due to non-standard format)
+@@ -93,17 +96,17 @@
+ 
+ " Numbers {{{2
+ " =======
+-syn match vimNumber	"\<\d\+\([lL]\|\.\d\+\)\="
+-syn match vimNumber	"-\d\+\([lL]\|\.\d\+\)\="
++syn match vimNumber	"\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
++syn match vimNumber	"-\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\="  skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
+ syn match vimNumber	"\<0[xX]\x\+"
+ syn match vimNumber	"#\x\{6}"
+ 
+ " All vimCommands are contained by vimIsCommands. {{{2
+ syn match vimCmdSep	"[:|]\+"	skipwhite nextgroup=vimAddress,vimAutoCmd,vimCommand,vimExtCmd,vimFilter,vimLet,vimMap,vimMark,vimSet,vimSyntax,vimUserCmd
+ syn match vimIsCommand	"\<\h\w*\>"	contains=vimCommand
+-syn match vimVar		"\<[bwglsav]:\K\k*\>"
+-syn match vimVar        contained	"\<\K\k*\>"
+-syn match vimFBVar      contained   "\<[bwglsav]:\K\k*\>"
++syn match vimVar        contained	"\<\h\w*\>"
++syn match vimVar		"\<[bwglsav]:\h\w*\>"
++syn match vimFBVar      contained   "\<[bwglsav]:\h\w*\>"
+ syn keyword vimCommand  contained	in
+ 
+ " Insertions And Appends: insert append {{{2
+@@ -116,14 +119,14 @@
+ " =======
+ syn match   vimBehave	"\<be\%[have]\>" skipwhite nextgroup=vimBehaveModel,vimBehaveError
+ syn keyword vimBehaveModel contained	mswin	xterm
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nobehaveerror")
+  syn match   vimBehaveError contained	"[^ ]\+"
+ endif
+ 
+ " Filetypes {{{2
+ " =========
+ syn match   vimFiletype	"\<filet\%[ype]\(\s\+\I\i*\)*"	skipwhite contains=vimFTCmd,vimFTOption,vimFTError
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimFTError")
+  syn match   vimFTError  contained	"\I\i*"
+ endif
+ syn keyword vimFTCmd    contained	filet[ype]
+@@ -131,41 +134,42 @@
+ 
+ " Augroup : vimAugroupError removed because long augroups caused sync'ing problems. {{{2
+ " ======= : Trade-off: Increasing synclines with slower editing vs augroup END error checking.
+-syn cluster vimAugroupList	contains=vimIsCommand,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
++syn cluster vimAugroupList	contains=vimIsCommand,vimCommand,vimUserCmd,vimExecute,vimNotFunc,vimFuncName,vimFunction,vimFunctionError,vimLineComment,vimSpecFile,vimOper,vimNumber,vimOperParen,vimComment,vimString,vimSubst,vimMark,vimRegister,vimAddress,vimFilter,vimCmplxRepeat,vimComment,vimLet,vimSet,vimAutoCmd,vimRegion,vimSynLine,vimNotation,vimCtrlChar,vimFuncVar,vimContinue
+ if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'a'
+- syn region  vimAugroup	fold start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
++ syn region  vimAugroup	fold start="\<aug\%[roup]\>\s\+\h\w*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
+ else
+- syn region  vimAugroup	start="\<aug\%[roup]\>\s\+\K\k*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
++ syn region  vimAugroup	start="\<aug\%[roup]\>\s\+\h\w*" end="\<aug\%[roup]\>\s\+[eE][nN][dD]\>"	contains=vimAugroupKey,vimAutoCmd,@vimAugroupList keepend
+ endif
+ syn match   vimAugroup	"aug\%[roup]!" contains=vimAugroupKey
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noaugrouperror")
+  syn match   vimAugroupError	"\<aug\%[roup]\>\s\+[eE][nN][dD]\>"
+ endif
+ syn keyword vimAugroupKey contained	aug[roup]
+ 
+ " Operators: {{{2
+ " =========
+-syn cluster	vimOperGroup	contains=vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
++" COMBAK: vimOperParen used to have "oneline"
++syn cluster	vimOperGroup	contains=vimEnvvar,vimFunc,vimFuncVar,vimOper,vimOperParen,vimNumber,vimString,vimRegister,vimContinue
+ syn match	vimOper	"\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}"	skipwhite nextgroup=vimString,vimSpecFile
+ syn match	vimOper	"||\|&&\|[-+.]"	skipwhite nextgroup=vimString,vimSpecFile
+-syn region	vimOperParen 	oneline matchgroup=vimParenSep	start="(" end=")" contains=@vimOperGroup
+-syn region	vimOperParen	oneline matchgroup=vimSep	start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
+-if !exists("g:vimsyn_noerror")
++syn region	vimOperParen 	matchgroup=vimParenSep	start="(" end=")" contains=@vimOperGroup
++syn region	vimOperParen	matchgroup=vimSep	start="{" end="}" contains=@vimOperGroup nextgroup=vimVar,vimFuncVar
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_noopererror")
+  syn match	vimOperError	")"
+ endif
+ 
+ " Functions : Tag is provided for those who wish to highlight tagged functions {{{2
+ " =========
+ syn cluster	vimFuncList	contains=vimCommand,vimFunctionError,vimFuncKey,Tag,vimFuncSID
+-syn cluster	vimFuncBodyList	contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUserCommand
++syn cluster	vimFuncBodyList	contains=vimAbb,vimAddress,vimAugroupKey,vimAutoCmd,vimCmplxRepeat,vimComment,vimComment,vimContinue,vimCtrlChar,vimEcho,vimEchoHL,vimExecute,vimIf,vimIsCommand,vimFBVar,vimFunc,vimFunction,vimFuncVar,vimHighlight,vimIsCommand,vimLet,vimLineComment,vimMap,vimMark,vimNorm,vimNotation,vimNotFunc,vimNumber,vimOper,vimOperParen,vimRegion,vimRegister,vimSet,vimSpecFile,vimString,vimSubst,vimSynLine,vimUnmap,vimUserCommand
+ syn match	vimFunction	"\<fu\%[nction]!\=\s\+\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)\=\%(\i\|[#.]\|{.\{-1,}}\)*\ze\s*("	contains=@vimFuncList nextgroup=vimFuncBody
+ 
+ if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'f'
+  syn region	vimFuncBody  contained	fold start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
+-else                                                                                                          
++else
+  syn region	vimFuncBody  contained	start="\ze("	matchgroup=vimCommand end="\<\(endf\>\|endfu\%[nction]\>\)"		contains=@vimFuncBodyList
+ endif
+-syn match	vimFuncVar   contained	"a:\(\K\k*\|\d\+\)"
++syn match	vimFuncVar   contained	"a:\(\h\w*\|\d\+\)"
+ syn match	vimFuncSID   contained	"\c<sid>\|\<s:"
+ syn keyword	vimFuncKey   contained	fu[nction]
+ syn match	vimFuncBlank contained	"\s\+"
+@@ -194,12 +198,12 @@
+ syn match	vimUserAttrb	contained	"-bang\=\>"	contains=vimOper,vimUserAttrbKey
+ syn match	vimUserAttrb	contained	"-bar\>"	contains=vimOper,vimUserAttrbKey
+ syn match	vimUserAttrb	contained	"-re\%[gister]\>"	contains=vimOper,vimUserAttrbKey
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_nousercmderror")
+  syn match	vimUserCmdError	contained	"\S\+\>"
+ endif
+ syn case ignore
+ syn keyword	vimUserAttrbKey   contained	bar	ban[g]	cou[nt]	ra[nge] com[plete]	n[args]	re[gister]
+-syn keyword	vimUserAttrbCmplt contained	augroup buffer command dir environment event expression file function help highlight mapping menu option shellcmd something tag tag_listfiles var
++syn keyword	vimUserAttrbCmplt contained	augroup buffer color command compiler cscope dir environment event expression file file_in_path filetype function help highlight locale mapping menu option shellcmd sign syntax tag tag_listfiles var
+ syn keyword	vimUserAttrbCmplt contained	custom customlist nextgroup=vimUserAttrbCmpltFunc,vimUserCmdError
+ syn match	vimUserAttrbCmpltFunc contained	",\%([sS]:\|<[sS][iI][dD]>\)\=\%(\h\w*\%(#\u\w*\)\+\|\u\w*\)"hs=s+1 nextgroup=vimUserCmdError
+ 
+@@ -241,7 +245,7 @@
+ syn cluster	vimSubstList	contains=vimPatSep,vimPatRegion,vimPatSepErr,vimSubstTwoBS,vimSubstRange,vimNotation
+ syn cluster	vimSubstRepList	contains=vimSubstSubstr,vimSubstTwoBS,vimNotation
+ syn cluster	vimSubstList	add=vimCollection
+-syn match	vimSubst	"\(:\+\s*\|^\s*\||\s*\)\<s\%[ubstitute][:[:alpha:]]\@!" nextgroup=vimSubstPat
++syn match	vimSubst	"\(:\+\s*\|^\s*\||\s*\)\<\%(s\%[ubstitute]\|sm\%[agic]\|sno\%[magic]\)[:[:alpha:]]\@!" nextgroup=vimSubstPat
+ syn match	vimSubst	"s\%[ubstitute][:#[:alpha:]]\@!"	nextgroup=vimSubstPat contained
+ syn match	vimSubst	"/\zss\%[ubstitute]\ze/"	nextgroup=vimSubstPat
+ syn match	vimSubst1       contained	"s\%[ubstitute]\>"	nextgroup=vimSubstPat
+@@ -267,7 +271,7 @@
+ syn match	vimMarkNumber	"[-+]\d\+"		nextgroup=vimSubst contained contains=vimOper
+ syn match	vimPlainMark contained	"'[a-zA-Z0-9]"
+ 
+-syn match	vimRegister	'[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":]'
++syn match	vimRegister	'[^,;[{]\zs"[a-zA-Z0-9.%#:_\-/]\ze[^a-zA-Z_":0-9]'
+ syn match	vimRegister	'\<norm\s\+\zs"[a-zA-Z0-9]'
+ syn match	vimRegister	'\<normal\s\+\zs"[a-zA-Z0-9]'
+ syn match	vimRegister	'@"'
+@@ -277,15 +281,15 @@
+ syn match	vimAddress	"%\ze\a"	skipwhite nextgroup=vimString,vimSubst1
+ 
+ syn match	vimFilter contained	"^!.\{-}\(|\|$\)"		contains=vimSpecFile
+-syn match	vimFilter contained	"\A!.\{-}\(|\|$\)"ms=s+1	contains=vimSpecFile
++syn match	vimFilter contained	"\A!.\{-}\(|\|$\)"ms=s+1	contains=vimSpecFile,vimFunction,vimFuncName,vimOperParen
+ 
+ " Complex repeats (:h complex-repeat) {{{2
+-syn match	vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]'lc=1
+-syn match	vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\)'
++syn match	vimCmplxRepeat	'[^a-zA-Z_/\\()]q[0-9a-zA-Z"]\>'lc=1
++syn match	vimCmplxRepeat	'@[0-9a-z".=@:]\ze\($\|[^a-zA-Z]\>\)'
+ 
+ " Set command and associated set-options (vimOptions) with comment {{{2
+ syn region	vimSet		matchgroup=vimCommand start="\<\%(setl\%[ocal]\|setg\%[lobal]\|se\%[t]\)\>" skip="\%(\\\\\)*\\." end="$" matchgroup=vimNotation end="<[cC][rR]>" keepend oneline contains=vimSetEqual,vimOption,vimErrSetting,vimComment,vimSetString,vimSetMod
+-syn region	vimSetEqual	contained	start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation oneline
++syn region	vimSetEqual	contained	start="[=:]\|[-+^]=" skip="\\\\\|\\\s" end="[| \t]\|$"me=e-1 contains=vimCtrlChar,vimSetSep,vimNotation,vimEnvvar oneline
+ syn region	vimSetString	contained	start=+="+hs=s+1	skip=+\\\\\|\\"+  end=+"+	contains=vimCtrlChar
+ syn match	vimSetSep	contained	"[,:]"
+ syn match	vimSetMod	contained	"&vim\=\|[!&?<]\|all&"
+@@ -318,13 +322,13 @@
+ " ====
+ syn match	vimMap		"\<map\>!\=\ze\s*[^(]" skipwhite nextgroup=vimMapMod,vimMapLhs
+ syn keyword	vimMap		cm[ap] cno[remap] im[ap] ino[remap] lm[ap] ln[oremap] nm[ap] nn[oremap] no[remap] om[ap] ono[remap] smap snor[emap] vm[ap] vn[oremap] xm[ap] xn[oremap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+-syn keyword	vimMap		mapc[lear]
++syn keyword	vimMap		mapc[lear] smapc[lear]
+ syn keyword	vimUnmap		cu[nmap] iu[nmap] lu[nmap] nun[map] ou[nmap] sunm[ap] unm[ap] unm[ap] vu[nmap] xu[nmap] skipwhite nextgroup=vimMapBang,vimMapMod,vimMapLhs
+ syn match	vimMapLhs	contained	"\S\+"			contains=vimNotation,vimCtrlChar skipwhite nextgroup=vimMapRhs
+ syn match	vimMapBang	contained	"!"			skipwhite nextgroup=vimMapMod,vimMapLhs
+ syn match	vimMapMod	contained	"\c<\(buffer\|expr\|\(local\)\=leader\|plug\|script\|sid\|unique\|silent\)\+>" contains=vimMapModKey,vimMapModErr skipwhite nextgroup=vimMapMod,vimMapLhs
+ syn match	vimMapRhs	contained	".*" contains=vimNotation,vimCtrlChar	skipnl nextgroup=vimMapRhsExtend
+-syn match	vimMapRhsExtend	contained	"^\s*\\.*$"			contains=vimContinue
++syn match	vimMapRhsExtend	contained	"^\s*\\.*$"			contains=vimNotation,vimCtrlChar,vimContinue	skipnl nextgroup=vimMapRhsExtend
+ syn case ignore
+ syn keyword	vimMapModKey	contained	buffer	expr	leader	localleader	plug	script	sid	silent	unique
+ syn case match
+@@ -344,7 +348,7 @@
+ " Angle-Bracket Notation (tnx to Michael Geddes) {{{2
+ " ======================
+ syn case ignore
+-syn match	vimNotation	"\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|space\|k\=\(page\)\=\(\|down\|up\)\)>" contains=vimBracket
++syn match	vimNotation	"\(\\\|<lt>\)\=<\([scamd]-\)\{0,4}x\=\(f\d\{1,2}\|[^ \t:]\|cr\|lf\|linefeed\|return\|k\=del\%[ete]\|bs\|backspace\|tab\|esc\|right\|left\|help\|undo\|insert\|ins\|k\=home\|k\=end\|kplus\|kminus\|kdivide\|kmultiply\|kenter\|kpoint\|space\|k\=\(page\)\=\(\|down\|up\|k\d\>\)\)>" contains=vimBracket
+ syn match	vimNotation	"\(\\\|<lt>\)\=<\([scam2-4]-\)\{0,4}\(right\|left\|middle\)\(mouse\)\=\(drag\|release\)\=>"	contains=vimBracket
+ syn match	vimNotation	"\(\\\|<lt>\)\=<\(bslash\|plug\|sid\|space\|bar\|nop\|nul\|lt\)>"		contains=vimBracket
+ syn match	vimNotation	'\(\\\|<lt>\)\=<C-R>[0-9a-z"%#:.\-=]'he=e-1			contains=vimBracket
+@@ -356,13 +360,13 @@
+ " User Function Highlighting {{{2
+ " (following Gautam Iyer's suggestion)
+ " ==========================
+-syn match vimFunc		"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimFuncName,vimUserFunc,vimExecute
+-syn match vimUserFunc contained	"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_.]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimNotation
++syn match vimFunc		"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\ze\s*("		contains=vimFuncName,vimUserFunc,vimExecute
++syn match vimUserFunc contained	"\%(\%([sSgGbBwWtTlL]:\|<[sS][iI][dD]>\)\=\%([a-zA-Z0-9_]\+\.\)*\I[a-zA-Z0-9_.]*\)\|\<\u[a-zA-Z0-9.]*\>\|\<if\>"	contains=vimNotation
+ syn match vimNotFunc	"\<if\>\|\<el\%[seif]\>\|\<return\>\|\<while\>"
+ 
+ " Errors And Warnings: {{{2
+ " ====================
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimfunctionerror")
+  syn match	vimFunctionError	"\s\zs[a-z0-9]\i\{-}\ze\s*("			contained contains=vimFuncKey,vimFuncBlank
+ " syn match	vimFunctionError	"\s\zs\%(<[sS][iI][dD]>\|[sSgGbBwWtTlL]:\)[0-9]\i\{-}\ze\s*("	contained contains=vimFuncKey,vimFuncBlank
+  syn match	vimElseIfErr	"\<else\s\+if\>"
+@@ -379,7 +383,7 @@
+ syn match	vimGroupList	contained	"@\=[^ \t,]*"	contains=vimGroupSpecial,vimPatSep
+ syn match	vimGroupList	contained	"@\=[^ \t,]*,"	nextgroup=vimGroupList contains=vimGroupSpecial,vimPatSep
+ syn keyword	vimGroupSpecial	contained	ALL	ALLBUT	CONTAINED	TOP
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsynerror")
+  syn match	vimSynError	contained	"\i\+"
+  syn match	vimSynError	contained	"\i\+="	nextgroup=vimGroupList
+ endif
+@@ -389,10 +393,11 @@
+ 
+ syn match	vimSyntax	"\<sy\%[ntax]\>"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
+ syn match	vimAuSyntax	contained	"\s+sy\%[ntax]"	contains=vimCommand skipwhite nextgroup=vimSynType,vimComment
++syn cluster vimFuncBodyList add=vimSyntax
+ 
+ " Syntax: case {{{2
+ syn keyword	vimSynType	contained	case	skipwhite nextgroup=vimSynCase,vimSynCaseError
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncaseerror")
+  syn match	vimSynCaseError	contained	"\i\+"
+ endif
+ syn keyword	vimSynCase	contained	ignore	match
+@@ -402,28 +407,32 @@
+ 
+ " Syntax: cluster {{{2
+ syn keyword	vimSynType	contained	cluster	skipwhite nextgroup=vimClusterName
+-syn region	vimClusterName	contained	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
++syn region	vimClusterName	contained	matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" matchgroup=vimSep end="$\||" contains=vimGroupAdd,vimGroupRem,vimSynContains,vimSynError
+ syn match	vimGroupAdd	contained	"add="	nextgroup=vimGroupList
+ syn match	vimGroupRem	contained	"remove="	nextgroup=vimGroupList
++syn cluster vimFuncBodyList add=vimSynType,vimGroupAdd,vimGroupRem
+ 
+ " Syntax: include {{{2
+ syn keyword	vimSynType	contained	include	skipwhite nextgroup=vimGroupList
++syn cluster vimFuncBodyList add=vimSynType
+ 
+ " Syntax: keyword {{{2
+ syn cluster	vimSynKeyGroup	contains=vimSynNextgroup,vimSynKeyOpt,vimSynKeyContainedin
+ syn keyword	vimSynType	contained	keyword	skipwhite nextgroup=vimSynKeyRegion
+-syn region	vimSynKeyRegion	contained oneline keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
++syn region	vimSynKeyRegion	contained oneline keepend	matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" matchgroup=vimSep end="|\|$" contains=@vimSynKeyGroup
+ syn match	vimSynKeyOpt	contained	"\<\(conceal\|contained\|transparent\|skipempty\|skipwhite\|skipnl\)\>"
++syn cluster vimFuncBodyList add=vimSynType
+ 
+ " Syntax: match {{{2
+ syn cluster	vimSynMtchGroup	contains=vimMtchComment,vimSynContains,vimSynError,vimSynMtchOpt,vimSynNextgroup,vimSynRegPat,vimNotation
+ syn keyword	vimSynType	contained	match	skipwhite nextgroup=vimSynMatchRegion
+-syn region	vimSynMatchRegion	contained keepend	matchgroup=vimGroupName start="\k\+" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
++syn region	vimSynMatchRegion	contained keepend	matchgroup=vimGroupName start="\h\w*" matchgroup=vimSep end="|\|$" contains=@vimSynMtchGroup
+ syn match	vimSynMtchOpt	contained	"\<\(conceal\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|extend\|skipnl\|fold\)\>"
+ if has("conceal")
+- syn match	vimSynMtchOpt	contained	"\<cchar="	nextgroup=VimSynMtchCchar
++ syn match	vimSynMtchOpt	contained	"\<cchar="	nextgroup=vimSynMtchCchar
+  syn match	vimSynMtchCchar	contained	"\S"
+ endif
++syn cluster vimFuncBodyList add=vimSynMtchGroup
+ 
+ " Syntax: off and on {{{2
+ syn keyword	vimSynType	contained	enable	list	manual	off	on	reset
+@@ -432,7 +441,7 @@
+ syn cluster	vimSynRegPatGroup	contains=vimPatSep,vimNotPatSep,vimSynPatRange,vimSynNotPatRange,vimSubstSubstr,vimPatRegion,vimPatSepErr,vimNotation
+ syn cluster	vimSynRegGroup	contains=vimSynContains,vimSynNextgroup,vimSynRegOpt,vimSynReg,vimSynMtchGrp
+ syn keyword	vimSynType	contained	region	skipwhite nextgroup=vimSynRegion
+-syn region	vimSynRegion	contained keepend	matchgroup=vimGroupName start="\k\+" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
++syn region	vimSynRegion	contained keepend	matchgroup=vimGroupName start="\h\w*" skip="\\\\\|\\|" end="|\|$" contains=@vimSynRegGroup
+ syn match	vimSynRegOpt	contained	"\<\(conceal\(ends\)\=\|transparent\|contained\|excludenl\|skipempty\|skipwhite\|display\|keepend\|oneline\|extend\|skipnl\|fold\)\>"
+ syn match	vimSynReg	contained	"\(start\|skip\|end\)="he=e-1	nextgroup=vimSynRegPat
+ syn match	vimSynMtchGrp	contained	"matchgroup="	nextgroup=vimGroup,vimHLGroup
+@@ -444,11 +453,12 @@
+ syn region	vimSynPatRange	contained	start="\["	skip="\\\\\|\\]"   end="]"
+ syn match	vimSynNotPatRange	contained	"\\\\\|\\\["
+ syn match	vimMtchComment	contained	'"[^"]\+$'
++syn cluster vimFuncBodyList add=vimSynType
+ 
+ " Syntax: sync {{{2
+ " ============
+ syn keyword vimSynType	contained	sync	skipwhite	nextgroup=vimSyncC,vimSyncLines,vimSyncMatch,vimSyncError,vimSyncLinebreak,vimSyncLinecont,vimSyncRegion
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimsyncerror")
+  syn match	vimSyncError	contained	"\i\+"
+ endif
+ syn keyword	vimSyncC	contained	ccomment	clear	fromstart
+@@ -457,9 +467,9 @@
+ syn match	vimSyncLinebreak	contained	"\<linebreaks="	skipwhite	nextgroup=vimNumber
+ syn keyword	vimSyncLinecont	contained	linecont	skipwhite	nextgroup=vimSynRegPat
+ syn match	vimSyncLines	contained	"\(min\|max\)\=lines="	nextgroup=vimNumber
+-syn match	vimSyncGroupName	contained	"\k\+"	skipwhite	nextgroup=vimSyncKey
++syn match	vimSyncGroupName	contained	"\h\w*"	skipwhite	nextgroup=vimSyncKey
+ syn match	vimSyncKey	contained	"\<groupthere\|grouphere\>"	skipwhite nextgroup=vimSyncGroup
+-syn match	vimSyncGroup	contained	"\k\+"	skipwhite	nextgroup=vimSynRegPat,vimSyncNone
++syn match	vimSyncGroup	contained	"\h\w*"	skipwhite	nextgroup=vimSynRegPat,vimSyncNone
+ syn keyword	vimSyncNone	contained	NONE
+ 
+ " Additional IsCommand, here by reasons of precedence {{{2
+@@ -469,9 +479,12 @@
+ " Highlighting {{{2
+ " ============
+ syn cluster	vimHighlightCluster		contains=vimHiLink,vimHiClear,vimHiKeyList,vimComment
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_novimhictermerror")
++ syn match	vimHiCtermError	contained	"[^0-9]\i*"
++endif
+ syn match	vimHighlight	"\<hi\%[ghlight]\>"	skipwhite nextgroup=vimHiBang,@vimHighlightCluster
+ syn match	vimHiBang	contained	"!"	skipwhite nextgroup=@vimHighlightCluster
+-       	
++
+ syn match	vimHiGroup	contained	"\i\+"
+ syn case ignore
+ syn keyword	vimHiAttrib	contained	none bold inverse italic reverse standout underline undercurl
+@@ -480,36 +493,36 @@
+ syn match	vimHiAttribList	contained	"\i\+"	contains=vimHiAttrib
+ syn match	vimHiAttribList	contained	"\i\+,"he=e-1	contains=vimHiAttrib nextgroup=vimHiAttribList
+ syn case ignore
+-syn keyword	vimHiCtermColor	contained	black blue brown cyan darkBlue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
++syn keyword	vimHiCtermColor	contained	black blue brown cyan darkblue darkcyan darkgray darkgreen darkgrey darkmagenta darkred darkyellow gray green grey lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightred magenta red white yellow
++syn match	vimHiCtermColor	contained	"\<color\d\{1,3}\>"
+ 
+ syn case match
+ syn match	vimHiFontname	contained	"[a-zA-Z\-*]\+"
+ syn match	vimHiGuiFontname	contained	"'[a-zA-Z\-* ]\+'"
+ syn match	vimHiGuiRgb	contained	"#\x\{6}"
+-if !exists("g:vimsyn_noerror")
+- syn match	vimHiCtermError	contained	"[^0-9]\i*"
+-endif
+ 
+ " Highlighting: hi group key=arg ... {{{2
+ syn cluster	vimHiCluster contains=vimGroup,vimHiGroup,vimHiTerm,vimHiCTerm,vimHiStartStop,vimHiCtermFgBg,vimHiGui,vimHiGuiFont,vimHiGuiFgBg,vimHiKeyError,vimNotation
+ syn region	vimHiKeyList	contained oneline start="\i\+" skip="\\\\\|\\|" end="$\||"	contains=@vimHiCluster
+-if !exists("g:vimsyn_noerror")
++if !exists("g:vimsyn_noerror") && !exists("g:vimsyn_vimhikeyerror")
+  syn match	vimHiKeyError	contained	"\i\+="he=e-1
+ endif
+ syn match	vimHiTerm	contained	"\cterm="he=e-1		nextgroup=vimHiAttribList
+ syn match	vimHiStartStop	contained	"\c\(start\|stop\)="he=e-1	nextgroup=vimHiTermcap,vimOption
+ syn match	vimHiCTerm	contained	"\ccterm="he=e-1		nextgroup=vimHiAttribList
+-syn match	vimHiCtermFgBg	contained	"\ccterm[fb]g="he=e-1	nextgroup=vimNumber,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
++syn match	vimHiCtermFgBg	contained	"\ccterm[fb]g="he=e-1	nextgroup=vimHiNmbr,vimHiCtermColor,vimFgBgAttrib,vimHiCtermError
+ syn match	vimHiGui	contained	"\cgui="he=e-1		nextgroup=vimHiAttribList
+ syn match	vimHiGuiFont	contained	"\cfont="he=e-1		nextgroup=vimHiFontname
+ syn match	vimHiGuiFgBg	contained	"\cgui\%([fb]g\|sp\)="he=e-1	nextgroup=vimHiGroup,vimHiGuiFontname,vimHiGuiRgb,vimFgBgAttrib
+ syn match	vimHiTermcap	contained	"\S\+"		contains=vimNotation
++syn match	vimHiNmbr	contained	'\d\+'
+ 
+ " Highlight: clear {{{2
+ syn keyword	vimHiClear	contained	clear	nextgroup=vimHiGroup
+ 
+ " Highlight: link {{{2
+-syn region	vimHiLink	contained oneline matchgroup=vimCommand start="\<\(def\s\+\)\=link\>\|\<def\>" end="$"	contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
++syn region	vimHiLink	contained oneline matchgroup=vimCommand start="\(\<hi\%[ghlight]\s\+\)\@<=\(\(def\%[ault]\s\+\)\=link\>\|\<def\>\)" end="$"	contains=vimHiGroup,vimGroup,vimHLGroup,vimNotation
++syn cluster vimFuncBodyList add=vimHiLink
+ 
+ " Control Characters {{{2
+ " ==================
+@@ -527,8 +540,8 @@
+ " ====================
+ syn match	vimSearch	'^\s*[/?].*'		contains=vimSearchDelim
+ syn match	vimSearchDelim	'^\s*\zs[/?]\|[/?]$'	contained
+-syn region	vimGlobal	matchgroup=Statement start='\<g\%[lobal]!\=/' skip='\\.' end='/'
+-syn region	vimGlobal	matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'
++syn region	vimGlobal	matchgroup=Statement start='\<g\%[lobal]!\=/'  skip='\\.' end='/'	skipwhite nextgroup=vimSubst
++syn region	vimGlobal	matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' end='/'	skipwhite nextgroup=vimSubst
+ 
+ " Scripts  : perl,ruby : Benoit Cerrina {{{2
+ " =======    python,tcl: Johannes Zellner
+@@ -548,11 +561,16 @@
+ endif
+ 
+ " [-- lua --] {{{3
+-let s:luapath= expand("<sfile>:p:h")."/lua.vim"
++let s:luapath= fnameescape(expand("<sfile>:p:h")."/lua.vim")
+ if !filereadable(s:luapath)
+- let s:luapath= globpath(&rtp,"syntax/lua.vim")
++ for s:luapath in split(globpath(&rtp,"syntax/lua.vim"),"\n")
++  if filereadable(fnameescape(s:luapath))
++   let s:luapath= fnameescape(s:luapath)
++   break
++  endif
++ endfor
+ endif
+-if (g:vimsyn_embed =~ 'p' && has("lua")) && filereadable(s:luapath)
++if (g:vimsyn_embed =~ 'l' && has("lua")) && filereadable(s:luapath)
+  unlet! b:current_syntax
+  exe "syn include @vimLuaScript ".s:luapath
+  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'l'
+@@ -570,9 +588,14 @@
+ unlet s:luapath
+ 
+ " [-- perl --] {{{3
+-let s:perlpath= expand("<sfile>:p:h")."/perl.vim"
++let s:perlpath= fnameescape(expand("<sfile>:p:h")."/perl.vim")
+ if !filereadable(s:perlpath)
+- let s:perlpath= globpath(&rtp,"syntax/perl.vim")
++ for s:perlpath in split(globpath(&rtp,"syntax/perl.vim"),"\n")
++  if filereadable(fnameescape(s:perlpath))
++   let s:perlpath= fnameescape(s:perlpath)
++   break
++  endif
++ endfor
+ endif
+ if (g:vimsyn_embed =~ 'p' && has("perl")) && filereadable(s:perlpath)
+  unlet! b:current_syntax
+@@ -592,9 +615,14 @@
+ unlet s:perlpath
+ 
+ " [-- ruby --] {{{3
+-let s:rubypath= expand("<sfile>:p:h")."/ruby.vim"
++let s:rubypath= fnameescape(expand("<sfile>:p:h")."/ruby.vim")
+ if !filereadable(s:rubypath)
+- let s:rubypath= globpath(&rtp,"syntax/ruby.vim")
++ for s:rubypath in split(globpath(&rtp,"syntax/ruby.vim"),"\n")
++  if filereadable(fnameescape(s:rubypath))
++   let s:rubypath= fnameescape(s:rubypath)
++   break
++  endif
++ endfor
+ endif
+ if (g:vimsyn_embed =~ 'r' && has("ruby")) && filereadable(s:rubypath)
+  unlet! b:current_syntax
+@@ -613,11 +641,16 @@
+ unlet s:rubypath
+ 
+ " [-- python --] {{{3
+-let s:pythonpath= expand("<sfile>:p:h")."/python.vim"
++let s:pythonpath= fnameescape(expand("<sfile>:p:h")."/python.vim")
+ if !filereadable(s:pythonpath)
+- let s:pythonpath= globpath(&rtp,"syntax/python.vim")
++ for s:pythonpath in split(globpath(&rtp,"syntax/python.vim"),"\n")
++  if filereadable(fnameescape(s:pythonpath))
++   let s:pythonpath= fnameescape(s:pythonpath)
++   break
++  endif
++ endfor
+ endif
+-if (g:vimsyn_embed =~ 'P' && has("python")) && filereadable(s:pythonpath)
++if g:vimsyn_embed =~ 'P' && (has("python") || has("python3")) && filereadable(s:pythonpath)
+  unlet! b:current_syntax
+  exe "syn include @vimPythonScript ".s:pythonpath
+  if exists("g:vimsyn_folding") && g:vimsyn_folding =~ 'P'
+@@ -642,9 +675,14 @@
+  let s:trytcl= 1
+ endif
+ if s:trytcl
+- let s:tclpath= expand("<sfile>:p:h")."/tcl.vim"
++ let s:tclpath= fnameescape(expand("<sfile>:p:h")."/tcl.vim")
+  if !filereadable(s:tclpath)
+-  let s:tclpath= globpath(&rtp,"syntax/tcl.vim")
++  for s:tclpath in split(globpath(&rtp,"syntax/tcl.vim"),"\n")
++   if filereadable(fnameescape(s:tclpath))
++    let s:tclpath= fnameescape(s:tclpath)
++    break
++   endif
++  endfor
+  endif
+  if (g:vimsyn_embed =~ 't' && has("tcl")) && filereadable(s:tclpath)
+   unlet! b:current_syntax
+@@ -669,9 +707,14 @@
+ unlet s:trytcl
+ 
+ " [-- mzscheme --] {{{3
+-let s:mzschemepath= expand("<sfile>:p:h")."/scheme.vim"
++let s:mzschemepath= fnameescape(expand("<sfile>:p:h")."/scheme.vim")
+ if !filereadable(s:mzschemepath)
+- let s:mzschemepath= globpath(&rtp,"syntax/scheme.vim")
++ for s:mzschemepath in split(globpath(&rtp,"syntax/mzscheme.vim"),"\n")
++  if filereadable(fnameescape(s:mzschemepath))
++   let s:mzschemepath= fnameescape(s:mzschemepath)
++   break
++  endif
++ endfor
+ endif
+ if (g:vimsyn_embed =~ 'm' && has("mzscheme")) && filereadable(s:mzschemepath)
+  unlet! b:current_syntax
+@@ -709,9 +752,6 @@
+ " Highlighting Settings {{{2
+ " ====================
+ 
+-hi def link vimAuHighlight	vimHighlight
+-hi def link vimSubst1	vimSubst
+-hi def link vimBehaveModel	vimBehave
+ 
+ if !exists("g:vimsyn_noerror")
+  hi def link vimBehaveError	vimError
+@@ -734,21 +774,44 @@
+ hi def link vimAbb	vimCommand
+ hi def link vimAddress	vimMark
+ hi def link vimAugroupKey	vimCommand
++hi def link vimAuHighlight	vimHighlight
+ hi def link vimAutoCmdOpt	vimOption
+ hi def link vimAutoCmd	vimCommand
++hi def link vimAutoEvent	Type
+ hi def link vimAutoSet	vimCommand
++hi def link vimBehaveModel	vimBehave
+ hi def link vimBehave	vimCommand
++hi def link vimBracket	Delimiter
++hi def link vimCmplxRepeat	SpecialChar
++hi def link vimCommand	Statement
++hi def link vimComment	Comment
+ hi def link vimCommentString	vimString
++hi def link vimCommentTitle	PreProc
+ hi def link vimCondHL	vimCommand
++hi def link vimContinue	Special
++hi def link vimCtrlChar	SpecialChar
+ hi def link vimEchoHLNone	vimGroup
+ hi def link vimEchoHL	vimCommand
++hi def link vimElseIfErr	Error
+ hi def link vimElseif	vimCondHL
++hi def link vimEnvvar	PreProc
++hi def link vimError	Error
++hi def link vimFBVar	vimVar
+ hi def link vimFgBgAttrib	vimHiAttrib
++hi def link vimFold	Folded
+ hi def link vimFTCmd	vimCommand
+ hi def link vimFTOption	vimSynType
+ hi def link vimFuncKey	vimCommand
++hi def link vimFuncName	Function
++hi def link vimFuncSID	Special
++hi def link vimFuncVar	Identifier
+ hi def link vimGroupAdd	vimSynOption
++hi def link vimGroupName	vimGroup
+ hi def link vimGroupRem	vimSynOption
++hi def link vimGroupSpecial	Special
++hi def link vimGroup	Type
++hi def link vimHiAttrib	PreProc
++hi def link vimHiClear	vimHighlight
+ hi def link vimHiCtermFgBg	vimHiTerm
+ hi def link vimHiCTerm	vimHiTerm
+ hi def link vimHighlight	vimCommand
+@@ -757,114 +820,103 @@
+ hi def link vimHiGuiFont	vimHiTerm
+ hi def link vimHiGuiRgb	vimNumber
+ hi def link vimHiGui	vimHiTerm
++hi def link vimHiNmbr	Number
+ hi def link vimHiStartStop	vimHiTerm
++hi def link vimHiTerm	Type
+ hi def link vimHLGroup	vimGroup
++hi def link vimHLMod	PreProc
+ hi def link vimInsert	vimString
+ hi def link vimKeyCode	vimSpecFile
++hi def link vimKeyword	Statement
+ hi def link vimLet	vimCommand
+ hi def link vimLineComment	vimComment
+ hi def link vimMapBang	vimCommand
+ hi def link vimMapModKey	vimFuncSID
+ hi def link vimMapMod	vimBracket
+ hi def link vimMap	vimCommand
++hi def link vimMark	Number
+ hi def link vimMarkNumber	vimNumber
+ hi def link vimMenuMod	vimMapMod
+ hi def link vimMenuNameMore	vimMenuName
++hi def link vimMenuName	PreProc
+ hi def link vimMtchComment	vimComment
+ hi def link vimNorm	vimCommand
++hi def link vimNotation	Special
+ hi def link vimNotFunc	vimCommand
+ hi def link vimNotPatSep	vimString
++hi def link vimNumber	Number
++hi def link vimOperError	Error
++hi def link vimOper	Operator
++hi def link vimOption	PreProc
++hi def link vimParenSep	Delimiter
+ hi def link vimPatSepErr	vimPatSep
+ hi def link vimPatSepR	vimPatSep
++hi def link vimPatSep	SpecialChar
+ hi def link vimPatSepZone	vimString
+ hi def link vimPatSepZ	vimPatSep
++hi def link vimPattern	Type
+ hi def link vimPlainMark	vimMark
+ hi def link vimPlainRegister	vimRegister
++hi def link vimRegister	SpecialChar
++hi def link vimScriptDelim	Comment
++hi def link vimSearchDelim	Statement
+ hi def link vimSearch	vimString
++hi def link vimSep	Delimiter
+ hi def link vimSetMod	vimOption
++hi def link vimSetSep	Statement
+ hi def link vimSetString	vimString
++hi def link vimSpecFile	Identifier
+ hi def link vimSpecFileMod	vimSpecFile
++hi def link vimSpecial	Type
++hi def link vimStatement	Statement
+ hi def link vimStringCont	vimString
++hi def link vimString	String
++hi def link vimSubst1	vimSubst
++hi def link vimSubstDelim	Delimiter
++hi def link vimSubstFlags	Special
++hi def link vimSubstSubstr	SpecialChar
+ hi def link vimSubstTwoBS	vimString
+ hi def link vimSubst	vimCommand
++hi def link vimSynCaseError	Error
++hi def link vimSynCase	Type
++hi def link vimSyncC	Type
++hi def link vimSyncError	Error
+ hi def link vimSyncGroupName	vimGroupName
+ hi def link vimSyncGroup	vimGroupName
++hi def link vimSyncKey	Type
++hi def link vimSyncNone	Type
+ hi def link vimSynContains	vimSynOption
++hi def link vimSynError	Error
+ hi def link vimSynKeyContainedin	vimSynContains
+ hi def link vimSynKeyOpt	vimSynOption
+ hi def link vimSynMtchGrp	vimSynOption
+ hi def link vimSynMtchOpt	vimSynOption
+ hi def link vimSynNextgroup	vimSynOption
+ hi def link vimSynNotPatRange	vimSynRegPat
++hi def link vimSynOption	Special
+ hi def link vimSynPatRange	vimString
+ hi def link vimSynRegOpt	vimSynOption
+ hi def link vimSynRegPat	vimString
++hi def link vimSynReg	Type
+ hi def link vimSyntax	vimCommand
+ hi def link vimSynType	vimSpecial
++hi def link vimTodo	Todo
+ hi def link vimUnmap	vimMap
++hi def link vimUserAttrbCmpltFunc	Special
+ hi def link vimUserAttrbCmplt	vimSpecial
+ hi def link vimUserAttrbKey	vimOption
+ hi def link vimUserAttrb	vimSpecial
+-hi def link vimUserCommand	vimCommand
+-
+-hi def link vimAutoEvent	Type
+-hi def link vimBracket	Delimiter
+-hi def link vimCmplxRepeat	SpecialChar
+-hi def link vimCommand	Statement
+-hi def link vimComment	Comment
+-hi def link vimCommentTitle	PreProc
+-hi def link vimContinue	Special
+-hi def link vimCtrlChar	SpecialChar
+-hi def link vimElseIfErr	Error
+-hi def link vimEnvvar	PreProc
+-hi def link vimError	Error
+-hi def link vimFold	Folded
+-hi def link vimFuncName	Function
+-hi def link vimFuncSID	Special
+-hi def link vimFuncVar	Identifier
+-hi def link vimGroupSpecial	Special
+-hi def link vimGroup	Type
+-hi def link vimHiAttrib	PreProc
+-hi def link vimHiTerm	Type
+-hi def link vimHLMod	PreProc
+-hi def link vimKeyword	Statement
+-hi def link vimMark	Number
+-hi def link vimMenuName	PreProc
+-hi def link vimNotation	Special
+-hi def link vimNumber	Number
+-hi def link vimOperError	Error
+-hi def link vimOper	Operator
+-hi def link vimOption	PreProc
+-hi def link vimParenSep	Delimiter
+-hi def link vimPatSep	SpecialChar
+-hi def link vimPattern	Type
+-hi def link vimRegister	SpecialChar
+-hi def link vimScriptDelim	Comment
+-hi def link vimSearchDelim	Statement
+-hi def link vimSep	Delimiter
+-hi def link vimSetSep	Statement
+-hi def link vimSpecFile	Identifier
+-hi def link vimSpecial	Type
+-hi def link vimStatement	Statement
+-hi def link vimString	String
+-hi def link vimSubstDelim	Delimiter
+-hi def link vimSubstFlags	Special
+-hi def link vimSubstSubstr	SpecialChar
+-hi def link vimSynCaseError	Error
+-hi def link vimSynCase	Type
+-hi def link vimSyncC	Type
+-hi def link vimSyncError	Error
+-hi def link vimSyncKey	Type
+-hi def link vimSyncNone	Type
+-hi def link vimSynError	Error
+-hi def link vimSynOption	Special
+-hi def link vimSynReg	Type
+-hi def link vimTodo	Todo
+-hi def link vimUserAttrbCmpltFunc	Special
+ hi def link vimUserCmdError	Error
++hi def link vimUserCommand	vimCommand
+ hi def link vimUserFunc	Normal
++hi def link vimVar	Identifier
+ hi def link vimWarn	WarningMsg
+ 
+ " Current Syntax Variable: {{{2
+ let b:current_syntax = "vim"
++
++" ---------------------------------------------------------------------
++" Cleanup: {{{1
++let &cpo = s:keepcpo
++unlet s:keepcpo
+ " vim:ts=18  fdm=marker
+diff -Naur vim73.orig/runtime/syntax/viminfo.vim vim73/runtime/syntax/viminfo.vim
+--- vim73.orig/runtime/syntax/viminfo.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/viminfo.vim	2013-06-07 17:07:27.412263735 +0000
+@@ -1,13 +1,16 @@
+ " Vim syntax file
+ " Language:	Vim .viminfo file
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last Change:	2005 Jun 20
++" Last Change:	2012 Feb 03
+ 
+ " Quit when a (custom) syntax file was already loaded
+ if exists("b:current_syntax")
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ " The lines that are NOT recognized
+ syn match viminfoError "^[^\t].*"
+ 
+@@ -35,4 +38,7 @@
+ 
+ let b:current_syntax = "viminfo"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
++
+ " vim: ts=8 sw=2
+diff -Naur vim73.orig/runtime/syntax/xdefaults.vim vim73/runtime/syntax/xdefaults.vim
+--- vim73.orig/runtime/syntax/xdefaults.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/xdefaults.vim	2013-06-07 17:07:27.602263193 +0000
+@@ -33,7 +33,7 @@
+ 
+ 
+ " syn region  xdefaultsLabel   start=+^[^:]\{-}:+he=e-1 skip=+\\+ end="$"
+-syn match   xdefaultsLabel   +[^:]\{-}:+he=e-1                       contains=xdefaultsPunct,xdefaultsSpecial,xdefaultsLineEnd
++syn match   xdefaultsLabel   +^[^:]\{-}:+he=e-1                       contains=xdefaultsPunct,xdefaultsSpecial,xdefaultsLineEnd
+ syn region  xdefaultsValue   keepend start=+:+lc=1 skip=+\\+ end=+$+ contains=xdefaultsSpecial,xdefaultsLabel,xdefaultsLineEnd
+ 
+ syn match   xdefaultsSpecial	contained +#override+
+@@ -75,9 +75,9 @@
+ syn region	xdefaultsIncluded	contained start=+"+ skip=+\\\\\|\\"+ end=+"+
+ syn match	xdefaultsIncluded	contained "<[^>]*>"
+ syn match	xdefaultsInclude	"^\s*#\s*include\>\s*["<]" contains=xdefaultsIncluded
+-syn cluster	xdefaultsPreProcGroup	contains=xdefaultsPreProc,xdefaultsIncluded,xdefaultsInclude,xdefaultsDefine
+-syn region	xdefaultsDefine		start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine
+-syn region	xdefaultsPreProc	start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine
++syn cluster	xdefaultsPreProcGroup	contains=xdefaultsPreProc,xdefaultsIncluded,xdefaultsInclude,xdefaultsDefine,xdefaultsCppOut,xdefaultsCppOut2,xdefaultsCppSkip
++syn region	xdefaultsDefine		start="^\s*#\s*\(define\|undef\)\>" skip="\\$" end="$" contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue
++syn region	xdefaultsPreProc	start="^\s*#\s*\(pragma\>\|line\>\|warning\>\|warn\>\|error\>\)" skip="\\$" end="$" keepend contains=ALLBUT,@xdefaultsPreProcGroup,xdefaultsCommentH,xdefaultsErrorLine,xdefaultsLabel,xdefaultsValue
+ 
+ 
+ 
+diff -Naur vim73.orig/runtime/syntax/xf86conf.vim vim73/runtime/syntax/xf86conf.vim
+--- vim73.orig/runtime/syntax/xf86conf.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/xf86conf.vim	2013-06-07 17:07:27.612263164 +0000
+@@ -1,8 +1,8 @@
+ " Vim syntax file
+ " This is a GENERATED FILE. Please always refer to source file at the URI below.
+ " Language: XF86Config (XFree86 configuration file)
+-" Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
+-" Last Change: 2005 Jul 12
++" Former Maintainer: David Ne\v{c}as (Yeti) <yeti@physics.muni.cz>
++" Last Change: 2010 Nov 01
+ " URL: http://trific.ath.cx/Ftp/vim/syntax/xf86conf.vim
+ " Required Vim Version: 6.0
+ "
+@@ -63,7 +63,7 @@
+ 
+ " Sections and subsections
+ if b:xf86conf_xfree86_version >= 4
+-	syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
++	syn region xf86confSection matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\)\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confComment,xf86confOption,xf86confKeyword,xf86confSectionError
+ 	syn region xf86confSectionModule matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Module\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionAny,xf86confComment,xf86confOption,xf86confKeyword
+ 	syn region xf86confSectionMonitor matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Monitor\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment,xf86confOption,xf86confKeyword
+ 	syn region xf86confSectionModes matchgroup=xf86confSectionDelim start="^\s*Section\s\+\"Modes\"" end="^\s*EndSection\>" skip="#.*$\|\"[^\"]*\"" contains=xf86confSubsectionMode,xf86confModeLine,xf86confComment
+@@ -165,7 +165,7 @@
+ 
+ " Synchronization
+ if b:xf86conf_xfree86_version >= 4
+-	syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\)\""
++	syn sync match xf86confSyncSection grouphere xf86confSection "^\s*Section\s\+\"\(Files\|Server[_ ]*Flags\|Input[_ ]*Device\|Device\|Video[_ ]*Adaptor\|Server[_ ]*Layout\|DRI\|Extensions\|Vendor\|Keyboard\|Pointer\|InputClass\)\""
+ 	syn sync match xf86confSyncSectionModule grouphere xf86confSectionModule "^\s*Section\s\+\"Module\""
+ 	syn sync match xf86confSyncSectionModes groupthere xf86confSectionModes "^\s*Section\s\+\"Modes\""
+ else
+diff -Naur vim73.orig/runtime/syntax/xml.vim vim73/runtime/syntax/xml.vim
+--- vim73.orig/runtime/syntax/xml.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/xml.vim	2013-06-07 17:07:27.675596317 +0000
+@@ -3,7 +3,7 @@
+ " Maintainer:	Johannes Zellner <johannes@zellner.org>
+ "		Author and previous maintainer:
+ "		Paul Siegmann <pauls@euronet.nl>
+-" Last Change:	2009-07-13 21:26:55
++" Last Change:	2013 May 29
+ " Filenames:	*.xml
+ " $Id: xml.vim,v 1.3 2006/04/11 21:32:00 vimboss Exp $
+ 
+@@ -81,7 +81,7 @@
+ "      ^^^^^^^^^^^^^
+ "
+ syn match   xmlAttrib
+-    \ +[-'"<]\@<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>\(['">]\@!\|$\)+
++    \ +[-'"<]\@2<!\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>\(['">]\@!\|$\)+
+     \ contained
+     \ contains=xmlAttribPunct,@xmlAttribHook
+     \ display
+@@ -98,14 +98,14 @@
+ "
+ if exists("g:xml_namespace_transparent")
+ syn match   xmlNamespace
+-    \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
++    \ +\(<\|</\)\@2<=[^ /!?<>"':]\+[:]\@=+
+     \ contained
+     \ contains=@xmlNamespaceHook
+     \ transparent
+     \ display
+ else
+ syn match   xmlNamespace
+-    \ +\(<\|</\)\@<=[^ /!?<>"':]\+[:]\@=+
++    \ +\(<\|</\)\@2<=[^ /!?<>"':]\+[:]\@=+
+     \ contained
+     \ contains=@xmlNamespaceHook
+     \ display
+@@ -122,7 +122,7 @@
+ "  ^^^
+ "
+ syn match   xmlTagName
+-    \ +[<]\@<=[^ /!?<>"']\++
++    \ +[<]\@2<=[^ /!?<>"']\++
+     \ contained
+     \ contains=xmlNamespace,xmlAttribPunct,@xmlTagHook
+     \ display
+diff -Naur vim73.orig/runtime/syntax/xpm2.vim vim73/runtime/syntax/xpm2.vim
+--- vim73.orig/runtime/syntax/xpm2.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/xpm2.vim	2013-06-07 17:07:27.708929555 +0000
+@@ -1,7 +1,8 @@
+ " Vim syntax file
+ " Language:	X Pixmap v2
+ " Maintainer:	Steve Wall (hitched97@velnet.com)
+-" Last Change:	2008 May 28
++" Last Change:	2012 Jun 01
++" 		(Dominique Pelle added @Spell)
+ " Version:	5.8
+ "
+ " Made from xpm.vim by Ronald Schild <rs@scutum.de>
+@@ -14,9 +15,12 @@
+   finish
+ endif
+ 
++let s:cpo_save = &cpo
++set cpo&vim
++
+ syn region  xpm2PixelString	start="^"  end="$"  contains=@xpm2Colors
+ syn keyword xpm2Todo		TODO FIXME XXX  contained
+-syn match   xpm2Comment		"\!.*$"  contains=xpm2Todo
++syn match   xpm2Comment		"\!.*$"  contains=@Spell,xpm2Todo
+ 
+ 
+ if version < 508
+@@ -159,4 +163,6 @@
+ 
+ let b:current_syntax = "xpm2"
+ 
++let &cpo = s:cpo_save
++unlet s:cpo_save
+ " vim: ts=8:sw=2:noet:
+diff -Naur vim73.orig/runtime/syntax/xquery.vim vim73/runtime/syntax/xquery.vim
+--- vim73.orig/runtime/syntax/xquery.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/xquery.vim	2013-06-07 17:07:27.712262879 +0000
+@@ -1,10 +1,11 @@
+ " Vim syntax file
+ " Language:	XQuery
+-" Author:	Jean-Marc Vanel <http://jmvanel.free.fr/>
++" Author: RenÃ© Neumann <necoro@necoro.eu>
++" Author: Steve Spigarelli <http://spig.net/>
++" Original Author:	Jean-Marc Vanel <http://jmvanel.free.fr/>
+ " Last Change:	mar jui 12 18:04:05 CEST 2005
+ " Filenames:	*.xq
+ " URL:		http://jmvanel.free.fr/vim/xquery.vim
+-" $Id: xquery.vim,v 1.1 2005/07/18 21:44:56 vimboss Exp $
+ 
+ " REFERENCES:
+ "   [1] http://www.w3.org/TR/xquery/
+@@ -14,22 +15,26 @@
+     finish
+ endif
+ 
++" - is allowed in keywords
++setlocal iskeyword+=-
++
+ runtime syntax/xml.vim
+ 
+ syn case match
+ 
+ " From XQuery grammar:
+-syn	keyword	xqueryStatement ancestor ancestor-or-self and as ascending at attribute base-uri by case cast castable child collation construction declare default descendant descendant-or-self descending div document element else empty encoding eq every except external following following-sibling for function ge greatest gt idiv if import in inherit-namespaces instance intersect is le least let lt mod module namespace ne no of or order ordered ordering parent preceding preceding-sibling preserve return satisfies schema self some stable strip then to treat typeswitch union unordered validate variable version where xmlspace xquery yes
++syn keyword xqStatement ancestor ancestor-or-self and as ascending at attribute base-uri boundary-space by case cast castable child collation construction declare default descendant descendant-or-self descending div document element else empty encoding eq every except external following following-sibling for function ge greatest gt idiv if import in inherit-namespaces instance intersect is le least let lt mod module namespace ne no of or order ordered ordering parent preceding preceding-sibling preserve return satisfies schema self some stable strip then to treat typeswitch union unordered validate variable version where xmlspace xquery yes
+ 
+ " TODO contains clashes with vim keyword
+-syn	keyword	xqueryFunction abs adjust-date-to-timezone adjust-date-to-timezone adjust-dateTime-to-timezone adjust-dateTime-to-timezone adjust-time-to-timezone adjust-time-to-timezone avg base-uri base-uri boolean ceiling codepoint-equal codepoints-to-string collection collection compare concat count current-date current-dateTime current-time data dateTime day-from-date day-from-dateTime days-from-duration deep-equal deep-equal default-collation distinct-values distinct-values doc doc-available document-uri empty ends-with ends-with error error error error escape-uri exactly-one exists false floor hours-from-dateTime hours-from-duration hours-from-time id id idref idref implicit-timezone in-scope-prefixes index-of index-of insert-before lang lang last local-name local-name local-name-from-QName lower-case matches matches max max min min minutes-from-dateTime minutes-from-duration minutes-from-time month-from-date month-from-dateTime months-from-duration name name namespace-uri namespace-uri namespace-uri-for-prefix namespace-uri-from-QName nilled node-name normalize-space normalize-space normalize-unicode normalize-unicode not number number one-or-more position prefix-from-QName QName remove replace replace resolve-QName resolve-uri resolve-uri reverse root root round round-half-to-even round-half-to-even seconds-from-dateTime seconds-from-duration seconds-from-time starts-with starts-with static-base-uri string string string-join string-length string-length string-to-codepoints subsequence subsequence substring substring substring-after substring-after substring-before substring-before sum sum timezone-from-date timezone-from-dateTime timezone-from-time tokenize tokenize trace translate true unordered upper-case year-from-date year-from-dateTime years-from-duration zero-or-one
++syn	keyword	xqFunction abs adjust-date-to-timezone adjust-date-to-timezone adjust-dateTime-to-timezone adjust-dateTime-to-timezone adjust-time-to-timezone adjust-time-to-timezone avg base-uri base-uri boolean ceiling codepoint-equal codepoints-to-string collection collection compare concat count current-date current-dateTime current-time data dateTime day-from-date day-from-dateTime days-from-duration deep-equal deep-equal default-collation distinct-values distinct-values doc doc-available document-uri empty ends-with ends-with error error error error escape-uri exactly-one exists false floor hours-from-dateTime hours-from-duration hours-from-time id id idref idref implicit-timezone in-scope-prefixes index-of index-of insert-before lang lang last local-name local-name local-name-from-QName lower-case matches matches max max min min minutes-from-dateTime minutes-from-duration minutes-from-time month-from-date month-from-dateTime months-from-duration name name namespace-uri namespace-uri namespace-uri-for-prefix namespace-uri-from-QName nilled node-name normalize-space normalize-space normalize-unicode normalize-unicode not number number one-or-more position prefix-from-QName QName remove replace replace resolve-QName resolve-uri resolve-uri reverse root root round round-half-to-even round-half-to-even seconds-from-dateTime seconds-from-duration seconds-from-time starts-with starts-with static-base-uri string string string-join string-length string-length string-to-codepoints subsequence subsequence substring substring substring-after substring-after substring-before substring-before sum sum timezone-from-date timezone-from-dateTime timezone-from-time tokenize tokenize trace translate true unordered upper-case year-from-date year-from-dateTime years-from-duration zero-or-one
++
++syn keyword xqOperator add-dayTimeDuration-to-date add-dayTimeDuration-to-dateTime add-dayTimeDuration-to-time add-dayTimeDurations add-yearMonthDuration-to-date add-yearMonthDuration-to-dateTime add-yearMonthDurations base64Binary-equal boolean-equal boolean-greater-than boolean-less-than concatenate date-equal date-greater-than date-less-than dateTime-equal dateTime-greater-than dateTime-less-than dayTimeDuration-equal dayTimeDuration-greater-than dayTimeDuration-less-than divide-dayTimeDuration divide-dayTimeDuration-by-dayTimeDuration divide-yearMonthDuration divide-yearMonthDuration-by-yearMonthDuration except gDay-equal gMonth-equal gMonthDay-equal gYear-equal gYearMonth-equal hexBinary-equal intersect is-same-node multiply-dayTimeDuration multiply-yearMonthDuration node-after node-before NOTATION-equal numeric-add numeric-divide numeric-equal numeric-greater-than numeric-integer-divide numeric-less-than numeric-mod numeric-multiply numeric-subtract numeric-unary-minus numeric-unary-plus QName-equal subtract-dates-yielding-dayTimeDuration subtract-dateTimes-yielding-dayTimeDuration subtract-dayTimeDuration-from-date subtract-dayTimeDuration-from-dateTime subtract-dayTimeDuration-from-time subtract-dayTimeDurations subtract-times subtract-yearMonthDuration-from-date subtract-yearMonthDuration-from-dateTime subtract-yearMonthDurations time-equal time-greater-than time-less-than to union yearMonthDuration-equal yearMonthDuration-greater-than yearMonthDuration-less-than
+ 
+-syn	keyword	xqueryOperator add-dayTimeDuration-to-date add-dayTimeDuration-to-dateTime add-dayTimeDuration-to-time add-dayTimeDurations add-yearMonthDuration-to-date add-yearMonthDuration-to-dateTime add-yearMonthDurations base64Binary-equal boolean-equal boolean-greater-than boolean-less-than concatenate date-equal date-greater-than date-less-than dateTime-equal dateTime-greater-than dateTime-less-than dayTimeDuration-equal dayTimeDuration-greater-than dayTimeDuration-less-than divide-dayTimeDuration divide-dayTimeDuration-by-dayTimeDuration divide-yearMonthDuration divide-yearMonthDuration-by-yearMonthDuration except gDay-equal gMonth-equal gMonthDay-equal gYear-equal gYearMonth-equal hexBinary-equal intersect is-same-node multiply-dayTimeDuration multiply-yearMonthDuration node-after node-before NOTATION-equal numeric-add numeric-divide numeric-equal numeric-greater-than numeric-integer-divide numeric-less-than numeric-mod numeric-multiply numeric-subtract numeric-unary-minus numeric-unary-plus QName-equal subtract-dates-yielding-dayTimeDuration subtract-dateTimes-yielding-dayTimeDuration subtract-dayTimeDuration-from-date subtract-dayTimeDuration-from-dateTime subtract-dayTimeDuration-from-time subtract-dayTimeDurations subtract-times subtract-yearMonthDuration-from-date subtract-yearMonthDuration-from-dateTime subtract-yearMonthDurations time-equal time-greater-than time-less-than to union yearMonthDuration-equal yearMonthDuration-greater-than yearMonthDuration-less-than
++syn match xqType "xs:\(\|Datatype\|primitive\|string\|boolean\|float\|double\|decimal\|duration\|dateTime\|time\|date\|gYearMonth\|gYear\|gMonthDay\|gDay\|gMonth\|hexBinary\|base64Binary\|anyURI\|QName\|NOTATION\|\|normalizedString\|token\|language\|IDREFS\|ENTITIES\|NMTOKEN\|NMTOKENS\|Name\|NCName\|ID\|IDREF\|ENTITY\|integer\|nonPositiveInteger\|negativeInteger\|long\|int\|short\|byte\|nonNegativeInteger\|unsignedLong\|unsignedInt\|unsignedShort\|unsignedByte\|positiveInteger\)"
+ 
+-syn	match	xqueryType "xs:\(\|Datatype\|primitive\|string\|boolean\|float\|double\|decimal\|duration\|dateTime\|time\|date\|gYearMonth\|gYear\|gMonthDay\|gDay\|gMonth\|hexBinary\|base64Binary\|anyURI\|QName\|NOTATION\|\|normalizedString\|token\|language\|IDREFS\|ENTITIES\|NMTOKEN\|NMTOKENS\|Name\|NCName\|ID\|IDREF\|ENTITY\|integer\|nonPositiveInteger\|negativeInteger\|long\|int\|short\|byte\|nonNegativeInteger\|unsignedLong\|unsignedInt\|unsignedShort\|unsignedByte\|positiveInteger\)"
+ 
+ " From XPath grammar:
+-syn	keyword	xqueryXPath some every in in satisfies if then else to div idiv mod union intersect except instance of treat castable cast eq ne lt le gt ge is child descendant attribute self descendant-or-self following-sibling following namespace parent ancestor preceding-sibling preceding ancestor-or-self void item node document-node text comment processing-instruction attribute schema-attribute schema-element
++syn keyword xqXPath some every in in satisfies if then else to div idiv mod union intersect except instance of treat castable cast eq ne lt le gt ge is child descendant attribute self descendant-or-self following-sibling following namespace parent ancestor preceding-sibling preceding ancestor-or-self void item node document-node text comment processing-instruction attribute schema-attribute schema-element
+ 
+ " eXist extensions
+ syn	match xqExist "&="
+@@ -37,44 +42,41 @@
+ " XQdoc
+ syn	match	XQdoc contained "@\(param\|return\|author\)\>" 
+ 
+-highlight def link	xqueryStatement	Statement
+-highlight def link	xqueryFunction	Function
+-highlight def link	xqueryOperator	Operator
+-highlight def link	xqueryType		Type
+-highlight def link	xqueryXPath		Operator
+-highlight def link	XQdoc			Special
+-highlight def link	xqExist			Operator
+-
+-
+-"floating point number, with dot, optional exponent
+-syn match	cFloat		"\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
+-"floating point number, starting with a dot, optional exponent
+-syn match	cFloat		"\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
+-"floating point number, without dot, with exponent
+-syn match	cFloat		"\d\+e[-+]\=\d\+[fl]\=\>"
+-syn match	cNumber		"0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
+-syn match	cNumber		 "\<\d\+\>"
+-highlight def link	cNumber	Number
+-highlight def link	cFloat	Number
+-
+-syn region	xqComment	start='(:' excludenl end=':)' contains=XQdoc
+-highlight def link	xqComment	Comment
+-" syntax match	xqVariable	"$\w\+"
+-syntax match	xqVariable	+$\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>+
+-highlight def link	xqVariable	Identifier
+-
+-" Redefine the default XML highlighting:
+-highlight def link	xmlTag		Structure
+-highlight def link	xmlTagName	Structure
+-highlight def link	xmlEndTag	Structure
+-
+-syntax match	xqSeparator	",\|;"
+-highlight link	xqSeparator	Operator
+-
+-syn region	xqCode	transparent contained start='{' excludenl end='}' contains=xmlRegionBis,xqComment,xqueryStatement,xmlString,xqSeparator,cNumber,xqVariable keepend extend
++" floating point number, with dot, optional exponent
++syn match xqFloat   "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
++" floating point number, starting with a dot, optional exponent
++syn match xqFloat   "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
++" floating point number, without dot, with exponent
++syn match xqFloat   "\d\+e[-+]\=\d\+[fl]\=\>"
++syn match xqNumber  "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
++syn match xqNumber  "\<\d\+\>"
++
++syn region xqString  start=+\z(['"]\)+ skip=+\\.+ end=+\z1+
++syn region xqComment start='(:' excludenl end=':)' contains=XQdoc
++
++syn match xqVariable "$\<[a-zA-Z:_][-.0-9a-zA-Z0-9:_]*\>"
++syn match xqSeparator ",\|;"
++syn region xqCode transparent contained start='{' excludenl end='}' contains=xqFunction,xqCode,xmlRegionBis,xqComment,xqStatement,xmlString,xqSeparator,xqNumber,xqVariable,xqString keepend extend
+ 
+ syn region xmlRegionBis start=+<\z([^ /!?<>"']\+\)+ skip=+<!--\_.\{-}-->+ end=+</\z1\_\s\{-}>+ end=+/>+ fold contains=xmlTag,xmlEndTag,xmlCdata,xmlRegionBis,xmlComment,xmlEntity,xmlProcessing,xqCode keepend extend
+ 
+-syn region	List	transparent start='(' excludenl end=')' contains=xqCode,xmlRegion,xqComment,xqSeparator,xqueryStatement,xqVariable,xqueryType  keepend extend
+-
++hi def link xqNumber    Number
++hi def link xqFloat     Number
++hi def link xqString    String
++hi def link xqVariable  Identifier
++hi def link xqComment   Comment
++hi def link xqSeparator Operator
++hi def link xqStatement Statement
++hi def link xqFunction  Function
++hi def link xqOperator  Operator
++hi def link xqType      Type
++hi def link xqXPath     Operator
++hi def link XQdoc       Special
++hi def link xqExist     Operator
++
++" override the xml highlighting
++"hi link xmlTag      Structure
++"hi link xmlTagName  Structure
++"hi link xmlEndTag   Structure
+ 
++let b:current_syntax = "xquery"
+diff -Naur vim73.orig/runtime/syntax/xs.vim vim73/runtime/syntax/xs.vim
+--- vim73.orig/runtime/syntax/xs.vim	2010-05-15 11:03:56.000000000 +0000
++++ vim73/runtime/syntax/xs.vim	2013-06-07 17:07:27.742262793 +0000
+@@ -1,38 +1,3277 @@
+ " Vim syntax file
+-" Language:     XS (Perl extension interface language)
+-" Maintainer:   Andy Lester <andy@petdance.com>
+-" URL:          http://github.com/petdance/vim-perl
+-" Last Change:  2009-08-14
+-
+-" Quit when a syntax file was already loaded
+-if exists("b:current_syntax")
+-    finish
++" Language:    XS (Perl extension interface language)
++" Author:      Autogenerated from perl headers, on an original basis of Michael W. Dodge <sarge@pobox.com>
++" Maintainer:  vim-perl <vim-perl@googlegroups.com>
++" Previous:    Vincent Pit <perl@profvince.com>
++" Last Change: 2013-05-12
++
++" For version 5.x: Clear all syntax items
++" For version 6.x: Quit when a syntax file was already loaded
++if version < 600
++  syntax clear
++elseif exists("b:current_syntax")
++  finish
+ endif
+ 
+ " Read the C syntax to start with
+-runtime! syntax/c.vim
++if version < 600
++  source <sfile>:p:h/c.vim
++else
++  runtime! syntax/c.vim
++endif
++
++let xs_superseded = 1 " mark C functions superseded by Perl replacements
++let xs_not_core   = 1 " mark private core functions
++
++if exists("xs_superseded") && xs_superseded
++syn keyword xsSuperseded atof atol calloc clearerr exit fclose feof ferror
++syn keyword xsSuperseded fflush fgetc fgetpos fgets fopen fprintf fputc fputs
++syn keyword xsSuperseded fread free freopen fseek fsetpos fwrite getc getenv
++syn keyword xsSuperseded isalnum isalpha iscntrl isdigit isgraph islower
++syn keyword xsSuperseded isprint ispunct isspace isupper isxdigit malloc
++syn keyword xsSuperseded memcpy memmove memset printf putc rand realloc
++syn keyword xsSuperseded rewind setenv sprintf srand stderr stdin stdout
++syn keyword xsSuperseded strcat strcmp strcpy strdup strlen strncat strncmp
++syn keyword xsSuperseded strncpy strstr strtod strtol strtoul system tolower
++syn keyword xsSuperseded toupper ungetc
++endif
++if exists("xs_not_core") && xs_not_core
++syn keyword xsPrivate F0convert Perl__add_range_to_invlist
++syn keyword xsPrivate Perl__core_swash_init Perl__invlist_contents
++syn keyword xsPrivate Perl__invlist_intersection_maybe_complement_2nd
++syn keyword xsPrivate Perl__invlist_invert Perl__invlist_invert_prop
++syn keyword xsPrivate Perl__invlist_populate_swatch
++syn keyword xsPrivate Perl__invlist_union_maybe_complement_2nd
++syn keyword xsPrivate Perl__is_utf8__perl_idstart Perl__new_invlist
++syn keyword xsPrivate Perl__swash_inversion_hash Perl__swash_to_invlist
++syn keyword xsPrivate Perl__to_fold_latin1 Perl_av_reify Perl_emulate_cop_io
++syn keyword xsPrivate Perl_find_rundefsvoffset Perl_get_re_arg
++syn keyword xsPrivate Perl_is_utf8_X_L Perl_is_utf8_X_LV Perl_is_utf8_X_LVT
++syn keyword xsPrivate Perl_is_utf8_X_LV_LVT_V Perl_is_utf8_X_T
++syn keyword xsPrivate Perl_is_utf8_X_V Perl_is_utf8_X_begin
++syn keyword xsPrivate Perl_is_utf8_X_extend Perl_is_utf8_X_non_hangul
++syn keyword xsPrivate Perl_is_utf8_X_prepend Perl_is_utf8_char
++syn keyword xsPrivate Perl_new_warnings_bitfield Perl_op_clear
++syn keyword xsPrivate Perl_ptr_table_clear Perl_qerror Perl_reg_named_buff
++syn keyword xsPrivate Perl_reg_named_buff_iter Perl_reg_numbered_buff_fetch
++syn keyword xsPrivate Perl_reg_numbered_buff_length
++syn keyword xsPrivate Perl_reg_numbered_buff_store Perl_reg_qr_package
++syn keyword xsPrivate Perl_reg_temp_copy Perl_regprop Perl_report_uninit
++syn keyword xsPrivate Perl_sv_compile_2op Perl_sv_setsv_cow
++syn keyword xsPrivate Perl_try_amagic_bin Perl_try_amagic_un
++syn keyword xsPrivate Perl_utf8_to_uvchr Perl_utf8_to_uvuni
++syn keyword xsPrivate Perl_vivify_defelem Perl_yylex S_F0convert S_Slab_to_rw
++syn keyword xsPrivate S__append_range_to_invlist S__new_invlist_C_array
++syn keyword xsPrivate S_add_alternate S_add_data S_add_utf16_textfilter
++syn keyword xsPrivate S_adjust_stack_on_leave S_amagic_cmp
++syn keyword xsPrivate S_amagic_cmp_locale S_amagic_i_ncmp S_amagic_ncmp
++syn keyword xsPrivate S_anonymise_cv_maybe S_ao S_apply_attrs
++syn keyword xsPrivate S_apply_attrs_my S_assert_uft8_cache_coherent
++syn keyword xsPrivate S_bad_type_pv S_bad_type_sv S_bytes_to_uni
++syn keyword xsPrivate S_check_locale_boundary_crossing S_check_type_and_open
++syn keyword xsPrivate S_check_uni S_checkcomma S_checkposixcc S_ckwarn_common
++syn keyword xsPrivate S_cl_and S_cl_anything S_cl_init S_cl_is_anything
++syn keyword xsPrivate S_cl_or S_clear_placeholders S_closest_cop S_cop_free
++syn keyword xsPrivate S_core_regclass_swash S_cr_textfilter S_curmad S_curse
++syn keyword xsPrivate S_cv_dump S_deb_curcv S_deb_stack_n S_debprof
++syn keyword xsPrivate S_debug_start_match S_del_sv
++syn keyword xsPrivate S_deprecate_commaless_var_list S_destroy_matcher
++syn keyword xsPrivate S_div128 S_do_chomp S_do_delete_local S_do_oddball
++syn keyword xsPrivate S_do_smartmatch S_do_trans_complex
++syn keyword xsPrivate S_do_trans_complex_utf8 S_do_trans_count
++syn keyword xsPrivate S_do_trans_count_utf8 S_do_trans_simple
++syn keyword xsPrivate S_do_trans_simple_utf8 S_docatch S_doeval S_dofindlabel
++syn keyword xsPrivate S_doform S_dooneliner S_doopen_pm S_doparseform
++syn keyword xsPrivate S_dopoptoeval S_dopoptogiven S_dopoptolabel
++syn keyword xsPrivate S_dopoptoloop S_dopoptosub_at S_dopoptowhen
++syn keyword xsPrivate S_dump_exec_pos S_dump_trie S_dump_trie_interim_list
++syn keyword xsPrivate S_dump_trie_interim_table S_dumpuntil S_dup_attrlist
++syn keyword xsPrivate S_exec_failed S_expect_number S_filter_gets
++syn keyword xsPrivate S_finalize_op S_find_and_forget_pmops
++syn keyword xsPrivate S_find_array_subscript S_find_beginning S_find_byclass
++syn keyword xsPrivate S_find_hash_subscript S_find_in_my_stash
++syn keyword xsPrivate S_find_uninit_var S_first_symbol S_fold_constants
++syn keyword xsPrivate S_forbid_setid S_force_ident S_force_list S_force_next
++syn keyword xsPrivate S_force_strict_version S_force_version S_force_word
++syn keyword xsPrivate S_forget_pmop S_gen_constant_list S_get_aux_mg
++syn keyword xsPrivate S_get_num S_glob_2number S_glob_assign_glob
++syn keyword xsPrivate S_glob_assign_ref S_grok_bslash_c S_grok_bslash_o
++syn keyword xsPrivate S_group_end S_gv_ename S_gv_get_super_pkg
++syn keyword xsPrivate S_gv_init_svtype S_gv_magicalize_isa
++syn keyword xsPrivate S_gv_magicalize_overload S_hfreeentries S_hsplit
++syn keyword xsPrivate S_hv_auxinit S_hv_delete_common S_hv_free_ent_ret
++syn keyword xsPrivate S_hv_magic_check S_hv_notallowed S_incline S_incpush
++syn keyword xsPrivate S_incpush_if_exists S_incpush_use_sep S_ingroup
++syn keyword xsPrivate S_init_ids S_init_interp S_init_main_stash
++syn keyword xsPrivate S_init_perllib S_init_postdump_symbols
++syn keyword xsPrivate S_init_predump_symbols S_inplace_aassign
++syn keyword xsPrivate S_intuit_method S_intuit_more S_invlist_extend
++syn keyword xsPrivate S_invlist_iternext S_invlist_search
++syn keyword xsPrivate S_invoke_exception_hook S_is_an_int
++syn keyword xsPrivate S_is_handle_constructor S_is_list_assignment
++syn keyword xsPrivate S_is_utf8_char_slow S_is_utf8_common S_isa_lookup
++syn keyword xsPrivate S_join_exact S_listkids S_looks_like_bool
++syn keyword xsPrivate S_magic_methcall1 S_make_matcher S_make_trie
++syn keyword xsPrivate S_make_trie_failtable S_matcher_matches_sv
++syn keyword xsPrivate S_mayberelocate S_measure_struct S_mem_log_common
++syn keyword xsPrivate S_mess_alloc S_method_common S_minus_v S_missingterm
++syn keyword xsPrivate S_modkids S_more_sv S_mro_clean_isarev
++syn keyword xsPrivate S_mro_gather_and_rename S_mro_get_linear_isa_dfs
++syn keyword xsPrivate S_mul128 S_mulexp10 S_my_exit_jump S_my_kid S_need_utf8
++syn keyword xsPrivate S_newDEFSVOP S_newGIVWHENOP S_new_constant S_new_he
++syn keyword xsPrivate S_new_logop S_next_symbol S_nextchar
++syn keyword xsPrivate S_no_bareword_allowed S_no_fh_allowed S_no_op
++syn keyword xsPrivate S_not_a_number S_nuke_stacks S_num_overflow
++syn keyword xsPrivate S_open_script S_opt_scalarhv S_pack_rec
++syn keyword xsPrivate S_pad_alloc_name S_pad_check_dup S_pad_findlex
++syn keyword xsPrivate S_pad_reset S_parse_body S_path_is_absolute S_pidgone
++syn keyword xsPrivate S_pm_description S_pmtrans S_printbuf
++syn keyword xsPrivate S_process_special_blocks S_ptr_table_find S_put_byte
++syn keyword xsPrivate S_qsortsvu S_re_croak2 S_readpipe_override
++syn keyword xsPrivate S_ref_array_or_hash S_refcounted_he_value S_refkids
++syn keyword xsPrivate S_refto S_reg S_reg_check_named_buff_matched
++syn keyword xsPrivate S_reg_namedseq S_reg_node S_reg_recode S_reg_scan_name
++syn keyword xsPrivate S_reg_skipcomment S_reganode S_regatom S_regbranch
++syn keyword xsPrivate S_regclass S_regcppop S_regcppush S_regdump_extflags
++syn keyword xsPrivate S_reghop3 S_reghop4 S_reghopmaybe3 S_reginclass
++syn keyword xsPrivate S_reginsert S_regmatch S_regpiece S_regpposixcc
++syn keyword xsPrivate S_regrepeat S_regtail S_regtail_study S_regtry S_reguni
++syn keyword xsPrivate S_regwhite S_require_tie_mod S_restore_magic S_run_body
++syn keyword xsPrivate S_run_user_filter S_rxres_free S_rxres_restore
++syn keyword xsPrivate S_save_hek_flags S_save_lines S_save_magic
++syn keyword xsPrivate S_save_pushptri32ptr S_save_scalar_at S_scalar_mod_type
++syn keyword xsPrivate S_scalarboolean S_scalarkids S_scalarseq S_scan_commit
++syn keyword xsPrivate S_scan_const S_scan_formline S_scan_heredoc
++syn keyword xsPrivate S_scan_ident S_scan_inputsymbol S_scan_pat S_scan_str
++syn keyword xsPrivate S_scan_subst S_scan_trans S_scan_word S_search_const
++syn keyword xsPrivate S_sequence_num S_set_regclass_bit_fold
++syn keyword xsPrivate S_share_hek_flags S_simplify_sort S_skipspace
++syn keyword xsPrivate S_skipspace0 S_skipspace1 S_skipspace2 S_sortcv
++syn keyword xsPrivate S_sortcv_stacked S_sortcv_xsub
++syn keyword xsPrivate S_space_join_names_mortal S_start_force S_stdize_locale
++syn keyword xsPrivate S_strip_return S_study_chunk S_sublex_done
++syn keyword xsPrivate S_sublex_push S_sublex_start S_sv_2iuv_common
++syn keyword xsPrivate S_sv_2iuv_non_preserve S_sv_add_arena S_sv_dup_common
++syn keyword xsPrivate S_sv_dup_inc_multiple S_sv_exp_grow S_sv_i_ncmp
++syn keyword xsPrivate S_sv_ncmp S_sv_pos_b2u_midway S_sv_pos_u2b_cached
++syn keyword xsPrivate S_sv_pos_u2b_forwards S_sv_pos_u2b_midway
++syn keyword xsPrivate S_sv_release_COW S_swallow_bom S_swatch_get
++syn keyword xsPrivate S_to_byte_substr S_to_lower_latin1 S_to_utf8_substr
++syn keyword xsPrivate S_tokenize_use S_tokeq S_tokereport
++syn keyword xsPrivate S_too_few_arguments_pv S_too_few_arguments_sv
++syn keyword xsPrivate S_too_many_arguments_pv S_too_many_arguments_sv
++syn keyword xsPrivate S_uiv_2buf S_unpack_rec S_unreferenced_to_tmp_stack
++syn keyword xsPrivate S_unshare_hek_or_pvn S_unwind_handler_stack
++syn keyword xsPrivate S_update_debugger_info S_usage S_utf16_textfilter
++syn keyword xsPrivate S_utf8_mg_len_cache_update S_utf8_mg_pos_cache_update
++syn keyword xsPrivate S_validate_suid S_visit S_with_queued_errors
++syn keyword xsPrivate S_write_no_mem S_xmldump_attr S_yywarn Slab_to_rw
++syn keyword xsPrivate _add_range_to_invlist _append_range_to_invlist
++syn keyword xsPrivate _core_swash_init _invlist_array_init _invlist_contents
++syn keyword xsPrivate _invlist_intersection
++syn keyword xsPrivate _invlist_intersection_maybe_complement_2nd
++syn keyword xsPrivate _invlist_invert _invlist_invert_prop
++syn keyword xsPrivate _invlist_populate_swatch _invlist_subtract
++syn keyword xsPrivate _invlist_union _invlist_union_maybe_complement_2nd
++syn keyword xsPrivate _is_utf8__perl_idstart _new_invlist
++syn keyword xsPrivate _new_invlist_C_array _swash_inversion_hash
++syn keyword xsPrivate _swash_to_invlist _to_fold_latin1 add_alternate
++syn keyword xsPrivate add_cp_to_invlist add_data add_utf16_textfilter
++syn keyword xsPrivate adjust_stack_on_leave amagic_cmp amagic_cmp_locale
++syn keyword xsPrivate amagic_i_ncmp amagic_ncmp anonymise_cv_maybe ao
++syn keyword xsPrivate apply_attrs apply_attrs_my assert_uft8_cache_coherent
++syn keyword xsPrivate av_reify bad_type_pv bad_type_sv bytes_to_uni
++syn keyword xsPrivate check_locale_boundary_crossing check_type_and_open
++syn keyword xsPrivate check_uni checkcomma checkposixcc ckwarn_common cl_and
++syn keyword xsPrivate cl_anything cl_init cl_is_anything cl_or
++syn keyword xsPrivate clear_placeholders closest_cop cop_free
++syn keyword xsPrivate core_regclass_swash cr_textfilter curmad curse cv_dump
++syn keyword xsPrivate deb_curcv deb_stack_n debprof debug_start_match del_sv
++syn keyword xsPrivate deprecate_commaless_var_list destroy_matcher div128
++syn keyword xsPrivate do_aexec do_chomp do_delete_local do_exec do_oddball
++syn keyword xsPrivate do_smartmatch do_trans_complex do_trans_complex_utf8
++syn keyword xsPrivate do_trans_count do_trans_count_utf8 do_trans_simple
++syn keyword xsPrivate do_trans_simple_utf8 docatch doeval dofindlabel doform
++syn keyword xsPrivate dooneliner doopen_pm doparseform dopoptoeval
++syn keyword xsPrivate dopoptogiven dopoptolabel dopoptoloop dopoptosub_at
++syn keyword xsPrivate dopoptowhen dump_exec_pos dump_trie
++syn keyword xsPrivate dump_trie_interim_list dump_trie_interim_table
++syn keyword xsPrivate dumpuntil dup_attrlist exec_failed expect_number
++syn keyword xsPrivate filter_gets finalize_op find_and_forget_pmops
++syn keyword xsPrivate find_array_subscript find_beginning find_byclass
++syn keyword xsPrivate find_hash_subscript find_in_my_stash
++syn keyword xsPrivate find_rundefsvoffset find_uninit_var first_symbol
++syn keyword xsPrivate fold_constants forbid_setid force_ident force_list
++syn keyword xsPrivate force_next force_strict_version force_version
++syn keyword xsPrivate force_word gen_constant_list get_aux_mg
++syn keyword xsPrivate get_invlist_iter_addr get_invlist_len_addr
++syn keyword xsPrivate get_invlist_version_id_addr get_invlist_zero_addr
++syn keyword xsPrivate get_num glob_2number glob_assign_glob glob_assign_ref
++syn keyword xsPrivate grok_bslash_c grok_bslash_o group_end gv_ename
++syn keyword xsPrivate gv_get_super_pkg gv_init_svtype gv_magicalize_isa
++syn keyword xsPrivate gv_magicalize_overload hfreeentries hsplit hv_auxinit
++syn keyword xsPrivate hv_delete_common hv_free_ent_ret hv_magic_check
++syn keyword xsPrivate hv_notallowed incline incpush incpush_if_exists
++syn keyword xsPrivate incpush_use_sep ingroup init_ids init_interp
++syn keyword xsPrivate init_main_stash init_perllib init_postdump_symbols
++syn keyword xsPrivate init_predump_symbols inplace_aassign intuit_method
++syn keyword xsPrivate intuit_more invlist_array invlist_clone invlist_extend
++syn keyword xsPrivate invlist_iterinit invlist_iternext invlist_len
++syn keyword xsPrivate invlist_max invlist_search invlist_set_len invlist_trim
++syn keyword xsPrivate invoke_exception_hook is_an_int is_handle_constructor
++syn keyword xsPrivate is_list_assignment is_utf8_X_L is_utf8_X_LV
++syn keyword xsPrivate is_utf8_X_LVT is_utf8_X_LV_LVT_V is_utf8_X_T
++syn keyword xsPrivate is_utf8_X_V is_utf8_X_begin is_utf8_X_extend
++syn keyword xsPrivate is_utf8_X_non_hangul is_utf8_X_prepend is_utf8_char
++syn keyword xsPrivate is_utf8_char_slow is_utf8_common isa_lookup join_exact
++syn keyword xsPrivate listkids looks_like_bool magic_methcall1 make_matcher
++syn keyword xsPrivate make_trie make_trie_failtable matcher_matches_sv
++syn keyword xsPrivate mayberelocate measure_struct mem_log_common mess_alloc
++syn keyword xsPrivate method_common minus_v missingterm modkids more_sv
++syn keyword xsPrivate mro_clean_isarev mro_gather_and_rename
++syn keyword xsPrivate mro_get_linear_isa_dfs mul128 mulexp10 my_exit_jump
++syn keyword xsPrivate my_kid need_utf8 newDEFSVOP newGIVWHENOP new_he
++syn keyword xsPrivate new_logop next_symbol nextchar no_bareword_allowed
++syn keyword xsPrivate no_fh_allowed no_op not_a_number nuke_stacks
++syn keyword xsPrivate num_overflow op_clear open_script opt_scalarhv pack_rec
++syn keyword xsPrivate pad_alloc_name pad_check_dup pad_findlex pad_reset
++syn keyword xsPrivate parse_body path_is_absolute pidgone pm_description
++syn keyword xsPrivate pmtrans printbuf process_special_blocks ptr_table_clear
++syn keyword xsPrivate ptr_table_find put_byte qerror qsortsvu re_croak2
++syn keyword xsPrivate readpipe_override ref_array_or_hash refcounted_he_value
++syn keyword xsPrivate refkids refto reg reg_check_named_buff_matched
++syn keyword xsPrivate reg_named_buff reg_named_buff_iter reg_namedseq
++syn keyword xsPrivate reg_node reg_numbered_buff_fetch
++syn keyword xsPrivate reg_numbered_buff_length reg_numbered_buff_store
++syn keyword xsPrivate reg_qr_package reg_recode reg_scan_name reg_skipcomment
++syn keyword xsPrivate reg_temp_copy reganode regatom regbranch regclass
++syn keyword xsPrivate regcppop regcppush regcurly regdump_extflags reghop3
++syn keyword xsPrivate reghop4 reghopmaybe3 reginclass reginsert regmatch
++syn keyword xsPrivate regpiece regpposixcc regprop regrepeat regtail
++syn keyword xsPrivate regtail_study regtry reguni regwhite report_uninit
++syn keyword xsPrivate require_tie_mod restore_magic run_body run_user_filter
++syn keyword xsPrivate rxres_free rxres_restore save_hek_flags save_lines
++syn keyword xsPrivate save_magic save_pushptri32ptr save_scalar_at
++syn keyword xsPrivate scalar_mod_type scalarboolean scalarkids scalarseq
++syn keyword xsPrivate scan_commit scan_const scan_formline scan_heredoc
++syn keyword xsPrivate scan_ident scan_inputsymbol scan_pat scan_str
++syn keyword xsPrivate scan_subst scan_trans scan_word search_const
++syn keyword xsPrivate sequence_num set_regclass_bit set_regclass_bit_fold
++syn keyword xsPrivate share_hek_flags simplify_sort skipspace skipspace0
++syn keyword xsPrivate skipspace1 skipspace2 sortcv sortcv_stacked sortcv_xsub
++syn keyword xsPrivate space_join_names_mortal start_force stdize_locale
++syn keyword xsPrivate strip_return study_chunk sublex_done sublex_push
++syn keyword xsPrivate sublex_start sv_2iuv_common sv_2iuv_non_preserve
++syn keyword xsPrivate sv_add_arena sv_compile_2op sv_dup_common
++syn keyword xsPrivate sv_dup_inc_multiple sv_exp_grow sv_i_ncmp sv_ncmp
++syn keyword xsPrivate sv_pos_b2u_midway sv_pos_u2b_cached sv_pos_u2b_forwards
++syn keyword xsPrivate sv_pos_u2b_midway sv_release_COW sv_setsv_cow
++syn keyword xsPrivate swallow_bom swatch_get to_byte_substr to_lower_latin1
++syn keyword xsPrivate to_utf8_substr tokenize_use tokeq tokereport
++syn keyword xsPrivate too_few_arguments_pv too_few_arguments_sv
++syn keyword xsPrivate too_many_arguments_pv too_many_arguments_sv uiv_2buf
++syn keyword xsPrivate unpack_rec unreferenced_to_tmp_stack unshare_hek_or_pvn
++syn keyword xsPrivate unwind_handler_stack update_debugger_info usage
++syn keyword xsPrivate utf16_textfilter utf8_mg_len_cache_update
++syn keyword xsPrivate utf8_mg_pos_cache_update utf8_to_uvchr utf8_to_uvuni
++syn keyword xsPrivate visit vivify_defelem with_queued_errors write_no_mem
++syn keyword xsPrivate xmldump_attr yylex yywarn
++endif
++syn keyword xsType AMT AMTS ANY AV BHK BINOP BLOCK CHECKPOINT CLONE_PARAMS
++syn keyword xsType COP COPHH CV DB_Hash_t DB_Prefix_t DEBUG_t Direntry_t
++syn keyword xsType Fpos_t Free_t GP GV Gid_t Groups_t HE HEK HV I16 I32 I64
++syn keyword xsType I8 IO IV Int64 JMPENV LISTOP LOGOP LOOP MADPROP MAGIC MGS
++syn keyword xsType MGVTBL Malloc_t Mmap_t Mode_t NEXTTOKE NV Netdb_hlen_t
++syn keyword xsType Netdb_host_t Netdb_name_t Netdb_net_t OP OPCODE OP_4tree
++syn keyword xsType Off_t Optype PAD PADLIST PADOFFSET PADOP PERL_CONTEXT
++syn keyword xsType PERL_SI PMOP PTR_TBL_ENT_t PTR_TBL_t PVOP PerlIO
++syn keyword xsType PerlIO_funcs PerlIO_list_s PerlIO_list_t PerlIOl
++syn keyword xsType PerlInterpreter Pid_t Quad_t REGEXP Rand_seed_t SSize_t
++syn keyword xsType STRLEN STRUCT_SV SUBLEXINFO SV SVOP Select_fd_set_t
++syn keyword xsType Shmat_t Signal_t Sigsave_t Size_t Sock_size_t Stat_t TM64
++syn keyword xsType TOKEN Time64_T Time_t U16 U32 U64 U8 UNOP UV Uid_t Uquad_t
++syn keyword xsType XOP XPV XPVAV XPVBM XPVCV XPVFM XPVGV XPVHV XPVIO XPVIV
++syn keyword xsType XPVLV XPVMG XPVNV XPVUV Year _PerlIO _PerlIO_funcs
++syn keyword xsType _pMY_CXT _pTHX _reg_ac_data _reg_trie_data _reg_trie_state
++syn keyword xsType _reg_trie_trans _reg_trie_trans_list_elem _sublex_info
++syn keyword xsType _xhvnameu _xivu _xmgu _xnvu am_table am_table_short
++syn keyword xsType block_eval block_format block_givwhen block_hooks
++syn keyword xsType block_loop block_sub bool clone_params custom_op
++syn keyword xsType cv_flags_t expectation gccbug_semun line_t madprop magic
++syn keyword xsType mem_log_type mgvtbl mro_alg mro_meta my_cxt_t opcode p5rx
++syn keyword xsType pMY_CXT pMY_CXT_ pTHX pTHX_ padtidy_type perl_cond
++syn keyword xsType perl_debug_pad perl_key perl_memory_debug_header
++syn keyword xsType perl_mstats perl_mstats_t perl_mutex perl_os_thread
++syn keyword xsType perl_phase perl_vars perl_wait_queue pthread_addr_t
++syn keyword xsType ptr_tbl ptr_tbl_ent re_save_state refcounted_he
++syn keyword xsType reg_ac_data reg_data reg_substr_data reg_substr_datum
++syn keyword xsType reg_trie_data reg_trie_state reg_trie_trans
++syn keyword xsType reg_trie_trans_le regex_charset regnode regnode_1
++syn keyword xsType regnode_2 regnode_2L regnode_charclass
++syn keyword xsType regnode_charclass_class regnode_string semun shared_he
++syn keyword xsType svtype thread_intern ufuncs xpv xpvav xpvcv xpvfm xpvgv
++syn keyword xsType xpvhv xpvhv_aux xpvio xpviv xpvlv xpvmg xpvnv xpvuv
++syn keyword xsType yytokentype
++syn keyword xsString IVdf NVef NVff NVgf SVf SVf256 SVf32 SVf_ UVof UVuf UVxf
++syn keyword xsConstant CXt_BLOCK CXt_EVAL CXt_FORMAT CXt_GIVEN CXt_LOOP_FOR
++syn keyword xsConstant CXt_LOOP_LAZYIV CXt_LOOP_LAZYSV CXt_LOOP_PLAIN
++syn keyword xsConstant CXt_NULL CXt_SUB CXt_SUBST CXt_WHEN FALSE G_ARRAY
++syn keyword xsConstant G_DISCARD G_EVAL G_FAKINGEVAL G_KEEPERR G_METHOD
++syn keyword xsConstant G_NOARGS G_NODEBUG G_SCALAR G_UNDEF_FILL G_VOID G_WANT
++syn keyword xsConstant G_WARN_ALL_MASK G_WARN_ALL_OFF G_WARN_ALL_ON
++syn keyword xsConstant G_WARN_OFF G_WARN_ON G_WARN_ONCE G_WRITING_TO_STDERR
++syn keyword xsConstant OA_AVREF OA_BASEOP OA_BASEOP_OR_UNOP OA_BINOP
++syn keyword xsConstant OA_CLASS_MASK OA_COP OA_CVREF OA_DANGEROUS OA_DEFGV
++syn keyword xsConstant OA_FILEREF OA_FILESTATOP OA_FOLDCONST OA_HVREF OA_LIST
++syn keyword xsConstant OA_LISTOP OA_LOGOP OA_LOOP OA_LOOPEXOP OA_MARK
++syn keyword xsConstant OA_OPTIONAL OA_OTHERINT OA_PADOP OA_PMOP
++syn keyword xsConstant OA_PVOP_OR_SVOP OA_RETSCALAR OA_SCALAR OA_SCALARREF
++syn keyword xsConstant OA_SVOP OA_TARGET OA_TARGLEX OA_UNOP OP_AASSIGN OP_ABS
++syn keyword xsConstant OP_ACCEPT OP_ADD OP_AEACH OP_AELEM OP_AELEMFAST
++syn keyword xsConstant OP_AELEMFAST_LEX OP_AKEYS OP_ALARM OP_AND OP_ANDASSIGN
++syn keyword xsConstant OP_ANONCODE OP_ANONHASH OP_ANONLIST OP_ASLICE OP_ATAN2
++syn keyword xsConstant OP_AV2ARYLEN OP_AVALUES OP_BACKTICK OP_BIND OP_BINMODE
++syn keyword xsConstant OP_BIT_AND OP_BIT_OR OP_BIT_XOR OP_BLESS OP_BOOLKEYS
++syn keyword xsConstant OP_BREAK OP_CALLER OP_CHDIR OP_CHMOD OP_CHOMP OP_CHOP
++syn keyword xsConstant OP_CHOWN OP_CHR OP_CHROOT OP_CLOSE OP_CLOSEDIR
++syn keyword xsConstant OP_COMPLEMENT OP_CONCAT OP_COND_EXPR OP_CONNECT
++syn keyword xsConstant OP_CONST OP_CONTINUE OP_COREARGS OP_COS OP_CRYPT
++syn keyword xsConstant OP_CUSTOM OP_DBMCLOSE OP_DBMOPEN OP_DBSTATE OP_DEFINED
++syn keyword xsConstant OP_DELETE OP_DIE OP_DIVIDE OP_DOFILE OP_DOR
++syn keyword xsConstant OP_DORASSIGN OP_DUMP OP_EACH OP_EGRENT OP_EHOSTENT
++syn keyword xsConstant OP_ENETENT OP_ENTER OP_ENTEREVAL OP_ENTERGIVEN
++syn keyword xsConstant OP_ENTERITER OP_ENTERLOOP OP_ENTERSUB OP_ENTERTRY
++syn keyword xsConstant OP_ENTERWHEN OP_ENTERWRITE OP_EOF OP_EPROTOENT
++syn keyword xsConstant OP_EPWENT OP_EQ OP_ESERVENT OP_EXEC OP_EXISTS OP_EXIT
++syn keyword xsConstant OP_EXP OP_FC OP_FCNTL OP_FILENO OP_FLIP OP_FLOCK
++syn keyword xsConstant OP_FLOP OP_FORK OP_FORMLINE OP_FTATIME OP_FTBINARY
++syn keyword xsConstant OP_FTBLK OP_FTCHR OP_FTCTIME OP_FTDIR OP_FTEEXEC
++syn keyword xsConstant OP_FTEOWNED OP_FTEREAD OP_FTEWRITE OP_FTFILE OP_FTIS
++syn keyword xsConstant OP_FTLINK OP_FTMTIME OP_FTPIPE OP_FTREXEC OP_FTROWNED
++syn keyword xsConstant OP_FTRREAD OP_FTRWRITE OP_FTSGID OP_FTSIZE OP_FTSOCK
++syn keyword xsConstant OP_FTSUID OP_FTSVTX OP_FTTEXT OP_FTTTY OP_FTZERO OP_GE
++syn keyword xsConstant OP_GELEM OP_GETC OP_GETLOGIN OP_GETPEERNAME OP_GETPGRP
++syn keyword xsConstant OP_GETPPID OP_GETPRIORITY OP_GETSOCKNAME OP_GGRENT
++syn keyword xsConstant OP_GGRGID OP_GGRNAM OP_GHBYADDR OP_GHBYNAME
++syn keyword xsConstant OP_GHOSTENT OP_GLOB OP_GMTIME OP_GNBYADDR OP_GNBYNAME
++syn keyword xsConstant OP_GNETENT OP_GOTO OP_GPBYNAME OP_GPBYNUMBER
++syn keyword xsConstant OP_GPROTOENT OP_GPWENT OP_GPWNAM OP_GPWUID
++syn keyword xsConstant OP_GREPSTART OP_GREPWHILE OP_GSBYNAME OP_GSBYPORT
++syn keyword xsConstant OP_GSERVENT OP_GSOCKOPT OP_GT OP_GV OP_GVSV OP_HELEM
++syn keyword xsConstant OP_HEX OP_HINTSEVAL OP_HSLICE OP_INDEX OP_INT OP_IOCTL
++syn keyword xsConstant OP_ITER OP_I_ADD OP_I_DIVIDE OP_I_EQ OP_I_GE OP_I_GT
++syn keyword xsConstant OP_I_LE OP_I_LT OP_I_MODULO OP_I_MULTIPLY OP_I_NCMP
++syn keyword xsConstant OP_I_NE OP_I_NEGATE OP_I_POSTDEC OP_I_POSTINC
++syn keyword xsConstant OP_I_PREDEC OP_I_PREINC OP_I_SUBTRACT OP_JOIN OP_KEYS
++syn keyword xsConstant OP_KILL OP_LAST OP_LC OP_LCFIRST OP_LE OP_LEAVE
++syn keyword xsConstant OP_LEAVEEVAL OP_LEAVEGIVEN OP_LEAVELOOP OP_LEAVESUB
++syn keyword xsConstant OP_LEAVESUBLV OP_LEAVETRY OP_LEAVEWHEN OP_LEAVEWRITE
++syn keyword xsConstant OP_LEFT_SHIFT OP_LENGTH OP_LINESEQ OP_LINK OP_LIST
++syn keyword xsConstant OP_LISTEN OP_LOCALTIME OP_LOCK OP_LOG OP_LSLICE
++syn keyword xsConstant OP_LSTAT OP_LT OP_MAPSTART OP_MAPWHILE OP_MATCH
++syn keyword xsConstant OP_METHOD OP_METHOD_NAMED OP_MKDIR OP_MODULO OP_MSGCTL
++syn keyword xsConstant OP_MSGGET OP_MSGRCV OP_MSGSND OP_MULTIPLY OP_NCMP
++syn keyword xsConstant OP_NE OP_NEGATE OP_NEXT OP_NEXTSTATE OP_NOT OP_NULL
++syn keyword xsConstant OP_OCT OP_ONCE OP_OPEN OP_OPEN_DIR OP_OR OP_ORASSIGN
++syn keyword xsConstant OP_ORD OP_PACK OP_PADANY OP_PADAV OP_PADHV OP_PADSV
++syn keyword xsConstant OP_PIPE_OP OP_POP OP_POS OP_POSTDEC OP_POSTINC OP_POW
++syn keyword xsConstant OP_PREDEC OP_PREINC OP_PRINT OP_PROTOTYPE OP_PRTF
++syn keyword xsConstant OP_PUSH OP_PUSHMARK OP_PUSHRE OP_QR OP_QUOTEMETA
++syn keyword xsConstant OP_RAND OP_RANGE OP_RCATLINE OP_REACH OP_READ
++syn keyword xsConstant OP_READDIR OP_READLINE OP_READLINK OP_RECV OP_REDO
++syn keyword xsConstant OP_REF OP_REFGEN OP_REGCMAYBE OP_REGCOMP OP_REGCRESET
++syn keyword xsConstant OP_RENAME OP_REPEAT OP_REQUIRE OP_RESET OP_RETURN
++syn keyword xsConstant OP_REVERSE OP_REWINDDIR OP_RIGHT_SHIFT OP_RINDEX
++syn keyword xsConstant OP_RKEYS OP_RMDIR OP_RUNCV OP_RV2AV OP_RV2CV OP_RV2GV
++syn keyword xsConstant OP_RV2HV OP_RV2SV OP_RVALUES OP_SASSIGN OP_SAY
++syn keyword xsConstant OP_SCALAR OP_SCHOMP OP_SCHOP OP_SCMP OP_SCOPE OP_SEEK
++syn keyword xsConstant OP_SEEKDIR OP_SELECT OP_SEMCTL OP_SEMGET OP_SEMOP
++syn keyword xsConstant OP_SEND OP_SEQ OP_SETPGRP OP_SETPRIORITY OP_SGE
++syn keyword xsConstant OP_SGRENT OP_SGT OP_SHIFT OP_SHMCTL OP_SHMGET
++syn keyword xsConstant OP_SHMREAD OP_SHMWRITE OP_SHOSTENT OP_SHUTDOWN OP_SIN
++syn keyword xsConstant OP_SLE OP_SLEEP OP_SLT OP_SMARTMATCH OP_SNE OP_SNETENT
++syn keyword xsConstant OP_SOCKET OP_SOCKPAIR OP_SORT OP_SPLICE OP_SPLIT
++syn keyword xsConstant OP_SPRINTF OP_SPROTOENT OP_SPWENT OP_SQRT OP_SRAND
++syn keyword xsConstant OP_SREFGEN OP_SSELECT OP_SSERVENT OP_SSOCKOPT OP_STAT
++syn keyword xsConstant OP_STRINGIFY OP_STUB OP_STUDY OP_SUBST OP_SUBSTCONT
++syn keyword xsConstant OP_SUBSTR OP_SUBTRACT OP_SYMLINK OP_SYSCALL OP_SYSOPEN
++syn keyword xsConstant OP_SYSREAD OP_SYSSEEK OP_SYSTEM OP_SYSWRITE OP_TELL
++syn keyword xsConstant OP_TELLDIR OP_TIE OP_TIED OP_TIME OP_TMS OP_TRANS
++syn keyword xsConstant OP_TRANSR OP_TRUNCATE OP_UC OP_UCFIRST OP_UMASK
++syn keyword xsConstant OP_UNDEF OP_UNLINK OP_UNPACK OP_UNSHIFT OP_UNSTACK
++syn keyword xsConstant OP_UNTIE OP_UTIME OP_VALUES OP_VEC OP_WAIT OP_WAITPID
++syn keyword xsConstant OP_WANTARRAY OP_WARN OP_XOR OP_max OPf_KIDS OPf_KNOW
++syn keyword xsConstant OPf_LIST OPf_MOD OPf_PARENS OPf_REF OPf_SPECIAL
++syn keyword xsConstant OPf_STACKED OPf_WANT OPf_WANT_LIST OPf_WANT_SCALAR
++syn keyword xsConstant OPf_WANT_VOID OPpALLOW_FAKE OPpASSIGN_BACKWARDS
++syn keyword xsConstant OPpASSIGN_COMMON OPpASSIGN_CV_TO_GV OPpCONST_BARE
++syn keyword xsConstant OPpCONST_ENTERED OPpCONST_NOVER OPpCONST_SHORTCIRCUIT
++syn keyword xsConstant OPpCONST_STRICT OPpCONST_WARNING OPpCOREARGS_DEREF1
++syn keyword xsConstant OPpCOREARGS_DEREF2 OPpCOREARGS_PUSHMARK
++syn keyword xsConstant OPpCOREARGS_SCALARMOD OPpDEREF OPpDEREF_AV OPpDEREF_HV
++syn keyword xsConstant OPpDEREF_SV OPpDONT_INIT_GV OPpEARLY_CV
++syn keyword xsConstant OPpENTERSUB_AMPER OPpENTERSUB_DB OPpENTERSUB_HASTARG
++syn keyword xsConstant OPpENTERSUB_INARGS OPpENTERSUB_LVAL_MASK
++syn keyword xsConstant OPpENTERSUB_NOPAREN OPpEVAL_BYTES OPpEVAL_COPHH
++syn keyword xsConstant OPpEVAL_HAS_HH OPpEVAL_UNICODE OPpEXISTS_SUB
++syn keyword xsConstant OPpEXIT_VMSISH OPpFLIP_LINENUM OPpFT_ACCESS
++syn keyword xsConstant OPpFT_AFTER_t OPpFT_STACKED OPpFT_STACKING OPpGREP_LEX
++syn keyword xsConstant OPpHUSH_VMSISH OPpITER_DEF OPpITER_REVERSED
++syn keyword xsConstant OPpLIST_GUESSED OPpLVAL_DEFER OPpLVAL_INTRO
++syn keyword xsConstant OPpMAYBE_LVSUB OPpMAY_RETURN_CONSTANT OPpOFFBYONE
++syn keyword xsConstant OPpOPEN_IN_CRLF OPpOPEN_IN_RAW OPpOPEN_OUT_CRLF
++syn keyword xsConstant OPpOPEN_OUT_RAW OPpOUR_INTRO OPpPAD_STATE
++syn keyword xsConstant OPpPV_IS_UTF8 OPpREFCOUNTED OPpREPEAT_DOLIST
++syn keyword xsConstant OPpREVERSE_INPLACE OPpRUNTIME OPpSLICE OPpSORT_DESCEND
++syn keyword xsConstant OPpSORT_INPLACE OPpSORT_INTEGER OPpSORT_NUMERIC
++syn keyword xsConstant OPpSORT_QSORT OPpSORT_REVERSE OPpSORT_STABLE
++syn keyword xsConstant OPpSUBSTR_REPL_FIRST OPpTARGET_MY OPpTRANS_ALL
++syn keyword xsConstant OPpTRANS_COMPLEMENT OPpTRANS_DELETE OPpTRANS_FROM_UTF
++syn keyword xsConstant OPpTRANS_GROWS OPpTRANS_IDENTICAL OPpTRANS_SQUASH
++syn keyword xsConstant OPpTRANS_TO_UTF PERL_MAGIC_READONLY_ACCEPTABLE
++syn keyword xsConstant PERL_MAGIC_TYPE_IS_VALUE_MAGIC
++syn keyword xsConstant PERL_MAGIC_TYPE_READONLY_ACCEPTABLE
++syn keyword xsConstant PERL_MAGIC_UTF8_CACHESIZE PERL_MAGIC_VALUE_MAGIC
++syn keyword xsConstant PERL_MAGIC_VTABLE_MASK PERL_MAGIC_arylen
++syn keyword xsConstant PERL_MAGIC_arylen_p PERL_MAGIC_backref PERL_MAGIC_bm
++syn keyword xsConstant PERL_MAGIC_checkcall PERL_MAGIC_collxfrm
++syn keyword xsConstant PERL_MAGIC_dbfile PERL_MAGIC_dbline PERL_MAGIC_defelem
++syn keyword xsConstant PERL_MAGIC_env PERL_MAGIC_envelem PERL_MAGIC_ext
++syn keyword xsConstant PERL_MAGIC_fm PERL_MAGIC_hints PERL_MAGIC_hintselem
++syn keyword xsConstant PERL_MAGIC_isa PERL_MAGIC_isaelem PERL_MAGIC_nkeys
++syn keyword xsConstant PERL_MAGIC_overload PERL_MAGIC_overload_elem
++syn keyword xsConstant PERL_MAGIC_overload_table PERL_MAGIC_pos PERL_MAGIC_qr
++syn keyword xsConstant PERL_MAGIC_regdata PERL_MAGIC_regdatum
++syn keyword xsConstant PERL_MAGIC_regex_global PERL_MAGIC_rhash
++syn keyword xsConstant PERL_MAGIC_shared PERL_MAGIC_shared_scalar
++syn keyword xsConstant PERL_MAGIC_sig PERL_MAGIC_sigelem PERL_MAGIC_study
++syn keyword xsConstant PERL_MAGIC_substr PERL_MAGIC_sv PERL_MAGIC_symtab
++syn keyword xsConstant PERL_MAGIC_taint PERL_MAGIC_tied PERL_MAGIC_tiedelem
++syn keyword xsConstant PERL_MAGIC_tiedscalar PERL_MAGIC_utf8 PERL_MAGIC_uvar
++syn keyword xsConstant PERL_MAGIC_uvar_elem PERL_MAGIC_vec PERL_MAGIC_vstring
++syn keyword xsConstant REGEX_ASCII_MORE_RESTRICTED_CHARSET
++syn keyword xsConstant REGEX_ASCII_RESTRICTED_CHARSET REGEX_DEPENDS_CHARSET
++syn keyword xsConstant REGEX_LOCALE_CHARSET REGEX_UNICODE_CHARSET SVfARG
++syn keyword xsConstant SVf_AMAGIC SVf_BREAK SVf_FAKE SVf_IOK SVf_IVisUV
++syn keyword xsConstant SVf_NOK SVf_OK SVf_OOK SVf_POK SVf_READONLY SVf_ROK
++syn keyword xsConstant SVf_THINKFIRST SVf_UTF8 SVp_IOK SVp_NOK SVp_POK
++syn keyword xsConstant SVp_SCREAM SVpad_NAME SVpad_OUR SVpad_STATE
++syn keyword xsConstant SVpad_TYPED SVpav_REAL SVpav_REIFY SVpbm_TAIL
++syn keyword xsConstant SVpbm_VALID SVpgv_GP SVphv_CLONEABLE SVphv_HASKFLAGS
++syn keyword xsConstant SVphv_LAZYDEL SVphv_REHASH SVphv_SHAREKEYS
++syn keyword xsConstant SVprv_PCS_IMPORTED SVprv_WEAKREF SVs_GMG SVs_OBJECT
++syn keyword xsConstant SVs_PADMY SVs_PADSTALE SVs_PADTMP SVs_RMG SVs_SMG
++syn keyword xsConstant SVs_TEMP SVt_BIND SVt_IV SVt_LAST SVt_NULL SVt_NV
++syn keyword xsConstant SVt_PV SVt_PVAV SVt_PVBM SVt_PVCV SVt_PVFM SVt_PVGV
++syn keyword xsConstant SVt_PVHV SVt_PVIO SVt_PVIV SVt_PVLV SVt_PVMG SVt_PVNV
++syn keyword xsConstant SVt_REGEXP SVt_RV TRUE XATTRBLOCK XATTRTERM XBLOCK
++syn keyword xsConstant XOPERATOR XREF XSTATE XTERM XTERMBLOCK XTERMORDORDOR
++syn keyword xsConstant padtidy_FORMAT padtidy_SUB padtidy_SUBCLONE
++syn keyword xsException XCPT_CATCH XCPT_RETHROW XCPT_TRY_END XCPT_TRY_START
++syn keyword xsException dXCPT
++syn keyword xsKeyword ALIAS: BOOT: CASE: CLEANUP: CODE: C_ARGS: DISABLE
++syn keyword xsKeyword ENABLE FALLBACK: IN INCLUDE: INIT: INPUT: INTERFACE:
++syn keyword xsKeyword INTERFACE_MACRO: IN_OUT IN_OUTLIST MODULE NO_INIT:
++syn keyword xsKeyword NO_OUTPUT: OUT OUTLIST OUTPUT: OVERLOAD: PACKAGE
++syn keyword xsKeyword POSTCALL: PPCODE: PREFIX PREINIT: PROTOTYPE:
++syn keyword xsKeyword PROTOTYPES: REQUIRE: SCOPE: VERSIONCHECK: length
++syn keyword xsFunction GetVars Gv_AMupdate PerlIO_clearerr PerlIO_close
++syn keyword xsFunction PerlIO_eof PerlIO_error PerlIO_fileno PerlIO_fill
++syn keyword xsFunction PerlIO_flush PerlIO_get_base PerlIO_get_bufsiz
++syn keyword xsFunction PerlIO_get_cnt PerlIO_get_ptr PerlIO_read PerlIO_seek
++syn keyword xsFunction PerlIO_set_cnt PerlIO_set_ptrcnt PerlIO_setlinebuf
++syn keyword xsFunction PerlIO_stderr PerlIO_stdin PerlIO_stdout PerlIO_tell
++syn keyword xsFunction PerlIO_unread PerlIO_write Perl_GetVars
++syn keyword xsFunction Perl_Gv_AMupdate Perl_PerlIO_clearerr
++syn keyword xsFunction Perl_PerlIO_close Perl_PerlIO_context_layers
++syn keyword xsFunction Perl_PerlIO_eof Perl_PerlIO_error Perl_PerlIO_fileno
++syn keyword xsFunction Perl_PerlIO_fill Perl_PerlIO_flush
++syn keyword xsFunction Perl_PerlIO_get_base Perl_PerlIO_get_bufsiz
++syn keyword xsFunction Perl_PerlIO_get_cnt Perl_PerlIO_get_ptr
++syn keyword xsFunction Perl_PerlIO_read Perl_PerlIO_seek Perl_PerlIO_set_cnt
++syn keyword xsFunction Perl_PerlIO_set_ptrcnt Perl_PerlIO_setlinebuf
++syn keyword xsFunction Perl_PerlIO_stderr Perl_PerlIO_stdin
++syn keyword xsFunction Perl_PerlIO_stdout Perl_PerlIO_tell Perl_PerlIO_unread
++syn keyword xsFunction Perl_PerlIO_write Perl_Slab_Alloc Perl_Slab_Free
++syn keyword xsFunction Perl__is_utf8_quotemeta Perl__to_uni_fold_flags
++syn keyword xsFunction Perl__to_utf8_fold_flags Perl__to_utf8_lower_flags
++syn keyword xsFunction Perl__to_utf8_title_flags Perl__to_utf8_upper_flags
++syn keyword xsFunction Perl_amagic_call Perl_amagic_deref_call Perl_any_dup
++syn keyword xsFunction Perl_apply_attrs_string Perl_atfork_lock
++syn keyword xsFunction Perl_atfork_unlock Perl_av_arylen_p Perl_av_clear
++syn keyword xsFunction Perl_av_create_and_push Perl_av_create_and_unshift_one
++syn keyword xsFunction Perl_av_delete Perl_av_exists Perl_av_extend
++syn keyword xsFunction Perl_av_fetch Perl_av_fill Perl_av_iter_p Perl_av_len
++syn keyword xsFunction Perl_av_make Perl_av_pop Perl_av_push Perl_av_shift
++syn keyword xsFunction Perl_av_store Perl_av_undef Perl_av_unshift
++syn keyword xsFunction Perl_block_gimme Perl_blockhook_register
++syn keyword xsFunction Perl_bytes_cmp_utf8 Perl_bytes_from_utf8
++syn keyword xsFunction Perl_bytes_to_utf8 Perl_call_argv Perl_call_atexit
++syn keyword xsFunction Perl_call_list Perl_call_method Perl_call_pv
++syn keyword xsFunction Perl_call_sv Perl_caller_cx Perl_calloc Perl_cast_i32
++syn keyword xsFunction Perl_cast_iv Perl_cast_ulong Perl_cast_uv
++syn keyword xsFunction Perl_ck_entersub_args_list Perl_ck_entersub_args_proto
++syn keyword xsFunction Perl_ck_entersub_args_proto_or_list Perl_ck_warner
++syn keyword xsFunction Perl_ck_warner_d Perl_ckwarn Perl_ckwarn_d
++syn keyword xsFunction Perl_clone_params_del Perl_clone_params_new
++syn keyword xsFunction Perl_cop_fetch_label Perl_cop_store_label Perl_croak
++syn keyword xsFunction Perl_croak_no_modify Perl_croak_nocontext
++syn keyword xsFunction Perl_croak_sv Perl_croak_xs_usage Perl_csighandler
++syn keyword xsFunction Perl_custom_op_desc Perl_custom_op_name
++syn keyword xsFunction Perl_custom_op_register Perl_custom_op_xop
++syn keyword xsFunction Perl_cv_clone Perl_cv_const_sv
++syn keyword xsFunction Perl_cv_get_call_checker Perl_cv_set_call_checker
++syn keyword xsFunction Perl_cv_undef Perl_cx_dump Perl_cx_dup Perl_cxinc
++syn keyword xsFunction Perl_deb Perl_deb_nocontext Perl_debop
++syn keyword xsFunction Perl_debprofdump Perl_debstack Perl_debstackptrs
++syn keyword xsFunction Perl_delimcpy Perl_despatch_signals Perl_die
++syn keyword xsFunction Perl_die_nocontext Perl_die_sv Perl_dirp_dup
++syn keyword xsFunction Perl_do_aspawn Perl_do_binmode Perl_do_close
++syn keyword xsFunction Perl_do_gv_dump Perl_do_gvgv_dump Perl_do_hv_dump
++syn keyword xsFunction Perl_do_join Perl_do_magic_dump Perl_do_op_dump
++syn keyword xsFunction Perl_do_open9 Perl_do_openn Perl_do_pmop_dump
++syn keyword xsFunction Perl_do_spawn Perl_do_spawn_nowait Perl_do_sprintf
++syn keyword xsFunction Perl_do_sv_dump Perl_doing_taint Perl_doref
++syn keyword xsFunction Perl_dounwind Perl_dowantarray Perl_dump_all
++syn keyword xsFunction Perl_dump_eval Perl_dump_fds Perl_dump_form
++syn keyword xsFunction Perl_dump_indent Perl_dump_mstats Perl_dump_packsubs
++syn keyword xsFunction Perl_dump_sub Perl_dump_vindent Perl_eval_pv
++syn keyword xsFunction Perl_eval_sv Perl_fbm_compile Perl_fbm_instr
++syn keyword xsFunction Perl_filter_add Perl_filter_del Perl_filter_read
++syn keyword xsFunction Perl_find_runcv Perl_find_rundefsv Perl_foldEQ
++syn keyword xsFunction Perl_foldEQ_latin1 Perl_foldEQ_locale
++syn keyword xsFunction Perl_foldEQ_utf8_flags Perl_form Perl_form_nocontext
++syn keyword xsFunction Perl_fp_dup Perl_fprintf_nocontext
++syn keyword xsFunction Perl_free_global_struct Perl_free_tmps Perl_get_av
++syn keyword xsFunction Perl_get_context Perl_get_cv Perl_get_cvn_flags
++syn keyword xsFunction Perl_get_hv Perl_get_mstats Perl_get_op_descs
++syn keyword xsFunction Perl_get_op_names Perl_get_ppaddr Perl_get_sv
++syn keyword xsFunction Perl_get_vtbl Perl_getcwd_sv Perl_gp_dup Perl_gp_free
++syn keyword xsFunction Perl_gp_ref Perl_grok_bin Perl_grok_hex
++syn keyword xsFunction Perl_grok_number Perl_grok_numeric_radix Perl_grok_oct
++syn keyword xsFunction Perl_gv_add_by_type Perl_gv_autoload_pv
++syn keyword xsFunction Perl_gv_autoload_pvn Perl_gv_autoload_sv Perl_gv_check
++syn keyword xsFunction Perl_gv_const_sv Perl_gv_dump Perl_gv_efullname
++syn keyword xsFunction Perl_gv_efullname4 Perl_gv_fetchfile
++syn keyword xsFunction Perl_gv_fetchfile_flags Perl_gv_fetchmeth_pv
++syn keyword xsFunction Perl_gv_fetchmeth_pv_autoload Perl_gv_fetchmeth_pvn
++syn keyword xsFunction Perl_gv_fetchmeth_pvn_autoload Perl_gv_fetchmeth_sv
++syn keyword xsFunction Perl_gv_fetchmeth_sv_autoload
++syn keyword xsFunction Perl_gv_fetchmethod_autoload
++syn keyword xsFunction Perl_gv_fetchmethod_pv_flags
++syn keyword xsFunction Perl_gv_fetchmethod_pvn_flags
++syn keyword xsFunction Perl_gv_fetchmethod_sv_flags Perl_gv_fetchpv
++syn keyword xsFunction Perl_gv_fetchpvn_flags Perl_gv_fetchsv
++syn keyword xsFunction Perl_gv_fullname Perl_gv_fullname4 Perl_gv_handler
++syn keyword xsFunction Perl_gv_init_pv Perl_gv_init_pvn Perl_gv_init_sv
++syn keyword xsFunction Perl_gv_name_set Perl_gv_stashpv Perl_gv_stashpvn
++syn keyword xsFunction Perl_gv_stashsv Perl_he_dup Perl_hek_dup
++syn keyword xsFunction Perl_hv_assert Perl_hv_clear
++syn keyword xsFunction Perl_hv_clear_placeholders Perl_hv_common
++syn keyword xsFunction Perl_hv_common_key_len Perl_hv_copy_hints_hv
++syn keyword xsFunction Perl_hv_delayfree_ent Perl_hv_eiter_p
++syn keyword xsFunction Perl_hv_eiter_set Perl_hv_fill Perl_hv_free_ent
++syn keyword xsFunction Perl_hv_iterinit Perl_hv_iterkey Perl_hv_iterkeysv
++syn keyword xsFunction Perl_hv_iternext_flags Perl_hv_iternextsv
++syn keyword xsFunction Perl_hv_iterval Perl_hv_ksplit Perl_hv_name_set
++syn keyword xsFunction Perl_hv_placeholders_get Perl_hv_placeholders_p
++syn keyword xsFunction Perl_hv_placeholders_set Perl_hv_riter_p
++syn keyword xsFunction Perl_hv_riter_set Perl_hv_scalar
++syn keyword xsFunction Perl_init_global_struct Perl_init_i18nl10n
++syn keyword xsFunction Perl_init_i18nl14n Perl_init_stacks Perl_init_tm
++syn keyword xsFunction Perl_instr Perl_is_ascii_string Perl_is_lvalue_sub
++syn keyword xsFunction Perl_is_uni_alnum Perl_is_uni_alnum_lc
++syn keyword xsFunction Perl_is_uni_alpha Perl_is_uni_alpha_lc
++syn keyword xsFunction Perl_is_uni_ascii Perl_is_uni_ascii_lc
++syn keyword xsFunction Perl_is_uni_cntrl Perl_is_uni_cntrl_lc
++syn keyword xsFunction Perl_is_uni_digit Perl_is_uni_digit_lc
++syn keyword xsFunction Perl_is_uni_graph Perl_is_uni_graph_lc
++syn keyword xsFunction Perl_is_uni_idfirst Perl_is_uni_idfirst_lc
++syn keyword xsFunction Perl_is_uni_lower Perl_is_uni_lower_lc
++syn keyword xsFunction Perl_is_uni_print Perl_is_uni_print_lc
++syn keyword xsFunction Perl_is_uni_punct Perl_is_uni_punct_lc
++syn keyword xsFunction Perl_is_uni_space Perl_is_uni_space_lc
++syn keyword xsFunction Perl_is_uni_upper Perl_is_uni_upper_lc
++syn keyword xsFunction Perl_is_uni_xdigit Perl_is_uni_xdigit_lc
++syn keyword xsFunction Perl_is_utf8_alnum Perl_is_utf8_alpha
++syn keyword xsFunction Perl_is_utf8_ascii Perl_is_utf8_char_buf
++syn keyword xsFunction Perl_is_utf8_cntrl Perl_is_utf8_digit
++syn keyword xsFunction Perl_is_utf8_graph Perl_is_utf8_idcont
++syn keyword xsFunction Perl_is_utf8_idfirst Perl_is_utf8_lower
++syn keyword xsFunction Perl_is_utf8_mark Perl_is_utf8_perl_space
++syn keyword xsFunction Perl_is_utf8_perl_word Perl_is_utf8_posix_digit
++syn keyword xsFunction Perl_is_utf8_print Perl_is_utf8_punct
++syn keyword xsFunction Perl_is_utf8_space Perl_is_utf8_string
++syn keyword xsFunction Perl_is_utf8_string_loclen Perl_is_utf8_upper
++syn keyword xsFunction Perl_is_utf8_xdigit Perl_is_utf8_xidcont
++syn keyword xsFunction Perl_is_utf8_xidfirst Perl_leave_scope
++syn keyword xsFunction Perl_lex_bufutf8 Perl_lex_discard_to
++syn keyword xsFunction Perl_lex_grow_linestr Perl_lex_next_chunk
++syn keyword xsFunction Perl_lex_peek_unichar Perl_lex_read_space
++syn keyword xsFunction Perl_lex_read_to Perl_lex_read_unichar Perl_lex_start
++syn keyword xsFunction Perl_lex_stuff_pv Perl_lex_stuff_pvn Perl_lex_stuff_sv
++syn keyword xsFunction Perl_lex_unstuff Perl_load_module
++syn keyword xsFunction Perl_load_module_nocontext Perl_looks_like_number
++syn keyword xsFunction Perl_magic_dump Perl_malloc Perl_markstack_grow
++syn keyword xsFunction Perl_mess Perl_mess_nocontext Perl_mess_sv Perl_mfree
++syn keyword xsFunction Perl_mg_clear Perl_mg_copy Perl_mg_dup Perl_mg_find
++syn keyword xsFunction Perl_mg_findext Perl_mg_free Perl_mg_free_type
++syn keyword xsFunction Perl_mg_get Perl_mg_length Perl_mg_magical Perl_mg_set
++syn keyword xsFunction Perl_mg_size Perl_mini_mktime Perl_moreswitches
++syn keyword xsFunction Perl_mro_get_from_name Perl_mro_get_linear_isa
++syn keyword xsFunction Perl_mro_get_private_data Perl_mro_method_changed_in
++syn keyword xsFunction Perl_mro_register Perl_mro_set_mro
++syn keyword xsFunction Perl_mro_set_private_data Perl_my_atof Perl_my_atof2
++syn keyword xsFunction Perl_my_bcopy Perl_my_bzero Perl_my_chsize
++syn keyword xsFunction Perl_my_cxt_index Perl_my_cxt_init Perl_my_dirfd
++syn keyword xsFunction Perl_my_exit Perl_my_failure_exit Perl_my_fflush_all
++syn keyword xsFunction Perl_my_fork Perl_my_htonl Perl_my_memcmp
++syn keyword xsFunction Perl_my_memset Perl_my_ntohl Perl_my_pclose
++syn keyword xsFunction Perl_my_popen Perl_my_popen_list Perl_my_setenv
++syn keyword xsFunction Perl_my_snprintf Perl_my_socketpair Perl_my_sprintf
++syn keyword xsFunction Perl_my_strftime Perl_my_strlcat Perl_my_strlcpy
++syn keyword xsFunction Perl_my_swap Perl_my_vsnprintf Perl_newANONATTRSUB
++syn keyword xsFunction Perl_newANONHASH Perl_newANONLIST Perl_newANONSUB
++syn keyword xsFunction Perl_newASSIGNOP Perl_newATTRSUB Perl_newAVREF
++syn keyword xsFunction Perl_newBINOP Perl_newCONDOP Perl_newCONSTSUB
++syn keyword xsFunction Perl_newCONSTSUB_flags Perl_newCVREF Perl_newFORM
++syn keyword xsFunction Perl_newFOROP Perl_newGIVENOP Perl_newGVOP
++syn keyword xsFunction Perl_newGVREF Perl_newGVgen_flags Perl_newHVREF
++syn keyword xsFunction Perl_newHVhv Perl_newLISTOP Perl_newLOGOP
++syn keyword xsFunction Perl_newLOOPEX Perl_newLOOPOP Perl_newMYSUB
++syn keyword xsFunction Perl_newNULLLIST Perl_newOP Perl_newPADOP Perl_newPMOP
++syn keyword xsFunction Perl_newPROG Perl_newPVOP Perl_newRANGE Perl_newRV
++syn keyword xsFunction Perl_newRV_noinc Perl_newSLICEOP Perl_newSTATEOP
++syn keyword xsFunction Perl_newSV Perl_newSVOP Perl_newSVREF Perl_newSV_type
++syn keyword xsFunction Perl_newSVhek Perl_newSViv Perl_newSVnv Perl_newSVpv
++syn keyword xsFunction Perl_newSVpv_share Perl_newSVpvf
++syn keyword xsFunction Perl_newSVpvf_nocontext Perl_newSVpvn
++syn keyword xsFunction Perl_newSVpvn_flags Perl_newSVpvn_share Perl_newSVrv
++syn keyword xsFunction Perl_newSVsv Perl_newSVuv Perl_newUNOP Perl_newWHENOP
++syn keyword xsFunction Perl_newWHILEOP Perl_newXS Perl_newXS_flags
++syn keyword xsFunction Perl_new_collate Perl_new_ctype Perl_new_numeric
++syn keyword xsFunction Perl_new_stackinfo Perl_new_version Perl_ninstr
++syn keyword xsFunction Perl_nothreadhook Perl_op_append_elem
++syn keyword xsFunction Perl_op_append_list Perl_op_contextualize Perl_op_dump
++syn keyword xsFunction Perl_op_free Perl_op_linklist Perl_op_null
++syn keyword xsFunction Perl_op_prepend_elem Perl_op_refcnt_lock
++syn keyword xsFunction Perl_op_refcnt_unlock Perl_op_scope Perl_pack_cat
++syn keyword xsFunction Perl_packlist Perl_pad_add_anon Perl_pad_add_name_pv
++syn keyword xsFunction Perl_pad_add_name_pvn Perl_pad_add_name_sv
++syn keyword xsFunction Perl_pad_alloc Perl_pad_compname_type
++syn keyword xsFunction Perl_pad_findmy_pv Perl_pad_findmy_pvn
++syn keyword xsFunction Perl_pad_findmy_sv Perl_pad_new Perl_pad_setsv
++syn keyword xsFunction Perl_pad_sv Perl_pad_tidy Perl_parse_arithexpr
++syn keyword xsFunction Perl_parse_barestmt Perl_parse_block
++syn keyword xsFunction Perl_parse_fullexpr Perl_parse_fullstmt
++syn keyword xsFunction Perl_parse_label Perl_parse_listexpr
++syn keyword xsFunction Perl_parse_stmtseq Perl_parse_termexpr Perl_parser_dup
++syn keyword xsFunction Perl_pmop_dump Perl_pop_scope Perl_pregcomp
++syn keyword xsFunction Perl_pregexec Perl_pregfree Perl_pregfree2
++syn keyword xsFunction Perl_prescan_version Perl_printf_nocontext
++syn keyword xsFunction Perl_ptr_table_fetch Perl_ptr_table_free
++syn keyword xsFunction Perl_ptr_table_new Perl_ptr_table_split
++syn keyword xsFunction Perl_ptr_table_store Perl_push_scope Perl_pv_display
++syn keyword xsFunction Perl_pv_escape Perl_pv_pretty Perl_pv_uni_display
++syn keyword xsFunction Perl_re_compile Perl_re_dup_guts Perl_re_intuit_start
++syn keyword xsFunction Perl_re_intuit_string Perl_realloc Perl_reentrant_free
++syn keyword xsFunction Perl_reentrant_init Perl_reentrant_retry
++syn keyword xsFunction Perl_reentrant_size Perl_reg_named_buff_all
++syn keyword xsFunction Perl_reg_named_buff_exists Perl_reg_named_buff_fetch
++syn keyword xsFunction Perl_reg_named_buff_firstkey
++syn keyword xsFunction Perl_reg_named_buff_nextkey Perl_reg_named_buff_scalar
++syn keyword xsFunction Perl_regclass_swash Perl_regdump Perl_regdupe_internal
++syn keyword xsFunction Perl_regexec_flags Perl_regfree_internal
++syn keyword xsFunction Perl_reginitcolors Perl_regnext Perl_repeatcpy
++syn keyword xsFunction Perl_require_pv Perl_rninstr Perl_rsignal
++syn keyword xsFunction Perl_rsignal_state Perl_runops_debug
++syn keyword xsFunction Perl_runops_standard Perl_rv2cv_op_cv Perl_rvpv_dup
++syn keyword xsFunction Perl_safesyscalloc Perl_safesysfree Perl_safesysmalloc
++syn keyword xsFunction Perl_safesysrealloc Perl_save_I16 Perl_save_I32
++syn keyword xsFunction Perl_save_I8 Perl_save_adelete Perl_save_aelem_flags
++syn keyword xsFunction Perl_save_alloc Perl_save_aptr Perl_save_ary
++syn keyword xsFunction Perl_save_bool Perl_save_clearsv Perl_save_delete
++syn keyword xsFunction Perl_save_destructor Perl_save_destructor_x
++syn keyword xsFunction Perl_save_generic_pvref Perl_save_generic_svref
++syn keyword xsFunction Perl_save_gp Perl_save_hash Perl_save_hdelete
++syn keyword xsFunction Perl_save_helem_flags Perl_save_hints Perl_save_hptr
++syn keyword xsFunction Perl_save_int Perl_save_item Perl_save_iv
++syn keyword xsFunction Perl_save_list Perl_save_long Perl_save_nogv
++syn keyword xsFunction Perl_save_padsv_and_mortalize Perl_save_pptr
++syn keyword xsFunction Perl_save_pushi32ptr Perl_save_pushptr
++syn keyword xsFunction Perl_save_pushptrptr Perl_save_re_context
++syn keyword xsFunction Perl_save_scalar Perl_save_set_svflags
++syn keyword xsFunction Perl_save_shared_pvref Perl_save_sptr Perl_save_svref
++syn keyword xsFunction Perl_save_vptr Perl_savepv Perl_savepvn
++syn keyword xsFunction Perl_savesharedpv Perl_savesharedpvn
++syn keyword xsFunction Perl_savesharedsvpv Perl_savestack_grow
++syn keyword xsFunction Perl_savestack_grow_cnt Perl_savesvpv Perl_scan_bin
++syn keyword xsFunction Perl_scan_hex Perl_scan_num Perl_scan_oct
++syn keyword xsFunction Perl_scan_version Perl_scan_vstring Perl_screaminstr
++syn keyword xsFunction Perl_seed Perl_set_context Perl_set_numeric_local
++syn keyword xsFunction Perl_set_numeric_radix Perl_set_numeric_standard
++syn keyword xsFunction Perl_setdefout Perl_share_hek Perl_si_dup Perl_sortsv
++syn keyword xsFunction Perl_sortsv_flags Perl_ss_dup Perl_stack_grow
++syn keyword xsFunction Perl_start_subparse Perl_stashpv_hvname_match
++syn keyword xsFunction Perl_str_to_version Perl_sv_2bool_flags Perl_sv_2cv
++syn keyword xsFunction Perl_sv_2io Perl_sv_2iv_flags Perl_sv_2mortal
++syn keyword xsFunction Perl_sv_2nv_flags Perl_sv_2pv_flags Perl_sv_2pvbyte
++syn keyword xsFunction Perl_sv_2pvutf8 Perl_sv_2uv_flags Perl_sv_backoff
++syn keyword xsFunction Perl_sv_bless Perl_sv_cat_decode Perl_sv_catpv
++syn keyword xsFunction Perl_sv_catpv_flags Perl_sv_catpv_mg Perl_sv_catpvf
++syn keyword xsFunction Perl_sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
++syn keyword xsFunction Perl_sv_catpvf_nocontext Perl_sv_catpvn_flags
++syn keyword xsFunction Perl_sv_catsv_flags Perl_sv_chop Perl_sv_clear
++syn keyword xsFunction Perl_sv_cmp Perl_sv_cmp_flags Perl_sv_cmp_locale
++syn keyword xsFunction Perl_sv_cmp_locale_flags Perl_sv_collxfrm_flags
++syn keyword xsFunction Perl_sv_copypv Perl_sv_dec Perl_sv_dec_nomg
++syn keyword xsFunction Perl_sv_derived_from Perl_sv_derived_from_pv
++syn keyword xsFunction Perl_sv_derived_from_pvn Perl_sv_derived_from_sv
++syn keyword xsFunction Perl_sv_destroyable Perl_sv_does Perl_sv_does_pv
++syn keyword xsFunction Perl_sv_does_pvn Perl_sv_does_sv Perl_sv_dump
++syn keyword xsFunction Perl_sv_dup Perl_sv_dup_inc Perl_sv_eq_flags
++syn keyword xsFunction Perl_sv_force_normal_flags Perl_sv_free Perl_sv_gets
++syn keyword xsFunction Perl_sv_grow Perl_sv_inc Perl_sv_inc_nomg
++syn keyword xsFunction Perl_sv_insert_flags Perl_sv_isa Perl_sv_isobject
++syn keyword xsFunction Perl_sv_iv Perl_sv_len Perl_sv_len_utf8 Perl_sv_magic
++syn keyword xsFunction Perl_sv_magicext Perl_sv_mortalcopy Perl_sv_newmortal
++syn keyword xsFunction Perl_sv_newref Perl_sv_nosharing Perl_sv_nounlocking
++syn keyword xsFunction Perl_sv_nv Perl_sv_peek Perl_sv_pos_b2u
++syn keyword xsFunction Perl_sv_pos_u2b Perl_sv_pos_u2b_flags Perl_sv_pvbyten
++syn keyword xsFunction Perl_sv_pvbyten_force Perl_sv_pvn
++syn keyword xsFunction Perl_sv_pvn_force_flags Perl_sv_pvn_nomg
++syn keyword xsFunction Perl_sv_pvutf8n Perl_sv_pvutf8n_force
++syn keyword xsFunction Perl_sv_recode_to_utf8 Perl_sv_reftype Perl_sv_replace
++syn keyword xsFunction Perl_sv_report_used Perl_sv_reset Perl_sv_rvweaken
++syn keyword xsFunction Perl_sv_setiv Perl_sv_setiv_mg Perl_sv_setnv
++syn keyword xsFunction Perl_sv_setnv_mg Perl_sv_setpv Perl_sv_setpv_mg
++syn keyword xsFunction Perl_sv_setpvf Perl_sv_setpvf_mg
++syn keyword xsFunction Perl_sv_setpvf_mg_nocontext Perl_sv_setpvf_nocontext
++syn keyword xsFunction Perl_sv_setpviv Perl_sv_setpviv_mg Perl_sv_setpvn
++syn keyword xsFunction Perl_sv_setpvn_mg Perl_sv_setref_iv Perl_sv_setref_nv
++syn keyword xsFunction Perl_sv_setref_pv Perl_sv_setref_pvn Perl_sv_setref_uv
++syn keyword xsFunction Perl_sv_setsv_flags Perl_sv_setsv_mg Perl_sv_setuv
++syn keyword xsFunction Perl_sv_setuv_mg Perl_sv_tainted Perl_sv_true
++syn keyword xsFunction Perl_sv_uni_display Perl_sv_unmagic Perl_sv_unmagicext
++syn keyword xsFunction Perl_sv_unref_flags Perl_sv_untaint Perl_sv_upgrade
++syn keyword xsFunction Perl_sv_usepvn_flags Perl_sv_utf8_decode
++syn keyword xsFunction Perl_sv_utf8_downgrade Perl_sv_utf8_encode
++syn keyword xsFunction Perl_sv_utf8_upgrade_flags_grow Perl_sv_uv
++syn keyword xsFunction Perl_sv_vcatpvf Perl_sv_vcatpvf_mg Perl_sv_vcatpvfn
++syn keyword xsFunction Perl_sv_vsetpvf Perl_sv_vsetpvf_mg Perl_sv_vsetpvfn
++syn keyword xsFunction Perl_swash_fetch Perl_swash_init Perl_sys_init
++syn keyword xsFunction Perl_sys_init3 Perl_sys_intern_clear
++syn keyword xsFunction Perl_sys_intern_dup Perl_sys_intern_init Perl_sys_term
++syn keyword xsFunction Perl_taint_env Perl_taint_proper Perl_tmps_grow
++syn keyword xsFunction Perl_to_uni_lower Perl_to_uni_lower_lc
++syn keyword xsFunction Perl_to_uni_title Perl_to_uni_title_lc
++syn keyword xsFunction Perl_to_uni_upper Perl_to_uni_upper_lc
++syn keyword xsFunction Perl_to_utf8_case Perl_unlnk Perl_unpack_str
++syn keyword xsFunction Perl_unpackstring Perl_unsharepvn Perl_upg_version
++syn keyword xsFunction Perl_utf16_to_utf8 Perl_utf16_to_utf8_reversed
++syn keyword xsFunction Perl_utf8_distance Perl_utf8_hop Perl_utf8_length
++syn keyword xsFunction Perl_utf8_to_bytes Perl_utf8_to_uvchr_buf
++syn keyword xsFunction Perl_utf8_to_uvuni_buf Perl_utf8n_to_uvchr
++syn keyword xsFunction Perl_utf8n_to_uvuni Perl_uvchr_to_utf8
++syn keyword xsFunction Perl_uvchr_to_utf8_flags Perl_uvuni_to_utf8_flags
++syn keyword xsFunction Perl_valid_utf8_to_uvchr Perl_valid_utf8_to_uvuni
++syn keyword xsFunction Perl_vcmp Perl_vcroak Perl_vdeb Perl_vform
++syn keyword xsFunction Perl_vload_module Perl_vmess Perl_vnewSVpvf
++syn keyword xsFunction Perl_vnormal Perl_vnumify Perl_vstringify Perl_vverify
++syn keyword xsFunction Perl_vwarn Perl_vwarner Perl_warn Perl_warn_nocontext
++syn keyword xsFunction Perl_warn_sv Perl_warner Perl_warner_nocontext
++syn keyword xsFunction Perl_whichsig_pv Perl_whichsig_pvn Perl_whichsig_sv
++syn keyword xsFunction Perl_wrap_op_checker Slab_Alloc Slab_Free
++syn keyword xsFunction _is_utf8_quotemeta _to_uni_fold_flags
++syn keyword xsFunction _to_utf8_fold_flags _to_utf8_lower_flags
++syn keyword xsFunction _to_utf8_title_flags _to_utf8_upper_flags amagic_call
++syn keyword xsFunction amagic_deref_call any_dup apply_attrs_string
++syn keyword xsFunction atfork_lock atfork_unlock av_clear av_delete av_exists
++syn keyword xsFunction av_extend av_fetch av_fill av_len av_make av_pop
++syn keyword xsFunction av_push av_shift av_store av_undef av_unshift
++syn keyword xsFunction block_gimme bytes_cmp_utf8 bytes_from_utf8
++syn keyword xsFunction bytes_to_utf8 call_argv call_atexit call_list
++syn keyword xsFunction call_method call_pv call_sv caller_cx cast_i32 cast_iv
++syn keyword xsFunction cast_ulong cast_uv ck_entersub_args_list
++syn keyword xsFunction ck_entersub_args_proto ck_entersub_args_proto_or_list
++syn keyword xsFunction ck_warner ck_warner_d croak croak_no_modify
++syn keyword xsFunction croak_nocontext croak_sv croak_xs_usage csighandler
++syn keyword xsFunction custom_op_desc custom_op_name cv_clone cv_const_sv
++syn keyword xsFunction cv_get_call_checker cv_set_call_checker cv_undef
++syn keyword xsFunction cx_dump cx_dup cxinc deb deb_nocontext debop
++syn keyword xsFunction debprofdump debstack debstackptrs delimcpy
++syn keyword xsFunction despatch_signals die die_nocontext die_sv dirp_dup
++syn keyword xsFunction do_aspawn do_binmode do_close do_gv_dump do_gvgv_dump
++syn keyword xsFunction do_hv_dump do_join do_magic_dump do_op_dump do_open9
++syn keyword xsFunction do_openn do_pmop_dump do_spawn do_spawn_nowait
++syn keyword xsFunction do_sprintf do_sv_dump doing_taint doref dounwind
++syn keyword xsFunction dowantarray dump_all dump_eval dump_fds dump_form
++syn keyword xsFunction dump_indent dump_mstats dump_packsubs dump_sub
++syn keyword xsFunction dump_vindent eval_pv eval_sv fbm_compile fbm_instr
++syn keyword xsFunction filter_add filter_del filter_read find_runcv
++syn keyword xsFunction find_rundefsv foldEQ foldEQ_latin1 foldEQ_locale
++syn keyword xsFunction foldEQ_utf8_flags form form_nocontext fp_dup
++syn keyword xsFunction fprintf_nocontext free_global_struct free_tmps get_av
++syn keyword xsFunction get_context get_cv get_cvn_flags get_hv get_mstats
++syn keyword xsFunction get_op_descs get_op_names get_ppaddr get_sv get_vtbl
++syn keyword xsFunction getcwd_sv gp_dup gp_free gp_ref grok_bin grok_hex
++syn keyword xsFunction grok_number grok_numeric_radix grok_oct gv_add_by_type
++syn keyword xsFunction gv_autoload_pv gv_autoload_pvn gv_autoload_sv gv_check
++syn keyword xsFunction gv_const_sv gv_dump gv_efullname gv_efullname4
++syn keyword xsFunction gv_fetchfile gv_fetchfile_flags gv_fetchmeth_pv
++syn keyword xsFunction gv_fetchmeth_pv_autoload gv_fetchmeth_pvn
++syn keyword xsFunction gv_fetchmeth_pvn_autoload gv_fetchmeth_sv
++syn keyword xsFunction gv_fetchmeth_sv_autoload gv_fetchmethod_autoload
++syn keyword xsFunction gv_fetchmethod_pv_flags gv_fetchmethod_pvn_flags
++syn keyword xsFunction gv_fetchmethod_sv_flags gv_fetchpv gv_fetchpvn_flags
++syn keyword xsFunction gv_fetchsv gv_fullname gv_fullname4 gv_handler
++syn keyword xsFunction gv_init_pv gv_init_pvn gv_init_sv gv_name_set
++syn keyword xsFunction gv_stashpv gv_stashpvn gv_stashsv he_dup hek_dup
++syn keyword xsFunction hv_clear hv_clear_placeholders hv_common
++syn keyword xsFunction hv_common_key_len hv_copy_hints_hv hv_delayfree_ent
++syn keyword xsFunction hv_free_ent hv_iterinit hv_iterkey hv_iterkeysv
++syn keyword xsFunction hv_iternext_flags hv_iternextsv hv_iterval hv_ksplit
++syn keyword xsFunction hv_name_set hv_scalar init_global_struct init_i18nl10n
++syn keyword xsFunction init_i18nl14n init_stacks init_tm instr
++syn keyword xsFunction is_ascii_string is_lvalue_sub is_uni_alnum
++syn keyword xsFunction is_uni_alnum_lc is_uni_alpha is_uni_alpha_lc
++syn keyword xsFunction is_uni_ascii is_uni_ascii_lc is_uni_cntrl
++syn keyword xsFunction is_uni_cntrl_lc is_uni_digit is_uni_digit_lc
++syn keyword xsFunction is_uni_graph is_uni_graph_lc is_uni_idfirst
++syn keyword xsFunction is_uni_idfirst_lc is_uni_lower is_uni_lower_lc
++syn keyword xsFunction is_uni_print is_uni_print_lc is_uni_punct
++syn keyword xsFunction is_uni_punct_lc is_uni_space is_uni_space_lc
++syn keyword xsFunction is_uni_upper is_uni_upper_lc is_uni_xdigit
++syn keyword xsFunction is_uni_xdigit_lc is_utf8_alnum is_utf8_alpha
++syn keyword xsFunction is_utf8_ascii is_utf8_char_buf is_utf8_cntrl
++syn keyword xsFunction is_utf8_digit is_utf8_graph is_utf8_idcont
++syn keyword xsFunction is_utf8_idfirst is_utf8_lower is_utf8_mark
++syn keyword xsFunction is_utf8_perl_space is_utf8_perl_word
++syn keyword xsFunction is_utf8_posix_digit is_utf8_print is_utf8_punct
++syn keyword xsFunction is_utf8_space is_utf8_string is_utf8_string_loclen
++syn keyword xsFunction is_utf8_upper is_utf8_xdigit is_utf8_xidcont
++syn keyword xsFunction is_utf8_xidfirst leave_scope lex_bufutf8
++syn keyword xsFunction lex_discard_to lex_grow_linestr lex_next_chunk
++syn keyword xsFunction lex_peek_unichar lex_read_space lex_read_to
++syn keyword xsFunction lex_read_unichar lex_start lex_stuff_pv lex_stuff_pvn
++syn keyword xsFunction lex_stuff_sv lex_unstuff load_module
++syn keyword xsFunction load_module_nocontext looks_like_number magic_dump
++syn keyword xsFunction markstack_grow mess mess_nocontext mess_sv mg_clear
++syn keyword xsFunction mg_copy mg_dup mg_find mg_findext mg_free mg_free_type
++syn keyword xsFunction mg_get mg_length mg_magical mg_set mg_size mini_mktime
++syn keyword xsFunction moreswitches mro_get_linear_isa mro_method_changed_in
++syn keyword xsFunction my_atof my_atof2 my_bcopy my_bzero my_chsize my_dirfd
++syn keyword xsFunction my_exit my_failure_exit my_fflush_all my_fork my_htonl
++syn keyword xsFunction my_memcmp my_memset my_ntohl my_pclose my_popen
++syn keyword xsFunction my_popen_list my_setenv my_socketpair my_strftime
++syn keyword xsFunction my_swap newANONATTRSUB newANONHASH newANONLIST
++syn keyword xsFunction newANONSUB newASSIGNOP newATTRSUB newAVREF newBINOP
++syn keyword xsFunction newCONDOP newCONSTSUB newCONSTSUB_flags newCVREF
++syn keyword xsFunction newFORM newFOROP newGIVENOP newGVOP newGVREF
++syn keyword xsFunction newGVgen_flags newHVREF newHVhv newLISTOP newLOGOP
++syn keyword xsFunction newLOOPEX newLOOPOP newMYSUB newNULLLIST newOP
++syn keyword xsFunction newPADOP newPMOP newPROG newPVOP newRANGE newRV
++syn keyword xsFunction newRV_noinc newSLICEOP newSTATEOP newSV newSVOP
++syn keyword xsFunction newSVREF newSV_type newSVhek newSViv newSVnv newSVpv
++syn keyword xsFunction newSVpv_share newSVpvf newSVpvf_nocontext newSVpvn
++syn keyword xsFunction newSVpvn_flags newSVpvn_share newSVrv newSVsv newSVuv
++syn keyword xsFunction newUNOP newWHENOP newWHILEOP newXS newXS_flags
++syn keyword xsFunction new_collate new_ctype new_numeric new_stackinfo
++syn keyword xsFunction new_version ninstr nothreadhook op_append_elem
++syn keyword xsFunction op_append_list op_contextualize op_dump op_free
++syn keyword xsFunction op_linklist op_null op_prepend_elem op_refcnt_lock
++syn keyword xsFunction op_refcnt_unlock op_scope pack_cat packlist
++syn keyword xsFunction pad_add_anon pad_add_name_pv pad_add_name_pvn
++syn keyword xsFunction pad_add_name_sv pad_alloc pad_compname_type
++syn keyword xsFunction pad_findmy_pv pad_findmy_pvn pad_findmy_sv pad_new
++syn keyword xsFunction pad_setsv pad_sv pad_tidy parse_arithexpr
++syn keyword xsFunction parse_barestmt parse_block parse_fullexpr
++syn keyword xsFunction parse_fullstmt parse_label parse_listexpr
++syn keyword xsFunction parse_stmtseq parse_termexpr parser_dup pmop_dump
++syn keyword xsFunction pop_scope pregcomp pregexec pregfree pregfree2
++syn keyword xsFunction prescan_version printf_nocontext ptr_table_fetch
++syn keyword xsFunction ptr_table_free ptr_table_new ptr_table_split
++syn keyword xsFunction ptr_table_store push_scope pv_display pv_escape
++syn keyword xsFunction pv_pretty pv_uni_display re_compile re_dup_guts
++syn keyword xsFunction re_intuit_start re_intuit_string reentrant_free
++syn keyword xsFunction reentrant_init reentrant_retry reentrant_size
++syn keyword xsFunction reg_named_buff_all reg_named_buff_exists
++syn keyword xsFunction reg_named_buff_fetch reg_named_buff_firstkey
++syn keyword xsFunction reg_named_buff_nextkey reg_named_buff_scalar
++syn keyword xsFunction regclass_swash regdump regdupe_internal regexec_flags
++syn keyword xsFunction regfree_internal reginitcolors regnext repeatcpy
++syn keyword xsFunction require_pv rninstr rsignal rsignal_state runops_debug
++syn keyword xsFunction runops_standard rv2cv_op_cv rvpv_dup safesyscalloc
++syn keyword xsFunction safesysfree safesysmalloc safesysrealloc save_I16
++syn keyword xsFunction save_I32 save_I8 save_adelete save_aelem_flags
++syn keyword xsFunction save_alloc save_aptr save_ary save_bool save_clearsv
++syn keyword xsFunction save_delete save_destructor save_destructor_x
++syn keyword xsFunction save_generic_pvref save_generic_svref save_gp
++syn keyword xsFunction save_hash save_hdelete save_helem_flags save_hints
++syn keyword xsFunction save_hptr save_int save_item save_iv save_list
++syn keyword xsFunction save_long save_nogv save_padsv_and_mortalize save_pptr
++syn keyword xsFunction save_pushi32ptr save_pushptr save_pushptrptr
++syn keyword xsFunction save_re_context save_scalar save_set_svflags
++syn keyword xsFunction save_shared_pvref save_sptr save_svref save_vptr
++syn keyword xsFunction savepv savepvn savesharedpv savesharedpvn
++syn keyword xsFunction savesharedsvpv savestack_grow savestack_grow_cnt
++syn keyword xsFunction savesvpv scan_bin scan_hex scan_num scan_oct
++syn keyword xsFunction scan_version scan_vstring screaminstr seed set_context
++syn keyword xsFunction set_numeric_local set_numeric_radix
++syn keyword xsFunction set_numeric_standard setdefout share_hek si_dup sortsv
++syn keyword xsFunction sortsv_flags ss_dup stack_grow start_subparse
++syn keyword xsFunction stashpv_hvname_match str_to_version sv_2bool_flags
++syn keyword xsFunction sv_2cv sv_2io sv_2iv_flags sv_2mortal sv_2nv_flags
++syn keyword xsFunction sv_2pv_flags sv_2pvbyte sv_2pvutf8 sv_2uv_flags
++syn keyword xsFunction sv_backoff sv_bless sv_cat_decode sv_catpv
++syn keyword xsFunction sv_catpv_flags sv_catpv_mg sv_catpvf sv_catpvf_mg
++syn keyword xsFunction sv_catpvf_mg_nocontext sv_catpvf_nocontext
++syn keyword xsFunction sv_catpvn_flags sv_catsv_flags sv_chop sv_clear
++syn keyword xsFunction sv_cmp_flags sv_cmp_locale_flags sv_collxfrm_flags
++syn keyword xsFunction sv_copypv sv_dec sv_dec_nomg sv_derived_from
++syn keyword xsFunction sv_derived_from_pv sv_derived_from_pvn
++syn keyword xsFunction sv_derived_from_sv sv_destroyable sv_does sv_does_pv
++syn keyword xsFunction sv_does_pvn sv_does_sv sv_dump sv_dup sv_dup_inc
++syn keyword xsFunction sv_eq_flags sv_force_normal_flags sv_free sv_gets
++syn keyword xsFunction sv_grow sv_inc sv_inc_nomg sv_insert_flags sv_isa
++syn keyword xsFunction sv_isobject sv_iv sv_len sv_len_utf8 sv_magic
++syn keyword xsFunction sv_magicext sv_mortalcopy sv_newmortal sv_newref
++syn keyword xsFunction sv_nosharing sv_nounlocking sv_nv sv_peek sv_pos_b2u
++syn keyword xsFunction sv_pos_u2b sv_pos_u2b_flags sv_pvbyten
++syn keyword xsFunction sv_pvbyten_force sv_pvn sv_pvn_force_flags sv_pvn_nomg
++syn keyword xsFunction sv_pvutf8n sv_pvutf8n_force sv_recode_to_utf8
++syn keyword xsFunction sv_reftype sv_replace sv_report_used sv_reset
++syn keyword xsFunction sv_rvweaken sv_setiv sv_setiv_mg sv_setnv sv_setnv_mg
++syn keyword xsFunction sv_setpv sv_setpv_mg sv_setpvf sv_setpvf_mg
++syn keyword xsFunction sv_setpvf_mg_nocontext sv_setpvf_nocontext sv_setpviv
++syn keyword xsFunction sv_setpviv_mg sv_setpvn sv_setpvn_mg sv_setref_iv
++syn keyword xsFunction sv_setref_nv sv_setref_pv sv_setref_pvn sv_setref_uv
++syn keyword xsFunction sv_setsv_flags sv_setsv_mg sv_setuv sv_setuv_mg
++syn keyword xsFunction sv_tainted sv_true sv_uni_display sv_unmagic
++syn keyword xsFunction sv_unmagicext sv_unref_flags sv_untaint sv_upgrade
++syn keyword xsFunction sv_usepvn_flags sv_utf8_decode sv_utf8_downgrade
++syn keyword xsFunction sv_utf8_encode sv_utf8_upgrade_flags_grow sv_uv
++syn keyword xsFunction sv_vcatpvf sv_vcatpvf_mg sv_vcatpvfn sv_vsetpvf
++syn keyword xsFunction sv_vsetpvf_mg sv_vsetpvfn swash_fetch swash_init
++syn keyword xsFunction sys_intern_clear sys_intern_dup sys_intern_init
++syn keyword xsFunction taint_env taint_proper tmps_grow to_uni_lower
++syn keyword xsFunction to_uni_lower_lc to_uni_title to_uni_title_lc
++syn keyword xsFunction to_uni_upper to_uni_upper_lc to_utf8_case unlnk
++syn keyword xsFunction unpack_str unpackstring unsharepvn upg_version
++syn keyword xsFunction utf16_to_utf8 utf16_to_utf8_reversed utf8_distance
++syn keyword xsFunction utf8_hop utf8_length utf8_to_bytes utf8_to_uvchr_buf
++syn keyword xsFunction utf8_to_uvuni_buf utf8n_to_uvchr utf8n_to_uvuni
++syn keyword xsFunction uvchr_to_utf8 uvchr_to_utf8_flags uvuni_to_utf8_flags
++syn keyword xsFunction valid_utf8_to_uvchr valid_utf8_to_uvuni vcmp vcroak
++syn keyword xsFunction vdeb vform vload_module vmess vnewSVpvf vnormal
++syn keyword xsFunction vnumify vstringify vverify vwarn vwarner warn
++syn keyword xsFunction warn_nocontext warn_sv warner warner_nocontext
++syn keyword xsFunction whichsig_pv whichsig_pvn whichsig_sv wrap_op_checker
++syn keyword xsVariable MARK MY_CXT ORIGMARK PL_I PL_No PL_Vars PL_VarsPtr
++syn keyword xsVariable PL_Yes PL_a2e PL_bincompat_options PL_bitcount
++syn keyword xsVariable PL_block_type PL_bufend PL_bufptr PL_charclass
++syn keyword xsVariable PL_check PL_copline PL_core_reg_engine PL_cshname
++syn keyword xsVariable PL_curforce PL_e2a PL_e2utf PL_endwhite PL_error_count
++syn keyword xsVariable PL_expect PL_faketokens PL_fold PL_fold_latin1
++syn keyword xsVariable PL_fold_locale PL_force_link_funcs PL_freq
++syn keyword xsVariable PL_global_struct_size PL_hexdigit PL_in_my
++syn keyword xsVariable PL_in_my_stash PL_interp_size PL_interp_size_5_16_0
++syn keyword xsVariable PL_last_lop PL_last_lop_op PL_last_uni PL_lasttoke
++syn keyword xsVariable PL_latin1_lc PL_lex_allbrackets PL_lex_brackets
++syn keyword xsVariable PL_lex_brackstack PL_lex_casemods PL_lex_casestack
++syn keyword xsVariable PL_lex_defer PL_lex_dojoin PL_lex_expect
++syn keyword xsVariable PL_lex_fakeeof PL_lex_formbrack PL_lex_inpat
++syn keyword xsVariable PL_lex_inwhat PL_lex_op PL_lex_repl PL_lex_starts
++syn keyword xsVariable PL_lex_state PL_lex_stuff PL_linestart PL_linestr
++syn keyword xsVariable PL_magic_data PL_magic_vtable_names PL_memory_wrap
++syn keyword xsVariable PL_mod_latin1_uc PL_multi_close PL_multi_end
++syn keyword xsVariable PL_multi_open PL_multi_start PL_nexttoke PL_nexttype
++syn keyword xsVariable PL_nextval PL_nextwhite PL_no_aelem PL_no_dir_func
++syn keyword xsVariable PL_no_func PL_no_helem_sv PL_no_localize_ref PL_no_mem
++syn keyword xsVariable PL_no_modify PL_no_myglob PL_no_security
++syn keyword xsVariable PL_no_sock_func PL_no_symref PL_no_symref_sv
++syn keyword xsVariable PL_no_usym PL_no_wrongref PL_oldbufptr PL_oldoldbufptr
++syn keyword xsVariable PL_op_desc PL_op_name PL_opargs PL_pending_ident
++syn keyword xsVariable PL_phase_names PL_ppaddr PL_preambled
++syn keyword xsVariable PL_realtokenstart PL_reg_extflags_name PL_reg_name
++syn keyword xsVariable PL_regkind PL_revision PL_rsfp PL_rsfp_filters
++syn keyword xsVariable PL_runops_dbg PL_runops_std PL_sh_path PL_sig_name
++syn keyword xsVariable PL_sig_num PL_simple PL_simple_bitmask PL_skipwhite
++syn keyword xsVariable PL_sublex_info PL_subversion PL_thisclose PL_thismad
++syn keyword xsVariable PL_thisopen PL_thisstuff PL_thistoken PL_thiswhite
++syn keyword xsVariable PL_tokenbuf PL_utf2e PL_utf8skip PL_uudmap PL_uuemap
++syn keyword xsVariable PL_valid_types_IVX PL_valid_types_IV_set
++syn keyword xsVariable PL_valid_types_NVX PL_valid_types_NV_set
++syn keyword xsVariable PL_valid_types_PVX PL_valid_types_RV PL_varies
++syn keyword xsVariable PL_varies_bitmask PL_version PL_warn_nl PL_warn_nosemi
++syn keyword xsVariable PL_warn_reserved PL_warn_uninit PL_warn_uninit_sv
++syn keyword xsVariable RETVAL SP TARG _aMY_CXT _aTHX aMY_CXT aMY_CXT_ aTHX
++syn keyword xsVariable aTHX_ items
++syn keyword xsMacro ABORT ACCEPT ADDOP AHOCORASICK AHOCORASICKC
++syn keyword xsMacro ALLOC_THREAD_KEY ALNUM ALNUMA ALNUML ALNUMU AMG_CALLun
++syn keyword xsMacro AMG_CALLunary AMGf_assign AMGf_noleft AMGf_noright
++syn keyword xsMacro AMGf_numeric AMGf_set AMGf_unary AMGfallNEVER AMGfallNO
++syn keyword xsMacro AMGfallYES AMT_AMAGIC AMT_AMAGIC_off AMT_AMAGIC_on
++syn keyword xsMacro AMT_OVERLOADED AMT_OVERLOADED_off AMT_OVERLOADED_on
++syn keyword xsMacro AMTf_AMAGIC AMTf_OVERLOADED ANDAND ANDOP ANONSUB ANYOF
++syn keyword xsMacro ANYOFV ANYOF_ALNUM ANYOF_ALNUMC ANYOF_ALNUML ANYOF_ALPHA
++syn keyword xsMacro ANYOF_ASCII ANYOF_BIT ANYOF_BITMAP ANYOF_BITMAP_BYTE
++syn keyword xsMacro ANYOF_BITMAP_CLEAR ANYOF_BITMAP_CLEARALL ANYOF_BITMAP_SET
++syn keyword xsMacro ANYOF_BITMAP_SETALL ANYOF_BITMAP_SIZE ANYOF_BITMAP_TEST
++syn keyword xsMacro ANYOF_BITMAP_TESTALLSET ANYOF_BITMAP_ZERO ANYOF_BLANK
++syn keyword xsMacro ANYOF_CLASS ANYOF_CLASSBITMAP_SIZE ANYOF_CLASS_BYTE
++syn keyword xsMacro ANYOF_CLASS_CLEAR ANYOF_CLASS_SET ANYOF_CLASS_SETALL
++syn keyword xsMacro ANYOF_CLASS_SIZE ANYOF_CLASS_SKIP ANYOF_CLASS_TEST
++syn keyword xsMacro ANYOF_CLASS_TEST_ANY_SET ANYOF_CLASS_ZERO ANYOF_CNTRL
++syn keyword xsMacro ANYOF_DIGIT ANYOF_EOS ANYOF_FLAGS ANYOF_FLAGS_ALL
++syn keyword xsMacro ANYOF_FOLD_SHARP_S ANYOF_GRAPH ANYOF_HORIZWS ANYOF_INVERT
++syn keyword xsMacro ANYOF_IS_SYNTHETIC ANYOF_LARGE ANYOF_LOCALE
++syn keyword xsMacro ANYOF_LOC_NONBITMAP_FOLD ANYOF_LOWER ANYOF_MAX
++syn keyword xsMacro ANYOF_NALNUM ANYOF_NALNUMC ANYOF_NALNUML ANYOF_NALPHA
++syn keyword xsMacro ANYOF_NASCII ANYOF_NBLANK ANYOF_NCNTRL ANYOF_NDIGIT
++syn keyword xsMacro ANYOF_NGRAPH ANYOF_NHORIZWS ANYOF_NLOWER ANYOF_NONBITMAP
++syn keyword xsMacro ANYOF_NONBITMAP_EMPTY ANYOF_NONBITMAP_NON_UTF8
++syn keyword xsMacro ANYOF_NON_UTF8_LATIN1_ALL ANYOF_NPRINT ANYOF_NPSXSPC
++syn keyword xsMacro ANYOF_NPUNCT ANYOF_NSPACE ANYOF_NSPACEL ANYOF_NUPPER
++syn keyword xsMacro ANYOF_NVERTWS ANYOF_NXDIGIT ANYOF_PRINT ANYOF_PSXSPC
++syn keyword xsMacro ANYOF_PUNCT ANYOF_SIZE ANYOF_SKIP ANYOF_SPACE
++syn keyword xsMacro ANYOF_SPACEL ANYOF_UNICODE_ALL ANYOF_UPPER ANYOF_VERTWS
++syn keyword xsMacro ANYOF_XDIGIT ARCHLIB ARCHLIB_EXP ARCHNAME ARG ARG1
++syn keyword xsMacro ARG1_LOC ARG1_SET ARG2 ARG2L ARG2L_LOC ARG2L_SET ARG2_LOC
++syn keyword xsMacro ARG2_SET ARGTARG ARG_LOC ARG_SET ARG_VALUE ARG__SET ARROW
++syn keyword xsMacro ASCII_MORE_RESTRICT_PAT_MODS ASCII_RESTRICT_PAT_MOD
++syn keyword xsMacro ASCII_RESTRICT_PAT_MODS ASCII_TO_NATIVE ASCII_TO_NEED
++syn keyword xsMacro ASCTIME_R_PROTO ASSERT_CURPAD_ACTIVE ASSERT_CURPAD_LEGAL
++syn keyword xsMacro ASSIGNOP Atof Atol Atoul AvALLOC AvARRAY AvARYLEN AvFILL
++syn keyword xsMacro AvFILLp AvMAX AvREAL AvREALISH AvREAL_off AvREAL_on
++syn keyword xsMacro AvREAL_only AvREIFY AvREIFY_off AvREIFY_on AvREIFY_only
++syn keyword xsMacro BACK BADVERSION BASEOP BHKf_bhk_eval BHKf_bhk_post_end
++syn keyword xsMacro BHKf_bhk_pre_end BHKf_bhk_start BIN BIN_EXP BITANDOP
++syn keyword xsMacro BITMAP_BYTE BITMAP_TEST BITOROP BIT_BUCKET BIT_DIGITS BOL
++syn keyword xsMacro BOUND BOUNDA BOUNDL BOUNDU BRANCH BRANCHJ BRANCH_next
++syn keyword xsMacro BRANCH_next_fail BSD_GETPGRP BSD_SETPGRP BSDish BUFSIZ
++syn keyword xsMacro BYTEORDER BhkDISABLE BhkENABLE BhkENTRY BhkENTRY_set
++syn keyword xsMacro BhkFLAGS Bit BmFLAGS BmPREVIOUS BmRARE BmUSEFUL
++syn keyword xsMacro CALLREGCOMP CALLREGCOMP_ENG CALLREGDUPE CALLREGDUPE_PVT
++syn keyword xsMacro CALLREGEXEC CALLREGFREE CALLREGFREE_PVT
++syn keyword xsMacro CALLREG_INTUIT_START CALLREG_INTUIT_STRING
++syn keyword xsMacro CALLREG_NAMED_BUFF_ALL CALLREG_NAMED_BUFF_CLEAR
++syn keyword xsMacro CALLREG_NAMED_BUFF_COUNT CALLREG_NAMED_BUFF_DELETE
++syn keyword xsMacro CALLREG_NAMED_BUFF_EXISTS CALLREG_NAMED_BUFF_FETCH
++syn keyword xsMacro CALLREG_NAMED_BUFF_FIRSTKEY CALLREG_NAMED_BUFF_NEXTKEY
++syn keyword xsMacro CALLREG_NAMED_BUFF_SCALAR CALLREG_NAMED_BUFF_STORE
++syn keyword xsMacro CALLREG_NUMBUF_FETCH CALLREG_NUMBUF_LENGTH
++syn keyword xsMacro CALLREG_NUMBUF_STORE CALLREG_PACKAGE CALLRUNOPS
++syn keyword xsMacro CALL_BLOCK_HOOKS CALL_FPTR CANY CAN_COW_FLAGS
++syn keyword xsMacro CAN_COW_MASK CAN_PROTOTYPE CAN_VAPROTO
++syn keyword xsMacro CASE_STD_PMMOD_FLAGS_PARSE_SET CASTFLAGS CASTNEGFLOAT
++syn keyword xsMacro CAT2 CATCH_GET CATCH_SET CHARBITS CHARSET_PAT_MODS
++syn keyword xsMacro CHECK_MALLOC_TAINT CHECK_MALLOC_TOO_LATE_FOR
++syn keyword xsMacro CHECK_MALLOC_TOO_LATE_FOR_ CLEAR_ARGARRAY CLEAR_ERRSV
++syn keyword xsMacro CLONEf_CLONE_HOST CLONEf_COPY_STACKS CLONEf_JOIN_IN
++syn keyword xsMacro CLONEf_KEEP_PTR_TABLE CLOSE CLUMP CLUMP_2IV CLUMP_2UV
++syn keyword xsMacro COLONATTR COMMIT COMMIT_next COMMIT_next_fail
++syn keyword xsMacro COND_BROADCAST COND_DESTROY COND_INIT COND_SIGNAL
++syn keyword xsMacro COND_WAIT CONTINUE CONTINUE_PAT_MOD COPHH_KEY_UTF8
++syn keyword xsMacro COP_SEQ_RANGE_HIGH COP_SEQ_RANGE_LOW CPERLarg CPERLarg_
++syn keyword xsMacro CPERLscope CPPLAST CPPMINUS CPPRUN CPPSTDIN CRYPT_R_PROTO
++syn keyword xsMacro CSH CTERMID_R_PROTO CTIME_R_PROTO CTYPE256 CURLY CURLYM
++syn keyword xsMacro CURLYM_A CURLYM_A_fail CURLYM_B CURLYM_B_fail CURLYN
++syn keyword xsMacro CURLYX CURLYX_end CURLYX_end_fail CURLY_B_max
++syn keyword xsMacro CURLY_B_max_fail CURLY_B_min CURLY_B_min_fail
++syn keyword xsMacro CURLY_B_min_known CURLY_B_min_known_fail
++syn keyword xsMacro CURRENT_FEATURE_BUNDLE CURRENT_HINTS CUTGROUP
++syn keyword xsMacro CUTGROUP_next CUTGROUP_next_fail CVf_ANON CVf_AUTOLOAD
++syn keyword xsMacro CVf_BUILTIN_ATTRS CVf_CLONE CVf_CLONED CVf_CONST
++syn keyword xsMacro CVf_CVGV_RC CVf_DYNFILE CVf_ISXSUB CVf_LVALUE CVf_METHOD
++syn keyword xsMacro CVf_NODEBUG CVf_UNIQUE CVf_WEAKOUTSIDE CXINC CXTYPEMASK
++syn keyword xsMacro CX_CURPAD_SAVE CX_CURPAD_SV CXp_FOR_DEF CXp_HASARGS
++syn keyword xsMacro CXp_MULTICALL CXp_ONCE CXp_REAL CXp_TRYBLOCK C_ARRAY_END
++syn keyword xsMacro C_ARRAY_LENGTH C_FAC_POSIX CopFILE CopFILEAV CopFILEAVx
++syn keyword xsMacro CopFILEGV CopFILEGV_set CopFILESV CopFILE_free
++syn keyword xsMacro CopFILE_set CopFILE_setn CopHINTHASH_get CopHINTHASH_set
++syn keyword xsMacro CopHINTS_get CopHINTS_set CopLABEL CopLABEL_alloc
++syn keyword xsMacro CopLABEL_len CopLABEL_len_flags CopLINE CopLINE_dec
++syn keyword xsMacro CopLINE_inc CopLINE_set CopSTASH CopSTASHPV
++syn keyword xsMacro CopSTASHPV_set CopSTASH_eq CopSTASH_free CopSTASH_len
++syn keyword xsMacro CopSTASH_len_set CopSTASH_ne CopSTASH_set Copy CopyD Ctl
++syn keyword xsMacro CvANON CvANON_off CvANON_on CvAUTOLOAD CvAUTOLOAD_off
++syn keyword xsMacro CvAUTOLOAD_on CvCLONE CvCLONED CvCLONED_off CvCLONED_on
++syn keyword xsMacro CvCLONE_off CvCLONE_on CvCONST CvCONST_off CvCONST_on
++syn keyword xsMacro CvCVGV_RC CvCVGV_RC_off CvCVGV_RC_on CvDEPTH CvDYNFILE
++syn keyword xsMacro CvDYNFILE_off CvDYNFILE_on CvEVAL CvEVAL_off CvEVAL_on
++syn keyword xsMacro CvFILE CvFILEGV CvFILE_set_from_cop CvFLAGS CvGV CvGV_set
++syn keyword xsMacro CvISXSUB CvISXSUB_off CvISXSUB_on CvLVALUE CvLVALUE_off
++syn keyword xsMacro CvLVALUE_on CvMETHOD CvMETHOD_off CvMETHOD_on CvNODEBUG
++syn keyword xsMacro CvNODEBUG_off CvNODEBUG_on CvOUTSIDE CvOUTSIDE_SEQ
++syn keyword xsMacro CvPADLIST CvPROTO CvPROTOLEN CvROOT CvSPECIAL
++syn keyword xsMacro CvSPECIAL_off CvSPECIAL_on CvSTART CvSTASH CvSTASH_set
++syn keyword xsMacro CvUNIQUE CvUNIQUE_off CvUNIQUE_on CvWEAKOUTSIDE
++syn keyword xsMacro CvWEAKOUTSIDE_off CvWEAKOUTSIDE_on CvXSUB CvXSUBANY
++syn keyword xsMacro CxFOREACH CxFOREACHDEF CxHASARGS CxITERVAR
++syn keyword xsMacro CxITERVAR_PADSV CxLABEL CxLABEL_len CxLABEL_len_flags
++syn keyword xsMacro CxLVAL CxMULTICALL CxOLD_IN_EVAL CxOLD_OP_TYPE CxONCE
++syn keyword xsMacro CxPADLOOP CxREALEVAL CxTRYBLOCK CxTYPE CxTYPE_is_LOOP
++syn keyword xsMacro DBL_DIG DBL_MAX DBL_MIN DBM_ckFilter DBM_setFilter
++syn keyword xsMacro DB_VERSION_MAJOR_CFG DB_VERSION_MINOR_CFG
++syn keyword xsMacro DB_VERSION_PATCH_CFG DEBUG_A DEBUG_A_FLAG DEBUG_A_TEST
++syn keyword xsMacro DEBUG_A_TEST_ DEBUG_B DEBUG_BUFFERS_r DEBUG_B_FLAG
++syn keyword xsMacro DEBUG_B_TEST DEBUG_B_TEST_ DEBUG_C DEBUG_COMPILE_r
++syn keyword xsMacro DEBUG_CX DEBUG_C_FLAG DEBUG_C_TEST DEBUG_C_TEST_ DEBUG_D
++syn keyword xsMacro DEBUG_DB_RECURSE_FLAG DEBUG_DUMP_r DEBUG_D_FLAG
++syn keyword xsMacro DEBUG_D_TEST DEBUG_D_TEST_ DEBUG_EXECUTE_r DEBUG_EXTRA_r
++syn keyword xsMacro DEBUG_FLAGS_r DEBUG_GPOS_r DEBUG_H DEBUG_H_FLAG
++syn keyword xsMacro DEBUG_H_TEST DEBUG_H_TEST_ DEBUG_INTUIT_r DEBUG_J_FLAG
++syn keyword xsMacro DEBUG_J_TEST DEBUG_J_TEST_ DEBUG_M DEBUG_MASK
++syn keyword xsMacro DEBUG_MATCH_r DEBUG_M_FLAG DEBUG_M_TEST DEBUG_M_TEST_
++syn keyword xsMacro DEBUG_OFFSETS_r DEBUG_OPTIMISE_MORE_r DEBUG_OPTIMISE_r
++syn keyword xsMacro DEBUG_P DEBUG_PARSE_r DEBUG_P_FLAG DEBUG_P_TEST
++syn keyword xsMacro DEBUG_P_TEST_ DEBUG_Pv DEBUG_Pv_TEST DEBUG_Pv_TEST_
++syn keyword xsMacro DEBUG_R DEBUG_R_FLAG DEBUG_R_TEST DEBUG_R_TEST_
++syn keyword xsMacro DEBUG_SCOPE DEBUG_STACK_r DEBUG_STATE_r DEBUG_T
++syn keyword xsMacro DEBUG_TOP_FLAG DEBUG_TRIE_COMPILE_MORE_r
++syn keyword xsMacro DEBUG_TRIE_COMPILE_r DEBUG_TRIE_EXECUTE_MORE_r
++syn keyword xsMacro DEBUG_TRIE_EXECUTE_r DEBUG_TRIE_r DEBUG_T_FLAG
++syn keyword xsMacro DEBUG_T_TEST DEBUG_T_TEST_ DEBUG_U DEBUG_U_FLAG
++syn keyword xsMacro DEBUG_U_TEST DEBUG_U_TEST_ DEBUG_Uv DEBUG_Uv_TEST
++syn keyword xsMacro DEBUG_Uv_TEST_ DEBUG_X DEBUG_X_FLAG DEBUG_X_TEST
++syn keyword xsMacro DEBUG_X_TEST_ DEBUG_Xv DEBUG_Xv_TEST DEBUG_Xv_TEST_
++syn keyword xsMacro DEBUG__ DEBUG_c DEBUG_c_FLAG DEBUG_c_TEST DEBUG_c_TEST_
++syn keyword xsMacro DEBUG_f DEBUG_f_FLAG DEBUG_f_TEST DEBUG_f_TEST_ DEBUG_l
++syn keyword xsMacro DEBUG_l_FLAG DEBUG_l_TEST DEBUG_l_TEST_ DEBUG_m
++syn keyword xsMacro DEBUG_m_FLAG DEBUG_m_TEST DEBUG_m_TEST_ DEBUG_o
++syn keyword xsMacro DEBUG_o_FLAG DEBUG_o_TEST DEBUG_o_TEST_ DEBUG_p
++syn keyword xsMacro DEBUG_p_FLAG DEBUG_p_TEST DEBUG_p_TEST_ DEBUG_q
++syn keyword xsMacro DEBUG_q_FLAG DEBUG_q_TEST DEBUG_q_TEST_ DEBUG_r
++syn keyword xsMacro DEBUG_r_FLAG DEBUG_r_TEST DEBUG_r_TEST_ DEBUG_s
++syn keyword xsMacro DEBUG_s_FLAG DEBUG_s_TEST DEBUG_s_TEST_ DEBUG_t_FLAG
++syn keyword xsMacro DEBUG_t_TEST DEBUG_t_TEST_ DEBUG_u DEBUG_u_FLAG
++syn keyword xsMacro DEBUG_u_TEST DEBUG_u_TEST_ DEBUG_v DEBUG_v_FLAG
++syn keyword xsMacro DEBUG_v_TEST DEBUG_v_TEST_ DEBUG_x DEBUG_x_FLAG
++syn keyword xsMacro DEBUG_x_TEST DEBUG_x_TEST_ DEFAULT DEFAULT_PAT_MOD
++syn keyword xsMacro DEFINEP DEFSV DEFSV_set DEPENDS_PAT_MOD DEPENDS_PAT_MODS
++syn keyword xsMacro DETACH DIE DIGIT DIGITA DIGITL DIR DM_ARRAY_ISA DM_DELAY
++syn keyword xsMacro DM_EGID DM_EUID DM_GID DM_RGID DM_RUID DM_UID DO DOINIT
++syn keyword xsMacro DOLSHARP DONT_DECLARE_STD DORDOR DOROP DOSISH DOTDOT
++syn keyword xsMacro DOUBLESIZE DO_UTF8 DPTR2FPTR DRAND48_R_PROTO DUP_WARNINGS
++syn keyword xsMacro Drand01 ELSE ELSIF EMBEDMYMALLOC END ENDGRENT_R_PROTO
++syn keyword xsMacro ENDHOSTENT_R_PROTO ENDLIKE ENDNETENT_R_PROTO
++syn keyword xsMacro ENDPROTOENT_R_PROTO ENDPWENT_R_PROTO ENDSERVENT_R_PROTO
++syn keyword xsMacro END_EXTERN_C ENTER ENTER_with_name ENTRY_PROBE ENUM_BOOL
++syn keyword xsMacro EOF EOL EOS EQOP ERRHV ERRSV EVAL EVAL_AB EVAL_AB_fail
++syn keyword xsMacro EVAL_INEVAL EVAL_INREQUIRE EVAL_KEEPERR EVAL_NULL
++syn keyword xsMacro EVAL_WARNONLY EXACT EXACTF EXACTFA EXACTFL EXACTFU
++syn keyword xsMacro EXACTFU_SS EXACTFU_TRICKYFOLD EXEC_ARGV_CAST EXEC_PAT_MOD
++syn keyword xsMacro EXEC_PAT_MODS EXPECT EXT EXTCONST EXTEND EXTEND_MORTAL
++syn keyword xsMacro EXTERN_C EXTPERLIO EXTRA_SIZE EXTRA_STEP_2ARGS EXT_MGVTBL
++syn keyword xsMacro EXT_PAT_MODS FAKE_BIT_BUCKET FAKE_DEFAULT_SIGNAL_HANDLERS
++syn keyword xsMacro FAKE_PERSISTENT_SIGNAL_HANDLERS FBMcf_TAIL
++syn keyword xsMacro FBMcf_TAIL_DOLLAR FBMcf_TAIL_DOLLARM FBMcf_TAIL_Z
++syn keyword xsMacro FBMcf_TAIL_z FBMrf_MULTILINE FCNTL_CAN_LOCK FD_CLR
++syn keyword xsMacro FD_ISSET FD_SET FD_ZERO FEATURE_ARYBASE_IS_ENABLED
++syn keyword xsMacro FEATURE_BUNDLE_510 FEATURE_BUNDLE_511 FEATURE_BUNDLE_515
++syn keyword xsMacro FEATURE_BUNDLE_CUSTOM FEATURE_BUNDLE_DEFAULT
++syn keyword xsMacro FEATURE_EVALBYTES_IS_ENABLED FEATURE_FC_IS_ENABLED
++syn keyword xsMacro FEATURE_IS_ENABLED FEATURE_SAY_IS_ENABLED
++syn keyword xsMacro FEATURE_STATE_IS_ENABLED FEATURE_SWITCH_IS_ENABLED
++syn keyword xsMacro FEATURE_UNICODE_IS_ENABLED FEATURE_UNIEVAL_IS_ENABLED
++syn keyword xsMacro FEATURE___SUB___IS_ENABLED FFLUSH_NULL FF_0DECIMAL
++syn keyword xsMacro FF_BLANK FF_CHECKCHOP FF_CHECKNL FF_CHOP FF_DECIMAL
++syn keyword xsMacro FF_END FF_FETCH FF_HALFSPACE FF_ITEM FF_LINEGLOB
++syn keyword xsMacro FF_LINEMARK FF_LINESNGL FF_LITERAL FF_MORE FF_NEWLINE
++syn keyword xsMacro FF_SKIP FF_SPACE FILE FILE_base FILE_bufsiz FILE_cnt
++syn keyword xsMacro FILE_ptr FILL_ADVANCE_NODE FILL_ADVANCE_NODE_ARG
++syn keyword xsMacro FILTER_DATA FILTER_ISREADER FILTER_READ FITS_IN_8_BITS
++syn keyword xsMacro FLAGS FLEXFILENAMES FOLDEQ_S1_ALREADY_FOLDED
++syn keyword xsMacro FOLDEQ_S2_ALREADY_FOLDED FOLDEQ_UTF8_LOCALE
++syn keyword xsMacro FOLDEQ_UTF8_NOMIX_ASCII FOLD_FLAGS_FULL FOLD_FLAGS_LOCALE
++syn keyword xsMacro FOR FORMAT FPTR2DPTR FREETMPS FREE_THREAD_KEY FSEEKSIZE
++syn keyword xsMacro FUNC FUNC0 FUNC0OP FUNC0SUB FUNC1 FUNCMETH FUNCTION__
++syn keyword xsMacro F_atan2_amg F_cos_amg F_exp_amg F_log_amg F_pow_amg
++syn keyword xsMacro F_sin_amg F_sqrt_amg Fflush FmLINES FreeOp Fstat
++syn keyword xsMacro GDBMNDBM_H_USES_PROTOTYPES GETATARGET GETGRENT_R_PROTO
++syn keyword xsMacro GETGRGID_R_PROTO GETGRNAM_R_PROTO GETHOSTBYADDR_R_PROTO
++syn keyword xsMacro GETHOSTBYNAME_R_PROTO GETHOSTENT_R_PROTO GETLOGIN_R_PROTO
++syn keyword xsMacro GETNETBYADDR_R_PROTO GETNETBYNAME_R_PROTO
++syn keyword xsMacro GETNETENT_R_PROTO GETPROTOBYNAME_R_PROTO
++syn keyword xsMacro GETPROTOBYNUMBER_R_PROTO GETPROTOENT_R_PROTO
++syn keyword xsMacro GETPWENT_R_PROTO GETPWNAM_R_PROTO GETPWUID_R_PROTO
++syn keyword xsMacro GETSERVBYNAME_R_PROTO GETSERVBYPORT_R_PROTO
++syn keyword xsMacro GETSERVENT_R_PROTO GETSPNAM_R_PROTO GETTARGET
++syn keyword xsMacro GETTARGETSTACKED GET_RE_DEBUG_FLAGS
++syn keyword xsMacro GET_RE_DEBUG_FLAGS_DECL GIMME GIMME_V GIVEN
++syn keyword xsMacro GLOBAL_PAT_MOD GMTIME_MAX GMTIME_MIN GMTIME_R
++syn keyword xsMacro GMTIME_R_PROTO GOSTART GOSUB GPOS GRAMBARESTMT GRAMBLOCK
++syn keyword xsMacro GRAMEXPR GRAMFULLSTMT GRAMPROG GRAMSTMTSEQ
++syn keyword xsMacro GREEK_CAPITAL_LETTER_MU GREEK_SMALL_LETTER_MU
++syn keyword xsMacro GROK_NUMERIC_RADIX GROUPP GRPASSWD GV_ADD GV_ADDINEVAL
++syn keyword xsMacro GV_ADDMG GV_ADDMULTI GV_ADDWARN GV_AUTOLOAD
++syn keyword xsMacro GV_AUTOLOAD_ISMETHOD GV_CROAK GV_NOADD_MASK
++syn keyword xsMacro GV_NOADD_NOINIT GV_NOEXPAND GV_NOINIT GV_NOTQUAL
++syn keyword xsMacro GV_NO_SVGMAGIC GVf_ASSUMECV GVf_IMPORTED GVf_IMPORTED_AV
++syn keyword xsMacro GVf_IMPORTED_CV GVf_IMPORTED_HV GVf_IMPORTED_SV GVf_INTRO
++syn keyword xsMacro GVf_IN_PAD GVf_MULTI Gconvert Gid_t_f Gid_t_sign
++syn keyword xsMacro Gid_t_size GvASSIGN_GENERATION GvASSIGN_GENERATION_set
++syn keyword xsMacro GvASSUMECV GvASSUMECV_off GvASSUMECV_on GvAV GvAVn GvCV
++syn keyword xsMacro GvCVGEN GvCV_set GvCVu GvEGV GvEGVx GvENAME GvENAMELEN
++syn keyword xsMacro GvENAMEUTF8 GvENAME_HEK GvESTASH GvFILE GvFILEGV
++syn keyword xsMacro GvFILE_HEK GvFLAGS GvFORM GvGP GvGP_set GvHV GvHVn
++syn keyword xsMacro GvIMPORTED GvIMPORTED_AV GvIMPORTED_AV_off
++syn keyword xsMacro GvIMPORTED_AV_on GvIMPORTED_CV GvIMPORTED_CV_off
++syn keyword xsMacro GvIMPORTED_CV_on GvIMPORTED_HV GvIMPORTED_HV_off
++syn keyword xsMacro GvIMPORTED_HV_on GvIMPORTED_SV GvIMPORTED_SV_off
++syn keyword xsMacro GvIMPORTED_SV_on GvIMPORTED_off GvIMPORTED_on GvINTRO
++syn keyword xsMacro GvINTRO_off GvINTRO_on GvIN_PAD GvIN_PAD_off GvIN_PAD_on
++syn keyword xsMacro GvIO GvIOn GvIOp GvLINE GvMULTI GvMULTI_off GvMULTI_on
++syn keyword xsMacro GvNAME GvNAMELEN GvNAMELEN_get GvNAMEUTF8 GvNAME_HEK
++syn keyword xsMacro GvNAME_get GvREFCNT GvSTASH GvSV GvSVn GvXPVGV Gv_AMG
++syn keyword xsMacro HASATTRIBUTE_DEPRECATED HASATTRIBUTE_FORMAT
++syn keyword xsMacro HASATTRIBUTE_MALLOC HASATTRIBUTE_NONNULL
++syn keyword xsMacro HASATTRIBUTE_NORETURN HASATTRIBUTE_PURE
++syn keyword xsMacro HASATTRIBUTE_UNUSED HASATTRIBUTE_WARN_UNUSED_RESULT
++syn keyword xsMacro HASCONST HASHBRACK HASVOLATILE HAS_64K_LIMIT HAS_ACCESS
++syn keyword xsMacro HAS_ALARM HAS_ATOLL HAS_BCMP HAS_BCOPY HAS_BOOL
++syn keyword xsMacro HAS_BUILTIN_CHOOSE_EXPR HAS_BUILTIN_EXPECT HAS_BZERO
++syn keyword xsMacro HAS_C99_VARIADIC_MACROS HAS_CHOWN HAS_CHROOT HAS_CLEARENV
++syn keyword xsMacro HAS_COPYSIGNL HAS_CRYPT HAS_CTERMID HAS_CUSERID
++syn keyword xsMacro HAS_DBL_DIG HAS_DBMINIT_PROTO HAS_DIFFTIME HAS_DIRFD
++syn keyword xsMacro HAS_DLERROR HAS_DRAND48_PROTO HAS_DUP2 HAS_EACCESS
++syn keyword xsMacro HAS_ENDGRENT HAS_ENDHOSTENT HAS_ENDNETENT HAS_ENDPROTOENT
++syn keyword xsMacro HAS_ENDPWENT HAS_ENDSERVENT HAS_FAST_STDIO HAS_FCHDIR
++syn keyword xsMacro HAS_FCHMOD HAS_FCHOWN HAS_FCNTL HAS_FD_SET HAS_FGETPOS
++syn keyword xsMacro HAS_FINITE HAS_FINITEL HAS_FLOCK HAS_FLOCK_PROTO HAS_FORK
++syn keyword xsMacro HAS_FPATHCONF HAS_FREXPL HAS_FSEEKO HAS_FSETPOS
++syn keyword xsMacro HAS_FSTATFS HAS_FSTATVFS HAS_FSYNC HAS_FTELLO HAS_FUTIMES
++syn keyword xsMacro HAS_GETADDRINFO HAS_GETCWD HAS_GETGRENT HAS_GETGROUPS
++syn keyword xsMacro HAS_GETHOSTBYADDR HAS_GETHOSTBYNAME HAS_GETHOSTENT
++syn keyword xsMacro HAS_GETHOSTNAME HAS_GETHOST_PROTOS HAS_GETITIMER
++syn keyword xsMacro HAS_GETLOGIN HAS_GETMNTENT HAS_GETNAMEINFO
++syn keyword xsMacro HAS_GETNETBYADDR HAS_GETNETBYNAME HAS_GETNETENT
++syn keyword xsMacro HAS_GETNET_PROTOS HAS_GETPAGESIZE HAS_GETPGID HAS_GETPGRP
++syn keyword xsMacro HAS_GETPPID HAS_GETPRIORITY HAS_GETPROTOBYNAME
++syn keyword xsMacro HAS_GETPROTOBYNUMBER HAS_GETPROTOENT HAS_GETPROTO_PROTOS
++syn keyword xsMacro HAS_GETPWENT HAS_GETSERVBYNAME HAS_GETSERVBYPORT
++syn keyword xsMacro HAS_GETSERVENT HAS_GETSERV_PROTOS HAS_GETSPNAM
++syn keyword xsMacro HAS_GETTIMEOFDAY HAS_GNULIBC HAS_GROUP HAS_HASMNTOPT
++syn keyword xsMacro HAS_HTOVL HAS_HTOVS HAS_ILOGBL HAS_INETNTOP HAS_INETPTON
++syn keyword xsMacro HAS_INET_ATON HAS_INT64_T HAS_IOCTL HAS_IPV6_MREQ
++syn keyword xsMacro HAS_ISASCII HAS_ISBLANK HAS_ISINF HAS_ISNAN HAS_ISNANL
++syn keyword xsMacro HAS_KILL HAS_KILLPG HAS_LCHOWN HAS_LDBL_DIG HAS_LINK
++syn keyword xsMacro HAS_LOCALECONV HAS_LOCKF HAS_LONG_DOUBLE HAS_LONG_LONG
++syn keyword xsMacro HAS_LSEEK_PROTO HAS_LSTAT HAS_MADVISE HAS_MBLEN
++syn keyword xsMacro HAS_MBSTOWCS HAS_MBTOWC HAS_MEMCHR HAS_MEMCMP HAS_MEMCPY
++syn keyword xsMacro HAS_MEMMOVE HAS_MEMSET HAS_MKDIR HAS_MKDTEMP HAS_MKFIFO
++syn keyword xsMacro HAS_MKSTEMP HAS_MKSTEMPS HAS_MKTIME HAS_MMAP HAS_MODFL
++syn keyword xsMacro HAS_MODFL_PROTO HAS_MPROTECT HAS_MSG HAS_MSG_CTRUNC
++syn keyword xsMacro HAS_MSG_DONTROUTE HAS_MSG_OOB HAS_MSG_PEEK HAS_MSG_PROXY
++syn keyword xsMacro HAS_MSYNC HAS_MUNMAP HAS_NICE HAS_NL_LANGINFO HAS_OPEN3
++syn keyword xsMacro HAS_PASSWD HAS_PATHCONF HAS_PAUSE HAS_PIPE HAS_POLL
++syn keyword xsMacro HAS_PRCTL HAS_PRCTL_SET_NAME HAS_PROCSELFEXE
++syn keyword xsMacro HAS_PTHREAD_ATTR_SETSCOPE
++syn keyword xsMacro HAS_PTHREAD_UNCHECKED_GETSPECIFIC_NP HAS_READDIR
++syn keyword xsMacro HAS_READLINK HAS_READV HAS_RECVMSG HAS_RENAME
++syn keyword xsMacro HAS_REWINDDIR HAS_RMDIR HAS_SANE_MEMCMP HAS_SBRK_PROTO
++syn keyword xsMacro HAS_SCALBNL HAS_SCHED_YIELD HAS_SCM_RIGHTS HAS_SEEKDIR
++syn keyword xsMacro HAS_SELECT HAS_SEM HAS_SENDMSG HAS_SETEGID HAS_SETEUID
++syn keyword xsMacro HAS_SETGRENT HAS_SETGROUPS HAS_SETHOSTENT HAS_SETITIMER
++syn keyword xsMacro HAS_SETLINEBUF HAS_SETLOCALE HAS_SETNETENT HAS_SETPGID
++syn keyword xsMacro HAS_SETPGRP HAS_SETPRIORITY HAS_SETPROTOENT HAS_SETPWENT
++syn keyword xsMacro HAS_SETREGID HAS_SETRESGID HAS_SETRESUID HAS_SETREUID
++syn keyword xsMacro HAS_SETSERVENT HAS_SETSID HAS_SETVBUF HAS_SHM
++syn keyword xsMacro HAS_SHMAT_PROTOTYPE HAS_SIGACTION HAS_SIGNBIT
++syn keyword xsMacro HAS_SIGPROCMASK HAS_SIGSETJMP HAS_SIN6_SCOPE_ID
++syn keyword xsMacro HAS_SNPRINTF HAS_SOCKADDR_IN6 HAS_SOCKATMARK
++syn keyword xsMacro HAS_SOCKATMARK_PROTO HAS_SOCKET HAS_SQRTL
++syn keyword xsMacro HAS_STATIC_INLINE HAS_STRCHR HAS_STRCOLL HAS_STRFTIME
++syn keyword xsMacro HAS_STRTOD HAS_STRTOL HAS_STRTOLD HAS_STRTOLL HAS_STRTOQ
++syn keyword xsMacro HAS_STRTOUL HAS_STRTOULL HAS_STRTOUQ HAS_STRUCT_CMSGHDR
++syn keyword xsMacro HAS_STRUCT_MSGHDR HAS_STRUCT_STATFS
++syn keyword xsMacro HAS_STRUCT_STATFS_F_FLAGS HAS_STRXFRM HAS_SYMLINK
++syn keyword xsMacro HAS_SYSCALL HAS_SYSCALL_PROTO HAS_SYSCONF HAS_SYSTEM
++syn keyword xsMacro HAS_SYS_ERRLIST HAS_TCGETPGRP HAS_TCSETPGRP HAS_TELLDIR
++syn keyword xsMacro HAS_TELLDIR_PROTO HAS_TIME HAS_TIMEGM HAS_TIMES
++syn keyword xsMacro HAS_TM_TM_GMTOFF HAS_TM_TM_ZONE HAS_TRUNCATE HAS_TZNAME
++syn keyword xsMacro HAS_UALARM HAS_UMASK HAS_UNAME HAS_UNSETENV HAS_USLEEP
++syn keyword xsMacro HAS_USLEEP_PROTO HAS_USTAT HAS_UTIME HAS_VPRINTF
++syn keyword xsMacro HAS_VSNPRINTF HAS_VTOHL HAS_VTOHS HAS_WAIT HAS_WAIT4
++syn keyword xsMacro HAS_WAITPID HAS_WCSTOMBS HAS_WCTOMB HAS_WRITEV
++syn keyword xsMacro HAVE_THREAD_INTERN HEK_BASESIZE HEK_FLAGS HEK_HASH
++syn keyword xsMacro HEK_KEY HEK_LEN HEK_REHASH HEK_REHASH_on HEK_UTF8
++syn keyword xsMacro HEK_UTF8_off HEK_UTF8_on HEK_WASUTF8 HEK_WASUTF8_off
++syn keyword xsMacro HEK_WASUTF8_on HEKf HEKf256 HEKfARG HE_SVSLOT HEf_SVKEY
++syn keyword xsMacro HINTS_REFCNT_INIT HINTS_REFCNT_LOCK HINTS_REFCNT_TERM
++syn keyword xsMacro HINTS_REFCNT_UNLOCK HINT_BLOCK_SCOPE HINT_BYTES
++syn keyword xsMacro HINT_EXPLICIT_STRICT_REFS HINT_EXPLICIT_STRICT_SUBS
++syn keyword xsMacro HINT_EXPLICIT_STRICT_VARS HINT_FEATURE_MASK
++syn keyword xsMacro HINT_FEATURE_SHIFT HINT_FILETEST_ACCESS HINT_INTEGER
++syn keyword xsMacro HINT_LEXICAL_IO_IN HINT_LEXICAL_IO_OUT HINT_LOCALE
++syn keyword xsMacro HINT_LOCALE_NOT_CHARS HINT_LOCALIZE_HH HINT_NEW_BINARY
++syn keyword xsMacro HINT_NEW_FLOAT HINT_NEW_INTEGER HINT_NEW_RE
++syn keyword xsMacro HINT_NEW_STRING HINT_NO_AMAGIC HINT_RE_EVAL HINT_RE_FLAGS
++syn keyword xsMacro HINT_RE_TAINT HINT_SORT_MERGESORT HINT_SORT_QUICKSORT
++syn keyword xsMacro HINT_SORT_SORT_BITS HINT_SORT_STABLE HINT_STRICT_REFS
++syn keyword xsMacro HINT_STRICT_SUBS HINT_STRICT_VARS HINT_UNI_8_BIT
++syn keyword xsMacro HINT_UTF8 HORIZWS HV_DELETE HV_DISABLE_UVAR_XKEY
++syn keyword xsMacro HV_FETCH_EMPTY_HE HV_FETCH_ISEXISTS HV_FETCH_ISSTORE
++syn keyword xsMacro HV_FETCH_JUST_SV HV_FETCH_LVALUE
++syn keyword xsMacro HV_ITERNEXT_WANTPLACEHOLDERS HV_NAME_SETALL
++syn keyword xsMacro HVhek_ENABLEHVKFLAGS HVhek_FREEKEY HVhek_KEYCANONICAL
++syn keyword xsMacro HVhek_MASK HVhek_PLACEHOLD HVhek_REHASH HVhek_UNSHARED
++syn keyword xsMacro HVhek_UTF8 HVhek_WASUTF8 HVrhek_IV HVrhek_PV
++syn keyword xsMacro HVrhek_PV_UTF8 HVrhek_UV HVrhek_delete HVrhek_typemask
++syn keyword xsMacro HVrhek_undef H_PERL HeHASH HeKEY HeKEY_hek HeKEY_sv
++syn keyword xsMacro HeKFLAGS HeKLEN HeKLEN_UTF8 HeKREHASH HeKUTF8 HeKWASUTF8
++syn keyword xsMacro HeNEXT HePV HeSVKEY HeSVKEY_force HeSVKEY_set HeUTF8
++syn keyword xsMacro HeVAL HvARRAY HvAUX HvEITER HvEITER_get HvEITER_set
++syn keyword xsMacro HvENAME HvENAMELEN HvENAMELEN_get HvENAMEUTF8 HvENAME_HEK
++syn keyword xsMacro HvENAME_HEK_NN HvENAME_get HvFILL HvHASKFLAGS
++syn keyword xsMacro HvHASKFLAGS_off HvHASKFLAGS_on HvKEYS HvLAZYDEL
++syn keyword xsMacro HvLAZYDEL_off HvLAZYDEL_on HvMAX HvMROMETA HvNAME
++syn keyword xsMacro HvNAMELEN HvNAMELEN_get HvNAMEUTF8 HvNAME_HEK
++syn keyword xsMacro HvNAME_HEK_NN HvNAME_get HvPLACEHOLDERS
++syn keyword xsMacro HvPLACEHOLDERS_get HvPLACEHOLDERS_set HvREHASH
++syn keyword xsMacro HvREHASH_off HvREHASH_on HvRITER HvRITER_get HvRITER_set
++syn keyword xsMacro HvSHAREKEYS HvSHAREKEYS_off HvSHAREKEYS_on HvTOTALKEYS
++syn keyword xsMacro HvUSEDKEYS I16SIZE I16TYPE I16_MAX I16_MIN I286 I32SIZE
++syn keyword xsMacro I32TYPE I32_MAX I32_MAX_P1 I32_MIN I64SIZE I64TYPE I8SIZE
++syn keyword xsMacro I8TYPE I8_TO_NATIVE IF IFMATCH IFMATCH_A IFMATCH_A_fail
++syn keyword xsMacro IFTHEN IGNORE_PAT_MOD INIT INIT_THREADS
++syn keyword xsMacro INIT_TRACK_MEMPOOL INSUBP INT2PTR INT32_MIN INT64_C
++syn keyword xsMacro INT64_MIN INTSIZE INT_64_T INT_PAT_MODS
++syn keyword xsMacro INVERSION_UNAFFECTED_FLAGS IN_BYTES IN_LOCALE
++syn keyword xsMacro IN_LOCALE_COMPILETIME IN_LOCALE_RUNTIME
++syn keyword xsMacro IN_PERL_COMPILETIME IN_PERL_RUNTIME IN_SOME_LOCALE_FORM
++syn keyword xsMacro IN_SOME_LOCALE_FORM_COMPILETIME
++syn keyword xsMacro IN_SOME_LOCALE_FORM_RUNTIME IN_UNI_8_BIT IOCPARM_LEN
++syn keyword xsMacro IOf_ARGV IOf_DIDTOP IOf_FAKE_DIRP IOf_FLUSH IOf_NOLINE
++syn keyword xsMacro IOf_START IOf_UNTAINT ISHISH IS_ANYOF_TRIE
++syn keyword xsMacro IS_NUMBER_GREATER_THAN_UV_MAX IS_NUMBER_INFINITY
++syn keyword xsMacro IS_NUMBER_IN_UV IS_NUMBER_NAN IS_NUMBER_NEG
++syn keyword xsMacro IS_NUMBER_NOT_INT IS_NUMERIC_RADIX IS_PADCONST IS_PADGV
++syn keyword xsMacro IS_TRIE_AC IS_UTF8_CHAR IS_UTF8_CHAR_1 IS_UTF8_CHAR_2
++syn keyword xsMacro IS_UTF8_CHAR_3 IS_UTF8_CHAR_3a IS_UTF8_CHAR_3b
++syn keyword xsMacro IS_UTF8_CHAR_3c IS_UTF8_CHAR_3d IS_UTF8_CHAR_4
++syn keyword xsMacro IS_UTF8_CHAR_4a IS_UTF8_CHAR_4b IS_UTF8_CHAR_4c
++syn keyword xsMacro IS_UTF8_CHAR_5 IS_UTF8_CHAR_5a IS_UTF8_CHAR_5b
++syn keyword xsMacro IS_UTF8_CHAR_FAST IVSIZE IVTYPE IV_DIG IV_MAX IV_MAX_P1
++syn keyword xsMacro IV_MIN I_32 I_ARPA_INET I_ASSERT I_CRYPT I_DBM I_DIRENT
++syn keyword xsMacro I_DLFCN I_FLOAT I_GDBM I_GDBMNDBM I_GRP I_INTTYPES
++syn keyword xsMacro I_LANGINFO I_LIMITS I_LOCALE I_MATH I_MNTENT I_NETDB
++syn keyword xsMacro I_NETINET_IN I_NETINET_TCP I_POLL I_PTHREAD I_PWD
++syn keyword xsMacro I_SHADOW I_STDARG I_STDBOOL I_STDDEF I_STDLIB I_STRING
++syn keyword xsMacro I_SYSLOG I_SYSUIO I_SYSUTSNAME I_SYS_DIR I_SYS_FILE
++syn keyword xsMacro I_SYS_IOCTL I_SYS_MOUNT I_SYS_PARAM I_SYS_POLL
++syn keyword xsMacro I_SYS_RESOURCE I_SYS_SELECT I_SYS_STAT I_SYS_STATFS
++syn keyword xsMacro I_SYS_STATVFS I_SYS_TIME I_SYS_TIMES I_SYS_TYPES I_SYS_UN
++syn keyword xsMacro I_SYS_VFS I_SYS_WAIT I_TERMIOS I_TIME I_UNISTD I_USTAT
++syn keyword xsMacro I_UTIME I_V I_VALUES IoANY IoBOTTOM_GV IoBOTTOM_NAME
++syn keyword xsMacro IoDIRP IoFLAGS IoFMT_GV IoFMT_NAME IoIFP IoLINES
++syn keyword xsMacro IoLINES_LEFT IoOFP IoPAGE IoPAGE_LEN IoTOP_GV IoTOP_NAME
++syn keyword xsMacro IoTYPE IoTYPE_APPEND IoTYPE_CLOSED IoTYPE_IMPLICIT
++syn keyword xsMacro IoTYPE_NUMERIC IoTYPE_PIPE IoTYPE_RDONLY IoTYPE_RDWR
++syn keyword xsMacro IoTYPE_SOCKET IoTYPE_STD IoTYPE_WRONLY IsSet
++syn keyword xsMacro JMPENV_BOOTSTRAP JMPENV_JUMP JMPENV_POP JMPENV_PUSH JOIN
++syn keyword xsMacro KEEPCOPY_PAT_MOD KEEPCOPY_PAT_MODS KEEPS KEEPS_next
++syn keyword xsMacro KEEPS_next_fail KEYWORD_PLUGIN_DECLINE
++syn keyword xsMacro KEYWORD_PLUGIN_EXPR KEYWORD_PLUGIN_STMT KEY_AUTOLOAD
++syn keyword xsMacro KEY_BEGIN KEY_CHECK KEY_CORE KEY_DESTROY KEY_END KEY_INIT
++syn keyword xsMacro KEY_NULL KEY_UNITCHECK KEY___DATA__ KEY___END__
++syn keyword xsMacro KEY___FILE__ KEY___LINE__ KEY___PACKAGE__ KEY___SUB__
++syn keyword xsMacro KEY_abs KEY_accept KEY_alarm KEY_and KEY_atan2 KEY_bind
++syn keyword xsMacro KEY_binmode KEY_bless KEY_break KEY_caller KEY_chdir
++syn keyword xsMacro KEY_chmod KEY_chomp KEY_chop KEY_chown KEY_chr KEY_chroot
++syn keyword xsMacro KEY_close KEY_closedir KEY_cmp KEY_connect KEY_continue
++syn keyword xsMacro KEY_cos KEY_crypt KEY_dbmclose KEY_dbmopen KEY_default
++syn keyword xsMacro KEY_defined KEY_delete KEY_die KEY_do KEY_dump KEY_each
++syn keyword xsMacro KEY_else KEY_elsif KEY_endgrent KEY_endhostent
++syn keyword xsMacro KEY_endnetent KEY_endprotoent KEY_endpwent KEY_endservent
++syn keyword xsMacro KEY_eof KEY_eq KEY_eval KEY_evalbytes KEY_exec KEY_exists
++syn keyword xsMacro KEY_exit KEY_exp KEY_fc KEY_fcntl KEY_fileno KEY_flock
++syn keyword xsMacro KEY_for KEY_foreach KEY_fork KEY_format KEY_formline
++syn keyword xsMacro KEY_ge KEY_getc KEY_getgrent KEY_getgrgid KEY_getgrnam
++syn keyword xsMacro KEY_gethostbyaddr KEY_gethostbyname KEY_gethostent
++syn keyword xsMacro KEY_getlogin KEY_getnetbyaddr KEY_getnetbyname
++syn keyword xsMacro KEY_getnetent KEY_getpeername KEY_getpgrp KEY_getppid
++syn keyword xsMacro KEY_getpriority KEY_getprotobyname KEY_getprotobynumber
++syn keyword xsMacro KEY_getprotoent KEY_getpwent KEY_getpwnam KEY_getpwuid
++syn keyword xsMacro KEY_getservbyname KEY_getservbyport KEY_getservent
++syn keyword xsMacro KEY_getsockname KEY_getsockopt KEY_given KEY_glob
++syn keyword xsMacro KEY_gmtime KEY_goto KEY_grep KEY_gt KEY_hex KEY_if
++syn keyword xsMacro KEY_index KEY_int KEY_ioctl KEY_join KEY_keys KEY_kill
++syn keyword xsMacro KEY_last KEY_lc KEY_lcfirst KEY_le KEY_length KEY_link
++syn keyword xsMacro KEY_listen KEY_local KEY_localtime KEY_lock KEY_log
++syn keyword xsMacro KEY_lstat KEY_lt KEY_m KEY_map KEY_mkdir KEY_msgctl
++syn keyword xsMacro KEY_msgget KEY_msgrcv KEY_msgsnd KEY_my KEY_ne KEY_next
++syn keyword xsMacro KEY_no KEY_not KEY_oct KEY_open KEY_opendir KEY_or
++syn keyword xsMacro KEY_ord KEY_our KEY_pack KEY_package KEY_pipe KEY_pop
++syn keyword xsMacro KEY_pos KEY_print KEY_printf KEY_prototype KEY_push KEY_q
++syn keyword xsMacro KEY_qq KEY_qr KEY_quotemeta KEY_qw KEY_qx KEY_rand
++syn keyword xsMacro KEY_read KEY_readdir KEY_readline KEY_readlink
++syn keyword xsMacro KEY_readpipe KEY_recv KEY_redo KEY_ref KEY_rename
++syn keyword xsMacro KEY_require KEY_reset KEY_return KEY_reverse
++syn keyword xsMacro KEY_rewinddir KEY_rindex KEY_rmdir KEY_s KEY_say
++syn keyword xsMacro KEY_scalar KEY_seek KEY_seekdir KEY_select KEY_semctl
++syn keyword xsMacro KEY_semget KEY_semop KEY_send KEY_setgrent KEY_sethostent
++syn keyword xsMacro KEY_setnetent KEY_setpgrp KEY_setpriority KEY_setprotoent
++syn keyword xsMacro KEY_setpwent KEY_setservent KEY_setsockopt KEY_shift
++syn keyword xsMacro KEY_shmctl KEY_shmget KEY_shmread KEY_shmwrite
++syn keyword xsMacro KEY_shutdown KEY_sin KEY_sleep KEY_socket KEY_socketpair
++syn keyword xsMacro KEY_sort KEY_splice KEY_split KEY_sprintf KEY_sqrt
++syn keyword xsMacro KEY_srand KEY_stat KEY_state KEY_study KEY_sub KEY_substr
++syn keyword xsMacro KEY_symlink KEY_syscall KEY_sysopen KEY_sysread
++syn keyword xsMacro KEY_sysseek KEY_system KEY_syswrite KEY_tell KEY_telldir
++syn keyword xsMacro KEY_tie KEY_tied KEY_time KEY_times KEY_tr KEY_truncate
++syn keyword xsMacro KEY_uc KEY_ucfirst KEY_umask KEY_undef KEY_unless
++syn keyword xsMacro KEY_unlink KEY_unpack KEY_unshift KEY_untie KEY_until
++syn keyword xsMacro KEY_use KEY_utime KEY_values KEY_vec KEY_wait KEY_waitpid
++syn keyword xsMacro KEY_wantarray KEY_warn KEY_when KEY_while KEY_write KEY_x
++syn keyword xsMacro KEY_xor KEY_y LABEL
++syn keyword xsMacro LATIN_CAPITAL_LETTER_A_WITH_RING_ABOVE
++syn keyword xsMacro LATIN_CAPITAL_LETTER_SHARP_S
++syn keyword xsMacro LATIN_CAPITAL_LETTER_Y_WITH_DIAERESIS
++syn keyword xsMacro LATIN_SMALL_LETTER_A_WITH_RING_ABOVE
++syn keyword xsMacro LATIN_SMALL_LETTER_SHARP_S
++syn keyword xsMacro LATIN_SMALL_LETTER_Y_WITH_DIAERESIS LDBL_DIG LEAVE
++syn keyword xsMacro LEAVESUB LEAVE_SCOPE LEAVE_with_name LEX_DONT_CLOSE_RSFP
++syn keyword xsMacro LEX_EVALBYTES LEX_IGNORE_UTF8_HINTS LEX_KEEP_PREVIOUS
++syn keyword xsMacro LEX_NOTPARSING LEX_START_COPIED LEX_START_FLAGS
++syn keyword xsMacro LEX_START_SAME_FILTER LEX_STUFF_UTF8 LIBERAL
++syn keyword xsMacro LIBM_LIB_VERSION LIB_INVARG LIKELY LINKLIST LNBREAK LOCAL
++syn keyword xsMacro LOCALE_PAT_MOD LOCALE_PAT_MODS LOCALTIME_MAX
++syn keyword xsMacro LOCALTIME_MIN LOCALTIME_R LOCALTIME_R_PROTO
++syn keyword xsMacro LOCAL_PATCH_COUNT LOCK_DOLLARZERO_MUTEX LOC_SED LOGICAL
++syn keyword xsMacro LONGJMP LONGLONGSIZE LONGSIZE LONG_DOUBLESIZE
++syn keyword xsMacro LONG_DOUBLE_EQUALS_DOUBLE LOOPEX LOOP_PAT_MODS LSEEKSIZE
++syn keyword xsMacro LSTOP LSTOPSUB LVRET L_R_TZSET LvFLAGS LvTARG LvTARGLEN
++syn keyword xsMacro LvTARGOFF LvTYPE MADPROP_IN_BASEOP MAD_NULL MAD_OP MAD_PV
++syn keyword xsMacro MAD_SV MALLOC_CHECK_TAINT MALLOC_CHECK_TAINT2
++syn keyword xsMacro MALLOC_CTL_H MALLOC_INIT MALLOC_OVERHEAD MALLOC_TERM
++syn keyword xsMacro MALLOC_TOO_LATE_FOR MARKPOINT MARKPOINT_next
++syn keyword xsMacro MARKPOINT_next_fail MASK MATCHOP MAXARG MAXO MAXPATHLEN
++syn keyword xsMacro MAXSYSFD MAX_CHARSET_NAME_LENGTH MAX_FEATURE_LEN
++syn keyword xsMacro MAX_PORTABLE_UTF8_TWO_BYTE
++syn keyword xsMacro MAX_RECURSE_EVAL_NOCHANGE_DEPTH MAYBE_DEREF_GV
++syn keyword xsMacro MAYBE_DEREF_GV_flags MAYBE_DEREF_GV_nomg MBOL
++syn keyword xsMacro MEMBER_TO_FPTR MEM_ALIGNBYTES MEM_LOG_ALLOC MEM_LOG_FREE
++syn keyword xsMacro MEM_LOG_REALLOC MEM_SIZE MEM_SIZE_MAX MEM_WRAP_CHECK
++syn keyword xsMacro MEM_WRAP_CHECK_ MEM_WRAP_CHECK_1 MEM_WRAP_CHECK_2 MEOL
++syn keyword xsMacro METHOD MEXTEND MGf_COPY MGf_DUP MGf_GSKIP MGf_LOCAL
++syn keyword xsMacro MGf_MINMATCH MGf_REFCOUNTED MGf_TAINTEDDIR MICRO_SIGN
++syn keyword xsMacro MINMOD MJD_OFFSET_DEBUG MRO_GET_PRIVATE_DATA MSPAGAIN
++syn keyword xsMacro MULOP MULTICALL MULTILINE_PAT_MOD MULTIPLICITY MUTABLE_AV
++syn keyword xsMacro MUTABLE_CV MUTABLE_GV MUTABLE_HV MUTABLE_IO MUTABLE_PTR
++syn keyword xsMacro MUTABLE_SV MUTEX_DESTROY MUTEX_INIT
++syn keyword xsMacro MUTEX_INIT_CALLS_MALLOC MUTEX_INIT_NEEDS_MUTEX_ZEROED
++syn keyword xsMacro MUTEX_LOCK MUTEX_UNLOCK MY MYSUB MYSWAP MY_CXT_CLONE
++syn keyword xsMacro MY_CXT_INDEX MY_CXT_INIT MY_CXT_INIT_ARG
++syn keyword xsMacro MY_CXT_INIT_INTERP M_PAT_MODS M_VOID MgPV MgPV_const
++syn keyword xsMacro MgPV_nolen_const MgTAINTEDDIR MgTAINTEDDIR_off
++syn keyword xsMacro MgTAINTEDDIR_on Mkdir Move MoveD NALNUM NALNUMA NALNUML
++syn keyword xsMacro NALNUMU NATIVE8_TO_UNI NATIVE_IS_INVARIANT
++syn keyword xsMacro NATIVE_TO_ASCII NATIVE_TO_I8 NATIVE_TO_NEED NATIVE_TO_UNI
++syn keyword xsMacro NATIVE_TO_UTF NBOUND NBOUNDA NBOUNDL NBOUNDU
++syn keyword xsMacro NDBM_H_USES_PROTOTYPES NDIGIT NDIGITA NDIGITL
++syn keyword xsMacro NEED_PTHREAD_INIT NEED_VA_COPY NEGATIVE_INDICES_VAR
++syn keyword xsMacro NETDB_R_OBSOLETE NEWSV NEXTOPER NEXT_LINE_CHAR NEXT_OFF
++syn keyword xsMacro NGROUPP NHORIZWS NOAMP NODE_ALIGN NODE_ALIGN_FILL
++syn keyword xsMacro NODE_STEP_B NODE_STEP_REGNODE NODE_SZ_STR NOLINE
++syn keyword xsMacro NONDESTRUCT_PAT_MOD NONDESTRUCT_PAT_MODS NOOP
++syn keyword xsMacro NORETURN_FUNCTION_END NORMAL NOTHING NOTOP NOT_IN_PAD
++syn keyword xsMacro NO_ENV_ARRAY_IN_MAIN NO_LOCALE
++syn keyword xsMacro NO_LOCALECONV_MON_THOUSANDS_SEP NREF NREFF NREFFA NREFFL
++syn keyword xsMacro NREFFU NSIG NSPACE NSPACEA NSPACEL NSPACEU NUM2PTR
++syn keyword xsMacro NVERTWS NVSIZE NVTYPE NV_DIG NV_EPSILON NV_INF
++syn keyword xsMacro NV_MANT_DIG NV_MAX NV_MAX_10_EXP NV_MIN NV_MIN_10_EXP
++syn keyword xsMacro NV_NAN NV_OVERFLOWS_INTEGERS_AT NV_PRESERVES_UV_BITS
++syn keyword xsMacro NV_WITHIN_IV NV_WITHIN_UV New NewOp NewOpSz Newc Newx
++syn keyword xsMacro Newxc Newxz Newz NofAMmeth Null Nullav Nullch Nullcv
++syn keyword xsMacro Nullfp Nullgv Nullhe Nullhek Nullhv Nullop Nullsv OASHIFT
++syn keyword xsMacro OCSHIFT ONCE_PAT_MOD ONCE_PAT_MODS OPEN OPERAND OPFAIL
++syn keyword xsMacro OPTIMIZED OP_BINARY OP_CHECK_MUTEX_INIT
++syn keyword xsMacro OP_CHECK_MUTEX_LOCK OP_CHECK_MUTEX_TERM
++syn keyword xsMacro OP_CHECK_MUTEX_UNLOCK OP_CLASS OP_DESC OP_GIMME
++syn keyword xsMacro OP_GIMME_REVERSE OP_IS_DIRHOP OP_IS_FILETEST
++syn keyword xsMacro OP_IS_FILETEST_ACCESS OP_IS_NUMCOMPARE OP_IS_SOCKET
++syn keyword xsMacro OP_LVALUE_NO_CROAK OP_MEM_TO_REG OP_NAME OP_REFCNT_INIT
++syn keyword xsMacro OP_REFCNT_LOCK OP_REFCNT_TERM OP_REFCNT_UNLOCK
++syn keyword xsMacro OP_REG_TO_MEM OROP OROR OSNAME OSVERS O_CREAT O_RDONLY
++syn keyword xsMacro O_RDWR O_TEXT O_WRONLY Off Off_t_size OpREFCNT_dec
++syn keyword xsMacro OpREFCNT_inc OpREFCNT_set OutCopFILE PAD_BASE_SV
++syn keyword xsMacro PAD_CLONE_VARS PAD_COMPNAME_FLAGS
++syn keyword xsMacro PAD_COMPNAME_FLAGS_isOUR PAD_COMPNAME_GEN
++syn keyword xsMacro PAD_COMPNAME_GEN_set PAD_COMPNAME_OURSTASH
++syn keyword xsMacro PAD_COMPNAME_PV PAD_COMPNAME_SV PAD_COMPNAME_TYPE
++syn keyword xsMacro PAD_FAKELEX_ANON PAD_FAKELEX_MULTI PAD_RESTORE_LOCAL
++syn keyword xsMacro PAD_SAVE_LOCAL PAD_SAVE_SETNULLPAD PAD_SETSV PAD_SET_CUR
++syn keyword xsMacro PAD_SET_CUR_NOSAVE PAD_SV PAD_SVl PARENT_FAKELEX_FLAGS
++syn keyword xsMacro PARENT_PAD_INDEX PARSE_OPTIONAL PATCHLEVEL PEG PERLDB_ALL
++syn keyword xsMacro PERLDB_GOTO PERLDB_INTER PERLDB_LINE PERLDB_NAMEANON
++syn keyword xsMacro PERLDB_NAMEEVAL PERLDB_NOOPT PERLDB_SAVESRC
++syn keyword xsMacro PERLDB_SAVESRC_INVALID PERLDB_SAVESRC_NOSUBS
++syn keyword xsMacro PERLDB_SINGLE PERLDB_SUB PERLDB_SUBLINE PERLDB_SUB_NN
++syn keyword xsMacro PERLDBf_GOTO PERLDBf_INTER PERLDBf_LINE PERLDBf_NAMEANON
++syn keyword xsMacro PERLDBf_NAMEEVAL PERLDBf_NONAME PERLDBf_NOOPT
++syn keyword xsMacro PERLDBf_SAVESRC PERLDBf_SAVESRC_INVALID
++syn keyword xsMacro PERLDBf_SAVESRC_NOSUBS PERLDBf_SINGLE PERLDBf_SUB
++syn keyword xsMacro PERLDBf_SUBLINE PERLIOBUF_DEFAULT_BUFSIZ PERLIO_DUP_CLONE
++syn keyword xsMacro PERLIO_DUP_FD PERLIO_FUNCS_CAST PERLIO_FUNCS_CONST
++syn keyword xsMacro PERLIO_FUNCS_DECL PERLIO_F_APPEND PERLIO_F_CANREAD
++syn keyword xsMacro PERLIO_F_CANWRITE PERLIO_F_CLEARED PERLIO_F_CRLF
++syn keyword xsMacro PERLIO_F_EOF PERLIO_F_ERROR PERLIO_F_FASTGETS
++syn keyword xsMacro PERLIO_F_LINEBUF PERLIO_F_NOTREG PERLIO_F_OPEN
++syn keyword xsMacro PERLIO_F_RDBUF PERLIO_F_TEMP PERLIO_F_TRUNCATE
++syn keyword xsMacro PERLIO_F_TTY PERLIO_F_UNBUF PERLIO_F_UTF8 PERLIO_F_WRBUF
++syn keyword xsMacro PERLIO_INIT PERLIO_IS_STDIO PERLIO_K_BUFFERED
++syn keyword xsMacro PERLIO_K_CANCRLF PERLIO_K_DESTRUCT PERLIO_K_DUMMY
++syn keyword xsMacro PERLIO_K_FASTGETS PERLIO_K_MULTIARG PERLIO_K_RAW
++syn keyword xsMacro PERLIO_K_UTF8 PERLIO_LAYERS PERLIO_NOT_STDIO
++syn keyword xsMacro PERLIO_STDTEXT PERLIO_TERM PERLIO_USING_CRLF
++syn keyword xsMacro PERLSI_DESTROY PERLSI_DIEHOOK PERLSI_MAGIC PERLSI_MAIN
++syn keyword xsMacro PERLSI_OVERLOAD PERLSI_REQUIRE PERLSI_SIGNAL PERLSI_SORT
++syn keyword xsMacro PERLSI_UNDEF PERLSI_UNKNOWN PERLSI_WARNHOOK PERL_ABS
++syn keyword xsMacro PERL_ALLOC_CHECK PERL_API_REVISION PERL_API_SUBVERSION
++syn keyword xsMacro PERL_API_VERSION PERL_API_VERSION_STRING
++syn keyword xsMacro PERL_ARENA_ROOTS_SIZE PERL_ARENA_SIZE
++syn keyword xsMacro PERL_ARGS_ASSERT_ADD_ALTERNATE PERL_ARGS_ASSERT_ADD_DATA
++syn keyword xsMacro PERL_ARGS_ASSERT_ADD_UTF16_TEXTFILTER
++syn keyword xsMacro PERL_ARGS_ASSERT_ADJUST_STACK_ON_LEAVE
++syn keyword xsMacro PERL_ARGS_ASSERT_ALLOCMY PERL_ARGS_ASSERT_AMAGIC_CALL
++syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CMP
++syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_CMP_LOCALE
++syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_DEREF_CALL
++syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_I_NCMP
++syn keyword xsMacro PERL_ARGS_ASSERT_AMAGIC_NCMP
++syn keyword xsMacro PERL_ARGS_ASSERT_ANONYMISE_CV_MAYBE
++syn keyword xsMacro PERL_ARGS_ASSERT_ANY_DUP PERL_ARGS_ASSERT_APPLY
++syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS
++syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_MY
++syn keyword xsMacro PERL_ARGS_ASSERT_APPLY_ATTRS_STRING
++syn keyword xsMacro PERL_ARGS_ASSERT_ASSERT_UFT8_CACHE_COHERENT
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_ARYLEN_P PERL_ARGS_ASSERT_AV_CLEAR
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_PUSH
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_CREATE_AND_UNSHIFT_ONE
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_DELETE PERL_ARGS_ASSERT_AV_EXISTS
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_EXTEND PERL_ARGS_ASSERT_AV_FETCH
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_FILL PERL_ARGS_ASSERT_AV_ITER_P
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_LEN PERL_ARGS_ASSERT_AV_MAKE
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_POP PERL_ARGS_ASSERT_AV_PUSH
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_REIFY PERL_ARGS_ASSERT_AV_SHIFT
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_STORE PERL_ARGS_ASSERT_AV_UNDEF
++syn keyword xsMacro PERL_ARGS_ASSERT_AV_UNSHIFT PERL_ARGS_ASSERT_BAD_TYPE_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_BAD_TYPE_SV PERL_ARGS_ASSERT_BIND_MATCH
++syn keyword xsMacro PERL_ARGS_ASSERT_BLOCKHOOK_REGISTER
++syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_CMP_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_FROM_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_TO_UNI
++syn keyword xsMacro PERL_ARGS_ASSERT_BYTES_TO_UTF8 PERL_ARGS_ASSERT_CALL_ARGV
++syn keyword xsMacro PERL_ARGS_ASSERT_CALL_LIST PERL_ARGS_ASSERT_CALL_METHOD
++syn keyword xsMacro PERL_ARGS_ASSERT_CALL_PV PERL_ARGS_ASSERT_CALL_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_CANDO PERL_ARGS_ASSERT_CHECKCOMMA
++syn keyword xsMacro PERL_ARGS_ASSERT_CHECKPOSIXCC
++syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_LOCALE_BOUNDARY_CROSSING
++syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_TYPE_AND_OPEN
++syn keyword xsMacro PERL_ARGS_ASSERT_CHECK_UTF8_PRINT
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_ANONCODE PERL_ARGS_ASSERT_CK_BITOP
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_CHDIR PERL_ARGS_ASSERT_CK_CMP
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_CONCAT PERL_ARGS_ASSERT_CK_DEFINED
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_DELETE PERL_ARGS_ASSERT_CK_DIE
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_EACH
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_CORE
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_LIST
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_ENTERSUB_ARGS_PROTO_OR_LIST
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_EOF PERL_ARGS_ASSERT_CK_EVAL
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_EXEC PERL_ARGS_ASSERT_CK_EXISTS
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_EXIT PERL_ARGS_ASSERT_CK_FTST
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_FUN PERL_ARGS_ASSERT_CK_GLOB
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_GREP PERL_ARGS_ASSERT_CK_INDEX
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_JOIN PERL_ARGS_ASSERT_CK_LENGTH
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_LFUN PERL_ARGS_ASSERT_CK_LISTIOB
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_MATCH PERL_ARGS_ASSERT_CK_METHOD
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_NULL PERL_ARGS_ASSERT_CK_OPEN
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_READLINE PERL_ARGS_ASSERT_CK_REPEAT
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_REQUIRE PERL_ARGS_ASSERT_CK_RETURN
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_RFUN PERL_ARGS_ASSERT_CK_RVCONST
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_SASSIGN PERL_ARGS_ASSERT_CK_SELECT
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_SHIFT PERL_ARGS_ASSERT_CK_SMARTMATCH
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_SORT PERL_ARGS_ASSERT_CK_SPAIR
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_SPLIT PERL_ARGS_ASSERT_CK_SUBR
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_SUBSTR PERL_ARGS_ASSERT_CK_SVCONST
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_TELL PERL_ARGS_ASSERT_CK_TRUNC
++syn keyword xsMacro PERL_ARGS_ASSERT_CK_WARNER PERL_ARGS_ASSERT_CK_WARNER_D
++syn keyword xsMacro PERL_ARGS_ASSERT_CLEAR_PLACEHOLDERS
++syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_DEL
++syn keyword xsMacro PERL_ARGS_ASSERT_CLONE_PARAMS_NEW
++syn keyword xsMacro PERL_ARGS_ASSERT_CLOSEST_COP PERL_ARGS_ASSERT_CL_AND
++syn keyword xsMacro PERL_ARGS_ASSERT_CL_ANYTHING PERL_ARGS_ASSERT_CL_INIT
++syn keyword xsMacro PERL_ARGS_ASSERT_CL_IS_ANYTHING PERL_ARGS_ASSERT_CL_OR
++syn keyword xsMacro PERL_ARGS_ASSERT_COP_FETCH_LABEL
++syn keyword xsMacro PERL_ARGS_ASSERT_COP_FREE
++syn keyword xsMacro PERL_ARGS_ASSERT_COP_STORE_LABEL
++syn keyword xsMacro PERL_ARGS_ASSERT_CORESUB_OP
++syn keyword xsMacro PERL_ARGS_ASSERT_CORE_PROTOTYPE
++syn keyword xsMacro PERL_ARGS_ASSERT_CORE_REGCLASS_SWASH
++syn keyword xsMacro PERL_ARGS_ASSERT_CROAK_SV PERL_ARGS_ASSERT_CROAK_XS_USAGE
++syn keyword xsMacro PERL_ARGS_ASSERT_CURSE PERL_ARGS_ASSERT_CUSTOM_OP_DESC
++syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_NAME
++syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_REGISTER
++syn keyword xsMacro PERL_ARGS_ASSERT_CUSTOM_OP_XOP PERL_ARGS_ASSERT_CVGV_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_CVSTASH_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_CV_CKPROTO_LEN_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_CV_CLONE PERL_ARGS_ASSERT_CV_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_CV_GET_CALL_CHECKER
++syn keyword xsMacro PERL_ARGS_ASSERT_CV_SET_CALL_CHECKER
++syn keyword xsMacro PERL_ARGS_ASSERT_CV_UNDEF PERL_ARGS_ASSERT_CX_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_CX_DUP PERL_ARGS_ASSERT_DEB
++syn keyword xsMacro PERL_ARGS_ASSERT_DEBOP PERL_ARGS_ASSERT_DEBPROF
++syn keyword xsMacro PERL_ARGS_ASSERT_DEBUG_START_MATCH
++syn keyword xsMacro PERL_ARGS_ASSERT_DEB_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_DEB_STACK_N PERL_ARGS_ASSERT_DELIMCPY
++syn keyword xsMacro PERL_ARGS_ASSERT_DEL_SV PERL_ARGS_ASSERT_DESTROY_MATCHER
++syn keyword xsMacro PERL_ARGS_ASSERT_DIE_SV PERL_ARGS_ASSERT_DIE_UNWIND
++syn keyword xsMacro PERL_ARGS_ASSERT_DIRP_DUP PERL_ARGS_ASSERT_DIV128
++syn keyword xsMacro PERL_ARGS_ASSERT_DOFILE PERL_ARGS_ASSERT_DOFINDLABEL
++syn keyword xsMacro PERL_ARGS_ASSERT_DOFORM PERL_ARGS_ASSERT_DOONELINER
++syn keyword xsMacro PERL_ARGS_ASSERT_DOOPEN_PM PERL_ARGS_ASSERT_DOPARSEFORM
++syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOLABEL
++syn keyword xsMacro PERL_ARGS_ASSERT_DOPOPTOSUB_AT PERL_ARGS_ASSERT_DOREF
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_AEXEC PERL_ARGS_ASSERT_DO_AEXEC5
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_ASPAWN PERL_ARGS_ASSERT_DO_BINMODE
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_CHOMP PERL_ARGS_ASSERT_DO_DUMP_PAD
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_EOF PERL_ARGS_ASSERT_DO_EXEC
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_EXEC3 PERL_ARGS_ASSERT_DO_GVGV_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_GV_DUMP PERL_ARGS_ASSERT_DO_HV_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_IPCCTL PERL_ARGS_ASSERT_DO_IPCGET
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_JOIN PERL_ARGS_ASSERT_DO_MAGIC_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_MSGRCV PERL_ARGS_ASSERT_DO_MSGSND
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_NCMP PERL_ARGS_ASSERT_DO_ODDBALL
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPEN PERL_ARGS_ASSERT_DO_OPEN9
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_OPENN PERL_ARGS_ASSERT_DO_OP_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_OP_XMLDUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_PMOP_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_PMOP_XMLDUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_PRINT PERL_ARGS_ASSERT_DO_SEMOP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_SHMIO PERL_ARGS_ASSERT_DO_SPAWN
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPAWN_NOWAIT
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_SPRINTF PERL_ARGS_ASSERT_DO_SV_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_SYSSEEK PERL_ARGS_ASSERT_DO_TELL
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COMPLEX_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_COUNT_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_TRANS_SIMPLE_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_VECGET PERL_ARGS_ASSERT_DO_VECSET
++syn keyword xsMacro PERL_ARGS_ASSERT_DO_VOP PERL_ARGS_ASSERT_DUMPUNTIL
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_EXEC_POS PERL_ARGS_ASSERT_DUMP_FDS
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_FORM PERL_ARGS_ASSERT_DUMP_INDENT
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_MSTATS
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_PACKSUBS_PERL
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SUB PERL_ARGS_ASSERT_DUMP_SUB_PERL
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_SV_CHILD PERL_ARGS_ASSERT_DUMP_TRIE
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_LIST
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_TRIE_INTERIM_TABLE
++syn keyword xsMacro PERL_ARGS_ASSERT_DUMP_VINDENT
++syn keyword xsMacro PERL_ARGS_ASSERT_DUP_ATTRLIST
++syn keyword xsMacro PERL_ARGS_ASSERT_EMULATE_COP_IO PERL_ARGS_ASSERT_EVAL_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_EVAL_SV PERL_ARGS_ASSERT_EXEC_FAILED
++syn keyword xsMacro PERL_ARGS_ASSERT_EXPECT_NUMBER PERL_ARGS_ASSERT_F0CONVERT
++syn keyword xsMacro PERL_ARGS_ASSERT_FBM_COMPILE PERL_ARGS_ASSERT_FBM_INSTR
++syn keyword xsMacro PERL_ARGS_ASSERT_FEATURE_IS_ENABLED
++syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_DEL PERL_ARGS_ASSERT_FILTER_GETS
++syn keyword xsMacro PERL_ARGS_ASSERT_FILTER_READ PERL_ARGS_ASSERT_FINALIZE_OP
++syn keyword xsMacro PERL_ARGS_ASSERT_FINALIZE_OPTREE
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_AND_FORGET_PMOPS
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_ARRAY_SUBSCRIPT
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BEGINNING
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_BYCLASS
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_HASH_SUBSCRIPT
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_IN_MY_STASH
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_RUNDEFSV2
++syn keyword xsMacro PERL_ARGS_ASSERT_FIND_SCRIPT
++syn keyword xsMacro PERL_ARGS_ASSERT_FIRST_SYMBOL PERL_ARGS_ASSERT_FOLDEQ
++syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_LATIN1
++syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_LOCALE
++syn keyword xsMacro PERL_ARGS_ASSERT_FOLDEQ_UTF8_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_FOLD_CONSTANTS
++syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_IDENT
++syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_STRICT_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_FORCE_WORD PERL_ARGS_ASSERT_FORGET_PMOP
++syn keyword xsMacro PERL_ARGS_ASSERT_FORM PERL_ARGS_ASSERT_FORM_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_FPRINTF_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_FP_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_FREE_GLOBAL_STRUCT
++syn keyword xsMacro PERL_ARGS_ASSERT_GETCWD_SV PERL_ARGS_ASSERT_GETENV_LEN
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_AUX_MG PERL_ARGS_ASSERT_GET_AV
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_CV PERL_ARGS_ASSERT_GET_CVN_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_DB_SUB
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_DEBUG_OPTS PERL_ARGS_ASSERT_GET_HV
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_ITER_ADDR
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_LEN_ADDR
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_VERSION_ID_ADDR
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_INVLIST_ZERO_ADDR
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_MSTATS PERL_ARGS_ASSERT_GET_NUM
++syn keyword xsMacro PERL_ARGS_ASSERT_GET_SV PERL_ARGS_ASSERT_GLOB_2NUMBER
++syn keyword xsMacro PERL_ARGS_ASSERT_GLOB_ASSIGN_GLOB
++syn keyword xsMacro PERL_ARGS_ASSERT_GLOB_ASSIGN_REF PERL_ARGS_ASSERT_GP_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_GROK_BIN PERL_ARGS_ASSERT_GROK_BSLASH_O
++syn keyword xsMacro PERL_ARGS_ASSERT_GROK_HEX PERL_ARGS_ASSERT_GROK_NUMBER
++syn keyword xsMacro PERL_ARGS_ASSERT_GROK_NUMERIC_RADIX
++syn keyword xsMacro PERL_ARGS_ASSERT_GROK_OCT PERL_ARGS_ASSERT_GROUP_END
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_AMUPDATE
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_AUTOLOAD_SV PERL_ARGS_ASSERT_GV_CHECK
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_CONST_SV PERL_ARGS_ASSERT_GV_DUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME3
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_EFULLNAME4 PERL_ARGS_ASSERT_GV_ENAME
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHFILE_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_AUTOLOAD
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PVN_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_PV_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETHOD_SV_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PVN_AUTOLOAD
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_PV_AUTOLOAD
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHMETH_SV_AUTOLOAD
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPV
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHPVN_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FETCHSV PERL_ARGS_ASSERT_GV_FULLNAME
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME3
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_FULLNAME4
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_GET_SUPER_PKG
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_PV PERL_ARGS_ASSERT_GV_INIT_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_INIT_SVTYPE
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE_ISA
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_MAGICALIZE_OVERLOAD
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_NAME_SET PERL_ARGS_ASSERT_GV_STASHPV
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_STASHPVN PERL_ARGS_ASSERT_GV_STASHSV
++syn keyword xsMacro PERL_ARGS_ASSERT_GV_TRY_DOWNGRADE
++syn keyword xsMacro PERL_ARGS_ASSERT_HEK_DUP PERL_ARGS_ASSERT_HE_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_HFREEENTRIES
++syn keyword xsMacro PERL_ARGS_ASSERT_HFREE_NEXT_ENTRY PERL_ARGS_ASSERT_HSPLIT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ASSERT PERL_ARGS_ASSERT_HV_AUXINIT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_BACKREFERENCES_P
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_CLEAR_PLACEHOLDERS
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_COMMON_KEY_LEN
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELAYFREE_ENT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_DELETE PERL_ARGS_ASSERT_HV_DELETE_ENT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_EITER_P PERL_ARGS_ASSERT_HV_EITER_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_ADD
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ENAME_DELETE
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_EXISTS PERL_ARGS_ASSERT_HV_EXISTS_ENT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_FETCH PERL_ARGS_ASSERT_HV_FETCH_ENT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_FILL PERL_ARGS_ASSERT_HV_FREE_ENT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_FREE_ENT_RET
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERINIT PERL_ARGS_ASSERT_HV_ITERKEY
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERKEYSV
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXTSV
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERNEXT_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_ITERVAL
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_KILL_BACKREFS
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_KSPLIT PERL_ARGS_ASSERT_HV_MAGIC
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_MAGIC_CHECK
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_NAME_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_NOTALLOWED
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_GET
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_P
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_PLACEHOLDERS_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_RITER_P PERL_ARGS_ASSERT_HV_RITER_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_HV_SCALAR PERL_ARGS_ASSERT_INCLINE
++syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH
++syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_IF_EXISTS
++syn keyword xsMacro PERL_ARGS_ASSERT_INCPUSH_USE_SEP
++syn keyword xsMacro PERL_ARGS_ASSERT_INIT_ARGV_SYMBOLS
++syn keyword xsMacro PERL_ARGS_ASSERT_INIT_POSTDUMP_SYMBOLS
++syn keyword xsMacro PERL_ARGS_ASSERT_INIT_TM PERL_ARGS_ASSERT_INPLACE_AASSIGN
++syn keyword xsMacro PERL_ARGS_ASSERT_INSTR PERL_ARGS_ASSERT_INTUIT_METHOD
++syn keyword xsMacro PERL_ARGS_ASSERT_INTUIT_MORE
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ARRAY
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_CLONE
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_EXTEND
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERINIT
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_ITERNEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_LEN PERL_ARGS_ASSERT_INVLIST_MAX
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SEARCH
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_SET_LEN
++syn keyword xsMacro PERL_ARGS_ASSERT_INVLIST_TRIM PERL_ARGS_ASSERT_IO_CLOSE
++syn keyword xsMacro PERL_ARGS_ASSERT_ISA_LOOKUP PERL_ARGS_ASSERT_IS_AN_INT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_ASCII_STRING
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_HANDLE_CONSTRUCTOR
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALNUM
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ALPHA
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_ASCII
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR_BUF
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CHAR_SLOW
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_CNTRL
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_COMMON
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_DIGIT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_GRAPH
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDCONT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_IDFIRST
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_LOWER
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_MARK
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_SPACE
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PERL_WORD
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_POSIX_DIGIT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PRINT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_PUNCT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_SPACE
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOC
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_STRING_LOCLEN
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_UPPER
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XDIGIT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDCONT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_XIDFIRST
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_BEGIN
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_EXTEND
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_L
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LV
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LVT
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_LV_LVT_V
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_NON_HANGUL
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_PREPEND
++syn keyword xsMacro PERL_ARGS_ASSERT_IS_UTF8_X_T PERL_ARGS_ASSERT_IS_UTF8_X_V
++syn keyword xsMacro PERL_ARGS_ASSERT_JMAYBE PERL_ARGS_ASSERT_JOIN_EXACT
++syn keyword xsMacro PERL_ARGS_ASSERT_KEYWORD
++syn keyword xsMacro PERL_ARGS_ASSERT_KEYWORD_PLUGIN_STANDARD
++syn keyword xsMacro PERL_ARGS_ASSERT_LEX_DISCARD_TO
++syn keyword xsMacro PERL_ARGS_ASSERT_LEX_READ_TO
++syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_LEX_STUFF_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_LEX_UNSTUFF PERL_ARGS_ASSERT_LOAD_MODULE
++syn keyword xsMacro PERL_ARGS_ASSERT_LOAD_MODULE_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_LOCALIZE
++syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_BOOL
++syn keyword xsMacro PERL_ARGS_ASSERT_LOOKS_LIKE_NUMBER PERL_ARGS_ASSERT_LOP
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARENV
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINT
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARHINTS
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARISA
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEARSIG
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_CLEAR_ALL_ENV
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_EXISTSPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEARYLEN_P
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_FREEOVRLD
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GET
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETARYLEN
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETDEFELEM
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETNKEYS
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETPOS
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSIG
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETSUBSTR
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETTAINT
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETUVAR
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_GETVEC
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_KILLBACKREFS
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_LEN
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHCALL1
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_METHPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_NEXTPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATA_CNT
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_GET
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_REGDATUM_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SCALARPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETAMAGIC
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETARYLEN
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETCOLLXFRM
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDBLINE
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETDEFELEM
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETENV
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETHINT
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETISA
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETMGLOB
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETNKEYS
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETPOS
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETREGEXP
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSIG
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETSUBSTR
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETTAINT
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETUVAR
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETVEC
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SETVSTRING
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SET_ALL_ENV
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_SIZEPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAGIC_WIPEPACK
++syn keyword xsMacro PERL_ARGS_ASSERT_MAKE_MATCHER PERL_ARGS_ASSERT_MAKE_TRIE
++syn keyword xsMacro PERL_ARGS_ASSERT_MAKE_TRIE_FAILTABLE
++syn keyword xsMacro PERL_ARGS_ASSERT_MALLOCED_SIZE
++syn keyword xsMacro PERL_ARGS_ASSERT_MATCHER_MATCHES_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_MAYBERELOCATE
++syn keyword xsMacro PERL_ARGS_ASSERT_MEASURE_STRUCT
++syn keyword xsMacro PERL_ARGS_ASSERT_MEM_COLLXFRM
++syn keyword xsMacro PERL_ARGS_ASSERT_MEM_LOG_COMMON PERL_ARGS_ASSERT_MESS
++syn keyword xsMacro PERL_ARGS_ASSERT_MESS_NOCONTEXT PERL_ARGS_ASSERT_MESS_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_METHOD_COMMON PERL_ARGS_ASSERT_MG_CLEAR
++syn keyword xsMacro PERL_ARGS_ASSERT_MG_COPY PERL_ARGS_ASSERT_MG_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_MG_FREE PERL_ARGS_ASSERT_MG_FREE_TYPE
++syn keyword xsMacro PERL_ARGS_ASSERT_MG_GET PERL_ARGS_ASSERT_MG_LENGTH
++syn keyword xsMacro PERL_ARGS_ASSERT_MG_LOCALIZE PERL_ARGS_ASSERT_MG_MAGICAL
++syn keyword xsMacro PERL_ARGS_ASSERT_MG_SET PERL_ARGS_ASSERT_MG_SIZE
++syn keyword xsMacro PERL_ARGS_ASSERT_MINI_MKTIME
++syn keyword xsMacro PERL_ARGS_ASSERT_MORESWITCHES
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_CLEAN_ISAREV
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GATHER_AND_RENAME
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_FROM_NAME
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_LINEAR_ISA_DFS
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_GET_PRIVATE_DATA
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_ISA_CHANGED_IN
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_META_INIT
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_METHOD_CHANGED_IN
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_PACKAGE_MOVED
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_REGISTER
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_MRO
++syn keyword xsMacro PERL_ARGS_ASSERT_MRO_SET_PRIVATE_DATA
++syn keyword xsMacro PERL_ARGS_ASSERT_MUL128
++syn keyword xsMacro PERL_ARGS_ASSERT_MUNGE_QWLIST_TO_PAREN_LIST
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATOF PERL_ARGS_ASSERT_MY_ATOF2
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_ATTRS PERL_ARGS_ASSERT_MY_BCOPY
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_BZERO PERL_ARGS_ASSERT_MY_CXT_INDEX
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_CXT_INIT PERL_ARGS_ASSERT_MY_KID
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_MEMCMP PERL_ARGS_ASSERT_MY_MEMSET
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_POPEN PERL_ARGS_ASSERT_MY_POPEN_LIST
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_SNPRINTF PERL_ARGS_ASSERT_MY_SPRINTF
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_STRFTIME PERL_ARGS_ASSERT_MY_SWABN
++syn keyword xsMacro PERL_ARGS_ASSERT_MY_VSNPRINTF PERL_ARGS_ASSERT_NEED_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWAVREF PERL_ARGS_ASSERT_NEWCONDOP
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWFOROP PERL_ARGS_ASSERT_NEWGIVENOP
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWGIVWHENOP PERL_ARGS_ASSERT_NEWGP
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWGVGEN_FLAGS PERL_ARGS_ASSERT_NEWGVOP
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWHVREF PERL_ARGS_ASSERT_NEWLOGOP
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWLOOPEX PERL_ARGS_ASSERT_NEWMADSV
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWPADOP PERL_ARGS_ASSERT_NEWPROG
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWRANGE PERL_ARGS_ASSERT_NEWRV
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWRV_NOINC PERL_ARGS_ASSERT_NEWSVOP
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVPVF
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVPVF_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWSVREF PERL_ARGS_ASSERT_NEWSVRV
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWWHENOP PERL_ARGS_ASSERT_NEWXS
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_NEWXS_LEN_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_NEW_CONSTANT PERL_ARGS_ASSERT_NEW_CTYPE
++syn keyword xsMacro PERL_ARGS_ASSERT_NEW_LOGOP PERL_ARGS_ASSERT_NEW_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_NEW_WARNINGS_BITFIELD
++syn keyword xsMacro PERL_ARGS_ASSERT_NEXTARGV PERL_ARGS_ASSERT_NEXTCHAR
++syn keyword xsMacro PERL_ARGS_ASSERT_NEXT_SYMBOL PERL_ARGS_ASSERT_NINSTR
++syn keyword xsMacro PERL_ARGS_ASSERT_NOT_A_NUMBER
++syn keyword xsMacro PERL_ARGS_ASSERT_NO_BAREWORD_ALLOWED
++syn keyword xsMacro PERL_ARGS_ASSERT_NO_FH_ALLOWED PERL_ARGS_ASSERT_NO_OP
++syn keyword xsMacro PERL_ARGS_ASSERT_OOPSAV PERL_ARGS_ASSERT_OOPSHV
++syn keyword xsMacro PERL_ARGS_ASSERT_OPEN_SCRIPT
++syn keyword xsMacro PERL_ARGS_ASSERT_OPT_SCALARHV PERL_ARGS_ASSERT_OP_CLEAR
++syn keyword xsMacro PERL_ARGS_ASSERT_OP_CONTEXTUALIZE
++syn keyword xsMacro PERL_ARGS_ASSERT_OP_DUMP PERL_ARGS_ASSERT_OP_INTEGERIZE
++syn keyword xsMacro PERL_ARGS_ASSERT_OP_LINKLIST PERL_ARGS_ASSERT_OP_NULL
++syn keyword xsMacro PERL_ARGS_ASSERT_OP_REFCNT_DEC
++syn keyword xsMacro PERL_ARGS_ASSERT_OP_STD_INIT PERL_ARGS_ASSERT_OP_XMLDUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_PACKAGE PERL_ARGS_ASSERT_PACKAGE_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_PACKLIST PERL_ARGS_ASSERT_PACK_CAT
++syn keyword xsMacro PERL_ARGS_ASSERT_PACK_REC PERL_ARGS_ASSERT_PADLIST_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_ANON
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ADD_NAME_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_ALLOC_NAME
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_CHECK_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDLEX
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FINDMY_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_FIXUP_INNER_ANONS
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_PEG PERL_ARGS_ASSERT_PAD_PUSH
++syn keyword xsMacro PERL_ARGS_ASSERT_PAD_SETSV PERL_ARGS_ASSERT_PARSER_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_PARSER_FREE
++syn keyword xsMacro PERL_ARGS_ASSERT_PARSE_UNICODE_OPTS
++syn keyword xsMacro PERL_ARGS_ASSERT_PATH_IS_ABSOLUTE
++syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_READ
++syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_UNREAD
++syn keyword xsMacro PERL_ARGS_ASSERT_PERLIO_WRITE
++syn keyword xsMacro PERL_ARGS_ASSERT_PERL_ALLOC_USING
++syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE
++syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CLONE_USING
++syn keyword xsMacro PERL_ARGS_ASSERT_PERL_CONSTRUCT
++syn keyword xsMacro PERL_ARGS_ASSERT_PERL_DESTRUCT PERL_ARGS_ASSERT_PERL_FREE
++syn keyword xsMacro PERL_ARGS_ASSERT_PERL_PARSE PERL_ARGS_ASSERT_PERL_RUN
++syn keyword xsMacro PERL_ARGS_ASSERT_PMRUNTIME PERL_ARGS_ASSERT_PMTRANS
++syn keyword xsMacro PERL_ARGS_ASSERT_PM_DESCRIPTION
++syn keyword xsMacro PERL_ARGS_ASSERT_POPULATE_ISA PERL_ARGS_ASSERT_PREGCOMP
++syn keyword xsMacro PERL_ARGS_ASSERT_PREGEXEC PERL_ARGS_ASSERT_PREGFREE2
++syn keyword xsMacro PERL_ARGS_ASSERT_PRESCAN_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_PRINTBUF
++syn keyword xsMacro PERL_ARGS_ASSERT_PRINTF_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_PROCESS_SPECIAL_BLOCKS
++syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FETCH
++syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_FIND
++syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_SPLIT
++syn keyword xsMacro PERL_ARGS_ASSERT_PTR_TABLE_STORE
++syn keyword xsMacro PERL_ARGS_ASSERT_PUT_BYTE PERL_ARGS_ASSERT_PV_DISPLAY
++syn keyword xsMacro PERL_ARGS_ASSERT_PV_ESCAPE PERL_ARGS_ASSERT_PV_PRETTY
++syn keyword xsMacro PERL_ARGS_ASSERT_PV_UNI_DISPLAY PERL_ARGS_ASSERT_QERROR
++syn keyword xsMacro PERL_ARGS_ASSERT_QSORTSVU
++syn keyword xsMacro PERL_ARGS_ASSERT_REENTRANT_RETRY
++syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_FETCH_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_NEW_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_REFCOUNTED_HE_VALUE
++syn keyword xsMacro PERL_ARGS_ASSERT_REFTO PERL_ARGS_ASSERT_REG
++syn keyword xsMacro PERL_ARGS_ASSERT_REGANODE PERL_ARGS_ASSERT_REGATOM
++syn keyword xsMacro PERL_ARGS_ASSERT_REGBRANCH PERL_ARGS_ASSERT_REGCLASS
++syn keyword xsMacro PERL_ARGS_ASSERT_REGCLASS_SWASH PERL_ARGS_ASSERT_REGCPPOP
++syn keyword xsMacro PERL_ARGS_ASSERT_REGCURLY PERL_ARGS_ASSERT_REGDUMP
++syn keyword xsMacro PERL_ARGS_ASSERT_REGDUPE_INTERNAL
++syn keyword xsMacro PERL_ARGS_ASSERT_REGEXEC_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_REGFREE_INTERNAL
++syn keyword xsMacro PERL_ARGS_ASSERT_REGHOP3 PERL_ARGS_ASSERT_REGHOP4
++syn keyword xsMacro PERL_ARGS_ASSERT_REGHOPMAYBE3 PERL_ARGS_ASSERT_REGINCLASS
++syn keyword xsMacro PERL_ARGS_ASSERT_REGINSERT PERL_ARGS_ASSERT_REGMATCH
++syn keyword xsMacro PERL_ARGS_ASSERT_REGPIECE PERL_ARGS_ASSERT_REGPPOSIXCC
++syn keyword xsMacro PERL_ARGS_ASSERT_REGPROP PERL_ARGS_ASSERT_REGREPEAT
++syn keyword xsMacro PERL_ARGS_ASSERT_REGTAIL PERL_ARGS_ASSERT_REGTAIL_STUDY
++syn keyword xsMacro PERL_ARGS_ASSERT_REGTRY PERL_ARGS_ASSERT_REGUNI
++syn keyword xsMacro PERL_ARGS_ASSERT_REGWHITE
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_CHECK_NAMED_BUFF_MATCHED
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMEDSEQ
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ALL
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_EXISTS
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FETCH
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_FIRSTKEY
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_ITER
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_NEXTKEY
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NAMED_BUFF_SCALAR
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NODE
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_FETCH
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_LENGTH
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_NUMBERED_BUFF_STORE
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_QR_PACKAGE
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_RECODE
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_SCAN_NAME
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_SKIPCOMMENT
++syn keyword xsMacro PERL_ARGS_ASSERT_REG_TEMP_COPY PERL_ARGS_ASSERT_REPEATCPY
++syn keyword xsMacro PERL_ARGS_ASSERT_REPORT_REDEFINED_CV
++syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_REQUIRE_TIE_MOD
++syn keyword xsMacro PERL_ARGS_ASSERT_RE_COMPILE PERL_ARGS_ASSERT_RE_CROAK2
++syn keyword xsMacro PERL_ARGS_ASSERT_RE_DUP_GUTS
++syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_START
++syn keyword xsMacro PERL_ARGS_ASSERT_RE_INTUIT_STRING
++syn keyword xsMacro PERL_ARGS_ASSERT_RNINSTR PERL_ARGS_ASSERT_RSIGNAL_SAVE
++syn keyword xsMacro PERL_ARGS_ASSERT_RUN_USER_FILTER
++syn keyword xsMacro PERL_ARGS_ASSERT_RV2CV_OP_CV PERL_ARGS_ASSERT_RVPV_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_FREE
++syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_RESTORE
++syn keyword xsMacro PERL_ARGS_ASSERT_RXRES_SAVE PERL_ARGS_ASSERT_SAME_DIRENT
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVESHAREDSVPV PERL_ARGS_ASSERT_SAVESVPV
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_ADELETE
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_AELEM_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_APTR PERL_ARGS_ASSERT_SAVE_ARY
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_BOOL PERL_ARGS_ASSERT_SAVE_CLEARSV
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DELETE
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_DESTRUCTOR
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_PVREF
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GENERIC_SVREF
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_GP PERL_ARGS_ASSERT_SAVE_HASH
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HDELETE
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HEK_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HELEM_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_HPTR PERL_ARGS_ASSERT_SAVE_I16
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_I32 PERL_ARGS_ASSERT_SAVE_I8
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_INT PERL_ARGS_ASSERT_SAVE_ITEM
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_IV PERL_ARGS_ASSERT_SAVE_LINES
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_LIST PERL_ARGS_ASSERT_SAVE_LONG
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MAGIC
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_MORTALIZESV
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_NOGV PERL_ARGS_ASSERT_SAVE_PPTR
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SCALAR_AT
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SET_SVFLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SHARED_PVREF
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_SPTR PERL_ARGS_ASSERT_SAVE_SVREF
++syn keyword xsMacro PERL_ARGS_ASSERT_SAVE_VPTR PERL_ARGS_ASSERT_SCALARBOOLEAN
++syn keyword xsMacro PERL_ARGS_ASSERT_SCALARVOID PERL_ARGS_ASSERT_SCAN_BIN
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_COMMIT PERL_ARGS_ASSERT_SCAN_CONST
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_FORMLINE
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_HEREDOC PERL_ARGS_ASSERT_SCAN_HEX
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_IDENT
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_INPUTSYMBOL
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_NUM PERL_ARGS_ASSERT_SCAN_OCT
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_PAT PERL_ARGS_ASSERT_SCAN_STR
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_SUBST PERL_ARGS_ASSERT_SCAN_TRANS
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_SCAN_VSTRING PERL_ARGS_ASSERT_SCAN_WORD
++syn keyword xsMacro PERL_ARGS_ASSERT_SCREAMINSTR
++syn keyword xsMacro PERL_ARGS_ASSERT_SEARCH_CONST
++syn keyword xsMacro PERL_ARGS_ASSERT_SET_CONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_SET_REGCLASS_BIT
++syn keyword xsMacro PERL_ARGS_ASSERT_SET_REGCLASS_BIT_FOLD
++syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK
++syn keyword xsMacro PERL_ARGS_ASSERT_SHARE_HEK_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SIMPLIFY_SORT PERL_ARGS_ASSERT_SI_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_SKIPSPACE PERL_ARGS_ASSERT_SKIPSPACE0
++syn keyword xsMacro PERL_ARGS_ASSERT_SKIPSPACE1 PERL_ARGS_ASSERT_SKIPSPACE2
++syn keyword xsMacro PERL_ARGS_ASSERT_SLAB_FREE PERL_ARGS_ASSERT_SLAB_TO_RW
++syn keyword xsMacro PERL_ARGS_ASSERT_SOFTREF2XV PERL_ARGS_ASSERT_SORTCV
++syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV_STACKED
++syn keyword xsMacro PERL_ARGS_ASSERT_SORTCV_XSUB PERL_ARGS_ASSERT_SORTSV
++syn keyword xsMacro PERL_ARGS_ASSERT_SORTSV_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SPACE_JOIN_NAMES_MORTAL
++syn keyword xsMacro PERL_ARGS_ASSERT_SS_DUP PERL_ARGS_ASSERT_STACK_GROW
++syn keyword xsMacro PERL_ARGS_ASSERT_START_GLOB
++syn keyword xsMacro PERL_ARGS_ASSERT_STASHPV_HVNAME_MATCH
++syn keyword xsMacro PERL_ARGS_ASSERT_STDIZE_LOCALE
++syn keyword xsMacro PERL_ARGS_ASSERT_STRIP_RETURN
++syn keyword xsMacro PERL_ARGS_ASSERT_STR_TO_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_STUDY_CHUNK
++syn keyword xsMacro PERL_ARGS_ASSERT_SUB_CRUSH_DEPTH
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2BOOL_FLAGS PERL_ARGS_ASSERT_SV_2CV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IO PERL_ARGS_ASSERT_SV_2IUV_COMMON
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2IUV_NON_PRESERVE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2NUM PERL_ARGS_ASSERT_SV_2PVBYTE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVBYTE_NOLEN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PVUTF8_NOLEN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_2PV_NOLEN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_ARENA
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_ADD_BACKREF
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_BACKOFF PERL_ARGS_ASSERT_SV_BLESS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV PERL_ARGS_ASSERT_SV_CATPVF
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_MG_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVF_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPVN_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATPV_MG PERL_ARGS_ASSERT_SV_CATSV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATSV_MG PERL_ARGS_ASSERT_SV_CATXMLPV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATXMLPVN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CATXMLSV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CAT_DECODE PERL_ARGS_ASSERT_SV_CHOP
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_CLEAR
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_COLLXFRM_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_COMPILE_2OP
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_COMPILE_2OP_IS_BROKEN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_COPYPV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DEL_BACKREF
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DERIVED_FROM_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES PERL_ARGS_ASSERT_SV_DOES_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DOES_PVN PERL_ARGS_ASSERT_SV_DOES_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUMP PERL_ARGS_ASSERT_SV_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_COMMON
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_DUP_INC_MULTIPLE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_EXP_GROW
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_FORCE_NORMAL_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_FREE2 PERL_ARGS_ASSERT_SV_GETS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_GROW PERL_ARGS_ASSERT_SV_INSERT
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_INSERT_FLAGS PERL_ARGS_ASSERT_SV_ISA
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_IV PERL_ARGS_ASSERT_SV_I_NCMP
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_KILL_BACKREFS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_MAGIC PERL_ARGS_ASSERT_SV_MAGICEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_NCMP PERL_ARGS_ASSERT_SV_NV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_B2U_MIDWAY
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_CACHED
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_FORWARDS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_POS_U2B_MIDWAY PERL_ARGS_ASSERT_SV_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTE PERL_ARGS_ASSERT_SV_PVBYTEN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVBYTEN_FORCE PERL_ARGS_ASSERT_SV_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_FORCE_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVN_NOMG PERL_ARGS_ASSERT_SV_PVUTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_PVUTF8N_FORCE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_RECODE_TO_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_REF PERL_ARGS_ASSERT_SV_REFTYPE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_RELEASE_COW
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_REPLACE PERL_ARGS_ASSERT_SV_RESET
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_RVWEAKEN PERL_ARGS_ASSERT_SV_SETHEK
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETIV PERL_ARGS_ASSERT_SV_SETIV_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETNV PERL_ARGS_ASSERT_SV_SETNV_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV PERL_ARGS_ASSERT_SV_SETPVF
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_MG_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVF_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVIV_MG PERL_ARGS_ASSERT_SV_SETPVN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPVN_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETPV_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_IV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_NV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETREF_UV PERL_ARGS_ASSERT_SV_SETSV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_COW
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETSV_MG PERL_ARGS_ASSERT_SV_SETUV
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_SETUV_MG PERL_ARGS_ASSERT_SV_TAINT
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_TAINTED PERL_ARGS_ASSERT_SV_UNGLOB
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNI_DISPLAY
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGIC
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNMAGICEXT PERL_ARGS_ASSERT_SV_UNREF
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNREF_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UNTAINT PERL_ARGS_ASSERT_SV_UPGRADE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_USEPVN_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DECODE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_DOWNGRADE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_ENCODE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UTF8_UPGRADE_FLAGS_GROW
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_UV PERL_ARGS_ASSERT_SV_VCATPVF
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVFN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_VCATPVF_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF PERL_ARGS_ASSERT_SV_VSETPVFN
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_VSETPVF_MG
++syn keyword xsMacro PERL_ARGS_ASSERT_SV_XMLPEEK PERL_ARGS_ASSERT_SWALLOW_BOM
++syn keyword xsMacro PERL_ARGS_ASSERT_SWASH_FETCH PERL_ARGS_ASSERT_SWASH_INIT
++syn keyword xsMacro PERL_ARGS_ASSERT_SWATCH_GET PERL_ARGS_ASSERT_SYS_INIT
++syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INIT3
++syn keyword xsMacro PERL_ARGS_ASSERT_SYS_INTERN_DUP
++syn keyword xsMacro PERL_ARGS_ASSERT_TAINT_PROPER
++syn keyword xsMacro PERL_ARGS_ASSERT_TIED_METHOD
++syn keyword xsMacro PERL_ARGS_ASSERT_TOKENIZE_USE PERL_ARGS_ASSERT_TOKEN_FREE
++syn keyword xsMacro PERL_ARGS_ASSERT_TOKEN_GETMAD PERL_ARGS_ASSERT_TOKEQ
++syn keyword xsMacro PERL_ARGS_ASSERT_TOKEREPORT
++syn keyword xsMacro PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_TOO_FEW_ARGUMENTS_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_TOO_MANY_ARGUMENTS_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_BYTE_SUBSTR
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_LOWER
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_TITLE
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UNI_UPPER
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_CASE
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_FOLD
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_LOWER
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_SUBSTR
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_TITLE
++syn keyword xsMacro PERL_ARGS_ASSERT_TO_UTF8_UPPER
++syn keyword xsMacro PERL_ARGS_ASSERT_TRANSLATE_SUBSTR_OFFSETS
++syn keyword xsMacro PERL_ARGS_ASSERT_UIV_2BUF PERL_ARGS_ASSERT_UNLNK
++syn keyword xsMacro PERL_ARGS_ASSERT_UNPACKSTRING PERL_ARGS_ASSERT_UNPACK_REC
++syn keyword xsMacro PERL_ARGS_ASSERT_UNPACK_STR
++syn keyword xsMacro PERL_ARGS_ASSERT_UNREFERENCED_TO_TMP_STACK
++syn keyword xsMacro PERL_ARGS_ASSERT_UPG_VERSION
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TEXTFILTER
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF16_TO_UTF8_REVERSED
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVCHR
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8N_TO_UVUNI
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_DISTANCE PERL_ARGS_ASSERT_UTF8_HOP
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_LENGTH
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_LEN_CACHE_UPDATE
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_MG_POS_CACHE_UPDATE
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_BYTES
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVCHR
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVCHR_BUF
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI
++syn keyword xsMacro PERL_ARGS_ASSERT_UTF8_TO_UVUNI_BUF
++syn keyword xsMacro PERL_ARGS_ASSERT_UTILIZE PERL_ARGS_ASSERT_UVCHR_TO_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_UVCHR_TO_UTF8_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8
++syn keyword xsMacro PERL_ARGS_ASSERT_UVUNI_TO_UTF8_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT_VALIDATE_SUID
++syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVCHR
++syn keyword xsMacro PERL_ARGS_ASSERT_VALID_UTF8_TO_UVUNI
++syn keyword xsMacro PERL_ARGS_ASSERT_VCMP PERL_ARGS_ASSERT_VDEB
++syn keyword xsMacro PERL_ARGS_ASSERT_VFORM PERL_ARGS_ASSERT_VISIT
++syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_DEFELEM
++syn keyword xsMacro PERL_ARGS_ASSERT_VIVIFY_REF PERL_ARGS_ASSERT_VLOAD_MODULE
++syn keyword xsMacro PERL_ARGS_ASSERT_VMESS PERL_ARGS_ASSERT_VNEWSVPVF
++syn keyword xsMacro PERL_ARGS_ASSERT_VNORMAL PERL_ARGS_ASSERT_VNUMIFY
++syn keyword xsMacro PERL_ARGS_ASSERT_VSTRINGIFY PERL_ARGS_ASSERT_VVERIFY
++syn keyword xsMacro PERL_ARGS_ASSERT_VWARN PERL_ARGS_ASSERT_VWARNER
++syn keyword xsMacro PERL_ARGS_ASSERT_WAIT4PID PERL_ARGS_ASSERT_WARN
++syn keyword xsMacro PERL_ARGS_ASSERT_WARNER PERL_ARGS_ASSERT_WARNER_NOCONTEXT
++syn keyword xsMacro PERL_ARGS_ASSERT_WARN_NOCONTEXT PERL_ARGS_ASSERT_WARN_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_WATCH PERL_ARGS_ASSERT_WHICHSIG_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_PVN
++syn keyword xsMacro PERL_ARGS_ASSERT_WHICHSIG_SV
++syn keyword xsMacro PERL_ARGS_ASSERT_WITH_QUEUED_ERRORS
++syn keyword xsMacro PERL_ARGS_ASSERT_WRAP_OP_CHECKER
++syn keyword xsMacro PERL_ARGS_ASSERT_WRITE_TO_STDERR
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_ATTR
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_FORM
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_INDENT
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_PACKSUBS_PERL
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_SUB
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_SUB_PERL
++syn keyword xsMacro PERL_ARGS_ASSERT_XMLDUMP_VINDENT
++syn keyword xsMacro PERL_ARGS_ASSERT_XS_APIVERSION_BOOTCHECK
++syn keyword xsMacro PERL_ARGS_ASSERT_XS_VERSION_BOOTCHECK
++syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR PERL_ARGS_ASSERT_YYERROR_PV
++syn keyword xsMacro PERL_ARGS_ASSERT_YYERROR_PVN PERL_ARGS_ASSERT_YYWARN
++syn keyword xsMacro PERL_ARGS_ASSERT__APPEND_RANGE_TO_INVLIST
++syn keyword xsMacro PERL_ARGS_ASSERT__CORE_SWASH_INIT
++syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_ARRAY_INIT
++syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_CONTENTS
++syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INTERSECTION_MAYBE_COMPLEMENT_2ND
++syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INVERT
++syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_INVERT_PROP
++syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_POPULATE_SWATCH
++syn keyword xsMacro PERL_ARGS_ASSERT__INVLIST_UNION_MAYBE_COMPLEMENT_2ND
++syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8_QUOTEMETA
++syn keyword xsMacro PERL_ARGS_ASSERT__IS_UTF8__PERL_IDSTART
++syn keyword xsMacro PERL_ARGS_ASSERT__NEW_INVLIST_C_ARRAY
++syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_INVERSION_HASH
++syn keyword xsMacro PERL_ARGS_ASSERT__SWASH_TO_INVLIST
++syn keyword xsMacro PERL_ARGS_ASSERT__TO_FOLD_LATIN1
++syn keyword xsMacro PERL_ARGS_ASSERT__TO_UNI_FOLD_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT__TO_UPPER_TITLE_LATIN1
++syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_FOLD_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_LOWER_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_TITLE_FLAGS
++syn keyword xsMacro PERL_ARGS_ASSERT__TO_UTF8_UPPER_FLAGS PERL_ASYNC_CHECK
++syn keyword xsMacro PERL_BITFIELD16 PERL_BITFIELD32 PERL_BITFIELD8
++syn keyword xsMacro PERL_CALLCONV PERL_CHECK_INITED PERL_CKDEF PERL_DEB
++syn keyword xsMacro PERL_DEBUG PERL_DEBUG_PAD PERL_DEBUG_PAD_ZERO
++syn keyword xsMacro PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION
++syn keyword xsMacro PERL_DONT_CREATE_GVSV
++syn keyword xsMacro PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS
++syn keyword xsMacro PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION
++syn keyword xsMacro PERL_ENABLE_POSITIVE_ASSERTION_STUDY
++syn keyword xsMacro PERL_ENABLE_TRIE_OPTIMISATION PERL_EXIT_DESTRUCT_END
++syn keyword xsMacro PERL_EXIT_EXPECTED PERL_EXPORT_C PERL_FILE_IS_ABSOLUTE
++syn keyword xsMacro PERL_FILTER_EXISTS PERL_FLUSHALL_FOR_CHILD PERL_FPU_INIT
++syn keyword xsMacro PERL_FPU_POST_EXEC PERL_FPU_PRE_EXEC PERL_FS_VERSION
++syn keyword xsMacro PERL_FS_VER_FMT PERL_GCC_BRACE_GROUPS_FORBIDDEN
++syn keyword xsMacro PERL_GET_CONTEXT PERL_GET_INTERP PERL_GET_THX
++syn keyword xsMacro PERL_GET_VARS PERL_GIT_UNPUSHED_COMMITS
++syn keyword xsMacro PERL_GLOBAL_STRUCT PERL_GPROF_MONCONTROL PERL_HASH
++syn keyword xsMacro PERL_HASH_INTERNAL PERL_HASH_INTERNAL_ PERL_HASH_SEED
++syn keyword xsMacro PERL_HV_ARRAY_ALLOC_BYTES PERL_IMPLICIT_CONTEXT
++syn keyword xsMacro PERL_INTERPRETER_SIZE_UPTO_MEMBER PERL_INT_MAX
++syn keyword xsMacro PERL_INT_MIN PERL_LOADMOD_DENY PERL_LOADMOD_IMPORT_OPS
++syn keyword xsMacro PERL_LOADMOD_NOIMPORT PERL_LONG_MAX PERL_LONG_MIN
++syn keyword xsMacro PERL_MALLOC_WRAP PERL_MG_UFUNC PERL_MY_SNPRINTF_GUARDED
++syn keyword xsMacro PERL_MY_VSNPRINTF_GUARDED PERL_NEED_MY_BETOH16
++syn keyword xsMacro PERL_NEED_MY_BETOH32 PERL_NEED_MY_BETOHI
++syn keyword xsMacro PERL_NEED_MY_BETOHL PERL_NEED_MY_BETOHS
++syn keyword xsMacro PERL_NEED_MY_HTOBE16 PERL_NEED_MY_HTOBE32
++syn keyword xsMacro PERL_NEED_MY_HTOBEI PERL_NEED_MY_HTOBEL
++syn keyword xsMacro PERL_NEED_MY_HTOBES PERL_NEED_MY_HTOLE16
++syn keyword xsMacro PERL_NEED_MY_HTOLE32 PERL_NEED_MY_HTOLEI
++syn keyword xsMacro PERL_NEED_MY_HTOLEL PERL_NEED_MY_HTOLES
++syn keyword xsMacro PERL_NEED_MY_LETOH16 PERL_NEED_MY_LETOH32
++syn keyword xsMacro PERL_NEED_MY_LETOHI PERL_NEED_MY_LETOHL
++syn keyword xsMacro PERL_NEED_MY_LETOHS PERL_NO_DEV_RANDOM PERL_OBJECT_THIS
++syn keyword xsMacro PERL_OBJECT_THIS_ PERL_PADSEQ_INTRO PERL_PATCHNUM
++syn keyword xsMacro PERL_PPADDR_INITED PERL_PPDEF PERL_PRESERVE_IVUV
++syn keyword xsMacro PERL_PRIeldbl PERL_PRIfldbl PERL_PRIgldbl
++syn keyword xsMacro PERL_PV_ESCAPE_ALL PERL_PV_ESCAPE_FIRSTCHAR
++syn keyword xsMacro PERL_PV_ESCAPE_NOBACKSLASH PERL_PV_ESCAPE_NOCLEAR
++syn keyword xsMacro PERL_PV_ESCAPE_NONASCII PERL_PV_ESCAPE_QUOTE
++syn keyword xsMacro PERL_PV_ESCAPE_RE PERL_PV_ESCAPE_UNI
++syn keyword xsMacro PERL_PV_ESCAPE_UNI_DETECT PERL_PV_PRETTY_DUMP
++syn keyword xsMacro PERL_PV_PRETTY_ELLIPSES PERL_PV_PRETTY_LTGT
++syn keyword xsMacro PERL_PV_PRETTY_NOCLEAR PERL_PV_PRETTY_QUOTE
++syn keyword xsMacro PERL_PV_PRETTY_REGPROP PERL_QUAD_MAX PERL_QUAD_MIN
++syn keyword xsMacro PERL_REENTR_API PERL_REGMATCH_SLAB_SLOTS PERL_REVISION
++syn keyword xsMacro PERL_SCAN_ALLOW_UNDERSCORES PERL_SCAN_DISALLOW_PREFIX
++syn keyword xsMacro PERL_SCAN_GREATER_THAN_UV_MAX PERL_SCAN_SILENT_ILLDIGIT
++syn keyword xsMacro PERL_SCAN_SILENT_NON_PORTABLE PERL_SCNfldbl
++syn keyword xsMacro PERL_SCRIPT_MODE PERL_SET_CONTEXT PERL_SET_INTERP
++syn keyword xsMacro PERL_SET_PHASE PERL_SET_THX PERL_SHORT_MAX PERL_SHORT_MIN
++syn keyword xsMacro PERL_SIGNALS_UNSAFE_FLAG PERL_STACK_OVERFLOW_CHECK
++syn keyword xsMacro PERL_STATIC_INLINE PERL_STRLEN_EXPAND_SHIFT
++syn keyword xsMacro PERL_STRLEN_ROUNDUP PERL_STRLEN_ROUNDUP_QUANTUM
++syn keyword xsMacro PERL_SUBVERSION PERL_SUB_DEPTH_WARN PERL_SYS_INIT
++syn keyword xsMacro PERL_SYS_INIT3 PERL_SYS_INIT3_BODY PERL_SYS_INIT_BODY
++syn keyword xsMacro PERL_SYS_TERM PERL_SYS_TERM_BODY PERL_TARGETARCH
++syn keyword xsMacro PERL_UCHAR_MAX PERL_UCHAR_MIN PERL_UINT_MAX PERL_UINT_MIN
++syn keyword xsMacro PERL_ULONG_MAX PERL_ULONG_MIN PERL_UNICODE_ALL_FLAGS
++syn keyword xsMacro PERL_UNICODE_ARGV PERL_UNICODE_ARGV_FLAG
++syn keyword xsMacro PERL_UNICODE_DEFAULT_FLAGS PERL_UNICODE_IN
++syn keyword xsMacro PERL_UNICODE_INOUT PERL_UNICODE_INOUT_FLAG
++syn keyword xsMacro PERL_UNICODE_IN_FLAG PERL_UNICODE_LOCALE
++syn keyword xsMacro PERL_UNICODE_LOCALE_FLAG PERL_UNICODE_MAX
++syn keyword xsMacro PERL_UNICODE_OUT PERL_UNICODE_OUT_FLAG PERL_UNICODE_STD
++syn keyword xsMacro PERL_UNICODE_STDERR PERL_UNICODE_STDERR_FLAG
++syn keyword xsMacro PERL_UNICODE_STDIN PERL_UNICODE_STDIN_FLAG
++syn keyword xsMacro PERL_UNICODE_STDOUT PERL_UNICODE_STDOUT_FLAG
++syn keyword xsMacro PERL_UNICODE_STD_FLAG PERL_UNICODE_UTF8CACHEASSERT
++syn keyword xsMacro PERL_UNICODE_UTF8CACHEASSERT_FLAG
++syn keyword xsMacro PERL_UNICODE_WIDESYSCALLS PERL_UNICODE_WIDESYSCALLS_FLAG
++syn keyword xsMacro PERL_UNUSED_ARG PERL_UNUSED_CONTEXT PERL_UNUSED_DECL
++syn keyword xsMacro PERL_UNUSED_VAR PERL_UQUAD_MAX PERL_UQUAD_MIN
++syn keyword xsMacro PERL_USES_PL_PIDSTATUS PERL_USE_GCC_BRACE_GROUPS
++syn keyword xsMacro PERL_USHORT_MAX PERL_USHORT_MIN PERL_VERSION
++syn keyword xsMacro PERL_VERSION_STRING PERL_WAIT_FOR_CHILDREN
++syn keyword xsMacro PERL_WARNHOOK_FATAL PERL_WRITE_MSG_TO_CONSOLE
++syn keyword xsMacro PERL_XS_EXPORT_C PHASE_CHANGE_PROBE PHOSTNAME
++syn keyword xsMacro PIPESOCK_MODE PIPE_OPEN_MODE PLUGEXPR PLUGSTMT PLUS
++syn keyword xsMacro PL_ASCII PL_AboveLatin1 PL_Argv PL_Cmd PL_DBcv PL_DBgv
++syn keyword xsMacro PL_DBline PL_DBsignal PL_DBsingle PL_DBsub PL_DBtrace
++syn keyword xsMacro PL_Dir PL_Env PL_Gappctx PL_Gcheck PL_Gcheck_mutex
++syn keyword xsMacro PL_Gcsighandlerp PL_Gcurinterp PL_Gdo_undump
++syn keyword xsMacro PL_Gdollarzero_mutex PL_Gfold_locale PL_Ghints_mutex
++syn keyword xsMacro PL_Gkeyword_plugin PL_Gmalloc_mutex PL_Gmmap_page_size
++syn keyword xsMacro PL_Gmy_ctx_mutex PL_Gmy_cxt_index PL_Gop_mutex PL_Gop_seq
++syn keyword xsMacro PL_Gop_sequence PL_Gperlio_debug_fd PL_Gperlio_fd_refcnt
++syn keyword xsMacro PL_Gperlio_fd_refcnt_size PL_Gperlio_mutex PL_Gppaddr
++syn keyword xsMacro PL_Gsh_path PL_Gsig_defaulting PL_Gsig_handlers_initted
++syn keyword xsMacro PL_Gsig_ignoring PL_Gsig_trapped PL_Gsigfpe_saved
++syn keyword xsMacro PL_Gsv_placeholder PL_Gthr_key PL_Gtimesbase
++syn keyword xsMacro PL_Guse_safe_putenv PL_Gveto_cleanup PL_Gwatch_pvx
++syn keyword xsMacro PL_L1Cased PL_L1PosixAlnum PL_L1PosixAlpha
++syn keyword xsMacro PL_L1PosixGraph PL_L1PosixLower PL_L1PosixPrint
++syn keyword xsMacro PL_L1PosixPunct PL_L1PosixUpper PL_L1PosixWord PL_LIO
++syn keyword xsMacro PL_Latin1 PL_Mem PL_MemParse PL_MemShared
++syn keyword xsMacro PL_OP_SLAB_ALLOC PL_OpPtr PL_OpSlab PL_OpSpace
++syn keyword xsMacro PL_PerlSpace PL_PosixAlnum PL_PosixAlpha PL_PosixBlank
++syn keyword xsMacro PL_PosixCntrl PL_PosixDigit PL_PosixGraph PL_PosixLower
++syn keyword xsMacro PL_PosixPrint PL_PosixPunct PL_PosixSpace PL_PosixUpper
++syn keyword xsMacro PL_PosixWord PL_PosixXDigit PL_Proc PL_Sock PL_StdIO
++syn keyword xsMacro PL_Sv PL_VertSpace PL_XPerlSpace PL_XPosixBlank
++syn keyword xsMacro PL_XPosixCntrl PL_XPosixSpace PL_XPosixXDigit PL_Xpv
++syn keyword xsMacro PL_amagic_generation PL_an PL_apiversion PL_appctx
++syn keyword xsMacro PL_argvgv PL_argvout_stack PL_argvoutgv PL_basetime
++syn keyword xsMacro PL_beginav PL_beginav_save PL_blockhooks PL_body_arenas
++syn keyword xsMacro PL_body_roots PL_bodytarget PL_bostr PL_breakable_sub_gen
++syn keyword xsMacro PL_check_mutex PL_checkav PL_checkav_save PL_chopset
++syn keyword xsMacro PL_clocktick PL_collation_ix PL_collation_name
++syn keyword xsMacro PL_collation_standard PL_collxfrm_base PL_collxfrm_mult
++syn keyword xsMacro PL_colors PL_colorset PL_compcv PL_compiling PL_comppad
++syn keyword xsMacro PL_comppad_name PL_comppad_name_fill
++syn keyword xsMacro PL_comppad_name_floor PL_cop_seqmax PL_cryptseen
++syn keyword xsMacro PL_cshlen PL_csighandlerp PL_curcop PL_curcopdb
++syn keyword xsMacro PL_curinterp PL_curpad PL_curpm PL_curstack
++syn keyword xsMacro PL_curstackinfo PL_curstash PL_curstname
++syn keyword xsMacro PL_custom_op_descs PL_custom_op_names PL_custom_ops
++syn keyword xsMacro PL_cv_has_eval PL_dbargs PL_debstash PL_debug
++syn keyword xsMacro PL_debug_pad PL_def_layerlist PL_defgv PL_defoutgv
++syn keyword xsMacro PL_defstash PL_delaymagic PL_delaymagic_egid
++syn keyword xsMacro PL_delaymagic_euid PL_delaymagic_gid PL_delaymagic_uid
++syn keyword xsMacro PL_destroyhook PL_diehook PL_dirty PL_do_undump
++syn keyword xsMacro PL_dollarzero_mutex PL_doswitches PL_dowarn PL_dumper_fd
++syn keyword xsMacro PL_dumpindent PL_e_script PL_efloatbuf PL_efloatsize
++syn keyword xsMacro PL_encoding PL_endav PL_envgv PL_errgv PL_errors
++syn keyword xsMacro PL_eval_root PL_eval_start PL_evalseq PL_exit_flags
++syn keyword xsMacro PL_exitlist PL_exitlistlen PL_fdpid PL_filemode
++syn keyword xsMacro PL_firstgv PL_forkprocess PL_formfeed PL_formtarget
++syn keyword xsMacro PL_generation PL_gensym PL_glob_index PL_globalstash
++syn keyword xsMacro PL_globhook PL_hash_seed PL_hintgv PL_hints
++syn keyword xsMacro PL_hints_mutex PL_hv_fetch_ent_mh PL_in_clean_all
++syn keyword xsMacro PL_in_clean_objs PL_in_eval PL_in_load_module PL_incgv
++syn keyword xsMacro PL_initav PL_inplace PL_isarev PL_keyword_plugin
++syn keyword xsMacro PL_known_layers PL_last_in_gv PL_last_swash_hv
++syn keyword xsMacro PL_last_swash_key PL_last_swash_klen PL_last_swash_slen
++syn keyword xsMacro PL_last_swash_tmps PL_lastfd PL_lastgotoprobe
++syn keyword xsMacro PL_laststatval PL_laststype PL_localizing PL_localpatches
++syn keyword xsMacro PL_lockhook PL_madskills PL_main_cv PL_main_root
++syn keyword xsMacro PL_main_start PL_mainstack PL_malloc_mutex PL_markstack
++syn keyword xsMacro PL_markstack_max PL_markstack_ptr PL_max_intro_pending
++syn keyword xsMacro PL_maxo PL_maxsysfd PL_memory_debug_header PL_mess_sv
++syn keyword xsMacro PL_min_intro_pending PL_minus_E PL_minus_F PL_minus_a
++syn keyword xsMacro PL_minus_c PL_minus_l PL_minus_n PL_minus_p
++syn keyword xsMacro PL_mmap_page_size PL_modcount PL_modglobal
++syn keyword xsMacro PL_my_ctx_mutex PL_my_cxt_index PL_my_cxt_keys
++syn keyword xsMacro PL_my_cxt_list PL_my_cxt_size PL_nomemok PL_nrs
++syn keyword xsMacro PL_numeric_local PL_numeric_name PL_numeric_radix_sv
++syn keyword xsMacro PL_numeric_standard PL_ofsgv PL_oldname PL_op PL_op_mask
++syn keyword xsMacro PL_op_mutex PL_op_seq PL_op_sequence PL_opfreehook
++syn keyword xsMacro PL_opsave PL_origalen PL_origargc PL_origargv
++syn keyword xsMacro PL_origenviron PL_origfilename PL_ors_sv PL_osname
++syn keyword xsMacro PL_pad_reset_pending PL_padix PL_padix_floor PL_parser
++syn keyword xsMacro PL_patchlevel PL_peepp PL_perl_destruct_level PL_perldb
++syn keyword xsMacro PL_perlio PL_perlio_debug_fd PL_perlio_fd_refcnt
++syn keyword xsMacro PL_perlio_fd_refcnt_size PL_perlio_mutex PL_phase
++syn keyword xsMacro PL_pidstatus PL_preambleav PL_profiledata PL_psig_name
++syn keyword xsMacro PL_psig_pend PL_psig_ptr PL_ptr_table PL_reentrant_buffer
++syn keyword xsMacro PL_reentrant_retint PL_reg_curpm PL_reg_eval_set
++syn keyword xsMacro PL_reg_flags PL_reg_leftiter PL_reg_magic
++syn keyword xsMacro PL_reg_match_utf8 PL_reg_maxiter PL_reg_oldcurpm
++syn keyword xsMacro PL_reg_oldpos PL_reg_oldsaved PL_reg_oldsavedlen
++syn keyword xsMacro PL_reg_poscache PL_reg_poscache_size PL_reg_start_tmp
++syn keyword xsMacro PL_reg_start_tmpl PL_reg_starttry PL_reg_state
++syn keyword xsMacro PL_regdummy PL_regeol PL_regex_pad PL_regex_padav
++syn keyword xsMacro PL_reginput PL_reginterp_cnt PL_registered_mros
++syn keyword xsMacro PL_reglastcloseparen PL_reglastparen PL_regmatch_slab
++syn keyword xsMacro PL_regmatch_state PL_regoffs PL_regsize PL_rehash_seed
++syn keyword xsMacro PL_rehash_seed_set PL_replgv PL_restartjmpenv
++syn keyword xsMacro PL_restartop PL_rpeepp PL_rs PL_runops PL_savebegin
++syn keyword xsMacro PL_savestack PL_savestack_ix PL_savestack_max
++syn keyword xsMacro PL_sawampersand PL_scopestack PL_scopestack_ix
++syn keyword xsMacro PL_scopestack_max PL_scopestack_name PL_secondgv
++syn keyword xsMacro PL_sharehook PL_sig_defaulting PL_sig_handlers_initted
++syn keyword xsMacro PL_sig_ignoring PL_sig_pending PL_sig_trapped
++syn keyword xsMacro PL_sigfpe_saved PL_sighandlerp PL_signalhook PL_signals
++syn keyword xsMacro PL_slab_count PL_slabs PL_sort_RealCmp PL_sortcop
++syn keyword xsMacro PL_sortstash PL_splitstr PL_srand_called PL_stack_base
++syn keyword xsMacro PL_stack_max PL_stack_sp PL_start_env PL_stashcache
++syn keyword xsMacro PL_statbuf PL_statcache PL_statgv PL_statname
++syn keyword xsMacro PL_statusvalue PL_statusvalue_posix PL_statusvalue_vms
++syn keyword xsMacro PL_stderrgv PL_stdingv PL_strtab PL_sub_generation
++syn keyword xsMacro PL_subline PL_subname PL_sv_arenaroot PL_sv_count
++syn keyword xsMacro PL_sv_no PL_sv_objcount PL_sv_placeholder PL_sv_root
++syn keyword xsMacro PL_sv_serial PL_sv_undef PL_sv_yes PL_sys_intern
++syn keyword xsMacro PL_taint_warn PL_tainted PL_tainting PL_thr_key
++syn keyword xsMacro PL_threadhook PL_timesbase PL_timesbuf PL_tmps_floor
++syn keyword xsMacro PL_tmps_ix PL_tmps_max PL_tmps_stack PL_top_env
++syn keyword xsMacro PL_toptarget PL_unicode PL_unitcheckav
++syn keyword xsMacro PL_unitcheckav_save PL_unlockhook PL_unsafe
++syn keyword xsMacro PL_use_safe_putenv PL_utf8_X_L PL_utf8_X_LV PL_utf8_X_LVT
++syn keyword xsMacro PL_utf8_X_LV_LVT_V PL_utf8_X_T PL_utf8_X_V
++syn keyword xsMacro PL_utf8_X_begin PL_utf8_X_extend PL_utf8_X_non_hangul
++syn keyword xsMacro PL_utf8_X_prepend PL_utf8_alnum PL_utf8_alpha
++syn keyword xsMacro PL_utf8_digit PL_utf8_foldable PL_utf8_foldclosures
++syn keyword xsMacro PL_utf8_graph PL_utf8_idcont PL_utf8_idstart
++syn keyword xsMacro PL_utf8_lower PL_utf8_mark PL_utf8_perl_idstart
++syn keyword xsMacro PL_utf8_print PL_utf8_punct PL_utf8_quotemeta
++syn keyword xsMacro PL_utf8_space PL_utf8_tofold PL_utf8_tolower
++syn keyword xsMacro PL_utf8_totitle PL_utf8_toupper PL_utf8_upper
++syn keyword xsMacro PL_utf8_xdigit PL_utf8_xidcont PL_utf8_xidstart
++syn keyword xsMacro PL_utf8cache PL_utf8locale PL_veto_cleanup PL_vtbl_amagic
++syn keyword xsMacro PL_vtbl_amagicelem PL_vtbl_arylen PL_vtbl_arylen_p
++syn keyword xsMacro PL_vtbl_backref PL_vtbl_bm PL_vtbl_collxfrm
++syn keyword xsMacro PL_vtbl_dbline PL_vtbl_defelem PL_vtbl_env
++syn keyword xsMacro PL_vtbl_envelem PL_vtbl_fm PL_vtbl_hints
++syn keyword xsMacro PL_vtbl_hintselem PL_vtbl_isa PL_vtbl_isaelem
++syn keyword xsMacro PL_vtbl_mglob PL_vtbl_nkeys PL_vtbl_ovrld PL_vtbl_pack
++syn keyword xsMacro PL_vtbl_packelem PL_vtbl_pos PL_vtbl_regdata
++syn keyword xsMacro PL_vtbl_regdatum PL_vtbl_regexp PL_vtbl_sigelem
++syn keyword xsMacro PL_vtbl_substr PL_vtbl_sv PL_vtbl_taint PL_vtbl_utf8
++syn keyword xsMacro PL_vtbl_uvar PL_vtbl_vec PL_vtbl_vstring PL_warnhook
++syn keyword xsMacro PL_watch_pvx PL_watchaddr PL_watchok PL_xmlfp PMFUNC
++syn keyword xsMacro PM_GETRE PM_SETRE PMf_BASE_SHIFT PMf_COMPILETIME
++syn keyword xsMacro PMf_CONST PMf_CONTINUE PMf_EVAL PMf_EXTENDED PMf_FOLD
++syn keyword xsMacro PMf_GLOBAL PMf_KEEP PMf_KEEPCOPY PMf_MAYBE_CONST
++syn keyword xsMacro PMf_MULTILINE PMf_NONDESTRUCT PMf_ONCE PMf_RETAINT
++syn keyword xsMacro PMf_SINGLELINE PMf_USED POPBLOCK POPEVAL POPFORMAT
++syn keyword xsMacro POPLOOP POPMARK POPSTACK POPSTACK_TO POPSUB POPSUBST
++syn keyword xsMacro POP_MULTICALL POP_SAVEARRAY POPi POPl POPn POPp POPpbytex
++syn keyword xsMacro POPpconstx POPpx POPq POPs POPu POPul POPuq POSTDEC
++syn keyword xsMacro POSTINC POWOP PP PREC_LOW PREDEC PREGf_CUTGROUP_SEEN
++syn keyword xsMacro PREGf_IMPLICIT PREGf_NAUGHTY PREGf_SKIP
++syn keyword xsMacro PREGf_VERBARG_SEEN PREINC PREVOPER PRINTF_FORMAT_NULL_OK
++syn keyword xsMacro PRIVATEREF PRIVLIB PRIVLIB_EXP PRIVSHIFT PROCSELFEXE_PATH
++syn keyword xsMacro PRUNE PSEUDO PTHREAD_ATFORK PTHREAD_ATTR_SETDETACHSTATE
++syn keyword xsMacro PTHREAD_CREATE PTHREAD_CREATE_JOINABLE
++syn keyword xsMacro PTHREAD_GETSPECIFIC PTHREAD_GETSPECIFIC_INT PTR2IV PTR2NV
++syn keyword xsMacro PTR2UV PTR2nat PTR2ul PTRSIZE PTRV PUSHBLOCK PUSHEVAL
++syn keyword xsMacro PUSHFORMAT PUSHGIVEN PUSHLOOP_FOR PUSHLOOP_PLAIN PUSHMARK
++syn keyword xsMacro PUSHSTACK PUSHSTACKi PUSHSUB PUSHSUBST PUSHSUB_BASE
++syn keyword xsMacro PUSHSUB_DB PUSHTARG PUSHWHEN PUSH_MULTICALL PUSHi
++syn keyword xsMacro PUSHmortal PUSHn PUSHp PUSHs PUSHu PUTBACK PWGECOS
++syn keyword xsMacro PWPASSWD Pause PeRl_CaTiFy PeRl_StGiFy PerlDir_chdir
++syn keyword xsMacro PerlDir_close PerlDir_mapA PerlDir_mapW PerlDir_mkdir
++syn keyword xsMacro PerlDir_open PerlDir_read PerlDir_rewind PerlDir_rmdir
++syn keyword xsMacro PerlDir_seek PerlDir_tell PerlEnv_ENVgetenv
++syn keyword xsMacro PerlEnv_ENVgetenv_len PerlEnv_clearenv
++syn keyword xsMacro PerlEnv_free_childdir PerlEnv_free_childenv
++syn keyword xsMacro PerlEnv_get_child_IO PerlEnv_get_childdir
++syn keyword xsMacro PerlEnv_get_childenv PerlEnv_getenv PerlEnv_getenv_len
++syn keyword xsMacro PerlEnv_lib_path PerlEnv_os_id PerlEnv_putenv
++syn keyword xsMacro PerlEnv_sitelib_path PerlEnv_uname PerlEnv_vendorlib_path
++syn keyword xsMacro PerlIOArg PerlIOBase PerlIONext PerlIOSelf PerlIOValid
++syn keyword xsMacro PerlIO_canset_cnt PerlIO_exportFILE PerlIO_fast_gets
++syn keyword xsMacro PerlIO_fdopen PerlIO_findFILE PerlIO_getc PerlIO_getname
++syn keyword xsMacro PerlIO_has_base PerlIO_has_cntptr PerlIO_importFILE
++syn keyword xsMacro PerlIO_isutf8 PerlIO_open PerlIO_printf PerlIO_putc
++syn keyword xsMacro PerlIO_puts PerlIO_releaseFILE PerlIO_reopen
++syn keyword xsMacro PerlIO_rewind PerlIO_sprintf PerlIO_stdoutf
++syn keyword xsMacro PerlIO_tmpfile PerlIO_ungetc PerlIO_vprintf
++syn keyword xsMacro PerlLIO_access PerlLIO_chmod PerlLIO_chown PerlLIO_chsize
++syn keyword xsMacro PerlLIO_close PerlLIO_dup PerlLIO_dup2 PerlLIO_flock
++syn keyword xsMacro PerlLIO_fstat PerlLIO_ioctl PerlLIO_isatty PerlLIO_link
++syn keyword xsMacro PerlLIO_lseek PerlLIO_lstat PerlLIO_mkstemp
++syn keyword xsMacro PerlLIO_mktemp PerlLIO_open PerlLIO_open3 PerlLIO_read
++syn keyword xsMacro PerlLIO_rename PerlLIO_setmode PerlLIO_stat
++syn keyword xsMacro PerlLIO_tmpnam PerlLIO_umask PerlLIO_unlink PerlLIO_utime
++syn keyword xsMacro PerlLIO_write PerlMemParse_calloc PerlMemParse_free
++syn keyword xsMacro PerlMemParse_free_lock PerlMemParse_get_lock
++syn keyword xsMacro PerlMemParse_is_locked PerlMemParse_malloc
++syn keyword xsMacro PerlMemParse_realloc PerlMemShared_calloc
++syn keyword xsMacro PerlMemShared_free PerlMemShared_free_lock
++syn keyword xsMacro PerlMemShared_get_lock PerlMemShared_is_locked
++syn keyword xsMacro PerlMemShared_malloc PerlMemShared_realloc PerlMem_calloc
++syn keyword xsMacro PerlMem_free PerlMem_free_lock PerlMem_get_lock
++syn keyword xsMacro PerlMem_is_locked PerlMem_malloc PerlMem_realloc
++syn keyword xsMacro PerlProc_DynaLoad PerlProc_GetOSError PerlProc__exit
++syn keyword xsMacro PerlProc_abort PerlProc_crypt PerlProc_execl
++syn keyword xsMacro PerlProc_execv PerlProc_execvp PerlProc_exit
++syn keyword xsMacro PerlProc_fork PerlProc_getegid PerlProc_geteuid
++syn keyword xsMacro PerlProc_getgid PerlProc_getlogin PerlProc_getpid
++syn keyword xsMacro PerlProc_gettimeofday PerlProc_getuid PerlProc_kill
++syn keyword xsMacro PerlProc_killpg PerlProc_lasthost PerlProc_longjmp
++syn keyword xsMacro PerlProc_pause PerlProc_pclose PerlProc_pipe
++syn keyword xsMacro PerlProc_popen PerlProc_popen_list PerlProc_setgid
++syn keyword xsMacro PerlProc_setjmp PerlProc_setuid PerlProc_signal
++syn keyword xsMacro PerlProc_sleep PerlProc_spawnvp PerlProc_times
++syn keyword xsMacro PerlProc_wait PerlProc_waitpid PerlSIO_canset_cnt
++syn keyword xsMacro PerlSIO_clearerr PerlSIO_fast_gets PerlSIO_fclose
++syn keyword xsMacro PerlSIO_fdopen PerlSIO_fdupopen PerlSIO_feof
++syn keyword xsMacro PerlSIO_ferror PerlSIO_fflush PerlSIO_fgetc
++syn keyword xsMacro PerlSIO_fgetpos PerlSIO_fgets PerlSIO_fileno
++syn keyword xsMacro PerlSIO_fopen PerlSIO_fputc PerlSIO_fputs PerlSIO_fread
++syn keyword xsMacro PerlSIO_freopen PerlSIO_fseek PerlSIO_fsetpos
++syn keyword xsMacro PerlSIO_ftell PerlSIO_fwrite PerlSIO_get_base
++syn keyword xsMacro PerlSIO_get_bufsiz PerlSIO_get_cnt PerlSIO_get_ptr
++syn keyword xsMacro PerlSIO_has_base PerlSIO_has_cntptr PerlSIO_init
++syn keyword xsMacro PerlSIO_printf PerlSIO_rewind PerlSIO_set_cnt
++syn keyword xsMacro PerlSIO_set_ptr PerlSIO_setbuf PerlSIO_setlinebuf
++syn keyword xsMacro PerlSIO_setvbuf PerlSIO_stderr PerlSIO_stdin
++syn keyword xsMacro PerlSIO_stdout PerlSIO_stdoutf PerlSIO_tmpfile
++syn keyword xsMacro PerlSIO_ungetc PerlSIO_vprintf PerlSock_accept
++syn keyword xsMacro PerlSock_bind PerlSock_closesocket PerlSock_connect
++syn keyword xsMacro PerlSock_endhostent PerlSock_endnetent
++syn keyword xsMacro PerlSock_endprotoent PerlSock_endservent
++syn keyword xsMacro PerlSock_gethostbyaddr PerlSock_gethostbyname
++syn keyword xsMacro PerlSock_gethostent PerlSock_gethostname
++syn keyword xsMacro PerlSock_getnetbyaddr PerlSock_getnetbyname
++syn keyword xsMacro PerlSock_getnetent PerlSock_getpeername
++syn keyword xsMacro PerlSock_getprotobyname PerlSock_getprotobynumber
++syn keyword xsMacro PerlSock_getprotoent PerlSock_getservbyname
++syn keyword xsMacro PerlSock_getservbyport PerlSock_getservent
++syn keyword xsMacro PerlSock_getsockname PerlSock_getsockopt PerlSock_htonl
++syn keyword xsMacro PerlSock_htons PerlSock_inet_addr PerlSock_inet_ntoa
++syn keyword xsMacro PerlSock_listen PerlSock_ntohl PerlSock_ntohs
++syn keyword xsMacro PerlSock_recv PerlSock_recvfrom PerlSock_select
++syn keyword xsMacro PerlSock_send PerlSock_sendto PerlSock_sethostent
++syn keyword xsMacro PerlSock_setnetent PerlSock_setprotoent
++syn keyword xsMacro PerlSock_setservent PerlSock_setsockopt PerlSock_shutdown
++syn keyword xsMacro PerlSock_socket PerlSock_socketpair Perl_assert
++syn keyword xsMacro Perl_atan2 Perl_atof Perl_atof2 Perl_ceil Perl_cos
++syn keyword xsMacro Perl_debug_log Perl_error_log Perl_exp Perl_floor
++syn keyword xsMacro Perl_fmod Perl_fp_class Perl_fp_class_denorm
++syn keyword xsMacro Perl_fp_class_inf Perl_fp_class_nan Perl_fp_class_ndenorm
++syn keyword xsMacro Perl_fp_class_ninf Perl_fp_class_nnorm Perl_fp_class_norm
++syn keyword xsMacro Perl_fp_class_nzero Perl_fp_class_pdenorm
++syn keyword xsMacro Perl_fp_class_pinf Perl_fp_class_pnorm
++syn keyword xsMacro Perl_fp_class_pzero Perl_fp_class_qnan Perl_fp_class_snan
++syn keyword xsMacro Perl_fp_class_zero Perl_frexp Perl_isfinite Perl_isinf
++syn keyword xsMacro Perl_isnan Perl_log Perl_malloc_good_size Perl_modf
++syn keyword xsMacro Perl_pow Perl_pp_accept Perl_pp_aelemfast_lex
++syn keyword xsMacro Perl_pp_andassign Perl_pp_avalues Perl_pp_bind
++syn keyword xsMacro Perl_pp_bit_xor Perl_pp_chmod Perl_pp_chomp
++syn keyword xsMacro Perl_pp_connect Perl_pp_cos Perl_pp_custom
++syn keyword xsMacro Perl_pp_dbmclose Perl_pp_dofile Perl_pp_dor
++syn keyword xsMacro Perl_pp_dorassign Perl_pp_dump Perl_pp_egrent
++syn keyword xsMacro Perl_pp_enetent Perl_pp_eprotoent Perl_pp_epwent
++syn keyword xsMacro Perl_pp_eservent Perl_pp_exp Perl_pp_fcntl
++syn keyword xsMacro Perl_pp_ftatime Perl_pp_ftbinary Perl_pp_ftblk
++syn keyword xsMacro Perl_pp_ftchr Perl_pp_ftctime Perl_pp_ftdir
++syn keyword xsMacro Perl_pp_fteexec Perl_pp_fteowned Perl_pp_fteread
++syn keyword xsMacro Perl_pp_ftewrite Perl_pp_ftfile Perl_pp_ftmtime
++syn keyword xsMacro Perl_pp_ftpipe Perl_pp_ftrexec Perl_pp_ftrwrite
++syn keyword xsMacro Perl_pp_ftsgid Perl_pp_ftsize Perl_pp_ftsock
++syn keyword xsMacro Perl_pp_ftsuid Perl_pp_ftsvtx Perl_pp_ftzero
++syn keyword xsMacro Perl_pp_getpeername Perl_pp_getsockname Perl_pp_ggrgid
++syn keyword xsMacro Perl_pp_ggrnam Perl_pp_ghbyaddr Perl_pp_ghbyname
++syn keyword xsMacro Perl_pp_gnbyaddr Perl_pp_gnbyname Perl_pp_gpbyname
++syn keyword xsMacro Perl_pp_gpbynumber Perl_pp_gpwnam Perl_pp_gpwuid
++syn keyword xsMacro Perl_pp_gsbyname Perl_pp_gsbyport Perl_pp_gsockopt
++syn keyword xsMacro Perl_pp_hex Perl_pp_i_postdec Perl_pp_i_postinc
++syn keyword xsMacro Perl_pp_i_predec Perl_pp_i_preinc Perl_pp_keys
++syn keyword xsMacro Perl_pp_kill Perl_pp_lcfirst Perl_pp_lineseq
++syn keyword xsMacro Perl_pp_listen Perl_pp_localtime Perl_pp_log
++syn keyword xsMacro Perl_pp_lstat Perl_pp_mapstart Perl_pp_msgctl
++syn keyword xsMacro Perl_pp_msgget Perl_pp_msgrcv Perl_pp_msgsnd
++syn keyword xsMacro Perl_pp_orassign Perl_pp_padany Perl_pp_pop
++syn keyword xsMacro Perl_pp_postdec Perl_pp_predec Perl_pp_reach Perl_pp_read
++syn keyword xsMacro Perl_pp_recv Perl_pp_regcmaybe Perl_pp_rindex
++syn keyword xsMacro Perl_pp_rv2hv Perl_pp_rvalues Perl_pp_say Perl_pp_scalar
++syn keyword xsMacro Perl_pp_schomp Perl_pp_scope Perl_pp_seek Perl_pp_semop
++syn keyword xsMacro Perl_pp_send Perl_pp_sge Perl_pp_sgrent Perl_pp_sgt
++syn keyword xsMacro Perl_pp_shmctl Perl_pp_shmget Perl_pp_shmread
++syn keyword xsMacro Perl_pp_shutdown Perl_pp_slt Perl_pp_snetent
++syn keyword xsMacro Perl_pp_socket Perl_pp_sprotoent Perl_pp_spwent
++syn keyword xsMacro Perl_pp_sqrt Perl_pp_sservent Perl_pp_ssockopt
++syn keyword xsMacro Perl_pp_symlink Perl_pp_transr Perl_pp_unlink
++syn keyword xsMacro Perl_pp_utime Perl_pp_values Perl_safesysmalloc_size
++syn keyword xsMacro Perl_sharepvn Perl_signbit Perl_sin Perl_sqrt
++syn keyword xsMacro Perl_va_copy PmopSTASH PmopSTASHPV PmopSTASHPV_set
++syn keyword xsMacro PmopSTASH_flags PmopSTASH_flags_set PmopSTASH_free
++syn keyword xsMacro PmopSTASH_set Poison PoisonFree PoisonNew PoisonWith
++syn keyword xsMacro QR_PAT_MODS QUADKIND QUAD_IS_INT QUAD_IS_INT64_T
++syn keyword xsMacro QUAD_IS_LONG QUAD_IS_LONG_LONG QUAD_IS___INT64 QWLIST
++syn keyword xsMacro RANDBITS RANDOM_R_PROTO RD_NODATA READDIR64_R_PROTO
++syn keyword xsMacro READDIR_R_PROTO REENTRANT_PROTO_B_B REENTRANT_PROTO_B_BI
++syn keyword xsMacro REENTRANT_PROTO_B_BW REENTRANT_PROTO_B_CCD
++syn keyword xsMacro REENTRANT_PROTO_B_CCS REENTRANT_PROTO_B_IBI
++syn keyword xsMacro REENTRANT_PROTO_B_IBW REENTRANT_PROTO_B_SB
++syn keyword xsMacro REENTRANT_PROTO_B_SBI REENTRANT_PROTO_I_BI
++syn keyword xsMacro REENTRANT_PROTO_I_BW REENTRANT_PROTO_I_CCSBWR
++syn keyword xsMacro REENTRANT_PROTO_I_CCSD REENTRANT_PROTO_I_CII
++syn keyword xsMacro REENTRANT_PROTO_I_CIISD REENTRANT_PROTO_I_CSBI
++syn keyword xsMacro REENTRANT_PROTO_I_CSBIR REENTRANT_PROTO_I_CSBWR
++syn keyword xsMacro REENTRANT_PROTO_I_CSBWRE REENTRANT_PROTO_I_CSD
++syn keyword xsMacro REENTRANT_PROTO_I_CWISBWRE REENTRANT_PROTO_I_CWISD
++syn keyword xsMacro REENTRANT_PROTO_I_D REENTRANT_PROTO_I_H
++syn keyword xsMacro REENTRANT_PROTO_I_IBI REENTRANT_PROTO_I_IBW
++syn keyword xsMacro REENTRANT_PROTO_I_ICBI REENTRANT_PROTO_I_ICSBWR
++syn keyword xsMacro REENTRANT_PROTO_I_ICSD REENTRANT_PROTO_I_ID
++syn keyword xsMacro REENTRANT_PROTO_I_IISD REENTRANT_PROTO_I_ISBWR
++syn keyword xsMacro REENTRANT_PROTO_I_ISD REENTRANT_PROTO_I_LISBI
++syn keyword xsMacro REENTRANT_PROTO_I_LISD REENTRANT_PROTO_I_LS
++syn keyword xsMacro REENTRANT_PROTO_I_SB REENTRANT_PROTO_I_SBI
++syn keyword xsMacro REENTRANT_PROTO_I_SBIE REENTRANT_PROTO_I_SBIH
++syn keyword xsMacro REENTRANT_PROTO_I_SBIR REENTRANT_PROTO_I_SBWR
++syn keyword xsMacro REENTRANT_PROTO_I_SBWRE REENTRANT_PROTO_I_SD
++syn keyword xsMacro REENTRANT_PROTO_I_ST REENTRANT_PROTO_I_St
++syn keyword xsMacro REENTRANT_PROTO_I_TISD REENTRANT_PROTO_I_TS
++syn keyword xsMacro REENTRANT_PROTO_I_TSBI REENTRANT_PROTO_I_TSBIR
++syn keyword xsMacro REENTRANT_PROTO_I_TSBWR REENTRANT_PROTO_I_TSR
++syn keyword xsMacro REENTRANT_PROTO_I_TsISBWRE REENTRANT_PROTO_I_UISBWRE
++syn keyword xsMacro REENTRANT_PROTO_I_iS REENTRANT_PROTO_I_lS
++syn keyword xsMacro REENTRANT_PROTO_I_uISBWRE REENTRANT_PROTO_S_CBI
++syn keyword xsMacro REENTRANT_PROTO_S_CCSBI REENTRANT_PROTO_S_CIISBIE
++syn keyword xsMacro REENTRANT_PROTO_S_CSBI REENTRANT_PROTO_S_CSBIE
++syn keyword xsMacro REENTRANT_PROTO_S_CWISBIE REENTRANT_PROTO_S_CWISBWIE
++syn keyword xsMacro REENTRANT_PROTO_S_ICSBI REENTRANT_PROTO_S_ISBI
++syn keyword xsMacro REENTRANT_PROTO_S_LISBI REENTRANT_PROTO_S_SBI
++syn keyword xsMacro REENTRANT_PROTO_S_SBIE REENTRANT_PROTO_S_SBW
++syn keyword xsMacro REENTRANT_PROTO_S_TISBI REENTRANT_PROTO_S_TSBI
++syn keyword xsMacro REENTRANT_PROTO_S_TSBIE REENTRANT_PROTO_S_TWISBIE
++syn keyword xsMacro REENTRANT_PROTO_V_D REENTRANT_PROTO_V_H
++syn keyword xsMacro REENTRANT_PROTO_V_ID REENTR_H REENTR_MEMZERO REF
++syn keyword xsMacro REFCOUNTED_HE_EXISTS REFCOUNTED_HE_KEY_UTF8 REFF REFFA
++syn keyword xsMacro REFFL REFFU REFGEN REF_HE_KEY REGMATCH_STATE_MAX
++syn keyword xsMacro REGNODE_MAX REGNODE_SIMPLE REGNODE_VARIES REG_ANY
++syn keyword xsMacro REG_INFTY REG_MAGIC REG_SEEN_CANY REG_SEEN_CUTGROUP
++syn keyword xsMacro REG_SEEN_EVAL REG_SEEN_EXACTF_SHARP_S REG_SEEN_GPOS
++syn keyword xsMacro REG_SEEN_LOOKBEHIND REG_SEEN_RECURSE
++syn keyword xsMacro REG_SEEN_RUN_ON_COMMENT REG_SEEN_SANY REG_SEEN_VERBARG
++syn keyword xsMacro REG_SEEN_ZERO_LEN REG_TOP_LEVEL_BRANCHES RELOP RENUM
++syn keyword xsMacro REQUIRE RESTORE_ERRNO RESTORE_NUMERIC_LOCAL
++syn keyword xsMacro RESTORE_NUMERIC_STANDARD RETPUSHNO RETPUSHUNDEF
++syn keyword xsMacro RETPUSHYES RETSETNO RETSETUNDEF RETSETYES RETURN RETURNOP
++syn keyword xsMacro RETURNX RETURN_PROBE REXEC_CHECKED REXEC_COPY_STR
++syn keyword xsMacro REXEC_IGNOREPOS REXEC_NOT_FIRST REXEC_SCREAM
++syn keyword xsMacro RE_DEBUG_COMPILE_DUMP RE_DEBUG_COMPILE_FLAGS
++syn keyword xsMacro RE_DEBUG_COMPILE_MASK RE_DEBUG_COMPILE_OPTIMISE
++syn keyword xsMacro RE_DEBUG_COMPILE_PARSE RE_DEBUG_COMPILE_TRIE
++syn keyword xsMacro RE_DEBUG_EXECUTE_INTUIT RE_DEBUG_EXECUTE_MASK
++syn keyword xsMacro RE_DEBUG_EXECUTE_MATCH RE_DEBUG_EXECUTE_TRIE
++syn keyword xsMacro RE_DEBUG_EXTRA_BUFFERS RE_DEBUG_EXTRA_GPOS
++syn keyword xsMacro RE_DEBUG_EXTRA_MASK RE_DEBUG_EXTRA_OFFDEBUG
++syn keyword xsMacro RE_DEBUG_EXTRA_OFFSETS RE_DEBUG_EXTRA_OPTIMISE
++syn keyword xsMacro RE_DEBUG_EXTRA_STACK RE_DEBUG_EXTRA_STATE
++syn keyword xsMacro RE_DEBUG_EXTRA_TRIE RE_DEBUG_FLAG RE_DEBUG_FLAGS
++syn keyword xsMacro RE_PV_COLOR_DECL RE_PV_QUOTED_DECL RE_SV_DUMPLEN
++syn keyword xsMacro RE_SV_ESCAPE RE_SV_TAIL RE_TRACK_PATTERN_OFFSETS
++syn keyword xsMacro RE_TRIE_MAXBUF_INIT RE_TRIE_MAXBUF_NAME RMS_DIR RMS_FAC
++syn keyword xsMacro RMS_FEX RMS_FNF RMS_IFI RMS_ISI RMS_PRV RUNOPS_DEFAULT
++syn keyword xsMacro RV2CVOPCV_MARK_EARLY RV2CVOPCV_RETURN_NAME_GV
++syn keyword xsMacro RX_ANCHORED_SUBSTR RX_ANCHORED_UTF8 RX_BUFF_IDX_FULLMATCH
++syn keyword xsMacro RX_BUFF_IDX_POSTMATCH RX_BUFF_IDX_PREMATCH
++syn keyword xsMacro RX_CHECK_SUBSTR RX_ENGINE RX_EXTFLAGS RX_FLOAT_SUBSTR
++syn keyword xsMacro RX_FLOAT_UTF8 RX_GOFS RX_HAS_CUTGROUP RX_LASTCLOSEPAREN
++syn keyword xsMacro RX_LASTPAREN RX_MATCH_COPIED RX_MATCH_COPIED_off
++syn keyword xsMacro RX_MATCH_COPIED_on RX_MATCH_COPIED_set RX_MATCH_COPY_FREE
++syn keyword xsMacro RX_MATCH_TAINTED RX_MATCH_TAINTED_off RX_MATCH_TAINTED_on
++syn keyword xsMacro RX_MATCH_TAINTED_set RX_MATCH_UTF8 RX_MATCH_UTF8_off
++syn keyword xsMacro RX_MATCH_UTF8_on RX_MATCH_UTF8_set RX_MINLEN RX_MINLENRET
++syn keyword xsMacro RX_NPARENS RX_OFFS RX_PRECOMP RX_PRECOMP_const RX_PRELEN
++syn keyword xsMacro RX_REFCNT RX_SAVED_COPY RX_SEEN_EVALS RX_SUBBEG RX_SUBLEN
++syn keyword xsMacro RX_UTF8 RX_WRAPLEN RX_WRAPPED RX_WRAPPED_const RXapif_ALL
++syn keyword xsMacro RXapif_CLEAR RXapif_DELETE RXapif_EXISTS RXapif_FETCH
++syn keyword xsMacro RXapif_FIRSTKEY RXapif_NEXTKEY RXapif_ONE RXapif_REGNAME
++syn keyword xsMacro RXapif_REGNAMES RXapif_REGNAMES_COUNT RXapif_SCALAR
++syn keyword xsMacro RXapif_STORE RXf_ANCH RXf_ANCH_BOL RXf_ANCH_GPOS
++syn keyword xsMacro RXf_ANCH_MBOL RXf_ANCH_SBOL RXf_ANCH_SINGLE
++syn keyword xsMacro RXf_BASE_SHIFT RXf_CANY_SEEN RXf_CHECK_ALL RXf_COPY_DONE
++syn keyword xsMacro RXf_EVAL_SEEN RXf_GPOS_CHECK RXf_GPOS_FLOAT RXf_GPOS_SEEN
++syn keyword xsMacro RXf_INTUIT_TAIL RXf_LOOKBEHIND_SEEN RXf_MATCH_UTF8
++syn keyword xsMacro RXf_NOSCAN RXf_NULL RXf_PMf_CHARSET RXf_PMf_COMPILETIME
++syn keyword xsMacro RXf_PMf_EXTENDED RXf_PMf_FOLD RXf_PMf_KEEPCOPY
++syn keyword xsMacro RXf_PMf_MULTILINE RXf_PMf_SINGLELINE RXf_PMf_STD_PMMOD
++syn keyword xsMacro RXf_PMf_STD_PMMOD_SHIFT RXf_SKIPWHITE RXf_SPLIT
++syn keyword xsMacro RXf_START_ONLY RXf_TAINTED RXf_TAINTED_SEEN
++syn keyword xsMacro RXf_USE_INTUIT RXf_USE_INTUIT_ML RXf_USE_INTUIT_NOML
++syn keyword xsMacro RXf_WHITE RXi_GET RXi_GET_DECL RXi_SET RXp_EXTFLAGS
++syn keyword xsMacro RXp_MATCH_COPIED RXp_MATCH_COPIED_off RXp_MATCH_COPIED_on
++syn keyword xsMacro RXp_MATCH_TAINTED RXp_MATCH_UTF8 RXp_PAREN_NAMES
++syn keyword xsMacro ReREFCNT_dec ReREFCNT_inc Renew Renewc RsPARA RsRECORD
++syn keyword xsMacro RsSIMPLE RsSNARF SAFE_TRIE_NODENUM SANY SAVEADELETE
++syn keyword xsMacro SAVEBOOL SAVECLEARSV SAVECOMPILEWARNINGS SAVECOMPPAD
++syn keyword xsMacro SAVECOPFILE SAVECOPFILE_FREE SAVECOPLINE SAVECOPSTASH
++syn keyword xsMacro SAVECOPSTASH_FREE SAVEDELETE SAVEDESTRUCTOR
++syn keyword xsMacro SAVEDESTRUCTOR_X SAVEFREECOPHH SAVEFREEOP SAVEFREEPV
++syn keyword xsMacro SAVEFREESV SAVEGENERICPV SAVEGENERICSV SAVEHDELETE
++syn keyword xsMacro SAVEHINTS SAVEI16 SAVEI32 SAVEI8 SAVEINT SAVEIV SAVELONG
++syn keyword xsMacro SAVEMORTALIZESV SAVEOP SAVEPADSVANDMORTALIZE SAVEPARSER
++syn keyword xsMacro SAVEPPTR SAVESETSVFLAGS SAVESHAREDPV SAVESPTR
++syn keyword xsMacro SAVESTACK_ALLOC_FOR_RE_SAVE_STATE SAVESTACK_CXPOS
++syn keyword xsMacro SAVESTACK_POS SAVESWITCHSTACK SAVETMPS SAVEVPTR
++syn keyword xsMacro SAVE_DEFSV SAVE_ERRNO SAVE_MASK SAVE_TIGHT_SHIFT
++syn keyword xsMacro SAVEf_KEEPOLDELEM SAVEf_SETMAGIC SAVEt_ADELETE
++syn keyword xsMacro SAVEt_AELEM SAVEt_ALLOC SAVEt_APTR SAVEt_AV SAVEt_BOOL
++syn keyword xsMacro SAVEt_CLEARSV SAVEt_COMPILE_WARNINGS SAVEt_COMPPAD
++syn keyword xsMacro SAVEt_DELETE SAVEt_DESTRUCTOR SAVEt_DESTRUCTOR_X
++syn keyword xsMacro SAVEt_FREECOPHH SAVEt_FREEOP SAVEt_FREEPV SAVEt_FREESV
++syn keyword xsMacro SAVEt_GENERIC_PVREF SAVEt_GENERIC_SVREF SAVEt_GP
++syn keyword xsMacro SAVEt_GVSV SAVEt_HELEM SAVEt_HINTS SAVEt_HPTR SAVEt_HV
++syn keyword xsMacro SAVEt_I16 SAVEt_I32 SAVEt_I32_SMALL SAVEt_I8 SAVEt_INT
++syn keyword xsMacro SAVEt_INT_SMALL SAVEt_ITEM SAVEt_IV SAVEt_LONG
++syn keyword xsMacro SAVEt_MORTALIZESV SAVEt_NSTAB SAVEt_OP
++syn keyword xsMacro SAVEt_PADSV_AND_MORTALIZE SAVEt_PARSER SAVEt_PPTR
++syn keyword xsMacro SAVEt_REGCONTEXT SAVEt_RE_STATE SAVEt_SAVESWITCHSTACK
++syn keyword xsMacro SAVEt_SET_SVFLAGS SAVEt_SHARED_PVREF SAVEt_SPTR
++syn keyword xsMacro SAVEt_STACK_CXPOS SAVEt_STACK_POS SAVEt_SV SAVEt_SVREF
++syn keyword xsMacro SAVEt_VPTR SBOL SCAN_DEF SCAN_REPL SCAN_TR SCHEDULE
++syn keyword xsMacro SCHED_YIELD SCOPE_SAVES_SIGNAL_MASK SEEK_CUR SEEK_END
++syn keyword xsMacro SEEK_SET SELECT_MIN_BITS SEOL SETERRNO SETGRENT_R_PROTO
++syn keyword xsMacro SETHOSTENT_R_PROTO SETLOCALE_R_PROTO SETNETENT_R_PROTO
++syn keyword xsMacro SETPROTOENT_R_PROTO SETPWENT_R_PROTO SETSERVENT_R_PROTO
++syn keyword xsMacro SETTARG SET_MARK_OFFSET SET_NUMERIC_LOCAL
++syn keyword xsMacro SET_NUMERIC_STANDARD SET_THR SET_THREAD_SELF SETi SETn
++syn keyword xsMacro SETp SETs SETsv SETsvUN SETu SHARP_S_SKIP SHIFTOP
++syn keyword xsMacro SHORTSIZE SH_PATH SIGABRT SIGILL SIG_NAME SIG_NUM
++syn keyword xsMacro SIG_SIZE SINGLE_PAT_MOD SITEARCH SITEARCH_EXP SITELIB
++syn keyword xsMacro SITELIB_EXP SITELIB_STEM SIZE_ALIGN SIZE_ONLY SKIP
++syn keyword xsMacro SKIP_next SKIP_next_fail SLOPPYDIVIDE SOCKET_OPEN_MODE
++syn keyword xsMacro SPACE SPACEA SPACEL SPACEU SPAGAIN SPRINTF_RETURNS_STRLEN
++syn keyword xsMacro SRAND48_R_PROTO SRANDOM_R_PROTO SSCHECK SSGROW SSNEW
++syn keyword xsMacro SSNEWa SSNEWat SSNEWt SSPOPBOOL SSPOPDPTR SSPOPDXPTR
++syn keyword xsMacro SSPOPINT SSPOPIV SSPOPLONG SSPOPPTR SSPOPUV SSPTR SSPTRt
++syn keyword xsMacro SSPUSHBOOL SSPUSHDPTR SSPUSHDXPTR SSPUSHINT SSPUSHIV
++syn keyword xsMacro SSPUSHLONG SSPUSHPTR SSPUSHUV SS_ACCVIO SS_DEVOFFLINE
++syn keyword xsMacro SS_IVCHAN SS_NORMAL ST STANDARD_C STAR STARTPERL
++syn keyword xsMacro START_EXTERN_C START_MY_CXT STATIC STATUS_ALL_FAILURE
++syn keyword xsMacro STATUS_ALL_SUCCESS STATUS_CURRENT STATUS_EXIT
++syn keyword xsMacro STATUS_EXIT_SET STATUS_NATIVE STATUS_NATIVE_CHILD_SET
++syn keyword xsMacro STATUS_UNIX STATUS_UNIX_EXIT_SET STATUS_UNIX_SET STDCHAR
++syn keyword xsMacro STDIO_PTR_LVALUE STDIO_PTR_LVAL_SETS_CNT
++syn keyword xsMacro STDIO_STREAM_ARRAY STD_PAT_MODS STD_PMMOD_FLAGS_CLEAR
++syn keyword xsMacro STMT_END STMT_START STORE_NUMERIC_LOCAL_SET_STANDARD
++syn keyword xsMacro STORE_NUMERIC_STANDARD_SET_LOCAL STRERROR_R_PROTO STRING
++syn keyword xsMacro STRINGIFY STRUCT_OFFSET STRUCT_SV STR_LEN STR_SZ
++syn keyword xsMacro STR_WITH_LEN ST_INO_SIGN ST_INO_SIZE SUB
++syn keyword xsMacro SUBST_TAINT_BOOLRET SUBST_TAINT_PAT SUBST_TAINT_REPL
++syn keyword xsMacro SUBST_TAINT_RETAINT SUBST_TAINT_STR SUBVERSION SUCCEED
++syn keyword xsMacro SUSPEND SVTYPEMASK SV_CATBYTES SV_CATUTF8
++syn keyword xsMacro SV_CHECK_THINKFIRST SV_CHECK_THINKFIRST_COW_DROP
++syn keyword xsMacro SV_CONST_RETURN SV_COW_DROP_PV SV_COW_OTHER_PVS
++syn keyword xsMacro SV_COW_SHARED_HASH_KEYS SV_DO_COW_SVSETSV
++syn keyword xsMacro SV_FORCE_UTF8_UPGRADE SV_GMAGIC SV_HAS_TRAILING_NUL
++syn keyword xsMacro SV_IMMEDIATE_UNREF SV_MUTABLE_RETURN SV_NOSTEAL
++syn keyword xsMacro SV_SAVED_COPY SV_SKIP_OVERLOAD SV_SMAGIC
++syn keyword xsMacro SV_UNDEF_RETURNS_NULL SV_UTF8_NO_ENCODING SVrepl_EVAL
++syn keyword xsMacro SVt_MASK SWITCHSTACK SYMBIAN SYSTEM_GMTIME_MAX
++syn keyword xsMacro SYSTEM_GMTIME_MIN SYSTEM_LOCALTIME_MAX
++syn keyword xsMacro SYSTEM_LOCALTIME_MIN S_IEXEC S_IFIFO S_IFMT S_IREAD
++syn keyword xsMacro S_IRGRP S_IROTH S_IRUSR S_IRWXG S_IRWXO S_IRWXU S_ISBLK
++syn keyword xsMacro S_ISCHR S_ISDIR S_ISFIFO S_ISGID S_ISLNK S_ISREG S_ISSOCK
++syn keyword xsMacro S_ISUID S_IWGRP S_IWOTH S_IWRITE S_IWUSR S_IXGRP S_IXOTH
++syn keyword xsMacro S_IXUSR S_PAT_MODS Safefree Semctl Sigjmp_buf Siglongjmp
++syn keyword xsMacro Sigsetjmp Size_t_size StGiFy StashHANDLER Stat Strerror
++syn keyword xsMacro Strtol Strtoul StructCopy SvAMAGIC SvAMAGIC_off
++syn keyword xsMacro SvAMAGIC_on SvANY SvCANEXISTDELETE SvCOMPILED
++syn keyword xsMacro SvCOMPILED_off SvCOMPILED_on SvCUR SvCUR_set
++syn keyword xsMacro SvDESTROYABLE SvEND SvEND_set SvENDx SvEVALED
++syn keyword xsMacro SvEVALED_off SvEVALED_on SvFAKE SvFAKE_off SvFAKE_on
++syn keyword xsMacro SvFLAGS SvGAMAGIC SvGETMAGIC SvGMAGICAL SvGMAGICAL_off
++syn keyword xsMacro SvGMAGICAL_on SvGROW SvGROW_mutable SvIMMORTAL SvIOK
++syn keyword xsMacro SvIOK_UV SvIOK_notUV SvIOK_off SvIOK_on SvIOK_only
++syn keyword xsMacro SvIOK_only_UV SvIOKp SvIOKp_on SvIS_FREED SvIV SvIVX
++syn keyword xsMacro SvIVXx SvIV_nomg SvIV_please SvIV_please_nomg SvIV_set
++syn keyword xsMacro SvIVx SvIsCOW SvIsCOW_normal SvIsCOW_shared_hash SvIsUV
++syn keyword xsMacro SvIsUV_off SvIsUV_on SvLEN SvLEN_set SvLENx SvLOCK
++syn keyword xsMacro SvMAGIC SvMAGICAL SvMAGICAL_off SvMAGICAL_on SvMAGIC_set
++syn keyword xsMacro SvNIOK SvNIOK_off SvNIOKp SvNOK SvNOK_off SvNOK_on
++syn keyword xsMacro SvNOK_only SvNOKp SvNOKp_on SvNV SvNVX SvNVXx SvNV_nomg
++syn keyword xsMacro SvNV_set SvNVx SvOBJECT SvOBJECT_off SvOBJECT_on SvOK
++syn keyword xsMacro SvOK_off SvOK_off_exc_UV SvOKp SvOOK SvOOK_off
++syn keyword xsMacro SvOOK_offset SvOOK_on SvOURSTASH SvOURSTASH_set SvPADMY
++syn keyword xsMacro SvPADMY_on SvPADSTALE SvPADSTALE_off SvPADSTALE_on
++syn keyword xsMacro SvPADTMP SvPADTMP_off SvPADTMP_on SvPAD_OUR SvPAD_OUR_on
++syn keyword xsMacro SvPAD_STATE SvPAD_STATE_on SvPAD_TYPED SvPAD_TYPED_on
++syn keyword xsMacro SvPCS_IMPORTED SvPCS_IMPORTED_off SvPCS_IMPORTED_on
++syn keyword xsMacro SvPEEK SvPOK SvPOK_off SvPOK_on SvPOK_only
++syn keyword xsMacro SvPOK_only_UTF8 SvPOKp SvPOKp_on SvPV SvPVX SvPVX_const
++syn keyword xsMacro SvPVX_mutable SvPVXx SvPV_const SvPV_flags
++syn keyword xsMacro SvPV_flags_const SvPV_flags_const_nolen
++syn keyword xsMacro SvPV_flags_mutable SvPV_force SvPV_force_flags
++syn keyword xsMacro SvPV_force_flags_mutable SvPV_force_flags_nolen
++syn keyword xsMacro SvPV_force_mutable SvPV_force_nolen SvPV_force_nomg
++syn keyword xsMacro SvPV_force_nomg_nolen SvPV_free SvPV_mutable SvPV_nolen
++syn keyword xsMacro SvPV_nolen_const SvPV_nomg SvPV_nomg_const
++syn keyword xsMacro SvPV_nomg_const_nolen SvPV_nomg_nolen SvPV_renew SvPV_set
++syn keyword xsMacro SvPV_shrink_to_cur SvPVbyte SvPVbyte_force SvPVbyte_nolen
++syn keyword xsMacro SvPVbytex SvPVbytex_force SvPVbytex_nolen SvPVutf8
++syn keyword xsMacro SvPVutf8_force SvPVutf8_nolen SvPVutf8x SvPVutf8x_force
++syn keyword xsMacro SvPVx SvPVx_const SvPVx_force SvPVx_nolen
++syn keyword xsMacro SvPVx_nolen_const SvREADONLY SvREADONLY_off SvREADONLY_on
++syn keyword xsMacro SvREFCNT SvREFCNT_dec SvREFCNT_inc SvREFCNT_inc_NN
++syn keyword xsMacro SvREFCNT_inc_simple SvREFCNT_inc_simple_NN
++syn keyword xsMacro SvREFCNT_inc_simple_void SvREFCNT_inc_simple_void_NN
++syn keyword xsMacro SvREFCNT_inc_void SvREFCNT_inc_void_NN SvRELEASE_IVX
++syn keyword xsMacro SvRELEASE_IVX_ SvRMAGICAL SvRMAGICAL_off SvRMAGICAL_on
++syn keyword xsMacro SvROK SvROK_off SvROK_on SvRV SvRV_const SvRV_set SvRVx
++syn keyword xsMacro SvRX SvRXOK SvSCREAM SvSCREAM_off SvSCREAM_on SvSETMAGIC
++syn keyword xsMacro SvSHARE SvSHARED_HASH SvSHARED_HEK_FROM_PV SvSMAGICAL
++syn keyword xsMacro SvSMAGICAL_off SvSMAGICAL_on SvSTASH SvSTASH_set
++syn keyword xsMacro SvSetMagicSV SvSetMagicSV_nosteal SvSetSV SvSetSV_and
++syn keyword xsMacro SvSetSV_nosteal SvSetSV_nosteal_and SvTAIL SvTAIL_off
++syn keyword xsMacro SvTAIL_on SvTAINT SvTAINTED SvTAINTED_off SvTAINTED_on
++syn keyword xsMacro SvTEMP SvTEMP_off SvTEMP_on SvTHINKFIRST SvTIED_mg
++syn keyword xsMacro SvTIED_obj SvTRUE SvTRUE_nomg SvTRUEx SvTYPE SvUNLOCK
++syn keyword xsMacro SvUOK SvUPGRADE SvUTF8 SvUTF8_off SvUTF8_on SvUV SvUVX
++syn keyword xsMacro SvUVXx SvUV_nomg SvUV_set SvUVx SvVALID SvVALID_off
++syn keyword xsMacro SvVALID_on SvVOK SvVSTRING_mg SvWEAKREF SvWEAKREF_off
++syn keyword xsMacro SvWEAKREF_on Sv_Grow TAIL TAINT TAINT_ENV TAINT_IF
++syn keyword xsMacro TAINT_NOT TAINT_PROPER THING THR THREAD_CREATE
++syn keyword xsMacro THREAD_CREATE_NEEDS_STACK THREAD_POST_CREATE
++syn keyword xsMacro THREAD_RET_CAST THREAD_RET_TYPE
++syn keyword xsMacro TIED_METHOD_ARGUMENTS_ON_STACK
++syn keyword xsMacro TIED_METHOD_MORTALIZE_NOT_NEEDED TIED_METHOD_SAY
++syn keyword xsMacro TIME64_CONFIG_H TIME64_H TM TMPNAM_R_PROTO TOO_LATE_FOR
++syn keyword xsMacro TOO_LATE_FOR_ TOPBLOCK TOPMARK TOPi TOPl TOPm1s TOPn TOPp
++syn keyword xsMacro TOPp1s TOPpx TOPq TOPs TOPu TOPul TOPuq TRIE TRIEC
++syn keyword xsMacro TRIE_BITMAP TRIE_BITMAP_BYTE TRIE_BITMAP_CLEAR
++syn keyword xsMacro TRIE_BITMAP_SET TRIE_BITMAP_TEST TRIE_CHARCOUNT
++syn keyword xsMacro TRIE_NODEIDX TRIE_NODENUM TRIE_WORDS_OFFSET TRIE_next
++syn keyword xsMacro TRIE_next_fail TTYNAME_R_PROTO TWO_BYTE_UTF8_TO_UNI
++syn keyword xsMacro TYPE_CHARS TYPE_DIGITS Timeval U16SIZE U16TYPE U16_CONST
++syn keyword xsMacro U16_MAX U16_MIN U32SIZE U32TYPE U32_ALIGNMENT_REQUIRED
++syn keyword xsMacro U32_CONST U32_MAX U32_MAX_P1 U32_MAX_P1_HALF U32_MIN
++syn keyword xsMacro U64SIZE U64TYPE U64_CONST U8SIZE U8TYPE U8_MAX U8_MIN
++syn keyword xsMacro UCHARAT UINT32_MIN UINT64_C UINT64_MIN UMINUS UNDERBAR
++syn keyword xsMacro UNICODE_ALLOW_ANY UNICODE_ALLOW_SUPER
++syn keyword xsMacro UNICODE_ALLOW_SURROGATE UNICODE_BYTE_ORDER_MARK
++syn keyword xsMacro UNICODE_DISALLOW_FE_FF
++syn keyword xsMacro UNICODE_DISALLOW_ILLEGAL_INTERCHANGE
++syn keyword xsMacro UNICODE_DISALLOW_NONCHAR UNICODE_DISALLOW_SUPER
++syn keyword xsMacro UNICODE_DISALLOW_SURROGATE
++syn keyword xsMacro UNICODE_GREEK_CAPITAL_LETTER_SIGMA
++syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_FINAL_SIGMA
++syn keyword xsMacro UNICODE_GREEK_SMALL_LETTER_SIGMA
++syn keyword xsMacro UNICODE_IS_BYTE_ORDER_MARK UNICODE_IS_FE_FF
++syn keyword xsMacro UNICODE_IS_NONCHAR UNICODE_IS_REPLACEMENT
++syn keyword xsMacro UNICODE_IS_SUPER UNICODE_IS_SURROGATE UNICODE_LINE_SEPA_0
++syn keyword xsMacro UNICODE_LINE_SEPA_1 UNICODE_LINE_SEPA_2
++syn keyword xsMacro UNICODE_PARA_SEPA_0 UNICODE_PARA_SEPA_1
++syn keyword xsMacro UNICODE_PARA_SEPA_2 UNICODE_PAT_MOD UNICODE_PAT_MODS
++syn keyword xsMacro UNICODE_REPLACEMENT UNICODE_SURROGATE_FIRST
++syn keyword xsMacro UNICODE_SURROGATE_LAST UNICODE_WARN_FE_FF
++syn keyword xsMacro UNICODE_WARN_ILLEGAL_INTERCHANGE UNICODE_WARN_NONCHAR
++syn keyword xsMacro UNICODE_WARN_SUPER UNICODE_WARN_SURROGATE UNIOP UNIOPSUB
++syn keyword xsMacro UNISKIP UNI_DISPLAY_BACKSLASH UNI_DISPLAY_ISPRINT
++syn keyword xsMacro UNI_DISPLAY_QQ UNI_DISPLAY_REGEX UNI_IS_INVARIANT
++syn keyword xsMacro UNI_TO_NATIVE UNLESS UNLESSM UNLIKELY UNLINK
++syn keyword xsMacro UNLOCK_DOLLARZERO_MUTEX UNTIL USE USE_64_BIT_ALL
++syn keyword xsMacro USE_64_BIT_INT USE_64_BIT_RAWIO USE_64_BIT_STDIO
++syn keyword xsMacro USE_BSDPGRP USE_DYNAMIC_LOADING USE_ENVIRON_ARRAY
++syn keyword xsMacro USE_HASH_SEED USE_HEAP_INSTEAD_OF_STACK USE_LARGE_FILES
++syn keyword xsMacro USE_LEFT USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE
++syn keyword xsMacro USE_LOCALE_NUMERIC USE_PERLIO USE_REENTRANT_API
++syn keyword xsMacro USE_SEMCTL_SEMID_DS USE_SEMCTL_SEMUN USE_STAT_BLOCKS
++syn keyword xsMacro USE_STAT_RDEV USE_STDIO USE_STDIO_BASE USE_STDIO_PTR
++syn keyword xsMacro USE_STRUCT_COPY USE_SYSTEM_GMTIME USE_SYSTEM_LOCALTIME
++syn keyword xsMacro USE_THREADS USE_TM64 USE_UTF8_IN_NAMES UTF8SKIP
++syn keyword xsMacro UTF8_ACCUMULATE UTF8_ALLOW_ANY UTF8_ALLOW_ANYUV
++syn keyword xsMacro UTF8_ALLOW_CONTINUATION UTF8_ALLOW_DEFAULT
++syn keyword xsMacro UTF8_ALLOW_EMPTY UTF8_ALLOW_FFFF UTF8_ALLOW_LONG
++syn keyword xsMacro UTF8_ALLOW_NON_CONTINUATION UTF8_ALLOW_SHORT
++syn keyword xsMacro UTF8_ALLOW_SURROGATE UTF8_CHECK_ONLY UTF8_DISALLOW_FE_FF
++syn keyword xsMacro UTF8_DISALLOW_ILLEGAL_INTERCHANGE UTF8_DISALLOW_NONCHAR
++syn keyword xsMacro UTF8_DISALLOW_SUPER UTF8_DISALLOW_SURROGATE
++syn keyword xsMacro UTF8_EIGHT_BIT_HI UTF8_EIGHT_BIT_LO
++syn keyword xsMacro UTF8_FIRST_PROBLEMATIC_CODE_POINT_FIRST_BYTE
++syn keyword xsMacro UTF8_IS_CONTINUATION UTF8_IS_CONTINUED
++syn keyword xsMacro UTF8_IS_DOWNGRADEABLE_START UTF8_IS_INVARIANT
++syn keyword xsMacro UTF8_IS_NONCHAR_
++syn keyword xsMacro UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC
++syn keyword xsMacro UTF8_IS_START UTF8_IS_SUPER UTF8_IS_SURROGATE
++syn keyword xsMacro UTF8_MAXBYTES UTF8_MAXBYTES_CASE UTF8_MAXLEN
++syn keyword xsMacro UTF8_MAX_FOLD_CHAR_EXPAND UTF8_QUAD_MAX UTF8_TWO_BYTE_HI
++syn keyword xsMacro UTF8_TWO_BYTE_HI_nocast UTF8_TWO_BYTE_LO
++syn keyword xsMacro UTF8_TWO_BYTE_LO_nocast UTF8_WARN_FE_FF
++syn keyword xsMacro UTF8_WARN_ILLEGAL_INTERCHANGE UTF8_WARN_NONCHAR
++syn keyword xsMacro UTF8_WARN_SUPER UTF8_WARN_SURROGATE
++syn keyword xsMacro UTF_ACCUMULATION_OVERFLOW_MASK UTF_ACCUMULATION_SHIFT
++syn keyword xsMacro UTF_CONTINUATION_MARK UTF_CONTINUATION_MASK
++syn keyword xsMacro UTF_START_MARK UTF_START_MASK UTF_TO_NATIVE UVSIZE UVTYPE
++syn keyword xsMacro UVXf UV_DIG UV_MAX UV_MAX_P1 UV_MAX_P1_HALF UV_MIN UVf
++syn keyword xsMacro U_32 U_I U_L U_S U_V Uid_t_f Uid_t_sign Uid_t_size
++syn keyword xsMacro VAL_EAGAIN VAL_O_NONBLOCK VDf VERB VERTWS VOIDFLAGS
++syn keyword xsMacro VOIDUSED VOL VTBL_amagic VTBL_amagicelem VTBL_arylen
++syn keyword xsMacro VTBL_bm VTBL_collxfrm VTBL_dbline VTBL_defelem VTBL_env
++syn keyword xsMacro VTBL_envelem VTBL_fm VTBL_glob VTBL_isa VTBL_isaelem
++syn keyword xsMacro VTBL_mglob VTBL_nkeys VTBL_pack VTBL_packelem VTBL_pos
++syn keyword xsMacro VTBL_regdata VTBL_regdatum VTBL_regexp VTBL_sigelem
++syn keyword xsMacro VTBL_substr VTBL_sv VTBL_taint VTBL_uvar VTBL_vec
++syn keyword xsMacro WARN_ALL WARN_ALLstring WARN_AMBIGUOUS WARN_BAREWORD
++syn keyword xsMacro WARN_CLOSED WARN_CLOSURE WARN_DEBUGGING WARN_DEPRECATED
++syn keyword xsMacro WARN_DIGIT WARN_EXEC WARN_EXITING WARN_GLOB
++syn keyword xsMacro WARN_ILLEGALPROTO WARN_IMPRECISION WARN_INPLACE
++syn keyword xsMacro WARN_INTERNAL WARN_IO WARN_LAYER WARN_MALLOC WARN_MISC
++syn keyword xsMacro WARN_NEWLINE WARN_NONCHAR WARN_NONEstring
++syn keyword xsMacro WARN_NON_UNICODE WARN_NUMERIC WARN_ONCE WARN_OVERFLOW
++syn keyword xsMacro WARN_PACK WARN_PARENTHESIS WARN_PIPE WARN_PORTABLE
++syn keyword xsMacro WARN_PRECEDENCE WARN_PRINTF WARN_PROTOTYPE WARN_QW
++syn keyword xsMacro WARN_RECURSION WARN_REDEFINE WARN_REGEXP WARN_RESERVED
++syn keyword xsMacro WARN_SEMICOLON WARN_SEVERE WARN_SIGNAL WARN_SUBSTR
++syn keyword xsMacro WARN_SURROGATE WARN_SYNTAX WARN_TAINT WARN_THREADS
++syn keyword xsMacro WARN_UNINITIALIZED WARN_UNOPENED WARN_UNPACK WARN_UNTIE
++syn keyword xsMacro WARN_UTF8 WARN_VOID WARNshift WARNsize WEXITSTATUS WHEN
++syn keyword xsMacro WHILE WHILEM WHILEM_A_max WHILEM_A_max_fail WHILEM_A_min
++syn keyword xsMacro WHILEM_A_min_fail WHILEM_A_pre WHILEM_A_pre_fail
++syn keyword xsMacro WHILEM_B_max WHILEM_B_max_fail WHILEM_B_min
++syn keyword xsMacro WHILEM_B_min_fail WIDEST_UTYPE WIFEXITED WIFSIGNALED
++syn keyword xsMacro WIFSTOPPED WIN32SCK_IS_STDSCK WNOHANG WORD WSTOPSIG
++syn keyword xsMacro WTERMSIG WUNTRACED XHvTOTALKEYS XOPd_xop_class
++syn keyword xsMacro XOPd_xop_desc XOPd_xop_name XOPd_xop_peep XOPf_xop_class
++syn keyword xsMacro XOPf_xop_desc XOPf_xop_name XOPf_xop_peep XPUSHTARG
++syn keyword xsMacro XPUSHi XPUSHmortal XPUSHn XPUSHp XPUSHs XPUSHu XPUSHundef
++syn keyword xsMacro XS XSANY XSINTERFACE_CVT XSINTERFACE_CVT_ANON
++syn keyword xsMacro XSINTERFACE_FUNC XSINTERFACE_FUNC_SET XSPROTO XSRETURN
++syn keyword xsMacro XSRETURN_EMPTY XSRETURN_IV XSRETURN_NO XSRETURN_NV
++syn keyword xsMacro XSRETURN_PV XSRETURN_PVN XSRETURN_UNDEF XSRETURN_UV
++syn keyword xsMacro XSRETURN_YES XST_mIV XST_mNO XST_mNV XST_mPV XST_mPVN
++syn keyword xsMacro XST_mUNDEF XST_mUV XST_mYES XS_APIVERSION_BOOTCHECK
++syn keyword xsMacro XS_DYNAMIC_FILENAME XS_EXTERNAL XS_INTERNAL
++syn keyword xsMacro XS_VERSION_BOOTCHECK XSprePUSH XTENDED_PAT_MOD XopDISABLE
++syn keyword xsMacro XopENABLE XopENTRY XopENTRY_set XopFLAGS YADAYADA YIELD
++syn keyword xsMacro YYEMPTY YYSTYPE_IS_DECLARED YYSTYPE_IS_TRIVIAL
++syn keyword xsMacro YYTOKENTYPE Zero ZeroD _ _CANNOT _CC_ALNUMC_A
++syn keyword xsMacro _CC_ALNUMC_L1 _CC_ALPHA_A _CC_ALPHA_L1 _CC_BLANK_A
++syn keyword xsMacro _CC_BLANK_L1 _CC_CHARNAME_CONT _CC_CNTRL_A _CC_CNTRL_L1
++syn keyword xsMacro _CC_DIGIT_A _CC_GRAPH_A _CC_GRAPH_L1 _CC_IDFIRST_A
++syn keyword xsMacro _CC_IDFIRST_L1 _CC_LOWER_A _CC_LOWER_L1
++syn keyword xsMacro _CC_NONLATIN1_FOLD _CC_OCTAL_A _CC_PRINT_A _CC_PRINT_L1
++syn keyword xsMacro _CC_PSXSPC_A _CC_PSXSPC_L1 _CC_PUNCT_A _CC_PUNCT_L1
++syn keyword xsMacro _CC_QUOTEMETA _CC_SPACE_A _CC_SPACE_L1 _CC_UPPER_A
++syn keyword xsMacro _CC_UPPER_L1 _CC_WORDCHAR_A _CC_WORDCHAR_L1 _CC_XDIGIT_A
++syn keyword xsMacro _CPERLarg _GNU_SOURCE
++syn keyword xsMacro _HAS_NONLATIN1_FOLD_CLOSURE_ONLY_FOR_USE_BY_REGCOMP_DOT_C_AND_REGEXEC_DOT_C
++syn keyword xsMacro _INC_PERL_XSUB_H _PERLIOL_H _PERLIO_H _PERL_OBJECT_THIS
++syn keyword xsMacro _REGEXP_COMMON _RXf_PMf_CHARSET_SHIFT _RXf_PMf_SHIFT_NEXT
++syn keyword xsMacro _SOCKADDR_LEN _STDIO_H _STDIO_INCLUDED _V _XPVCV_COMMON
++syn keyword xsMacro _XPV_HEAD __Inc__IPerl___ __PATCHLEVEL_H_INCLUDED__
++syn keyword xsMacro __STDIO_LOADED __attribute__deprecated__
++syn keyword xsMacro __attribute__format__ __attribute__format__null_ok__
++syn keyword xsMacro __attribute__malloc__ __attribute__nonnull__
++syn keyword xsMacro __attribute__noreturn__ __attribute__pure__
++syn keyword xsMacro __attribute__unused__ __attribute__warn_unused_result__
++syn keyword xsMacro __filbuf __flsbuf __perlapi_h__ _config_h_ _exit _filbuf
++syn keyword xsMacro _flsbuf _isQUOTEMETA _stdopen _swab_16_ _swab_32_
++syn keyword xsMacro _swab_64_ aTHXo aTHXo_ aTHXx aTHXx_ abort accept access
++syn keyword xsMacro anchored_end_shift anchored_offset anchored_substr
++syn keyword xsMacro anchored_utf8 asctime assert assert_not_ROK
++syn keyword xsMacro assert_not_glob atoll bcmp bind blk_eval blk_format
++syn keyword xsMacro blk_gimme blk_givwhen blk_loop blk_oldcop blk_oldmarksp
++syn keyword xsMacro blk_oldpm blk_oldscopesp blk_oldsp blk_sub blk_u16 boolSV
++syn keyword xsMacro cBINOP cBINOPo cBINOPx cBOOL cCOP cCOPo cCOPx cGVOP_gv
++syn keyword xsMacro cGVOPo_gv cGVOPx_gv cLISTOP cLISTOPo cLISTOPx cLOGOP
++syn keyword xsMacro cLOGOPo cLOGOPx cLOOP cLOOPo cLOOPx cPADOP cPADOPo
++syn keyword xsMacro cPADOPx cPMOP cPMOPo cPMOPx cPVOP cPVOPo cPVOPx cSVOP
++syn keyword xsMacro cSVOP_sv cSVOPo cSVOPo_sv cSVOPx cSVOPx_sv cSVOPx_svp
++syn keyword xsMacro cUNOP cUNOPo cUNOPx chdir check_end_shift
++syn keyword xsMacro check_offset_max check_offset_min check_substr check_utf8
++syn keyword xsMacro child_offset_bits chmod chsize ckDEAD ckWARN ckWARN2
++syn keyword xsMacro ckWARN2_d ckWARN3 ckWARN3_d ckWARN4 ckWARN4_d ckWARN_d
++syn keyword xsMacro close closedir connect cop_hints_2hv cop_hints_fetch_pv
++syn keyword xsMacro cop_hints_fetch_pvn cop_hints_fetch_pvs
++syn keyword xsMacro cop_hints_fetch_sv cophh_2hv cophh_copy cophh_delete_pv
++syn keyword xsMacro cophh_delete_pvn cophh_delete_pvs cophh_delete_sv
++syn keyword xsMacro cophh_fetch_pv cophh_fetch_pvn cophh_fetch_pvs
++syn keyword xsMacro cophh_fetch_sv cophh_free cophh_new_empty cophh_store_pv
++syn keyword xsMacro cophh_store_pvn cophh_store_pvs cophh_store_sv crypt
++syn keyword xsMacro ctermid ctime cv_ckproto cx_type cxstack cxstack_ix
++syn keyword xsMacro cxstack_max dATARGET dAX dAXMARK dEXT dEXTCONST dITEMS
++syn keyword xsMacro dJMPENV dMARK dMULTICALL dMY_CXT dMY_CXT_INTERP
++syn keyword xsMacro dMY_CXT_SV dNOOP dORIGMARK dPOPPOPiirl dPOPPOPnnrl
++syn keyword xsMacro dPOPPOPssrl dPOPTOPiirl dPOPTOPiirl_nomg
++syn keyword xsMacro dPOPTOPiirl_ul_nomg dPOPTOPnnrl dPOPTOPnnrl_nomg
++syn keyword xsMacro dPOPTOPssrl dPOPXiirl dPOPXiirl_ul_nomg dPOPXnnrl
++syn keyword xsMacro dPOPXssrl dPOPiv dPOPnv dPOPnv_nomg dPOPqv dPOPss dPOPuqv
++syn keyword xsMacro dPOPuv dSAVEDERRNO dSAVE_ERRNO dSP dTARG dTARGET
++syn keyword xsMacro dTARGETSTACKED dTHR dTHX dTHXa dTHXo dTHXoa dTHXs dTHXx
++syn keyword xsMacro dTOPiv dTOPnv dTOPqv dTOPss dTOPuqv dTOPuv dUNDERBAR dVAR
++syn keyword xsMacro dXSARGS dXSFUNCTION dXSI32 dXSTARG dXSUB_SYS deprecate
++syn keyword xsMacro djSP do_open drand48 dup dup2 endgrent endhostent
++syn keyword xsMacro endnetent endprotoent endpwent endservent environ execl
++syn keyword xsMacro execv execvp fcntl fd_set fdopen fileno float_end_shift
++syn keyword xsMacro float_max_offset float_min_offset float_substr float_utf8
++syn keyword xsMacro flock flockfile foldEQ_utf8 frewind fscanf fstat ftell
++syn keyword xsMacro ftruncate ftrylockfile funlockfile fwrite1 generic_uni
++syn keyword xsMacro generic_utf8 get_cvs getc_unlocked getegid geteuid getgid
++syn keyword xsMacro getgrent getgrgid getgrnam gethostbyaddr gethostbyname
++syn keyword xsMacro gethostent gethostname getlogin getnetbyaddr getnetbyname
++syn keyword xsMacro getnetent getpeername getpid getprotobyname
++syn keyword xsMacro getprotobynumber getprotoent getpwent getpwnam getpwuid
++syn keyword xsMacro getservbyname getservbyport getservent getsockname
++syn keyword xsMacro getsockopt getspnam gettimeofday getuid getw gv_AVadd
++syn keyword xsMacro gv_HVadd gv_IOadd gv_SVadd gv_autoload4 gv_efullname3
++syn keyword xsMacro gv_fetchmeth gv_fetchmeth_autoload gv_fetchmethod
++syn keyword xsMacro gv_fetchmethod_flags gv_fetchpvn gv_fetchpvs
++syn keyword xsMacro gv_fetchsv_nomg gv_fullname3 gv_init gv_stashpvs htoni
++syn keyword xsMacro htonl htons htovl htovs hv_delete hv_delete_ent hv_exists
++syn keyword xsMacro hv_exists_ent hv_fetch hv_fetch_ent hv_fetchs hv_iternext
++syn keyword xsMacro hv_magic hv_store hv_store_ent hv_store_flags hv_stores
++syn keyword xsMacro hv_undef ibcmp ibcmp_locale ibcmp_utf8 inet_addr
++syn keyword xsMacro inet_ntoa init_os_extras init_thread_intern ioctl isALNUM
++syn keyword xsMacro isALNUMC isALNUMC_A isALNUMC_L1 isALNUMC_LC
++syn keyword xsMacro isALNUMC_LC_utf8 isALNUMU isALNUM_LC isALNUM_LC_utf8
++syn keyword xsMacro isALNUM_LC_uvchr isALNUM_lazy isALNUM_lazy_if isALNUM_uni
++syn keyword xsMacro isALNUM_utf8 isALPHA isALPHAU isALPHA_A isALPHA_L1
++syn keyword xsMacro isALPHA_LC isALPHA_LC_utf8 isALPHA_LC_uvchr isALPHA_uni
++syn keyword xsMacro isALPHA_utf8 isASCII isASCII_A isASCII_L1 isASCII_LC
++syn keyword xsMacro isASCII_uni isASCII_utf8 isBLANK isBLANK_A isBLANK_L1
++syn keyword xsMacro isBLANK_LC isBLANK_LC_uni isBLANK_LC_utf8 isBLANK_uni
++syn keyword xsMacro isBLANK_utf8 isCHARNAME_CONT isCNTRL isCNTRL_A isCNTRL_L1
++syn keyword xsMacro isCNTRL_LC isCNTRL_LC_utf8 isCNTRL_LC_uvchr isCNTRL_uni
++syn keyword xsMacro isCNTRL_utf8 isDIGIT isDIGIT_A isDIGIT_L1 isDIGIT_LC
++syn keyword xsMacro isDIGIT_LC_utf8 isDIGIT_LC_uvchr isDIGIT_uni isDIGIT_utf8
++syn keyword xsMacro isGRAPH isGRAPH_A isGRAPH_L1 isGRAPH_LC isGRAPH_LC_utf8
++syn keyword xsMacro isGRAPH_LC_uvchr isGRAPH_uni isGRAPH_utf8 isGV
++syn keyword xsMacro isGV_with_GP isGV_with_GP_off isGV_with_GP_on
++syn keyword xsMacro isIDCONT_utf8 isIDFIRST isIDFIRST_A isIDFIRST_L1
++syn keyword xsMacro isIDFIRST_LC isIDFIRST_LC_utf8 isIDFIRST_LC_uvchr
++syn keyword xsMacro isIDFIRST_lazy isIDFIRST_lazy_if isIDFIRST_uni
++syn keyword xsMacro isIDFIRST_utf8 isLEXWARN_off isLEXWARN_on isLOWER
++syn keyword xsMacro isLOWER_A isLOWER_L1 isLOWER_LC isLOWER_LC_utf8
++syn keyword xsMacro isLOWER_LC_uvchr isLOWER_uni isLOWER_utf8 isOCTAL
++syn keyword xsMacro isOCTAL_A isOCTAL_L1 isPRINT isPRINT_A isPRINT_L1
++syn keyword xsMacro isPRINT_LC isPRINT_LC_utf8 isPRINT_LC_uvchr isPRINT_uni
++syn keyword xsMacro isPRINT_utf8 isPSXSPC isPSXSPC_A isPSXSPC_L1 isPSXSPC_LC
++syn keyword xsMacro isPSXSPC_LC_uni isPSXSPC_LC_utf8 isPSXSPC_uni
++syn keyword xsMacro isPSXSPC_utf8 isPUNCT isPUNCT_A isPUNCT_L1 isPUNCT_LC
++syn keyword xsMacro isPUNCT_LC_utf8 isPUNCT_LC_uvchr isPUNCT_uni isPUNCT_utf8
++syn keyword xsMacro isSPACE isSPACE_A isSPACE_L1 isSPACE_LC isSPACE_LC_utf8
++syn keyword xsMacro isSPACE_LC_uvchr isSPACE_uni isSPACE_utf8 isUPPER
++syn keyword xsMacro isUPPER_A isUPPER_L1 isUPPER_LC isUPPER_LC_utf8
++syn keyword xsMacro isUPPER_LC_uvchr isUPPER_uni isUPPER_utf8 isWARN_ONCE
++syn keyword xsMacro isWARN_on isWARNf_on isWORDCHAR isWORDCHAR_A
++syn keyword xsMacro isWORDCHAR_L1 isXDIGIT isXDIGIT_A isXDIGIT_L1
++syn keyword xsMacro isXDIGIT_uni isXDIGIT_utf8 is_HORIZWS is_HORIZWS_cp
++syn keyword xsMacro is_HORIZWS_latin1 is_HORIZWS_latin1_safe is_HORIZWS_safe
++syn keyword xsMacro is_HORIZWS_utf8 is_HORIZWS_utf8_safe is_LAX_VERSION
++syn keyword xsMacro is_LNBREAK is_LNBREAK_latin1 is_LNBREAK_latin1_safe
++syn keyword xsMacro is_LNBREAK_safe is_LNBREAK_utf8 is_LNBREAK_utf8_safe
++syn keyword xsMacro is_STRICT_VERSION is_TRICKYFOLD is_TRICKYFOLD_cp
++syn keyword xsMacro is_TRICKYFOLD_safe is_VERTWS is_VERTWS_cp
++syn keyword xsMacro is_VERTWS_latin1 is_VERTWS_latin1_safe is_VERTWS_safe
++syn keyword xsMacro is_VERTWS_utf8 is_VERTWS_utf8_safe is_utf8_string_loc
++syn keyword xsMacro isatty kBINOP kCOP kGVOP_gv kLISTOP kLOGOP kLOOP kPADOP
++syn keyword xsMacro kPMOP kPVOP kSVOP kSVOP_sv kUNOP kill killpg
++syn keyword xsMacro lex_stuff_pvs link listen lockf longjmp lseek lstat
++syn keyword xsMacro mPUSHi mPUSHn mPUSHp mPUSHs mPUSHu mXPUSHi mXPUSHn
++syn keyword xsMacro mXPUSHp mXPUSHs mXPUSHu memEQ memEQs memNE memNEs memchr
++syn keyword xsMacro memcmp memzero mkdir mktemp my my_betoh16 my_betoh32
++syn keyword xsMacro my_betoh64 my_betohi my_betohl my_betohn my_betohs
++syn keyword xsMacro my_binmode my_htobe16 my_htobe32 my_htobe64 my_htobei
++syn keyword xsMacro my_htobel my_htoben my_htobes my_htole16 my_htole32
++syn keyword xsMacro my_htole64 my_htolei my_htolel my_htolen my_htoles
++syn keyword xsMacro my_letoh16 my_letoh32 my_letoh64 my_letohi my_letohl
++syn keyword xsMacro my_letohn my_letohs my_lstat my_snprintf my_sprintf
++syn keyword xsMacro my_stat my_strlcat my_strlcpy my_vsnprintf newAV newGVgen
++syn keyword xsMacro newHV newIO newRV_inc newSUB newSVpvn_utf8 newSVpvs
++syn keyword xsMacro newSVpvs_flags newSVpvs_share newXSproto ntohi ntohl
++syn keyword xsMacro ntohs opASSIGN op_getmad op_lvalue open opendir pTHX_1
++syn keyword xsMacro pTHX_2 pTHX_3 pTHX_4 pTHX_5 pTHX_6 pTHX_7 pTHX_8 pTHX_9
++syn keyword xsMacro pTHX_FORMAT pTHX_VALUE pTHX_VALUE_ pTHX__FORMAT
++syn keyword xsMacro pTHX__VALUE pTHX__VALUE_ pTHXo pTHXo_ pTHXx pTHXx_ pVAR
++syn keyword xsMacro pWARN_ALL pWARN_NONE pWARN_STD packWARN packWARN2
++syn keyword xsMacro packWARN3 packWARN4 pad_add_name_pvs pad_findmy_pvs
++syn keyword xsMacro pad_peg padadd_NO_DUP_CHECK padadd_OUR padadd_STATE
++syn keyword xsMacro padadd_UTF8_NAME padnew_CLONE padnew_SAVE padnew_SAVESUB
++syn keyword xsMacro panic_write2 pause pclose pipe popen prepare_SV_for_RV
++syn keyword xsMacro pthread_attr_init pthread_condattr_default pthread_create
++syn keyword xsMacro pthread_key_create pthread_keycreate
++syn keyword xsMacro pthread_mutexattr_default pthread_mutexattr_init
++syn keyword xsMacro pthread_mutexattr_settype putc_unlocked putenv putw
++syn keyword xsMacro random read readdir readdir64 recv recvfrom ref
++syn keyword xsMacro refcounted_he_fetch_pvs refcounted_he_new_pvs rename
++syn keyword xsMacro rewinddir rmdir sTHX safecalloc safefree safemalloc
++syn keyword xsMacro saferealloc save_aelem save_freeop save_freepv
++syn keyword xsMacro save_freesv save_helem save_mortalizesv save_op savepvs
++syn keyword xsMacro savesharedpvs sb_dstr sb_iters sb_m sb_maxiters
++syn keyword xsMacro sb_oldsave sb_orig sb_rflags sb_rx sb_rxres sb_rxtainted
++syn keyword xsMacro sb_s sb_strend sb_targ seedDrand01 seekdir select send
++syn keyword xsMacro sendto setbuf setgid setgrent sethostent setjmp
++syn keyword xsMacro setlinebuf setlocale setmode setnetent setprotoent
++syn keyword xsMacro setpwent setregid setreuid setservent setsockopt setuid
++syn keyword xsMacro setvbuf share_hek_hek sharepvn shutdown signal sleep
++syn keyword xsMacro socket socketpair specialWARN srand48 srandom stat
++syn keyword xsMacro stdoutf strEQ strGE strGT strLE strLT strNE strchr
++syn keyword xsMacro strerror stringify stringify_immed strnEQ strnNE strrchr
++syn keyword xsMacro strtoll strtoull sv_2bool sv_2iv sv_2nv sv_2pv
++syn keyword xsMacro sv_2pv_nolen sv_2pv_nomg sv_2pvbyte_nolen
++syn keyword xsMacro sv_2pvutf8_nolen sv_2uv sv_catpv_nomg sv_catpvn
++syn keyword xsMacro sv_catpvn_mg sv_catpvn_nomg sv_catpvn_utf8_upgrade
++syn keyword xsMacro sv_catpvs sv_catpvs_flags sv_catpvs_mg sv_catpvs_nomg
++syn keyword xsMacro sv_catsv sv_catsv_mg sv_catsv_nomg sv_catxmlpvs sv_cmp
++syn keyword xsMacro sv_cmp_locale sv_collxfrm sv_eq sv_force_normal sv_insert
++syn keyword xsMacro sv_nolocking sv_nounlocking sv_pv sv_pvbyte sv_pvn_force
++syn keyword xsMacro sv_pvn_force_nomg sv_pvutf8 sv_setpvs sv_setpvs_mg
++syn keyword xsMacro sv_setref_pvs sv_setsv sv_setsv_nomg sv_taint sv_unref
++syn keyword xsMacro sv_usepvn sv_usepvn_mg sv_utf8_upgrade
++syn keyword xsMacro sv_utf8_upgrade_flags sv_utf8_upgrade_nomg tTHX telldir
++syn keyword xsMacro times tmpfile tmpnam toCTRL toFOLD_uni toLOWER
++syn keyword xsMacro toLOWER_LATIN1 toLOWER_LC toLOWER_uni toLOWER_utf8
++syn keyword xsMacro toTITLE_uni toTITLE_utf8 toUPPER toUPPER_LATIN1_MOD
++syn keyword xsMacro toUPPER_LC toUPPER_uni toUPPER_utf8 to_uni_fold
++syn keyword xsMacro to_utf8_fold to_utf8_lower to_utf8_title to_utf8_upper
++syn keyword xsMacro truncate tryAMAGICbin_MG tryAMAGICunDEREF
++syn keyword xsMacro tryAMAGICunTARGET tryAMAGICun_MG ttyname umask uname
++syn keyword xsMacro unlink unpackWARN1 unpackWARN2 unpackWARN3 unpackWARN4
++syn keyword xsMacro utf8n_to_uvchr utime uvchr_to_utf8 uvuni_to_utf8 vTHX
++syn keyword xsMacro vfprintf vtohl vtohs wait want_vtbl_bm want_vtbl_fm
++syn keyword xsMacro what_TRICKYFOLD what_TRICKYFOLD_safe what_len_TRICKYFOLD
++syn keyword xsMacro what_len_TRICKYFOLD_safe whichsig write xio_any xio_dirp
++syn keyword xsMacro xiv_iv xuv_uv yystype
+ 
+-" XS extentions
+-" TODO: Figure out how to look for trailing '='.
+-syn keyword xsKeyword   MODULE PACKAGE PREFIX
+-syn keyword xsKeyword   OUTPUT: CODE: INIT: PREINIT: INPUT:
+-syn keyword xsKeyword   PPCODE: REQUIRE: CLEANUP: BOOT:
+-syn keyword xsKeyword   VERSIONCHECK: PROTOTYPES: PROTOTYPE:
+-syn keyword xsKeyword   ALIAS: INCLUDE: CASE:
+-" TODO: Figure out how to look for trailing '('.
+-syn keyword xsMacro     SV EXTEND PUSHs
+-syn keyword xsVariable  RETVAL NO_INIT
+-"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*<"me=e-1
+-"syn match xsCast       "\<\(const\|static\|dynamic\|reinterpret\)_cast\s*$"
+-
+-" Define the default highlighting, but only when an item doesn't have highlighting yet
+-command -nargs=+ HiLink hi def link <args>
+-
+-HiLink xsKeyword    Keyword
+-HiLink xsMacro      Macro
+-HiLink xsVariable   Identifier
++" Define the default highlighting.
++" For version 5.7 and earlier: only when not done already
++" For version 5.8 and later: only when an item doesn't have highlighting yet
++if version >= 508 || !exists("did_xs_syntax_inits")
++  if version < 508
++    let did_xs_syntax_inits = 1
++    command -nargs=+ HiLink hi link <args>
++  else
++    command -nargs=+ HiLink hi def link <args>
++  endif
+ 
+-delcommand HiLink
++  HiLink xsPrivate    Error
++  HiLink xsSuperseded Error
++  HiLink xsType       Type
++  HiLink xsString     String
++  HiLink xsConstant   Constant
++  HiLink xsException  Exception
++  HiLink xsKeyword    Keyword
++  HiLink xsFunction   Function
++  HiLink xsVariable   Identifier
++  HiLink xsMacro      Macro
++
++  delcommand HiLink
++endif
+ 
+ let b:current_syntax = "xs"
+ 
+diff -Naur vim73.orig/runtime/syntax/yacc.vim vim73/runtime/syntax/yacc.vim
+--- vim73.orig/runtime/syntax/yacc.vim	2010-08-02 15:40:18.000000000 +0000
++++ vim73/runtime/syntax/yacc.vim	2013-06-07 17:07:27.812262593 +0000
+@@ -1,8 +1,8 @@
+ " Vim syntax file
+ " Language:	Yacc
+-" Maintainer:	Charles E. Campbell, Jr. <NdrOchipS@PcampbellAfamily.Mbiz>
+-" Last Change:	Aug 2, 2010
+-" Version:	8
++" Maintainer:	Charles E. Campbell <NdrOchipS@PcampbellAfamily.Mbiz>
++" Last Change:	Nov 14, 2012
++" Version:	10
+ " URL:	http://mysite.verizon.net/astronaut/vim/index.html#vimlinks_syntax
+ "
+ " Options: {{{1
+@@ -20,37 +20,44 @@
+ " ---------------------------------------------------------------------
+ "  Folding Support {{{1
+ if has("folding")
+- com! -nargs=+ HiFold	<args> fold
++ com! -nargs=+ SynFold	<args> fold
+ else
+- com! -nargs=+ HiFold	<args>
++ com! -nargs=+ SynFold	<args>
+ endif
+ 
+ " ---------------------------------------------------------------------
+ " Read the C syntax to start with {{{1
+-if exists("g:yacc_uses_cpp")
+- syn include @yaccCode	<sfile>:p:h/cpp.vim
+-else
+- syn include @yaccCode	<sfile>:p:h/c.vim
++" Read the C/C++ syntax to start with
++let s:Cpath= fnameescape(expand("<sfile>:p:h").(exists("g:yacc_uses_cpp")? "/cpp.vim" : "/c.vim"))
++if !filereadable(s:Cpath)
++ for s:Cpath in split(globpath(&rtp,(exists("g:yacc_uses_cpp")? "syntax/cpp.vim" : "syntax/c.vim")),"\n")
++  if filereadable(fnameescape(s:Cpath))
++   let s:Cpath= fnameescape(s:Cpath)
++   break
++  endif
++ endfor
+ endif
++exe "syn include @yaccCode ".s:Cpath
+ 
+ " ---------------------------------------------------------------------
+ "  Yacc Clusters: {{{1
+-syn cluster yaccInitCluster	contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam
++syn cluster yaccInitCluster	contains=yaccKey,yaccKeyActn,yaccBrkt,yaccType,yaccString,yaccUnionStart,yaccHeader2,yaccComment,yaccDefines,yaccParseParam,yaccParseOption
+ syn cluster yaccRulesCluster	contains=yaccNonterminal,yaccString
+ 
+ " ---------------------------------------------------------------------
+ "  Yacc Sections: {{{1
+-HiFold syn	region	yaccInit	start='.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty contained
+-HiFold syn	region	yaccInit2      start='\%^.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty
+-HiFold syn	region	yaccHeader2	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty contained
+-HiFold syn	region	yaccHeader	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty
+-HiFold syn	region	yaccRules	matchgroup=yaccSectionSep	start='^%%$'		end='^%%$'me=e-2,re=e-2	contains=@yaccRulesCluster	nextgroup=yaccEndCode	skipwhite skipempty contained
+-HiFold syn	region	yaccEndCode	matchgroup=yaccSectionSep	start='^%%$'		end='\%$'		contains=@yaccCode	contained
++SynFold syn	region	yaccInit	start='.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty contained
++SynFold syn	region	yaccInit2      start='\%^.'ms=s-1,rs=s-1	matchgroup=yaccSectionSep	end='^%%$'me=e-2,re=e-2	contains=@yaccInitCluster	nextgroup=yaccRules	skipwhite skipempty
++SynFold syn	region	yaccHeader2	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty contained
++SynFold syn	region	yaccHeader	matchgroup=yaccSep	start="^\s*\zs%{"	end="^\s*%}"		contains=@yaccCode	nextgroup=yaccInit	skipwhite skipempty
++SynFold syn	region	yaccRules	matchgroup=yaccSectionSep	start='^%%$'		end='^%%$'me=e-2,re=e-2	contains=@yaccRulesCluster	nextgroup=yaccEndCode	skipwhite skipempty contained
++SynFold syn	region	yaccEndCode	matchgroup=yaccSectionSep	start='^%%$'		end='\%$'		contains=@yaccCode	contained
+ 
+ " ---------------------------------------------------------------------
+ " Yacc Commands: {{{1
+ syn	match	yaccDefines	'^%define\s\+.*$'
+-syn	match	yaccParseParam	'%parse-param\>'	skipwhite	nextgroup=yaccParseParamStr
++syn	match	yaccParseParam	'%\(parse\|lex\)-param\>'		skipwhite	nextgroup=yaccParseParamStr
++syn	match	yaccParseOption '%\%(api\.pure\|pure-parser\|locations\|error-verbose\)\>'
+ syn	region	yaccParseParamStr	contained matchgroup=Delimiter	start='{'	end='}'	contains=cStructure
+ 
+ syn	match	yaccDelim	"[:|]"	contained
+@@ -62,11 +69,11 @@
+ syn	keyword	yaccKeyActn	yyerrok yyclearin	contained
+ 
+ syn	match	yaccUnionStart	"^%union"	skipwhite skipnl nextgroup=yaccUnion	contained
+-HiFold syn	region	yaccUnion	matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode	contained
++SynFold syn	region	yaccUnion	matchgroup=yaccCurly start="{" matchgroup=yaccCurly end="}" contains=@yaccCode	contained
+ syn	match	yaccBrkt	"[<>]"	contained
+ syn	match	yaccType	"<[a-zA-Z_][a-zA-Z0-9_]*>"	contains=yaccBrkt	contained
+ 
+-HiFold syn	region	yaccNonterminal	start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:"	matchgroup=yaccDelim end=";"	matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment	contained
++SynFold syn	region	yaccNonterminal	start="^\s*\a\w*\ze\_s*\(/\*\_.\{-}\*/\)\=\_s*:"	matchgroup=yaccDelim end=";"	matchgroup=yaccSectionSep end='^%%$'me=e-2,re=e-2 contains=yaccAction,yaccDelim,yaccString,yaccComment	contained
+ syn	region	yaccComment	start="/\*"	end="\*/"
+ syn	match	yaccString	"'[^']*'"	contained
+ 
+@@ -74,7 +81,8 @@
+ " ---------------------------------------------------------------------
+ " I'd really like to highlight just the outer {}.  Any suggestions??? {{{1
+ syn	match	yaccCurlyError	"[{}]"
+-HiFold syn	region	yaccAction	matchgroup=yaccCurly start="{" end="}" contains=@yaccCode	contained
++SynFold syn	region	yaccAction	matchgroup=yaccCurly start="{" end="}" 	contains=@yaccCode,yaccVar		contained
++syn	match	yaccVar	'\$\d\+\|\$\$\|\$<\I\i*>\$\|\$<\I\i*>\d\+'	containedin=cParen,cPreProc,cMulti	contained
+ 
+ " ---------------------------------------------------------------------
+ " Yacc synchronization: {{{1
+@@ -83,38 +91,30 @@
+ " ---------------------------------------------------------------------
+ " Define the default highlighting. {{{1
+ if !exists("did_yacc_syn_inits")
+-  command -nargs=+ HiLink hi def link <args>
+-
+-  " Internal yacc highlighting links {{{2
+-  HiLink yaccBrkt	yaccStmt
+-  HiLink yaccKey	yaccStmt
+-  HiLink yaccOper	yaccStmt
+-  HiLink yaccUnionStart	yaccKey
+-
+-  " External yacc highlighting links {{{2
+-  HiLink yaccComment	Comment
+-  HiLink yaccCurly	Delimiter
+-  HiLink yaccCurlyError	Error
+-  HiLink yaccDefines	cDefine
+-  HiLink yaccParseParam	cDefine
+-  HiLink yaccNonterminal	Function
+-  HiLink yaccDelim	Delimiter
+-  HiLink yaccKeyActn	Special
+-  HiLink yaccSectionSep	Todo
+-  HiLink yaccSep	Delimiter
+-  HiLink yaccString	String
+-  HiLink yaccStmt	Statement
+-  HiLink yaccType	Type
+-
+-  " since Bram doesn't like my Delimiter :| {{{2
+-  HiLink Delimiter	Type
+-
+-  delcommand HiLink
++  hi def link yaccBrkt	yaccStmt
++  hi def link yaccComment	Comment
++  hi def link yaccCurly	Delimiter
++  hi def link yaccCurlyError	Error
++  hi def link yaccDefines	cDefine
++  hi def link yaccDelim	Delimiter
++  hi def link yaccKeyActn	Special
++  hi def link yaccKey	yaccStmt
++  hi def link yaccNonterminal	Function
++  hi def link yaccOper	yaccStmt
++  hi def link yaccParseOption	cDefine
++  hi def link yaccParseParam	yaccParseOption
++  hi def link yaccSectionSep	Todo
++  hi def link yaccSep	Delimiter
++  hi def link yaccStmt	Statement
++  hi def link yaccString	String
++  hi def link yaccType	Type
++  hi def link yaccUnionStart	yaccKey
++  hi def link yaccVar	Special
+ endif
+ 
+ " ---------------------------------------------------------------------
+ "  Cleanup: {{{1
+-delcommand HiFold
++delcommand SynFold
+ let b:current_syntax = "yacc"
+ 
+ " ---------------------------------------------------------------------
+diff -Naur vim73.orig/runtime/syntax/yaml.vim vim73/runtime/syntax/yaml.vim
+--- vim73.orig/runtime/syntax/yaml.vim	2010-08-13 12:54:35.000000000 +0000
++++ vim73/runtime/syntax/yaml.vim	2013-06-07 17:07:27.822262565 +0000
+@@ -1,86 +1,186 @@
+ " Vim syntax file
+-" Language:         YAML (YAML Ain't Markup Language)
+-" Maintainer:       Nikolai Weibull <now@bitwi.se>
+-" Latest Revision:  2010-08-12
++" Language:         YAML (YAML Ain't Markup Language) 1.2
++" Maintainer:       Nikolai Pavlov <zyx.vim@gmail.com>
++" First author:     Nikolai Weibull <now@bitwi.se>
++" Latest Revision:  2010-10-08
+ 
+-if exists("b:current_syntax")
+-  finish
++if exists('b:current_syntax')
++    finish
+ endif
+ 
+ let s:cpo_save = &cpo
+ set cpo&vim
+ 
+-syn keyword yamlTodo            contained TODO FIXME XXX NOTE
++let s:ns_char = '\%(\%([\n\r\uFEFF \t]\)\@!\p\)'
++let s:ns_word_char = '\%(\w\|-\)'
++let s:ns_uri_char  = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$,.!~*''()\[\]]\)'
++let s:ns_tag_char  = '\%(%\x\x\|'.s:ns_word_char.'\|[#/;?:@&=+$.~*''()]\)'
++let s:c_ns_anchor_char = '\%(\%([\n\r\uFEFF \t,\[\]{}]\)\@!\p\)'
++let s:c_indicator      = '[\-?:,\[\]{}#&*!|>''"%@`]'
++let s:c_flow_indicator = '[,\[\]{}]'
++
++let s:c_verbatim_tag = '!<'.s:ns_uri_char.'\+>'
++let s:c_named_tag_handle     = '!'.s:ns_word_char.'\+!'
++let s:c_secondary_tag_handle = '!!'
++let s:c_primary_tag_handle   = '!'
++let s:c_tag_handle = '\%('.s:c_named_tag_handle.
++            \         '\|'.s:c_secondary_tag_handle.
++            \         '\|'.s:c_primary_tag_handle.'\)'
++let s:c_ns_shorthand_tag = s:c_tag_handle . s:ns_tag_char.'\+'
++let s:c_non_specific_tag = '!'
++let s:c_ns_tag_property = s:c_verbatim_tag.
++            \        '\|'.s:c_ns_shorthand_tag.
++            \        '\|'.s:c_non_specific_tag
++
++let s:c_ns_anchor_name = s:c_ns_anchor_char.'\+'
++let s:c_ns_anchor_property =  '&'.s:c_ns_anchor_name
++let s:c_ns_alias_node      = '\*'.s:c_ns_anchor_name
++
++let s:ns_directive_name = s:ns_char.'\+'
++
++let s:ns_local_tag_prefix  = '!'.s:ns_uri_char.'*'
++let s:ns_global_tag_prefix = s:ns_tag_char.s:ns_uri_char.'*'
++let s:ns_tag_prefix = s:ns_local_tag_prefix.
++            \    '\|'.s:ns_global_tag_prefix
++
++let s:ns_plain_safe_out = s:ns_char
++let s:ns_plain_safe_in  = '\%('.s:c_flow_indicator.'\@!'.s:ns_char.'\)'
++
++let s:ns_plain_first_in  = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_in.'\)\@=\)'
++let s:ns_plain_first_out = '\%('.s:c_indicator.'\@!'.s:ns_char.'\|[?:\-]\%('.s:ns_plain_safe_out.'\)\@=\)'
++
++let s:ns_plain_char_in  = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_in.'\|[:#]\@!'.s:ns_plain_safe_in.'\)'
++let s:ns_plain_char_out = '\%('.s:ns_char.'#\|:'.s:ns_plain_safe_out.'\|[:#]\@!'.s:ns_plain_safe_out.'\)'
+ 
+-syn region  yamlComment         display oneline start='\%(^\|\s\)#' end='$'
+-                                \ contains=yamlTodo,@Spell
++let s:ns_plain_out = s:ns_plain_first_out . s:ns_plain_char_out.'*'
++let s:ns_plain_in  = s:ns_plain_first_in  . s:ns_plain_char_in.'*'
+ 
+-syn match   yamlNodeProperty    '!\%(![^\\^%     ]\+\|[^!][^:/   ]*\)'
+ 
+-syn match   yamlAnchor          '&.\+'
++syn keyword yamlTodo            contained TODO FIXME XXX NOTE
+ 
+-syn match   yamlAlias           '\*.\+'
++syn region  yamlComment         display oneline start='\%\(^\|\s\)#' end='$'
++            \                   contains=yamlTodo
+ 
+-syn match   yamlDelimiter       '[-,:]'
+-syn match   yamlBlock           '[\[\]{}>|]'
+-syn match   yamlOperator        '[?+-]'
+-syn match   yamlKey             '\w\+\(\s\+\w\+\)*\ze\s*:'
+-
+-syn region  yamlString          matchgroup=yamlStringDelimiter
+-                                \ start=+"+ skip=+\\"+ end=+"+
+-                                \ contains=yamlEscape
+-syn region  yamlString          matchgroup=yamlStringDelimiter
+-                                \ start=+'+ skip=+''+ end=+'+
+-                                \ contains=yamlSingleEscape
+-syn match   yamlEscape          contained display +\\[\\"abefnrtv^0_ NLP]+
+-syn match   yamlEscape          contained display '\\x\x\{2}'
+-syn match   yamlEscape          contained display '\\u\x\{4}'
+-syn match   yamlEscape          contained display '\\U\x\{8}'
+-" TODO: how do we get 0x85, 0x2028, and 0x2029 into this?
+-syn match   yamlEscape          display '\\\%(\r\n\|[\r\n]\)'
+-syn match   yamlSingleEscape    contained +''+
+-
+-" TODO: sexagecimal and fixed (20:30.15 and 1,230.15)
+-syn match   yamlNumber          display
+-                                \ '\<[+-]\=\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\='
+-syn match   yamlNumber          display '0\o\+'
+-syn match   yamlNumber          display '0x\x\+'
+-syn match   yamlNumber          display '([+-]\=[iI]nf)'
+-syn match   yamlNumber          display '(NaN)'
+-
+-syn match   yamlConstant        '\<[~yn]\>'
+-syn keyword yamlConstant        true True TRUE false False FALSE
+-syn keyword yamlConstant        yes Yes on ON no No off OFF
+-syn keyword yamlConstant        null Null NULL nil Nil NIL
+-
+-syn match   yamlTimestamp       '\d\d\d\d-\%(1[0-2]\|\d\)-\%(3[0-2]\|2\d\|1\d\|\d\)\%( \%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d [+-]\%([01]\d\|2[0-3]\):[0-5]\d\|t\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\d\d[+-]\%([01]\d\|2[0-3]\):[0-5]\d\|T\%([01]\d\|2[0-3]\):[0-5]\d:[0-5]\d.\dZ\)\='
+-
+-syn region  yamlDocumentHeader  start='---' end='$' contains=yamlDirective
+-syn match   yamlDocumentEnd     '\.\.\.'
+-
+-syn match   yamlDirective       contained '%[^:]\+:.\+'
+-
+-hi def link yamlTodo            Todo
+-hi def link yamlComment         Comment
+-hi def link yamlDocumentHeader  PreProc
+-hi def link yamlDocumentEnd     PreProc
+-hi def link yamlDirective       Keyword
+-hi def link yamlNodeProperty    Type
+-hi def link yamlAnchor          Type
+-hi def link yamlAlias           Type
+-hi def link yamlDelimiter       Delimiter
+-hi def link yamlBlock           Operator
+-hi def link yamlOperator        Operator
+-hi def link yamlKey             Identifier
+-hi def link yamlString          String
+-hi def link yamlStringDelimiter yamlString
+-hi def link yamlEscape          SpecialChar
+-hi def link yamlSingleEscape    SpecialChar
+-hi def link yamlNumber          Number
+-hi def link yamlConstant        Constant
+-hi def link yamlTimestamp       Number
++execute 'syn region yamlDirective oneline start='.string('^\ze%'.s:ns_directive_name.'\s\+').' '.
++            \                            'end="$" '.
++            \                            'contains=yamlTAGDirective,'.
++            \                                     'yamlYAMLDirective,'.
++            \                                     'yamlReservedDirective '.
++            \                            'keepend'
++
++syn match yamlTAGDirective '%TAG\s\+' contained nextgroup=yamlTagHandle
++execute 'syn match yamlTagHandle contained nextgroup=yamlTagPrefix '.string(s:c_tag_handle.'\s\+')
++execute 'syn match yamlTagPrefix contained nextgroup=yamlComment ' . string(s:ns_tag_prefix)
++
++syn match yamlYAMLDirective '%YAML\s\+'  contained nextgroup=yamlYAMLVersion
++syn match yamlYAMLVersion   '\d\+\.\d\+' contained nextgroup=yamlComment
++
++execute 'syn match yamlReservedDirective contained nextgroup=yamlComment '.
++            \string('%\%(\%(TAG\|YAML\)\s\)\@!'.s:ns_directive_name)
++
++syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start='"' skip='\\"' end='"'
++            \ contains=yamlEscape
++            \ nextgroup=yamlKeyValueDelimiter
++syn region yamlFlowString matchgroup=yamlFlowStringDelimiter start="'" skip="''"  end="'"
++            \ contains=yamlSingleEscape
++            \ nextgroup=yamlKeyValueDelimiter
++syn match  yamlEscape contained '\\\%([\\"abefnrtv\^0_ NLP\n]\|x\x\x\|u\x\{4}\|U\x\{8}\)'
++syn match  yamlSingleEscape contained "''"
++
++syn match yamlBlockScalarHeader contained '\s\+\zs[|>]\%([+-]\=[1-9]\|[1-9]\=[+-]\)\='
++
++syn cluster yamlFlow contains=yamlFlowString,yamlFlowMapping,yamlFlowCollection
++syn cluster yamlFlow      add=yamlFlowMappingKey,yamlFlowMappingMerge
++syn cluster yamlFlow      add=yamlConstant,yamlPlainScalar,yamlFloat
++syn cluster yamlFlow      add=yamlTimestamp,yamlInteger,yamlMappingKeyStart
++syn cluster yamlFlow      add=yamlComment
++syn region yamlFlowMapping    matchgroup=yamlFlowIndicator start='{' end='}' contains=@yamlFlow
++syn region yamlFlowCollection matchgroup=yamlFlowIndicator start='\[' end='\]' contains=@yamlFlow
++
++execute 'syn match yamlPlainScalar /'.s:ns_plain_out.'/'
++execute 'syn match yamlPlainScalar contained /'.s:ns_plain_in.'/'
++
++syn match yamlMappingKeyStart '?\ze\s'
++syn match yamlMappingKeyStart '?' contained
++
++execute 'syn match yamlFlowMappingKey /'.s:ns_plain_in.'\ze\s*:/ contained '.
++            \'nextgroup=yamlKeyValueDelimiter'
++syn match yamlFlowMappingMerge /<<\ze\s*:/ contained nextgroup=yamlKeyValueDelimiter
++
++syn match yamlBlockCollectionItemStart '^\s*\zs-\%(\s\+-\)*\s' nextgroup=yamlBlockMappingKey,yamlBlockMappingMerge
++execute 'syn match yamlBlockMappingKey /^\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ '.
++            \'nextgroup=yamlKeyValueDelimiter'
++execute 'syn match yamlBlockMappingKey /\s*\zs'.s:ns_plain_out.'\ze\s*:\%(\s\|$\)/ contained '.
++            \'nextgroup=yamlKeyValueDelimiter'
++syn match yamlBlockMappingMerge /^\s*\zs<<\ze:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter
++syn match yamlBlockMappingMerge /<<\ze\s*:\%(\s\|$\)/ nextgroup=yamlKeyValueDelimiter contained
++
++syn match   yamlKeyValueDelimiter /\s*:/ contained
++syn match   yamlKeyValueDelimiter /\s*:/ contained
++
++syn keyword yamlConstant true True TRUE false False FALSE
++syn keyword yamlConstant null Null NULL
++syn match   yamlConstant '\<\~\>'
++
++syn match   yamlTimestamp /\%([\[\]{}, \t]\@!\p\)\@<!\%(\d\{4}-\d\d\=-\d\d\=\%(\%([Tt]\|\s\+\)\%(\d\d\=\):\%(\d\d\):\%(\d\d\)\%(\.\%(\d*\)\)\=\%(\s*\%(Z\|[+-]\d\d\=\%(:\d\d\)\=\)\)\=\)\=\)\%([\[\]{}, \t]\@!\p\)\@!/
++
++syn match   yamlInteger /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(0\%(b[0-1_]\+\|[0-7_]\+\|x[0-9a-fA-F_]\+\)\=\|\%([1-9][0-9_]*\%(:[0-5]\=\d\)\+\)\)\|[1-9][0-9_]*\)\%([\[\]{}, \t]\@!\p\)\@!/
++syn match   yamlFloat   /\%([\[\]{}, \t]\@!\p\)\@<!\%([+-]\=\%(\%(\d[0-9_]*\)\.[0-9_]*\%([eE][+-]\d\+\)\=\|\.[0-9_]\+\%([eE][-+][0-9]\+\)\=\|\d[0-9_]*\%(:[0-5]\=\d\)\+\.[0-9_]*\|\.\%(inf\|Inf\|INF\)\)\|\%(\.\%(nan\|NaN\|NAN\)\)\)\%([\[\]{}, \t]\@!\p\)\@!/
++
++execute 'syn match yamlNodeTag '.string(s:c_ns_tag_property)
++execute 'syn match yamlAnchor  '.string(s:c_ns_anchor_property)
++execute 'syn match yamlAlias   '.string(s:c_ns_alias_node)
++
++syn match yamlDocumentStart '^---\ze\%(\s\|$\)'
++syn match yamlDocumentEnd   '^\.\.\.\ze\%(\s\|$\)'
++
++hi def link yamlTodo                     Todo
++hi def link yamlComment                  Comment
++
++hi def link yamlDocumentStart            PreProc
++hi def link yamlDocumentEnd              PreProc
++
++hi def link yamlDirectiveName            Keyword
++
++hi def link yamlTAGDirective             yamlDirectiveName
++hi def link yamlTagHandle                String
++hi def link yamlTagPrefix                String
++
++hi def link yamlYAMLDirective            yamlDirectiveName
++hi def link yamlReservedDirective        Error
++hi def link yamlYAMLVersion              Number
++
++hi def link yamlString                   String
++hi def link yamlFlowString               yamlString
++hi def link yamlFlowStringDelimiter      yamlString
++hi def link yamlEscape                   SpecialChar
++hi def link yamlSingleEscape             SpecialChar
++
++hi def link yamlBlockCollectionItemStart Label
++hi def link yamlBlockMappingKey          Identifier
++hi def link yamlBlockMappingMerge        Special
++
++hi def link yamlFlowMappingKey           Identifier
++hi def link yamlFlowMappingMerge         Special
++
++hi def link yamlMappingKeyStart          Special
++hi def link yamlFlowIndicator            Special
++hi def link yamlKeyValueDelimiter        Special
++
++hi def link yamlConstant                 Constant
++
++hi def link yamlAnchor                   Type
++hi def link yamlAlias                    Type
++hi def link yamlNodeTag                  Type
++
++hi def link yamlInteger                  Number
++hi def link yamlFloat                    Float
++hi def link yamlTimestamp                Number
+ 
+ let b:current_syntax = "yaml"
+ 
++unlet s:ns_word_char s:ns_uri_char s:c_verbatim_tag s:c_named_tag_handle s:c_secondary_tag_handle s:c_primary_tag_handle s:c_tag_handle s:ns_tag_char s:c_ns_shorthand_tag s:c_non_specific_tag s:c_ns_tag_property s:c_ns_anchor_char s:c_ns_anchor_name s:c_ns_anchor_property s:c_ns_alias_node s:ns_char s:ns_directive_name s:ns_local_tag_prefix s:ns_global_tag_prefix s:ns_tag_prefix s:c_indicator s:ns_plain_safe_out s:c_flow_indicator s:ns_plain_safe_in s:ns_plain_first_in s:ns_plain_first_out s:ns_plain_char_in s:ns_plain_char_out s:ns_plain_out s:ns_plain_in
++
+ let &cpo = s:cpo_save
+ unlet s:cpo_save
++
+diff -Naur vim73.orig/runtime/syntax/zimbu.vim vim73/runtime/syntax/zimbu.vim
+--- vim73.orig/runtime/syntax/zimbu.vim	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/syntax/zimbu.vim	2013-06-07 17:07:27.838929184 +0000
+@@ -0,0 +1,130 @@
++" Vim syntax file
++" Language:	Zimbu
++" Maintainer:	Bram Moolenaar
++" Last Change:	2012 Jun 01
++
++if exists("b:current_syntax")
++  finish
++endif
++
++syn include @Ccode syntax/c.vim
++
++syn keyword zimbuTodo		TODO FIXME XXX contained
++syn match   zimbuNoBar          "|" contained
++syn match   zimbuParam  	"|[^| ]\+|" contained contains=zimbuNoBar
++syn match   zimbuComment	"#.*$" contains=zimbuTodo,zimbuParam,@Spell
++
++syn match   zimbuChar	"'\\\=.'"
++
++syn keyword zimbuBasicType	bool status
++syn keyword zimbuBasicType	int1 int2 int3 int4 int5 int6 int7
++syn keyword zimbuBasicType	int9 int10 int11 int12 int13 int14 int15
++syn keyword zimbuBasicType	int int8 int16 int32 int64 bigInt
++syn keyword zimbuBasicType	nat nat8 byte nat16 nat32 nat64 bigNat
++syn keyword zimbuBasicType	nat1 nat2 nat3 nat4 nat5 nat6 nat7
++syn keyword zimbuBasicType	nat9 nat10 nat11 nat12 nat13 nat14 nat15
++syn keyword zimbuBasicType	float float32 float64 float80 float128
++syn keyword zimbuBasicType	fixed1 fixed2 fixed3 fixed4 fixed5 fixed6
++syn keyword zimbuBasicType	fixed7 fixed8 fixed9 fixed10 fixed11 fixed12
++syn keyword zimbuBasicType	fixed13 fixed14 fixed15
++
++syn keyword zimbuCompType	string stringval cstring varstring
++syn keyword zimbuCompType	bytes varbytes
++syn keyword zimbuCompType	tuple array list dict multiDict set multiSet
++syn keyword zimbuCompType	complex complex32 complex64 complex80 complex128
++syn keyword zimbuCompType	proc func def thread evalThread lock cond pipe
++
++syn keyword zimbuType   VAR ANY USE GET
++syn match zimbuType	"IO.File"
++syn match zimbuType	"IO.Stat"
++
++syn keyword zimbuStatement IF ELSE ELSEIF WHILE REPEAT FOR IN TO STEP
++syn keyword zimbuStatement DO UNTIL SWITCH WITH
++syn keyword zimbuStatement TRY CATCH FINALLY
++syn keyword zimbuStatement GENERATE_IF GENERATE_ELSE GENERATE_ELSEIF
++syn keyword zimbuStatement CASE DEFAULT FINAL ABSTRACT VIRTUAL DEFINE REPLACE
++syn keyword zimbuStatement IMPLEMENTS EXTENDS PARENT LOCAL
++syn keyword zimbuStatement PART ALIAS CONNECT WRAP
++syn keyword zimbuStatement BREAK CONTINUE PROCEED
++syn keyword zimbuStatement RETURN EXIT THROW
++syn keyword zimbuStatement IMPORT AS OPTIONS MAIN
++syn keyword zimbuStatement INTERFACE MODULE ENUM BITS SHARED
++syn match zimbuStatement "\<\(FUNC\|PROC\|DEF\)\>"
++syn match zimbuStatement "\<CLASS\>"
++syn match zimbuStatement "}"
++
++syn match zimbuAttribute "@backtrace=no\>"
++syn match zimbuAttribute "@backtrace=yes\>"
++syn match zimbuAttribute "@abstract\>"
++syn match zimbuAttribute "@earlyInit\>"
++syn match zimbuAttribute "@default\>"
++syn match zimbuAttribute "@define\>"
++syn match zimbuAttribute "@replace\>"
++syn match zimbuAttribute "@final\>"
++
++syn match zimbuAttribute "@private\>"
++syn match zimbuAttribute "@protected\>"
++syn match zimbuAttribute "@public\>"
++syn match zimbuAttribute "@file\>"
++syn match zimbuAttribute "@directory\>"
++syn match zimbuAttribute "@read=private\>"
++syn match zimbuAttribute "@read=protected\>"
++syn match zimbuAttribute "@read=public\>"
++syn match zimbuAttribute "@read=file\>"
++syn match zimbuAttribute "@read=directory\>"
++syn match zimbuAttribute "@items=private\>"
++syn match zimbuAttribute "@items=protected\>"
++syn match zimbuAttribute "@items=public\>"
++syn match zimbuAttribute "@items=file\>"
++syn match zimbuAttribute "@items=directory\>"
++
++syn keyword zimbuMethod NEW EQUAL COPY COMPARE SIZE GET SET
++
++syn keyword zimbuOperator IS ISNOT ISA ISNOTA
++
++syn keyword zimbuModule  ARG CHECK E IO PROTO SYS HTTP ZC ZWT TIME THREAD
++
++syn match zimbuString  +"\([^"\\]\|\\.\)*\("\|$\)+
++syn match zimbuString  +R"\([^"]\|""\)*\("\|$\)+
++syn region zimbuString  start=+'''+ end=+'''+
++
++syn keyword zimbuFixed  TRUE FALSE NIL THIS THISTYPE FAIL OK
++syn keyword zimbuError  NULL
++
++" trailing whitespace
++syn match   zimbuSpaceError   display excludenl "\S\s\+$"ms=s+1
++" mixed tabs and spaces
++syn match   zimbuSpaceError   display " \+\t"
++syn match   zimbuSpaceError   display "\t\+ "
++
++syn match zimbuUses contained "uses([a-zA-Z_ ,]*)"
++syn match zimbuBlockComment contained " #.*"
++
++syn region zimbuCregion matchgroup=zimbuCblock start="^>>>" end="^<<<.*" contains=@Ccode,zimbuUses,zimbuBlockComment keepend
++
++syn sync minlines=2000
++
++hi def link zimbuBasicType	Type
++hi def link zimbuCompType	Type
++hi def link zimbuType		Type
++hi def link zimbuStatement	Statement
++hi def link zimbuOperator	Statement
++hi def link zimbuMethod		PreProc
++hi def link zimbuModule		PreProc
++hi def link zimbuUses		PreProc
++hi def link zimbuAttribute	PreProc
++hi def link zimbuString		Constant
++hi def link zimbuChar		Constant
++hi def link zimbuFixed		Constant
++hi def link zimbuComment	Comment
++hi def link zimbuBlockComment	Comment
++hi def link zimbuCblock		Comment
++hi def link zimbuTodo		Todo
++hi def link zimbuParam		Constant
++hi def link zimbuNoBar		Ignore
++hi def link zimbuSpaceError	Error
++hi def link zimbuError		Error
++
++let b:current_syntax = "zimbu"
++
++" vim: ts=8
+diff -Naur vim73.orig/runtime/tools/ccfilter_README.txt vim73/runtime/tools/ccfilter_README.txt
+--- vim73.orig/runtime/tools/ccfilter_README.txt	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/tools/ccfilter_README.txt	2013-06-07 17:07:27.905595660 +0000
+@@ -11,7 +11,7 @@
+     cc -D_IRIX    ccfilter.c -o ccfilter
+     cc -D_SOLARIS ccfilter.c -o ccfilter
+     cc -D_HPUX    ccfilter.c -o ccfilter
+-You can then copy ccfilter to it's target destination (i.e: /usr/local/bin).
++You can then copy ccfilter to its target destination (i.e: /usr/local/bin).
+ The man page ccfilter.1 has to be copied to somewhere in your MANPATH,
+ under a man1 directory (i.e: /usr/local/man/man1).
+ 
+diff -Naur vim73.orig/runtime/tools/efm_perl.pl vim73/runtime/tools/efm_perl.pl
+--- vim73.orig/runtime/tools/efm_perl.pl	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/tools/efm_perl.pl	2013-06-07 17:07:27.935595574 +0000
+@@ -3,7 +3,7 @@
+ # vimparse.pl - Reformats the error messages of the Perl interpreter for use
+ # with the quickfix mode of Vim
+ #
+-# Copyright (©) 2001 by Jörg Ziefle <joerg.ziefle@gmx.de>
++# Copyright (c) 2001 by Joerg Ziefle <joerg.ziefle@gmx.de>
+ # You may use and distribute this software under the same terms as Perl itself.
+ #
+ # Usage: put one of the two configurations below in your ~/.vimrc (without the
+diff -Naur vim73.orig/runtime/tools/vim_vs_net.cmd vim73/runtime/tools/vim_vs_net.cmd
+--- vim73.orig/runtime/tools/vim_vs_net.cmd	2010-05-15 11:04:00.000000000 +0000
++++ vim73/runtime/tools/vim_vs_net.cmd	2013-06-07 17:07:28.038928612 +0000
+@@ -7,12 +7,12 @@
+ @rem      Arguments - +$(CurLine) $(ItemPath)
+ @rem      Init Dir  - Empty
+ @rem
+-@rem Coutesy of Brian Sturk
++@rem Courtesy of Brian Sturk
+ @rem
+ @rem --remote-silent +%1 is a command +954, move ahead 954 lines
+ @rem --remote-silent %2 full path to file
+ @rem In Vim
+-@rem    :h --remote-silent for mor details
++@rem    :h --remote-silent for more details
+ @rem
+ @rem --servername VS_NET
+ @rem This will create a new instance of vim called VS_NET.  So if you
+diff -Naur vim73.orig/runtime/tutor/Makefile vim73/runtime/tutor/Makefile
+--- vim73.orig/runtime/tutor/Makefile	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/Makefile	2013-06-07 17:07:28.122261708 +0000
+@@ -6,7 +6,7 @@
+ # Similarly for Russian and Korean
+ 
+ all: tutor.utf-8 \
+-	tutor.bj \
++	tutor.bar \
+ 	tutor.ca.utf-8 \
+ 	tutor.de.utf-8 \
+ 	tutor.el tutor.el.cp737 \
+@@ -18,6 +18,7 @@
+ 	tutor.it.utf-8 \
+ 	tutor.ja.sjis tutor.ja.euc \
+ 	tutor.ko.euc \
++	tutor.nl \
+ 	tutor.no.utf-8 \
+ 	tutor.nb \
+ 	tutor.nb.utf-8 \
+@@ -28,8 +29,8 @@
+ tutor.utf-8: tutor
+ 	iconv -f ISO-8859-1 -t UTF-8 tutor > tutor.utf-8
+ 
+-tutor.bj: tutor.bj.utf-8
+-	iconv -f UTF-8 -t ISO-8859-1 tutor.bj.utf-8 > tutor.bj
++tutor.bar: tutor.bar.utf-8
++	iconv -f UTF-8 -t ISO-8859-1 tutor.bar.utf-8 > tutor.bar
+ 
+ tutor.ca.utf-8: tutor.ca
+ 	iconv -f ISO-8859-1 -t UTF-8 tutor.ca > tutor.ca.utf-8
+@@ -73,6 +74,9 @@
+ tutor.ko.euc: tutor.ko.utf-8
+ 	iconv -f UTF-8 -t EUC-KR tutor.ko.utf-8 > tutor.ko.euc
+ 
++tutor.nl: tutor.nl.utf-8
++	iconv -f UTF-8 -t ISO-8859-1 tutor.nl.utf-8 > tutor.nl
++
+ tutor.no.utf-8: tutor.no
+ 	iconv -f ISO-8859-1 -t UTF-8 tutor.no > tutor.no.utf-8
+ 
+diff -Naur vim73.orig/runtime/tutor/tutor vim73/runtime/tutor/tutor
+--- vim73.orig/runtime/tutor/tutor	2010-07-27 21:01:53.000000000 +0000
++++ vim73/runtime/tutor/tutor	2013-06-07 17:07:28.172261565 +0000
+@@ -658,7 +658,7 @@
+   4. Type  w TEST  , where TEST is a filename that does not exist yet.  Verify
+      that you see  :'<,'>w TEST  before you press <ENTER>.
+ 
+-  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  !ls
++  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  :!ls
+      to see it.  Do not remove it yet!  We will use it in the next lesson.
+ 
+ NOTE:  Pressing  v  starts Visual selection.  You can move the cursor around
+diff -Naur vim73.orig/runtime/tutor/tutor.bar vim73/runtime/tutor/tutor.bar
+--- vim73.orig/runtime/tutor/tutor.bar	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/tutor/tutor.bar	2013-06-07 17:07:28.202261479 +0000
+@@ -0,0 +1,981 @@
++===============================================================================
++=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7    =
++===============================================================================
++
++   Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
++   vil,  däß myn s allsand  in aynn Schainer  wie dönn daader  unterbräng.  Der
++   Schainer ist yso aufbaut,  däß yr halt netty die Befelh allsand bringt, wost
++   brauchst, däßst mit iem für s Eerste wirklich öbbs anfangen kanst.
++   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dös haisst,
++   wennst di nit grooß mit n Pröbln und Tüftln aufhaltst.
++
++   OBACHT:
++   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort öndern.  Dösswögn
++   machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
++   dös Gwort daader mit n Befelh  "vimtutor bar"  ausherlaassn, ist s ee schoon
++   ayn Aamum.
++   Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Üebn
++   ghoert.  Also muesst schoon aau die Befelh +ausfüern, wennst ys gscheid ler-
++   nen willst. Mit n Lösn yllain ist s +nit taan!
++
++   Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
++   glei aynmaal mit dyr j-Tastn abwärts (yso laaufft dös nömlich),  hinst däßst
++   de gantze Letzn 1.1 auf n Bildschirm haast.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
++
++** Dyrmitst mit n Mörkl umaynandkimmst, druck  h, j, k und l  wie unt zaigt. **
++            ^            Ayn Öslsbrugg:
++            k            De Tastn  h  ist winster und +geet aau gan winster.
++   < h             l >   S  l  leit zesm und richtt si gan zesm.
++            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
++            v            Mit n  k  kimmst gan n KOPF.            
++  1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
++     di sicher füelst.
++  2. Halt d Abhin-Tastn  (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
++     kimmst gan dyr naehstn Letzn.
++     
++  3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
++
++Non öbbs: Allweil, wenn dyr niemer ganz wol ist, wasst öbbenn druckt haast, aft
++          zipfst  <ESC>  ; naacher bist wider ganz gwon in dyr Befelhs-Artweis.
++
++      
++          Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
++          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hörtn" seind ganz dyr-
++          für, däß myn bei +dene bleibt. Pröblt s ainfach aus!
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                        Letzn 1.2: ÖNN WIMM AUSSCHALTTN
++
++
++  ALSO, EE WENNST ÖBBS VON DAA UNT AUSFÜERST,  LIS LIEBER ZEERST DE GANTZE LET-
++  ZN!
++
++  1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
++  
++  2. Demmlt  :q!<EIN>  .
++     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst öbbenn  göndert
++     haast.
++
++  3. Balst önn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
++     gen haat, also   vimtutor bar<EIN>  .
++
++  4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
++     wasst ys Blat verlaasst und aft wider einhinkimmst.
++
++Anmörkung: Mit  :q!<EIN>  verwirffst allss, wasst göndert older enther gschribn
++           haast. In aynn Öttlych Letznen lernst acht, wiest dös allss in ayner
++           Dautticht speichertst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 1.3: GWORT BARECHTN - LÖSCHN 
++
++         
++         ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
++
++  1. Bewög di mit n Mörkl auf de mit  --->  angmörkte Zeil unt.
++
++  2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
++     glöscht ghoert.
++
++  3. Druck de Tastn  x  , däßst dös überflüssige Zaichen löschst.
++
++  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst däß dyr Saz stimmt.
++
++---> De Kkuue sprangg übber nn Maanad.
++
++  5. Wenn ietz de Zeil verbössert ist, geest gan dyr Letzn 1.4. weiter.
++
++Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit öbbenn,
++                   allss auswendig z lernen;  nän, lern ainfach mit n Anwenddn!
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 1.4: GWORT BARECHTN - EINFÜEGN
++
++
++                  **  Druck  i  , dyrmitst öbbs einfüegst. **
++
++  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil, wo mit  --->  angeet.
++
++  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög önn Mörkl  auf dös
++     eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
++
++  3. Druck  i  und gib dös ein, was abgeet.
++
++  4. Wenn ieweils ayn Faeler verweitert ist, aft druck   <ESC>  ; dyrmit kimmst
++     gan dyr Befelhsartweis zrugg.
++     So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
++
++---> Daader gt dd öbbs b.
++---> Daader geet diend öbbs ab.
++
++  5. Balst mainst,  däßst ys Gwort-Einfüegn kanst, aft geest gan dyr Letzn 1.5.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 1.5: GWORT BARECHTN - ANFÜEGN
++
++
++                      ** Druck  A  gan n Gwort Anfüegn. **
++
++  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn  --->  dyrvor haat.
++     Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
++
++  2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
++
++  3. Wennst mit n Anfüegn förtig bist, aft druckst  <ESC>  , däßst wider eyn de
++     Befelhsartweis zruggkimmst.
++
++  4. So,  und ietz geest aft non gan dyr zwaittn mit  --->  angmörktn Zeil; und
++     daadl machst ys netty yso.
++
++---> In derer Zeil gee  
++     In derer Zeil geet ayn Weeng ayn Gwort ab.
++---> Aau daader stee
++     Aau daader steet öbbs Unvollstöndigs. 
++
++  5. Wennst s Anfüegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 1.6: AYN DAUTTICHT BARECHTN
++
++
++     ** Mit  :wq  speichertst ayn Dautticht und verlaasst önn Wimm ganz. **
++
++  !! OBACHT:  Ee wennst mit dönn alln daa unt weitertuest, lis zeerst de gantze
++     Letzn durch!!
++
++  1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
++
++  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer<EIN>  . 'vim' ruefft s Blat
++     auf,  und  'Schainer'  haisst de Dautticht,  wost barechtn willst.  Dyrmit
++     haast also ayn Dautticht, dö wost barechtn kanst.
++
++  3. Ietz  füegst öbbs ein older löschst öbbs,  wiest ys in de vorignen Letznen
++     glernt haast.
++
++  4. Speichert de gönderte Dautticht und verlaaß önn Wimm mit  :wq<EIN>  .
++
++  5. Schmeiß önn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
++
++  6. Aft däßst  de obignen Schritt glösn und käppt haast,  kanst ys durchfüern.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 1
++
++
++  1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
++              h (winst)     j (ab)        k (auf)       l (zes)
++
++  2. Um önn Wimm umbb n Eingib aus z ginnen, demmlt:  vim DAUTTICHT<EIN>  .
++
++  3. Willst önn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
++                <ESC>  und  :q!<EIN>  .
++     Gan n Verlaassn und Speichern aber zipfst  <ESC>  und  :wq<EIN>  .
++
++  4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
++
++  5. Willst öbbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
++     Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
++     Und ainfach naach n Mörkl füegst ys mit  a  ein.
++
++Anmörkung:  Druckst  <ESC>  ,  kimmst eyn de Befelhsartweis zrugg older brichst
++            ayn Faudung ab, dö wo dyr schiefgangen ist.
++
++     Ietz tue mit dyr Letzn 2 weiter.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                           Letzn 2.1.: LÖSHFAUDUNGEN
++
++
++                 ** Demmlt  dw  , dyrmitst ayn Wort löschst. **
++
++  1. Druck  <ESC>  ,  dyrmit s aau gwiß ist,  däßst in dyr Befelhsartweis bist.
++
++  2. Bewög önn Mörkl zo dyr mit  --->  angmörktn Zeil unt.
++
++  3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
++
++  4. Zipf  dw  , däßst dös gantze Wort löschst.
++
++  Nöbnbei:  Dyr Buechstabn  d  erscheint auf dyr lösstn Zeil  von n Bildschirm,
++            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, däß öbbs kimmt, al-
++            so  daader ayn  w  .  Seghst  freilich  öbbs Anderts  wie ayn  d  ,
++            naacherd haast  öbbs Falschs  demmlt.  Druck aft  <ESC>  und pröblt
++            s non aynmaal.
++---> Ayn Öttlych Wörter lustig ghoernd nit Fisper eyn dönn Saz einhin.
++
++  5. Äfert  d Schritt  3 und 4,  hinst däß  dyr Saz pässt,  und gee aft gan dyr
++     Letzn 2.2.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 2.2.: NON MEERER LÖSHFAUDUNGEN
++
++
++            ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
++
++  1. Druck  <ESC>  , dyrmitst aau gwiß in dyr Befelhsartweis bist.
++
++  2. Bewög önn Mörkl hinst eyn de mit  --->  angmörkte Zeil untn.
++
++  3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
++
++  4. Zipf  d$  , däßst hinst eyn s End von dyr Zeil löschst.
++  
++---> Öbber haat s End von dyr Zeil doplt eingöbn. doplt eingöbn.
++
++
++  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                        Letzn 2.3: PFEMERER UND WOLENDER
++
++
++  Vil Faudungen,   wo s Gwort öndernd, sötznd si aus aynn Pfemerer und aynn Wo-
++  lend zamm. Bal i also öbbs löschn will, schreib i ainsting  d  und aft s "Wo-
++  lend", dös haisst also, "wolend", "wohin" däß i will - older was i halt gnaun
++  löschn will.
++
++
++
++
++
++
++  Daader also, was i wie löschn kan:
++     w  -  hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
++     e  -  gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
++     $  -  zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
++
++  Also löscht de Tastnfolg  de  allss umbb n Mörkl hinst eyn s Wortend.
++Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
++             entspröchet weiter.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Letzn 2.4: MIT AYNN ZÖLER D WOLENDER ÄFERN
++
++
++ ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel entspröchet oft gangen. **
++
++  1. Bewög önn Mörkl gan n Anfang von dyr Zeil mit  --->  dyrvor unt.
++
++  2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
++
++  3. Zipf  3e  , däßst mit n Mörkl auf s End von n drittn Wort kimmst.
++
++  4. Zipf  0  (aynn Nuller), däßst eyn n Anfang von dyr Zeil hinkimmst.
++
++  5. Widerhol d Schritt 2 und 3 mit verschaidne Zöler.
++
++  ---> Dös ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
++
++  6. Gee weiter gan dyr Letzn 2.5.
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                 Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
++
++
++        ** Ayn Zal vor aynn Pfemerer füert dönn entspröchet oft aus. **
++
++  Also, i mecht löschn,  und zwaar öbbs Bestimmts,  und dös so und so oft:  Daa
++  dyrzue benutz i aynn Zöler:
++                              d  Zöler  Wolend (also önn Bewögungsschrit)
++
++  1. Bewög önn Mörkl zo n eerstn Wort in GROOSSBUECHSTABN in dyr mit  --->  an-
++     gmörktn Zeil.
++
++  2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
++
++  3. Äfert  d Schritt 1 und 2  mit dönn entspröchetn Zöler,  dyrmitst de drauf-
++     folgetn  ganz großgschribnen Wörter  mit ayner ainzignen Faudung  löschst:
++
++
++--->  Dö ABC DE Zeil FGHI JK LMN OP mit Wörter ist Q RS TUV ietz berichtigt.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                          Letzn 2.6: ARECHTN AUF ZEILN
++
++
++               ** Zipf  dd  , um ayn gantze Zeil z löschn. **
++
++  Weil s gro oft vürkimmt,  däß myn gantze Zeiln löscht,  kaamend schoon d Ent-
++  wickler von n Urwimm daa drauf,  däß myn ainfach  dd  gan dönn Zwök schreibt.
++
++
++  1. Bewög önn Mörkl gan dyr zwaittn Zeil in n untignen "Gedicht".
++  2. Zipf  dd  ,  um dö Zeil z löschn.
++  3. Ietz bewögst di gan dyr viertn Zeil.
++  4. Zipf  2dd  , um zwo Zeiln zo n Löschn.
++
++--->  1)  Roosn seind root;
++--->  2)  Drunter ist s Koot.
++--->  3)  Veigerln seind blau.
++--->  4)  Umgrabn tuet s d Sau.
++--->  5)  D Ur sait de Zeit,
++--->  6)  Sait, däß s mi freut,
++--->  7)  Dirndl, dein Gschau.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                     Letzn 2.7: RUGGGÖNGIG MACHEN (RUGGLN) 
++
++
++             ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
++             ** older   U  , um ayn gantze Zeil widerherzstölln. **
++
++  1. Bewög önn Mörkl gan dyr mit  --->  angmörktn Zeil unt und gee dyrmit auf n
++     eerstn Faeler.
++  2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
++  3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
++  4. Ietz behöb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
++  5. Aft gibst ayn  U  (grooß) ein,  däßst de Zeil wider yso hinbringst,  wie s
++     gwösn ist.
++  6. So,  und ietz  demmltst  so oft  u  , hinst däßst s  U  und de andern Fau-
++     dungen rugggöngig gmacht haast.
++  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst däßst  allsand Be-
++     felh widerhergstöllt, z haissn allsse rugg-grugglt haast  (also d Rugggön-
++     gigmachungen rugggöngig gmacht).
++---> Beerichtig d Faeller voon dehrer Zeiil  und sttöll s mitt n Ruggruggln wi-
++     der her.
++  8. Die Faudungen seind gro wichtig; sö helffend ainn närrisch weiter.
++     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 2
++
++
++  1. Um von n Mörkl aus hinst eyn s naehste Wort zo n Löschn, zipf:  dw
++  2. Um umbb n Mörkl hinst eyn s End von dyr Zeil zo n Löschn, demmlt  d$
++  3. Dyrmitst ayn gantze Zeil löschst, gib ein:  dd
++  4. Mechst ayn Bewögung, ayn "Wolend", öfters,  stöll de entspröchete Zal dyr-
++     vor:  3dw  older aau:  d3w
++  5. Dyr Pfueg für ayn Önderungsfaudung lautt yso:
++               Pfemerer   [Zal]   Bewögungsschrit (Wolend)
++     Und dös haisst:
++      Dyr PFEMERER gibt an, WAS taan ghoert, öbbenn   d   =  löschn (»delete«).
++      [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend öfter habn will.
++      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  öbbenn
++      auf aynn Wortanfang (  w  ), s End von dyr Zeil (  $  ) und so weiter.
++
++  6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
++
++  7. Um öbbs Vorigs wider z ruggln, gib ein:                u (klain also)
++     Um allsand Önderungen in ayner Zeil z ruggln, haast:   U (also grooß)
++     Um "rugg-z-ruggln", also allss wider herzstölln, zipf:  <STRG>r   
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                           Letzn 3.1: ANFÜEGN (»put«) 
++
++
++     ** Zipf  p  , dyrmitst öbbs gnetty Glöschts naach n Mörkl anfüegst. **
++
++  1. Bewög önn Mörkl gan dyr eerstn untignen Zeil mit  --->  dyrvor.
++
++  2. Zipf  dd  ,  um sele Zeil z löschn und dyrmit in ayner Wimm-Osn zo n Spei-
++     chern.
++
++  3. Bewög önn Mörkl gan dyr Zeil c),  ÜBER derer, daa wo de glöschte Zeil ein-
++     hinkemmen sollt.
++
++  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dö Zeil unter derer
++     mit n Mörkl drinn.
++  5. Äfert  d Schritt 2 hinst 4,  hinst däßst  allsand Zeiln  yso naachynaynand
++     haast, wie s hinghoernd.
++
++---> d) Kanst du dös aau?
++---> b) Veigerln seind blau.
++---> c) Bedachtn kan myn lernen.
++---> a) Roosn seind root.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         Letzn 3.2: ERSÖTZN (»replace«)
++
++
++      ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
++
++  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil mit  --->  dyrvor.
++
++  2. Bewög önn Mörkl, hinst däß yr auf n eerstn Faeler steet.
++
++  3. Zipf  r  und drafter dös Zaichen, wo dyrfür daa hinghoert.
++
++  4. Widerhol d Schritt 2 und 3,  hinst däßst de eerste Zeil  gmaeß dyr zwaittn
++     berichtigt haast:
++--->  Wie dö Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
++--->  Wie dö Zeil eingöbn wurd, wurdnd ainige falsche Tastnen zipft!
++
++  5. Ietz tue mit dyr Letzn 3.3 weiter.
++
++Anmörkung: Vergiß nit drauf, däßst mit n Anwenddn lernen solltst und nit öbbenn
++           mit n Auswendiglernen!
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                          Letzn 3.3: ÖNDERN (»change«)
++
++
++              ** Um hinst eyn s Wortend z öndern, zipf  ce  . **
++
++  1. Gee mit n Mörkl auf de eerste mit  --->  angmörkte Zeil.
++
++  2. Ietz farst netty auf s  "s"  von Wstwr hin.
++
++  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  örter  .
++
++  4. Druck  <ESC>  und bewög önn Mörkl zo n naehstn Zaichen, wo göndert ghoert.
++
++  5. Äfert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
++
++---> Ainige Wstwr von derer Zlww ghhnnd mit n Öndern-Pfemerer gaauu.
++---> Ainige Wörter von derer Zeil ghoernd mit n Öndern-Pfemerer göndert.
++
++ce  löscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                  Letzn 3.4.: NON MEERER ÖNDERUNGEN PFELFS  c
++
++
++   ** D Löshfaudung  c  arechtt mit de nömlichnen Wolender wie dö mit  d  **
++
++  1. Dyr Önder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
++     yso:
++         c    [Zal]   Bewögungsschrit (Wolend)
++
++  2. D Wolender seind  de gleichn,  öbbenn  w  für Wort und  $  für s Zeilnend.
++
++
++  3. Bewög di zo dyr eerstn untignen Zeil mit  --->  .
++
++  4. Ietz geest auf dönn eerstn Faeler.
++
++  5. Zipf  c$  , gib önn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
++     <ESC>.
++---> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
++---> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
++
++Denk allweil dran,  däßst iederzeit  mit dyr Ruggtastn Faeler ausbössern kanst.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 3
++
++
++  1. Um ayn  vorher glöschts Gwort  anzfüegn,  zipf  p  .  Daa dyrmit  werd dös
++     gantze Gwort  NAACH n Mörkl  angfüegt.  Wenn s ayn gantze Zeil  gwösn ist,
++     werd dö sel als de Zeil unterhalb n Mörkl eingfüegt.
++
++  2. Um dös Zaichen  unter n Mörkl,  also wo dyr Mörkl ist,  z ersötzn, zipf  r
++     und aft dös Zaichen, wost daadl habn willst.
++
++  3. Dyr Önderungspfemerer ( c = »change«) laasst ainn umbb n Mörkl hinst eyn s
++     End von n Wolend öndern. Zipf  ce  , dyrmitst umbb n Mörkl hinst eyn s End
++     von n Wort öndertst, und  c$  hinst eyn s End von dyr Zeil.
++
++  4. Für d Önderung lautt dyr Pfueg:
++
++     c   [Zal]   Wolend
++
++Ietz tue mit dyr naehstn Letzn weiter.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                 Letzn 4.1: MÖRKLSTÖLLUNG UND DAUTTICHTDARSTAND
++
++** Demmlt <STRG>g, däßst önn Befand und Darstand von dyr Dautticht anzaigst. **
++  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
++
++Anmörkung: Lis dö gantze Letzn daader durch, ee wennst iewign öbbs unternimmst!
++
++  1. Druck  <STRG>g  .  Auf dös hin erscheint auf derer Seitt ganz unt ayn Dar-
++     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
++     Mörk dyr de Zeilnnummer für n Schrit 3.
++
++Anmörkung:  Müglicherweis  seghst aau önn Mörklbefand  in n zesmen untern Bild-
++            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt;  meerer über dös
++            laasst dyr dyr Befelh   :help 'ruler'   ausher.
++  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
++     gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
++
++  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
++     Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
++     Maal  <STRG>g  gadruckst.
++
++  4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
++               
++
++  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
++
++  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
++     Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
++
++  2. Ietz zipf  Faeeler<EIN>  . Netty um dös 'Faeeler' willst ietz suechen.
++
++  3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie »next«).
++     Willst hinzrugg suechen, aft gibst  N  ein.
++
++  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
++
++  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, nimm  <STRG>o , und dös
++     öfter,  wennst weiter zrugg willst. Mit  <STRG>i  widerum kimmst vorwärts.
++
++--->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
++
++Anmörkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
++            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wär auf aus.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 4.3: DE GÖGNKLAMMERN FINDDN
++
++
++   ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
++
++  1. Sötz önn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
++     in dyr untignen Zeil, wo mit  --->  angmörkt ist.
++
++  2. Ietzet zipf s Zaichen  %  .
++
++  3. Dyr Mörkl geet ietz auf de pässete schliessete Klammer.
++
++  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr öffneretn Klammer zrugg.
++
++  5. Sötz önn Mörkl auf ayn anderne Klammer von   ({[]})   und pröblt   %  aus.
++
++---> Dös ( ist  blooß ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
++
++Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
++            Spaichgwort verzweiflt ayn faelete Gögnklammer suechst!
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                 Letzn 4.4: D ERSÖTZUNGSFAUDUNG (»substitute«)
++
++
++        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
++
++  1. Gee mit n Mörkl zo dyr unt steehetn mit  --->  angmörktn Zeil.
++
++  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
++     wo vürkimmt.
++
++  3. Ietz pröblt s mit  :s/dee/de/g  . Dös zuesötzliche  g  ("Pflok"  nennt myn
++     öbbs Sölchers) bewirkt, däß allss, was dyrmit kennzaichnet ist,  innerhalb
++     von dyr ainn Zeil ersötzt werd.
++
++---> Dee schoenste Zeit, däß myn dee Blüemln anschaut, ist dee schoene Lan-
++     gesszeit.
++  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Öndern,  zipf
++     :#,#s/alt/neu/g  ,  wobei # ieweils für de eerste und lösste Zeil von dönn
++     Pfraich steet.
++     :%s/alt/neu/g  zipfst, däßst d Vürkemmen in dyr gantzn Dautticht öndertst.
++        Mit  :%s/alt/neu/gc  finddst allsand Vürkemmen in dyr gsamtn Dautticht;
++     daa werst aber zeerst non gfraagt, obst ys ersötzn willst older nity.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 4
++                        
++  1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und önn Darstand dyrvon an.
++           G   bringt di an s End von dyr Dautticht.
++      <Zal>G   bringt di gan dyr entspröchetn Zeilnnummer.
++     <Zal>gg   geet +grad yso.
++          gg   bringt di zo dyr eerstn Zeil.
++  2. D Eingaab von  /  mit aynn Ausdruk suecht VÜRSHLING um dönn Ausdruk.
++     Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn ÄRSHLING.
++     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
++     gsuecht. Mit  N  geet s umkeerter weiter.
++     <STRG>o  bringt di zo ölterne Befändd zrugg,  <STRG>i  zo neuerne.
++
++  3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
++     )]}  , bringt di zo dyr Gögnklammer.
++
++  4. Um dös eerste Vürkemmen von  "alt"  in ayner Zeil durch  "neu"  z ersötzn,
++     zipf  :s/alt/neu  .
++     Um allsand in ayner Zeil z ersötzn, zipf  :s/alt/neu/g  .
++     Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
++     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:  :%s/alt/neu/g    .
++     Willst ayn ieds Maal bstaetln, höng 'c' wie »confirm« hint anhin.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÜERN 
++            
++
++   ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach  :!  ein. **
++ 
++  1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
++     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
++
++  2. Zeerst  kimmt aber non ayn Ruefzaichen   !  .  Und ietzet haast d Müglich-
++     keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
++
++  3. Als Beispil zipf   :!ls<EIN>  ;  und schoon haast ayn Auflistung von deinn
++     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
++     aus iewign aynn Grund nit, aft pröblt s mit  :!dir<EIN>  .
++
++Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
++                  gfüert werdn, aau mit Auerwerdd.
++
++Und wolgmörkt:    Alle Befelh,  wo mit  :  angeend,  müessend mit  <EIN>  bstö-
++                  tigt werdn. Dös dyrsagn myr fürbaß +niemer.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++           Letzn 5.2: NON MEERER DRÜBER, WIE MYN DAUTTICHTN SCHREIBT
++
++
++     ** Um öbbs Gönderts neu z speichern, zipf  :w NEUER_DAUTTICHTNAM  . **
++
++  1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
++     niss ausherlaasst. Däßst drafter  <EIN>  eingöbn muesst, waisst ee schoon.
++
++  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, öbbenn  POCH  .
++
++  3. Ietz demmlt:  :w POCH  (also mit POCH als dönn neuen Dauttichtnam).
++
++  4. Dös speichert ietz de gantze Dautticht, also önn Wimmschainer,  unter dönn
++     Nam POCH. Dös kanst leicht überprüeffen, indem däßst ainfach  :!ls   older
++     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
++
++Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH  ,
++            naacherd wär dö Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
++            wiest n gspeichert haast.
++
++  5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
++     beziehungsweis bei aynn Unixgebäu mit   :!rm POCH   .
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
++
++** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
++
++  1. Ruck önn Mörkl auf netty dö Zeil daader.
++
++  2. Demmlt  v  und gee mit n Mörkl  auf dönn fümftn Auflistungspunt untet.  Du
++     seghst glei, däß s Gwort vürherghöbt erscheint.
++
++  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
++
++  4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
++     däßst dös  :'<,'>w POCH  aau +seghst, ee wennst  <EIN>  druckst.
++
++  5. Dyr Wimm schreibt de ausgwaltn Zeiln eyn de Dautticht POCH einhin.  Benutz
++     :!dir  older  :!ls  ,  däßst dös überprüeffst. Lösh s fein nit öbbenn! Mir
++     brauchend s nömlich für de naehste Letzn.
++
++Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
++            aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
++            Pfemerer mit dönn Gwort öbbs machen.  Zo n Beispil löscht   d   dös
++            Gwort.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++               Letzn 5.4: EINLÖSN UND ZAMMENFÜERN VON DAUTTICHTN   
++
++
++    ** Um önn Inhalt von ayner Dautticht einzlösn, zipf  :r DAUTTICHTNAM  **
++
++  1. Sötz önn Mörkl über dö Zeil daader.
++
++OBACHT:  Aft däßst önn Schrit 2  ausgfüert haast,  seghst auf aynmaal  öbbs aus
++         dyr Letzn 5.3.  Bewög di naacherd wider abwärts, dyrmitst dö Letzn wi-
++         derfinddst.
++  2. Ietz  lis  dein Dautticht  POCH ein,  indem däßst d Faudung   :r POCH aus-
++     füerst,  wobei wie gsait POCH  für dönn  von dir  ausgsuechtn Dauttichtnam
++     steet. De einglösne Dautticht werd unterhalb dyr Mörklzeil eingfüegt.
++
++  3. Um zo n Überprüeffen,  ob de Dautticht  aau gwiß einglösn ist,  gee zrugg;
++     und du seghst,  däß s ietz zwo Ausförtigungen  von dyr Letzn 5.3. geit,  s
++     Urniss und de eingfüegte Dauttichtfassung.
++
++Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei-
++            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und füegt s
++            unterhalb n Mörkl ein.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 5
++
++
++  1. :!FAUDUNG  füert aynn ausserignen Befelh aus.
++
++      Daader ayn Öttlych gwänddte Beispiler:
++      (Fenstl)              (Unix - Linux)
++      :!dir                 :!ls                - listt s Verzaichniss auf.
++      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
++
++  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dönn besagtn Nam.
++
++  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
++     Dautticht mit seln Nam.
++
++  4. :r DAUTTICHTNAM  ladt sele Dautticht  und füegt s  unterhalb n Mörklbefand
++     ein.
++
++  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und füegt s  unterhalb n
++     Mörklbefand ein.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                        Letzn 6.1: ZEIL ÖFFNEN (»open«)
++
++
++       ** Zipf  o  , um ayn Zeil unterhalb n Mörkl z öffnen und eyn d **
++                        ** Einfüegartweis z kemmen. **
++
++  1. Bewög önn Mörkl zo dyr eerstn mit  --->  angmörktn Zeil unt.
++
++  2. Zipf  o  (klain),  um ayn Zeil UNTERHALB n Mörkl z öffnen und mit dyr Ein-
++     füegartweis weiterztuen.
++
++  3. Ietzet zipf ayn Weeng öbbs  und druck  <ESC>  , um d Einfüegartweis z ver-
++     laassn.
++---> Mit  o  werd dyr Mörkl in dyr Einfüegartweis auf de offene Zeil gsötzt.
++
++  4. Um ayn Zeil  OBERHALB n Mörkl aufzmachen,  gib ainfach ayn groosss O statt
++     yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
++
++---> Öffnet ayn Zeil über derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
++     ist.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 6.2: GWORT ANFÜEGN (»append«)
++
++
++                ** Zipf  a  , um öbbs NAACH n Mörkl einzfüegn. **
++
++  1. Bewög önn Mörkl gan n Anfang von dyr eerstn Üebungszeil mit  --->  unt.
++
++  2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
++
++  3. Zipf ayn klains  a  , um öbbs NAACH n Mörkl anzfüegn.
++
++  4. Vergöntz dös Wort  wie in dyr Zeil drunter.  Druck  <ESC>  , um d Schreib-
++     Artweis z verlaassn.
++
++  5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
++     4.
++
++---> Dö Ze biett ayn Glögn , ayn Gwort in ayner Zeil anzfü.
++---> Dö Zeil biett ayn Glögnet, ayn Gwort in ayner Zeil anzfüegn.
++
++Anmörkung:   a  ,  i  und  A  bringend ainn gleichermaaßn eyn d Einfüegartweis;
++             dyr ainzige Unterschaid ist, WO mit n Einfüegn angfangt werd.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÖTZN (»replace«)
++
++
++ ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
++
++  1. Bewög önn Mörkl zo dyr eerstn untignen, mit  --->  angmörktn Zeil.
++     Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
++
++  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
++     yso däß de sel s xxx ersötzt.
++
++  3. Druck  <ESC>  ,  um d Ersötzungsartweis z verlaassn.  Du gspannst, däß dyr
++     Rest von dyr Zeil unveröndert bleibt.
++
++  4. Äfert die Schritt, um dös überblibne xxx z ersötzn.
++
++---> S Zunddn von 123 zo xxx ergibt xxx.
++---> S Zunddn von 123 zo 456 ergibt 579.
++
++Anmörkung: D Ersötzungsartweis ist wie d Einfüegartweis,  aber ayn ieds eindem-
++           mlte Zaichen löscht ayn vorhanddns.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 6.4: GWORT AAMEN UND EINFÜEGN
++
++ ** Benutz önn Pfemerer  y  , um öbbs z aamen, und  p  , um öbbs einzfüegn. **
++
++  1. Gee zo dyr mit  --->  angmörktn Zeil unt  und sötz önn Mörkl  hinter "a)".
++
++  2. Ginn d Sichtisch-Artweis mit   v   und bewög önn Mörkl gnaun vor "eerste".
++  
++  3. Zipf  y  , um dönn vürherghöbtn Tail z aamen.
++
++  4. Bewög önn Mörkl gan n End von dyr naehstn Zeil:  j$
++
++  5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
++
++  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln, aam s mittls  y  , be-
++     wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
++     p  an.
++
++--->  a) dös ist dyr eerste Eintrag.
++      b)
++Anmörkung:   Du kanst   y   aau als Pfemerer verwenddn;   yw  zo n Beispil aamt
++             hinst eyn n naehstn Wortanfang (aane dönn selber).
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                           Letzn 6.5: SCHALTTER SÖTZN
++
++** Sötz aynn Schaltter yso,  däß ayn Suech older Ersötzung Grooß- und Klain- **
++                            ** schreibung übergeet. **
++                            
++  1. Suech um 'übergee", indem däßst   /übergee   eingibst.
++     Widerhol d Suech ayn Öttlych Maal, indem däßst de Tastn  n  druckst.
++
++  2. Sötz de Zwisl - önn Schaltter - 'ic' (»ignore case«), indem däßst  :set ic
++     eingibst.
++  3. Ietz suech wider um 'übergee' und tue aau wider mit  n  weiter.  Daa fallt
++     dyr auf, däß ietz öbbenn aau  Übergee  und  ÜBERGEE  hergeet.
++
++  4. Sötz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
++
++  5. Widerhol d Suech und bobacht, was ietz gschieght:   /übergee <EIN>
++
++  6. Däßst grooß und klain wider gwon unterscheidst, zipf:   :set noic
++
++Anmörkung:  Mechst de Tröffer niemer vürherghöbt seghn,  gib ein:   :nohlsearch
++Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \c
++            in n Suechausdruk:   /übergee\c <EIN>
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 6
++
++  1. Zipf  o  , um ayn Zeil  UNTERHALB  n Mörkl z öffnen und d Einfüegartweis z
++                ginnen.
++     Zipf  O  , um ayn Zeil OBERHALB n Mörkl z öffnen.
++
++  2. Zipf  a  , um NAACH n Mörkl ayn Gwort einzfüegn.
++     Zipf  A  , um ayn Gwort naach n Zeilnend anzfüegn.
++
++  3. D Faudung  e  bringt di gan n End von aynn Wort.
++
++  4. Dyr Pfemerer  y  (»yank«) aamt öbbs,  p  (»put«) füegt dös ein.
++
++  5. Ayn groosss  R  geet eyn d Ersötzungsartweis, hinst däß myn  <ESC> druckt.
++
++  6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Öttlych Zwisln seind:
++     'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
++     'is' 'incsearch'    Zaig aau schoon ayn Tailüberainstimmung
++     'hls' 'hlsearch'    Höb allsand pässetn Ausdrück vürher
++     Dyr Schaltternam kan in dyr Kurz- older Langform angöbn werdn.
++
++  7. Stöll yn ayner Zwisl "no" voran, däßst ys abschalttst:   :set noic
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
++
++
++           ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung". **
++
++  Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
++  pröblt ainfach ains von dene dreu aus:
++    - Druck d <HILF>-Tastn, wennst öbbenn aine haast.
++    - Druck de Tastn <F1>, fallsst ys haast.
++    - Zipf   :help <EIN>
++
++  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dös mit dyr Hilf geet.
++  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
++  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
++
++  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
++  :help  aynn Auerwerd naachstöllst und istig  <EIN>  nit vergisst. Pröblt dös:
++
++     :help w
++     :help c_CTRL-D
++     :help insert-index
++     :help user-manual
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
++
++
++              ** Mutz önn Wimm mit de einbautn Faehigkeitn auf. **
++
++  Dyr Wimm besitzt ayn Wösn Schäftungen,  wo über n Urwimm aushingeend, aber de
++  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
++  ausherholst, erstöllst ayn "vimrc"-Dautticht.
++
++  1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
++     :e ~/.vimrc     für s Unix
++     :e $VIM/_vimrc  bei n Fenstl
++
++  2. Ietz lis önn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
++     :r $VIMRUNTIME/vimrc_example.vim
++
++  3. Speichert de Dautticht mit:
++     :w
++
++  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung zuegschalttn.
++     Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
++     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                              Letzn 7.3: VERGÖNTZN
++
++
++            ** Befelhszeilnvergöntzung mit  <STRG>d  und  <TAB>  **
++
++  1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
++
++  2. Schaug naach, wölcherne Dauttichtn däß s in n Verzaichniss geit:   :!ls
++     older   :!dir
++  3. Zipf önn Anfang von ayner Faudung:   :e
++
++  4. Druck  <STRG>d  , und dyr Wimm zaigt ayn Listn von Faudungen, wo mit   "e"
++     angeend.
++  5. Druck  <TAB>  , und dyr Wimm vervollstöndigt önn Faudungsnam zo   ":edit".
++
++  6. Füeg  ayn Laerzaichen  und önn Anfang  von ayner  besteehetn Dautticht an:
++     :edit DAU
++
++  7. Druck  <TAB>  . Dyr Wimm vergöntzt önn Nam, dös haisst, wenn yr aindeuttig
++     ist.
++Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
++            <STRG>d  und  <TAB>  . Bsunders nützlich ist dös bei   :help  .
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 7
++
++
++  1. Zipf  :help  oder druck  <F1>  oder  <HILF> , um ayn Hilffenster z öffnen.
++
++  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
++
++  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
++
++  4. Zipf  :q  , um s Hilffenster z schliessn.
++
++  5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
++
++  6. Druck  <STRG>d  , aft däßst naach   :   ayn Faudung  angfangt haast,  dyr-
++     mitst mügliche Vergöntzungen anzaigt kriegst.
++     Druck  <TAB>  für ain Vervollstöndigung yllain.
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++  Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
++  und bündignen Überblik  über s Blat WIMM z lifern,  netty vil gnueg,  däß myn
++  für s Eerste  wirklich öbbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
++  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
++  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual
++
++  Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
++    Vim - Vi Improved - von n OUALLINE Steve
++    Verlaag: New Riders
++  Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
++  Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
++  See http://iccf-holland.org/click5.html
++
++  Dös folgete Buech  ist schoon ölter und meerer  über n Urwimm  als wie über n
++  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
++  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
++  3897211262
++  In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
++  De söxte Ausgaab enthaltt aau schoon öbbs über n Wimm.
++  Als ietzunde Bezugniss für d Fassung 7  und ayn pfrenge Einfüerung  dient dös
++  folgete Buech:
++    vim ge-packt  von n WOBST Reinhard
++    mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
++  Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
++  spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
++  seind zesig zo n Kriegn; see   http://iccf-holland.org/click5.html
++
++  Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
++  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
++  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
++  zuer Verfüegung gstöllt haat. Gundpost:   bware@mines.colorado.edu
++  Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
++  De bairische Übersötzung  stammt von n HELL Sepp 2009,  ayn Weeng überarechtt
++  2011. Sein Gundpostbrächt ist   sturmibund@t-online.de
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.bar.utf-8 vim73/runtime/tutor/tutor.bar.utf-8
+--- vim73.orig/runtime/tutor/tutor.bar.utf-8	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/tutor/tutor.bar.utf-8	2013-06-07 17:07:28.228928070 +0000
+@@ -0,0 +1,981 @@
++===============================================================================
++=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7    =
++===============================================================================
++
++   Dyr Wimm ist ayn gro mÃ€chtigs Blat, dÃ¶s was mit aynn WÃ¶sn Befelh aufwartt; z
++   vil,  dÃ€Ã myn s allsand  in aynn Schainer  wie dÃ¶nn daader  unterbrÃ€ng.  Der
++   Schainer ist yso aufbaut,  dÃ€Ã yr halt netty die Befelh allsand bringt, wost
++   brauchst, dÃ€Ãst mit iem fÃŒr s Eerste wirklich Ã¶bbs anfangen kanst.
++   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dÃ¶s haisst,
++   wennst di nit grooÃ mit n PrÃ¶bln und TÃŒftln aufhaltst.
++
++   OBACHT:
++   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort Ã¶ndern.  DÃ¶sswÃ¶gn
++   machst eyn n BÃ¶stn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
++   dÃ¶s Gwort daader mit n Befelh  "vimtutor bar"  ausherlaassn, ist s ee schoon
++   ayn Aamum.
++   Mir kan s  nit oft gnueg  sagn,  dÃ€Ã  der Schainer daader  istig  gan n Ãebn
++   ghoert.  Also muesst schoon aau die Befelh +ausfÃŒern, wennst ys gscheid ler-
++   nen willst. Mit n LÃ¶sn yllain ist s +nit taan!
++
++   Ietz schaust grad non, dÃ€Ã dein FÃ¶ststÃ¶lltastn nit druckt ist; und aft geest
++   glei aynmaal mit dyr j-Tastn abwÃ€rts (yso laaufft dÃ¶s nÃ¶mlich),  hinst dÃ€Ãst
++   de gantze Letzn 1.1 auf n Bildschirm haast.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 1.1: MIT N MÃRKL UMAYNANDFARN
++
++** Dyrmitst mit n MÃ¶rkl umaynandkimmst, druck  h, j, k und l  wie unt zaigt. **
++            ^            Ayn Ãslsbrugg:
++            k            De Tastn  h  ist winster und +geet aau gan winster.
++   < h             l >   S  l  leit zesm und richtt si gan zesm.
++            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
++            v            Mit n  k  kimmst gan n KOPF.            
++  1. Ietz ruedertst ainfach mit n MÃ¶rkl auf n Bildschirm umaynand,  hinst dÃ€Ãst
++     di sicher fÃŒelst.
++  2. Halt d Abhin-Tastn  (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
++     kimmst gan dyr naehstn Letzn.
++     
++  3. Wie gsait, ietz bewÃ¶gst di also mit derer Tastn gan dyr Letzn 1.2.
++
++Non Ã¶bbs: Allweil, wenn dyr niemer ganz wol ist, wasst Ã¶bbenn druckt haast, aft
++          zipfst  <ESC>  ; naacher bist wider ganz gwon in dyr Befelhs-Artweis.
++
++      
++          NÃ¶bnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
++          hjkl  seind z haissn s Wimm-Urgstain;  und de "HÃ¶rtn" seind ganz dyr-
++          fÃŒr, dÃ€Ã myn bei +dene bleibt. PrÃ¶blt s ainfach aus!
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                        Letzn 1.2: ÃNN WIMM AUSSCHALTTN
++
++
++  ALSO, EE WENNST ÃBBS VON DAA UNT AUSFÃERST,  LIS LIEBER ZEERST DE GANTZE LET-
++  ZN!
++
++  1. Druck d <ESC>-Tastn, dyrmitst aau gwiÃ in dyr Befelhs-Artweis bist.
++  
++  2. Demmlt  :q!<EIN>  .
++     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst Ã¶bbenn  gÃ¶ndert
++     haast.
++
++  3. Balst Ã¶nn Eingib seghst, gib dÃ¶ Faudung ein,  wo di zo dÃ¶nn Schainer brun-
++     gen haat, also   vimtutor bar<EIN>  .
++
++  4. Also, wenn ietz allsse sitzt, naacherd fÃŒerst d Schritt 1 hinst 3 aus, mit
++     wasst ys Blat verlaasst und aft wider einhinkimmst.
++
++AnmÃ¶rkung: Mit  :q!<EIN>  verwirffst allss, wasst gÃ¶ndert older enther gschribn
++           haast. In aynn Ãttlych Letznen lernst acht, wiest dÃ¶s allss in ayner
++           Dautticht speichertst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 1.3: GWORT BARECHTN - LÃSCHN 
++
++         
++         ** Druck  x  , dyrmitst dÃ¶s Zaichen unter n MÃ¶rkl lÃ¶schst. **
++
++  1. BewÃ¶g di mit n MÃ¶rkl auf de mit  --->  angmÃ¶rkte Zeil unt.
++
++  2. Zo n Faeler VerbÃ¶ssern  farst mit n MÃ¶rkl  netty  auf dÃ¶s Zaichen,  dÃ¶s wo
++     glÃ¶scht ghoert.
++
++  3. Druck de Tastn  x  , dÃ€Ãst dÃ¶s ÃŒberflÃŒssige Zaichen lÃ¶schst.
++
++  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst dÃ€Ã dyr Saz stimmt.
++
++---> De Kkuue sprangg ÃŒbber nn Maanad.
++
++  5. Wenn ietz de Zeil verbÃ¶ssert ist, geest gan dyr Letzn 1.4. weiter.
++
++Und ganz wichtig:  Dyrweilst dÃ¶nn Schainer durcharechtst,  versuech nit Ã¶bbenn,
++                   allss auswendig z lernen;  nÃ€n, lern ainfach mit n Anwenddn!
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 1.4: GWORT BARECHTN - EINFÃEGN
++
++
++                  **  Druck  i  , dyrmitst Ã¶bbs einfÃŒegst. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn untignen Zeil, wo mit  --->  angeet.
++
++  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewÃ¶g Ã¶nn MÃ¶rkl  auf dÃ¶s
++     eerste Zaichen NAACH derer StÃ¶ll, daa wo s Gwort eingfÃŒegt werdn sollt.
++
++  3. Druck  i  und gib dÃ¶s ein, was abgeet.
++
++  4. Wenn ieweils ayn Faeler verweitert ist, aft druck   <ESC>  ; dyrmit kimmst
++     gan dyr Befelhsartweis zrugg.
++     So, und ietz tuest ainfach yso weiter, hinst dÃ€Ã dyr Saz stimmt.
++
++---> Daader gt dd Ã¶bbs b.
++---> Daader geet diend Ã¶bbs ab.
++
++  5. Balst mainst,  dÃ€Ãst ys Gwort-EinfÃŒegn kanst, aft geest gan dyr Letzn 1.5.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 1.5: GWORT BARECHTN - ANFÃEGN
++
++
++                      ** Druck  A  gan n Gwort AnfÃŒegn. **
++
++  1. Gee mit n MÃ¶rkl gan dyr eerstn untignen Zeil, wo ayn  --->  dyrvor haat.
++     Daa ist s gleich, wo gnaun dyr MÃ¶rkl in derer Zeil steet.  
++
++  2. Demmlt  A  und gib de entsprÃ¶chetn ErgÃ¶ntzungen ein.
++
++  3. Wennst mit n AnfÃŒegn fÃ¶rtig bist, aft druckst  <ESC>  , dÃ€Ãst wider eyn de
++     Befelhsartweis zruggkimmst.
++
++  4. So,  und ietz geest aft non gan dyr zwaittn mit  --->  angmÃ¶rktn Zeil; und
++     daadl machst ys netty yso.
++
++---> In derer Zeil gee  
++     In derer Zeil geet ayn Weeng ayn Gwort ab.
++---> Aau daader stee
++     Aau daader steet Ã¶bbs UnvollstÃ¶ndigs. 
++
++  5. Wennst s AnfÃŒegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 1.6: AYN DAUTTICHT BARECHTN
++
++
++     ** Mit  :wq  speichertst ayn Dautticht und verlaasst Ã¶nn Wimm ganz. **
++
++  !! OBACHT:  Ee wennst mit dÃ¶nn alln daa unt weitertuest, lis zeerst de gantze
++     Letzn durch!!
++
++  1. VerlaaÃ also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
++
++  2. Gib dÃ¶ Faudung eyn n Eingib ein:  vim Schainer<EIN>  . 'vim' ruefft s Blat
++     auf,  und  'Schainer'  haisst de Dautticht,  wost barechtn willst.  Dyrmit
++     haast also ayn Dautticht, dÃ¶ wost barechtn kanst.
++
++  3. Ietz  fÃŒegst Ã¶bbs ein older lÃ¶schst Ã¶bbs,  wiest ys in de vorignen Letznen
++     glernt haast.
++
++  4. Speichert de gÃ¶nderte Dautticht und verlaaÃ Ã¶nn Wimm mit  :wq<EIN>  .
++
++  5. SchmeiÃ Ã¶nn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
++
++  6. Aft dÃ€Ãst  de obignen Schritt glÃ¶sn und kÃ€ppt haast,  kanst ys durchfÃŒern.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 1
++
++
++  1. Dyr MÃ¶rkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
++              h (winst)     j (ab)        k (auf)       l (zes)
++
++  2. Um Ã¶nn Wimm umbb n Eingib aus z ginnen, demmlt:  vim DAUTTICHT<EIN>  .
++
++  3. Willst Ã¶nn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
++                <ESC>  und  :q!<EIN>  .
++     Gan n Verlaassn und Speichern aber zipfst  <ESC>  und  :wq<EIN>  .
++
++  4. Willst dÃ¶s Zaichen lÃ¶schn, daa wo dyr MÃ¶rkl drauf ist, demmltst  x  .
++
++  5. Willst Ã¶bbs vor n MÃ¶rkl eingÃ¶bn, zipfst  i  und drafter  <ESC>  .
++     Mechst ys aber eyn s Zeilnend anhinhÃ¶ngen, benutzt ys   A  .
++     Und ainfach naach n MÃ¶rkl fÃŒegst ys mit  a  ein.
++
++AnmÃ¶rkung:  Druckst  <ESC>  ,  kimmst eyn de Befelhsartweis zrugg older brichst
++            ayn Faudung ab, dÃ¶ wo dyr schiefgangen ist.
++
++     Ietz tue mit dyr Letzn 2 weiter.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                           Letzn 2.1.: LÃSHFAUDUNGEN
++
++
++                 ** Demmlt  dw  , dyrmitst ayn Wort lÃ¶schst. **
++
++  1. Druck  <ESC>  ,  dyrmit s aau gwiÃ ist,  dÃ€Ãst in dyr Befelhsartweis bist.
++
++  2. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr mit  --->  angmÃ¶rktn Zeil unt.
++
++  3. Und daa geest ietz auf n Anfang von aynn Wort, dÃ¶s wo glÃ¶scht ghoert.
++
++  4. Zipf  dw  , dÃ€Ãst dÃ¶s gantze Wort lÃ¶schst.
++
++  NÃ¶bnbei:  Dyr Buechstabn  d  erscheint auf dyr lÃ¶sstn Zeil  von n Bildschirm,
++            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, dÃ€Ã Ã¶bbs kimmt, al-
++            so  daader ayn  w  .  Seghst  freilich  Ã¶bbs Anderts  wie ayn  d  ,
++            naacherd haast  Ã¶bbs Falschs  demmlt.  Druck aft  <ESC>  und prÃ¶blt
++            s non aynmaal.
++---> Ayn Ãttlych WÃ¶rter lustig ghoernd nit Fisper eyn dÃ¶nn Saz einhin.
++
++  5. Ãfert  d Schritt  3 und 4,  hinst dÃ€Ã  dyr Saz pÃ€sst,  und gee aft gan dyr
++     Letzn 2.2.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 2.2.: NON MEERER LÃSHFAUDUNGEN
++
++
++            ** Gib  d$  ein, dÃ€Ãst hinst eyn s Zeilnend lÃ¶schst. **
++
++  1. Druck  <ESC>  , dyrmitst aau gwiÃ in dyr Befelhsartweis bist.
++
++  2. BewÃ¶g Ã¶nn MÃ¶rkl hinst eyn de mit  --->  angmÃ¶rkte Zeil untn.
++
++  3. Gee mit n MÃ¶rkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
++
++  4. Zipf  d$  , dÃ€Ãst hinst eyn s End von dyr Zeil lÃ¶schst.
++  
++---> Ãbber haat s End von dyr Zeil doplt eingÃ¶bn. doplt eingÃ¶bn.
++
++
++  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                        Letzn 2.3: PFEMERER UND WOLENDER
++
++
++  Vil Faudungen,   wo s Gwort Ã¶ndernd, sÃ¶tznd si aus aynn Pfemerer und aynn Wo-
++  lend zamm. Bal i also Ã¶bbs lÃ¶schn will, schreib i ainsting  d  und aft s "Wo-
++  lend", dÃ¶s haisst also, "wolend", "wohin" dÃ€Ã i will - older was i halt gnaun
++  lÃ¶schn will.
++
++
++
++
++
++
++  Daader also, was i wie lÃ¶schn kan:
++     w  -  hinst eyn n Anfang von n naehstn Wort AANE dÃ¶nn sein eersts Zaichen.
++     e  -  gan n End von n ietzundn Wort MIT dÃ¶nn seinn lÃ¶sstn Zaichen.
++     $  -  zo n End von dyr Zeil MIT derer irn lÃ¶sstn Zaichen.
++
++  Also lÃ¶scht de Tastnfolg  de  allss umbb n MÃ¶rkl hinst eyn s Wortend.
++AnmÃ¶rkung:   Gib i grad  dÃ¶s zwaitte Zaichen  yllain ein,  ruckt halt dyr MÃ¶rkl
++             entsprÃ¶chet weiter.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Letzn 2.4: MIT AYNN ZÃLER D WOLENDER ÃFERN
++
++
++ ** Gib i ayn Zal vor aynn Wolend ein, werd dÃ¶s Sel entsprÃ¶chet oft gangen. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl gan n Anfang von dyr Zeil mit  --->  dyrvor unt.
++
++  2. Zipf  2w  , dÃ€Ãst mit n MÃ¶rkl zwai WÃ¶rter weitergeest.
++
++  3. Zipf  3e  , dÃ€Ãst mit n MÃ¶rkl auf s End von n drittn Wort kimmst.
++
++  4. Zipf  0  (aynn Nuller), dÃ€Ãst eyn n Anfang von dyr Zeil hinkimmst.
++
++  5. Widerhol d Schritt 2 und 3 mit verschaidne ZÃ¶ler.
++
++  ---> DÃ¶s ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
++
++  6. Gee weiter gan dyr Letzn 2.5.
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                 Letzn 2.5: DURCH AYNN ZÃLER GLEI MEERER LÃSCHN
++
++
++        ** Ayn Zal vor aynn Pfemerer fÃŒert dÃ¶nn entsprÃ¶chet oft aus. **
++
++  Also, i mecht lÃ¶schn,  und zwaar Ã¶bbs Bestimmts,  und dÃ¶s so und so oft:  Daa
++  dyrzue benutz i aynn ZÃ¶ler:
++                              d  ZÃ¶ler  Wolend (also Ã¶nn BewÃ¶gungsschrit)
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl zo n eerstn Wort in GROOSSBUECHSTABN in dyr mit  --->  an-
++     gmÃ¶rktn Zeil.
++
++  2. Demmlt  d2w  , dyrmitst de ganz grooÃgschribnen WÃ¶rter lÃ¶schst.
++
++  3. Ãfert  d Schritt 1 und 2  mit dÃ¶nn entsprÃ¶chetn ZÃ¶ler,  dyrmitst de drauf-
++     folgetn  ganz groÃgschribnen WÃ¶rter  mit ayner ainzignen Faudung  lÃ¶schst:
++
++
++--->  DÃ¶ ABC DE Zeil FGHI JK LMN OP mit WÃ¶rter ist Q RS TUV ietz berichtigt.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                          Letzn 2.6: ARECHTN AUF ZEILN
++
++
++               ** Zipf  dd  , um ayn gantze Zeil z lÃ¶schn. **
++
++  Weil s gro oft vÃŒrkimmt,  dÃ€Ã myn gantze Zeiln lÃ¶scht,  kaamend schoon d Ent-
++  wickler von n Urwimm daa drauf,  dÃ€Ã myn ainfach  dd  gan dÃ¶nn ZwÃ¶k schreibt.
++
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl gan dyr zwaittn Zeil in n untignen "Gedicht".
++  2. Zipf  dd  ,  um dÃ¶ Zeil z lÃ¶schn.
++  3. Ietz bewÃ¶gst di gan dyr viertn Zeil.
++  4. Zipf  2dd  , um zwo Zeiln zo n LÃ¶schn.
++
++--->  1)  Roosn seind root;
++--->  2)  Drunter ist s Koot.
++--->  3)  Veigerln seind blau.
++--->  4)  Umgrabn tuet s d Sau.
++--->  5)  D Ur sait de Zeit,
++--->  6)  Sait, dÃ€Ã s mi freut,
++--->  7)  Dirndl, dein Gschau.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                     Letzn 2.7: RUGGGÃNGIG MACHEN (RUGGLN) 
++
++
++             ** Zipf  u  , dyrmitst de lÃ¶sstn Faudungen ruggltst **
++             ** older   U  , um ayn gantze Zeil widerherzstÃ¶lln. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl gan dyr mit  --->  angmÃ¶rktn Zeil unt und gee dyrmit auf n
++     eerstn Faeler.
++  2. Zipf  x  , dÃ€Ãst dÃ¶s eerste z vile Zaichen lÃ¶schst.
++  3. Ietz demmlt  u  , dyrmitst de lÃ¶sste Faudung ruggltst.
++  4. Ietz behÃ¶b  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
++  5. Aft gibst ayn  U  (grooÃ) ein,  dÃ€Ãst de Zeil wider yso hinbringst,  wie s
++     gwÃ¶sn ist.
++  6. So,  und ietz  demmltst  so oft  u  , hinst dÃ€Ãst s  U  und de andern Fau-
++     dungen rugggÃ¶ngig gmacht haast.
++  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst dÃ€Ãst  allsand Be-
++     felh widerhergstÃ¶llt, z haissn allsse rugg-grugglt haast  (also d RugggÃ¶n-
++     gigmachungen rugggÃ¶ngig gmacht).
++---> Beerichtig d Faeller voon dehrer Zeiil  und sttÃ¶ll s mitt n Ruggruggln wi-
++     der her.
++  8. Die Faudungen seind gro wichtig; sÃ¶ helffend ainn nÃ€rrisch weiter.
++     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 2
++
++
++  1. Um von n MÃ¶rkl aus hinst eyn s naehste Wort zo n LÃ¶schn, zipf:  dw
++  2. Um umbb n MÃ¶rkl hinst eyn s End von dyr Zeil zo n LÃ¶schn, demmlt  d$
++  3. Dyrmitst ayn gantze Zeil lÃ¶schst, gib ein:  dd
++  4. Mechst ayn BewÃ¶gung, ayn "Wolend", Ã¶fters,  stÃ¶ll de entsprÃ¶chete Zal dyr-
++     vor:  3dw  older aau:  d3w
++  5. Dyr Pfueg fÃŒr ayn Ãnderungsfaudung lautt yso:
++               Pfemerer   [Zal]   BewÃ¶gungsschrit (Wolend)
++     Und dÃ¶s haisst:
++      Dyr PFEMERER gibt an, WAS taan ghoert, Ã¶bbenn   d   =  lÃ¶schn (Â»deleteÂ«).
++      [ZAL] - Ayn Zal KAN myn angÃ¶bn, wenn myn halt ayn Wolend Ã¶fter habn will.
++      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  Ã¶bbenn
++      auf aynn Wortanfang (  w  ), s End von dyr Zeil (  $  ) und so weiter.
++
++  6. DÃ€Ãst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
++
++  7. Um Ã¶bbs Vorigs wider z ruggln, gib ein:                u (klain also)
++     Um allsand Ãnderungen in ayner Zeil z ruggln, haast:   U (also grooÃ)
++     Um "rugg-z-ruggln", also allss wider herzstÃ¶lln, zipf:  <STRG>r   
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                           Letzn 3.1: ANFÃEGN (Â»putÂ«) 
++
++
++     ** Zipf  p  , dyrmitst Ã¶bbs gnetty GlÃ¶schts naach n MÃ¶rkl anfÃŒegst. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl gan dyr eerstn untignen Zeil mit  --->  dyrvor.
++
++  2. Zipf  dd  ,  um sele Zeil z lÃ¶schn und dyrmit in ayner Wimm-Osn zo n Spei-
++     chern.
++
++  3. BewÃ¶g Ã¶nn MÃ¶rkl gan dyr Zeil c),  ÃBER derer, daa wo de glÃ¶schte Zeil ein-
++     hinkemmen sollt.
++
++  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dÃ¶ Zeil unter derer
++     mit n MÃ¶rkl drinn.
++  5. Ãfert  d Schritt 2 hinst 4,  hinst dÃ€Ãst  allsand Zeiln  yso naachynaynand
++     haast, wie s hinghoernd.
++
++---> d) Kanst du dÃ¶s aau?
++---> b) Veigerln seind blau.
++---> c) Bedachtn kan myn lernen.
++---> a) Roosn seind root.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         Letzn 3.2: ERSÃTZN (Â»replaceÂ«)
++
++
++      ** Zipf  rx  , um dÃ¶s Zaichen unter n MÃ¶rkl durch  x  z ersÃ¶tzn. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn untignen Zeil mit  --->  dyrvor.
++
++  2. BewÃ¶g Ã¶nn MÃ¶rkl, hinst dÃ€Ã yr auf n eerstn Faeler steet.
++
++  3. Zipf  r  und drafter dÃ¶s Zaichen, wo dyrfÃŒr daa hinghoert.
++
++  4. Widerhol d Schritt 2 und 3,  hinst dÃ€Ãst de eerste Zeil  gmaeÃ dyr zwaittn
++     berichtigt haast:
++--->  Wie dÃ¶ Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
++--->  Wie dÃ¶ Zeil eingÃ¶bn wurd, wurdnd ainige falsche Tastnen zipft!
++
++  5. Ietz tue mit dyr Letzn 3.3 weiter.
++
++AnmÃ¶rkung: VergiÃ nit drauf, dÃ€Ãst mit n Anwenddn lernen solltst und nit Ã¶bbenn
++           mit n Auswendiglernen!
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                          Letzn 3.3: ÃNDERN (Â»changeÂ«)
++
++
++              ** Um hinst eyn s Wortend z Ã¶ndern, zipf  ce  . **
++
++  1. Gee mit n MÃ¶rkl auf de eerste mit  --->  angmÃ¶rkte Zeil.
++
++  2. Ietz farst netty auf s  "s"  von Wstwr hin.
++
++  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  Ã¶rter  .
++
++  4. Druck  <ESC>  und bewÃ¶g Ã¶nn MÃ¶rkl zo n naehstn Zaichen, wo gÃ¶ndert ghoert.
++
++  5. Ãfert  d Schritt 3 und 4,  hinst dÃ€Ã  dyr eerste Saz  wie dyr zwaitte ist.
++
++---> Ainige Wstwr von derer Zlww ghhnnd mit n Ãndern-Pfemerer gaauu.
++---> Ainige WÃ¶rter von derer Zeil ghoernd mit n Ãndern-Pfemerer gÃ¶ndert.
++
++ce  lÃ¶scht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                  Letzn 3.4.: NON MEERER ÃNDERUNGEN PFELFS  c
++
++
++   ** D LÃ¶shfaudung  c  arechtt mit de nÃ¶mlichnen Wolender wie dÃ¶ mit  d  **
++
++  1. Dyr Ãnder-Pfemerer arechtt anleich wie d LÃ¶shfaudung mit   d  ,  und zwaar
++     yso:
++         c    [Zal]   BewÃ¶gungsschrit (Wolend)
++
++  2. D Wolender seind  de gleichn,  Ã¶bbenn  w  fÃŒr Wort und  $  fÃŒr s Zeilnend.
++
++
++  3. BewÃ¶g di zo dyr eerstn untignen Zeil mit  --->  .
++
++  4. Ietz geest auf dÃ¶nn eerstn Faeler.
++
++  5. Zipf  c$  , gib Ã¶nn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
++     <ESC>.
++---> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
++---> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
++
++Denk allweil dran,  dÃ€Ãst iederzeit  mit dyr Ruggtastn Faeler ausbÃ¶ssern kanst.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 3
++
++
++  1. Um ayn  vorher glÃ¶schts Gwort  anzfÃŒegn,  zipf  p  .  Daa dyrmit  werd dÃ¶s
++     gantze Gwort  NAACH n MÃ¶rkl  angfÃŒegt.  Wenn s ayn gantze Zeil  gwÃ¶sn ist,
++     werd dÃ¶ sel als de Zeil unterhalb n MÃ¶rkl eingfÃŒegt.
++
++  2. Um dÃ¶s Zaichen  unter n MÃ¶rkl,  also wo dyr MÃ¶rkl ist,  z ersÃ¶tzn, zipf  r
++     und aft dÃ¶s Zaichen, wost daadl habn willst.
++
++  3. Dyr Ãnderungspfemerer ( c = Â»changeÂ«) laasst ainn umbb n MÃ¶rkl hinst eyn s
++     End von n Wolend Ã¶ndern. Zipf  ce  , dyrmitst umbb n MÃ¶rkl hinst eyn s End
++     von n Wort Ã¶ndertst, und  c$  hinst eyn s End von dyr Zeil.
++
++  4. FÃŒr d Ãnderung lautt dyr Pfueg:
++
++     c   [Zal]   Wolend
++
++Ietz tue mit dyr naehstn Letzn weiter.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                 Letzn 4.1: MÃRKLSTÃLLUNG UND DAUTTICHTDARSTAND
++
++** Demmlt <STRG>g, dÃ€Ãst Ã¶nn Befand und Darstand von dyr Dautticht anzaigst. **
++  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
++
++AnmÃ¶rkung: Lis dÃ¶ gantze Letzn daader durch, ee wennst iewign Ã¶bbs unternimmst!
++
++  1. Druck  <STRG>g  .  Auf dÃ¶s hin erscheint auf derer Seitt ganz unt ayn Dar-
++     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
++     MÃ¶rk dyr de Zeilnnummer fÃŒr n Schrit 3.
++
++AnmÃ¶rkung:  MÃŒglicherweis  seghst aau Ã¶nn MÃ¶rklbefand  in n zesmen untern Bild-
++            schirmÃ¶gg. Aft ist s "Lindl" (Â»rulerÂ«) eingstÃ¶llt;  meerer ÃŒber dÃ¶s
++            laasst dyr dyr Befelh   :help 'ruler'   ausher.
++  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
++     gg  gibst ein, dÃ€Ãst gan n Anfang von dyr Dautticht aufhinkimmst.
++
++  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
++     DÃ¶s bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dÃ¶s eerste
++     Maal  <STRG>g  gadruckst.
++
++  4. Wennst di sicher gnueg fÃŒelst, aft fÃŒer d Schritt 1 hinst 3 aus.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
++               
++
++  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
++
++  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. DÃ¶s sel wie aau dyr
++     MÃ¶rkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
++
++  2. Ietz zipf  Faeeler<EIN>  . Netty um dÃ¶s 'Faeeler' willst ietz suechen.
++
++  3. Willst um gnaun dÃ¶nn Ausdruk weitersuechen, zipf ainfach  n  (wie Â»nextÂ«).
++     Willst hinzrugg suechen, aft gibst  N  ein.
++
++  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
++
++  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, nimm  <STRG>o , und dÃ¶s
++     Ã¶fter,  wennst weiter zrugg willst. Mit  <STRG>i  widerum kimmst vorwÃ€rts.
++
++--->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
++
++AnmÃ¶rkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
++            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wÃ€r auf aus.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 4.3: DE GÃGNKLAMMERN FINDDN
++
++
++   ** Zipf  %  , um de entsprÃ¶chete Klammer  )  ,  ]  older  }  z finddn. **
++
++  1. SÃ¶tz Ã¶nn MÃ¶rkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
++     in dyr untignen Zeil, wo mit  --->  angmÃ¶rkt ist.
++
++  2. Ietzet zipf s Zaichen  %  .
++
++  3. Dyr MÃ¶rkl geet ietz auf de pÃ€ssete schliessete Klammer.
++
++  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr Ã¶ffneretn Klammer zrugg.
++
++  5. SÃ¶tz Ã¶nn MÃ¶rkl auf ayn anderne Klammer von   ({[]})   und prÃ¶blt   %  aus.
++
++---> DÃ¶s ( ist  blooÃ ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
++
++AnmÃ¶rkung:  Um dÃ¶ MÃŒglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
++            Spaichgwort verzweiflt ayn faelete GÃ¶gnklammer suechst!
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                 Letzn 4.4: D ERSÃTZUNGSFAUDUNG (Â»substituteÂ«)
++
++
++        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n ErsÃ¶tzn. **
++
++  1. Gee mit n MÃ¶rkl zo dyr unt steehetn mit  --->  angmÃ¶rktn Zeil.
++
++  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersÃ¶tzt alsnan grad dÃ¶s +eerste "dee",
++     wo vÃŒrkimmt.
++
++  3. Ietz prÃ¶blt s mit  :s/dee/de/g  . DÃ¶s zuesÃ¶tzliche  g  ("Pflok"  nennt myn
++     Ã¶bbs SÃ¶lchers) bewirkt, dÃ€Ã allss, was dyrmit kennzaichnet ist,  innerhalb
++     von dyr ainn Zeil ersÃ¶tzt werd.
++
++---> Dee schoenste Zeit, dÃ€Ã myn dee BlÃŒemln anschaut, ist dee schoene Lan-
++     gesszeit.
++  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Ãndern,  zipf
++     :#,#s/alt/neu/g  ,  wobei # ieweils fÃŒr de eerste und lÃ¶sste Zeil von dÃ¶nn
++     Pfraich steet.
++     :%s/alt/neu/g  zipfst, dÃ€Ãst d VÃŒrkemmen in dyr gantzn Dautticht Ã¶ndertst.
++        Mit  :%s/alt/neu/gc  finddst allsand VÃŒrkemmen in dyr gsamtn Dautticht;
++     daa werst aber zeerst non gfraagt, obst ys ersÃ¶tzn willst older nity.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 4
++                        
++  1. <STRG>g   zaigt dÃ¶nn ietzundn Dauttichtbefand  und Ã¶nn Darstand dyrvon an.
++           G   bringt di an s End von dyr Dautticht.
++      <Zal>G   bringt di gan dyr entsprÃ¶chetn Zeilnnummer.
++     <Zal>gg   geet +grad yso.
++          gg   bringt di zo dyr eerstn Zeil.
++  2. D Eingaab von  /  mit aynn Ausdruk suecht VÃRSHLING um dÃ¶nn Ausdruk.
++     Gibst  ?  und aynn Suechbegrif ein, suecht s um dÃ¶nn ÃRSHLING.
++     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
++     gsuecht. Mit  N  geet s umkeerter weiter.
++     <STRG>o  bringt di zo Ã¶lterne BefÃ€ndd zrugg,  <STRG>i  zo neuerne.
++
++  3. D Eingaab von  % , wenn dyr MÃ¶rkl auf ainer von dene Klammern steet:   ({[
++     )]}  , bringt di zo dyr GÃ¶gnklammer.
++
++  4. Um dÃ¶s eerste VÃŒrkemmen von  "alt"  in ayner Zeil durch  "neu"  z ersÃ¶tzn,
++     zipf  :s/alt/neu  .
++     Um allsand in ayner Zeil z ersÃ¶tzn, zipf  :s/alt/neu/g  .
++     Mechst allss in zwo Zeiln ersÃ¶tzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
++     Mechst allss in dyr gantzn Dautticht ersÃ¶tzn, gib ein:  :%s/alt/neu/g    .
++     Willst ayn ieds Maal bstaetln, hÃ¶ng 'c' wie Â»confirmÂ« hint anhin.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÃERN 
++            
++
++   ** Willst ayn GfÃ€Ãfaudung ausfÃŒern, gib ainfach dÃ¶ sel naach  :!  ein. **
++ 
++  1. Zipf  dÃ¶nn bekanntn Befelh   :  ,  dyrmitst  mit n MÃ¶rkl  auf n Bildschirm
++     ganz abhin kimmst. Draufhin kanst aynn gwonen GfÃ€Ãbefelh eingÃ¶bn.
++
++  2. Zeerst  kimmt aber non ayn Ruefzaichen   !  .  Und ietzet haast d MÃŒglich-
++     keit, ayn beliebige ausserige GfÃ€Ãfaudung auszfÃŒern.
++
++  3. Als Beispil zipf   :!ls<EIN>  ;  und schoon haast ayn Auflistung von deinn
++     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wÃ€rst.  Geet   ls
++     aus iewign aynn Grund nit, aft prÃ¶blt s mit  :!dir<EIN>  .
++
++Also non aynmaal: Mit dÃ¶nn Angang kan ayn iede beliebige ausserige Faudung aus-
++                  gfÃŒert werdn, aau mit Auerwerdd.
++
++Und wolgmÃ¶rkt:    Alle Befelh,  wo mit  :  angeend,  mÃŒessend mit  <EIN>  bstÃ¶-
++                  tigt werdn. DÃ¶s dyrsagn myr fÃŒrbaÃ +niemer.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++           Letzn 5.2: NON MEERER DRÃBER, WIE MYN DAUTTICHTN SCHREIBT
++
++
++     ** Um Ã¶bbs GÃ¶nderts neu z speichern, zipf  :w NEUER_DAUTTICHTNAM  . **
++
++  1. Zipf  :!dir   older  :!ls  ,  dÃ€Ãst dyr ayn Auflistung von deinn Verzaich-
++     niss ausherlaasst. DÃ€Ãst drafter  <EIN>  eingÃ¶bn muesst, waisst ee schoon.
++
++  2. Suech dyr aynn Dauttichtnam aus, dÃ¶nn wo s non nit geit, Ã¶bbenn  POCH  .
++
++  3. Ietz demmlt:  :w POCH  (also mit POCH als dÃ¶nn neuen Dauttichtnam).
++
++  4. DÃ¶s speichert ietz de gantze Dautticht, also Ã¶nn Wimmschainer,  unter dÃ¶nn
++     Nam POCH. DÃ¶s kanst leicht ÃŒberprÃŒeffen, indem dÃ€Ãst ainfach  :!ls   older
++     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
++
++AnmÃ¶rkung:  Stigst ietz aus n Wimm aus und gÃ€nnst n aft wider mit   vim POCH  ,
++            naacherd wÃ€r dÃ¶ Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
++            wiest n gspeichert haast.
++
++  5. Ietz verweitert dÃ¶ Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
++     beziehungsweis bei aynn UnixgebÃ€u mit   :!rm POCH   .
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
++
++** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
++
++  1. Ruck Ã¶nn MÃ¶rkl auf netty dÃ¶ Zeil daader.
++
++  2. Demmlt  v  und gee mit n MÃ¶rkl  auf dÃ¶nn fÃŒmftn Auflistungspunt untet.  Du
++     seghst glei, dÃ€Ã s Gwort vÃŒrherghÃ¶bt erscheint.
++
++  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
++
++  4. Zipf  w POCH  , wobei s dÃ¶nn Dauttichtnam POCH  non nit geit.  VergwiÃ di,
++     dÃ€Ãst dÃ¶s  :'<,'>w POCH  aau +seghst, ee wennst  <EIN>  druckst.
++
++  5. Dyr Wimm schreibt de ausgwaltn Zeiln eyn de Dautticht POCH einhin.  Benutz
++     :!dir  older  :!ls  ,  dÃ€Ãst dÃ¶s ÃŒberprÃŒeffst. LÃ¶sh s fein nit Ã¶bbenn! Mir
++     brauchend s nÃ¶mlich fÃŒr de naehste Letzn.
++
++AnmÃ¶rkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n MÃ¶rkl um-
++            aynandfarn,  um d Auswal  z verÃ¶ndern.  Drafter kan myn mit yn aynn
++            Pfemerer mit dÃ¶nn Gwort Ã¶bbs machen.  Zo n Beispil lÃ¶scht   d   dÃ¶s
++            Gwort.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++               Letzn 5.4: EINLÃSN UND ZAMMENFÃERN VON DAUTTICHTN   
++
++
++    ** Um Ã¶nn Inhalt von ayner Dautticht einzlÃ¶sn, zipf  :r DAUTTICHTNAM  **
++
++  1. SÃ¶tz Ã¶nn MÃ¶rkl ÃŒber dÃ¶ Zeil daader.
++
++OBACHT:  Aft dÃ€Ãst Ã¶nn Schrit 2  ausgfÃŒert haast,  seghst auf aynmaal  Ã¶bbs aus
++         dyr Letzn 5.3.  BewÃ¶g di naacherd wider abwÃ€rts, dyrmitst dÃ¶ Letzn wi-
++         derfinddst.
++  2. Ietz  lis  dein Dautticht  POCH ein,  indem dÃ€Ãst d Faudung   :r POCH aus-
++     fÃŒerst,  wobei wie gsait POCH  fÃŒr dÃ¶nn  von dir  ausgsuechtn Dauttichtnam
++     steet. De einglÃ¶sne Dautticht werd unterhalb dyr MÃ¶rklzeil eingfÃŒegt.
++
++  3. Um zo n ÃberprÃŒeffen,  ob de Dautticht  aau gwiÃ einglÃ¶sn ist,  gee zrugg;
++     und du seghst,  dÃ€Ã s ietz zwo AusfÃ¶rtigungen  von dyr Letzn 5.3. geit,  s
++     Urniss und de eingfÃŒegte Dauttichtfassung.
++
++AnmÃ¶rkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlÃ¶sn.  Zo n Bei-
++            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und fÃŒegt s
++            unterhalb n MÃ¶rkl ein.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 5
++
++
++  1. :!FAUDUNG  fÃŒert aynn ausserignen Befelh aus.
++
++      Daader ayn Ãttlych gwÃ€nddte Beispiler:
++      (Fenstl)              (Unix - Linux)
++      :!dir                 :!ls                - listt s Verzaichniss auf.
++      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
++
++  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dÃ¶nn besagtn Nam.
++
++  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
++     Dautticht mit seln Nam.
++
++  4. :r DAUTTICHTNAM  ladt sele Dautticht  und fÃŒegt s  unterhalb n MÃ¶rklbefand
++     ein.
++
++  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und fÃŒegt s  unterhalb n
++     MÃ¶rklbefand ein.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                        Letzn 6.1: ZEIL ÃFFNEN (Â»openÂ«)
++
++
++       ** Zipf  o  , um ayn Zeil unterhalb n MÃ¶rkl z Ã¶ffnen und eyn d **
++                        ** EinfÃŒegartweis z kemmen. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn mit  --->  angmÃ¶rktn Zeil unt.
++
++  2. Zipf  o  (klain),  um ayn Zeil UNTERHALB n MÃ¶rkl z Ã¶ffnen und mit dyr Ein-
++     fÃŒegartweis weiterztuen.
++
++  3. Ietzet zipf ayn Weeng Ã¶bbs  und druck  <ESC>  , um d EinfÃŒegartweis z ver-
++     laassn.
++---> Mit  o  werd dyr MÃ¶rkl in dyr EinfÃŒegartweis auf de offene Zeil gsÃ¶tzt.
++
++  4. Um ayn Zeil  OBERHALB n MÃ¶rkl aufzmachen,  gib ainfach ayn groosss O statt
++     yn aynn klainen ein. Versuech dÃ¶s auf dyr untignen Zeil.
++
++---> Ãffnet ayn Zeil ÃŒber derer daader mit  O  ,  wenn dyr MÃ¶rkl auf derer Zeil
++     ist.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 6.2: GWORT ANFÃEGN (Â»appendÂ«)
++
++
++                ** Zipf  a  , um Ã¶bbs NAACH n MÃ¶rkl einzfÃŒegn. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl gan n Anfang von dyr eerstn Ãebungszeil mit  --->  unt.
++
++  2. Druck  e  , hinst dÃ€Ã dyr MÃ¶rkl an n End von  Zei  steet.
++
++  3. Zipf ayn klains  a  , um Ã¶bbs NAACH n MÃ¶rkl anzfÃŒegn.
++
++  4. VergÃ¶ntz dÃ¶s Wort  wie in dyr Zeil drunter.  Druck  <ESC>  , um d Schreib-
++     Artweis z verlaassn.
++
++  5. BewÃ¶g di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
++     4.
++
++---> DÃ¶ Ze biett ayn GlÃ¶gn , ayn Gwort in ayner Zeil anzfÃŒ.
++---> DÃ¶ Zeil biett ayn GlÃ¶gnet, ayn Gwort in ayner Zeil anzfÃŒegn.
++
++AnmÃ¶rkung:   a  ,  i  und  A  bringend ainn gleichermaaÃn eyn d EinfÃŒegartweis;
++             dyr ainzige Unterschaid ist, WO mit n EinfÃŒegn angfangt werd.
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÃTZN (Â»replaceÂ«)
++
++
++ ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersÃ¶tzn. **
++
++  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn untignen, mit  --->  angmÃ¶rktn Zeil.
++     Gee mit n MÃ¶rkl gan n Anfang von n eerstn  xxx  .
++
++  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
++     yso dÃ€Ã de sel s xxx ersÃ¶tzt.
++
++  3. Druck  <ESC>  ,  um d ErsÃ¶tzungsartweis z verlaassn.  Du gspannst, dÃ€Ã dyr
++     Rest von dyr Zeil unverÃ¶ndert bleibt.
++
++  4. Ãfert die Schritt, um dÃ¶s ÃŒberblibne xxx z ersÃ¶tzn.
++
++---> S Zunddn von 123 zo xxx ergibt xxx.
++---> S Zunddn von 123 zo 456 ergibt 579.
++
++AnmÃ¶rkung: D ErsÃ¶tzungsartweis ist wie d EinfÃŒegartweis,  aber ayn ieds eindem-
++           mlte Zaichen lÃ¶scht ayn vorhanddns.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 6.4: GWORT AAMEN UND EINFÃEGN
++
++ ** Benutz Ã¶nn Pfemerer  y  , um Ã¶bbs z aamen, und  p  , um Ã¶bbs einzfÃŒegn. **
++
++  1. Gee zo dyr mit  --->  angmÃ¶rktn Zeil unt  und sÃ¶tz Ã¶nn MÃ¶rkl  hinter "a)".
++
++  2. Ginn d Sichtisch-Artweis mit   v   und bewÃ¶g Ã¶nn MÃ¶rkl gnaun vor "eerste".
++  
++  3. Zipf  y  , um dÃ¶nn vÃŒrherghÃ¶btn Tail z aamen.
++
++  4. BewÃ¶g Ã¶nn MÃ¶rkl gan n End von dyr naehstn Zeil:  j$
++
++  5. Demmlt  p  , um dÃ¶s Gwort einzfÃŒegn, und aft:  a zwaitte <ESC>  .
++
++  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln, aam s mittls  y  , be-
++     wÃ¶g di gan n End von dyr naehstn Zeil mit  j$   und fÃŒeg s Gwort dortn mit
++     p  an.
++
++--->  a) dÃ¶s ist dyr eerste Eintrag.
++      b)
++AnmÃ¶rkung:   Du kanst   y   aau als Pfemerer verwenddn;   yw  zo n Beispil aamt
++             hinst eyn n naehstn Wortanfang (aane dÃ¶nn selber).
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                           Letzn 6.5: SCHALTTER SÃTZN
++
++** SÃ¶tz aynn Schaltter yso,  dÃ€Ã ayn Suech older ErsÃ¶tzung GrooÃ- und Klain- **
++                            ** schreibung ÃŒbergeet. **
++                            
++  1. Suech um 'ÃŒbergee", indem dÃ€Ãst   /ÃŒbergee   eingibst.
++     Widerhol d Suech ayn Ãttlych Maal, indem dÃ€Ãst de Tastn  n  druckst.
++
++  2. SÃ¶tz de Zwisl - Ã¶nn Schaltter - 'ic' (Â»ignore caseÂ«), indem dÃ€Ãst  :set ic
++     eingibst.
++  3. Ietz suech wider um 'ÃŒbergee' und tue aau wider mit  n  weiter.  Daa fallt
++     dyr auf, dÃ€Ã ietz Ã¶bbenn aau  Ãbergee  und  ÃBERGEE  hergeet.
++
++  4. SÃ¶tz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
++
++  5. Widerhol d Suech und bobacht, was ietz gschieght:   /ÃŒbergee <EIN>
++
++  6. DÃ€Ãst grooÃ und klain wider gwon unterscheidst, zipf:   :set noic
++
++AnmÃ¶rkung:  Mechst de TrÃ¶ffer niemer vÃŒrherghÃ¶bt seghn,  gib ein:   :nohlsearch
++AnmÃ¶rkung:  Sollt klain/grooÃ bei ayner ainzignen Suech wurst sein,  benutz  \c
++            in n Suechausdruk:   /ÃŒbergee\c <EIN>
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 6
++
++  1. Zipf  o  , um ayn Zeil  UNTERHALB  n MÃ¶rkl z Ã¶ffnen und d EinfÃŒegartweis z
++                ginnen.
++     Zipf  O  , um ayn Zeil OBERHALB n MÃ¶rkl z Ã¶ffnen.
++
++  2. Zipf  a  , um NAACH n MÃ¶rkl ayn Gwort einzfÃŒegn.
++     Zipf  A  , um ayn Gwort naach n Zeilnend anzfÃŒegn.
++
++  3. D Faudung  e  bringt di gan n End von aynn Wort.
++
++  4. Dyr Pfemerer  y  (Â»yankÂ«) aamt Ã¶bbs,  p  (Â»putÂ«) fÃŒegt dÃ¶s ein.
++
++  5. Ayn groosss  R  geet eyn d ErsÃ¶tzungsartweis, hinst dÃ€Ã myn  <ESC> druckt.
++
++  6. D Eingaab von ":set xxx"  sÃ¶tzt de Zwisl "xxx".  Ayn Ãttlych Zwisln seind:
++     'ic' 'ignorecase'   GrooÃ/klain wurst bei ayner Suech
++     'is' 'incsearch'    Zaig aau schoon ayn TailÃŒberainstimmung
++     'hls' 'hlsearch'    HÃ¶b allsand pÃ€ssetn AusdrÃŒck vÃŒrher
++     Dyr Schaltternam kan in dyr Kurz- older Langform angÃ¶bn werdn.
++
++  7. StÃ¶ll yn ayner Zwisl "no" voran, dÃ€Ãst ys abschalttst:   :set noic
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
++
++
++           ** Nutz dÃ¶s einbaute HilfgebÃ€u, de "Betribsanlaittung". **
++
++  Eyn n Wimm  ist ayn ausfÃŒerliche "Gebrauchsanweisung"  einbaut.  FÃŒr s Eerste
++  prÃ¶blt ainfach ains von dene dreu aus:
++    - Druck d <HILF>-Tastn, wennst Ã¶bbenn aine haast.
++    - Druck de Tastn <F1>, fallsst ys haast.
++    - Zipf   :help <EIN>
++
++  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dÃ¶s mit dyr Hilf geet.
++  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
++  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
++
++  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem dÃ€Ãst yn dyr Faudung
++  :help  aynn Auerwerd naachstÃ¶llst und istig  <EIN>  nit vergisst. PrÃ¶blt dÃ¶s:
++
++     :help w
++     :help c_CTRL-D
++     :help insert-index
++     :help user-manual
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                       Letzn 7.2: ERSTÃLL AYN GIN-SCHRIPF
++
++
++              ** Mutz Ã¶nn Wimm mit de einbautn Faehigkeitn auf. **
++
++  Dyr Wimm besitzt ayn WÃ¶sn SchÃ€ftungen,  wo ÃŒber n Urwimm aushingeend, aber de
++  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
++  ausherholst, erstÃ¶llst ayn "vimrc"-Dautticht.
++
++  1. LÃ¶g ayn "vimrc"-Dautticht an;  dÃ¶s geet  ie naach BetribsgebÃ€u  verschidn:
++     :e ~/.vimrc     fÃŒr s Unix
++     :e $VIM/_vimrc  bei n Fenstl
++
++  2. Ietz lis Ã¶nn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
++     :r $VIMRUNTIME/vimrc_example.vim
++
++  3. Speichert de Dautticht mit:
++     :w
++
++  4. Bei n naehstn Gin von n Wimm  ist aft d FÃŒegnussvÃŒrherhÃ¶bung zuegschalttn.
++     Du kanst dyr allss  eyn dÃ¶ Dautticht  einhinschreibn,  wasst bstÃ€ndig habn
++     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                              Letzn 7.3: VERGÃNTZN
++
++
++            ** BefelhszeilnvergÃ¶ntzung mit  <STRG>d  und  <TAB>  **
++
++  1. VergwiÃ di, dÃ€Ã dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
++
++  2. Schaug naach, wÃ¶lcherne Dauttichtn dÃ€Ã s in n Verzaichniss geit:   :!ls
++     older   :!dir
++  3. Zipf Ã¶nn Anfang von ayner Faudung:   :e
++
++  4. Druck  <STRG>d  , und dyr Wimm zaigt ayn Listn von Faudungen, wo mit   "e"
++     angeend.
++  5. Druck  <TAB>  , und dyr Wimm vervollstÃ¶ndigt Ã¶nn Faudungsnam zo   ":edit".
++
++  6. FÃŒeg  ayn Laerzaichen  und Ã¶nn Anfang  von ayner  besteehetn Dautticht an:
++     :edit DAU
++
++  7. Druck  <TAB>  . Dyr Wimm vergÃ¶ntzt Ã¶nn Nam, dÃ¶s haisst, wenn yr aindeuttig
++     ist.
++AnmÃ¶rkung:  D VergÃ¶ntzung  geit s fÃŒr aynn Hauffen Faudungen.  Versuech ainfach
++            <STRG>d  und  <TAB>  . Bsunders nÃŒtzlich ist dÃ¶s bei   :help  .
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                         ZAMMENFASSUNG VON DYR LETZN 7
++
++
++  1. Zipf  :help  oder druck  <F1>  oder  <HILF> , um ayn Hilffenster z Ã¶ffnen.
++
++  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
++
++  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
++
++  4. Zipf  :q  , um s Hilffenster z schliessn.
++
++  5. ErstÃ¶ll ayn vimrc-Ginschripf  zuer Sicherung von deine MÃ¶tzneinstÃ¶llungen.
++
++  6. Druck  <STRG>d  , aft dÃ€Ãst naach   :   ayn Faudung  angfangt haast,  dyr-
++     mitst mÃŒgliche VergÃ¶ntzungen anzaigt kriegst.
++     Druck  <TAB>  fÃŒr ain VervollstÃ¶ndigung yllain.
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++  DÃ¶s wÃ€r ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
++  und bÃŒndignen Ãberblik  ÃŒber s Blat WIMM z lifern,  netty vil gnueg,  dÃ€Ã myn
++  fÃŒr s Eerste  wirklich Ã¶bbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
++  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
++  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual
++
++  Zo n WeiterlÃ¶sn und Weiterlernen wÃ¶r dÃ¶s Buech daader zo n Empfelhen:
++    Vim - Vi Improved - von n OUALLINE Steve
++    Verlaag: New Riders
++  DÃ¶s ist dÃ¶s eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dÃ¶s Grechte fÃŒr
++  AnfÃ¶nger. Es haat ayn WÃ¶sn Beispiler und aau Bilder drinn.
++  See http://iccf-holland.org/click5.html
++
++  DÃ¶s folgete Buech  ist schoon Ã¶lter und meerer  ÃŒber n Urwimm  als wie ÃŒber n
++  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
++  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
++  3897211262
++  In dÃ¶nn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
++  De sÃ¶xte Ausgaab enthaltt aau schoon Ã¶bbs ÃŒber n Wimm.
++  Als ietzunde Bezugniss fÃŒr d Fassung 7  und ayn pfrenge EinfÃŒerung  dient dÃ¶s
++  folgete Buech:
++    vim ge-packt  von n WOBST Reinhard
++    mitp-Verlaag, Buechlaittzal 978-3-8266-1781-2
++  Trotz dyr recht pfrengen DarstÃ¶llung  ist s durch seine viln nÃŒtzlichnen Bei-
++  spiler aau fÃŒr Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
++  seind zesig zo n Kriegn; see   http://iccf-holland.org/click5.html
++
++  Verfasst habnd dÃ¶nn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
++  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf EntwÃŒrff, wo
++  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
++  zuer VerfÃŒegung gstÃ¶llt haat. Gundpost:   bware@mines.colorado.edu
++  FÃŒr n Wimm haat n dyr MOOLENAAR Bram barechtt.
++  De bairische ÃbersÃ¶tzung  stammt von n HELL Sepp 2009,  ayn Weeng ÃŒberarechtt
++  2011. Sein GundpostbrÃ€cht ist   sturmibund@t-online.de
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.bj vim73/runtime/tutor/tutor.bj
+--- vim73.orig/runtime/tutor/tutor.bj	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.bj	1970-01-01 00:00:00.000000000 +0000
+@@ -1,987 +0,0 @@
+-===============================================================================
+-=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
+-===============================================================================
+-
+-   Dyr Wimm ist ayn gro mächtigs Blat, dös was mit aynn Wösn Befelh aufwartt; z
+-   vil,  däß myn s allsand  in aynn Schainer  wie dönn daader  unterbräng.  Der
+-   Schainer ist yso aufbaut,  däß yr halt netty die Befelh allsand bringt, wost
+-   brauchst, däßst mit iem für s Eerste wirklich öbbs anfangen kanst.
+-   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dös haisst,
+-   wennst di nit grooß mit n Pröbln und Tüftln aufhaltst.
+-
+-   OBACHT:
+-   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort öndern.  Dösswögn
+-   machst eyn n Böstn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
+-   dös Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
+-   ayn Aamum.
+-   Mir kan s  nit oft gnueg  sagn,  däß  der Schainer daader  istig  gan n Üebn
+-   ghoert.  Also muesst schoon aau die Befelh ausfüern,  wennst ys gscheid ler-
+-   nen willst. Mit n Lösn yllain ist s +nit taan!
+-
+-   Ietz schaust grad non, däß dein Föststölltastn nit druckt ist; und aft geest
+-   glei aynmaal mit dyr j-Tastn abwärts (yso laaufft dös nömlich),  hinst däßst
+-   de gantze Letzn 1.1 auf n Bildschirm haast.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 1.1: MIT N MÖRKL UMAYNANDFARN
+-
+-**  Dyrmitst mit n Mörkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
+-            ^            Ayn Öslsbrugg:
+-            k            De Tastn  h  ist winster und +geet aau gan winster.
+-   < h             l >   S  l  leit zesm und richtt si gan zesm.
+-            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
+-            v            Mit n  k  kimmst gan n KOPF.            
+-  1. Ietz ruedertst ainfach mit n Mörkl auf n Bildschirm umaynand,  hinst däßst
+-     di sicher füelst.
+-  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+-     kimmst gan dyr naehstn Letzn.
+-     
+-  3. Wie gsait, ietz bewögst di also mit derer Tastn gan dyr Letzn 1.2.
+-
+-Non öbbs: Allweil, wenn dyr niemer ganz wol ist, wasst öbbenn druckt haast, aft
+-          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
+-
+-      
+-          Nöbnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
+-          hjkl  seind z haissn s Wimm-Urgstain;  und de "Hörtn" seind ganz dyr-
+-          für, däß myn bei +dene bleibt. Pröblt s ainfach aus!
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                        Letzn 1.2: ÖNN WIMM AUSSCHALTTN
+-
+-
+-  ALSO, EE WENNST ÖBBS VON DAA UNT AUSFÜERST,  LIS LIEBER ZEERST DE GANTZE LET-
+-  ZN!
+-
+-  1. Druck d <ESC>-Tastn, dyrmitst aau gwiß in dyr Befelhs-Artweis bist.
+-  
+-  2. Demmlt  :q! <EIN>.
+-     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst öbbenn  göndert
+-     haast.
+-
+-  3. Balst önn Eingib seghst, gib dö Faudung ein,  wo di zo dönn Schainer brun-
+-     gen haat, also    vimtutor bj <EIN>.
+-
+-  4. Also, wenn ietz allsse sitzt, naacherd füerst d Schritt 1 hinst 3 aus, mit
+-     wasst ys Blat verlaasst und aft wider einhinkimmst.
+-
+-Anmörkung: Mit  :q! <EIN> verwirffst allss, wasst göndert older enther gschribn
+-           haast. In aynn Öttlych Letznen lernst acht, wiest dös allss in ayner
+-           Dautticht speichertst.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 1.3: GWORT BARECHTN - LÖSCHN 
+-
+-         
+-         ** Druck  x  , dyrmitst dös Zaichen unter n Mörkl löschst. **
+-
+-  1. Bewög di mit n Mörkl auf de mit  ---> angmörkte Zeil unt.
+-
+-  2. Zo n Faeler Verbössern  farst mit n Mörkl  netty  auf dös Zaichen,  dös wo
+-     glöscht ghoert.
+-
+-  3. Druck de Tastn  x  , däßst dös überflüssige Zaichen löschst.
+-
+-  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst däß dyr Saz stimmt.
+-
+----> De Kkuue sprangg übber nn Maanad.
+-
+-  5. Wenn ietz de Zeil verbössert ist, geest gan dyr Letzn 1.4. weiter.
+-
+-Und ganz wichtig:  Dyrweilst dönn Schainer durcharechtst,  versuech nit öbbenn,
+-                   allss auswendig z lernen;  nän, lern ainfach mit n Anwenddn!
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 1.4: GWORT BARECHTN - EINFÜEGN
+-
+-
+-                  **  Druck  i  , dyrmitst öbbs einfüegst. **
+-
+-  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
+-
+-  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewög önn Mörkl  auf dös
+-     eerste Zaichen NAACH derer Stöll, daa wo s Gwort eingfüegt werdn sollt.
+-
+-  3. Druck  i  und gib dös ein, was abgeet.
+-
+-  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
+-     gan dyr Befelhsartweis zrugg.
+-     So, und ietz tuest ainfach yso weiter, hinst däß dyr Saz stimmt.
+-
+----> Daader gt dd öbbs b.
+----> Daader geet diend öbbs ab.
+-
+-  5. Balst mainst,  däßst ys Gwort-Einfüegn kanst, aft geest gan dyr Letzn 1.5.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 1.5: GWORT BARECHTN - ANFÜEGN
+-
+-
+-                      ** Druck  A  gan n Gwort Anfüegn. **
+-
+-  1. Gee mit n Mörkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
+-     Daa ist s gleich, wo gnaun dyr Mörkl in derer Zeil steet.  
+-
+-  2. Demmlt  A  und gib de entspröchetn Ergöntzungen ein.
+-
+-  3. Wennst  mit n Anfüegn förtig bist,  aft druckst <ESC>,  däßst wider eyn de
+-     Befelhsartweis zruggkimmst.
+-
+-  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmörktn Zeil;  und
+-     daadl machst ys netty yso.
+-
+----> In derer Zeil gee  
+-     In derer Zeil geet ayn Weeng ayn Gwort ab.
+----> Aau daader stee
+-     Aau daader steet öbbs Unvollstöndigs. 
+-
+-  5. Wennst s Anfüegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 1.6: AYN DAUTTICHT BARECHTN
+-
+-
+-     ** Mit  :wq  speichertst ayn Dautticht und verlaasst önn Wimm ganz. **
+-
+-  !! OBACHT:  Ee wennst mit dönn alln daa unt weitertuest, lis zeerst de gantze
+-     Letzn durch!!
+-
+-  1. Verlaaß also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
+-
+-  2. Gib dö Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
+-     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
+-     haast also ayn Dautticht, dö wost barechtn kanst.
+-
+-  3. Ietz  füegst öbbs ein older löschst öbbs,  wiest ys in de vorignen Letznen
+-     glernt haast.
+-
+-  4. Speichert de gönderte Dautticht und verlaaß önn Wimm mit  :wq  <EIN>  .
+-
+-  5. Schmeiß önn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
+-
+-  6. Aft däßst  de obignen Schritt glösn und käppt haast,  kanst ys durchfüern.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 1
+-
+-
+-  1. Dyr Mörkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
+-              h (winst)     j (ab)        k (auf)       l (zes)
+-
+-  2. Um önn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
+-
+-  3. Willst önn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
+-                <ESC>  :q!  <EIN> .
+-     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
+-
+-  4. Willst dös Zaichen löschn, daa wo dyr Mörkl drauf ist, demmltst  x  .
+-
+-  5. Willst öbbs vor n Mörkl eingöbn, zipfst  i  und drafter  <ESC>  .
+-     Mechst ys aber eyn s Zeilnend anhinhöngen, benutzt ys   A  .
+-     Und ainfach naach n Mörkl füegst ys mit  a  ein  .
+-
+-Anmörkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
+-            Faudung ab, dö wo dyr schiefgangen ist.
+-
+-     Ietz tue mit dyr Letzn 2 weiter.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                           Letzn 2.1.: LÖSHFAUDUNGEN
+-
+-
+-                 ** Demmlt  dw  , dyrmitst ayn Wort löschst **
+-
+-  1. Druck  <ESC>, dyrmit s aau gwiß ist, däßst in dyr Befelhsartweis bist.
+-
+-  2. Bewög önn Mörkl zo dyr mit ---> angmörktn Zeil unt.
+-
+-  3. Und daa geest ietz auf n Anfang von aynn Wort, dös wo glöscht ghoert.
+-
+-  4. Zipf  dw  , däßst dös gantze Wort löschst.
+-
+-  Nöbnbei:  Dyr Buechstabn  d  erscheint auf dyr lösstn Zeil  von n Bildschirm,
+-            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, däß öbbs kimmt, al-
+-            so  daader ayn  w  .  Seghst  freilich  öbbs Anderts  wie ayn  d  ,
+-            naacherd haast  öbbs Falschs  demmlt.  Druck aft  <ESC>  und pröblt
+-            s non aynmaal.
+----> Ayn Öttlych Wörter lustig ghoernd nit Fisper eyn dönn Saz einhin.
+-
+-  5. Äfert  d Schritt  3 und 4,  hinst däß  dyr Saz pässt,  und gee aft gan dyr
+-     Letzn 2.2.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 2.2.: NON MEERER LÖSHFAUDUNGEN
+-
+-
+-            ** Gib  d$  ein, däßst hinst eyn s Zeilnend löschst. **
+-
+-  1. Druck <ESC> , dyrmitst aau gwiß in dyr Befelhsartweis bist.
+-
+-  2. Bewög önn Mörkl hinst eyn de mit ---> angmörkte Zeil untn.
+-
+-  3. Gee mit n Mörkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
+-
+-  4. Zipf  d$  , däßst hinst eyn s End von dyr Zeil löschst.
+-  
+----> Öbber haat s End von dyr Zeil doplt eingöbn. doplt eingöbn.
+-
+-
+-  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
+-
+-
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                        Letzn 2.3: PFEMERER UND WOLENDER
+-
+-
+-  Vil Faudungen,   wo s Gwort öndernd, sötznd si aus aynn Pfemerer und aynn Wo-
+-  lend zamm. Bal i also öbbs löschn will, schreib i ainsting  d  und aft s "Wo-
+-  lend", dös haisst also, "wolend", "wohin" däß i will - older was i halt gnaun
+-  löschn will.
+-
+-
+-
+-
+-
+-
+-  Daader also, was i wie löschn kan:
+-    w - hinst eyn n Anfang von n naehstn Wort AANE dönn sein eersts Zaichen.
+-    e - gan n End von n ietzundn Wort MIT dönn seinn lösstn Zaichen.
+-    $ - zo n End von dyr Zeil MIT derer irn lösstn Zaichen.
+-
+-  Also löscht de Tastnfolg  de  umbb n Mörkl hinst eyn s Wortend.
+-Anmörkung:   Gib i grad  dös zwaitte Zaichen  yllain ein,  ruckt halt dyr Mörkl
+-             entspröchet weiter.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                   Letzn 2.4: MIT AYNN ZÖLER D WOLENDER ÄFERN
+-
+-
+-      ** Gib i ayn Zal vor aynn Wolend ein, werd dös Sel halt widerholt. **
+-
+-  1. Bewög önn Mörkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
+-
+-  2. Zipf  2w  , däßst mit n Mörkl zwai Wörter weitergeest.
+-
+-  3. Zipf  3e  , däßst mit n Mörkl auf s End von n drittn Wort kimmst.
+-
+-  4. Zipf  0  (aynn Nuller), däßst eyn n Anfang von dyr Zeil hinkimmst.
+-
+-  5. Widerhol d Schritt 2 und 3 mit verschaidne Zöler.
+-
+-  ---> Dös ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
+-
+-  6. Gee weiter gan dyr Letzn 2.5.
+-
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                 Letzn 2.5: DURCH AYNN ZÖLER GLEI MEERER LÖSCHN
+-
+-
+-              ** Ayn Zal vor aynn Pfemerer äfert dönn um seln Werd. **
+-
+-  Also, i mecht löschn,  und zwaar öbbs Bestimmts,  und dös so und so oft:  Daa
+-  dyrzue benutz i aynn Zöler:
+-                              d  Zöler  Wolend (also önn Bewögungsschrit)
+-
+-  1. Bewög önn Mörkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
+-     gmörktn Zeil.
+-
+-  2. Demmlt  d2w  , dyrmitst de ganz grooßgschribnen Wörter löschst.
+-
+-  3. Äfert  d Schritt 1 und 2  mit dönn entspröchetn Zöler,  dyrmitst de drauf-
+-     folgetn  ganz großgschribnen Wörter  mit ayner ainzignen Faudung  löschst:
+-
+-
+---->  Dö ABC DE Zeil FGHI JK LMN OP mit Wörter ist Q RS TUV ietz berichtigt.
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                          Letzn 2.6: ARECHTN AUF ZEILN
+-
+-
+-               ** Zipf  dd  , um ayn gantze Zeil z löschn. **
+-
+-  Weil s gro oft vürkimmt,  däß myn gantze Zeiln löscht,  kaamend schoon d Ent-
+-  wickler von n Urwimm daa drauf,  däß myn ainfach  dd  gan dönn Zwök schreibt.
+-
+-
+-  1. Bewög önn Mörkl gan dyr zwaittn Zeil in n untignen "Gedicht".
+-  2. Zipf  dd  ,  um dö Zeil z löschn.
+-  3. Ietz bewögst di gan dyr viertn Zeil.
+-  4. Zipf  2dd  , um zwo Zeiln zo n Löschn.
+-
+---->  1)  Roosn seind root;
+---->  2)  Drunter ist s Koot.
+---->  3)  Veigerln seind blau.
+---->  4)  Umgrabn tuet s d Sau.
+---->  5)  D Ur sait de Zeit,
+---->  6)  Sait, däß s mi freut,
+---->  7)  Dirndl, dein Gschau.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                     Letzn 2.7: RUGGGÖNGIG MACHEN (RUGGLN) 
+-
+-
+-             ** Zipf  u  , dyrmitst de lösstn Faudungen ruggltst **
+-              ** older  U  , um ayn gantze Zeil widerherzstölln. **
+-
+-  1. Bewög önn Mörkl  gan dyr mit ---> angmörktn Zeil unt  und gee dyrmit auf n
+-     eerstn Faeler.
+-  2. Zipf  x  , däßst dös eerste z vile Zaichen löschst.
+-  3. Ietz demmlt  u  , dyrmitst de lösste Faudung ruggltst.
+-  4. Ietz behöb  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
+-  5. Aft gibst ayn  U  (grooß) ein,  däßst de Zeil wider yso hinbringst,  wie s
+-     gwösn ist.
+-  6. So,  und ietz  demmltst  so oft  u  , hinst däßst s  U  und de andern Fau-
+-     dungen rugggöngig gmacht haast.
+-  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst däßst  allsand Be-
+-     felh widerhergstöllt, z haissn allsse rugg-grugglt haast  (also d Rugggön-
+-     gigmachungen rugggöngig gmacht).
+----> Beerichtig d Faeller voon dehrer Zeiil  und sttöll s mitt n Ruggruggln wi-
+-     der her.
+-  8. Die Faudungen seind gro wichtig; sö helffend ainn närrisch weiter.
+-     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 2
+-
+-
+-  1. Um von n Mörkl aus hinst eyn s naehste Wort zo n Löschn, zipf:  dw
+-  2. Um umbb n Mörkl hinst eyn s End von dyr Zeil zo n Löschn, demmlt  d$
+-  3. Dyrmitst ayn gantze Zeil löschst, gib ein:  dd
+-  4. Mechst ayn Bewögung, ayn "Wolend", öfters,  stöll de entspröchete Zal dyr-
+-     vor:  3dw  older aau:  d3w
+-  5. Dyr Pfueg für ayn Önderungsfaudung lautt yso:
+-               Pfemerer   [Zal]   Bewögungsschrit (Wolend)
+-     Und dös haisst:
+-      Dyr PFEMERER gibt an, WAS taan ghoert, öbbenn   d   =  löschn (»delete«).
+-      [ZAL] - Ayn Zal KAN myn angöbn, wenn myn halt ayn Wolend öfter habn will.
+-      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  öbbenn
+-      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+-
+-  6. Däßst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
+-
+-  7. Um öbbs Vorigs wider z ruggln, gib ein:                u (klain also)
+-     Um allsand Önderungen in ayner Zeil z ruggln, haast:   U (also grooß)
+-     Um "rugg-z-ruggln", also allss wider herzstölln, zipf: <STRG>r   
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                           Letzn 3.1: ANFÜEGN (»put«) 
+-
+-
+-     ** Zipf  p  , dyrmitst öbbs gnetty Glöschts naach n Mörkl anfüegst. **
+-
+-  1. Bewög önn Mörkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
+-
+-  2. Zipf  dd  , um sele Zeil z löschn  und dyrmit  in aynn Wimm-"Roster"  zo n
+-     speichern.
+-
+-  3. Bewög önn Mörkl gan dyr Zeil c),  ÜBER derer, daa wo de glöschte Zeil ein-
+-     hinkemmen sollt.
+-
+-  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dö Zeil unter derer
+-     mit n Mörkl drinn.
+-  5. Äfert  d Schritt 2 hinst 4,  hinst däßst  allsand Zeiln  yso naachynaynand
+-     haast, wie s hinghoernd.
+-
+----> d) Kanst du dös aau?
+----> b) Veigerln seind blau.
+----> c) Bedachtn kan myn lernen.
+----> a) Roosn seind root.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         Letzn 3.2: ERSÖTZN (»replace«)
+-
+-
+-      ** Zipf  rx  , um dös Zaichen unter n Mörkl durch  x  z ersötzn. **
+-
+-  1. Bewög önn Mörkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
+-
+-  2. Bewög önn Mörkl, hinst däß yr auf n eerstn Faeler steet.
+-
+-  3. Zipf  r  und drafter dös Zaichen, wo dyrfür daa hinghoert.
+-
+-  4. Widerhol d Schritt 2 und 3,  hinst däßst de eerste Zeil  gmaeß dyr zwaittn
+-     berichtigt haast:
+---->  Wie dö Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
+---->  Wie dö Zeil eingöbn wurd, wurdnd ainige falsche Tastnen zipft!
+-
+-  5. Ietz tue mit dyr Letzn 3.3 weiter.
+-
+-Anmörkung: Vergiß nit drauf, däßst mit n Anwenddn lernen solltst und nit öbbenn
+-           mit n Auswendiglernen!
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                          Letzn 3.3: ÖNDERN (»change«)
+-
+-
+-              ** Um hinst eyn s Wortend z öndern, zipf  ce  . **
+-
+-  1. Gee mit n Mörkl auf de eerste mit ---> angmörkte Zeil.
+-
+-  2. Ietz farst netty auf s  "s"  von Wstwr hin.
+-
+-  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  örter  .
+-
+-  4. Druck <ESC> und bewög önn Mörkl gan n naehstn Zaichen,  wo göndert ghoert.
+-
+-  5. Äfert  d Schritt 3 und 4,  hinst däß  dyr eerste Saz  wie dyr zwaitte ist.
+-
+----> Ainige Wstwr von derer Zlww ghhnnd mit n Öndern-Pfemerer gaauu.
+----> Ainige Wörter von derer Zeil ghoernd mit n Öndern-Pfemerer göndert.
+-
+-ce  löscht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                  Letzn 3.4.: NON MEERER ÖNDERUNGEN PFELFS  c
+-
+-
+-   ** D Löshfaudung  c  arechtt mit de nömlichnen Wolender wie dö mit  d  **
+-
+-  1. Dyr Önder-Pfemerer arechtt anleich wie d Löshfaudung mit   d  ,  und zwaar
+-     yso:
+-         c    [Zal]   Bewögungsschritt (Wolend)
+-
+-  2. D Wolender  seind  de gleichn,  öbbenn  w  für Wort und  $ für s Zeilnend.
+-
+-
+-  3. Bewög di zo dyr eerstn untignen Zeil mit ---> .
+-
+-  4. Ietz geest auf dönn eerstn Faeler.
+-
+-  5. Zipf  c$  , gib önn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
+-     <ESC>.
+----> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
+----> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
+-
+-Denk allweil dran,  däßst iederzeit  mit dyr Ruggtastn Faeler ausbössern kanst.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 3
+-
+-
+-  1. Um ayn  vorher glöschts Gwort  anzfüegn,  zipf  p  .  Daa dyrmit  werd dös
+-     gantze Gwort  NAACH n Mörkl  angfüegt.  Wenn s ayn gantze Zeil  gwösn ist,
+-     werd dö sel als de Zeil unterhalb n Mörkl eingfüegt.
+-
+-  2. Um dös Zaichen  unter n Mörkl,  also wo dyr Mörkl ist,  z ersötzn, zipf  r
+-     und aft dös Zaichen, wost daadl habn willst.
+-
+-  3. Dyr Önderungspfemerer ( c = »change«) laasst ainn umbb n Mörkl hinst eyn s
+-     End von n Wolend öndern. Zipf  ce  , dyrmitst umbb n Mörkl hinst eyn s End
+-     von n Wort öndertst, und  c$  hinst eyn s End von dyr Zeil.
+-
+-  4. Für d Önderung lautt dyr Pfueg:
+-
+-     c   [Zal]   Wolend
+-
+-Ietz tue mit dyr naehstn Letzn weiter.
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                 Letzn 4.1: MÖRKLSTÖLLUNG UND DAUTTICHTDARSTAND
+-
+-** Demmlt <STRG>g, däßst önn Befand und Darstand von dyr Dautticht anzaigst. **
+-  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
+-
+-Anmörkung: Lis dö gantze Letzn daader durch, ee wennst iewign öbbs unternimmst!
+-
+-  1. Druck  <STRG>g  .  Auf dös hin erscheint auf derer Seitt ganz unt ayn Dar-
+-     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
+-     Mörk dyr de Zeilnnummer für n Schrit 3.
+-
+-Anmörkung:  Müglicherweis  seghst aau önn Mörklbefand  in n zesmen untern Bild-
+-            schirmögg. Aft ist s "Lindl" (»ruler«) eingstöllt; schau dyrzue mit
+-            n Befelh   :help 'ruler'   naach.
+-  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
+-     gg  gibst ein, däßst gan n Anfang von dyr Dautticht aufhinkimmst.
+-
+-  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
+-     Dös bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dös eerste
+-     Maal <STRG>g gadruckst.
+-
+-  4. Wennst di sicher gnueg füelst, aft füer d Schritt 1 hinst 3 aus.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
+-               
+-
+-  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
+-
+-  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. Dös sel wie aau dyr
+-     Mörkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
+-
+-  2. Ietz zipf 'Faeeler' <EIN>. Netty um dös 'Faeeler' willst ietz suechen.
+-
+-  3. Willst um gnaun dönn Ausdruk weitersuechen, zipf ainfach  n  (wie »next«).
+-     Willst hinzrugg suechen, aft gibst  N  ein.
+-
+-  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
+-
+-  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und dös
+-     öfter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwärts.
+-
+---->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
+-
+-Anmörkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
+-            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wär auf aus.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 4.3: DE GÖGNKLAMMERN FINDDN
+-
+-
+-   ** Zipf  %  , um de entspröchete Klammer  )  ,  ]  older  }  z finddn. **
+-
+-  1. Sötz önn Mörkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
+-     in dyr untignen Zeil, wo mit ---> angmörkt ist.
+-
+-  2. Ietzet zipf s Zaichen  %  .
+-
+-  3. Dyr Mörkl geet ietz auf de pässete schliessete Klammer.
+-
+-  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr öffneretn Klammer zrugg.
+-
+-  5. Sötz önn Mörkl auf ayn anderne Klammer von   ({[]})   und pröblt   %  aus.
+-
+----> Dös ( ist  blooß ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
+-
+-Anmörkung:  Um dö Müglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
+-            Spaichgwort verzweiflt ayn faelete Gögnklammer suechst!
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                 Letzn 4.4: D ERSÖTZUNGSFAUDUNG (»substitute«)
+-
+-
+-        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n Ersötzn. **
+-
+-  1. Gee mit n Mörkl zo dyr unt steehetn mit ---> angmörktn Zeil.
+-
+-  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersötzt alsnan grad dös +eerste "dee",
+-     wo vürkimmt.
+-
+-  3. Ietz pröblt s mit  :s/dee/de/g  . Dös zuesötzliche  g  ("Pflok"  nennt myn
+-     öbbs Sölchers) bewirkt, däß allss, was dyrmit kennzaichnet ist,  innerhalb
+-     von dyr ainn Zeil ersötzt werd.
+-
+----> Dee schoenste Zeit, däß myn dee Blüemln anschaut, ist dee schoene Lan-
+-     gesszeit.
+-  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Öndern,  zipf
+-     :#,#s/alt/neu/g  ,  wobei # ieweils für de eerste und lösste Zeil von dönn
+-     Pfraich steet.
+-     :%s/alt/neu/g  zipfst, däßst d Vürkemmen in dyr gantzn Dautticht öndertst.
+-        Mit  :%s/alt/neu/gc  finddst allsand Vürkemmen in dyr gsamtn Dautticht;
+-     daa werst aber zeerst non gfraagt, obst ys ersötzn willst older nity.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 4
+-                        
+-  1. <STRG>g   zaigt dönn ietzundn Dauttichtbefand  und önn Darstand dyrvon an.
+-           G  bringt di an s End von dyr Dautticht.
+-     <Zal> G  bringt di gan dyr entspröchetn Zeilnnummer.
+-          gg  bringt di zo dyr eerstn Zeil.
+-          
+-  2. D Eingaab von  /  mit aynn Ausdruk suecht VÜRSHLING um dönn Ausdruk.
+-     Gibst  ?  und aynn Suechbegrif ein, suecht s um dönn ÄRSHLING.
+-     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
+-     gsuecht. Mit  N geet s umkeerter weiter.
+-     <STRG>o bringt di zo ölterne Befändd zrugg, <STRG>i zo neuerne.
+-
+-  3. D Eingaab von  % , wenn dyr Mörkl auf ainer von dene Klammern steet:   ({[
+-     )]}  , bringt di zo dyr Gögnklammer.
+-
+-  4. Um dös eerste Vürkemmen  von "alt"  in ayner Zeil  durch "neu"  z ersötzn,
+-     zipf   :s/alt/neu   .
+-     Um allsand in ayner Zeil z ersötzn, zipf   :s/alt/neu/g   .
+-     Mechst allss in zwo Zeiln ersötzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
+-     Mechst allss in dyr gantzn Dautticht ersötzn, gib ein:   :%s/alt/neu/g   .
+-     Willst ayn ieds Maal bstaetln, höng 'c' wie »confirm« hint anhin.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÜERN 
+-            
+-
+-  ** Willst ayn Gfäßfaudung ausfüern, gib ainfach dö sel naach   :!   ein. **
+- 
+-  1. Zipf  dönn bekanntn Befelh   :  ,  dyrmitst  mit n Mörkl  auf n Bildschirm
+-     ganz abhin kimmst. Draufhin kanst aynn gwonen Gfäßbefelh eingöbn.
+-
+-  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de Müglich-
+-     keit, ayn beliebige ausserige Gfäßfaudung auszfüern.
+-
+-  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
+-     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wärst.  Geet   ls
+-     aus iewign aynn Grund nit, aft pröblt s mit  :!dir <EIN>  .
+-
+-Also non aynmaal: Mit dönn Angang kan ayn iede beliebige ausserige Faudung aus-
+-                  gfüert werdn, aau mit Auerwerdd.
+-
+-Und wolgmörkt:    Allsand Befelh, wo mit  :  angeend,  müessend mit <EIN> bstö-
+-                  tigt werdn. Dös dyrsagn myr vürbaß niemer.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-           Letzn 5.2: NON MEERER DRÜBER, WIE MYN DAUTTICHTN SCHREIBT
+-
+-
+-      ** Um öbbs Gönderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
+-
+-  1. Zipf  :!dir   older  :!ls  ,  däßst dyr ayn Auflistung von deinn Verzaich-
+-     niss ausherlaasst.  Däßst dyrnaach <EIN> eingöbn muesst, waisst ee schoon.
+-
+-  2. Suech dyr aynn Dauttichtnam aus, dönn wo s non nit geit, öbbenn POCH.
+-
+-  3. Ietz demmlt:  :w POCH   (also mit POCH als dönn neuen Dauttichtnam).
+-
+-  4. Dös speichert ietz de gantze Dautticht, also önn Wimmschainer,  unter dönn
+-     Nam POCH. Dös kanst leicht überprüeffen, indem däßst ainfach  :!ls   older
+-     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
+-
+-Anmörkung:  Stigst ietz aus n Wimm aus und gännst n aft wider mit   vim POCH  ,
+-            naacherd wär dö Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
+-            wiest n gspeichert haast.
+-
+-  5. Ietz verweitert dö Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
+-     beziehungsweis bei aynn Ainslgebäu mit   :!rm POCH   .
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
+-
+-** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
+-
+-  1. Ruck önn Mörkl auf netty dö Zeil daader.
+-
+-  2. Demmlt  v  und gee mit n Mörkl  auf dönn fümftn Auflistungspunt untet.  Du
+-     seghst glei, däß s Gwort vürherghöbt erscheint.
+-
+-  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
+-
+-  4. Zipf  w POCH  , wobei s dönn Dauttichtnam POCH  non nit geit.  Vergwiß di,
+-     däßst dös  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
+-
+-  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
+-     :!dir  older  :!ls  ,  däßst dös überprüeffst. Lösh s fein nit öbbenn! Mir
+-     brauchend s nömlich für de naehste Letzn.
+-
+-Anmörkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n Mörkl um-
+-            aynandfarn,  um d Auswal  z veröndern.  Drafter kan myn mit yn aynn
+-            Pfemerer  mit dönn Gwort  öbbs machen.  Zo n Beispil löscht  d  dös
+-            Gwort.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-               Letzn 5.4: EINLÖSN UND ZAMMENFÜERN VON DAUTTICHTN   
+-
+-
+-    ** Um önn Inhalt von ayner Dautticht einzlösn, zipf  :r DAUTTICHTNAM  **
+-
+-  1. Sötz önn Mörkl über dö Zeil daader.
+-
+-OBACHT:  Aft däßst önn Schrit 2  ausgfüert haast,  seghst auf aynmaal  öbbs aus
+-         dyr Letzn 5.3.  Bewög di naacherd wider abwärts, dyrmitst dö Letzn wi-
+-         derfinddst.
+-  2. Ietz  lis  dein Dautticht  POCH ein,  indem däßst d Faudung   :r POCH aus-
+-     füerst,  wobei wie gsait POCH  für dönn  von dir  ausgsuechtn Dauttichtnam
+-     steet. De einglösne Dautticht werd unterhalb dyr Mörklzeil eingfüegt.
+-
+-  3. Um zo n Überprüeffen,  ob de Dautticht  aau gwiß einglösn ist,  gee zrugg;
+-     und du seghst,  däß s ietz zwo Ausförtigungen  von dyr Letzn 5.3. geit,  s
+-     Urniss und de eingfüegte Dauttichtfassung.
+-
+-Anmörkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlösn.  Zo n Bei-
+-            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und füegt s
+-            unterhalb n Mörkl ein.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 5
+-
+-
+-  1. :!FAUDUNG füert aynn ausserignen Befelh aus.
+-
+-      Daader ayn Öttlych gwänddte Beispiler:
+-      (Fenstl)              (Ainsl - Leinsl)
+-      :!dir                 :!ls                - listt s Verzaichniss auf.
+-      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
+-
+-  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dönn besagtn Nam.
+-
+-  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
+-     Dautticht mit seln Nam.
+-
+-  4. :r DAUTTICHTNAM  ladt sele Dautticht  und füegt s  unterhalb n Mörklbefand
+-     ein.
+-
+-  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und füegt s  unterhalb n
+-     Mörklbefand ein.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                        Letzn 6.1: ZEIL ÖFFNEN (»open«)
+-
+-
+-        ** Zipf o, um ayn Zeil unterhalb n Mörkl z öffnen und eyn d **
+-                        ** Einfüegartweis z kemmen. **
+-
+-  1. Bewög önn Mörkl zo dyr eerstn mit ---> angmörktn Zeil unt.
+-
+-  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n Mörkl z öffnen  und mit dyr Ein-
+-     füegartweis weiterztuen.
+-
+-  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d Einfüegartweis z ver-
+-     laassn.
+----> Mit  o  werd dyr Mörkl auf de offene Zeil in dyr Einfüegartweis gsötzt.
+-
+-  4. Um ayn Zeil OBERHALB n Mörkl aufzmachen,  gib ainfach aynn groosss O statt
+-     yn aynn klainen ein. Versuech dös auf dyr untignen Zeil.
+-
+----> Öffnet ayn Zeil über derer daader mit  O  ,  wenn dyr Mörkl auf derer Zeil
+-     ist.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 6.2: GWORT ANFÜEGN (»append«)
+-
+-
+-                ** Zipf  a  , um öbbs NAACH n Mörkl einzfüegn. **
+-
+-  1. Bewög önn Mörkl gan n Anfang von dyr eerstn Üebungszeil mit ---> unt.
+-
+-  2. Druck  e  , hinst däß dyr Mörkl an n End von  Zei  steet.
+-
+-  3. Zipf ayn klains  a  , um öbbs NAACH n Mörkl anzfüegn.
+-
+-  4. Vergöntz dös Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
+-     weis z verlaassn.
+-
+-  5. Bewög di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
+-     4.
+-
+----> Dö Ze biett ayn Glögn , ayn Gwort in ayner Zeil anzfü.
+----> Dö Zeil biett ayn Glögnet, ayn Gwort in ayner Zeil anzfüegn.
+-
+-Anmörkung:   a  ,  i  und  A  bringend ainn gleichermaaßn eyn d Einfüegartweis;
+-             dyr ainzige Unterschaid ist, WO mit n Einfüegn angfangt werd.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÖTZN (»replace«)
+-
+-
+- ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersötzn. **
+-
+-  1. Bewög önn Mörkl zo dyr eerstn untignen, mit ---> angmörktn Zeil.
+-     Gee mit n Mörkl gan n Anfang von n eerstn  xxx  .
+-
+-  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
+-     yso däß de sel s xxx ersötzt.
+-
+-  3. Druck <ESC> ,  um d Ersötzungsartweis  z verlaassn.  Du gspannst,  däß dyr
+-     Rest von dyr Zeil unveröndert bleibt.
+-
+-  4. Äfert die Schritt, um dös überblibne xxx z ersötzn.
+-
+----> S Zunddn von 123 zo xxx ergibt xxx.
+----> S Zunddn von 123 zo 456 ergibt 579.
+-
+-Anmörkung: D Ersötzungsartweis ist wie d Einfüegartweis,  aber ayn ieds eindem-
+-           mlte Zaichen löscht ayn vorhanddns.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 6.4: GWORT AAMEN UND EINFÜEGN
+-
+- ** Benutz önn Pfemerer  y  , um öbbs z aamen, und  p  , um öbbs einzfüegn. **
+-
+-  1. Gee zo dyr mit  --->  angmörktn Zeil unt  und sötz önn Mörkl  hinter "a)".
+-
+-  2. Ginn d Sichtisch-Artweis mit   v   und bewög önn Mörkl gnaun vor "eerste".
+-  
+-  3. Zipf  y  , um dönn vürherghöbtn Tail z aamen.
+-
+-  4. Bewög önn Mörkl gan n End von dyr naehstn Zeil:  j$
+-
+-  5. Demmlt  p  , um dös Gwort einzfüegn, und aft:  a zwaitte <ESC>  .
+-
+-  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
+-     wög di gan n End von dyr naehstn Zeil mit  j$   und füeg s Gwort dortn mit
+-     p  an.
+-
+---->  a) dös ist dyr eerste Eintrag.
+-      b)
+-
+-Anmörkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                           Letzn 6.5: SCHALTTER SÖTZN
+-
+-** Sötz aynn Schaltter yso,  däß ayn Suech older Ersötzung Grooß- und Klain- **
+-                            ** schreibung übergeet. **
+-                            
+-  1. Suech um 'übergee", indem däßst   /übergee   eingibst.
+-     Widerhol d Suech ayn Öttlych Maal, indem däßst de Tastn  n  druckst.
+-
+-  2. Sötz de Zwisl - önn Schaltter - 'ic' (»ignore case«), indem däßst  :set ic
+-     eingibst.
+-  3. Ietz suech wider um 'übergee' und tue aau wider mit  n  weiter.  Daa fallt
+-     dyr auf, däß ietz öbbenn aau  Übergee  und  ÜBERGEE  hergeet.
+-
+-  4. Sötz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
+-
+-  5. Widerhol d Suech und bobacht, was ietz gschieght:   /übergee <EIN>
+-
+-  6. Däßst grooß und klain wider gwon unterscheidst, zipf:   :set noic
+-
+-Anmörkung:  Mechst de Tröffer niemer vürherghöbt seghn,  gib ein:   :nohlsearch
+-Anmörkung:  Sollt klain/grooß bei ayner ainzignen Suech wurst sein,  benutz  \c
+-            in n Suechausdruk:   /übergee\c <EIN>
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 6
+-
+-  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n Mörkl z öffnen und d Einfüegartweis z
+-                 ginnen.
+-     Zipf  O  ,  um ayn Zeil OBERHALB n Mörkl z öffnen.
+-
+-  2. Zipf  a  ,  um NAACH n Mörkl ayn Gwort einzfüegn.
+-     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfüegn.
+-
+-  3. D Faudung  e  bringt di gan n End von aynn Wort.
+-
+-  4. Dyr Pfemerer  y  (»yank«) aamt öbbs,  p  (»put«) füegt dös ein.
+-
+-  5. Ayn groosss  R  geet eyn d Ersötzungsartweis,  hinst däß myn <ESC> druckt.
+-
+-  6. D Eingaab von ":set xxx"  sötzt de Zwisl "xxx".  Ayn Öttlych Zwisln seind:
+-     'ic' 'ignorecase'   Grooß/klain wurst bei ayner Suech
+-     'is' 'incsearch'    Zaig aau schoon ayn Tailüberainstimmung
+-     'hls' 'hlsearch'    Höb allsand pässetn Ausdrück vürher
+-     Dyr Schaltternam kan in dyr Kurz- older Langform angöbn werdn.
+-
+-  7. Stöll yn ayner Zwisl "no" voran, däßst ys abschalttst:   :set noic
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
+-
+-
+-            ** Nutz dös einbaute Hilfgebäu, de "Betribsanlaittung" **
+-
+-  Eyn n Wimm  ist ayn ausfüerliche "Gebrauchsanweisung"  einbaut.  Für s Eerste
+-  pröblt ainfach ains von dene dreu aus:
+-    - Druck d <HILF>-Tastn, wennst öbbenn aine haast.
+-    - Druck de Tastn <F1>, fallsst ys haast.
+-    - Zipf   :help <EIN>
+-
+-  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dös mit dyr Hilf geet.
+-  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
+-  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
+-
+-  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem däßst yn dyr Faudung
+-  :help   aynn Auerwerd naachstöllst und istig <EIN> nit vergisst.  Pröblt dös:
+-
+-     :help w
+-     :help c_CTRL-D
+-     :help insert-index
+-     :help user-manual
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 7.2: ERSTÖLL AYN GIN-SCHRIPF
+-
+-
+-            ** Mutz önn Wimm mit de einbautn Faehigkeitn auf **
+-
+-  Dyr Wimm besitzt ayn Wösn Schäftungen,  wo über n Urwimm aushingeend, aber de
+-  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
+-  ausherholst, erstöllst ayn "vimrc"-Dautticht.
+-
+-  1. Lög ayn "vimrc"-Dautticht an;  dös geet  ie naach Betribsgebäu  verschidn:
+-     :e ~/.vimrc     für s Ainsl
+-     :e $VIM/_vimrc  bei n Fenstl
+-
+-  2. Ietz lis önn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
+-     :r $VIMRUNTIME/vimrc_example.vim
+-
+-  3. Speichert de Dautticht mit:
+-     :w
+-
+-  4. Bei n naehstn Gin von n Wimm  ist aft d Füegnussvürherhöbung  zuegschaltt.
+-     Du kanst dyr allss  eyn dö Dautticht  einhinschreibn,  wasst bständig habn
+-     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                              Letzn 7.3: VERGÖNTZN
+-
+-
+-               ** Befelhszeilnvergöntzung mit <STRG>d und <TAB> **
+-
+-  1. Vergwiß di, däß dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
+-
+-  2. Schaug naach, wölcherne Dauttichtn däß s in n Verzaichniss geit:   :!ls
+-     older   :!dir
+-  3. Zipf önn Anfang von ayner Faudung:   :e
+-
+-  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
+-     angeend.
+-  5. Druck  <TAB>  ,  und dyr Wimm vervollstöndigt  önn Faudungsnam zo ":edit".
+-
+-  6. Füeg  ayn Laerzaichen  und önn Anfang  von ayner  besteehetn Dautticht an:
+-     :edit DAU
+-
+-  7. Druck <TAB>.  Dyr Wimm vergöntzt önn Nam,  dös haisst,  wenn yr aindeuttig
+-     ist.
+-Anmörkung:  D Vergöntzung  geit s für aynn Hauffen Faudungen.  Versuech ainfach
+-           <STRG>d  und  <TAB>.  Bsunders nützlich ist dös bei   :help  .
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 7
+-
+-
+-  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z öffnen.
+-
+-  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
+-
+-  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
+-
+-  4. Zipf  :q  , um s Hilffenster z schliessn.
+-
+-  5. Erstöll ayn vimrc-Ginschripf  zuer Sicherung von deine Mötzneinstöllungen.
+-
+-  6. Druck <STRG>d, aft däßst naach  :  mit ayner Faudung angfangt haast,  dyr-
+-     mitst mügliche Vergöntzungen anzaigt kriegst.
+-     Druck <TAB> für ain Vervollstöndigung yllain.
+-
+-
+-
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-
+-  Dös wär ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
+-  und bündignen Überblik über s Blat  WIMM z lifern,  netty vil gnueg,  däß myn
+-  für s Eerste  wirklich öbbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
+-  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
+-  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
+-
+-  Zo n Weiterlösn und Weiterlernen wör dös Buech daader zo n Empfelhen:
+-    Vim - Vi Improved - von n OUALLINE Steve
+-    Verlaag: New Riders
+-  Dös ist dös eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dös Grechte für
+-  Anfönger. Es haat ayn Wösn Beispiler und aau Bilder drinn.
+-  See http://iccf-holland.org/click5.html
+-
+-  Dös folgete Buech  ist schoon ölter und meerer  über n Urwimm  als wie über n
+-  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
+-  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
+-  3897211262
+-  In dönn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
+-  De söxte Ausgaab enthaltt aau schoon öbbs über n Wimm.
+-  Als ietzunde Bezugniss  für d Fassung  6.2  und ayn pfrenge Einfüerung  dient
+-  dös folgete Buech:
+-    vim ge-packt  von n WOBST Reinhard
+-    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
+-  Trotz dyr recht pfrengen Darstöllung  ist s durch seine viln nützlichnen Bei-
+-  spiler aau für Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
+-  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
+-
+-  Verfasst habnd dönn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
+-  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf Entwürff, wo
+-  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
+-  zuer Verfüegung gstöllt haat. Gundpost: bware@mines.colorado.edu.
+-  Für n Wimm haat n dyr MOOLENAAR Bram barechtt.
+-  De bairische Übersötzung stammt von n HELL Sepp 2009. Sein Gundpostbrächt ist
+-  sturmibund@t-online.de 
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-  
+-
+- 
+-
+-
+-
+diff -Naur vim73.orig/runtime/tutor/tutor.bj.utf-8 vim73/runtime/tutor/tutor.bj.utf-8
+--- vim73.orig/runtime/tutor/tutor.bj.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.bj.utf-8	1970-01-01 00:00:00.000000000 +0000
+@@ -1,987 +0,0 @@
+-===============================================================================
+-=    G o t i k a m   i n   n   W I M M - S c h a i n e r   -   Fassung 1.7D   =
+-===============================================================================
+-
+-   Dyr Wimm ist ayn gro mÃ€chtigs Blat, dÃ¶s was mit aynn WÃ¶sn Befelh aufwartt; z
+-   vil,  dÃ€Ã myn s allsand  in aynn Schainer  wie dÃ¶nn daader  unterbrÃ€ng.  Der
+-   Schainer ist yso aufbaut,  dÃ€Ã yr halt netty die Befelh allsand bringt, wost
+-   brauchst, dÃ€Ãst mit iem fÃŒr s Eerste wirklich Ã¶bbs anfangen kanst.
+-   Durchhinarechtn kanst di, wennst willst, in ayner halbetn Stund; dÃ¶s haisst,
+-   wennst di nit grooÃ mit n PrÃ¶bln und TÃŒftln aufhaltst.
+-
+-   OBACHT:
+-   Die Faudungen,  wost daader finddst,  gaand istig  s Gwort Ã¶ndern.  DÃ¶sswÃ¶gn
+-   machst eyn n BÃ¶stn glei  ayn Aamum von derer Dautticht daader.  Haast alsnan
+-   dÃ¶s Gwort daader  mit n Befelh "vimtutor bj"  ausherlaassn,  ist s ee schoon
+-   ayn Aamum.
+-   Mir kan s  nit oft gnueg  sagn,  dÃ€Ã  der Schainer daader  istig  gan n Ãebn
+-   ghoert.  Also muesst schoon aau die Befelh ausfÃŒern,  wennst ys gscheid ler-
+-   nen willst. Mit n LÃ¶sn yllain ist s +nit taan!
+-
+-   Ietz schaust grad non, dÃ€Ã dein FÃ¶ststÃ¶lltastn nit druckt ist; und aft geest
+-   glei aynmaal mit dyr j-Tastn abwÃ€rts (yso laaufft dÃ¶s nÃ¶mlich),  hinst dÃ€Ãst
+-   de gantze Letzn 1.1 auf n Bildschirm haast.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 1.1: MIT N MÃRKL UMAYNANDFARN
+-
+-**  Dyrmitst mit n MÃ¶rkl umaynandkimmst, druck h, j, k und l wie unt zaigt.  **
+-            ^            Ayn Ãslsbrugg:
+-            k            De Tastn  h  ist winster und +geet aau gan winster.
+-   < h             l >   S  l  leit zesm und richtt si gan zesm.
+-            j            S  j  kan myn wie aynn Pfeil gan unt seghn.
+-            v            Mit n  k  kimmst gan n KOPF.            
+-  1. Ietz ruedertst ainfach mit n MÃ¶rkl auf n Bildschirm umaynand,  hinst dÃ€Ãst
+-     di sicher fÃŒelst.
+-  2. Halt  d Abhin-Tastn (j)  druckt;  aft rumplt s  ainfach weiter.  Netty yso
+-     kimmst gan dyr naehstn Letzn.
+-     
+-  3. Wie gsait, ietz bewÃ¶gst di also mit derer Tastn gan dyr Letzn 1.2.
+-
+-Non Ã¶bbs: Allweil, wenn dyr niemer ganz wol ist, wasst Ã¶bbenn druckt haast, aft
+-          zipfst  <ESC>;  naacherd bist wider ganz gwon in dyr Befelhs-Artweis.
+-
+-      
+-          NÃ¶bnbei gsait kimmst gwonerweil aau mit de Pfeiltastnen weiter.  Aber
+-          hjkl  seind z haissn s Wimm-Urgstain;  und de "HÃ¶rtn" seind ganz dyr-
+-          fÃŒr, dÃ€Ã myn bei +dene bleibt. PrÃ¶blt s ainfach aus!
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                        Letzn 1.2: ÃNN WIMM AUSSCHALTTN
+-
+-
+-  ALSO, EE WENNST ÃBBS VON DAA UNT AUSFÃERST,  LIS LIEBER ZEERST DE GANTZE LET-
+-  ZN!
+-
+-  1. Druck d <ESC>-Tastn, dyrmitst aau gwiÃ in dyr Befelhs-Artweis bist.
+-  
+-  2. Demmlt  :q! <EIN>.
+-     Daa dyrmit  benddst ys Blat  und verwirffst  allss,  wasst Ã¶bbenn  gÃ¶ndert
+-     haast.
+-
+-  3. Balst Ã¶nn Eingib seghst, gib dÃ¶ Faudung ein,  wo di zo dÃ¶nn Schainer brun-
+-     gen haat, also    vimtutor bj <EIN>.
+-
+-  4. Also, wenn ietz allsse sitzt, naacherd fÃŒerst d Schritt 1 hinst 3 aus, mit
+-     wasst ys Blat verlaasst und aft wider einhinkimmst.
+-
+-AnmÃ¶rkung: Mit  :q! <EIN> verwirffst allss, wasst gÃ¶ndert older enther gschribn
+-           haast. In aynn Ãttlych Letznen lernst acht, wiest dÃ¶s allss in ayner
+-           Dautticht speichertst.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 1.3: GWORT BARECHTN - LÃSCHN 
+-
+-         
+-         ** Druck  x  , dyrmitst dÃ¶s Zaichen unter n MÃ¶rkl lÃ¶schst. **
+-
+-  1. BewÃ¶g di mit n MÃ¶rkl auf de mit  ---> angmÃ¶rkte Zeil unt.
+-
+-  2. Zo n Faeler VerbÃ¶ssern  farst mit n MÃ¶rkl  netty  auf dÃ¶s Zaichen,  dÃ¶s wo
+-     glÃ¶scht ghoert.
+-
+-  3. Druck de Tastn  x  , dÃ€Ãst dÃ¶s ÃŒberflÃŒssige Zaichen lÃ¶schst.
+-
+-  4. Ietz tuest so lang weiter mit 2 hinst 4, hinst dÃ€Ã dyr Saz stimmt.
+-
+----> De Kkuue sprangg ÃŒbber nn Maanad.
+-
+-  5. Wenn ietz de Zeil verbÃ¶ssert ist, geest gan dyr Letzn 1.4. weiter.
+-
+-Und ganz wichtig:  Dyrweilst dÃ¶nn Schainer durcharechtst,  versuech nit Ã¶bbenn,
+-                   allss auswendig z lernen;  nÃ€n, lern ainfach mit n Anwenddn!
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 1.4: GWORT BARECHTN - EINFÃEGN
+-
+-
+-                  **  Druck  i  , dyrmitst Ã¶bbs einfÃŒegst. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn untignen Zeil, wo mit ---> angeet.
+-
+-  2. Dyrmitst  de eerste Zeil  wie de zwaitte machst,  bewÃ¶g Ã¶nn MÃ¶rkl  auf dÃ¶s
+-     eerste Zaichen NAACH derer StÃ¶ll, daa wo s Gwort eingfÃŒegt werdn sollt.
+-
+-  3. Druck  i  und gib dÃ¶s ein, was abgeet.
+-
+-  4. Wenn ieweils ayn Faeler verweitert ist, aft druck <ESC>; und dyrmit kimmst
+-     gan dyr Befelhsartweis zrugg.
+-     So, und ietz tuest ainfach yso weiter, hinst dÃ€Ã dyr Saz stimmt.
+-
+----> Daader gt dd Ã¶bbs b.
+----> Daader geet diend Ã¶bbs ab.
+-
+-  5. Balst mainst,  dÃ€Ãst ys Gwort-EinfÃŒegn kanst, aft geest gan dyr Letzn 1.5.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 1.5: GWORT BARECHTN - ANFÃEGN
+-
+-
+-                      ** Druck  A  gan n Gwort AnfÃŒegn. **
+-
+-  1. Gee mit n MÃ¶rkl gan dyr eerstn untignen Zeil, wo ayn ---> dyrvor haat.
+-     Daa ist s gleich, wo gnaun dyr MÃ¶rkl in derer Zeil steet.  
+-
+-  2. Demmlt  A  und gib de entsprÃ¶chetn ErgÃ¶ntzungen ein.
+-
+-  3. Wennst  mit n AnfÃŒegn fÃ¶rtig bist,  aft druckst <ESC>,  dÃ€Ãst wider eyn de
+-     Befelhsartweis zruggkimmst.
+-
+-  4. So,  und ietz geest aft non gan dyr zwaittn  mit ---> angmÃ¶rktn Zeil;  und
+-     daadl machst ys netty yso.
+-
+----> In derer Zeil gee  
+-     In derer Zeil geet ayn Weeng ayn Gwort ab.
+----> Aau daader stee
+-     Aau daader steet Ã¶bbs UnvollstÃ¶ndigs. 
+-
+-  5. Wennst s AnfÃŒegn von Gwort drauf haast, naacherd gee gan dyr Letzn 1.6.  
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 1.6: AYN DAUTTICHT BARECHTN
+-
+-
+-     ** Mit  :wq  speichertst ayn Dautticht und verlaasst Ã¶nn Wimm ganz. **
+-
+-  !! OBACHT:  Ee wennst mit dÃ¶nn alln daa unt weitertuest, lis zeerst de gantze
+-     Letzn durch!!
+-
+-  1. VerlaaÃ also s Blat, wie s in dyr Letzn 1.2. haisst, mit  :q!  !
+-
+-  2. Gib dÃ¶ Faudung eyn n Eingib ein:  vim Schainer <EIN> . 'vim' ruefft s Blat
+-     auf,  und 'Schainer'  haisst de Dautticht,  wost barechtn  willst.  Dyrmit
+-     haast also ayn Dautticht, dÃ¶ wost barechtn kanst.
+-
+-  3. Ietz  fÃŒegst Ã¶bbs ein older lÃ¶schst Ã¶bbs,  wiest ys in de vorignen Letznen
+-     glernt haast.
+-
+-  4. Speichert de gÃ¶nderte Dautticht und verlaaÃ Ã¶nn Wimm mit  :wq  <EIN>  .
+-
+-  5. SchmeiÃ Ã¶nn Wimmschainer neu an und gee gan dyr folgetn Zammenfassung.
+-
+-  6. Aft dÃ€Ãst  de obignen Schritt glÃ¶sn und kÃ€ppt haast,  kanst ys durchfÃŒern.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 1
+-
+-
+-  1. Dyr MÃ¶rkl werd mit de Tastnen hjkl older aau mit de Pfeiltastnen gsteuert.
+-              h (winst)     j (ab)        k (auf)       l (zes)
+-
+-  2. Um Ã¶nn Wimm umbb n Eingib aus z ginnen, demmlt: vim DAUTTICHT <EIN> .
+-
+-  3. Willst Ã¶nn Wimm verlaassn und aau allss verwerffen, aft gibst ein:
+-                <ESC>  :q!  <EIN> .
+-     Gan n Verlaassn und Speichern aber zipfst <ESC>  :wq  <EIN>.
+-
+-  4. Willst dÃ¶s Zaichen lÃ¶schn, daa wo dyr MÃ¶rkl drauf ist, demmltst  x  .
+-
+-  5. Willst Ã¶bbs vor n MÃ¶rkl eingÃ¶bn, zipfst  i  und drafter  <ESC>  .
+-     Mechst ys aber eyn s Zeilnend anhinhÃ¶ngen, benutzt ys   A  .
+-     Und ainfach naach n MÃ¶rkl fÃŒegst ys mit  a  ein  .
+-
+-AnmÃ¶rkung:  Druckst <ESC>, kimmst eyn de Befelhsartweis zrugg older brichst ayn
+-            Faudung ab, dÃ¶ wo dyr schiefgangen ist.
+-
+-     Ietz tue mit dyr Letzn 2 weiter.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                           Letzn 2.1.: LÃSHFAUDUNGEN
+-
+-
+-                 ** Demmlt  dw  , dyrmitst ayn Wort lÃ¶schst **
+-
+-  1. Druck  <ESC>, dyrmit s aau gwiÃ ist, dÃ€Ãst in dyr Befelhsartweis bist.
+-
+-  2. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr mit ---> angmÃ¶rktn Zeil unt.
+-
+-  3. Und daa geest ietz auf n Anfang von aynn Wort, dÃ¶s wo glÃ¶scht ghoert.
+-
+-  4. Zipf  dw  , dÃ€Ãst dÃ¶s gantze Wort lÃ¶schst.
+-
+-  NÃ¶bnbei:  Dyr Buechstabn  d  erscheint auf dyr lÃ¶sstn Zeil  von n Bildschirm,
+-            sobaldst n eingibst. Dyr Wimm wartt ietz drauf, dÃ€Ã Ã¶bbs kimmt, al-
+-            so  daader ayn  w  .  Seghst  freilich  Ã¶bbs Anderts  wie ayn  d  ,
+-            naacherd haast  Ã¶bbs Falschs  demmlt.  Druck aft  <ESC>  und prÃ¶blt
+-            s non aynmaal.
+----> Ayn Ãttlych WÃ¶rter lustig ghoernd nit Fisper eyn dÃ¶nn Saz einhin.
+-
+-  5. Ãfert  d Schritt  3 und 4,  hinst dÃ€Ã  dyr Saz pÃ€sst,  und gee aft gan dyr
+-     Letzn 2.2.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 2.2.: NON MEERER LÃSHFAUDUNGEN
+-
+-
+-            ** Gib  d$  ein, dÃ€Ãst hinst eyn s Zeilnend lÃ¶schst. **
+-
+-  1. Druck <ESC> , dyrmitst aau gwiÃ in dyr Befelhsartweis bist.
+-
+-  2. BewÃ¶g Ã¶nn MÃ¶rkl hinst eyn de mit ---> angmÃ¶rkte Zeil untn.
+-
+-  3. Gee mit n MÃ¶rkl auf s End von dyr faelerfreien Zeil, NAACH n eerstn  .   .
+-
+-  4. Zipf  d$  , dÃ€Ãst hinst eyn s End von dyr Zeil lÃ¶schst.
+-  
+----> Ãbber haat s End von dyr Zeil doplt eingÃ¶bn. doplt eingÃ¶bn.
+-
+-
+-  5. Gee weiter  gan dyr Letzn 2.3,  dyrmitst versteest,  was daader ablaaufft.
+-
+-
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                        Letzn 2.3: PFEMERER UND WOLENDER
+-
+-
+-  Vil Faudungen,   wo s Gwort Ã¶ndernd, sÃ¶tznd si aus aynn Pfemerer und aynn Wo-
+-  lend zamm. Bal i also Ã¶bbs lÃ¶schn will, schreib i ainsting  d  und aft s "Wo-
+-  lend", dÃ¶s haisst also, "wolend", "wohin" dÃ€Ã i will - older was i halt gnaun
+-  lÃ¶schn will.
+-
+-
+-
+-
+-
+-
+-  Daader also, was i wie lÃ¶schn kan:
+-    w - hinst eyn n Anfang von n naehstn Wort AANE dÃ¶nn sein eersts Zaichen.
+-    e - gan n End von n ietzundn Wort MIT dÃ¶nn seinn lÃ¶sstn Zaichen.
+-    $ - zo n End von dyr Zeil MIT derer irn lÃ¶sstn Zaichen.
+-
+-  Also lÃ¶scht de Tastnfolg  de  umbb n MÃ¶rkl hinst eyn s Wortend.
+-AnmÃ¶rkung:   Gib i grad  dÃ¶s zwaitte Zaichen  yllain ein,  ruckt halt dyr MÃ¶rkl
+-             entsprÃ¶chet weiter.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                   Letzn 2.4: MIT AYNN ZÃLER D WOLENDER ÃFERN
+-
+-
+-      ** Gib i ayn Zal vor aynn Wolend ein, werd dÃ¶s Sel halt widerholt. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl gan n Anfang von dyr Zeil mit ---> dyrvor unt.
+-
+-  2. Zipf  2w  , dÃ€Ãst mit n MÃ¶rkl zwai WÃ¶rter weitergeest.
+-
+-  3. Zipf  3e  , dÃ€Ãst mit n MÃ¶rkl auf s End von n drittn Wort kimmst.
+-
+-  4. Zipf  0  (aynn Nuller), dÃ€Ãst eyn n Anfang von dyr Zeil hinkimmst.
+-
+-  5. Widerhol d Schritt 2 und 3 mit verschaidne ZÃ¶ler.
+-
+-  ---> DÃ¶s ist ietz grad ayn Zeil zo n drinn Umaynanderruedern.
+-
+-  6. Gee weiter gan dyr Letzn 2.5.
+-
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                 Letzn 2.5: DURCH AYNN ZÃLER GLEI MEERER LÃSCHN
+-
+-
+-              ** Ayn Zal vor aynn Pfemerer Ã€fert dÃ¶nn um seln Werd. **
+-
+-  Also, i mecht lÃ¶schn,  und zwaar Ã¶bbs Bestimmts,  und dÃ¶s so und so oft:  Daa
+-  dyrzue benutz i aynn ZÃ¶ler:
+-                              d  ZÃ¶ler  Wolend (also Ã¶nn BewÃ¶gungsschrit)
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl  gan n eerstn Wort in GROOSSBUECHSTABN in dyr mit ---> an-
+-     gmÃ¶rktn Zeil.
+-
+-  2. Demmlt  d2w  , dyrmitst de ganz grooÃgschribnen WÃ¶rter lÃ¶schst.
+-
+-  3. Ãfert  d Schritt 1 und 2  mit dÃ¶nn entsprÃ¶chetn ZÃ¶ler,  dyrmitst de drauf-
+-     folgetn  ganz groÃgschribnen WÃ¶rter  mit ayner ainzignen Faudung  lÃ¶schst:
+-
+-
+---->  DÃ¶ ABC DE Zeil FGHI JK LMN OP mit WÃ¶rter ist Q RS TUV ietz berichtigt.
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                          Letzn 2.6: ARECHTN AUF ZEILN
+-
+-
+-               ** Zipf  dd  , um ayn gantze Zeil z lÃ¶schn. **
+-
+-  Weil s gro oft vÃŒrkimmt,  dÃ€Ã myn gantze Zeiln lÃ¶scht,  kaamend schoon d Ent-
+-  wickler von n Urwimm daa drauf,  dÃ€Ã myn ainfach  dd  gan dÃ¶nn ZwÃ¶k schreibt.
+-
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl gan dyr zwaittn Zeil in n untignen "Gedicht".
+-  2. Zipf  dd  ,  um dÃ¶ Zeil z lÃ¶schn.
+-  3. Ietz bewÃ¶gst di gan dyr viertn Zeil.
+-  4. Zipf  2dd  , um zwo Zeiln zo n LÃ¶schn.
+-
+---->  1)  Roosn seind root;
+---->  2)  Drunter ist s Koot.
+---->  3)  Veigerln seind blau.
+---->  4)  Umgrabn tuet s d Sau.
+---->  5)  D Ur sait de Zeit,
+---->  6)  Sait, dÃ€Ã s mi freut,
+---->  7)  Dirndl, dein Gschau.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                     Letzn 2.7: RUGGGÃNGIG MACHEN (RUGGLN) 
+-
+-
+-             ** Zipf  u  , dyrmitst de lÃ¶sstn Faudungen ruggltst **
+-              ** older  U  , um ayn gantze Zeil widerherzstÃ¶lln. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl  gan dyr mit ---> angmÃ¶rktn Zeil unt  und gee dyrmit auf n
+-     eerstn Faeler.
+-  2. Zipf  x  , dÃ€Ãst dÃ¶s eerste z vile Zaichen lÃ¶schst.
+-  3. Ietz demmlt  u  , dyrmitst de lÃ¶sste Faudung ruggltst.
+-  4. Ietz behÃ¶b  allsand Faeler  auf dyr Zeil  mit dyr Hilf  von n Befelh  x  .
+-  5. Aft gibst ayn  U  (grooÃ) ein,  dÃ€Ãst de Zeil wider yso hinbringst,  wie s
+-     gwÃ¶sn ist.
+-  6. So,  und ietz  demmltst  so oft  u  , hinst dÃ€Ãst s  U  und de andern Fau-
+-     dungen rugggÃ¶ngig gmacht haast.
+-  7. Und ietzet widerum  schreibst  so oft  <STRG>r  , hinst dÃ€Ãst  allsand Be-
+-     felh widerhergstÃ¶llt, z haissn allsse rugg-grugglt haast  (also d RugggÃ¶n-
+-     gigmachungen rugggÃ¶ngig gmacht).
+----> Beerichtig d Faeller voon dehrer Zeiil  und sttÃ¶ll s mitt n Ruggruggln wi-
+-     der her.
+-  8. Die Faudungen seind gro wichtig; sÃ¶ helffend ainn nÃ€rrisch weiter.
+-     Ietz gee weiter gan dyr Zammenfassung von dyr Letzn 2.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 2
+-
+-
+-  1. Um von n MÃ¶rkl aus hinst eyn s naehste Wort zo n LÃ¶schn, zipf:  dw
+-  2. Um umbb n MÃ¶rkl hinst eyn s End von dyr Zeil zo n LÃ¶schn, demmlt  d$
+-  3. Dyrmitst ayn gantze Zeil lÃ¶schst, gib ein:  dd
+-  4. Mechst ayn BewÃ¶gung, ayn "Wolend", Ã¶fters,  stÃ¶ll de entsprÃ¶chete Zal dyr-
+-     vor:  3dw  older aau:  d3w
+-  5. Dyr Pfueg fÃŒr ayn Ãnderungsfaudung lautt yso:
+-               Pfemerer   [Zal]   BewÃ¶gungsschrit (Wolend)
+-     Und dÃ¶s haisst:
+-      Dyr PFEMERER gibt an, WAS taan ghoert, Ã¶bbenn   d   =  lÃ¶schn (Â»deleteÂ«).
+-      [ZAL] - Ayn Zal KAN myn angÃ¶bn, wenn myn halt ayn Wolend Ã¶fter habn will.
+-      S WOLEND,  also dyr Schrit WOHIN, besagt,  auf was i aushin will,  Ã¶bbenn
+-      auf ayn Wort (  w  ), s End von dyr Zeil (  $  ) und so weiter.
+-
+-  6. DÃ€Ãst eyn n Anfang von dyr Zeil hinkimmst, schreib aynn Nuller:  0
+-
+-  7. Um Ã¶bbs Vorigs wider z ruggln, gib ein:                u (klain also)
+-     Um allsand Ãnderungen in ayner Zeil z ruggln, haast:   U (also grooÃ)
+-     Um "rugg-z-ruggln", also allss wider herzstÃ¶lln, zipf: <STRG>r   
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                           Letzn 3.1: ANFÃEGN (Â»putÂ«) 
+-
+-
+-     ** Zipf  p  , dyrmitst Ã¶bbs gnetty GlÃ¶schts naach n MÃ¶rkl anfÃŒegst. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl gan dyr eerstn untignen Zeil mit   --->   dyrvor.
+-
+-  2. Zipf  dd  , um sele Zeil z lÃ¶schn  und dyrmit  in aynn Wimm-"Roster"  zo n
+-     speichern.
+-
+-  3. BewÃ¶g Ã¶nn MÃ¶rkl gan dyr Zeil c),  ÃBER derer, daa wo de glÃ¶schte Zeil ein-
+-     hinkemmen sollt.
+-
+-  4. So,  und ietz gibst ainfach  p  ein,  und schoon haast dÃ¶ Zeil unter derer
+-     mit n MÃ¶rkl drinn.
+-  5. Ãfert  d Schritt 2 hinst 4,  hinst dÃ€Ãst  allsand Zeiln  yso naachynaynand
+-     haast, wie s hinghoernd.
+-
+----> d) Kanst du dÃ¶s aau?
+----> b) Veigerln seind blau.
+----> c) Bedachtn kan myn lernen.
+----> a) Roosn seind root.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         Letzn 3.2: ERSÃTZN (Â»replaceÂ«)
+-
+-
+-      ** Zipf  rx  , um dÃ¶s Zaichen unter n MÃ¶rkl durch  x  z ersÃ¶tzn. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn untignen Zeil mit   --->   dyrvor.
+-
+-  2. BewÃ¶g Ã¶nn MÃ¶rkl, hinst dÃ€Ã yr auf n eerstn Faeler steet.
+-
+-  3. Zipf  r  und drafter dÃ¶s Zaichen, wo dyrfÃŒr daa hinghoert.
+-
+-  4. Widerhol d Schritt 2 und 3,  hinst dÃ€Ãst de eerste Zeil  gmaeÃ dyr zwaittn
+-     berichtigt haast:
+---->  Wie dÃ¶ Zeit eingobn wurd, wurdnd ainike falsche Zastnen zipft!
+---->  Wie dÃ¶ Zeil eingÃ¶bn wurd, wurdnd ainige falsche Tastnen zipft!
+-
+-  5. Ietz tue mit dyr Letzn 3.3 weiter.
+-
+-AnmÃ¶rkung: VergiÃ nit drauf, dÃ€Ãst mit n Anwenddn lernen solltst und nit Ã¶bbenn
+-           mit n Auswendiglernen!
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                          Letzn 3.3: ÃNDERN (Â»changeÂ«)
+-
+-
+-              ** Um hinst eyn s Wortend z Ã¶ndern, zipf  ce  . **
+-
+-  1. Gee mit n MÃ¶rkl auf de eerste mit ---> angmÃ¶rkte Zeil.
+-
+-  2. Ietz farst netty auf s  "s"  von Wstwr hin.
+-
+-  3. Zipf  ce  ein und aft d Wortberichtigung, daader also  Ã¶rter  .
+-
+-  4. Druck <ESC> und bewÃ¶g Ã¶nn MÃ¶rkl gan n naehstn Zaichen,  wo gÃ¶ndert ghoert.
+-
+-  5. Ãfert  d Schritt 3 und 4,  hinst dÃ€Ã  dyr eerste Saz  wie dyr zwaitte ist.
+-
+----> Ainige Wstwr von derer Zlww ghhnnd mit n Ãndern-Pfemerer gaauu.
+----> Ainige WÃ¶rter von derer Zeil ghoernd mit n Ãndern-Pfemerer gÃ¶ndert.
+-
+-ce  lÃ¶scht also s Wort und schlaaufft di eyn d Eingaab-Artweis.
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                  Letzn 3.4.: NON MEERER ÃNDERUNGEN PFELFS  c
+-
+-
+-   ** D LÃ¶shfaudung  c  arechtt mit de nÃ¶mlichnen Wolender wie dÃ¶ mit  d  **
+-
+-  1. Dyr Ãnder-Pfemerer arechtt anleich wie d LÃ¶shfaudung mit   d  ,  und zwaar
+-     yso:
+-         c    [Zal]   BewÃ¶gungsschritt (Wolend)
+-
+-  2. D Wolender  seind  de gleichn,  Ã¶bbenn  w  fÃŒr Wort und  $ fÃŒr s Zeilnend.
+-
+-
+-  3. BewÃ¶g di zo dyr eerstn untignen Zeil mit ---> .
+-
+-  4. Ietz geest auf dÃ¶nn eerstn Faeler.
+-
+-  5. Zipf  c$  , gib Ã¶nn Rest von dyr Zeil wie in dyr zwaittn ein und druck aft
+-     <ESC>.
+----> S End von derer Zeil sollt an de zwaitte daader anglichen werdn.
+----> S End von derer Zeil sollt mit n Befelh  c$  berichtigt werdn.
+-
+-Denk allweil dran,  dÃ€Ãst iederzeit  mit dyr Ruggtastn Faeler ausbÃ¶ssern kanst.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 3
+-
+-
+-  1. Um ayn  vorher glÃ¶schts Gwort  anzfÃŒegn,  zipf  p  .  Daa dyrmit  werd dÃ¶s
+-     gantze Gwort  NAACH n MÃ¶rkl  angfÃŒegt.  Wenn s ayn gantze Zeil  gwÃ¶sn ist,
+-     werd dÃ¶ sel als de Zeil unterhalb n MÃ¶rkl eingfÃŒegt.
+-
+-  2. Um dÃ¶s Zaichen  unter n MÃ¶rkl,  also wo dyr MÃ¶rkl ist,  z ersÃ¶tzn, zipf  r
+-     und aft dÃ¶s Zaichen, wost daadl habn willst.
+-
+-  3. Dyr Ãnderungspfemerer ( c = Â»changeÂ«) laasst ainn umbb n MÃ¶rkl hinst eyn s
+-     End von n Wolend Ã¶ndern. Zipf  ce  , dyrmitst umbb n MÃ¶rkl hinst eyn s End
+-     von n Wort Ã¶ndertst, und  c$  hinst eyn s End von dyr Zeil.
+-
+-  4. FÃŒr d Ãnderung lautt dyr Pfueg:
+-
+-     c   [Zal]   Wolend
+-
+-Ietz tue mit dyr naehstn Letzn weiter.
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                 Letzn 4.1: MÃRKLSTÃLLUNG UND DAUTTICHTDARSTAND
+-
+-** Demmlt <STRG>g, dÃ€Ãst Ã¶nn Befand und Darstand von dyr Dautticht anzaigst. **
+-  ** Zipf  G  , dyrmitst auf ayn bestimmte Zeil in dyr Dautticht hinkimmst. **
+-
+-AnmÃ¶rkung: Lis dÃ¶ gantze Letzn daader durch, ee wennst iewign Ã¶bbs unternimmst!
+-
+-  1. Druck  <STRG>g  .  Auf dÃ¶s hin erscheint auf derer Seitt ganz unt ayn Dar-
+-     standsmeldung  mit n Dauttichtnam  und n Befand  innerhalb  dyr Dautticht.
+-     MÃ¶rk dyr de Zeilnnummer fÃŒr n Schrit 3.
+-
+-AnmÃ¶rkung:  MÃŒglicherweis  seghst aau Ã¶nn MÃ¶rklbefand  in n zesmen untern Bild-
+-            schirmÃ¶gg. Aft ist s "Lindl" (Â»rulerÂ«) eingstÃ¶llt; schau dyrzue mit
+-            n Befelh   :help 'ruler'   naach.
+-  2. Druck  G  , um an s End von dyr Dautticht z kemmen.
+-     gg  gibst ein, dÃ€Ãst gan n Anfang von dyr Dautticht aufhinkimmst.
+-
+-  3. Gib d Nummer von derer Zeil ein, daa wost vorher warst,  und aft non  G  .
+-     DÃ¶s bringt di zrugg gan seler Zeil,  daa wost stuenddst,  wiest dÃ¶s eerste
+-     Maal <STRG>g gadruckst.
+-
+-  4. Wennst di sicher gnueg fÃŒelst, aft fÃŒer d Schritt 1 hinst 3 aus.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 4.2: DYR BEFELH ZO N SUECHEN 
+-               
+-
+-  ** Zipf  /  und dyrnaach aynn Ausdruk, um selbignen zo n Suechen. **
+-
+-  1. Du gibst also in dyr Befelhsartweis s Zaichen  /  ein. DÃ¶s sel wie aau dyr
+-     MÃ¶rkl erscheinend drauf unt auf n Schirm, netty wie bei dyr Faudung  :  .
+-
+-  2. Ietz zipf 'Faeeler' <EIN>. Netty um dÃ¶s 'Faeeler' willst ietz suechen.
+-
+-  3. Willst um gnaun dÃ¶nn Ausdruk weitersuechen, zipf ainfach  n  (wie Â»nextÂ«).
+-     Willst hinzrugg suechen, aft gibst  N  ein.
+-
+-  4. Um von Haus aus zruggaus z suechen, nimm  ?  statt  /  her.
+-
+-  5. Dyrmitst wider daa hinkimmst, wost herkemmen bist, druck <STRG>o,  und dÃ¶s
+-     Ã¶fter,  wennst weiter zrugg willst.  Mit <STRG>i widerum  kimmst vorwÃ€rts.
+-
+---->  Aynn Faeler schreibt myn nit "Faeeler"; Faeeler ist ayn Faeler
+-
+-AnmÃ¶rkung:  Wenn d Suech s Dauttichtend dyrraicht haat, geet s eyn n Anfang wi-
+-            der weiter dyrmit,  men Sach  dyr Schaltter 'wrapscan' wÃ€r auf aus.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 4.3: DE GÃGNKLAMMERN FINDDN
+-
+-
+-   ** Zipf  %  , um de entsprÃ¶chete Klammer  )  ,  ]  older  }  z finddn. **
+-
+-  1. SÃ¶tz Ã¶nn MÃ¶rkl  auf iewign aine  von dene drei Klammern  (  ,  [  older  {
+-     in dyr untignen Zeil, wo mit ---> angmÃ¶rkt ist.
+-
+-  2. Ietzet zipf s Zaichen  %  .
+-
+-  3. Dyr MÃ¶rkl geet ietz auf de pÃ€ssete schliessete Klammer.
+-
+-  4. Ietz demmlt  %  , und dyrmit kimmst gan dyr Ã¶ffneretn Klammer zrugg.
+-
+-  5. SÃ¶tz Ã¶nn MÃ¶rkl auf ayn anderne Klammer von   ({[]})   und prÃ¶blt   %  aus.
+-
+----> DÃ¶s ( ist  blooÃ ayn Pochzeil ( mit [ verschaidne ] { Klammern } drinn. ))
+-
+-AnmÃ¶rkung:  Um dÃ¶ MÃŒglichkeit gaast bsunders froo sein,  wennst aynmaal in aynn
+-            Spaichgwort verzweiflt ayn faelete GÃ¶gnklammer suechst!
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                 Letzn 4.4: D ERSÃTZUNGSFAUDUNG (Â»substituteÂ«)
+-
+-
+-        ** Zipf  :s/alt/neu/g  , um 'alt' durch 'neu' zo n ErsÃ¶tzn. **
+-
+-  1. Gee mit n MÃ¶rkl zo dyr unt steehetn mit ---> angmÃ¶rktn Zeil.
+-
+-  2. Zipf  :s/dee/de <EIN>  . Der Befelh ersÃ¶tzt alsnan grad dÃ¶s +eerste "dee",
+-     wo vÃŒrkimmt.
+-
+-  3. Ietz prÃ¶blt s mit  :s/dee/de/g  . DÃ¶s zuesÃ¶tzliche  g  ("Pflok"  nennt myn
+-     Ã¶bbs SÃ¶lchers) bewirkt, dÃ€Ã allss, was dyrmit kennzaichnet ist,  innerhalb
+-     von dyr ainn Zeil ersÃ¶tzt werd.
+-
+----> Dee schoenste Zeit, dÃ€Ã myn dee BlÃŒemln anschaut, ist dee schoene Lan-
+-     gesszeit.
+-  4. Um ietz  allsand Suechbegriff  innerhalb von zwo Zeiln  zo n Ãndern,  zipf
+-     :#,#s/alt/neu/g  ,  wobei # ieweils fÃŒr de eerste und lÃ¶sste Zeil von dÃ¶nn
+-     Pfraich steet.
+-     :%s/alt/neu/g  zipfst, dÃ€Ãst d VÃŒrkemmen in dyr gantzn Dautticht Ã¶ndertst.
+-        Mit  :%s/alt/neu/gc  finddst allsand VÃŒrkemmen in dyr gsamtn Dautticht;
+-     daa werst aber zeerst non gfraagt, obst ys ersÃ¶tzn willst older nity.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 4
+-                        
+-  1. <STRG>g   zaigt dÃ¶nn ietzundn Dauttichtbefand  und Ã¶nn Darstand dyrvon an.
+-           G  bringt di an s End von dyr Dautticht.
+-     <Zal> G  bringt di gan dyr entsprÃ¶chetn Zeilnnummer.
+-          gg  bringt di zo dyr eerstn Zeil.
+-          
+-  2. D Eingaab von  /  mit aynn Ausdruk suecht VÃRSHLING um dÃ¶nn Ausdruk.
+-     Gibst  ?  und aynn Suechbegrif ein, suecht s um dÃ¶nn ÃRSHLING.
+-     Zipf naach ayner Suech  n  ;  naacherd werd in de gleiche Richtung weiter-
+-     gsuecht. Mit  N geet s umkeerter weiter.
+-     <STRG>o bringt di zo Ã¶lterne BefÃ€ndd zrugg, <STRG>i zo neuerne.
+-
+-  3. D Eingaab von  % , wenn dyr MÃ¶rkl auf ainer von dene Klammern steet:   ({[
+-     )]}  , bringt di zo dyr GÃ¶gnklammer.
+-
+-  4. Um dÃ¶s eerste VÃŒrkemmen  von "alt"  in ayner Zeil  durch "neu"  z ersÃ¶tzn,
+-     zipf   :s/alt/neu   .
+-     Um allsand in ayner Zeil z ersÃ¶tzn, zipf   :s/alt/neu/g   .
+-     Mechst allss in zwo Zeiln ersÃ¶tzn, demmlt zo n Beispil  :5,6s/alt/neu/g  .
+-     Mechst allss in dyr gantzn Dautticht ersÃ¶tzn, gib ein:   :%s/alt/neu/g   .
+-     Willst ayn ieds Maal bstaetln, hÃ¶ng 'c' wie Â»confirmÂ« hint anhin.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-            Letzn 5.1: ZWISCHNDRINN AYNN AUSSERIGNEN BEFELH AUSFÃERN 
+-            
+-
+-  ** Willst ayn GfÃ€Ãfaudung ausfÃŒern, gib ainfach dÃ¶ sel naach   :!   ein. **
+- 
+-  1. Zipf  dÃ¶nn bekanntn Befelh   :  ,  dyrmitst  mit n MÃ¶rkl  auf n Bildschirm
+-     ganz abhin kimmst. Draufhin kanst aynn gwonen GfÃ€Ãbefelh eingÃ¶bn.
+-
+-  2. Zeerst  kimmt aber non ayn Ruefzaichen   !   .  Und ietz haast de MÃŒglich-
+-     keit, ayn beliebige ausserige GfÃ€Ãfaudung auszfÃŒern.
+-
+-  3. Als Beispil zipf   :!ls <EIN>  ; und schoon haast ayn Auflistung von deinn
+-     Verzaichniss,  netty  wie wennst  ganz gwon  in n Eingib wÃ€rst.  Geet   ls
+-     aus iewign aynn Grund nit, aft prÃ¶blt s mit  :!dir <EIN>  .
+-
+-Also non aynmaal: Mit dÃ¶nn Angang kan ayn iede beliebige ausserige Faudung aus-
+-                  gfÃŒert werdn, aau mit Auerwerdd.
+-
+-Und wolgmÃ¶rkt:    Allsand Befelh, wo mit  :  angeend,  mÃŒessend mit <EIN> bstÃ¶-
+-                  tigt werdn. DÃ¶s dyrsagn myr vÃŒrbaÃ niemer.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-           Letzn 5.2: NON MEERER DRÃBER, WIE MYN DAUTTICHTN SCHREIBT
+-
+-
+-      ** Um Ã¶bbs GÃ¶nderts neu z speichern, zipf :w NEUER_DAUTTICHTNAM. **
+-
+-  1. Zipf  :!dir   older  :!ls  ,  dÃ€Ãst dyr ayn Auflistung von deinn Verzaich-
+-     niss ausherlaasst.  DÃ€Ãst dyrnaach <EIN> eingÃ¶bn muesst, waisst ee schoon.
+-
+-  2. Suech dyr aynn Dauttichtnam aus, dÃ¶nn wo s non nit geit, Ã¶bbenn POCH.
+-
+-  3. Ietz demmlt:  :w POCH   (also mit POCH als dÃ¶nn neuen Dauttichtnam).
+-
+-  4. DÃ¶s speichert ietz de gantze Dautticht, also Ã¶nn Wimmschainer,  unter dÃ¶nn
+-     Nam POCH. DÃ¶s kanst leicht ÃŒberprÃŒeffen, indem dÃ€Ãst ainfach  :!ls   older
+-     :!dir  zipfst und dyrmit deinn Verzaichnissinhalt seghst.
+-
+-AnmÃ¶rkung:  Stigst ietz aus n Wimm aus und gÃ€nnst n aft wider mit   vim POCH  ,
+-            naacherd wÃ€r dÃ¶ Dautticht ayn gnaune Aamum von n Schainer dyrselbn,
+-            wiest n gspeichert haast.
+-
+-  5. Ietz verweitert dÃ¶ Dautticht - fallsst s Fenstl haast - , mit   :!del POCH
+-     beziehungsweis bei aynn AinslgebÃ€u mit   :!rm POCH   .
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-            Letzn 5.3: AYNN TAIL VON N GWORT ZO N SPEICHERN AUSWALN
+-
+-** Um aynn Tail von dyr Dautticht z speichern, zipf  v [Wolend] :w DAUTTICHT **
+-
+-  1. Ruck Ã¶nn MÃ¶rkl auf netty dÃ¶ Zeil daader.
+-
+-  2. Demmlt  v  und gee mit n MÃ¶rkl  auf dÃ¶nn fÃŒmftn Auflistungspunt untet.  Du
+-     seghst glei, dÃ€Ã s Gwort vÃŒrherghÃ¶bt erscheint.
+-
+-  3. Druck s Zaichen  :  . Ganz unt auf n Bildschirm erscheint  :'<,'>  .
+-
+-  4. Zipf  w POCH  , wobei s dÃ¶nn Dauttichtnam POCH  non nit geit.  VergwiÃ di,
+-     dÃ€Ãst dÃ¶s  :'<,'>w POCH aau +seghst, ee wennst <EIN> druckst.
+-
+-  5. Dyr Wimm schreibt de ausgwaltn Zeil  eyn de Dautticht POCH einhin.  Benutz
+-     :!dir  older  :!ls  ,  dÃ€Ãst dÃ¶s ÃŒberprÃŒeffst. LÃ¶sh s fein nit Ã¶bbenn! Mir
+-     brauchend s nÃ¶mlich fÃŒr de naehste Letzn.
+-
+-AnmÃ¶rkung:  Druckt myn  v  , ginnt d Sichtisch-Auswal. Du kanst mit n MÃ¶rkl um-
+-            aynandfarn,  um d Auswal  z verÃ¶ndern.  Drafter kan myn mit yn aynn
+-            Pfemerer  mit dÃ¶nn Gwort  Ã¶bbs machen.  Zo n Beispil lÃ¶scht  d  dÃ¶s
+-            Gwort.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-               Letzn 5.4: EINLÃSN UND ZAMMENFÃERN VON DAUTTICHTN   
+-
+-
+-    ** Um Ã¶nn Inhalt von ayner Dautticht einzlÃ¶sn, zipf  :r DAUTTICHTNAM  **
+-
+-  1. SÃ¶tz Ã¶nn MÃ¶rkl ÃŒber dÃ¶ Zeil daader.
+-
+-OBACHT:  Aft dÃ€Ãst Ã¶nn Schrit 2  ausgfÃŒert haast,  seghst auf aynmaal  Ã¶bbs aus
+-         dyr Letzn 5.3.  BewÃ¶g di naacherd wider abwÃ€rts, dyrmitst dÃ¶ Letzn wi-
+-         derfinddst.
+-  2. Ietz  lis  dein Dautticht  POCH ein,  indem dÃ€Ãst d Faudung   :r POCH aus-
+-     fÃŒerst,  wobei wie gsait POCH  fÃŒr dÃ¶nn  von dir  ausgsuechtn Dauttichtnam
+-     steet. De einglÃ¶sne Dautticht werd unterhalb dyr MÃ¶rklzeil eingfÃŒegt.
+-
+-  3. Um zo n ÃberprÃŒeffen,  ob de Dautticht  aau gwiÃ einglÃ¶sn ist,  gee zrugg;
+-     und du seghst,  dÃ€Ã s ietz zwo AusfÃ¶rtigungen  von dyr Letzn 5.3. geit,  s
+-     Urniss und de eingfÃŒegte Dauttichtfassung.
+-
+-AnmÃ¶rkung:  Du kanst aau  d Ausgaab von aynn Ausserigbefelh einlÃ¶sn.  Zo n Bei-
+-            spil list   :r !ls  d Ausgaab von dyr Faudung  ls   ein und fÃŒegt s
+-            unterhalb n MÃ¶rkl ein.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 5
+-
+-
+-  1. :!FAUDUNG fÃŒert aynn ausserignen Befelh aus.
+-
+-      Daader ayn Ãttlych gwÃ€nddte Beispiler:
+-      (Fenstl)              (Ainsl - Leinsl)
+-      :!dir                 :!ls                - listt s Verzaichniss auf.
+-      :!del DAUTTICHT       :!rm DAUTTICHT      - verweitert sele Dautticht.
+-
+-  2. :w DAUTTICHT  speichert de ietzunde Wimmdautticht  unter dÃ¶nn besagtn Nam.
+-
+-  3. v  WOLEND  :w DAUTTICHTNAM   schreibt de sichtisch ausgwaltn Zeiln  eyn de
+-     Dautticht mit seln Nam.
+-
+-  4. :r DAUTTICHTNAM  ladt sele Dautticht  und fÃŒegt s  unterhalb n MÃ¶rklbefand
+-     ein.
+-
+-  5. :r !dir   list d Ausgaab  von dyr Faudung   dir   und fÃŒegt s  unterhalb n
+-     MÃ¶rklbefand ein.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                        Letzn 6.1: ZEIL ÃFFNEN (Â»openÂ«)
+-
+-
+-        ** Zipf o, um ayn Zeil unterhalb n MÃ¶rkl z Ã¶ffnen und eyn d **
+-                        ** EinfÃŒegartweis z kemmen. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn mit ---> angmÃ¶rktn Zeil unt.
+-
+-  2. Zipf o (klain),  um ayn Zeil  UNTERHALB n MÃ¶rkl z Ã¶ffnen  und mit dyr Ein-
+-     fÃŒegartweis weiterztuen.
+-
+-  3. Ietz zipf ayn Weeng ayn Gwort und druck <ESC>,  um d EinfÃŒegartweis z ver-
+-     laassn.
+----> Mit  o  werd dyr MÃ¶rkl auf de offene Zeil in dyr EinfÃŒegartweis gsÃ¶tzt.
+-
+-  4. Um ayn Zeil OBERHALB n MÃ¶rkl aufzmachen,  gib ainfach aynn groosss O statt
+-     yn aynn klainen ein. Versuech dÃ¶s auf dyr untignen Zeil.
+-
+----> Ãffnet ayn Zeil ÃŒber derer daader mit  O  ,  wenn dyr MÃ¶rkl auf derer Zeil
+-     ist.
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 6.2: GWORT ANFÃEGN (Â»appendÂ«)
+-
+-
+-                ** Zipf  a  , um Ã¶bbs NAACH n MÃ¶rkl einzfÃŒegn. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl gan n Anfang von dyr eerstn Ãebungszeil mit ---> unt.
+-
+-  2. Druck  e  , hinst dÃ€Ã dyr MÃ¶rkl an n End von  Zei  steet.
+-
+-  3. Zipf ayn klains  a  , um Ã¶bbs NAACH n MÃ¶rkl anzfÃŒegn.
+-
+-  4. VergÃ¶ntz dÃ¶s Wort wie in dyr Zeil drunter.  Druck <ESC>, um d Schreib-Art-
+-     weis z verlaassn.
+-
+-  5. BewÃ¶g di mit  e   zo n naehstn ungantzn Wort  und widerhol d Schritt 3 und
+-     4.
+-
+----> DÃ¶ Ze biett ayn GlÃ¶gn , ayn Gwort in ayner Zeil anzfÃŒ.
+----> DÃ¶ Zeil biett ayn GlÃ¶gnet, ayn Gwort in ayner Zeil anzfÃŒegn.
+-
+-AnmÃ¶rkung:   a  ,  i  und  A  bringend ainn gleichermaaÃn eyn d EinfÃŒegartweis;
+-             dyr ainzige Unterschaid ist, WO mit n EinfÃŒegn angfangt werd.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-              Letzn 6.3: AYN ANDERNE WEIS ZO N ERSÃTZN (Â»replaceÂ«)
+-
+-
+- ** Demmlt ayn groosss  R  , um meerer als wie grad ain Zaichen z ersÃ¶tzn. **
+-
+-  1. BewÃ¶g Ã¶nn MÃ¶rkl zo dyr eerstn untignen, mit ---> angmÃ¶rktn Zeil.
+-     Gee mit n MÃ¶rkl gan n Anfang von n eerstn  xxx  .
+-
+-  2. Ietz druck  R   und zipf sele Zal,  wo drunter  in dyr zwaittn Zeil steet,
+-     yso dÃ€Ã de sel s xxx ersÃ¶tzt.
+-
+-  3. Druck <ESC> ,  um d ErsÃ¶tzungsartweis  z verlaassn.  Du gspannst,  dÃ€Ã dyr
+-     Rest von dyr Zeil unverÃ¶ndert bleibt.
+-
+-  4. Ãfert die Schritt, um dÃ¶s ÃŒberblibne xxx z ersÃ¶tzn.
+-
+----> S Zunddn von 123 zo xxx ergibt xxx.
+----> S Zunddn von 123 zo 456 ergibt 579.
+-
+-AnmÃ¶rkung: D ErsÃ¶tzungsartweis ist wie d EinfÃŒegartweis,  aber ayn ieds eindem-
+-           mlte Zaichen lÃ¶scht ayn vorhanddns.
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 6.4: GWORT AAMEN UND EINFÃEGN
+-
+- ** Benutz Ã¶nn Pfemerer  y  , um Ã¶bbs z aamen, und  p  , um Ã¶bbs einzfÃŒegn. **
+-
+-  1. Gee zo dyr mit  --->  angmÃ¶rktn Zeil unt  und sÃ¶tz Ã¶nn MÃ¶rkl  hinter "a)".
+-
+-  2. Ginn d Sichtisch-Artweis mit   v   und bewÃ¶g Ã¶nn MÃ¶rkl gnaun vor "eerste".
+-  
+-  3. Zipf  y  , um dÃ¶nn vÃŒrherghÃ¶btn Tail z aamen.
+-
+-  4. BewÃ¶g Ã¶nn MÃ¶rkl gan n End von dyr naehstn Zeil:  j$
+-
+-  5. Demmlt  p  , um dÃ¶s Gwort einzfÃŒegn, und aft:  a zwaitte <ESC>  .
+-
+-  6. Benutz d Sichtischartweis, um " Eintrag." auszwaln,  aam s pfelfs  y,  be-
+-     wÃ¶g di gan n End von dyr naehstn Zeil mit  j$   und fÃŒeg s Gwort dortn mit
+-     p  an.
+-
+---->  a) dÃ¶s ist dyr eerste Eintrag.
+-      b)
+-
+-AnmÃ¶rkung: Du kanst  y  aau als Pfemerer verwenddn;  yw  aamt ain Wort.
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                           Letzn 6.5: SCHALTTER SÃTZN
+-
+-** SÃ¶tz aynn Schaltter yso,  dÃ€Ã ayn Suech older ErsÃ¶tzung GrooÃ- und Klain- **
+-                            ** schreibung ÃŒbergeet. **
+-                            
+-  1. Suech um 'ÃŒbergee", indem dÃ€Ãst   /ÃŒbergee   eingibst.
+-     Widerhol d Suech ayn Ãttlych Maal, indem dÃ€Ãst de Tastn  n  druckst.
+-
+-  2. SÃ¶tz de Zwisl - Ã¶nn Schaltter - 'ic' (Â»ignore caseÂ«), indem dÃ€Ãst  :set ic
+-     eingibst.
+-  3. Ietz suech wider um 'ÃŒbergee' und tue aau wider mit  n  weiter.  Daa fallt
+-     dyr auf, dÃ€Ã ietz Ã¶bbenn aau  Ãbergee  und  ÃBERGEE  hergeet.
+-
+-  4. SÃ¶tz de Zwisln 'hlsearch' und 'incsearch' pfelfs:   :set hls is
+-
+-  5. Widerhol d Suech und bobacht, was ietz gschieght:   /ÃŒbergee <EIN>
+-
+-  6. DÃ€Ãst grooÃ und klain wider gwon unterscheidst, zipf:   :set noic
+-
+-AnmÃ¶rkung:  Mechst de TrÃ¶ffer niemer vÃŒrherghÃ¶bt seghn,  gib ein:   :nohlsearch
+-AnmÃ¶rkung:  Sollt klain/grooÃ bei ayner ainzignen Suech wurst sein,  benutz  \c
+-            in n Suechausdruk:   /ÃŒbergee\c <EIN>
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 6
+-
+-  1. Zipf  o  ,  um ayn Zeil  UNTERHALB n MÃ¶rkl z Ã¶ffnen und d EinfÃŒegartweis z
+-                 ginnen.
+-     Zipf  O  ,  um ayn Zeil OBERHALB n MÃ¶rkl z Ã¶ffnen.
+-
+-  2. Zipf  a  ,  um NAACH n MÃ¶rkl ayn Gwort einzfÃŒegn.
+-     Zipf  A  ,  um ayn Gwort naach n Zeilnend anzfÃŒegn.
+-
+-  3. D Faudung  e  bringt di gan n End von aynn Wort.
+-
+-  4. Dyr Pfemerer  y  (Â»yankÂ«) aamt Ã¶bbs,  p  (Â»putÂ«) fÃŒegt dÃ¶s ein.
+-
+-  5. Ayn groosss  R  geet eyn d ErsÃ¶tzungsartweis,  hinst dÃ€Ã myn <ESC> druckt.
+-
+-  6. D Eingaab von ":set xxx"  sÃ¶tzt de Zwisl "xxx".  Ayn Ãttlych Zwisln seind:
+-     'ic' 'ignorecase'   GrooÃ/klain wurst bei ayner Suech
+-     'is' 'incsearch'    Zaig aau schoon ayn TailÃŒberainstimmung
+-     'hls' 'hlsearch'    HÃ¶b allsand pÃ€ssetn AusdrÃŒck vÃŒrher
+-     Dyr Schaltternam kan in dyr Kurz- older Langform angÃ¶bn werdn.
+-
+-  7. StÃ¶ll yn ayner Zwisl "no" voran, dÃ€Ãst ys abschalttst:   :set noic
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                      Letzn 7.1: AYN HILFGWORT AUFRUEFFEN
+-
+-
+-            ** Nutz dÃ¶s einbaute HilfgebÃ€u, de "Betribsanlaittung" **
+-
+-  Eyn n Wimm  ist ayn ausfÃŒerliche "Gebrauchsanweisung"  einbaut.  FÃŒr s Eerste
+-  prÃ¶blt ainfach ains von dene dreu aus:
+-    - Druck d <HILF>-Tastn, wennst Ã¶bbenn aine haast.
+-    - Druck de Tastn <F1>, fallsst ys haast.
+-    - Zipf   :help <EIN>
+-
+-  Lis di eyn s Hilffenster ein, dyrmitst draufkimmst, wie dÃ¶s mit dyr Hilf geet.
+-  Demmlt  <STRG>w w  , um von ainn Fenster zo n andern zo n Springen.
+-  Demmlt   :q <EIN>  , um s Hilffenster zo n Schliessn.
+-
+-  Du kanst zo so guet wie allssand ayn Hilf finddn,  indem dÃ€Ãst yn dyr Faudung
+-  :help   aynn Auerwerd naachstÃ¶llst und istig <EIN> nit vergisst.  PrÃ¶blt dÃ¶s:
+-
+-     :help w
+-     :help c_CTRL-D
+-     :help insert-index
+-     :help user-manual
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                       Letzn 7.2: ERSTÃLL AYN GIN-SCHRIPF
+-
+-
+-            ** Mutz Ã¶nn Wimm mit de einbautn Faehigkeitn auf **
+-
+-  Dyr Wimm besitzt ayn WÃ¶sn SchÃ€ftungen,  wo ÃŒber n Urwimm aushingeend, aber de
+-  meerern dyrvon  seind in dyr Vorgaab ausgschaltt.  Dyrmitst meerer aus n Wimm
+-  ausherholst, erstÃ¶llst ayn "vimrc"-Dautticht.
+-
+-  1. LÃ¶g ayn "vimrc"-Dautticht an;  dÃ¶s geet  ie naach BetribsgebÃ€u  verschidn:
+-     :e ~/.vimrc     fÃŒr s Ainsl
+-     :e $VIM/_vimrc  bei n Fenstl
+-
+-  2. Ietz lis Ã¶nn Inhalt von dyr Beispil-"vimrc"-Dautticht ein:
+-     :r $VIMRUNTIME/vimrc_example.vim
+-
+-  3. Speichert de Dautticht mit:
+-     :w
+-
+-  4. Bei n naehstn Gin von n Wimm  ist aft d FÃŒegnussvÃŒrherhÃ¶bung  zuegschaltt.
+-     Du kanst dyr allss  eyn dÃ¶ Dautticht  einhinschreibn,  wasst bstÃ€ndig habn
+-     willst. Meerer dyrzue erfarst unter:   :help vimrc-intro
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                              Letzn 7.3: VERGÃNTZN
+-
+-
+-               ** BefelhszeilnvergÃ¶ntzung mit <STRG>d und <TAB> **
+-
+-  1. VergwiÃ di, dÃ€Ã dyr Wimm nit auf n Urwimm-"Glais" fart:   :set nocp
+-
+-  2. Schaug naach, wÃ¶lcherne Dauttichtn dÃ€Ã s in n Verzaichniss geit:   :!ls
+-     older   :!dir
+-  3. Zipf Ã¶nn Anfang von ayner Faudung:   :e
+-
+-  4. Druck  <STRG>d  ,  und dyr Wimm zaigt ayn Listn von Faudungen,  wo mit "e"
+-     angeend.
+-  5. Druck  <TAB>  ,  und dyr Wimm vervollstÃ¶ndigt  Ã¶nn Faudungsnam zo ":edit".
+-
+-  6. FÃŒeg  ayn Laerzaichen  und Ã¶nn Anfang  von ayner  besteehetn Dautticht an:
+-     :edit DAU
+-
+-  7. Druck <TAB>.  Dyr Wimm vergÃ¶ntzt Ã¶nn Nam,  dÃ¶s haisst,  wenn yr aindeuttig
+-     ist.
+-AnmÃ¶rkung:  D VergÃ¶ntzung  geit s fÃŒr aynn Hauffen Faudungen.  Versuech ainfach
+-           <STRG>d  und  <TAB>.  Bsunders nÃŒtzlich ist dÃ¶s bei   :help  .
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-                         ZAMMENFASSUNG VON DYR LETZN 7
+-
+-
+-  1. Zipf  :help   older druck <F1> older <HILF>,  um ayn Hilffenster z Ã¶ffnen.
+-
+-  2. Zipf  :help FAUDUNG  , um auf ayn Hilf gan aynn Befelh z kemmen.
+-
+-  3. Zipf  <STRG>w w  , um zo n andern Fenster z springen.
+-
+-  4. Zipf  :q  , um s Hilffenster z schliessn.
+-
+-  5. ErstÃ¶ll ayn vimrc-Ginschripf  zuer Sicherung von deine MÃ¶tzneinstÃ¶llungen.
+-
+-  6. Druck <STRG>d, aft dÃ€Ãst naach  :  mit ayner Faudung angfangt haast,  dyr-
+-     mitst mÃŒgliche VergÃ¶ntzungen anzaigt kriegst.
+-     Druck <TAB> fÃŒr ain VervollstÃ¶ndigung yllain.
+-
+-
+-
+-
+-
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-
+-  DÃ¶s wÃ€r ietzet s End von n Wimmschainer.  Gangen ist s daa drum,  aynn kurtzn
+-  und bÃŒndignen Ãberblik ÃŒber s Blat  WIMM z lifern,  netty vil gnueg,  dÃ€Ã myn
+-  fÃŒr s Eerste  wirklich Ã¶bbs  dyrmit anfangen kan.  Dyrmit ist s aber auf kain
+-  Weitn non nit taan;  dyr Wimm haat schoon non vil meerer  auf Lager.  Lis als
+-  Naehsts aynmaal s Benutzerhandbuech:   :help user-manual   .
+-
+-  Zo n WeiterlÃ¶sn und Weiterlernen wÃ¶r dÃ¶s Buech daader zo n Empfelhen:
+-    Vim - Vi Improved - von n OUALLINE Steve
+-    Verlaag: New Riders
+-  DÃ¶s ist dÃ¶s eerste Buech, wo ganz yn n Wimm gwidmt ist, netty dÃ¶s Grechte fÃŒr
+-  AnfÃ¶nger. Es haat ayn WÃ¶sn Beispiler und aau Bilder drinn.
+-  See http://iccf-holland.org/click5.html
+-
+-  DÃ¶s folgete Buech  ist schoon Ã¶lter und meerer  ÃŒber n Urwimm  als wie ÃŒber n
+-  Wimm,  aber aau zo n Empfelhen:   Textbearbeitung mit dem vi-Editor - von dyr
+-  LAMB Linda und n ROBBINS Arnold  -  Verlaag O'Reilly  - Buechlaittzal (ISBN):
+-  3897211262
+-  In dÃ¶nn Buech  kan myn fast allss finddn,  was myn mit n Urwimm angeen mecht.
+-  De sÃ¶xte Ausgaab enthaltt aau schoon Ã¶bbs ÃŒber n Wimm.
+-  Als ietzunde Bezugniss  fÃŒr d Fassung  6.2  und ayn pfrenge EinfÃŒerung  dient
+-  dÃ¶s folgete Buech:
+-    vim ge-packt  von n WOBST Reinhard
+-    mitp-Verlaag, Buechlaittzal 3-8266-1425-9
+-  Trotz dyr recht pfrengen DarstÃ¶llung  ist s durch seine viln nÃŒtzlichnen Bei-
+-  spiler aau fÃŒr Einsteiger grad grecht.  Probhaeupster und de Beispilschripfer
+-  seind zesig zo n Kriegn; see http://iccf-holland.org/click5.html
+-
+-  Verfasst habnd dÃ¶nn Schainer dyr PIERCE Michael C. und WARE Robert K. von dyr
+-  Kolraader Knappnschuel (Colorado School of Mines). Er beruet auf EntwÃŒrff, wo
+-  dyr SMITH Charles  von dyr  Kolraader Allschuel  (Colorado State  University)
+-  zuer VerfÃŒegung gstÃ¶llt haat. Gundpost: bware@mines.colorado.edu.
+-  FÃŒr n Wimm haat n dyr MOOLENAAR Bram barechtt.
+-  De bairische ÃbersÃ¶tzung stammt von n HELL Sepp 2009. Sein GundpostbrÃ€cht ist
+-  sturmibund@t-online.de 
+-
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-  
+-
+- 
+-
+-
+-
+diff -Naur vim73.orig/runtime/tutor/tutor.de vim73/runtime/tutor/tutor.de
+--- vim73.orig/runtime/tutor/tutor.de	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.de	2013-06-07 17:07:28.295594546 +0000
+@@ -374,7 +374,7 @@
+ 
+   1. Bewege den Cursor zur ersten unten stehenden mit ---> markierten Zeile.
+ 
+-  2. Tippe  dd  , um die Zeile zu löschen und sie in eimem Vim-Register zu
++  2. Tippe  dd  , um die Zeile zu löschen und sie in einem Vim-Register zu
+      speichern.
+ 
+   3. Bewege den Cursor zur Zeile c), ÜBER derjenigen, wo die gelöschte Zeile
+diff -Naur vim73.orig/runtime/tutor/tutor.de.utf-8 vim73/runtime/tutor/tutor.de.utf-8
+--- vim73.orig/runtime/tutor/tutor.de.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.de.utf-8	2013-06-07 17:07:28.308927841 +0000
+@@ -374,7 +374,7 @@
+ 
+   1. Bewege den Cursor zur ersten unten stehenden mit ---> markierten Zeile.
+ 
+-  2. Tippe  dd  , um die Zeile zu lÃ¶schen und sie in eimem Vim-Register zu
++  2. Tippe  dd  , um die Zeile zu lÃ¶schen und sie in einem Vim-Register zu
+      speichern.
+ 
+   3. Bewege den Cursor zur Zeile c), ÃBER derjenigen, wo die gelÃ¶schte Zeile
+diff -Naur vim73.orig/runtime/tutor/tutor.eo vim73/runtime/tutor/tutor.eo
+--- vim73.orig/runtime/tutor/tutor.eo	2010-06-12 06:58:09.000000000 +0000
++++ vim73/runtime/tutor/tutor.eo	2013-06-07 17:07:28.352261051 +0000
+@@ -1,5 +1,5 @@
+ ==============================================================================
+-=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.3 =
++=  B o n v e n o n   al   la   I n s t r u i l o  de  V I M  -  Versio 1.7   =
+ ==============================================================================
+ 
+    Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
+@@ -108,7 +108,7 @@
+      reøimo. Ripetu la paþojn 2 øis 4 por korekti la frazon.
+ 
+ ---> Mank en æi linio.
+----> Mankas tekston en æi tiu linio.
++---> Mankas teksto en æi tiu linio.
+ 
+   5. Kiam vi sentas vin komforta pri enmeto de teksto, moviøu al la
+      leciono 1.5.
+@@ -160,7 +160,7 @@
+ 
+   4. Konservu la dosieron kun þanøoj kaj eliru el Vim per:  :wq  <Enenklavo>
+ 
+-  5. Se vi eliris la instruilon vimtutor en paþo 1, restartu la intruilon
++  5. Se vi eliris la instruilon vimtutor en paþo 1, restartigu la intruilon
+      vimtutor kaj moviøu suben al la sekvanta resumo.
+ 
+   6. Post kiam vi legis la suprajn paþojn, kaj komprenis ilin: faru ilin.
+@@ -640,12 +640,12 @@
+   1. Tajpu  !dir  aý  !ls  por akiri liston de via dosierujo.
+      Vi jam scias, ke vi devas tajpi <Enenklavo> post tio.
+ 
+-  2. Elektu dosieron, kiu ne jam ekzistas, kiel ekzemple TESTO.
++  2. Elektu dosieron, kiu ankoraý ne ekzistas, kiel ekzemple TESTO.
+ 
+   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
+ 
+   4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
+-     Por kontroli tion, tajpu   :!dir   aý   !ls   denove por vidigi vian
++     Por kontroli tion, tajpu   :!dir   aý   :!ls   denove por vidigi vian
+      dosierujon.
+ 
+ RIMARKO: Se vi volus eliri el Vim kaj restartigi øin denove per  vim TESTO,
+@@ -669,7 +669,7 @@
+ 
+   3. Premu la  :  signon.  Æe la fino de la ekrano  :'<,'>  aperos.
+ 
+-  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ne jam ekzistas.
++  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ankoraý ne ekzistas.
+      Kontrolu, ke vi vidas  :'<,'>w TESTO  antaý premi <Enenklavo>.
+ 
+   5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
+@@ -984,8 +984,8 @@
+ 
+   Modifita por Vim de Bram Moolenaar.
+ 
+-  Tradukita en Esperanto de Dominique Pellé, 2008-04-01
++  Esperantigita fare de Dominique Pellé, 2008-04-01
+   Retpoþto: dominique.pelle@gmail.com
+-  Lasta þanøo: 2010-05-23
++  Lasta þanøo: 2011-11-27
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.eo.utf-8 vim73/runtime/tutor/tutor.eo.utf-8
+--- vim73.orig/runtime/tutor/tutor.eo.utf-8	2010-05-23 08:18:05.000000000 +0000
++++ vim73/runtime/tutor/tutor.eo.utf-8	2013-06-07 17:07:28.382260965 +0000
+@@ -1,5 +1,5 @@
+ ==============================================================================
+-=  B o n v e n o n  al  la  I n s t r u i l o  de  V I M  -  Versio 1.7.eo.3 =
++=  B o n v e n o n   al   la   I n s t r u i l o  de  V I M  -  Versio 1.7   =
+ ==============================================================================
+ 
+    Vim estas tre potenca redaktilo, kiu havas multajn komandojn, tro da ili
+@@ -108,7 +108,7 @@
+      reÄimo. Ripetu la paÅojn 2 Äis 4 por korekti la frazon.
+ 
+ ---> Mank en Äi linio.
+----> Mankas tekston en Äi tiu linio.
++---> Mankas teksto en Äi tiu linio.
+ 
+   5. Kiam vi sentas vin komforta pri enmeto de teksto, moviÄu al la
+      leciono 1.5.
+@@ -160,7 +160,7 @@
+ 
+   4. Konservu la dosieron kun ÅanÄoj kaj eliru el Vim per:  :wq  <Enenklavo>
+ 
+-  5. Se vi eliris la instruilon vimtutor en paÅo 1, restartu la intruilon
++  5. Se vi eliris la instruilon vimtutor en paÅo 1, restartigu la intruilon
+      vimtutor kaj moviÄu suben al la sekvanta resumo.
+ 
+   6. Post kiam vi legis la suprajn paÅojn, kaj komprenis ilin: faru ilin.
+@@ -640,12 +640,12 @@
+   1. Tajpu  !dir  aÅ­  !ls  por akiri liston de via dosierujo.
+      Vi jam scias, ke vi devas tajpi <Enenklavo> post tio.
+ 
+-  2. Elektu dosieron, kiu ne jam ekzistas, kiel ekzemple TESTO.
++  2. Elektu dosieron, kiu ankoraÅ­ ne ekzistas, kiel ekzemple TESTO.
+ 
+   3. Nun tajpu:   :w TESTO   (kie TESTO estas la elektita dosiernomo)
+ 
+   4. Tio konservas la tutan dosieron (instruilon de Vim) kun la nomo TESTO.
+-     Por kontroli tion, tajpu   :!dir   aÅ­   !ls   denove por vidigi vian
++     Por kontroli tion, tajpu   :!dir   aÅ­   :!ls   denove por vidigi vian
+      dosierujon.
+ 
+ RIMARKO: Se vi volus eliri el Vim kaj restartigi Äin denove per  vim TESTO,
+@@ -669,7 +669,7 @@
+ 
+   3. Premu la  :  signon.  Äe la fino de la ekrano  :'<,'>  aperos.
+ 
+-  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ne jam ekzistas.
++  4. Tajpu  w TESTO  , kie TESTO estas dosiernomo, kiu ankoraÅ­ ne ekzistas.
+      Kontrolu, ke vi vidas  :'<,'>w TESTO  antaÅ­ premi <Enenklavo>.
+ 
+   5. Vim konservos la apartigitajn liniojn al la dosiero TESTO.  Uzu  :dir
+@@ -984,8 +984,8 @@
+ 
+   Modifita por Vim de Bram Moolenaar.
+ 
+-  Tradukita en Esperanto de Dominique PellÃ©, 2008-04-01
++  Esperantigita fare de Dominique PellÃ©, 2008-04-01
+   RetpoÅto: dominique.pelle@gmail.com
+-  Lasta ÅanÄo: 2010-05-23
++  Lasta ÅanÄo: 2011-11-27
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.fr vim73/runtime/tutor/tutor.fr
+--- vim73.orig/runtime/tutor/tutor.fr	2010-05-23 08:17:46.000000000 +0000
++++ vim73/runtime/tutor/tutor.fr	2013-06-07 17:07:28.432260822 +0000
+@@ -1,5 +1,5 @@
+ ===============================================================================
+-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.2 =
++=    B i e n v e n u e  dans  l e  T u t o r i e l  de  V I M  -  Version 1.7 =
+ ===============================================================================
+ 
+      Vim est un éditeur très puissant qui a trop de commandes pour pouvoir
+@@ -67,7 +67,7 @@
+   4. Si vous avez mémorisé ces étapes et êtes confiant, effectuez les étapes
+      1 à 3 pour sortir puis rentrer dans l'éditeur.
+ 
+-NOTE :  :q! <Entrée> annule tous les changements que vous avez fait. Dans
++NOTE :  :q! <Entrée> annule tous les changements que vous avez faits. Dans
+          quelques leçons, vous apprendrez à enregistrer les changements.
+ 
+   5. Déplacez le curseur à la Leçon 1.3.
+@@ -260,7 +260,7 @@
+ 
+   Une courte liste de mouvements :
+     w - jusqu'au début du prochain mot, en EXCLUANT son premier caractère.
+-    e - jusqu'à la fin du mot courant, en EXCLUANT son denier caractère.
++    e - jusqu'à la fin du mot courant, en EXCLUANT son dernier caractère.
+     $ - jusqu'à la fin de la ligne, en INCLUANT son dernier caractère.
+ 
+   Ainsi, taper  de  va effacer depuis le curseur jusqu'à la fin du mot.
+@@ -299,7 +299,7 @@
+ 
+   Outre la combinaison de l'opérateur d'effacement avec un déplacement
+   mentionné ci-dessus, vous pouvez insérer un nombre (quantificateur)
+-  pour effacez encore plus :
++  pour effacer encore plus :
+        d   nombre   déplacement
+ 
+   1. Déplacez le curseur vers le premier mot en MAJUSCULES dans la ligne
+@@ -451,7 +451,7 @@
+   3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
+ 
+   4. Appuyez <Échap> et placez-vous sur le prochain caractère qui doit
+-     être changé).
++     être changé.
+ 
+   5. Répétez les étapes 3 et 4 jusqu'à ce que la première phrase soit
+      identique à la seconde.
+@@ -560,7 +560,7 @@
+ ---> erreur ne s'écrit pas "errreuur" ; errreuur est une erreur.
+ 
+ NOTE : Quand la recherche atteint la fin du fichier, elle reprend au début
+-       sauf si l'option 'wrapscan' est déactivée.
++       sauf si l'option 'wrapscan' est désactivée.
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -704,10 +704,10 @@
+   3. Appuyez  :  . En bas de l'écran  :'<,'> va apparaître.
+ 
+   4. Tapez   w TEST  , où TEST est un nom de fichier qui n'existe pas.
+-     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur Entrée.
++     Vérifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur <Entrée>.
+ 
+   5. Vim va enregistrer les lignes sélectionnées dans le fichier TEST.
+-     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
++     Utilisez  :!dir  ou  :!ls pour le voir. Ne l'effacez pas encore !
+      Nous allons l'utiliser dans la leçon suivante.
+ 
+ NOTE : L'appui de  v  démarre la sélection Visuelle. Vous pouvez déplacer le
+@@ -725,7 +725,7 @@
+   1. Placez le curseur juste au-dessus de cette ligne.
+ 
+ NOTE :  Après avoir exécuté l'étape 2 vous verrez du texte de la Leçon 5.3.
+-        Puis déplacez vous vers le bas pour voir cette leçon à nouveau.
++        Puis déplacez-vous vers le bas pour voir cette leçon à nouveau.
+ 
+   2. Maintenant récupérez votre fichier TEST en utilisant la commande  :r TEST
+      où TEST est le nom de votre fichier.
+@@ -853,8 +853,8 @@
+ 
+   5. Tapez  p  pour coller le texte. Puis tapez :  un second <Échap> .
+ 
+-  6. Utilisez le mode Visuel pour sélectionner "élément", copiez le avec  y  ,
+-     déplacez vous à la fin de la ligne suivant avec  j$  et collez le texte
++  6. Utilisez le mode Visuel pour sélectionner "élément", copiez-le avec  y  ,
++     déplacez-vous à la fin de la ligne suivant avec  j$  et collez le texte
+      à cet endroit avec  p .
+ 
+ --->  a) ceci est le premier élément.
+@@ -1012,8 +1012,8 @@
+   Ceci conclut le Tutoriel Vim. Le but était de vous donner un bref aperçu de
+   l'éditeur Vim, juste assez pour vous permettre d'utiliser l'éditeur
+   relativement facilement. Il est loin d'être complet, vu que Vim a beaucoup
+-  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
+-  anglais :  :help user-manual .
++  plus de commandes. Un Manuel de l'utilisateur est disponible en anglais :
++    :help user-manual
+ 
+   Pour continuer à découvrir et à apprendre Vim, il existe un livre traduit en
+   français. Il parle plus de Vi que de Vim, mais pourra vous être utile.
+@@ -1030,9 +1030,9 @@
+   Université d'État du Colorado. E-mail : bware@mines.colorado.edu.
+ 
+   Modifié pour Vim par Bram Moolenar.
+-  Traduit en Français par Adrien Beau, en avril 2001.
++  Traduit en français par Adrien Beau, en avril 2001.
+   Dernières mises à jour par Dominique Pellé.
+ 
+   E-mail :      dominique.pelle@gmail.com
+-  Last Change : 2010 May 23
++  Last Change : 2013 May 10
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.fr.utf-8 vim73/runtime/tutor/tutor.fr.utf-8
+--- vim73.orig/runtime/tutor/tutor.fr.utf-8	2010-07-25 15:43:50.000000000 +0000
++++ vim73/runtime/tutor/tutor.fr.utf-8	2013-06-07 17:07:28.445594118 +0000
+@@ -1,5 +1,5 @@
+ ===============================================================================
+-= B i e n v e n u e  dans le  T u t o r i e l  de  V I M  -  Version 1.7.fr.2 =
++=    B i e n v e n u e  dans  l e  T u t o r i e l  de  V I M  -  Version 1.7 =
+ ===============================================================================
+ 
+      Vim est un Ã©diteur trÃšs puissant qui a trop de commandes pour pouvoir
+@@ -67,7 +67,7 @@
+   4. Si vous avez mÃ©morisÃ© ces Ã©tapes et Ãªtes confiant, effectuez les Ã©tapes
+      1 Ã  3 pour sortir puis rentrer dans l'Ã©diteur.
+ 
+-NOTE :  :q! <EntrÃ©e> annule tous les changements que vous avez fait. Dans
++NOTE :  :q! <EntrÃ©e> annule tous les changements que vous avez faits. Dans
+          quelques leÃ§ons, vous apprendrez Ã  enregistrer les changements.
+ 
+   5. DÃ©placez le curseur Ã  la LeÃ§on 1.3.
+@@ -260,7 +260,7 @@
+ 
+   Une courte liste de mouvements :
+     w - jusqu'au dÃ©but du prochain mot, en EXCLUANT son premier caractÃšre.
+-    e - jusqu'Ã  la fin du mot courant, en EXCLUANT son denier caractÃšre.
++    e - jusqu'Ã  la fin du mot courant, en EXCLUANT son dernier caractÃšre.
+     $ - jusqu'Ã  la fin de la ligne, en INCLUANT son dernier caractÃšre.
+ 
+   Ainsi, taper  de  va effacer depuis le curseur jusqu'Ã  la fin du mot.
+@@ -299,7 +299,7 @@
+ 
+   Outre la combinaison de l'opÃ©rateur d'effacement avec un dÃ©placement
+   mentionnÃ© ci-dessus, vous pouvez insÃ©rer un nombre (quantificateur)
+-  pour effacez encore plus :
++  pour effacer encore plus :
+        d   nombre   dÃ©placement
+ 
+   1. DÃ©placez le curseur vers le premier mot en MAJUSCULES dans la ligne
+@@ -451,7 +451,7 @@
+   3. Tapez  ce  et corrigez le mot (dans notre cas, tapez  'igne'.)
+ 
+   4. Appuyez <Ãchap> et placez-vous sur le prochain caractÃšre qui doit
+-     Ãªtre changÃ©).
++     Ãªtre changÃ©.
+ 
+   5. RÃ©pÃ©tez les Ã©tapes 3 et 4 jusqu'Ã  ce que la premiÃšre phrase soit
+      identique Ã  la seconde.
+@@ -560,7 +560,7 @@
+ ---> erreur ne s'Ã©crit pas "errreuur" ; errreuur est une erreur.
+ 
+ NOTE : Quand la recherche atteint la fin du fichier, elle reprend au dÃ©but
+-       sauf si l'option 'wrapscan' est dÃ©activÃ©e.
++       sauf si l'option 'wrapscan' est dÃ©sactivÃ©e.
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -704,10 +704,10 @@
+   3. Appuyez  :  . En bas de l'Ã©cran  :'<,'> va apparaÃ®tre.
+ 
+   4. Tapez   w TEST  , oÃ¹ TEST est un nom de fichier qui n'existe pas.
+-     VÃ©rifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur EntrÃ©e.
++     VÃ©rifiez que vous voyez  :'<,'>w TEST  avant de d'appuyer sur <EntrÃ©e>.
+ 
+   5. Vim va enregistrer les lignes sÃ©lectionnÃ©es dans le fichier TEST.
+-     Utilisez  :!dir  ou  !ls pour le voir. Ne l'effacez pas encore !
++     Utilisez  :!dir  ou  :!ls pour le voir. Ne l'effacez pas encore !
+      Nous allons l'utiliser dans la leÃ§on suivante.
+ 
+ NOTE : L'appui de  v  dÃ©marre la sÃ©lection Visuelle. Vous pouvez dÃ©placer le
+@@ -725,7 +725,7 @@
+   1. Placez le curseur juste au-dessus de cette ligne.
+ 
+ NOTE :  AprÃšs avoir exÃ©cutÃ© l'Ã©tape 2 vous verrez du texte de la LeÃ§on 5.3.
+-        Puis dÃ©placez vous vers le bas pour voir cette leÃ§on Ã  nouveau.
++        Puis dÃ©placez-vous vers le bas pour voir cette leÃ§on Ã  nouveau.
+ 
+   2. Maintenant rÃ©cupÃ©rez votre fichier TEST en utilisant la commande  :r TEST
+      oÃ¹ TEST est le nom de votre fichier.
+@@ -853,8 +853,8 @@
+ 
+   5. Tapez  p  pour coller le texte. Puis tapez :  un second <Ãchap> .
+ 
+-  6. Utilisez le mode Visuel pour sÃ©lectionner "Ã©lÃ©ment", copiez le avec  y  ,
+-     dÃ©placez vous Ã  la fin de la ligne suivant avec  j$  et collez le texte
++  6. Utilisez le mode Visuel pour sÃ©lectionner "Ã©lÃ©ment", copiez-le avec  y  ,
++     dÃ©placez-vous Ã  la fin de la ligne suivant avec  j$  et collez le texte
+      Ã  cet endroit avec  p .
+ 
+ --->  a) ceci est le premier Ã©lÃ©ment.
+@@ -1012,8 +1012,8 @@
+   Ceci conclut le Tutoriel Vim. Le but Ã©tait de vous donner un bref aperÃ§u de
+   l'Ã©diteur Vim, juste assez pour vous permettre d'utiliser l'Ã©diteur
+   relativement facilement. Il est loin d'Ãªtre complet, vu que Vim a beaucoup
+-  beaucoup plus de commandes. Un Manuel de l'utilisateur est disponible en
+-  anglais :  :help user-manual .
++  plus de commandes. Un Manuel de l'utilisateur est disponible en anglais :
++    :help user-manual
+ 
+   Pour continuer Ã  dÃ©couvrir et Ã  apprendre Vim, il existe un livre traduit en
+   franÃ§ais. Il parle plus de Vi que de Vim, mais pourra vous Ãªtre utile.
+@@ -1030,9 +1030,9 @@
+   UniversitÃ© d'Ãtat du Colorado. E-mail : bware@mines.colorado.edu.
+ 
+   ModifiÃ© pour Vim par Bram Moolenar.
+-  Traduit en FranÃ§ais par Adrien Beau, en avril 2001.
++  Traduit en franÃ§ais par Adrien Beau, en avril 2001.
+   DerniÃšres mises Ã  jour par Dominique PellÃ©.
+ 
+   E-mail :      dominique.pelle@gmail.com
+-  Last Change : 2010 May 23
++  Last Change : 2013 May 10
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.hr vim73/runtime/tutor/tutor.hr
+--- vim73.orig/runtime/tutor/tutor.hr	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.hr	2013-06-07 17:07:28.465594061 +0000
+@@ -659,7 +659,7 @@
+      Provjerite da zaista pi¹e  :'<,'>w TEST
+      prije nego ¹to pritisnite <ENTER>.
+ 
+-  5. Vim æe spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
++  5. Vim æe spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
+      Nemojte je jo¹ brisati!  Koristiti æe te je u sljedeæoj lekciji.
+ 
+ NAPOMENA:  Tipka  v  zapoèinje Vizualno oznaèavanje.  MoŸete pomicati kursor
+diff -Naur vim73.orig/runtime/tutor/tutor.hr.cp1250 vim73/runtime/tutor/tutor.hr.cp1250
+--- vim73.orig/runtime/tutor/tutor.hr.cp1250	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.hr.cp1250	2013-06-07 17:07:28.472260708 +0000
+@@ -659,7 +659,7 @@
+      Provjerite da zaista pie  :'<,'>w TEST
+      prije nego to pritisnite <ENTER>.
+ 
+-  5. Vim æe spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
++  5. Vim æe spremiti oznaèeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
+      Nemojte je jo brisati!  Koristiti æe te je u sljedeæoj lekciji.
+ 
+ NAPOMENA:  Tipka  v  zapoèinje Vizualno oznaèavanje.  Moete pomicati kursor
+diff -Naur vim73.orig/runtime/tutor/tutor.hr.utf-8 vim73/runtime/tutor/tutor.hr.utf-8
+--- vim73.orig/runtime/tutor/tutor.hr.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.hr.utf-8	2013-06-07 17:07:28.485594003 +0000
+@@ -659,7 +659,7 @@
+      Provjerite da zaista piÅ¡e  :'<,'>w TEST
+      prije nego Å¡to pritisnite <ENTER>.
+ 
+-  5. Vim Äe spremiti oznaÄeni tekst u TEST.  Provjerite sa :!dir  ili  !ls .
++  5. Vim Äe spremiti oznaÄeni tekst u TEST.  Provjerite sa :!dir  ili  :!ls .
+      Nemojte je joÅ¡ brisati!  Koristiti Äe te je u sljedeÄoj lekciji.
+ 
+ NAPOMENA:  Tipka  v  zapoÄinje Vizualno oznaÄavanje.  MoÅŸete pomicati kursor
+diff -Naur vim73.orig/runtime/tutor/tutor.hu vim73/runtime/tutor/tutor.hu
+--- vim73.orig/runtime/tutor/tutor.hu	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.hu	2013-06-07 17:07:28.488927327 +0000
+@@ -2,16 +2,16 @@
+ == Ü d v ö z ö l j ü k   a   V I M - o k t a t ó b a n  -    1.5-ös  verzió  ==
+ ===============================================================================
+ 
+-     A Vim egy nagyon hatékony szerkesztõ, amelnyek rengeteg utasítása
++     A Vim egy nagyon hatékony szerkesztõ, amelynek rengeteg utasítása
+      van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
+      mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
+      elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
+      általános célú szövegszerkesztõt.
+ 
+      A feladatok megoldásához 25-30 perc szükséges attól függõen,
+-     mennyit töltünk a kisérletezéssel.
++     mennyit töltünk a kísérletezéssel.
+ 
+-     A leckében szereplõ utasítások módosítani fogják a szövegek.
++     A leckében szereplõ utasítások módosítani fogják a szöveget.
+      Készítsen másolatot errõl a fájlról, ha gyakorolni akar.
+      (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
+ 
+@@ -81,7 +81,7 @@
+   2. A hibák kijavításához mozgassa a kurzort amíg a törlendõ karakter
+      fölé nem ér.
+ 
+-  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
++  3. Nyomja meg az  x  gombot, hogy törölje a nem kívánt karaktert.
+ 
+   4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
+ 
+@@ -172,7 +172,7 @@
+ 
+   3. Mozgassa a kurzort a helyes sor végére (az elsõ . UTÁN)!
+ 
+-  4. d$  begépeléséveltörölje a sor végét!
++  4. d$  begépelésével törölje a sor végét!
+ 
+ ---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
+ 
+@@ -184,30 +184,30 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		     2.3.  lecke: UTASÍTÁSOKRÓL ÉS OBJEKTUMOKRÓL
++		     2.3.  lecke: UTASÍTÁSOKRÓL ÉS MOZGÁSOKRÓL
+ 
+ 
+   A  d  (delete=törlés) utasítás formája a következõ:
+ 
+-	 [szám]   d	objektum	   VAGY	     d	 [szám] objektum
++	 [szám]   d	mozgás	   VAGY	     d	 [szám] mozgás
+   Ahol:
+     szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
+     d - a törlés (delete) utasítás.
+-    objektum - amin a parancsnak teljesülnie kell (alább listázva).
++    mozgás - amin a parancsnak teljesülnie kell (alább listázva).
+ 
+-  Objektumok rövid listája:
++  Mozgások rövid listája:
+     w - a kurzortól a szó végéig, beleértve a szóközt.
+     e - a kurzortól a szó végéig, NEM beleértve a szóközt.
+     $ - a kurzortól a sor végéig.
+ 
+-MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
+-       a kurzor oda kerül, amit az objektumlista megad.
++MEGJ:  Csupán a mozgás begépelésével (parancs nélkül)
++       a kurzor mozgás által megadott helyre kerül.
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
++		2.4.  lecke: EGÉSZ SOROK FELDOLGOZÁSA
+ 
+ 
+ 	       ** dd beírásával törölheti az egész sort. **
+@@ -217,8 +217,8 @@
+ 
+   1. Mozgassa a kurzort az alábbi kifejezések második sorára!
+   2. dd begépelésével törölje a sort!
+-  3. Menjen a 4. (eredetileg 5.) sorra!
+-  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
++  3. Menjen a 3. (eredetileg 4.) sorra!
++  4. 2dd   (ugyebár szám-utasítás-mozgás) begépelésével töröljön két sort!
+ 
+       1)  Alvó szegek a jéghideg homokban,
+       2)  - kezdi a költõ -
+@@ -238,9 +238,9 @@
+   1. Menjünk az alábbi ---> kezdetû sor elsõ hibájára!
+   2. x  lenyomásával törölje az elsõ felesleges karaktert!
+   3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
+-  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
++  4. Másodjára javítson ki minden hibát a sorban az x utasítással!
+   5. Most nagy  U  -val állítsa vissza a sor eredeti állapotát!
+-  6. Nyomja meg az u gombot párszor, hogy az U és sz elõzõ utasításokat
++  6. Nyomja meg az u gombot párszor, hogy az U és az azt megelõzõ utasításokat
+      visszaállítsa!
+   7. CTRL-R (CTRL gomb lenyomása mellett üssön R-t) párszor csinálja újra a
+      visszavont parancsokat (redo)!
+@@ -263,11 +263,11 @@
+ 
+   4. Egy utasítás alakja normál módban:
+ 
+-       [szám]   utasítás   objektum   VAGY   utasítás	[szám] objektum
++       [szám]   utasítás   mozgás   VAGY   utasítás	[szám] mozgás
+      ahol:
+        szám - hányszor ismételjük a parancsot
+        utasítás - mit tegyünk, pl. d  a törléskor
+-       objektum - mire hasson az utasítás, például w (szó=word),
++       mozgás - mire hasson az utasítás, például w (szó=word),
+ 		$ (a sor végéig), stb.
+ 
+   5. Az elõzõ tett visszavonása (undo):	     u	 (kis u)
+@@ -278,11 +278,11 @@
+ 		3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
+ 
+ 
+-  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
++  ** p  leütésével az utolsónak töröltet a kurzor után illeszthetjük. **
+ 
+   1. Mozgassuk a kurzort az alábbi sorok elsõ sorára.
+ 
+-  2. dd leütésével töröljük a sort és eltérolódik a Vim pufferében.
++  2. dd leütésével töröljük a sort és eltárolódik a Vim pufferében.
+ 
+   3. Mozgassuk a kurzort azelõtt a  sor ELÕTTI sorba, ahová mozgatni
+      szeretnénk a törölt sort.
+@@ -350,13 +350,13 @@
+ 		       3.4.  lecke: TÖBBFÉLE VÁLTOZTATÁS c-VEL
+ 
+ 
+- ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
++ ** A c utasítás használható ugyanazokkal az mozgásokkal mint a törlés **
+ 
+   1. A change utasítás a törléssel azonosan viselkedik.  A forma:
+ 
+-       [szám]   c   objektum	   OR	    c	[szám]   objektum
++       [szám]   c   mozgás	   OR	    c	[szám]   mozgás
+ 
+-  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
++  2. A mozgások is azonosak, pl.   w (szó), $ (sorvég), stb.
+ 
+   3. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
+ 
+@@ -374,18 +374,18 @@
+ 
+ 
+   1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
+-     a kurzor UTÁN helyezi (ha sor került törlésre, a kurzor allatti sorba).
++     a kurzor UTÁN helyezi (ha sor került törlésre, a kurzor alatti sorba).
+ 
+   2. A kurzor alatti karakter átírásához az r-et és azt a karaktert
+      nyomjuk, amellyel az eredetit felül szeretnénk írni.
+ 
+-  3. A változtatás (c) utasítás a karaktertõl az objektum végéig
+-     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
++  3. A változtatás (c) utasítás a karaktertõl az mozgás végéig
++     változtatja meg az mozgást. Például a cw a kurzortól a szó végéig,
+      a c$ a sor végéig.
+ 
+   4. A változtatás formátuma:
+ 
+-	 [szám]   c	objektum	VAGY	c   [szám]   objektum
++	 [szám]   c	mozgás	VAGY	c   [szám]   mozgás
+ 
+ Ugorjunk a következõ leckére!
+ 
+@@ -428,7 +428,7 @@
+   3. A kifejezés újabb kereséséhez üssük le egyszerûen:  n .
+      A kifejezés ellenkezõ irányban történõ kereséséhez ezt üssük be: Shift-N .
+ 
+-  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
++  4. Ha visszafelé szeretne keresni, akkor ? kell a / helyett.
+ 
+ ---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
+ 
+@@ -462,7 +462,7 @@
+ 		  4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
+ 
+ 
+-    ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
++    ** :s/régi/új/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
+ 
+   1. Menjünk a ---> kezdetû sorra!
+ 
+@@ -579,7 +579,7 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		   5.4.  lecke: RETRIEVING AND MERGING FILES
++		   5.4.  lecke: FÁJLOK VISSZAÁLLÍTÁSA ÉS ÖSSZEFÛZÉSE
+ 
+ 
+        ** Egy fájl tartalmának beillesztéséhez írja   :r FÁJLNÉV **
+@@ -592,11 +592,11 @@
+        keresse meg ismét ezt a leckét.
+ 
+   3. Most szúrja be a TESZT nevû fájlt a   :r TESZT   paranccsal, ahol
+-     TESZT az Ön fájljénak a neve.
++     TESZT az Ön fájljának a neve.
+ 
+ MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
+ 
+-  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillsztettük, menjen
++  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillesztettük, menjen
+      vissza, és nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
+      mellett a fájlból bemásolt is ott van.
+ 
+@@ -616,11 +616,11 @@
+   2.  :w FÁJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÁJNÉV néven.
+ 
+   3.  :#,#w FÁJLNÉV  kiírja a két sorszám (#) közötti sorokat FÁJLNÉV-be
+-      Másik lehetõség, hogy a kezdõsornál Ctrl-v-t nyom lemegy az utolsó
++      Másik lehetõség, hogy a kezdõsornál Shift-v-t nyom lemegy az utolsó
+       sorra, majd ezt üti be  :w FÁJLNÉV
+ 
+   4.  :r FÁJLNÉV  beolvassa a FÁJLNÉV fájlt és behelyezi a jelenlegi fájlba
+-      a kurzorpozició utáni sorba.
++      a kurzorpozíció utáni sorba.
+ 
+ 
+ 
+@@ -629,7 +629,7 @@
+ 		   6.1.  lecke: A MEGNYITÁS (OPEN) PARANCS
+ 
+ 
+-** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
++** o  beírásával nyit egy új sort a kurzor alatt és beszúró módba vált **
+ 
+   1. Mozgassuk a kurzort a ---> kezdetû sorra.
+ 
+@@ -641,7 +641,7 @@
+ 
+ ---> Az o lenyomása után a kurzor a következõ sor elején áll beszúró módban.
+ 
+-  4. A kurzor FELETTI for megnyitásához egyzserûen a nagy O betût írjon
++  4. A kurzor FELETTI sor megnyitásához egyszerûen nagy O betût írjon
+ kicsi helyett. Próbálja ki a következõ soron!
+ Nyisson egy új sort efelett Shift-O megnyomásával, mialatt a kurzor
+ ezen a soron áll.
+@@ -654,16 +654,16 @@
+ 			6.2.  lecke: AZ APPEND PARANCS
+ 
+ 
+-	 ** a  lenyomásával a kuror UTÁN szúrhatunk szöveget. **
++	 ** a  lenyomásával a kurzor UTÁN szúrhatunk szöveget. **
+ 
+   1. Mozgassuk a kurzort a következõ ---> kezdetû sor végére úgy,
+-     hogy normál módban  $  ír be.
++     hogy  normál  módban  $-t  ír be.
+ 
+-  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
++  2. Kis "a" leütésével szöveget szúrhat be AMÖGÉ a karakter mögé,
+      amelyen a kurzor áll.
+-     (A nagy  A  az egész sor végére írja a szöveget.)
++     (A nagy "A" az egész sor végére írja a szöveget.)
+ 
+-Megj: A Vimben a sor legvégére is lehet állni, azonba ez elõdjében
++Megj: A Vimben a sor legvégére is lehet állni, azonban ez elõdjében
+       a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
+       a sor végéhez szöveget írni.
+ 
+@@ -687,13 +687,13 @@
+   2. Helyezze a kurzort az elsõ szó elejére amely eltér a második
+      ---> kezdetû sor tartalmától (a 'az utolsóval' résztõl).
+ 
+-  3. Nyomjon R karaktert és írja ét a szöveg maradékát az elsõ sorban
++  3. Nyomjon R karaktert és írja át a szöveg maradékát az elsõ sorban
+      úgy, hogy a  két sor egyezõ legyen.
+ 
+ ---> Az elsõ sort tegye azonossá az utolsóval: használja a gombokat.
+ ---> Az elsõ sort tegye azonossá a másodikkal: írjon R-t és az új szöveget.
+ 
+-  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
++  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanul hagyott
+      szövegek változatlanok maradnak.
+ 
+ 
+@@ -826,5 +826,5 @@
+ 
+   A Vimhez idomította Bram Moolenaar.
+ 
+-  Magyarította: Horváth Árpád <horvath.arpad@roik.bmf.hu>, 2006-2008
++  Magyarította: Horváth Árpád <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
+ 
+diff -Naur vim73.orig/runtime/tutor/tutor.hu.cp1250 vim73/runtime/tutor/tutor.hu.cp1250
+--- vim73.orig/runtime/tutor/tutor.hu.cp1250	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.hu.cp1250	2013-06-07 17:07:28.492260651 +0000
+@@ -2,16 +2,16 @@
+ == Ü d v ö z ö l j ü k   a   V I M - o k t a t ó b a n  -    1.5-ös  verzió  ==
+ ===============================================================================
+ 
+-     A Vim egy nagyon hatékony szerkesztõ, amelnyek rengeteg utasítása
++     A Vim egy nagyon hatékony szerkesztõ, amelynek rengeteg utasítása
+      van, túl sok, hogy egy ilyen oktatóban (tutorban), mint az itteni
+      mindet elmagyarázzuk. Ez az oktató arra törekszik, hogy annyit
+      elmagyarázzon, amennyi elég, hogy könnyedén használjuk a Vim-et, az
+      általános célú szövegszerkesztõt.
+ 
+      A feladatok megoldásához 25-30 perc szükséges attól függõen,
+-     mennyit töltünk a kisérletezéssel.
++     mennyit töltünk a kísérletezéssel.
+ 
+-     A leckében szereplõ utasítások módosítani fogják a szövegek.
++     A leckében szereplõ utasítások módosítani fogják a szöveget.
+      Készítsen másolatot errõl a fájlról, ha gyakorolni akar.
+      (Ha "vimtutor"-ral indította, akkor ez már egy másolat.)
+ 
+@@ -81,7 +81,7 @@
+   2. A hibák kijavításához mozgassa a kurzort amíg a törlendõ karakter
+      fölé nem ér.
+ 
+-  3. Nyomja meg az  x  gombot, hogy törölje a nemkívánt karaktert.
++  3. Nyomja meg az  x  gombot, hogy törölje a nem kívánt karaktert.
+ 
+   4. Ismételje a 2, 3, 4-es lépéseket, hogy kijavítsa a mondatot.
+ 
+@@ -172,7 +172,7 @@
+ 
+   3. Mozgassa a kurzort a helyes sor végére (az elsõ . UTÁN)!
+ 
+-  4. d$  begépeléséveltörölje a sor végét!
++  4. d$  begépelésével törölje a sor végét!
+ 
+ ---> Valaki a sor végét kétszer gépelte be. kétszer gépelte be.
+ 
+@@ -184,30 +184,30 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		     2.3.  lecke: UTASÍTÁSOKRÓL ÉS OBJEKTUMOKRÓL
++		     2.3.  lecke: UTASÍTÁSOKRÓL ÉS MOZGÁSOKRÓL
+ 
+ 
+   A  d  (delete=törlés) utasítás formája a következõ:
+ 
+-	 [szám]   d	objektum	   VAGY	     d	 [szám] objektum
++	 [szám]   d	mozgás	   VAGY	     d	 [szám] mozgás
+   Ahol:
+     szám - hányszor hajtódjon végre a parancs (elhagyható, alapérték=1).
+     d - a törlés (delete) utasítás.
+-    objektum - amin a parancsnak teljesülnie kell (alább listázva).
++    mozgás - amin a parancsnak teljesülnie kell (alább listázva).
+ 
+-  Objektumok rövid listája:
++  Mozgások rövid listája:
+     w - a kurzortól a szó végéig, beleértve a szóközt.
+     e - a kurzortól a szó végéig, NEM beleértve a szóközt.
+     $ - a kurzortól a sor végéig.
+ 
+-MEGJ:  Vállalkozóbbak kedvéért, csupán az objektum begépelésével parancs nélkül
+-       a kurzor oda kerül, amit az objektumlista megad.
++MEGJ:  Csupán a mozgás begépelésével (parancs nélkül)
++       a kurzor mozgás által megadott helyre kerül.
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		2.4.  lecke: EGY KIVÉTEL A  'PARANCSOBJEKTUM' ALÓL
++		2.4.  lecke: EGÉSZ SOROK FELDOLGOZÁSA
+ 
+ 
+ 	       ** dd beírásával törölheti az egész sort. **
+@@ -217,8 +217,8 @@
+ 
+   1. Mozgassa a kurzort az alábbi kifejezések második sorára!
+   2. dd begépelésével törölje a sort!
+-  3. Menjen a 4. (eredetileg 5.) sorra!
+-  4. 2dd   (ugyebár szám-utasítás-objektum) begépelésével töröljön két sort!
++  3. Menjen a 3. (eredetileg 4.) sorra!
++  4. 2dd   (ugyebár szám-utasítás-mozgás) begépelésével töröljön két sort!
+ 
+       1)  Alvó szegek a jéghideg homokban,
+       2)  - kezdi a költõ -
+@@ -238,9 +238,9 @@
+   1. Menjünk az alábbi ---> kezdetû sor elsõ hibájára!
+   2. x  lenyomásával törölje az elsõ felesleges karaktert!
+   3. u megnyomásával vonja vissza az utolsónak végrehajtott utasítást!
+-  4. Másodjára javítson ki minden hibát a sorben az x utasítással!
++  4. Másodjára javítson ki minden hibát a sorban az x utasítással!
+   5. Most nagy  U  -val állítsa vissza a sor eredeti állapotát!
+-  6. Nyomja meg az u gombot párszor, hogy az U és sz elõzõ utasításokat
++  6. Nyomja meg az u gombot párszor, hogy az U és az azt megelõzõ utasításokat
+      visszaállítsa!
+   7. CTRL-R (CTRL gomb lenyomása mellett üssön R-t) párszor csinálja újra a
+      visszavont parancsokat (redo)!
+@@ -263,11 +263,11 @@
+ 
+   4. Egy utasítás alakja normál módban:
+ 
+-       [szám]   utasítás   objektum   VAGY   utasítás	[szám] objektum
++       [szám]   utasítás   mozgás   VAGY   utasítás	[szám] mozgás
+      ahol:
+        szám - hányszor ismételjük a parancsot
+        utasítás - mit tegyünk, pl. d  a törléskor
+-       objektum - mire hasson az utasítás, például w (szó=word),
++       mozgás - mire hasson az utasítás, például w (szó=word),
+ 		$ (a sor végéig), stb.
+ 
+   5. Az elõzõ tett visszavonása (undo):	     u	 (kis u)
+@@ -278,11 +278,11 @@
+ 		3.1.  lecke: A BEILLESZTÉS (PUT) PARANCS
+ 
+ 
+-  ** p  leütésével az utolsónak töröltet a kurzor után illeszhetjük. **
++  ** p  leütésével az utolsónak töröltet a kurzor után illeszthetjük. **
+ 
+   1. Mozgassuk a kurzort az alábbi sorok elsõ sorára.
+ 
+-  2. dd leütésével töröljük a sort és eltérolódik a Vim pufferében.
++  2. dd leütésével töröljük a sort és eltárolódik a Vim pufferében.
+ 
+   3. Mozgassuk a kurzort azelõtt a  sor ELÕTTI sorba, ahová mozgatni
+      szeretnénk a törölt sort.
+@@ -350,13 +350,13 @@
+ 		       3.4.  lecke: TÖBBFÉLE VÁLTOZTATÁS c-VEL
+ 
+ 
+- ** A c utasítás használható ugyanazokkal az objektumokkal mint a törlés **
++ ** A c utasítás használható ugyanazokkal az mozgásokkal mint a törlés **
+ 
+   1. A change utasítás a törléssel azonosan viselkedik.  A forma:
+ 
+-       [szám]   c   objektum	   OR	    c	[szám]   objektum
++       [szám]   c   mozgás	   OR	    c	[szám]   mozgás
+ 
+-  2. Az objektumok is azonosak, pl.   w (szó), $ (sorvég), stb.
++  2. A mozgások is azonosak, pl.   w (szó), $ (sorvég), stb.
+ 
+   3. Mozgassuk a kurzort az elsõ ---> kezdetû sorra!
+ 
+@@ -374,18 +374,18 @@
+ 
+ 
+   1. A már törölt sort beillesztéséhez nyomjunk p-t. Ez a törölt szöveget
+-     a kurzor UTÁN helyezi (ha sor került törlésre, a kurzor allatti sorba).
++     a kurzor UTÁN helyezi (ha sor került törlésre, a kurzor alatti sorba).
+ 
+   2. A kurzor alatti karakter átírásához az r-et és azt a karaktert
+      nyomjuk, amellyel az eredetit felül szeretnénk írni.
+ 
+-  3. A változtatás (c) utasítás a karaktertõl az objektum végéig
+-     változtatja meg az objektumot. Például a cw a kurzortól a szó végéig,
++  3. A változtatás (c) utasítás a karaktertõl az mozgás végéig
++     változtatja meg az mozgást. Például a cw a kurzortól a szó végéig,
+      a c$ a sor végéig.
+ 
+   4. A változtatás formátuma:
+ 
+-	 [szám]   c	objektum	VAGY	c   [szám]   objektum
++	 [szám]   c	mozgás	VAGY	c   [szám]   mozgás
+ 
+ Ugorjunk a következõ leckére!
+ 
+@@ -428,7 +428,7 @@
+   3. A kifejezés újabb kereséséhez üssük le egyszerûen:  n .
+      A kifejezés ellenkezõ irányban történõ kereséséhez ezt üssük be: Shift-N .
+ 
+-  4. Ha visszafelé szeretne keresni, akkor ? kell a ! helyett.
++  4. Ha visszafelé szeretne keresni, akkor ? kell a / helyett.
+ 
+ ---> "hiibaa" nem a helyes módja a hiba leírásának; a hiibaa egy hiba.
+ 
+@@ -462,7 +462,7 @@
+ 		  4.4.  lecke: A HIBÁK KIJAVÍTÁSÁNAK EGY MÓDJA
+ 
+ 
+-    ** :s/új/régi/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
++    ** :s/régi/új/g begépelésével az 'új'-ra cseréljük a 'régi'-t. **
+ 
+   1. Menjünk a ---> kezdetû sorra!
+ 
+@@ -579,7 +579,7 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		   5.4.  lecke: RETRIEVING AND MERGING FILES
++		   5.4.  lecke: FÁJLOK VISSZAÁLLÍTÁSA ÉS ÖSSZEFÛZÉSE
+ 
+ 
+        ** Egy fájl tartalmának beillesztéséhez írja   :r FÁJLNÉV **
+@@ -592,11 +592,11 @@
+        keresse meg ismét ezt a leckét.
+ 
+   3. Most szúrja be a TESZT nevû fájlt a   :r TESZT   paranccsal, ahol
+-     TESZT az Ön fájljénak a neve.
++     TESZT az Ön fájljának a neve.
+ 
+ MEGJ:  A fájl, amit beillesztett a kurzora alatt helyezkedik el.
+ 
+-  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillsztettük, menjen
++  4. Hogy ellenõrizzük, hogy a fájlt tényleg beillesztettük, menjen
+      vissza, és nézze meg, hogy kétszer szerepel az 5.3. lecke! Az eredeti
+      mellett a fájlból bemásolt is ott van.
+ 
+@@ -616,11 +616,11 @@
+   2.  :w FÁJLNÉV  kiírja a jelenlegi Vim-fájlt a lemezre FÁJNÉV néven.
+ 
+   3.  :#,#w FÁJLNÉV  kiírja a két sorszám (#) közötti sorokat FÁJLNÉV-be
+-      Másik lehetõség, hogy a kezdõsornál Ctrl-v-t nyom lemegy az utolsó
++      Másik lehetõség, hogy a kezdõsornál Shift-v-t nyom lemegy az utolsó
+       sorra, majd ezt üti be  :w FÁJLNÉV
+ 
+   4.  :r FÁJLNÉV  beolvassa a FÁJLNÉV fájlt és behelyezi a jelenlegi fájlba
+-      a kurzorpozició utáni sorba.
++      a kurzorpozíció utáni sorba.
+ 
+ 
+ 
+@@ -629,7 +629,7 @@
+ 		   6.1.  lecke: A MEGNYITÁS (OPEN) PARANCS
+ 
+ 
+-** o  beírásával nyithat egy új sort a kurzor alatt és válthat beszúró módba **
++** o  beírásával nyit egy új sort a kurzor alatt és beszúró módba vált **
+ 
+   1. Mozgassuk a kurzort a ---> kezdetû sorra.
+ 
+@@ -641,7 +641,7 @@
+ 
+ ---> Az o lenyomása után a kurzor a következõ sor elején áll beszúró módban.
+ 
+-  4. A kurzor FELETTI for megnyitásához egyzserûen a nagy O betût írjon
++  4. A kurzor FELETTI sor megnyitásához egyszerûen nagy O betût írjon
+ kicsi helyett. Próbálja ki a következõ soron!
+ Nyisson egy új sort efelett Shift-O megnyomásával, mialatt a kurzor
+ ezen a soron áll.
+@@ -654,16 +654,16 @@
+ 			6.2.  lecke: AZ APPEND PARANCS
+ 
+ 
+-	 ** a  lenyomásával a kuror UTÁN szúrhatunk szöveget. **
++	 ** a  lenyomásával a kurzor UTÁN szúrhatunk szöveget. **
+ 
+   1. Mozgassuk a kurzort a következõ ---> kezdetû sor végére úgy,
+-     hogy normál módban  $  ír be.
++     hogy  normál  módban  $-t  ír be.
+ 
+-  2. a  (kicsi) leütésével szöveget szúrhat be AMöGÉ a karakter mögé,
++  2. Kis "a" leütésével szöveget szúrhat be AMÖGÉ a karakter mögé,
+      amelyen a kurzor áll.
+-     (A nagy  A  az egész sor végére írja a szöveget.)
++     (A nagy "A" az egész sor végére írja a szöveget.)
+ 
+-Megj: A Vimben a sor legvégére is lehet állni, azonba ez elõdjében
++Megj: A Vimben a sor legvégére is lehet állni, azonban ez elõdjében
+       a Vi-ban nem lehetséges, ezért abban az a nélkül elég körülményes
+       a sor végéhez szöveget írni.
+ 
+@@ -687,13 +687,13 @@
+   2. Helyezze a kurzort az elsõ szó elejére amely eltér a második
+      ---> kezdetû sor tartalmától (a 'az utolsóval' résztõl).
+ 
+-  3. Nyomjon R karaktert és írja ét a szöveg maradékát az elsõ sorban
++  3. Nyomjon R karaktert és írja át a szöveg maradékát az elsõ sorban
+      úgy, hogy a  két sor egyezõ legyen.
+ 
+ ---> Az elsõ sort tegye azonossá az utolsóval: használja a gombokat.
+ ---> Az elsõ sort tegye azonossá a másodikkal: írjon R-t és az új szöveget.
+ 
+-  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanuk hagyott
++  4. Jegyezzük meg, ha <ESC>-et nyomok, akkor a változatlanul hagyott
+      szövegek változatlanok maradnak.
+ 
+ 
+@@ -826,5 +826,5 @@
+ 
+   A Vimhez idomította Bram Moolenaar.
+ 
+-  Magyarította: Horváth Árpád <horvath.arpad@roik.bmf.hu>, 2006-2008
++  Magyarította: Horváth Árpád <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
+ 
+diff -Naur vim73.orig/runtime/tutor/tutor.hu.utf-8 vim73/runtime/tutor/tutor.hu.utf-8
+--- vim73.orig/runtime/tutor/tutor.hu.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.hu.utf-8	2013-06-07 17:07:28.515593918 +0000
+@@ -2,16 +2,16 @@
+ == Ã d v Ã¶ z Ã¶ l j ÃŒ k   a   V I M - o k t a t Ã³ b a n  -    1.5-Ã¶s  verziÃ³  ==
+ ===============================================================================
+ 
+-     A Vim egy nagyon hatÃ©kony szerkesztÅ, amelnyek rengeteg utasÃ­tÃ¡sa
++     A Vim egy nagyon hatÃ©kony szerkesztÅ, amelynek rengeteg utasÃ­tÃ¡sa
+      van, tÃºl sok, hogy egy ilyen oktatÃ³ban (tutorban), mint az itteni
+      mindet elmagyarÃ¡zzuk. Ez az oktatÃ³ arra tÃ¶rekszik, hogy annyit
+      elmagyarÃ¡zzon, amennyi elÃ©g, hogy kÃ¶nnyedÃ©n hasznÃ¡ljuk a Vim-et, az
+      Ã¡ltalÃ¡nos cÃ©lÃº szÃ¶vegszerkesztÅt.
+ 
+      A feladatok megoldÃ¡sÃ¡hoz 25-30 perc szÃŒksÃ©ges attÃ³l fÃŒggÅen,
+-     mennyit tÃ¶ltÃŒnk a kisÃ©rletezÃ©ssel.
++     mennyit tÃ¶ltÃŒnk a kÃ­sÃ©rletezÃ©ssel.
+ 
+-     A leckÃ©ben szereplÅ utasÃ­tÃ¡sok mÃ³dosÃ­tani fogjÃ¡k a szÃ¶vegek.
++     A leckÃ©ben szereplÅ utasÃ­tÃ¡sok mÃ³dosÃ­tani fogjÃ¡k a szÃ¶veget.
+      KÃ©szÃ­tsen mÃ¡solatot errÅl a fÃ¡jlrÃ³l, ha gyakorolni akar.
+      (Ha "vimtutor"-ral indÃ­totta, akkor ez mÃ¡r egy mÃ¡solat.)
+ 
+@@ -81,7 +81,7 @@
+   2. A hibÃ¡k kijavÃ­tÃ¡sÃ¡hoz mozgassa a kurzort amÃ­g a tÃ¶rlendÅ karakter
+      fÃ¶lÃ© nem Ã©r.
+ 
+-  3. Nyomja meg az  x  gombot, hogy tÃ¶rÃ¶lje a nemkÃ­vÃ¡nt karaktert.
++  3. Nyomja meg az  x  gombot, hogy tÃ¶rÃ¶lje a nem kÃ­vÃ¡nt karaktert.
+ 
+   4. IsmÃ©telje a 2, 3, 4-es lÃ©pÃ©seket, hogy kijavÃ­tsa a mondatot.
+ 
+@@ -172,7 +172,7 @@
+ 
+   3. Mozgassa a kurzort a helyes sor vÃ©gÃ©re (az elsÅ . UTÃN)!
+ 
+-  4. d$  begÃ©pelÃ©sÃ©veltÃ¶rÃ¶lje a sor vÃ©gÃ©t!
++  4. d$  begÃ©pelÃ©sÃ©vel tÃ¶rÃ¶lje a sor vÃ©gÃ©t!
+ 
+ ---> Valaki a sor vÃ©gÃ©t kÃ©tszer gÃ©pelte be. kÃ©tszer gÃ©pelte be.
+ 
+@@ -184,30 +184,30 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		     2.3.  lecke: UTASÃTÃSOKRÃL ÃS OBJEKTUMOKRÃL
++		     2.3.  lecke: UTASÃTÃSOKRÃL ÃS MOZGÃSOKRÃL
+ 
+ 
+   A  d  (delete=tÃ¶rlÃ©s) utasÃ­tÃ¡s formÃ¡ja a kÃ¶vetkezÅ:
+ 
+-	 [szÃ¡m]   d	objektum	   VAGY	     d	 [szÃ¡m] objektum
++	 [szÃ¡m]   d	mozgÃ¡s	   VAGY	     d	 [szÃ¡m] mozgÃ¡s
+   Ahol:
+     szÃ¡m - hÃ¡nyszor hajtÃ³djon vÃ©gre a parancs (elhagyhatÃ³, alapÃ©rtÃ©k=1).
+     d - a tÃ¶rlÃ©s (delete) utasÃ­tÃ¡s.
+-    objektum - amin a parancsnak teljesÃŒlnie kell (alÃ¡bb listÃ¡zva).
++    mozgÃ¡s - amin a parancsnak teljesÃŒlnie kell (alÃ¡bb listÃ¡zva).
+ 
+-  Objektumok rÃ¶vid listÃ¡ja:
++  MozgÃ¡sok rÃ¶vid listÃ¡ja:
+     w - a kurzortÃ³l a szÃ³ vÃ©gÃ©ig, beleÃ©rtve a szÃ³kÃ¶zt.
+     e - a kurzortÃ³l a szÃ³ vÃ©gÃ©ig, NEM beleÃ©rtve a szÃ³kÃ¶zt.
+     $ - a kurzortÃ³l a sor vÃ©gÃ©ig.
+ 
+-MEGJ:  VÃ¡llalkozÃ³bbak kedvÃ©Ã©rt, csupÃ¡n az objektum begÃ©pelÃ©sÃ©vel parancs nÃ©lkÃŒl
+-       a kurzor oda kerÃŒl, amit az objektumlista megad.
++MEGJ:  CsupÃ¡n a mozgÃ¡s begÃ©pelÃ©sÃ©vel (parancs nÃ©lkÃŒl)
++       a kurzor mozgÃ¡s Ã¡ltal megadott helyre kerÃŒl.
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		2.4.  lecke: EGY KIVÃTEL A  'PARANCSOBJEKTUM' ALÃL
++		2.4.  lecke: EGÃSZ SOROK FELDOLGOZÃSA
+ 
+ 
+ 	       ** dd beÃ­rÃ¡sÃ¡val tÃ¶rÃ¶lheti az egÃ©sz sort. **
+@@ -217,8 +217,8 @@
+ 
+   1. Mozgassa a kurzort az alÃ¡bbi kifejezÃ©sek mÃ¡sodik sorÃ¡ra!
+   2. dd begÃ©pelÃ©sÃ©vel tÃ¶rÃ¶lje a sort!
+-  3. Menjen a 4. (eredetileg 5.) sorra!
+-  4. 2dd   (ugyebÃ¡r szÃ¡m-utasÃ­tÃ¡s-objektum) begÃ©pelÃ©sÃ©vel tÃ¶rÃ¶ljÃ¶n kÃ©t sort!
++  3. Menjen a 3. (eredetileg 4.) sorra!
++  4. 2dd   (ugyebÃ¡r szÃ¡m-utasÃ­tÃ¡s-mozgÃ¡s) begÃ©pelÃ©sÃ©vel tÃ¶rÃ¶ljÃ¶n kÃ©t sort!
+ 
+       1)  AlvÃ³ szegek a jÃ©ghideg homokban,
+       2)  - kezdi a kÃ¶ltÅ -
+@@ -238,9 +238,9 @@
+   1. MenjÃŒnk az alÃ¡bbi ---> kezdetÅ± sor elsÅ hibÃ¡jÃ¡ra!
+   2. x  lenyomÃ¡sÃ¡val tÃ¶rÃ¶lje az elsÅ felesleges karaktert!
+   3. u megnyomÃ¡sÃ¡val vonja vissza az utolsÃ³nak vÃ©grehajtott utasÃ­tÃ¡st!
+-  4. MÃ¡sodjÃ¡ra javÃ­tson ki minden hibÃ¡t a sorben az x utasÃ­tÃ¡ssal!
++  4. MÃ¡sodjÃ¡ra javÃ­tson ki minden hibÃ¡t a sorban az x utasÃ­tÃ¡ssal!
+   5. Most nagy  U  -val Ã¡llÃ­tsa vissza a sor eredeti Ã¡llapotÃ¡t!
+-  6. Nyomja meg az u gombot pÃ¡rszor, hogy az U Ã©s sz elÅzÅ utasÃ­tÃ¡sokat
++  6. Nyomja meg az u gombot pÃ¡rszor, hogy az U Ã©s az azt megelÅzÅ utasÃ­tÃ¡sokat
+      visszaÃ¡llÃ­tsa!
+   7. CTRL-R (CTRL gomb lenyomÃ¡sa mellett ÃŒssÃ¶n R-t) pÃ¡rszor csinÃ¡lja Ãºjra a
+      visszavont parancsokat (redo)!
+@@ -263,11 +263,11 @@
+ 
+   4. Egy utasÃ­tÃ¡s alakja normÃ¡l mÃ³dban:
+ 
+-       [szÃ¡m]   utasÃ­tÃ¡s   objektum   VAGY   utasÃ­tÃ¡s	[szÃ¡m] objektum
++       [szÃ¡m]   utasÃ­tÃ¡s   mozgÃ¡s   VAGY   utasÃ­tÃ¡s	[szÃ¡m] mozgÃ¡s
+      ahol:
+        szÃ¡m - hÃ¡nyszor ismÃ©teljÃŒk a parancsot
+        utasÃ­tÃ¡s - mit tegyÃŒnk, pl. d  a tÃ¶rlÃ©skor
+-       objektum - mire hasson az utasÃ­tÃ¡s, pÃ©ldÃ¡ul w (szÃ³=word),
++       mozgÃ¡s - mire hasson az utasÃ­tÃ¡s, pÃ©ldÃ¡ul w (szÃ³=word),
+ 		$ (a sor vÃ©gÃ©ig), stb.
+ 
+   5. Az elÅzÅ tett visszavonÃ¡sa (undo):	     u	 (kis u)
+@@ -278,11 +278,11 @@
+ 		3.1.  lecke: A BEILLESZTÃS (PUT) PARANCS
+ 
+ 
+-  ** p  leÃŒtÃ©sÃ©vel az utolsÃ³nak tÃ¶rÃ¶ltet a kurzor utÃ¡n illeszhetjÃŒk. **
++  ** p  leÃŒtÃ©sÃ©vel az utolsÃ³nak tÃ¶rÃ¶ltet a kurzor utÃ¡n illeszthetjÃŒk. **
+ 
+   1. Mozgassuk a kurzort az alÃ¡bbi sorok elsÅ sorÃ¡ra.
+ 
+-  2. dd leÃŒtÃ©sÃ©vel tÃ¶rÃ¶ljÃŒk a sort Ã©s eltÃ©rolÃ³dik a Vim pufferÃ©ben.
++  2. dd leÃŒtÃ©sÃ©vel tÃ¶rÃ¶ljÃŒk a sort Ã©s eltÃ¡rolÃ³dik a Vim pufferÃ©ben.
+ 
+   3. Mozgassuk a kurzort azelÅtt a  sor ELÅTTI sorba, ahovÃ¡ mozgatni
+      szeretnÃ©nk a tÃ¶rÃ¶lt sort.
+@@ -350,13 +350,13 @@
+ 		       3.4.  lecke: TÃBBFÃLE VÃLTOZTATÃS c-VEL
+ 
+ 
+- ** A c utasÃ­tÃ¡s hasznÃ¡lhatÃ³ ugyanazokkal az objektumokkal mint a tÃ¶rlÃ©s **
++ ** A c utasÃ­tÃ¡s hasznÃ¡lhatÃ³ ugyanazokkal az mozgÃ¡sokkal mint a tÃ¶rlÃ©s **
+ 
+   1. A change utasÃ­tÃ¡s a tÃ¶rlÃ©ssel azonosan viselkedik.  A forma:
+ 
+-       [szÃ¡m]   c   objektum	   OR	    c	[szÃ¡m]   objektum
++       [szÃ¡m]   c   mozgÃ¡s	   OR	    c	[szÃ¡m]   mozgÃ¡s
+ 
+-  2. Az objektumok is azonosak, pl.   w (szÃ³), $ (sorvÃ©g), stb.
++  2. A mozgÃ¡sok is azonosak, pl.   w (szÃ³), $ (sorvÃ©g), stb.
+ 
+   3. Mozgassuk a kurzort az elsÅ ---> kezdetÅ± sorra!
+ 
+@@ -374,18 +374,18 @@
+ 
+ 
+   1. A mÃ¡r tÃ¶rÃ¶lt sort beillesztÃ©sÃ©hez nyomjunk p-t. Ez a tÃ¶rÃ¶lt szÃ¶veget
+-     a kurzor UTÃN helyezi (ha sor kerÃŒlt tÃ¶rlÃ©sre, a kurzor allatti sorba).
++     a kurzor UTÃN helyezi (ha sor kerÃŒlt tÃ¶rlÃ©sre, a kurzor alatti sorba).
+ 
+   2. A kurzor alatti karakter Ã¡tÃ­rÃ¡sÃ¡hoz az r-et Ã©s azt a karaktert
+      nyomjuk, amellyel az eredetit felÃŒl szeretnÃ©nk Ã­rni.
+ 
+-  3. A vÃ¡ltoztatÃ¡s (c) utasÃ­tÃ¡s a karaktertÅl az objektum vÃ©gÃ©ig
+-     vÃ¡ltoztatja meg az objektumot. PÃ©ldÃ¡ul a cw a kurzortÃ³l a szÃ³ vÃ©gÃ©ig,
++  3. A vÃ¡ltoztatÃ¡s (c) utasÃ­tÃ¡s a karaktertÅl az mozgÃ¡s vÃ©gÃ©ig
++     vÃ¡ltoztatja meg az mozgÃ¡st. PÃ©ldÃ¡ul a cw a kurzortÃ³l a szÃ³ vÃ©gÃ©ig,
+      a c$ a sor vÃ©gÃ©ig.
+ 
+   4. A vÃ¡ltoztatÃ¡s formÃ¡tuma:
+ 
+-	 [szÃ¡m]   c	objektum	VAGY	c   [szÃ¡m]   objektum
++	 [szÃ¡m]   c	mozgÃ¡s	VAGY	c   [szÃ¡m]   mozgÃ¡s
+ 
+ Ugorjunk a kÃ¶vetkezÅ leckÃ©re!
+ 
+@@ -428,7 +428,7 @@
+   3. A kifejezÃ©s Ãºjabb keresÃ©sÃ©hez ÃŒssÃŒk le egyszerÅ±en:  n .
+      A kifejezÃ©s ellenkezÅ irÃ¡nyban tÃ¶rtÃ©nÅ keresÃ©sÃ©hez ezt ÃŒssÃŒk be: Shift-N .
+ 
+-  4. Ha visszafelÃ© szeretne keresni, akkor ? kell a ! helyett.
++  4. Ha visszafelÃ© szeretne keresni, akkor ? kell a / helyett.
+ 
+ ---> "hiibaa" nem a helyes mÃ³dja a hiba leÃ­rÃ¡sÃ¡nak; a hiibaa egy hiba.
+ 
+@@ -462,7 +462,7 @@
+ 		  4.4.  lecke: A HIBÃK KIJAVÃTÃSÃNAK EGY MÃDJA
+ 
+ 
+-    ** :s/Ãºj/rÃ©gi/g begÃ©pelÃ©sÃ©vel az 'Ãºj'-ra cserÃ©ljÃŒk a 'rÃ©gi'-t. **
++    ** :s/rÃ©gi/Ãºj/g begÃ©pelÃ©sÃ©vel az 'Ãºj'-ra cserÃ©ljÃŒk a 'rÃ©gi'-t. **
+ 
+   1. MenjÃŒnk a ---> kezdetÅ± sorra!
+ 
+@@ -579,7 +579,7 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		   5.4.  lecke: RETRIEVING AND MERGING FILES
++		   5.4.  lecke: FÃJLOK VISSZAÃLLÃTÃSA ÃS ÃSSZEFÅ°ZÃSE
+ 
+ 
+        ** Egy fÃ¡jl tartalmÃ¡nak beillesztÃ©sÃ©hez Ã­rja   :r FÃJLNÃV **
+@@ -592,11 +592,11 @@
+        keresse meg ismÃ©t ezt a leckÃ©t.
+ 
+   3. Most szÃºrja be a TESZT nevÅ± fÃ¡jlt a   :r TESZT   paranccsal, ahol
+-     TESZT az Ãn fÃ¡jljÃ©nak a neve.
++     TESZT az Ãn fÃ¡jljÃ¡nak a neve.
+ 
+ MEGJ:  A fÃ¡jl, amit beillesztett a kurzora alatt helyezkedik el.
+ 
+-  4. Hogy ellenÅrizzÃŒk, hogy a fÃ¡jlt tÃ©nyleg beillsztettÃŒk, menjen
++  4. Hogy ellenÅrizzÃŒk, hogy a fÃ¡jlt tÃ©nyleg beillesztettÃŒk, menjen
+      vissza, Ã©s nÃ©zze meg, hogy kÃ©tszer szerepel az 5.3. lecke! Az eredeti
+      mellett a fÃ¡jlbÃ³l bemÃ¡solt is ott van.
+ 
+@@ -616,11 +616,11 @@
+   2.  :w FÃJLNÃV  kiÃ­rja a jelenlegi Vim-fÃ¡jlt a lemezre FÃJNÃV nÃ©ven.
+ 
+   3.  :#,#w FÃJLNÃV  kiÃ­rja a kÃ©t sorszÃ¡m (#) kÃ¶zÃ¶tti sorokat FÃJLNÃV-be
+-      MÃ¡sik lehetÅsÃ©g, hogy a kezdÅsornÃ¡l Ctrl-v-t nyom lemegy az utolsÃ³
++      MÃ¡sik lehetÅsÃ©g, hogy a kezdÅsornÃ¡l Shift-v-t nyom lemegy az utolsÃ³
+       sorra, majd ezt ÃŒti be  :w FÃJLNÃV
+ 
+   4.  :r FÃJLNÃV  beolvassa a FÃJLNÃV fÃ¡jlt Ã©s behelyezi a jelenlegi fÃ¡jlba
+-      a kurzorpoziciÃ³ utÃ¡ni sorba.
++      a kurzorpozÃ­ciÃ³ utÃ¡ni sorba.
+ 
+ 
+ 
+@@ -629,7 +629,7 @@
+ 		   6.1.  lecke: A MEGNYITÃS (OPEN) PARANCS
+ 
+ 
+-** o  beÃ­rÃ¡sÃ¡val nyithat egy Ãºj sort a kurzor alatt Ã©s vÃ¡lthat beszÃºrÃ³ mÃ³dba **
++** o  beÃ­rÃ¡sÃ¡val nyit egy Ãºj sort a kurzor alatt Ã©s beszÃºrÃ³ mÃ³dba vÃ¡lt **
+ 
+   1. Mozgassuk a kurzort a ---> kezdetÅ± sorra.
+ 
+@@ -641,7 +641,7 @@
+ 
+ ---> Az o lenyomÃ¡sa utÃ¡n a kurzor a kÃ¶vetkezÅ sor elejÃ©n Ã¡ll beszÃºrÃ³ mÃ³dban.
+ 
+-  4. A kurzor FELETTI for megnyitÃ¡sÃ¡hoz egyzserÅ±en a nagy O betÅ±t Ã­rjon
++  4. A kurzor FELETTI sor megnyitÃ¡sÃ¡hoz egyszerÅ±en nagy O betÅ±t Ã­rjon
+ kicsi helyett. PrÃ³bÃ¡lja ki a kÃ¶vetkezÅ soron!
+ Nyisson egy Ãºj sort efelett Shift-O megnyomÃ¡sÃ¡val, mialatt a kurzor
+ ezen a soron Ã¡ll.
+@@ -654,16 +654,16 @@
+ 			6.2.  lecke: AZ APPEND PARANCS
+ 
+ 
+-	 ** a  lenyomÃ¡sÃ¡val a kuror UTÃN szÃºrhatunk szÃ¶veget. **
++	 ** a  lenyomÃ¡sÃ¡val a kurzor UTÃN szÃºrhatunk szÃ¶veget. **
+ 
+   1. Mozgassuk a kurzort a kÃ¶vetkezÅ ---> kezdetÅ± sor vÃ©gÃ©re Ãºgy,
+-     hogy normÃ¡l mÃ³dban  $  Ã­r be.
++     hogy  normÃ¡l  mÃ³dban  $-t  Ã­r be.
+ 
+-  2. a  (kicsi) leÃŒtÃ©sÃ©vel szÃ¶veget szÃºrhat be AMÃ¶GÃ a karakter mÃ¶gÃ©,
++  2. Kis "a" leÃŒtÃ©sÃ©vel szÃ¶veget szÃºrhat be AMÃGÃ a karakter mÃ¶gÃ©,
+      amelyen a kurzor Ã¡ll.
+-     (A nagy  A  az egÃ©sz sor vÃ©gÃ©re Ã­rja a szÃ¶veget.)
++     (A nagy "A" az egÃ©sz sor vÃ©gÃ©re Ã­rja a szÃ¶veget.)
+ 
+-Megj: A Vimben a sor legvÃ©gÃ©re is lehet Ã¡llni, azonba ez elÅdjÃ©ben
++Megj: A Vimben a sor legvÃ©gÃ©re is lehet Ã¡llni, azonban ez elÅdjÃ©ben
+       a Vi-ban nem lehetsÃ©ges, ezÃ©rt abban az a nÃ©lkÃŒl elÃ©g kÃ¶rÃŒlmÃ©nyes
+       a sor vÃ©gÃ©hez szÃ¶veget Ã­rni.
+ 
+@@ -687,13 +687,13 @@
+   2. Helyezze a kurzort az elsÅ szÃ³ elejÃ©re amely eltÃ©r a mÃ¡sodik
+      ---> kezdetÅ± sor tartalmÃ¡tÃ³l (a 'az utolsÃ³val' rÃ©sztÅl).
+ 
+-  3. Nyomjon R karaktert Ã©s Ã­rja Ã©t a szÃ¶veg maradÃ©kÃ¡t az elsÅ sorban
++  3. Nyomjon R karaktert Ã©s Ã­rja Ã¡t a szÃ¶veg maradÃ©kÃ¡t az elsÅ sorban
+      Ãºgy, hogy a  kÃ©t sor egyezÅ legyen.
+ 
+ ---> Az elsÅ sort tegye azonossÃ¡ az utolsÃ³val: hasznÃ¡lja a gombokat.
+ ---> Az elsÅ sort tegye azonossÃ¡ a mÃ¡sodikkal: Ã­rjon R-t Ã©s az Ãºj szÃ¶veget.
+ 
+-  4. JegyezzÃŒk meg, ha <ESC>-et nyomok, akkor a vÃ¡ltozatlanuk hagyott
++  4. JegyezzÃŒk meg, ha <ESC>-et nyomok, akkor a vÃ¡ltozatlanul hagyott
+      szÃ¶vegek vÃ¡ltozatlanok maradnak.
+ 
+ 
+@@ -826,5 +826,5 @@
+ 
+   A Vimhez idomÃ­totta Bram Moolenaar.
+ 
+-  MagyarÃ­totta: HorvÃ¡th ÃrpÃ¡d <horvath.arpad@roik.bmf.hu>, 2006-2008
++  MagyarÃ­totta: HorvÃ¡th ÃrpÃ¡d <horvath.arpad@arek.uni-opbuda.hu>, 2006-2012
+ 
+diff -Naur vim73.orig/runtime/tutor/tutor.ja.euc vim73/runtime/tutor/tutor.ja.euc
+--- vim73.orig/runtime/tutor/tutor.ja.euc	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.ja.euc	2013-06-07 17:07:28.595593689 +0000
+@@ -38,10 +38,10 @@
+ 
+   3. ²Œ€Ø€Î¥­¡Œ€ò»È€Ã€Æ¡¢¥ì¥Ã¥¹¥ó1.2 €Ë°ÜÆ°€·€Þ€·€ç€Š¡£
+ 
+-Note: ²¿€ò¥¿¥€¥×€·€Æ€€€ë€«Èœ€é€Ê€¯€Ê€Ã€¿€é¡¢<ESC>€ò²¡€·€Æ¥Î¡Œ¥Þ¥ë¥â¡Œ¥É€Ë€·
++NOTE: ²¿€ò¥¿¥€¥×€·€Æ€€€ë€«Èœ€é€Ê€¯€Ê€Ã€¿€é¡¢<ESC>€ò²¡€·€Æ¥Î¡Œ¥Þ¥ë¥â¡Œ¥É€Ë€·
+       €Þ€¹¡£€œ€ì€«€éÆþÎÏ€·€è€Š€È€·€Æ€€€¿¥³¥Þ¥ó¥É€òºÆÆþÎÏ€·€Þ€·€ç€Š¡£
+ 
+-Note: ¥«¡Œ¥œ¥ë¥­¡Œ€Ç€â°ÜÆ°€Ç€­€Þ€¹¡£€·€«€· hjkl €Ë°ìÅÙŽ·€ì€Æ€·€Þ€š€Ð¡¢€Ï€ë€«
++NOTE: ¥«¡Œ¥œ¥ë¥­¡Œ€Ç€â°ÜÆ°€Ç€­€Þ€¹¡£€·€«€· hjkl €Ë°ìÅÙŽ·€ì€Æ€·€Þ€š€Ð¡¢€Ï€ë€«
+       €ËÂ®€¯°ÜÆ°€¹€ë€³€È€¬€Ç€­€ë€Ç€·€ç€Š¡£€€€ä¥Þ¥ž€Ç!
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -109,7 +109,7 @@
+ ---> €³€Î €Ë€Ï Â­€ê€Ê€€ ¥Æ¥­¥¹¥È €¢€ë¡£
+ ---> €³€Î ¹Ô €Ë€Ï Žö€Ä€« Â­€ê€Ê€€ ¥Æ¥­¥¹¥È €¬ €¢€ë¡£
+ 
+-  5. ÁÞÆþ€ÎÊýË¡€¬€ï€«€Ã€¿€é²Œ€Î¥ì¥Ã¥¹¥ó1€ÎÍ×Ìó€òž«€Þ€·€ç€Š¡£
++  5. ÁÞÆþ€ÎÊýË¡€¬€ï€«€Ã€¿€é¥ì¥Ã¥¹¥ó 1.5 €Ø¿Ê€ß€Þ€·€ç€Š¡£
+ 
+ 
+ 
+@@ -117,7 +117,7 @@
+ 		     ¥ì¥Ã¥¹¥ó 1.5: ¥Æ¥­¥¹¥ÈÊÔœž - ÄÉ²Ã
+ 
+ 
+-		 ** ¥Æ¥­¥¹¥ÈÄÉ²Ã€¹€ë€Ë€Ï A €ò²¡€·€Þ€·€ç€Š **
++		 ** ¥Æ¥­¥¹¥È€òÄÉ²Ã€¹€ë€Ë€Ï A €ò²¡€·€Þ€·€ç€Š **
+ 
+   1. °Ê²Œ€Î ---> €ÈŒš€µ€ì€¿ºÇœé€Î¹Ô€Ë¥«¡Œ¥œ¥ë€ò°ÜÆ°€·€Þ€·€ç€Š¡£
+      ¥«¡Œ¥œ¥ë€¬€œ€ÎÊž»úŸå€Ë€¢€Ã€Æ€â€«€Þ€€€Þ€»€ó¡£
+@@ -126,8 +126,8 @@
+ 
+   3. ¥Æ¥­¥¹¥È€òÄÉ²Ã€·œª€š€¿€é¡¢ <ESC> €ò²¡€·€Æ¥Î¡Œ¥Þ¥ë¥â¡Œ¥É€ËÌá€ê€Þ€·€ç€Š¡£
+ 
+-  4. 2¹ÔÌÜ€Î ---> €ÈŒš€µ€ì€¿Ÿìœê€Ø°ÜÆ°€·¡¢¥¹¥Æ¥Ã¥× 2 €«€é 3 ·«€êÊÖ€·€ÆÊžË¡€ò
+-     œ€Àµ€·€Þ€·€ç€Š¡£
++  4. 2¹ÔÌÜ€Î ---> €ÈŒš€µ€ì€¿Ÿìœê€Ø°ÜÆ°€·¡¢¥¹¥Æ¥Ã¥× 2 €«€é 3 €ò·«€êÊÖ€·€ÆÊžË¡
++     €òœ€Àµ€·€Þ€·€ç€Š¡£
+ 
+ ---> €³€³€Ë€ÏŽÖ°ã€Ã€¿¥Æ¥­¥¹¥È€¬€¢€ê
+      €³€³€Ë€ÏŽÖ°ã€Ã€¿¥Æ¥­¥¹¥È€¬€¢€ê€Þ€¹¡£
+@@ -145,7 +145,8 @@
+   !! NOTE: °Ê²Œ€Î¥¹¥Æ¥Ã¥×€òŒÂ¹Ô€¹€ëÁ°€Ë¡¢€Þ€ºÁŽÂÎ€òÆÉ€ó€Ç€¯€À€µ€€!!
+ 
+   1. ¥ì¥Ã¥¹¥ó 1.2 €Ç€ä€Ã€¿€è€Š€Ë :q! €ò¥¿¥€¥×€·€Æ¡¢€³€Î¥Á¥å¡Œ¥È¥ê¥¢¥ë€òœªÎ»
+-     €·€Þ€¹¡£
++     €·€Þ€¹¡£€¢€ë€€€Ï¡¢ÊÌ€ÎÃŒËö€¬€¢€ëŸì¹ç€Ï€œ€³€Ç°Ê²Œ€ÎÆâÍÆ€ò¹Ô€Ã€Æ€â€«€Þ€€
++     €Þ€»€ó¡£
+ 
+   2. ¥·¥§¥ë¥×¥í¥ó¥×¥È€Ç€³€Î¥³¥Þ¥ó¥É€ò¥¿¥€¥×€·€Þ€¹:  vim tutor <ENTER>
+      'vim'€¬ Vim ¥š¥Ç¥£¥¿€òµ¯Æ°€¹€ë¥³¥Þ¥ó¥É¡¢'tutor' €ÏÊÔœž€·€¿€€¥Õ¥¡¥€¥ë€Î
+@@ -155,7 +156,8 @@
+ 
+   4. ÊÑ¹¹€ò¥Õ¥¡¥€¥ë€ËÊÝÂž€·€Þ€¹:  :wq  <ENTER>
+ 
+-  5. vimtutor €òºÆÅÙµ¯Æ°€·¡¢°Ê²Œ€ÎÍ×Ìó€Ø¿Ê€ß€Þ€·€ç€Š¡£
++  5. ¥¹¥Æ¥Ã¥× 1 €Ç vimtutuor €òœªÎ»€·€¿Ÿì¹ç€Ï vimtutor €òºÆÅÙµ¯Æ°€·¡¢°Ê²Œ€Î
++     Í×Ìó€Ø¿Ê€ß€Þ€·€ç€Š¡£
+ 
+   6. °ÊŸå€Î¥¹¥Æ¥Ã¥×€òÆÉ€ó€ÇÍý²ò€·€¿Ÿå€Ç€³€ì€òŒÂ¹Ô€·€Þ€·€ç€Š¡£
+   
+@@ -215,7 +217,7 @@
+ 
+   2. °Ê²Œ€Î ---> €ÈŒš€µ€ì€¿¹Ô€Ë¥«¡Œ¥œ¥ë€ò°ÜÆ°€·€Þ€·€ç€Š¡£
+ 
+-  3. Àµ€·€€Êž€ÎËöÈø€Ø¥«¡Œ¥œ¥ë€ò°ÜÆ°€·€Þ€·€ç€Š(ºÇœé€Î . €Îžå€Ç€¹)¡£
++  3. Àµ€·€€Êž€ÎËöÈø€Ø¥«¡Œ¥œ¥ë€ò°ÜÆ°€·€Þ€·€ç€Š(ºÇœé€Î ¡£ €Îžå€Ç€¹)¡£
+ 
+   4. ¹ÔËö€Þ€Çºïœü€¹€ë€Î€Ë d$ €È¥¿¥€¥×€·€Þ€·€ç€Š¡£
+ 
+@@ -232,7 +234,7 @@
+ 		     ¥ì¥Ã¥¹¥ó 2.3: ¥ª¥Ú¥ì¡Œ¥¿€È¥â¡Œ¥·¥ç¥ó
+ 
+ 
+-  Â¿€¯€Î¥³¥Þ¥ó¥É€Ï¥ª¥Ú¥ì¡Œ¥¿€È¥â¡Œ¥·¥ç¥ó€«€é¥Æ¥­¥¹¥È€ËÊÑ¹¹€ò²Ã€Þ€¹¡£
++  Â¿€¯€Î¥³¥Þ¥ó¥É€Ï¥ª¥Ú¥ì¡Œ¥¿€È¥â¡Œ¥·¥ç¥ó€«€é¥Æ¥­¥¹¥È€ËÊÑ¹¹€ò²Ã€š€Þ€¹¡£
+   ºïœü¥³¥Þ¥ó¥É d €Î¥ª¥Ú¥ì¡Œ¥¿€ÏŒ¡€ÎÍÍ€Ë€Ê€Ã€Æ€€€Þ€¹:
+ 
+   	d   ¥â¡Œ¥·¥ç¥ó
+@@ -259,13 +261,13 @@
+ 
+   1. °Ê²Œ€Î ---> €ÈŒš€µ€ì€¿¹Ô€ÎÀèÆ¬€Ë¥«¡Œ¥œ¥ë€ò°ÜÆ°€·€Þ€¹¡£
+ 
+-  2. 2dw €ò¥¿¥€¥×€·€ÆÃ±žì2€ÄÊ¬°ÜÆ°€·€Þ€¹¡£
++  2. 2w €ò¥¿¥€¥×€·€ÆÃ±žì2€ÄÊ¬Á°€Ë°ÜÆ°€·€Þ€¹¡£
+ 
+   3. 3e €ò¥¿¥€¥×€·€Æ3€ÄÌÜ€ÎÃ±žì€ÎœªÃŒ€Ë°ÜÆ°€·€Þ€¹¡£
+ 
+   4. 0 (¥Œ¥í)€ò¥¿¥€¥×€·€Æ¹ÔÆ¬€Ë°ÜÆ°€·€Þ€¹¡£
+ 
+-  5. ¥¹¥Æ¥Ã¥× 2 €È 3 €ò°ã€Š¿ôÃÍ€È»È€Ã€Æ·«€êÊÖ€·€Þ€¹¡£
++  5. ¥¹¥Æ¥Ã¥× 2 €È 3 €ò°ã€Š¿ôÃÍ€ò»È€Ã€Æ·«€êÊÖ€·€Þ€¹¡£
+ 
+ ---> This is just a line with words you can move around in.
+ 
+@@ -286,7 +288,7 @@
+ 
+   1. ---> €ÈŒš€µ€ì€¿¹Ô€Î¹ÔÆ¬ÉôÊ¬€Ë¥«¡Œ¥œ¥ë€ò°ÜÆ°€·€Þ€·€ç€Š¡£
+ 
+-  2. UPPER CASE €ÎÃ±žì2€Ä€ò 2dw €È¥¿¥€¥×€·€Æºïœü€·€Þ€¹¡£
++  2. UPPER CASE €ÎÃ±žì2€Ä€ò d2w €È¥¿¥€¥×€·€Æºïœü€·€Þ€¹¡£
+ 
+   3. UPPER CASE €È€€€ŠÏ¢Â³€·€¿Ã±žì€ò¡¢1€Ä€Î¥³¥Þ¥ó¥É€È°Û€Ê€ë¥«¥Š¥ó¥È€ò»ØÄê€·¡¢
+      ¥¹¥Æ¥Ã¥× 1 €È 2 €ò·«€êÊÖ€·€Þ€¹¡£
+@@ -326,8 +328,8 @@
+ 
+   ** ºÇžå€Î¥³¥Þ¥ó¥É€òŒè€êŸÃ€¹€Ë€Ï u €ò²¡€·€Þ€¹¡£U €Ï¹ÔÁŽÂÎ€ÎŒèŸÃ€Ç€¹¡£ **
+ 
+-  1. °Ê²Œ€Î ---> €ÈŒš€µ€ì€¿¹Ô€Ë¥«¡Œ¥œ¥ë€ò°ÜÆ°€·¡¢ºÇœé€ÎŽÖ°ã€€€Ë¥«¡Œ¥œ
+-     ¥ë€ò°ÜÆ°€·€Þ€·€ç€Š¡£
++  1. °Ê²Œ€Î ---> €ÈŒš€µ€ì€¿¹Ô€Ë¥«¡Œ¥œ¥ë€ò°ÜÆ°€·¡¢ºÇœé€ÎŽÖ°ã€€€Ë¥«¡Œ¥œ¥ë
++     €ò°ÜÆ°€·€Þ€·€ç€Š¡£
+   2. x €ò¥¿¥€¥×€·€Æ€€€é€Ê€€ÀèÆ¬€ÎÊž»ú€òºïœü€·€Þ€·€ç€Š¡£
+   3. €µ€¡¡¢u €ò¥¿¥€¥×€·€ÆºÇžå€ËŒÂ¹Ô€·€¿¥³¥Þ¥ó¥É€òŒè€êŸÃ€·€Þ€·€ç€Š¡£
+   4. º£ÅÙ€Ï¡¢x €ò»ÈÍÑ€·€Æží€ê€òÁŽ€Æœ€Àµ€·€Þ€·€ç€Š¡£
+@@ -406,7 +408,7 @@
+ --->  €³€Î¹ç€ò¿ÍÎÏ€·€¿»þ€Í¡¢€œ€Î¿Í€ÏŽö€Ä€«Ìä°ã€Ã€¿¥­¡Œ€ò²¡€·€â€·€¿!
+ --->  €³€Î¹Ô€òÆþÎÏ€·€¿»þ€Ë¡¢€œ€Î¿Í€ÏŽö€Ä€«ŽÖ°ã€Ã€¿¥­¡Œ€ò²¡€·€Þ€·€¿!
+ 
+-  5. €µ€¡¡¢¥ì¥Ã¥¹¥ó 3.2 €Ø¿Ê€ß€Þ€·€ç€Š¡£
++  5. €µ€¡¡¢¥ì¥Ã¥¹¥ó 3.3 €Ø¿Ê€ß€Þ€·€ç€Š¡£
+ 
+ NOTE: ŒÂºÝ€Ë»î€·€Þ€·€ç€Š¡£·è€·€Æ³Ð€š€ë€À€±€Ë€Ï€·€Ê€€€³€È¡£
+ 
+@@ -428,8 +430,8 @@
+ 
+   5. ºÇœé€Î¹Ô€¬Œ¡€Î¹Ô€ÎÍÍ€Ë€Ê€ë€Þ€Ç¥¹¥Æ¥Ã¥× 3 €È 4 €ò·«€êÊÖ€·€Þ€¹¡£
+ 
+----> This lubw has a few wptfd that mrrf changing usf the change command.
+----> This line has a few words that need changing using the change command.
++---> This lubw has a few wptfd that mrrf changing usf the change operator.
++---> This line has a few words that need changing using the change operator.
+ 
+ cw €ÏÃ±žì€òÊÑ¹¹€¹€ë€À€±€Ç€Ê€¯¡¢ÁÞÆþ€â¹Ô€š€ë€³€È€ËÃí°Õ€·€Þ€·€ç€Š¡£
+ 
+@@ -494,7 +496,7 @@
+      €Ë¹ÔÈÖ¹æ€ò³Ð€š€Æ€ª€­€Þ€·€ç€Š¡£
+ 
+ NOTE:  ²èÌÌ€Î±Š²Œ¶ù€Ë¥«¡Œ¥œ¥ë€Î°ÌÃÖ€¬ÉœŒš€µ€ì€Æ€€€ë€«€â€·€ì€Þ€»€ó¡£€³€ì€Ï
+-       'ruler' ¥ª¥×¥·¥ç¥ó(¥ì¥Ã¥¹¥ó6€ÇÀâÌÀ)€òÀßÄê€¹€ë€³€È€ÇÉœŒš€µ€ì€Þ€¹¡£
++       'ruler' ¥ª¥×¥·¥ç¥ó(:help 'ruler' €ò»²ŸÈ)€òÀßÄê€¹€ë€³€È€ÇÉœŒš€µ€ì€Þ€¹¡£
+ 
+   2. ºÇ²Œ¹Ô€Ë°ÜÆ°€¹€ë€¿€á€Ë G €ò¥¿¥€¥×€·€Þ€·€ç€Š¡£
+      ¥Õ¥¡¥€¥ë€ÎÀèÆ¬€Ë°ÜÆ°€¹€ë€Ë€Ï gg €È¥¿¥€¥×€·€Þ€·€ç€Š¡£
+@@ -523,8 +525,8 @@
+   5. žµ€ÎŸìœê€ËÌá€ë€Ë€Ï CTRL-O (Ctrl €ò²¡€·Â³€±€Ê€¬€é o Êž»ú¥¿¥€¥×)€ò¥¿¥€¥×€·
+      €Þ€¹¡£€µ€é€ËÌá€ë€Ë€Ï€³€ì€ò·«€êÊÖ€·€Þ€¹¡£CTRL-I €ÏÁ°Êýžþ€Ç€¹¡£
+ 
+-Note: "errroor" €Ï error €È¥¹¥Ú¥ë€¬°ã€€€Þ€¹;  errroor €Ï€€€ï€æ€ë error €Ç€¹¡£
+-Note: ž¡º÷€¬¥Õ¥¡¥€¥ë€Îœª€ï€ê€ËÃ£€¹€ë€È¡¢¥ª¥×¥·¥ç¥ó 'wrapscan' €¬ÀßÄê€µ€ì€Æ€€€ë
++--->  "errroor" €Ï error €È¥¹¥Ú¥ë€¬°ã€€€Þ€¹;  errroor €Ï€€€ï€æ€ë error €Ç€¹¡£
++NOTE: ž¡º÷€¬¥Õ¥¡¥€¥ë€Îœª€ï€ê€ËÃ£€¹€ë€È¡¢¥ª¥×¥·¥ç¥ó 'wrapscan' €¬ÀßÄê€µ€ì€Æ€€€ë
+       Ÿì¹ç€Ï¡¢¥Õ¥¡¥€¥ë€ÎÀèÆ¬€«€éž¡º÷€òÂ³¹Ô€·€Þ€¹¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -541,7 +543,7 @@
+ 
+   4. ºÇœé€Î³çžÌ€Ë°ÜÆ°€¹€ë€Ë€Ï % €È¥¿¥€¥×€·€Þ€·€ç€Š¡£
+ 
+-  5. ÂŸ€Î (,),[,],{ or } €Ç¥«¡Œ¥œ¥ë€ò°ÜÆ°€·¡¢% €¬²¿€ò€·€Æ€€€ë€«³ÎÇ§€·€Þ€·€ç€Š¡£
++  5. ÂŸ€Î (,),[,],{ €ä } €Ç¥«¡Œ¥œ¥ë€ò°ÜÆ°€·¡¢% €¬²¿€ò€·€Æ€€€ë€«³ÎÇ§€·€Þ€·€ç€Š¡£
+ 
+ ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+ 
+@@ -612,10 +614,10 @@
+      ¥·¥§¥ë¥×¥í¥ó¥×¥È€Î€è€Š€Ë¥Ç¥£¥ì¥¯¥È¥ê€Î°ìÍ÷€¬ÉœŒš€µ€ì€ë€Ï€º€Ç€¹¡£
+      €â€·€¯€Ï ls €¬Æ°€«€Ê€€€Ê€é€Ð :!dir €ò»ÈÍÑ€·€Þ€·€ç€Š¡£
+ 
+-Note:  €³€ÎÊýË¡€Ë€è€Ã€Æ€¢€é€æ€ë¥³¥Þ¥ó¥É€¬ŒÂ¹Ô€¹€ë€³€È€¬€Ç€­€Þ€¹¡£€â€Á€í€ó°ú¿ô
++NOTE:  €³€ÎÊýË¡€Ë€è€Ã€Æ€¢€é€æ€ë¥³¥Þ¥ó¥É€¬ŒÂ¹Ô€¹€ë€³€È€¬€Ç€­€Þ€¹¡£€â€Á€í€ó°ú¿ô
+        €âÍ¿€š€é€ì€Þ€¹¡£
+ 
+-Note:  ÁŽ€Æ€Î : ¥³¥Þ¥ó¥É€Ï <ENTER> €ò²¡€·€ÆœªÎ»€·€Ê€±€ì€Ð€Ê€ê€Þ€»€ó¡£
++NOTE:  ÁŽ€Æ€Î : ¥³¥Þ¥ó¥É€Ï <ENTER> €ò²¡€·€ÆœªÎ»€·€Ê€±€ì€Ð€Ê€ê€Þ€»€ó¡£
+        °Ê¹ß€Ç€Ï€³€Î€³€È€ËžÀµÚ€·€Þ€»€ó¡£
+ 
+ 
+@@ -633,9 +635,9 @@
+   3. €Ç€Ï :w TEST €È¥¿¥€¥×€·€Þ€·€ç€Š (TEST €Ï¡¢Áª€ó€À¥Õ¥¡¥€¥ëÌŸ€Ç€¹)¡£
+ 
+   4. €³€ì€Ë€è€ê¥Õ¥¡¥€¥ëÁŽÂÎ€¬ TEST €È€€€ŠÌŸÁ°€ÇÊÝÂž€µ€ì€Þ€¹¡£
+-     €â€Š°ìÅÙ :!dir €â€·€¯€Ï !ls €È¥¿¥€¥×€·€Æ³ÎÇ§€·€Æ€ß€Þ€·€ç€Š¡£
++     €â€Š°ìÅÙ :!dir €â€·€¯€Ï :!ls €È¥¿¥€¥×€·€Æ³ÎÇ§€·€Æ€ß€Þ€·€ç€Š¡£
+ 
+-Note: €³€³€Ç Vim €òœªÎ»€·¡¢¥Õ¥¡¥€¥ëÌŸ TEST €È¶Š€Ëµ¯Æ°€¹€ë€È¡¢ÊÝÂž€·€¿»þ€Î
++NOTE: €³€³€Ç Vim €òœªÎ»€·¡¢¥Õ¥¡¥€¥ëÌŸ TEST €È¶Š€Ëµ¯Æ°€¹€ë€È¡¢ÊÝÂž€·€¿»þ€Î
+      ¥Á¥å¡Œ¥È¥ê¥¢¥ë€ÎÊ£Àœ€¬€Ç€­Ÿå€¬€ë€Ï€º€Ç€¹¡£
+ 
+   5. €µ€é€Ë¡¢Œ¡€Î€è€Š€Ë¥¿¥€¥×€·€Æ¥Õ¥¡¥€¥ë€òŸÃ€·€Þ€·€ç€Š(MS-DOS):  :!del TEST
+@@ -655,8 +657,8 @@
+ 
+   3. Êž»ú : €ò²¡€¹€È¡¢²èÌÌ€ÎºÇ²ŒÉô€Ë :'<,'> €¬žœ€ì€Þ€¹¡£
+ 
+-  4. w TEST (TESET €ÏÂžºß€·€Ê€€¥Õ¥¡¥€¥ëÌŸ)€ò¥¿¥€¥×€·€Þ€¹¡£
+-     Enter €ò²¡€¹Á°€Ë :'<,'>w TEST €È€Ê€Ã€Æ€€€ë€³€È€ò³ÎÇ§€·€Æ²Œ€µ€€¡£
++  4. w TEST (TEST €ÏÂžºß€·€Ê€€¥Õ¥¡¥€¥ëÌŸ)€ò¥¿¥€¥×€·€Þ€¹¡£
++     <ENTER> €ò²¡€¹Á°€Ë :'<,'>w TEST €È€Ê€Ã€Æ€€€ë€³€È€ò³ÎÇ§€·€Æ²Œ€µ€€¡£
+ 
+   5. Vim €Ï TEST €È€€€Š¥Õ¥¡¥€¥ë€ËÁªÂò€µ€ì€¿¹Ô€òœñ€­¹þ€à€Ç€·€ç€Š¡£
+      !dir €â€·€¯€Ï !ls €Ç€œ€ì€ò³ÎÇ§€·€Þ€¹¡£
+@@ -747,7 +749,7 @@
+ 
+   3. ¥«¡Œ¥œ¥ë€Îžå€í€Ë¥Æ¥­¥¹¥È€òÄÉ²Ã€¹€ë€¿€á€Ë a (Ÿ®Êž»ú) €ò¥¿¥€¥×€·€Þ€¹¡£
+ 
+-  4. €œ€Î²Œ€Î¹Ô€Î€Î€è€Š€ÊÃ±žì€ËŽ°À®€µ€»€Þ€¹¡£ÁÞÆþ¥â¡Œ¥É€òÈŽ€±€ë°Ù€Ë <ESC> €Ë²¡
++  4. €œ€Î²Œ€Î¹Ô€Î€è€Š€ÊÃ±žì€ËŽ°À®€µ€»€Þ€¹¡£ÁÞÆþ¥â¡Œ¥É€òÈŽ€±€ë°Ù€Ë <ESC> €ò²¡
+      €·€Þ€¹¡£
+ 
+   5. e €ò»È€Ã€ÆŒ¡€ÎÉÔŽ°ÁŽ€ÊÃ±žì€Ø°ÜÆ°€·¡¢¥¹¥Æ¥Ã¥× 3 €È 4 €ò·«€êÊÖ€·€Þ€¹¡£
+@@ -755,7 +757,7 @@
+ ---> This li will allow you to pract appendi text to a line.
+ ---> This line will allow you to practice appending text to a line.
+ 
+-Note: a, i €È A €ÏÆ±€žÁÞÆþ¥â¡Œ¥É€Ø°Ü€ê€Þ€¹€¬¡¢Êž»ú€¬ÁÞÆþ€µ€ì€ë°ÌÃÖ€À€±€¬°Û€Ê€ê
++NOTE: a, i €È A €ÏÆ±€žÁÞÆþ¥â¡Œ¥É€Ø°Ü€ê€Þ€¹€¬¡¢Êž»ú€¬ÁÞÆþ€µ€ì€ë°ÌÃÖ€À€±€¬°Û€Ê€ê
+       €Þ€¹¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -772,7 +774,7 @@
+   3. ÃÖŽ¹¥â¡Œ¥É€òÈŽ€±€ë€Ë€Ï <ESC> €ò²¡€·€Þ€¹¡£¹Ô€Î»Ä€ê€¬ÊÑ¹¹€µ€ì€Æ€€€Ê€€€Þ€Þ€Ë
+      €Ê€ë€³€È€ËÃí°Õ€·€Æ€¯€À€µ€€¡£
+ 
+-  5. »Ä€Ã€¿ xxx €ò¥¹¥Æ¥Ã¥×€ò·«€êÊÖ€·€ÆÃÖŽ¹€·€Þ€·€ç€Š¡£
++  4. »Ä€Ã€¿ xxx €ò¥¹¥Æ¥Ã¥×€ò·«€êÊÖ€·€ÆÃÖŽ¹€·€Þ€·€ç€Š¡£
+ 
+ ---> Adding 123 to xxx gives you xxx.
+ ---> Adding 123 to 456 gives you 579.
+@@ -803,7 +805,7 @@
+ --->  a) this is the first item.
+       b)
+ 
+-  Note: Ã±žì€ò1€Ä yank €¹€ë€Î€Ë y €ò¥ª¥Ú¥ì¡Œ¥¿€È€·€Æ yw €È€¹€ë€³€È€âœÐÍè€Þ€¹¡£
++  NOTE: Ã±žì€ò1€Ä yank €¹€ë€Î€Ë y €ò¥ª¥Ú¥ì¡Œ¥¿€È€·€Æ yw €È€¹€ë€³€È€âœÐÍè€Þ€¹¡£
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 		       ¥ì¥Ã¥¹¥ó 6.5: ¥ª¥×¥·¥ç¥ó€ÎÀßÄê
+ 
+@@ -824,8 +826,8 @@
+ 
+   6. ÂçÊž»úŸ®Êž»ú€Î¶èÊÌ€òÌµžú€Ë€¹€ë€Ë€ÏŒ¡€ÎÍÍ€ËÆþÎÏ€·€Þ€¹:  :set noic
+ 
+-Note: ¥Þ¥Ã¥Á€Î¶¯ÄŽÉœŒš€ò€ä€á€ë€Ë€ÏŒ¡€ÎÍÍ€ËÆþÎÏ€·€Þ€¹: :nohlsearch
+-Note: 1€Ä€Îž¡º÷¥³¥Þ¥ó¥É€À€±ÂçÊž»úŸ®Êž»ú€Î¶èÊÌ€ò€ä€á€¿€€€Ê€é€Ð¡¢¥Õ¥ì¡Œ¥º€Ë \c
++NOTE: ¥Þ¥Ã¥Á€Î¶¯ÄŽÉœŒš€ò€ä€á€ë€Ë€ÏŒ¡€ÎÍÍ€ËÆþÎÏ€·€Þ€¹: :nohlsearch
++NOTE: 1€Ä€Îž¡º÷¥³¥Þ¥ó¥É€À€±ÂçÊž»úŸ®Êž»ú€Î¶èÊÌ€ò€ä€á€¿€€€Ê€é€Ð¡¢¥Õ¥ì¡Œ¥º€Ë \c
+       €ò»ÈÍÑ€·€Þ€¹:  /ignore\c  <ENTER>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 				¥ì¥Ã¥¹¥ó 6 Í×Ìó
+@@ -869,16 +871,16 @@
+   ":help" ¥³¥Þ¥ó¥É€Ë°ú¿ô€òÍ¿€š€ë€³€È€Ë€è€ê¡¢€¢€é€æ€ëÂêÌŸ€Î¥Ø¥ë¥×€òž«€Ä€±€ë€³€È
+   €¬€Ç€­€Þ€¹¡£€³€ì€é€ò»î€·€Æ€ß€Þ€·€ç€Š(<ENTER> €ò¥¿¥€¥×€·Ëº€ì€Ê€€€è€Š€Ë):
+ 
+-  :help w
+-  :help c_<T
+-  :help insert-index
+-  :help user-manual
++	:help w
++	:help c_CTRL-D
++	:help insert-index
++	:help user-manual
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 		      ¥ì¥Ã¥¹¥ó 7.2: µ¯Æ°¥¹¥¯¥ê¥×¥È€ÎºîÀ®
+ 
+ 			 ** Vim €ÎÆÃÄ§€òÈ¯Žø€¹€ë **
+ 
+-  Vim €Ë€Ï Vi €è€ê€âÂ¿€¯€ÎÆÃÄ§€òÆ§€Þ€š€Æ€€€Þ€¬¡¢€œ€Î€Û€È€ó€É€ÏœéŽüŸõÂÖ€Ë€Æ
++  Vim €Ë€Ï Vi €è€ê€âÂ¿€¯€ÎÆÃÄ§€òÆ§€Þ€š€Æ€€€Þ€¹€¬¡¢€œ€Î€Û€È€ó€É€ÏœéŽüŸõÂÖ€Ë€Æ
+   »ÈÍÑÉÔ²Ä€È€Ê€Ã€Æ€€€Þ€¹¡£€è€êÂ¿€¯€ÎÆÃÄ§€ò»È€€€Ï€ž€á€ë€Ë€Ï "vimrc" ¥Õ¥¡¥€¥ë
+   €òºîÀ®€·€Þ€¹¡£
+ 
+@@ -947,7 +949,7 @@
+   €³€ì€Ë€Æ Vim €Î¥Á¥å¡Œ¥È¥ê¥¢¥ë€òœª€ï€ê€Þ€¹¡£¥š¥Ç¥£¥¿€òŽÊÃ±€Ë¡¢€·€«€âœŒÊ¬€Ë
+   »È€Š€³€È€¬€Ç€­€ë€è€Š€Ë€È¡¢Vim €Î»ý€Ä³µÇ°€ÎÍ×ÅÀ€Î€ß€òÅÁ€š€è€Š€È€·€Þ€·€¿¡£
+   Vim €Ë€Ï€µ€é€ËÂ¿€¯€Î¥³¥Þ¥ó¥É€¬€¢€ê¡¢€³€³€ÇÁŽ€Æ€òÀâÌÀ€¹€ë€³€È€Ï€Ç€­€Þ€»€ó¡£
+-  °Ê¹ß€Ï¥æ¡Œ¥¶¥Þ¥Ë¥å¥¢¥ë€ò»²ŸÈ€¯€À€µ€€: "help :user-manual"
++  °Ê¹ß€Ï¥æ¡Œ¥¶¥Þ¥Ë¥å¥¢¥ë€ò»²ŸÈ€¯€À€µ€€: ":help user-manual"
+ 
+   €³€ì°Êžå€Î³Øœ¬€Î€¿€á€Ë¡¢Œ¡€ÎËÜ€ò¿äÁŠ€·€Þ€¹¡£
+ 	Vim - Vi Improved - by Steve Oualline
+diff -Naur vim73.orig/runtime/tutor/tutor.ja.sjis vim73/runtime/tutor/tutor.ja.sjis
+--- vim73.orig/runtime/tutor/tutor.ja.sjis	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.ja.sjis	2013-06-07 17:07:28.605593661 +0000
+@@ -38,10 +38,10 @@
+ 
+   3. ºÖÌL[ðgÁÄAbX1.2 ÉÚ®µÜµå€B
+ 
+-Note: œð^CvµÄ¢é©»çÈ­ÈÁœçA<ESC>ðµÄm[}[hÉµ
++NOTE: œð^CvµÄ¢é©»çÈ­ÈÁœçA<ESC>ðµÄm[}[hÉµ
+       Ü·B»ê©çüÍµæ€ÆµÄ¢œR}hðÄüÍµÜµå€B
+ 
+-Note: J[\L[ÅàÚ®Å«Ü·Bµ©µ hjkl ÉêxµêÄµÜŠÎAÍé©
++NOTE: J[\L[ÅàÚ®Å«Ü·Bµ©µ hjkl ÉêxµêÄµÜŠÎAÍé©
+       É¬­Ú®·é±ÆªÅ«éÅµå€B¢â}WÅ!
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -109,7 +109,7 @@
+ ---> ±Ì ÉÍ «èÈ¢ eLXg  éB
+ ---> ±Ì s ÉÍ ôÂ© «èÈ¢ eLXg ª  éB
+ 
+-  5. }üÌû@ªí©ÁœçºÌbX1Ìvñð©Üµå€B
++  5. }üÌû@ªí©ÁœçbX 1.5 ÖiÝÜµå€B
+ 
+ 
+ 
+@@ -117,7 +117,7 @@
+ 		     bX 1.5: eLXgÒW - ÇÁ
+ 
+ 
+-		 ** eLXgÇÁ·éÉÍ A ðµÜµå€ **
++		 ** eLXgðÇÁ·éÉÍ A ðµÜµå€ **
+ 
+   1. ÈºÌ ---> ÆŠ³êœÅÌsÉJ[\ðÚ®µÜµå€B
+      J[\ª»Ì¶ãÉ ÁÄà©Ü¢Ü¹ñB
+@@ -126,8 +126,8 @@
+ 
+   3. eLXgðÇÁµIŠœçA <ESC> ðµÄm[}[hÉßèÜµå€B
+ 
+-  4. 2sÚÌ ---> ÆŠ³êœêÖÚ®µAXebv 2 ©ç 3 JèÔµÄ¶@ð
+-     C³µÜµå€B
++  4. 2sÚÌ ---> ÆŠ³êœêÖÚ®µAXebv 2 ©ç 3 ðJèÔµÄ¶@
++     ðC³µÜµå€B
+ 
+ ---> ±±ÉÍÔáÁœeLXgª è
+      ±±ÉÍÔáÁœeLXgª èÜ·B
+@@ -145,7 +145,8 @@
+   !! NOTE: ÈºÌXebvðÀs·éOÉAÜžSÌðÇñÅ­Ÿ³¢!!
+ 
+   1. bX 1.2 ÅâÁœæ€É :q! ð^CvµÄA±Ì`
+[gAðI¹
+-     µÜ·B
++     µÜ·B é¢ÍAÊÌ[ª éêÍ»±ÅÈºÌàeðsÁÄà©Ü¢
++     Ü¹ñB
+ 
+   2. VFvvgÅ±ÌR}hð^CvµÜ·:  vim tutor <ENTER>
+      'vim'ª Vim GfB^ðN®·éR}hA'tutor' ÍÒWµœ¢t@CÌ
+@@ -155,7 +156,8 @@
+ 
+   4. ÏXðt@CÉÛ¶µÜ·:  :wq  <ENTER>
+ 
+-  5. vimtutor ðÄxN®µAÈºÌvñÖiÝÜµå€B
++  5. Xebv 1 Å vimtutuor ðI¹µœêÍ vimtutor ðÄxN®µAÈºÌ
++     vñÖiÝÜµå€B
+ 
+   6. ÈãÌXebvðÇñÅðµœãÅ±êðÀsµÜµå€B
+   
+@@ -215,7 +217,7 @@
+ 
+   2. ÈºÌ ---> ÆŠ³êœsÉJ[\ðÚ®µÜµå€B
+ 
+-  3. ³µ¢¶ÌöÖJ[\ðÚ®µÜµå€(ÅÌ . ÌãÅ·)B
++  3. ³µ¢¶ÌöÖJ[\ðÚ®µÜµå€(ÅÌ B ÌãÅ·)B
+ 
+   4. sÜÅí·éÌÉ d$ Æ^CvµÜµå€B
+ 
+@@ -232,7 +234,7 @@
+ 		     bX 2.3: Iy[^Æ[V
+ 
+ 
+-  œ­ÌR}hÍIy[^Æ[V©çeLXgÉÏXðÁÜ·B
++  œ­ÌR}hÍIy[^Æ[V©çeLXgÉÏXðÁŠÜ·B
+   íR}h d ÌIy[^ÍÌlÉÈÁÄ¢Ü·:
+ 
+   	d   [V
+@@ -259,13 +261,13 @@
+ 
+   1. ÈºÌ ---> ÆŠ³êœsÌæªÉJ[\ðÚ®µÜ·B
+ 
+-  2. 2dw ð^CvµÄPê2ÂªÚ®µÜ·B
++  2. 2w ð^CvµÄPê2ÂªOÉÚ®µÜ·B
+ 
+   3. 3e ð^CvµÄ3ÂÚÌPêÌI[ÉÚ®µÜ·B
+ 
+   4. 0 ([)ð^CvµÄsªÉÚ®µÜ·B
+ 
+-  5. Xebv 2 Æ 3 ðá€lÆgÁÄJèÔµÜ·B
++  5. Xebv 2 Æ 3 ðá€lðgÁÄJèÔµÜ·B
+ 
+ ---> This is just a line with words you can move around in.
+ 
+@@ -286,7 +288,7 @@
+ 
+   1. ---> ÆŠ³êœsÌsªªÉJ[\ðÚ®µÜµå€B
+ 
+-  2. UPPER CASE ÌPê2Âð 2dw Æ^CvµÄíµÜ·B
++  2. UPPER CASE ÌPê2Âð d2w Æ^CvµÄíµÜ·B
+ 
+   3. UPPER CASE Æ¢€A±µœPêðA1ÂÌR}hÆÙÈéJEgðwèµA
+      Xebv 1 Æ 2 ðJèÔµÜ·B
+@@ -326,8 +328,8 @@
+ 
+   ** ÅãÌR}hðæèÁ·ÉÍ u ðµÜ·BU ÍsSÌÌæÁÅ·B **
+ 
+-  1. ÈºÌ ---> ÆŠ³êœsÉJ[\ðÚ®µAÅÌÔá¢ÉJ[\
+-     ðÚ®µÜµå€B
++  1. ÈºÌ ---> ÆŠ³êœsÉJ[\ðÚ®µAÅÌÔá¢ÉJ[\
++     ðÚ®µÜµå€B
+   2. x ð^CvµÄ¢çÈ¢æªÌ¶ðíµÜµå€B
+   3. ³Au ð^CvµÄÅãÉÀsµœR}hðæèÁµÜµå€B
+   4. ¡xÍAx ðgpµÄëèðSÄC³µÜµå€B
+@@ -406,7 +408,7 @@
+ --->  ±ÌðlÍµœËA»ÌlÍôÂ©âáÁœL[ðµàµœ!
+ --->  ±ÌsðüÍµœÉA»ÌlÍôÂ©ÔáÁœL[ðµÜµœ!
+ 
+-  5. ³AbX 3.2 ÖiÝÜµå€B
++  5. ³AbX 3.3 ÖiÝÜµå€B
+ 
+ NOTE: ÀÛÉµÜµå€BµÄoŠéŸ¯ÉÍµÈ¢±ÆB
+ 
+@@ -428,8 +430,8 @@
+ 
+   5. ÅÌsªÌsÌlÉÈéÜÅXebv 3 Æ 4 ðJèÔµÜ·B
+ 
+----> This lubw has a few wptfd that mrrf changing usf the change command.
+----> This line has a few words that need changing using the change command.
++---> This lubw has a few wptfd that mrrf changing usf the change operator.
++---> This line has a few words that need changing using the change operator.
+ 
+ cw ÍPêðÏX·éŸ¯ÅÈ­A}üàsŠé±ÆÉÓµÜµå€B
+ 
+@@ -494,7 +496,7 @@
+      ÉsÔðoŠÄš«Üµå€B
+ 
+ NOTE:  æÊÌEº÷ÉJ[\ÌÊuª\Š³êÄ¢é©àµêÜ¹ñB±êÍ
+-       'ruler' IvV(bX6ÅàŸ)ðÝè·é±ÆÅ\Š³êÜ·B
++       'ruler' IvV(:help 'ruler' ðQÆ)ðÝè·é±ÆÅ\Š³êÜ·B
+ 
+   2. ÅºsÉÚ®·éœßÉ G ð^CvµÜµå€B
+      t@CÌæªÉÚ®·éÉÍ gg Æ^CvµÜµå€B
+@@ -523,8 +525,8 @@
+   5. ³ÌêÉßéÉÍ CTRL-O (Ctrl ðµ±¯Èªç o ¶^Cv)ð^Cvµ
+      Ü·B³çÉßéÉÍ±êðJèÔµÜ·BCTRL-I ÍOûüÅ·B
+ 
+-Note: "errroor" Í error ÆXyªá¢Ü·;  errroor Í¢íäé error Å·B
+-Note: õªt@CÌIíèÉB·éÆAIvV 'wrapscan' ªÝè³êÄ¢é
++--->  "errroor" Í error ÆXyªá¢Ü·;  errroor Í¢íäé error Å·B
++NOTE: õªt@CÌIíèÉB·éÆAIvV 'wrapscan' ªÝè³êÄ¢é
+       êÍAt@CÌæª©çõð±sµÜ·B
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -541,7 +543,7 @@
+ 
+   4. ÅÌÊÉÚ®·éÉÍ % Æ^CvµÜµå€B
+ 
+-  5. ŒÌ (,),[,],{ or } ÅJ[\ðÚ®µA% ªœðµÄ¢é©mFµÜµå€B
++  5. ŒÌ (,),[,],{ â } ÅJ[\ðÚ®µA% ªœðµÄ¢é©mFµÜµå€B
+ 
+ ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+ 
+@@ -612,10 +614,10 @@
+      VFvvgÌæ€ÉfBNgÌêª\Š³êéÍžÅ·B
+      àµ­Í ls ª®©È¢ÈçÎ :!dir ðgpµÜµå€B
+ 
+-Note:  ±Ìû@ÉæÁÄ çäéR}hªÀs·é±ÆªÅ«Ü·Bà¿ëñø
++NOTE:  ±Ìû@ÉæÁÄ çäéR}hªÀs·é±ÆªÅ«Ü·Bà¿ëñø
+        à^ŠçêÜ·B
+ 
+-Note:  SÄÌ : R}hÍ <ENTER> ðµÄI¹µÈ¯êÎÈèÜ¹ñB
++NOTE:  SÄÌ : R}hÍ <ENTER> ðµÄI¹µÈ¯êÎÈèÜ¹ñB
+        È~ÅÍ±Ì±ÆÉŸyµÜ¹ñB
+ 
+ 
+@@ -633,9 +635,9 @@
+   3. ÅÍ :w TEST Æ^CvµÜµå€ (TEST ÍAIñŸt@CŒÅ·)B
+ 
+   4. ±êÉæèt@CSÌª TEST Æ¢€ŒOÅÛ¶³êÜ·B
+-     à€êx :!dir àµ­Í !ls Æ^CvµÄmFµÄÝÜµå€B
++     à€êx :!dir àµ­Í :!ls Æ^CvµÄmFµÄÝÜµå€B
+ 
+-Note: ±±Å Vim ðI¹µAt@CŒ TEST Æ€ÉN®·éÆAÛ¶µœÌ
++NOTE: ±±Å Vim ðI¹µAt@CŒ TEST Æ€ÉN®·éÆAÛ¶µœÌ
+      `
+[gAÌ¡»ªÅ«ãªéÍžÅ·B
+ 
+   5. ³çÉAÌæ€É^CvµÄt@CðÁµÜµå€(MS-DOS):  :!del TEST
+@@ -655,8 +657,8 @@
+ 
+   3. ¶ : ð·ÆAæÊÌÅºÉ :'<,'> ª»êÜ·B
+ 
+-  4. w TEST (TESET Í¶ÝµÈ¢t@CŒ)ð^CvµÜ·B
+-     Enter ð·OÉ :'<,'>w TEST ÆÈÁÄ¢é±ÆðmFµÄº³¢B
++  4. w TEST (TEST Í¶ÝµÈ¢t@CŒ)ð^CvµÜ·B
++     <ENTER> ð·OÉ :'<,'>w TEST ÆÈÁÄ¢é±ÆðmFµÄº³¢B
+ 
+   5. Vim Í TEST Æ¢€t@CÉIð³êœsð«ÞÅµå€B
+      !dir àµ­Í !ls Å»êðmFµÜ·B
+@@ -747,7 +749,7 @@
+ 
+   3. J[\ÌãëÉeLXgðÇÁ·éœßÉ a (¬¶) ð^CvµÜ·B
+ 
+-  4. »ÌºÌsÌÌæ€ÈPêÉ®¬³¹Ü·B}ü[hð²¯é×É <ESC> É
++  4. »ÌºÌsÌæ€ÈPêÉ®¬³¹Ü·B}ü[hð²¯é×É <ESC> ð
+      µÜ·B
+ 
+   5. e ðgÁÄÌs®SÈPêÖÚ®µAXebv 3 Æ 4 ðJèÔµÜ·B
+@@ -755,7 +757,7 @@
+ ---> This li will allow you to pract appendi text to a line.
+ ---> This line will allow you to practice appending text to a line.
+ 
+-Note: a, i Æ A Í¯¶}ü[hÖÚèÜ·ªA¶ª}ü³êéÊuŸ¯ªÙÈè
++NOTE: a, i Æ A Í¯¶}ü[hÖÚèÜ·ªA¶ª}ü³êéÊuŸ¯ªÙÈè
+       Ü·B
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -772,7 +774,7 @@
+   3. u·[hð²¯éÉÍ <ESC> ðµÜ·BsÌcèªÏX³êÄ¢È¢ÜÜÉ
+      Èé±ÆÉÓµÄ­Ÿ³¢B
+ 
+-  5. cÁœ xxx ðXebvðJèÔµÄu·µÜµå€B
++  4. cÁœ xxx ðXebvðJèÔµÄu·µÜµå€B
+ 
+ ---> Adding 123 to xxx gives you xxx.
+ ---> Adding 123 to 456 gives you 579.
+@@ -803,7 +805,7 @@
+ --->  a) this is the first item.
+       b)
+ 
+-  Note: Pêð1Â yank ·éÌÉ y ðIy[^ÆµÄ yw Æ·é±ÆàoÜ·B
++  NOTE: Pêð1Â yank ·éÌÉ y ðIy[^ÆµÄ yw Æ·é±ÆàoÜ·B
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 		       bX 6.5: IvVÌÝè
+ 
+@@ -824,8 +826,8 @@
+ 
+   6. å¶¬¶ÌæÊð³øÉ·éÉÍÌlÉüÍµÜ·:  :set noic
+ 
+-Note: }b`Ì­²\ŠðâßéÉÍÌlÉüÍµÜ·: :nohlsearch
+-Note: 1ÂÌõR}hŸ¯å¶¬¶ÌæÊðâßœ¢ÈçÎAt[YÉ \c
++NOTE: }b`Ì­²\ŠðâßéÉÍÌlÉüÍµÜ·: :nohlsearch
++NOTE: 1ÂÌõR}hŸ¯å¶¬¶ÌæÊðâßœ¢ÈçÎAt[YÉ \c
+       ðgpµÜ·:  /ignore\c  <ENTER>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 				bX 6 vñ
+@@ -869,16 +871,16 @@
+   ":help" R}hÉøð^Šé±ÆÉæèA çäéèŒÌwvð©Â¯é±Æ
+   ªÅ«Ü·B±êçðµÄÝÜµå€(<ENTER> ð^CvµYêÈ¢æ€É):
+ 
+-  :help w
+-  :help c_<T
+-  :help insert-index
+-  :help user-manual
++	:help w
++	:help c_CTRL-D
++	:help insert-index
++	:help user-manual
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 		      bX 7.2: N®XNvgÌì¬
+ 
+ 			 ** Vim ÌÁ¥ð­ö·é **
+ 
+-  Vim ÉÍ Vi æèàœ­ÌÁ¥ð¥ÜŠÄ¢ÜªA»ÌÙÆñÇÍúóÔÉÄ
++  Vim ÉÍ Vi æèàœ­ÌÁ¥ð¥ÜŠÄ¢Ü·ªA»ÌÙÆñÇÍúóÔÉÄ
+   gpsÂÆÈÁÄ¢Ü·Bæèœ­ÌÁ¥ðg¢Í¶ßéÉÍ "vimrc" t@C
+   ðì¬µÜ·B
+ 
+@@ -947,7 +949,7 @@
+   ±êÉÄ Vim Ì`
+[gAðIíèÜ·BGfB^ðÈPÉAµ©à[ªÉ
+   g€±ÆªÅ«éæ€ÉÆAVim ÌÂTOÌv_ÌÝð`Šæ€ÆµÜµœB
+   Vim ÉÍ³çÉœ­ÌR}hª èA±±ÅSÄðàŸ·é±ÆÍÅ«Ü¹ñB
+-  È~Í[U}j
+AðQÆ­Ÿ³¢: "help :user-manual"
++  È~Í[U}j
+AðQÆ­Ÿ³¢: ":help user-manual"
+ 
+   ±êÈãÌwKÌœßÉAÌ{ðEµÜ·B
+ 	Vim - Vi Improved - by Steve Oualline
+diff -Naur vim73.orig/runtime/tutor/tutor.ja.utf-8 vim73/runtime/tutor/tutor.ja.utf-8
+--- vim73.orig/runtime/tutor/tutor.ja.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.ja.utf-8	2013-06-07 17:07:28.618926956 +0000
+@@ -38,10 +38,10 @@
+ 
+   3. äžãžã®ã­ãŒãäœ¿ã£ãŠãã¬ãã¹ã³1.2 ã«ç§»åããŸãããã
+ 
+-Note: äœãã¿ã€ãããŠãããå€ããªããªã£ããã<ESC>ãæŒããŠããŒãã«ã¢ãŒãã«ã
++NOTE: äœãã¿ã€ãããŠãããå€ããªããªã£ããã<ESC>ãæŒããŠããŒãã«ã¢ãŒãã«ã
+       ãŸããããããå
+¥åããããšããŠããã³ãã³ããåå
+¥åããŸãããã
+ 
+-Note: ã«ãŒãœã«ã­ãŒã§ãç§»åã§ããŸããããã hjkl ã«äžåºŠæ
+£ããŠããŸãã°ãã¯ãã
++NOTE: ã«ãŒãœã«ã­ãŒã§ãç§»åã§ããŸããããã hjkl ã«äžåºŠæ
+£ããŠããŸãã°ãã¯ãã
+       ã«éãç§»åããããšãã§ããã§ããããããããžã§!
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -109,7 +109,7 @@
+ ---> ãã® ã«ã¯ è¶³ããªã ãã­ã¹ã ããã
+ ---> ãã® è¡ ã«ã¯ å¹Ÿã€ã è¶³ããªã ãã­ã¹ã ã ããã
+ 
+-  5. æ¿å
+¥ã®æ¹æ³ãããã£ããäžã®ã¬ãã¹ã³1ã®èŠçŽãèŠãŸãããã
++  5. æ¿å
+¥ã®æ¹æ³ãããã£ããã¬ãã¹ã³ 1.5 ãžé²ã¿ãŸãããã
+ 
+ 
+ 
+@@ -117,7 +117,7 @@
+ 		     ã¬ãã¹ã³ 1.5: ãã­ã¹ãç·šé - è¿œå 
+ 
+ 
+-		 ** ãã­ã¹ãè¿œå ããã«ã¯ A ãæŒããŸããã **
++		 ** ãã­ã¹ããè¿œå ããã«ã¯ A ãæŒããŸããã **
+ 
+   1. ä»¥äžã® ---> ãšç€ºãããæåã®è¡ã«ã«ãŒãœã«ãç§»åããŸãããã
+      ã«ãŒãœã«ããã®æå­äžã«ãã£ãŠãããŸããŸããã
+@@ -126,8 +126,8 @@
+ 
+   3. ãã­ã¹ããè¿œå ãçµãããã <ESC> ãæŒããŠããŒãã«ã¢ãŒãã«æ»ããŸãããã
+ 
+-  4. 2è¡ç®ã® ---> ãšç€ºãããå Žæãžç§»åããã¹ããã 2 ãã 3 ç¹°ãè¿ããŠææ³ã
+-     ä¿®æ­£ããŸãããã
++  4. 2è¡ç®ã® ---> ãšç€ºãããå Žæãžç§»åããã¹ããã 2 ãã 3 ãç¹°ãè¿ããŠææ³
++     ãä¿®æ­£ããŸãããã
+ 
+ ---> ããã«ã¯ééã£ããã­ã¹ãããã
+      ããã«ã¯ééã£ããã­ã¹ãããããŸãã
+@@ -145,7 +145,8 @@
+   !! NOTE: ä»¥äžã®ã¹ããããå®è¡ããåã«ããŸãå
+šäœãèª­ãã§ãã ãã!!
+ 
+   1. ã¬ãã¹ã³ 1.2 ã§ãã£ãããã« :q! ãã¿ã€ãããŠããã®ãã¥ãŒããªã¢ã«ãçµäº
+-     ããŸãã
++     ããŸãããããã¯ãå¥ã®ç«¯æ«ãããå Žåã¯ããã§ä»¥äžã®å
+å®¹ãè¡ã£ãŠãããŸã
++     ãŸããã
+ 
+   2. ã·ã§ã«ãã­ã³ããã§ãã®ã³ãã³ããã¿ã€ãããŸã:  vim tutor <ENTER>
+      'vim'ã Vim ãšãã£ã¿ãèµ·åããã³ãã³ãã'tutor' ã¯ç·šéããããã¡ã€ã«ã®
+@@ -155,7 +156,8 @@
+ 
+   4. å€æŽããã¡ã€ã«ã«ä¿å­ããŸã:  :wq  <ENTER>
+ 
+-  5. vimtutor ãååºŠèµ·åããä»¥äžã®èŠçŽãžé²ã¿ãŸãããã
++  5. ã¹ããã 1 ã§ vimtutuor ãçµäºããå Žåã¯ vimtutor ãååºŠèµ·åããä»¥äžã®
++     èŠçŽãžé²ã¿ãŸãããã
+ 
+   6. ä»¥äžã®ã¹ããããèª­ãã§çè§£ããäžã§ãããå®è¡ããŸãããã
+   
+@@ -215,7 +217,7 @@
+ 
+   2. ä»¥äžã® ---> ãšç€ºãããè¡ã«ã«ãŒãœã«ãç§»åããŸãããã
+ 
+-  3. æ­£ããæã®æ«å°Ÿãžã«ãŒãœã«ãç§»åããŸããã(æåã® . ã®åŸã§ã)ã
++  3. æ­£ããæã®æ«å°Ÿãžã«ãŒãœã«ãç§»åããŸããã(æåã® ã ã®åŸã§ã)ã
+ 
+   4. è¡æ«ãŸã§åé€ããã®ã« d$ ãšã¿ã€ãããŸãããã
+ 
+@@ -232,7 +234,7 @@
+ 		     ã¬ãã¹ã³ 2.3: ãªãã¬ãŒã¿ãšã¢ãŒã·ã§ã³
+ 
+ 
+-  å€ãã®ã³ãã³ãã¯ãªãã¬ãŒã¿ãšã¢ãŒã·ã§ã³ãããã­ã¹ãã«å€æŽãå ãŸãã
++  å€ãã®ã³ãã³ãã¯ãªãã¬ãŒã¿ãšã¢ãŒã·ã§ã³ãããã­ã¹ãã«å€æŽãå ããŸãã
+   åé€ã³ãã³ã d ã®ãªãã¬ãŒã¿ã¯æ¬¡ã®æ§ã«ãªã£ãŠããŸã:
+ 
+   	d   ã¢ãŒã·ã§ã³
+@@ -259,13 +261,13 @@
+ 
+   1. ä»¥äžã® ---> ãšç€ºãããè¡ã®å
+é ­ã«ã«ãŒãœã«ãç§»åããŸãã
+ 
+-  2. 2dw ãã¿ã€ãããŠåèª2ã€åç§»åããŸãã
++  2. 2w ãã¿ã€ãããŠåèª2ã€ååã«ç§»åããŸãã
+ 
+   3. 3e ãã¿ã€ãããŠ3ã€ç®ã®åèªã®çµç«¯ã«ç§»åããŸãã
+ 
+   4. 0 (ãŒã­)ãã¿ã€ãããŠè¡é ­ã«ç§»åããŸãã
+ 
+-  5. ã¹ããã 2 ãš 3 ãéãæ°å€ãšäœ¿ã£ãŠç¹°ãè¿ããŸãã
++  5. ã¹ããã 2 ãš 3 ãéãæ°å€ãäœ¿ã£ãŠç¹°ãè¿ããŸãã
+ 
+ ---> This is just a line with words you can move around in.
+ 
+@@ -286,7 +288,7 @@
+ 
+   1. ---> ãšç€ºãããè¡ã®è¡é ­éšåã«ã«ãŒãœã«ãç§»åããŸãããã
+ 
+-  2. UPPER CASE ã®åèª2ã€ã 2dw ãšã¿ã€ãããŠåé€ããŸãã
++  2. UPPER CASE ã®åèª2ã€ã d2w ãšã¿ã€ãããŠåé€ããŸãã
+ 
+   3. UPPER CASE ãšããé£ç¶ããåèªãã1ã€ã®ã³ãã³ããšç°ãªãã«ãŠã³ããæå®ãã
+      ã¹ããã 1 ãš 2 ãç¹°ãè¿ããŸãã
+@@ -326,8 +328,8 @@
+ 
+   ** æåŸã®ã³ãã³ããåãæ¶ãã«ã¯ u ãæŒããŸããU ã¯è¡å
+šäœã®åæ¶ã§ãã **
+ 
+-  1. ä»¥äžã® ---> ãšç€ºãããè¡ã«ã«ãŒãœã«ãç§»åããæåã®ééãã«ã«ãŒãœ
+-     ã«ãç§»åããŸãããã
++  1. ä»¥äžã® ---> ãšç€ºãããè¡ã«ã«ãŒãœã«ãç§»åããæåã®ééãã«ã«ãŒãœã«
++     ãç§»åããŸãããã
+   2. x ãã¿ã€ãããŠãããªãå
+é ­ã®æå­ãåé€ããŸãããã
+   3. ãããu ãã¿ã€ãããŠæåŸã«å®è¡ããã³ãã³ããåãæ¶ããŸãããã
+   4. ä»åºŠã¯ãx ãäœ¿çšããŠèª€ããå
+šãŠä¿®æ­£ããŸãããã
+@@ -406,7 +408,7 @@
+ --->  ãã®åãäººåããæã­ããã®äººã¯å¹Ÿã€ãåéã£ãã­ãŒãæŒãããã!
+ --->  ãã®è¡ãå
+¥åããæã«ããã®äººã¯å¹Ÿã€ãééã£ãã­ãŒãæŒããŸãã!
+ 
+-  5. ãããã¬ãã¹ã³ 3.2 ãžé²ã¿ãŸãããã
++  5. ãããã¬ãã¹ã³ 3.3 ãžé²ã¿ãŸãããã
+ 
+ NOTE: å®éã«è©ŠããŸããããæ±ºããŠèŠããã ãã«ã¯ããªãããšã
+ 
+@@ -428,8 +430,8 @@
+ 
+   5. æåã®è¡ãæ¬¡ã®è¡ã®æ§ã«ãªããŸã§ã¹ããã 3 ãš 4 ãç¹°ãè¿ããŸãã
+ 
+----> This lubw has a few wptfd that mrrf changing usf the change command.
+----> This line has a few words that need changing using the change command.
++---> This lubw has a few wptfd that mrrf changing usf the change operator.
++---> This line has a few words that need changing using the change operator.
+ 
+ cw ã¯åèªãå€æŽããã ãã§ãªããæ¿å
+¥ãè¡ããããšã«æ³šæããŸãããã
+ 
+@@ -494,7 +496,7 @@
+      ã«è¡çªå·ãèŠããŠãããŸãããã
+ 
+ NOTE:  ç»é¢ã®å³äžé
+ã«ã«ãŒãœã«ã®äœçœ®ãè¡šç€ºãããŠãããããããŸãããããã¯
+-       'ruler' ãªãã·ã§ã³(ã¬ãã¹ã³6ã§èª¬æ)ãèš­å®ããããšã§è¡šç€ºãããŸãã
++       'ruler' ãªãã·ã§ã³(:help 'ruler' ãåç
+§)ãèš­å®ããããšã§è¡šç€ºãããŸãã
+ 
+   2. æäžè¡ã«ç§»åããããã« G ãã¿ã€ãããŸãããã
+      ãã¡ã€ã«ã®å
+é ­ã«ç§»åããã«ã¯ gg ãšã¿ã€ãããŸãããã
+@@ -523,8 +525,8 @@
+   5. å
+ã®å Žæã«æ»ãã«ã¯ CTRL-O (Ctrl ãæŒãç¶ããªãã o æå­ã¿ã€ã)ãã¿ã€ãã
+      ãŸããããã«æ»ãã«ã¯ãããç¹°ãè¿ããŸããCTRL-I ã¯åæ¹åã§ãã
+ 
+-Note: "errroor" ã¯ error ãšã¹ãã«ãéããŸã;  errroor ã¯ãããã error ã§ãã
+-Note: æ€çŽ¢ããã¡ã€ã«ã®çµããã«éãããšããªãã·ã§ã³ 'wrapscan' ãèš­å®ãããŠãã
++--->  "errroor" ã¯ error ãšã¹ãã«ãéããŸã;  errroor ã¯ãããã error ã§ãã
++NOTE: æ€çŽ¢ããã¡ã€ã«ã®çµããã«éãããšããªãã·ã§ã³ 'wrapscan' ãèš­å®ãããŠãã
+       å Žåã¯ããã¡ã€ã«ã®å
+é ­ããæ€çŽ¢ãç¶è¡ããŸãã
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -541,7 +543,7 @@
+ 
+   4. æåã®æ¬åŒ§ã«ç§»åããã«ã¯ % ãšã¿ã€ãããŸãããã
+ 
+-  5. ä»ã® (,),[,],{ or } ã§ã«ãŒãœã«ãç§»åãã% ãäœãããŠãããç¢ºèªããŸãããã
++  5. ä»ã® (,),[,],{ ã } ã§ã«ãŒãœã«ãç§»åãã% ãäœãããŠãããç¢ºèªããŸãããã
+ 
+ ---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+ 
+@@ -612,10 +614,10 @@
+      ã·ã§ã«ãã­ã³ããã®ããã«ãã£ã¬ã¯ããªã®äžèŠ§ãè¡šç€ºãããã¯ãã§ãã
+      ãããã¯ ls ãåããªããªãã° :!dir ãäœ¿çšããŸãããã
+ 
+-Note:  ãã®æ¹æ³ã«ãã£ãŠããããã³ãã³ããå®è¡ããããšãã§ããŸãããã¡ããåŒæ°
++NOTE:  ãã®æ¹æ³ã«ãã£ãŠããããã³ãã³ããå®è¡ããããšãã§ããŸãããã¡ããåŒæ°
+        ãäžããããŸãã
+ 
+-Note:  å
+šãŠã® : ã³ãã³ãã¯ <ENTER> ãæŒããŠçµäºããªããã°ãªããŸããã
++NOTE:  å
+šãŠã® : ã³ãã³ãã¯ <ENTER> ãæŒããŠçµäºããªããã°ãªããŸããã
+        ä»¥éã§ã¯ãã®ããšã«èšåããŸããã
+ 
+ 
+@@ -633,9 +635,9 @@
+   3. ã§ã¯ :w TEST ãšã¿ã€ãããŸããã (TEST ã¯ãéžãã ãã¡ã€ã«åã§ã)ã
+ 
+   4. ããã«ãããã¡ã€ã«å
+šäœã TEST ãšããååã§ä¿å­ãããŸãã
+-     ããäžåºŠ :!dir ãããã¯ !ls ãšã¿ã€ãããŠç¢ºèªããŠã¿ãŸãããã
++     ããäžåºŠ :!dir ãããã¯ :!ls ãšã¿ã€ãããŠç¢ºèªããŠã¿ãŸãããã
+ 
+-Note: ããã§ Vim ãçµäºãããã¡ã€ã«å TEST ãšå
+±ã«èµ·åãããšãä¿å­ããæã®
++NOTE: ããã§ Vim ãçµäºãããã¡ã€ã«å TEST ãšå
+±ã«èµ·åãããšãä¿å­ããæã®
+      ãã¥ãŒããªã¢ã«ã®è€è£œãã§ãäžããã¯ãã§ãã
+ 
+   5. ããã«ãæ¬¡ã®ããã«ã¿ã€ãããŠãã¡ã€ã«ãæ¶ããŸããã(MS-DOS):  :!del TEST
+@@ -655,8 +657,8 @@
+ 
+   3. æå­ : ãæŒããšãç»é¢ã®æäžéšã« :'<,'> ãçŸããŸãã
+ 
+-  4. w TEST (TESET ã¯å­åšããªããã¡ã€ã«å)ãã¿ã€ãããŸãã
+-     Enter ãæŒãåã« :'<,'>w TEST ãšãªã£ãŠããããšãç¢ºèªããŠäžããã
++  4. w TEST (TEST ã¯å­åšããªããã¡ã€ã«å)ãã¿ã€ãããŸãã
++     <ENTER> ãæŒãåã« :'<,'>w TEST ãšãªã£ãŠããããšãç¢ºèªããŠäžããã
+ 
+   5. Vim ã¯ TEST ãšãããã¡ã€ã«ã«éžæãããè¡ãæžãèŸŒãã§ãããã
+      !dir ãããã¯ !ls ã§ãããç¢ºèªããŸãã
+@@ -747,7 +749,7 @@
+ 
+   3. ã«ãŒãœã«ã®åŸãã«ãã­ã¹ããè¿œå ããããã« a (å°æå­) ãã¿ã€ãããŸãã
+ 
+-  4. ãã®äžã®è¡ã®ã®ãããªåèªã«å®æãããŸããæ¿å
+¥ã¢ãŒããæããçºã« <ESC> ã«æŒ
++  4. ãã®äžã®è¡ã®ãããªåèªã«å®æãããŸããæ¿å
+¥ã¢ãŒããæããçºã« <ESC> ãæŒ
+      ããŸãã
+ 
+   5. e ãäœ¿ã£ãŠæ¬¡ã®äžå®å
+šãªåèªãžç§»åããã¹ããã 3 ãš 4 ãç¹°ãè¿ããŸãã
+@@ -755,7 +757,7 @@
+ ---> This li will allow you to pract appendi text to a line.
+ ---> This line will allow you to practice appending text to a line.
+ 
+-Note: a, i ãš A ã¯åãæ¿å
+¥ã¢ãŒããžç§»ããŸãããæå­ãæ¿å
+¥ãããäœçœ®ã ããç°ãªã
++NOTE: a, i ãš A ã¯åãæ¿å
+¥ã¢ãŒããžç§»ããŸãããæå­ãæ¿å
+¥ãããäœçœ®ã ããç°ãªã
+       ãŸãã
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+@@ -772,7 +774,7 @@
+   3. çœ®æã¢ãŒããæããã«ã¯ <ESC> ãæŒããŸããè¡ã®æ®ããå€æŽãããŠããªããŸãŸã«
+      ãªãããšã«æ³šæããŠãã ããã
+ 
+-  5. æ®ã£ã xxx ãã¹ããããç¹°ãè¿ããŠçœ®æããŸãããã
++  4. æ®ã£ã xxx ãã¹ããããç¹°ãè¿ããŠçœ®æããŸãããã
+ 
+ ---> Adding 123 to xxx gives you xxx.
+ ---> Adding 123 to 456 gives you 579.
+@@ -803,7 +805,7 @@
+ --->  a) this is the first item.
+       b)
+ 
+-  Note: åèªã1ã€ yank ããã®ã« y ããªãã¬ãŒã¿ãšããŠ yw ãšããããšãåºæ¥ãŸãã
++  NOTE: åèªã1ã€ yank ããã®ã« y ããªãã¬ãŒã¿ãšããŠ yw ãšããããšãåºæ¥ãŸãã
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 		       ã¬ãã¹ã³ 6.5: ãªãã·ã§ã³ã®èš­å®
+ 
+@@ -824,8 +826,8 @@
+ 
+   6. å€§æå­å°æå­ã®åºå¥ãç¡å¹ã«ããã«ã¯æ¬¡ã®æ§ã«å
+¥åããŸã:  :set noic
+ 
+-Note: ãããã®åŒ·èª¿è¡šç€ºããããã«ã¯æ¬¡ã®æ§ã«å
+¥åããŸã: :nohlsearch
+-Note: 1ã€ã®æ€çŽ¢ã³ãã³ãã ãå€§æå­å°æå­ã®åºå¥ããããããªãã°ããã¬ãŒãºã« \c
++NOTE: ãããã®åŒ·èª¿è¡šç€ºããããã«ã¯æ¬¡ã®æ§ã«å
+¥åããŸã: :nohlsearch
++NOTE: 1ã€ã®æ€çŽ¢ã³ãã³ãã ãå€§æå­å°æå­ã®åºå¥ããããããªãã°ããã¬ãŒãºã« \c
+       ãäœ¿çšããŸã:  /ignore\c  <ENTER>
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 				ã¬ãã¹ã³ 6 èŠçŽ
+@@ -869,16 +871,16 @@
+   ":help" ã³ãã³ãã«åŒæ°ãäžããããšã«ãããããããé¡åã®ãã«ããèŠã€ããããš
+   ãã§ããŸããããããè©ŠããŠã¿ãŸããã(<ENTER> ãã¿ã€ããå¿ããªãããã«):
+ 
+-  :help w
+-  :help c_<T
+-  :help insert-index
+-  :help user-manual
++	:help w
++	:help c_CTRL-D
++	:help insert-index
++	:help user-manual
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 		      ã¬ãã¹ã³ 7.2: èµ·åã¹ã¯ãªããã®äœæ
+ 
+ 			 ** Vim ã®ç¹åŸŽãçºæ®ãã **
+ 
+-  Vim ã«ã¯ Vi ãããå€ãã®ç¹åŸŽãèžãŸããŠããŸãããã®ã»ãšãã©ã¯åæç¶æ
+ã«ãŠ
++  Vim ã«ã¯ Vi ãããå€ãã®ç¹åŸŽãèžãŸããŠããŸããããã®ã»ãšãã©ã¯åæç¶æ
+ã«ãŠ
+   äœ¿çšäžå¯ãšãªã£ãŠããŸããããå€ãã®ç¹åŸŽãäœ¿ãã¯ãããã«ã¯ "vimrc" ãã¡ã€ã«
+   ãäœæããŸãã
+ 
+@@ -947,7 +949,7 @@
+   ããã«ãŠ Vim ã®ãã¥ãŒããªã¢ã«ãçµãããŸãããšãã£ã¿ãç°¡åã«ããããå
+
+åã«
+   äœ¿ãããšãã§ããããã«ãšãVim ã®æã€æŠå¿µã®èŠç¹ã®ã¿ãäŒããããšããŸããã
+   Vim ã«ã¯ããã«å€ãã®ã³ãã³ãããããããã§å
+šãŠãèª¬æããããšã¯ã§ããŸããã
+-  ä»¥éã¯ãŠãŒã¶ããã¥ã¢ã«ãåç
+§ãã ãã: "help :user-manual"
++  ä»¥éã¯ãŠãŒã¶ããã¥ã¢ã«ãåç
+§ãã ãã: ":help user-manual"
+ 
+   ããä»¥åŸã®å­Šç¿ã®ããã«ãæ¬¡ã®æ¬ãæšèŠããŸãã
+ 	Vim - Vi Improved - by Steve Oualline
+diff -Naur vim73.orig/runtime/tutor/tutor.ko.euc vim73/runtime/tutor/tutor.ko.euc
+--- vim73.orig/runtime/tutor/tutor.ko.euc	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.ko.euc	2013-06-07 17:07:28.638926899 +0000
+@@ -551,7 +551,7 @@
+ 
+         ** ÆÄÀÏÀÇ ÀÏºÎžŠ ÀúÀåÇÏ·Ážé,  :#,# w FILENAME  ÇÏœÊœÃ¿À. **
+ 
+-  1. ŽÙœÃ ÇÑ¹ø,  :!dir  ÀÌ³ª  !ls žŠ ÀÔ·ÂÇÏ¿© µð·ºÅäž®ÀÇ žñ·ÏÀ» ¹ÞŸÆ¿Â ÈÄ
++  1. ŽÙœÃ ÇÑ¹ø,  :!dir  ÀÌ³ª  :!ls žŠ ÀÔ·ÂÇÏ¿© µð·ºÅäž®ÀÇ žñ·ÏÀ» ¹ÞŸÆ¿Â ÈÄ
+      TEST °°Àº ÀûÇÕÇÑ ÀÌž§À» Œ±ÅÃÇÕŽÏŽÙ.
+ 
+   2. Ä¿Œ­žŠ ÀÌ ÆäÀÌÁöÀÇ Ã³ÀœÀž·Î ¿Å±ä ÈÄ, Ctrl-g žŠ ÀÔ·ÂÇÏ¿© ±× ÁÙÀÇ ÁÙ¹øÈ£žŠ
+diff -Naur vim73.orig/runtime/tutor/tutor.ko.utf-8 vim73/runtime/tutor/tutor.ko.utf-8
+--- vim73.orig/runtime/tutor/tutor.ko.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.ko.utf-8	2013-06-07 17:07:28.652260194 +0000
+@@ -551,7 +551,7 @@
+ 
+         ** íìŒì ìŒë¶ë¥Œ ì ì¥íë €ë©Ž,  :#,# w FILENAME  íì­ìì€. **
+ 
+-  1. ë€ì íë²,  :!dir  ìŽë  !ls ë¥Œ ì
+ë ¥íì¬ ëë í ëŠ¬ì ëª©ë¡ì ë°ììš í
++  1. ë€ì íë²,  :!dir  ìŽë  :!ls ë¥Œ ì
+ë ¥íì¬ ëë í ëŠ¬ì ëª©ë¡ì ë°ììš í
+      TEST ê°ì ì í©í ìŽëŠì ì íí©ëë€.
+ 
+   2. ì»€ìë¥Œ ìŽ íìŽì§ì ì²ììŒë¡ ì®êžŽ í, Ctrl-g ë¥Œ ì
+ë ¥íì¬ ê·ž ì€ì ì€ë²ížë¥Œ
+diff -Naur vim73.orig/runtime/tutor/tutor.nb vim73/runtime/tutor/tutor.nb
+--- vim73.orig/runtime/tutor/tutor.nb	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.nb	2013-06-07 17:07:28.675593461 +0000
+@@ -658,7 +658,7 @@
+   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
+      at du ser	:'<,'>w TEST  før du trykker Enter.
+ 
+-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
++  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
+      for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
+ 
+ MERK: Ved å trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
+diff -Naur vim73.orig/runtime/tutor/tutor.nb.utf-8 vim73/runtime/tutor/tutor.nb.utf-8
+--- vim73.orig/runtime/tutor/tutor.nb.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.nb.utf-8	2013-06-07 17:07:28.688926756 +0000
+@@ -658,7 +658,7 @@
+   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
+      at du ser	:'<,'>w TEST  fÃžr du trykker Enter.
+ 
+-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
++  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
+      for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
+ 
+ MERK: Ved Ã¥ trykke  v  startes visuelt valg. Du kan flytte markÃžren rundt for
+diff -Naur vim73.orig/runtime/tutor/tutor.nl vim73/runtime/tutor/tutor.nl
+--- vim73.orig/runtime/tutor/tutor.nl	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/tutor/tutor.nl	2013-06-07 17:07:28.718926670 +0000
+@@ -0,0 +1,950 @@
++  ==========================================================================
++  =    W e l k o m   b i j   d e   V I M   l e s s e n   -   Versie 1.7    =
++  ==========================================================================
++
++  Vim is een krachtige editor met veel commando's, te veel om uit te leggen
++  in lessen zoals deze. Deze lessen zijn bedoeld om voldoende commando's te
++  behandelen om je in staat te stellen met Vim te werken als een editor voor
++  algemeen gebruik.
++
++  Deze lessen zullen 25 tot 30 minuten in beslag nemen, afhankelijk van de
++  tijd die wordt besteed aan het uitproberen van de commando's.
++
++  LET OP:
++  Door de commando's in deze lessen verandert de tekst. Maak een kopie van
++  dit bestand om mee te oefenen (als je "vimtutor" uitvoerde, is dit al een
++  kopie).
++
++  Deze lessen zijn bedoeld om al doende te leren. Dat betekent dat je de
++  commando's moet uitvoeren om ze goed te leren kennen. Als je de tekst
++  alleen maar doorleest, zal je de commando's niet leren!
++
++  Zorg ervoor dat de <Caps Lock> toets NIET is ingedrukt en druk vaak genoeg
++  op de j-toets om de cursor zo te bewegen dat les 1.1 volledig op het
++  scherm staat.
++
++  LET OP: In deze lessen worden omwille van de duidelijkheid vaak spaties
++  gebruikt binnen een commando (bv. "40 G" of "operator [getal] beweging").
++  Tik deze spaties echter NIET. Ze verstoren de werking.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.1:  VERPLAATS DE CURSOR
++
++  ** De cursor wordt verplaatst met de toetsen h, j, k, l zoals aangegeven. **
++          ^
++          k       Hint:  De h is de meest linkse en beweegt naar links.
++      < h   l >          De l is de meest rechtse en beweegt naar rechts.
++          j              De j lijkt op een pijl naar beneden.
++          v
++
++  1. Beweeg de cursor over het scherm om er vertrouwd mee te raken.
++
++  2. Druk de omlaag-toets (j) tot hij repeteert.
++     Nu weet je hoe je de volgende les bereikt.
++
++  3. Gebruik de omlaag-toets om naar les 1.2 te gaan.
++
++  OPMERKING: Als je twijfelt aan wat je tikte, druk <ESC> om in de opdracht-
++             modus te komen. Tik daarna het commando dat bedoeld wordt.
++
++  OPMERKING: Pijltjes-toetsen werken ook. Met de hjkl-toetsen kan je sneller
++             rondbewegen, als je er eenmaal aan gewend bent. Echt waar!
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.2: VIM AFSLUITEN
++
++      !! LET OP: Lees deze les goed door voordat je iets uitvoert!!
++
++  1. Druk de <ESC> toets (om zeker in de opdrachtmodus te zitten).
++
++  2. Tik   :q! <ENTER>
++     Hiermee wordt de editor afgesloten. Alle veranderingen gaan VERLOREN.
++
++  3. Nu zie je de shell-prompt. Tik het commando waarmee je deze lessen
++     hebt opgeroepen. Dat is normaal gesproken:  vimtutor <ENTER>
++
++  4. Als je deze stappen goed hebt doorgelezen, voer dan de stappen 1 tot 3
++     uit om de editor te verlaten en weer op te starten.
++
++  LET OP: :q! <ENTER> verwerpt alle veranderingen die je aanbracht. Een paar
++          lessen verder zal je leren hoe veranderingen worden opgeslagen in
++          een bestand.
++
++  5. Beweeg de cursor omlaag naar les 1.3.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.3: TEKST BEWERKEN - WISSEN
++
++          ** Tik  x  om het teken onder de cursor te wissen. **
++
++  1. Ga met de cursor naar de regel verderop met --->.
++
++  2. Zet de cursor op een teken dat moet worden gewist om een fout te
++     herstellen.
++
++  3. Tik  x  om het ongewenste teken te wissen.
++
++  4. Herhaal deze stappen tot de regel goed is.
++
++  ---> Vi kkent eenn opdracccchtmodus en een invooegmmmmodus.
++
++  5. Nu de regel gecorrigeerd is kan je naar les 1.4 gaan.
++
++  LET OP: Probeer de lessen niet uit je hoofd te leren. Leer al doende.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.4: TEKST BEWERKEN - INVOEGEN
++
++              ** Tik  i  ('insert') om tekst in te voegen. **
++
++  1. Ga met de cursor naar de eerste regel verderop met --->.
++
++  2. Maak de eerste regel gelijk aan de tweede. Zet daarvoor de cursor op
++     de plaats waar tekst moet worden ingevoegd.
++
++  3. Tik  i  en daarna de nodige aanvullingen.
++
++  4. Tik <ESC> na elke herstelde fout om terug te keren in de opdrachtmodus.
++     Herhaal de stappen 2 tot 4 om de zin te verbeteren.
++
++  ---> Aan regel ontekt wat .
++  ---> Aan deze regel ontbreekt wat tekst.
++
++  5. Ga naar les 1.5 als je gewend bent aan het invoegen van tekst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.5: TEKST BEWERKEN - TOEVOEGEN
++
++             ** Tik  A  ('append') om tekst toe te voegen. **
++
++  1. Ga met de cursor naar de eerste regel verderop met --->.
++     Het maakt niet uit waar de cursor in deze regel staat.
++
++  2. Tik hoofdletter  A  en tik de nodige aanvullingen.
++
++  3. Tik <ESC> nadat de tekst is aangevuld. Zo keer je terug in de
++     opdrachtmodus.
++
++  4. Ga naar de tweede regel verderop met ---> en herhaal stap 2 en 3
++     om deze zin te corrigeren.
++
++  ---> Er ontbreekt wat tekst aan de
++       Er ontbreekt wat tekst aan deze regel.
++  ---> Hier ontbreekt ook w
++       Hier ontbreekt ook wat tekst.
++
++  5. Ga naar les 1.6 als je vertrouwd bent geraakt aan het toevoegen
++     van tekst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.6: EEN BESTAND EDITTEN
++
++    ** Gebruik  :wq  om een bestand op te slaan en de editor te verlaten. **
++
++  !! LET OP: Lees deze les helemaal door voordat je een van de volgende
++             stappen uitvoert!!
++
++  1. Verlaat deze les zoals je in les 1.2 deed:  :q!
++     Of gebruik een andere terminal als je daar de beschikking over hebt. Doe
++     daar het volgende.
++
++  2. Tik het volgende commando na de shell-prompt:  vim les <ENTER>
++     'vim' (vaak ook 'vi') is het commando om de Vim-editor te starten,
++     'les' is de naam van het bestand, dat je gaat bewerken. Kies een andere
++     naam als er al een bestand 'les' bestaat, dat niet veranderd mag worden.
++
++  3. Voeg naar eigen keus tekst toe, zoals je geleerd hebt in eerdere lessen.
++
++  4. Sla het bestand met de wijzigingen op en verlaat Vim met  :wq <ENTER>
++
++  5. Herstart vimtutor als je deze bij stap 1 hebt verlaten en ga verder met
++     de volgende samenvatting.
++
++  6. Voer deze stappen uit nadat je ze hebt gelezen en begrepen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 1
++
++  1. De cursor wordt bewogen met de pijltjestoetsen of de hjkl-toetsen.
++       h (links)   j (omlaag)  k (omhoog)  l (rechts)
++
++  2. Start Vim van de shell-prompt. Tik:  vim BESTANDSNAAM <ENTER>
++
++  3. Sluit Vim af met  <ESC> :q! <ENTER>  om de veranderingen weg te gooien.
++               OF tik  <ESC> :wq <ENTER>  om de veranderingen te bewaren.
++
++  4. Wis het teken onder de cursor met:  x
++
++  5. Invoegen of toevoegen van tekst, tik:
++     i  en daarna de in te voegen tekst  <ESC>   voeg in vanaf de cursor
++     A  en daarna de toe te voegen tekst  <ESC>  voeg toe achter de regel
++
++  OPMERKING: Met <ESC> kom je terug in opdrachtmodus en wordt een ongewenst
++             of gedeeltelijk uitgevoerd commando afgebroken.
++
++  Ga nu verder met les 2.1.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.1: WIS-COMMANDO'S
++
++       ** Tik  dw  ('delete word') om een woord te wissen. **
++
++  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
++
++  2. Ga naar de regel hieronder, die met ---> begint.
++
++  3. Ga met de cursor naar het begin van een woord dat moet worden gewist.
++
++  4. Met het tikken van  dw  verdwijnt het woord.
++
++  OPMERKING: De letter  d  verschijnt op de laatste regel van het scherm
++             zodra je hem tikt. Vim is aan het wachten tot je de  w  tikt.
++             Als je een ander teken dan  d  ziet, heb je iets verkeerds
++             getikt. Druk op <ESC> en begin opnieuw.
++
++  NOG EEN OPMERKING: Dit werkt alleen als de optie 'showcmd' is ingeschakeld.
++                     Dat gebeurt met  :set showcmd <ENTER>
++
++  ---> Er zijn een het paar ggg woorden, die niet in deze len zin thuishoren.
++
++  5. Herhaal de stappen 3 en 4 tot de zin goed is en ga naar les 2.2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.2: MEER WIS-COMMANDO'S
++
++        ** Tik  d$  om te wissen tot het einde van de regel. **
++
++  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
++
++  2. Ga naar de regel hieronder, die met ---> begint.
++
++  3. Ga met de cursor naar het einde van de correcte regel (NA de eerste  . ).
++
++  4. Tik  d$  om te wissen tot het einde van de regel.
++
++  ---> Iemand heeft het einde van deze regel dubbel getikt. dubbel getikt.
++
++  5. Ga naar les 2.3 voor uitleg.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.3: OVER OPERATOREN EN BEWEGINGEN
++
++  Veel commando's die de tekst veranderen, bestaan uit een operator en een
++  beweging. De samenstelling van een wis-commando met de operator  d  is:
++    d  beweging
++
++  Daarbij is:
++    d        - de wis-operator
++    beweging - het bereik waarop de operator werkt (zie het lijstje hieronder)
++
++  Een korte lijst van bewegingen vanaf de cursor:
++    w - tot het begin van het volgende woord, ZONDER het eerste teken daarvan.
++    e - tot het einde van het huidige woord, INCLUSIEF het laatste teken.
++    $ - tot het einde van de regel, INCLUSIEF het laatste teken.
++
++  Het tikken van  de  wist tekst vanaf de cursor tot het eind van het woord.
++
++  OPMERKING: Het intikken van alleen maar de beweging, zonder een operator,
++             in de opdrachtmodus beweegt de cursor (respectievelijk naar het
++             volgende woord, naar het eind van het huidige woord en naar het
++             eind van de regel).
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.4: GEBRUIK VAN EEN TELLER BIJ EEN BEWEGING
++
++   ** Een getal voor een beweging herhaalt het zoveel keer. **
++
++  1. Ga naar de regel hieronder, die met ---> begint.
++
++  2. Tik  2w  zodat de cursor twee woorden vooruit gaat.
++
++  3. Tik  3e  zodat de cursor naar het einde van het derde woord gaat.
++
++  4. Tik  0  (nul) om naar het begin van de regel te gaan.
++
++  5. Herhaal de stappen 2 en 3 met andere getallen.
++
++  ---> Dit is een regel met woorden waarin je heen en weer kan bewegen.
++
++  6. Ga verder met les 2.5.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.5: GEBRUIK EEN TELLER OM MEER TE WISSEN
++
++  ** Een getal met een operator zorgt dat deze zoveel keer wordt herhaald. **
++
++  Bij de combinatie van wis-operator en beweging kan je voor de beweging een
++  teller zetten om meer te wissen:
++         d  [teller]  beweging
++
++  1. Ga naar het eerste woord in HOOFDLETTERS in de regel na --->.
++
++  2. Met  d2w  worden twee woorden (in dit voorbeeld in hoofdletters) gewist.
++
++  3. Herhaal de stappen 1 en 2 met verschillende tellers om de verschillende
++     woorden in hoofdletters met één commando te wissen.
++
++  ---> deze ABC DE regel FGHI JK LMN OP is QZ RS ontdaan van rommel.
++
++  OPMERKING: De teller kan ook aan het begin staan: d2w en 2dw werken allebei.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.6: BEWERKING VAN HELE REGELS
++
++               ** Tik  dd  om een hele regel te wissen. **
++
++  Omdat het wissen van een hele regel vaak voorkomt, besloten de ontwerpers
++  van Vi dat met het tikken van  dd  simpelweg een hele regel gewist wordt.
++
++  1. Ga met de cursor naar de tweede regel van de zinnetjes hieronder.
++
++  2. Tik  dd  om de regel te wissen.
++
++  3. Ga nu naar de vierde regel.
++
++  4. Tik  2dd  om twee regels te wissen.
++
++  --->  1)  Rozen zijn rood.
++  --->  2)  Modder is leuk.
++  --->  3)  Viooltjes zijn blauw.
++  --->  4)  Ik heb een auto.
++  --->  5)  De klok slaat de tijd.
++  --->  6)  Suiker is zoet.
++  --->  7)  En dat ben jij ook.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.7: HET COMMANDO HERSTEL
++
++  ** u  maakt het laatste commando ongedaan,  U  herstelt een hele regel. **
++
++  1. Ga met de cursor naar de regel hieronder met ---> en zet hem
++     op de eerste fout.
++
++  2. Tik  x  om het eerste ongewenste teken te wissen.
++
++  3. Tik nu  u  en maak daarmee het vorige commando ongedaan.
++
++  4. Herstel nu alle fouten in de regel met het  x  commando.
++
++  5. Tik een hoofdletter  U  om de regel in z'n oorspronkelijke staat terug
++     te brengen.
++
++  6. Tik nu een paar keer  u  en herstel daarmee de  U  en eerdere commando's.
++
++  7. Tik nu een paar keer CTRL-R (Ctrl-toets ingedrukt houden en R tikken) en
++     voer daarmee de commando's opnieuw uit: 'redo' oftewel 'undo de undo's'. 
++
++  ---> Heerstel de fouten inn deeze regel en brenng ze weer terugg met undo.
++
++  8. Dit zijn heel nuttige commando's. Ga verder met samenvatting van les 2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 2
++
++  1. Wis van de cursor tot het volgende woord met    dw
++
++  2. Wis van de cursor tot het eind van de regel met d$
++
++  3. Wis de hele regel met                           dd
++
++  4. Herhaal een beweging door er een getal voor te zetten:  2w
++
++  5. De opbouw van een wijzigingscommando is:
++       operator  [getal]  beweging
++     daarbij is:
++       operator - wat er moet gebeuren, bijvoorbeeld  d  om te wissen
++       [getal]  - een (niet-verplichte) teller om 'beweging' te herhalen
++       beweging - een beweging door de te wijzigen tekst zoals w (woord)
++                  of $ (tot het einde van de regel) enz.
++
++  6. Ga naar het begin van de regel met nul:  0
++
++  7. Undo de voorgaande actie met              u (kleine letter)
++     Undo alle veranderingen in een regel met  U (hoofdletter)
++     Undo de undo's met                        CTRL-R
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.1: HET COMMANDO PLAK
++
++  ** Tik  p  ('put') en plak daarmee zojuist gewiste tekst na te cursor. **
++
++  1. Ga met de cursor naar de eerste regel met ---> hierna.
++
++  2. Wis de regel met  dd  en bewaar hem zodoende in een Vim-register.
++
++  3. Ga naar de c-regel, waar de gewiste regel ONDER moet komen.
++
++  4. Tik  p  om de regel terug te zetten onder de regel met de cursor.
++
++  5. Herhaal de stappen 2 tot 4 om de regels in de goede volgorde te zetten.
++
++---> d) Krijg je het ook onder de knie?
++---> b) Viooltjes zijn blauw,
++---> c) Begrip is te leren,
++---> a) Rozen zijn rood,
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.2: HET COMMANDO VERVANG
++
++  ** Tik rx ('replace') om het teken onder de cursor te vervangen door x. **
++
++  1. Ga naar de eerste regel hieronder met --->.
++
++  2. Zet de cursor op de eerste fout.
++
++  3. Tik  r  en dan het teken dat er hoort te staan.
++
++  4. Herhaal de stappen 2 en 3 tot de eerste regel gelijk is aan de tweede.
++
++  --->  Bij het tokken van dezf hegel heeft iemamd verklerde letters getikt.
++  --->  Bij het tikken van deze regel heeft iemand verkeerde letters getikt.
++
++  5. Ga nu naar les 3.3.
++
++  LET OP: Door het te doen, leer je beter dan door het uit je hoofd te leren.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.3: HET COMMANDO VERANDER
++
++     ** Tik  ce  om te veranderen tot het einde van een woord. **
++
++  1. Ga met de cursor naar de eerste regel hieronder met --->.
++
++  2. Zet de cursor op de  u  van ruch.
++
++  3. Tik  ce  en de juiste letters (in dit geval "egel").
++
++  4. Druk <ESC> en ga naar het volgende teken dat moet worden veranderd.
++
++  5. Herhaal de stappen 3 en 4 tot de eerste regel gelijk is aan de tweede.
++
++  ---> In deze ruch staan een paar weedrim die veranderd moud worden.
++  ---> In deze regel staan een paar woorden die veranderd moeten worden.
++
++  LET OP: Met  ce  wordt (het laatste deel van) een woord gewist en kom je
++          in de invoegmodus.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.4: MEER VERANDERINGEN MET c
++
++  1. Het commando verander ('change') werkt op dezelfde manier als wis. De
++     opbouw is:
++         c  [teller]  beweging
++
++  2. De bewegingen zijn hetzelfde, zoals  w  (woord) en  $  (einde regel).
++
++  3. Ga naar de eerste regel hieronder met --->.
++
++  4. Zet de cursor op de eerste fout.
++
++  5. Tik  c$  en tik de rest van de regel zodat hij gelijk wordt aan de
++     tweede en sluit af met <ESC>.
++
++  ---> Het einde van deze regel moet precies zo worden als de tweede regel.
++  ---> Het einde van deze regel moet gecorrigeerd worden met het commando c$.
++
++  OPMERKING: Je kan de toets <BACKSPACE> gebruiken om tikfouten te herstellen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 3 
++
++  1. Tik  p  om tekst terug te plakken, die zojuist is gewist. Dit zet de
++     gewiste tekst ACHTER de cursor (als een hele regel is gewist komt deze
++     op de regel ONDER de cursor.
++
++  2. Het teken waarop de cursor staat wordt vervangen met  r  gevolgd door
++     het teken dat je daar wilt hebben.
++
++  3. Het commando 'verander' stelt je in staat om tekst te veranderen vanaf
++     de cursor tot waar de 'beweging' je brengt. Dat wil zeggen: tik  ce  om
++     te veranderen vanaf de cursor tot het einde van het woord,  c$  om te
++     veranderen tot het einde van de regel.
++
++  4. De opbouw van het commando verander is:
++         c  [teller]  beweging
++
++  Ga nu naar de volgende les.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.1: PLAATS VAN DE CURSOR EN STATUS VAN HET BESTAND
++
++  ** CTRL-G laat zien waar (regelnummer) je je bevindt en wat de status van
++     het bestand is. Met [nummer] G  ga je naar een bepaalde regel. **
++
++  LET OP: Lees de hele les voordat je een stap uitvoert!!
++
++  1. Hou de Ctrl-toets ingedrukt en tik  g . Dit noemen we CTRL-G.
++     Onderaan de pagina verschijnt een boodschap met de bestandsnaam en de
++     positie in het bestand. Onthou het regelnummer voor stap 3.
++
++  OPMERKING: Als de optie 'ruler' aan staat, wordt de positie van de cursor
++             (regelnummer, kolom) steeds in de rechter-onderhoek van het
++             scherm vermeld. In dit geval vermeldt CTRL-G geen regelnummer.
++             CTRL-G geeft ook de status aan, namelijk of de tekst veranderd
++             is ('modified') sinds het de laatste keer is opgeslagen.  
++
++  2. Tik hoofdletter  G  om naar het einde van het bestand te gaan.
++     Tik  gg  om naar het begin van het bestand te gaan.
++
++  3. Tik het regelnummer waar je bij stap 1 was en daarna  G . Dit brengt je
++     terug naar de regel waar je was toen je de eerste keer CTRL-G tikte.
++
++  4. Voer de stappen 1 tot 3 uit als je dit goed hebt gelezen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.2: HET COMMANDO ZOEKEN
++
++  ** Met  /ZOEK  wordt naar de zoekterm (één of meer woorden) gezocht. **
++
++  1. Tik in de opdrachtmodus het teken  / . Je ziet dat het met de cursor
++     aan de onderkant van het scherm verschijnt, zoals bij het :-commando.
++
++  2. Tik nu 'ffouut' <ENTER>. Dit is het woord waarnaar gezocht wordt.
++
++  3. Tik  n  om verder te zoeken met dezelfde zoekterm.
++     Zoek met  N  met dezelfde zoekterm in de tegenovergestelde richting.
++
++  4. Zoek in achterwaartse richting met ?zoekterm in plaats van  / .
++
++  5. Keer terug naar de vorige hit met CTRL-O (hou Ctrl-toets ingedrukt en
++     tik letter o). Herhaal om verder terug te gaan. CTRL-I gaat vooruit.
++
++  ---> "ffouut" is niet de juiste spelling van fout, ffouut is een fout.
++
++  OPMERKING: Als zoeken het einde van het bestand bereikt, wordt vanaf het
++             begin doorgezocht, tenzij de optie 'wrapscan' is uitgeschakeld.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.3: GA NAAR CORRESPONDERENDE HAAKJES
++
++            ** Tik  %  om naar corresponderende ), ] of } te gaan. **
++
++  1. Zet de cursor op een (, [ of { in de regel hieronder met --->.
++
++  2. Tik dan het teken  % .
++
++  3. De cursor gaan naar het overeenkomstige haakje.
++
++  4. Met opnieuw  %  gaat de cursor terug naar het eerste haakje.
++
++  5. Plaats de cursor op een ander haakje en bekijk wat  %  doet.
++
++  ---> Dit ( is een testregel met  ('s, ['s ] en {'s } erin. ))
++
++  OPMERKING: Dit is nuttig bij het debuggen van een programma waarin haakjes
++             niet corresponderen. Met de optie 'showmatch' wordt ook
++             aangegeven of haakjes corresponderen, maar de cursor wordt niet
++             (blijvend) verplaatst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.4: HET VERVANG COMMANDO
++
++      ** Tik  :s/oud/nieuw/g  om 'oud' door 'nieuw' te vervangen. **
++
++  1. Ga met de cursor naar de regel hieronder met --->.
++
++  2. Tik  :s/dee/de <ENTER>. Zoals je ziet, vervangt ('substitute') dit
++     commando alleen de eerste "dee" in de regel.
++
++  3. Tik nu  :s/dee/de/g . Met de g-vlag ('global') wordt elke "dee" in de
++     regel vervangen.
++
++  ---> dee beste tijd om dee bloemen te zien is in dee lente.
++
++  4. Om in (een deel van) een tekst elk 'oud' te vervangen door 'nieuw':
++     tik   :#,#s/oud/nieuw/g   waar #,# de regelnummers zijn die het gebied
++                               begrenzen waarin wordt vervangen.
++     tik   :%s/oud/nieuw/g     om alles te vervangen in het hele bestand.
++     tik   :%s/oud/nieuw/gc    om elke 'oud' in het hele bestand te vinden
++                               en te vragen of er vervangen moet worden.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 4
++
++  1. CTRL-G   laat positie in het bestand zien en de status van het bestand.
++     G        verplaatst je naar het einde van het bestand.
++     nummer G verplaatst je naar regelnummer.
++     gg       verplaatst je naar de eerste regel.
++
++  2. Met  /  en een zoekterm wordt VOORWAARTS gezocht naar de term.
++     Met  ?  en een zoekterm wordt ACHTERWAARTS gezocht naar de term.
++     Tik  n  na een zoekopdracht om de volgende hit te vinden,
++     of tik  N  om in de andere richting te zoeken.
++     CTRL-O  brengt je naar eerdere hit,  CTRL-I naar nieuwere.
++
++  3. Tik  %  terwijl de cursor op een haakje ([{}]) staat, om naar het
++     corresponderende haakje te gaan.
++
++  4. :s/oud/nieuw      vervangt het eerste 'oud' in een regel door 'nieuw'.
++     :s/oud/nieuw/g    vervangt elk 'oud' in een regel door 'nieuw'.
++     :#,#s/oud/nieuw/g vervangt elk 'oud' door 'nieuw' tussen de regelnummers.
++     :%s/oud/nieuw/g    vervangt elk 'oud' door 'nieuw' in het hele bestand.
++     Voeg  c  toe (:%s/oud/nieuw/gc) om elke keer om bevestiging
++     ('confirmation') te vragen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.1: HOE EEN EXTERN COMMANDO WORDT UITGEVOERD
++
++     ** Tik  :!  gevolgd door een extern commando om dat uit te voeren. **
++
++  1. Tik het commando  :  waarmee de cursor op de onderste regel van het
++     scherm komt te staan. Nu kan je een opdracht geven via de commando-regel.
++
++  2. Tik een  !  (uitroepteken). Dit stelt je in staat om elk shell-commando
++     uit te voeren.
++
++  3. Tik bijvoorbeeld  ls  na het uitroepteken en daarna <ENTER>. Hiermee
++     krijg je de inhoud van je map te zien, net alsof je de opdracht gaf
++     vanaf de shell-prompt. Probeer  :!dir  als het niet werkt.
++
++  OPMERKING: Elk extern commando kan op deze manier uitgevoerd worden, ook
++             met argumenten.
++
++  OPMERKING: Alle commando's na  :  moeten worden afgesloten met <ENTER>.
++             Vanaf nu zullen we dat niet meer altijd vermelden.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.2: MEER OVER HET OPSLAAN VAN BESTANDEN
++
++     ** Tik :w BESTANDSNAAM om de tekst mèt veranderingen op te slaan. **
++
++  1. Tik  :!dir  of  :!ls  om de inhoud van je map te tonen. Je weet
++     inmiddels dat je daarna een <ENTER> moet tikken.
++
++  2. Kies een bestandsnaam die nog niet bestaat, bijvoorbeeld TEST.
++
++  3. Tik nu:  :w TEST  (als je de naam TEST hebt gekozen).
++
++  4. Hierdoor wordt het hele bestand (de VIM lessen) opgeslagen onder de
++     naam TEST. Tik weer  :!dir  of  :!ls  om dit te controleren.
++
++  OPMERKING: Als je Vim zou verlaten en opnieuw zou starten met  vim TEST  is
++             het bestand een exacte kopie van de lessen, zoals je ze opsloeg.
++
++  5. Wis het bestand nu met de opdracht (MS-DOS)  :!del TEST
++                                       of (Unix)  :!rm TEST
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.3: EEN DEEL VAN DE TEKST OPSLAAN
++
++     ** Sla een deel van het bestand op met  v beweging :w BESTANDSNAAM **
++
++  1. Ga naar deze regel.
++
++  2. Tik  v  en ga met de cursor naar stap 5 hieronder. Je ziet dat de
++     tekst oplicht.
++
++  3. Tik  : . Onderaan het scherm zal  :'<,'>  verschijnen.
++
++  4. Tik  w TEST  , waar TEST een bestandsnaam is, die nog niet bestaat.
++     Controleer dat je  :'<,'>w TEST  ziet staan voordat je <ENTER> tikt.
++
++  5. Vim slaat nu de geselecteerde regels op in het bestand TEST. Met
++     :!dir  of  !ls  kan je dat zien. Wis het nog niet! We zullen het in
++     de volgende les gebruiken.
++
++  OPMERKING: Het tikken van  v  zet zichtbare modus ('visual selection') aan.
++             Je kan de cursor rondbewegen om de selectie groter of kleiner
++             te maken. Vervolgens kan je een commando gebruiken om iets met
++             de tekst te doen. Met  d  bijvoorbeeld wis je de tekst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.4: OPHALEN EN SAMENVOEGEN VAN BESTANDEN
++
++     ** Tik  :r BESTANDSNAAM om de inhoud van een bestand in te voegen. **
++
++  1. Zet de cursor precies boven deze regel.
++
++  OPMERKING: Na het uitvoeren van stap 2 zie je tekst van les 5.3. Scrol
++             daarna naar beneden om deze les weer te zien.
++
++  2. Haal nu het bestand TEST op met het commando  :r TEST .
++     Het bestand dat je ophaalt komt onder de regel waarin de cursor staat.
++
++  3. Controleer dat er een bestand is opgehaald. Ga met de cursor omhoog.
++     Dan zie je de tekst van les 5.3 dubbel, het origineel en de versie uit
++     het bestand.
++
++  OPMERKING: Je kan ook de uitvoer van een extern commando inlezen. Om een
++             voorbeeld te geven:  :r !ls  leest de uitvoer van het commando
++             ls en zet dat onder de regel waarin de cursor staat.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 5
++
++  1. :!COMMANDO  voert een extern commando uit.
++     Enkele bruikbare voorbeelden zijn:
++        (MS-DOS)         (Unix)
++         :!dir            :!ls          - laat de inhoud van een map zien
++         :!del BESTAND    :!rm BESTAND  - wist bestand BESTAND
++
++  2. :w BESTANDSNAAM  schrijft het huidige Vim-bestand naar disk met de
++     naam BESTANDSNAAM.
++
++  3. v beweging :w BESTANDSNAAM  laat je in zichtbare modus een fragment
++     selecteren, dat wordt opgeslagen in het bestand BESTANDSNAAM.
++
++  4. :r BESTANDSNAAM  haalt het bestand BESTANDSNAAM op en voegt het onder
++     de cursor-positie in de tekst in.
++
++  5. :r !dir  leest de uitvoer van het externe commando dir en zet het onder
++     de cursor-positie.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.1: HET COMMANDO OPEN
++
++     ** Tik  o  om een regel onder de cursor te openen in invoegmodus. **
++
++  1. Ga naar de eerste regel beneden met --->.
++
++  2. Tik de kleine letter  o  en open daarmee een regel ONDER de cursor en
++     ga naar de invoegmodus.
++
++  3. Tik wat tekst in en sluit af met <ESC> om de invoegmodus te verlaten.
++
++  ---> Als je  o  tikt, komt de cursor in een nieuwe regel in invoegmodus.
++
++  4. Om een regel BOVEN de cursor te openen, moet je gewoon een hoofdletter
++     O  tikken in plaats van een kleine letter. Probeer dat vanaf de volgende
++     regel.
++
++  ---> Open een regel hierboven. Tik een O terwijl de cursor hier staat.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.2: HET COMMANDO TOEVOEGEN
++
++        ** Tik  a  om tekst toe te voegen ACHTER de cursor. **
++
++  1. Ga naar het begin van de regel beneden met --->.
++ 
++  2. Tik  e  tot de cursor op het einde van  "ste"  staat.
++
++  3. Tik een (kleine letter)  a  ('append') om toe te voegen ACHTER de cursor.
++
++  4. Vul het woord aan zoals in de volgende regel. Druk <ESC> om de
++     invoegmodus te verlaten.
++
++  5. Ga met  e  naar het einde van het volgende onvolledige woord en herhaal
++     de stappen 3 en 4.
++
++  ---> Deze regel ste je in staat om te oef in het toevo van tekst. 
++       Deze regel stelt je in staat om te oefenen in het toevoegen van tekst. 
++
++  OPMERKING: a, i en A openen allemaal dezelfde invoegmodus, het enige
++             verschil is waar tekens worden ingevoegd.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.3: VERVANGEN OP EEN ANDERE MANIER
++
++      ** Tik een hoofdletter  R  om meer dan één teken te vervangen. **
++
++  1. Ga naar de eerste regel beneden met --->. Ga met de cursor naar het
++     begin van de eerste  "xxx" .
++
++  2. Tik nu  R  en daarna het getal eronder in de tweede regel, zodat  xxx
++     wordt vervangen.
++
++  3. Druk <ESC> om de vervangmodus te verlaten. Je ziet dat de rest van de
++     regel ongewijzigd blijft.
++
++  4. Herhaal de stappen om de overgebleven  xxx  te vervangen.
++
++  ---> Optellen van 123 en xxx geeft je xxx.
++  ---> Optellen van 123 en 456 geeft je 579.
++
++  OPMERKING: Vervangmodus lijkt op invoegmodus, maar elk teken dat je tikt,
++             vervangt een bestaand teken.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.4: TEKST KOPIËREN EN PLAKKEN
++
++        ** Gebruik  y  om tekst te kopiëren en  p  om te plakken. **
++
++  1. Ga naar de regel beneden met ---> en zet de cursor achter "a)".
++
++  2. Zet zichtbare modus aan met  v  en zet de cursor juist voor "eerste".
++
++  3. Tik  y  ('yank') om de opgelichte tekst ("dit is het") te kopiëren.
++
++  4. Ga met  j$  met de cursor naar het einde van de volgende regel.
++
++  5. Plak de gekopieerde tekst met  p  en tik  a tweede <ESC>.
++
++  6. Selecteer in zichtbare modus "onderdeel", kopieer het met  y  en
++     ga met  j$  naar het einde van de tweede regel. Plak de tekst daar
++     met  p .
++
++  --->  a) dit is het eerste onderdeel
++        b)
++
++  OPMERKING: Je kan  y  ook als operator gebruiken;  yw  kopieert een woord,
++             yy  een hele regel.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.5: OPTIES GEBRUIKEN
++
++     ** Gebruik een optie voor al dan niet hoofdlettergevoelig zoeken. **
++
++  1. Zoek naar 'hoofdlettergevoelig' met  /hoofdlettergevoelig <ENTER>
++     Herhaal het zoeken enkele keren door  n  te tikken.
++ 
++  2. Schakel de optie 'ic' ('ignore case', niet-hoofdlettergevoelig) in
++     met  :set ic
++
++  3. Zoek met  n  opnieuw naar 'hoofdlettergevoelig'. Je ziet dat
++     Hoofdlettergevoelig en HOOFDLETTERGEVOELIG nu ook gevonden worden.
++
++  4. Schakel de opties 'hlsearch' (treffers oplichten) en 'incsearch' (toon
++     gedeeltelijke treffers bij intikken) in met  :set hls is
++
++  5. Tik weer /hoofdlettergevoelig <ENTER> en kijk wat er gebeurt.
++
++  6. Schakel 'hoofdlettergevoelig' weer in met  :set noic
++
++  OPMERKING: Schakel het oplichten van treffers uit met  :nohlsearch
++
++  OPMERKING: Om bij een enkel zoek-commando de hoofdlettergevoeligheid om
++             te draaien kan  \c  worden gebruikt na de zoekterm:
++             /hoofdlettergevoelig\c <ENTER>.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 6
++
++  1. Tik  o  om een regel te openen ONDER de cursor en invoegmodus te starten.
++     Tik  O  om een regel te openen BOVEN de cursor.
++
++  2. Tik  a  om tekst toe te voegen NA de cursor.
++     Tik  A  om tekst toe te voegen aan het einde van de regel.
++
++  3. Het commando  e  beweegt de cursor naar het einde van een woord.
++
++  4. De operator  y  yankt (kopieert) tekst,  p  zet het terug (plakt).
++
++  5. Met hoofdletter  R  wordt de vervangmodus geopend, met <ESC> afgesloten.
++
++  6. Met  :set xxx  wordt optie 'xxx' ingeschakeld. Opties zijn bijvoorbeeld:
++       ic   ignorecase  geen verschil hoofdletters/kleine letters bij zoeken
++       is   incsearch   toon gedeeltelijke treffers tijdens intikken zoekterm 
++       hls  hlsearch    laat alle treffers oplichten
++     Je kan zowel de lange als de korte naam van een optie gebruiken.
++  
++  7. Zet 'no' voor de naam om een optie uit te schakelen:  :set noic
++     schakelt 'ic' uit.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 7.1: HULP INROEPEN
++
++           ** Het gebruik van ingebouwde hulp. **
++
++  Vim heeft een uitgebreid ingebouwd hulpsysteem. Probeer, om te beginnen,
++  één van deze drie:
++    - druk de <HELP> toets (als je die hebt)
++    - druk de <F1> toets (als je die hebt)
++    - tik  :help <ENTER>
++
++  Lees de tekst in het help-venster om te leren hoe 'help' werkt.
++  Tik  CTRL-W CTRL-W  om van het ene venster naar het andere te gaan.
++  Met  :q <ENTER>  wordt het help-venster gesloten.
++
++  Je kan hulp vinden over nagenoeg elk onderwerp door een argument aan het
++  commando  :help  toe te voegen. Probeer deze (en vergeet <ENTER> niet):
++    :help w
++    :help c_CTRL-D
++    :help insert-index
++    :help user-manual
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 7.2: SCHRIJF EEN CONFIGURATIEBESTAND
++
++                    ** Mogelijkheden van Vim uitbreiden. **
++
++  Vim kent veel meer mogelijkheden dan Vi, maar de meeste zijn standaard
++  uitgeschakeld. Om meer functies te gebruiken moet je een 'vimrc'-bestand
++  schrijven.
++
++  1. Bewerk het bestand 'vimrc'. Hoe dat moet hangt af van je systeem:
++      :e ~/.vimrc		voor Unix
++      :e $VIM/_vimrc		voor MS-Windows
++
++  2. Lees de inhoud van het voorbeeld-bestand:
++      :r $VIMRUNTIME/vimrc_example.vim
++
++  3. Sla het bestand op met  :w
++
++  De volgende keer dat je Vim start wordt 'syntaxiskleuring' gebruiken.
++  Je kan al je voorkeursinstellingen toevoegen aan dit 'vimrc'-bestand.
++  Tik  :help vimrc-intro  voor meer informatie.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 7.3: AANVULLEN
++
++      ** Aanvullen van de 'command line' met CTRL-D en <TAB>. **
++
++  1. Zorg dat Vim niet in 'compatible mode' is met  :set nocp
++
++  2. Kijk welke bestanden zich in de map bevinden met  :!ls  of  :!dir
++
++  3. Tik het begin van een commando:  :e
++
++  4. Met  CTRL-D  toont Vim een lijst commando's, die met "e" beginnen.
++
++  5. Druk enkele keren <TAB>. Vim laat aanvullingen zien, zoals ":edit",
++     dat we hier gebruiken.
++
++  6. Voeg een spatie toe en de eerste letter(s) van een bestaande
++     bestandsnaam:  :edit BESTAND
++
++  7. Druk <TAB>. Vim vult de naam aan (als hij uniek is).
++
++  OPMERKING: Aanvullen werkt bij tal van commando's. Probeer gewoon CTRL-D
++             en <TAB>. Het is bijzonder nuttig bij  :help .
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 7
++
++  1. Tik  :help  of druk <F1> of <Help>  om een help-venster te openen.
++
++  2. Tik  :help CMD  voor hulp over  CMD .
++
++  3. Tik  CTRL-W CTRL-W  om naar een ander venster te gaan.
++
++  4. Tik  :q  om het help-venster te sluiten.
++
++  5. Maak een bestand met de naam 'vimrc' voor je voorkeursinstellingen.
++
++  6. Druk CTRL-D tijdens het intikken van een :-commando om mogelijke
++     aanvullingen te zien. Druk <TAB> om aanvullen te gebruiken.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++  Hiermee komen de Vim-lessen tot een einde. Ze waren bedoeld om een kort
++  overzicht te geven van de Vim-editor, juist voldoende om de editor
++  redelijk makkelijk te gebruiken. Deze lessen zijn verre van volledig. Vim
++  kent veel meer commando's. Lees hierna de handleiding voor gebruikers:
++  ":help user-manual".
++
++  Voor verdere studie wordt aanbevolen:
++      Vim - Vi Improved - door Steve Oualline
++      Uitgever: New Riders
++  Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
++  voor beginners. Met veel voorbeelden en afbeeldingen.
++  Zie http://iccf-holland.org/click5.html
++
++  Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
++  toch aanbevolen:
++      Learning the Vi Editor - door Linda Lamb
++      Uitgever: O'Reilly & Associates Inc.
++  Het is een goed boek om nagenoeg alles te weten te komen dat je met Vi
++  zou willen doen. De zesde en vooral de nieuwe zevende druk (onder de
++  titel Learning the Vi and Vim Editors door Arnold Robbins, Elbert Hannah
++  & Linda Lamb) bevat ook informatie over Vim.
++
++  Deze lessen zijn geschreven door Michael C. Pierce en Robert K. Ware,
++  Colorado School of Mines met gebruikmaking van ideeën van Charles Smith
++  van de Colorado State University. E-mail: bware@mines.colorado.edu.
++
++  Aangepast voor Vim door Bram Moolenaar.
++
++  Nederlandse vertaling door Rob Bishoff, april 2012
++  e-mail: rob.bishoff@hccnet.nl)
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.nl.utf-8 vim73/runtime/tutor/tutor.nl.utf-8
+--- vim73.orig/runtime/tutor/tutor.nl.utf-8	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/tutor/tutor.nl.utf-8	2013-06-07 17:07:28.722259994 +0000
+@@ -0,0 +1,950 @@
++  ==========================================================================
++  =    W e l k o m   b i j   d e   V I M   l e s s e n   -   Versie 1.7    =
++  ==========================================================================
++
++  Vim is een krachtige editor met veel commando's, te veel om uit te leggen
++  in lessen zoals deze. Deze lessen zijn bedoeld om voldoende commando's te
++  behandelen om je in staat te stellen met Vim te werken als een editor voor
++  algemeen gebruik.
++
++  Deze lessen zullen 25 tot 30 minuten in beslag nemen, afhankelijk van de
++  tijd die wordt besteed aan het uitproberen van de commando's.
++
++  LET OP:
++  Door de commando's in deze lessen verandert de tekst. Maak een kopie van
++  dit bestand om mee te oefenen (als je "vimtutor" uitvoerde, is dit al een
++  kopie).
++
++  Deze lessen zijn bedoeld om al doende te leren. Dat betekent dat je de
++  commando's moet uitvoeren om ze goed te leren kennen. Als je de tekst
++  alleen maar doorleest, zal je de commando's niet leren!
++
++  Zorg ervoor dat de <Caps Lock> toets NIET is ingedrukt en druk vaak genoeg
++  op de j-toets om de cursor zo te bewegen dat les 1.1 volledig op het
++  scherm staat.
++
++  LET OP: In deze lessen worden omwille van de duidelijkheid vaak spaties
++  gebruikt binnen een commando (bv. "40 G" of "operator [getal] beweging").
++  Tik deze spaties echter NIET. Ze verstoren de werking.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.1:  VERPLAATS DE CURSOR
++
++  ** De cursor wordt verplaatst met de toetsen h, j, k, l zoals aangegeven. **
++          ^
++          k       Hint:  De h is de meest linkse en beweegt naar links.
++      < h   l >          De l is de meest rechtse en beweegt naar rechts.
++          j              De j lijkt op een pijl naar beneden.
++          v
++
++  1. Beweeg de cursor over het scherm om er vertrouwd mee te raken.
++
++  2. Druk de omlaag-toets (j) tot hij repeteert.
++     Nu weet je hoe je de volgende les bereikt.
++
++  3. Gebruik de omlaag-toets om naar les 1.2 te gaan.
++
++  OPMERKING: Als je twijfelt aan wat je tikte, druk <ESC> om in de opdracht-
++             modus te komen. Tik daarna het commando dat bedoeld wordt.
++
++  OPMERKING: Pijltjes-toetsen werken ook. Met de hjkl-toetsen kan je sneller
++             rondbewegen, als je er eenmaal aan gewend bent. Echt waar!
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.2: VIM AFSLUITEN
++
++      !! LET OP: Lees deze les goed door voordat je iets uitvoert!!
++
++  1. Druk de <ESC> toets (om zeker in de opdrachtmodus te zitten).
++
++  2. Tik   :q! <ENTER>
++     Hiermee wordt de editor afgesloten. Alle veranderingen gaan VERLOREN.
++
++  3. Nu zie je de shell-prompt. Tik het commando waarmee je deze lessen
++     hebt opgeroepen. Dat is normaal gesproken:  vimtutor <ENTER>
++
++  4. Als je deze stappen goed hebt doorgelezen, voer dan de stappen 1 tot 3
++     uit om de editor te verlaten en weer op te starten.
++
++  LET OP: :q! <ENTER> verwerpt alle veranderingen die je aanbracht. Een paar
++          lessen verder zal je leren hoe veranderingen worden opgeslagen in
++          een bestand.
++
++  5. Beweeg de cursor omlaag naar les 1.3.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.3: TEKST BEWERKEN - WISSEN
++
++          ** Tik  x  om het teken onder de cursor te wissen. **
++
++  1. Ga met de cursor naar de regel verderop met --->.
++
++  2. Zet de cursor op een teken dat moet worden gewist om een fout te
++     herstellen.
++
++  3. Tik  x  om het ongewenste teken te wissen.
++
++  4. Herhaal deze stappen tot de regel goed is.
++
++  ---> Vi kkent eenn opdracccchtmodus en een invooegmmmmodus.
++
++  5. Nu de regel gecorrigeerd is kan je naar les 1.4 gaan.
++
++  LET OP: Probeer de lessen niet uit je hoofd te leren. Leer al doende.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.4: TEKST BEWERKEN - INVOEGEN
++
++              ** Tik  i  ('insert') om tekst in te voegen. **
++
++  1. Ga met de cursor naar de eerste regel verderop met --->.
++
++  2. Maak de eerste regel gelijk aan de tweede. Zet daarvoor de cursor op
++     de plaats waar tekst moet worden ingevoegd.
++
++  3. Tik  i  en daarna de nodige aanvullingen.
++
++  4. Tik <ESC> na elke herstelde fout om terug te keren in de opdrachtmodus.
++     Herhaal de stappen 2 tot 4 om de zin te verbeteren.
++
++  ---> Aan regel ontekt wat .
++  ---> Aan deze regel ontbreekt wat tekst.
++
++  5. Ga naar les 1.5 als je gewend bent aan het invoegen van tekst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.5: TEKST BEWERKEN - TOEVOEGEN
++
++             ** Tik  A  ('append') om tekst toe te voegen. **
++
++  1. Ga met de cursor naar de eerste regel verderop met --->.
++     Het maakt niet uit waar de cursor in deze regel staat.
++
++  2. Tik hoofdletter  A  en tik de nodige aanvullingen.
++
++  3. Tik <ESC> nadat de tekst is aangevuld. Zo keer je terug in de
++     opdrachtmodus.
++
++  4. Ga naar de tweede regel verderop met ---> en herhaal stap 2 en 3
++     om deze zin te corrigeren.
++
++  ---> Er ontbreekt wat tekst aan de
++       Er ontbreekt wat tekst aan deze regel.
++  ---> Hier ontbreekt ook w
++       Hier ontbreekt ook wat tekst.
++
++  5. Ga naar les 1.6 als je vertrouwd bent geraakt aan het toevoegen
++     van tekst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 1.6: EEN BESTAND EDITTEN
++
++    ** Gebruik  :wq  om een bestand op te slaan en de editor te verlaten. **
++
++  !! LET OP: Lees deze les helemaal door voordat je een van de volgende
++             stappen uitvoert!!
++
++  1. Verlaat deze les zoals je in les 1.2 deed:  :q!
++     Of gebruik een andere terminal als je daar de beschikking over hebt. Doe
++     daar het volgende.
++
++  2. Tik het volgende commando na de shell-prompt:  vim les <ENTER>
++     'vim' (vaak ook 'vi') is het commando om de Vim-editor te starten,
++     'les' is de naam van het bestand, dat je gaat bewerken. Kies een andere
++     naam als er al een bestand 'les' bestaat, dat niet veranderd mag worden.
++
++  3. Voeg naar eigen keus tekst toe, zoals je geleerd hebt in eerdere lessen.
++
++  4. Sla het bestand met de wijzigingen op en verlaat Vim met  :wq <ENTER>
++
++  5. Herstart vimtutor als je deze bij stap 1 hebt verlaten en ga verder met
++     de volgende samenvatting.
++
++  6. Voer deze stappen uit nadat je ze hebt gelezen en begrepen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 1
++
++  1. De cursor wordt bewogen met de pijltjestoetsen of de hjkl-toetsen.
++       h (links)   j (omlaag)  k (omhoog)  l (rechts)
++
++  2. Start Vim van de shell-prompt. Tik:  vim BESTANDSNAAM <ENTER>
++
++  3. Sluit Vim af met  <ESC> :q! <ENTER>  om de veranderingen weg te gooien.
++               OF tik  <ESC> :wq <ENTER>  om de veranderingen te bewaren.
++
++  4. Wis het teken onder de cursor met:  x
++
++  5. Invoegen of toevoegen van tekst, tik:
++     i  en daarna de in te voegen tekst  <ESC>   voeg in vanaf de cursor
++     A  en daarna de toe te voegen tekst  <ESC>  voeg toe achter de regel
++
++  OPMERKING: Met <ESC> kom je terug in opdrachtmodus en wordt een ongewenst
++             of gedeeltelijk uitgevoerd commando afgebroken.
++
++  Ga nu verder met les 2.1.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.1: WIS-COMMANDO'S
++
++       ** Tik  dw  ('delete word') om een woord te wissen. **
++
++  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
++
++  2. Ga naar de regel hieronder, die met ---> begint.
++
++  3. Ga met de cursor naar het begin van een woord dat moet worden gewist.
++
++  4. Met het tikken van  dw  verdwijnt het woord.
++
++  OPMERKING: De letter  d  verschijnt op de laatste regel van het scherm
++             zodra je hem tikt. Vim is aan het wachten tot je de  w  tikt.
++             Als je een ander teken dan  d  ziet, heb je iets verkeerds
++             getikt. Druk op <ESC> en begin opnieuw.
++
++  NOG EEN OPMERKING: Dit werkt alleen als de optie 'showcmd' is ingeschakeld.
++                     Dat gebeurt met  :set showcmd <ENTER>
++
++  ---> Er zijn een het paar ggg woorden, die niet in deze len zin thuishoren.
++
++  5. Herhaal de stappen 3 en 4 tot de zin goed is en ga naar les 2.2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.2: MEER WIS-COMMANDO'S
++
++        ** Tik  d$  om te wissen tot het einde van de regel. **
++
++  1. Druk op <ESC> om zeker in de opdrachtmodus te zijn.
++
++  2. Ga naar de regel hieronder, die met ---> begint.
++
++  3. Ga met de cursor naar het einde van de correcte regel (NA de eerste  . ).
++
++  4. Tik  d$  om te wissen tot het einde van de regel.
++
++  ---> Iemand heeft het einde van deze regel dubbel getikt. dubbel getikt.
++
++  5. Ga naar les 2.3 voor uitleg.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.3: OVER OPERATOREN EN BEWEGINGEN
++
++  Veel commando's die de tekst veranderen, bestaan uit een operator en een
++  beweging. De samenstelling van een wis-commando met de operator  d  is:
++    d  beweging
++
++  Daarbij is:
++    d        - de wis-operator
++    beweging - het bereik waarop de operator werkt (zie het lijstje hieronder)
++
++  Een korte lijst van bewegingen vanaf de cursor:
++    w - tot het begin van het volgende woord, ZONDER het eerste teken daarvan.
++    e - tot het einde van het huidige woord, INCLUSIEF het laatste teken.
++    $ - tot het einde van de regel, INCLUSIEF het laatste teken.
++
++  Het tikken van  de  wist tekst vanaf de cursor tot het eind van het woord.
++
++  OPMERKING: Het intikken van alleen maar de beweging, zonder een operator,
++             in de opdrachtmodus beweegt de cursor (respectievelijk naar het
++             volgende woord, naar het eind van het huidige woord en naar het
++             eind van de regel).
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.4: GEBRUIK VAN EEN TELLER BIJ EEN BEWEGING
++
++   ** Een getal voor een beweging herhaalt het zoveel keer. **
++
++  1. Ga naar de regel hieronder, die met ---> begint.
++
++  2. Tik  2w  zodat de cursor twee woorden vooruit gaat.
++
++  3. Tik  3e  zodat de cursor naar het einde van het derde woord gaat.
++
++  4. Tik  0  (nul) om naar het begin van de regel te gaan.
++
++  5. Herhaal de stappen 2 en 3 met andere getallen.
++
++  ---> Dit is een regel met woorden waarin je heen en weer kan bewegen.
++
++  6. Ga verder met les 2.5.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.5: GEBRUIK EEN TELLER OM MEER TE WISSEN
++
++  ** Een getal met een operator zorgt dat deze zoveel keer wordt herhaald. **
++
++  Bij de combinatie van wis-operator en beweging kan je voor de beweging een
++  teller zetten om meer te wissen:
++         d  [teller]  beweging
++
++  1. Ga naar het eerste woord in HOOFDLETTERS in de regel na --->.
++
++  2. Met  d2w  worden twee woorden (in dit voorbeeld in hoofdletters) gewist.
++
++  3. Herhaal de stappen 1 en 2 met verschillende tellers om de verschillende
++     woorden in hoofdletters met Ã©Ã©n commando te wissen.
++
++  ---> deze ABC DE regel FGHI JK LMN OP is QZ RS ontdaan van rommel.
++
++  OPMERKING: De teller kan ook aan het begin staan: d2w en 2dw werken allebei.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.6: BEWERKING VAN HELE REGELS
++
++               ** Tik  dd  om een hele regel te wissen. **
++
++  Omdat het wissen van een hele regel vaak voorkomt, besloten de ontwerpers
++  van Vi dat met het tikken van  dd  simpelweg een hele regel gewist wordt.
++
++  1. Ga met de cursor naar de tweede regel van de zinnetjes hieronder.
++
++  2. Tik  dd  om de regel te wissen.
++
++  3. Ga nu naar de vierde regel.
++
++  4. Tik  2dd  om twee regels te wissen.
++
++  --->  1)  Rozen zijn rood.
++  --->  2)  Modder is leuk.
++  --->  3)  Viooltjes zijn blauw.
++  --->  4)  Ik heb een auto.
++  --->  5)  De klok slaat de tijd.
++  --->  6)  Suiker is zoet.
++  --->  7)  En dat ben jij ook.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 2.7: HET COMMANDO HERSTEL
++
++  ** u  maakt het laatste commando ongedaan,  U  herstelt een hele regel. **
++
++  1. Ga met de cursor naar de regel hieronder met ---> en zet hem
++     op de eerste fout.
++
++  2. Tik  x  om het eerste ongewenste teken te wissen.
++
++  3. Tik nu  u  en maak daarmee het vorige commando ongedaan.
++
++  4. Herstel nu alle fouten in de regel met het  x  commando.
++
++  5. Tik een hoofdletter  U  om de regel in z'n oorspronkelijke staat terug
++     te brengen.
++
++  6. Tik nu een paar keer  u  en herstel daarmee de  U  en eerdere commando's.
++
++  7. Tik nu een paar keer CTRL-R (Ctrl-toets ingedrukt houden en R tikken) en
++     voer daarmee de commando's opnieuw uit: 'redo' oftewel 'undo de undo's'. 
++
++  ---> Heerstel de fouten inn deeze regel en brenng ze weer terugg met undo.
++
++  8. Dit zijn heel nuttige commando's. Ga verder met samenvatting van les 2.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 2
++
++  1. Wis van de cursor tot het volgende woord met    dw
++
++  2. Wis van de cursor tot het eind van de regel met d$
++
++  3. Wis de hele regel met                           dd
++
++  4. Herhaal een beweging door er een getal voor te zetten:  2w
++
++  5. De opbouw van een wijzigingscommando is:
++       operator  [getal]  beweging
++     daarbij is:
++       operator - wat er moet gebeuren, bijvoorbeeld  d  om te wissen
++       [getal]  - een (niet-verplichte) teller om 'beweging' te herhalen
++       beweging - een beweging door de te wijzigen tekst zoals w (woord)
++                  of $ (tot het einde van de regel) enz.
++
++  6. Ga naar het begin van de regel met nul:  0
++
++  7. Undo de voorgaande actie met              u (kleine letter)
++     Undo alle veranderingen in een regel met  U (hoofdletter)
++     Undo de undo's met                        CTRL-R
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.1: HET COMMANDO PLAK
++
++  ** Tik  p  ('put') en plak daarmee zojuist gewiste tekst na te cursor. **
++
++  1. Ga met de cursor naar de eerste regel met ---> hierna.
++
++  2. Wis de regel met  dd  en bewaar hem zodoende in een Vim-register.
++
++  3. Ga naar de c-regel, waar de gewiste regel ONDER moet komen.
++
++  4. Tik  p  om de regel terug te zetten onder de regel met de cursor.
++
++  5. Herhaal de stappen 2 tot 4 om de regels in de goede volgorde te zetten.
++
++---> d) Krijg je het ook onder de knie?
++---> b) Viooltjes zijn blauw,
++---> c) Begrip is te leren,
++---> a) Rozen zijn rood,
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.2: HET COMMANDO VERVANG
++
++  ** Tik rx ('replace') om het teken onder de cursor te vervangen door x. **
++
++  1. Ga naar de eerste regel hieronder met --->.
++
++  2. Zet de cursor op de eerste fout.
++
++  3. Tik  r  en dan het teken dat er hoort te staan.
++
++  4. Herhaal de stappen 2 en 3 tot de eerste regel gelijk is aan de tweede.
++
++  --->  Bij het tokken van dezf hegel heeft iemamd verklerde letters getikt.
++  --->  Bij het tikken van deze regel heeft iemand verkeerde letters getikt.
++
++  5. Ga nu naar les 3.3.
++
++  LET OP: Door het te doen, leer je beter dan door het uit je hoofd te leren.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.3: HET COMMANDO VERANDER
++
++     ** Tik  ce  om te veranderen tot het einde van een woord. **
++
++  1. Ga met de cursor naar de eerste regel hieronder met --->.
++
++  2. Zet de cursor op de  u  van ruch.
++
++  3. Tik  ce  en de juiste letters (in dit geval "egel").
++
++  4. Druk <ESC> en ga naar het volgende teken dat moet worden veranderd.
++
++  5. Herhaal de stappen 3 en 4 tot de eerste regel gelijk is aan de tweede.
++
++  ---> In deze ruch staan een paar weedrim die veranderd moud worden.
++  ---> In deze regel staan een paar woorden die veranderd moeten worden.
++
++  LET OP: Met  ce  wordt (het laatste deel van) een woord gewist en kom je
++          in de invoegmodus.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 3.4: MEER VERANDERINGEN MET c
++
++  1. Het commando verander ('change') werkt op dezelfde manier als wis. De
++     opbouw is:
++         c  [teller]  beweging
++
++  2. De bewegingen zijn hetzelfde, zoals  w  (woord) en  $  (einde regel).
++
++  3. Ga naar de eerste regel hieronder met --->.
++
++  4. Zet de cursor op de eerste fout.
++
++  5. Tik  c$  en tik de rest van de regel zodat hij gelijk wordt aan de
++     tweede en sluit af met <ESC>.
++
++  ---> Het einde van deze regel moet precies zo worden als de tweede regel.
++  ---> Het einde van deze regel moet gecorrigeerd worden met het commando c$.
++
++  OPMERKING: Je kan de toets <BACKSPACE> gebruiken om tikfouten te herstellen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 3 
++
++  1. Tik  p  om tekst terug te plakken, die zojuist is gewist. Dit zet de
++     gewiste tekst ACHTER de cursor (als een hele regel is gewist komt deze
++     op de regel ONDER de cursor.
++
++  2. Het teken waarop de cursor staat wordt vervangen met  r  gevolgd door
++     het teken dat je daar wilt hebben.
++
++  3. Het commando 'verander' stelt je in staat om tekst te veranderen vanaf
++     de cursor tot waar de 'beweging' je brengt. Dat wil zeggen: tik  ce  om
++     te veranderen vanaf de cursor tot het einde van het woord,  c$  om te
++     veranderen tot het einde van de regel.
++
++  4. De opbouw van het commando verander is:
++         c  [teller]  beweging
++
++  Ga nu naar de volgende les.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.1: PLAATS VAN DE CURSOR EN STATUS VAN HET BESTAND
++
++  ** CTRL-G laat zien waar (regelnummer) je je bevindt en wat de status van
++     het bestand is. Met [nummer] G  ga je naar een bepaalde regel. **
++
++  LET OP: Lees de hele les voordat je een stap uitvoert!!
++
++  1. Hou de Ctrl-toets ingedrukt en tik  g . Dit noemen we CTRL-G.
++     Onderaan de pagina verschijnt een boodschap met de bestandsnaam en de
++     positie in het bestand. Onthou het regelnummer voor stap 3.
++
++  OPMERKING: Als de optie 'ruler' aan staat, wordt de positie van de cursor
++             (regelnummer, kolom) steeds in de rechter-onderhoek van het
++             scherm vermeld. In dit geval vermeldt CTRL-G geen regelnummer.
++             CTRL-G geeft ook de status aan, namelijk of de tekst veranderd
++             is ('modified') sinds het de laatste keer is opgeslagen.  
++
++  2. Tik hoofdletter  G  om naar het einde van het bestand te gaan.
++     Tik  gg  om naar het begin van het bestand te gaan.
++
++  3. Tik het regelnummer waar je bij stap 1 was en daarna  G . Dit brengt je
++     terug naar de regel waar je was toen je de eerste keer CTRL-G tikte.
++
++  4. Voer de stappen 1 tot 3 uit als je dit goed hebt gelezen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.2: HET COMMANDO ZOEKEN
++
++  ** Met  /ZOEK  wordt naar de zoekterm (Ã©Ã©n of meer woorden) gezocht. **
++
++  1. Tik in de opdrachtmodus het teken  / . Je ziet dat het met de cursor
++     aan de onderkant van het scherm verschijnt, zoals bij het :-commando.
++
++  2. Tik nu 'ffouut' <ENTER>. Dit is het woord waarnaar gezocht wordt.
++
++  3. Tik  n  om verder te zoeken met dezelfde zoekterm.
++     Zoek met  N  met dezelfde zoekterm in de tegenovergestelde richting.
++
++  4. Zoek in achterwaartse richting met ?zoekterm in plaats van  / .
++
++  5. Keer terug naar de vorige hit met CTRL-O (hou Ctrl-toets ingedrukt en
++     tik letter o). Herhaal om verder terug te gaan. CTRL-I gaat vooruit.
++
++  ---> "ffouut" is niet de juiste spelling van fout, ffouut is een fout.
++
++  OPMERKING: Als zoeken het einde van het bestand bereikt, wordt vanaf het
++             begin doorgezocht, tenzij de optie 'wrapscan' is uitgeschakeld.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.3: GA NAAR CORRESPONDERENDE HAAKJES
++
++            ** Tik  %  om naar corresponderende ), ] of } te gaan. **
++
++  1. Zet de cursor op een (, [ of { in de regel hieronder met --->.
++
++  2. Tik dan het teken  % .
++
++  3. De cursor gaan naar het overeenkomstige haakje.
++
++  4. Met opnieuw  %  gaat de cursor terug naar het eerste haakje.
++
++  5. Plaats de cursor op een ander haakje en bekijk wat  %  doet.
++
++  ---> Dit ( is een testregel met  ('s, ['s ] en {'s } erin. ))
++
++  OPMERKING: Dit is nuttig bij het debuggen van een programma waarin haakjes
++             niet corresponderen. Met de optie 'showmatch' wordt ook
++             aangegeven of haakjes corresponderen, maar de cursor wordt niet
++             (blijvend) verplaatst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 4.4: HET VERVANG COMMANDO
++
++      ** Tik  :s/oud/nieuw/g  om 'oud' door 'nieuw' te vervangen. **
++
++  1. Ga met de cursor naar de regel hieronder met --->.
++
++  2. Tik  :s/dee/de <ENTER>. Zoals je ziet, vervangt ('substitute') dit
++     commando alleen de eerste "dee" in de regel.
++
++  3. Tik nu  :s/dee/de/g . Met de g-vlag ('global') wordt elke "dee" in de
++     regel vervangen.
++
++  ---> dee beste tijd om dee bloemen te zien is in dee lente.
++
++  4. Om in (een deel van) een tekst elk 'oud' te vervangen door 'nieuw':
++     tik   :#,#s/oud/nieuw/g   waar #,# de regelnummers zijn die het gebied
++                               begrenzen waarin wordt vervangen.
++     tik   :%s/oud/nieuw/g     om alles te vervangen in het hele bestand.
++     tik   :%s/oud/nieuw/gc    om elke 'oud' in het hele bestand te vinden
++                               en te vragen of er vervangen moet worden.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 4
++
++  1. CTRL-G   laat positie in het bestand zien en de status van het bestand.
++     G        verplaatst je naar het einde van het bestand.
++     nummer G verplaatst je naar regelnummer.
++     gg       verplaatst je naar de eerste regel.
++
++  2. Met  /  en een zoekterm wordt VOORWAARTS gezocht naar de term.
++     Met  ?  en een zoekterm wordt ACHTERWAARTS gezocht naar de term.
++     Tik  n  na een zoekopdracht om de volgende hit te vinden,
++     of tik  N  om in de andere richting te zoeken.
++     CTRL-O  brengt je naar eerdere hit,  CTRL-I naar nieuwere.
++
++  3. Tik  %  terwijl de cursor op een haakje ([{}]) staat, om naar het
++     corresponderende haakje te gaan.
++
++  4. :s/oud/nieuw      vervangt het eerste 'oud' in een regel door 'nieuw'.
++     :s/oud/nieuw/g    vervangt elk 'oud' in een regel door 'nieuw'.
++     :#,#s/oud/nieuw/g vervangt elk 'oud' door 'nieuw' tussen de regelnummers.
++     :%s/oud/nieuw/g    vervangt elk 'oud' door 'nieuw' in het hele bestand.
++     Voeg  c  toe (:%s/oud/nieuw/gc) om elke keer om bevestiging
++     ('confirmation') te vragen.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.1: HOE EEN EXTERN COMMANDO WORDT UITGEVOERD
++
++     ** Tik  :!  gevolgd door een extern commando om dat uit te voeren. **
++
++  1. Tik het commando  :  waarmee de cursor op de onderste regel van het
++     scherm komt te staan. Nu kan je een opdracht geven via de commando-regel.
++
++  2. Tik een  !  (uitroepteken). Dit stelt je in staat om elk shell-commando
++     uit te voeren.
++
++  3. Tik bijvoorbeeld  ls  na het uitroepteken en daarna <ENTER>. Hiermee
++     krijg je de inhoud van je map te zien, net alsof je de opdracht gaf
++     vanaf de shell-prompt. Probeer  :!dir  als het niet werkt.
++
++  OPMERKING: Elk extern commando kan op deze manier uitgevoerd worden, ook
++             met argumenten.
++
++  OPMERKING: Alle commando's na  :  moeten worden afgesloten met <ENTER>.
++             Vanaf nu zullen we dat niet meer altijd vermelden.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.2: MEER OVER HET OPSLAAN VAN BESTANDEN
++
++     ** Tik :w BESTANDSNAAM om de tekst mÃšt veranderingen op te slaan. **
++
++  1. Tik  :!dir  of  :!ls  om de inhoud van je map te tonen. Je weet
++     inmiddels dat je daarna een <ENTER> moet tikken.
++
++  2. Kies een bestandsnaam die nog niet bestaat, bijvoorbeeld TEST.
++
++  3. Tik nu:  :w TEST  (als je de naam TEST hebt gekozen).
++
++  4. Hierdoor wordt het hele bestand (de VIM lessen) opgeslagen onder de
++     naam TEST. Tik weer  :!dir  of  :!ls  om dit te controleren.
++
++  OPMERKING: Als je Vim zou verlaten en opnieuw zou starten met  vim TEST  is
++             het bestand een exacte kopie van de lessen, zoals je ze opsloeg.
++
++  5. Wis het bestand nu met de opdracht (MS-DOS)  :!del TEST
++                                       of (Unix)  :!rm TEST
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.3: EEN DEEL VAN DE TEKST OPSLAAN
++
++     ** Sla een deel van het bestand op met  v beweging :w BESTANDSNAAM **
++
++  1. Ga naar deze regel.
++
++  2. Tik  v  en ga met de cursor naar stap 5 hieronder. Je ziet dat de
++     tekst oplicht.
++
++  3. Tik  : . Onderaan het scherm zal  :'<,'>  verschijnen.
++
++  4. Tik  w TEST  , waar TEST een bestandsnaam is, die nog niet bestaat.
++     Controleer dat je  :'<,'>w TEST  ziet staan voordat je <ENTER> tikt.
++
++  5. Vim slaat nu de geselecteerde regels op in het bestand TEST. Met
++     :!dir  of  !ls  kan je dat zien. Wis het nog niet! We zullen het in
++     de volgende les gebruiken.
++
++  OPMERKING: Het tikken van  v  zet zichtbare modus ('visual selection') aan.
++             Je kan de cursor rondbewegen om de selectie groter of kleiner
++             te maken. Vervolgens kan je een commando gebruiken om iets met
++             de tekst te doen. Met  d  bijvoorbeeld wis je de tekst.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 5.4: OPHALEN EN SAMENVOEGEN VAN BESTANDEN
++
++     ** Tik  :r BESTANDSNAAM om de inhoud van een bestand in te voegen. **
++
++  1. Zet de cursor precies boven deze regel.
++
++  OPMERKING: Na het uitvoeren van stap 2 zie je tekst van les 5.3. Scrol
++             daarna naar beneden om deze les weer te zien.
++
++  2. Haal nu het bestand TEST op met het commando  :r TEST .
++     Het bestand dat je ophaalt komt onder de regel waarin de cursor staat.
++
++  3. Controleer dat er een bestand is opgehaald. Ga met de cursor omhoog.
++     Dan zie je de tekst van les 5.3 dubbel, het origineel en de versie uit
++     het bestand.
++
++  OPMERKING: Je kan ook de uitvoer van een extern commando inlezen. Om een
++             voorbeeld te geven:  :r !ls  leest de uitvoer van het commando
++             ls en zet dat onder de regel waarin de cursor staat.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 5
++
++  1. :!COMMANDO  voert een extern commando uit.
++     Enkele bruikbare voorbeelden zijn:
++        (MS-DOS)         (Unix)
++         :!dir            :!ls          - laat de inhoud van een map zien
++         :!del BESTAND    :!rm BESTAND  - wist bestand BESTAND
++
++  2. :w BESTANDSNAAM  schrijft het huidige Vim-bestand naar disk met de
++     naam BESTANDSNAAM.
++
++  3. v beweging :w BESTANDSNAAM  laat je in zichtbare modus een fragment
++     selecteren, dat wordt opgeslagen in het bestand BESTANDSNAAM.
++
++  4. :r BESTANDSNAAM  haalt het bestand BESTANDSNAAM op en voegt het onder
++     de cursor-positie in de tekst in.
++
++  5. :r !dir  leest de uitvoer van het externe commando dir en zet het onder
++     de cursor-positie.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.1: HET COMMANDO OPEN
++
++     ** Tik  o  om een regel onder de cursor te openen in invoegmodus. **
++
++  1. Ga naar de eerste regel beneden met --->.
++
++  2. Tik de kleine letter  o  en open daarmee een regel ONDER de cursor en
++     ga naar de invoegmodus.
++
++  3. Tik wat tekst in en sluit af met <ESC> om de invoegmodus te verlaten.
++
++  ---> Als je  o  tikt, komt de cursor in een nieuwe regel in invoegmodus.
++
++  4. Om een regel BOVEN de cursor te openen, moet je gewoon een hoofdletter
++     O  tikken in plaats van een kleine letter. Probeer dat vanaf de volgende
++     regel.
++
++  ---> Open een regel hierboven. Tik een O terwijl de cursor hier staat.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.2: HET COMMANDO TOEVOEGEN
++
++        ** Tik  a  om tekst toe te voegen ACHTER de cursor. **
++
++  1. Ga naar het begin van de regel beneden met --->.
++ 
++  2. Tik  e  tot de cursor op het einde van  "ste"  staat.
++
++  3. Tik een (kleine letter)  a  ('append') om toe te voegen ACHTER de cursor.
++
++  4. Vul het woord aan zoals in de volgende regel. Druk <ESC> om de
++     invoegmodus te verlaten.
++
++  5. Ga met  e  naar het einde van het volgende onvolledige woord en herhaal
++     de stappen 3 en 4.
++
++  ---> Deze regel ste je in staat om te oef in het toevo van tekst. 
++       Deze regel stelt je in staat om te oefenen in het toevoegen van tekst. 
++
++  OPMERKING: a, i en A openen allemaal dezelfde invoegmodus, het enige
++             verschil is waar tekens worden ingevoegd.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.3: VERVANGEN OP EEN ANDERE MANIER
++
++      ** Tik een hoofdletter  R  om meer dan Ã©Ã©n teken te vervangen. **
++
++  1. Ga naar de eerste regel beneden met --->. Ga met de cursor naar het
++     begin van de eerste  "xxx" .
++
++  2. Tik nu  R  en daarna het getal eronder in de tweede regel, zodat  xxx
++     wordt vervangen.
++
++  3. Druk <ESC> om de vervangmodus te verlaten. Je ziet dat de rest van de
++     regel ongewijzigd blijft.
++
++  4. Herhaal de stappen om de overgebleven  xxx  te vervangen.
++
++  ---> Optellen van 123 en xxx geeft je xxx.
++  ---> Optellen van 123 en 456 geeft je 579.
++
++  OPMERKING: Vervangmodus lijkt op invoegmodus, maar elk teken dat je tikt,
++             vervangt een bestaand teken.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.4: TEKST KOPIÃREN EN PLAKKEN
++
++        ** Gebruik  y  om tekst te kopiÃ«ren en  p  om te plakken. **
++
++  1. Ga naar de regel beneden met ---> en zet de cursor achter "a)".
++
++  2. Zet zichtbare modus aan met  v  en zet de cursor juist voor "eerste".
++
++  3. Tik  y  ('yank') om de opgelichte tekst ("dit is het") te kopiÃ«ren.
++
++  4. Ga met  j$  met de cursor naar het einde van de volgende regel.
++
++  5. Plak de gekopieerde tekst met  p  en tik  a tweede <ESC>.
++
++  6. Selecteer in zichtbare modus "onderdeel", kopieer het met  y  en
++     ga met  j$  naar het einde van de tweede regel. Plak de tekst daar
++     met  p .
++
++  --->  a) dit is het eerste onderdeel
++        b)
++
++  OPMERKING: Je kan  y  ook als operator gebruiken;  yw  kopieert een woord,
++             yy  een hele regel.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 6.5: OPTIES GEBRUIKEN
++
++     ** Gebruik een optie voor al dan niet hoofdlettergevoelig zoeken. **
++
++  1. Zoek naar 'hoofdlettergevoelig' met  /hoofdlettergevoelig <ENTER>
++     Herhaal het zoeken enkele keren door  n  te tikken.
++ 
++  2. Schakel de optie 'ic' ('ignore case', niet-hoofdlettergevoelig) in
++     met  :set ic
++
++  3. Zoek met  n  opnieuw naar 'hoofdlettergevoelig'. Je ziet dat
++     Hoofdlettergevoelig en HOOFDLETTERGEVOELIG nu ook gevonden worden.
++
++  4. Schakel de opties 'hlsearch' (treffers oplichten) en 'incsearch' (toon
++     gedeeltelijke treffers bij intikken) in met  :set hls is
++
++  5. Tik weer /hoofdlettergevoelig <ENTER> en kijk wat er gebeurt.
++
++  6. Schakel 'hoofdlettergevoelig' weer in met  :set noic
++
++  OPMERKING: Schakel het oplichten van treffers uit met  :nohlsearch
++
++  OPMERKING: Om bij een enkel zoek-commando de hoofdlettergevoeligheid om
++             te draaien kan  \c  worden gebruikt na de zoekterm:
++             /hoofdlettergevoelig\c <ENTER>.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 6
++
++  1. Tik  o  om een regel te openen ONDER de cursor en invoegmodus te starten.
++     Tik  O  om een regel te openen BOVEN de cursor.
++
++  2. Tik  a  om tekst toe te voegen NA de cursor.
++     Tik  A  om tekst toe te voegen aan het einde van de regel.
++
++  3. Het commando  e  beweegt de cursor naar het einde van een woord.
++
++  4. De operator  y  yankt (kopieert) tekst,  p  zet het terug (plakt).
++
++  5. Met hoofdletter  R  wordt de vervangmodus geopend, met <ESC> afgesloten.
++
++  6. Met  :set xxx  wordt optie 'xxx' ingeschakeld. Opties zijn bijvoorbeeld:
++       ic   ignorecase  geen verschil hoofdletters/kleine letters bij zoeken
++       is   incsearch   toon gedeeltelijke treffers tijdens intikken zoekterm 
++       hls  hlsearch    laat alle treffers oplichten
++     Je kan zowel de lange als de korte naam van een optie gebruiken.
++  
++  7. Zet 'no' voor de naam om een optie uit te schakelen:  :set noic
++     schakelt 'ic' uit.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 7.1: HULP INROEPEN
++
++           ** Het gebruik van ingebouwde hulp. **
++
++  Vim heeft een uitgebreid ingebouwd hulpsysteem. Probeer, om te beginnen,
++  Ã©Ã©n van deze drie:
++    - druk de <HELP> toets (als je die hebt)
++    - druk de <F1> toets (als je die hebt)
++    - tik  :help <ENTER>
++
++  Lees de tekst in het help-venster om te leren hoe 'help' werkt.
++  Tik  CTRL-W CTRL-W  om van het ene venster naar het andere te gaan.
++  Met  :q <ENTER>  wordt het help-venster gesloten.
++
++  Je kan hulp vinden over nagenoeg elk onderwerp door een argument aan het
++  commando  :help  toe te voegen. Probeer deze (en vergeet <ENTER> niet):
++    :help w
++    :help c_CTRL-D
++    :help insert-index
++    :help user-manual
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 7.2: SCHRIJF EEN CONFIGURATIEBESTAND
++
++                    ** Mogelijkheden van Vim uitbreiden. **
++
++  Vim kent veel meer mogelijkheden dan Vi, maar de meeste zijn standaard
++  uitgeschakeld. Om meer functies te gebruiken moet je een 'vimrc'-bestand
++  schrijven.
++
++  1. Bewerk het bestand 'vimrc'. Hoe dat moet hangt af van je systeem:
++      :e ~/.vimrc		voor Unix
++      :e $VIM/_vimrc		voor MS-Windows
++
++  2. Lees de inhoud van het voorbeeld-bestand:
++      :r $VIMRUNTIME/vimrc_example.vim
++
++  3. Sla het bestand op met  :w
++
++  De volgende keer dat je Vim start wordt 'syntaxiskleuring' gebruiken.
++  Je kan al je voorkeursinstellingen toevoegen aan dit 'vimrc'-bestand.
++  Tik  :help vimrc-intro  voor meer informatie.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   Les 7.3: AANVULLEN
++
++      ** Aanvullen van de 'command line' met CTRL-D en <TAB>. **
++
++  1. Zorg dat Vim niet in 'compatible mode' is met  :set nocp
++
++  2. Kijk welke bestanden zich in de map bevinden met  :!ls  of  :!dir
++
++  3. Tik het begin van een commando:  :e
++
++  4. Met  CTRL-D  toont Vim een lijst commando's, die met "e" beginnen.
++
++  5. Druk enkele keren <TAB>. Vim laat aanvullingen zien, zoals ":edit",
++     dat we hier gebruiken.
++
++  6. Voeg een spatie toe en de eerste letter(s) van een bestaande
++     bestandsnaam:  :edit BESTAND
++
++  7. Druk <TAB>. Vim vult de naam aan (als hij uniek is).
++
++  OPMERKING: Aanvullen werkt bij tal van commando's. Probeer gewoon CTRL-D
++             en <TAB>. Het is bijzonder nuttig bij  :help .
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++                   SAMENVATTING Les 7
++
++  1. Tik  :help  of druk <F1> of <Help>  om een help-venster te openen.
++
++  2. Tik  :help CMD  voor hulp over  CMD .
++
++  3. Tik  CTRL-W CTRL-W  om naar een ander venster te gaan.
++
++  4. Tik  :q  om het help-venster te sluiten.
++
++  5. Maak een bestand met de naam 'vimrc' voor je voorkeursinstellingen.
++
++  6. Druk CTRL-D tijdens het intikken van een :-commando om mogelijke
++     aanvullingen te zien. Druk <TAB> om aanvullen te gebruiken.
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++  Hiermee komen de Vim-lessen tot een einde. Ze waren bedoeld om een kort
++  overzicht te geven van de Vim-editor, juist voldoende om de editor
++  redelijk makkelijk te gebruiken. Deze lessen zijn verre van volledig. Vim
++  kent veel meer commando's. Lees hierna de handleiding voor gebruikers:
++  ":help user-manual".
++
++  Voor verdere studie wordt aanbevolen:
++      Vim - Vi Improved - door Steve Oualline
++      Uitgever: New Riders
++  Dit is het eerste boek dat geheel aan Vim is gewijd. Speciaal geschikt
++  voor beginners. Met veel voorbeelden en afbeeldingen.
++  Zie http://iccf-holland.org/click5.html
++
++  Het volgende boek is ouder en gaat meer over Vi dan Vim, maar het wordt
++  toch aanbevolen:
++      Learning the Vi Editor - door Linda Lamb
++      Uitgever: O'Reilly & Associates Inc.
++  Het is een goed boek om nagenoeg alles te weten te komen dat je met Vi
++  zou willen doen. De zesde en vooral de nieuwe zevende druk (onder de
++  titel Learning the Vi and Vim Editors door Arnold Robbins, Elbert Hannah
++  & Linda Lamb) bevat ook informatie over Vim.
++
++  Deze lessen zijn geschreven door Michael C. Pierce en Robert K. Ware,
++  Colorado School of Mines met gebruikmaking van ideeÃ«n van Charles Smith
++  van de Colorado State University. E-mail: bware@mines.colorado.edu.
++
++  Aangepast voor Vim door Bram Moolenaar.
++
++  Nederlandse vertaling door Rob Bishoff, april 2012
++  e-mail: rob.bishoff@hccnet.nl)
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.no vim73/runtime/tutor/tutor.no
+--- vim73.orig/runtime/tutor/tutor.no	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.no	2013-06-07 17:07:28.738926613 +0000
+@@ -658,7 +658,7 @@
+   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
+      at du ser	:'<,'>w TEST  før du trykker Enter.
+ 
+-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
++  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
+      for å se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
+ 
+ MERK: Ved å trykke  v  startes visuelt valg. Du kan flytte markøren rundt for
+diff -Naur vim73.orig/runtime/tutor/tutor.no.utf-8 vim73/runtime/tutor/tutor.no.utf-8
+--- vim73.orig/runtime/tutor/tutor.no.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.no.utf-8	2013-06-07 17:07:28.748926585 +0000
+@@ -658,7 +658,7 @@
+   4. Trykk  w TEST  , der TEST er et filnavn som ikke finnes enda. Kontroller
+      at du ser	:'<,'>w TEST  fÃžr du trykker Enter.
+ 
+-  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  !ls
++  5. Vim vil skrive de valgte linjene til filen TEST. Bruk  :!dir  eller  :!ls
+      for Ã¥ se den. Ikke slett den enda! Vi vil bruke den i neste leksjon.
+ 
+ MERK: Ved Ã¥ trykke  v  startes visuelt valg. Du kan flytte markÃžren rundt for
+diff -Naur vim73.orig/runtime/tutor/tutor.sk vim73/runtime/tutor/tutor.sk
+--- vim73.orig/runtime/tutor/tutor.sk	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.sk	2013-06-07 17:07:28.842259651 +0000
+@@ -671,7 +671,7 @@
+   4. Napí¹ w TEST  , kde TEST je meno súboru, ktorý zatial neexistuje.
+      Skontroluj, e vidí¹  :'<,'>w TEST  predtým neŸ stlaèí¹ Enter.
+ 
+-  5. Vim zapí¹e oznaèené riadky do súboru TEST. PouŸi :!dir  alebo  !ls
++  5. Vim zapí¹e oznaèené riadky do súboru TEST. PouŸi :!dir  alebo  :!ls
+      pre overenie. Zatial ho e¹te nemaŸ! PouŸijeme ho v ïal¹ej lekcii.
+ 
+ POZNÁMKA: Stlaèením klávesy  v  sa spustí vizuálne oznaèovanie.
+diff -Naur vim73.orig/runtime/tutor/tutor.sk.cp1250 vim73/runtime/tutor/tutor.sk.cp1250
+--- vim73.orig/runtime/tutor/tutor.sk.cp1250	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.sk.cp1250	2013-06-07 17:07:28.855592947 +0000
+@@ -671,7 +671,7 @@
+   4. Napí w TEST  , kde TEST je meno súboru, ktorý zatial neexistuje.
+      Skontroluj, e vidí  :'<,'>w TEST  predtým ne stlaèí Enter.
+ 
+-  5. Vim zapíe oznaèené riadky do súboru TEST. Poui :!dir  alebo  !ls
++  5. Vim zapíe oznaèené riadky do súboru TEST. Poui :!dir  alebo  :!ls
+      pre overenie. Zatial ho ete nema! Pouijeme ho v ïalej lekcii.
+ 
+ POZNÁMKA: Stlaèením klávesy  v  sa spustí vizuálne oznaèovanie.
+diff -Naur vim73.orig/runtime/tutor/tutor.sk.utf-8 vim73/runtime/tutor/tutor.sk.utf-8
+--- vim73.orig/runtime/tutor/tutor.sk.utf-8	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.sk.utf-8	2013-06-07 17:07:28.868926242 +0000
+@@ -671,7 +671,7 @@
+   4. NapÃ­Å¡ w TEST  , kde TEST je meno sÃºboru, ktorÃœ zatial neexistuje.
+      Skontroluj, e vidÃ­Å¡  :'<,'>w TEST  predtÃœm neÅŸ stlaÄÃ­Å¡ Enter.
+ 
+-  5. Vim zapÃ­Å¡e oznaÄenÃ© riadky do sÃºboru TEST. PouÅŸi :!dir  alebo  !ls
++  5. Vim zapÃ­Å¡e oznaÄenÃ© riadky do sÃºboru TEST. PouÅŸi :!dir  alebo  :!ls
+      pre overenie. Zatial ho eÅ¡te nemaÅŸ! PouÅŸijeme ho v ÄalÅ¡ej lekcii.
+ 
+ POZNÃMKA: StlaÄenÃ­m klÃ¡vesy  v  sa spustÃ­ vizuÃ¡lne oznaÄovanie.
+diff -Naur vim73.orig/runtime/tutor/tutor.utf-8 vim73/runtime/tutor/tutor.utf-8
+--- vim73.orig/runtime/tutor/tutor.utf-8	2010-08-01 17:09:53.000000000 +0000
++++ vim73/runtime/tutor/tutor.utf-8	2013-06-07 17:07:28.925592747 +0000
+@@ -658,7 +658,7 @@
+   4. Type  w TEST  , where TEST is a filename that does not exist yet.  Verify
+      that you see  :'<,'>w TEST  before you press <ENTER>.
+ 
+-  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  !ls
++  5. Vim will write the selected lines to the file TEST.  Use  :!dir  or  :!ls
+      to see it.  Do not remove it yet!  We will use it in the next lesson.
+ 
+ NOTE:  Pressing  v  starts Visual selection.  You can move the cursor around
+diff -Naur vim73.orig/runtime/tutor/tutor.vim vim73/runtime/tutor/tutor.vim
+--- vim73.orig/runtime/tutor/tutor.vim	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.vim	2013-06-07 17:07:28.938926042 +0000
+@@ -1,7 +1,7 @@
+ " Vim tutor support file
+ " Author: Eduardo F. Amatria <eferna1@platea.pntic.mec.es>
+ " Maintainer: Bram Moolenaar
+-" Last Change:	2008 Jul 21
++" Last Change:	2012 Sep 21
+ 
+ " This Vim script is used for detecting if a translation of the
+ " tutor file exist, i.e., a tutor.xx file, where xx is the language.
+@@ -72,14 +72,20 @@
+   endif
+ endif
+ 
+-" The Chinese tutor is available in two encodings, guess which one to use
++" The Chinese tutor is available in three encodings, guess which one to use
+ " This segment is from the above lines and modified by
+ " Mendel L Chan <beos@turbolinux.com.cn> for Chinese vim tutorial
++" When 'encoding' is utf-8, choose between China (simplified) and Taiwan
++" (traditional) based on the language, suggested by Alick Zhao.
+ if s:ext =~? '\.zh'
+   if &enc =~ 'big5\|cp950'
+     let s:ext = ".zh.big5"
+   elseif &enc != 'utf-8'
+     let s:ext = ".zh.euc"
++  elseif s:ext =~? 'zh_tw' || (exists("s:lang") && s:lang =~? 'zh_tw')
++    let s:ext = ".zh_tw"
++  else
++    let s:ext = ".zh_cn"
+   endif
+ endif
+ 
+diff -Naur vim73.orig/runtime/tutor/tutor.zh.euc vim73/runtime/tutor/tutor.zh.euc
+--- vim73.orig/runtime/tutor/tutor.zh.euc	2010-05-15 11:04:02.000000000 +0000
++++ vim73/runtime/tutor/tutor.zh.euc	2013-06-07 17:07:28.992259223 +0000
+@@ -1,30 +1,32 @@
+ ===============================================================================
+-=      »¶     Ó­     ÔÄ     ¶Á   ¡¶ V I M  œÌ  ³Ì ¡·   ¡ª¡ª     °æ±Ÿ 1.5      =
++=      »¶     Ó­     ÔÄ     ¶Á   ¡¶ V I M  œÌ  ³Ì ¡·   ¡ª¡ª      °æ±Ÿ 1.7       =
+ ===============================================================================
+-     vim ÊÇÒ»žöŸßÓÐºÜ¶àÃüÁîµÄ¹ŠÄÜ·Ç³£Ç¿ŽóµÄ±àŒ­Æ÷¡£ÏÞÓÚÆª·ù£¬ÔÚ±ŸœÌ³Ìµ±ÖÐ
++
++     Vim ÊÇÒ»žöŸßÓÐºÜ¶àÃüÁîµÄ¹ŠÄÜ·Ç³£Ç¿ŽóµÄ±àŒ­Æ÷¡£ÏÞÓÚÆª·ù£¬ÔÚ±ŸœÌ³Ìµ±ÖÐ
+      ŸÍ²»ÏêÏžœéÉÜÁË¡£±ŸœÌ³ÌµÄÉèŒÆÄ¿±êÊÇœ²ÊöÒ»Ð©±ØÒªµÄ»ù±ŸÃüÁî£¬¶øÕÆÎÕºÃÕâ
+-     Ð©ÃüÁî£¬ÄúŸÍÄÜ¹»ºÜÈÝÒ×œ«vimµ±×÷Ò»žöÍšÓÃµÄÍòÄÜ±àŒ­Æ÷ÀŽÊ¹ÓÃÁË¡£
++     Ð©ÃüÁî£¬ÄúŸÍÄÜ¹»ºÜÈÝÒ×µØœ« Vim µ±×÷Ò»žöÍšÓÃ±àŒ­Æ÷ÀŽÊ¹ÓÃÁË¡£
+ 
+      Íê³É±ŸœÌ³ÌµÄÄÚÈÝŽóÔŒÐèÒª25-30·ÖÖÓ£¬È¡ŸöÓÚÄúÑµÁ·µÄÊ±Œä¡£
+ 
++     ×¢Òâ£º
+      Ã¿Ò»œÚµÄÃüÁî²Ù×÷œ«»ážüžÄ±ŸÎÄ¡£ÍÆŒöÄúžŽÖÆ±ŸÎÄµÄÒ»žöž±±Ÿ£¬È»ºóÔÚž±±ŸÉÏ
+      œøÐÐÑµÁ·(Èç¹ûÄúÊÇÍš¹ý"vimtutor"ÀŽÆô¶¯œÌ³ÌµÄ£¬ÄÇÃŽ±ŸÎÄŸÍÒÑŸ­ÊÇž±±ŸÁË)¡£
+ 
+-     ÇÐŒÇÒ»µã¡Ã±ŸœÌ³ÌµÄÉèŒÆËŒÂ·ÊÇÔÚÊ¹ÓÃÖÐœøÐÐÑ§Ï°µÄ¡£Ò²ŸÍÊÇËµ£¬ÄúÐèÒªÍš¹ý
++     ÇÐŒÇÒ»µã£º±ŸœÌ³ÌµÄÉèŒÆËŒÂ·ÊÇÔÚÊ¹ÓÃÖÐœøÐÐÑ§Ï°µÄ¡£Ò²ŸÍÊÇËµ£¬ÄúÐèÒªÍš¹ý
+      ÖŽÐÐÃüÁîÀŽÑ§Ï°ËüÃÇ±ŸÉíµÄÕýÈ·ÓÃ·š¡£Èç¹ûÄúÖ»ÊÇÔÄ¶Á¶ø²»²Ù×÷£¬ÄÇÃŽÄú¿ÉÄÜ
+      »áºÜ¿ìÒÅÍüÕâÐ©ÃüÁîµÄ£¡
+ 
+      ºÃÁË£¬ÏÖÔÚÇëÈ·¶šÄúµÄShift-Lock(ŽóÐ¡ÐŽËø¶šŒü)»¹Ã»ÓÐ°ŽÏÂ£¬È»ºó°ŽŒüÅÌÉÏ
+-     µÄ×ÖÄžŒü j ×ã¹»¶àµÄŽÎÊýÀŽÒÆ¶¯¹â±ê£¬Ö±µœµÚÒ»œÚµÄÄÚÈÝÄÜ¹»ÍêÈ«³äÂúÆÁÄ»¡£
++     µÄ×ÖÄžŒü j ×ã¹»¶àŽÎÀŽÒÆ¶¯¹â±ê£¬Ö±µœµÚÒ»œÚµÄÄÚÈÝÄÜ¹»ÍêÈ«³äÂúÆÁÄ»¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			µÚÒ»œ²µÚÒ»œÚ¡ÃÒÆ¶¯¹â±ê
++			µÚÒ»œ²µÚÒ»œÚ£ºÒÆ¶¯¹â±ê
+ 
+ 
+-   ¡ù¡ù ÒªÒÆ¶¯¹â±ê£¬ÇëÒÀÕÕËµÃ÷·Ö±ð°ŽÏÂ h¡¢j¡¢k¡¢l Œü¡£ ¡ù¡ù
++	     ** ÒªÒÆ¶¯¹â±ê£¬ÇëÒÀÕÕËµÃ÷·Ö±ð°ŽÏÂ h¡¢j¡¢k¡¢l Œü¡£ **
+ 
+ 	     ^
+-	     k		    ÌáÊŸ¡Ã h µÄŒüÎ»ÓÚ×ó±ß£¬Ã¿ŽÎ°ŽÏÂŸÍ»áÏò×óÒÆ¶¯¡£
++	     k		    ÌáÊŸ£º h µÄŒüÎ»ÓÚ×ó±ß£¬Ã¿ŽÎ°ŽÏÂŸÍ»áÏò×óÒÆ¶¯¡£
+        < h	 l >		   l µÄŒüÎ»ÓÚÓÒ±ß£¬Ã¿ŽÎ°ŽÏÂŸÍ»áÏòÓÒÒÆ¶¯¡£
+ 	     j			   j Œü¿ŽÆðÀŽºÜÏóÒ»Ö§Œâ¶Ë·œÏò³¯ÏÂµÄŒýÍ·¡£
+ 	     v
+@@ -35,43 +37,38 @@
+ 
+ ---> ÏÖÔÚÄúÓŠžÃÒÑŸ­Ñ§»áÈçºÎÒÆ¶¯µœÏÂÒ»œ²°É¡£
+ 
+-  3. ÏÖÔÚÇëÊ¹ÓÃÏÂÐÐŒü£¬œ«¹â±êÒÆ¶¯µœµÚ¶þœ²¡£
++  3. ÏÖÔÚÇëÊ¹ÓÃÏÂÐÐŒü£¬œ«¹â±êÒÆ¶¯µœµÚÒ»œ²µÚ¶þœÚ¡£
+ 
+-ÌáÊŸ¡ÃÈç¹ûÄú²»žÒÈ·¶šÄúËù°ŽÏÂµÄ×ÖÄž£¬Çë°ŽÏÂ<ESC>Œü»ØµœÕý³£(Normal)Ä£Êœ¡£
++ÌáÊŸ£ºÈç¹ûÄú²»žÒÈ·¶šÄúËù°ŽÏÂµÄ×ÖÄž£¬Çë°ŽÏÂ<ESC>Œü»ØµœÕý³£(Normal)Ä£Êœ¡£
+       È»ºóÔÙŽÎŽÓŒüÅÌÊäÈëÄúÏëÒªµÄÃüÁî¡£
+ 
+-ÌáÊŸ¡Ã¹â±êŒüÓŠµ±Ò²ÄÜÕý³£¹€×÷µÄ¡£µ«ÊÇÊ¹ÓÃhjklŒü£¬ÔÚÏ°¹ßÖ®ºóÄúŸÍÄÜ¹»¿ìËÙ
+-      µØÔÚÆÁÄ»ÄÚËÄŽŠÒÆ¶¯¹â±êÁË¡£
++ÌáÊŸ£º¹â±êŒüÓŠµ±Ò²ÄÜÕý³£¹€×÷µÄ¡£µ«ÊÇÊ¹ÓÃhjklŒü£¬ÔÚÏ°¹ßÖ®ºóÄúŸÍÄÜ¹»žü¿ì
++      µØÔÚÆÁÄ»ÄÚËÄŽŠÒÆ¶¯¹â±ê¡£ÕæµÄÊÇÕâÑù£¡
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			µÚÒ»œ²µÚ¶þœÚ¡ÃVIMµÄœøÈëºÍÍË³ö
+-
++			µÚÒ»œ²µÚ¶þœÚ£ºVIMµÄœøÈëºÍÍË³ö
+ 
+-  !! ÌØ±ðÌáÊŸ¡ÃŸŽÇëÔÄ¶ÁÍêÕû±ŸÒ»œÚµÄÄÚÈÝ£¬È»ºó²ÅÄÜÖŽÐÐÒÔÏÂËùœ²œâµÄÃüÁî¡£
+ 
+-  1. Çë°Ž<ESC>Œü(ÕâÊÇÎªÁËÈ·±£ÄúŽŠÔÚÕý³£Ä£Êœ)¡£
++  !! ÌØ±ðÌáÊŸ£ºŸŽÇëÔÄ¶Á±ŸÒ»œÚµÄÍêÕûÄÚÈÝ£¬È»ºóÔÙÖŽÐÐÒÔÏÂËùœ²œâµÄÃüÁî¡£
+ 
+-  2. È»ºóÊäÈë¡Ã			:q! <»Ø³µ>
++  1. °Ž<ESC>Œü(ÕâÊÇÎªÁËÈ·±£ÄúŽŠÔÚÕý³£Ä£Êœ)¡£
+ 
+----> ÕâÖÖ·œÊœµÄÍË³ö±àŒ­Æ÷Ÿø²»»á±£ŽæÄúœøÈë±àŒ­Æ÷ÒÔÀŽËù×öµÄžÄ¶¯¡£
+-     Èç¹ûÄúÏë±£ŽæžüžÄÔÙÍË³ö£¬ÇëÊäÈë¡Ã
+-				:wq  <»Ø³µ>
++  2. È»ºóÊäÈë£º			:q! <»Ø³µ>
++     ÕâÖÖ·œÊœµÄÍË³ö±àŒ­Æ÷»á¶ªÆúÄúœøÈë±àŒ­Æ÷ÒÔÀŽËù×öµÄžÄ¶¯¡£
+ 
+-  3. Èç¹ûÄú¿ŽµœÁËÃüÁîÐÐÌáÊŸ·û£¬ÇëÊäÈëÄÜ¹»ŽøÄú»Øµœ±ŸœÌ³ÌµÄÃüÁî£¬ÄÇŸÍÊÇ¡Ã
++  3. Èç¹ûÄú¿ŽµœÁËÃüÁîÐÐÌáÊŸ·û£¬ÇëÊäÈëÄÜ¹»ŽøÄú»Øµœ±ŸœÌ³ÌµÄÃüÁî£¬ÄÇŸÍÊÇ£º
++     vimtutor <»Ø³µ>
+ 
+-		vimtutor <»Ø³µ>
++  4. Èç¹ûÄú×ÔÐÅÒÑŸ­ÀÎÀÎŒÇ×¡ÁËÕâÐ©²œÖèµÄ»°£¬ÇëŽÓ²œÖè1ÖŽÐÐµœ²œÖè3ÍË³ö£¬È»
++     ºóÔÙŽÎœøÈë±àŒ­Æ÷¡£
+ 
+-     Íš³£Çé¿öÏÂÄúÒ²¿ÉÒÔÓÃÕâÖÖ·œÊœ¡Ã
++ÌáÊŸ£º :q! <»Ø³µ> »á¶ªÆúÄúËù×öµÄÈÎºÎžÄ¶¯¡£Œžœ²Ö®ºóÄúœ«Ñ§»áÈçºÎ±£ŽæžÄ¶¯µœÎÄŒþ¡£
+ 
+-		vim tutor <»Ø³µ>
++  5. œ«¹â±êÏÂÒÆµœµÚÒ»œ²µÚÈýœÚ¡£
+ 
+----> ÕâÀïµÄ 'vim' ±íÊŸœøÈëvim±àŒ­Æ÷£¬¶ø 'tutor'ÔòÊÇÄú×Œ±žÒª±àŒ­µÄÎÄŒþ¡£
+-
+-  4. Èç¹ûÄú×ÔÐÅÒÑŸ­ÀÎÀÎŒÇ×¡ÁËÕâÐ©²œÖèµÄ»°£¬ÇëŽÓ²œÖè1ÖŽÐÐµœ²œÖè3ÍË³ö£¬È»
+-     ºóÔÙŽÎœøÈë±àŒ­Æ÷¡£œÓ×Åœ«¹â±êÒÆ¶¯µœµÚÒ»œ²µÚÈýœÚÀŽŒÌÐøÎÒÃÇµÄœÌ³Ìœ²œâ¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			µÚÒ»œ²µÚÈýœÚ¡ÃÎÄ±Ÿ±àŒ­Ö®ÉŸ³ý
++			µÚÒ»œ²µÚÈýœÚ£ºÎÄ±Ÿ±àŒ­Ö®ÉŸ³ý
+ 
+ 
+    ** ÔÚÕý³£(Normal)Ä£ÊœÏÂ£¬¿ÉÒÔ°ŽÏÂ x ŒüÀŽÉŸ³ý¹â±êËùÔÚÎ»ÖÃµÄ×Ö·û¡£**
+@@ -86,89 +83,130 @@
+ 
+ ---> The ccow jumpedd ovverr thhe mooon.
+ 
+-  5. ºÃÁË£¬žÃÐÐÒÑŸ­ÐÞÕýÁË£¬ÏÂÒ»œÚÄÚÈÝÊÇµÚÒ»œ²µÚËÄœÚ¡£
++  5. ºÃÁË£¬žÃÐÐÒÑŸ­ÐÞÕýÁË£¬ÏÂÃæÊÇµÚÒ»œ²µÚËÄœÚ¡£
+ 
+-ÌØ±ðÌáÊŸ¡ÃÔÚÄúä¯ÀÀ±ŸœÌ³ÌÊ±£¬²»ÒªÇ¿ÐÐŒÇÒä¡£ŒÇ×¡Ò»µã¡ÃÔÚÊ¹ÓÃÖÐÑ§Ï°¡£
++ÌØ±ðÌáÊŸ£ºÔÚä¯ÀÀ±ŸœÌ³ÌÊ±£¬²»ÒªÇ¿ÐÐŒÇÒä¡£ŒÇ×¡Ò»µã£ºÔÚÊ¹ÓÃÖÐÑ§Ï°¡£
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		     µÚÒ»œ²µÚËÄœÚ¡ÃÎÄ±Ÿ±àŒ­Ö®²åÈë
++		     µÚÒ»œ²µÚËÄœÚ£ºÎÄ±Ÿ±àŒ­Ö®²åÈë
+ 
+ 
+ 	 ** ÔÚÕý³£Ä£ÊœÏÂ£¬¿ÉÒÔ°ŽÏÂ i ŒüÀŽ²åÈëÎÄ±Ÿ¡£**
+ 
+   1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐ¡£
+ 
+-  2. ÎªÁËÊ¹µÃµÚÒ»ÐÐÄÚÈÝÀ×Í¬ÓÚµÚ¶þÐÐ£¬Çëœ«¹â±êÒÆÖÁÎÄ±ŸµÚÒ»žö×Ö·û×Œ±ž²åÈë
++  2. ÎªÁËÊ¹µÃµÚÒ»ÐÐÄÚÈÝÀ×Í¬ÓÚµÚ¶þÐÐ£¬Çëœ«¹â±êÒÆÖÁÎÄ±ŸµÚÒ»žö×Œ±ž²åÈë×Ö·û
+      µÄÎ»ÖÃ¡£
+ 
+   3. È»ºó°ŽÏÂ i Œü£¬œÓ×ÅÊäÈë±ØÒªµÄÎÄ±Ÿ×Ö·û¡£
+ 
+-  4. ËùÓÐÎÄ±Ÿ¶ŒÐÞÕýÍê±Ï£¬Çë°ŽÏÂ <ESC> Œü·µ»ØÕý³£Ä£Êœ¡£
++  4. Ã¿žöŽíÎóÐÞÕýÍê±Ïºó£¬Çë°ŽÏÂ <ESC> Œü·µ»ØÕý³£Ä£Êœ¡£
+      ÖØžŽ²œÖè2ÖÁ²œÖè4ÒÔ±ãÐÞÕýŸä×Ó¡£
+ 
+ ---> There is text misng this .
+ ---> There is some text missing from this line.
+ 
+-  5. Èç¹ûÄú¶ÔÎÄ±Ÿ²åÈë²Ù×÷ÒÑŸ­ºÜÂúÒâ£¬ÇëœÓ×ÅÔÄ¶ÁÏÂÃæµÄÐ¡œá¡£
++  5. Èç¹ûÄú¶ÔÎÄ±Ÿ²åÈë²Ù×÷ÒÑŸ­ºÜÂúÒâ£¬ÇëœÓ×ÅÔÄ¶ÁÏÂÃæµÄµÚÒ»œ²µÚÎåœÚ¡£
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			       µÚÒ»œ²Ð¡œá
++		     µÚÒ»œ²µÚÎåœÚ£ºÎÄ±Ÿ±àŒ­Ö®ÌíŒÓ
+ 
+ 
+-  1. ¹â±êÔÚÆÁÄ»ÎÄ±ŸÖÐµÄÒÆ¶¯ŒÈ¿ÉÒÔÓÃŒýÍ·Œü£¬Ò²¿ÉÒÔÊ¹ÓÃ hjkl ×ÖÄžŒü¡£
+-	 h (×óÒÆ)	j (ÏÂÐÐ)       k (ÉÏÐÐ)	    l (ÓÒÒÆ)
++			** °Ž A ŒüÒÔÌíŒÓÎÄ±Ÿ¡£ **
++
++  1. ÒÆ¶¯¹â±êµœÏÂÃæµÚÒ»žö±êŒÇÓÐ ---> µÄÒ»ÐÐ¡£
++     ¹â±ê·ÅÔÚÄÇÒ»ÐÐµÄÄÄžö×Ö·ûÉÏ²¢²»ÖØÒª¡£
++
++  2. °Ž A ŒüÊäÈë±ØÒªµÄÌíŒÓÄÚÈÝ¡£
++
++  3. ÎÄ±ŸÌíŒÓÍê±Ïºó£¬°Ž <ESC> Œü»ØµœÕý³£Ä£Êœ¡£
++
++  4. ÒÆ¶¯¹â±êµœÏÂÃæµÚ¶þžö±êŒÇÓÐ ---> µÄÒ»ÐÐ¡£ÖØžŽ²œÖè2ºÍ²œÖè3ÒÔžÄÕýÕâžöŸä×Ó¡£
++
++---> There is some text missing from th
++     There is some text missing from this line.
++---> There is also some text miss
++     There is also some text missing here.
++
++  5. µ±Äú¶ÔÌíŒÓÎÄ±Ÿ²Ù×÷žÐµœÂúÒâÊ±£¬ÇëŒÌÐøÑ§Ï°µÚÒ»œ²µÚÁùœÚ¡£
+ 
+-  2. ÓûœøÈëvim±àŒ­Æ÷(ŽÓÃüÁîÐÐÌáÊŸ·û)£¬ÇëÊäÈë¡Ãvim ÎÄŒþÃû <»Ø³µ>
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     µÚÒ»œ²µÚÁùœÚ£º±àŒ­ÎÄŒþ
++
++		    ** Ê¹ÓÃ :wq ÒÔ±£ŽæÎÄŒþ²¢ÍË³ö¡£ **
++
++  ÌØ±ðÌáÊŸ£ºÔÚÖŽÐÐÒÔÏÂ²œÖèÖ®Ç°£¬ÇëÏÈ¶ÁÍêÕûžöÐ¡œÚ£¡
++
++  1. ÈçÄúÔÚµÚÒ»œ²µÚ¶þœÚÖÐËù×öµÄÄÇÑùÍË³ö±ŸœÌ³Ì£º :q!
++     »òÕß£¬Èç¹ûÄú¿ÉÒÔ·ÃÎÊÁíÒ»žöÖÕ¶Ë£¬ÇëÔÚÄÇÀïÖŽÐÐÒÔÏÂ²Ù×÷¡£
++
++  2. ÔÚ shell µÄÌáÊŸ·ûÏÂÊäÈëÃüÁî£º vim tutor <»Ø³µ>
++     'vim'ÊÇÆô¶¯ Vim ±àŒ­Æ÷µÄÃüÁî£¬'tutor'ÊÇÄúÏ£Íû±àŒ­µÄÎÄŒþµÄÃû×Ö¡£
++     ÇëÊ¹ÓÃÒ»žö¿ÉÒÔžÄ¶¯µÄÎÄŒþ¡£
++
++  3. Ê¹ÓÃÄúÔÚÇ°ÃæµÄœÌ³ÌÖÐÑ§µœµÄÃüÁî²åÈëÉŸ³ýÎÄ±Ÿ¡£
++
++  4. ±£ŽæžÄ¶¯¹ýµÄÎÄŒþ²¢ÍË³ö Vim£¬°ŽÕâÐ©Œü£º :wq  <»Ø³µ>
+ 
+-  3. ÓûÍË³övim±àŒ­Æ÷£¬ÇëÊäÈëÒÔÏÂÃüÁî·ÅÆúËùÓÐÐÞžÄ¡Ã
++  5. Èç¹ûÄúÔÚ²œÖè1ÖÐÒÑŸ­ÍË³ö vimtutor£¬ÇëÖØÆô vimtutor ÒÆ¶¯µœÏÂÃæµÄÐ¡œáÒ»œÚ¡£
+ 
+-	<ESC>   :q!	 <»Ø³µ>
++  6. ÔÄ¶ÁÍêÒÔÉÏ²œÖè£¬Åª¶®ËüÃÇµÄÒâÒå£¬È»ºóÔÚÊµŒùÖÐœøÐÐÁ·Ï°¡£
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       µÚÒ»œ²Ð¡œá
++
++
++  1. ¹â±êÔÚÆÁÄ»ÎÄ±ŸÖÐµÄÒÆ¶¯ŒÈ¿ÉÒÔÓÃŒýÍ·Œü£¬Ò²¿ÉÒÔÊ¹ÓÃ hjkl ×ÖÄžŒü¡£
++	 h (×óÒÆ)	j (ÏÂÐÐ)       k (ÉÏÐÐ)	    l (ÓÒÒÆ)
+ 
+-     »òÕßÊäÈëÒÔÏÂÃüÁî±£ŽæËùÓÐÐÞžÄ¡Ã
++  2. ÓûœøÈë Vim ±àŒ­Æ÷(ŽÓÃüÁîÐÐÌáÊŸ·û)£¬ÇëÊäÈë£ºvim ÎÄŒþÃû <»Ø³µ>
+ 
+-	<ESC>   :wq	 <»Ø³µ>
++  3. ÓûÍË³ö Vim ±àŒ­Æ÷£¬ÇëÊäÈë <ESC>   :q!   <»Ø³µ> ·ÅÆúËùÓÐžÄ¶¯¡£
++                      »òÕßÊäÈë <ESC>   :wq   <»Ø³µ> ±£ŽæžÄ¶¯¡£
+ 
+-  4. ÔÚÕý³£Ä£ÊœÏÂÉŸ³ý¹â±êËùÔÚÎ»ÖÃµÄ×Ö·û£¬Çë°Ž¡Ã x
++  4. ÔÚÕý³£Ä£ÊœÏÂÉŸ³ý¹â±êËùÔÚÎ»ÖÃµÄ×Ö·û£¬Çë°Ž£º x
+ 
+-  5. ÔÚÕý³£Ä£ÊœÏÂÒªÔÚ¹â±êËùÔÚÎ»ÖÃ¿ªÊŒ²åÈëÎÄ±Ÿ£¬Çë°Ž¡Ã
++  5. Óû²åÈë»òÌíŒÓÎÄ±Ÿ£¬ÇëÊäÈë£º
+ 
+-	 i     ÊäÈë±ØÒªÎÄ±Ÿ	<ESC>
++	 i   ÊäÈëÓû²åÈëÎÄ±Ÿ   <ESC>		ÔÚ¹â±êÇ°²åÈëÎÄ±Ÿ
++	 A   ÊäÈëÓûÌíŒÓÎÄ±Ÿ   <ESC>             ÔÚÒ»ÐÐºóÌíŒÓÎÄ±Ÿ
+ 
+-ÌØ±ðÌáÊŸ¡Ã°ŽÏÂ <ESC> Œü»áŽøÄú»ØµœÕý³£Ä£Êœ»òÕßÈ¡ÏûÒ»žö²»ÆÚÍû»òÕß²¿·ÖÍê³É
++ÌØ±ðÌáÊŸ£º°ŽÏÂ <ESC> Œü»áŽøÄú»ØµœÕý³£Ä£Êœ»òÕß³·ÏûÒ»žö²»ÏëÊäÈë»ò²¿·ÖÍêÕû
+ µÄÃüÁî¡£
+ 
+ ºÃÁË£¬µÚÒ»œ²µœŽËœáÊø¡£ÏÂÃæœÓÏÂÀŽŒÌÐøµÚ¶þœ²µÄÄÚÈÝ¡£
+ 
+ 
++
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			µÚ¶þœ²µÚÒ»œÚ¡ÃÉŸ³ýÀàÃüÁî
++			µÚ¶þœ²µÚÒ»œÚ£ºÉŸ³ýÀàÃüÁî
+ 
+ 
+-	    ** ÊäÈë dw ¿ÉÒÔŽÓ¹â±êŽŠÉŸ³ýÖÁÒ»žöµ¥×Ö/µ¥ŽÊµÄÄ©Î²¡£**
++	    ** ÊäÈë dw ¿ÉÒÔŽÓ¹â±êŽŠÉŸ³ýÖÁÒ»žöµ¥ŽÊµÄÄ©Î²¡£**
+ 
+   1. Çë°ŽÏÂ <ESC> ŒüÈ·±£ÄúŽŠÓÚÕý³£Ä£Êœ¡£
+ 
+   2. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄÄÇÒ»ÐÐ¡£
+ 
+-  3. Çëœ«¹â±êÒÆÖÁ×Œ±žÒªÉŸ³ýµÄµ¥ŽÊµÄ¿ªÊŒ¡£
++  3. Çëœ«¹â±êÒÆÖÁ×Œ±žÒªÉŸ³ýµÄµ¥ŽÊµÄÆðÊŒŽŠ¡£
+ 
+   4. œÓ×ÅÊäÈë dw ÉŸ³ýµôžÃµ¥ŽÊ¡£
+ 
+-  ÌØ±ðÌáÊŸ¡ÃÄúËùÊäÈëµÄ dw »áÔÚÄúÊäÈëµÄÍ¬Ê±³öÏÖÔÚÆÁÄ»µÄ×îºóÒ»ÐÐ¡£Èç¹ûÄúÊä
+-  ÈëÓÐÎó£¬Çë°ŽÏÂ <ESC> ŒüÈ¡Ïû£¬È»ºóÖØÐÂÔÙÀŽ¡£
++  ÌØ±ðÌáÊŸ£ºµ±ÄúÊäÈëÊ±£¬×ÖÄž d »áÍ¬Ê±³öÏÖÔÚÆÁÄ»µÄ×îºóÒ»ÐÐ¡£Vim ÔÚµÈŽýÄúÊäÈë
++  ×ÖÄž w¡£Èç¹ûÄú¿ŽµœµÄÊÇ³ý d ÍâµÄÆäËû×Ö·û£¬ÄÇ±íÃ÷Äú°ŽŽíÁË£»Çë°ŽÏÂ <ESC> Œü£¬
++  È»ºóÖØÐÂÔÙÀŽ¡£
+ 
+ ---> There are a some words fun that don't belong paper in this sentence.
+ 
+-  5. ÖØžŽ²œÖè3ÖÁ²œÖè4£¬Ö±ÖÁŸä×ÓÐÞÕýÍê±Ï¡£œÓ×ÅŒÌÐøµÚ¶þœ²µÚ¶þœÚÄÚÈÝ¡£
+-
++  5. ÖØžŽ²œÖè3ºÍ²œÖè4£¬Ö±ÖÁŸä×ÓÐÞÕýÍê±Ï¡£œÓ×ÅŒÌÐøµÚ¶þœ²µÚ¶þœÚÄÚÈÝ¡£
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		      µÚ¶þœ²µÚ¶þœÚ¡ÃÆäËûÉŸ³ýÀàÃüÁî
++		      µÚ¶þœ²µÚ¶þœÚ£ºžü¶àÉŸ³ýÀàÃüÁî
+ 
+ 
+ 		   ** ÊäÈë d$ ŽÓµ±Ç°¹â±êÉŸ³ýµœÐÐÄ©¡£**
+@@ -191,58 +229,102 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		     µÚ¶þœ²µÚÈýœÚ¡Ã¹ØÓÚÃüÁîºÍ¶ÔÏó
++		     µÚ¶þœ²µÚÈýœÚ£º¹ØÓÚÃüÁîºÍ¶ÔÏó
+ 
+ 
+-  ÉŸ³ýÃüÁî d µÄžñÊœÈçÏÂ¡Ã
++  Ðí¶àžÄ±äÎÄ±ŸµÄÃüÁî¶ŒÓÉÒ»žö²Ù×÷·ûºÍÒ»žö¶¯×÷¹¹³É¡£
++  Ê¹ÓÃÉŸ³ý²Ù×÷·û d µÄÉŸ³ýÃüÁîµÄžñÊœÈçÏÂ£º
+ 
+-	 [number]   d	object	    »òÕß     d	 [number]   object
++	d   motion
+ 
+-  ÆäÒâÈçÏÂ¡Ã
+-    number - Žú±íÖŽÐÐÃüÁîµÄŽÎÊý(¿ÉÑ¡Ïî£¬È±Ê¡ÉèÖÃÎª 1 )¡£
+-    d - Žú±íÉŸ³ý¡£
+-    object - Žú±íÃüÁîËùÒª²Ù×÷µÄ¶ÔÏó(ÏÂÃæÓÐÏà¹ØœéÉÜ)¡£
++  ÆäÖÐ£º
++    d      - ÉŸ³ý²Ù×÷·û¡£
++    motion - ²Ù×÷·ûµÄ²Ù×÷¶ÔÏó(ÔÚÏÂÃæÁÐ³ö)¡£
+ 
+-  Ò»žöŒò¶ÌµÄ¶ÔÏóÁÐ±í¡Ã
+-    w - ŽÓµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µœµ¥×Ö/µ¥ŽÊÄ©Î²£¬°üÀš¿Õžñ¡£
+-    e - ŽÓµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µœµ¥×Ö/µ¥ŽÊÄ©Î²£¬µ«ÊÇ *²»* °üÀš¿Õžñ¡£
++  Ò»žöŒò¶ÌµÄ¶¯×÷ÁÐ±í£º
++    w - ŽÓµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µœÏÂÒ»žöµ¥ŽÊÆðÊŒŽŠ£¬²»°üÀšËüµÄµÚÒ»žö×Ö·û¡£
++    e - ŽÓµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µœµ¥ŽÊÄ©Î²£¬°üÀš×îºóÒ»žö×Ö·û¡£
+     $ - ŽÓµ±Ç°¹â±êµ±Ç°Î»ÖÃÖ±µœµ±Ç°ÐÐÄ©¡£
+ 
+-ÌØ±ðÌáÊŸ¡Ã
+-    ¶ÔÓÚÓÂÓÚÌœË÷Õß£¬ÇëÔÚÕý³£Ä£ÊœÏÂÃæœö°ŽŽú±íÏàÓŠ¶ÔÏóµÄŒü¶ø²»Ê¹ÓÃÃüÁî£¬Ôò
++  ÒòŽËÊäÈë de »áŽÓµ±Ç°¹â±êÎ»ÖÃÉŸ³ýµœµ¥ŽÊÄ©Î²¡£
++
++ÌØ±ðÌáÊŸ£º
++    ¶ÔÓÚÓÂÓÚÌœË÷Õß£¬ÇëÔÚÕý³£Ä£ÊœÏÂÃæœö°ŽŽú±íÏàÓŠ¶¯×÷µÄŒü¶ø²»Ê¹ÓÃ²Ù×÷·û£¬Äú
+     œ«¿Žµœ¹â±êµÄÒÆ¶¯ÕýÈçÉÏÃæµÄ¶ÔÏóÁÐ±íËùŽú±íµÄÒ»Ñù¡£
+ 
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     µÚ¶þœ²µÚËÄœÚ£ºÊ¹ÓÃŒÆÊýÖž¶š¶¯×÷
++
++
++             ** ÔÚ¶¯×÷Ç°ÊäÈëÊý×Ö»áÊ¹ËüÖØžŽÄÇÃŽ¶àŽÎ¡£ **
++
++  1. ÒÆ¶¯¹â±êµœÏÂÃæ±êŒÇÓÐ ---> µÄÒ»ÐÐµÄ¿ªÊŒ¡£
++
++  2. ÊäÈë 2w Ê¹¹â±êÏòÇ°ÒÆ¶¯Áœžöµ¥ŽÊ¡£
++
++  3. ÊäÈë 3e Ê¹¹â±êÏòÇ°ÒÆ¶¯µœµÚÈýžöµ¥ŽÊµÄÄ©Î²¡£
++
++  4. ÊäÈë 0 (Êý×ÖÁã) ÒÆ¶¯¹â±êµœÐÐÊ×¡£
++
++  5. ÖØžŽ²œÖè2ºÍ²œÖè3£¬³¢ÊÔ²»Í¬µÄÊý×Ö¡£
++
++---> This is just a line with words you can move around in.
++
++  6. ÇëŒÌÐøÑ§Ï°µÚ¶þœ²µÚÎåœÚ¡£
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       µÚ¶þœ²µÚÎåœÚ£ºÊ¹ÓÃŒÆÊýÒÔÉŸ³ýžü¶à
++
++
++	       ** Ê¹ÓÃ²Ù×÷·ûÊ±ÊäÈëÊý×Ö¿ÉÒÔÊ¹ËüÖØžŽÄÇÃŽ¶àŽÎ¡£ **
++
++  ÉÏÃæÒÑŸ­Ìáµœ¹ýÉŸ³ý²Ù×÷·ûºÍ¶¯×÷µÄ×éºÏ£¬Äú¿ÉÒÔÔÚ×éºÏÖÐ¶¯×÷Ö®Ç°²åÈëÒ»žöÊý×ÖÒÔ
++  ÉŸ³ýžü¶à£º
++	 d   number(Êý×Ö)   motion
++
++  1. ÒÆ¶¯¹â±êµœÏÂÃæ±êŒÇÓÐ ---> µÄÒ»ÐÐÖÐµÚÒ»žöŽóÐŽ×ÖÄžµ¥ŽÊÉÏ¡£
++
++  2. ÊäÈë d2w ÒÔÉŸ³ýÁœžöŽóÐŽ×ÖÄžµ¥ŽÊ¡£
++
++  3. ÖØžŽ²œÖè1ºÍ²œÖè2£¬Ê¹ÓÃ²»Í¬µÄÊý×ÖÊ¹µÃÓÃÒ»žöÃüÁîŸÍÄÜÉŸ³ýÈ«²¿ÏàÁÚµÄŽóÐŽ×ÖÄž
++     µ¥ŽÊ
++
++--->  this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
++
++
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		µÚ¶þœ²µÚËÄœÚ¡Ã¶ÔÏóÃüÁîµÄÌØÊâÇé¿ö
++			    µÚ¶þœ²µÚÁùœÚ£º²Ù×÷ÕûÐÐ
+ 
+ 
+-	       ** ÊäÈë dd ¿ÉÒÔÉŸ³ýÕûÒ»žöµ±Ç°ÐÐ¡£ **
++		     ** ÊäÈë dd ¿ÉÒÔÉŸ³ýÕûÒ»žöµ±Ç°ÐÐ¡£ **
+ 
+-  ŒøÓÚÕûÐÐÉŸ³ýµÄžßÆµ¶È£¬VIM µÄÉèŒÆÕßŸö¶šÒªŒò»¯ÕûÐÐÉŸ³ý£¬œöÐèÒªÔÚÍ¬Ò»ÐÐÉÏ
++  ŒøÓÚÕûÐÐÉŸ³ýµÄžßÆµ¶È£¬Vi µÄÉèŒÆÕßŸö¶šÒªŒò»¯ÕûÐÐÉŸ³ý²Ù×÷£¬ÄúœöÐèÒªÔÚÍ¬Ò»ÐÐÉÏ
+   »÷ŽòÁœŽÎ d ŸÍ¿ÉÒÔÉŸ³ýµô¹â±êËùÔÚµÄÕûÐÐÁË¡£
+ 
+   1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæµÄ¶ÌŸä¶ÎÂäÖÐµÄµÚ¶þÐÐ¡£
+   2. ÊäÈë dd ÉŸ³ýžÃÐÐ¡£
+   3. È»ºóÒÆ¶¯µœµÚËÄÐÐ¡£
+-  4. œÓ×ÅÊäÈë 2dd (»¹ŒÇµÃÇ°Ãæœ²¹ýµÄ number-command-object Âð£¿) ÉŸ³ýÁœÐÐ¡£
++  4. œÓ×ÅÊäÈë 2dd ÉŸ³ýÁœÐÐ¡£
+ 
+-      1)  Roses are red,
+-      2)  Mud is fun,
+-      3)  Violets are blue,
+-      4)  I have a car,
+-      5)  Clocks tell time,
+-      6)  Sugar is sweet
+-      7)  And so are you.
++--->  1)  Roses are red,
++--->  2)  Mud is fun,
++--->  3)  Violets are blue,
++--->  4)  I have a car,
++--->  5)  Clocks tell time,
++--->  6)  Sugar is sweet
++--->  7)  And so are you.
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			 µÚ¶þœ²µÚÎåœÚ¡Ã³·ÏûÀàÃüÁî
++			   µÚ¶þœ²µÚÆßœÚ£º³·ÏûÀàÃüÁî
+ 
+ 
+-	 ** ÊäÈë u ÀŽ³·Ïû×îºóÖŽÐÐµÄÃüÁî£¬ÊäÈë U ÀŽÐÞÕýÕûÐÐ¡£**
++	** ÊäÈë u ÀŽ³·Ïû×îºóÖŽÐÐµÄÃüÁî£¬ÊäÈë U ÀŽ³·Ïû¶ÔÕûÐÐµÄÐÞžÄ¡£ **
+ 
+   1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄÄÇÒ»ÐÐ£¬²¢œ«ÆäÖÃÓÚµÚÒ»žöŽíÎó
+      ŽŠ¡£
+@@ -251,8 +333,8 @@
+   4. ÕâŽÎÒªÊ¹ÓÃ x ÐÞÕý±ŸÐÐµÄËùÓÐŽíÎó¡£
+   5. ÏÖÔÚÊäÈëÒ»žöŽóÐŽµÄ U £¬»ÖžŽµœžÃÐÐµÄÔ­ÊŒ×ŽÌ¬¡£
+   6. œÓ×Å¶àŽÎÊäÈë u ÒÔ³·Ïû U ÒÔŒ°žüÇ°µÄÃüÁî¡£
+-  7. È»ºó¶àŽÎÊäÈë CTRL-R (ÏÈ°ŽÏÂ CTRL Œü²»·Å¿ª£¬œÓ×ÅÊäÈë R Œü) £¬ÕâÑùŸÍ
+-     ¿ÉÒÔÖŽÐÐ»ÖžŽÃüÁî£¬Ò²ŸÍÊÇ³·Ïûµô³·ÏûÃüÁî¡£
++  7. È»ºó¶àŽÎÊäÈë CTRL-R (ÏÈ°ŽÏÂ CTRL Œü²»·Å¿ª£¬œÓ×Å°Ž R Œü)£¬ÕâÑùŸÍ
++     ¿ÉÒÔÖØ×ö±»³·ÏûµÄÃüÁî£¬Ò²ŸÍÊÇ³·Ïûµô³·ÏûÃüÁî¡£
+ 
+ ---> Fiix the errors oon thhis line and reeplace them witth undo.
+ 
+@@ -265,105 +347,105 @@
+ 			       µÚ¶þœ²Ð¡œá
+ 
+ 
+-  1. ÓûŽÓµ±Ç°¹â±êÉŸ³ýÖÁµ¥×Ö/µ¥ŽÊÄ©Î²£¬ÇëÊäÈë¡Ãdw
+-
+-  2. ÓûŽÓµ±Ç°¹â±êÉŸ³ýÖÁµ±Ç°ÐÐÄ©Î²£¬ÇëÊäÈë¡Ãd$
+-
+-  3. ÓûÉŸ³ýÕûÐÐ£¬ÇëÊäÈë¡Ãdd
++  1. ÓûŽÓµ±Ç°¹â±êÉŸ³ýÖÁÏÂÒ»žöµ¥ŽÊ£¬ÇëÊäÈë£ºdw
++  2. ÓûŽÓµ±Ç°¹â±êÉŸ³ýÖÁµ±Ç°ÐÐÄ©Î²£¬ÇëÊäÈë£ºd$
++  3. ÓûÉŸ³ýÕûÐÐ£¬ÇëÊäÈë£ºdd
+ 
+-  4. ÔÚÕý³£Ä£ÊœÏÂÒ»žöÃüÁîµÄžñÊœÊÇ¡Ã
++  4. ÓûÖØžŽÒ»žö¶¯×÷£¬ÇëÔÚËüÇ°ÃæŒÓÉÏÒ»žöÊý×Ö£º2w
++  5. ÔÚÕý³£Ä£ÊœÏÂÐÞžÄÃüÁîµÄžñÊœÊÇ£º
++               operator   [number]   motion
++     ÆäÖÐ£º
++       operator - ²Ù×÷·û£¬Žú±íÒª×öµÄÊÂÇé£¬±ÈÈç d Žú±íÉŸ³ý
++       [number] - ¿ÉÒÔžœŒÓµÄÊý×Ö£¬Žú±í¶¯×÷ÖØžŽµÄŽÎÊý
++       motion   - ¶¯×÷£¬Žú±íÔÚËù²Ù×÷µÄÎÄ±ŸÉÏµÄÒÆ¶¯£¬ÀýÈç w Žú±íµ¥ŽÊ(word)£¬
++		  $ Žú±íÐÐÄ©µÈµÈ¡£
+ 
+-       [number]   command   object     »òÕß     command	[number]   object
+-     ÆäÒâÊÇ¡Ã
+-       number - Žú±íµÄÊÇÃüÁîÖŽÐÐµÄŽÎÊý
+-       command - Žú±íÒª×öµÄÊÂÇé£¬±ÈÈç d Žú±íÉŸ³ý
+-       object - Žú±íÒª²Ù×÷µÄ¶ÔÏó£¬±ÈÈç w Žú±íµ¥×Ö/µ¥ŽÊ£¬$ Žú±íµœÐÐÄ©µÈµÈ¡£
+-		$ (to the end of line), etc.
++  6. ÓûÒÆ¶¯¹â±êµœÐÐÊ×£¬Çë°ŽÊý×Ö0Œü£º0
+ 
+-  5. Óû³·ÏûÒÔÇ°µÄ²Ù×÷£¬ÇëÊäÈë¡Ãu (Ð¡ÐŽµÄu)
+-     Óû³·ÏûÔÚÒ»ÐÐÖÐËù×öµÄžÄ¶¯£¬ÇëÊäÈë¡ÃU (ŽóÐŽµÄU)
+-     Óû³·ÏûÒÔÇ°µÄ³·ÏûÃüÁî£¬»ÖžŽÒÔÇ°µÄ²Ù×÷œá¹û£¬ÇëÊäÈë¡ÃCTRL-R
++  7. Óû³·ÏûÒÔÇ°µÄ²Ù×÷£¬ÇëÊäÈë£ºu (Ð¡ÐŽµÄu)
++     Óû³·ÏûÔÚÒ»ÐÐÖÐËù×öµÄžÄ¶¯£¬ÇëÊäÈë£ºU (ŽóÐŽµÄU)
++     Óû³·ÏûÒÔÇ°µÄ³·ÏûÃüÁî£¬»ÖžŽÒÔÇ°µÄ²Ù×÷œá¹û£¬ÇëÊäÈë£ºCTRL-R
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			 µÚÈýœ²µÚÒ»œÚ¡ÃÖÃÈëÀàÃüÁî
++			   µÚÈýœ²µÚÒ»œÚ£ºÖÃÈëÀàÃüÁî
+ 
+ 
+-	       ** ÊäÈë p œ«×îºóÒ»ŽÎÉŸ³ýµÄÄÚÈÝÖÃÈë¹â±êÖ®ºó **
++		** ÊäÈë p œ«×îºóÒ»ŽÎÉŸ³ýµÄÄÚÈÝÖÃÈë¹â±êÖ®ºó¡£ **
+ 
+-  1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæÊŸ·¶¶ÎÂäµÄÊ×ÐÐ¡£
++  1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæµÚÒ»žö±êŒÇÓÐ ---> µÄÒ»ÐÐ¡£
+ 
+-  2. ÊäÈë dd œ«žÃÐÐÉŸ³ý£¬ÕâÑù»áœ«žÃÐÐ±£ŽæµœvimµÄ»º³åÇøÖÐ¡£
++  2. ÊäÈë dd œ«žÃÐÐÉŸ³ý£¬ÕâÑù»áœ«žÃÐÐ±£Žæµœ Vim µÄÒ»žöŒÄŽæÆ÷ÖÐ¡£
+ 
+-  3. œÓ×Åœ«¹â±êÒÆ¶¯µœ×Œ±žÖÃÈëµÄÎ»ÖÃµÄÉÏ·œ¡£ŒÇ×¡¡ÃÊÇÉÏ·œÅ¶¡£
++  3. œÓ×Åœ«¹â±êÒÆ¶¯µœ c) Ò»ÐÐ£¬ŒŽ×Œ±žÖÃÈëµÄÎ»ÖÃµÄÉÏ·œ¡£ŒÇ×¡£ºÊÇÉÏ·œÅ¶¡£
+ 
+-  4. È»ºóÔÚÕý³£Ä£ÊœÏÂ(<ESC>ŒüœøÈë)£¬ÊäÈë p œ«žÃÐÐÕ³ÌùÖÃÈë¡£
++  4. È»ºóÔÚÕý³£Ä£ÊœÏÂ(<ESC>ŒüœøÈë)ÊäÈë p œ«žÃÐÐÕ³ÌùÖÃÈë¡£
+ 
+   5. ÖØžŽ²œÖè2ÖÁ²œÖè4£¬œ«ËùÓÐµÄÐÐÒÀÐò·ÅÖÃµœÕýÈ·µÄÎ»ÖÃÉÏ¡£
+ 
+-     d) Can you learn too?
+-     b) Violets are blue,
+-     c) Intelligence is learned,
+-     a) Roses are red,
++---> d) Can you learn too?
++---> b) Violets are blue,
++---> c) Intelligence is learned,
++---> a) Roses are red,
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		       µÚÈýœ²µÚ¶þœÚ¡ÃÌæ»»ÀàÃüÁî
++			   µÚÈýœ²µÚ¶þœÚ£ºÌæ»»ÀàÃüÁî
+ 
+ 
+ 	  ** ÊäÈë r ºÍÒ»žö×Ö·ûÌæ»»¹â±êËùÔÚÎ»ÖÃµÄ×Ö·û¡£**
+ 
+   1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐ¡£
+ 
+-  2. ÇëÒÆ¶¯¹â±êµœµÚÒ»žöŽíÎóµÄÊÊµ±Î»ÖÃ¡£
++  2. ÇëÒÆ¶¯¹â±êµœµÚÒ»žö³öŽíµÄÎ»ÖÃ¡£
+ 
+-  3. œÓ×ÅÊäÈë r £¬ÕâÑùŸÍÄÜœ«ŽíÎóÌæ»»µôÁË¡£
++  3. œÓ×ÅÊäÈë r ºÍÒªÌæ»»³ÉµÄ×Ö·û£¬ÕâÑùŸÍÄÜœ«ŽíÎóÌæ»»µôÁË¡£
+ 
+   4. ÖØžŽ²œÖè2ºÍ²œÖè3£¬Ö±µœµÚÒ»ÐÐÒÑŸ­ÐÞžÄÍê±Ï¡£
+ 
+ --->  Whan this lime was tuoed in, someone presswd some wrojg keys!
+ --->  When this line was typed in, someone pressed some wrong keys!
+ 
+-  5. È»ºóÎÒÃÇŒÌÐøÑ§Ð£µÚÈýœ²µÚÈýœÚ¡£
++  5. È»ºóÎÒÃÇŒÌÐøÑ§Ï°µÚÈýœ²µÚÈýœÚ¡£
+ 
+-ÌØ±ðÌáÊŸ¡ÃÇÐŒÇÄúÒªÔÚÊ¹ÓÃÖÐÑ§Ï°£¬¶ø²»ÊÇÔÚŒÇÒäÖÐÑ§Ï°¡£
++ÌØ±ðÌáÊŸ£ºÇÐŒÇÄúÒªÔÚÊ¹ÓÃÖÐÑ§Ï°£¬¶ø²»ÊÇÔÚŒÇÒäÖÐÑ§Ï°¡£
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			µÚÈýœ²µÚÈýœÚ¡ÃžüžÄÀàÃüÁî
++			µÚÈýœ²µÚÈýœÚ£ºžüžÄÀàÃüÁî
+ 
+ 
+-	   ** ÒªžÄ±äÒ»žöµ¥×Ö/µ¥ŽÊµÄ²¿·Ö»òÕßÈ«²¿£¬ÇëÊäÈë cw **
++		 ** ÒªžÄ±äÎÄ±ŸÖ±µœÒ»žöµ¥ŽÊµÄÄ©Î²£¬ÇëÊäÈë ce **
+ 
+   1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐ¡£
+ 
+   2. œÓ×Å°Ñ¹â±ê·ÅÔÚµ¥ŽÊ lubw µÄ×ÖÄž u µÄÎ»ÖÃÄÇÀï¡£
+ 
+-  3. È»ºóÊäÈë cw ŸÍ¿ÉÒÔÐÞÕýžÃµ¥ŽÊÁË(ÔÚ±ŸÀýÕâÀïÊÇÊäÈë ine ¡£)
++  3. È»ºóÊäÈë cw ÒÔŒ°ÕýÈ·µÄµ¥ŽÊ(ÔÚ±ŸÀýÖÐÊÇÊäÈë ine )¡£
+ 
+   4. ×îºó°Ž <ESC> Œü£¬È»ºó¹â±ê¶šÎ»µœÏÂÒ»žöŽíÎóµÚÒ»žö×Œ±žžüžÄµÄ×ÖÄžŽŠ¡£
+ 
+   5. ÖØžŽ²œÖè3ºÍ²œÖè4£¬Ö±µœµÚÒ»žöŸä×ÓÍêÈ«À×Í¬µÚ¶þžöŸä×Ó¡£
+ 
+----> This lubw has a few wptfd that mrrf changing usf the change command.
+----> This line has a few words that need changing using the change command.
++---> This lubw has a few wptfd that mrrf changing usf the change operator.
++---> This line has a few words that need changing using the change operator.
+ 
+-ÌáÊŸ¡ÃÇë×¢Òâ cw ÃüÁî²»œöœöÊÇÌæ»»ÁËÒ»žöµ¥ŽÊ£¬Ò²ÈÃÄúœøÈëÎÄ±Ÿ²åÈë×ŽÌ¬ÁË¡£
++ÌáÊŸ£ºÇë×¢Òâ ce ÃüÁî²»œöœöÊÇÉŸ³ýÁËÒ»žöµ¥ŽÊ£¬ËüÒ²ÈÃÄúœøÈë²åÈëÄ£ÊœÁË¡£
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		       µÚÈýœ²µÚËÄœÚ¡ÃÊ¹ÓÃcÖžÁîµÄÆäËûžüžÄÀàÃüÁî
++		       µÚÈýœ²µÚËÄœÚ£ºÊ¹ÓÃcžüžÄžü¶à
+ 
+ 
+-	     ** žüžÄÀàÖžÁî¿ÉÒÔÊ¹ÓÃÍ¬ÉŸ³ýÀàÃüÁîËùÊ¹ÓÃµÄ¶ÔÏó²ÎÊý¡£**
++	   ** žüžÄÀà²Ù×÷·û¿ÉÒÔÓëÉŸ³ýÖÐÊ¹ÓÃµÄÍ¬ÑùµÄ¶¯×÷ÅäºÏÊ¹ÓÃ¡£ **
+ 
+-  1. žüžÄÀàÖžÁîµÄ¹€×÷·œÊœžúÉŸ³ýÀàÃüÁîÊÇÒ»ÖÂµÄ¡£²Ù×÷žñÊœÊÇ¡Ã
++  1. žüžÄÀà²Ù×÷·ûµÄ¹€×÷·œÊœžúÉŸ³ýÀàÊÇÒ»ÖÂµÄ¡£²Ù×÷žñÊœÊÇ£º
+ 
+-       [number]   c   object	   »òÕß	    c	[number]   object
++         c    [number]   motion
+ 
+-  2. ¶ÔÏó²ÎÊýÒ²ÊÇÒ»ÑùµÄ£¬±ÈÈç w Žú±íµ¥×Ö/µ¥ŽÊ£¬$Žú±íÐÐÄ©µÈµÈ¡£
++  2. ¶¯×÷²ÎÊý(motion)Ò²ÊÇÒ»ÑùµÄ£¬±ÈÈç w Žú±íµ¥ŽÊ£¬$Žú±íÐÐÄ©µÈµÈ¡£
+ 
+   3. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐ¡£
+ 
+@@ -377,55 +459,56 @@
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			       µÚÈýœ²Ð¡œá
++				  µÚÈýœ²Ð¡œá
+ 
+ 
+-  1. ÒªÖØÐÂÖÃÈëÒÑŸ­ÉŸ³ýµÄÎÄ±ŸÄÚÈÝ£¬ÇëÊäÈëÐ¡ÐŽ×ÖÄž p¡£žÃ²Ù×÷¿ÉÒÔœ«ÒÑÉŸ³ý
++  1. ÒªÖØÐÂÖÃÈëÒÑŸ­ÉŸ³ýµÄÎÄ±ŸÄÚÈÝ£¬Çë°ŽÐ¡ÐŽ×ÖÄž p Œü¡£žÃ²Ù×÷¿ÉÒÔœ«ÒÑÉŸ³ý
+      µÄÎÄ±ŸÄÚÈÝÖÃÓÚ¹â±êÖ®ºó¡£Èç¹û×îºóÒ»ŽÎÉŸ³ýµÄÊÇÒ»žöÕûÐÐ£¬ÄÇÃŽžÃÐÐœ«ÖÃ
+      ÓÚµ±Ç°¹â±êËùÔÚÐÐµÄÏÂÒ»ÐÐ¡£
+ 
+   2. ÒªÌæ»»¹â±êËùÔÚÎ»ÖÃµÄ×Ö·û£¬ÇëÊäÈëÐ¡ÐŽµÄ r ºÍÒªÌæ»»µôÔ­Î»ÖÃ×Ö·ûµÄÐÂ×Ö
+      ·ûŒŽ¿É¡£
+ 
+-  3. žüžÄÀàÃüÁîÔÊÐíÄúžÄ±äÖž¶šµÄ¶ÔÏó£¬ŽÓµ±Ç°¹â±êËùÔÚÎ»ÖÃÖ±µœ¶ÔÏóµÄÄ©Î²¡£
+-     ±ÈÈçÊäÈë cw ¿ÉÒÔÌæ»»µ±Ç°¹â±êµœµ¥ŽÊµÄÄ©Î²µÄÄÚÈÝ£»ÊäÈë c$ ¿ÉÒÔÌæ»»µ±
++  3. žüžÄÀàÃüÁîÔÊÐíÄúžÄ±äŽÓµ±Ç°¹â±êËùÔÚÎ»ÖÃÖ±µœ¶¯×÷ÖžÊŸµÄÎ»ÖÃÖÐŒäµÄÎÄ±Ÿ¡£
++     ±ÈÈçÊäÈë ce ¿ÉÒÔÌæ»»µ±Ç°¹â±êµœµ¥ŽÊµÄÄ©Î²µÄÄÚÈÝ£»ÊäÈë c$ ¿ÉÒÔÌæ»»µ±
+      Ç°¹â±êµœÐÐÄ©µÄÄÚÈÝ¡£
+ 
+-  4. žüžÄÀàÃüÁîµÄžñÊœÊÇ¡Ã
++  4. žüžÄÀàÃüÁîµÄžñÊœÊÇ£º
+ 
+-	 [number]   c	object	      »òÕß	c   [number]   object
++	 c   [number]   motion
+ 
+-ÏÂÃæÎÒÃÇŒÌÐøÑ§Ï°ÏÂÒ»œ²¡£
++ÏÖÔÚÎÒÃÇŒÌÐøÑ§Ï°ÏÂÒ»œ²¡£
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		     µÚËÄœ²µÚÒ»œÚ¡Ã¶šÎ»Œ°ÎÄŒþ×ŽÌ¬
++		     µÚËÄœ²µÚÒ»œÚ£º¶šÎ»Œ°ÎÄŒþ×ŽÌ¬
+ 
++  ** ÊäÈë CTRL-G ÏÔÊŸµ±Ç°±àŒ­ÎÄŒþÖÐµ±Ç°¹â±êËùÔÚÐÐÎ»ÖÃÒÔŒ°ÎÄŒþ×ŽÌ¬ÐÅÏ¢¡£
++     ÊäÈëŽóÐŽ G ÔòÖ±œÓÌø×ªµœÎÄŒþÖÐµÄÄ³Ò»Öž¶šÐÐ¡£**
+ 
+-  ** ÊäÈë CTRL-g ÏÔÊŸµ±Ç°±àŒ­ÎÄŒþÖÐµ±Ç°¹â±êËùÔÚÐÐÎ»ÖÃÒÔŒ°ÎÄŒþ×ŽÌ¬ÐÅÏ¢¡£
+-     ÊäÈë SHIFT-G ÔòÖ±œÓÌø×ªµœÎÄŒþÖÐµÄÄ³Ò»Öž¶šÐÐ¡£**
++  ÌáÊŸ£ºÇÐŒÇÒªÏÈÍš¶Á±ŸœÚÄÚÈÝ£¬Ö®ºó²Å¿ÉÒÔÖŽÐÐÒÔÏÂ²œÖè!!!
+ 
+-  ÌáÊŸ¡ÃÇÐŒÇÒªÏÈÍš¶Á±ŸœÚÄÚÈÝ£¬Ö®ºó²Å¿ÉÒÔÖŽÐÐÒÔÏÂ²œÖè!!!
++  1. °ŽÏÂ CTRL Œü²»·Å¿ªÈ»ºó°Ž g Œü¡£ÎÒÃÇ³ÆÕâžöŒü×éºÏÎª CTRL-G¡£
++     Äú»á¿ŽµœÒ³Ãæ×îµ×²¿³öÏÖÒ»žö×ŽÌ¬ÐÅÏ¢ÐÐ£¬ÏÔÊŸµÄÄÚÈÝÊÇµ±Ç°±àŒ­µÄÎÄŒþÃû
++     ºÍÎÄŒþÖÐ¹â±êÎ»ÖÃ¡£ÇëŒÇ×¡ÐÐºÅ£¬Ëü»áÔÚ²œÖè3ÖÐÓÃµœ¡£
+ 
+-  1. °ŽÏÂ CTRL Œü²»·Å¿ªÈ»ºó°Ž g Œü¡£È»ºóŸÍ»á¿ŽµœÒ³Ãæ×îµ×²¿³öÏÖÒ»žö×ŽÌ¬ÐÅ
+-     Ï¢ÐÐ£¬ÏÔÊŸµÄÄÚÈÝÊÇµ±Ç°±àŒ­µÄÎÄŒþÃûºÍÎÄŒþµÄ×ÜÐÐÊý¡£ÇëŒÇ×¡²œÖè3µÄÐÐºÅ¡£
++ÌáÊŸ£ºÄúÒ²Ðí»áÔÚÆÁÄ»µÄÓÒÏÂœÇ¿Žµœ¹â±êÎ»ÖÃ£¬Õâ»áÔÚ 'ruler' Ñ¡ÏîÉèÖÃÊ±·¢Éú
++      (²ÎŒû :help 'ruler')
+ 
+-  2. °ŽÏÂ SHIFT-G Œü¿ÉÒÔÊ¹µÃµ±Ç°¹â±êÖ±œÓÌø×ªµœÎÄŒþ×îºóÒ»ÐÐ¡£
+-
+-  3. ÊäÈëÄúÔøÍ£ÁôµÄÐÐºÅ£¬È»ºó°ŽÏÂ SHIFT-G¡£ÕâÑùŸÍ¿ÉÒÔ·µ»ØµœÄúµÚÒ»ŽÎ°ŽÏÂ
+-     CTRL-g Ê±ËùÔÚµÄÐÐºÃÁË¡£×¢Òâ¡ÃÊäÈëÐÐºÅÊ±£¬ÐÐºÅÊÇ²»»áÔÚÆÁÄ»ÉÏÏÔÊŸ³öÀŽ
+-     µÄ¡£
+-
+-  4. Èç¹ûÔžÒâ£¬Äú¿ÉÒÔŒÌÐøÖŽÐÐ²œÖè1ÖÁ²œÖèÈý¡£
++  2. ÊäÈëŽóÐŽ G ¿ÉÒÔÊ¹µÃµ±Ç°¹â±êÖ±œÓÌø×ªµœÎÄŒþ×îºóÒ»ÐÐ¡£
++     ÊäÈë gg ¿ÉÒÔÊ¹µÃµ±Ç°¹â±êÖ±œÓÌø×ªµœÎÄŒþµÚÒ»ÐÐ¡£
+ 
++  3. ÊäÈëÄúÔøÍ£ÁôµÄÐÐºÅ£¬È»ºóÊäÈëŽóÐŽ G¡£ÕâÑùŸÍ¿ÉÒÔ·µ»ØµœÄúµÚÒ»ŽÎ°ŽÏÂ
++     CTRL-G Ê±ËùÔÚµÄÐÐÁË¡£
+ 
++  4. Èç¹ûÄúŸõµÃÃ»ÎÊÌâµÄ»°£¬ÇëÖŽÐÐ²œÖè1ÖÁ²œÖè3µÄ²Ù×÷œøÐÐÁ·Ï°¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			µÚËÄœ²µÚ¶þœÚ¡ÃËÑË÷ÀàÃüÁî
++			µÚËÄœ²µÚ¶þœÚ£ºËÑË÷ÀàÃüÁî
+ 
+ 
+-     ** ÊäÈë / ÒÔŒ°Î²ËæµÄ×Ö·ûŽ®¿ÉÒÔÓÃÒÔÔÚµ±Ç°ÎÄŒþÖÐ²éÕÒžÃ×Ö·ûŽ®¡£**
++     ** ÊäÈë / ŒÓÉÏÒ»žö×Ö·ûŽ®¿ÉÒÔÓÃÒÔÔÚµ±Ç°ÎÄŒþÖÐ²éÕÒžÃ×Ö·ûŽ®¡£**
+ 
+   1. ÔÚÕý³£Ä£ÊœÏÂÊäÈë / ×Ö·û¡£ÄúŽËÊ±»á×¢ÒâµœžÃ×Ö·ûºÍ¹â±ê¶Œ»á³öÏÖÔÚÆÁÄ»µ×
+      ²¿£¬Õâžú : ÃüÁîÊÇÒ»ÑùµÄ¡£
+@@ -433,23 +516,22 @@
+   2. œÓ×ÅÊäÈë errroor <»Ø³µ>¡£ÄÇžöerrroorŸÍÊÇÄúÒª²éÕÒµÄ×Ö·ûŽ®¡£
+ 
+   3. Òª²éÕÒÍ¬ÉÏÒ»ŽÎµÄ×Ö·ûŽ®£¬Ö»ÐèÒª°Ž n Œü¡£ÒªÏòÏà·Ž·œÏò²éÕÒÍ¬ÉÏÒ»ŽÎµÄ×Ö
+-     ·ûŽ®£¬ÇëÊäÈë Shift-N ŒŽ¿É¡£
++     ·ûŽ®£¬ÇëÊäÈëŽóÐŽ N ŒŽ¿É¡£
+ 
+   4. Èç¹ûÄúÏëÄæÏò²éÕÒ×Ö·ûŽ®£¬ÇëÊ¹ÓÃ ? ŽúÌæ / œøÐÐ¡£
+ 
+----> When the search reaches the end of the file it will continue at the start.
+-
+-  "errroor" is not the way to spell error;  errroor is an error.
+-
+-  ÌáÊŸ¡ÃÈç¹û²éÕÒÒÑŸ­µœŽïÎÄŒþÄ©Î²£¬²éÕÒ»á×Ô¶¯ŽÓÎÄŒþÍ·²¿ŒÌÐø²éÕÒ¡£
+-
++  5. Òª»ØµœÄúÖ®Ç°µÄÎ»ÖÃ°Ž CTRL-O (°Ž×¡ Ctrl Œü²»·ÅÍ¬Ê±°ŽÏÂ×ÖÄž o)¡£ÖØžŽ°Ž¿ÉÒÔ
++     »ØÍËžü¶à²œ¡£CTRL-I »áÌø×ªµœœÏÐÂµÄÎ»ÖÃ¡£
+ 
++--->  "errroor" is not the way to spell error;  errroor is an error.
++ÌáÊŸ£ºÈç¹û²éÕÒÒÑŸ­µœŽïÎÄŒþÄ©Î²£¬²éÕÒ»á×Ô¶¯ŽÓÎÄŒþÍ·²¿ŒÌÐø²éÕÒ£¬³ý·Ç
++      'wrapscan' Ñ¡Ïî±»žŽÎ»¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		   µÚËÄœ²µÚÈýœÚ¡ÃÅä¶ÔÀšºÅµÄ²éÕÒ
++		   µÚËÄœ²µÚÈýœÚ£ºÅä¶ÔÀšºÅµÄ²éÕÒ
+ 
+ 
+-	      ** °Ž % ¿ÉÒÔ²éÕÒÅä¶ÔµÄÀšºÅ )¡¢]¡¢}¡£**
++	      ** ÊäÈë % ¿ÉÒÔ²éÕÒÅä¶ÔµÄÀšºÅ )¡¢]¡¢}¡£**
+ 
+   1. °Ñ¹â±ê·ÅÔÚ±ŸœÚÏÂÃæ±êŒÇÓÐ --> ÄÇÒ»ÐÐÖÐµÄÈÎºÎÒ»žö (¡¢[ »ò { ŽŠ¡£
+ 
+@@ -459,17 +541,17 @@
+ 
+   4. ÔÙŽÎ°Ž % ŸÍ¿ÉÒÔÌø»ØÅä¶ÔµÄµÚÒ»žöÀšºÅŽŠ¡£
+ 
+----> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+-
+-ÌáÊŸ¡ÃÔÚ³ÌÐòµ÷ÊÔÊ±£¬Õâžö¹ŠÄÜÓÃÀŽ²éÕÒ²»Åä¶ÔµÄÀšºÅÊÇºÜÓÐÓÃµÄ¡£
++  5. ÒÆ¶¯¹â±êµœÁíÒ»žö (¡¢)¡¢[¡¢]¡¢{ »ò } ŽŠ£¬°Ž % ²é¿ŽÆäËù×÷ËùÎª¡£
+ 
++---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
+ 
+ 
++ÌáÊŸ£ºÔÚ³ÌÐòµ÷ÊÔÊ±£¬Õâžö¹ŠÄÜÓÃÀŽ²éÕÒ²»Åä¶ÔµÄÀšºÅÊÇºÜÓÐÓÃµÄ¡£
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		      µÚËÄœ²µÚËÄœÚ¡ÃÐÞÕýŽíÎóµÄ·œ·šÖ®Ò»
++		      µÚËÄœ²µÚËÄœÚ£ºÌæ»»ÃüÁî
+ 
+ 
+ 		** ÊäÈë :s/old/new/g ¿ÉÒÔÌæ»» old Îª new¡£**
+@@ -479,46 +561,48 @@
+   2. ÊäÈë :s/thee/the <»Ø³µ> ¡£Çë×¢ÒâžÃÃüÁîÖ»žÄ±ä¹â±êËùÔÚÐÐµÄµÚÒ»žöÆ¥Åä
+      Ž®¡£
+ 
+-  3. ÊäÈë :s/thee/the/g	ÔòÊÇÌæ»»È«ÐÐµÄÆ¥ÅäŽ®¡£
+-
+----> the best time to see thee flowers is in thee spring.
+-
+-  4. ÒªÌæ»»ÁœÐÐÖ®Œä³öÏÖµÄÃ¿žöÆ¥ÅäŽ®£¬ÇëÊäÈë :#,#s/old/new/g (#,#Žú±íµÄÊÇ
+-     ÁœÐÐµÄÐÐºÅ)¡£ÊäÈë :%s/old/new/g ÔòÊÇÌæ»»ÕûžöÎÄŒþÖÐµÄÃ¿žöÆ¥ÅäŽ®¡£
+-
++  3. ÊäÈë :s/thee/the/g	ÔòÊÇÌæ»»È«ÐÐµÄÆ¥ÅäŽ®£¬žÃÐÐÖÐËùÓÐµÄ "thee" ¶Œ»á±»
++     žÄ±ä¡£
+ 
++---> thee best time to see thee flowers is in thee spring.
+ 
++  4. ÒªÌæ»»ÁœÐÐÖ®Œä³öÏÖµÄÃ¿žöÆ¥ÅäŽ®£¬Çë
++     ÊäÈë   :#,#s/old/new/g   ÆäÖÐ #,# Žú±íµÄÊÇÌæ»»²Ù×÷µÄÈôžÉÐÐÖÐ
++                              Ê×Î²ÁœÐÐµÄÐÐºÅ¡£
++     ÊäÈë   :%s/old/new/g     ÔòÊÇÌæ»»ÕûžöÎÄŒþÖÐµÄÃ¿žöÆ¥ÅäŽ®¡£
++     ÊäÈë   :%s/old/new/gc    »áÕÒµœÕûžöÎÄŒþÖÐµÄÃ¿žöÆ¥ÅäŽ®£¬²¢ÇÒ¶ÔÃ¿žöÆ¥ÅäŽ®
++                              ÌáÊŸÊÇ·ñœøÐÐÌæ»»¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ 			       µÚËÄœ²Ð¡œá
+ 
+ 
+-  1. Ctrl-g ÓÃÓÚÏÔÊŸµ±Ç°¹â±êËùÔÚÎ»ÖÃºÍÎÄŒþ×ŽÌ¬ÐÅÏ¢¡£Shift-G ÓÃÓÚœ«¹â±êÌø
+-     ×ªÖÁÎÄŒþ×îºóÒ»ÐÐ¡£ÏÈÇÃÈëÒ»žöÐÐºÅÈ»ºó°Ž Shift-G ÔòÊÇœ«¹â±êÒÆ¶¯ÖÁžÃÐÐ
+-     ºÅŽú±íµÄÐÐ¡£
+-
+-  2. ÊäÈë / È»ºóœôËæÒ»žö×Ö·ûŽ®ÊÇÔòÊÇÔÚµ±Ç°Ëù±àŒ­µÄÎÄµµÖÐÏòºó²éÕÒžÃ×Ö·ûŽ®¡£
+-     ÊäÈëÎÊºÅ ? È»ºóœôËæÒ»žö×Ö·ûŽ®ÊÇÔòÊÇÔÚµ±Ç°Ëù±àŒ­µÄÎÄµµÖÐÏòÇ°²éÕÒžÃ×Ö
+-     ·ûŽ®¡£Íê³ÉÒ»ŽÎ²éÕÒÖ®ºó°Ž n ŒüÔòÊÇÖØžŽÉÏÒ»ŽÎµÄÃüÁî£¬¿ÉÔÚÍ¬Ò»·œÏòÉÏ²é
+-     ÕÒÏÂÒ»žö×Ö·ûŽ®ËùÔÚ£»»òÕß°Ž Shift-N ÏòÏà·Ž·œÏò²éÕÒÏÂžÃ×Ö·ûŽ®ËùÔÚ¡£
++  1. CTRL-G ÓÃÓÚÏÔÊŸµ±Ç°¹â±êËùÔÚÎ»ÖÃºÍÎÄŒþ×ŽÌ¬ÐÅÏ¢¡£
++     G ÓÃÓÚœ«¹â±êÌø×ªÖÁÎÄŒþ×îºóÒ»ÐÐ¡£
++     ÏÈÇÃÈëÒ»žöÐÐºÅÈ»ºóÊäÈëŽóÐŽ G ÔòÊÇœ«¹â±êÒÆ¶¯ÖÁžÃÐÐºÅŽú±íµÄÐÐ¡£
++     gg ÓÃÓÚœ«¹â±êÌø×ªÖÁÎÄŒþµÚÒ»ÐÐ¡£
++
++  2. ÊäÈë / È»ºóœôËæÒ»žö×Ö·ûŽ®ÊÇÔÚµ±Ç°Ëù±àŒ­µÄÎÄµµÖÐÕýÏò²éÕÒžÃ×Ö·ûŽ®¡£
++     ÊäÈë ? È»ºóœôËæÒ»žö×Ö·ûŽ®ÔòÊÇÔÚµ±Ç°Ëù±àŒ­µÄÎÄµµÖÐ·ŽÏò²éÕÒžÃ×Ö·ûŽ®¡£
++     Íê³ÉÒ»ŽÎ²éÕÒÖ®ºó°Ž n ŒüÊÇÖØžŽÉÏÒ»ŽÎµÄÃüÁî£¬¿ÉÔÚÍ¬Ò»·œÏòÉÏ²é
++     ÕÒÏÂÒ»žöÆ¥Åä×Ö·ûŽ®ËùÔÚ£»»òÕß°ŽŽóÐŽ N ÏòÏà·Ž·œÏò²éÕÒÏÂÒ»Æ¥Åä×Ö·ûŽ®ËùÔÚ¡£
++     CTRL-O ŽøÄúÌø×ª»ØœÏŸÉµÄÎ»ÖÃ£¬CTRL-I ÔòŽøÄúµœœÏÐÂµÄÎ»ÖÃ¡£
+ 
+-  3. Èç¹û¹â±êµ±Ç°Î»ÖÃÊÇÀšºÅ(¡¢)¡¢[¡¢]¡¢{¡¢}£¬°Ž % ¿ÉÒÔœ«¹â±êÒÆ¶¯µœÅä¶ÔµÄ
+-     ÀšºÅÉÏ¡£
++  3. Èç¹û¹â±êµ±Ç°Î»ÖÃÊÇÀšºÅ(¡¢)¡¢[¡¢]¡¢{¡¢}£¬°Ž % »áœ«¹â±êÒÆ¶¯µœÅä¶ÔµÄÀšºÅÉÏ¡£
+ 
+   4. ÔÚÒ»ÐÐÄÚÌæ»»Í·Ò»žö×Ö·ûŽ® old ÎªÐÂµÄ×Ö·ûŽ® new£¬ÇëÊäÈë  :s/old/new
+      ÔÚÒ»ÐÐÄÚÌæ»»ËùÓÐµÄ×Ö·ûŽ® old ÎªÐÂµÄ×Ö·ûŽ® new£¬ÇëÊäÈë  :s/old/new/g
+      ÔÚÁœÐÐÄÚÌæ»»ËùÓÐµÄ×Ö·ûŽ® old ÎªÐÂµÄ×Ö·ûŽ® new£¬ÇëÊäÈë  :#,#s/old/new/g
+      ÔÚÎÄŒþÄÚÌæ»»ËùÓÐµÄ×Ö·ûŽ® old ÎªÐÂµÄ×Ö·ûŽ® new£¬ÇëÊäÈë  :%s/old/new/g
+-     œøÐÐÈ«ÎÄÌæ»»Ê±Ñ¯ÎÊÓÃ»§È·ÈÏÃ¿žöÌæ»»ÐèÌíŒÓ c Ñ¡Ïî£¬ÇëÊäÈë :%s/old/new/gc
+-
++     œøÐÐÈ«ÎÄÌæ»»Ê±Ñ¯ÎÊÓÃ»§È·ÈÏÃ¿žöÌæ»»ÐèÌíŒÓ c ±êÖŸ        :%s/old/new/gc
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		µÚÎåœ²µÚÒ»œÚ¡ÃÔÚ VIM ÄÚÖŽÐÐÍâ²¿ÃüÁîµÄ·œ·š
++		µÚÎåœ²µÚÒ»œÚ£ºÔÚ VIM ÄÚÖŽÐÐÍâ²¿ÃüÁîµÄ·œ·š
+ 
+ 
+-	   ** ÊäÈë :! È»ºóœôËæÖøÊäÈëÒ»žöÍâ²¿ÃüÁî¿ÉÒÔÖŽÐÐžÃÍâ²¿ÃüÁî¡£**
++	   ** ÊäÈë :! È»ºóœôœÓ×ÅÊäÈëÒ»žöÍâ²¿ÃüÁî¿ÉÒÔÖŽÐÐžÃÍâ²¿ÃüÁî¡£**
+ 
+-  1. °ŽÏÂÎÒÃÇËùÊìÏ€µÄ : ÃüÁîÉèÖÃ¹â±êµœÆÁÄ»µ×²¿¡£ÕâÑùŸÍ¿ÉÒÔÈÃÄúÊäÈëÃüÁîÁË¡£
++  1. °ŽÏÂÎÒÃÇËùÊìÏ€µÄ : ÃüÁîÊ¹¹â±êÒÆ¶¯µœÆÁÄ»µ×²¿¡£ÕâÑùÄúŸÍ¿ÉÒÔÊäÈëÒ»ÐÐÃüÁîÁË¡£
+ 
+   2. œÓ×ÅÊäÈëžÐÌŸºÅ ! Õâžö×Ö·û£¬ÕâÑùŸÍÔÊÐíÄúÖŽÐÐÍâ²¿µÄ shell ÃüÁîÁË¡£
+ 
+@@ -526,15 +610,17 @@
+      ÄÚÈÝ£¬ŸÍÈçÍ¬ÄúÔÚÃüÁîÐÐÌáÊŸ·ûÏÂÊäÈë ls ÃüÁîµÄœá¹ûÒ»Ñù¡£Èç¹û !ls Ã»Æð
+      ×÷ÓÃ£¬Äú¿ÉÒÔÊÔÊÔ :!dir ¿Ž¿Ž¡£
+ 
+----> ÌáÊŸ¡Ã ËùÓÐµÄÍâ²¿ÃüÁî¶Œ¿ÉÒÔÒÔÕâÖÖ·œÊœÖŽÐÐ¡£
++ÌáÊŸ£ºËùÓÐµÄÍâ²¿ÃüÁî¶Œ¿ÉÒÔÒÔÕâÖÖ·œÊœÖŽÐÐ£¬°üÀšŽøÃüÁîÐÐ²ÎÊýµÄÄÇÐ©¡£
++
++ÌáÊŸ£ºËùÓÐµÄ : ÃüÁî¶Œ±ØÐëÒÔÇÃ <»Ø³µ> ŒüœáÊø¡£ŽÓœñÒÔºóÎÒÃÇŸÍ²»»á×ÜÊÇÌáµœÕâÒ»µã
++      ÁË¡£
+ 
+----> ÌáÊŸ¡Ã ËùÓÐµÄ : ÃüÁî¶Œ±ØÐëÒÔ <»Ø³µ> žæÖÕ¡£
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		      µÚÎåœ²µÚ¶þœÚ¡Ã¹ØÓÚ±£ŽæÎÄŒþµÄžü¶àÐÅÏ¢
++		      µÚÎåœ²µÚ¶þœÚ£º¹ØÓÚ±£ŽæÎÄŒþµÄžü¶àÐÅÏ¢
+ 
+ 
+ 	     ** Òªœ«¶ÔÎÄŒþµÄžÄ¶¯±£ŽæµœÎÄŒþÖÐ£¬ÇëÊäÈë :w FILENAME ¡£**
+@@ -542,60 +628,63 @@
+   1. ÊäÈë :!dir »òÕß :!ls »ñÖªµ±Ç°Ä¿ÂŒµÄÄÚÈÝ¡£ÄúÓŠµ±ÒÑÖªµÀ×îºó»¹µÃÇÃ
+      <»Ø³µ> °É¡£
+ 
+-  2. Ñ¡ÔñÒ»žöÉÐÎŽŽæÔÚÎÄŒþÃû£¬±ÈÈç TEST ¡£
++  2. Ñ¡ÔñÒ»žöÎŽ±»ÓÃµœµÄÎÄŒþÃû£¬±ÈÈç TEST¡£
+ 
+   3. œÓ×ÅÊäÈë :w TEST  (ŽËŽŠ TEST ÊÇÄúËùÑ¡ÔñµÄÎÄŒþÃû¡£)
+ 
+-  4. žÃÃüÁî»áÒÔ TEST ÎªÎÄŒþÃû±£ŽæÕûžöÎÄŒþ (VIM œÌ³Ì)¡£ÎªÁËÈ·±£ÕýÈ·±£Žæ£¬
+-     ÇëÔÙŽÎÊäÈë :!dir ²é¿ŽÄúµÄÄ¿ÂŒÁÐ±íÄÚÈÝ¡£
++  4. žÃÃüÁî»áÒÔ TEST ÎªÎÄŒþÃû±£ŽæÕûžöÎÄŒþ (Vim œÌ³Ì)¡£ÎªÁËÑéÖ€ÕâÒ»µã£¬
++     ÇëÔÙŽÎÊäÈë :!dir »ò :!ls ²é¿ŽÄúµÄÄ¿ÂŒÁÐ±íÄÚÈÝ¡£
+ 
+----> Çë×¢Òâ¡ÃÈç¹ûÄúÍË³ö VIM È»ºóÔÚÒÔÎÄŒþÃû TEST Îª²ÎÊýœøÈë£¬ÄÇÃŽžÃÎÄŒþÄÚ
++Çë×¢Òâ£ºÈç¹ûÄúÍË³ö Vim È»ºóÔÚÒÔÃüÁî vim TEST ÔÙŽÎÆô¶¯ Vim£¬ÄÇÃŽžÃÎÄŒþÄÚ
+      ÈÝÓŠžÃÍ¬Äú±£ŽæÊ±µÄÎÄŒþÄÚÈÝÊÇÍêÈ«Ò»ÑùµÄ¡£
+ 
+-  5. ÏÖÔÚÄú¿ÉÒÔÍš¹ýÊäÈë :!rm TEST ÀŽÉŸ³ý TEST ÎÄŒþÁË¡£
+-
++  5. ÏÖÔÚÄú¿ÉÒÔÉŸ³ý TEST ÎÄŒþÁË¡£ÔÚ MS-DOS ÏÂ£¬ÇëÊäÈë£º   :!del TEST
++                                 ÔÚ Unix ÏÂ£¬ÇëÊäÈë£º     :!rm TEST
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		    µÚÎåœ²µÚÈýœÚ¡ÃÒ»žöŸßÓÐÑ¡ÔñÐÔµÄ±£ŽæÃüÁî
++		    µÚÎåœ²µÚÈýœÚ£ºÒ»žöŸßÓÐÑ¡ÔñÐÔµÄ±£ŽæÃüÁî
+ 
+ 
+-		** Òª±£ŽæÎÄŒþµÄ²¿·ÖÄÚÈÝ£¬ÇëÊäÈë :#,# w FILENAME **
++	    ** Òª±£ŽæÎÄŒþµÄ²¿·ÖÄÚÈÝ£¬ÇëÊäÈë v motion :w FILENAME **
+ 
+-  1. ÔÙÀŽÖŽÐÐÒ»ŽÎ :!dir »òÕß :!ls »ñÖªµ±Ç°Ä¿ÂŒµÄÄÚÈÝ£¬È»ºóÑ¡ÔñÒ»žöºÏÊÊµÄ
+-     ²»ÖØÃûµÄÎÄŒþÃû£¬±ÈÈç TEST ¡£
++  1. ÒÆ¶¯¹â±êµœ±ŸÐÐ¡£
+ 
+-  2. œÓ×Åœ«¹â±êÒÆ¶¯ÖÁ±ŸÒ³µÄ×î¶¥¶Ë£¬È»ºó°Ž CTRL-g ÕÒµœžÃÐÐµÄÐÐºÅ¡£±ðÍüÁË
+-     ÐÐºÅÅ¶¡£
++  2. œÓ×Å°Ž v Œü£¬œ«¹â±êÒÆ¶¯ÖÁÏÂÃæµÚÎåžöÌõÄ¿ÉÏ¡£Äú»á×¢ÒâµœÖ®ŒäµÄÎÄ±Ÿ±»žßÁÁÁË¡£
+ 
+-  3. œÓ×Å°Ñ¹â±êÒÆ¶¯ÖÁ±ŸÒ³µÄ×îµ×¶Ë£¬ÔÙ°ŽÒ»ŽÎ CTRL-g ¡£Ò²±ðÍüÁËÕâžöÐÐºÃÅ¶¡£
++  3. È»ºó°Ž : ×Ö·û¡£Äúœ«¿ŽµœÆÁÄ»µ×²¿»á³öÏÖ :'<,'> ¡£
+ 
+-  4. ÎªÁËÖ»±£ŽæÎÄÕÂµÄÄ³žö²¿·Ö£¬ÇëÊäÈë :#,# w TEST ¡£ÕâÀïµÄ #,# ŸÍÊÇÉÏÃæ
+-     ÒªÇóÄúŒÇ×¡µÄÐÐºÅ(¶¥¶ËÐÐºÅ,µ×¶ËÐÐºÅ)£¬¶ø TEST ŸÍÊÇÑ¡¶šµÄÎÄŒþÃû¡£
+-
+-  5. ×îºó£¬ÓÃ :!dir È·ÈÏÎÄŒþÊÇ·ñÕýÈ·±£Žæ¡£µ«ÊÇÕâŽÎÏÈ±ðÉŸ³ýµô¡£
++  4. ÏÖÔÚÇëÊäÈë w TEST£¬ÆäÖÐ TEST ÊÇÒ»žöÎŽ±»Ê¹ÓÃµÄÎÄŒþÃû¡£È·ÈÏÄú¿ŽµœÁË
++     :'<,'>w TEST Ö®ºó°Ž <»Ø³µ> Œü¡£
+ 
++  5. ÕâÊ± Vim »á°ÑÑ¡ÖÐµÄÐÐÐŽÈëµœÒÔ TEST ÃüÃûµÄÎÄŒþÖÐÈ¥¡£Ê¹ÓÃ :!dir »ò :!ls
++     È·ÈÏÎÄŒþ±»ÕýÈ·±£Žæ¡£ÕâŽÎÏÈ±ðÉŸ³ýËü£¡ÎÒÃÇÔÚÏÂÒ»œ²ÖÐ»áÓÃµœËü¡£
+ 
++ÌáÊŸ£º°Ž v ŒüÊ¹ Vim œøÈë¿ÉÊÓÄ£ÊœœøÐÐÑ¡È¡¡£Äú¿ÉÒÔËÄŽŠÒÆ¶¯¹â±êÊ¹Ñ¡È¡ÇøÓò±äŽó»ò
++      ±äÐ¡¡£œÓ×ÅÄú¿ÉÒÔÊ¹ÓÃÒ»žö²Ù×÷·û¶ÔÑ¡ÖÐÎÄ±ŸœøÐÐ²Ù×÷¡£ÀýÈç£¬°Ž d Œü»áÉŸ³ý
++      Ñ¡ÖÐµÄÎÄ±ŸÄÚÈÝ¡£
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		   µÚÎåœ²µÚËÄœÚ¡ÃÌáÈ¡ºÍºÏ²¢ÎÄŒþ
++		   µÚÎåœ²µÚËÄœÚ£ºÌáÈ¡ºÍºÏ²¢ÎÄŒþ
+ 
+ 
+        ** ÒªÏòµ±Ç°ÎÄŒþÖÐ²åÈëÁíÍâµÄÎÄŒþµÄÄÚÈÝ£¬ÇëÊäÈë :r FILENAME **
+ 
+-  1. ÇëŒüÈë :!dir È·ÈÏÄúÇ°ÃæŽŽœšµÄ TEST ÎÄŒþ»¹ÔÚ¡£
++  1. Çë°Ñ¹â±êÒÆ¶¯µœ±ŸÐÐÉÏÃæÒ»ÐÐ¡£
+ 
+-  2. È»ºóœ«¹â±êÒÆ¶¯ÖÁµ±Ç°Ò³ÃæµÄ¶¥¶Ë¡£
++ÌØ±ðÌáÊŸ£ºÖŽÐÐ²œÖè2Ö®ºóÄúœ«¿ŽµœµÚÎåœ²µÚÈýœÚµÄÎÄ×Ö£¬ÇëœìÊ±ÍùÏÂÒÆ¶¯
++          ÒÔÔÙŽÎ¿Žµœ±Ÿœ²ÄÚÈÝ¡£
+ 
+-ÌØ±ðÌáÊŸ¡Ã ÖŽÐÐ²œÖè3Ö®ºóÄúœ«¿ŽµœµÚÎåœ²µÚÈýœÚ£¬ÇëœìÊ±ÔÙÍùÏÂÒÆ¶¯»ØµœÕâÀïÀŽ¡£
++  2. œÓ×ÅÍš¹ýÃüÁî :r TEST œ«Ç°ÃæŽŽœšµÄÃûÎª TEST µÄÎÄŒþÌáÈ¡œøÀŽ¡£
++     ÄúËùÌáÈ¡œøÀŽµÄÎÄŒþœ«ŽÓ¹â±êËùÔÚÎ»ÖÃŽŠ¿ªÊŒÖÃÈë¡£
+ 
+-  3. œÓ×ÅÍš¹ý :r TEST œ«Ç°ÃæŽŽœšµÄÃûÎª TEST µÄÎÄŒþÌáÈ¡œøÀŽ¡£
++  3. ÎªÁËÈ·ÈÏÎÄŒþÒÑŸ­ÌáÈ¡³É¹Š£¬ÒÆ¶¯¹â±ê»ØµœÔ­ÀŽµÄÎ»ÖÃŸÍ¿ÉÒÔ×¢ÒâÓÐÁœ·ÝµÚ
++     Îåœ²µÚÈýœÚµÄÄÚÈÝ£¬Ò»·ÝÊÇÔ­ÊŒÄÚÈÝ£¬ÁíÍâÒ»·ÝÊÇÀŽ×ÔÎÄŒþµÄž±±Ÿ¡£
+ 
+-ÌØ±ðÌáÊŸ¡ÃÄúËùÌáÈ¡œøÀŽµÄÎÄŒþœ«ŽÓ¹â±êËùÔÚÎ»ÖÃŽŠ¿ªÊŒÖÃÈë¡£
++ÌáÊŸ£ºÄú»¹¿ÉÒÔ¶ÁÈ¡Íâ²¿ÃüÁîµÄÊä³ö¡£ÀýÈç£¬ :r !ls ¿ÉÒÔ¶ÁÈ¡ ls ÃüÁîµÄÊä³ö£¬²¢
++      °ÑËü·ÅÖÃÔÚ¹â±êÏÂÃæ¡£
+ 
+-  4. ÎªÁËÈ·ÈÏÎÄŒþÒÑŸ­ÌáÈ¡³É¹Š£¬ÒÆ¶¯¹â±ê»ØµœÔ­ÀŽµÄÎ»ÖÃŸÍ¿ÉÒÔ×¢ÒâÓÐÁœ·ÝµÚ
+-     Îåœ²µÚÈýœÚ£¬Ò»·ÝÊÇÔ­±Ÿ£¬ÁíÍâÒ»·ÝÊÇÀŽ×ÔÎÄŒþµÄž±±Ÿ¡£
+ 
+ 
+ 
+@@ -605,237 +694,293 @@
+ 
+   1. :!command ÓÃÓÚÖŽÐÐÒ»žöÍâ²¿ÃüÁî command¡£
+ 
+-     Çë¿ŽÒ»Ð©ÊµŒÊÀý×Ó¡Ã
+-	  :!dir  -  ÓÃÓÚÏÔÊŸµ±Ç°Ä¿ÂŒµÄÄÚÈÝ¡£
+-	  :!rm FILENAME  -	ÓÃÓÚÉŸ³ýÃûÎª FILENAME µÄÎÄŒþ¡£
++     Çë¿ŽÒ»Ð©ÊµŒÊÀý×Ó£º
++	 (MS-DOS)	  (Unix)
++	  :!dir		   :!ls		   -  ÓÃÓÚÏÔÊŸµ±Ç°Ä¿ÂŒµÄÄÚÈÝ¡£
++	  :!del FILENAME   :!rm FILENAME   -  ÓÃÓÚÉŸ³ýÃûÎª FILENAME µÄÎÄŒþ¡£
+ 
+   2. :w FILENAME  ¿Éœ«µ±Ç° VIM ÖÐÕýÔÚ±àŒ­µÄÎÄŒþ±£ŽæµœÃûÎª FILENAME µÄÎÄ
+      ŒþÖÐ¡£
+ 
+-  3. :#,#w FILENAME ¿Éœ«µ±Ç°±àŒ­ÎÄŒþµÚ # ÐÐÖÁµÚ # ÐÐµÄÄÚÈÝ±£ŽæµœÎÄŒþ
++  3. v motion :w FILENAME ¿Éœ«µ±Ç°±àŒ­ÎÄŒþÖÐ¿ÉÊÓÄ£ÊœÏÂÑ¡ÖÐµÄÄÚÈÝ±£ŽæµœÎÄŒþ
+      FILENAME ÖÐ¡£
+ 
+   4. :r FILENAME ¿ÉÌáÈ¡ŽÅÅÌÎÄŒþ FILENAME ²¢œ«Æä²åÈëµœµ±Ç°ÎÄŒþµÄ¹â±êÎ»ÖÃ
+      ºóÃæ¡£
+ 
+-
+-
+-
+-
++  5. :r !dir ¿ÉÒÔ¶ÁÈ¡ dir ÃüÁîµÄÊä³ö²¢œ«Æä·ÅÖÃµœµ±Ç°ÎÄŒþµÄ¹â±êÎ»ÖÃºóÃæ¡£
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			 µÚÁùœ²µÚÒ»œÚ¡ÃŽò¿ªÀàÃüÁî
++			 µÚÁùœ²µÚÒ»œÚ£ºŽò¿ªÀàÃüÁî
+ 
+ 
+ 	 ** ÊäÈë o œ«ÔÚ¹â±êµÄÏÂ·œŽò¿ªÐÂµÄÒ»ÐÐ²¢œøÈë²åÈëÄ£Êœ¡£**
+ 
+   1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄÄÇÒ»ÐÐ¡£
+ 
+-  2. œÓ×ÅÊäÈëÐ¡ÐŽµÄ o ÔÚ¹â±ê *ÏÂ·œ* Žò¿ªÐÂµÄÒ»ÐÐ²¢œøÈë²åÈëÄ£Êœ¡£
++  2. œÓ×ÅÊäÈëÐ¡ÐŽµÄ o ÔÚ¹â±ê *ÏÂ·œ* Žò¿ªÐÂµÄÒ»ÐÐ£¬ÕâžöÃüÁî»áÊ¹Äú
++     œøÈë²åÈëÄ£Êœ¡£
+ 
+-  3. È»ºóžŽÖÆ±êŒÇÓÐ ---> µÄÐÐ²¢°Ž <ESC> ŒüÍË³ö²åÈëÄ£Êœ¶øœøÈëÕý³£Ä£Êœ¡£
++  3. È»ºóÊäÈëÒ»Ð©ÎÄ×Ö£¬Ö®ºó°Ž <ESC> ŒüÍË³ö²åÈëÄ£Êœ¶øœøÈëÕý³£Ä£Êœ¡£
+ 
+ ---> After typing  o  the cursor is placed on the open line in Insert mode.
+ 
+   4. ÎªÁËÔÚ¹â±ê *ÉÏ·œ* Žò¿ªÐÂµÄÒ»ÐÐ£¬Ö»ÐèÒªÊäÈëŽóÐŽµÄ O ¶ø²»ÊÇÐ¡ÐŽµÄ o
+-     ŸÍ¿ÉÒÔÁË¡£ÇëÔÚÏÂÐÐ²âÊÔÒ»ÏÂ°É¡£µ±¹â±êŽŠÔÚÔÚžÃÐÐÉÏÊ±£¬°Ž Shift-O¿ÉÒÔ
+-     ÔÚžÃÐÐÉÏ·œÐÂ¿ªÒ»ÐÐ¡£
+-
+-Open up a line above this by typing Shift-O while the cursor is on this line.
++     ŸÍ¿ÉÒÔÁË¡£ÇëÔÚÏÂÐÐ²âÊÔÒ»ÏÂ°É¡£
+ 
++---> Open up a line above this by typing O while the cursor is on this line.
+ 
+ 
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			µÚÁùœ²µÚ¶þœÚ¡Ã¹â±êºó²åÈëÀàÃüÁî
++			µÚÁùœ²µÚ¶þœÚ£ºžœŒÓÀàÃüÁî
+ 
+ 
+ 		     ** ÊäÈë a œ«¿ÉÔÚ¹â±êÖ®ºó²åÈëÎÄ±Ÿ¡£ **
+ 
+-  1. ÇëÔÚÕý³£Ä£ÊœÏÂÍš¹ýÊäÈë $ œ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐ
+-     µÄÄ©Î²¡£
++  1. ÇëÔÚÕý³£Ä£ÊœÏÂœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐµÄÐÐÊ×¡£
++
++  2. œÓ×ÅÊäÈë e Ö±µœ¹â±êÎ»ÓÚ li µÄÄ©Î²¡£
+ 
+-  2. œÓ×ÅÊäÈëÐ¡ÐŽµÄ a Ôò¿ÉÔÚ¹â±êÖ®ºó²åÈëÎÄ±ŸÁË¡£ŽóÐŽµÄ A Ôò¿ÉÒÔÖ±œÓÔÚÐÐ
+-     Ä©²åÈëÎÄ±Ÿ¡£
++  3. ÊäÈëÐ¡ÐŽµÄ a Ôò¿ÉÔÚ¹â±êÖ®ºó²åÈëÎÄ±ŸÁË¡£
+ 
+-ÌáÊŸ¡ÃÊäÈëŽóÐŽ A µÄ²Ù×÷·œ·š¿ÉÒÔÔÚÐÐÄ©²åÈëÎÄ±Ÿ£¬±ÜÃâÁËÊäÈë i£¬¹â±ê¶šÎ»µœ
+-      ×îºóÒ»žö×Ö·û£¬ÊäÈëµÄÎÄ±Ÿ£¬<ESC> »ØžŽÕý³£Ä£Êœ£¬ŒýÍ·ÓÒŒüÒÆ¶¯¹â±êÒÔŒ°
+-      x ÉŸ³ýµ±Ç°¹â±êËùÔÚÎ»ÖÃ×Ö·ûµÈµÈÖî¶à·±ÔÓµÄ²Ù×÷¡£
++  4. œ«µ¥ŽÊ²¹³äÍêÕû£¬ŸÍÏñÏÂÒ»ÐÐÖÐµÄÄÇÑù¡£Ö®ºó°Ž <ESC> ŒüÍË³ö²åÈëÄ£Êœ»Øµœ
++     Õý³£Ä£Êœ¡£
+ 
+-  3. ²Ù×÷Ö®ºóµÚÒ»ÐÐŸÍ¿ÉÒÔ²¹³äÍêÕûÁË¡£Çë×¢Òâ¹â±êºó²åÈëÎÄ±ŸÓë²åÈëÄ£ÊœÊÇ»ù
+-     ±ŸÍêÈ«Ò»ÖÂµÄ£¬Ö»ÊÇÎÄ±Ÿ²åÈëµÄÎ»ÖÃ¶šÎ»ÉÔÓÐ²»Í¬°ÕÁË¡£
++  5. Ê¹ÓÃ e ÒÆ¶¯¹â±êµœÏÂÒ»²œ²»ÍêÕûµÄµ¥ŽÊ£¬ÖØžŽ²œÖè3ºÍ²œÖè4¡£
+ 
+----> This line will allow you to practice
+----> This line will allow you to practice appending text to the end of a line.
++---> This li will allow you to pract appendi text to a line.
++---> This line will allow you to practice appending text to a line.
+ 
++ÌáÊŸ£ºa¡¢i ºÍ A ¶Œ»áŽøÄúœøÈë²åÈëÄ£Êœ£¬Î©Ò»µÄÇø±ðÔÚÓÚ×Ö·û²åÈëµÄÎ»ÖÃ¡£
+ 
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		    µÚÁùœ²µÚÈýœÚ¡ÃÁíÍâÒ»žöÖÃ»»ÀàÃüÁîµÄ°æ±Ÿ
++		    µÚÁùœ²µÚÈýœÚ£ºÁíÍâÒ»žöÖÃ»»ÀàÃüÁîµÄ°æ±Ÿ
+ 
+ 
+ 		      ** ÊäÈëŽóÐŽµÄ R ¿ÉÁ¬ÐøÌæ»»¶àžö×Ö·û¡£**
+ 
+-  1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐ¡£
+-
+-  2. ÒÆ¶¯¹â±êµœµÚÒ»ÐÐÖÐ²»Í¬ÓÚ±êÓÐ ---> µÄµÚ¶þÐÐµÄµÚÒ»žöµ¥ŽÊµÄ¿ªÊŒ£¬ŒŽµ¥
+-     ŽÊ last ŽŠ¡£
++  1. Çëœ«¹â±êÒÆ¶¯µœ±ŸœÚÖÐÏÂÃæ±êŒÇÓÐ ---> µÄµÚÒ»ÐÐ¡£ÒÆ¶¯¹â±êµœµÚÒ»žö xxx µÄ
++     ÆðÊŒÎ»ÖÃ¡£
+ 
+-  3. È»ºóÊäÈëŽóÐŽµÄ R ¿ªÊŒ°ÑµÚÒ»ÐÐÖÐµÄ²»Í¬ÓÚµÚ¶þÐÐµÄÊ£Óà×Ö·ûÖðÒ»ÊäÈë£¬ŸÍ
++  2. È»ºóÊäÈëŽóÐŽµÄ R ¿ªÊŒ°ÑµÚÒ»ÐÐÖÐµÄ²»Í¬ÓÚµÚ¶þÐÐµÄÊ£Óà×Ö·ûÖðÒ»ÊäÈë£¬ŸÍ
+      ¿ÉÒÔÈ«²¿Ìæ»»µôÔ­ÓÐµÄ×Ö·û¶øÊ¹µÃµÚÒ»ÐÐÍêÈ«À×Í¬µÚ¶þÐÐÁË¡£
+ 
+----> To make the first line the same as the last on this page use the keys.
+----> To make the first line the same as the second, type R and the new text.
++  3. œÓ×Å°Ž <ESC> ŒüÍË³öÌæ»»Ä£Êœ»ØµœÕý³£Ä£Êœ¡£Äú¿ÉÒÔ×¢ÒâµœÉÐÎŽÌæ»»µÄÎÄ±Ÿ
++     ÈÔÈ»±£³ÖÔ­×Ž¡£
+ 
+-  4. Çë×¢Òâ¡ÃÈç¹ûÄú°Ž <ESC> ÍË³öÖÃ»»Ä£Êœ»ØžŽÕý³£Ä£Êœ£¬ÉÐÎŽÌæ»»µÄÎÄ±Ÿœ«ÈÔ
+-     È»±£³ÖÔ­×Ž¡£
++  4. ÖØžŽÒÔÉÏ²œÖè£¬œ«Ê£ÓàµÄ xxx Ò²Ìæ»»µô¡£
+ 
++---> Adding 123 to xxx gives you xxx.
++---> Adding 123 to 456 gives you 579.
+ 
++ÌáÊŸ£ºÌæ»»Ä£ÊœÓë²åÈëÄ£ÊœÏàËÆ£¬²»¹ýÃ¿žöÊäÈëµÄ×Ö·û¶Œ»áÉŸ³ýÒ»žöÒÑÓÐµÄ×Ö·û¡£
+ 
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  µÚÁùœ²µÚËÄœÚ£ºžŽÖÆÕ³ÌùÎÄ±Ÿ
+ 
+ 
+-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			    µÚÁùœ²µÚËÄœÚ¡ÃÉèÖÃÀàÃüÁîµÄÑ¡Ïî
++		 ** Ê¹ÓÃ²Ù×÷·û y žŽÖÆÎÄ±Ÿ£¬Ê¹ÓÃ p Õ³ÌùÎÄ±Ÿ **
+ 
++  1. ¶šÎ»µœÏÂÃæ±êŒÇÓÐ ---> µÄÒ»ÐÐ£¬œ«¹â±êÒÆ¶¯µœ "a)" Ö®ºó¡£
+ 
+-		  ** ÉèÖÃ¿ÉÊ¹²éÕÒ»òÕßÌæ»»¿ÉºöÂÔŽóÐ¡ÐŽµÄÑ¡Ïî **
++  2. œÓ×ÅÊ¹ÓÃ v œøÈë¿ÉÊÓÄ£Êœ£¬ÒÆ¶¯¹â±êµœ "first" µÄÇ°Ãæ¡£
+ 
++  3. ÏÖÔÚÊäÈë y ÒÔ³é³ö(žŽÖÆ)žßÁÁµÄÎÄ±Ÿ¡£
+ 
+-  1. Òª²éÕÒµ¥ŽÊ ignore ¿ÉÔÚÕý³£Ä£ÊœÏÂÊäÈë /ignore ¡£ÒªÖØžŽ²éÕÒžÃŽÊ£¬¿ÉÒÔ
+-     ÖØžŽ°Ž n Œü¡£
++  4. È»ºóÒÆ¶¯¹â±êµœÏÂÒ»ÐÐµÄÄ©Î²£ºj$
+ 
+-  2. È»ºóÉèÖÃ ic Ñ¡Ïî(icŸÍÊÇÓ¢ÎÄºöÂÔŽóÐ¡ÐŽIgnore CaseµÄÊ××ÖÄžËõÐŽŽÊ)£¬ŒŽ
+-     ÊäÈë¡Ã
+-	:set ic
++  5. œÓ×ÅÊäÈë p ÒÔ·ÅÖÃ(Õ³Ìù)žŽÖÆÁËµÄÎÄ±Ÿ¡£È»ºóÊäÈë£ºa second <ESC>¡£
+ 
+-  3. ÏÖÔÚ¿ÉÒÔÍš¹ýŒüÈë n ŒüÔÙŽÎ²éÕÒµ¥ŽÊ ignore¡£ÖØžŽ²éÕÒ¿ÉÒÔÖØžŽŒüÈë n Œü¡£
++  6. Ê¹ÓÃ¿ÉÊÓÄ£ÊœÑ¡ÖÐ " item."£¬ÓÃ y žŽÖÆ£¬ÔÙÓÃ j$ œ«¹â±êÒÆ¶¯µœÏÂÒ»ÐÐÄ©Î²£¬
++     ÓÃ p œ«ÎÄ±ŸÕ³ÌùµœÄÇÀï¡£
+ 
+-  4. È»ºóÉèÖÃ hlsearch ºÍ incsearch ÕâÁœžöÑ¡Ïî£¬ÊäÈëÒÔÏÂÄÚÈÝ¡Ã
+-     :set hls is
++--->  a) this is the first item.
++      b)
+ 
+-  5. ÏÖÔÚ¿ÉÒÔÔÙŽÎÊäÈë²éÕÒÃüÁî£¬¿Ž¿Ž»áÓÐÊ²ÃŽÐ§¹û¡Ã
+-     /ignore
++  ÌáÊŸ£ºÄú»¹¿ÉÒÔ°Ñ y µ±×÷²Ù×÷·ûÀŽÊ¹ÓÃ£»ÀýÈç yw ¿ÉÒÔÓÃÀŽžŽÖÆÒ»žöµ¥ŽÊ¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-			       µÚÁùœ²Ð¡œá
++			    µÚÁùœ²µÚÎåœÚ£ºÉèÖÃÀàÃüÁîµÄÑ¡Ïî
+ 
+ 
+-  1. ÊäÈëÐ¡ÐŽµÄ o ¿ÉÒÔÔÚ¹â±êÏÂ·œŽò¿ªÐÂµÄÒ»ÐÐ²¢œ«¹â±êÖÃÓÚÐÂ¿ªµÄÐÐÊ×£¬œøÈë
+-     ²åÈëÄ£Êœ¡£
+-     ÊäÈëŽóÐŽµÄ O ¿ÉÒÔÔÚ¹â±êÉÏ·œŽò¿ªÐÂµÄÒ»ÐÐ²¢œ«¹â±êÖÃÓÚÐÂ¿ªµÄÐÐÊ×£¬œøÈë
+-     ²åÈëÄ£Êœ¡£
++		  ** ÉèÖÃ¿ÉÊ¹²éÕÒ»òÕßÌæ»»¿ÉºöÂÔŽóÐ¡ÐŽµÄÑ¡Ïî **
+ 
+-  2. ÊäÈëÐ¡ÐŽµÄ a ¿ÉÒÔÔÚ¹â±êËùÔÚÎ»ÖÃÖ®ºó²åÈëÎÄ±Ÿ¡£
+-     ÊäÈëŽóÐŽµÄ A ¿ÉÒÔÔÚ¹â±êËùÔÚÐÐµÄÐÐÄ©Ö®ºó²åÈëÎÄ±Ÿ¡£
++  1. Òª²éÕÒµ¥ŽÊ ignore ¿ÉÔÚÕý³£Ä£ÊœÏÂÊäÈë /ignore <»Ø³µ>¡£
++     ÒªÖØžŽ²éÕÒžÃŽÊ£¬¿ÉÒÔÖØžŽ°Ž n Œü¡£
++
++  2. È»ºóÉèÖÃ ic Ñ¡Ïî(Ignore Case£¬ºöÂÔŽóÐ¡ÐŽ)£¬ÇëÊäÈë£º :set ic
++
++  3. ÏÖÔÚ¿ÉÒÔÍš¹ýŒüÈë n ŒüÔÙŽÎ²éÕÒµ¥ŽÊ ignore¡£×¢Òâµœ Ignore ºÍ IGNORE ÏÖÔÚ
++     Ò²±»ÕÒµœÁË¡£
+ 
+-  3. ÊäÈëŽóÐŽµÄ R œ«œøÈëÌæ»»Ä£Êœ£¬Ö±ÖÁ°Ž <ESC> ŒüÍË³öÌæ»»Ä£Êœ¶øœøÈëÕý³£
+-     Ä£Êœ¡£
++  4. È»ºóÉèÖÃ hlsearch ºÍ incsearch ÕâÁœžöÑ¡Ïî£¬ÇëÊäÈë£º :set hls is
+ 
+-  4. ÊäÈë :set xxx ¿ÉÒÔÉèÖÃ xxx Ñ¡Ïî¡£
++  5. ÏÖÔÚ¿ÉÒÔÔÙŽÎÊäÈë²éÕÒÃüÁî£¬¿Ž¿Ž»áÓÐÊ²ÃŽÐ§¹û£º /ignore <»Ø³µ>
+ 
++  6. ÒªœûÓÃºöÂÔŽóÐ¡ÐŽ£¬ÇëÊäÈë£º :set noic
++
++ÌáÊŸ£ºÒªÒÆ³ýÆ¥ÅäÏîµÄžßÁÁÏÔÊŸ£¬ÇëÊäÈë£º  :nohlsearch
++ÌáÊŸ£ºÈç¹ûÄúÏëÒªœöÔÚÒ»ŽÎ²éÕÒÊ±ºöÂÔ×ÖÄžŽóÐ¡ÐŽ£¬Äú¿ÉÒÔÊ¹ÓÃ \c£º
++      /ignore\c <»Ø³µ>
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       µÚÁùœ²Ð¡œá
+ 
++  1. ÊäÈëÐ¡ÐŽµÄ o ¿ÉÒÔÔÚ¹â±êÏÂ·œŽò¿ªÐÂµÄÒ»ÐÐ²¢œøÈë²åÈëÄ£Êœ¡£
++     ÊäÈëŽóÐŽµÄ O ¿ÉÒÔÔÚ¹â±êÉÏ·œŽò¿ªÐÂµÄÒ»ÐÐ¡£
+ 
++  2. ÊäÈëÐ¡ÐŽµÄ a ¿ÉÒÔÔÚ¹â±êËùÔÚÎ»ÖÃÖ®ºó²åÈëÎÄ±Ÿ¡£
++     ÊäÈëŽóÐŽµÄ A ¿ÉÒÔÔÚ¹â±êËùÔÚÐÐµÄÐÐÄ©Ö®ºó²åÈëÎÄ±Ÿ¡£
+ 
++  3. e ÃüÁî¿ÉÒÔÊ¹¹â±êÒÆ¶¯µœµ¥ŽÊÄ©Î²¡£
+ 
++  4. ²Ù×÷·û y žŽÖÆÎÄ±Ÿ£¬p Õ³ÌùÏÈÇ°žŽÖÆµÄÎÄ±Ÿ¡£
+ 
++  5. ÊäÈëŽóÐŽµÄ R œ«œøÈëÌæ»»Ä£Êœ£¬Ö±ÖÁ°Ž <ESC> Œü»ØµœÕý³£Ä£Êœ¡£
+ 
++  6. ÊäÈë :set xxx ¿ÉÒÔÉèÖÃ xxx Ñ¡Ïî¡£Ò»Ð©ÓÐÓÃµÄÑ¡ÏîÈçÏÂ£º
++  	'ic' 'ignorecase'	²éÕÒÊ±ºöÂÔ×ÖÄžŽóÐ¡ÐŽ
++	'is' 'incsearch'	²éÕÒ¶ÌÓïÊ±ÏÔÊŸ²¿·ÖÆ¥Åä
++	'hls' 'hlsearch'	žßÁÁÏÔÊŸËùÓÐµÄÆ¥Åä¶ÌÓï
++     Ñ¡ÏîÃû¿ÉÒÔÓÃÍêÕû°æ±Ÿ£¬Ò²¿ÉÒÔÓÃËõÂÔ°æ±Ÿ¡£
+ 
++  7. ÔÚÑ¡ÏîÇ°ŒÓÉÏ no ¿ÉÒÔ¹Ø±ÕÑ¡Ïî£º  :set noic
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		       µÚÆßœ²¡ÃÔÚÏß°ïÖúÃüÁî
++			  µÚÆßœ²µÚÒ»œÚ£º»ñÈ¡°ïÖúÐÅÏ¢
++
+ 
+ 		      ** Ê¹ÓÃÔÚÏß°ïÖúÏµÍ³ **
+ 
+   Vim ÓµÓÐÒ»žöÏžÖÂÈ«ÃæµÄÔÚÏß°ïÖúÏµÍ³¡£ÒªÆô¶¯žÃ°ïÖúÏµÍ³£¬ÇëÑ¡ÔñÈçÏÂÈýÖÖ·œ
+-  ·šÖ®Ò»¡Ã
++  ·šÖ®Ò»£º
+ 	- °ŽÏÂ <HELP> Œü (Èç¹ûŒüÅÌÉÏÓÐµÄ»°)
+ 	- °ŽÏÂ <F1> Œü (Èç¹ûŒüÅÌÉÏÓÐµÄ»°)
+ 	- ÊäÈë	:help <»Ø³µ>
+ 
++  ÇëÔÄ¶Á°ïÖúŽ°¿ÚÖÐµÄÎÄ×ÖÒÔÁËœâ°ïÖúÊÇÈçºÎ¹€×÷µÄ¡£
++  ÊäÈë CTRL-W CTRL-W   ¿ÉÒÔÊ¹ÄúÔÚŽ°¿ÚÖ®ŒäÌø×ª¡£
+   ÊäÈë :q <»Ø³µ> ¿ÉÒÔ¹Ø±Õ°ïÖúŽ°¿Ú¡£
+ 
+   Ìá¹©Ò»žöÕýÈ·µÄ²ÎÊýžø":help"ÃüÁî£¬Äú¿ÉÒÔÕÒµœ¹ØÓÚžÃÖ÷ÌâµÄ°ïÖú¡£ÇëÊÔÑéÒÔ
+-  ÏÂ²ÎÊý(¿É±ðÍüÁË°Ž»Ø³µŒüÅ¶¡£:)¡Ã
++  ÏÂ²ÎÊý(¿É±ðÍüÁË°Ž»Ø³µŒüÅ¶)£º
++
++	:help w
++	:help c_CTRL-D
++	:help insert-index
++	:help user-manual
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  µÚÆßœ²µÚ¶þœÚ£ºŽŽœšÆô¶¯œÅ±Ÿ
++
+ 
+-	  :help w <»Ø³µ>
+-	  :help c_<T <»Ø³µ>
+-	  :help insert-index <»Ø³µ>
+-	  :help user-manual <»Ø³µ>
++			  ** ÆôÓÃ Vim µÄÌØÐÔ **
+ 
++  Vim µÄ¹ŠÄÜÌØÐÔÒª±È Vi ¶àµÃ¶à£¬µ«ÆäÖÐŽó²¿·Ö¶ŒÃ»ÓÐÈ±Ê¡ÆôÓÃ¡£ÎªÁËÊ¹ÓÃžü¶àµÄ
++  ÌØÐÔ£¬ÄúµÃŽŽœšÒ»žö vimrc ÎÄŒþ¡£
+ 
++  1. ¿ªÊŒ±àŒ­ vimrc ÎÄŒþ£¬ŸßÌåÃüÁîÈ¡ŸöÓÚÄúËùÊ¹ÓÃµÄ²Ù×÷ÏµÍ³£º
++        :edit ~/.vimrc		ÕâÊÇ Unix ÏµÍ³ËùÊ¹ÓÃµÄÃüÁî
++        :edit $VIM/_vimrc	ÕâÊÇ MS-Windows ÏµÍ³ËùÊ¹ÓÃµÄÃüÁî
+ 
++  2. œÓ×Å¶ÁÈ¡ vimrc ÊŸÀýÎÄŒþµÄÄÚÈÝ£º
++        :r $VIMRUNTIME/vimrc_example.vim
++
++  3. ±£ŽæÎÄŒþ£¬ÃüÁîÎª£º
++        :write
++
++  ÏÂŽÎÄúÆô¶¯ Vim Ê±£¬±àŒ­Æ÷ŸÍ»áÓÐÁËÓï·šžßÁÁµÄ¹ŠÄÜ¡£
++  Äú¿ÉÒÔ°ÑÄúÏ²»¶µÄž÷ÖÖÉèÖÃÌíŒÓµœÕâžö vimrc ÎÄŒþÖÐ¡£
++  ÒªÁËœâžü¶àÐÅÏ¢ÇëÊäÈë :help vimrc-intro
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+-		       µÚ°Ëœ²¡ÃŽŽœšÒ»žöÆô¶¯œÅ±Ÿ
++			    µÚÆßœ²µÚÈýœÚ£º²¹È«¹ŠÄÜ
+ 
+-			  ** ÆôÓÃvimµÄ¹ŠÄÜ **
+ 
+-  VimµÄ¹ŠÄÜÌØÐÔÒª±Èvi¶àµÃ¶à£¬µ«Žó²¿·Ö¹ŠÄÜ¶ŒÃ»ÓÐÈ±Ê¡Œ€»î¡£ÎªÁËÆô¶¯žü¶àµÄ
+-  ¹ŠÄÜ£¬ÄúµÃŽŽœšÒ»žövimrcÎÄŒþ¡£
++	      ** Ê¹ÓÃ CTRL-D ºÍ <TAB> ¿ÉÒÔœøÐÐÃüÁîÐÐ²¹È« **
+ 
+-  1. ¿ªÊŒ±àŒ­vimrcÎÄŒþ£¬ÕâÈ¡ŸöÓÚÄúËùÊ¹ÓÃµÄ²Ù×÷ÏµÍ³¡Ã
++  1. ÇëÈ·±£ Vim ²»ÊÇÔÚÒÔŒæÈÝÄ£ÊœÔËÐÐ£º :set nocp
+ 
+-     :edit ~/.vimrc		ÕâÊÇUnixÏµÍ³ËùÊ¹ÓÃµÄÃüÁî
+-     :edit $VIM/_vimrc		ÕâÊÇWindowsÏµÍ³ËùÊ¹ÓÃµÄÃüÁî
++  2. ²é¿ŽÒ»ÏÂµ±Ç°Ä¿ÂŒÏÂÒÑŸ­ŽæÔÚÄÄÐ©ÎÄŒþ£¬ÊäÈë£º :!ls   »òÕß  :!dir
+ 
+-  2. œÓ×ÅµŒÈëvimrc·¶ÀýÎÄŒþ¡Ã
++  3. ÏÖÔÚÊäÈëÒ»žöÄ¿ÂŒµÄÆðÊŒ²¿·Ö£¬ÀýÈçÊäÈë£º :e
+ 
+-     :read $VIMRUNTIME/vimrc_example.vim
++  4. œÓ×Å°Ž CTRL-D Œü£¬Vim »áÏÔÊŸÒÔ e ¿ªÊŒµÄÃüÁîµÄÁÐ±í¡£
+ 
+-  3. ±£ŽæÎÄŒþ£¬ÃüÁîÎª¡Ã
++  5. È»ºó°Ž <TAB> Œü£¬Vim »á²¹È«ÃüÁîÎª :edit ¡£
+ 
+-     :write
++  6. ÏÖÔÚÌíŒÓÒ»žö¿Õžñ£¬ÒÔŒ°Ò»žöÒÑÓÐÎÄŒþµÄÎÄŒþÃûµÄÆðÊŒ²¿·Ö£¬ÀýÈç£º :edit FIL
+ 
+-  ÔÚÏÂŽÎÄúÆô¶¯vimµÄÊ±ºò£¬±àŒ­Æ÷ŸÍ»áÓÐÁËÓï·šžßÁÁµÄ¹ŠÄÜ¡£Äú¿ÉÒÔŒÌÐø°ÑÄúÏ²
+-  »¶µÄÆäËü¹ŠÄÜÉèÖÃÌíŒÓµœÕâžövimrcÎÄŒþÖÐ¡£
++  7. œÓ×Å°Ž <TAB> Œü£¬Vim »á²¹È«ÎÄŒþÃû(Èç¹ûËüÊÇÎ©Ò»Æ¥ÅäµÄ)¡£
++
++ÌáÊŸ£º²¹È«¶ÔÓÚÐí¶àÃüÁî¶ŒÓÐÐ§¡£ÄúÖ»Ðè³¢ÊÔ°Ž CTRL-D ºÍ <TAB>¡£
++      Ëü¶ÔÓÚ :help ÃüÁî·Ç³£ÓÐÓÃ¡£
+ 
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				  µÚÆßœ²Ð¡œá
+ 
+-  vim œÌ³ÌµœŽËœáÊø¡£±ŸœÌ³ÌÖ»ÊÇÎªÁËŒòÃ÷µØœéÉÜÒ»ÏÂvim±àŒ­Æ÷£¬µ«ÒÑ×ãÒÔÈÃÄú
+-  ºÜÈÝÒ×Ñ§»áÊ¹ÓÃ±Ÿ±àŒ­Æ÷ÁË¡£ÎãÓ¹ÖÊÒÉ£¬vim»¹ÓÐºÜ¶àºÜ¶àµÄÃüÁî£¬±ŸœÌ³ÌËùœé
+-  ÉÜµÄ»¹²îµÃÔ¶ÖøÄØ¡£ËùÒÔÄúÒªŸ«ÍšµÄ»°£¬»¹ÍûŒÌÐøÅ¬ÁŠÅ¶¡£ÏÂÒ»²œÄú¿ÉÒÔÔÄ¶Á
+-  vimÊÖ²á£¬Ê¹ÓÃµÄÃüÁîÊÇ¡Ã
+-	:help user-manual
+ 
+-  ÎªÁËžüœøÒ»²œµÄ²Î¿ŒºÍÑ§Ï°£¬ÒÔÏÂÕâ±ŸÊéÖµµÃÍÆŒö¡Ã
++  1. ÊäÈë :help »òÕß°Ž <F1> Œü»ò <Help> Œü¿ÉÒÔŽò¿ª°ïÖúŽ°¿Ú¡£
+ 
+-	Vim - Vi Improved - ×÷Õß¡ÃSteve Oualline
+-	³ö°æÉç¡ÃNew Riders
++  2. ÊäÈë :help cmd ¿ÉÒÔÕÒµœ¹ØÓÚ cmd ÃüÁîµÄ°ïÖú¡£
+ 
+-  ÕâÊÇµÚÒ»±ŸÍêÈ«œ²œâvimµÄÊéŒ®¡£¶ÔÓÚ³õÑ§ÕßÌØ±ðÓÐÓÃ¡£ÆäÖÐ»¹°üº¬ÓÐŽóÁ¿ÊµÀý
+-  ºÍÍŒÊŸ¡£ÓûÖªÏêÇé£¬Çë·ÃÎÊ http://iccf-holland.org/click5.html
++  3. ÊäÈë CTRL-W CTRL-W  ¿ÉÒÔÊ¹ÄúÔÚŽ°¿ÚÖ®ŒäÌø×ª¡£
+ 
+-  ÒÔÏÂÕâ±ŸÊé±ÈœÏÀÏÁË¶øÇÒÄÚÈÝÖ÷ÒªÊÇvi¶ø²»ÊÇvim£¬µ«ÊÇÒ²ÖµµÃÍÆŒö¡Ã
++  4. ÊäÈë :q ÒÔ¹Ø±Õ°ïÖúŽ°¿Ú
+ 
+-	Learning the Vi Editor - ×÷Õß¡ÃLinda Lamb
+-	³ö°æÉç¡ÃO'Reilly & Associates Inc.
++  5. Äú¿ÉÒÔŽŽœšÒ»žö vimrc Æô¶¯œÅ±ŸÎÄŒþÓÃÀŽ±£ŽæÄúÆ«ºÃµÄÉèÖÃ¡£
+ 
+-  ÕâÊÇÒ»±Ÿ²»ŽíµÄÊé£¬Íš¹ýËüÄúŒžºõÄÜ¹»ÁËœâµœÈ«²¿viÄÜ¹»×öµœµÄÊÂÇé¡£ŽËÊéµÄµÚ
+-  Áùžö°æ±ŸÒ²°üº¬ÁËÒ»Ð©¹ØÓÚvimµÄÐÅÏ¢¡£
++  6. µ±ÊäÈë : ÃüÁîÊ±£¬°Ž CTRL-D ¿ÉÒÔ²é¿Ž¿ÉÄÜµÄ²¹È«œá¹û¡£
++     °Ž <TAB> ¿ÉÒÔÊ¹ÓÃÒ»žö²¹È«¡£
+ 
+-  ±ŸœÌ³ÌÊÇÓÉÀŽ×ÔCalorado School of MineseµÄMichael C. Pierce¡¢Robert K.
+-  Ware Ëù±àÐŽµÄ£¬ÆäÖÐÀŽ×ÔColorado State UniversityµÄCharles SmithÌá¹©ÁË
+-  ºÜ¶àŽŽÒâ¡£±àÕßÍšÐÅµØÖ·ÊÇ¡Ã
+ 
+-	bware@mines.colorado.edu
+ 
+-  ±ŸœÌ³ÌÒÑÓÉBram Moolenaar×šÎªvimœøÐÐÐÞ¶©¡£
+ 
+ 
+ 
+-  ÒëÖÆÕßžœÑÔ¡Ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++  vim œÌ³ÌµœŽËŸÍœáÊøÁË¡£±ŸœÌ³ÌÖ»ÊÇÎªÁËŒòÃ÷µØœéÉÜÒ»ÏÂ Vim ±àŒ­Æ÷£¬µ«ÒÑ×ãÒÔÈÃÄú
++  ºÜÈÝÒ×Ê¹ÓÃÕâžö±àŒ­Æ÷ÁË¡£ÎãÓ¹ÖÊÒÉ£¬vim»¹ÓÐºÜ¶àºÜ¶àµÄÃüÁî£¬±ŸœÌ³ÌËùœé
++  ÉÜµÄŸàÀëÍêÕûµÄ²îµÃºÜÔ¶¡£ËùÒÔÄúÒªŸ«ÍšµÄ»°£¬»¹ÍûŒÌÐøÅ¬ÁŠÅ¶¡£ÏÂÒ»²œÄú¿ÉÒÔÔÄ¶Á
++  Vim µÄÓÃ»§ÊÖ²á£¬Ê¹ÓÃµÄÃüÁîÊÇ£º :help user-manual
++
++  ÏÂÃæÕâ±ŸÊéÖµµÃÍÆŒöÓÃÓÚžüœøÒ»²œµÄÔÄ¶ÁºÍÑ§Ï°£º
++	Vim - Vi Improved - ×÷Õß£ºSteve Oualline
++	³ö°æÉç£ºNew Riders
++  ÕâÊÇµÚÒ»±ŸÍêÈ«œ²œâ Vim µÄÊéŒ®¡£Ëü¶ÔÓÚ³õÑ§ÕßÌØ±ðÓÐÓÃ¡£ÆäÖÐ°üº¬ÓÐŽóÁ¿ÊµÀý
++  ºÍÍŒÊŸ¡£
++  ÓûÖªÏêÇé£¬Çë·ÃÎÊ http://iccf-holland.org/click5.html
++
++  ÒÔÏÂÕâ±ŸÊé±ÈœÏÀÏÁË¶øÇÒÄÚÈÝžü¶àÊÇ¹ØÓÚ Vi ¶ø·Ç Vim£¬µ«ÊÇÒ²ÖµµÃÍÆŒö£º
++	Learning the Vi Editor - ×÷Õß£ºLinda Lamb
++	³ö°æÉç£ºO'Reilly & Associates Inc.
++  ÕâÊÇÒ»±Ÿ²»ŽíµÄÊé£¬Íš¹ýËüÄúŒžºõÄÜ¹»ÁËœâµœÈÎºÎÄúÏëÒªÊ¹ÓÃ Vi ×öµÄÊÂÇé¡£
++  ŽËÊéµÄµÚÁùžö°æ±ŸÒ²°üº¬ÁËÒ»Ð©¹ØÓÚ Vim µÄÐÅÏ¢¡£
++
++  ±ŸœÌ³ÌÊÇÓÉÀŽ×Ô Calorado School of Mines µÄ Michael C. Pierce ºÍ
++  Robert K. Ware Ëù±àÐŽµÄ£¬ÆäÖÐºÜ¶àŽŽÒâÓÉÀŽ×Ô Colorado State University µÄ
++  Charles Smith Ìá¹©¡£±àÕßµÄµç×ÓÓÊÏäÊÇ£ºbware@mines.colorado.edu
++
++  ±ŸœÌ³ÌÒÑÓÉ Bram Moolenaar ×šÎª Vim œøÐÐÐÞ¶©¡£
++
++  ÒëÖÆÕßžœÑÔ£º
+   ===========
+       ŒòÌåÖÐÎÄœÌ³Ì·­Òë°æÖ®ÒëÖÆÕßÎªÁº²ýÌ© <beos@turbolinux.com.cn>£¬»¹ÓÐ
+-      ÁíÍâÒ»žöÁªÏµµØÖ·¡Ãlinuxrat@gnuchina.org¡£
++      ÁíÍâÒ»žöÁªÏµµØÖ·£ºlinuxrat@gnuchina.org¡£
+ 
+       ·±ÌåÖÐÎÄœÌ³ÌÊÇŽÓŒòÌåÖÐÎÄœÌ³Ì·­Òë°æÊ¹ÓÃ Debian GNU/Linux ÖÐÎÄÏîÄ¿Ð¡
+       ×éµÄÓÚ¹ã»ÔÏÈÉú±àÐŽµÄÖÐÎÄºº×Ö×ªÂëÆ÷  autoconvert ×ª»»¶ø³ÉµÄ£¬²¢¶Ô×ª
+       »»µÄœá¹û×öÁËÒ»Ð©ÏžœÚµÄžÄ¶¯¡£
+ 
+-  ±äžüŒÇÂŒ¡Ã
++  ±äžüŒÇÂŒ£º
+   =========
++      2012Äê10ÔÂ01ÈÕ ÕÔÌÎ <alick9188@gmail.com>
++      œ« vimtutor ÖÐÒë°æŽÓ 1.5 ÉýŒ¶µœ 1.7¡£
++
+       2002Äê08ÔÂ30ÈÕ Áº²ýÌ© <beos@turbolinux.com.cn>
+       žÐÐ» RMS@SMTH µÄÖžÕý£¬œ«¶àŽŠŽíÎóÐÞÕý¡£
+ 
+diff -Naur vim73.orig/runtime/tutor/tutor.zh_cn.utf-8 vim73/runtime/tutor/tutor.zh_cn.utf-8
+--- vim73.orig/runtime/tutor/tutor.zh_cn.utf-8	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/tutor/tutor.zh_cn.utf-8	2013-06-07 17:07:29.022259137 +0000
+@@ -0,0 +1,996 @@
++===============================================================================
++=      æ¬¢     è¿     é
+     è¯»   ã V I M  æ  çš ã   ââ      çæ¬ 1.7       =
++===============================================================================
++
++     Vim æ¯äžäžªå
+·æåŸå€åœä»€çåèœéåžžåŒºå€§ççŒèŸåšãéäºç¯å¹
+ïŒåšæ¬æçšåœäž­
++     å°±äžè¯Šç»ä»ç»äºãæ¬æçšçè®Ÿè®¡ç®æ æ¯è®²è¿°äžäºå¿
+èŠçåºæ¬åœä»€ïŒèææ¡å¥œè¿
++     äºåœä»€ïŒæšå°±èœå€åŸå®¹æå°å° Vim åœäœäžäžªéçšçŒèŸåšæ¥äœ¿çšäºã
++
++     å®ææ¬æçšçå
+å®¹å€§çºŠéèŠ25-30åéïŒåå³äºæšè®­ç»çæ¶éŽã
++
++     æ³šæïŒ
++     æ¯äžèçåœä»€æäœå°äŒæŽæ¹æ¬æãæšèæšå€å¶æ¬æçäžäžªå¯æ¬ïŒç¶ååšå¯æ¬äž
++     è¿è¡è®­ç»(åŠææšæ¯éè¿"vimtutor"æ¥å¯åšæçšçïŒé£ä¹æ¬æå°±å·²ç»æ¯å¯æ¬äº)ã
++
++     åè®°äžç¹ïŒæ¬æçšçè®Ÿè®¡æè·¯æ¯åšäœ¿çšäž­è¿è¡å­Šä¹ çãä¹å°±æ¯è¯ŽïŒæšéèŠéè¿
++     æ§è¡åœä»€æ¥å­Šä¹ å®ä»¬æ¬èº«çæ­£ç¡®çšæ³ãåŠææšåªæ¯é
+è¯»èäžæäœïŒé£ä¹æšå¯èœ
++     äŒåŸå¿«éå¿è¿äºåœä»€çïŒ
++
++     å¥œäºïŒç°åšè¯·ç¡®å®æšçShift-Lock(å€§å°åéå®é®)è¿æ²¡ææäžïŒç¶åæé®çäž
++     çå­æ¯é® j è¶³å€å€æ¬¡æ¥ç§»åšå
+æ ïŒçŽå°ç¬¬äžèçå
+å®¹èœå€å®å
+šå
+
+æ»¡å±å¹ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè®²ç¬¬äžèïŒç§»åšå
+æ 
++
++
++	     ** èŠç§»åšå
+æ ïŒè¯·äŸç
+§è¯Žæåå«æäž hãjãkãl é®ã **
++
++	     ^
++	     k		    æç€ºïŒ h çé®äœäºå·ŠèŸ¹ïŒæ¯æ¬¡æäžå°±äŒåå·Šç§»åšã
++       < h	 l >		   l çé®äœäºå³èŸ¹ïŒæ¯æ¬¡æäžå°±äŒåå³ç§»åšã
++	     j			   j é®çèµ·æ¥åŸè±¡äžæ¯å°ç«¯æ¹åæäžçç®­å€Žã
++	     v
++
++  1. è¯·éæåšå±å¹å
+ç§»åšå
+æ ïŒçŽè³æšè§åŸèæäžºæ­¢ã
++
++  2. æäžäžè¡é®(j)ïŒçŽå°åºç°å
+æ éå€äžè¡ã
++
++---> ç°åšæšåºè¯¥å·²ç»å­ŠäŒåŠäœç§»åšå°äžäžè®²å§ã
++
++  3. ç°åšè¯·äœ¿çšäžè¡é®ïŒå°å
+æ ç§»åšå°ç¬¬äžè®²ç¬¬äºèã
++
++æç€ºïŒåŠææšäžæ¢ç¡®å®æšææäžçå­æ¯ïŒè¯·æäž<ESC>é®åå°æ­£åžž(Normal)æš¡åŒã
++      ç¶ååæ¬¡ä»é®çèŸå
+¥æšæ³èŠçåœä»€ã
++
++æç€ºïŒå
+æ é®åºåœä¹èœæ­£åžžå·¥äœçãäœæ¯äœ¿çšhjklé®ïŒåšä¹ æ¯ä¹åæšå°±èœå€æŽå¿«
++      å°åšå±å¹å
+åå€ç§»åšå
+æ ãççæ¯è¿æ ·ïŒ
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè®²ç¬¬äºèïŒVIMçè¿å
+¥åéåº
++
++
++  !! ç¹å«æç€ºïŒæ¬è¯·é
+è¯»æ¬äžèçå®æŽå
+å®¹ïŒç¶ååæ§è¡ä»¥äžæè®²è§£çåœä»€ã
++
++  1. æ<ESC>é®(è¿æ¯äžºäºç¡®ä¿æšå€åšæ­£åžžæš¡åŒ)ã
++
++  2. ç¶åèŸå
+¥ïŒ			:q! <åèœŠ>
++     è¿ç§æ¹åŒçéåºçŒèŸåšäŒäž¢åŒæšè¿å
+¥çŒèŸåšä»¥æ¥æåçæ¹åšã
++
++  3. åŠææšçå°äºåœä»€è¡æç€ºç¬ŠïŒè¯·èŸå
+¥èœå€åžŠæšåå°æ¬æçšçåœä»€ïŒé£å°±æ¯ïŒ
++     vimtutor <åèœŠ>
++
++  4. åŠææšèªä¿¡å·²ç»ç¢ç¢è®°äœäºè¿äºæ­¥éª€çè¯ïŒè¯·ä»æ­¥éª€1æ§è¡å°æ­¥éª€3éåºïŒç¶
++     ååæ¬¡è¿å
+¥çŒèŸåšã
++
++æç€ºïŒ :q! <åèœŠ> äŒäž¢åŒæšæåçä»»äœæ¹åšãå è®²ä¹åæšå°å­ŠäŒåŠäœä¿å­æ¹åšå°æä»¶ã
++
++  5. å°å
+æ äžç§»å°ç¬¬äžè®²ç¬¬äžèã
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè®²ç¬¬äžèïŒææ¬çŒèŸä¹å é€
++
++
++   ** åšæ­£åžž(Normal)æš¡åŒäžïŒå¯ä»¥æäž x é®æ¥å é€å
+æ æåšäœçœ®çå­ç¬Šã**
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çé£äžè¡ã
++
++  2. äžºäºä¿®æ­£èŸå
+¥éè¯¯ïŒè¯·å°å
+æ ç§»è³åå€å é€çå­ç¬Šçäœçœ®å€ã
++
++  3. ç¶åæäž x é®å°éè¯¯å­ç¬Šå é€æã
++
++  4. éå€æ­¥éª€2å°æ­¥éª€4ïŒçŽå°å¥å­ä¿®æ­£äžºæ­¢ã
++
++---> The ccow jumpedd ovverr thhe mooon.
++
++  5. å¥œäºïŒè¯¥è¡å·²ç»ä¿®æ­£äºïŒäžé¢æ¯ç¬¬äžè®²ç¬¬åèã
++
++ç¹å«æç€ºïŒåšæµè§æ¬æçšæ¶ïŒäžèŠåŒºè¡è®°å¿ãè®°äœäžç¹ïŒåšäœ¿çšäž­å­Šä¹ ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬äžè®²ç¬¬åèïŒææ¬çŒèŸä¹æå
+¥
++
++
++	 ** åšæ­£åžžæš¡åŒäžïŒå¯ä»¥æäž i é®æ¥æå
+¥ææ¬ã**
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çç¬¬äžè¡ã
++
++  2. äžºäºäœ¿åŸç¬¬äžè¡å
+å®¹é·åäºç¬¬äºè¡ïŒè¯·å°å
+æ ç§»è³ææ¬ç¬¬äžäžªåå€æå
+¥å­ç¬Š
++     çäœçœ®ã
++
++  3. ç¶åæäž i é®ïŒæ¥çèŸå
+¥å¿
+èŠçææ¬å­ç¬Šã
++
++  4. æ¯äžªéè¯¯ä¿®æ­£å®æ¯åïŒè¯·æäž <ESC> é®è¿åæ­£åžžæš¡åŒã
++     éå€æ­¥éª€2è³æ­¥éª€4ä»¥äŸ¿ä¿®æ­£å¥å­ã
++
++---> There is text misng this .
++---> There is some text missing from this line.
++
++  5. åŠææšå¯¹ææ¬æå
+¥æäœå·²ç»åŸæ»¡æïŒè¯·æ¥çé
+è¯»äžé¢çç¬¬äžè®²ç¬¬äºèã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬äžè®²ç¬¬äºèïŒææ¬çŒèŸä¹æ·»å 
++
++
++			** æ A é®ä»¥æ·»å ææ¬ã **
++
++  1. ç§»åšå
+æ å°äžé¢ç¬¬äžäžªæ è®°æ ---> çäžè¡ã
++     å
+æ æŸåšé£äžè¡çåªäžªå­ç¬Šäžå¹¶äžéèŠã
++
++  2. æ A é®èŸå
+¥å¿
+èŠçæ·»å å
+å®¹ã
++
++  3. ææ¬æ·»å å®æ¯åïŒæ <ESC> é®åå°æ­£åžžæš¡åŒã
++
++  4. ç§»åšå
+æ å°äžé¢ç¬¬äºäžªæ è®°æ ---> çäžè¡ãéå€æ­¥éª€2åæ­¥éª€3ä»¥æ¹æ­£è¿äžªå¥å­ã
++
++---> There is some text missing from th
++     There is some text missing from this line.
++---> There is also some text miss
++     There is also some text missing here.
++
++  5. åœæšå¯¹æ·»å ææ¬æäœæå°æ»¡ææ¶ïŒè¯·ç»§ç»­å­Šä¹ ç¬¬äžè®²ç¬¬å
+­èã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬äžè®²ç¬¬å
+­èïŒçŒèŸæä»¶
++
++		    ** äœ¿çš :wq ä»¥ä¿å­æä»¶å¹¶éåºã **
++
++  ç¹å«æç€ºïŒåšæ§è¡ä»¥äžæ­¥éª€ä¹åïŒè¯·å
+è¯»å®æŽäžªå°èïŒ
++
++  1. åŠæšåšç¬¬äžè®²ç¬¬äºèäž­æåçé£æ ·éåºæ¬æçšïŒ :q!
++     æè
+ïŒåŠææšå¯ä»¥è®¿é®åŠäžäžªç»ç«¯ïŒè¯·åšé£éæ§è¡ä»¥äžæäœã
++
++  2. åš shell çæç€ºç¬ŠäžèŸå
+¥åœä»€ïŒ vim tutor <åèœŠ>
++     'vim'æ¯å¯åš Vim çŒèŸåšçåœä»€ïŒ'tutor'æ¯æšåžæçŒèŸçæä»¶çåå­ã
++     è¯·äœ¿çšäžäžªå¯ä»¥æ¹åšçæä»¶ã
++
++  3. äœ¿çšæšåšåé¢çæçšäž­å­Šå°çåœä»€æå
+¥å é€ææ¬ã
++
++  4. ä¿å­æ¹åšè¿çæä»¶å¹¶éåº VimïŒæè¿äºé®ïŒ :wq  <åèœŠ>
++
++  5. åŠææšåšæ­¥éª€1äž­å·²ç»éåº vimtutorïŒè¯·éå¯ vimtutor ç§»åšå°äžé¢çå°ç»äžèã
++
++  6. é
+è¯»å®ä»¥äžæ­¥éª€ïŒåŒæå®ä»¬çæä¹ïŒç¶ååšå®è·µäž­è¿è¡ç»ä¹ ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬äžè®²å°ç»
++
++
++  1. å
+æ åšå±å¹ææ¬äž­çç§»åšæ¢å¯ä»¥çšç®­å€Žé®ïŒä¹å¯ä»¥äœ¿çš hjkl å­æ¯é®ã
++	 h (å·Šç§»)	j (äžè¡)       k (äžè¡)	    l (å³ç§»)
++
++  2. æ¬²è¿å
+¥ Vim çŒèŸåš(ä»åœä»€è¡æç€ºç¬Š)ïŒè¯·èŸå
+¥ïŒvim æä»¶å <åèœŠ>
++
++  3. æ¬²éåº Vim çŒèŸåšïŒè¯·èŸå
+¥ <ESC>   :q!   <åèœŠ> æŸåŒæææ¹åšã
++                      æè
+èŸå
+¥ <ESC>   :wq   <åèœŠ> ä¿å­æ¹åšã
++
++  4. åšæ­£åžžæš¡åŒäžå é€å
+æ æåšäœçœ®çå­ç¬ŠïŒè¯·æïŒ x
++
++  5. æ¬²æå
+¥ææ·»å ææ¬ïŒè¯·èŸå
+¥ïŒ
++
++	 i   èŸå
+¥æ¬²æå
+¥ææ¬   <ESC>		åšå
+æ åæå
+¥ææ¬
++	 A   èŸå
+¥æ¬²æ·»å ææ¬   <ESC>             åšäžè¡åæ·»å ææ¬
++
++ç¹å«æç€ºïŒæäž <ESC> é®äŒåžŠæšåå°æ­£åžžæš¡åŒæè
+æ€æ¶äžäžªäžæ³èŸå
+¥æéšåå®æŽ
++çåœä»€ã
++
++å¥œäºïŒç¬¬äžè®²å°æ­€ç»æãäžé¢æ¥äžæ¥ç»§ç»­ç¬¬äºè®²çå
+å®¹ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äºè®²ç¬¬äžèïŒå é€ç±»åœä»€
++
++
++	    ** èŸå
+¥ dw å¯ä»¥ä»å
+æ å€å é€è³äžäžªåè¯çæ«å°Ÿã**
++
++  1. è¯·æäž <ESC> é®ç¡®ä¿æšå€äºæ­£åžžæš¡åŒã
++
++  2. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çé£äžè¡ã
++
++  3. è¯·å°å
+æ ç§»è³åå€èŠå é€çåè¯çèµ·å§å€ã
++
++  4. æ¥çèŸå
+¥ dw å é€æè¯¥åè¯ã
++
++  ç¹å«æç€ºïŒåœæšèŸå
+¥æ¶ïŒå­æ¯ d äŒåæ¶åºç°åšå±å¹çæåäžè¡ãVim åšç­åŸ
+æšèŸå
+¥
++  å­æ¯ wãåŠææšçå°çæ¯é€ d å€çå
+¶ä»å­ç¬ŠïŒé£è¡šææšæéäºïŒè¯·æäž <ESC> é®ïŒ
++  ç¶åéæ°åæ¥ã
++
++---> There are a some words fun that don't belong paper in this sentence.
++
++  5. éå€æ­¥éª€3åæ­¥éª€4ïŒçŽè³å¥å­ä¿®æ­£å®æ¯ãæ¥çç»§ç»­ç¬¬äºè®²ç¬¬äºèå
+å®¹ã
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ç¬¬äºè®²ç¬¬äºèïŒæŽå€å é€ç±»åœä»€
++
++
++		   ** èŸå
+¥ d$ ä»åœåå
+æ å é€å°è¡æ«ã**
++
++  1. è¯·æäž <ESC> é®ç¡®ä¿æšå€äºæ­£åžžæš¡åŒã
++
++  2. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çé£äžè¡ã
++
++  3. è¯·å°å
+æ ç§»åšå°è¯¥è¡çå°Ÿéš(ä¹å°±æ¯åšç¬¬äžäžªç¹å·â.âåé¢)ã
++
++  4. ç¶åèŸå
+¥ d$ ä»å
+æ å€å è³åœåè¡å°Ÿéšã
++
++---> Somebody typed the end of this line twice. end of this line twice.
++
++
++  5. è¯·ç»§ç»­å­Šä¹ ç¬¬äºè®²ç¬¬äžèå°±ç¥éæ¯æä¹åäºäºã
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬äºè®²ç¬¬äžèïŒå
+³äºåœä»€åå¯¹è±¡
++
++
++  è®žå€æ¹åææ¬çåœä»€éœç±äžäžªæäœç¬Šåäžäžªåšäœææã
++  äœ¿çšå é€æäœç¬Š d çå é€åœä»€çæ ŒåŒåŠäžïŒ
++
++	d   motion
++
++  å
+¶äž­ïŒ
++    d      - å é€æäœç¬Šã
++    motion - æäœç¬Šçæäœå¯¹è±¡(åšäžé¢ååº)ã
++
++  äžäžªç®ç­çåšäœåè¡šïŒ
++    w - ä»åœåå
+æ åœåäœçœ®çŽå°äžäžäžªåè¯èµ·å§å€ïŒäžå
+æ¬å®çç¬¬äžäžªå­ç¬Šã
++    e - ä»åœåå
+æ åœåäœçœ®çŽå°åè¯æ«å°ŸïŒå
+æ¬æåäžäžªå­ç¬Šã
++    $ - ä»åœåå
+æ åœåäœçœ®çŽå°åœåè¡æ«ã
++
++  å æ­€èŸå
+¥ de äŒä»åœåå
+æ äœçœ®å é€å°åè¯æ«å°Ÿã
++
++ç¹å«æç€ºïŒ
++    å¯¹äºåäºæ¢çŽ¢è
+ïŒè¯·åšæ­£åžžæš¡åŒäžé¢ä»
+æä»£è¡šçžåºåšäœçé®èäžäœ¿çšæäœç¬ŠïŒæš
++    å°çå°å
+æ çç§»åšæ­£åŠäžé¢çå¯¹è±¡åè¡šæä»£è¡šçäžæ ·ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬äºè®²ç¬¬åèïŒäœ¿çšè®¡æ°æå®åšäœ
++
++
++             ** åšåšäœåèŸå
+¥æ°å­äŒäœ¿å®éå€é£ä¹å€æ¬¡ã **
++
++  1. ç§»åšå
+æ å°äžé¢æ è®°æ ---> çäžè¡çåŒå§ã
++
++  2. èŸå
+¥ 2w äœ¿å
+æ ååç§»åšäž€äžªåè¯ã
++
++  3. èŸå
+¥ 3e äœ¿å
+æ ååç§»åšå°ç¬¬äžäžªåè¯çæ«å°Ÿã
++
++  4. èŸå
+¥ 0 (æ°å­é¶) ç§»åšå
+æ å°è¡éŠã
++
++  5. éå€æ­¥éª€2åæ­¥éª€3ïŒå°è¯äžåçæ°å­ã
++
++---> This is just a line with words you can move around in.
++
++  6. è¯·ç»§ç»­å­Šä¹ ç¬¬äºè®²ç¬¬äºèã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       ç¬¬äºè®²ç¬¬äºèïŒäœ¿çšè®¡æ°ä»¥å é€æŽå€
++
++
++	       ** äœ¿çšæäœç¬Šæ¶èŸå
+¥æ°å­å¯ä»¥äœ¿å®éå€é£ä¹å€æ¬¡ã **
++
++  äžé¢å·²ç»æå°è¿å é€æäœç¬Šååšäœçç»åïŒæšå¯ä»¥åšç»åäž­åšäœä¹åæå
+¥äžäžªæ°å­ä»¥
++  å é€æŽå€ïŒ
++	 d   number(æ°å­)   motion
++
++  1. ç§»åšå
+æ å°äžé¢æ è®°æ ---> çäžè¡äž­ç¬¬äžäžªå€§åå­æ¯åè¯äžã
++
++  2. èŸå
+¥ d2w ä»¥å é€äž€äžªå€§åå­æ¯åè¯ã
++
++  3. éå€æ­¥éª€1åæ­¥éª€2ïŒäœ¿çšäžåçæ°å­äœ¿åŸçšäžäžªåœä»€å°±èœå é€å
+šéšçžé»çå€§åå­æ¯
++     åè¯
++
++--->  this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			    ç¬¬äºè®²ç¬¬å
+­èïŒæäœæŽè¡
++
++
++		     ** èŸå
+¥ dd å¯ä»¥å é€æŽäžäžªåœåè¡ã **
++
++  éŽäºæŽè¡å é€çé«é¢åºŠïŒVi çè®Ÿè®¡è
+å³å®èŠç®åæŽè¡å é€æäœïŒæšä»
+éèŠåšåäžè¡äž
++  å»æäž€æ¬¡ d å°±å¯ä»¥å é€æå
+æ æåšçæŽè¡äºã
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢çç­å¥æ®µèœäž­çç¬¬äºè¡ã
++  2. èŸå
+¥ dd å é€è¯¥è¡ã
++  3. ç¶åç§»åšå°ç¬¬åè¡ã
++  4. æ¥çèŸå
+¥ 2dd å é€äž€è¡ã
++
++--->  1)  Roses are red,
++--->  2)  Mud is fun,
++--->  3)  Violets are blue,
++--->  4)  I have a car,
++--->  5)  Clocks tell time,
++--->  6)  Sugar is sweet
++--->  7)  And so are you.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			   ç¬¬äºè®²ç¬¬äžèïŒæ€æ¶ç±»åœä»€
++
++
++	** èŸå
+¥ u æ¥æ€æ¶æåæ§è¡çåœä»€ïŒèŸå
+¥ U æ¥æ€æ¶å¯¹æŽè¡çä¿®æ¹ã **
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çé£äžè¡ïŒå¹¶å°å
+¶çœ®äºç¬¬äžäžªéè¯¯
++     å€ã
++  2. èŸå
+¥ x å é€ç¬¬äžäžªäžæ³ä¿ççå­æ¯ã
++  3. ç¶åèŸå
+¥ u æ€æ¶æåæ§è¡ç(äžæ¬¡)åœä»€ã
++  4. è¿æ¬¡èŠäœ¿çš x ä¿®æ­£æ¬è¡çææéè¯¯ã
++  5. ç°åšèŸå
+¥äžäžªå€§åç U ïŒæ¢å€å°è¯¥è¡çåå§ç¶æã
++  6. æ¥çå€æ¬¡èŸå
+¥ u ä»¥æ€æ¶ U ä»¥åæŽåçåœä»€ã
++  7. ç¶åå€æ¬¡èŸå
+¥ CTRL-R (å
+æäž CTRL é®äžæŸåŒïŒæ¥çæ R é®)ïŒè¿æ ·å°±
++     å¯ä»¥éåè¢«æ€æ¶çåœä»€ïŒä¹å°±æ¯æ€æ¶ææ€æ¶åœä»€ã
++
++---> Fiix the errors oon thhis line and reeplace them witth undo.
++
++  8. è¿äºéœæ¯éåžžæçšçåœä»€ãäžé¢æ¯ç¬¬äºè®²çå°ç»äºã
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬äºè®²å°ç»
++
++
++  1. æ¬²ä»åœåå
+æ å é€è³äžäžäžªåè¯ïŒè¯·èŸå
+¥ïŒdw
++  2. æ¬²ä»åœåå
+æ å é€è³åœåè¡æ«å°ŸïŒè¯·èŸå
+¥ïŒd$
++  3. æ¬²å é€æŽè¡ïŒè¯·èŸå
+¥ïŒdd
++
++  4. æ¬²éå€äžäžªåšäœïŒè¯·åšå®åé¢å äžäžäžªæ°å­ïŒ2w
++  5. åšæ­£åžžæš¡åŒäžä¿®æ¹åœä»€çæ ŒåŒæ¯ïŒ
++               operator   [number]   motion
++     å
+¶äž­ïŒ
++       operator - æäœç¬ŠïŒä»£è¡šèŠåçäºæ
+ïŒæ¯åŠ d ä»£è¡šå é€
++       [number] - å¯ä»¥éå çæ°å­ïŒä»£è¡šåšäœéå€çæ¬¡æ°
++       motion   - åšäœïŒä»£è¡šåšææäœçææ¬äžçç§»åšïŒäŸåŠ w ä»£è¡šåè¯(word)ïŒ
++		  $ ä»£è¡šè¡æ«ç­ç­ã
++
++  6. æ¬²ç§»åšå
+æ å°è¡éŠïŒè¯·ææ°å­0é®ïŒ0
++
++  7. æ¬²æ€æ¶ä»¥åçæäœïŒè¯·èŸå
+¥ïŒu (å°åçu)
++     æ¬²æ€æ¶åšäžè¡äž­æåçæ¹åšïŒè¯·èŸå
+¥ïŒU (å€§åçU)
++     æ¬²æ€æ¶ä»¥åçæ€æ¶åœä»€ïŒæ¢å€ä»¥åçæäœç»æïŒè¯·èŸå
+¥ïŒCTRL-R
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			   ç¬¬äžè®²ç¬¬äžèïŒçœ®å
+¥ç±»åœä»€
++
++
++		** èŸå
+¥ p å°æåäžæ¬¡å é€çå
+å®¹çœ®å
+¥å
+æ ä¹åã **
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢ç¬¬äžäžªæ è®°æ ---> çäžè¡ã
++
++  2. èŸå
+¥ dd å°è¯¥è¡å é€ïŒè¿æ ·äŒå°è¯¥è¡ä¿å­å° Vim çäžäžªå¯å­åšäž­ã
++
++  3. æ¥çå°å
+æ ç§»åšå° c) äžè¡ïŒå³åå€çœ®å
+¥çäœçœ®çäžæ¹ãè®°äœïŒæ¯äžæ¹åŠã
++
++  4. ç¶ååšæ­£åžžæš¡åŒäž(<ESC>é®è¿å
+¥)èŸå
+¥ p å°è¯¥è¡ç²èŽŽçœ®å
+¥ã
++
++  5. éå€æ­¥éª€2è³æ­¥éª€4ïŒå°ææçè¡äŸåºæŸçœ®å°æ­£ç¡®çäœçœ®äžã
++
++---> d) Can you learn too?
++---> b) Violets are blue,
++---> c) Intelligence is learned,
++---> a) Roses are red,
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			   ç¬¬äžè®²ç¬¬äºèïŒæ¿æ¢ç±»åœä»€
++
++
++	  ** èŸå
+¥ r åäžäžªå­ç¬Šæ¿æ¢å
+æ æåšäœçœ®çå­ç¬Šã**
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çç¬¬äžè¡ã
++
++  2. è¯·ç§»åšå
+æ å°ç¬¬äžäžªåºéçäœçœ®ã
++
++  3. æ¥çèŸå
+¥ r åèŠæ¿æ¢æçå­ç¬ŠïŒè¿æ ·å°±èœå°éè¯¯æ¿æ¢æäºã
++
++  4. éå€æ­¥éª€2åæ­¥éª€3ïŒçŽå°ç¬¬äžè¡å·²ç»ä¿®æ¹å®æ¯ã
++
++--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
++--->  When this line was typed in, someone pressed some wrong keys!
++
++  5. ç¶åæä»¬ç»§ç»­å­Šä¹ ç¬¬äžè®²ç¬¬äžèã
++
++ç¹å«æç€ºïŒåè®°æšèŠåšäœ¿çšäž­å­Šä¹ ïŒèäžæ¯åšè®°å¿äž­å­Šä¹ ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè®²ç¬¬äžèïŒæŽæ¹ç±»åœä»€
++
++
++		 ** èŠæ¹åææ¬çŽå°äžäžªåè¯çæ«å°ŸïŒè¯·èŸå
+¥ ce **
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çç¬¬äžè¡ã
++
++  2. æ¥çæå
+æ æŸåšåè¯ lubw çå­æ¯ u çäœçœ®é£éã
++
++  3. ç¶åèŸå
+¥ cw ä»¥åæ­£ç¡®çåè¯(åšæ¬äŸäž­æ¯èŸå
+¥ ine )ã
++
++  4. æåæ <ESC> é®ïŒç¶åå
+æ å®äœå°äžäžäžªéè¯¯ç¬¬äžäžªåå€æŽæ¹çå­æ¯å€ã
++
++  5. éå€æ­¥éª€3åæ­¥éª€4ïŒçŽå°ç¬¬äžäžªå¥å­å®å
+šé·åç¬¬äºäžªå¥å­ã
++
++---> This lubw has a few wptfd that mrrf changing usf the change operator.
++---> This line has a few words that need changing using the change operator.
++
++æç€ºïŒè¯·æ³šæ ce åœä»€äžä»
+ä»
+æ¯å é€äºäžäžªåè¯ïŒå®ä¹è®©æšè¿å
+¥æå
+¥æš¡åŒäºã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       ç¬¬äžè®²ç¬¬åèïŒäœ¿çšcæŽæ¹æŽå€
++
++
++	   ** æŽæ¹ç±»æäœç¬Šå¯ä»¥äžå é€äž­äœ¿çšçåæ ·çåšäœé
+åäœ¿çšã **
++
++  1. æŽæ¹ç±»æäœç¬Šçå·¥äœæ¹åŒè·å é€ç±»æ¯äžèŽçãæäœæ ŒåŒæ¯ïŒ
++
++         c    [number]   motion
++
++  2. åšäœåæ°(motion)ä¹æ¯äžæ ·çïŒæ¯åŠ w ä»£è¡šåè¯ïŒ$ä»£è¡šè¡æ«ç­ç­ã
++
++  3. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çç¬¬äžè¡ã
++
++  4. æ¥çå°å
+æ ç§»åšå°ç¬¬äžäžªéè¯¯å€ã
++
++  5. ç¶åèŸå
+¥ c$ äœ¿åŸè¯¥è¡å©äžçéšåæŽæ­£åŸåç¬¬äºè¡äžæ ·ãæåæ <ESC> é®ã
++
++---> The end of this line needs some help to make it like the second.
++---> The end of this line needs to be corrected using the  c$  command.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				  ç¬¬äžè®²å°ç»
++
++
++  1. èŠéæ°çœ®å
+¥å·²ç»å é€çææ¬å
+å®¹ïŒè¯·æå°åå­æ¯ p é®ãè¯¥æäœå¯ä»¥å°å·²å é€
++     çææ¬å
+å®¹çœ®äºå
+æ ä¹åãåŠææåäžæ¬¡å é€çæ¯äžäžªæŽè¡ïŒé£ä¹è¯¥è¡å°çœ®
++     äºåœåå
+æ æåšè¡çäžäžè¡ã
++
++  2. èŠæ¿æ¢å
+æ æåšäœçœ®çå­ç¬ŠïŒè¯·èŸå
+¥å°åç r åèŠæ¿æ¢æåäœçœ®å­ç¬Šçæ°å­
++     ç¬Šå³å¯ã
++
++  3. æŽæ¹ç±»åœä»€å
+è®žæšæ¹åä»åœåå
+æ æåšäœçœ®çŽå°åšäœæç€ºçäœçœ®äž­éŽçææ¬ã
++     æ¯åŠèŸå
+¥ ce å¯ä»¥æ¿æ¢åœåå
+æ å°åè¯çæ«å°Ÿçå
+å®¹ïŒèŸå
+¥ c$ å¯ä»¥æ¿æ¢åœ
++     åå
+æ å°è¡æ«çå
+å®¹ã
++
++  4. æŽæ¹ç±»åœä»€çæ ŒåŒæ¯ïŒ
++
++	 c   [number]   motion
++
++ç°åšæä»¬ç»§ç»­å­Šä¹ äžäžè®²ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬åè®²ç¬¬äžèïŒå®äœåæä»¶ç¶æ
++
++  ** èŸå
+¥ CTRL-G æŸç€ºåœåçŒèŸæä»¶äž­åœåå
+æ æåšè¡äœçœ®ä»¥åæä»¶ç¶æä¿¡æ¯ã
++     èŸå
+¥å€§å G åçŽæ¥è·³èœ¬å°æä»¶äž­çæäžæå®è¡ã**
++
++  æç€ºïŒåè®°èŠå
+éè¯»æ¬èå
+å®¹ïŒä¹åæå¯ä»¥æ§è¡ä»¥äžæ­¥éª€!!!
++
++  1. æäž CTRL é®äžæŸåŒç¶åæ g é®ãæä»¬ç§°è¿äžªé®ç»åäžº CTRL-Gã
++     æšäŒçå°é¡µé¢æåºéšåºç°äžäžªç¶æä¿¡æ¯è¡ïŒæŸç€ºçå
+å®¹æ¯åœåçŒèŸçæä»¶å
++     åæä»¶äž­å
+æ äœçœ®ãè¯·è®°äœè¡å·ïŒå®äŒåšæ­¥éª€3äž­çšå°ã
++
++æç€ºïŒæšä¹è®žäŒåšå±å¹çå³äžè§çå°å
+æ äœçœ®ïŒè¿äŒåš 'ruler' éé¡¹è®Ÿçœ®æ¶åç
++      (åè§ :help 'ruler')
++
++  2. èŸå
+¥å€§å G å¯ä»¥äœ¿åŸåœåå
+æ çŽæ¥è·³èœ¬å°æä»¶æåäžè¡ã
++     èŸå
+¥ gg å¯ä»¥äœ¿åŸåœåå
+æ çŽæ¥è·³èœ¬å°æä»¶ç¬¬äžè¡ã
++
++  3. èŸå
+¥æšæŸåççè¡å·ïŒç¶åèŸå
+¥å€§å Gãè¿æ ·å°±å¯ä»¥è¿åå°æšç¬¬äžæ¬¡æäž
++     CTRL-G æ¶æåšçè¡äºã
++
++  4. åŠææšè§åŸæ²¡é®é¢çè¯ïŒè¯·æ§è¡æ­¥éª€1è³æ­¥éª€3çæäœè¿è¡ç»ä¹ ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬åè®²ç¬¬äºèïŒæçŽ¢ç±»åœä»€
++
++
++     ** èŸå
+¥ / å äžäžäžªå­ç¬Šäž²å¯ä»¥çšä»¥åšåœåæä»¶äž­æ¥æŸè¯¥å­ç¬Šäž²ã**
++
++  1. åšæ­£åžžæš¡åŒäžèŸå
+¥ / å­ç¬Šãæšæ­€æ¶äŒæ³šæå°è¯¥å­ç¬Šåå
+æ éœäŒåºç°åšå±å¹åº
++     éšïŒè¿è· : åœä»€æ¯äžæ ·çã
++
++  2. æ¥çèŸå
+¥ errroor <åèœŠ>ãé£äžªerrroorå°±æ¯æšèŠæ¥æŸçå­ç¬Šäž²ã
++
++  3. èŠæ¥æŸåäžäžæ¬¡çå­ç¬Šäž²ïŒåªéèŠæ n é®ãèŠåçžåæ¹åæ¥æŸåäžäžæ¬¡çå­
++     ç¬Šäž²ïŒè¯·èŸå
+¥å€§å N å³å¯ã
++
++  4. åŠææšæ³éåæ¥æŸå­ç¬Šäž²ïŒè¯·äœ¿çš ? ä»£æ¿ / è¿è¡ã
++
++  5. èŠåå°æšä¹åçäœçœ®æ CTRL-O (æäœ Ctrl é®äžæŸåæ¶æäžå­æ¯ o)ãéå€æå¯ä»¥
++     åéæŽå€æ­¥ãCTRL-I äŒè·³èœ¬å°èŸæ°çäœçœ®ã
++
++--->  "errroor" is not the way to spell error;  errroor is an error.
++æç€ºïŒåŠææ¥æŸå·²ç»å°èŸŸæä»¶æ«å°ŸïŒæ¥æŸäŒèªåšä»æä»¶å€Žéšç»§ç»­æ¥æŸïŒé€é
++      'wrapscan' éé¡¹è¢«å€äœã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ç¬¬åè®²ç¬¬äžèïŒé
+å¯¹æ¬å·çæ¥æŸ
++
++
++	      ** èŸå
+¥ % å¯ä»¥æ¥æŸé
+å¯¹çæ¬å· )ã]ã}ã**
++
++  1. æå
+æ æŸåšæ¬èäžé¢æ è®°æ --> é£äžè¡äž­çä»»äœäžäžª (ã[ æ { å€ã
++
++  2. æ¥çæ % å­ç¬Šã
++
++  3. æ­€æ¶å
+æ çäœçœ®åºåœæ¯åšé
+å¯¹çæ¬å·å€ã
++
++  4. åæ¬¡æ % å°±å¯ä»¥è·³åé
+å¯¹çç¬¬äžäžªæ¬å·å€ã
++
++  5. ç§»åšå
+æ å°åŠäžäžª (ã)ã[ã]ã{ æ } å€ïŒæ % æ¥çå
+¶æäœæäžºã
++
++---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
++
++
++æç€ºïŒåšçšåºè°è¯æ¶ïŒè¿äžªåèœçšæ¥æ¥æŸäžé
+å¯¹çæ¬å·æ¯åŸæçšçã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ç¬¬åè®²ç¬¬åèïŒæ¿æ¢åœä»€
++
++
++		** èŸå
+¥ :s/old/new/g å¯ä»¥æ¿æ¢ old äžº newã**
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çé£äžè¡ã
++
++  2. èŸå
+¥ :s/thee/the <åèœŠ> ãè¯·æ³šæè¯¥åœä»€åªæ¹åå
+æ æåšè¡çç¬¬äžäžªå¹é
+
++     äž²ã
++
++  3. èŸå
+¥ :s/thee/the/g	åæ¯æ¿æ¢å
+šè¡çå¹é
+äž²ïŒè¯¥è¡äž­ææç "thee" éœäŒè¢«
++     æ¹åã
++
++---> thee best time to see thee flowers is in thee spring.
++
++  4. èŠæ¿æ¢äž€è¡ä¹éŽåºç°çæ¯äžªå¹é
+äž²ïŒè¯·
++     èŸå
+¥   :#,#s/old/new/g   å
+¶äž­ #,# ä»£è¡šçæ¯æ¿æ¢æäœçè¥å¹²è¡äž­
++                              éŠå°Ÿäž€è¡çè¡å·ã
++     èŸå
+¥   :%s/old/new/g     åæ¯æ¿æ¢æŽäžªæä»¶äž­çæ¯äžªå¹é
+äž²ã
++     èŸå
+¥   :%s/old/new/gc    äŒæŸå°æŽäžªæä»¶äž­çæ¯äžªå¹é
+äž²ïŒå¹¶äžå¯¹æ¯äžªå¹é
+äž²
++                              æç€ºæ¯åŠè¿è¡æ¿æ¢ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬åè®²å°ç»
++
++
++  1. CTRL-G çšäºæŸç€ºåœåå
+æ æåšäœçœ®åæä»¶ç¶æä¿¡æ¯ã
++     G çšäºå°å
+æ è·³èœ¬è³æä»¶æåäžè¡ã
++     å
+æ²å
+¥äžäžªè¡å·ç¶åèŸå
+¥å€§å G åæ¯å°å
+æ ç§»åšè³è¯¥è¡å·ä»£è¡šçè¡ã
++     gg çšäºå°å
+æ è·³èœ¬è³æä»¶ç¬¬äžè¡ã
++
++  2. èŸå
+¥ / ç¶åçŽ§éäžäžªå­ç¬Šäž²æ¯åšåœåæçŒèŸçææ¡£äž­æ­£åæ¥æŸè¯¥å­ç¬Šäž²ã
++     èŸå
+¥ ? ç¶åçŽ§éäžäžªå­ç¬Šäž²åæ¯åšåœåæçŒèŸçææ¡£äž­ååæ¥æŸè¯¥å­ç¬Šäž²ã
++     å®æäžæ¬¡æ¥æŸä¹åæ n é®æ¯éå€äžäžæ¬¡çåœä»€ïŒå¯åšåäžæ¹åäžæ¥
++     æŸäžäžäžªå¹é
+å­ç¬Šäž²æåšïŒæè
+æå€§å N åçžåæ¹åæ¥æŸäžäžå¹é
+å­ç¬Šäž²æåšã
++     CTRL-O åžŠæšè·³èœ¬åèŸæ§çäœçœ®ïŒCTRL-I ååžŠæšå°èŸæ°çäœçœ®ã
++
++  3. åŠæå
+æ åœåäœçœ®æ¯æ¬å·(ã)ã[ã]ã{ã}ïŒæ % äŒå°å
+æ ç§»åšå°é
+å¯¹çæ¬å·äžã
++
++  4. åšäžè¡å
+æ¿æ¢å€Žäžäžªå­ç¬Šäž² old äžºæ°çå­ç¬Šäž² newïŒè¯·èŸå
+¥  :s/old/new
++     åšäžè¡å
+æ¿æ¢ææçå­ç¬Šäž² old äžºæ°çå­ç¬Šäž² newïŒè¯·èŸå
+¥  :s/old/new/g
++     åšäž€è¡å
+æ¿æ¢ææçå­ç¬Šäž² old äžºæ°çå­ç¬Šäž² newïŒè¯·èŸå
+¥  :#,#s/old/new/g
++     åšæä»¶å
+æ¿æ¢ææçå­ç¬Šäž² old äžºæ°çå­ç¬Šäž² newïŒè¯·èŸå
+¥  :%s/old/new/g
++     è¿è¡å
+šææ¿æ¢æ¶è¯¢é®çšæ·ç¡®è®€æ¯äžªæ¿æ¢éæ·»å  c æ å¿        :%s/old/new/gc
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		ç¬¬äºè®²ç¬¬äžèïŒåš VIM å
+æ§è¡å€éšåœä»€çæ¹æ³
++
++
++	   ** èŸå
+¥ :! ç¶åçŽ§æ¥çèŸå
+¥äžäžªå€éšåœä»€å¯ä»¥æ§è¡è¯¥å€éšåœä»€ã**
++
++  1. æäžæä»¬æçæç : åœä»€äœ¿å
+æ ç§»åšå°å±å¹åºéšãè¿æ ·æšå°±å¯ä»¥èŸå
+¥äžè¡åœä»€äºã
++
++  2. æ¥çèŸå
+¥æå¹å· ! è¿äžªå­ç¬ŠïŒè¿æ ·å°±å
+è®žæšæ§è¡å€éšç shell åœä»€äºã
++
++  3. æä»¬ä»¥ ls åœä»€äžºäŸãèŸå
+¥ !ls <åèœŠ> ãè¯¥åœä»€å°±äŒåäžŸåºæšåœåç®åœç
++     å
+å®¹ïŒå°±åŠåæšåšåœä»€è¡æç€ºç¬ŠäžèŸå
+¥ ls åœä»€çç»æäžæ ·ãåŠæ !ls æ²¡èµ·
++     äœçšïŒæšå¯ä»¥è¯è¯ :!dir ççã
++
++æç€ºïŒææçå€éšåœä»€éœå¯ä»¥ä»¥è¿ç§æ¹åŒæ§è¡ïŒå
+æ¬åžŠåœä»€è¡åæ°çé£äºã
++
++æç€ºïŒææç : åœä»€éœå¿
+é¡»ä»¥æ² <åèœŠ> é®ç»æãä»ä»ä»¥åæä»¬å°±äžäŒæ»æ¯æå°è¿äžç¹
++      äºã
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ç¬¬äºè®²ç¬¬äºèïŒå
+³äºä¿å­æä»¶çæŽå€ä¿¡æ¯
++
++
++	     ** èŠå°å¯¹æä»¶çæ¹åšä¿å­å°æä»¶äž­ïŒè¯·èŸå
+¥ :w FILENAME ã**
++
++  1. èŸå
+¥ :!dir æè
+ :!ls è·ç¥åœåç®åœçå
+å®¹ãæšåºåœå·²ç¥éæåè¿åŸæ²
++     <åèœŠ> å§ã
++
++  2. éæ©äžäžªæªè¢«çšå°çæä»¶åïŒæ¯åŠ TESTã
++
++  3. æ¥çèŸå
+¥ :w TEST  (æ­€å€ TEST æ¯æšæéæ©çæä»¶åã)
++
++  4. è¯¥åœä»€äŒä»¥ TEST äžºæä»¶åä¿å­æŽäžªæä»¶ (Vim æçš)ãäžºäºéªè¯è¿äžç¹ïŒ
++     è¯·åæ¬¡èŸå
+¥ :!dir æ :!ls æ¥çæšçç®åœåè¡šå
+å®¹ã
++
++è¯·æ³šæïŒåŠææšéåº Vim ç¶ååšä»¥åœä»€ vim TEST åæ¬¡å¯åš VimïŒé£ä¹è¯¥æä»¶å
+
++     å®¹åºè¯¥åæšä¿å­æ¶çæä»¶å
+å®¹æ¯å®å
+šäžæ ·çã
++
++  5. ç°åšæšå¯ä»¥å é€ TEST æä»¶äºãåš MS-DOS äžïŒè¯·èŸå
+¥ïŒ   :!del TEST
++                                 åš Unix äžïŒè¯·èŸå
+¥ïŒ     :!rm TEST
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		    ç¬¬äºè®²ç¬¬äžèïŒäžäžªå
+·æéæ©æ§çä¿å­åœä»€
++
++
++	    ** èŠä¿å­æä»¶çéšåå
+å®¹ïŒè¯·èŸå
+¥ v motion :w FILENAME **
++
++  1. ç§»åšå
+æ å°æ¬è¡ã
++
++  2. æ¥çæ v é®ïŒå°å
+æ ç§»åšè³äžé¢ç¬¬äºäžªæ¡ç®äžãæšäŒæ³šæå°ä¹éŽçææ¬è¢«é«äº®äºã
++
++  3. ç¶åæ : å­ç¬Šãæšå°çå°å±å¹åºéšäŒåºç° :'<,'> ã
++
++  4. ç°åšè¯·èŸå
+¥ w TESTïŒå
+¶äž­ TEST æ¯äžäžªæªè¢«äœ¿çšçæä»¶åãç¡®è®€æšçå°äº
++     :'<,'>w TEST ä¹åæ <åèœŠ> é®ã
++
++  5. è¿æ¶ Vim äŒæéäž­çè¡åå
+¥å°ä»¥ TEST åœåçæä»¶äž­å»ãäœ¿çš :!dir æ :!ls
++     ç¡®è®€æä»¶è¢«æ­£ç¡®ä¿å­ãè¿æ¬¡å
+å«å é€å®ïŒæä»¬åšäžäžè®²äž­äŒçšå°å®ã
++
++æç€ºïŒæ v é®äœ¿ Vim è¿å
+¥å¯è§æš¡åŒè¿è¡éåãæšå¯ä»¥åå€ç§»åšå
+æ äœ¿éååºååå€§æ
++      åå°ãæ¥çæšå¯ä»¥äœ¿çšäžäžªæäœç¬Šå¯¹éäž­ææ¬è¿è¡æäœãäŸåŠïŒæ d é®äŒå é€
++      éäž­çææ¬å
+å®¹ã
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ç¬¬äºè®²ç¬¬åèïŒæåååå¹¶æä»¶
++
++
++       ** èŠååœåæä»¶äž­æå
+¥åŠå€çæä»¶çå
+å®¹ïŒè¯·èŸå
+¥ :r FILENAME **
++
++  1. è¯·æå
+æ ç§»åšå°æ¬è¡äžé¢äžè¡ã
++
++ç¹å«æç€ºïŒæ§è¡æ­¥éª€2ä¹åæšå°çå°ç¬¬äºè®²ç¬¬äžèçæå­ïŒè¯·å±æ¶åŸäžç§»åš
++          ä»¥åæ¬¡çå°æ¬è®²å
+å®¹ã
++
++  2. æ¥çéè¿åœä»€ :r TEST å°åé¢åå»ºçåäžº TEST çæä»¶æåè¿æ¥ã
++     æšææåè¿æ¥çæä»¶å°ä»å
+æ æåšäœçœ®å€åŒå§çœ®å
+¥ã
++
++  3. äžºäºç¡®è®€æä»¶å·²ç»æåæåïŒç§»åšå
+æ åå°åæ¥çäœçœ®å°±å¯ä»¥æ³šææäž€ä»œç¬¬
++     äºè®²ç¬¬äžèçå
+å®¹ïŒäžä»œæ¯åå§å
+å®¹ïŒåŠå€äžä»œæ¯æ¥èªæä»¶çå¯æ¬ã
++
++æç€ºïŒæšè¿å¯ä»¥è¯»åå€éšåœä»€çèŸåºãäŸåŠïŒ :r !ls å¯ä»¥è¯»å ls åœä»€çèŸåºïŒå¹¶
++      æå®æŸçœ®åšå
+æ äžé¢ã
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬äºè®²å°ç»
++
++
++  1. :!command çšäºæ§è¡äžäžªå€éšåœä»€ commandã
++
++     è¯·çäžäºå®é
+äŸå­ïŒ
++	 (MS-DOS)	  (Unix)
++	  :!dir		   :!ls		   -  çšäºæŸç€ºåœåç®åœçå
+å®¹ã
++	  :!del FILENAME   :!rm FILENAME   -  çšäºå é€åäžº FILENAME çæä»¶ã
++
++  2. :w FILENAME  å¯å°åœå VIM äž­æ­£åšçŒèŸçæä»¶ä¿å­å°åäžº FILENAME çæ
++     ä»¶äž­ã
++
++  3. v motion :w FILENAME å¯å°åœåçŒèŸæä»¶äž­å¯è§æš¡åŒäžéäž­çå
+å®¹ä¿å­å°æä»¶
++     FILENAME äž­ã
++
++  4. :r FILENAME å¯æåç£çæä»¶ FILENAME å¹¶å°å
+¶æå
+¥å°åœåæä»¶çå
+æ äœçœ®
++     åé¢ã
++
++  5. :r !dir å¯ä»¥è¯»å dir åœä»€çèŸåºå¹¶å°å
+¶æŸçœ®å°åœåæä»¶çå
+æ äœçœ®åé¢ã
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 ç¬¬å
+­è®²ç¬¬äžèïŒæåŒç±»åœä»€
++
++
++	 ** èŸå
+¥ o å°åšå
+æ çäžæ¹æåŒæ°çäžè¡å¹¶è¿å
+¥æå
+¥æš¡åŒã**
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çé£äžè¡ã
++
++  2. æ¥çèŸå
+¥å°åç o åšå
+æ  *äžæ¹* æåŒæ°çäžè¡ïŒè¿äžªåœä»€äŒäœ¿æš
++     è¿å
+¥æå
+¥æš¡åŒã
++
++  3. ç¶åèŸå
+¥äžäºæå­ïŒä¹åæ <ESC> é®éåºæå
+¥æš¡åŒèè¿å
+¥æ­£åžžæš¡åŒã
++
++---> After typing  o  the cursor is placed on the open line in Insert mode.
++
++  4. äžºäºåšå
+æ  *äžæ¹* æåŒæ°çäžè¡ïŒåªéèŠèŸå
+¥å€§åç O èäžæ¯å°åç o
++     å°±å¯ä»¥äºãè¯·åšäžè¡æµè¯äžäžå§ã
++
++---> Open up a line above this by typing O while the cursor is on this line.
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬å
+­è®²ç¬¬äºèïŒéå ç±»åœä»€
++
++
++		     ** èŸå
+¥ a å°å¯åšå
+æ ä¹åæå
+¥ææ¬ã **
++
++  1. è¯·åšæ­£åžžæš¡åŒäžå°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çç¬¬äžè¡çè¡éŠã
++
++  2. æ¥çèŸå
+¥ e çŽå°å
+æ äœäº li çæ«å°Ÿã
++
++  3. èŸå
+¥å°åç a åå¯åšå
+æ ä¹åæå
+¥ææ¬äºã
++
++  4. å°åè¯è¡¥å
+
+å®æŽïŒå°±åäžäžè¡äž­çé£æ ·ãä¹åæ <ESC> é®éåºæå
+¥æš¡åŒåå°
++     æ­£åžžæš¡åŒã
++
++  5. äœ¿çš e ç§»åšå
+æ å°äžäžæ­¥äžå®æŽçåè¯ïŒéå€æ­¥éª€3åæ­¥éª€4ã
++
++---> This li will allow you to pract appendi text to a line.
++---> This line will allow you to practice appending text to a line.
++
++æç€ºïŒaãi å A éœäŒåžŠæšè¿å
+¥æå
+¥æš¡åŒïŒæäžçåºå«åšäºå­ç¬Šæå
+¥çäœçœ®ã
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		    ç¬¬å
+­è®²ç¬¬äžèïŒåŠå€äžäžªçœ®æ¢ç±»åœä»€ççæ¬
++
++
++		      ** èŸå
+¥å€§åç R å¯è¿ç»­æ¿æ¢å€äžªå­ç¬Šã**
++
++  1. è¯·å°å
+æ ç§»åšå°æ¬èäž­äžé¢æ è®°æ ---> çç¬¬äžè¡ãç§»åšå
+æ å°ç¬¬äžäžª xxx ç
++     èµ·å§äœçœ®ã
++
++  2. ç¶åèŸå
+¥å€§åç R åŒå§æç¬¬äžè¡äž­çäžåäºç¬¬äºè¡çå©äœå­ç¬ŠéäžèŸå
+¥ïŒå°±
++     å¯ä»¥å
+šéšæ¿æ¢æåæçå­ç¬Šèäœ¿åŸç¬¬äžè¡å®å
+šé·åç¬¬äºè¡äºã
++
++  3. æ¥çæ <ESC> é®éåºæ¿æ¢æš¡åŒåå°æ­£åžžæš¡åŒãæšå¯ä»¥æ³šæå°å°æªæ¿æ¢çææ¬
++     ä»ç¶ä¿æåç¶ã
++
++  4. éå€ä»¥äžæ­¥éª€ïŒå°å©äœç xxx ä¹æ¿æ¢æã
++
++---> Adding 123 to xxx gives you xxx.
++---> Adding 123 to 456 gives you 579.
++
++æç€ºïŒæ¿æ¢æš¡åŒäžæå
+¥æš¡åŒçžäŒŒïŒäžè¿æ¯äžªèŸå
+¥çå­ç¬ŠéœäŒå é€äžäžªå·²æçå­ç¬Šã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  ç¬¬å
+­è®²ç¬¬åèïŒå€å¶ç²èŽŽææ¬
++
++
++		 ** äœ¿çšæäœç¬Š y å€å¶ææ¬ïŒäœ¿çš p ç²èŽŽææ¬ **
++
++  1. å®äœå°äžé¢æ è®°æ ---> çäžè¡ïŒå°å
+æ ç§»åšå° "a)" ä¹åã
++
++  2. æ¥çäœ¿çš v è¿å
+¥å¯è§æš¡åŒïŒç§»åšå
+æ å° "first" çåé¢ã
++
++  3. ç°åšèŸå
+¥ y ä»¥æœåº(å€å¶)é«äº®çææ¬ã
++
++  4. ç¶åç§»åšå
+æ å°äžäžè¡çæ«å°ŸïŒj$
++
++  5. æ¥çèŸå
+¥ p ä»¥æŸçœ®(ç²èŽŽ)å€å¶äºçææ¬ãç¶åèŸå
+¥ïŒa second <ESC>ã
++
++  6. äœ¿çšå¯è§æš¡åŒéäž­ " item."ïŒçš y å€å¶ïŒåçš j$ å°å
+æ ç§»åšå°äžäžè¡æ«å°ŸïŒ
++     çš p å°ææ¬ç²èŽŽå°é£éã
++
++--->  a) this is the first item.
++      b)
++
++  æç€ºïŒæšè¿å¯ä»¥æ y åœäœæäœç¬Šæ¥äœ¿çšïŒäŸåŠ yw å¯ä»¥çšæ¥å€å¶äžäžªåè¯ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			    ç¬¬å
+­è®²ç¬¬äºèïŒè®Ÿçœ®ç±»åœä»€çéé¡¹
++
++
++		  ** è®Ÿçœ®å¯äœ¿æ¥æŸæè
+æ¿æ¢å¯å¿œç¥å€§å°åçéé¡¹ **
++
++  1. èŠæ¥æŸåè¯ ignore å¯åšæ­£åžžæš¡åŒäžèŸå
+¥ /ignore <åèœŠ>ã
++     èŠéå€æ¥æŸè¯¥è¯ïŒå¯ä»¥éå€æ n é®ã
++
++  2. ç¶åè®Ÿçœ® ic éé¡¹(Ignore CaseïŒå¿œç¥å€§å°å)ïŒè¯·èŸå
+¥ïŒ :set ic
++
++  3. ç°åšå¯ä»¥éè¿é®å
+¥ n é®åæ¬¡æ¥æŸåè¯ ignoreãæ³šæå° Ignore å IGNORE ç°åš
++     ä¹è¢«æŸå°äºã
++
++  4. ç¶åè®Ÿçœ® hlsearch å incsearch è¿äž€äžªéé¡¹ïŒè¯·èŸå
+¥ïŒ :set hls is
++
++  5. ç°åšå¯ä»¥åæ¬¡èŸå
+¥æ¥æŸåœä»€ïŒççäŒæä»ä¹ææïŒ /ignore <åèœŠ>
++
++  6. èŠçŠçšå¿œç¥å€§å°åïŒè¯·èŸå
+¥ïŒ :set noic
++
++æç€ºïŒèŠç§»é€å¹é
+é¡¹çé«äº®æŸç€ºïŒè¯·èŸå
+¥ïŒ  :nohlsearch
++æç€ºïŒåŠææšæ³èŠä»
+åšäžæ¬¡æ¥æŸæ¶å¿œç¥å­æ¯å€§å°åïŒæšå¯ä»¥äœ¿çš \cïŒ
++      /ignore\c <åèœŠ>
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬å
+­è®²å°ç»
++
++  1. èŸå
+¥å°åç o å¯ä»¥åšå
+æ äžæ¹æåŒæ°çäžè¡å¹¶è¿å
+¥æå
+¥æš¡åŒã
++     èŸå
+¥å€§åç O å¯ä»¥åšå
+æ äžæ¹æåŒæ°çäžè¡ã
++
++  2. èŸå
+¥å°åç a å¯ä»¥åšå
+æ æåšäœçœ®ä¹åæå
+¥ææ¬ã
++     èŸå
+¥å€§åç A å¯ä»¥åšå
+æ æåšè¡çè¡æ«ä¹åæå
+¥ææ¬ã
++
++  3. e åœä»€å¯ä»¥äœ¿å
+æ ç§»åšå°åè¯æ«å°Ÿã
++
++  4. æäœç¬Š y å€å¶ææ¬ïŒp ç²èŽŽå
+åå€å¶çææ¬ã
++
++  5. èŸå
+¥å€§åç R å°è¿å
+¥æ¿æ¢æš¡åŒïŒçŽè³æ <ESC> é®åå°æ­£åžžæš¡åŒã
++
++  6. èŸå
+¥ :set xxx å¯ä»¥è®Ÿçœ® xxx éé¡¹ãäžäºæçšçéé¡¹åŠäžïŒ
++  	'ic' 'ignorecase'	æ¥æŸæ¶å¿œç¥å­æ¯å€§å°å
++	'is' 'incsearch'	æ¥æŸç­è¯­æ¶æŸç€ºéšåå¹é
+
++	'hls' 'hlsearch'	é«äº®æŸç€ºææçå¹é
+ç­è¯­
++     éé¡¹åå¯ä»¥çšå®æŽçæ¬ïŒä¹å¯ä»¥çšçŒ©ç¥çæ¬ã
++
++  7. åšéé¡¹åå äž no å¯ä»¥å
+³é­éé¡¹ïŒ  :set noic
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  ç¬¬äžè®²ç¬¬äžèïŒè·ååž®å©ä¿¡æ¯
++
++
++		      ** äœ¿çšåšçº¿åž®å©ç³»ç» **
++
++  Vim æ¥æäžäžªç»èŽå
+šé¢çåšçº¿åž®å©ç³»ç»ãèŠå¯åšè¯¥åž®å©ç³»ç»ïŒè¯·éæ©åŠäžäžç§æ¹
++  æ³ä¹äžïŒ
++	- æäž <HELP> é® (åŠæé®çäžæçè¯)
++	- æäž <F1> é® (åŠæé®çäžæçè¯)
++	- èŸå
+¥	:help <åèœŠ>
++
++  è¯·é
+è¯»åž®å©çªå£äž­çæå­ä»¥äºè§£åž®å©æ¯åŠäœå·¥äœçã
++  èŸå
+¥ CTRL-W CTRL-W   å¯ä»¥äœ¿æšåšçªå£ä¹éŽè·³èœ¬ã
++  èŸå
+¥ :q <åèœŠ> å¯ä»¥å
+³é­åž®å©çªå£ã
++
++  æäŸäžäžªæ­£ç¡®çåæ°ç»":help"åœä»€ïŒæšå¯ä»¥æŸå°å
+³äºè¯¥äž»é¢çåž®å©ãè¯·è¯éªä»¥
++  äžåæ°(å¯å«å¿äºæåèœŠé®åŠ)ïŒ
++
++	:help w
++	:help c_CTRL-D
++	:help insert-index
++	:help user-manual
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			  ç¬¬äžè®²ç¬¬äºèïŒåå»ºå¯åšèæ¬
++
++
++			  ** å¯çš Vim çç¹æ§ **
++
++  Vim çåèœç¹æ§èŠæ¯ Vi å€åŸå€ïŒäœå
+¶äž­å€§éšåéœæ²¡æçŒºçå¯çšãäžºäºäœ¿çšæŽå€ç
++  ç¹æ§ïŒæšåŸåå»ºäžäžª vimrc æä»¶ã
++
++  1. åŒå§çŒèŸ vimrc æä»¶ïŒå
+·äœåœä»€åå³äºæšæäœ¿çšçæäœç³»ç»ïŒ
++        :edit ~/.vimrc		è¿æ¯ Unix ç³»ç»æäœ¿çšçåœä»€
++        :edit $VIM/_vimrc	è¿æ¯ MS-Windows ç³»ç»æäœ¿çšçåœä»€
++
++  2. æ¥çè¯»å vimrc ç€ºäŸæä»¶çå
+å®¹ïŒ
++        :r $VIMRUNTIME/vimrc_example.vim
++
++  3. ä¿å­æä»¶ïŒåœä»€äžºïŒ
++        :write
++
++  äžæ¬¡æšå¯åš Vim æ¶ïŒçŒèŸåšå°±äŒæäºè¯­æ³é«äº®çåèœã
++  æšå¯ä»¥ææšåæ¬¢çåç§è®Ÿçœ®æ·»å å°è¿äžª vimrc æä»¶äž­ã
++  èŠäºè§£æŽå€ä¿¡æ¯è¯·èŸå
+¥ :help vimrc-intro
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			    ç¬¬äžè®²ç¬¬äžèïŒè¡¥å
+šåèœ
++
++
++	      ** äœ¿çš CTRL-D å <TAB> å¯ä»¥è¿è¡åœä»€è¡è¡¥å
+š **
++
++  1. è¯·ç¡®ä¿ Vim äžæ¯åšä»¥å
+Œå®¹æš¡åŒè¿è¡ïŒ :set nocp
++
++  2. æ¥çäžäžåœåç®åœäžå·²ç»å­åšåªäºæä»¶ïŒèŸå
+¥ïŒ :!ls   æè
+  :!dir
++
++  3. ç°åšèŸå
+¥äžäžªç®åœçèµ·å§éšåïŒäŸåŠèŸå
+¥ïŒ :e
++
++  4. æ¥çæ CTRL-D é®ïŒVim äŒæŸç€ºä»¥ e åŒå§çåœä»€çåè¡šã
++
++  5. ç¶åæ <TAB> é®ïŒVim äŒè¡¥å
+šåœä»€äžº :edit ã
++
++  6. ç°åšæ·»å äžäžªç©ºæ ŒïŒä»¥åäžäžªå·²ææä»¶çæä»¶åçèµ·å§éšåïŒäŸåŠïŒ :edit FIL
++
++  7. æ¥çæ <TAB> é®ïŒVim äŒè¡¥å
+šæä»¶å(åŠæå®æ¯æäžå¹é
+ç)ã
++
++æç€ºïŒè¡¥å
+šå¯¹äºè®žå€åœä»€éœææãæšåªéå°è¯æ CTRL-D å <TAB>ã
++      å®å¯¹äº :help åœä»€éåžžæçšã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++				  ç¬¬äžè®²å°ç»
++
++
++  1. èŸå
+¥ :help æè
+æ <F1> é®æ <Help> é®å¯ä»¥æåŒåž®å©çªå£ã
++
++  2. èŸå
+¥ :help cmd å¯ä»¥æŸå°å
+³äº cmd åœä»€çåž®å©ã
++
++  3. èŸå
+¥ CTRL-W CTRL-W  å¯ä»¥äœ¿æšåšçªå£ä¹éŽè·³èœ¬ã
++
++  4. èŸå
+¥ :q ä»¥å
+³é­åž®å©çªå£
++
++  5. æšå¯ä»¥åå»ºäžäžª vimrc å¯åšèæ¬æä»¶çšæ¥ä¿å­æšåå¥œçè®Ÿçœ®ã
++
++  6. åœèŸå
+¥ : åœä»€æ¶ïŒæ CTRL-D å¯ä»¥æ¥çå¯èœçè¡¥å
+šç»æã
++     æ <TAB> å¯ä»¥äœ¿çšäžäžªè¡¥å
+šã
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++  vim æçšå°æ­€å°±ç»æäºãæ¬æçšåªæ¯äžºäºç®æå°ä»ç»äžäž Vim çŒèŸåšïŒäœå·²è¶³ä»¥è®©æš
++  åŸå®¹æäœ¿çšè¿äžªçŒèŸåšäºãæ¯åºžèŽšçïŒvimè¿æåŸå€åŸå€çåœä»€ïŒæ¬æçšæä»
++  ç»çè·çŠ»å®æŽçå·®åŸåŸè¿ãæä»¥æšèŠç²Ÿéçè¯ïŒè¿æç»§ç»­åªååŠãäžäžæ­¥æšå¯ä»¥é
+è¯»
++  Vim ççšæ·æåïŒäœ¿çšçåœä»€æ¯ïŒ :help user-manual
++
++  äžé¢è¿æ¬ä¹ŠåŒåŸæšèçšäºæŽè¿äžæ­¥çé
+è¯»åå­Šä¹ ïŒ
++	Vim - Vi Improved - äœè
+ïŒSteve Oualline
++	åºçç€ŸïŒNew Riders
++  è¿æ¯ç¬¬äžæ¬å®å
+šè®²è§£ Vim çä¹Šç±ãå®å¯¹äºåå­Šè
+ç¹å«æçšãå
+¶äž­å
+å«æå€§éå®äŸ
++  ååŸç€ºã
++  æ¬²ç¥è¯Šæ
+ïŒè¯·è®¿é® http://iccf-holland.org/click5.html
++
++  ä»¥äžè¿æ¬ä¹Šæ¯èŸèäºèäžå
+å®¹æŽå€æ¯å
+³äº Vi èé VimïŒäœæ¯ä¹åŒåŸæšèïŒ
++	Learning the Vi Editor - äœè
+ïŒLinda Lamb
++	åºçç€ŸïŒO'Reilly & Associates Inc.
++  è¿æ¯äžæ¬äžéçä¹ŠïŒéè¿å®æšå ä¹èœå€äºè§£å°ä»»äœæšæ³èŠäœ¿çš Vi åçäºæ
+ã
++  æ­€ä¹Šçç¬¬å
+­äžªçæ¬ä¹å
+å«äºäžäºå
+³äº Vim çä¿¡æ¯ã
++
++  æ¬æçšæ¯ç±æ¥èª Calorado School of Mines ç Michael C. Pierce å
++  Robert K. Ware æçŒåçïŒå
+¶äž­åŸå€åæç±æ¥èª Colorado State University ç
++  Charles Smith æäŸãçŒè
+ççµå­é®ç®±æ¯ïŒbware@mines.colorado.edu
++
++  æ¬æçšå·²ç± Bram Moolenaar äžäžº Vim è¿è¡ä¿®è®¢ã
++
++  è¯å¶è
+éèšïŒ
++  ===========
++      ç®äœäž­ææçšç¿»è¯çä¹è¯å¶è
+äžºæ¢ææ³° <beos@turbolinux.com.cn>ïŒè¿æ
++      åŠå€äžäžªèç³»å°åïŒlinuxrat@gnuchina.orgã
++
++      ç¹äœäž­ææçšæ¯ä»ç®äœäž­ææçšç¿»è¯çäœ¿çš Debian GNU/Linux äž­æé¡¹ç®å°
++      ç»çäºå¹¿èŸå
+ççŒåçäž­ææ±å­èœ¬ç åš  autoconvert èœ¬æ¢èæçïŒå¹¶å¯¹èœ¬
++      æ¢çç»æåäºäžäºç»èçæ¹åšã
++
++  åæŽè®°åœïŒ
++  =========
++      2012å¹Ž10æ01æ¥ èµµæ¶ <alick9188@gmail.com>
++      å° vimtutor äž­è¯çä» 1.5 åçº§å° 1.7ã
++
++      2002å¹Ž08æ30æ¥ æ¢ææ³° <beos@turbolinux.com.cn>
++      æè°¢ RMS@SMTH çææ­£ïŒå°å€å€éè¯¯ä¿®æ­£ã
++
++      2002å¹Ž04æ22æ¥ æ¢ææ³° <linuxrat@gnuchina.org>
++      æè°¢ xuandong@sh163.net çææ­£ïŒå°äž€å€éå«å­ä¿®æ­£ã
++
++      2002å¹Ž03æ18æ¥ æ¢ææ³° <linuxrat@gnuchina.org>
++      æ ¹æ®Bram Molenaarå
+çåš2002å¹Ž03æ16æ¥çæ¥ä¿¡èŠæ±ïŒå°vimtutor1.4äž­è¯
++      çåçº§å°vimtutor1.5ã
++
++      2001å¹Ž11æ15æ¥ æ¢ææ³° <linuxrat@gnuchina.org>
++      å°vimtutor1.4äž­è¯çæäº€ç»Bram MolenaaråSven Guckesã
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/tutor/tutor.zh_tw.utf-8 vim73/runtime/tutor/tutor.zh_tw.utf-8
+--- vim73.orig/runtime/tutor/tutor.zh_tw.utf-8	1970-01-01 00:00:00.000000000 +0000
++++ vim73/runtime/tutor/tutor.zh_tw.utf-8	2013-06-07 17:07:29.035592433 +0000
+@@ -0,0 +1,852 @@
++===============================================================================
++=      æ­¡     è¿     é±     è®   ã V I M  æ  çš ã   ââ     çæ¬ 1.5      =
++===============================================================================
++     vim æ¯äžåå
+·æåŸå€åœä»€çåèœéåžžåŒ·å€§çç·šèŒ¯åšãéäºç¯å¹
+ïŒåšæ¬æçšç¶äž­
++     äžå°±è©³çŽ°ä»çŽ¹äºãæ¬æçšçèš­èšç®æšæ¯è¬è¿°äžäºå¿
+èŠçåºæ¬åœä»€ïŒèææ¡å¥œé
++     äºåœä»€ïŒæšå°±èœå€ åŸå®¹æå°vimç¶äœäžåéçšçè¬èœç·šèŒ¯åšäŸäœ¿çšäºã
++
++     å®ææ¬æçšçå
+§å®¹å€§çŽéèŠ25-30åéïŒåæ±ºäºæšèšç·Žçæéã
++
++     æ¯äžç¯çåœä»€æäœå°ææŽæ¹æ¬æãæšèŠæšåŸ©å¶æ¬æçäžåå¯æ¬ïŒç¶åŸåšå¯æ¬äž
++     é²è¡èšç·Ž(åŠææšæ¯éé"vimtutor"äŸååæçšçïŒé£éºŒæ¬æå°±å·²ç¶æ¯å¯æ¬äº)ã
++
++     åèšäžé»ïž°æ¬æçšçèš­èšæè·¯æ¯åšäœ¿çšäž­é²è¡å­žç¿çãä¹å°±æ¯èªªïŒæšéèŠéé
++     å·è¡åœä»€äŸå­žç¿å®åæ¬èº«çæ­£ç¢ºçšæ³ãåŠææšåªæ¯é±è®èäžæäœïŒé£éºŒæšå¯èœ
++     æåŸå¿«éºå¿éäºåœä»€çïŒ
++
++     å¥œäºïŒçŸåšè«ç¢ºå®æšçShift-Lock(å€§å°å¯«éå®éµ)éæ²ææäžïŒç¶åŸæéµç€äž
++     çå­æ¯éµ j è¶³å€ å€çæ¬¡æžäŸç§»åå
+æšïŒçŽå°ç¬¬äžç¯çå
+§å®¹èœå€ å®å
+šå
+
+æ»¿å±å¹ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè¬ç¬¬äžç¯ïž°ç§»åå
+æš
++
++
++   â»â» èŠç§»åå
+æšïŒè«äŸç
+§èªªæåå¥æäž hãjãkãl éµã â»â»
++
++	     ^
++	     k		    æç€ºïž° h çéµäœäºå·ŠéïŒæ¯æ¬¡æäžå°±æåå·Šç§»åã
++       < h	 l >		   l çéµäœäºå³éïŒæ¯æ¬¡æäžå°±æåå³ç§»åã
++	     j			   j éµçèµ·äŸåŸè±¡äžæ¯å°ç«¯æ¹åæäžçç®­é ­ã
++	     v
++
++  1. è«éšæåšå±å¹å
+§ç§»åå
+æšïŒçŽè³æšèŠºåŸèæçºæ­¢ã
++
++  2. æäžäžè¡éµ(j)ïŒçŽå°åºçŸå
+æšéåŸ©äžè¡ã
++
++---> çŸåšæšæè©²å·²ç¶å­žæåŠäœç§»åå°äžäžè¬å§ã
++
++  3. çŸåšè«äœ¿çšäžè¡éµïŒå°å
+æšç§»åå°ç¬¬äºè¬ã
++
++æç€ºïž°åŠææšäžæ¢ç¢ºå®æšææäžçå­æ¯ïŒè«æäž<ESC>éµåå°æ­£åžž(Normal)æš¡åŒã
++      ç¶åŸåæ¬¡åŸéµç€èŒžå
+¥æšæ³èŠçåœä»€ã
++
++æç€ºïž°å
+æšéµæç¶ä¹èœæ­£åžžå·¥äœçãäœæ¯äœ¿çšhjkléµïŒåšç¿æ
+£ä¹åŸæšå°±èœå€ å¿«é
++      å°åšå±å¹å
+§åèç§»åå
+æšäºã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè¬ç¬¬äºç¯ïž°VIMçé²å
+¥åéåº
++
++
++  !! ç¹å¥æç€ºïž°æ¬è«é±è®å®æŽæ¬äžç¯çå
+§å®¹ïŒç¶åŸæèœå·è¡ä»¥äžæè¬è§£çåœä»€ã
++
++  1. è«æ<ESC>éµ(éæ¯çºäºç¢ºä¿æšèåšæ­£åžžæš¡åŒ)ã
++
++  2. ç¶åŸèŒžå
+¥ïž°			:q! <åè»>
++
++---> éçš®æ¹åŒçéåºç·šèŒ¯åšçµäžæä¿å­æšé²å
+¥ç·šèŒ¯åšä»¥äŸæåçæ¹åã
++     åŠææšæ³ä¿å­æŽæ¹åéåºïŒè«èŒžå
+¥ïž°
++				:wq  <åè»>
++
++  3. åŠææšçå°äºåœä»€è¡æç€ºç¬ŠïŒè«èŒžå
+¥èœå€ åž¶æšåå°æ¬æçšçåœä»€ïŒé£å°±æ¯ïž°
++
++		vimtutor <åè»>
++
++     éåžžæ
+æ³äžæšä¹å¯ä»¥çšéçš®æ¹åŒïž°
++
++		vim tutor <åè»>
++
++---> éè£¡ç 'vim' è¡šç€ºé²å
+¥vimç·šèŒ¯åšïŒè 'tutor'åæ¯æšæºåèŠç·šèŒ¯çæä»¶ã
++
++  4. åŠææšèªä¿¡å·²ç¶ç¢ç¢èšäœäºéäºæ­¥é©çè©±ïŒè«åŸæ­¥é©1å·è¡å°æ­¥é©3éåºïŒç¶
++     åŸåæ¬¡é²å
+¥ç·šèŒ¯åšãæ¥èå°å
+æšç§»åå°ç¬¬äžè¬ç¬¬äžç¯äŸç¹Œçºæåçæçšè¬è§£ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè¬ç¬¬äžç¯ïž°ææ¬ç·šèŒ¯ä¹åªé€
++
++
++   ** åšæ­£åžž(Normal)æš¡åŒäžïŒå¯ä»¥æäž x éµäŸåªé€å
+æšæåšäœçœ®çå­ç¬Šã**
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çé£äžè¡ã
++
++  2. çºäºä¿®æ­£èŒžå
+¥é¯èª€ïŒè«å°å
+æšç§»è³æºååªé€çå­ç¬Šçäœçœ®èã
++
++  3. ç¶åŸæäž x éµå°é¯èª€å­ç¬Šåªé€æã
++
++  4. éåŸ©æ­¥é©2å°æ­¥é©4ïŒçŽå°å¥å­ä¿®æ­£çºæ­¢ã
++
++---> The ccow jumpedd ovverr thhe mooon.
++
++  5. å¥œäºïŒè©²è¡å·²ç¶ä¿®æ­£äºïŒäžäžç¯å
+§å®¹æ¯ç¬¬äžè¬ç¬¬åç¯ã
++
++ç¹å¥æç€ºïž°åšæšçèŠœæ¬æçšæïŒäžèŠåŒ·è¡èšæ¶ãèšäœäžé»ïž°åšäœ¿çšäž­å­žç¿ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬äžè¬ç¬¬åç¯ïž°ææ¬ç·šèŒ¯ä¹æå
+¥
++
++
++	 ** åšæ­£åžžæš¡åŒäžïŒå¯ä»¥æäž i éµäŸæå
+¥ææ¬ã**
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çç¬¬äžè¡ã
++
++  2. çºäºäœ¿åŸç¬¬äžè¡å
+§å®¹é·åäºç¬¬äºè¡ïŒè«å°å
+æšç§»è³ææ¬ç¬¬äžåå­ç¬Šæºåæå
+¥
++     çäœçœ®ã
++
++  3. ç¶åŸæäž i éµïŒæ¥èèŒžå
+¥å¿
+èŠçææ¬å­ç¬Šã
++
++  4. ææææ¬éœä¿®æ­£å®ç¢ïŒè«æäž <ESC> éµè¿åæ­£åžžæš¡åŒã
++     éåŸ©æ­¥é©2è³æ­¥é©4ä»¥äŸ¿ä¿®æ­£å¥å­ã
++
++---> There is text misng this .
++---> There is some text missing from this line.
++
++  5. åŠææšå°ææ¬æå
+¥æäœå·²ç¶åŸæ»¿æïŒè«æ¥èé±è®äžé¢çå°çµã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬äžè¬å°çµ
++
++
++  1. å
+æšåšå±å¹ææ¬äž­çç§»åæ¢å¯ä»¥çšç®­é ­éµïŒä¹å¯ä»¥äœ¿çš hjkl å­æ¯éµã
++	 h (å·Šç§»)	j (äžè¡)       k (äžè¡)	    l (å³ç§»)
++
++  2. æ¬²é²å
+¥vimç·šèŒ¯åš(åŸåœä»€è¡æç€ºç¬Š)ïŒè«èŒžå
+¥ïž°vim æä»¶å <åè»>
++
++  3. æ¬²éåºvimç·šèŒ¯åšïŒè«èŒžå
+¥ä»¥äžåœä»€æŸæ£ææä¿®æ¹ïž°
++
++	<ESC>   :q!	 <åè»>
++
++     æè
+èŒžå
+¥ä»¥äžåœä»€ä¿å­ææä¿®æ¹ïž°
++
++	<ESC>   :wq	 <åè»>
++
++  4. åšæ­£åžžæš¡åŒäžåªé€å
+æšæåšäœçœ®çå­ç¬ŠïŒè«æïž° x
++
++  5. åšæ­£åžžæš¡åŒäžèŠåšå
+æšæåšäœçœ®éå§æå
+¥ææ¬ïŒè«æïž°
++
++	 i     èŒžå
+¥å¿
+èŠææ¬	<ESC>
++
++ç¹å¥æç€ºïž°æäž <ESC> éµæåž¶æšåå°æ­£åžžæš¡åŒæè
+åæ¶äžåäžæææè
+éšåå®æ
++çåœä»€ã
++
++å¥œäºïŒç¬¬äžè¬å°æ­€çµæãäžé¢æ¥äžäŸç¹Œçºç¬¬äºè¬çå
+§å®¹ã
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äºè¬ç¬¬äžç¯ïž°åªé€é¡åœä»€
++
++
++	    ** èŒžå
+¥ dw å¯ä»¥åŸå
+æšèåªé€è³äžåå®å­/å®è©çæ«å°Ÿã**
++
++  1. è«æäž <ESC> éµç¢ºä¿æšèäºæ­£åžžæš¡åŒã
++
++  2. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çé£äžè¡ã
++
++  3. è«å°å
+æšç§»è³æºåèŠåªé€çå®è©çéå§ã
++
++  4. æ¥èèŒžå
+¥ dw åªé€æè©²å®è©ã
++
++  ç¹å¥æç€ºïž°æšæèŒžå
+¥ç dw æåšæšèŒžå
+¥çåæåºçŸåšå±å¹çæåŸäžè¡ãåŠææšèŒž
++  å
+¥æèª€ïŒè«æäž <ESC> éµåæ¶ïŒç¶åŸéæ°åäŸã
++
++---> There are a some words fun that don't belong paper in this sentence.
++
++  5. éåŸ©æ­¥é©3è³æ­¥é©4ïŒçŽè³å¥å­ä¿®æ­£å®ç¢ãæ¥èç¹Œçºç¬¬äºè¬ç¬¬äºç¯å
+§å®¹ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ç¬¬äºè¬ç¬¬äºç¯ïž°å
+¶ä»åªé€é¡åœä»€
++
++
++		   ** èŒžå
+¥ d$ åŸç¶åå
+æšåªé€å°è¡æ«ã**
++
++  1. è«æäž <ESC> éµç¢ºä¿æšèäºæ­£åžžæš¡åŒã
++
++  2. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çé£äžè¡ã
++
++  3. è«å°å
+æšç§»åå°è©²è¡çå°Ÿéš(ä¹å°±æ¯åšç¬¬äžåé»èâ.âåŸé¢)ã
++
++  4. ç¶åŸèŒžå
+¥ d$ åŸå
+æšèåªè³ç¶åè¡å°Ÿéšã
++
++---> Somebody typed the end of this line twice. end of this line twice.
++
++
++  5. è«ç¹Œçºå­žç¿ç¬¬äºè¬ç¬¬äžç¯å°±ç¥éæ¯æéºŒåäºäºã
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬äºè¬ç¬¬äžç¯ïž°éäºåœä»€åå°è±¡
++
++
++  åªé€åœä»€ d çæ ŒåŒåŠäžïž°
++
++	 [number]   d	object	    æè
+     d	 [number]   object
++
++  å
+¶æåŠäžïž°
++    number - ä»£è¡šå·è¡åœä»€çæ¬¡æž(å¯éžé 
+ïŒçŒºçèš­çœ®çº 1 )ã
++    d - ä»£è¡šåªé€ã
++    object - ä»£è¡šåœä»€æèŠæäœçå°è±¡(äžé¢æçžéä»çŽ¹)ã
++
++  äžåç°¡ç­çå°è±¡åè¡šïž°
++    w - åŸç¶åå
+æšç¶åäœçœ®çŽå°å®å­/å®è©æ«å°ŸïŒå
+æ¬ç©ºæ Œã
++    e - åŸç¶åå
+æšç¶åäœçœ®çŽå°å®å­/å®è©æ«å°ŸïŒäœæ¯ *äž* å
+æ¬ç©ºæ Œã
++    $ - åŸç¶åå
+æšç¶åäœçœ®çŽå°ç¶åè¡æ«ã
++
++ç¹å¥æç€ºïž°
++    å°äºåäºæ¢çŽ¢è
+ïŒè«åšæ­£åžžæš¡åŒäžé¢å
+æä»£è¡šçžæå°è±¡çéµèäžäœ¿çšåœä»€ïŒå
++    å°çå°å
+æšçç§»åæ­£åŠäžé¢çå°è±¡åè¡šæä»£è¡šçäžæš£ã
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		ç¬¬äºè¬ç¬¬åç¯ïž°å°è±¡åœä»€çç¹æ®æ
+æ³
++
++
++	       ** èŒžå
+¥ dd å¯ä»¥åªé€æŽäžåç¶åè¡ã **
++
++  éäºæŽè¡åªé€çé«é »åºŠïŒVIM çèš­èšè
+æ±ºå®èŠç°¡åæŽè¡åªé€ïŒå
+éèŠåšåäžè¡äž
++  ææå
+©æ¬¡ d å°±å¯ä»¥åªé€æå
+æšæåšçæŽè¡äºã
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢çç­å¥æ®µèœäž­çç¬¬äºè¡ã
++  2. èŒžå
+¥ dd åªé€è©²è¡ã
++  3. ç¶åŸç§»åå°ç¬¬åè¡ã
++  4. æ¥èèŒžå
+¥ 2dd (éèšåŸåé¢è¬éç number-command-object åïŒ) åªé€å
+©è¡ã
++
++      1)  Roses are red,
++      2)  Mud is fun,
++      3)  Violets are blue,
++      4)  I have a car,
++      5)  Clocks tell time,
++      6)  Sugar is sweet
++      7)  And so are you.
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 ç¬¬äºè¬ç¬¬äºç¯ïž°æ€æ¶é¡åœä»€
++
++
++	 ** èŒžå
+¥ u äŸæ€æ¶æåŸå·è¡çåœä»€ïŒèŒžå
+¥ U äŸä¿®æ­£æŽè¡ã**
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çé£äžè¡ïŒäžŠå°å
+¶çœ®äºç¬¬äžåé¯èª€
++     èã
++  2. èŒžå
+¥ x åªé€ç¬¬äžåäžæ³ä¿ççå­æ¯ã
++  3. ç¶åŸèŒžå
+¥ u æ€æ¶æåŸå·è¡ç(äžæ¬¡)åœä»€ã
++  4. éæ¬¡èŠäœ¿çš x ä¿®æ­£æ¬è¡çææé¯èª€ã
++  5. çŸåšèŒžå
+¥äžåå€§å¯«ç U ïŒæ¢åŸ©å°è©²è¡çåå§çæ
+ã
++  6. æ¥èå€æ¬¡èŒžå
+¥ u ä»¥æ€æ¶ U ä»¥åæŽåçåœä»€ã
++  7. ç¶åŸå€æ¬¡èŒžå
+¥ CTRL-R (å
+æäž CTRL éµäžæŸéïŒæ¥èèŒžå
+¥ R éµ) ïŒéæš£å°±
++     å¯ä»¥å·è¡æ¢åŸ©åœä»€ïŒä¹å°±æ¯æ€æ¶ææ€æ¶åœä»€ã
++
++---> Fiix the errors oon thhis line and reeplace them witth undo.
++
++  8. éäºéœæ¯éåžžæçšçåœä»€ãäžé¢æ¯ç¬¬äºè¬çå°çµäºã
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬äºè¬å°çµ
++
++
++  1. æ¬²åŸç¶åå
+æšåªé€è³å®å­/å®è©æ«å°ŸïŒè«èŒžå
+¥ïž°dw
++
++  2. æ¬²åŸç¶åå
+æšåªé€è³ç¶åè¡æ«å°ŸïŒè«èŒžå
+¥ïž°d$
++
++  3. æ¬²åªé€æŽè¡ïŒè«èŒžå
+¥ïž°dd
++
++  4. åšæ­£åžžæš¡åŒäžäžååœä»€çæ ŒåŒæ¯ïž°
++
++       [number]   command   object     æè
+     command	[number]   object
++     å
+¶ææ¯ïž°
++       number - ä»£è¡šçæ¯åœä»€å·è¡çæ¬¡æž
++       command - ä»£è¡šèŠåçäºæ
+ïŒæ¯åŠ d ä»£è¡šåªé€
++       object - ä»£è¡šèŠæäœçå°è±¡ïŒæ¯åŠ w ä»£è¡šå®å­/å®è©ïŒ$ ä»£è¡šå°è¡æ«ç­ç­ã
++		$ (to the end of line), etc.
++
++  5. æ¬²æ€æ¶ä»¥åçæäœïŒè«èŒžå
+¥ïž°u (å°å¯«çu)
++     æ¬²æ€æ¶åšäžè¡äž­æåçæ¹åïŒè«èŒžå
+¥ïž°U (å€§å¯«çU)
++     æ¬²æ€æ¶ä»¥åçæ€æ¶åœä»€ïŒæ¢åŸ©ä»¥åçæäœçµæïŒè«èŒžå
+¥ïž°CTRL-R
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 ç¬¬äžè¬ç¬¬äžç¯ïž°çœ®å
+¥é¡åœä»€
++
++
++	       ** èŒžå
+¥ p å°æåŸäžæ¬¡åªé€çå
+§å®¹çœ®å
+¥å
+æšä¹åŸ **
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢ç€ºèæ®µèœçéŠè¡ã
++
++  2. èŒžå
+¥ dd å°è©²è¡åªé€ïŒéæš£æå°è©²è¡ä¿å­å°vimçç·©æ²åäž­ã
++
++  3. æ¥èå°å
+æšç§»åå°æºåçœ®å
+¥çäœçœ®çäžæ¹ãèšäœïž°æ¯äžæ¹åŠã
++
++  4. ç¶åŸåšæ­£åžžæš¡åŒäž(<ESC>éµé²å
+¥)ïŒèŒžå
+¥ p å°è©²è¡ç²è²Œçœ®å
+¥ã
++
++  5. éåŸ©æ­¥é©2è³æ­¥é©4ïŒå°ææçè¡äŸåºæŸçœ®å°æ­£ç¢ºçäœçœ®äžã
++
++     d) Can you learn too?
++     b) Violets are blue,
++     c) Intelligence is learned,
++     a) Roses are red,
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       ç¬¬äžè¬ç¬¬äºç¯ïž°æ¿æé¡åœä»€
++
++
++	  ** èŒžå
+¥ r åäžåå­ç¬Šæ¿æå
+æšæåšäœçœ®çå­ç¬Šã**
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çç¬¬äžè¡ã
++
++  2. è«ç§»åå
+æšå°ç¬¬äžåé¯èª€çé©ç¶äœçœ®ã
++
++  3. æ¥èèŒžå
+¥ r ïŒéæš£å°±èœå°é¯èª€æ¿ææäºã
++
++  4. éåŸ©æ­¥é©2åæ­¥é©3ïŒçŽå°ç¬¬äžè¡å·²ç¶ä¿®æ¹å®ç¢ã
++
++--->  Whan this lime was tuoed in, someone presswd some wrojg keys!
++--->  When this line was typed in, someone pressed some wrong keys!
++
++  5. ç¶åŸæåç¹Œçºå­žæ ¡ç¬¬äžè¬ç¬¬äžç¯ã
++
++ç¹å¥æç€ºïž°åèšæšèŠåšäœ¿çšäž­å­žç¿ïŒèäžæ¯åšèšæ¶äž­å­žç¿ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬äžè¬ç¬¬äžç¯ïž°æŽæ¹é¡åœä»€
++
++
++	   ** èŠæ¹è®äžåå®å­/å®è©çéšåæè
+å
+šéšïŒè«èŒžå
+¥ cw **
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çç¬¬äžè¡ã
++
++  2. æ¥èæå
+æšæŸåšå®è© lubw çå­æ¯ u çäœçœ®é£è£¡ã
++
++  3. ç¶åŸèŒžå
+¥ cw å°±å¯ä»¥ä¿®æ­£è©²å®è©äº(åšæ¬äŸéè£¡æ¯èŒžå
+¥ ine ã)
++
++  4. æåŸæ <ESC> éµïŒç¶åŸå
+æšå®äœå°äžäžåé¯èª€ç¬¬äžåæºåæŽæ¹çå­æ¯èã
++
++  5. éåŸ©æ­¥é©3åæ­¥é©4ïŒçŽå°ç¬¬äžåå¥å­å®å
+šé·åç¬¬äºåå¥å­ã
++
++---> This lubw has a few wptfd that mrrf changing usf the change command.
++---> This line has a few words that need changing using the change command.
++
++æç€ºïž°è«æ³šæ cw åœä»€äžå
+å
+æ¯æ¿æäºäžåå®è©ïŒä¹è®æšé²å
+¥ææ¬æå
+¥çæ
+äºã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       ç¬¬äžè¬ç¬¬åç¯ïž°äœ¿çšcæä»€çå
+¶ä»æŽæ¹é¡åœä»€
++
++
++	     ** æŽæ¹é¡æä»€å¯ä»¥äœ¿çšååªé€é¡åœä»€æäœ¿çšçå°è±¡åæžã**
++
++  1. æŽæ¹é¡æä»€çå·¥äœæ¹åŒè·åªé€é¡åœä»€æ¯äžèŽçãæäœæ ŒåŒæ¯ïž°
++
++       [number]   c   object	   æè
+	    c	[number]   object
++
++  2. å°è±¡åæžä¹æ¯äžæš£çïŒæ¯åŠ w ä»£è¡šå®å­/å®è©ïŒ$ä»£è¡šè¡æ«ç­ç­ã
++
++  3. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çç¬¬äžè¡ã
++
++  4. æ¥èå°å
+æšç§»åå°ç¬¬äžåé¯èª€èã
++
++  5. ç¶åŸèŒžå
+¥ c$ äœ¿åŸè©²è¡å©äžçéšåæŽæ­£åŸåç¬¬äºè¡äžæš£ãæåŸæ <ESC> éµã
++
++---> The end of this line needs some help to make it like the second.
++---> The end of this line needs to be corrected using the  c$  command.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬äžè¬å°çµ
++
++
++  1. èŠéæ°çœ®å
+¥å·²ç¶åªé€çææ¬å
+§å®¹ïŒè«èŒžå
+¥å°å¯«å­æ¯ pãè©²æäœå¯ä»¥å°å·²åªé€
++     çææ¬å
+§å®¹çœ®äºå
+æšä¹åŸãåŠææåŸäžæ¬¡åªé€çæ¯äžåæŽè¡ïŒé£éºŒè©²è¡å°çœ®
++     äºç¶åå
+æšæåšè¡çäžäžè¡ã
++
++  2. èŠæ¿æå
+æšæåšäœçœ®çå­ç¬ŠïŒè«èŒžå
+¥å°å¯«ç r åèŠæ¿ææåäœçœ®å­ç¬Šçæ°å­
++     ç¬Šå³å¯ã
++
++  3. æŽæ¹é¡åœä»€å
+èš±æšæ¹è®æå®çå°è±¡ïŒåŸç¶åå
+æšæåšäœçœ®çŽå°å°è±¡çæ«å°Ÿã
++     æ¯åŠèŒžå
+¥ cw å¯ä»¥æ¿æç¶åå
+æšå°å®è©çæ«å°Ÿçå
+§å®¹ïŒèŒžå
+¥ c$ å¯ä»¥æ¿æç¶
++     åå
+æšå°è¡æ«çå
+§å®¹ã
++
++  4. æŽæ¹é¡åœä»€çæ ŒåŒæ¯ïž°
++
++	 [number]   c	object	      æè
+	c   [number]   object
++
++äžé¢æåç¹Œçºå­žç¿äžäžè¬ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		     ç¬¬åè¬ç¬¬äžç¯ïž°å®äœåæä»¶çæ
+
++
++
++  ** èŒžå
+¥ CTRL-g é¡¯ç€ºç¶åç·šèŒ¯æä»¶äž­ç¶åå
+æšæåšè¡äœçœ®ä»¥åæä»¶çæ
+ä¿¡æ¯ã
++     èŒžå
+¥ SHIFT-G åçŽæ¥è·³èœå°æä»¶äž­çæäžæå®è¡ã**
++
++  æç€ºïž°åèšèŠå
+éè®æ¬ç¯å
+§å®¹ïŒä¹åŸæå¯ä»¥å·è¡ä»¥äžæ­¥é©!!!
++
++  1. æäž CTRL éµäžæŸéç¶åŸæ g éµãç¶åŸå°±æçå°é é¢æåºéšåºçŸäžåçæ
+ä¿¡
++     æ¯è¡ïŒé¡¯ç€ºçå
+§å®¹æ¯ç¶åç·šèŒ¯çæä»¶ååæä»¶ççžœè¡æžãè«èšäœæ­¥é©3çè¡èã
++
++  2. æäž SHIFT-G éµå¯ä»¥äœ¿åŸç¶åå
+æšçŽæ¥è·³èœå°æä»¶æåŸäžè¡ã
++
++  3. èŒžå
+¥æšæŸåççè¡èïŒç¶åŸæäž SHIFT-Gãéæš£å°±å¯ä»¥è¿åå°æšç¬¬äžæ¬¡æäž
++     CTRL-g ææåšçè¡å¥œäºãæ³šæïž°èŒžå
+¥è¡èæïŒè¡èæ¯äžæåšå±å¹äžé¡¯ç€ºåºäŸ
++     çã
++
++  4. åŠæé¡æïŒæšå¯ä»¥ç¹Œçºå·è¡æ­¥é©1è³æ­¥é©äžã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬åè¬ç¬¬äºç¯ïž°æçŽ¢é¡åœä»€
++
++
++     ** èŒžå
+¥ / ä»¥åå°Ÿéšçå­ç¬Šäž²å¯ä»¥çšä»¥åšç¶åæä»¶äž­æ¥æŸè©²å­ç¬Šäž²ã**
++
++  1. åšæ­£åžžæš¡åŒäžèŒžå
+¥ / å­ç¬Šãæšæ­€æææ³šæå°è©²å­ç¬Šåå
+æšéœæåºçŸåšå±å¹åº
++     éšïŒéè· : åœä»€æ¯äžæš£çã
++
++  2. æ¥èèŒžå
+¥ errroor <åè»>ãé£åerrroorå°±æ¯æšèŠæ¥æŸçå­ç¬Šäž²ã
++
++  3. èŠæ¥æŸåäžäžæ¬¡çå­ç¬Šäž²ïŒåªéèŠæ n éµãèŠåçžåæ¹åæ¥æŸåäžäžæ¬¡çå­
++     ç¬Šäž²ïŒè«èŒžå
+¥ Shift-N å³å¯ã
++
++  4. åŠææšæ³éåæ¥æŸå­ç¬Šäž²ïŒè«äœ¿çš ? ä»£æ¿ / é²è¡ã
++
++---> When the search reaches the end of the file it will continue at the start.
++
++  "errroor" is not the way to spell error;  errroor is an error.
++
++  æç€ºïž°åŠææ¥æŸå·²ç¶å°éæä»¶æ«å°ŸïŒæ¥æŸæèªååŸæä»¶é ­éšç¹Œçºæ¥æŸã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ç¬¬åè¬ç¬¬äžç¯ïž°é
+å°æ¬èçæ¥æŸ
++
++
++	      ** æ % å¯ä»¥æ¥æŸé
+å°çæ¬è )ã]ã}ã**
++
++  1. æå
+æšæŸåšæ¬ç¯äžé¢æšèšæ --> é£äžè¡äž­çä»»äœäžå (ã[ æ { èã
++
++  2. æ¥èæ % å­ç¬Šã
++
++  3. æ­€æå
+æšçäœçœ®æç¶æ¯åšé
+å°çæ¬èèã
++
++  4. åæ¬¡æ % å°±å¯ä»¥è·³åé
+å°çç¬¬äžåæ¬èèã
++
++---> This ( is a test line with ('s, ['s ] and {'s } in it. ))
++
++æç€ºïž°åšçšåºèª¿è©ŠæïŒéååèœçšäŸæ¥æŸäžé
+å°çæ¬èæ¯åŸæçšçã
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ç¬¬åè¬ç¬¬åç¯ïž°ä¿®æ­£é¯èª€çæ¹æ³ä¹äž
++
++
++		** èŒžå
+¥ :s/old/new/g å¯ä»¥æ¿æ old çº newã**
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çé£äžè¡ã
++
++  2. èŒžå
+¥ :s/thee/the <åè»> ãè«æ³šæè©²åœä»€åªæ¹è®å
+æšæåšè¡çç¬¬äžåå¹é
+
++     äž²ã
++
++  3. èŒžå
+¥ :s/thee/the/g	åæ¯æ¿æå
+šè¡çå¹é
+äž²ã
++
++---> the best time to see thee flowers is in thee spring.
++
++  4. èŠæ¿æå
+©è¡ä¹éåºçŸçæ¯åå¹é
+äž²ïŒè«èŒžå
+¥ :#,#s/old/new/g (#,#ä»£è¡šçæ¯
++     å
+©è¡çè¡è)ãèŒžå
+¥ :%s/old/new/g åæ¯æ¿ææŽåæä»¶äž­çæ¯åå¹é
+äž²ã
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬åè¬å°çµ
++
++
++  1. Ctrl-g çšäºé¡¯ç€ºç¶åå
+æšæåšäœçœ®åæä»¶çæ
+ä¿¡æ¯ãShift-G çšäºå°å
+æšè·³
++     èœè³æä»¶æåŸäžè¡ãå
+æ²å
+¥äžåè¡èç¶åŸæ Shift-G åæ¯å°å
+æšç§»åè³è©²è¡
++     èä»£è¡šçè¡ã
++
++  2. èŒžå
+¥ / ç¶åŸç·éšäžåå­ç¬Šäž²æ¯åæ¯åšç¶åæç·šèŒ¯çææªäž­ååŸæ¥æŸè©²å­ç¬Šäž²ã
++     èŒžå
+¥åè ? ç¶åŸç·éšäžåå­ç¬Šäž²æ¯åæ¯åšç¶åæç·šèŒ¯çææªäž­ååæ¥æŸè©²å­
++     ç¬Šäž²ãå®æäžæ¬¡æ¥æŸä¹åŸæ n éµåæ¯éåŸ©äžäžæ¬¡çåœä»€ïŒå¯åšåäžæ¹åäžæ¥
++     æŸäžäžåå­ç¬Šäž²æåšïŒæè
+æ Shift-N åçžåæ¹åæ¥æŸäžè©²å­ç¬Šäž²æåšã
++
++  3. åŠæå
+æšç¶åäœçœ®æ¯æ¬è(ã)ã[ã]ã{ã}ïŒæ % å¯ä»¥å°å
+æšç§»åå°é
+å°ç
++     æ¬èäžã
++
++  4. åšäžè¡å
+§æ¿æé ­äžåå­ç¬Šäž² old çºæ°çå­ç¬Šäž² newïŒè«èŒžå
+¥  :s/old/new
++     åšäžè¡å
+§æ¿æææçå­ç¬Šäž² old çºæ°çå­ç¬Šäž² newïŒè«èŒžå
+¥  :s/old/new/g
++     åšå
+©è¡å
+§æ¿æææçå­ç¬Šäž² old çºæ°çå­ç¬Šäž² newïŒè«èŒžå
+¥  :#,#s/old/new/g
++     åšæä»¶å
+§æ¿æææçå­ç¬Šäž² old çºæ°çå­ç¬Šäž² newïŒè«èŒžå
+¥  :%s/old/new/g
++     é²è¡å
+šææ¿ææè©¢åçšæ¶ç¢ºèªæ¯åæ¿æéæ·»å  c éžé 
+ïŒè«èŒžå
+¥ :%s/old/new/gc
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		ç¬¬äºè¬ç¬¬äžç¯ïž°åš VIM å
+§å·è¡å€éšåœä»€çæ¹æ³
++
++
++	   ** èŒžå
+¥ :! ç¶åŸç·éšèèŒžå
+¥äžåå€éšåœä»€å¯ä»¥å·è¡è©²å€éšåœä»€ã**
++
++  1. æäžæåæçæç : åœä»€èš­çœ®å
+æšå°å±å¹åºéšãéæš£å°±å¯ä»¥è®æšèŒžå
+¥åœä»€äºã
++
++  2. æ¥èèŒžå
+¥æåè ! éåå­ç¬ŠïŒéæš£å°±å
+èš±æšå·è¡å€éšç shell åœä»€äºã
++
++  3. æåä»¥ ls åœä»€çºäŸãèŒžå
+¥ !ls <åè»> ãè©²åœä»€å°±æåèåºæšç¶åç®éç
++     å
+§å®¹ïŒå°±åŠåæšåšåœä»€è¡æç€ºç¬ŠäžèŒžå
+¥ ls åœä»€ççµæäžæš£ãåŠæ !ls æ²èµ·
++     äœçšïŒæšå¯ä»¥è©Šè©Š :!dir ççã
++
++---> æç€ºïž° ææçå€éšåœä»€éœå¯ä»¥ä»¥éçš®æ¹åŒå·è¡ã
++
++---> æç€ºïž° ææç : åœä»€éœå¿
+é ä»¥ <åè»> åçµã
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ç¬¬äºè¬ç¬¬äºç¯ïž°éäºä¿å­æä»¶çæŽå€ä¿¡æ¯
++
++
++	     ** èŠå°å°æä»¶çæ¹åä¿å­å°æä»¶äž­ïŒè«èŒžå
+¥ :w FILENAME **
++
++  1. èŒžå
+¥ :!dir æè
+ :!ls ç²ç¥ç¶åç®éçå
+§å®¹ãæšæç¶å·²ç¥éæåŸéåŸæ²
++     <åè»> å§ã
++
++  2. éžæäžåå°æªå­åšæä»¶åïŒæ¯åŠ TEST ã
++
++  3. æ¥èèŒžå
+¥ :w TEST  (æ­€è TEST æ¯æšæéžæçæä»¶åã)
++
++  4. è©²åœä»€æä»¥ TEST çºæä»¶åä¿å­æŽåæä»¶ (VIM æçš)ãçºäºç¢ºä¿æ­£ç¢ºä¿å­ïŒ
++     è«åæ¬¡èŒžå
+¥ :!dir æ¥çæšçç®éåè¡šå
+§å®¹ã
++
++---> è«æ³šæïž°åŠææšéåº VIM ç¶åŸåšä»¥æä»¶å TEST çºåæžé²å
+¥ïŒé£éºŒè©²æä»¶å
+§
++     å®¹æè©²åæšä¿å­æçæä»¶å
+§å®¹æ¯å®å
+šäžæš£çã
++
++  5. çŸåšæšå¯ä»¥ééèŒžå
+¥ :!rm TEST äŸåªé€ TEST æä»¶äºã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		    ç¬¬äºè¬ç¬¬äžç¯ïž°äžåå
+·æéžææ§çä¿å­åœä»€
++
++
++		** èŠä¿å­æä»¶çéšåå
+§å®¹ïŒè«èŒžå
+¥ :#,# w FILENAME **
++
++  1. åäŸå·è¡äžæ¬¡ :!dir æè
+ :!ls ç²ç¥ç¶åç®éçå
+§å®¹ïŒç¶åŸéžæäžååé©ç
++     äžéåçæä»¶åïŒæ¯åŠ TEST ã
++
++  2. æ¥èå°å
+æšç§»åè³æ¬é çæé ç«¯ïŒç¶åŸæ CTRL-g æŸå°è©²è¡çè¡èãå¥å¿äº
++     è¡èåŠã
++
++  3. æ¥èæå
+æšç§»åè³æ¬é çæåºç«¯ïŒåæäžæ¬¡ CTRL-g ãä¹å¥å¿äºéåè¡å¥œåŠã
++
++  4. çºäºåªä¿å­æç« çæåéšåïŒè«èŒžå
+¥ :#,# w TEST ãéè£¡ç #,# å°±æ¯äžé¢
++     èŠæ±æšèšäœçè¡è(é ç«¯è¡è,åºç«¯è¡è)ïŒè TEST å°±æ¯éžå®çæä»¶åã
++
++  5. æåŸïŒçš :!dir ç¢ºèªæä»¶æ¯åŠæ­£ç¢ºä¿å­ãäœæ¯éæ¬¡å
+å¥åªé€æã
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		   ç¬¬äºè¬ç¬¬åç¯ïž°æåååäžŠæä»¶
++
++
++       ** èŠåç¶åæä»¶äž­æå
+¥åŠå€çæä»¶çå
+§å®¹ïŒè«èŒžå
+¥ :r FILENAME **
++
++  1. è«éµå
+¥ :!dir ç¢ºèªæšåé¢åµå»ºç TEST æä»¶éåšã
++
++  2. ç¶åŸå°å
+æšç§»åè³ç¶åé é¢çé ç«¯ã
++
++ç¹å¥æç€ºïž° å·è¡æ­¥é©3ä¹åŸæšå°çå°ç¬¬äºè¬ç¬¬äžç¯ïŒè«å±æååŸäžç§»ååå°éè£¡äŸã
++
++  3. æ¥èéé :r TEST å°åé¢åµå»ºçåçº TEST çæä»¶æåé²äŸã
++
++ç¹å¥æç€ºïž°æšææåé²äŸçæä»¶å°åŸå
+æšæåšäœçœ®èéå§çœ®å
+¥ã
++
++  4. çºäºç¢ºèªæä»¶å·²ç¶æåæåïŒç§»åå
+æšåå°åäŸçäœçœ®å°±å¯ä»¥æ³šææå
+©ä»œç¬¬
++     äºè¬ç¬¬äžç¯ïŒäžä»œæ¯åæ¬ïŒåŠå€äžä»œæ¯äŸèªæä»¶çå¯æ¬ã
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬äºè¬å°çµ
++
++
++  1. :!command çšäºå·è¡äžåå€éšåœä»€ commandã
++
++     è«çäžäºå¯ŠéäŸå­ïž°
++	 :!dir		-  çšäºé¡¯ç€ºç¶åç®éçå
+§å®¹ã
++	 :!rm FILENAME	-  çšäºåªé€åçº FILENAME çæä»¶ã
++
++  2. :w FILENAME  å¯å°ç¶å VIM äž­æ­£åšç·šèŒ¯çæä»¶ä¿å­å°åçº FILENAME
++     çæä»¶äž­ã
++
++  3. :#,#w FILENAME å¯å°ç¶åç·šèŒ¯æä»¶ç¬¬ # è¡è³ç¬¬ # è¡çå
+§å®¹ä¿å­å°æä»¶
++     FILENAME äž­ã
++
++  4. :r FILENAME å¯æåç£ç€æä»¶ FILENAME äžŠå°å
+¶æå
+¥å°ç¶åæä»¶çå
+æšäœçœ®
++     åŸé¢ã
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			 ç¬¬å
+­è¬ç¬¬äžç¯ïž°æéé¡åœä»€
++
++
++	 ** èŒžå
+¥ o å°åšå
+æšçäžæ¹æéæ°çäžè¡äžŠé²å
+¥æå
+¥æš¡åŒã**
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çé£äžè¡ã
++
++  2. æ¥èèŒžå
+¥å°å¯«ç o åšå
+æš *äžæ¹* æéæ°çäžè¡äžŠé²å
+¥æå
+¥æš¡åŒã
++
++  3. ç¶åŸåŸ©å¶æšèšæ ---> çè¡äžŠæ <ESC> éµéåºæå
+¥æš¡åŒèé²å
+¥æ­£åžžæš¡åŒã
++
++---> After typing  o  the cursor is placed on the open line in Insert mode.
++
++  4. çºäºåšå
+æš *äžæ¹* æéæ°çäžè¡ïŒåªéèŠèŒžå
+¥å€§å¯«ç O èäžæ¯å°å¯«ç o
++     å°±å¯ä»¥äºãè«åšäžè¡æž¬è©Šäžäžå§ãç¶å
+æšèåšåšè©²è¡äžæïŒæ Shift-Oå¯ä»¥
++     åšè©²è¡äžæ¹æ°éäžè¡ã
++
++Open up a line above this by typing Shift-O while the cursor is on this line.
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			ç¬¬å
+­è¬ç¬¬äºç¯ïž°å
+æšåŸæå
+¥é¡åœä»€
++
++
++		     ** èŒžå
+¥ a å°å¯åšå
+æšä¹åŸæå
+¥ææ¬ã **
++
++  1. è«åšæ­£åžžæš¡åŒäžééèŒžå
+¥ $ å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çç¬¬äžè¡
++     çæ«å°Ÿã
++
++  2. æ¥èèŒžå
+¥å°å¯«ç a åå¯åšå
+æšä¹åŸæå
+¥ææ¬äºãå€§å¯«ç A åå¯ä»¥çŽæ¥åšè¡
++     æ«æå
+¥ææ¬ã
++
++æç€ºïž°èŒžå
+¥å€§å¯« A çæäœæ¹æ³å¯ä»¥åšè¡æ«æå
+¥ææ¬ïŒé¿å
+äºèŒžå
+¥ iïŒå
+æšå®äœå°
++      æåŸäžåå­ç¬ŠïŒèŒžå
+¥çææ¬ïŒ<ESC> ååŸ©æ­£åžžæš¡åŒïŒç®­é ­å³éµç§»åå
+æšä»¥å
++      x åªé€ç¶åå
+æšæåšäœçœ®å­ç¬Šç­ç­è«žå€ç¹éçæäœã
++
++  3. æäœä¹åŸç¬¬äžè¡å°±å¯ä»¥è£å
+
+å®æŽäºãè«æ³šæå
+æšåŸæå
+¥ææ¬èæå
+¥æš¡åŒæ¯åº
++     æ¬å®å
+šäžèŽçïŒåªæ¯ææ¬æå
+¥çäœçœ®å®äœçšæäžåçœ·äºã
++
++---> This line will allow you to practice
++---> This line will allow you to practice appending text to the end of a line.
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		    ç¬¬å
+­è¬ç¬¬äžç¯ïž°åŠå€äžåçœ®æé¡åœä»€ççæ¬
++
++
++		      ** èŒžå
+¥å€§å¯«ç R å¯é£çºæ¿æå€åå­ç¬Šã**
++
++  1. è«å°å
+æšç§»åå°æ¬ç¯äž­äžé¢æšèšæ ---> çç¬¬äžè¡ã
++
++  2. ç§»åå
+æšå°ç¬¬äžè¡äž­äžåäºæšæ ---> çç¬¬äºè¡çç¬¬äžåå®è©çéå§ïŒå³å®
++     è© last èã
++
++  3. ç¶åŸèŒžå
+¥å€§å¯«ç R éå§æç¬¬äžè¡äž­çäžåäºç¬¬äºè¡çå©äœå­ç¬ŠéäžèŒžå
+¥ïŒå°±
++     å¯ä»¥å
+šéšæ¿ææåæçå­ç¬Šèäœ¿åŸç¬¬äžè¡å®å
+šé·åç¬¬äºè¡äºã
++
++---> To make the first line the same as the last on this page use the keys.
++---> To make the first line the same as the second, type R and the new text.
++
++  4. è«æ³šæïž°åŠææšæ <ESC> éåºçœ®ææš¡åŒååŸ©æ­£åžžæš¡åŒïŒå°æªæ¿æçææ¬å°ä»
++     ç¶ä¿æåçã
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			    ç¬¬å
+­è¬ç¬¬åç¯ïž°èš­çœ®é¡åœä»€çéžé 
+
++
++
++		  ** èš­çœ®å¯äœ¿æ¥æŸæè
+æ¿æå¯å¿œç¥å€§å°å¯«çéžé 
+ **
++
++
++  1. èŠæ¥æŸå®è© ignore å¯åšæ­£åžžæš¡åŒäžèŒžå
+¥ /ignore ãèŠéåŸ©æ¥æŸè©²è©ïŒå¯ä»¥
++     éåŸ©æ n éµã
++
++  2. ç¶åŸèš­çœ® ic éžé 
+(icå°±æ¯è±æå¿œç¥å€§å°å¯«Ignore CaseçéŠå­æ¯çž®å¯«è©)ïŒå³
++     èŒžå
+¥ïž°
++	:set ic
++
++  3. çŸåšå¯ä»¥éééµå
+¥ n éµåæ¬¡æ¥æŸå®è© ignoreãéåŸ©æ¥æŸå¯ä»¥éåŸ©éµå
+¥ n éµã
++
++  4. ç¶åŸèš­çœ® hlsearch å incsearch éå
+©åéžé 
+ïŒèŒžå
+¥ä»¥äžå
+§å®¹ïž°
++     :set hls is
++
++  5. çŸåšå¯ä»¥åæ¬¡èŒžå
+¥æ¥æŸåœä»€ïŒççææä»éºŒææïž°
++     /ignore
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++			       ç¬¬å
+­è¬å°çµ
++
++
++  1. èŒžå
+¥å°å¯«ç o å¯ä»¥åšå
+æšäžæ¹æéæ°çäžè¡äžŠå°å
+æšçœ®äºæ°éçè¡éŠïŒé²å
+¥
++     æå
+¥æš¡åŒã
++     èŒžå
+¥å€§å¯«ç O å¯ä»¥åšå
+æšäžæ¹æéæ°çäžè¡äžŠå°å
+æšçœ®äºæ°éçè¡éŠïŒé²å
+¥
++     æå
+¥æš¡åŒã
++
++  2. èŒžå
+¥å°å¯«ç a å¯ä»¥åšå
+æšæåšäœçœ®ä¹åŸæå
+¥ææ¬ã
++     èŒžå
+¥å€§å¯«ç A å¯ä»¥åšå
+æšæåšè¡çè¡æ«ä¹åŸæå
+¥ææ¬ã
++
++  3. èŒžå
+¥å€§å¯«ç R å°é²å
+¥æ¿ææš¡åŒïŒçŽè³æ <ESC> éµéåºæ¿ææš¡åŒèé²å
+¥æ­£åžž
++     æš¡åŒã
++
++  4. èŒžå
+¥ :set xxx å¯ä»¥èš­çœ® xxx éžé 
+ã
++
++
++
++
++
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		       ç¬¬äžè¬ïž°åšç·å¹«å©åœä»€
++
++		      ** äœ¿çšåšç·å¹«å©ç³»çµ± **
++
++  Vim ææäžåçŽ°èŽå
+šé¢çåšç·å¹«å©ç³»çµ±ãèŠååè©²å¹«å©ç³»çµ±ïŒè«éžæåŠäžäžçš®æ¹
++  æ³ä¹äžïž°
++	- æäž <HELP> éµ (åŠæéµç€äžæçè©±)
++	- æäž <F1> éµ (åŠæéµç€äžæçè©±)
++	- èŒžå
+¥	:help <åè»>
++
++  èŒžå
+¥ :q <åè»> å¯ä»¥ééå¹«å©çªå£ã
++
++  æäŸäžåæ­£ç¢ºçåæžçµŠ":help"åœä»€ïŒæšå¯ä»¥æŸå°éäºè©²äž»é¡çå¹«å©ãè«è©Šé©ä»¥
++  äžåæž(å¯å¥å¿äºæåè»éµåŠã:)ïž°
++
++	  :help w <åè»>
++	  :help c_<T <åè»>
++	  :help insert-index <åè»>
++	  :help user-manual <åè»>
++
++
++
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++		      ç¬¬å
+«è¬ïž°åµå»ºäžåååè
+³æ¬
++
++			 ** åçšvimçåèœ **
++
++  Vimçåèœç¹æ§èŠæ¯viå€åŸå€ïŒäœå€§éšååèœéœæ²æçŒºçæ¿æŽ»ãçºäºååæŽå€ç
++  åèœïŒæšåŸåµå»ºäžåvimrcæä»¶ã
++
++  1. éå§ç·šèŒ¯vimrcæä»¶ïŒéåæ±ºäºæšæäœ¿çšçæäœç³»çµ±ïž°
++
++     :edit ~/.vimrc		éæ¯Unixç³»çµ±æäœ¿çšçåœä»€
++     :edit $VIM/_vimrc		éæ¯Windowsç³»çµ±æäœ¿çšçåœä»€
++
++  2. æ¥èå°å
+¥vimrcèäŸæä»¶ïž°
++
++     :read $VIMRUNTIME/vimrc_example.vim
++
++  3. ä¿å­æä»¶ïŒåœä»€çºïž°
++
++     :write
++
++  åšäžæ¬¡æšååvimçæåïŒç·šèŒ¯åšå°±ææäºèªæ³é«äº®çåèœãæšå¯ä»¥ç¹Œçºææšå
++  æ­¡çå
+¶å®åèœèš­çœ®æ·»å å°éåvimrcæä»¶äž­ã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
++
++  vim æçšå°æ­€çµæãæ¬æçšåªæ¯çºäºç°¡æå°ä»çŽ¹äžäžvimç·šèŒ¯åšïŒäœå·²è¶³ä»¥è®æš
++  åŸå®¹æå­žæäœ¿çšæ¬ç·šèŒ¯åšäºãæ¯åºžè³ªçïŒviméæåŸå€åŸå€çåœä»€ïŒæ¬æçšæä»
++  çŽ¹çéå·®åŸé èå¢ãæä»¥æšèŠç²Ÿéçè©±ïŒéæç¹ŒçºåªååŠãäžäžæ­¥æšå¯ä»¥é±è®
++  vimæåïŒäœ¿çšçåœä»€æ¯ïž°
++	:help user-manual
++
++  çºäºæŽé²äžæ­¥çåèåå­žç¿ïŒä»¥äžéæ¬æžåŒåŸæšèŠïž°
++
++	Vim - Vi Improved - äœè
+ïž°Steve Oualline
++	åºçç€Ÿïž°New Riders
++
++  éæ¯ç¬¬äžæ¬å®å
+šè¬è§£vimçæžç±ãå°äºåå­žè
+ç¹å¥æçšãå
+¶äž­éå
+å«æå€§éå¯ŠäŸ
++  ååç€ºãæ¬²ç¥è©³æ
+ïŒè«èšªå http://iccf-holland.org/click5.html
++
++  ä»¥äžéæ¬æžæ¯èŒèäºèäžå
+§å®¹äž»èŠæ¯vièäžæ¯vimïŒäœæ¯ä¹åŒåŸæšèŠïž°
++
++	Learning the Vi Editor - äœè
+ïž°Linda Lamb
++	åºçç€Ÿïž°O'Reilly & Associates Inc.
++
++  éæ¯äžæ¬äžé¯çæžïŒééå®æšå¹Ÿä¹èœå€ äºè§£å°å
+šéšvièœå€ åå°çäºæ
+ãæ­€æžçç¬¬
++  å
+­åçæ¬ä¹å
+å«äºäžäºéäºvimçä¿¡æ¯ã
++
++  æ¬æçšæ¯ç±äŸèªCalorado School of MineseçMichael C. PierceãRobert K.
++  Ware æç·šå¯«çïŒå
+¶äž­äŸèªColorado State UniversityçCharles SmithæäŸäº
++  åŸå€åµæãç·šè
+éä¿¡å°åæ¯ïž°
++
++	bware@mines.colorado.edu
++
++  æ¬æçšå·²ç±Bram Moolenaarå°çºvimé²è¡ä¿®èšã
++
++
++
++  è­¯å¶è
+éèšïž°
++  ===========
++      ç°¡é«äž­ææçšç¿»è­¯çä¹è­¯å¶è
+çºæ¢ææ³° <beos@turbolinux.com.cn>ïŒéæ
++      åŠå€äžåè¯ç³»å°åïž°linuxrat@gnuchina.orgã
++
++      ç¹é«äž­ææçšæ¯åŸç°¡é«äž­ææçšç¿»è­¯çäœ¿çš Debian GNU/Linux äž­æé 
+ç®å°
++      çµçäºå»£èŒå
+çç·šå¯«çäž­ææŒ¢å­èœç¢Œåš  autoconvert èœæèæçïŒäžŠå°èœ
++      æççµæåäºäžäºçŽ°ç¯çæ¹åã
++
++  è®æŽèšéïž°
++  =========
++      2002å¹Ž08æ30æ¥ æ¢ææ³° <beos@turbolinux.com.cn>
++      æè¬ RMS@SMTH çææ­£ïŒå°å€èé¯èª€ä¿®æ­£ã
++
++      2002å¹Ž04æ22æ¥ æ¢ææ³° <linuxrat@gnuchina.org>
++      æè¬ xuandong@sh163.net çææ­£ïŒå°å
+©èé¯å¥å­ä¿®æ­£ã
++
++      2002å¹Ž03æ18æ¥ æ¢ææ³° <linuxrat@gnuchina.org>
++      æ ¹æBram Molenaarå
+çåš2002å¹Ž03æ16æ¥çäŸä¿¡èŠæ±ïŒå°vimtutor1.4äž­è­¯
++      çåçŽå°vimtutor1.5ã
++
++      2001å¹Ž11æ15æ¥ æ¢ææ³° <linuxrat@gnuchina.org>
++      å°vimtutor1.4äž­è­¯çæäº€çµŠBram MolenaaråSven Guckesã
++
++~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+diff -Naur vim73.orig/runtime/vimrc_example.vim vim73/runtime/vimrc_example.vim
+--- vim73.orig/runtime/vimrc_example.vim	2010-05-15 11:03:57.000000000 +0000
++++ vim73/runtime/vimrc_example.vim	2013-06-07 17:07:29.195591976 +0000
+@@ -1,7 +1,7 @@
+ " An example for a vimrc file.
+ "
+ " Maintainer:	Bram Moolenaar <Bram@vim.org>
+-" Last change:	2008 Dec 17
++" Last change:	2011 Apr 15
+ "
+ " To use it, copy it to
+ "     for Unix and OS/2:  ~/.vimrc
+@@ -91,6 +91,6 @@
+ " file it was loaded from, thus the changes you made.
+ " Only define it when not defined already.
+ if !exists(":DiffOrig")
+-  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
++  command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis
+ 		  \ | wincmd p | diffthis
+ endif
+diff -Naur vim73.orig/src/GvimExt/Make_cyg.mak vim73/src/GvimExt/Make_cyg.mak
+--- vim73.orig/src/GvimExt/Make_cyg.mak	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/GvimExt/Make_cyg.mak	2013-06-07 17:07:29.268925100 +0000
+@@ -0,0 +1,77 @@
++# Project: gvimext
++# Generates gvimext.dll with gcc.
++# To be used with Cygwin.
++#
++# Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
++# Now it is allocated dymanically by the linker by evaluating all DLLs
++# already loaded in memory. The binary image contains as well information
++# for automatic pseudo-rebasing, if needed by the system. ALV 2004-02-29
++
++# If cross-compiling set this to yes, else set it to no
++CROSS = no
++#CROSS = yes
++# For the old MinGW 2.95 (the one you get e.g. with debian woody)
++# set the following variable to yes and check if the executables are
++# really named that way.
++# If you have a newer MinGW or you are using cygwin set it to no and
++# check also the executables
++MINGWOLD = no
++
++# Link against the shared versions of libgcc/libstdc++ by default.  Set
++# STATIC_STDCPLUS to "yes" to link against static versions instead.
++STATIC_STDCPLUS=no
++#STATIC_STDCPLUS=yes
++
++# Note: -static-libstdc++ is not available until gcc 4.5.x.
++LDFLAGS += -shared
++ifeq (yes, $(STATIC_STDCPLUS))
++LDFLAGS += -static-libgcc -static-libstdc++
++endif
++
++ifeq ($(CROSS),yes)
++DEL = rm
++ifeq ($(MINGWOLD),yes)
++CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
++else
++CXXFLAGS := -O2 -mno-cygwin
++endif
++else
++CXXFLAGS := -O2 -mno-cygwin
++ifneq (sh.exe, $(SHELL))
++DEL = rm
++else
++DEL = del
++endif
++endif
++CXX := $(CROSS_COMPILE)g++
++WINDRES := $(CROSS_COMPILE)windres
++WINDRES_CXX = $(CXX)
++WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
++LIBS :=  -luuid
++RES  := gvimext.res
++DEFFILE = gvimext_ming.def
++OBJ  := gvimext.o
++
++DLL  := gvimext.dll
++
++.PHONY: all all-before all-after clean clean-custom
++
++all: all-before $(DLL) all-after
++
++$(DLL): $(OBJ) $(RES) $(DEFFILE)
++	$(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
++		-Wl,--enable-auto-image-base \
++		-Wl,--enable-auto-import \
++		-Wl,--whole-archive \
++			$^ \
++		-Wl,--no-whole-archive \
++			$(LIBS)
++
++gvimext.o: gvimext.cpp
++	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
++
++$(RES): gvimext_ming.rc
++	$(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
++
++clean: clean-custom
++	-$(DEL)  $(OBJ) $(RES) $(DLL)
+diff -Naur vim73.orig/src/GvimExt/Make_ming.mak vim73/src/GvimExt/Make_ming.mak
+--- vim73.orig/src/GvimExt/Make_ming.mak	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/GvimExt/Make_ming.mak	2013-06-07 17:07:29.298925014 +0000
+@@ -1,6 +1,6 @@
+ # Project: gvimext
+ # Generates gvimext.dll with gcc.
+-# Can be used for Cygwin and MingW (MingW ignores -mno-cygwin)
++# To be used with MingW.
+ #
+ # Originally, the DLL base address was fixed: -Wl,--image-base=0x1C000000
+ # Now it is allocated dymanically by the linker by evaluating all DLLs
+@@ -17,15 +17,26 @@
+ # check also the executables
+ MINGWOLD = no
+ 
++# Link against the shared versions of libgcc/libstdc++ by default.  Set
++# STATIC_STDCPLUS to "yes" to link against static versions instead.
++STATIC_STDCPLUS=no
++#STATIC_STDCPLUS=yes
++
++# Note: -static-libstdc++ is not available until gcc 4.5.x.
++LDFLAGS += -shared
++ifeq (yes, $(STATIC_STDCPLUS))
++LDFLAGS += -static-libgcc -static-libstdc++
++endif
++
+ ifeq ($(CROSS),yes)
+ DEL = rm
+ ifeq ($(MINGWOLD),yes)
+-CXXFLAGS := -O2 -mno-cygwin -fvtable-thunks
++CXXFLAGS := -O2 -fvtable-thunks
+ else
+-CXXFLAGS := -O2 -mno-cygwin
++CXXFLAGS := -O2
+ endif
+ else
+-CXXFLAGS := -O2 -mno-cygwin
++CXXFLAGS := -O2
+ ifneq (sh.exe, $(SHELL))
+ DEL = rm
+ else
+@@ -34,6 +45,8 @@
+ endif
+ CXX := $(CROSS_COMPILE)g++
+ WINDRES := $(CROSS_COMPILE)windres
++WINDRES_CXX = $(CXX)
++WINDRES_FLAGS = --preprocessor="$(WINDRES_CXX) -E -xc" -DRC_INVOKED
+ LIBS :=  -luuid
+ RES  := gvimext.res
+ DEFFILE = gvimext_ming.def
+@@ -46,7 +59,7 @@
+ all: all-before $(DLL) all-after
+ 
+ $(DLL): $(OBJ) $(RES) $(DEFFILE)
+-	$(CXX) -shared $(CXXFLAGS) -s -o $@ \
++	$(CXX) $(LDFLAGS) $(CXXFLAGS) -s -o $@ \
+ 		-Wl,--enable-auto-image-base \
+ 		-Wl,--enable-auto-import \
+ 		-Wl,--whole-archive \
+@@ -58,8 +71,7 @@
+ 	$(CXX) $(CXXFLAGS) -DFEAT_GETTEXT -c $? -o $@
+ 
+ $(RES): gvimext_ming.rc
+-	$(WINDRES) --input-format=rc --output-format=coff -DMING $? -o $@
++	$(WINDRES) $(WINDRES_FLAGS) --input-format=rc --output-format=coff -DMING $? -o $@
+ 
+ clean: clean-custom
+ 	-$(DEL)  $(OBJ) $(RES) $(DLL)
+-
+diff -Naur vim73.orig/src/GvimExt/Makefile vim73/src/GvimExt/Makefile
+--- vim73.orig/src/GvimExt/Makefile	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/GvimExt/Makefile	2013-06-07 17:07:29.308924985 +0000
+@@ -10,7 +10,11 @@
+ NODEBUG = 1
+ !endif
+ 
+-!include <win32.mak>
++!ifdef SDK_INCLUDE_DIR
++!include $(SDK_INCLUDE_DIR)\Win32.mak
++!else
++!include <Win32.mak>
++!endif
+ 
+ all: gvimext.dll
+ 
+diff -Naur vim73.orig/src/GvimExt/gvimext.cpp vim73/src/GvimExt/gvimext.cpp
+--- vim73.orig/src/GvimExt/gvimext.cpp	2010-07-10 17:21:34.000000000 +0000
++++ vim73/src/GvimExt/gvimext.cpp	2013-06-07 17:07:29.325591604 +0000
+@@ -142,6 +142,7 @@
+ static int dyn_libintl_init(char *dir);
+ static void dyn_libintl_end(void);
+ 
++static wchar_t *oldenv = NULL;
+ static HINSTANCE hLibintlDLL = 0;
+ static char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+ static char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
+@@ -339,8 +340,10 @@
+ inc_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+-    if (g_cRefThisDll == 0)
++    if (g_cRefThisDll == 0) {
+ 	dyn_gettext_load();
++	oldenv = GetEnvironmentStringsW();
++    }
+ #endif
+     InterlockedIncrement((LPLONG)&g_cRefThisDll);
+ }
+@@ -349,8 +352,13 @@
+ dec_cRefThisDLL()
+ {
+ #ifdef FEAT_GETTEXT
+-    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0)
++    if (InterlockedDecrement((LPLONG)&g_cRefThisDll) == 0) {
+ 	dyn_gettext_free();
++	if (oldenv != NULL) {
++	    FreeEnvironmentStringsW(oldenv);
++	    oldenv = NULL;
++	}
++    }
+ #else
+     InterlockedDecrement((LPLONG)&g_cRefThisDll);
+ #endif
+@@ -519,7 +527,7 @@
+ //
+ //  PARAMETERS:
+ //    pIDFolder - Specifies the parent folder
+-//    pDataObj  - Spefifies the set of items selected in that folder.
++//    pDataObj  - Specifies the set of items selected in that folder.
+ //    hRegKey   - Specifies the type of the focused item in the selection.
+ //
+ //  RETURN VALUE:
+@@ -586,8 +594,23 @@
+ 
+     // Initialize m_cntOfHWnd to 0
+     m_cntOfHWnd = 0;
+-    // Retrieve all the vim instances
+-    EnumWindows(EnumWindowsProc, (LPARAM)this);
++
++    HKEY keyhandle;
++    bool showExisting = true;
++
++    // Check whether "Edit with existing Vim" entries are disabled.
++    if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, "Software\\Vim\\Gvim", 0,
++				       KEY_READ, &keyhandle) == ERROR_SUCCESS)
++    {
++	if (RegQueryValueEx(keyhandle, "DisableEditWithExisting", 0, NULL,
++						 NULL, NULL) == ERROR_SUCCESS)
++	    showExisting = false;
++	RegCloseKey(keyhandle);
++    }
++
++    // Retrieve all the vim instances, unless disabled.
++    if (showExisting)
++	EnumWindows(EnumWindowsProc, (LPARAM)this);
+ 
+     if (cbFiles > 1)
+     {
+@@ -890,8 +913,8 @@
+ 			NULL,		// Process handle not inheritable.
+ 			NULL,		// Thread handle not inheritable.
+ 			FALSE,		// Set handle inheritance to FALSE.
+-			0,		// No creation flags.
+-			NULL,		// Use parent's environment block.
++			oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
++			oldenv,		// Use unmodified environment block.
+ 			NULL,		// Use parent's starting directory.
+ 			&si,		// Pointer to STARTUPINFO structure.
+ 			&pi)		// Pointer to PROCESS_INFORMATION structure.
+@@ -972,8 +995,8 @@
+ 		NULL,		// Process handle not inheritable.
+ 		NULL,		// Thread handle not inheritable.
+ 		FALSE,		// Set handle inheritance to FALSE.
+-		0,		// No creation flags.
+-		NULL,		// Use parent's environment block.
++		oldenv == NULL ? 0 : CREATE_UNICODE_ENVIRONMENT,
++		oldenv,		// Use unmodified environment block.
+ 		NULL,		// Use parent's starting directory.
+ 		&si,		// Pointer to STARTUPINFO structure.
+ 		&pi)		// Pointer to PROCESS_INFORMATION structure.
+diff -Naur vim73.orig/src/GvimExt/gvimext.def vim73/src/GvimExt/gvimext.def
+--- vim73.orig/src/GvimExt/gvimext.def	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/GvimExt/gvimext.def	2013-06-07 17:07:29.335591576 +0000
+@@ -1,7 +1,7 @@
+ ;gvimdef.def : Declares the module parameters for the DLL.
+ 
+ LIBRARY      gvimext
+-DESCRIPTION  'Vim Shell Extension'
++; DESCRIPTION  'Vim Shell Extension'
+ 
+ EXPORTS
+     DllCanUnloadNow private
+diff -Naur vim73.orig/src/GvimExt/gvimext_ming.def vim73/src/GvimExt/gvimext_ming.def
+--- vim73.orig/src/GvimExt/gvimext_ming.def	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/GvimExt/gvimext_ming.def	2013-06-07 17:07:29.378924785 +0000
+@@ -3,7 +3,7 @@
+ ;Hence this is the same file as gvimext.def with private removed
+ 
+ LIBRARY      gvimext
+-DESCRIPTION  'Vim Shell Extension build with MinGW'
++; DESCRIPTION  'Vim Shell Extension build with MinGW'
+ 
+ EXPORTS
+     DllCanUnloadNow = DllCanUnloadNow@0
+diff -Naur vim73.orig/src/INSTALL vim73/src/INSTALL
+--- vim73.orig/src/INSTALL	2010-06-26 04:04:51.000000000 +0000
++++ vim73/src/INSTALL	2013-06-07 17:07:29.428924643 +0000
+@@ -6,9 +6,8 @@
+ Contents:
+ 1. Generic
+ 2. Unix
+-3. RISC OS
+-4. OS/2 (with EMX 0.9b)
+-5. Atari MiNT
++3. OS/2 (with EMX 0.9b)
++4. Atari MiNT
+ 
+ See INSTALLami.txt              for Amiga
+ See INSTALLmac.txt              for Macintosh
+@@ -174,25 +173,7 @@
+ 	./configure --without-local-dir
+ 
+ 
+-3. RISC OS
+-=============
+-
+-Much file renaming is needed before you can compile anything.
+-You'll need UnixLib to link against, GCC and GNU make.
+-
+-I suggest you get the RISC OS binary distribution, which includes the
+-Templates file and the loader.
+-
+-Try here: http://www.ecs.soton.ac.uk/~tal197
+-
+-Do
+-    :help riscos
+-
+-within the editor for more information, or read the
+-../runtime/doc/os_risc.txt help file.
+-
+-
+-4. OS/2
++3. OS/2
+ =======
+ 
+ Summary:
+@@ -237,7 +218,7 @@
+ Check ../runtime/doc/os_os2.txt for additional info on running Vim.
+ 
+ 
+-5. Atari MiNT
++4. Atari MiNT
+ =============
+ 
+ [NOTE: this is quite old, it might not work anymore]
+diff -Naur vim73.orig/src/INSTALLpc.txt vim73/src/INSTALLpc.txt
+--- vim73.orig/src/INSTALLpc.txt	2010-05-24 12:58:06.000000000 +0000
++++ vim73/src/INSTALLpc.txt	2013-06-07 17:07:29.475591176 +0000
+@@ -11,9 +11,9 @@
+ this, then you will get the default behavior as is documented, which should
+ be fine for most people.
+ 
+-With the exception of the last two sections (Windows 3.1 and MS-DOS),
+-this document assumes that you are building Vim for Win32
+-(Windows NT/2000/XP/2003/Vista and Windows 95/98/Me)
++With the exception of two sections (Windows 3.1 and MS-DOS), this document
++assumes that you are building Vim for Win32 or later.
++(Windows 95/98/Me/NT/2000/XP/2003/Vista/7)
+ 
+ 
+ Contents:
+@@ -27,9 +27,13 @@
+ 8. Windows 3.1
+ 9. MS-DOS
+ 
++10. Installing after building from sources
++
++
+ The currently preferred method is using the free Visual C++ Toolkit 2008
+-|msvc-2008-express|.  If you need the executable to run on Windows 98 or ME,
+-use the 2003 one |msvc-2003-toolkit|.
++|msvc-2008-express|, the produced binary runs on most MS-Windows systems.  If
++you need the executable to run on Windows 98 or ME, use the 2003 one
++|msvc-2003-toolkit|.
+ 
+ 
+ 1. Microsoft Visual C++
+@@ -41,6 +45,10 @@
+ Building with Visual Studio (VS 98, VS .NET, VS .NET 2003, VS 2005, and VS 2008)
+ is straightforward. (These instructions should also work for VS 4 and VS 5.)
+ 
++Using VS C++ 2008 Express is recommended, the binaries build with that run on
++nearly all platforms.  Binaries from later versions may not run on Windows 95
++or XP.
++
+ To build Vim from the command line with MSVC, use Make_mvc.mak.
+ Visual Studio installed a batch file called vcvars32.bat, which you must
+ run to set up paths for nmake and MSVC.
+@@ -168,6 +176,10 @@
+ To set the environment execute the msvc2008.bat script.  You can then build
+ Vim with Make_mvc.mak.
+ 
++For building 64 bit binaries you also need to install the SDK:
++"Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1"
++You don't need the examples and documentation.
++
+ 
+ Visual C++ 2010 Express Edition       *msvc-2010-express*
+ -------------------------------
+@@ -176,7 +188,7 @@
+     http://www.microsoft.com/express/vc/Default.aspx
+ This includes the IDE and the debugger.
+ 
+-To set the environment execute the msvc2008.bat script.  You can then build
++To set the environment execute the msvc2010.bat script.  You can then build
+ Vim with Make_mvc.mak.
+ 
+ 
+@@ -235,6 +247,12 @@
+ found at
+     http://www.upx.org/
+ 
++As of 2011, UPX still does not support compressing 64-bit EXE's; if you have
++built a 64-bit vim then an alternative to UPX is 'MPRESS'. MPRESS can be found
++at:
++    http://www.matcode.com/mpress.htm
++
++
+ ADDITION: NLS support with MinGW
+ 
+ (by Eduardo F. Amatria <eferna1@platea.pntic.mec.es>)
+@@ -286,10 +304,12 @@
+ 6. Building with Python support
+ ===============================
+ 
+-(written by Ron Aaron: <ronaharon@yahoo.com>)
++For building with MSVC 2008 the "Windows Installer" from www.python.org
++works fine.
++
++(rest written by Ron Aaron: <ronaharon@yahoo.com>)
+ 
+-This has been tested with the mingw32 compiler, and the ActiveState
+-ActivePython:
++Building with the mingw32 compiler, and the ActiveState ActivePython:
+     http://www.ActiveState.com/Products/ActivePython/
+ 
+ After installing the ActivePython, you will have to create a 'mingw32'
+@@ -406,5 +426,61 @@
+ NOTE: multi-byte support is broken in the Borland libraries, not everything
+ will work properly!  Esp. handling multi-byte file names.
+ 
+-If you get all kinds of strange error messages when compiling, try adding
+-changing the file format from "unix" to "dos".
++If you get all kinds of strange error messages when compiling, try changing
++the file format from "unix" to "dos".
++
++
++10. Installing after building from sources
++==========================================
++
++[provided by Michael Soyka]
++
++After you've built the Vim binaries as described above, you're ready to
++install Vim on your system.  However, if you've obtained the Vim sources
++using Mercurial or by downloading them as a unix tar file, you must first 
++create a "vim73" directory.  If you instead downloaded the sources as
++zip files, you can skip this setup as the zip archives already have the
++correct directory structure.  
++
++  A.  Create a Vim "runtime" subdirectory named "vim73"
++  -----------------------------------------------------
++  If you obtained your Vim sources as zip files, you can skip this step.  
++  Otherwise, continue reading.
++
++  Go to the directory that contains the Vim "src" and "runtime"
++  directories and create a new subdirectory named "vim73".  
++  
++  Copy the "runtime" files into "vim73":
++     copy runtime\* vim73
++
++  B.  Copy the new binaries into the "vim73" directory
++  ----------------------------------------------------
++  Regardless of how you installed the Vim sources, you need to copy the
++  new binaries you created above into "vim73":
++
++     copy src\*.exe vim73
++     copy src\GvimExt\gvimext.dll vim73
++     copy src\xxd\xxd.exe vim73
++
++  C.  Move the "vim73" directory into the Vim installation subdirectory
++  ---------------------------------------------------------------------
++  Move the "vim73" subdirectory into the subdirectory where you want Vim
++  to be installed.  Typically, this subdirectory will be named "vim".  
++  If you already have a "vim73" subdirectory in "vim", delete it first
++  by running its uninstal.exe program.  
++
++  D.  Install Vim
++  ---------------
++  "cd" to your Vim installation subdirectory "vim\vim73" and run the
++  "install.exe" program.  It will ask you a number of questions about
++  how you would like to have your Vim setup.  Among these are:
++  - You can tell it to write a "_vimrc" file with your preferences in the
++    parent directory.
++  - It can also install an "Edit with Vim" entry in the Windows Explorer
++    popup menu.
++  - You can have it create batch files, so that you can run Vim from the
++    console or in a shell.  You can select one of the directories in your
++    PATH or add the directory to PATH using the Windows Control Panel.  
++  - Create entries for Vim on the desktop and in the Start menu.
++
++Happy Vimming!
+diff -Naur vim73.orig/src/INSTALLvms.txt vim73/src/INSTALLvms.txt
+--- vim73.orig/src/INSTALLvms.txt	2010-08-01 12:36:08.000000000 +0000
++++ vim73/src/INSTALLvms.txt	2013-06-07 17:07:29.485591147 +0000
+@@ -330,7 +330,7 @@
+      Also VMS_JACKETS.EXE from OpenVMS Porting Library.
+ 
+      Please note, that GTK uses /name=(as_is,short)/float=ieee/ieee=denorm
+-     complier directives that is not compatible with "standard" VMS usage,
++     compiler directives that is not compatible with "standard" VMS usage,
+      therefore other external features might fail as PERL, PYTHON and TCL
+      support.
+ 
+diff -Naur vim73.orig/src/Make_bc5.mak vim73/src/Make_bc5.mak
+--- vim73.orig/src/Make_bc5.mak	2010-07-17 15:28:51.000000000 +0000
++++ vim73/src/Make_bc5.mak	2013-06-07 17:07:29.528924357 +0000
+@@ -694,7 +694,7 @@
+ 
+ !if ($(OSTYPE)==WIN32)
+ vimobj = $(vimobj) \
+-	$(OBJDIR)\os_win32.obj $(OBJDIR)\os_mswin.obj
++	$(OBJDIR)\os_win32.obj $(OBJDIR)\os_mswin.obj $(OBJDIR)\winclip.obj
+ !elif ($(OSTYPE)==DOS16)
+ vimobj = $(vimobj) \
+ 	$(OBJDIR)\os_msdos.obj
+@@ -1006,10 +1006,10 @@
+ 	$(PERL)\bin\perl.exe $(PERL)\lib\ExtUtils\xsubpp -prototypes -typemap \
+ 	    $(PERL)\lib\ExtUtils\typemap if_perl.xs > $@
+ 
+-$(OBJDIR)\if_python.obj: if_python.c python.lib
++$(OBJDIR)\if_python.obj: if_python.c if_py_both.h python.lib
+ 	$(CC) -I$(PYTHON)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python.c
+ 
+-$(OBJDIR)\if_python3.obj: if_python3.c python3.lib
++$(OBJDIR)\if_python3.obj: if_python3.c if_py_both.h python3.lib
+ 	$(CC) -I$(PYTHON3)\include $(CCARG) $(CC1) $(CC2)$@ -pc if_python3.c
+ 
+ $(OBJDIR)\if_ruby.obj: if_ruby.c ruby.lib
+diff -Naur vim73.orig/src/Make_cyg.mak vim73/src/Make_cyg.mak
+--- vim73.orig/src/Make_cyg.mak	2010-08-02 19:09:22.000000000 +0000
++++ vim73/src/Make_cyg.mak	2013-06-07 17:07:29.532257681 +0000
+@@ -1,6 +1,6 @@
+ #
+ # Makefile for VIM on Win32, using Cygnus gcc
+-# Last updated by Dan Sharp.  Last Change: 2010 Feb 24
++# Last updated by Dan Sharp.  Last Change: 2013 Apr 22
+ #
+ # Also read INSTALLpc.txt!
+ #
+@@ -21,12 +21,17 @@
+ #   TCL_VER	define to version of TCL being used (83)
+ #   DYNAMIC_TCL no or yes: use yes to load the TCL DLL dynamically (yes)
+ # RUBY		define to path to Ruby dir to get Ruby support (not defined)
+-#   RUBY_VER	define to version of Ruby being used (16)
++#   RUBY_VER		define to version of Ruby being used (16)
++#   RUBY_VER_LONG	same, but in format with dot. (1.6)
++#	    You must set RUBY_VER_LONG when changing RUBY_VER.
++#	    You must set RUBY_API_VER version to RUBY_VER_LONG.
++#	    Don't set ruby API version to RUBY_VER like 191.
+ #   DYNAMIC_RUBY no or yes: use yes to load the Ruby DLL dynamically (yes)
+ # MZSCHEME	define to path to MzScheme dir to get MZSCHEME support (not defined)
+ #   MZSCHEME_VER      define to version of MzScheme being used (209_000)
+ #   DYNAMIC_MZSCHEME  no or yes: use yes to load the MzScheme DLLs dynamically (yes)
+ #   MZSCHEME_DLLS     path to MzScheme DLLs (libmzgc and libmzsch), for "static" build.
++#   MZSCHEME_USE_RACKET  define to use "racket" instead of "mzsch".
+ # LUA	define to path to Lua dir to get Lua support (not defined)
+ #   LUA_VER	    define to version of Lua being used (51)
+ #   DYNAMIC_LUA  no or yes: use yes to load the Lua DLL dynamically (yes)
+@@ -42,12 +47,12 @@
+ #               (i386)
+ # USEDLL	no or yes: set to yes to use the Runtime library DLL (no)
+ #		For USEDLL=yes the cygwin1.dll is required to run Vim.
+-#		"no" does not work with latest version of Cygwin, use
+-#		Make_ming.mak instead.  Or set CC to gcc-3 and add
++#		For "no" the mingw-gcc-g++ package or the mingw64-i686-gcc-g++
++#		package is required to compile Vim.  Or set CC to gcc-3 and add
+ #		-L/lib/w32api to EXTRA_LIBS.
+ # POSTSCRIPT	no or yes: set to yes for PostScript printing (no)
+ # FEATURES	TINY, SMALL, NORMAL, BIG or HUGE (BIG)
+-# WINVER	Lowest Win32 version to support.  (0x0400)
++# WINVER	Lowest Win32 version to support.  (0x0500)
+ # CSCOPE	no or yes: to include cscope interface support (yes)
+ # OPTIMIZE	SPACE, SPEED, or MAXSPEED: set optimization level (MAXSPEED)
+ # NETBEANS	no or yes: to include netbeans interface support (yes when GUI
+@@ -84,7 +89,7 @@
+ endif
+ 
+ ifndef WINVER
+-WINVER = 0x0400
++WINVER = 0x0500
+ endif
+ 
+ ifndef CSCOPE
+@@ -101,6 +106,13 @@
+ OPTIMIZE = MAXSPEED
+ endif
+ 
++
++# Link against the shared version of libstdc++ by default.  Set
++# STATIC_STDCPLUS to "yes" to link against static version instead.
++ifndef STATIC_STDCPLUS
++STATIC_STDCPLUS=no
++endif
++
+ ### See feature.h for a list of optionals.
+ ### Any other defines can be included here.
+ 
+@@ -109,9 +121,17 @@
+ INCLUDES = -march=$(ARCH) -Iproto
+ 
+ #>>>>> name of the compiler and linker, name of lib directory
+-CROSS_COMPILE =
++ifeq (yes, $(USEDLL))
++# CROSS_COMPILE is used for the gvimext DLL.
++CROSS_COMPILE = i686-pc-mingw32-
+ CC = gcc
+ RC = windres
++else
++# i686-pc-mingw32-gcc, i686-w64-mingw32-gcc or gcc-3 can be used.
++CROSS_COMPILE = i686-pc-mingw32-
++CC = $(CROSS_COMPILE)gcc
++RC = $(CROSS_COMPILE)windres
++endif
+ 
+ ##############################
+ # DYNAMIC_PERL=yes and no both work
+@@ -188,36 +208,61 @@
+ ##############################
+ ifdef RUBY
+ 
++ifndef DYNAMIC_RUBY
++DYNAMIC_RUBY=yes
++endif
++#  Set default value
+ ifndef RUBY_VER
+-RUBY_VER=16
++RUBY_VER = 16
+ endif
+-
+ ifndef RUBY_VER_LONG
+-RUBY_VER_LONG=1.6
++RUBY_VER_LONG = 1.6
+ endif
+-
+-ifndef DYNAMIC_RUBY
+-DYNAMIC_RUBY = yes
++ifndef RUBY_API_VER
++RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
+ endif
+ 
+-ifeq ($(RUBY_VER), 16)
+ ifndef RUBY_PLATFORM
++ifeq ($(RUBY_VER), 16)
+ RUBY_PLATFORM = i586-mswin32
+-endif
+-ifndef RUBY_INSTALL_NAME
+-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
+-endif
+ else
+-ifndef RUBY_PLATFORM
++ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
++RUBY_PLATFORM = i386-mingw32
++else
++ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
++RUBY_PLATFORM = x64-mingw32
++else
+ RUBY_PLATFORM = i386-mswin32
+ endif
++endif
++endif
++endif
++
+ ifndef RUBY_INSTALL_NAME
+-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
++ifeq ($(RUBY_VER), 16)
++RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
++else
++ifeq ($(ARCH),x86-64)
++RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
++else
++RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
++endif
+ endif
+ endif
+ 
++ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
++RUBY_19_OR_LATER = 1
++endif
++
+ DEFINES += -DFEAT_RUBY
++ifneq ($(findstring w64-mingw32,$(CC)),)
++# A workaround for mingw-w64
++DEFINES += -DHAVE_STRUCT_TIMESPEC -DHAVE_STRUCT_TIMEZONE
++endif
+ INCLUDES += -I$(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++ifdef RUBY_19_OR_LATER
++INCLUDES += -I$(RUBY)/include/ruby-$(RUBY_VER_LONG) -I$(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++endif
+ EXTRA_OBJS += $(OUTDIR)/if_ruby.o
+ 
+ ifeq (yes, $(DYNAMIC_RUBY))
+@@ -254,16 +299,22 @@
+ MZSCHEME_GENERATE_BASE=no
+ endif
+ 
++ifndef MZSCHEME_USE_RACKET
++MZSCHEME_MAIN_LIB=mzsch
++else
++MZSCHEME_MAIN_LIB=racket
++endif
++
+ ifeq (yes, $(DYNAMIC_MZSCHEME))
+-DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
++DEFINES += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+ else
+ ifndef MZSCHEME_DLLS
+ MZSCHEME_DLLS = $(MZSCHEME)
+ endif
+ ifeq (yes,$(MZSCHEME_PRECISE_GC))
+-MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
++MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
+ else
+-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
++MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+ endif
+ EXTRA_LIBS += -L$(MZSCHEME_DLLS) -L$(MZSCHEME_DLLS)/lib $(MZSCHEME_LIB)
+ endif
+@@ -442,7 +493,12 @@
+ ifeq (yes, $(OLE))
+ DEFINES += -DFEAT_OLE
+ EXTRA_OBJS += $(OUTDIR)/if_ole.o
+-EXTRA_LIBS += -loleaut32 -lstdc++
++EXTRA_LIBS += -loleaut32
++ifeq (yes, $(STATIC_STDCPLUS))
++EXTRA_LIBS += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
++else
++EXTRA_LIBS += -lstdc++
++endif
+ endif
+ 
+ ##############################
+@@ -499,6 +555,7 @@
+ 	$(OUTDIR)/option.o \
+ 	$(OUTDIR)/os_win32.o \
+ 	$(OUTDIR)/os_mswin.o \
++	$(OUTDIR)/winclip.o \
+ 	$(OUTDIR)/pathdef.o \
+ 	$(OUTDIR)/popupmnu.o \
+ 	$(OUTDIR)/quickfix.o \
+@@ -529,7 +586,7 @@
+ 	$(MAKE) -C xxd -f Make_cyg.mak CC=$(CC) USEDLL=$(USEDLL)
+ 
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+-	$(MAKE) -C GvimExt -f Make_ming.mak CROSS_COMPILE=$(CROSS_COMPILE)
++	$(MAKE) -C GvimExt -f Make_cyg.mak CROSS_COMPILE=$(CROSS_COMPILE)
+ 
+ vimrun.exe: vimrun.c
+ 	$(CC) $(CFLAGS) -o vimrun.exe vimrun.c  $(LIBS)
+@@ -558,7 +615,7 @@
+ endif
+ 	-$(DEL) pathdef.c
+ 	$(MAKE) -C xxd -f Make_cyg.mak clean
+-	$(MAKE) -C GvimExt -f Make_ming.mak clean
++	$(MAKE) -C GvimExt -f Make_cyg.mak clean
+ 
+ distclean: clean
+ 	-$(DEL) obj$(DIRSLASH)*.o
+@@ -582,16 +639,19 @@
+ $(OUTDIR)/ex_eval.o:	ex_eval.c $(INCL) ex_cmds.h
+ 	$(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
+ 
++$(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
++	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
++
+ $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
+ 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
+ 
+ $(OUTDIR)/if_ole.o:	if_ole.cpp $(INCL)
+ 	$(CC) -c $(CFLAGS) if_ole.cpp -o $(OUTDIR)/if_ole.o
+ 
+-$(OUTDIR)/if_python.o : if_python.c $(INCL)
++$(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
+ 	$(CC) -c $(CFLAGS) -I$(PYTHON)/include $< -o $@
+ 
+-$(OUTDIR)/if_python3.o : if_python3.c $(INCL)
++$(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
+ 	$(CC) -c $(CFLAGS) -I$(PYTHON3)/include $< -o $@
+ 
+ if_perl.c: if_perl.xs typemap
+@@ -612,6 +672,9 @@
+ $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_DEP)
+ 	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+ 
++$(OUTDIR)/regexp.o:		regexp.c regexp_nfa.c $(INCL)
++	$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
++
+ $(OUTDIR)/if_mzsch.o:	if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
+ 	$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
+ 
+diff -Naur vim73.orig/src/Make_ivc.mak vim73/src/Make_ivc.mak
+--- vim73.orig/src/Make_ivc.mak	2010-06-07 20:49:30.000000000 +0000
++++ vim73/src/Make_ivc.mak	2013-06-07 17:07:29.592257509 +0000
+@@ -241,6 +241,7 @@
+ 	"$(INTDIR)/ops.obj" \
+ 	"$(INTDIR)/option.obj" \
+ 	"$(INTDIR)/os_mswin.obj" \
++	"$(INTDIR)/winclip.obj" \
+ 	"$(INTDIR)/os_win32.obj" \
+ 	"$(INTDIR)/popupmnu.obj" \
+ 	"$(INTDIR)/quickfix.obj" \
+@@ -600,6 +601,10 @@
+ # End Source File
+ # Begin Source File
+ 
++SOURCE=.\winclip.c
++# End Source File
++# Begin Source File
++
+ SOURCE=.\os_win32.c
+ # End Source File
+ # Begin Source File
+diff -Naur vim73.orig/src/Make_ming.mak vim73/src/Make_ming.mak
+--- vim73.orig/src/Make_ming.mak	2010-08-02 19:09:43.000000000 +0000
++++ vim73/src/Make_ming.mak	2013-06-07 17:07:29.612257452 +0000
+@@ -1,25 +1,28 @@
+-# Makefile for VIM on Win32, using 'EGCS/mingw32 1.1.2'.
++# Makefile for VIM on Win32
++#
+ # Info at http://www.mingw.org
+-# Also requires 'GNU make 3.77', which you can get through a link
+-# to 'JanJaap's page from the above page.
++# Alternative x86 and 64-builds: http://mingw-w64.sourceforge.net
++# Also requires GNU make, which you can download from the same sites.
+ # Get missing libraries from http://gnuwin32.sf.net.
+ #
+ # Tested on Win32 NT 4 and Win95.
+ #
+-# To make everything, just 'make -f Make_ming.mak'
+-# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'
+-# After a run, you can 'make -f Make_ming.mak clean' to clean up
++# To make everything, just 'make -f Make_ming.mak'.
++# To make just e.g. gvim.exe, 'make -f Make_ming.mak gvim.exe'.
++# After a run, you can 'make -f Make_ming.mak clean' to clean up.
+ #
+ # NOTE: Sometimes 'GNU Make' will stop after building vimrun.exe -- I think
+ # it's just run out of memory or something.  Run again, and it will continue
+ # with 'xxd'.
+ #
+-# "make upx" makes *compressed* versions of the GUI and console EXEs, using the
+-# excellent UPX compressor:
++# "make upx" makes *compressed* versions of the 32 bit GUI and console EXEs,
++# using the excellent UPX compressor:
+ #     http://upx.sourceforge.net/
++# "make mpress" uses the MPRESS compressor for 32- and 64-bit EXEs:
++#     http://www.matcode.com/mpress.htm
+ #
+-# Maintained by Ron Aaron <ronaharon@yahoo.com>
+-# updated 2003 Jan 20
++# Maintained by Ron Aaron <ronaharon@yahoo.com> et al.
++# Updated 2012 Sep 5.
+ 
+ #>>>>> choose options:
+ # set to yes for a debug build
+@@ -29,33 +32,42 @@
+ # set to yes to make gvim, no for vim
+ GUI=yes
+ # FEATURES=[TINY | SMALL  | NORMAL | BIG | HUGE]
+-# set to TINY to make minimal version (few features)
++# Set to TINY to make minimal version (few features).
+ FEATURES=BIG
+-# set to one of i386, i486, i586, i686 as the minimum target processor
++# Set to one of i386, i486, i586, i686 as the minimum target processor.
++# For amd64/x64 architecture set ARCH=x86-64 .
+ ARCH=i386
+-# set to yes to cross-compile from unix; no=native Windows
++# Set to yes to cross-compile from unix; no=native Windows.
+ CROSS=no
+-# set to path to iconv.h and libiconv.a to enable using 'iconv.dll'
++# Set to path to iconv.h and libiconv.a to enable using 'iconv.dll'.
+ #ICONV="."
+ ICONV=yes
+ GETTEXT=yes
+-# set to yes to include multibyte support
++# Set to yes to include multibyte support.
+ MBYTE=yes
+-# set to yes to include IME support
++# Set to yes to include IME support.
+ IME=yes
+ DYNAMIC_IME=yes
+-# set to yes to enable writing a postscript file with :hardcopy
++# Set to yes to enable writing a postscript file with :hardcopy.
+ POSTSCRIPT=no
+-# set to yes to enable OLE support
++# Set to yes to enable OLE support.
+ OLE=no
+-# Set the default $(WINVER) to make it work with pre-Win2k
+-WINVER = 0x0400
+-# Set to yes to enable Cscope support
++# Set the default $(WINVER) to make it work with pre-Win2k.
++ifndef WINVER
++WINVER = 0x0500
++endif
++# Set to yes to enable Cscope support.
+ CSCOPE=yes
+-# Set to yes to enable Netbeans support
++# Set to yes to enable Netbeans support.
+ NETBEANS=$(GUI)
+ 
+ 
++# Link against the shared version of libstdc++ by default.  Set
++# STATIC_STDCPLUS to "yes" to link against static version instead.
++ifndef STATIC_STDCPLUS
++STATIC_STDCPLUS=no
++endif
++
+ # If the user doesn't want gettext, undefine it.
+ ifeq (no, $(GETTEXT))
+ GETTEXT=
+@@ -81,7 +93,7 @@
+ 
+ # If you are using gettext-0.10.35 from http://sourceforge.net/projects/gettext
+ # or gettext-0.10.37 from http://sourceforge.net/projects/mingwrep/
+-# uncomment the following, but I can't build a static versión with them, ?-(|
++# uncomment the following, but I can't build a static version with them, ?-(|
+ #GETTEXT=c:/gettext-0.10.37-20010430
+ #STATIC_GETTEXT=USE_STATIC_GETTEXT
+ #DYNAMIC_GETTEXT=DYNAMIC_GETTEXT
+@@ -102,6 +114,13 @@
+ # on NT, it's here:
+ PERLLIB=$(PERL)/lib
+ PERLLIBS=$(PERLLIB)/Core
++XSUBPPTRY=$(PERLLIB)/ExtUtils/xsubpp
++XSUBPP_EXISTS=$(shell perl -e "print 1 unless -e '$(XSUBPPTRY)'")
++ifeq "$(XSUBPP_EXISTS)" ""
++XSUBPP=perl $(XSUBPPTRY)
++else
++XSUBPP=xsubpp
++endif
+ endif
+ 
+ # uncomment 'LUA' if you want a Lua-enabled version
+@@ -141,11 +160,17 @@
+ MZSCHEME_GENERATE_BASE=no
+ endif
+ 
++ifndef MZSCHEME_USE_RACKET
++MZSCHEME_MAIN_LIB=mzsch
++else
++MZSCHEME_MAIN_LIB=racket
++endif
++
+ ifeq (no,$(DYNAMIC_MZSCHEME))
+ ifeq (yes,$(MZSCHEME_PRECISE_GC))
+-MZSCHEME_LIB=-lmzsch$(MZSCHEME_VER)
++MZSCHEME_LIB=-l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER)
+ else
+-MZSCHEME_LIB = -lmzsch$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
++MZSCHEME_LIB = -l$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER) -lmzgc$(MZSCHEME_VER)
+ endif
+ # the modern MinGW can dynamically link to dlls directly.
+ # point MZSCHEME_DLLS to where you put libmzschXXXXXXX.dll and libgcXXXXXXX.dll
+@@ -237,7 +262,9 @@
+ #	  DYNAMIC_RUBY=yes (to load the Ruby DLL dynamically)
+ #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 16)
+ #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.6)
+-#	    You must set RUBY_VER_LONG when change RUBY_VER.
++#	    You must set RUBY_VER_LONG when changing RUBY_VER.
++#	    You must set RUBY_API_VER version to RUBY_VER_LONG.
++#	    Don't set ruby API version to RUBY_VER like 191.
+ #RUBY=c:/ruby
+ ifdef RUBY
+ ifndef DYNAMIC_RUBY
+@@ -250,6 +277,9 @@
+ ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.6
+ endif
++ifndef RUBY_API_VER
++RUBY_API_VER = $(subst .,,$(RUBY_VER_LONG))
++endif
+ 
+ ifndef RUBY_PLATFORM
+ ifeq ($(RUBY_VER), 16)
+@@ -258,20 +288,35 @@
+ ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/i386-mingw32),)
+ RUBY_PLATFORM = i386-mingw32
+ else
++ifneq ($(wildcard $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/x64-mingw32),)
++RUBY_PLATFORM = x64-mingw32
++else
+ RUBY_PLATFORM = i386-mswin32
+ endif
+ endif
+ endif
++endif
+ 
+ ifndef RUBY_INSTALL_NAME
+ ifeq ($(RUBY_VER), 16)
+-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
++RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+ else
+-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
++ifeq ($(ARCH),x86-64)
++RUBY_INSTALL_NAME = x64-msvcrt-ruby$(RUBY_API_VER)
++else
++RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
++endif
+ endif
+ endif
+ 
+-RUBYINC =-I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++ifeq (19, $(word 1,$(sort 19 $(RUBY_VER))))
++RUBY_19_OR_LATER = 1
++endif
++
++RUBYINC = -I $(RUBY)/lib/ruby/$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++ifdef RUBY_19_OR_LATER
++RUBYINC += -I $(RUBY)/include/ruby-$(RUBY_VER_LONG) -I $(RUBY)/include/ruby-$(RUBY_VER_LONG)/$(RUBY_PLATFORM)
++endif
+ ifeq (no, $(DYNAMIC_RUBY))
+ RUBYLIB = -L$(RUBY)/lib -l$(RUBY_INSTALL_NAME)
+ endif
+@@ -304,11 +349,13 @@
+ endif
+ CC := $(CROSS_COMPILE)gcc
+ WINDRES := $(CROSS_COMPILE)windres
++WINDRES_CC = $(CC)
+ 
+ #>>>>> end of choices
+ ###########################################################################
+ 
+ CFLAGS = -Iproto $(DEFINES) -pipe -w -march=$(ARCH) -Wall
++WINDRES_FLAGS = --preprocessor="$(WINDRES_CC) -E -xc" -DRC_INVOKED
+ 
+ ifdef GETTEXT
+ DEFINES += -DHAVE_GETTEXT -DHAVE_LOCALE_H
+@@ -343,7 +390,10 @@
+ ifdef MZSCHEME
+ CFLAGS += -I$(MZSCHEME)/include -DFEAT_MZSCHEME -DMZSCHEME_COLLECTS=\"$(MZSCHEME)/collects\"
+ ifeq (yes, $(DYNAMIC_MZSCHEME))
+-CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
++CFLAGS += -DDYNAMIC_MZSCHEME -DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" -DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
++endif
++ifeq (yes, "$(MZSCHEME_DEBUG)")
++CFLAGS += -DMZSCHEME_FORCE_GC
+ endif
+ endif
+ 
+@@ -401,13 +451,34 @@
+ endif
+ endif
+ 
+-ifdef XPM
+ # Only allow XPM for a GUI build.
+ ifeq (yes, $(GUI))
+-CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include
++
++ifndef XPM
++ifeq ($(ARCH),i386)
++XPM = xpm/x86
++endif
++ifeq ($(ARCH),i486)
++XPM = xpm/x86
++endif
++ifeq ($(ARCH),i586)
++XPM = xpm/x86
++endif
++ifeq ($(ARCH),i686)
++XPM = xpm/x86
++endif
++ifeq ($(ARCH),x86-64)
++XPM = xpm/x64
++endif
++endif
++ifdef XPM
++ifneq ($(XPM),no)
++CFLAGS += -DFEAT_XPM_W32 -I $(XPM)/include -I $(XPM)/../include
+ endif
+ endif
+ 
++endif
++
+ ifeq ($(DEBUG),yes)
+ CFLAGS += -g -fstack-check
+ DEBUG_SUFFIX=d
+@@ -460,6 +531,7 @@
+ 	$(OUTDIR)/option.o \
+ 	$(OUTDIR)/os_win32.o \
+ 	$(OUTDIR)/os_mswin.o \
++	$(OUTDIR)/winclip.o \
+ 	$(OUTDIR)/pathdef.o \
+ 	$(OUTDIR)/popupmnu.o \
+ 	$(OUTDIR)/quickfix.o \
+@@ -535,10 +607,10 @@
+ DEFINES += $(DEF_GUI)
+ OBJ += $(GUIOBJ)
+ LFLAGS += -mwindows
+-OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
++OUTDIR = gobj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+ else
+ TARGET := vim$(DEBUG_SUFFIX).exe
+-OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)
++OUTDIR = obj$(DEBUG_SUFFIX)$(MZSCHEME_SUFFIX)$(ARCH)
+ endif
+ 
+ ifdef GETTEXT
+@@ -571,8 +643,13 @@
+ endif
+ 
+ ifeq (yes, $(OLE))
+-LIB += -loleaut32 -lstdc++
++LIB += -loleaut32
+ OBJ += $(OUTDIR)/if_ole.o
++ifeq (yes, $(STATIC_STDCPLUS))
++LIB += -Wl,-Bstatic -lstdc++ -Wl,-Bdynamic
++else
++LIB += -lstdc++
++endif
+ endif
+ 
+ ifeq (yes, $(MBYTE))
+@@ -614,8 +691,12 @@
+ 	upx gvim.exe
+ 	upx vim.exe
+ 
++mpress: exes
++	mpress gvim.exe
++	mpress vim.exe
++
+ xxd/xxd.exe: xxd/xxd.c
+-	$(MAKE) -C xxd -f Make_cyg.mak CC=$(CC)
++	$(MAKE) -C xxd -f Make_ming.mak CC=$(CC)
+ 
+ GvimExt/gvimext.dll: GvimExt/gvimext.cpp GvimExt/gvimext.rc GvimExt/gvimext.h
+ 	$(MAKE) -C GvimExt -f Make_ming.mak CROSS=$(CROSS) CROSS_COMPILE=$(CROSS_COMPILE)
+@@ -633,27 +714,25 @@
+ 	-$(DEL) mzscheme_base.c
+ endif
+ 	$(MAKE) -C GvimExt -f Make_ming.mak clean
+-	$(MAKE) -C xxd -f Make_cyg.mak clean
++	$(MAKE) -C xxd -f Make_ming.mak clean
+ 
+ ###########################################################################
+ INCL = vim.h feature.h os_win32.h os_dos.h ascii.h keymap.h term.h macros.h \
+ 	structs.h regexp.h option.h ex_cmds.h proto.h globals.h farsi.h \
+ 	gui.h
+ 
+-$(OUTDIR)/if_python.o : if_python.c $(INCL)
++$(OUTDIR)/if_python.o : if_python.c if_py_both.h $(INCL)
+ 	$(CC) -c $(CFLAGS) $(PYTHONINC) -DDYNAMIC_PYTHON_DLL=\"python$(PYTHON_VER).dll\" $< -o $@
+ 
+-$(OUTDIR)/if_python3.o : if_python3.c $(INCL)
++$(OUTDIR)/if_python3.o : if_python3.c if_py_both.h $(INCL)
+ 	$(CC) -c $(CFLAGS) $(PYTHON3INC) -DDYNAMIC_PYTHON3_DLL=\"PYTHON$(PYTHON3_VER).dll\" $< -o $@
+ 
+ $(OUTDIR)/%.o : %.c $(INCL)
+ 	$(CC) -c $(CFLAGS) $< -o $@
+ 
+-$(OUTDIR)/vimres.res: vim.rc version.h gui_w32_rc.h
+-	$(WINDRES) $(DEFINES) vim.rc $(OUTDIR)/vimres.res
+-
+-$(OUTDIR)/vimrc.o: $(OUTDIR)/vimres.res
+-	$(WINDRES) $(OUTDIR)/vimres.res $(OUTDIR)/vimrc.o
++$(OUTDIR)/vimrc.o: vim.rc version.h gui_w32_rc.h
++	$(WINDRES) $(WINDRES_FLAGS) $(DEFINES) \
++	    --input-format=rc --output-format=coff -i vim.rc -o $@
+ 
+ $(OUTDIR):
+ 	$(MKDIR) $(OUTDIR)
+@@ -664,6 +743,9 @@
+ $(OUTDIR)/ex_eval.o:	ex_eval.c $(INCL) ex_cmds.h
+ 	$(CC) -c $(CFLAGS) ex_eval.c -o $(OUTDIR)/ex_eval.o
+ 
++$(OUTDIR)/gui_w32.o:	gui_w32.c gui_w48.c $(INCL)
++	$(CC) -c $(CFLAGS) gui_w32.c -o $(OUTDIR)/gui_w32.o
++
+ $(OUTDIR)/if_cscope.o:	if_cscope.c $(INCL) if_cscope.h
+ 	$(CC) -c $(CFLAGS) if_cscope.c -o $(OUTDIR)/if_cscope.o
+ 
+@@ -677,12 +759,15 @@
+ endif
+ 
+ if_perl.c: if_perl.xs typemap
+-	perl $(PERLLIB)/ExtUtils/xsubpp -prototypes -typemap \
++	$(XSUBPP) -prototypes -typemap \
+ 	     $(PERLLIB)/ExtUtils/typemap if_perl.xs > $@
+ 
+ $(OUTDIR)/netbeans.o:	netbeans.c $(INCL) $(NBDEBUG_INCL) $(NBDEBUG_SRC)
+ 	$(CC) -c $(CFLAGS) netbeans.c -o $(OUTDIR)/netbeans.o
+ 
++$(OUTDIR)/regexp.o:		regexp.c regexp_nfa.c $(INCL)
++	$(CC) -c $(CFLAGS) regexp.c -o $(OUTDIR)/regexp.o
++
+ $(OUTDIR)/if_mzsch.o:	if_mzsch.c $(INCL) if_mzsch.h $(MZ_EXTRA_DEP)
+ 	$(CC) -c $(CFLAGS) if_mzsch.c -o $(OUTDIR)/if_mzsch.o
+ 
+diff -Naur vim73.orig/src/Make_mvc.mak vim73/src/Make_mvc.mak
+--- vim73.orig/src/Make_mvc.mak	2010-07-18 19:24:20.000000000 +0000
++++ vim73/src/Make_mvc.mak	2013-06-07 17:07:29.648924014 +0000
+@@ -1,7 +1,7 @@
+ # Makefile for Vim on Win32 (Windows NT/2000/XP/2003 and Windows 95/98/Me)
+ # and Win64, using the Microsoft Visual C++ compilers. Known to work with
+ # VC5, VC6 (VS98), VC7.0 (VS2002), VC7.1 (VS2003), VC8 (VS2005),
+-# VC9 (VS2008), and VC10 (VS2010).
++# VC9 (VS2008), VC10 (VS2010) and VC11 (VS2012)
+ #
+ # To build using other Windows compilers, see INSTALLpc.txt
+ #
+@@ -15,9 +15,12 @@
+ # This will build the console version of Vim with no additional interfaces.
+ # To add features, define any of the following:
+ #
++# 	For MSVC 11 you need to specify where the Win32.mak file is, e.g.:
++# 	   SDK_INCLUDE_DIR="C:\Program Files\Microsoft SDKs\Windows\v7.1\Include"
++#
+ #	!!!!  After changing features do "nmake clean" first  !!!!
+ #
+-#       Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
++#	Feature Set: FEATURES=[TINY, SMALL, NORMAL, BIG, HUGE] (default is BIG)
+ #
+ #	GUI interface: GUI=yes (default is no)
+ #
+@@ -63,6 +66,8 @@
+ #	  RUBY_VER=[Ruby version, eg 16, 17] (default is 18)
+ #	  RUBY_VER_LONG=[Ruby version, eg 1.6, 1.7] (default is 1.8)
+ #	    You must set RUBY_VER_LONG when change RUBY_VER.
++#	    You must set RUBY_API_VER to RUBY_VER_LONG.
++#	    Don't set ruby API version to RUBY_VER like 191.
+ #
+ #	Tcl interface:
+ #	  TCL=[Path to Tcl directory]
+@@ -82,18 +87,20 @@
+ #	  GETTEXT=[yes or no]  (default is yes)
+ #	See http://sourceforge.net/projects/gettext/
+ #
+-#       PostScript printing: POSTSCRIPT=yes (default is no)
++#	PostScript printing: POSTSCRIPT=yes (default is no)
+ #
+-#       Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
++#	Netbeans Support: NETBEANS=[yes or no] (default is yes if GUI is yes)
+ #
+-#       XPM Image Support: XPM=[path to XPM directory]
++#	XPM Image Support: XPM=[path to XPM directory]
++#	Default is "xpm", using the files included in the distribution.
++#	Use "no" to disable this feature.
+ #
+-#       Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
++#	Optimization: OPTIMIZE=[SPACE, SPEED, MAXSPEED] (default is MAXSPEED)
+ #
+-#       Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
+-#       i386)
++#	Processor Version: CPUNR=[i386, i486, i586, i686, pentium4] (default is
++#	i386)
+ #
+-#       Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
++#	Version Support: WINVER=[0x0400, 0x0500] (default is 0x0400)
+ #
+ #	Debug version: DEBUG=yes
+ #	Mapfile: MAP=[no, yes or lines] (default is yes)
+@@ -101,10 +108,12 @@
+ #	  yes:   Write a normal mapfile.
+ #	  lines: Write a mapfile with line numbers (only for VC6 and later)
+ #
+-#       Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
+-#       doesn't work)
++#	Netbeans Debugging Support: NBDEBUG=[yes or no] (should be no, yes
++#	doesn't work)
++#
++#	Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
+ #
+-#       Visual C Version: MSVCVER=m.n (default derived from nmake if undefined)
++#	Static Code Analysis: ANALYZE=yes (works with VS2012 only)
+ #
+ # You can combine any of these interfaces
+ #
+@@ -209,6 +218,7 @@
+ # We're on Windows 95
+ CPU = i386
+ !endif # !PROCESSOR_ARCHITECTURE
++OBJDIR = $(OBJDIR)$(CPU)
+ 
+ # Build a retail version by default
+ 
+@@ -222,7 +232,12 @@
+ 
+ # Get all sorts of useful, standard macros from the Platform SDK.
+ 
++!ifdef SDK_INCLUDE_DIR
++!include $(SDK_INCLUDE_DIR)\Win32.mak
++!else
+ !include <Win32.mak>
++!endif
++
+ 
+ # Flag to turn on Win64 compatibility warnings for VC7.x and VC8.
+ WP64CHECK = /Wp64
+@@ -277,13 +292,23 @@
+ NETBEANS_LIB	= WSock32.lib
+ !endif
+ 
+-!ifdef XPM
++!ifndef XPM
++# XPM is not set, use the included xpm files, depending on the architecture.
++!if "$(CPU)" == "AMD64"
++XPM = xpm\x64
++!elseif "$(CPU)" == "i386"
++XPM = xpm\x86
++!else
++XPM = no
++!endif
++!endif
++!if "$(XPM)" != "no"
+ # XPM - Include support for XPM signs
+-# you can get xpm.lib from http://iamphet.nm.ru/xpm or create it yourself
++# See the xpm directory for more information.
+ XPM_OBJ   = $(OBJDIR)/xpm_w32.obj
+ XPM_DEFS  = -DFEAT_XPM_W32
+ XPM_LIB   = $(XPM)\lib\libXpm.lib
+-XPM_INC	  = -I $(XPM)\include
++XPM_INC	  = -I $(XPM)\include -I $(XPM)\..\include
+ !endif
+ !endif
+ 
+@@ -350,6 +375,10 @@
+ MSVCVER = 6.0
+ CPU = ix86
+ !endif
++!if "$(_NMAKE_VER)" == "6.00.9782.0"
++MSVCVER = 6.0
++CPU = ix86
++!endif
+ !if "$(_NMAKE_VER)" == "7.00.9466"
+ MSVCVER = 7.0
+ !endif
+@@ -380,12 +409,21 @@
+ !if "$(_NMAKE_VER)" == "10.00.30319.01"
+ MSVCVER = 10.0
+ !endif
+-!if "$(_NMAKE_VER)" == "9.00.30729.01"
+-MSVCVER = 9.0
++!if "$(_NMAKE_VER)" == "10.00.40219.01"
++MSVCVER = 10.0
++!endif
++!if "$(_NMAKE_VER)" == "11.00.50727.1"
++MSVCVER = 11.0
++!endif
++!if "$(_NMAKE_VER)" == "11.00.51106.1"
++MSVCVER = 11.0
++!endif
++!if "$(_NMAKE_VER)" == "11.00.60315.1"
++MSVCVER = 11.0
+ !endif
+ !endif
+ 
+-# Abort bulding VIM if version of VC is unrecognised.
++# Abort building VIM if version of VC is unrecognised.
+ !ifndef MSVCVER
+ !message *** ERROR
+ !message Cannot determine Visual C version being used.  If you are using the
+@@ -397,7 +435,7 @@
+ !endif
+ 
+ # Convert processor ID to MVC-compatible number
+-!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0")
++!if ("$(MSVCVER)" != "8.0") && ("$(MSVCVER)" != "9.0") && ("$(MSVCVER)" != "10.0") && ("$(MSVCVER)" != "11.0")
+ !if "$(CPUNR)" == "i386"
+ CPUARG = /G3
+ !elseif "$(CPUNR)" == "i486"
+@@ -412,8 +450,8 @@
+ CPUARG =
+ !endif
+ !else
+-# VC8/9 only allows specifying SSE architecture
+-!if "$(CPUNR)" == "pentium4"
++# VC8/9/10 only allows specifying SSE architecture but only for 32bit
++!if "$(ASSEMBLY_ARCHITECTURE)" == "x86" && "$(CPUNR)" == "pentium4"
+ CPUARG = /arch:SSE2
+ !endif
+ !endif
+@@ -431,7 +469,7 @@
+ OPTFLAG = /Ox
+ !endif
+ 
+-!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
++!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
+ # Use link time code generation if not worried about size
+ !if "$(OPTIMIZE)" != "SPACE"
+ OPTFLAG = $(OPTFLAG) /GL
+@@ -443,6 +481,11 @@
+ CFLAGS=$(CFLAGS) $(WP64CHECK)
+ !endif
+ 
++# Static code analysis generally available starting with VS2012
++!if ("$(ANALYZE)" == "yes") && ("$(MSVCVER)" == "11.0")
++CFLAGS=$(CFLAGS) /analyze
++!endif
++
+ CFLAGS = $(CFLAGS) $(OPTFLAG) -DNDEBUG $(CPUARG)
+ RCFLAGS = $(rcflags) $(rcvars) -DNDEBUG
+ ! ifdef USE_MSVCRT
+@@ -510,6 +553,7 @@
+ 	$(OUTDIR)\ops.obj \
+ 	$(OUTDIR)\option.obj \
+ 	$(OUTDIR)\os_mswin.obj \
++	$(OUTDIR)\winclip.obj \
+ 	$(OUTDIR)\os_win32.obj \
+ 	$(OUTDIR)\pathdef.obj \
+ 	$(OUTDIR)\popupmnu.obj \
+@@ -619,7 +663,7 @@
+ 		-DDYNAMIC_TCL_VER=\"$(TCL_VER_LONG)\"
+ TCL_OBJ	= $(OUTDIR)\if_tcl.obj
+ TCL_INC	= /I "$(TCL)\Include" /I "$(TCL)"
+-TCL_LIB = $(TCL)\lib\tclstub$(TCL_VER).lib
++TCL_LIB = "$(TCL)\lib\tclstub$(TCL_VER).lib"
+ !else
+ CFLAGS  = $(CFLAGS) -DFEAT_TCL
+ TCL_OBJ	= $(OUTDIR)\if_tcl.obj
+@@ -705,12 +749,18 @@
+ MZSCHEME_VER = 205_000
+ !endif
+ CFLAGS = $(CFLAGS) -DFEAT_MZSCHEME -I $(MZSCHEME)\include
+-!if EXIST("$(MZSCHEME)\collects\scheme\base.ss")
+-# for MzScheme 4.x we need to include byte code for basic Scheme stuff
++!if EXIST("$(MZSCHEME)\collects\scheme\base.ss") \
++	|| EXIST("$(MZSCHEME)\collects\scheme\base.rkt") 
++# for MzScheme >= 4 we need to include byte code for basic Scheme stuff
+ MZSCHEME_EXTRA_DEP = mzscheme_base.c
+ CFLAGS = $(CFLAGS) -DINCLUDE_MZSCHEME_BASE
+ !endif
+-!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib") \
++!if EXIST("$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib")
++MZSCHEME_MAIN_LIB=mzsch
++!else
++MZSCHEME_MAIN_LIB=racket
++!endif
++!if EXIST("$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib") \
+ 	&& !EXIST("$(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib")
+ !message Building with Precise GC
+ MZSCHEME_PRECISE_GC = yes
+@@ -722,7 +772,7 @@
+ !endif
+ !message MzScheme DLLs will be loaded dynamically
+ CFLAGS = $(CFLAGS) -DDYNAMIC_MZSCHEME \
+-		-DDYNAMIC_MZSCH_DLL=\"libmzsch$(MZSCHEME_VER).dll\" \
++		-DDYNAMIC_MZSCH_DLL=\"lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).dll\" \
+ 		-DDYNAMIC_MZGC_DLL=\"libmzgc$(MZSCHEME_VER).dll\"
+ !else
+ !if "$(MZSCHEME_DEBUG)" == "yes"
+@@ -730,13 +780,15 @@
+ !endif
+ !if "$(MZSCHEME_PRECISE_GC)" == "yes"
+ # Precise GC does not use separate dll
+-MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
++MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
+ !else
+ MZSCHEME_LIB = $(MZSCHEME)\lib\msvc\libmzgc$(MZSCHEME_VER).lib \
+-		$(MZSCHEME)\lib\msvc\libmzsch$(MZSCHEME_VER).lib
++		$(MZSCHEME)\lib\msvc\lib$(MZSCHEME_MAIN_LIB)$(MZSCHEME_VER).lib
+ !endif
+ !endif
+ MZSCHEME_OBJ = $(OUTDIR)\if_mzsch.obj
++# increase stack size
++MZSCHEME_LIB = $(MZSCHEME_LIB) /STACK:8388608
+ !endif
+ 
+ # Perl interface
+@@ -782,6 +834,11 @@
+ PERL_INC = /I $(PERL_INCDIR)
+ PERL_OBJ = $(OUTDIR)\if_perl.obj $(OUTDIR)\if_perlsfio.obj
+ XSUBPP = $(PERL)\lib\ExtUtils\xsubpp
++!if exist($(XSUBPP))
++XSUBPP = $(PERL_EXE) $(XSUBPP)
++!else
++XSUBPP = xsubpp
++!endif
+ XSUBPP_TYPEMAP = $(PERL)\lib\ExtUtils\typemap
+ 
+ !endif
+@@ -797,28 +854,31 @@
+ !ifndef RUBY_VER_LONG
+ RUBY_VER_LONG = 1.8
+ !endif
++!ifndef RUBY_API_VER
++RUBY_API_VER = $(RUBY_VER_LONG:.=)
++!endif
+ 
+ !if $(RUBY_VER) >= 18
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i386-mswin32
+ !endif
+ !ifndef RUBY_INSTALL_NAME
+-RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_VER)
++RUBY_INSTALL_NAME = msvcrt-ruby$(RUBY_API_VER)
+ !endif
+ !else
+ !ifndef RUBY_PLATFORM
+ RUBY_PLATFORM = i586-mswin32
+ !endif
+ !ifndef RUBY_INSTALL_NAME
+-RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_VER)
++RUBY_INSTALL_NAME = mswin32-ruby$(RUBY_API_VER)
+ !endif
+ !endif # $(RUBY_VER) >= 18
+ 
+ !message Ruby requested (version $(RUBY_VER)) - root dir is "$(RUBY)"
+ CFLAGS = $(CFLAGS) -DFEAT_RUBY
+ RUBY_OBJ = $(OUTDIR)\if_ruby.obj
+-!if $(RUBY_VER) >= 190
+-RUBY_INC = /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)"
++!if $(RUBY_VER) >= 19
++RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)" /I "$(RUBY)\include\ruby-$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
+ !else
+ RUBY_INC = /I "$(RUBY)\lib\ruby\$(RUBY_VER_LONG)\$(RUBY_PLATFORM)"
+ !endif
+@@ -880,7 +940,7 @@
+ 
+ # Report link time code generation progress if used. 
+ !ifdef NODEBUG
+-!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0")
++!if ("$(MSVCVER)" == "8.0") || ("$(MSVCVER)" == "9.0") || ("$(MSVCVER)" == "10.0") || ("$(MSVCVER)" == "11.0")
+ !if "$(OPTIMIZE)" != "SPACE"
+ LINKARGS1 = $(LINKARGS1) /LTCG:STATUS
+ !endif
+@@ -1038,7 +1098,7 @@
+ 	$(CC) $(CFLAGS) $(LUA_INC) if_lua.c
+ 
+ if_perl.c : if_perl.xs typemap
+-	$(PERL_EXE) $(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
++	$(XSUBPP) -prototypes -typemap $(XSUBPP_TYPEMAP) \
+ 		-typemap typemap if_perl.xs > if_perl.c
+ 
+ $(OUTDIR)/if_perl.obj: $(OUTDIR) if_perl.c  $(INCL)
+@@ -1047,16 +1107,16 @@
+ $(OUTDIR)/if_perlsfio.obj: $(OUTDIR) if_perlsfio.c  $(INCL)
+ 	$(CC) $(CFLAGS) $(PERL_INC) if_perlsfio.c
+ 
+-$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c  $(INCL) $(MZSCHEME_EXTRA_DEP)
++$(OUTDIR)/if_mzsch.obj: $(OUTDIR) if_mzsch.c if_mzsch.h $(INCL) $(MZSCHEME_EXTRA_DEP)
+ 	$(CC) $(CFLAGS) if_mzsch.c \
+ 		-DMZSCHEME_COLLECTS=\"$(MZSCHEME:\=\\)\\collects\"
+ mzscheme_base.c:
+ 	$(MZSCHEME)\mzc --c-mods mzscheme_base.c ++lib scheme/base
+ 
+-$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c  $(INCL)
++$(OUTDIR)/if_python.obj: $(OUTDIR) if_python.c if_py_both.h $(INCL)
+ 	$(CC) $(CFLAGS) $(PYTHON_INC) if_python.c
+ 
+-$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c  $(INCL)
++$(OUTDIR)/if_python3.obj: $(OUTDIR) if_python3.c if_py_both.h $(INCL)
+ 	$(CC) $(CFLAGS) $(PYTHON3_INC) if_python3.c
+ 
+ $(OUTDIR)/if_ole.obj: $(OUTDIR) if_ole.cpp  $(INCL) if_ole.h
+@@ -1100,6 +1160,8 @@
+ 
+ $(OUTDIR)/os_mswin.obj:	$(OUTDIR) os_mswin.c  $(INCL)
+ 
++$(OUTDIR)/winclip.obj:	$(OUTDIR) winclip.c  $(INCL)
++
+ $(OUTDIR)/os_win32.obj:	$(OUTDIR) os_win32.c  $(INCL) os_win32.h
+ 
+ $(OUTDIR)/os_w32exe.obj:	$(OUTDIR) os_w32exe.c  $(INCL)
+@@ -1111,7 +1173,7 @@
+ 
+ $(OUTDIR)/quickfix.obj:	$(OUTDIR) quickfix.c  $(INCL)
+ 
+-$(OUTDIR)/regexp.obj:	$(OUTDIR) regexp.c  $(INCL)
++$(OUTDIR)/regexp.obj:	$(OUTDIR) regexp.c regexp_nfa.c  $(INCL)
+ 
+ $(OUTDIR)/screen.obj:	$(OUTDIR) screen.c  $(INCL)
+ 
+@@ -1156,6 +1218,10 @@
+ E0_CFLAGS = $(CFLAGS:\=\\)
+ E_CFLAGS = $(E0_CFLAGS:"=\")
+ # ") stop the string
++# $LINKARGS2 may contain backslashes and double quotes, escape them both.
++E0_LINKARGS2 = $(LINKARGS2:\=\\)
++E_LINKARGS2 = $(E0_LINKARGS2:"=\")
++# ") stop the string
+ 
+ $(PATHDEF_SRC): auto
+ 	@echo creating $(PATHDEF_SRC)
+@@ -1164,7 +1230,7 @@
+ 	@echo char_u *default_vim_dir = (char_u *)"$(VIMRCLOC:\=\\)"; >> $(PATHDEF_SRC)
+ 	@echo char_u *default_vimruntime_dir = (char_u *)"$(VIMRUNTIMEDIR:\=\\)"; >> $(PATHDEF_SRC)
+ 	@echo char_u *all_cflags = (char_u *)"$(CC:\=\\) $(E_CFLAGS)"; >> $(PATHDEF_SRC)
+-	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(LINKARGS2:\=\\)"; >> $(PATHDEF_SRC)
++	@echo char_u *all_lflags = (char_u *)"$(link:\=\\) $(LINKARGS1:\=\\) $(E_LINKARGS2)"; >> $(PATHDEF_SRC)
+ 	@echo char_u *compiled_user = (char_u *)"$(USERNAME)"; >> $(PATHDEF_SRC)
+ 	@echo char_u *compiled_sys = (char_u *)"$(USERDOMAIN)"; >> $(PATHDEF_SRC)
+ 
+@@ -1203,6 +1269,7 @@
+ 	proto/ops.pro \
+ 	proto/option.pro \
+ 	proto/os_mswin.pro \
++	proto/winclip.pro \
+ 	proto/os_win32.pro \
+ 	proto/popupmnu.pro \
+ 	proto/quickfix.pro \
+diff -Naur vim73.orig/src/Make_ro.mak vim73/src/Make_ro.mak
+--- vim73.orig/src/Make_ro.mak	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/Make_ro.mak	1970-01-01 00:00:00.000000000 +0000
+@@ -1,135 +0,0 @@
+-#
+-# Makefile for Vim on RISC OS - Andy Wingate
+-#
+-
+-GCC         = gcc -mthrowback
+-CFLAGS     = -DRISCOS -DFEAT_GUI
+-CC         = $(GCC) $(CFLAGS) -O2
+-# -DUP_BC_PC_EXTERN for term.c needed as BC defined in termlib.c and term.c
+-
+-TERMFLAG   = -DUP_BC_PC_EXTERN
+-
+-ASMFLAGS   = -throwback -objasm -gcc
+-
+-OBJS =  o.buffer o.charset o.diff o.digraph o.edit o.eval o.ex_cmds o.ex_cmds2  \
+-	o.ex_docmd o.ex_eval o.ex_getln o.fileio o.fold o.getchar \
+-	o.hardcopy o.hashtab o.main o.mark o.mbyte  \
+-	o.memfile o.memline o.menu o.message o.misc1 o.misc2 o.move     \
+-	o.normal o.ops o.option o.popupmnu o.quickfix o.regexp o.screen \
+-	o.search   \
+-	o.spell o.syntax o.tag o.term o.termlib o.ui o.undo o.version	\
+-	o.window o.os_riscos o.swis o.gui o.gui_riscos
+-
+-Vim: $(OBJS)
+-	$(GCC) -o Vim $(OBJS)
+-
+-install: Vim
+-	squeeze -v Vim @.!Vim.Vim
+-
+-clean:	
+-	create o.!fake! 0
+-	wipe o.* ~cf
+-	remove Vim
+-
+-o.swis: s.swis
+-	as $(ASMFLAGS) -o o.swis s.swis
+-
+-# Rules for object files
+-
+-o.%:	c.%
+-	$(CC) -c $< -o $@
+-
+-o.buffer:	c.buffer
+-
+-o.charset:	c.charset
+-
+-o.digraph:	c.digraph
+-
+-o.diff:		c.diff
+-
+-o.edit:		c.edit
+-
+-o.eval:		c.eval
+-
+-o.ex_cmds:	c.ex_cmds
+-
+-o.ex_cmds2:	c.ex_cmds2
+-
+-o.ex_docmd:	c.ex_docmd
+-
+-o.ex_eval:	c.ex_eval
+-
+-o.ex_getln:	c.ex_getln
+-
+-o.fileio:	c.fileio
+-
+-o.fold:		c.fold
+-
+-o.getchar:	c.getchar
+-
+-o.hardcopy:	c.hardcopy
+-
+-o.hashtab:	c.hashtab
+-
+-o.gui:		c.gui
+-
+-o.gui_riscos:	c.gui_riscos
+-
+-o.main:		c.main
+-
+-o.mark:		c.mark
+-
+-o.mbyte:	c.mbyte
+-
+-o.memfile:	c.memfile
+-
+-o.memline:	c.memline
+-
+-o.menu:		c.menu
+-
+-o.message:	c.message
+-
+-o.misc1:	c.misc1
+-
+-o.misc2:	c.misc2
+-
+-o.move:		c.move
+-
+-o.normal:	c.normal
+-
+-o.ops:		c.ops
+-
+-o.option:	c.option
+-
+-o.os_riscos:	c.os_riscos
+-
+-o.pty:		c.pty
+-
+-o.popupmnu:	c.popupmnu
+-
+-o.quickfix:	c.quickfix
+-
+-o.regexp:	c.regexp
+-
+-o.screen:	c.screen
+-
+-o.search:	c.search
+-
+-o.spell:	c.spell
+-
+-o.syntax:	c.syntax
+-
+-o.tag:		c.tag
+-
+-o.term:		c.term
+-	$(CC) $(TERMFLAG) -c c.term -o o.term
+-
+-o.termlib:	c.termlib
+-
+-o.ui:		c.ui
+-
+-o.undo:		c.undo
+-
+-o.version:	c.version
+-
+-o.window:	c.window
+diff -Naur vim73.orig/src/Make_sas.mak vim73/src/Make_sas.mak
+--- vim73.orig/src/Make_sas.mak	2010-05-18 18:33:25.000000000 +0000
++++ vim73/src/Make_sas.mak	2013-06-07 17:07:29.692257224 +0000
+@@ -251,7 +251,7 @@
+ 
+ # generate GlobalSymbolTable, which speeds up the compile time.
+ #
+-# A preprocessing stage is used to work arounda bug in the GST generator, in
++# A preprocessing stage is used to work around a bug in the GST generator, in
+ # that it does not handle nested makefiles properly in this stage.
+ # Ignore error message for not producing any code (105).
+ $(GST): scoptions vim.h keymap.h macros.h ascii.h term.h structs.h
+@@ -283,7 +283,7 @@
+ .c.pro:
+ 	$(CC) $(CFLAGS) GPFILE=proto/$*.pro $(PROPT) $*.c
+ 
+-# dependancies
++# dependencies
+ blowfish.o:		blowfish.c
+ proto/blowfish.pro:	blowfish.c
+ buffer.o:		buffer.c
+diff -Naur vim73.orig/src/Make_vms.mms vim73/src/Make_vms.mms
+--- vim73.orig/src/Make_vms.mms	2010-07-30 15:14:10.000000000 +0000
++++ vim73/src/Make_vms.mms	2013-06-07 17:07:29.702257195 +0000
+@@ -34,7 +34,7 @@
+ # SMALL  - Few features enabled, as basic as possible
+ # NORMAL - A default selection of features enabled
+ # BIG    - Many features enabled, as rich as possible. (default)
+-# HUGE   - All possible featues enabled.
++# HUGE   - All possible features enabled.
+ # Please select one of these alternatives above.
+ MODEL = HUGE
+ 
+@@ -55,7 +55,7 @@
+ # Comment out if you want the compiler version with :ver command.
+ # NOTE: This part can make some complications if you're using some
+ # predefined symbols/flags for your compiler. If does, just leave behind
+-# the comment varialbe CCVER.
++# the comment variable CCVER.
+ CCVER = YES
+ 
+ # Uncomment if want a debug version. Resulting executable is DVIM.EXE
+diff -Naur vim73.orig/src/Make_w16.mak vim73/src/Make_w16.mak
+--- vim73.orig/src/Make_w16.mak	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/Make_w16.mak	2013-06-07 17:07:29.715590491 +0000
+@@ -4,7 +4,7 @@
+ # *************************************************************
+ # * WARNING!
+ # * This was originally produced by the IDE, but has since been
+-# * modifed to make it work properly. Adjust with care!
++# * modified to make it work properly. Adjust with care!
+ # * In particular, leave LinkerLocalOptsAtW16_gvim16dexe alone
+ # * unless you are a guru.
+ # *************************************************************
+@@ -107,6 +107,7 @@
+    $(INTDIR)\os_win16.obj\
+    $(INTDIR)\os_msdos.obj\
+    $(INTDIR)\os_mswin.obj\
++   $(INTDIR)\winclip.obj\
+    $(INTDIR)\popupmnu.obj\
+    $(INTDIR)\quickfix.obj\
+    $(INTDIR)\regexp.obj\
+diff -Naur vim73.orig/src/Makefile vim73/src/Makefile
+--- vim73.orig/src/Makefile	2010-08-15 12:56:15.000000000 +0000
++++ vim73/src/Makefile	2013-06-07 17:07:29.748923729 +0000
+@@ -29,7 +29,7 @@
+ #	- Uncomment the line "CONF_OPT_X = --without-x" if you have X11 but
+ #	  want to disable using X11 libraries.	This speeds up starting Vim,
+ #	  but the window title will not be set and the X11 selection can not
+-#	  used.
++#	  be used.
+ #	- Uncomment the line "CONF_OPT_XSMP = --disable-xsmp" if you have the
+ #	  X11 Session Management Protocol (XSMP) library (libSM) but do not
+ #	  want to use it.
+@@ -200,7 +200,7 @@
+ #Solaris 2.5 (sun4m)  cc (SC4.0)     +X11R6 +GUI (CDE)	4.6b (E) Andrew Large
+ #Solaris 2.5	      cc	     +X11 +GUI Athena	4.2  (9) Sonia Heimann
+ #Solaris 2.5	      gcc 2.5.6      +X11 Motif		5.0m (R) Ant. Colombo
+-#Solaris 2.6	      gcc 2.8.1      ncursus		5.3  (G) Larry W. Virden
++#Solaris 2.6	      gcc 2.8.1      ncurses		5.3  (G) Larry W. Virden
+ #Solaris with -lthread					5.5  (W) K. Nagano
+ #Solaris	      gcc				     (b) Riccardo
+ #SunOS 4.1.x			     +X11 -GUI		5.1b (J) Bram Moolenaar
+@@ -231,8 +231,8 @@
+ # (D)  Uncomment lines below for QNX
+ # (E)  You might want to use termlib instead of termcap, see below.
+ # (F)  See below for instructions.
+-# (G)  Using ncursus version 4.2 has reported to cause a crash.  Use the
+-#      Sun cursus library instead.
++# (G)  Using ncurses version 4.2 has reported to cause a crash.  Use the
++#      Sun curses library instead.
+ # (H)  See line for EXTRA_LIBS below.
+ # (I)  SINIX-N 5.42 and 5.43 need some EXTRA_LIBS.  Also for Reliant-Unix.
+ # (J)  If you get undefined symbols, see below for a solution.
+@@ -283,12 +283,13 @@
+ 
+ ######################## auto/config.mk ######################## {{{1
+ # At this position auto/config.mk is included. When starting from the
+-# distribution it is almost empty. After running auto/configure it contains
+-# settings that have been discovered for your system. Settings below this
+-# include override settings in auto/config.mk!
+-
+-# Note: if auto/config.mk is lost somehow (e.g., because configure was
+-# interrupted), create an empty auto/config.mk file and do "make config".
++# toplevel Makefile it is almost empty. After running auto/configure it
++# contains settings that have been discovered for your system. Settings below
++# this include override settings in auto/config.mk!
++
++# Note: If make fails because auto/config.mk does not exist (it is not
++# included in the repository), do:
++#    cp config.mk.dist auto/config.mk
+ 
+ # (X) How to include auto/config.mk depends on the version of "make" you have,
+ #     if the current choice doesn't work, try the other one.
+@@ -388,6 +389,11 @@
+ #CONF_OPT_PLTHOME  = --with-plthome=/usr/local/drscheme
+ #CONF_OPT_PLTHOME  = --with-plthome=/home/me/mz
+ 
++# Uncomment the next line to fail if one of the requested language interfaces
++# cannot be configured.  Without this Vim will be build anyway, without
++# the failing interfaces.
++#CONF_OPT_FAIL = --enable-fail-if-missing
++
+ # PERL
+ # Uncomment one of these when you want to include the Perl interface.
+ # First one is for static linking, second one for dynamic loading.
+@@ -396,7 +402,7 @@
+ # to the command line.	If you see strange flags during compilation, check in
+ # auto/config.mk where they come from.  If it's PERL_CFLAGS, try commenting
+ # the next line.
+-# When you get an error for a missing "perl.exp" file, try creating an emtpy
++# When you get an error for a missing "perl.exp" file, try creating an empty
+ # one: "touch perl.exp".
+ # This requires at least "small" features, "tiny" doesn't work.
+ #CONF_OPT_PERL = --enable-perlinterp
+@@ -414,12 +420,16 @@
+ # However, this may still cause problems, such as "import termios" failing.
+ # Build two separate versions of Vim in that case.
+ #CONF_OPT_PYTHON = --enable-pythoninterp
++#CONF_OPT_PYTHON = --enable-pythoninterp=dynamic
+ #CONF_OPT_PYTHON3 = --enable-python3interp
++#CONF_OPT_PYTHON3 = --enable-python3interp=dynamic
+ 
+ # RUBY
+ # Uncomment this when you want to include the Ruby interface.
++# First one for static linking, second one for loading when used.
+ # Note: you need the development package (e.g., ruby1.9.1-dev on Ubuntu).
+ #CONF_OPT_RUBY = --enable-rubyinterp
++#CONF_OPT_RUBY = --enable-rubyinterp=dynamic
+ #CONF_OPT_RUBY = --enable-rubyinterp --with-ruby-command=ruby1.9.1
+ 
+ # TCL
+@@ -444,7 +454,7 @@
+ 
+ # MULTIBYTE - To edit multi-byte characters.
+ # Uncomment this when you want to edit a multibyte language.
+-# It's automatically enabled with big features or IME support.
++# It's automatically enabled with normal features, GTK or IME support.
+ # Note: Compile on a machine where setlocale() actually works, otherwise the
+ # configure tests may fail.
+ #CONF_OPT_MULTIBYTE = --enable-multibyte
+@@ -556,8 +566,8 @@
+ #CFLAGS = -g -O2 '-DSTARTUPTIME="vimstartup"' -fno-strength-reduce -Wall -Wmissing-prototypes
+ 
+ # Use this with GCC to check for mistakes, unused arguments, etc.
+-#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -D_FORTIFY_SOURCE=1 -DU_DEBUG
+-#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -D_FORTIFY_SOURCE=1 -DU_DEBUG
++#CFLAGS = -g -Wall -Wextra -Wmissing-prototypes -Wunreachable-code -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1
++#CFLAGS = -g -O2 -Wall -Wextra -Wmissing-prototypes -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1 -DU_DEBUG
+ #PYTHON_CFLAGS_EXTRA = -Wno-missing-field-initializers
+ #MZSCHEME_CFLAGS_EXTRA = -Wno-unreachable-code -Wno-unused-parameter
+ 
+@@ -589,8 +599,9 @@
+ 
+ # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
+ # Might not work with GUI or Perl.
+-# For unknown reasons adding "-lc" fixes a linking problem with GCC.  That's
+-# probably a bug in the "-pg" implementation.
++# For unknown reasons adding "-lc" fixes a linking problem with some versions
++# of GCC.  That's probably a bug in the "-pg" implementation.
++# After running Vim see the profile result with: gprof vim gmon.out | vim -
+ # Need to recompile everything after changing this: "make clean" "make".
+ #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING
+ #PROFILE_LIBS = -pg
+@@ -601,8 +612,8 @@
+ # Configuration is in the .ccmalloc or ~/.ccmalloc file.
+ # Doesn't work very well, since memory linked to from global variables
+ # (in libraries) is also marked as leaked memory.
+-#PROFILE_CFLAGS = -DEXITFREE
+-#PROFILE_LIBS = -lccmalloc
++#LEAK_CFLAGS = -DEXITFREE
++#LEAK_LIBS = -lccmalloc
+ 
+ #####################################################
+ ###  Specific systems, check if yours is listed!  ### {{{
+@@ -724,12 +735,6 @@
+ ### USL for Unix Systems Laboratories (SYSV 4.2)
+ #EXTRA_DEFS = -DUSL
+ 
+-### RISCos on MIPS without X11
+-#EXTRA_DEFS = -DMIPS
+-
+-### RISCos on MIPS with X11
+-#EXTRA_LIBS = -lsun
+-
+ ### (6)  A/UX 3.1.1 with gcc (Jim Jagielski)
+ #CC= gcc -D_POSIX_SOURCE
+ #CFLAGS= -O2
+@@ -870,6 +875,10 @@
+ #CFLAGS = -O -Qtarget=m88110compat
+ #EXTRA_LIBS = -lgen
+ 
++# The value of QUOTESED comes from auto/config.mk.
++# Uncomment the next line to use the default value.
++# QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
++
+ ##################### end of system specific lines ################### }}}
+ 
+ ### Names of the programs and targets  {{{1
+@@ -1047,8 +1056,9 @@
+ INSTALL_DATA	= cp
+ INSTALL_DATA_R	= cp -r
+ 
+-### Program to run on installed binary
++### Program to run on installed binary.  Use the second one to disable strip.
+ #STRIP = strip
++#STRIP = /bin/true
+ 
+ ### Permissions for binaries  {{{1
+ BINMOD = 755
+@@ -1284,7 +1294,7 @@
+ ### prototype headers are ignored due to -DPROTO, system
+ ### headers #include <...> are ignored if we use the -MM option, as
+ ### e.g. provided by gcc-cpp.
+-### Include FEAT_GUI to get gependency on gui.h
++### Include FEAT_GUI to get dependency on gui.h
+ ### Need to change "-I /<path>" to "-isystem /<path>" for GCC 3.x.
+ CPP_DEPEND = $(CC) -I$(srcdir) -M$(CPP_MM) \
+ 		`echo "$(DEPEND_CFLAGS)" $(DEPEND_CFLAGS_FILTER)`
+@@ -1321,20 +1331,22 @@
+ .SUFFIXES: .c .o .pro
+ 
+ PRE_DEFS = -Iproto $(DEFS) $(GUI_DEFS) $(GUI_IPATH) $(CPPFLAGS) $(EXTRA_IPATHS)
+-POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(RUBY_CFLAGS) $(EXTRA_DEFS)
++POST_DEFS = $(X_CFLAGS) $(MZSCHEME_CFLAGS) $(TCL_CFLAGS) $(EXTRA_DEFS)
+ 
+-ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(POST_DEFS)
++ALL_CFLAGS = $(PRE_DEFS) $(CFLAGS) $(PROFILE_CFLAGS) $(LEAK_CFLAGS) $(POST_DEFS)
+ 
+ # Exclude $CFLAGS for osdef.sh, for Mac 10.4 some flags don't work together
+ # with "-E".
+ OSDEF_CFLAGS = $(PRE_DEFS) $(POST_DEFS)
+ 
+-LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
++LINT_CFLAGS = -DLINT -I. $(PRE_DEFS) $(POST_DEFS) $(RUBY_CFLAGS) $(LUA_CFLAGS) $(PERL_CFLAGS) $(PYTHON_CFLAGS) $(PYTHON3_CFLAGS) -Dinline= -D__extension__= -Dalloca=alloca
+ 
+ LINT_EXTRA = -DUSE_SNIFF -DHANGUL_INPUT -D"__attribute__(x)="
+ 
+ DEPEND_CFLAGS = -DPROTO -DDEPEND -DFEAT_GUI $(LINT_CFLAGS)
+ 
++# Note: MZSCHEME_LIBS must come before LIBS, because LIBS adds -lm which is
++# needed by racket.
+ ALL_LIB_DIRS = $(GUI_LIBS_DIR) $(X_LIBS_DIR)
+ ALL_LIBS = \
+ 	   $(GUI_LIBS1) \
+@@ -1343,16 +1355,17 @@
+ 	   $(X_PRE_LIBS) \
+ 	   $(X_LIBS) \
+ 	   $(X_EXTRA_LIBS) \
++	   $(MZSCHEME_LIBS) \
+ 	   $(LIBS) \
+ 	   $(EXTRA_LIBS) \
+ 	   $(LUA_LIBS) \
+-	   $(MZSCHEME_LIBS) \
+ 	   $(PERL_LIBS) \
+ 	   $(PYTHON_LIBS) \
+ 	   $(PYTHON3_LIBS) \
+ 	   $(TCL_LIBS) \
+ 	   $(RUBY_LIBS) \
+-	   $(PROFILE_LIBS)
++	   $(PROFILE_LIBS) \
++	   $(LEAK_LIBS)
+ 
+ # abbreviations
+ DEST_BIN = $(DESTDIR)$(BINDIR)
+@@ -1474,8 +1487,15 @@
+ 	    if_python.c if_python3.c if_tcl.c if_ruby.c if_sniff.c \
+ 	    gui_beval.c workshop.c wsdebug.c integration.c netbeans.c
+ 
++# Unittest files
++MEMFILE_TEST_SRC = memfile_test.c
++MEMFILE_TEST_TARGET = memfile_test$(EXEEXT)
++
++UNITTEST_SRC = $(MEMFILE_TEST_SRC)
++UNITTEST_TARGETS = $(MEMFILE_TEST_TARGET)
++
+ # All sources, also the ones that are not configured
+-ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(EXTRA_SRC)
++ALL_SRC = $(BASIC_SRC) $(ALL_GUI_SRC) $(UNITTEST_SRC) $(EXTRA_SRC)
+ 
+ # Which files to check with lint.  Select one of these three lines.  ALL_SRC
+ # checks more, but may not work well for checking a GUI that wasn't configured.
+@@ -1486,7 +1506,7 @@
+ #LINT_SRC = $(ALL_SRC)
+ #LINT_SRC = $(BASIC_SRC)
+ 
+-OBJ = \
++OBJ_COMMON = \
+ 	objects/buffer.o \
+ 	objects/blowfish.o \
+ 	objects/charset.o \
+@@ -1507,10 +1527,8 @@
+ 	$(HANGULIN_OBJ) \
+ 	objects/if_cscope.o \
+ 	objects/if_xcmdsrv.o \
+-	objects/main.o \
+ 	objects/mark.o \
+-	objects/memfile.o \
+-	objects/memline.o \
++        objects/memline.o \
+ 	objects/menu.o \
+ 	objects/message.o \
+ 	objects/misc1.o \
+@@ -1535,6 +1553,7 @@
+ 	objects/term.o \
+ 	objects/ui.o \
+ 	objects/undo.o \
++	objects/version.o \
+ 	objects/window.o \
+ 	$(GUI_OBJ) \
+ 	$(LUA_OBJ) \
+@@ -1549,6 +1568,13 @@
+ 	$(NETBEANS_OBJ) \
+ 	$(WSDEBUG_OBJ)
+ 
++OBJ = $(OBJ_COMMON) \
++	objects/main.o \
++	objects/memfile.o
++
++MEMFILE_TEST_OBJ = $(OBJ_COMMON) \
++        objects/memfile_test.o
++
+ PRO_AUTO = \
+ 	blowfish.pro \
+ 	buffer.pro \
+@@ -1612,7 +1638,7 @@
+ RSRC_DIR = os_mac_rsrc
+ 
+ PRO_MANUAL = os_amiga.pro os_msdos.pro os_win16.pro os_win32.pro \
+-	os_mswin.pro os_beos.pro os_vms.pro os_riscos.pro $(PERL_PRO)
++	os_mswin.pro winclip.pro os_beos.pro os_vms.pro $(PERL_PRO)
+ 
+ # Default target is making the executable and tools
+ all: $(VIMTARGET) $(TOOLS) languages $(GUI_BUNDLE)
+@@ -1633,7 +1659,8 @@
+ 		CC="$(CC)" CPPFLAGS="$(CPPFLAGS)" CFLAGS="$(CFLAGS)" \
+ 		LDFLAGS="$(LDFLAGS)" $(CONF_SHELL) srcdir="$(srcdir)" \
+ 		./configure $(CONF_OPT_GUI) $(CONF_OPT_X) $(CONF_OPT_XSMP) \
+-		$(CONF_OPT_DARWIN) $(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
++		$(CONF_OPT_DARWIN) $(CONF_OPT_FAIL) \
++		$(CONF_OPT_PERL) $(CONF_OPT_PYTHON) $(CONF_OPT_PYTHON3) \
+ 		$(CONF_OPT_TCL) $(CONF_OPT_RUBY) $(CONF_OPT_NLS) \
+ 		$(CONF_OPT_CSCOPE) $(CONF_OPT_MULTIBYTE) $(CONF_OPT_INPUT) \
+ 		$(CONF_OPT_OUTPUT) $(CONF_OPT_GPM) $(CONF_OPT_WORKSHOP) \
+@@ -1690,15 +1717,16 @@
+ 
+ 
+ # Link the target for normal use or debugging.
+-# A shell script is used to try linking without unneccesary libraries.
++# A shell script is used to try linking without unnecessary libraries.
+ $(VIMTARGET): auto/config.mk objects $(OBJ) version.c version.h
+ 	$(CCC) version.c -o objects/version.o
+ 	@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
+-		-o $(VIMTARGET) $(OBJ) objects/version.o $(ALL_LIBS)" \
+-		MAKE="$(MAKE)" sh $(srcdir)/link.sh
++		-o $(VIMTARGET) $(OBJ) $(ALL_LIBS)" \
++		MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
++		sh $(srcdir)/link.sh
+ 
+ xxd/xxd$(EXEEXT): xxd/xxd.c
+-	cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" \
++	cd xxd; CC="$(CC)" CFLAGS="$(CPPFLAGS) $(CFLAGS)" LDFLAGS="$(LDFLAGS)" \
+ 		$(MAKE) -f Makefile
+ 
+ # Build the language specific files if they were unpacked.
+@@ -1727,10 +1755,11 @@
+ # Filter out arguments that cproto doesn't support.
+ # Don't pass "-pthread" to cproto, it sees it as a list of individual flags.
+ # Don't pass "-fstack-protector" to cproto, for the same reason.
++# Don't pass "-g" to cproto.
+ # The -E"gcc -E" argument must be separate to avoid problems with shell
+ # quoting.
+ CPROTO = cproto $(PROTO_FLAGS) -DPROTO \
+-	 `echo '$(LINT_CFLAGS)' | sed -e 's/-pthread//g' -e 's/-fstack-protector//g'`
++	 `echo '$(LINT_CFLAGS)' | sed -e 's/-pthread//g' -e 's/-fstack-protector//g' -e 's/\ -g\ / /g'`
+ 
+ ### Would be nice if this would work for "normal" make.
+ ### Currently it only works for (Free)BSD make.
+@@ -1763,6 +1792,10 @@
+ 	$(CPROTO) -DWIN16 -DWIN32 -UHAVE_CONFIG_H $< > proto/$@
+ 	echo "/* vim: set ft=c : */" >> proto/$@
+ 
++winclip.pro: winclip.c
++	$(CPROTO) -DWIN16 -DWIN32 -UHAVE_CONFIG_H $< > proto/$@
++	echo "/* vim: set ft=c : */" >> proto/$@
++
+ os_beos.pro: os_beos.c
+ 	$(CPROTO) -D__BEOS__ -UHAVE_CONFIG_H $< > proto/$@
+ 	echo "/* vim: set ft=c : */" >> proto/$@
+@@ -1804,8 +1837,8 @@
+ #
+ # This will produce a lot of garbage on your screen, including a few error
+ # messages.  Don't worry about that.
+-# If there is a real error, there will be a difference between "test.out" and
+-# a "test99.ok" file.
++# If there is a real error, there will be a difference between "testXX.out" and
++# a "testXX.ok" file.
+ # If everything is alright, the final message will be "ALL DONE".  If not you
+ # get "TEST FAILURE".
+ #
+@@ -1818,6 +1851,28 @@
+ 		ln -s $(VIMTARGET) vim; \
+ 	fi
+ 	cd testdir; $(MAKE) -f Makefile $(GUI_TESTTARGET) VIMPROG=../$(VIMTARGET) $(GUI_TESTARG)
++	$(MAKE) -f Makefile unittest
++
++unittesttargets:
++	$(MAKE) -f Makefile $(UNITTEST_TARGETS)
++
++unittest unittests: $(UNITTEST_TARGETS)
++	@for t in $(UNITTEST_TARGETS); do \
++		./$$t || exit 1; echo $$t passed; \
++	done
++
++# Run individual test, assuming that Vim was already compiled.
++test1 test2 test3 test4 test5 test6 test7 test8 test9 test10 \
++	test11 test12 test13 test14 test15 test16 test17 test18 test19 \
++	test21 test22 test23 test24 test25 test26 test27 test28 test29 \
++	test31 test32 test33 test34 test35 test36 test37 test38 test39 \
++	test41 test42 test43 test44 test45 test46 test47 test48 test49 \
++	test51 test52 test53 test54 test55 test56 test57 test58 test59 \
++	test61 test62 test63 test64 test65 test66 test67 test68 test69 \
++	test71 test72 test73 test74 test75 test76 test77 test78 test79 \
++	test81 test82 test83 test84 test85 test86 test87 test88 test89 \
++	test91 test92 test93 test94 test95 test96 test97 test98 test99:
++	cd testdir; rm $@.out; $(MAKE) -f Makefile $@.out VIMPROG=../$(VIMTARGET)
+ 
+ testclean:
+ 	cd testdir; $(MAKE) -f Makefile clean
+@@ -1825,6 +1880,17 @@
+ 		cd $(PODIR); $(MAKE) checkclean; \
+ 	fi
+ 
++# Unittests
++# It's build just like Vim to satisfy all dependencies.
++$(MEMFILE_TEST_TARGET): auto/config.mk objects $(MEMFILE_TEST_OBJ)
++	$(CCC) version.c -o objects/version.o
++	@LINK="$(PURIFY) $(SHRPENV) $(CClink) $(ALL_LIB_DIRS) $(LDFLAGS) \
++		-o $(MEMFILE_TEST_TARGET) $(MEMFILE_TEST_OBJ) $(ALL_LIBS)" \
++		MAKE="$(MAKE)" LINK_AS_NEEDED=$(LINK_AS_NEEDED) \
++		sh $(srcdir)/link.sh
++
++# install targets
++
+ install: $(GUI_INSTALL)
+ 
+ install_normal: installvim installtools $(INSTALL_LANGS) install-icons
+@@ -2258,6 +2324,7 @@
+ 	-rm -f *.o objects/* core $(VIMTARGET).core $(VIMTARGET) vim xxd/*.o
+ 	-rm -f $(TOOLS) auto/osdef.h auto/pathdef.c auto/if_perl.c
+ 	-rm -f conftest* *~ auto/link.sed
++	-rm -f $(UNITTEST_TARGETS)
+ 	-rm -f runtime pixmaps
+ 	-rm -rf $(APPDIR)
+ 	-rm -rf mzscheme_base.c
+@@ -2291,6 +2358,7 @@
+ 				 ../../testdir/vimrc.unix \
+ 				 ../../testdir/*.in \
+ 				 ../../testdir/*.vim \
++				 ../../testdir/test83-tags? \
+ 				 ../../testdir/*.ok .
+ 
+ # Link needed for doing "make install" in a shadow directory.
+@@ -2367,7 +2435,6 @@
+ auto/osdef.h: auto/config.h osdef.sh osdef1.h.in osdef2.h.in
+ 	CC="$(CC) $(OSDEF_CFLAGS)" srcdir=$(srcdir) sh $(srcdir)/osdef.sh
+ 
+-QUOTESED = sed -e 's/[\\"]/\\&/g' -e 's/\\"/"/' -e 's/\\";$$/";/'
+ auto/pathdef.c: Makefile auto/config.mk
+ 	-@echo creating $@
+ 	-@echo '/* pathdef.c */' > $@
+@@ -2512,19 +2579,11 @@
+ objects/if_perlsfio.o: if_perlsfio.c
+ 	$(CCC) $(PERL_CFLAGS) -o $@ if_perlsfio.c
+ 
+-objects/py_config.o: $(PYTHON_CONFDIR)/config.c
+-	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/config.c \
+-		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
+-
+ objects/py_getpath.o: $(PYTHON_CONFDIR)/getpath.c
+ 	$(CCC) $(PYTHON_CFLAGS) -o $@ $(PYTHON_CONFDIR)/getpath.c \
+ 		-I$(PYTHON_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN \
+ 		$(PYTHON_GETPATH_CFLAGS)
+ 
+-objects/py3_config.o: $(PYTHON3_CONFDIR)/config.c
+-	$(CCC) $(PYTHON3_CFLAGS) -o $@ $(PYTHON3_CONFDIR)/config.c \
+-		-I$(PYTHON3_CONFDIR) -DHAVE_CONFIG_H -DNO_MAIN
+-
+ objects/if_python.o: if_python.c if_py_both.h
+ 	$(CCC) $(PYTHON_CFLAGS) $(PYTHON_CFLAGS_EXTRA) -o $@ if_python.c
+ 
+@@ -2532,7 +2591,7 @@
+ 	$(CCC) $(PYTHON3_CFLAGS) $(PYTHON3_CFLAGS_EXTRA) -o $@ if_python3.c
+ 
+ objects/if_ruby.o: if_ruby.c
+-	$(CCC) -o $@ if_ruby.c
++	$(CCC) $(RUBY_CFLAGS) -o $@ if_ruby.c
+ 
+ objects/if_sniff.o: if_sniff.c
+ 	$(CCC) -o $@ if_sniff.c
+@@ -2552,6 +2611,9 @@
+ objects/memfile.o: memfile.c
+ 	$(CCC) -o $@ memfile.c
+ 
++objects/memfile_test.o: memfile_test.c
++	$(CCC) -o $@ memfile_test.c
++
+ objects/memline.o: memline.c
+ 	$(CCC) -o $@ memline.c
+ 
+@@ -2597,6 +2659,12 @@
+ objects/os_unix.o: os_unix.c
+ 	$(CCC) -o $@ os_unix.c
+ 
++objects/os_mswin.o: os_mswin.c
++	$(CCC) -o $@ os_mswin.c
++
++objects/winclip.o: winclip.c
++	$(CCC) -o $@ winclip.c
++
+ objects/pathdef.o: auto/pathdef.c
+ 	$(CCC) -o $@ auto/pathdef.c
+ 
+@@ -2609,7 +2677,7 @@
+ objects/quickfix.o: quickfix.c
+ 	$(CCC) -o $@ quickfix.c
+ 
+-objects/regexp.o: regexp.c
++objects/regexp.o: regexp.c regexp_nfa.c
+ 	$(CCC) -o $@ regexp.c
+ 
+ objects/screen.o: screen.c
+@@ -2724,9 +2792,9 @@
+ 	mv gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
+ 
+ # po/Make_osx.pl says something about generating a Mac message file
+-# for Ukrananian.  Would somebody using Mac OS X in Ukranian
++# for Ukrainian.  Would somebody using Mac OS X in Ukrainian
+ # *really* be upset that Carbon Vim was not localised in
+-# Ukranian?
++# Ukrainian?
+ #
+ #bundle-language: bundle-dir po/Make_osx.pl
+ #	cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
+@@ -2870,7 +2938,7 @@
+ objects/os_unix.o: os_unix.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+- arabic.h if_mzsch.h os_unixx.h
++ arabic.h os_unixx.h
+ objects/pathdef.o: auto/pathdef.c vim.h auto/config.h feature.h os_unix.h \
+  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+@@ -2883,10 +2951,10 @@
+  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+  globals.h farsi.h arabic.h
+-objects/regexp.o: regexp.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+- ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+- gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+- arabic.h
++objects/regexp.o: regexp.c regexp_nfa.c vim.h auto/config.h feature.h os_unix.h \
++ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
++ regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
++ globals.h farsi.h arabic.h
+ objects/screen.o: screen.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+@@ -2925,6 +2993,10 @@
+  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+  arabic.h version.h
++objects/winclip.o: winclip.c vimio.h vim.h auto/config.h feature.h os_unix.h \
++ auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
++ regexp.h gui.h ex_cmds.h proto.h globals.h farsi.h arabic.h \
++ proto/winclip.pro
+ objects/window.o: window.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
+  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+@@ -3009,6 +3081,10 @@
+ objects/pty.o: pty.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h ascii.h \
+  keymap.h term.h macros.h option.h structs.h regexp.h gui.h gui_beval.h \
+  proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h arabic.h
++objects/memfile_test.o: memfile_test.c main.c vim.h auto/config.h feature.h \
++ os_unix.h auto/osdef.h ascii.h keymap.h term.h macros.h option.h \
++ structs.h regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h \
++ proto.h globals.h farsi.h arabic.h farsi.c arabic.c memfile.c
+ objects/hangulin.o: hangulin.c vim.h auto/config.h feature.h os_unix.h \
+  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+@@ -3020,7 +3096,7 @@
+ objects/if_mzsch.o: if_mzsch.c vim.h auto/config.h feature.h os_unix.h \
+  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+- globals.h farsi.h arabic.h if_mzsch.h mzscheme_base.c
++ globals.h farsi.h arabic.h if_mzsch.h
+ objects/if_perl.o: auto/if_perl.c vim.h auto/config.h feature.h os_unix.h \
+  auto/osdef.h ascii.h keymap.h term.h macros.h option.h structs.h \
+  regexp.h gui.h gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h \
+@@ -3041,7 +3117,7 @@
+  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+  arabic.h
+-objects/if_ruby.o: if_ruby.c vim.h auto/config.h feature.h os_unix.h auto/osdef.h \
++objects/if_ruby.o: if_ruby.c auto/config.h vim.h feature.h os_unix.h auto/osdef.h \
+  ascii.h keymap.h term.h macros.h option.h structs.h regexp.h gui.h \
+  gui_beval.h proto/gui_beval.pro ex_cmds.h proto.h globals.h farsi.h \
+  arabic.h version.h
+diff -Naur vim73.orig/src/VisVim/Commands.cpp vim73/src/VisVim/Commands.cpp
+--- vim73.orig/src/VisVim/Commands.cpp	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/VisVim/Commands.cpp	2013-06-07 17:07:29.788923614 +0000
+@@ -549,7 +549,7 @@
+ 	if (g_bNewTabs)
+ 	{
+ 		sprintf(VimCmd, ":tab drop ");
+-		s = VimCmd + 11;
++		s = VimCmd + 10;
+ 	}
+ 	else
+ 	{
+@@ -557,8 +557,7 @@
+ 		s = VimCmd + 6;
+ 	}
+ 	sprintf(FileNameTmp, "%S", (char *)FileName);
+-	for (p = FileNameTmp; *p != '\0' && s < FileNameTmp + MAX_OLE_STR - 4;
+-									  ++p)
++	for (p = FileNameTmp; *p != '\0' && s < VimCmd + MAX_OLE_STR - 4; ++p)
+ 		if (*p == '\\')
+ 			*s++ = '/';
+ 		else
+diff -Naur vim73.orig/src/VisVim/OleAut.cpp vim73/src/VisVim/OleAut.cpp
+--- vim73.orig/src/VisVim/OleAut.cpp	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/VisVim/OleAut.cpp	2013-06-07 17:07:29.825590176 +0000
+@@ -654,7 +654,7 @@
+ 	}
+ 
+ 	char Buf[256];
+-	sprintf (Buf, "An OLE error occured:\r\nCode = %s\r\nResult = %lx.",
++	sprintf (Buf, "An OLE error occurred:\r\nCode = %s\r\nResult = %lx.",
+ 		 (char*) ErrName, m_hResult);
+ 	MessageBox (NULL, Buf, "OLE Error", MB_OK);
+ }
+diff -Naur vim73.orig/src/VisVim/README_VisVim.txt vim73/src/VisVim/README_VisVim.txt
+--- vim73.orig/src/VisVim/README_VisVim.txt	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/VisVim/README_VisVim.txt	2013-06-07 17:07:29.845590119 +0000
+@@ -17,12 +17,16 @@
+ VisVim is based upon VisEmacs by Christopher Payne
+ (Copyright (C) Christopher Payne 1997).
+ 
+-Author: Heiko Erhardt <Heiko.Erhardt@munich.netsurf.de>
++Author: Heiko Erhardt <heiko.erhardt@gmx.net>
+ Based upon: VisEmacs by Christopher Payne <payneca@sagian.com>
+ Version: 1.0
+ Created: 23 Oct 1997
+ Date: 23 Oct 1997
+ 
++VisVim was originally GNU GPL licensed, as stated below.  On March 21 2012
++Heiko Erhardt declared this work to be relicensed under the Vim license, as
++stated in ../../runtime/doc/uganda.txt (or ":help uganda" in Vim).
++
+ VisVim is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+@@ -216,7 +220,7 @@
+ 		 2. Close Visual Studio.
+ 		 3. Delete VisVim.dll or move it somewhere it can't be found.
+ 		 4. Run Visual Studio.
+-		 5. Tools -> Cursomize ->Add-ins and Macro-Files.
++		 5. Tools -> Customize ->Add-ins and Macro-Files.
+ 		 6. A message appears:
+ 		    ".../VisVim.dll" "This add-in no longer exists.  It will
+ 		    no longer be displayed."
+@@ -294,7 +298,7 @@
+ P8  Execute :tag command in Vim for word under cursor in DevStudio
+ 
+ P7  Controlling the Visual Studio Debugger from inside Vim
+-    See message above. Also a 'Debug' highligh group and a
++    See message above. Also a 'Debug' highlight group and a
+     command to highlight a certain line would be necessary.
+ 
+ P6  Provide an option to open the current file in VisVim in
+@@ -318,5 +322,5 @@
+ Have fun!
+ 
+ Heiko Erhardt
+-Heiko.Erhardt@munich.netsurf.de
++heiko.erhardt@gmx.net
+ 
+diff -Naur vim73.orig/src/arabic.c vim73/src/arabic.c
+--- vim73.orig/src/arabic.c	2010-05-15 11:04:09.000000000 +0000
++++ vim73/src/arabic.c	2013-06-07 17:07:30.052256196 +0000
+@@ -1066,7 +1066,7 @@
+ 
+     if (curr_c != c && ccp != NULL)
+     {
+-	char_u buf[MB_MAXBYTES];
++	char_u buf[MB_MAXBYTES + 1];
+ 
+ 	/* Update the first byte of the character. */
+ 	(*mb_char2bytes)(curr_c, buf);
+diff -Naur vim73.orig/src/ascii.h vim73/src/ascii.h
+--- vim73.orig/src/ascii.h	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/ascii.h	2013-06-07 17:07:30.078922786 +0000
+@@ -123,7 +123,7 @@
+ #define DCS		0x90	/* Device Control String */
+ #define STERM		0x9c	/* String Terminator */
+ 
+-#define POUND		'£'
++#define POUND		0xB1
+ 
+ #define CTRL_F_STR	"\056"
+ #define CTRL_H_STR	"\026"
+@@ -183,11 +183,6 @@
+ # define PATHSEP	psepc
+ # define PATHSEPSTR	pseps
+ #else
+-# ifdef RISCOS
+-#  define PATHSEP	'.'
+-#  define PATHSEPSTR	"."
+-# else
+-#  define PATHSEP	'/'
+-#  define PATHSEPSTR	"/"
+-# endif
++# define PATHSEP	'/'
++# define PATHSEPSTR	"/"
+ #endif
+diff -Naur vim73.orig/src/auto/config.mk vim73/src/auto/config.mk
+--- vim73.orig/src/auto/config.mk	2010-08-15 13:02:25.000000000 +0000
++++ vim73/src/auto/config.mk	1970-01-01 00:00:00.000000000 +0000
+@@ -1,5 +0,0 @@
+-the first targets to make vim are: scratch config myself
+-srcdir = .
+-VIMNAME = vim
+-EXNAME = ex
+-VIEWNAME = view
+diff -Naur vim73.orig/src/auto/configure vim73/src/auto/configure
+--- vim73.orig/src/auto/configure	2010-08-13 14:17:15.000000000 +0000
++++ vim73/src/auto/configure	2013-06-07 17:07:30.145589262 +0000
+@@ -593,6 +593,7 @@
+ 
+ ac_subst_vars='LTLIBOBJS
+ LIBOBJS
++LINK_AS_NEEDED
+ DEPEND_CFLAGS_FILTER
+ MAKEMO
+ MSGFMT
+@@ -740,6 +741,7 @@
+ ac_subst_files=''
+ ac_user_opts='
+ enable_option_checking
++enable_fail_if_missing
+ enable_darwin
+ with_mac_arch
+ with_developer_dir
+@@ -1417,6 +1419,8 @@
+   --disable-option-checking  ignore unrecognized --enable/--with options
+   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
++  --enable-fail-if-missing    Fail if dependencies on additional features
++     specified on the command line are missing.
+   --disable-darwin        Disable Darwin (Mac OS X) support.
+   --disable-selinux	  Don't check for SELinux support.
+   --disable-xsmp          Disable XSMP session management
+@@ -1427,7 +1431,7 @@
+   --enable-pythoninterp=OPTS   Include Python interpreter. default=no OPTS=no/yes/dynamic
+   --enable-python3interp=OPTS   Include Python3 interpreter. default=no OPTS=no/yes/dynamic
+   --enable-tclinterp      Include Tcl interpreter.
+-  --enable-rubyinterp     Include Ruby interpreter.
++  --enable-rubyinterp=OPTS     Include Ruby interpreter.  default=no OPTS=no/yes/dynamic
+   --enable-cscope         Include cscope interface.
+   --enable-workshop       Include Sun Visual Workshop support.
+   --disable-netbeans      Disable NetBeans integration support.
+@@ -3948,6 +3952,19 @@
+ fi
+ 
+ 
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking --enable-fail-if-missing argument" >&5
++$as_echo_n "checking --enable-fail-if-missing argument... " >&6; }
++# Check whether --enable-fail_if_missing was given.
++if test "${enable_fail_if_missing+set}" = set; then :
++  enableval=$enable_fail_if_missing; fail_if_missing="yes"
++else
++  fail_if_missing="no"
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $fail_if_missing" >&5
++$as_echo "$fail_if_missing" >&6; }
++
+ if test -z "$CFLAGS"; then
+   CFLAGS="-O"
+   test "$GCC" = yes && CFLAGS="-O2 -fno-strength-reduce -Wall"
+@@ -4409,15 +4426,18 @@
+ 		  echo ""
+ 		  echo "------------------------------------------"
+ 		  echo " On z/OS Unix, the environment variable"
+-		  echo " __CC_${ccn}MODE must be set to \"1\"!"
++		  echo " _CC_${ccn}MODE must be set to \"1\"!"
+ 		  echo " Do:"
+ 		  echo "    export _CC_${ccn}MODE=1"
+ 		  echo " and then call configure again."
+ 		  echo "------------------------------------------"
+ 		  exit 1
+ 		fi
+-		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
+-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
++		# Set CFLAGS for configure process.
++		# This will be reset later for config.mk.
++		# Use haltonmsg to force error for missing H files.
++		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
++		LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+ 		{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+ 		;;
+@@ -4628,15 +4648,7 @@
+ 
+   LUA_INC=
+   if test "X$vi_cv_path_lua_pfx" != "X"; then
+-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
+-$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
+-    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+-$as_echo "yes" >&6; }
+-    else
+-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-            # Extract the first word of "lua", so it can be a program name with args.
++        # Extract the first word of "lua", so it can be a program name with args.
+ set dummy lua; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+@@ -4676,8 +4688,8 @@
+ fi
+ 
+ 
+-      if test "X$vi_cv_path_lua" != "X"; then
+-                { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
++    if test "X$vi_cv_path_lua" != "X"; then
++            { $as_echo "$as_me:${as_lineno-$LINENO}: checking Lua version" >&5
+ $as_echo_n "checking Lua version... " >&6; }
+ if test "${vi_cv_version_lua+set}" = set; then :
+   $as_echo_n "(cached) " >&6
+@@ -4686,23 +4698,31 @@
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_version_lua" >&5
+ $as_echo "$vi_cv_version_lua" >&6; }
+-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
++    fi
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include" >&5
++$as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include... " >&6; }
++    if test -f $vi_cv_path_lua_pfx/include/lua.h; then
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++    else
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++      { $as_echo "$as_me:${as_lineno-$LINENO}: checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua" >&5
+ $as_echo_n "checking if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua... " >&6; }
+-        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++      if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
++        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+-          LUA_INC=/lua$vi_cv_version_lua
+-        else
+-          { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++        LUA_INC=/lua$vi_cv_version_lua
++      else
++        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+-          vi_cv_path_lua_pfx=
+-        fi
++        vi_cv_path_lua_pfx=
+       fi
+     fi
+   fi
+ 
+   if test "X$vi_cv_path_lua_pfx" != "X"; then
+-    if test "X$vi_cv_version_lua" != "X"; then
++    if test "X$LUA_INC" != "X"; then
+             LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+     else
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua"
+@@ -4714,18 +4734,37 @@
+     $as_echo "#define FEAT_LUA 1" >>confdefs.h
+ 
+     if test "$enable_luainterp" = "dynamic"; then
+-                  for i in 0 1 2 3 4 5 6 7 8 9; do
+-	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
+-	  LUA_SONAME=".$i"
+-	  break
++      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
++	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
++      else
++	multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
++	if test "X$multiarch" != "X"; then
++	  lib_multiarch="lib/${multiarch}"
+ 	fi
+-      done
++			for subdir in "${lib_multiarch}" lib64 lib; do
++	  if test -z "$subdir"; then
++	    continue
++	  fi
++	  for sover in "${vi_cv_version_lua}.so" "-${vi_cv_version_lua}.so" ".so.${vi_cv_version_lua}"; do
++	    for i in .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 ""; do
++	      if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${sover}$i"; then
++		sover2="$i"
++		break 3
++	      fi
++	    done
++	  done
++	done
++	vi_cv_dll_name_lua="liblua${sover}$sover2"
++      fi
+       $as_echo "#define DYNAMIC_LUA 1" >>confdefs.h
+ 
+       LUA_LIBS=""
+-      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
++      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
+     fi
+   fi
++  if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
++    as_fn_error "could not configure lua" "$LINENO" 5
++  fi
+ 
+ 
+ 
+@@ -4862,16 +4901,36 @@
+       else
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+-	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
+-$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
+-	if test -f /usr/include/plt/scheme.h; then
++	{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket" >&5
++$as_echo_n "checking if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket... " >&6; }
++	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
+ 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+-	  SCHEME_INC=/usr/include/plt
++	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
+ 	else
+ 	  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+-	  vi_cv_path_mzscheme_pfx=
++	  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/plt/" >&5
++$as_echo_n "checking if scheme.h can be found in /usr/include/plt/... " >&6; }
++	  if test -f /usr/include/plt/scheme.h; then
++	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++	    SCHEME_INC=/usr/include/plt
++	  else
++	    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++	    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if scheme.h can be found in /usr/include/racket/" >&5
++$as_echo_n "checking if scheme.h can be found in /usr/include/racket/... " >&6; }
++	    if test -f /usr/include/racket/scheme.h; then
++	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++	      SCHEME_INC=/usr/include/racket
++	    else
++	      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++	      vi_cv_path_mzscheme_pfx=
++	    fi
++	  fi
+ 	fi
+       fi
+     fi
+@@ -4879,16 +4938,27 @@
+ 
+   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
+     if test "x$MACOSX" = "xyes"; then
+-      MZSCHEME_LIBS="-framework PLT_MzScheme"
++      MZSCHEME_LIBS="-framework Racket"
++      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
+       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
++      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+     else
+             if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
+ 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
++	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
+       else
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
+       fi
+@@ -4899,16 +4969,53 @@
+ 	MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib"
+       fi
+     fi
++
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for racket collects directory" >&5
++$as_echo_n "checking for racket collects directory... " >&6; }
+     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
+-      SCHEME_COLLECTS=lib/plt/
++      SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
++    else
++      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
++	SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
++      else
++	if test -d $vi_cv_path_mzscheme_pfx/share/racket/collects; then
++	  SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
++	else
++	  if test -d $vi_cv_path_mzscheme_pfx/collects; then
++	    SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
++	  fi
++	fi
++      fi
++    fi
++    if test "X$SCHEME_COLLECTS" != "X" ; then
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${SCHEME_COLLECTS}" >&5
++$as_echo "${SCHEME_COLLECTS}" >&6; }
++    else
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
++$as_echo "not found" >&6; }
++    fi
++
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for mzscheme_base.c" >&5
++$as_echo_n "checking for mzscheme_base.c... " >&6; }
++    if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
++      MZSCHEME_EXTRA="mzscheme_base.c"
++    else
++      if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
++	MZSCHEME_EXTRA="mzscheme_base.c"
++      fi
+     fi
+-    if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+-            MZSCHEME_EXTRA="mzscheme_base.c"
+-      MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
++    if test "X$MZSCHEME_EXTRA" != "X" ; then
++            MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
+       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: needed" >&5
++$as_echo "needed" >&6; }
++    else
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: not needed" >&5
++$as_echo "not needed" >&6; }
+     fi
++
+     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
+-      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'"
++      -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
+     MZSCHEME_SRC="if_mzsch.c"
+     MZSCHEME_OBJ="objects/if_mzsch.o"
+     MZSCHEME_PRO="if_mzsch.pro"
+@@ -5099,6 +5206,10 @@
+       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
+     fi
+   fi
++
++  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
++    as_fn_error "could not configure perl" "$LINENO" 5
++  fi
+ fi
+ 
+ 
+@@ -5119,8 +5230,10 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_pythoninterp" >&5
+ $as_echo "$enable_pythoninterp" >&6; }
+ if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
+-    # Extract the first word of "python", so it can be a program name with args.
+-set dummy python; ac_word=$2
++    for ac_prog in python2 python
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if test "${ac_cv_path_vi_cv_path_python+set}" = set; then :
+@@ -5159,6 +5272,9 @@
+ fi
+ 
+ 
++  test -n "$vi_cv_path_python" && break
++done
++
+   if test "X$vi_cv_path_python" != "X"; then
+ 
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
+@@ -5173,10 +5289,10 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python_version" >&5
+ $as_echo "$vi_cv_var_python_version" >&6; }
+ 
+-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 1.4 or better" >&5
+-$as_echo_n "checking Python is 1.4 or better... " >&6; }
++        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python is 2.2 or better" >&5
++$as_echo_n "checking Python is 2.2 or better... " >&6; }
+     if ${vi_cv_path_python} -c \
+-	"import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
++	"import sys; sys.exit(${vi_cv_var_python_version} < 2.2)"
+     then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yep" >&5
+ $as_echo "yep" >&6; }
+@@ -5231,14 +5347,19 @@
+ else
+ 
+ 	vi_cv_path_python_conf=
+-	for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
+-	  for subdir in lib64 lib share; do
+-	    d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
+-	    if test -d "$d" && test -f "$d/config.c"; then
+-	      vi_cv_path_python_conf="$d"
+-	    fi
++	d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
++	if test -d "$d" && test -f "$d/config.c"; then
++	  vi_cv_path_python_conf="$d"
++	else
++	  for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
++	    for subdir in lib64 lib share; do
++	      d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
++	      if test -d "$d" && test -f "$d/config.c"; then
++		vi_cv_path_python_conf="$d"
++	      fi
++	    done
+ 	  done
+-	done
++	fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python_conf" >&5
+@@ -5263,6 +5384,7 @@
+ 	@echo "python_LIBS='$(LIBS)'"
+ 	@echo "python_SYSLIBS='$(SYSLIBS)'"
+ 	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
++	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
+ 	@echo "python_INSTSONAME='$(INSTSONAME)'"
+ eof
+ 	    	    eval "`cd ${PYTHON_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+@@ -5283,22 +5405,21 @@
+ fi
+ 
+ 
++	if test "X$python_DLLLIBRARY" != "X"; then
++	  python_INSTSONAME="$python_DLLLIBRARY"
++	fi
+ 	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+ 	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	else
+-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	fi
+ 	PYTHON_SRC="if_python.c"
+-		if test "x$MACOSX" = "xyes"; then
+-	  PYTHON_OBJ="objects/if_python.o"
+-	else
+-	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
+-	fi
++	PYTHON_OBJ="objects/if_python.o"
+ 	if test "${vi_cv_var_python_version}" = "1.4"; then
+ 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ 	fi
+-	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
++    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+ 
+ 								{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+ $as_echo_n "checking if -pthread should be used... " >&6; }
+@@ -5388,6 +5509,10 @@
+ $as_echo "too old" >&6; }
+     fi
+   fi
++
++  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
++    as_fn_error "could not configure python" "$LINENO" 5
++  fi
+ fi
+ 
+ 
+@@ -5410,8 +5535,10 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_python3interp" >&5
+ $as_echo "$enable_python3interp" >&6; }
+ if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
+-    # Extract the first word of "python3", so it can be a program name with args.
+-set dummy python3; ac_word=$2
++    for ac_prog in python3 python
++do
++  # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+ $as_echo_n "checking for $ac_word... " >&6; }
+ if test "${ac_cv_path_vi_cv_path_python3+set}" = set; then :
+@@ -5450,6 +5577,9 @@
+ fi
+ 
+ 
++  test -n "$vi_cv_path_python3" && break
++done
++
+   if test "X$vi_cv_path_python3" != "X"; then
+ 
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python version" >&5
+@@ -5464,6 +5594,23 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_version" >&5
+ $as_echo "$vi_cv_var_python3_version" >&6; }
+ 
++        { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's abiflags" >&5
++$as_echo_n "checking Python's abiflags... " >&6; }
++if test "${vi_cv_var_python3_abiflags+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++
++     vi_cv_var_python3_abiflags=
++     if ${vi_cv_path_python3} -c \
++         "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
++     then
++       vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \
++         "import sys; print(sys.abiflags)"`
++     fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_var_python3_abiflags" >&5
++$as_echo "$vi_cv_var_python3_abiflags" >&6; }
++
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking Python's install prefix" >&5
+ $as_echo_n "checking Python's install prefix... " >&6; }
+ if test "${vi_cv_path_python3_pfx+set}" = set; then :
+@@ -5514,14 +5661,23 @@
+ else
+ 
+      vi_cv_path_python3_conf=
+-     for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+-       for subdir in lib64 lib share; do
+-         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
+-         if test -d "$d" && test -f "$d/config.c"; then
+-           vi_cv_path_python3_conf="$d"
+-         fi
++     config_dir="config"
++     if test "${vi_cv_var_python3_abiflags}" != ""; then
++       config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++     fi
++     d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
++     if test -d "$d" && test -f "$d/config.c"; then
++       vi_cv_path_python3_conf="$d"
++     else
++       for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
++	 for subdir in lib64 lib share; do
++	   d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
++	   if test -d "$d" && test -f "$d/config.c"; then
++	     vi_cv_path_python3_conf="$d"
++	   fi
++	 done
+        done
+-     done
++     fi
+ 
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $vi_cv_path_python3_conf" >&5
+@@ -5545,31 +5701,30 @@
+ 	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+ 	@echo "python3_LIBS='$(LIBS)'"
+ 	@echo "python3_SYSLIBS='$(SYSLIBS)'"
+-	@echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
++	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+ 	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+ eof
+                     eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+           rm -f -- "${tmp_mkf}"
+-          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+-          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
++	  vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+                     vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+ 
+ fi
+ 
+ 
++      if test "X$python3_DLLLIBRARY" != "X"; then
++	python3_INSTSONAME="$python3_DLLLIBRARY"
++      fi
+       PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+       if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       else
+-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       fi
+       PYTHON3_SRC="if_python3.c"
+-            if test "x$MACOSX" = "xyes"; then
+-        PYTHON3_OBJ="objects/if_python3.o"
+-      else
+-        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
+-      fi
++      PYTHON3_OBJ="objects/if_python3.o"
+ 
+                                                 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if -pthread should be used" >&5
+ $as_echo_n "checking if -pthread should be used... " >&6; }
+@@ -5667,12 +5822,12 @@
+ 
+   $as_echo "#define DYNAMIC_PYTHON3 1" >>confdefs.h
+ 
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL" >&5
+-$as_echo_n "checking whether we can do without RTLD_GLOBAL... " >&6; }
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python" >&5
++$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python... " >&6; }
+   cflags_save=$CFLAGS
+-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+   ldflags_save=$LDFLAGS
+-  LDFLAGS="$LDFLAGS -ldl"
++    LDFLAGS="-ldl $LDFLAGS"
+   if test "$cross_compiling" = yes; then :
+   { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+ $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+@@ -5686,18 +5841,20 @@
+     /* If this program fails, then RTLD_GLOBAL is needed.
+      * RTLD_GLOBAL will be used and then it is not possible to
+      * have both python versions enabled in the same vim instance.
+-     * Only the first pyhton version used will be switched on.
++     * Only the first python version used will be switched on.
+      */
+ 
+-    int no_rtl_global_needed_for(char *python_instsoname)
++    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
+     {
+       int needed = 0;
+       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+       if (pylib != 0)
+       {
++          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
+           void (*init)(void) = dlsym(pylib, "Py_Initialize");
+           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+           void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
+           (*init)();
+           needed = (*simple)("import termios") == -1;
+           (*final)();
+@@ -5709,7 +5866,7 @@
+     int main(int argc, char** argv)
+     {
+       int not_needed = 0;
+-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
++      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
+             not_needed = 1;
+       return !not_needed;
+     }
+@@ -5726,8 +5883,76 @@
+   conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ 
++
++  CFLAGS=$cflags_save
++  LDFLAGS=$ldflags_save
++
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can do without RTLD_GLOBAL for Python3" >&5
++$as_echo_n "checking whether we can do without RTLD_GLOBAL for Python3... " >&6; }
++  cflags_save=$CFLAGS
++  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  ldflags_save=$LDFLAGS
++    LDFLAGS="-ldl $LDFLAGS"
++  if test "$cross_compiling" = yes; then :
++  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "cannot run test program while cross compiling
++See \`config.log' for more details." "$LINENO" 5; }
++else
++  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++    #include <dlfcn.h>
++    #include <wchar.h>
++    /* If this program fails, then RTLD_GLOBAL is needed.
++     * RTLD_GLOBAL will be used and then it is not possible to
++     * have both python versions enabled in the same vim instance.
++     * Only the first python version used will be switched on.
++     */
++
++    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
++    {
++      int needed = 0;
++      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
++      if (pylib != 0)
++      {
++          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
++          void (*init)(void) = dlsym(pylib, "Py_Initialize");
++          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
++          void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
++          (*init)();
++          needed = (*simple)("import termios") == -1;
++          (*final)();
++          dlclose(pylib);
++      }
++      return !needed;
++    }
++
++    int main(int argc, char** argv)
++    {
++      int not_needed = 0;
++      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
++            not_needed = 1;
++      return !not_needed;
++    }
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; };$as_echo "#define PY3_NO_RTLD_GLOBAL 1" >>confdefs.h
++
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++  conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++
+   CFLAGS=$cflags_save
+   LDFLAGS=$ldflags_save
++
+   PYTHON_SRC="if_python.c"
+   PYTHON_OBJ="objects/if_python.o"
+   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+@@ -6085,6 +6310,9 @@
+ $as_echo "too old; need Tcl version 8.0 or later" >&6; }
+     fi
+   fi
++  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
++    as_fn_error "could not configure Tcl" "$LINENO" 5
++  fi
+ fi
+ 
+ 
+@@ -6103,20 +6331,20 @@
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_rubyinterp" >&5
+ $as_echo "$enable_rubyinterp" >&6; }
+-if test "$enable_rubyinterp" = "yes"; then
++if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking --with-ruby-command argument" >&5
+ $as_echo_n "checking --with-ruby-command argument... " >&6; }
+ 
++
+ # Check whether --with-ruby-command was given.
+ if test "${with_ruby_command+set}" = set; then :
+-  withval=$with_ruby_command; RUBY_CMD="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
++  withval=$with_ruby_command; RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RUBY_CMD" >&5
+ $as_echo "$RUBY_CMD" >&6; }
+ else
+   RUBY_CMD="ruby"; { $as_echo "$as_me:${as_lineno-$LINENO}: result: defaulting to $RUBY_CMD" >&5
+ $as_echo "defaulting to $RUBY_CMD" >&6; }
+ fi
+ 
+-
+   # Extract the first word of "$RUBY_CMD", so it can be a program name with args.
+ set dummy $RUBY_CMD; ac_word=$2
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+@@ -6163,41 +6391,46 @@
+     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: OK" >&5
+ $as_echo "OK" >&6; }
++      { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby rbconfig" >&5
++$as_echo_n "checking Ruby rbconfig... " >&6; }
++      ruby_rbconfig="RbConfig"
++      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
++	ruby_rbconfig="Config"
++      fi
++      { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ruby_rbconfig" >&5
++$as_echo "$ruby_rbconfig" >&6; }
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking Ruby header files" >&5
+ $as_echo_n "checking Ruby header files... " >&6; }
+-      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG["rubyhdrdir"] || Config::CONFIG["archdir"] || $hdrdir' 2>/dev/null`
++      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG['rubyhdrdir'] || $ruby_rbconfig::CONFIG['archdir'] || \\$hdrdir" 2>/dev/null`
+       if test "X$rubyhdrdir" != "X"; then
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $rubyhdrdir" >&5
+ $as_echo "$rubyhdrdir" >&6; }
+ 	RUBY_CFLAGS="-I$rubyhdrdir"
+-        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["arch"]'`
++        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['arch']"`
+         if test -d "$rubyhdrdir/$rubyarch"; then
+           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+         fi
+-        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["ruby_version"].gsub(/\./, "")[0,2]'`
++        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['ruby_version'].gsub(/\./, '')[0,2]"`
+         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
+-	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LIBS"]'`
++	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LIBS']"`
+ 	if test "X$rubylibs" != "X"; then
+ 	  RUBY_LIBS="$rubylibs"
+ 	fi
+-	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["LIBRUBYARG"])'`
+-	if test -f "$rubyhdrdir/$librubyarg"; then
+-	  librubyarg="$rubyhdrdir/$librubyarg"
+-	else
+-	  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG["libdir"])'`
+-	  if test -f "$rubylibdir/$librubyarg"; then
+-	    librubyarg="$rubylibdir/$librubyarg"
+-	  elif test "$librubyarg" = "libruby.a"; then
+-	    	    librubyarg="-lruby"
+-	  else
+-	    librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+-	  fi
++	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBYARG'])"`
++	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['LIBRUBY_A'])"`
++	rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG['libdir'])"`
++	if test -f "$rubylibdir/$librubya"; then
++	  librubyarg="$librubyarg"
++	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
++	elif test "$librubyarg" = "libruby.a"; then
++	  	  librubyarg="-lruby"
++	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+ 	fi
+ 
+ 	if test "X$librubyarg" != "X"; then
+ 	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
+ 	fi
+-	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG["LDFLAGS"]'`
++	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG['LDFLAGS']"`
+ 	if test "X$rubyldflags" != "X"; then
+ 	  	  	  	  rubyldflags=`echo "$rubyldflags" | sed -e 's/-arch\ ppc//' -e 's/-arch\ i386//' -e 's/-arch\ x86_64//'`
+ 	  if test "X$rubyldflags" != "X"; then
+@@ -6209,6 +6442,13 @@
+ 	RUBY_PRO="if_ruby.pro"
+ 	$as_echo "#define FEAT_RUBY 1" >>confdefs.h
+ 
++	if test "$enable_rubyinterp" = "dynamic"; then
++	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG['LIBRUBY_SO']"`
++	  $as_echo "#define DYNAMIC_RUBY 1" >>confdefs.h
++
++	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
++	  RUBY_LIBS=
++	fi
+       else
+ 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: not found; disabling Ruby" >&5
+ $as_echo "not found; disabling Ruby" >&6; }
+@@ -6218,6 +6458,10 @@
+ $as_echo "too old; need Ruby version 1.6.0 or later" >&6; }
+     fi
+   fi
++
++  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
++    as_fn_error "could not configure Ruby" "$LINENO" 5
++  fi
+ fi
+ 
+ 
+@@ -7422,7 +7666,11 @@
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking if X11 header files implicitly declare return values" >&5
+ $as_echo_n "checking if X11 header files implicitly declare return values... " >&6; }
+     cflags_save=$CFLAGS
+-    CFLAGS="$CFLAGS $X_CFLAGS -Werror"
++        if test "$GCC" = yes; then
++      CFLAGS="$CFLAGS $X_CFLAGS -Werror"
++    else
++      CFLAGS="$CFLAGS $X_CFLAGS"
++    fi
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+ #include <X11/Xlib.h>
+@@ -8528,8 +8776,13 @@
+ if test -z "$SKIP_MOTIF"; then
+   cppflags_save=$CPPFLAGS
+   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+-  for ac_header in Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
+-		   Xm/UnhighlightT.h Xm/Notebook.h
++  if test "$zOSUnix" = "yes"; then
++	xmheader="Xm/Xm.h"
++  else
++	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
++  	   Xm/UnhighlightT.h Xm/Notebook.h"
++  fi
++  for ac_header in $xmheader
+ do :
+   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+@@ -8544,7 +8797,7 @@
+ done
+ 
+ 
+-  if test $ac_cv_header_Xm_XpmP_h = yes; then
++  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XpmAttributes_21 in Xm/XpmP.h" >&5
+ $as_echo_n "checking for XpmAttributes_21 in Xm/XpmP.h... " >&6; }
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+@@ -8616,6 +8869,27 @@
+ 
+ 
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGWIN environment" >&5
++$as_echo_n "checking for CYGWIN environment... " >&6; }
++case `uname` in
++    CYGWIN*)    CYGWIN=yes; { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++                { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CYGWIN clipboard support" >&5
++$as_echo_n "checking for CYGWIN clipboard support... " >&6; }
++                if test "x$with_x" = "xno" ; then
++                  OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
++                  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++                  $as_echo "#define FEAT_CYGWIN_WIN32_CLIPBOARD 1" >>confdefs.h
++
++                else
++                  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - using X11" >&5
++$as_echo "no - using X11" >&6; }
++                fi ;;
++
++    *)          CYGWIN=no; { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; };;
++esac
+ 
+ if test "$enable_hangulinput" = "yes"; then
+   if test "x$GUITYPE" = "xNONE"; then
+@@ -9768,9 +10042,9 @@
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: empty: automatic terminal library selection" >&5
+ $as_echo "empty: automatic terminal library selection" >&6; }
+-              case "`uname -s 2>/dev/null`" in
+-	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
+-	*)	tlibs="ncurses termlib termcap curses";;
++                case "`uname -s 2>/dev/null`" in
++	OSF1|SCO_SV)	tlibs="tinfo ncurses curses termlib termcap";;
++	*)	tlibs="tinfo ncurses termlib termcap curses";;
+   esac
+   for libname in $tlibs; do
+     as_ac_Lib=`$as_echo "ac_cv_lib_${libname}''_tgetent" | $as_tr_sh`
+@@ -10329,7 +10603,7 @@
+ _ACEOF
+ 
+   if test "x$vim_cv_tty_mode" = "x" ; then
+-    as_fn_error "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (propably 0620)" "$LINENO" 5
++    as_fn_error "It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)" "$LINENO" 5
+   else
+     $as_echo "#define PTYMODE 0620" >>confdefs.h
+ 
+@@ -10462,7 +10736,7 @@
+ fi
+ 
+ for ac_func in bcmp fchdir fchown fsync getcwd getpseudotty \
+-	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
++	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+ 	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+ 	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+ 	sigvec strcasecmp strerror strftime stricmp strncasecmp \
+@@ -11159,7 +11433,47 @@
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
+ 
+-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for acl_get in -lsec" >&5
++$as_echo_n "checking for acl_get in -lsec... " >&6; }
++if test "${ac_cv_lib_sec_acl_get+set}" = set; then :
++  $as_echo_n "(cached) " >&6
++else
++  ac_check_lib_save_LIBS=$LIBS
++LIBS="-lsec  $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h.  */
++
++/* Override any GCC internal prototype to avoid an error.
++   Use char because int might match the return type of a GCC
++   builtin and then its argument prototype would still apply.  */
++#ifdef __cplusplus
++extern "C"
++#endif
++char acl_get ();
++int
++main ()
++{
++return acl_get ();
++  ;
++  return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++  ac_cv_lib_sec_acl_get=yes
++else
++  ac_cv_lib_sec_acl_get=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++    conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sec_acl_get" >&5
++$as_echo "$ac_cv_lib_sec_acl_get" >&6; }
++if test "x$ac_cv_lib_sec_acl_get" = x""yes; then :
++  LIBS="$LIBS -lsec"; $as_echo "#define HAVE_SOLARIS_ZFS_ACL 1" >>confdefs.h
++
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris ACL support" >&5
+ $as_echo_n "checking for Solaris ACL support... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -11186,6 +11500,8 @@
+ fi
+ rm -f core conftest.err conftest.$ac_objext \
+     conftest$ac_exeext conftest.$ac_ext
++fi
++
+ 
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for AIX ACL support" >&5
+ $as_echo_n "checking for AIX ACL support... " >&6; }
+@@ -11642,7 +11958,8 @@
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking uint32_t is 32 bits" >&5
+ $as_echo_n "checking uint32_t is 32 bits... " >&6; }
+ if test "$cross_compiling" = yes; then :
+-  as_fn_error "could not compile program using uint32_t." "$LINENO" 5
++  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check uint32_t when cross-compiling." >&5
++$as_echo "$as_me: WARNING: cannot check uint32_t when cross-compiling." >&2;}
+ else
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ /* end confdefs.h.  */
+@@ -11915,6 +12232,10 @@
+ test -f tags && mv tags tags.save
+ if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
+   TAGPRG="ctags -I INIT+ --fields=+S"
++elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++  TAGPRG="exctags -I INIT+ --fields=+S"
++elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&5 2>&1; then
++  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+ else
+   TAGPRG="ctags"
+   (eval etags	   /dev/null) < /dev/null 1>&5 2>&1 && TAGPRG="etags"
+@@ -12344,10 +12665,10 @@
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+   fi
+-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
++          { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we need -D_FORTIFY_SOURCE=1" >&5
+ $as_echo_n "checking whether we need -D_FORTIFY_SOURCE=1... " >&6; }
+   if test "$gccmajor" -gt "3"; then
+-    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
++    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+ $as_echo "yes" >&6; }
+   else
+@@ -12357,6 +12678,28 @@
+ fi
+ 
+ 
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker --as-needed support" >&5
++$as_echo_n "checking linker --as-needed support... " >&6; }
++LINK_AS_NEEDED=
++# Check if linker supports --as-needed and --no-as-needed options
++if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
++  LDFLAGS="$LDFLAGS -Wl,--as-needed"
++  LINK_AS_NEEDED=yes
++fi
++if test "$LINK_AS_NEEDED" = yes; then
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++else
++  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++# IBM z/OS reset CFLAGS for config.mk
++if test "$zOSUnix" = "yes"; then
++	CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
++fi
++
+ ac_config_files="$ac_config_files auto/config.mk:config.mk.in"
+ 
+ cat >confcache <<\_ACEOF
+diff -Naur vim73.orig/src/bigvim.bat vim73/src/bigvim.bat
+--- vim73.orig/src/bigvim.bat	2010-07-18 19:22:17.000000000 +0000
++++ vim73/src/bigvim.bat	2013-06-07 17:07:30.148922586 +0000
+@@ -1,3 +1,5 @@
+ :: command to build big Vim with OLE, Perl, Python, Ruby and Tcl
+-nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl512 DYNAMIC_PERL=yes PERL_VER=512 PYTHON=e:\python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=e:\python31 DYNAMIC_PYTHON3=yes PYTHON3_VER=31 RUBY=e:\ruby191 DYNAMIC_RUBY=yes RUBY_VER=191 RUBY_VER_LONG=1.9.1 TCL=e:\tcl DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes XPM=e:\xpm
++SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\"
++SET TOOLDIR=E:\
++%VCDIR%nmake -f Make_mvc.mak GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32 RUBY=%TOOLDIR%ruby192 DYNAMIC_RUBY=yes RUBY_VER=19 RUBY_VER_LONG=1.9.2 TCL=%TOOLDIR%tcl TCL_VER=85 TCL_VER_LONG=8.5 DYNAMIC_TCL=yes %1 IME=yes CSCOPE=yes
+ 
+diff -Naur vim73.orig/src/bigvim64.bat vim73/src/bigvim64.bat
+--- vim73.orig/src/bigvim64.bat	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/bigvim64.bat	2013-06-07 17:07:30.178922501 +0000
+@@ -0,0 +1,7 @@
++:: command to build big Vim 64 bit with OLE, Perl, Python, Ruby and Tcl
++:: First run: %VCDIR%\vcvarsall.bat x86_amd64
++:: Ruby and Tcl are excluded, doesn't seem to work.
++SET VCDIR="C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\"
++SET TOOLDIR=E:\
++%VCDIR%\bin\nmake -f Make_mvc.mak CPU=AMD64 GUI=yes OLE=yes PERL=E:\perl514 DYNAMIC_PERL=yes PERL_VER=514 PYTHON=%TOOLDIR%python27 DYNAMIC_PYTHON=yes PYTHON_VER=27 PYTHON3=%TOOLDIR%python32 DYNAMIC_PYTHON3=yes PYTHON3_VER=32  %1 IME=yes CSCOPE=yes
++
+diff -Naur vim73.orig/src/blowfish.c vim73/src/blowfish.c
+--- vim73.orig/src/blowfish.c	2010-07-14 14:45:39.000000000 +0000
++++ vim73/src/blowfish.c	2013-06-07 17:07:30.195589120 +0000
+@@ -413,6 +413,7 @@
+     int    salt_len;
+ {
+     int      i, j, keypos = 0;
++    unsigned u;
+     UINT32_T val, data_l, data_r;
+     char_u   *key;
+     int      keylen;
+@@ -432,8 +433,8 @@
+     }
+     for (i = 0; i < keylen; i++)
+     {
+-	sscanf((char *)&key[i * 2], "%2x", &j);
+-	key[i] = j;
++	sscanf((char *)&key[i * 2], "%2x", &u);
++	key[i] = u;
+     }
+ 
+     mch_memmove(sbx, sbi, 4 * 4 * 256);
+diff -Naur vim73.orig/src/buffer.c vim73/src/buffer.c
+--- vim73.orig/src/buffer.c	2010-08-13 09:14:35.000000000 +0000
++++ vim73/src/buffer.c	2013-06-07 17:07:30.218922386 +0000
+@@ -57,13 +57,15 @@
+ 
+ #if defined(FEAT_SIGNS)
+ static void insert_sign __ARGS((buf_T *buf, signlist_T *prev, signlist_T *next, int id, linenr_T lnum, int typenr));
+-static void buf_delete_signs __ARGS((buf_T *buf));
+ #endif
+ 
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+ static char *msg_loclist = N_("[Location List]");
+ static char *msg_qflist = N_("[Quickfix List]");
+ #endif
++#ifdef FEAT_AUTOCMD
++static char *e_auabort = N_("E855: Autocommands caused command to abort");
++#endif
+ 
+ /*
+  * Open current buffer, that is: open the memfile and read the file into
+@@ -80,6 +82,9 @@
+ #ifdef FEAT_AUTOCMD
+     buf_T	*old_curbuf;
+ #endif
++#ifdef FEAT_SYN_HL
++    long	old_tw = curbuf->b_p_tw;
++#endif
+ 
+     /*
+      * The 'readonly' flag is only set when BF_NEVERLOADED is being reset.
+@@ -96,7 +101,7 @@
+ 	 * There MUST be a memfile, otherwise we can't do anything
+ 	 * If we can't create one for the current buffer, take another buffer
+ 	 */
+-	close_buffer(NULL, curbuf, 0);
++	close_buffer(NULL, curbuf, 0, FALSE);
+ 	for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
+ 	    if (curbuf->b_ml.ml_mfp != NULL)
+ 		break;
+@@ -111,6 +116,10 @@
+ 	}
+ 	EMSG(_("E83: Cannot allocate buffer, using other one..."));
+ 	enter_buffer(curbuf);
++#ifdef FEAT_SYN_HL
++	if (old_tw != curbuf->b_p_tw)
++	    check_colorcolumn(curwin);
++#endif
+ 	return FAIL;
+     }
+ 
+@@ -316,12 +325,17 @@
+  * get a new buffer very soon!
+  *
+  * The 'bufhidden' option can force freeing and deleting.
++ *
++ * When "abort_if_last" is TRUE then do not close the buffer if autocommands
++ * cause there to be only one window with this buffer.  e.g. when ":quit" is
++ * supposed to close the window but autocommands close all other windows.
+  */
+     void
+-close_buffer(win, buf, action)
++close_buffer(win, buf, action, abort_if_last)
+     win_T	*win;		/* if not NULL, set b_last_cursor */
+     buf_T	*buf;
+     int		action;
++    int		abort_if_last UNUSED;
+ {
+ #ifdef FEAT_AUTOCMD
+     int		is_curbuf;
+@@ -369,19 +383,35 @@
+     /* When the buffer is no longer in a window, trigger BufWinLeave */
+     if (buf->b_nwindows == 1)
+     {
++	buf->b_closing = TRUE;
+ 	apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname, buf->b_fname,
+ 								  FALSE, buf);
+-	if (!buf_valid(buf))	    /* autocommands may delete the buffer */
++	if (!buf_valid(buf))
++	{
++	    /* Autocommands deleted the buffer. */
++aucmd_abort:
++	    EMSG(_(e_auabort));
+ 	    return;
++	}
++	buf->b_closing = FALSE;
++	if (abort_if_last && one_window())
++	    /* Autocommands made this the only window. */
++	    goto aucmd_abort;
+ 
+ 	/* When the buffer becomes hidden, but is not unloaded, trigger
+ 	 * BufHidden */
+ 	if (!unload_buf)
+ 	{
++	    buf->b_closing = TRUE;
+ 	    apply_autocmds(EVENT_BUFHIDDEN, buf->b_fname, buf->b_fname,
+ 								  FALSE, buf);
+-	    if (!buf_valid(buf))	/* autocmds may delete the buffer */
+-		return;
++	    if (!buf_valid(buf))
++		/* Autocommands deleted the buffer. */
++		goto aucmd_abort;
++	    buf->b_closing = FALSE;
++	    if (abort_if_last && one_window())
++		/* Autocommands made this the only window. */
++		goto aucmd_abort;
+ 	}
+ # ifdef FEAT_EVAL
+ 	if (aborting())	    /* autocmds may abort script processing */
+@@ -416,6 +446,14 @@
+ #endif
+ 
+     buf_freeall(buf, (del_buf ? BFA_DEL : 0) + (wipe_buf ? BFA_WIPE : 0));
++    if (
++#ifdef FEAT_WINDOWS
++	win_valid(win) &&
++#else
++	win != NULL &&
++#endif
++			  win->w_buffer == buf)
++	win->w_buffer = NULL;  /* make sure we don't use the buffer now */
+ 
+ #ifdef FEAT_AUTOCMD
+     /* Autocommands may have deleted the buffer. */
+@@ -527,6 +565,7 @@
+ #ifdef FEAT_AUTOCMD
+     int		is_curbuf = (buf == curbuf);
+ 
++    buf->b_closing = TRUE;
+     apply_autocmds(EVENT_BUFUNLOAD, buf->b_fname, buf->b_fname, FALSE, buf);
+     if (!buf_valid(buf))	    /* autocommands may delete the buffer */
+ 	return;
+@@ -543,6 +582,7 @@
+ 	if (!buf_valid(buf))	    /* autocommands may delete the buffer */
+ 	    return;
+     }
++    buf->b_closing = FALSE;
+ # ifdef FEAT_EVAL
+     if (aborting())	    /* autocmds may abort script processing */
+ 	return;
+@@ -560,6 +600,11 @@
+ #ifdef FEAT_DIFF
+     diff_buf_delete(buf);	    /* Can't use 'diff' for unloaded buffer. */
+ #endif
++#ifdef FEAT_SYN_HL
++    /* Remove any ownsyntax, unless exiting. */
++    if (firstwin != NULL && curwin->w_buffer == buf)
++	reset_synblock(curwin);
++#endif
+ 
+ #ifdef FEAT_FOLDING
+     /* No folds in an empty buffer. */
+@@ -603,6 +648,9 @@
+     buf_T	*buf;
+ {
+     free_buffer_stuff(buf, TRUE);
++#ifdef FEAT_EVAL
++    unref_var_dict(buf->b_vars);
++#endif
+ #ifdef FEAT_LUA
+     lua_buffer_free(buf);
+ #endif
+@@ -639,10 +687,13 @@
+     {
+ 	clear_wininfo(buf);		/* including window-local options */
+ 	free_buf_options(buf, TRUE);
++#ifdef FEAT_SPELL
++	ga_clear(&buf->b_s.b_langp);
++#endif
+     }
+ #ifdef FEAT_EVAL
+-    vars_clear(&buf->b_vars.dv_hashtab); /* free all internal variables */
+-    hash_init(&buf->b_vars.dv_hashtab);
++    vars_clear(&buf->b_vars->dv_hashtab); /* free all internal variables */
++    hash_init(&buf->b_vars->dv_hashtab);
+ #endif
+ #ifdef FEAT_USR_CMDS
+     uc_clear(&buf->b_ucmds);		/* clear local user commands */
+@@ -661,9 +712,6 @@
+     vim_free(buf->b_start_fenc);
+     buf->b_start_fenc = NULL;
+ #endif
+-#ifdef FEAT_SPELL
+-    ga_clear(&buf->b_s.b_langp);
+-#endif
+ }
+ 
+ /*
+@@ -748,6 +796,9 @@
+ # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
+     cleanup_T	cs;
+ # endif
++#ifdef FEAT_SYN_HL
++    long	old_tw = curbuf->b_p_tw;
++#endif
+ 
+     if (swap_exists_action == SEA_QUIT)
+     {
+@@ -762,11 +813,17 @@
+ 	 * open a new, empty buffer. */
+ 	swap_exists_action = SEA_NONE;	/* don't want it again */
+ 	swap_exists_did_quit = TRUE;
+-	close_buffer(curwin, curbuf, DOBUF_UNLOAD);
++	close_buffer(curwin, curbuf, DOBUF_UNLOAD, FALSE);
+ 	if (!buf_valid(old_curbuf) || old_curbuf == curbuf)
+ 	    old_curbuf = buflist_new(NULL, NULL, 1L, BLN_CURBUF | BLN_LISTED);
+ 	if (old_curbuf != NULL)
++	{
+ 	    enter_buffer(old_curbuf);
++#ifdef FEAT_SYN_HL
++	    if (old_tw != curbuf->b_p_tw)
++		check_colorcolumn(curwin);
++#endif
++	}
+ 	/* If "old_curbuf" is NULL we are in big trouble here... */
+ 
+ # if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
+@@ -874,7 +931,8 @@
+ 		if (!VIM_ISDIGIT(*arg))
+ 		{
+ 		    p = skiptowhite_esc(arg);
+-		    bnr = buflist_findpat(arg, p, command == DOBUF_WIPE, FALSE);
++		    bnr = buflist_findpat(arg, p, command == DOBUF_WIPE,
++								FALSE, FALSE);
+ 		    if (bnr < 0)	    /* failed */
+ 			break;
+ 		    arg = p;
+@@ -1109,7 +1167,7 @@
+ 	     * if the buffer still exists.
+ 	     */
+ 	    if (buf != curbuf && buf_valid(buf) && buf->b_nwindows == 0)
+-		close_buffer(NULL, buf, action);
++		close_buffer(NULL, buf, action, FALSE);
+ 	    return retval;
+ 	}
+ 
+@@ -1120,6 +1178,9 @@
+ 	 * a window with this buffer.
+ 	 */
+ 	while (buf == curbuf
++# ifdef FEAT_AUTOCMD
++		   && !(curwin->w_closing || curwin->w_buffer->b_closing)
++# endif
+ 		   && (firstwin != lastwin || first_tabpage->tp_next != NULL))
+ 	    win_close(curwin, FALSE);
+ #endif
+@@ -1133,7 +1194,7 @@
+ 	    close_windows(buf, FALSE);
+ #endif
+ 	    if (buf != curbuf && buf_valid(buf) && buf->b_nwindows <= 0)
+-		close_buffer(NULL, buf, action);
++		close_buffer(NULL, buf, action, FALSE);
+ 	    return OK;
+ 	}
+ 
+@@ -1288,9 +1349,12 @@
+     /* Go to the other buffer. */
+     set_curbuf(buf, action);
+ 
+-#if defined(FEAT_LISTCMDS) && defined(FEAT_SCROLLBIND)
++#if defined(FEAT_LISTCMDS) \
++	&& (defined(FEAT_SCROLLBIND) || defined(FEAT_CURSORBIND))
+     if (action == DOBUF_SPLIT)
+-	curwin->w_p_scb = FALSE;	/* reset 'scrollbind' */
++    {
++	RESET_BINDING(curwin);	/* reset 'scrollbind' and 'cursorbind' */
++    }
+ #endif
+ 
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_EVAL)
+@@ -1320,6 +1384,9 @@
+     buf_T	*prevbuf;
+     int		unload = (action == DOBUF_UNLOAD || action == DOBUF_DEL
+ 						     || action == DOBUF_WIPE);
++#ifdef FEAT_SYN_HL
++    long	old_tw = curbuf->b_p_tw;
++#endif
+ 
+     setpcmark();
+     if (!cmdmod.keepalt)
+@@ -1343,6 +1410,10 @@
+ # endif
+ #endif
+     {
++#ifdef FEAT_SYN_HL
++	if (prevbuf == curwin->w_buffer)
++	    reset_synblock(curwin);
++#endif
+ #ifdef FEAT_WINDOWS
+ 	if (unload)
+ 	    close_windows(prevbuf, FALSE);
+@@ -1353,29 +1424,48 @@
+ 	if (buf_valid(prevbuf))
+ #endif
+ 	{
++#ifdef FEAT_WINDOWS
++	    win_T  *previouswin = curwin;
++#endif
+ 	    if (prevbuf == curbuf)
+ 		u_sync(FALSE);
+ 	    close_buffer(prevbuf == curwin->w_buffer ? curwin : NULL, prevbuf,
+ 		    unload ? action : (action == DOBUF_GOTO
+ 			&& !P_HID(prevbuf)
+-			&& !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0);
++			&& !bufIsChanged(prevbuf)) ? DOBUF_UNLOAD : 0, FALSE);
++#ifdef FEAT_WINDOWS
++	    if (curwin != previouswin && win_valid(previouswin))
++	      /* autocommands changed curwin, Grr! */
++	      curwin = previouswin;
++#endif
+ 	}
+     }
+ #ifdef FEAT_AUTOCMD
+     /* An autocommand may have deleted "buf", already entered it (e.g., when
+-     * it did ":bunload") or aborted the script processing! */
++     * it did ":bunload") or aborted the script processing!
++     * If curwin->w_buffer is null, enter_buffer() will make it valid again */
++    if ((buf_valid(buf) && buf != curbuf
+ # ifdef FEAT_EVAL
+-    if (buf_valid(buf) && buf != curbuf && !aborting())
+-# else
+-    if (buf_valid(buf) && buf != curbuf)
++	    && !aborting()
++# endif
++# ifdef FEAT_WINDOWS
++	 ) || curwin->w_buffer == NULL
+ # endif
++       )
+ #endif
++    {
+ 	enter_buffer(buf);
++#ifdef FEAT_SYN_HL
++	if (old_tw != curbuf->b_p_tw)
++	    check_colorcolumn(curwin);
++#endif
++    }
+ }
+ 
+ /*
+  * Enter a new current buffer.
+- * Old curbuf must have been abandoned already!
++ * Old curbuf must have been abandoned already!  This also means "curbuf" may
++ * be pointing to freed memory.
+  */
+     void
+ enter_buffer(buf)
+@@ -1392,10 +1482,6 @@
+     foldUpdateAll(curwin);	/* update folds (later). */
+ #endif
+ 
+-#ifdef FEAT_SYN_HL
+-    reset_synblock(curwin);
+-    curwin->w_s = &(buf->b_s);
+-#endif
+     /* Get the buffer in the current window. */
+     curwin->w_buffer = buf;
+     curbuf = buf;
+@@ -1406,6 +1492,10 @@
+ 	diff_buf_add(curbuf);
+ #endif
+ 
++#ifdef FEAT_SYN_HL
++    curwin->w_s = &(buf->b_s);
++#endif
++
+     /* Cursor on first line by default. */
+     curwin->w_cursor.lnum = 1;
+     curwin->w_cursor.col = 0;
+@@ -1607,6 +1697,17 @@
+ 	    vim_free(ffname);
+ 	    return NULL;
+ 	}
++#ifdef FEAT_EVAL
++	/* init b: variables */
++	buf->b_vars = dict_alloc();
++	if (buf->b_vars == NULL)
++	{
++	    vim_free(ffname);
++	    vim_free(buf);
++	    return NULL;
++	}
++	init_var_dict(buf->b_vars, &buf->b_bufvar, VAR_SCOPE);
++#endif
+     }
+ 
+     if (ffname != NULL)
+@@ -1642,6 +1743,11 @@
+ #endif
+ 	/* buf->b_nwindows = 0; why was this here? */
+ 	free_buffer_stuff(buf, FALSE);	/* delete local variables et al. */
++
++	/* Init the options. */
++	buf->b_p_initialized = FALSE;
++	buf_copy_options(buf, BCO_ENTER);
++
+ #ifdef FEAT_KEYMAP
+ 	/* need to reload lmaps and set b:keymap_name */
+ 	curbuf->b_kmap_state |= KEYMAP_INIT;
+@@ -1686,9 +1792,6 @@
+     buf->b_wininfo->wi_fpos.lnum = lnum;
+     buf->b_wininfo->wi_win = curwin;
+ 
+-#ifdef FEAT_EVAL
+-    init_var_dict(&buf->b_vars, &buf->b_bufvar);    /* init b: variables */
+-#endif
+ #ifdef FEAT_SYN_HL
+     hash_init(&buf->b_s.b_keywtab);
+     hash_init(&buf->b_s.b_keywtab_ic);
+@@ -1805,9 +1908,6 @@
+ #ifdef FEAT_AUTOCMD
+     clear_string_option(&buf->b_p_ft);
+ #endif
+-#ifdef FEAT_OSFILETYPE
+-    clear_string_option(&buf->b_p_oft);
+-#endif
+ #ifdef FEAT_CINDENT
+     clear_string_option(&buf->b_p_cink);
+     clear_string_option(&buf->b_p_cino);
+@@ -1905,7 +2005,7 @@
+ 	 * "buf" if one exists */
+ 	if (swb_flags & SWB_USEOPEN)
+ 	    wp = buf_jump_open_win(buf);
+-	/* If 'switchbuf' contians "usetab": jump to first window in any tab
++	/* If 'switchbuf' contains "usetab": jump to first window in any tab
+ 	 * page containing "buf" if one exists */
+ 	if (wp == NULL && (swb_flags & SWB_USETAB))
+ 	    wp = buf_jump_open_tab(buf);
+@@ -1917,9 +2017,7 @@
+ 		tabpage_new();
+ 	    else if (win_split(0, 0) == FAIL)	/* Open in a new window */
+ 		return FAIL;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;
+-# endif
++	    RESET_BINDING(curwin);
+ 	}
+     }
+ #endif
+@@ -2042,18 +2140,20 @@
+     return NULL;
+ }
+ 
+-#if defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL) || defined(PROTO)
++#if defined(FEAT_LISTCMDS) || defined(FEAT_EVAL) || defined(FEAT_PERL) \
++	|| defined(PROTO)
+ /*
+  * Find file in buffer list by a regexp pattern.
+  * Return fnum of the found buffer.
+  * Return < 0 for error.
+  */
+     int
+-buflist_findpat(pattern, pattern_end, unlisted, diffmode)
++buflist_findpat(pattern, pattern_end, unlisted, diffmode, curtab_only)
+     char_u	*pattern;
+     char_u	*pattern_end;	/* pointer to first char after pattern */
+     int		unlisted;	/* find unlisted buffers */
+     int		diffmode UNUSED; /* find diff-mode buffers only */
++    int		curtab_only;	/* find buffers in current tab only */
+ {
+     buf_T	*buf;
+     regprog_T	*prog;
+@@ -2121,6 +2221,23 @@
+ #endif
+ 			    && buflist_match(prog, buf) != NULL)
+ 		    {
++			if (curtab_only)
++			{
++			    /* Ignore the match if the buffer is not open in
++			     * the current tab. */
++#ifdef FEAT_WINDOWS
++			    win_T	*wp;
++
++			    for (wp = firstwin; wp != NULL; wp = wp->w_next)
++				if (wp->w_buffer == buf)
++				    break;
++			    if (wp == NULL)
++				continue;
++#else
++			    if (curwin->w_buffer != buf)
++				continue;
++#endif
++			}
+ 			if (match >= 0)		/* already found a match */
+ 			{
+ 			    match = -2;
+@@ -2294,12 +2411,7 @@
+     if (name != NULL)
+     {
+ 	regmatch.regprog = prog;
+-#ifdef CASE_INSENSITIVE_FILENAME
+-	regmatch.rm_ic = TRUE;		/* Always ignore case */
+-#else
+-	regmatch.rm_ic = FALSE;		/* Never ignore case */
+-#endif
+-
++	regmatch.rm_ic = p_fic;	/* ignore case when 'fileignorecase' is set */
+ 	if (vim_regexec(&regmatch, name, (colnr_T)0))
+ 	    match = name;
+ 	else
+@@ -2526,6 +2638,9 @@
+     if (p_fdls >= 0)
+ 	curwin->w_p_fdl = p_fdls;
+ #endif
++#ifdef FEAT_SYN_HL
++    check_colorcolumn(curwin);
++#endif
+ }
+ 
+ /*
+@@ -2576,7 +2691,7 @@
+ 	    continue;
+ 	msg_putchar('\n');
+ 	if (buf_spname(buf) != NULL)
+-	    STRCPY(NameBuff, buf_spname(buf));
++	    vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
+ 	else
+ 	    home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
+ 
+@@ -2690,7 +2805,8 @@
+ 		vim_free(ffname);
+ 		return FAIL;
+ 	    }
+-	    close_buffer(NULL, obuf, DOBUF_WIPE); /* delete from the list */
++	    /* delete from the list */
++	    close_buffer(NULL, obuf, DOBUF_WIPE, FALSE);
+ 	}
+ 	sfname = vim_strsave(sfname);
+ 	if (ffname == NULL || sfname == NULL)
+@@ -2998,7 +3114,7 @@
+ 
+     *p++ = '"';
+     if (buf_spname(curbuf) != NULL)
+-	STRCPY(p, buf_spname(curbuf));
++	vim_strncpy(p, buf_spname(curbuf), IOSIZE - (p - buffer) - 1);
+     else
+     {
+ 	if (!fullname && curbuf->b_fname != NULL)
+@@ -3174,12 +3290,15 @@
+ 	{
+ 	    /* format: "fname + (path) (1 of 2) - VIM" */
+ 
++#define SPACE_FOR_FNAME (IOSIZE - 100)
++#define SPACE_FOR_DIR   (IOSIZE - 20)
++#define SPACE_FOR_ARGNR (IOSIZE - 10)  /* at least room for " - VIM" */
+ 	    if (curbuf->b_fname == NULL)
+-		STRCPY(buf, _("[No Name]"));
++		vim_strncpy(buf, (char_u *)_("[No Name]"), SPACE_FOR_FNAME);
+ 	    else
+ 	    {
+ 		p = transstr(gettail(curbuf->b_fname));
+-		vim_strncpy(buf, p, IOSIZE - 100);
++		vim_strncpy(buf, p, SPACE_FOR_FNAME);
+ 		vim_free(p);
+ 	    }
+ 
+@@ -3203,7 +3322,7 @@
+ 		buf[off++] = ' ';
+ 		buf[off++] = '(';
+ 		home_replace(curbuf, curbuf->b_ffname,
+-					       buf + off, IOSIZE - off, TRUE);
++					buf + off, SPACE_FOR_DIR - off, TRUE);
+ #ifdef BACKSLASH_IN_FILENAME
+ 		/* avoid "c:/name" to be reduced to "c" */
+ 		if (isalpha(buf[off]) && buf[off + 1] == ':')
+@@ -3214,24 +3333,34 @@
+ 		if (p == buf + off)
+ 		    /* must be a help buffer */
+ 		    vim_strncpy(buf + off, (char_u *)_("help"),
+-						  (size_t)(IOSIZE - off - 1));
++					   (size_t)(SPACE_FOR_DIR - off - 1));
+ 		else
+ 		    *p = NUL;
+ 
+-		/* translate unprintable chars */
+-		p = transstr(buf + off);
+-		vim_strncpy(buf + off, p, (size_t)(IOSIZE - off - 1));
+-		vim_free(p);
++		/* Translate unprintable chars and concatenate.  Keep some
++		 * room for the server name.  When there is no room (very long
++		 * file name) use (...). */
++		if (off < SPACE_FOR_DIR)
++		{
++		    p = transstr(buf + off);
++		    vim_strncpy(buf + off, p, (size_t)(SPACE_FOR_DIR - off));
++		    vim_free(p);
++		}
++		else
++		{
++		    vim_strncpy(buf + off, (char_u *)"...",
++					     (size_t)(SPACE_FOR_ARGNR - off));
++		}
+ 		STRCAT(buf, ")");
+ 	    }
+ 
+-	    append_arg_number(curwin, buf, IOSIZE, FALSE);
++	    append_arg_number(curwin, buf, SPACE_FOR_ARGNR, FALSE);
+ 
+ #if defined(FEAT_CLIENTSERVER)
+ 	    if (serverName != NULL)
+ 	    {
+ 		STRCAT(buf, " - ");
+-		STRCAT(buf, serverName);
++		vim_strcat(buf, serverName, IOSIZE);
+ 	    }
+ 	    else
+ #endif
+@@ -3240,9 +3369,8 @@
+ 	    if (maxlen > 0)
+ 	    {
+ 		/* make it shorter by removing a bit in the middle */
+-		len = vim_strsize(buf);
+-		if (len > maxlen)
+-		    trunc_string(buf, buf, maxlen);
++		if (vim_strsize(buf) > maxlen)
++		    trunc_string(buf, buf, maxlen, IOSIZE);
+ 	    }
+ 	}
+     }
+@@ -3278,7 +3406,7 @@
+ 	else
+ 	{
+ 	    if (buf_spname(curbuf) != NULL)
+-		i_name = (char_u *)buf_spname(curbuf);
++		i_name = buf_spname(curbuf);
+ 	    else		    /* use file name only in icon */
+ 		i_name = gettail(curbuf->b_ffname);
+ 	    *i_str = NUL;
+@@ -3363,7 +3491,8 @@
+  * or truncated if too long, fillchar is used for all whitespace.
+  */
+     int
+-build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar, maxwidth, hltab, tabtab)
++build_stl_str_hl(wp, out, outlen, fmt, use_sandbox, fillchar,
++						      maxwidth, hltab, tabtab)
+     win_T	*wp;
+     char_u	*out;		/* buffer to write into != NameBuff */
+     size_t	outlen;		/* length of out[] */
+@@ -3377,7 +3506,7 @@
+     char_u	*p;
+     char_u	*s;
+     char_u	*t;
+-    char_u	*linecont;
++    int		byteval;
+ #ifdef FEAT_EVAL
+     win_T	*o_curwin;
+     buf_T	*o_curbuf;
+@@ -3444,12 +3573,21 @@
+ 	fillchar = '-';
+ #endif
+ 
+-    /*
+-     * Get line & check if empty (cursorpos will show "0-1").
+-     * If inversion is possible we use it. Else '=' characters are used.
+-     */
+-    linecont = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE);
+-    empty_line = (*linecont == NUL);
++    /* Get line & check if empty (cursorpos will show "0-1").  Note that
++     * p will become invalid when getting another buffer line. */
++    p = ml_get_buf(wp->w_buffer, wp->w_cursor.lnum, FALSE);
++    empty_line = (*p == NUL);
++
++    /* Get the byte value now, in case we need it below. This is more
++     * efficient than making a copy of the line. */
++    if (wp->w_cursor.col > (colnr_T)STRLEN(p))
++	byteval = 0;
++    else
++#ifdef FEAT_MBYTE
++	byteval = (*mb_ptr2char)(p + wp->w_cursor.col);
++#else
++	byteval = p[wp->w_cursor.col];
++#endif
+ 
+     groupdepth = 0;
+     p = out;
+@@ -3458,6 +3596,18 @@
+     prevchar_isitem = FALSE;
+     for (s = usefmt; *s; )
+     {
++	if (curitem == STL_MAX_ITEM)
++	{
++	    /* There are too many items.  Add the error code to the statusline
++	     * to give the user a hint about what went wrong. */
++	    if (p + 6 < out + outlen)
++	    {
++		mch_memmove(p, " E541", (size_t)5);
++		p += 5;
++	    }
++	    break;
++	}
++
+ 	if (*s != NUL && *s != '%')
+ 	    prevchar_isflag = prevchar_isitem = FALSE;
+ 
+@@ -3473,6 +3623,8 @@
+ 	 * Handle one '%' item.
+ 	 */
+ 	s++;
++	if (*s == NUL)  /* ignore trailing % */
++	    break;
+ 	if (*s == '%')
+ 	{
+ 	    if (p + 1 >= out + outlen)
+@@ -3679,7 +3831,7 @@
+ 	case STL_FILENAME:
+ 	    fillable = FALSE;	/* don't change ' ' to fillchar */
+ 	    if (buf_spname(wp->w_buffer) != NULL)
+-		STRCPY(NameBuff, buf_spname(wp->w_buffer));
++		vim_strncpy(NameBuff, buf_spname(wp->w_buffer), MAXPATHL - 1);
+ 	    else
+ 	    {
+ 		t = (opt == STL_FULLPATH) ? wp->w_buffer->b_ffname
+@@ -3813,16 +3965,7 @@
+ 	case STL_BYTEVAL_X:
+ 	    base = 'X';
+ 	case STL_BYTEVAL:
+-	    if (wp->w_cursor.col > (colnr_T)STRLEN(linecont))
+-		num = 0;
+-	    else
+-	    {
+-#ifdef FEAT_MBYTE
+-		num = (*mb_ptr2char)(linecont + wp->w_cursor.col);
+-#else
+-		num = linecont[wp->w_cursor.col];
+-#endif
+-	    }
++	    num = byteval;
+ 	    if (num == NL)
+ 		num = 0;
+ 	    else if (num == CAR && get_fileformat(wp->w_buffer) == EOL_MAC)
+@@ -4355,7 +4498,12 @@
+ {
+     int		i;
+     win_T	*wp, *wpnext;
+-    char_u	*opened;	/* array of flags for which args are open */
++    char_u	*opened;	/* Array of weight for which args are open:
++				 *  0: not opened
++				 *  1: opened in other tab
++				 *  2: opened in curtab
++				 *  3: opened in curtab and curwin
++				 */
+     int		opened_len;	/* length of opened[] */
+     int		use_firstwin = FALSE;	/* use first window for arglist */
+     int		split_ret = OK;
+@@ -4364,6 +4512,8 @@
+     buf_T	*buf;
+     tabpage_T	*tpnext;
+     int		had_tab = cmdmod.tab;
++    win_T	*old_curwin, *last_curwin;
++    tabpage_T	*old_curtab, *last_curtab;
+     win_T	*new_curwin = NULL;
+     tabpage_T	*new_curtab = NULL;
+ 
+@@ -4380,6 +4530,15 @@
+     if (opened == NULL)
+ 	return;
+ 
++    /* Autocommands may do anything to the argument list.  Make sure it's not
++     * freed while we are working here by "locking" it.  We still have to
++     * watch out for its size to be changed. */
++    alist = curwin->w_alist;
++    ++alist->al_refcount;
++
++    old_curwin = curwin;
++    old_curtab = curtab;
++
+ #ifdef FEAT_GUI
+     need_mouse_correct = TRUE;
+ #endif
+@@ -4392,7 +4551,7 @@
+      * When the ":tab" modifier was used do this for all tab pages.
+      */
+     if (had_tab > 0)
+-	goto_tabpage_tp(first_tabpage);
++	goto_tabpage_tp(first_tabpage, TRUE, TRUE);
+     for (;;)
+     {
+ 	tpnext = curtab->tp_next;
+@@ -4401,36 +4560,51 @@
+ 	    wpnext = wp->w_next;
+ 	    buf = wp->w_buffer;
+ 	    if (buf->b_ffname == NULL
+-		    || buf->b_nwindows > 1
++		    || (!keep_tabs && buf->b_nwindows > 1)
+ #ifdef FEAT_VERTSPLIT
+ 		    || wp->w_width != Columns
+ #endif
+ 		    )
+-		i = ARGCOUNT;
++		i = opened_len;
+ 	    else
+ 	    {
+ 		/* check if the buffer in this window is in the arglist */
+-		for (i = 0; i < ARGCOUNT; ++i)
++		for (i = 0; i < opened_len; ++i)
+ 		{
+-		    if (ARGLIST[i].ae_fnum == buf->b_fnum
+-			    || fullpathcmp(alist_name(&ARGLIST[i]),
+-					      buf->b_ffname, TRUE) & FPC_SAME)
++		    if (i < alist->al_ga.ga_len
++			    && (AARGLIST(alist)[i].ae_fnum == buf->b_fnum
++				|| fullpathcmp(alist_name(&AARGLIST(alist)[i]),
++					      buf->b_ffname, TRUE) & FPC_SAME))
+ 		    {
+-			if (i < opened_len)
++			int weight = 1;
++
++			if (old_curtab == curtab)
++			{
++			    ++weight;
++			    if (old_curwin == wp)
++				++weight;
++			}
++
++			if (weight > (int)opened[i])
+ 			{
+-			    opened[i] = TRUE;
++			    opened[i] = (char_u)weight;
+ 			    if (i == 0)
+ 			    {
++				if (new_curwin != NULL)
++				    new_curwin->w_arg_idx = opened_len;
+ 				new_curwin = wp;
+ 				new_curtab = curtab;
+ 			    }
+ 			}
+-			if (wp->w_alist != curwin->w_alist)
++			else if (keep_tabs)
++			    i = opened_len;
++
++			if (wp->w_alist != alist)
+ 			{
+ 			    /* Use the current argument list for all windows
+ 			     * containing a file from it. */
+ 			    alist_unlink(wp->w_alist);
+-			    wp->w_alist = curwin->w_alist;
++			    wp->w_alist = alist;
+ 			    ++wp->w_alist->al_refcount;
+ 			}
+ 			break;
+@@ -4439,7 +4613,7 @@
+ 	    }
+ 	    wp->w_arg_idx = i;
+ 
+-	    if (i == ARGCOUNT && !keep_tabs)	/* close this window */
++	    if (i == opened_len && !keep_tabs)/* close this window */
+ 	    {
+ 		if (P_HID(buf) || forceit || buf->b_nwindows > 1
+ 							|| !bufIsChanged(buf))
+@@ -4461,7 +4635,8 @@
+ 		    }
+ #ifdef FEAT_WINDOWS
+ 		    /* don't close last window */
+-		    if (firstwin == lastwin && first_tabpage->tp_next == NULL)
++		    if (firstwin == lastwin
++			    && (first_tabpage->tp_next == NULL || !had_tab))
+ #endif
+ 			use_firstwin = TRUE;
+ #ifdef FEAT_WINDOWS
+@@ -4488,27 +4663,23 @@
+ 	if (!valid_tabpage(tpnext))
+ 	    tpnext = first_tabpage;	/* start all over...*/
+ # endif
+-	goto_tabpage_tp(tpnext);
++	goto_tabpage_tp(tpnext, TRUE, TRUE);
+     }
+ 
+     /*
+      * Open a window for files in the argument list that don't have one.
+      * ARGCOUNT may change while doing this, because of autocommands.
+      */
+-    if (count > ARGCOUNT || count <= 0)
+-	count = ARGCOUNT;
+-
+-    /* Autocommands may do anything to the argument list.  Make sure it's not
+-     * freed while we are working here by "locking" it.  We still have to
+-     * watch out for its size to be changed. */
+-    alist = curwin->w_alist;
+-    ++alist->al_refcount;
++    if (count > opened_len || count <= 0)
++	count = opened_len;
+ 
+ #ifdef FEAT_AUTOCMD
+     /* Don't execute Win/Buf Enter/Leave autocommands here. */
+     ++autocmd_no_enter;
+     ++autocmd_no_leave;
+ #endif
++    last_curwin = curwin;
++    last_curtab = curtab;
+     win_enter(lastwin, FALSE);
+ #ifdef FEAT_WINDOWS
+     /* ":drop all" should re-use an empty window to avoid "--remote-tab"
+@@ -4518,11 +4689,11 @@
+ 	use_firstwin = TRUE;
+ #endif
+ 
+-    for (i = 0; i < count && i < alist->al_ga.ga_len && !got_int; ++i)
++    for (i = 0; i < count && i < opened_len && !got_int; ++i)
+     {
+ 	if (alist == &global_alist && i == global_alist.al_ga.ga_len - 1)
+ 	    arg_had_last = TRUE;
+-	if (i < opened_len && opened[i])
++	if (opened[i] > 0)
+ 	{
+ 	    /* Move the already present window to below the current window */
+ 	    if (curwin->w_arg_idx != i)
+@@ -4531,7 +4702,13 @@
+ 		{
+ 		    if (wpnext->w_arg_idx == i)
+ 		    {
+-			win_move_after(wpnext, curwin);
++			if (keep_tabs)
++			{
++			    new_curwin = wpnext;
++			    new_curtab = curtab;
++			}
++			else
++			    win_move_after(wpnext, curwin);
+ 			break;
+ 		    }
+ 		}
+@@ -4586,9 +4763,17 @@
+ #ifdef FEAT_AUTOCMD
+     --autocmd_no_enter;
+ #endif
++    /* restore last referenced tabpage's curwin */
++    if (last_curtab != new_curtab)
++    {
++	if (valid_tabpage(last_curtab))
++	    goto_tabpage_tp(last_curtab, TRUE, TRUE);
++	if (win_valid(last_curwin))
++	    win_enter(last_curwin, FALSE);
++    }
+     /* to window with first arg */
+     if (valid_tabpage(new_curtab))
+-	goto_tabpage_tp(new_curtab);
++	goto_tabpage_tp(new_curtab, TRUE, TRUE);
+     if (win_valid(new_curwin))
+ 	win_enter(new_curwin, FALSE);
+ 
+@@ -4640,7 +4825,7 @@
+      */
+ #ifdef FEAT_WINDOWS
+     if (had_tab > 0)
+-	goto_tabpage_tp(first_tabpage);
++	goto_tabpage_tp(first_tabpage, TRUE, TRUE);
+     for (;;)
+     {
+ #endif
+@@ -4658,7 +4843,11 @@
+ #ifdef FEAT_WINDOWS
+ 		    || (had_tab > 0 && wp != firstwin)
+ #endif
+-		    ) && firstwin != lastwin)
++		    ) && firstwin != lastwin
++#ifdef FEAT_AUTOCMD
++		    && !(wp->w_closing || wp->w_buffer->b_closing)
++#endif
++		    )
+ 	    {
+ 		win_close(wp, FALSE);
+ #ifdef FEAT_AUTOCMD
+@@ -4676,7 +4865,7 @@
+ 	/* Without the ":tab" modifier only do the current tab page. */
+ 	if (had_tab == 0 || tpnext == NULL)
+ 	    break;
+-	goto_tabpage_tp(tpnext);
++	goto_tabpage_tp(tpnext, TRUE, TRUE);
+     }
+ #endif
+ 
+@@ -5111,7 +5300,7 @@
+  * Return special buffer name.
+  * Returns NULL when the buffer has a normal file name.
+  */
+-    char *
++    char_u *
+ buf_spname(buf)
+     buf_T	*buf;
+ {
+@@ -5130,9 +5319,9 @@
+ 		goto win_found;
+ win_found:
+ 	if (win != NULL && win->w_llist_ref != NULL)
+-	    return _(msg_loclist);
++	    return (char_u *)_(msg_loclist);
+ 	else
+-	    return _(msg_qflist);
++	    return (char_u *)_(msg_qflist);
+     }
+ #endif
+ #ifdef FEAT_QUICKFIX
+@@ -5141,12 +5330,12 @@
+     if (bt_nofile(buf))
+     {
+ 	if (buf->b_sfname != NULL)
+-	    return (char *)buf->b_sfname;
+-	return _("[Scratch]");
++	    return buf->b_sfname;
++	return (char_u *)_("[Scratch]");
+     }
+ #endif
+     if (buf->b_fname == NULL)
+-	return _("[No Name]");
++	return (char_u *)_("[No Name]");
+     return NULL;
+ }
+ 
+@@ -5417,7 +5606,7 @@
+ /*
+  * Delete signs in buffer "buf".
+  */
+-    static void
++    void
+ buf_delete_signs(buf)
+     buf_T	*buf;
+ {
+@@ -5465,7 +5654,7 @@
+ 	buf = firstbuf;
+     else
+ 	buf = rbuf;
+-    while (buf != NULL)
++    while (buf != NULL && !got_int)
+     {
+ 	if (buf->b_signlist != NULL)
+ 	{
+@@ -5473,7 +5662,7 @@
+ 	    MSG_PUTS_ATTR(lbuf, hl_attr(HLF_D));
+ 	    msg_putchar('\n');
+ 	}
+-	for (p = buf->b_signlist; p != NULL; p = p->next)
++	for (p = buf->b_signlist; p != NULL && !got_int; p = p->next)
+ 	{
+ 	    vim_snprintf(lbuf, BUFSIZ, _("    line=%ld  id=%d  name=%s"),
+ 			   (long)p->lnum, p->id, sign_typenr2name(p->typenr));
+@@ -5606,7 +5795,7 @@
+     if (!aucmd)		    /* Don't trigger BufDelete autocommands here. */
+ 	block_autocmds();
+ #endif
+-    close_buffer(NULL, buf, DOBUF_WIPE);
++    close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
+ #ifdef FEAT_AUTOCMD
+     if (!aucmd)
+ 	unblock_autocmds();
+diff -Naur vim73.orig/src/charset.c vim73/src/charset.c
+--- vim73.orig/src/charset.c	2010-08-12 18:16:04.000000000 +0000
++++ vim73/src/charset.c	2013-06-07 17:07:30.242255653 +0000
+@@ -284,7 +284,12 @@
+ 		}
+ 		++c;
+ 	    }
++
++	    c = *p;
+ 	    p = skip_to_option_part(p);
++	    if (c == ',' && *p == NUL)
++		/* Trailing comma is not allowed. */
++		return FAIL;
+ 	}
+     }
+     chartab_initialized = TRUE;
+@@ -463,41 +468,42 @@
+ 	    if (enc_utf8)
+ 	    {
+ 		int	c = utf_ptr2char(STR_PTR(i));
+-		int	ol = utf_ptr2len(STR_PTR(i));
++		int	olen = utf_ptr2len(STR_PTR(i));
+ 		int	lc = utf_tolower(c);
+ 
+ 		/* Only replace the character when it is not an invalid
+ 		 * sequence (ASCII character or more than one byte) and
+ 		 * utf_tolower() doesn't return the original character. */
+-		if ((c < 0x80 || ol > 1) && c != lc)
++		if ((c < 0x80 || olen > 1) && c != lc)
+ 		{
+-		    int	    nl = utf_char2len(lc);
++		    int	    nlen = utf_char2len(lc);
+ 
+ 		    /* If the byte length changes need to shift the following
+ 		     * characters forward or backward. */
+-		    if (ol != nl)
++		    if (olen != nlen)
+ 		    {
+-			if (nl > ol)
++			if (nlen > olen)
+ 			{
+-			    if (buf == NULL ? ga_grow(&ga, nl - ol + 1) == FAIL
+-						    : len + nl - ol >= buflen)
++			    if (buf == NULL
++				    ? ga_grow(&ga, nlen - olen + 1) == FAIL
++				    : len + nlen - olen >= buflen)
+ 			    {
+ 				/* out of memory, keep old char */
+ 				lc = c;
+-				nl = ol;
++				nlen = olen;
+ 			    }
+ 			}
+-			if (ol != nl)
++			if (olen != nlen)
+ 			{
+ 			    if (buf == NULL)
+ 			    {
+-				STRMOVE(GA_PTR(i) + nl, GA_PTR(i) + ol);
+-				ga.ga_len += nl - ol;
++				STRMOVE(GA_PTR(i) + nlen, GA_PTR(i) + olen);
++				ga.ga_len += nlen - olen;
+ 			    }
+ 			    else
+ 			    {
+-				STRMOVE(buf + i + nl, buf + i + ol);
+-				len += nl - ol;
++				STRMOVE(buf + i + nlen, buf + i + olen);
++				len += nlen - olen;
+ 			    }
+ 			}
+ 		    }
+@@ -763,7 +769,7 @@
+ }
+ 
+ /*
+- * Return the number of characters string "s" will take on the screen,
++ * Return the number of character cells string "s" will take on the screen,
+  * counting TABs as two characters: "^I".
+  */
+     int
+@@ -774,8 +780,8 @@
+ }
+ 
+ /*
+- * Return the number of characters string "s[len]" will take on the screen,
+- * counting TABs as two characters: "^I".
++ * Return the number of character cells string "s[len]" will take on the
++ * screen, counting TABs as two characters: "^I".
+  */
+     int
+ vim_strnsize(s, len)
+@@ -904,6 +910,14 @@
+ vim_iswordc(c)
+     int c;
+ {
++    return vim_iswordc_buf(c, curbuf);
++}
++
++    int
++vim_iswordc_buf(c, buf)
++    int		c;
++    buf_T	*buf;
++{
+ #ifdef FEAT_MBYTE
+     if (c >= 0x100)
+     {
+@@ -913,7 +927,7 @@
+ 	    return utf_class(c) >= 2;
+     }
+ #endif
+-    return (c > 0 && c < 0x100 && GET_CHARTAB(curbuf, c) != 0);
++    return (c > 0 && c < 0x100 && GET_CHARTAB(buf, c) != 0);
+ }
+ 
+ /*
+@@ -930,19 +944,17 @@
+     return GET_CHARTAB(curbuf, *p) != 0;
+ }
+ 
+-#if defined(FEAT_SYN_HL) || defined(PROTO)
+     int
+-vim_iswordc_buf(p, buf)
++vim_iswordp_buf(p, buf)
+     char_u	*p;
+     buf_T	*buf;
+ {
+-# ifdef FEAT_MBYTE
++#ifdef FEAT_MBYTE
+     if (has_mbyte && MB_BYTE2LEN(*p) > 1)
+ 	return mb_get_class(p) >= 2;
+-# endif
++#endif
+     return (GET_CHARTAB(buf, *p) != 0);
+ }
+-#endif
+ 
+ /*
+  * return TRUE if 'c' is a valid file-name character
+@@ -1601,10 +1613,9 @@
+ #define LATIN1LOWER 'l'
+ #define LATIN1UPPER 'U'
+ 
+-/*                                                                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]%_'abcdefghijklmnopqrstuvwxyz{|}~                                  ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ */
+ static char_u latin1flags[257] = "                                                                 UUUUUUUUUUUUUUUUUUUUUUUUUU      llllllllllllllllllllllllll                                                                     UUUUUUUUUUUUUUUUUUUUUUU UUUUUUUllllllllllllllllllllllll llllllll";
+-static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~
+ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ×ØÙÚÛÜÝÞßÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖ÷ØÙÚÛÜÝÞÿ";
+-static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~
+ ¡¢£€¥Š§š©ª«¬­®¯°±²³Žµ¶·ž¹º»ŒœŸ¿àáâãäåæçèéêëìíîïðñòóôõö×øùúûüýþßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ";
++static char_u latin1upper[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xf7\xd8\xd9\xda\xdb\xdc\xdd\xde\xff";
++static char_u latin1lower[257] = "                                 !\"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xd7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff";
+ 
+     int
+ vim_islower(c)
+@@ -1829,7 +1840,7 @@
+ 			hex = 0;	/* can't be octal */
+ 			break;
+ 		    }
+-		    if (ptr[n] > '0')
++		    if (ptr[n] >= '0')
+ 			hex = '0';	/* assume octal */
+ 		}
+ 	    }
+diff -Naur vim73.orig/src/config.h.in vim73/src/config.h.in
+--- vim73.orig/src/config.h.in	2010-08-13 13:45:27.000000000 +0000
++++ vim73/src/config.h.in	2013-06-07 17:07:30.272255567 +0000
+@@ -161,6 +161,7 @@
+ #undef HAVE_FSYNC
+ #undef HAVE_GETCWD
+ #undef HAVE_GETPSEUDOTTY
++#undef HAVE_GETPWENT
+ #undef HAVE_GETPWNAM
+ #undef HAVE_GETPWUID
+ #undef HAVE_GETRLIMIT
+@@ -346,9 +347,15 @@
+ /* Define if dynamic python does not require RTLD_GLOBAL */
+ #undef PY_NO_RTLD_GLOBAL
+ 
++/* Define if dynamic python3 does not require RTLD_GLOBAL */
++#undef PY3_NO_RTLD_GLOBAL
++
+ /* Define if you want to include the Ruby interpreter. */
+ #undef FEAT_RUBY
+ 
++/* Define for linking via dlopen() or LoadLibrary() */
++#undef DYNAMIC_RUBY
++
+ /* Define if you want to include the Tcl interpreter. */
+ #undef FEAT_TCL
+ 
+@@ -357,6 +364,7 @@
+ 
+ /* Define if you want to add support for ACL */
+ #undef HAVE_POSIX_ACL
++#undef HAVE_SOLARIS_ZFS_ACL
+ #undef HAVE_SOLARIS_ACL
+ #undef HAVE_AIX_ACL
+ 
+@@ -431,3 +439,6 @@
+ 
+ /* Define if fcntl()'s F_SETFD command knows about FD_CLOEXEC */
+ #undef HAVE_FD_CLOEXEC
++
++/* Define if you want Cygwin to use the WIN32 clipboard, not compatible with X11*/
++#undef FEAT_CYGWIN_WIN32_CLIPBOARD
+diff -Naur vim73.orig/src/config.mk.in vim73/src/config.mk.in
+--- vim73.orig/src/config.mk.in	2010-07-17 15:28:51.000000000 +0000
++++ vim73/src/config.mk.in	2013-06-07 17:07:30.288922186 +0000
+@@ -30,6 +30,7 @@
+ CPP		= @CPP@
+ CPP_MM		= @CPP_MM@
+ DEPEND_CFLAGS_FILTER = @DEPEND_CFLAGS_FILTER@
++LINK_AS_NEEDED	= @LINK_AS_NEEDED@
+ X_CFLAGS	= @X_CFLAGS@
+ X_LIBS_DIR	= @X_LIBS@
+ X_PRE_LIBS	= @X_PRE_LIBS@
+diff -Naur vim73.orig/src/configure.in vim73/src/configure.in
+--- vim73.orig/src/configure.in	2010-08-13 14:15:17.000000000 +0000
++++ vim73/src/configure.in	2013-06-07 17:07:30.328922072 +0000
+@@ -28,6 +28,16 @@
+ AC_HEADER_STDC
+ AC_HEADER_SYS_WAIT
+ 
++dnl Check for the flag that fails if stuff are missing.
++
++AC_MSG_CHECKING(--enable-fail-if-missing argument)
++AC_ARG_ENABLE(fail_if_missing,
++	[  --enable-fail-if-missing    Fail if dependencies on additional features
++     specified on the command line are missing.], 
++	[fail_if_missing="yes"],
++	[fail_if_missing="no"])
++AC_MSG_RESULT($fail_if_missing)
++
+ dnl Set default value for CFLAGS if none is defined or it's empty
+ if test -z "$CFLAGS"; then
+   CFLAGS="-O"
+@@ -296,7 +306,7 @@
+ AC_SUBST(line_break)
+ 
+ if test "$cf_cv_ebcdic" = "yes"; then
+-dnl If we have EBCDIC we most likley have z/OS Unix, let's test it!
++dnl If we have EBCDIC we most likely have z/OS Unix, let's test it!
+ AC_MSG_CHECKING(for z/OS Unix)
+ case `uname` in
+     OS/390)	zOSUnix="yes";
+@@ -319,15 +329,18 @@
+ 		  echo ""
+ 		  echo "------------------------------------------"
+ 		  echo " On z/OS Unix, the environment variable"
+-		  echo " __CC_${ccn}MODE must be set to \"1\"!"
++		  echo " _CC_${ccn}MODE must be set to \"1\"!"
+ 		  echo " Do:"
+ 		  echo "    export _CC_${ccn}MODE=1"
+ 		  echo " and then call configure again."
+ 		  echo "------------------------------------------"
+ 		  exit 1
+ 		fi
+-		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float\\(IEEE\\)";
+-                LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
++		# Set CFLAGS for configure process.
++		# This will be reset later for config.mk.
++		# Use haltonmsg to force error for missing H files.
++		CFLAGS="$CFLAGS -D_ALL_SOURCE -Wc,float(ieee),haltonmsg(3296)";
++		LDFLAGS="$LDFLAGS -Wl,EDIT=NO"
+ 		AC_MSG_RESULT(yes)
+ 		;;
+     *)		zOSUnix="no";
+@@ -442,31 +455,31 @@
+ 
+   LUA_INC=
+   if test "X$vi_cv_path_lua_pfx" != "X"; then
++    dnl -- try to find Lua executable
++    AC_PATH_PROG(vi_cv_path_lua, lua)
++    if test "X$vi_cv_path_lua" != "X"; then
++      dnl -- find Lua version
++      AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
++      [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
++    fi
+     AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include)
+     if test -f $vi_cv_path_lua_pfx/include/lua.h; then
+       AC_MSG_RESULT(yes)
+     else
+       AC_MSG_RESULT(no)
+-      dnl -- try to find Lua executable
+-      AC_PATH_PROG(vi_cv_path_lua, lua)
+-      if test "X$vi_cv_path_lua" != "X"; then
+-        dnl -- find Lua version
+-        AC_CACHE_CHECK(Lua version, vi_cv_version_lua,
+-        [ vi_cv_version_lua=`${vi_cv_path_lua} -e "print(_VERSION)" | sed 's/.* //'` ])
+-        AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
+-        if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
+-          AC_MSG_RESULT(yes)
+-          LUA_INC=/lua$vi_cv_version_lua
+-        else
+-          AC_MSG_RESULT(no)
+-          vi_cv_path_lua_pfx=
+-        fi
++      AC_MSG_CHECKING(if lua.h can be found in $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua)
++      if test -f $vi_cv_path_lua_pfx/include/lua$vi_cv_version_lua/lua.h; then
++        AC_MSG_RESULT(yes)
++        LUA_INC=/lua$vi_cv_version_lua
++      else
++        AC_MSG_RESULT(no)
++        vi_cv_path_lua_pfx=
+       fi
+     fi
+   fi
+ 
+   if test "X$vi_cv_path_lua_pfx" != "X"; then
+-    if test "X$vi_cv_version_lua" != "X"; then
++    if test "X$LUA_INC" != "X"; then
+       dnl Test alternate location using version
+       LUA_LIBS="-L${vi_cv_path_lua_pfx}/lib -llua$vi_cv_version_lua"
+     else
+@@ -478,19 +491,38 @@
+     LUA_PRO="if_lua.pro"
+     AC_DEFINE(FEAT_LUA)
+     if test "$enable_luainterp" = "dynamic"; then
+-      dnl Determine the SONAME for the current version, but fallback to
+-      dnl liblua${vi_cv_version_lua}.so if no SONAME-versioned file is found.
+-      for i in 0 1 2 3 4 5 6 7 8 9; do
+-	if test -f "${vi_cv_path_lua_pfx}/lib/liblua${vi_cv_version_lua}.so.$i"; then
+-	  LUA_SONAME=".$i"
+-	  break
+-	fi
+-      done
++      if test -f "${vi_cv_path_lua_pfx}/bin/cyglua-${vi_cv_version_lua}.dll"; then
++	vi_cv_dll_name_lua="cyglua-${vi_cv_version_lua}.dll"
++      else
++	multiarch=`dpkg-architecture -qDEB_HOST_MULTIARCH 2> /dev/null`
++	if test "X$multiarch" != "X"; then
++	  lib_multiarch="lib/${multiarch}"
++	fi
++	dnl Determine the sover for the current version, but fallback to
++	dnl liblua${vi_cv_version_lua}.so if no sover-versioned file is found.
++	for subdir in "${lib_multiarch}" lib64 lib; do
++	  if test -z "$subdir"; then
++	    continue
++	  fi
++	  for sover in "${vi_cv_version_lua}.so" "-${vi_cv_version_lua}.so" ".so.${vi_cv_version_lua}"; do
++	    for i in .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 ""; do
++	      if test -f "${vi_cv_path_lua_pfx}/${subdir}/liblua${sover}$i"; then
++		sover2="$i"
++		break 3
++	      fi
++	    done
++	  done
++	done
++	vi_cv_dll_name_lua="liblua${sover}$sover2"
++      fi
+       AC_DEFINE(DYNAMIC_LUA)
+       LUA_LIBS=""
+-      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"liblua${vi_cv_version_lua}.so$LUA_SONAME\\\" $LUA_CFLAGS"
++      LUA_CFLAGS="-DDYNAMIC_LUA_DLL=\\\"${vi_cv_dll_name_lua}\\\" $LUA_CFLAGS"
+     fi
+   fi
++  if test "$fail_if_missing" = "yes" -a -z "$LUA_SRC"; then
++    AC_MSG_ERROR([could not configure lua])
++  fi
+   AC_SUBST(LUA_SRC)
+   AC_SUBST(LUA_OBJ)
+   AC_SUBST(LUA_PRO)
+@@ -568,13 +600,27 @@
+ 	SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/plt
+       else
+ 	AC_MSG_RESULT(no)
+-	AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
+-	if test -f /usr/include/plt/scheme.h; then
++	AC_MSG_CHECKING(if scheme.h can be found in $vi_cv_path_mzscheme_pfx/include/racket)
++	if test -f $vi_cv_path_mzscheme_pfx/include/racket/scheme.h; then
+ 	  AC_MSG_RESULT(yes)
+-	  SCHEME_INC=/usr/include/plt
++	  SCHEME_INC=${vi_cv_path_mzscheme_pfx}/include/racket
+ 	else
+ 	  AC_MSG_RESULT(no)
+-	  vi_cv_path_mzscheme_pfx=
++	  AC_MSG_CHECKING(if scheme.h can be found in /usr/include/plt/)
++	  if test -f /usr/include/plt/scheme.h; then
++	    AC_MSG_RESULT(yes)
++	    SCHEME_INC=/usr/include/plt
++	  else
++	    AC_MSG_RESULT(no)
++	    AC_MSG_CHECKING(if scheme.h can be found in /usr/include/racket/)
++	    if test -f /usr/include/racket/scheme.h; then
++	      AC_MSG_RESULT(yes)
++	      SCHEME_INC=/usr/include/racket
++	    else
++	      AC_MSG_RESULT(no)
++	      vi_cv_path_mzscheme_pfx=
++	    fi
++	  fi
+ 	fi
+       fi
+     fi
+@@ -582,17 +628,28 @@
+ 
+   if test "X$vi_cv_path_mzscheme_pfx" != "X"; then
+     if test "x$MACOSX" = "xyes"; then
+-      MZSCHEME_LIBS="-framework PLT_MzScheme"
++      MZSCHEME_LIBS="-framework Racket"
++      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+     elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.a"
+       MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
+-    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"; then
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket3m.a"
++      MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.a"; then
++      MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libracket.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
++    elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a"; then
+       MZSCHEME_LIBS="${vi_cv_path_mzscheme_pfx}/lib/libmzscheme.a ${vi_cv_path_mzscheme_pfx}/lib/libmzgc.a"
+     else
+       dnl Using shared objects
+       if test -f "${vi_cv_path_mzscheme_pfx}/lib/libmzscheme3m.so"; then
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme3m"
+ 	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket3m.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket3m"
++	MZSCHEME_CFLAGS="-DMZ_PRECISE_GC"
++      elif test -f "${vi_cv_path_mzscheme_pfx}/lib/libracket.so"; then
++        MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lracket -lmzgc"
+       else
+         MZSCHEME_LIBS="-L${vi_cv_path_mzscheme_pfx}/lib -lmzscheme -lmzgc"
+       fi
+@@ -605,17 +662,48 @@
+ 	MZSCHEME_LIBS="${MZSCHEME_LIBS} -R ${vi_cv_path_mzscheme_pfx}/lib"
+       fi
+     fi
++
++    AC_MSG_CHECKING(for racket collects directory)
+     if test -d $vi_cv_path_mzscheme_pfx/lib/plt/collects; then
+-      SCHEME_COLLECTS=lib/plt/
++      SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/plt/
++    else
++      if test -d $vi_cv_path_mzscheme_pfx/lib/racket/collects; then
++	SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/lib/racket/
++      else
++	if test -d $vi_cv_path_mzscheme_pfx/share/racket/collects; then
++	  SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/share/racket/
++	else
++	  if test -d $vi_cv_path_mzscheme_pfx/collects; then
++	    SCHEME_COLLECTS=$vi_cv_path_mzscheme_pfx/
++	  fi
++	fi
++      fi
+     fi
+-    if test -f "${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+-      dnl need to generate bytecode for MzScheme base
++    if test "X$SCHEME_COLLECTS" != "X" ; then
++      AC_MSG_RESULT(${SCHEME_COLLECTS})
++    else
++      AC_MSG_RESULT(not found)
++    fi
++
++    AC_MSG_CHECKING(for mzscheme_base.c)
++    if test -f "${SCHEME_COLLECTS}collects/scheme/base.ss" ; then
+       MZSCHEME_EXTRA="mzscheme_base.c"
++    else
++      if test -f "${SCHEME_COLLECTS}collects/scheme/base.rkt" ; then
++	MZSCHEME_EXTRA="mzscheme_base.c"
++      fi
++    fi
++    if test "X$MZSCHEME_EXTRA" != "X" ; then
++      dnl need to generate bytecode for MzScheme base
+       MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -DINCLUDE_MZSCHEME_BASE"
+       MZSCHEME_MZC="${vi_cv_path_mzscheme_pfx}/bin/mzc"
++      AC_MSG_RESULT(needed)
++    else
++      AC_MSG_RESULT(not needed)
+     fi
++
+     MZSCHEME_CFLAGS="${MZSCHEME_CFLAGS} -I${SCHEME_INC} \
+-      -DMZSCHEME_COLLECTS='\"${vi_cv_path_mzscheme_pfx}/${SCHEME_COLLECTS}collects\"'"
++      -DMZSCHEME_COLLECTS='\"${SCHEME_COLLECTS}collects\"'"
+     MZSCHEME_SRC="if_mzsch.c"
+     MZSCHEME_OBJ="objects/if_mzsch.o"
+     MZSCHEME_PRO="if_mzsch.pro"
+@@ -747,6 +835,10 @@
+       PERL_CFLAGS="-DDYNAMIC_PERL_DLL=\\\"$libperl\\\" $PERL_CFLAGS"
+     fi
+   fi
++
++  if test "$fail_if_missing" = "yes" -a "$perl_ok" != "yes"; then
++    AC_MSG_ERROR([could not configure perl])
++  fi
+ fi
+ AC_SUBST(shrpenv)
+ AC_SUBST(PERL_SRC)
+@@ -762,7 +854,7 @@
+ AC_MSG_RESULT($enable_pythoninterp)
+ if test "$enable_pythoninterp" = "yes" -o "$enable_pythoninterp" = "dynamic"; then
+   dnl -- find the python executable
+-  AC_PATH_PROG(vi_cv_path_python, python)
++  AC_PATH_PROGS(vi_cv_path_python, python2 python)
+   if test "X$vi_cv_path_python" != "X"; then
+ 
+     dnl -- get its version number
+@@ -771,10 +863,10 @@
+ 	    ${vi_cv_path_python} -c 'import sys; print sys.version[:3]'`
+     ]])
+ 
+-    dnl -- it must be at least version 1.4
+-    AC_MSG_CHECKING(Python is 1.4 or better)
++    dnl -- it must be at least version 2.2
++    AC_MSG_CHECKING(Python is 2.2 or better)
+     if ${vi_cv_path_python} -c \
+-	"import sys; sys.exit(${vi_cv_var_python_version} < 1.4)"
++	"import sys; sys.exit(${vi_cv_var_python_version} < 2.2)"
+     then
+       AC_MSG_RESULT(yep)
+ 
+@@ -807,14 +899,19 @@
+       AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python_conf,
+       [
+ 	vi_cv_path_python_conf=
+-	for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
+-	  for subdir in lib64 lib share; do
+-	    d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
+-	    if test -d "$d" && test -f "$d/config.c"; then
+-	      vi_cv_path_python_conf="$d"
+-	    fi
++	d=`${vi_cv_path_python} -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LIBPL')"`
++	if test -d "$d" && test -f "$d/config.c"; then
++	  vi_cv_path_python_conf="$d"
++	else
++	  for path in "${vi_cv_path_python_pfx}" "${vi_cv_path_python_epfx}"; do
++	    for subdir in lib64 lib share; do
++	      d="${path}/${subdir}/python${vi_cv_var_python_version}/config"
++	      if test -d "$d" && test -f "$d/config.c"; then
++		vi_cv_path_python_conf="$d"
++	      fi
++	    done
+ 	  done
+-	done
++	fi
+       ])
+ 
+       PYTHON_CONFDIR="${vi_cv_path_python_conf}"
+@@ -835,6 +932,7 @@
+ 	@echo "python_LIBS='$(LIBS)'"
+ 	@echo "python_SYSLIBS='$(SYSLIBS)'"
+ 	@echo "python_LINKFORSHARED='$(LINKFORSHARED)'"
++	@echo "python_DLLLIBRARY='$(DLLLIBRARY)'"
+ 	@echo "python_INSTSONAME='$(INSTSONAME)'"
+ eof
+ 	    dnl -- delete the lines from make about Entering/Leaving directory
+@@ -855,23 +953,21 @@
+ 	    fi
+ 	])
+ 
++	if test "X$python_DLLLIBRARY" != "X"; then
++	  python_INSTSONAME="$python_DLLLIBRARY"
++	fi
+ 	PYTHON_LIBS="${vi_cv_path_python_plibs}"
+ 	if test "${vi_cv_path_python_pfx}" = "${vi_cv_path_python_epfx}"; then
+-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	else
+-	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version}"
++	  PYTHON_CFLAGS="-I${vi_cv_path_python_pfx}/include/python${vi_cv_var_python_version} -I${vi_cv_path_python_epfx}/include/python${vi_cv_var_python_version} -DPYTHON_HOME=\\\"${vi_cv_path_python_pfx}\\\""
+ 	fi
+ 	PYTHON_SRC="if_python.c"
+-	dnl For Mac OSX 10.2 config.o is included in the Python library.
+-	if test "x$MACOSX" = "xyes"; then
+-	  PYTHON_OBJ="objects/if_python.o"
+-	else
+-	  PYTHON_OBJ="objects/if_python.o objects/py_config.o"
+-	fi
++	PYTHON_OBJ="objects/if_python.o"
+ 	if test "${vi_cv_var_python_version}" = "1.4"; then
+ 	   PYTHON_OBJ="$PYTHON_OBJ objects/py_getpath.o"
+ 	fi
+-	PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
++    PYTHON_GETPATH_CFLAGS="-DPYTHONPATH='\"${vi_cv_path_pythonpath}\"' -DPREFIX='\"${vi_cv_path_python_pfx}\"' -DEXEC_PREFIX='\"${vi_cv_path_python_epfx}\"'"
+ 
+ 	dnl On FreeBSD linking with "-pthread" is required to use threads.
+ 	dnl _THREAD_SAFE must be used for compiling then.
+@@ -932,6 +1028,10 @@
+       AC_MSG_RESULT(too old)
+     fi
+   fi
++
++  if test "$fail_if_missing" = "yes" -a "$python_ok" != "yes"; then
++    AC_MSG_ERROR([could not configure python])
++  fi
+ fi
+ 
+ AC_SUBST(PYTHON_CONFDIR)
+@@ -949,7 +1049,7 @@
+ AC_MSG_RESULT($enable_python3interp)
+ if test "$enable_python3interp" = "yes" -o "$enable_python3interp" = "dynamic"; then
+   dnl -- find the python3 executable
+-  AC_PATH_PROG(vi_cv_path_python3, python3)
++  AC_PATH_PROGS(vi_cv_path_python3, python3 python)
+   if test "X$vi_cv_path_python3" != "X"; then
+ 
+     dnl -- get its version number
+@@ -958,6 +1058,17 @@
+           ${vi_cv_path_python3} -c 'import sys; print(sys.version[:3])'`
+     ]])
+ 
++    dnl -- get abiflags for python 3.2 or higher (PEP 3149)
++    AC_CACHE_CHECK(Python's abiflags,vi_cv_var_python3_abiflags,
++    [
++     vi_cv_var_python3_abiflags=
++     if ${vi_cv_path_python3} -c \
++         "import sys; sys.exit(${vi_cv_var_python3_version} < 3.2)"
++     then
++       vi_cv_var_python3_abiflags=`${vi_cv_path_python3} -c \    
++         "import sys; print(sys.abiflags)"`
++     fi ])
++
+     dnl -- find where python3 thinks it was installed
+     AC_CACHE_CHECK(Python's install prefix,vi_cv_path_python3_pfx,
+     [ vi_cv_path_python3_pfx=`
+@@ -987,14 +1098,23 @@
+     AC_CACHE_CHECK(Python's configuration directory,vi_cv_path_python3_conf,
+     [
+      vi_cv_path_python3_conf=
+-     for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
+-       for subdir in lib64 lib share; do
+-         d="${path}/${subdir}/python${vi_cv_var_python3_version}/config"
+-         if test -d "$d" && test -f "$d/config.c"; then
+-           vi_cv_path_python3_conf="$d"
+-         fi
++     config_dir="config"
++     if test "${vi_cv_var_python3_abiflags}" != ""; then
++       config_dir="${config_dir}-${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++     fi
++     d=`${vi_cv_path_python3} -c "import distutils.sysconfig; print(distutils.sysconfig.get_config_var('LIBPL'))"`
++     if test -d "$d" && test -f "$d/config.c"; then
++       vi_cv_path_python3_conf="$d"
++     else
++       for path in "${vi_cv_path_python3_pfx}" "${vi_cv_path_python3_epfx}"; do
++	 for subdir in lib64 lib share; do
++	   d="${path}/${subdir}/python${vi_cv_var_python3_version}/${config_dir}"
++	   if test -d "$d" && test -f "$d/config.c"; then
++	     vi_cv_path_python3_conf="$d"
++	   fi
++	 done
+        done
+-     done
++     fi
+     ])
+ 
+     PYTHON3_CONFDIR="${vi_cv_path_python3_conf}"
+@@ -1014,32 +1134,30 @@
+ 	@echo "python3_BASEMODLIBS='$(BASEMODLIBS)'"
+ 	@echo "python3_LIBS='$(LIBS)'"
+ 	@echo "python3_SYSLIBS='$(SYSLIBS)'"
+-	@echo "python3_LINKFORSHARED='$(LINKFORSHARED)'"
++	@echo "python3_DLLLIBRARY='$(DLLLIBRARY)'"
+ 	@echo "python3_INSTSONAME='$(INSTSONAME)'"
+ eof
+           dnl -- delete the lines from make about Entering/Leaving directory
+           eval "`cd ${PYTHON3_CONFDIR} && make -f "${tmp_mkf}" __ | sed '/ directory /d'`"
+           rm -f -- "${tmp_mkf}"
+-          vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}"
+-          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS} ${python3_LINKFORSHARED}"
++	  vi_cv_path_python3_plibs="-L${PYTHON3_CONFDIR} -lpython${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags}"
++          vi_cv_path_python3_plibs="${vi_cv_path_python3_plibs} ${python3_BASEMODLIBS} ${python3_LIBS} ${python3_SYSLIBS}"
+           dnl remove -ltermcap, it can conflict with an earlier -lncurses
+           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-ltermcap//`
+           vi_cv_path_python3_plibs=`echo $vi_cv_path_python3_plibs | sed s/-lffi//`
+       ])
+ 
++      if test "X$python3_DLLLIBRARY" != "X"; then
++	python3_INSTSONAME="$python3_DLLLIBRARY"
++      fi
+       PYTHON3_LIBS="${vi_cv_path_python3_plibs}"
+       if test "${vi_cv_path_python3_pfx}" = "${vi_cv_path_python3_epfx}"; then
+-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       else
+-        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}"
++        PYTHON3_CFLAGS="-I${vi_cv_path_python3_pfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -I${vi_cv_path_python3_epfx}/include/python${vi_cv_var_python3_version}${vi_cv_var_python3_abiflags} -DPYTHON3_HOME=L\\\"${vi_cv_path_python3_pfx}\\\""
+       fi
+       PYTHON3_SRC="if_python3.c"
+-      dnl For Mac OSX 10.2 config.o is included in the Python library.
+-      if test "x$MACOSX" = "xyes"; then
+-        PYTHON3_OBJ="objects/if_python3.o"
+-      else
+-        PYTHON3_OBJ="objects/if_python3.o objects/py3_config.o"
+-      fi
++      PYTHON3_OBJ="objects/if_python3.o"
+ 
+       dnl On FreeBSD linking with "-pthread" is required to use threads.
+       dnl _THREAD_SAFE must be used for compiling then.
+@@ -1109,28 +1227,31 @@
+ if test "$python_ok" = yes && test "$python3_ok" = yes; then
+   AC_DEFINE(DYNAMIC_PYTHON)
+   AC_DEFINE(DYNAMIC_PYTHON3)
+-  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL)
++  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python)
+   cflags_save=$CFLAGS
+-  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  CFLAGS="$CFLAGS $PYTHON_CFLAGS"
+   ldflags_save=$LDFLAGS
+-  LDFLAGS="$LDFLAGS -ldl"
++  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
++  LDFLAGS="-ldl $LDFLAGS"
+   AC_RUN_IFELSE([
+     #include <dlfcn.h>
+     /* If this program fails, then RTLD_GLOBAL is needed.
+      * RTLD_GLOBAL will be used and then it is not possible to
+      * have both python versions enabled in the same vim instance.
+-     * Only the first pyhton version used will be switched on.
++     * Only the first python version used will be switched on.
+      */
+ 
+-    int no_rtl_global_needed_for(char *python_instsoname)
++    int no_rtl_global_needed_for(char *python_instsoname, char *prefix)
+     {
+       int needed = 0;
+       void* pylib = dlopen(python_instsoname, RTLD_LAZY);
+       if (pylib != 0)
+       {
++          void (*pfx)(char *home) = dlsym(pylib, "Py_SetPythonHome");
+           void (*init)(void) = dlsym(pylib, "Py_Initialize");
+           int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
+           void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
+           (*init)();
+           needed = (*simple)("import termios") == -1;
+           (*final)();
+@@ -1142,13 +1263,61 @@
+     int main(int argc, char** argv)
+     {
+       int not_needed = 0;
+-      if (no_rtl_global_needed_for("libpython2.7.so.1.0") && no_rtl_global_needed_for("libpython3.1.so.1.0"))
++      if (no_rtl_global_needed_for("${python_INSTSONAME}", "${vi_cv_path_python_pfx}"))
+             not_needed = 1;
+       return !not_needed;
+     }],
+     [AC_MSG_RESULT(yes);AC_DEFINE(PY_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
++
+   CFLAGS=$cflags_save
+   LDFLAGS=$ldflags_save
++
++  AC_MSG_CHECKING(whether we can do without RTLD_GLOBAL for Python3)
++  cflags_save=$CFLAGS
++  CFLAGS="$CFLAGS $PYTHON3_CFLAGS"
++  ldflags_save=$LDFLAGS
++  dnl -ldl must go first to make this work on Archlinux (Roland Puntaier)
++  LDFLAGS="-ldl $LDFLAGS"
++  AC_RUN_IFELSE([
++    #include <dlfcn.h>
++    #include <wchar.h>
++    /* If this program fails, then RTLD_GLOBAL is needed.
++     * RTLD_GLOBAL will be used and then it is not possible to
++     * have both python versions enabled in the same vim instance.
++     * Only the first python version used will be switched on.
++     */
++
++    int no_rtl_global_needed_for(char *python_instsoname, wchar_t *prefix)
++    {
++      int needed = 0;
++      void* pylib = dlopen(python_instsoname, RTLD_LAZY);
++      if (pylib != 0)
++      {
++          void (*pfx)(wchar_t *home) = dlsym(pylib, "Py_SetPythonHome");
++          void (*init)(void) = dlsym(pylib, "Py_Initialize");
++          int (*simple)(char*) = dlsym(pylib, "PyRun_SimpleString");
++          void (*final)(void) = dlsym(pylib, "Py_Finalize");
++          (*pfx)(prefix);
++          (*init)();
++          needed = (*simple)("import termios") == -1;
++          (*final)();
++          dlclose(pylib);
++      }
++      return !needed;
++    }
++
++    int main(int argc, char** argv)
++    {
++      int not_needed = 0;
++      if (no_rtl_global_needed_for("${python3_INSTSONAME}", L"${vi_cv_path_python3_pfx}"))
++            not_needed = 1;
++      return !not_needed;
++    }],
++    [AC_MSG_RESULT(yes);AC_DEFINE(PY3_NO_RTLD_GLOBAL)], [AC_MSG_RESULT(no)])
++
++  CFLAGS=$cflags_save
++  LDFLAGS=$ldflags_save
++
+   PYTHON_SRC="if_python.c"
+   PYTHON_OBJ="objects/if_python.o"
+   PYTHON_CFLAGS="$PYTHON_CFLAGS -DDYNAMIC_PYTHON_DLL=\\\"${python_INSTSONAME}\\\""
+@@ -1290,6 +1459,9 @@
+       AC_MSG_RESULT(too old; need Tcl version 8.0 or later)
+     fi
+   fi
++  if test "$fail_if_missing" = "yes" -a -z "$TCL_SRC"; then
++    AC_MSG_ERROR([could not configure Tcl])
++  fi
+ fi
+ AC_SUBST(TCL_SRC)
+ AC_SUBST(TCL_OBJ)
+@@ -1299,54 +1471,57 @@
+ 
+ AC_MSG_CHECKING(--enable-rubyinterp argument)
+ AC_ARG_ENABLE(rubyinterp,
+-	[  --enable-rubyinterp     Include Ruby interpreter.], ,
++	[  --enable-rubyinterp[=OPTS]     Include Ruby interpreter.  [default=no] [OPTS=no/yes/dynamic]], ,
+ 	[enable_rubyinterp="no"])
+ AC_MSG_RESULT($enable_rubyinterp)
+-if test "$enable_rubyinterp" = "yes"; then
++if test "$enable_rubyinterp" = "yes" -o "$enable_rubyinterp" = "dynamic"; then
+   AC_MSG_CHECKING(--with-ruby-command argument)
++  AC_SUBST(vi_cv_path_ruby)
+   AC_ARG_WITH(ruby-command, [  --with-ruby-command=RUBY  name of the Ruby command (default: ruby)],
+-	RUBY_CMD="$withval"; AC_MSG_RESULT($RUBY_CMD),
++	RUBY_CMD="$withval"; vi_cv_path_ruby="$withval"; AC_MSG_RESULT($RUBY_CMD),
+ 	RUBY_CMD="ruby"; AC_MSG_RESULT(defaulting to $RUBY_CMD))
+-  AC_SUBST(vi_cv_path_ruby)
+   AC_PATH_PROG(vi_cv_path_ruby, $RUBY_CMD)
+   if test "X$vi_cv_path_ruby" != "X"; then
+     AC_MSG_CHECKING(Ruby version)
+     if $vi_cv_path_ruby -e '(VERSION rescue RUBY_VERSION) >= "1.6.0" or exit 1' >/dev/null 2>/dev/null; then
+       AC_MSG_RESULT(OK)
++      AC_MSG_CHECKING(Ruby rbconfig)
++      ruby_rbconfig="RbConfig"
++      if ! $vi_cv_path_ruby -r rbconfig -e 'RbConfig' >/dev/null 2>/dev/null; then
++	ruby_rbconfig="Config"
++      fi
++      AC_MSG_RESULT($ruby_rbconfig)
+       AC_MSG_CHECKING(Ruby header files)
+-      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e 'print Config::CONFIG[["rubyhdrdir"]] || Config::CONFIG[["archdir"]] || $hdrdir' 2>/dev/null`
++      rubyhdrdir=`$vi_cv_path_ruby -r mkmf -e "print $ruby_rbconfig::CONFIG[['rubyhdrdir']] || $ruby_rbconfig::CONFIG[['archdir']] || \\$hdrdir" 2>/dev/null`
+       if test "X$rubyhdrdir" != "X"; then
+ 	AC_MSG_RESULT($rubyhdrdir)
+ 	RUBY_CFLAGS="-I$rubyhdrdir"
+-        rubyarch=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["arch"]]'`
++        rubyarch=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['arch']]"`
+         if test -d "$rubyhdrdir/$rubyarch"; then
+           RUBY_CFLAGS="$RUBY_CFLAGS -I$rubyhdrdir/$rubyarch"
+         fi
+-        rubyversion=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["ruby_version"]].gsub(/\./, "")[[0,2]]'`
++        rubyversion=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['ruby_version']].gsub(/\./, '')[[0,2]]"`
+         RUBY_CFLAGS="$RUBY_CFLAGS -DRUBY_VERSION=$rubyversion"
+-	rubylibs=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LIBS"]]'`
++	rubylibs=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LIBS']]"`
+ 	if test "X$rubylibs" != "X"; then
+ 	  RUBY_LIBS="$rubylibs"
+ 	fi
+-	librubyarg=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["LIBRUBYARG"]])'`
+-	if test -f "$rubyhdrdir/$librubyarg"; then
+-	  librubyarg="$rubyhdrdir/$librubyarg"
+-	else
+-	  rubylibdir=`$vi_cv_path_ruby -r rbconfig -e 'print Config.expand(Config::CONFIG[["libdir"]])'`
+-	  if test -f "$rubylibdir/$librubyarg"; then
+-	    librubyarg="$rubylibdir/$librubyarg"
+-	  elif test "$librubyarg" = "libruby.a"; then
+-	    dnl required on Mac OS 10.3 where libruby.a doesn't exist
+-	    librubyarg="-lruby"
+-	  else
+-	    librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print '$librubyarg'.gsub(/-L\./, %'-L#{Config.expand(Config::CONFIG[\"libdir\"])}')"`
+-	  fi
++	librubyarg=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBYARG']])"`
++	librubya=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['LIBRUBY_A']])"`
++	rubylibdir=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig.expand($ruby_rbconfig::CONFIG[['libdir']])"`
++	if test -f "$rubylibdir/$librubya"; then
++	  librubyarg="$librubyarg"
++	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
++	elif test "$librubyarg" = "libruby.a"; then
++	  dnl required on Mac OS 10.3 where libruby.a doesn't exist
++	  librubyarg="-lruby"
++	  RUBY_LIBS="$RUBY_LIBS -L$rubylibdir"
+ 	fi
+ 
+ 	if test "X$librubyarg" != "X"; then
+ 	  RUBY_LIBS="$librubyarg $RUBY_LIBS"
+ 	fi
+-	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e 'print Config::CONFIG[["LDFLAGS"]]'`
++	rubyldflags=`$vi_cv_path_ruby -r rbconfig -e "print $ruby_rbconfig::CONFIG[['LDFLAGS']]"`
+ 	if test "X$rubyldflags" != "X"; then
+ 	  dnl Ruby on Mac OS X 10.5 adds "-arch" flags but these should only
+ 	  dnl be included if requested by passing --with-mac-arch to
+@@ -1360,6 +1535,12 @@
+ 	RUBY_OBJ="objects/if_ruby.o"
+ 	RUBY_PRO="if_ruby.pro"
+ 	AC_DEFINE(FEAT_RUBY)
++	if test "$enable_rubyinterp" = "dynamic"; then
++	  libruby=`$vi_cv_path_ruby -r rbconfig -e "puts $ruby_rbconfig::CONFIG[['LIBRUBY_SO']]"`
++	  AC_DEFINE(DYNAMIC_RUBY)
++	  RUBY_CFLAGS="-DDYNAMIC_RUBY_DLL=\\\"$libruby\\\" -DDYNAMIC_RUBY_VER=$rubyversion $RUBY_CFLAGS"
++	  RUBY_LIBS=
++	fi
+       else
+ 	AC_MSG_RESULT(not found; disabling Ruby)
+       fi
+@@ -1367,6 +1548,10 @@
+       AC_MSG_RESULT(too old; need Ruby version 1.6.0 or later)
+     fi
+   fi
++
++  if test "$fail_if_missing" = "yes" -a -z "$RUBY_OBJ"; then
++    AC_MSG_ERROR([could not configure Ruby])
++  fi
+ fi
+ AC_SUBST(RUBY_SRC)
+ AC_SUBST(RUBY_OBJ)
+@@ -1576,7 +1761,12 @@
+     dnl Check that the X11 header files don't use implicit declarations
+     AC_MSG_CHECKING(if X11 header files implicitly declare return values)
+     cflags_save=$CFLAGS
+-    CFLAGS="$CFLAGS $X_CFLAGS -Werror"
++    dnl -Werror is GCC only, others like Solaris Studio might not like it
++    if test "$GCC" = yes; then
++      CFLAGS="$CFLAGS $X_CFLAGS -Werror"
++    else
++      CFLAGS="$CFLAGS $X_CFLAGS"
++    fi
+     AC_TRY_COMPILE([#include <X11/Xlib.h>], ,
+ 	AC_MSG_RESULT(no),
+ 	CFLAGS="$CFLAGS -Wno-implicit-int"
+@@ -2248,10 +2438,15 @@
+ if test -z "$SKIP_MOTIF"; then
+   cppflags_save=$CPPFLAGS
+   CPPFLAGS="$CPPFLAGS $X_CFLAGS"
+-  AC_CHECK_HEADERS(Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h \
+-		   Xm/UnhighlightT.h Xm/Notebook.h)
++  if test "$zOSUnix" = "yes"; then
++	xmheader="Xm/Xm.h"
++  else
++	xmheader="Xm/Xm.h Xm/XpmP.h Xm/JoinSideT.h Xm/TraitP.h Xm/Manager.h
++  	   Xm/UnhighlightT.h Xm/Notebook.h"  
++  fi    
++  AC_CHECK_HEADERS($xmheader)
+ 
+-  if test $ac_cv_header_Xm_XpmP_h = yes; then
++  if test "x$ac_cv_header_Xm_XpmP_h" = "xyes"; then
+     dnl Solaris uses XpmAttributes_21, very annoying.
+     AC_MSG_CHECKING([for XpmAttributes_21 in Xm/XpmP.h])
+     AC_TRY_COMPILE([#include <Xm/XpmP.h>], [XpmAttributes_21 attr;],
+@@ -2303,6 +2498,21 @@
+ dnl end of GUI-checking
+ dnl ---------------------------------------------------------------------------
+ 
++dnl Check for Cygwin, which needs an extra source file if not using X11
++AC_MSG_CHECKING(for CYGWIN environment)
++case `uname` in
++    CYGWIN*)    CYGWIN=yes; AC_MSG_RESULT(yes)
++                AC_MSG_CHECKING(for CYGWIN clipboard support)
++                if test "x$with_x" = "xno" ; then
++                  OS_EXTRA_SRC=winclip.c; OS_EXTRA_OBJ=objects/winclip.o
++                  AC_MSG_RESULT(yes)
++                  AC_DEFINE(FEAT_CYGWIN_WIN32_CLIPBOARD)
++                else
++                  AC_MSG_RESULT(no - using X11)
++                fi ;;
++
++    *)          CYGWIN=no; AC_MSG_RESULT(no);;
++esac
+ 
+ dnl Only really enable hangul input when GUI and XFONTSET are available
+ if test "$enable_hangulinput" = "yes"; then
+@@ -2529,13 +2739,14 @@
+   AC_MSG_RESULT([empty: automatic terminal library selection])
+   dnl  On HP-UX 10.10 termcap or termlib should be used instead of
+   dnl  curses, because curses is much slower.
+-  dnl  Newer versions of ncurses are preferred over anything.
++  dnl  Newer versions of ncurses are preferred over anything, except
++  dnl  when tinfo has been split off, it contains all we need.
+   dnl  Older versions of ncurses have bugs, get a new one!
+   dnl  Digital Unix (OSF1) should use curses (Ronald Schild).
+   dnl  On SCO Openserver should prefer termlib (Roger Cornelius).
+   case "`uname -s 2>/dev/null`" in
+-	OSF1|SCO_SV)	tlibs="ncurses curses termlib termcap";;
+-	*)	tlibs="ncurses termlib termcap curses";;
++	OSF1|SCO_SV)	tlibs="tinfo ncurses curses termlib termcap";;
++	*)	tlibs="tinfo ncurses termlib termcap curses";;
+   esac
+   for libname in $tlibs; do
+     AC_CHECK_LIB(${libname}, tgetent,,)
+@@ -2801,7 +3012,7 @@
+ if test "x$vim_cv_tty_group" != "xworld" ; then
+   AC_DEFINE_UNQUOTED(PTYGROUP,$vim_cv_tty_group)
+   if test "x$vim_cv_tty_mode" = "x" ; then
+-    AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (propably 0620)])
++    AC_MSG_ERROR([It seems you're cross compiling and have 'vim_cv_tty_group' set, please also set the environment variable 'vim_cv_tty_mode' to the correct mode (probably 0620)])
+   else
+     AC_DEFINE(PTYMODE, 0620)
+   fi
+@@ -2865,7 +3076,7 @@
+ dnl Check for functions in one big call, to reduce the size of configure.
+ dnl Can only be used for functions that do not require any include.
+ AC_CHECK_FUNCS(bcmp fchdir fchown fsync getcwd getpseudotty \
+-	getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
++	getpwent getpwnam getpwuid getrlimit gettimeofday getwd lstat memcmp \
+ 	memset mkdtemp nanosleep opendir putenv qsort readlink select setenv \
+ 	setpgid setsid sigaltstack sigstack sigset sigsetjmp sigaction \
+ 	sigvec strcasecmp strerror strftime stricmp strncasecmp \
+@@ -2975,6 +3186,7 @@
+ 
+ dnl Link with -lposix1e for ACL stuff; if not found, try -lacl for SGI
+ dnl when -lacl works, also try to use -lattr (required for Debian).
++dnl On Solaris, use the acl_get/set functions in libsec, if present.
+ AC_MSG_CHECKING(--disable-acl argument)
+ AC_ARG_ENABLE(acl,
+ 	[  --disable-acl           Don't check for ACL support.],
+@@ -2997,6 +3209,7 @@
+ 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_POSIX_ACL),
+ 	AC_MSG_RESULT(no))
+ 
++AC_CHECK_LIB(sec, acl_get, [LIBS="$LIBS -lsec"; AC_DEFINE(HAVE_SOLARIS_ZFS_ACL)],
+ AC_MSG_CHECKING(for Solaris ACL support)
+ AC_TRY_LINK([
+ #ifdef HAVE_SYS_ACL_H
+@@ -3004,7 +3217,7 @@
+ #endif], [acl("foo", GETACLCNT, 0, NULL);
+ 	],
+ 	AC_MSG_RESULT(yes); AC_DEFINE(HAVE_SOLARIS_ACL),
+-	AC_MSG_RESULT(no))
++	AC_MSG_RESULT(no)))
+ 
+ AC_MSG_CHECKING(for AIX ACL support)
+ AC_TRY_LINK([
+@@ -3180,7 +3393,7 @@
+ }],
+ AC_MSG_RESULT(ok),
+ AC_MSG_ERROR([WRONG!  uint32_t not defined correctly.]),
+-AC_MSG_ERROR([could not compile program using uint32_t.]))
++AC_MSG_WARN([cannot check uint32_t when cross-compiling.]))
+ 
+ dnl Check for memmove() before bcopy(), makes memmove() be used when both are
+ dnl present, fixes problem with incompatibility between Solaris 2.4 and 2.5.
+@@ -3280,7 +3493,7 @@
+ AC_CHECK_LIB(xpg4, _xpg4_setrunelocale, [LIBS="$LIBS -lxpg4"],,)
+ 
+ dnl Check how we can run ctags.  Default to "ctags" when nothing works.
+-dnl --version for Exuberant ctags (preferred)
++dnl Use --version to detect Exuberant ctags (preferred)
+ dnl       Add --fields=+S to get function signatures for omni completion.
+ dnl -t for typedefs (many ctags have this)
+ dnl -s for static functions (Elvis ctags only?)
+@@ -3290,6 +3503,10 @@
+ test -f tags && mv tags tags.save
+ if (eval ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
+   TAGPRG="ctags -I INIT+ --fields=+S"
++elif (eval exctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++  TAGPRG="exctags -I INIT+ --fields=+S"
++elif (eval exuberant-ctags --version /dev/null | grep Exuberant) < /dev/null 1>&AC_FD_CC 2>&1; then
++  TAGPRG="exuberant-ctags -I INIT+ --fields=+S"
+ else
+   TAGPRG="ctags"
+   (eval etags	   /dev/null) < /dev/null 1>&AC_FD_CC 2>&1 && TAGPRG="etags"
+@@ -3477,9 +3694,10 @@
+   dnl -D_FORTIFY_SOURCE=2 crashes Vim on strcpy(buf, "000") when buf is
+   dnl declared as char x[1] but actually longer.  Introduced in gcc 4.0.
+   dnl Also remove duplicate _FORTIFY_SOURCE arguments.
++  dnl And undefine it first to avoid a warning.
+   AC_MSG_CHECKING(whether we need -D_FORTIFY_SOURCE=1)
+   if test "$gccmajor" -gt "3"; then
+-    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -D_FORTIFY_SOURCE=1/'`
++    CFLAGS=`echo "$CFLAGS" | sed -e 's/-Wp,-D_FORTIFY_SOURCE=.//g' -e 's/-D_FORTIFY_SOURCE=.//g' -e 's/$/ -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1/'`
+     AC_MSG_RESULT(yes)
+   else
+     AC_MSG_RESULT(no)
+@@ -3487,6 +3705,28 @@
+ fi
+ AC_SUBST(DEPEND_CFLAGS_FILTER)
+ 
++dnl link.sh tries to avoid overlinking in a hackish way.
++dnl At least GNU ld supports --as-needed which provides the same functionality
++dnl at linker level. Let's use it.
++AC_MSG_CHECKING(linker --as-needed support)
++LINK_AS_NEEDED=
++# Check if linker supports --as-needed and --no-as-needed options
++if $CC -Wl,--help 2>/dev/null | grep as-needed > /dev/null; then
++  LDFLAGS="$LDFLAGS -Wl,--as-needed"
++  LINK_AS_NEEDED=yes
++fi
++if test "$LINK_AS_NEEDED" = yes; then
++  AC_MSG_RESULT(yes)
++else
++  AC_MSG_RESULT(no)
++fi
++AC_SUBST(LINK_AS_NEEDED)
++
++# IBM z/OS reset CFLAGS for config.mk
++if test "$zOSUnix" = "yes"; then
++	CFLAGS="-D_ALL_SOURCE -Wc,float\(ieee\),dll"
++fi
++
+ dnl write output files
+ AC_OUTPUT(auto/config.mk:config.mk.in)
+ 
+diff -Naur vim73.orig/src/dehqx.py vim73/src/dehqx.py
+--- vim73.orig/src/dehqx.py	2010-05-15 11:04:12.000000000 +0000
++++ vim73/src/dehqx.py	2013-06-07 17:07:30.348922015 +0000
+@@ -1,7 +1,10 @@
+ # Python script to get both the data and resource fork from a BinHex encoded
+ # file.
+-# Author: Taro Muraoka
+-# Last Change: 2003 Oct 25
++# Author: MURAOKA Taro <koron.kaoriya@gmail.com>
++# Last Change: 2012 Jun 29
++#
++# Copyright (C) 2003,12 MURAOKA Taro <koron.kaoriya@gmail.com>
++# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
+ 
+ import sys
+ import binhex
+diff -Naur vim73.orig/src/diff.c vim73/src/diff.c
+--- vim73.orig/src/diff.c	2010-07-31 13:35:21.000000000 +0000
++++ vim73/src/diff.c	2013-06-07 17:07:30.412255168 +0000
+@@ -615,11 +615,13 @@
+ #endif
+ 	    /* A change may have made filler lines invalid, need to take care
+ 	     * of that for other windows. */
+-	    if (wp != curwin && wp->w_topfill > 0)
++	    n = diff_check(wp, wp->w_topline);
++	    if ((wp != curwin && wp->w_topfill > 0) || n > 0)
+ 	    {
+-		n = diff_check(wp, wp->w_topline);
+ 		if (wp->w_topfill > n)
+ 		    wp->w_topfill = (n < 0 ? 0 : n);
++		else if (n > 0 && n > wp->w_topfill)
++		    wp->w_topfill = n;
+ 	    }
+ 	}
+ }
+@@ -783,6 +785,15 @@
+ 	goto theend;
+     }
+ 
++    /* :diffupdate! */
++    if (eap != NULL && eap->forceit)
++	for (idx_new = idx_orig; idx_new < DB_COUNT; ++idx_new)
++	{
++	    buf = curtab->tp_diffbuf[idx_new];
++	    if (buf_valid(buf))
++		buf_check_timestamp(buf, FALSE);
++	}
++
+     /* Write the first buffer to a tempfile. */
+     buf = curtab->tp_diffbuf[idx_orig];
+     if (diff_write(buf, tmp_orig) == FAIL)
+@@ -1099,7 +1110,7 @@
+ }
+ 
+ /*
+- * Set options to show difs for the current window.
++ * Set options to show diffs for the current window.
+  */
+     void
+ ex_diffthis(eap)
+@@ -1127,11 +1138,13 @@
+ # endif
+ 
+     wp->w_p_diff = TRUE;
++    /* Use 'scrollbind' and 'cursorbind' when available */
++#ifdef FEAT_SCROLLBIND
++    wp->w_p_scb = TRUE;
++#endif
+ #ifdef FEAT_CURSORBIND
+-    /* Use cursorbind if it's available */
+     wp->w_p_crb = TRUE;
+ #endif
+-    wp->w_p_scb = TRUE;
+     wp->w_p_wrap = FALSE;
+ # ifdef FEAT_FOLDING
+     curwin = wp;
+@@ -1177,10 +1190,7 @@
+ 	{
+ 	    /* Set 'diff', 'scrollbind' off and 'wrap' on. */
+ 	    wp->w_p_diff = FALSE;
+-#ifdef FEAT_CURSORBIND
+-	    wp->w_p_crb = FALSE;
+-#endif
+-	    wp->w_p_scb = FALSE;
++	    RESET_BINDING(wp);
+ 	    wp->w_p_wrap = TRUE;
+ #ifdef FEAT_FOLDING
+ 	    curwin = wp;
+@@ -2142,7 +2152,7 @@
+ 	    i = atol((char *)eap->arg);
+ 	else
+ 	{
+-	    i = buflist_findpat(eap->arg, p, FALSE, TRUE);
++	    i = buflist_findpat(eap->arg, p, FALSE, TRUE, FALSE);
+ 	    if (i < 0)
+ 		return;		/* error message already given */
+ 	}
+diff -Naur vim73.orig/src/digraph.c vim73/src/digraph.c
+--- vim73.orig/src/digraph.c	2010-05-15 11:04:09.000000000 +0000
++++ vim73/src/digraph.c	2013-06-07 17:07:30.448921729 +0000
+@@ -2080,13 +2080,13 @@
+ /*
+  * Lookup the pair "char1", "char2" in the digraph tables.
+  * If no match, return "char2".
+- * If "meta" is TRUE and "char1" is a space, return "char2" | 0x80.
++ * If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80.
+  */
+     static int
+-getexactdigraph(char1, char2, meta)
++getexactdigraph(char1, char2, meta_char)
+     int		char1;
+     int		char2;
+-    int		meta;
++    int		meta_char;
+ {
+     int		i;
+     int		retval = 0;
+@@ -2159,7 +2159,7 @@
+ 
+     if (retval == 0)		/* digraph deleted or not found */
+     {
+-	if (char1 == ' ' && meta)	/* <space> <char> --> meta-char */
++	if (char1 == ' ' && meta_char)	/* <space> <char> --> meta-char */
+ 	    return (char2 | 0x80);
+ 	return char2;
+     }
+@@ -2171,16 +2171,16 @@
+  * Allow for both char1-char2 and char2-char1
+  */
+     int
+-getdigraph(char1, char2, meta)
++getdigraph(char1, char2, meta_char)
+     int	char1;
+     int	char2;
+-    int	meta;
++    int	meta_char;
+ {
+     int	    retval;
+ 
+-    if (((retval = getexactdigraph(char1, char2, meta)) == char2)
++    if (((retval = getexactdigraph(char1, char2, meta_char)) == char2)
+ 	    && (char1 != char2)
+-	    && ((retval = getexactdigraph(char2, char1, meta)) == char1))
++	    && ((retval = getexactdigraph(char2, char1, meta_char)) == char1))
+ 	return char2;
+     return retval;
+ }
+diff -Naur vim73.orig/src/dosinst.c vim73/src/dosinst.c
+--- vim73.orig/src/dosinst.c	2010-08-08 12:47:36.000000000 +0000
++++ vim73/src/dosinst.c	2013-06-07 17:07:30.495588263 +0000
+@@ -375,7 +375,7 @@
+ 
+     /* First get $VIMRUNTIME.  If it's set, remove the tail. */
+     vim = getenv("VIMRUNTIME");
+-    if (vim != NULL && *vim != 0)
++    if (vim != NULL && *vim != 0 && strlen(vim) < BUFSIZE)
+     {
+ 	strcpy(buf, vim);
+ 	remove_tail(buf);
+@@ -1609,7 +1609,7 @@
+ 
+ /*
+  * Only add the choice for the open-with menu entry when gvim.exe was found
+- * and and regedit.exe exist.
++ * and regedit.exe exist.
+  */
+     static void
+ init_openwith_choice(void)
+diff -Naur vim73.orig/src/edit.c vim73/src/edit.c
+--- vim73.orig/src/edit.c	2010-08-08 12:55:05.000000000 +0000
++++ vim73/src/edit.c	2013-06-07 17:07:30.568921387 +0000
+@@ -58,6 +58,10 @@
+ };
+ 
+ static char e_hitend[] = N_("Hit end of paragraph");
++#ifdef FEAT_COMPL_FUNC
++static char e_complwin[] = N_("E839: Completion function changed window");
++static char e_compldel[] = N_("E840: Completion function deleted text");
++#endif
+ 
+ /*
+  * Structure used to store one match for insert completion.
+@@ -131,6 +135,8 @@
+ static int	  compl_cont_mode = 0;
+ static expand_T	  compl_xp;
+ 
++static int	  compl_opt_refresh_always = FALSE;
++
+ static void ins_ctrl_x __ARGS((void));
+ static int  has_compl_option __ARGS((int dict_opt));
+ static int  ins_compl_accept_char __ARGS((int c));
+@@ -149,16 +155,19 @@
+ static void ins_compl_free __ARGS((void));
+ static void ins_compl_clear __ARGS((void));
+ static int  ins_compl_bs __ARGS((void));
++static int  ins_compl_need_restart __ARGS((void));
+ static void ins_compl_new_leader __ARGS((void));
+ static void ins_compl_addleader __ARGS((int c));
+-static int ins_compl_len __ARGS((void));
++static int  ins_compl_len __ARGS((void));
+ static void ins_compl_restart __ARGS((void));
+ static void ins_compl_set_original_text __ARGS((char_u *str));
+ static void ins_compl_addfrommatch __ARGS((void));
+ static int  ins_compl_prep __ARGS((int c));
++static void ins_compl_fixRedoBufForLeader __ARGS((char_u *ptr_arg));
+ static buf_T *ins_compl_next_buf __ARGS((buf_T *buf, int flag));
+ #if defined(FEAT_COMPL_FUNC) || defined(FEAT_EVAL)
+ static void ins_compl_add_list __ARGS((list_T *list));
++static void ins_compl_add_dict __ARGS((dict_T *dict));
+ #endif
+ static int  ins_compl_get_exp __ARGS((pos_T *ini));
+ static void ins_compl_delete __ARGS((void));
+@@ -244,12 +253,14 @@
+ #ifdef FEAT_DIGRAPHS
+ static int  ins_digraph __ARGS((void));
+ #endif
+-static int  ins_copychar __ARGS((linenr_T lnum));
+ static int  ins_ctrl_ey __ARGS((int tc));
+ #ifdef FEAT_SMARTINDENT
+ static void ins_try_si __ARGS((int c));
+ #endif
+ static colnr_T get_nolist_virtcol __ARGS((void));
++#ifdef FEAT_AUTOCMD
++static char_u *do_insert_char_pre __ARGS((int c));
++#endif
+ 
+ static colnr_T	Insstart_textlen;	/* length of line when insert started */
+ static colnr_T	Insstart_blank_vcol;	/* vcol for first inserted blank */
+@@ -361,6 +372,8 @@
+      */
+     if (cmdchar != 'r' && cmdchar != 'v')
+     {
++	pos_T   save_cursor = curwin->w_cursor;
++
+ # ifdef FEAT_EVAL
+ 	if (cmdchar == 'R')
+ 	    ptr = (char_u *)"r";
+@@ -369,8 +382,29 @@
+ 	else
+ 	    ptr = (char_u *)"i";
+ 	set_vim_var_string(VV_INSERTMODE, ptr, 1);
++	set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
+ # endif
+ 	apply_autocmds(EVENT_INSERTENTER, NULL, NULL, FALSE, curbuf);
++
++	/* Make sure the cursor didn't move.  Do call check_cursor_col() in
++	 * case the text was modified.  Since Insert mode was not started yet
++	 * a call to check_cursor_col() may move the cursor, especially with
++	 * the "A" command, thus set State to avoid that. Also check that the
++	 * line number is still valid (lines may have been deleted).
++	 * Do not restore if v:char was set to a non-empty string. */
++	if (!equalpos(curwin->w_cursor, save_cursor)
++# ifdef FEAT_EVAL
++		&& *get_vim_var_str(VV_CHAR) == NUL
++# endif
++		&& save_cursor.lnum <= curbuf->b_ml.ml_line_count)
++	{
++	    int save_state = State;
++
++	    curwin->w_cursor = save_cursor;
++	    State = INSERT;
++	    check_cursor_col();
++	    State = save_state;
++	}
+     }
+ #endif
+ 
+@@ -775,7 +809,20 @@
+ 		 * completion: Add to "compl_leader". */
+ 		if (ins_compl_accept_char(c))
+ 		{
+-		    ins_compl_addleader(c);
++#ifdef FEAT_AUTOCMD
++		    /* Trigger InsertCharPre. */
++		    char_u *str = do_insert_char_pre(c);
++		    char_u *p;
++
++		    if (str != NULL)
++		    {
++			for (p = str; *p != NUL; mb_ptr_adv(p))
++			    ins_compl_addleader(PTR2CHAR(p));
++			vim_free(str);
++		    }
++		    else
++#endif
++			ins_compl_addleader(c);
+ 		    continue;
+ 		}
+ 
+@@ -1377,10 +1424,42 @@
+ 		goto do_intr;
+ #endif
+ 
++normalchar:
+ 	    /*
+-	     * Insert a nomal character.
++	     * Insert a normal character.
+ 	     */
+-normalchar:
++#ifdef FEAT_AUTOCMD
++	    if (!p_paste)
++	    {
++		/* Trigger InsertCharPre. */
++		char_u *str = do_insert_char_pre(c);
++		char_u *p;
++
++		if (str != NULL)
++		{
++		    if (*str != NUL && stop_arrow() != FAIL)
++		    {
++			/* Insert the new value of v:char literally. */
++			for (p = str; *p != NUL; mb_ptr_adv(p))
++			{
++			    c = PTR2CHAR(p);
++			    if (c == CAR || c == K_KENTER || c == NL)
++				ins_eol(c);
++			    else
++				ins_char(c);
++			}
++			AppendToRedobuffLit(str, -1);
++		    }
++		    vim_free(str);
++		    c = NUL;
++		}
++
++		/* If the new value is already inserted or an empty string
++		 * then don't insert any character. */
++		if (c == NUL)
++		    break;
++	    }
++#endif
+ #ifdef FEAT_SMARTINDENT
+ 	    /* Try to perform smart-indenting. */
+ 	    ins_try_si(c);
+@@ -1398,13 +1477,16 @@
+ 		    Insstart_blank_vcol = get_nolist_virtcol();
+ 	    }
+ 
+-	    if (vim_iswordc(c) || !echeck_abbr(
++	    /* Insert a normal character and check for abbreviations on a
++	     * special character.  Let CTRL-] expand abbreviations without
++	     * inserting it. */
++	    if (vim_iswordc(c) || (!echeck_abbr(
+ #ifdef FEAT_MBYTE
+ 			/* Add ABBR_OFF for characters above 0x100, this is
+ 			 * what check_abbr() expects. */
+ 			(has_mbyte && c >= 0x100) ? (c + ABBR_OFF) :
+ #endif
+-			c))
++		       c) && c != Ctrl_RSB))
+ 	    {
+ 		insert_special(c, FALSE, FALSE);
+ #ifdef FEAT_RIGHTLEFT
+@@ -1519,6 +1601,21 @@
+ 	    last_cursormoved = curwin->w_cursor;
+ 	}
+ #endif
++#ifdef FEAT_AUTOCMD
++	/* Trigger TextChangedI if b_changedtick differs. */
++	if (!ready && has_textchangedI()
++		&& last_changedtick != curbuf->b_changedtick
++# ifdef FEAT_INS_EXPAND
++		&& !pum_visible()
++# endif
++		)
++	{
++	    if (last_changedtick_buf == curbuf)
++		apply_autocmds(EVENT_TEXTCHANGEDI, NULL, NULL, FALSE, curbuf);
++	    last_changedtick_buf = curbuf;
++	    last_changedtick = curbuf->b_changedtick;
++	}
++#endif
+ 	if (must_redraw)
+ 	    update_screen(0);
+ 	else if (clear_cmdline || redraw_cmdline)
+@@ -1549,12 +1646,16 @@
+ ins_ctrl_v()
+ {
+     int		c;
++    int		did_putchar = FALSE;
+ 
+     /* may need to redraw when no more chars available now */
+     ins_redraw(FALSE);
+ 
+     if (redrawing() && !char_avail())
++    {
+ 	edit_putchar('^', TRUE);
++	did_putchar = TRUE;
++    }
+     AppendToRedobuff((char_u *)CTRL_V_STR);	/* CTRL-V */
+ 
+ #ifdef FEAT_CMDL_INFO
+@@ -1562,8 +1663,10 @@
+ #endif
+ 
+     c = get_literal();
+-    edit_unputchar();  /* when line fits in 'columns' the '^' is at the start
+-			  of the next line and will not be redrawn */
++    if (did_putchar)
++	/* when the line fits in 'columns' the '^' is at the start of the next
++	 * line and will not removed by the redraw */
++	edit_unputchar();
+ #ifdef FEAT_CMDL_INFO
+     clear_showcmd();
+ #endif
+@@ -1583,11 +1686,7 @@
+ #define PC_STATUS_RIGHT	1	/* right halve of double-wide char */
+ #define PC_STATUS_LEFT	2	/* left halve of double-wide char */
+ #define PC_STATUS_SET	3	/* pc_bytes was filled */
+-#ifdef FEAT_MBYTE
+ static char_u pc_bytes[MB_MAXBYTES + 1]; /* saved bytes */
+-#else
+-static char_u pc_bytes[2];		/* saved bytes */
+-#endif
+ static int  pc_attr;
+ static int  pc_row;
+ static int  pc_col;
+@@ -1713,9 +1812,9 @@
+     static void
+ undisplay_dollar()
+ {
+-    if (dollar_vcol)
++    if (dollar_vcol >= 0)
+     {
+-	dollar_vcol = 0;
++	dollar_vcol = -1;
+ 	redrawWinline(curwin->w_cursor.lnum, FALSE);
+     }
+ }
+@@ -2133,7 +2232,7 @@
+ 		    || c == Ctrl_I || c == Ctrl_D || c == Ctrl_P
+ 		    || c == Ctrl_N || c == Ctrl_T || c == Ctrl_V
+ 		    || c == Ctrl_Q || c == Ctrl_U || c == Ctrl_O
+-		    || c == Ctrl_S || c == 's');
++		    || c == Ctrl_S || c == Ctrl_K || c == 's');
+ 	case CTRL_X_SCROLL:
+ 	    return (c == Ctrl_Y || c == Ctrl_E);
+ 	case CTRL_X_WHOLE_LINE:
+@@ -2658,6 +2757,7 @@
+     if (stop_arrow() == FAIL)
+ 	return;
+ 
++    compl_direction = FORWARD;
+     if (startcol > curwin->w_cursor.col)
+ 	startcol = curwin->w_cursor.col;
+     compl_col = startcol;
+@@ -3295,7 +3395,7 @@
+     /* Deleted more than what was used to find matches or didn't finish
+      * finding all matches: need to look for matches all over again. */
+     if (curwin->w_cursor.col <= compl_col + compl_length
+-						     || compl_was_interrupted)
++						  || ins_compl_need_restart())
+ 	ins_compl_restart();
+ 
+     vim_free(compl_leader);
+@@ -3303,12 +3403,29 @@
+     if (compl_leader != NULL)
+     {
+ 	ins_compl_new_leader();
++	if (compl_shown_match != NULL)
++	    /* Make sure current match is not a hidden item. */
++	    compl_curr_match = compl_shown_match;
+ 	return NUL;
+     }
+     return K_BS;
+ }
+ 
+ /*
++ * Return TRUE when we need to find matches again, ins_compl_restart() is to
++ * be called.
++ */
++    static int
++ins_compl_need_restart()
++{
++    /* Return TRUE if we didn't complete finding matches or when the
++     * 'completefunc' returned "always" in the "refresh" dictionary item. */
++    return compl_was_interrupted
++	|| ((ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OMNI)
++						  && compl_opt_refresh_always);
++}
++
++/*
+  * Called after changing "compl_leader".
+  * Show the popup menu with a different set of matches.
+  * May also search for matches again if the previous search was interrupted.
+@@ -3391,20 +3508,32 @@
+ 	(*mb_char2bytes)(c, buf);
+ 	buf[cc] = NUL;
+ 	ins_char_bytes(buf, cc);
++	if (compl_opt_refresh_always)
++	    AppendToRedobuff(buf);
+     }
+     else
+ #endif
++    {
+ 	ins_char(c);
++	if (compl_opt_refresh_always)
++	    AppendCharToRedobuff(c);
++    }
+ 
+     /* If we didn't complete finding matches we must search again. */
+-    if (compl_was_interrupted)
++    if (ins_compl_need_restart())
+ 	ins_compl_restart();
+ 
+-    vim_free(compl_leader);
+-    compl_leader = vim_strnsave(ml_get_curline() + compl_col,
++    /* When 'always' is set, don't reset compl_leader. While completing,
++     * cursor doesn't point original position, changing compl_leader would
++     * break redo. */
++    if (!compl_opt_refresh_always)
++    {
++	vim_free(compl_leader);
++	compl_leader = vim_strnsave(ml_get_curline() + compl_col,
+ 				     (int)(curwin->w_cursor.col - compl_col));
+-    if (compl_leader != NULL)
+-	ins_compl_new_leader();
++	if (compl_leader != NULL)
++	    ins_compl_new_leader();
++    }
+ }
+ 
+ /*
+@@ -3480,11 +3609,7 @@
+ 	    return;
+     }
+     p += len;
+-#ifdef FEAT_MBYTE
+-    c = mb_ptr2char(p);
+-#else
+-    c = *p;
+-#endif
++    c = PTR2CHAR(p);
+     ins_compl_addleader(c);
+ }
+ 
+@@ -3653,9 +3778,6 @@
+ 	     * memory that was used, and make sure we can redo the insert. */
+ 	    if (compl_curr_match != NULL || compl_leader != NULL || c == Ctrl_E)
+ 	    {
+-		char_u	*p;
+-		int	temp = 0;
+-
+ 		/*
+ 		 * If any of the original typed text has been changed, eg when
+ 		 * ignorecase is set, we must add back-spaces to the redo
+@@ -3666,25 +3788,9 @@
+ 		 */
+ 		if (compl_curr_match != NULL && compl_used_match && c != Ctrl_E)
+ 		    ptr = compl_curr_match->cp_str;
+-		else if (compl_leader != NULL)
+-		    ptr = compl_leader;
+ 		else
+-		    ptr = compl_orig_text;
+-		if (compl_orig_text != NULL)
+-		{
+-		    p = compl_orig_text;
+-		    for (temp = 0; p[temp] != NUL && p[temp] == ptr[temp];
+-								       ++temp)
+-			;
+-#ifdef FEAT_MBYTE
+-		    if (temp > 0)
+-			temp -= (*mb_head_off)(compl_orig_text, p + temp);
+-#endif
+-		    for (p += temp; *p != NUL; mb_ptr_adv(p))
+-			AppendCharToRedobuff(K_BS);
+-		}
+-		if (ptr != NULL)
+-		    AppendToRedobuffLit(ptr + temp, -1);
++		    ptr = NULL;
++		ins_compl_fixRedoBufForLeader(ptr);
+ 	    }
+ 
+ #ifdef FEAT_CINDENT
+@@ -3759,8 +3865,19 @@
+ 	    if (want_cindent && in_cinkeys(KEY_COMPLETE, ' ', inindent(0)))
+ 		do_c_expr_indent();
+ #endif
++#ifdef FEAT_AUTOCMD
++	    /* Trigger the CompleteDone event to give scripts a chance to act
++	     * upon the completion. */
++	    apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
++#endif
+ 	}
+     }
++#ifdef FEAT_AUTOCMD
++    else if (ctrl_x_mode == CTRL_X_LOCAL_MSG)
++	/* Trigger the CompleteDone event to give scripts a chance to act
++	 * upon the (possibly failed) completion. */
++	apply_autocmds(EVENT_COMPLETEDONE, NULL, NULL, FALSE, curbuf);
++#endif
+ 
+     /* reset continue_* if we left expansion-mode, if we stay they'll be
+      * (re)set properly in ins_complete() */
+@@ -3774,6 +3891,44 @@
+ }
+ 
+ /*
++ * Fix the redo buffer for the completion leader replacing some of the typed
++ * text.  This inserts backspaces and appends the changed text.
++ * "ptr" is the known leader text or NUL.
++ */
++    static void
++ins_compl_fixRedoBufForLeader(ptr_arg)
++    char_u *ptr_arg;
++{
++    int	    len;
++    char_u  *p;
++    char_u  *ptr = ptr_arg;
++
++    if (ptr == NULL)
++    {
++	if (compl_leader != NULL)
++	    ptr = compl_leader;
++	else
++	    return;  /* nothing to do */
++    }
++    if (compl_orig_text != NULL)
++    {
++	p = compl_orig_text;
++	for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len)
++	    ;
++#ifdef FEAT_MBYTE
++	if (len > 0)
++	    len -= (*mb_head_off)(p, p + len);
++#endif
++	for (p += len; *p != NUL; mb_ptr_adv(p))
++	    AppendCharToRedobuff(K_BS);
++    }
++    else
++	len = 0;
++    if (ptr != NULL)
++	AppendToRedobuffLit(ptr + len, -1);
++}
++
++/*
+  * Loops through the list of windows, loaded-buffers or non-loaded-buffers
+  * (depending on flag) starting from buf and looking for a non-scanned
+  * buffer (other than curbuf).	curbuf is special, if it is called with
+@@ -3829,10 +3984,14 @@
+     int		type;	    /* CTRL_X_OMNI or CTRL_X_FUNCTION */
+     char_u	*base;
+ {
+-    list_T      *matchlist;
++    list_T      *matchlist = NULL;
++    dict_T	*matchdict = NULL;
+     char_u	*args[2];
+     char_u	*funcname;
+     pos_T	pos;
++    win_T	*curwin_save;
++    buf_T	*curbuf_save;
++    typval_T	rettv;
+ 
+     funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+     if (*funcname == NUL)
+@@ -3843,13 +4002,50 @@
+     args[1] = base;
+ 
+     pos = curwin->w_cursor;
+-    matchlist = call_func_retlist(funcname, 2, args, FALSE);
++    curwin_save = curwin;
++    curbuf_save = curbuf;
++
++    /* Call a function, which returns a list or dict. */
++    if (call_vim_function(funcname, 2, args, FALSE, FALSE, &rettv) == OK)
++    {
++	switch (rettv.v_type)
++	{
++	    case VAR_LIST:
++		matchlist = rettv.vval.v_list;
++		break;
++	    case VAR_DICT:
++		matchdict = rettv.vval.v_dict;
++		break;
++	    default:
++		/* TODO: Give error message? */
++		clear_tv(&rettv);
++		break;
++	}
++    }
++
++    if (curwin_save != curwin || curbuf_save != curbuf)
++    {
++	EMSG(_(e_complwin));
++	goto theend;
++    }
+     curwin->w_cursor = pos;	/* restore the cursor position */
+-    if (matchlist == NULL)
+-	return;
++    check_cursor();
++    if (!equalpos(curwin->w_cursor, pos))
++    {
++	EMSG(_(e_compldel));
++	goto theend;
++    }
++
++    if (matchlist != NULL)
++	ins_compl_add_list(matchlist);
++    else if (matchdict != NULL)
++	ins_compl_add_dict(matchdict);
+ 
+-    ins_compl_add_list(matchlist);
+-    list_unref(matchlist);
++theend:
++    if (matchdict != NULL)
++	dict_unref(matchdict);
++    if (matchlist != NULL)
++	list_unref(matchlist);
+ }
+ #endif /* FEAT_COMPL_FUNC */
+ 
+@@ -3876,6 +4072,33 @@
+ }
+ 
+ /*
++ * Add completions from a dict.
++ */
++    static void
++ins_compl_add_dict(dict)
++    dict_T	*dict;
++{
++    dictitem_T	*di_refresh;
++    dictitem_T	*di_words;
++
++    /* Check for optional "refresh" item. */
++    compl_opt_refresh_always = FALSE;
++    di_refresh = dict_find(dict, (char_u *)"refresh", 7);
++    if (di_refresh != NULL && di_refresh->di_tv.v_type == VAR_STRING)
++    {
++	char_u	*v = di_refresh->di_tv.vval.v_string;
++
++	if (v != NULL && STRCMP(v, (char_u *)"always") == 0)
++	    compl_opt_refresh_always = TRUE;
++    }
++
++    /* Add completions from a "words" list. */
++    di_words = dict_find(dict, (char_u *)"words", 5);
++    if (di_words != NULL && di_words->di_tv.v_type == VAR_LIST)
++	ins_compl_add_list(di_words->di_tv.vval.v_list);
++}
++
++/*
+  * Add a match to the list of matches from a typeval_T.
+  * If the given string is already in the list of completions, then return
+  * NOTDONE, otherwise add it to the list and return OK.  If there is an error,
+@@ -3889,6 +4112,7 @@
+     char_u	*word;
+     int		icase = FALSE;
+     int		adup = FALSE;
++    int		aempty = FALSE;
+     char_u	*(cptext[CPT_COUNT]);
+ 
+     if (tv->v_type == VAR_DICT && tv->vval.v_dict != NULL)
+@@ -3906,13 +4130,15 @@
+ 	    icase = get_dict_number(tv->vval.v_dict, (char_u *)"icase");
+ 	if (get_dict_string(tv->vval.v_dict, (char_u *)"dup", FALSE) != NULL)
+ 	    adup = get_dict_number(tv->vval.v_dict, (char_u *)"dup");
++	if (get_dict_string(tv->vval.v_dict, (char_u *)"empty", FALSE) != NULL)
++	    aempty = get_dict_number(tv->vval.v_dict, (char_u *)"empty");
+     }
+     else
+     {
+ 	word = get_tv_string_chk(tv);
+ 	vim_memset(cptext, 0, sizeof(cptext));
+     }
+-    if (word == NULL || *word == NUL)
++    if (word == NULL || (!aempty && *word == NUL))
+ 	return FAIL;
+     return ins_compl_add(word, -1, icase, NULL, cptext, dir, 0, adup);
+ }
+@@ -4015,8 +4241,8 @@
+ 			ins_buf->b_fname == NULL
+ 			    ? buf_spname(ins_buf)
+ 			    : ins_buf->b_sfname == NULL
+-				? (char *)ins_buf->b_fname
+-				: (char *)ins_buf->b_sfname);
++				? ins_buf->b_fname
++				: ins_buf->b_sfname);
+ 		(void)msg_trunc_attr(IObuff, TRUE, hl_attr(HLF_R));
+ 	    }
+ 	    else if (*e_cpt == NUL)
+@@ -4118,13 +4344,7 @@
+ 
+ 		/* May change home directory back to "~". */
+ 		tilde_replace(compl_pattern, num_matches, matches);
+-		ins_compl_add_matches(num_matches, matches,
+-#ifdef CASE_INSENSITIVE_FILENAME
+-			TRUE
+-#else
+-			FALSE
+-#endif
+-			);
++		ins_compl_add_matches(num_matches, matches, p_fic || p_wic);
+ 	    }
+ 	    break;
+ 
+@@ -4403,6 +4623,11 @@
+     int	    found_end = FALSE;
+     int	    advance;
+ 
++    /* When user complete function return -1 for findstart which is next
++     * time of 'always', compl_shown_match become NULL. */
++    if (compl_shown_match == NULL)
++	return -1;
++
+     if (compl_leader != NULL
+ 			&& (compl_shown_match->cp_flags & ORIGINAL_TEXT) == 0)
+     {
+@@ -4994,6 +5219,8 @@
+ 	    int		col;
+ 	    char_u	*funcname;
+ 	    pos_T	pos;
++	    win_T	*curwin_save;
++	    buf_T	*curbuf_save;
+ 
+ 	    /* Call 'completefunc' or 'omnifunc' and get pattern length as a
+ 	     * string */
+@@ -5009,8 +5236,40 @@
+ 	    args[0] = (char_u *)"1";
+ 	    args[1] = NULL;
+ 	    pos = curwin->w_cursor;
++	    curwin_save = curwin;
++	    curbuf_save = curbuf;
+ 	    col = call_func_retnr(funcname, 2, args, FALSE);
++	    if (curwin_save != curwin || curbuf_save != curbuf)
++	    {
++		EMSG(_(e_complwin));
++		return FAIL;
++	    }
+ 	    curwin->w_cursor = pos;	/* restore the cursor position */
++	    check_cursor();
++	    if (!equalpos(curwin->w_cursor, pos))
++	    {
++		EMSG(_(e_compldel));
++		return FAIL;
++	    }
++
++	    /* Return value -2 means the user complete function wants to
++	     * cancel the complete without an error.
++	     * Return value -3 does the same as -2 and leaves CTRL-X mode.*/
++	    if (col == -2)
++		return FAIL;
++	    if (col == -3)
++	    {
++		ctrl_x_mode = 0;
++		edit_submode = NULL;
++		msg_clr_cmdline();
++		return FAIL;
++	    }
++
++	    /*
++	     * Reset extended parameters of completion, when start new
++	     * completion.
++	     */
++	    compl_opt_refresh_always = FALSE;
+ 
+ 	    if (col < 0)
+ 		col = curs_col;
+@@ -5089,6 +5348,10 @@
+ 	else
+ 	    edit_submode = (char_u *)_(CTRL_X_MSG(ctrl_x_mode));
+ 
++	/* If any of the original typed text has been changed we need to fix
++	 * the redo buffer. */
++	ins_compl_fixRedoBufForLeader(NULL);
++
+ 	/* Always add completion for the original text. */
+ 	vim_free(compl_orig_text);
+ 	compl_orig_text = vim_strnsave(line + compl_col, compl_length);
+@@ -5249,7 +5512,7 @@
+ 				compl_curr_match->cp_number);
+ 		edit_submode_extra = match_ref;
+ 		edit_submode_highl = HLF_R;
+-		if (dollar_vcol)
++		if (dollar_vcol >= 0)
+ 		    curs_columns(FALSE);
+ 	    }
+ 	}
+@@ -5558,6 +5821,16 @@
+ # define WHITECHAR(cc) vim_iswhite(cc)
+ #endif
+ 
++/*
++ * "flags": INSCHAR_FORMAT - force formatting
++ *	    INSCHAR_CTRLV  - char typed just after CTRL-V
++ *	    INSCHAR_NO_FEX - don't use 'formatexpr'
++ *
++ *   NOTE: passes the flags value straight through to internal_format() which,
++ *	   beside INSCHAR_FORMAT (above), is also looking for these:
++ *	    INSCHAR_DO_COM   - format comments
++ *	    INSCHAR_COM_LIST - format comments with num list or 2nd line indent
++ */
+     void
+ insertchar(c, flags, second_indent)
+     int		c;			/* character to insert or NUL */
+@@ -5636,7 +5909,7 @@
+ 	 * Need to remove existing (middle) comment leader and insert end
+ 	 * comment leader.  First, check what comment leader we can find.
+ 	 */
+-	i = get_leader_len(line = ml_get_curline(), &p, FALSE);
++	i = get_leader_len(line = ml_get_curline(), &p, FALSE, TRUE);
+ 	if (i > 0 && vim_strchr(p, COM_MIDDLE) != NULL)	/* Just checking */
+ 	{
+ 	    /* Skip middle-comment string */
+@@ -5691,6 +5964,8 @@
+      * Don't do this when 'cindent' or 'indentexpr' is set, because we might
+      * need to re-indent at a ':', or any other character (but not what
+      * 'paste' is set)..
++     * Don't do this when there an InsertCharPre autocommand is defined,
++     * because we need to fire the event for every character.
+      */
+ #ifdef USE_ON_FLY_SCROLL
+     dont_scroll = FALSE;		/* allow scrolling here */
+@@ -5708,6 +5983,9 @@
+ #ifdef FEAT_RIGHTLEFT
+ 	    && !p_ri
+ #endif
++#ifdef FEAT_AUTOCMD
++	    && !has_insertcharpre()
++#endif
+ 	       )
+     {
+ #define INPUT_BUFLEN 100
+@@ -5795,6 +6073,9 @@
+ 
+ /*
+  * Format text at the current insert position.
++ *
++ * If the INSCHAR_COM_LIST flag is present, then the value of second_indent
++ * will be the comment leader length sent to open_line().
+  */
+     static void
+ internal_format(textwidth, second_indent, flags, format_only, c)
+@@ -5869,7 +6150,7 @@
+ 
+ 	/* Don't break until after the comment leader */
+ 	if (do_comments)
+-	    leader_len = get_leader_len(ml_get_curline(), NULL, FALSE);
++	    leader_len = get_leader_len(ml_get_curline(), NULL, FALSE, TRUE);
+ 	else
+ 	    leader_len = 0;
+ 
+@@ -5902,6 +6183,7 @@
+ 	 * Stop at first entered white when 'formatoptions' has 'v'
+ 	 */
+ 	while ((!fo_ins_blank && !has_format_option(FO_INS_VI))
++		    || (flags & INSCHAR_FORMAT)
+ 		    || curwin->w_cursor.lnum != Insstart.lnum
+ 		    || curwin->w_cursor.col >= Insstart.col)
+ 	{
+@@ -6072,23 +6354,59 @@
+ 		+ (fo_white_par ? OPENLINE_KEEPTRAIL : 0)
+ #ifdef FEAT_COMMENTS
+ 		+ (do_comments ? OPENLINE_DO_COM : 0)
++		+ ((flags & INSCHAR_COM_LIST) ? OPENLINE_COM_LIST : 0)
+ #endif
+-		, old_indent);
+-	old_indent = 0;
++		, ((flags & INSCHAR_COM_LIST) ? second_indent : old_indent));
++	if (!(flags & INSCHAR_COM_LIST))
++	    old_indent = 0;
+ 
+ 	replace_offset = 0;
+ 	if (first_line)
+ 	{
+-	    if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
+-		second_indent = get_number_indent(curwin->w_cursor.lnum -1);
+-	    if (second_indent >= 0)
++	    if (!(flags & INSCHAR_COM_LIST))
+ 	    {
++		/*
++		 * This section is for auto-wrap of numeric lists.  When not
++		 * in insert mode (i.e. format_lines()), the INSCHAR_COM_LIST
++		 * flag will be set and open_line() will handle it (as seen
++		 * above).  The code here (and in get_number_indent()) will
++		 * recognize comments if needed...
++		 */
++		if (second_indent < 0 && has_format_option(FO_Q_NUMBER))
++		    second_indent =
++				 get_number_indent(curwin->w_cursor.lnum - 1);
++		if (second_indent >= 0)
++		{
+ #ifdef FEAT_VREPLACE
+-		if (State & VREPLACE_FLAG)
+-		    change_indent(INDENT_SET, second_indent, FALSE, NUL, TRUE);
+-		else
++		    if (State & VREPLACE_FLAG)
++			change_indent(INDENT_SET, second_indent,
++							    FALSE, NUL, TRUE);
++		    else
+ #endif
+-		    (void)set_indent(second_indent, SIN_CHANGED);
++#ifdef FEAT_COMMENTS
++			if (leader_len > 0 && second_indent - leader_len > 0)
++		    {
++			int i;
++			int padding = second_indent - leader_len;
++
++			/* We started at the first_line of a numbered list
++			 * that has a comment.  the open_line() function has
++			 * inserted the proper comment leader and positioned
++			 * the cursor at the end of the split line.  Now we
++			 * add the additional whitespace needed after the
++			 * comment leader for the numbered list.  */
++			for (i = 0; i < padding; i++)
++			    ins_str((char_u *)" ");
++			changed_bytes(curwin->w_cursor.lnum, leader_len);
++		    }
++		    else
++		    {
++#endif
++			(void)set_indent(second_indent, SIN_CHANGED);
++#ifdef FEAT_COMMENTS
++		    }
++#endif
++		}
+ 	    }
+ 	    first_line = FALSE;
+ 	}
+@@ -6194,7 +6512,7 @@
+     /* With the 'c' flag in 'formatoptions' and 't' missing: only format
+      * comments. */
+     if (has_format_option(FO_WRAP_COMS) && !has_format_option(FO_WRAP)
+-				     && get_leader_len(old, NULL, FALSE) == 0)
++				     && get_leader_len(old, NULL, FALSE, TRUE) == 0)
+ 	return;
+ #endif
+ 
+@@ -6598,11 +6916,7 @@
+     char_u	*s;
+ 
+     vim_free(last_insert);
+-#ifdef FEAT_MBYTE
+     last_insert = alloc(MB_MAXBYTES * 3 + 5);
+-#else
+-    last_insert = alloc(6);
+-#endif
+     if (last_insert != NULL)
+     {
+ 	s = last_insert;
+@@ -6640,7 +6954,7 @@
+     char_u	*s;
+ {
+ #ifdef FEAT_MBYTE
+-    char_u	temp[MB_MAXBYTES];
++    char_u	temp[MB_MAXBYTES + 1];
+     int		i;
+     int		len;
+ 
+@@ -6856,7 +7170,7 @@
+ 	    /*
+ 	     * Count each sequence of folded lines as one logical line.
+ 	     */
+-	    /* go to the the start of the current fold */
++	    /* go to the start of the current fold */
+ 	    (void)hasFolding(lnum, &lnum, NULL);
+ 
+ 	    while (n--)
+@@ -6907,7 +7221,7 @@
+ 	(void)hasFolding(lnum, NULL, &lnum);
+ #endif
+ 	/* This fails if the cursor is already in the last line or would move
+-	 * beyound the last line and '-' is in 'cpoptions' */
++	 * beyond the last line and '-' is in 'cpoptions' */
+ 	if (lnum >= curbuf->b_ml.ml_line_count
+ 		|| (lnum + n > curbuf->b_ml.ml_line_count
+ 		    && vim_strchr(p_cpo, CPO_MINUS) != NULL))
+@@ -7202,7 +7516,7 @@
+     int		cc;
+ {
+     int		n;
+-    char_u	buf[MB_MAXBYTES];
++    char_u	buf[MB_MAXBYTES + 1];
+     int		i;
+     int		c;
+ 
+@@ -7409,7 +7723,7 @@
+ /*
+  * return TRUE if 'cinkeys' contains the key "keytyped",
+  * when == '*':	    Only if key is preceded with '*'	(indent before insert)
+- * when == '!':	    Only if key is prededed with '!'	(don't insert)
++ * when == '!':	    Only if key is preceded with '!'	(don't insert)
+  * when == ' ':	    Only if key is not preceded with '*'(indent afterwards)
+  *
+  * "keytyped" can have a few special values:
+@@ -8235,7 +8549,7 @@
+ #endif
+ 
+ /*
+- * <Insert> key in Insert mode: toggle insert/remplace mode.
++ * <Insert> key in Insert mode: toggle insert/replace mode.
+  */
+     static void
+ ins_insert(replaceState)
+@@ -8352,7 +8666,7 @@
+     {
+ 	temp = curwin->w_cursor.col;
+ 	if (!can_bs(BS_EOL)		/* only if "eol" included */
+-		|| do_join(2, FALSE, TRUE) == FAIL)
++		|| do_join(2, FALSE, TRUE, FALSE) == FAIL)
+ 	    vim_beep();
+ 	else
+ 	    curwin->w_cursor.col = temp;
+@@ -8533,7 +8847,7 @@
+ 			ptr[len - 1] = NUL;
+ 		}
+ 
+-		(void)do_join(2, FALSE, FALSE);
++		(void)do_join(2, FALSE, FALSE, FALSE);
+ 		if (temp == NUL && gchar_cursor() != NUL)
+ 		    inc_cursor();
+ 	    }
+@@ -8612,7 +8926,7 @@
+ 	 */
+ 	if (	   mode == BACKSPACE_CHAR
+ 		&& ((p_sta && in_indent)
+-		    || (curbuf->b_p_sts != 0
++		    || (get_sts_value() != 0
+ 			&& curwin->w_cursor.col > 0
+ 			&& (*(ml_get_cursor() - 1) == TAB
+ 			    || (*(ml_get_cursor() - 1) == ' '
+@@ -8626,9 +8940,9 @@
+ 
+ 	    *inserted_space_p = FALSE;
+ 	    if (p_sta && in_indent)
+-		ts = curbuf->b_p_sw;
++		ts = (int)get_sw_value();
+ 	    else
+-		ts = curbuf->b_p_sts;
++		ts = (int)get_sts_value();
+ 	    /* Compute the virtual column where we want to be.  Since
+ 	     * 'showbreak' may get in the way, need to get the last column of
+ 	     * the previous character. */
+@@ -8768,7 +9082,7 @@
+      * We can emulate the vi behaviour by pretending there is a dollar
+      * displayed even when there isn't.
+      *  --pkv Sun Jan 19 01:56:40 EST 2003 */
+-    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == 0)
++    if (vim_strchr(p_cpo, CPO_BACKSPACE) != NULL && dollar_vcol == -1)
+ 	dollar_vcol = curwin->w_virtcol;
+ 
+ #ifdef FEAT_FOLDING
+@@ -8845,9 +9159,8 @@
+ 
+     tpos = curwin->w_cursor;
+ 
+-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
+-    /* Currently the mouse coordinates are only known in the GUI. */
+-    if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
++# ifdef FEAT_WINDOWS
++    if (mouse_row >= 0 && mouse_col >= 0)
+     {
+ 	int row, col;
+ 
+@@ -8897,7 +9210,7 @@
+ # endif
+     }
+ 
+-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
++# ifdef FEAT_WINDOWS
+     curwin->w_redr_status = TRUE;
+ 
+     curwin = old_curwin;
+@@ -9316,8 +9629,8 @@
+      * When nothing special, insert TAB like a normal character
+      */
+     if (!curbuf->b_p_et
+-	    && !(p_sta && ind && curbuf->b_p_ts != curbuf->b_p_sw)
+-	    && curbuf->b_p_sts == 0)
++	    && !(p_sta && ind && curbuf->b_p_ts != get_sw_value())
++	    && get_sts_value() == 0)
+ 	return TRUE;
+ 
+     if (stop_arrow() == FAIL)
+@@ -9332,9 +9645,9 @@
+     AppendToRedobuff((char_u *)"\t");
+ 
+     if (p_sta && ind)		/* insert tab in indent, use 'shiftwidth' */
+-	temp = (int)curbuf->b_p_sw;
+-    else if (curbuf->b_p_sts > 0) /* use 'softtabstop' when set */
+-	temp = (int)curbuf->b_p_sts;
++	temp = (int)get_sw_value();
++    else if (curbuf->b_p_sts != 0) /* use 'softtabstop' when set */
++	temp = (int)get_sts_value();
+     else			/* otherwise use 'tabstop' */
+ 	temp = (int)curbuf->b_p_ts;
+     temp -= get_nolist_virtcol() % temp;
+@@ -9362,7 +9675,7 @@
+     /*
+      * When 'expandtab' not set: Replace spaces by TABs where possible.
+      */
+-    if (!curbuf->b_p_et && (curbuf->b_p_sts || (p_sta && ind)))
++    if (!curbuf->b_p_et && (get_sts_value() || (p_sta && ind)))
+     {
+ 	char_u		*ptr;
+ #ifdef FEAT_VREPLACE
+@@ -9598,6 +9911,7 @@
+ {
+     int	    c;
+     int	    cc;
++    int	    did_putchar = FALSE;
+ 
+     pc_status = PC_STATUS_UNSET;
+     if (redrawing() && !char_avail())
+@@ -9606,6 +9920,7 @@
+ 	ins_redraw(FALSE);
+ 
+ 	edit_putchar('?', TRUE);
++	did_putchar = TRUE;
+ #ifdef FEAT_CMDL_INFO
+ 	add_to_showcmd_c(Ctrl_K);
+ #endif
+@@ -9622,8 +9937,10 @@
+     c = plain_vgetc();
+     --no_mapping;
+     --allow_keys;
+-    edit_unputchar();  /* when line fits in 'columns' the '?' is at the start
+-			  of the next line and will not be redrawn */
++    if (did_putchar)
++	/* when the line fits in 'columns' the '?' is at the start of the next
++	 * line and will not be removed by the redraw */
++	edit_unputchar();
+ 
+     if (IS_SPECIAL(c) || mod_mask)	    /* special key */
+     {
+@@ -9635,6 +9952,7 @@
+     }
+     if (c != ESC)
+     {
++	did_putchar = FALSE;
+ 	if (redrawing() && !char_avail())
+ 	{
+ 	    /* may need to redraw when no more chars available now */
+@@ -9642,11 +9960,9 @@
+ 
+ 	    if (char2cells(c) == 1)
+ 	    {
+-		/* first remove the '?', otherwise it's restored when typing
+-		 * an ESC next */
+-		edit_unputchar();
+ 		ins_redraw(FALSE);
+ 		edit_putchar(c, TRUE);
++		did_putchar = TRUE;
+ 	    }
+ #ifdef FEAT_CMDL_INFO
+ 	    add_to_showcmd_c(c);
+@@ -9657,8 +9973,10 @@
+ 	cc = plain_vgetc();
+ 	--no_mapping;
+ 	--allow_keys;
+-	edit_unputchar();  /* when line fits in 'columns' the '?' is at the
+-			      start of the next line and will not be redrawn */
++	if (did_putchar)
++	    /* when the line fits in 'columns' the '?' is at the start of the
++	     * next line and will not be removed by a redraw */
++	    edit_unputchar();
+ 	if (cc != ESC)
+ 	{
+ 	    AppendToRedobuff((char_u *)CTRL_V_STR);
+@@ -9680,7 +9998,7 @@
+  * Handle CTRL-E and CTRL-Y in Insert mode: copy char from other line.
+  * Returns the char to be inserted, or NUL if none found.
+  */
+-    static int
++    int
+ ins_copychar(lnum)
+     linenr_T	lnum;
+ {
+@@ -9870,3 +10188,52 @@
+     validate_virtcol();
+     return curwin->w_virtcol;
+ }
++
++#ifdef FEAT_AUTOCMD
++/*
++ * Handle the InsertCharPre autocommand.
++ * "c" is the character that was typed.
++ * Return a pointer to allocated memory with the replacement string.
++ * Return NULL to continue inserting "c".
++ */
++    static char_u *
++do_insert_char_pre(c)
++    int c;
++{
++    char_u	*res;
++    char_u	buf[MB_MAXBYTES + 1];
++
++    /* Return quickly when there is nothing to do. */
++    if (!has_insertcharpre())
++	return NULL;
++
++#ifdef FEAT_MBYTE
++    if (has_mbyte)
++	buf[(*mb_char2bytes)(c, buf)] = NUL;
++    else
++#endif
++    {
++	buf[0] = c;
++	buf[1] = NUL;
++    }
++
++    /* Lock the text to avoid weird things from happening. */
++    ++textlock;
++    set_vim_var_string(VV_CHAR, buf, -1);  /* set v:char */
++
++    res = NULL;
++    if (apply_autocmds(EVENT_INSERTCHARPRE, NULL, NULL, FALSE, curbuf))
++    {
++	/* Get the value of v:char.  It may be empty or more than one
++	 * character.  Only use it when changed, otherwise continue with the
++	 * original character to avoid breaking autoindent. */
++	if (STRCMP(buf, get_vim_var_str(VV_CHAR)) != 0)
++	    res = vim_strsave(get_vim_var_str(VV_CHAR));
++    }
++
++    set_vim_var_string(VV_CHAR, NULL, -1);  /* clear v:char */
++    --textlock;
++
++    return res;
++}
++#endif
+diff -Naur vim73.orig/src/eval.c vim73/src/eval.c
+--- vim73.orig/src/eval.c	2010-08-09 20:12:14.000000000 +0000
++++ vim73/src/eval.c	2013-06-07 17:07:30.625587892 +0000
+@@ -10,9 +10,6 @@
+ /*
+  * eval.c: Expression evaluation.
+  */
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+ 
+ #include "vim.h"
+ 
+@@ -116,12 +113,7 @@
+ static char *e_nofunc = N_("E130: Unknown function: %s");
+ static char *e_illvar = N_("E461: Illegal variable name: %s");
+ 
+-/*
+- * All user-defined global variables are stored in dictionary "globvardict".
+- * "globvars_var" is the variable that is used for "g:".
+- */
+-static dict_T		globvardict;
+-static dictitem_T	globvars_var;
++static dictitem_T	globvars_var;		/* variable used for g: */
+ #define globvarht globvardict.dv_hashtab
+ 
+ /*
+@@ -355,13 +347,14 @@
+     {VV_NAME("swapname",	 VAR_STRING), VV_RO},
+     {VV_NAME("swapchoice",	 VAR_STRING), 0},
+     {VV_NAME("swapcommand",	 VAR_STRING), VV_RO},
+-    {VV_NAME("char",		 VAR_STRING), VV_RO},
++    {VV_NAME("char",		 VAR_STRING), 0},
+     {VV_NAME("mouse_win",	 VAR_NUMBER), 0},
+     {VV_NAME("mouse_lnum",	 VAR_NUMBER), 0},
+     {VV_NAME("mouse_col",	 VAR_NUMBER), 0},
+     {VV_NAME("operator",	 VAR_STRING), VV_RO},
+     {VV_NAME("searchforward",	 VAR_NUMBER), 0},
+     {VV_NAME("oldfiles",	 VAR_LIST), 0},
++    {VV_NAME("windowid",	 VAR_NUMBER), VV_RO},
+ };
+ 
+ /* shorthand */
+@@ -372,19 +365,11 @@
+ #define vv_list		vv_di.di_tv.vval.v_list
+ #define vv_tv		vv_di.di_tv
+ 
+-/*
+- * The v: variables are stored in dictionary "vimvardict".
+- * "vimvars_var" is the variable that is used for the "l:" scope.
+- */
+-static dict_T		vimvardict;
+-static dictitem_T	vimvars_var;
++static dictitem_T	vimvars_var;		/* variable used for v: */
+ #define vimvarht  vimvardict.dv_hashtab
+ 
+ static void prepare_vimvar __ARGS((int idx, typval_T *save_tv));
+ static void restore_vimvar __ARGS((int idx, typval_T *save_tv));
+-#if defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)
+-static int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, typval_T *rettv));
+-#endif
+ static int ex_let_vars __ARGS((char_u *arg, typval_T *tv, int copy, int semicolon, int var_count, char_u *nextchars));
+ static char_u *skip_var_list __ARGS((char_u *arg, int *var_count, int *semicolon));
+ static char_u *skip_var_one __ARGS((char_u *arg));
+@@ -405,8 +390,6 @@
+ static void clear_lval __ARGS((lval_T *lp));
+ static void set_var_lval __ARGS((lval_T *lp, char_u *endp, typval_T *rettv, int copy, char_u *op));
+ static int tv_op __ARGS((typval_T *tv1, typval_T *tv2, char_u  *op));
+-static void list_add_watch __ARGS((list_T *l, listwatch_T *lw));
+-static void list_rem_watch __ARGS((list_T *l, listwatch_T *lwrem));
+ static void list_fix_watch __ARGS((list_T *l, listitem_T *item));
+ static void ex_unletlock __ARGS((exarg_T *eap, char_u *argstart, int deep));
+ static int do_unlet_var __ARGS((lval_T *lp, char_u *name_end, int forceit));
+@@ -429,32 +412,21 @@
+ static int get_lit_string_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
+ static int get_list_tv __ARGS((char_u **arg, typval_T *rettv, int evaluate));
+ static int rettv_list_alloc __ARGS((typval_T *rettv));
+-static listitem_T *listitem_alloc __ARGS((void));
+-static void listitem_free __ARGS((listitem_T *item));
+-static void listitem_remove __ARGS((list_T *l, listitem_T *item));
+ static long list_len __ARGS((list_T *l));
+-static int list_equal __ARGS((list_T *l1, list_T *l2, int ic));
+-static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic));
+-static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic));
+-static listitem_T *list_find __ARGS((list_T *l, long n));
++static int list_equal __ARGS((list_T *l1, list_T *l2, int ic, int recursive));
++static int dict_equal __ARGS((dict_T *d1, dict_T *d2, int ic, int recursive));
++static int tv_equal __ARGS((typval_T *tv1, typval_T *tv2, int ic, int recursive));
+ static long list_find_nr __ARGS((list_T *l, long idx, int *errorp));
+ static long list_idx_of_item __ARGS((list_T *l, listitem_T *item));
+-static void list_append __ARGS((list_T *l, listitem_T *item));
+ static int list_append_number __ARGS((list_T *l, varnumber_T n));
+-static int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
+ static int list_extend __ARGS((list_T	*l1, list_T *l2, listitem_T *bef));
+ static int list_concat __ARGS((list_T *l1, list_T *l2, typval_T *tv));
+ static list_T *list_copy __ARGS((list_T *orig, int deep, int copyID));
+-static void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+ static char_u *list2string __ARGS((typval_T *tv, int copyID));
++static int list_join_inner __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo_style, int copyID, garray_T *join_gap));
+ static int list_join __ARGS((garray_T *gap, list_T *l, char_u *sep, int echo, int copyID));
+ static int free_unref_items __ARGS((int copyID));
+-static void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
+-static void set_ref_in_list __ARGS((list_T *l, int copyID));
+-static void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ static int rettv_dict_alloc __ARGS((typval_T *rettv));
+-static void dict_unref __ARGS((dict_T *d));
+-static void dict_free __ARGS((dict_T *d, int recurse));
+ static dictitem_T *dictitem_copy __ARGS((dictitem_T *org));
+ static void dictitem_remove __ARGS((dict_T *dict, dictitem_T *item));
+ static dict_T *dict_copy __ARGS((dict_T *orig, int deep, int copyID));
+@@ -480,6 +452,7 @@
+ static void f_acos __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
+ static void f_add __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_and __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_append __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_argc __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_argidx __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -608,6 +581,7 @@
+ static void f_inputsave __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_inputsecret __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_insert __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_invert __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_isdirectory __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_islocked __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_items __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -625,6 +599,9 @@
+ static void f_log __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_log10 __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
++#ifdef FEAT_LUA
++static void f_luaeval __ARGS((typval_T *argvars, typval_T *rettv));
++#endif
+ static void f_map __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_maparg __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_mapcheck __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -646,6 +623,7 @@
+ #endif
+ static void f_nextnonblank __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_nr2char __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_or __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_pathshorten __ARGS((typval_T *argvars, typval_T *rettv));
+ #ifdef FEAT_FLOAT
+ static void f_pow __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -653,6 +631,12 @@
+ static void f_prevnonblank __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_printf __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_pumvisible __ARGS((typval_T *argvars, typval_T *rettv));
++#ifdef FEAT_PYTHON3
++static void f_py3eval __ARGS((typval_T *argvars, typval_T *rettv));
++#endif
++#ifdef FEAT_PYTHON
++static void f_pyeval __ARGS((typval_T *argvars, typval_T *rettv));
++#endif
+ static void f_range __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_readfile __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_reltime __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -670,6 +654,8 @@
+ #ifdef FEAT_FLOAT
+ static void f_round __ARGS((typval_T *argvars, typval_T *rettv));
+ #endif
++static void f_screencol __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_screenrow __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_search __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_searchdecl __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_searchpair __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -688,7 +674,11 @@
+ static void f_settabvar __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_settabwinvar __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_setwinvar __ARGS((typval_T *argvars, typval_T *rettv));
++#ifdef FEAT_CRYPT
++static void f_sha256 __ARGS((typval_T *argvars, typval_T *rettv));
++#endif /* FEAT_CRYPT */
+ static void f_shellescape __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_shiftwidth __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_simplify __ARGS((typval_T *argvars, typval_T *rettv));
+ #ifdef FEAT_FLOAT
+ static void f_sin __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -747,6 +737,7 @@
+ static void f_values __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_virtcol __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_visualmode __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_wildmenumode __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_winbufnr __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_wincol __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_winheight __ARGS((typval_T *argvars, typval_T *rettv));
+@@ -757,6 +748,7 @@
+ static void f_winsaveview __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_winwidth __ARGS((typval_T *argvars, typval_T *rettv));
+ static void f_writefile __ARGS((typval_T *argvars, typval_T *rettv));
++static void f_xor __ARGS((typval_T *argvars, typval_T *rettv));
+ 
+ static int list2fpos __ARGS((typval_T *arg, pos_T *posp, int *fnump));
+ static pos_T *var2fpos __ARGS((typval_T *varp, int dollar_lnum, int *fnum));
+@@ -782,7 +774,7 @@
+ static char_u *get_tv_string_buf __ARGS((typval_T *varp, char_u *buf));
+ static char_u *get_tv_string_buf_chk __ARGS((typval_T *varp, char_u *buf));
+ static dictitem_T *find_var __ARGS((char_u *name, hashtab_T **htp));
+-static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, char_u *varname, int writing));
++static dictitem_T *find_var_in_ht __ARGS((hashtab_T *ht, int htname, char_u *varname, int writing));
+ static hashtab_T *find_var_ht __ARGS((char_u *name, char_u **varname));
+ static void vars_clear_ext __ARGS((hashtab_T *ht, int free_val));
+ static void delete_var __ARGS((hashtab_T *ht, hashitem_T *hi));
+@@ -791,6 +783,8 @@
+ static void set_var __ARGS((char_u *name, typval_T *varp, int copy));
+ static int var_check_ro __ARGS((int flags, char_u *name));
+ static int var_check_fixed __ARGS((int flags, char_u *name));
++static int var_check_func_name __ARGS((char_u *name, int new_var));
++static int valid_varname __ARGS((char_u *varname));
+ static int tv_check_lock __ARGS((int lock, char_u *name));
+ static int item_copy __ARGS((typval_T *from, typval_T *to, int deep, int copyID));
+ static char_u *find_option_end __ARGS((char_u **arg, int *opt_flags));
+@@ -820,8 +814,6 @@
+ static char_u *autoload_name __ARGS((char_u *name));
+ static void cat_func_name __ARGS((char_u *buf, ufunc_T *fp));
+ static void func_free __ARGS((ufunc_T *fp));
+-static void func_unref __ARGS((char_u *name));
+-static void func_ref __ARGS((char_u *name));
+ static void call_user_func __ARGS((ufunc_T *fp, int argcount, typval_T *argvars, typval_T *rettv, linenr_T firstline, linenr_T lastline, dict_T *selfdict));
+ static int can_free_funccal __ARGS((funccall_T *fc, int copyID)) ;
+ static void free_funccal __ARGS((funccall_T *fc, int free_val));
+@@ -838,10 +830,6 @@
+ static void sortFunctions __ARGS(());
+ #endif
+ 
+-
+-/* Character used as separated in autoload function/variable names. */
+-#define AUTOLOAD_CHAR '#'
+-
+ /*
+  * Initialize the global and v: variables.
+  */
+@@ -851,8 +839,9 @@
+     int		    i;
+     struct vimvar   *p;
+ 
+-    init_var_dict(&globvardict, &globvars_var);
+-    init_var_dict(&vimvardict, &vimvars_var);
++    init_var_dict(&globvardict, &globvars_var, VAR_DEF_SCOPE);
++    init_var_dict(&vimvardict, &vimvars_var, VAR_SCOPE);
++    vimvardict.dv_lock = VAR_FIXED;
+     hash_init(&compat_hashtab);
+     hash_init(&func_hashtab);
+ 
+@@ -875,10 +864,11 @@
+ 	    hash_add(&compat_hashtab, p->vv_di.di_key);
+     }
+     set_vim_var_nr(VV_SEARCHFORWARD, 1L);
++    set_reg_var(0);  /* default for v:register is not 0 but '"' */
+ 
+ #ifdef EBCDIC
+     /*
+-     * Sort the function table, to enable binary sort.
++     * Sort the function table, to enable binary search.
+      */
+     sortFunctions();
+ #endif
+@@ -910,6 +900,9 @@
+     hash_clear(&compat_hashtab);
+ 
+     free_scriptnames();
++# if defined(FEAT_CMDL_COMPL)
++    free_locales();
++# endif
+ 
+     /* global variables */
+     vars_clear(&globvarht);
+@@ -1355,7 +1348,11 @@
+ 	{
+ 	    ga_init2(&ga, (int)sizeof(char), 80);
+ 	    if (tv.vval.v_list != NULL)
++	    {
+ 		list_join(&ga, tv.vval.v_list, (char_u *)"\n", TRUE, 0);
++		if (tv.vval.v_list->lv_len > 0)
++		    ga_append(&ga, NL);
++	    }
+ 	    ga_append(&ga, NUL);
+ 	    retval = (char_u *)ga.ga_data;
+ 	}
+@@ -1549,20 +1546,19 @@
+ }
+ 
+ 
+-#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
+-	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
+ /*
+  * Call some vimL function and return the result in "*rettv".
+  * Uses argv[argc] for the function arguments.  Only Number and String
+  * arguments are currently supported.
+  * Returns OK or FAIL.
+  */
+-    static int
+-call_vim_function(func, argc, argv, safe, rettv)
++    int
++call_vim_function(func, argc, argv, safe, str_arg_only, rettv)
+     char_u      *func;
+     int		argc;
+     char_u      **argv;
+     int		safe;		/* use the sandbox */
++    int		str_arg_only;	/* all arguments are strings */
+     typval_T	*rettv;
+ {
+     typval_T	*argvars;
+@@ -1587,8 +1583,11 @@
+ 	    continue;
+ 	}
+ 
+-	/* Recognize a number argument, the others must be strings. */
+-	vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
++	if (str_arg_only)
++	    len = 0;
++	else
++	    /* Recognize a number argument, the others must be strings. */
++	    vim_str2nr(argv[i], NULL, &len, TRUE, TRUE, &n, NULL);
+ 	if (len != 0 && len == (int)STRLEN(argv[i]))
+ 	{
+ 	    argvars[i].v_type = VAR_NUMBER;
+@@ -1624,51 +1623,54 @@
+     return ret;
+ }
+ 
+-# if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
+ /*
+- * Call vimL function "func" and return the result as a string.
+- * Returns NULL when calling the function fails.
++ * Call vimL function "func" and return the result as a number.
++ * Returns -1 when calling the function fails.
+  * Uses argv[argc] for the function arguments.
+  */
+-    void *
+-call_func_retstr(func, argc, argv, safe)
++    long
++call_func_retnr(func, argc, argv, safe)
+     char_u      *func;
+     int		argc;
+     char_u      **argv;
+     int		safe;		/* use the sandbox */
+ {
+     typval_T	rettv;
+-    char_u	*retval;
++    long	retval;
+ 
+-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+-	return NULL;
++    /* All arguments are passed as strings, no conversion to number. */
++    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
++	return -1;
+ 
+-    retval = vim_strsave(get_tv_string(&rettv));
++    retval = get_tv_number_chk(&rettv, NULL);
+     clear_tv(&rettv);
+     return retval;
+ }
+-# endif
+ 
+-# if defined(FEAT_COMPL_FUNC) || defined(PROTO)
++#if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) \
++	|| defined(FEAT_COMPL_FUNC) || defined(PROTO)
++
++# if (defined(FEAT_USR_CMDS) && defined(FEAT_CMDL_COMPL)) || defined(PROTO)
+ /*
+- * Call vimL function "func" and return the result as a number.
+- * Returns -1 when calling the function fails.
++ * Call vimL function "func" and return the result as a string.
++ * Returns NULL when calling the function fails.
+  * Uses argv[argc] for the function arguments.
+  */
+-    long
+-call_func_retnr(func, argc, argv, safe)
++    void *
++call_func_retstr(func, argc, argv, safe)
+     char_u      *func;
+     int		argc;
+     char_u      **argv;
+     int		safe;		/* use the sandbox */
+ {
+     typval_T	rettv;
+-    long	retval;
++    char_u	*retval;
+ 
+-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
+-	return -1;
++    /* All arguments are passed as strings, no conversion to number. */
++    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
++	return NULL;
+ 
+-    retval = get_tv_number_chk(&rettv, NULL);
++    retval = vim_strsave(get_tv_string(&rettv));
+     clear_tv(&rettv);
+     return retval;
+ }
+@@ -1688,7 +1690,8 @@
+ {
+     typval_T	rettv;
+ 
+-    if (call_vim_function(func, argc, argv, safe, &rettv) == FAIL)
++    /* All arguments are passed as strings, no conversion to number. */
++    if (call_vim_function(func, argc, argv, safe, TRUE, &rettv) == FAIL)
+ 	return NULL;
+ 
+     if (rettv.v_type != VAR_LIST)
+@@ -1701,7 +1704,6 @@
+ }
+ #endif
+ 
+-
+ /*
+  * Save the current function call pointer, and set it to NULL.
+  * Used when executing autocommands and for ":source".
+@@ -2111,7 +2113,7 @@
+ {
+     char_u	numbuf[NUMBUFLEN];
+ 
+-    list_hashtable_vars(&curbuf->b_vars.dv_hashtab, (char_u *)"b:",
++    list_hashtable_vars(&curbuf->b_vars->dv_hashtab, (char_u *)"b:",
+ 								 TRUE, first);
+ 
+     sprintf((char *)numbuf, "%ld", (long)curbuf->b_changedtick);
+@@ -2126,7 +2128,7 @@
+ list_win_vars(first)
+     int *first;
+ {
+-    list_hashtable_vars(&curwin->w_vars.dv_hashtab,
++    list_hashtable_vars(&curwin->w_vars->dv_hashtab,
+ 						 (char_u *)"w:", TRUE, first);
+ }
+ 
+@@ -2138,7 +2140,7 @@
+ list_tab_vars(first)
+     int *first;
+ {
+-    list_hashtable_vars(&curtab->tp_vars.dv_hashtab,
++    list_hashtable_vars(&curtab->tp_vars->dv_hashtab,
+ 						 (char_u *)"t:", TRUE, first);
+ }
+ #endif
+@@ -2325,7 +2327,7 @@
+ 	    else if (endchars != NULL
+ 			     && vim_strchr(endchars, *skipwhite(arg)) == NULL)
+ 		EMSG(_(e_letunexp));
+-	    else
++	    else if (!check_secure())
+ 	    {
+ 		c1 = name[len];
+ 		name[len] = NUL;
+@@ -2718,8 +2720,39 @@
+ 	    lp->ll_list = NULL;
+ 	    lp->ll_dict = lp->ll_tv->vval.v_dict;
+ 	    lp->ll_di = dict_find(lp->ll_dict, key, len);
++
++	    /* When assigning to a scope dictionary check that a function and
++	     * variable name is valid (only variable name unless it is l: or
++	     * g: dictionary). Disallow overwriting a builtin function. */
++	    if (rettv != NULL && lp->ll_dict->dv_scope != 0)
++	    {
++		int prevval;
++		int wrong;
++
++		if (len != -1)
++		{
++		    prevval = key[len];
++		    key[len] = NUL;
++		}
++		wrong = (lp->ll_dict->dv_scope == VAR_DEF_SCOPE
++			       && rettv->v_type == VAR_FUNC
++			       && var_check_func_name(key, lp->ll_di == NULL))
++			|| !valid_varname(key);
++		if (len != -1)
++		    key[len] = prevval;
++		if (wrong)
++		    return NULL;
++	    }
++
+ 	    if (lp->ll_di == NULL)
+ 	    {
++		/* Can't add "v:" variable. */
++		if (lp->ll_dict == &vimvardict)
++		{
++		    EMSG2(_(e_illvar), name);
++		    return NULL;
++		}
++
+ 		/* Key does not exist in dict: may need to add it. */
+ 		if (*p == '[' || *p == '.' || unlet)
+ 		{
+@@ -2739,6 +2772,10 @@
+ 		    p = NULL;
+ 		break;
+ 	    }
++	    /* existing variable, need to check if it can be changed */
++	    else if (var_check_ro(lp->ll_di->di_flags, name))
++		return NULL;
++
+ 	    if (len == -1)
+ 		clear_tv(&var1);
+ 	    lp->ll_tv = &lp->ll_di->di_tv;
+@@ -2770,6 +2807,8 @@
+ 	    {
+ 		if (lp->ll_range && !lp->ll_empty2)
+ 		    clear_tv(&var2);
++		if (!quiet)
++		    EMSGN(_(e_listidx), lp->ll_n1);
+ 		return NULL;
+ 	    }
+ 
+@@ -2787,7 +2826,11 @@
+ 		{
+ 		    ni = list_find(lp->ll_list, lp->ll_n2);
+ 		    if (ni == NULL)
++		    {
++			if (!quiet)
++			    EMSGN(_(e_listidx), lp->ll_n2);
+ 			return NULL;
++		    }
+ 		    lp->ll_n2 = list_idx_of_item(lp->ll_list, ni);
+ 		}
+ 
+@@ -2795,7 +2838,11 @@
+ 		if (lp->ll_n1 < 0)
+ 		    lp->ll_n1 = list_idx_of_item(lp->ll_list, lp->ll_li);
+ 		if (lp->ll_n2 < lp->ll_n1)
++		{
++		    if (!quiet)
++			EMSGN(_(e_listidx), lp->ll_n2);
+ 		    return NULL;
++		}
+ 	    }
+ 
+ 	    lp->ll_tv = &lp->ll_li->li_tv;
+@@ -3051,7 +3098,7 @@
+ /*
+  * Add a watcher to a list.
+  */
+-    static void
++    void
+ list_add_watch(l, lw)
+     list_T	*l;
+     listwatch_T	*lw;
+@@ -3064,7 +3111,7 @@
+  * Remove a watcher from a list.
+  * No warning when it isn't found...
+  */
+-    static void
++    void
+ list_rem_watch(l, lwrem)
+     list_T	*l;
+     listwatch_T	*lwrem;
+@@ -3337,6 +3384,18 @@
+     int		failed = FALSE;
+     funcdict_T	fudi;
+ 
++    if (eap->skip)
++    {
++	/* trans_function_name() doesn't work well when skipping, use eval0()
++	 * instead to skip to any following command, e.g. for:
++	 *   :if 0 | call dict.foo().bar() | endif  */
++	++emsg_skip;
++	if (eval0(eap->arg, &rettv, &eap->nextcmd, FALSE) != FAIL)
++	    clear_tv(&rettv);
++	--emsg_skip;
++	return;
++    }
++
+     tofree = trans_function_name(&arg, eap->skip, TFN_INT, &fudi);
+     if (fudi.fd_newkey != NULL)
+     {
+@@ -3386,6 +3445,9 @@
+ 	{
+ 	    curwin->w_cursor.lnum = lnum;
+ 	    curwin->w_cursor.col = 0;
++#ifdef FEAT_VIRTUALEDIT
++	    curwin->w_cursor.coladd = 0;
++#endif
+ 	}
+ 	arg = startarg;
+ 	if (get_func_tv(name, (int)STRLEN(name), &rettv, &arg,
+@@ -3868,7 +3930,7 @@
+     }
+ 
+     /* b: variables */
+-    ht = &curbuf->b_vars.dv_hashtab;
++    ht = &curbuf->b_vars->dv_hashtab;
+     if (bdone < ht->ht_used)
+     {
+ 	if (bdone++ == 0)
+@@ -3886,7 +3948,7 @@
+     }
+ 
+     /* w: variables */
+-    ht = &curwin->w_vars.dv_hashtab;
++    ht = &curwin->w_vars->dv_hashtab;
+     if (wdone < ht->ht_used)
+     {
+ 	if (wdone++ == 0)
+@@ -3900,7 +3962,7 @@
+ 
+ #ifdef FEAT_WINDOWS
+     /* t: variables */
+-    ht = &curtab->tp_vars.dv_hashtab;
++    ht = &curtab->tp_vars->dv_hashtab;
+     if (tdone < ht->ht_used)
+     {
+ 	if (tdone++ == 0)
+@@ -4349,7 +4411,8 @@
+ 		else
+ 		{
+ 		    /* Compare two Lists for being equal or unequal. */
+-		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list, ic);
++		    n1 = list_equal(rettv->vval.v_list, var2.vval.v_list,
++								   ic, FALSE);
+ 		    if (type == TYPE_NEQUAL)
+ 			n1 = !n1;
+ 		}
+@@ -4378,7 +4441,8 @@
+ 		else
+ 		{
+ 		    /* Compare two Dictionaries for being equal or unequal. */
+-		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict, ic);
++		    n1 = dict_equal(rettv->vval.v_dict, var2.vval.v_dict,
++								   ic, FALSE);
+ 		    if (type == TYPE_NEQUAL)
+ 			n1 = !n1;
+ 		}
+@@ -5082,6 +5146,16 @@
+ 		ret = get_func_tv(s, len, rettv, arg,
+ 			  curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+ 			  &len, evaluate, NULL);
++
++		/* If evaluate is FALSE rettv->v_type was not set in
++		 * get_func_tv, but it's needed in handle_subscript() to parse
++		 * what follows. So set it here. */
++		if (rettv->v_type == VAR_UNKNOWN && !evaluate && **arg == '(')
++		{
++		    rettv->vval.v_string = vim_strsave((char_u *)"");
++		    rettv->v_type = VAR_FUNC;
++		}
++
+ 		/* Stop the expression evaluation when immediately
+ 		 * aborting on error, or when an interrupt occurred or
+ 		 * an exception was thrown but not caught. */
+@@ -5097,9 +5171,7 @@
+ 	    else
+ 		ret = OK;
+ 	}
+-
+-	if (alias != NULL)
+-	    vim_free(alias);
++	vim_free(alias);
+     }
+ 
+     *arg = skipwhite(*arg);
+@@ -5868,7 +5940,7 @@
+ /*
+  * Allocate a list item.
+  */
+-    static listitem_T *
++    listitem_T *
+ listitem_alloc()
+ {
+     return (listitem_T *)alloc(sizeof(listitem_T));
+@@ -5877,7 +5949,7 @@
+ /*
+  * Free a list item.  Also clears the value.  Does not notify watchers.
+  */
+-    static void
++    void
+ listitem_free(item)
+     listitem_T *item;
+ {
+@@ -5888,7 +5960,7 @@
+ /*
+  * Remove a list item from a List and free it.  Also clears the value.
+  */
+-    static void
++    void
+ listitem_remove(l, item)
+     list_T  *l;
+     listitem_T *item;
+@@ -5913,10 +5985,11 @@
+  * Return TRUE when two lists have exactly the same values.
+  */
+     static int
+-list_equal(l1, l2, ic)
++list_equal(l1, l2, ic, recursive)
+     list_T	*l1;
+     list_T	*l2;
+     int		ic;	/* ignore case for strings */
++    int		recursive;  /* TRUE when used recursively */
+ {
+     listitem_T	*item1, *item2;
+ 
+@@ -5930,7 +6003,7 @@
+     for (item1 = l1->lv_first, item2 = l2->lv_first;
+ 	    item1 != NULL && item2 != NULL;
+ 			       item1 = item1->li_next, item2 = item2->li_next)
+-	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic))
++	if (!tv_equal(&item1->li_tv, &item2->li_tv, ic, recursive))
+ 	    return FALSE;
+     return item1 == NULL && item2 == NULL;
+ }
+@@ -5952,10 +6025,11 @@
+  * Return TRUE when two dictionaries have exactly the same key/values.
+  */
+     static int
+-dict_equal(d1, d2, ic)
++dict_equal(d1, d2, ic, recursive)
+     dict_T	*d1;
+     dict_T	*d2;
+     int		ic;	/* ignore case for strings */
++    int		recursive; /* TRUE when used recursively */
+ {
+     hashitem_T	*hi;
+     dictitem_T	*item2;
+@@ -5976,7 +6050,7 @@
+ 	    item2 = dict_find(d2, hi->hi_key, -1);
+ 	    if (item2 == NULL)
+ 		return FALSE;
+-	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic))
++	    if (!tv_equal(&HI2DI(hi)->di_tv, &item2->di_tv, ic, recursive))
+ 		return FALSE;
+ 	    --todo;
+ 	}
+@@ -5984,41 +6058,54 @@
+     return TRUE;
+ }
+ 
++static int tv_equal_recurse_limit;
++
+ /*
+  * Return TRUE if "tv1" and "tv2" have the same value.
+  * Compares the items just like "==" would compare them, but strings and
+  * numbers are different.  Floats and numbers are also different.
+  */
+     static int
+-tv_equal(tv1, tv2, ic)
++tv_equal(tv1, tv2, ic, recursive)
+     typval_T *tv1;
+     typval_T *tv2;
+-    int	    ic;	    /* ignore case */
++    int	     ic;	    /* ignore case */
++    int	     recursive;	    /* TRUE when used recursively */
+ {
+     char_u	buf1[NUMBUFLEN], buf2[NUMBUFLEN];
+     char_u	*s1, *s2;
+-    static int  recursive = 0;	    /* cach recursive loops */
++    static int  recursive_cnt = 0;	    /* catch recursive loops */
+     int		r;
+ 
+     if (tv1->v_type != tv2->v_type)
+ 	return FALSE;
++
+     /* Catch lists and dicts that have an endless loop by limiting
+-     * recursiveness to 1000.  We guess they are equal then. */
+-    if (recursive >= 1000)
++     * recursiveness to a limit.  We guess they are equal then.
++     * A fixed limit has the problem of still taking an awful long time.
++     * Reduce the limit every time running into it. That should work fine for
++     * deeply linked structures that are not recursively linked and catch
++     * recursiveness quickly. */
++    if (!recursive)
++	tv_equal_recurse_limit = 1000;
++    if (recursive_cnt >= tv_equal_recurse_limit)
++    {
++	--tv_equal_recurse_limit;
+ 	return TRUE;
++    }
+ 
+     switch (tv1->v_type)
+     {
+ 	case VAR_LIST:
+-	    ++recursive;
+-	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic);
+-	    --recursive;
++	    ++recursive_cnt;
++	    r = list_equal(tv1->vval.v_list, tv2->vval.v_list, ic, TRUE);
++	    --recursive_cnt;
+ 	    return r;
+ 
+ 	case VAR_DICT:
+-	    ++recursive;
+-	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic);
+-	    --recursive;
++	    ++recursive_cnt;
++	    r = dict_equal(tv1->vval.v_dict, tv2->vval.v_dict, ic, TRUE);
++	    --recursive_cnt;
+ 	    return r;
+ 
+ 	case VAR_FUNC:
+@@ -6049,7 +6136,7 @@
+  * A negative index is counted from the end; -1 is the last item.
+  * Returns NULL when "n" is out of range.
+  */
+-    static listitem_T *
++    listitem_T *
+ list_find(l, n)
+     list_T	*l;
+     long	n;
+@@ -6191,7 +6278,7 @@
+ /*
+  * Append item "item" to the end of list "l".
+  */
+-    static void
++    void
+ list_append(l, item)
+     list_T	*l;
+     listitem_T	*item;
+@@ -6304,7 +6391,7 @@
+  * If "item" is NULL append at the end.
+  * Return FAIL when out of memory.
+  */
+-    static int
++    int
+ list_insert_tv(l, tv, item)
+     list_T	*l;
+     typval_T	*tv;
+@@ -6449,7 +6536,7 @@
+  * Remove items "item" to "item2" from list "l".
+  * Does not free the listitem or the value!
+  */
+-    static void
++    void
+ list_remove(l, item, item2)
+     list_T	*l;
+     listitem_T	*item;
+@@ -6502,47 +6589,119 @@
+     return (char_u *)ga.ga_data;
+ }
+ 
+-/*
+- * Join list "l" into a string in "*gap", using separator "sep".
+- * When "echo" is TRUE use String as echoed, otherwise as inside a List.
+- * Return FAIL or OK.
+- */
++typedef struct join_S {
++    char_u	*s;
++    char_u	*tofree;
++} join_T;
++
+     static int
+-list_join(gap, l, sep, echo, copyID)
+-    garray_T	*gap;
++list_join_inner(gap, l, sep, echo_style, copyID, join_gap)
++    garray_T	*gap;		/* to store the result in */
+     list_T	*l;
+     char_u	*sep;
+-    int		echo;
++    int		echo_style;
+     int		copyID;
++    garray_T	*join_gap;	/* to keep each list item string */
+ {
++    int		i;
++    join_T	*p;
++    int		len;
++    int		sumlen = 0;
+     int		first = TRUE;
+     char_u	*tofree;
+     char_u	numbuf[NUMBUFLEN];
+     listitem_T	*item;
+     char_u	*s;
+ 
++    /* Stringify each item in the list. */
+     for (item = l->lv_first; item != NULL && !got_int; item = item->li_next)
+     {
+-	if (first)
+-	    first = FALSE;
+-	else
+-	    ga_concat(gap, sep);
+-
+-	if (echo)
++	if (echo_style)
+ 	    s = echo_string(&item->li_tv, &tofree, numbuf, copyID);
+ 	else
+ 	    s = tv2string(&item->li_tv, &tofree, numbuf, copyID);
+-	if (s != NULL)
+-	    ga_concat(gap, s);
+-	vim_free(tofree);
+ 	if (s == NULL)
+ 	    return FAIL;
++
++	len = (int)STRLEN(s);
++	sumlen += len;
++
++	ga_grow(join_gap, 1);
++	p = ((join_T *)join_gap->ga_data) + (join_gap->ga_len++);
++	if (tofree != NULL || s != numbuf)
++	{
++	    p->s = s;
++	    p->tofree = tofree;
++	}
++	else
++	{
++	    p->s = vim_strnsave(s, len);
++	    p->tofree = p->s;
++	}
++
++	line_breakcheck();
++    }
++
++    /* Allocate result buffer with its total size, avoid re-allocation and
++     * multiple copy operations.  Add 2 for a tailing ']' and NUL. */
++    if (join_gap->ga_len >= 2)
++	sumlen += (int)STRLEN(sep) * (join_gap->ga_len - 1);
++    if (ga_grow(gap, sumlen + 2) == FAIL)
++	return FAIL;
++
++    for (i = 0; i < join_gap->ga_len && !got_int; ++i)
++    {
++	if (first)
++	    first = FALSE;
++	else
++	    ga_concat(gap, sep);
++	p = ((join_T *)join_gap->ga_data) + i;
++
++	if (p->s != NULL)
++	    ga_concat(gap, p->s);
+ 	line_breakcheck();
+     }
++
+     return OK;
+ }
+ 
+ /*
++ * Join list "l" into a string in "*gap", using separator "sep".
++ * When "echo_style" is TRUE use String as echoed, otherwise as inside a List.
++ * Return FAIL or OK.
++ */
++    static int
++list_join(gap, l, sep, echo_style, copyID)
++    garray_T	*gap;
++    list_T	*l;
++    char_u	*sep;
++    int		echo_style;
++    int		copyID;
++{
++    garray_T	join_ga;
++    int		retval;
++    join_T	*p;
++    int		i;
++
++    ga_init2(&join_ga, (int)sizeof(join_T), l->lv_len);
++    retval = list_join_inner(gap, l, sep, echo_style, copyID, &join_ga);
++
++    /* Dispose each item in join_ga. */
++    if (join_ga.ga_data != NULL)
++    {
++	p = (join_T *)join_ga.ga_data;
++	for (i = 0; i < join_ga.ga_len; ++i)
++	{
++	    vim_free(p->tofree);
++	    ++p;
++	}
++	ga_clear(&join_ga);
++    }
++
++    return retval;
++}
++
++/*
+  * Garbage collection for lists and dictionaries.
+  *
+  * We use reference counts to be able to free most items right away when they
+@@ -6610,16 +6769,20 @@
+ 
+     /* buffer-local variables */
+     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+-	set_ref_in_ht(&buf->b_vars.dv_hashtab, copyID);
++	set_ref_in_item(&buf->b_bufvar.di_tv, copyID);
+ 
+     /* window-local variables */
+     FOR_ALL_TAB_WINDOWS(tp, wp)
+-	set_ref_in_ht(&wp->w_vars.dv_hashtab, copyID);
++	set_ref_in_item(&wp->w_winvar.di_tv, copyID);
++#ifdef FEAT_AUTOCMD
++    if (aucmd_win != NULL)
++	set_ref_in_item(&aucmd_win->w_winvar.di_tv, copyID);
++#endif
+ 
+ #ifdef FEAT_WINDOWS
+     /* tabpage-local variables */
+     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
+-	set_ref_in_ht(&tp->tp_vars.dv_hashtab, copyID);
++	set_ref_in_item(&tp->tp_winvar.di_tv, copyID);
+ #endif
+ 
+     /* global variables */
+@@ -6635,6 +6798,18 @@
+     /* v: vars */
+     set_ref_in_ht(&vimvarht, copyID);
+ 
++#ifdef FEAT_LUA
++    set_ref_in_lua(copyID);
++#endif
++
++#ifdef FEAT_PYTHON
++    set_ref_in_python(copyID);
++#endif
++
++#ifdef FEAT_PYTHON3
++    set_ref_in_python3(copyID);
++#endif
++
+     /*
+      * 2. Free lists and dictionaries that are not referenced.
+      */
+@@ -6720,7 +6895,7 @@
+ /*
+  * Mark all lists and dicts referenced through hashtab "ht" with "copyID".
+  */
+-    static void
++    void
+ set_ref_in_ht(ht, copyID)
+     hashtab_T	*ht;
+     int		copyID;
+@@ -6740,7 +6915,7 @@
+ /*
+  * Mark all lists and dicts referenced through list "l" with "copyID".
+  */
+-    static void
++    void
+ set_ref_in_list(l, copyID)
+     list_T	*l;
+     int		copyID;
+@@ -6754,7 +6929,7 @@
+ /*
+  * Mark all lists and dicts referenced through typval "tv" with "copyID".
+  */
+-    static void
++    void
+ set_ref_in_item(tv, copyID)
+     typval_T	*tv;
+     int		copyID;
+@@ -6798,7 +6973,7 @@
+     d = (dict_T *)alloc(sizeof(dict_T));
+     if (d != NULL)
+     {
+-	/* Add the list to the list of dicts for garbage collection. */
++	/* Add the dict to the list of dicts for garbage collection. */
+ 	if (first_dict != NULL)
+ 	    first_dict->dv_used_prev = d;
+ 	d->dv_used_next = first_dict;
+@@ -6807,6 +6982,7 @@
+ 
+ 	hash_init(&d->dv_hashtab);
+ 	d->dv_lock = 0;
++	d->dv_scope = 0;
+ 	d->dv_refcount = 0;
+ 	d->dv_copyID = 0;
+     }
+@@ -6837,7 +7013,7 @@
+  * Unreference a Dictionary: decrement the reference count and free it when it
+  * becomes zero.
+  */
+-    static void
++    void
+ dict_unref(d)
+     dict_T *d;
+ {
+@@ -6849,7 +7025,7 @@
+  * Free a Dictionary, including all items it contains.
+  * Ignores the reference count.
+  */
+-    static void
++    void
+ dict_free(d, recurse)
+     dict_T  *d;
+     int	    recurse;	/* Free Lists and Dictionaries recursively. */
+@@ -7075,7 +7251,7 @@
+ }
+ 
+ /*
+- * Add a list  entry to dictionary "d".
++ * Add a list entry to dictionary "d".
+  * Returns FAIL when out of memory and when key already exists.
+  */
+     int
+@@ -7097,6 +7273,7 @@
+ 	dictitem_free(item);
+ 	return FAIL;
+     }
++    ++list->lv_refcount;
+     return OK;
+ }
+ 
+@@ -7649,6 +7826,7 @@
+     {"acos",		1, 1, f_acos},	/* WJMc */
+ #endif
+     {"add",		2, 2, f_add},
++    {"and",		2, 2, f_and},
+     {"append",		2, 2, f_append},
+     {"argc",		0, 0, f_argc},
+     {"argidx",		0, 0, f_argidx},
+@@ -7676,7 +7854,7 @@
+     {"ceil",		1, 1, f_ceil},
+ #endif
+     {"changenr",	0, 0, f_changenr},
+-    {"char2nr",		1, 1, f_char2nr},
++    {"char2nr",		1, 2, f_char2nr},
+     {"cindent",		1, 1, f_cindent},
+     {"clearmatches",	0, 0, f_clearmatches},
+     {"col",		1, 1, f_col},
+@@ -7708,7 +7886,7 @@
+ #ifdef FEAT_FLOAT
+     {"exp",		1, 1, f_exp},
+ #endif
+-    {"expand",		1, 2, f_expand},
++    {"expand",		1, 3, f_expand},
+     {"extend",		2, 3, f_extend},
+     {"feedkeys",	1, 2, f_feedkeys},
+     {"file_readable",	1, 1, f_filereadable},	/* obsolete */
+@@ -7734,7 +7912,7 @@
+     {"garbagecollect",	0, 1, f_garbagecollect},
+     {"get",		2, 3, f_get},
+     {"getbufline",	2, 3, f_getbufline},
+-    {"getbufvar",	2, 2, f_getbufvar},
++    {"getbufvar",	2, 3, f_getbufvar},
+     {"getchar",		0, 1, f_getchar},
+     {"getcharmod",	0, 0, f_getcharmod},
+     {"getcmdline",	0, 0, f_getcmdline},
+@@ -7754,12 +7932,12 @@
+     {"getqflist",	0, 0, f_getqflist},
+     {"getreg",		0, 2, f_getreg},
+     {"getregtype",	0, 1, f_getregtype},
+-    {"gettabvar",	2, 2, f_gettabvar},
+-    {"gettabwinvar",	3, 3, f_gettabwinvar},
++    {"gettabvar",	2, 3, f_gettabvar},
++    {"gettabwinvar",	3, 4, f_gettabwinvar},
+     {"getwinposx",	0, 0, f_getwinposx},
+     {"getwinposy",	0, 0, f_getwinposy},
+-    {"getwinvar",	2, 2, f_getwinvar},
+-    {"glob",		1, 2, f_glob},
++    {"getwinvar",	2, 3, f_getwinvar},
++    {"glob",		1, 3, f_glob},
+     {"globpath",	2, 3, f_globpath},
+     {"has",		1, 1, f_has},
+     {"has_key",		2, 2, f_has_key},
+@@ -7784,6 +7962,7 @@
+     {"inputsave",	0, 0, f_inputsave},
+     {"inputsecret",	1, 2, f_inputsecret},
+     {"insert",		2, 3, f_insert},
++    {"invert",		1, 1, f_invert},
+     {"isdirectory",	1, 1, f_isdirectory},
+     {"islocked",	1, 1, f_islocked},
+     {"items",		1, 1, f_items},
+@@ -7801,8 +7980,11 @@
+     {"log",		1, 1, f_log},
+     {"log10",		1, 1, f_log10},
+ #endif
++#ifdef FEAT_LUA
++    {"luaeval",         1, 2, f_luaeval},
++#endif
+     {"map",		2, 2, f_map},
+-    {"maparg",		1, 3, f_maparg},
++    {"maparg",		1, 4, f_maparg},
+     {"mapcheck",	1, 3, f_mapcheck},
+     {"match",		2, 4, f_match},
+     {"matchadd",	2, 4, f_matchadd},
+@@ -7821,7 +8003,8 @@
+     {"mzeval",		1, 1, f_mzeval},
+ #endif
+     {"nextnonblank",	1, 1, f_nextnonblank},
+-    {"nr2char",		1, 1, f_nr2char},
++    {"nr2char",		1, 2, f_nr2char},
++    {"or",		2, 2, f_or},
+     {"pathshorten",	1, 1, f_pathshorten},
+ #ifdef FEAT_FLOAT
+     {"pow",		2, 2, f_pow},
+@@ -7829,6 +8012,12 @@
+     {"prevnonblank",	1, 1, f_prevnonblank},
+     {"printf",		2, 19, f_printf},
+     {"pumvisible",	0, 0, f_pumvisible},
++#ifdef FEAT_PYTHON3
++    {"py3eval",		1, 1, f_py3eval},
++#endif
++#ifdef FEAT_PYTHON
++    {"pyeval",		1, 1, f_pyeval},
++#endif
+     {"range",		1, 3, f_range},
+     {"readfile",	1, 3, f_readfile},
+     {"reltime",		0, 2, f_reltime},
+@@ -7846,6 +8035,8 @@
+ #ifdef FEAT_FLOAT
+     {"round",		1, 1, f_round},
+ #endif
++    {"screencol",	0, 0, f_screencol},
++    {"screenrow",	0, 0, f_screenrow},
+     {"search",		1, 4, f_search},
+     {"searchdecl",	1, 3, f_searchdecl},
+     {"searchpair",	3, 7, f_searchpair},
+@@ -7864,13 +8055,17 @@
+     {"settabvar",	3, 3, f_settabvar},
+     {"settabwinvar",	4, 4, f_settabwinvar},
+     {"setwinvar",	3, 3, f_setwinvar},
++#ifdef FEAT_CRYPT
++    {"sha256",		1, 1, f_sha256},
++#endif
+     {"shellescape",	1, 2, f_shellescape},
++    {"shiftwidth",	0, 0, f_shiftwidth},
+     {"simplify",	1, 1, f_simplify},
+ #ifdef FEAT_FLOAT
+     {"sin",		1, 1, f_sin},
+     {"sinh",		1, 1, f_sinh},
+ #endif
+-    {"sort",		1, 2, f_sort},
++    {"sort",		1, 3, f_sort},
+     {"soundfold",	1, 1, f_soundfold},
+     {"spellbadword",	0, 1, f_spellbadword},
+     {"spellsuggest",	1, 3, f_spellsuggest},
+@@ -7923,6 +8118,7 @@
+     {"values",		1, 1, f_values},
+     {"virtcol",		1, 1, f_virtcol},
+     {"visualmode",	0, 1, f_visualmode},
++    {"wildmenumode",	0, 0, f_wildmenumode},
+     {"winbufnr",	1, 1, f_winbufnr},
+     {"wincol",		0, 0, f_wincol},
+     {"winheight",	1, 1, f_winheight},
+@@ -7933,6 +8129,7 @@
+     {"winsaveview",	0, 0, f_winsaveview},
+     {"winwidth",	1, 1, f_winwidth},
+     {"writefile",	2, 3, f_writefile},
++    {"xor",		2, 2, f_xor},
+ };
+ 
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+@@ -8150,7 +8347,7 @@
+ 
+ /*
+  * Call a function with its resolved parameters
+- * Return OK when the function can't be called,  FAIL otherwise.
++ * Return FAIL when the function can't be called,  OK otherwise.
+  * Also returns OK when an error was encountered while executing the function.
+  */
+     static int
+@@ -8497,7 +8694,7 @@
+     if (argvars[0].v_type == VAR_LIST)
+     {
+ 	if ((l = argvars[0].vval.v_list) != NULL
+-		&& !tv_check_lock(l->lv_lock, (char_u *)"add()")
++		&& !tv_check_lock(l->lv_lock, (char_u *)_("add() argument"))
+ 		&& list_append_tv(l, &argvars[1]) == OK)
+ 	    copy_tv(&argvars[0], rettv);
+     }
+@@ -8506,6 +8703,18 @@
+ }
+ 
+ /*
++ * "and(expr, expr)" function
++ */
++    static void
++f_and(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++					& get_tv_number_chk(&argvars[1], NULL);
++}
++
++/*
+  * "append(lnum, string/list)" function
+  */
+     static void
+@@ -8796,14 +9005,15 @@
+     rettv->vval.v_number = (buf != NULL && buf->b_ml.ml_mfp != NULL);
+ }
+ 
+-static buf_T *get_buf_tv __ARGS((typval_T *tv));
++static buf_T *get_buf_tv __ARGS((typval_T *tv, int curtab_only));
+ 
+ /*
+  * Get buffer by number or pattern.
+  */
+     static buf_T *
+-get_buf_tv(tv)
++get_buf_tv(tv, curtab_only)
+     typval_T	*tv;
++    int		curtab_only;
+ {
+     char_u	*name = tv->vval.v_string;
+     int		save_magic;
+@@ -8826,7 +9036,7 @@
+     p_cpo = (char_u *)"";
+ 
+     buf = buflist_findnr(buflist_findpat(name, name + STRLEN(name),
+-								TRUE, FALSE));
++						    TRUE, FALSE, curtab_only));
+ 
+     p_magic = save_magic;
+     p_cpo = save_cpo;
+@@ -8850,7 +9060,7 @@
+ 
+     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+     ++emsg_off;
+-    buf = get_buf_tv(&argvars[0]);
++    buf = get_buf_tv(&argvars[0], FALSE);
+     rettv->v_type = VAR_STRING;
+     if (buf != NULL && buf->b_fname != NULL)
+ 	rettv->vval.v_string = vim_strsave(buf->b_fname);
+@@ -8873,7 +9083,7 @@
+ 
+     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+     ++emsg_off;
+-    buf = get_buf_tv(&argvars[0]);
++    buf = get_buf_tv(&argvars[0], FALSE);
+     --emsg_off;
+ 
+     /* If the buffer isn't found and the second argument is not zero create a
+@@ -8908,7 +9118,7 @@
+ 
+     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+     ++emsg_off;
+-    buf = get_buf_tv(&argvars[0]);
++    buf = get_buf_tv(&argvars[0], TRUE);
+ #ifdef FEAT_WINDOWS
+     for (wp = firstwin; wp; wp = wp->w_next)
+     {
+@@ -8980,6 +9190,45 @@
+ #endif
+ }
+ 
++    int
++func_call(name, args, selfdict, rettv)
++    char_u	*name;
++    typval_T	*args;
++    dict_T	*selfdict;
++    typval_T	*rettv;
++{
++    listitem_T	*item;
++    typval_T	argv[MAX_FUNC_ARGS + 1];
++    int		argc = 0;
++    int		dummy;
++    int		r = 0;
++
++    for (item = args->vval.v_list->lv_first; item != NULL;
++							 item = item->li_next)
++    {
++	if (argc == MAX_FUNC_ARGS)
++	{
++	    EMSG(_("E699: Too many arguments"));
++	    break;
++	}
++	/* Make a copy of each argument.  This is needed to be able to set
++	 * v_lock to VAR_FIXED in the copy without changing the original list.
++	 */
++	copy_tv(&item->li_tv, &argv[argc++]);
++    }
++
++    if (item == NULL)
++	r = call_func(name, (int)STRLEN(name), rettv, argc, argv,
++				 curwin->w_cursor.lnum, curwin->w_cursor.lnum,
++						      &dummy, TRUE, selfdict);
++
++    /* Free the arguments. */
++    while (argc > 0)
++	clear_tv(&argv[--argc]);
++
++    return r;
++}
++
+ /*
+  * "call(func, arglist)" function
+  */
+@@ -8989,10 +9238,6 @@
+     typval_T	*rettv;
+ {
+     char_u	*func;
+-    typval_T	argv[MAX_FUNC_ARGS + 1];
+-    int		argc = 0;
+-    listitem_T	*item;
+-    int		dummy;
+     dict_T	*selfdict = NULL;
+ 
+     if (argvars[1].v_type != VAR_LIST)
+@@ -9020,29 +9265,8 @@
+ 	selfdict = argvars[2].vval.v_dict;
+     }
+ 
+-    for (item = argvars[1].vval.v_list->lv_first; item != NULL;
+-							 item = item->li_next)
+-    {
+-	if (argc == MAX_FUNC_ARGS)
+-	{
+-	    EMSG(_("E699: Too many arguments"));
+-	    break;
+-	}
+-	/* Make a copy of each argument.  This is needed to be able to set
+-	 * v_lock to VAR_FIXED in the copy without changing the original list.
+-	 */
+-	copy_tv(&item->li_tv, &argv[argc++]);
+-    }
+-
+-    if (item == NULL)
+-	(void)call_func(func, (int)STRLEN(func), rettv, argc, argv,
+-				 curwin->w_cursor.lnum, curwin->w_cursor.lnum,
+-						      &dummy, TRUE, selfdict);
+-
+-    /* Free the arguments. */
+-    while (argc > 0)
+-	clear_tv(&argv[--argc]);
+-}
++    (void)func_call(func, &argvars[1], selfdict, rettv);
++}
+ 
+ #ifdef FEAT_FLOAT
+ /*
+@@ -9084,7 +9308,17 @@
+ {
+ #ifdef FEAT_MBYTE
+     if (has_mbyte)
+-	rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
++    {
++	int	utf8 = 0;
++
++	if (argvars[1].v_type != VAR_UNKNOWN)
++	    utf8 = get_tv_number_chk(&argvars[1], NULL);
++
++	if (utf8)
++	    rettv->vval.v_number = (*utf_ptr2char)(get_tv_string(&argvars[0]));
++	else
++	    rettv->vval.v_number = (*mb_ptr2char)(get_tv_string(&argvars[0]));
++    }
+     else
+ #endif
+     rettv->vval.v_number = get_tv_string(&argvars[0])[0];
+@@ -9095,7 +9329,7 @@
+  */
+     static void
+ f_cindent(argvars, rettv)
+-    typval_T	*argvars;
++    typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+ {
+ #ifdef FEAT_CINDENT
+@@ -9298,7 +9532,7 @@
+ 
+     if (!error)
+ 	rettv->vval.v_number = do_dialog(type, NULL, message, buttons,
+-								   def, NULL);
++							    def, NULL, FALSE);
+ #endif
+ }
+ 
+@@ -9389,7 +9623,7 @@
+ 	    }
+ 
+ 	    for ( ; li != NULL; li = li->li_next)
+-		if (tv_equal(&li->li_tv, &argvars[1], ic))
++		if (tv_equal(&li->li_tv, &argvars[1], ic, FALSE))
+ 		    ++n;
+ 	}
+     }
+@@ -9416,7 +9650,7 @@
+ 		if (!HASHITEM_EMPTY(hi))
+ 		{
+ 		    --todo;
+-		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic))
++		    if (tv_equal(&HI2DI(hi)->di_tv, &argvars[1], ic, FALSE))
+ 			++n;
+ 		}
+ 	    }
+@@ -9857,17 +10091,36 @@
+     char_u	*s;
+     int		len;
+     char_u	*errormsg;
+-    int		flags = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
++    int		options = WILD_SILENT|WILD_USE_NL|WILD_LIST_NOTFOUND;
+     expand_T	xpc;
+     int		error = FALSE;
++    char_u	*result;
+ 
+     rettv->v_type = VAR_STRING;
++    if (argvars[1].v_type != VAR_UNKNOWN
++	    && argvars[2].v_type != VAR_UNKNOWN
++	    && get_tv_number_chk(&argvars[2], &error)
++	    && !error)
++    {
++	rettv->v_type = VAR_LIST;
++	rettv->vval.v_list = NULL;
++    }
++
+     s = get_tv_string(&argvars[0]);
+     if (*s == '%' || *s == '#' || *s == '<')
+     {
+ 	++emsg_off;
+-	rettv->vval.v_string = eval_vars(s, s, &len, NULL, &errormsg, NULL);
++	result = eval_vars(s, s, &len, NULL, &errormsg, NULL);
+ 	--emsg_off;
++	if (rettv->v_type == VAR_LIST)
++	{
++	    if (rettv_list_alloc(rettv) != FAIL && result != NULL)
++		list_append_string(rettv->vval.v_list, result, -1);
++	    else
++		vim_free(result);
++	}
++	else
++	    rettv->vval.v_string = result;
+     }
+     else
+     {
+@@ -9875,12 +10128,25 @@
+ 	 * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+ 	if (argvars[1].v_type != VAR_UNKNOWN
+ 				    && get_tv_number_chk(&argvars[1], &error))
+-	    flags |= WILD_KEEP_ALL;
++	    options |= WILD_KEEP_ALL;
+ 	if (!error)
+ 	{
+ 	    ExpandInit(&xpc);
+ 	    xpc.xp_context = EXPAND_FILES;
+-	    rettv->vval.v_string = ExpandOne(&xpc, s, NULL, flags, WILD_ALL);
++	    if (p_wic)
++		options += WILD_ICASE;
++	    if (rettv->v_type == VAR_STRING)
++		rettv->vval.v_string = ExpandOne(&xpc, s, NULL,
++							   options, WILD_ALL);
++	    else if (rettv_list_alloc(rettv) != FAIL)
++	    {
++		int i;
++
++		ExpandOne(&xpc, s, NULL, options, WILD_ALL_KEEP);
++		for (i = 0; i < xpc.xp_numfiles; i++)
++		    list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
++		ExpandCleanup(&xpc);
++	    }
+ 	}
+ 	else
+ 	    rettv->vval.v_string = NULL;
+@@ -9888,6 +10154,62 @@
+ }
+ 
+ /*
++ * Go over all entries in "d2" and add them to "d1".
++ * When "action" is "error" then a duplicate key is an error.
++ * When "action" is "force" then a duplicate key is overwritten.
++ * Otherwise duplicate keys are ignored ("action" is "keep").
++ */
++    void
++dict_extend(d1, d2, action)
++    dict_T	*d1;
++    dict_T	*d2;
++    char_u	*action;
++{
++    dictitem_T	*di1;
++    hashitem_T	*hi2;
++    int		todo;
++
++    todo = (int)d2->dv_hashtab.ht_used;
++    for (hi2 = d2->dv_hashtab.ht_array; todo > 0; ++hi2)
++    {
++	if (!HASHITEM_EMPTY(hi2))
++	{
++	    --todo;
++	    di1 = dict_find(d1, hi2->hi_key, -1);
++	    if (d1->dv_scope != 0)
++	    {
++		/* Disallow replacing a builtin function in l: and g:.
++		 * Check the key to be valid when adding to any
++		 * scope. */
++		if (d1->dv_scope == VAR_DEF_SCOPE
++			&& HI2DI(hi2)->di_tv.v_type == VAR_FUNC
++			&& var_check_func_name(hi2->hi_key,
++							 di1 == NULL))
++		    break;
++		if (!valid_varname(hi2->hi_key))
++		    break;
++	    }
++	    if (di1 == NULL)
++	    {
++		di1 = dictitem_copy(HI2DI(hi2));
++		if (di1 != NULL && dict_add(d1, di1) == FAIL)
++		    dictitem_free(di1);
++	    }
++	    else if (*action == 'e')
++	    {
++		EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
++		break;
++	    }
++	    else if (*action == 'f' && HI2DI(hi2) != di1)
++	    {
++		clear_tv(&di1->di_tv);
++		copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
++	    }
++	}
++    }
++}
++
++/*
+  * "extend(list, list [, idx])" function
+  * "extend(dict, dict [, action])" function
+  */
+@@ -9896,6 +10218,8 @@
+     typval_T	*argvars;
+     typval_T	*rettv;
+ {
++    char      *arg_errmsg = N_("extend() argument");
++
+     if (argvars[0].v_type == VAR_LIST && argvars[1].v_type == VAR_LIST)
+     {
+ 	list_T		*l1, *l2;
+@@ -9905,7 +10229,7 @@
+ 
+ 	l1 = argvars[0].vval.v_list;
+ 	l2 = argvars[1].vval.v_list;
+-	if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)"extend()")
++	if (l1 != NULL && !tv_check_lock(l1->lv_lock, (char_u *)_(arg_errmsg))
+ 		&& l2 != NULL)
+ 	{
+ 	    if (argvars[2].v_type != VAR_UNKNOWN)
+@@ -9935,16 +10259,13 @@
+     }
+     else if (argvars[0].v_type == VAR_DICT && argvars[1].v_type == VAR_DICT)
+     {
+-	dict_T		*d1, *d2;
+-	dictitem_T	*di1;
+-	char_u		*action;
+-	int		i;
+-	hashitem_T	*hi2;
+-	int		todo;
++	dict_T	*d1, *d2;
++	char_u	*action;
++	int	i;
+ 
+ 	d1 = argvars[0].vval.v_dict;
+ 	d2 = argvars[1].vval.v_dict;
+-	if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)"extend()")
++	if (d1 != NULL && !tv_check_lock(d1->dv_lock, (char_u *)_(arg_errmsg))
+ 		&& d2 != NULL)
+ 	{
+ 	    /* Check the third argument. */
+@@ -9967,33 +10288,7 @@
+ 	    else
+ 		action = (char_u *)"force";
+ 
+-	    /* Go over all entries in the second dict and add them to the
+-	     * first dict. */
+-	    todo = (int)d2->dv_hashtab.ht_used;
+-	    for (hi2 = d2->dv_hashtab.ht_array; todo > 0; ++hi2)
+-	    {
+-		if (!HASHITEM_EMPTY(hi2))
+-		{
+-		    --todo;
+-		    di1 = dict_find(d1, hi2->hi_key, -1);
+-		    if (di1 == NULL)
+-		    {
+-			di1 = dictitem_copy(HI2DI(hi2));
+-			if (di1 != NULL && dict_add(d1, di1) == FAIL)
+-			    dictitem_free(di1);
+-		    }
+-		    else if (*action == 'e')
+-		    {
+-			EMSG2(_("E737: Key already exists: %s"), hi2->hi_key);
+-			break;
+-		    }
+-		    else if (*action == 'f')
+-		    {
+-			clear_tv(&di1->di_tv);
+-			copy_tv(&HI2DI(hi2)->di_tv, &di1->di_tv);
+-		    }
+-		}
+-	    }
++	    dict_extend(d1, d2, action);
+ 
+ 	    copy_tv(&argvars[0], rettv);
+ 	}
+@@ -10097,9 +10392,9 @@
+ 
+     static void
+ findfilendir(argvars, rettv, find_what)
+-    typval_T	*argvars;
++    typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+-    int		find_what;
++    int		find_what UNUSED;
+ {
+ #ifdef FEAT_SEARCHPATH
+     char_u	*fname;
+@@ -10186,20 +10481,22 @@
+     typval_T	save_key;
+     int		rem;
+     int		todo;
+-    char_u	*ermsg = map ? (char_u *)"map()" : (char_u *)"filter()";
++    char_u	*ermsg = (char_u *)(map ? "map()" : "filter()");
++    char	*arg_errmsg = (map ? N_("map() argument")
++				   : N_("filter() argument"));
+     int		save_did_emsg;
+     int		idx = 0;
+ 
+     if (argvars[0].v_type == VAR_LIST)
+     {
+ 	if ((l = argvars[0].vval.v_list) == NULL
+-		|| (map && tv_check_lock(l->lv_lock, ermsg)))
++		|| tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
+ 	    return;
+     }
+     else if (argvars[0].v_type == VAR_DICT)
+     {
+ 	if ((d = argvars[0].vval.v_dict) == NULL
+-		|| (map && tv_check_lock(d->dv_lock, ermsg)))
++		|| tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
+ 	    return;
+     }
+     else
+@@ -10236,7 +10533,8 @@
+ 		{
+ 		    --todo;
+ 		    di = HI2DI(hi);
+-		    if (tv_check_lock(di->di_tv.v_lock, ermsg))
++		    if (tv_check_lock(di->di_tv.v_lock,
++						     (char_u *)_(arg_errmsg)))
+ 			break;
+ 		    vimvars[VV_KEY].vv_str = vim_strsave(di->di_key);
+ 		    if (filter_map_one(&di->di_tv, expr, map, &rem) == FAIL
+@@ -10255,7 +10553,7 @@
+ 
+ 	    for (li = l->lv_first; li != NULL; li = nli)
+ 	    {
+-		if (tv_check_lock(li->li_tv.v_lock, ermsg))
++		if (tv_check_lock(li->li_tv.v_lock, (char_u *)_(arg_errmsg)))
+ 		    break;
+ 		nli = li->li_next;
+ 		vimvars[VV_KEY].vv_nr = idx;
+@@ -10466,9 +10764,9 @@
+  */
+     static void
+ foldclosed_both(argvars, rettv, end)
+-    typval_T	*argvars;
++    typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+-    int		end;
++    int		end UNUSED;
+ {
+ #ifdef FEAT_FOLDING
+     linenr_T	lnum;
+@@ -10517,8 +10815,8 @@
+  */
+     static void
+ f_foldlevel(argvars, rettv)
+-    typval_T	*argvars;
+-    typval_T	*rettv;
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv UNUSED;
+ {
+ #ifdef FEAT_FOLDING
+     linenr_T	lnum;
+@@ -10658,16 +10956,25 @@
+     typval_T	*rettv;
+ {
+     char_u	*s;
++    char_u	*name = NULL;
+ 
+     s = get_tv_string(&argvars[0]);
+     if (s == NULL || *s == NUL || VIM_ISDIGIT(*s))
+ 	EMSG2(_(e_invarg2), s);
+-    /* Don't check an autoload name for existence here. */
+-    else if (vim_strchr(s, AUTOLOAD_CHAR) == NULL && !function_exists(s))
++    /* Don't check an autoload name for existence here, but still expand it 
++     * checking for validity */
++    else if ((name = get_expanded_name(s, vim_strchr(s, AUTOLOAD_CHAR) == NULL))
++									== NULL)
+ 	EMSG2(_("E700: Unknown function: %s"), s);
+     else
+     {
+-	rettv->vval.v_string = vim_strsave(s);
++	if (name == NULL)
++	    /* Autoload function, need to copy string */
++	    rettv->vval.v_string = vim_strsave(s);
++	else
++	    /* Function found by get_expanded_name, string allocated by 
++	     * trans_function_name: no need to copy */
++	    rettv->vval.v_string = name;
+ 	rettv->v_type = VAR_FUNC;
+     }
+ }
+@@ -10798,7 +11105,7 @@
+ 
+     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+     ++emsg_off;
+-    buf = get_buf_tv(&argvars[0]);
++    buf = get_buf_tv(&argvars[0], FALSE);
+     --emsg_off;
+ 
+     lnum = get_tv_lnum_buf(&argvars[1], buf);
+@@ -10822,11 +11129,12 @@
+     buf_T	*save_curbuf;
+     char_u	*varname;
+     dictitem_T	*v;
++    int		done = FALSE;
+ 
+     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+     varname = get_tv_string_chk(&argvars[1]);
+     ++emsg_off;
+-    buf = get_buf_tv(&argvars[0]);
++    buf = get_buf_tv(&argvars[0], FALSE);
+ 
+     rettv->v_type = VAR_STRING;
+     rettv->vval.v_string = NULL;
+@@ -10838,24 +11146,37 @@
+ 	curbuf = buf;
+ 
+ 	if (*varname == '&')	/* buffer-local-option */
+-	    get_option_tv(&varname, rettv, TRUE);
++	{
++	    if (get_option_tv(&varname, rettv, TRUE) == OK)
++		done = TRUE;
++	}
++	else if (STRCMP(varname, "changedtick") == 0)
++	{
++	    rettv->v_type = VAR_NUMBER;
++	    rettv->vval.v_number = curbuf->b_changedtick;
++	    done = TRUE;
++	}
+ 	else
+ 	{
+-	    if (*varname == NUL)
+-		/* let getbufvar({nr}, "") return the "b:" dictionary.  The
+-		 * scope prefix before the NUL byte is required by
+-		 * find_var_in_ht(). */
+-		varname = (char_u *)"b:" + 2;
+-	    /* look up the variable */
+-	    v = find_var_in_ht(&curbuf->b_vars.dv_hashtab, varname, FALSE);
++	    /* Look up the variable. */
++	    /* Let getbufvar({nr}, "") return the "b:" dictionary. */
++	    v = find_var_in_ht(&curbuf->b_vars->dv_hashtab,
++							 'b', varname, FALSE);
+ 	    if (v != NULL)
++	    {
+ 		copy_tv(&v->di_tv, rettv);
++		done = TRUE;
++	    }
+ 	}
+ 
+ 	/* restore previous notion of curbuf */
+ 	curbuf = save_curbuf;
+     }
+ 
++    if (!done && argvars[2].v_type != VAR_UNKNOWN)
++	/* use the default value */
++	copy_tv(&argvars[2], rettv);
++
+     --emsg_off;
+ }
+ 
+@@ -10930,27 +11251,7 @@
+ 	rettv->vval.v_string = vim_strsave(temp);
+ 
+ #ifdef FEAT_MOUSE
+-	if (n == K_LEFTMOUSE
+-		|| n == K_LEFTMOUSE_NM
+-		|| n == K_LEFTDRAG
+-		|| n == K_LEFTRELEASE
+-		|| n == K_LEFTRELEASE_NM
+-		|| n == K_MIDDLEMOUSE
+-		|| n == K_MIDDLEDRAG
+-		|| n == K_MIDDLERELEASE
+-		|| n == K_RIGHTMOUSE
+-		|| n == K_RIGHTDRAG
+-		|| n == K_RIGHTRELEASE
+-		|| n == K_X1MOUSE
+-		|| n == K_X1DRAG
+-		|| n == K_X1RELEASE
+-		|| n == K_X2MOUSE
+-		|| n == K_X2DRAG
+-		|| n == K_X2RELEASE
+-		|| n == K_MOUSELEFT
+-		|| n == K_MOUSERIGHT
+-		|| n == K_MOUSEDOWN
+-		|| n == K_MOUSEUP)
++	if (is_mouse_key(n))
+ 	{
+ 	    int		row = mouse_row;
+ 	    int		col = mouse_col;
+@@ -11039,18 +11340,22 @@
+     typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+ {
+-    char_u	cwd[MAXPATHL];
++    char_u	*cwd;
+ 
+     rettv->v_type = VAR_STRING;
+-    if (mch_dirname(cwd, MAXPATHL) == FAIL)
+-	rettv->vval.v_string = NULL;
+-    else
++    rettv->vval.v_string = NULL;
++    cwd = alloc(MAXPATHL);
++    if (cwd != NULL)
+     {
+-	rettv->vval.v_string = vim_strsave(cwd);
++	if (mch_dirname(cwd, MAXPATHL) != FAIL)
++	{
++	    rettv->vval.v_string = vim_strsave(cwd);
+ #ifdef BACKSLASH_IN_FILENAME
+-	if (rettv->vval.v_string != NULL)
+-	    slash_adjust(rettv->vval.v_string);
++	    if (rettv->vval.v_string != NULL)
++		slash_adjust(rettv->vval.v_string);
+ #endif
++	}
++	vim_free(cwd);
+     }
+ }
+ 
+@@ -11289,7 +11594,7 @@
+     static void
+ f_getmatches(argvars, rettv)
+     typval_T	*argvars UNUSED;
+-    typval_T	*rettv;
++    typval_T	*rettv UNUSED;
+ {
+ #ifdef FEAT_SEARCH_EXTRA
+     dict_T	*dict;
+@@ -11477,6 +11782,7 @@
+     tabpage_T	*tp;
+     dictitem_T	*v;
+     char_u	*varname;
++    int		done = FALSE;
+ 
+     rettv->v_type = VAR_STRING;
+     rettv->vval.v_string = NULL;
+@@ -11486,10 +11792,16 @@
+     if (tp != NULL && varname != NULL)
+     {
+ 	/* look up the variable */
+-	v = find_var_in_ht(&tp->tp_vars.dv_hashtab, varname, FALSE);
++	v = find_var_in_ht(&tp->tp_vars->dv_hashtab, 0, varname, FALSE);
+ 	if (v != NULL)
++	{
+ 	    copy_tv(&v->di_tv, rettv);
++	    done = TRUE;
++	}
+     }
++
++    if (!done && argvars[2].v_type != VAR_UNKNOWN)
++	copy_tv(&argvars[2], rettv);
+ }
+ 
+ /*
+@@ -11599,7 +11911,8 @@
+     win_T	*win, *oldcurwin;
+     char_u	*varname;
+     dictitem_T	*v;
+-    tabpage_T	*tp;
++    tabpage_T	*tp, *oldtabpage;
++    int		done = FALSE;
+ 
+ #ifdef FEAT_WINDOWS
+     if (off == 1)
+@@ -11616,32 +11929,35 @@
+ 
+     if (win != NULL && varname != NULL)
+     {
+-	/* Set curwin to be our win, temporarily.  Also set curbuf, so
+-	 * that we can get buffer-local options. */
+-	oldcurwin = curwin;
+-	curwin = win;
+-	curbuf = win->w_buffer;
++	/* Set curwin to be our win, temporarily.  Also set the tabpage,
++	 * otherwise the window is not valid. */
++	switch_win(&oldcurwin, &oldtabpage, win, tp);
+ 
+ 	if (*varname == '&')	/* window-local-option */
+-	    get_option_tv(&varname, rettv, 1);
++	{
++	    if (get_option_tv(&varname, rettv, 1) == OK)
++		done = TRUE;
++	}
+ 	else
+ 	{
+-	    if (*varname == NUL)
+-		/* let getwinvar({nr}, "") return the "w:" dictionary.  The
+-		 * scope prefix before the NUL byte is required by
+-		 * find_var_in_ht(). */
+-		varname = (char_u *)"w:" + 2;
+-	    /* look up the variable */
+-	    v = find_var_in_ht(&win->w_vars.dv_hashtab, varname, FALSE);
++	    /* Look up the variable. */
++	    /* Let getwinvar({nr}, "") return the "w:" dictionary. */
++	    v = find_var_in_ht(&win->w_vars->dv_hashtab, 'w', varname, FALSE);
+ 	    if (v != NULL)
++	    {
+ 		copy_tv(&v->di_tv, rettv);
++		done = TRUE;
++	    }
+ 	}
+ 
+ 	/* restore previous notion of curwin */
+-	curwin = oldcurwin;
+-	curbuf = curwin->w_buffer;
++	restore_win(oldcurwin, oldtabpage);
+     }
+ 
++    if (!done && argvars[off + 2].v_type != VAR_UNKNOWN)
++	/* use the default return value */
++	copy_tv(&argvars[off + 2], rettv);
++
+     --emsg_off;
+ }
+ 
+@@ -11653,22 +11969,44 @@
+     typval_T	*argvars;
+     typval_T	*rettv;
+ {
+-    int		flags = WILD_SILENT|WILD_USE_NL;
++    int		options = WILD_SILENT|WILD_USE_NL;
+     expand_T	xpc;
+     int		error = FALSE;
+ 
+     /* When the optional second argument is non-zero, don't remove matches
+-    * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+-    if (argvars[1].v_type != VAR_UNKNOWN
+-				&& get_tv_number_chk(&argvars[1], &error))
+-	flags |= WILD_KEEP_ALL;
++     * for 'wildignore' and don't put matches for 'suffixes' at the end. */
+     rettv->v_type = VAR_STRING;
++    if (argvars[1].v_type != VAR_UNKNOWN)
++    {
++	if (get_tv_number_chk(&argvars[1], &error))
++	    options |= WILD_KEEP_ALL;
++	if (argvars[2].v_type != VAR_UNKNOWN
++				    && get_tv_number_chk(&argvars[2], &error))
++	{
++	    rettv->v_type = VAR_LIST;
++	    rettv->vval.v_list = NULL;
++	}
++    }
+     if (!error)
+     {
+ 	ExpandInit(&xpc);
+ 	xpc.xp_context = EXPAND_FILES;
+-	rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
+-						       NULL, flags, WILD_ALL);
++	if (p_wic)
++	    options += WILD_ICASE;
++	if (rettv->v_type == VAR_STRING)
++	    rettv->vval.v_string = ExpandOne(&xpc, get_tv_string(&argvars[0]),
++						     NULL, options, WILD_ALL);
++	else if (rettv_list_alloc(rettv) != FAIL)
++	{
++	  int i;
++
++	  ExpandOne(&xpc, get_tv_string(&argvars[0]),
++						NULL, options, WILD_ALL_KEEP);
++	  for (i = 0; i < xpc.xp_numfiles; i++)
++	      list_append_string(rettv->vval.v_list, xpc.xp_files[i], -1);
++
++	  ExpandCleanup(&xpc);
++	}
+     }
+     else
+ 	rettv->vval.v_string = NULL;
+@@ -11741,9 +12079,6 @@
+ #ifdef __QNX__
+ 	"qnx",
+ #endif
+-#ifdef RISCOS
+-	"riscos",
+-#endif
+ #ifdef UNIX
+ 	"unix",
+ #endif
+@@ -11786,6 +12121,11 @@
+ 	"all_builtin_terms",
+ # endif
+ #endif
++#if defined(FEAT_BROWSE) && (defined(USE_FILE_CHOOSER) \
++	|| defined(FEAT_GUI_W32) \
++	|| defined(FEAT_GUI_MOTIF))
++	"browsefilter",
++#endif
+ #ifdef FEAT_BYTEOFF
+ 	"byte_offset",
+ #endif
+@@ -11856,7 +12196,7 @@
+ #ifdef FEAT_SEARCHPATH
+ 	"file_in_path",
+ #endif
+-#if defined(UNIX) && !defined(USE_SYSTEM)
++#ifdef FEAT_FILTERPIPE
+ 	"filterpipe",
+ #endif
+ #ifdef FEAT_FIND_ID
+@@ -11978,9 +12318,15 @@
+ # ifdef FEAT_MOUSE_PTERM
+ 	"mouse_pterm",
+ # endif
++# ifdef FEAT_MOUSE_SGR
++	"mouse_sgr",
++# endif
+ # ifdef FEAT_SYSMOUSE
+ 	"mouse_sysmouse",
+ # endif
++# ifdef FEAT_MOUSE_URXVT
++	"mouse_urxvt",
++# endif
+ # ifdef FEAT_MOUSE_XTERM
+ 	"mouse_xterm",
+ # endif
+@@ -12002,9 +12348,6 @@
+ #ifdef FEAT_OLE
+ 	"ole",
+ #endif
+-#ifdef FEAT_OSFILETYPE
+-	"osfiletype",
+-#endif
+ #ifdef FEAT_PATH_EXTRA
+ 	"path_extra",
+ #endif
+@@ -12116,6 +12459,9 @@
+ #ifdef FEAT_TOOLBAR
+ 	"toolbar",
+ #endif
++#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++	"unnamedplus",
++#endif
+ #ifdef FEAT_USR_CMDS
+ 	"user-commands",    /* was accidentally included in 5.4 */
+ 	"user_commands",
+@@ -12159,6 +12505,9 @@
+ #ifdef FEAT_XFONTSET
+ 	"xfontset",
+ #endif
++#ifdef FEAT_XPM_W32
++	"xpm_w32",
++#endif
+ #ifdef USE_XSMP
+ 	"xsmp",
+ #endif
+@@ -12572,7 +12921,7 @@
+ 	}
+ 
+ 	for ( ; item != NULL; item = item->li_next, ++idx)
+-	    if (tv_equal(&item->li_tv, &argvars[1], ic))
++	    if (tv_equal(&item->li_tv, &argvars[1], ic, FALSE))
+ 	    {
+ 		rettv->vval.v_number = idx;
+ 		break;
+@@ -12648,6 +12997,7 @@
+ 		int	xp_namelen;
+ 		long	argt;
+ 
++		/* input() with a third argument: completion */
+ 		rettv->vval.v_string = NULL;
+ 
+ 		xp_name = get_tv_string_buf_chk(&argvars[2], buf);
+@@ -12666,6 +13016,11 @@
+ 	    rettv->vval.v_string =
+ 		getcmdline_prompt(inputsecret_flag ? NUL : '@', p, echo_attr,
+ 				  xp_type, xp_arg);
++	if (inputdialog && rettv->vval.v_string == NULL
++		&& argvars[1].v_type != VAR_UNKNOWN
++		&& argvars[2].v_type != VAR_UNKNOWN)
++	    rettv->vval.v_string = vim_strsave(get_tv_string_buf(
++							   &argvars[2], buf));
+ 
+ 	vim_free(xp_arg);
+ 
+@@ -12712,7 +13067,7 @@
+ 	    IObuff[0] = NUL;
+ 	if (message != NULL && defstr != NULL
+ 		&& do_dialog(VIM_QUESTION, NULL, message,
+-				(char_u *)_("&OK\n&Cancel"), 1, IObuff) == 1)
++			  (char_u *)_("&OK\n&Cancel"), 1, IObuff, FALSE) == 1)
+ 	    rettv->vval.v_string = vim_strsave(IObuff);
+ 	else
+ 	{
+@@ -12850,7 +13205,7 @@
+     if (argvars[0].v_type != VAR_LIST)
+ 	EMSG2(_(e_listarg), "insert()");
+     else if ((l = argvars[0].vval.v_list) != NULL
+-	    && !tv_check_lock(l->lv_lock, (char_u *)"insert()"))
++	    && !tv_check_lock(l->lv_lock, (char_u *)_("insert() argument")))
+     {
+ 	if (argvars[2].v_type != VAR_UNKNOWN)
+ 	    before = get_tv_number_chk(&argvars[2], &error);
+@@ -12877,6 +13232,17 @@
+ }
+ 
+ /*
++ * "invert(expr)" function
++ */
++    static void
++f_invert(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    rettv->vval.v_number = ~get_tv_number_chk(&argvars[0], NULL);
++}
++
++/*
+  * "isdirectory()" function
+  */
+     static void
+@@ -13245,7 +13611,7 @@
+  */
+     static void
+ f_lispindent(argvars, rettv)
+-    typval_T	*argvars;
++    typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+ {
+ #ifdef FEAT_LISP
+@@ -13290,8 +13656,10 @@
+     char_u	*keys_buf = NULL;
+     char_u	*rhs;
+     int		mode;
+-    garray_T	ga;
+     int		abbr = FALSE;
++    int		get_dict = FALSE;
++    mapblock_T	*mp;
++    int		buffer_local;
+ 
+     /* return empty string for failure */
+     rettv->v_type = VAR_STRING;
+@@ -13305,7 +13673,11 @@
+     {
+ 	which = get_tv_string_buf_chk(&argvars[1], buf);
+ 	if (argvars[2].v_type != VAR_UNKNOWN)
++	{
+ 	    abbr = get_tv_number(&argvars[2]);
++	    if (argvars[3].v_type != VAR_UNKNOWN)
++		get_dict = get_tv_number(&argvars[3]);
++	}
+     }
+     else
+ 	which = (char_u *)"";
+@@ -13315,19 +13687,34 @@
+     mode = get_map_mode(&which, 0);
+ 
+     keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, FALSE);
+-    rhs = check_map(keys, mode, exact, FALSE, abbr);
++    rhs = check_map(keys, mode, exact, FALSE, abbr, &mp, &buffer_local);
+     vim_free(keys_buf);
+-    if (rhs != NULL)
+-    {
+-	ga_init(&ga);
+-	ga.ga_itemsize = 1;
+-	ga.ga_growsize = 40;
+ 
+-	while (*rhs != NUL)
+-	    ga_concat(&ga, str2special(&rhs, FALSE));
++    if (!get_dict)
++    {
++	/* Return a string. */
++	if (rhs != NULL)
++	    rettv->vval.v_string = str2special_save(rhs, FALSE);
++
++    }
++    else if (rettv_dict_alloc(rettv) != FAIL && rhs != NULL)
++    {
++	/* Return a dictionary. */
++	char_u	    *lhs = str2special_save(mp->m_keys, TRUE);
++	char_u	    *mapmode = map_mode_to_chars(mp->m_mode);
++	dict_T	    *dict = rettv->vval.v_dict;
++
++	dict_add_nr_str(dict, "lhs",	 0L, lhs);
++	dict_add_nr_str(dict, "rhs",     0L, mp->m_orig_str);
++	dict_add_nr_str(dict, "noremap", mp->m_noremap ? 1L : 0L , NULL);
++	dict_add_nr_str(dict, "expr",    mp->m_expr    ? 1L : 0L, NULL);
++	dict_add_nr_str(dict, "silent",  mp->m_silent  ? 1L : 0L, NULL);
++	dict_add_nr_str(dict, "sid",     (long)mp->m_script_ID, NULL);
++	dict_add_nr_str(dict, "buffer",  (long)buffer_local, NULL);
++	dict_add_nr_str(dict, "mode",    0L, mapmode);
+ 
+-	ga_append(&ga, NUL);
+-	rettv->vval.v_string = (char_u *)ga.ga_data;
++	vim_free(lhs);
++	vim_free(mapmode);
+     }
+ }
+ 
+@@ -13367,6 +13754,23 @@
+ }
+ #endif
+ 
++#ifdef FEAT_LUA
++/*
++ * "luaeval()" function
++ */
++    static void
++f_luaeval(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    char_u	*str;
++    char_u	buf[NUMBUFLEN];
++
++    str = get_tv_string_buf(&argvars[0], buf);
++    do_luaeval(str, argvars + 1, rettv);
++}
++#endif
++
+ /*
+  * "map()" function
+  */
+@@ -13601,8 +14005,8 @@
+  */
+     static void
+ f_matchadd(argvars, rettv)
+-    typval_T	*argvars;
+-    typval_T	*rettv;
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv UNUSED;
+ {
+ #ifdef FEAT_SEARCH_EXTRA
+     char_u	buf[NUMBUFLEN];
+@@ -13639,7 +14043,7 @@
+  */
+     static void
+ f_matcharg(argvars, rettv)
+-    typval_T	*argvars;
++    typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+ {
+     if (rettv_list_alloc(rettv) == OK)
+@@ -13671,8 +14075,8 @@
+  */
+     static void
+ f_matchdelete(argvars, rettv)
+-    typval_T	*argvars;
+-    typval_T	*rettv;
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv UNUSED;
+ {
+ #ifdef FEAT_SEARCH_EXTRA
+     rettv->vval.v_number = match_delete(curwin,
+@@ -13942,7 +14346,7 @@
+     rettv->v_type = VAR_STRING;
+ }
+ 
+-#ifdef FEAT_MZSCHEME
++#if defined(FEAT_MZSCHEME) || defined(PROTO)
+ /*
+  * "mzeval()" function
+  */
+@@ -13957,6 +14361,22 @@
+     str = get_tv_string_buf(&argvars[0], buf);
+     do_mzeval(str, rettv);
+ }
++
++    void
++mzscheme_call_vim(name, args, rettv)
++    char_u	*name;
++    typval_T	*args;
++    typval_T	*rettv;
++{
++    typval_T argvars[3];
++
++    argvars[0].v_type = VAR_STRING;
++    argvars[0].vval.v_string = name;
++    copy_tv(args, &argvars[1]);
++    argvars[2].v_type = VAR_UNKNOWN;
++    f_call(argvars, rettv);
++    clear_tv(&argvars[1]);
++}
+ #endif
+ 
+ /*
+@@ -13994,7 +14414,16 @@
+ 
+ #ifdef FEAT_MBYTE
+     if (has_mbyte)
+-	buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
++    {
++	int	utf8 = 0;
++
++	if (argvars[1].v_type != VAR_UNKNOWN)
++	    utf8 = get_tv_number_chk(&argvars[1], NULL);
++	if (utf8)
++	    buf[(*utf_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
++	else
++	    buf[(*mb_char2bytes)((int)get_tv_number(&argvars[0]), buf)] = NUL;
++    }
+     else
+ #endif
+     {
+@@ -14006,6 +14435,18 @@
+ }
+ 
+ /*
++ * "or(expr, expr)" function
++ */
++    static void
++f_or(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++					| get_tv_number_chk(&argvars[1], NULL);
++}
++
++/*
+  * "pathshorten()" function
+  */
+     static void
+@@ -14125,6 +14566,40 @@
+ #endif
+ }
+ 
++#ifdef FEAT_PYTHON3
++/*
++ * "py3eval()" function
++ */
++    static void
++f_py3eval(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    char_u	*str;
++    char_u	buf[NUMBUFLEN];
++
++    str = get_tv_string_buf(&argvars[0], buf);
++    do_py3eval(str, rettv);
++}
++#endif
++
++#ifdef FEAT_PYTHON
++/*
++ * "pyeval()" function
++ */
++    static void
++f_pyeval(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    char_u	*str;
++    char_u	buf[NUMBUFLEN];
++
++    str = get_tv_string_buf(&argvars[0], buf);
++    do_pyeval(str, rettv);
++}
++#endif
++
+ /*
+  * "range()" function
+  */
+@@ -14177,22 +14652,19 @@
+     typval_T	*rettv;
+ {
+     int		binary = FALSE;
++    int		failed = FALSE;
+     char_u	*fname;
+     FILE	*fd;
+-    listitem_T	*li;
+-#define FREAD_SIZE 200	    /* optimized for text lines */
+-    char_u	buf[FREAD_SIZE];
+-    int		readlen;    /* size of last fread() */
+-    int		buflen;	    /* nr of valid chars in buf[] */
+-    int		filtd;	    /* how much in buf[] was NUL -> '\n' filtered */
+-    int		tolist;	    /* first byte in buf[] still to be put in list */
+-    int		chop;	    /* how many CR to chop off */
+-    char_u	*prev = NULL;	/* previously read bytes, if any */
+-    int		prevlen = 0;    /* length of "prev" if not NULL */
+-    char_u	*s;
+-    int		len;
+-    long	maxline = MAXLNUM;
+-    long	cnt = 0;
++    char_u	buf[(IOSIZE/256)*256];	/* rounded to avoid odd + 1 */
++    int		io_size = sizeof(buf);
++    int		readlen;		/* size of last fread() */
++    char_u	*prev	 = NULL;	/* previously read bytes, if any */
++    long	prevlen  = 0;		/* length of data in prev */
++    long	prevsize = 0;		/* size of prev buffer */
++    long	maxline  = MAXLNUM;
++    long	cnt	 = 0;
++    char_u	*p;			/* position in buf */
++    char_u	*start;			/* start of current line */
+ 
+     if (argvars[1].v_type != VAR_UNKNOWN)
+     {
+@@ -14214,49 +14686,61 @@
+ 	return;
+     }
+ 
+-    filtd = 0;
+     while (cnt < maxline || maxline < 0)
+     {
+-	readlen = (int)fread(buf + filtd, 1, FREAD_SIZE - filtd, fd);
+-	buflen = filtd + readlen;
+-	tolist = 0;
+-	for ( ; filtd < buflen || readlen <= 0; ++filtd)
+-	{
+-	    if (buf[filtd] == '\n' || readlen <= 0)
+-	    {
+-		/* Only when in binary mode add an empty list item when the
+-		 * last line ends in a '\n'. */
+-		if (!binary && readlen == 0 && filtd == 0)
+-		    break;
++	readlen = (int)fread(buf, 1, io_size, fd);
+ 
+-		/* Found end-of-line or end-of-file: add a text line to the
+-		 * list. */
+-		chop = 0;
+-		if (!binary)
+-		    while (filtd - chop - 1 >= tolist
+-					  && buf[filtd - chop - 1] == '\r')
+-			++chop;
+-		len = filtd - tolist - chop;
+-		if (prev == NULL)
+-		    s = vim_strnsave(buf + tolist, len);
++	/* This for loop processes what was read, but is also entered at end
++	 * of file so that either:
++	 * - an incomplete line gets written
++	 * - a "binary" file gets an empty line at the end if it ends in a
++	 *   newline.  */
++	for (p = buf, start = buf;
++		p < buf + readlen || (readlen <= 0 && (prevlen > 0 || binary));
++		++p)
++	{
++	    if (*p == '\n' || readlen <= 0)
++	    {
++		listitem_T  *li;
++		char_u	    *s	= NULL;
++		long_u	    len = p - start;
++
++		/* Finished a line.  Remove CRs before NL. */
++		if (readlen > 0 && !binary)
++		{
++		    while (len > 0 && start[len - 1] == '\r')
++			--len;
++		    /* removal may cross back to the "prev" string */
++		    if (len == 0)
++			while (prevlen > 0 && prev[prevlen - 1] == '\r')
++			    --prevlen;
++		}
++		if (prevlen == 0)
++		    s = vim_strnsave(start, (int)len);
+ 		else
+ 		{
+-		    s = alloc((unsigned)(prevlen + len + 1));
+-		    if (s != NULL)
++		    /* Change "prev" buffer to be the right size.  This way
++		     * the bytes are only copied once, and very long lines are
++		     * allocated only once.  */
++		    if ((s = vim_realloc(prev, prevlen + len + 1)) != NULL)
+ 		    {
+-			mch_memmove(s, prev, prevlen);
+-			vim_free(prev);
+-			prev = NULL;
+-			mch_memmove(s + prevlen, buf + tolist, len);
++			mch_memmove(s + prevlen, start, len);
+ 			s[prevlen + len] = NUL;
++			prev = NULL; /* the list will own the string */
++			prevlen = prevsize = 0;
+ 		    }
+ 		}
+-		tolist = filtd + 1;
++		if (s == NULL)
++		{
++		    do_outofmem_msg((long_u) prevlen + len + 1);
++		    failed = TRUE;
++		    break;
++		}
+ 
+-		li = listitem_alloc();
+-		if (li == NULL)
++		if ((li = listitem_alloc()) == NULL)
+ 		{
+ 		    vim_free(s);
++		    failed = TRUE;
+ 		    break;
+ 		}
+ 		li->li_tv.v_type = VAR_STRING;
+@@ -14264,71 +14748,111 @@
+ 		li->li_tv.vval.v_string = s;
+ 		list_append(rettv->vval.v_list, li);
+ 
+-		if (++cnt >= maxline && maxline >= 0)
+-		    break;
+-		if (readlen <= 0)
++		start = p + 1; /* step over newline */
++		if ((++cnt >= maxline && maxline >= 0) || readlen <= 0)
+ 		    break;
+ 	    }
+-	    else if (buf[filtd] == NUL)
+-		buf[filtd] = '\n';
++	    else if (*p == NUL)
++		*p = '\n';
+ #ifdef FEAT_MBYTE
+-	    else if (buf[filtd] == 0xef
+-		    && enc_utf8
+-		    && filtd + 2 < buflen
+-		    && !binary
+-		    && buf[filtd + 1] == 0xbb
+-		    && buf[filtd + 2] == 0xbf)
+-	    {
+-		/* remove utf-8 byte order mark */
+-		mch_memmove(buf + filtd, buf + filtd + 3, buflen - filtd - 3);
+-		--filtd;
+-		buflen -= 3;
++	    /* Check for utf8 "bom"; U+FEFF is encoded as EF BB BF.  Do this
++	     * when finding the BF and check the previous two bytes. */
++	    else if (*p == 0xbf && enc_utf8 && !binary)
++	    {
++		/* Find the two bytes before the 0xbf.	If p is at buf, or buf
++		 * + 1, these may be in the "prev" string. */
++		char_u back1 = p >= buf + 1 ? p[-1]
++				     : prevlen >= 1 ? prev[prevlen - 1] : NUL;
++		char_u back2 = p >= buf + 2 ? p[-2]
++			  : p == buf + 1 && prevlen >= 1 ? prev[prevlen - 1]
++			  : prevlen >= 2 ? prev[prevlen - 2] : NUL;
++
++		if (back2 == 0xef && back1 == 0xbb)
++		{
++		    char_u *dest = p - 2;
++
++		    /* Usually a BOM is at the beginning of a file, and so at
++		     * the beginning of a line; then we can just step over it.
++		     */
++		    if (start == dest)
++			start = p + 1;
++		    else
++		    {
++			/* have to shuffle buf to close gap */
++			int adjust_prevlen = 0;
++
++			if (dest < buf)
++			{
++			    adjust_prevlen = (int)(buf - dest); /* must be 1 or 2 */
++			    dest = buf;
++			}
++			if (readlen > p - buf + 1)
++			    mch_memmove(dest, p + 1, readlen - (p - buf) - 1);
++			readlen -= 3 - adjust_prevlen;
++			prevlen -= adjust_prevlen;
++			p = dest - 1;
++		    }
++		}
+ 	    }
+ #endif
+-	}
+-	if (readlen <= 0)
+-	    break;
++	} /* for */
+ 
+-	if (tolist == 0)
++	if (failed || (cnt >= maxline && maxline >= 0) || readlen <= 0)
++	    break;
++	if (start < p)
+ 	{
+-	    /* "buf" is full, need to move text to an allocated buffer */
+-	    if (prev == NULL)
+-	    {
+-		prev = vim_strnsave(buf, buflen);
+-		prevlen = buflen;
+-	    }
+-	    else
++	    /* There's part of a line in buf, store it in "prev". */
++	    if (p - start + prevlen >= prevsize)
+ 	    {
+-		s = alloc((unsigned)(prevlen + buflen));
+-		if (s != NULL)
++		/* need bigger "prev" buffer */
++		char_u *newprev;
++
++		/* A common use case is ordinary text files and "prev" gets a
++		 * fragment of a line, so the first allocation is made
++		 * small, to avoid repeatedly 'allocing' large and
++		 * 'reallocing' small. */
++		if (prevsize == 0)
++		    prevsize = (long)(p - start);
++		else
++		{
++		    long grow50pc = (prevsize * 3) / 2;
++		    long growmin  = (long)((p - start) * 2 + prevlen);
++		    prevsize = grow50pc > growmin ? grow50pc : growmin;
++		}
++		newprev = prev == NULL ? alloc(prevsize)
++						: vim_realloc(prev, prevsize);
++		if (newprev == NULL)
+ 		{
+-		    mch_memmove(s, prev, prevlen);
+-		    mch_memmove(s + prevlen, buf, buflen);
+-		    vim_free(prev);
+-		    prev = s;
+-		    prevlen += buflen;
++		    do_outofmem_msg((long_u)prevsize);
++		    failed = TRUE;
++		    break;
+ 		}
++		prev = newprev;
+ 	    }
+-	    filtd = 0;
++	    /* Add the line part to end of "prev". */
++	    mch_memmove(prev + prevlen, start, p - start);
++	    prevlen += (long)(p - start);
+ 	}
+-	else
+-	{
+-	    mch_memmove(buf, buf + tolist, buflen - tolist);
+-	    filtd -= tolist;
+-	}
+-    }
++    } /* while */
+ 
+     /*
+      * For a negative line count use only the lines at the end of the file,
+      * free the rest.
+      */
+-    if (maxline < 0)
++    if (!failed && maxline < 0)
+ 	while (cnt > -maxline)
+ 	{
+ 	    listitem_remove(rettv->vval.v_list, rettv->vval.v_list->lv_first);
+ 	    --cnt;
+ 	}
+ 
++    if (failed)
++    {
++	list_free(rettv->vval.v_list, TRUE);
++	/* readfile doc says an empty list is returned on error */
++	rettv->vval.v_list = list_alloc();
++    }
++
+     vim_free(prev);
+     fclose(fd);
+ }
+@@ -14369,8 +14893,8 @@
+  */
+     static void
+ f_reltime(argvars, rettv)
+-    typval_T	*argvars;
+-    typval_T	*rettv;
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv UNUSED;
+ {
+ #ifdef FEAT_RELTIME
+     proftime_T	res;
+@@ -14418,7 +14942,7 @@
+  */
+     static void
+ f_reltimestr(argvars, rettv)
+-    typval_T	*argvars;
++    typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+ {
+ #ifdef FEAT_RELTIME
+@@ -14691,13 +15215,14 @@
+     char_u	*key;
+     dict_T	*d;
+     dictitem_T	*di;
++    char	*arg_errmsg = N_("remove() argument");
+ 
+     if (argvars[0].v_type == VAR_DICT)
+     {
+ 	if (argvars[2].v_type != VAR_UNKNOWN)
+ 	    EMSG2(_(e_toomanyarg), "remove()");
+ 	else if ((d = argvars[0].vval.v_dict) != NULL
+-		&& !tv_check_lock(d->dv_lock, (char_u *)"remove() argument"))
++		&& !tv_check_lock(d->dv_lock, (char_u *)_(arg_errmsg)))
+ 	{
+ 	    key = get_tv_string_chk(&argvars[1]);
+ 	    if (key != NULL)
+@@ -14717,7 +15242,7 @@
+     else if (argvars[0].v_type != VAR_LIST)
+ 	EMSG2(_(e_listdictarg), "remove()");
+     else if ((l = argvars[0].vval.v_list) != NULL
+-	    && !tv_check_lock(l->lv_lock, (char_u *)"remove() argument"))
++	    && !tv_check_lock(l->lv_lock, (char_u *)_(arg_errmsg)))
+     {
+ 	int	    error = FALSE;
+ 
+@@ -14847,6 +15372,9 @@
+     typval_T	*rettv;
+ {
+     char_u	*p;
++#ifdef HAVE_READLINK
++    char_u	*buf = NULL;
++#endif
+ 
+     p = get_tv_string(&argvars[0]);
+ #ifdef FEAT_SHORTCUT
+@@ -14862,7 +15390,6 @@
+ #else
+ # ifdef HAVE_READLINK
+     {
+-	char_u	buf[MAXPATHL + 1];
+ 	char_u	*cpy;
+ 	int	len;
+ 	char_u	*remain = NULL;
+@@ -14879,7 +15406,10 @@
+ 
+ 	len = STRLEN(p);
+ 	if (len > 0 && after_pathsep(p, p + len))
++	{
+ 	    has_trailing_pathsep = TRUE;
++	    p[len - 1] = NUL; /* the trailing slash breaks readlink() */
++	}
+ 
+ 	q = getnextcomp(p);
+ 	if (*q != NUL)
+@@ -14890,6 +15420,10 @@
+ 	    q[-1] = NUL;
+ 	}
+ 
++	buf = alloc(MAXPATHL + 1);
++	if (buf == NULL)
++	    goto fail;
++
+ 	for (;;)
+ 	{
+ 	    for (;;)
+@@ -15033,6 +15567,7 @@
+ 
+ #ifdef HAVE_READLINK
+ fail:
++    vim_free(buf);
+ #endif
+     rettv->v_type = VAR_STRING;
+ }
+@@ -15051,7 +15586,7 @@
+     if (argvars[0].v_type != VAR_LIST)
+ 	EMSG2(_(e_listarg), "reverse()");
+     else if ((l = argvars[0].vval.v_list) != NULL
+-	    && !tv_check_lock(l->lv_lock, (char_u *)"reverse()"))
++	    && !tv_check_lock(l->lv_lock, (char_u *)_("reverse() argument")))
+     {
+ 	li = l->lv_last;
+ 	l->lv_first = l->lv_last = NULL;
+@@ -15257,6 +15792,30 @@
+ #endif
+ 
+ /*
++ * "screencol()" function
++ *
++ * First column is 1 to be consistent with virtcol().
++ */
++    static void
++f_screencol(argvars, rettv)
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv;
++{
++    rettv->vval.v_number = screen_screencol() + 1;
++}
++
++/*
++ * "screenrow()" function
++ */
++    static void
++f_screenrow(argvars, rettv)
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv;
++{
++    rettv->vval.v_number = screen_screenrow() + 1;
++}
++
++/*
+  * "search()" function
+  */
+     static void
+@@ -15428,7 +15987,7 @@
+     int		flags;	    /* SP_SETPCMARK and other SP_ values */
+     pos_T	*match_pos;
+     linenr_T	lnum_stop;  /* stop at this line if not zero */
+-    long	time_limit; /* stop after this many msec */
++    long	time_limit UNUSED; /* stop after this many msec */
+ {
+     char_u	*save_cpo;
+     char_u	*pat, *pat2 = NULL, *pat3 = NULL;
+@@ -15671,7 +16230,7 @@
+ 	return;
+     (void)get_tv_number(&argvars[0]);	    /* issue errmsg if type error */
+     varname = get_tv_string_chk(&argvars[1]);
+-    buf = get_buf_tv(&argvars[0]);
++    buf = get_buf_tv(&argvars[0], FALSE);
+     varp = &argvars[2];
+ 
+     if (buf != NULL && varname != NULL && varp != NULL)
+@@ -15824,7 +16383,8 @@
+ 		action = *act;
+ 	}
+ 
+-	if (l != NULL && set_errorlist(wp, l, action, NULL) == OK)
++	if (l != NULL && set_errorlist(wp, l, action,
++	       (char_u *)(wp == NULL ? "setqflist()" : "setloclist()")) == OK)
+ 	    rettv->vval.v_number = 0;
+     }
+ #endif
+@@ -15852,8 +16412,8 @@
+  */
+     static void
+ f_setmatches(argvars, rettv)
+-    typval_T	*argvars;
+-    typval_T	*rettv;
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv UNUSED;
+ {
+ #ifdef FEAT_SEARCH_EXTRA
+     list_T	*l;
+@@ -16056,7 +16616,7 @@
+     if (tp != NULL && varname != NULL && varp != NULL)
+     {
+ 	save_curtab = curtab;
+-	goto_tabpage_tp(tp);
++	goto_tabpage_tp(tp, FALSE, FALSE);
+ 
+ 	tabvarname = alloc((unsigned)STRLEN(varname) + 3);
+ 	if (tabvarname != NULL)
+@@ -16069,7 +16629,7 @@
+ 
+ 	/* Restore current tabpage */
+ 	if (valid_tabpage(save_curtab))
+-	    goto_tabpage_tp(save_curtab);
++	    goto_tabpage_tp(save_curtab, FALSE, FALSE);
+     }
+ }
+ 
+@@ -16098,6 +16658,7 @@
+ /*
+  * "setwinvar()" and "settabwinvar()" functions
+  */
++
+     static void
+ setwinvar(argvars, rettv, off)
+     typval_T	*argvars;
+@@ -16130,14 +16691,8 @@
+     if (win != NULL && varname != NULL && varp != NULL)
+     {
+ #ifdef FEAT_WINDOWS
+-	/* set curwin to be our win, temporarily */
+-	save_curwin = curwin;
+-	save_curtab = curtab;
+-	goto_tabpage_tp(tp);
+-	if (!win_valid(win))
++	if (switch_win(&save_curwin, &save_curtab, win, tp) == FAIL)
+ 	    return;
+-	curwin = win;
+-	curbuf = curwin->w_buffer;
+ #endif
+ 
+ 	if (*varname == '&')
+@@ -16165,19 +16720,29 @@
+ 	}
+ 
+ #ifdef FEAT_WINDOWS
+-	/* Restore current tabpage and window, if still valid (autocomands can
+-	 * make them invalid). */
+-	if (valid_tabpage(save_curtab))
+-	    goto_tabpage_tp(save_curtab);
+-	if (win_valid(save_curwin))
+-	{
+-	    curwin = save_curwin;
+-	    curbuf = curwin->w_buffer;
+-	}
++	restore_win(save_curwin, save_curtab);
+ #endif
+     }
+ }
+ 
++#ifdef FEAT_CRYPT
++/*
++ * "sha256({string})" function
++ */
++    static void
++f_sha256(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    char_u	*p;
++
++    p = get_tv_string(&argvars[0]);
++    rettv->vval.v_string = vim_strsave(
++				    sha256_bytes(p, (int)STRLEN(p), NULL, 0));
++    rettv->v_type = VAR_STRING;
++}
++#endif /* FEAT_CRYPT */
++
+ /*
+  * "shellescape({string})" function
+  */
+@@ -16192,6 +16757,17 @@
+ }
+ 
+ /*
++ * shiftwidth() function
++ */
++    static void
++f_shiftwidth(argvars, rettv)
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv;
++{
++    rettv->vval.v_number = get_sw_value();
++}
++
++/*
+  * "simplify()" function
+  */
+     static void
+@@ -16256,6 +16832,7 @@
+ 
+ static int	item_compare_ic;
+ static char_u	*item_compare_func;
++static dict_T	*item_compare_selfdict;
+ static int	item_compare_func_err;
+ #define ITEM_COMPARE_FAIL 999
+ 
+@@ -16315,7 +16892,8 @@
+ 
+     rettv.v_type = VAR_UNKNOWN;		/* clear_tv() uses this */
+     res = call_func(item_compare_func, (int)STRLEN(item_compare_func),
+-				 &rettv, 2, argv, 0L, 0L, &dummy, TRUE, NULL);
++				 &rettv, 2, argv, 0L, 0L, &dummy, TRUE,
++				 item_compare_selfdict);
+     clear_tv(&argv[0]);
+     clear_tv(&argv[1]);
+ 
+@@ -16348,7 +16926,8 @@
+     else
+     {
+ 	l = argvars[0].vval.v_list;
+-	if (l == NULL || tv_check_lock(l->lv_lock, (char_u *)"sort()"))
++	if (l == NULL || tv_check_lock(l->lv_lock,
++					     (char_u *)_("sort() argument")))
+ 	    return;
+ 	rettv->vval.v_list = l;
+ 	rettv->v_type = VAR_LIST;
+@@ -16360,8 +16939,10 @@
+ 
+ 	item_compare_ic = FALSE;
+ 	item_compare_func = NULL;
++	item_compare_selfdict = NULL;
+ 	if (argvars[1].v_type != VAR_UNKNOWN)
+ 	{
++	    /* optional second argument: {func} */
+ 	    if (argvars[1].v_type == VAR_FUNC)
+ 		item_compare_func = argvars[1].vval.v_string;
+ 	    else
+@@ -16376,6 +16957,17 @@
+ 		else
+ 		    item_compare_func = get_tv_string(&argvars[1]);
+ 	    }
++
++	    if (argvars[2].v_type != VAR_UNKNOWN)
++	    {
++		/* optional third argument: {dict} */
++		if (argvars[2].v_type != VAR_DICT)
++		{
++		    EMSG(_(e_dictreq));
++		    return;
++		}
++		item_compare_selfdict = argvars[2].vval.v_dict;
++	    }
+ 	}
+ 
+ 	/* Make an array with each entry pointing to an item in the List. */
+@@ -17512,18 +18104,22 @@
+     typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+ {
+-    char_u	fname[MAXPATHL + 1];
++    char_u	*fname;
+     tagname_T	tn;
+     int		first;
+ 
+     if (rettv_list_alloc(rettv) == FAIL)
+ 	return;
++    fname = alloc(MAXPATHL);
++    if (fname == NULL)
++	return;
+ 
+     for (first = TRUE; ; first = FALSE)
+ 	if (get_tagfname(&tn, first, fname) == FAIL
+ 		|| list_append_string(rettv->vval.v_list, fname, -1) == FAIL)
+ 	    break;
+     tagname_free(&tn);
++    vim_free(fname);
+ }
+ 
+ /*
+@@ -17711,7 +18307,7 @@
+     typval_T	*argvars;
+     typval_T	*rettv;
+ {
+-    char_u	*instr;
++    char_u	*in_str;
+     char_u	*fromstr;
+     char_u	*tostr;
+     char_u	*p;
+@@ -17728,7 +18324,7 @@
+     char_u	buf2[NUMBUFLEN];
+     garray_T	ga;
+ 
+-    instr = get_tv_string(&argvars[0]);
++    in_str = get_tv_string(&argvars[0]);
+     fromstr = get_tv_string_buf_chk(&argvars[1], buf);
+     tostr = get_tv_string_buf_chk(&argvars[2], buf2);
+ 
+@@ -17754,19 +18350,19 @@
+ 	}
+ 
+     /* fromstr and tostr have to contain the same number of chars */
+-    while (*instr != NUL)
++    while (*in_str != NUL)
+     {
+ #ifdef FEAT_MBYTE
+ 	if (has_mbyte)
+ 	{
+-	    inlen = (*mb_ptr2len)(instr);
+-	    cpstr = instr;
++	    inlen = (*mb_ptr2len)(in_str);
++	    cpstr = in_str;
+ 	    cplen = inlen;
+ 	    idx = 0;
+ 	    for (p = fromstr; *p != NUL; p += fromlen)
+ 	    {
+ 		fromlen = (*mb_ptr2len)(p);
+-		if (fromlen == inlen && STRNCMP(instr, p, inlen) == 0)
++		if (fromlen == inlen && STRNCMP(in_str, p, inlen) == 0)
+ 		{
+ 		    for (p = tostr; *p != NUL; p += tolen)
+ 		    {
+@@ -17785,11 +18381,11 @@
+ 		++idx;
+ 	    }
+ 
+-	    if (first && cpstr == instr)
++	    if (first && cpstr == in_str)
+ 	    {
+ 		/* Check that fromstr and tostr have the same number of
+ 		 * (multi-byte) characters.  Done only once when a character
+-		 * of instr doesn't appear in fromstr. */
++		 * of in_str doesn't appear in fromstr. */
+ 		first = FALSE;
+ 		for (p = tostr; *p != NUL; p += tolen)
+ 		{
+@@ -17804,18 +18400,18 @@
+ 	    mch_memmove((char *)ga.ga_data + ga.ga_len, cpstr, (size_t)cplen);
+ 	    ga.ga_len += cplen;
+ 
+-	    instr += inlen;
++	    in_str += inlen;
+ 	}
+ 	else
+ #endif
+ 	{
+ 	    /* When not using multi-byte chars we can do it faster. */
+-	    p = vim_strchr(fromstr, *instr);
++	    p = vim_strchr(fromstr, *in_str);
+ 	    if (p != NULL)
+ 		ga_append(&ga, tostr[p - fromstr]);
+ 	    else
+-		ga_append(&ga, *instr);
+-	    ++instr;
++		ga_append(&ga, *in_str);
++	    ++in_str;
+ 	}
+     }
+ 
+@@ -17876,17 +18472,27 @@
+  */
+     static void
+ f_undofile(argvars, rettv)
+-    typval_T	*argvars;
++    typval_T	*argvars UNUSED;
+     typval_T	*rettv;
+ {
+     rettv->v_type = VAR_STRING;
+ #ifdef FEAT_PERSISTENT_UNDO
+     {
+-	char_u *ffname = FullName_save(get_tv_string(&argvars[0]), FALSE);
++	char_u *fname = get_tv_string(&argvars[0]);
++
++	if (*fname == NUL)
++	{
++	    /* If there is no file name there will be no undo file. */
++	    rettv->vval.v_string = NULL;
++	}
++	else
++	{
++	    char_u *ffname = FullName_save(fname, FALSE);
+ 
+-	if (ffname != NULL)
+-	    rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
+-	vim_free(ffname);
++	    if (ffname != NULL)
++		rettv->vval.v_string = u_get_undo_file_name(ffname, FALSE);
++	    vim_free(ffname);
++	}
+     }
+ #else
+     rettv->vval.v_string = NULL;
+@@ -17980,6 +18586,20 @@
+ }
+ 
+ /*
++ * "wildmenumode()" function
++ */
++    static void
++f_wildmenumode(argvars, rettv)
++    typval_T	*argvars UNUSED;
++    typval_T	*rettv UNUSED;
++{
++#ifdef FEAT_WILDMENU
++    if (wild_menu_showing)
++	rettv->vval.v_number = 1;
++#endif
++}
++
++/*
+  * "winbufnr(nr)" function
+  */
+     static void
+@@ -18118,9 +18738,11 @@
+ 	curwin->w_skipcol = get_dict_number(dict, (char_u *)"skipcol");
+ 
+ 	check_cursor();
+-	changed_cline_bef_curs();
+-	invalidate_botline();
+-	redraw_later(VALID);
++	win_new_height(curwin, curwin->w_height);
++# ifdef FEAT_VERTSPLIT
++	win_new_width(curwin, W_WIDTH(curwin));
++# endif
++	changed_window_setting();
+ 
+ 	if (curwin->w_topline == 0)
+ 	    curwin->w_topline = 1;
+@@ -18258,6 +18880,19 @@
+ }
+ 
+ /*
++ * "xor(expr, expr)" function
++ */
++    static void
++f_xor(argvars, rettv)
++    typval_T	*argvars;
++    typval_T	*rettv;
++{
++    rettv->vval.v_number = get_tv_number_chk(&argvars[0], NULL)
++					^ get_tv_number_chk(&argvars[1], NULL);
++}
++
++
++/*
+  * Translate a String variable into a position.
+  * Returns NULL when there is an error.
+  */
+@@ -18331,7 +18966,7 @@
+ #endif
+     if (name[0] == '\'')			/* mark */
+     {
+-	pp = getmark_fnum(name[1], FALSE, fnum);
++	pp = getmark_buf_fnum(curbuf, name[1], FALSE, fnum);
+ 	if (pp == NULL || pp == (pos_T *)-1 || pp->lnum <= 0)
+ 	    return NULL;
+ 	return pp;
+@@ -18768,11 +19403,7 @@
+ set_vim_var_char(c)
+     int c;
+ {
+-#ifdef FEAT_MBYTE
+-    char_u	buf[MB_MAXBYTES];
+-#else
+-    char_u	buf[2];
+-#endif
++    char_u	buf[MB_MAXBYTES + 1];
+ 
+ #ifdef FEAT_MBYTE
+     if (has_mbyte)
+@@ -19410,16 +20041,17 @@
+ 	*htp = ht;
+     if (ht == NULL)
+ 	return NULL;
+-    return find_var_in_ht(ht, varname, htp != NULL);
++    return find_var_in_ht(ht, *name, varname, htp != NULL);
+ }
+ 
+ /*
+- * Find variable "varname" in hashtab "ht".
++ * Find variable "varname" in hashtab "ht" with name "htname".
+  * Returns NULL if not found.
+  */
+     static dictitem_T *
+-find_var_in_ht(ht, varname, writing)
++find_var_in_ht(ht, htname, varname, writing)
+     hashtab_T	*ht;
++    int		htname;
+     char_u	*varname;
+     int		writing;
+ {
+@@ -19428,7 +20060,7 @@
+     if (*varname == NUL)
+     {
+ 	/* Must be something like "s:", otherwise "ht" would be NULL. */
+-	switch (varname[-2])
++	switch (htname)
+ 	{
+ 	    case 's': return &SCRIPT_SV(current_SID)->sv_var;
+ 	    case 'g': return &globvars_var;
+@@ -19453,9 +20085,14 @@
+ 	 * worked find the variable again.  Don't auto-load a script if it was
+ 	 * loaded already, otherwise it would be loaded every time when
+ 	 * checking if a function name is a Funcref variable. */
+-	if (ht == &globvarht && !writing
+-			    && script_autoload(varname, FALSE) && !aborting())
++	if (ht == &globvarht && !writing)
++	{
++	    /* Note: script_autoload() may make "hi" invalid. It must either
++	     * be obtained again or not used. */
++	    if (!script_autoload(varname, FALSE) || aborting())
++		return NULL;
+ 	    hi = hash_find(ht, varname);
++	}
+ 	if (HASHITEM_EMPTY(hi))
+ 	    return NULL;
+     }
+@@ -19498,12 +20135,12 @@
+ 			       || vim_strchr(name + 2, AUTOLOAD_CHAR) != NULL)
+ 	return NULL;
+     if (*name == 'b')				/* buffer variable */
+-	return &curbuf->b_vars.dv_hashtab;
++	return &curbuf->b_vars->dv_hashtab;
+     if (*name == 'w')				/* window variable */
+-	return &curwin->w_vars.dv_hashtab;
++	return &curwin->w_vars->dv_hashtab;
+ #ifdef FEAT_WINDOWS
+     if (*name == 't')				/* tab page variable */
+-	return &curtab->tp_vars.dv_hashtab;
++	return &curtab->tp_vars->dv_hashtab;
+ #endif
+     if (*name == 'v')				/* v: variable */
+ 	return &vimvarht;
+@@ -19564,7 +20201,7 @@
+ 	{
+ 	    sv = SCRIPT_SV(ga_scripts.ga_len + 1) =
+ 		(scriptvar_T *)alloc_clear(sizeof(scriptvar_T));
+-	    init_var_dict(&sv->sv_dict, &sv->sv_var);
++	    init_var_dict(&sv->sv_dict, &sv->sv_var, VAR_SCOPE);
+ 	    ++ga_scripts.ga_len;
+ 	}
+     }
+@@ -19575,11 +20212,14 @@
+  * point to it.
+  */
+     void
+-init_var_dict(dict, dict_var)
++init_var_dict(dict, dict_var, scope)
+     dict_T	*dict;
+     dictitem_T	*dict_var;
++    int		scope;
+ {
+     hash_init(&dict->dv_hashtab);
++    dict->dv_lock = 0;
++    dict->dv_scope = scope;
+     dict->dv_refcount = DO_NOT_FREE_CNT;
+     dict->dv_copyID = 0;
+     dict_var->di_tv.vval.v_dict = dict;
+@@ -19590,6 +20230,19 @@
+ }
+ 
+ /*
++ * Unreference a dictionary initialized by init_var_dict().
++ */
++    void
++unref_var_dict(dict)
++    dict_T	*dict;
++{
++    /* Now the dict needs to be freed if no one else is using it, go back to
++     * normal reference counting. */
++    dict->dv_refcount -= DO_NOT_FREE_CNT - 1;
++    dict_unref(dict);
++}
++
++/*
+  * Clean up a list of internal variables.
+  * Frees all allocated variables and the value they contain.
+  * Clears hashtab "ht", does not free it.
+@@ -19730,7 +20383,6 @@
+     dictitem_T	*v;
+     char_u	*varname;
+     hashtab_T	*ht;
+-    char_u	*p;
+ 
+     ht = find_var_ht(name, &varname);
+     if (ht == NULL || *varname == NUL)
+@@ -19738,27 +20390,10 @@
+ 	EMSG2(_(e_illvar), name);
+ 	return;
+     }
+-    v = find_var_in_ht(ht, varname, TRUE);
++    v = find_var_in_ht(ht, 0, varname, TRUE);
+ 
+-    if (tv->v_type == VAR_FUNC)
+-    {
+-	if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
+-		&& !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
+-							 ? name[2] : name[0]))
+-	{
+-	    EMSG2(_("E704: Funcref variable name must start with a capital: %s"), name);
+-	    return;
+-	}
+-	/* Don't allow hiding a function.  When "v" is not NULL we migth be
+-	 * assigning another function to the same var, the type is checked
+-	 * below. */
+-	if (v == NULL && function_exists(name))
+-	{
+-	    EMSG2(_("E705: Variable name conflicts with existing function: %s"),
+-									name);
+-	    return;
+-	}
+-    }
++    if (tv->v_type == VAR_FUNC && var_check_func_name(name, v == NULL))
++	return;
+ 
+     if (v != NULL)
+     {
+@@ -19824,13 +20459,8 @@
+ 	}
+ 
+ 	/* Make sure the variable name is valid. */
+-	for (p = varname; *p != NUL; ++p)
+-	    if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
+-						       && *p != AUTOLOAD_CHAR)
+-	    {
+-		EMSG2(_(e_illvar), varname);
+-		return;
+-	    }
++	if (!valid_varname(varname))
++	    return;
+ 
+ 	v = (dictitem_T *)alloc((unsigned)(sizeof(dictitem_T)
+ 							  + STRLEN(varname)));
+@@ -19895,6 +20525,55 @@
+ }
+ 
+ /*
++ * Check if a funcref is assigned to a valid variable name.
++ * Return TRUE and give an error if not.
++ */
++    static int
++var_check_func_name(name, new_var)
++    char_u *name;    /* points to start of variable name */
++    int    new_var;  /* TRUE when creating the variable */
++{
++    if (!(vim_strchr((char_u *)"wbs", name[0]) != NULL && name[1] == ':')
++	    && !ASCII_ISUPPER((name[0] != NUL && name[1] == ':')
++						     ? name[2] : name[0]))
++    {
++	EMSG2(_("E704: Funcref variable name must start with a capital: %s"),
++									name);
++	return TRUE;
++    }
++    /* Don't allow hiding a function.  When "v" is not NULL we might be
++     * assigning another function to the same var, the type is checked
++     * below. */
++    if (new_var && function_exists(name))
++    {
++	EMSG2(_("E705: Variable name conflicts with existing function: %s"),
++								    name);
++	return TRUE;
++    }
++    return FALSE;
++}
++
++/*
++ * Check if a variable name is valid.
++ * Return FALSE and give an error if not.
++ */
++    static int
++valid_varname(varname)
++    char_u *varname;
++{
++    char_u *p;
++
++    for (p = varname; *p != NUL; ++p)
++	if (!eval_isnamec1(*p) && (p == varname || !VIM_ISDIGIT(*p))
++						   && *p != AUTOLOAD_CHAR)
++	{
++	    EMSG2(_(e_illvar), varname);
++	    return FALSE;
++	}
++    return TRUE;
++}
++
++/*
+  * Return TRUE if typeval "tv" is set to be locked (immutable).
+  * Also give an error message, using "name".
+  */
+@@ -20099,7 +20778,13 @@
+ 		/* Call msg_start() after eval1(), evaluating the expression
+ 		 * may cause a message to appear. */
+ 		if (eap->cmdidx == CMD_echo)
++		{
++		    /* Mark the saved text as finishing the line, so that what
++		     * follows is displayed on a new line when scrolling back
++		     * at the more prompt. */
++		    msg_sb_eol();
+ 		    msg_start();
++		}
+ 	    }
+ 	    else if (eap->cmdidx == CMD_echo)
+ 		msg_puts_attr((char_u *)" ", echo_attr);
+@@ -20302,6 +20987,7 @@
+     exarg_T	*eap;
+ {
+     char_u	*theline;
++    int		i;
+     int		j;
+     int		c;
+     int		saved_did_emsg;
+@@ -20515,6 +21201,9 @@
+ 	    if (arg[j] != NUL)
+ 		emsg_funcname((char *)e_invarg2, arg);
+ 	}
++	/* Disallow using the g: dict. */
++	if (fudi.fd_dict != NULL && fudi.fd_dict->dv_scope == VAR_DEF_SCOPE)
++	    EMSG(_("E862: Cannot use g: here"));
+     }
+ 
+     /*
+@@ -20548,6 +21237,15 @@
+ 	    arg = vim_strsave(arg);
+ 	    if (arg == NULL)
+ 		goto erret;
++
++	    /* Check for duplicate argument name. */
++	    for (i = 0; i < newargs.ga_len; ++i)
++		if (STRCMP(((char_u **)(newargs.ga_data))[i], arg) == 0)
++		{
++		    EMSG2(_("E853: Duplicate argument name: %s"), arg);
++		    goto erret;
++		}
++
+ 	    ((char_u **)(newargs.ga_data))[newargs.ga_len] = arg;
+ 	    *p = c;
+ 	    newargs.ga_len++;
+@@ -20623,7 +21321,8 @@
+     nesting = 0;
+     for (;;)
+     {
+-	msg_scroll = TRUE;
++	if (KeyTyped)
++	    msg_scroll = TRUE;
+ 	need_wait_return = FALSE;
+ 	sourcing_lnum_off = sourcing_lnum;
+ 
+@@ -20726,6 +21425,8 @@
+ 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'r'))
+ 			|| (p[0] == 't' && p[1] == 'c'
+ 				    && (!ASCII_ISALPHA(p[2]) || p[2] == 'l'))
++			|| (p[0] == 'l' && p[1] == 'u' && p[2] == 'a'
++				    && !ASCII_ISALPHA(p[3]))
+ 			|| (p[0] == 'r' && p[1] == 'u' && p[2] == 'b'
+ 				    && (!ASCII_ISALPHA(p[3]) || p[3] == 'y'))
+ 			|| (p[0] == 'm' && p[1] == 'z'
+@@ -21190,6 +21891,12 @@
+ 	MSG_PUTS("...");
+     }
+     msg_putchar(')');
++    if (fp->uf_flags & FC_ABORT)
++	MSG_PUTS(" abort");
++    if (fp->uf_flags & FC_RANGE)
++	MSG_PUTS(" range");
++    if (fp->uf_flags & FC_DICT)
++	MSG_PUTS(" dict");
+     msg_clr_eos();
+     if (p_verbose > 0)
+ 	last_set_msg(fp->uf_script_ID);
+@@ -21229,6 +21936,15 @@
+ }
+ #endif
+ 
++    int
++translated_function_exists(name)
++    char_u	*name;
++{
++    if (builtin_function(name))
++	return find_internal_func(name) >= 0;
++    return find_func(name) != NULL;
++}
++
+ /*
+  * Return TRUE if a function "name" exists.
+  */
+@@ -21246,16 +21962,29 @@
+     /* Only accept "funcname", "funcname ", "funcname (..." and
+      * "funcname(...", not "funcname!...". */
+     if (p != NULL && (*nm == NUL || *nm == '('))
+-    {
+-	if (builtin_function(p))
+-	    n = (find_internal_func(p) >= 0);
+-	else
+-	    n = (find_func(p) != NULL);
+-    }
++	n = translated_function_exists(p);
+     vim_free(p);
+     return n;
+ }
+ 
++    char_u *
++get_expanded_name(name, check)
++    char_u	*name;
++    int		check;
++{
++    char_u	*nm = name;
++    char_u	*p;
++
++    p = trans_function_name(&nm, FALSE, TFN_INT|TFN_QUIET, NULL);
++
++    if (p != NULL && *nm == NUL)
++	if (!check || translated_function_exists(p))
++	    return p;
++
++    vim_free(p);
++    return NULL;
++}
++
+ /*
+  * Return TRUE if "name" looks like a builtin function name: starts with a
+  * lower case letter and doesn't contain a ':' or AUTOLOAD_CHAR.
+@@ -21562,6 +22291,9 @@
+ 	    ++hi;
+ 	fp = HI2UF(hi);
+ 
++	if (fp->uf_flags & FC_DICT)
++	    return (char_u *)""; /* don't show dict functions */
++
+ 	if (STRLEN(fp->uf_name) + 4 >= IOSIZE)
+ 	    return fp->uf_name;	/* prevents overflow */
+ 
+@@ -21689,7 +22421,7 @@
+  * Unreference a Function: decrement the reference count and free it when it
+  * becomes zero.  Only for numbered functions.
+  */
+-    static void
++    void
+ func_unref(name)
+     char_u	*name;
+ {
+@@ -21713,7 +22445,7 @@
+ /*
+  * Count a reference to a Function.
+  */
+-    static void
++    void
+ func_ref(name)
+     char_u	*name;
+ {
+@@ -21792,7 +22524,7 @@
+     /*
+      * Init l: variables.
+      */
+-    init_var_dict(&fc->l_vars, &fc->l_vars_var);
++    init_var_dict(&fc->l_vars, &fc->l_vars_var, VAR_DEF_SCOPE);
+     if (selfdict != NULL)
+     {
+ 	/* Set l:self to "selfdict".  Use "name" to avoid a warning from
+@@ -21813,7 +22545,7 @@
+      * Set a:0 to "argcount".
+      * Set a:000 to a list with room for the "..." arguments.
+      */
+-    init_var_dict(&fc->l_avars, &fc->l_avars_var);
++    init_var_dict(&fc->l_avars, &fc->l_avars_var, VAR_SCOPE);
+     add_nr_var(&fc->l_avars, &fc->fixvar[fixvar_idx++].var, "0",
+ 				(varnumber_T)(argcount - fp->uf_args.ga_len));
+     /* Use "name" to avoid a warning from some compiler that checks the
+@@ -21921,8 +22653,12 @@
+ 			s = tv2string(&argvars[i], &tofree, numbuf2, 0);
+ 			if (s != NULL)
+ 			{
+-			    trunc_string(s, buf, MSG_BUF_CLEN);
+-			    msg_puts(buf);
++			    if (vim_strsize(s) > MSG_BUF_CLEN)
++			    {
++				trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
++				s = buf;
++			    }
++			    msg_puts(s);
+ 			    vim_free(tofree);
+ 			}
+ 		    }
+@@ -22010,8 +22746,12 @@
+ 	    s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+ 	    if (s != NULL)
+ 	    {
+-		trunc_string(s, buf, MSG_BUF_CLEN);
+-		smsg((char_u *)_("%s returning %s"), sourcing_name, buf);
++		if (vim_strsize(s) > MSG_BUF_CLEN)
++		{
++		    trunc_string(s, buf, MSG_BUF_CLEN, MSG_BUF_LEN);
++		    s = buf;
++		}
++		smsg((char_u *)_("%s returning %s"), sourcing_name, s);
+ 		vim_free(tofree);
+ 	    }
+ 	}
+@@ -22519,18 +23259,21 @@
+ 	if (tab != NULL)
+ 	{
+ 	    *tab++ = '\0';	/* isolate the variable name */
+-	    if (*tab == 'S')	/* string var */
+-		type = VAR_STRING;
++	    switch (*tab)
++	    {
++		case 'S': type = VAR_STRING; break;
+ #ifdef FEAT_FLOAT
+-	    else if (*tab == 'F')
+-		type = VAR_FLOAT;
++		case 'F': type = VAR_FLOAT; break;
+ #endif
++		case 'D': type = VAR_DICT; break;
++		case 'L': type = VAR_LIST; break;
++	    }
+ 
+ 	    tab = vim_strchr(tab, '\t');
+ 	    if (tab != NULL)
+ 	    {
+ 		tv.v_type = type;
+-		if (type == VAR_STRING)
++		if (type == VAR_STRING || type == VAR_DICT || type == VAR_LIST)
+ 		    tv.vval.v_string = viminfo_readstring(virp,
+ 				       (int)(tab - virp->vir_line + 1), TRUE);
+ #ifdef FEAT_FLOAT
+@@ -22539,9 +23282,28 @@
+ #endif
+ 		else
+ 		    tv.vval.v_number = atol((char *)tab + 1);
++		if (type == VAR_DICT || type == VAR_LIST)
++		{
++		    typval_T *etv = eval_expr(tv.vval.v_string, NULL);
++
++		    if (etv == NULL)
++			/* Failed to parse back the dict or list, use it as a
++			 * string. */
++			tv.v_type = VAR_STRING;
++		    else
++		    {
++			vim_free(tv.vval.v_string);
++			tv = *etv;
++			vim_free(etv);
++		    }
++		}
++
+ 		set_var(virp->vir_line + 1, &tv, FALSE);
+-		if (type == VAR_STRING)
++
++		if (tv.v_type == VAR_STRING)
+ 		    vim_free(tv.vval.v_string);
++		else if (tv.v_type == VAR_DICT || tv.v_type == VAR_LIST)
++		    clear_tv(&tv);
+ 	    }
+ 	}
+     }
+@@ -22583,8 +23345,10 @@
+ 		    case VAR_STRING: s = "STR"; break;
+ 		    case VAR_NUMBER: s = "NUM"; break;
+ #ifdef FEAT_FLOAT
+-		    case VAR_FLOAT: s = "FLO"; break;
++		    case VAR_FLOAT:  s = "FLO"; break;
+ #endif
++		    case VAR_DICT:   s = "DIC"; break;
++		    case VAR_LIST:   s = "LIS"; break;
+ 		    default: continue;
+ 		}
+ 		fprintf(fp, "!%s\t%s\t", this_var->di_key, s);
+@@ -22656,7 +23420,7 @@
+ 		    f = -f;
+ 		    sign = '-';
+ 		}
+-		if ((fprintf(fd, "let %s = %c&%f",
++		if ((fprintf(fd, "let %s = %c%f",
+ 					       this_var->di_key, sign, f) < 0)
+ 			|| put_eol(fd) == FAIL)
+ 		    return FAIL;
+@@ -23019,6 +23783,7 @@
+     int		c;
+     int		has_fullname = 0;
+ #ifdef WIN3264
++    char_u	*fname_start = *fnamep;
+     int		has_shortname = 0;
+ #endif
+ 
+@@ -23072,6 +23837,27 @@
+ 		return -1;
+ 	}
+ 
++#ifdef WIN3264
++# if _WIN32_WINNT >= 0x0500
++	if (vim_strchr(*fnamep, '~') != NULL)
++	{
++	    /* Expand 8.3 filename to full path.  Needed to make sure the same
++	     * file does not have two different names.
++	     * Note: problem does not occur if _WIN32_WINNT < 0x0500. */
++	    p = alloc(_MAX_PATH + 1);
++	    if (p != NULL)
++	    {
++		if (GetLongPathName(*fnamep, p, MAXPATHL))
++		{
++		    vim_free(*bufp);
++		    *bufp = *fnamep = p;
++		}
++		else
++		    vim_free(p);
++	    }
++	}
++# endif
++#endif
+ 	/* Append a path separator to a directory. */
+ 	if (mch_isdir(*fnamep))
+ 	{
+@@ -23193,24 +23979,25 @@
+     }
+ 
+ #ifdef WIN3264
+-    /* Check shortname after we have done 'heads' and before we do 'tails'
++    /*
++     * Handle ":8" after we have done 'heads' and before we do 'tails'.
+      */
+     if (has_shortname)
+     {
+-	pbuf = NULL;
+-	/* Copy the string if it is shortened by :h */
+-	if (*fnamelen < (int)STRLEN(*fnamep))
++	/* Copy the string if it is shortened by :h and when it wasn't copied
++	 * yet, because we are going to change it in place.  Avoids changing
++	 * the buffer name for "%:8". */
++	if (*fnamelen < (int)STRLEN(*fnamep) || *fnamep == fname_start)
+ 	{
+ 	    p = vim_strnsave(*fnamep, *fnamelen);
+-	    if (p == 0)
++	    if (p == NULL)
+ 		return -1;
+ 	    vim_free(*bufp);
+ 	    *bufp = *fnamep = p;
+ 	}
+ 
+ 	/* Split into two implementations - makes it easier.  First is where
+-	 * there isn't a full name already, second is where there is.
+-	 */
++	 * there isn't a full name already, second is where there is. */
+ 	if (!has_fullname && !vim_isAbsName(*fnamep))
+ 	{
+ 	    if (shortpath_for_partial(fnamep, bufp, fnamelen) == FAIL)
+@@ -23218,18 +24005,16 @@
+ 	}
+ 	else
+ 	{
+-	    int		l;
++	    int		l = *fnamelen;
+ 
+-	    /* Simple case, already have the full-name
++	    /* Simple case, already have the full-name.
+ 	     * Nearly always shorter, so try first time. */
+-	    l = *fnamelen;
+ 	    if (get_short_pathname(fnamep, bufp, &l) == FAIL)
+ 		return -1;
+ 
+ 	    if (l == 0)
+ 	    {
+-		/* Couldn't find the filename.. search the paths.
+-		 */
++		/* Couldn't find the filename, search the paths. */
+ 		l = *fnamelen;
+ 		if (shortpath_for_invalid_fname(fnamep, bufp, &l) == FAIL)
+ 		    return -1;
+diff -Naur vim73.orig/src/ex_cmds.c vim73/src/ex_cmds.c
+--- vim73.orig/src/ex_cmds.c	2010-08-13 09:14:35.000000000 +0000
++++ vim73/src/ex_cmds.c	2013-06-07 17:07:30.685587720 +0000
+@@ -11,10 +11,6 @@
+  * ex_cmds.c: some functions for command line commands
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ #include "version.h"
+ 
+@@ -29,7 +25,6 @@
+ static int read_viminfo_up_to_marks __ARGS((vir_T *virp, int forceit, int writing));
+ #endif
+ 
+-static int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
+ static int check_readonly __ARGS((int *forceit, buf_T *buf));
+ #ifdef FEAT_AUTOCMD
+ static void delbuf_msg __ARGS((char_u *name));
+@@ -323,7 +318,8 @@
+     /* When sorting numbers "start_col_nr" is the number, not the column
+      * number. */
+     if (sort_nr)
+-	result = l1.start_col_nr - l2.start_col_nr;
++	result = l1.start_col_nr == l2.start_col_nr ? 0
++				 : l1.start_col_nr > l2.start_col_nr ? 1 : -1;
+     else
+     {
+ 	/* We need to copy one line into "sortbuf1", because there is no
+@@ -419,8 +415,15 @@
+ 	    }
+ 	    *s = NUL;
+ 	    /* Use last search pattern if sort pattern is empty. */
+-	    if (s == p + 1 && last_search_pat() != NULL)
++	    if (s == p + 1)
++	    {
++		if (last_search_pat() == NULL)
++		{
++		    EMSG(_(e_noprevre));
++		    goto sortend;
++		}
+ 		regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
++	    }
+ 	    else
+ 		regmatch.regprog = vim_regcomp(p + 1, RE_MAGIC);
+ 	    if (regmatch.regprog == NULL)
+@@ -482,7 +485,7 @@
+ 	     * of the match, by temporarily terminating the string there */
+ 	    s2 = s + end_col;
+ 	    c = *s2;
+-	    (*s2) = 0;
++	    *s2 = NUL;
+ 	    /* Sorting on number: Store the number itself. */
+ 	    p = s + start_col;
+ 	    if (sort_hex)
+@@ -491,9 +494,13 @@
+ 		s = skiptodigit(p);
+ 	    if (s > p && s[-1] == '-')
+ 		--s;  /* include preceding negative sign */
+-	    vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
+-					&nrs[lnum - eap->line1].start_col_nr, NULL);
+-	    (*s2) = c;
++	    if (*s == NUL)
++		/* empty line should sort before any number */
++		nrs[lnum - eap->line1].start_col_nr = -MAXLNUM;
++	    else
++		vim_str2nr(s, NULL, NULL, sort_oct, sort_hex,
++				  &nrs[lnum - eap->line1].start_col_nr, NULL);
++	    *s2 = c;
+ 	}
+ 	else
+ 	{
+@@ -777,6 +784,7 @@
+      */
+     last_line = curbuf->b_ml.ml_line_count;
+     mark_adjust(line1, line2, last_line - line2, 0L);
++    changed_lines(last_line - num_lines + 1, 0, last_line + 1, num_lines);
+     if (dest >= line2)
+     {
+ 	mark_adjust(line2 + 1, dest, -num_lines, 0L);
+@@ -792,6 +800,7 @@
+     curbuf->b_op_start.col = curbuf->b_op_end.col = 0;
+     mark_adjust(last_line - num_lines + 1, last_line,
+ 					     -(last_line - dest - extra), 0L);
++    changed_lines(last_line - num_lines + 1, 0, last_line + 1, -extra);
+ 
+     /*
+      * Now we delete the original text -- webb
+@@ -819,7 +828,13 @@
+ 	curwin->w_cursor.lnum = dest + (line2 - line1) + 1;
+ 
+     if (line1 < dest)
+-	changed_lines(line1, 0, dest + num_lines + 1, 0L);
++    {
++	dest += num_lines + 1;
++	last_line = curbuf->b_ml.ml_line_count;
++	if (dest > last_line + 1)
++	    dest = last_line + 1;
++	changed_lines(line1, 0, dest, 0L);
++    }
+     else
+ 	changed_lines(dest + 1, 0, line1 + num_lines, 0L);
+ 
+@@ -898,9 +913,6 @@
+  * Handle the ":!cmd" command.	Also for ":r !cmd" and ":w !cmd"
+  * Bangs in the argument are replaced with the previously entered command.
+  * Remember the argument.
+- *
+- * RISCOS: Bangs only replaced when followed by a space, since many
+- * pathnames contain one.
+  */
+     void
+ do_bang(addr_count, eap, forceit, do_in, do_out)
+@@ -979,11 +991,7 @@
+ 	trailarg = NULL;
+ 	while (*p)
+ 	{
+-	    if (*p == '!'
+-#ifdef RISCOS
+-			&& (p[1] == ' ' || p[1] == NUL)
+-#endif
+-					)
++	    if (*p == '!')
+ 	    {
+ 		if (p > newcmd && p[-1] == '\\')
+ 		    STRMOVE(p - 1, p);
+@@ -1113,7 +1121,7 @@
+     if (do_out)
+ 	shell_flags |= SHELL_DOOUT;
+ 
+-#if !defined(USE_SYSTEM) && defined(UNIX)
++#ifdef FEAT_FILTERPIPE
+     if (!do_in && do_out && !p_stmp)
+     {
+ 	/* Use a pipe to fetch stdout of the command, do not use a temp file. */
+@@ -1577,14 +1585,8 @@
+ 	    if (p != NULL)
+ 		*p = NUL;
+ 	}
+-# ifdef RISCOS
+-	STRCAT(buf, " { < ");	/* Use RISC OS notation for input. */
+-	STRCAT(buf, itmp);
+-	STRCAT(buf, " } ");
+-# else
+ 	STRCAT(buf, " <");	/* " < " causes problems on Amiga */
+ 	STRCAT(buf, itmp);
+-# endif
+ 	if (*p_shq == NUL)
+ 	{
+ 	    p = vim_strchr(cmd, '|');
+@@ -1633,16 +1635,9 @@
+     else
+ 	vim_snprintf((char *)end, (size_t)(buflen - (end - buf)),
+ #ifdef FEAT_QUICKFIX
+-# ifndef RISCOS
+-		opt != p_sp ? " %s%s" :
+-# endif
+ 		" %s %s",
+ #else
+-# ifndef RISCOS
+ 		" %s%s",	/* " > %s" causes problems on Amiga */
+-# else
+-		" %s %s",	/* But is needed for 'shellpipe' and RISC OS */
+-# endif
+ #endif
+ 		(char *)opt, (char *)fname);
+ }
+@@ -1843,11 +1838,7 @@
+ #ifdef VMS
+ 				    (char_u *)"-tmp",
+ #else
+-# ifdef RISCOS
+-				    (char_u *)"/tmp",
+-# else
+ 				    (char_u *)".tmp",
+-# endif
+ #endif
+ 				    FALSE);
+ 	    if (tempname == NULL)		/* out of memory */
+@@ -2124,7 +2115,7 @@
+     buf_T	*buf;
+ 
+ #ifdef FEAT_CMDHIST
+-    prepare_viminfo_history(forceit ? 9999 : 0);
++    prepare_viminfo_history(forceit ? 9999 : 0, writing);
+ #endif
+     eof = viminfo_readline(virp);
+     while (!eof && virp->vir_line[0] != '>')
+@@ -2172,7 +2163,7 @@
+ 	    case '=':
+ 	    case '@':
+ #ifdef FEAT_CMDHIST
+-		eof = read_viminfo_history(virp);
++		eof = read_viminfo_history(virp, writing);
+ #else
+ 		eof = viminfo_readline(virp);
+ #endif
+@@ -2193,7 +2184,8 @@
+ 
+ #ifdef FEAT_CMDHIST
+     /* Finish reading history items. */
+-    finish_viminfo_history();
++    if (!writing)
++	finish_viminfo_history();
+ #endif
+ 
+     /* Change file names to buffer numbers for fmarks. */
+@@ -2424,6 +2416,59 @@
+     info_message = FALSE;
+ }
+ 
++    int
++rename_buffer(new_fname)
++    char_u	*new_fname;
++{
++    char_u	*fname, *sfname, *xfname;
++    buf_T	*buf;
++
++#ifdef FEAT_AUTOCMD
++    buf = curbuf;
++    apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
++    /* buffer changed, don't change name now */
++    if (buf != curbuf)
++	return FAIL;
++# ifdef FEAT_EVAL
++    if (aborting())	    /* autocmds may abort script processing */
++	return FAIL;
++# endif
++#endif
++    /*
++     * The name of the current buffer will be changed.
++     * A new (unlisted) buffer entry needs to be made to hold the old file
++     * name, which will become the alternate file name.
++     * But don't set the alternate file name if the buffer didn't have a
++     * name.
++     */
++    fname = curbuf->b_ffname;
++    sfname = curbuf->b_sfname;
++    xfname = curbuf->b_fname;
++    curbuf->b_ffname = NULL;
++    curbuf->b_sfname = NULL;
++    if (setfname(curbuf, new_fname, NULL, TRUE) == FAIL)
++    {
++	curbuf->b_ffname = fname;
++	curbuf->b_sfname = sfname;
++	return FAIL;
++    }
++    curbuf->b_flags |= BF_NOTEDITED;
++    if (xfname != NULL && *xfname != NUL)
++    {
++	buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0);
++	if (buf != NULL && !cmdmod.keepalt)
++	    curwin->w_alt_fnum = buf->b_fnum;
++    }
++    vim_free(fname);
++    vim_free(sfname);
++#ifdef FEAT_AUTOCMD
++    apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
++#endif
++    /* Change directories when the 'acd' option is set. */
++    DO_AUTOCHDIR
++    return OK;
++}
++
+ /*
+  * ":file[!] [fname]".
+  */
+@@ -2431,9 +2476,6 @@
+ ex_file(eap)
+     exarg_T	*eap;
+ {
+-    char_u	*fname, *sfname, *xfname;
+-    buf_T	*buf;
+-
+     /* ":0file" removes the file name.  Check for illegal uses ":3file",
+      * "0file name", etc. */
+     if (eap->addr_count > 0
+@@ -2447,49 +2489,8 @@
+ 
+     if (*eap->arg != NUL || eap->addr_count == 1)
+     {
+-#ifdef FEAT_AUTOCMD
+-	buf = curbuf;
+-	apply_autocmds(EVENT_BUFFILEPRE, NULL, NULL, FALSE, curbuf);
+-	/* buffer changed, don't change name now */
+-	if (buf != curbuf)
++	if (rename_buffer(eap->arg) == FAIL)
+ 	    return;
+-# ifdef FEAT_EVAL
+-	if (aborting())	    /* autocmds may abort script processing */
+-	    return;
+-# endif
+-#endif
+-	/*
+-	 * The name of the current buffer will be changed.
+-	 * A new (unlisted) buffer entry needs to be made to hold the old file
+-	 * name, which will become the alternate file name.
+-	 * But don't set the alternate file name if the buffer didn't have a
+-	 * name.
+-	 */
+-	fname = curbuf->b_ffname;
+-	sfname = curbuf->b_sfname;
+-	xfname = curbuf->b_fname;
+-	curbuf->b_ffname = NULL;
+-	curbuf->b_sfname = NULL;
+-	if (setfname(curbuf, eap->arg, NULL, TRUE) == FAIL)
+-	{
+-	    curbuf->b_ffname = fname;
+-	    curbuf->b_sfname = sfname;
+-	    return;
+-	}
+-	curbuf->b_flags |= BF_NOTEDITED;
+-	if (xfname != NULL && *xfname != NUL)
+-	{
+-	    buf = buflist_new(fname, xfname, curwin->w_cursor.lnum, 0);
+-	    if (buf != NULL && !cmdmod.keepalt)
+-		curwin->w_alt_fnum = buf->b_fnum;
+-	}
+-	vim_free(fname);
+-	vim_free(sfname);
+-#ifdef FEAT_AUTOCMD
+-	apply_autocmds(EVENT_BUFFILEPOST, NULL, NULL, FALSE, curbuf);
+-#endif
+-	/* Change directories when the 'acd' option is set. */
+-	DO_AUTOCHDIR
+     }
+     /* print full file name if :cd used */
+     fileinfo(FALSE, FALSE, eap->forceit);
+@@ -2700,6 +2701,10 @@
+ 									TRUE);
+ 		do_modelines(0);
+ 	    }
++
++	    /* Autocommands may have changed buffer names, esp. when
++	     * 'autochdir' is set. */
++	    fname = curbuf->b_sfname;
+ #endif
+ 	}
+ 
+@@ -2735,7 +2740,7 @@
+  * May set eap->forceit if a dialog says it's OK to overwrite.
+  * Return OK if it's OK, FAIL if it is not.
+  */
+-    static int
++    int
+ check_overwrite(eap, buf, fname, ffname, other)
+     exarg_T	*eap;
+     buf_T	*buf;
+@@ -2772,7 +2777,7 @@
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ 	    if (p_confirm || cmdmod.confirm)
+ 	    {
+-		char_u	buff[IOSIZE];
++		char_u	buff[DIALOG_MSG_SIZE];
+ 
+ 		dialog_msg(buff, _("Overwrite existing file \"%s\"?"), fname);
+ 		if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 2) != VIM_YES)
+@@ -2790,7 +2795,7 @@
+ 	/* For ":w! filename" check that no swap file exists for "filename". */
+ 	if (other && !emsg_silent)
+ 	{
+-	    char_u	dir[MAXPATHL];
++	    char_u	*dir;
+ 	    char_u	*p;
+ 	    int		r;
+ 	    char_u	*swapname;
+@@ -2801,20 +2806,29 @@
+ 	     * Use 'shortname' of the current buffer, since there is no buffer
+ 	     * for the written file. */
+ 	    if (*p_dir == NUL)
++	    {
++		dir = alloc(5);
++		if (dir == NULL)
++		    return FAIL;
+ 		STRCPY(dir, ".");
++	    }
+ 	    else
+ 	    {
++		dir = alloc(MAXPATHL);
++		if (dir == NULL)
++		    return FAIL;
+ 		p = p_dir;
+ 		copy_option_part(&p, dir, MAXPATHL, ",");
+ 	    }
+ 	    swapname = makeswapname(fname, ffname, curbuf, dir);
++	    vim_free(dir);
+ 	    r = vim_fexists(swapname);
+ 	    if (r)
+ 	    {
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ 		if (p_confirm || cmdmod.confirm)
+ 		{
+-		    char_u	buff[IOSIZE];
++		    char_u	buff[DIALOG_MSG_SIZE];
+ 
+ 		    dialog_msg(buff,
+ 			    _("Swap file \"%s\" exists, overwrite anyway?"),
+@@ -2964,7 +2978,7 @@
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ 	if ((p_confirm || cmdmod.confirm) && buf->b_fname != NULL)
+ 	{
+-	    char_u	buff[IOSIZE];
++	    char_u	buff[DIALOG_MSG_SIZE];
+ 
+ 	    if (buf->b_p_ro)
+ 		dialog_msg(buff, _("'readonly' option is set for \"%s\".\nDo you wish to write anyway?"),
+@@ -3391,9 +3405,16 @@
+ 		/* close the link to the current buffer */
+ 		u_sync(FALSE);
+ 		close_buffer(oldwin, curbuf,
+-				      (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD);
++			       (flags & ECMD_HIDE) ? 0 : DOBUF_UNLOAD, FALSE);
+ 
+ #ifdef FEAT_AUTOCMD
++		/* Autocommands may open a new window and leave oldwin open
++		 * which leads to crashes since the above call sets
++		 * oldwin->w_buffer to NULL. */
++		if (curwin != oldwin && oldwin != aucmd_win
++			     && win_valid(oldwin) && oldwin->w_buffer == NULL)
++		    win_close(oldwin, FALSE);
++
+ # ifdef FEAT_EVAL
+ 		if (aborting())	    /* autocmds may abort script processing */
+ 		{
+@@ -3418,7 +3439,7 @@
+ 		     * and re-attach to buffer, perhaps.
+ 		     */
+ 		    if (curwin->w_s == &(curwin->w_buffer->b_s))
+-			    curwin->w_s = &(buf->b_s);
++			curwin->w_s = &(buf->b_s);
+ #endif
+ 		    curwin->w_buffer = buf;
+ 		    curbuf = buf;
+@@ -3498,9 +3519,7 @@
+ 	curbuf->b_p_bin = FALSE;	/* reset 'bin' before reading file */
+ 	curwin->w_p_nu = 0;		/* no line numbers */
+ 	curwin->w_p_rnu = 0;		/* no relative line numbers */
+-#ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;	/* no scroll binding */
+-#endif
++	RESET_BINDING(curwin);		/* no scroll or cursor binding */
+ #ifdef FEAT_ARABIC
+ 	curwin->w_p_arab = FALSE;	/* no arabic mode */
+ #endif
+@@ -3631,10 +3650,6 @@
+      */
+     check_arg_idx(curwin);
+ 
+-#ifdef FEAT_SYN_HL
+-    reset_synblock(curwin);	    /* remove any ownsyntax */
+-#endif
+-
+ #ifdef FEAT_AUTOCMD
+     if (!auto_buf)
+ #endif
+@@ -4109,8 +4124,8 @@
+     switch (*kind)
+     {
+ 	case '-':
+-	    start = lnum - bigness * (linenr_T)(x - kind);
+-	    end = start + bigness;
++	    start = lnum - bigness * (linenr_T)(x - kind) + 1;
++	    end = start + bigness - 1;
+ 	    curs = end;
+ 	    break;
+ 
+@@ -4268,6 +4283,9 @@
+     int		endcolumn = FALSE;	/* cursor in last column when done */
+     pos_T	old_cursor = curwin->w_cursor;
+     int		start_nsubs;
++#ifdef FEAT_EVAL
++    int         save_ma = 0;
++#endif
+ 
+     cmd = eap->arg;
+     if (!global_busy)
+@@ -4637,7 +4655,15 @@
+ 			 * for a match in this line again. */
+ 			skip_match = TRUE;
+ 		    else
+-			++matchcol; /* search for a match at next column */
++		    {
++			 /* search for a match at next column */
++#ifdef FEAT_MBYTE
++			if (has_mbyte)
++			    matchcol += mb_ptr2len(sub_firstline + matchcol);
++			else
++#endif
++			    ++matchcol;
++		    }
+ 		    goto skip;
+ 		}
+ 
+@@ -4664,7 +4690,12 @@
+ 		    }
+ 		    sub_nsubs++;
+ 		    did_sub = TRUE;
+-		    goto skip;
++#ifdef FEAT_EVAL
++		    /* Skip the substitution, unless an expression is used,
++		     * then it is evaluated in the sandbox. */
++		    if (!(sub[0] == '\\' && sub[1] == '='))
++#endif
++			goto skip;
+ 		}
+ 
+ 		if (do_ask)
+@@ -4715,6 +4746,8 @@
+ 			}
+ 			else
+ 			{
++			    char_u *orig_line = NULL;
++			    int    len_change = 0;
+ #ifdef FEAT_FOLDING
+ 			    int save_p_fen = curwin->w_p_fen;
+ 
+@@ -4725,9 +4758,43 @@
+ 			    temp = RedrawingDisabled;
+ 			    RedrawingDisabled = 0;
+ 
++			    if (new_start != NULL)
++			    {
++				/* There already was a substitution, we would
++				 * like to show this to the user.  We cannot
++				 * really update the line, it would change
++				 * what matches.  Temporarily replace the line
++				 * and change it back afterwards. */
++				orig_line = vim_strsave(ml_get(lnum));
++				if (orig_line != NULL)
++				{
++				    char_u *new_line = concat_str(new_start,
++						     sub_firstline + copycol);
++
++				    if (new_line == NULL)
++				    {
++					vim_free(orig_line);
++					orig_line = NULL;
++				    }
++				    else
++				    {
++					/* Position the cursor relative to the
++					 * end of the line, the previous
++					 * substitute may have inserted or
++					 * deleted characters before the
++					 * cursor. */
++					len_change = (int)STRLEN(new_line)
++						     - (int)STRLEN(orig_line);
++					curwin->w_cursor.col += len_change;
++					ml_replace(lnum, new_line, FALSE);
++				    }
++				}
++			    }
++
+ 			    search_match_lines = regmatch.endpos[0].lnum
+ 						  - regmatch.startpos[0].lnum;
+-			    search_match_endcol = regmatch.endpos[0].col;
++			    search_match_endcol = regmatch.endpos[0].col
++								 + len_change;
+ 			    highlight_match = TRUE;
+ 
+ 			    update_topline();
+@@ -4769,6 +4836,10 @@
+ 			    msg_didout = FALSE;	/* don't scroll up */
+ 			    msg_col = 0;
+ 			    gotocmdline(TRUE);
++
++			    /* restore the line */
++			    if (orig_line != NULL)
++				ml_replace(lnum, orig_line, FALSE);
+ 			}
+ 
+ 			need_wait_return = FALSE; /* no hit-return prompt */
+@@ -4826,7 +4897,7 @@
+ 			goto skip;
+ 		    }
+ 		    if (got_quit)
+-			break;
++			goto skip;
+ 		}
+ 
+ 		/* Move the cursor to the start of the match, so that we can
+@@ -4836,10 +4907,27 @@
+ 		/*
+ 		 * 3. substitute the string.
+ 		 */
++#ifdef FEAT_EVAL
++		if (do_count)
++		{
++		    /* prevent accidentally changing the buffer by a function */
++		    save_ma = curbuf->b_p_ma;
++		    curbuf->b_p_ma = FALSE;
++		    sandbox++;
++		}
++#endif
+ 		/* get length of substitution part */
+ 		sublen = vim_regsub_multi(&regmatch,
+ 				    sub_firstlnum - regmatch.startpos[0].lnum,
+ 				    sub, sub_firstline, FALSE, p_magic, TRUE);
++#ifdef FEAT_EVAL
++		if (do_count)
++		{
++		    curbuf->b_p_ma = save_ma;
++		    sandbox--;
++		    goto skip;
++		}
++#endif
+ 
+ 		/* When the match included the "$" of the last line it may
+ 		 * go beyond the last line of the buffer. */
+@@ -5016,14 +5104,10 @@
+ 		 * The check for nmatch_tl is needed for when multi-line
+ 		 * matching must replace the lines before trying to do another
+ 		 * match, otherwise "\@<=" won't work.
+-		 * When asking the user we like to show the already replaced
+-		 * text, but don't do it when "\<@=" or "\<@!" is used, it
+-		 * changes what matches.
+ 		 * When the match starts below where we start searching also
+ 		 * need to replace the line first (using \zs after \n).
+ 		 */
+ 		if (lastone
+-			|| (do_ask && !re_lookbehind(regmatch.regprog))
+ 			|| nmatch_tl > 0
+ 			|| (nmatch = vim_regexec_multi(&regmatch, curwin,
+ 							curbuf, sub_firstlnum,
+@@ -5146,10 +5230,13 @@
+ 
+ 	if (!global_busy)
+ 	{
+-	    if (endcolumn)
+-		coladvance((colnr_T)MAXCOL);
+-	    else
+-		beginline(BL_WHITE | BL_FIX);
++	    if (!do_ask)  /* when interactive leave cursor on the match */
++	    {
++		if (endcolumn)
++		    coladvance((colnr_T)MAXCOL);
++		else
++		    beginline(BL_WHITE | BL_FIX);
++	    }
+ 	    if (!do_sub_msg(do_count) && do_ask)
+ 		MSG("");
+ 	}
+@@ -5168,6 +5255,12 @@
+ 	    EMSG2(_(e_patnotf2), get_search_pat());
+     }
+ 
++#ifdef FEAT_FOLDING
++    if (do_ask && hasAnyFolding(curwin))
++	/* Cursor position may require updating */
++	changed_window_setting();
++#endif
++
+     vim_free(regmatch.regprog);
+ }
+ 
+@@ -5232,7 +5325,7 @@
+  * is assumed to be 'p' if missing.
+  *
+  * This is implemented in two passes: first we scan the file for the pattern and
+- * set a mark for each line that (not) matches. secondly we execute the command
++ * set a mark for each line that (not) matches. Secondly we execute the command
+  * for each line that has a mark. This is required because after deleting
+  * lines we do not know where to search for the next match.
+  */
+@@ -5337,7 +5430,7 @@
+ 	if (type == 'v')
+ 	    smsg((char_u *)_("Pattern found in every line: %s"), pat);
+ 	else
+-	    smsg((char_u *)_(e_patnotf2), pat);
++	    smsg((char_u *)_("Pattern not found: %s"), pat);
+     }
+     else
+ 	global_exe(cmd);
+@@ -5353,8 +5446,9 @@
+ global_exe(cmd)
+     char_u	*cmd;
+ {
+-    linenr_T	old_lcount;	/* b_ml.ml_line_count before the command */
+-    linenr_T	lnum;		/* line number according to old situation */
++    linenr_T old_lcount;	/* b_ml.ml_line_count before the command */
++    buf_T    *old_buf = curbuf;	/* remember what buffer we started in */
++    linenr_T lnum;		/* line number according to old situation */
+ 
+     /*
+      * Set current position only once for a global command.
+@@ -5398,8 +5492,10 @@
+ 	msg_didout = FALSE;
+ 
+     /* If substitutes done, report number of substitutes, otherwise report
+-     * number of extra or deleted lines. */
+-    if (!do_sub_msg(FALSE))
++     * number of extra or deleted lines.
++     * Don't report extra or deleted lines in the edge case where the buffer
++     * we are in after execution is different from the buffer we started in. */
++    if (!do_sub_msg(FALSE) && curbuf == old_buf)
+ 	msgmore(curbuf->b_ml.ml_line_count - old_lcount);
+ }
+ 
+@@ -5409,7 +5505,7 @@
+     vir_T	*virp;
+     int		force;
+ {
+-    if (old_sub != NULL && force)
++    if (force)
+ 	vim_free(old_sub);
+     if (force || old_sub == NULL)
+ 	old_sub = viminfo_readstring(virp, 1, TRUE);
+@@ -5471,9 +5567,8 @@
+ 		return FALSE;
+ 	    curwin->w_p_pvw = TRUE;
+ 	    curwin->w_p_wfh = TRUE;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;	    /* don't take over 'scrollbind' */
+-# endif
++	    RESET_BINDING(curwin);	    /* don't take over 'scrollbind'
++					       and 'cursorbind' */
+ # ifdef FEAT_DIFF
+ 	    curwin->w_p_diff = FALSE;	    /* no 'diff' */
+ # endif
+@@ -5514,6 +5609,9 @@
+     int		len;
+     char_u	*lang;
+ #endif
++#ifdef FEAT_FOLDING
++    int		old_KeyTyped = KeyTyped;
++#endif
+ 
+     if (eap != NULL)
+     {
+@@ -5533,7 +5631,7 @@
+ 	}
+ 	arg = eap->arg;
+ 
+-	if (eap->forceit && *arg == NUL)
++	if (eap->forceit && *arg == NUL && !curbuf->b_help)
+ 	{
+ 	    EMSG(_("E478: Don't panic!"));
+ 	    return;
+@@ -5677,6 +5775,12 @@
+     if (!p_im)
+ 	restart_edit = 0;	    /* don't want insert mode in help file */
+ 
++#ifdef FEAT_FOLDING
++    /* Restore KeyTyped, setting 'filetype=help' may reset it.
++     * It is needed for do_tag top open folds under the cursor. */
++    KeyTyped = old_KeyTyped;
++#endif
++
+     if (tag != NULL)
+ 	do_tag(tag, DT_HELP, 1, FALSE, TRUE);
+ 
+@@ -5806,14 +5910,14 @@
+     int		i;
+     static char *(mtable[]) = {"*", "g*", "[*", "]*", ":*",
+ 			       "/*", "/\\*", "\"*", "**",
+-			       "/\\(\\)",
++			       "cpo-*", "/\\(\\)",
+ 			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
+ 			       "/\\?", "/\\z(\\)", "\\=", ":s\\=",
+ 			       "[count]", "[quotex]", "[range]",
+ 			       "[pattern]", "\\|", "\\%$"};
+     static char *(rtable[]) = {"star", "gstar", "[star", "]star", ":star",
+ 			       "/star", "/\\\\star", "quotestar", "starstar",
+-			       "/\\\\(\\\\)",
++			       "cpo-star", "/\\\\(\\\\)",
+ 			       "?", ":?", "?<CR>", "g?", "g?g?", "g??", "z?",
+ 			       "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=",
+ 			       "\\[count]", "\\[quotex]", "\\[range]",
+@@ -5853,9 +5957,14 @@
+ 	}
+ 	else
+ 	{
+-	  /* replace "[:...:]" with "\[:...:]"; "[+...]" with "\[++...]" */
+-	    if (arg[0] == '[' && (arg[1] == ':'
+-					 || (arg[1] == '+' && arg[2] == '+')))
++	  /* Replace:
++	   * "[:...:]" with "\[:...:]"
++	   * "[++...]" with "\[++...]"
++	   * "\{" with "\\{"
++	   */
++	    if ((arg[0] == '[' && (arg[1] == ':'
++			 || (arg[1] == '+' && arg[2] == '+')))
++		    || (arg[0] == '\\' && arg[1] == '{'))
+ 	      *d++ = '\\';
+ 
+ 	  for (s = arg; *s; ++s)
+@@ -5946,6 +6055,29 @@
+ 		break;
+ 	  }
+ 	  *d = NUL;
++
++	  if (*IObuff == '`')
++	  {
++	      if (d > IObuff + 2 && d[-1] == '`')
++	      {
++		  /* remove the backticks from `command` */
++		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++		  d[-2] = NUL;
++	      }
++	      else if (d > IObuff + 3 && d[-2] == '`' && d[-1] == ',')
++	      {
++		  /* remove the backticks and comma from `command`, */
++		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++		  d[-3] = NUL;
++	      }
++	      else if (d > IObuff + 4 && d[-3] == '`'
++					     && d[-2] == '\\' && d[-1] == '.')
++	      {
++		  /* remove the backticks and dot from `command`\. */
++		  mch_memmove(IObuff, IObuff + 1, STRLEN(IObuff));
++		  d[-4] = NUL;
++	      }
++	  }
+ 	}
+     }
+ 
+@@ -5979,6 +6111,7 @@
+     char_u	*line;
+     int		in_example = FALSE;
+     int		len;
++    char_u	*fname;
+     char_u	*p;
+     char_u	*rt;
+     int		mustfree;
+@@ -6025,124 +6158,187 @@
+     }
+ 
+     /*
+-     * In the "help.txt" file, add the locally added help files.
+-     * This uses the very first line in the help file.
++     * In the "help.txt" and "help.abx" file, add the locally added help
++     * files.  This uses the very first line in the help file.
+      */
+-    if (fnamecmp(gettail(curbuf->b_fname), "help.txt") == 0)
++    fname = gettail(curbuf->b_fname);
++    if (fnamecmp(fname, "help.txt") == 0
++#ifdef FEAT_MULTI_LANG
++	|| (fnamencmp(fname, "help.", 5) == 0
++	    && ASCII_ISALPHA(fname[5])
++	    && ASCII_ISALPHA(fname[6])
++	    && TOLOWER_ASC(fname[7]) == 'x'
++	    && fname[8] == NUL)
++#endif
++	)
+     {
+ 	for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
+ 	{
+ 	    line = ml_get_buf(curbuf, lnum, FALSE);
+-	    if (strstr((char *)line, "*local-additions*") != NULL)
+-	    {
+-		/* Go through all directories in 'runtimepath', skipping
+-		 * $VIMRUNTIME. */
+-		p = p_rtp;
+-		while (*p != NUL)
+-		{
+-		    copy_option_part(&p, NameBuff, MAXPATHL, ",");
+-		    mustfree = FALSE;
+-		    rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
+-		    if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
+-		    {
+-			int	fcount;
+-			char_u	**fnames;
+-			FILE	*fd;
+-			char_u	*s;
+-			int	fi;
++	    if (strstr((char *)line, "*local-additions*") == NULL)
++		continue;
++
++	    /* Go through all directories in 'runtimepath', skipping
++	     * $VIMRUNTIME. */
++	    p = p_rtp;
++	    while (*p != NUL)
++	    {
++		copy_option_part(&p, NameBuff, MAXPATHL, ",");
++		mustfree = FALSE;
++		rt = vim_getenv((char_u *)"VIMRUNTIME", &mustfree);
++		if (fullpathcmp(rt, NameBuff, FALSE) != FPC_SAME)
++		{
++		    int		fcount;
++		    char_u	**fnames;
++		    FILE	*fd;
++		    char_u	*s;
++		    int		fi;
+ #ifdef FEAT_MBYTE
+-			vimconv_T	vc;
+-			char_u		*cp;
++		    vimconv_T	vc;
++		    char_u	*cp;
+ #endif
+ 
+-			/* Find all "doc/ *.txt" files in this directory. */
+-			add_pathsep(NameBuff);
+-			STRCAT(NameBuff, "doc/*.txt");
+-			if (gen_expand_wildcards(1, &NameBuff, &fcount,
+-					     &fnames, EW_FILE|EW_SILENT) == OK
+-				&& fcount > 0)
++		    /* Find all "doc/ *.txt" files in this directory. */
++		    add_pathsep(NameBuff);
++#ifdef FEAT_MULTI_LANG
++		    STRCAT(NameBuff, "doc/*.??[tx]");
++#else
++		    STRCAT(NameBuff, "doc/*.txt");
++#endif
++		    if (gen_expand_wildcards(1, &NameBuff, &fcount,
++					 &fnames, EW_FILE|EW_SILENT) == OK
++			    && fcount > 0)
++		    {
++#ifdef FEAT_MULTI_LANG
++			int	i1;
++			int	i2;
++			char_u	*f1;
++			char_u	*f2;
++			char_u	*t1;
++			char_u	*e1;
++			char_u	*e2;
++
++			/* If foo.abx is found use it instead of foo.txt in
++			 * the same directory. */
++			for (i1 = 0; i1 < fcount; ++i1)
+ 			{
+-			    for (fi = 0; fi < fcount; ++fi)
++			    for (i2 = 0; i2 < fcount; ++i2)
+ 			    {
+-				fd = mch_fopen((char *)fnames[fi], "r");
+-				if (fd != NULL)
++				if (i1 == i2)
++				    continue;
++				if (fnames[i1] == NULL || fnames[i2] == NULL)
++				    continue;
++				f1 = fnames[i1];
++				f2 = fnames[i2];
++				t1 = gettail(f1);
++				if (fnamencmp(f1, f2, t1 - f1) != 0)
++				    continue;
++				e1 = vim_strrchr(t1, '.');
++				e2 = vim_strrchr(gettail(f2), '.');
++				if (e1 == NUL || e2 == NUL)
++				    continue;
++				if (fnamecmp(e1, ".txt") != 0
++				    && fnamecmp(e1, fname + 4) != 0)
+ 				{
+-				    vim_fgets(IObuff, IOSIZE, fd);
+-				    if (IObuff[0] == '*'
+-					    && (s = vim_strchr(IObuff + 1, '*'))
+-								      != NULL)
+-				    {
+-#ifdef FEAT_MBYTE
+-					int	this_utf = MAYBE;
++				    /* Not .txt and not .abx, remove it. */
++				    vim_free(fnames[i1]);
++				    fnames[i1] = NULL;
++				    continue;
++				}
++				if (fnamencmp(f1, f2, e1 - f1) != 0)
++				    continue;
++				if (fnamecmp(e1, ".txt") == 0
++				    && fnamecmp(e2, fname + 4) == 0)
++				{
++				    /* use .abx instead of .txt */
++				    vim_free(fnames[i1]);
++				    fnames[i1] = NULL;
++				}
++			    }
++			}
+ #endif
+-					/* Change tag definition to a
+-					 * reference and remove <CR>/<NL>. */
+-					IObuff[0] = '|';
+-					*s = '|';
+-					while (*s != NUL)
+-					{
+-					    if (*s == '\r' || *s == '\n')
+-						*s = NUL;
++			for (fi = 0; fi < fcount; ++fi)
++			{
++			    if (fnames[fi] == NULL)
++				continue;
++			    fd = mch_fopen((char *)fnames[fi], "r");
++			    if (fd != NULL)
++			    {
++				vim_fgets(IObuff, IOSIZE, fd);
++				if (IObuff[0] == '*'
++					&& (s = vim_strchr(IObuff + 1, '*'))
++								  != NULL)
++				{
+ #ifdef FEAT_MBYTE
+-					    /* The text is utf-8 when a byte
+-					     * above 127 is found and no
+-					     * illegal byte sequence is found.
+-					     */
+-					    if (*s >= 0x80 && this_utf != FALSE)
+-					    {
+-						int	l;
+-
+-						this_utf = TRUE;
+-						l = utf_ptr2len(s);
+-						if (l == 1)
+-						    this_utf = FALSE;
+-						s += l - 1;
+-					    }
++				    int	this_utf = MAYBE;
+ #endif
+-					    ++s;
+-					}
++				    /* Change tag definition to a
++				     * reference and remove <CR>/<NL>. */
++				    IObuff[0] = '|';
++				    *s = '|';
++				    while (*s != NUL)
++				    {
++					if (*s == '\r' || *s == '\n')
++					    *s = NUL;
+ #ifdef FEAT_MBYTE
+-					/* The help file is latin1 or utf-8;
+-					 * conversion to the current
+-					 * 'encoding' may be required. */
+-					vc.vc_type = CONV_NONE;
+-					convert_setup(&vc, (char_u *)(
+-						    this_utf == TRUE ? "utf-8"
+-							  : "latin1"), p_enc);
+-					if (vc.vc_type == CONV_NONE)
+-					    /* No conversion needed. */
+-					    cp = IObuff;
+-					else
++					/* The text is utf-8 when a byte
++					 * above 127 is found and no
++					 * illegal byte sequence is found.
++					 */
++					if (*s >= 0x80 && this_utf != FALSE)
+ 					{
+-					    /* Do the conversion.  If it fails
+-					     * use the unconverted text. */
+-					    cp = string_convert(&vc, IObuff,
+-									NULL);
+-					    if (cp == NULL)
+-						cp = IObuff;
++					    int	l;
++
++					    this_utf = TRUE;
++					    l = utf_ptr2len(s);
++					    if (l == 1)
++						this_utf = FALSE;
++					    s += l - 1;
+ 					}
+-					convert_setup(&vc, NULL, NULL);
++#endif
++					++s;
++				    }
++#ifdef FEAT_MBYTE
++				    /* The help file is latin1 or utf-8;
++				     * conversion to the current
++				     * 'encoding' may be required. */
++				    vc.vc_type = CONV_NONE;
++				    convert_setup(&vc, (char_u *)(
++						this_utf == TRUE ? "utf-8"
++						      : "latin1"), p_enc);
++				    if (vc.vc_type == CONV_NONE)
++					/* No conversion needed. */
++					cp = IObuff;
++				    else
++				    {
++					/* Do the conversion.  If it fails
++					 * use the unconverted text. */
++					cp = string_convert(&vc, IObuff,
++								    NULL);
++					if (cp == NULL)
++					    cp = IObuff;
++				    }
++				    convert_setup(&vc, NULL, NULL);
+ 
+-					ml_append(lnum, cp, (colnr_T)0, FALSE);
+-					if (cp != IObuff)
+-					    vim_free(cp);
++				    ml_append(lnum, cp, (colnr_T)0, FALSE);
++				    if (cp != IObuff)
++					vim_free(cp);
+ #else
+-					ml_append(lnum, IObuff, (colnr_T)0,
+-								       FALSE);
++				    ml_append(lnum, IObuff, (colnr_T)0,
++								   FALSE);
+ #endif
+-					++lnum;
+-				    }
+-				    fclose(fd);
++				    ++lnum;
+ 				}
++				fclose(fd);
+ 			    }
+-			    FreeWild(fcount, fnames);
+ 			}
++			FreeWild(fcount, fnames);
+ 		    }
+-		    if (mustfree)
+-			vim_free(rt);
+ 		}
+-		break;
++		if (mustfree)
++		    vim_free(rt);
+ 	    }
++	    break;
+ 	}
+     }
+ }
+@@ -6209,10 +6405,10 @@
+     }
+ 
+ #ifdef FEAT_MULTI_LANG
+-    /* Get a list of all files in the directory. */
++    /* Get a list of all files in the help directory and in subdirectories. */
+     STRCPY(NameBuff, dirname);
+     add_pathsep(NameBuff);
+-    STRCAT(NameBuff, "*");
++    STRCAT(NameBuff, "**");
+     if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
+ 						    EW_FILE|EW_SILENT) == FAIL
+ 	    || filecount == 0)
+@@ -6301,8 +6497,8 @@
+ helptags_one(dir, ext, tagfname, add_help_tags)
+     char_u	*dir;		/* doc directory */
+     char_u	*ext;		/* suffix, ".txt", ".itx", ".frx", etc. */
+-    char_u	*tagfname;      /* "tags" for English, "tags-fr" for French. */
+-    int		add_help_tags;  /* add "help-tags" tag */
++    char_u	*tagfname;	/* "tags" for English, "tags-fr" for French. */
++    int		add_help_tags;	/* add "help-tags" tag */
+ {
+     FILE	*fd_tags;
+     FILE	*fd;
+@@ -6314,6 +6510,7 @@
+     char_u	*s;
+     int		i;
+     char_u	*fname;
++    int		dirlen;
+ # ifdef FEAT_MBYTE
+     int		utf8 = MAYBE;
+     int		this_utf8;
+@@ -6324,9 +6521,9 @@
+     /*
+      * Find all *.txt files.
+      */
++    dirlen = (int)STRLEN(dir);
+     STRCPY(NameBuff, dir);
+-    add_pathsep(NameBuff);
+-    STRCAT(NameBuff, "*");
++    STRCAT(NameBuff, "/**/*");
+     STRCAT(NameBuff, ext);
+     if (gen_expand_wildcards(1, &NameBuff, &filecount, &files,
+ 						    EW_FILE|EW_SILENT) == FAIL
+@@ -6387,7 +6584,7 @@
+ 	    EMSG2(_("E153: Unable to open %s for reading"), files[fi]);
+ 	    continue;
+ 	}
+-	fname = gettail(files[fi]);
++	fname = files[fi] + dirlen + 1;
+ 
+ # ifdef FEAT_MBYTE
+ 	firstline = TRUE;
+@@ -6430,7 +6627,10 @@
+ 	    p1 = vim_strchr(IObuff, '*');	/* find first '*' */
+ 	    while (p1 != NULL)
+ 	    {
+-		p2 = vim_strchr(p1 + 1, '*');	/* find second '*' */
++		/* Use vim_strbyte() instead of vim_strchr() so that when
++		 * 'encoding' is dbcs it still works, don't find '*' in the
++		 * second byte. */
++		p2 = vim_strbyte(p1 + 1, '*');	/* find second '*' */
+ 		if (p2 != NULL && p2 > p1 + 1)	/* skip "*" and "**" */
+ 		{
+ 		    for (s = p1 + 1; s < p2; ++s)
+@@ -6559,8 +6759,7 @@
+ struct sign
+ {
+     sign_T	*sn_next;	/* next sign in list */
+-    int		sn_typenr;	/* type number of sign (negative if not equal
+-				   to name) */
++    int		sn_typenr;	/* type number of sign */
+     char_u	*sn_name;	/* name of sign */
+     char_u	*sn_icon;	/* name of pixmap */
+ #ifdef FEAT_SIGN_ICONS
+@@ -6572,7 +6771,7 @@
+ };
+ 
+ static sign_T	*first_sign = NULL;
+-static int	last_sign_typenr = MAX_TYPENR;	/* is decremented */
++static int	next_sign_typenr = 1;
+ 
+ static int sign_cmd_idx __ARGS((char_u *begin_cmd, char_u *end_cmd));
+ static void sign_list_defined __ARGS((sign_T *sp));
+@@ -6647,16 +6846,21 @@
+ 	if (idx == SIGNCMD_LIST && *arg == NUL)
+ 	{
+ 	    /* ":sign list": list all defined signs */
+-	    for (sp = first_sign; sp != NULL; sp = sp->sn_next)
++	    for (sp = first_sign; sp != NULL && !got_int; sp = sp->sn_next)
+ 		sign_list_defined(sp);
+ 	}
+ 	else if (*arg == NUL)
+ 	    EMSG(_("E156: Missing sign name"));
+ 	else
+ 	{
++	    /* Isolate the sign name.  If it's a number skip leading zeroes,
++	     * so that "099" and "99" are the same sign.  But keep "0". */
+ 	    p = skiptowhite(arg);
+ 	    if (*p != NUL)
+ 		*p++ = NUL;
++	    while (arg[0] == '0' && arg[1] != NUL)
++		++arg;
++
+ 	    sp_prev = NULL;
+ 	    for (sp = first_sign; sp != NULL; sp = sp->sn_next)
+ 	    {
+@@ -6669,46 +6873,52 @@
+ 		/* ":sign define {name} ...": define a sign */
+ 		if (sp == NULL)
+ 		{
++		    sign_T	*lp;
++		    int		start = next_sign_typenr;
++
+ 		    /* Allocate a new sign. */
+ 		    sp = (sign_T *)alloc_clear((unsigned)sizeof(sign_T));
+ 		    if (sp == NULL)
+ 			return;
+-		    if (sp_prev == NULL)
+-			first_sign = sp;
+-		    else
+-			sp_prev->sn_next = sp;
+-		    sp->sn_name = vim_strnsave(arg, (int)(p - arg));
+ 
+-		    /* If the name is a number use that for the typenr,
+-		     * otherwise use a negative number. */
+-		    if (VIM_ISDIGIT(*arg))
+-			sp->sn_typenr = atoi((char *)arg);
+-		    else
++		    /* Check that next_sign_typenr is not already being used.
++		     * This only happens after wrapping around.  Hopefully
++		     * another one got deleted and we can use its number. */
++		    for (lp = first_sign; lp != NULL; )
+ 		    {
+-			sign_T	*lp;
+-			int	start = last_sign_typenr;
+-
+-			for (lp = first_sign; lp != NULL; lp = lp->sn_next)
++			if (lp->sn_typenr == next_sign_typenr)
+ 			{
+-			    if (lp->sn_typenr == last_sign_typenr)
++			    ++next_sign_typenr;
++			    if (next_sign_typenr == MAX_TYPENR)
++				next_sign_typenr = 1;
++			    if (next_sign_typenr == start)
+ 			    {
+-				--last_sign_typenr;
+-				if (last_sign_typenr == 0)
+-				    last_sign_typenr = MAX_TYPENR;
+-				if (last_sign_typenr == start)
+-				{
+-				    EMSG(_("E612: Too many signs defined"));
+-				    return;
+-				}
+-				lp = first_sign;
+-				continue;
++				vim_free(sp);
++				EMSG(_("E612: Too many signs defined"));
++				return;
+ 			    }
++			    lp = first_sign;  /* start all over */
++			    continue;
+ 			}
++			lp = lp->sn_next;
++		    }
+ 
+-			sp->sn_typenr = last_sign_typenr--;
+-			if (last_sign_typenr == 0)
+-			    last_sign_typenr = MAX_TYPENR; /* wrap around */
++		    sp->sn_typenr = next_sign_typenr;
++		    if (++next_sign_typenr == MAX_TYPENR)
++			next_sign_typenr = 1; /* wrap around */
++
++		    sp->sn_name = vim_strsave(arg);
++		    if (sp->sn_name == NULL)  /* out of memory */
++		    {
++			vim_free(sp);
++			return;
+ 		    }
++
++		    /* add the new sign to the list of signs */
++		    if (sp_prev == NULL)
++			first_sign = sp;
++		    else
++			sp_prev->sn_next = sp;
+ 		}
+ 
+ 		/* set values for a defined sign. */
+@@ -6879,6 +7089,16 @@
+ 		lnum = atoi((char *)arg);
+ 		arg = skiptowhite(arg);
+ 	    }
++	    else if (STRNCMP(arg, "*", 1) == 0 && idx == SIGNCMD_UNPLACE)
++	    {
++		if (id != -1)
++		{
++		    EMSG(_(e_invarg));
++		    return;
++		}
++		id = -2;
++		arg = skiptowhite(arg + 1);
++	    }
+ 	    else if (STRNCMP(arg, "name=", 5) == 0)
+ 	    {
+ 		arg += 5;
+@@ -6886,6 +7106,8 @@
+ 		arg = skiptowhite(arg);
+ 		if (*arg != NUL)
+ 		    *arg++ = NUL;
++		while (sign_name[0] == '0' && sign_name[1] != NUL)
++		    ++sign_name;
+ 	    }
+ 	    else if (STRNCMP(arg, "file=", 5) == 0)
+ 	    {
+@@ -6913,7 +7135,7 @@
+ 	{
+ 	    EMSG2(_("E158: Invalid buffer name: %s"), arg);
+ 	}
+-	else if (id <= 0)
++	else if (id <= 0 && !(idx == SIGNCMD_UNPLACE && id == -2))
+ 	{
+ 	    if (lnum >= 0 || sign_name != NULL)
+ 		EMSG(_(e_invarg));
+@@ -6954,11 +7176,17 @@
+ 	}
+ 	else if (idx == SIGNCMD_UNPLACE)
+ 	{
+-	    /* ":sign unplace {id} file={fname}" */
+ 	    if (lnum >= 0 || sign_name != NULL)
+ 		EMSG(_(e_invarg));
++	    else if (id == -2)
++	    {
++		/* ":sign unplace * file={fname}" */
++		redraw_buf_later(buf, NOT_VALID);
++		buf_delete_signs(buf);
++	    }
+ 	    else
+ 	    {
++		/* ":sign unplace {id} file={fname}" */
+ 		lnum = buf_delsign(buf, id);
+ 		update_debug_sign(buf, lnum);
+ 	    }
+diff -Naur vim73.orig/src/ex_cmds.h vim73/src/ex_cmds.h
+--- vim73.orig/src/ex_cmds.h	2010-07-21 13:48:02.000000000 +0000
++++ vim73/src/ex_cmds.h	2013-06-07 17:07:30.692254368 +0000
+@@ -102,7 +102,7 @@
+ EX(CMD_aboveleft,	"aboveleft",	ex_wrongmodifier,
+ 			NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_all,		"all",		ex_all,
+-			RANGE|NOTADR|COUNT|TRLBAR),
++			BANG|RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_amenu,		"amenu",	ex_menu,
+ 			RANGE|NOTADR|ZEROR|EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_anoremenu,	"anoremenu",	ex_menu,
+@@ -304,7 +304,7 @@
+ EX(CMD_display,		"display",	ex_display,
+ 			EXTRA|NOTRLCOM|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_diffupdate,	"diffupdate",	ex_diffupdate,
+-			TRLBAR),
++			BANG|TRLBAR),
+ EX(CMD_diffget,		"diffget",	ex_diffgetput,
+ 			RANGE|EXTRA|TRLBAR|MODIFY),
+ EX(CMD_diffoff,		"diffoff",	ex_diffoff,
+@@ -662,7 +662,7 @@
+ EX(CMD_nunmenu,		"nunmenu",	ex_menu,
+ 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
+ EX(CMD_open,		"open",		ex_open,
+-			RANGE|EXTRA),
++			RANGE|BANG|EXTRA),
+ EX(CMD_oldfiles,	"oldfiles",	ex_oldfiles,
+ 			BANG|TRLBAR|SBOXOK|CMDWIN),
+ EX(CMD_omap,		"omap",		ex_map,
+@@ -739,10 +739,14 @@
+ 			TRLBAR|CMDWIN),
+ EX(CMD_python,		"python",	ex_python,
+ 			RANGE|EXTRA|NEEDARG|CMDWIN),
++EX(CMD_pydo,		"pydo",		ex_pydo,
++			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
+ EX(CMD_pyfile,		"pyfile",	ex_pyfile,
+ 			RANGE|FILE1|NEEDARG|CMDWIN),
+ EX(CMD_py3,		"py3",		ex_py3,
+ 			RANGE|EXTRA|NEEDARG|CMDWIN),
++EX(CMD_py3do,		"py3do",	ex_py3do,
++			RANGE|DFLALL|EXTRA|NEEDARG|CMDWIN),
+ EX(CMD_python3,		"python3",	ex_py3,
+ 			RANGE|EXTRA|NEEDARG|CMDWIN),
+ EX(CMD_py3file,		"py3file",	ex_py3file,
+@@ -788,7 +792,7 @@
+ EX(CMD_rubyfile,	"rubyfile",	ex_rubyfile,
+ 			RANGE|FILE1|NEEDARG|CMDWIN),
+ EX(CMD_rundo,		"rundo",	ex_rundo,
+-			NEEDARG|EXTRA|XFILE),
++			NEEDARG|FILE1),
+ EX(CMD_rviminfo,	"rviminfo",	ex_viminfo,
+ 			BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_substitute,	"substitute",	do_sub,
+@@ -798,7 +802,7 @@
+ EX(CMD_sargument,	"sargument",	ex_argument,
+ 			BANG|RANGE|NOTADR|COUNT|EXTRA|EDITCMD|ARGOPT|TRLBAR),
+ EX(CMD_sall,		"sall",		ex_all,
+-			RANGE|NOTADR|COUNT|TRLBAR),
++			BANG|RANGE|NOTADR|COUNT|TRLBAR),
+ EX(CMD_sandbox,		"sandbox",	ex_wrongmodifier,
+ 			NEEDARG|EXTRA|NOTRLCOM),
+ EX(CMD_saveas,		"saveas",	ex_write,
+@@ -832,9 +836,9 @@
+ EX(CMD_setfiletype,	"setfiletype",	ex_setfiletype,
+ 			TRLBAR|EXTRA|NEEDARG|CMDWIN),
+ EX(CMD_setglobal,	"setglobal",	ex_set,
+-			TRLBAR|EXTRA|CMDWIN),
++			TRLBAR|EXTRA|CMDWIN|SBOXOK),
+ EX(CMD_setlocal,	"setlocal",	ex_set,
+-			TRLBAR|EXTRA|CMDWIN),
++			TRLBAR|EXTRA|CMDWIN|SBOXOK),
+ EX(CMD_sfind,		"sfind",	ex_splitview,
+ 			BANG|FILE1|RANGE|NOTADR|EDITCMD|ARGOPT|TRLBAR),
+ EX(CMD_sfirst,		"sfirst",	ex_rewind,
+@@ -921,6 +925,8 @@
+ 			TRLBAR|CMDWIN),
+ EX(CMD_syntax,		"syntax",	ex_syntax,
+ 			EXTRA|NOTRLCOM|CMDWIN),
++EX(CMD_syntime,		"syntime",	ex_syntime,
++			WORD1|TRLBAR|CMDWIN),
+ EX(CMD_syncbind,	"syncbind",	ex_syncbind,
+ 			TRLBAR),
+ EX(CMD_t,		"t",		ex_copymove,
+@@ -944,7 +950,7 @@
+ EX(CMD_tabfirst,	"tabfirst",	ex_tabnext,
+ 			TRLBAR),
+ EX(CMD_tabmove,		"tabmove",	ex_tabmove,
+-			RANGE|NOTADR|ZEROR|COUNT|TRLBAR|ZEROR),
++			RANGE|NOTADR|ZEROR|EXTRA|NOSPC|TRLBAR),
+ EX(CMD_tablast,		"tablast",	ex_tabnext,
+ 			TRLBAR),
+ EX(CMD_tabnext,		"tabnext",	ex_tabnext,
+@@ -1078,7 +1084,7 @@
+ EX(CMD_wsverb,		"wsverb",	ex_wsverb,
+ 			EXTRA|NOTADR|NEEDARG),
+ EX(CMD_wundo,		"wundo",	ex_wundo,
+-			BANG|NEEDARG|EXTRA|XFILE),
++			BANG|NEEDARG|FILE1),
+ EX(CMD_wviminfo,	"wviminfo",	ex_viminfo,
+ 			BANG|FILE1|TRLBAR|CMDWIN),
+ EX(CMD_xit,		"xit",		ex_exit,
+diff -Naur vim73.orig/src/ex_cmds2.c vim73/src/ex_cmds2.c
+--- vim73.orig/src/ex_cmds2.c	2010-07-27 19:43:38.000000000 +0000
++++ vim73/src/ex_cmds2.c	2013-06-07 17:07:30.705587663 +0000
+@@ -11,10 +11,6 @@
+  * ex_cmds2.c: some more functions for command line commands
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ #include "version.h"
+ 
+@@ -504,18 +500,10 @@
+ 	/* Expand the file name in the same way as do_source().  This means
+ 	 * doing it twice, so that $DIR/file gets expanded when $DIR is
+ 	 * "~/dir". */
+-#ifdef RISCOS
+-	q = mch_munge_fname(p);
+-#else
+ 	q = expand_env_save(p);
+-#endif
+ 	if (q == NULL)
+ 	    return FAIL;
+-#ifdef RISCOS
+-	p = mch_munge_fname(q);
+-#else
+ 	p = expand_env_save(q);
+-#endif
+ 	vim_free(q);
+ 	if (p == NULL)
+ 	    return FAIL;
+@@ -608,10 +596,15 @@
+     garray_T	*gap;
+ 
+     gap = &dbg_breakp;
+-#ifdef FEAT_PROFILE
+     if (eap->cmdidx == CMD_profdel)
++    {
++#ifdef FEAT_PROFILE
+ 	gap = &prof_ga;
++#else
++	ex_ni(eap);
++	return;
+ #endif
++    }
+ 
+     if (vim_isdigit(*eap->arg))
+     {
+@@ -694,10 +687,12 @@
+ 	for (i = 0; i < dbg_breakp.ga_len; ++i)
+ 	{
+ 	    bp = &BREAKP(i);
++	    if (bp->dbg_type == DBG_FILE)
++		home_replace(NULL, bp->dbg_name, NameBuff, MAXPATHL, TRUE);
+ 	    smsg((char_u *)_("%3d  %s %s  line %ld"),
+ 		    bp->dbg_nr,
+ 		    bp->dbg_type == DBG_FUNC ? "func" : "file",
+-		    bp->dbg_name,
++		    bp->dbg_type == DBG_FUNC ? bp->dbg_name : NameBuff,
+ 		    (long)bp->dbg_lnum);
+ 	}
+ }
+@@ -963,6 +958,36 @@
+ 
+ # endif  /* FEAT_PROFILE || FEAT_RELTIME */
+ 
++#if defined(FEAT_SYN_HL) && defined(FEAT_RELTIME) && defined(FEAT_FLOAT)
++# if defined(HAVE_MATH_H)
++#  include <math.h>
++# endif
++
++/*
++ * Divide the time "tm" by "count" and store in "tm2".
++ */
++    void
++profile_divide(tm, count, tm2)
++    proftime_T  *tm;
++    proftime_T  *tm2;
++    int		count;
++{
++    if (count == 0)
++	profile_zero(tm2);
++    else
++    {
++# ifdef WIN3264
++	tm2->QuadPart = tm->QuadPart / count;
++# else
++	double usec = (tm->tv_sec * 1000000.0 + tm->tv_usec) / count;
++
++	tm2->tv_sec = floor(usec / 1000000.0);
++	tm2->tv_usec = round(usec - (tm2->tv_sec * 1000000.0));
++# endif
++    }
++}
++#endif
++
+ # if defined(FEAT_PROFILE) || defined(PROTO)
+ /*
+  * Functions for profiling.
+@@ -1055,7 +1080,7 @@
+  */
+     int
+ profile_cmp(tm1, tm2)
+-    proftime_T *tm1, *tm2;
++    const proftime_T *tm1, *tm2;
+ {
+ # ifdef WIN3264
+     return (int)(tm2->QuadPart - tm1->QuadPart);
+@@ -1119,7 +1144,7 @@
+ static enum
+ {
+     PEXP_SUBCMD,	/* expand :profile sub-commands */
+-    PEXP_FUNC,		/* expand :profile func {funcname} */
++    PEXP_FUNC		/* expand :profile func {funcname} */
+ } pexpand_what;
+ 
+ static char *pexpand_cmds[] = {
+@@ -1488,7 +1513,7 @@
+ #endif
+ 
+ /*
+- * Ask the user what to do when abondoning a changed buffer.
++ * Ask the user what to do when abandoning a changed buffer.
+  * Must check 'write' option first!
+  */
+     void
+@@ -1496,9 +1521,10 @@
+     buf_T	*buf;
+     int		checkall;	/* may abandon all changed buffers */
+ {
+-    char_u	buff[IOSIZE];
++    char_u	buff[DIALOG_MSG_SIZE];
+     int		ret;
+     buf_T	*buf2;
++    exarg_T     ea;
+ 
+     dialog_msg(buff, _("Save changes to \"%s\"?"),
+ 			(buf->b_fname != NULL) ?
+@@ -1508,13 +1534,19 @@
+     else
+ 	ret = vim_dialog_yesnocancel(VIM_QUESTION, NULL, buff, 1);
+ 
++    /* Init ea pseudo-structure, this is needed for the check_overwrite()
++     * function. */
++    ea.append = ea.forceit = FALSE;
++
+     if (ret == VIM_YES)
+     {
+ #ifdef FEAT_BROWSE
+ 	/* May get file name, when there is none */
+ 	browse_save_fname(buf);
+ #endif
+-	if (buf->b_fname != NULL)   /* didn't hit Cancel */
++	if (buf->b_fname != NULL && check_overwrite(&ea, buf,
++				    buf->b_fname, buf->b_ffname, FALSE) == OK)
++	    /* didn't hit Cancel */
+ 	    (void)buf_write_all(buf, FALSE);
+     }
+     else if (ret == VIM_NO)
+@@ -1542,7 +1574,9 @@
+ 		/* May get file name, when there is none */
+ 		browse_save_fname(buf2);
+ #endif
+-		if (buf2->b_fname != NULL)   /* didn't hit Cancel */
++		if (buf2->b_fname != NULL && check_overwrite(&ea, buf2,
++				  buf2->b_fname, buf2->b_ffname, FALSE) == OK)
++		    /* didn't hit Cancel */
+ 		    (void)buf_write_all(buf2, FALSE);
+ #ifdef FEAT_AUTOCMD
+ 		/* an autocommand may have deleted the buffer */
+@@ -1579,6 +1613,26 @@
+ 		|| forceit);
+ }
+ 
++static void add_bufnum __ARGS((int *bufnrs, int *bufnump, int nr));
++
++/*
++ * Add a buffer number to "bufnrs", unless it's already there.
++ */
++    static void
++add_bufnum(bufnrs, bufnump, nr)
++    int	    *bufnrs;
++    int	    *bufnump;
++    int	    nr;
++{
++    int i;
++
++    for (i = 0; i < *bufnump; ++i)
++	if (bufnrs[i] == nr)
++	    return;
++    bufnrs[*bufnump] = nr;
++    *bufnump = *bufnump + 1;
++}
++
+ /*
+  * Return TRUE if any buffer was changed and cannot be abandoned.
+  * That changed buffer becomes the current buffer.
+@@ -1587,32 +1641,64 @@
+ check_changed_any(hidden)
+     int		hidden;		/* Only check hidden buffers */
+ {
++    int		ret = FALSE;
+     buf_T	*buf;
+     int		save;
++    int		i;
++    int		bufnum = 0;
++    int		bufcount = 0;
++    int		*bufnrs;
+ #ifdef FEAT_WINDOWS
++    tabpage_T   *tp;
+     win_T	*wp;
+ #endif
+ 
+-    for (;;)
++    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
++	++bufcount;
++
++    if (bufcount == 0)
++	return FALSE;
++
++    bufnrs = (int *)alloc(sizeof(int) * bufcount);
++    if (bufnrs == NULL)
++	return FALSE;
++
++    /* curbuf */
++    bufnrs[bufnum++] = curbuf->b_fnum;
++#ifdef FEAT_WINDOWS
++    /* buf in curtab */
++    FOR_ALL_WINDOWS(wp)
++	if (wp->w_buffer != curbuf)
++	    add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
++
++    /* buf in other tab */
++    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
++	if (tp != curtab)
++	    for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
++		add_bufnum(bufnrs, &bufnum, wp->w_buffer->b_fnum);
++#endif
++    /* any other buf */
++    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
++	add_bufnum(bufnrs, &bufnum, buf->b_fnum);
++
++    for (i = 0; i < bufnum; ++i)
+     {
+-	/* check curbuf first: if it was changed we can't abandon it */
+-	if (!hidden && curbufIsChanged())
+-	    buf = curbuf;
+-	else
++	buf = buflist_findnr(bufnrs[i]);
++	if (buf == NULL)
++	    continue;
++	if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
+ 	{
+-	    for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+-		if ((!hidden || buf->b_nwindows == 0) && bufIsChanged(buf))
+-		    break;
++	    /* Try auto-writing the buffer.  If this fails but the buffer no
++	    * longer exists it's not changed, that's OK. */
++	    if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
++		break;	    /* didn't save - still changes */
+ 	}
+-	if (buf == NULL)    /* No buffers changed */
+-	    return FALSE;
+-
+-	/* Try auto-writing the buffer.  If this fails but the buffer no
+-	 * longer exists it's not changed, that's OK. */
+-	if (check_changed(buf, p_awa, TRUE, FALSE, TRUE) && buf_valid(buf))
+-	    break;	    /* didn't save - still changes */
+     }
+ 
++    if (i >= bufnum)
++	goto theend;
++
++    ret = TRUE;
+     exiting = FALSE;
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+     /*
+@@ -1632,8 +1718,7 @@
+ 	    msg_didout = FALSE;
+ 	}
+ 	if (EMSG2(_("E162: No write since last change for buffer \"%s\""),
+-		    buf_spname(buf) != NULL ? (char_u *)buf_spname(buf) :
+-		    buf->b_fname))
++		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname))
+ 	{
+ 	    save = no_wait_return;
+ 	    no_wait_return = FALSE;
+@@ -1645,24 +1730,29 @@
+ #ifdef FEAT_WINDOWS
+     /* Try to find a window that contains the buffer. */
+     if (buf != curbuf)
+-	for (wp = firstwin; wp != NULL; wp = wp->w_next)
++	FOR_ALL_TAB_WINDOWS(tp, wp)
+ 	    if (wp->w_buffer == buf)
+ 	    {
+-		win_goto(wp);
++		goto_tabpage_win(tp, wp);
+ # ifdef FEAT_AUTOCMD
+ 		/* Paranoia: did autocms wipe out the buffer with changes? */
+ 		if (!buf_valid(buf))
+-		    return TRUE;
++		{
++		    goto theend;
++		}
+ # endif
+-		break;
++		goto buf_found;
+ 	    }
++buf_found:
+ #endif
+ 
+     /* Open the changed buffer in the current window. */
+     if (buf != curbuf)
+ 	set_curbuf(buf, DOBUF_GOTO);
+ 
+-    return TRUE;
++theend:
++    vim_free(bufnrs);
++    return ret;
+ }
+ 
+ /*
+@@ -1789,22 +1879,28 @@
+ #if defined(FEAT_QUICKFIX) || defined(FEAT_SYN_HL) || defined(PROTO)
+ /*
+  * Parse a list of arguments (file names), expand them and return in
+- * "fnames[fcountp]".
++ * "fnames[fcountp]".  When "wig" is TRUE, removes files matching 'wildignore'.
+  * Return FAIL or OK.
+  */
+     int
+-get_arglist_exp(str, fcountp, fnamesp)
++get_arglist_exp(str, fcountp, fnamesp, wig)
+     char_u	*str;
+     int		*fcountp;
+     char_u	***fnamesp;
++    int		wig;
+ {
+     garray_T	ga;
+     int		i;
+ 
+     if (get_arglist(&ga, str) == FAIL)
+ 	return FAIL;
+-    i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
+-				       fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
++    if (wig == TRUE)
++	i = expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
++					fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
++    else
++	i = gen_expand_wildcards(ga.ga_len, (char_u **)ga.ga_data,
++					fcountp, fnamesp, EW_FILE|EW_NOTFOUND);
++
+     ga_clear(&ga);
+     return i;
+ }
+@@ -1860,11 +1956,7 @@
+ 	 * Delete the items: use each item as a regexp and find a match in the
+ 	 * argument list.
+ 	 */
+-#ifdef CASE_INSENSITIVE_FILENAME
+-	regmatch.rm_ic = TRUE;		/* Always ignore case */
+-#else
+-	regmatch.rm_ic = FALSE;		/* Never ignore case */
+-#endif
++	regmatch.rm_ic = p_fic;	/* ignore case when 'fileignorecase' is set */
+ 	for (i = 0; i < new_ga.ga_len && !got_int; ++i)
+ 	{
+ 	    p = ((char_u **)new_ga.ga_data)[i];
+@@ -1949,7 +2041,7 @@
+ }
+ 
+ /*
+- * Return TRUE if window "win" is editing then file at the current argument
++ * Return TRUE if window "win" is editing the file at the current argument
+  * index.
+  */
+     static int
+@@ -2165,9 +2257,7 @@
+ 	{
+ 	    if (win_split(0, 0) == FAIL)
+ 		return;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;
+-# endif
++	    RESET_BINDING(curwin);
+ 	}
+ 	else
+ #endif
+@@ -2422,7 +2512,7 @@
+ 		/* go to window "tp" */
+ 		if (!valid_tabpage(tp))
+ 		    break;
+-		goto_tabpage_tp(tp);
++		goto_tabpage_tp(tp, TRUE, TRUE);
+ 		tp = tp->tp_next;
+ 	    }
+ #endif
+@@ -2791,7 +2881,7 @@
+ 	EMSG(_(e_argreq));
+ 
+     else if (eap != NULL && eap->forceit)
+-	/* ":source!": read Normal mdoe commands
++	/* ":source!": read Normal mode commands
+ 	 * Need to execute the commands directly.  This is required at least
+ 	 * for:
+ 	 * - ":g" command busy
+@@ -2946,11 +3036,7 @@
+     proftime_T		    wait_start;
+ #endif
+ 
+-#ifdef RISCOS
+-    p = mch_munge_fname(fname);
+-#else
+     p = expand_env_save(fname);
+-#endif
+     if (p == NULL)
+ 	return retval;
+     fname_exp = fix_fname(p);
+@@ -3286,7 +3372,11 @@
+ 
+     for (i = 1; i <= script_items.ga_len && !got_int; ++i)
+ 	if (SCRIPT_ITEM(i).sn_name != NULL)
+-	    smsg((char_u *)"%3d: %s", i, SCRIPT_ITEM(i).sn_name);
++	{
++	    home_replace(NULL, SCRIPT_ITEM(i).sn_name,
++						    NameBuff, MAXPATHL, TRUE);
++	    smsg((char_u *)"%3d: %s", i, NameBuff);
++	}
+ }
+ 
+ # if defined(BACKSLASH_IN_FILENAME) || defined(PROTO)
+@@ -3412,7 +3502,7 @@
+ {
+     struct source_cookie *sp = (struct source_cookie *)cookie;
+     char_u		*line;
+-    char_u		*p, *s;
++    char_u		*p;
+ 
+ #ifdef FEAT_EVAL
+     /* If breakpoints have been added/deleted need to check for it. */
+@@ -3451,28 +3541,49 @@
+     {
+ 	/* compensate for the one line read-ahead */
+ 	--sourcing_lnum;
+-	for (;;)
+-	{
+-	    sp->nextline = get_one_sourceline(sp);
+-	    if (sp->nextline == NULL)
+-		break;
+-	    p = skipwhite(sp->nextline);
+-	    if (*p != '\\')
+-		break;
+-	    s = alloc((unsigned)(STRLEN(line) + STRLEN(p)));
+-	    if (s == NULL)	/* out of memory */
+-		break;
+-	    STRCPY(s, line);
+-	    STRCAT(s, p + 1);
++
++	/* Get the next line and concatenate it when it starts with a
++	 * backslash. We always need to read the next line, keep it in
++	 * sp->nextline. */
++	sp->nextline = get_one_sourceline(sp);
++	if (sp->nextline != NULL && *(p = skipwhite(sp->nextline)) == '\\')
++	{
++	    garray_T    ga;
++
++	    ga_init2(&ga, (int)sizeof(char_u), 400);
++	    ga_concat(&ga, line);
++	    ga_concat(&ga, p + 1);
++	    for (;;)
++	    {
++		vim_free(sp->nextline);
++		sp->nextline = get_one_sourceline(sp);
++		if (sp->nextline == NULL)
++		    break;
++		p = skipwhite(sp->nextline);
++		if (*p != '\\')
++		    break;
++		/* Adjust the growsize to the current length to speed up
++		 * concatenating many lines. */
++		if (ga.ga_len > 400)
++		{
++		    if (ga.ga_len > 8000)
++			ga.ga_growsize = 8000;
++		    else
++			ga.ga_growsize = ga.ga_len;
++		}
++		ga_concat(&ga, p + 1);
++	    }
++	    ga_append(&ga, NUL);
+ 	    vim_free(line);
+-	    line = s;
+-	    vim_free(sp->nextline);
++	    line = ga.ga_data;
+ 	}
+     }
+ 
+ #ifdef FEAT_MBYTE
+     if (line != NULL && sp->conv.vc_type != CONV_NONE)
+     {
++	char_u	*s;
++
+ 	/* Convert the encoding of the script line. */
+ 	s = string_convert(&sp->conv, line, NULL);
+ 	if (s != NULL)
+@@ -4166,11 +4277,90 @@
+ 	    /* Set v:lang, v:lc_time and v:ctype to the final result. */
+ 	    set_lang_var();
+ # endif
++# ifdef FEAT_TITLE
++	    maketitle();
++# endif
+ 	}
+     }
+ }
+ 
+ # if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++
++static char_u	**locales = NULL;	/* Array of all available locales */
++static int	did_init_locales = FALSE;
++
++static void init_locales __ARGS((void));
++static char_u **find_locales __ARGS((void));
++
++/*
++ * Lazy initialization of all available locales.
++ */
++    static void
++init_locales()
++{
++    if (!did_init_locales)
++    {
++	did_init_locales = TRUE;
++	locales = find_locales();
++    }
++}
++
++/* Return an array of strings for all available locales + NULL for the
++ * last element.  Return NULL in case of error. */
++    static char_u **
++find_locales()
++{
++    garray_T	locales_ga;
++    char_u	*loc;
++
++    /* Find all available locales by running command "locale -a".  If this
++     * doesn't work we won't have completion. */
++    char_u *locale_a = get_cmd_output((char_u *)"locale -a",
++							NULL, SHELL_SILENT);
++    if (locale_a == NULL)
++	return NULL;
++    ga_init2(&locales_ga, sizeof(char_u *), 20);
++
++    /* Transform locale_a string where each locale is separated by "\n"
++     * into an array of locale strings. */
++    loc = (char_u *)strtok((char *)locale_a, "\n");
++
++    while (loc != NULL)
++    {
++	if (ga_grow(&locales_ga, 1) == FAIL)
++	    break;
++	loc = vim_strsave(loc);
++	if (loc == NULL)
++	    break;
++
++	((char_u **)locales_ga.ga_data)[locales_ga.ga_len++] = loc;
++	loc = (char_u *)strtok(NULL, "\n");
++    }
++    vim_free(locale_a);
++    if (ga_grow(&locales_ga, 1) == FAIL)
++    {
++	ga_clear(&locales_ga);
++	return NULL;
++    }
++    ((char_u **)locales_ga.ga_data)[locales_ga.ga_len] = NULL;
++    return (char_u **)locales_ga.ga_data;
++}
++
++#  if defined(EXITFREE) || defined(PROTO)
++    void
++free_locales()
++{
++    int			i;
++    if (locales != NULL)
++    {
++	for (i = 0; locales[i] != NULL; i++)
++	    vim_free(locales[i]);
++	vim_free(locales);
++	locales = NULL;
++    }
++}
++#  endif
++
+ /*
+  * Function given to ExpandGeneric() to obtain the possible arguments of the
+  * ":language" command.
+@@ -4186,7 +4376,25 @@
+ 	return (char_u *)"ctype";
+     if (idx == 2)
+ 	return (char_u *)"time";
+-    return NULL;
++
++    init_locales();
++    if (locales == NULL)
++	return NULL;
++    return locales[idx - 3];
++}
++
++/*
++ * Function given to ExpandGeneric() to obtain the available locales.
++ */
++    char_u *
++get_locales(xp, idx)
++    expand_T	*xp UNUSED;
++    int		idx;
++{
++    init_locales();
++    if (locales == NULL)
++	return NULL;
++    return locales[idx];
+ }
+ # endif
+ 
+diff -Naur vim73.orig/src/ex_docmd.c vim73/src/ex_docmd.c
+--- vim73.orig/src/ex_docmd.c	2010-08-07 14:59:47.000000000 +0000
++++ vim73/src/ex_docmd.c	2013-06-07 17:07:30.732254254 +0000
+@@ -61,6 +61,7 @@
+ static char_u	*do_one_cmd __ARGS((char_u **, int, char_u *(*fgetline)(int, void *, int), void *cookie));
+ static int	if_level = 0;		/* depth in :if */
+ #endif
++static void	append_command __ARGS((char_u *cmd));
+ static char_u	*find_command __ARGS((exarg_T *eap, int *full));
+ 
+ static void	ex_abbreviate __ARGS((exarg_T *eap));
+@@ -241,6 +242,9 @@
+ # define ex_syntax		ex_ni
+ # define ex_ownsyntax		ex_ni
+ #endif
++#if !defined(FEAT_SYN_HL) || !defined(FEAT_PROFILE)
++# define ex_syntime		ex_ni
++#endif
+ #ifndef FEAT_SPELL
+ # define ex_spell		ex_ni
+ # define ex_mkspell		ex_ni
+@@ -267,10 +271,12 @@
+ #endif
+ #ifndef FEAT_PYTHON
+ # define ex_python		ex_script_ni
++# define ex_pydo		ex_ni
+ # define ex_pyfile		ex_ni
+ #endif
+ #ifndef FEAT_PYTHON3
+ # define ex_py3			ex_script_ni
++# define ex_py3do		ex_ni
+ # define ex_py3file		ex_ni
+ #endif
+ #ifndef FEAT_TCL
+@@ -370,11 +376,9 @@
+ # define ex_endif		ex_ni
+ # define ex_else		ex_ni
+ # define ex_while		ex_ni
+-# define ex_for			ex_ni
+ # define ex_continue		ex_ni
+ # define ex_break		ex_ni
+ # define ex_endwhile		ex_ni
+-# define ex_endfor		ex_ni
+ # define ex_throw		ex_ni
+ # define ex_try			ex_ni
+ # define ex_catch		ex_ni
+@@ -733,7 +737,7 @@
+  * do_cmdline(): execute one Ex command line
+  *
+  * 1. Execute "cmdline" when it is not NULL.
+- *    If "cmdline" is NULL, or more lines are needed, getline() is used.
++ *    If "cmdline" is NULL, or more lines are needed, fgetline() is used.
+  * 2. Split up in parts separated with '|'.
+  *
+  * This function can be called recursively!
+@@ -741,7 +745,7 @@
+  * flags:
+  * DOCMD_VERBOSE  - The command will be included in the error message.
+  * DOCMD_NOWAIT   - Don't call wait_return() and friends.
+- * DOCMD_REPEAT   - Repeat execution until getline() returns NULL.
++ * DOCMD_REPEAT   - Repeat execution until fgetline() returns NULL.
+  * DOCMD_KEYTYPED - Don't reset KeyTyped.
+  * DOCMD_EXCRESET - Reset the exception environment (used for debugging).
+  * DOCMD_KEEPLINE - Store first typed line (for repeating with ".").
+@@ -749,15 +753,15 @@
+  * return FAIL if cmdline could not be executed, OK otherwise
+  */
+     int
+-do_cmdline(cmdline, getline, cookie, flags)
++do_cmdline(cmdline, fgetline, cookie, flags)
+     char_u	*cmdline;
+-    char_u	*(*getline) __ARGS((int, void *, int));
+-    void	*cookie;		/* argument for getline() */
++    char_u	*(*fgetline) __ARGS((int, void *, int));
++    void	*cookie;		/* argument for fgetline() */
+     int		flags;
+ {
+     char_u	*next_cmdline;		/* next cmd to execute */
+     char_u	*cmdline_copy = NULL;	/* copy of cmd line */
+-    int		used_getline = FALSE;	/* used "getline" to obtain command */
++    int		used_getline = FALSE;	/* used "fgetline" to obtain command */
+     static int	recursive = 0;		/* recursive depth */
+     int		msg_didout_before_start = 0;
+     int		count = 0;		/* line number count */
+@@ -775,14 +779,14 @@
+     struct msglist	**saved_msg_list = NULL;
+     struct msglist	*private_msg_list;
+ 
+-    /* "getline" and "cookie" passed to do_one_cmd() */
++    /* "fgetline" and "cookie" passed to do_one_cmd() */
+     char_u	*(*cmd_getline) __ARGS((int, void *, int));
+     void	*cmd_cookie;
+     struct loop_cookie cmd_loop_cookie;
+     void	*real_cookie;
+     int		getline_is_func;
+ #else
+-# define cmd_getline getline
++# define cmd_getline fgetline
+ # define cmd_cookie cookie
+ #endif
+     static int	call_depth = 0;		/* recursiveness */
+@@ -822,10 +826,10 @@
+     cstack.cs_lflags = 0;
+     ga_init2(&lines_ga, (int)sizeof(wcmd_T), 10);
+ 
+-    real_cookie = getline_cookie(getline, cookie);
++    real_cookie = getline_cookie(fgetline, cookie);
+ 
+     /* Inside a function use a higher nesting level. */
+-    getline_is_func = getline_equal(getline, cookie, get_func_line);
++    getline_is_func = getline_equal(fgetline, cookie, get_func_line);
+     if (getline_is_func && ex_nesting_level == func_level(real_cookie))
+ 	++ex_nesting_level;
+ 
+@@ -837,7 +841,7 @@
+ 	breakpoint = func_breakpoint(real_cookie);
+ 	dbg_tick = func_dbg_tick(real_cookie);
+     }
+-    else if (getline_equal(getline, cookie, getsourceline))
++    else if (getline_equal(fgetline, cookie, getsourceline))
+     {
+ 	fname = sourcing_name;
+ 	breakpoint = source_breakpoint(real_cookie);
+@@ -881,7 +885,8 @@
+      * KeyTyped is only set when calling vgetc().  Reset it here when not
+      * calling vgetc() (sourced command lines).
+      */
+-    if (!(flags & DOCMD_KEYTYPED) && !getline_equal(getline, cookie, getexline))
++    if (!(flags & DOCMD_KEYTYPED)
++			       && !getline_equal(fgetline, cookie, getexline))
+ 	KeyTyped = FALSE;
+ 
+     /*
+@@ -894,7 +899,7 @@
+     do
+     {
+ #ifdef FEAT_EVAL
+-	getline_is_func = getline_equal(getline, cookie, get_func_line);
++	getline_is_func = getline_equal(fgetline, cookie, get_func_line);
+ #endif
+ 
+ 	/* stop skipping cmds for an error msg after all endif/while/for */
+@@ -909,7 +914,7 @@
+ 
+ 	/*
+ 	 * 1. If repeating a line in a loop, get a line from lines_ga.
+-	 * 2. If no line given: Get an allocated line with getline().
++	 * 2. If no line given: Get an allocated line with fgetline().
+ 	 * 3. If a line is given: Make a copy, so we can mess with it.
+ 	 */
+ 
+@@ -938,12 +943,12 @@
+ 	    }
+ #ifdef FEAT_PROFILE
+ 	    else if (do_profiling == PROF_YES
+-			     && getline_equal(getline, cookie, getsourceline))
++			    && getline_equal(fgetline, cookie, getsourceline))
+ 		script_line_end();
+ #endif
+ 
+ 	    /* Check if a sourced file hit a ":finish" command. */
+-	    if (source_finished(getline, cookie))
++	    if (source_finished(fgetline, cookie))
+ 	    {
+ 		retval = FAIL;
+ 		break;
+@@ -954,7 +959,7 @@
+ 						   && *dbg_tick != debug_tick)
+ 	    {
+ 		*breakpoint = dbg_find_breakpoint(
+-				getline_equal(getline, cookie, getsourceline),
++				getline_equal(fgetline, cookie, getsourceline),
+ 							fname, sourcing_lnum);
+ 		*dbg_tick = debug_tick;
+ 	    }
+@@ -969,7 +974,7 @@
+ 		dbg_breakpoint(fname, sourcing_lnum);
+ 		/* Find next breakpoint. */
+ 		*breakpoint = dbg_find_breakpoint(
+-				getline_equal(getline, cookie, getsourceline),
++			       getline_equal(fgetline, cookie, getsourceline),
+ 							fname, sourcing_lnum);
+ 		*dbg_tick = debug_tick;
+ 	    }
+@@ -978,7 +983,7 @@
+ 	    {
+ 		if (getline_is_func)
+ 		    func_line_start(real_cookie);
+-		else if (getline_equal(getline, cookie, getsourceline))
++		else if (getline_equal(fgetline, cookie, getsourceline))
+ 		    script_line_start();
+ 	    }
+ # endif
+@@ -987,7 +992,7 @@
+ 	if (cstack.cs_looplevel > 0)
+ 	{
+ 	    /* Inside a while/for loop we need to store the lines and use them
+-	     * again.  Pass a different "getline" function to do_one_cmd()
++	     * again.  Pass a different "fgetline" function to do_one_cmd()
+ 	     * below, so that it stores lines in or reads them from
+ 	     * "lines_ga".  Makes it possible to define a function inside a
+ 	     * while/for loop. */
+@@ -995,27 +1000,27 @@
+ 	    cmd_cookie = (void *)&cmd_loop_cookie;
+ 	    cmd_loop_cookie.lines_gap = &lines_ga;
+ 	    cmd_loop_cookie.current_line = current_line;
+-	    cmd_loop_cookie.getline = getline;
++	    cmd_loop_cookie.getline = fgetline;
+ 	    cmd_loop_cookie.cookie = cookie;
+ 	    cmd_loop_cookie.repeating = (current_line < lines_ga.ga_len);
+ 	}
+ 	else
+ 	{
+-	    cmd_getline = getline;
++	    cmd_getline = fgetline;
+ 	    cmd_cookie = cookie;
+ 	}
+ #endif
+ 
+-	/* 2. If no line given, get an allocated line with getline(). */
++	/* 2. If no line given, get an allocated line with fgetline(). */
+ 	if (next_cmdline == NULL)
+ 	{
+ 	    /*
+ 	     * Need to set msg_didout for the first line after an ":if",
+ 	     * otherwise the ":if" will be overwritten.
+ 	     */
+-	    if (count == 1 && getline_equal(getline, cookie, getexline))
++	    if (count == 1 && getline_equal(fgetline, cookie, getexline))
+ 		msg_didout = TRUE;
+-	    if (getline == NULL || (next_cmdline = getline(':', cookie,
++	    if (fgetline == NULL || (next_cmdline = fgetline(':', cookie,
+ #ifdef FEAT_EVAL
+ 		    cstack.cs_idx < 0 ? 0 : (cstack.cs_idx + 1) * 2
+ #else
+@@ -1093,7 +1098,7 @@
+ 		msg_didany = FALSE; /* no output yet */
+ 		msg_start();
+ 		msg_scroll = TRUE;  /* put messages below each other */
+-		++no_wait_return;   /* dont wait for return until finished */
++		++no_wait_return;   /* don't wait for return until finished */
+ 		++RedrawingDisabled;
+ 		did_inc = TRUE;
+ 	    }
+@@ -1142,7 +1147,7 @@
+ 	     * If the command was typed, remember it for the ':' register.
+ 	     * Do this AFTER executing the command to make :@: work.
+ 	     */
+-	    if (getline_equal(getline, cookie, getexline)
++	    if (getline_equal(fgetline, cookie, getexline)
+ 						  && new_last_cmdline != NULL)
+ 	    {
+ 		vim_free(last_cmdline);
+@@ -1163,7 +1168,7 @@
+ #ifdef FEAT_EVAL
+ 	/* reset did_emsg for a function that is not aborted by an error */
+ 	if (did_emsg && !force_abort
+-		&& getline_equal(getline, cookie, get_func_line)
++		&& getline_equal(fgetline, cookie, get_func_line)
+ 					      && !func_has_abort(real_cookie))
+ 	    did_emsg = FALSE;
+ 
+@@ -1202,7 +1207,7 @@
+ 		    if (breakpoint != NULL)
+ 		    {
+ 			*breakpoint = dbg_find_breakpoint(
+-				getline_equal(getline, cookie, getsourceline),
++			       getline_equal(fgetline, cookie, getsourceline),
+ 									fname,
+ 			   ((wcmd_T *)lines_ga.ga_data)[current_line].lnum-1);
+ 			*dbg_tick = debug_tick;
+@@ -1295,9 +1300,16 @@
+ 		&& cstack.cs_trylevel == 0
+ #endif
+ 	    )
+-	    && !(did_emsg && used_getline
+-			  && (getline_equal(getline, cookie, getexmodeline)
+-				|| getline_equal(getline, cookie, getexline)))
++	    && !(did_emsg
++#ifdef FEAT_EVAL
++		/* Keep going when inside try/catch, so that the error can be
++		 * deal with, except when it is a syntax error, it may cause
++		 * the :endtry to be missed. */
++		&& (cstack.cs_trylevel == 0 || did_emsg_syntax)
++#endif
++		&& used_getline
++			    && (getline_equal(fgetline, cookie, getexmodeline)
++			       || getline_equal(fgetline, cookie, getexline)))
+ 	    && (next_cmdline != NULL
+ #ifdef FEAT_EVAL
+ 			|| cstack.cs_idx >= 0
+@@ -1305,6 +1317,7 @@
+ 			|| (flags & DOCMD_REPEAT)));
+ 
+     vim_free(cmdline_copy);
++    did_emsg_syntax = FALSE;
+ #ifdef FEAT_EVAL
+     free_cmdlines(&lines_ga);
+     ga_clear(&lines_ga);
+@@ -1316,9 +1329,9 @@
+ 	 * unclosed conditional.
+ 	 */
+ 	if (!got_int && !did_throw
+-		&& ((getline_equal(getline, cookie, getsourceline)
+-			&& !source_finished(getline, cookie))
+-		    || (getline_equal(getline, cookie, get_func_line)
++		&& ((getline_equal(fgetline, cookie, getsourceline)
++			&& !source_finished(fgetline, cookie))
++		    || (getline_equal(fgetline, cookie, get_func_line)
+ 					    && !func_has_ended(real_cookie))))
+ 	{
+ 	    if (cstack.cs_flags[cstack.cs_idx] & CSF_TRY)
+@@ -1354,7 +1367,7 @@
+     /* If a missing ":endtry", ":endwhile", ":endfor", or ":endif" or a memory
+      * lack was reported above and the error message is to be converted to an
+      * exception, do this now after rewinding the cstack. */
+-    do_errthrow(&cstack, getline_equal(getline, cookie, get_func_line)
++    do_errthrow(&cstack, getline_equal(fgetline, cookie, get_func_line)
+ 				  ? (char_u *)"endfunction" : (char_u *)NULL);
+ 
+     if (trylevel == 0)
+@@ -1449,9 +1462,9 @@
+      */
+     if (did_throw)
+ 	need_rethrow = TRUE;
+-    if ((getline_equal(getline, cookie, getsourceline)
++    if ((getline_equal(fgetline, cookie, getsourceline)
+ 		&& ex_nesting_level > source_level(real_cookie))
+-	    || (getline_equal(getline, cookie, get_func_line)
++	    || (getline_equal(fgetline, cookie, get_func_line)
+ 		&& ex_nesting_level > func_level(real_cookie) + 1))
+     {
+ 	if (!did_throw)
+@@ -1460,16 +1473,16 @@
+     else
+     {
+ 	/* When leaving a function, reduce nesting level. */
+-	if (getline_equal(getline, cookie, get_func_line))
++	if (getline_equal(fgetline, cookie, get_func_line))
+ 	    --ex_nesting_level;
+ 	/*
+ 	 * Go to debug mode when returning from a function in which we are
+ 	 * single-stepping.
+ 	 */
+-	if ((getline_equal(getline, cookie, getsourceline)
+-		    || getline_equal(getline, cookie, get_func_line))
++	if ((getline_equal(fgetline, cookie, getsourceline)
++		    || getline_equal(fgetline, cookie, get_func_line))
+ 		&& ex_nesting_level + 1 <= debug_break_level)
+-	    do_debug(getline_equal(getline, cookie, getsourceline)
++	    do_debug(getline_equal(fgetline, cookie, getsourceline)
+ 		    ? (char_u *)_("End of sourced file")
+ 		    : (char_u *)_("End of function"));
+     }
+@@ -1520,7 +1533,9 @@
+ 	}
+     }
+ 
+-#ifndef FEAT_EVAL
++#ifdef FEAT_EVAL
++    did_endif = FALSE;  /* in case do_cmdline used recursively */
++#else
+     /*
+      * Reset if_level, in case a sourced script file contains more ":if" than
+      * ":endif" (could be ":if x | foo | endif").
+@@ -1719,12 +1734,16 @@
+     ++ex_nesting_level;
+ #endif
+ 
+-	/* when not editing the last file :q has to be typed twice */
++    /* When the last file has not been edited :q has to be typed twice. */
+     if (quitmore
+ #ifdef FEAT_EVAL
+ 	    /* avoid that a function call in 'statusline' does this */
+ 	    && !getline_equal(fgetline, cookie, get_func_line)
+ #endif
++#ifdef FEAT_AUTOCMD
++	    /* avoid that an autocommand, e.g. QuitPre, does this */
++	    && !getline_equal(fgetline, cookie, getnextac)
++#endif
+ 	    )
+ 	--quitmore;
+ 
+@@ -2135,11 +2154,9 @@
+ 	{
+ 	    STRCPY(IObuff, _("E492: Not an editor command"));
+ 	    if (!sourcing)
+-	    {
+-		STRCAT(IObuff, ": ");
+-		STRNCAT(IObuff, *cmdlinep, 40);
+-	    }
++		append_command(*cmdlinep);
+ 	    errormsg = IObuff;
++	    did_emsg_syntax = TRUE;
+ 	}
+ 	goto doend;
+     }
+@@ -2423,25 +2440,39 @@
+     if (       (ea.argt & REGSTR)
+ 	    && *ea.arg != NUL
+ #ifdef FEAT_USR_CMDS
+-	    && valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
+-						   && USER_CMDIDX(ea.cmdidx)))
+ 	    /* Do not allow register = for user commands */
+ 	    && (!USER_CMDIDX(ea.cmdidx) || *ea.arg != '=')
+-#else
+-	    && valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
+ #endif
+ 	    && !((ea.argt & COUNT) && VIM_ISDIGIT(*ea.arg)))
+     {
+-	ea.regname = *ea.arg++;
+-#ifdef FEAT_EVAL
+-	/* for '=' register: accept the rest of the line as an expression */
+-	if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
++#ifndef FEAT_CLIPBOARD
++	/* check these explicitly for a more specific error message */
++	if (*ea.arg == '*' || *ea.arg == '+')
+ 	{
+-	    set_expr_line(vim_strsave(ea.arg));
+-	    ea.arg += STRLEN(ea.arg);
++	    errormsg = (char_u *)_(e_invalidreg);
++	    goto doend;
+ 	}
+ #endif
+-	ea.arg = skipwhite(ea.arg);
++	if (
++#ifdef FEAT_USR_CMDS
++	    valid_yank_reg(*ea.arg, (ea.cmdidx != CMD_put
++						   && USER_CMDIDX(ea.cmdidx)))
++#else
++	    valid_yank_reg(*ea.arg, ea.cmdidx != CMD_put)
++#endif
++	   )
++	{
++	    ea.regname = *ea.arg++;
++#ifdef FEAT_EVAL
++	    /* for '=' register: accept the rest of the line as an expression */
++	    if (ea.arg[-1] == '=' && ea.arg[0] != NUL)
++	    {
++		set_expr_line(vim_strsave(ea.arg));
++		ea.arg += STRLEN(ea.arg);
++	    }
++#endif
++	    ea.arg = skipwhite(ea.arg);
++	}
+     }
+ 
+     /*
+@@ -2580,6 +2611,7 @@
+ 	    case CMD_unlet:
+ 	    case CMD_verbose:
+ 	    case CMD_vertical:
++	    case CMD_wincmd:
+ 				break;
+ 
+ 	    default:		goto doend;
+@@ -2618,7 +2650,8 @@
+ 	    while (p > ea.arg && vim_iswhite(p[-1]))
+ 		--p;
+ 	}
+-	ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0, FALSE);
++	ea.line2 = buflist_findpat(ea.arg, p, (ea.argt & BUFUNL) != 0,
++								FALSE, FALSE);
+ 	if (ea.line2 < 0)	    /* failed */
+ 	    goto doend;
+ 	ea.addr_count = 1;
+@@ -2692,8 +2725,7 @@
+ 		STRCPY(IObuff, errormsg);
+ 		errormsg = IObuff;
+ 	    }
+-	    STRCAT(errormsg, ": ");
+-	    STRNCAT(errormsg, *cmdlinep, IOSIZE - STRLEN(IObuff) - 1);
++	    append_command(*cmdlinep);
+ 	}
+ 	emsg(errormsg);
+     }
+@@ -2781,6 +2813,42 @@
+ }
+ 
+ /*
++ * Append "cmd" to the error message in IObuff.
++ * Takes care of limiting the length and handling 0xa0, which would be
++ * invisible otherwise.
++ */
++    static void
++append_command(cmd)
++    char_u *cmd;
++{
++    char_u *s = cmd;
++    char_u *d;
++
++    STRCAT(IObuff, ": ");
++    d = IObuff + STRLEN(IObuff);
++    while (*s != NUL && d - IObuff < IOSIZE - 7)
++    {
++	if (
++#ifdef FEAT_MBYTE
++		enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) :
++#endif
++		*s == 0xa0)
++	{
++	    s +=
++#ifdef FEAT_MBYTE
++		enc_utf8 ? 2 :
++#endif
++		1;
++	    STRCPY(d, "<a0>");
++	    d += 4;
++	}
++	else
++	    MB_COPY_CHAR(s, d);
++    }
++    *d = NUL;
++}
++
++/*
+  * Find an Ex command by its name, either built-in or user.
+  * Start of the name can be found at eap->cmd.
+  * Returns pointer to char after the command name.
+@@ -2871,8 +2939,10 @@
+ 	    }
+ 
+ #ifdef FEAT_USR_CMDS
+-	/* Look for a user defined command as a last resort */
+-	if (eap->cmdidx == CMD_SIZE && *eap->cmd >= 'A' && *eap->cmd <= 'Z')
++	/* Look for a user defined command as a last resort.  Let ":Print" be
++	 * overruled by a user defined command. */
++	if ((eap->cmdidx == CMD_SIZE || eap->cmdidx == CMD_Print)
++		&& *eap->cmd >= 'A' && *eap->cmd <= 'Z')
+ 	{
+ 	    /* User defined commands may contain digits. */
+ 	    while (ASCII_ISALNUM(*p))
+@@ -3182,6 +3252,9 @@
+ 	/* check for non-alpha command */
+ 	if (p == cmd && vim_strchr((char_u *)"@*!=><&~#", *p) != NULL)
+ 	    ++p;
++	/* for python 3.x: ":py3*" commands completion */
++	if (cmd[0] == 'p' && cmd[1] == 'y' && p == cmd + 2 && *p == '3')
++	    ++p;
+ 	len = (int)(p - cmd);
+ 
+ 	if (len == 0)
+@@ -3341,12 +3414,23 @@
+ 	return NULL;
+ 
+     /* Find start of last argument (argument just before cursor): */
+-    p = buff + STRLEN(buff);
+-    while (p != arg && *p != ' ' && *p != TAB)
+-	p--;
+-    if (*p == ' ' || *p == TAB)
+-	p++;
++    p = buff;
+     xp->xp_pattern = p;
++    len = (int)STRLEN(buff);
++    while (*p && p < buff + len)
++    {
++	if (*p == ' ' || *p == TAB)
++	{
++	    /* argument starts after a space */
++	    xp->xp_pattern = ++p;
++	}
++	else
++	{
++	    if (*p == '\\' && *(p + 1) != NUL)
++		++p; /* skip over escaped character */
++	    mb_ptr_adv(p);
++	}
++    }
+ 
+     if (ea.argt & XFILE)
+     {
+@@ -3455,6 +3539,23 @@
+ #endif
+ 	    }
+ 	}
++#if defined(FEAT_CMDL_COMPL)
++	/* Check for user names */
++	if (*xp->xp_pattern == '~')
++	{
++	    for (p = xp->xp_pattern + 1; *p != NUL && *p != '/'; ++p)
++		;
++	    /* Complete ~user only if it partially matches a user name.
++	     * A full match ~user<Tab> will be replaced by user's home
++	     * directory i.e. something like ~user<Tab> -> /home/user/ */
++	    if (*p == NUL && p > xp->xp_pattern + 1
++				       && match_user(xp->xp_pattern + 1) == 1)
++	    {
++		xp->xp_context = EXPAND_USER;
++		++xp->xp_pattern;
++	    }
++	}
++#endif
+     }
+ 
+ /*
+@@ -3465,7 +3566,8 @@
+ 	case CMD_find:
+ 	case CMD_sfind:
+ 	case CMD_tabfind:
+-	    xp->xp_context = EXPAND_FILES_IN_PATH;
++	    if (xp->xp_context == EXPAND_FILES)
++		xp->xp_context = EXPAND_FILES_IN_PATH;
+ 	    break;
+ 	case CMD_cd:
+ 	case CMD_chdir:
+@@ -3771,8 +3873,17 @@
+ 		    if (compl == EXPAND_MAPPINGS)
+ 			return set_context_in_map_cmd(xp, (char_u *)"map",
+ 					 arg, forceit, FALSE, FALSE, CMD_map);
+-		    while ((xp->xp_pattern = vim_strchr(arg, ' ')) != NULL)
+-			arg = xp->xp_pattern + 1;
++		    /* Find start of last argument. */
++		    p = arg;
++		    while (*p)
++		    {
++			if (*p == ' ')
++			    /* argument starts after a space */
++			    arg = p + 1;
++			else if (*p == '\\' && *(p + 1) != NUL)
++			    ++p; /* skip over escaped character */
++			mb_ptr_adv(p);
++		    }
+ 		    xp->xp_pattern = arg;
+ 		}
+ 		xp->xp_context = compl;
+@@ -3786,6 +3897,8 @@
+ 	case CMD_imap:	    case CMD_inoremap:
+ 	case CMD_cmap:	    case CMD_cnoremap:
+ 	case CMD_lmap:	    case CMD_lnoremap:
++	case CMD_smap:	    case CMD_snoremap:
++	case CMD_xmap:	    case CMD_xnoremap:
+ 	    return set_context_in_map_cmd(xp, cmd, arg, forceit,
+ 						     FALSE, FALSE, ea.cmdidx);
+ 	case CMD_unmap:
+@@ -3795,6 +3908,8 @@
+ 	case CMD_iunmap:
+ 	case CMD_cunmap:
+ 	case CMD_lunmap:
++	case CMD_sunmap:
++	case CMD_xunmap:
+ 	    return set_context_in_map_cmd(xp, cmd, arg, forceit,
+ 						      FALSE, TRUE, ea.cmdidx);
+ 	case CMD_abbreviate:	case CMD_noreabbrev:
+@@ -3843,13 +3958,24 @@
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+ 	case CMD_language:
+-	    if (*skiptowhite(arg) == NUL)
++	    p = skiptowhite(arg);
++	    if (*p == NUL)
+ 	    {
+ 		xp->xp_context = EXPAND_LANGUAGE;
+ 		xp->xp_pattern = arg;
+ 	    }
+ 	    else
+-		xp->xp_context = EXPAND_NOTHING;
++	    {
++		if ( STRNCMP(arg, "messages", p - arg) == 0
++		  || STRNCMP(arg, "ctype", p - arg) == 0
++		  || STRNCMP(arg, "time", p - arg) == 0)
++		{
++		    xp->xp_context = EXPAND_LOCALES;
++		    xp->xp_pattern = skipwhite(p);
++		}
++		else
++		    xp->xp_context = EXPAND_NOTHING;
++	    }
+ 	    break;
+ #endif
+ #if defined(FEAT_PROFILE)
+@@ -3859,8 +3985,16 @@
+ #endif
+ 	case CMD_behave:
+ 	    xp->xp_context = EXPAND_BEHAVE;
++	    xp->xp_pattern = arg;
+ 	    break;
+ 
++#if defined(FEAT_CMDHIST)
++	case CMD_history:
++	    xp->xp_context = EXPAND_HISTORY;
++	    xp->xp_pattern = arg;
++	    break;
++#endif
++
+ #endif /* FEAT_CMDL_COMPL */
+ 
+ 	default:
+@@ -4520,12 +4654,14 @@
+ 		else /* n == 2 */
+ 		{
+ 		    expand_T	xpc;
++		    int		options = WILD_LIST_NOTFOUND|WILD_ADD_SLASH;
+ 
+ 		    ExpandInit(&xpc);
+ 		    xpc.xp_context = EXPAND_FILES;
++		    if (p_wic)
++			options += WILD_ICASE;
+ 		    p = ExpandOne(&xpc, eap->arg, NULL,
+-					    WILD_LIST_NOTFOUND|WILD_ADD_SLASH,
+-						   WILD_EXPAND_FREE);
++						   options, WILD_EXPAND_FREE);
+ 		    if (p == NULL)
+ 			return FAIL;
+ 		}
+@@ -4777,12 +4913,10 @@
+ #ifdef FEAT_MBYTE
+     else if (STRNCMP(arg, "enc", 3) == 0)
+     {
+-	arg += 3;
+-	pp = &eap->force_enc;
+-    }
+-    else if (STRNCMP(arg, "encoding", 8) == 0)
+-    {
+-	arg += 8;
++	if (STRNCMP(arg, "encoding", 8) == 0)
++	    arg += 8;
++	else
++	    arg += 3;
+ 	pp = &eap->force_enc;
+     }
+     else if (STRNCMP(arg, "bad", 3) == 0)
+@@ -4894,7 +5028,7 @@
+     map_clear(eap->cmd, eap->arg, TRUE, TRUE);
+ }
+ 
+-#ifdef FEAT_AUTOCMD
++#if defined(FEAT_AUTOCMD) || defined(PROTO)
+     static void
+ ex_autocmd(eap)
+     exarg_T	*eap;
+@@ -4921,8 +5055,12 @@
+ ex_doautocmd(eap)
+     exarg_T	*eap;
+ {
+-    (void)do_doautocmd(eap->arg, TRUE);
+-    do_modelines(0);
++    char_u	*arg = eap->arg;
++    int		call_do_modelines = check_nomodeline(&arg);
++
++    (void)do_doautocmd(arg, TRUE);
++    if (call_do_modelines)  /* Only when there is no <nomodeline>. */
++	do_modelines(0);
+ }
+ #endif
+ 
+@@ -5087,12 +5225,14 @@
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG)
+ 	    if ((p_confirm || cmdmod.confirm) && curbuf->b_fname != NULL)
+ 	    {
+-		char_u	buff[IOSIZE];
++		char_u	buff[DIALOG_MSG_SIZE];
+ 
+ 		if (n == 1)
+-		    STRCPY(buff, _("1 more file to edit.  Quit anyway?"));
++		    vim_strncpy(buff,
++			    (char_u *)_("1 more file to edit.  Quit anyway?"),
++							 DIALOG_MSG_SIZE - 1);
+ 		else
+-		    vim_snprintf((char *)buff, IOSIZE,
++		    vim_snprintf((char *)buff, DIALOG_MSG_SIZE,
+ 			      _("%d more files to edit.  Quit anyway?"), n);
+ 		if (vim_dialog_yesno(VIM_QUESTION, NULL, buff, 1) == VIM_YES)
+ 		    return OK;
+@@ -5250,7 +5390,9 @@
+ #endif
+     return FAIL;
+ }
++#endif
+ 
++#if defined(FEAT_USR_CMDS) || defined(FEAT_EVAL) || defined(PROTO)
+ /*
+  * List of names for completion for ":command" with the EXPAND_ flag.
+  * Must be alphabetical for completion.
+@@ -5262,8 +5404,11 @@
+ } command_complete[] =
+ {
+     {EXPAND_AUGROUP, "augroup"},
++    {EXPAND_BEHAVE, "behave"},
+     {EXPAND_BUFFERS, "buffer"},
++    {EXPAND_COLORS, "color"},
+     {EXPAND_COMMANDS, "command"},
++    {EXPAND_COMPILER, "compiler"},
+ #if defined(FEAT_CSCOPE)
+     {EXPAND_CSCOPE, "cscope"},
+ #endif
+@@ -5276,10 +5421,18 @@
+     {EXPAND_EVENTS, "event"},
+     {EXPAND_EXPRESSION, "expression"},
+     {EXPAND_FILES, "file"},
++    {EXPAND_FILES_IN_PATH, "file_in_path"},
+     {EXPAND_FILETYPE, "filetype"},
+     {EXPAND_FUNCTIONS, "function"},
+     {EXPAND_HELP, "help"},
+     {EXPAND_HIGHLIGHT, "highlight"},
++#if defined(FEAT_CMDHIST)
++    {EXPAND_HISTORY, "history"},
++#endif
++#if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
++	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
++    {EXPAND_LOCALES, "locale"},
++#endif
+     {EXPAND_MAPPINGS, "mapping"},
+     {EXPAND_MENUS, "menu"},
+     {EXPAND_OWNSYNTAX, "syntax"},
+@@ -5290,10 +5443,13 @@
+ #endif
+     {EXPAND_TAGS, "tag"},
+     {EXPAND_TAGS_LISTFILES, "tag_listfiles"},
++    {EXPAND_USER, "user"},
+     {EXPAND_USER_VARS, "var"},
+     {0, NULL}
+ };
++#endif
+ 
++#if defined(FEAT_USR_CMDS) || defined(PROTO)
+     static void
+ uc_list(name, name_len)
+     char_u	*name;
+@@ -5587,6 +5743,7 @@
+     int	    compl = EXPAND_NOTHING;
+     char_u  *compl_arg = NULL;
+     int	    has_attr = (eap->arg[0] == '-');
++    int	    name_len;
+ 
+     p = eap->arg;
+ 
+@@ -5612,6 +5769,7 @@
+ 	return;
+     }
+     end = p;
++    name_len = (int)(end - name);
+ 
+     /* If there is nothing after the name, and no attributes were specified,
+      * we are listing commands
+@@ -5626,6 +5784,13 @@
+ 	EMSG(_("E183: User defined commands must start with an uppercase letter"));
+ 	return;
+     }
++    else if ((name_len == 1 && *name == 'X')
++	  || (name_len <= 4
++		  && STRNCMP(name, "Next", name_len > 4 ? 4 : name_len) == 0))
++    {
++	EMSG(_("E841: Reserved name, cannot be used for user defined command"));
++	return;
++    }
+     else
+ 	uc_add_command(name, end - name, p, argt, def, flags, compl, compl_arg,
+ 								eap->forceit);
+@@ -5750,8 +5915,14 @@
+ 	}
+ 	else
+ 	{
++#ifdef FEAT_MBYTE
++	    int charlen = (*mb_ptr2len)(p);
++	    len += charlen;
++	    p += charlen;
++#else
+ 	    ++len;
+ 	    ++p;
++#endif
+ 	}
+     }
+ 
+@@ -5794,7 +5965,7 @@
+ 	}
+ 	else
+ 	{
+-	    *q++ = *p++;
++	    MB_COPY_CHAR(p, q);
+ 	}
+     }
+     *q++ = '"';
+@@ -5888,7 +6059,14 @@
+ 	    result = STRLEN(eap->arg) + 2;
+ 	    for (p = eap->arg; *p; ++p)
+ 	    {
+-		if (*p == '\\' || *p == '"')
++#ifdef  FEAT_MBYTE
++		if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
++		    /* DBCS can contain \ in a trail byte, skip the
++		     * double-byte character. */
++		    ++p;
++		else
++#endif
++		     if (*p == '\\' || *p == '"')
+ 		    ++result;
+ 	    }
+ 
+@@ -5897,7 +6075,14 @@
+ 		*buf++ = '"';
+ 		for (p = eap->arg; *p; ++p)
+ 		{
+-		    if (*p == '\\' || *p == '"')
++#ifdef  FEAT_MBYTE
++		    if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2)
++			/* DBCS can contain \ in a trail byte, copy the
++			 * double-byte character to avoid escaping. */
++			*buf++ = *p++;
++		    else
++#endif
++			 if (*p == '\\' || *p == '"')
+ 			*buf++ = '\\';
+ 		    *buf++ = *p;
+ 		}
+@@ -6039,15 +6224,17 @@
+ 		end = vim_strchr(start + 1, '>');
+ 	    if (buf != NULL)
+ 	    {
+-		ksp = vim_strchr(p, K_SPECIAL);
+-		if (ksp != NULL && (start == NULL || ksp < start || end == NULL)
++		for (ksp = p; *ksp != NUL && *ksp != K_SPECIAL; ++ksp)
++		    ;
++		if (*ksp == K_SPECIAL
++			&& (start == NULL || ksp < start || end == NULL)
+ 			&& ((ksp[1] == KS_SPECIAL && ksp[2] == KE_FILLER)
+ # ifdef FEAT_GUI
+ 			    || (ksp[1] == KS_EXTRA && ksp[2] == (int)KE_CSI)
+ # endif
+ 			    ))
+ 		{
+-		    /* K_SPECIAL han been put in the buffer as K_SPECIAL
++		    /* K_SPECIAL has been put in the buffer as K_SPECIAL
+ 		     * KS_SPECIAL KE_FILLER, like for mappings, but
+ 		     * do_cmdline() doesn't handle that, so convert it back.
+ 		     * Also change K_SPECIAL KS_EXTRA KE_CSI into CSI. */
+@@ -6207,10 +6394,12 @@
+     int		vallen;
+     int		*complp;
+     long	*argt;
+-    char_u	**compl_arg;
++    char_u	**compl_arg UNUSED;
+ {
+     char_u	*arg = NULL;
++# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+     size_t	arglen = 0;
++# endif
+     int		i;
+     int		valend = vallen;
+ 
+@@ -6220,7 +6409,9 @@
+ 	if (value[i] == ',')
+ 	{
+ 	    arg = &value[i + 1];
++# if defined(FEAT_EVAL) && defined(FEAT_CMDL_COMPL)
+ 	    arglen = vallen - i - 1;
++# endif
+ 	    valend = i;
+ 	    break;
+ 	}
+@@ -6302,7 +6493,7 @@
+ #endif
+     }
+     else if (load_colors(eap->arg) == FAIL)
+-	EMSG2(_("E185: Cannot find color scheme %s"), eap->arg);
++	EMSG2(_("E185: Cannot find color scheme '%s'"), eap->arg);
+ }
+ 
+     static void
+@@ -6347,7 +6538,10 @@
+ 	return;
+     }
+ #ifdef FEAT_AUTOCMD
+-    if (curbuf_locked())
++    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
++    /* Refuse to quit when locked or when the buffer in the last window is
++     * being closed (can only happen in autocommands). */
++    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
+ 	return;
+ #endif
+ 
+@@ -6419,7 +6613,10 @@
+ 	return;
+     }
+ #ifdef FEAT_AUTOCMD
+-    if (curbuf_locked())
++    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
++    /* Refuse to quit when locked or when the buffer in the last window is
++     * being closed (can only happen in autocommands). */
++    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
+ 	return;
+ #endif
+ 
+@@ -6439,7 +6636,7 @@
+ {
+ # ifdef FEAT_CMDWIN
+     if (cmdwin_type != 0)
+-	cmdwin_result = K_IGNORE;
++	cmdwin_result = Ctrl_C;
+     else
+ # endif
+ 	if (!text_locked()
+@@ -6755,7 +6952,10 @@
+ 	return;
+     }
+ #ifdef FEAT_AUTOCMD
+-    if (curbuf_locked())
++    apply_autocmds(EVENT_QUITPRE, NULL, NULL, FALSE, curbuf);
++    /* Refuse to quit when locked or when the buffer in the last window is
++     * being closed (can only happen in autocommands). */
++    if (curbuf_locked() || (curbuf->b_nwindows == 1 && curbuf->b_closing))
+ 	return;
+ #endif
+ 
+@@ -6897,9 +7097,7 @@
+ # ifdef FEAT_WINDOWS
+ 	if (win_split(0, 0) == FAIL)
+ 	    return;
+-#  ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;
+-#  endif
++	RESET_BINDING(curwin);
+ 
+ 	/* When splitting the window, create a new alist.  Otherwise the
+ 	 * existing one is overwritten. */
+@@ -7026,7 +7224,7 @@
+ 	old_arg_count = GARGCOUNT;
+ 	if (expand_wildcards(old_arg_count, old_arg_files,
+ 		    &new_arg_file_count, &new_arg_files,
+-		    EW_FILE|EW_NOTFOUND|EW_ADDSLASH) == OK
++		    EW_FILE|EW_NOTFOUND|EW_ADDSLASH|EW_NOERROR) == OK
+ 		&& new_arg_file_count > 0)
+ 	{
+ 	    alist_set(&global_alist, new_arg_file_count, new_arg_files,
+@@ -7299,7 +7497,9 @@
+ 		|| cmdmod.browse
+ #  endif
+ 	   )
+-	    curwin->w_p_scb = FALSE;
++	{
++	    RESET_BINDING(curwin);
++	}
+ 	else
+ 	    do_check_scrollbind(FALSE);
+ # endif
+@@ -7364,7 +7564,42 @@
+ ex_tabmove(eap)
+     exarg_T	*eap;
+ {
+-    tabpage_move(eap->addr_count == 0 ? 9999 : (int)eap->line2);
++    int tab_number = 9999;
++
++    if (eap->arg && *eap->arg != NUL)
++    {
++	char_u *p = eap->arg;
++	int    relative = 0; /* argument +N/-N means: move N places to the
++			      * right/left relative to the current position. */
++
++	if (*eap->arg == '-')
++	{
++	    relative = -1;
++	    p = eap->arg + 1;
++	}
++	else if (*eap->arg == '+')
++	{
++	    relative = 1;
++	    p = eap->arg + 1;
++	}
++	else
++	    p = eap->arg;
++
++	if (p == skipdigits(p))
++	{
++	    /* No numbers as argument. */
++	    eap->errmsg = e_invarg;
++	    return;
++	}
++
++	tab_number = getdigits(&p);
++	if (relative != 0)
++	    tab_number = tab_number * relative + tabpage_index(curtab) - 1;;
++    }
++    else if (eap->addr_count != 0)
++	tab_number = eap->line2;
++
++    tabpage_move(tab_number);
+ }
+ 
+ /*
+@@ -7400,7 +7635,7 @@
+ 	    msg_putchar(bufIsChanged(wp->w_buffer) ? '+' : ' ');
+ 	    msg_putchar(' ');
+ 	    if (buf_spname(wp->w_buffer) != NULL)
+-		STRCPY(IObuff, buf_spname(wp->w_buffer));
++		vim_strncpy(IObuff, buf_spname(wp->w_buffer), IOSIZE - 1);
+ 	    else
+ 		home_replace(wp->w_buffer, wp->w_buffer->b_fname,
+ 							IObuff, IOSIZE, TRUE);
+@@ -7953,6 +8188,37 @@
+ }
+ #endif
+ 
++/*
++ * Deal with the side effects of changing the current directory.
++ * When "local" is TRUE then this was after an ":lcd" command.
++ */
++    void
++post_chdir(local)
++    int		local;
++{
++    vim_free(curwin->w_localdir);
++    if (local)
++    {
++	/* If still in global directory, need to remember current
++	 * directory as global directory. */
++	if (globaldir == NULL && prev_dir != NULL)
++	    globaldir = vim_strsave(prev_dir);
++	/* Remember this local directory for the window. */
++	if (mch_dirname(NameBuff, MAXPATHL) == OK)
++	    curwin->w_localdir = vim_strsave(NameBuff);
++    }
++    else
++    {
++	/* We are now in the global directory, no need to remember its
++	 * name. */
++	vim_free(globaldir);
++	globaldir = NULL;
++	curwin->w_localdir = NULL;
++    }
++
++    shorten_fnames(TRUE);
++}
++
+ 
+ /*
+  * ":cd", ":lcd", ":chdir" and ":lchdir".
+@@ -8024,27 +8290,7 @@
+ 	    EMSG(_(e_failed));
+ 	else
+ 	{
+-	    vim_free(curwin->w_localdir);
+-	    if (eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir)
+-	    {
+-		/* If still in global directory, need to remember current
+-		 * directory as global directory. */
+-		if (globaldir == NULL && prev_dir != NULL)
+-		    globaldir = vim_strsave(prev_dir);
+-		/* Remember this local directory for the window. */
+-		if (mch_dirname(NameBuff, MAXPATHL) == OK)
+-		    curwin->w_localdir = vim_strsave(NameBuff);
+-	    }
+-	    else
+-	    {
+-		/* We are now in the global directory, no need to remember its
+-		 * name. */
+-		vim_free(globaldir);
+-		globaldir = NULL;
+-		curwin->w_localdir = NULL;
+-	    }
+-
+-	    shorten_fnames(TRUE);
++	    post_chdir(eap->cmdidx == CMD_lcd || eap->cmdidx == CMD_lchdir);
+ 
+ 	    /* Echo the new current directory if the command was typed. */
+ 	    if (KeyTyped || p_verbose >= 5)
+@@ -8122,6 +8368,12 @@
+     {
+ 	ui_delay(msec - done > 1000L ? 1000L : msec - done, TRUE);
+ 	ui_breakcheck();
++#ifdef FEAT_NETBEANS_INTG
++	/* Process the netbeans messages that may have been received in the
++	 * call to ui_breakcheck() when the GUI is in use. This may occur when
++	 * running a test case. */
++	netbeans_parse_messages();
++#endif
+     }
+ }
+ 
+@@ -8193,7 +8445,7 @@
+     p = skipwhite(p);
+     if (*p != NUL && *p != '"' && eap->nextcmd == NULL)
+ 	EMSG(_(e_invarg));
+-    else
++    else if (!eap->skip)
+     {
+ 	/* Pass flags on for ":vertical wincmd ]". */
+ 	postponed_split_flags = cmdmod.split;
+@@ -8428,7 +8680,7 @@
+ 	}
+ 	++eap->line2;
+     }
+-    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE);
++    (void)do_join(eap->line2 - eap->line1 + 1, !eap->forceit, TRUE, TRUE);
+     beginline(BL_WHITE | BL_FIX);
+     ex_may_print(eap);
+ }
+@@ -8907,35 +9159,42 @@
+ 		failed = TRUE;
+ 	    if (eap->cmdidx == CMD_mksession)
+ 	    {
+-		char_u dirnow[MAXPATHL];	/* current directory */
++		char_u *dirnow;	 /* current directory */
+ 
+-		/*
+-		 * Change to session file's dir.
+-		 */
+-		if (mch_dirname(dirnow, MAXPATHL) == FAIL
+-					    || mch_chdir((char *)dirnow) != 0)
+-		    *dirnow = NUL;
+-		if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
+-		{
+-		    if (vim_chdirfile(fname) == OK)
+-			shorten_fnames(TRUE);
+-		}
+-		else if (*dirnow != NUL
+-			&& (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
++		dirnow = alloc(MAXPATHL);
++		if (dirnow == NULL)
++		    failed = TRUE;
++		else
+ 		{
+-		    if (mch_chdir((char *)globaldir) == 0)
+-			shorten_fnames(TRUE);
+-		}
++		    /*
++		     * Change to session file's dir.
++		     */
++		    if (mch_dirname(dirnow, MAXPATHL) == FAIL
++					    || mch_chdir((char *)dirnow) != 0)
++			*dirnow = NUL;
++		    if (*dirnow != NUL && (ssop_flags & SSOP_SESDIR))
++		    {
++			if (vim_chdirfile(fname) == OK)
++			    shorten_fnames(TRUE);
++		    }
++		    else if (*dirnow != NUL
++			   && (ssop_flags & SSOP_CURDIR) && globaldir != NULL)
++		    {
++			if (mch_chdir((char *)globaldir) == 0)
++			    shorten_fnames(TRUE);
++		    }
+ 
+-		failed |= (makeopens(fd, dirnow) == FAIL);
++		    failed |= (makeopens(fd, dirnow) == FAIL);
+ 
+-		/* restore original dir */
+-		if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
++		    /* restore original dir */
++		    if (*dirnow != NUL && ((ssop_flags & SSOP_SESDIR)
+ 			|| ((ssop_flags & SSOP_CURDIR) && globaldir != NULL)))
+-		{
+-		    if (mch_chdir((char *)dirnow) != 0)
+-			EMSG(_(e_prev_dir));
+-		    shorten_fnames(TRUE);
++		    {
++			if (mch_chdir((char *)dirnow) != 0)
++			    EMSG(_(e_prev_dir));
++			shorten_fnames(TRUE);
++		    }
++		    vim_free(dirnow);
+ 		}
+ 	    }
+ 	    else
+@@ -8966,10 +9225,15 @@
+ 	else if (eap->cmdidx == CMD_mksession)
+ 	{
+ 	    /* successful session write - set this_session var */
+-	    char_u	tbuf[MAXPATHL];
++	    char_u	*tbuf;
+ 
+-	    if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
+-		set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
++	    tbuf = alloc(MAXPATHL);
++	    if (tbuf != NULL)
++	    {
++		if (vim_FullName(fname, tbuf, MAXPATHL, FALSE) == OK)
++		    set_vim_var_string(VV_THIS_SESSION, tbuf, -1);
++		vim_free(tbuf);
++	    }
+ 	}
+ #endif
+ #ifdef MKSESSION_NL
+@@ -9295,7 +9559,7 @@
+ 								  && !got_int)
+     {
+ 	update_topline_cursor();
+-	normal_cmd(&oa, FALSE);	/* execute a Normal mode cmd */
++	normal_cmd(&oa, TRUE);	/* execute a Normal mode cmd */
+     }
+ }
+ #endif
+@@ -9393,7 +9657,7 @@
+ ex_ptag(eap)
+     exarg_T	*eap;
+ {
+-    g_do_tagpreview = p_pvh;
++    g_do_tagpreview = p_pvh;  /* will be reset to 0 in ex_tag_cmd() */
+     ex_tag_cmd(eap, cmdnames[eap->cmdidx].cmd_name + 1);
+ }
+ 
+@@ -9525,17 +9789,23 @@
+ #define SPEC_CFILE  4
+ 		    "<sfile>",		/* ":so" file name */
+ #define SPEC_SFILE  5
++		    "<slnum>",		/* ":so" file line number */
++#define SPEC_SLNUM  6
+ #ifdef FEAT_AUTOCMD
+ 		    "<afile>",		/* autocommand file name */
+-# define SPEC_AFILE 6
++# define SPEC_AFILE 7
+ 		    "<abuf>",		/* autocommand buffer number */
+-# define SPEC_ABUF  7
++# define SPEC_ABUF  8
+ 		    "<amatch>",		/* autocommand match name */
+-# define SPEC_AMATCH 8
++# define SPEC_AMATCH 9
+ #endif
+ #ifdef FEAT_CLIENTSERVER
+ 		    "<client>"
+-# define SPEC_CLIENT 9
++# ifdef FEAT_AUTOCMD
++#  define SPEC_CLIENT 10
++# else
++#  define SPEC_CLIENT 7
++# endif
+ #endif
+     };
+ 
+@@ -9560,6 +9830,7 @@
+  *	  '<cWORD>' to WORD under the cursor
+  *	  '<cfile>' to path name under the cursor
+  *	  '<sfile>' to sourced file name
++ *	  '<slnum>' to sourced file line number
+  *	  '<afile>' to file name for autocommand
+  *	  '<abuf>'  to buffer number for autocommand
+  *	  '<amatch>' to matching name for autocommand
+@@ -9591,10 +9862,7 @@
+ #ifdef FEAT_MODIFY_FNAME
+     int		skip_mod = FALSE;
+ #endif
+-
+-#if defined(FEAT_AUTOCMD) || defined(FEAT_CLIENTSERVER)
+     char_u	strbuf[30];
+-#endif
+ 
+     *errormsg = NULL;
+     if (escaped != NULL)
+@@ -9653,14 +9921,7 @@
+ 		    valid = 0;	    /* Must have ":p:h" to be valid */
+ 		}
+ 		else
+-#ifdef RISCOS
+-		    /* Always use the full path for RISC OS if possible. */
+-		    result = curbuf->b_ffname;
+-		    if (result == NULL)
+-			result = curbuf->b_fname;
+-#else
+ 		    result = curbuf->b_fname;
+-#endif
+ 		break;
+ 
+ 	case SPEC_HASH:		/* '#' or "#99": alternate file */
+@@ -9783,6 +10044,15 @@
+ 		    return NULL;
+ 		}
+ 		break;
++	case SPEC_SLNUM:	/* line in file for ":so" command */
++		if (sourcing_name == NULL || sourcing_lnum == 0)
++		{
++		    *errormsg = (char_u *)_("E842: no line number to use for \"<slnum>\"");
++		    return NULL;
++		}
++		sprintf((char *)strbuf, "%ld", (long)sourcing_lnum);
++		result = strbuf;
++		break;
+ #if defined(FEAT_CLIENTSERVER)
+ 	case SPEC_CLIENT:	/* Source of last submitted input */
+ 		sprintf((char *)strbuf, PRINTF_HEX_LONG_U,
+@@ -9796,11 +10066,7 @@
+ 	if (src[*usedlen] == '<')	/* remove the file name extension */
+ 	{
+ 	    ++*usedlen;
+-#ifdef RISCOS
+-	    if ((s = vim_strrchr(result, '/')) != NULL && s >= gettail(result))
+-#else
+ 	    if ((s = vim_strrchr(result, '.')) != NULL && s >= gettail(result))
+-#endif
+ 		resultlen = (int)(s - result);
+ 	}
+ #ifdef FEAT_MODIFY_FNAME
+@@ -10593,24 +10859,24 @@
+ 	    {
+ 		if (fprintf(fd,
+ 			  "let s:c = %ld - ((%ld * winwidth(0) + %ld) / %ld)",
+-			    (long)wp->w_cursor.col,
+-			    (long)(wp->w_cursor.col - wp->w_leftcol),
++			    (long)wp->w_virtcol + 1,
++			    (long)(wp->w_virtcol - wp->w_leftcol),
+ 			    (long)wp->w_width / 2, (long)wp->w_width) < 0
+ 			|| put_eol(fd) == FAIL
+ 			|| put_line(fd, "if s:c > 0") == FAIL
+ 			|| fprintf(fd,
+-			    "  exe 'normal! 0' . s:c . 'lzs' . (%ld - s:c) . 'l'",
+-			    (long)wp->w_cursor.col) < 0
++			    "  exe 'normal! ' . s:c . '|zs' . %ld . '|'",
++			    (long)wp->w_virtcol + 1) < 0
+ 			|| put_eol(fd) == FAIL
+ 			|| put_line(fd, "else") == FAIL
+-			|| fprintf(fd, "  normal! 0%dl", wp->w_cursor.col) < 0
++			|| fprintf(fd, "  normal! 0%d|", wp->w_virtcol + 1) < 0
+ 			|| put_eol(fd) == FAIL
+ 			|| put_line(fd, "endif") == FAIL)
+ 		    return FAIL;
+ 	    }
+ 	    else
+ 	    {
+-		if (fprintf(fd, "normal! 0%dl", wp->w_cursor.col) < 0
++		if (fprintf(fd, "normal! 0%d|", wp->w_virtcol + 1) < 0
+ 			|| put_eol(fd) == FAIL)
+ 		    return FAIL;
+ 	    }
+@@ -10645,7 +10911,7 @@
+     unsigned	*flagp;
+ {
+     int		i;
+-    char_u	buf[MAXPATHL];
++    char_u	*buf = NULL;
+     char_u	*s;
+ 
+     if (gap->ga_len == 0)
+@@ -10660,11 +10926,19 @@
+ 	{
+ 	    if (fullname)
+ 	    {
+-		(void)vim_FullName(s, buf, MAXPATHL, FALSE);
+-		s = buf;
++		buf = alloc(MAXPATHL);
++		if (buf != NULL)
++		{
++		    (void)vim_FullName(s, buf, MAXPATHL, FALSE);
++		    s = buf;
++		}
+ 	    }
+ 	    if (fputs(" ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL)
++	    {
++		vim_free(buf);
+ 		return FAIL;
++	    }
++	    vim_free(buf);
+ 	}
+     }
+     return put_eol(fd);
+@@ -10707,7 +10981,7 @@
+  * Write a file name to the session file.
+  * Takes care of the "slash" option in 'sessionoptions' and escapes special
+  * characters.
+- * Returns FAIL if writing fails.
++ * Returns FAIL if writing fails or out of memory.
+  */
+     static int
+ ses_put_fname(fd, name, flagp)
+@@ -10716,49 +10990,32 @@
+     unsigned	*flagp;
+ {
+     char_u	*sname;
++    char_u	*p;
+     int		retval = OK;
+-    int		c;
+ 
+     sname = home_replace_save(NULL, name);
+-    if (sname != NULL)
+-	name = sname;
+-    while (*name != NUL)
+-    {
+-#ifdef FEAT_MBYTE
+-	{
+-	    int l;
++    if (sname == NULL)
++	return FAIL;
+ 
+-	    if (has_mbyte && (l = (*mb_ptr2len)(name)) > 1)
+-	    {
+-		/* copy a multibyte char */
+-		while (--l >= 0)
+-		{
+-		    if (putc(*name, fd) != *name)
+-			retval = FAIL;
+-		    ++name;
+-		}
+-		continue;
+-	    }
+-	}
+-#endif
+-	c = *name++;
+-	if (c == '\\' && (*flagp & SSOP_SLASH))
+-	    /* change a backslash to a forward slash */
+-	    c = '/';
+-	else if ((vim_strchr(escape_chars, c) != NULL
+-#ifdef BACKSLASH_IN_FILENAME
+-		    && c != '\\'
+-#endif
+-		 ) || c == '#' || c == '%')
+-	{
+-	    /* escape a special character with a backslash */
+-	    if (putc('\\', fd) != '\\')
+-		retval = FAIL;
+-	}
+-	if (putc(c, fd) != c)
+-	    retval = FAIL;
++    if (*flagp & SSOP_SLASH)
++    {
++	/* change all backslashes to forward slashes */
++	for (p = sname; *p != NUL; mb_ptr_adv(p))
++	    if (*p == '\\')
++		*p = '/';
+     }
++
++    /* escape special characters */
++    p = vim_strsave_fnameescape(sname, FALSE);
+     vim_free(sname);
++    if (p == NULL)
++	return FAIL;
++
++    /* write the result */
++    if (fputs((char *)p, fd) < 0)
++	retval = FAIL;
++
++    vim_free(p);
+     return retval;
+ }
+ 
+@@ -10826,8 +11083,7 @@
+ 	    else if (vim_ispathsep(*p))
+ 	    {
+ 		*s++ = '=';
+-#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(RISCOS) \
+-	|| defined(VMS)
++#if defined(BACKSLASH_IN_FILENAME) || defined(AMIGA) || defined(VMS)
+ 		if (*p == ':')
+ 		    *s++ = '-';
+ 		else
+@@ -10910,7 +11166,7 @@
+ 
+ #if defined(FEAT_GUI_DIALOG) || defined(FEAT_CON_DIALOG) || defined(PROTO)
+ /*
+- * Make a dialog message in "buff[IOSIZE]".
++ * Make a dialog message in "buff[DIALOG_MSG_SIZE]".
+  * "format" must contain "%s".
+  */
+     void
+@@ -10921,7 +11177,7 @@
+ {
+     if (fname == NULL)
+ 	fname = (char_u *)_("Untitled");
+-    vim_snprintf((char *)buff, IOSIZE, format, fname);
++    vim_snprintf((char *)buff, DIALOG_MSG_SIZE, format, fname);
+ }
+ #endif
+ 
+diff -Naur vim73.orig/src/ex_eval.c vim73/src/ex_eval.c
+--- vim73.orig/src/ex_eval.c	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/ex_eval.c	2013-06-07 17:07:30.758920844 +0000
+@@ -44,7 +44,7 @@
+  * executed.  Otherwise, errors and/or interrupts are converted into catchable
+  * exceptions (did_throw additionally set), which terminate the script only if
+  * not caught.  For user exceptions, only did_throw is set.  (Note: got_int can
+- * be set asyncronously afterwards by a SIGINT, so did_throw && got_int is not
++ * be set asynchronously afterwards by a SIGINT, so did_throw && got_int is not
+  * a reliant test that the exception currently being thrown is an interrupt
+  * exception.  Similarly, did_emsg can be set afterwards on an error in an
+  * (unskipped) conditional command inside an inactive conditional, so did_throw
+@@ -2091,11 +2091,11 @@
+  * Values used for "searched_cond" are (CSF_WHILE | CSF_FOR) or CSF_TRY or 0,
+  * the latter meaning the innermost try conditional not in its finally clause.
+  * "inclusive" tells whether the conditional searched for should be made
+- * inactive itself (a try conditional not in its finally claused possibly find
++ * inactive itself (a try conditional not in its finally clause possibly find
+  * before is always made inactive).  If "inclusive" is TRUE and
+  * "searched_cond" is CSF_TRY|CSF_SILENT, the saved former value of
+  * "emsg_silent", if reset when the try conditional finally reached was
+- * entered, is restored (unsed by ex_endtry()).  This is normally done only
++ * entered, is restored (used by ex_endtry()).  This is normally done only
+  * when such a try conditional is left.
+  */
+     int
+diff -Naur vim73.orig/src/ex_getln.c vim73/src/ex_getln.c
+--- vim73.orig/src/ex_getln.c	2010-08-14 15:25:45.000000000 +0000
++++ vim73/src/ex_getln.c	2013-06-07 17:07:30.808920701 +0000
+@@ -25,7 +25,7 @@
+     int		cmdlen;		/* number of chars in command line */
+     int		cmdpos;		/* current cursor position */
+     int		cmdspos;	/* cursor column on screen */
+-    int		cmdfirstc;	/* ':', '/', '?', '=' or NUL */
++    int		cmdfirstc;	/* ':', '/', '?', '=', '>' or NUL */
+     int		cmdindent;	/* number of spaces before cmdline */
+     char_u	*cmdprompt;	/* message in front of cmdline */
+     int		cmdattr;	/* attributes for prompt */
+@@ -56,6 +56,7 @@
+ typedef struct hist_entry
+ {
+     int		hisnum;		/* identifying number */
++    int		viminfo;	/* when TRUE hisstr comes from viminfo */
+     char_u	*hisstr;	/* actual entry, separator char after the NUL */
+ } histentry_T;
+ 
+@@ -67,7 +68,7 @@
+ 
+ static int	hist_char2type __ARGS((int c));
+ 
+-static int	in_history __ARGS((int, char_u *, int));
++static int	in_history __ARGS((int, char_u *, int, int, int));
+ # ifdef FEAT_EVAL
+ static int	calc_hist_idx __ARGS((int histype, int num));
+ # endif
+@@ -102,7 +103,7 @@
+ static void	redrawcmdprompt __ARGS((void));
+ static void	cursorcmd __ARGS((void));
+ static int	ccheck_abbr __ARGS((int));
+-static int	nextwild __ARGS((expand_T *xp, int type, int options));
++static int	nextwild __ARGS((expand_T *xp, int type, int options, int escape));
+ static void	escape_fname __ARGS((char_u **pp));
+ static int	showmatches __ARGS((expand_T *xp, int wildmenu));
+ static void	set_expand_context __ARGS((expand_T *xp));
+@@ -110,17 +111,31 @@
+ static int	expand_showtail __ARGS((expand_T *xp));
+ #ifdef FEAT_CMDL_COMPL
+ static int	expand_shellcmd __ARGS((char_u *filepat, int *num_file, char_u ***file, int flagsarg));
+-static int	ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname));
++static int	ExpandRTDir __ARGS((char_u *pat, int *num_file, char_u ***file, char *dirname[]));
++# ifdef FEAT_CMDHIST
++static char_u	*get_history_arg __ARGS((expand_T *xp, int idx));
++# endif
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+ static int	ExpandUserDefined __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file));
+ static int	ExpandUserList __ARGS((expand_T *xp, int *num_file, char_u ***file));
+ # endif
+ #endif
++#ifdef FEAT_CMDHIST
++static void	clear_hist_entry __ARGS((histentry_T *hisptr));
++#endif
+ 
+ #ifdef FEAT_CMDWIN
+ static int	ex_window __ARGS((void));
+ #endif
+ 
++#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++static int
++#ifdef __BORLANDC__
++_RTLENTRYF
++#endif
++sort_func_compare __ARGS((const void *s1, const void *s2));
++#endif
++
+ /*
+  * getcmdline() - accept a command line starting with firstc.
+  *
+@@ -637,7 +652,11 @@
+ 		}
+ 		else if (ccline.cmdpos > i)
+ 		    cmdline_del(i);
++
++		/* Now complete in the new directory. Set KeyTyped in case the
++		 * Up key came from a mapping. */
+ 		c = p_wc;
++		KeyTyped = TRUE;
+ 	    }
+ 	}
+ 
+@@ -652,9 +671,10 @@
+ 	    c = plain_vgetc();
+ 	    --no_mapping;
+ 	    --allow_keys;
+-	    /* CTRL-\ e doesn't work when obtaining an expression. */
+-	    if (c != Ctrl_N && c != Ctrl_G
+-				     && (c != 'e' || ccline.cmdfirstc == '='))
++	    /* CTRL-\ e doesn't work when obtaining an expression, unless it
++	     * is in a mapping. */
++	    if (c != Ctrl_N && c != Ctrl_G && (c != 'e'
++				    || (ccline.cmdfirstc == '=' && KeyTyped)))
+ 	    {
+ 		vungetc(c);
+ 		c = Ctrl_BSL;
+@@ -688,28 +708,35 @@
+ 		    p = get_expr_line();
+ 		    --textlock;
+ 		    restore_cmdline(&save_ccline);
+-		    len = (int)STRLEN(p);
+ 
+-		    if (p != NULL && realloc_cmdbuff(len + 1) == OK)
++		    if (p != NULL)
+ 		    {
+-			ccline.cmdlen = len;
+-			STRCPY(ccline.cmdbuff, p);
+-			vim_free(p);
+-
+-			/* Restore the cursor or use the position set with
+-			 * set_cmdline_pos(). */
+-			if (new_cmdpos > ccline.cmdlen)
+-			    ccline.cmdpos = ccline.cmdlen;
+-			else
+-			    ccline.cmdpos = new_cmdpos;
+-
+-			KeyTyped = FALSE;	/* Don't do p_wc completion. */
+-			redrawcmd();
+-			goto cmdline_changed;
++			len = (int)STRLEN(p);
++			if (realloc_cmdbuff(len + 1) == OK)
++			{
++			    ccline.cmdlen = len;
++			    STRCPY(ccline.cmdbuff, p);
++			    vim_free(p);
++
++			    /* Restore the cursor or use the position set with
++			     * set_cmdline_pos(). */
++			    if (new_cmdpos > ccline.cmdlen)
++				ccline.cmdpos = ccline.cmdlen;
++			    else
++				ccline.cmdpos = new_cmdpos;
++
++			    KeyTyped = FALSE;	/* Don't do p_wc completion. */
++			    redrawcmd();
++			    goto cmdline_changed;
++			}
+ 		    }
+ 		}
+ 		beep_flush();
+-		c = ESC;
++		got_int = FALSE;	/* don't abandon the command line */
++		did_emsg = FALSE;
++		emsg_on_display = FALSE;
++		redrawcmd();
++		goto cmdline_not_changed;
+ 	    }
+ #endif
+ 	    else
+@@ -787,9 +814,11 @@
+ 		    did_wild_list = TRUE;
+ 		}
+ 		if (wim_flags[wim_index] & WIM_LONGEST)
+-		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
++		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
++							       firstc != '@');
+ 		else if (wim_flags[wim_index] & WIM_FULL)
+-		    res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP);
++		    res = nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
++							       firstc != '@');
+ 		else
+ 		    res = OK;	    /* don't insert 'wildchar' now */
+ 	    }
+@@ -800,9 +829,11 @@
+ 		/* if 'wildmode' first contains "longest", get longest
+ 		 * common part */
+ 		if (wim_flags[0] & WIM_LONGEST)
+-		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
++		    res = nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
++							       firstc != '@');
+ 		else
+-		    res = nextwild(&xpc, WILD_EXPAND_KEEP, WILD_NO_BEEP);
++		    res = nextwild(&xpc, WILD_EXPAND_KEEP, WILD_NO_BEEP,
++							       firstc != '@');
+ 
+ 		/* if interrupted while completing, behave like it failed */
+ 		if (got_int)
+@@ -837,7 +868,8 @@
+ 			    int p_wmnu_save = p_wmnu;
+ 			    p_wmnu = 0;
+ #endif
+-			    nextwild(&xpc, WILD_PREV, 0); /* remove match */
++			    /* remove match */
++			    nextwild(&xpc, WILD_PREV, 0, firstc != '@');
+ #ifdef FEAT_WILDMENU
+ 			    p_wmnu = p_wmnu_save;
+ #endif
+@@ -851,9 +883,11 @@
+ 			redrawcmd();
+ 			did_wild_list = TRUE;
+ 			if (wim_flags[wim_index] & WIM_LONGEST)
+-			    nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP);
++			    nextwild(&xpc, WILD_LONGEST, WILD_NO_BEEP,
++							       firstc != '@');
+ 			else if (wim_flags[wim_index] & WIM_FULL)
+-			    nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP);
++			    nextwild(&xpc, WILD_NEXT, WILD_NO_BEEP,
++							       firstc != '@');
+ 		    }
+ 		    else
+ 			vim_beep();
+@@ -876,9 +910,9 @@
+ 	/* <S-Tab> goes to last match, in a clumsy way */
+ 	if (c == K_S_TAB && KeyTyped)
+ 	{
+-	    if (nextwild(&xpc, WILD_EXPAND_KEEP, 0) == OK
+-		    && nextwild(&xpc, WILD_PREV, 0) == OK
+-		    && nextwild(&xpc, WILD_PREV, 0) == OK)
++	    if (nextwild(&xpc, WILD_EXPAND_KEEP, 0, firstc != '@') == OK
++		    && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK
++		    && nextwild(&xpc, WILD_PREV, 0, firstc != '@') == OK)
+ 		goto cmdline_changed;
+ 	}
+ 
+@@ -1395,7 +1429,7 @@
+ 		goto cmdline_not_changed;
+ 
+ 	case Ctrl_A:	    /* all matches */
+-		if (nextwild(&xpc, WILD_ALL, 0) == FAIL)
++		if (nextwild(&xpc, WILD_ALL, 0, firstc != '@') == FAIL)
+ 		    break;
+ 		goto cmdline_changed;
+ 
+@@ -1431,7 +1465,7 @@
+ #endif
+ 
+ 		/* completion: longest common part */
+-		if (nextwild(&xpc, WILD_LONGEST, 0) == FAIL)
++		if (nextwild(&xpc, WILD_LONGEST, 0, firstc != '@') == FAIL)
+ 		    break;
+ 		goto cmdline_changed;
+ 
+@@ -1439,8 +1473,8 @@
+ 	case Ctrl_P:	    /* previous match */
+ 		if (xpc.xp_numfiles > 0)
+ 		{
+-		    if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT, 0)
+-								      == FAIL)
++		    if (nextwild(&xpc, (c == Ctrl_P) ? WILD_PREV : WILD_NEXT,
++						    0, firstc != '@') == FAIL)
+ 			break;
+ 		    goto cmdline_changed;
+ 		}
+@@ -1833,8 +1867,11 @@
+ # endif
+ 		)
+ 	    /* Always redraw the whole command line to fix shaping and
+-	     * right-left typing.  Not efficient, but it works. */
+-	    redrawcmd();
++	     * right-left typing.  Not efficient, but it works.
++	     * Do it only when there are no characters left to read
++	     * to avoid useless intermediate redraws. */
++	    if (vpeekc() == NUL)
++		redrawcmd();
+ #endif
+     }
+ 
+@@ -1962,8 +1999,12 @@
+ # endif
+     s = getcmdline(firstc, 1L, 0);
+     restore_cmdline(&save_ccline);
+-    /* Restore msg_col, the prompt from input() may have changed it. */
+-    msg_col = msg_col_save;
++    /* Restore msg_col, the prompt from input() may have changed it.
++     * But only if called recursively and the commandline is therefore being
++     * restored to an old one; if not, the input() prompt stays on the screen,
++     * so we need its modified msg_col left intact. */
++    if (ccline.cmdbuff != NULL)
++	msg_col = msg_col_save;
+ 
+     return s;
+ }
+@@ -2239,10 +2280,12 @@
+ 
+ 	    if (c1 == Ctrl_T)
+ 	    {
++		long        sw = get_sw_value();
++
+ 		p = (char_u *)line_ga.ga_data;
+ 		p[line_ga.ga_len] = NUL;
+ 		indent = get_indent_str(p, 8);
+-		indent += curbuf->b_p_sw - indent % curbuf->b_p_sw;
++		indent += sw - indent % sw;
+ add_indent:
+ 		while (get_indent_str(p, 8) < indent)
+ 		{
+@@ -2294,7 +2337,7 @@
+ 		    p[line_ga.ga_len] = NUL;
+ 		    indent = get_indent_str(p, 8);
+ 		    --indent;
+-		    indent -= indent % curbuf->b_p_sw;
++		    indent -= indent % get_sw_value();
+ 		}
+ 		while (get_indent_str(p, 8) > indent)
+ 		{
+@@ -2342,15 +2385,31 @@
+ 	windgoto(msg_row, msg_col);
+ 	pend = (char_u *)(line_ga.ga_data) + line_ga.ga_len;
+ 
+-	/* we are done when a NL is entered, but not when it comes after a
+-	 * backslash */
+-	if (line_ga.ga_len > 0 && pend[-1] == '\n'
+-		&& (line_ga.ga_len <= 1 || pend[-2] != '\\'))
+-	{
+-	    --line_ga.ga_len;
+-	    --pend;
+-	    *pend = NUL;
+-	    break;
++	/* We are done when a NL is entered, but not when it comes after an
++	 * odd number of backslashes, that results in a NUL. */
++	if (line_ga.ga_len > 0 && pend[-1] == '\n')
++	{
++	    int bcount = 0;
++
++	    while (line_ga.ga_len - 2 >= bcount && pend[-2 - bcount] == '\\')
++		++bcount;
++
++	    if (bcount > 0)
++	    {
++		/* Halve the number of backslashes: "\NL" -> "NUL", "\\NL" ->
++		 * "\NL", etc. */
++		line_ga.ga_len -= (bcount + 1) / 2;
++		pend -= (bcount + 1) / 2;
++		pend[-1] = '\n';
++	    }
++
++	    if ((bcount & 1) == 0)
++	    {
++		--line_ga.ga_len;
++		--pend;
++		*pend = NUL;
++		break;
++	    }
+ 	}
+     }
+ 
+@@ -2719,6 +2778,11 @@
+     msg_no_more = TRUE;
+     if (ccline.cmdlen == ccline.cmdpos)
+ 	msg_putchar(' ');
++#ifdef FEAT_MBYTE
++    else if (has_mbyte)
++	draw_cmdline(ccline.cmdpos,
++			       (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos));
++#endif
+     else
+ 	draw_cmdline(ccline.cmdpos, 1);
+     msg_no_more = FALSE;
+@@ -2843,6 +2907,7 @@
+ 	{
+ 	    msg_no_more = TRUE;
+ 	    i = cmdline_row;
++	    cursorcmd();
+ 	    draw_cmdline(ccline.cmdpos, ccline.cmdlen - ccline.cmdpos);
+ 	    /* Avoid clearing the rest of the line too often. */
+ 	    if (cmdline_row != i || ccline.overstrike)
+@@ -3023,7 +3088,7 @@
+ 	    int	    len;
+ 
+ 	    /* Locate start of last word in the cmd buffer. */
+-	    for (w = ccline.cmdbuff + ccline.cmdlen; w > ccline.cmdbuff; )
++	    for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; )
+ 	    {
+ #ifdef FEAT_MBYTE
+ 		if (has_mbyte)
+@@ -3041,7 +3106,7 @@
+ 		    --w;
+ 		}
+ 	    }
+-	    len = (int)((ccline.cmdbuff + ccline.cmdlen) - w);
++	    len = (int)((ccline.cmdbuff + ccline.cmdpos) - w);
+ 	    if (p_ic ? STRNICMP(w, arg, len) == 0 : STRNCMP(w, arg, len) == 0)
+ 		p += len;
+ 	}
+@@ -3082,7 +3147,8 @@
+ 	    else
+ #endif
+ 		c = *s++;
+-	    if (cv == Ctrl_V || c == ESC || c == Ctrl_C || c == CAR || c == NL
++	    if (cv == Ctrl_V || c == ESC || c == Ctrl_C
++		    || c == CAR || c == NL || c == Ctrl_L
+ #ifdef UNIX
+ 		    || c == intr_char
+ #endif
+@@ -3258,6 +3324,24 @@
+     return check_abbr(c, ccline.cmdbuff, ccline.cmdpos, 0);
+ }
+ 
++#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++    static int
++#ifdef __BORLANDC__
++_RTLENTRYF
++#endif
++sort_func_compare(s1, s2)
++    const void *s1;
++    const void *s2;
++{
++    char_u *p1 = *(char_u **)s1;
++    char_u *p2 = *(char_u **)s2;
++
++    if (*p1 != '<' && *p2 == '<') return -1;
++    if (*p1 == '<' && *p2 != '<') return 1;
++    return STRCMP(p1, p2);
++}
++#endif
++
+ /*
+  * Return FAIL if this is not an appropriate context in which to do
+  * completion of anything, return OK if it is (even if there are no matches).
+@@ -3265,10 +3349,11 @@
+  * normal character (instead of being expanded).  This allows :s/^I^D etc.
+  */
+     static int
+-nextwild(xp, type, options)
++nextwild(xp, type, options, escape)
+     expand_T	*xp;
+     int		type;
+     int		options;	/* extra options for ExpandOne() */
++    int		escape;		/* if TRUE, escape the returned matches */
+ {
+     int		i, j;
+     char_u	*p1;
+@@ -3316,10 +3401,16 @@
+ 	    p2 = NULL;
+ 	else
+ 	{
++	    int use_options = options |
++		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT;
++	    if (escape)
++		use_options |= WILD_ESCAPE;
++
++	    if (p_wic)
++		use_options += WILD_ICASE;
+ 	    p2 = ExpandOne(xp, p1,
+ 			 vim_strnsave(&ccline.cmdbuff[i], xp->xp_pattern_len),
+-		    WILD_HOME_REPLACE|WILD_ADD_SLASH|WILD_SILENT|WILD_ESCAPE
+-							      |options, type);
++							   use_options, type);
+ 	    vim_free(p1);
+ 	    /* longest match: make sure it is not shorter, happens with :help */
+ 	    if (p2 != NULL && type == WILD_LONGEST)
+@@ -3396,6 +3487,7 @@
+  * mode = WILD_PREV:	    use previous match in multiple match, wrap to first
+  * mode = WILD_ALL:	    return all matches concatenated
+  * mode = WILD_LONGEST:	    return longest matched part
++ * mode = WILD_ALL_KEEP:    get all matches, keep matches
+  *
+  * options = WILD_LIST_NOTFOUND:    list entries without a match
+  * options = WILD_HOME_REPLACE:	    do home_replace() for buffer names
+@@ -3405,6 +3497,7 @@
+  * options = WILD_KEEP_ALL:	    don't remove 'wildignore' entries
+  * options = WILD_SILENT:	    don't print warning messages
+  * options = WILD_ESCAPE:	    put backslash before special chars
++ * options = WILD_ICASE:	    ignore case for files
+  *
+  * The variables xp->xp_context and xp->xp_backslash must have been set!
+  */
+@@ -3518,7 +3611,8 @@
+ 	    /*
+ 	     * Check for matching suffixes in file names.
+ 	     */
+-	    if (mode != WILD_ALL && mode != WILD_LONGEST)
++	    if (mode != WILD_ALL && mode != WILD_ALL_KEEP
++						      && mode != WILD_LONGEST)
+ 	    {
+ 		if (xp->xp_numfiles)
+ 		    non_suf_match = xp->xp_numfiles;
+@@ -3563,19 +3657,16 @@
+ 	{
+ 	    for (i = 0; i < xp->xp_numfiles; ++i)
+ 	    {
+-#ifdef CASE_INSENSITIVE_FILENAME
+-		if (xp->xp_context == EXPAND_DIRECTORIES
++		if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES
+ 			|| xp->xp_context == EXPAND_FILES
+ 			|| xp->xp_context == EXPAND_SHELLCMD
+-			|| xp->xp_context == EXPAND_BUFFERS)
++			|| xp->xp_context == EXPAND_BUFFERS))
+ 		{
+ 		    if (TOLOWER_LOC(xp->xp_files[i][len]) !=
+ 					    TOLOWER_LOC(xp->xp_files[0][len]))
+ 			break;
+ 		}
+-		else
+-#endif
+-		     if (xp->xp_files[i][len] != xp->xp_files[0][len])
++		else if (xp->xp_files[i][len] != xp->xp_files[0][len])
+ 		    break;
+ 	    }
+ 	    if (i < xp->xp_numfiles)
+@@ -3674,6 +3765,7 @@
+     if (options & WILD_ESCAPE)
+     {
+ 	if (xp->xp_context == EXPAND_FILES
++		|| xp->xp_context == EXPAND_FILES_IN_PATH
+ 		|| xp->xp_context == EXPAND_SHELLCMD
+ 		|| xp->xp_context == EXPAND_BUFFERS
+ 		|| xp->xp_context == EXPAND_DIRECTORIES)
+@@ -4256,6 +4348,7 @@
+  *  EXPAND_EXPRESSION	    Complete internal or user defined function/variable
+  *			    names in expressions, eg :while s^I
+  *  EXPAND_ENV_VARS	    Complete environment variable names
++ *  EXPAND_USER		    Complete user names
+  */
+     static void
+ set_expand_context(xp)
+@@ -4338,6 +4431,7 @@
+     char_u	***matches;	/* return: array of pointers to matches */
+ {
+     char_u	*file_str = NULL;
++    int		options = WILD_ADD_SLASH|WILD_SILENT;
+ 
+     if (xp->xp_context == EXPAND_UNSUCCESSFUL)
+     {
+@@ -4356,9 +4450,11 @@
+     if (file_str == NULL)
+ 	return EXPAND_UNSUCCESSFUL;
+ 
++    if (p_wic)
++	options += WILD_ICASE;
++
+     /* find all files that match the description */
+-    if (ExpandFromContext(xp, file_str, matchcount, matches,
+-					  WILD_ADD_SLASH|WILD_SILENT) == FAIL)
++    if (ExpandFromContext(xp, file_str, matchcount, matches, options) == FAIL)
+     {
+ 	*matchcount = 0;
+ 	*matches = NULL;
+@@ -4410,7 +4506,7 @@
+     char_u	*pat;
+     int		*num_file;
+     char_u	***file;
+-    int		options;
++    int		options;  /* EW_ flags */
+ {
+ #ifdef FEAT_CMDL_COMPL
+     regmatch_T	regmatch;
+@@ -4464,6 +4560,9 @@
+ 	    flags |= (EW_FILE | EW_PATH);
+ 	else
+ 	    flags = (flags | EW_DIR) & ~EW_FILE;
++	if (options & WILD_ICASE)
++	    flags |= EW_ICASE;
++
+ 	/* Expand wildcards, supporting %:h and the like. */
+ 	ret = expand_wildcards_eval(&pat, num_file, file, flags);
+ 	if (free_pat)
+@@ -4501,13 +4600,25 @@
+ 	    || xp->xp_context == EXPAND_TAGS_LISTFILES)
+ 	return expand_tags(xp->xp_context == EXPAND_TAGS, pat, num_file, file);
+     if (xp->xp_context == EXPAND_COLORS)
+-	return ExpandRTDir(pat, num_file, file, "colors");
++    {
++	char *directories[] = {"colors", NULL};
++	return ExpandRTDir(pat, num_file, file, directories);
++    }
+     if (xp->xp_context == EXPAND_COMPILER)
+-	return ExpandRTDir(pat, num_file, file, "compiler");
++    {
++	char *directories[] = {"compiler", NULL};
++	return ExpandRTDir(pat, num_file, file, directories);
++    }
+     if (xp->xp_context == EXPAND_OWNSYNTAX)
+-	return ExpandRTDir(pat, num_file, file, "syntax");
++    {
++	char *directories[] = {"syntax", NULL};
++	return ExpandRTDir(pat, num_file, file, directories);
++    }
+     if (xp->xp_context == EXPAND_FILETYPE)
+-	return ExpandRTDir(pat, num_file, file, "{syntax,indent,ftplugin}");
++    {
++	char *directories[] = {"syntax", "indent", "ftplugin", NULL};
++	return ExpandRTDir(pat, num_file, file, directories);
++    }
+ # if defined(FEAT_USR_CMDS) && defined(FEAT_EVAL)
+     if (xp->xp_context == EXPAND_USER_LIST)
+ 	return ExpandUserList(xp, num_file, file);
+@@ -4536,48 +4647,54 @@
+ 	    int		context;
+ 	    char_u	*((*func)__ARGS((expand_T *, int)));
+ 	    int		ic;
++	    int		escaped;
+ 	} tab[] =
+ 	{
+-	    {EXPAND_COMMANDS, get_command_name, FALSE},
+-	    {EXPAND_BEHAVE, get_behave_arg, TRUE},
++	    {EXPAND_COMMANDS, get_command_name, FALSE, TRUE},
++	    {EXPAND_BEHAVE, get_behave_arg, TRUE, TRUE},
++#ifdef FEAT_CMDHIST
++	    {EXPAND_HISTORY, get_history_arg, TRUE, TRUE},
++#endif
+ #ifdef FEAT_USR_CMDS
+-	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE},
+-	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE},
+-	    {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE},
+-	    {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE},
++	    {EXPAND_USER_COMMANDS, get_user_commands, FALSE, TRUE},
++	    {EXPAND_USER_CMD_FLAGS, get_user_cmd_flags, FALSE, TRUE},
++	    {EXPAND_USER_NARGS, get_user_cmd_nargs, FALSE, TRUE},
++	    {EXPAND_USER_COMPLETE, get_user_cmd_complete, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_EVAL
+-	    {EXPAND_USER_VARS, get_user_var_name, FALSE},
+-	    {EXPAND_FUNCTIONS, get_function_name, FALSE},
+-	    {EXPAND_USER_FUNC, get_user_func_name, FALSE},
+-	    {EXPAND_EXPRESSION, get_expr_name, FALSE},
++	    {EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
++	    {EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
++	    {EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
++	    {EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_MENU
+-	    {EXPAND_MENUS, get_menu_name, FALSE},
+-	    {EXPAND_MENUNAMES, get_menu_names, FALSE},
++	    {EXPAND_MENUS, get_menu_name, FALSE, TRUE},
++	    {EXPAND_MENUNAMES, get_menu_names, FALSE, TRUE},
+ #endif
+ #ifdef FEAT_SYN_HL
+-	    {EXPAND_SYNTAX, get_syntax_name, TRUE},
++	    {EXPAND_SYNTAX, get_syntax_name, TRUE, TRUE},
+ #endif
+-	    {EXPAND_HIGHLIGHT, get_highlight_name, TRUE},
++	    {EXPAND_HIGHLIGHT, get_highlight_name, TRUE, TRUE},
+ #ifdef FEAT_AUTOCMD
+-	    {EXPAND_EVENTS, get_event_name, TRUE},
+-	    {EXPAND_AUGROUP, get_augroup_name, TRUE},
++	    {EXPAND_EVENTS, get_event_name, TRUE, TRUE},
++	    {EXPAND_AUGROUP, get_augroup_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_CSCOPE
+-	    {EXPAND_CSCOPE, get_cscope_name, TRUE},
++	    {EXPAND_CSCOPE, get_cscope_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_SIGNS
+-	    {EXPAND_SIGN, get_sign_name, TRUE},
++	    {EXPAND_SIGN, get_sign_name, TRUE, TRUE},
+ #endif
+ #ifdef FEAT_PROFILE
+-	    {EXPAND_PROFILE, get_profile_name, TRUE},
++	    {EXPAND_PROFILE, get_profile_name, TRUE, TRUE},
+ #endif
+ #if (defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \
+ 	&& (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))
+-	    {EXPAND_LANGUAGE, get_lang_arg, TRUE},
++	    {EXPAND_LANGUAGE, get_lang_arg, TRUE, FALSE},
++	    {EXPAND_LOCALES, get_locales, TRUE, FALSE},
+ #endif
+-	    {EXPAND_ENV_VARS, get_env_name, TRUE},
++	    {EXPAND_ENV_VARS, get_env_name, TRUE, TRUE},
++	    {EXPAND_USER, get_users, TRUE, FALSE},
+ 	};
+ 	int	i;
+ 
+@@ -4591,7 +4708,8 @@
+ 	    {
+ 		if (tab[i].ic)
+ 		    regmatch.rm_ic = TRUE;
+-		ret = ExpandGeneric(xp, &regmatch, num_file, file, tab[i].func);
++		ret = ExpandGeneric(xp, &regmatch, num_file, file,
++						tab[i].func, tab[i].escaped);
+ 		break;
+ 	    }
+     }
+@@ -4613,13 +4731,14 @@
+  * Returns OK when no problems encountered, FAIL for error (out of memory).
+  */
+     int
+-ExpandGeneric(xp, regmatch, num_file, file, func)
++ExpandGeneric(xp, regmatch, num_file, file, func, escaped)
+     expand_T	*xp;
+     regmatch_T	*regmatch;
+     int		*num_file;
+     char_u	***file;
+     char_u	*((*func)__ARGS((expand_T *, int)));
+ 					  /* returns a string from the list */
++    int		escaped;
+ {
+     int		i;
+     int		count = 0;
+@@ -4644,7 +4763,10 @@
+ 	    {
+ 		if (round)
+ 		{
+-		    str = vim_strsave_escaped(str, (char_u *)" \t\\.");
++		    if (escaped)
++			str = vim_strsave_escaped(str, (char_u *)" \t\\.");
++		    else
++			str = vim_strsave(str);
+ 		    (*file)[count] = str;
+ #ifdef FEAT_MENU
+ 		    if (func == get_menu_names && str != NULL)
+@@ -4676,7 +4798,16 @@
+ 
+     /* Sort the results.  Keep menu's in the specified order. */
+     if (xp->xp_context != EXPAND_MENUNAMES && xp->xp_context != EXPAND_MENUS)
+-	sort_strings(*file, *num_file);
++    {
++	if (xp->xp_context == EXPAND_EXPRESSION
++		|| xp->xp_context == EXPAND_FUNCTIONS
++		|| xp->xp_context == EXPAND_USER_FUNC)
++	    /* <SNR> functions should be sorted to the end. */
++	    qsort((void *)*file, (size_t)*num_file, sizeof(char_u *),
++							   sort_func_compare);
++	else
++	    sort_strings(*file, *num_file);
++    }
+ 
+ #ifdef FEAT_CMDL_COMPL
+     /* Reset the variables used for special highlight names expansion, so that
+@@ -4728,7 +4859,11 @@
+ 			    || (pat[1] == '.' && vim_ispathsep(pat[2])))))
+ 	path = (char_u *)".";
+     else
++    {
+ 	path = vim_getenv((char_u *)"PATH", &mustfree);
++	if (path == NULL)
++	    path = (char_u *)"";
++    }
+ 
+     /*
+      * Go over all directories in $PATH.  Expand matches in that directory and
+@@ -4949,57 +5084,68 @@
+ /*
+  * Expand color scheme, compiler or filetype names:
+  * 'runtimepath'/{dirnames}/{pat}.vim
+- * dirnames may contain one directory (ex: "colorscheme") or can be a glob
+- * expression matching multiple directories (ex: "{syntax,ftplugin,indent}").
++ * "dirnames" is an array with one or more directory names.
+  */
+     static int
+ ExpandRTDir(pat, num_file, file, dirnames)
+     char_u	*pat;
+     int		*num_file;
+     char_u	***file;
+-    char	*dirnames;
++    char	*dirnames[];
+ {
+-    char_u	*all;
++    char_u	*matches;
+     char_u	*s;
+     char_u	*e;
+     garray_T	ga;
++    int		i;
++    int		pat_len;
+ 
+     *num_file = 0;
+     *file = NULL;
+-    s = alloc((unsigned)(STRLEN(pat) + STRLEN(dirnames) + 7));
+-    if (s == NULL)
+-	return FAIL;
+-    sprintf((char *)s, "%s/%s*.vim", dirnames, pat);
+-    all = globpath(p_rtp, s, 0);
+-    vim_free(s);
+-    if (all == NULL)
+-	return FAIL;
++    pat_len = (int)STRLEN(pat);
++    ga_init2(&ga, (int)sizeof(char *), 10);
+ 
+-    ga_init2(&ga, (int)sizeof(char *), 3);
+-    for (s = all; *s != NUL; s = e)
++    for (i = 0; dirnames[i] != NULL; ++i)
+     {
+-	e = vim_strchr(s, '\n');
+-	if (e == NULL)
+-	    e = s + STRLEN(s);
+-	if (ga_grow(&ga, 1) == FAIL)
+-	    break;
+-	if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
++	s = alloc((unsigned)(STRLEN(dirnames[i]) + pat_len + 7));
++	if (s == NULL)
+ 	{
+-	    for (s = e - 4; s > all; mb_ptr_back(all, s))
+-		if (*s == '\n' || vim_ispathsep(*s))
+-		    break;
+-	    ++s;
+-	    ((char_u **)ga.ga_data)[ga.ga_len] =
++	    ga_clear_strings(&ga);
++	    return FAIL;
++	}
++	sprintf((char *)s, "%s/%s*.vim", dirnames[i], pat);
++	matches = globpath(p_rtp, s, 0);
++	vim_free(s);
++	if (matches == NULL)
++	    continue;
++
++	for (s = matches; *s != NUL; s = e)
++	{
++	    e = vim_strchr(s, '\n');
++	    if (e == NULL)
++		e = s + STRLEN(s);
++	    if (ga_grow(&ga, 1) == FAIL)
++		break;
++	    if (e - 4 > s && STRNICMP(e - 4, ".vim", 4) == 0)
++	    {
++		for (s = e - 4; s > matches; mb_ptr_back(matches, s))
++		    if (*s == '\n' || vim_ispathsep(*s))
++			break;
++		++s;
++		((char_u **)ga.ga_data)[ga.ga_len] =
+ 					    vim_strnsave(s, (int)(e - s - 4));
+-	    ++ga.ga_len;
++		++ga.ga_len;
++	    }
++	    if (*e != NUL)
++		++e;
+ 	}
+-	if (*e != NUL)
+-	    ++e;
++	vim_free(matches);
+     }
+-    vim_free(all);
++    if (ga.ga_len == 0)
++	return FAIL;
+ 
+     /* Sort and remove duplicates which can happen when specifying multiple
+-     * directories in dirnames such as "{syntax,ftplugin,indent}". */
++     * directories in dirnames. */
+     remove_duplicates(&ga);
+ 
+     *file = ga.ga_data;
+@@ -5127,6 +5273,34 @@
+     NULL
+ };
+ 
++#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++/*
++ * Function given to ExpandGeneric() to obtain the possible first
++ * arguments of the ":history command.
++ */
++    static char_u *
++get_history_arg(xp, idx)
++    expand_T	*xp UNUSED;
++    int		idx;
++{
++    static char_u compl[2] = { NUL, NUL };
++    char *short_names = ":=@>?/";
++    int short_names_count = (int)STRLEN(short_names);
++    int history_name_count = sizeof(history_names) / sizeof(char *) - 1;
++
++    if (idx < short_names_count)
++    {
++	compl[0] = (char_u)short_names[idx];
++	return compl;
++    }
++    if (idx < short_names_count + history_name_count)
++	return (char_u *)history_names[idx - short_names_count];
++    if (idx == short_names_count + history_name_count)
++	return (char_u *)"all";
++    return NULL;
++}
++#endif
++
+ /*
+  * init_history() - Initialize the command line history.
+  * Also used to re-allocate the history when the size changes.
+@@ -5173,10 +5347,7 @@
+ 		if (hisidx[type] < 0)		/* there are no entries yet */
+ 		{
+ 		    for (i = 0; i < newlen; ++i)
+-		    {
+-			temp[i].hisnum = 0;
+-			temp[i].hisstr = NULL;
+-		    }
++			clear_hist_entry(&temp[i]);
+ 		}
+ 		else if (newlen > hislen)	/* array becomes bigger */
+ 		{
+@@ -5184,10 +5355,7 @@
+ 			temp[i] = history[type][i];
+ 		    j = i;
+ 		    for ( ; i <= newlen - (hislen - hisidx[type]); ++i)
+-		    {
+-			temp[i].hisnum = 0;
+-			temp[i].hisstr = NULL;
+-		    }
++			clear_hist_entry(&temp[i]);
+ 		    for ( ; j < hislen; ++i, ++j)
+ 			temp[i] = history[type][j];
+ 		}
+@@ -5215,18 +5383,30 @@
+     }
+ }
+ 
++    static void
++clear_hist_entry(hisptr)
++    histentry_T	*hisptr;
++{
++    hisptr->hisnum = 0;
++    hisptr->viminfo = FALSE;
++    hisptr->hisstr = NULL;
++}
++
+ /*
+  * Check if command line 'str' is already in history.
+  * If 'move_to_front' is TRUE, matching entry is moved to end of history.
+  */
+     static int
+-in_history(type, str, move_to_front)
++in_history(type, str, move_to_front, sep, writing)
+     int	    type;
+     char_u  *str;
+     int	    move_to_front;	/* Move the entry to the front if it exists */
++    int	    sep;
++    int	    writing;		/* ignore entries read from viminfo */
+ {
+     int	    i;
+     int	    last_i = -1;
++    char_u  *p;
+ 
+     if (hisidx[type] < 0)
+ 	return FALSE;
+@@ -5235,7 +5415,13 @@
+     {
+ 	if (history[type][i].hisstr == NULL)
+ 	    return FALSE;
+-	if (STRCMP(str, history[type][i].hisstr) == 0)
++
++	/* For search history, check that the separator character matches as
++	 * well. */
++	p = history[type][i].hisstr;
++	if (STRCMP(str, p) == 0
++		&& !(writing && history[type][i].viminfo)
++		&& (type != HIST_SEARCH || sep == p[STRLEN(p) + 1]))
+ 	{
+ 	    if (!move_to_front)
+ 		return TRUE;
+@@ -5256,8 +5442,9 @@
+ 	    history[type][last_i] = history[type][i];
+ 	    last_i = i;
+ 	}
+-	history[type][i].hisstr = str;
+ 	history[type][i].hisnum = ++hisnum[type];
++	history[type][i].viminfo = FALSE;
++	history[type][i].hisstr = str;
+ 	return TRUE;
+     }
+     return FALSE;
+@@ -5321,15 +5508,14 @@
+ 	    /* Current line is from the same mapping, remove it */
+ 	    hisptr = &history[HIST_SEARCH][hisidx[HIST_SEARCH]];
+ 	    vim_free(hisptr->hisstr);
+-	    hisptr->hisstr = NULL;
+-	    hisptr->hisnum = 0;
++	    clear_hist_entry(hisptr);
+ 	    --hisnum[histype];
+ 	    if (--hisidx[HIST_SEARCH] < 0)
+ 		hisidx[HIST_SEARCH] = hislen - 1;
+ 	}
+ 	last_maptick = -1;
+     }
+-    if (!in_history(histype, new_entry, TRUE))
++    if (!in_history(histype, new_entry, TRUE, sep, FALSE))
+     {
+ 	if (++hisidx[histype] == hislen)
+ 	    hisidx[histype] = 0;
+@@ -5343,6 +5529,7 @@
+ 	    hisptr->hisstr[len + 1] = sep;
+ 
+ 	hisptr->hisnum = ++hisnum[histype];
++	hisptr->viminfo = FALSE;
+ 	if (histype == HIST_SEARCH && in_map)
+ 	    last_maptick = maptick;
+     }
+@@ -5532,8 +5719,7 @@
+ 	for (i = hislen; i--;)
+ 	{
+ 	    vim_free(hisptr->hisstr);
+-	    hisptr->hisnum = 0;
+-	    hisptr++->hisstr = NULL;
++	    clear_hist_entry(hisptr);
+ 	}
+ 	hisidx[histype] = -1;	/* mark history as cleared */
+ 	hisnum[histype] = 0;	/* reset identifier counter */
+@@ -5578,16 +5764,14 @@
+ 	    {
+ 		found = TRUE;
+ 		vim_free(hisptr->hisstr);
+-		hisptr->hisstr = NULL;
+-		hisptr->hisnum = 0;
++		clear_hist_entry(hisptr);
+ 	    }
+ 	    else
+ 	    {
+ 		if (i != last)
+ 		{
+ 		    history[histype][last] = *hisptr;
+-		    hisptr->hisstr = NULL;
+-		    hisptr->hisnum = 0;
++		    clear_hist_entry(hisptr);
+ 		}
+ 		if (--last < 0)
+ 		    last += hislen;
+@@ -5631,8 +5815,7 @@
+ 	history[histype][i] = history[histype][j];
+ 	i = j;
+     }
+-    history[histype][i].hisstr = NULL;
+-    history[histype][i].hisnum = 0;
++    clear_hist_entry(&history[histype][i]);
+     if (--i < 0)
+ 	i += hislen;
+     hisidx[histype] = i;
+@@ -5803,7 +5986,7 @@
+ 							      hist[i].hisnum);
+ 		    if (vim_strsize(hist[i].hisstr) > (int)Columns - 10)
+ 			trunc_string(hist[i].hisstr, IObuff + STRLEN(IObuff),
+-							   (int)Columns - 10);
++			     (int)Columns - 10, IOSIZE - (int)STRLEN(IObuff));
+ 		    else
+ 			STRCAT(IObuff, hist[i].hisstr);
+ 		    msg_outtrans(IObuff);
+@@ -5851,8 +6034,9 @@
+  * This allocates history arrays to store the read history lines.
+  */
+     void
+-prepare_viminfo_history(asklen)
++prepare_viminfo_history(asklen, writing)
+     int	    asklen;
++    int	    writing;
+ {
+     int	    i;
+     int	    num;
+@@ -5860,18 +6044,17 @@
+     int	    len;
+ 
+     init_history();
+-    viminfo_add_at_front = (asklen != 0);
++    viminfo_add_at_front = (asklen != 0 && !writing);
+     if (asklen > hislen)
+ 	asklen = hislen;
+ 
+     for (type = 0; type < HIST_COUNT; ++type)
+     {
+-	/*
+-	 * Count the number of empty spaces in the history list.  If there are
+-	 * more spaces available than we request, then fill them up.
+-	 */
++	/* Count the number of empty spaces in the history list.  Entries read
++	 * from viminfo previously are also considered empty.  If there are
++	 * more spaces available than we request, then fill them up. */
+ 	for (i = 0, num = 0; i < hislen; i++)
+-	    if (history[type][i].hisstr == NULL)
++	    if (history[type][i].hisstr == NULL || history[type][i].viminfo)
+ 		num++;
+ 	len = asklen;
+ 	if (num > len)
+@@ -5893,8 +6076,9 @@
+  * new.
+  */
+     int
+-read_viminfo_history(virp)
++read_viminfo_history(virp, writing)
+     vir_T	*virp;
++    int		writing;
+ {
+     int		type;
+     long_u	len;
+@@ -5907,8 +6091,10 @@
+ 	val = viminfo_readstring(virp, 1, TRUE);
+ 	if (val != NULL && *val != NUL)
+ 	{
++	    int sep = (*val == ' ' ? NUL : *val);
++
+ 	    if (!in_history(type, val + (type == HIST_SEARCH),
+-							viminfo_add_at_front))
++					  viminfo_add_at_front, sep, writing))
+ 	    {
+ 		/* Need to re-allocate to append the separator byte. */
+ 		len = STRLEN(val);
+@@ -5920,7 +6106,7 @@
+ 			/* Search entry: Move the separator from the first
+ 			 * column to after the NUL. */
+ 			mch_memmove(p, val + 1, (size_t)len);
+-			p[len] = (*val == ' ' ? NUL : *val);
++			p[len] = sep;
+ 		    }
+ 		    else
+ 		    {
+@@ -5938,6 +6124,9 @@
+     return viminfo_readline(virp);
+ }
+ 
++/*
++ * Finish reading history lines from viminfo.  Not used when writing viminfo.
++ */
+     void
+ finish_viminfo_history()
+ {
+@@ -5948,7 +6137,7 @@
+     for (type = 0; type < HIST_COUNT; ++type)
+     {
+ 	if (history[type] == NULL)
+-	    return;
++	    continue;
+ 	idx = hisidx[type] + viminfo_hisidx[type];
+ 	if (idx >= hislen)
+ 	    idx -= hislen;
+@@ -5962,7 +6151,8 @@
+ 		hisidx[type] = hislen - 1;
+ 	    do
+ 	    {
+-		if (history[type][idx].hisstr != NULL)
++		if (history[type][idx].hisstr != NULL
++						|| history[type][idx].viminfo)
+ 		    break;
+ 		if (++idx == hislen)
+ 		    idx = 0;
+@@ -5974,6 +6164,7 @@
+ 	{
+ 	    vim_free(history[type][idx].hisstr);
+ 	    history[type][idx].hisstr = viminfo_history[type][i];
++	    history[type][idx].viminfo = TRUE;
+ 	    if (--idx < 0)
+ 		idx = hislen - 1;
+ 	}
+@@ -5986,6 +6177,7 @@
+ 	}
+ 	vim_free(viminfo_history[type]);
+ 	viminfo_history[type] = NULL;
++	viminfo_hisidx[type] = 0;
+     }
+ }
+ 
+@@ -5998,6 +6190,7 @@
+     int	    num_saved;
+     char_u  *p;
+     int	    c;
++    int     round;
+ 
+     init_history();
+     if (hislen == 0)
+@@ -6016,26 +6209,65 @@
+ 					_("Input Line"));
+ 	if (num_saved > hislen)
+ 	    num_saved = hislen;
+-	i = hisidx[type];
+-	if (i >= 0)
+-	    while (num_saved--)
+-	    {
+-		p = history[type][i].hisstr;
+-		if (p != NULL)
+-		{
+-		    fputc(hist_type2char(type, TRUE), fp);
+-		    /* For the search history: put the separator in the second
+-		     * column; use a space if there isn't one. */
+-		    if (type == HIST_SEARCH)
++
++	/*
++	 * Merge typed and viminfo history:
++	 * round 1: history of typed commands.
++	 * round 2: history from recently read viminfo.
++	 */
++	for (round = 1; round <= 2; ++round)
++	{
++	    if (round == 1)
++		/* start at newest entry, somewhere in the list */
++		i = hisidx[type];
++	    else if (viminfo_hisidx[type] > 0)
++		/* start at newest entry, first in the list */
++		i = 0;
++	    else
++		/* empty list */
++		i = -1;
++	    if (i >= 0)
++		while (num_saved > 0
++			&& !(round == 2 && i >= viminfo_hisidx[type]))
++		{
++		    p = round == 1 ? history[type][i].hisstr
++				   : viminfo_history[type] == NULL ? NULL
++						   : viminfo_history[type][i];
++		    if (p != NULL && (round == 2 || !history[type][i].viminfo))
++		    {
++			--num_saved;
++			fputc(hist_type2char(type, TRUE), fp);
++			/* For the search history: put the separator in the
++			 * second column; use a space if there isn't one. */
++			if (type == HIST_SEARCH)
++			{
++			    c = p[STRLEN(p) + 1];
++			    putc(c == NUL ? ' ' : c, fp);
++			}
++			viminfo_writestring(fp, p);
++		    }
++		    if (round == 1)
+ 		    {
+-			c = p[STRLEN(p) + 1];
+-			putc(c == NUL ? ' ' : c, fp);
++			/* Decrement index, loop around and stop when back at
++			 * the start. */
++			if (--i < 0)
++			    i = hislen - 1;
++			if (i == hisidx[type])
++			    break;
++		    }
++		    else
++		    {
++			/* Increment index. Stop at the end in the while. */
++			++i;
+ 		    }
+-		    viminfo_writestring(fp, p);
+ 		}
+-		if (--i < 0)
+-		    i = hislen - 1;
+-	    }
++	}
++	for (i = 0; i < viminfo_hisidx[type]; ++i)
++	    if (viminfo_history[type] != NULL)
++		vim_free(viminfo_history[type][i]);
++	vim_free(viminfo_history[type]);
++	viminfo_history[type] = NULL;
++	viminfo_hisidx[type] = 0;
+     }
+ }
+ #endif /* FEAT_VIMINFO */
+@@ -6147,9 +6379,7 @@
+     curwin->w_p_rl = cmdmsg_rl;
+     cmdmsg_rl = FALSE;
+ # endif
+-# ifdef FEAT_SCROLLBIND
+-    curwin->w_p_scb = FALSE;
+-# endif
++    RESET_BINDING(curwin);
+ 
+ # ifdef FEAT_AUTOCMD
+     /* Do execute autocommands for setting the filetype (load syntax). */
+@@ -6287,6 +6517,12 @@
+ 	    ccline.cmdbuff = vim_strsave((char_u *)"qa");
+ 	    cmdwin_result = CAR;
+ 	}
++	else if (cmdwin_result == Ctrl_C)
++	{
++	    /* :q or :close, don't execute any command
++	     * and don't modify the cmd window. */
++	    ccline.cmdbuff = NULL;
++	}
+ 	else
+ 	    ccline.cmdbuff = vim_strsave(ml_get_curline());
+ 	if (ccline.cmdbuff == NULL)
+@@ -6317,7 +6553,7 @@
+ 	/* win_close() may have already wiped the buffer when 'bh' is
+ 	 * set to 'wipe' */
+ 	if (buf_valid(bp))
+-	    close_buffer(NULL, bp, DOBUF_WIPE);
++	    close_buffer(NULL, bp, DOBUF_WIPE, FALSE);
+ 
+ 	/* Restore window sizes. */
+ 	win_size_restore(&winsizes);
+diff -Naur vim73.orig/src/farsi.c vim73/src/farsi.c
+--- vim73.orig/src/farsi.c	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/farsi.c	2013-06-07 17:07:30.825587320 +0000
+@@ -1813,7 +1813,7 @@
+ 		ptr[i] = toF_leading(ptr[i]);
+ 		++i;
+ 
+-		while(canF_Rjoin(ptr[i]) && (i < llen))
++		while (canF_Rjoin(ptr[i]) && i < llen)
+ 		{
+ 		    ptr[i] = toF_Rjoin(ptr[i]);
+ 		    if (F_isterm(ptr[i]) || !F_isalpha(ptr[i]))
+@@ -1841,7 +1841,7 @@
+ }
+ 
+ /*
+- * Convert the Farsi VIM into Farsi 3342 standad.
++ * Convert the Farsi VIM into Farsi 3342 standard.
+  */
+     void
+ conv_to_pstd()
+diff -Naur vim73.orig/src/feature.h vim73/src/feature.h
+--- vim73.orig/src/feature.h	2010-07-27 19:45:42.000000000 +0000
++++ vim73/src/feature.h	2013-06-07 17:07:30.845587263 +0000
+@@ -392,6 +392,13 @@
+ #endif
+ 
+ /*
++ * +python and +python3 require FEAT_EVAL.
++ */
++#if !defined(FEAT_EVAL) && (defined(FEAT_PYTHON3) || defined(FEAT_PYTHON))
++# define FEAT_EVAL
++#endif
++
++/*
+  * +profile		Profiling for functions and scripts.
+  */
+ #if defined(FEAT_HUGE) \
+@@ -506,15 +513,6 @@
+ #endif
+ 
+ /*
+- * +osfiletype		filetype checking in autocommand patterns.
+- *			Only on systems that support filetypes (RISC OS).
+- */
+-#if 0
+-# define FEAT_OSFILETYPE
+-# define DFLT_OFT "Text"
+-#endif
+-
+-/*
+  * +viminfo		reading/writing the viminfo file. Takes about 8Kbyte
+  *			of code.
+  * VIMINFO_FILE		Location of user .viminfo file (should start with $).
+@@ -640,7 +638,7 @@
+  * Disabled for EBCDIC:
+  * Multibyte support doesn't work on z/OS Unix currently.
+  */
+-#if (defined(FEAT_BIG) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
++#if (defined(FEAT_NORMAL) || defined(FEAT_GUI_GTK) || defined(FEAT_ARABIC)) \
+ 	&& !defined(FEAT_MBYTE) && !defined(WIN16) \
+ 	&& SIZEOF_INT >= 4 && !defined(EBCDIC)
+ # define FEAT_MBYTE
+@@ -801,6 +799,15 @@
+ #endif
+ 
+ /*
++ * On some systems, when we compile with the GUI, we always use it.  On Mac
++ * there is no terminal version, and on Windows we can't figure out how to
++ * fork one off with :gui.
++ */
++#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_UNIX))
++# define ALWAYS_USE_GUI
++#endif
++
++/*
+  * +dialog_gui		Use GUI dialog.
+  * +dialog_con		May use Console dialog.
+  *			When none of these defined there is no dialog support.
+@@ -829,6 +836,9 @@
+ 	 || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_MSWIN) \
+ 	 || defined(FEAT_GUI_PHOTON) || defined(FEAT_GUI_MAC))
+ # define FEAT_GUI_TEXTDIALOG
++# ifndef ALWAYS_USE_GUI
++#  define FEAT_CON_DIALOG
++# endif
+ #endif
+ 
+ /* Mac specific thing: Codewarrior interface. */
+@@ -997,7 +1007,7 @@
+ 
+ /*
+  * MODIFIED_BY		Name of who modified Vim.  Required when distributing
+- *			a modifed version of Vim.
++ *			a modified version of Vim.
+  *			Also from the "--with-modified-by" configure argument.
+  */
+ /* #define MODIFIED_BY "John Doe" */
+@@ -1047,8 +1057,10 @@
+  * +mouse_gpm		Unix only: Include code for Linux console mouse
+  *			handling.
+  * +mouse_pterm		PTerm mouse support for QNX
++ * +mouse_sgr		Unix only: Include code for for SGR-styled mouse.
+  * +mouse_sysmouse	Unix only: Include code for FreeBSD and DragonFly
+  *			console mouse handling.
++ * +mouse_urxvt		Unix only: Include code for for urxvt mosue handling.
+  * +mouse		Any mouse support (any of the above enabled).
+  */
+ /* OS/2 and Amiga console have no mouse support */
+@@ -1062,6 +1074,12 @@
+ # ifdef FEAT_BIG
+ #  define FEAT_MOUSE_DEC
+ # endif
++# ifdef FEAT_BIG
++#  define FEAT_MOUSE_URXVT
++# endif
++# ifdef FEAT_BIG
++#  define FEAT_MOUSE_SGR
++# endif
+ # if defined(FEAT_NORMAL) && (defined(MSDOS) || defined(WIN3264))
+ #  define DOS_MOUSE
+ # endif
+@@ -1070,6 +1088,13 @@
+ # endif
+ #endif
+ 
++/*
++ * Note: Only one of the following may be defined:
++ * FEAT_MOUSE_GPM
++ * FEAT_SYSMOUSE
++ * FEAT_MOUSE_JSB
++ * FEAT_MOUSE_PTERM
++ */
+ #if defined(FEAT_NORMAL) && defined(HAVE_GPM)
+ # define FEAT_MOUSE_GPM
+ #endif
+@@ -1077,13 +1102,29 @@
+ #if defined(FEAT_NORMAL) && defined(HAVE_SYSMOUSE)
+ # define FEAT_SYSMOUSE
+ #endif
++
++/* urxvt is a small variation of mouse_xterm, and shares its code */
++#if defined(FEAT_MOUSE_URXVT) && !defined(FEAT_MOUSE_XTERM)
++# define FEAT_MOUSE_XTERM
++#endif
++
++/* sgr is a small variation of mouse_xterm, and shares its code */
++#if defined(FEAT_MOUSE_SGR) && !defined(FEAT_MOUSE_XTERM)
++# define FEAT_MOUSE_XTERM
++#endif
++
+ /* Define FEAT_MOUSE when any of the above is defined or FEAT_GUI. */
+ #if !defined(FEAT_MOUSE_TTY) \
+ 	&& (defined(FEAT_MOUSE_XTERM) \
+-	    || defined(FEAT_MOUSE_NET) || defined(FEAT_MOUSE_DEC) \
+-	    || defined(DOS_MOUSE) || defined(FEAT_MOUSE_GPM) \
+-	    || defined(FEAT_MOUSE_JSB) || defined(FEAT_MOUSE_PTERM) \
+-	    || defined(FEAT_SYSMOUSE))
++	    || defined(FEAT_MOUSE_NET) \
++	    || defined(FEAT_MOUSE_DEC) \
++	    || defined(DOS_MOUSE) \
++	    || defined(FEAT_MOUSE_GPM) \
++	    || defined(FEAT_MOUSE_JSB) \
++	    || defined(FEAT_MOUSE_PTERM) \
++	    || defined(FEAT_SYSMOUSE) \
++	    || defined(FEAT_MOUSE_URXVT) \
++	    || defined(FEAT_MOUSE_SGR))
+ # define FEAT_MOUSE_TTY		/* include non-GUI mouse support */
+ #endif
+ #if !defined(FEAT_MOUSE) && (defined(FEAT_MOUSE_TTY) || defined(FEAT_GUI))
+@@ -1095,6 +1136,11 @@
+  * +xterm_clipboard	Unix only: Include code for handling the clipboard
+  *			in an xterm like in the GUI.
+  */
++
++#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
++# define FEAT_CLIPBOARD
++#endif
++
+ #ifdef FEAT_GUI
+ # ifndef FEAT_CLIPBOARD
+ #  define FEAT_CLIPBOARD
+@@ -1312,3 +1358,11 @@
+ #ifdef FEAT_NORMAL
+ # define FEAT_PERSISTENT_UNDO
+ #endif
++
++/*
++ * +filterpipe
++ */
++#if (defined(UNIX) && !defined(USE_SYSTEM)) \
++	    || (defined(WIN3264) && defined(FEAT_GUI_W32))
++# define FEAT_FILTERPIPE
++#endif
+diff -Naur vim73.orig/src/fileio.c vim73/src/fileio.c
+--- vim73.orig/src/fileio.c	2010-08-14 12:20:54.000000000 +0000
++++ vim73/src/fileio.c	2013-06-07 17:07:30.885587149 +0000
+@@ -11,14 +11,6 @@
+  * fileio.c: read from and write to a file
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+-#if defined __EMX__
+-# include "vimio.h"	/* for mktemp(), CJW 1997-12-03 */
+-#endif
+-
+ #include "vim.h"
+ 
+ #if defined(__TANDEM) || defined(__MINT__)
+@@ -258,6 +250,7 @@
+ #ifdef FEAT_CRYPT
+     char_u	*cryptkey = NULL;
+     int		did_ask_for_key = FALSE;
++    int		crypt_method_used;
+ #endif
+ #ifdef FEAT_PERSISTENT_UNDO
+     context_sha256_T sha_ctx;
+@@ -325,7 +318,7 @@
+     int		using_b_fname;
+ #endif
+ 
+-    write_no_eol_lnum = 0;	/* in case it was set by the previous read */
++    curbuf->b_no_eol_lnum = 0;	/* in case it was set by the previous read */
+ 
+     /*
+      * If there is no file name yet, use the one for the read file.
+@@ -511,18 +504,11 @@
+ 
+     if (newfile && !read_stdin && !read_buffer)
+     {
+-	/* Remember time of file.
+-	 * For RISCOS, also remember the filetype.
+-	 */
++	/* Remember time of file. */
+ 	if (mch_stat((char *)fname, &st) >= 0)
+ 	{
+ 	    buf_store_time(curbuf, &st, fname);
+ 	    curbuf->b_mtime_read = curbuf->b_mtime;
+-
+-#if defined(RISCOS) && defined(FEAT_OSFILETYPE)
+-	    /* Read the filetype into the buffer local filetype option. */
+-	    mch_read_filetype(fname);
+-#endif
+ #ifdef UNIX
+ 	    /*
+ 	     * Use the protection bits of the original file for the swap file.
+@@ -564,7 +550,6 @@
+ 
+ /*
+  * for UNIX: check readonly with perm and mch_access()
+- * for RISCOS: same as Unix, otherwise file gets re-datestamped!
+  * for MSDOS and Amiga: check readonly by trying to open the file for writing
+  */
+     file_readonly = FALSE;
+@@ -918,7 +903,7 @@
+ 	    {
+ 		/* Read the first line (and a bit more).  Immediately rewind to
+ 		 * the start of the file.  If the read() fails "len" is -1. */
+-		len = vim_read(fd, firstline, 80);
++		len = read_eintr(fd, firstline, 80);
+ 		lseek(fd, (off_t)0L, SEEK_SET);
+ 		for (p = firstline; p < firstline + len; ++p)
+ 		    if (*p >= 0x80)
+@@ -1373,7 +1358,7 @@
+ 		    /*
+ 		     * Read bytes from the file.
+ 		     */
+-		    size = vim_read(fd, ptr, size);
++		    size = read_eintr(fd, ptr, size);
+ 		}
+ 
+ 		if (size <= 0)
+@@ -1395,6 +1380,8 @@
+ # endif
+ 			   )
+ 			{
++			    if (can_retry)
++				goto rewind_retry;
+ 			    if (conv_error == 0)
+ 				conv_error = curbuf->b_ml.ml_line_count
+ 								- linecnt + 1;
+@@ -2297,6 +2284,7 @@
+ 	save_file_ff(curbuf);		/* remember the current file format */
+ 
+ #ifdef FEAT_CRYPT
++    crypt_method_used = use_crypt_method;
+     if (cryptkey != NULL)
+     {
+ 	crypt_pop_state();
+@@ -2491,7 +2479,10 @@
+ #ifdef FEAT_CRYPT
+ 	    if (cryptkey != NULL)
+ 	    {
+-		STRCAT(IObuff, _("[crypted]"));
++		if (crypt_method_used == 1)
++		    STRCAT(IObuff, _("[blowfish]"));
++		else
++		    STRCAT(IObuff, _("[crypted]"));
+ 		c = TRUE;
+ 	    }
+ #endif
+@@ -2607,10 +2598,11 @@
+ 
+     /*
+      * Trick: We remember if the last line of the read didn't have
+-     * an eol for when writing it again.  This is required for
++     * an eol even when 'binary' is off, for when writing it again with
++     * 'binary' on.  This is required for
+      * ":autocmd FileReadPost *.gz set bin|'[,']!gunzip" to work.
+      */
+-    write_no_eol_lnum = read_no_eol_lnum;
++    curbuf->b_no_eol_lnum = read_no_eol_lnum;
+ 
+     /* When reloading a buffer put the cursor at the first line that is
+      * different. */
+@@ -2658,10 +2650,10 @@
+ 							    FALSE, NULL, eap);
+ 	if (msg_scrolled == n)
+ 	    msg_scroll = m;
+-#ifdef FEAT_EVAL
++# ifdef FEAT_EVAL
+ 	if (aborting())	    /* autocmds may abort script processing */
+ 	    return FAIL;
+-#endif
++# endif
+     }
+ #endif
+ 
+@@ -3202,6 +3194,9 @@
+     int		    write_undo_file = FALSE;
+     context_sha256_T sha_ctx;
+ #endif
++#ifdef FEAT_CRYPT
++    int		    crypt_method_used;
++#endif
+ 
+     if (fname == NULL || *fname == NUL)	/* safety check */
+ 	return FAIL;
+@@ -3284,7 +3279,7 @@
+ 	overwriting = FALSE;
+ 
+     if (exiting)
+-	settmode(TMODE_COOK);	    /* when exiting allow typahead now */
++	settmode(TMODE_COOK);	    /* when exiting allow typeahead now */
+ 
+     ++no_wait_return;		    /* don't wait for return yet */
+ 
+@@ -3308,7 +3303,7 @@
+ 	int		empty_memline = (buf->b_ml.ml_mfp == NULL);
+ 
+ 	/*
+-	 * Apply PRE aucocommands.
++	 * Apply PRE autocommands.
+ 	 * Set curbuf to the buffer to be written.
+ 	 * Careful: The autocommands may call buf_write() recursively!
+ 	 */
+@@ -3345,8 +3340,22 @@
+ 	}
+ 	else if (reset_changed && whole)
+ 	{
+-	    if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+-					 sfname, sfname, FALSE, curbuf, eap)))
++	    int was_changed = curbufIsChanged();
++
++	    did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
++					  sfname, sfname, FALSE, curbuf, eap);
++	    if (did_cmd)
++	    {
++		if (was_changed && !curbufIsChanged())
++		{
++		    /* Written everything correctly and BufWriteCmd has reset
++		     * 'modified': Correct the undo information so that an
++		     * undo now sets 'modified'. */
++		    u_unchanged(curbuf);
++		    u_update_save_nr(curbuf);
++		}
++	    }
++	    else
+ 	    {
+ #ifdef FEAT_QUICKFIX
+ 		if (overwriting && bt_nofile(curbuf))
+@@ -3799,13 +3808,7 @@
+ 
+ 	/* make sure we have a valid backup extension to use */
+ 	if (*p_bex == NUL)
+-	{
+-#ifdef RISCOS
+-	    backup_ext = (char_u *)"/bak";
+-#else
+ 	    backup_ext = (char_u *)".bak";
+-#endif
+-	}
+ 	else
+ 	    backup_ext = p_bex;
+ 
+@@ -4000,7 +4003,7 @@
+ #ifdef HAS_BW_FLAGS
+ 			write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+-			while ((write_info.bw_len = vim_read(fd, copybuf,
++			while ((write_info.bw_len = read_eintr(fd, copybuf,
+ 								BUFSIZE)) > 0)
+ 			{
+ 			    if (buf_write_bytes(&write_info) == FAIL)
+@@ -4568,7 +4571,7 @@
+ 	if (end == 0
+ 		|| (lnum == end
+ 		    && write_bin
+-		    && (lnum == write_no_eol_lnum
++		    && (lnum == buf->b_no_eol_lnum
+ 			|| (lnum == buf->b_ml.ml_line_count && !buf->b_p_eol))))
+ 	{
+ 	    ++lnum;			/* written the line, count it */
+@@ -4719,11 +4722,6 @@
+ #endif
+     if (perm >= 0)		/* set perm. of new file same as old file */
+ 	(void)mch_setperm(wfname, perm);
+-#ifdef RISCOS
+-    if (!append && !filtering)
+-	/* Set the filetype after writing the file. */
+-	mch_set_filetype(wfname, buf->b_p_oft);
+-#endif
+ #ifdef HAVE_ACL
+     /* Probably need to set the ACL before changing the user (can't set the
+      * ACL on a file the user doesn't own). */
+@@ -4731,6 +4729,7 @@
+ 	mch_set_acl(wfname, acl);
+ #endif
+ #ifdef FEAT_CRYPT
++    crypt_method_used = use_crypt_method;
+     if (wb_flags & FIO_ENCRYPTED)
+ 	crypt_pop_state();
+ #endif
+@@ -4813,7 +4812,7 @@
+ #ifdef HAS_BW_FLAGS
+ 			write_info.bw_flags = FIO_NOCONVERT;
+ #endif
+-			while ((write_info.bw_len = vim_read(fd, smallbuf,
++			while ((write_info.bw_len = read_eintr(fd, smallbuf,
+ 						      SMBUFSIZE)) > 0)
+ 			    if (buf_write_bytes(&write_info) == FAIL)
+ 				break;
+@@ -4885,7 +4884,10 @@
+ #ifdef FEAT_CRYPT
+ 	if (wb_flags & FIO_ENCRYPTED)
+ 	{
+-	    STRCAT(IObuff, _("[crypted]"));
++	    if (crypt_method_used == 1)
++		STRCAT(IObuff, _("[blowfish]"));
++	    else
++		STRCAT(IObuff, _("[crypted]"));
+ 	    c = TRUE;
+ 	}
+ #endif
+@@ -5094,7 +5096,7 @@
+     {
+ 	aco_save_T	aco;
+ 
+-	write_no_eol_lnum = 0;	/* in case it was set by the previous read */
++	curbuf->b_no_eol_lnum = 0;  /* in case it was set by the previous read */
+ 
+ 	/*
+ 	 * Apply POST autocommands.
+@@ -5330,7 +5332,7 @@
+ 
+ /*
+  * Call write() to write a number of bytes to the file.
+- * Also handles encryption and 'encoding' conversion.
++ * Handles encryption and 'encoding' conversion.
+  *
+  * Return FAIL for failure, OK otherwise.
+  */
+@@ -5702,16 +5704,8 @@
+ 	crypt_encode(buf, len, buf);
+ #endif
+ 
+-    /* Repeat the write(), it may be interrupted by a signal. */
+-    while (len > 0)
+-    {
+-	wlen = vim_write(ip->bw_fd, buf, len);
+-	if (wlen <= 0)		    /* error! */
+-	    return FAIL;
+-	len -= wlen;
+-	buf += wlen;
+-    }
+-    return OK;
++    wlen = write_eintr(ip->bw_fd, buf, len);
++    return (wlen < len) ? FAIL : OK;
+ }
+ 
+ #ifdef FEAT_MBYTE
+@@ -6024,15 +6018,19 @@
+ shorten_fname1(full_path)
+     char_u	*full_path;
+ {
+-    char_u	dirname[MAXPATHL];
++    char_u	*dirname;
+     char_u	*p = full_path;
+ 
++    dirname = alloc(MAXPATHL);
++    if (dirname == NULL)
++	return full_path;
+     if (mch_dirname(dirname, MAXPATHL) == OK)
+     {
+ 	p = shorten_fname(full_path, dirname);
+ 	if (p == NULL || *p == NUL)
+ 	    p = full_path;
+     }
++    vim_free(dirname);
+     return p;
+ }
+ #endif
+@@ -6259,19 +6257,17 @@
+      */
+     for (ptr = retval + fnamelen; ptr > retval; mb_ptr_back(retval, ptr))
+     {
+-#ifndef RISCOS
+ 	if (*ext == '.'
+-# ifdef USE_LONG_FNAME
++#ifdef USE_LONG_FNAME
+ 		    && (!USE_LONG_FNAME || shortname)
+-# else
+-#  ifndef SHORT_FNAME
++#else
++# ifndef SHORT_FNAME
+ 		    && shortname
+-#  endif
+ # endif
++#endif
+ 								)
+ 	    if (*ptr == '.')	/* replace '.' by '_' */
+ 		*ptr = '_';
+-#endif
+ 	if (vim_ispathsep(*ptr))
+ 	{
+ 	    ++ptr;
+@@ -6306,23 +6302,14 @@
+ 	if (fname == NULL || *fname == NUL
+ 				   || vim_ispathsep(fname[STRLEN(fname) - 1]))
+ 	{
+-#ifdef RISCOS
+-	    if (*ext == '/')
+-#else
+ 	    if (*ext == '.')
+-#endif
+ 		*s++ = '_';
+ 	}
+ 	/*
+ 	 * If the extension starts with '.', truncate the base name at 8
+ 	 * characters
+ 	 */
+-#ifdef RISCOS
+-	/* We normally use '/', but swap files are '_' */
+-	else if (*ext == '/' || *ext == '_')
+-#else
+ 	else if (*ext == '.')
+-#endif
+ 	{
+ 	    if ((size_t)(s - ptr) > (size_t)8)
+ 	    {
+@@ -6334,13 +6321,8 @@
+ 	 * If the extension doesn't start with '.', and the file name
+ 	 * doesn't have an extension yet, append a '.'
+ 	 */
+-#ifdef RISCOS
+-	else if ((e = vim_strchr(ptr, '/')) == NULL)
+-	    *s++ = '/';
+-#else
+ 	else if ((e = vim_strchr(ptr, '.')) == NULL)
+ 	    *s++ = '.';
+-#endif
+ 	/*
+ 	 * If the extension doesn't start with '.', and there already is an
+ 	 * extension, it may need to be truncated
+@@ -6368,23 +6350,14 @@
+     /*
+      * Prepend the dot.
+      */
+-    if (prepend_dot && !shortname && *(e = gettail(retval)) !=
+-#ifdef RISCOS
+-	    '/'
+-#else
+-	    '.'
+-#endif
++    if (prepend_dot && !shortname && *(e = gettail(retval)) != '.'
+ #ifdef USE_LONG_FNAME
+ 	    && USE_LONG_FNAME
+ #endif
+ 				)
+     {
+ 	STRMOVE(e + 1, e);
+-#ifdef RISCOS
+-	*e = '/';
+-#else
+ 	*e = '.';
+-#endif
+     }
+ #endif
+ 
+@@ -6514,9 +6487,7 @@
+ #ifdef HAVE_ACL
+     vim_acl_T	acl;		/* ACL from original file */
+ #endif
+-#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
+     int		use_tmp_file = FALSE;
+-#endif
+ 
+     /*
+      * When the names are identical, there is nothing to do.  When they refer
+@@ -6525,11 +6496,9 @@
+      */
+     if (fnamecmp(from, to) == 0)
+     {
+-#ifdef CASE_INSENSITIVE_FILENAME
+-	if (STRCMP(gettail(from), gettail(to)) != 0)
++	if (p_fic && STRCMP(gettail(from), gettail(to)) != 0)
+ 	    use_tmp_file = TRUE;
+ 	else
+-#endif
+ 	    return 0;
+     }
+ 
+@@ -6552,8 +6521,22 @@
+ 	    use_tmp_file = TRUE;
+     }
+ #endif
++#ifdef WIN3264
++    {
++	BY_HANDLE_FILE_INFORMATION info1, info2;
++
++	/* It's possible for the source and destination to be the same file.
++	 * In that case go through a temp file name.  This makes rename("foo",
++	 * "./foo") a no-op (in a complicated way). */
++	if (win32_fileinfo(from, &info1) == FILEINFO_OK
++		&& win32_fileinfo(to, &info2) == FILEINFO_OK
++		&& info1.dwVolumeSerialNumber == info2.dwVolumeSerialNumber
++		&& info1.nFileIndexHigh == info2.nFileIndexHigh
++		&& info1.nFileIndexLow == info2.nFileIndexLow)
++	    use_tmp_file = TRUE;
++    }
++#endif
+ 
+-#if defined(UNIX) || defined(CASE_INSENSITIVE_FILENAME)
+     if (use_tmp_file)
+     {
+ 	char	tempname[MAXPATHL + 1];
+@@ -6586,7 +6569,6 @@
+ 	}
+ 	return -1;
+     }
+-#endif
+ 
+     /*
+      * Delete the "to" file, this is required on some systems to make the
+@@ -6662,8 +6644,8 @@
+ 	return -1;
+     }
+ 
+-    while ((n = vim_read(fd_in, buffer, BUFSIZE)) > 0)
+-	if (vim_write(fd_out, buffer, n) != n)
++    while ((n = read_eintr(fd_in, buffer, BUFSIZE)) > 0)
++	if (write_eintr(fd_out, buffer, n) != n)
+ 	{
+ 	    errmsg = _("E208: Error writing to \"%s\"");
+ 	    break;
+@@ -7024,7 +7006,7 @@
+ 		    STRCAT(tbuf, mesg2);
+ 		}
+ 		if (do_dialog(VIM_WARNING, (char_u *)_("Warning"), tbuf,
+-				(char_u *)_("&OK\n&Load File"), 1, NULL) == 2)
++			  (char_u *)_("&OK\n&Load File"), 1, NULL, TRUE) == 2)
+ 		    reload = TRUE;
+ 	    }
+ 	    else
+@@ -7074,8 +7056,23 @@
+     }
+ 
+     if (reload)
++    {
+ 	/* Reload the buffer. */
+ 	buf_reload(buf, orig_mode);
++#ifdef FEAT_PERSISTENT_UNDO
++	if (buf->b_p_udf && buf->b_ffname != NULL)
++	{
++	    char_u	    hash[UNDO_HASH_SIZE];
++	    buf_T	    *save_curbuf = curbuf;
++
++	    /* Any existing undo file is unusable, write it now. */
++	    curbuf = buf;
++	    u_compute_hash(hash);
++	    u_write_undo(NULL, FALSE, buf, hash);
++	    curbuf = save_curbuf;
++	}
++#endif
++    }
+ 
+ #ifdef FEAT_AUTOCMD
+     /* Trigger FileChangedShell when the file was changed in any way. */
+@@ -7242,6 +7239,9 @@
+ 	 * reset it, might have had a read error. */
+ 	if (orig_mode == curbuf->b_orig_mode)
+ 	    curbuf->b_p_ro |= old_ro;
++
++	/* Modelines must override settings done by autocommands. */
++	do_modelines(0);
+     }
+ 
+     /* restore curwin/curbuf and a few other things */
+@@ -7272,8 +7272,8 @@
+ write_lnum_adjust(offset)
+     linenr_T	offset;
+ {
+-    if (write_no_eol_lnum != 0)		/* only if there is a missing eol */
+-	write_no_eol_lnum += offset;
++    if (curbuf->b_no_eol_lnum != 0)	/* only if there is a missing eol */
++	curbuf->b_no_eol_lnum += offset;
+ }
+ 
+ #if defined(TEMPDIRNAMES) || defined(PROTO)
+@@ -7475,7 +7475,10 @@
+ 
+     STRCPY(itmp, "");
+     if (GetTempPath(_MAX_PATH, szTempFile) == 0)
+-	szTempFile[0] = NUL;	/* GetTempPath() failed, use current dir */
++    {
++	szTempFile[0] = '.';	/* GetTempPath() failed, use current dir */
++	szTempFile[1] = NUL;
++    }
+     strcpy(buf4, "VIM");
+     buf4[2] = extra_char;   /* make it "VIa", "VIb", etc. */
+     if (GetTempFileName(szTempFile, buf4, 0, itmp) == 0)
+@@ -7496,8 +7499,11 @@
+ # else /* WIN3264 */
+ 
+ #  ifdef USE_TMPNAM
++    char_u	*p;
++
+     /* tmpnam() will make its own name */
+-    if (*tmpnam((char *)itmp) == NUL)
++    p = tmpnam((char *)itmp);
++    if (p == NULL || *p == NUL)
+ 	return NULL;
+ #  else
+     char_u	*p;
+@@ -7651,6 +7657,7 @@
+     {"CmdwinEnter",	EVENT_CMDWINENTER},
+     {"CmdwinLeave",	EVENT_CMDWINLEAVE},
+     {"ColorScheme",	EVENT_COLORSCHEME},
++    {"CompleteDone",	EVENT_COMPLETEDONE},
+     {"CursorHold",	EVENT_CURSORHOLD},
+     {"CursorHoldI",	EVENT_CURSORHOLDI},
+     {"CursorMoved",	EVENT_CURSORMOVED},
+@@ -7682,9 +7689,11 @@
+     {"InsertChange",	EVENT_INSERTCHANGE},
+     {"InsertEnter",	EVENT_INSERTENTER},
+     {"InsertLeave",	EVENT_INSERTLEAVE},
++    {"InsertCharPre",	EVENT_INSERTCHARPRE},
+     {"MenuPopup",	EVENT_MENUPOPUP},
+     {"QuickFixCmdPost",	EVENT_QUICKFIXCMDPOST},
+     {"QuickFixCmdPre",	EVENT_QUICKFIXCMDPRE},
++    {"QuitPre",		EVENT_QUITPRE},
+     {"RemoteReply",	EVENT_REMOTEREPLY},
+     {"SessionLoadPost",	EVENT_SESSIONLOADPOST},
+     {"ShellCmdPost",	EVENT_SHELLCMDPOST},
+@@ -7700,6 +7709,8 @@
+     {"TabLeave",	EVENT_TABLEAVE},
+     {"TermChanged",	EVENT_TERMCHANGED},
+     {"TermResponse",	EVENT_TERMRESPONSE},
++    {"TextChanged",	EVENT_TEXTCHANGED},
++    {"TextChangedI",	EVENT_TEXTCHANGEDI},
+     {"User",		EVENT_USER},
+     {"VimEnter",	EVENT_VIMENTER},
+     {"VimLeave",	EVENT_VIMLEAVE},
+@@ -7764,7 +7775,6 @@
+ static int event_ignored __ARGS((event_T event));
+ static int au_get_grouparg __ARGS((char_u **argp));
+ static int do_autocmd_event __ARGS((event_T event, char_u *pat, int nested, char_u *cmd, int forceit, int group));
+-static char_u *getnextac __ARGS((int c, void *cookie, int indent));
+ static int apply_autocmds_group __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, int group, buf_T *buf, exarg_T *eap));
+ static void auto_next_pat __ARGS((AutoPatCmd *apc, int stop_at_last));
+ 
+@@ -8744,6 +8754,8 @@
+     int		retval;
+     aco_save_T	aco;
+     buf_T	*buf;
++    char_u	*arg = eap->arg;
++    int		call_do_modelines = check_nomodeline(&arg);
+ 
+     /*
+      * This is a bit tricky: For some commands curwin->w_buffer needs to be
+@@ -8760,11 +8772,15 @@
+ 	    aucmd_prepbuf(&aco, buf);
+ 
+ 	    /* execute the autocommands for this buffer */
+-	    retval = do_doautocmd(eap->arg, FALSE);
++	    retval = do_doautocmd(arg, FALSE);
+ 
+-	    /* Execute the modeline settings, but don't set window-local
+-	     * options if we are using the current window for another buffer. */
+-	    do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
++	    if (call_do_modelines)
++	    {
++		/* Execute the modeline settings, but don't set window-local
++		 * options if we are using the current window for another
++		 * buffer. */
++		do_modelines(curwin == aucmd_win ? OPT_NOWIN : 0);
++	    }
+ 
+ 	    /* restore the current window */
+ 	    aucmd_restbuf(&aco);
+@@ -8779,6 +8795,23 @@
+ }
+ 
+ /*
++ * Check *argp for <nomodeline>.  When it is present return FALSE, otherwise
++ * return TRUE and advance *argp to after it.
++ * Thus return TRUE when do_modelines() should be called.
++ */
++    int
++check_nomodeline(argp)
++    char_u **argp;
++{
++    if (STRNCMP(*argp, "<nomodeline>", 12) == 0)
++    {
++	*argp = skipwhite(*argp + 12);
++	return FALSE;
++    }
++    return TRUE;
++}
++
++/*
+  * Prepare for executing autocommands for (hidden) buffer "buf".
+  * Search for a visible window containing the current buffer.  If there isn't
+  * one then use "aucmd_win".
+@@ -8833,7 +8866,7 @@
+     else
+     {
+ 	/* There is no window for "buf", use "aucmd_win".  To minimize the side
+-	 * effects, insert it in a the current tab page.
++	 * effects, insert it in the current tab page.
+ 	 * Anything related to a window (e.g., setting folds) may have
+ 	 * unexpected results. */
+ 	aco->use_aucmd_win = TRUE;
+@@ -8901,12 +8934,13 @@
+ 		if (wp == aucmd_win)
+ 		{
+ 		    if (tp != curtab)
+-			goto_tabpage_tp(tp);
++			goto_tabpage_tp(tp, TRUE, TRUE);
+ 		    win_goto(aucmd_win);
+-		    break;
++		    goto win_found;
+ 		}
+ 	    }
+ 	}
++win_found:
+ 
+ 	/* Remove the window and frame from the tree of frames. */
+ 	(void)winframe_remove(curwin, &dummy, NULL);
+@@ -8923,8 +8957,8 @@
+ 	    /* Hmm, original window disappeared.  Just use the first one. */
+ 	    curwin = firstwin;
+ # ifdef FEAT_EVAL
+-	vars_clear(&aucmd_win->w_vars.dv_hashtab);  /* free all w: variables */
+-	hash_init(&aucmd_win->w_vars.dv_hashtab);   /* re-use the hashtab */
++	vars_clear(&aucmd_win->w_vars->dv_hashtab);  /* free all w: variables */
++	hash_init(&aucmd_win->w_vars->dv_hashtab);   /* re-use the hashtab */
+ # endif
+ #else
+ 	curwin = aco->save_curwin;
+@@ -8965,6 +8999,10 @@
+ 		    && buf_valid(aco->new_curbuf)
+ 		    && aco->new_curbuf->b_ml.ml_mfp != NULL)
+ 	    {
++# if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
++		if (curwin->w_s == &curbuf->b_s)
++		    curwin->w_s = &aco->new_curbuf->b_s;
++# endif
+ 		--curbuf->b_nwindows;
+ 		curbuf = aco->new_curbuf;
+ 		curwin->w_buffer = curbuf;
+@@ -9063,7 +9101,10 @@
+ {
+     int		state;
+ 
+-    if (!did_cursorhold && has_cursorhold() && !Recording
++    if (!did_cursorhold
++	    && has_cursorhold()
++	    && !Recording
++	    && typebuf.tb_len == 0
+ #ifdef FEAT_INS_EXPAND
+ 	    && !ins_compl_active()
+ #endif
+@@ -9094,6 +9135,33 @@
+     return (first_autopat[(int)EVENT_CURSORMOVEDI] != NULL);
+ }
+ 
++/*
++ * Return TRUE when there is a TextChanged autocommand defined.
++ */
++    int
++has_textchanged()
++{
++    return (first_autopat[(int)EVENT_TEXTCHANGED] != NULL);
++}
++
++/*
++ * Return TRUE when there is a TextChangedI autocommand defined.
++ */
++    int
++has_textchangedI()
++{
++    return (first_autopat[(int)EVENT_TEXTCHANGEDI] != NULL);
++}
++
++/*
++ * Return TRUE when there is an InsertCharPre autocommand defined.
++ */
++    int
++has_insertcharpre()
++{
++    return (first_autopat[(int)EVENT_INSERTCHARPRE] != NULL);
++}
++
+     static int
+ apply_autocmds_group(event, fname, fname_io, force, group, buf, eap)
+     event_T	event;
+@@ -9563,7 +9631,7 @@
+  * Called by do_cmdline() to get the next line for ":if".
+  * Returns allocated string, or NULL for end of autocommands.
+  */
+-    static char_u *
++    char_u *
+ getnextac(c, cookie, indent)
+     int	    c UNUSED;
+     void    *cookie;
+@@ -9935,11 +10003,7 @@
+     int		match = FALSE;
+ #endif
+ 
+-#ifdef CASE_INSENSITIVE_FILENAME
+-    regmatch.rm_ic = TRUE;		/* Always ignore case */
+-#else
+-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
+-#endif
++    regmatch.rm_ic = p_fic; /* ignore case if 'fileignorecase' is set */
+ #ifdef FEAT_OSFILETYPE
+     if (*pattern == '<')
+     {
+@@ -9954,6 +10018,8 @@
+ 	    if ((c == ';' || c == '>') && match == FALSE)
+ 	    {
+ 		*pattern = NUL;	    /* Terminate the string */
++		/* TODO: match with 'filetype' of buffer that "fname" comes
++		 * from. */
+ 		match = mch_check_filetype(fname, type_start);
+ 		*pattern = c;	    /* Restore the terminator */
+ 		type_start = pattern + 1;
+@@ -10181,19 +10247,11 @@
+ 		    ++p;
+ 		break;
+ 	    case '.':
+-#ifdef RISCOS
+-		if (allow_dirs != NULL)
+-		     *allow_dirs = TRUE;
+-		/* FALLTHROUGH */
+-#endif
+ 	    case '~':
+ 		reg_pat[i++] = '\\';
+ 		reg_pat[i++] = *p;
+ 		break;
+ 	    case '?':
+-#ifdef RISCOS
+-	    case '#':
+-#endif
+ 		reg_pat[i++] = '.';
+ 		break;
+ 	    case '\\':
+@@ -10304,3 +10362,55 @@
+     }
+     return reg_pat;
+ }
++
++#if defined(EINTR) || defined(PROTO)
++/*
++ * Version of read() that retries when interrupted by EINTR (possibly
++ * by a SIGWINCH).
++ */
++    long
++read_eintr(fd, buf, bufsize)
++    int	    fd;
++    void    *buf;
++    size_t  bufsize;
++{
++    long ret;
++
++    for (;;)
++    {
++	ret = vim_read(fd, buf, bufsize);
++	if (ret >= 0 || errno != EINTR)
++	    break;
++    }
++    return ret;
++}
++
++/*
++ * Version of write() that retries when interrupted by EINTR (possibly
++ * by a SIGWINCH).
++ */
++    long
++write_eintr(fd, buf, bufsize)
++    int	    fd;
++    void    *buf;
++    size_t  bufsize;
++{
++    long    ret = 0;
++    long    wlen;
++
++    /* Repeat the write() so long it didn't fail, other than being interrupted
++     * by a signal. */
++    while (ret < (long)bufsize)
++    {
++	wlen = vim_write(fd, (char *)buf + ret, bufsize - ret);
++	if (wlen < 0)
++	{
++	    if (errno != EINTR)
++		break;
++	}
++	else
++	    ret += wlen;
++    }
++    return ret;
++}
++#endif
+diff -Naur vim73.orig/src/fold.c vim73/src/fold.c
+--- vim73.orig/src/fold.c	2010-06-22 04:20:24.000000000 +0000
++++ vim73/src/fold.c	2013-06-07 17:07:30.908920416 +0000
+@@ -1033,10 +1033,10 @@
+  * Init the fold info in a new window.
+  */
+     void
+-foldInitWin(newwin)
+-    win_T	*newwin;
++foldInitWin(new_win)
++    win_T	*new_win;
+ {
+-    ga_init2(&newwin->w_folds, (int)sizeof(fold_T), 10);
++    ga_init2(&new_win->w_folds, (int)sizeof(fold_T), 10);
+ }
+ 
+ /* find_wl_entry() {{{2 */
+@@ -1469,11 +1469,14 @@
+     }
+     else
+     {
+-	/* move nested folds one level up, to overwrite the fold that is
++	/* Move nested folds one level up, to overwrite the fold that is
+ 	 * deleted. */
+ 	moved = fp->fd_nested.ga_len;
+ 	if (ga_grow(gap, (int)(moved - 1)) == OK)
+ 	{
++	    /* Get "fp" again, the array may have been reallocated. */
++	    fp = (fold_T *)gap->ga_data + idx;
++
+ 	    /* adjust fd_top and fd_flags for the moved folds */
+ 	    nfp = (fold_T *)fp->fd_nested.ga_data;
+ 	    for (i = 0; i < moved; ++i)
+@@ -1486,9 +1489,9 @@
+ 	    }
+ 
+ 	    /* move the existing folds down to make room */
+-	    if (idx < gap->ga_len)
++	    if (idx + 1 < gap->ga_len)
+ 		mch_memmove(fp + moved, fp + 1,
+-					sizeof(fold_T) * (gap->ga_len - idx));
++				  sizeof(fold_T) * (gap->ga_len - (idx + 1)));
+ 	    /* move the contained folds one level up */
+ 	    mch_memmove(fp, nfp, (size_t)(sizeof(fold_T) * moved));
+ 	    vim_free(nfp);
+@@ -3022,7 +3025,7 @@
+ 	    flp->lvl = -1;
+     }
+     else
+-	flp->lvl = get_indent_buf(buf, lnum) / buf->b_p_sw;
++	flp->lvl = get_indent_buf(buf, lnum) / get_sw_value();
+     if (flp->lvl > flp->wp->w_p_fdn)
+     {
+ 	flp->lvl = flp->wp->w_p_fdn;
+@@ -3289,7 +3292,8 @@
+ /* put_folds() {{{2 */
+ #if defined(FEAT_SESSION) || defined(PROTO)
+ static int put_folds_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
+-static int put_foldopen_recurse __ARGS((FILE *fd, garray_T *gap, linenr_T off));
++static int put_foldopen_recurse __ARGS((FILE *fd, win_T *wp, garray_T *gap, linenr_T off));
++static int put_fold_open_close __ARGS((FILE *fd, fold_T *fp, linenr_T off));
+ 
+ /*
+  * Write commands to "fd" to restore the manual folds in window "wp".
+@@ -3309,7 +3313,7 @@
+ 
+     /* If some folds are manually opened/closed, need to restore that. */
+     if (wp->w_fold_manual)
+-	return put_foldopen_recurse(fd, &wp->w_folds, (linenr_T)0);
++	return put_foldopen_recurse(fd, wp, &wp->w_folds, (linenr_T)0);
+ 
+     return OK;
+ }
+@@ -3349,12 +3353,14 @@
+  * Returns FAIL when writing failed.
+  */
+     static int
+-put_foldopen_recurse(fd, gap, off)
++put_foldopen_recurse(fd, wp, gap, off)
+     FILE	*fd;
++    win_T	*wp;
+     garray_T	*gap;
+     linenr_T	off;
+ {
+     int		i;
++    int		level;
+     fold_T	*fp;
+ 
+     fp = (fold_T *)gap->ga_data;
+@@ -3364,27 +3370,60 @@
+ 	{
+ 	    if (fp->fd_nested.ga_len > 0)
+ 	    {
+-		/* open/close nested folds while this fold is open */
++		/* open nested folds while this fold is open */
+ 		if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+ 			|| put_eol(fd) == FAIL
+-			|| put_line(fd, "normal zo") == FAIL)
++			|| put_line(fd, "normal! zo") == FAIL)
+ 		    return FAIL;
+-		if (put_foldopen_recurse(fd, &fp->fd_nested, off + fp->fd_top)
++		if (put_foldopen_recurse(fd, wp, &fp->fd_nested,
++							     off + fp->fd_top)
+ 			== FAIL)
+ 		    return FAIL;
++		/* close the parent when needed */
++		if (fp->fd_flags == FD_CLOSED)
++		{
++		    if (put_fold_open_close(fd, fp, off) == FAIL)
++			return FAIL;
++		}
++	    }
++	    else
++	    {
++		/* Open or close the leaf according to the window foldlevel.
++		 * Do not close a leaf that is already closed, as it will close
++		 * the parent. */
++		level = foldLevelWin(wp, off + fp->fd_top);
++		if ((fp->fd_flags == FD_CLOSED && wp->w_p_fdl >= level)
++			|| (fp->fd_flags != FD_CLOSED && wp->w_p_fdl < level))
++		if (put_fold_open_close(fd, fp, off) == FAIL)
++		    return FAIL;
+ 	    }
+-	    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
+-		    || put_eol(fd) == FAIL
+-		    || fprintf(fd, "normal z%c",
+-				    fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
+-		    || put_eol(fd) == FAIL)
+-		return FAIL;
+ 	}
+ 	++fp;
+     }
+ 
+     return OK;
+ }
++
++/* put_fold_open_close() {{{2 */
++/*
++ * Write the open or close command to "fd".
++ * Returns FAIL when writing failed.
++ */
++    static int
++put_fold_open_close(fd, fp, off)
++    FILE	*fd;
++    fold_T	*fp;
++    linenr_T	off;
++{
++    if (fprintf(fd, "%ld", fp->fd_top + off) < 0
++	    || put_eol(fd) == FAIL
++	    || fprintf(fd, "normal! z%c",
++			   fp->fd_flags == FD_CLOSED ? 'c' : 'o') < 0
++	    || put_eol(fd) == FAIL)
++	return FAIL;
++
++    return OK;
++}
+ #endif /* FEAT_SESSION */
+ 
+ /* }}}1 */
+diff -Naur vim73.orig/src/getchar.c vim73/src/getchar.c
+--- vim73.orig/src/getchar.c	2010-08-08 13:00:33.000000000 +0000
++++ vim73/src/getchar.c	2013-06-07 17:07:30.935587006 +0000
+@@ -418,12 +418,12 @@
+ 
+ /*
+  * Remove the contents of the stuff buffer and the mapped characters in the
+- * typeahead buffer (used in case of an error).  If 'typeahead' is true,
++ * typeahead buffer (used in case of an error).  If "flush_typeahead" is true,
+  * flush all typeahead characters (used when interrupted by a CTRL-C).
+  */
+     void
+-flush_buffers(typeahead)
+-    int typeahead;
++flush_buffers(flush_typeahead)
++    int flush_typeahead;
+ {
+     init_typebuf();
+ 
+@@ -431,7 +431,7 @@
+     while (read_stuff(TRUE) != NUL)
+ 	;
+ 
+-    if (typeahead)	    /* remove all typeahead */
++    if (flush_typeahead)	    /* remove all typeahead */
+     {
+ 	/*
+ 	 * We have to get all characters, because we may delete the first part
+@@ -444,7 +444,7 @@
+ 	typebuf.tb_off = MAXMAPLEN;
+ 	typebuf.tb_len = 0;
+     }
+-    else		    /* remove mapped characters only */
++    else		    /* remove mapped characters at the start only */
+     {
+ 	typebuf.tb_off += typebuf.tb_maplen;
+ 	typebuf.tb_len -= typebuf.tb_maplen;
+@@ -470,6 +470,24 @@
+     }
+ }
+ 
++/*
++ * Discard the contents of the redo buffer and restore the previous redo
++ * buffer.
++ */
++    void
++CancelRedo()
++{
++    if (!block_redo)
++    {
++	free_buff(&redobuff);
++	redobuff = old_redobuff;
++	old_redobuff.bh_first.b_next = NULL;
++	start_stuff();
++	while (read_stuff(TRUE) != NUL)
++	    ;
++    }
++}
++
+ #if defined(FEAT_AUTOCMD) || defined(FEAT_EVAL) || defined(PROTO)
+ /*
+  * Save redobuff and old_redobuff to save_redobuff and save_old_redobuff.
+@@ -635,11 +653,14 @@
+ /*
+  * Stuff "s" into the stuff buffer, leaving special key codes unmodified and
+  * escaping other K_SPECIAL and CSI bytes.
++ * Change CR, LF and ESC into a space.
+  */
+     void
+ stuffReadbuffSpec(s)
+     char_u	*s;
+ {
++    int c;
++
+     while (*s != NUL)
+     {
+ 	if (*s == K_SPECIAL && s[1] != NUL && s[2] != NUL)
+@@ -649,11 +670,16 @@
+ 	    s += 3;
+ 	}
+ 	else
++	{
+ #ifdef FEAT_MBYTE
+-	    stuffcharReadbuff(mb_ptr2char_adv(&s));
++	    c = mb_ptr2char_adv(&s);
+ #else
+-	    stuffcharReadbuff(*s++);
++	    c = *s++;
+ #endif
++	    if (c == CAR || c == NL || c == ESC)
++		c = ' ';
++	    stuffcharReadbuff(c);
++	}
+     }
+ }
+ #endif
+@@ -683,9 +709,9 @@
+  * Read a character from the redo buffer.  Translates K_SPECIAL, CSI and
+  * multibyte characters.
+  * The redo buffer is left as it is.
+- * if init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
+- * otherwise
+- * if old is TRUE, use old_redobuff instead of redobuff
++ * If init is TRUE, prepare for redo, return FAIL if nothing to redo, OK
++ * otherwise.
++ * If old is TRUE, use old_redobuff instead of redobuff.
+  */
+     static int
+ read_redo(init, old_redo)
+@@ -697,7 +723,7 @@
+     int				c;
+ #ifdef FEAT_MBYTE
+     int				n;
+-    char_u			buf[MB_MAXBYTES];
++    char_u			buf[MB_MAXBYTES + 1];
+     int				i;
+ #endif
+ 
+@@ -1046,7 +1072,7 @@
+     int	    c;
+ {
+ #ifdef FEAT_MBYTE
+-    char_u	buf[MB_MAXBYTES];
++    char_u	buf[MB_MAXBYTES + 1];
+ #else
+     char_u	buf[4];
+ #endif
+@@ -1311,6 +1337,10 @@
+ 
+ static int old_char = -1;	/* character put back by vungetc() */
+ static int old_mod_mask;	/* mod_mask for ungotten character */
++#ifdef FEAT_MOUSE
++static int old_mouse_row;	/* mouse_row related to old_char */
++static int old_mouse_col;	/* mouse_col related to old_char */
++#endif
+ 
+ #if defined(FEAT_EVAL) || defined(FEAT_EX_EXTRA) || defined(PROTO)
+ 
+@@ -1506,9 +1536,6 @@
+     }
+ }
+ 
+-#define KL_PART_KEY -1		/* keylen value for incomplete key-code */
+-#define KL_PART_MAP -2		/* keylen value for incomplete mapping */
+-
+ /*
+  * Get the next input character.
+  * Can return a special key or a multi-byte character.
+@@ -1524,7 +1551,7 @@
+     int		c, c2;
+ #ifdef FEAT_MBYTE
+     int		n;
+-    char_u	buf[MB_MAXBYTES];
++    char_u	buf[MB_MAXBYTES + 1];
+     int		i;
+ #endif
+ 
+@@ -1544,6 +1571,10 @@
+ 	c = old_char;
+ 	old_char = -1;
+ 	mod_mask = old_mod_mask;
++#ifdef FEAT_MOUSE
++	mouse_row = old_mouse_row;
++	mouse_col = old_mouse_col;
++#endif
+     }
+     else
+     {
+@@ -1854,6 +1885,10 @@
+ {
+     old_char = c;
+     old_mod_mask = mod_mask;
++#ifdef FEAT_MOUSE
++    old_mouse_row = mouse_row;
++    old_mouse_col = mouse_col;
++#endif
+ }
+ 
+ /*
+@@ -2171,7 +2206,7 @@
+ 					if (!timedout)
+ 					{
+ 					    /* break at a partly match */
+-					    keylen = KL_PART_MAP;
++					    keylen = KEYLEN_PART_MAP;
+ 					    break;
+ 					}
+ 				    }
+@@ -2192,7 +2227,7 @@
+ 
+ 			/* If no partly match found, use the longest full
+ 			 * match. */
+-			if (keylen != KL_PART_MAP)
++			if (keylen != KEYLEN_PART_MAP)
+ 			{
+ 			    mp = mp_match;
+ 			    keylen = mp_match_len;
+@@ -2230,7 +2265,7 @@
+ 			}
+ 			/* Need more chars for partly match. */
+ 			if (mlen == typebuf.tb_len)
+-			    keylen = KL_PART_KEY;
++			    keylen = KEYLEN_PART_KEY;
+ 			else if (max_mlen < mlen)
+ 			    /* no match, may have to check for termcode at
+ 			     * next character */
+@@ -2238,7 +2273,7 @@
+ 		    }
+ 
+ 		    if ((mp == NULL || max_mlen >= mp_match_len)
+-						     && keylen != KL_PART_MAP)
++						 && keylen != KEYLEN_PART_MAP)
+ 		    {
+ 			int	save_keylen = keylen;
+ 
+@@ -2259,13 +2294,14 @@
+ 						   typebuf.tb_off] == RM_YES))
+ 				&& !timedout)
+ 			{
+-			    keylen = check_termcode(max_mlen + 1, NULL, 0);
++			    keylen = check_termcode(max_mlen + 1,
++							       NULL, 0, NULL);
+ 
+ 			    /* If no termcode matched but 'pastetoggle'
+ 			     * matched partially it's like an incomplete key
+ 			     * sequence. */
+-			    if (keylen == 0 && save_keylen == KL_PART_KEY)
+-				keylen = KL_PART_KEY;
++			    if (keylen == 0 && save_keylen == KEYLEN_PART_KEY)
++				keylen = KEYLEN_PART_KEY;
+ 
+ 			    /*
+ 			     * When getting a partial match, but the last
+@@ -2302,7 +2338,7 @@
+ 				    continue;
+ 				}
+ 				if (*s == NUL)	    /* need more characters */
+-				    keylen = KL_PART_KEY;
++				    keylen = KEYLEN_PART_KEY;
+ 			    }
+ 			    if (keylen >= 0)
+ #endif
+@@ -2339,7 +2375,8 @@
+ 			if (keylen > 0)	    /* full matching terminal code */
+ 			{
+ #if defined(FEAT_GUI) && defined(FEAT_MENU)
+-			    if (typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
++			    if (typebuf.tb_len >= 2
++				&& typebuf.tb_buf[typebuf.tb_off] == K_SPECIAL
+ 					 && typebuf.tb_buf[typebuf.tb_off + 1]
+ 								   == KS_MENU)
+ 			    {
+@@ -2381,7 +2418,7 @@
+ 			/* Partial match: get some more characters.  When a
+ 			 * matching mapping was found use that one. */
+ 			if (mp == NULL || keylen < 0)
+-			    keylen = KL_PART_KEY;
++			    keylen = KEYLEN_PART_KEY;
+ 			else
+ 			    keylen = mp_match_len;
+ 		    }
+@@ -2454,27 +2491,18 @@
+ 
+ 			/*
+ 			 * Handle ":map <expr>": evaluate the {rhs} as an
+-			 * expression.  Save and restore the typeahead so that
+-			 * getchar() can be used.  Also save and restore the
+-			 * command line for "normal :".
++			 * expression.  Also save and restore the command line
++			 * for "normal :".
+ 			 */
+ 			if (mp->m_expr)
+ 			{
+-			    tasave_T	tabuf;
+ 			    int		save_vgetc_busy = vgetc_busy;
+ 
+-			    save_typeahead(&tabuf);
+-			    if (tabuf.typebuf_valid)
+-			    {
+-				vgetc_busy = 0;
+-				save_m_keys = vim_strsave(mp->m_keys);
+-				save_m_str = vim_strsave(mp->m_str);
+-				s = eval_map_expr(save_m_str, NUL);
+-				vgetc_busy = save_vgetc_busy;
+-			    }
+-			    else
+-				s = NULL;
+-			    restore_typeahead(&tabuf);
++			    vgetc_busy = 0;
++			    save_m_keys = vim_strsave(mp->m_keys);
++			    save_m_str = vim_strsave(mp->m_str);
++			    s = eval_map_expr(save_m_str, NUL);
++			    vgetc_busy = save_vgetc_busy;
+ 			}
+ 			else
+ #endif
+@@ -2553,7 +2581,8 @@
+ #endif
+ 			&& typebuf.tb_maplen == 0
+ 			&& (State & INSERT)
+-			&& (p_timeout || (keylen == KL_PART_KEY && p_ttimeout))
++			&& (p_timeout
++			    || (keylen == KEYLEN_PART_KEY && p_ttimeout))
+ 			&& (c = inchar(typebuf.tb_buf + typebuf.tb_off
+ 						     + typebuf.tb_len, 3, 25L,
+ 						 typebuf.tb_change_cnt)) == 0)
+@@ -2711,8 +2740,11 @@
+ 		 * are still available.  But when those available characters
+ 		 * are part of a mapping, and we are going to do a blocking
+ 		 * wait here.  Need to update the screen to display the
+-		 * changed text so far. */
+-		if ((State & INSERT) && advance && must_redraw != 0)
++		 * changed text so far. Also for when 'lazyredraw' is set and
++		 * redrawing was postponed because there was something in the
++		 * input buffer (e.g., termresponse). */
++		if (((State & INSERT) != 0 || p_lz) && (State & CMDLINE) == 0
++			  && advance && must_redraw != 0 && !need_wait_return)
+ 		{
+ 		    update_screen(0);
+ 		    setcursor(); /* put cursor back where it belongs */
+@@ -2783,9 +2815,9 @@
+ 			    ? 0
+ 			    : ((typebuf.tb_len == 0
+ 				    || !(p_timeout || (p_ttimeout
+-						   && keylen == KL_PART_KEY)))
++					       && keylen == KEYLEN_PART_KEY)))
+ 				    ? -1L
+-				    : ((keylen == KL_PART_KEY && p_ttm >= 0)
++				    : ((keylen == KEYLEN_PART_KEY && p_ttm >= 0)
+ 					    ? p_ttm
+ 					    : p_tm)), typebuf.tb_change_cnt);
+ 
+@@ -2799,7 +2831,8 @@
+ 			edit_unputchar();
+ 		    if (State & CMDLINE)
+ 			unputcmdline();
+-		    setcursor();	/* put cursor back where it belongs */
++		    else
++			setcursor();	/* put cursor back where it belongs */
+ 		}
+ 
+ 		if (c < 0)
+@@ -3168,6 +3201,7 @@
+     int		expr = FALSE;
+ #endif
+     int		noremap;
++    char_u      *orig_rhs;
+ 
+     keys = arg;
+     map_table = maphash;
+@@ -3251,9 +3285,9 @@
+     validate_maphash();
+ 
+     /*
+-     * find end of keys and skip CTRL-Vs (and backslashes) in it
++     * Find end of keys and skip CTRL-Vs (and backslashes) in it.
+      * Accept backslash like CTRL-V when 'cpoptions' does not contain 'B'.
+-     * with :unmap white space is included in the keys, no argument possible
++     * with :unmap white space is included in the keys, no argument possible.
+      */
+     p = keys;
+     do_backslash = (vim_strchr(p_cpo, CPO_BSLASH) == NULL);
+@@ -3266,6 +3300,7 @@
+     }
+     if (*p != NUL)
+ 	*p++ = NUL;
++
+     p = skipwhite(p);
+     rhs = p;
+     hasarg = (*rhs != NUL);
+@@ -3288,6 +3323,7 @@
+      */
+     if (haskey)
+ 	keys = replace_termcodes(keys, &keys_buf, TRUE, TRUE, special);
++    orig_rhs = rhs;
+     if (hasarg)
+     {
+ 	if (STRICMP(rhs, "<nop>") == 0)	    /* "<Nop>" means nothing */
+@@ -3298,7 +3334,7 @@
+ 
+ #ifdef FEAT_FKMAP
+     /*
+-     * when in right-to-left mode and alternate keymap option set,
++     * When in right-to-left mode and alternate keymap option set,
+      * reverse the character flow in the rhs in Farsi.
+      */
+     if (p_altkeymap && curwin->w_p_rl)
+@@ -3556,6 +3592,8 @@
+ 				}
+ 				vim_free(mp->m_str);
+ 				mp->m_str = newstr;
++				vim_free(mp->m_orig_str);
++				mp->m_orig_str = vim_strsave(orig_rhs);
+ 				mp->m_noremap = noremap;
+ 				mp->m_silent = silent;
+ 				mp->m_mode = mode;
+@@ -3633,10 +3671,12 @@
+ 
+     mp->m_keys = vim_strsave(keys);
+     mp->m_str = vim_strsave(rhs);
++    mp->m_orig_str = vim_strsave(orig_rhs);
+     if (mp->m_keys == NULL || mp->m_str == NULL)
+     {
+ 	vim_free(mp->m_keys);
+ 	vim_free(mp->m_str);
++	vim_free(mp->m_orig_str);
+ 	vim_free(mp);
+ 	retval = 4;	/* no mem */
+ 	goto theend;
+@@ -3682,6 +3722,7 @@
+     mp = *mpp;
+     vim_free(mp->m_keys);
+     vim_free(mp->m_str);
++    vim_free(mp->m_orig_str);
+     *mpp = mp->m_next;
+     vim_free(mp);
+ }
+@@ -3851,12 +3892,57 @@
+     }
+ }
+ 
++/*
++ * Return characters to represent the map mode in an allocated string.
++ * Returns NULL when out of memory.
++ */
++    char_u *
++map_mode_to_chars(mode)
++    int mode;
++{
++    garray_T    mapmode;
++
++    ga_init2(&mapmode, 1, 7);
++
++    if ((mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
++	ga_append(&mapmode, '!');			/* :map! */
++    else if (mode & INSERT)
++	ga_append(&mapmode, 'i');			/* :imap */
++    else if (mode & LANGMAP)
++	ga_append(&mapmode, 'l');			/* :lmap */
++    else if (mode & CMDLINE)
++	ga_append(&mapmode, 'c');			/* :cmap */
++    else if ((mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
++				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
++	ga_append(&mapmode, ' ');			/* :map */
++    else
++    {
++	if (mode & NORMAL)
++	    ga_append(&mapmode, 'n');			/* :nmap */
++	if (mode & OP_PENDING)
++	    ga_append(&mapmode, 'o');			/* :omap */
++	if ((mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
++	    ga_append(&mapmode, 'v');			/* :vmap */
++	else
++	{
++	    if (mode & VISUAL)
++		ga_append(&mapmode, 'x');		/* :xmap */
++	    if (mode & SELECTMODE)
++		ga_append(&mapmode, 's');		/* :smap */
++	}
++    }
++
++    ga_append(&mapmode, NUL);
++    return (char_u *)mapmode.ga_data;
++}
++
+     static void
+ showmap(mp, local)
+     mapblock_T	*mp;
+     int		local;	    /* TRUE for buffer-local map */
+ {
+-    int len = 1;
++    int		len = 1;
++    char_u	*mapchars;
+ 
+     if (msg_didout || msg_silent != 0)
+     {
+@@ -3864,49 +3950,15 @@
+ 	if (got_int)	    /* 'q' typed at MORE prompt */
+ 	    return;
+     }
+-    if ((mp->m_mode & (INSERT + CMDLINE)) == INSERT + CMDLINE)
+-	msg_putchar('!');			/* :map! */
+-    else if (mp->m_mode & INSERT)
+-	msg_putchar('i');			/* :imap */
+-    else if (mp->m_mode & LANGMAP)
+-	msg_putchar('l');			/* :lmap */
+-    else if (mp->m_mode & CMDLINE)
+-	msg_putchar('c');			/* :cmap */
+-    else if ((mp->m_mode & (NORMAL + VISUAL + SELECTMODE + OP_PENDING))
+-				 == NORMAL + VISUAL + SELECTMODE + OP_PENDING)
+-	msg_putchar(' ');			/* :map */
+-    else
++
++    mapchars = map_mode_to_chars(mp->m_mode);
++    if (mapchars != NULL)
+     {
+-	len = 0;
+-	if (mp->m_mode & NORMAL)
+-	{
+-	    msg_putchar('n');		/* :nmap */
+-	    ++len;
+-	}
+-	if (mp->m_mode & OP_PENDING)
+-	{
+-	    msg_putchar('o');		/* :omap */
+-	    ++len;
+-	}
+-	if ((mp->m_mode & (VISUAL + SELECTMODE)) == VISUAL + SELECTMODE)
+-	{
+-	    msg_putchar('v');		/* :vmap */
+-	    ++len;
+-	}
+-	else
+-	{
+-	    if (mp->m_mode & VISUAL)
+-	    {
+-		msg_putchar('x');		/* :xmap */
+-		++len;
+-	    }
+-	    if (mp->m_mode & SELECTMODE)
+-	    {
+-		msg_putchar('s');		/* :smap */
+-		++len;
+-	    }
+-	}
++	msg_puts(mapchars);
++	len = (int)STRLEN(mapchars);
++	vim_free(mapchars);
+     }
++
+     while (++len <= 3)
+ 	msg_putchar(' ');
+ 
+@@ -3931,12 +3983,21 @@
+ 	msg_putchar(' ');
+ 
+     /* Use FALSE below if we only want things like <Up> to show up as such on
+-     * the rhs, and not M-x etc, TRUE gets both -- webb
+-     */
++     * the rhs, and not M-x etc, TRUE gets both -- webb */
+     if (*mp->m_str == NUL)
+ 	msg_puts_attr((char_u *)"<Nop>", hl_attr(HLF_8));
+     else
+-	msg_outtrans_special(mp->m_str, FALSE);
++    {
++	/* Remove escaping of CSI, because "m_str" is in a format to be used
++	 * as typeahead. */
++	char_u *s = vim_strsave(mp->m_str);
++	if (s != NULL)
++	{
++	    vim_unescape_csi(s);
++	    msg_outtrans_special(s, FALSE);
++	    vim_free(s);
++	}
++    }
+ #ifdef FEAT_EVAL
+     if (p_verbose > 0)
+ 	last_set_msg(mp->m_script_ID);
+@@ -4287,11 +4348,7 @@
+     int		scol;		/* starting column of the abbr. */
+     int		j;
+     char_u	*s;
+-#ifdef FEAT_MBYTE
+     char_u	tb[MB_MAXBYTES + 4];
+-#else
+-    char_u	tb[4];
+-#endif
+     mapblock_T	*mp;
+ #ifdef FEAT_LOCALMAP
+     mapblock_T	*mp2;
+@@ -4304,8 +4361,9 @@
+ 
+     if (typebuf.tb_no_abbr_cnt)	/* abbrev. are not recursive */
+ 	return FALSE;
+-    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0)
+-	/* no remapping implies no abbreviation */
++
++    /* no remapping implies no abbreviation, except for CTRL-] */
++    if ((KeyNoremap & (RM_NONE|RM_SCRIPT)) != 0 && c != Ctrl_RSB)
+ 	return FALSE;
+ 
+     /*
+@@ -4478,12 +4536,25 @@
+ {
+     char_u	*res;
+     char_u	*p;
++    char_u	*expr;
+     char_u	*save_cmd;
+     pos_T	save_cursor;
++    int		save_msg_col;
++    int		save_msg_row;
++
++    /* Remove escaping of CSI, because "str" is in a format to be used as
++     * typeahead. */
++    expr = vim_strsave(str);
++    if (expr == NULL)
++	return NULL;
++    vim_unescape_csi(expr);
+ 
+     save_cmd = save_cmdline_alloc();
+     if (save_cmd == NULL)
++    {
++	vim_free(expr);
+ 	return NULL;
++    }
+ 
+     /* Forbid changing text or using ":normal" to avoid most of the bad side
+      * effects.  Also restore the cursor position. */
+@@ -4493,16 +4564,23 @@
+ #endif
+     set_vim_var_char(c);  /* set v:char to the typed character */
+     save_cursor = curwin->w_cursor;
+-    p = eval_to_string(str, NULL, FALSE);
++    save_msg_col = msg_col;
++    save_msg_row = msg_row;
++    p = eval_to_string(expr, NULL, FALSE);
+     --textlock;
+ #ifdef FEAT_EX_EXTRA
+     --ex_normal_lock;
+ #endif
+     curwin->w_cursor = save_cursor;
++    msg_col = save_msg_col;
++    msg_row = save_msg_row;
+ 
+     restore_cmdline_alloc(save_cmd);
++    vim_free(expr);
++
+     if (p == NULL)
+ 	return NULL;
++    /* Escape CSI in the result to be able to use the string as typeahead. */
+     res = vim_strsave_escape_csi(p);
+     vim_free(p);
+ 
+@@ -4538,9 +4616,21 @@
+ 	    }
+ 	    else
+ 	    {
++#ifdef FEAT_MBYTE
++		int len  = mb_char2len(PTR2CHAR(s));
++		int len2 = mb_ptr2len(s);
++#endif
+ 		/* Add character, possibly multi-byte to destination, escaping
+ 		 * CSI and K_SPECIAL. */
+ 		d = add_char2buf(PTR2CHAR(s), d);
++#ifdef FEAT_MBYTE
++		while (len < len2)
++		{
++		    /* add following combining char */
++		    d = add_char2buf(PTR2CHAR(s + len), d);
++		    len += mb_char2len(PTR2CHAR(s + len));
++		}
++#endif
+ 		mb_ptr_adv(s);
+ 	    }
+ 	}
+@@ -4995,19 +5085,21 @@
+     sourcing_name = save_name;
+ }
+ 
+-#ifdef FEAT_EVAL
++#if defined(FEAT_EVAL) || defined(PROTO)
+ /*
+- * Check the string "keys" against the lhs of all mappings
+- * Return pointer to rhs of mapping (mapblock->m_str)
+- * NULL otherwise
++ * Check the string "keys" against the lhs of all mappings.
++ * Return pointer to rhs of mapping (mapblock->m_str).
++ * NULL when no mapping found.
+  */
+     char_u *
+-check_map(keys, mode, exact, ign_mod, abbr)
++check_map(keys, mode, exact, ign_mod, abbr, mp_ptr, local_ptr)
+     char_u	*keys;
+     int		mode;
+     int		exact;		/* require exact match */
+     int		ign_mod;	/* ignore preceding modifier */
+     int		abbr;		/* do abbreviations */
++    mapblock_T	**mp_ptr;	/* return: pointer to mapblock or NULL */
++    int		*local_ptr;	/* return: buffer-local mapping or NULL */
+ {
+     int		hash;
+     int		len, minlen;
+@@ -5062,7 +5154,17 @@
+ 			    minlen = mp->m_keylen - 3;
+ 		    }
+ 		    if (STRNCMP(s, keys, minlen) == 0)
++		    {
++			if (mp_ptr != NULL)
++			    *mp_ptr = mp;
++			if (local_ptr != NULL)
++#ifdef FEAT_LOCALMAP
++			    *local_ptr = local;
++#else
++			    *local_ptr = 0;
++#endif
+ 			return mp->m_str;
++		    }
+ 		}
+ 	    }
+ 	}
+diff -Naur vim73.orig/src/glbl_ime.cpp vim73/src/glbl_ime.cpp
+--- vim73.orig/src/glbl_ime.cpp	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/glbl_ime.cpp	2013-06-07 17:07:30.958920273 +0000
+@@ -156,7 +156,7 @@
+ }
+ 
+ /*
+- * Set position of IME compotision window.
++ * Set position of IME composition window.
+  *
+  * You have to call this before starting composition.  If once composition
+  * started, this can take no effect until that composition have finished.  So
+diff -Naur vim73.orig/src/globals.h vim73/src/globals.h
+--- vim73.orig/src/globals.h	2010-07-23 19:20:45.000000000 +0000
++++ vim73/src/globals.h	2013-06-07 17:07:30.988920187 +0000
+@@ -113,9 +113,9 @@
+  * When '$' is included in 'cpoptions' option set:
+  * When a change command is given that deletes only part of a line, a dollar
+  * is put at the end of the changed text. dollar_vcol is set to the virtual
+- * column of this '$'.
++ * column of this '$'.  -1 is used to indicate no $ is being displayed.
+  */
+-EXTERN colnr_T	dollar_vcol INIT(= 0);
++EXTERN colnr_T	dollar_vcol INIT(= -1);
+ 
+ #ifdef FEAT_INS_EXPAND
+ /*
+@@ -180,9 +180,13 @@
+ EXTERN int	emsg_severe INIT(= FALSE);   /* use message of next of several
+ 					       emsg() calls for throw */
+ EXTERN int	did_endif INIT(= FALSE);    /* just had ":endif" */
++EXTERN dict_T	vimvardict;		    /* Dictionary with v: variables */
++EXTERN dict_T	globvardict;		    /* Dictionary with g: variables */
+ #endif
+ EXTERN int	did_emsg;		    /* set by emsg() when the message
+ 					       is displayed or thrown */
++EXTERN int	did_emsg_syntax;	    /* did_emsg set because of a
++					       syntax error */
+ EXTERN int	called_emsg;		    /* always set by emsg() */
+ EXTERN int	ex_exitval INIT(= 0);	    /* exit value for ex mode */
+ EXTERN int	emsg_on_display INIT(= FALSE);	/* there is an error message */
+@@ -510,9 +514,15 @@
+ EXTERN VimClipboard clip_plus;	/* CLIPBOARD selection in X11 */
+ # else
+ #  define clip_plus clip_star	/* there is only one clipboard */
++#  define ONE_CLIPBOARD
+ # endif
+-EXTERN int	clip_unnamed INIT(= FALSE);
+-EXTERN int	clip_autoselect INIT(= FALSE);
++
++# define CLIP_UNNAMED      1
++# define CLIP_UNNAMED_PLUS 2
++EXTERN int	clip_unnamed INIT(= 0); /* above two values or'ed */
++
++EXTERN int	clip_autoselect_star INIT(= FALSE);
++EXTERN int	clip_autoselect_plus INIT(= FALSE);
+ EXTERN int	clip_autoselectml INIT(= FALSE);
+ EXTERN int	clip_html INIT(= FALSE);
+ EXTERN regprog_T *clip_exclude_prog INIT(= NULL);
+@@ -530,6 +540,10 @@
+ EXTERN win_T	*prevwin INIT(= NULL);	/* previous window */
+ # define W_NEXT(wp) ((wp)->w_next)
+ # define FOR_ALL_WINDOWS(wp) for (wp = firstwin; wp != NULL; wp = wp->w_next)
++/*
++ * When using this macro "break" only breaks out of the inner loop. Use "goto"
++ * to break out of the tabpage loop.
++ */
+ # define FOR_ALL_TAB_WINDOWS(tp, wp) \
+     for ((tp) = first_tabpage; (tp) != NULL; (tp) = (tp)->tp_next) \
+ 	for ((wp) = ((tp) == curtab) \
+@@ -728,9 +742,9 @@
+ #endif
+ 
+ EXTERN pos_T	saved_cursor		/* w_cursor before formatting text. */
+-# ifdef DO_INIT
++#ifdef DO_INIT
+ 	= INIT_POS_T(0, 0, 0)
+-# endif
++#endif
+ 	;
+ 
+ /*
+@@ -790,7 +804,7 @@
+ EXTERN int	enc_unicode INIT(= 0);	/* 2: UCS-2 or UTF-16, 4: UCS-4 */
+ EXTERN int	enc_utf8 INIT(= FALSE);		/* UTF-8 encoded Unicode */
+ EXTERN int	enc_latin1like INIT(= TRUE);	/* 'encoding' is latin1 comp. */
+-# ifdef WIN3264
++# if defined(WIN3264) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
+ /* Codepage nr of 'encoding'.  Negative means it's not been set yet, zero
+  * means 'encoding' is not a valid codepage. */
+ EXTERN int	enc_codepage INIT(= -1);
+@@ -798,9 +812,9 @@
+ # endif
+ EXTERN int	has_mbyte INIT(= 0);		/* any multi-byte encoding */
+ 
+-#if defined(WIN3264) && defined(FEAT_MBYTE)
++# if defined(WIN3264) && defined(FEAT_MBYTE)
+ EXTERN int	wide_WindowProc INIT(= FALSE);	/* use wide WindowProc() */
+-#endif
++# endif
+ 
+ /*
+  * To speed up BYTELEN() we fill a table with the byte lengths whenever
+@@ -1045,17 +1059,15 @@
+ EXTERN int	autocmd_bufnr INIT(= 0);     /* fnum for <abuf> on cmdline */
+ EXTERN char_u	*autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
+ EXTERN int	did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
+-EXTERN pos_T	last_cursormoved	    /* for CursorMoved event */
++EXTERN pos_T	last_cursormoved	      /* for CursorMoved event */
+ # ifdef DO_INIT
+ 			= INIT_POS_T(0, 0, 0)
+ # endif
+ 			;
++EXTERN int	last_changedtick INIT(= 0);   /* for TextChanged event */
++EXTERN buf_T	*last_changedtick_buf INIT(= NULL);
+ #endif
+ 
+-EXTERN linenr_T	write_no_eol_lnum INIT(= 0); /* non-zero lnum when last line
+-						of next binary write should
+-						not have an end-of-line */
+-
+ #ifdef FEAT_WINDOWS
+ EXTERN int	postponed_split INIT(= 0);  /* for CTRL-W CTRL-] command */
+ EXTERN int	postponed_split_flags INIT(= 0);  /* args for win_split() */
+@@ -1094,8 +1106,8 @@
+ EXTERN int  save_p_ls INIT(= -1);	/* Save 'laststatus' setting */
+ EXTERN int  save_p_wmh INIT(= -1);	/* Save 'winminheight' setting */
+ EXTERN int  wild_menu_showing INIT(= 0);
+-#define WM_SHOWN	1		/* wildmenu showing */
+-#define WM_SCROLLED	2		/* wildmenu showing with scroll */
++# define WM_SHOWN	1		/* wildmenu showing */
++# define WM_SCROLLED	2		/* wildmenu showing with scroll */
+ #endif
+ 
+ #ifdef MSWIN
+@@ -1305,9 +1317,9 @@
+ EXTERN Atom	commProperty INIT(= None);
+ EXTERN char_u	*serverDelayedStartName INIT(= NULL);
+ # else
+-# ifdef PROTO
++#  ifdef PROTO
+ typedef int HWND;
+-# endif
++#  endif
+ EXTERN HWND	clientWindow INIT(= 0);
+ # endif
+ #endif
+@@ -1512,7 +1524,7 @@
+ EXTERN char_u e_sandbox[]	INIT(= N_("E48: Not allowed in sandbox"));
+ #endif
+ EXTERN char_u e_secure[]	INIT(= N_("E523: Not allowed here"));
+-#if defined(AMIGA) || defined(MACOS) || defined(MSWIN) || defined(RISCOS) \
++#if defined(AMIGA) || defined(MACOS) || defined(MSWIN)  \
+ 	|| defined(UNIX) || defined(VMS) || defined(OS2)
+ EXTERN char_u e_screenmode[]	INIT(= N_("E359: Screen mode setting not supported"));
+ #endif
+@@ -1560,6 +1572,9 @@
+ 	(defined(FEAT_INS_EXPAND) && defined(FEAT_COMPL_FUNC))
+ EXTERN char_u e_notset[]	INIT(= N_("E764: Option '%s' is not set"));
+ #endif
++#ifndef FEAT_CLIPBOARD
++EXTERN char_u e_invalidreg[]    INIT(= N_("E850: Invalid register name"));
++#endif
+ 
+ #ifdef MACOS_X_UNIX
+ EXTERN short disallow_gui	INIT(= FALSE);
+diff -Naur vim73.orig/src/gui.c vim73/src/gui.c
+--- vim73.orig/src/gui.c	2010-08-08 13:01:18.000000000 +0000
++++ vim73/src/gui.c	2013-06-07 17:07:31.025586749 +0000
+@@ -37,6 +37,23 @@
+ static void gui_set_bg_color __ARGS((char_u *name));
+ static win_T *xy2win __ARGS((int x, int y));
+ 
++#if defined(UNIX) && !defined(MACOS_X) && !defined(__APPLE__)
++# define MAY_FORK
++static void gui_do_fork __ARGS((void));
++
++static int gui_read_child_pipe __ARGS((int fd));
++
++/* Return values for gui_read_child_pipe */
++enum {
++    GUI_CHILD_IO_ERROR,
++    GUI_CHILD_OK,
++    GUI_CHILD_FAILED
++};
++
++#endif /* MAY_FORK */
++
++static void gui_attempt_start __ARGS((void));
++
+ static int can_update_cursor = TRUE; /* can display the cursor */
+ 
+ /*
+@@ -59,42 +76,53 @@
+ gui_start()
+ {
+     char_u	*old_term;
+-#if defined(UNIX) && !defined(__BEOS__) && !defined(MACOS_X)
+-# define MAY_FORK
+-    int		dofork = TRUE;
+-#endif
+     static int	recursive = 0;
+ 
+     old_term = vim_strsave(T_NAME);
+ 
+-    /*
+-     * Set_termname() will call gui_init() to start the GUI.
+-     * Set the "starting" flag, to indicate that the GUI will start.
+-     *
+-     * We don't want to open the GUI shell until after we've read .gvimrc,
+-     * otherwise we don't know what font we will use, and hence we don't know
+-     * what size the shell should be.  So if there are errors in the .gvimrc
+-     * file, they will have to go to the terminal: Set full_screen to FALSE.
+-     * full_screen will be set to TRUE again by a successful termcapinit().
+-     */
+     settmode(TMODE_COOK);		/* stop RAW mode */
+     if (full_screen)
+ 	cursor_on();			/* needed for ":gui" in .vimrc */
+-    gui.starting = TRUE;
+     full_screen = FALSE;
+ 
+-#ifdef MAY_FORK
+-    if (!gui.dofork || vim_strchr(p_go, GO_FORG) || recursive)
+-	dofork = FALSE;
+-#endif
+     ++recursive;
+ 
+-    termcapinit((char_u *)"builtin_gui");
+-    gui.starting = recursive - 1;
++#ifdef MAY_FORK
++    /*
++     * Quit the current process and continue in the child.
++     * Makes "gvim file" disconnect from the shell it was started in.
++     * Don't do this when Vim was started with "-f" or the 'f' flag is present
++     * in 'guioptions'.
++     */
++    if (gui.dofork && !vim_strchr(p_go, GO_FORG) && recursive <= 1)
++    {
++	gui_do_fork();
++    }
++    else
++#endif
++    {
++#ifdef FEAT_GUI_GTK
++	/* If there is 'f' in 'guioptions' and specify -g argument,
++	 * gui_mch_init_check() was not called yet.  */
++	if (gui_mch_init_check() != OK)
++	    exit(1);
++#endif
++	gui_attempt_start();
++    }
+ 
+     if (!gui.in_use)			/* failed to start GUI */
+     {
+-	termcapinit(old_term);		/* back to old term settings */
++	/* Back to old term settings
++	 *
++	 * FIXME: If we got here because a child process failed and flagged to
++	 * the parent to resume, and X11 is enabled with FEAT_TITLE, this will
++	 * hit an X11 I/O error and do a longjmp(), leaving recursive
++	 * permanently set to 1. This is probably not as big a problem as it
++	 * sounds, because gui_mch_init() in both gui_x11.c and gui_gtk_x11.c
++	 * return "OK" unconditionally, so it would be very difficult to
++	 * actually hit this case.
++	 */
++	termcapinit(old_term);
+ 	settmode(TMODE_RAW);		/* restart RAW mode */
+ #ifdef FEAT_TITLE
+ 	set_title_defaults();		/* set 'title' and 'icon' again */
+@@ -103,101 +131,223 @@
+ 
+     vim_free(old_term);
+ 
++#ifdef FEAT_AUTOCMD
++    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
++     * the GUIFailed event. */
++    gui_mch_update();
++    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
++						   NULL, NULL, FALSE, curbuf);
++#endif
++    --recursive;
++}
++
++/*
++ * Set_termname() will call gui_init() to start the GUI.
++ * Set the "starting" flag, to indicate that the GUI will start.
++ *
++ * We don't want to open the GUI shell until after we've read .gvimrc,
++ * otherwise we don't know what font we will use, and hence we don't know
++ * what size the shell should be.  So if there are errors in the .gvimrc
++ * file, they will have to go to the terminal: Set full_screen to FALSE.
++ * full_screen will be set to TRUE again by a successful termcapinit().
++ */
++    static void
++gui_attempt_start()
++{
++    static int recursive = 0;
++
++    ++recursive;
++    gui.starting = TRUE;
++
++#ifdef FEAT_GUI_GTK
++    gui.event_time = GDK_CURRENT_TIME;
++#endif
++
++    termcapinit((char_u *)"builtin_gui");
++    gui.starting = recursive - 1;
++
+ #if defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11)
+     if (gui.in_use)
++    {
++# ifdef FEAT_EVAL
++	Window	x11_window;
++	Display	*x11_display;
++
++	if (gui_get_x11_windis(&x11_window, &x11_display) == OK)
++	    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
++# endif
++
+ 	/* Display error messages in a dialog now. */
+ 	display_errors();
++    }
+ #endif
++    --recursive;
++}
+ 
+-#if defined(MAY_FORK) && !defined(__QNXNTO__)
+-    /*
+-     * Quit the current process and continue in the child.
+-     * Makes "gvim file" disconnect from the shell it was started in.
+-     * Don't do this when Vim was started with "-f" or the 'f' flag is present
+-     * in 'guioptions'.
+-     */
+-    if (gui.in_use && dofork)
++#ifdef MAY_FORK
++
++/* for waitpid() */
++# if defined(HAVE_SYS_WAIT_H) || defined(HAVE_UNION_WAIT)
++#  include <sys/wait.h>
++# endif
++
++/*
++ * Create a new process, by forking. In the child, start the GUI, and in
++ * the parent, exit.
++ *
++ * If something goes wrong, this will return with gui.in_use still set
++ * to FALSE, in which case the caller should continue execution without
++ * the GUI.
++ *
++ * If the child fails to start the GUI, then the child will exit and the
++ * parent will return. If the child succeeds, then the parent will exit
++ * and the child will return.
++ */
++    static void
++gui_do_fork()
++{
++#ifdef __QNXNTO__
++    procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
++	    PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
++    gui_attempt_start();
++    return;
++#else
++    int		pipefd[2];	/* pipe between parent and child */
++    int		pipe_error;
++    int		status;
++    int		exit_status;
++    pid_t	pid = -1;
++
++    /* Setup a pipe between the child and the parent, so that the parent
++     * knows when the child has done the setsid() call and is allowed to
++     * exit. */
++    pipe_error = (pipe(pipefd) < 0);
++    pid = fork();
++    if (pid < 0)	    /* Fork error */
+     {
+-	int	pipefd[2];	/* pipe between parent and child */
+-	int	pipe_error;
+-	char	dummy;
+-	pid_t	pid = -1;
+-
+-	/* Setup a pipe between the child and the parent, so that the parent
+-	 * knows when the child has done the setsid() call and is allowed to
+-	 * exit. */
+-	pipe_error = (pipe(pipefd) < 0);
+-	pid = fork();
+-	if (pid > 0)	    /* Parent */
+-	{
+-	    /* Give the child some time to do the setsid(), otherwise the
+-	     * exit() may kill the child too (when starting gvim from inside a
+-	     * gvim). */
+-	    if (pipe_error)
+-		ui_delay(300L, TRUE);
+-	    else
++	EMSG(_("E851: Failed to create a new process for the GUI"));
++	return;
++    }
++    else if (pid > 0)	    /* Parent */
++    {
++	/* Give the child some time to do the setsid(), otherwise the
++	 * exit() may kill the child too (when starting gvim from inside a
++	 * gvim). */
++	if (!pipe_error)
++	{
++	    /* The read returns when the child closes the pipe (or when
++	     * the child dies for some reason). */
++	    close(pipefd[1]);
++	    status = gui_read_child_pipe(pipefd[0]);
++	    if (status == GUI_CHILD_FAILED)
++	    {
++		/* The child failed to start the GUI, so the caller must
++		 * continue. There may be more error information written
++		 * to stderr by the child. */
++# ifdef __NeXT__
++		wait4(pid, &exit_status, 0, (struct rusage *)0);
++# else
++		waitpid(pid, &exit_status, 0);
++# endif
++		EMSG(_("E852: The child process failed to start the GUI"));
++		return;
++	    }
++	    else if (status == GUI_CHILD_IO_ERROR)
+ 	    {
+-		/* The read returns when the child closes the pipe (or when
+-		 * the child dies for some reason). */
+-		close(pipefd[1]);
+-		ignored = (int)read(pipefd[0], &dummy, (size_t)1);
+-		close(pipefd[0]);
++		pipe_error = TRUE;
+ 	    }
++	    /* else GUI_CHILD_OK: parent exit */
++	}
+ 
+-	    /* When swapping screens we may need to go to the next line, e.g.,
+-	     * after a hit-enter prompt and using ":gui". */
+-	    if (newline_on_exit)
+-		mch_errmsg("\r\n");
++	if (pipe_error)
++	    ui_delay(300L, TRUE);
+ 
+-	    /*
+-	     * The parent must skip the normal exit() processing, the child
+-	     * will do it.  For example, GTK messes up signals when exiting.
+-	     */
+-	    _exit(0);
+-	}
++	/* When swapping screens we may need to go to the next line, e.g.,
++	 * after a hit-enter prompt and using ":gui". */
++	if (newline_on_exit)
++	    mch_errmsg("\r\n");
+ 
+-# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
+ 	/*
+-	 * Change our process group.  On some systems/shells a CTRL-C in the
+-	 * shell where Vim was started would otherwise kill gvim!
++	 * The parent must skip the normal exit() processing, the child
++	 * will do it.  For example, GTK messes up signals when exiting.
+ 	 */
+-	if (pid == 0)	    /* child */
++	_exit(0);
++    }
++    /* Child */
++
++#ifdef FEAT_GUI_GTK
++    /* Call gtk_init_check() here after fork(). See gui_init_check(). */
++    if (gui_mch_init_check() != OK)
++	exit(1);
++#endif
++
++# if defined(HAVE_SETSID) || defined(HAVE_SETPGID)
++    /*
++     * Change our process group.  On some systems/shells a CTRL-C in the
++     * shell where Vim was started would otherwise kill gvim!
++     */
+ #  if defined(HAVE_SETSID)
+-	    (void)setsid();
++    (void)setsid();
+ #  else
+-	    (void)setpgid(0, 0);
++    (void)setpgid(0, 0);
+ #  endif
+ # endif
+-	if (!pipe_error)
+-	{
+-	    close(pipefd[0]);
+-	    close(pipefd[1]);
+-	}
++    if (!pipe_error)
++	close(pipefd[0]);
+ 
+ # if defined(FEAT_GUI_GNOME) && defined(FEAT_SESSION)
+-	/* Tell the session manager our new PID */
+-	gui_mch_forked();
++    /* Tell the session manager our new PID */
++    gui_mch_forked();
+ # endif
++
++    /* Try to start the GUI */
++    gui_attempt_start();
++
++    /* Notify the parent */
++    if (!pipe_error)
++    {
++	if (gui.in_use)
++	    write_eintr(pipefd[1], "ok", 3);
++	else
++	    write_eintr(pipefd[1], "fail", 5);
++	close(pipefd[1]);
+     }
+-#else
+-# if defined(__QNXNTO__)
+-    if (gui.in_use && dofork)
+-	procmgr_daemon(0, PROCMGR_DAEMON_KEEPUMASK | PROCMGR_DAEMON_NOCHDIR |
+-		PROCMGR_DAEMON_NOCLOSE | PROCMGR_DAEMON_NODEVNULL);
+-# endif
+-#endif
+ 
+-#ifdef FEAT_AUTOCMD
+-    /* If the GUI started successfully, trigger the GUIEnter event, otherwise
+-     * the GUIFailed event. */
+-    gui_mch_update();
+-    apply_autocmds(gui.in_use ? EVENT_GUIENTER : EVENT_GUIFAILED,
+-						   NULL, NULL, FALSE, curbuf);
++    /* If we failed to start the GUI, exit now. */
++    if (!gui.in_use)
++	exit(1);
+ #endif
++}
+ 
+-    --recursive;
++/*
++ * Read from a pipe assumed to be connected to the child process (this
++ * function is called from the parent).
++ * Return GUI_CHILD_OK if the child successfully started the GUI,
++ * GUY_CHILD_FAILED if the child failed, or GUI_CHILD_IO_ERROR if there was
++ * some other error.
++ *
++ * The file descriptor will be closed before the function returns.
++ */
++    static int
++gui_read_child_pipe(int fd)
++{
++    long	bytes_read;
++#define READ_BUFFER_SIZE 10
++    char	buffer[READ_BUFFER_SIZE];
++
++    bytes_read = read_eintr(fd, buffer, READ_BUFFER_SIZE - 1);
++#undef READ_BUFFER_SIZE
++    close(fd);
++    if (bytes_read < 0)
++	return GUI_CHILD_IO_ERROR;
++    buffer[bytes_read] = NUL;
++    if (strcmp(buffer, "ok") == 0)
++	return GUI_CHILD_OK;
++    return GUI_CHILD_FAILED;
+ }
+ 
++#endif /* MAY_FORK */
++
+ /*
+  * Call this when vim starts up, whether or not the GUI is started
+  */
+@@ -291,7 +441,17 @@
+ #ifdef ALWAYS_USE_GUI
+     result = OK;
+ #else
++# ifdef FEAT_GUI_GTK
++    /*
++     * Note: Don't call gtk_init_check() before fork, it will be called after
++     * the fork. When calling it before fork, it make vim hang for a while.
++     * See gui_do_fork().
++     * Use a simpler check if the GUI window can probably be opened.
++     */
++    result = gui.dofork ? gui_mch_early_init_check() : gui_mch_init_check();
++# else
+     result = gui_mch_init_check();
++# endif
+ #endif
+     return result;
+ }
+@@ -623,11 +783,9 @@
+ gui_exit(rc)
+     int		rc;
+ {
+-#ifndef __BEOS__
+     /* don't free the fonts, it leads to a BUS error
+      * richard@whitequeen.com Jul 99 */
+     free_highlight_fonts();
+-#endif
+     gui.in_use = FALSE;
+     gui_mch_exit(rc);
+ }
+@@ -668,7 +826,7 @@
+ #endif
+ 
+ /*
+- * Set the font.  "font_list" is a a comma separated list of font names.  The
++ * Set the font.  "font_list" is a comma separated list of font names.  The
+  * first font name that works is used.  If none is found, use the default
+  * font.
+  * If "fontset" is TRUE, the "font_list" is used as one name for the fontset.
+@@ -747,13 +905,7 @@
+ # endif
+ 	    gui_mch_set_font(gui.norm_font);
+ #endif
+-	gui_set_shellsize(FALSE,
+-#ifdef MSWIN
+-		TRUE
+-#else
+-		FALSE
+-#endif
+-		, RESIZE_BOTH);
++	gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
+     }
+ 
+     return ret;
+@@ -839,7 +991,7 @@
+     }
+ 
+     gui_mch_free_font(gui.wide_font);
+-#ifdef FEAT_GUI_GTK
++# ifdef FEAT_GUI_GTK
+     /* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */
+     if (font != NOFONT && gui.norm_font != NOFONT
+ 			 && pango_font_description_equal(font, gui.norm_font))
+@@ -848,8 +1000,11 @@
+ 	gui_mch_free_font(font);
+     }
+     else
+-#endif
++# endif
+ 	gui.wide_font = font;
++# ifdef FEAT_GUI_MSWIN
++    gui_mch_wide_font_changed();
++# endif
+     return OK;
+ }
+ #endif
+@@ -1392,7 +1547,7 @@
+     if (!gui.shell_created)
+ 	return;
+ 
+-#ifdef MSWIN
++#if defined(MSWIN) || defined(FEAT_GUI_GTK)
+     /* If not setting to a user specified size and maximized, calculate the
+      * number of characters that fit in the maximized window. */
+     if (!mustset && gui_mch_maximized())
+@@ -2146,7 +2301,7 @@
+ 
+     if (highlight_mask & (HL_INVERSE | HL_STANDOUT))
+     {
+-#if defined(AMIGA) || defined(RISCOS)
++#if defined(AMIGA)
+ 	gui_mch_set_colors(bg_color, fg_color);
+ #else
+ 	gui_mch_set_fg_color(bg_color);
+@@ -2155,7 +2310,7 @@
+     }
+     else
+     {
+-#if defined(AMIGA) || defined(RISCOS)
++#if defined(AMIGA)
+ 	gui_mch_set_colors(fg_color, bg_color);
+ #else
+ 	gui_mch_set_fg_color(fg_color);
+@@ -2183,7 +2338,7 @@
+     if (back != 0 && ((draw_flags & DRAW_BOLD) || (highlight_mask & HL_ITALIC)))
+ 	return FAIL;
+ 
+-#if defined(RISCOS) || defined(FEAT_GUI_GTK)
++#if defined(FEAT_GUI_GTK)
+     /* If there's no italic font, then fake it.
+      * For GTK2, we don't need a different font for italic style. */
+     if (hl_mask_todo & HL_ITALIC)
+@@ -2221,14 +2376,16 @@
+     {
+ 	int	start;		/* index of bytes to be drawn */
+ 	int	cells;		/* cellwidth of bytes to be drawn */
+-	int	thislen;	/* length of bytes to be drawin */
++	int	thislen;	/* length of bytes to be drawn */
+ 	int	cn;		/* cellwidth of current char */
+ 	int	i;		/* index of current char */
+ 	int	c;		/* current char value */
+ 	int	cl;		/* byte length of current char */
+ 	int	comping;	/* current char is composing */
+ 	int	scol = col;	/* screen column */
+-	int	dowide;		/* use 'guifontwide' */
++	int	curr_wide;	/* use 'guifontwide' */
++	int	prev_wide = FALSE;
++	int	wide_changed;
+ 
+ 	/* Break the string at a composing character, it has to be drawn on
+ 	 * top of the previous character. */
+@@ -2243,9 +2400,9 @@
+ 		    && fontset == NOFONTSET
+ #  endif
+ 		    && gui.wide_font != NOFONT)
+-		dowide = TRUE;
++		curr_wide = TRUE;
+ 	    else
+-		dowide = FALSE;
++		curr_wide = FALSE;
+ 	    comping = utf_iscomposing(c);
+ 	    if (!comping)	/* count cells from non-composing chars */
+ 		cells += cn;
+@@ -2253,9 +2410,11 @@
+ 	    if (cl == 0)	/* hit end of string */
+ 		len = i + cl;	/* len must be wrong "cannot happen" */
+ 
+-	    /* print the string so far if it's the last character or there is
++	    wide_changed = curr_wide != prev_wide;
++
++	    /* Print the string so far if it's the last character or there is
+ 	     * a composing character. */
+-	    if (i + cl >= len || (comping && i > start) || dowide
++	    if (i + cl >= len || (comping && i > start) || wide_changed
+ #  if defined(FEAT_GUI_X11)
+ 		    || (cn > 1
+ #   ifdef FEAT_XFONTSET
+@@ -2267,25 +2426,28 @@
+ #  endif
+ 	       )
+ 	    {
+-		if (comping || dowide)
++		if (comping || wide_changed)
+ 		    thislen = i - start;
+ 		else
+ 		    thislen = i - start + cl;
+ 		if (thislen > 0)
+ 		{
++		    if (prev_wide)
++			gui_mch_set_font(gui.wide_font);
+ 		    gui_mch_draw_string(gui.row, scol, s + start, thislen,
+ 								  draw_flags);
++		    if (prev_wide)
++			gui_mch_set_font(font);
+ 		    start += thislen;
+ 		}
+ 		scol += cells;
+ 		cells = 0;
+-		if (dowide)
++		/* Adjust to not draw a character which width is changed
++		 * against with last one. */
++		if (wide_changed && !comping)
+ 		{
+-		    gui_mch_set_font(gui.wide_font);
+-		    gui_mch_draw_string(gui.row, scol - cn,
+-						   s + start, cl, draw_flags);
+-		    gui_mch_set_font(font);
+-		    start += cl;
++		    scol -= cn;
++		    cl = 0;
+ 		}
+ 
+ #  if defined(FEAT_GUI_X11)
+@@ -2295,7 +2457,7 @@
+ #   ifdef FEAT_XFONTSET
+ 			&& fontset == NOFONTSET
+ #   endif
+-			&& !dowide)
++			&& !wide_changed)
+ 		    gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ",
+ 							       1, draw_flags);
+ #  endif
+@@ -2313,6 +2475,7 @@
+ #  endif
+ 		start = i + cl;
+ 	    }
++	    prev_wide = curr_wide;
+ 	}
+ 	/* The stuff below assumes "len" is the length in screen columns. */
+ 	len = scol - col;
+@@ -2352,7 +2515,7 @@
+     if (draw_sign)
+ 	/* Draw the sign on top of the spaces. */
+ 	gui_mch_drawsign(gui.row, col, gui.highlight_mask);
+-# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_MOTIF) \
++# if defined(FEAT_NETBEANS_INTG) && (defined(FEAT_GUI_X11) \
+ 	|| defined(FEAT_GUI_GTK) || defined(FEAT_GUI_W32))
+     if (multi_sign)
+ 	netbeans_draw_multisign_indicator(gui.row);
+@@ -2975,26 +3138,11 @@
+ 	    did_clip = TRUE;
+ 	}
+ 	/* Allow the left button to start the selection */
+-	else if (button ==
+-# ifdef RISCOS
+-		/* Only start a drag on a drag event. Otherwise
+-		 * we don't get a release event. */
+-		    MOUSE_DRAG
+-# else
+-		    MOUSE_LEFT
+-# endif
+-				)
+-	{
+-	    clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+-	    did_clip = TRUE;
+-	}
+-# ifdef RISCOS
+ 	else if (button == MOUSE_LEFT)
+ 	{
+-	    clip_clear_selection();
++	    clip_start_selection(X_2_COL(x), Y_2_ROW(y), repeated_click);
+ 	    did_clip = TRUE;
+ 	}
+-# endif
+ 
+ 	/* Always allow pasting */
+ 	if (button != MOUSE_MIDDLE)
+@@ -3008,7 +3156,7 @@
+     }
+ 
+     if (clip_star.state != SELECT_CLEARED && !did_clip)
+-	clip_clear_selection();
++	clip_clear_selection(&clip_star);
+ #endif
+ 
+     /* Don't put events in the input queue now. */
+@@ -3738,7 +3886,7 @@
+ 	gui.dragged_sb = SBAR_NONE;
+ #ifdef FEAT_GUI_GTK
+ 	/* Keep the "dragged_wp" value until after the scrolling, for when the
+-	 * moust button is released.  GTK2 doesn't send the button-up event. */
++	 * mouse button is released.  GTK2 doesn't send the button-up event. */
+ 	gui.dragged_wp = NULL;
+ #endif
+     }
+@@ -4893,7 +5041,7 @@
+ 		if (STRLEN(p) > 2000)
+ 		    STRCPY(p + 2000 - 14, "...(truncated)");
+ 		(void)do_dialog(VIM_ERROR, (char_u *)_("Error"),
+-					      p, (char_u *)_("&Ok"), 1, NULL);
++				       p, (char_u *)_("&Ok"), 1, NULL, FALSE);
+ 		break;
+ 	    }
+ 	ga_clear(&error_ga);
+diff -Naur vim73.orig/src/gui.h vim73/src/gui.h
+--- vim73.orig/src/gui.h	2010-07-17 19:40:58.000000000 +0000
++++ vim73/src/gui.h	2013-06-07 17:07:31.032253397 +0000
+@@ -52,10 +52,6 @@
+ # include <SegLoad.h>*/
+ #endif
+ 
+-#ifdef RISCOS
+-# include "gui_riscos.h"
+-#endif
+-
+ #ifdef FEAT_GUI_PHOTON
+ # include <Ph.h>
+ # include <Pt.h>
+@@ -63,15 +59,6 @@
+ #endif
+ 
+ /*
+- * On some systems, when we compile with the GUI, we always use it.  On Mac
+- * there is no terminal version, and on Windows we can't figure out how to
+- * fork one off with :gui.
+- */
+-#if defined(FEAT_GUI_MSWIN) || (defined(FEAT_GUI_MAC) && !defined(MACOS_X_UNIX))
+-# define ALWAYS_USE_GUI
+-#endif
+-
+-/*
+  * On some systems scrolling needs to be done right away instead of in the
+  * main loop.
+  */
+@@ -151,7 +138,7 @@
+ #define DRAW_BOLD		0x02	/* draw bold text */
+ #define DRAW_UNDERL		0x04	/* draw underline text */
+ #define DRAW_UNDERC		0x08	/* draw undercurl text */
+-#if defined(RISCOS) || defined(FEAT_GUI_GTK)
++#if defined(FEAT_GUI_GTK)
+ # define DRAW_ITALIC		0x10	/* draw italic text */
+ #endif
+ #define DRAW_CURSOR		0x20	/* drawing block cursor (win32) */
+@@ -219,9 +206,6 @@
+ #ifdef FEAT_GUI_MAC
+     ControlHandle id;		/* A handle to the scrollbar */
+ #endif
+-#ifdef RISCOS
+-    int		id;		/* Window handle of scrollbar window */
+-#endif
+ #ifdef FEAT_GUI_PHOTON
+     PtWidget_t	*id;
+ #endif
+@@ -408,6 +392,8 @@
+     GtkAccelGroup *accel_group;
+     GtkWidget	*filedlg;	    /* file selection dialog */
+     char_u	*browse_fname;	    /* file name from filedlg */
++
++    guint32	event_time;
+ #endif	/* FEAT_GUI_GTK */
+ 
+ #if defined(FEAT_GUI_TABLINE) \
+@@ -450,14 +436,6 @@
+     int		visibility;	    /* Is window partially/fully obscured? */
+ #endif
+ 
+-#ifdef RISCOS
+-    int		window_handle;
+-    char_u	*window_title;
+-    int		window_title_size;
+-    int		fg_colour;		/* in 0xBBGGRR format */
+-    int		bg_colour;
+-#endif
+-
+ #ifdef FEAT_GUI_PHOTON
+     PtWidget_t	*vimWindow;		/* PtWindow */
+     PtWidget_t	*vimTextArea;		/* PtRaw */
+diff -Naur vim73.orig/src/gui_athena.c vim73/src/gui_athena.c
+--- vim73.orig/src/gui_athena.c	2010-08-08 13:01:39.000000000 +0000
++++ vim73/src/gui_athena.c	2013-06-07 17:07:31.068919959 +0000
+@@ -519,7 +519,7 @@
+ 	    &color[TOP_SHADOW].pixel,
+ 	    &color[HIGHLIGHT].pixel);
+ 
+-    /* Setup the color subsititution table */
++    /* Setup the color substitution table */
+     attrs.valuemask = XpmColorSymbols;
+     attrs.colorsymbols = color;
+     attrs.numsymbols = 5;
+@@ -2117,13 +2117,14 @@
+ }
+ 
+     int
+-gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield)
++gui_mch_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
+     int		type UNUSED;
+     char_u	*title;
+     char_u	*message;
+     char_u	*buttons;
+     int		dfltbutton UNUSED;
+     char_u	*textfield;
++    int		ex_cmd UNUSED;
+ {
+     char_u		*buts;
+     char_u		*p, *next;
+diff -Naur vim73.orig/src/gui_beval.c vim73/src/gui_beval.c
+--- vim73.orig/src/gui_beval.c	2010-06-25 02:59:43.000000000 +0000
++++ vim73/src/gui_beval.c	2013-06-07 17:07:31.075586606 +0000
+@@ -359,7 +359,7 @@
+ 			}
+ 		    }
+ 
+-		    col = vcol2col(wp, lnum, col) - 1;
++		    col = vcol2col(wp, lnum, col);
+ 
+ 		    if (VIsual_active
+ 			    && wp->w_buffer == curwin->w_buffer
+@@ -377,8 +377,10 @@
+ 			    return FAIL;
+ 
+ 			lbuf = ml_get_buf(curwin->w_buffer, VIsual.lnum, FALSE);
+-			lbuf = vim_strnsave(lbuf + spos->col,
+-				     epos->col - spos->col + (*p_sel != 'e'));
++			len = epos->col - spos->col;
++			if (*p_sel != 'e')
++			    len += MB_PTR2LEN(lbuf + epos->col);
++			lbuf = vim_strnsave(lbuf + spos->col, len);
+ 			lnum = spos->lnum;
+ 			col = spos->col;
+ 		    }
+@@ -724,7 +726,7 @@
+     BalloonEval	*beval;
+     XEvent	*event;
+ {
+-    Position	distance;	    /* a measure of how much the ponter moved */
++    Position	distance;	    /* a measure of how much the pointer moved */
+     Position	delta;		    /* used to compute distance */
+ 
+     switch (event->type)
+diff -Naur vim73.orig/src/gui_gtk.c vim73/src/gui_gtk.c
+--- vim73.orig/src/gui_gtk.c	2010-07-20 11:15:22.000000000 +0000
++++ vim73/src/gui_gtk.c	2013-06-07 17:07:31.098919873 +0000
+@@ -90,6 +90,13 @@
+ static void entry_activate_cb(GtkWidget *widget, gpointer data);
+ static void entry_changed_cb(GtkWidget *entry, GtkWidget *dialog);
+ static void find_replace_cb(GtkWidget *widget, gpointer data);
++#if defined(FEAT_BROWSE) || defined(PROTO)
++static void recent_func_log_func(
++	const gchar *log_domain,
++	GLogLevelFlags log_level,
++	const gchar *message,
++	gpointer user_data);
++#endif
+ 
+ #if defined(FEAT_TOOLBAR)
+ /*
+@@ -772,9 +779,6 @@
+ /*
+  * Implementation of the file selector related stuff
+  */
+-#if GTK_CHECK_VERSION(2,4,0)
+-# define USE_FILE_CHOOSER
+-#endif
+ 
+ #ifndef USE_FILE_CHOOSER
+     static void
+@@ -833,12 +837,14 @@
+ 	       char_u *dflt,
+ 	       char_u *ext UNUSED,
+ 	       char_u *initdir,
+-	       char_u *filter UNUSED)
++	       char_u *filter)
+ {
+ #ifdef USE_FILE_CHOOSER
+     GtkWidget		*fc;
+ #endif
+     char_u		dirbuf[MAXPATHL];
++    guint		log_handler;
++    const gchar		*domain = "Gtk";
+ 
+     title = CONVERT_TO_UTF8(title);
+ 
+@@ -853,6 +859,11 @@
+     /* If our pointer is currently hidden, then we should show it. */
+     gui_mch_mousehide(FALSE);
+ 
++    /* Hack: The GTK file dialog warns when it can't access a new file, this
++     * makes it shut up. http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
++    log_handler = g_log_set_handler(domain, G_LOG_LEVEL_WARNING,
++						  recent_func_log_func, NULL);
++
+ #ifdef USE_FILE_CHOOSER
+     /* We create the dialog each time, so that the button text can be "Open"
+      * or "Save" according to the action. */
+@@ -865,6 +876,46 @@
+ 	    NULL);
+     gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(fc),
+ 						       (const gchar *)dirbuf);
++
++    if (filter != NULL && *filter != NUL)
++    {
++	int     i = 0;
++	char_u  *patt;
++	char_u  *p = filter;
++	GtkFileFilter	*gfilter;
++
++	gfilter = gtk_file_filter_new();
++	patt = alloc(STRLEN(filter));
++	while (p != NULL && *p != NUL)
++	{
++	    if (*p == '\n' || *p == ';' || *p == '\t')
++	    {
++		STRNCPY(patt, filter, i);
++		patt[i] = '\0';
++		if (*p == '\t')
++		    gtk_file_filter_set_name(gfilter, (gchar *)patt);
++		else
++		{
++		    gtk_file_filter_add_pattern(gfilter, (gchar *)patt);
++		    if (*p == '\n')
++		    {
++			gtk_file_chooser_add_filter((GtkFileChooser *)fc,
++								     gfilter);
++			if (*(p + 1) != NUL)
++			    gfilter = gtk_file_filter_new();
++		    }
++		}
++		filter = ++p;
++		i = 0;
++	    }
++	    else
++	    {
++		p++;
++		i++;
++	    }
++	}
++	vim_free(patt);
++    }
+     if (saving && dflt != NULL && *dflt != NUL)
+ 	gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(fc), (char *)dflt);
+ 
+@@ -916,6 +967,7 @@
+     gtk_widget_show(gui.filedlg);
+     gtk_main();
+ #endif
++    g_log_remove_handler(domain, log_handler);
+ 
+     CONVERT_TO_UTF8_FREE(title);
+     if (gui.browse_fname == NULL)
+@@ -1268,7 +1320,8 @@
+ 	       char_u	*message,   /* message text */
+ 	       char_u	*buttons,   /* names of buttons */
+ 	       int	def_but,    /* default button */
+-	       char_u	*textfield) /* text for textfield or NULL */
++	       char_u	*textfield, /* text for textfield or NULL */
++	       int	ex_cmd UNUSED)
+ {
+     GtkWidget	*dialog;
+     GtkWidget	*entry = NULL;
+@@ -1287,6 +1340,9 @@
+ 	entry = gtk_entry_new();
+ 	gtk_widget_show(entry);
+ 
++	/* Make Enter work like pressing OK. */
++	gtk_entry_set_activates_default(GTK_ENTRY(entry), TRUE);
++
+ 	text = CONVERT_TO_UTF8(textfield);
+ 	gtk_entry_set_text(GTK_ENTRY(entry), (const char *)text);
+ 	CONVERT_TO_UTF8_FREE(text);
+@@ -1387,7 +1443,7 @@
+     gtk_menu_popup(GTK_MENU(menu->submenu_id),
+ 		   NULL, NULL,
+ 		   (GtkMenuPositionFunc)NULL, NULL,
+-		   3U, (guint32)GDK_CURRENT_TIME);
++		   3U, gui.event_time);
+ }
+ 
+ /* Ugly global variable to pass "mouse_pos" flag from gui_make_popup() to
+@@ -1795,7 +1851,6 @@
+     char_u		*repl_text;
+     gboolean		direction_down;
+     SharedFindReplace	*sfr;
+-    int			rc;
+ 
+     flags = (int)(long)data;	    /* avoid a lint warning here */
+ 
+@@ -1821,7 +1876,7 @@
+ 
+     repl_text = CONVERT_FROM_UTF8(repl_text);
+     find_text = CONVERT_FROM_UTF8(find_text);
+-    rc = gui_do_findrepl(flags, find_text, repl_text, direction_down);
++    gui_do_findrepl(flags, find_text, repl_text, direction_down);
+     CONVERT_FROM_UTF8_FREE(repl_text);
+     CONVERT_FROM_UTF8_FREE(find_text);
+ }
+@@ -1879,3 +1934,15 @@
+      * backwards compatibility anyway. */
+     do_cmdline_cmd((char_u *)"emenu ToolBar.FindHelp");
+ }
++
++#if defined(FEAT_BROWSE) || defined(PROTO)
++    static void
++recent_func_log_func(const gchar *log_domain UNUSED,
++		     GLogLevelFlags log_level UNUSED,
++		     const gchar *message UNUSED,
++		     gpointer user_data UNUSED)
++{
++    /* We just want to suppress the warnings. */
++    /* http://bugzilla.gnome.org/show_bug.cgi?id=664587 */
++}
++#endif
+diff -Naur vim73.orig/src/gui_gtk_x11.c vim73/src/gui_gtk_x11.c
+--- vim73.orig/src/gui_gtk_x11.c	2010-08-15 11:52:15.000000000 +0000
++++ vim73/src/gui_gtk_x11.c	2013-06-07 17:07:31.152253054 +0000
+@@ -86,7 +86,6 @@
+ 
+ #ifdef HAVE_X11_SUNKEYSYM_H
+ # include <X11/Sunkeysym.h>
+-static guint32 clipboard_event_time = CurrentTime;
+ #endif
+ 
+ /*
+@@ -933,7 +932,7 @@
+     guint	state;
+     char_u	*s, *d;
+ 
+-    clipboard_event_time = event->time;
++    gui.event_time = event->time;
+     key_sym = event->keyval;
+     state = event->state;
+ 
+@@ -1128,7 +1127,7 @@
+ 		  GdkEventKey *event,
+ 		  gpointer data UNUSED)
+ {
+-    clipboard_event_time = event->time;
++    gui.event_time = event->time;
+     /*
+      * GTK+ 2 input methods may do fancy stuff on key release events too.
+      * With the default IM for instance, you can enter any UCS code point
+@@ -1172,7 +1171,7 @@
+     char_u	    *tmpbuf = NULL;
+     guchar	    *tmpbuf_utf8 = NULL;
+     int		    len;
+-    int		    motion_type;
++    int		    motion_type = MAUTO;
+ 
+     if (data->selection == clip_plus.gtk_sel_atom)
+ 	cbd = &clip_plus;
+@@ -1181,7 +1180,6 @@
+ 
+     text = (char_u *)data->data;
+     len  = data->length;
+-    motion_type = MCHAR;
+ 
+     if (text == NULL || len <= 0)
+     {
+@@ -1259,7 +1257,7 @@
+ 	}
+     }
+ 
+-    /* Chop off any traiing NUL bytes.  OpenOffice sends these. */
++    /* Chop off any trailing NUL bytes.  OpenOffice sends these. */
+     while (len > 0 && text[len - 1] == NUL)
+ 	--len;
+ 
+@@ -1416,7 +1414,29 @@
+ }
+ 
+ /*
+- * Check if the GUI can be started.  Called before gvimrc is sourced.
++ * Check if the GUI can be started.  Called before gvimrc is sourced and
++ * before fork().
++ * Return OK or FAIL.
++ */
++    int
++gui_mch_early_init_check(void)
++{
++    char_u *p;
++
++    /* Guess that when $DISPLAY isn't set the GUI can't start. */
++    p = mch_getenv((char_u *)"DISPLAY");
++    if (p == NULL || *p == NUL)
++    {
++	gui.dying = TRUE;
++	EMSG(_((char *)e_opendisp));
++	return FAIL;
++    }
++    return OK;
++}
++
++/*
++ * Check if the GUI can be started.  Called before gvimrc is sourced but after
++ * fork().
+  * Return OK or FAIL.
+  */
+     int
+@@ -1427,6 +1447,11 @@
+ 	using_gnome = 1;
+ #endif
+ 
++    /* This defaults to argv[0], but we want it to match the name of the
++     * shipped gvim.desktop so that Vim's windows can be associated with this
++     * file. */
++    g_set_prgname("gvim");
++
+     /* Don't use gtk_init() or gnome_init(), it exits on failure. */
+     if (!gtk_init_check(&gui_argc, &gui_argv))
+     {
+@@ -1622,7 +1647,7 @@
+     int x, y;
+     int_u vim_modifiers;
+ 
+-    clipboard_event_time = event->time;
++    gui.event_time = event->time;
+ 
+     /* Make sure we have focus now we've been selected */
+     if (gtk_socket_id != 0 && !GTK_WIDGET_HAS_FOCUS(widget))
+@@ -1733,7 +1758,7 @@
+     int x, y;
+     int_u vim_modifiers;
+ 
+-    clipboard_event_time = event->time;
++    gui.event_time = event->time;
+ 
+     /* Remove any motion "machine gun" timers used for automatic further
+        extension of allocation areas if outside of the applications window
+@@ -3052,7 +3077,7 @@
+ 
+     for (i = 0; i < (int)N_SELECTION_TARGETS; ++i)
+     {
+-	/* OpenOffice tries to use TARGET_HTML and fails when it doesn't
++	/* OpenOffice tries to use TARGET_HTML and fails when we don't
+ 	 * return something, instead of trying another target. Therefore only
+ 	 * offer TARGET_HTML when it works. */
+ 	if (!clip_html && selection_targets[i].info == TARGET_HTML)
+@@ -3083,7 +3108,7 @@
+ 
+     for (i = 0; i < (int)N_DND_TARGETS; ++i)
+     {
+-	if (!clip_html && selection_targets[i].info == TARGET_HTML)
++	if (!clip_html && dnd_targets[i].info == TARGET_HTML)
+ 	    n_targets--;
+ 	else
+ 	    targets[j++] = dnd_targets[i];
+@@ -3093,7 +3118,7 @@
+     gtk_drag_dest_set(gui.drawarea,
+ 		      GTK_DEST_DEFAULT_ALL,
+ 		      targets, n_targets,
+-		      GDK_ACTION_COPY);
++		      GDK_ACTION_COPY | GDK_ACTION_MOVE);
+ }
+ 
+ /*
+@@ -3110,8 +3135,16 @@
+      * exits on failure, but that's a non-issue because we already called
+      * gtk_init_check() in gui_mch_init_check(). */
+     if (using_gnome)
++    {
+ 	gnome_program_init(VIMPACKAGE, VIM_VERSION_SHORT,
+ 			   LIBGNOMEUI_MODULE, gui_argc, gui_argv, NULL);
++# if defined(FEAT_FLOAT) && defined(LC_NUMERIC)
++	/* Make sure strtod() uses a decimal point, not a comma. Gnome init
++	 * may change it. */
++	if (setlocale(LC_NUMERIC, NULL) != (char *) "C")
++	   setlocale(LC_NUMERIC, "C");
++# endif
++    }
+ #endif
+     vim_free(gui_argv);
+     gui_argv = NULL;
+@@ -3902,6 +3935,21 @@
+ }
+ 
+ /*
++ * Called when the font changed while the window is maximized.  Compute the
++ * new Rows and Columns.  This is like resizing the window.
++ */
++    void
++gui_mch_newfont()
++{
++    int w, h;
++
++    gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
++    w -= get_menu_tool_width();
++    h -= get_menu_tool_height();
++    gui_resize_shell(w, h);
++}
++
++/*
+  * Set the windows size.
+  */
+     void
+@@ -4411,14 +4459,9 @@
+ 
+     if (gui_mch_maximized())
+     {
+-	int w, h;
+-
+ 	/* Update lines and columns in accordance with the new font, keep the
+ 	 * window maximized. */
+-	gtk_window_get_size(GTK_WINDOW(gui.mainwin), &w, &h);
+-	w -= get_menu_tool_width();
+-	h -= get_menu_tool_height();
+-	gui_resize_shell(w, h);
++	gui_mch_newfont();
+     }
+     else
+     {
+@@ -5126,8 +5169,7 @@
+     return FAIL;
+ }
+ 
+-#if defined(FEAT_TITLE) \
+-	|| defined(PROTO)
++#if defined(FEAT_TITLE) || defined(FEAT_EVAL) || defined(PROTO)
+ /*
+  * Return the text window-id and display.  Only required for X-based GUI's
+  */
+@@ -5419,7 +5461,7 @@
+ 	}
+ 
+ #if defined(FEAT_NETBEANS_INTG)
+-	/* Process the queued netbeans messages. */
++	/* Process any queued netbeans messages. */
+ 	netbeans_parse_messages();
+ #endif
+ 
+@@ -5637,12 +5679,8 @@
+     void
+ clip_mch_lose_selection(VimClipboard *cbd UNUSED)
+ {
+-    /* WEIRD: when using NULL to actually disown the selection, we lose the
+-     * selection the first time we own it. */
+-    /*
+-    gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, (guint32)GDK_CURRENT_TIME);
++    gtk_selection_owner_set(NULL, cbd->gtk_sel_atom, gui.event_time);
+     gui_mch_update();
+-     */
+ }
+ 
+ /*
+@@ -5654,7 +5692,7 @@
+     int success;
+ 
+     success = gtk_selection_owner_set(gui.drawarea, cbd->gtk_sel_atom,
+-				      clipboard_event_time);
++				      gui.event_time);
+     gui_mch_update();
+     return (success) ? OK : FAIL;
+ }
+@@ -5668,6 +5706,12 @@
+ {
+ }
+ 
++    int
++clip_gtk_owner_exists(VimClipboard *cbd)
++{
++    return gdk_selection_owner_get(cbd->gtk_sel_atom) != NULL;
++}
++
+ 
+ #if defined(FEAT_MENU) || defined(PROTO)
+ /*
+diff -Naur vim73.orig/src/gui_mac.c vim73/src/gui_mac.c
+--- vim73.orig/src/gui_mac.c	2010-08-14 19:39:54.000000000 +0000
++++ vim73/src/gui_mac.c	2013-06-07 17:07:31.195586264 +0000
+@@ -41,7 +41,7 @@
+ #define USE_AEVENT		/* Enable AEVENT */
+ #undef USE_OFFSETED_WINDOW	/* Debugging feature: start Vim window OFFSETed */
+ 
+-/* Compile as CodeWarior External Editor */
++/* Compile as CodeWarrior External Editor */
+ #if defined(FEAT_CW_EDITOR) && !defined(USE_AEVENT)
+ # define USE_AEVENT /* Need Apple Event Support */
+ #endif
+@@ -1478,9 +1478,9 @@
+ /*
+  *  gui_mac_get_menu_item_index
+  *
+- *  Returns the index inside the menu wher
++ *  Returns the index inside the menu where
+  */
+-    short /* Shoulde we return MenuItemIndex? */
++    short /* Should we return MenuItemIndex? */
+ gui_mac_get_menu_item_index(vimmenu_T *pMenu)
+ {
+     short	index;
+@@ -1693,7 +1693,7 @@
+ 
+     if (theControl != NUL)
+     {
+-	/* We hit a scollbar */
++	/* We hit a scrollbar */
+ 
+ 	if (thePortion != kControlIndicatorPart)
+ 	{
+@@ -1823,7 +1823,7 @@
+ 	p.h += gui.scrollbar_width;
+     if (gui.which_scrollbars[SBAR_RIGHT])
+ 	p.h += gui.scrollbar_width;
+-    /* ideal height is as heigh as we can get */
++    /* ideal height is as high as we can get */
+     p.v = 15 * 1024;
+ 
+     thePart = IsWindowInStandardState(whichWindow, &p, &r)
+@@ -1840,7 +1840,7 @@
+ 	p.v -= gui.scrollbar_height;
+     p.v -= p.v % gui.char_height;
+     p.v += 2 * gui.border_width;
+-    if (gui.which_scrollbars[SBAR_BOTTOM]);
++    if (gui.which_scrollbars[SBAR_BOTTOM])
+ 	p.v += gui.scrollbar_height;
+ 
+     ZoomWindowIdeal(whichWindow, thePart, &p);
+@@ -2630,7 +2630,7 @@
+     {
+ 	/* Handle the menu CntxMenuID, CntxMenuItem */
+ 	/* The submenu can be handle directly by gui_mac_handle_menu */
+-	/* But what about the current menu, is the meny changed by ContextualMenuSelect */
++	/* But what about the current menu, is the many changed by ContextualMenuSelect */
+ 	gui_mac_handle_menu((CntxMenuID << 16) + CntxMenuItem);
+     }
+     else if (CntxMenuID == kCMShowHelpSelected)
+@@ -3216,7 +3216,7 @@
+ {
+     /* TODO:
+      * This proc is called when Normal is set to a value
+-     * so what msut be done? I don't know
++     * so what must be done? I don't know
+      */
+ }
+ 
+@@ -3303,7 +3303,6 @@
+     *x = bounds.left;
+     *y = bounds.top;
+     return OK;
+-    return FAIL;
+ }
+ 
+ /*
+@@ -4481,7 +4480,7 @@
+ 	 * event arrives.  No need to check for input_buf_full because we are
+ 	 * returning as soon as it contains a single char.
+ 	 */
+-	/* TODO: reduce wtime accordinly???  */
++	/* TODO: reduce wtime accordingly???  */
+ 	if (wtime > -1)
+ 	    sleeppyTick = 60 * wtime / 1000;
+ 	else
+@@ -4671,7 +4670,7 @@
+     if (flavor)
+ 	type = **textOfClip;
+     else
+-	type = (strchr(*textOfClip, '\r') != NULL) ? MLINE : MCHAR;
++	type = MAUTO;
+ 
+     tempclip = lalloc(scrapSize + 1, TRUE);
+     mch_memmove(tempclip, *textOfClip + flavor, scrapSize);
+@@ -5357,7 +5356,7 @@
+     char_u *initdir,
+     char_u *filter)
+ {
+-    /* TODO: Add Ammon's safety checl (Dany) */
++    /* TODO: Add Ammon's safety check (Dany) */
+     NavReplyRecord	reply;
+     char_u		*fname = NULL;
+     char_u		**fnames = NULL;
+@@ -5583,7 +5582,8 @@
+     char_u	*message,
+     char_u	*buttons,
+     int		dfltbutton,
+-    char_u	*textfield)
++    char_u	*textfield,
++    int		ex_cmd)
+ {
+     Handle	buttonDITL;
+     Handle	iconDITL;
+@@ -5704,7 +5704,7 @@
+ 
+ 	/* Resize the button to fit its name */
+ 	width = StringWidth(name) + 2 * dfltButtonEdge;
+-	/* Limite the size of any button to an acceptable value. */
++	/* Limit the size of any button to an acceptable value. */
+ 	/* TODO: Should be based on the message width */
+ 	if (width > maxButtonWidth)
+ 	    width = maxButtonWidth;
+@@ -5723,13 +5723,13 @@
+     iconDITL = GetResource('DITL', 131);
+     switch (type)
+     {
+-	case VIM_GENERIC:  useIcon = kNoteIcon;
+-	case VIM_ERROR:    useIcon = kStopIcon;
+-	case VIM_WARNING:  useIcon = kCautionIcon;
+-	case VIM_INFO:     useIcon = kNoteIcon;
+-	case VIM_QUESTION: useIcon = kNoteIcon;
+-	default:      useIcon = kStopIcon;
+-    };
++	case VIM_GENERIC:
++	case VIM_INFO:
++	case VIM_QUESTION: useIcon = kNoteIcon; break;
++	case VIM_WARNING:  useIcon = kCautionIcon; break;
++	case VIM_ERROR:    useIcon = kStopIcon; break;
++	default:	   useIcon = kStopIcon;
++    }
+     AppendDITL(theDialog, iconDITL, overlayDITL);
+     ReleaseResource(iconDITL);
+     GetDialogItem(theDialog, iconItm.idx, &itemType, &itemHandle, &box);
+@@ -5887,12 +5887,12 @@
+     /* Free the modal filterProc */
+     DisposeRoutineDescriptor(dialogUPP);
+ 
+-    /* Get ride of th edialog (free memory) */
++    /* Get ride of the dialog (free memory) */
+     DisposeDialog(theDialog);
+ 
+     return itemHit;
+ /*
+- * Usefull thing which could be used
++ * Useful thing which could be used
+  * SetDialogTimeout(): Auto click a button after timeout
+  * SetDialogTracksCursor() : Get the I-beam cursor over input box
+  * MoveDialogItem():	    Probably better than SetDialogItem
+@@ -5967,9 +5967,9 @@
+ 	/* New way */
+ 
+ 	/*
+-	 * Get first devoice with one button.
+-	 * This will probably be the standad mouse
+-	 * startat head of cursor dev list
++	 * Get first device with one button.
++	 * This will probably be the standard mouse
++	 * start at head of cursor dev list
+ 	 *
+ 	 */
+ 
+@@ -6100,7 +6100,7 @@
+ #endif
+ 
+ /*
+- * Transfered from os_mac.c for MacOS X using os_unix.c prep work
++ * Transferred from os_mac.c for MacOS X using os_unix.c prep work
+  */
+ 
+     int
+@@ -6151,7 +6151,7 @@
+ }
+ 
+ /*
+- * Convert a FSSpec to a fuill path
++ * Convert a FSSpec to a full path
+  */
+ 
+ char_u *FullPathFromFSSpec_save(FSSpec file)
+@@ -6215,8 +6215,8 @@
+ 
+ #ifdef USE_UNIXFILENAME
+     /*
+-     * The function used here are available in Carbon, but
+-     * do nothing une MacOS 8 and 9
++     * The functions used here are available in Carbon, but do nothing on
++     * MacOS 8 and 9.
+      */
+     if (error == fnfErr)
+     {
+@@ -6543,8 +6543,8 @@
+ static ControlRef dataBrowser = NULL;
+ 
+ // when the tabline is hidden, vim doesn't call update_tabline(). When
+-// the tabline is shown again, show_tabline() is called before upate_tabline(),
+-// and because of this, the tab labels and vims internal tabs are out of sync
++// the tabline is shown again, show_tabline() is called before update_tabline(),
++// and because of this, the tab labels and vim's internal tabs are out of sync
+ // for a very short time. to prevent inconsistent state, we store the labels
+ // of the tabs, not pointers to the tabs (which are invalid for a short time).
+ static CFStringRef *tabLabels = NULL;
+@@ -6578,7 +6578,7 @@
+ 
+     // assert(property == kTabsColumn); // why is this violated??
+ 
+-    // changeValue is true if we have a modifieable list and data was changed.
++    // changeValue is true if we have a modifiable list and data was changed.
+     // In our case, it's always false.
+     // (that is: if (changeValue) updateInternalData(); else return
+     // internalData();
+diff -Naur vim73.orig/src/gui_motif.c vim73/src/gui_motif.c
+--- vim73.orig/src/gui_motif.c	2010-08-08 13:04:15.000000000 +0000
++++ vim73/src/gui_motif.c	2013-06-07 17:07:31.212252883 +0000
+@@ -1344,7 +1344,7 @@
+ 	else
+ 	{
+ 	    /* Without shadows one can't sense whatever the button has been
+-	     * pressed or not! However we wan't to save a bit of space...
++	     * pressed or not! However we want to save a bit of space...
+ 	     * Need the highlightThickness to see the focus.
+ 	     */
+ 	    XtSetArg(args[n], XmNhighlightThickness, 1); n++;
+@@ -2549,13 +2549,14 @@
+ #endif
+ 
+     int
+-gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield)
++gui_mch_dialog(type, title, message, button_names, dfltbutton, textfield, ex_cmd)
+     int		type UNUSED;
+     char_u	*title;
+     char_u	*message;
+     char_u	*button_names;
+     int		dfltbutton;
+     char_u	*textfield;		/* buffer of size IOSIZE */
++    int		ex_cmd UNUSED;
+ {
+     char_u		*buts;
+     char_u		*p, *next;
+@@ -3204,7 +3205,7 @@
+ # ifdef FEAT_FOOTER
+ /*
+  * The next toolbar enter/leave callbacks should really do balloon help.  But
+- * I have to use footer help for backwards compatability.  Hopefully both will
++ * I have to use footer help for backwards compatibility.  Hopefully both will
+  * get implemented and the user will have a choice.
+  */
+     static void
+diff -Naur vim73.orig/src/gui_photon.c vim73/src/gui_photon.c
+--- vim73.orig/src/gui_photon.c	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/gui_photon.c	2013-06-07 17:07:31.238919473 +0000
+@@ -13,8 +13,11 @@
+ 
+ #include "vim.h"
+ 
+-#ifdef FEAT_TOOLBAR
+-# include <photon/PxImage.h>
++/* cproto fails on missing include files */
++#ifndef PROTO
++# ifdef FEAT_TOOLBAR
++#  include <photon/PxImage.h>
++# endif
+ #endif
+ 
+ #if !defined(__QNX__)
+@@ -32,9 +35,9 @@
+ #endif
+ 
+ #define ARRAY_LENGTH(a) (sizeof(a) / sizeof(a[0]))
+-#define RGB(r,g,b) PgRGB(r,g,b)
++#define RGB(r, g, b) PgRGB(r, g, b)
+ 
+-#define EVENT_BUFFER_SIZE sizeof( PhEvent_t ) + 1000
++#define EVENT_BUFFER_SIZE sizeof(PhEvent_t) + 1000
+ 
+ /* Some defines for gui_mch_mousehide() */
+ #define MOUSE_HIDE		TRUE
+@@ -58,7 +61,7 @@
+ static PhPoint_t    gui_ph_raw_offset;
+ static PtWidget_t   *gui_ph_timer_cursor;   /* handle cursor blinking */
+ static PtWidget_t   *gui_ph_timer_timeout;  /* used in gui_mch_wait_for_chars */
+-static short	    is_timeout;		    /* Has the timeout occured? */
++static short	    is_timeout;		    /* Has the timeout occurred? */
+ 
+ /*
+  * This is set inside the mouse callback for a right mouse
+@@ -206,53 +209,53 @@
+ static PtCallbackF_t gui_ph_handle_menu_unrealized;
+ 
+ #ifdef USE_PANEL_GROUP
+-static void gui_ph_get_panelgroup_margins( short*, short*, short*, short* );
++static void gui_ph_get_panelgroup_margins(short*, short*, short*, short*);
+ #endif
+ 
+ #ifdef FEAT_TOOLBAR
+-static PhImage_t *gui_ph_toolbar_find_icon( vimmenu_T *menu );
++static PhImage_t *gui_ph_toolbar_find_icon(vimmenu_T *menu);
+ #endif
+ 
+-static void gui_ph_draw_start( void );
+-static void gui_ph_draw_end( void );
++static void gui_ph_draw_start(void);
++static void gui_ph_draw_end(void);
+ 
+ /* Set the text for the balloon */
+-static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
++static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
+ 			     PtWidget_t *widget,
+ 			     int position,
+ 			     char *text,
+ 			     char *font,
+ 			     PgColor_t fill_color,
+-			     PgColor_t text_color );
++			     PgColor_t text_color);
+ 
+ /****************************************************************************/
+ 
+-static PtWidget_t * gui_ph_show_tooltip( PtWidget_t *window,
++static PtWidget_t * gui_ph_show_tooltip(PtWidget_t *window,
+ 			     PtWidget_t *widget,
+ 			     int position,
+ 			     char *text,
+ 			     char *font,
+ 			     PgColor_t fill_color,
+-			     PgColor_t text_color )
++			     PgColor_t text_color)
+ {
+     PtArg_t arg;
+     vimmenu_T *menu;
+     char_u  *tooltip;
+ 
+-    PtSetArg( &arg, Pt_ARG_POINTER, &menu, 0 );
+-    PtGetResources( widget, 1, &arg );
++    PtSetArg(&arg, Pt_ARG_POINTER, &menu, 0);
++    PtGetResources(widget, 1, &arg);
+ 
+     /* Override the text and position */
+ 
+     tooltip = text;
+-    if( menu != NULL )
++    if (menu != NULL)
+     {
+ 	int index = MENU_INDEX_TIP;
+-	if( menu->strings[ index ] != NULL )
++	if (menu->strings[ index ] != NULL)
+ 	    tooltip = menu->strings[ index ];
+     }
+ 
+-    return( PtInflateBalloon(
++    return PtInflateBalloon(
+ 	    window,
+ 	    widget,
+ 	    /* Don't put the balloon at the bottom,
+@@ -261,25 +264,25 @@
+ 	    tooltip,
+ 	    font,
+ 	    fill_color,
+-	    text_color ) );
++	    text_color);
+ }
+ 
+     static void
+-gui_ph_resize_container( void )
++gui_ph_resize_container(void)
+ {
+     PhArea_t area;
+ 
+-    PtWidgetArea( gui.vimWindow, &area );
+-    PtWidgetPos ( gui.vimContainer, &area.pos );
++    PtWidgetArea(gui.vimWindow, &area);
++    PtWidgetPos (gui.vimContainer, &area.pos);
+ 
+-    PtSetResource( gui.vimContainer, Pt_ARG_AREA, &area, 0 );
++    PtSetResource(gui.vimContainer, Pt_ARG_AREA, &area, 0);
+ }
+ 
+     static int
+ gui_ph_handle_menu_resize(
+ 	PtWidget_t *widget,
+ 	void *other,
+-	PtCallbackInfo_t *info )
++	PtCallbackInfo_t *info)
+ {
+     PtContainerCallback_t *sizes = info->cbdata;
+     PtWidget_t		*container;
+@@ -291,7 +294,7 @@
+     /* Because vim treats the toolbar and menubar separately,
+      * and here they're lumped together into a PtToolbarGroup,
+      * we only need either menu_height or toolbar_height set at once */
+-    if( gui.menu_is_active )
++    if (gui.menu_is_active)
+     {
+ 	gui.menu_height = height;
+ 	gui.toolbar_height = 0;
+@@ -310,16 +313,16 @@
+     container = gui.vimContainer;
+ #endif
+ 
+-    PtSetResource( container, Pt_ARG_POS, &below_menu, 0 );
++    PtSetResource(container, Pt_ARG_POS, &below_menu, 0);
+ 
+     gui_ph_resize_container();
+ 
+ #ifdef USE_PANEL_GROUP
+     gui_ph_get_panelgroup_margins(
+ 	    &pg_margin_top, &pg_margin_bottom,
+-	    &pg_margin_left, &pg_margin_right );
++	    &pg_margin_left, &pg_margin_right);
+ #endif
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+ /*
+@@ -330,23 +333,23 @@
+ gui_ph_handle_timer_cursor(
+ 	PtWidget_t *widget,
+ 	void *data,
+-	PtCallbackInfo_t *info )
++	PtCallbackInfo_t *info)
+ {
+-    if( blink_state == BLINK_ON )
++    if (blink_state == BLINK_ON)
+     {
+ 	gui_undraw_cursor();
+ 	blink_state = BLINK_OFF;
+-	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+-		blink_offtime, 0 );
++	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
++		blink_offtime, 0);
+     }
+     else
+     {
+ 	gui_update_cursor(TRUE, FALSE);
+ 	blink_state = BLINK_ON;
+-	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+-		blink_ontime, 0 );
++	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
++		blink_ontime, 0);
+     }
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+     static int
+@@ -354,25 +357,25 @@
+ {
+     is_timeout = TRUE;
+ 
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+     static int
+-gui_ph_handle_window_cb( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_handle_window_cb(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+     PhWindowEvent_t *we = info->cbdata;
+     ushort_t *width, *height;
+ 
+-    switch( we->event_f ) {
++    switch (we->event_f) {
+ 	case Ph_WM_CLOSE:
+ 	    gui_shell_closed();
+ 	    break;
+ 
+ 	case Ph_WM_FOCUS:
+ 	    /* Just in case it's hidden and needs to be shown */
+-	    gui_mch_mousehide( MOUSE_SHOW );
++	    gui_mch_mousehide(MOUSE_SHOW);
+ 
+-	    if( we->event_state == Ph_WM_EVSTATE_FOCUS )
++	    if (we->event_state == Ph_WM_EVSTATE_FOCUS)
+ 	    {
+ 		gui_focus_change(TRUE);
+ 		gui_mch_start_blink();
+@@ -385,28 +388,28 @@
+ 	    break;
+ 
+ 	case Ph_WM_RESIZE:
+-	    PtGetResource( gui.vimWindow, Pt_ARG_WIDTH, &width, 0 );
+-	    PtGetResource( gui.vimWindow, Pt_ARG_HEIGHT, &height, 0 );
++	    PtGetResource(gui.vimWindow, Pt_ARG_WIDTH, &width, 0);
++	    PtGetResource(gui.vimWindow, Pt_ARG_HEIGHT, &height, 0);
+ #ifdef USE_PANEL_GROUP
+ 	    width  -= (pg_margin_left + pg_margin_right);
+ 	    height -= (pg_margin_top + pg_margin_bottom);
+ #endif
+-	    gui_resize_shell( *width, *height );
+-	    gui_set_shellsize( FALSE, FALSE, RESIZE_BOTH );
++	    gui_resize_shell(*width, *height);
++	    gui_set_shellsize(FALSE, FALSE, RESIZE_BOTH);
+ 	    is_ignore_draw = FALSE;
+-	    PtEndFlux( gui.vimContainer );
+-	    PtContainerRelease( gui.vimContainer );
++	    PtEndFlux(gui.vimContainer);
++	    PtContainerRelease(gui.vimContainer);
+ 	    break;
+ 
+ 	default:
+ 	    break;
+     }
+ 
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+     static int
+-gui_ph_handle_scrollbar( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_handle_scrollbar(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+     PtScrollbarCallback_t *scroll;
+     scrollbar_T *sb;
+@@ -415,10 +418,10 @@
+     scroll = info->cbdata;
+ 
+     sb = (scrollbar_T *) data;
+-    if( sb != NULL )
++    if (sb != NULL)
+     {
+ 	value = scroll->position;
+-	switch( scroll->action )
++	switch (scroll->action)
+ 	{
+ 	    case Pt_SCROLL_DRAGGED:
+ 		dragging = TRUE;
+@@ -426,107 +429,107 @@
+ 
+ 	    case Pt_SCROLL_SET:
+ 		/* FIXME: return straight away here? */
+-		return( Pt_CONTINUE );
++		return Pt_CONTINUE;
+ 		break;
+ 	}
+ 
+ 	gui_drag_scrollbar(sb, value, dragging);
+     }
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+     static int
+-gui_ph_handle_keyboard( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_handle_keyboard(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+     PhKeyEvent_t    *key;
+     unsigned char   string[6];
+     int		    len, i;
+     int		    ch, modifiers;
+ 
+-    key = PhGetData( info->event );
++    key = PhGetData(info->event);
+ 
+     ch = modifiers = len = 0;
+ 
+-    if( p_mh )
+-	gui_mch_mousehide( MOUSE_HIDE );
++    if (p_mh)
++	gui_mch_mousehide(MOUSE_HIDE);
+ 
+     /* We're a good lil photon program, aren't we? yes we are, yeess wee arrr */
+-    if( key->key_flags & Pk_KF_Compose )
++    if (key->key_flags & Pk_KF_Compose)
+     {
+-	return( Pt_CONTINUE );
++	return Pt_CONTINUE;
+     }
+ 
+-    if( (key->key_flags & Pk_KF_Cap_Valid) &&
+-	    PkIsKeyDown( key->key_flags ) )
++    if ((key->key_flags & Pk_KF_Cap_Valid) &&
++	    PkIsKeyDown(key->key_flags))
+     {
+ #ifdef FEAT_MENU
+ 	/*
+ 	 * Only show the menu if the Alt key is down, and the Shift & Ctrl
+ 	 * keys aren't down, as well as the other conditions
+ 	 */
+-	if( ( ( key->key_mods & Pk_KM_Alt ) &&
+-		    !( key->key_mods & Pk_KM_Shift ) &&
+-		    !( key->key_mods & Pk_KM_Ctrl ) ) &&
++	if (((key->key_mods & Pk_KM_Alt) &&
++		    !(key->key_mods & Pk_KM_Shift) &&
++		    !(key->key_mods & Pk_KM_Ctrl)) &&
+ 	    gui.menu_is_active &&
+-	    ( *p_wak == 'y' ||
+-	      ( *p_wak == 'm' &&
+-		gui_is_menu_shortcut( key->key_cap ) ) ) )
++	    (*p_wak == 'y' ||
++	      (*p_wak == 'm' &&
++		gui_is_menu_shortcut(key->key_cap))))
+ 	{
+ 	    /* Fallthrough and let photon look for the hotkey */
+-	    return( Pt_CONTINUE );
++	    return Pt_CONTINUE;
+ 	}
+ #endif
+ 
+-	for( i = 0; special_keys[i].key_sym != 0; i++ )
++	for (i = 0; special_keys[i].key_sym != 0; i++)
+ 	{
+-	    if( special_keys[i].key_sym == key->key_cap )
++	    if (special_keys[i].key_sym == key->key_cap)
+ 	    {
+ 		len = 0;
+-		if( special_keys[i].vim_code1 == NUL )
++		if (special_keys[i].vim_code1 == NUL)
+ 		    ch = special_keys[i].vim_code0;
+ 		else
+ 		{
+ 		    /* Detect if a keypad number key has been pressed
+ 		     * and change the key if Num Lock is on */
+-		    if( key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
+-			    && ( key->key_mods & Pk_KM_Num_Lock ) )
++		    if (key->key_cap >= Pk_KP_Enter && key->key_cap <= Pk_KP_9
++			    && (key->key_mods & Pk_KM_Num_Lock))
+ 		    {
+ 			/* FIXME: For now, just map the key to a ascii value
+ 			 * (see <photon/PkKeyDef.h>) */
+ 			ch = key->key_cap - 0xf080;
+ 		    }
+ 		    else
+-			ch = TO_SPECIAL( special_keys[i].vim_code0,
+-				special_keys[i].vim_code1 );
++			ch = TO_SPECIAL(special_keys[i].vim_code0,
++				special_keys[i].vim_code1);
+ 		}
+ 		break;
+ 	    }
+ 	}
+ 
+-	if( key->key_mods & Pk_KM_Ctrl )
++	if (key->key_mods & Pk_KM_Ctrl)
+ 	    modifiers |= MOD_MASK_CTRL;
+-	if( key->key_mods & Pk_KM_Alt )
++	if (key->key_mods & Pk_KM_Alt)
+ 	    modifiers |= MOD_MASK_ALT;
+-	if( key->key_mods & Pk_KM_Shift )
++	if (key->key_mods & Pk_KM_Shift)
+ 	    modifiers |= MOD_MASK_SHIFT;
+ 
+ 	/* Is this not a special key? */
+-	if( special_keys[i].key_sym == 0 )
++	if (special_keys[i].key_sym == 0)
+ 	{
+-	    ch = PhTo8859_1( key );
+-	    if( ch == -1
++	    ch = PhTo8859_1(key);
++	    if (ch == -1
+ #ifdef FEAT_MBYTE
+-		|| ( enc_utf8 && ch > 127 )
++		|| (enc_utf8 && ch > 127)
+ #endif
+ 		)
+ 	    {
+ #ifdef FEAT_MBYTE
+-		len = PhKeyToMb( string, key );
+-		if( len > 0 )
++		len = PhKeyToMb(string, key);
++		if (len > 0)
+ 		{
+ 		    static char buf[6];
+ 		    int src_taken, dst_made;
+-		    if( enc_utf8 != TRUE )
++		    if (enc_utf8 != TRUE)
+ 		    {
+ 			PxTranslateFromUTF(
+ 				charset_translate,
+@@ -535,70 +538,70 @@
+ 				&src_taken,
+ 				buf,
+ 				6,
+-				&dst_made );
++				&dst_made);
+ 
+-			add_to_input_buf( buf, dst_made );
++			add_to_input_buf(buf, dst_made);
+ 		    }
+ 		    else
+ 		    {
+-			add_to_input_buf( string, len );
++			add_to_input_buf(string, len);
+ 		    }
+ 
+-		    return( Pt_CONSUME );
++		    return Pt_CONSUME;
+ 		}
+ 		len = 0;
+ #endif
+ 		ch = key->key_cap;
+-		if( ch < 0xff )
++		if (ch < 0xff)
+ 		{
+ 		    /* FIXME: is this the right thing to do? */
+-		    if( modifiers & MOD_MASK_CTRL )
++		    if (modifiers & MOD_MASK_CTRL)
+ 		    {
+ 			modifiers &= ~MOD_MASK_CTRL;
+ 
+-			if( ( ch >= 'a'  &&  ch <= 'z' ) ||
++			if ((ch >= 'a' && ch <= 'z') ||
+ 				ch == '[' ||
+ 				ch == ']' ||
+-				ch == '\\' )
+-			    ch = Ctrl_chr( ch );
+-			else if( ch == '2' )
++				ch == '\\')
++			    ch = Ctrl_chr(ch);
++			else if (ch == '2')
+ 			    ch = NUL;
+-			else if( ch == '6' )
++			else if (ch == '6')
+ 			    ch = 0x1e;
+-			else if( ch == '-' )
++			else if (ch == '-')
+ 			    ch = 0x1f;
+ 			else
+ 			    modifiers |= MOD_MASK_CTRL;
+ 		    }
+ 
+-		    if( modifiers & MOD_MASK_ALT )
++		    if (modifiers & MOD_MASK_ALT)
+ 		    {
+-			ch = Meta( ch );
++			ch = Meta(ch);
+ 			modifiers &= ~MOD_MASK_ALT;
+ 		    }
+ 		}
+ 		else
+ 		{
+-		    return( Pt_CONTINUE );
++		    return Pt_CONTINUE;
+ 		}
+ 	    }
+ 	    else
+ 		modifiers &= ~MOD_MASK_SHIFT;
+ 	}
+ 
+-	ch = simplify_key( ch, &modifiers );
+-	if( modifiers )
++	ch = simplify_key(ch, &modifiers);
++	if (modifiers)
+ 	{
+ 	    string[ len++ ] = CSI;
+ 	    string[ len++ ] = KS_MODIFIER;
+ 	    string[ len++ ] = modifiers;
+ 	}
+ 
+-	if( IS_SPECIAL( ch ) )
++	if (IS_SPECIAL(ch))
+ 	{
+ 	    string[ len++ ] = CSI;
+-	    string[ len++ ] = K_SECOND( ch );
+-	    string[ len++ ] = K_THIRD( ch );
++	    string[ len++ ] = K_SECOND(ch);
++	    string[ len++ ] = K_THIRD(ch);
+ 	}
+ 	else
+ 	{
+@@ -619,28 +622,28 @@
+ 	    string[ len++ ] = KE_CSI;
+ 	}
+ 
+-	if( len > 0 )
++	if (len > 0)
+ 	{
+-	    add_to_input_buf( string, len );
+-	    return( Pt_CONSUME );
++	    add_to_input_buf(string, len);
++	    return Pt_CONSUME;
+ 	}
+     }
+ 
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+     static int
+-gui_ph_handle_mouse( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_handle_mouse(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+     PhPointerEvent_t *pointer;
+     PhRect_t	     *pos;
+     int		     button = 0, repeated_click, modifiers = 0x0;
+     short	     mouse_x, mouse_y;
+ 
+-    pointer = PhGetData( info->event );
+-    pos = PhGetRects( info->event );
++    pointer = PhGetData(info->event);
++    pos = PhGetRects(info->event);
+ 
+-    gui_mch_mousehide( MOUSE_SHOW );
++    gui_mch_mousehide(MOUSE_SHOW);
+ 
+     /*
+      * Coordinates need to be relative to the base window,
+@@ -649,27 +652,27 @@
+     mouse_x = pos->ul.x + gui.border_width;
+     mouse_y = pos->ul.y + gui.border_width;
+ 
+-    if( info->event->type == Ph_EV_PTR_MOTION_NOBUTTON )
++    if (info->event->type == Ph_EV_PTR_MOTION_NOBUTTON)
+     {
+-	gui_mouse_moved( mouse_x, mouse_y );
+-	return( Pt_CONTINUE );
++	gui_mouse_moved(mouse_x, mouse_y);
++	return Pt_CONTINUE;
+     }
+ 
+-    if( pointer->key_mods & Pk_KM_Shift )
++    if (pointer->key_mods & Pk_KM_Shift)
+ 	modifiers |= MOUSE_SHIFT;
+-    if( pointer->key_mods & Pk_KM_Ctrl )
++    if (pointer->key_mods & Pk_KM_Ctrl)
+ 	modifiers |= MOUSE_CTRL;
+-    if( pointer->key_mods & Pk_KM_Alt )
++    if (pointer->key_mods & Pk_KM_Alt)
+ 	modifiers |= MOUSE_ALT;
+ 
+     /*
+      * FIXME More than one button may be involved, but for
+      * now just deal with one
+      */
+-    if( pointer->buttons & Ph_BUTTON_SELECT )
++    if (pointer->buttons & Ph_BUTTON_SELECT)
+ 	button = MOUSE_LEFT;
+ 
+-    if( pointer->buttons & Ph_BUTTON_MENU )
++    if (pointer->buttons & Ph_BUTTON_MENU)
+     {
+ 	button = MOUSE_RIGHT;
+ 	/* Need the absolute coordinates for the popup menu */
+@@ -677,65 +680,65 @@
+ 	abs_mouse.y = pointer->pos.y;
+     }
+ 
+-    if( pointer->buttons & Ph_BUTTON_ADJUST )
++    if (pointer->buttons & Ph_BUTTON_ADJUST)
+ 	button = MOUSE_MIDDLE;
+ 
+     /* Catch a real release (not phantom or other releases */
+-    if( info->event->type == Ph_EV_BUT_RELEASE )
++    if (info->event->type == Ph_EV_BUT_RELEASE)
+ 	button = MOUSE_RELEASE;
+ 
+-    if( info->event->type & Ph_EV_PTR_MOTION_BUTTON )
++    if (info->event->type & Ph_EV_PTR_MOTION_BUTTON)
+ 	button = MOUSE_DRAG;
+ 
+ #if 0
+     /* Vim doesn't use button repeats */
+-    if( info->event->type & Ph_EV_BUT_REPEAT )
++    if (info->event->type & Ph_EV_BUT_REPEAT)
+ 	button = MOUSE_DRAG;
+ #endif
+ 
+     /* Don't do anything if it is one of the phantom mouse release events */
+-    if( ( button != MOUSE_RELEASE ) ||
+-	    ( info->event->subtype == Ph_EV_RELEASE_REAL ) )
++    if ((button != MOUSE_RELEASE) ||
++	    (info->event->subtype == Ph_EV_RELEASE_REAL))
+     {
+ 	repeated_click = (pointer->click_count >= 2) ? TRUE : FALSE;
+ 
+-	gui_send_mouse_event( button , mouse_x, mouse_y, repeated_click, modifiers );
++	gui_send_mouse_event(button , mouse_x, mouse_y, repeated_click, modifiers);
+     }
+ 
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+ /* Handle a focus change of the PtRaw widget */
+     static int
+-gui_ph_handle_focus( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_handle_focus(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+-    if( info->reason == Pt_CB_LOST_FOCUS )
++    if (info->reason == Pt_CB_LOST_FOCUS)
+     {
+-	PtRemoveEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+-		gui_ph_handle_mouse, NULL );
++	PtRemoveEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
++		gui_ph_handle_mouse, NULL);
+ 
+-	gui_mch_mousehide( MOUSE_SHOW );
++	gui_mch_mousehide(MOUSE_SHOW);
+     }
+     else
+     {
+-	PtAddEventHandler( gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
+-		gui_ph_handle_mouse, NULL );
++	PtAddEventHandler(gui.vimTextArea, Ph_EV_PTR_MOTION_NOBUTTON,
++		gui_ph_handle_mouse, NULL);
+     }
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+     static void
+-gui_ph_handle_raw_draw( PtWidget_t *widget, PhTile_t *damage )
++gui_ph_handle_raw_draw(PtWidget_t *widget, PhTile_t *damage)
+ {
+     PhRect_t	*r;
+     PhPoint_t	offset;
+     PhPoint_t	translation;
+ 
+-    if( is_ignore_draw == TRUE )
++    if (is_ignore_draw == TRUE)
+ 	return;
+ 
+-    PtSuperClassDraw( PtBasic, widget, damage );
+-    PgGetTranslation( &translation );
++    PtSuperClassDraw(PtBasic, widget, damage);
++    PgGetTranslation(&translation);
+     PgClearTranslation();
+ 
+ #if 0
+@@ -750,21 +753,21 @@
+     out_flush();
+ #endif
+ 
+-    PtWidgetOffset( widget, &offset );
+-    PhTranslatePoint( &offset, PtWidgetPos( gui.vimTextArea, NULL ) );
++    PtWidgetOffset(widget, &offset);
++    PhTranslatePoint(&offset, PtWidgetPos(gui.vimTextArea, NULL));
+ 
+ #if 1
+     /* Redraw individual damage regions */
+-    if( damage->next != NULL )
++    if (damage->next != NULL)
+ 	damage = damage->next;
+ 
+-    while( damage != NULL )
++    while (damage != NULL)
+     {
+ 	r = &damage->rect;
+ 	gui_redraw(
+ 		r->ul.x - offset.x, r->ul.y - offset.y,
+ 		r->lr.x - r->ul.x + 1,
+-		r->lr.y - r->ul.y + 1 );
++		r->lr.y - r->ul.y + 1);
+ 	damage = damage->next;
+     }
+ #else
+@@ -773,39 +776,39 @@
+     gui_redraw(
+ 	    r->ul.x - offset.x, r->ul.y - offset.y,
+ 	    r->lr.x - r->ul.x + 1,
+-	    r->lr.y - r->ul.y + 1 );
++	    r->lr.y - r->ul.y + 1);
+ #endif
+ 
+-    PgSetTranslation( &translation, 0 );
++    PgSetTranslation(&translation, 0);
+ }
+ 
+     static int
+ gui_ph_handle_pulldown_menu(
+ 	PtWidget_t *widget,
+ 	void *data,
+-	PtCallbackInfo_t *info )
++	PtCallbackInfo_t *info)
+ {
+-    if( data != NULL )
++    if (data != NULL)
+     {
+ 	vimmenu_T *menu = (vimmenu_T *) data;
+ 
+-	PtPositionMenu( menu->submenu_id, NULL );
+-	PtRealizeWidget( menu->submenu_id );
++	PtPositionMenu(menu->submenu_id, NULL);
++	PtRealizeWidget(menu->submenu_id);
+     }
+ 
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+ /* This is used for pulldown/popup menus and also toolbar buttons */
+     static int
+-gui_ph_handle_menu( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_handle_menu(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+-    if( data != NULL )
++    if (data != NULL)
+     {
+ 	vimmenu_T *menu = (vimmenu_T *) data;
+-	gui_menu_cb( menu );
++	gui_menu_cb(menu);
+     }
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+ /* Stop focus from disappearing into the menubar... */
+@@ -813,20 +816,20 @@
+ gui_ph_handle_menu_unrealized(
+ 	PtWidget_t *widget,
+ 	void *data,
+-	PtCallbackInfo_t *info )
++	PtCallbackInfo_t *info)
+ {
+-    PtGiveFocus( gui.vimTextArea, NULL );
+-    return( Pt_CONTINUE );
++    PtGiveFocus(gui.vimTextArea, NULL);
++    return Pt_CONTINUE;
+ }
+ 
+     static int
+ gui_ph_handle_window_open(
+ 	PtWidget_t *widget,
+ 	void *data,
+-	PtCallbackInfo_t *info )
++	PtCallbackInfo_t *info)
+ {
+-    gui_set_shellsize( FALSE, TRUE, RESIZE_BOTH );
+-    return( Pt_CONTINUE );
++    gui_set_shellsize(FALSE, TRUE, RESIZE_BOTH);
++    return Pt_CONTINUE;
+ }
+ 
+ /****************************************************************************/
+@@ -836,74 +839,74 @@
+ 
+ /* TODO: Set a clipping rect? */
+     static void
+-gui_ph_draw_start( void )
++gui_ph_draw_start(void)
+ {
+     PhGC_t *gc;
+ 
+     gc = PgGetGC();
+-    PgSetRegion( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) );
+-    PgClearClippingsCx( gc );
+-    PgClearTranslationCx( gc );
++    PgSetRegion(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)));
++    PgClearClippingsCx(gc);
++    PgClearTranslationCx(gc);
+ 
+-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
++    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
++    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+ 
+-    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
++    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
+ }
+ 
+     static void
+-gui_ph_draw_end( void )
++gui_ph_draw_end(void)
+ {
+     gui_ph_raw_offset.x = -gui_ph_raw_offset.x;
+     gui_ph_raw_offset.y = -gui_ph_raw_offset.y;
+-    PgSetTranslation( &gui_ph_raw_offset, Pg_RELATIVE );
++    PgSetTranslation(&gui_ph_raw_offset, Pg_RELATIVE);
+ }
+ 
+ #ifdef USE_PANEL_GROUP
+     static vimmenu_T *
+-gui_ph_find_buffer_item( char_u *name )
++gui_ph_find_buffer_item(char_u *name)
+ {
+     vimmenu_T *top_level = root_menu;
+     vimmenu_T *items = NULL;
+ 
+-    while( top_level != NULL &&
+-	    ( STRCMP( top_level->dname, "Buffers" ) != 0 ) )
++    while (top_level != NULL &&
++	    (STRCMP(top_level->dname, "Buffers") != 0))
+ 	top_level = top_level->next;
+ 
+-    if( top_level != NULL )
++    if (top_level != NULL)
+     {
+ 	items = top_level->children;
+ 
+-	while( items != NULL &&
+-		( STRCMP( items->dname, name ) != 0 ) )
++	while (items != NULL &&
++		(STRCMP(items->dname, name) != 0))
+ 	    items = items->next;
+     }
+-    return( items );
++    return items;
+ }
+ 
+     static void
+-gui_ph_pg_set_buffer_num( int_u buf_num )
++gui_ph_pg_set_buffer_num(int_u buf_num)
+ {
+     int i;
+     char search[16];
+     char *mark;
+ 
+-    if( gui.vimTextArea == NULL || buf_num == 0 )
++    if (gui.vimTextArea == NULL || buf_num == 0)
+ 	return;
+ 
+     search[0] = '(';
+-    ultoa( buf_num, &search[1], 10 );
+-    STRCAT( search, ")" );
++    ultoa(buf_num, &search[1], 10);
++    STRCAT(search, ")");
+ 
+-    for( i = 0; i < num_panels; i++ )
++    for (i = 0; i < num_panels; i++)
+     {
+ 	/* find the last "(" in the panel title and see if the buffer
+ 	 * number in the title matches the one we're looking for */
+-	mark = STRRCHR( panel_titles[ i ], '(' );
+-	if( mark != NULL && STRCMP( mark, search ) == 0 )
++	mark = STRRCHR(panel_titles[ i ], '(');
++	if (mark != NULL && STRCMP(mark, search) == 0)
+ 	{
+-	    PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
+-		    i, 0 );
++	    PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_CURRENT_INDEX,
++		    i, 0);
+ 	}
+     }
+ }
+@@ -912,22 +915,22 @@
+ gui_ph_handle_pg_change(
+ 	PtWidget_t *widget,
+ 	void *data,
+-	PtCallbackInfo_t *info )
++	PtCallbackInfo_t *info)
+ {
+     vimmenu_T *menu;
+     PtPanelGroupCallback_t *panel;
+ 
+-    if( info->event != NULL )
++    if (info->event != NULL)
+     {
+ 	panel = info->cbdata;
+-	if( panel->new_panel != NULL )
++	if (panel->new_panel != NULL)
+ 	{
+-	    menu = gui_ph_find_buffer_item( panel->new_panel );
+-	    if( menu )
+-		gui_menu_cb( menu );
++	    menu = gui_ph_find_buffer_item(panel->new_panel);
++	    if (menu)
++		gui_menu_cb(menu);
+ 	}
+     }
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+     static void
+@@ -935,17 +938,17 @@
+ 	short *top,
+ 	short *bottom,
+ 	short *left,
+-	short *right )
++	short *right)
+ {
+     unsigned short abs_raw_x, abs_raw_y, abs_panel_x, abs_panel_y;
+     const unsigned short *margin_top, *margin_bottom;
+     const unsigned short *margin_left, *margin_right;
+ 
+-    PtGetAbsPosition( gui.vimTextArea, &abs_raw_x, &abs_raw_y );
+-    PtGetAbsPosition( gui.vimPanelGroup, &abs_panel_x, &abs_panel_y );
++    PtGetAbsPosition(gui.vimTextArea, &abs_raw_x, &abs_raw_y);
++    PtGetAbsPosition(gui.vimPanelGroup, &abs_panel_x, &abs_panel_y);
+ 
+-    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0 );
+-    PtGetResource( gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0 );
++    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_RIGHT, &margin_right, 0);
++    PtGetResource(gui.vimPanelGroup, Pt_ARG_MARGIN_BOTTOM, &margin_bottom, 0);
+ 
+     abs_raw_x -= abs_panel_x;
+     abs_raw_y -= abs_panel_y;
+@@ -959,85 +962,85 @@
+ 
+ /* Used for the tabs for PtPanelGroup */
+     static int
+-gui_ph_is_buffer_item( vimmenu_T *menu, vimmenu_T *parent )
++gui_ph_is_buffer_item(vimmenu_T *menu, vimmenu_T *parent)
+ {
+     char *mark;
+ 
+-    if( STRCMP( parent->dname, "Buffers" ) == 0 )
++    if (STRCMP(parent->dname, "Buffers") == 0)
+     {
+ 	/* Look for '(' digits ')' */
+-	mark = vim_strchr( menu->dname, '(' );
+-	if( mark != NULL )
++	mark = vim_strchr(menu->dname, '(');
++	if (mark != NULL)
+ 	{
+ 	    mark++;
+-	    while( isdigit( *mark ) )
++	    while (isdigit(*mark))
+ 		mark++;
+ 
+-	    if( *mark == ')' )
+-		return( TRUE);
++	    if (*mark == ')')
++		return TRUE;
+ 	}
+     }
+-    return( FALSE );
++    return FALSE;
+ }
+ 
+     static void
+-gui_ph_pg_add_buffer(char *name )
++gui_ph_pg_add_buffer(char *name)
+ {
+     char **new_titles = NULL;
+ 
+-    new_titles = (char **) alloc( ( num_panels + 1 ) * sizeof( char ** ) );
+-    if( new_titles != NULL )
++    new_titles = (char **) alloc((num_panels + 1) * sizeof(char **));
++    if (new_titles != NULL)
+     {
+-	if( num_panels > 0 )
+-	    memcpy( new_titles, panel_titles, num_panels * sizeof( char ** ) );
++	if (num_panels > 0)
++	    memcpy(new_titles, panel_titles, num_panels * sizeof(char **));
+ 
+ 	new_titles[ num_panels++ ] = name;
+ 
+-	PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+-		num_panels );
++	PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
++		num_panels);
+ 
+-	vim_free( panel_titles );
++	vim_free(panel_titles);
+ 	panel_titles = new_titles;
+     }
+ }
+ 
+     static void
+-gui_ph_pg_remove_buffer( char *name )
++gui_ph_pg_remove_buffer(char *name)
+ {
+     int i;
+     char **new_titles = NULL;
+ 
+     /* If there is only 1 panel, we just use the temporary place holder */
+-    if( num_panels > 1 )
++    if (num_panels > 1)
+     {
+-	new_titles = (char **) alloc( ( num_panels - 1 ) * sizeof( char ** ) );
+-	if( new_titles != NULL )
++	new_titles = (char **) alloc((num_panels - 1) * sizeof(char **));
++	if (new_titles != NULL)
+ 	{
+ 	    char **s = new_titles;
+ 	    /* Copy all the titles except the one we're removing */
+-	    for( i = 0; i < num_panels; i++ )
++	    for (i = 0; i < num_panels; i++)
+ 	    {
+-		if( STRCMP( panel_titles[ i ], name ) != 0 )
++		if (STRCMP(panel_titles[ i ], name) != 0)
+ 		{
+ 		    *s++ = panel_titles[ i ];
+ 		}
+ 	    }
+ 	    num_panels--;
+ 
+-	    PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
+-		    num_panels );
++	    PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, new_titles,
++		    num_panels);
+ 
+-	    vim_free( panel_titles );
++	    vim_free(panel_titles);
+ 	    panel_titles = new_titles;
+ 	}
+     }
+     else
+     {
+ 	num_panels--;
+-	PtSetResource( gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
+-		1 );
++	PtSetResource(gui.vimPanelGroup, Pt_ARG_PG_PANEL_TITLES, &empty_title,
++		1);
+ 
+-	vim_free( panel_titles );
++	vim_free(panel_titles);
+ 	panel_titles = NULL;
+     }
+ }
+@@ -1047,38 +1050,38 @@
+ gui_ph_handle_buffer_remove(
+ 	PtWidget_t *widget,
+ 	void *data,
+-	PtCallbackInfo_t *info )
++	PtCallbackInfo_t *info)
+ {
+     vimmenu_T *menu;
+ 
+-    if( data != NULL )
++    if (data != NULL)
+     {
+ 	menu = (vimmenu_T *) data;
+-	gui_ph_pg_remove_buffer( menu->dname );
++	gui_ph_pg_remove_buffer(menu->dname);
+     }
+ 
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ #endif
+ 
+     static int
+-gui_ph_pane_resize( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_pane_resize(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+-    if( PtWidgetIsRealized( widget ) )
++    if (PtWidgetIsRealized(widget))
+     {
+ 	is_ignore_draw = TRUE;
+-	PtStartFlux( gui.vimContainer );
+-	PtContainerHold( gui.vimContainer );
++	PtStartFlux(gui.vimContainer);
++	PtContainerHold(gui.vimContainer);
+     }
+ 
+-    return( Pt_CONTINUE );
++    return Pt_CONTINUE;
+ }
+ 
+ /****************************************************************************/
+ 
+ #ifdef FEAT_MBYTE
+     void
+-gui_ph_encoding_changed( int new_encoding )
++gui_ph_encoding_changed(int new_encoding)
+ {
+     /* Default encoding is latin1 */
+     char *charset = "latin1";
+@@ -1094,13 +1097,13 @@
+ 	{ DBCS_CHS, "gb" }
+     };
+ 
+-    for( i = 0; i < ARRAY_LENGTH( charsets ); i++ )
++    for (i = 0; i < ARRAY_LENGTH(charsets); i++)
+     {
+-	if( new_encoding == charsets[ i ].encoding )
++	if (new_encoding == charsets[ i ].encoding)
+ 	    charset = charsets[ i ].name;
+     }
+ 
+-    charset_translate = PxTranslateSet( charset_translate, charset );
++    charset_translate = PxTranslateSet(charset_translate, charset);
+ }
+ #endif
+ 
+@@ -1112,7 +1115,7 @@
+     int	    *argc;
+     char    **argv;
+ {
+-    PtInit( NULL );
++    PtInit(NULL);
+ }
+ 
+     int
+@@ -1124,90 +1127,90 @@
+     PhDim_t	window_size = {100, 100}; /* Arbitrary values */
+     PhPoint_t	pos = {0, 0};
+ 
+-    gui.event_buffer = (PhEvent_t *) alloc( EVENT_BUFFER_SIZE );
+-    if( gui.event_buffer == NULL )
+-	return( FAIL );
++    gui.event_buffer = (PhEvent_t *) alloc(EVENT_BUFFER_SIZE);
++    if (gui.event_buffer == NULL)
++	return FAIL;
+ 
+     /* Get a translation so we can convert from ISO Latin-1 to UTF */
+-    charset_translate = PxTranslateSet( NULL, "latin1" );
++    charset_translate = PxTranslateSet(NULL, "latin1");
+ 
+     /* The +2 is for the 1 pixel dark line on each side */
+     gui.border_offset = gui.border_width = GUI_PH_MARGIN + 2;
+ 
+     /* Handle close events ourselves */
+-    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE );
+-    PtSetArg( &args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
+-	    Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS );
+-    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+-    gui.vimWindow = PtCreateWidget( PtWindow, NULL, n, args );
+-    if( gui.vimWindow == NULL )
+-	return( FAIL );
+-
+-    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL );
+-    PtAddCallback( gui.vimWindow, Pt_CB_WINDOW_OPENING,
+-	    gui_ph_handle_window_open, NULL );
++    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_MANAGED_FLAGS, Pt_FALSE, Ph_WM_CLOSE);
++    PtSetArg(&args[ n++ ], Pt_ARG_WINDOW_NOTIFY_FLAGS, Pt_TRUE,
++	    Ph_WM_CLOSE | Ph_WM_RESIZE | Ph_WM_FOCUS);
++    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
++    gui.vimWindow = PtCreateWidget(PtWindow, NULL, n, args);
++    if (gui.vimWindow == NULL)
++	return FAIL;
++
++    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW, gui_ph_handle_window_cb, NULL);
++    PtAddCallback(gui.vimWindow, Pt_CB_WINDOW_OPENING,
++	    gui_ph_handle_window_open, NULL);
+ 
+     n = 0;
+-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED );
+-    PtSetArg( &args[ n++ ], Pt_ARG_DIM, &window_size, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_POS, &pos, 0 );
++    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_ALL, Pt_IS_ANCHORED);
++    PtSetArg(&args[ n++ ], Pt_ARG_DIM, &window_size, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_POS, &pos, 0);
+ 
+ #ifdef USE_PANEL_GROUP
+-    /* Put in a temprary place holder title */
+-    PtSetArg( &args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1 );
++    /* Put in a temporary place holder title */
++    PtSetArg(&args[ n++ ], Pt_ARG_PG_PANEL_TITLES, &empty_title, 1);
+ 
+-    gui.vimPanelGroup = PtCreateWidget( PtPanelGroup, gui.vimWindow, n, args );
+-    if( gui.vimPanelGroup == NULL )
+-	return( FAIL );
++    gui.vimPanelGroup = PtCreateWidget(PtPanelGroup, gui.vimWindow, n, args);
++    if (gui.vimPanelGroup == NULL)
++	return FAIL;
+ 
+-    PtAddCallback( gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
+-	    gui_ph_handle_pg_change, NULL );
++    PtAddCallback(gui.vimPanelGroup, Pt_CB_PG_PANEL_SWITCHING,
++	    gui_ph_handle_pg_change, NULL);
+ #else
+     /* Turn off all edge decorations */
+-    PtSetArg( &args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL );
+-    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT );
+-
+-    gui.vimContainer = PtCreateWidget( PtPane, gui.vimWindow, n, args );
+-    if( gui.vimContainer == NULL )
+-	return( FAIL );
++    PtSetArg(&args[ n++ ], Pt_ARG_BASIC_FLAGS, Pt_FALSE, Pt_ALL);
++    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, 0, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 0, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 0, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_CONTAINER_FLAGS, Pt_TRUE, Pt_AUTO_EXTENT);
++
++    gui.vimContainer = PtCreateWidget(PtPane, gui.vimWindow, n, args);
++    if (gui.vimContainer == NULL)
++	return FAIL;
+ 
+-    PtAddCallback( gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL );
++    PtAddCallback(gui.vimContainer, Pt_CB_RESIZE, gui_ph_pane_resize, NULL);
+ #endif
+ 
+     /* Size for the text area is set in gui_mch_set_text_area_pos */
+     n = 0;
+ 
+-    PtSetArg( &args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0 );
++    PtSetArg(&args[ n++ ], Pt_ARG_RAW_DRAW_F, gui_ph_handle_raw_draw, 1);
++    PtSetArg(&args[ n++ ], Pt_ARG_BEVEL_WIDTH, GUI_PH_MARGIN, 0);
+     /*
+      * Using focus render also causes the whole widget to be redrawn
+      * whenever it changes focus, which is very annoying :p
+      */
+-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
+-	    Pt_GETS_FOCUS | Pt_HIGHLIGHTED );
++    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE,
++	    Pt_GETS_FOCUS | Pt_HIGHLIGHTED);
+ #ifndef FEAT_MOUSESHAPE
+-    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0 );
++    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_TYPE, GUI_PH_MOUSE_TYPE, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_CURSOR_COLOR, gui_ph_mouse_color, 0);
+ #endif
+ 
+-    gui.vimTextArea = PtCreateWidget( PtRaw, Pt_DFLT_PARENT, n, args );
+-    if( gui.vimTextArea == NULL)
+-	return( FAIL );
++    gui.vimTextArea = PtCreateWidget(PtRaw, Pt_DFLT_PARENT, n, args);
++    if (gui.vimTextArea == NULL)
++	return FAIL;
+ 
+     /* TODO: use PtAddEventHandlers instead? */
+     /* Not using Ph_EV_BUT_REPEAT because vim wouldn't use it anyway */
+-    PtAddEventHandler( gui.vimTextArea,
++    PtAddEventHandler(gui.vimTextArea,
+ 	    Ph_EV_BUT_PRESS | Ph_EV_BUT_RELEASE | Ph_EV_PTR_MOTION_BUTTON,
+-	    gui_ph_handle_mouse, NULL );
+-    PtAddEventHandler( gui.vimTextArea, Ph_EV_KEY,
+-	    gui_ph_handle_keyboard, NULL );
+-    PtAddCallback( gui.vimTextArea, Pt_CB_GOT_FOCUS,
+-	    gui_ph_handle_focus, NULL );
+-    PtAddCallback( gui.vimTextArea, Pt_CB_LOST_FOCUS,
+-	    gui_ph_handle_focus, NULL );
++	    gui_ph_handle_mouse, NULL);
++    PtAddEventHandler(gui.vimTextArea, Ph_EV_KEY,
++	    gui_ph_handle_keyboard, NULL);
++    PtAddCallback(gui.vimTextArea, Pt_CB_GOT_FOCUS,
++	    gui_ph_handle_focus, NULL);
++    PtAddCallback(gui.vimTextArea, Pt_CB_LOST_FOCUS,
++	    gui_ph_handle_focus, NULL);
+ 
+     /*
+      * Now that the text area widget has been created, set up the colours,
+@@ -1218,62 +1221,62 @@
+      * Create the two timers, not as accurate as using the kernel timer
+      * functions, but good enough
+      */
+-    gui_ph_timer_cursor  = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+-    if( gui_ph_timer_cursor == NULL )
+-	return( FAIL );
+-
+-    gui_ph_timer_timeout = PtCreateWidget( PtTimer, gui.vimWindow, 0, NULL );
+-    if( gui_ph_timer_timeout == NULL )
+-	return( FAIL );
++    gui_ph_timer_cursor  = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
++    if (gui_ph_timer_cursor == NULL)
++	return FAIL;
++
++    gui_ph_timer_timeout = PtCreateWidget(PtTimer, gui.vimWindow, 0, NULL);
++    if (gui_ph_timer_timeout == NULL)
++	return FAIL;
+ 
+-    PtAddCallback( gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
++    PtAddCallback(gui_ph_timer_cursor,  Pt_CB_TIMER_ACTIVATE,
+ 	    gui_ph_handle_timer_cursor, NULL);
+-    PtAddCallback( gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
++    PtAddCallback(gui_ph_timer_timeout, Pt_CB_TIMER_ACTIVATE,
+ 	    gui_ph_handle_timer_timeout, NULL);
+ 
+ #ifdef FEAT_MENU
+     n = 0;
+-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
+-	    Pt_IS_ANCHORED );
+-    gui.vimToolBarGroup = PtCreateWidget( PtToolbarGroup, gui.vimWindow,
+-	    n, args );
+-    if( gui.vimToolBarGroup == NULL )
+-	return( FAIL );
++    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, Pt_ANCHOR_LEFT_RIGHT,
++	    Pt_IS_ANCHORED);
++    gui.vimToolBarGroup = PtCreateWidget(PtToolbarGroup, gui.vimWindow,
++	    n, args);
++    if (gui.vimToolBarGroup == NULL)
++	return FAIL;
+ 
+-    PtAddCallback( gui.vimToolBarGroup, Pt_CB_RESIZE,
+-	    gui_ph_handle_menu_resize, NULL );
++    PtAddCallback(gui.vimToolBarGroup, Pt_CB_RESIZE,
++	    gui_ph_handle_menu_resize, NULL);
+ 
+     n = 0;
+     flags = 0;
+-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
+-    if( ! vim_strchr( p_go, GO_MENUS ) )
++    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
++    if (! vim_strchr(p_go, GO_MENUS))
+     {
+ 	flags |= Pt_DELAY_REALIZE;
+-	PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags );
++	PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_TRUE, flags);
+     }
+-    gui.vimMenuBar = PtCreateWidget( PtMenuBar, gui.vimToolBarGroup, n, args );
+-    if( gui.vimMenuBar == NULL )
+-	return( FAIL );
++    gui.vimMenuBar = PtCreateWidget(PtMenuBar, gui.vimToolBarGroup, n, args);
++    if (gui.vimMenuBar == NULL)
++	return FAIL;
+ 
+ # ifdef FEAT_TOOLBAR
+     n = 0;
+ 
+-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+-	    Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED );
+-    PtSetArg( &args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
+-	    Pt_RESIZE_Y_AS_REQUIRED );
+-    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0 );
++    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
++	    Pt_ANCHOR_LEFT_RIGHT |Pt_TOP_ANCHORED_TOP, Pt_IS_ANCHORED);
++    PtSetArg(&args[ n++ ], Pt_ARG_RESIZE_FLAGS, Pt_TRUE,
++	    Pt_RESIZE_Y_AS_REQUIRED);
++    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, window_size.w, 0);
+ 
+     flags = Pt_GETS_FOCUS;
+-    if( ! vim_strchr( p_go, GO_TOOLBAR ) )
++    if (! vim_strchr(p_go, GO_TOOLBAR))
+ 	flags |= Pt_DELAY_REALIZE;
+ 
+-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags );
++    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE, flags);
+ 
+-    gui.vimToolBar = PtCreateWidget( PtToolbar, gui.vimToolBarGroup, n, args );
+-    if( gui.vimToolBar == NULL )
+-	return( FAIL );
++    gui.vimToolBar = PtCreateWidget(PtToolbar, gui.vimToolBarGroup, n, args);
++    if (gui.vimToolBar == NULL)
++	return FAIL;
+ 
+     /*
+      * Size for the toolbar is fetched in gui_mch_show_toolbar, after
+@@ -1284,13 +1287,13 @@
+ 
+ #endif
+ 
+-    return( OK );
++    return OK;
+ }
+ 
+     int
+ gui_mch_init_check(void)
+ {
+-    return( (is_photon_available == TRUE) ? OK : FAIL );
++    return (is_photon_available == TRUE) ? OK : FAIL;
+ }
+ 
+     int
+@@ -1310,20 +1313,20 @@
+     if (gui_win_x != -1 && gui_win_y != -1)
+ 	gui_mch_set_winpos(gui_win_x, gui_win_y);
+ 
+-    return( (PtRealizeWidget( gui.vimWindow ) == 0) ? OK : FAIL );
++    return (PtRealizeWidget(gui.vimWindow) == 0) ? OK : FAIL;
+ }
+ 
+     void
+ gui_mch_exit(int rc)
+ {
+-    PtDestroyWidget( gui.vimWindow );
++    PtDestroyWidget(gui.vimWindow);
+ 
+-    PxTranslateSet( charset_translate, NULL );
++    PxTranslateSet(charset_translate, NULL);
+ 
+-    vim_free( gui.event_buffer );
++    vim_free(gui.event_buffer);
+ 
+ #ifdef USE_PANEL_GROUPS
+-    vim_free( panel_titles );
++    vim_free(panel_titles);
+ #endif
+ }
+ 
+@@ -1333,10 +1336,10 @@
+ /* When no events are available, photon will call this function, working is
+  * set to FALSE, and the gui_mch_update loop will exit. */
+     static int
+-exit_gui_mch_update( void *data )
++exit_gui_mch_update(void *data)
+ {
+     *(int *)data = FALSE;
+-    return( Pt_END );
++    return Pt_END;
+ }
+ 
+     void
+@@ -1344,8 +1347,8 @@
+ {
+     int working = TRUE;
+ 
+-    PtAppAddWorkProc( NULL, exit_gui_mch_update, &working );
+-    while( ( working == TRUE ) && !vim_is_input_buf_full())
++    PtAppAddWorkProc(NULL, exit_gui_mch_update, &working);
++    while ((working == TRUE) && !vim_is_input_buf_full())
+     {
+ 	PtProcessEvent();
+     }
+@@ -1356,23 +1359,23 @@
+ {
+     is_timeout = FALSE;
+ 
+-    if( wtime > 0 )
+-	PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0 );
++    if (wtime > 0)
++	PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, wtime, 0);
+ 
+-    while( 1 )
++    while (1)
+     {
+ 	PtProcessEvent();
+-	if( input_available() )
++	if (input_available())
+ 	{
+-	    PtSetResource( gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0 );
+-	    return( OK );
++	    PtSetResource(gui_ph_timer_timeout, Pt_ARG_TIMER_INITIAL, 0, 0);
++	    return OK;
+ 	}
+-	else if( is_timeout == TRUE )
+-	    return( FAIL );
++	else if (is_timeout == TRUE)
++	    return FAIL;
+     }
+ }
+ 
+-#if defined( FEAT_BROWSE ) || defined( PROTO )
++#if defined(FEAT_BROWSE) || defined(PROTO)
+ /*
+  * Put up a file requester.
+  * Returns the selected name in allocated memory, or NULL for Cancel.
+@@ -1398,12 +1401,12 @@
+     char_u  *open_text = NULL;
+ 
+     flags = 0;
+-    memset( &file, 0, sizeof( file ) );
++    memset(&file, 0, sizeof(file));
+ 
+-    default_path = alloc( MAXPATHL + 1 + NAME_MAX + 1 );
+-    if( default_path != NULL )
++    default_path = alloc(MAXPATHL + 1 + NAME_MAX + 1);
++    if (default_path != NULL)
+     {
+-	if( saving == TRUE )
++	if (saving == TRUE)
+ 	{
+ 	    /* Don't need Pt_FSR_CONFIRM_EXISTING, vim will ask anyway */
+ 	    flags |= Pt_FSR_NO_FCHECK;
+@@ -1411,23 +1414,23 @@
+ 	}
+ 
+ 	/* combine the directory and filename into a single path */
+-	if( initdir == NULL || *initdir == NUL )
++	if (initdir == NULL || *initdir == NUL)
+ 	{
+-	    mch_dirname( default_path, MAXPATHL );
++	    mch_dirname(default_path, MAXPATHL);
+ 	    initdir = default_path;
+ 	}
+ 	else
+ 	{
+-	    STRCPY( default_path, initdir );
++	    STRCPY(default_path, initdir);
+ 	    initdir = default_path;
+ 	}
+ 
+-	if( default_name != NULL )
++	if (default_name != NULL)
+ 	{
+-	    if( default_path[ STRLEN( default_path ) - 1 ] != '/' )
+-		STRCAT( default_path, "/" );
++	    if (default_path[ STRLEN(default_path) - 1 ] != '/')
++		STRCAT(default_path, "/");
+ 
+-	    STRCAT( default_path, default_name );
++	    STRCAT(default_path, default_name);
+ 	}
+ 
+ 	/* TODO: add a filter? */
+@@ -1441,58 +1444,58 @@
+ 		NULL,
+ 		NULL,
+ 		&file,
+-		flags );
++		flags);
+ 
+-	vim_free( default_path );
++	vim_free(default_path);
+ 
+-	if( file.ret == Pt_FSDIALOG_BTN1 )
+-	    return( vim_strsave( file.path ) );
++	if (file.ret == Pt_FSDIALOG_BTN1)
++	    return vim_strsave(file.path);
+     }
+-    return( NULL );
++    return NULL;
+ }
+ #endif
+ 
+-#if defined( FEAT_GUI_DIALOG ) || defined( PROTO )
++#if defined(FEAT_GUI_DIALOG) || defined(PROTO)
+ static PtWidget_t *gui_ph_dialog_text = NULL;
+ 
+     static int
+-gui_ph_dialog_close( int button, void *data )
++gui_ph_dialog_close(int button, void *data)
+ {
+     PtModalCtrl_t *modal_ctrl = data;
+     char_u *dialog_text, *vim_text;
+ 
+-    if( gui_ph_dialog_text != NULL )
++    if (gui_ph_dialog_text != NULL)
+     {
+-	PtGetResource( gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0 );
+-	PtGetResource( gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0 );
+-	STRNCPY( vim_text, dialog_text, IOSIZE - 1 );
++	PtGetResource(gui_ph_dialog_text, Pt_ARG_TEXT_STRING, &dialog_text, 0);
++	PtGetResource(gui_ph_dialog_text, Pt_ARG_POINTER, &vim_text, 0);
++	STRNCPY(vim_text, dialog_text, IOSIZE - 1);
+     }
+ 
+-    PtModalUnblock( modal_ctrl, (void *) button );
++    PtModalUnblock(modal_ctrl, (void *) button);
+ 
+-    return( Pt_TRUE );
++    return Pt_TRUE;
+ }
+ 
+     static int
+-gui_ph_dialog_text_enter( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_dialog_text_enter(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+-    if( info->reason_subtype == Pt_EDIT_ACTIVATE )
+-	gui_ph_dialog_close( 1, data );
+-    return( Pt_CONTINUE );
++    if (info->reason_subtype == Pt_EDIT_ACTIVATE)
++	gui_ph_dialog_close(1, data);
++    return Pt_CONTINUE;
+ }
+ 
+     static int
+-gui_ph_dialog_esc( PtWidget_t *widget, void *data, PtCallbackInfo_t *info )
++gui_ph_dialog_esc(PtWidget_t *widget, void *data, PtCallbackInfo_t *info)
+ {
+     PhKeyEvent_t *key;
+ 
+-    key = PhGetData( info->event );
+-    if( ( key->key_flags & Pk_KF_Cap_Valid ) && ( key->key_cap == Pk_Escape ) )
++    key = PhGetData(info->event);
++    if ((key->key_flags & Pk_KF_Cap_Valid) && (key->key_cap == Pk_Escape))
+     {
+-	gui_ph_dialog_close( 0, data );
+-	return( Pt_CONSUME );
++	gui_ph_dialog_close(0, data);
++	return Pt_CONSUME;
+     }
+-    return( Pt_PROCESS );
++    return Pt_PROCESS;
+ }
+ 
+     int
+@@ -1502,7 +1505,8 @@
+ 	char_u	*message,
+ 	char_u	*buttons,
+ 	int	default_button,
+-	char_u	*textfield)
++	char_u	*textfield,
++	int	ex_cmd)
+ {
+     char_u	*str;
+     char_u	**button_array;
+@@ -1517,40 +1521,40 @@
+ 
+     button_count = len = i = 0;
+ 
+-    if( buttons == NULL || *buttons == NUL )
+-	return( -1 );
++    if (buttons == NULL || *buttons == NUL)
++	return -1;
+ 
+     /* There is one less separator than buttons, so bump up the button count */
+     button_count = 1;
+ 
+-    /* Count string length and number of seperators */
+-    for( str = buttons; *str; str++ )
++    /* Count string length and number of separators */
++    for (str = buttons; *str; str++)
+     {
+ 	len++;
+-	if( *str == DLG_BUTTON_SEP )
++	if (*str == DLG_BUTTON_SEP)
+ 	    button_count++;
+     }
+ 
+-    if ( title == NULL )
++    if (title == NULL)
+ 	title = "Vim";
+ 
+-    buttons_copy = alloc( len + 1 );
+-    button_array = (char_u **) alloc( button_count * sizeof( char_u * ) );
+-    if( buttons_copy != NULL && button_array != NULL )
++    buttons_copy = alloc(len + 1);
++    button_array = (char_u **) alloc(button_count * sizeof(char_u *));
++    if (buttons_copy != NULL && button_array != NULL)
+     {
+-	STRCPY( buttons_copy, buttons );
++	STRCPY(buttons_copy, buttons);
+ 
+ 	/*
+ 	 * Convert DLG_BUTTON_SEP into NUL's and fill in
+ 	 * button_array with the pointer to each NUL terminated string
+ 	 */
+ 	str = buttons_copy;
+-	for( i = 0; i < button_count; i++ )
++	for (i = 0; i < button_count; i++)
+ 	{
+ 	    button_array[ i ] = str;
+-	    for( ; *str; str++ )
++	    for (; *str; str++)
+ 	    {
+-		if( *str == DLG_BUTTON_SEP )
++		if (*str == DLG_BUTTON_SEP)
+ 		{
+ 		    *str++ = NUL;
+ 		    break;
+@@ -1564,7 +1568,7 @@
+ 		NULL,
+ 		message, NULL,
+ 		button_count, (const char **) button_array, NULL,
+-		default_button, 0, Pt_MODAL );
++		default_button, 0, Pt_MODAL);
+ #else
+ 	/* Writing the dialog ourselves lets us add extra features, like
+ 	 * trapping the escape key and returning 0 to vim */
+@@ -1575,32 +1579,32 @@
+ 	    PtModalCtrl_t modal_ctrl;
+ 	    PtDialogInfo_t di;
+ 
+-	    memset( &di, 0, sizeof( di ) );
+-	    memset( &modal_ctrl, 0, sizeof( modal_ctrl ) );
++	    memset(&di, 0, sizeof(di));
++	    memset(&modal_ctrl, 0, sizeof(modal_ctrl));
+ 
+ 	    n = 0;
+-	    PtSetArg( &args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0 );
+-	    PtSetArg( &args[n++], Pt_ARG_WIDTH, 350, 0 );
+-	    PtSetArg( &args[n++], Pt_ARG_GROUP_ORIENTATION,
+-		    Pt_GROUP_VERTICAL, 0 );
+-	    PtSetArg( &args[n++], Pt_ARG_GROUP_FLAGS,
+-		    Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL );
+-	    PtSetArg( &args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE );
+-	    pane = PtCreateWidget( PtGroup, NULL, n, args );
++	    PtSetArg(&args[n++], Pt_ARG_GROUP_ROWS_COLS, 0, 0);
++	    PtSetArg(&args[n++], Pt_ARG_WIDTH, 350, 0);
++	    PtSetArg(&args[n++], Pt_ARG_GROUP_ORIENTATION,
++		    Pt_GROUP_VERTICAL, 0);
++	    PtSetArg(&args[n++], Pt_ARG_GROUP_FLAGS,
++		    Pt_TRUE, Pt_GROUP_NO_KEYS | Pt_GROUP_STRETCH_HORIZONTAL);
++	    PtSetArg(&args[n++], Pt_ARG_CONTAINER_FLAGS, Pt_FALSE, Pt_TRUE);
++	    pane = PtCreateWidget(PtGroup, NULL, n, args);
+ 
+ 	    n = 0;
+-	    PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, message, 0 );
+-	    PtCreateWidget( PtLabel, pane, n, args );
++	    PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, message, 0);
++	    PtCreateWidget(PtLabel, pane, n, args);
+ 
+-	    if( textfield != NULL )
++	    if (textfield != NULL)
+ 	    {
+ 		n = 0;
+-		PtSetArg( &args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0 );
+-		PtSetArg( &args[n++], Pt_ARG_TEXT_STRING, textfield, 0 );
+-		PtSetArg( &args[n++], Pt_ARG_POINTER, textfield, 0 );
+-		gui_ph_dialog_text = PtCreateWidget( PtText, pane, n, args );
+-		PtAddCallback( gui_ph_dialog_text, Pt_CB_ACTIVATE,
+-			gui_ph_dialog_text_enter, &modal_ctrl );
++		PtSetArg(&args[n++], Pt_ARG_MAX_LENGTH, IOSIZE - 1, 0);
++		PtSetArg(&args[n++], Pt_ARG_TEXT_STRING, textfield, 0);
++		PtSetArg(&args[n++], Pt_ARG_POINTER, textfield, 0);
++		gui_ph_dialog_text = PtCreateWidget(PtText, pane, n, args);
++		PtAddCallback(gui_ph_dialog_text, Pt_CB_ACTIVATE,
++			gui_ph_dialog_text_enter, &modal_ctrl);
+ 	    }
+ 
+ 	    di.parent = gui.vimWindow;
+@@ -1615,28 +1619,28 @@
+ 	    di.callback = gui_ph_dialog_close;
+ 	    di.data = &modal_ctrl;
+ 
+-	    dialog = PtCreateDialog( &di );
+-	    PtAddFilterCallback( dialog, Ph_EV_KEY,
+-		    gui_ph_dialog_esc, &modal_ctrl );
++	    dialog = PtCreateDialog(&di);
++	    PtAddFilterCallback(dialog, Ph_EV_KEY,
++		    gui_ph_dialog_esc, &modal_ctrl);
+ 
+-	    if( gui_ph_dialog_text != NULL )
+-		PtGiveFocus( gui_ph_dialog_text, NULL );
++	    if (gui_ph_dialog_text != NULL)
++		PtGiveFocus(gui_ph_dialog_text, NULL);
+ 
+ 	    /* Open dialog, block the vim window and wait for the dialog to close */
+-	    PtRealizeWidget( dialog );
+-	    PtMakeModal( dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR );
+-	    dialog_result = (int) PtModalBlock( &modal_ctrl, 0 );
++	    PtRealizeWidget(dialog);
++	    PtMakeModal(dialog, Ph_CURSOR_NOINPUT, Ph_CURSOR_DEFAULT_COLOR);
++	    dialog_result = (int) PtModalBlock(&modal_ctrl, 0);
+ 
+-	    PtDestroyWidget( dialog );
++	    PtDestroyWidget(dialog);
+ 	    gui_ph_dialog_text = NULL;
+ 	}
+ #endif
+     }
+ 
+-    vim_free( button_array );
+-    vim_free( buttons_copy );
++    vim_free(button_array);
++    vim_free(buttons_copy);
+ 
+-    return( dialog_result );
++    return dialog_result;
+ }
+ #endif
+ /****************************************************************************/
+@@ -1647,12 +1651,12 @@
+ {
+     PhPoint_t *pos;
+ 
+-    pos = PtWidgetPos( gui.vimWindow, NULL );
++    pos = PtWidgetPos(gui.vimWindow, NULL);
+ 
+     *x = pos->x;
+     *y = pos->y;
+ 
+-    return( OK );
++    return OK;
+ }
+ 
+     void
+@@ -1660,7 +1664,7 @@
+ {
+     PhPoint_t pos = { x, y };
+ 
+-    PtSetResource( gui.vimWindow, Pt_ARG_POS, &pos, 0 );
++    PtSetResource(gui.vimWindow, Pt_ARG_POS, &pos, 0);
+ }
+ 
+     void
+@@ -1676,10 +1680,10 @@
+     window_size.h += pg_margin_top + pg_margin_bottom;
+ #endif
+ 
+-    PtSetResource( gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0 );
+-    PtSetResource( gui.vimWindow, Pt_ARG_DIM, &window_size, 0 );
++    PtSetResource(gui.vimWindow, Pt_ARG_MINIMUM_DIM, &min_size, 0);
++    PtSetResource(gui.vimWindow, Pt_ARG_DIM, &window_size, 0);
+ 
+-    if( ! PtWidgetIsRealized( gui.vimWindow ) )
++    if (! PtWidgetIsRealized(gui.vimWindow))
+ 	gui_ph_resize_container();
+ }
+ 
+@@ -1692,8 +1696,8 @@
+ {
+     PhRect_t console;
+ 
+-    PhWindowQueryVisible( Ph_QUERY_WORKSPACE, 0,
+-	    PhInputGroup( NULL ), &console );
++    PhWindowQueryVisible(Ph_QUERY_WORKSPACE, 0,
++	    PhInputGroup(NULL), &console);
+ 
+     *screen_w = console.lr.x - console.ul.x + 1;
+     *screen_h = console.lr.y - console.ul.y + 1;
+@@ -1704,11 +1708,11 @@
+ {
+     PhWindowEvent_t event;
+ 
+-    memset( &event, 0, sizeof (event) );
++    memset(&event, 0, sizeof (event));
+     event.event_f = Ph_WM_HIDE;
+     event.event_state = Ph_WM_EVSTATE_HIDE;
+-    event.rid = PtWidgetRid( gui.vimWindow );
+-    PtForwardWindowEvent( &event );
++    event.rid = PtWidgetRid(gui.vimWindow);
++    PtForwardWindowEvent(&event);
+ }
+ 
+ #if defined(FEAT_EVAL) || defined(PROTO)
+@@ -1720,11 +1724,11 @@
+ {
+     PhWindowEvent_t event;
+ 
+-    memset( &event, 0, sizeof (event) );
++    memset(&event, 0, sizeof (event));
+     event.event_f = Ph_WM_TOFRONT;
+     event.event_state = Ph_WM_EVSTATE_FFRONT;
+-    event.rid = PtWidgetRid( gui.vimWindow );
+-    PtForwardWindowEvent( &event );
++    event.rid = PtWidgetRid(gui.vimWindow);
++    PtForwardWindowEvent(&event);
+ }
+ #endif
+ 
+@@ -1732,9 +1736,9 @@
+ gui_mch_settitle(char_u *title,	char_u *icon)
+ {
+ #ifdef USE_PANEL_GROUP
+-    gui_ph_pg_set_buffer_num( curwin->w_buffer->b_fnum );
++    gui_ph_pg_set_buffer_num(curwin->w_buffer->b_fnum);
+ #endif
+-    PtSetResource( gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0 );
++    PtSetResource(gui.vimWindow, Pt_ARG_WINDOW_TITLE, title, 0);
+     /* Not sure what to do with the icon text, set balloon text somehow? */
+ }
+ 
+@@ -1747,10 +1751,10 @@
+     int	    n = 0;
+     PtArg_t args[3];
+ 
+-    PtSetArg( &args[ n++ ], Pt_ARG_MAXIMUM, max, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0 );
+-    PtSetArg( &args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0 );
+-    PtSetResources( sb->id, n, args );
++    PtSetArg(&args[ n++ ], Pt_ARG_MAXIMUM, max, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_SLIDER_SIZE, size, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_GAUGE_VALUE, val, 0);
++    PtSetResources(sb->id, n, args);
+ }
+ 
+     void
+@@ -1758,7 +1762,7 @@
+ {
+     PhArea_t area = {{ x, y }, { w, h }};
+ 
+-    PtSetResource( sb->id, Pt_ARG_AREA, &area, 0 );
++    PtSetResource(sb->id, Pt_ARG_AREA, &area, 0);
+ }
+ 
+     void
+@@ -1774,12 +1778,12 @@
+      *
+      * Also, don't let the scrollbar get focus
+      */
+-    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
+-	    Pt_DELAY_REALIZE | Pt_GETS_FOCUS );
+-    PtSetArg( &args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
++    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_DELAY_REALIZE,
++	    Pt_DELAY_REALIZE | Pt_GETS_FOCUS);
++    PtSetArg(&args[ n++ ], Pt_ARG_SCROLLBAR_FLAGS, Pt_SCROLLBAR_SHOW_ARROWS, 0);
+ #if 0
+     /* Don't need this anchoring for the scrollbars */
+-    if( orient == SBAR_HORIZ )
++    if (orient == SBAR_HORIZ)
+     {
+ 	anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM |
+ 	    Pt_LEFT_ANCHORED_LEFT | Pt_RIGHT_ANCHORED_RIGHT;
+@@ -1787,40 +1791,40 @@
+     else
+     {
+ 	anchor_flags = Pt_BOTTOM_ANCHORED_BOTTOM | Pt_TOP_ANCHORED_TOP;
+-	if( sb->wp != NULL )
++	if (sb->wp != NULL)
+ 	{
+-	    if( sb == &sb->wp->w_scrollbars[ SBAR_LEFT ] )
++	    if (sb == &sb->wp->w_scrollbars[ SBAR_LEFT ])
+ 		anchor_flags |= Pt_LEFT_ANCHORED_LEFT;
+ 	    else
+ 		anchor_flags |= Pt_RIGHT_ANCHORED_RIGHT;
+ 	}
+     }
+-    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED );
++    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS, anchor_flags, Pt_IS_ANCHORED);
+ #endif
+-    PtSetArg( &args[ n++ ], Pt_ARG_ORIENTATION,
+-	    (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0 );
++    PtSetArg(&args[ n++ ], Pt_ARG_ORIENTATION,
++	    (orient == SBAR_HORIZ) ? Pt_HORIZONTAL : Pt_VERTICAL, 0);
+ #ifdef USE_PANEL_GROUP
+-    sb->id = PtCreateWidget( PtScrollbar, gui.vimPanelGroup, n, args );
++    sb->id = PtCreateWidget(PtScrollbar, gui.vimPanelGroup, n, args);
+ #else
+-    sb->id = PtCreateWidget( PtScrollbar, gui.vimContainer, n, args );
++    sb->id = PtCreateWidget(PtScrollbar, gui.vimContainer, n, args);
+ #endif
+ 
+-    PtAddCallback( sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb );
++    PtAddCallback(sb->id, Pt_CB_SCROLLBAR_MOVE, gui_ph_handle_scrollbar, sb);
+ }
+ 
+     void
+ gui_mch_enable_scrollbar(scrollbar_T *sb, int flag)
+ {
+-    if( flag != 0 )
+-	PtRealizeWidget( sb->id );
++    if (flag != 0)
++	PtRealizeWidget(sb->id);
+     else
+-	PtUnrealizeWidget( sb->id );
++	PtUnrealizeWidget(sb->id);
+ }
+ 
+     void
+ gui_mch_destroy_scrollbar(scrollbar_T *sb)
+ {
+-    PtDestroyWidget( sb->id );
++    PtDestroyWidget(sb->id);
+     sb->id = NULL;
+ }
+ 
+@@ -1865,8 +1869,8 @@
+ 	return;
+ 
+     if (shape == MSHAPE_HIDE || gui.pointer_hidden)
+-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
+-		0 );
++	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, Ph_CURSOR_NONE,
++		0);
+     else
+     {
+ 	if (shape >= MSHAPE_NUMBERED)
+@@ -1874,7 +1878,7 @@
+ 	else
+ 	    id = mshape_ids[shape];
+ 
+-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id,	0 );
++	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE, id,	0);
+     }
+     if (shape != MSHAPE_HIDE)
+ 	last_shape = shape;
+@@ -1884,19 +1888,19 @@
+     void
+ gui_mch_mousehide(int hide)
+ {
+-    if( gui.pointer_hidden != hide )
++    if (gui.pointer_hidden != hide)
+     {
+ 	gui.pointer_hidden = hide;
+ #ifdef FEAT_MOUSESHAPE
+-	if( hide )
+-	    PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+-		    Ph_CURSOR_NONE, 0 );
++	if (hide)
++	    PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
++		    Ph_CURSOR_NONE, 0);
+ 	else
+-	    mch_set_mouse_shape( last_shape );
++	    mch_set_mouse_shape(last_shape);
+ #else
+-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
+-		( hide == MOUSE_SHOW ) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
+-		0 );
++	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_TYPE,
++		(hide == MOUSE_SHOW) ? GUI_PH_MOUSE_TYPE : Ph_CURSOR_NONE,
++		0);
+ #endif
+     }
+ }
+@@ -1909,8 +1913,8 @@
+ 
+     /* FIXME: does this return the correct position,
+      * with respect to the border? */
+-    PhQueryCursor( PhInputGroup( NULL ), &info );
+-    PtGetAbsPosition( gui.vimTextArea , &ix, &iy );
++    PhQueryCursor(PhInputGroup(NULL), &info);
++    PtGetAbsPosition(gui.vimTextArea , &ix, &iy);
+ 
+     *x = info.pos.x - ix;
+     *y = info.pos.y - iy;
+@@ -1921,9 +1925,9 @@
+ {
+     short abs_x, abs_y;
+ 
+-    PtGetAbsPosition( gui.vimTextArea, &abs_x, &abs_y );
++    PtGetAbsPosition(gui.vimTextArea, &abs_x, &abs_y);
+     /* Add the border offset? */
+-    PhMoveCursorAbs( PhInputGroup( NULL ), abs_x + x, abs_y + y );
++    PhMoveCursorAbs(PhInputGroup(NULL), abs_x + x, abs_y + y);
+ }
+ 
+ /****************************************************************************/
+@@ -1951,34 +1955,34 @@
+     color_diff = gui_get_lightness(gui_ph_mouse_color)
+ 					  - gui_get_lightness(gui.back_pixel);
+ 
+-    if( abs( color_diff ) < 64 )
++    if (abs(color_diff) < 64)
+     {
+ 	short r, g, b;
+ 	/* not a great algorithm... */
+-	r = PgRedValue( gui_ph_mouse_color ) ^ 255;
+-	g = PgGreenValue( gui_ph_mouse_color ) ^ 255;
+-	b = PgBlueValue( gui_ph_mouse_color ) ^ 255;
++	r = PgRedValue(gui_ph_mouse_color) ^ 255;
++	g = PgGreenValue(gui_ph_mouse_color) ^ 255;
++	b = PgBlueValue(gui_ph_mouse_color) ^ 255;
+ 
+ #ifndef FEAT_MOUSESHAPE
+-	gui_ph_mouse_color = PgRGB( r, g, b );
+-	PtSetResource( gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
+-		gui_ph_mouse_color, 0 );
++	gui_ph_mouse_color = PgRGB(r, g, b);
++	PtSetResource(gui.vimTextArea, Pt_ARG_CURSOR_COLOR,
++		gui_ph_mouse_color, 0);
+ #endif
+     }
+ #endif
+ 
+-    PtSetResource( gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0 );
++    PtSetResource(gui.vimTextArea, Pt_ARG_FILL_COLOR, gui.back_pixel, 0);
+ }
+ 
+     static int
+ hex_digit(int c)
+ {
+     if (VIM_ISDIGIT(c))
+-	return( c - '0' );
++	return c - '0';
+     c = TOLOWER_ASC(c);
+     if (c >= 'a' && c <= 'f')
+-	return( c - 'a' + 10 );
+-    return( -1000 );
++	return c - 'a' + 10;
++    return -1000;
+ }
+ 
+ 
+@@ -2006,8 +2010,8 @@
+     static GuiColourTable table[] =
+     {
+ 	{"Black",	    RGB(0x00, 0x00, 0x00)},
+-	{"DarkGray",	    RGB(0x80, 0x80, 0x80)},
+-	{"DarkGrey",	    RGB(0x80, 0x80, 0x80)},
++	{"DarkGray",	    RGB(0xA9, 0xA9, 0xA9)},
++	{"DarkGrey",	    RGB(0xA9, 0xA9, 0xA9)},
+ 	{"Gray",	    RGB(0xC0, 0xC0, 0xC0)},
+ 	{"Grey",	    RGB(0xC0, 0xC0, 0xC0)},
+ 	{"LightGray",	    RGB(0xD3, 0xD3, 0xD3)},
+@@ -2036,19 +2040,19 @@
+ 	{"LightRed",	    RGB(0xFF, 0xA0, 0xA0)},
+ 	{"DarkBlue",	    RGB(0x00, 0x00, 0x80)},
+ 	{"Blue",	    RGB(0x00, 0x00, 0xFF)},
+-	{"LightBlue",	    RGB(0xA0, 0xA0, 0xFF)},
++	{"LightBlue",	    RGB(0xAD, 0xD8, 0xE6)},
+ 	{"DarkGreen",	    RGB(0x00, 0x80, 0x00)},
+ 	{"Green",	    RGB(0x00, 0xFF, 0x00)},
+-	{"LightGreen",	    RGB(0xA0, 0xFF, 0xA0)},
++	{"LightGreen",	    RGB(0x90, 0xEE, 0x90)},
+ 	{"DarkCyan",	    RGB(0x00, 0x80, 0x80)},
+ 	{"Cyan",	    RGB(0x00, 0xFF, 0xFF)},
+-	{"LightCyan",	    RGB(0xA0, 0xFF, 0xFF)},
++	{"LightCyan",	    RGB(0xE0, 0xFF, 0xFF)},
+ 	{"DarkMagenta",	    RGB(0x80, 0x00, 0x80)},
+ 	{"Magenta",	    RGB(0xFF, 0x00, 0xFF)},
+ 	{"LightMagenta",    RGB(0xFF, 0xA0, 0xFF)},
+ 	{"Brown",	    RGB(0x80, 0x40, 0x40)},
+ 	{"Yellow",	    RGB(0xFF, 0xFF, 0x00)},
+-	{"LightYellow",	    RGB(0xFF, 0xFF, 0xA0)},
++	{"LightYellow",	    RGB(0xFF, 0xFF, 0xE0)},
+ 	{"SeaGreen",	    RGB(0x2E, 0x8B, 0x57)},
+ 	{"Orange",	    RGB(0xFF, 0xA5, 0x00)},
+ 	{"Purple",	    RGB(0xA0, 0x20, 0xF0)},
+@@ -2057,20 +2061,20 @@
+     };
+ 
+     /* is name #rrggbb format? */
+-    if( name[0] == '#' && STRLEN( name ) == 7 )
++    if (name[0] == '#' && STRLEN(name) == 7)
+     {
+-	r = hex_digit( name[1] ) * 16 + hex_digit( name[2] );
+-	g = hex_digit( name[3] ) * 16 + hex_digit( name[4] );
+-	b = hex_digit( name[5] ) * 16 + hex_digit( name[6] );
+-	if( r < 0 || g < 0 || b < 0 )
++	r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
++	g = hex_digit(name[3]) * 16 + hex_digit(name[4]);
++	b = hex_digit(name[5]) * 16 + hex_digit(name[6]);
++	if (r < 0 || g < 0 || b < 0)
+ 	    return INVALCOLOR;
+-	return( RGB( r, g, b ) );
++	return RGB(r, g, b);
+     }
+ 
+-    for( i = 0; i < ARRAY_LENGTH( table ); i++ )
++    for (i = 0; i < ARRAY_LENGTH(table); i++)
+     {
+-	if( STRICMP( name, table[i].name ) == 0 )
+-	    return( table[i].colour );
++	if (STRICMP(name, table[i].name) == 0)
++	    return table[i].colour;
+     }
+ 
+     /*
+@@ -2114,7 +2118,7 @@
+ 	    if (STRICMP(color, name) == 0)
+ 	    {
+ 		fclose(fd);
+-		return( (guicolor_T) RGB(r,g,b) );
++		return (guicolor_T)RGB(r, g, b);
+ 	    }
+ 	}
+ 
+@@ -2128,13 +2132,13 @@
+     void
+ gui_mch_set_fg_color(guicolor_T color)
+ {
+-    PgSetTextColor( color );
++    PgSetTextColor(color);
+ }
+ 
+     void
+ gui_mch_set_bg_color(guicolor_T color)
+ {
+-    PgSetFillColor( color );
++    PgSetFillColor(color);
+ }
+ 
+     void
+@@ -2147,21 +2151,21 @@
+ {
+     PhRect_t rect;
+ 
+-    rect.ul.x = FILL_X( col );
+-    rect.ul.y = FILL_Y( row );
++    rect.ul.x = FILL_X(col);
++    rect.ul.y = FILL_Y(row);
+ 
+     /* FIXME: This has an off by one pixel problem */
+     rect.lr.x = rect.ul.x + nc * gui.char_width;
+     rect.lr.y = rect.ul.y + nr * gui.char_height;
+-    if( nc > 0 )
++    if (nc > 0)
+ 	rect.lr.x -= 1;
+-    if( nr > 0 )
++    if (nr > 0)
+ 	rect.lr.y -= 1;
+ 
+     DRAW_START;
+-    PgSetDrawMode( Pg_DrawModeDSTINVERT );
+-    PgDrawRect( &rect, Pg_DRAW_FILL );
+-    PgSetDrawMode( Pg_DrawModeSRCCOPY );
++    PgSetDrawMode(Pg_DrawModeDSTINVERT);
++    PgDrawRect(&rect, Pg_DRAW_FILL);
++    PgSetDrawMode(Pg_DrawModeSRCCOPY);
+     DRAW_END;
+ }
+ 
+@@ -2169,13 +2173,13 @@
+ gui_mch_clear_block(int row1, int col1, int row2, int col2)
+ {
+     PhRect_t block = {
+-	{ FILL_X( col1 ), FILL_Y( row1 ) },
+-	{ FILL_X( col2 + 1 ) - 1, FILL_Y( row2 + 1 ) - 1}
++	{ FILL_X(col1), FILL_Y(row1) },
++	{ FILL_X(col2 + 1) - 1, FILL_Y(row2 + 1) - 1}
+     };
+ 
+     DRAW_START;
+-    gui_mch_set_bg_color( gui.back_pixel );
+-    PgDrawRect( &block, Pg_DRAW_FILL );
++    gui_mch_set_bg_color(gui.back_pixel);
++    PgDrawRect(&block, Pg_DRAW_FILL);
+     DRAW_END;
+ }
+ 
+@@ -2188,12 +2192,12 @@
+ 	    Rows * gui.char_height + gui.border_width - 1 }
+     };
+ 
+-    if( is_ignore_draw == TRUE )
++    if (is_ignore_draw == TRUE)
+ 	return;
+ 
+     DRAW_START;
+-    gui_mch_set_bg_color( gui.back_pixel );
+-    PgDrawRect( &text_rect, Pg_DRAW_FILL );
++    gui_mch_set_bg_color(gui.back_pixel);
++    PgDrawRect(&text_rect, Pg_DRAW_FILL);
+     DRAW_END;
+ }
+ 
+@@ -2203,28 +2207,28 @@
+     PhRect_t    rect;
+     PhPoint_t   delta;
+ 
+-    rect.ul.x = FILL_X( gui.scroll_region_left );
+-    rect.ul.y = FILL_Y( row + num_lines );
++    rect.ul.x = FILL_X(gui.scroll_region_left);
++    rect.ul.y = FILL_Y(row + num_lines);
+ 
+-    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
+-    rect.lr.y = FILL_Y( gui.scroll_region_bot + 1) - 1;
++    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
++    rect.lr.y = FILL_Y(gui.scroll_region_bot + 1) - 1;
+ 
+-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
+-    PhTranslateRect( &rect, &gui_ph_raw_offset );
++    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
++    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
++    PhTranslateRect(&rect, &gui_ph_raw_offset);
+ 
+     delta.x = 0;
+     delta.y = -num_lines * gui.char_height;
+ 
+     PgFlush();
+ 
+-    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ), &rect, &delta );
++    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)), &rect, &delta);
+ 
+     gui_clear_block(
+ 	gui.scroll_region_bot - num_lines + 1,
+ 	gui.scroll_region_left,
+ 	gui.scroll_region_bot,
+-	gui.scroll_region_right );
++	gui.scroll_region_right);
+ }
+ 
+     void
+@@ -2233,25 +2237,25 @@
+     PhRect_t    rect;
+     PhPoint_t   delta;
+ 
+-    rect.ul.x = FILL_X( gui.scroll_region_left );
+-    rect.ul.y = FILL_Y( row );
++    rect.ul.x = FILL_X(gui.scroll_region_left);
++    rect.ul.y = FILL_Y(row);
+ 
+-    rect.lr.x = FILL_X( gui.scroll_region_right + 1 ) - 1;
+-    rect.lr.y = FILL_Y( gui.scroll_region_bot - num_lines + 1 ) - 1;
++    rect.lr.x = FILL_X(gui.scroll_region_right + 1) - 1;
++    rect.lr.y = FILL_Y(gui.scroll_region_bot - num_lines + 1) - 1;
+ 
+-    PtWidgetOffset( gui.vimTextArea, &gui_ph_raw_offset );
+-    PhTranslatePoint( &gui_ph_raw_offset, PtWidgetPos( gui.vimTextArea, NULL ) );
+-    PhTranslateRect( &rect, &gui_ph_raw_offset );
++    PtWidgetOffset(gui.vimTextArea, &gui_ph_raw_offset);
++    PhTranslatePoint(&gui_ph_raw_offset, PtWidgetPos(gui.vimTextArea, NULL));
++    PhTranslateRect(&rect, &gui_ph_raw_offset);
+ 
+     delta.x = 0;
+     delta.y = num_lines * gui.char_height;
+ 
+     PgFlush();
+ 
+-    PhBlit( PtWidgetRid( PtFindDisjoint( gui.vimTextArea ) ) , &rect, &delta );
++    PhBlit(PtWidgetRid(PtFindDisjoint(gui.vimTextArea)) , &rect, &delta);
+ 
+-    gui_clear_block( row, gui.scroll_region_left,
+-	    row + num_lines - 1, gui.scroll_region_right );
++    gui_clear_block(row, gui.scroll_region_left,
++	    row + num_lines - 1, gui.scroll_region_right);
+ }
+ 
+     void
+@@ -2260,37 +2264,37 @@
+     static char *utf8_buffer = NULL;
+     static int	utf8_len = 0;
+ 
+-    PhPoint_t	pos = { TEXT_X( col ), TEXT_Y( row ) };
++    PhPoint_t	pos = { TEXT_X(col), TEXT_Y(row) };
+     PhRect_t	rect;
+ 
+-    if( is_ignore_draw == TRUE )
++    if (is_ignore_draw == TRUE)
+ 	return;
+ 
+     DRAW_START;
+ 
+-    if( !( flags & DRAW_TRANSP ) )
++    if (!(flags & DRAW_TRANSP))
+     {
+ 	PgDrawIRect(
+-		FILL_X( col ), FILL_Y( row ),
+-		FILL_X( col + len ) - 1, FILL_Y( row + 1 ) - 1,
+-		Pg_DRAW_FILL );
++		FILL_X(col), FILL_Y(row),
++		FILL_X(col + len) - 1, FILL_Y(row + 1) - 1,
++		Pg_DRAW_FILL);
+     }
+ 
+-    if( flags & DRAW_UNDERL )
+-	PgSetUnderline( gui.norm_pixel, Pg_TRANSPARENT, 0 );
++    if (flags & DRAW_UNDERL)
++	PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0);
+ 
+-    if( charset_translate != NULL
++    if (charset_translate != NULL
+ #ifdef FEAT_MBYTE
+ 	    && enc_utf8 == 0
+ #endif
+-	    )
++	   )
+     {
+ 	int src_taken, dst_made;
+ 
+ 	/* Use a static buffer to avoid large amounts of de/allocations */
+-	if( utf8_len < len )
++	if (utf8_len < len)
+ 	{
+-	    utf8_buffer = realloc( utf8_buffer, len * MB_LEN_MAX );
++	    utf8_buffer = realloc(utf8_buffer, len * MB_LEN_MAX);
+ 	    utf8_len = len;
+ 	}
+ 
+@@ -2301,36 +2305,36 @@
+ 		&src_taken,
+ 		utf8_buffer,
+ 		utf8_len,
+-		&dst_made );
++		&dst_made);
+ 	s = utf8_buffer;
+ 	len = dst_made;
+     }
+ 
+-    PgDrawText( s, len, &pos, 0 );
++    PgDrawText(s, len, &pos, 0);
+ 
+-    if( flags & DRAW_BOLD )
++    if (flags & DRAW_BOLD)
+     {
+ 	/* FIXME: try and only calculate these values once... */
+-	rect.ul.x = FILL_X( col ) + 1;
+-	rect.ul.y = FILL_Y( row );
+-	rect.lr.x = FILL_X( col + len ) - 1;
+-	rect.lr.y = FILL_Y( row + 1) - 1;
+-	/* PgSetUserClip( NULL ) causes the scrollbar to not redraw... */
++	rect.ul.x = FILL_X(col) + 1;
++	rect.ul.y = FILL_Y(row);
++	rect.lr.x = FILL_X(col + len) - 1;
++	rect.lr.y = FILL_Y(row + 1) - 1;
++	/* PgSetUserClip(NULL) causes the scrollbar to not redraw... */
+ #if 0
+ 	pos.x++;
+ 
+-	PgSetUserClip( &rect );
+-	PgDrawText( s, len, &pos, 0 );
+-	PgSetUserClip( NULL );
++	PgSetUserClip(&rect);
++	PgDrawText(s, len, &pos, 0);
++	PgSetUserClip(NULL);
+ #else
+-	rect.lr.y -= ( p_linespace + 1 ) / 2;
++	rect.lr.y -= (p_linespace + 1) / 2;
+ 	/* XXX: DrawTextArea doesn't work with phditto */
+-	PgDrawTextArea( s, len, &rect, Pg_TEXT_BOTTOM );
++	PgDrawTextArea(s, len, &rect, Pg_TEXT_BOTTOM);
+ #endif
+     }
+ 
+-    if( flags & DRAW_UNDERL )
+-	PgSetUnderline( Pg_TRANSPARENT, Pg_TRANSPARENT, 0 );
++    if (flags & DRAW_UNDERL)
++	PgSetUnderline(Pg_TRANSPARENT, Pg_TRANSPARENT, 0);
+ 
+     DRAW_END;
+ }
+@@ -2345,14 +2349,14 @@
+ 
+     /* FIXME: Double width characters */
+ 
+-    r.ul.x = FILL_X( gui.col );
+-    r.ul.y = FILL_Y( gui.row );
++    r.ul.x = FILL_X(gui.col);
++    r.ul.y = FILL_Y(gui.row);
+     r.lr.x = r.ul.x + gui.char_width - 1;
+     r.lr.y = r.ul.y + gui.char_height - 1;
+ 
+     DRAW_START;
+-    PgSetStrokeColor( color );
+-    PgDrawRect( &r, Pg_DRAW_STROKE );
++    PgSetStrokeColor(color);
++    PgDrawRect(&r, Pg_DRAW_STROKE);
+     DRAW_END;
+ }
+ 
+@@ -2361,14 +2365,14 @@
+ {
+     PhRect_t r;
+ 
+-    r.ul.x = FILL_X( gui.col );
+-    r.ul.y = FILL_Y( gui.row ) + gui.char_height - h;
++    r.ul.x = FILL_X(gui.col);
++    r.ul.y = FILL_Y(gui.row) + gui.char_height - h;
+     r.lr.x = r.ul.x + w - 1;
+     r.lr.y = r.ul.y + h - 1;
+ 
+     DRAW_START;
+-    gui_mch_set_bg_color( color );
+-    PgDrawRect( &r, Pg_DRAW_FILL );
++    gui_mch_set_bg_color(color);
++    PgDrawRect(&r, Pg_DRAW_FILL);
+     DRAW_END;
+ }
+ 
+@@ -2384,10 +2388,10 @@
+ gui_mch_start_blink(void)
+ {
+     /* Only turn on the timer on if none of the times are zero */
+-    if( blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
++    if (blink_waittime && blink_ontime && blink_offtime && gui.in_focus)
+     {
+-	PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
+-		blink_waittime, 0 );
++	PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL,
++		blink_waittime, 0);
+ 	blink_state = BLINK_ON;
+ 	gui_update_cursor(TRUE, FALSE);
+     }
+@@ -2396,9 +2400,9 @@
+     void
+ gui_mch_stop_blink(void)
+ {
+-    PtSetResource( gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0 );
++    PtSetResource(gui_ph_timer_cursor, Pt_ARG_TIMER_INITIAL, 0, 0);
+ 
+-    if( blink_state == BLINK_OFF )
++    if (blink_state == BLINK_OFF)
+ 	gui_update_cursor(TRUE, FALSE);
+ 
+     blink_state = BLINK_NONE;
+@@ -2416,15 +2420,15 @@
+     void
+ gui_mch_flash(int msec)
+ {
+-    PgSetFillXORColor( Pg_BLACK, Pg_WHITE );
+-    PgSetDrawMode( Pg_DRAWMODE_XOR );
++    PgSetFillXORColor(Pg_BLACK, Pg_WHITE);
++    PgSetDrawMode(Pg_DRAWMODE_XOR);
+     gui_mch_clear_all();
+     gui_mch_flush();
+ 
+-    ui_delay( (long) msec, TRUE );
++    ui_delay((long) msec, TRUE);
+ 
+     gui_mch_clear_all();
+-    PgSetDrawMode( Pg_DRAWMODE_OPAQUE );
++    PgSetDrawMode(Pg_DRAWMODE_OPAQUE);
+     gui_mch_flush();
+ }
+ 
+@@ -2439,7 +2443,7 @@
+ {
+     PhArea_t area = {{x, y}, {w, h}};
+ 
+-    PtSetResource( gui.vimTextArea, Pt_ARG_AREA, &area, 0 );
++    PtSetResource(gui.vimTextArea, Pt_ARG_AREA, &area, 0);
+ }
+ 
+     int
+@@ -2450,8 +2454,8 @@
+     for (i = 0; special_keys[i].key_sym != 0; i++)
+ 	if (name[0] == special_keys[i].vim_code0 &&
+ 		 name[1] == special_keys[i].vim_code1)
+-	    return( OK );
+-    return( FAIL );
++	    return OK;
++    return FAIL;
+ }
+ 
+ /****************************************************************************/
+@@ -2495,23 +2499,23 @@
+ };
+ 
+ static PhImage_t *
+-gui_ph_toolbar_load_icon( char_u *iconfile )
++gui_ph_toolbar_load_icon(char_u *iconfile)
+ {
+     static PhImage_t external_icon;
+     PhImage_t *temp_phi = NULL;
+ 
+-    temp_phi = PxLoadImage( iconfile, NULL );
+-    if( temp_phi != NULL )
++    temp_phi = PxLoadImage(iconfile, NULL);
++    if (temp_phi != NULL)
+     {
+ 	/* The label widget will free the image/palette/etc. for us when
+ 	 * it's destroyed */
+ 	temp_phi->flags |= Ph_RELEASE_IMAGE_ALL;
+-	memcpy( &external_icon, temp_phi, sizeof( external_icon ) );
+-	free( temp_phi );
++	memcpy(&external_icon, temp_phi, sizeof(external_icon));
++	free(temp_phi);
+ 
+ 	temp_phi = &external_icon;
+     }
+-    return( temp_phi );
++    return temp_phi;
+ }
+ 
+ /*
+@@ -2522,45 +2526,45 @@
+  * PhImage_t are copied, and the original PhImage_t aren't needed anymore).
+  */
+ static PhImage_t *
+-gui_ph_toolbar_find_icon( vimmenu_T *menu )
++gui_ph_toolbar_find_icon(vimmenu_T *menu)
+ {
+     char_u full_pathname[ MAXPATHL + 1 ];
+     PhImage_t *icon = NULL;
+ 
+-    if( menu->icon_builtin == FALSE )
++    if (menu->icon_builtin == FALSE)
+     {
+-	if( menu->iconfile != NULL )
++	if (menu->iconfile != NULL)
+ 	    /* TODO: use gui_find_iconfile() */
+-	    icon = gui_ph_toolbar_load_icon( menu->iconfile );
++	    icon = gui_ph_toolbar_load_icon(menu->iconfile);
+ 
+ 	/* TODO: Restrict loading to just .png? Search for any format? */
+-	if( ( icon == NULL ) &&
+-	    ( ( gui_find_bitmap( menu->name, full_pathname, "gif" ) == OK ) ||
+-	      ( gui_find_bitmap( menu->name, full_pathname, "png" ) == OK ) ) )
+-	    icon = gui_ph_toolbar_load_icon( full_pathname );
++	if ((icon == NULL) &&
++	    ((gui_find_bitmap(menu->name, full_pathname, "gif") == OK) ||
++	      (gui_find_bitmap(menu->name, full_pathname, "png") == OK)))
++	    icon = gui_ph_toolbar_load_icon(full_pathname);
+ 
+-	if( icon != NULL )
+-	    return( icon );
++	if (icon != NULL)
++	    return icon;
+     }
+ 
+-    if( menu->iconidx >= 0 &&
+-	    ( menu->iconidx < ARRAY_LENGTH( gui_ph_toolbar_images ) ) )
++    if (menu->iconidx >= 0 &&
++	    (menu->iconidx < ARRAY_LENGTH(gui_ph_toolbar_images)))
+     {
+-	return( gui_ph_toolbar_images[ menu->iconidx ] );
++	return gui_ph_toolbar_images[menu->iconidx];
+     }
+ 
+-    return( NULL );
++    return NULL;
+ }
+ #endif
+ 
+-#if defined( FEAT_MENU ) || defined( PROTO )
++#if defined(FEAT_MENU) || defined(PROTO)
+     void
+ gui_mch_enable_menu(int flag)
+ {
+-    if( flag != 0 )
+-	PtRealizeWidget( gui.vimMenuBar );
++    if (flag != 0)
++	PtRealizeWidget(gui.vimMenuBar);
+     else
+-	PtUnrealizeWidget( gui.vimMenuBar );
++	PtUnrealizeWidget(gui.vimMenuBar);
+ }
+ 
+     void
+@@ -2571,30 +2575,30 @@
+ 
+ /* Change the position of a menu button in the parent */
+     static void
+-gui_ph_position_menu( PtWidget_t *widget, int priority )
++gui_ph_position_menu(PtWidget_t *widget, int priority)
+ {
+     PtWidget_t	*traverse;
+     vimmenu_T	*menu;
+ 
+-    traverse = PtWidgetChildBack( PtWidgetParent( widget ) );
++    traverse = PtWidgetChildBack(PtWidgetParent(widget));
+ 
+     /* Iterate through the list of widgets in traverse, until
+      * we find the position we want to insert our widget into */
+     /* TODO: traverse from front to back, possible speedup? */
+-    while( traverse != NULL )
++    while (traverse != NULL)
+     {
+-	PtGetResource( traverse, Pt_ARG_POINTER, &menu, 0 );
++	PtGetResource(traverse, Pt_ARG_POINTER, &menu, 0);
+ 
+-	if( menu != NULL &&
++	if (menu != NULL &&
+ 		priority < menu->priority &&
+-		widget != traverse )
++		widget != traverse)
+ 	{
+ 	    /* Insert the widget before the current traverse widget */
+-	    PtWidgetInsert( widget, traverse, 1 );
++	    PtWidgetInsert(widget, traverse, 1);
+ 	    return;
+ 	}
+ 
+-	traverse = PtWidgetBrotherInFront( traverse );
++	traverse = PtWidgetBrotherInFront(traverse);
+     }
+ }
+ 
+@@ -2610,11 +2614,11 @@
+ 
+     menu->submenu_id = menu->id = NULL;
+ 
+-    if( menu_is_menubar( menu->name ) )
++    if (menu_is_menubar(menu->name))
+     {
+ 
+-	accel_key = vim_strchr( menu->name, '&' );
+-	if( accel_key != NULL )
++	accel_key = vim_strchr(menu->name, '&');
++	if (accel_key != NULL)
+ 	{
+ 	    mnemonic_str[0] = accel_key[1];
+ 	    mnemonic_str[1] = NUL;
+@@ -2622,51 +2626,51 @@
+ 
+ 	/* Create the menu button */
+ 	n = 0;
+-	PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+-	PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
+-	if( accel_key != NULL )
+-	    PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0 );
+-	PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
++	PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
++	PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
++	if (accel_key != NULL)
++	    PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str, 0);
++	PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
+ 
+-	if( parent != NULL )
+-	    PtSetArg( &args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0 );
++	if (parent != NULL)
++	    PtSetArg(&args[ n++ ], Pt_ARG_BUTTON_TYPE, Pt_MENU_RIGHT, 0);
+ 
+-	menu->id = PtCreateWidget( PtMenuButton,
++	menu->id = PtCreateWidget(PtMenuButton,
+ 		(parent == NULL) ? gui.vimMenuBar : parent->submenu_id,
+-		n, args );
++		n, args);
+ 
+-	PtAddCallback( menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu );
++	PtAddCallback(menu->id, Pt_CB_ARM, gui_ph_handle_pulldown_menu, menu);
+ 
+ 	/* Create the actual menu */
+ 	n = 0;
+-	if( parent != NULL )
+-	    PtSetArg( &args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD );
++	if (parent != NULL)
++	    PtSetArg(&args[ n++ ], Pt_ARG_MENU_FLAGS, Pt_TRUE, Pt_MENU_CHILD);
+ 
+-	menu->submenu_id = PtCreateWidget( PtMenu, menu->id, n, args );
++	menu->submenu_id = PtCreateWidget(PtMenu, menu->id, n, args);
+ 
+-	if( parent == NULL )
++	if (parent == NULL)
+ 	{
+-	    PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
+-		    gui_ph_handle_menu_unrealized, menu );
++	    PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
++		    gui_ph_handle_menu_unrealized, menu);
+ 
+-	    if( menu->mnemonic != 0 )
++	    if (menu->mnemonic != 0)
+ 	    {
+-		PtAddHotkeyHandler( gui.vimWindow, tolower( menu->mnemonic ),
+-			Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu );
++		PtAddHotkeyHandler(gui.vimWindow, tolower(menu->mnemonic),
++			Pk_KM_Alt, 0, menu, gui_ph_handle_pulldown_menu);
+ 	    }
+ 	}
+ 
+-	gui_ph_position_menu( menu->id, menu->priority );
++	gui_ph_position_menu(menu->id, menu->priority);
+ 
+ 	/* Redraw menubar here instead of gui_mch_draw_menubar */
+-	if( gui.menu_is_active )
+-	    PtRealizeWidget( menu->id );
++	if (gui.menu_is_active)
++	    PtRealizeWidget(menu->id);
+     }
+-    else if( menu_is_popup( menu->name ) )
++    else if (menu_is_popup(menu->name))
+     {
+-	menu->submenu_id = PtCreateWidget( PtMenu, gui.vimWindow, 0, NULL );
+-	PtAddCallback( menu->submenu_id, Pt_CB_UNREALIZED,
+-		gui_ph_handle_menu_unrealized, menu );
++	menu->submenu_id = PtCreateWidget(PtMenu, gui.vimWindow, 0, NULL);
++	PtAddCallback(menu->submenu_id, Pt_CB_UNREALIZED,
++		gui_ph_handle_menu_unrealized, menu);
+     }
+ }
+ 
+@@ -2680,104 +2684,104 @@
+     PtArg_t args[13];
+ 
+     n = 0;
+-    PtSetArg( &args[ n++ ], Pt_ARG_POINTER, menu, 0 );
++    PtSetArg(&args[ n++ ], Pt_ARG_POINTER, menu, 0);
+ 
+ #ifdef FEAT_TOOLBAR
+-    if( menu_is_toolbar( parent->name ) )
++    if (menu_is_toolbar(parent->name))
+     {
+-	if( menu_is_separator( menu->name ) )
++	if (menu_is_separator(menu->name))
+ 	{
+-	    PtSetArg( &args[ n++ ], Pt_ARG_SEP_FLAGS,
+-		    Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION );
+-	    PtSetArg( &args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0 );
+-	    PtSetArg( &args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
+-		    Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM );
+-	    PtSetArg( &args[ n++ ], Pt_ARG_WIDTH, 2, 0 );
+-	    menu->id = PtCreateWidget( PtSeparator, gui.vimToolBar, n, args );
++	    PtSetArg(&args[ n++ ], Pt_ARG_SEP_FLAGS,
++		    Pt_SEP_VERTICAL, Pt_SEP_ORIENTATION);
++	    PtSetArg(&args[ n++ ], Pt_ARG_SEP_TYPE, Pt_ETCHED_IN, 0);
++	    PtSetArg(&args[ n++ ], Pt_ARG_ANCHOR_FLAGS,
++		    Pt_TRUE, Pt_ANCHOR_TOP_BOTTOM);
++	    PtSetArg(&args[ n++ ], Pt_ARG_WIDTH, 2, 0);
++	    menu->id = PtCreateWidget(PtSeparator, gui.vimToolBar, n, args);
+ 	}
+ 	else
+ 	{
+-	    if( strstr( (const char *) p_toolbar, "text" ) != NULL )
++	    if (strstr((const char *) p_toolbar, "text") != NULL)
+ 	    {
+-		PtSetArg( &args[ n++ ], Pt_ARG_BALLOON_POSITION,
+-			Pt_BALLOON_BOTTOM, 0 );
+-		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+-		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0 );
++		PtSetArg(&args[ n++ ], Pt_ARG_BALLOON_POSITION,
++			Pt_BALLOON_BOTTOM, 0);
++		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
++		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_FONT, "TextFont08", 0);
+ 	    }
+-	    if( ( strstr( (const char *) p_toolbar, "icons" ) != NULL ) &&
+-		    ( gui_ph_toolbar_images != NULL ) )
++	    if ((strstr((const char *) p_toolbar, "icons") != NULL) &&
++		    (gui_ph_toolbar_images != NULL))
+ 	    {
+-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_IMAGE,
+-			gui_ph_toolbar_find_icon( menu ), 0 );
+-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0 );
+-		PtSetArg( &args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0 );
++		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_IMAGE,
++			gui_ph_toolbar_find_icon(menu), 0);
++		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_TYPE, Pt_TEXT_IMAGE, 0);
++		PtSetArg(&args[ n++ ], Pt_ARG_TEXT_IMAGE_SPACING, 0, 0);
+ 	    }
+-	    if( strstr( (const char *) p_toolbar, "tooltips" ) != NULL )
++	    if (strstr((const char *) p_toolbar, "tooltips") != NULL)
+ 	    {
+-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_BALLOON,
+-			gui_ph_show_tooltip, 0 );
+-		PtSetArg( &args[ n++ ], Pt_ARG_LABEL_FLAGS,
+-			Pt_TRUE, Pt_SHOW_BALLOON );
++		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_BALLOON,
++			gui_ph_show_tooltip, 0);
++		PtSetArg(&args[ n++ ], Pt_ARG_LABEL_FLAGS,
++			Pt_TRUE, Pt_SHOW_BALLOON);
+ 	    }
+-	    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0 );
+-	    PtSetArg( &args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0 );
+-	    PtSetArg( &args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
+-		    Pt_HIGHLIGHTED | Pt_GETS_FOCUS );
+-	    PtSetArg( &args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0 );
+-	    menu->id = PtCreateWidget( PtButton, gui.vimToolBar, n, args );
++	    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_HEIGHT, 1, 0);
++	    PtSetArg(&args[ n++ ], Pt_ARG_MARGIN_WIDTH, 1, 0);
++	    PtSetArg(&args[ n++ ], Pt_ARG_FLAGS, Pt_FALSE,
++		    Pt_HIGHLIGHTED | Pt_GETS_FOCUS);
++	    PtSetArg(&args[ n++ ], Pt_ARG_FILL_COLOR, Pg_TRANSPARENT, 0);
++	    menu->id = PtCreateWidget(PtButton, gui.vimToolBar, n, args);
+ 
+-	    PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
++	    PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
+ 	}
+ 	/* Update toolbar if it's open */
+-	if( PtWidgetIsRealized( gui.vimToolBar ) )
+-	    PtRealizeWidget( menu->id );
++	if (PtWidgetIsRealized(gui.vimToolBar))
++	    PtRealizeWidget(menu->id);
+     }
+     else
+ #endif
+-	if( menu_is_separator( menu->name ) )
++	if (menu_is_separator(menu->name))
+     {
+-	menu->id = PtCreateWidget( PtSeparator, parent->submenu_id, n, args );
++	menu->id = PtCreateWidget(PtSeparator, parent->submenu_id, n, args);
+     }
+     else
+     {
+-	accel_key = vim_strchr( menu->name, '&' );
+-	if( accel_key != NULL )
++	accel_key = vim_strchr(menu->name, '&');
++	if (accel_key != NULL)
+ 	{
+ 	    mnemonic_str[0] = accel_key[1];
+ 	    mnemonic_str[1] = NUL;
+ 	}
+ 
+-	PtSetArg( &args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0 );
+-	if( accel_key != NULL )
+-	    PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
+-		    0 );
++	PtSetArg(&args[ n++ ], Pt_ARG_TEXT_STRING, menu->dname, 0);
++	if (accel_key != NULL)
++	    PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_KEY, mnemonic_str,
++		    0);
+ 
+-	PtSetArg( &args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0 );
++	PtSetArg(&args[ n++ ], Pt_ARG_ACCEL_TEXT, menu->actext, 0);
+ 
+-	menu->id = PtCreateWidget( PtMenuButton, parent->submenu_id, n, args );
++	menu->id = PtCreateWidget(PtMenuButton, parent->submenu_id, n, args);
+ 
+-	PtAddCallback( menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu );
++	PtAddCallback(menu->id, Pt_CB_ACTIVATE, gui_ph_handle_menu, menu);
+ 
+ #ifdef USE_PANEL_GROUP
+-	if( gui_ph_is_buffer_item( menu, parent ) == TRUE )
++	if (gui_ph_is_buffer_item(menu, parent) == TRUE)
+ 	{
+-	    PtAddCallback( menu->id, Pt_CB_DESTROYED,
+-		    gui_ph_handle_buffer_remove, menu );
+-	    gui_ph_pg_add_buffer( menu->dname );
++	    PtAddCallback(menu->id, Pt_CB_DESTROYED,
++		    gui_ph_handle_buffer_remove, menu);
++	    gui_ph_pg_add_buffer(menu->dname);
+ 	}
+ #endif
+     }
+ 
+-    gui_ph_position_menu( menu->id, menu->priority );
++    gui_ph_position_menu(menu->id, menu->priority);
+ }
+ 
+     void
+ gui_mch_destroy_menu(vimmenu_T *menu)
+ {
+-    if( menu->submenu_id != NULL )
+-	PtDestroyWidget( menu->submenu_id );
+-    if( menu->id != NULL )
+-	PtDestroyWidget( menu->id );
++    if (menu->submenu_id != NULL)
++	PtDestroyWidget(menu->submenu_id);
++    if (menu->id != NULL)
++	PtDestroyWidget(menu->id);
+ 
+     menu->submenu_id = NULL;
+     menu->id = NULL;
+@@ -2788,12 +2792,12 @@
+ {
+     long    flags, mask, fields;
+ 
+-    if( menu->id == NULL )
++    if (menu->id == NULL)
+ 	return;
+ 
+-    flags = PtWidgetFlags( menu->id );
+-    if( PtWidgetIsClass( menu->id, PtMenuButton ) &&
+-	    PtWidgetIsClass( PtWidgetParent( menu->id ), PtMenu ) )
++    flags = PtWidgetFlags(menu->id);
++    if (PtWidgetIsClass(menu->id, PtMenuButton) &&
++	    PtWidgetIsClass(PtWidgetParent(menu->id), PtMenu))
+     {
+ 	fields = Pt_FALSE;
+ 	mask = Pt_SELECTABLE | Pt_HIGHLIGHTED;
+@@ -2804,11 +2808,11 @@
+ 	mask = Pt_BLOCKED | Pt_GHOST;
+     }
+ 
+-    if( ! grey )
++    if (! grey)
+ 	fields = ~fields;
+ 
+-    PtSetResource( menu->id, Pt_ARG_FLAGS, fields,
+-	    mask );
++    PtSetResource(menu->id, Pt_ARG_FLAGS, fields,
++	    mask);
+ }
+ 
+     void
+@@ -2829,8 +2833,8 @@
+     void
+ gui_mch_show_popupmenu(vimmenu_T *menu)
+ {
+-    PtSetResource( menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0 );
+-    PtRealizeWidget( menu->submenu_id );
++    PtSetResource(menu->submenu_id, Pt_ARG_POS, &abs_mouse, 0);
++    PtRealizeWidget(menu->submenu_id);
+ }
+ 
+     void
+@@ -2841,14 +2845,14 @@
+ 
+ #endif
+ 
+-#if defined( FEAT_TOOLBAR ) || defined( PROTO )
++#if defined(FEAT_TOOLBAR) || defined(PROTO)
+     void
+ gui_mch_show_toolbar(int showit)
+ {
+-    if( showit )
+-	PtRealizeWidget( gui.vimToolBar );
++    if (showit)
++	PtRealizeWidget(gui.vimToolBar);
+     else
+-	PtUnrealizeWidget( gui.vimToolBar );
++	PtUnrealizeWidget(gui.vimToolBar);
+ }
+ #endif
+ 
+@@ -2869,36 +2873,36 @@
+     FontQueryInfo   info;
+     int_u	    style;
+ 
+-    font_tag = alloc( MAX_FONT_TAG );
+-    if( font_tag != NULL )
++    font_tag = alloc(MAX_FONT_TAG);
++    if (font_tag != NULL)
+     {
+-	if( PfGenerateFontName( font_name, font_flags, font_size,
+-		    font_tag ) != NULL )
++	if (PfGenerateFontName(font_name, font_flags, font_size,
++		    font_tag) != NULL)
+ 	{
+ 	    /* Enforce some limits on the font used */
+ 	    style = PHFONT_INFO_FIXED;
+ 
+-	    if( enforce & PF_STYLE_BOLD )
++	    if (enforce & PF_STYLE_BOLD)
+ 		style |= PHFONT_INFO_BOLD;
+-	    if( enforce & PF_STYLE_ANTIALIAS )
++	    if (enforce & PF_STYLE_ANTIALIAS)
+ 		style |= PHFONT_INFO_ALIAS;
+-	    if( enforce & PF_STYLE_ITALIC )
++	    if (enforce & PF_STYLE_ITALIC)
+ 		style |= PHFONT_INFO_ITALIC;
+ 
+-	    PfQueryFontInfo( font_tag, &info );
++	    PfQueryFontInfo(font_tag, &info);
+ 
+-	    if( info.size == 0 )
++	    if (info.size == 0)
+ 		font_size = 0;
+ 
+ 	    /* Make sure font size matches, and that the font style
+ 	     * at least has the bits we're checking for */
+-	    if( font_size == info.size &&
+-		    style == (info.style & style) )
+-		return( (GuiFont) font_tag );
++	    if (font_size == info.size &&
++		    style == (info.style & style))
++		return (GuiFont)font_tag;
+ 	}
+-	vim_free( font_tag );
++	vim_free(font_tag);
+     }
+-    return( NULL );
++    return NULL;
+ }
+ 
+ /*
+@@ -2918,34 +2922,34 @@
+ 	char_u *vim_font,
+ 	char_u **font_name,
+ 	int_u *font_flags,
+-	int_u *font_size )
++	int_u *font_size)
+ {
+     char_u  *mark;
+     int_u   name_len, size;
+ 
+-    mark = vim_strchr( vim_font, ':' );
+-    if( mark == NULL )
+-	name_len = STRLEN( vim_font );
++    mark = vim_strchr(vim_font, ':');
++    if (mark == NULL)
++	name_len = STRLEN(vim_font);
+     else
+-	name_len = (int_u) ( mark - vim_font );
++	name_len = (int_u) (mark - vim_font);
+ 
+-    *font_name = vim_strnsave( vim_font, name_len );
+-    if( *font_name != NULL )
++    *font_name = vim_strnsave(vim_font, name_len);
++    if (*font_name != NULL)
+     {
+-	if( mark != NULL )
++	if (mark != NULL)
+ 	{
+-	    while( *mark != NUL && *mark++ == ':')
++	    while (*mark != NUL && *mark++ == ':')
+ 	    {
+-		switch( tolower( *mark++ ) )
++		switch (tolower(*mark++))
+ 		{
+ 		    case 'a': *font_flags |= PF_STYLE_ANTIALIAS; break;
+ 		    case 'b': *font_flags |= PF_STYLE_BOLD; break;
+ 		    case 'i': *font_flags |= PF_STYLE_ITALIC; break;
+ 
+ 		    case 's':
+-			size = getdigits( &mark );
++			size = getdigits(&mark);
+ 			/* Restrict the size to some vague limits */
+-			if( size < 1 || size > 100 )
++			if (size < 1 || size > 100)
+ 			    size = 8;
+ 
+ 			*font_size = size;
+@@ -2956,9 +2960,9 @@
+ 		}
+ 	    }
+ 	}
+-	return( TRUE );
++	return TRUE;
+     }
+-    return( FALSE );
++    return FALSE;
+ }
+ 
+     int
+@@ -2972,60 +2976,60 @@
+     FontQueryInfo info;
+     PhRect_t extent;
+ 
+-    if( vim_font_name == NULL )
++    if (vim_font_name == NULL)
+     {
+ 	/* Default font */
+ 	vim_font_name = "PC Terminal";
+     }
+ 
+-    if( STRCMP( vim_font_name, "*" ) == 0 )
++    if (STRCMP(vim_font_name, "*") == 0)
+     {
+-	font_tag = PtFontSelection( gui.vimWindow, NULL, NULL,
+-		"pcterm12", -1, PHFONT_FIXED, NULL );
++	font_tag = PtFontSelection(gui.vimWindow, NULL, NULL,
++		"pcterm12", -1, PHFONT_FIXED, NULL);
+ 
+-	if( font_tag == NULL )
+-	    return( FAIL );
++	if (font_tag == NULL)
++	    return FAIL;
+ 
+-	gui_mch_free_font( gui.norm_font );
++	gui_mch_free_font(gui.norm_font);
+ 	gui.norm_font = font_tag;
+ 
+-	PfQueryFontInfo( font_tag, &info );
+-	font_name = vim_strsave( info.font );
++	PfQueryFontInfo(font_tag, &info);
++	font_name = vim_strsave(info.font);
+     }
+     else
+     {
+-	if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+-		    &font_size ) == FALSE )
+-	    return( FAIL );
++	if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
++		    &font_size) == FALSE)
++	    return FAIL;
+ 
+-	font_tag = gui_ph_get_font( font_name, font_flags, font_size, 0 );
+-	if( font_tag == NULL )
++	font_tag = gui_ph_get_font(font_name, font_flags, font_size, 0);
++	if (font_tag == NULL)
+ 	{
+-	    vim_free( font_name );
+-	    return( FAIL );
++	    vim_free(font_name);
++	    return FAIL;
+ 	}
+ 
+-	gui_mch_free_font( gui.norm_font );
++	gui_mch_free_font(gui.norm_font);
+ 	gui.norm_font = font_tag;
+     }
+ 
+-    gui_mch_free_font( gui.bold_font );
+-    gui.bold_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_BOLD,
+-	    font_size, PF_STYLE_BOLD );
+-
+-    gui_mch_free_font( gui.ital_font );
+-    gui.ital_font = gui_ph_get_font( font_name, font_flags | PF_STYLE_ITALIC,
+-	    font_size, PF_STYLE_ITALIC );
++    gui_mch_free_font(gui.bold_font);
++    gui.bold_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_BOLD,
++	    font_size, PF_STYLE_BOLD);
++
++    gui_mch_free_font(gui.ital_font);
++    gui.ital_font = gui_ph_get_font(font_name, font_flags | PF_STYLE_ITALIC,
++	    font_size, PF_STYLE_ITALIC);
+ 
+     /* This extent was brought to you by the letter 'g' */
+-    PfExtentText( &extent, NULL, font_tag, "g", 1 );
++    PfExtentText(&extent, NULL, font_tag, "g", 1);
+ 
+     gui.char_width = extent.lr.x - extent.ul.x + 1;
+     gui.char_height = (- extent.ul.y) + extent.lr.y + 1;
+     gui.char_ascent = - extent.ul.y;
+ 
+-    vim_free( font_name );
+-    return( OK );
++    vim_free(font_name);
++    return OK;
+ }
+ 
+ /*
+@@ -3036,12 +3040,12 @@
+ {
+     FontQueryInfo info;
+ 
+-    PfQueryFontInfo( gui.norm_font, &info );
++    PfQueryFontInfo(gui.norm_font, &info);
+ 
+     gui.char_height = - info.ascender + info.descender + p_linespace;
+     gui.char_ascent = - info.ascender + p_linespace / 2;
+ 
+-    return( OK );
++    return OK;
+ }
+ 
+     GuiFont
+@@ -3052,20 +3056,20 @@
+     int_u   font_size = 12;
+     int_u   font_flags = 0;
+ 
+-    if( gui_ph_parse_font_name( vim_font_name, &font_name, &font_flags,
+-		&font_size ) != FALSE )
++    if (gui_ph_parse_font_name(vim_font_name, &font_name, &font_flags,
++		&font_size) != FALSE)
+     {
+-	font_tag = gui_ph_get_font( font_name, font_flags, font_size, -1 );
+-	vim_free( font_name );
++	font_tag = gui_ph_get_font(font_name, font_flags, font_size, -1);
++	vim_free(font_name);
+ 
+-	if( font_tag != NULL )
+-	    return( (GuiFont) font_tag );
++	if (font_tag != NULL)
++	    return (GuiFont)font_tag;
+     }
+ 
+-    if( report_error )
+-	EMSG2(e_font, vim_font_name );
++    if (report_error)
++	EMSG2(e_font, vim_font_name);
+ 
+-    return( FAIL );
++    return FAIL;
+ }
+ 
+ #if defined(FEAT_EVAL) || defined(PROTO)
+@@ -3087,12 +3091,12 @@
+     void
+ gui_mch_set_font(GuiFont font)
+ {
+-    PgSetFont( font );
++    PgSetFont(font);
+ }
+ 
+     void
+ gui_mch_free_font(GuiFont font)
+ {
+-    vim_free( font );
++    vim_free(font);
+ }
+ 
+diff -Naur vim73.orig/src/gui_riscos.c vim73/src/gui_riscos.c
+--- vim73.orig/src/gui_riscos.c	2010-05-15 11:04:09.000000000 +0000
++++ vim73/src/gui_riscos.c	1970-01-01 00:00:00.000000000 +0000
+@@ -1,3558 +0,0 @@
+-/* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved	by Bram Moolenaar
+- *
+- * Do ":help uganda"  in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- * See README.txt for an overview of the Vim source code.
+- */
+-
+-#include "vim.h"
+-#include <string.h>
+-
+-/*
+- * gui_riscos.c
+- *
+- * Thomas Leonard <tal197@ecs.soton.ac.uk>
+- * Updated by Andy Wingate <andy@sparse.net>
+- */
+-
+-extern int time_of_last_poll;
+-
+-int task_handle = 0;		/* Zero means we are not yet a Wimp task */
+-int child_handle = 0;		/* Task handle of our child process (zero if none). */
+-int *wimp_menu = (int *) -1;	/* Pointer to a Wimp menu structure (or -1) */
+-int save_window = -1;		/* Save As window handle */
+-
+-int *redraw_block = NULL;	/* NULL means not in a redraw loop. */
+-int ro_return_early = FALSE;	/* Break out of gui_mch_wait_for_chars() */
+-
+-int leaf_ref = 0;		/* Wimp message number - send via Wimp$Scrap */
+-char_u *leaf_name = NULL;	/* Leaf name from DataSave */
+-
+-int default_columns = 120;	/* These values are used if the --rows and --columns */
+-int default_rows = 32;		/* options aren't used on startup. */
+-
+-#define DRAG_FALSE	    0
+-#define DRAG_SELECTION	    1
+-#define DRAG_RESIZE_WINDOW  2
+-int ro_dragging = DRAG_FALSE;
+-int drag_button;
+-int drag_modifiers;
+-int drag_x_offset;
+-int drag_y_offset;
+-
+-int nested_wimp = FALSE;	/* Bool - can we use the new wimp? */
+-
+-int changed_mode = FALSE;
+-int x_eigen_factor;
+-int y_eigen_factor;
+-
+-/* If ro_current_font is non-zero then use the outline font with that handle,
+- * otherwise, if zap_redraw is TRUE then use ZapRedraw, otherwise use the
+- * system font.
+- *
+- * If zap_redraw is TRUE then zap_file[] contains valid Zap font file
+- * pointers (or NULLs).
+- */
+-int ro_current_font = 0;	/* 0 is system font, or ZapRedraw */
+-int font_x_offset   = 0;	/* Where to position each char in its box */
+-int font_y_offset   = 0;
+-
+-int zap_redraw	    = FALSE;
+-int double_height   = FALSE;	/* Plot each line twice? */
+-
+-#define grgb(r,g,b) ((b<<16) + (g<<8) + (r))
+-#define UNUSED_COLOUR (gui.back_pixel)
+-
+-#define RO_LOAD_CLIPBOARD -2	/* Internal handle for DataSave message. */
+-
+-/* Changes by John Kortink, 22-23 July 1998
+- *
+- * Stuff to make redraw a lot faster. Almost all of it is right here below,
+- * elsewhere changes are marked with 'JK230798'. Apart from a small change in
+- * 'gui.c' all changes are limited to this file, 'gui_riscos.c'. The change in
+- * 'gui.c' is to make Vim stop being 'smart' not redrawing characters that are
+- * 'already there' (i.e. from the previous line, by coincidence). This caused a
+- * lot more calls to the redraw code, which we want to avoid because a few nice
+- * big strings at a time is a lot faster than a truckload of small ones. ('Dear
+- * Bram ...').
+- */
+-
+-/* The ZapRedraw structure */
+-
+-static struct
+-{
+-    int		r_flags;
+-    int		r_minx;
+-    int		r_miny;
+-    int		r_maxx;
+-    int		r_maxy;
+-    int		r_screen;
+-    int		r_bpl;
+-    int		r_bpp;
+-    int		r_charw;
+-    int		r_charh;
+-    char	*r_caddr;
+-    int		r_cbpl;
+-    int		r_cbpc;
+-    int		r_linesp;
+-    int		r_data;
+-    int		r_scrollx;
+-    int		r_scrolly;
+-    int		*r_palette;
+-    int		r_for;
+-    int		r_bac;
+-    char	*r_workarea;
+-    int		r_magx;
+-    int		r_magy;
+-    int		r_xsize;
+-    int		r_ysize;
+-    int		r_mode;
+-}
+-zap_redraw_block;
+-
+-/* Other globals */
+-
+-static int	zap_redraw_initialised = FALSE;
+-static int	zap_redraw_update_colours;
+-static int	zap_redraw_colours[2];
+-static int	zap_redraw_palette[16];
+-
+-/* Holds the current Zap font file(s).
+- * The font is recreated from this block on a mode change.
+- * When using zap, element ZAP_NORMAL is always valid, but
+- * the others can be NULL.
+- */
+-
+-#define ZAP_NORMAL  0
+-#define ZAP_BOLD    1
+-#define ZAP_ITALIC  2
+-#define ZAP_BITALIC 3
+-#define ZAP_STYLES  4
+-
+-/* Zap font file format data */
+-static char	*zap_file[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+-
+-/* r_caddr format for current mode */
+-static char	*zap_caddr[ZAP_STYLES] = {NULL, NULL, NULL, NULL};
+-
+-static void ro_remove_menu(int *menu);
+-
+-/*
+- * Initialise all the ZapRedraw stuff.
+- * Call this when changing font and after each mode change.
+- * zap_redraw_bitmap must contain a valid Zap font file (possibly
+- * created from the system font).
+- *
+- * Return FAIL to revert to system font (if we can't use ZapRedraw).
+- */
+-    int
+-ro_zap_redraw_initialise()
+-{
+-    int	    bytes_per_bitmap_char;
+-    int	    first, last;
+-    int	    i;
+-
+-    /* Can't have initialisers for struct members :-(, ok, this way then ... */
+-    if (!zap_redraw_initialised)
+-    {
+-	zap_redraw_block.r_workarea = NULL;
+-	zap_redraw_initialised = TRUE;
+-    }
+-
+-    /* We redraw in DSA mode */
+-    zap_redraw_block.r_flags = 0x0;
+-
+-    /* Let ZapRedraw get the screen address for us */
+-    zap_redraw_block.r_screen = 0;
+-
+-    /* Read the font width and height from the font file header.
+-     * Assume that all styles are the same size.
+-     * ZAP_NORMAL is always present.
+-     */
+-    zap_redraw_block.r_charw = ((int *) zap_file[ZAP_NORMAL])[2];
+-    zap_redraw_block.r_charh = ((int *) zap_file[ZAP_NORMAL])[3];
+-
+-    /* We have no linespacing */
+-    zap_redraw_block.r_linesp = 0;
+-
+-    /* Fix foreground = colour 1 */
+-    zap_redraw_block.r_for = 1;
+-
+-    /* Fix background = colour 0 */
+-    zap_redraw_block.r_bac = 0;
+-
+-    /* Colour mask buffer */
+-    zap_redraw_block.r_palette = zap_redraw_palette;
+-
+-    /* Allocate local workspace (for the few calls following here) */
+-    if (zap_redraw_block.r_workarea != NULL)
+-	free(zap_redraw_block.r_workarea);
+-    zap_redraw_block.r_workarea = (char*) malloc(128);
+-    if (!zap_redraw_block.r_workarea)
+-	return FAIL;	/* Out of memory */
+-
+-    /* Fill in VDU variables */
+-    if (xswi(ZapRedraw_ReadVduVars, 0, &zap_redraw_block) & v_flag)
+-	return FAIL;	    /* Can't find ZapRedraw module - use VDU instead */
+-
+-    /* Determine cbpl and cbpc */
+-    swi(ZapRedraw_CachedCharSize, zap_redraw_block.r_bpp, 0,
+-	zap_redraw_block.r_charw, zap_redraw_block.r_charh);
+-    zap_redraw_block.r_cbpl = r2;
+-    zap_redraw_block.r_cbpc = r3;
+-
+-    /* Allocate general workspace (for the calls outside) */
+-    if (zap_redraw_block.r_workarea != NULL)
+-	free(zap_redraw_block.r_workarea);
+-    zap_redraw_block.r_workarea = (char*) malloc(128 + zap_redraw_block.r_cbpl);
+-    if (!zap_redraw_block.r_workarea)
+-	return FAIL;	/* Out of memory */
+-
+-    /* Now convert the 1 bpp character data ready for the current mode */
+-
+-    bytes_per_bitmap_char = (zap_redraw_block.r_charw * zap_redraw_block.r_charh + 7) / 8;
+-
+-    /* Convert the fonts from 1bpp to a format suitable for the
+-     * current mode.
+-     */
+-    for (i = 0; i < ZAP_STYLES; i++)
+-    {
+-	first = ((int *) zap_file[i])[4];
+-	last  = ((int *) zap_file[i])[5];
+-
+-	if (last > 255)
+-	    last = 255;	/* Don't convert cursors (overwrites memory!) */
+-
+-	/* Allocate the font cache */
+-	vim_free(zap_caddr[i]);
+-	if (zap_file[i])
+-	    zap_caddr[i] = (char*) malloc(zap_redraw_block.r_cbpc * 256);
+-	else
+-	    zap_caddr[i] = NULL;    /* No file for this style */
+-
+-	if (zap_caddr[i])
+-	{
+-	    zap_redraw_block.r_caddr = zap_caddr[i];
+-
+-	    swi(ZapRedraw_ConvertBitmap, 0, &zap_redraw_block,
+-		    first, last,		/* Range of characters to convert */
+-		    zap_file[i] + 0x20	/* Addr of first char provided by font */
+-		    - first * bytes_per_bitmap_char);
+-	}
+-    }
+-
+-    if (!zap_caddr[ZAP_NORMAL])
+-    {
+-	zap_redraw = FALSE;	/* Out of memory */
+-	return FAIL;
+-    }
+-
+-    /* Next time we need them, we have to update the colour masks */
+-    zap_redraw_update_colours = TRUE;
+-
+-    return OK;
+-}
+-
+-/*
+- * Redraw a string at OS coordinates <x,y> (top-left, x inclusive, y exclusive).
+- * Graphics clip window is window[0..3] as in R1+28..40 of Wimp_RedrawWindow.
+- * Returns (possibly modified) flags.
+- */
+-    int
+-ro_zap_redraw_draw_string(x, y, string, length, flags, clip)
+-    int	    x;
+-    int	    y;
+-    char    *string;
+-    int	    length;
+-    int	    flags;	/* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL, DRAW_ITALIC */
+-    int	    *clip;
+-{
+-    char redraw_data[1024];
+-    int clip_minx;
+-    int clip_miny;
+-    int clip_maxx;
+-    int clip_maxy;
+-    int os_xshift = zap_redraw_block.r_magx;
+-    int os_yshift = zap_redraw_block.r_magy;
+-
+-    if (flags & DRAW_TRANSP)
+-	return flags;	/* We don't do transparent plotting yet. */
+-
+-    if (flags & DRAW_BOLD)
+-    {
+-	if (flags & DRAW_ITALIC && zap_caddr[ZAP_BITALIC])
+-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_BITALIC];
+-	else
+-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_BOLD];
+-    }
+-    else
+-    {
+-	if (flags & DRAW_ITALIC)
+-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_ITALIC];
+-	else
+-	    zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+-    }
+-    if (!zap_redraw_block.r_caddr)
+-    {
+-	zap_redraw_block.r_caddr = zap_caddr[ZAP_NORMAL];
+-	flags |= DRAW_UNDERL;	    /* Style missing - we can always underline */
+-    }
+-
+-    /* Set the vertical scaling flag */
+-    if (double_height)
+-	zap_redraw_block.r_flags = 1 << 1;
+-    else
+-	zap_redraw_block.r_flags = 0;
+-
+-    /* Update the colour masks (if needed) */
+-    if (zap_redraw_update_colours)
+-    {
+-	swi(ZapRedraw_CreatePalette, 2,
+-		&zap_redraw_block,
+-		zap_redraw_colours,
+-		zap_redraw_block.r_palette, 2);
+-	zap_redraw_update_colours = FALSE;
+-    }
+-
+-    /* Target rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+-    zap_redraw_block.r_minx = x >> os_xshift;					/* inclusive */
+-    zap_redraw_block.r_miny = zap_redraw_block.r_ysize - (y >> os_yshift);	/* inclusive */
+-    zap_redraw_block.r_maxx = (x + length * gui.char_width) >> os_xshift;	/* exclusive */
+-    zap_redraw_block.r_maxy = zap_redraw_block.r_ysize - ((y - gui.char_height) >> os_yshift);
+-										/* exclusive */
+-
+-    /* Clip rectangle in ZapRedraw rectangle coordinates (pixels, Y-min/max reversed !!!) */
+-    clip_minx = clip[0] >> os_xshift;					/* inclusive */
+-    clip_miny = zap_redraw_block.r_ysize - (clip[3] >> os_yshift);	/* inclusive */
+-    clip_maxx = clip[2] >> os_xshift;					/* exclusive */
+-    clip_maxy = zap_redraw_block.r_ysize - (clip[1] >> os_yshift);	/* exclusive */
+-
+-    /* Clip target rectangle against the current graphics window */
+-    if (zap_redraw_block.r_minx < clip_minx)
+-    {
+-	zap_redraw_block.r_scrollx = clip_minx - zap_redraw_block.r_minx;
+-	zap_redraw_block.r_minx = clip_minx;
+-    }
+-    else
+-	zap_redraw_block.r_scrollx = 0;
+-    if (zap_redraw_block.r_miny < clip_miny)
+-    {
+-	zap_redraw_block.r_scrolly = clip_miny - zap_redraw_block.r_miny;
+-	zap_redraw_block.r_miny = clip_miny;
+-    }
+-    else
+-	zap_redraw_block.r_scrolly = 0;
+-    if (zap_redraw_block.r_maxx > clip_maxx)
+-	zap_redraw_block.r_maxx = clip_maxx;
+-    if (zap_redraw_block.r_maxy > clip_maxy)
+-	zap_redraw_block.r_maxy = clip_maxy;
+-
+-    /* Fill in the character data structure */
+-    if (length > (sizeof(redraw_data) - 2 * 4 - 2))
+-	length = sizeof(redraw_data) - 2 * 4 - 2;
+-    ((int*) redraw_data)[0] = 2 * 4;
+-    ((int*) redraw_data)[1] = 0;
+-    strncpy(redraw_data + 2 * 4, string, length);
+-    redraw_data[2 * 4 + length + 0] = '\0';
+-    redraw_data[2 * 4 + length + 1] = '\x2';
+-    zap_redraw_block.r_data = (int) redraw_data;
+-
+-    /* Perform the draw */
+-    swi(ZapRedraw_RedrawArea, 0, &zap_redraw_block);
+-
+-    return flags;
+-}
+-
+-/*
+- * Okay that was it from me, back to Thomas ...
+- */
+-
+-/*
+- * Parse the GUI related command-line arguments.  Any arguments used are
+- * deleted from argv, and *argc is decremented accordingly.  This is called
+- * when vim is started, whether or not the GUI has been started.
+- */
+-    void
+-gui_mch_prepare(int *argc, char **argv)
+-{
+-    int	    arg = 1;
+-
+-    while (arg < *argc - 1)
+-    {
+-	if (strcmp(argv[arg], "--rows") == 0 || strcmp(argv[arg], "--columns") == 0)
+-	{
+-	    int	    value;
+-
+-	    value = atoi(argv[arg + 1]);
+-
+-	    if (argv[arg][2] == 'r')
+-		default_rows = value;
+-	    else
+-		default_columns = value;
+-
+-	    /* Delete argument from argv[]. (hope this is read/write!) */
+-
+-	    *argc -= 2;
+-	    if (*argc > arg)
+-	    mch_memmove(&argv[arg], &argv[arg + 2], (*argc - arg)
+-		    * sizeof(char *));
+-	}
+-	else
+-	    arg++;
+-    }
+-}
+-
+-/* Fatal error on initialisation - report it and die. */
+-    void
+-ro_die(error)
+-    char_u *error;	/* RISC OS error block */
+-{
+-    swi(Wimp_ReportError, error, 5, "GVim");
+-    exit(EXIT_FAILURE);
+-}
+-
+-/* Find the sizes of the window tools:
+- *
+- * Create a test window.
+- * Find inner and outer sizes.
+- * Find the difference.
+- * Delete window.
+- *
+- * While we're here, find the eigen values too.
+- */
+-    void
+-ro_measure_tools()
+-{
+-    int block[10];
+-    int vdu[] = { 4, 5, -1};
+-    int test_window[] =
+-	{
+-	    -100, -100,		/* Visible area : min X,Y */
+-	    -50, -50,		/*		  max X,Y */
+-	    0,   0,		/* Scroll offsets */
+-	    -1,			/* Window in front */
+-	    0xd0800150,		/* Window flags */
+-	    0xff070207,		/* Colours */
+-	    0x000c0103,		/* More colours */
+-	    0, -0x4000,		/* Workarea extent */
+-	    0x4000, 0,		/* max X,Y */
+-	    0x00000000,		/* No title */
+-	    0 << 12,		/* No workarea button type */
+-	    1,			/* Wimp sprite area */
+-	    0x00010001,		/* Minimum width, height */
+-	    0, 0, 0,		/* Title data (none) */
+-	    0			/* No icons */
+-	};
+-    int inner_max_x, inner_min_y;
+-
+-    swi(Wimp_CreateWindow, 0, test_window);
+-
+-    block[0] = r0;
+-    /* Open the window (and read state).
+-     * GetWindowOutline needs it too if the wimp isn't nested.
+-     */
+-    swi(Wimp_OpenWindow, 0, block);
+-    inner_max_x = block[3];
+-    inner_min_y = block[2];
+-
+-    swi(Wimp_GetWindowOutline, 0, block);
+-
+-    gui.scrollbar_width = block[3] - inner_max_x;
+-    gui.scrollbar_height = inner_min_y - block[2];
+-
+-    swi(Wimp_DeleteWindow, 0, block);
+-
+-    /* Read the size of one pixel. */
+-    swi(OS_ReadVduVariables, vdu, vdu);
+-    x_eigen_factor = vdu[0];
+-    y_eigen_factor = vdu[1];
+-}
+-
+-/* Load a template from the current templates file.
+- * Create the window and return its handle.
+- */
+-    int
+-ro_load_template(str_name, title, title_size)
+-    char_u  *str_name;      /* Identifier of window in file (max 12 chars)   */
+-    char_u  **title;	    /* If not NULL then return pointer to title here */
+-    int     *title_size;    /* If not NULL then return the title length here */
+-{
+-    int     *window;
+-    char    *data;
+-    int     name[4];
+-
+-    strcpy( (char *) name, str_name);
+-
+-    /* Find how big we must make the buffers */
+-
+-    if (xswi(Wimp_LoadTemplate, 0, 0, 0, 0, -1, name, 0) & v_flag)
+-	ro_die( (char *) r0);
+-
+-    window = malloc(r1);	/* Don't print text messages from alloc() */
+-    data = malloc(r2);
+-    if (window == NULL || data == NULL)
+-	ro_die("\0\0\0\0Out of memory - Can't load templates");
+-
+-    /* Load the template into the buffers */
+-
+-    swi(Wimp_LoadTemplate, 0,
+-				window,		/* Temp block */
+-				data,		/* Icon data */
+-				data + r2 + 1,	/* End of icon data */
+-				-1,		/* No fonts */
+-				name, 0);	/* First match */
+-    if (r6 == 0)
+-	ro_die("\0\0\0\0Can't find window in Templates file");
+-
+-    /* Create the window */
+-
+-    if (xswi(Wimp_CreateWindow, 0, window) & v_flag)
+-	ro_die( (char *) r0);
+-
+-    if (title)
+-	*title = (char_u *) window[18];
+-    if (title_size)
+-	*title_size = window[20];
+-
+-    free(window);	/* Free temp block */
+-    return r0;		/* Return the window handle */
+-}
+-
+-/*
+- * Check if the GUI can be started.  Called before gvimrc is sourced.
+- * Return OK or FAIL.
+- */
+-    int
+-gui_mch_init_check()
+-{
+-    return OK;		/* TODO: GUI can always be started? */
+-}
+-
+-/*
+- * Initialise the RISC OS GUI.
+- * Create all the windows.
+- * Returns OK for success, FAIL when the GUI can't be started.
+- */
+-    int
+-gui_mch_init()
+-{
+-    int     messages[] = {
+-	    1, 2, 3, 4,	/* DataSave, DataSaveAck, DataLoad, DataLoadAck */
+-	    8,		/* PreQuit */
+-	    0xf,	/* ClaimEntity (for clipboard) */
+-	    0x10,	/* DataRequest (for clipboard) */
+-	    0x400c1,	/* Mode change */
+-	    0x400c3,	/* TaskCloseDown */
+-	    0x400c9,	/* MenusDeleted */
+-	    0x808c1,	/* TW_Output */
+-	    0x808c2,    /* TW_Ego */
+-	    0x808c3,	/* TW_Morio */
+-	    0x808c4,	/* TW_Morite */
+-	    0};		/* End-of-list. */
+-
+-
+-    /* There may have been some errors reported in the
+-     * command window before we get here. Wait if so.
+-     */
+-    swi(Wimp_ReadSysInfo, 3);
+-    if (r0 == 0)
+-	swi(Wimp_CommandWindow, 0);	/* Window opened - close with prompt */
+-
+-    if (xswi(Wimp_Initialise, 310, 0x4b534154, "GVim", messages) & v_flag)
+-	return FAIL;
+-    nested_wimp = r0 >= 397;
+-    task_handle = r1;
+-
+-    /* Load the templates. */
+-
+-    if (xswi(Wimp_OpenTemplate, 0, "Vim:Templates") & v_flag)
+-	ro_die( (char *) r0);
+-
+-    gui.window_handle = ro_load_template("editor",
+-	    &gui.window_title,
+-	    &gui.window_title_size);
+-
+-    save_window = ro_load_template("save", NULL, NULL);
+-
+-    swi(Wimp_CloseTemplate);
+-
+-    /* Set default foreground and background colours. */
+-
+-    gui.norm_pixel = gui.def_norm_pixel;
+-    gui.back_pixel = gui.def_back_pixel;
+-
+-    /* Get the colours from the "Normal" and "Menu" group (set in syntax.c or
+-     * in a vimrc file) */
+-
+-    set_normal_colors();
+-
+-    /*
+-     * Check that none of the colors are the same as the background color
+-     */
+-
+-    gui_check_colors();
+-
+-    /* Get the colours for the highlight groups (gui_check_colors() might have
+-     * changed them) */
+-
+-    highlight_gui_started();		/* re-init colours and fonts */
+-
+-    /* Set geometry based on values read on initialisation. */
+-
+-    gui.num_cols = Columns = default_columns;
+-    gui.num_rows = Rows    = default_rows;
+-
+-    /* Get some information about our environment. */
+-
+-    ro_measure_tools();
+-
+-    return OK;
+-}
+-
+-/*
+- * Called when the foreground or background colour has been changed.
+- */
+-    void
+-gui_mch_new_colors()
+-{
+-}
+-
+-/*
+- * Open the GUI window which was created by a call to gui_mch_init().
+- */
+-    int
+-gui_mch_open(void)
+-{
+-    int block[10];
+-
+-    block[0] = gui.window_handle;
+-    swi(Wimp_GetWindowState, 0, block);
+-    block[7] = -1;		    /* Open at the top of the stack */
+-    swi(Wimp_OpenWindow, 0, block);
+-
+-    /* Give the new window the input focus */
+-    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+-    if (gui_win_x != -1 && gui_win_y != -1)
+-	gui_mch_set_winpos(gui_win_x, gui_win_y);
+-
+-    return OK;
+-}
+-
+-    void
+-gui_mch_exit(int rc)
+-{
+-    int	    block[64];
+-
+-    /* Close window. Stops us from getting troublesome events
+-     * if we take a while to die.
+-     */
+-    block[0] = gui.window_handle;
+-    swi(Wimp_CloseWindow, 0, block);
+-
+-    if (child_handle)
+-    {
+-	/* We still have a sub-task running - kill it */
+-	block[0] = 20;
+-	block[3] = 0;
+-	block[4] = 0;	    /* Quit */
+-	if ((xswi(Wimp_SendMessage, 17, block, child_handle) & v_flag) == 0)
+-	{
+-	    /* Idle until child dies. */
+-	    while (child_handle)
+-	    {
+-		process_event(wimp_poll(1, block), block);
+-	    }
+-	}
+-    }
+-
+-    exit(rc);
+-}
+-
+-/*
+- * Get the position of the top left corner of the window.
+- */
+-    int
+-gui_mch_get_winpos(int *x, int *y)
+-{
+-    /* TODO */
+-    return FAIL;
+-}
+-
+-/*
+- * Set the position of the top left corner of the window to the given
+- * coordinates.
+- */
+-    void
+-gui_mch_set_winpos(int x, int y)
+-{
+-    /* TODO */
+-}
+-
+-    void
+-gui_mch_set_shellsize(width, height, min_width, min_height, base_width, base_height, direction)
+-    int width;		/* In OS units */
+-    int height;
+-    int min_width;	/* Smallest permissible window size (ignored) */
+-    int min_height;
+-    int base_width;	/* Space for scroll bars, etc */
+-    int base_height;
+-    int direction;
+-{
+-    int s_width, s_height;
+-    int block[] = {
+-	gui.window_handle,
+-	0,
+-	-height + 1,
+-	width,
+-	1};
+-
+-    gui_mch_get_screen_dimensions(&s_width, &s_height);
+-    s_width -= base_width;
+-    s_height -= base_height;		    /* Underestimate - ignores titlebar */
+-
+-    swi(Wimp_GetWindowState, 0, block);
+-    block[3]  = block[1] + width;
+-    block[2]  = block[4] - height;
+-    if (block[3] > s_width)
+-    {
+-	block[3] = s_width;
+-	block[1] = block[3] - width;
+-    }
+-    if (block[2] < gui.scrollbar_height)
+-    {
+-	block[2] = gui.scrollbar_height;
+-	block[4] = block[2] + height;
+-    }
+-    swi(Wimp_OpenWindow, 0, block);
+-    swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+-}
+-
+-    void
+-gui_mch_get_screen_dimensions(int *screen_w, int *screen_h)
+-{
+-    int block[] = {4, 5, 11, 12, -1};
+-
+-    swi(OS_ReadVduVariables, block, block);
+-    *screen_w = (block[2] + 1) << block[0];
+-    *screen_h = (block[3] + 1) << block[1];
+-}
+-
+-/* Take a font name with options and return a font handle, or
+- * zero for failure.
+- * Replace extension with 'Bold' or 'Italic' depending on modifiers.
+- */
+-    int
+-ro_get_font(fullname, weight)
+-    char_u	*fullname;
+-    int		weight;		/* Initial weights:
+-				 * BIT	    MEANING
+-				 * 0	    bold
+-				 * 1	    italic
+-				 */
+-{
+-    char_u	*arg;
+-    char_u	font[41];
+-    int		width = -1;
+-    int		height = -1;
+-    int		name_len;
+-    int		i;
+-    char_u	c;
+-
+-    for (i = 0; i < 39;)
+-    {
+-	c = fullname[i];
+-	if (c == ':' || c == NUL || c == '.')
+-	    break;
+-	font[i++] = c;
+-    }
+-
+-    /* find the first modifier, NULL if none */
+-    arg = strchr(fullname + i, ':');
+-
+-    while (arg)
+-    {
+-	switch (*++arg)
+-	{
+-	    case 'h':
+-		height = strtol(arg + 1, (char **) &arg, 10);
+-		break;
+-	    case 'w':
+-		width = strtol(arg + 1, (char **) &arg, 10);
+-		break;
+-	    case 'b':
+-		weight |= 1;
+-		break;
+-	    case 'i':
+-		weight |= 2;
+-		break;
+-	    default:
+-		return 0;
+-	}
+-	arg = strchr(arg, ':');
+-    }
+-
+-    if ((weight & 1) && i < 35)
+-    {
+-	/* Bold goes instead of given suffix */
+-	strncpy(font + i, ".Bold", 5);
+-	i += 5;
+-    }
+-    else
+-    {
+-	/* Copy rest of name unless we are using Bold */
+-	while (i < 39)
+-	{
+-	    c = fullname[i];
+-	    if (c == ':' || c == NUL)
+-		break;
+-	    font[i++] = c;
+-	}
+-    }
+-    if ((weight & 2) && i < 32)
+-    {
+-	strncpy(font + i, ".Oblique", 8);
+-	i += 8;
+-    }
+-
+-    font[i] = 0;
+-
+-    if (height < 1 && width < 1)
+-	height = width = 10;	/* Default to 10pt */
+-    else if (height < 1)
+-	height = width;
+-    else if (width < 1)
+-	width = height;
+-
+-    if (xswi(Font_FindFont, 0, font, width << 4, height << 4, 0, 0) & v_flag)
+-	return NOFONT;		/* Can't find font */
+-
+-    return r0;
+-}
+-
+-/* Load a file into allocated memory and check it is valid.
+- * Return a pointer to the allocated block on success.
+- */
+-    char    *
+-zap_load_file(name, style)
+-    char_u  *name;	    /* Name of directory containing styles */
+-    char_u  *style;	    /* Name of style within directory */
+-{
+-    char_u  fname[256];
+-    char_u  *file;
+-
+-    if (strlen(name) + strlen(style) > 254)
+-	return NULL;	    /* Names too long */
+-
+-    sprintf(fname, "%s.%s", name, style);
+-
+-    /* Load the named font in 1bpp format. */
+-    if (xswi(OS_File, 13, fname, 0, 0, "VimFonts:") & v_flag || r0 != 1)
+-	return NULL;	    /* Error reading file info, or not a file */
+-
+-    /* Allocate enough memory to load the whole file */
+-    file = (char *) alloc(r4);
+-    if (!file)
+-	return NULL;	/* Out of memory */
+-
+-    if (xswi(OS_File, 12, fname, file, 0, "VimFonts:") & v_flag)
+-	return NULL;	/* Unable to load file */
+-
+-    if (strncmp(file, "ZapFont\015", 8) == 0)
+-	return file;	/* Loaded OK! */
+-
+-    vim_free(file);
+-    return NULL;	/* Not a valid font file */
+-}
+-
+-/* Load and convert the named font.
+- * If name is NULL or a null string then convert the system font.
+- * Return OK on success; FAIL and we revert to using the VDU drivers.
+- *
+- * 'name' is the name of a directory.
+- * Tries to load 'name.0', 'name.B', 'name.I' and 'name.IB'.
+- */
+-    int
+-zap_load_font(name)
+-    char_u  *name;
+-{
+-    int	    i;
+-
+-    /* Free the existing font files, if any */
+-    for (i = 0; i < ZAP_STYLES; i++)
+-    {
+-	vim_free(zap_file[i]);
+-	zap_file[i] = NULL;
+-    }
+-
+-    if (name && *name == '!')
+-    {
+-	name++;
+-	double_height = TRUE;
+-    }
+-    else
+-	double_height = FALSE;
+-
+-    if (name && *name)
+-    {
+-	zap_file[ZAP_NORMAL]	= zap_load_file(name, "0");
+-	if (!zap_file[ZAP_NORMAL])
+-	    return FAIL;	/* Can't load the 'normal' style - error */
+-
+-	zap_file[ZAP_BOLD]	= zap_load_file(name, "B");
+-	zap_file[ZAP_ITALIC]	= zap_load_file(name, "I");
+-	zap_file[ZAP_BITALIC]	= zap_load_file(name, "IB");
+-    }
+-    else
+-    {
+-	int	*header;
+-	char	workarea[16];
+-	char	*old_wa;
+-
+-	/* Allocate memory for system font (8 x 8 x 256 bits, plus header) */
+-	header = (int *) alloc(0x20 + 8 * 256);
+-	if (header == NULL)
+-	    return FAIL;
+-	zap_file[ZAP_NORMAL] = (char *) header;
+-
+-	/* Store details about the system font */
+-	header[2] = 8;	    /* Width */
+-	header[3] = 8;	    /* Height */
+-	header[4] = 0;	    /* First char */
+-	header[5] = 255;    /* Last char */
+-	header[6] = header[7] = 0;  /* Reserved */
+-
+-	/* Get system font bitmap */
+-	old_wa = zap_redraw_block.r_workarea;
+-	zap_redraw_block.r_workarea = workarea;
+-	swi(ZapRedraw_ReadSystemChars, zap_file[ZAP_NORMAL] + 0x20, &zap_redraw_block);
+-	zap_redraw_block.r_workarea = old_wa;
+-    }
+-
+-    return ro_zap_redraw_initialise();
+-}
+-
+-/*
+- * Initialise vim to use the font with the given name.
+- * Return FAIL if the font could not be loaded, OK otherwise.
+- */
+-    int
+-gui_mch_init_font(char_u *font_name, int fontset)
+-{
+-    int	    new_handle	= 0;	    /* Use the system font by default */
+-
+-    if (font_name[0] == '!')
+-    {
+-	/* Select a ZapRedraw font */
+-	if (zap_load_font(font_name + 1))
+-	    zap_redraw = TRUE;
+-	else
+-	{
+-	    EMSG2(_("E610: Can't load Zap font '%s'"), font_name);
+-	    font_name = "System";   /* Error - use system font */
+-	    zap_redraw = FALSE;
+-	}
+-    }
+-    else
+-    {
+-	zap_redraw = FALSE;
+-
+-	if (font_name)
+-	{
+-	    /* Extract any extra details about the font */
+-	    new_handle = ro_get_font(font_name, 0);
+-	    if (!new_handle)
+-		return FAIL;
+-	}
+-	else
+-	    font_name = "System";
+-    }
+-
+-    /* Free the previous font, if any */
+-    gui_mch_free_font(gui.norm_font);
+-    gui.norm_font = new_handle;
+-    gui.char_ascent = 0;
+-
+-    if (new_handle)
+-    {
+-	/* Read details about the chosen font */
+-	swi(Font_ReadInfo, new_handle);
+-
+-	gui.char_width	= r3 - r1;
+-	gui.char_height = r4 - r2;
+-
+-	font_x_offset = -r1;	/* Where to position each char in its box */
+-	font_y_offset = -r4;
+-
+-	/* Try to load other fonts for bold, italic, and bold-italic */
+-	gui_mch_free_font(gui.bold_font);
+-	gui.bold_font = ro_get_font(font_name, 1);
+-	gui_mch_free_font(gui.ital_font);
+-	gui.ital_font = ro_get_font(font_name, 2);
+-	gui_mch_free_font(gui.boldital_font);
+-	gui.boldital_font = ro_get_font(font_name, 3);
+-    }
+-    else
+-    {
+-	/* Use the system font or ZapRedraw. */
+-	if (zap_redraw)
+-	{
+-	    gui.char_width	= zap_redraw_block.r_charw << zap_redraw_block.r_magx;
+-	    gui.char_height	= zap_redraw_block.r_charh << zap_redraw_block.r_magy;
+-	    if (double_height)
+-		gui.char_height <<= 1;
+-	}
+-	else
+-	{
+-	    gui.char_width	= 16;
+-	    gui.char_height	= 32;
+-	}
+-
+-	gui_mch_free_font(gui.bold_font);
+-	gui.bold_font = 0;
+-	gui_mch_free_font(gui.ital_font);
+-	gui.ital_font = 0;
+-	gui_mch_free_font(gui.boldital_font);
+-	gui.boldital_font = 0;
+-    }
+-    hl_set_font_name(font_name);
+-
+-    must_redraw = CLEAR;
+-    return OK;
+-}
+-
+-/*
+- * Adjust gui.char_height (after 'linespace' was changed).
+- */
+-    int
+-gui_mch_adjust_charheight()
+-{
+-    return FAIL;
+-}
+-
+-/*
+- * Get a font structure for highlighting.
+- */
+-    GuiFont
+-gui_mch_get_font(name, giveErrorIfMissing)
+-    char_u	*name;
+-    int		giveErrorIfMissing;
+-{
+-    int		handle;
+-
+-    if (!name)
+-	return NOFONT;		/* System font if no name */
+-
+-    handle = ro_get_font(name, 0);
+-    if (!handle)
+-    {
+-	if (giveErrorIfMissing)
+-	    EMSG2(_("E611: Can't use font %s"), name);
+-	return NOFONT;
+-    }
+-
+-    return handle;
+-}
+-
+-#if defined(FEAT_EVAL) || defined(PROTO)
+-/*
+- * Return the name of font "font" in allocated memory.
+- * Don't know how to get the actual name, thus use the provided name.
+- */
+-    char_u *
+-gui_mch_get_fontname(font, name)
+-    GuiFont font;
+-    char_u  *name;
+-{
+-    if (name == NULL)
+-	return NULL;
+-    return vim_strsave(name);
+-}
+-#endif
+-
+-/*
+- * Set the current text font.
+- */
+-    void
+-gui_mch_set_font(GuiFont font)
+-{
+-    ro_current_font = font;
+-
+-    if (font)
+-    {
+-	/* Not the system font or ZapRedraw font - select it */
+-	swi(Font_SetFont, font);
+-    }
+-}
+-
+-/*
+- * If a font is not going to be used, free its structure.
+- */
+-    void
+-gui_mch_free_font(GuiFont font)
+-{
+-    if (font)
+-	swi(Font_LoseFont, font);
+-}
+-
+-/*
+- * Return the Pixel value (colour) for the given colour name.
+- * Return INVALCOLOR for error.
+- * NB: I've changed Green for now, since it looked really sick
+- */
+-    guicolor_T
+-gui_mch_get_color(char_u *name)
+-{
+-    int		i;
+-    struct colour
+-    {
+-	char_u		*name;
+-	guicolor_T	value;
+-    } colours[] =
+-    {
+-	{ "Red",		grgb(255,	0,	0)	},
+-	{ "LightRed",		grgb(255,	0,	0)	},
+-	{ "DarkRed",		grgb(139,	0,	0)	},
+-
+-	{ "Green",		grgb(50,	200,	50)	},
+-	{ "LightGreen",		grgb(144,	238,	144)	},
+-	{ "DarkGreen",		grgb(0,		100,	0)	},
+-	{ "SeaGreen",		grgb(46,	139,	87)	},
+-
+-	{ "Blue",		grgb(0,		0,	255)	},
+-	{ "LightBlue",		grgb(173,	216,	230)	},
+-	{ "DarkBlue",		grgb(0,		0,	139)	},
+-	{ "SlateBlue",		grgb(160,	90,	205)	},
+-
+-	{ "Cyan",		grgb(0,		255,	255)	},
+-	{ "LightCyan",		grgb(224,	255,	255)	},
+-	{ "DarkCyan",		grgb(0,		139,	139)	},
+-
+-	{ "Magenta",		grgb(255,	0,	255)	},
+-	{ "LightMagenta",	grgb(255,	224,	255)	},
+-	{ "DarkMagenta",	grgb(139,	0,	139)	},
+-
+-	{ "Yellow",		grgb(255,	255,	0)	},
+-	{ "LightYellow",	grgb(255,	255,	224)	},
+-	{ "DarkYellow",		grgb(139,	139,	0)	},
+-	{ "Brown",		grgb(165,	42,	42)	},
+-
+-	{ "Gray",		grgb(190,	190,	190)	},
+-	{ "Grey",		grgb(190,	190,	190)	},
+-	{ "LightGray",		grgb(211,	211,	211)	},
+-	{ "LightGrey",		grgb(211,	211,	211)	},
+-	{ "DarkGray",		grgb(169,	169,	169)	},
+-	{ "DarkGrey",		grgb(169,	169,	169)	},
+-	{ "Gray10",		grgb(26,	26,	26)	},
+-	{ "Grey10",		grgb(26,	26,	26)	},
+-	{ "Gray20",		grgb(51,	51,	51)	},
+-	{ "Grey20",		grgb(51,	51,	51)	},
+-	{ "Gray30",		grgb(77,	77,	77)	},
+-	{ "Grey30",		grgb(77,	77,	77)	},
+-	{ "Gray40",		grgb(102,	102,	102)	},
+-	{ "Grey40",		grgb(102,	102,	102)	},
+-	{ "Gray50",		grgb(127,	127,	127)	},
+-	{ "Grey50",		grgb(127,	127,	127)	},
+-	{ "Gray60",		grgb(153,	153,	153)	},
+-	{ "Grey60",		grgb(153,	153,	153)	},
+-	{ "Gray70",		grgb(179,	179,	179)	},
+-	{ "Grey70",		grgb(179,	179,	179)	},
+-	{ "Gray80",		grgb(204,	204,	204)	},
+-	{ "Grey80",		grgb(204,	204,	204)	},
+-	{ "Gray90",		grgb(229,	229,	229)	},
+-	{ "Grey90",		grgb(229,	229,	229)	},
+-
+-	{ "Black",		grgb(0,		0,	0)	},
+-	{ "White",		grgb(255,	255,	255)	},
+-
+-	{ "Orange",		grgb(255,	165,	0)	},
+-	{ "Purple",		grgb(160,	32,	240)	},
+-	{ "Violet",		grgb(238,	130,	238)	},
+-	{NULL, 0}
+-    };
+-
+-    if (name[0] == '#')
+-    {
+-	char	    *end;
+-	int	    c;
+-
+-	c = strtol(name + 1, &end, 16);
+-	return (guicolor_T) ((c >> 16) & 0xff) | (c & 0xff00) | ((c & 0xff) << 16);
+-    }
+-
+-    for (i = 0; colours[i].name != NULL; i++)
+-    {
+-	if (STRICMP(name, colours[i].name) == 0)
+-	    return colours[i].value;
+-    }
+-    if (strnicmp(name, "grey", 4) == 0 || strnicmp(name, "gray", 4) == 0)
+-    {
+-	int level = (255 * atoi(name + 4)) / 100;
+-	return (guicolor_T) grgb(level, level, level);
+-    }
+-    return INVALCOLOR;
+-}
+-
+-/*
+- * Set the current text colours.
+- * If we are using fonts then set the antialiasing colours too.
+- */
+-    void
+-gui_mch_set_colors(guicolor_T fg, guicolor_T bg)
+-{
+-    zap_redraw_colours[0] = bg << 8;	/* JK230798, register new background colour */
+-    zap_redraw_colours[1] = fg << 8;	/* JK230798, register new foreground colour */
+-    zap_redraw_update_colours = TRUE;	/* JK230798, need update of colour masks */
+-
+-    swi(ColourTrans_ReturnGCOL, fg << 8);
+-    gui.fg_colour = r0;
+-    swi(ColourTrans_ReturnGCOL, bg << 8);
+-    gui.bg_colour = r0;
+-
+-    if (ro_current_font)
+-	swi(ColourTrans_SetFontColours, 0, bg << 8, fg << 8, 14);
+-}
+-
+-    void
+-ro_draw_string(x, y, s, len, flags, clip)
+-    int	    x;		/* Top-left coord to plot at (x incl, y excl) */
+-    int	    y;		/* (screen coords) */
+-    char_u  *s;		/* String to plot */
+-    int	    len;	/* Length of string */
+-    int	    flags;	/* DRAW_TRANSP, DRAW_BOLD, DRAW_UNDERL */
+-    int*    clip;	/* JK230798, added clip window */
+-{
+-    if (ro_current_font)
+-    {
+-	int	fx;
+-	int	flen = len;	/* Preserve for underline */
+-
+-	/* Use the Font manager to paint the string.
+-	 * Must do one char at a time to get monospacing.
+-	 */
+-
+-	if (flags & DRAW_ITALIC && !gui.ital_font)
+-	    flags |= DRAW_UNDERL;	/* No italic - underline instead */
+-
+-	if ((flags & DRAW_TRANSP) == 0)
+-	{
+-	    swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+-	    swi(OS_Plot, 4, x, y - gui.char_height);
+-	    swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+-	}
+-
+-	fx = x + font_x_offset;
+-	while (flen--)
+-	{
+-	    swi(Font_Paint, 0, s++, 0x90, fx, y + font_y_offset, 0, 0, 1);
+-	    fx += gui.char_width;
+-	}
+-    }
+-    else
+-    {
+-	if (zap_redraw)
+-	{
+-	    /* Using fast Zap redraw. */
+-	    flags = ro_zap_redraw_draw_string(x, y, s, len, flags, clip);
+-	}
+-	else
+-	{
+-	    /* Using the system font */
+-	    if (flags & DRAW_ITALIC)
+-		flags |= DRAW_UNDERL;
+-
+-	    if ((flags & DRAW_TRANSP) == 0)
+-	    {
+-		swi(ColourTrans_SetColour, gui.bg_colour, 0, 0, 0, 0);
+-		swi(OS_Plot, 4, x, y - gui.char_height);
+-		swi(OS_Plot, 96 + 5, x + len * gui.char_width - 1, y - 1);
+-	    }
+-	    swi(OS_Plot, 4,			/* Move the drawing cursor */
+-		    x,
+-		    y - 1);
+-	    swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+-	    swi(OS_WriteN, s, len);
+-
+-	    if (flags & DRAW_BOLD)
+-	    {
+-		swi(OS_Plot, 4, x + (1 << x_eigen_factor), y - 1);
+-		swi(OS_WriteN, s, len);
+-	    }
+-	}
+-    }
+-
+-    if (flags & DRAW_UNDERL)
+-    {
+-	if (ro_current_font || zap_redraw)
+-	    swi(ColourTrans_SetColour, gui.fg_colour, 0, 0, 0, 0);
+-	/* Underlined is the same with all plotting methods */
+-	swi(OS_Plot, 4, x, y - gui.char_height);
+-	swi(OS_Plot, 1, gui.char_width * len, 0);
+-    }
+-}
+-
+-    void
+-gui_mch_draw_string(int row, int col, char_u *s, int len, int flags)
+-{
+-    int x, y;		/* Workarea x,y */
+-    x = col * gui.char_width;
+-    y = -row * gui.char_height;
+-
+-    if (redraw_block)
+-    {
+-	ro_draw_string(x + redraw_block[1], y + redraw_block[4],
+-			s, len, flags, &redraw_block[7]);	/* JK230798, added clip window */
+-    }
+-    else
+-    {
+-	int block[44];
+-	block[0] = gui.window_handle;
+-	block[1] = x;
+-	block[2] = y - gui.char_height;
+-	block[3] = (col + len) * gui.char_width;
+-	block[4] = y;
+-	swi(Wimp_UpdateWindow, 0, block);
+-	while (r0)
+-	{
+-	    ro_draw_string(x + block[1], y + block[4],
+-			s, len, flags, &block[7]);	/* JK230798, added clip window */
+-	    swi(Wimp_GetRectangle, 0, block);
+-	}
+-    }
+-}
+-
+-/*
+- * Return OK if the key with the termcap name "name" is supported.
+- */
+-    int
+-gui_mch_haskey(char_u *name)
+-{
+-    return FAIL;
+-}
+-
+-    void
+-gui_mch_beep(void)
+-{
+-    swi(OS_WriteI + 7);
+-}
+-
+-/*
+- * Visual bell.
+- */
+-    void
+-gui_mch_flash(int msec)
+-{
+-    /* TODO */
+-}
+-
+-
+-/*
+- * Plot a solid rectangle using the given plot action and colour.
+- * Coordinates are inclusive and window-relative.
+- */
+-    void
+-plot_rectangle(plot, colour, minx, miny, maxx, maxy)
+-    int plot;		/* OS_Plot action */
+-    int colour;
+-    int minx;
+-    int miny;
+-    int maxx;
+-    int maxy;
+-{
+-    if (redraw_block)
+-    {
+-	swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+-	swi(OS_Plot, 4, minx + redraw_block[1], miny + redraw_block[4]);
+-	swi(OS_Plot, plot, maxx + redraw_block[1], maxy + redraw_block[4]);
+-    }
+-    else
+-    {
+-	int block[44];
+-	block[0] = gui.window_handle;
+-	block[1] = minx;
+-	block[2] = miny;
+-	block[3] = maxx + 1;
+-	block[4] = maxy + 1;
+-	swi(Wimp_UpdateWindow, 0, block);
+-	while (r0)
+-	{
+-	    swi(ColourTrans_SetColour, colour, 0, 0, 0, 0);
+-	    swi(OS_Plot, 4, minx + block[1], miny + block[4]);
+-	    swi(OS_Plot, plot, maxx + block[1], maxy + block[4]);
+-	    swi(Wimp_GetRectangle, 0, block);
+-	}
+-    }
+-}
+-
+-/*
+- * Invert a rectangle from row r, column c, for nr rows and nc columns.
+- */
+-    void
+-gui_mch_invert_rectangle(int r, int c, int nr, int nc)
+-{
+-    plot_rectangle(96 + 6, 0, FILL_X(c), -FILL_Y(r + nr), FILL_X(c + nc), -FILL_Y(r));
+-}
+-
+-/*
+- * Iconify the GUI window.
+- */
+-    void
+-gui_mch_iconify(void)
+-{
+-}
+-
+-#if defined(FEAT_EVAL) || defined(PROTO)
+-/*
+- * Bring the Vim window to the foreground.
+- */
+-    void
+-gui_mch_set_foreground()
+-{
+-    /* TODO */
+-}
+-#endif
+-
+-/* Draw a hollow rectangle relative to the current
+- * graphics cursor position, with the given width
+- * and height. Start position is top-left.
+- */
+-    void
+-draw_hollow(w, h)
+-    int	w;
+-    int	h;
+-{
+-    swi(OS_Plot, 1, w - 1, 0);
+-    swi(OS_Plot, 1, 0, 1 - h);
+-    swi(OS_Plot, 1, 1 - w, 0);
+-    swi(OS_Plot, 1, 0, h - 1);
+-}
+-
+-/*
+- * Draw a cursor without focus.
+- */
+-    void
+-gui_mch_draw_hollow_cursor(guicolor_T colour)
+-{
+-    int x = FILL_X(gui.cursor_col);	/* Window relative, top-left */
+-    int y = -FILL_Y(gui.cursor_row);
+-    if (redraw_block == NULL)
+-    {
+-	int block[11];
+-
+-	block[0] = gui.window_handle;
+-	block[1] = x;
+-	block[2] = y - gui.char_height;
+-	block[3] = x + gui.char_width;
+-	block[4] = y;
+-	swi(Wimp_UpdateWindow, 0, block);
+-	while (r0)
+-	{
+-	    swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+-
+-	    swi(OS_Plot, 4, x + block[1], y + block[4] - 1);
+-	    draw_hollow(gui.char_width, gui.char_height);
+-
+-	    swi(Wimp_GetRectangle, 0, block);
+-	}
+-    }
+-    else
+-    {
+-	swi(ColourTrans_SetGCOL, colour << 8, 0, 0, 0, 0);
+-
+-	swi(OS_Plot, 4, x + redraw_block[1], y + redraw_block[4] - 1);
+-	draw_hollow(gui.char_width, gui.char_height);
+-    }
+-}
+-
+-/*
+- * Draw part of a cursor, "w" pixels wide, and "h" pixels high, using
+- * color "color".
+- */
+-    void
+-gui_mch_draw_part_cursor(w, h, colour)
+-    int w;
+-    int h;
+-    guicolor_T colour;
+-{
+-    int x = FILL_X(gui.cursor_col);
+-    int y = -FILL_Y(gui.cursor_row);
+-    swi(ColourTrans_ReturnGCOL, colour << 8);
+-    plot_rectangle(96 + 5, r0, x, y - h, x + w - 1, y - 1);
+-}
+-
+-/*
+- * Catch up with any queued events.  This may put keyboard input into the
+- * input buffer, call resize call-backs, trigger timers etc.
+- * If there is nothing in the event queue(& no timers pending), then we return
+- * immediately (well, after a Wimp_Poll).
+- */
+-    void
+-gui_mch_update(void)
+-{
+-    int block[64];
+-    int reason;
+-
+-    swi(OS_ReadMonotonicTime);
+-    if ((r0 - time_of_last_poll) < 50)
+-	return;			    /* Don't return too often */
+-
+-    reason = wimp_poll(0, block);
+-    if (reason)
+-	process_event(reason, block);
+-    ro_return_early = FALSE;		/* We're returning anyway. */
+-}
+-
+-    void
+-redraw_window(block)
+-    int *block;
+-{
+-    int x, y;			/* Vim workarea coords */
+-    int width, height;
+-    int blank_col;
+-
+-    swi(ColourTrans_ReturnGCOL, UNUSED_COLOUR << 8, 0, 0, 1<<7, 0);
+-    blank_col = r0;
+-
+-    swi(Wimp_RedrawWindow, 0, block);
+-    redraw_block = block;
+-    while (r0)
+-    {
+-	x = block[7] - block[1];
+-	y = block[4] - block[10];
+-	width  = block[9]  - block[7];
+-	height = block[10] - block[8];
+-
+-	if (height + y > Rows * gui.char_height)
+-	{
+-	    /* Blank everything off the bottom. */
+-	    plot_rectangle(96 + 5, blank_col,
+-				0, block[8] - block[4],
+-				block[9] - block[1], -FILL_Y(Rows) - 1);
+-	    height = Rows * gui.char_height;
+-	}
+-	if (width + x> Columns * gui.char_width)
+-	{
+-	    /* Blank everything off to the right. */
+-	    plot_rectangle(96 + 5, blank_col,
+-				FILL_X(Columns), block[8] - block[4],
+-				block[9] - block[1], 0);
+-	    width = Columns * gui.char_width;
+-	}
+-	gui_redraw(x , y, width, height);
+-	swi(Wimp_GetRectangle, 0, block);
+-    }
+-    redraw_block = NULL;
+-}
+-
+-/* Check if we have modified data.
+- * If we do then ack the message to stop the shutdown.
+- * Otherwise, ignore the message.
+- */
+-    void
+-ro_prequit(block)
+-    int	    *block;
+-{
+-    if (!ro_ok_to_quit())
+-    {
+-	/* Not OK to quit - stop shutdown */
+-	block[3] = block[2];
+-	swi(Wimp_SendMessage, 19, block, block[1]);
+-    }
+-    /* Do nothing. We may get a Message_Quit later. */
+-}
+-
+-/* If there is unsaved data then ask the user if they mind losing it.
+- * Return TRUE if we can quit without saving, FALSE to halt the
+- * shutdown.
+- */
+-    int
+-ro_ok_to_quit()
+-{
+-    int	    old_confirm = cmdmod.confirm;
+-
+-    cmdmod.confirm = FALSE;	    /* Use our own, single tasking, box */
+-
+-    if (check_changed_any(FALSE))
+-    {
+-	swi(Wimp_ReportError,
+-		"\0\0\0\0Vim contains unsaved data - quit anyway?",
+-		0x17,
+-		"Vim");
+-	cmdmod.confirm = old_confirm;
+-	if (r1 != 1)
+-	    return FALSE;
+-    }
+-    cmdmod.confirm = old_confirm;
+-    return TRUE;
+-}
+-
+-/* Quit without checking for unsaved data. */
+-    void
+-ro_quit()
+-{
+-    exiting = TRUE;
+-    getout(0);
+-
+-    exiting = FALSE;		    /* probably can't get here */
+-    setcursor();		    /* position cursor */
+-    out_flush();
+-}
+-
+-/* Insent the given vim special code into the input buffer */
+-    void
+-ro_press(a, b, modifier)
+-    char a;
+-    char b;
+-    int modifier;	/* %<Ctrl><Shift> 0000 0000 */
+-{
+-    char_u buf[6];
+-    int	    vim_mod;
+-    int	    key;
+-
+-
+-    /* Convert RISC OS modifier to Vim modifier. */
+-    vim_mod = ((modifier & 0x10) ? MOD_MASK_SHIFT : 0)
+-	       | ((modifier & 0x20) ? MOD_MASK_CTRL : 0);
+-    key = simplify_key(TERMCAP2KEY(a, b), &vim_mod);
+-
+-    buf[3] = CSI;
+-    buf[4] = KEY2TERMCAP0(key);
+-    buf[5] = KEY2TERMCAP1(key);
+-    if (vim_mod)
+-    {
+-	buf[0] = CSI;
+-	buf[1] = KS_MODIFIER;
+-	buf[2] = vim_mod;
+-	add_to_input_buf(buf, 6);
+-    }
+-    else
+-	add_to_input_buf(buf + 3, 3);
+-}
+-
+-/* Take a wimp key code and insert the vim equivalent
+- * into vim's input buffer.
+- * CTRL-C also sets got_int.
+- */
+-    void
+-ro_insert_key(code)
+-    char_u *code;		/* Wimp_ProcessKey code (4 bytes) */
+-{
+-    char a = code[0];
+-    char b = code[1];
+-    int base, modifier;
+-
+-    if (a == 3 && ctrl_c_interrupts)
+-	got_int = TRUE;
+-
+-    /* Is it a normal key? */
+-    if (a > 31 && a < 127)
+-    {
+-	add_to_input_buf(code, 1);
+-	return;
+-    }
+-
+-    /* We should pass any unrecognised keys on, but
+-     * for now just pass on F12 combinations.
+-     */
+-    switch (b)
+-    {
+-	case 0:
+-	    /* Home and Delete are the only special cases */
+-	    switch (a)
+-	    {
+-		case 0x1e:
+-		    ro_press('k','h', 0);	/* Home */
+-		    return;
+-		case 0x7f:
+-		    ro_press('k','D', 0);	/* Delete */
+-		    return;
+-		case CSI:
+-		    {
+-			/* Turn CSI into K_CSI.  Untested! */
+-			char_u string[3] = {CSI, KS_EXTRA, KE_CSI};
+-
+-			add_to_input_buf(string, 3);
+-			return;
+-		    }
+-		default:
+-		    add_to_input_buf(code, 1);
+-		    return;
+-	    }
+-	case 1:
+-	    if ((a & 0xcf) == 0xcc)
+-	    {
+-		/* F12 pressed - pass it on (quick hack) */
+-		swi(Wimp_ProcessKey, a | 0x100);
+-		return;
+-	    }
+-	    base = a & 0xcf;
+-	    modifier = a & 0x30;
+-	    switch (base)
+-	    {
+-		case 0x8a:	/* Tab */
+-		    add_to_input_buf("\011", 1);
+-		    return;
+-		case 0x8b:	/* Copy (End) */
+-		    return ro_press('@', '7', modifier);
+-		case 0x8c:	/* Left */
+-		    return ro_press('k', 'l', modifier);
+-		case 0x8d:	/* Right */
+-		    return ro_press('k', 'r', modifier);
+-		case 0x8e:	/* Down */
+-		    if (modifier & 0x10)
+-			return ro_press('k', 'N', modifier ^ 0x10);
+-		    else
+-			return ro_press('k', 'd', modifier);
+-		case 0x8f:	/* Up */
+-		    if (modifier & 0x10)
+-			return ro_press('k', 'P', modifier ^ 0x10);
+-		    else
+-			return ro_press('k', 'u', modifier);
+-		case 0xca:	/* F10 */
+-		    return ro_press('k', ';', modifier);
+-		case 0xcb:	/* F11 */
+-		    return ro_press('F', '1', modifier);
+-		case 0xcd:	/* Insert */
+-		    return ro_press('k', 'I', modifier);
+-		default:
+-		    if (base > 0x80 && base < 0x18a)
+-		    {
+-			/* One of the other function keys */
+-			return ro_press('k', '0' + (base & 15), modifier);
+-		    }
+-	    }
+-    }
+-}
+-
+-/* Process a mouse event. */
+-    void
+-ro_mouse(block)
+-    int *block;
+-{
+-    int x, y, button, vim_button;
+-    int modifiers = 0;
+-    int min_x, min_y;		/* Visible area of editor window */
+-    int max_x, max_y;
+-
+-    if (block[3] != gui.window_handle || ro_dragging)
+-	return;			/* Not our window or ignoring clicks*/
+-
+-    x = block[0];		/* Click position - screen coords */
+-    y = block[1];
+-    button = block[2];
+-
+-    block[0] = gui.window_handle;
+-    swi(Wimp_GetWindowState, 0, block);
+-    min_x = block[1];
+-    min_y = block[2];
+-    max_x = block[3];
+-    max_y = block[4];
+-
+-    if (block[3] - x < gui.scrollbar_width)
+-    {
+-	/* Click in that blank area under the scrollbars */
+-
+-	if (button & 0x444)
+-	{
+-	    int	    front_block[10];
+-	    /* Dragging with Select - bring window to front first */
+-	    front_block[0] = gui.window_handle;
+-	    swi(Wimp_GetWindowState, 0, front_block);
+-	    front_block[7] = -1;
+-	    ro_open_main(front_block);
+-	}
+-
+-	block[0] = gui.window_handle;
+-	block[1] = 7;			/* Drag point */
+-	block[2] = block[4] = 0;	/* Coords of point. */
+-	block[3] = block[5] = 0;
+-	drag_x_offset = max_x - x;
+-	drag_y_offset = min_y - y;
+-
+-	/* Parent box. */
+-	block[6] = min_x +
+-			gui.scrollbar_width * 2 +
+-			MIN_COLUMNS * gui.char_width;
+-	block[7] = 0;
+-	gui_mch_get_screen_dimensions(&block[8], &block[9]);
+-	block[9] = max_y -
+-			4 * gui.char_height -
+-			gui.scrollbar_height;
+-
+-	swi(Wimp_DragBox, 0, block);
+-	ro_dragging = DRAG_RESIZE_WINDOW;
+-	drag_button = vim_button;
+-	drag_modifiers = modifiers;
+-	return;
+-    }
+-
+-    if (button & 0x111)
+-	vim_button = MOUSE_RIGHT;
+-    else if (button & 0x222)
+-	vim_button = MOUSE_MIDDLE;
+-    else
+-	vim_button = MOUSE_LEFT;
+-
+-    swi(OS_Byte, 121, 0x80);
+-    if (r1 == 0xff)
+-	modifiers |= MOUSE_SHIFT;
+-    swi(OS_Byte, 121, 0x81);
+-    if (r1 == 0xff)
+-	modifiers |= MOUSE_CTRL;
+-    swi(OS_Byte, 121, 0x82);
+-    if (r1 == 0xff)
+-	modifiers |= MOUSE_ALT;
+-
+-    if (button == 2)
+-    {
+-	/* Menu click:
+-	 * If shift was pressed then do the paste action.
+-	 * If not, then open the pop-up menu.
+-	 */
+-	modifiers ^= MOUSE_SHIFT;
+-	if (modifiers && MOUSE_SHIFT)
+-	{
+-	    vimmenu_T	main;
+-	    /* Shift was NOT pressed - show menu */
+-	    main.dname = (char_u *) "Vim";
+-	    main.children = root_menu;
+-	    gui_mch_show_popupmenu(&main);
+-	    return;
+-	}
+-    }
+-
+-    /* Gain the input focus */
+-    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+-    if (button & 0xf0)
+-    {
+-	/* Drag operation:
+-	 *
+-	 * Tell the Wimp to start a drag.
+-	 * Monitor null events.
+-	 */
+-	block[1] = 7;			/* Drag a point. */
+-	block[2] = block[4] = x;	/* Coords of point. */
+-	block[3] = block[5] = y;
+-	block[6] = 0;			/* Coords of bounding box. */
+-	block[7] = 0;
+-	gui_mch_get_screen_dimensions(&block[8], &block[9]);
+-
+-	drag_x_offset = drag_y_offset = 0;
+-
+-	swi(Wimp_DragBox, 0, block);
+-	ro_dragging = DRAG_SELECTION;
+-	drag_button = vim_button;
+-	drag_modifiers = modifiers;
+-
+-	vim_button |= MOUSE_DRAG;
+-    }
+-
+-    gui_send_mouse_event(
+-		vim_button,
+-		x - min_x,
+-		max_y - y,
+-		button & 0xf ? TRUE : FALSE,	/* dclick */
+-		modifiers);
+-}
+-
+-    void
+-ro_continue_drag(block)
+-    int *block;			/* Just used as scrap. */
+-{
+-    int x, y;
+-
+-    /* Get screen coords of pointer. */
+-    swi(Wimp_GetPointerInfo, 0, block);
+-    x = block[0] + drag_x_offset;
+-    y = block[1] + drag_y_offset;
+-
+-    block[0] = gui.window_handle;
+-    swi(Wimp_GetWindowState, 0, block);
+-
+-    if (ro_dragging == DRAG_RESIZE_WINDOW)
+-    {
+-	/* Resizeing the main window. */
+-	block[2] = y;
+-	block[3] = x;
+-	ro_open_main(block);
+-    }
+-    else
+-    {
+-	/* Selecting some text. */
+-	gui_send_mouse_event(
+-	    drag_button | MOUSE_DRAG,	/* Always report the same button */
+-	    x - block[1],
+-	    block[4] - y,
+-	    FALSE,			/* Not a double click. */
+-	    drag_modifiers);
+-    }
+-}
+-
+-/* User has released all mouse buttons, marking the end of a drag. */
+-    void
+-ro_drag_finished(block)
+-    int *block;
+-{
+-    int x;
+-    int y;
+-    int width, height;
+-
+-    /* I don't trust the box returned by Wimp_Poll; look at the pointer
+-     * ourselves.
+-     */
+-    swi(Wimp_GetPointerInfo, 0, block);
+-    x = block[0] + drag_x_offset;
+-    y = block[1] + drag_y_offset;
+-
+-    if (ro_dragging == DRAG_RESIZE_WINDOW)
+-    {
+-	block[0] = gui.window_handle;
+-	swi(Wimp_GetWindowState, 0, block);
+-	block[2] = y;
+-	block[3] = x;
+-	ro_open_main(block);
+-
+-	width = (block[3] - block[1]);
+-	height = (block[4] - block[2]);
+-
+-	swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+-	gui_resize_shell(width, height);
+-    }
+-    else
+-    {
+-	block[0] = gui.window_handle;
+-	swi(Wimp_GetWindowState, 0, block);
+-	gui_send_mouse_event(
+-		MOUSE_RELEASE,
+-		x - block[1],
+-		block[4] - y,
+-		FALSE,			/* not a double click */
+-		drag_modifiers);
+-    }
+-    ro_dragging = DRAG_FALSE;
+-}
+-
+-/* Load the file/pathname given in block into a [new] buffer.
+- *
+- * Modifier	Action
+- *
+- * None		:confirm e <file>
+- * Ctrl		:sp <file>
+- * Shift	<file>
+- *
+- * Insert into typebuf, at the start.
+- * If loading from !Scrap then use saved leafname instead, and
+- * delete the scrap file. Also, ignore shift key.
+- *
+- * NB: Doesn't send DataLoadAck (other app might delete temp file?).
+- */
+-    void
+-ro_dataload(block)
+-    int	    *block;
+-{
+-    char_u  new_path[MAXPATHL];
+-    char_u  *path = ((char_u *) block) + 44;
+-    int	    scrap = FALSE;
+-
+-    if (block[3] == leaf_ref && leaf_name)
+-	scrap = TRUE;
+-
+-    switch (get_real_state() & 0xff)
+-    {
+-	case INSERT:
+-	case CMDLINE:
+-	case CMDLINE+LANGMAP:
+-	    /* For insert mode we can only insert the pathname (currently)
+-	     * Make sure Shift is pressed.
+-	     */
+-	    swi(OS_Byte, 121, 0x80);	    /* Is Shift pressed? */
+-	    if (r1 == 0xff)
+-	    {
+-		ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+-		ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+-		ro_return_early = TRUE;		    /* Return even though nothing was typed. */
+-	    }
+-	    else
+-		swi(Wimp_ReportError,
+-			"\0\0\0\0Sorry, you can only load text in normal mode", 5, "Vim");
+-	    break;
+-
+-	case NORMAL:
+-	    ro_return_early = TRUE;	    /* Return even though nothing was typed. */
+-
+-	    if (scrap)			    /* Remove <Wimp$Scrap>. Later. */
+-		ins_typebuf(":!~remove <Wimp$Scrap>\r", REMAP_NONE, 0, TRUE, FALSE);
+-
+-	    /* Insert {:sp ,:confirm e }[+f\ <leaf> ]<file><CR> */
+-	    ins_typebuf("\r", REMAP_NONE, 0, TRUE, FALSE);
+-	    ins_typebuf(path, REMAP_NONE, 0, TRUE, FALSE);
+-	    ins_typebuf(" ", REMAP_NONE, 0, TRUE, FALSE);
+-
+-	    if (scrap)
+-	    {
+-		/* Loading via !Scrap - change pathname to stored leafname */
+-		ins_typebuf(leaf_name, REMAP_NONE, 0, TRUE, FALSE);
+-		ins_typebuf(" +f\\ ", REMAP_NONE, 0, TRUE, FALSE);
+-		leaf_ref = 0;
+-		vim_free(leaf_name);
+-		leaf_name = NULL;
+-	    }
+-
+-	    swi(OS_Byte, 121, 0x81);	    /* Is Ctrl pressed? */
+-	    if (r1 == 0xff)
+-		/* Yes, split window */
+-		ins_typebuf(":sp", REMAP_NONE, 0, TRUE, FALSE);
+-	    else
+-		ins_typebuf(":confirm e", REMAP_NONE, 0, TRUE, FALSE);
+-	    break;
+-
+-	default:
+-	    swi(Wimp_ReportError, "\0\0\0\0You can only load text in normal mode.", 5, "Vim");
+-    }
+-    /* Send DataSaveAck so other program doesn't think we died
+-     * and delete <Wimp$Scrap>.
+-     */
+-    block[3] = block[2];
+-    block[4] = 4;
+-    swi(Wimp_SendMessage, 17, block, block[1]);
+-}
+-
+-    void
+-ro_datasave(block)
+-    int	    *block;
+-{
+-    char_u *path = ((char_u *) block) + 44;
+-
+-    /* Preserve the name given so we can use it, not <Wimp$Scrap> */
+-    if (leaf_name)
+-	vim_free(leaf_name);
+-    leaf_name = vim_strsave(path);
+-
+-    block[9] = -1;	    /* File is unsafe. */
+-    strcpy(path, "<Wimp$Scrap>");
+-    block[0] = 60;
+-    block[3] = block[2];
+-    block[4] = 2;
+-    swi(Wimp_SendMessage, 17, block, block[1]);
+-
+-    leaf_ref = block[2];
+-}
+-
+-    void
+-ro_message(block)
+-    int *block;
+-{
+-    char_u	*buffer;
+-    long_u	len;
+-
+-    if (block[1] == task_handle)
+-	return;			    /* Don't talk to ourself! */
+-    switch (block[4])
+-    {
+-	case 0:		/* Quit. */
+-	    if (block[4] == 0)
+-		ro_quit();
+-	    break;
+-	case 1:	/* DataSave */
+-	    ro_datasave(block);
+-	    break;
+-	case 2:		/* DataSaveAck. */
+-	    if (clip_convert_selection(&buffer, &len, &clip_star) == -1)
+-		return;
+-
+-	    /* Save the clipboard contents to a file. */
+-	    swi(OS_File, 10, ((char_u *) block) + 44, 0xfff, 0, buffer, buffer + len);
+-
+-	    /* Ack with DataLoad message. */
+-	    block[3] = block[2];
+-	    block[4] = 3;
+-	    block[9] = len;
+-	    swi(Wimp_SendMessage, 17, block, block[1]);
+-
+-	    vim_free(buffer);
+-	    break;
+-	case 3:		/* DataLoad */
+-	    ro_dataload(block);
+-	    break;
+-	case 8:		/* PreQuit */
+-	    ro_prequit(block);
+-	    break;
+-	case 0xf:	/* Lose clipboard. */
+-	    if (block[5] & 4)
+-	    {
+-		clip_free_selection(&clip_star);
+-		clip_star.owned = FALSE;
+-	    }
+-	    break;
+-	case 0x10:	/* DataRequest (clip_star) */
+-	    if (clip_star.owned)
+-	    {
+-		int rows;
+-
+-		/* Tell other program that we have the clipboard. */
+-		block[0] = 52;
+-		block[3] = block[2];	    /* Copy myref to yourref. */
+-		block[4] = 1;		    /* DataSave message. */
+-		/* Create an estimate for the size (larger or same as true
+-		 * value) */
+-		rows = clip_star.end.lnum - clip_star.start.lnum;
+-		if (rows < 0)
+-		    rows = -rows;
+-		block[9] = (rows + 1) * Columns + 1; /* Add one for possible
+-							final newline. */
+-		block[10] = 0xfff;	    /* Clipboard is text. */
+-		strcpy( ((char_u *) block) + 44, "VimClip");
+-		swi(Wimp_SendMessage, 17, block, block[1]);
+-	    }
+-	    break;
+-	case 0x400c1:	/* Mode change */
+-	    changed_mode = TRUE;		/* Flag - update on next OpenWindow */
+-	    if (zap_redraw)
+-	    {
+-		/* JK230798, re-initialise ZapRedraw stuff */
+-		if (ro_zap_redraw_initialise() == FAIL)
+-		    zap_redraw = FALSE;
+-	    }
+-	    break;
+-	case 0x400c3:	/* TaskCloseDown */
+-	    if (block[1] == child_handle)
+-		child_handle = 0;
+-	    break;
+-    }
+-}
+-
+-/*
+- * Converts a scrollbar's window handle into a scrollbar pointer.
+- * NULL on failure.
+- */
+-    scrollbar_T *
+-ro_find_sbar(id)
+-    int		id;
+-{
+-    win_T	*wp;
+-
+-    if (gui.bottom_sbar.id == id)
+-	return &gui.bottom_sbar;
+-    FOR_ALL_WINDOWS(wp)
+-    {
+-	if (wp->w_scrollbars[SBAR_LEFT].id == id)
+-	    return &wp->w_scrollbars[SBAR_LEFT];
+-	if (wp->w_scrollbars[SBAR_RIGHT].id == id)
+-	    return &wp->w_scrollbars[SBAR_RIGHT];
+-    }
+-    return NULL;
+-}
+-
+-    void
+-scroll_to(line, sb)
+-    int sb;	/* Scrollbar number */
+-    int line;
+-{
+-    char_u code[8];
+-
+-    /* Don't put events in the input queue now. */
+-    if (hold_gui_events)
+-	return;
+-
+-    /* Send a scroll event:
+-     *
+-     * A scrollbar event is CSI (NOT K_SPECIAL), KS_VER_SCROLLBAR,
+-     * KE_FILLER followed by:
+-     * one byte representing the scrollbar number, and then four bytes
+-     * representing a long_u which is the new value of the scrollbar.
+-     */
+-    code[0] = CSI;
+-    code[1] = KS_VER_SCROLLBAR;
+-    code[2] = KE_FILLER;
+-    code[3] = sb;
+-    code[4] = line >> 24;
+-    code[5] = line >> 16;
+-    code[6] = line >> 8;
+-    code[7] = line;
+-    add_to_input_buf(code, 8);
+-}
+-
+-    void
+-h_scroll_to(col)
+-    int col;
+-{
+-    char_u code[8];
+-
+-    /* Don't put events in the input queue now. */
+-    if (hold_gui_events)
+-	return;
+-
+-    /* Send a scroll event:
+-     *
+-     * A scrollbar event is CSI (NOT K_SPECIAL)
+-     *
+-     * A horizontal scrollbar event is K_SPECIAL, KS_HOR_SCROLLBAR,
+-     * KE_FILLER followed by four bytes representing a long_u which is the
+-     * new value of the scrollbar.
+-     */
+-    code[0] = CSI;
+-    code[1] = KS_HOR_SCROLLBAR;
+-    code[2] = KE_FILLER;
+-    code[4] = col >> 24;
+-    code[5] = col >> 16;
+-    code[6] = col >> 8;
+-    code[7] = col;
+-    add_to_input_buf(code, 8);
+-}
+-
+-    void
+-ro_scroll(block)
+-    int		*block;
+-{
+-    scrollbar_T	*sb;
+-    int		offset;
+-    win_T	*wp;
+-
+-    /* Block is ready for Wimp_OpenWindow, and also contains:
+-     *
+-     * +32 = scroll X direction (-2 .. +2)
+-     * +36 = scroll Y direction (-2 .. +2)
+-     */
+-
+-    sb = ro_find_sbar(block[0]);
+-    if (!sb)
+-	return;		/* Window not found (error). */
+-
+-    wp = sb-> wp;
+-
+-    if (wp == NULL)
+-    {
+-	/* Horizontal bar. */
+-	offset = block[8];
+-	if (offset == -2)
+-	    offset = (block[1] - block[3]) / gui.char_width;
+-	else if (offset == 2)
+-	    offset = (block[3] - block[1]) / gui.char_width;
+-
+-	block[5] += offset * gui.char_width;
+-
+-	gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+-
+-	swi(Wimp_OpenWindow, 0, block);
+-    }
+-    else
+-    {
+-	offset = -block[9];
+-	if (offset == -2)
+-	    offset = -(wp -> w_height - 1);
+-	else if (offset == 2)
+-	    offset = wp -> w_height - 1;
+-
+-	/* Possibly we should reposition the scrollbar?
+-	 * Vim seems to update the bar anyway...
+-	 */
+-	gui_drag_scrollbar(sb, offset - (block[6] / gui.char_height), FALSE);
+-    }
+-}
+-
+-/* Move a window by a given offset. Used to simulate the function of the
+- * nested wimp.
+- */
+-    void
+-ro_move_child(window, x, y, pos_wanted, pos_got)
+-    int	window;
+-    int x,y;		/* offset to move by */
+-    int	pos_wanted, pos_got;
+-{
+-    int	block[10];
+-
+-    block[0] = window;
+-    swi(Wimp_GetWindowState, 0, block);
+-    block[1] += x;
+-    block[2] += y;
+-    block[3] += x;
+-    block[4] += y;
+-    if (pos_wanted == -1)
+-	block[7] = -1;
+-    else if (pos_wanted == -2)
+-	block[7] = pos_got;
+-    swi(Wimp_OpenWindow, 0, block);
+-}
+-
+-/* Open the main window. Also updates scrollbars if we are not
+- * using the nested Wimp.
+- * If we have just changed mode then re-read all values.
+- */
+-    void
+-ro_open_main(block)
+-    int	    *block;
+-{
+-    int	    toggle_size;
+-
+-    /* Find out if the user clicked on the toggle size icon. */
+-    block[20] = block[0];
+-    swi(Wimp_GetWindowState, 0, block + 20);
+-    toggle_size = block[28] & (1 << 19);
+-
+-    if (nested_wimp)
+-    {
+-	swi(Wimp_OpenWindow, 0, block);
+-    }
+-    else
+-    {
+-	int	old[10];
+-	int	x_offset, y_offset;	    /* Move children same as parent. */
+-	int	pos_wanted, pos_got;
+-	int	left_bar  = gui.which_scrollbars[SBAR_LEFT];
+-	int	right_bar = gui.which_scrollbars[SBAR_RIGHT];
+-	win_T	*wp;
+-
+-	/* Three cases to think about:
+-	 * 1) Move to top. Open each window at the top.
+-	 * 2) Same stack position. Open each with same position.
+-	 * 3) Open at bottom. Open children with parent's new position.
+-	 */
+-
+-	old[0] = block[0];
+-	swi(Wimp_GetWindowState, 0, old);
+-	pos_wanted = block[7];
+-	swi(Wimp_OpenWindow, 0, block);
+-	/* Block updated by OpenWindow? I don't think so! */
+-	swi(Wimp_GetWindowState, 0, block);
+-	pos_got = block[7];
+-
+-	x_offset = block[1] - old[1];
+-	y_offset = block[4] - old[4];
+-	if (x_offset || y_offset || pos_wanted == -1 || pos_wanted == -2)
+-	{
+-	    /* If parent has moved, re-open all the child windows. */
+-	    FOR_ALL_WINDOWS(wp)
+-	    {
+-		/* Reopen scrollbars for this window. */
+-		if (left_bar)
+-		    ro_move_child(wp -> w_scrollbars[SBAR_LEFT].id,
+-				x_offset, y_offset,
+-				pos_wanted, pos_got);
+-		if (right_bar)
+-		    ro_move_child(wp -> w_scrollbars[SBAR_RIGHT].id,
+-				x_offset, y_offset,
+-				pos_wanted, pos_got);
+-	    }
+-	}
+-    }
+-    if (changed_mode || toggle_size)
+-    {
+-	int	width, height;
+-
+-	if (changed_mode)
+-	    ro_measure_tools();
+-	block[0] = gui.window_handle;
+-	swi(Wimp_GetWindowState, 0, block);
+-
+-	width = block[3] - block[1];
+-	height = block[4] - block[2];
+-	swi(Wimp_ForceRedraw, gui.window_handle, 0, -height, width, 0);
+-	gui_resize_shell(width, height);
+-	changed_mode = FALSE;
+-    }
+-}
+-
+-    void
+-ro_open_window(block)
+-    int		*block;
+-{
+-    int		pos;
+-    scrollbar_T *sb;
+-
+-    if (block[0] == gui.window_handle)
+-	ro_open_main(block);
+-    else
+-    {
+-	swi(Wimp_OpenWindow, 0, block);
+-	if (block[0] != gui.window_handle)
+-	{
+-	    sb = ro_find_sbar(block[0]);
+-	    if (sb)
+-	    {
+-		if (sb-> wp != NULL)
+-		    gui_drag_scrollbar(sb, -block[6] / gui.char_height, FALSE);
+-		else
+-		    gui_drag_scrollbar(sb, block[5] / gui.char_width, FALSE);
+-	    }
+-	}
+-    }
+-}
+-
+-    void
+-ro_menu_selection(block)
+-    int		*block;
+-{
+-    int		*item = wimp_menu + 7;
+-    vimmenu_T	*menu;
+-    /* wimp_menu points to a wimp menu structure */
+-
+-    for (;;)
+-    {
+-	while (block[0]--)
+-	    item += 6;
+-	if (block[1] == -1)
+-	    break;
+-	item = ((int *) item[1]) + 7;
+-	block++;
+-    }
+-    /* item points to the wimp menu item structure chosen */
+-    menu = (vimmenu_T *) item[5];
+-
+-    swi(Wimp_GetPointerInfo, 0, block);
+-    if (block[2] == 1)
+-	/* Adjust used - keep menu open */
+-	swi(Wimp_CreateMenu, 0, wimp_menu);
+-
+-    if (menu-> cb)
+-	menu-> cb(menu);
+-}
+-
+-    void
+-ro_open_parent()
+-{
+-    int head;
+-    char_u *i = curbuf-> b_ffname;
+-    char_u  buffer[256];
+-
+-    head = 0;
+-    for (; *i; i++)
+-    {
+-	if (*i == '.')
+-	    head = i - curbuf-> b_ffname;
+-    }
+-
+-    /* Append head chars to buffer */
+-    if (head < 240 && curbuf-> b_ffname && head)
+-    {
+-	strcpy(buffer, "%filer_opendir ");
+-	strncpy(buffer + 15, curbuf-> b_ffname, head);
+-	buffer[15 + head] = '\0';
+-	swi(OS_CLI, buffer);
+-    }
+-}
+-
+-    void
+-process_event(event, block)
+-    int event;
+-    int *block;
+-{
+-    switch (event)
+-    {
+-	case 0:		/* Nothing - update drag state. */
+-	    if (ro_dragging)
+-		ro_continue_drag(block);
+-	    break;
+-	case 1:		/* Redraw window. */
+-	    redraw_window(block);
+-	    break;
+-	case 2:		/* Open window. */
+-	    ro_open_window(block);
+-	    break;
+-	case 3:		/* Close window. */
+-	    swi(Wimp_GetPointerInfo, 0, block + 1);
+-	    if (block[3] == 1)
+-		ro_open_parent();
+-	    else
+-		if (ro_ok_to_quit())
+-		    ro_quit();
+-	    break;
+-	case 6:		/* Mouse click. */
+-	    ro_mouse(block);
+-	    break;
+-	case 7:		/* Finished drag. */
+-	    ro_drag_finished(block);
+-	    break;
+-	case 8:		/* Key pressed. */
+-	    ro_insert_key((char_u *) &block[6]);
+-	    break;
+-	case 9:
+-	    ro_menu_selection(block);
+-	    break;
+-	case 10:	/* Scroll request. */
+-	    ro_scroll(block);
+-	    break;
+-	case 11:	/* Lose caret. */
+-	    if (block[0] == gui.window_handle)
+-		gui_focus_change(FALSE);
+-	    break;
+-	case 12:	/* Gain caret. */
+-	    if (block[0] == gui.window_handle)
+-		gui_focus_change(TRUE);
+-	    break;
+-	case 17:	/* User message. */
+-	case 18:	/* User message recorded. */
+-	    ro_message(block);
+-	    break;
+-    }
+-}
+-
+-/*
+- * GUI input routine called by gui_wait_for_chars().  Waits for a character
+- * from the keyboard.
+- *  wtime == -1	    Wait forever.
+- *  wtime == 0	    This should never happen.
+- *  wtime > 0	    Wait wtime milliseconds for a character.
+- * Returns OK if a character was found to be available within the given time,
+- * or FAIL otherwise.
+- */
+-    int
+-gui_mch_wait_for_chars(long wtime)
+-{
+-    int block[64];
+-    int	reason;
+-    int start_time = -1;
+-    int ctime = wtime / 10;	/* delay in cs */
+-
+-    if (wtime != -1)
+-    {
+-	swi(OS_ReadMonotonicTime);
+-	start_time = r0;
+-    }
+-
+-    for (;;)
+-    {
+-	if (ro_dragging)
+-	    reason = wimp_poll(0, block);	/* Always return immediately */
+-	else if (wtime == -1)
+-	    reason = wimp_poll(1, block);
+-	else
+-	    reason = wimp_pollidle(0, block, start_time + ctime);
+-
+-	process_event(reason, block);
+-
+-	if (input_available() || ro_return_early)
+-	{
+-	    ro_return_early = FALSE;
+-	    return OK;	    /* There is something to process (key / menu event) */
+-	}
+-
+-	if (wtime != -1)
+-	{
+-	    swi(OS_ReadMonotonicTime);
+-	    if (r0 - start_time > ctime)
+-		return FAIL;	/* We've been waiting too long - return failure */
+-	}
+-    }
+-}
+-
+-/* Flush any output to the screen */
+-    void
+-gui_mch_flush(void)
+-{
+-}
+-
+-/*
+- * Clear a rectangular region of the screen from text pos(row1, col1) to
+- * (row2, col2) inclusive.
+- */
+-    void
+-gui_mch_clear_block(int row1, int col1, int row2, int col2)
+-{
+-    swi(ColourTrans_ReturnGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+-    plot_rectangle(96 + 5, r0,
+-			FILL_X(col1), -FILL_Y(row2 + 1),
+-			FILL_X(col2 + 1), -FILL_Y(row1));
+-}
+-
+-    void
+-gui_mch_clear_all(void)
+-{
+-    if (redraw_block)
+-    {
+-	swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+-	swi(OS_WriteI + 16);
+-    }
+-    else
+-    {
+-	int block[44];
+-	block[0] = gui.window_handle;
+-	block[1] = 0;
+-	block[2] = -gui.num_rows * gui.char_height;
+-	block[3] = gui.num_cols * gui.char_width;
+-	block[4] = 0;
+-	swi(Wimp_UpdateWindow, 0, block);
+-	while (r0)
+-	{
+-	    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 1<<7, 0);
+-	    swi(OS_WriteI + 16);
+-	    swi(Wimp_GetRectangle, 0, block);
+-	}
+-    }
+-}
+-
+-/*
+- * Delete the given number of lines from the given row, scrolling up any
+- * text further down within the scroll region.
+- */
+-    void
+-gui_mch_delete_lines(int row, int num_lines)
+-{
+-    int top_from = -row - num_lines;
+-    int bot_from = -gui.scroll_region_bot - 1;
+-    int bot_to   = bot_from + num_lines;
+-
+-    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+-
+-    /* Changed without checking! */
+-    swi(Wimp_BlockCopy, gui.window_handle,
+-			    gui.scroll_region_left * gui.char_width,
+-			    bot_from * gui.char_height,
+-			    (gui.scroll_region_right - gui.scroll_region_left
+-							+ 1) * gui.char_width,
+-			    top_from * gui.char_height,
+-
+-			    gui.scroll_region_left * gui.char_width,
+-			    bot_to * gui.char_height);
+-
+-    gui_clear_block(gui.scroll_region_bot - num_lines + 1,
+-						       gui.scroll_region_left,
+-	gui.scroll_region_bot, gui.scroll_region_right);
+-}
+-
+-/*
+- * Insert the given number of lines before the given row, scrolling down any
+- * following text within the scroll region.
+- */
+-    void
+-gui_mch_insert_lines(int row, int num_lines)
+-{
+-    int top_from = -row;
+-    int bot_to   = -gui.scroll_region_bot - 1;
+-    int bot_from = bot_to + num_lines;
+-
+-    swi(ColourTrans_SetGCOL, gui.back_pixel << 8, 0, 0, 0x80, 0);
+-
+-    swi(Wimp_BlockCopy, gui.window_handle,
+-			    gui.scroll_region_left * gui.char_width,
+-			    bot_from * gui.char_height,
+-			    (gui.scroll_region_right - gui.scroll_region_left
+-							+ 1) * gui.char_width,
+-			    top_from * gui.char_height,
+-
+-			    gui.scroll_region_left * gui.char_width,
+-			    bot_to * gui.char_height);
+-
+-    gui_clear_block(row, gui.scroll_region_left,
+-				row + num_lines - 1, gui.scroll_region_right);
+-}
+-
+-/* Put selection in clipboard buffer.
+- * Should we become the new owner?
+- */
+-    void
+-clip_mch_request_selection(VimClipboard *cbd)
+-{
+-    int		block[64];	/* Will be used in Wimp_Poll. */
+-    int		reason;
+-    char_u	*buffer;
+-    long_u	length;
+-
+-    block[0] = 48;			/* Size of block. */
+-    block[3] = 0;			/* Orinial message. */
+-    block[4] = 0x10;			/* Data request. */
+-    block[5] = gui.window_handle;
+-    block[6] = RO_LOAD_CLIPBOARD;	/* Internal handle. */
+-    block[7] = block[8] = 0;		/* (x,y) not used. */
+-    block[9] = 4;
+-    block[10] = 0xfff;	    /* We want text files if possible, I think. */
+-    block[11] = -1;	    /* End of list. */
+-    swi(Wimp_SendMessage, 17, block, 0);    /* Broadcast request. */
+-
+-    /* OK, we've sent the request. Poll until we get a null poll (failure) or
+-     * we load the clipboard.
+-     * If we receive a DataSave event with icon handle = -2 then put it on the
+-     * clipboard. RISC OS should ensure that key events will not be delivered
+-     * until the clipboard operation completes (unless the owner starts idling
+-     * - we can't wait forever!).
+-     */
+-    for (;;)
+-    {
+-	reason = wimp_poll(0, block);
+-	if (reason == 0)
+-	    return;	    /* Failed to get clipboard. */
+-	if ((reason == 17 || reason == 18) &&
+-		block[4] == 1 && block[6] == RO_LOAD_CLIPBOARD)
+-	    break;	    /* Got it - stop waiting. */
+-	process_event(reason, block);
+-	if (ro_return_early)
+-	    return;
+-    }
+-    /* Tell owner to save data in <Wimp$Scrap>. */
+-    block[0] = 60;
+-    block[3] = block[2];   /* Copy myref -> yourref */
+-    block[4] = 2;	    /* DataSaveAck. */
+-    block[9] = -1;	    /* Data is unsafe. */
+-    strcpy( ((char_u *) block) + 44, "<Wimp$Scrap>");
+-    swi(Wimp_SendMessage, 17, block, block[1]);
+-
+-    /* Wait again for reply. */
+-    for (;;)
+-    {
+-	reason = wimp_poll(0, block);
+-	if (reason == 0)
+-	    return;	/* Other program has given up! */
+-	if ((reason == 17 || reason == 18) && block[4] == 3 && block[6] == RO_LOAD_CLIPBOARD)
+-	    break;	/* Clipboard data saved to <Wimp$Scrap> */
+-	process_event(reason, block);
+-	if (ro_return_early)
+-	    return;
+-    }
+-
+-    /* <Wimp$Scrap> contains clipboard - load it. */
+-    if (xswi(OS_File, 17, "<Wimp$Scrap>") & v_flag)
+-	return;		/* Error! */
+-    if (r0 != 1 && r0 != 3)
+-	return;
+-    length = r4;
+-
+-    buffer = lalloc(length, TRUE);  /* Claim memory (and report errors). */
+-    if (buffer == NULL)
+-	return;
+-
+-    if (xswi(OS_File, 16, "<Wimp$Scrap>", buffer, 0) & v_flag)
+-	return;
+-
+-    clip_yank_selection(MCHAR, buffer, length, cbd);
+-
+-    vim_free(buffer);
+-
+-    swi(OS_FSControl, 27, "<Wimp$Scrap>", 0, 0);    /* Delete temp file. */
+-
+-    block[4] = 4;		    /* Send DataLoadAck. */
+-    block[3] = block[2];	    /* Copy myref -> yourref. */
+-    swi(Wimp_SendMessage, 17, block, block[1]);
+-}
+-
+-/* Not sure what this means under RISC OS. */
+-    void
+-clip_mch_lose_selection(VimClipboard *cbd)
+-{
+-}
+-
+-/* Tell everyone that we now own the clipboard.
+- * Return OK if our claim is accepted (always, under RISC OS)
+- */
+-    int
+-clip_mch_own_selection(VimClipboard *cbd)
+-{
+-    int block[6];
+-    block[0] = 24;	/* Length of block.  */
+-    block[3] = 0;	/* Original message. */
+-    block[4] = 0xf;	/* ClaimEntity. */
+-    block[5] = 0x4;	/* Claim clipboard only. */
+-    swi(Wimp_SendMessage, 17, block, 0);
+-    return OK;
+-}
+-
+-/*
+- * Send the current selection to the clipboard.  Do nothing for X because we
+- * will fill in the selection only when requested by another app. Sounds good
+- * for RISC OS too.
+- */
+-    void
+-clip_mch_set_selection(VimClipboard *cbd)
+-{
+-    clip_get_selection(cbd);
+-}
+-
+-/*
+- * Make a menu either grey or not grey.
+- */
+-    void
+-gui_mch_menu_grey(vimmenu_T *menu, int grey)
+-{
+-    menu-> greyed_out = grey;
+-}
+-
+-/*
+- * Make menu item hidden or not hidden
+- */
+-    void
+-gui_mch_menu_hidden(vimmenu_T *menu, int hidden)
+-{
+-    menu-> hidden = hidden;
+-}
+-
+-/*
+- * This is called after setting all the menus to grey/hidden or not.
+- */
+-    void
+-gui_mch_draw_menubar(void)
+-{
+-    swi(Wimp_CreateMenu, 0, -1);
+-    if (wimp_menu != (int *) -1)
+-    {
+-	ro_remove_menu(wimp_menu);
+-	wimp_menu = (int *) -1;
+-    }
+-}
+-
+-/* Add or remove a scrollbar. Note that this is only called when
+- * the scrollbar state is changing.
+- * The scroll bar window has already been created.
+- * We can't do anything except remove the scroll bar
+- * until we know what size to use.
+- */
+-    void
+-gui_mch_enable_scrollbar(sb, flag)
+-    scrollbar_T	*sb;
+-    int		flag;
+-{
+-    if (!flag)
+-	swi(Wimp_CloseWindow, 0, & (sb->id) );
+-    return;
+-}
+-
+-    void
+-gui_mch_set_blinking(long waittime, long on, long off)
+-{
+-}
+-
+-/*
+- * Stop the cursor blinking.  Show the cursor if it wasn't shown.
+- */
+-    void
+-gui_mch_stop_blink(void)
+-{
+-}
+-
+-/*
+- * Start the cursor blinking.  If it was already blinking, this restarts the
+- * waiting time and shows the cursor.
+- */
+-    void
+-gui_mch_start_blink(void)
+-{
+-}
+-
+-/*
+- * Return the RGB value of a pixel as a long.
+- */
+-    long_u
+-gui_mch_get_rgb(guicolor_T pixel)
+-{
+-    return (long_u)pixel;
+-}
+-
+-    void
+-gui_mch_set_text_area_pos(int x, int y, int w, int h)
+-{
+-}
+-
+-    void
+-gui_mch_enable_menu(int flag)
+-{
+-}
+-
+-    void
+-gui_mch_set_menu_pos(int x, int y, int w, int h)
+-{
+-}
+-
+-    void
+-gui_mch_add_menu(vimmenu_T *menu, int idx)
+-{
+-}
+-
+-    void
+-gui_mch_add_menu_item(vimmenu_T *menu, int idx)
+-{
+-}
+-
+-    void
+-gui_mch_new_menu_colors(void)
+-{
+-}
+-
+-    void
+-gui_mch_destroy_menu(vimmenu_T *menu)
+-{
+-}
+-
+-/* Size of buffer has changed.
+- * Add one to max since gui.c subtracts one more than it should!
+- */
+-    void
+-gui_mch_set_scrollbar_thumb(sb, val, size, max)
+-    scrollbar_T	*sb;
+-    long	val;
+-    long	size;
+-    long	max;
+-{
+-    int		block[10], width, height;
+-
+-    width = (max + 1) * gui.char_width;
+-    height = (max + 1 + W_STATUS_HEIGHT(sb->wp)) * gui.char_height;
+-
+-    block[0] = block[3] = 0;
+-    block[1] = -height + (1 << y_eigen_factor);
+-    block[2] = width;
+-
+-    swi(Wimp_SetExtent, sb -> id, block);
+-
+-    block[0] = sb -> id;
+-    swi(Wimp_GetWindowState, 0, block);
+-    block[5] = val * gui.char_width;
+-    block[6] = -val * gui.char_height;
+-    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+-			gui.window_handle,	/* Parent window handle. */
+-			(CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
+-			(CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
+-			(CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
+-			(CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
+-			(CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
+-			(CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
+-			);
+-}
+-
+-/* Set the position of the scrollbar within the editor
+- * window. Note that, for vertical scrollbars, x and w
+- * are ignored. For horizontal bars y and h are ignored.
+- */
+-    void
+-gui_mch_set_scrollbar_pos(sb, x, y, w, h)
+-    scrollbar_T *sb;
+-    int		x;		/* Horizontal sb position */
+-    int		y;		/* Top of scroll bar */
+-    int		w;		/* Width */
+-    int		h;		/* Height */
+-{
+-    int		block[24];
+-    int		px1, py1;	/* Parent window min coords */
+-    int		px2, py2;	/* Parent window max coords */
+-
+-    /* Find where the parent window is. */
+-    block[0] = gui.window_handle;
+-    swi(Wimp_GetWindowState, 0, block);
+-    px1 = block[1];
+-    py1 = block[2];
+-    px2 = block[3];
+-    py2 = block[4];
+-
+-    block[0] = sb -> id;
+-
+-    /* Find out how big the scroll window is at the moment. */
+-    swi(Wimp_GetWindowInfo, 0, ((char_u *)block) + 1);
+-
+-    if (block[13] < w || block[12] > -h)
+-    {
+-	/* Current window is too small! */
+-	if (block[12] > -h)
+-	    block[12] = -h;
+-	if (block[13] < w)
+-	    block[13] = w;
+-	swi(Wimp_SetExtent, block[0], block + 11);
+-    }
+-
+-    /* This works better on the nested_wimp. */
+-    if (sb-> wp)
+-    {
+-	/* This is a vertical scrollbar. */
+-	block[1] = block[3] = px2 - gui.scrollbar_width + (1 << x_eigen_factor);
+-	block[2] = 1 + py2 - (y + h) + (1 << y_eigen_factor);
+-	block[4] = 1 + py2 - y;
+-    }
+-    else
+-    {
+-	/* This is a horizontal scrollbar. */
+-	block[2] = block[4] = py1 + gui.scrollbar_height;
+-	block[1] = px1;
+-	block[3] = px2 - gui.scrollbar_width;
+-    }
+-
+-    block[5] = 0;
+-    block[6] = 0;
+-    block[7] = -1;
+-
+-    swi(Wimp_OpenWindow, 0, block, 0x4b534154,
+-	    gui.window_handle,	/* Parent window handle. */
+-	    (CHILD_FIX_TO_RIGHT  << CHILD_LEFT  )   |
+-	    (CHILD_FIX_TO_RIGHT  << CHILD_RIGHT )   |
+-	    (CHILD_FIX_TO_BOTTOM << CHILD_TOP   )   |
+-	    (CHILD_FIX_TO_BOTTOM << CHILD_BOTTOM)   |
+-	    (CHILD_SELF_SCROLL   << CHILD_SCROLL_X) |
+-	    (CHILD_SELF_SCROLL   << CHILD_SCROLL_Y)
+-       );
+-}
+-
+-/* Create a window with no workarea to place inside editor window.
+- * (what happens without the nested wimp?)
+- * Data for scrollbar is invalid.
+- */
+-    void
+-gui_mch_create_scrollbar(sb, orient)
+-    scrollbar_T *sb;
+-    int		orient;	/* orient is SBAR_HORIZ or SBAR_VERT */
+-{
+-    int bar[] =
+-	{
+-	    0,   0,		/* Visible area : min X,Y */
+-	    100, 100,		/*		  max X,Y */
+-	    0,   0,		/* Scroll offsets */
+-	    -1,			/* Window in front */
+-	    0x80800150 | (orient == SBAR_HORIZ ? (1 << 30) : (1 << 28)),
+-	    0xff070207,		/* Colours */
+-	    0x000c0103,		/* More colours */
+-	    0, -0x4000,		/* Workarea extent */
+-	    0x4000, 0,		/* max X,Y */
+-	    0x00000000,		/* No title */
+-	    0 << 12,		/* No workarea button type */
+-	    1,			/* Wimp sprite area */
+-	    0x00010001,		/* Minimum width, height */
+-	    0, 0, 0,		/* Title data (none) */
+-	    0			/* No icons */
+-	};
+-    swi(Wimp_CreateWindow, 0, bar);
+-    sb -> id = r0;
+-}
+-
+-#if defined(FEAT_WINDOWS) || defined(PROTO)
+-    void
+-gui_mch_destroy_scrollbar(scrollbar_T *sb)
+-{
+-    swi(Wimp_DeleteWindow, 0, & (sb->id));
+-    sb -> id = -1;
+-}
+-#endif
+-
+-    void
+-gui_mch_set_scrollbar_colors(scrollbar_T *sb)
+-{
+-    /* Always use default RO colour scheme. */
+-}
+-
+-/*
+- * Get current mouse coordinates in text window.
+- * Note: (0,0) is the bottom left corner, positive y is UP.
+- */
+-    void
+-gui_mch_getmouse(x, y)
+-    int *x;
+-    int *y;
+-{
+-    int left;
+-    int top;
+-    int block[10];
+-
+-    block[0] = gui.window_handle;
+-    swi(Wimp_GetWindowState, 0, block);
+-    left = block[1];
+-    top = block[4];
+-
+-    swi(Wimp_GetPointerInfo, 0, block);
+-    *x = block[0] - left;
+-    *y = top - block[1];
+-}
+-
+-/* MouseTo(x, y) */
+-    void
+-gui_mch_setmouse(x, y)
+-    int		x;
+-    int		y;
+-{
+-}
+-
+-    void
+-gui_mch_toggle_tearoffs(enable)
+-    int		enable;
+-{
+-    /* no tearoff menus */
+-}
+-
+-/* Redraw a window's title.
+- * For the nested wimp we use the new 'redraw-title-bar' reason code.
+- * For older wimps we mark the area of the screen where the title bar
+- * is as invalid.
+- */
+-    void
+-ro_redraw_title(window)
+-    int window;
+-{
+-    if (nested_wimp)
+-    {
+-	swi(Wimp_ForceRedraw, window, 0x4b534154, 3);
+-    }
+-    else
+-    {
+-	int block[10];
+-	int miny;
+-
+-	block[0] = window;
+-	swi(Wimp_GetWindowState, 0, block);
+-	miny = block[4];
+-	swi(Wimp_GetWindowOutline, 0, block);
+-	swi(Wimp_ForceRedraw, -1,
+-			block[1], miny,
+-			block[3], block[4]);
+-    }
+-}
+-
+-/* Turn a vimmenu_T structure into a wimp menu structure.
+- * -1 if resulting menu is empty.
+- * Only the children and dname items in the root menu are used.
+- */
+-    int *
+-ro_build_menu(menu)
+-    vimmenu_T	*menu;
+-{
+-    int		*wimp_menu;
+-    int		width = 4;
+-    int		w;
+-    int		size = 28;
+-    vimmenu_T	*item;
+-    int		*wimp_item;
+-
+-    /* Find out how big the menu is so we can allocate memory for it */
+-    for (item = menu-> children; item; item = item-> next)
+-    {
+-	if (item-> hidden == FALSE && !menu_is_separator(item->name))
+-	    size += 24;
+-    }
+-
+-    if (size <= 28)
+-	return (int *) -1;		/* No children - shouldn't happen */
+-
+-    wimp_menu = (int *) alloc(size);
+-
+-    wimp_menu[0] = (int) menu-> dname;
+-    wimp_menu[1] = -1;
+-    wimp_menu[2] = 0;
+-    wimp_menu[3] = 0x00070207;
+-    wimp_menu[5] = 44;
+-    wimp_menu[6] = 0;
+-
+-    wimp_item = wimp_menu + 7;
+-
+-    for (item = menu-> children; item; item = item-> next)
+-    {
+-	if (menu_is_separator(item-> name))
+-	{
+-	    /* This menu entry is actually a separator. If it is not the first
+-	     * menu entry then mark the previous menu item as needing a dotted
+-	     * line after it.
+-	     */
+-	    if (wimp_item > wimp_menu + 7)
+-		wimp_item[-6] |= 0x2;
+-	}
+-	else if (item-> hidden == FALSE)
+-	{
+-	    wimp_item[0] = 0;
+-	    wimp_item[1] = item-> children ? (int) ro_build_menu(item) : -1;
+-	    wimp_item[2] = 0x07009131 | (item-> greyed_out << 22);
+-	    wimp_item[3] = (int) item-> dname;
+-	    wimp_item[4] = -1;
+-	    wimp_item[5] = (int) item;  /* Stuff the menu address in this unused space */
+-
+-	    w = strlen(item-> dname) + 1;
+-	    if (w > width)
+-		width = w;
+-	    wimp_item += 6;
+-	}
+-    }
+-
+-    wimp_menu[4] = (width + 2) * 16;
+-    wimp_menu[7]  |= 0x100;	    /* Menu title is indirected */
+-    wimp_item[-6] |= 0x080;	    /* Last entry in menu */
+-    return wimp_menu;
+-}
+-
+-    static void
+-ro_remove_menu(menu)
+-    int	    *menu;
+-{
+-    int	    *item = menu + 7;
+-
+-    if (menu == NULL || menu == (int *) -1)
+-	return;
+-
+-    for (;;)
+-    {
+-	if (item[1] != -1)
+-	    ro_remove_menu((int *) item[1]);	/* Remove sub-menu */
+-	if (item[0] & 0x80)
+-	    break;			/* This was the last entry */
+-	item += 6;
+-    }
+-    vim_free(menu);
+-}
+-
+-    void
+-gui_mch_show_popupmenu(menu)
+-    vimmenu_T	*menu;
+-{
+-    int		block[10];
+-
+-    /* Remove the existing menu, if any */
+-    if (wimp_menu != (int *) -1)
+-    {
+-	swi(Wimp_CreateMenu, 0, -1);
+-	ro_remove_menu(wimp_menu);
+-	wimp_menu = (int *) -1;
+-    }
+-
+-    wimp_menu = ro_build_menu(menu);
+-    if (wimp_menu != (int *) -1)
+-    {
+-	swi(Wimp_GetPointerInfo, 0, block);
+-	swi(Wimp_CreateMenu, 0, wimp_menu, block[0] - 64, block[1] + 64);
+-    }
+-}
+-
+-/* Run a command using the TaskWindow module.
+- * If SHELL_FILTER is set then output is not echoed to the screen,
+- * If it is not set, then \r is not sent to the output file.
+- */
+-    int
+-gui_mch_call_shell(cmd, options)
+-    char_u  *cmd;
+-    int	    options;	/* SHELL_FILTER if called by do_filter() */
+-			/* SHELL_COOKED if term needs cooked mode */
+-{
+-    char_u  task_cmd[256];	/* Contains *TaskWindow command. */
+-    int	    block[64];
+-    int	    reason;
+-    char_u  *out;
+-    char_u  c;
+-    int	    old_msg_col;
+-    char_u  *out_redir;
+-    int	    length;
+-    FILE    *out_file = NULL;
+-
+-    out_redir = strstr(cmd, " > ");
+-    if (out_redir == NULL)
+-	length = strlen(cmd);	/* No redirection. */
+-    else
+-    {
+-	length = out_redir - cmd;
+-	out_file = fopen(out_redir + 3, "wb");
+-	if (out_file == NULL)
+-	    smsg("WARNING : Can't open file %s for writing\n", out_redir + 3);
+-    }
+-
+-    if (length > 180)
+-    {
+-	if (out_file)
+-	    fclose(out_file);
+-	return FAIL;		/* Command too long. */
+-    }
+-
+-    strcpy(task_cmd, "TaskWindow \"");
+-    strncpy(task_cmd + 12, cmd, length);
+-    sprintf(task_cmd + 12 + length,
+-	    "\" -task &%08x -ctrl -quit -name \"Vim command\"",
+-	    task_handle);
+-
+-    if (options & SHELL_COOKED)
+-	settmode(TMODE_COOK);
+-
+-    if (xswi(Wimp_StartTask, task_cmd) & v_flag)
+-    {
+-	/* Failed to even start a new task (out of memory?) */
+-	settmode(TMODE_RAW);
+-	if (out_file)
+-	    fclose(out_file);
+-	return FAIL;
+-    }
+-
+-    /* Wait for the child process to initialise. */
+-    child_handle = 0;
+-    while (!child_handle)
+-    {
+-	reason = wimp_poll(0, block);
+-	if ((reason == 17 || reason == 18) && block[4] == 0x808c2)
+-	    child_handle = block[1];
+-	else
+-	    process_event(reason, block);
+-    }
+-
+-    /* Block until finished */
+-    while (child_handle)
+-    {
+-	reason = wimp_poll(1, block);
+-	if (reason == 3 || (reason == 8 && block[6] == 3))
+-	{
+-	    /* Close window request or CTRL-C - kill child task. */
+-	    block[0] = 20;
+-	    block[3] = 0;
+-	    block[4] = 0x808c4;	    /* Morite */
+-	    swi(Wimp_SendMessage, 17, block, child_handle);
+-	    MSG_PUTS(_("\nSending message to terminate child process.\n"));
+-	    continue;
+-	}
+-	else if (reason == 8)
+-	{
+-	    block[0] = 28;
+-	    block[3] = 0;
+-	    block[4] = 0x808c0;	    /* Input */
+-	    block[5] = 1;
+-	    /* Block[6] is OK as it is! */
+-	    swi(Wimp_SendMessage, 17, block, child_handle);
+-	    continue;
+-	}
+-	else if (reason == 17 || reason == 18)
+-	{
+-	    if (block[4] == 0x808c1)
+-	    {
+-		/* Ack message. */
+-		block[3] = block[2];
+-		swi(Wimp_SendMessage, 19, block, block[1]);
+-		out = (char_u *)block + 24;
+-		old_msg_col = msg_col;
+-		while (block[5]--)
+-		{
+-		    c = *out++;
+-		    if (out_file && (c != '\r' || (options & SHELL_FILTER)))
+-			fputc(c, out_file);
+-		    if ((options & SHELL_FILTER) == 0)
+-		    {
+-			if (c == 127)
+-			    msg_puts("\b \b");
+-			else if (c > 31)
+-			    msg_putchar(c);
+-			else if (c == 10)
+-			{
+-			    lines_left = 8;	/* Don't do More prompt! */
+-			    msg_putchar(10);
+-			}
+-		    }
+-		}
+-		/* Flush output to the screen. */
+-		windgoto(msg_row, msg_col);
+-		out_flush();
+-		continue;
+-	    }
+-	}
+-	process_event(reason, block);
+-    }
+-    msg_putchar('\n');
+-    settmode(TMODE_RAW);
+-    if (out_file)
+-	fclose(out_file);
+-    return OK;
+-}
+-
+-/* Like strsave(), but stops at any control char */
+-    char_u *
+-wimp_strsave(str)
+-    char    *str;
+-{
+-    int	    strlen = 0;
+-    char_u  *retval;
+-    while (str[strlen] > 31)
+-	strlen++;
+-    retval = alloc(strlen + 1);
+-    if (retval)
+-    {
+-	memcpy(retval, str, strlen);
+-	retval[strlen] = '\0';
+-    }
+-    return retval;
+-}
+-
+-/* If we are saving then pop up a standard RISC OS save box.
+- * Otherwise, open a directory viewer on the given directory (and return NULL)
+- * The string we return will be freed later.
+- */
+-    char_u *
+-gui_mch_browse(saving, title, dflt, ext, initdir, filter)
+-    int		saving;		/* write action */
+-    char_u	*title;		/* title for the window */
+-    char_u	*dflt;		/* default file name */
+-    char_u	*ext;		/* extension added */
+-    char_u	*initdir;	/* initial directory, NULL for current dir */
+-    char_u	*filter;	/* file name filter */
+-{
+-    char command[256];
+-    int length;
+-
+-    if (saving)
+-    {
+-	int	block[64];
+-	int	reason;
+-	int	done_save = FALSE;
+-	char_u	*retval = NULL;
+-	char_u  *sprname;
+-	char_u	*fname;
+-	int	dragging_icon = FALSE;
+-	int	filetype;
+-
+-	if (!dflt)
+-	    dflt = "TextFile";
+-
+-	block[0] = save_window;
+-	block[1] = 0;
+-	swi(Wimp_GetIconState, 0, block);
+-	sprname = ((char_u *) block[7]);
+-	block[1] = 1;
+-	swi(Wimp_GetIconState, 0, block);
+-	fname = ((char *) block[7]);
+-	strncpy(fname, dflt, 255);
+-
+-	if (xswi(OS_FSControl, 31, curbuf->b_p_oft) & v_flag)
+-	{
+-	    filetype = 0xfff;
+-	    strcpy(sprname + 5, "xxx");
+-	}
+-	else
+-	{
+-	    filetype = r2;
+-	    sprintf(sprname + 5, "%03x", filetype);
+-	}
+-
+-	/* Open the save box */
+-
+-	swi(Wimp_GetPointerInfo, 0, block);
+-	swi(Wimp_CreateMenu, 0, save_window, block[0] - 64, block[1] + 64);
+-	swi(Wimp_SetCaretPosition, save_window, 1, 0, 0, -1, -1);
+-
+-	while (!done_save)
+-	{
+-	    reason = wimp_poll(1, block);
+-	    switch (reason)
+-	    {
+-		case 1:
+-		    redraw_window(block);
+-		    break;
+-		case 2:
+-		    if (block[0] == save_window)
+-			swi(Wimp_OpenWindow, 0, block);
+-		    else
+-			ro_open_window(block);
+-		    break;
+-		case 3:
+-		    done_save = TRUE;
+-		    break;
+-		case 6:
+-		    if (block[3] != save_window)
+-			done_save = TRUE;
+-		    else
+-		    {
+-			int drag_box[4];
+-			int min_x, max_y;
+-
+-			switch (block[4])
+-			{
+-			    case    0: /* Start drag */
+-				block[0] = save_window;
+-				swi(Wimp_GetWindowState, 0, block);
+-				min_x = block[1];
+-				max_y = block[4];
+-				block[1] = 0;
+-				swi(Wimp_GetIconState, 0, block);
+-				drag_box[0] = block[2] + min_x;
+-				drag_box[1] = block[3] + max_y;
+-				drag_box[2] = block[4] + min_x;
+-				drag_box[3] = block[5] + max_y;
+-
+-				swi(DragASprite_Start,
+-					0x45,
+-					1,
+-					sprname,
+-					drag_box);
+-				dragging_icon = TRUE;
+-				break;
+-			    case    2: /* OK */
+-				retval = wimp_strsave(fname);
+-				done_save = TRUE;
+-				break;
+-			    case    3: /* Cancel */
+-				done_save = TRUE;
+-				break;
+-			}
+-		    }
+-		    break;
+-		case 7:
+-		    if (dragging_icon)
+-		    {
+-			int len = 0;
+-
+-			dragging_icon = FALSE;
+-			swi(Wimp_GetPointerInfo, 0, block);
+-			block[5] = block[3];
+-			block[6] = block[4];
+-			block[7] = block[0];
+-			block[8] = block[1];
+-			block[9] = 0;		/* Don't know the size */
+-			block[10] = filetype;
+-
+-			while (fname[len] > 31)
+-			{
+-			    if (fname[len] == '.')
+-			    {
+-				fname += len + 1;
+-				len = 0;
+-			    }
+-			    else
+-				len++;
+-			}
+-			if (len > 211)
+-			    len = 211;
+-
+-			memcpy(((char_u *) block) + 44, fname, len);
+-			((char_u *)block)[44 + len] = '\0';
+-
+-			block[0] = (len + 48) & 0xfc;
+-			block[3] = 0;
+-			block[4] = 1;	    /* DataSave */
+-
+-			swi(Wimp_SendMessage, 17, block, block[5], block[6]);
+-		    }
+-		    else
+-			ro_drag_finished(block);
+-		    break;
+-		case 8:
+-		    if (block[6] == 13)
+-		    {
+-			retval = wimp_strsave(fname);
+-			done_save = TRUE;
+-		    }
+-		    else if (block[6] == 0x1b)
+-			done_save = TRUE;
+-		    else
+-			swi(Wimp_ProcessKey, block[6]);
+-		    break;
+-		case 17:
+-		case 18:
+-		    if (block[4] == 2 && block[9] != -1)
+-		    {
+-			/* DataSaveAck from dragging icon. */
+-			retval = wimp_strsave(((char_u *) block) + 44);
+-			done_save = TRUE;
+-		    }
+-		    else if (block[4] == 0x400c9)
+-		    {
+-			/* MenusDeleted */
+-			done_save = TRUE;
+-		    }
+-		    else
+-			ro_message(block);
+-		    break;
+-	    }
+-	}
+-	block[0] = save_window;
+-	swi(Wimp_CloseWindow, 0, block);
+-	swi(Wimp_GetCaretPosition, 0, block);
+-	if (block[0] == -1)
+-	    swi(Wimp_SetCaretPosition, gui.window_handle, -1, 0, 0, -1, -1);
+-
+-	return retval;
+-    }
+-    else if (initdir)
+-    {
+-	/* Open a directory viewer */
+-	length = strlen(initdir);
+-
+-	if (length > 240)
+-	    return NULL;	/* Path too long! */
+-
+-	length = sprintf(command, "Filer_OpenDir %s", initdir);
+-	while (command[length - 1] == '.')
+-	    length--;
+-	command[length] = '\0';
+-	swi(OS_CLI, command);
+-    }
+-    return NULL;
+-}
+diff -Naur vim73.orig/src/gui_riscos.h vim73/src/gui_riscos.h
+--- vim73.orig/src/gui_riscos.h	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/gui_riscos.h	1970-01-01 00:00:00.000000000 +0000
+@@ -1,32 +0,0 @@
+-/* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved	by Bram Moolenaar
+- *
+- * Do ":help uganda"  in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- */
+-
+-#define FEAT_BROWSE
+-
+-#define TASK 0x4b534154
+-
+-/* Nested wimp flags: */
+-#define CHILD_FIX_TO_WORKAREA	0
+-#define CHILD_FIX_TO_LEFT	1
+-#define CHILD_FIX_TO_BOTTOM	1
+-#define CHILD_FIX_TO_RIGHT	2
+-#define CHILD_FIX_TO_TOP	2
+-
+-#define CHILD_SELF_SCROLL	0
+-#define CHILD_PARENT_SCROLL	1
+-
+-#define CHILD_LEFT		16
+-#define CHILD_BOTTOM		18
+-#define CHILD_RIGHT		20
+-#define CHILD_TOP		22
+-#define CHILD_SCROLL_X		24
+-#define CHILD_SCROLL_Y		26
+-
+-int wimp_poll(int mask, int *block);
+-int wimp_poll_idle(int mask, int *block, int end_time);
+-void ro_open_main(int *block);
+diff -Naur vim73.orig/src/gui_w16.c vim73/src/gui_w16.c
+--- vim73.orig/src/gui_w16.c	2010-07-18 13:03:38.000000000 +0000
++++ vim73/src/gui_w16.c	2013-06-07 17:07:31.262252740 +0000
+@@ -21,6 +21,12 @@
+  *
+  */
+ 
++/* Win16 doesn't use the "W" methods. */
++#define pDispatchMessage DispatchMessage
++#define pGetMessage GetMessage
++#define pIsDialogMessage IsDialogMessage
++#define pPeekMessage PeekMessage
++
+ /*
+  * Include the common stuff for MS-Windows GUI.
+  */
+@@ -505,7 +511,7 @@
+     workarea_rect.right = GetSystemMetrics(SM_CXSCREEN);
+     workarea_rect.bottom = GetSystemMetrics(SM_CYFULLSCREEN);
+ 
+-    /* get current posision of our window */
++    /* get current position of our window */
+     wndpl.length = sizeof(WINDOWPLACEMENT);
+     GetWindowPlacement(s_hwnd, &wndpl);
+     if (wndpl.showCmd == SW_SHOWNORMAL)
+@@ -1098,7 +1104,8 @@
+     char_u	*message,
+     char_u	*buttons,
+     int		 dfltbutton,
+-    char_u	*textfield)
++    char_u	*textfield,
++    int		ex_cmd)
+ {
+     FARPROC	dp;
+     LPWORD	p, pnumitems;
+@@ -1154,7 +1161,7 @@
+ 	return -1;
+ 
+     /*
+-     * make a copy of 'buttons' to fiddle with it.  complier grizzles because
++     * make a copy of 'buttons' to fiddle with it.  compiler grizzles because
+      * vim_strsave() doesn't take a const arg (why not?), so cast away the
+      * const.
+      */
+@@ -1514,7 +1521,12 @@
+ 
+ 
+ #if defined(FEAT_TOOLBAR) || defined(PROTO)
+-#include "gui_w3~1.h"
++
++/* cproto fails on missing include files */
++#ifndef PROTO
++# include "gui_w3~1.h"
++#endif
++
+ /*
+  * Create the toolbar, initially unpopulated.
+  *  (just like the menu, there are no defaults, it's all
+diff -Naur vim73.orig/src/gui_w32.c vim73/src/gui_w32.c
+--- vim73.orig/src/gui_w32.c	2010-08-08 13:05:26.000000000 +0000
++++ vim73/src/gui_w32.c	2013-06-07 17:07:31.285586007 +0000
+@@ -198,11 +198,17 @@
+ static UINT_PTR	    BevalTimerId = 0;
+ static DWORD	    LastActivity = 0;
+ 
++
++/* cproto fails on missing include files */
++#ifndef PROTO
++
+ /*
+  * excerpts from headers since this may not be presented
+  * in the extremely old compilers
+  */
+-#include <pshpack1.h>
++# include <pshpack1.h>
++
++#endif
+ 
+ typedef struct _DllVersionInfo
+ {
+@@ -213,7 +219,9 @@
+     DWORD dwPlatformID;
+ } DLLVERSIONINFO;
+ 
+-#include <poppack.h>
++#ifndef PROTO
++# include <poppack.h>
++#endif
+ 
+ typedef struct tagTOOLINFOA_NEW
+ {
+@@ -289,13 +297,13 @@
+ 
+ #ifdef FEAT_MENU
+ static UINT	s_menu_id = 100;
++#endif
+ 
+ /*
+  * Use the system font for dialogs and tear-off menus.  Remove this line to
+  * use DLG_FONT_NAME.
+  */
+-# define USE_SYSMENU_FONT
+-#endif
++#define USE_SYSMENU_FONT
+ 
+ #define VIM_NAME	"vim"
+ #define VIM_CLASS	"Vim"
+@@ -798,7 +806,7 @@
+ 		if (pt.y < rect.top)
+ 		{
+ 		    show_tabline_popup_menu();
+-		    return 0;
++		    return 0L;
+ 		}
+ 	    }
+ 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+@@ -828,7 +836,10 @@
+ 
+     case WM_ENDSESSION:
+ 	if (wParam)	/* system only really goes down when wParam is TRUE */
++	{
+ 	    _OnEndSession();
++	    return 0L;
++	}
+ 	break;
+ 
+     case WM_CHAR:
+@@ -866,7 +877,7 @@
+ 	 * are received, mouse pointer remains hidden. */
+ 	return MyWindowProc(hwnd, uMsg, wParam, lParam);
+ #else
+-	return 0;
++	return 0L;
+ #endif
+ 
+     case WM_SIZING:	/* HANDLE_MSG doesn't seem to handle this one */
+@@ -874,7 +885,7 @@
+ 
+     case WM_MOUSEWHEEL:
+ 	_OnMouseWheel(hwnd, HIWORD(wParam));
+-	break;
++	return 0L;
+ 
+ 	/* Notification for change in SystemParametersInfo() */
+     case WM_SETTINGCHANGE:
+@@ -987,13 +998,19 @@
+ 	    case TCN_SELCHANGE:
+ 		if (gui_mch_showing_tabline()
+ 				  && ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
++		{
+ 		    send_tabline_event(TabCtrl_GetCurSel(s_tabhwnd) + 1);
++		    return 0L;
++		}
+ 		break;
+ 
+ 	    case NM_RCLICK:
+ 		if (gui_mch_showing_tabline()
+ 			&& ((LPNMHDR)lParam)->hwndFrom == s_tabhwnd)
++		{
+ 		    show_tabline_popup_menu();
++		    return 0L;
++		}
+ 		break;
+ # endif
+ 	    default:
+@@ -1037,6 +1054,7 @@
+ 		out_flush();
+ 		did_menu_tip = TRUE;
+ 	    }
++	    return 0L;
+ 	}
+ 	break;
+ #endif
+@@ -1079,18 +1097,19 @@
+     case WM_IME_NOTIFY:
+ 	if (!_OnImeNotify(hwnd, (DWORD)wParam, (DWORD)lParam))
+ 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+-	break;
++	return 1L;
++
+     case WM_IME_COMPOSITION:
+ 	if (!_OnImeComposition(hwnd, wParam, lParam))
+ 	    return MyWindowProc(hwnd, uMsg, wParam, lParam);
+-	break;
++	return 1L;
+ #endif
+ 
+     default:
+ 	if (uMsg == msh_msgmousewheel && msh_msgmousewheel != 0)
+ 	{   /* handle MSH_MOUSEWHEEL messages for Intellimouse */
+ 	    _OnMouseWheel(hwnd, HIWORD(wParam));
+-	    break;
++	    return 0L;
+ 	}
+ #ifdef MSWIN_FIND_REPLACE
+ 	else if (uMsg == s_findrep_msg && s_findrep_msg != 0)
+@@ -1101,7 +1120,7 @@
+ 	return MyWindowProc(hwnd, uMsg, wParam, lParam);
+     }
+ 
+-    return 1;
++    return DefWindowProc(hwnd, uMsg, wParam, lParam);
+ }
+ 
+ /*
+@@ -1239,7 +1258,7 @@
+ 
+ #ifdef FEAT_NETBEANS_INTG
+     {
+-	/* stolen from gui_x11.x */
++	/* stolen from gui_x11.c */
+ 	int arg;
+ 
+ 	for (arg = 1; arg < *argc; arg++)
+@@ -1260,7 +1279,7 @@
+ 
+     /* try and load the user32.dll library and get the entry points for
+      * multi-monitor-support. */
+-    if ((user32_lib = LoadLibrary("User32.dll")) != NULL)
++    if ((user32_lib = vimLoadLib("User32.dll")) != NULL)
+     {
+ 	pMonitorFromWindow = (TMonitorFromWindow)GetProcAddress(user32_lib,
+ 							 "MonitorFromWindow");
+@@ -1270,6 +1289,25 @@
+ 	pGetMonitorInfo = (TGetMonitorInfo)GetProcAddress(user32_lib,
+ 							  "GetMonitorInfoA");
+     }
++
++#ifdef FEAT_MBYTE
++    /* If the OS is Windows NT, use wide functions;
++     * this enables common dialogs input unicode from IME. */
++    if (os_version.dwPlatformId == VER_PLATFORM_WIN32_NT)
++    {
++	pDispatchMessage = DispatchMessageW;
++	pGetMessage = GetMessageW;
++	pIsDialogMessage = IsDialogMessageW;
++	pPeekMessage = PeekMessageW;
++    }
++    else
++    {
++	pDispatchMessage = DispatchMessageA;
++	pGetMessage = GetMessageA;
++	pIsDialogMessage = IsDialogMessageA;
++	pPeekMessage = PeekMessageA;
++    }
++#endif
+ }
+ 
+ /*
+@@ -1379,7 +1417,8 @@
+ 	    s_hwnd = CreateWindowEx(
+ 		WS_EX_MDICHILD,
+ 		szVimWndClass, "Vim MSWindows GUI",
+-		WS_OVERLAPPEDWINDOW | WS_CHILD | WS_CLIPSIBLINGS | 0xC000,
++		WS_OVERLAPPEDWINDOW | WS_CHILD
++				 | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | 0xC000,
+ 		gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ 		gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 		100,				/* Any value will do */
+@@ -1410,7 +1449,8 @@
+ 	 * titlebar, it will be reparented below. */
+ 	s_hwnd = CreateWindow(
+ 		szVimWndClass, "Vim MSWindows GUI",
+-		win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP,
++		(win_socket_id == 0 ? WS_OVERLAPPEDWINDOW : WS_POPUP)
++					  | WS_CLIPSIBLINGS | WS_CLIPCHILDREN,
+ 		gui_win_x == -1 ? CW_USEDEFAULT : gui_win_x,
+ 		gui_win_y == -1 ? CW_USEDEFAULT : gui_win_y,
+ 		100,				/* Any value will do */
+@@ -1573,6 +1613,15 @@
+ # endif
+ #endif
+ 
++#ifdef FEAT_EVAL
++# ifndef HandleToLong
++/* HandleToLong() only exists in compilers that can do 64 bit builds */
++#  define HandleToLong(h) ((long)(h))
++# endif
++    /* set the v:windowid variable */
++    set_vim_var_nr(VV_WINDOWID, HandleToLong(s_hwnd));
++#endif
++
+ theend:
+     /* Display any pending error messages */
+     display_errors();
+@@ -1620,16 +1669,14 @@
+ {
+     RECT	workarea_rect;
+     int		win_width, win_height;
+-    int		win_xpos, win_ypos;
+     WINDOWPLACEMENT wndpl;
+-    int		workarea_left;
+ 
+     /* Try to keep window completely on screen. */
+     /* Get position of the screen work area.  This is the part that is not
+      * used by the taskbar or appbars. */
+     get_work_area(&workarea_rect);
+ 
+-    /* Get current posision of our window.  Note that the .left and .top are
++    /* Get current position of our window.  Note that the .left and .top are
+      * relative to the work area.  */
+     wndpl.length = sizeof(WINDOWPLACEMENT);
+     GetWindowPlacement(s_hwnd, &wndpl);
+@@ -1644,9 +1691,6 @@
+ 	GetWindowPlacement(s_hwnd, &wndpl);
+     }
+ 
+-    win_xpos = wndpl.rcNormalPosition.left;
+-    win_ypos = wndpl.rcNormalPosition.top;
+-
+     /* compute the size of the outside of the window */
+     win_width = width + GetSystemMetrics(SM_CXFRAME) * 2;
+     win_height = height + GetSystemMetrics(SM_CYFRAME) * 2
+@@ -1656,36 +1700,32 @@
+ #endif
+ 			;
+ 
+-    /* There is an inconsistency when using two monitors and Vim is on the
+-     * second (right) one: win_xpos will be the offset from the workarea of
+-     * the left monitor.  While with one monitor it's the offset from the
+-     * workarea (including a possible taskbar on the left).  Detect the second
+-     * monitor by checking for the left offset to be quite big. */
+-    if (workarea_rect.left > 300)
+-	workarea_left = 0;
+-    else
+-	workarea_left = workarea_rect.left;
++    /* The following should take care of keeping Vim on the same monitor, no
++     * matter if the secondary monitor is left or right of the primary
++     * monitor. */
++    wndpl.rcNormalPosition.right = wndpl.rcNormalPosition.left + win_width;
++    wndpl.rcNormalPosition.bottom = wndpl.rcNormalPosition.top + win_height;
+ 
+-    /* If the window is going off the screen, move it on to the screen.
+-     * win_xpos and win_ypos are relative to the workarea. */
++    /* If the window is going off the screen, move it on to the screen. */
+     if ((direction & RESIZE_HOR)
+-	    && workarea_left + win_xpos + win_width > workarea_rect.right)
+-	win_xpos = workarea_rect.right - win_width - workarea_left;
++	    && wndpl.rcNormalPosition.right > workarea_rect.right)
++	OffsetRect(&wndpl.rcNormalPosition,
++		workarea_rect.right - wndpl.rcNormalPosition.right, 0);
+ 
+-    if ((direction & RESIZE_HOR) && win_xpos < 0)
+-	win_xpos = 0;
++    if ((direction & RESIZE_HOR)
++	    && wndpl.rcNormalPosition.left < workarea_rect.left)
++	OffsetRect(&wndpl.rcNormalPosition,
++		workarea_rect.left - wndpl.rcNormalPosition.left, 0);
+ 
+     if ((direction & RESIZE_VERT)
+-	  && workarea_rect.top + win_ypos + win_height > workarea_rect.bottom)
+-	win_ypos = workarea_rect.bottom - win_height - workarea_rect.top;
++	    && wndpl.rcNormalPosition.bottom > workarea_rect.bottom)
++	OffsetRect(&wndpl.rcNormalPosition,
++		0, workarea_rect.bottom - wndpl.rcNormalPosition.bottom);
+ 
+-    if ((direction & RESIZE_VERT) && win_ypos < 0)
+-	win_ypos = 0;
+-
+-    wndpl.rcNormalPosition.left = win_xpos;
+-    wndpl.rcNormalPosition.right = win_xpos + win_width;
+-    wndpl.rcNormalPosition.top = win_ypos;
+-    wndpl.rcNormalPosition.bottom = win_ypos + win_height;
++    if ((direction & RESIZE_VERT)
++	    && wndpl.rcNormalPosition.top < workarea_rect.top)
++	OffsetRect(&wndpl.rcNormalPosition,
++		0, workarea_rect.top - wndpl.rcNormalPosition.top);
+ 
+     /* set window position - we should use SetWindowPlacement rather than
+      * SetWindowPos as the MSDN docs say the coord systems returned by
+@@ -3000,7 +3040,8 @@
+     char_u	*message,
+     char_u	*buttons,
+     int		 dfltbutton,
+-    char_u	*textfield)
++    char_u	*textfield,
++    int		ex_cmd)
+ {
+     WORD	*p, *pdlgtemplate, *pnumitems;
+     DWORD	*dwp;
+@@ -3059,7 +3100,7 @@
+ 	return -1;
+ 
+     /*
+-     * make a copy of 'buttons' to fiddle with it.  complier grizzles because
++     * make a copy of 'buttons' to fiddle with it.  compiler grizzles because
+      * vim_strsave() doesn't take a const arg (why not?), so cast away the
+      * const.
+      */
+@@ -4188,7 +4229,7 @@
+     static void
+ dyn_imm_load(void)
+ {
+-    hLibImm = LoadLibrary("imm32.dll");
++    hLibImm = vimLoadLib("imm32.dll");
+     if (hLibImm == NULL)
+ 	return;
+ 
+@@ -4350,7 +4391,7 @@
+     }
+ 
+     sign.hImage = NULL;
+-    ext = signfile + STRLEN(signfile) - 4; /* get extention */
++    ext = signfile + STRLEN(signfile) - 4; /* get extension */
+     if (ext > signfile)
+     {
+ 	int do_load = 1;
+diff -Naur vim73.orig/src/gui_w48.c vim73/src/gui_w48.c
+--- vim73.orig/src/gui_w48.c	2010-07-27 19:46:04.000000000 +0000
++++ vim73/src/gui_w48.c	2013-06-07 17:07:31.318919245 +0000
+@@ -25,6 +25,10 @@
+ #ifdef DEBUG
+ # include <tchar.h>
+ #endif
++
++/* cproto fails on missing include files */
++#ifndef PROTO
++
+ #ifndef __MINGW32__
+ # include <shellapi.h>
+ #endif
+@@ -44,6 +48,8 @@
+ # include "glbl_ime.h"
+ #endif
+ 
++#endif /* PROTO */
++
+ #ifdef FEAT_MENU
+ # define MENUHINTS		/* show menu hints in command line */
+ #endif
+@@ -317,10 +323,15 @@
+ 
+ /*
+  * For control IME.
++ *
++ * These LOGFONT used for IME.
+  */
+ #ifdef FEAT_MBYTE
+ # ifdef USE_IM_CONTROL
++/* holds LOGFONT for 'guifontwide' if available, otherwise 'guifont' */
+ static LOGFONT norm_logfont;
++/* holds LOGFONT for 'guifont' always. */
++static LOGFONT sub_logfont;
+ # endif
+ #endif
+ 
+@@ -328,6 +339,10 @@
+ static LRESULT _OnImeNotify(HWND hWnd, DWORD dwCommand, DWORD dwData);
+ #endif
+ 
++#if defined(FEAT_MBYTE) && defined(WIN3264)
++static char_u *convert_filter(char_u *s);
++#endif
++
+ #ifdef DEBUG_PRINT_ERROR
+ /*
+  * Print out the last Windows error message
+@@ -390,7 +405,7 @@
+     KillTimer(NULL, idEvent);
+ 
+     /* Eat spurious WM_TIMER messages */
+-    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
++    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ 	;
+ 
+     if (blink_state == BLINK_ON)
+@@ -418,7 +433,7 @@
+     {
+ 	KillTimer(NULL, blink_timer);
+ 	/* Eat spurious WM_TIMER messages */
+-	while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
++	while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ 	    ;
+ 	blink_timer = 0;
+     }
+@@ -476,7 +491,7 @@
+     s_timed_out = TRUE;
+ 
+     /* Eat spurious WM_TIMER messages */
+-    while (PeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
++    while (pPeekMessage(&msg, hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ 	;
+     if (idEvent == s_wait_timer)
+ 	s_wait_timer = 0;
+@@ -1207,7 +1222,7 @@
+ 
+     /* When side scroll bar is unshown, the size of window will change.
+      * then, the text area move left or right. thus client rect should be
+-     * forcely redraw. (Yasuhiro Matsumoto) */
++     * forcedly redrawn. (Yasuhiro Matsumoto) */
+     if (oldx != x || oldy != y)
+     {
+ 	InvalidateRect(s_hwnd, NULL, FALSE);
+@@ -1411,12 +1426,12 @@
+     static guicolor_tTable table[] =
+     {
+ 	{"Black",		RGB(0x00, 0x00, 0x00)},
+-	{"DarkGray",		RGB(0x80, 0x80, 0x80)},
+-	{"DarkGrey",		RGB(0x80, 0x80, 0x80)},
++	{"DarkGray",		RGB(0xA9, 0xA9, 0xA9)},
++	{"DarkGrey",		RGB(0xA9, 0xA9, 0xA9)},
+ 	{"Gray",		RGB(0xC0, 0xC0, 0xC0)},
+ 	{"Grey",		RGB(0xC0, 0xC0, 0xC0)},
+-	{"LightGray",		RGB(0xE0, 0xE0, 0xE0)},
+-	{"LightGrey",		RGB(0xE0, 0xE0, 0xE0)},
++	{"LightGray",		RGB(0xD3, 0xD3, 0xD3)},
++	{"LightGrey",		RGB(0xD3, 0xD3, 0xD3)},
+ 	{"Gray10",		RGB(0x1A, 0x1A, 0x1A)},
+ 	{"Grey10",		RGB(0x1A, 0x1A, 0x1A)},
+ 	{"Gray20",		RGB(0x33, 0x33, 0x33)},
+@@ -1441,19 +1456,19 @@
+ 	{"LightRed",		RGB(0xFF, 0xA0, 0xA0)},
+ 	{"DarkBlue",		RGB(0x00, 0x00, 0x80)},
+ 	{"Blue",		RGB(0x00, 0x00, 0xFF)},
+-	{"LightBlue",		RGB(0xA0, 0xA0, 0xFF)},
++	{"LightBlue",		RGB(0xAD, 0xD8, 0xE6)},
+ 	{"DarkGreen",		RGB(0x00, 0x80, 0x00)},
+ 	{"Green",		RGB(0x00, 0xFF, 0x00)},
+-	{"LightGreen",		RGB(0xA0, 0xFF, 0xA0)},
++	{"LightGreen",		RGB(0x90, 0xEE, 0x90)},
+ 	{"DarkCyan",		RGB(0x00, 0x80, 0x80)},
+ 	{"Cyan",		RGB(0x00, 0xFF, 0xFF)},
+-	{"LightCyan",		RGB(0xA0, 0xFF, 0xFF)},
++	{"LightCyan",		RGB(0xE0, 0xFF, 0xFF)},
+ 	{"DarkMagenta",		RGB(0x80, 0x00, 0x80)},
+ 	{"Magenta",		RGB(0xFF, 0x00, 0xFF)},
+ 	{"LightMagenta",	RGB(0xFF, 0xA0, 0xFF)},
+ 	{"Brown",		RGB(0x80, 0x40, 0x40)},
+ 	{"Yellow",		RGB(0xFF, 0xFF, 0x00)},
+-	{"LightYellow",		RGB(0xFF, 0xFF, 0xA0)},
++	{"LightYellow",		RGB(0xFF, 0xFF, 0xE0)},
+ 	{"DarkYellow",		RGB(0xBB, 0xBB, 0x00)},
+ 	{"SeaGreen",		RGB(0x2E, 0x8B, 0x57)},
+ 	{"Orange",		RGB(0xFF, 0xA5, 0x00)},
+@@ -1707,7 +1722,7 @@
+     static char_u k10[] = {K_SPECIAL, 'k', ';', 0};
+ #endif
+ 
+-    GetMessage(&msg, NULL, 0, 0);
++    pGetMessage(&msg, NULL, 0, 0);
+ 
+ #ifdef FEAT_OLE
+     /* Look after OLE Automation commands */
+@@ -1718,7 +1733,7 @@
+ 	{
+ 	    /* Message can't be ours, forward it.  Fixes problem with Ultramon
+ 	     * 3.0.4 */
+-	    DispatchMessage(&msg);
++	    pDispatchMessage(&msg);
+ 	}
+ 	else
+ 	{
+@@ -1749,14 +1764,14 @@
+     if (msg.message == WM_USER)
+     {
+ 	MyTranslateMessage(&msg);
+-	DispatchMessage(&msg);
++	pDispatchMessage(&msg);
+ 	return;
+     }
+ #endif
+ 
+ #ifdef MSWIN_FIND_REPLACE
+     /* Don't process messages used by the dialog */
+-    if (s_findrep_hwnd != NULL && IsDialogMessage(s_findrep_hwnd, &msg))
++    if (s_findrep_hwnd != NULL && pIsDialogMessage(s_findrep_hwnd, &msg))
+     {
+ 	HandleMouseHide(msg.message, msg.lParam);
+ 	return;
+@@ -1810,7 +1825,8 @@
+ 		 * mapped we want to use the mapping instead. */
+ 		if (vk == VK_F10
+ 			&& gui.menu_is_active
+-			&& check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
++			&& check_map(k10, State, FALSE, TRUE, FALSE,
++							  NULL, NULL) == NULL)
+ 		    break;
+ #endif
+ 		if (GetKeyState(VK_SHIFT) & 0x8000)
+@@ -1924,9 +1940,10 @@
+     /* Check for <F10>: Default effect is to select the menu.  When <F10> is
+      * mapped we need to stop it here to avoid strange effects (e.g., for the
+      * key-up event) */
+-    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE) == NULL)
++    if (vk != VK_F10 || check_map(k10, State, FALSE, TRUE, FALSE,
++							  NULL, NULL) == NULL)
+ #endif
+-	DispatchMessage(&msg);
++	pDispatchMessage(&msg);
+ }
+ 
+ /*
+@@ -1941,7 +1958,7 @@
+     MSG	    msg;
+ 
+     if (!s_busy_processing)
+-	while (PeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
++	while (pPeekMessage(&msg, NULL, 0, 0, PM_NOREMOVE)
+ 						  && !vim_is_input_buf_full())
+ 	    process_message();
+ }
+@@ -2017,7 +2034,7 @@
+ 		KillTimer(NULL, s_wait_timer);
+ 
+ 		/* Eat spurious WM_TIMER messages */
+-		while (PeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
++		while (pPeekMessage(&msg, s_hwnd, WM_TIMER, WM_TIMER, PM_REMOVE))
+ 		    ;
+ 		s_wait_timer = 0;
+ 	    }
+@@ -2440,7 +2457,6 @@
+     TCITEM	tie;
+     int		nr = 0;
+     int		curtabidx = 0;
+-    RECT	rc;
+ #ifdef FEAT_MBYTE
+     static int	use_unicode = FALSE;
+     int		uu;
+@@ -2467,13 +2483,16 @@
+     tie.mask = TCIF_TEXT;
+     tie.iImage = -1;
+ 
++    /* Disable redraw for tab updates to eliminate O(N^2) draws. */
++    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)FALSE, 0);
++
+     /* Add a label for each tab page.  They all contain the same text area. */
+     for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, ++nr)
+     {
+ 	if (tp == curtab)
+ 	    curtabidx = nr;
+ 
+-	if (!TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
++	if (nr >= TabCtrl_GetItemCount(s_tabhwnd))
+ 	{
+ 	    /* Add the tab */
+ 	    tie.pszText = "-Empty-";
+@@ -2507,11 +2526,16 @@
+     }
+ 
+     /* Remove any old labels. */
+-    while (TabCtrl_GetItemRect(s_tabhwnd, nr, &rc))
++    while (nr < TabCtrl_GetItemCount(s_tabhwnd))
+ 	TabCtrl_DeleteItem(s_tabhwnd, nr);
+ 
+     if (TabCtrl_GetCurSel(s_tabhwnd) != curtabidx)
+ 	TabCtrl_SetCurSel(s_tabhwnd, curtabidx);
++
++    /* Re-enable redraw and redraw. */
++    SendMessage(s_tabhwnd, WM_SETREDRAW, (WPARAM)TRUE, 0);
++    RedrawWindow(s_tabhwnd, NULL, NULL,
++		    RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
+ }
+ 
+ /*
+@@ -3071,6 +3095,40 @@
+     return res;
+ }
+ 
++
++#ifdef FEAT_MBYTE_IME
++/*
++ * Set correct LOGFONT to IME.  Use 'guifontwide' if available, otherwise use
++ * 'guifont'
++ */
++    static void
++update_im_font()
++{
++    LOGFONT	lf_wide;
++
++    if (p_guifontwide != NULL && *p_guifontwide != NUL
++	    && gui.wide_font != NOFONT
++	    && GetObject((HFONT)gui.wide_font, sizeof(lf_wide), &lf_wide))
++	norm_logfont = lf_wide;
++    else
++	norm_logfont = sub_logfont;
++    im_set_font(&norm_logfont);
++}
++#endif
++
++#ifdef FEAT_MBYTE
++/*
++ * Handler of gui.wide_font (p_guifontwide) changed notification.
++ */
++    void
++gui_mch_wide_font_changed()
++{
++# ifdef FEAT_MBYTE_IME
++    update_im_font();
++# endif
++}
++#endif
++
+ /*
+  * Initialise vim to use the font with the given name.
+  * Return FAIL if the font could not be loaded, OK otherwise.
+@@ -3093,9 +3151,10 @@
+ 	font_name = lf.lfFaceName;
+ #if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
+     norm_logfont = lf;
++    sub_logfont = lf;
+ #endif
+ #ifdef FEAT_MBYTE_IME
+-    im_set_font(&lf);
++    update_im_font();
+ #endif
+     gui_mch_free_font(gui.norm_font);
+     gui.norm_font = font;
+@@ -3206,27 +3265,27 @@
+  * misc2.c! */
+ static LPCSTR mshape_idcs[] =
+ {
+-    MAKEINTRESOURCE(IDC_ARROW),		/* arrow */
+-    MAKEINTRESOURCE(0),			/* blank */
+-    MAKEINTRESOURCE(IDC_IBEAM),		/* beam */
+-    MAKEINTRESOURCE(IDC_SIZENS),	/* updown */
+-    MAKEINTRESOURCE(IDC_SIZENS),	/* udsizing */
+-    MAKEINTRESOURCE(IDC_SIZEWE),	/* leftright */
+-    MAKEINTRESOURCE(IDC_SIZEWE),	/* lrsizing */
+-    MAKEINTRESOURCE(IDC_WAIT),		/* busy */
++    IDC_ARROW,			/* arrow */
++    MAKEINTRESOURCE(0),		/* blank */
++    IDC_IBEAM,			/* beam */
++    IDC_SIZENS,			/* updown */
++    IDC_SIZENS,			/* udsizing */
++    IDC_SIZEWE,			/* leftright */
++    IDC_SIZEWE,			/* lrsizing */
++    IDC_WAIT,			/* busy */
+ #ifdef WIN3264
+-    MAKEINTRESOURCE(IDC_NO),		/* no */
++    IDC_NO,			/* no */
+ #else
+-    MAKEINTRESOURCE(IDC_ICON),		/* no */
++    IDC_ICON,			/* no */
+ #endif
+-    MAKEINTRESOURCE(IDC_ARROW),		/* crosshair */
+-    MAKEINTRESOURCE(IDC_ARROW),		/* hand1 */
+-    MAKEINTRESOURCE(IDC_ARROW),		/* hand2 */
+-    MAKEINTRESOURCE(IDC_ARROW),		/* pencil */
+-    MAKEINTRESOURCE(IDC_ARROW),		/* question */
+-    MAKEINTRESOURCE(IDC_ARROW),		/* right-arrow */
+-    MAKEINTRESOURCE(IDC_UPARROW),	/* up-arrow */
+-    MAKEINTRESOURCE(IDC_ARROW)		/* last one */
++    IDC_ARROW,			/* crosshair */
++    IDC_ARROW,			/* hand1 */
++    IDC_ARROW,			/* hand2 */
++    IDC_ARROW,			/* pencil */
++    IDC_ARROW,			/* question */
++    IDC_ARROW,			/* right-arrow */
++    IDC_UPARROW,		/* up-arrow */
++    IDC_ARROW			/* last one */
+ };
+ 
+     void
+@@ -3239,7 +3298,7 @@
+     else
+     {
+ 	if (shape >= MSHAPE_NUMBERED)
+-	    idc = MAKEINTRESOURCE(IDC_ARROW);
++	    idc = IDC_ARROW;
+ 	else
+ 	    idc = mshape_idcs[shape];
+ #ifdef SetClassLongPtr
+@@ -3273,28 +3332,21 @@
+ 
+ # if defined(FEAT_MBYTE) && defined(WIN3264)
+ /*
+- * Wide version of convert_filter().  Keep in sync!
++ * Wide version of convert_filter().
+  */
+     static WCHAR *
+ convert_filterW(char_u *s)
+ {
+-    WCHAR	*res;
+-    unsigned	s_len = (unsigned)STRLEN(s);
+-    unsigned	i;
++    char_u *tmp;
++    int len;
++    WCHAR *res;
+ 
+-    res = (WCHAR *)alloc((s_len + 3) * sizeof(WCHAR));
+-    if (res != NULL)
+-    {
+-	for (i = 0; i < s_len; ++i)
+-	    if (s[i] == '\t' || s[i] == '\n')
+-		res[i] = '\0';
+-	    else
+-		res[i] = s[i];
+-	res[s_len] = NUL;
+-	/* Add two extra NULs to make sure it's properly terminated. */
+-	res[s_len + 1] = NUL;
+-	res[s_len + 2] = NUL;
+-    }
++    tmp = convert_filter(s);
++    if (tmp == NULL)
++	return NULL;
++    len = (int)STRLEN(s) + 3;
++    res = enc_to_utf16(tmp, &len);
++    vim_free(tmp);
+     return res;
+ }
+ 
+diff -Naur vim73.orig/src/gui_x11.c vim73/src/gui_x11.c
+--- vim73.orig/src/gui_x11.c	2010-08-08 13:05:45.000000000 +0000
++++ vim73/src/gui_x11.c	2013-06-07 17:07:31.348919159 +0000
+@@ -2895,6 +2895,11 @@
+ 	    focus = gui.in_focus;
+ 	}
+ 
++#if defined(FEAT_NETBEANS_INTG)
++	/* Process any queued netbeans messages. */
++	netbeans_parse_messages();
++#endif
++
+ 	/*
+ 	 * Don't use gui_mch_update() because then we will spin-lock until a
+ 	 * char arrives, instead we use XtAppProcessEvent() to hang until an
+diff -Naur vim73.orig/src/gui_xmdlg.c vim73/src/gui_xmdlg.c
+--- vim73.orig/src/gui_xmdlg.c	2010-06-26 03:53:50.000000000 +0000
++++ vim73/src/gui_xmdlg.c	2013-06-07 17:07:31.368919102 +0000
+@@ -688,7 +688,7 @@
+ 	    do_dialog(VIM_ERROR,
+ 		    (char_u *)_("Error"),
+ 		    (char_u *)_("Invalid font specification"),
+-		    (char_u *)_("&Dismiss"), 1, NULL);
++		    (char_u *)_("&Dismiss"), 1, NULL, FALSE);
+ 
+ 	return True;
+     }
+@@ -807,7 +807,7 @@
+ 	do_dialog(VIM_ERROR,
+ 		(char_u *)_("Error"),
+ 		(char_u *)_("Invalid font specification"),
+-		(char_u *)_("&Dismiss"), 1, NULL);
++		(char_u *)_("&Dismiss"), 1, NULL, FALSE);
+ 	XFreeFontNames(name);
+     }
+     else
+diff -Naur vim73.orig/src/gui_xmebw.c vim73/src/gui_xmebw.c
+--- vim73.orig/src/gui_xmebw.c	2010-07-14 14:48:14.000000000 +0000
++++ vim73/src/gui_xmebw.c	2013-06-07 17:07:31.388919045 +0000
+@@ -345,7 +345,7 @@
+ 	    &eb->primitive.top_shadow_color,
+ 	    &eb->primitive.highlight_color);
+ 
+-    /* Setup color subsititution table. */
++    /* Setup color substitution table. */
+     color[0].pixel = eb->core.background_pixel;
+     color[1].pixel = eb->core.background_pixel;
+     color[2].pixel = eb->core.background_pixel;
+@@ -375,11 +375,8 @@
+ 
+     XGetGeometry(dpy, pix, &root, &x, &y, &width, &height, &border, &depth);
+ 
+-    if (eb->enhancedbutton.label_location == (int)XmTOP
+-	    || eb->enhancedbutton.label_location == (int)XmBOTTOM)
+-	shift = eb->primitive.shadow_thickness / 2;
+-    else
+-	shift = eb->primitive.shadow_thickness / 2;
++    /* TODO: does the shift depend on label_location somehow? */
++    shift = eb->primitive.shadow_thickness / 2;
+ 
+     if (shift < 1)
+ 	shift = 1;
+@@ -922,8 +919,8 @@
+     }
+ 
+     /*
+-     * Plase note that we manipulate the width only in case of push buttons not
+-     * used in the context of a menu pane.
++     * Please note that we manipulate the width only in case of push buttons
++     * not used in the context of a menu pane.
+      */
+     if (Lab_IsMenupane(newtb))
+     {
+@@ -1009,7 +1006,7 @@
+ 	XmString str;
+ 	set_pixmap(eb);
+ 
+-	/* FIXME: this is not the perfect way to deal with menues, which do not
++	/* FIXME: this is not the perfect way to deal with menus, which do not
+ 	 * have any string set right now.  */
+ 	str = XmStringCreateLocalized("");
+ 	XtVaSetValues((Widget) eb, XmNlabelString, str, NULL);
+diff -Naur vim73.orig/src/gui_xmebwp.h vim73/src/gui_xmebwp.h
+--- vim73.orig/src/gui_xmebwp.h	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/gui_xmebwp.h	2013-06-07 17:07:31.422252283 +0000
+@@ -26,7 +26,7 @@
+ 
+ 
+ /*
+- * EnahncedButton class structure.
++ * EnhancedButton class structure.
+  */
+ typedef struct _XmEnhancedButtonClassPart
+ {
+@@ -49,7 +49,7 @@
+ extern XmEnhancedButtonClassRec xmEnhancedButtonClassRec;
+ 
+ /*
+- * EnahncedButton instance record.
++ * EnhancedButton instance record.
+  */
+ typedef struct _XmEnhancedButtonPart
+ {
+diff -Naur vim73.orig/src/hardcopy.c vim73/src/hardcopy.c
+--- vim73.orig/src/hardcopy.c	2010-07-31 14:10:59.000000000 +0000
++++ vim73/src/hardcopy.c	2013-06-07 17:07:31.488918759 +0000
+@@ -1759,18 +1759,25 @@
+     char	*name;
+     struct prt_ps_resource_S *resource;
+ {
+-    char_u	buffer[MAXPATHL + 1];
++    char_u	*buffer;
++    int		retval;
+ 
+-    STRCPY(resource->name, name);
++    buffer = alloc(MAXPATHL + 1);
++    if (buffer == NULL)
++	return FALSE;
++
++    vim_strncpy(resource->name, (char_u *)name, 63);
+     /* Look for named resource file in runtimepath */
+     STRCPY(buffer, "print");
+     add_pathsep(buffer);
+-    STRCAT(buffer, name);
+-    STRCAT(buffer, ".ps");
++    vim_strcat(buffer, (char_u *)name, MAXPATHL);
++    vim_strcat(buffer, (char_u *)".ps", MAXPATHL);
+     resource->filename[0] = NUL;
+-    return (do_in_runtimepath(buffer, FALSE, prt_resource_name,
++    retval = (do_in_runtimepath(buffer, FALSE, prt_resource_name,
+ 							   resource->filename)
+ 	    && resource->filename[0] != NUL);
++    vim_free(buffer);
++    return retval;
+ }
+ 
+ /* PS CR and LF characters have platform independent values */
+@@ -2179,7 +2186,7 @@
+     if (num_copies > 1)
+     {
+ 	prt_write_string(" numcopies(");
+-	/* Note: no space wanted so dont use prt_write_int() */
++	/* Note: no space wanted so don't use prt_write_int() */
+ 	sprintf((char *)prt_line_buffer, "%d", num_copies);
+ 	prt_write_file(prt_line_buffer);
+ 	prt_write_string(")");
+@@ -2848,15 +2855,33 @@
+     double      right;
+     double      top;
+     double      bottom;
+-    struct prt_ps_resource_S res_prolog;
+-    struct prt_ps_resource_S res_encoding;
++    struct prt_ps_resource_S *res_prolog;
++    struct prt_ps_resource_S *res_encoding;
+     char	buffer[256];
+     char_u      *p_encoding;
+     char_u	*p;
+ #ifdef FEAT_MBYTE
+-    struct prt_ps_resource_S res_cidfont;
+-    struct prt_ps_resource_S res_cmap;
++    struct prt_ps_resource_S *res_cidfont;
++    struct prt_ps_resource_S *res_cmap;
+ #endif
++    int		retval = FALSE;
++
++    res_prolog = (struct prt_ps_resource_S *)
++				      alloc(sizeof(struct prt_ps_resource_S));
++    res_encoding = (struct prt_ps_resource_S *)
++				      alloc(sizeof(struct prt_ps_resource_S));
++#ifdef FEAT_MBYTE
++    res_cidfont = (struct prt_ps_resource_S *)
++				      alloc(sizeof(struct prt_ps_resource_S));
++    res_cmap = (struct prt_ps_resource_S *)
++				      alloc(sizeof(struct prt_ps_resource_S));
++#endif
++    if (res_prolog == NULL || res_encoding == NULL
++#ifdef FEAT_MBYTE
++	    || res_cidfont == NULL || res_cmap == NULL
++#endif
++       )
++	goto theend;
+ 
+     /*
+      * PS DSC Header comments - no PS code!
+@@ -2932,27 +2957,27 @@
+ #endif
+ 
+     /* Search for external resources VIM supplies */
+-    if (!prt_find_resource("prolog", &res_prolog))
++    if (!prt_find_resource("prolog", res_prolog))
+     {
+ 	EMSG(_("E456: Can't find PostScript resource file \"prolog.ps\""));
+ 	return FALSE;
+     }
+-    if (!prt_open_resource(&res_prolog))
++    if (!prt_open_resource(res_prolog))
+ 	return FALSE;
+-    if (!prt_check_resource(&res_prolog, PRT_PROLOG_VERSION))
++    if (!prt_check_resource(res_prolog, PRT_PROLOG_VERSION))
+ 	return FALSE;
+ #ifdef FEAT_MBYTE
+     if (prt_out_mbyte)
+     {
+ 	/* Look for required version of multi-byte printing procset */
+-	if (!prt_find_resource("cidfont", &res_cidfont))
++	if (!prt_find_resource("cidfont", res_cidfont))
+ 	{
+ 	    EMSG(_("E456: Can't find PostScript resource file \"cidfont.ps\""));
+ 	    return FALSE;
+ 	}
+-	if (!prt_open_resource(&res_cidfont))
++	if (!prt_open_resource(res_cidfont))
+ 	    return FALSE;
+-	if (!prt_check_resource(&res_cidfont, PRT_CID_PROLOG_VERSION))
++	if (!prt_check_resource(res_cidfont, PRT_CID_PROLOG_VERSION))
+ 	    return FALSE;
+     }
+ #endif
+@@ -2968,7 +2993,7 @@
+ #endif
+ 	p_encoding = enc_skip(p_penc);
+ 	if (*p_encoding == NUL
+-		|| !prt_find_resource((char *)p_encoding, &res_encoding))
++		|| !prt_find_resource((char *)p_encoding, res_encoding))
+ 	{
+ 	    /* 'printencoding' not set or not supported - find alternate */
+ #ifdef FEAT_MBYTE
+@@ -2977,13 +3002,13 @@
+ 	    p_encoding = enc_skip(p_enc);
+ 	    props = enc_canon_props(p_encoding);
+ 	    if (!(props & ENC_8BIT)
+-		    || !prt_find_resource((char *)p_encoding, &res_encoding))
++		    || !prt_find_resource((char *)p_encoding, res_encoding))
+ 		/* 8-bit 'encoding' is not supported */
+ #endif
+ 		{
+ 		/* Use latin1 as default printing encoding */
+ 		p_encoding = (char_u *)"latin1";
+-		if (!prt_find_resource((char *)p_encoding, &res_encoding))
++		if (!prt_find_resource((char *)p_encoding, res_encoding))
+ 		{
+ 		    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ 			    p_encoding);
+@@ -2991,7 +3016,7 @@
+ 		}
+ 	    }
+ 	}
+-	if (!prt_open_resource(&res_encoding))
++	if (!prt_open_resource(res_encoding))
+ 	    return FALSE;
+ 	/* For the moment there are no checks on encoding resource files to
+ 	 * perform */
+@@ -3005,13 +3030,13 @@
+ 	if (prt_use_courier)
+ 	{
+ 	    /* Include ASCII range encoding vector */
+-	    if (!prt_find_resource(prt_ascii_encoding, &res_encoding))
++	    if (!prt_find_resource(prt_ascii_encoding, res_encoding))
+ 	    {
+ 		EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ 							  prt_ascii_encoding);
+ 		return FALSE;
+ 	    }
+-	    if (!prt_open_resource(&res_encoding))
++	    if (!prt_open_resource(res_encoding))
+ 		return FALSE;
+ 	    /* For the moment there are no checks on encoding resource files to
+ 	     * perform */
+@@ -3034,44 +3059,44 @@
+     if (prt_out_mbyte && prt_custom_cmap)
+     {
+ 	/* Find user supplied CMap */
+-	if (!prt_find_resource(prt_cmap, &res_cmap))
++	if (!prt_find_resource(prt_cmap, res_cmap))
+ 	{
+ 	    EMSG2(_("E456: Can't find PostScript resource file \"%s.ps\""),
+ 								    prt_cmap);
+ 	    return FALSE;
+ 	}
+-	if (!prt_open_resource(&res_cmap))
++	if (!prt_open_resource(res_cmap))
+ 	    return FALSE;
+     }
+ #endif
+ 
+     /* List resources supplied */
+-    STRCPY(buffer, res_prolog.title);
++    STRCPY(buffer, res_prolog->title);
+     STRCAT(buffer, " ");
+-    STRCAT(buffer, res_prolog.version);
++    STRCAT(buffer, res_prolog->version);
+     prt_dsc_resources("DocumentSuppliedResources", "procset", buffer);
+ #ifdef FEAT_MBYTE
+     if (prt_out_mbyte)
+     {
+-	STRCPY(buffer, res_cidfont.title);
++	STRCPY(buffer, res_cidfont->title);
+ 	STRCAT(buffer, " ");
+-	STRCAT(buffer, res_cidfont.version);
++	STRCAT(buffer, res_cidfont->version);
+ 	prt_dsc_resources(NULL, "procset", buffer);
+ 
+ 	if (prt_custom_cmap)
+ 	{
+-	    STRCPY(buffer, res_cmap.title);
++	    STRCPY(buffer, res_cmap->title);
+ 	    STRCAT(buffer, " ");
+-	    STRCAT(buffer, res_cmap.version);
++	    STRCAT(buffer, res_cmap->version);
+ 	    prt_dsc_resources(NULL, "cmap", buffer);
+ 	}
+     }
+     if (!prt_out_mbyte || prt_use_courier)
+ #endif
+     {
+-	STRCPY(buffer, res_encoding.title);
++	STRCPY(buffer, res_encoding->title);
+ 	STRCAT(buffer, " ");
+-	STRCAT(buffer, res_encoding.version);
++	STRCAT(buffer, res_encoding->version);
+ 	prt_dsc_resources(NULL, "encoding", buffer);
+     }
+     prt_dsc_requirements(prt_duplex, prt_tumble, prt_collate,
+@@ -3114,15 +3139,15 @@
+     prt_dsc_noarg("BeginProlog");
+ 
+     /* Add required procsets - NOTE: order is important! */
+-    if (!prt_add_resource(&res_prolog))
++    if (!prt_add_resource(res_prolog))
+ 	return FALSE;
+ #ifdef FEAT_MBYTE
+     if (prt_out_mbyte)
+     {
+ 	/* Add CID font procset, and any user supplied CMap */
+-	if (!prt_add_resource(&res_cidfont))
++	if (!prt_add_resource(res_cidfont))
+ 	    return FALSE;
+-	if (prt_custom_cmap && !prt_add_resource(&res_cmap))
++	if (prt_custom_cmap && !prt_add_resource(res_cmap))
+ 	    return FALSE;
+     }
+ #endif
+@@ -3132,7 +3157,7 @@
+ #endif
+ 	/* There will be only one Roman font encoding to be included in the PS
+ 	 * file. */
+-	if (!prt_add_resource(&res_encoding))
++	if (!prt_add_resource(res_encoding))
+ 	    return FALSE;
+ 
+     prt_dsc_noarg("EndProlog");
+@@ -3248,7 +3273,17 @@
+     prt_dsc_noarg("EndSetup");
+ 
+     /* Fail if any problems writing out to the PS file */
+-    return !prt_file_error;
++    retval = !prt_file_error;
++
++theend:
++    vim_free(res_prolog);
++    vim_free(res_encoding);
++#ifdef FEAT_MBYTE
++    vim_free(res_cidfont);
++    vim_free(res_cmap);
++#endif
++
++    return retval;
+ }
+ 
+     void
+diff -Naur vim73.orig/src/hashtab.c vim73/src/hashtab.c
+--- vim73.orig/src/hashtab.c	2010-08-08 13:06:42.000000000 +0000
++++ vim73/src/hashtab.c	2013-06-07 17:07:31.512252026 +0000
+@@ -138,7 +138,7 @@
+     hash_T	perturb;
+     hashitem_T	*freeitem;
+     hashitem_T	*hi;
+-    int		idx;
++    unsigned	idx;
+ 
+ #ifdef HT_DEBUG
+     ++hash_count_lookup;
+@@ -150,7 +150,7 @@
+      * - skip over a removed item
+      * - return if the item matches
+      */
+-    idx = (int)(hash & ht->ht_mask);
++    idx = (unsigned)(hash & ht->ht_mask);
+     hi = &ht->ht_array[idx];
+ 
+     if (hi->hi_key == NULL)
+@@ -176,7 +176,7 @@
+ #ifdef HT_DEBUG
+ 	++hash_count_perturb;	    /* count a "miss" for hashtab lookup */
+ #endif
+-	idx = (int)((idx << 2) + idx + perturb + 1);
++	idx = (unsigned)((idx << 2U) + idx + perturb + 1U);
+ 	hi = &ht->ht_array[idx & ht->ht_mask];
+ 	if (hi->hi_key == NULL)
+ 	    return freeitem == NULL ? hi : freeitem;
+@@ -342,7 +342,7 @@
+     hashitem_T	temparray[HT_INIT_SIZE];
+     hashitem_T	*oldarray, *newarray;
+     hashitem_T	*olditem, *newitem;
+-    int		newi;
++    unsigned	newi;
+     int		todo;
+     long_u	oldsize, newsize;
+     long_u	minsize;
+@@ -448,13 +448,13 @@
+ 	     * the algorithm to find an item in hash_lookup().  But we only
+ 	     * need to search for a NULL key, thus it's simpler.
+ 	     */
+-	    newi = (int)(olditem->hi_hash & newmask);
++	    newi = (unsigned)(olditem->hi_hash & newmask);
+ 	    newitem = &newarray[newi];
+ 
+ 	    if (newitem->hi_key != NULL)
+ 		for (perturb = olditem->hi_hash; ; perturb >>= PERTURB_SHIFT)
+ 		{
+-		    newi = (int)((newi << 2) + newi + perturb + 1);
++		    newi = (unsigned)((newi << 2U) + newi + perturb + 1U);
+ 		    newitem = &newarray[newi & newmask];
+ 		    if (newitem->hi_key == NULL)
+ 			break;
+diff -Naur vim73.orig/src/if_cscope.c vim73/src/if_cscope.c
+--- vim73.orig/src/if_cscope.c	2010-07-25 14:32:31.000000000 +0000
++++ vim73/src/if_cscope.c	2013-06-07 17:07:31.528918645 +0000
+@@ -13,16 +13,10 @@
+ 
+ #if defined(FEAT_CSCOPE) || defined(PROTO)
+ 
+-#include <string.h>
+-#include <errno.h>
+-#include <assert.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+ #if defined(UNIX)
+ # include <sys/wait.h>
+-#else
+-    /* not UNIX, must be WIN32 */
+-# include "vimio.h"
+ #endif
+ #include "if_cscope.h"
+ 
+@@ -1198,9 +1192,8 @@
+     if (nummatches == NULL)
+ 	return FALSE;
+ 
+-    /* send query to all open connections, then count the total number
+-     * of matches so we can alloc matchesp all in one swell foop
+-     */
++    /* Send query to all open connections, then count the total number
++     * of matches so we can alloc all in one swell foop. */
+     for (i = 0; i < csinfo_size; i++)
+ 	nummatches[i] = 0;
+     totmatches = 0;
+@@ -1274,9 +1267,7 @@
+ 		{
+ 		    win_split(postponed_split > 0 ? postponed_split : 0,
+ 						       postponed_split_flags);
+-#  ifdef FEAT_SCROLLBIND
+-		    curwin->w_p_scb = FALSE;
+-#  endif
++		    RESET_BINDING(curwin);
+ 		    postponed_split = 0;
+ 		}
+ # endif
+@@ -1353,7 +1344,7 @@
+ 		       "       g: Find this definition\n"
+ 		       "       i: Find files #including this file\n"
+ 		       "       s: Find this C symbol\n"
+-		       "       t: Find assignments to\n"));
++		       "       t: Find this text string\n"));
+ 
+ 	cmdp++;
+     }
+@@ -1420,17 +1411,15 @@
+ {
+     short	i, j;
+ #ifndef UNIX
+-    HANDLE	hFile;
+     BY_HANDLE_FILE_INFORMATION bhfi;
+ 
+-    vim_memset(&bhfi, 0, sizeof(bhfi));
+     /* On windows 9x GetFileInformationByHandle doesn't work, so skip it */
+     if (!mch_windows95())
+     {
+-	hFile = CreateFile(fname, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_EXISTING,
+-						 FILE_ATTRIBUTE_NORMAL, NULL);
+-	if (hFile == INVALID_HANDLE_VALUE)
++	switch (win32_fileinfo(fname, &bhfi))
+ 	{
++	case FILEINFO_ENC_FAIL:		/* enc_to_utf16() failed */
++	case FILEINFO_READ_FAIL:	/* CreateFile() failed */
+ 	    if (p_csverbose)
+ 	    {
+ 		char *cant_msg = _("E625: cannot open cscope database: %s");
+@@ -1446,15 +1435,12 @@
+ 		    (void)EMSG2(cant_msg, fname);
+ 	    }
+ 	    return -1;
+-	}
+-	if (!GetFileInformationByHandle(hFile, &bhfi))
+-	{
+-	    CloseHandle(hFile);
++
++	case FILEINFO_INFO_FAIL:    /* GetFileInformationByHandle() failed */
+ 	    if (p_csverbose)
+ 		(void)EMSG(_("E626: cannot get cscope database information"));
+ 	    return -1;
+ 	}
+-	CloseHandle(hFile);
+     }
+ #endif
+ 
+@@ -1664,7 +1650,7 @@
+ /*
+  * PRIVATE: cs_make_vim_style_matches
+  *
+- * convert the cscope output into into a ctags style entry (as might be found
++ * convert the cscope output into a ctags style entry (as might be found
+  * in a ctags tags file).  there's one catch though: cscope doesn't tell you
+  * the type of the tag you are looking for.  for example, in Darren Hiebert's
+  * ctags (the one that comes with vim), #define's use a line number to find the
+@@ -2474,52 +2460,73 @@
+ /*
+  * PRIVATE: cs_resolve_file
+  *
+- * construct the full pathname to a file found in the cscope database.
++ * Construct the full pathname to a file found in the cscope database.
+  * (Prepends ppath, if there is one and if it's not already prepended,
+  * otherwise just uses the name found.)
+  *
+- * we need to prepend the prefix because on some cscope's (e.g., the one that
++ * We need to prepend the prefix because on some cscope's (e.g., the one that
+  * ships with Solaris 2.6), the output never has the prefix prepended.
+- * contrast this with my development system (Digital Unix), which does.
++ * Contrast this with my development system (Digital Unix), which does.
+  */
+     static char *
+ cs_resolve_file(i, name)
+-    int i;
++    int  i;
+     char *name;
+ {
+-    char *fullname;
+-    int len;
++    char	*fullname;
++    int		len;
++    char_u	*csdir = NULL;
+ 
+     /*
+-     * ppath is freed when we destroy the cscope connection.
+-     * fullname is freed after cs_make_vim_style_matches, after it's been
+-     * copied into the tag buffer used by vim
++     * Ppath is freed when we destroy the cscope connection.
++     * Fullname is freed after cs_make_vim_style_matches, after it's been
++     * copied into the tag buffer used by Vim.
+      */
+     len = (int)(strlen(name) + 2);
+     if (csinfo[i].ppath != NULL)
+ 	len += (int)strlen(csinfo[i].ppath);
++    else if (p_csre && csinfo[i].fname != NULL)
++    {
++	/* If 'cscoperelative' is set and ppath is not set, use cscope.out
++	 * path in path resolution. */
++	csdir = alloc(MAXPATHL);
++	if (csdir != NULL)
++	{
++	    vim_strncpy(csdir, (char_u *)csinfo[i].fname,
++		                       gettail((char_u *)csinfo[i].fname)
++						 - (char_u *)csinfo[i].fname);
++	    len += (int)STRLEN(csdir);
++	}
++    }
+ 
+-    if ((fullname = (char *)alloc(len)) == NULL)
+-	return NULL;
+-
+-    /*
+-     * note/example: this won't work if the cscope output already starts
++    /* Note/example: this won't work if the cscope output already starts
+      * "../.." and the prefix path is also "../..".  if something like this
+-     * happens, you are screwed up and need to fix how you're using cscope.
+-     */
+-    if (csinfo[i].ppath != NULL &&
+-	(strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0) &&
+-	(name[0] != '/')
++     * happens, you are screwed up and need to fix how you're using cscope. */
++    if (csinfo[i].ppath != NULL
++	    && (strncmp(name, csinfo[i].ppath, strlen(csinfo[i].ppath)) != 0)
++	    && (name[0] != '/')
+ #ifdef WIN32
+-	&& name[0] != '\\' && name[1] != ':'
++	    && name[0] != '\\' && name[1] != ':'
+ #endif
+-	)
+-	(void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
++       )
++    {
++	if ((fullname = (char *)alloc(len)) != NULL)
++	    (void)sprintf(fullname, "%s/%s", csinfo[i].ppath, name);
++    }
++    else if (csdir != NULL && csinfo[i].fname != NULL && *csdir != NUL)
++    {
++	/* Check for csdir to be non empty to avoid empty path concatenated to
++	 * cscope output. */
++	fullname = (char *)concat_fnames(csdir, (char_u *)name, TRUE);
++    }
+     else
+-	(void)sprintf(fullname, "%s", name);
++    {
++	fullname = (char *)vim_strsave((char_u *)name);
++    }
+ 
++    vim_free(csdir);
+     return fullname;
+-} /* cs_resolve_file */
++}
+ 
+ 
+ /*
+diff -Naur vim73.orig/src/if_lua.c vim73/src/if_lua.c
+--- vim73.orig/src/if_lua.c	2010-08-12 20:12:04.000000000 +0000
++++ vim73/src/if_lua.c	2013-06-07 17:07:31.542251940 +0000
+@@ -1,4 +1,4 @@
+-/* vi:set ts=8 sts=4 sw=4:
++/* vi:set ts=8 sts=4 sw=4 noet:
+  *
+  * VIM - Vi IMproved	by Bram Moolenaar
+  *
+@@ -9,12 +9,11 @@
+  * See README.txt for an overview of the Vim source code.
+  */
+ 
+-#include <stdio.h>
+-#include <string.h>
++#include "vim.h"
++
+ #include <lua.h>
+ #include <lualib.h>
+ #include <lauxlib.h>
+-#include "vim.h"
+ 
+ /* Only do the following when the feature is enabled.  Needed for "make
+  * depend". */
+@@ -22,15 +21,33 @@
+ 
+ #define LUAVIM_CHUNKNAME "vim chunk"
+ #define LUAVIM_NAME "vim"
++#define LUAVIM_EVALNAME "luaeval"
++#define LUAVIM_EVALHEADER "local _A=select(1,...) return "
+ 
+ typedef buf_T *luaV_Buffer;
+ typedef win_T *luaV_Window;
++typedef dict_T *luaV_Dict;
++typedef list_T *luaV_List;
+ typedef void (*msgfunc_T)(char_u *);
+ 
++static const char LUAVIM_DICT[] = "dict";
++static const char LUAVIM_LIST[] = "list";
+ static const char LUAVIM_BUFFER[] = "buffer";
+ static const char LUAVIM_WINDOW[] = "window";
+ static const char LUAVIM_FREE[] = "luaV_free";
++static const char LUAVIM_LUAEVAL[] = "luaV_luaeval";
++static const char LUAVIM_SETREF[] = "luaV_setref";
+ 
++/* most functions are closures with a cache table as first upvalue;
++ * get/setudata manage references to vim userdata in cache table through
++ * object pointers (light userdata) */
++#define luaV_getudata(L, v) \
++    lua_pushlightuserdata((L), (void *) (v)); \
++    lua_rawget((L), lua_upvalueindex(1))
++#define luaV_setudata(L, v) \
++    lua_pushlightuserdata((L), (void *) (v)); \
++    lua_pushvalue((L), -2); \
++    lua_rawset((L), lua_upvalueindex(1))
+ #define luaV_getfield(L, s) \
+     lua_pushlightuserdata((L), (void *)(s)); \
+     lua_rawget((L), LUA_REGISTRYINDEX)
+@@ -39,6 +56,15 @@
+ #define luaV_msg(L) luaV_msgfunc((L), (msgfunc_T) msg)
+ #define luaV_emsg(L) luaV_msgfunc((L), (msgfunc_T) emsg)
+ 
++static luaV_List *luaV_pushlist (lua_State *L, list_T *lis);
++static luaV_Dict *luaV_pushdict (lua_State *L, dict_T *dic);
++
++#if LUA_VERSION_NUM <= 501
++#define luaV_openlib(L, l, n) luaL_openlib(L, NULL, l, n)
++#define luaL_typeerror luaL_typerror
++#else
++#define luaV_openlib luaL_setfuncs
++#endif
+ 
+ #ifdef DYNAMIC_LUA
+ 
+@@ -49,38 +75,61 @@
+ # define symbol_from_dll dlsym
+ # define close_dll dlclose
+ #else
+-# define load_dll LoadLibrary
++# define load_dll vimLoadLib
+ # define symbol_from_dll GetProcAddress
+ # define close_dll FreeLibrary
+ #endif
+ 
+ /* lauxlib */
++#if LUA_VERSION_NUM <= 501
+ #define luaL_register dll_luaL_register
++#define luaL_prepbuffer dll_luaL_prepbuffer
++#define luaL_openlib dll_luaL_openlib
+ #define luaL_typerror dll_luaL_typerror
++#define luaL_loadfile dll_luaL_loadfile
++#define luaL_loadbuffer dll_luaL_loadbuffer
++#else
++#define luaL_prepbuffsize dll_luaL_prepbuffsize
++#define luaL_setfuncs dll_luaL_setfuncs
++#define luaL_loadfilex dll_luaL_loadfilex
++#define luaL_loadbufferx dll_luaL_loadbufferx
++#define luaL_argerror dll_luaL_argerror
++#endif
++#define luaL_checkany dll_luaL_checkany
+ #define luaL_checklstring dll_luaL_checklstring
+ #define luaL_checkinteger dll_luaL_checkinteger
+ #define luaL_optinteger dll_luaL_optinteger
+ #define luaL_checktype dll_luaL_checktype
+ #define luaL_error dll_luaL_error
+-#define luaL_loadfile dll_luaL_loadfile
+-#define luaL_loadbuffer dll_luaL_loadbuffer
+ #define luaL_newstate dll_luaL_newstate
+ #define luaL_buffinit dll_luaL_buffinit
+-#define luaL_prepbuffer dll_luaL_prepbuffer
+ #define luaL_addlstring dll_luaL_addlstring
+ #define luaL_pushresult dll_luaL_pushresult
+ /* lua */
++#if LUA_VERSION_NUM <= 501
++#define lua_tonumber dll_lua_tonumber
++#define lua_tointeger dll_lua_tointeger
++#define lua_call dll_lua_call
++#define lua_pcall dll_lua_pcall
++#else
++#define lua_tonumberx dll_lua_tonumberx
++#define lua_tointegerx dll_lua_tointegerx
++#define lua_callk dll_lua_callk
++#define lua_pcallk dll_lua_pcallk
++#define lua_getglobal dll_lua_getglobal
++#define lua_setglobal dll_lua_setglobal
++#endif
++#define lua_typename dll_lua_typename
+ #define lua_close dll_lua_close
+ #define lua_gettop dll_lua_gettop
+ #define lua_settop dll_lua_settop
+ #define lua_pushvalue dll_lua_pushvalue
+ #define lua_replace dll_lua_replace
++#define lua_remove dll_lua_remove
+ #define lua_isnumber dll_lua_isnumber
+ #define lua_isstring dll_lua_isstring
+ #define lua_type dll_lua_type
+ #define lua_rawequal dll_lua_rawequal
+-#define lua_tonumber dll_lua_tonumber
+-#define lua_tointeger dll_lua_tointeger
+ #define lua_toboolean dll_lua_toboolean
+ #define lua_tolstring dll_lua_tolstring
+ #define lua_touserdata dll_lua_touserdata
+@@ -95,6 +144,7 @@
+ #define lua_pushlightuserdata dll_lua_pushlightuserdata
+ #define lua_getfield dll_lua_getfield
+ #define lua_rawget dll_lua_rawget
++#define lua_rawgeti dll_lua_rawgeti
+ #define lua_createtable dll_lua_createtable
+ #define lua_newuserdata dll_lua_newuserdata
+ #define lua_getmetatable dll_lua_getmetatable
+@@ -102,8 +152,7 @@
+ #define lua_rawset dll_lua_rawset
+ #define lua_rawseti dll_lua_rawseti
+ #define lua_setmetatable dll_lua_setmetatable
+-#define lua_call dll_lua_call
+-#define lua_pcall dll_lua_pcall
++#define lua_next dll_lua_next
+ /* libs */
+ #define luaopen_base dll_luaopen_base
+ #define luaopen_table dll_luaopen_table
+@@ -116,32 +165,57 @@
+ #define luaL_openlibs dll_luaL_openlibs
+ 
+ /* lauxlib */
++#if LUA_VERSION_NUM <= 501
+ void (*dll_luaL_register) (lua_State *L, const char *libname, const luaL_Reg *l);
++char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
++void (*dll_luaL_openlib) (lua_State *L, const char *libname, const luaL_Reg *l, int nup);
+ int (*dll_luaL_typerror) (lua_State *L, int narg, const char *tname);
++int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
++int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
++#else
++char *(*dll_luaL_prepbuffsize) (luaL_Buffer *B, size_t sz);
++void (*dll_luaL_setfuncs) (lua_State *L, const luaL_Reg *l, int nup);
++int (*dll_luaL_loadfilex) (lua_State *L, const char *filename, const char *mode);
++int (*dll_luaL_loadbufferx) (lua_State *L, const char *buff, size_t sz, const char *name, const char *mode);
++int (*dll_luaL_argerror) (lua_State *L, int numarg, const char *extramsg);
++#endif
++void (*dll_luaL_checkany) (lua_State *L, int narg);
+ const char *(*dll_luaL_checklstring) (lua_State *L, int numArg, size_t *l);
+ lua_Integer (*dll_luaL_checkinteger) (lua_State *L, int numArg);
+ lua_Integer (*dll_luaL_optinteger) (lua_State *L, int nArg, lua_Integer def);
+ void (*dll_luaL_checktype) (lua_State *L, int narg, int t);
+ int (*dll_luaL_error) (lua_State *L, const char *fmt, ...);
+-int (*dll_luaL_loadfile) (lua_State *L, const char *filename);
+-int (*dll_luaL_loadbuffer) (lua_State *L, const char *buff, size_t sz, const char *name);
+ lua_State *(*dll_luaL_newstate) (void);
+ void (*dll_luaL_buffinit) (lua_State *L, luaL_Buffer *B);
+-char *(*dll_luaL_prepbuffer) (luaL_Buffer *B);
+ void (*dll_luaL_addlstring) (luaL_Buffer *B, const char *s, size_t l);
+ void (*dll_luaL_pushresult) (luaL_Buffer *B);
+ /* lua */
++#if LUA_VERSION_NUM <= 501
++lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
++lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
++void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
++int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
++#else
++lua_Number (*dll_lua_tonumberx) (lua_State *L, int idx, int *isnum);
++lua_Integer (*dll_lua_tointegerx) (lua_State *L, int idx, int *isnum);
++void (*dll_lua_callk) (lua_State *L, int nargs, int nresults, int ctx,
++	lua_CFunction k);
++int (*dll_lua_pcallk) (lua_State *L, int nargs, int nresults, int errfunc,
++	int ctx, lua_CFunction k);
++void (*dll_lua_getglobal) (lua_State *L, const char *var);
++void (*dll_lua_setglobal) (lua_State *L, const char *var);
++#endif
++const char *(*dll_lua_typename) (lua_State *L, int tp);
+ void       (*dll_lua_close) (lua_State *L);
+ int (*dll_lua_gettop) (lua_State *L);
+ void (*dll_lua_settop) (lua_State *L, int idx);
+ void (*dll_lua_pushvalue) (lua_State *L, int idx);
+ void (*dll_lua_replace) (lua_State *L, int idx);
++void (*dll_lua_remove) (lua_State *L, int idx);
+ int (*dll_lua_isnumber) (lua_State *L, int idx);
+ int (*dll_lua_isstring) (lua_State *L, int idx);
+ int (*dll_lua_type) (lua_State *L, int idx);
+ int (*dll_lua_rawequal) (lua_State *L, int idx1, int idx2);
+-lua_Number (*dll_lua_tonumber) (lua_State *L, int idx);
+-lua_Integer (*dll_lua_tointeger) (lua_State *L, int idx);
+ int (*dll_lua_toboolean) (lua_State *L, int idx);
+ const char *(*dll_lua_tolstring) (lua_State *L, int idx, size_t *len);
+ void *(*dll_lua_touserdata) (lua_State *L, int idx);
+@@ -156,6 +230,7 @@
+ void (*dll_lua_pushlightuserdata) (lua_State *L, void *p);
+ void (*dll_lua_getfield) (lua_State *L, int idx, const char *k);
+ void (*dll_lua_rawget) (lua_State *L, int idx);
++void (*dll_lua_rawgeti) (lua_State *L, int idx, int n);
+ void (*dll_lua_createtable) (lua_State *L, int narr, int nrec);
+ void *(*dll_lua_newuserdata) (lua_State *L, size_t sz);
+ int (*dll_lua_getmetatable) (lua_State *L, int objindex);
+@@ -163,8 +238,7 @@
+ void (*dll_lua_rawset) (lua_State *L, int idx);
+ void (*dll_lua_rawseti) (lua_State *L, int idx, int n);
+ int (*dll_lua_setmetatable) (lua_State *L, int objindex);
+-void (*dll_lua_call) (lua_State *L, int nargs, int nresults);
+-int (*dll_lua_pcall) (lua_State *L, int nargs, int nresults, int errfunc);
++int (*dll_lua_next) (lua_State *L, int idx);
+ /* libs */
+ int (*dll_luaopen_base) (lua_State *L);
+ int (*dll_luaopen_table) (lua_State *L);
+@@ -184,32 +258,55 @@
+ 
+ static const luaV_Reg luaV_dll[] = {
+     /* lauxlib */
++#if LUA_VERSION_NUM <= 501
+     {"luaL_register", (luaV_function) &dll_luaL_register},
++    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
++    {"luaL_openlib", (luaV_function) &dll_luaL_openlib},
+     {"luaL_typerror", (luaV_function) &dll_luaL_typerror},
++    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
++    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
++#else
++    {"luaL_prepbuffsize", (luaV_function) &dll_luaL_prepbuffsize},
++    {"luaL_setfuncs", (luaV_function) &dll_luaL_setfuncs},
++    {"luaL_loadfilex", (luaV_function) &dll_luaL_loadfilex},
++    {"luaL_loadbufferx", (luaV_function) &dll_luaL_loadbufferx},
++    {"luaL_argerror", (luaV_function) &dll_luaL_argerror},
++#endif
++    {"luaL_checkany", (luaV_function) &dll_luaL_checkany},
+     {"luaL_checklstring", (luaV_function) &dll_luaL_checklstring},
+     {"luaL_checkinteger", (luaV_function) &dll_luaL_checkinteger},
+     {"luaL_optinteger", (luaV_function) &dll_luaL_optinteger},
+     {"luaL_checktype", (luaV_function) &dll_luaL_checktype},
+     {"luaL_error", (luaV_function) &dll_luaL_error},
+-    {"luaL_loadfile", (luaV_function) &dll_luaL_loadfile},
+-    {"luaL_loadbuffer", (luaV_function) &dll_luaL_loadbuffer},
+     {"luaL_newstate", (luaV_function) &dll_luaL_newstate},
+     {"luaL_buffinit", (luaV_function) &dll_luaL_buffinit},
+-    {"luaL_prepbuffer", (luaV_function) &dll_luaL_prepbuffer},
+     {"luaL_addlstring", (luaV_function) &dll_luaL_addlstring},
+     {"luaL_pushresult", (luaV_function) &dll_luaL_pushresult},
+     /* lua */
++#if LUA_VERSION_NUM <= 501
++    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
++    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
++    {"lua_call", (luaV_function) &dll_lua_call},
++    {"lua_pcall", (luaV_function) &dll_lua_pcall},
++#else
++    {"lua_tonumberx", (luaV_function) &dll_lua_tonumberx},
++    {"lua_tointegerx", (luaV_function) &dll_lua_tointegerx},
++    {"lua_callk", (luaV_function) &dll_lua_callk},
++    {"lua_pcallk", (luaV_function) &dll_lua_pcallk},
++    {"lua_getglobal", (luaV_function) &dll_lua_getglobal},
++    {"lua_setglobal", (luaV_function) &dll_lua_setglobal},
++#endif
++    {"lua_typename", (luaV_function) &dll_lua_typename},
+     {"lua_close", (luaV_function) &dll_lua_close},
+     {"lua_gettop", (luaV_function) &dll_lua_gettop},
+     {"lua_settop", (luaV_function) &dll_lua_settop},
+     {"lua_pushvalue", (luaV_function) &dll_lua_pushvalue},
+     {"lua_replace", (luaV_function) &dll_lua_replace},
++    {"lua_remove", (luaV_function) &dll_lua_remove},
+     {"lua_isnumber", (luaV_function) &dll_lua_isnumber},
+     {"lua_isstring", (luaV_function) &dll_lua_isstring},
+     {"lua_type", (luaV_function) &dll_lua_type},
+     {"lua_rawequal", (luaV_function) &dll_lua_rawequal},
+-    {"lua_tonumber", (luaV_function) &dll_lua_tonumber},
+-    {"lua_tointeger", (luaV_function) &dll_lua_tointeger},
+     {"lua_toboolean", (luaV_function) &dll_lua_toboolean},
+     {"lua_tolstring", (luaV_function) &dll_lua_tolstring},
+     {"lua_touserdata", (luaV_function) &dll_lua_touserdata},
+@@ -224,6 +321,7 @@
+     {"lua_pushlightuserdata", (luaV_function) &dll_lua_pushlightuserdata},
+     {"lua_getfield", (luaV_function) &dll_lua_getfield},
+     {"lua_rawget", (luaV_function) &dll_lua_rawget},
++    {"lua_rawgeti", (luaV_function) &dll_lua_rawgeti},
+     {"lua_createtable", (luaV_function) &dll_lua_createtable},
+     {"lua_newuserdata", (luaV_function) &dll_lua_newuserdata},
+     {"lua_getmetatable", (luaV_function) &dll_lua_getmetatable},
+@@ -231,8 +329,7 @@
+     {"lua_rawset", (luaV_function) &dll_lua_rawset},
+     {"lua_rawseti", (luaV_function) &dll_lua_rawseti},
+     {"lua_setmetatable", (luaV_function) &dll_lua_setmetatable},
+-    {"lua_call", (luaV_function) &dll_lua_call},
+-    {"lua_pcall", (luaV_function) &dll_lua_pcall},
++    {"lua_next", (luaV_function) &dll_lua_next},
+     /* libs */
+     {"luaopen_base", (luaV_function) &dll_luaopen_base},
+     {"luaopen_table", (luaV_function) &dll_luaopen_table},
+@@ -292,6 +389,16 @@
+ 
+ #endif /* DYNAMIC_LUA */
+ 
++#if LUA_VERSION_NUM > 501
++    static int
++luaL_typeerror (lua_State *L, int narg, const char *tname)
++{
++    const char *msg = lua_pushfstring(L, "%s expected, got %s",
++	    tname, luaL_typename(L, narg));
++    return luaL_argerror(L, narg, msg);
++}
++#endif
++
+ 
+ /* =======   Internal   ======= */
+ 
+@@ -325,21 +432,40 @@
+ }
+ 
+     static void *
++luaV_checkcache(lua_State *L, void *p)
++{
++    luaV_getudata(L, p);
++    if (lua_isnil(L, -1)) luaL_error(L, "invalid object");
++    lua_pop(L, 1);
++    return p;
++}
++
++#define luaV_unbox(L,luatyp,ud) (*((luatyp *) lua_touserdata((L),(ud))))
++
++#define luaV_checkvalid(L,luatyp,ud) \
++    luaV_checkcache((L), (void *) luaV_unbox((L),luatyp,(ud)))
++
++    static void *
+ luaV_checkudata(lua_State *L, int ud, const char *tname)
+ {
+     void *p = luaV_toudata(L, ud, tname);
+-    if (p == NULL) luaL_typerror(L, ud, tname);
++    if (p == NULL) luaL_typeerror(L, ud, tname);
+     return p;
+ }
+ 
+     static void
+ luaV_pushtypval(lua_State *L, typval_T *tv)
+ {
+-    if (tv == NULL) luaL_error(L, "null type");
++    if (tv == NULL)
++    {
++	lua_pushnil(L);
++	return;
++    }
+     switch (tv->v_type)
+     {
+ 	case VAR_STRING:
+-	    lua_pushstring(L, (char *) tv->vval.v_string);
++	    lua_pushstring(L, tv->vval.v_string == NULL
++					    ? "" : (char *)tv->vval.v_string);
+ 	    break;
+ 	case VAR_NUMBER:
+ 	    lua_pushinteger(L, (int) tv->vval.v_number);
+@@ -349,68 +475,70 @@
+ 	    lua_pushnumber(L, (lua_Number) tv->vval.v_float);
+ 	    break;
+ #endif
+-	case VAR_LIST: {
+-	    list_T *l = tv->vval.v_list;
++	case VAR_LIST:
++	    luaV_pushlist(L, tv->vval.v_list);
++	    break;
++	case VAR_DICT:
++	    luaV_pushdict(L, tv->vval.v_dict);
++	    break;
++	default:
++	    lua_pushnil(L);
++    }
++}
+ 
+-	    if (l != NULL)
++/* converts lua value at 'pos' to typval 'tv' */
++    static void
++luaV_totypval (lua_State *L, int pos, typval_T *tv)
++{
++    switch(lua_type(L, pos)) {
++	case LUA_TBOOLEAN:
++	    tv->v_type = VAR_NUMBER;
++	    tv->vval.v_number = (varnumber_T) lua_toboolean(L, pos);
++	    break;
++	case LUA_TSTRING:
++	    tv->v_type = VAR_STRING;
++	    tv->vval.v_string = vim_strsave((char_u *) lua_tostring(L, pos));
++	    break;
++	case LUA_TNUMBER:
++#ifdef FEAT_FLOAT
++	    tv->v_type = VAR_FLOAT;
++	    tv->vval.v_float = (float_T) lua_tonumber(L, pos);
++#else
++	    tv->v_type = VAR_NUMBER;
++	    tv->vval.v_number = (varnumber_T) lua_tointeger(L, pos);
++#endif
++	    break;
++	case LUA_TUSERDATA: {
++	    void *p = lua_touserdata(L, pos);
++	    if (lua_getmetatable(L, pos)) /* has metatable? */
+ 	    {
+-		/* check cache */
+-		lua_pushlightuserdata(L, (void *) l);
+-		lua_rawget(L, LUA_ENVIRONINDEX);
+-		if (lua_isnil(L, -1)) /* not interned? */
++		/* check list */
++		luaV_getfield(L, LUAVIM_LIST);
++		if (lua_rawequal(L, -1, -2))
+ 		{
+-		    listitem_T *li;
+-		    int n = 0;
+-		    lua_pop(L, 1); /* nil */
+-		    lua_newtable(L);
+-		    lua_pushlightuserdata(L, (void *) l);
+-		    lua_pushvalue(L, -2);
+-		    lua_rawset(L, LUA_ENVIRONINDEX);
+-		    for (li = l->lv_first; li != NULL; li = li->li_next)
+-		    {
+-			luaV_pushtypval(L, &li->li_tv);
+-			lua_rawseti(L, -2, ++n);
+-		    }
++		    tv->v_type = VAR_LIST;
++		    tv->vval.v_list = *((luaV_List *) p);
++		    ++tv->vval.v_list->lv_refcount;
++		    lua_pop(L, 2); /* MTs */
++		    return;
+ 		}
+-	    }
+-	    else lua_pushnil(L);
+-	    break;
+-		       }
+-	case VAR_DICT: {
+-	    dict_T *d = tv->vval.v_dict;
+-
+-	    if (d != NULL)
+-	    {
+-		/* check cache */
+-		lua_pushlightuserdata(L, (void *) d);
+-		lua_rawget(L, LUA_ENVIRONINDEX);
+-		if (lua_isnil(L, -1)) /* not interned? */
++		/* check dict */
++		luaV_getfield(L, LUAVIM_DICT);
++		if (lua_rawequal(L, -1, -3))
+ 		{
+-		    hashtab_T *ht = &d->dv_hashtab;
+-		    hashitem_T *hi;
+-		    int n = ht->ht_used; /* remaining items */
+-		    lua_pop(L, 1); /* nil */
+-		    lua_newtable(L);
+-		    lua_pushlightuserdata(L, (void *) d);
+-		    lua_pushvalue(L, -2);
+-		    lua_rawset(L, LUA_ENVIRONINDEX);
+-		    for (hi = ht->ht_array; n > 0; hi++)
+-		    {
+-			if (!HASHITEM_EMPTY(hi))
+-			{
+-			    dictitem_T *di = dict_lookup(hi);
+-			    luaV_pushtypval(L, &di->di_tv);
+-			    lua_setfield(L, -2, (char *) hi->hi_key);
+-			    n--;
+-			}
+-		    }
++		    tv->v_type = VAR_DICT;
++		    tv->vval.v_dict = *((luaV_Dict *) p);
++		    ++tv->vval.v_dict->dv_refcount;
++		    lua_pop(L, 3); /* MTs */
++		    return;
+ 		}
++		lua_pop(L, 3); /* MTs */
+ 	    }
+-	    else lua_pushnil(L);
+ 	    break;
+ 	}
+ 	default:
+-	    luaL_error(L, "invalid type");
++	    tv->v_type = VAR_NUMBER;
++	    tv->vval.v_number = 0;
+     }
+ }
+ 
+@@ -479,89 +607,366 @@
+     lua_pop(L, 2); /* original and modified strings */
+ }
+ 
++#define luaV_newtype(typ,tname,luatyp,luatname) \
++	static luatyp * \
++    luaV_new##tname (lua_State *L, typ *obj) \
++    { \
++	luatyp *o = (luatyp *) lua_newuserdata(L, sizeof(luatyp)); \
++	*o = obj; \
++	luaV_setudata(L, obj); /* cache[obj] = udata */ \
++	luaV_getfield(L, luatname); \
++	lua_setmetatable(L, -2); \
++	return o; \
++    }
++
++#define luaV_pushtype(typ,tname,luatyp) \
++	static luatyp * \
++    luaV_push##tname (lua_State *L, typ *obj) \
++    { \
++	luatyp *o = NULL; \
++	if (obj == NULL) \
++	    lua_pushnil(L); \
++	else { \
++	    luaV_getudata(L, obj); \
++	    if (lua_isnil(L, -1)) /* not interned? */ \
++	    { \
++		lua_pop(L, 1); \
++		o = luaV_new##tname(L, obj); \
++	    } \
++	    else \
++		o = (luatyp *) lua_touserdata(L, -1); \
++	} \
++	return o; \
++    }
++
++#define luaV_type_tostring(tname,luatname) \
++	static int \
++    luaV_##tname##_tostring (lua_State *L) \
++    { \
++	lua_pushfstring(L, "%s: %p", luatname, lua_touserdata(L, 1)); \
++	return 1; \
++    }
++
++/* =======   List type   ======= */
++
++    static luaV_List *
++luaV_newlist (lua_State *L, list_T *lis)
++{
++    luaV_List *l = (luaV_List *) lua_newuserdata(L, sizeof(luaV_List));
++    *l = lis;
++    lis->lv_refcount++; /* reference in Lua */
++    luaV_setudata(L, lis); /* cache[lis] = udata */
++    luaV_getfield(L, LUAVIM_LIST);
++    lua_setmetatable(L, -2);
++    return l;
++}
++
++luaV_pushtype(list_T, list, luaV_List)
++luaV_type_tostring(list, LUAVIM_LIST)
+ 
+-/* =======   Buffer type   ======= */
++    static int
++luaV_list_len (lua_State *L)
++{
++    list_T *l = luaV_unbox(L, luaV_List, 1);
++    lua_pushinteger(L, (l == NULL) ? 0 : (int) l->lv_len);
++    return 1;
++}
+ 
+-    static luaV_Buffer *
+-luaV_newbuffer(lua_State *L, buf_T *buf)
++    static int
++luaV_list_iter (lua_State *L)
+ {
+-    luaV_Buffer *b = (luaV_Buffer *) lua_newuserdata(L, sizeof(luaV_Buffer));
+-    *b = buf;
+-    lua_pushlightuserdata(L, (void *) buf);
+-    lua_pushvalue(L, -2);
+-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[buf] = udata */
+-    /* to avoid GC, store as key in env */
+-    lua_pushvalue(L, -1);
+-    lua_pushboolean(L, 1);
+-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
+-    /* set metatable */
+-    luaV_getfield(L, LUAVIM_BUFFER);
+-    lua_setmetatable(L, -2);
+-    return b;
++    listitem_T *li = (listitem_T *) lua_touserdata(L, lua_upvalueindex(2));
++    if (li == NULL) return 0;
++    luaV_pushtypval(L, &li->li_tv);
++    lua_pushlightuserdata(L, (void *) li->li_next);
++    lua_replace(L, lua_upvalueindex(2));
++    return 1;
+ }
+ 
+-    static luaV_Buffer *
+-luaV_pushbuffer (lua_State *L, buf_T *buf)
++    static int
++luaV_list_call (lua_State *L)
+ {
+-    luaV_Buffer *b = NULL;
+-    if (buf == NULL)
+-	lua_pushnil(L);
+-    else {
+-	lua_pushlightuserdata(L, (void *) buf);
+-	lua_rawget(L, LUA_ENVIRONINDEX);
+-	if (lua_isnil(L, -1)) /* not interned? */
++    list_T *l = luaV_unbox(L, luaV_List, 1);
++    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
++    lua_pushlightuserdata(L, (void *) l->lv_first);
++    lua_pushcclosure(L, luaV_list_iter, 2);
++    return 1;
++}
++
++    static int
++luaV_list_index (lua_State *L)
++{
++    list_T *l = luaV_unbox(L, luaV_List, 1);
++    if (lua_isnumber(L, 2)) /* list item? */
++    {
++	listitem_T *li = list_find(l, (long) luaL_checkinteger(L, 2));
++	if (li == NULL)
++	    lua_pushnil(L);
++	else
++	    luaV_pushtypval(L, &li->li_tv);
++    }
++    else if (lua_isstring(L, 2)) /* method? */
++    {
++	const char *s = lua_tostring(L, 2);
++	if (strncmp(s, "add", 3) == 0
++		|| strncmp(s, "insert", 6) == 0)
+ 	{
+-	    lua_pop(L, 1);
+-	    b = luaV_newbuffer(L, buf);
++	    lua_getmetatable(L, 1);
++	    lua_getfield(L, -1, s);
+ 	}
+ 	else
+-	    b = (luaV_Buffer *) lua_touserdata(L, -1);
++	    lua_pushnil(L);
+     }
+-    return b;
++    else
++	lua_pushnil(L);
++    return 1;
+ }
+ 
+-/* Buffer metamethods */
++    static int
++luaV_list_newindex (lua_State *L)
++{
++    list_T *l = luaV_unbox(L, luaV_List, 1);
++    long n = (long) luaL_checkinteger(L, 2);
++    listitem_T *li;
++    if (l->lv_lock)
++	luaL_error(L, "list is locked");
++    li = list_find(l, n);
++    if (li == NULL) return 0;
++    if (lua_isnil(L, 3)) /* remove? */
++    {
++	list_remove(l, li, li);
++	clear_tv(&li->li_tv);
++	vim_free(li);
++    }
++    else
++    {
++	typval_T v;
++	luaV_totypval(L, 3, &v);
++	clear_tv(&li->li_tv);
++	copy_tv(&v, &li->li_tv);
++	clear_tv(&v);
++    }
++    return 0;
++}
+ 
+     static int
+-luaV_buffer_tostring(lua_State *L)
++luaV_list_add (lua_State *L)
+ {
+-    lua_pushfstring(L, "%s: %p", LUAVIM_BUFFER, lua_touserdata(L, 1));
++    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
++    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
++    typval_T v;
++    if (l->lv_lock)
++	luaL_error(L, "list is locked");
++    lua_settop(L, 2);
++    luaV_totypval(L, 2, &v);
++    if (list_append_tv(l, &v) == FAIL)
++    {
++	clear_tv(&v);
++	luaL_error(L, "Failed to add item to list");
++    }
++    clear_tv(&v);
++    lua_settop(L, 1);
++    return 1;
++}
++
++    static int
++luaV_list_insert (lua_State *L)
++{
++    luaV_List *lis = luaV_checkudata(L, 1, LUAVIM_LIST);
++    list_T *l = (list_T *) luaV_checkcache(L, (void *) *lis);
++    long pos = luaL_optlong(L, 3, 0);
++    listitem_T *li = NULL;
++    typval_T v;
++    if (l->lv_lock)
++	luaL_error(L, "list is locked");
++    if (pos < l->lv_len)
++    {
++	li = list_find(l, pos);
++	if (li == NULL)
++	    luaL_error(L, "invalid position");
++    }
++    lua_settop(L, 2);
++    luaV_totypval(L, 2, &v);
++    if (list_insert_tv(l, &v, li) == FAIL)
++    {
++	clear_tv(&v);
++	luaL_error(L, "Failed to add item to list");
++    }
++    clear_tv(&v);
++    lua_settop(L, 1);
+     return 1;
+ }
+ 
++static const luaL_Reg luaV_List_mt[] = {
++    {"__tostring", luaV_list_tostring},
++    {"__len", luaV_list_len},
++    {"__call", luaV_list_call},
++    {"__index", luaV_list_index},
++    {"__newindex", luaV_list_newindex},
++    {"add", luaV_list_add},
++    {"insert", luaV_list_insert},
++    {NULL, NULL}
++};
++
++
++/* =======   Dict type   ======= */
++
++    static luaV_Dict *
++luaV_newdict (lua_State *L, dict_T *dic)
++{
++    luaV_Dict *d = (luaV_Dict *) lua_newuserdata(L, sizeof(luaV_Dict));
++    *d = dic;
++    dic->dv_refcount++; /* reference in Lua */
++    luaV_setudata(L, dic); /* cache[dic] = udata */
++    luaV_getfield(L, LUAVIM_DICT);
++    lua_setmetatable(L, -2);
++    return d;
++}
++
++luaV_pushtype(dict_T, dict, luaV_Dict)
++luaV_type_tostring(dict, LUAVIM_DICT)
++
++    static int
++luaV_dict_len (lua_State *L)
++{
++    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++    lua_pushinteger(L, (d == NULL) ? 0 : (int) d->dv_hashtab.ht_used);
++    return 1;
++}
++
++    static int
++luaV_dict_iter (lua_State *L UNUSED)
++{
++#ifdef FEAT_EVAL
++    hashitem_T *hi = (hashitem_T *) lua_touserdata(L, lua_upvalueindex(2));
++    int n = lua_tointeger(L, lua_upvalueindex(3));
++    dictitem_T *di;
++    if (n <= 0) return 0;
++    while (HASHITEM_EMPTY(hi)) hi++;
++    di = dict_lookup(hi);
++    lua_pushstring(L, (char *) hi->hi_key);
++    luaV_pushtypval(L, &di->di_tv);
++    lua_pushlightuserdata(L, (void *) (hi + 1));
++    lua_replace(L, lua_upvalueindex(2));
++    lua_pushinteger(L, n - 1);
++    lua_replace(L, lua_upvalueindex(3));
++    return 2;
++#else
++    return 0;
++#endif
++}
++
++    static int
++luaV_dict_call (lua_State *L)
++{
++    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++    hashtab_T *ht = &d->dv_hashtab;
++    lua_pushvalue(L, lua_upvalueindex(1)); /* pass cache table along */
++    lua_pushlightuserdata(L, (void *) ht->ht_array);
++    lua_pushinteger(L, ht->ht_used); /* # remaining items */
++    lua_pushcclosure(L, luaV_dict_iter, 3);
++    return 1;
++}
++
++    static int
++luaV_dict_index (lua_State *L)
++{
++    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++    char_u *key = (char_u *) luaL_checkstring(L, 2);
++    dictitem_T *di = dict_find(d, key, -1);
++    if (di == NULL)
++	lua_pushnil(L);
++    else
++	luaV_pushtypval(L, &di->di_tv);
++    return 1;
++}
++
++    static int
++luaV_dict_newindex (lua_State *L)
++{
++    dict_T *d = luaV_unbox(L, luaV_Dict, 1);
++    char_u *key = (char_u *) luaL_checkstring(L, 2);
++    dictitem_T *di;
++    if (d->dv_lock)
++	luaL_error(L, "dict is locked");
++    di = dict_find(d, key, -1);
++    if (di == NULL) /* non-existing key? */
++    {
++	if (lua_isnil(L, 3)) return 0;
++	di = dictitem_alloc(key);
++	if (di == NULL) return 0;
++	if (dict_add(d, di) == FAIL)
++	{
++		vim_free(di);
++		return 0;
++	}
++    }
++    else
++	clear_tv(&di->di_tv);
++    if (lua_isnil(L, 3)) /* remove? */
++    {
++	hashitem_T *hi = hash_find(&d->dv_hashtab, di->di_key);
++	hash_remove(&d->dv_hashtab, hi);
++	dictitem_free(di);
++    }
++    else {
++	typval_T v;
++	luaV_totypval(L, 3, &v);
++	copy_tv(&v, &di->di_tv);
++	clear_tv(&v);
++    }
++    return 0;
++}
++
++static const luaL_Reg luaV_Dict_mt[] = {
++    {"__tostring", luaV_dict_tostring},
++    {"__len", luaV_dict_len},
++    {"__call", luaV_dict_call},
++    {"__index", luaV_dict_index},
++    {"__newindex", luaV_dict_newindex},
++    {NULL, NULL}
++};
++
++
++/* =======   Buffer type   ======= */
++
++luaV_newtype(buf_T, buffer, luaV_Buffer, LUAVIM_BUFFER)
++luaV_pushtype(buf_T, buffer, luaV_Buffer)
++luaV_type_tostring(buffer, LUAVIM_BUFFER)
++
+     static int
+ luaV_buffer_len(lua_State *L)
+ {
+-    luaV_Buffer *b = lua_touserdata(L, 1);
+-    lua_pushinteger(L, (*b)->b_ml.ml_line_count);
++    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
++    lua_pushinteger(L, b->b_ml.ml_line_count);
+     return 1;
+ }
+ 
+     static int
+ luaV_buffer_call(lua_State *L)
+ {
+-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
++    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+     lua_settop(L, 1);
+-    set_curbuf(*b, DOBUF_SPLIT);
++    set_curbuf(b, DOBUF_SPLIT);
+     return 1;
+ }
+ 
+     static int
+ luaV_buffer_index(lua_State *L)
+ {
+-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
++    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+     linenr_T n = (linenr_T) lua_tointeger(L, 2);
+-    if (n > 0 && n <= (*b)->b_ml.ml_line_count)
+-	luaV_pushline(L, *b, n);
++    if (n > 0 && n <= b->b_ml.ml_line_count)
++	luaV_pushline(L, b, n);
+     else if (lua_isstring(L, 2))
+     {
+ 	const char *s = lua_tostring(L, 2);
+ 	if (strncmp(s, "name", 4) == 0)
+-	    lua_pushstring(L, (char *) (*b)->b_sfname);
++	    lua_pushstring(L, (char *) b->b_sfname);
+ 	else if (strncmp(s, "fname", 5) == 0)
+-	    lua_pushstring(L, (char *) (*b)->b_ffname);
++	    lua_pushstring(L, (char *) b->b_ffname);
+ 	else if (strncmp(s, "number", 6) == 0)
+-	    lua_pushinteger(L, (*b)->b_fnum);
++	    lua_pushinteger(L, b->b_fnum);
+ 	/* methods */
+ 	else if (strncmp(s,   "insert", 6) == 0
+ 		|| strncmp(s, "next", 4) == 0
+@@ -582,17 +987,17 @@
+     static int
+ luaV_buffer_newindex(lua_State *L)
+ {
+-    luaV_Buffer *b = (luaV_Buffer *) lua_touserdata(L, 1);
++    buf_T *b = (buf_T *) luaV_checkvalid(L, luaV_Buffer, 1);
+     linenr_T n = (linenr_T) luaL_checkinteger(L, 2);
+ #ifdef HAVE_SANDBOX
+     luaV_checksandbox(L);
+ #endif
+-    if (n < 1 || n > (*b)->b_ml.ml_line_count)
++    if (n < 1 || n > b->b_ml.ml_line_count)
+ 	luaL_error(L, "invalid line number");
+     if (lua_isnil(L, 3)) /* delete line */
+     {
+ 	buf_T *buf = curbuf;
+-	curbuf = *b;
++	curbuf = b;
+ 	if (u_savedel(n, 1L) == FAIL)
+ 	{
+ 	    curbuf = buf;
+@@ -605,7 +1010,7 @@
+ 	}
+ 	else {
+ 	    deleted_lines_mark(n, 1L);
+-	    if (*b == curwin->w_buffer) /* fix cursor in current window? */
++	    if (b == curwin->w_buffer) /* fix cursor in current window? */
+ 	    {
+ 		if (curwin->w_cursor.lnum >= n)
+ 		{
+@@ -625,7 +1030,7 @@
+     else if (lua_isstring(L, 3)) /* update line */
+     {
+ 	buf_T *buf = curbuf;
+-	curbuf = *b;
++	curbuf = b;
+ 	if (u_savesub(n) == FAIL)
+ 	{
+ 	    curbuf = buf;
+@@ -638,7 +1043,7 @@
+ 	}
+ 	else changed_bytes(n, 0);
+ 	curbuf = buf;
+-	if (*b == curwin->w_buffer)
++	if (b == curwin->w_buffer)
+ 	    check_cursor_col();
+     }
+     else
+@@ -649,8 +1054,9 @@
+     static int
+ luaV_buffer_insert(lua_State *L)
+ {
+-    luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+-    linenr_T last = (*b)->b_ml.ml_line_count;
++    luaV_Buffer *lb = luaV_checkudata(L, 1, LUAVIM_BUFFER);
++    buf_T *b = (buf_T *) luaV_checkcache(L, (void *) *lb);
++    linenr_T last = b->b_ml.ml_line_count;
+     linenr_T n = (linenr_T) luaL_optinteger(L, 3, last);
+     buf_T *buf;
+     luaL_checktype(L, 2, LUA_TSTRING);
+@@ -662,7 +1068,7 @@
+     if (n > last) n = last;
+     /* insert */
+     buf = curbuf;
+-    curbuf = *b;
++    curbuf = b;
+     if (u_save(n, n + 1) == FAIL)
+     {
+ 	curbuf = buf;
+@@ -684,7 +1090,8 @@
+ luaV_buffer_next(lua_State *L)
+ {
+     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+-    luaV_pushbuffer(L, (*b)->b_next);
++    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
++    luaV_pushbuffer(L, buf->b_next);
+     return 1;
+ }
+ 
+@@ -692,7 +1099,8 @@
+ luaV_buffer_previous(lua_State *L)
+ {
+     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+-    luaV_pushbuffer(L, (*b)->b_prev);
++    buf_T *buf = (buf_T *) luaV_checkcache(L, (void *) *b);
++    luaV_pushbuffer(L, buf->b_prev);
+     return 1;
+ }
+ 
+@@ -700,8 +1108,7 @@
+ luaV_buffer_isvalid(lua_State *L)
+ {
+     luaV_Buffer *b = luaV_checkudata(L, 1, LUAVIM_BUFFER);
+-    lua_pushlightuserdata(L, (void *) (*b));
+-    lua_rawget(L, LUA_ENVIRONINDEX);
++    luaV_getudata(L, *b);
+     lua_pushboolean(L, !lua_isnil(L, -1));
+     return 1;
+ }
+@@ -722,78 +1129,36 @@
+ 
+ /* =======   Window type   ======= */
+ 
+-    static luaV_Window *
+-luaV_newwindow(lua_State *L, win_T *win)
+-{
+-    luaV_Window *w = (luaV_Window *) lua_newuserdata(L, sizeof(luaV_Window));
+-    *w = win;
+-    lua_pushlightuserdata(L, (void *) win);
+-    lua_pushvalue(L, -2);
+-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[win] = udata */
+-    /* to avoid GC, store as key in env */
+-    lua_pushvalue(L, -1);
+-    lua_pushboolean(L, 1);
+-    lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = true */
+-    /* set metatable */
+-    luaV_getfield(L, LUAVIM_WINDOW);
+-    lua_setmetatable(L, -2);
+-    return w;
+-}
+-
+-    static luaV_Window *
+-luaV_pushwindow(lua_State *L, win_T *win)
+-{
+-    luaV_Window *w = NULL;
+-    if (win == NULL)
+-	lua_pushnil(L);
+-    else {
+-	lua_pushlightuserdata(L, (void *) win);
+-	lua_rawget(L, LUA_ENVIRONINDEX);
+-	if (lua_isnil(L, -1)) /* not interned? */
+-	{
+-	    lua_pop(L, 1);
+-	    w = luaV_newwindow(L, win);
+-	}
+-	else w = (luaV_Window *) lua_touserdata(L, -1);
+-    }
+-    return w;
+-}
+-
+-/* Window metamethods */
+-
+-    static int
+-luaV_window_tostring(lua_State *L)
+-{
+-    lua_pushfstring(L, "%s: %p", LUAVIM_WINDOW, lua_touserdata(L, 1));
+-    return 1;
+-}
++luaV_newtype(win_T, window, luaV_Window, LUAVIM_WINDOW)
++luaV_pushtype(win_T, window, luaV_Window)
++luaV_type_tostring(window, LUAVIM_WINDOW)
+ 
+     static int
+ luaV_window_call(lua_State *L)
+ {
+-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
++    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+     lua_settop(L, 1);
+-    win_goto(*w);
++    win_goto(w);
+     return 1;
+ }
+ 
+     static int
+ luaV_window_index(lua_State *L)
+ {
+-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
++    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+     const char *s = luaL_checkstring(L, 2);
+     if (strncmp(s, "buffer", 6) == 0)
+-	luaV_pushbuffer(L, (*w)->w_buffer);
++	luaV_pushbuffer(L, w->w_buffer);
+     else if (strncmp(s, "line", 4) == 0)
+-	lua_pushinteger(L, (*w)->w_cursor.lnum);
++	lua_pushinteger(L, w->w_cursor.lnum);
+     else if (strncmp(s, "col", 3) == 0)
+-	lua_pushinteger(L, (*w)->w_cursor.col + 1);
++	lua_pushinteger(L, w->w_cursor.col + 1);
+ #ifdef FEAT_VERTSPLIT
+     else if (strncmp(s, "width", 5) == 0)
+-	lua_pushinteger(L, W_WIDTH((*w)));
++	lua_pushinteger(L, W_WIDTH(w));
+ #endif
+     else if (strncmp(s, "height", 6) == 0)
+-	lua_pushinteger(L, (*w)->w_height);
++	lua_pushinteger(L, w->w_height);
+     /* methods */
+     else if (strncmp(s,   "next", 4) == 0
+ 	    || strncmp(s, "previous", 8) == 0
+@@ -810,7 +1175,7 @@
+     static int
+ luaV_window_newindex (lua_State *L)
+ {
+-    luaV_Window *w = (luaV_Window *) lua_touserdata(L, 1);
++    win_T *w = (win_T *) luaV_checkvalid(L, luaV_Window, 1);
+     const char *s = luaL_checkstring(L, 2);
+     int v = luaL_checkinteger(L, 3);
+     if (strncmp(s, "line", 4) == 0)
+@@ -818,9 +1183,9 @@
+ #ifdef HAVE_SANDBOX
+ 	luaV_checksandbox(L);
+ #endif
+-	if (v < 1 || v > (*w)->w_buffer->b_ml.ml_line_count)
++	if (v < 1 || v > w->w_buffer->b_ml.ml_line_count)
+ 	    luaL_error(L, "line out of range");
+-	(*w)->w_cursor.lnum = v;
++	w->w_cursor.lnum = v;
+ 	update_screen(VALID);
+     }
+     else if (strncmp(s, "col", 3) == 0)
+@@ -828,7 +1193,7 @@
+ #ifdef HAVE_SANDBOX
+ 	luaV_checksandbox(L);
+ #endif
+-	(*w)->w_cursor.col = v - 1;
++	w->w_cursor.col = v - 1;
+ 	update_screen(VALID);
+     }
+ #ifdef FEAT_VERTSPLIT
+@@ -838,7 +1203,7 @@
+ #ifdef FEAT_GUI
+ 	need_mouse_correct = TRUE;
+ #endif
+-	curwin = *w;
++	curwin = w;
+ 	win_setwidth(v);
+ 	curwin = win;
+     }
+@@ -849,7 +1214,7 @@
+ #ifdef FEAT_GUI
+ 	need_mouse_correct = TRUE;
+ #endif
+-	curwin = *w;
++	curwin = w;
+ 	win_setheight(v);
+ 	curwin = win;
+     }
+@@ -862,7 +1227,8 @@
+ luaV_window_next(lua_State *L)
+ {
+     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+-    luaV_pushwindow(L, (*w)->w_next);
++    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
++    luaV_pushwindow(L, win->w_next);
+     return 1;
+ }
+ 
+@@ -870,7 +1236,8 @@
+ luaV_window_previous(lua_State *L)
+ {
+     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+-    luaV_pushwindow(L, (*w)->w_prev);
++    win_T *win = (win_T *) luaV_checkcache(L, (void *) *w);
++    luaV_pushwindow(L, win->w_prev);
+     return 1;
+ }
+ 
+@@ -878,8 +1245,7 @@
+ luaV_window_isvalid(lua_State *L)
+ {
+     luaV_Window *w = luaV_checkudata(L, 1, LUAVIM_WINDOW);
+-    lua_pushlightuserdata(L, (void *) (*w));
+-    lua_rawget(L, LUA_ENVIRONINDEX);
++    luaV_getudata(L, *w);
+     lua_pushboolean(L, !lua_isnil(L, -1));
+     return 1;
+ }
+@@ -925,6 +1291,31 @@
+ }
+ 
+     static int
++luaV_debug(lua_State *L)
++{
++    lua_settop(L, 0);
++    lua_getglobal(L, "vim");
++    lua_getfield(L, -1, "eval");
++    lua_remove(L, -2); /* vim.eval at position 1 */
++    for (;;)
++    {
++	const char *input;
++	size_t l;
++	lua_pushvalue(L, 1); /* vim.eval */
++	lua_pushliteral(L, "input('lua_debug> ')");
++	lua_call(L, 1, 1); /* return string */
++	input = lua_tolstring(L, -1, &l);
++	if (l == 0 || strcmp(input, "cont") == 0)
++	    return 0;
++	msg_putchar('\n'); /* avoid outputting on input line */
++	if (luaL_loadbuffer(L, input, l, "=(debug command)")
++		|| lua_pcall(L, 0, 0, 0))
++	    luaV_emsg(L);
++	lua_settop(L, 1); /* remove eventual returns, but keep vim.eval */
++    }
++}
++
++    static int
+ luaV_command(lua_State *L)
+ {
+     do_cmdline_cmd((char_u *) luaL_checkstring(L, 1));
+@@ -938,6 +1329,7 @@
+     typval_T *tv = eval_expr((char_u *) luaL_checkstring(L, 1), NULL);
+     if (tv == NULL) luaL_error(L, "invalid expression");
+     luaV_pushtypval(L, tv);
++    free_tv(tv);
+     return 1;
+ }
+ 
+@@ -956,6 +1348,28 @@
+ }
+ 
+     static int
++luaV_list(lua_State *L)
++{
++    list_T *l = list_alloc();
++    if (l == NULL)
++	lua_pushnil(L);
++    else
++	luaV_newlist(L, l);
++    return 1;
++}
++
++    static int
++luaV_dict(lua_State *L)
++{
++    dict_T *d = dict_alloc();
++    if (d == NULL)
++	lua_pushnil(L);
++    else
++	luaV_newdict(L, d);
++    return 1;
++}
++
++    static int
+ luaV_buffer(lua_State *L)
+ {
+     buf_T *buf;
+@@ -981,15 +1395,10 @@
+ 		    break;
+ 	    }
+ 	}
+-	if (buf == NULL) /* not found? */
+-	    lua_pushnil(L);
+-	else
+-	    luaV_pushbuffer(L, buf);
+     }
+-    else {
++    else
+ 	buf = (lua_toboolean(L, 1)) ? firstbuf : curbuf; /* first buffer? */
+-	luaV_pushbuffer(L, buf);
+-    }
++    luaV_pushbuffer(L, buf);
+     return 1;
+ }
+ 
+@@ -1002,59 +1411,62 @@
+ 	int n = lua_tointeger(L, 1);
+ 	for (win = firstwin; win != NULL; win = win->w_next, n--)
+ 	    if (n == 1) break;
+-	if (win == NULL) /* not found? */
+-	    lua_pushnil(L);
+-	else
+-	    luaV_pushwindow(L, win);
+     }
+-    else {
++    else
+ 	win = (lua_toboolean(L, 1)) ? firstwin : curwin; /* first window? */
+-	luaV_pushwindow(L, win);
+-    }
++    luaV_pushwindow(L, win);
+     return 1;
+ }
+ 
+     static int
+ luaV_open(lua_State *L)
+ {
+-    luaV_Buffer *b;
+     char_u *s = NULL;
+ #ifdef HAVE_SANDBOX
+     luaV_checksandbox(L);
+ #endif
+     if (lua_isstring(L, 1)) s = (char_u *) lua_tostring(L, 1);
+-    b = luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
+-    return 1;
+-}
+-
+-    static int
+-luaV_isbuffer(lua_State *L)
+-{
+-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_BUFFER) != NULL);
++    luaV_pushbuffer(L, buflist_new(s, NULL, 1L, BLN_LISTED));
+     return 1;
+ }
+ 
+     static int
+-luaV_iswindow(lua_State *L)
++luaV_type(lua_State *L)
+ {
+-    lua_pushboolean(L, luaV_toudata(L, 1, LUAVIM_WINDOW) != NULL);
+-    return 1;
+-}
+-
+-/* for freeing buffer and window objects; lightuserdata as arg */
+-    static int
+-luaV_free(lua_State *L)
+-{
+-    lua_pushvalue(L, 1); /* lightudata */
+-    lua_rawget(L, LUA_ENVIRONINDEX);
+-    if (!lua_isnil(L, -1))
++    luaL_checkany(L, 1);
++    if (lua_type(L, 1) == LUA_TUSERDATA) /* check vim udata? */
+     {
+-	lua_pushnil(L);
+-	lua_rawset(L, LUA_ENVIRONINDEX); /* env[udata] = nil */
+-	lua_pushnil(L);
+-	lua_rawset(L, LUA_ENVIRONINDEX); /* env[lightudata] = nil */
++	lua_settop(L, 1);
++	if (lua_getmetatable(L, 1))
++	{
++	    luaV_getfield(L, LUAVIM_LIST);
++	    if (lua_rawequal(L, -1, 2))
++	    {
++		lua_pushstring(L, "list");
++		return 1;
++	    }
++	    luaV_getfield(L, LUAVIM_DICT);
++	    if (lua_rawequal(L, -1, 2))
++	    {
++		lua_pushstring(L, "dict");
++		return 1;
++	    }
++	    luaV_getfield(L, LUAVIM_BUFFER);
++	    if (lua_rawequal(L, -1, 2))
++	    {
++		lua_pushstring(L, "buffer");
++		return 1;
++	    }
++	    luaV_getfield(L, LUAVIM_WINDOW);
++	    if (lua_rawequal(L, -1, 2))
++	    {
++		lua_pushstring(L, "window");
++		return 1;
++	    }
++	}
+     }
+-    return 0;
++    lua_pushstring(L, luaL_typename(L, 1)); /* fallback */
++    return 1;
+ }
+ 
+ static const luaL_Reg luaV_module[] = {
+@@ -1062,37 +1474,128 @@
+     {"eval", luaV_eval},
+     {"beep", luaV_beep},
+     {"line", luaV_line},
++    {"list", luaV_list},
++    {"dict", luaV_dict},
+     {"buffer", luaV_buffer},
+     {"window", luaV_window},
+     {"open", luaV_open},
+-    {"isbuffer", luaV_isbuffer},
+-    {"iswindow", luaV_iswindow},
++    {"type", luaV_type},
+     {NULL, NULL}
+ };
+ 
++/* for freeing list, dict, buffer and window objects; lightuserdata as arg */
++    static int
++luaV_free(lua_State *L)
++{
++    lua_pushnil(L);
++    luaV_setudata(L, lua_touserdata(L, 1));
++    return 0;
++}
++
++    static int
++luaV_luaeval (lua_State *L)
++{
++    luaL_Buffer b;
++    size_t l;
++    const char *str = lua_tolstring(L, 1, &l);
++    typval_T *arg = (typval_T *) lua_touserdata(L, 2);
++    typval_T *rettv = (typval_T *) lua_touserdata(L, 3);
++    luaL_buffinit(L, &b);
++    luaL_addlstring(&b, LUAVIM_EVALHEADER, sizeof(LUAVIM_EVALHEADER) - 1);
++    luaL_addlstring(&b, str, l);
++    luaL_pushresult(&b);
++    str = lua_tolstring(L, -1, &l);
++    if (luaL_loadbuffer(L, str, l, LUAVIM_EVALNAME)) /* compile error? */
++    {
++	luaV_emsg(L);
++	return 0;
++    }
++    luaV_pushtypval(L, arg);
++    if (lua_pcall(L, 1, 1, 0)) /* running error? */
++    {
++	luaV_emsg(L);
++	return 0;
++    }
++    luaV_totypval(L, -1, rettv);
++    return 0;
++}
++
++    static int
++luaV_setref (lua_State *L)
++{
++    int copyID = lua_tointeger(L, 1);
++    typval_T tv;
++    luaV_getfield(L, LUAVIM_LIST);
++    luaV_getfield(L, LUAVIM_DICT);
++    lua_pushnil(L);
++    while (lua_next(L, lua_upvalueindex(1)) != 0) /* traverse cache table */
++    {
++	lua_getmetatable(L, -1);
++	if (lua_rawequal(L, -1, 2)) /* list? */
++	{
++	    tv.v_type = VAR_LIST;
++	    tv.vval.v_list = (list_T *) lua_touserdata(L, 4); /* key */
++	}
++	else if (lua_rawequal(L, -1, 3)) /* dict? */
++	{
++	    tv.v_type = VAR_DICT;
++	    tv.vval.v_dict = (dict_T *) lua_touserdata(L, 4); /* key */
++	}
++	lua_pop(L, 2); /* metatable and value */
++	set_ref_in_item(&tv, copyID);
++    }
++    return 0;
++}
++
+     static int
+ luaopen_vim(lua_State *L)
+ {
+-    /* set environment */
++    /* set cache table */
+     lua_newtable(L);
+     lua_newtable(L);
+-    lua_pushliteral(L, "v");
++    lua_pushstring(L, "v");
+     lua_setfield(L, -2, "__mode");
+-    lua_setmetatable(L, -2);
+-    lua_replace(L, LUA_ENVIRONINDEX);
++    lua_setmetatable(L, -2); /* cache is weak-valued */
+     /* print */
+     lua_pushcfunction(L, luaV_print);
+     lua_setglobal(L, "print");
++    /* debug.debug */
++    lua_getglobal(L, "debug");
++    lua_pushcfunction(L, luaV_debug);
++    lua_setfield(L, -2, "debug");
++    lua_pop(L, 1);
+     /* free */
+     lua_pushlightuserdata(L, (void *) LUAVIM_FREE);
+-    lua_pushcfunction(L, luaV_free);
++    lua_pushvalue(L, 1); /* cache table */
++    lua_pushcclosure(L, luaV_free, 1);
++    lua_rawset(L, LUA_REGISTRYINDEX);
++    /* luaeval */
++    lua_pushlightuserdata(L, (void *) LUAVIM_LUAEVAL);
++    lua_pushvalue(L, 1); /* cache table */
++    lua_pushcclosure(L, luaV_luaeval, 1);
++    lua_rawset(L, LUA_REGISTRYINDEX);
++    /* setref */
++    lua_pushlightuserdata(L, (void *) LUAVIM_SETREF);
++    lua_pushvalue(L, 1); /* cache table */
++    lua_pushcclosure(L, luaV_setref, 1);
+     lua_rawset(L, LUA_REGISTRYINDEX);
+     /* register */
++    luaV_newmetatable(L, LUAVIM_LIST);
++    lua_pushvalue(L, 1);
++    luaV_openlib(L, luaV_List_mt, 1);
++    luaV_newmetatable(L, LUAVIM_DICT);
++    lua_pushvalue(L, 1);
++    luaV_openlib(L, luaV_Dict_mt, 1);
+     luaV_newmetatable(L, LUAVIM_BUFFER);
+-    luaL_register(L, NULL, luaV_Buffer_mt);
++    lua_pushvalue(L, 1); /* cache table */
++    luaV_openlib(L, luaV_Buffer_mt, 1);
+     luaV_newmetatable(L, LUAVIM_WINDOW);
+-    luaL_register(L, NULL, luaV_Window_mt);
+-    luaL_register(L, LUAVIM_NAME, luaV_module);
++    lua_pushvalue(L, 1); /* cache table */
++    luaV_openlib(L, luaV_Window_mt, 1);
++    lua_newtable(L); /* vim table */
++    lua_pushvalue(L, 1); /* cache table */
++    luaV_openlib(L, luaV_module, 1);
++    lua_setglobal(L, LUAVIM_NAME);
+     return 0;
+ }
+ 
+@@ -1123,7 +1626,7 @@
+ static lua_State *L = NULL;
+ 
+     static int
+-lua_is_open(void)
++lua_isopen(void)
+ {
+     return L != NULL;
+ }
+@@ -1131,7 +1634,7 @@
+     static int
+ lua_init(void)
+ {
+-    if (L == NULL)
++    if (!lua_isopen())
+     {
+ #ifdef DYNAMIC_LUA
+ 	if (!lua_enabled(TRUE))
+@@ -1148,7 +1651,7 @@
+     void
+ lua_end(void)
+ {
+-    if (L != NULL)
++    if (lua_isopen())
+     {
+ 	lua_close(L);
+ 	L = NULL;
+@@ -1191,7 +1694,7 @@
+     }
+     luaV_setrange(L, eap->line1, eap->line2);
+     luaL_buffinit(L, &b);
+-    luaL_addlstring(&b, "return function(line) ", 22); /* header */
++    luaL_addlstring(&b, "return function(line, linenr) ", 30); /* header */
+     luaL_addlstring(&b, s, strlen(s));
+     luaL_addlstring(&b, " end", 4); /* footer */
+     luaL_pushresult(&b);
+@@ -1208,7 +1711,8 @@
+     {
+ 	lua_pushvalue(L, -1); /* function */
+ 	luaV_pushline(L, curbuf, l); /* current line as arg */
+-	if (lua_pcall(L, 1, 1, 0))
++	lua_pushinteger(L, l); /* current line number as arg */
++	if (lua_pcall(L, 2, 1, 0))
+ 	{
+ 	    luaV_emsg(L);
+ 	    break;
+@@ -1242,23 +1746,36 @@
+     }
+ }
+ 
+-/* buffer */
++#define luaV_freetype(typ,tname) \
++	void \
++    lua_##tname##_free(typ *o) \
++    { \
++	if (!lua_isopen()) return; \
++	luaV_getfield(L, LUAVIM_FREE); \
++	lua_pushlightuserdata(L, (void *) o); \
++	lua_call(L, 1, 0); \
++    }
++
++luaV_freetype(buf_T, buffer)
++luaV_freetype(win_T, window)
++
+     void
+-lua_buffer_free(buf_T *buf)
++do_luaeval (char_u *str, typval_T *arg, typval_T *rettv)
+ {
+-    if (!lua_is_open()) return;
+-    luaV_getfield(L, LUAVIM_FREE);
+-    lua_pushlightuserdata(L, (void *) buf);
+-    lua_call(L, 1, 0);
++    lua_init();
++    luaV_getfield(L, LUAVIM_LUAEVAL);
++    lua_pushstring(L, (char *) str);
++    lua_pushlightuserdata(L, (void *) arg);
++    lua_pushlightuserdata(L, (void *) rettv);
++    lua_call(L, 3, 0);
+ }
+ 
+-/* window */
+     void
+-lua_window_free(win_T *win)
++set_ref_in_lua (int copyID)
+ {
+-    if (!lua_is_open()) return;
+-    luaV_getfield(L, LUAVIM_FREE);
+-    lua_pushlightuserdata(L, (void *) win);
++    if (!lua_isopen()) return;
++    luaV_getfield(L, LUAVIM_SETREF);
++    lua_pushinteger(L, copyID);
+     lua_call(L, 1, 0);
+ }
+ 
+diff -Naur vim73.orig/src/if_mzsch.c vim73/src/if_mzsch.c
+--- vim73.orig/src/if_mzsch.c	2010-06-26 03:56:17.000000000 +0000
++++ vim73/src/if_mzsch.c	2013-06-07 17:07:31.572251854 +0000
+@@ -1,11 +1,9 @@
+ /* vi:set ts=8 sts=4 sw=4:
+  *
+  * MzScheme interface by Sergey Khorev <sergey.khorev@gmail.com>
+- * Original work by Brent Fulgham <bfulgham@debian.org>
++ * Based on work by Brent Fulgham <bfulgham@debian.org>
+  * (Based on lots of help from Matthew Flatt)
+  *
+- * TODO Convert byte-strings to char strings?
+- *
+  * This consists of six parts:
+  * 1. MzScheme interpreter main program
+  * 2. Routines that handle the external interface between MzScheme and
+@@ -31,8 +29,6 @@
+  * depend". */
+ #if defined(FEAT_MZSCHEME) || defined(PROTO)
+ 
+-#include <assert.h>
+-
+ /* Base data structures */
+ #define SCHEME_VIMBUFFERP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_buffer_type)
+ #define SCHEME_VIMWINDOWP(obj)  SAME_TYPE(SCHEME_TYPE(obj), mz_window_type)
+@@ -144,7 +140,12 @@
+ static int do_mzscheme_command(exarg_T *, void *, Scheme_Closed_Prim *what);
+ static void startup_mzscheme(void);
+ static char *string_to_line(Scheme_Object *obj);
+-static void do_output(char *mesg, long len);
++#if MZSCHEME_VERSION_MAJOR >= 500
++# define OUTPUT_LEN_TYPE intptr_t
++#else
++# define OUTPUT_LEN_TYPE long
++#endif
++static void do_output(char *mesg, OUTPUT_LEN_TYPE len);
+ static void do_printf(char *format, ...);
+ static void do_flush(void);
+ static Scheme_Object *_apply_thunk_catch_exceptions(
+@@ -168,10 +169,13 @@
+ static int mzscheme_env_main(Scheme_Env *env, int argc, char **argv);
+ static int mzscheme_init(void);
+ #ifdef FEAT_EVAL
+-static Scheme_Object *vim_to_mzscheme(typval_T *vim_value, int depth,
++static Scheme_Object *vim_to_mzscheme(typval_T *vim_value);
++static Scheme_Object *vim_to_mzscheme_impl(typval_T *vim_value, int depth,
+ 	Scheme_Hash_Table *visited);
+-static int mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
++static int mzscheme_to_vim(Scheme_Object *obj, typval_T *tv);
++static int mzscheme_to_vim_impl(Scheme_Object *obj, typval_T *tv, int depth,
+ 	Scheme_Hash_Table *visited);
++static Scheme_Object *vim_funcref(void *data, int argc, Scheme_Object **argv);
+ #endif
+ 
+ #ifdef MZ_PRECISE_GC
+@@ -185,6 +189,13 @@
+ }
+ static int buffer_fixup_proc(void *obj)
+ {
++    /* apparently not needed as the object will be uncollectable while
++     * the buffer is alive
++     */
++    /*
++    vim_mz_buffer* buf = (vim_mz_buffer*) obj;
++    buf->buf->b_mzscheme_ref = GC_fixup_self(obj);
++    */
+     return buffer_size_proc(obj);
+ }
+ static int window_size_proc(void *obj UNUSED)
+@@ -197,12 +208,26 @@
+ }
+ static int window_fixup_proc(void *obj)
+ {
++    /* apparently not needed as the object will be uncollectable while
++     * the window is alive
++     */
++    /*
++    vim_mz_window* win = (vim_mz_window*) obj;
++    win->win->w_mzscheme_ref = GC_fixup_self(obj);
++    */
+     return window_size_proc(obj);
+ }
++/* with precise GC, w_mzscheme_ref and b_mzscheme_ref are immobile boxes
++ * containing pointers to a window/buffer
++ * with conservative GC these are simply pointers*/
++# define WINDOW_REF(win) *(vim_mz_window **)((win)->w_mzscheme_ref)
++# define BUFFER_REF(buf) *(vim_mz_buffer **)((buf)->b_mzscheme_ref)
++#else
++# define WINDOW_REF(win) (vim_mz_window *)((win)->w_mzscheme_ref)
++# define BUFFER_REF(buf) (vim_mz_buffer *)((buf)->b_mzscheme_ref)
+ #endif
+ 
+ #ifdef DYNAMIC_MZSCHEME
+-
+ static Scheme_Object *dll_scheme_eof;
+ static Scheme_Object *dll_scheme_false;
+ static Scheme_Object *dll_scheme_void;
+@@ -321,6 +346,7 @@
+     (Scheme_Object *s);
+ static Scheme_Object *(*dll_scheme_char_string_to_path)
+     (Scheme_Object *s);
++static void *(*dll_scheme_set_collects_path)(Scheme_Object *p);
+ # endif
+ static Scheme_Hash_Table *(*dll_scheme_make_hash_table)(int type);
+ static void (*dll_scheme_hash_set)(Scheme_Hash_Table *table,
+@@ -380,11 +406,11 @@
+ # endif
+ # define scheme_gc_ptr_ok dll_scheme_gc_ptr_ok
+ # if MZSCHEME_VERSION_MAJOR < 299
+-#  define scheme_get_sized_string_output dll_scheme_get_sized_string_output
++#  define scheme_get_sized_byte_string_output dll_scheme_get_sized_string_output
+ # else
+ #  define scheme_get_sized_byte_string_output \
+     dll_scheme_get_sized_byte_string_output
+-# define scheme_get_param dll_scheme_get_param
++#  define scheme_get_param dll_scheme_get_param
+ # endif
+ # define scheme_intern_symbol dll_scheme_intern_symbol
+ # define scheme_lookup_global dll_scheme_lookup_global
+@@ -393,8 +419,8 @@
+ # define scheme_make_pair dll_scheme_make_pair
+ # define scheme_make_prim_w_arity dll_scheme_make_prim_w_arity
+ # if MZSCHEME_VERSION_MAJOR < 299
+-#  define scheme_make_string dll_scheme_make_string
+-#  define scheme_make_string_output_port dll_scheme_make_string_output_port
++#  define scheme_make_byte_string dll_scheme_make_string
++#  define scheme_make_byte_string_output_port dll_scheme_make_string_output_port
+ # else
+ #  define scheme_make_byte_string dll_scheme_make_byte_string
+ #  define scheme_make_byte_string_output_port \
+@@ -423,6 +449,7 @@
+     dll_scheme_char_string_to_byte_string
+ #  define scheme_char_string_to_path \
+     dll_scheme_char_string_to_path
++#  define scheme_set_collects_path dll_scheme_set_collects_path
+ # endif
+ # define scheme_make_hash_table dll_scheme_make_hash_table
+ # define scheme_hash_set dll_scheme_hash_set
+@@ -531,6 +558,7 @@
+     {"scheme_char_string_to_byte_string",
+ 	(void **)&dll_scheme_char_string_to_byte_string},
+     {"scheme_char_string_to_path", (void **)&dll_scheme_char_string_to_path},
++    {"scheme_set_collects_path", (void **)&dll_scheme_set_collects_path},
+ # endif
+     {"scheme_make_hash_table", (void **)&dll_scheme_make_hash_table},
+     {"scheme_hash_set", (void **)&dll_scheme_hash_set},
+@@ -556,20 +584,20 @@
+ 
+     if (hMzGC && hMzSch)
+ 	return OK;
+-    hMzSch = LoadLibrary(sch_dll);
+-    hMzGC = LoadLibrary(gc_dll);
++    hMzSch = vimLoadLib(sch_dll);
++    hMzGC = vimLoadLib(gc_dll);
+ 
+-    if (!hMzSch)
++    if (!hMzGC)
+     {
+ 	if (verbose)
+-	    EMSG2(_(e_loadlib), sch_dll);
++	    EMSG2(_(e_loadlib), gc_dll);
+ 	return FAIL;
+     }
+ 
+-    if (!hMzGC)
++    if (!hMzSch)
+     {
+ 	if (verbose)
+-	    EMSG2(_(e_loadlib), gc_dll);
++	    EMSG2(_(e_loadlib), sch_dll);
+ 	return FAIL;
+     }
+ 
+@@ -627,11 +655,40 @@
+ }
+ #endif /* DYNAMIC_MZSCHEME */
+ 
++#if MZSCHEME_VERSION_MAJOR < 299
++# define GUARANTEED_STRING_ARG(proc, num) GUARANTEE_STRING(proc, num)
++#else
++    static Scheme_Object *
++guaranteed_byte_string_arg(char *proc, int num, int argc, Scheme_Object **argv)
++{
++    if (SCHEME_BYTE_STRINGP(argv[num]))
++    {
++	return argv[num];
++    }
++    else if (SCHEME_CHAR_STRINGP(argv[num]))
++    {
++	Scheme_Object *tmp = NULL;
++	MZ_GC_DECL_REG(2);
++	MZ_GC_VAR_IN_REG(0, argv[num]);
++	MZ_GC_VAR_IN_REG(1, tmp);
++	MZ_GC_REG();
++	tmp = scheme_char_string_to_byte_string(argv[num]);
++	MZ_GC_UNREG();
++	return tmp;
++    }
++    else
++	scheme_wrong_type(proc, "string", num, argc, argv);
++    /* unreachable */
++    return scheme_void;
++}
++# define GUARANTEED_STRING_ARG(proc, num) guaranteed_byte_string_arg(proc, num, argc, argv)
++#endif
++
+ /* need to put it here for dynamic stuff to work */
+ #if defined(INCLUDE_MZSCHEME_BASE)
+ # include "mzscheme_base.c"
+ #elif MZSCHEME_VERSION_MAJOR >= 400
+-# error MzScheme 4.x must include mzscheme_base.c, for MinGW32 you need to define MZSCHEME_GENERATE_BASE=yes
++# error MzScheme >=4 must include mzscheme_base.c, for MinGW32 you need to define MZSCHEME_GENERATE_BASE=yes
+ #endif
+ 
+ /*
+@@ -794,65 +851,80 @@
+ #endif
+ }
+ 
+-    void
+-mzscheme_main(void)
++#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
++static __declspec(thread) void *tls_space;
++#endif
++
++/*
++ * Since version 4.x precise GC requires trampolined startup.
++ * Futures and places in version 5.x need it too.
++ */
++#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400 \
++    || MZSCHEME_VERSION_MAJOR >= 500 && (defined(MZ_USE_FUTURES) || defined(MZ_USE_PLACES))
++# ifdef DYNAMIC_MZSCHEME
++#  error Precise GC v.4+ or Racket with futures/places do not support dynamic MzScheme
++# endif
++# define TRAMPOLINED_MZVIM_STARTUP
++#endif
++
++    int
++mzscheme_main(int argc, char** argv)
+ {
+-#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR >= 400
+-    /* use trampoline for precise GC in MzScheme >= 4.x */
+-    scheme_main_setup(TRUE, mzscheme_env_main, 0, NULL);
++#if MZSCHEME_VERSION_MAJOR >= 500 && defined(WIN32) && defined(USE_THREAD_LOCAL)
++    scheme_register_tls_space(&tls_space, 0);
++#endif
++#ifdef TRAMPOLINED_MZVIM_STARTUP
++    return scheme_main_setup(TRUE, mzscheme_env_main, argc, argv);
+ #else
+-    mzscheme_env_main(NULL, 0, NULL);
++    return mzscheme_env_main(NULL, argc, argv);
+ #endif
+ }
+ 
+     static int
+-mzscheme_env_main(Scheme_Env *env, int argc UNUSED, char **argv UNUSED)
++mzscheme_env_main(Scheme_Env *env, int argc, char **argv)
+ {
+-    /* neither argument nor return values are used */
+-#ifdef MZ_PRECISE_GC
+-# if MZSCHEME_VERSION_MAJOR < 400
+-    /*
+-     * Starting from version 4.x, embedding applications must use
+-     * scheme_main_setup/scheme_main_stack_setup trampolines
+-     * rather than setting stack base directly with scheme_set_stack_base
+-     */
++    int vim_main_result;
++#ifdef TRAMPOLINED_MZVIM_STARTUP
++    /* Scheme has created the environment for us */
++    environment = env;
++#else
++# ifdef MZ_PRECISE_GC
+     Scheme_Object   *dummy = NULL;
+     MZ_GC_DECL_REG(1);
+     MZ_GC_VAR_IN_REG(0, dummy);
+ 
+     stack_base = &__gc_var_stack__;
+ # else
+-    /* environment has been created by us by Scheme */
+-    environment = env;
+-# endif
+-    /*
+-     * In 4.x, all activities must be performed inside trampoline
+-     * so we are forced to initialise GC immediately
+-     * This can be postponed in 3.x but I see no point in implementing
+-     * a feature which will work in older versions only.
+-     * One would better use conservative GC if he needs dynamic MzScheme
+-     */
+-    mzscheme_init();
+-#else
+     int dummy = 0;
+     stack_base = (void *)&dummy;
++# endif
+ #endif
+-    main_loop(FALSE, FALSE);
+-#if defined(MZ_PRECISE_GC) && MZSCHEME_VERSION_MAJOR < 400
++
++    /* mzscheme_main is called as a trampoline from main.
++     * We trampoline into vim_main2
++     * Passing argc, argv through from mzscheme_main
++     */
++    vim_main_result = vim_main2(argc, argv);
++#if !defined(TRAMPOLINED_MZVIM_STARTUP) && defined(MZ_PRECISE_GC)
+     /* releasing dummy */
+     MZ_GC_REG();
+     MZ_GC_UNREG();
+ #endif
+-    return 0;
++    return vim_main_result;
+ }
+ 
+     static void
+ startup_mzscheme(void)
+ {
+-#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
++#ifndef TRAMPOLINED_MZVIM_STARTUP
+     scheme_set_stack_base(stack_base, 1);
+ #endif
+ 
++#ifndef TRAMPOLINED_MZVIM_STARTUP
++    /* in newer versions of precise GC the initial env has been created */
++    environment = scheme_basic_env();
++#endif
++
+     MZ_REGISTER_STATIC(environment);
+     MZ_REGISTER_STATIC(curout);
+     MZ_REGISTER_STATIC(curerr);
+@@ -861,10 +933,6 @@
+     MZ_REGISTER_STATIC(exn_message);
+     MZ_REGISTER_STATIC(vim_exn);
+ 
+-#if !defined(MZ_PRECISE_GC) || MZSCHEME_VERSION_MAJOR < 400
+-    /* in newer versions of precise GC the initial env has been created */
+-    environment = scheme_basic_env();
+-#endif
+     MZ_GC_CHECK();
+ 
+ #ifdef INCLUDE_MZSCHEME_BASE
+@@ -897,10 +965,32 @@
+ #ifdef MZSCHEME_COLLECTS
+     /* setup 'current-library-collection-paths' parameter */
+ # if MZSCHEME_VERSION_MAJOR >= 299
++#  ifdef MACOS
+     {
+ 	Scheme_Object	*coll_byte_string = NULL;
+ 	Scheme_Object	*coll_char_string = NULL;
+ 	Scheme_Object	*coll_path = NULL;
++
++	MZ_GC_DECL_REG(3);
++	MZ_GC_VAR_IN_REG(0, coll_byte_string);
++	MZ_GC_VAR_IN_REG(1, coll_char_string);
++	MZ_GC_VAR_IN_REG(2, coll_path);
++	MZ_GC_REG();
++	coll_byte_string = scheme_make_byte_string(MZSCHEME_COLLECTS);
++	MZ_GC_CHECK();
++	coll_char_string = scheme_byte_string_to_char_string(coll_byte_string);
++	MZ_GC_CHECK();
++	coll_path = scheme_char_string_to_path(coll_char_string);
++	MZ_GC_CHECK();
++	scheme_set_collects_path(coll_path);
++	MZ_GC_CHECK();
++	MZ_GC_UNREG();
++    }
++#  else
++   {
++	Scheme_Object	*coll_byte_string = NULL;
++	Scheme_Object	*coll_char_string = NULL;
++	Scheme_Object	*coll_path = NULL;
+ 	Scheme_Object	*coll_pair = NULL;
+ 	Scheme_Config	*config = NULL;
+ 
+@@ -919,12 +1009,13 @@
+ 	MZ_GC_CHECK();
+ 	coll_pair = scheme_make_pair(coll_path, scheme_null);
+ 	MZ_GC_CHECK();
+-	config = scheme_config;
++	config = scheme_current_config();
+ 	MZ_GC_CHECK();
+ 	scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair);
+ 	MZ_GC_CHECK();
+ 	MZ_GC_UNREG();
+     }
++#  endif
+ # else
+     {
+ 	Scheme_Object	*coll_string = NULL;
+@@ -936,11 +1027,11 @@
+ 	MZ_GC_VAR_IN_REG(1, coll_pair);
+ 	MZ_GC_VAR_IN_REG(2, config);
+ 	MZ_GC_REG();
+-	coll_string = scheme_make_string(MZSCHEME_COLLECTS);
++	coll_string = scheme_make_byte_string(MZSCHEME_COLLECTS);
+ 	MZ_GC_CHECK();
+ 	coll_pair = scheme_make_pair(coll_string, scheme_null);
+ 	MZ_GC_CHECK();
+-	config = scheme_config;
++	config = scheme_current_config();
+ 	MZ_GC_CHECK();
+ 	scheme_set_param(config, MZCONFIG_COLLECTION_PATHS, coll_pair);
+ 	MZ_GC_CHECK();
+@@ -983,7 +1074,7 @@
+ 	    MZ_GC_VAR_IN_REG(3, guard);
+ 	    MZ_GC_VAR_IN_REG(4, config);
+ 	    MZ_GC_REG();
+-	    config = scheme_config;
++	    config = scheme_current_config();
+ 	    MZ_GC_CHECK();
+ 	    args[0] = scheme_get_param(config, MZCONFIG_SECURITY_GUARD);
+ 	    MZ_GC_CHECK();
+@@ -1047,12 +1138,12 @@
+ 	MZ_GC_DECL_REG(1);
+ 	MZ_GC_VAR_IN_REG(0, config);
+ 	MZ_GC_REG();
+-	config = scheme_config;
++	config = scheme_current_config();
+ 	MZ_GC_CHECK();
+ 	/* recreate ports each call effectively clearing these ones */
+-	curout = scheme_make_string_output_port();
++	curout = scheme_make_byte_string_output_port();
+ 	MZ_GC_CHECK();
+-	curerr = scheme_make_string_output_port();
++	curerr = scheme_make_byte_string_output_port();
+ 	MZ_GC_CHECK();
+ 	scheme_set_param(config, MZCONFIG_OUTPUT_PORT, curout);
+ 	MZ_GC_CHECK();
+@@ -1141,13 +1232,21 @@
+ {
+     if (buf->b_mzscheme_ref)
+     {
+-	vim_mz_buffer *bp;
++	vim_mz_buffer *bp = NULL;
++	MZ_GC_DECL_REG(1);
++	MZ_GC_VAR_IN_REG(0, bp);
++	MZ_GC_REG();
+ 
+-	bp = buf->b_mzscheme_ref;
++	bp = BUFFER_REF(buf);
+ 	bp->buf = INVALID_BUFFER_VALUE;
+-	buf->b_mzscheme_ref = NULL;
++#ifndef MZ_PRECISE_GC
+ 	scheme_gc_ptr_ok(bp);
++#else
++	scheme_free_immobile_box(buf->b_mzscheme_ref);
++#endif
++	buf->b_mzscheme_ref = NULL;
+ 	MZ_GC_CHECK();
++	MZ_GC_UNREG();
+     }
+ }
+ 
+@@ -1159,12 +1258,20 @@
+ {
+     if (win->w_mzscheme_ref)
+     {
+-	vim_mz_window *wp;
+-	wp = win->w_mzscheme_ref;
++	vim_mz_window *wp = NULL;
++	MZ_GC_DECL_REG(1);
++	MZ_GC_VAR_IN_REG(0, wp);
++	MZ_GC_REG();
++	wp = WINDOW_REF(win);
+ 	wp->win = INVALID_WINDOW_VALUE;
+-	win->w_mzscheme_ref = NULL;
++#ifndef MZ_PRECISE_GC
+ 	scheme_gc_ptr_ok(wp);
++#else
++	scheme_free_immobile_box(win->w_mzscheme_ref);
++#endif
++	win->w_mzscheme_ref = NULL;
+ 	MZ_GC_CHECK();
++	MZ_GC_UNREG();
+     }
+ }
+ 
+@@ -1341,8 +1448,9 @@
+ }
+ 
+     static void
+-do_output(char *mesg, long len UNUSED)
++do_output(char *mesg, OUTPUT_LEN_TYPE len UNUSED)
+ {
++    /* TODO: use len, the string may not be NUL terminated */
+     do_intrnl_output(mesg, 0);
+ }
+ 
+@@ -1362,9 +1470,9 @@
+ do_flush(void)
+ {
+     char *buff;
+-    long length;
++    OUTPUT_LEN_TYPE length;
+ 
+-    buff = scheme_get_sized_string_output(curerr, &length);
++    buff = scheme_get_sized_byte_string_output(curerr, &length);
+     MZ_GC_CHECK();
+     if (length)
+     {
+@@ -1372,7 +1480,7 @@
+ 	return;
+     }
+ 
+-    buff = scheme_get_sized_string_output(curout, &length);
++    buff = scheme_get_sized_byte_string_output(curout, &length);
+     MZ_GC_CHECK();
+     if (length)
+ 	do_output(buff, length);
+@@ -1389,42 +1497,43 @@
+ vim_command(void *data, int argc, Scheme_Object **argv)
+ {
+     Vim_Prim	*prim = (Vim_Prim *)data;
+-    char	*cmd = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
++    Scheme_Object *cmd = NULL;
++    MZ_GC_DECL_REG(1);
++    MZ_GC_VAR_IN_REG(0, cmd);
++    MZ_GC_REG();
++    cmd = GUARANTEED_STRING_ARG(prim->name, 0);
+ 
+     /* may be use do_cmdline_cmd? */
+-    do_cmdline((char_u *)cmd, NULL, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
++    do_cmdline(BYTE_STRING_VALUE(cmd), NULL, NULL, DOCMD_NOWAIT|DOCMD_VERBOSE);
+     update_screen(VALID);
+ 
++    MZ_GC_UNREG();
+     raise_if_error();
+     return scheme_void;
+ }
+ 
+ /* (eval {expr-string}) */
+     static Scheme_Object *
+-vim_eval(void *data, int argc, Scheme_Object **argv)
++vim_eval(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
+ {
+ #ifdef FEAT_EVAL
+     Vim_Prim		*prim = (Vim_Prim *)data;
+-    char		*expr;
+-    Scheme_Object	*result;
+-    /* hash table to store visited values to avoid infinite loops */
+-    Scheme_Hash_Table	*visited = NULL;
++    Scheme_Object	*result = NULL;
+     typval_T		*vim_result;
+-
+-    MZ_GC_DECL_REG(1);
+-    MZ_GC_VAR_IN_REG(0, visited);
++    Scheme_Object *expr = NULL;
++    MZ_GC_DECL_REG(2);
++    MZ_GC_VAR_IN_REG(0, result);
++    MZ_GC_VAR_IN_REG(1, expr);
+     MZ_GC_REG();
++    expr = GUARANTEED_STRING_ARG(prim->name, 0);
+ 
+-    visited = scheme_make_hash_table(SCHEME_hash_ptr);
+-    MZ_GC_CHECK();
+-
+-    expr = SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+-    vim_result = eval_expr((char_u *)expr, NULL);
++    vim_result = eval_expr(BYTE_STRING_VALUE(expr), NULL);
+ 
+     if (vim_result == NULL)
+ 	raise_vim_exn(_("invalid expression"));
+ 
+-    result = vim_to_mzscheme(vim_result, 1, visited);
++    result = vim_to_mzscheme(vim_result);
++    MZ_GC_CHECK();
+     free_tv(vim_result);
+ 
+     MZ_GC_UNREG();
+@@ -1465,16 +1574,21 @@
+ get_option(void *data, int argc, Scheme_Object **argv)
+ {
+     Vim_Prim	    *prim = (Vim_Prim *)data;
+-    char_u	    *name;
+     long	    value;
+     char	    *strval;
+     int		    rc;
+-    Scheme_Object   *rval;
++    Scheme_Object   *rval = NULL;
++    Scheme_Object   *name = NULL;
+     int		    opt_flags = 0;
+     buf_T	    *save_curb = curbuf;
+     win_T	    *save_curw = curwin;
+ 
+-    name = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
++    MZ_GC_DECL_REG(2);
++    MZ_GC_VAR_IN_REG(0, rval);
++    MZ_GC_VAR_IN_REG(1, name);
++    MZ_GC_REG();
++
++    name = GUARANTEED_STRING_ARG(prim->name, 0);
+ 
+     if (argc > 1)
+     {
+@@ -1504,23 +1618,27 @@
+ 	    scheme_wrong_type(prim->name, "vim-buffer/window", 1, argc, argv);
+     }
+ 
+-    rc = get_option_value(name, &value, (char_u **)&strval, opt_flags);
++    rc = get_option_value(BYTE_STRING_VALUE(name), &value, (char_u **)&strval, opt_flags);
+     curbuf = save_curb;
+     curwin = save_curw;
+ 
+     switch (rc)
+     {
+     case 1:
++	MZ_GC_UNREG();
+ 	return scheme_make_integer_value(value);
+     case 0:
+-	rval = scheme_make_string(strval);
++	rval = scheme_make_byte_string(strval);
+ 	MZ_GC_CHECK();
+ 	vim_free(strval);
++	MZ_GC_UNREG();
+ 	return rval;
+     case -1:
+     case -2:
++	MZ_GC_UNREG();
+ 	raise_vim_exn(_("hidden option"));
+     case -3:
++	MZ_GC_UNREG();
+ 	raise_vim_exn(_("unknown option"));
+     }
+     /* unreachable */
+@@ -1531,13 +1649,18 @@
+     static Scheme_Object *
+ set_option(void *data, int argc, Scheme_Object **argv)
+ {
+-    char_u	*cmd;
++    char_u	*command = NULL;
+     int		opt_flags = 0;
+     buf_T	*save_curb = curbuf;
+     win_T	*save_curw = curwin;
+     Vim_Prim	*prim = (Vim_Prim *)data;
++    Scheme_Object *cmd = NULL;
++
++    MZ_GC_DECL_REG(1);
++    MZ_GC_VAR_IN_REG(0, cmd);
++    MZ_GC_REG();
++    cmd = GUARANTEED_STRING_ARG(prim->name, 0);
+ 
+-    GUARANTEE_STRING(prim->name, 0);
+     if (argc > 1)
+     {
+ 	if (M_global == NULL)
+@@ -1566,9 +1689,10 @@
+     }
+ 
+     /* do_set can modify cmd, make copy */
+-    cmd = vim_strsave((char_u *)SCHEME_STR_VAL(argv[0]));
+-    do_set(cmd, opt_flags);
+-    vim_free(cmd);
++    command = vim_strsave(BYTE_STRING_VALUE(cmd));
++    MZ_GC_UNREG();
++    do_set(command, opt_flags);
++    vim_free(command);
+     update_screen(NOT_VALID);
+     curbuf = save_curb;
+     curwin = save_curw;
+@@ -1593,10 +1717,12 @@
+     static Scheme_Object *
+ get_window_count(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
+ {
+-    win_T   *w;
+     int	    n = 0;
++#ifdef FEAT_WINDOWS
++    win_T   *w;
+ 
+     for (w = firstwin; w != NULL; w = w->w_next)
++#endif
+ 	++n;
+     return scheme_make_integer(n);
+ }
+@@ -1608,12 +1734,14 @@
+     Vim_Prim	    *prim = (Vim_Prim *)data;
+     vim_mz_buffer   *buf;
+     Scheme_Object   *list;
+-    win_T	    *w;
++    win_T	    *w = firstwin;
+ 
+     buf = get_buffer_arg(prim->name, 0, argc, argv);
+     list = scheme_null;
+ 
+-    for (w = firstwin; w != NULL; w = w->w_next)
++#ifdef FEAT_WINDOWS
++    for ( ; w != NULL; w = w->w_next)
++#endif
+ 	if (w->w_buffer == buf->buf)
+ 	{
+ 	    list = scheme_make_pair(window_new(w), list);
+@@ -1630,7 +1758,6 @@
+ 
+     MZ_GC_DECL_REG(1);
+     MZ_GC_VAR_IN_REG(0, self);
+-    MZ_GC_REG();
+ 
+     /* We need to handle deletion of windows underneath us.
+      * If we add a "w_mzscheme_ref" field to the win_T structure,
+@@ -1641,30 +1768,38 @@
+      * object, and reject them if the win_T *field is invalid.
+      */
+     if (win->w_mzscheme_ref != NULL)
+-	return win->w_mzscheme_ref;
++	return (Scheme_Object *)WINDOW_REF(win);
+ 
+-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window));
++    MZ_GC_REG();
++    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_window));
+     vim_memset(self, 0, sizeof(vim_mz_window));
++#ifndef MZ_PRECISE_GC
+     scheme_dont_gc_ptr(self);	/* because win isn't visible to GC */
++#else
++    win->w_mzscheme_ref = scheme_malloc_immobile_box(NULL);
++#endif
++    MZ_GC_CHECK();
++    WINDOW_REF(win) = self;
+     MZ_GC_CHECK();
+-    win->w_mzscheme_ref = self;
+     self->win = win;
+     self->so.type = mz_window_type;
+ 
+     MZ_GC_UNREG();
+-    return (Scheme_Object *)(self);
++    return (Scheme_Object *)self;
+ }
+ 
+ /* (get-win-num [window]) */
+     static Scheme_Object *
+-get_window_num(void *data, int argc, Scheme_Object **argv)
++get_window_num(void *data UNUSED, int argc UNUSED, Scheme_Object **argv UNUSED)
+ {
++    int		nr = 1;
++#ifdef FEAT_WINDOWS
+     Vim_Prim	*prim = (Vim_Prim *)data;
+     win_T	*win = get_window_arg(prim->name, 0, argc, argv)->win;
+-    int		nr = 1;
+     win_T	*wp;
+ 
+     for (wp = firstwin; wp != win; wp = wp->w_next)
++#endif
+ 	++nr;
+ 
+     return scheme_make_integer(nr);
+@@ -1675,14 +1810,16 @@
+ get_window_by_num(void *data, int argc, Scheme_Object **argv)
+ {
+     Vim_Prim	*prim = (Vim_Prim *)data;
+-    win_T	*win;
++    win_T	*win = firstwin;
+     int		fnum;
+ 
+     fnum = SCHEME_INT_VAL(GUARANTEE_INTEGER(prim->name, 0));
+     if (fnum < 1)
+ 	scheme_signal_error(_("window index is out of range"));
+ 
+-    for (win = firstwin; win != NULL; win = win->w_next, --fnum)
++#ifdef FEAT_WINDOWS
++    for ( ; win != NULL; win = win->w_next, --fnum)
++#endif
+ 	if (fnum == 1)	    /* to be 1-based */
+ 	    return window_new(win);
+ 
+@@ -1828,22 +1965,31 @@
+ mzscheme_open_buffer(void *data, int argc, Scheme_Object **argv)
+ {
+     Vim_Prim	    *prim = (Vim_Prim *)data;
+-    char_u	    *fname;
+     int		    num = 0;
+-    Scheme_Object   *onum;
++    Scheme_Object   *onum = NULL;
++    Scheme_Object   *buf = NULL;
++    Scheme_Object   *fname;
++
++    MZ_GC_DECL_REG(3);
++    MZ_GC_VAR_IN_REG(0, onum);
++    MZ_GC_VAR_IN_REG(1, buf);
++    MZ_GC_VAR_IN_REG(2, fname);
++    MZ_GC_REG();
++    fname = GUARANTEED_STRING_ARG(prim->name, 0);
+ 
+ #ifdef HAVE_SANDBOX
+     sandbox_check();
+ #endif
+-    fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
+     /* TODO make open existing file */
+-    num = buflist_add(fname, BLN_LISTED | BLN_CURBUF);
++    num = buflist_add(BYTE_STRING_VALUE(fname), BLN_LISTED | BLN_CURBUF);
+ 
+     if (num == 0)
+ 	raise_vim_exn(_("couldn't open buffer"));
+ 
+     onum = scheme_make_integer(num);
+-    return get_buffer_by_num(data, 1, &onum);
++    buf = get_buffer_by_num(data, 1, &onum);
++    MZ_GC_UNREG();
++    return buf;
+ }
+ 
+ /* (get-buff-by-num {buffernum}) */
+@@ -1869,23 +2015,34 @@
+ {
+     Vim_Prim	*prim = (Vim_Prim *)data;
+     buf_T	*buf;
+-    char_u	*fname;
++    Scheme_Object *buffer = NULL;
++    Scheme_Object *fname = NULL;
+ 
+-    fname = (char_u *)SCHEME_STR_VAL(GUARANTEE_STRING(prim->name, 0));
++    MZ_GC_DECL_REG(2);
++    MZ_GC_VAR_IN_REG(0, buffer);
++    MZ_GC_VAR_IN_REG(1, fname);
++    MZ_GC_REG();
++    fname = GUARANTEED_STRING_ARG(prim->name, 0);
++    buffer = scheme_false;
+ 
+     for (buf = firstbuf; buf; buf = buf->b_next)
++    {
+ 	if (buf->b_ffname == NULL || buf->b_sfname == NULL)
+ 	    /* empty string */
+ 	{
+-	    if (fname[0] == NUL)
+-		return buffer_new(buf);
++	    if (BYTE_STRING_VALUE(fname)[0] == NUL)
++		buffer = buffer_new(buf);
+ 	}
+-	else if (!fnamecmp(buf->b_ffname, fname)
+-		|| !fnamecmp(buf->b_sfname, fname))
++	else if (!fnamecmp(buf->b_ffname, BYTE_STRING_VALUE(fname))
++		|| !fnamecmp(buf->b_sfname, BYTE_STRING_VALUE(fname)))
++	{
+ 	    /* either short or long filename matches */
+-	    return buffer_new(buf);
++	    buffer = buffer_new(buf);
++	}
++    }
+ 
+-    return scheme_false;
++    MZ_GC_UNREG();
++    return buffer;
+ }
+ 
+ /* (get-next-buff [buffer]) */
+@@ -1942,7 +2099,7 @@
+     Vim_Prim	    *prim = (Vim_Prim *)data;
+     vim_mz_buffer   *buf = get_buffer_arg(prim->name, 0, argc, argv);
+ 
+-    return scheme_make_string((char *)buf->buf->b_ffname);
++    return scheme_make_byte_string((char *)buf->buf->b_ffname);
+ }
+ 
+ /* (curr-buff) */
+@@ -1959,25 +2116,30 @@
+ 
+     MZ_GC_DECL_REG(1);
+     MZ_GC_VAR_IN_REG(0, self);
+-    MZ_GC_REG();
+ 
+     /* We need to handle deletion of buffers underneath us.
+      * If we add a "b_mzscheme_ref" field to the buf_T structure,
+      * then we can get at it in buf_freeall() in vim.
+      */
+     if (buf->b_mzscheme_ref)
+-	return buf->b_mzscheme_ref;
++	return (Scheme_Object *)BUFFER_REF(buf);
+ 
+-    self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer));
++    MZ_GC_REG();
++    self = scheme_malloc_fail_ok(scheme_malloc_tagged, sizeof(vim_mz_buffer));
+     vim_memset(self, 0, sizeof(vim_mz_buffer));
+-    scheme_dont_gc_ptr(self); /* because buf isn't visible to GC */
++#ifndef MZ_PRECISE_GC
++    scheme_dont_gc_ptr(self);	/* because buf isn't visible to GC */
++#else
++    buf->b_mzscheme_ref = scheme_malloc_immobile_box(NULL);
++#endif
++    MZ_GC_CHECK();
++    BUFFER_REF(buf) = self;
+     MZ_GC_CHECK();
+-    buf->b_mzscheme_ref = self;
+     self->buf = buf;
+     self->so.type = mz_buffer_type;
+ 
+     MZ_GC_UNREG();
+-    return (Scheme_Object *)(self);
++    return (Scheme_Object *)self;
+ }
+ 
+ /*
+@@ -2014,7 +2176,7 @@
+     line = ml_get_buf(buf->buf, (linenr_T)linenr, FALSE);
+ 
+     raise_if_error();
+-    return scheme_make_string((char *)line);
++    return scheme_make_byte_string((char *)line);
+ }
+ 
+ 
+@@ -2057,7 +2219,7 @@
+ 
+     for (i = n; i >= 0; --i)
+     {
+-	Scheme_Object *str = scheme_make_string(
++	Scheme_Object *str = scheme_make_byte_string(
+ 		       (char *)ml_get_buf(buf->buf, (linenr_T)(lo+i), FALSE));
+ 	raise_if_error();
+ 
+@@ -2289,8 +2451,8 @@
+ 	    MZ_GC_VAR_IN_REG(1, rest);
+ 	    MZ_GC_REG();
+ 
+-	    array = (char **)alloc(new_len * sizeof(char *));
+-	    vim_memset(array, 0, new_len * sizeof(char *));
++	    array = (char **)alloc((new_len+1)* sizeof(char *));
++	    vim_memset(array, 0, (new_len+1) * sizeof(char *));
+ 
+ 	    rest = line_list;
+ 	    for (i = 0; i < new_len; ++i)
+@@ -2472,8 +2634,8 @@
+ 	MZ_GC_VAR_IN_REG(1, rest);
+ 	MZ_GC_REG();
+ 
+-	array = (char **)alloc(size * sizeof(char *));
+-	vim_memset(array, 0, size * sizeof(char *));
++	array = (char **)alloc((size+1) * sizeof(char *));
++	vim_memset(array, 0, (size+1) * sizeof(char *));
+ 
+ 	rest = list;
+ 	for (i = 0; i < size; ++i)
+@@ -2580,7 +2742,7 @@
+ {
+     char	*scheme_str = NULL;
+     char	*vim_str = NULL;
+-    long	len;
++    OUTPUT_LEN_TYPE	len;
+     int		i;
+ 
+     scheme_str = scheme_display_to_string(obj, &len);
+@@ -2616,13 +2778,35 @@
+  * Convert Vim value into MzScheme, adopted from if_python.c
+  */
+     static Scheme_Object *
+-vim_to_mzscheme(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
++vim_to_mzscheme(typval_T *vim_value)
++{
++    Scheme_Object	*result = NULL;
++    /* hash table to store visited values to avoid infinite loops */
++    Scheme_Hash_Table	*visited = NULL;
++
++    MZ_GC_DECL_REG(2);
++    MZ_GC_VAR_IN_REG(0, result);
++    MZ_GC_VAR_IN_REG(1, visited);
++    MZ_GC_REG();
++
++    visited = scheme_make_hash_table(SCHEME_hash_ptr);
++    MZ_GC_CHECK();
++
++    result = vim_to_mzscheme_impl(vim_value, 1, visited);
++
++    MZ_GC_UNREG();
++    return result;
++}
++
++    static Scheme_Object *
++vim_to_mzscheme_impl(typval_T *vim_value, int depth, Scheme_Hash_Table *visited)
+ {
+     Scheme_Object   *result = NULL;
+     int		    new_value = TRUE;
+ 
+-    MZ_GC_DECL_REG(1);
++    MZ_GC_DECL_REG(2);
+     MZ_GC_VAR_IN_REG(0, result);
++    MZ_GC_VAR_IN_REG(1, visited);
+     MZ_GC_REG();
+ 
+     /* Avoid infinite recursion */
+@@ -2641,7 +2825,7 @@
+ 	new_value = FALSE;
+     else if (vim_value->v_type == VAR_STRING)
+     {
+-	result = scheme_make_string((char *)vim_value->vval.v_string);
++	result = scheme_make_byte_string((char *)vim_value->vval.v_string);
+ 	MZ_GC_CHECK();
+     }
+     else if (vim_value->v_type == VAR_NUMBER)
+@@ -2672,14 +2856,14 @@
+ 	    MZ_GC_REG();
+ 
+ 	    curr = list->lv_last;
+-	    obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited);
++	    obj = vim_to_mzscheme_impl(&curr->li_tv, depth + 1, visited);
+ 	    result = scheme_make_pair(obj, scheme_null);
+ 	    MZ_GC_CHECK();
+ 
+ 	    while (curr != list->lv_first)
+ 	    {
+ 		curr = curr->li_prev;
+-		obj = vim_to_mzscheme(&curr->li_tv, depth + 1, visited);
++		obj = vim_to_mzscheme_impl(&curr->li_tv, depth + 1, visited);
+ 		result = scheme_make_pair(obj, result);
+ 		MZ_GC_CHECK();
+ 	    }
+@@ -2712,8 +2896,8 @@
+ 		    --todo;
+ 
+ 		    di = dict_lookup(hi);
+-		    obj = vim_to_mzscheme(&di->di_tv, depth + 1, visited);
+-		    key = scheme_make_string((char *)hi->hi_key);
++		    obj = vim_to_mzscheme_impl(&di->di_tv, depth + 1, visited);
++		    key = scheme_make_byte_string((char *)hi->hi_key);
+ 		    MZ_GC_CHECK();
+ 		    scheme_hash_set((Scheme_Hash_Table *)result, key, obj);
+ 		    MZ_GC_CHECK();
+@@ -2722,6 +2906,22 @@
+ 	}
+ 	MZ_GC_UNREG();
+     }
++    else if (vim_value->v_type == VAR_FUNC)
++    {
++	Scheme_Object *funcname = NULL;
++
++	MZ_GC_DECL_REG(1);
++	MZ_GC_VAR_IN_REG(0, funcname);
++	MZ_GC_REG();
++
++	funcname = scheme_make_byte_string((char *)vim_value->vval.v_string);
++	MZ_GC_CHECK();
++	result = scheme_make_closed_prim_w_arity(vim_funcref, funcname,
++		(const char *)BYTE_STRING_VALUE(funcname), 0, -1);
++	MZ_GC_CHECK();
++
++	MZ_GC_UNREG();
++    }
+     else
+     {
+ 	result = scheme_void;
+@@ -2737,11 +2937,42 @@
+ }
+ 
+     static int
+-mzscheme_to_vim(Scheme_Object *obj, typval_T *tv, int depth,
++mzscheme_to_vim(Scheme_Object *obj, typval_T *tv)
++{
++    int i, status;
++    Scheme_Hash_Table	*visited = NULL;
++
++    MZ_GC_DECL_REG(2);
++    MZ_GC_VAR_IN_REG(0, obj);
++    MZ_GC_VAR_IN_REG(1, visited);
++    MZ_GC_REG();
++
++    visited = scheme_make_hash_table(SCHEME_hash_ptr);
++    MZ_GC_CHECK();
++
++    status = mzscheme_to_vim_impl(obj, tv, 1, visited);
++    for (i = 0; i < visited->size; ++i)
++    {
++	/* free up remembered objects */
++	if (visited->vals[i] != NULL)
++	    free_tv((typval_T *)visited->vals[i]);
++    }
++
++    MZ_GC_UNREG();
++    return status;
++}
++    static int
++mzscheme_to_vim_impl(Scheme_Object *obj, typval_T *tv, int depth,
+ 	Scheme_Hash_Table *visited)
+ {
+     int		status = OK;
+     typval_T	*found;
++
++    MZ_GC_DECL_REG(2);
++    MZ_GC_VAR_IN_REG(0, obj);
++    MZ_GC_VAR_IN_REG(1, visited);
++    MZ_GC_REG();
++
+     MZ_GC_CHECK();
+     if (depth > 100) /* limit the deepest recursion level */
+     {
+@@ -2775,11 +3006,25 @@
+ 	tv->vval.v_float = SCHEME_DBL_VAL(obj);
+     }
+ # endif
+-    else if (SCHEME_STRINGP(obj))
++    else if (SCHEME_BYTE_STRINGP(obj))
+     {
+ 	tv->v_type = VAR_STRING;
+-	tv->vval.v_string = vim_strsave((char_u *)SCHEME_STR_VAL(obj));
++	tv->vval.v_string = vim_strsave(BYTE_STRING_VALUE(obj));
+     }
++# if MZSCHEME_VERSION_MAJOR >= 299
++    else if (SCHEME_CHAR_STRINGP(obj))
++    {
++	Scheme_Object *tmp = NULL;
++	MZ_GC_DECL_REG(1);
++	MZ_GC_VAR_IN_REG(0, tmp);
++	MZ_GC_REG();
++
++	tmp = scheme_char_string_to_byte_string(obj);
++	tv->v_type = VAR_STRING;
++	tv->vval.v_string = vim_strsave(BYTE_STRING_VALUE(tmp));
++	MZ_GC_UNREG();
++    }
++#endif
+     else if (SCHEME_VECTORP(obj) || SCHEME_NULLP(obj)
+ 	    || SCHEME_PAIRP(obj) || SCHEME_MUTABLE_PAIRP(obj))
+     {
+@@ -2808,7 +3053,7 @@
+ 		status = FAIL;
+ 	    else
+ 	    {
+-		/* add the value in advance to allow handling of self-referencial
++		/* add the value in advance to allow handling of self-referential
+ 		 * data structures */
+ 		typval_T    *visited_tv = (typval_T *)alloc(sizeof(typval_T));
+ 		copy_tv(tv, visited_tv);
+@@ -2819,7 +3064,7 @@
+ 		    for (i = 0; i < SCHEME_VEC_SIZE(obj); ++i)
+ 		    {
+ 			cval = SCHEME_VEC_ELS(obj)[i];
+-			status = mzscheme_to_vim(cval, v, depth + 1, visited);
++			status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
+ 			if (status == FAIL)
+ 			    break;
+ 			status = list_append_tv(list, v);
+@@ -2835,7 +3080,7 @@
+ 			    curr = SCHEME_CDR(curr))
+ 		    {
+ 			cval = SCHEME_CAR(curr);
+-			status = mzscheme_to_vim(cval, v, depth + 1, visited);
++			status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
+ 			if (status == FAIL)
+ 			    break;
+ 			status = list_append_tv(list, v);
+@@ -2843,11 +3088,11 @@
+ 			if (status == FAIL)
+ 			    break;
+ 		    }
+-		    /* impoper list not terminated with null
++		    /* improper list not terminated with null
+ 		     * need to handle the last element */
+ 		    if (status == OK && !SCHEME_NULLP(curr))
+ 		    {
+-			status = mzscheme_to_vim(cval, v, depth + 1, visited);
++			status = mzscheme_to_vim_impl(cval, v, depth + 1, visited);
+ 			if (status == OK)
+ 			{
+ 			    status = list_append_tv(list, v);
+@@ -2891,11 +3136,11 @@
+ 	    {
+ 		if (((Scheme_Hash_Table *) obj)->vals[i] != NULL)
+ 		{
+-		    /* generate item for `diplay'ed Scheme key */
++		    /* generate item for `display'ed Scheme key */
+ 		    dictitem_T  *item = dictitem_alloc((char_u *)string_to_line(
+ 				((Scheme_Hash_Table *) obj)->keys[i]));
+ 		    /* convert Scheme val to Vim and add it to the dict */
+-		    if (mzscheme_to_vim(((Scheme_Hash_Table *) obj)->vals[i],
++		    if (mzscheme_to_vim_impl(((Scheme_Hash_Table *) obj)->vals[i],
+ 				    &item->di_tv, depth + 1, visited) == FAIL
+ 			    || dict_add(dict, item) == FAIL)
+ 		    {
+@@ -2915,19 +3160,76 @@
+ 	tv->v_type = VAR_STRING;
+ 	tv->vval.v_string = (char_u *)string_to_line(obj);
+     }
++    MZ_GC_UNREG();
+     return status;
+ }
+ 
++/* Scheme prim procedure wrapping Vim funcref */
++    static Scheme_Object *
++vim_funcref(void *name, int argc, Scheme_Object **argv)
++{
++    int i;
++    typval_T args;
++    int status = OK;
++    Scheme_Object *result = NULL;
++    list_T *list = list_alloc();
++
++    MZ_GC_DECL_REG(1);
++    MZ_GC_VAR_IN_REG(0, result);
++    MZ_GC_REG();
++
++    result = scheme_void;
++    if (list == NULL)
++	status = FAIL;
++    else
++    {
++	args.v_type = VAR_LIST;
++	args.vval.v_list = list;
++	++list->lv_refcount;
++	for (i = 0; status == OK && i < argc; ++i)
++	{
++	    typval_T *v = (typval_T *)alloc(sizeof(typval_T));
++	    if (v == NULL)
++		status = FAIL;
++	    else
++	    {
++		status = mzscheme_to_vim(argv[i], v);
++		if (status == OK)
++		{
++		    status = list_append_tv(list, v);
++		    clear_tv(v);
++		}
++		vim_free(v);
++	    }
++	}
++	if (status == OK)
++	{
++	    typval_T ret;
++	    ret.v_type = VAR_UNKNOWN;
++
++	    mzscheme_call_vim(BYTE_STRING_VALUE((Scheme_Object *)name), &args, &ret);
++	    MZ_GC_CHECK();
++	    result = vim_to_mzscheme(&ret);
++	    clear_tv(&ret);
++	    MZ_GC_CHECK();
++	}
++    }
++    clear_tv(&args);
++    MZ_GC_UNREG();
++    if (status != OK)
++	raise_vim_exn(_("error converting Scheme values to Vim"));
++    else
++	raise_if_error();
++    return result;
++}
++
+     void
+ do_mzeval(char_u *str, typval_T *rettv)
+ {
+-    int i;
+     Scheme_Object	*ret = NULL;
+-    Scheme_Hash_Table	*visited = NULL;
+ 
+-    MZ_GC_DECL_REG(2);
++    MZ_GC_DECL_REG(1);
+     MZ_GC_VAR_IN_REG(0, ret);
+-    MZ_GC_VAR_IN_REG(0, visited);
+     MZ_GC_REG();
+ 
+     if (mzscheme_init())
+@@ -2937,20 +3239,8 @@
+     }
+ 
+     MZ_GC_CHECK();
+-    visited = scheme_make_hash_table(SCHEME_hash_ptr);
+-    MZ_GC_CHECK();
+-
+     if (eval_with_exn_handling(str, do_eval, &ret) == OK)
+-	mzscheme_to_vim(ret, rettv, 1, visited);
+-
+-    for (i = 0; i < visited->size; ++i)
+-    {
+-	/* free up remembered objects */
+-	if (visited->vals[i] != NULL)
+-	{
+-	    free_tv((typval_T *)visited->vals[i]);
+-	}
+-    }
++	mzscheme_to_vim(ret, rettv);
+ 
+     MZ_GC_UNREG();
+ }
+@@ -3006,7 +3296,6 @@
+ 	MZ_GC_REG();
+ 
+ 	tmp = scheme_make_struct_names(exn_name, scheme_null, 0, &nc);
+-	assert(nc <= 5);
+ 	mch_memmove(exn_names, tmp, nc * sizeof(Scheme_Object *));
+ 	MZ_GC_CHECK();
+ 
+@@ -3034,37 +3323,41 @@
+     char	    *fmt = _("Vim error: ~a");
+     Scheme_Object   *argv[2] = {NULL, NULL};
+     Scheme_Object   *exn = NULL;
++    Scheme_Object   *byte_string = NULL;
+ 
+-    MZ_GC_DECL_REG(4);
++    MZ_GC_DECL_REG(5);
+     MZ_GC_ARRAY_VAR_IN_REG(0, argv, 2);
+     MZ_GC_VAR_IN_REG(3, exn);
++    MZ_GC_VAR_IN_REG(4, byte_string);
+     MZ_GC_REG();
+ 
+     if (add_info != NULL)
+     {
+ 	char		*c_string = NULL;
+-	Scheme_Object	*byte_string = NULL;
+ 	Scheme_Object   *info = NULL;
+ 
+ 	MZ_GC_DECL_REG(3);
+ 	MZ_GC_VAR_IN_REG(0, c_string);
+-	MZ_GC_VAR_IN_REG(1, byte_string);
+ 	MZ_GC_VAR_IN_REG(2, info);
+ 	MZ_GC_REG();
+ 
+-	info = scheme_make_string(add_info);
++	info = scheme_make_byte_string(add_info);
+ 	MZ_GC_CHECK();
+-	c_string = scheme_format(fmt, STRLEN(fmt), 1, &info, NULL);
++	c_string = scheme_format_utf8(fmt, STRLEN(fmt), 1, &info, NULL);
+ 	MZ_GC_CHECK();
+-	byte_string = scheme_make_string(c_string);
++	byte_string = scheme_make_byte_string(c_string);
+ 	MZ_GC_CHECK();
+ 	argv[0] = scheme_byte_string_to_char_string(byte_string);
+-	MZ_GC_CHECK();
+ 	SCHEME_SET_IMMUTABLE(argv[0]);
+ 	MZ_GC_UNREG();
+     }
+     else
+-	argv[0] = scheme_make_string(_("Vim error"));
++    {
++	byte_string = scheme_make_byte_string(_("Vim error"));
++	MZ_GC_CHECK();
++	argv[0] = scheme_byte_string_to_char_string(byte_string);
++	MZ_GC_CHECK();
++    }
+     MZ_GC_CHECK();
+ 
+ #if MZSCHEME_VERSION_MAJOR < 360
+@@ -3255,7 +3548,7 @@
+     if (curbuf->b_mzscheme_ref == NULL)
+ 	return (vim_mz_buffer *)buffer_new(curbuf);
+     else
+-	return (vim_mz_buffer *)curbuf->b_mzscheme_ref;
++	return BUFFER_REF(curbuf);
+ }
+ 
+ /* return MzScheme wrapper for curwin */
+@@ -3265,7 +3558,7 @@
+     if (curwin->w_mzscheme_ref == NULL)
+ 	return (vim_mz_window *)window_new(curwin);
+     else
+-	return (vim_mz_window *)curwin->w_mzscheme_ref;
++	return WINDOW_REF(curwin);
+ }
+ 
+     static void
+diff -Naur vim73.orig/src/if_mzsch.h vim73/src/if_mzsch.h
+--- vim73.orig/src/if_mzsch.h	2010-07-17 19:41:09.000000000 +0000
++++ vim73/src/if_mzsch.h	2013-06-07 17:07:31.575585178 +0000
+@@ -7,6 +7,7 @@
+ #ifdef __MINGW32__
+ /* Hack to engage Cygwin-specific settings */
+ # define __CYGWIN32__
++# include <stdint.h>
+ #endif
+ 
+ /* #ifdef needed for "make depend" */
+@@ -20,31 +21,24 @@
+ #endif
+ 
+ #if MZSCHEME_VERSION_MAJOR >= 299
+-/* macros to be compatible with 20x versions */
+-# define scheme_config scheme_current_config()
+-# define scheme_make_string scheme_make_byte_string
+-# define scheme_make_string_output_port scheme_make_byte_string_output_port
+-# define scheme_get_sized_string_output scheme_get_sized_byte_string_output
+-# define scheme_write_string scheme_write_byte_string
+-# define scheme_make_sized_string scheme_make_sized_byte_string
+-
+ # define SCHEME_STRINGP(obj) (SCHEME_BYTE_STRINGP(obj) || SCHEME_CHAR_STRINGP(obj))
+-# define SCHEME_STR_VAL(obj) SCHEME_BYTE_STR_VAL(   \
+-		(SCHEME_BYTE_STRINGP(obj) ? obj : scheme_char_string_to_byte_string(obj)))
+-# define GUARANTEE_STRING(fname, argnum) GUARANTEE_TYPE(fname, argnum, SCHEME_STRINGP, "string")
+-
+-# ifdef scheme_format
+-#  undef scheme_format
++# define BYTE_STRING_VALUE(obj) ((char_u *)SCHEME_BYTE_STR_VAL(obj))
++#else
++/* macros for compatibility with older versions */
++# define scheme_current_config() scheme_config
++# define scheme_make_sized_byte_string scheme_make_sized_string
++# define scheme_format_utf8 scheme_format
++# ifndef DYNAMIC_MZSCHEME
++/* for dynamic MzScheme there will be separate definitions in if_mzsch.c */
++#  define scheme_get_sized_byte_string_output scheme_get_sized_string_output
++#  define scheme_make_byte_string scheme_make_string
++#  define scheme_make_byte_string_output_port scheme_make_string_output_port
+ # endif
+-# define scheme_format scheme_format_utf8
+ 
+-# define SCHEME_GET_BYTE_STRING(obj) (SCHEME_BYTE_STRINGP(obj) ? obj :   \
+-	scheme_char_string_to_byte_string(obj))
+-#else
+-# define SCHEME_GET_BYTE_STRING(obj) (obj)
+ # define SCHEME_BYTE_STRLEN_VAL SCHEME_STRLEN_VAL
+-# define SCHEME_BYTE_STR_VAL SCHEME_STR_VAL
++# define BYTE_STRING_VALUE(obj) ((char_u *)SCHEME_STR_VAL(obj))
+ # define scheme_byte_string_to_char_string(obj) (obj)
++# define SCHEME_BYTE_STRINGP SCHEME_STRINGP
+ #endif
+ 
+ /* Precise GC macros */
+diff -Naur vim73.orig/src/if_ole.cpp vim73/src/if_ole.cpp
+--- vim73.orig/src/if_ole.cpp	2010-08-02 20:12:11.000000000 +0000
++++ vim73/src/if_ole.cpp	2013-06-07 17:07:31.598918445 +0000
+@@ -645,7 +645,7 @@
+     CoTaskMemFree(wGUID);
+ }
+ 
+-// Delete a key and all of its descendents
++// Delete a key and all of its descendants
+ static void RecursiveDeleteKey(HKEY hKeyParent, const char *child)
+ {
+     // Open the child
+@@ -655,7 +655,7 @@
+     if (result != ERROR_SUCCESS)
+ 	return;
+ 
+-    // Enumerate all of the decendents of this child
++    // Enumerate all of the descendants of this child
+     FILETIME time;
+     char buffer[1024];
+     DWORD size = 1024;
+@@ -663,7 +663,7 @@
+     while (RegEnumKeyEx(hKeyChild, 0, buffer, &size, NULL,
+ 			NULL, NULL, &time) == S_OK)
+     {
+-	// Delete the decendents of this child
++	// Delete the descendants of this child
+ 	RecursiveDeleteKey(hKeyChild, buffer);
+ 	size = 256;
+     }
+diff -Naur vim73.orig/src/if_ole.h vim73/src/if_ole.h
+--- vim73.orig/src/if_ole.h	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/if_ole.h	2013-06-07 17:07:31.602251769 +0000
+@@ -46,8 +46,11 @@
+ /* header files for imported files */
+ #include "oaidl.h"
+ 
+-void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+-void __RPC_USER MIDL_user_free( void __RPC_FAR * );
++#ifndef __MIDL_user_allocate_free_DEFINED__
++#define __MIDL_user_allocate_free_DEFINED__
++    void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
++    void __RPC_USER MIDL_user_free( void __RPC_FAR * );
++#endif
+ 
+ #ifndef __IVim_INTERFACE_DEFINED__
+ #define __IVim_INTERFACE_DEFINED__
+diff -Naur vim73.orig/src/if_perl.xs vim73/src/if_perl.xs
+--- vim73.orig/src/if_perl.xs	2010-07-22 09:33:37.000000000 +0000
++++ vim73/src/if_perl.xs	2013-06-07 17:07:31.635585007 +0000
+@@ -76,6 +76,12 @@
+ # define EXTERN_C
+ #endif
+ 
++#if (PERL_REVISION == 5) && (PERL_VERSION >= 14) && defined(_MSC_VER)
++/* Using PL_errgv to get the error message after perl_eval_sv() causes a crash
++ * with MSVC and Perl version 5.14. */
++# define AVOID_PL_ERRGV
++#endif
++
+ /* Compatibility hacks over */
+ 
+ static PerlInterpreter *perl_interp = NULL;
+@@ -106,7 +112,7 @@
+ #define close_dll dlclose
+ #else
+ #define PERL_PROC FARPROC
+-#define load_dll LoadLibrary
++#define load_dll vimLoadLib
+ #define symbol_from_dll GetProcAddress
+ #define close_dll FreeLibrary
+ #endif
+@@ -147,7 +153,12 @@
+ # define Perl_save_int dll_Perl_save_int
+ # define Perl_stack_grow dll_Perl_stack_grow
+ # define Perl_set_context dll_Perl_set_context
++# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++# define Perl_sv_2bool_flags dll_Perl_sv_2bool_flags
++# define Perl_xs_apiversion_bootcheck dll_Perl_xs_apiversion_bootcheck
++# else
+ # define Perl_sv_2bool dll_Perl_sv_2bool
++# endif
+ # define Perl_sv_2iv dll_Perl_sv_2iv
+ # define Perl_sv_2mortal dll_Perl_sv_2mortal
+ # if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+@@ -214,6 +225,9 @@
+ # define Perl_call_list dll_Perl_call_list
+ # define Perl_Iscopestack_ix_ptr dll_Perl_Iscopestack_ix_ptr
+ # define Perl_Iunitcheckav_ptr dll_Perl_Iunitcheckav_ptr
++# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++#  define PL_thr_key *dll_PL_thr_key
++# endif
+ 
+ /*
+  * Declare HANDLE for perl.dll and function pointers.
+@@ -252,7 +266,12 @@
+ static void (*Perl_save_int)(pTHX_ int*);
+ static SV** (*Perl_stack_grow)(pTHX_ SV**, SV**p, int);
+ static SV** (*Perl_set_context)(void*);
++#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++static bool (*Perl_sv_2bool_flags)(pTHX_ SV*, I32);
++static void (*Perl_xs_apiversion_bootcheck)(pTHX_ SV *module, const char *api_p, STRLEN api_len);
++#else
+ static bool (*Perl_sv_2bool)(pTHX_ SV*);
++#endif
+ static IV (*Perl_sv_2iv)(pTHX_ SV*);
+ static SV* (*Perl_sv_2mortal)(pTHX_ SV*);
+ #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+@@ -299,6 +318,9 @@
+ static void (*Perl_sv_free2)(pTHX_ SV*);
+ static void (*Perl_sys_init)(int* argc, char*** argv);
+ static void (*Perl_sys_term)(void);
++static void (*Perl_call_list)(pTHX_ I32, AV*);
++# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++# else
+ static SV** (*Perl_ISv_ptr)(register PerlInterpreter*);
+ static SV*** (*Perl_Istack_max_ptr)(register PerlInterpreter*);
+ static SV*** (*Perl_Istack_base_ptr)(register PerlInterpreter*);
+@@ -310,16 +332,20 @@
+ static I32** (*Perl_Imarkstack_max_ptr)(register PerlInterpreter*);
+ static SV*** (*Perl_Istack_sp_ptr)(register PerlInterpreter*);
+ static OP** (*Perl_Iop_ptr)(register PerlInterpreter*);
+-static void (*Perl_call_list)(pTHX_ I32, AV*);
+ static I32* (*Perl_Iscopestack_ix_ptr)(register PerlInterpreter*);
+ static AV** (*Perl_Iunitcheckav_ptr)(register PerlInterpreter*);
++# endif
+ #endif
+ 
++#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++static perl_key* dll_PL_thr_key;
++#else
+ static GV** (*Perl_Idefgv_ptr)(register PerlInterpreter*);
+ static GV** (*Perl_Ierrgv_ptr)(register PerlInterpreter*);
+ static SV* (*Perl_Isv_yes_ptr)(register PerlInterpreter*);
+-static void (*boot_DynaLoader)_((pTHX_ CV*));
+ static perl_key* (*Perl_Gthr_key_ptr)_((pTHX));
++#endif
++static void (*boot_DynaLoader)_((pTHX_ CV*));
+ 
+ /*
+  * Table of name to function pointer of perl.
+@@ -360,7 +386,12 @@
+     {"Perl_save_int", (PERL_PROC*)&Perl_save_int},
+     {"Perl_stack_grow", (PERL_PROC*)&Perl_stack_grow},
+     {"Perl_set_context", (PERL_PROC*)&Perl_set_context},
++#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++    {"Perl_sv_2bool_flags", (PERL_PROC*)&Perl_sv_2bool_flags},
++    {"Perl_xs_apiversion_bootcheck",(PERL_PROC*)&Perl_xs_apiversion_bootcheck},
++#else
+     {"Perl_sv_2bool", (PERL_PROC*)&Perl_sv_2bool},
++#endif
+     {"Perl_sv_2iv", (PERL_PROC*)&Perl_sv_2iv},
+     {"Perl_sv_2mortal", (PERL_PROC*)&Perl_sv_2mortal},
+ #if (PERL_REVISION == 5) && (PERL_VERSION >= 8)
+@@ -407,6 +438,9 @@
+     {"Perl_sv_free2", (PERL_PROC*)&Perl_sv_free2},
+     {"Perl_sys_init", (PERL_PROC*)&Perl_sys_init},
+     {"Perl_sys_term", (PERL_PROC*)&Perl_sys_term},
++    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
++# if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++# else
+     {"Perl_ISv_ptr", (PERL_PROC*)&Perl_ISv_ptr},
+     {"Perl_Istack_max_ptr", (PERL_PROC*)&Perl_Istack_max_ptr},
+     {"Perl_Istack_base_ptr", (PERL_PROC*)&Perl_Istack_base_ptr},
+@@ -418,15 +452,19 @@
+     {"Perl_Imarkstack_max_ptr", (PERL_PROC*)&Perl_Imarkstack_max_ptr},
+     {"Perl_Istack_sp_ptr", (PERL_PROC*)&Perl_Istack_sp_ptr},
+     {"Perl_Iop_ptr", (PERL_PROC*)&Perl_Iop_ptr},
+-    {"Perl_call_list", (PERL_PROC*)&Perl_call_list},
+     {"Perl_Iscopestack_ix_ptr", (PERL_PROC*)&Perl_Iscopestack_ix_ptr},
+     {"Perl_Iunitcheckav_ptr", (PERL_PROC*)&Perl_Iunitcheckav_ptr},
++# endif
+ #endif
++#if (PERL_REVISION == 5) && (PERL_VERSION >= 14)
++    {"PL_thr_key", (PERL_PROC*)&dll_PL_thr_key},
++#else
+     {"Perl_Idefgv_ptr", (PERL_PROC*)&Perl_Idefgv_ptr},
+     {"Perl_Ierrgv_ptr", (PERL_PROC*)&Perl_Ierrgv_ptr},
+     {"Perl_Isv_yes_ptr", (PERL_PROC*)&Perl_Isv_yes_ptr},
+-    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
+     {"Perl_Gthr_key_ptr", (PERL_PROC*)&Perl_Gthr_key_ptr},
++#endif
++    {"boot_DynaLoader", (PERL_PROC*)&boot_DynaLoader},
+     {"", NULL},
+ };
+ 
+@@ -562,9 +600,9 @@
+  */
+     char_u *
+ eval_to_string(arg, nextcmd, dolist)
+-    char_u	*arg;
+-    char_u	**nextcmd;
+-    int		dolist;
++    char_u	*arg UNUSED;
++    char_u	**nextcmd UNUSED;
++    int		dolist UNUSED;
+ {
+     return NULL;
+ }
+@@ -590,7 +628,7 @@
+     if (ptr->w_perl_private == NULL)
+     {
+ 	ptr->w_perl_private = newSV(0);
+-	sv_setiv(ptr->w_perl_private, (IV)ptr);
++	sv_setiv(ptr->w_perl_private, PTR2IV(ptr));
+     }
+     else
+ 	SvREFCNT_inc(ptr->w_perl_private);
+@@ -608,7 +646,7 @@
+     if (ptr->b_perl_private == NULL)
+     {
+ 	ptr->b_perl_private = newSV(0);
+-	sv_setiv(ptr->b_perl_private, (IV)ptr);
++	sv_setiv(ptr->b_perl_private, PTR2IV(ptr));
+     }
+     else
+ 	SvREFCNT_inc(ptr->b_perl_private);
+@@ -619,7 +657,7 @@
+ 
+ /*
+  * perl_win_free
+- *	Remove all refences to the window to be destroyed
++ *	Remove all references to the window to be destroyed
+  */
+     void
+ perl_win_free(wp)
+@@ -755,7 +793,7 @@
+ #ifdef HAVE_SANDBOX
+     if (sandbox)
+     {
+-	safe = perl_get_sv( "VIM::safe", FALSE );
++	safe = perl_get_sv("VIM::safe", FALSE);
+ # ifndef MAKE_TEST  /* avoid a warning for unreachable code */
+ 	if (safe == NULL || !SvTRUE(safe))
+ 	    EMSG(_("E299: Perl evaluation forbidden in sandbox without the Safe module"));
+@@ -775,7 +813,11 @@
+ 
+     SvREFCNT_dec(sv);
+ 
++#ifdef AVOID_PL_ERRGV
++    err = SvPV(perl_get_sv("@", GV_ADD), length);
++#else
+     err = SvPV(GvSV(PL_errgv), length);
++#endif
+ 
+     FREETMPS;
+     LEAVE;
+@@ -845,7 +887,11 @@
+     sv_catpvn(sv, "}", 1);
+     perl_eval_sv(sv, G_DISCARD | G_NOARGS);
+     SvREFCNT_dec(sv);
++#ifdef AVOID_PL_ERRGV
++    str = SvPV(perl_get_sv("@", GV_ADD), length);
++#else
+     str = SvPV(GvSV(PL_errgv), length);
++#endif
+     if (length)
+ 	goto err;
+ 
+@@ -859,7 +905,11 @@
+ 	sv_setpv(GvSV(PL_defgv), (char *)ml_get(i));
+ 	PUSHMARK(sp);
+ 	perl_call_pv("VIM::perldo", G_SCALAR | G_EVAL);
++#ifdef AVOID_PL_ERRGV
++	str = SvPV(perl_get_sv("@", GV_ADD), length);
++#else
+ 	str = SvPV(GvSV(PL_errgv), length);
++#endif
+ 	if (length)
+ 	    break;
+ 	SPAGAIN;
+@@ -892,24 +942,6 @@
+ win_T *win_find_nr(int n) { return curwin; }
+ #endif
+ 
+-XS(XS_VIM_Msg);
+-XS(XS_VIM_SetOption);
+-XS(XS_VIM_DoCommand);
+-XS(XS_VIM_Eval);
+-XS(XS_VIM_Buffers);
+-XS(XS_VIM_Windows);
+-XS(XS_VIWIN_DESTROY);
+-XS(XS_VIWIN_Buffer);
+-XS(XS_VIWIN_SetHeight);
+-XS(XS_VIWIN_Cursor);
+-XS(XS_VIBUF_DESTROY);
+-XS(XS_VIBUF_Name);
+-XS(XS_VIBUF_Number);
+-XS(XS_VIBUF_Count);
+-XS(XS_VIBUF_Get);
+-XS(XS_VIBUF_Set);
+-XS(XS_VIBUF_Delete);
+-XS(XS_VIBUF_Append);
+ XS(boot_VIM);
+ 
+     static void
+@@ -1016,7 +1048,7 @@
+ 	{
+ 	    SV *sv = ST(i);
+ 	    if (SvIOK(sv))
+-		b = SvIV(ST(i));
++		b = (int) SvIV(ST(i));
+ 	    else
+ 	    {
+ 		char_u *pat;
+@@ -1024,7 +1056,7 @@
+ 
+ 		pat = (char_u *)SvPV(sv, len);
+ 		++emsg_off;
+-		b = buflist_findpat(pat, pat+len, FALSE, FALSE);
++		b = buflist_findpat(pat, pat+len, FALSE, FALSE, FALSE);
+ 		--emsg_off;
+ 	    }
+ 
+@@ -1059,7 +1091,7 @@
+     {
+ 	for (i = 0; i < items; i++)
+ 	{
+-	    w = SvIV(ST(i));
++	    w = (int) SvIV(ST(i));
+ 	    vimwin = win_find_nr(w);
+ 	    if (vimwin)
+ 		XPUSHs(newWINrv(newSV(0), vimwin));
+@@ -1108,7 +1140,7 @@
+     VIWIN win
+ 
+     PPCODE:
+-    if(items == 1)
++    if (items == 1)
+     {
+       EXTEND(sp, 2);
+       if (!win_valid(win))
+@@ -1116,14 +1148,14 @@
+       PUSHs(sv_2mortal(newSViv(win->w_cursor.lnum)));
+       PUSHs(sv_2mortal(newSViv(win->w_cursor.col)));
+     }
+-    else if(items == 3)
++    else if (items == 3)
+     {
+       int lnum, col;
+ 
+       if (!win_valid(win))
+ 	  win = curwin;
+-      lnum = SvIV(ST(1));
+-      col = SvIV(ST(2));
++      lnum = (int) SvIV(ST(1));
++      col = (int) SvIV(ST(2));
+       win->w_cursor.lnum = lnum;
+       win->w_cursor.col = col;
+       check_cursor();		    /* put cursor on an existing line */
+@@ -1184,7 +1216,7 @@
+     {
+ 	for (i = 1; i < items; i++)
+ 	{
+-	    lnum = SvIV(ST(i));
++	    lnum = (long) SvIV(ST(i));
+ 	    if (lnum > 0 && lnum <= vimbuf->b_ml.ml_line_count)
+ 	    {
+ 		line = ml_get_buf(vimbuf, lnum, FALSE);
+@@ -1207,7 +1239,7 @@
+ 	if (items < 3)
+ 	    croak("Usage: VIBUF::Set(vimbuf, lnum, @lines)");
+ 
+-	lnum = SvIV(ST(1));
++	lnum = (long) SvIV(ST(1));
+ 	for(i = 2; i < items; i++, lnum++)
+ 	{
+ 	    line = SvPV(ST(i),PL_na);
+@@ -1242,16 +1274,16 @@
+     {
+ 	if (items == 2)
+ 	{
+-	    lnum = SvIV(ST(1));
++	    lnum = (long) SvIV(ST(1));
+ 	    count = 1;
+ 	}
+ 	else if (items == 3)
+ 	{
+-	    lnum = SvIV(ST(1));
+-	    count = 1 + SvIV(ST(2)) - lnum;
+-	    if(count == 0)
++	    lnum = (long) SvIV(ST(1));
++	    count = (long) 1 + SvIV(ST(2)) - lnum;
++	    if (count == 0)
+ 		count = 1;
+-	    if(count < 0)
++	    if (count < 0)
+ 	    {
+ 		lnum -= count;
+ 		count = -count;
+@@ -1299,7 +1331,7 @@
+ 	if (items < 3)
+ 	    croak("Usage: VIBUF::Append(vimbuf, lnum, @lines)");
+ 
+-	lnum = SvIV(ST(1));
++	lnum = (long) SvIV(ST(1));
+ 	for (i = 2; i < items; i++, lnum++)
+ 	{
+ 	    line = SvPV(ST(i),PL_na);
+diff -Naur vim73.orig/src/if_py_both.h vim73/src/if_py_both.h
+--- vim73.orig/src/if_py_both.h	2010-08-08 11:06:29.000000000 +0000
++++ vim73/src/if_py_both.h	2013-06-07 17:07:31.675584893 +0000
+@@ -1,4 +1,4 @@
+-/* vi:set ts=8 sts=4 sw=4:
++/* vi:set ts=8 sts=4 sw=4 noet:
+  *
+  * VIM - Vi IMproved	by Bram Moolenaar
+  *
+@@ -7,11 +7,55 @@
+  * See README.txt for an overview of the Vim source code.
+  */
+ /*
+- * Python extensions by Paul Moore, David Leonard, Roland Puntaier.
++ * Python extensions by Paul Moore, David Leonard, Roland Puntaier, Nikolay
++ * Pavlov.
+  *
+  * Common code for if_python.c and if_python3.c.
+  */
+ 
++#if PY_VERSION_HEX < 0x02050000
++typedef int Py_ssize_t;  /* Python 2.4 and earlier don't have this type. */
++#endif
++
++#ifdef FEAT_MBYTE
++# define ENC_OPT p_enc
++#else
++# define ENC_OPT "latin1"
++#endif
++#define DOPY_FUNC "_vim_pydo"
++
++#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
++
++#define RAISE_NO_EMPTY_KEYS PyErr_SetString(PyExc_ValueError, \
++						_("empty keys are not allowed"))
++
++#define INVALID_BUFFER_VALUE ((buf_T *)(-1))
++#define INVALID_WINDOW_VALUE ((win_T *)(-1))
++#define INVALID_TABPAGE_VALUE ((tabpage_T *)(-1))
++
++typedef void (*rangeinitializer)(void *);
++typedef void (*runner)(const char *, void *
++#ifdef PY_CAN_RECURSE
++	, PyGILState_STATE *
++#endif
++	);
++
++static int ConvertFromPyObject(PyObject *, typval_T *);
++static int _ConvertFromPyObject(PyObject *, typval_T *, PyObject *);
++static int ConvertFromPyMapping(PyObject *, typval_T *);
++static PyObject *WindowNew(win_T *, tabpage_T *);
++static PyObject *BufferNew (buf_T *);
++static PyObject *LineToString(const char *);
++
++static PyInt RangeStart;
++static PyInt RangeEnd;
++
++static PyObject *globals;
++
++static PyObject *py_chdir;
++static PyObject *py_fchdir;
++static PyObject *py_getcwd;
++
+ /*
+  * obtain a lock on the Vim data structures
+  */
+@@ -28,146 +72,169 @@
+ {
+ }
+ 
+-/* Output object definition
++/*
++ * The "todecref" argument holds a pointer to PyObject * that must be
++ * DECREF'ed after returned char_u * is no longer needed or NULL if all what
++ * was needed to generate returned value is object.
++ *
++ * Use Py_XDECREF to decrement reference count.
+  */
++    static char_u *
++StringToChars(PyObject *object, PyObject **todecref)
++{
++    char_u	*p;
++    PyObject	*bytes = NULL;
+ 
+-static PyObject *OutputWrite(PyObject *, PyObject *);
+-static PyObject *OutputWritelines(PyObject *, PyObject *);
+-
+-typedef void (*writefn)(char_u *);
+-static void writer(writefn fn, char_u *str, PyInt n);
++    if (PyBytes_Check(object))
++    {
+ 
+-typedef struct
+-{
+-    PyObject_HEAD
+-    long softspace;
+-    long error;
+-} OutputObject;
++	if (PyString_AsStringAndSize(object, (char **) &p, NULL) == -1)
++	    return NULL;
++	if (p == NULL)
++	    return NULL;
+ 
+-static struct PyMethodDef OutputMethods[] = {
+-    /* name,	    function,		calling,    documentation */
+-    {"write",	    OutputWrite,	1,	    "" },
+-    {"writelines",  OutputWritelines,	1,	    "" },
+-    { NULL,	    NULL,		0,	    NULL }
+-};
++	*todecref = NULL;
++    }
++    else if (PyUnicode_Check(object))
++    {
++	bytes = PyUnicode_AsEncodedString(object, (char *)ENC_OPT, NULL);
++	if (bytes == NULL)
++	    return NULL;
+ 
+-#define PyErr_SetVim(str) PyErr_SetString(VimError, str)
++	if(PyString_AsStringAndSize(bytes, (char **) &p, NULL) == -1)
++	    return NULL;
++	if (p == NULL)
++	    return NULL;
+ 
+-/*************/
++	*todecref = bytes;
++    }
++    else
++    {
++	PyErr_SetString(PyExc_TypeError, _("object must be string"));
++	return NULL;
++    }
+ 
+-/* Output buffer management
+- */
++    return (char_u *) p;
++}
+ 
+-    static PyObject *
+-OutputWrite(PyObject *self, PyObject *args)
++    static int
++add_string(PyObject *list, char *s)
+ {
+-    int len;
+-    char *str;
+-    int error = ((OutputObject *)(self))->error;
+-
+-    if (!PyArg_ParseTuple(args, "s#", &str, &len))
+-	return NULL;
++    PyObject	*string;
+ 
+-    Py_BEGIN_ALLOW_THREADS
+-    Python_Lock_Vim();
+-    writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+-    Python_Release_Vim();
+-    Py_END_ALLOW_THREADS
++    if (!(string = PyString_FromString(s)))
++	return -1;
++    if (PyList_Append(list, string))
++    {
++	Py_DECREF(string);
++	return -1;
++    }
+ 
+-    Py_INCREF(Py_None);
+-    return Py_None;
++    Py_DECREF(string);
++    return 0;
+ }
+ 
+     static PyObject *
+-OutputWritelines(PyObject *self, PyObject *args)
++ObjectDir(PyObject *self, char **attributes)
+ {
+-    PyInt n;
+-    PyInt i;
+-    PyObject *list;
+-    int error = ((OutputObject *)(self))->error;
+-
+-    if (!PyArg_ParseTuple(args, "O", &list))
+-	return NULL;
+-    Py_INCREF(list);
++    PyMethodDef	*method;
++    char	**attr;
++    PyObject	*r;
+ 
+-    if (!PyList_Check(list)) {
+-	PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+-	Py_DECREF(list);
++    if (!(r = PyList_New(0)))
+ 	return NULL;
+-    }
+ 
+-    n = PyList_Size(list);
+-
+-    for (i = 0; i < n; ++i)
+-    {
+-	PyObject *line = PyList_GetItem(list, i);
+-	char *str;
+-	PyInt len;
++    if (self)
++	for (method = self->ob_type->tp_methods ; method->ml_name != NULL ; ++method)
++	    if (add_string(r, (char *) method->ml_name))
++	    {
++		Py_DECREF(r);
++		return NULL;
++	    }
+ 
+-	if (!PyArg_Parse(line, "s#", &str, &len)) {
+-	    PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
+-	    Py_DECREF(list);
++    for (attr = attributes ; *attr ; ++attr)
++	if (add_string(r, *attr))
++	{
++	    Py_DECREF(r);
+ 	    return NULL;
+ 	}
+ 
+-	Py_BEGIN_ALLOW_THREADS
+-	Python_Lock_Vim();
+-	writer((writefn)(error ? emsg : msg), (char_u *)str, len);
+-	Python_Release_Vim();
+-	Py_END_ALLOW_THREADS
++#if PY_MAJOR_VERSION < 3
++    if (add_string(r, "__members__"))
++    {
++	Py_DECREF(r);
++	return NULL;
+     }
++#endif
+ 
+-    Py_DECREF(list);
+-    Py_INCREF(Py_None);
+-    return Py_None;
++    return r;
+ }
+ 
+-static char_u *buffer = NULL;
+-static PyInt buffer_len = 0;
+-static PyInt buffer_size = 0;
++/* Output buffer management
++ */
++
++/* Function to write a line, points to either msg() or emsg(). */
++typedef void (*writefn)(char_u *);
+ 
+-static writefn old_fn = NULL;
++static PyTypeObject OutputType;
+ 
+-    static void
+-buffer_ensure(PyInt n)
++typedef struct
+ {
+-    PyInt new_size;
+-    char_u *new_buffer;
++    PyObject_HEAD
++    long softspace;
++    long error;
++} OutputObject;
+ 
+-    if (n < buffer_size)
+-	return;
++static char *OutputAttrs[] = {
++    "softspace",
++    NULL
++};
+ 
+-    new_size = buffer_size;
+-    while (new_size < n)
+-	new_size += 80;
++    static PyObject *
++OutputDir(PyObject *self)
++{
++    return ObjectDir(self, OutputAttrs);
++}
+ 
+-    if (new_size != buffer_size)
++    static int
++OutputSetattr(OutputObject *self, char *name, PyObject *val)
++{
++    if (val == NULL)
+     {
+-	new_buffer = alloc((unsigned)new_size);
+-	if (new_buffer == NULL)
+-	    return;
++	PyErr_SetString(PyExc_AttributeError,
++		_("can't delete OutputObject attributes"));
++	return -1;
++    }
+ 
+-	if (buffer)
++    if (strcmp(name, "softspace") == 0)
++    {
++	if (!PyInt_Check(val))
+ 	{
+-	    memcpy(new_buffer, buffer, buffer_len);
+-	    vim_free(buffer);
++	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
++	    return -1;
+ 	}
+ 
+-	buffer = new_buffer;
+-	buffer_size = new_size;
++	self->softspace = PyInt_AsLong(val);
++	return 0;
+     }
++
++    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
++    return -1;
+ }
+ 
++/* Buffer IO, we write one whole line at a time. */
++static garray_T io_ga = {0, 0, 1, 80, NULL};
++static writefn old_fn = NULL;
++
+     static void
+ PythonIO_Flush(void)
+ {
+-    if (old_fn && buffer_len)
++    if (old_fn != NULL && io_ga.ga_len > 0)
+     {
+-	buffer[buffer_len] = 0;
+-	old_fn(buffer);
++	((char_u *)io_ga.ga_data)[io_ga.ga_len] = NUL;
++	old_fn((char_u *)io_ga.ga_data);
+     }
+-
+-    buffer_len = 0;
++    io_ga.ga_len = 0;
+ }
+ 
+     static void
+@@ -175,35 +242,121 @@
+ {
+     char_u *ptr;
+ 
+-    if (fn != old_fn && old_fn != NULL)
++    /* Flush when switching output function. */
++    if (fn != old_fn)
+ 	PythonIO_Flush();
+-
+     old_fn = fn;
+ 
++    /* Write each NL separated line.  Text after the last NL is kept for
++     * writing later. */
+     while (n > 0 && (ptr = memchr(str, '\n', n)) != NULL)
+     {
+ 	PyInt len = ptr - str;
+ 
+-	buffer_ensure(buffer_len + len + 1);
++	if (ga_grow(&io_ga, (int)(len + 1)) == FAIL)
++	    break;
+ 
+-	memcpy(buffer + buffer_len, str, len);
+-	buffer_len += len;
+-	buffer[buffer_len] = 0;
+-	fn(buffer);
++	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)len);
++	((char *)io_ga.ga_data)[io_ga.ga_len + len] = NUL;
++	fn((char_u *)io_ga.ga_data);
+ 	str = ptr + 1;
+ 	n -= len + 1;
+-	buffer_len = 0;
++	io_ga.ga_len = 0;
++    }
++
++    /* Put the remaining text into io_ga for later printing. */
++    if (n > 0 && ga_grow(&io_ga, (int)(n + 1)) == OK)
++    {
++	mch_memmove(((char *)io_ga.ga_data) + io_ga.ga_len, str, (size_t)n);
++	io_ga.ga_len += (int)n;
++    }
++}
++
++    static PyObject *
++OutputWrite(OutputObject *self, PyObject *args)
++{
++    Py_ssize_t len = 0;
++    char *str = NULL;
++    int error = self->error;
++
++    if (!PyArg_ParseTuple(args, "et#", ENC_OPT, &str, &len))
++	return NULL;
++
++    Py_BEGIN_ALLOW_THREADS
++    Python_Lock_Vim();
++    writer((writefn)(error ? emsg : msg), (char_u *)str, len);
++    Python_Release_Vim();
++    Py_END_ALLOW_THREADS
++    PyMem_Free(str);
++
++    Py_INCREF(Py_None);
++    return Py_None;
++}
++
++    static PyObject *
++OutputWritelines(OutputObject *self, PyObject *args)
++{
++    PyObject	*seq;
++    PyObject	*iterator;
++    PyObject	*item;
++    int error = self->error;
++
++    if (!PyArg_ParseTuple(args, "O", &seq))
++	return NULL;
++
++    if (!(iterator = PyObject_GetIter(seq)))
++	return NULL;
++
++    while ((item = PyIter_Next(iterator)))
++    {
++	char *str = NULL;
++	PyInt len;
++
++	if (!PyArg_Parse(item, "et#", ENC_OPT, &str, &len))
++	{
++	    PyErr_SetString(PyExc_TypeError, _("writelines() requires list of strings"));
++	    Py_DECREF(iterator);
++	    Py_DECREF(item);
++	    return NULL;
++	}
++	Py_DECREF(item);
++
++	Py_BEGIN_ALLOW_THREADS
++	Python_Lock_Vim();
++	writer((writefn)(error ? emsg : msg), (char_u *)str, len);
++	Python_Release_Vim();
++	Py_END_ALLOW_THREADS
++	PyMem_Free(str);
+     }
+ 
+-    /* Put the remaining text into the buffer for later printing */
+-    buffer_ensure(buffer_len + n + 1);
+-    memcpy(buffer + buffer_len, str, n);
+-    buffer_len += n;
++    Py_DECREF(iterator);
++
++    /* Iterator may have finished due to an exception */
++    if (PyErr_Occurred())
++	return NULL;
++
++    Py_INCREF(Py_None);
++    return Py_None;
++}
++
++    static PyObject *
++OutputFlush(PyObject *self UNUSED)
++{
++    /* do nothing */
++    Py_INCREF(Py_None);
++    return Py_None;
+ }
+ 
+ /***************/
+ 
+-static PyTypeObject OutputType;
++static struct PyMethodDef OutputMethods[] = {
++    /* name,	    function,				calling,	doc */
++    {"write",	    (PyCFunction)OutputWrite,		METH_VARARGS,	""},
++    {"writelines",  (PyCFunction)OutputWritelines,	METH_VARARGS,	""},
++    {"flush",	    (PyCFunction)OutputFlush,		METH_NOARGS,	""},
++    {"__dir__",	    (PyCFunction)OutputDir,		METH_NOARGS,	""},
++    { NULL,	    NULL,				0,		NULL}
++};
+ 
+ static OutputObject Output =
+ {
+@@ -240,25 +393,48 @@
+ /* Check to see whether a Vim error has been reported, or a keyboard
+  * interrupt has been detected.
+  */
++
++    static void
++VimTryStart(void)
++{
++    ++trylevel;
++}
++
+     static int
+-VimErrorCheck(void)
++VimTryEnd(void)
+ {
++    --trylevel;
+     if (got_int)
+     {
+ 	PyErr_SetNone(PyExc_KeyboardInterrupt);
+ 	return 1;
+     }
+-    else if (did_emsg && !PyErr_Occurred())
++    else if (!did_throw)
++	return 0;
++    else if (PyErr_Occurred())
++	return 1;
++    else
+     {
+-	PyErr_SetNone(VimError);
++	PyErr_SetVim((char *) current_exception->value);
++	discard_current_exception();
+ 	return 1;
+     }
++}
+ 
++    static int
++VimCheckInterrupt(void)
++{
++    if (got_int)
++    {
++	PyErr_SetNone(PyExc_KeyboardInterrupt);
++	return 1;
++    }
+     return 0;
+ }
+ 
+ /* Vim module - Implementation
+  */
++
+     static PyObject *
+ VimCommand(PyObject *self UNUSED, PyObject *args)
+ {
+@@ -273,22 +449,23 @@
+     Py_BEGIN_ALLOW_THREADS
+     Python_Lock_Vim();
+ 
++    VimTryStart();
+     do_cmdline_cmd((char_u *)cmd);
+     update_screen(VALID);
+ 
+     Python_Release_Vim();
+     Py_END_ALLOW_THREADS
+ 
+-    if (VimErrorCheck())
++    if (VimTryEnd())
+ 	result = NULL;
+     else
+ 	result = Py_None;
+ 
++
+     Py_XINCREF(result);
+     return result;
+ }
+ 
+-#ifdef FEAT_EVAL
+ /*
+  * Function to translate a typval_T into a PyObject; this will recursively
+  * translate lists/dictionaries into their Python equivalents.
+@@ -297,11 +474,11 @@
+  * you call VimToPython.
+  */
+     static PyObject *
+-VimToPython(typval_T *our_tv, int depth, PyObject *lookupDict)
++VimToPython(typval_T *our_tv, int depth, PyObject *lookup_dict)
+ {
+     PyObject	*result;
+     PyObject	*newObj;
+-    char	ptrBuf[NUMBUFLEN];
++    char	ptrBuf[sizeof(void *) * 2 + 3];
+ 
+     /* Avoid infinite recursion */
+     if (depth > 100)
+@@ -311,16 +488,16 @@
+ 	return result;
+     }
+ 
+-    /* Check if we run into a recursive loop.  The item must be in lookupDict
++    /* Check if we run into a recursive loop.  The item must be in lookup_dict
+      * then and we can use it again. */
+     if ((our_tv->v_type == VAR_LIST && our_tv->vval.v_list != NULL)
+ 	    || (our_tv->v_type == VAR_DICT && our_tv->vval.v_dict != NULL))
+     {
+-	sprintf(ptrBuf, PRINTF_DECIMAL_LONG_U,
+-		our_tv->v_type == VAR_LIST ? (long_u)our_tv->vval.v_list
+-					   : (long_u)our_tv->vval.v_dict);
+-	result = PyDict_GetItemString(lookupDict, ptrBuf);
+-	if (result != NULL)
++	sprintf(ptrBuf, "%p",
++		our_tv->v_type == VAR_LIST ? (void *)our_tv->vval.v_list
++					   : (void *)our_tv->vval.v_dict);
++
++	if ((result = PyDict_GetItemString(lookup_dict, ptrBuf)))
+ 	{
+ 	    Py_INCREF(result);
+ 	    return result;
+@@ -329,7 +506,8 @@
+ 
+     if (our_tv->v_type == VAR_STRING)
+     {
+-	result = Py_BuildValue("s", our_tv->vval.v_string);
++	result = PyString_FromString(our_tv->vval.v_string == NULL
++					? "" : (char *)our_tv->vval.v_string);
+     }
+     else if (our_tv->v_type == VAR_NUMBER)
+     {
+@@ -337,7 +515,7 @@
+ 
+ 	/* For backwards compatibility numbers are stored as strings. */
+ 	sprintf(buf, "%ld", (long)our_tv->vval.v_number);
+-	result = Py_BuildValue("s", buf);
++	result = PyString_FromString((char *) buf);
+     }
+ # ifdef FEAT_FLOAT
+     else if (our_tv->v_type == VAR_FLOAT)
+@@ -345,7 +523,7 @@
+ 	char buf[NUMBUFLEN];
+ 
+ 	sprintf(buf, "%f", our_tv->vval.v_float);
+-	result = Py_BuildValue("s", buf);
++	result = PyString_FromString((char *) buf);
+     }
+ # endif
+     else if (our_tv->v_type == VAR_LIST)
+@@ -353,43 +531,70 @@
+ 	list_T		*list = our_tv->vval.v_list;
+ 	listitem_T	*curr;
+ 
+-	result = PyList_New(0);
++	if (list == NULL)
++	    return NULL;
++
++	if (!(result = PyList_New(0)))
++	    return NULL;
+ 
+-	if (list != NULL)
++	if (PyDict_SetItemString(lookup_dict, ptrBuf, result))
+ 	{
+-	    PyDict_SetItemString(lookupDict, ptrBuf, result);
++	    Py_DECREF(result);
++	    return NULL;
++	}
+ 
+-	    for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
++	for (curr = list->lv_first; curr != NULL; curr = curr->li_next)
++	{
++	    if (!(newObj = VimToPython(&curr->li_tv, depth + 1, lookup_dict)))
++	    {
++		Py_DECREF(result);
++		return NULL;
++	    }
++	    if (PyList_Append(result, newObj))
+ 	    {
+-		newObj = VimToPython(&curr->li_tv, depth + 1, lookupDict);
+-		PyList_Append(result, newObj);
+ 		Py_DECREF(newObj);
++		Py_DECREF(result);
++		return NULL;
+ 	    }
++	    Py_DECREF(newObj);
+ 	}
+     }
+     else if (our_tv->v_type == VAR_DICT)
+     {
+-	result = PyDict_New();
+ 
+-	if (our_tv->vval.v_dict != NULL)
+-	{
+-	    hashtab_T	*ht = &our_tv->vval.v_dict->dv_hashtab;
+-	    long_u	todo = ht->ht_used;
+-	    hashitem_T	*hi;
+-	    dictitem_T	*di;
++	hashtab_T	*ht = &our_tv->vval.v_dict->dv_hashtab;
++	long_u	todo = ht->ht_used;
++	hashitem_T	*hi;
++	dictitem_T	*di;
++	if (our_tv->vval.v_dict == NULL)
++	    return NULL;
++
++	if (!(result = PyDict_New()))
++	    return NULL;
+ 
+-	    PyDict_SetItemString(lookupDict, ptrBuf, result);
++	if (PyDict_SetItemString(lookup_dict, ptrBuf, result))
++	{
++	    Py_DECREF(result);
++	    return NULL;
++	}
+ 
+-	    for (hi = ht->ht_array; todo > 0; ++hi)
++	for (hi = ht->ht_array; todo > 0; ++hi)
++	{
++	    if (!HASHITEM_EMPTY(hi))
+ 	    {
+-		if (!HASHITEM_EMPTY(hi))
+-		{
+-		    --todo;
++		--todo;
+ 
+-		    di = dict_lookup(hi);
+-		    newObj = VimToPython(&di->di_tv, depth + 1, lookupDict);
+-		    PyDict_SetItemString(result, (char *)hi->hi_key, newObj);
++		di = dict_lookup(hi);
++		if (!(newObj = VimToPython(&di->di_tv, depth + 1, lookup_dict)))
++		{
++		    Py_DECREF(result);
++		    return NULL;
++		}
++		if (PyDict_SetItemString(result, (char *)hi->hi_key, newObj))
++		{
++		    Py_DECREF(result);
+ 		    Py_DECREF(newObj);
++		    return NULL;
+ 		}
+ 	    }
+ 	}
+@@ -402,12 +607,10 @@
+ 
+     return result;
+ }
+-#endif
+ 
+     static PyObject *
+-VimEval(PyObject *self UNUSED, PyObject *args UNUSED)
++VimEval(PyObject *self UNUSED, PyObject *args)
+ {
+-#ifdef FEAT_EVAL
+     char	*expr;
+     typval_T	*our_tv;
+     PyObject	*result;
+@@ -418,11 +621,14 @@
+ 
+     Py_BEGIN_ALLOW_THREADS
+     Python_Lock_Vim();
++    VimTryStart();
+     our_tv = eval_expr((char_u *)expr, NULL);
+-
+     Python_Release_Vim();
+     Py_END_ALLOW_THREADS
+ 
++    if (VimTryEnd())
++	return NULL;
++
+     if (our_tv == NULL)
+     {
+ 	PyErr_SetVim(_("invalid expression"));
+@@ -431,9 +637,13 @@
+ 
+     /* Convert the Vim type into a Python type.  Create a dictionary that's
+      * used to check for recursive loops. */
+-    lookup_dict = PyDict_New();
+-    result = VimToPython(our_tv, 1, lookup_dict);
+-    Py_DECREF(lookup_dict);
++    if (!(lookup_dict = PyDict_New()))
++	result = NULL;
++    else
++    {
++	result = VimToPython(our_tv, 1, lookup_dict);
++	Py_DECREF(lookup_dict);
++    }
+ 
+ 
+     Py_BEGIN_ALLOW_THREADS
+@@ -443,907 +653,4770 @@
+     Py_END_ALLOW_THREADS
+ 
+     return result;
+-#else
+-    PyErr_SetVim(_("expressions disabled at compile time"));
+-    return NULL;
+-#endif
+ }
+ 
+-/*
+- * Vim module - Definitions
+- */
+-
+-static struct PyMethodDef VimMethods[] = {
+-    /* name,	     function,		calling,    documentation */
+-    {"command",	     VimCommand,	1,	    "Execute a Vim ex-mode command" },
+-    {"eval",	     VimEval,		1,	    "Evaluate an expression using Vim evaluator" },
+-    { NULL,	     NULL,		0,	    NULL }
+-};
++static PyObject *ConvertToPyObject(typval_T *);
+ 
+-typedef struct
++    static PyObject *
++VimEvalPy(PyObject *self UNUSED, PyObject *args)
+ {
+-    PyObject_HEAD
+-    buf_T *buf;
+-}
+-BufferObject;
++    char	*expr;
++    typval_T	*our_tv;
++    PyObject	*result;
+ 
+-#define INVALID_BUFFER_VALUE ((buf_T *)(-1))
++    if (!PyArg_ParseTuple(args, "s", &expr))
++	return NULL;
+ 
+-/*
+- * Buffer list object - Implementation
+- */
++    Py_BEGIN_ALLOW_THREADS
++    Python_Lock_Vim();
++    VimTryStart();
++    our_tv = eval_expr((char_u *)expr, NULL);
++    Python_Release_Vim();
++    Py_END_ALLOW_THREADS
+ 
+-    static PyInt
+-BufListLength(PyObject *self UNUSED)
+-{
+-    buf_T	*b = firstbuf;
+-    PyInt	n = 0;
++    if (VimTryEnd())
++	return NULL;
+ 
+-    while (b)
++    if (our_tv == NULL)
+     {
+-	++n;
+-	b = b->b_next;
++	PyErr_SetVim(_("invalid expression"));
++	return NULL;
+     }
+ 
+-    return n;
++    result = ConvertToPyObject(our_tv);
++    Py_BEGIN_ALLOW_THREADS
++    Python_Lock_Vim();
++    free_tv(our_tv);
++    Python_Release_Vim();
++    Py_END_ALLOW_THREADS
++
++    return result;
+ }
+ 
+     static PyObject *
+-BufListItem(PyObject *self UNUSED, PyInt n)
++VimStrwidth(PyObject *self UNUSED, PyObject *args)
+ {
+-    buf_T *b;
++    char	*expr;
+ 
+-    for (b = firstbuf; b; b = b->b_next, --n)
+-    {
+-	if (n == 0)
+-	    return BufferNew(b);
+-    }
++    if (!PyArg_ParseTuple(args, "s", &expr))
++	return NULL;
+ 
+-    PyErr_SetString(PyExc_IndexError, _("no such buffer"));
+-    return NULL;
++    return PyLong_FromLong(
++#ifdef FEAT_MBYTE
++	    mb_string2cells((char_u *)expr, (int)STRLEN(expr))
++#else
++	    STRLEN(expr)
++#endif
++	    );
+ }
+ 
+-typedef struct
++    static PyObject *
++_VimChdir(PyObject *_chdir, PyObject *args, PyObject *kwargs)
+ {
+-    PyObject_HEAD
+-    win_T	*win;
+-} WindowObject;
++    PyObject	*r;
++    PyObject	*newwd;
++    PyObject	*todecref;
++    char_u	*new_dir;
+ 
+-#define INVALID_WINDOW_VALUE ((win_T *)(-1))
++    if (_chdir == NULL)
++	return NULL;
++    if (!(r = PyObject_Call(_chdir, args, kwargs)))
++	return NULL;
+ 
+-    static int
+-CheckWindow(WindowObject *this)
+-{
+-    if (this->win == INVALID_WINDOW_VALUE)
++    if (!(newwd = PyObject_CallFunctionObjArgs(py_getcwd, NULL)))
+     {
+-	PyErr_SetVim(_("attempt to refer to deleted window"));
+-	return -1;
++	Py_DECREF(r);
++	return NULL;
+     }
+ 
+-    return 0;
+-}
++    if (!(new_dir = StringToChars(newwd, &todecref)))
++    {
++	Py_DECREF(r);
++	Py_DECREF(newwd);
++	return NULL;
++    }
+ 
+-static int WindowSetattr(PyObject *, char *, PyObject *);
+-static PyObject *WindowRepr(PyObject *);
++    VimTryStart();
+ 
+-    static int
+-WindowSetattr(PyObject *self, char *name, PyObject *val)
+-{
+-    WindowObject *this = (WindowObject *)(self);
++    if (vim_chdir(new_dir))
++    {
++	Py_DECREF(r);
++	Py_DECREF(newwd);
++	Py_XDECREF(todecref);
+ 
+-    if (CheckWindow(this))
+-	return -1;
++	if (VimTryEnd())
++	    return NULL;
+ 
+-    if (strcmp(name, "buffer") == 0)
+-    {
+-	PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
+-	return -1;
++	PyErr_SetVim(_("failed to change directory"));
++	return NULL;
+     }
+-    else if (strcmp(name, "cursor") == 0)
++
++    Py_DECREF(newwd);
++    Py_XDECREF(todecref);
++
++    post_chdir(FALSE);
++
++    if (VimTryEnd())
+     {
+-	long lnum;
+-	long col;
+-	long len;
++	Py_DECREF(r);
++	return NULL;
++    }
+ 
+-	if (!PyArg_Parse(val, "(ll)", &lnum, &col))
+-	    return -1;
++    return r;
++}
+ 
+-	if (lnum <= 0 || lnum > this->win->w_buffer->b_ml.ml_line_count)
+-	{
+-	    PyErr_SetVim(_("cursor position outside buffer"));
+-	    return -1;
+-	}
++    static PyObject *
++VimChdir(PyObject *self UNUSED, PyObject *args, PyObject *kwargs)
++{
++    return _VimChdir(py_chdir, args, kwargs);
++}
+ 
+-	/* Check for keyboard interrupts */
+-	if (VimErrorCheck())
+-	    return -1;
++    static PyObject *
++VimFchdir(PyObject *self UNUSED, PyObject *args, PyObject *kwargs)
++{
++    return _VimChdir(py_fchdir, args, kwargs);
++}
+ 
+-	/* When column is out of range silently correct it. */
+-	len = (long)STRLEN(ml_get_buf(this->win->w_buffer, lnum, FALSE));
+-	if (col > len)
+-	    col = len;
++/*
++ * Vim module - Definitions
++ */
+ 
+-	this->win->w_cursor.lnum = lnum;
+-	this->win->w_cursor.col = col;
+-#ifdef FEAT_VIRTUALEDIT
+-	this->win->w_cursor.coladd = 0;
+-#endif
+-	update_screen(VALID);
++static struct PyMethodDef VimMethods[] = {
++    /* name,	     function,			calling,			documentation */
++    {"command",	     VimCommand,		METH_VARARGS,			"Execute a Vim ex-mode command" },
++    {"eval",	     VimEval,			METH_VARARGS,			"Evaluate an expression using Vim evaluator" },
++    {"bindeval",     VimEvalPy,			METH_VARARGS,			"Like eval(), but returns objects attached to vim ones"},
++    {"strwidth",     VimStrwidth,		METH_VARARGS,			"Screen string width, counts <Tab> as having width 1"},
++    {"chdir",	     (PyCFunction)VimChdir,	METH_VARARGS|METH_KEYWORDS,	"Change directory"},
++    {"fchdir",	     (PyCFunction)VimFchdir,	METH_VARARGS|METH_KEYWORDS,	"Change directory"},
++    { NULL,	     NULL,			0,				NULL }
++};
+ 
+-	return 0;
+-    }
+-    else if (strcmp(name, "height") == 0)
+-    {
+-	int	height;
+-	win_T	*savewin;
++/*
++ * Generic iterator object
++ */
+ 
+-	if (!PyArg_Parse(val, "i", &height))
+-	    return -1;
++static PyTypeObject IterType;
+ 
+-#ifdef FEAT_GUI
+-	need_mouse_correct = TRUE;
+-#endif
+-	savewin = curwin;
+-	curwin = this->win;
+-	win_setheight(height);
+-	curwin = savewin;
++typedef PyObject *(*nextfun)(void **);
++typedef void (*destructorfun)(void *);
++typedef int (*traversefun)(void *, visitproc, void *);
++typedef int (*clearfun)(void **);
++
++/* Main purpose of this object is removing the need for do python
++ * initialization (i.e. PyType_Ready and setting type attributes) for a big
++ * bunch of objects. */
+ 
+-	/* Check for keyboard interrupts */
+-	if (VimErrorCheck())
+-	    return -1;
++typedef struct
++{
++    PyObject_HEAD
++    void *cur;
++    nextfun next;
++    destructorfun destruct;
++    traversefun traverse;
++    clearfun clear;
++} IterObject;
+ 
+-	return 0;
+-    }
+-#ifdef FEAT_VERTSPLIT
+-    else if (strcmp(name, "width") == 0)
+-    {
+-	int	width;
+-	win_T	*savewin;
++    static PyObject *
++IterNew(void *start, destructorfun destruct, nextfun next, traversefun traverse,
++	clearfun clear)
++{
++    IterObject *self;
+ 
+-	if (!PyArg_Parse(val, "i", &width))
+-	    return -1;
++    self = PyObject_GC_New(IterObject, &IterType);
++    self->cur = start;
++    self->next = next;
++    self->destruct = destruct;
++    self->traverse = traverse;
++    self->clear = clear;
+ 
+-#ifdef FEAT_GUI
+-	need_mouse_correct = TRUE;
+-#endif
+-	savewin = curwin;
+-	curwin = this->win;
+-	win_setwidth(width);
+-	curwin = savewin;
++    return (PyObject *)(self);
++}
+ 
+-	/* Check for keyboard interrupts */
+-	if (VimErrorCheck())
+-	    return -1;
++    static void
++IterDestructor(IterObject *self)
++{
++    PyObject_GC_UnTrack((void *)(self));
++    self->destruct(self->cur);
++    PyObject_GC_Del((void *)(self));
++}
+ 
++    static int
++IterTraverse(IterObject *self, visitproc visit, void *arg)
++{
++    if (self->traverse != NULL)
++	return self->traverse(self->cur, visit, arg);
++    else
+ 	return 0;
+-    }
++}
++
++/* Mac OSX defines clear() somewhere. */
++#ifdef clear
++# undef clear
+ #endif
++
++    static int
++IterClear(IterObject *self)
++{
++    if (self->clear != NULL)
++	return self->clear(&self->cur);
+     else
+-    {
+-	PyErr_SetString(PyExc_AttributeError, name);
+-	return -1;
+-    }
++	return 0;
++}
++
++    static PyObject *
++IterNext(IterObject *self)
++{
++    return self->next(&self->cur);
+ }
+ 
+     static PyObject *
+-WindowRepr(PyObject *self)
++IterIter(PyObject *self)
+ {
+-    static char repr[100];
+-    WindowObject *this = (WindowObject *)(self);
++    Py_INCREF(self);
++    return self;
++}
+ 
+-    if (this->win == INVALID_WINDOW_VALUE)
++typedef struct pylinkedlist_S {
++    struct pylinkedlist_S	*pll_next;
++    struct pylinkedlist_S	*pll_prev;
++    PyObject			*pll_obj;
++} pylinkedlist_T;
++
++static pylinkedlist_T *lastdict = NULL;
++static pylinkedlist_T *lastlist = NULL;
++
++    static void
++pyll_remove(pylinkedlist_T *ref, pylinkedlist_T **last)
++{
++    if (ref->pll_prev == NULL)
+     {
+-	vim_snprintf(repr, 100, _("<window object (deleted) at %p>"), (self));
+-	return PyString_FromString(repr);
++	if (ref->pll_next == NULL)
++	{
++	    *last = NULL;
++	    return;
++	}
+     }
+     else
+-    {
+-	int	i = 0;
+-	win_T	*w;
++	ref->pll_prev->pll_next = ref->pll_next;
+ 
+-	for (w = firstwin; w != NULL && w != this->win; w = W_NEXT(w))
+-	    ++i;
+-
+-	if (w == NULL)
+-	    vim_snprintf(repr, 100, _("<window object (unknown) at %p>"),
+-								      (self));
+-	else
+-	    vim_snprintf(repr, 100, _("<window %d>"), i);
++    if (ref->pll_next == NULL)
++	*last = ref->pll_prev;
++    else
++	ref->pll_next->pll_prev = ref->pll_prev;
++}
+ 
+-	return PyString_FromString(repr);
++    static void
++pyll_add(PyObject *self, pylinkedlist_T *ref, pylinkedlist_T **last)
++{
++    if (*last == NULL)
++	ref->pll_prev = NULL;
++    else
++    {
++	(*last)->pll_next = ref;
++	ref->pll_prev = *last;
+     }
++    ref->pll_next = NULL;
++    ref->pll_obj = self;
++    *last = ref;
+ }
+ 
+-/*
+- * Window list object - Implementation
+- */
+-    static PyInt
+-WinListLength(PyObject *self UNUSED)
++static PyTypeObject DictionaryType;
++
++typedef struct
+ {
+-    win_T	*w = firstwin;
+-    PyInt	n = 0;
++    PyObject_HEAD
++    dict_T	*dict;
++    pylinkedlist_T	ref;
++} DictionaryObject;
+ 
+-    while (w != NULL)
+-    {
+-	++n;
+-	w = W_NEXT(w);
+-    }
++static PyObject *DictionaryUpdate(DictionaryObject *, PyObject *, PyObject *);
+ 
+-    return n;
+-}
++#define NEW_DICTIONARY(dict) DictionaryNew(&DictionaryType, dict)
+ 
+     static PyObject *
+-WinListItem(PyObject *self UNUSED, PyInt n)
++DictionaryNew(PyTypeObject *subtype, dict_T *dict)
+ {
+-    win_T *w;
++    DictionaryObject	*self;
+ 
+-    for (w = firstwin; w != NULL; w = W_NEXT(w), --n)
+-	if (n == 0)
+-	    return WindowNew(w);
++    self = (DictionaryObject *) subtype->tp_alloc(subtype, 0);
++    if (self == NULL)
++	return NULL;
++    self->dict = dict;
++    ++dict->dv_refcount;
+ 
+-    PyErr_SetString(PyExc_IndexError, _("no such window"));
+-    return NULL;
++    pyll_add((PyObject *)(self), &self->ref, &lastdict);
++
++    return (PyObject *)(self);
+ }
+ 
+-/* Convert a Python string into a Vim line.
+- *
+- * The result is in allocated memory. All internal nulls are replaced by
+- * newline characters. It is an error for the string to contain newline
+- * characters.
+- *
+- * On errors, the Python exception data is set, and NULL is returned.
+- */
+-    static char *
+-StringToLine(PyObject *obj)
++    static dict_T *
++py_dict_alloc()
+ {
+-    const char *str;
+-    char *save;
+-    PyInt len;
+-    PyInt i;
+-    char *p;
++    dict_T	*r;
+ 
+-    if (obj == NULL || !PyString_Check(obj))
++    if (!(r = dict_alloc()))
+     {
+-	PyErr_BadArgument();
++	PyErr_NoMemory();
+ 	return NULL;
+     }
++    ++r->dv_refcount;
+ 
+-    str = PyString_AsString(obj);
+-    len = PyString_Size(obj);
++    return r;
++}
+ 
+-    /*
+-     * Error checking: String must not contain newlines, as we
+-     * are replacing a single line, and we must replace it with
+-     * a single line.
+-     * A trailing newline is removed, so that append(f.readlines()) works.
+-     */
+-    p = memchr(str, '\n', len);
+-    if (p != NULL)
++    static PyObject *
++DictionaryConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
++{
++    DictionaryObject	*self;
++    dict_T	*dict;
++
++    if (!(dict = py_dict_alloc()))
++	return NULL;
++
++    self = (DictionaryObject *) DictionaryNew(subtype, dict);
++
++    --dict->dv_refcount;
++
++    if (kwargs || PyTuple_Size(args))
+     {
+-	if (p == str + len - 1)
+-	    --len;
+-	else
++	PyObject	*tmp;
++	if (!(tmp = DictionaryUpdate(self, args, kwargs)))
+ 	{
+-	    PyErr_SetVim(_("string cannot contain newlines"));
++	    Py_DECREF(self);
+ 	    return NULL;
+ 	}
+-    }
+ 
+-    /* Create a copy of the string, with internal nulls replaced by
+-     * newline characters, as is the vim convention.
+-     */
+-    save = (char *)alloc((unsigned)(len+1));
+-    if (save == NULL)
+-    {
+-	PyErr_NoMemory();
+-	return NULL;
++	Py_DECREF(tmp);
+     }
+ 
+-    for (i = 0; i < len; ++i)
+-    {
+-	if (str[i] == '\0')
+-	    save[i] = '\n';
+-	else
+-	    save[i] = str[i];
+-    }
++    return (PyObject *)(self);
++}
+ 
+-    save[i] = '\0';
++    static void
++DictionaryDestructor(DictionaryObject *self)
++{
++    pyll_remove(&self->ref, &lastdict);
++    dict_unref(self->dict);
+ 
+-    return save;
++    DESTRUCTOR_FINISH(self);
+ }
+ 
+-/* Get a line from the specified buffer. The line number is
+- * in Vim format (1-based). The line is returned as a Python
+- * string object.
+- */
++static char *DictionaryAttrs[] = {
++    "locked", "scope",
++    NULL
++};
++
+     static PyObject *
+-GetBufferLine(buf_T *buf, PyInt n)
++DictionaryDir(PyObject *self)
+ {
+-    return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
++    return ObjectDir(self, DictionaryAttrs);
+ }
+ 
+-
+-/* Get a list of lines from the specified buffer. The line numbers
+- * are in Vim format (1-based). The range is from lo up to, but not
+- * including, hi. The list is returned as a Python list of string objects.
+- */
++    static int
++DictionarySetattr(DictionaryObject *self, char *name, PyObject *val)
++{
++    if (val == NULL)
++    {
++	PyErr_SetString(PyExc_AttributeError,
++		_("cannot delete vim.Dictionary attributes"));
++	return -1;
++    }
++
++    if (strcmp(name, "locked") == 0)
++    {
++	if (self->dict->dv_lock == VAR_FIXED)
++	{
++	    PyErr_SetString(PyExc_TypeError, _("cannot modify fixed dictionary"));
++	    return -1;
++	}
++	else
++	{
++	    int		istrue = PyObject_IsTrue(val);
++	    if (istrue == -1)
++		return -1;
++	    else if (istrue)
++		self->dict->dv_lock = VAR_LOCKED;
++	    else
++		self->dict->dv_lock = 0;
++	}
++	return 0;
++    }
++    else
++    {
++	PyErr_SetString(PyExc_AttributeError, _("cannot set this attribute"));
++	return -1;
++    }
++}
++
++    static PyInt
++DictionaryLength(DictionaryObject *self)
++{
++    return ((PyInt) (self->dict->dv_hashtab.ht_used));
++}
++
++#define DICT_FLAG_HAS_DEFAULT	0x01
++#define DICT_FLAG_POP		0x02
++#define DICT_FLAG_NONE_DEFAULT	0x04
++#define DICT_FLAG_RETURN_BOOL	0x08 /* Incompatible with DICT_FLAG_POP */
++#define DICT_FLAG_RETURN_PAIR	0x10
++
+     static PyObject *
+-GetBufferLineList(buf_T *buf, PyInt lo, PyInt hi)
++_DictionaryItem(DictionaryObject *self, PyObject *args, int flags)
+ {
+-    PyInt i;
+-    PyInt n = hi - lo;
+-    PyObject *list = PyList_New(n);
++    PyObject	*keyObject;
++    PyObject	*defObject = ((flags & DICT_FLAG_NONE_DEFAULT)? Py_None : NULL);
++    PyObject	*r;
++    char_u	*key;
++    dictitem_T	*di;
++    dict_T	*dict = self->dict;
++    hashitem_T	*hi;
++    PyObject	*todecref;
+ 
+-    if (list == NULL)
++    if (flags & DICT_FLAG_HAS_DEFAULT)
++    {
++	if (!PyArg_ParseTuple(args, "O|O", &keyObject, &defObject))
++	    return NULL;
++    }
++    else
++	keyObject = args;
++
++    if (flags & DICT_FLAG_RETURN_BOOL)
++	defObject = Py_False;
++
++    if (!(key = StringToChars(keyObject, &todecref)))
+ 	return NULL;
+ 
+-    for (i = 0; i < n; ++i)
++    if (*key == NUL)
+     {
+-	PyObject *str = LineToString((char *)ml_get_buf(buf, (linenr_T)(lo+i), FALSE));
++	RAISE_NO_EMPTY_KEYS;
++	Py_XDECREF(todecref);
++	return NULL;
++    }
+ 
+-	/* Error check - was the Python string creation OK? */
+-	if (str == NULL)
++    hi = hash_find(&dict->dv_hashtab, key);
++
++    Py_XDECREF(todecref);
++
++    if (HASHITEM_EMPTY(hi))
++    {
++	if (defObject)
+ 	{
+-	    Py_DECREF(list);
++	    Py_INCREF(defObject);
++	    return defObject;
++	}
++	else
++	{
++	    PyErr_SetObject(PyExc_KeyError, keyObject);
+ 	    return NULL;
+ 	}
++    }
++    else if (flags & DICT_FLAG_RETURN_BOOL)
++    {
++	Py_INCREF(Py_True);
++	return Py_True;
++    }
+ 
+-	/* Set the list item */
+-	if (PyList_SetItem(list, i, str))
++    di = dict_lookup(hi);
++
++    if (!(r = ConvertToPyObject(&di->di_tv)))
++	return NULL;
++
++    if (flags & DICT_FLAG_POP)
++    {
++	if (dict->dv_lock)
+ 	{
+-	    Py_DECREF(str);
+-	    Py_DECREF(list);
++	    PyErr_SetVim(_("dict is locked"));
++	    Py_DECREF(r);
+ 	    return NULL;
+ 	}
++
++	hash_remove(&dict->dv_hashtab, hi);
++	dictitem_free(di);
+     }
+ 
+-    /* The ownership of the Python list is passed to the caller (ie,
+-     * the caller should Py_DECREF() the object when it is finished
+-     * with it).
+-     */
++    return r;
++}
++
++    static PyObject *
++DictionaryItem(DictionaryObject *self, PyObject *keyObject)
++{
++    return _DictionaryItem(self, keyObject, 0);
++}
++
++    static int
++DictionaryContains(DictionaryObject *self, PyObject *keyObject)
++{
++    PyObject	*rObj = _DictionaryItem(self, keyObject, DICT_FLAG_RETURN_BOOL);
++    int		r;
++
++    r = (rObj == Py_True);
++
++    Py_DECREF(Py_True);
++
++    return r;
++}
++
++typedef struct
++{
++    hashitem_T	*ht_array;
++    long_u	ht_used;
++    hashtab_T	*ht;
++    hashitem_T	*hi;
++    long_u	todo;
++} dictiterinfo_T;
++
++    static PyObject *
++DictionaryIterNext(dictiterinfo_T **dii)
++{
++    PyObject	*r;
++
++    if (!(*dii)->todo)
++	return NULL;
++
++    if ((*dii)->ht->ht_array != (*dii)->ht_array ||
++	    (*dii)->ht->ht_used != (*dii)->ht_used)
++    {
++	PyErr_SetString(PyExc_RuntimeError,
++		_("hashtab changed during iteration"));
++	return NULL;
++    }
++
++    while (((*dii)->todo) && HASHITEM_EMPTY((*dii)->hi))
++	++((*dii)->hi);
++
++    --((*dii)->todo);
++
++    if (!(r = PyBytes_FromString((char *) (*dii)->hi->hi_key)))
++	return NULL;
++
++    return r;
++}
++
++    static PyObject *
++DictionaryIter(DictionaryObject *self)
++{
++    dictiterinfo_T	*dii;
++    hashtab_T		*ht;
++
++    if (!(dii = PyMem_New(dictiterinfo_T, 1)))
++    {
++	PyErr_NoMemory();
++	return NULL;
++    }
++
++    ht = &self->dict->dv_hashtab;
++    dii->ht_array = ht->ht_array;
++    dii->ht_used = ht->ht_used;
++    dii->ht = ht;
++    dii->hi = dii->ht_array;
++    dii->todo = dii->ht_used;
++
++    return IterNew(dii,
++	    (destructorfun) PyMem_Free, (nextfun) DictionaryIterNext,
++	    NULL, NULL);
++}
++
++    static PyInt
++DictionaryAssItem(DictionaryObject *self, PyObject *keyObject, PyObject *valObject)
++{
++    char_u	*key;
++    typval_T	tv;
++    dict_T	*dict = self->dict;
++    dictitem_T	*di;
++    PyObject	*todecref;
++
++    if (dict->dv_lock)
++    {
++	PyErr_SetVim(_("dict is locked"));
++	return -1;
++    }
++
++    if (!(key = StringToChars(keyObject, &todecref)))
++	return -1;
++
++    if (*key == NUL)
++    {
++	RAISE_NO_EMPTY_KEYS;
++	Py_XDECREF(todecref);
++	return -1;
++    }
++
++    di = dict_find(dict, key, -1);
++
++    if (valObject == NULL)
++    {
++	hashitem_T	*hi;
++
++	if (di == NULL)
++	{
++	    Py_XDECREF(todecref);
++	    PyErr_SetObject(PyExc_KeyError, keyObject);
++	    return -1;
++	}
++	hi = hash_find(&dict->dv_hashtab, di->di_key);
++	hash_remove(&dict->dv_hashtab, hi);
++	dictitem_free(di);
++	Py_XDECREF(todecref);
++	return 0;
++    }
++
++    if (ConvertFromPyObject(valObject, &tv) == -1)
++    {
++	Py_XDECREF(todecref);
++	return -1;
++    }
++
++    if (di == NULL)
++    {
++	if (!(di = dictitem_alloc(key)))
++	{
++	    Py_XDECREF(todecref);
++	    PyErr_NoMemory();
++	    return -1;
++	}
++	di->di_tv.v_lock = 0;
++	di->di_tv.v_type = VAR_UNKNOWN;
++
++	if (dict_add(dict, di) == FAIL)
++	{
++	    Py_XDECREF(todecref);
++	    vim_free(di);
++	    dictitem_free(di);
++	    PyErr_SetVim(_("failed to add key to dictionary"));
++	    return -1;
++	}
++    }
++    else
++	clear_tv(&di->di_tv);
++
++    Py_XDECREF(todecref);
++
++    copy_tv(&tv, &di->di_tv);
++    clear_tv(&tv);
++    return 0;
++}
++
++typedef PyObject *(*hi_to_py)(hashitem_T *);
++
++    static PyObject *
++DictionaryListObjects(DictionaryObject *self, hi_to_py hiconvert)
++{
++    dict_T	*dict = self->dict;
++    long_u	todo = dict->dv_hashtab.ht_used;
++    Py_ssize_t	i = 0;
++    PyObject	*r;
++    hashitem_T	*hi;
++    PyObject	*newObj;
++
++    r = PyList_New(todo);
++    for (hi = dict->dv_hashtab.ht_array; todo > 0; ++hi)
++    {
++	if (!HASHITEM_EMPTY(hi))
++	{
++	    if (!(newObj = hiconvert(hi)))
++	    {
++		Py_DECREF(r);
++		return NULL;
++	    }
++	    if (PyList_SetItem(r, i, newObj))
++	    {
++		Py_DECREF(r);
++		Py_DECREF(newObj);
++		return NULL;
++	    }
++	    --todo;
++	    ++i;
++	}
++    }
++    return r;
++}
++
++    static PyObject *
++dict_key(hashitem_T *hi)
++{
++    return PyBytes_FromString((char *)(hi->hi_key));
++}
++
++    static PyObject *
++DictionaryListKeys(DictionaryObject *self)
++{
++    return DictionaryListObjects(self, dict_key);
++}
++
++    static PyObject *
++dict_val(hashitem_T *hi)
++{
++    dictitem_T	*di;
++
++    di = dict_lookup(hi);
++    return ConvertToPyObject(&di->di_tv);
++}
++
++    static PyObject *
++DictionaryListValues(DictionaryObject *self)
++{
++    return DictionaryListObjects(self, dict_val);
++}
++
++    static PyObject *
++dict_item(hashitem_T *hi)
++{
++    PyObject	*keyObject;
++    PyObject	*valObject;
++    PyObject	*r;
++
++    if (!(keyObject = dict_key(hi)))
++	return NULL;
++
++    if (!(valObject = dict_val(hi)))
++    {
++	Py_DECREF(keyObject);
++	return NULL;
++    }
++
++    r = Py_BuildValue("(OO)", keyObject, valObject);
++
++    Py_DECREF(keyObject);
++    Py_DECREF(valObject);
++
++    return r;
++}
++
++    static PyObject *
++DictionaryListItems(DictionaryObject *self)
++{
++    return DictionaryListObjects(self, dict_item);
++}
++
++    static PyObject *
++DictionaryUpdate(DictionaryObject *self, PyObject *args, PyObject *kwargs)
++{
++    dict_T	*dict = self->dict;
++
++    if (dict->dv_lock)
++    {
++	PyErr_SetVim(_("dict is locked"));
++	return NULL;
++    }
++
++    if (kwargs)
++    {
++	typval_T	tv;
++
++	if (ConvertFromPyMapping(kwargs, &tv) == -1)
++	    return NULL;
++
++	VimTryStart();
++	dict_extend(self->dict, tv.vval.v_dict, (char_u *) "force");
++	clear_tv(&tv);
++	if (VimTryEnd())
++	    return NULL;
++    }
++    else
++    {
++	PyObject	*object;
++
++	if (!PyArg_Parse(args, "(O)", &object))
++	    return NULL;
++
++	if (PyObject_HasAttrString(object, "keys"))
++	    return DictionaryUpdate(self, NULL, object);
++	else
++	{
++	    PyObject	*iterator;
++	    PyObject	*item;
++
++	    if (!(iterator = PyObject_GetIter(object)))
++		return NULL;
++
++	    while ((item = PyIter_Next(iterator)))
++	    {
++		PyObject	*fast;
++		PyObject	*keyObject;
++		PyObject	*valObject;
++		PyObject	*todecref;
++		char_u		*key;
++		dictitem_T	*di;
++
++		if (!(fast = PySequence_Fast(item, "")))
++		{
++		    Py_DECREF(iterator);
++		    Py_DECREF(item);
++		    return NULL;
++		}
++
++		Py_DECREF(item);
++
++		if (PySequence_Fast_GET_SIZE(fast) != 2)
++		{
++		    Py_DECREF(iterator);
++		    Py_DECREF(fast);
++		    PyErr_SetString(PyExc_ValueError,
++			    _("expected sequence element of size 2"));
++		    return NULL;
++		}
++
++		keyObject = PySequence_Fast_GET_ITEM(fast, 0);
++
++		if (!(key = StringToChars(keyObject, &todecref)))
++		{
++		    Py_DECREF(iterator);
++		    Py_DECREF(fast);
++		    return NULL;
++		}
++
++		di = dictitem_alloc(key);
++
++		Py_XDECREF(todecref);
++
++		if (di == NULL)
++		{
++		    Py_DECREF(fast);
++		    Py_DECREF(iterator);
++		    PyErr_NoMemory();
++		    return NULL;
++		}
++		di->di_tv.v_lock = 0;
++		di->di_tv.v_type = VAR_UNKNOWN;
++
++		valObject = PySequence_Fast_GET_ITEM(fast, 1);
++
++		if (ConvertFromPyObject(valObject, &di->di_tv) == -1)
++		{
++		    Py_DECREF(iterator);
++		    Py_DECREF(fast);
++		    dictitem_free(di);
++		    return NULL;
++		}
++
++		Py_DECREF(fast);
++
++		if (dict_add(dict, di) == FAIL)
++		{
++		    Py_DECREF(iterator);
++		    dictitem_free(di);
++		    PyErr_SetVim(_("failed to add key to dictionary"));
++		    return NULL;
++		}
++	    }
++
++	    Py_DECREF(iterator);
++
++	    /* Iterator may have finished due to an exception */
++	    if (PyErr_Occurred())
++		return NULL;
++	}
++    }
++    Py_INCREF(Py_None);
++    return Py_None;
++}
++
++    static PyObject *
++DictionaryGet(DictionaryObject *self, PyObject *args)
++{
++    return _DictionaryItem(self, args,
++			    DICT_FLAG_HAS_DEFAULT|DICT_FLAG_NONE_DEFAULT);
++}
++
++    static PyObject *
++DictionaryPop(DictionaryObject *self, PyObject *args)
++{
++    return _DictionaryItem(self, args, DICT_FLAG_HAS_DEFAULT|DICT_FLAG_POP);
++}
++
++    static PyObject *
++DictionaryPopItem(DictionaryObject *self)
++{
++    hashitem_T	*hi;
++    PyObject	*r;
++    PyObject	*valObject;
++    dictitem_T	*di;
++
++    if (self->dict->dv_hashtab.ht_used == 0)
++    {
++	PyErr_SetNone(PyExc_KeyError);
++	return NULL;
++    }
++
++    hi = self->dict->dv_hashtab.ht_array;
++    while (HASHITEM_EMPTY(hi))
++	++hi;
++
++    di = dict_lookup(hi);
++
++    if (!(valObject = ConvertToPyObject(&di->di_tv)))
++	return NULL;
++
++    if (!(r = Py_BuildValue("(" Py_bytes_fmt "O)", hi->hi_key, valObject)))
++    {
++	Py_DECREF(valObject);
++	return NULL;
++    }
++
++    hash_remove(&self->dict->dv_hashtab, hi);
++    dictitem_free(di);
++
++    return r;
++}
++
++    static PyObject *
++DictionaryHasKey(DictionaryObject *self, PyObject *args)
++{
++    PyObject	*keyObject;
++
++    if (!PyArg_ParseTuple(args, "O", &keyObject))
++	return NULL;
++
++    return _DictionaryItem(self, keyObject, DICT_FLAG_RETURN_BOOL);
++}
++
++static PySequenceMethods DictionaryAsSeq = {
++    0,					/* sq_length */
++    0,					/* sq_concat */
++    0,					/* sq_repeat */
++    0,					/* sq_item */
++    0,					/* sq_slice */
++    0,					/* sq_ass_item */
++    0,					/* sq_ass_slice */
++    (objobjproc) DictionaryContains,	/* sq_contains */
++    0,					/* sq_inplace_concat */
++    0,					/* sq_inplace_repeat */
++};
++
++static PyMappingMethods DictionaryAsMapping = {
++    (lenfunc)       DictionaryLength,
++    (binaryfunc)    DictionaryItem,
++    (objobjargproc) DictionaryAssItem,
++};
++
++static struct PyMethodDef DictionaryMethods[] = {
++    {"keys",	(PyCFunction)DictionaryListKeys,	METH_NOARGS,	""},
++    {"values",	(PyCFunction)DictionaryListValues,	METH_NOARGS,	""},
++    {"items",	(PyCFunction)DictionaryListItems,	METH_NOARGS,	""},
++    {"update",	(PyCFunction)DictionaryUpdate,		METH_VARARGS|METH_KEYWORDS, ""},
++    {"get",	(PyCFunction)DictionaryGet,		METH_VARARGS,	""},
++    {"pop",	(PyCFunction)DictionaryPop,		METH_VARARGS,	""},
++    {"popitem",	(PyCFunction)DictionaryPopItem,		METH_NOARGS,	""},
++    {"has_key",	(PyCFunction)DictionaryHasKey,		METH_VARARGS,	""},
++    {"__dir__",	(PyCFunction)DictionaryDir,		METH_NOARGS,	""},
++    { NULL,	NULL,					0,		NULL}
++};
++
++static PyTypeObject ListType;
++static PySequenceMethods ListAsSeq;
++static PyMappingMethods ListAsMapping;
++
++typedef struct
++{
++    PyObject_HEAD
++    list_T	*list;
++    pylinkedlist_T	ref;
++} ListObject;
++
++#define NEW_LIST(list) ListNew(&ListType, list)
++
++    static PyObject *
++ListNew(PyTypeObject *subtype, list_T *list)
++{
++    ListObject	*self;
++
++    self = (ListObject *) subtype->tp_alloc(subtype, 0);
++    if (self == NULL)
++	return NULL;
++    self->list = list;
++    ++list->lv_refcount;
++
++    pyll_add((PyObject *)(self), &self->ref, &lastlist);
++
++    return (PyObject *)(self);
++}
++
++    static list_T *
++py_list_alloc()
++{
++    list_T	*r;
++
++    if (!(r = list_alloc()))
++    {
++	PyErr_NoMemory();
++	return NULL;
++    }
++    ++r->lv_refcount;
++
++    return r;
++}
++
++    static int
++list_py_concat(list_T *l, PyObject *obj, PyObject *lookup_dict)
++{
++    PyObject	*iterator;
++    PyObject	*item;
++    listitem_T	*li;
++
++    if (!(iterator = PyObject_GetIter(obj)))
++	return -1;
++
++    while ((item = PyIter_Next(iterator)))
++    {
++	if (!(li = listitem_alloc()))
++	{
++	    PyErr_NoMemory();
++	    Py_DECREF(item);
++	    Py_DECREF(iterator);
++	    return -1;
++	}
++	li->li_tv.v_lock = 0;
++	li->li_tv.v_type = VAR_UNKNOWN;
++
++	if (_ConvertFromPyObject(item, &li->li_tv, lookup_dict) == -1)
++	{
++	    Py_DECREF(item);
++	    Py_DECREF(iterator);
++	    listitem_free(li);
++	    return -1;
++	}
++
++	Py_DECREF(item);
++
++	list_append(l, li);
++    }
++
++    Py_DECREF(iterator);
++
++    /* Iterator may have finished due to an exception */
++    if (PyErr_Occurred())
++	return -1;
++
++    return 0;
++}
++
++    static PyObject *
++ListConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
++{
++    list_T	*list;
++    PyObject	*obj = NULL;
++
++    if (kwargs)
++    {
++	PyErr_SetString(PyExc_TypeError,
++		_("list constructor does not accept keyword arguments"));
++	return NULL;
++    }
++
++    if (!PyArg_ParseTuple(args, "|O", &obj))
++	return NULL;
++
++    if (!(list = py_list_alloc()))
++	return NULL;
++
++    if (obj)
++    {
++	PyObject	*lookup_dict;
++
++	if (!(lookup_dict = PyDict_New()))
++	{
++	    list_unref(list);
++	    return NULL;
++	}
++
++	if (list_py_concat(list, obj, lookup_dict) == -1)
++	{
++	    Py_DECREF(lookup_dict);
++	    list_unref(list);
++	    return NULL;
++	}
++
++	Py_DECREF(lookup_dict);
++    }
++
++    return ListNew(subtype, list);
++}
++
++    static void
++ListDestructor(ListObject *self)
++{
++    pyll_remove(&self->ref, &lastlist);
++    list_unref(self->list);
++
++    DESTRUCTOR_FINISH(self);
++}
++
++    static PyInt
++ListLength(ListObject *self)
++{
++    return ((PyInt) (self->list->lv_len));
++}
++
++    static PyObject *
++ListItem(ListObject *self, Py_ssize_t index)
++{
++    listitem_T	*li;
++
++    if (index >= ListLength(self))
++    {
++	PyErr_SetString(PyExc_IndexError, _("list index out of range"));
++	return NULL;
++    }
++    li = list_find(self->list, (long) index);
++    if (li == NULL)
++    {
++	PyErr_SetVim(_("internal error: failed to get vim list item"));
++	return NULL;
++    }
++    return ConvertToPyObject(&li->li_tv);
++}
++
++#define PROC_RANGE \
++    if (last < 0) {\
++	if (last < -size) \
++	    last = 0; \
++	else \
++	    last += size; \
++    } \
++    if (first < 0) \
++	first = 0; \
++    if (first > size) \
++	first = size; \
++    if (last > size) \
++	last = size;
++
++    static PyObject *
++ListSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last)
++{
++    PyInt	i;
++    PyInt	size = ListLength(self);
++    PyInt	n;
++    PyObject	*list;
++    int		reversed = 0;
++
++    PROC_RANGE
++    if (first >= last)
++	first = last;
++
++    n = last-first;
++    list = PyList_New(n);
++    if (list == NULL)
++	return NULL;
++
++    for (i = 0; i < n; ++i)
++    {
++	PyObject	*item = ListItem(self, first + i);
++	if (item == NULL)
++	{
++	    Py_DECREF(list);
++	    return NULL;
++	}
++
++	if ((PyList_SetItem(list, ((reversed)?(n-i-1):(i)), item)))
++	{
++	    Py_DECREF(item);
++	    Py_DECREF(list);
++	    return NULL;
++	}
++    }
++
++    return list;
++}
++
++typedef struct
++{
++    listwatch_T	lw;
++    list_T	*list;
++} listiterinfo_T;
++
++    static void
++ListIterDestruct(listiterinfo_T *lii)
++{
++    list_rem_watch(lii->list, &lii->lw);
++    PyMem_Free(lii);
++}
++
++    static PyObject *
++ListIterNext(listiterinfo_T **lii)
++{
++    PyObject	*r;
++
++    if (!((*lii)->lw.lw_item))
++	return NULL;
++
++    if (!(r = ConvertToPyObject(&((*lii)->lw.lw_item->li_tv))))
++	return NULL;
++
++    (*lii)->lw.lw_item = (*lii)->lw.lw_item->li_next;
++
++    return r;
++}
++
++    static PyObject *
++ListIter(ListObject *self)
++{
++    listiterinfo_T	*lii;
++    list_T	*l = self->list;
++
++    if (!(lii = PyMem_New(listiterinfo_T, 1)))
++    {
++	PyErr_NoMemory();
++	return NULL;
++    }
++
++    list_add_watch(l, &lii->lw);
++    lii->lw.lw_item = l->lv_first;
++    lii->list = l;
++
++    return IterNew(lii,
++	    (destructorfun) ListIterDestruct, (nextfun) ListIterNext,
++	    NULL, NULL);
++}
++
++    static int
++ListAssItem(ListObject *self, Py_ssize_t index, PyObject *obj)
++{
++    typval_T	tv;
++    list_T	*l = self->list;
++    listitem_T	*li;
++    Py_ssize_t	length = ListLength(self);
++
++    if (l->lv_lock)
++    {
++	PyErr_SetVim(_("list is locked"));
++	return -1;
++    }
++    if (index>length || (index==length && obj==NULL))
++    {
++	PyErr_SetString(PyExc_IndexError, _("list index out of range"));
++	return -1;
++    }
++
++    if (obj == NULL)
++    {
++	li = list_find(l, (long) index);
++	list_remove(l, li, li);
++	clear_tv(&li->li_tv);
++	vim_free(li);
++	return 0;
++    }
++
++    if (ConvertFromPyObject(obj, &tv) == -1)
++	return -1;
++
++    if (index == length)
++    {
++	if (list_append_tv(l, &tv) == FAIL)
++	{
++	    clear_tv(&tv);
++	    PyErr_SetVim(_("failed to add item to list"));
++	    return -1;
++	}
++    }
++    else
++    {
++	li = list_find(l, (long) index);
++	clear_tv(&li->li_tv);
++	copy_tv(&tv, &li->li_tv);
++	clear_tv(&tv);
++    }
++    return 0;
++}
++
++    static int
++ListAssSlice(ListObject *self, Py_ssize_t first, Py_ssize_t last, PyObject *obj)
++{
++    PyInt	size = ListLength(self);
++    PyObject	*iterator;
++    PyObject	*item;
++    listitem_T	*li;
++    listitem_T	*next;
++    typval_T	v;
++    list_T	*l = self->list;
++    PyInt	i;
++
++    if (l->lv_lock)
++    {
++	PyErr_SetVim(_("list is locked"));
++	return -1;
++    }
++
++    PROC_RANGE
++
++    if (first == size)
++	li = NULL;
++    else
++    {
++	li = list_find(l, (long) first);
++	if (li == NULL)
++	{
++	    PyErr_SetVim(_("internal error: no vim list item"));
++	    return -1;
++	}
++	if (last > first)
++	{
++	    i = last - first;
++	    while (i-- && li != NULL)
++	    {
++		next = li->li_next;
++		listitem_remove(l, li);
++		li = next;
++	    }
++	}
++    }
++
++    if (obj == NULL)
++	return 0;
++
++    if (!(iterator = PyObject_GetIter(obj)))
++	return -1;
++
++    while ((item = PyIter_Next(iterator)))
++    {
++	if (ConvertFromPyObject(item, &v) == -1)
++	{
++	    Py_DECREF(iterator);
++	    Py_DECREF(item);
++	    return -1;
++	}
++	Py_DECREF(item);
++	if (list_insert_tv(l, &v, li) == FAIL)
++	{
++	    clear_tv(&v);
++	    PyErr_SetVim(_("internal error: failed to add item to list"));
++	    return -1;
++	}
++	clear_tv(&v);
++    }
++    Py_DECREF(iterator);
++    return 0;
++}
++
++    static PyObject *
++ListConcatInPlace(ListObject *self, PyObject *obj)
++{
++    list_T	*l = self->list;
++    PyObject	*lookup_dict;
++
++    if (l->lv_lock)
++    {
++	PyErr_SetVim(_("list is locked"));
++	return NULL;
++    }
++
++    if (!(lookup_dict = PyDict_New()))
++	return NULL;
++
++    if (list_py_concat(l, obj, lookup_dict) == -1)
++    {
++	Py_DECREF(lookup_dict);
++	return NULL;
++    }
++    Py_DECREF(lookup_dict);
++
++    Py_INCREF(self);
++    return (PyObject *)(self);
++}
++
++static char *ListAttrs[] = {
++    "locked",
++    NULL
++};
++
++    static PyObject *
++ListDir(PyObject *self)
++{
++    return ObjectDir(self, ListAttrs);
++}
++
++    static int
++ListSetattr(ListObject *self, char *name, PyObject *val)
++{
++    if (val == NULL)
++    {
++	PyErr_SetString(PyExc_AttributeError,
++		_("cannot delete vim.List attributes"));
++	return -1;
++    }
++
++    if (strcmp(name, "locked") == 0)
++    {
++	if (self->list->lv_lock == VAR_FIXED)
++	{
++	    PyErr_SetString(PyExc_TypeError, _("cannot modify fixed list"));
++	    return -1;
++	}
++	else
++	{
++	    int		istrue = PyObject_IsTrue(val);
++	    if (istrue == -1)
++		return -1;
++	    else if (istrue)
++		self->list->lv_lock = VAR_LOCKED;
++	    else
++		self->list->lv_lock = 0;
++	}
++	return 0;
++    }
++    else
++    {
++	PyErr_SetString(PyExc_AttributeError, _("cannot set this attribute"));
++	return -1;
++    }
++}
++
++static struct PyMethodDef ListMethods[] = {
++    {"extend",	(PyCFunction)ListConcatInPlace,	METH_O,		""},
++    {"__dir__",	(PyCFunction)ListDir,		METH_NOARGS,	""},
++    { NULL,	NULL,				0,		NULL}
++};
++
++typedef struct
++{
++    PyObject_HEAD
++    char_u	*name;
++} FunctionObject;
++
++static PyTypeObject FunctionType;
++
++#define NEW_FUNCTION(name) FunctionNew(&FunctionType, name)
++
++    static PyObject *
++FunctionNew(PyTypeObject *subtype, char_u *name)
++{
++    FunctionObject	*self;
++
++    self = (FunctionObject *) subtype->tp_alloc(subtype, 0);
++
++    if (self == NULL)
++	return NULL;
++
++    if (isdigit(*name))
++    {
++	if (!translated_function_exists(name))
++	{
++	    PyErr_SetString(PyExc_ValueError,
++		    _("unnamed function does not exist"));
++	    return NULL;
++	}
++	self->name = vim_strsave(name);
++	func_ref(self->name);
++    }
++    else
++	if ((self->name = get_expanded_name(name,
++				    vim_strchr(name, AUTOLOAD_CHAR) == NULL))
++		== NULL)
++	{
++	    PyErr_SetString(PyExc_ValueError, _("function does not exist"));
++	    return NULL;
++	}
++
++    return (PyObject *)(self);
++}
++
++    static PyObject *
++FunctionConstructor(PyTypeObject *subtype, PyObject *args, PyObject *kwargs)
++{
++    PyObject	*self;
++    char_u	*name;
++
++    if (kwargs)
++    {
++	PyErr_SetString(PyExc_TypeError,
++		_("function constructor does not accept keyword arguments"));
++	return NULL;
++    }
++
++    if (!PyArg_ParseTuple(args, "s", &name))
++	return NULL;
++
++    self = FunctionNew(subtype, name);
++
++    return self;
++}
++
++    static void
++FunctionDestructor(FunctionObject *self)
++{
++    func_unref(self->name);
++    vim_free(self->name);
++
++    DESTRUCTOR_FINISH(self);
++}
++
++static char *FunctionAttrs[] = {
++    "softspace",
++    NULL
++};
++
++    static PyObject *
++FunctionDir(PyObject *self)
++{
++    return ObjectDir(self, FunctionAttrs);
++}
++
++    static PyObject *
++FunctionCall(FunctionObject *self, PyObject *argsObject, PyObject *kwargs)
++{
++    char_u	*name = self->name;
++    typval_T	args;
++    typval_T	selfdicttv;
++    typval_T	rettv;
++    dict_T	*selfdict = NULL;
++    PyObject	*selfdictObject;
++    PyObject	*result;
++    int		error;
++
++    if (ConvertFromPyObject(argsObject, &args) == -1)
++	return NULL;
++
++    if (kwargs != NULL)
++    {
++	selfdictObject = PyDict_GetItemString(kwargs, "self");
++	if (selfdictObject != NULL)
++	{
++	    if (ConvertFromPyMapping(selfdictObject, &selfdicttv) == -1)
++	    {
++		clear_tv(&args);
++		return NULL;
++	    }
++	    selfdict = selfdicttv.vval.v_dict;
++	}
++    }
++
++    Py_BEGIN_ALLOW_THREADS
++    Python_Lock_Vim();
++
++    VimTryStart();
++    error = func_call(name, &args, selfdict, &rettv);
++
++    Python_Release_Vim();
++    Py_END_ALLOW_THREADS
++
++    if (VimTryEnd())
++	result = NULL;
++    else if (error != OK)
++    {
++	result = NULL;
++	PyErr_SetVim(_("failed to run function"));
++    }
++    else
++	result = ConvertToPyObject(&rettv);
++
++    clear_tv(&args);
++    clear_tv(&rettv);
++    if (selfdict != NULL)
++	clear_tv(&selfdicttv);
++
++    return result;
++}
++
++    static PyObject *
++FunctionRepr(FunctionObject *self)
++{
++    return PyString_FromFormat("<vim.Function '%s'>", self->name);
++}
++
++static struct PyMethodDef FunctionMethods[] = {
++    {"__dir__",	(PyCFunction)FunctionDir,   METH_NOARGS,		""},
++    { NULL,	NULL,			0,				NULL}
++};
++
++/*
++ * Options object
++ */
++
++static PyTypeObject OptionsType;
++
++typedef int (*checkfun)(void *);
++
++typedef struct
++{
++    PyObject_HEAD
++    int opt_type;
++    void *from;
++    checkfun Check;
++    PyObject *fromObj;
++} OptionsObject;
++
++    static int
++dummy_check(void *arg UNUSED)
++{
++    return 0;
++}
++
++    static PyObject *
++OptionsNew(int opt_type, void *from, checkfun Check, PyObject *fromObj)
++{
++    OptionsObject	*self;
++
++    self = PyObject_GC_New(OptionsObject, &OptionsType);
++    if (self == NULL)
++	return NULL;
++
++    self->opt_type = opt_type;
++    self->from = from;
++    self->Check = Check;
++    self->fromObj = fromObj;
++    if (fromObj)
++	Py_INCREF(fromObj);
++
++    return (PyObject *)(self);
++}
++
++    static void
++OptionsDestructor(OptionsObject *self)
++{
++    PyObject_GC_UnTrack((void *)(self));
++    Py_XDECREF(self->fromObj);
++    PyObject_GC_Del((void *)(self));
++}
++
++    static int
++OptionsTraverse(OptionsObject *self, visitproc visit, void *arg)
++{
++    Py_VISIT(self->fromObj);
++    return 0;
++}
++
++    static int
++OptionsClear(OptionsObject *self)
++{
++    Py_CLEAR(self->fromObj);
++    return 0;
++}
++
++    static PyObject *
++OptionsItem(OptionsObject *self, PyObject *keyObject)
++{
++    char_u	*key;
++    int		flags;
++    long	numval;
++    char_u	*stringval;
++    PyObject	*todecref;
++
++    if (self->Check(self->from))
++	return NULL;
++
++    if (!(key = StringToChars(keyObject, &todecref)))
++	return NULL;
++
++    if (*key == NUL)
++    {
++	RAISE_NO_EMPTY_KEYS;
++	Py_XDECREF(todecref);
++	return NULL;
++    }
++
++    flags = get_option_value_strict(key, &numval, &stringval,
++				    self->opt_type, self->from);
++
++    Py_XDECREF(todecref);
++
++    if (flags == 0)
++    {
++	PyErr_SetObject(PyExc_KeyError, keyObject);
++	return NULL;
++    }
++
++    if (flags & SOPT_UNSET)
++    {
++	Py_INCREF(Py_None);
++	return Py_None;
++    }
++    else if (flags & SOPT_BOOL)
++    {
++	PyObject	*r;
++	r = numval ? Py_True : Py_False;
++	Py_INCREF(r);
++	return r;
++    }
++    else if (flags & SOPT_NUM)
++	return PyInt_FromLong(numval);
++    else if (flags & SOPT_STRING)
++    {
++	if (stringval)
++	{
++	    PyObject	*r = PyBytes_FromString((char *) stringval);
++	    vim_free(stringval);
++	    return r;
++	}
++	else
++	{
++	    PyErr_SetString(PyExc_RuntimeError,
++		    _("unable to get option value"));
++	    return NULL;
++	}
++    }
++    else
++    {
++	PyErr_SetVim("Internal error: unknown option type. Should not happen");
++	return NULL;
++    }
++}
++
++    static int
++set_option_value_err(key, numval, stringval, opt_flags)
++    char_u	*key;
++    int		numval;
++    char_u	*stringval;
++    int		opt_flags;
++{
++    char_u	*errmsg;
++
++    if ((errmsg = set_option_value(key, numval, stringval, opt_flags)))
++    {
++	if (VimTryEnd())
++	    return FAIL;
++	PyErr_SetVim((char *)errmsg);
++	return FAIL;
++    }
++    return OK;
++}
++
++    static int
++set_option_value_for(key, numval, stringval, opt_flags, opt_type, from)
++    char_u	*key;
++    int		numval;
++    char_u	*stringval;
++    int		opt_flags;
++    int		opt_type;
++    void	*from;
++{
++    win_T	*save_curwin = NULL;
++    tabpage_T	*save_curtab = NULL;
++    buf_T	*save_curbuf = NULL;
++    int		r = 0;
++
++    VimTryStart();
++    switch (opt_type)
++    {
++	case SREQ_WIN:
++	    if (switch_win(&save_curwin, &save_curtab, (win_T *)from,
++				     win_find_tabpage((win_T *)from)) == FAIL)
++	    {
++		if (VimTryEnd())
++		    return -1;
++		PyErr_SetVim("Problem while switching windows.");
++		return -1;
++	    }
++	    r = set_option_value_err(key, numval, stringval, opt_flags);
++	    restore_win(save_curwin, save_curtab);
++	    if (r == FAIL)
++		return -1;
++	    break;
++	case SREQ_BUF:
++	    switch_buffer(&save_curbuf, (buf_T *)from);
++	    r = set_option_value_err(key, numval, stringval, opt_flags);
++	    restore_buffer(save_curbuf);
++	    if (r == FAIL)
++		return -1;
++	    break;
++	case SREQ_GLOBAL:
++	    r = set_option_value_err(key, numval, stringval, opt_flags);
++	    if (r == FAIL)
++		return -1;
++	    break;
++    }
++    return VimTryEnd();
++}
++
++    static int
++OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
++{
++    char_u	*key;
++    int		flags;
++    int		opt_flags;
++    int		r = 0;
++    PyObject	*todecref;
++
++    if (self->Check(self->from))
++	return -1;
++
++    if (!(key = StringToChars(keyObject, &todecref)))
++	return -1;
++
++    if (*key == NUL)
++    {
++	RAISE_NO_EMPTY_KEYS;
++	Py_XDECREF(todecref);
++	return -1;
++    }
++
++    flags = get_option_value_strict(key, NULL, NULL,
++				    self->opt_type, self->from);
++
++    if (flags == 0)
++    {
++	PyErr_SetObject(PyExc_KeyError, keyObject);
++	Py_XDECREF(todecref);
++	return -1;
++    }
++
++    if (valObject == NULL)
++    {
++	if (self->opt_type == SREQ_GLOBAL)
++	{
++	    PyErr_SetString(PyExc_ValueError,
++		    _("unable to unset global option"));
++	    Py_XDECREF(todecref);
++	    return -1;
++	}
++	else if (!(flags & SOPT_GLOBAL))
++	{
++	    PyErr_SetString(PyExc_ValueError, _("unable to unset option "
++						"without global value"));
++	    Py_XDECREF(todecref);
++	    return -1;
++	}
++	else
++	{
++	    unset_global_local_option(key, self->from);
++	    Py_XDECREF(todecref);
++	    return 0;
++	}
++    }
++
++    opt_flags = (self->opt_type ? OPT_LOCAL : OPT_GLOBAL);
++
++    if (flags & SOPT_BOOL)
++    {
++	int	istrue = PyObject_IsTrue(valObject);
++
++	if (istrue == -1)
++	    r = -1;
++	else
++	    r = set_option_value_for(key, istrue, NULL,
++				    opt_flags, self->opt_type, self->from);
++    }
++    else if (flags & SOPT_NUM)
++    {
++	int val;
++
++#if PY_MAJOR_VERSION < 3
++	if (PyInt_Check(valObject))
++	    val = PyInt_AsLong(valObject);
++	else
++#endif
++	if (PyLong_Check(valObject))
++	    val = PyLong_AsLong(valObject);
++	else
++	{
++	    PyErr_SetString(PyExc_TypeError, _("object must be integer"));
++	    Py_XDECREF(todecref);
++	    return -1;
++	}
++
++	r = set_option_value_for(key, val, NULL, opt_flags,
++				self->opt_type, self->from);
++    }
++    else
++    {
++	char_u	*val;
++	PyObject	*todecref;
++
++	if ((val = StringToChars(valObject, &todecref)))
++	    r = set_option_value_for(key, 0, val, opt_flags,
++				    self->opt_type, self->from);
++	else
++	    r = -1;
++    }
++
++    Py_XDECREF(todecref);
++
++    return r;
++}
++
++static PyMappingMethods OptionsAsMapping = {
++    (lenfunc)       NULL,
++    (binaryfunc)    OptionsItem,
++    (objobjargproc) OptionsAssItem,
++};
++
++/* Tabpage object
++ */
++
++typedef struct
++{
++    PyObject_HEAD
++    tabpage_T	*tab;
++} TabPageObject;
++
++static PyObject *WinListNew(TabPageObject *tabObject);
++
++static PyTypeObject TabPageType;
++
++    static int
++CheckTabPage(TabPageObject *self)
++{
++    if (self->tab == INVALID_TABPAGE_VALUE)
++    {
++	PyErr_SetVim(_("attempt to refer to deleted tab page"));
++	return -1;
++    }
++
++    return 0;
++}
++
++    static PyObject *
++TabPageNew(tabpage_T *tab)
++{
++    TabPageObject *self;
++
++    if (TAB_PYTHON_REF(tab))
++    {
++	self = TAB_PYTHON_REF(tab);
++	Py_INCREF(self);
++    }
++    else
++    {
++	self = PyObject_NEW(TabPageObject, &TabPageType);
++	if (self == NULL)
++	    return NULL;
++	self->tab = tab;
++	TAB_PYTHON_REF(tab) = self;
++    }
++
++    return (PyObject *)(self);
++}
++
++    static void
++TabPageDestructor(TabPageObject *self)
++{
++    if (self->tab && self->tab != INVALID_TABPAGE_VALUE)
++	TAB_PYTHON_REF(self->tab) = NULL;
++
++    DESTRUCTOR_FINISH(self);
++}
++
++static char *TabPageAttrs[] = {
++    "windows", "number", "vars", "window", "valid",
++    NULL
++};
++
++    static PyObject *
++TabPageDir(PyObject *self)
++{
++    return ObjectDir(self, TabPageAttrs);
++}
++
++    static PyObject *
++TabPageAttrValid(TabPageObject *self, char *name)
++{
++    PyObject *r;
++
++    if (strcmp(name, "valid") != 0)
++	return NULL;
++
++    r = ((self->tab == INVALID_TABPAGE_VALUE) ? Py_False : Py_True);
++    Py_INCREF(r);
++    return r;
++}
++
++    static PyObject *
++TabPageAttr(TabPageObject *self, char *name)
++{
++    if (strcmp(name, "windows") == 0)
++	return WinListNew(self);
++    else if (strcmp(name, "number") == 0)
++	return PyLong_FromLong((long) get_tab_number(self->tab));
++    else if (strcmp(name, "vars") == 0)
++	return NEW_DICTIONARY(self->tab->tp_vars);
++    else if (strcmp(name, "window") == 0)
++    {
++	/* For current tab window.c does not bother to set or update tp_curwin
++	 */
++	if (self->tab == curtab)
++	    return WindowNew(curwin, curtab);
++	else
++	    return WindowNew(self->tab->tp_curwin, self->tab);
++    }
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, TabPageAttrs);
++    return NULL;
++}
++
++    static PyObject *
++TabPageRepr(TabPageObject *self)
++{
++    if (self->tab == INVALID_TABPAGE_VALUE)
++	return PyString_FromFormat("<tabpage object (deleted) at %p>", (self));
++    else
++    {
++	int	t = get_tab_number(self->tab);
++
++	if (t == 0)
++	    return PyString_FromFormat("<tabpage object (unknown) at %p>",
++					(self));
++	else
++	    return PyString_FromFormat("<tabpage %d>", t - 1);
++    }
++}
++
++static struct PyMethodDef TabPageMethods[] = {
++    /* name,	    function,			calling,	documentation */
++    {"__dir__",	    (PyCFunction)TabPageDir,	METH_NOARGS,	""},
++    { NULL,	    NULL,			0,		NULL}
++};
++
++/*
++ * Window list object
++ */
++
++static PyTypeObject TabListType;
++static PySequenceMethods TabListAsSeq;
++
++typedef struct
++{
++    PyObject_HEAD
++} TabListObject;
++
++    static PyInt
++TabListLength(PyObject *self UNUSED)
++{
++    tabpage_T	*tp = first_tabpage;
++    PyInt	n = 0;
++
++    while (tp != NULL)
++    {
++	++n;
++	tp = tp->tp_next;
++    }
++
++    return n;
++}
++
++    static PyObject *
++TabListItem(PyObject *self UNUSED, PyInt n)
++{
++    tabpage_T	*tp;
++
++    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next, --n)
++	if (n == 0)
++	    return TabPageNew(tp);
++
++    PyErr_SetString(PyExc_IndexError, _("no such tab page"));
++    return NULL;
++}
++
++/* Window object
++ */
++
++typedef struct
++{
++    PyObject_HEAD
++    win_T	*win;
++    TabPageObject	*tabObject;
++} WindowObject;
++
++static PyTypeObject WindowType;
++
++    static int
++CheckWindow(WindowObject *self)
++{
++    if (self->win == INVALID_WINDOW_VALUE)
++    {
++	PyErr_SetVim(_("attempt to refer to deleted window"));
++	return -1;
++    }
++
++    return 0;
++}
++
++    static PyObject *
++WindowNew(win_T *win, tabpage_T *tab)
++{
++    /* We need to handle deletion of windows underneath us.
++     * If we add a "w_python*_ref" field to the win_T structure,
++     * then we can get at it in win_free() in vim. We then
++     * need to create only ONE Python object per window - if
++     * we try to create a second, just INCREF the existing one
++     * and return it. The (single) Python object referring to
++     * the window is stored in "w_python*_ref".
++     * On a win_free() we set the Python object's win_T* field
++     * to an invalid value. We trap all uses of a window
++     * object, and reject them if the win_T* field is invalid.
++     *
++     * Python2 and Python3 get different fields and different objects:
++     * w_python_ref and w_python3_ref fields respectively.
++     */
++
++    WindowObject *self;
++
++    if (WIN_PYTHON_REF(win))
++    {
++	self = WIN_PYTHON_REF(win);
++	Py_INCREF(self);
++    }
++    else
++    {
++	self = PyObject_GC_New(WindowObject, &WindowType);
++	if (self == NULL)
++	    return NULL;
++	self->win = win;
++	WIN_PYTHON_REF(win) = self;
++    }
++
++    self->tabObject = ((TabPageObject *)(TabPageNew(tab)));
++
++    return (PyObject *)(self);
++}
++
++    static void
++WindowDestructor(WindowObject *self)
++{
++    PyObject_GC_UnTrack((void *)(self));
++    if (self->win && self->win != INVALID_WINDOW_VALUE)
++	WIN_PYTHON_REF(self->win) = NULL;
++     Py_XDECREF(((PyObject *)(self->tabObject)));
++    PyObject_GC_Del((void *)(self));
++}
++
++    static int
++WindowTraverse(WindowObject *self, visitproc visit, void *arg)
++{
++    Py_VISIT(((PyObject *)(self->tabObject)));
++    return 0;
++}
++
++    static int
++WindowClear(WindowObject *self)
++{
++    Py_CLEAR(self->tabObject);
++    return 0;
++}
++
++    static win_T *
++get_firstwin(TabPageObject *tabObject)
++{
++    if (tabObject)
++    {
++	if (CheckTabPage(tabObject))
++	    return NULL;
++	/* For current tab window.c does not bother to set or update tp_firstwin
++	 */
++	else if (tabObject->tab == curtab)
++	    return firstwin;
++	else
++	    return tabObject->tab->tp_firstwin;
++    }
++    else
++	return firstwin;
++}
++static char *WindowAttrs[] = {
++    "buffer", "cursor", "height", "vars", "options", "number", "row", "col",
++    "tabpage", "valid",
++    NULL
++};
++
++    static PyObject *
++WindowDir(PyObject *self)
++{
++    return ObjectDir(self, WindowAttrs);
++}
++
++    static PyObject *
++WindowAttrValid(WindowObject *self, char *name)
++{
++    PyObject *r;
++
++    if (strcmp(name, "valid") != 0)
++	return NULL;
++
++    r = ((self->win == INVALID_WINDOW_VALUE) ? Py_False : Py_True);
++    Py_INCREF(r);
++    return r;
++}
++
++    static PyObject *
++WindowAttr(WindowObject *self, char *name)
++{
++    if (strcmp(name, "buffer") == 0)
++	return (PyObject *)BufferNew(self->win->w_buffer);
++    else if (strcmp(name, "cursor") == 0)
++    {
++	pos_T *pos = &self->win->w_cursor;
++
++	return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
++    }
++    else if (strcmp(name, "height") == 0)
++	return PyLong_FromLong((long)(self->win->w_height));
++#ifdef FEAT_WINDOWS
++    else if (strcmp(name, "row") == 0)
++	return PyLong_FromLong((long)(self->win->w_winrow));
++#endif
++#ifdef FEAT_VERTSPLIT
++    else if (strcmp(name, "width") == 0)
++	return PyLong_FromLong((long)(W_WIDTH(self->win)));
++    else if (strcmp(name, "col") == 0)
++	return PyLong_FromLong((long)(W_WINCOL(self->win)));
++#endif
++    else if (strcmp(name, "vars") == 0)
++	return NEW_DICTIONARY(self->win->w_vars);
++    else if (strcmp(name, "options") == 0)
++	return OptionsNew(SREQ_WIN, self->win, (checkfun) CheckWindow,
++			(PyObject *) self);
++    else if (strcmp(name, "number") == 0)
++    {
++	if (CheckTabPage(self->tabObject))
++	    return NULL;
++	return PyLong_FromLong((long)
++		get_win_number(self->win, get_firstwin(self->tabObject)));
++    }
++    else if (strcmp(name, "tabpage") == 0)
++    {
++	Py_INCREF(self->tabObject);
++	return (PyObject *)(self->tabObject);
++    }
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, WindowAttrs);
++    else
++	return NULL;
++}
++
++    static int
++WindowSetattr(WindowObject *self, char *name, PyObject *val)
++{
++    if (CheckWindow(self))
++	return -1;
++
++    if (strcmp(name, "buffer") == 0)
++    {
++	PyErr_SetString(PyExc_TypeError, _("readonly attribute"));
++	return -1;
++    }
++    else if (strcmp(name, "cursor") == 0)
++    {
++	long lnum;
++	long col;
++
++	if (!PyArg_Parse(val, "(ll)", &lnum, &col))
++	    return -1;
++
++	if (lnum <= 0 || lnum > self->win->w_buffer->b_ml.ml_line_count)
++	{
++	    PyErr_SetVim(_("cursor position outside buffer"));
++	    return -1;
++	}
++
++	/* Check for keyboard interrupts */
++	if (VimCheckInterrupt())
++	    return -1;
++
++	self->win->w_cursor.lnum = lnum;
++	self->win->w_cursor.col = col;
++#ifdef FEAT_VIRTUALEDIT
++	self->win->w_cursor.coladd = 0;
++#endif
++	/* When column is out of range silently correct it. */
++	check_cursor_col_win(self->win);
++
++	update_screen(VALID);
++	return 0;
++    }
++    else if (strcmp(name, "height") == 0)
++    {
++	int	height;
++	win_T	*savewin;
++
++	if (!PyArg_Parse(val, "i", &height))
++	    return -1;
++
++#ifdef FEAT_GUI
++	need_mouse_correct = TRUE;
++#endif
++	savewin = curwin;
++	curwin = self->win;
++
++	VimTryStart();
++	win_setheight(height);
++	curwin = savewin;
++	if (VimTryEnd())
++	    return -1;
++
++	return 0;
++    }
++#ifdef FEAT_VERTSPLIT
++    else if (strcmp(name, "width") == 0)
++    {
++	int	width;
++	win_T	*savewin;
++
++	if (!PyArg_Parse(val, "i", &width))
++	    return -1;
++
++#ifdef FEAT_GUI
++	need_mouse_correct = TRUE;
++#endif
++	savewin = curwin;
++	curwin = self->win;
++
++	VimTryStart();
++	win_setwidth(width);
++	curwin = savewin;
++	if (VimTryEnd())
++	    return -1;
++
++	return 0;
++    }
++#endif
++    else
++    {
++	PyErr_SetString(PyExc_AttributeError, name);
++	return -1;
++    }
++}
++
++    static PyObject *
++WindowRepr(WindowObject *self)
++{
++    if (self->win == INVALID_WINDOW_VALUE)
++	return PyString_FromFormat("<window object (deleted) at %p>", (self));
++    else
++    {
++	int	w = get_win_number(self->win, firstwin);
++
++	if (w == 0)
++	    return PyString_FromFormat("<window object (unknown) at %p>",
++								      (self));
++	else
++	    return PyString_FromFormat("<window %d>", w - 1);
++    }
++}
++
++static struct PyMethodDef WindowMethods[] = {
++    /* name,	    function,			calling,	documentation */
++    {"__dir__",	    (PyCFunction)WindowDir,	METH_NOARGS,	""},
++    { NULL,	    NULL,			0,		NULL}
++};
++
++/*
++ * Window list object
++ */
++
++static PyTypeObject WinListType;
++static PySequenceMethods WinListAsSeq;
++
++typedef struct
++{
++    PyObject_HEAD
++    TabPageObject	*tabObject;
++} WinListObject;
++
++    static PyObject *
++WinListNew(TabPageObject *tabObject)
++{
++    WinListObject	*self;
++
++    self = PyObject_NEW(WinListObject, &WinListType);
++    self->tabObject = tabObject;
++    Py_INCREF(tabObject);
++
++    return (PyObject *)(self);
++}
++
++    static void
++WinListDestructor(WinListObject *self)
++{
++    TabPageObject	*tabObject = self->tabObject;
++
++    if (tabObject)
++    {
++	Py_DECREF((PyObject *)(tabObject));
++    }
++
++    DESTRUCTOR_FINISH(self);
++}
++
++    static PyInt
++WinListLength(WinListObject *self)
++{
++    win_T	*w;
++    PyInt	n = 0;
++
++    if (!(w = get_firstwin(self->tabObject)))
++	return -1;
++
++    while (w != NULL)
++    {
++	++n;
++	w = W_NEXT(w);
++    }
++
++    return n;
++}
++
++    static PyObject *
++WinListItem(WinListObject *self, PyInt n)
++{
++    win_T *w;
++
++    if (!(w = get_firstwin(self->tabObject)))
++	return NULL;
++
++    for (; w != NULL; w = W_NEXT(w), --n)
++	if (n == 0)
++	    return WindowNew(w, self->tabObject? self->tabObject->tab: curtab);
++
++    PyErr_SetString(PyExc_IndexError, _("no such window"));
++    return NULL;
++}
++
++/* Convert a Python string into a Vim line.
++ *
++ * The result is in allocated memory. All internal nulls are replaced by
++ * newline characters. It is an error for the string to contain newline
++ * characters.
++ *
++ * On errors, the Python exception data is set, and NULL is returned.
++ */
++    static char *
++StringToLine(PyObject *obj)
++{
++    const char *str;
++    char *save;
++    PyObject *bytes;
++    PyInt len;
++    PyInt i;
++    char *p;
++
++    if (obj == NULL || !PyString_Check(obj))
++    {
++	PyErr_BadArgument();
++	return NULL;
++    }
++
++    bytes = PyString_AsBytes(obj);  /* for Python 2 this does nothing */
++    str = PyString_AsString(bytes);
++    len = PyString_Size(bytes);
++
++    /*
++     * Error checking: String must not contain newlines, as we
++     * are replacing a single line, and we must replace it with
++     * a single line.
++     * A trailing newline is removed, so that append(f.readlines()) works.
++     */
++    p = memchr(str, '\n', len);
++    if (p != NULL)
++    {
++	if (p == str + len - 1)
++	    --len;
++	else
++	{
++	    PyErr_SetVim(_("string cannot contain newlines"));
++	    return NULL;
++	}
++    }
++
++    /* Create a copy of the string, with internal nulls replaced by
++     * newline characters, as is the vim convention.
++     */
++    save = (char *)alloc((unsigned)(len+1));
++    if (save == NULL)
++    {
++	PyErr_NoMemory();
++	return NULL;
++    }
++
++    for (i = 0; i < len; ++i)
++    {
++	if (str[i] == '\0')
++	    save[i] = '\n';
++	else
++	    save[i] = str[i];
++    }
++
++    save[i] = '\0';
++    PyString_FreeBytes(bytes);  /* Python 2 does nothing here */
++
++    return save;
++}
++
++/* Get a line from the specified buffer. The line number is
++ * in Vim format (1-based). The line is returned as a Python
++ * string object.
++ */
++    static PyObject *
++GetBufferLine(buf_T *buf, PyInt n)
++{
++    return LineToString((char *)ml_get_buf(buf, (linenr_T)n, FALSE));
++}
++
++
++/* Get a list of lines from the specified buffer. The line numbers
++ * are in Vim format (1-based). The range is from lo up to, but not
++ * including, hi. The list is returned as a Python list of string objects.
++ */
++    static PyObject *
++GetBufferLineList(buf_T *buf, PyInt lo, PyInt hi)
++{
++    PyInt i;
++    PyInt n = hi - lo;
++    PyObject *list = PyList_New(n);
++
++    if (list == NULL)
++	return NULL;
++
++    for (i = 0; i < n; ++i)
++    {
++	PyObject *str = LineToString((char *)ml_get_buf(buf, (linenr_T)(lo+i), FALSE));
++
++	/* Error check - was the Python string creation OK? */
++	if (str == NULL)
++	{
++	    Py_DECREF(list);
++	    return NULL;
++	}
++
++	/* Set the list item */
++	if (PyList_SetItem(list, i, str))
++	{
++	    Py_DECREF(str);
++	    Py_DECREF(list);
++	    return NULL;
++	}
++    }
++
++    /* The ownership of the Python list is passed to the caller (ie,
++     * the caller should Py_DECREF() the object when it is finished
++     * with it).
++     */
++
++    return list;
++}
++
++/*
++ * Check if deleting lines made the cursor position invalid.
++ * Changed the lines from "lo" to "hi" and added "extra" lines (negative if
++ * deleted).
++ */
++    static void
++py_fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
++{
++    if (curwin->w_cursor.lnum >= lo)
++    {
++	/* Adjust the cursor position if it's in/after the changed
++	 * lines. */
++	if (curwin->w_cursor.lnum >= hi)
++	{
++	    curwin->w_cursor.lnum += extra;
++	    check_cursor_col();
++	}
++	else if (extra < 0)
++	{
++	    curwin->w_cursor.lnum = lo;
++	    check_cursor();
++	}
++	else
++	    check_cursor_col();
++	changed_cline_bef_curs();
++    }
++    invalidate_botline();
++}
++
++/*
++ * Replace a line in the specified buffer. The line number is
++ * in Vim format (1-based). The replacement line is given as
++ * a Python string object. The object is checked for validity
++ * and correct format. Errors are returned as a value of FAIL.
++ * The return value is OK on success.
++ * If OK is returned and len_change is not NULL, *len_change
++ * is set to the change in the buffer length.
++ */
++    static int
++SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
++{
++    /* First of all, we check the type of the supplied Python object.
++     * There are three cases:
++     *	  1. NULL, or None - this is a deletion.
++     *	  2. A string	   - this is a replacement.
++     *	  3. Anything else - this is an error.
++     */
++    if (line == Py_None || line == NULL)
++    {
++	buf_T *savebuf;
++
++	PyErr_Clear();
++	switch_buffer(&savebuf, buf);
++
++	VimTryStart();
++
++	if (u_savedel((linenr_T)n, 1L) == FAIL)
++	    PyErr_SetVim(_("cannot save undo information"));
++	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
++	    PyErr_SetVim(_("cannot delete line"));
++	else
++	{
++	    if (buf == savebuf)
++		py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
++	    deleted_lines_mark((linenr_T)n, 1L);
++	}
++
++	restore_buffer(savebuf);
++
++	if (VimTryEnd())
++	    return FAIL;
++
++	if (len_change)
++	    *len_change = -1;
++
++	return OK;
++    }
++    else if (PyString_Check(line))
++    {
++	char *save = StringToLine(line);
++	buf_T *savebuf;
++
++	if (save == NULL)
++	    return FAIL;
++
++	VimTryStart();
++
++	/* We do not need to free "save" if ml_replace() consumes it. */
++	PyErr_Clear();
++	switch_buffer(&savebuf, buf);
++
++	if (u_savesub((linenr_T)n) == FAIL)
++	{
++	    PyErr_SetVim(_("cannot save undo information"));
++	    vim_free(save);
++	}
++	else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
++	{
++	    PyErr_SetVim(_("cannot replace line"));
++	    vim_free(save);
++	}
++	else
++	    changed_bytes((linenr_T)n, 0);
++
++	restore_buffer(savebuf);
++
++	/* Check that the cursor is not beyond the end of the line now. */
++	if (buf == savebuf)
++	    check_cursor_col();
++
++	if (VimTryEnd())
++	    return FAIL;
++
++	if (len_change)
++	    *len_change = 0;
++
++	return OK;
++    }
++    else
++    {
++	PyErr_BadArgument();
++	return FAIL;
++    }
++}
++
++/* Replace a range of lines in the specified buffer. The line numbers are in
++ * Vim format (1-based). The range is from lo up to, but not including, hi.
++ * The replacement lines are given as a Python list of string objects. The
++ * list is checked for validity and correct format. Errors are returned as a
++ * value of FAIL.  The return value is OK on success.
++ * If OK is returned and len_change is not NULL, *len_change
++ * is set to the change in the buffer length.
++ */
++    static int
++SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
++{
++    /* First of all, we check the type of the supplied Python object.
++     * There are three cases:
++     *	  1. NULL, or None - this is a deletion.
++     *	  2. A list	   - this is a replacement.
++     *	  3. Anything else - this is an error.
++     */
++    if (list == Py_None || list == NULL)
++    {
++	PyInt	i;
++	PyInt	n = (int)(hi - lo);
++	buf_T	*savebuf;
++
++	PyErr_Clear();
++	VimTryStart();
++	switch_buffer(&savebuf, buf);
++
++	if (u_savedel((linenr_T)lo, (long)n) == FAIL)
++	    PyErr_SetVim(_("cannot save undo information"));
++	else
++	{
++	    for (i = 0; i < n; ++i)
++	    {
++		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
++		{
++		    PyErr_SetVim(_("cannot delete line"));
++		    break;
++		}
++	    }
++	    if (buf == savebuf)
++		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
++	    deleted_lines_mark((linenr_T)lo, (long)i);
++	}
++
++	restore_buffer(savebuf);
++
++	if (VimTryEnd())
++	    return FAIL;
++
++	if (len_change)
++	    *len_change = -n;
++
++	return OK;
++    }
++    else if (PyList_Check(list))
++    {
++	PyInt	i;
++	PyInt	new_len = PyList_Size(list);
++	PyInt	old_len = hi - lo;
++	PyInt	extra = 0;	/* lines added to text, can be negative */
++	char	**array;
++	buf_T	*savebuf;
++
++	if (new_len == 0)	/* avoid allocating zero bytes */
++	    array = NULL;
++	else
++	{
++	    array = PyMem_New(char *, new_len);
++	    if (array == NULL)
++	    {
++		PyErr_NoMemory();
++		return FAIL;
++	    }
++	}
++
++	for (i = 0; i < new_len; ++i)
++	{
++	    PyObject *line;
++
++	    if (!(line = PyList_GetItem(list, i)) ||
++		!(array[i] = StringToLine(line)))
++	    {
++		while (i)
++		    vim_free(array[--i]);
++		PyMem_Free(array);
++		return FAIL;
++	    }
++	}
++
++	VimTryStart();
++	PyErr_Clear();
++
++	/* START of region without "return".  Must call restore_buffer()! */
++	switch_buffer(&savebuf, buf);
++
++	if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
++	    PyErr_SetVim(_("cannot save undo information"));
++
++	/* If the size of the range is reducing (ie, new_len < old_len) we
++	 * need to delete some old_len. We do this at the start, by
++	 * repeatedly deleting line "lo".
++	 */
++	if (!PyErr_Occurred())
++	{
++	    for (i = 0; i < old_len - new_len; ++i)
++		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
++		{
++		    PyErr_SetVim(_("cannot delete line"));
++		    break;
++		}
++	    extra -= i;
++	}
++
++	/* For as long as possible, replace the existing old_len with the
++	 * new old_len. This is a more efficient operation, as it requires
++	 * less memory allocation and freeing.
++	 */
++	if (!PyErr_Occurred())
++	{
++	    for (i = 0; i < old_len && i < new_len; ++i)
++		if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
++								      == FAIL)
++		{
++		    PyErr_SetVim(_("cannot replace line"));
++		    break;
++		}
++	}
++	else
++	    i = 0;
++
++	/* Now we may need to insert the remaining new old_len. If we do, we
++	 * must free the strings as we finish with them (we can't pass the
++	 * responsibility to vim in this case).
++	 */
++	if (!PyErr_Occurred())
++	{
++	    while (i < new_len)
++	    {
++		if (ml_append((linenr_T)(lo + i - 1),
++					(char_u *)array[i], 0, FALSE) == FAIL)
++		{
++		    PyErr_SetVim(_("cannot insert line"));
++		    break;
++		}
++		vim_free(array[i]);
++		++i;
++		++extra;
++	    }
++	}
++
++	/* Free any left-over old_len, as a result of an error */
++	while (i < new_len)
++	{
++	    vim_free(array[i]);
++	    ++i;
++	}
++
++	/* Free the array of old_len. All of its contents have now
++	 * been dealt with (either freed, or the responsibility passed
++	 * to vim.
++	 */
++	PyMem_Free(array);
++
++	/* Adjust marks. Invalidate any which lie in the
++	 * changed range, and move any in the remainder of the buffer.
++	 */
++	mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
++						  (long)MAXLNUM, (long)extra);
++	changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
++
++	if (buf == savebuf)
++	    py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
++
++	/* END of region without "return". */
++	restore_buffer(savebuf);
++
++	if (VimTryEnd())
++	    return FAIL;
++
++	if (len_change)
++	    *len_change = new_len - old_len;
++
++	return OK;
++    }
++    else
++    {
++	PyErr_BadArgument();
++	return FAIL;
++    }
++}
++
++/* Insert a number of lines into the specified buffer after the specified line.
++ * The line number is in Vim format (1-based). The lines to be inserted are
++ * given as a Python list of string objects or as a single string. The lines
++ * to be added are checked for validity and correct format. Errors are
++ * returned as a value of FAIL.  The return value is OK on success.
++ * If OK is returned and len_change is not NULL, *len_change
++ * is set to the change in the buffer length.
++ */
++    static int
++InsertBufferLines(buf_T *buf, PyInt n, PyObject *lines, PyInt *len_change)
++{
++    /* First of all, we check the type of the supplied Python object.
++     * It must be a string or a list, or the call is in error.
++     */
++    if (PyString_Check(lines))
++    {
++	char	*str = StringToLine(lines);
++	buf_T	*savebuf;
++
++	if (str == NULL)
++	    return FAIL;
++
++	PyErr_Clear();
++	VimTryStart();
++	switch_buffer(&savebuf, buf);
++
++	if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL)
++	    PyErr_SetVim(_("cannot save undo information"));
++	else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL)
++	    PyErr_SetVim(_("cannot insert line"));
++	else
++	    appended_lines_mark((linenr_T)n, 1L);
++
++	vim_free(str);
++	restore_buffer(savebuf);
++	update_screen(VALID);
++
++	if (VimTryEnd())
++	    return FAIL;
++
++	if (len_change)
++	    *len_change = 1;
++
++	return OK;
++    }
++    else if (PyList_Check(lines))
++    {
++	PyInt	i;
++	PyInt	size = PyList_Size(lines);
++	char	**array;
++	buf_T	*savebuf;
++
++	array = PyMem_New(char *, size);
++	if (array == NULL)
++	{
++	    PyErr_NoMemory();
++	    return FAIL;
++	}
++
++	for (i = 0; i < size; ++i)
++	{
++	    PyObject *line;
++
++	    if (!(line = PyList_GetItem(lines, i)) ||
++		!(array[i] = StringToLine(line)))
++	    {
++		while (i)
++		    vim_free(array[--i]);
++		PyMem_Free(array);
++		return FAIL;
++	    }
++	}
++
++	PyErr_Clear();
++	VimTryStart();
++	switch_buffer(&savebuf, buf);
++
++	if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL)
++	    PyErr_SetVim(_("cannot save undo information"));
++	else
++	{
++	    for (i = 0; i < size; ++i)
++	    {
++		if (ml_append((linenr_T)(n + i),
++					(char_u *)array[i], 0, FALSE) == FAIL)
++		{
++		    PyErr_SetVim(_("cannot insert line"));
++
++		    /* Free the rest of the lines */
++		    while (i < size)
++			vim_free(array[i++]);
++
++		    break;
++		}
++		vim_free(array[i]);
++	    }
++	    if (i > 0)
++		appended_lines_mark((linenr_T)n, (long)i);
++	}
++
++	/* Free the array of lines. All of its contents have now
++	 * been freed.
++	 */
++	PyMem_Free(array);
++
++	restore_buffer(savebuf);
++	update_screen(VALID);
++
++	if (VimTryEnd())
++	    return FAIL;
++
++	if (len_change)
++	    *len_change = size;
++
++	return OK;
++    }
++    else
++    {
++	PyErr_BadArgument();
++	return FAIL;
++    }
++}
++
++/*
++ * Common routines for buffers and line ranges
++ * -------------------------------------------
++ */
++
++typedef struct
++{
++    PyObject_HEAD
++    buf_T *buf;
++} BufferObject;
++
++    static int
++CheckBuffer(BufferObject *self)
++{
++    if (self->buf == INVALID_BUFFER_VALUE)
++    {
++	PyErr_SetVim(_("attempt to refer to deleted buffer"));
++	return -1;
++    }
++
++    return 0;
++}
++
++    static PyObject *
++RBItem(BufferObject *self, PyInt n, PyInt start, PyInt end)
++{
++    if (CheckBuffer(self))
++	return NULL;
++
++    if (end == -1)
++	end = self->buf->b_ml.ml_line_count;
++
++    if (n < 0)
++	n += end - start + 1;
++
++    if (n < 0 || n > end - start)
++    {
++	PyErr_SetString(PyExc_IndexError, _("line number out of range"));
++	return NULL;
++    }
++
++    return GetBufferLine(self->buf, n+start);
++}
++
++    static PyObject *
++RBSlice(BufferObject *self, PyInt lo, PyInt hi, PyInt start, PyInt end)
++{
++    PyInt size;
++
++    if (CheckBuffer(self))
++	return NULL;
++
++    if (end == -1)
++	end = self->buf->b_ml.ml_line_count;
++
++    size = end - start + 1;
++
++    if (lo < 0)
++	lo = 0;
++    else if (lo > size)
++	lo = size;
++    if (hi < 0)
++	hi = 0;
++    if (hi < lo)
++	hi = lo;
++    else if (hi > size)
++	hi = size;
++
++    return GetBufferLineList(self->buf, lo+start, hi+start);
++}
++
++    static PyInt
++RBAsItem(BufferObject *self, PyInt n, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
++{
++    PyInt len_change;
++
++    if (CheckBuffer(self))
++	return -1;
++
++    if (end == -1)
++	end = self->buf->b_ml.ml_line_count;
++
++    if (n < 0)
++	n += end - start + 1;
++
++    if (n < 0 || n > end - start)
++    {
++	PyErr_SetString(PyExc_IndexError, _("line number out of range"));
++	return -1;
++    }
++
++    if (SetBufferLine(self->buf, n+start, val, &len_change) == FAIL)
++	return -1;
++
++    if (new_end)
++	*new_end = end + len_change;
++
++    return 0;
++}
++
++    static PyInt
++RBAsSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
++{
++    PyInt size;
++    PyInt len_change;
++
++    /* Self must be a valid buffer */
++    if (CheckBuffer(self))
++	return -1;
++
++    if (end == -1)
++	end = self->buf->b_ml.ml_line_count;
++
++    /* Sort out the slice range */
++    size = end - start + 1;
++
++    if (lo < 0)
++	lo = 0;
++    else if (lo > size)
++	lo = size;
++    if (hi < 0)
++	hi = 0;
++    if (hi < lo)
++	hi = lo;
++    else if (hi > size)
++	hi = size;
++
++    if (SetBufferLineList(self->buf, lo + start, hi + start,
++						    val, &len_change) == FAIL)
++	return -1;
++
++    if (new_end)
++	*new_end = end + len_change;
++
++    return 0;
++}
++
++
++    static PyObject *
++RBAppend(BufferObject *self, PyObject *args, PyInt start, PyInt end, PyInt *new_end)
++{
++    PyObject *lines;
++    PyInt len_change;
++    PyInt max;
++    PyInt n;
++
++    if (CheckBuffer(self))
++	return NULL;
++
++    if (end == -1)
++	end = self->buf->b_ml.ml_line_count;
++
++    max = n = end - start + 1;
++
++    if (!PyArg_ParseTuple(args, "O|n", &lines, &n))
++	return NULL;
++
++    if (n < 0 || n > max)
++    {
++	PyErr_SetString(PyExc_IndexError, _("line number out of range"));
++	return NULL;
++    }
++
++    if (InsertBufferLines(self->buf, n + start - 1, lines, &len_change) == FAIL)
++	return NULL;
++
++    if (new_end)
++	*new_end = end + len_change;
++
++    Py_INCREF(Py_None);
++    return Py_None;
++}
++
++/* Range object
++ */
++
++static PyTypeObject RangeType;
++static PySequenceMethods RangeAsSeq;
++static PyMappingMethods RangeAsMapping;
++
++typedef struct
++{
++    PyObject_HEAD
++    BufferObject *buf;
++    PyInt start;
++    PyInt end;
++} RangeObject;
++
++    static PyObject *
++RangeNew(buf_T *buf, PyInt start, PyInt end)
++{
++    BufferObject *bufr;
++    RangeObject *self;
++    self = PyObject_GC_New(RangeObject, &RangeType);
++    if (self == NULL)
++	return NULL;
++
++    bufr = (BufferObject *)BufferNew(buf);
++    if (bufr == NULL)
++    {
++	Py_DECREF(self);
++	return NULL;
++    }
++    Py_INCREF(bufr);
++
++    self->buf = bufr;
++    self->start = start;
++    self->end = end;
++
++    return (PyObject *)(self);
++}
++
++    static void
++RangeDestructor(RangeObject *self)
++{
++    PyObject_GC_UnTrack((void *)(self));
++    Py_XDECREF(self->buf);
++    PyObject_GC_Del((void *)(self));
++}
++
++    static int
++RangeTraverse(RangeObject *self, visitproc visit, void *arg)
++{
++    Py_VISIT(((PyObject *)(self->buf)));
++    return 0;
++}
++
++    static int
++RangeClear(RangeObject *self)
++{
++    Py_CLEAR(self->buf);
++    return 0;
++}
++
++    static PyInt
++RangeLength(RangeObject *self)
++{
++    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
++    if (CheckBuffer(self->buf))
++	return -1; /* ??? */
++
++    return (self->end - self->start + 1);
++}
++
++    static PyObject *
++RangeItem(RangeObject *self, PyInt n)
++{
++    return RBItem(self->buf, n, self->start, self->end);
++}
++
++    static PyObject *
++RangeSlice(RangeObject *self, PyInt lo, PyInt hi)
++{
++    return RBSlice(self->buf, lo, hi, self->start, self->end);
++}
++
++static char *RangeAttrs[] = {
++    "start", "end",
++    NULL
++};
++
++    static PyObject *
++RangeDir(PyObject *self)
++{
++    return ObjectDir(self, RangeAttrs);
++}
++
++    static PyObject *
++RangeAppend(RangeObject *self, PyObject *args)
++{
++    return RBAppend(self->buf, args, self->start, self->end, &self->end);
++}
++
++    static PyObject *
++RangeRepr(RangeObject *self)
++{
++    if (self->buf->buf == INVALID_BUFFER_VALUE)
++	return PyString_FromFormat("<range object (for deleted buffer) at %p>",
++				    (self));
++    else
++    {
++	char *name = (char *)self->buf->buf->b_fname;
++
++	if (name == NULL)
++	    name = "";
++
++	return PyString_FromFormat("<range %s (%d:%d)>",
++				    name, (int)self->start, (int)self->end);
++    }
++}
++
++static struct PyMethodDef RangeMethods[] = {
++    /* name,	function,			calling,	documentation */
++    {"append",	(PyCFunction)RangeAppend,	METH_VARARGS,	"Append data to the Vim range" },
++    {"__dir__",	(PyCFunction)RangeDir,		METH_NOARGS,	""},
++    { NULL,	NULL,				0,		NULL}
++};
++
++static PyTypeObject BufferType;
++static PySequenceMethods BufferAsSeq;
++static PyMappingMethods BufferAsMapping;
++
++    static PyObject *
++BufferNew(buf_T *buf)
++{
++    /* We need to handle deletion of buffers underneath us.
++     * If we add a "b_python*_ref" field to the buf_T structure,
++     * then we can get at it in buf_freeall() in vim. We then
++     * need to create only ONE Python object per buffer - if
++     * we try to create a second, just INCREF the existing one
++     * and return it. The (single) Python object referring to
++     * the buffer is stored in "b_python*_ref".
++     * Question: what to do on a buf_freeall(). We'll probably
++     * have to either delete the Python object (DECREF it to
++     * zero - a bad idea, as it leaves dangling refs!) or
++     * set the buf_T * value to an invalid value (-1?), which
++     * means we need checks in all access functions... Bah.
++     *
++     * Python2 and Python3 get different fields and different objects:
++     * b_python_ref and b_python3_ref fields respectively.
++     */
++
++    BufferObject *self;
++
++    if (BUF_PYTHON_REF(buf) != NULL)
++    {
++	self = BUF_PYTHON_REF(buf);
++	Py_INCREF(self);
++    }
++    else
++    {
++	self = PyObject_NEW(BufferObject, &BufferType);
++	if (self == NULL)
++	    return NULL;
++	self->buf = buf;
++	BUF_PYTHON_REF(buf) = self;
++    }
++
++    return (PyObject *)(self);
++}
++
++    static void
++BufferDestructor(BufferObject *self)
++{
++    if (self->buf && self->buf != INVALID_BUFFER_VALUE)
++	BUF_PYTHON_REF(self->buf) = NULL;
++
++    DESTRUCTOR_FINISH(self);
++}
++
++    static PyInt
++BufferLength(BufferObject *self)
++{
++    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
++    if (CheckBuffer(self))
++	return -1; /* ??? */
++
++    return (PyInt)(self->buf->b_ml.ml_line_count);
++}
++
++    static PyObject *
++BufferItem(BufferObject *self, PyInt n)
++{
++    return RBItem(self, n, 1, -1);
++}
++
++    static PyObject *
++BufferSlice(BufferObject *self, PyInt lo, PyInt hi)
++{
++    return RBSlice(self, lo, hi, 1, -1);
++}
++
++static char *BufferAttrs[] = {
++    "name", "number", "vars", "options", "valid",
++    NULL
++};
++
++    static PyObject *
++BufferDir(PyObject *self)
++{
++    return ObjectDir(self, BufferAttrs);
++}
++
++    static PyObject *
++BufferAttrValid(BufferObject *self, char *name)
++{
++    PyObject *r;
++
++    if (strcmp(name, "valid") != 0)
++	return NULL;
++
++    r = ((self->buf == INVALID_BUFFER_VALUE) ? Py_False : Py_True);
++    Py_INCREF(r);
++    return r;
++}
++
++    static PyObject *
++BufferAttr(BufferObject *self, char *name)
++{
++    if (strcmp(name, "name") == 0)
++	return PyString_FromString((self->buf->b_ffname == NULL
++				    ? "" : (char *) self->buf->b_ffname));
++    else if (strcmp(name, "number") == 0)
++	return Py_BuildValue(Py_ssize_t_fmt, self->buf->b_fnum);
++    else if (strcmp(name, "vars") == 0)
++	return NEW_DICTIONARY(self->buf->b_vars);
++    else if (strcmp(name, "options") == 0)
++	return OptionsNew(SREQ_BUF, self->buf, (checkfun) CheckBuffer,
++			(PyObject *) self);
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, BufferAttrs);
++    else
++	return NULL;
++}
++
++    static int
++BufferSetattr(BufferObject *self, char *name, PyObject *valObject)
++{
++    if (CheckBuffer(self))
++	return -1;
++
++    if (strcmp(name, "name") == 0)
++    {
++	char_u	*val;
++	aco_save_T	aco;
++	int	r;
++	PyObject	*todecref;
++
++	if (!(val = StringToChars(valObject, &todecref)))
++	    return -1;
++
++	VimTryStart();
++	/* Using aucmd_*: autocommands will be executed by rename_buffer */
++	aucmd_prepbuf(&aco, self->buf);
++	r = rename_buffer(val);
++	aucmd_restbuf(&aco);
++	Py_XDECREF(todecref);
++	if (VimTryEnd())
++	    return -1;
++
++	if (r == FAIL)
++	{
++	    PyErr_SetVim(_("failed to rename buffer"));
++	    return -1;
++	}
++	return 0;
++    }
++    else
++    {
++	PyErr_SetString(PyExc_AttributeError, name);
++	return -1;
++    }
++}
++
++    static PyObject *
++BufferAppend(BufferObject *self, PyObject *args)
++{
++    return RBAppend(self, args, 1, -1, NULL);
++}
++
++    static PyObject *
++BufferMark(BufferObject *self, PyObject *args)
++{
++    pos_T	*posp;
++    char	*pmark;
++    char	mark;
++    buf_T	*savebuf;
++
++    if (CheckBuffer(self))
++	return NULL;
++
++    if (!PyArg_ParseTuple(args, "s", &pmark))
++	return NULL;
++
++    if (STRLEN(pmark) != 1)
++    {
++	PyErr_SetString(PyExc_ValueError,
++		_("mark name must be a single character"));
++	return NULL;
++    }
++
++    mark = *pmark;
++    VimTryStart();
++    switch_buffer(&savebuf, self->buf);
++    posp = getmark(mark, FALSE);
++    restore_buffer(savebuf);
++    if (VimTryEnd())
++	return NULL;
++
++    if (posp == NULL)
++    {
++	PyErr_SetVim(_("invalid mark name"));
++	return NULL;
++    }
++
++    if (posp->lnum <= 0)
++    {
++	/* Or raise an error? */
++	Py_INCREF(Py_None);
++	return Py_None;
++    }
++
++    return Py_BuildValue("(ll)", (long)(posp->lnum), (long)(posp->col));
++}
++
++    static PyObject *
++BufferRange(BufferObject *self, PyObject *args)
++{
++    PyInt start;
++    PyInt end;
++
++    if (CheckBuffer(self))
++	return NULL;
++
++    if (!PyArg_ParseTuple(args, "nn", &start, &end))
++	return NULL;
++
++    return RangeNew(self->buf, start, end);
++}
++
++    static PyObject *
++BufferRepr(BufferObject *self)
++{
++    if (self->buf == INVALID_BUFFER_VALUE)
++	return PyString_FromFormat("<buffer object (deleted) at %p>", self);
++    else
++    {
++	char	*name = (char *)self->buf->b_fname;
++
++	if (name == NULL)
++	    name = "";
++
++	return PyString_FromFormat("<buffer %s>", name);
++    }
++}
++
++static struct PyMethodDef BufferMethods[] = {
++    /* name,	    function,			calling,	documentation */
++    {"append",	    (PyCFunction)BufferAppend,	METH_VARARGS,	"Append data to Vim buffer" },
++    {"mark",	    (PyCFunction)BufferMark,	METH_VARARGS,	"Return (row,col) representing position of named mark" },
++    {"range",	    (PyCFunction)BufferRange,	METH_VARARGS,	"Return a range object which represents the part of the given buffer between line numbers s and e" },
++    {"__dir__",	    (PyCFunction)BufferDir,	METH_NOARGS,	""},
++    { NULL,	    NULL,			0,		NULL}
++};
++
++/*
++ * Buffer list object - Implementation
++ */
++
++static PyTypeObject BufMapType;
++
++typedef struct
++{
++    PyObject_HEAD
++} BufMapObject;
++
++    static PyInt
++BufMapLength(PyObject *self UNUSED)
++{
++    buf_T	*b = firstbuf;
++    PyInt	n = 0;
++
++    while (b)
++    {
++	++n;
++	b = b->b_next;
++    }
++
++    return n;
++}
++
++    static PyObject *
++BufMapItem(PyObject *self UNUSED, PyObject *keyObject)
++{
++    buf_T	*b;
++    int		bnr;
++
++#if PY_MAJOR_VERSION < 3
++    if (PyInt_Check(keyObject))
++	bnr = PyInt_AsLong(keyObject);
++    else
++#endif
++    if (PyLong_Check(keyObject))
++	bnr = PyLong_AsLong(keyObject);
++    else
++    {
++	PyErr_SetString(PyExc_TypeError, _("key must be integer"));
++	return NULL;
++    }
++
++    b = buflist_findnr(bnr);
++
++    if (b)
++	return BufferNew(b);
++    else
++    {
++	PyErr_SetObject(PyExc_KeyError, keyObject);
++	return NULL;
++    }
++}
++
++    static void
++BufMapIterDestruct(PyObject *buffer)
++{
++    /* Iteration was stopped before all buffers were processed */
++    if (buffer)
++    {
++	Py_DECREF(buffer);
++    }
++}
++
++    static int
++BufMapIterTraverse(PyObject *buffer, visitproc visit, void *arg)
++{
++    if (buffer)
++	Py_VISIT(buffer);
++    return 0;
++}
++
++    static int
++BufMapIterClear(PyObject **buffer)
++{
++    if (*buffer)
++	Py_CLEAR(*buffer);
++    return 0;
++}
++
++    static PyObject *
++BufMapIterNext(PyObject **buffer)
++{
++    PyObject	*next;
++    PyObject	*r;
++
++    if (!*buffer)
++	return NULL;
++
++    r = *buffer;
++
++    if (CheckBuffer((BufferObject *)(r)))
++    {
++	*buffer = NULL;
++	return NULL;
++    }
++
++    if (!((BufferObject *)(r))->buf->b_next)
++	next = NULL;
++    else if (!(next = BufferNew(((BufferObject *)(r))->buf->b_next)))
++	return NULL;
++    *buffer = next;
++    /* Do not increment reference: we no longer hold it (decref), but whoever
++     * on other side will hold (incref). Decref+incref = nothing. */
++    return r;
++}
++
++    static PyObject *
++BufMapIter(PyObject *self UNUSED)
++{
++    PyObject *buffer;
++
++    buffer = BufferNew(firstbuf);
++    return IterNew(buffer,
++	    (destructorfun) BufMapIterDestruct, (nextfun) BufMapIterNext,
++	    (traversefun) BufMapIterTraverse, (clearfun) BufMapIterClear);
++}
++
++static PyMappingMethods BufMapAsMapping = {
++    (lenfunc)       BufMapLength,
++    (binaryfunc)    BufMapItem,
++    (objobjargproc) 0,
++};
++
++/* Current items object
++ */
++
++static char *CurrentAttrs[] = {
++    "buffer", "window", "line", "range", "tabpage",
++    NULL
++};
++
++    static PyObject *
++CurrentDir(PyObject *self)
++{
++    return ObjectDir(self, CurrentAttrs);
++}
++
++    static PyObject *
++CurrentGetattr(PyObject *self UNUSED, char *name)
++{
++    if (strcmp(name, "buffer") == 0)
++	return (PyObject *)BufferNew(curbuf);
++    else if (strcmp(name, "window") == 0)
++	return (PyObject *)WindowNew(curwin, curtab);
++    else if (strcmp(name, "tabpage") == 0)
++	return (PyObject *)TabPageNew(curtab);
++    else if (strcmp(name, "line") == 0)
++	return GetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum);
++    else if (strcmp(name, "range") == 0)
++	return RangeNew(curbuf, RangeStart, RangeEnd);
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, CurrentAttrs);
++    else
++#if PY_MAJOR_VERSION < 3
++	return Py_FindMethod(WindowMethods, self, name);
++#else
++	return NULL;
++#endif
++}
++
++    static int
++CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *value)
++{
++    if (strcmp(name, "line") == 0)
++    {
++	if (SetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum, value, NULL) == FAIL)
++	    return -1;
++
++	return 0;
++    }
++    else if (strcmp(name, "buffer") == 0)
++    {
++	int count;
++
++	if (value->ob_type != &BufferType)
++	{
++	    PyErr_SetString(PyExc_TypeError, _("expected vim.Buffer object"));
++	    return -1;
++	}
++
++	if (CheckBuffer((BufferObject *)(value)))
++	    return -1;
++	count = ((BufferObject *)(value))->buf->b_fnum;
++
++	VimTryStart();
++	if (do_buffer(DOBUF_GOTO, DOBUF_FIRST, FORWARD, count, 0) == FAIL)
++	{
++	    if (VimTryEnd())
++		return -1;
++	    PyErr_SetVim(_("failed to switch to given buffer"));
++	    return -1;
++	}
++
++	return VimTryEnd();
++    }
++    else if (strcmp(name, "window") == 0)
++    {
++	int count;
++
++	if (value->ob_type != &WindowType)
++	{
++	    PyErr_SetString(PyExc_TypeError, _("expected vim.Window object"));
++	    return -1;
++	}
++
++	if (CheckWindow((WindowObject *)(value)))
++	    return -1;
++	count = get_win_number(((WindowObject *)(value))->win, firstwin);
++
++	if (!count)
++	{
++	    PyErr_SetString(PyExc_ValueError,
++		    _("failed to find window in the current tab page"));
++	    return -1;
++	}
++
++	VimTryStart();
++	win_goto(((WindowObject *)(value))->win);
++	if (((WindowObject *)(value))->win != curwin)
++	{
++	    if (VimTryEnd())
++		return -1;
++	    PyErr_SetString(PyExc_RuntimeError,
++		    _("did not switch to the specified window"));
++	    return -1;
++	}
++
++	return VimTryEnd();
++    }
++    else if (strcmp(name, "tabpage") == 0)
++    {
++	if (value->ob_type != &TabPageType)
++	{
++	    PyErr_SetString(PyExc_TypeError, _("expected vim.TabPage object"));
++	    return -1;
++	}
++
++	if (CheckTabPage((TabPageObject *)(value)))
++	    return -1;
++
++	VimTryStart();
++	goto_tabpage_tp(((TabPageObject *)(value))->tab, TRUE, TRUE);
++	if (((TabPageObject *)(value))->tab != curtab)
++	{
++	    if (VimTryEnd())
++		return -1;
++	    PyErr_SetString(PyExc_RuntimeError,
++		    _("did not switch to the specified tab page"));
++	    return -1;
++	}
++
++	return VimTryEnd();
++    }
++    else
++    {
++	PyErr_SetString(PyExc_AttributeError, name);
++	return -1;
++    }
++}
++
++static struct PyMethodDef CurrentMethods[] = {
++    /* name,	    function,			calling,	documentation */
++    {"__dir__",	    (PyCFunction)CurrentDir,	METH_NOARGS,	""},
++    { NULL,	    NULL,			0,		NULL}
++};
++
++    static void
++init_range_cmd(exarg_T *eap)
++{
++    RangeStart = eap->line1;
++    RangeEnd = eap->line2;
++}
++
++    static void
++init_range_eval(typval_T *rettv UNUSED)
++{
++    RangeStart = (PyInt) curwin->w_cursor.lnum;
++    RangeEnd = RangeStart;
++}
++
++    static void
++run_cmd(const char *cmd, void *arg UNUSED
++#ifdef PY_CAN_RECURSE
++	, PyGILState_STATE *pygilstate UNUSED
++#endif
++	)
++{
++    PyRun_SimpleString((char *) cmd);
++}
++
++static const char	*code_hdr = "def " DOPY_FUNC "(line, linenr):\n ";
++static int		code_hdr_len = 30;
++
++    static void
++run_do(const char *cmd, void *arg UNUSED
++#ifdef PY_CAN_RECURSE
++	, PyGILState_STATE *pygilstate
++#endif
++	)
++{
++    PyInt	lnum;
++    size_t	len;
++    char	*code;
++    int		status;
++    PyObject	*pyfunc, *pymain;
++
++    if (u_save((linenr_T)RangeStart - 1, (linenr_T)RangeEnd + 1) != OK)
++    {
++	EMSG(_("cannot save undo information"));
++	return;
++    }
++
++    len = code_hdr_len + STRLEN(cmd);
++    code = PyMem_New(char, len + 1);
++    memcpy(code, code_hdr, code_hdr_len);
++    STRCPY(code + code_hdr_len, cmd);
++    status = PyRun_SimpleString(code);
++    PyMem_Free(code);
++
++    if (status)
++    {
++	EMSG(_("failed to run the code"));
++	return;
++    }
++
++    status = 0;
++    pymain = PyImport_AddModule("__main__");
++    pyfunc = PyObject_GetAttrString(pymain, DOPY_FUNC);
++#ifdef PY_CAN_RECURSE
++    PyGILState_Release(*pygilstate);
++#endif
++
++    for (lnum = RangeStart; lnum <= RangeEnd; ++lnum)
++    {
++	PyObject	*line, *linenr, *ret;
++
++#ifdef PY_CAN_RECURSE
++	*pygilstate = PyGILState_Ensure();
++#endif
++	if (!(line = GetBufferLine(curbuf, lnum)))
++	    goto err;
++	if (!(linenr = PyInt_FromLong((long) lnum)))
++	{
++	    Py_DECREF(line);
++	    goto err;
++	}
++	ret = PyObject_CallFunctionObjArgs(pyfunc, line, linenr, NULL);
++	Py_DECREF(line);
++	Py_DECREF(linenr);
++	if (!ret)
++	    goto err;
++
++	if (ret != Py_None)
++	    if (SetBufferLine(curbuf, lnum, ret, NULL) == FAIL)
++		goto err;
++
++	Py_XDECREF(ret);
++	PythonIO_Flush();
++#ifdef PY_CAN_RECURSE
++	PyGILState_Release(*pygilstate);
++#endif
++    }
++    goto out;
++err:
++#ifdef PY_CAN_RECURSE
++    *pygilstate = PyGILState_Ensure();
++#endif
++    PyErr_PrintEx(0);
++    PythonIO_Flush();
++    status = 1;
++out:
++#ifdef PY_CAN_RECURSE
++    if (!status)
++	*pygilstate = PyGILState_Ensure();
++#endif
++    Py_DECREF(pyfunc);
++    PyObject_SetAttrString(pymain, DOPY_FUNC, NULL);
++    if (status)
++	return;
++    check_cursor();
++    update_curbuf(NOT_VALID);
++}
++
++    static void
++run_eval(const char *cmd, typval_T *rettv
++#ifdef PY_CAN_RECURSE
++	, PyGILState_STATE *pygilstate UNUSED
++#endif
++	)
++{
++    PyObject	*r;
+ 
+-    return list;
++    r = PyRun_String((char *) cmd, Py_eval_input, globals, globals);
++    if (r == NULL)
++    {
++	if (PyErr_Occurred() && !msg_silent)
++	    PyErr_PrintEx(0);
++	EMSG(_("E858: Eval did not return a valid python object"));
++    }
++    else
++    {
++	if (ConvertFromPyObject(r, rettv) == -1)
++	    EMSG(_("E859: Failed to convert returned python object to vim value"));
++	Py_DECREF(r);
++    }
++    PyErr_Clear();
+ }
+ 
+-/*
+- * Check if deleting lines made the cursor position invalid.
+- * Changed the lines from "lo" to "hi" and added "extra" lines (negative if
+- * deleted).
+- */
+     static void
+-py_fix_cursor(linenr_T lo, linenr_T hi, linenr_T extra)
++set_ref_in_py(const int copyID)
+ {
+-    if (curwin->w_cursor.lnum >= lo)
+-    {
+-	/* Adjust the cursor position if it's in/after the changed
+-	 * lines. */
+-	if (curwin->w_cursor.lnum >= hi)
++    pylinkedlist_T	*cur;
++    dict_T	*dd;
++    list_T	*ll;
++
++    if (lastdict != NULL)
++	for(cur = lastdict ; cur != NULL ; cur = cur->pll_prev)
+ 	{
+-	    curwin->w_cursor.lnum += extra;
+-	    check_cursor_col();
++	    dd = ((DictionaryObject *) (cur->pll_obj))->dict;
++	    if (dd->dv_copyID != copyID)
++	    {
++		dd->dv_copyID = copyID;
++		set_ref_in_ht(&dd->dv_hashtab, copyID);
++	    }
+ 	}
+-	else if (extra < 0)
++
++    if (lastlist != NULL)
++	for(cur = lastlist ; cur != NULL ; cur = cur->pll_prev)
+ 	{
+-	    curwin->w_cursor.lnum = lo;
+-	    check_cursor();
++	    ll = ((ListObject *) (cur->pll_obj))->list;
++	    if (ll->lv_copyID != copyID)
++	    {
++		ll->lv_copyID = copyID;
++		set_ref_in_list(ll, copyID);
++	    }
+ 	}
+-	else
+-	    check_cursor_col();
+-	changed_cline_bef_curs();
+-    }
+-    invalidate_botline();
+ }
+ 
+-/* Replace a line in the specified buffer. The line number is
+- * in Vim format (1-based). The replacement line is given as
+- * a Python string object. The object is checked for validity
+- * and correct format. Errors are returned as a value of FAIL.
+- * The return value is OK on success.
+- * If OK is returned and len_change is not NULL, *len_change
+- * is set to the change in the buffer length.
+- */
+     static int
+-SetBufferLine(buf_T *buf, PyInt n, PyObject *line, PyInt *len_change)
++set_string_copy(char_u *str, typval_T *tv)
+ {
+-    /* First of all, we check the thpe of the supplied Python object.
+-     * There are three cases:
+-     *	  1. NULL, or None - this is a deletion.
+-     *	  2. A string	   - this is a replacement.
+-     *	  3. Anything else - this is an error.
+-     */
+-    if (line == Py_None || line == NULL)
++    tv->vval.v_string = vim_strsave(str);
++    if (tv->vval.v_string == NULL)
+     {
+-	buf_T *savebuf = curbuf;
+-
+-	PyErr_Clear();
+-	curbuf = buf;
+-
+-	if (u_savedel((linenr_T)n, 1L) == FAIL)
+-	    PyErr_SetVim(_("cannot save undo information"));
+-	else if (ml_delete((linenr_T)n, FALSE) == FAIL)
+-	    PyErr_SetVim(_("cannot delete line"));
+-	else
+-	{
+-	    if (buf == curwin->w_buffer)
+-		py_fix_cursor((linenr_T)n, (linenr_T)n + 1, (linenr_T)-1);
+-	    deleted_lines_mark((linenr_T)n, 1L);
+-	}
++	PyErr_NoMemory();
++	return -1;
++    }
++    return 0;
++}
+ 
+-	curbuf = savebuf;
++    static int
++pydict_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
++{
++    dict_T	*dict;
++    char_u	*key;
++    dictitem_T	*di;
++    PyObject	*keyObject;
++    PyObject	*valObject;
++    Py_ssize_t	iter = 0;
+ 
+-	if (PyErr_Occurred() || VimErrorCheck())
+-	    return FAIL;
++    if (!(dict = py_dict_alloc()))
++	return -1;
+ 
+-	if (len_change)
+-	    *len_change = -1;
++    tv->v_type = VAR_DICT;
++    tv->vval.v_dict = dict;
+ 
+-	return OK;
+-    }
+-    else if (PyString_Check(line))
++    while (PyDict_Next(obj, &iter, &keyObject, &valObject))
+     {
+-	char *save = StringToLine(line);
+-	buf_T *savebuf = curbuf;
+-
+-	if (save == NULL)
+-	    return FAIL;
++	PyObject	*todecref = NULL;
+ 
+-	/* We do not need to free "save" if ml_replace() consumes it. */
+-	PyErr_Clear();
+-	curbuf = buf;
++	if (keyObject == NULL || valObject == NULL)
++	{
++	    dict_unref(dict);
++	    return -1;
++	}
+ 
+-	if (u_savesub((linenr_T)n) == FAIL)
++	if (!(key = StringToChars(keyObject, &todecref)))
+ 	{
+-	    PyErr_SetVim(_("cannot save undo information"));
+-	    vim_free(save);
++	    dict_unref(dict);
++	    return -1;
+ 	}
+-	else if (ml_replace((linenr_T)n, (char_u *)save, FALSE) == FAIL)
++
++	if (*key == NUL)
+ 	{
+-	    PyErr_SetVim(_("cannot replace line"));
+-	    vim_free(save);
++	    dict_unref(dict);
++	    Py_XDECREF(todecref);
++	    RAISE_NO_EMPTY_KEYS;
++	    return -1;
+ 	}
+-	else
+-	    changed_bytes((linenr_T)n, 0);
+ 
+-	curbuf = savebuf;
++	di = dictitem_alloc(key);
+ 
+-	/* Check that the cursor is not beyond the end of the line now. */
+-	if (buf == curwin->w_buffer)
+-	    check_cursor_col();
++	Py_XDECREF(todecref);
+ 
+-	if (PyErr_Occurred() || VimErrorCheck())
+-	    return FAIL;
++	if (di == NULL)
++	{
++	    PyErr_NoMemory();
++	    dict_unref(dict);
++	    return -1;
++	}
++	di->di_tv.v_lock = 0;
+ 
+-	if (len_change)
+-	    *len_change = 0;
++	if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
++	{
++	    vim_free(di);
++	    dict_unref(dict);
++	    return -1;
++	}
+ 
+-	return OK;
+-    }
+-    else
+-    {
+-	PyErr_BadArgument();
+-	return FAIL;
++	if (dict_add(dict, di) == FAIL)
++	{
++	    clear_tv(&di->di_tv);
++	    vim_free(di);
++	    dict_unref(dict);
++	    PyErr_SetVim(_("failed to add key to dictionary"));
++	    return -1;
++	}
+     }
+-}
+ 
++    --dict->dv_refcount;
++    return 0;
++}
+ 
+-/* Insert a number of lines into the specified buffer after the specifed line.
+- * The line number is in Vim format (1-based). The lines to be inserted are
+- * given as a Python list of string objects or as a single string. The lines
+- * to be added are checked for validity and correct format. Errors are
+- * returned as a value of FAIL.  The return value is OK on success.
+- * If OK is returned and len_change is not NULL, *len_change
+- * is set to the change in the buffer length.
+- */
+     static int
+-InsertBufferLines(buf_T *buf, PyInt n, PyObject *lines, PyInt *len_change)
++pymap_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+ {
+-    /* First of all, we check the type of the supplied Python object.
+-     * It must be a string or a list, or the call is in error.
+-     */
+-    if (PyString_Check(lines))
+-    {
+-	char	*str = StringToLine(lines);
+-	buf_T	*savebuf;
++    dict_T	*dict;
++    char_u	*key;
++    dictitem_T	*di;
++    PyObject	*list;
++    PyObject	*iterator;
++    PyObject	*keyObject;
++    PyObject	*valObject;
+ 
+-	if (str == NULL)
+-	    return FAIL;
++    if (!(dict = py_dict_alloc()))
++	return -1;
+ 
+-	savebuf = curbuf;
++    tv->v_type = VAR_DICT;
++    tv->vval.v_dict = dict;
+ 
+-	PyErr_Clear();
+-	curbuf = buf;
++    if (!(list = PyMapping_Keys(obj)))
++    {
++	dict_unref(dict);
++	return -1;
++    }
+ 
+-	if (u_save((linenr_T)n, (linenr_T)(n+1)) == FAIL)
+-	    PyErr_SetVim(_("cannot save undo information"));
+-	else if (ml_append((linenr_T)n, (char_u *)str, 0, FALSE) == FAIL)
+-	    PyErr_SetVim(_("cannot insert line"));
+-	else
+-	    appended_lines_mark((linenr_T)n, 1L);
++    if (!(iterator = PyObject_GetIter(list)))
++    {
++	dict_unref(dict);
++	Py_DECREF(list);
++	return -1;
++    }
++    Py_DECREF(list);
+ 
+-	vim_free(str);
+-	curbuf = savebuf;
+-	update_screen(VALID);
++    while ((keyObject = PyIter_Next(iterator)))
++    {
++	PyObject	*todecref;
+ 
+-	if (PyErr_Occurred() || VimErrorCheck())
+-	    return FAIL;
++	if (!(key = StringToChars(keyObject, &todecref)))
++	{
++	    Py_DECREF(keyObject);
++	    Py_DECREF(iterator);
++	    dict_unref(dict);
++	    return -1;
++	}
+ 
+-	if (len_change)
+-	    *len_change = 1;
++	if (*key == NUL)
++	{
++	    Py_DECREF(keyObject);
++	    Py_DECREF(iterator);
++	    Py_XDECREF(todecref);
++	    dict_unref(dict);
++	    RAISE_NO_EMPTY_KEYS;
++	    return -1;
++	}
+ 
+-	return OK;
+-    }
+-    else if (PyList_Check(lines))
+-    {
+-	PyInt	i;
+-	PyInt	size = PyList_Size(lines);
+-	char	**array;
+-	buf_T	*savebuf;
++	if (!(valObject = PyObject_GetItem(obj, keyObject)))
++	{
++	    Py_DECREF(keyObject);
++	    Py_DECREF(iterator);
++	    Py_XDECREF(todecref);
++	    dict_unref(dict);
++	    return -1;
++	}
+ 
+-	array = (char **)alloc((unsigned)(size * sizeof(char *)));
+-	if (array == NULL)
++	di = dictitem_alloc(key);
++
++	Py_DECREF(keyObject);
++	Py_XDECREF(todecref);
++
++	if (di == NULL)
+ 	{
++	    Py_DECREF(iterator);
++	    Py_DECREF(valObject);
++	    dict_unref(dict);
+ 	    PyErr_NoMemory();
+-	    return FAIL;
++	    return -1;
+ 	}
++	di->di_tv.v_lock = 0;
+ 
+-	for (i = 0; i < size; ++i)
++	if (_ConvertFromPyObject(valObject, &di->di_tv, lookup_dict) == -1)
+ 	{
+-	    PyObject *line = PyList_GetItem(lines, i);
+-	    array[i] = StringToLine(line);
++	    Py_DECREF(iterator);
++	    Py_DECREF(valObject);
++	    vim_free(di);
++	    dict_unref(dict);
++	    return -1;
++	}
+ 
+-	    if (array[i] == NULL)
+-	    {
+-		while (i)
+-		    vim_free(array[--i]);
+-		vim_free(array);
+-		return FAIL;
+-	    }
++	Py_DECREF(valObject);
++
++	if (dict_add(dict, di) == FAIL)
++	{
++	    Py_DECREF(iterator);
++	    dictitem_free(di);
++	    dict_unref(dict);
++	    PyErr_SetVim(_("failed to add key to dictionary"));
++	    return -1;
+ 	}
++    }
++    Py_DECREF(iterator);
++    --dict->dv_refcount;
++    return 0;
++}
+ 
+-	savebuf = curbuf;
++    static int
++pyseq_to_tv(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
++{
++    list_T	*l;
+ 
+-	PyErr_Clear();
+-	curbuf = buf;
++    if (!(l = py_list_alloc()))
++	return -1;
+ 
+-	if (u_save((linenr_T)n, (linenr_T)(n + 1)) == FAIL)
+-	    PyErr_SetVim(_("cannot save undo information"));
+-	else
+-	{
+-	    for (i = 0; i < size; ++i)
+-	    {
+-		if (ml_append((linenr_T)(n + i),
+-					(char_u *)array[i], 0, FALSE) == FAIL)
+-		{
+-		    PyErr_SetVim(_("cannot insert line"));
++    tv->v_type = VAR_LIST;
++    tv->vval.v_list = l;
+ 
+-		    /* Free the rest of the lines */
+-		    while (i < size)
+-			vim_free(array[i++]);
++    if (list_py_concat(l, obj, lookup_dict) == -1)
++    {
++	list_unref(l);
++	return -1;
++    }
+ 
+-		    break;
+-		}
+-		vim_free(array[i]);
+-	    }
+-	    if (i > 0)
+-		appended_lines_mark((linenr_T)n, (long)i);
+-	}
++    --l->lv_refcount;
++    return 0;
++}
+ 
+-	/* Free the array of lines. All of its contents have now
+-	 * been freed.
+-	 */
+-	vim_free(array);
++typedef int (*pytotvfunc)(PyObject *, typval_T *, PyObject *);
+ 
+-	curbuf = savebuf;
+-	update_screen(VALID);
++    static int
++convert_dl(PyObject *obj, typval_T *tv,
++				    pytotvfunc py_to_tv, PyObject *lookup_dict)
++{
++    PyObject	*capsule;
++    char	hexBuf[sizeof(void *) * 2 + 3];
+ 
+-	if (PyErr_Occurred() || VimErrorCheck())
+-	    return FAIL;
++    sprintf(hexBuf, "%p", obj);
+ 
+-	if (len_change)
+-	    *len_change = size;
++# ifdef PY_USE_CAPSULE
++    capsule = PyDict_GetItemString(lookup_dict, hexBuf);
++# else
++    capsule = (PyObject *)PyDict_GetItemString(lookup_dict, hexBuf);
++# endif
++    if (capsule == NULL)
++    {
++# ifdef PY_USE_CAPSULE
++	capsule = PyCapsule_New(tv, NULL, NULL);
++# else
++	capsule = PyCObject_FromVoidPtr(tv, NULL);
++# endif
++	if (PyDict_SetItemString(lookup_dict, hexBuf, capsule))
++	{
++	    Py_DECREF(capsule);
++	    tv->v_type = VAR_UNKNOWN;
++	    return -1;
++	}
++	if (py_to_tv(obj, tv, lookup_dict) == -1)
++	{
++	    tv->v_type = VAR_UNKNOWN;
++	    return -1;
++	}
++	/* As we are not using copy_tv which increments reference count we must
++	 * do it ourself. */
++	switch(tv->v_type)
++	{
++	    case VAR_DICT: ++tv->vval.v_dict->dv_refcount; break;
++	    case VAR_LIST: ++tv->vval.v_list->lv_refcount; break;
++	}
++    }
++    else
++    {
++	typval_T	*v;
+ 
+-	return OK;
++# ifdef PY_USE_CAPSULE
++	v = PyCapsule_GetPointer(capsule, NULL);
++# else
++	v = PyCObject_AsVoidPtr(capsule);
++# endif
++	copy_tv(v, tv);
+     }
++    return 0;
++}
++
++    static int
++ConvertFromPyMapping(PyObject *obj, typval_T *tv)
++{
++    PyObject	*lookup_dict;
++    int		r;
++
++    if (!(lookup_dict = PyDict_New()))
++	return -1;
++
++    if (PyType_IsSubtype(obj->ob_type, &DictionaryType))
++    {
++	tv->v_type = VAR_DICT;
++	tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
++	++tv->vval.v_dict->dv_refcount;
++	r = 0;
++    }
++    else if (PyDict_Check(obj))
++	r = convert_dl(obj, tv, pydict_to_tv, lookup_dict);
++    else if (PyMapping_Check(obj))
++	r = convert_dl(obj, tv, pymap_to_tv, lookup_dict);
+     else
+     {
+-	PyErr_BadArgument();
+-	return FAIL;
++	PyErr_SetString(PyExc_TypeError,
++		_("unable to convert object to vim dictionary"));
++	r = -1;
+     }
++    Py_DECREF(lookup_dict);
++    return r;
+ }
+ 
+-/*
+- * Common routines for buffers and line ranges
+- * -------------------------------------------
+- */
+-
+     static int
+-CheckBuffer(BufferObject *this)
++ConvertFromPyObject(PyObject *obj, typval_T *tv)
+ {
+-    if (this->buf == INVALID_BUFFER_VALUE)
+-    {
+-	PyErr_SetVim(_("attempt to refer to deleted buffer"));
+-	return -1;
+-    }
++    PyObject	*lookup_dict;
++    int		r;
+ 
+-    return 0;
++    if (!(lookup_dict = PyDict_New()))
++	return -1;
++    r = _ConvertFromPyObject(obj, tv, lookup_dict);
++    Py_DECREF(lookup_dict);
++    return r;
+ }
+ 
+-    static PyObject *
+-RBItem(BufferObject *self, PyInt n, PyInt start, PyInt end)
++    static int
++_ConvertFromPyObject(PyObject *obj, typval_T *tv, PyObject *lookup_dict)
+ {
+-    if (CheckBuffer(self))
+-	return NULL;
+-
+-    if (n < 0 || n > end - start)
++    if (PyType_IsSubtype(obj->ob_type, &DictionaryType))
+     {
+-	PyErr_SetString(PyExc_IndexError, _("line number out of range"));
+-	return NULL;
++	tv->v_type = VAR_DICT;
++	tv->vval.v_dict = (((DictionaryObject *)(obj))->dict);
++	++tv->vval.v_dict->dv_refcount;
+     }
++    else if (obj->ob_type == &ListType)
++    {
++	tv->v_type = VAR_LIST;
++	tv->vval.v_list = (((ListObject *)(obj))->list);
++	++tv->vval.v_list->lv_refcount;
++    }
++    else if (obj->ob_type == &FunctionType)
++    {
++	if (set_string_copy(((FunctionObject *) (obj))->name, tv) == -1)
++	    return -1;
+ 
+-    return GetBufferLine(self->buf, n+start);
+-}
+-
+-    static PyObject *
+-RBSlice(BufferObject *self, PyInt lo, PyInt hi, PyInt start, PyInt end)
+-{
+-    PyInt size;
++	tv->v_type = VAR_FUNC;
++	func_ref(tv->vval.v_string);
++    }
++    else if (PyBytes_Check(obj))
++    {
++	char_u	*result;
+ 
+-    if (CheckBuffer(self))
+-	return NULL;
++	if (PyString_AsStringAndSize(obj, (char **) &result, NULL) == -1)
++	    return -1;
++	if (result == NULL)
++	    return -1;
+ 
+-    size = end - start + 1;
++	if (set_string_copy(result, tv) == -1)
++	    return -1;
+ 
+-    if (lo < 0)
+-	lo = 0;
+-    else if (lo > size)
+-	lo = size;
+-    if (hi < 0)
+-	hi = 0;
+-    if (hi < lo)
+-	hi = lo;
+-    else if (hi > size)
+-	hi = size;
++	tv->v_type = VAR_STRING;
++    }
++    else if (PyUnicode_Check(obj))
++    {
++	PyObject	*bytes;
++	char_u	*result;
+ 
+-    return GetBufferLineList(self->buf, lo+start, hi+start);
+-}
++	bytes = PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, NULL);
++	if (bytes == NULL)
++	    return -1;
+ 
+-    static PyInt
+-RBAsItem(BufferObject *self, PyInt n, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
+-{
+-    PyInt len_change;
++	if(PyString_AsStringAndSize(bytes, (char **) &result, NULL) == -1)
++	    return -1;
++	if (result == NULL)
++	    return -1;
+ 
+-    if (CheckBuffer(self))
+-	return -1;
++	if (set_string_copy(result, tv))
++	{
++	    Py_XDECREF(bytes);
++	    return -1;
++	}
++	Py_XDECREF(bytes);
+ 
+-    if (n < 0 || n > end - start)
++	tv->v_type = VAR_STRING;
++    }
++#if PY_MAJOR_VERSION < 3
++    else if (PyInt_Check(obj))
+     {
+-	PyErr_SetString(PyExc_IndexError, _("line number out of range"));
+-	return -1;
++	tv->v_type = VAR_NUMBER;
++	tv->vval.v_number = (varnumber_T) PyInt_AsLong(obj);
+     }
+-
+-    if (SetBufferLine(self->buf, n+start, val, &len_change) == FAIL)
++#endif
++    else if (PyLong_Check(obj))
++    {
++	tv->v_type = VAR_NUMBER;
++	tv->vval.v_number = (varnumber_T) PyLong_AsLong(obj);
++    }
++    else if (PyDict_Check(obj))
++	return convert_dl(obj, tv, pydict_to_tv, lookup_dict);
++#ifdef FEAT_FLOAT
++    else if (PyFloat_Check(obj))
++    {
++	tv->v_type = VAR_FLOAT;
++	tv->vval.v_float = (float_T) PyFloat_AsDouble(obj);
++    }
++#endif
++    else if (PyObject_HasAttrString(obj, "keys"))
++	return convert_dl(obj, tv, pymap_to_tv, lookup_dict);
++    else if (PyIter_Check(obj) || PySequence_Check(obj))
++	return convert_dl(obj, tv, pyseq_to_tv, lookup_dict);
++    else if (PyMapping_Check(obj))
++	return convert_dl(obj, tv, pymap_to_tv, lookup_dict);
++    else
++    {
++	PyErr_SetString(PyExc_TypeError,
++		_("unable to convert to vim structure"));
+ 	return -1;
+-
+-    if (new_end)
+-	*new_end = end + len_change;
+-
++    }
+     return 0;
+ }
+ 
+-
+     static PyObject *
+-RBAppend(BufferObject *self, PyObject *args, PyInt start, PyInt end, PyInt *new_end)
++ConvertToPyObject(typval_T *tv)
+ {
+-    PyObject *lines;
+-    PyInt len_change;
+-    PyInt max;
+-    PyInt n;
+-
+-    if (CheckBuffer(self))
+-	return NULL;
+-
+-    max = n = end - start + 1;
+-
+-    if (!PyArg_ParseTuple(args, "O|n", &lines, &n))
+-	return NULL;
+-
+-    if (n < 0 || n > max)
++    if (tv == NULL)
+     {
+-	PyErr_SetString(PyExc_ValueError, _("line number out of range"));
++	PyErr_SetVim(_("NULL reference passed"));
+ 	return NULL;
+     }
+-
+-    if (InsertBufferLines(self->buf, n + start - 1, lines, &len_change) == FAIL)
+-	return NULL;
+-
+-    if (new_end)
+-	*new_end = end + len_change;
+-
+-    Py_INCREF(Py_None);
+-    return Py_None;
++    switch (tv->v_type)
++    {
++	case VAR_STRING:
++	    return PyBytes_FromString(tv->vval.v_string == NULL
++					    ? "" : (char *)tv->vval.v_string);
++	case VAR_NUMBER:
++	    return PyLong_FromLong((long) tv->vval.v_number);
++#ifdef FEAT_FLOAT
++	case VAR_FLOAT:
++	    return PyFloat_FromDouble((double) tv->vval.v_float);
++#endif
++	case VAR_LIST:
++	    return NEW_LIST(tv->vval.v_list);
++	case VAR_DICT:
++	    return NEW_DICTIONARY(tv->vval.v_dict);
++	case VAR_FUNC:
++	    return NEW_FUNCTION(tv->vval.v_string == NULL
++					  ? (char_u *)"" : tv->vval.v_string);
++	case VAR_UNKNOWN:
++	    Py_INCREF(Py_None);
++	    return Py_None;
++	default:
++	    PyErr_SetVim(_("internal error: invalid value type"));
++	    return NULL;
++    }
+ }
+ 
+-
+-/* Buffer object - Definitions
+- */
+-
+ typedef struct
+ {
+     PyObject_HEAD
+-    BufferObject *buf;
+-    PyInt start;
+-    PyInt end;
+-} RangeObject;
++} CurrentObject;
++static PyTypeObject CurrentType;
+ 
+-    static PyObject *
+-RangeNew(buf_T *buf, PyInt start, PyInt end)
++    static void
++init_structs(void)
+ {
+-    BufferObject *bufr;
+-    RangeObject *self;
+-    self = PyObject_NEW(RangeObject, &RangeType);
+-    if (self == NULL)
+-	return NULL;
+-
+-    bufr = (BufferObject *)BufferNew(buf);
+-    if (bufr == NULL)
+-    {
+-	Py_DECREF(self);
+-	return NULL;
+-    }
+-    Py_INCREF(bufr);
++    vim_memset(&OutputType, 0, sizeof(OutputType));
++    OutputType.tp_name = "vim.message";
++    OutputType.tp_basicsize = sizeof(OutputObject);
++    OutputType.tp_flags = Py_TPFLAGS_DEFAULT;
++    OutputType.tp_doc = "vim message object";
++    OutputType.tp_methods = OutputMethods;
++#if PY_MAJOR_VERSION >= 3
++    OutputType.tp_getattro = (getattrofunc)OutputGetattro;
++    OutputType.tp_setattro = (setattrofunc)OutputSetattro;
++    OutputType.tp_alloc = call_PyType_GenericAlloc;
++    OutputType.tp_new = call_PyType_GenericNew;
++    OutputType.tp_free = call_PyObject_Free;
++#else
++    OutputType.tp_getattr = (getattrfunc)OutputGetattr;
++    OutputType.tp_setattr = (setattrfunc)OutputSetattr;
++#endif
+ 
+-    self->buf = bufr;
+-    self->start = start;
+-    self->end = end;
++    vim_memset(&IterType, 0, sizeof(IterType));
++    IterType.tp_name = "vim.iter";
++    IterType.tp_basicsize = sizeof(IterObject);
++    IterType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
++    IterType.tp_doc = "generic iterator object";
++    IterType.tp_iter = (getiterfunc)IterIter;
++    IterType.tp_iternext = (iternextfunc)IterNext;
++    IterType.tp_dealloc = (destructor)IterDestructor;
++    IterType.tp_traverse = (traverseproc)IterTraverse;
++    IterType.tp_clear = (inquiry)IterClear;
++
++    vim_memset(&BufferType, 0, sizeof(BufferType));
++    BufferType.tp_name = "vim.buffer";
++    BufferType.tp_basicsize = sizeof(BufferType);
++    BufferType.tp_dealloc = (destructor)BufferDestructor;
++    BufferType.tp_repr = (reprfunc)BufferRepr;
++    BufferType.tp_as_sequence = &BufferAsSeq;
++    BufferType.tp_as_mapping = &BufferAsMapping;
++    BufferType.tp_flags = Py_TPFLAGS_DEFAULT;
++    BufferType.tp_doc = "vim buffer object";
++    BufferType.tp_methods = BufferMethods;
++#if PY_MAJOR_VERSION >= 3
++    BufferType.tp_getattro = (getattrofunc)BufferGetattro;
++    BufferType.tp_setattro = (setattrofunc)BufferSetattro;
++    BufferType.tp_alloc = call_PyType_GenericAlloc;
++    BufferType.tp_new = call_PyType_GenericNew;
++    BufferType.tp_free = call_PyObject_Free;
++#else
++    BufferType.tp_getattr = (getattrfunc)BufferGetattr;
++    BufferType.tp_setattr = (setattrfunc)BufferSetattr;
++#endif
+ 
+-    return (PyObject *)(self);
+-}
++    vim_memset(&WindowType, 0, sizeof(WindowType));
++    WindowType.tp_name = "vim.window";
++    WindowType.tp_basicsize = sizeof(WindowObject);
++    WindowType.tp_dealloc = (destructor)WindowDestructor;
++    WindowType.tp_repr = (reprfunc)WindowRepr;
++    WindowType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
++    WindowType.tp_doc = "vim Window object";
++    WindowType.tp_methods = WindowMethods;
++    WindowType.tp_traverse = (traverseproc)WindowTraverse;
++    WindowType.tp_clear = (inquiry)WindowClear;
++#if PY_MAJOR_VERSION >= 3
++    WindowType.tp_getattro = (getattrofunc)WindowGetattro;
++    WindowType.tp_setattro = (setattrofunc)WindowSetattro;
++    WindowType.tp_alloc = call_PyType_GenericAlloc;
++    WindowType.tp_new = call_PyType_GenericNew;
++    WindowType.tp_free = call_PyObject_Free;
++#else
++    WindowType.tp_getattr = (getattrfunc)WindowGetattr;
++    WindowType.tp_setattr = (setattrfunc)WindowSetattr;
++#endif
+ 
+-    static PyObject *
+-BufferAppend(PyObject *self, PyObject *args)
+-{
+-    return RBAppend((BufferObject *)(self), args, 1,
+-		    (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+-		    NULL);
+-}
++    vim_memset(&TabPageType, 0, sizeof(TabPageType));
++    TabPageType.tp_name = "vim.tabpage";
++    TabPageType.tp_basicsize = sizeof(TabPageObject);
++    TabPageType.tp_dealloc = (destructor)TabPageDestructor;
++    TabPageType.tp_repr = (reprfunc)TabPageRepr;
++    TabPageType.tp_flags = Py_TPFLAGS_DEFAULT;
++    TabPageType.tp_doc = "vim tab page object";
++    TabPageType.tp_methods = TabPageMethods;
++#if PY_MAJOR_VERSION >= 3
++    TabPageType.tp_getattro = (getattrofunc)TabPageGetattro;
++    TabPageType.tp_alloc = call_PyType_GenericAlloc;
++    TabPageType.tp_new = call_PyType_GenericNew;
++    TabPageType.tp_free = call_PyObject_Free;
++#else
++    TabPageType.tp_getattr = (getattrfunc)TabPageGetattr;
++#endif
+ 
+-    static PyObject *
+-BufferMark(PyObject *self, PyObject *args)
+-{
+-    pos_T	*posp;
+-    char	*pmark;
+-    char	mark;
+-    buf_T	*curbuf_save;
++    vim_memset(&BufMapType, 0, sizeof(BufMapType));
++    BufMapType.tp_name = "vim.bufferlist";
++    BufMapType.tp_basicsize = sizeof(BufMapObject);
++    BufMapType.tp_as_mapping = &BufMapAsMapping;
++    BufMapType.tp_flags = Py_TPFLAGS_DEFAULT;
++    BufMapType.tp_iter = BufMapIter;
++    BufferType.tp_doc = "vim buffer list";
++
++    vim_memset(&WinListType, 0, sizeof(WinListType));
++    WinListType.tp_name = "vim.windowlist";
++    WinListType.tp_basicsize = sizeof(WinListType);
++    WinListType.tp_as_sequence = &WinListAsSeq;
++    WinListType.tp_flags = Py_TPFLAGS_DEFAULT;
++    WinListType.tp_doc = "vim window list";
++    WinListType.tp_dealloc = (destructor)WinListDestructor;
++
++    vim_memset(&TabListType, 0, sizeof(TabListType));
++    TabListType.tp_name = "vim.tabpagelist";
++    TabListType.tp_basicsize = sizeof(TabListType);
++    TabListType.tp_as_sequence = &TabListAsSeq;
++    TabListType.tp_flags = Py_TPFLAGS_DEFAULT;
++    TabListType.tp_doc = "vim tab page list";
++
++    vim_memset(&RangeType, 0, sizeof(RangeType));
++    RangeType.tp_name = "vim.range";
++    RangeType.tp_basicsize = sizeof(RangeObject);
++    RangeType.tp_dealloc = (destructor)RangeDestructor;
++    RangeType.tp_repr = (reprfunc)RangeRepr;
++    RangeType.tp_as_sequence = &RangeAsSeq;
++    RangeType.tp_as_mapping = &RangeAsMapping;
++    RangeType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
++    RangeType.tp_doc = "vim Range object";
++    RangeType.tp_methods = RangeMethods;
++    RangeType.tp_traverse = (traverseproc)RangeTraverse;
++    RangeType.tp_clear = (inquiry)RangeClear;
++#if PY_MAJOR_VERSION >= 3
++    RangeType.tp_getattro = (getattrofunc)RangeGetattro;
++    RangeType.tp_alloc = call_PyType_GenericAlloc;
++    RangeType.tp_new = call_PyType_GenericNew;
++    RangeType.tp_free = call_PyObject_Free;
++#else
++    RangeType.tp_getattr = (getattrfunc)RangeGetattr;
++#endif
+ 
+-    if (CheckBuffer((BufferObject *)(self)))
+-	return NULL;
++    vim_memset(&CurrentType, 0, sizeof(CurrentType));
++    CurrentType.tp_name = "vim.currentdata";
++    CurrentType.tp_basicsize = sizeof(CurrentObject);
++    CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
++    CurrentType.tp_doc = "vim current object";
++    CurrentType.tp_methods = CurrentMethods;
++#if PY_MAJOR_VERSION >= 3
++    CurrentType.tp_getattro = (getattrofunc)CurrentGetattro;
++    CurrentType.tp_setattro = (setattrofunc)CurrentSetattro;
++#else
++    CurrentType.tp_getattr = (getattrfunc)CurrentGetattr;
++    CurrentType.tp_setattr = (setattrfunc)CurrentSetattr;
++#endif
+ 
+-    if (!PyArg_ParseTuple(args, "s", &pmark))
+-	return NULL;
+-    mark = *pmark;
++    vim_memset(&DictionaryType, 0, sizeof(DictionaryType));
++    DictionaryType.tp_name = "vim.dictionary";
++    DictionaryType.tp_basicsize = sizeof(DictionaryObject);
++    DictionaryType.tp_dealloc = (destructor)DictionaryDestructor;
++    DictionaryType.tp_as_sequence = &DictionaryAsSeq;
++    DictionaryType.tp_as_mapping = &DictionaryAsMapping;
++    DictionaryType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
++    DictionaryType.tp_doc = "dictionary pushing modifications to vim structure";
++    DictionaryType.tp_methods = DictionaryMethods;
++    DictionaryType.tp_iter = (getiterfunc)DictionaryIter;
++    DictionaryType.tp_new = (newfunc)DictionaryConstructor;
++    DictionaryType.tp_alloc = (allocfunc)PyType_GenericAlloc;
++#if PY_MAJOR_VERSION >= 3
++    DictionaryType.tp_getattro = (getattrofunc)DictionaryGetattro;
++    DictionaryType.tp_setattro = (setattrofunc)DictionarySetattro;
++#else
++    DictionaryType.tp_getattr = (getattrfunc)DictionaryGetattr;
++    DictionaryType.tp_setattr = (setattrfunc)DictionarySetattr;
++#endif
+ 
+-    curbuf_save = curbuf;
+-    curbuf = ((BufferObject *)(self))->buf;
+-    posp = getmark(mark, FALSE);
+-    curbuf = curbuf_save;
++    vim_memset(&ListType, 0, sizeof(ListType));
++    ListType.tp_name = "vim.list";
++    ListType.tp_dealloc = (destructor)ListDestructor;
++    ListType.tp_basicsize = sizeof(ListObject);
++    ListType.tp_as_sequence = &ListAsSeq;
++    ListType.tp_as_mapping = &ListAsMapping;
++    ListType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
++    ListType.tp_doc = "list pushing modifications to vim structure";
++    ListType.tp_methods = ListMethods;
++    ListType.tp_iter = (getiterfunc)ListIter;
++    ListType.tp_new = (newfunc)ListConstructor;
++    ListType.tp_alloc = (allocfunc)PyType_GenericAlloc;
++#if PY_MAJOR_VERSION >= 3
++    ListType.tp_getattro = (getattrofunc)ListGetattro;
++    ListType.tp_setattro = (setattrofunc)ListSetattro;
++#else
++    ListType.tp_getattr = (getattrfunc)ListGetattr;
++    ListType.tp_setattr = (setattrfunc)ListSetattr;
++#endif
+ 
+-    if (posp == NULL)
+-    {
+-	PyErr_SetVim(_("invalid mark name"));
+-	return NULL;
+-    }
++    vim_memset(&FunctionType, 0, sizeof(FunctionType));
++    FunctionType.tp_name = "vim.function";
++    FunctionType.tp_basicsize = sizeof(FunctionObject);
++    FunctionType.tp_dealloc = (destructor)FunctionDestructor;
++    FunctionType.tp_call = (ternaryfunc)FunctionCall;
++    FunctionType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE;
++    FunctionType.tp_doc = "object that calls vim function";
++    FunctionType.tp_methods = FunctionMethods;
++    FunctionType.tp_repr = (reprfunc)FunctionRepr;
++    FunctionType.tp_new = (newfunc)FunctionConstructor;
++    FunctionType.tp_alloc = (allocfunc)PyType_GenericAlloc;
++#if PY_MAJOR_VERSION >= 3
++    FunctionType.tp_getattro = (getattrofunc)FunctionGetattro;
++#else
++    FunctionType.tp_getattr = (getattrfunc)FunctionGetattr;
++#endif
+ 
+-    /* Ckeck for keyboard interrupt */
+-    if (VimErrorCheck())
+-	return NULL;
++    vim_memset(&OptionsType, 0, sizeof(OptionsType));
++    OptionsType.tp_name = "vim.options";
++    OptionsType.tp_basicsize = sizeof(OptionsObject);
++    OptionsType.tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_GC;
++    OptionsType.tp_doc = "object for manipulating options";
++    OptionsType.tp_as_mapping = &OptionsAsMapping;
++    OptionsType.tp_dealloc = (destructor)OptionsDestructor;
++    OptionsType.tp_traverse = (traverseproc)OptionsTraverse;
++    OptionsType.tp_clear = (inquiry)OptionsClear;
++
++#if PY_MAJOR_VERSION >= 3
++    vim_memset(&vimmodule, 0, sizeof(vimmodule));
++    vimmodule.m_name = "vim";
++    vimmodule.m_doc = "Vim Python interface\n";
++    vimmodule.m_size = -1;
++    vimmodule.m_methods = VimMethods;
++#endif
++}
+ 
+-    if (posp->lnum <= 0)
+-    {
+-	/* Or raise an error? */
+-	Py_INCREF(Py_None);
+-	return Py_None;
+-    }
++#define PYTYPE_READY(type) \
++    if (PyType_Ready(&type)) \
++	return -1;
+ 
+-    return Py_BuildValue("(ll)", (long)(posp->lnum), (long)(posp->col));
++    static int
++init_types()
++{
++    PYTYPE_READY(IterType);
++    PYTYPE_READY(BufferType);
++    PYTYPE_READY(RangeType);
++    PYTYPE_READY(WindowType);
++    PYTYPE_READY(TabPageType);
++    PYTYPE_READY(BufMapType);
++    PYTYPE_READY(WinListType);
++    PYTYPE_READY(TabListType);
++    PYTYPE_READY(CurrentType);
++    PYTYPE_READY(DictionaryType);
++    PYTYPE_READY(ListType);
++    PYTYPE_READY(FunctionType);
++    PYTYPE_READY(OptionsType);
++    PYTYPE_READY(OutputType);
++    return 0;
+ }
+ 
+-    static PyObject *
+-BufferRange(PyObject *self, PyObject *args)
++static BufMapObject TheBufferMap =
+ {
+-    PyInt start;
+-    PyInt end;
++    PyObject_HEAD_INIT(&BufMapType)
++};
+ 
+-    if (CheckBuffer((BufferObject *)(self)))
+-	return NULL;
++static WinListObject TheWindowList =
++{
++    PyObject_HEAD_INIT(&WinListType)
++    NULL
++};
+ 
+-    if (!PyArg_ParseTuple(args, "nn", &start, &end))
+-	return NULL;
++static CurrentObject TheCurrent =
++{
++    PyObject_HEAD_INIT(&CurrentType)
++};
+ 
+-    return RangeNew(((BufferObject *)(self))->buf, start, end);
+-}
++static TabListObject TheTabPageList =
++{
++    PyObject_HEAD_INIT(&TabListType)
++};
+ 
+-static struct PyMethodDef BufferMethods[] = {
+-    /* name,	    function,		calling,    documentation */
+-    {"append",	    BufferAppend,	1,	    "Append data to Vim buffer" },
+-    {"mark",	    BufferMark,		1,	    "Return (row,col) representing position of named mark" },
+-    {"range",	    BufferRange,	1,	    "Return a range object which represents the part of the given buffer between line numbers s and e" },
+-    { NULL,	    NULL,		0,	    NULL }
++static struct numeric_constant {
++    char	*name;
++    int		value;
++} numeric_constants[] = {
++    {"VAR_LOCKED",	VAR_LOCKED},
++    {"VAR_FIXED",	VAR_FIXED},
++    {"VAR_SCOPE",	VAR_SCOPE},
++    {"VAR_DEF_SCOPE",	VAR_DEF_SCOPE},
+ };
+ 
+-    static PyObject *
+-RangeAppend(PyObject *self, PyObject *args)
+-{
+-    return RBAppend(((RangeObject *)(self))->buf, args,
+-		    ((RangeObject *)(self))->start,
+-		    ((RangeObject *)(self))->end,
+-		    &((RangeObject *)(self))->end);
+-}
++static struct object_constant {
++    char	*name;
++    PyObject	*value;
++} object_constants[] = {
++    {"buffers",  (PyObject *)(void *)&TheBufferMap},
++    {"windows",  (PyObject *)(void *)&TheWindowList},
++    {"tabpages", (PyObject *)(void *)&TheTabPageList},
++    {"current",  (PyObject *)(void *)&TheCurrent},
++
++    {"Buffer",     (PyObject *)&BufferType},
++    {"Range",      (PyObject *)&RangeType},
++    {"Window",     (PyObject *)&WindowType},
++    {"TabPage",    (PyObject *)&TabPageType},
++    {"Dictionary", (PyObject *)&DictionaryType},
++    {"List",       (PyObject *)&ListType},
++    {"Function",   (PyObject *)&FunctionType},
++    {"Options",    (PyObject *)&OptionsType},
++};
+ 
+-    static PyInt
+-RangeLength(PyObject *self)
+-{
+-    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
+-    if (CheckBuffer(((RangeObject *)(self))->buf))
+-	return -1; /* ??? */
++typedef int (*object_adder)(PyObject *, const char *, PyObject *);
++typedef PyObject *(*attr_getter)(PyObject *, const char *);
+ 
+-    return (((RangeObject *)(self))->end - ((RangeObject *)(self))->start + 1);
+-}
++#define ADD_OBJECT(m, name, obj) \
++    if (add_object(m, name, obj)) \
++	return -1;
+ 
+-    static PyObject *
+-RangeItem(PyObject *self, PyInt n)
+-{
+-    return RBItem(((RangeObject *)(self))->buf, n,
+-		  ((RangeObject *)(self))->start,
+-		  ((RangeObject *)(self))->end);
+-}
++#define ADD_CHECKED_OBJECT(m, name, obj) \
++    { \
++	PyObject	*value = obj; \
++	if (!value) \
++	    return -1; \
++	ADD_OBJECT(m, name, value); \
++    }
+ 
+-    static PyObject *
+-RangeRepr(PyObject *self)
++    static int
++populate_module(PyObject *m, object_adder add_object, attr_getter get_attr)
+ {
+-    static char repr[100];
+-    RangeObject *this = (RangeObject *)(self);
++    int i;
++    PyObject	*os;
+ 
+-    if (this->buf->buf == INVALID_BUFFER_VALUE)
+-    {
+-	vim_snprintf(repr, 100, "<range object (for deleted buffer) at %p>",
+-								      (self));
+-	return PyString_FromString(repr);
+-    }
+-    else
++    for (i = 0; i < (int)(sizeof(numeric_constants)
++					   / sizeof(struct numeric_constant));
++	    ++i)
++	ADD_CHECKED_OBJECT(m, numeric_constants[i].name,
++		PyInt_FromLong(numeric_constants[i].value));
++
++    for (i = 0; i < (int)(sizeof(object_constants)
++					    / sizeof(struct object_constant));
++	    ++i)
+     {
+-	char *name = (char *)this->buf->buf->b_fname;
+-	int len;
++	PyObject	*value;
+ 
+-	if (name == NULL)
+-	    name = "";
+-	len = (int)strlen(name);
++	value = object_constants[i].value;
++	Py_INCREF(value);
++	ADD_OBJECT(m, object_constants[i].name, value);
++    }
+ 
+-	if (len > 45)
+-	    name = name + (45 - len);
++    if (!(VimError = PyErr_NewException("vim.error", NULL, NULL)))
++	return -1;
++    ADD_OBJECT(m, "error", VimError);
+ 
+-	vim_snprintf(repr, 100, "<range %s%s (%d:%d)>",
+-		len > 45 ? "..." : "", name,
+-		this->start, this->end);
++    ADD_CHECKED_OBJECT(m, "vars",  NEW_DICTIONARY(&globvardict));
++    ADD_CHECKED_OBJECT(m, "vvars", NEW_DICTIONARY(&vimvardict));
++    ADD_CHECKED_OBJECT(m, "options",
++	    OptionsNew(SREQ_GLOBAL, NULL, dummy_check, NULL));
+ 
+-	return PyString_FromString(repr);
+-    }
+-}
++    if (!(os = PyImport_ImportModule("os")))
++	return -1;
++    ADD_OBJECT(m, "os", os);
+ 
+-    static PyObject *
+-RangeSlice(PyObject *self, PyInt lo, PyInt hi)
+-{
+-    return RBSlice(((RangeObject *)(self))->buf, lo, hi,
+-		   ((RangeObject *)(self))->start,
+-		   ((RangeObject *)(self))->end);
+-}
++    if (!(py_getcwd = PyObject_GetAttrString(os, "getcwd")))
++	return -1;
++    ADD_OBJECT(m, "_getcwd", py_getcwd)
+ 
+-/*
+- * Line range object - Definitions
+- */
++    if (!(py_chdir = PyObject_GetAttrString(os, "chdir")))
++	return -1;
++    ADD_OBJECT(m, "_chdir", py_chdir);
++    if (PyObject_SetAttrString(os, "chdir", get_attr(m, "chdir")))
++	return -1;
+ 
+-static struct PyMethodDef RangeMethods[] = {
+-    /* name,	    function,		calling,    documentation */
+-    {"append",	    RangeAppend,	1,	    "Append data to the Vim range" },
+-    { NULL,	    NULL,		0,	    NULL }
+-};
++    if ((py_fchdir = PyObject_GetAttrString(os, "fchdir")))
++    {
++	ADD_OBJECT(m, "_fchdir", py_fchdir);
++	if (PyObject_SetAttrString(os, "fchdir", get_attr(m, "fchdir")))
++	    return -1;
++    }
++    else
++	PyErr_Clear();
+ 
++    return 0;
++}
+diff -Naur vim73.orig/src/if_python.c vim73/src/if_python.c
+--- vim73.orig/src/if_python.c	2010-08-13 13:59:41.000000000 +0000
++++ vim73/src/if_python.c	2013-06-07 17:07:31.685584864 +0000
+@@ -1,4 +1,4 @@
+-/* vi:set ts=8 sts=4 sw=4:
++/* vi:set ts=8 sts=4 sw=4 noet:
+  *
+  * VIM - Vi IMproved	by Bram Moolenaar
+  *
+@@ -21,6 +21,15 @@
+ 
+ #include <limits.h>
+ 
++/* uncomment this if used with the debug version of python.
++ * Checked on 2.7.4. */
++/* #define Py_DEBUG */
++/* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting 
++ */
++/* uncomment this if used with the debug version of python, but without its 
++ * allocator */
++/* #define Py_DEBUG_NO_PYMALLOC */
++
+ /* Python.h defines _POSIX_THREADS itself (if needed) */
+ #ifdef _POSIX_THREADS
+ # undef _POSIX_THREADS
+@@ -44,8 +53,6 @@
+ # undef _XOPEN_SOURCE	/* pyconfig.h defines it as well. */
+ #endif
+ 
+-#define PY_SSIZE_T_CLEAN
+-
+ #include <Python.h>
+ #if defined(MACOS) && !defined(MACOS_X_UNIX)
+ # include "macglue.h"
+@@ -54,7 +61,16 @@
+ #undef main /* Defined in python.h - aargh */
+ #undef HAVE_FCNTL_H /* Clash with os_win32.h */
+ 
+-static void init_structs(void);
++#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
++# define PY_SSIZE_T_CLEAN
++#endif
++
++#define PyBytes_FromString PyString_FromString
++#define PyBytes_Check PyString_Check
++
++/* No-op conversion functions, use with care! */
++#define PyString_AsBytes(obj) (obj)
++#define PyString_FreeBytes(obj)
+ 
+ #if !defined(FEAT_PYTHON) && defined(PROTO)
+ /* Use this to be able to generate prototypes without python being used. */
+@@ -65,6 +81,10 @@
+ # define PySequenceMethods Py_ssize_t
+ #endif
+ 
++#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++# define PY_USE_CAPSULE
++#endif
++
+ #if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
+ # define PyInt Py_ssize_t
+ # define PyInquiry lenfunc
+@@ -75,6 +95,7 @@
+ # define Py_ssize_t_fmt "n"
+ #else
+ # define PyInt int
++# define lenfunc inquiry
+ # define PyInquiry inquiry
+ # define PyIntArgFunc intargfunc
+ # define PyIntIntArgFunc intintargfunc
+@@ -82,6 +103,7 @@
+ # define PyIntIntObjArgProc intintobjargproc
+ # define Py_ssize_t_fmt "i"
+ #endif
++#define Py_bytes_fmt "s"
+ 
+ /* Parser flags */
+ #define single_input	256
+@@ -102,7 +124,7 @@
+ #  include <dlfcn.h>
+ #  define FARPROC void*
+ #  define HINSTANCE void*
+-#  ifdef PY_NO_RTLD_GLOBAL
++#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
+ #   define load_dll(n) dlopen((n), RTLD_LAZY)
+ #  else
+ #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
+@@ -110,7 +132,7 @@
+ #  define close_dll dlclose
+ #  define symbol_from_dll dlsym
+ # else
+-#  define load_dll LoadLibrary
++#  define load_dll vimLoadLib
+ #  define close_dll FreeLibrary
+ #  define symbol_from_dll GetProcAddress
+ # endif
+@@ -118,24 +140,31 @@
+ /* This makes if_python.c compile without warnings against Python 2.5
+  * on Win32 and Win64. */
+ # undef PyRun_SimpleString
++# undef PyRun_String
+ # undef PyArg_Parse
+ # undef PyArg_ParseTuple
+ # undef Py_BuildValue
+ # undef Py_InitModule4
+ # undef Py_InitModule4_64
++# undef PyObject_CallMethod
+ 
+ /*
+  * Wrapper defines
+  */
+ # define PyArg_Parse dll_PyArg_Parse
+ # define PyArg_ParseTuple dll_PyArg_ParseTuple
++# define PyMem_Free dll_PyMem_Free
++# define PyMem_Malloc dll_PyMem_Malloc
+ # define PyDict_SetItemString dll_PyDict_SetItemString
+ # define PyErr_BadArgument dll_PyErr_BadArgument
++# define PyErr_NewException dll_PyErr_NewException
+ # define PyErr_Clear dll_PyErr_Clear
++# define PyErr_PrintEx dll_PyErr_PrintEx
+ # define PyErr_NoMemory dll_PyErr_NoMemory
+ # define PyErr_Occurred dll_PyErr_Occurred
+ # define PyErr_SetNone dll_PyErr_SetNone
+ # define PyErr_SetString dll_PyErr_SetString
++# define PyErr_SetObject dll_PyErr_SetObject
+ # define PyEval_InitThreads dll_PyEval_InitThreads
+ # define PyEval_RestoreThread dll_PyEval_RestoreThread
+ # define PyEval_SaveThread dll_PyEval_SaveThread
+@@ -145,41 +174,114 @@
+ # endif
+ # define PyInt_AsLong dll_PyInt_AsLong
+ # define PyInt_FromLong dll_PyInt_FromLong
++# define PyLong_AsLong dll_PyLong_AsLong
++# define PyLong_FromLong dll_PyLong_FromLong
++# define PyBool_Type (*dll_PyBool_Type)
+ # define PyInt_Type (*dll_PyInt_Type)
++# define PyLong_Type (*dll_PyLong_Type)
+ # define PyList_GetItem dll_PyList_GetItem
+ # define PyList_Append dll_PyList_Append
+ # define PyList_New dll_PyList_New
+ # define PyList_SetItem dll_PyList_SetItem
+ # define PyList_Size dll_PyList_Size
+ # define PyList_Type (*dll_PyList_Type)
++# define PySequence_Check dll_PySequence_Check
++# define PySequence_Size dll_PySequence_Size
++# define PySequence_GetItem dll_PySequence_GetItem
++# define PySequence_Fast dll_PySequence_Fast
++# define PyTuple_Size dll_PyTuple_Size
++# define PyTuple_GetItem dll_PyTuple_GetItem
++# define PyTuple_Type (*dll_PyTuple_Type)
+ # define PyImport_ImportModule dll_PyImport_ImportModule
+ # define PyDict_New dll_PyDict_New
+ # define PyDict_GetItemString dll_PyDict_GetItemString
++# define PyDict_Next dll_PyDict_Next
++# define PyDict_Type (*dll_PyDict_Type)
++# ifdef PyMapping_Keys
++#  define PY_NO_MAPPING_KEYS
++# else
++#  define PyMapping_Keys dll_PyMapping_Keys
++# endif
++# define PyObject_GetItem dll_PyObject_GetItem
++# define PyObject_CallMethod dll_PyObject_CallMethod
++# define PyMapping_Check dll_PyMapping_Check
++# define PyIter_Next dll_PyIter_Next
+ # define PyModule_GetDict dll_PyModule_GetDict
+ # define PyRun_SimpleString dll_PyRun_SimpleString
++# define PyRun_String dll_PyRun_String
++# define PyObject_GetAttrString dll_PyObject_GetAttrString
++# define PyObject_HasAttrString dll_PyObject_HasAttrString
++# define PyObject_SetAttrString dll_PyObject_SetAttrString
++# define PyObject_CallFunctionObjArgs dll_PyObject_CallFunctionObjArgs
++# define PyObject_Call dll_PyObject_Call
+ # define PyString_AsString dll_PyString_AsString
++# define PyString_AsStringAndSize dll_PyString_AsStringAndSize
+ # define PyString_FromString dll_PyString_FromString
++# define PyString_FromFormat dll_PyString_FromFormat
+ # define PyString_FromStringAndSize dll_PyString_FromStringAndSize
+ # define PyString_Size dll_PyString_Size
+ # define PyString_Type (*dll_PyString_Type)
++# define PyUnicode_Type (*dll_PyUnicode_Type)
++# undef PyUnicode_AsEncodedString
++# define PyUnicode_AsEncodedString py_PyUnicode_AsEncodedString
++# define PyFloat_AsDouble dll_PyFloat_AsDouble
++# define PyFloat_FromDouble dll_PyFloat_FromDouble
++# define PyFloat_Type (*dll_PyFloat_Type)
++# define PyImport_AddModule (*dll_PyImport_AddModule)
+ # define PySys_SetObject dll_PySys_SetObject
+ # define PySys_SetArgv dll_PySys_SetArgv
+ # define PyType_Type (*dll_PyType_Type)
++# define PyType_Ready (*dll_PyType_Ready)
++# define PyType_GenericAlloc dll_PyType_GenericAlloc
+ # define Py_BuildValue dll_Py_BuildValue
+ # define Py_FindMethod dll_Py_FindMethod
+ # define Py_InitModule4 dll_Py_InitModule4
++# define Py_SetPythonHome dll_Py_SetPythonHome
+ # define Py_Initialize dll_Py_Initialize
+ # define Py_Finalize dll_Py_Finalize
+ # define Py_IsInitialized dll_Py_IsInitialized
+ # define _PyObject_New dll__PyObject_New
++# define _PyObject_GC_New dll__PyObject_GC_New
++# ifdef PyObject_GC_Del
++#  define Py_underscore_GC
++#  define _PyObject_GC_Del dll__PyObject_GC_Del
++#  define _PyObject_GC_UnTrack dll__PyObject_GC_UnTrack
++# else
++#  define PyObject_GC_Del dll_PyObject_GC_Del
++#  define PyObject_GC_UnTrack dll_PyObject_GC_UnTrack
++# endif
++# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++#  define _PyObject_NextNotImplemented (*dll__PyObject_NextNotImplemented)
++# endif
+ # define _Py_NoneStruct (*dll__Py_NoneStruct)
++# define _Py_ZeroStruct (*dll__Py_ZeroStruct)
++# define _Py_TrueStruct (*dll__Py_TrueStruct)
+ # define PyObject_Init dll__PyObject_Init
++# define PyObject_GetIter dll_PyObject_GetIter
++# define PyObject_IsTrue dll_PyObject_IsTrue
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ #  define PyType_IsSubtype dll_PyType_IsSubtype
++#  ifdef Py_DEBUG
++#   define _Py_NegativeRefcount dll__Py_NegativeRefcount
++#   define _Py_RefTotal (*dll__Py_RefTotal)
++#   define _Py_Dealloc dll__Py_Dealloc
++#  endif
+ # endif
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
+-#  define PyObject_Malloc dll_PyObject_Malloc
+-#  define PyObject_Free dll_PyObject_Free
++#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
++#   define _PyObject_DebugMalloc dll__PyObject_DebugMalloc
++#   define _PyObject_DebugFree dll__PyObject_DebugFree
++#  else
++#   define PyObject_Malloc dll_PyObject_Malloc
++#   define PyObject_Free dll_PyObject_Free
++#  endif
++# endif
++# ifdef PY_USE_CAPSULE
++#  define PyCapsule_New dll_PyCapsule_New
++#  define PyCapsule_GetPointer dll_PyCapsule_GetPointer
++# else
++#  define PyCObject_FromVoidPtr dll_PyCObject_FromVoidPtr
++#  define PyCObject_AsVoidPtr dll_PyCObject_AsVoidPtr
+ # endif
+ 
+ /*
+@@ -187,57 +289,131 @@
+  */
+ static int(*dll_PyArg_Parse)(PyObject *, char *, ...);
+ static int(*dll_PyArg_ParseTuple)(PyObject *, char *, ...);
++static int(*dll_PyMem_Free)(void *);
++static void* (*dll_PyMem_Malloc)(size_t);
+ static int(*dll_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static int(*dll_PyErr_BadArgument)(void);
++static PyObject *(*dll_PyErr_NewException)(char *, PyObject *, PyObject *);
+ static void(*dll_PyErr_Clear)(void);
++static void(*dll_PyErr_PrintEx)(int);
+ static PyObject*(*dll_PyErr_NoMemory)(void);
+ static PyObject*(*dll_PyErr_Occurred)(void);
+ static void(*dll_PyErr_SetNone)(PyObject *);
+ static void(*dll_PyErr_SetString)(PyObject *, const char *);
++static void(*dll_PyErr_SetObject)(PyObject *, PyObject *);
+ static void(*dll_PyEval_InitThreads)(void);
+ static void(*dll_PyEval_RestoreThread)(PyThreadState *);
+ static PyThreadState*(*dll_PyEval_SaveThread)(void);
+ # ifdef PY_CAN_RECURSE
+ static PyGILState_STATE	(*dll_PyGILState_Ensure)(void);
+ static void (*dll_PyGILState_Release)(PyGILState_STATE);
+-#endif
++# endif
+ static long(*dll_PyInt_AsLong)(PyObject *);
+ static PyObject*(*dll_PyInt_FromLong)(long);
++static long(*dll_PyLong_AsLong)(PyObject *);
++static PyObject*(*dll_PyLong_FromLong)(long);
++static PyTypeObject* dll_PyBool_Type;
+ static PyTypeObject* dll_PyInt_Type;
++static PyTypeObject* dll_PyLong_Type;
+ static PyObject*(*dll_PyList_GetItem)(PyObject *, PyInt);
+ static PyObject*(*dll_PyList_Append)(PyObject *, PyObject *);
+ static PyObject*(*dll_PyList_New)(PyInt size);
+ static int(*dll_PyList_SetItem)(PyObject *, PyInt, PyObject *);
+ static PyInt(*dll_PyList_Size)(PyObject *);
+ static PyTypeObject* dll_PyList_Type;
++static int (*dll_PySequence_Check)(PyObject *);
++static PyInt(*dll_PySequence_Size)(PyObject *);
++static PyObject*(*dll_PySequence_GetItem)(PyObject *, PyInt);
++static PyObject*(*dll_PySequence_Fast)(PyObject *, const char *);
++static PyInt(*dll_PyTuple_Size)(PyObject *);
++static PyObject*(*dll_PyTuple_GetItem)(PyObject *, PyInt);
++static PyTypeObject* dll_PyTuple_Type;
+ static PyObject*(*dll_PyImport_ImportModule)(const char *);
+ static PyObject*(*dll_PyDict_New)(void);
+ static PyObject*(*dll_PyDict_GetItemString)(PyObject *, const char *);
++static int (*dll_PyDict_Next)(PyObject *, PyInt *, PyObject **, PyObject **);
++static PyTypeObject* dll_PyDict_Type;
++# ifndef PY_NO_MAPPING_KEYS
++static PyObject* (*dll_PyMapping_Keys)(PyObject *);
++# endif
++static PyObject* (*dll_PyObject_GetItem)(PyObject *, PyObject *);
++static PyObject* (*dll_PyObject_CallMethod)(PyObject *, char *, PyObject *);
++static int (*dll_PyMapping_Check)(PyObject *);
++static PyObject* (*dll_PyIter_Next)(PyObject *);
+ static PyObject*(*dll_PyModule_GetDict)(PyObject *);
+ static int(*dll_PyRun_SimpleString)(char *);
++static PyObject *(*dll_PyRun_String)(char *, int, PyObject *, PyObject *);
++static PyObject* (*dll_PyObject_GetAttrString)(PyObject *, const char *);
++static int (*dll_PyObject_HasAttrString)(PyObject *, const char *);
++static PyObject* (*dll_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
++static PyObject* (*dll_PyObject_CallFunctionObjArgs)(PyObject *, ...);
++static PyObject* (*dll_PyObject_Call)(PyObject *, PyObject *, PyObject *);
+ static char*(*dll_PyString_AsString)(PyObject *);
++static int(*dll_PyString_AsStringAndSize)(PyObject *, char **, int *);
+ static PyObject*(*dll_PyString_FromString)(const char *);
++static PyObject*(*dll_PyString_FromFormat)(const char *, ...);
+ static PyObject*(*dll_PyString_FromStringAndSize)(const char *, PyInt);
+ static PyInt(*dll_PyString_Size)(PyObject *);
+ static PyTypeObject* dll_PyString_Type;
++static PyTypeObject* dll_PyUnicode_Type;
++static PyObject *(*py_PyUnicode_AsEncodedString)(PyObject *, char *, char *);
++static double(*dll_PyFloat_AsDouble)(PyObject *);
++static PyObject*(*dll_PyFloat_FromDouble)(double);
++static PyTypeObject* dll_PyFloat_Type;
+ static int(*dll_PySys_SetObject)(char *, PyObject *);
+ static int(*dll_PySys_SetArgv)(int, char **);
+ static PyTypeObject* dll_PyType_Type;
++static int (*dll_PyType_Ready)(PyTypeObject *type);
++static PyObject* (*dll_PyType_GenericAlloc)(PyTypeObject *type, PyInt nitems);
+ static PyObject*(*dll_Py_BuildValue)(char *, ...);
+ static PyObject*(*dll_Py_FindMethod)(struct PyMethodDef[], PyObject *, char *);
+ static PyObject*(*dll_Py_InitModule4)(char *, struct PyMethodDef *, char *, PyObject *, int);
++static PyObject*(*dll_PyImport_AddModule)(char *);
++static void(*dll_Py_SetPythonHome)(char *home);
+ static void(*dll_Py_Initialize)(void);
+ static void(*dll_Py_Finalize)(void);
+ static int(*dll_Py_IsInitialized)(void);
+ static PyObject*(*dll__PyObject_New)(PyTypeObject *, PyObject *);
++static PyObject*(*dll__PyObject_GC_New)(PyTypeObject *);
++# ifdef Py_underscore_GC
++static void(*dll__PyObject_GC_Del)(void *);
++static void(*dll__PyObject_GC_UnTrack)(void *);
++# else
++static void(*dll_PyObject_GC_Del)(void *);
++static void(*dll_PyObject_GC_UnTrack)(void *);
++# endif
+ static PyObject*(*dll__PyObject_Init)(PyObject *, PyTypeObject *);
++static PyObject* (*dll_PyObject_GetIter)(PyObject *);
++static int (*dll_PyObject_IsTrue)(PyObject *);
++# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++static iternextfunc dll__PyObject_NextNotImplemented;
++# endif
+ static PyObject* dll__Py_NoneStruct;
++static PyObject* _Py_ZeroStruct;
++static PyObject* dll__Py_TrueStruct;
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
+ static int (*dll_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
++#  ifdef Py_DEBUG
++static void (*dll__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
++static PyInt* dll__Py_RefTotal;
++static void (*dll__Py_Dealloc)(PyObject *obj);
++#  endif
+ # endif
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
++#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
++static void (*dll__PyObject_DebugFree)(void*);
++static void* (*dll__PyObject_DebugMalloc)(size_t);
++#  else
+ static void* (*dll_PyObject_Malloc)(size_t);
+ static void (*dll_PyObject_Free)(void*);
++#  endif
++# endif
++# ifdef PY_USE_CAPSULE
++static PyObject* (*dll_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
++static void* (*dll_PyCapsule_GetPointer)(PyObject *, char *);
++# else
++static PyObject* (*dll_PyCObject_FromVoidPtr)(void *cobj, void (*destr)(void *));
++static void* (*dll_PyCObject_AsVoidPtr)(PyObject *);
+ # endif
+ 
+ static HINSTANCE hinstPython = 0; /* Instance of python.dll */
+@@ -245,15 +421,19 @@
+ /* Imported exception objects */
+ static PyObject *imp_PyExc_AttributeError;
+ static PyObject *imp_PyExc_IndexError;
++static PyObject *imp_PyExc_KeyError;
+ static PyObject *imp_PyExc_KeyboardInterrupt;
+ static PyObject *imp_PyExc_TypeError;
+ static PyObject *imp_PyExc_ValueError;
++static PyObject *imp_PyExc_RuntimeError;
+ 
+ # define PyExc_AttributeError imp_PyExc_AttributeError
+ # define PyExc_IndexError imp_PyExc_IndexError
++# define PyExc_KeyError imp_PyExc_KeyError
+ # define PyExc_KeyboardInterrupt imp_PyExc_KeyboardInterrupt
+ # define PyExc_TypeError imp_PyExc_TypeError
+ # define PyExc_ValueError imp_PyExc_ValueError
++# define PyExc_RuntimeError imp_PyExc_RuntimeError
+ 
+ /*
+  * Table of name to function pointer of python.
+@@ -265,15 +445,27 @@
+     PYTHON_PROC *ptr;
+ } python_funcname_table[] =
+ {
++#ifndef PY_SSIZE_T_CLEAN
+     {"PyArg_Parse", (PYTHON_PROC*)&dll_PyArg_Parse},
+     {"PyArg_ParseTuple", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
++    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
++#else
++    {"_PyArg_Parse_SizeT", (PYTHON_PROC*)&dll_PyArg_Parse},
++    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&dll_PyArg_ParseTuple},
++    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&dll_Py_BuildValue},
++#endif
++    {"PyMem_Free", (PYTHON_PROC*)&dll_PyMem_Free},
++    {"PyMem_Malloc", (PYTHON_PROC*)&dll_PyMem_Malloc},
+     {"PyDict_SetItemString", (PYTHON_PROC*)&dll_PyDict_SetItemString},
+     {"PyErr_BadArgument", (PYTHON_PROC*)&dll_PyErr_BadArgument},
++    {"PyErr_NewException", (PYTHON_PROC*)&dll_PyErr_NewException},
+     {"PyErr_Clear", (PYTHON_PROC*)&dll_PyErr_Clear},
++    {"PyErr_PrintEx", (PYTHON_PROC*)&dll_PyErr_PrintEx},
+     {"PyErr_NoMemory", (PYTHON_PROC*)&dll_PyErr_NoMemory},
+     {"PyErr_Occurred", (PYTHON_PROC*)&dll_PyErr_Occurred},
+     {"PyErr_SetNone", (PYTHON_PROC*)&dll_PyErr_SetNone},
+     {"PyErr_SetString", (PYTHON_PROC*)&dll_PyErr_SetString},
++    {"PyErr_SetObject", (PYTHON_PROC*)&dll_PyErr_SetObject},
+     {"PyEval_InitThreads", (PYTHON_PROC*)&dll_PyEval_InitThreads},
+     {"PyEval_RestoreThread", (PYTHON_PROC*)&dll_PyEval_RestoreThread},
+     {"PyEval_SaveThread", (PYTHON_PROC*)&dll_PyEval_SaveThread},
+@@ -283,45 +475,121 @@
+ # endif
+     {"PyInt_AsLong", (PYTHON_PROC*)&dll_PyInt_AsLong},
+     {"PyInt_FromLong", (PYTHON_PROC*)&dll_PyInt_FromLong},
++    {"PyLong_AsLong", (PYTHON_PROC*)&dll_PyLong_AsLong},
++    {"PyLong_FromLong", (PYTHON_PROC*)&dll_PyLong_FromLong},
++    {"PyBool_Type", (PYTHON_PROC*)&dll_PyBool_Type},
+     {"PyInt_Type", (PYTHON_PROC*)&dll_PyInt_Type},
++    {"PyLong_Type", (PYTHON_PROC*)&dll_PyLong_Type},
+     {"PyList_GetItem", (PYTHON_PROC*)&dll_PyList_GetItem},
+     {"PyList_Append", (PYTHON_PROC*)&dll_PyList_Append},
+     {"PyList_New", (PYTHON_PROC*)&dll_PyList_New},
+     {"PyList_SetItem", (PYTHON_PROC*)&dll_PyList_SetItem},
+     {"PyList_Size", (PYTHON_PROC*)&dll_PyList_Size},
+     {"PyList_Type", (PYTHON_PROC*)&dll_PyList_Type},
++    {"PySequence_Size", (PYTHON_PROC*)&dll_PySequence_Size},
++    {"PySequence_Check", (PYTHON_PROC*)&dll_PySequence_Check},
++    {"PySequence_GetItem", (PYTHON_PROC*)&dll_PySequence_GetItem},
++    {"PySequence_Fast", (PYTHON_PROC*)&dll_PySequence_Fast},
++    {"PyTuple_GetItem", (PYTHON_PROC*)&dll_PyTuple_GetItem},
++    {"PyTuple_Size", (PYTHON_PROC*)&dll_PyTuple_Size},
++    {"PyTuple_Type", (PYTHON_PROC*)&dll_PyTuple_Type},
+     {"PyImport_ImportModule", (PYTHON_PROC*)&dll_PyImport_ImportModule},
+     {"PyDict_GetItemString", (PYTHON_PROC*)&dll_PyDict_GetItemString},
++    {"PyDict_Next", (PYTHON_PROC*)&dll_PyDict_Next},
+     {"PyDict_New", (PYTHON_PROC*)&dll_PyDict_New},
++    {"PyDict_Type", (PYTHON_PROC*)&dll_PyDict_Type},
++# ifndef PY_NO_MAPPING_KEYS
++    {"PyMapping_Keys", (PYTHON_PROC*)&dll_PyMapping_Keys},
++# endif
++    {"PyObject_GetItem", (PYTHON_PROC*)&dll_PyObject_GetItem},
++    {"PyObject_CallMethod", (PYTHON_PROC*)&dll_PyObject_CallMethod},
++    {"PyMapping_Check", (PYTHON_PROC*)&dll_PyMapping_Check},
++    {"PyIter_Next", (PYTHON_PROC*)&dll_PyIter_Next},
+     {"PyModule_GetDict", (PYTHON_PROC*)&dll_PyModule_GetDict},
+     {"PyRun_SimpleString", (PYTHON_PROC*)&dll_PyRun_SimpleString},
++    {"PyRun_String", (PYTHON_PROC*)&dll_PyRun_String},
++    {"PyObject_GetAttrString", (PYTHON_PROC*)&dll_PyObject_GetAttrString},
++    {"PyObject_HasAttrString", (PYTHON_PROC*)&dll_PyObject_HasAttrString},
++    {"PyObject_SetAttrString", (PYTHON_PROC*)&dll_PyObject_SetAttrString},
++    {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&dll_PyObject_CallFunctionObjArgs},
++    {"PyObject_Call", (PYTHON_PROC*)&dll_PyObject_Call},
+     {"PyString_AsString", (PYTHON_PROC*)&dll_PyString_AsString},
++    {"PyString_AsStringAndSize", (PYTHON_PROC*)&dll_PyString_AsStringAndSize},
+     {"PyString_FromString", (PYTHON_PROC*)&dll_PyString_FromString},
++    {"PyString_FromFormat", (PYTHON_PROC*)&dll_PyString_FromFormat},
+     {"PyString_FromStringAndSize", (PYTHON_PROC*)&dll_PyString_FromStringAndSize},
+     {"PyString_Size", (PYTHON_PROC*)&dll_PyString_Size},
+     {"PyString_Type", (PYTHON_PROC*)&dll_PyString_Type},
++    {"PyUnicode_Type", (PYTHON_PROC*)&dll_PyUnicode_Type},
++    {"PyFloat_Type", (PYTHON_PROC*)&dll_PyFloat_Type},
++    {"PyFloat_AsDouble", (PYTHON_PROC*)&dll_PyFloat_AsDouble},
++    {"PyFloat_FromDouble", (PYTHON_PROC*)&dll_PyFloat_FromDouble},
++    {"PyImport_AddModule", (PYTHON_PROC*)&dll_PyImport_AddModule},
+     {"PySys_SetObject", (PYTHON_PROC*)&dll_PySys_SetObject},
+     {"PySys_SetArgv", (PYTHON_PROC*)&dll_PySys_SetArgv},
+     {"PyType_Type", (PYTHON_PROC*)&dll_PyType_Type},
+-    {"Py_BuildValue", (PYTHON_PROC*)&dll_Py_BuildValue},
++    {"PyType_Ready", (PYTHON_PROC*)&dll_PyType_Ready},
++    {"PyType_GenericAlloc", (PYTHON_PROC*)&dll_PyType_GenericAlloc},
+     {"Py_FindMethod", (PYTHON_PROC*)&dll_Py_FindMethod},
+-# if (PY_VERSION_HEX >= 0x02050000) && SIZEOF_SIZE_T != SIZEOF_INT
+-    {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
+-# else
+-    {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
+-# endif
++    {"Py_SetPythonHome", (PYTHON_PROC*)&dll_Py_SetPythonHome},
+     {"Py_Initialize", (PYTHON_PROC*)&dll_Py_Initialize},
+     {"Py_Finalize", (PYTHON_PROC*)&dll_Py_Finalize},
+     {"Py_IsInitialized", (PYTHON_PROC*)&dll_Py_IsInitialized},
+     {"_PyObject_New", (PYTHON_PROC*)&dll__PyObject_New},
++    {"_PyObject_GC_New", (PYTHON_PROC*)&dll__PyObject_GC_New},
++# ifdef Py_underscore_GC
++    {"_PyObject_GC_Del", (PYTHON_PROC*)&dll__PyObject_GC_Del},
++    {"_PyObject_GC_UnTrack", (PYTHON_PROC*)&dll__PyObject_GC_UnTrack},
++# else
++    {"PyObject_GC_Del", (PYTHON_PROC*)&dll_PyObject_GC_Del},
++    {"PyObject_GC_UnTrack", (PYTHON_PROC*)&dll_PyObject_GC_UnTrack},
++# endif
+     {"PyObject_Init", (PYTHON_PROC*)&dll__PyObject_Init},
++    {"PyObject_GetIter", (PYTHON_PROC*)&dll_PyObject_GetIter},
++    {"PyObject_IsTrue", (PYTHON_PROC*)&dll_PyObject_IsTrue},
++# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02070000
++    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&dll__PyObject_NextNotImplemented},
++# endif
+     {"_Py_NoneStruct", (PYTHON_PROC*)&dll__Py_NoneStruct},
++    {"_Py_ZeroStruct", (PYTHON_PROC*)&dll__Py_ZeroStruct},
++    {"_Py_TrueStruct", (PYTHON_PROC*)&dll__Py_TrueStruct},
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02020000
++#  ifdef Py_DEBUG
++    {"_Py_NegativeRefcount", (PYTHON_PROC*)&dll__Py_NegativeRefcount},
++    {"_Py_RefTotal", (PYTHON_PROC*)&dll__Py_RefTotal},
++    {"_Py_Dealloc", (PYTHON_PROC*)&dll__Py_Dealloc},
++#  endif
+     {"PyType_IsSubtype", (PYTHON_PROC*)&dll_PyType_IsSubtype},
+ # endif
+ # if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02030000
++#  if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
++    {"_PyObject_DebugFree", (PYTHON_PROC*)&dll__PyObject_DebugFree},
++    {"_PyObject_DebugMalloc", (PYTHON_PROC*)&dll__PyObject_DebugMalloc},
++#  else
+     {"PyObject_Malloc", (PYTHON_PROC*)&dll_PyObject_Malloc},
+     {"PyObject_Free", (PYTHON_PROC*)&dll_PyObject_Free},
++#  endif
++# endif
++# if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000 \
++	&& SIZEOF_SIZE_T != SIZEOF_INT
++#  ifdef Py_DEBUG
++    {"Py_InitModule4TraceRefs_64", (PYTHON_PROC*)&dll_Py_InitModule4},
++#  else
++    {"Py_InitModule4_64", (PYTHON_PROC*)&dll_Py_InitModule4},
++#  endif
++# else
++#  ifdef Py_DEBUG
++    {"Py_InitModule4TraceRefs", (PYTHON_PROC*)&dll_Py_InitModule4},
++#  else
++    {"Py_InitModule4", (PYTHON_PROC*)&dll_Py_InitModule4},
++#  endif
++# endif
++# ifdef PY_USE_CAPSULE
++    {"PyCapsule_New", (PYTHON_PROC*)&dll_PyCapsule_New},
++    {"PyCapsule_GetPointer", (PYTHON_PROC*)&dll_PyCapsule_GetPointer},
++# else
++    {"PyCObject_FromVoidPtr", (PYTHON_PROC*)&dll_PyCObject_FromVoidPtr},
++    {"PyCObject_AsVoidPtr", (PYTHON_PROC*)&dll_PyCObject_AsVoidPtr},
+ # endif
+     {"", NULL},
+ };
+@@ -348,14 +616,16 @@
+ python_runtime_link_init(char *libname, int verbose)
+ {
+     int i;
++    void *ucs_as_encoded_string;
+ 
+-#if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON3)
++#if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON3)
+     /* Can't have Python and Python3 loaded at the same time.
+      * It cause a crash, because RTLD_GLOBAL is needed for
+      * standard C extension libraries of one or both python versions. */
+     if (python3_loaded())
+     {
+-	EMSG(_("E836: This Vim cannot execute :python after using :py3"));
++	if (verbose)
++	    EMSG(_("E836: This Vim cannot execute :python after using :py3"));
+ 	return FAIL;
+     }
+ #endif
+@@ -382,6 +652,25 @@
+ 	    return FAIL;
+ 	}
+     }
++
++    /* Load unicode functions separately as only the ucs2 or the ucs4 functions
++     * will be present in the library. */
++    ucs_as_encoded_string = symbol_from_dll(hinstPython,
++					     "PyUnicodeUCS2_AsEncodedString");
++    if (ucs_as_encoded_string == NULL)
++	ucs_as_encoded_string = symbol_from_dll(hinstPython,
++					     "PyUnicodeUCS4_AsEncodedString");
++    if (ucs_as_encoded_string != NULL)
++	py_PyUnicode_AsEncodedString = ucs_as_encoded_string;
++    else
++    {
++	close_dll(hinstPython);
++	hinstPython = 0;
++	if (verbose)
++	    EMSG2(_(e_loadfunc), "PyUnicode_UCSX_*");
++	return FAIL;
++    }
++
+     return OK;
+ }
+ 
+@@ -406,23 +695,65 @@
+     PyObject *exdict = PyModule_GetDict(exmod);
+     imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
+     imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
++    imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
+     imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
+     imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
+     imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
++    imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+     Py_XINCREF(imp_PyExc_AttributeError);
+     Py_XINCREF(imp_PyExc_IndexError);
++    Py_XINCREF(imp_PyExc_KeyError);
+     Py_XINCREF(imp_PyExc_KeyboardInterrupt);
+     Py_XINCREF(imp_PyExc_TypeError);
+     Py_XINCREF(imp_PyExc_ValueError);
++    Py_XINCREF(imp_PyExc_RuntimeError);
+     Py_XDECREF(exmod);
+ }
+ #endif /* DYNAMIC_PYTHON */
+ 
+-static PyObject *BufferNew (buf_T *);
+-static PyObject *WindowNew(win_T *);
+-static PyObject *LineToString(const char *);
++static int initialised = 0;
++#define PYINITIALISED initialised
+ 
+-static PyTypeObject RangeType;
++#define DESTRUCTOR_FINISH(self) self->ob_type->tp_free((PyObject*)self);
++
++#define WIN_PYTHON_REF(win) win->w_python_ref
++#define BUF_PYTHON_REF(buf) buf->b_python_ref
++#define TAB_PYTHON_REF(tab) tab->tp_python_ref
++
++static PyObject *OutputGetattr(PyObject *, char *);
++static PyObject *BufferGetattr(PyObject *, char *);
++static PyObject *WindowGetattr(PyObject *, char *);
++static PyObject *TabPageGetattr(PyObject *, char *);
++static PyObject *RangeGetattr(PyObject *, char *);
++static PyObject *DictionaryGetattr(PyObject *, char*);
++static PyObject *ListGetattr(PyObject *, char *);
++static PyObject *FunctionGetattr(PyObject *, char *);
++
++#ifndef Py_VISIT
++# define Py_VISIT(obj) visit(obj, arg)
++#endif
++#ifndef Py_CLEAR
++# define Py_CLEAR(obj) \
++    { \
++	Py_XDECREF(obj); \
++	obj = NULL; \
++    }
++#endif
++
++#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
++    static void *
++py_memsave(void *p, size_t len)
++{
++    void	*r;
++
++    if (!(r = PyMem_Malloc(len)))
++	return NULL;
++    mch_memmove(r, p, len);
++    return r;
++}
++
++# define PY_STRSAVE(s) ((char_u *) py_memsave(s, STRLEN(s) + 1))
++#endif
+ 
+ /*
+  * Include the code shared with if_python3.c
+@@ -434,35 +765,19 @@
+  * Internal function prototypes.
+  */
+ 
+-static PyInt RangeStart;
+-static PyInt RangeEnd;
+-
+-static void PythonIO_Flush(void);
+-static int PythonIO_Init(void);
+ static int PythonMod_Init(void);
+ 
+-/* Utility functions for the vim/python interface
+- * ----------------------------------------------
+- */
+-
+-static int SetBufferLineList(buf_T *, PyInt, PyInt, PyObject *, PyInt *);
+-
+ 
+ /******************************************************
+  * 1. Python interpreter main program.
+  */
+ 
+-static int initialised = 0;
+-
+ #if PYTHON_API_VERSION < 1007 /* Python 1.4 */
+ typedef PyObject PyThreadState;
+ #endif
+ 
+-#ifdef PY_CAN_RECURSE
+-static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
+-#else
++#ifndef PY_CAN_RECURSE
+ static PyThreadState *saved_python_thread = NULL;
+-#endif
+ 
+ /*
+  * Suspend a thread of the Python interpreter, other threads are allowed to
+@@ -471,11 +786,7 @@
+     static void
+ Python_SaveThread(void)
+ {
+-#ifdef PY_CAN_RECURSE
+-    PyGILState_Release(pygilstate);
+-#else
+     saved_python_thread = PyEval_SaveThread();
+-#endif
+ }
+ 
+ /*
+@@ -485,13 +796,10 @@
+     static void
+ Python_RestoreThread(void)
+ {
+-#ifdef PY_CAN_RECURSE
+-    pygilstate = PyGILState_Ensure();
+-#else
+     PyEval_RestoreThread(saved_python_thread);
+     saved_python_thread = NULL;
+-#endif
+ }
++#endif
+ 
+     void
+ python_end()
+@@ -507,14 +815,22 @@
+ #ifdef DYNAMIC_PYTHON
+     if (hinstPython && Py_IsInitialized())
+     {
++# ifdef PY_CAN_RECURSE
++	PyGILState_Ensure();
++# else
+ 	Python_RestoreThread();	    /* enter python */
++# endif
+ 	Py_Finalize();
+     }
+     end_dynamic_python();
+ #else
+     if (Py_IsInitialized())
+     {
++# ifdef PY_CAN_RECURSE
++	PyGILState_Ensure();
++# else
+ 	Python_RestoreThread();	    /* enter python */
++# endif
+ 	Py_Finalize();
+     }
+ #endif
+@@ -543,6 +859,10 @@
+ 	}
+ #endif
+ 
++#ifdef PYTHON_HOME
++	Py_SetPythonHome(PYTHON_HOME);
++#endif
++
+ 	init_structs();
+ 
+ #if !defined(MACOS) || defined(MACOS_X_UNIX)
+@@ -550,27 +870,40 @@
+ #else
+ 	PyMac_Initialize();
+ #endif
+-	/* initialise threads */
++	/* Initialise threads, and below save the state using
++	 * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
++	 * specific state (such as the system trace hook), will be lost
++	 * between invocations of Python code. */
+ 	PyEval_InitThreads();
+-
+ #ifdef DYNAMIC_PYTHON
+ 	get_exceptions();
+ #endif
+ 
+-	if (PythonIO_Init())
++	if (PythonIO_Init_io())
+ 	    goto fail;
+ 
+ 	if (PythonMod_Init())
+ 	    goto fail;
+ 
++	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
++
+ 	/* Remove the element from sys.path that was added because of our
+ 	 * argv[0] value in PythonMod_Init().  Previously we used an empty
+-	 * string, but dependinding on the OS we then get an empty entry or
++	 * string, but depending on the OS we then get an empty entry or
+ 	 * the current directory in sys.path. */
+ 	PyRun_SimpleString("import sys; sys.path = filter(lambda x: x != '/must>not&exist', sys.path)");
+ 
+-	/* the first python thread is vim's, release the lock */
+-	Python_SaveThread();
++	/* lock is created and acquired in PyEval_InitThreads() and thread
++	 * state is created in Py_Initialize()
++	 * there _PyGILState_NoteThreadState() also sets gilcounter to 1
++	 * (python must have threads enabled!)
++	 * so the following does both: unlock GIL and save thread state in TLS
++	 * without deleting thread state
++	 */
++#ifndef PY_CAN_RECURSE
++	saved_python_thread =
++#endif
++	    PyEval_SaveThread();
+ 
+ 	initialised = 1;
+     }
+@@ -580,7 +913,7 @@
+ fail:
+     /* We call PythonIO_Flush() here to print any Python errors.
+      * This is OK, as it is possible to call this function even
+-     * if PythonIO_Init() has not completed successfully (it will
++     * if PythonIO_Init_io() has not completed successfully (it will
+      * not do anything in this case).
+      */
+     PythonIO_Flush();
+@@ -591,7 +924,7 @@
+  * External interface
+  */
+     static void
+-DoPythonCommand(exarg_T *eap, const char *cmd)
++DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
+ {
+ #ifndef PY_CAN_RECURSE
+     static int		recursive = 0;
+@@ -602,6 +935,9 @@
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+     char		*saved_locale;
+ #endif
++#ifdef PY_CAN_RECURSE
++    PyGILState_STATE	pygilstate;
++#endif
+ 
+ #ifndef PY_CAN_RECURSE
+     if (recursive)
+@@ -621,8 +957,8 @@
+     if (Python_Init())
+ 	goto theend;
+ 
+-    RangeStart = eap->line1;
+-    RangeEnd = eap->line2;
++    init_range(arg);
++
+     Python_Release_Vim();	    /* leave vim */
+ 
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+@@ -633,22 +969,34 @@
+     else
+     {
+ 	/* Need to make a copy, value may change when setting new locale. */
+-	saved_locale = (char *)vim_strsave((char_u *)saved_locale);
++	saved_locale = (char *) PY_STRSAVE(saved_locale);
+ 	(void)setlocale(LC_NUMERIC, "C");
+     }
+ #endif
+ 
++#ifdef PY_CAN_RECURSE
++    pygilstate = PyGILState_Ensure();
++#else
+     Python_RestoreThread();	    /* enter python */
++#endif
+ 
+-    PyRun_SimpleString((char *)(cmd));
++    run((char *) cmd, arg
++#ifdef PY_CAN_RECURSE
++	    , &pygilstate
++#endif
++	    );
+ 
++#ifdef PY_CAN_RECURSE
++    PyGILState_Release(pygilstate);
++#else
+     Python_SaveThread();	    /* leave python */
++#endif
+ 
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+     if (saved_locale != NULL)
+     {
+ 	(void)setlocale(LC_NUMERIC, saved_locale);
+-	vim_free(saved_locale);
++	PyMem_Free(saved_locale);
+     }
+ #endif
+ 
+@@ -662,7 +1010,7 @@
+ #ifndef PY_CAN_RECURSE
+     --recursive;
+ #endif
+-    return;	    /* keeps lint happy */
++    return;
+ }
+ 
+ /*
+@@ -676,10 +1024,10 @@
+     script = script_get(eap, eap->arg);
+     if (!eap->skip)
+     {
+-	if (script == NULL)
+-	    DoPythonCommand(eap, (char *)eap->arg);
+-	else
+-	    DoPythonCommand(eap, (char *)script);
++	DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script,
++		(rangeinitializer) init_range_cmd,
++		(runner) run_cmd,
++		(void *) eap);
+     }
+     vim_free(script);
+ }
+@@ -725,7 +1073,19 @@
+     *p++ = '\0';
+ 
+     /* Execute the file */
+-    DoPythonCommand(eap, buffer);
++    DoPyCommand(buffer,
++	    (rangeinitializer) init_range_cmd,
++	    (runner) run_cmd,
++	    (void *) eap);
++}
++
++    void
++ex_pydo(exarg_T *eap)
++{
++    DoPyCommand((char *)eap->arg,
++	    (rangeinitializer) init_range_cmd,
++	    (runner)run_do,
++	    (void *)eap);
+ }
+ 
+ /******************************************************
+@@ -740,44 +1100,12 @@
+ {
+     if (strcmp(name, "softspace") == 0)
+ 	return PyInt_FromLong(((OutputObject *)(self))->softspace);
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, OutputAttrs);
+ 
+     return Py_FindMethod(OutputMethods, self, name);
+ }
+ 
+-    static int
+-OutputSetattr(PyObject *self, char *name, PyObject *val)
+-{
+-    if (val == NULL) {
+-	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+-	return -1;
+-    }
+-
+-    if (strcmp(name, "softspace") == 0)
+-    {
+-	if (!PyInt_Check(val)) {
+-	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+-	    return -1;
+-	}
+-
+-	((OutputObject *)(self))->softspace = PyInt_AsLong(val);
+-	return 0;
+-    }
+-
+-    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
+-    return -1;
+-}
+-
+-/***************/
+-
+-    static int
+-PythonIO_Init(void)
+-{
+-    /* Fixups... */
+-    OutputType.ob_type = &PyType_Type;
+-
+-    return PythonIO_Init_io();
+-}
+-
+ /******************************************************
+  * 3. Implementation of the Vim module for Python
+  */
+@@ -788,22 +1116,12 @@
+ 
+ #define WindowType_Check(obj) ((obj)->ob_type == &WindowType)
+ 
+-static void WindowDestructor(PyObject *);
+-static PyObject *WindowGetattr(PyObject *, char *);
+-
+ /* Buffer type - Implementation functions
+  * --------------------------------------
+  */
+ 
+ #define BufferType_Check(obj) ((obj)->ob_type == &BufferType)
+ 
+-static void BufferDestructor(PyObject *);
+-static PyObject *BufferGetattr(PyObject *, char *);
+-static PyObject *BufferRepr(PyObject *);
+-
+-static PyInt BufferLength(PyObject *);
+-static PyObject *BufferItem(PyObject *, PyInt);
+-static PyObject *BufferSlice(PyObject *, PyInt, PyInt);
+ static PyInt BufferAssItem(PyObject *, PyInt, PyObject *);
+ static PyInt BufferAssSlice(PyObject *, PyInt, PyInt, PyObject *);
+ 
+@@ -820,239 +1138,72 @@
+  * -----------------------------------------------
+  */
+ 
+-static PyObject *CurrentGetattr(PyObject *, char *);
+-static int CurrentSetattr(PyObject *, char *, PyObject *);
+-
+-/* Common routines for buffers and line ranges
+- * -------------------------------------------
+- */
+-
+-    static PyInt
+-RBAssSlice(BufferObject *self, PyInt lo, PyInt hi, PyObject *val, PyInt start, PyInt end, PyInt *new_end)
+-{
+-    PyInt size;
+-    PyInt len_change;
+-
+-    /* Self must be a valid buffer */
+-    if (CheckBuffer(self))
+-	return -1;
+-
+-    /* Sort out the slice range */
+-    size = end - start + 1;
+-
+-    if (lo < 0)
+-	lo = 0;
+-    else if (lo > size)
+-	lo = size;
+-    if (hi < 0)
+-	hi = 0;
+-    if (hi < lo)
+-	hi = lo;
+-    else if (hi > size)
+-	hi = size;
+-
+-    if (SetBufferLineList(self->buf, lo + start, hi + start,
+-						    val, &len_change) == FAIL)
+-	return -1;
+-
+-    if (new_end)
+-	*new_end = end + len_change;
+-
+-    return 0;
+-}
+-
+ static PySequenceMethods BufferAsSeq = {
+     (PyInquiry)		BufferLength,	    /* sq_length,    len(x)   */
+-    (binaryfunc)	0, /* BufferConcat, */	     /* sq_concat,    x+y      */
+-    (PyIntArgFunc)	0, /* BufferRepeat, */	     /* sq_repeat,    x*n      */
++    (binaryfunc)	0,		    /* BufferConcat, sq_concat, x+y */
++    (PyIntArgFunc)	0,		    /* BufferRepeat, sq_repeat, x*n */
+     (PyIntArgFunc)	BufferItem,	    /* sq_item,      x[i]     */
+     (PyIntIntArgFunc)	BufferSlice,	    /* sq_slice,     x[i:j]   */
+     (PyIntObjArgProc)	BufferAssItem,	    /* sq_ass_item,  x[i]=v   */
+-    (PyIntIntObjArgProc)	BufferAssSlice,     /* sq_ass_slice, x[i:j]=v */
+-};
+-
+-static PyTypeObject BufferType = {
+-    PyObject_HEAD_INIT(0)
++    (PyIntIntObjArgProc) BufferAssSlice,    /* sq_ass_slice, x[i:j]=v */
++    (objobjproc)	0,
++    (binaryfunc)	0,
+     0,
+-    "buffer",
+-    sizeof(BufferObject),
+-    0,
+-
+-    (destructor)    BufferDestructor,	/* tp_dealloc,	refcount==0  */
+-    (printfunc)     0,			/* tp_print,	print x      */
+-    (getattrfunc)   BufferGetattr,	/* tp_getattr,	x.attr	     */
+-    (setattrfunc)   0,			/* tp_setattr,	x.attr=v     */
+-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
+-    (reprfunc)	    BufferRepr,		/* tp_repr,	`x`, print x */
+-
+-    0,		    /* as number */
+-    &BufferAsSeq,   /* as sequence */
+-    0,		    /* as mapping */
+-
+-    (hashfunc) 0,			/* tp_hash, dict(x) */
+-    (ternaryfunc) 0,			/* tp_call, x()     */
+-    (reprfunc) 0,			/* tp_str,  str(x)  */
+ };
+ 
+ /* Buffer object - Implementation
+  */
+ 
+     static PyObject *
+-BufferNew(buf_T *buf)
+-{
+-    /* We need to handle deletion of buffers underneath us.
+-     * If we add a "b_python_ref" field to the buf_T structure,
+-     * then we can get at it in buf_freeall() in vim. We then
+-     * need to create only ONE Python object per buffer - if
+-     * we try to create a second, just INCREF the existing one
+-     * and return it. The (single) Python object referring to
+-     * the buffer is stored in "b_python_ref".
+-     * Question: what to do on a buf_freeall(). We'll probably
+-     * have to either delete the Python object (DECREF it to
+-     * zero - a bad idea, as it leaves dangling refs!) or
+-     * set the buf_T * value to an invalid value (-1?), which
+-     * means we need checks in all access functions... Bah.
+-     */
+-
+-    BufferObject *self;
+-
+-    if (buf->b_python_ref != NULL)
+-    {
+-	self = buf->b_python_ref;
+-	Py_INCREF(self);
+-    }
+-    else
+-    {
+-	self = PyObject_NEW(BufferObject, &BufferType);
+-	if (self == NULL)
+-	    return NULL;
+-	self->buf = buf;
+-	buf->b_python_ref = self;
+-    }
+-
+-    return (PyObject *)(self);
+-}
+-
+-    static void
+-BufferDestructor(PyObject *self)
+-{
+-    BufferObject *this = (BufferObject *)(self);
+-
+-    if (this->buf && this->buf != INVALID_BUFFER_VALUE)
+-	this->buf->b_python_ref = NULL;
+-
+-    Py_DECREF(self);
+-}
+-
+-    static PyObject *
+ BufferGetattr(PyObject *self, char *name)
+ {
+-    BufferObject *this = (BufferObject *)(self);
++    PyObject *r;
++
++    if ((r = BufferAttrValid((BufferObject *)(self), name)))
++	return r;
+ 
+-    if (CheckBuffer(this))
++    if (CheckBuffer((BufferObject *)(self)))
+ 	return NULL;
+ 
+-    if (strcmp(name, "name") == 0)
+-	return Py_BuildValue("s", this->buf->b_ffname);
+-    else if (strcmp(name, "number") == 0)
+-	return Py_BuildValue(Py_ssize_t_fmt, this->buf->b_fnum);
+-    else if (strcmp(name,"__members__") == 0)
+-	return Py_BuildValue("[ss]", "name", "number");
++    r = BufferAttr((BufferObject *)(self), name);
++    if (r || PyErr_Occurred())
++	return r;
+     else
+ 	return Py_FindMethod(BufferMethods, self, name);
+ }
+ 
+-    static PyObject *
+-BufferRepr(PyObject *self)
+-{
+-    static char repr[100];
+-    BufferObject *this = (BufferObject *)(self);
+-
+-    if (this->buf == INVALID_BUFFER_VALUE)
+-    {
+-	vim_snprintf(repr, 100, _("<buffer object (deleted) at %p>"), (self));
+-	return PyString_FromString(repr);
+-    }
+-    else
+-    {
+-	char *name = (char *)this->buf->b_fname;
+-	PyInt len;
+-
+-	if (name == NULL)
+-	    name = "";
+-	len = strlen(name);
+-
+-	if (len > 35)
+-	    name = name + (35 - len);
+-
+-	vim_snprintf(repr, 100, "<buffer %s%s>", len > 35 ? "..." : "", name);
+-
+-	return PyString_FromString(repr);
+-    }
+-}
+-
+ /******************/
+ 
+     static PyInt
+-BufferLength(PyObject *self)
+-{
+-    /* HOW DO WE SIGNAL AN ERROR FROM THIS FUNCTION? */
+-    if (CheckBuffer((BufferObject *)(self)))
+-	return -1; /* ??? */
+-
+-    return (((BufferObject *)(self))->buf->b_ml.ml_line_count);
+-}
+-
+-    static PyObject *
+-BufferItem(PyObject *self, PyInt n)
+-{
+-    return RBItem((BufferObject *)(self), n, 1,
+-		  (int)((BufferObject *)(self))->buf->b_ml.ml_line_count);
+-}
+-
+-    static PyObject *
+-BufferSlice(PyObject *self, PyInt lo, PyInt hi)
+-{
+-    return RBSlice((BufferObject *)(self), lo, hi, 1,
+-		   (int)((BufferObject *)(self))->buf->b_ml.ml_line_count);
+-}
+-
+-    static PyInt
+ BufferAssItem(PyObject *self, PyInt n, PyObject *val)
+ {
+-    return RBAsItem((BufferObject *)(self), n, val, 1,
+-		     (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+-		     NULL);
++    return RBAsItem((BufferObject *)(self), n, val, 1, -1, NULL);
+ }
+ 
+     static PyInt
+ BufferAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+-    return RBAssSlice((BufferObject *)(self), lo, hi, val, 1,
+-		      (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+-		      NULL);
++    return RBAsSlice((BufferObject *)(self), lo, hi, val, 1, -1, NULL);
+ }
+ 
+ static PySequenceMethods RangeAsSeq = {
+-    (PyInquiry)		RangeLength,	    /* sq_length,    len(x)   */
+-    (binaryfunc)	0, /* RangeConcat, */	     /* sq_concat,    x+y      */
+-    (PyIntArgFunc)	0, /* RangeRepeat, */	     /* sq_repeat,    x*n      */
+-    (PyIntArgFunc)	RangeItem,	    /* sq_item,      x[i]     */
+-    (PyIntIntArgFunc)	RangeSlice,	    /* sq_slice,     x[i:j]   */
+-    (PyIntObjArgProc)	RangeAssItem,	    /* sq_ass_item,  x[i]=v   */
+-    (PyIntIntObjArgProc)	RangeAssSlice,	    /* sq_ass_slice, x[i:j]=v */
++    (PyInquiry)		RangeLength,	      /* sq_length,    len(x)   */
++    (binaryfunc)	0, /* RangeConcat, */ /* sq_concat,    x+y      */
++    (PyIntArgFunc)	0, /* RangeRepeat, */ /* sq_repeat,    x*n      */
++    (PyIntArgFunc)	RangeItem,	      /* sq_item,      x[i]     */
++    (PyIntIntArgFunc)	RangeSlice,	      /* sq_slice,     x[i:j]   */
++    (PyIntObjArgProc)	RangeAssItem,	      /* sq_ass_item,  x[i]=v   */
++    (PyIntIntObjArgProc) RangeAssSlice,	      /* sq_ass_slice, x[i:j]=v */
++    (objobjproc)	0,
++#if PY_MAJOR_VERSION >= 2
++    (binaryfunc)	0,
++    0,
++#endif
+ };
+ 
+ /* Line range object - Implementation
+  */
+ 
+-    static void
+-RangeDestructor(PyObject *self)
+-{
+-    Py_DECREF(((RangeObject *)(self))->buf);
+-    Py_DECREF(self);
+-}
+-
+     static PyObject *
+ RangeGetattr(PyObject *self, char *name)
+ {
+@@ -1060,6 +1211,8 @@
+ 	return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->start - 1);
+     else if (strcmp(name, "end") == 0)
+ 	return Py_BuildValue(Py_ssize_t_fmt, ((RangeObject *)(self))->end - 1);
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, RangeAttrs);
+     else
+ 	return Py_FindMethod(RangeMethods, self, name);
+ }
+@@ -1078,283 +1231,101 @@
+     static PyInt
+ RangeAssSlice(PyObject *self, PyInt lo, PyInt hi, PyObject *val)
+ {
+-    return RBAssSlice(((RangeObject *)(self))->buf, lo, hi, val,
++    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
+ 		      ((RangeObject *)(self))->start,
+ 		      ((RangeObject *)(self))->end,
+ 		      &((RangeObject *)(self))->end);
+ }
+ 
+-/* Buffer list object - Definitions
+- */
+-
+-typedef struct
+-{
+-    PyObject_HEAD
+-} BufListObject;
+-
+-static PySequenceMethods BufListAsSeq = {
+-    (PyInquiry)		BufListLength,	    /* sq_length,    len(x)   */
+-    (binaryfunc)	0,		    /* sq_concat,    x+y      */
+-    (PyIntArgFunc)	0,		    /* sq_repeat,    x*n      */
+-    (PyIntArgFunc)	BufListItem,	    /* sq_item,      x[i]     */
+-    (PyIntIntArgFunc)	0,		    /* sq_slice,     x[i:j]   */
+-    (PyIntObjArgProc)	0,		    /* sq_ass_item,  x[i]=v   */
+-    (PyIntIntObjArgProc)	0,		    /* sq_ass_slice, x[i:j]=v */
+-};
+-
+-static PyTypeObject BufListType = {
+-    PyObject_HEAD_INIT(0)
+-    0,
+-    "buffer list",
+-    sizeof(BufListObject),
+-    0,
+-
+-    (destructor)    0,			/* tp_dealloc,	refcount==0  */
+-    (printfunc)     0,			/* tp_print,	print x      */
+-    (getattrfunc)   0,			/* tp_getattr,	x.attr	     */
+-    (setattrfunc)   0,			/* tp_setattr,	x.attr=v     */
+-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
+-    (reprfunc)	    0,			/* tp_repr,	`x`, print x */
+-
+-    0,		    /* as number */
+-    &BufListAsSeq,  /* as sequence */
+-    0,		    /* as mapping */
+-
+-    (hashfunc) 0,			/* tp_hash, dict(x) */
+-    (ternaryfunc) 0,			/* tp_call, x()     */
+-    (reprfunc) 0,			/* tp_str,  str(x)  */
+-};
+-
+-/* Window object - Definitions
+- */
+-
+-static struct PyMethodDef WindowMethods[] = {
+-    /* name,	    function,		calling,    documentation */
+-    { NULL,	    NULL,		0,	    NULL }
+-};
+-
+-static PyTypeObject WindowType = {
+-    PyObject_HEAD_INIT(0)
+-    0,
+-    "window",
+-    sizeof(WindowObject),
+-    0,
+-
+-    (destructor)    WindowDestructor,	/* tp_dealloc,	refcount==0  */
+-    (printfunc)     0,			/* tp_print,	print x      */
+-    (getattrfunc)   WindowGetattr,	/* tp_getattr,	x.attr	     */
+-    (setattrfunc)   WindowSetattr,	/* tp_setattr,	x.attr=v     */
+-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
+-    (reprfunc)	    WindowRepr,		/* tp_repr,	`x`, print x */
+-
+-    0,		    /* as number */
+-    0,		    /* as sequence */
+-    0,		    /* as mapping */
+-
+-    (hashfunc) 0,			/* tp_hash, dict(x) */
+-    (ternaryfunc) 0,			/* tp_call, x()     */
+-    (reprfunc) 0,			/* tp_str,  str(x)  */
+-};
+-
+-/* Window object - Implementation
++/* TabPage object - Implementation
+  */
+ 
+     static PyObject *
+-WindowNew(win_T *win)
++TabPageGetattr(PyObject *self, char *name)
+ {
+-    /* We need to handle deletion of windows underneath us.
+-     * If we add a "w_python_ref" field to the win_T structure,
+-     * then we can get at it in win_free() in vim. We then
+-     * need to create only ONE Python object per window - if
+-     * we try to create a second, just INCREF the existing one
+-     * and return it. The (single) Python object referring to
+-     * the window is stored in "w_python_ref".
+-     * On a win_free() we set the Python object's win_T* field
+-     * to an invalid value. We trap all uses of a window
+-     * object, and reject them if the win_T* field is invalid.
+-     */
++    PyObject *r;
+ 
+-    WindowObject *self;
++    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
++	return r;
+ 
+-    if (win->w_python_ref)
+-    {
+-	self = win->w_python_ref;
+-	Py_INCREF(self);
+-    }
+-    else
+-    {
+-	self = PyObject_NEW(WindowObject, &WindowType);
+-	if (self == NULL)
+-	    return NULL;
+-	self->win = win;
+-	win->w_python_ref = self;
+-    }
++    if (CheckTabPage((TabPageObject *)(self)))
++	return NULL;
+ 
+-    return (PyObject *)(self);
++    r = TabPageAttr((TabPageObject *)(self), name);
++    if (r || PyErr_Occurred())
++	return r;
++    else
++	return Py_FindMethod(TabPageMethods, self, name);
+ }
+ 
+-    static void
+-WindowDestructor(PyObject *self)
+-{
+-    WindowObject *this = (WindowObject *)(self);
+-
+-    if (this->win && this->win != INVALID_WINDOW_VALUE)
+-	this->win->w_python_ref = NULL;
+-
+-    Py_DECREF(self);
+-}
++/* Window object - Implementation
++ */
+ 
+     static PyObject *
+ WindowGetattr(PyObject *self, char *name)
+ {
+-    WindowObject *this = (WindowObject *)(self);
++    PyObject *r;
+ 
+-    if (CheckWindow(this))
+-	return NULL;
++    if ((r = WindowAttrValid((WindowObject *)(self), name)))
++	return r;
+ 
+-    if (strcmp(name, "buffer") == 0)
+-	return (PyObject *)BufferNew(this->win->w_buffer);
+-    else if (strcmp(name, "cursor") == 0)
+-    {
+-	pos_T *pos = &this->win->w_cursor;
++    if (CheckWindow((WindowObject *)(self)))
++	return NULL;
+ 
+-	return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
+-    }
+-    else if (strcmp(name, "height") == 0)
+-	return Py_BuildValue("l", (long)(this->win->w_height));
+-#ifdef FEAT_VERTSPLIT
+-    else if (strcmp(name, "width") == 0)
+-	return Py_BuildValue("l", (long)(W_WIDTH(this->win)));
+-#endif
+-    else if (strcmp(name,"__members__") == 0)
+-	return Py_BuildValue("[sss]", "buffer", "cursor", "height");
++    r = WindowAttr((WindowObject *)(self), name);
++    if (r || PyErr_Occurred())
++	return r;
+     else
+ 	return Py_FindMethod(WindowMethods, self, name);
+ }
+ 
+-/* Window list object - Definitions
++/* Tab page list object - Definitions
+  */
+ 
+-typedef struct
+-{
+-    PyObject_HEAD
+-}
+-WinListObject;
+-
+-static PySequenceMethods WinListAsSeq = {
+-    (PyInquiry)		WinListLength,	    /* sq_length,    len(x)   */
++static PySequenceMethods TabListAsSeq = {
++    (PyInquiry)		TabListLength,	    /* sq_length,    len(x)   */
+     (binaryfunc)	0,		    /* sq_concat,    x+y      */
+     (PyIntArgFunc)	0,		    /* sq_repeat,    x*n      */
+-    (PyIntArgFunc)	WinListItem,	    /* sq_item,      x[i]     */
++    (PyIntArgFunc)	TabListItem,	    /* sq_item,      x[i]     */
+     (PyIntIntArgFunc)	0,		    /* sq_slice,     x[i:j]   */
+     (PyIntObjArgProc)	0,		    /* sq_ass_item,  x[i]=v   */
+-    (PyIntIntObjArgProc)	0,		    /* sq_ass_slice, x[i:j]=v */
+-};
+-
+-static PyTypeObject WinListType = {
+-    PyObject_HEAD_INIT(0)
++    (PyIntIntObjArgProc) 0,		    /* sq_ass_slice, x[i:j]=v */
++    (objobjproc)	0,
++#if PY_MAJOR_VERSION >= 2
++    (binaryfunc)	0,
+     0,
+-    "window list",
+-    sizeof(WinListObject),
+-    0,
+-
+-    (destructor)    0,			/* tp_dealloc,	refcount==0  */
+-    (printfunc)     0,			/* tp_print,	print x      */
+-    (getattrfunc)   0,			/* tp_getattr,	x.attr	     */
+-    (setattrfunc)   0,			/* tp_setattr,	x.attr=v     */
+-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
+-    (reprfunc)	    0,			/* tp_repr,	`x`, print x */
+-
+-    0,		    /* as number */
+-    &WinListAsSeq,  /* as sequence */
+-    0,		    /* as mapping */
+-
+-    (hashfunc) 0,			/* tp_hash, dict(x) */
+-    (ternaryfunc) 0,			/* tp_call, x()     */
+-    (reprfunc) 0,			/* tp_str,  str(x)  */
++#endif
+ };
+ 
+-/* Current items object - Definitions
++/* Window list object - Definitions
+  */
+ 
+-typedef struct
+-{
+-    PyObject_HEAD
+-} CurrentObject;
+-
+-static PyTypeObject CurrentType = {
+-    PyObject_HEAD_INIT(0)
+-    0,
+-    "current data",
+-    sizeof(CurrentObject),
++static PySequenceMethods WinListAsSeq = {
++    (PyInquiry)		WinListLength,	    /* sq_length,    len(x)   */
++    (binaryfunc)	0,		    /* sq_concat,    x+y      */
++    (PyIntArgFunc)	0,		    /* sq_repeat,    x*n      */
++    (PyIntArgFunc)	WinListItem,	    /* sq_item,      x[i]     */
++    (PyIntIntArgFunc)	0,		    /* sq_slice,     x[i:j]   */
++    (PyIntObjArgProc)	0,		    /* sq_ass_item,  x[i]=v   */
++    (PyIntIntObjArgProc) 0,		    /* sq_ass_slice, x[i:j]=v */
++    (objobjproc)	0,
++#if PY_MAJOR_VERSION >= 2
++    (binaryfunc)	0,
+     0,
+-
+-    (destructor)    0,			/* tp_dealloc,	refcount==0  */
+-    (printfunc)     0,			/* tp_print,	print x      */
+-    (getattrfunc)   CurrentGetattr,	/* tp_getattr,	x.attr	     */
+-    (setattrfunc)   CurrentSetattr,	/* tp_setattr,	x.attr=v     */
+-    (cmpfunc)	    0,			/* tp_compare,	x>y	     */
+-    (reprfunc)	    0,			/* tp_repr,	`x`, print x */
+-
+-    0,		    /* as number */
+-    0,		    /* as sequence */
+-    0,		    /* as mapping */
+-
+-    (hashfunc) 0,			/* tp_hash, dict(x) */
+-    (ternaryfunc) 0,			/* tp_call, x()     */
+-    (reprfunc) 0,			/* tp_str,  str(x)  */
++#endif
+ };
+ 
+-/* Current items object - Implementation
+- */
+-    static PyObject *
+-CurrentGetattr(PyObject *self UNUSED, char *name)
+-{
+-    if (strcmp(name, "buffer") == 0)
+-	return (PyObject *)BufferNew(curbuf);
+-    else if (strcmp(name, "window") == 0)
+-	return (PyObject *)WindowNew(curwin);
+-    else if (strcmp(name, "line") == 0)
+-	return GetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum);
+-    else if (strcmp(name, "range") == 0)
+-	return RangeNew(curbuf, RangeStart, RangeEnd);
+-    else if (strcmp(name,"__members__") == 0)
+-	return Py_BuildValue("[ssss]", "buffer", "window", "line", "range");
+-    else
+-    {
+-	PyErr_SetString(PyExc_AttributeError, name);
+-	return NULL;
+-    }
+-}
+-
+-    static int
+-CurrentSetattr(PyObject *self UNUSED, char *name, PyObject *value)
+-{
+-    if (strcmp(name, "line") == 0)
+-    {
+-	if (SetBufferLine(curbuf, (PyInt)curwin->w_cursor.lnum, value, NULL) == FAIL)
+-	    return -1;
+-
+-	return 0;
+-    }
+-    else
+-    {
+-	PyErr_SetString(PyExc_AttributeError, name);
+-	return -1;
+-    }
+-}
+-
+ /* External interface
+  */
+ 
+     void
+ python_buffer_free(buf_T *buf)
+ {
+-    if (buf->b_python_ref != NULL)
++    if (BUF_PYTHON_REF(buf) != NULL)
+     {
+-	BufferObject *bp = buf->b_python_ref;
++	BufferObject *bp = BUF_PYTHON_REF(buf);
+ 	bp->buf = INVALID_BUFFER_VALUE;
+-	buf->b_python_ref = NULL;
++	BUF_PYTHON_REF(buf) = NULL;
+     }
+ }
+ 
+@@ -1362,257 +1333,61 @@
+     void
+ python_window_free(win_T *win)
+ {
+-    if (win->w_python_ref != NULL)
++    if (WIN_PYTHON_REF(win) != NULL)
+     {
+-	WindowObject *wp = win->w_python_ref;
++	WindowObject *wp = WIN_PYTHON_REF(win);
+ 	wp->win = INVALID_WINDOW_VALUE;
+-	win->w_python_ref = NULL;
++	WIN_PYTHON_REF(win) = NULL;
+     }
+ }
+-#endif
+-
+-static BufListObject TheBufferList =
+-{
+-    PyObject_HEAD_INIT(&BufListType)
+-};
+ 
+-static WinListObject TheWindowList =
++    void
++python_tabpage_free(tabpage_T *tab)
+ {
+-    PyObject_HEAD_INIT(&WinListType)
+-};
++    if (TAB_PYTHON_REF(tab) != NULL)
++    {
++	TabPageObject *tp = TAB_PYTHON_REF(tab);
++	tp->tab = INVALID_TABPAGE_VALUE;
++	TAB_PYTHON_REF(tab) = NULL;
++    }
++}
++#endif
+ 
+-static CurrentObject TheCurrent =
++    static int
++add_object(PyObject *dict, const char *name, PyObject *object)
+ {
+-    PyObject_HEAD_INIT(&CurrentType)
+-};
++    if (PyDict_SetItemString(dict, (char *) name, object))
++	return -1;
++    Py_DECREF(object);
++    return 0;
++}
+ 
+     static int
+ PythonMod_Init(void)
+ {
+     PyObject *mod;
+     PyObject *dict;
++
+     /* The special value is removed from sys.path in Python_Init(). */
+     static char *(argv[2]) = {"/must>not&exist/foo", NULL};
+ 
+-    /* Fixups... */
+-    BufferType.ob_type = &PyType_Type;
+-    RangeType.ob_type = &PyType_Type;
+-    WindowType.ob_type = &PyType_Type;
+-    BufListType.ob_type = &PyType_Type;
+-    WinListType.ob_type = &PyType_Type;
+-    CurrentType.ob_type = &PyType_Type;
++    if (init_types())
++	return -1;
+ 
+     /* Set sys.argv[] to avoid a crash in warn(). */
+     PySys_SetArgv(1, argv);
+ 
+-    mod = Py_InitModule4("vim", VimMethods, (char *)NULL, (PyObject *)NULL, PYTHON_API_VERSION);
++    mod = Py_InitModule4("vim", VimMethods, (char *)NULL, (PyObject *)NULL,
++			    PYTHON_API_VERSION);
+     dict = PyModule_GetDict(mod);
+ 
+-    VimError = Py_BuildValue("s", "vim.error");
+-
+-    PyDict_SetItemString(dict, "error", VimError);
+-    PyDict_SetItemString(dict, "buffers", (PyObject *)(void *)&TheBufferList);
+-    PyDict_SetItemString(dict, "current", (PyObject *)(void *)&TheCurrent);
+-    PyDict_SetItemString(dict, "windows", (PyObject *)(void *)&TheWindowList);
+-
+-    if (PyErr_Occurred())
+-	return -1;
+-
+-    return 0;
++    return populate_module(dict, add_object, PyDict_GetItemString);
+ }
+ 
+ /*************************************************************************
+  * 4. Utility functions for handling the interface between Vim and Python.
+  */
+ 
+-/* Replace a range of lines in the specified buffer. The line numbers are in
+- * Vim format (1-based). The range is from lo up to, but not including, hi.
+- * The replacement lines are given as a Python list of string objects. The
+- * list is checked for validity and correct format. Errors are returned as a
+- * value of FAIL.  The return value is OK on success.
+- * If OK is returned and len_change is not NULL, *len_change
+- * is set to the change in the buffer length.
+- */
+-    static int
+-SetBufferLineList(buf_T *buf, PyInt lo, PyInt hi, PyObject *list, PyInt *len_change)
+-{
+-    /* First of all, we check the thpe of the supplied Python object.
+-     * There are three cases:
+-     *	  1. NULL, or None - this is a deletion.
+-     *	  2. A list	   - this is a replacement.
+-     *	  3. Anything else - this is an error.
+-     */
+-    if (list == Py_None || list == NULL)
+-    {
+-	PyInt	i;
+-	PyInt	n = (int)(hi - lo);
+-	buf_T	*savebuf = curbuf;
+-
+-	PyErr_Clear();
+-	curbuf = buf;
+-
+-	if (u_savedel((linenr_T)lo, (long)n) == FAIL)
+-	    PyErr_SetVim(_("cannot save undo information"));
+-	else
+-	{
+-	    for (i = 0; i < n; ++i)
+-	    {
+-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+-		{
+-		    PyErr_SetVim(_("cannot delete line"));
+-		    break;
+-		}
+-	    }
+-	    if (buf == curwin->w_buffer)
+-		py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)-n);
+-	    deleted_lines_mark((linenr_T)lo, (long)i);
+-	}
+-
+-	curbuf = savebuf;
+-
+-	if (PyErr_Occurred() || VimErrorCheck())
+-	    return FAIL;
+-
+-	if (len_change)
+-	    *len_change = -n;
+-
+-	return OK;
+-    }
+-    else if (PyList_Check(list))
+-    {
+-	PyInt	i;
+-	PyInt	new_len = PyList_Size(list);
+-	PyInt	old_len = hi - lo;
+-	PyInt	extra = 0;	/* lines added to text, can be negative */
+-	char	**array;
+-	buf_T	*savebuf;
+-
+-	if (new_len == 0)	/* avoid allocating zero bytes */
+-	    array = NULL;
+-	else
+-	{
+-	    array = (char **)alloc((unsigned)(new_len * sizeof(char *)));
+-	    if (array == NULL)
+-	    {
+-		PyErr_NoMemory();
+-		return FAIL;
+-	    }
+-	}
+-
+-	for (i = 0; i < new_len; ++i)
+-	{
+-	    PyObject *line = PyList_GetItem(list, i);
+-
+-	    array[i] = StringToLine(line);
+-	    if (array[i] == NULL)
+-	    {
+-		while (i)
+-		    vim_free(array[--i]);
+-		vim_free(array);
+-		return FAIL;
+-	    }
+-	}
+-
+-	savebuf = curbuf;
+-
+-	PyErr_Clear();
+-	curbuf = buf;
+-
+-	if (u_save((linenr_T)(lo-1), (linenr_T)hi) == FAIL)
+-	    PyErr_SetVim(_("cannot save undo information"));
+-
+-	/* If the size of the range is reducing (ie, new_len < old_len) we
+-	 * need to delete some old_len. We do this at the start, by
+-	 * repeatedly deleting line "lo".
+-	 */
+-	if (!PyErr_Occurred())
+-	{
+-	    for (i = 0; i < old_len - new_len; ++i)
+-		if (ml_delete((linenr_T)lo, FALSE) == FAIL)
+-		{
+-		    PyErr_SetVim(_("cannot delete line"));
+-		    break;
+-		}
+-	    extra -= i;
+-	}
+-
+-	/* For as long as possible, replace the existing old_len with the
+-	 * new old_len. This is a more efficient operation, as it requires
+-	 * less memory allocation and freeing.
+-	 */
+-	if (!PyErr_Occurred())
+-	{
+-	    for (i = 0; i < old_len && i < new_len; ++i)
+-		if (ml_replace((linenr_T)(lo+i), (char_u *)array[i], FALSE)
+-								      == FAIL)
+-		{
+-		    PyErr_SetVim(_("cannot replace line"));
+-		    break;
+-		}
+-	}
+-	else
+-	    i = 0;
+-
+-	/* Now we may need to insert the remaining new old_len. If we do, we
+-	 * must free the strings as we finish with them (we can't pass the
+-	 * responsibility to vim in this case).
+-	 */
+-	if (!PyErr_Occurred())
+-	{
+-	    while (i < new_len)
+-	    {
+-		if (ml_append((linenr_T)(lo + i - 1),
+-					(char_u *)array[i], 0, FALSE) == FAIL)
+-		{
+-		    PyErr_SetVim(_("cannot insert line"));
+-		    break;
+-		}
+-		vim_free(array[i]);
+-		++i;
+-		++extra;
+-	    }
+-	}
+-
+-	/* Free any left-over old_len, as a result of an error */
+-	while (i < new_len)
+-	{
+-	    vim_free(array[i]);
+-	    ++i;
+-	}
+-
+-	/* Free the array of old_len. All of its contents have now
+-	 * been dealt with (either freed, or the responsibility passed
+-	 * to vim.
+-	 */
+-	vim_free(array);
+-
+-	/* Adjust marks. Invalidate any which lie in the
+-	 * changed range, and move any in the remainder of the buffer.
+-	 */
+-	mark_adjust((linenr_T)lo, (linenr_T)(hi - 1),
+-						  (long)MAXLNUM, (long)extra);
+-	changed_lines((linenr_T)lo, 0, (linenr_T)hi, (long)extra);
+-
+-	if (buf == curwin->w_buffer)
+-	    py_fix_cursor((linenr_T)lo, (linenr_T)hi, (linenr_T)extra);
+-
+-	curbuf = savebuf;
+-
+-	if (PyErr_Occurred() || VimErrorCheck())
+-	    return FAIL;
+-
+-	if (len_change)
+-	    *len_change = new_len - old_len;
+-
+-	return OK;
+-    }
+-    else
+-    {
+-	PyErr_BadArgument();
+-	return FAIL;
+-    }
+-}
+-
+ /* Convert a Vim line into a Python string.
+  * All internal newlines are replaced by null characters.
+  *
+@@ -1649,6 +1424,78 @@
+     return result;
+ }
+ 
++    static PyObject *
++DictionaryGetattr(PyObject *self, char *name)
++{
++    DictionaryObject	*this = ((DictionaryObject *) (self));
++
++    if (strcmp(name, "locked") == 0)
++	return PyInt_FromLong(this->dict->dv_lock);
++    else if (strcmp(name, "scope") == 0)
++	return PyInt_FromLong(this->dict->dv_scope);
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, DictionaryAttrs);
++
++    return Py_FindMethod(DictionaryMethods, self, name);
++}
++
++static PySequenceMethods ListAsSeq = {
++    (PyInquiry)			ListLength,
++    (binaryfunc)		0,
++    (PyIntArgFunc)		0,
++    (PyIntArgFunc)		ListItem,
++    (PyIntIntArgFunc)		ListSlice,
++    (PyIntObjArgProc)		ListAssItem,
++    (PyIntIntObjArgProc)	ListAssSlice,
++    (objobjproc)		0,
++#if PY_MAJOR_VERSION >= 2
++    (binaryfunc)		ListConcatInPlace,
++    0,
++#endif
++};
++
++    static PyObject *
++ListGetattr(PyObject *self, char *name)
++{
++    if (strcmp(name, "locked") == 0)
++	return PyInt_FromLong(((ListObject *)(self))->list->lv_lock);
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, ListAttrs);
++
++    return Py_FindMethod(ListMethods, self, name);
++}
++
++    static PyObject *
++FunctionGetattr(PyObject *self, char *name)
++{
++    FunctionObject	*this = (FunctionObject *)(self);
++
++    if (strcmp(name, "name") == 0)
++	return PyString_FromString((char *)(this->name));
++    else if (strcmp(name, "__members__") == 0)
++	return ObjectDir(NULL, FunctionAttrs);
++    else
++	return Py_FindMethod(FunctionMethods, self, name);
++}
++
++    void
++do_pyeval (char_u *str, typval_T *rettv)
++{
++    DoPyCommand((char *) str,
++	    (rangeinitializer) init_range_eval,
++	    (runner) run_eval,
++	    (void *) rettv);
++    switch(rettv->v_type)
++    {
++	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
++	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
++	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
++	case VAR_UNKNOWN:
++	    rettv->v_type = VAR_NUMBER;
++	    rettv->vval.v_number = 0;
++	    break;
++    }
++}
+ 
+ /* Don't generate a prototype for the next function, it generates an error on
+  * newer Python versions. */
+@@ -1661,20 +1508,8 @@
+ }
+ #endif /* Python 1.4 */
+ 
+-    static void
+-init_structs(void)
++    void
++set_ref_in_python (int copyID)
+ {
+-    vim_memset(&OutputType, 0, sizeof(OutputType));
+-    OutputType.tp_name = "message";
+-    OutputType.tp_basicsize = sizeof(OutputObject);
+-    OutputType.tp_getattr = OutputGetattr;
+-    OutputType.tp_setattr = OutputSetattr;
+-
+-    vim_memset(&RangeType, 0, sizeof(RangeType));
+-    RangeType.tp_name = "range";
+-    RangeType.tp_basicsize = sizeof(RangeObject);
+-    RangeType.tp_dealloc = RangeDestructor;
+-    RangeType.tp_getattr = RangeGetattr;
+-    RangeType.tp_repr = RangeRepr;
+-    RangeType.tp_as_sequence = &RangeAsSeq;
++    set_ref_in_py(copyID);
+ }
+diff -Naur vim73.orig/src/if_python3.c vim73/src/if_python3.c
+--- vim73.orig/src/if_python3.c	2010-08-13 13:59:40.000000000 +0000
++++ vim73/src/if_python3.c	2013-06-07 17:07:31.695584836 +0000
+@@ -22,8 +22,13 @@
+  * Adaptations to support both python3.x and python2.x
+  */
+ 
+-// uncomment this if used with the debug version of python
+-// #define Py_DEBUG
++/* uncomment this if used with the debug version of python */
++/* #define Py_DEBUG */
++/* Note: most of time you can add -DPy_DEBUG to CFLAGS in place of uncommenting 
++ */
++/* uncomment this if used with the debug version of python, but without its 
++ * allocator */
++/* #define Py_DEBUG_NO_PYMALLOC */
+ 
+ #include "vim.h"
+ 
+@@ -42,8 +47,6 @@
+ # undef _DEBUG
+ #endif
+ 
+-#define PY_SSIZE_T_CLEAN
+-
+ #ifdef F_BLANK
+ # undef F_BLANK
+ #endif
+@@ -66,21 +69,42 @@
+ #undef main /* Defined in python.h - aargh */
+ #undef HAVE_FCNTL_H /* Clash with os_win32.h */
+ 
+-static void init_structs(void);
++#if defined(PY_VERSION_HEX) && PY_VERSION_HEX >= 0x02050000
++# define PY_SSIZE_T_CLEAN
++#endif
++
++/* The "surrogateescape" error handler is new in Python 3.1 */
++#if PY_VERSION_HEX >= 0x030100f0
++# define CODEC_ERROR_HANDLER "surrogateescape"
++#else
++# define CODEC_ERROR_HANDLER NULL
++#endif
++
++/* Python 3 does not support CObjects, always use Capsules */
++#define PY_USE_CAPSULE
+ 
+ #define PyInt Py_ssize_t
+ #define PyString_Check(obj) PyUnicode_Check(obj)
+-#define PyString_AsString(obj) _PyUnicode_AsString(obj)
+-#define PyString_Size(obj) PyUnicode_GET_SIZE(obj)
++#define PyString_AsBytes(obj) PyUnicode_AsEncodedString(obj, (char *)ENC_OPT, CODEC_ERROR_HANDLER)
++#define PyString_FreeBytes(obj) Py_XDECREF(bytes)
++#define PyString_AsString(obj) PyBytes_AsString(obj)
++#define PyString_Size(obj) PyBytes_GET_SIZE(bytes)
+ #define PyString_FromString(repr) PyUnicode_FromString(repr)
++#define PyString_FromFormat PyUnicode_FromFormat
++#define PyString_AsStringAndSize(obj, buffer, len) PyBytes_AsStringAndSize(obj, buffer, len)
++#define PyInt_Check(obj) PyLong_Check(obj)
++#define PyInt_FromLong(i) PyLong_FromLong(i)
++#define PyInt_AsLong(obj) PyLong_AsLong(obj)
++#define Py_ssize_t_fmt "n"
++#define Py_bytes_fmt "y"
+ 
+-#if defined(DYNAMIC_PYTHON3)
++#if defined(DYNAMIC_PYTHON3) || defined(PROTO)
+ 
+ # ifndef WIN3264
+ #  include <dlfcn.h>
+ #  define FARPROC void*
+ #  define HINSTANCE void*
+-#  ifdef PY_NO_RTLD_GLOBAL
++#  if defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)
+ #   define load_dll(n) dlopen((n), RTLD_LAZY)
+ #  else
+ #   define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
+@@ -88,7 +112,7 @@
+ #  define close_dll dlclose
+ #  define symbol_from_dll dlsym
+ # else
+-#  define load_dll LoadLibrary
++#  define load_dll vimLoadLib
+ #  define close_dll FreeLibrary
+ #  define symbol_from_dll GetProcAddress
+ # endif
+@@ -99,13 +123,18 @@
+ # define PyArg_Parse py3_PyArg_Parse
+ # undef PyArg_ParseTuple
+ # define PyArg_ParseTuple py3_PyArg_ParseTuple
++# define PyMem_Free py3_PyMem_Free
++# define PyMem_Malloc py3_PyMem_Malloc
+ # define PyDict_SetItemString py3_PyDict_SetItemString
+ # define PyErr_BadArgument py3_PyErr_BadArgument
+ # define PyErr_Clear py3_PyErr_Clear
++# define PyErr_PrintEx py3_PyErr_PrintEx
+ # define PyErr_NoMemory py3_PyErr_NoMemory
+ # define PyErr_Occurred py3_PyErr_Occurred
++# define PyErr_PrintEx py3_PyErr_PrintEx
+ # define PyErr_SetNone py3_PyErr_SetNone
+ # define PyErr_SetString py3_PyErr_SetString
++# define PyErr_SetObject py3_PyErr_SetObject
+ # define PyEval_InitThreads py3_PyEval_InitThreads
+ # define PyEval_RestoreThread py3_PyEval_RestoreThread
+ # define PyEval_SaveThread py3_PyEval_SaveThread
+@@ -118,48 +147,112 @@
+ # define PyList_New py3_PyList_New
+ # define PyList_SetItem py3_PyList_SetItem
+ # define PyList_Size py3_PyList_Size
++# define PySequence_Check py3_PySequence_Check
++# define PySequence_Size py3_PySequence_Size
++# define PySequence_GetItem py3_PySequence_GetItem
++# define PySequence_Fast py3_PySequence_Fast
++# define PyTuple_Size py3_PyTuple_Size
++# define PyTuple_GetItem py3_PyTuple_GetItem
+ # define PySlice_GetIndicesEx py3_PySlice_GetIndicesEx
+ # define PyImport_ImportModule py3_PyImport_ImportModule
+ # define PyObject_Init py3__PyObject_Init
+ # define PyDict_New py3_PyDict_New
+ # define PyDict_GetItemString py3_PyDict_GetItemString
++# define PyDict_Next py3_PyDict_Next
++# define PyMapping_Check py3_PyMapping_Check
++# define PyMapping_Keys py3_PyMapping_Keys
++# define PyIter_Next py3_PyIter_Next
++# define PyObject_GetIter py3_PyObject_GetIter
++# define PyObject_GetItem py3_PyObject_GetItem
++# define PyObject_IsTrue py3_PyObject_IsTrue
+ # define PyModule_GetDict py3_PyModule_GetDict
+ #undef PyRun_SimpleString
+ # define PyRun_SimpleString py3_PyRun_SimpleString
++#undef PyRun_String
++# define PyRun_String py3_PyRun_String
++# define PyObject_GetAttrString py3_PyObject_GetAttrString
++# define PyObject_HasAttrString py3_PyObject_HasAttrString
++# define PyObject_SetAttrString py3_PyObject_SetAttrString
++# define PyObject_CallFunctionObjArgs py3_PyObject_CallFunctionObjArgs
++# define PyObject_Call py3_PyObject_Call
++# define PyEval_GetLocals py3_PyEval_GetLocals
++# define PyEval_GetGlobals py3_PyEval_GetGlobals
+ # define PySys_SetObject py3_PySys_SetObject
+ # define PySys_SetArgv py3_PySys_SetArgv
+-# define PyType_Type (*py3_PyType_Type)
+ # define PyType_Ready py3_PyType_Ready
+ #undef Py_BuildValue
+ # define Py_BuildValue py3_Py_BuildValue
++# define Py_SetPythonHome py3_Py_SetPythonHome
+ # define Py_Initialize py3_Py_Initialize
+ # define Py_Finalize py3_Py_Finalize
+ # define Py_IsInitialized py3_Py_IsInitialized
+ # define _Py_NoneStruct (*py3__Py_NoneStruct)
++# define _Py_FalseStruct (*py3__Py_FalseStruct)
++# define _Py_TrueStruct (*py3__Py_TrueStruct)
++# define _PyObject_NextNotImplemented (*py3__PyObject_NextNotImplemented)
+ # define PyModule_AddObject py3_PyModule_AddObject
+ # define PyImport_AppendInittab py3_PyImport_AppendInittab
+-# define _PyUnicode_AsString py3__PyUnicode_AsString
++# define PyImport_AddModule py3_PyImport_AddModule
++# if PY_VERSION_HEX >= 0x030300f0
++#  undef _PyUnicode_AsString
++#  define _PyUnicode_AsString py3_PyUnicode_AsUTF8
++# else
++#  define _PyUnicode_AsString py3__PyUnicode_AsString
++# endif
++# undef PyUnicode_AsEncodedString
++# define PyUnicode_AsEncodedString py3_PyUnicode_AsEncodedString
++# undef PyBytes_AsString
++# define PyBytes_AsString py3_PyBytes_AsString
++# define PyBytes_AsStringAndSize py3_PyBytes_AsStringAndSize
++# undef PyBytes_FromString
++# define PyBytes_FromString py3_PyBytes_FromString
++# define PyFloat_FromDouble py3_PyFloat_FromDouble
++# define PyFloat_AsDouble py3_PyFloat_AsDouble
+ # define PyObject_GenericGetAttr py3_PyObject_GenericGetAttr
++# define PyType_Type (*py3_PyType_Type)
+ # define PySlice_Type (*py3_PySlice_Type)
++# define PyFloat_Type (*py3_PyFloat_Type)
++# define PyBool_Type (*py3_PyBool_Type)
++# define PyErr_NewException py3_PyErr_NewException
+ # ifdef Py_DEBUG
+ #  define _Py_NegativeRefcount py3__Py_NegativeRefcount
+ #  define _Py_RefTotal (*py3__Py_RefTotal)
+ #  define _Py_Dealloc py3__Py_Dealloc
++#  define PyModule_Create2TraceRefs py3_PyModule_Create2TraceRefs
++# else
++#  define PyModule_Create2 py3_PyModule_Create2
++# endif
++# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+ #  define _PyObject_DebugMalloc py3__PyObject_DebugMalloc
+ #  define _PyObject_DebugFree py3__PyObject_DebugFree
+ # else
+ #  define PyObject_Malloc py3_PyObject_Malloc
+ #  define PyObject_Free py3_PyObject_Free
+ # endif
++# define _PyObject_GC_New py3__PyObject_GC_New
++# define PyObject_GC_Del py3_PyObject_GC_Del
++# define PyObject_GC_UnTrack py3_PyObject_GC_UnTrack
+ # define PyType_GenericAlloc py3_PyType_GenericAlloc
+ # define PyType_GenericNew py3_PyType_GenericNew
+-# define PyModule_Create2 py3_PyModule_Create2
+ # undef PyUnicode_FromString
+ # define PyUnicode_FromString py3_PyUnicode_FromString
+-# undef PyUnicode_FromStringAndSize
+-# define PyUnicode_FromStringAndSize py3_PyUnicode_FromStringAndSize
++# ifndef PyUnicode_FromFormat
++#  define PyUnicode_FromFormat py3_PyUnicode_FromFormat
++# else
++#  define Py_UNICODE_USE_UCS_FUNCTIONS
++#  ifdef Py_UNICODE_WIDE
++#   define PyUnicodeUCS4_FromFormat py3_PyUnicodeUCS4_FromFormat
++#  else
++#   define PyUnicodeUCS2_FromFormat py3_PyUnicodeUCS2_FromFormat
++#  endif
++# endif
++# undef PyUnicode_Decode
++# define PyUnicode_Decode py3_PyUnicode_Decode
++# define PyType_IsSubtype py3_PyType_IsSubtype
++# define PyCapsule_New py3_PyCapsule_New
++# define PyCapsule_GetPointer py3_PyCapsule_GetPointer
+ 
+-# ifdef Py_DEBUG
++# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+ #  undef PyObject_NEW
+ #  define PyObject_NEW(type, typeobj) \
+ ( (type *) PyObject_Init( \
+@@ -170,6 +263,7 @@
+  * Pointers for dynamic link
+  */
+ static int (*py3_PySys_SetArgv)(int, wchar_t **);
++static void (*py3_Py_SetPythonHome)(wchar_t *home);
+ static void (*py3_Py_Initialize)(void);
+ static PyObject* (*py3_PyList_New)(Py_ssize_t size);
+ static PyGILState_STATE (*py3_PyGILState_Ensure)(void);
+@@ -177,27 +271,59 @@
+ static int (*py3_PySys_SetObject)(char *, PyObject *);
+ static PyObject* (*py3_PyList_Append)(PyObject *, PyObject *);
+ static Py_ssize_t (*py3_PyList_Size)(PyObject *);
+-static int (*py3_PySlice_GetIndicesEx)(PySliceObject *r, Py_ssize_t length,
++static int (*py3_PySequence_Check)(PyObject *);
++static Py_ssize_t (*py3_PySequence_Size)(PyObject *);
++static PyObject* (*py3_PySequence_GetItem)(PyObject *, Py_ssize_t);
++static PyObject* (*py3_PySequence_Fast)(PyObject *, const char *);
++static Py_ssize_t (*py3_PyTuple_Size)(PyObject *);
++static PyObject* (*py3_PyTuple_GetItem)(PyObject *, Py_ssize_t);
++static int (*py3_PyMapping_Check)(PyObject *);
++static PyObject* (*py3_PyMapping_Keys)(PyObject *);
++static int (*py3_PySlice_GetIndicesEx)(PyObject *r, Py_ssize_t length,
+ 		     Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step, Py_ssize_t *slicelength);
+ static PyObject* (*py3_PyErr_NoMemory)(void);
+ static void (*py3_Py_Finalize)(void);
+ static void (*py3_PyErr_SetString)(PyObject *, const char *);
++static void (*py3_PyErr_SetObject)(PyObject *, PyObject *);
+ static int (*py3_PyRun_SimpleString)(char *);
++static PyObject* (*py3_PyRun_String)(char *, int, PyObject *, PyObject *);
++static PyObject* (*py3_PyObject_GetAttrString)(PyObject *, const char *);
++static int (*py3_PyObject_HasAttrString)(PyObject *, const char *);
++static PyObject* (*py3_PyObject_SetAttrString)(PyObject *, const char *, PyObject *);
++static PyObject* (*py3_PyObject_CallFunctionObjArgs)(PyObject *, ...);
++static PyObject* (*py3_PyObject_Call)(PyObject *, PyObject *, PyObject *);
++static PyObject* (*py3_PyEval_GetGlobals)();
++static PyObject* (*py3_PyEval_GetLocals)();
+ static PyObject* (*py3_PyList_GetItem)(PyObject *, Py_ssize_t);
+ static PyObject* (*py3_PyImport_ImportModule)(const char *);
++static PyObject* (*py3_PyImport_AddModule)(const char *);
+ static int (*py3_PyErr_BadArgument)(void);
+-static PyTypeObject* py3_PyType_Type;
+ static PyObject* (*py3_PyErr_Occurred)(void);
+ static PyObject* (*py3_PyModule_GetDict)(PyObject *);
+ static int (*py3_PyList_SetItem)(PyObject *, Py_ssize_t, PyObject *);
+ static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *);
++static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
+ static PyObject* (*py3_PyLong_FromLong)(long);
+ static PyObject* (*py3_PyDict_New)(void);
++static PyObject* (*py3_PyIter_Next)(PyObject *);
++static PyObject* (*py3_PyObject_GetIter)(PyObject *);
++static PyObject* (*py3_PyObject_GetItem)(PyObject *, PyObject *);
++static int (*py3_PyObject_IsTrue)(PyObject *);
+ static PyObject* (*py3_Py_BuildValue)(char *, ...);
+ static int (*py3_PyType_Ready)(PyTypeObject *type);
+ static int (*py3_PyDict_SetItemString)(PyObject *dp, char *key, PyObject *item);
+ static PyObject* (*py3_PyUnicode_FromString)(const char *u);
+-static PyObject* (*py3_PyUnicode_FromStringAndSize)(const char *u, Py_ssize_t size);
++# ifndef Py_UNICODE_USE_UCS_FUNCTIONS
++static PyObject* (*py3_PyUnicode_FromFormat)(const char *u, ...);
++# else
++#  ifdef Py_UNICODE_WIDE
++static PyObject* (*py3_PyUnicodeUCS4_FromFormat)(const char *u, ...);
++#  else
++static PyObject* (*py3_PyUnicodeUCS2_FromFormat)(const char *u, ...);
++#  endif
++# endif
++static PyObject* (*py3_PyUnicode_Decode)(const char *u, Py_ssize_t size,
++	const char *encoding, const char *errors);
+ static long (*py3_PyLong_AsLong)(PyObject *);
+ static void (*py3_PyErr_SetNone)(PyObject *);
+ static void (*py3_PyEval_InitThreads)(void);
+@@ -205,43 +331,77 @@
+ static PyThreadState*(*py3_PyEval_SaveThread)(void);
+ static int (*py3_PyArg_Parse)(PyObject *, char *, ...);
+ static int (*py3_PyArg_ParseTuple)(PyObject *, char *, ...);
++static int (*py3_PyMem_Free)(void *);
++static void* (*py3_PyMem_Malloc)(size_t);
+ static int (*py3_Py_IsInitialized)(void);
+ static void (*py3_PyErr_Clear)(void);
++static void (*py3_PyErr_PrintEx)(int);
+ static PyObject*(*py3__PyObject_Init)(PyObject *, PyTypeObject *);
++static iternextfunc py3__PyObject_NextNotImplemented;
+ static PyObject* py3__Py_NoneStruct;
++static PyObject* py3__Py_FalseStruct;
++static PyObject* py3__Py_TrueStruct;
+ static int (*py3_PyModule_AddObject)(PyObject *m, const char *name, PyObject *o);
+ static int (*py3_PyImport_AppendInittab)(const char *name, PyObject* (*initfunc)(void));
++# if PY_VERSION_HEX >= 0x030300f0
++static char* (*py3_PyUnicode_AsUTF8)(PyObject *unicode);
++# else
+ static char* (*py3__PyUnicode_AsString)(PyObject *unicode);
++# endif
++static PyObject* (*py3_PyUnicode_AsEncodedString)(PyObject *unicode, const char* encoding, const char* errors);
++static char* (*py3_PyBytes_AsString)(PyObject *bytes);
++static int (*py3_PyBytes_AsStringAndSize)(PyObject *bytes, char **buffer, int *length);
++static PyObject* (*py3_PyBytes_FromString)(char *str);
++static PyObject* (*py3_PyFloat_FromDouble)(double num);
++static double (*py3_PyFloat_AsDouble)(PyObject *);
+ static PyObject* (*py3_PyObject_GenericGetAttr)(PyObject *obj, PyObject *name);
+-static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
+ static PyObject* (*py3_PyType_GenericAlloc)(PyTypeObject *type, Py_ssize_t nitems);
+ static PyObject* (*py3_PyType_GenericNew)(PyTypeObject *type, PyObject *args, PyObject *kwds);
++static PyTypeObject* py3_PyType_Type;
+ static PyTypeObject* py3_PySlice_Type;
++static PyTypeObject* py3_PyFloat_Type;
++static PyTypeObject* py3_PyBool_Type;
++static PyObject* (*py3_PyErr_NewException)(char *name, PyObject *base, PyObject *dict);
++static PyObject* (*py3_PyCapsule_New)(void *, char *, PyCapsule_Destructor);
++static void* (*py3_PyCapsule_GetPointer)(PyObject *, char *);
+ # ifdef Py_DEBUG
+-    static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
+-    static Py_ssize_t* py3__Py_RefTotal;
+-    static void (*py3__Py_Dealloc)(PyObject *obj);
+-    static void (*py3__PyObject_DebugFree)(void*);
+-    static void* (*py3__PyObject_DebugMalloc)(size_t);
++static void (*py3__Py_NegativeRefcount)(const char *fname, int lineno, PyObject *op);
++static Py_ssize_t* py3__Py_RefTotal;
++static void (*py3__Py_Dealloc)(PyObject *obj);
++static PyObject* (*py3_PyModule_Create2TraceRefs)(struct PyModuleDef* module, int module_api_version);
++# else
++static PyObject* (*py3_PyModule_Create2)(struct PyModuleDef* module, int module_api_version);
++# endif
++# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
++static void (*py3__PyObject_DebugFree)(void*);
++static void* (*py3__PyObject_DebugMalloc)(size_t);
+ # else
+-    static void (*py3_PyObject_Free)(void*);
+-    static void* (*py3_PyObject_Malloc)(size_t);
++static void (*py3_PyObject_Free)(void*);
++static void* (*py3_PyObject_Malloc)(size_t);
+ # endif
++static PyObject*(*py3__PyObject_GC_New)(PyTypeObject *);
++static void(*py3_PyObject_GC_Del)(void *);
++static void(*py3_PyObject_GC_UnTrack)(void *);
++static int (*py3_PyType_IsSubtype)(PyTypeObject *, PyTypeObject *);
+ 
+ static HINSTANCE hinstPy3 = 0; /* Instance of python.dll */
+ 
+ /* Imported exception objects */
+ static PyObject *p3imp_PyExc_AttributeError;
+ static PyObject *p3imp_PyExc_IndexError;
++static PyObject *p3imp_PyExc_KeyError;
+ static PyObject *p3imp_PyExc_KeyboardInterrupt;
+ static PyObject *p3imp_PyExc_TypeError;
+ static PyObject *p3imp_PyExc_ValueError;
++static PyObject *p3imp_PyExc_RuntimeError;
+ 
+ # define PyExc_AttributeError p3imp_PyExc_AttributeError
+ # define PyExc_IndexError p3imp_PyExc_IndexError
++# define PyExc_KeyError p3imp_PyExc_KeyError
+ # define PyExc_KeyboardInterrupt p3imp_PyExc_KeyboardInterrupt
+ # define PyExc_TypeError p3imp_PyExc_TypeError
+ # define PyExc_ValueError p3imp_PyExc_ValueError
++# define PyExc_RuntimeError p3imp_PyExc_RuntimeError
+ 
+ /*
+  * Table of name to function pointer of python.
+@@ -254,30 +414,60 @@
+ } py3_funcname_table[] =
+ {
+     {"PySys_SetArgv", (PYTHON_PROC*)&py3_PySys_SetArgv},
++    {"Py_SetPythonHome", (PYTHON_PROC*)&py3_Py_SetPythonHome},
+     {"Py_Initialize", (PYTHON_PROC*)&py3_Py_Initialize},
++# ifndef PY_SSIZE_T_CLEAN
+     {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
++    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
++# else
++    {"_PyArg_ParseTuple_SizeT", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
++    {"_Py_BuildValue_SizeT", (PYTHON_PROC*)&py3_Py_BuildValue},
++# endif
++    {"PyMem_Free", (PYTHON_PROC*)&py3_PyMem_Free},
++    {"PyMem_Malloc", (PYTHON_PROC*)&py3_PyMem_Malloc},
+     {"PyList_New", (PYTHON_PROC*)&py3_PyList_New},
+     {"PyGILState_Ensure", (PYTHON_PROC*)&py3_PyGILState_Ensure},
+     {"PyGILState_Release", (PYTHON_PROC*)&py3_PyGILState_Release},
+     {"PySys_SetObject", (PYTHON_PROC*)&py3_PySys_SetObject},
+     {"PyList_Append", (PYTHON_PROC*)&py3_PyList_Append},
+     {"PyList_Size", (PYTHON_PROC*)&py3_PyList_Size},
++    {"PySequence_Check", (PYTHON_PROC*)&py3_PySequence_Check},
++    {"PySequence_Size", (PYTHON_PROC*)&py3_PySequence_Size},
++    {"PySequence_GetItem", (PYTHON_PROC*)&py3_PySequence_GetItem},
++    {"PySequence_Fast", (PYTHON_PROC*)&py3_PySequence_Fast},
++    {"PyTuple_Size", (PYTHON_PROC*)&py3_PyTuple_Size},
++    {"PyTuple_GetItem", (PYTHON_PROC*)&py3_PyTuple_GetItem},
+     {"PySlice_GetIndicesEx", (PYTHON_PROC*)&py3_PySlice_GetIndicesEx},
+     {"PyErr_NoMemory", (PYTHON_PROC*)&py3_PyErr_NoMemory},
+     {"Py_Finalize", (PYTHON_PROC*)&py3_Py_Finalize},
+     {"PyErr_SetString", (PYTHON_PROC*)&py3_PyErr_SetString},
++    {"PyErr_SetObject", (PYTHON_PROC*)&py3_PyErr_SetObject},
+     {"PyRun_SimpleString", (PYTHON_PROC*)&py3_PyRun_SimpleString},
++    {"PyRun_String", (PYTHON_PROC*)&py3_PyRun_String},
++    {"PyObject_GetAttrString", (PYTHON_PROC*)&py3_PyObject_GetAttrString},
++    {"PyObject_HasAttrString", (PYTHON_PROC*)&py3_PyObject_HasAttrString},
++    {"PyObject_SetAttrString", (PYTHON_PROC*)&py3_PyObject_SetAttrString},
++    {"PyObject_CallFunctionObjArgs", (PYTHON_PROC*)&py3_PyObject_CallFunctionObjArgs},
++    {"PyObject_Call", (PYTHON_PROC*)&py3_PyObject_Call},
++    {"PyEval_GetGlobals", (PYTHON_PROC*)&py3_PyEval_GetGlobals},
++    {"PyEval_GetLocals", (PYTHON_PROC*)&py3_PyEval_GetLocals},
+     {"PyList_GetItem", (PYTHON_PROC*)&py3_PyList_GetItem},
+     {"PyImport_ImportModule", (PYTHON_PROC*)&py3_PyImport_ImportModule},
++    {"PyImport_AddModule", (PYTHON_PROC*)&py3_PyImport_AddModule},
+     {"PyErr_BadArgument", (PYTHON_PROC*)&py3_PyErr_BadArgument},
+-    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
+     {"PyErr_Occurred", (PYTHON_PROC*)&py3_PyErr_Occurred},
+     {"PyModule_GetDict", (PYTHON_PROC*)&py3_PyModule_GetDict},
+     {"PyList_SetItem", (PYTHON_PROC*)&py3_PyList_SetItem},
+     {"PyDict_GetItemString", (PYTHON_PROC*)&py3_PyDict_GetItemString},
++    {"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
++    {"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
++    {"PyMapping_Keys", (PYTHON_PROC*)&py3_PyMapping_Keys},
++    {"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
++    {"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
++    {"PyObject_GetItem", (PYTHON_PROC*)&py3_PyObject_GetItem},
++    {"PyObject_IsTrue", (PYTHON_PROC*)&py3_PyObject_IsTrue},
+     {"PyLong_FromLong", (PYTHON_PROC*)&py3_PyLong_FromLong},
+     {"PyDict_New", (PYTHON_PROC*)&py3_PyDict_New},
+-    {"Py_BuildValue", (PYTHON_PROC*)&py3_Py_BuildValue},
+     {"PyType_Ready", (PYTHON_PROC*)&py3_PyType_Ready},
+     {"PyDict_SetItemString", (PYTHON_PROC*)&py3_PyDict_SetItemString},
+     {"PyLong_AsLong", (PYTHON_PROC*)&py3_PyLong_AsLong},
+@@ -286,29 +476,64 @@
+     {"PyEval_RestoreThread", (PYTHON_PROC*)&py3_PyEval_RestoreThread},
+     {"PyEval_SaveThread", (PYTHON_PROC*)&py3_PyEval_SaveThread},
+     {"PyArg_Parse", (PYTHON_PROC*)&py3_PyArg_Parse},
+-    {"PyArg_ParseTuple", (PYTHON_PROC*)&py3_PyArg_ParseTuple},
+     {"Py_IsInitialized", (PYTHON_PROC*)&py3_Py_IsInitialized},
++    {"_PyObject_NextNotImplemented", (PYTHON_PROC*)&py3__PyObject_NextNotImplemented},
+     {"_Py_NoneStruct", (PYTHON_PROC*)&py3__Py_NoneStruct},
++    {"_Py_FalseStruct", (PYTHON_PROC*)&py3__Py_FalseStruct},
++    {"_Py_TrueStruct", (PYTHON_PROC*)&py3__Py_TrueStruct},
+     {"PyErr_Clear", (PYTHON_PROC*)&py3_PyErr_Clear},
++    {"PyErr_PrintEx", (PYTHON_PROC*)&py3_PyErr_PrintEx},
+     {"PyObject_Init", (PYTHON_PROC*)&py3__PyObject_Init},
+     {"PyModule_AddObject", (PYTHON_PROC*)&py3_PyModule_AddObject},
+     {"PyImport_AppendInittab", (PYTHON_PROC*)&py3_PyImport_AppendInittab},
++# if PY_VERSION_HEX >= 0x030300f0
++    {"PyUnicode_AsUTF8", (PYTHON_PROC*)&py3_PyUnicode_AsUTF8},
++# else
+     {"_PyUnicode_AsString", (PYTHON_PROC*)&py3__PyUnicode_AsString},
++# endif
++# ifndef Py_UNICODE_USE_UCS_FUNCTIONS
++    {"PyUnicode_FromFormat", (PYTHON_PROC*)&py3_PyUnicode_FromFormat},
++# else
++#  ifdef Py_UNICODE_WIDE
++    {"PyUnicodeUCS4_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS4_FromFormat},
++#  else
++    {"PyUnicodeUCS2_FromFormat", (PYTHON_PROC*)&py3_PyUnicodeUCS2_FromFormat},
++#  endif
++# endif
++    {"PyBytes_AsString", (PYTHON_PROC*)&py3_PyBytes_AsString},
++    {"PyBytes_AsStringAndSize", (PYTHON_PROC*)&py3_PyBytes_AsStringAndSize},
++    {"PyBytes_FromString", (PYTHON_PROC*)&py3_PyBytes_FromString},
++    {"PyFloat_FromDouble", (PYTHON_PROC*)&py3_PyFloat_FromDouble},
++    {"PyFloat_AsDouble", (PYTHON_PROC*)&py3_PyFloat_AsDouble},
+     {"PyObject_GenericGetAttr", (PYTHON_PROC*)&py3_PyObject_GenericGetAttr},
+-    {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
+     {"PyType_GenericAlloc", (PYTHON_PROC*)&py3_PyType_GenericAlloc},
+     {"PyType_GenericNew", (PYTHON_PROC*)&py3_PyType_GenericNew},
++    {"PyType_Type", (PYTHON_PROC*)&py3_PyType_Type},
+     {"PySlice_Type", (PYTHON_PROC*)&py3_PySlice_Type},
++    {"PyFloat_Type", (PYTHON_PROC*)&py3_PyFloat_Type},
++    {"PyBool_Type", (PYTHON_PROC*)&py3_PyBool_Type},
++    {"PyErr_NewException", (PYTHON_PROC*)&py3_PyErr_NewException},
+ # ifdef Py_DEBUG
+     {"_Py_NegativeRefcount", (PYTHON_PROC*)&py3__Py_NegativeRefcount},
+     {"_Py_RefTotal", (PYTHON_PROC*)&py3__Py_RefTotal},
+     {"_Py_Dealloc", (PYTHON_PROC*)&py3__Py_Dealloc},
++    {"PyModule_Create2TraceRefs", (PYTHON_PROC*)&py3_PyModule_Create2TraceRefs},
++# else
++    {"PyModule_Create2", (PYTHON_PROC*)&py3_PyModule_Create2},
++# endif
++# if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+     {"_PyObject_DebugFree", (PYTHON_PROC*)&py3__PyObject_DebugFree},
+     {"_PyObject_DebugMalloc", (PYTHON_PROC*)&py3__PyObject_DebugMalloc},
+ # else
+     {"PyObject_Malloc", (PYTHON_PROC*)&py3_PyObject_Malloc},
+     {"PyObject_Free", (PYTHON_PROC*)&py3_PyObject_Free},
+ # endif
++    {"_PyObject_GC_New", (PYTHON_PROC*)&py3__PyObject_GC_New},
++    {"PyObject_GC_Del", (PYTHON_PROC*)&py3_PyObject_GC_Del},
++    {"PyObject_GC_UnTrack", (PYTHON_PROC*)&py3_PyObject_GC_UnTrack},
++    {"PyType_IsSubtype", (PYTHON_PROC*)&py3_PyType_IsSubtype},
++    {"PyCapsule_New", (PYTHON_PROC*)&py3_PyCapsule_New},
++    {"PyCapsule_GetPointer", (PYTHON_PROC*)&py3_PyCapsule_GetPointer},
+     {"", NULL},
+ };
+ 
+@@ -334,15 +559,16 @@
+ py3_runtime_link_init(char *libname, int verbose)
+ {
+     int i;
+-    void *ucs_from_string, *ucs_from_string_and_size;
++    void *ucs_from_string, *ucs_decode, *ucs_as_encoded_string;
+ 
+-# if !defined(PY_NO_RTLD_GLOBAL) && defined(UNIX) && defined(FEAT_PYTHON)
++# if !(defined(PY_NO_RTLD_GLOBAL) && defined(PY3_NO_RTLD_GLOBAL)) && defined(UNIX) && defined(FEAT_PYTHON)
+     /* Can't have Python and Python3 loaded at the same time.
+      * It cause a crash, because RTLD_GLOBAL is needed for
+      * standard C extension libraries of one or both python versions. */
+     if (python_loaded())
+     {
+-	EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
++	if (verbose)
++	    EMSG(_("E837: This Vim cannot execute :py3 after using :python"));
+ 	return FAIL;
+     }
+ # endif
+@@ -373,20 +599,32 @@
+ 
+     /* Load unicode functions separately as only the ucs2 or the ucs4 functions
+      * will be present in the library. */
++# if PY_VERSION_HEX >= 0x030300f0
++    ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicode_FromString");
++    ucs_decode = symbol_from_dll(hinstPy3, "PyUnicode_Decode");
++    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
++	    "PyUnicode_AsEncodedString");
++# else
+     ucs_from_string = symbol_from_dll(hinstPy3, "PyUnicodeUCS2_FromString");
+-    ucs_from_string_and_size = symbol_from_dll(hinstPy3,
+-	    "PyUnicodeUCS2_FromStringAndSize");
+-    if (!ucs_from_string || !ucs_from_string_and_size)
++    ucs_decode = symbol_from_dll(hinstPy3,
++	    "PyUnicodeUCS2_Decode");
++    ucs_as_encoded_string = symbol_from_dll(hinstPy3,
++	    "PyUnicodeUCS2_AsEncodedString");
++    if (!ucs_from_string || !ucs_decode || !ucs_as_encoded_string)
+     {
+ 	ucs_from_string = symbol_from_dll(hinstPy3,
+ 		"PyUnicodeUCS4_FromString");
+-	ucs_from_string_and_size = symbol_from_dll(hinstPy3,
+-		"PyUnicodeUCS4_FromStringAndSize");
++	ucs_decode = symbol_from_dll(hinstPy3,
++		"PyUnicodeUCS4_Decode");
++	ucs_as_encoded_string = symbol_from_dll(hinstPy3,
++		"PyUnicodeUCS4_AsEncodedString");
+     }
+-    if (ucs_from_string && ucs_from_string_and_size)
++# endif
++    if (ucs_from_string && ucs_decode && ucs_as_encoded_string)
+     {
+ 	py3_PyUnicode_FromString = ucs_from_string;
+-	py3_PyUnicode_FromStringAndSize = ucs_from_string_and_size;
++	py3_PyUnicode_Decode = ucs_decode;
++	py3_PyUnicode_AsEncodedString = ucs_as_encoded_string;
+     }
+     else
+     {
+@@ -422,33 +660,36 @@
+     PyObject *exdict = PyModule_GetDict(exmod);
+     p3imp_PyExc_AttributeError = PyDict_GetItemString(exdict, "AttributeError");
+     p3imp_PyExc_IndexError = PyDict_GetItemString(exdict, "IndexError");
++    p3imp_PyExc_KeyError = PyDict_GetItemString(exdict, "KeyError");
+     p3imp_PyExc_KeyboardInterrupt = PyDict_GetItemString(exdict, "KeyboardInterrupt");
+     p3imp_PyExc_TypeError = PyDict_GetItemString(exdict, "TypeError");
+     p3imp_PyExc_ValueError = PyDict_GetItemString(exdict, "ValueError");
++    p3imp_PyExc_RuntimeError = PyDict_GetItemString(exdict, "RuntimeError");
+     Py_XINCREF(p3imp_PyExc_AttributeError);
+     Py_XINCREF(p3imp_PyExc_IndexError);
++    Py_XINCREF(p3imp_PyExc_KeyError);
+     Py_XINCREF(p3imp_PyExc_KeyboardInterrupt);
+     Py_XINCREF(p3imp_PyExc_TypeError);
+     Py_XINCREF(p3imp_PyExc_ValueError);
++    Py_XINCREF(p3imp_PyExc_RuntimeError);
+     Py_XDECREF(exmod);
+ }
+ #endif /* DYNAMIC_PYTHON3 */
+ 
+-static PyObject *BufferNew (buf_T *);
+-static PyObject *WindowNew(win_T *);
+-static PyObject *LineToString(const char *);
++static int py3initialised = 0;
+ 
+-static PyTypeObject RangeType;
++#define PYINITIALISED py3initialised
+ 
+-/*
+- * Include the code shared with if_python.c
+- */
+-#include "if_py_both.h"
++#define DESTRUCTOR_FINISH(self) Py_TYPE(self)->tp_free((PyObject*)self)
++
++#define WIN_PYTHON_REF(win) win->w_python3_ref
++#define BUF_PYTHON_REF(buf) buf->b_python3_ref
++#define TAB_PYTHON_REF(tab) tab->tp_python3_ref
+ 
+     static void
+ call_PyObject_Free(void *p)
+ {
+-#ifdef Py_DEBUG
++#if defined(Py_DEBUG) && !defined(Py_DEBUG_NO_PYMALLOC)
+     _PyObject_DebugFree(p);
+ #else
+     PyObject_Free(p);
+@@ -467,24 +708,47 @@
+     return PyType_GenericAlloc(type,nitems);
+ }
+ 
+-/******************************************************
+- * Internal function prototypes.
++static PyObject *OutputGetattro(PyObject *, PyObject *);
++static int OutputSetattro(PyObject *, PyObject *, PyObject *);
++static PyObject *BufferGetattro(PyObject *, PyObject *);
++static int BufferSetattro(PyObject *, PyObject *, PyObject *);
++static PyObject *TabPageGetattro(PyObject *, PyObject *);
++static PyObject *WindowGetattro(PyObject *, PyObject *);
++static int WindowSetattro(PyObject *, PyObject *, PyObject *);
++static PyObject *RangeGetattro(PyObject *, PyObject *);
++static PyObject *CurrentGetattro(PyObject *, PyObject *);
++static int CurrentSetattro(PyObject *, PyObject *, PyObject *);
++static PyObject *DictionaryGetattro(PyObject *, PyObject *);
++static int DictionarySetattro(PyObject *, PyObject *, PyObject *);
++static PyObject *ListGetattro(PyObject *, PyObject *);
++static int ListSetattro(PyObject *, PyObject *, PyObject *);
++static PyObject *FunctionGetattro(PyObject *, PyObject *);
++
++static struct PyModuleDef vimmodule;
++
++#define PY_CAN_RECURSE
++
++/*
++ * Include the code shared with if_python.c
+  */
++#include "if_py_both.h"
+ 
+-static Py_ssize_t RangeStart;
+-static Py_ssize_t RangeEnd;
++#define GET_ATTR_STRING(name, nameobj) \
++    char	*name = ""; \
++    if (PyUnicode_Check(nameobj)) \
++	name = _PyUnicode_AsString(nameobj)
+ 
+-static int PythonIO_Init(void);
+-static void PythonIO_Fini(void);
+-PyMODINIT_FUNC Py3Init_vim(void);
++#define PY3OBJ_DELETED(obj) (obj->ob_base.ob_refcnt<=0)
+ 
+ /******************************************************
+- * 1. Python interpreter main program.
++ * Internal function prototypes.
+  */
+ 
+-static int py3initialised = 0;
++static PyObject *Py3Init_vim(void);
+ 
+-static PyGILState_STATE pygilstate = PyGILState_UNLOCKED;
++/******************************************************
++ * 1. Python interpreter main program.
++ */
+ 
+     void
+ python3_end()
+@@ -503,9 +767,8 @@
+     if (Py_IsInitialized())
+     {
+ 	// acquire lock before finalizing
+-	pygilstate = PyGILState_Ensure();
++	PyGILState_Ensure();
+ 
+-	PythonIO_Fini();
+ 	Py_Finalize();
+     }
+ 
+@@ -539,37 +802,49 @@
+ 
+ 	init_structs();
+ 
+-	/* initialise threads */
+-	PyEval_InitThreads();
++
++#ifdef PYTHON3_HOME
++	Py_SetPythonHome(PYTHON3_HOME);
++#endif
++
++	PyImport_AppendInittab("vim", Py3Init_vim);
+ 
+ #if !defined(MACOS) || defined(MACOS_X_UNIX)
+ 	Py_Initialize();
+ #else
+ 	PyMac_Initialize();
+ #endif
+-
++	/* Initialise threads, and below save the state using
++	 * PyEval_SaveThread.  Without the call to PyEval_SaveThread, thread
++	 * specific state (such as the system trace hook), will be lost
++	 * between invocations of Python code. */
++	PyEval_InitThreads();
+ #ifdef DYNAMIC_PYTHON3
+ 	get_py3_exceptions();
+ #endif
+ 
+-	if (PythonIO_Init())
++	if (PythonIO_Init_io())
+ 	    goto fail;
+ 
+-	PyImport_AppendInittab("vim", Py3Init_vim);
++	globals = PyModule_GetDict(PyImport_AddModule("__main__"));
+ 
+ 	/* Remove the element from sys.path that was added because of our
+ 	 * argv[0] value in Py3Init_vim().  Previously we used an empty
+-	 * string, but dependinding on the OS we then get an empty entry or
+-	 * the current directory in sys.path. */
+-	PyRun_SimpleString("import sys; sys.path = list(filter(lambda x: x != '/must>not&exist', sys.path))");
+-
+-	// lock is created and acquired in PyEval_InitThreads() and thread
+-	// state is created in Py_Initialize()
+-	// there _PyGILState_NoteThreadState() also sets gilcounter to 1
+-	// (python must have threads enabled!)
+-	// so the following does both: unlock GIL and save thread state in TLS
+-	// without deleting thread state
+-	PyGILState_Release(pygilstate);
++	 * string, but depending on the OS we then get an empty entry or
++	 * the current directory in sys.path.
++	 * Only after vim has been imported, the element does exist in
++	 * sys.path.
++	 */
++	PyRun_SimpleString("import vim; import sys; sys.path = list(filter(lambda x: not x.endswith('must>not&exist'), sys.path))");
++
++	/* lock is created and acquired in PyEval_InitThreads() and thread
++	 * state is created in Py_Initialize()
++	 * there _PyGILState_NoteThreadState() also sets gilcounter to 1
++	 * (python must have threads enabled!)
++	 * so the following does both: unlock GIL and save thread state in TLS
++	 * without deleting thread state
++	 */
++	PyEval_SaveThread();
+ 
+ 	py3initialised = 1;
+     }
+@@ -579,7 +854,7 @@
+ fail:
+     /* We call PythonIO_Flush() here to print any Python errors.
+      * This is OK, as it is possible to call this function even
+-     * if PythonIO_Init() has not completed successfully (it will
++     * if PythonIO_Init_io() has not completed successfully (it will
+      * not do anything in this case).
+      */
+     PythonIO_Flush();
+@@ -590,7 +865,7 @@
+  * External interface
+  */
+     static void
+-DoPy3Command(exarg_T *eap, const char *cmd)
++DoPyCommand(const char *cmd, rangeinitializer init_range, runner run, void *arg)
+ {
+ #if defined(MACOS) && !defined(MACOS_X_UNIX)
+     GrafPtr		oldPort;
+@@ -598,6 +873,9 @@
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+     char		*saved_locale;
+ #endif
++    PyObject		*cmdstr;
++    PyObject		*cmdbytes;
++    PyGILState_STATE	pygilstate;
+ 
+ #if defined(MACOS) && !defined(MACOS_X_UNIX)
+     GetPort(&oldPort);
+@@ -608,8 +886,8 @@
+     if (Python3_Init())
+ 	goto theend;
+ 
+-    RangeStart = eap->line1;
+-    RangeEnd = eap->line2;
++    init_range(arg);
++
+     Python_Release_Vim();	    /* leave vim */
+ 
+ #if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+@@ -627,7 +905,15 @@
+ 
+     pygilstate = PyGILState_Ensure();
+ 
+-    PyRun_SimpleString((char *)(cmd));
++    /* PyRun_SimpleString expects a UTF-8 string. Wrong encoding may cause
++     * SyntaxError (unicode error). */
++    cmdstr = PyUnicode_Decode(cmd, strlen(cmd),
++					(char *)ENC_OPT, CODEC_ERROR_HANDLER);
++    cmdbytes = PyUnicode_AsEncodedString(cmdstr, "utf-8", CODEC_ERROR_HANDLER);
++    Py_XDECREF(cmdstr);
++
++    run(PyBytes_AsString(cmdbytes), arg, &pygilstate);
++    Py_XDECREF(cmdbytes);
+ 
+     PyGILState_Release(pygilstate);
+ 
+@@ -660,10 +946,10 @@
+     script = script_get(eap, eap->arg);
+     if (!eap->skip)
+     {
+-	if (script == NULL)
+-	    DoPy3Command(eap, (char *)eap->arg);
+-	else
+-	    DoPy3Command(eap, (char *)script);
++	DoPyCommand(script == NULL ? (char *) eap->arg : (char *) script,
++		(rangeinitializer) init_range_cmd,
++		(runner) run_cmd,
++		(void *) eap);
+     }
+     vim_free(script);
+ }
+@@ -686,7 +972,10 @@
+      * different options under Windows, meaning that stdio pointers aren't
+      * compatible between the two. Yuk.
+      *
+-     * construct: exec(compile(open('a_filename').read(), 'a_filename', 'exec'))
++     * construct: exec(compile(open('a_filename', 'rb').read(), 'a_filename', 'exec'))
++     *
++     * Using bytes so that Python can detect the source encoding as it normally
++     * does. The doc does not say "compile" accept bytes, though.
+      *
+      * We need to escape any backslashes or single quotes in the file name, so that
+      * Python won't mangle the file name.
+@@ -709,8 +998,8 @@
+ 	    return;
+ 	if (i==0)
+ 	{
+-	    strcpy(p,"').read(),'");
+-	    p += 11;
++	    strcpy(p,"','rb').read(),'");
++	    p += 16;
+ 	}
+ 	else
+ 	{
+@@ -721,7 +1010,19 @@
+ 
+ 
+     /* Execute the file */
+-    DoPy3Command(eap, buffer);
++    DoPyCommand(buffer,
++	    (rangeinitializer) init_range_cmd,
++	    (runner) run_cmd,
++	    (void *) eap);
++}
++
++    void
++ex_py3do(exarg_T *eap)
++{
++    DoPyCommand((char *)eap->arg,
++	    (rangeinitializer)init_range_cmd,
++	    (runner)run_do,
++	    (void *)eap);
+ }
+ 
+ /******************************************************
+@@ -734,9 +1035,7 @@
+     static PyObject *
+ OutputGetattro(PyObject *self, PyObject *nameobj)
+ {
+-    char *name = "";
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
++    GET_ATTR_STRING(name, nameobj);
+ 
+     if (strcmp(name, "softspace") == 0)
+ 	return PyLong_FromLong(((OutputObject *)(self))->softspace);
+@@ -747,44 +1046,9 @@
+     static int
+ OutputSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+ {
+-    char *name = "";
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
++    GET_ATTR_STRING(name, nameobj);
+ 
+-    if (val == NULL) {
+-	PyErr_SetString(PyExc_AttributeError, _("can't delete OutputObject attributes"));
+-	return -1;
+-    }
+-
+-    if (strcmp(name, "softspace") == 0)
+-    {
+-	if (!PyLong_Check(val)) {
+-	    PyErr_SetString(PyExc_TypeError, _("softspace must be an integer"));
+-	    return -1;
+-	}
+-
+-	((OutputObject *)(self))->softspace = PyLong_AsLong(val);
+-	return 0;
+-    }
+-
+-    PyErr_SetString(PyExc_AttributeError, _("invalid attribute"));
+-    return -1;
+-}
+-
+-/***************/
+-
+-    static int
+-PythonIO_Init(void)
+-{
+-    PyType_Ready(&OutputType);
+-    return PythonIO_Init_io();
+-}
+-
+-    static void
+-PythonIO_Fini(void)
+-{
+-    PySys_SetObject("stdout", NULL);
+-    PySys_SetObject("stderr", NULL);
++    return OutputSetattr((OutputObject *)(self), name, val);
+ }
+ 
+ /******************************************************
+@@ -803,11 +1067,8 @@
+ 
+ #define BufferType_Check(obj) ((obj)->ob_base.ob_type == &BufferType)
+ 
+-static Py_ssize_t BufferLength(PyObject *);
+-static PyObject *BufferItem(PyObject *, Py_ssize_t);
+-static Py_ssize_t BufferAsItem(PyObject *, Py_ssize_t, PyObject *);
+-static PyObject* BufferSubscript(PyObject *self, PyObject* idx);
+-
++static PyObject* BufferSubscript(PyObject *self, PyObject *idx);
++static Py_ssize_t BufferAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
+ 
+ /* Line range type - Implementation functions
+  * --------------------------------------
+@@ -815,8 +1076,9 @@
+ 
+ #define RangeType_Check(obj) ((obj)->ob_base.ob_type == &RangeType)
+ 
+-static PyObject* RangeSubscript(PyObject *self, PyObject* idx);
++static PyObject* RangeSubscript(PyObject *self, PyObject *idx);
+ static Py_ssize_t RangeAsItem(PyObject *, Py_ssize_t, PyObject *);
++static Py_ssize_t RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val);
+ 
+ /* Current objects type - Implementation functions
+  * -----------------------------------------------
+@@ -828,174 +1090,114 @@
+     (ssizeargfunc)	0,		    /* sq_repeat,    x*n      */
+     (ssizeargfunc)	BufferItem,	    /* sq_item,      x[i]     */
+     0,					    /* was_sq_slice,	 x[i:j]   */
+-    (ssizeobjargproc)	BufferAsItem,	    /* sq_ass_item,  x[i]=v   */
++    0,					    /* sq_ass_item,  x[i]=v   */
+     0,					    /* sq_ass_slice, x[i:j]=v */
+     0,					    /* sq_contains */
+     0,					    /* sq_inplace_concat */
+     0,					    /* sq_inplace_repeat */
+ };
+ 
+-PyMappingMethods BufferAsMapping = {
++static PyMappingMethods BufferAsMapping = {
+     /* mp_length	*/ (lenfunc)BufferLength,
+     /* mp_subscript     */ (binaryfunc)BufferSubscript,
+-    /* mp_ass_subscript */ (objobjargproc)0,
++    /* mp_ass_subscript */ (objobjargproc)BufferAsSubscript,
+ };
+ 
+ 
+-/* Buffer object - Definitions
++/* Buffer object
+  */
+ 
+-static PyTypeObject BufferType;
+-
+     static PyObject *
+-BufferNew(buf_T *buf)
+-{
+-    /* We need to handle deletion of buffers underneath us.
+-     * If we add a "b_python3_ref" field to the buf_T structure,
+-     * then we can get at it in buf_freeall() in vim. We then
+-     * need to create only ONE Python object per buffer - if
+-     * we try to create a second, just INCREF the existing one
+-     * and return it. The (single) Python object referring to
+-     * the buffer is stored in "b_python3_ref".
+-     * Question: what to do on a buf_freeall(). We'll probably
+-     * have to either delete the Python object (DECREF it to
+-     * zero - a bad idea, as it leaves dangling refs!) or
+-     * set the buf_T * value to an invalid value (-1?), which
+-     * means we need checks in all access functions... Bah.
+-     */
+-
+-    BufferObject *self;
+-
+-    if (buf->b_python3_ref != NULL)
+-    {
+-	self = buf->b_python3_ref;
+-	Py_INCREF(self);
+-    }
+-    else
+-    {
+-	self = PyObject_NEW(BufferObject, &BufferType);
+-	buf->b_python3_ref = self;
+-	if (self == NULL)
+-	    return NULL;
+-	self->buf = buf;
+-    }
+-
+-    return (PyObject *)(self);
+-}
+-
+-    static void
+-BufferDestructor(PyObject *self)
++BufferGetattro(PyObject *self, PyObject *nameobj)
+ {
+-    BufferObject *this = (BufferObject *)(self);
+-
+-    if (this->buf && this->buf != INVALID_BUFFER_VALUE)
+-	this->buf->b_python3_ref = NULL;
+-}
++    PyObject *r;
+ 
+-    static PyObject *
+-BufferGetattro(PyObject *self, PyObject*nameobj)
+-{
+-    BufferObject *this = (BufferObject *)(self);
++    GET_ATTR_STRING(name, nameobj);
+ 
+-    char *name = "";
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
++    if ((r = BufferAttrValid((BufferObject *)(self), name)))
++	return r;
+ 
+-    if (CheckBuffer(this))
++    if (CheckBuffer((BufferObject *)(self)))
+ 	return NULL;
+ 
+-    if (strcmp(name, "name") == 0)
+-	return Py_BuildValue("s", this->buf->b_ffname);
+-    else if (strcmp(name, "number") == 0)
+-	return Py_BuildValue("n", this->buf->b_fnum);
+-    else if (strcmp(name,"__members__") == 0)
+-	return Py_BuildValue("[ss]", "name", "number");
++    r = BufferAttr((BufferObject *)(self), name);
++    if (r || PyErr_Occurred())
++	return r;
+     else
+ 	return PyObject_GenericGetAttr(self, nameobj);
+ }
+ 
+-    static PyObject *
+-BufferRepr(PyObject *self)
++    static int
++BufferSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+ {
+-    static char repr[100];
+-    BufferObject *this = (BufferObject *)(self);
+-
+-    if (this->buf == INVALID_BUFFER_VALUE)
+-    {
+-	vim_snprintf(repr, 100, _("<buffer object (deleted) at %p>"), (self));
+-	return PyUnicode_FromString(repr);
+-    }
+-    else
+-    {
+-	char *name = (char *)this->buf->b_fname;
+-	Py_ssize_t len;
+-
+-	if (name == NULL)
+-	    name = "";
+-	len = strlen(name);
+-
+-	if (len > 35)
+-	    name = name + (35 - len);
+-
+-	vim_snprintf(repr, 100, "<buffer %s%s>", len > 35 ? "..." : "", name);
++    GET_ATTR_STRING(name, nameobj);
+ 
+-	return PyUnicode_FromString(repr);
+-    }
++    return BufferSetattr((BufferObject *)(self), name, val);
+ }
+ 
+ /******************/
+ 
+-    static Py_ssize_t
+-BufferLength(PyObject *self)
+-{
+-    if (CheckBuffer((BufferObject *)(self)))
+-	return -1;
+-
+-    return (Py_ssize_t)(((BufferObject *)(self))->buf->b_ml.ml_line_count);
+-}
+-
+     static PyObject *
+-BufferItem(PyObject *self, Py_ssize_t n)
++BufferSubscript(PyObject *self, PyObject* idx)
+ {
+-    return RBItem((BufferObject *)(self), n, 1,
+-	       (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
+-}
++    if (PyLong_Check(idx))
++    {
++	long _idx = PyLong_AsLong(idx);
++	return BufferItem((BufferObject *)(self), _idx);
++    } else if (PySlice_Check(idx))
++    {
++	Py_ssize_t start, stop, step, slicelen;
+ 
+-    static PyObject *
+-BufferSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi)
+-{
+-    return RBSlice((BufferObject *)(self), lo, hi, 1,
+-	       (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count);
+-}
++	if (CheckBuffer((BufferObject *) self))
++	    return NULL;
+ 
+-    static Py_ssize_t
+-BufferAsItem(PyObject *self, Py_ssize_t n, PyObject *val)
+-{
+-    return RBAsItem((BufferObject *)(self), n, val, 1,
+-		(Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+-		NULL);
++	if (PySlice_GetIndicesEx((PyObject *)idx,
++	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
++	      &start, &stop,
++	      &step, &slicelen) < 0)
++	{
++	    return NULL;
++	}
++	return BufferSlice((BufferObject *)(self), start, stop);
++    }
++    else
++    {
++	PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
++	return NULL;
++    }
+ }
+ 
+-
+-    static PyObject *
+-BufferSubscript(PyObject *self, PyObject* idx)
++    static Py_ssize_t
++BufferAsSubscript(PyObject *self, PyObject* idx, PyObject* val)
+ {
+-    if (PyLong_Check(idx)) {
+-	long _idx = PyLong_AsLong(idx);
+-	return BufferItem(self,_idx);
+-    } else if (PySlice_Check(idx)) {
++    if (PyLong_Check(idx))
++    {
++	long n = PyLong_AsLong(idx);
++	return RBAsItem((BufferObject *)(self), n, val, 1,
++		    (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
++		    NULL);
++    } else if (PySlice_Check(idx))
++    {
+ 	Py_ssize_t start, stop, step, slicelen;
+ 
+-	if (PySlice_GetIndicesEx((PySliceObject *)idx,
+-	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count+1,
++	if (CheckBuffer((BufferObject *) self))
++	    return -1;
++
++	if (PySlice_GetIndicesEx((PyObject *)idx,
++	      (Py_ssize_t)((BufferObject *)(self))->buf->b_ml.ml_line_count,
+ 	      &start, &stop,
+-	      &step, &slicelen) < 0) {
+-	    return NULL;
++	      &step, &slicelen) < 0)
++	{
++	    return -1;
+ 	}
+-	return BufferSlice(self,start,stop+1);
+-    } else {
+-	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
+-	return NULL;
++	return RBAsSlice((BufferObject *)(self), start, stop, val, 1,
++			  (PyInt)((BufferObject *)(self))->buf->b_ml.ml_line_count,
++			  NULL);
++    }
++    else
++    {
++	PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
++	return -1;
+     }
+ }
+ 
+@@ -1012,27 +1214,19 @@
+     0,					 /* sq_inplace_repeat */
+ };
+ 
+-PyMappingMethods RangeAsMapping = {
++static PyMappingMethods RangeAsMapping = {
+     /* mp_length	*/ (lenfunc)RangeLength,
+     /* mp_subscript     */ (binaryfunc)RangeSubscript,
+-    /* mp_ass_subscript */ (objobjargproc)0,
++    /* mp_ass_subscript */ (objobjargproc)RangeAsSubscript,
+ };
+ 
+ /* Line range object - Implementation
+  */
+ 
+-    static void
+-RangeDestructor(PyObject *self)
+-{
+-    Py_DECREF(((RangeObject *)(self))->buf);
+-}
+-
+     static PyObject *
+ RangeGetattro(PyObject *self, PyObject *nameobj)
+ {
+-    char *name = "";
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
++    GET_ATTR_STRING(name, nameobj);
+ 
+     if (strcmp(name, "start") == 0)
+ 	return Py_BuildValue("n", ((RangeObject *)(self))->start - 1);
+@@ -1053,136 +1247,111 @@
+ 		    &((RangeObject *)(self))->end);
+ }
+ 
++    static Py_ssize_t
++RangeAsSlice(PyObject *self, Py_ssize_t lo, Py_ssize_t hi, PyObject *val)
++{
++    return RBAsSlice(((RangeObject *)(self))->buf, lo, hi, val,
++		    ((RangeObject *)(self))->start,
++		    ((RangeObject *)(self))->end,
++		    &((RangeObject *)(self))->end);
++}
++
+     static PyObject *
+ RangeSubscript(PyObject *self, PyObject* idx)
+ {
+-    if (PyLong_Check(idx)) {
++    if (PyLong_Check(idx))
++    {
+ 	long _idx = PyLong_AsLong(idx);
+-	return RangeItem(self,_idx);
+-    } else if (PySlice_Check(idx)) {
++	return RangeItem((RangeObject *)(self), _idx);
++    } else if (PySlice_Check(idx))
++    {
+ 	Py_ssize_t start, stop, step, slicelen;
+ 
+-	if (PySlice_GetIndicesEx((PySliceObject *)idx,
++	if (PySlice_GetIndicesEx((PyObject *)idx,
+ 		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
+ 		&start, &stop,
+-		&step, &slicelen) < 0) {
++		&step, &slicelen) < 0)
++	{
+ 	    return NULL;
+ 	}
+-	return RangeSlice(self,start,stop+1);
+-    } else {
+-	PyErr_SetString(PyExc_IndexError, "Index must be int or slice");
++	return RangeSlice((RangeObject *)(self), start, stop);
++    }
++    else
++    {
++	PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
+ 	return NULL;
+     }
+ }
+ 
+-/* Buffer list object - Definitions
+- */
+-
+-typedef struct
++    static Py_ssize_t
++RangeAsSubscript(PyObject *self, PyObject *idx, PyObject *val)
+ {
+-    PyObject_HEAD
+-} BufListObject;
+-
+-static PySequenceMethods BufListAsSeq = {
+-    (lenfunc)		BufListLength,	    /* sq_length,    len(x)   */
+-    (binaryfunc)	0,		    /* sq_concat,    x+y      */
+-    (ssizeargfunc)	0,		    /* sq_repeat,    x*n      */
+-    (ssizeargfunc)	BufListItem,	    /* sq_item,      x[i]     */
+-    0,					    /* was_sq_slice,	 x[i:j]   */
+-    (ssizeobjargproc)	0,		    /* sq_as_item,  x[i]=v   */
+-    0,					    /* sq_ass_slice, x[i:j]=v */
+-    0,					    /* sq_contains */
+-    0,					    /* sq_inplace_concat */
+-    0,					    /* sq_inplace_repeat */
+-};
+-
+-static PyTypeObject BufListType;
+-
+-/* Window object - Definitions
+- */
+-
+-static struct PyMethodDef WindowMethods[] = {
+-    /* name,	    function,		calling,    documentation */
+-    { NULL,	    NULL,		0,	    NULL }
+-};
++    if (PyLong_Check(idx))
++    {
++	long n = PyLong_AsLong(idx);
++	return RangeAsItem(self, n, val);
++    } else if (PySlice_Check(idx))
++    {
++	Py_ssize_t start, stop, step, slicelen;
+ 
+-static PyTypeObject WindowType;
++	if (PySlice_GetIndicesEx((PyObject *)idx,
++		((RangeObject *)(self))->end-((RangeObject *)(self))->start+1,
++		&start, &stop,
++		&step, &slicelen) < 0)
++	{
++	    return -1;
++	}
++	return RangeAsSlice(self, start, stop, val);
++    }
++    else
++    {
++	PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
++	return -1;
++    }
++}
+ 
+-/* Window object - Implementation
++/* TabPage object - Implementation
+  */
+ 
+     static PyObject *
+-WindowNew(win_T *win)
++TabPageGetattro(PyObject *self, PyObject *nameobj)
+ {
+-    /* We need to handle deletion of windows underneath us.
+-     * If we add a "w_python3_ref" field to the win_T structure,
+-     * then we can get at it in win_free() in vim. We then
+-     * need to create only ONE Python object per window - if
+-     * we try to create a second, just INCREF the existing one
+-     * and return it. The (single) Python object referring to
+-     * the window is stored in "w_python3_ref".
+-     * On a win_free() we set the Python object's win_T* field
+-     * to an invalid value. We trap all uses of a window
+-     * object, and reject them if the win_T* field is invalid.
+-     */
++    PyObject *r;
+ 
+-    WindowObject *self;
++    GET_ATTR_STRING(name, nameobj);
+ 
+-    if (win->w_python3_ref)
+-    {
+-	self = win->w_python3_ref;
+-	Py_INCREF(self);
+-    }
+-    else
+-    {
+-	self = PyObject_NEW(WindowObject, &WindowType);
+-	if (self == NULL)
+-	    return NULL;
+-	self->win = win;
+-	win->w_python3_ref = self;
+-    }
++    if ((r = TabPageAttrValid((TabPageObject *)(self), name)))
++	return r;
+ 
+-    return (PyObject *)(self);
+-}
+-
+-    static void
+-WindowDestructor(PyObject *self)
+-{
+-    WindowObject *this = (WindowObject *)(self);
++    if (CheckTabPage((TabPageObject *)(self)))
++	return NULL;
+ 
+-    if (this->win && this->win != INVALID_WINDOW_VALUE)
+-	this->win->w_python3_ref = NULL;
++    r = TabPageAttr((TabPageObject *)(self), name);
++    if (r || PyErr_Occurred())
++	return r;
++    else
++	return PyObject_GenericGetAttr(self, nameobj);
+ }
+ 
++/* Window object - Implementation
++ */
++
+     static PyObject *
+ WindowGetattro(PyObject *self, PyObject *nameobj)
+ {
+-    WindowObject *this = (WindowObject *)(self);
++    PyObject *r;
+ 
+-    char *name = "";
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
++    GET_ATTR_STRING(name, nameobj);
+ 
++    if ((r = WindowAttrValid((WindowObject *)(self), name)))
++	return r;
+ 
+-    if (CheckWindow(this))
++    if (CheckWindow((WindowObject *)(self)))
+ 	return NULL;
+ 
+-    if (strcmp(name, "buffer") == 0)
+-	return (PyObject *)BufferNew(this->win->w_buffer);
+-    else if (strcmp(name, "cursor") == 0)
+-    {
+-	pos_T *pos = &this->win->w_cursor;
+-
+-	return Py_BuildValue("(ll)", (long)(pos->lnum), (long)(pos->col));
+-    }
+-    else if (strcmp(name, "height") == 0)
+-	return Py_BuildValue("l", (long)(this->win->w_height));
+-#ifdef FEAT_VERTSPLIT
+-    else if (strcmp(name, "width") == 0)
+-	return Py_BuildValue("l", (long)(W_WIDTH(this->win)));
+-#endif
+-    else if (strcmp(name,"__members__") == 0)
+-	return Py_BuildValue("[sss]", "buffer", "cursor", "height");
++    r = WindowAttr((WindowObject *)(self), name);
++    if (r || PyErr_Occurred())
++	return r;
+     else
+ 	return PyObject_GenericGetAttr(self, nameobj);
+ }
+@@ -1190,22 +1359,29 @@
+     static int
+ WindowSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
+ {
+-    char *name = "";
+-
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
++    GET_ATTR_STRING(name, nameobj);
+ 
+-    return WindowSetattr(self, name, val);
++    return WindowSetattr((WindowObject *)(self), name, val);
+ }
+ 
+-/* Window list object - Definitions
++/* Tab page list object - Definitions
+  */
+ 
+-typedef struct
+-{
+-    PyObject_HEAD
+-}
+-WinListObject;
++static PySequenceMethods TabListAsSeq = {
++    (lenfunc)	     TabListLength,	    /* sq_length,    len(x)   */
++    (binaryfunc)     0,			    /* sq_concat,    x+y      */
++    (ssizeargfunc)   0,			    /* sq_repeat,    x*n      */
++    (ssizeargfunc)   TabListItem,	    /* sq_item,      x[i]     */
++    0,					    /* sq_slice,     x[i:j]   */
++    (ssizeobjargproc)0,			    /* sq_as_item,  x[i]=v   */
++    0,					    /* sq_ass_slice, x[i:j]=v */
++    0,					    /* sq_contains */
++    0,					    /* sq_inplace_concat */
++    0,					    /* sq_inplace_repeat */
++};
++
++/* Window list object - Definitions
++ */
+ 
+ static PySequenceMethods WinListAsSeq = {
+     (lenfunc)	     WinListLength,	    /* sq_length,    len(x)   */
+@@ -1220,76 +1396,168 @@
+     0,					    /* sq_inplace_repeat */
+ };
+ 
+-static PyTypeObject WinListType;
++/* Current items object - Implementation
++ */
++    static PyObject *
++CurrentGetattro(PyObject *self, PyObject *nameobj)
++{
++    PyObject	*r;
++    GET_ATTR_STRING(name, nameobj);
++    if (!(r = CurrentGetattr(self, name)))
++	return PyObject_GenericGetAttr(self, nameobj);
++    return r;
++}
+ 
+-/* Current items object - Definitions
++    static int
++CurrentSetattro(PyObject *self, PyObject *nameobj, PyObject *value)
++{
++    GET_ATTR_STRING(name, nameobj);
++    return CurrentSetattr(self, name, value);
++}
++
++/* Dictionary object - Definitions
+  */
+ 
+-typedef struct
++    static PyObject *
++DictionaryGetattro(PyObject *self, PyObject *nameobj)
+ {
+-    PyObject_HEAD
+-} CurrentObject;
++    DictionaryObject	*this = ((DictionaryObject *) (self));
+ 
+-static PyTypeObject CurrentType;
++    GET_ATTR_STRING(name, nameobj);
+ 
+-/* Current items object - Implementation
++    if (strcmp(name, "locked") == 0)
++	return PyLong_FromLong(this->dict->dv_lock);
++    else if (strcmp(name, "scope") == 0)
++	return PyLong_FromLong(this->dict->dv_scope);
++
++    return PyObject_GenericGetAttr(self, nameobj);
++}
++
++    static int
++DictionarySetattro(PyObject *self, PyObject *nameobj, PyObject *val)
++{
++    GET_ATTR_STRING(name, nameobj);
++    return DictionarySetattr((DictionaryObject *)(self), name, val);
++}
++
++/* List object - Definitions
+  */
++
++static PySequenceMethods ListAsSeq = {
++    (lenfunc)		ListLength,	 /* sq_length,	  len(x)   */
++    (binaryfunc)	0,		 /* RangeConcat, sq_concat,  x+y   */
++    (ssizeargfunc)	0,		 /* RangeRepeat, sq_repeat,  x*n   */
++    (ssizeargfunc)	ListItem,	 /* sq_item,	  x[i]	   */
++    (void *)		0,		 /* was_sq_slice,     x[i:j]   */
++    (ssizeobjargproc)	ListAssItem,	 /* sq_as_item,  x[i]=v   */
++    (void *)		0,		 /* was_sq_ass_slice, x[i:j]=v */
++    0,					 /* sq_contains */
++    (binaryfunc)	ListConcatInPlace,/* sq_inplace_concat */
++    0,					 /* sq_inplace_repeat */
++};
++
++static PyObject *ListSubscript(PyObject *, PyObject *);
++static Py_ssize_t ListAsSubscript(PyObject *, PyObject *, PyObject *);
++
++static PyMappingMethods ListAsMapping = {
++    /* mp_length	*/ (lenfunc) ListLength,
++    /* mp_subscript     */ (binaryfunc) ListSubscript,
++    /* mp_ass_subscript */ (objobjargproc) ListAsSubscript,
++};
++
+     static PyObject *
+-CurrentGetattro(PyObject *self UNUSED, PyObject *nameobj)
++ListSubscript(PyObject *self, PyObject* idx)
+ {
+-    char *name = "";
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
+-
+-    if (strcmp(name, "buffer") == 0)
+-	return (PyObject *)BufferNew(curbuf);
+-    else if (strcmp(name, "window") == 0)
+-	return (PyObject *)WindowNew(curwin);
+-    else if (strcmp(name, "line") == 0)
+-	return GetBufferLine(curbuf, (Py_ssize_t)curwin->w_cursor.lnum);
+-    else if (strcmp(name, "range") == 0)
+-	return RangeNew(curbuf, RangeStart, RangeEnd);
+-    else if (strcmp(name,"__members__") == 0)
+-	return Py_BuildValue("[ssss]", "buffer", "window", "line", "range");
++    if (PyLong_Check(idx))
++    {
++	long _idx = PyLong_AsLong(idx);
++	return ListItem((ListObject *)(self), _idx);
++    }
++    else if (PySlice_Check(idx))
++    {
++	Py_ssize_t start, stop, step, slicelen;
++
++	if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
++				 &start, &stop, &step, &slicelen) < 0)
++	    return NULL;
++	return ListSlice((ListObject *)(self), start, stop);
++    }
+     else
+     {
+-	PyErr_SetString(PyExc_AttributeError, name);
++	PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
+ 	return NULL;
+     }
+ }
+ 
+-    static int
+-CurrentSetattro(PyObject *self UNUSED, PyObject *nameobj, PyObject *value)
++    static Py_ssize_t
++ListAsSubscript(PyObject *self, PyObject *idx, PyObject *obj)
+ {
+-    char *name = "";
+-    if (PyUnicode_Check(nameobj))
+-	name = _PyUnicode_AsString(nameobj);
+-
+-    if (strcmp(name, "line") == 0)
++    if (PyLong_Check(idx))
+     {
+-	if (SetBufferLine(curbuf, (Py_ssize_t)curwin->w_cursor.lnum, value, NULL) == FAIL)
+-	    return -1;
++	long _idx = PyLong_AsLong(idx);
++	return ListAssItem((ListObject *)(self), _idx, obj);
++    }
++    else if (PySlice_Check(idx))
++    {
++	Py_ssize_t start, stop, step, slicelen;
+ 
+-	return 0;
++	if (PySlice_GetIndicesEx(idx, ListLength((ListObject *)(self)),
++				 &start, &stop, &step, &slicelen) < 0)
++	    return -1;
++	return ListAssSlice((ListObject *)(self), start, stop, obj);
+     }
+     else
+     {
+-	PyErr_SetString(PyExc_AttributeError, name);
++	PyErr_SetString(PyExc_TypeError, _("index must be int or slice"));
+ 	return -1;
+     }
+ }
+ 
++    static PyObject *
++ListGetattro(PyObject *self, PyObject *nameobj)
++{
++    GET_ATTR_STRING(name, nameobj);
++
++    if (strcmp(name, "locked") == 0)
++	return PyLong_FromLong(((ListObject *) (self))->list->lv_lock);
++
++    return PyObject_GenericGetAttr(self, nameobj);
++}
++
++    static int
++ListSetattro(PyObject *self, PyObject *nameobj, PyObject *val)
++{
++    GET_ATTR_STRING(name, nameobj);
++    return ListSetattr((ListObject *)(self), name, val);
++}
++
++/* Function object - Definitions
++ */
++
++    static PyObject *
++FunctionGetattro(PyObject *self, PyObject *nameobj)
++{
++    FunctionObject	*this = (FunctionObject *)(self);
++
++    GET_ATTR_STRING(name, nameobj);
++
++    if (strcmp(name, "name") == 0)
++	return PyUnicode_FromString((char *)(this->name));
++
++    return PyObject_GenericGetAttr(self, nameobj);
++}
++
+ /* External interface
+  */
+ 
+     void
+ python3_buffer_free(buf_T *buf)
+ {
+-    if (buf->b_python3_ref != NULL)
++    if (BUF_PYTHON_REF(buf) != NULL)
+     {
+-	BufferObject *bp = buf->b_python3_ref;
++	BufferObject *bp = BUF_PYTHON_REF(buf);
+ 	bp->buf = INVALID_BUFFER_VALUE;
+-	buf->b_python3_ref = NULL;
++	BUF_PYTHON_REF(buf) = NULL;
+     }
+ }
+ 
+@@ -1297,69 +1565,49 @@
+     void
+ python3_window_free(win_T *win)
+ {
+-    if (win->w_python3_ref != NULL)
++    if (WIN_PYTHON_REF(win) != NULL)
+     {
+-	WindowObject *wp = win->w_python3_ref;
++	WindowObject *wp = WIN_PYTHON_REF(win);
+ 	wp->win = INVALID_WINDOW_VALUE;
+-	win->w_python3_ref = NULL;
++	WIN_PYTHON_REF(win) = NULL;
+     }
+ }
+-#endif
+ 
+-static BufListObject TheBufferList =
+-{
+-    PyObject_HEAD_INIT(&BufListType)
+-};
+-
+-static WinListObject TheWindowList =
+-{
+-    PyObject_HEAD_INIT(&WinListType)
+-};
+-
+-static CurrentObject TheCurrent =
++    void
++python3_tabpage_free(tabpage_T *tab)
+ {
+-    PyObject_HEAD_INIT(&CurrentType)
+-};
+-
+-PyDoc_STRVAR(vim_module_doc,"vim python interface\n");
+-
+-static struct PyModuleDef vimmodule;
++    if (TAB_PYTHON_REF(tab) != NULL)
++    {
++	TabPageObject *tp = TAB_PYTHON_REF(tab);
++	tp->tab = INVALID_TABPAGE_VALUE;
++	TAB_PYTHON_REF(tab) = NULL;
++    }
++}
++#endif
+ 
+-#ifndef PROTO
+-PyMODINIT_FUNC Py3Init_vim(void)
++    static PyObject *
++Py3Init_vim(void)
+ {
+     PyObject *mod;
++
+     /* The special value is removed from sys.path in Python3_Init(). */
+     static wchar_t *(argv[2]) = {L"/must>not&exist/foo", NULL};
+ 
+-    PyType_Ready(&BufferType);
+-    PyType_Ready(&RangeType);
+-    PyType_Ready(&WindowType);
+-    PyType_Ready(&BufListType);
+-    PyType_Ready(&WinListType);
+-    PyType_Ready(&CurrentType);
++    if (init_types())
++	return NULL;
+ 
+     /* Set sys.argv[] to avoid a crash in warn(). */
+     PySys_SetArgv(1, argv);
+ 
+     mod = PyModule_Create(&vimmodule);
++    if (mod == NULL)
++	return NULL;
+ 
+-    VimError = Py_BuildValue("s", "vim.error");
+-
+-    PyModule_AddObject(mod, "error", VimError);
+-    Py_INCREF((PyObject *)(void *)&TheBufferList);
+-    PyModule_AddObject(mod, "buffers", (PyObject *)(void *)&TheBufferList);
+-    Py_INCREF((PyObject *)(void *)&TheCurrent);
+-    PyModule_AddObject(mod, "current", (PyObject *)(void *)&TheCurrent);
+-    Py_INCREF((PyObject *)(void *)&TheWindowList);
+-    PyModule_AddObject(mod, "windows", (PyObject *)(void *)&TheWindowList);
+-
+-    if (PyErr_Occurred())
++    if (populate_module(mod, PyModule_AddObject, PyObject_GetAttrString))
+ 	return NULL;
+ 
+     return mod;
+ }
+-#endif
+ 
+ /*************************************************************************
+  * 4. Utility functions for handling the interface between Vim and Python.
+@@ -1397,96 +1645,33 @@
+     }
+     *p = '\0';
+ 
+-    result = PyUnicode_FromStringAndSize(tmp, len);
++    result = PyUnicode_Decode(tmp, len, (char *)ENC_OPT, CODEC_ERROR_HANDLER);
+ 
+     vim_free(tmp);
+     return result;
+ }
+ 
+-    static void
+-init_structs(void)
++    void
++do_py3eval (char_u *str, typval_T *rettv)
++{
++    DoPyCommand((char *) str,
++	    (rangeinitializer) init_range_eval,
++	    (runner) run_eval,
++	    (void *) rettv);
++    switch(rettv->v_type)
++    {
++	case VAR_DICT: ++rettv->vval.v_dict->dv_refcount; break;
++	case VAR_LIST: ++rettv->vval.v_list->lv_refcount; break;
++	case VAR_FUNC: func_ref(rettv->vval.v_string);    break;
++	case VAR_UNKNOWN:
++	    rettv->v_type = VAR_NUMBER;
++	    rettv->vval.v_number = 0;
++	    break;
++    }
++}
++
++    void
++set_ref_in_python3 (int copyID)
+ {
+-    vim_memset(&OutputType, 0, sizeof(OutputType));
+-    OutputType.tp_name = "vim.message";
+-    OutputType.tp_basicsize = sizeof(OutputObject);
+-    OutputType.tp_getattro = OutputGetattro;
+-    OutputType.tp_setattro = OutputSetattro;
+-    OutputType.tp_flags = Py_TPFLAGS_DEFAULT;
+-    OutputType.tp_doc = "vim message object";
+-    OutputType.tp_methods = OutputMethods;
+-    OutputType.tp_alloc = call_PyType_GenericAlloc;
+-    OutputType.tp_new = call_PyType_GenericNew;
+-    OutputType.tp_free = call_PyObject_Free;
+-
+-    vim_memset(&BufferType, 0, sizeof(BufferType));
+-    BufferType.tp_name = "vim.buffer";
+-    BufferType.tp_basicsize = sizeof(BufferType);
+-    BufferType.tp_dealloc = BufferDestructor;
+-    BufferType.tp_repr = BufferRepr;
+-    BufferType.tp_as_sequence = &BufferAsSeq;
+-    BufferType.tp_as_mapping = &BufferAsMapping;
+-    BufferType.tp_getattro = BufferGetattro;
+-    BufferType.tp_flags = Py_TPFLAGS_DEFAULT;
+-    BufferType.tp_doc = "vim buffer object";
+-    BufferType.tp_methods = BufferMethods;
+-    BufferType.tp_alloc = call_PyType_GenericAlloc;
+-    BufferType.tp_new = call_PyType_GenericNew;
+-    BufferType.tp_free = call_PyObject_Free;
+-
+-    vim_memset(&WindowType, 0, sizeof(WindowType));
+-    WindowType.tp_name = "vim.window";
+-    WindowType.tp_basicsize = sizeof(WindowObject);
+-    WindowType.tp_dealloc = WindowDestructor;
+-    WindowType.tp_repr = WindowRepr;
+-    WindowType.tp_getattro = WindowGetattro;
+-    WindowType.tp_setattro = WindowSetattro;
+-    WindowType.tp_flags = Py_TPFLAGS_DEFAULT;
+-    WindowType.tp_doc = "vim Window object";
+-    WindowType.tp_methods = WindowMethods;
+-    WindowType.tp_alloc = call_PyType_GenericAlloc;
+-    WindowType.tp_new = call_PyType_GenericNew;
+-    WindowType.tp_free = call_PyObject_Free;
+-
+-    vim_memset(&BufListType, 0, sizeof(BufListType));
+-    BufListType.tp_name = "vim.bufferlist";
+-    BufListType.tp_basicsize = sizeof(BufListObject);
+-    BufListType.tp_as_sequence = &BufListAsSeq;
+-    BufListType.tp_flags = Py_TPFLAGS_DEFAULT;
+-    BufferType.tp_doc = "vim buffer list";
+-
+-    vim_memset(&WinListType, 0, sizeof(WinListType));
+-    WinListType.tp_name = "vim.windowlist";
+-    WinListType.tp_basicsize = sizeof(WinListType);
+-    WinListType.tp_as_sequence = &WinListAsSeq;
+-    WinListType.tp_flags = Py_TPFLAGS_DEFAULT;
+-    WinListType.tp_doc = "vim window list";
+-
+-    vim_memset(&RangeType, 0, sizeof(RangeType));
+-    RangeType.tp_name = "vim.range";
+-    RangeType.tp_basicsize = sizeof(RangeObject);
+-    RangeType.tp_dealloc = RangeDestructor;
+-    RangeType.tp_repr = RangeRepr;
+-    RangeType.tp_as_sequence = &RangeAsSeq;
+-    RangeType.tp_as_mapping = &RangeAsMapping;
+-    RangeType.tp_getattro = RangeGetattro;
+-    RangeType.tp_flags = Py_TPFLAGS_DEFAULT;
+-    RangeType.tp_doc = "vim Range object";
+-    RangeType.tp_methods = RangeMethods;
+-    RangeType.tp_alloc = call_PyType_GenericAlloc;
+-    RangeType.tp_new = call_PyType_GenericNew;
+-    RangeType.tp_free = call_PyObject_Free;
+-
+-    vim_memset(&CurrentType, 0, sizeof(CurrentType));
+-    CurrentType.tp_name = "vim.currentdata";
+-    CurrentType.tp_basicsize = sizeof(CurrentObject);
+-    CurrentType.tp_getattro = CurrentGetattro;
+-    CurrentType.tp_setattro = CurrentSetattro;
+-    CurrentType.tp_flags = Py_TPFLAGS_DEFAULT;
+-    CurrentType.tp_doc = "vim current object";
+-
+-    vim_memset(&vimmodule, 0, sizeof(vimmodule));
+-    vimmodule.m_name = "vim";
+-    vimmodule.m_doc = vim_module_doc;
+-    vimmodule.m_size = -1;
+-    vimmodule.m_methods = VimMethods;
++    set_ref_in_py(copyID);
+ }
+diff -Naur vim73.orig/src/if_ruby.c vim73/src/if_ruby.c
+--- vim73.orig/src/if_ruby.c	2010-06-30 19:33:12.000000000 +0000
++++ vim73/src/if_ruby.c	2013-06-07 17:07:31.715584778 +0000
+@@ -4,12 +4,17 @@
+  *
+  * Ruby interface by Shugo Maeda
+  *   with improvements by SegPhault (Ryan Paul)
++ *   with improvements by Jon Maken
+  *
+  * Do ":help uganda"  in Vim to read copying and usage conditions.
+  * Do ":help credits" in Vim to see a list of people who contributed.
+  * See README.txt for an overview of the Vim source code.
+  */
+ 
++#ifdef HAVE_CONFIG_H
++# include "auto/config.h"
++#endif
++
+ #include <stdio.h>
+ #include <string.h>
+ 
+@@ -26,14 +31,17 @@
+ # define RUBYEXTERN extern
+ #endif
+ 
++#ifdef DYNAMIC_RUBY
+ /*
+  * This is tricky.  In ruby.h there is (inline) function rb_class_of()
+  * definition.  This function use these variables.  But we want function to
+  * use dll_* variables.
+  */
+-#ifdef DYNAMIC_RUBY
+ # define rb_cFalseClass		(*dll_rb_cFalseClass)
+ # define rb_cFixnum		(*dll_rb_cFixnum)
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
++#  define rb_cFloat		(*dll_rb_cFloat)
++# endif
+ # define rb_cNilClass		(*dll_rb_cNilClass)
+ # define rb_cSymbol		(*dll_rb_cSymbol)
+ # define rb_cTrueClass		(*dll_rb_cTrueClass)
+@@ -46,8 +54,23 @@
+  */
+ #  define RUBY_EXPORT
+ # endif
++
++#if !(defined(WIN32) || defined(_WIN64))
++# include <dlfcn.h>
++# define HINSTANCE void*
++# define RUBY_PROC void*
++# define load_dll(n) dlopen((n), RTLD_LAZY|RTLD_GLOBAL)
++# define symbol_from_dll dlsym
++# define close_dll dlclose
++#else
++# define RUBY_PROC FARPROC
++# define load_dll vimLoadLib
++# define symbol_from_dll GetProcAddress
++# define close_dll FreeLibrary
+ #endif
+ 
++#endif  /* ifdef DYNAMIC_RUBY */
++
+ /* suggested by Ariya Mizutani */
+ #if (_MSC_VER == 1200)
+ # undef _WIN32_WINNT
+@@ -65,11 +88,20 @@
+ # define rb_int2big rb_int2big_stub
+ #endif
+ 
++#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
++	&& SIZEOF_INT < SIZEOF_LONG
++/* Ruby 2.0 defines a number of static functions which use rb_fix2int and
++ * rb_num2int if SIZEOF_INT < SIZEOF_LONG (64bit) */
++# define rb_fix2int rb_fix2int_stub
++# define rb_num2int rb_num2int_stub
++#endif
++
+ #include <ruby.h>
+ #ifdef RUBY19_OR_LATER
+ # include <ruby/encoding.h>
+ #endif
+ 
++#undef off_t	/* ruby defines off_t as _int64, Mingw uses long */
+ #undef EXTERN
+ #undef _
+ 
+@@ -81,7 +113,7 @@
+ #endif
+ 
+ /*
+- * Backward compatiblity for Ruby 1.8 and earlier.
++ * Backward compatibility for Ruby 1.8 and earlier.
+  * Ruby 1.9 does not provide STR2CSTR, instead StringValuePtr is provided.
+  * Ruby 1.9 does not provide RXXX(s)->len and RXXX(s)->ptr, instead
+  * RXXX_LEN(s) and RXXX_PTR(s) are provided.
+@@ -112,6 +144,7 @@
+ #endif
+ 
+ static int ruby_initialized = 0;
++static void *ruby_stack_start;
+ static VALUE objtbl;
+ 
+ static VALUE mVIM;
+@@ -125,84 +158,116 @@
+ static void ruby_io_init(void);
+ static void ruby_vim_init(void);
+ 
+-#if defined(DYNAMIC_RUBY) || defined(PROTO)
+-#ifdef PROTO
+-# define HINSTANCE int		/* for generating prototypes */
++#if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
++# if defined(__ia64) && !defined(ruby_init_stack)
++#  define ruby_init_stack(addr) ruby_init_stack((addr), rb_ia64_bsp())
++# endif
+ #endif
+ 
++#if defined(DYNAMIC_RUBY) || defined(PROTO)
++# ifdef PROTO
++#  define HINSTANCE int		/* for generating prototypes */
++# endif
++
+ /*
+  * Wrapper defines
+  */
+-#define rb_assoc_new			dll_rb_assoc_new
+-#define rb_cObject			(*dll_rb_cObject)
+-#define rb_check_type			dll_rb_check_type
+-#define rb_class_path			dll_rb_class_path
+-#define rb_data_object_alloc		dll_rb_data_object_alloc
+-#define rb_define_class_under		dll_rb_define_class_under
+-#define rb_define_const			dll_rb_define_const
+-#define rb_define_global_function	dll_rb_define_global_function
+-#define rb_define_method		dll_rb_define_method
+-#define rb_define_module		dll_rb_define_module
+-#define rb_define_module_function	dll_rb_define_module_function
+-#define rb_define_singleton_method	dll_rb_define_singleton_method
+-#define rb_define_virtual_variable	dll_rb_define_virtual_variable
+-#define rb_stdout			(*dll_rb_stdout)
+-#define rb_eArgError			(*dll_rb_eArgError)
+-#define rb_eIndexError			(*dll_rb_eIndexError)
+-#define rb_eRuntimeError		(*dll_rb_eRuntimeError)
+-#define rb_eStandardError		(*dll_rb_eStandardError)
+-#define rb_eval_string_protect		dll_rb_eval_string_protect
+-#define rb_global_variable		dll_rb_global_variable
+-#define rb_hash_aset			dll_rb_hash_aset
+-#define rb_hash_new			dll_rb_hash_new
+-#define rb_inspect			dll_rb_inspect
+-#define rb_int2inum			dll_rb_int2inum
+-#define rb_lastline_get			dll_rb_lastline_get
+-#define rb_lastline_set			dll_rb_lastline_set
+-#define rb_load_protect			dll_rb_load_protect
+-#define rb_num2long			dll_rb_num2long
+-#define rb_num2ulong			dll_rb_num2ulong
+-#define rb_obj_alloc			dll_rb_obj_alloc
+-#define rb_obj_as_string		dll_rb_obj_as_string
+-#define rb_obj_id			dll_rb_obj_id
+-#define rb_raise			dll_rb_raise
+-#define rb_str2cstr			dll_rb_str2cstr
+-#define rb_str_cat			dll_rb_str_cat
+-#define rb_str_concat			dll_rb_str_concat
+-#define rb_str_new			dll_rb_str_new
+-#ifdef rb_str_new2
++# define rb_assoc_new			dll_rb_assoc_new
++# define rb_cObject			(*dll_rb_cObject)
++# define rb_check_type			dll_rb_check_type
++# define rb_class_path			dll_rb_class_path
++# define rb_data_object_alloc		dll_rb_data_object_alloc
++# define rb_define_class_under		dll_rb_define_class_under
++# define rb_define_const			dll_rb_define_const
++# define rb_define_global_function	dll_rb_define_global_function
++# define rb_define_method		dll_rb_define_method
++# define rb_define_module		dll_rb_define_module
++# define rb_define_module_function	dll_rb_define_module_function
++# define rb_define_singleton_method	dll_rb_define_singleton_method
++# define rb_define_virtual_variable	dll_rb_define_virtual_variable
++# define rb_stdout			(*dll_rb_stdout)
++# define rb_eArgError			(*dll_rb_eArgError)
++# define rb_eIndexError			(*dll_rb_eIndexError)
++# define rb_eRuntimeError		(*dll_rb_eRuntimeError)
++# define rb_eStandardError		(*dll_rb_eStandardError)
++# define rb_eval_string_protect		dll_rb_eval_string_protect
++# define rb_global_variable		dll_rb_global_variable
++# define rb_hash_aset			dll_rb_hash_aset
++# define rb_hash_new			dll_rb_hash_new
++# define rb_inspect			dll_rb_inspect
++# define rb_int2inum			dll_rb_int2inum
++# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
++#  define rb_fix2int			dll_rb_fix2int
++#  define rb_num2int			dll_rb_num2int
++#  define rb_num2uint			dll_rb_num2uint
++# endif
++# define rb_lastline_get			dll_rb_lastline_get
++# define rb_lastline_set			dll_rb_lastline_set
++# define rb_load_protect			dll_rb_load_protect
++# ifndef RUBY19_OR_LATER
++#  define rb_num2long			dll_rb_num2long
++# endif
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER <= 19
++#  define rb_num2ulong			dll_rb_num2ulong
++# endif
++# define rb_obj_alloc			dll_rb_obj_alloc
++# define rb_obj_as_string		dll_rb_obj_as_string
++# define rb_obj_id			dll_rb_obj_id
++# define rb_raise			dll_rb_raise
++# define rb_str_cat			dll_rb_str_cat
++# define rb_str_concat			dll_rb_str_concat
++# define rb_str_new			dll_rb_str_new
++# ifdef rb_str_new2
+ /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
+-# define need_rb_str_new_cstr 1
+-# define rb_str_new_cstr		dll_rb_str_new_cstr
+-#else
+-# define rb_str_new2			dll_rb_str_new2
+-#endif
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+-# define rb_string_value_ptr		dll_rb_string_value_ptr
+-# define rb_float_new			dll_rb_float_new
+-# define rb_ary_new			dll_rb_ary_new
+-# define rb_ary_push			dll_rb_ary_push
+-#endif
+-#ifdef RUBY19_OR_LATER
+-# define rb_errinfo			dll_rb_errinfo
+-#else
+-# define ruby_errinfo			(*dll_ruby_errinfo)
+-#endif
+-#define ruby_init			dll_ruby_init
+-#define ruby_init_loadpath		dll_ruby_init_loadpath
+-#define NtInitialize			dll_NtInitialize
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+-# define rb_w32_snprintf		dll_rb_w32_snprintf
+-#endif
++#  define need_rb_str_new_cstr 1
++/* Ruby's headers #define rb_str_new_cstr to make use of GCC's
++ * __builtin_constant_p extension. */
++#  undef rb_str_new_cstr
++#  define rb_str_new_cstr		dll_rb_str_new_cstr
++# else
++#  define rb_str_new2			dll_rb_str_new2
++# endif
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++#  define rb_string_value		dll_rb_string_value
++#  define rb_string_value_ptr		dll_rb_string_value_ptr
++#  define rb_float_new			dll_rb_float_new
++#  define rb_ary_new			dll_rb_ary_new
++#  define rb_ary_push			dll_rb_ary_push
++#  if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
++#   ifdef __ia64
++#    define rb_ia64_bsp			dll_rb_ia64_bsp
++#    undef ruby_init_stack
++#    define ruby_init_stack(addr)	dll_ruby_init_stack((addr), rb_ia64_bsp())
++#   else
++#    define ruby_init_stack		dll_ruby_init_stack
++#   endif
++#  endif
++# else
++#  define rb_str2cstr			dll_rb_str2cstr
++# endif
++# ifdef RUBY19_OR_LATER
++#  define rb_errinfo			dll_rb_errinfo
++# else
++#  define ruby_errinfo			(*dll_ruby_errinfo)
++# endif
++# define ruby_init			dll_ruby_init
++# define ruby_init_loadpath		dll_ruby_init_loadpath
++# ifdef WIN3264
++#  define NtInitialize			dll_NtInitialize
++#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++#   define rb_w32_snprintf		dll_rb_w32_snprintf
++#  endif
++# endif
+ 
+-#ifdef RUBY19_OR_LATER
+-# define ruby_script			dll_ruby_script
+-# define rb_enc_find_index		dll_rb_enc_find_index
+-# define rb_enc_find			dll_rb_enc_find
+-# define rb_enc_str_new			dll_rb_enc_str_new
+-# define rb_sprintf			dll_rb_sprintf
+-# define ruby_init_stack		dll_ruby_init_stack
+-#endif
++# ifdef RUBY19_OR_LATER
++#  define ruby_script			dll_ruby_script
++#  define rb_enc_find_index		dll_rb_enc_find_index
++#  define rb_enc_find			dll_rb_enc_find
++#  define rb_enc_str_new			dll_rb_enc_str_new
++#  define rb_sprintf			dll_rb_sprintf
++#  define rb_require			dll_rb_require
++#  define ruby_process_options		dll_ruby_process_options
++# endif
+ 
+ /*
+  * Pointers for dynamic link
+@@ -210,6 +275,9 @@
+ static VALUE (*dll_rb_assoc_new) (VALUE, VALUE);
+ VALUE *dll_rb_cFalseClass;
+ VALUE *dll_rb_cFixnum;
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
++VALUE *dll_rb_cFloat;
++# endif
+ VALUE *dll_rb_cNilClass;
+ static VALUE *dll_rb_cObject;
+ VALUE *dll_rb_cSymbol;
+@@ -236,7 +304,11 @@
+ static VALUE (*dll_rb_hash_new) (void);
+ static VALUE (*dll_rb_inspect) (VALUE);
+ static VALUE (*dll_rb_int2inum) (long);
+-static VALUE (*dll_rb_int2inum) (long);
++# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
++static long (*dll_rb_fix2int) (VALUE);
++static long (*dll_rb_num2int) (VALUE);
++static unsigned long (*dll_rb_num2uint) (VALUE);
++# endif
+ static VALUE (*dll_rb_lastline_get) (void);
+ static void (*dll_rb_lastline_set) (VALUE);
+ static void (*dll_rb_load_protect) (VALUE, int, int*);
+@@ -246,47 +318,62 @@
+ static VALUE (*dll_rb_obj_as_string) (VALUE);
+ static VALUE (*dll_rb_obj_id) (VALUE);
+ static void (*dll_rb_raise) (VALUE, const char*, ...);
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++static VALUE (*dll_rb_string_value) (volatile VALUE*);
++# else
+ static char *(*dll_rb_str2cstr) (VALUE,int*);
++# endif
+ static VALUE (*dll_rb_str_cat) (VALUE, const char*, long);
+ static VALUE (*dll_rb_str_concat) (VALUE, VALUE);
+ static VALUE (*dll_rb_str_new) (const char*, long);
+-#ifdef need_rb_str_new_cstr
++# ifdef need_rb_str_new_cstr
+ /* Ruby may #define rb_str_new2 to use rb_str_new_cstr. */
+ static VALUE (*dll_rb_str_new_cstr) (const char*);
+-#else
++# else
+ static VALUE (*dll_rb_str_new2) (const char*);
+-#endif
+-#ifdef RUBY19_OR_LATER
++# endif
++# ifdef RUBY19_OR_LATER
+ static VALUE (*dll_rb_errinfo) (void);
+-#else
++# else
+ static VALUE *dll_ruby_errinfo;
+-#endif
++# endif
+ static void (*dll_ruby_init) (void);
+ static void (*dll_ruby_init_loadpath) (void);
++# ifdef WIN3264
+ static void (*dll_NtInitialize) (int*, char***);
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
++#  endif
++# endif
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+ static char * (*dll_rb_string_value_ptr) (volatile VALUE*);
+ static VALUE (*dll_rb_float_new) (double);
+ static VALUE (*dll_rb_ary_new) (void);
+ static VALUE (*dll_rb_ary_push) (VALUE, VALUE);
+-#endif
+-#ifdef RUBY19_OR_LATER
++#  if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
++#   ifdef __ia64
++static void * (*dll_rb_ia64_bsp) (void);
++static void (*dll_ruby_init_stack)(VALUE*, void*);
++#   else
++static void (*dll_ruby_init_stack)(VALUE*);
++#   endif
++#  endif
++# endif
++# ifdef RUBY19_OR_LATER
+ static VALUE (*dll_rb_int2big)(SIGNED_VALUE);
+-#endif
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+-static int (*dll_rb_w32_snprintf)(char*, size_t, const char*, ...);
+-#endif
++# endif
+ 
+-#ifdef RUBY19_OR_LATER
++# ifdef RUBY19_OR_LATER
+ static void (*dll_ruby_script) (const char*);
+ static int (*dll_rb_enc_find_index) (const char*);
+ static rb_encoding* (*dll_rb_enc_find) (const char*);
+ static VALUE (*dll_rb_enc_str_new) (const char*, long, rb_encoding*);
+ static VALUE (*dll_rb_sprintf) (const char*, ...);
+-static void (*ruby_init_stack)(VALUE*);
+-#endif
++static VALUE (*dll_rb_require) (const char*);
++static void* (*ruby_process_options)(int, char**);
++# endif
+ 
+-#ifdef RUBY19_OR_LATER
++# if defined(RUBY19_OR_LATER) && !defined(PROTO)
+ SIGNED_VALUE rb_num2long_stub(VALUE x)
+ {
+     return dll_rb_num2long(x);
+@@ -295,14 +382,35 @@
+ {
+     return dll_rb_int2big(x);
+ }
+-#endif
++#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20 \
++	&& SIZEOF_INT < SIZEOF_LONG
++long rb_fix2int_stub(VALUE x)
++{
++    return dll_rb_fix2int(x);
++}
++long rb_num2int_stub(VALUE x)
++{
++    return dll_rb_num2int(x);
++}
++#  endif
++#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
++VALUE
++rb_float_new_in_heap(double d)
++{
++    return dll_rb_float_new(d);
++}
++VALUE rb_num2ulong(VALUE x)
++{
++    return (long)RSHIFT((SIGNED_VALUE)(x),1);
++}
++#  endif
++# endif
+ 
+-static HINSTANCE hinstRuby = 0; /* Instance of ruby.dll */
++static HINSTANCE hinstRuby = NULL; /* Instance of ruby.dll */
+ 
+ /*
+  * Table of name to function pointer of ruby.
+  */
+-#define RUBY_PROC FARPROC
+ static struct
+ {
+     char *name;
+@@ -312,6 +420,9 @@
+     {"rb_assoc_new", (RUBY_PROC*)&dll_rb_assoc_new},
+     {"rb_cFalseClass", (RUBY_PROC*)&dll_rb_cFalseClass},
+     {"rb_cFixnum", (RUBY_PROC*)&dll_rb_cFixnum},
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 20
++    {"rb_cFloat", (RUBY_PROC*)&dll_rb_cFloat},
++# endif
+     {"rb_cNilClass", (RUBY_PROC*)&dll_rb_cNilClass},
+     {"rb_cObject", (RUBY_PROC*)&dll_rb_cObject},
+     {"rb_cSymbol", (RUBY_PROC*)&dll_rb_cSymbol},
+@@ -338,6 +449,11 @@
+     {"rb_hash_new", (RUBY_PROC*)&dll_rb_hash_new},
+     {"rb_inspect", (RUBY_PROC*)&dll_rb_inspect},
+     {"rb_int2inum", (RUBY_PROC*)&dll_rb_int2inum},
++# if SIZEOF_INT < SIZEOF_LONG /* 64 bits only */
++    {"rb_fix2int", (RUBY_PROC*)&dll_rb_fix2int},
++    {"rb_num2int", (RUBY_PROC*)&dll_rb_num2int},
++    {"rb_num2uint", (RUBY_PROC*)&dll_rb_num2uint},
++# endif
+     {"rb_lastline_get", (RUBY_PROC*)&dll_rb_lastline_get},
+     {"rb_lastline_set", (RUBY_PROC*)&dll_rb_lastline_set},
+     {"rb_load_protect", (RUBY_PROC*)&dll_rb_load_protect},
+@@ -347,47 +463,64 @@
+     {"rb_obj_as_string", (RUBY_PROC*)&dll_rb_obj_as_string},
+     {"rb_obj_id", (RUBY_PROC*)&dll_rb_obj_id},
+     {"rb_raise", (RUBY_PROC*)&dll_rb_raise},
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++    {"rb_string_value", (RUBY_PROC*)&dll_rb_string_value},
++# else
+     {"rb_str2cstr", (RUBY_PROC*)&dll_rb_str2cstr},
++# endif
+     {"rb_str_cat", (RUBY_PROC*)&dll_rb_str_cat},
+     {"rb_str_concat", (RUBY_PROC*)&dll_rb_str_concat},
+     {"rb_str_new", (RUBY_PROC*)&dll_rb_str_new},
+-#ifdef need_rb_str_new_cstr
++# ifdef need_rb_str_new_cstr
+     {"rb_str_new_cstr", (RUBY_PROC*)&dll_rb_str_new_cstr},
+-#else
++# else
+     {"rb_str_new2", (RUBY_PROC*)&dll_rb_str_new2},
+-#endif
+-#ifdef RUBY19_OR_LATER
++# endif
++# ifdef RUBY19_OR_LATER
+     {"rb_errinfo", (RUBY_PROC*)&dll_rb_errinfo},
+-#else
++# else
+     {"ruby_errinfo", (RUBY_PROC*)&dll_ruby_errinfo},
+-#endif
++# endif
+     {"ruby_init", (RUBY_PROC*)&dll_ruby_init},
+     {"ruby_init_loadpath", (RUBY_PROC*)&dll_ruby_init_loadpath},
++# ifdef WIN3264
+     {
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
++#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER < 19
+     "NtInitialize",
+-#else
++#  else
+     "ruby_sysinit",
+-#endif
++#  endif
+ 			(RUBY_PROC*)&dll_NtInitialize},
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++#  if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+     {"rb_w32_snprintf", (RUBY_PROC*)&dll_rb_w32_snprintf},
+-#endif
+-#if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
++#  endif
++# endif
++# if defined(DYNAMIC_RUBY_VER) && DYNAMIC_RUBY_VER >= 18
+     {"rb_string_value_ptr", (RUBY_PROC*)&dll_rb_string_value_ptr},
++#  if DYNAMIC_RUBY_VER <= 19
+     {"rb_float_new", (RUBY_PROC*)&dll_rb_float_new},
++#  else
++    {"rb_float_new_in_heap", (RUBY_PROC*)&dll_rb_float_new},
++#  endif
+     {"rb_ary_new", (RUBY_PROC*)&dll_rb_ary_new},
+     {"rb_ary_push", (RUBY_PROC*)&dll_rb_ary_push},
+-#endif
+-#ifdef RUBY19_OR_LATER
++# endif
++# ifdef RUBY19_OR_LATER
+     {"rb_int2big", (RUBY_PROC*)&dll_rb_int2big},
+     {"ruby_script", (RUBY_PROC*)&dll_ruby_script},
+     {"rb_enc_find_index", (RUBY_PROC*)&dll_rb_enc_find_index},
+     {"rb_enc_find", (RUBY_PROC*)&dll_rb_enc_find},
+     {"rb_enc_str_new", (RUBY_PROC*)&dll_rb_enc_str_new},
+     {"rb_sprintf", (RUBY_PROC*)&dll_rb_sprintf},
++    {"rb_require", (RUBY_PROC*)&dll_rb_require},
++    {"ruby_process_options", (RUBY_PROC*)&dll_ruby_process_options},
++# endif
++# if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
++#  ifdef __ia64
++    {"rb_ia64_bsp", (RUBY_PROC*)&dll_rb_ia64_bsp},
++#  endif
+     {"ruby_init_stack", (RUBY_PROC*)&dll_ruby_init_stack},
+-#endif
++# endif
+     {"", NULL},
+ };
+ 
+@@ -399,8 +532,8 @@
+ {
+     if (hinstRuby)
+     {
+-	FreeLibrary(hinstRuby);
+-	hinstRuby = 0;
++	close_dll(hinstRuby);
++	hinstRuby = NULL;
+     }
+ }
+ 
+@@ -416,7 +549,7 @@
+ 
+     if (hinstRuby)
+ 	return OK;
+-    hinstRuby = LoadLibrary(libname);
++    hinstRuby = load_dll(libname);
+     if (!hinstRuby)
+     {
+ 	if (verbose)
+@@ -426,11 +559,11 @@
+ 
+     for (i = 0; ruby_funcname_table[i].ptr; ++i)
+     {
+-	if (!(*ruby_funcname_table[i].ptr = GetProcAddress(hinstRuby,
++	if (!(*ruby_funcname_table[i].ptr = symbol_from_dll(hinstRuby,
+ 			ruby_funcname_table[i].name)))
+ 	{
+-	    FreeLibrary(hinstRuby);
+-	    hinstRuby = 0;
++	    close_dll(hinstRuby);
++	    hinstRuby = NULL;
+ 	    if (verbose)
+ 		EMSG2(_(e_loadfunc), ruby_funcname_table[i].name);
+ 	    return FAIL;
+@@ -539,9 +672,9 @@
+ 	if (u_save(eap->line1 - 1, eap->line2 + 1) != OK)
+ 	    return;
+ 	for (i = eap->line1; i <= eap->line2; i++) {
+-	    VALUE line, oldline;
++	    VALUE line;
+ 
+-	    line = oldline = vim_str2rb_enc_str((char *)ml_get(i));
++	    line = vim_str2rb_enc_str((char *)ml_get(i));
+ 	    rb_lastline_set(line);
+ 	    eval_enc_string_protect((char *) eap->arg, &state);
+ 	    if (state) {
+@@ -610,19 +743,22 @@
+ 	    NtInitialize(&argc, &argv);
+ #endif
+ 	    {
+-#ifdef RUBY19_OR_LATER
+-		RUBY_INIT_STACK;
++#if defined(RUBY19_OR_LATER) || defined(RUBY_INIT_STACK)
++		ruby_init_stack(ruby_stack_start);
+ #endif
+ 		ruby_init();
+ 	    }
+ #ifdef RUBY19_OR_LATER
++	    {
++		int dummy_argc = 2;
++		char *dummy_argv[] = {"vim-ruby", "-e0"};
++		ruby_process_options(dummy_argc, dummy_argv);
++	    }
+ 	    ruby_script("vim-ruby");
+-#endif
++#else
+ 	    ruby_init_loadpath();
+-	    ruby_io_init();
+-#ifdef RUBY19_OR_LATER
+-	    rb_enc_find_index("encdb");
+ #endif
++	    ruby_io_init();
+ 	    ruby_vim_init();
+ 	    ruby_initialized = 1;
+ #ifdef DYNAMIC_RUBY
+@@ -711,11 +847,19 @@
+     char *buff, *p;
+ 
+     str = rb_obj_as_string(str);
+-    buff = ALLOCA_N(char, RSTRING_LEN(str));
+-    strcpy(buff, RSTRING_PTR(str));
+-    p = strchr(buff, '\n');
+-    if (p) *p = '\0';
+-    MSG(buff);
++    if (RSTRING_LEN(str) > 0)
++    {
++	/* Only do this when the string isn't empty, alloc(0) causes trouble. */
++	buff = ALLOCA_N(char, RSTRING_LEN(str));
++	strcpy(buff, RSTRING_PTR(str));
++	p = strchr(buff, '\n');
++	if (p) *p = '\0';
++	MSG(buff);
++    }
++    else
++    {
++	MSG("");
++    }
+     return Qnil;
+ }
+ 
+@@ -906,15 +1050,9 @@
+ 
+ static VALUE get_buffer_line(buf_T *buf, linenr_T n)
+ {
+-    if (n > 0 && n <= buf->b_ml.ml_line_count)
+-    {
+-	char *line = (char *)ml_get_buf(buf, n, FALSE);
+-	return line ? vim_str2rb_enc_str(line) : Qnil;
+-    }
+-    rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
+-#ifndef __GNUC__
+-    return Qnil; /* For stop warning */
+-#endif
++    if (n <= 0 || n > buf->b_ml.ml_line_count)
++	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
++    return vim_str2rb_enc_str((char *)ml_get_buf(buf, n, FALSE));
+ }
+ 
+ static VALUE buffer_aref(VALUE self, VALUE num)
+@@ -953,9 +1091,6 @@
+     else
+     {
+ 	rb_raise(rb_eIndexError, "line number %ld out of range", (long)n);
+-#ifndef __GNUC__
+-	return Qnil; /* For stop warning */
+-#endif
+     }
+     return str;
+ }
+@@ -1010,7 +1145,8 @@
+     long	n = NUM2LONG(num);
+     aco_save_T	aco;
+ 
+-    if (line == NULL) {
++    if (line == NULL)
++    {
+ 	rb_raise(rb_eIndexError, "NULL line");
+     }
+     else if (n >= 0 && n <= buf->b_ml.ml_line_count)
+@@ -1034,7 +1170,8 @@
+ 
+ 	update_curbuf(NOT_VALID);
+     }
+-    else {
++    else
++    {
+ 	rb_raise(rb_eIndexError, "line number %ld out of range", n);
+     }
+     return str;
+@@ -1145,21 +1282,21 @@
+     return height;
+ }
+ 
+-static VALUE window_width(VALUE self)
++static VALUE window_width(VALUE self UNUSED)
+ {
+-    win_T *win = get_win(self);
+-
+-    return INT2NUM(win->w_width);
++    return INT2NUM(W_WIDTH(get_win(self)));
+ }
+ 
+-static VALUE window_set_width(VALUE self, VALUE width)
++static VALUE window_set_width(VALUE self UNUSED, VALUE width)
+ {
++#ifdef FEAT_VERTSPLIT
+     win_T *win = get_win(self);
+     win_T *savewin = curwin;
+ 
+     curwin = win;
+     win_setwidth(NUM2INT(width));
+     curwin = savewin;
++#endif
+     return width;
+ }
+ 
+@@ -1187,6 +1324,11 @@
+     return Qnil;
+ }
+ 
++static VALUE f_nop(VALUE self UNUSED)
++{
++    return Qnil;
++}
++
+ static VALUE f_p(int argc, VALUE *argv, VALUE self UNUSED)
+ {
+     int i;
+@@ -1208,6 +1350,7 @@
+ 
+     rb_stdout = rb_obj_alloc(rb_cObject);
+     rb_define_singleton_method(rb_stdout, "write", vim_message, 1);
++    rb_define_singleton_method(rb_stdout, "flush", f_nop, 0);
+     rb_define_global_function("p", f_p, -1);
+ }
+ 
+@@ -1217,7 +1360,7 @@
+     rb_global_variable(&objtbl);
+ 
+     /* The Vim module used to be called "VIM", but "Vim" is better.  Make an
+-     * alias "VIM" for backwards compatiblity. */
++     * alias "VIM" for backwards compatibility. */
+     mVIM = rb_define_module("Vim");
+     rb_define_const(rb_cObject, "VIM", mVIM);
+     rb_define_const(mVIM, "VERSION_MAJOR", INT2NUM(VIM_VERSION_MAJOR));
+@@ -1273,3 +1416,9 @@
+     rb_define_virtual_variable("$curbuf", buffer_s_current, 0);
+     rb_define_virtual_variable("$curwin", window_s_current, 0);
+ }
++
++void vim_ruby_init(void *stack_start)
++{
++    /* should get machine stack start address early in main function */
++    ruby_stack_start = stack_start;
++}
+diff -Naur vim73.orig/src/if_sniff.c vim73/src/if_sniff.c
+--- vim73.orig/src/if_sniff.c	2010-05-15 11:04:06.000000000 +0000
++++ vim73/src/if_sniff.c	2013-06-07 17:07:31.722251426 +0000
+@@ -9,7 +9,6 @@
+ 
+ #ifdef WIN32
+ # include <stdio.h>
+-# include "vimio.h"
+ # include <process.h>
+ # include <string.h>
+ # include <assert.h>
+@@ -450,7 +449,7 @@
+     if (!sniff_cmd)
+     {
+ 	struct sn_cmd_list *list = sniff_cmd_ext;
+-	while(list)
++	while (list)
+ 	{
+ 	    if (!strcmp(cmd, list->sniff_cmd->cmd_name))
+ 	    {
+@@ -480,7 +479,7 @@
+ 	/* unescape message text */
+ 	char *p = msg;
+ 	char *end = p+strlen(msg);
+-	while(*p)
++	while (*p)
+ 	{
+ 	    if (*p == '\\')
+ 		mch_memmove(p,p+1,end-p);
+@@ -490,7 +489,7 @@
+ 	SNIFF_TRACE1("request def = %s\n",def);
+ 	SNIFF_TRACE1("request msg = %s\n",msg);
+ 
+-	while(list && list->next_cmd)
++	while (list && list->next_cmd)
+ 	    list = list->next_cmd;
+ 	if (!list)
+ 	    sniff_cmd_ext = cmd_node;
+@@ -629,7 +628,7 @@
+ 	    gui_mch_wait_for_chars(0L);
+ #endif
+ #ifdef WIN32
+-	while(sniffBufStart != NULL)
++	while (sniffBufStart != NULL)
+ 	{
+ 	    struct sniffBufNode *node = sniffBufStart;
+ 	    sniffBufStart = sniffBufStart->next;
+@@ -790,7 +789,7 @@
+     command   = buffer[0];
+     arguments = &buffer[1];
+     token = strtok(arguments, sniff_rq_sep);
+-    while(argc <3)
++    while (argc <3)
+     {
+ 	if (token)
+ 	{
+@@ -926,7 +925,7 @@
+ 	default :
+ 	    break;
+     }
+-    while(argc)
++    while (argc)
+ 	vim_free(argv[--argc]);
+ }
+ 
+diff -Naur vim73.orig/src/if_tcl.c vim73/src/if_tcl.c
+--- vim73.orig/src/if_tcl.c	2010-08-08 13:07:25.000000000 +0000
++++ vim73/src/if_tcl.c	2013-06-07 17:07:31.752251340 +0000
+@@ -74,18 +74,18 @@
+ #endif
+ 
+ #include <tcl.h>
+-#include <errno.h>
+ #include <string.h>
+ 
+ typedef struct
+ {
+     Tcl_Interp *interp;
++    int exitvalue;
+     int range_start, range_end;
+     int lbase;
+     char *curbuf, *curwin;
+ } tcl_info;
+ 
+-static tcl_info tclinfo = { NULL, 0, 0, 0, NULL, NULL };
++static tcl_info tclinfo = { NULL, 0, 0, 0, 0, NULL, NULL };
+ 
+ #define VAR_RANGE1	"::vim::range(start)"
+ #define VAR_RANGE2	"::vim::range(begin)"
+@@ -280,16 +280,19 @@
+  ****************************************************************************/
+ 
+ /*
+- * Replace standard "exit" and "catch" commands.
++ * Replace standard "exit" command.
+  *
+- * This is a design flaw in Tcl -  the standard "exit" command just calls
+- * exit() and kills the application.  It should return TCL_EXIT to the
+- * app, which then decides if it wants to terminate or not.  In our case,
+- * we just delete the Tcl interpreter (and create a new one with the next
+- * :tcl command).
++ * Delete the Tcl interpreter; a new one will be created with the next
++ * :tcl command). The exit code is saved (and retrieved in tclexit()).
++ * Since Tcl's exit is never expected to return and this replacement
++ * does, then (except for a trivial case) additional Tcl commands will
++ * be run. Since the interpreter is now marked as deleted, an error
++ * will be returned -- typically "attempt to call eval in deleted
++ * interpreter". Hopefully, at this point, checks for TCL_ERROR take
++ * place and control percolates back up to Vim -- but with this new error
++ * string in the interpreter's result value. Therefore it would be
++ * useless for this routine to return the exit code via Tcl_SetResult().
+  */
+-#define TCL_EXIT	5
+-
+     static int
+ exitcmd(dummy, interp, objc, objv)
+     ClientData dummy UNUSED;
+@@ -306,47 +309,12 @@
+ 		break;
+ 	    /* FALLTHROUGH */
+ 	case 1:
+-	    Tcl_SetObjResult(interp, Tcl_NewIntObj(value));
+-	    return TCL_EXIT;
+-	default:
+-	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+-    }
+-    return TCL_ERROR;
+-}
++	    tclinfo.exitvalue = value;
+ 
+-    static int
+-catchcmd(dummy, interp, objc, objv)
+-    ClientData	dummy UNUSED;
+-    Tcl_Interp	*interp;
+-    int		objc;
+-    Tcl_Obj	*CONST objv[];
+-{
+-    char    *varname = NULL;
+-    int	    result;
+-
+-    switch (objc)
+-    {
+-	case 3:
+-	    varname = Tcl_GetStringFromObj(objv[2], NULL);
+-	    /* fallthrough */
+-	case 2:
+-	    Tcl_ResetResult(interp);
+-	    Tcl_AllowExceptions(interp);
+-	    result = Tcl_EvalObj(interp, objv[1]);
+-	    if (result == TCL_EXIT)
+-		return result;
+-	    if (varname)
+-	    {
+-		if (Tcl_SetVar(interp, varname, Tcl_GetStringResult(interp), 0) == NULL)
+-		{
+-		    Tcl_SetResult(interp, "couldn't save command result in variable", TCL_STATIC);
+-		    return TCL_ERROR;
+-		}
+-	    }
+-	    Tcl_SetObjResult(interp, Tcl_NewIntObj(result));
+-	    return TCL_OK;
++	    Tcl_DeleteInterp(interp);
++	    break;
+ 	default:
+-	    Tcl_WrongNumArgs(interp, 1, objv, "command ?varName?");
++	    Tcl_WrongNumArgs(interp, 1, objv, "?returnCode?");
+     }
+     return TCL_ERROR;
+ }
+@@ -373,6 +341,7 @@
+ /*
+  *  "::vim::buffer list" - create a list of buffer commands.
+  *  "::vim::buffer {N}" - create buffer command for buffer N.
++ *  "::vim::buffer exists {N}" - test if buffer N exists.
+  *  "::vim::buffer new" - create a new buffer (not implemented)
+  */
+     static int
+@@ -1664,7 +1633,7 @@
+ static Tcl_ChannelType channel_type =
+ {
+     "vimmessage",	/* typeName */
+-    NULL,		/* version */
++    TCL_CHANNEL_VERSION_2, /* version */
+     channel_close,	/* closeProc */
+     channel_input,	/* inputProc */
+     channel_output,	/* outputProc */
+@@ -1679,6 +1648,8 @@
+     NULL,		/* flushProc */
+     NULL,		/* handlerProc */
+ #endif
++/* The following should not be necessary since TCL_CHANNEL_VERSION_2 was
++ * set above */
+ #ifdef TCL_CHANNEL_VERSION_3
+     NULL,		/* wideSeekProc */
+ #endif
+@@ -1742,7 +1713,9 @@
+ 	Tcl_Interp *interp;
+ 	static Tcl_Channel ch1, ch2;
+ 
+-	/* replace stdout and stderr */
++	/* Create replacement channels for stdout and stderr; this has to be
++	 * done each time an interpreter is created since the channels are closed
++	 * when the interpreter is deleted */
+ 	ch1 = Tcl_CreateChannel(&channel_type, "vimout", VIMOUT, TCL_WRITABLE);
+ 	ch2 = Tcl_CreateChannel(&channel_type, "vimerr", VIMERR, TCL_WRITABLE);
+ 	Tcl_SetStdChannel(ch1, TCL_STDOUT);
+@@ -1762,15 +1735,18 @@
+ #endif
+ 
+ 	Tcl_SetChannelOption(interp, ch1, "-buffering", "line");
++#ifdef WIN3264
++	Tcl_SetChannelOption(interp, ch1, "-translation", "lf");
++#endif
+ 	Tcl_SetChannelOption(interp, ch2, "-buffering", "line");
++#ifdef WIN3264
++	Tcl_SetChannelOption(interp, ch2, "-translation", "lf");
++#endif
+ 
+-	/* replace some standard Tcl commands */
++	/* replace standard Tcl exit command */
+ 	Tcl_DeleteCommand(interp, "exit");
+ 	Tcl_CreateObjCommand(interp, "exit", exitcmd,
+ 	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+-	Tcl_DeleteCommand(interp, "catch");
+-	Tcl_CreateObjCommand(interp, "catch", catchcmd,
+-	    (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL);
+ 
+ 	/* new commands, in ::vim namespace */
+ 	Tcl_CreateObjCommand(interp, "::vim::buffer", buffercmd,
+@@ -1822,6 +1798,8 @@
+ 	tclinfo.range_end = row2tcl(eap->line2);
+ 	tclupdatevars();
+     }
++
++    tclinfo.exitvalue = 0;
+     return OK;
+ }
+ 
+@@ -1885,30 +1863,23 @@
+ {
+     int newerr = OK;
+ 
+-    if (error == TCL_EXIT )
++    if (Tcl_InterpDeleted(tclinfo.interp)     /* True if we intercepted Tcl's exit command */
++#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
++	|| Tcl_LimitExceeded(tclinfo.interp)  /* True if the interpreter cannot continue */
++#endif
++	)
+     {
+-	int retval;
+ 	char buf[50];
+-	Tcl_Obj *robj;
+ 
+-	robj = Tcl_GetObjResult(tclinfo.interp);
+-	if( Tcl_GetIntFromObj(tclinfo.interp, robj, &retval) != TCL_OK )
++	sprintf(buf, _("E572: exit code %d"), tclinfo.exitvalue);
++	tclerrmsg(buf);
++	if (tclinfo.exitvalue == 0)
+ 	{
+-	    EMSG(_("E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"));
+-	    newerr = FAIL;
++	    did_emsg = 0;
++	    newerr = OK;
+ 	}
+ 	else
+-	{
+-	    sprintf(buf, _("E572: exit code %d"), retval);
+-	    tclerrmsg(buf);
+-	    if (retval == 0 )
+-	    {
+-		did_emsg = 0;
+-		newerr = OK;
+-	    }
+-	    else
+-		newerr = FAIL;
+-	}
++	    newerr = FAIL;
+ 
+ 	tcldelthisinterp();
+     }
+@@ -2022,7 +1993,12 @@
+ 	Tcl_SetVar(tclinfo.interp, var_line, line, 0);
+ 	Tcl_AllowExceptions(tclinfo.interp);
+ 	err = Tcl_Eval(tclinfo.interp, script);
+-	if (err != TCL_OK)
++	if (err != TCL_OK
++	    || Tcl_InterpDeleted(tclinfo.interp)
++#if (TCL_MAJOR_VERSION == 8 && TCL_MINOR_VERSION >= 5) || TCL_MAJOR_VERSION > 8
++	    || Tcl_LimitExceeded(tclinfo.interp)
++#endif
++	   )
+ 	    break;
+ 	line = (char *)Tcl_GetVar(tclinfo.interp, var_line, 0);
+ 	if (line)
+diff -Naur vim73.orig/src/if_xcmdsrv.c vim73/src/if_xcmdsrv.c
+--- vim73.orig/src/if_xcmdsrv.c	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/if_xcmdsrv.c	2013-06-07 17:07:31.768917959 +0000
+@@ -572,61 +572,55 @@
+ {
+     time_t	    start;
+     time_t	    now;
+-    time_t	    lastChk = 0;
+     XEvent	    event;
+-    XPropertyEvent *e = (XPropertyEvent *)&event;
+-#   define SEND_MSEC_POLL 50
++
++#define UI_MSEC_DELAY 50
++#define SEND_MSEC_POLL 500
++#ifndef HAVE_SELECT
++    struct pollfd   fds;
++
++    fds.fd = ConnectionNumber(dpy);
++    fds.events = POLLIN;
++#else
++    fd_set	    fds;
++    struct timeval  tv;
++
++    tv.tv_sec = 0;
++    tv.tv_usec =  SEND_MSEC_POLL * 1000;
++    FD_ZERO(&fds);
++    FD_SET(ConnectionNumber(dpy), &fds);
++#endif
+ 
+     time(&start);
+-    while (endCond(endData) == 0)
++    while (TRUE)
+     {
++	while (XCheckWindowEvent(dpy, commWindow, PropertyChangeMask, &event))
++	    serverEventProc(dpy, &event);
++
++	if (endCond(endData) != 0)
++	    break;
++	if (!WindowValid(dpy, w))
++	    break;
+ 	time(&now);
+ 	if (seconds >= 0 && (now - start) >= seconds)
+ 	    break;
+-	if (now != lastChk)
+-	{
+-	    lastChk = now;
+-	    if (!WindowValid(dpy, w))
+-		break;
+-	    /*
+-	     * Sometimes the PropertyChange event doesn't come.
+-	     * This can be seen in eg: vim -c 'echo remote_expr("gvim", "3+2")'
+-	     */
+-	    serverEventProc(dpy, NULL);
+-	}
++
++	/* Just look out for the answer without calling back into Vim */
+ 	if (localLoop)
+ 	{
+-	    /* Just look out for the answer without calling back into Vim */
+ #ifndef HAVE_SELECT
+-	    struct pollfd   fds;
+-
+-	    fds.fd = ConnectionNumber(dpy);
+-	    fds.events = POLLIN;
+ 	    if (poll(&fds, 1, SEND_MSEC_POLL) < 0)
+ 		break;
+ #else
+-	    fd_set	    fds;
+-	    struct timeval  tv;
+-
+-	    tv.tv_sec = 0;
+-	    tv.tv_usec =  SEND_MSEC_POLL * 1000;
+-	    FD_ZERO(&fds);
+-	    FD_SET(ConnectionNumber(dpy), &fds);
+-	    if (select(ConnectionNumber(dpy) + 1, &fds, NULL, NULL, &tv) < 0)
++	    if (select(FD_SETSIZE, &fds, NULL, NULL, &tv) < 0)
+ 		break;
+ #endif
+-	    while (XEventsQueued(dpy, QueuedAfterReading) > 0)
+-	    {
+-		XNextEvent(dpy, &event);
+-		if (event.type == PropertyNotify && e->window == commWindow)
+-		    serverEventProc(dpy, &event);
+-	    }
+ 	}
+ 	else
+ 	{
+ 	    if (got_int)
+ 		break;
+-	    ui_delay((long)SEND_MSEC_POLL, TRUE);
++	    ui_delay((long)UI_MSEC_DELAY, TRUE);
+ 	    ui_breakcheck();
+ 	}
+     }
+@@ -655,7 +649,6 @@
+ 	if (SendInit(dpy) < 0)
+ 	    return NULL;
+     }
+-    ga_init2(&ga, 1, 100);
+ 
+     /*
+      * Read the registry property.
+@@ -1198,9 +1191,8 @@
+ 	if ((*p == 'c' || *p == 'k') && (p[1] == 0))
+ 	{
+ 	    Window	resWindow;
+-	    char_u	*name, *script, *serial, *end, *res;
++	    char_u	*name, *script, *serial, *end;
+ 	    Bool	asKeys = *p == 'k';
+-	    garray_T	reply;
+ 	    char_u	*enc;
+ 
+ 	    /*
+@@ -1256,50 +1248,52 @@
+ 	    if (script == NULL || name == NULL)
+ 		continue;
+ 
+-	    /*
+-	     * Initialize the result property, so that we're ready at any
+-	     * time if we need to return an error.
+-	     */
+-	    if (resWindow != None)
+-	    {
+-		ga_init2(&reply, 1, 100);
++            if (serverName != NULL && STRICMP(name, serverName) == 0)
++            {
++                script = serverConvert(enc, script, &tofree);
++                if (asKeys)
++                    server_to_input_buf(script);
++                else
++                {
++                    char_u      *res;
++
++                    res = eval_client_expr_to_string(script);
++		    if (resWindow != None)
++		    {
++			garray_T    reply;
++
++			/* Initialize the result property. */
++			ga_init2(&reply, 1, 100);
+ #ifdef FEAT_MBYTE
+-		ga_grow(&reply, 50 + STRLEN(p_enc));
+-		sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
++			ga_grow(&reply, 50 + STRLEN(p_enc));
++			sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
+ 						   0, 0, p_enc, 0, serial, 0);
+-		reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
++			reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
+ #else
+-		ga_grow(&reply, 50);
+-		sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
+-		reply.ga_len = 10 + STRLEN(serial);
++			ga_grow(&reply, 50);
++			sprintf(reply.ga_data, "%cr%c-s %s%c-r ",
++							     0, 0, serial, 0);
++			reply.ga_len = 10 + STRLEN(serial);
+ #endif
+-	    }
+-	    res = NULL;
+-	    if (serverName != NULL && STRICMP(name, serverName) == 0)
+-	    {
+-		script = serverConvert(enc, script, &tofree);
+-		if (asKeys)
+-		    server_to_input_buf(script);
+-		else
+-		    res = eval_client_expr_to_string(script);
+-		vim_free(tofree);
+-	    }
+-	    if (resWindow != None)
+-	    {
+-		if (res != NULL)
+-		    ga_concat(&reply, res);
+-		else if (asKeys == 0)
+-		{
+-		    ga_concat(&reply, (char_u *)_(e_invexprmsg));
+-		    ga_append(&reply, 0);
+-		    ga_concat(&reply, (char_u *)"-c 1");
+-		}
+-		ga_append(&reply, NUL);
+-		(void)AppendPropCarefully(dpy, resWindow, commProperty,
+-					   reply.ga_data, reply.ga_len);
+-		ga_clear(&reply);
+-	    }
+-	    vim_free(res);
++
++			/* Evaluate the expression and return the result. */
++			if (res != NULL)
++			    ga_concat(&reply, res);
++			else
++			{
++			    ga_concat(&reply, (char_u *)_(e_invexprmsg));
++			    ga_append(&reply, 0);
++			    ga_concat(&reply, (char_u *)"-c 1");
++			}
++			ga_append(&reply, NUL);
++			(void)AppendPropCarefully(dpy, resWindow, commProperty,
++						 reply.ga_data, reply.ga_len);
++			ga_clear(&reply);
++		    }
++                    vim_free(res);
++                }
++                vim_free(tofree);
++            }
+ 	}
+ 	else if (*p == 'r' && p[1] == 0)
+ 	{
+diff -Naur vim73.orig/src/integration.c vim73/src/integration.c
+--- vim73.orig/src/integration.c	2010-08-08 13:09:21.000000000 +0000
++++ vim73/src/integration.c	2013-06-07 17:07:31.842251083 +0000
+@@ -33,7 +33,6 @@
+ #include <sys/un.h>
+ #endif
+ 
+-#include <errno.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <sys/param.h>
+diff -Naur vim73.orig/src/keymap.h vim73/src/keymap.h
+--- vim73.orig/src/keymap.h	2010-07-25 13:14:04.000000000 +0000
++++ vim73/src/keymap.h	2013-06-07 17:07:31.858917702 +0000
+@@ -92,13 +92,13 @@
+  */
+ #define KS_TEAROFF		244
+ 
+-/* used for JSB term mouse */
++/* Used for JSB term mouse. */
+ #define KS_JSBTERM_MOUSE	243
+ 
+-/* used a termcap entry that produces a normal character */
++/* Used a termcap entry that produces a normal character. */
+ #define KS_KEY			242
+ 
+-/* Used for the qnx pterm mouse */
++/* Used for the qnx pterm mouse. */
+ #define KS_PTERM_MOUSE		241
+ 
+ /* Used for click in a tab pages label. */
+@@ -107,6 +107,12 @@
+ /* Used for menu in a tab pages line. */
+ #define KS_TABMENU		239
+ 
++/* Used for the urxvt mouse. */
++#define KS_URXVT_MOUSE		238
++
++/* Used for the sgr mouse. */
++#define KS_SGR_MOUSE		237
++
+ /*
+  * Filler used after KS_SPECIAL and others
+  */
+@@ -408,6 +414,8 @@
+ #define K_DEC_MOUSE	TERMCAP2KEY(KS_DEC_MOUSE, KE_FILLER)
+ #define K_JSBTERM_MOUSE	TERMCAP2KEY(KS_JSBTERM_MOUSE, KE_FILLER)
+ #define K_PTERM_MOUSE	TERMCAP2KEY(KS_PTERM_MOUSE, KE_FILLER)
++#define K_URXVT_MOUSE	TERMCAP2KEY(KS_URXVT_MOUSE, KE_FILLER)
++#define K_SGR_MOUSE	TERMCAP2KEY(KS_SGR_MOUSE, KE_FILLER)
+ 
+ #define K_SELECT	TERMCAP2KEY(KS_SELECT, KE_FILLER)
+ #define K_TEAROFF	TERMCAP2KEY(KS_TEAROFF, KE_FILLER)
+diff -Naur vim73.orig/src/link.sh vim73/src/link.sh
+--- vim73.orig/src/link.sh	2010-07-21 19:43:29.000000000 +0000
++++ vim73/src/link.sh	2013-06-07 17:07:31.882250969 +0000
+@@ -5,7 +5,7 @@
+ # libraries when they exist, but this doesn't mean they are needed for Vim.
+ #
+ #      Author: Bram Moolenaar
+-# Last change: 2006 Sep 26
++# Last change: 2010 Nov 03
+ #     License: Public domain
+ #
+ # Warning: This fails miserably if the linker doesn't return an error code!
+@@ -16,11 +16,23 @@
+ echo "$LINK " >link.cmd
+ exit_value=0
+ 
++if test "$LINK_AS_NEEDED" = yes; then
++  echo "link.sh: \$LINK_AS_NEEDED set to 'yes': invoking linker directly."
++  cat link.cmd
++  if sh link.cmd; then
++    exit_value=0
++    echo "link.sh: Linked fine"
++  else
++    exit_value=$?
++    echo "link.sh: Linking failed"
++  fi
++else
++  if test -f auto/link.sed; then
++
+ #
+ # If auto/link.sed already exists, use it.  We assume a previous run of
+ # link.sh has found the correct set of libraries.
+ #
+-if test -f auto/link.sed; then
+   echo "link.sh: The file 'auto/link.sed' exists, which is going to be used now."
+   echo "link.sh: If linking fails, try deleting the auto/link.sed file."
+   echo "link.sh: If this fails too, try creating an empty auto/link.sed file."
+@@ -124,6 +136,8 @@
+   fi
+ fi
+ 
++fi
++
+ #
+ # cleanup
+ #
+diff -Naur vim73.orig/src/macros.h vim73/src/macros.h
+--- vim73.orig/src/macros.h	2010-07-17 19:41:21.000000000 +0000
++++ vim73/src/macros.h	2013-06-07 17:07:31.892250941 +0000
+@@ -259,6 +259,8 @@
+  * PTR2CHAR(): get character from pointer.
+  */
+ #ifdef FEAT_MBYTE
++/* Get the length of the character p points to */
++# define MB_PTR2LEN(p)		(has_mbyte ? (*mb_ptr2len)(p) : 1)
+ /* Advance multi-byte pointer, skip over composing chars. */
+ # define mb_ptr_adv(p)	    p += has_mbyte ? (*mb_ptr2len)(p) : 1
+ /* Advance multi-byte pointer, do not skip over composing chars. */
+@@ -272,6 +274,7 @@
+ # define MB_CHARLEN(p)	    (has_mbyte ? mb_charlen(p) : (int)STRLEN(p))
+ # define PTR2CHAR(p)	    (has_mbyte ? mb_ptr2char(p) : (int)*(p))
+ #else
++# define MB_PTR2LEN(p)		1
+ # define mb_ptr_adv(p)		++p
+ # define mb_cptr_adv(p)		++p
+ # define mb_ptr_back(s, p)	--p
+@@ -285,3 +288,17 @@
+ #else
+ # define DO_AUTOCHDIR
+ #endif
++
++#if defined(FEAT_SCROLLBIND) && defined(FEAT_CURSORBIND)
++# define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE; (wp)->w_p_crb = FALSE
++#else
++# if defined(FEAT_SCROLLBIND)
++#  define RESET_BINDING(wp)  (wp)->w_p_scb = FALSE
++# else
++#  if defined(FEAT_CURSORBIND)
++#   define RESET_BINDING(wp)  (wp)->w_p_crb = FALSE
++#  else
++#   define RESET_BINDING(wp)
++#  endif
++# endif
++#endif
+diff -Naur vim73.orig/src/main.aap vim73/src/main.aap
+--- vim73.orig/src/main.aap	2010-07-14 20:41:01.000000000 +0000
++++ vim73/src/main.aap	2013-06-07 17:07:31.928917502 +0000
+@@ -1213,9 +1213,9 @@
+     :move gui_mac.rsrc.rsrcfork $(RESDIR)/$(VIMNAME).rsrc
+ 
+ # po/Make_osx.pl says something about generating a Mac message file
+-# for Ukrananian.  Would somebody using Mac OS X in Ukranian
++# for Ukrainian.  Would somebody using Mac OS X in Ukrainian
+ # *really* be upset that Carbon Vim was not localised in
+-# Ukranian?
++# Ukrainian?
+ #
+ #bundle-language: bundle-dir po/Make_osx.pl
+ #	cd po && perl Make_osx.pl --outdir ../$(RESDIR) $(MULTILANG)
+diff -Naur vim73.orig/src/main.c vim73/src/main.c
+--- vim73.orig/src/main.c	2010-08-08 13:09:55.000000000 +0000
++++ vim73/src/main.c	2013-06-07 17:07:31.968917388 +0000
+@@ -7,10 +7,6 @@
+  * See README.txt for an overview of the Vim source code.
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"		/* for close() and dup() */
+-#endif
+-
+ #define EXTERN
+ #include "vim.h"
+ 
+@@ -96,37 +92,39 @@
+ #define EDIT_TAG    3	    /* tag name argument given, use tagname */
+ #define EDIT_QF	    4	    /* start in quickfix mode */
+ 
+-#if defined(UNIX) || defined(VMS)
++#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
+ static int file_owned __ARGS((char *fname));
+ #endif
+ static void mainerr __ARGS((int, char_u *));
++#ifndef NO_VIM_MAIN
+ static void main_msg __ARGS((char *s));
+ static void usage __ARGS((void));
+ static int get_number_arg __ARGS((char_u *p, int *idx, int def));
+-#if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
++# if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
+ static void init_locale __ARGS((void));
+-#endif
++# endif
+ static void parse_command_name __ARGS((mparm_T *parmp));
+ static void early_arg_scan __ARGS((mparm_T *parmp));
+ static void command_line_scan __ARGS((mparm_T *parmp));
+ static void check_tty __ARGS((mparm_T *parmp));
+ static void read_stdin __ARGS((void));
+ static void create_windows __ARGS((mparm_T *parmp));
+-#ifdef FEAT_WINDOWS
++# ifdef FEAT_WINDOWS
+ static void edit_buffers __ARGS((mparm_T *parmp));
+-#endif
++# endif
+ static void exe_pre_commands __ARGS((mparm_T *parmp));
+ static void exe_commands __ARGS((mparm_T *parmp));
+ static void source_startup_scripts __ARGS((mparm_T *parmp));
+ static void main_start_gui __ARGS((void));
+-#if defined(HAS_SWAP_EXISTS_ACTION)
++# if defined(HAS_SWAP_EXISTS_ACTION)
+ static void check_swap_exists_action __ARGS((void));
+-#endif
+-#ifdef FEAT_CLIENTSERVER
++# endif
++# if defined(FEAT_CLIENTSERVER) || defined(PROTO)
+ static void exec_on_server __ARGS((mparm_T *parmp));
+ static void prepare_server __ARGS((mparm_T *parmp));
+ static void cmdsrv_main __ARGS((int *argc, char **argv, char_u *serverName_arg, char_u **serverStr));
+ static char_u *serverMakeName __ARGS((char_u *arg, char *cmd));
++# endif
+ #endif
+ 
+ 
+@@ -149,7 +147,8 @@
+ #define ME_INVALID_ARG		5
+ };
+ 
+-#ifndef PROTO	    /* don't want a prototype for main() */
++#ifndef PROTO		/* don't want a prototype for main() */
++#ifndef NO_VIM_MAIN	/* skip this for unittests */
+     int
+ # ifdef VIMDLL
+ _export
+@@ -193,6 +192,13 @@
+     params.window_count = -1;
+ #endif
+ 
++#ifdef FEAT_RUBY
++    {
++	int ruby_stack_start;
++	vim_ruby_init((void *)&ruby_stack_start);
++    }
++#endif
++
+ #ifdef FEAT_TCL
+     vim_tcl_init(params.argv[0]);
+ #endif
+@@ -555,6 +561,43 @@
+     debug_break_level = params.use_debug_break_level;
+ #endif
+ 
++#ifdef FEAT_MZSCHEME
++    /*
++     * Newer version of MzScheme (Racket) require earlier (trampolined)
++     * initialisation via scheme_main_setup.
++     * Implement this by initialising it as early as possible
++     * and splitting off remaining Vim main into vim_main2
++     */
++    {
++	/* Pack up preprocessed command line arguments.
++	 * It is safe because Scheme does not access argc/argv. */
++	char *args[2];
++	args[0] = (char *)fname;
++	args[1] = (char *)&params;
++	return mzscheme_main(2, args);
++    }
++}
++#endif
++#endif /* NO_VIM_MAIN */
++
++/* vim_main2() needs to be produced when FEAT_MZSCHEME is defined even when
++ * NO_VIM_MAIN is defined. */
++#ifdef FEAT_MZSCHEME
++    int
++vim_main2(int argc UNUSED, char **argv UNUSED)
++{
++# ifndef NO_VIM_MAIN
++    char_u	*fname = (char_u *)argv[0];
++    mparm_T	params;
++
++    memcpy(&params, argv[1], sizeof(params));
++# else
++    return 0;
++}
++# endif
++#endif
++
++#ifndef NO_VIM_MAIN
+     /* Execute --cmd arguments. */
+     exe_pre_commands(&params);
+ 
+@@ -768,6 +811,9 @@
+ 
+     starttermcap();	    /* start termcap if not done by wait_return() */
+     TIME_MSG("start termcap");
++#if defined(FEAT_TERMRESPONSE) && defined(FEAT_MBYTE)
++    may_req_ambiguous_character_width();
++#endif
+ 
+ #ifdef FEAT_MOUSE
+     setmouse();				/* may start using the mouse */
+@@ -904,6 +950,18 @@
+     TIME_MSG("VimEnter autocommands");
+ #endif
+ 
++#if defined(FEAT_EVAL) && defined(FEAT_CLIPBOARD)
++    /* Adjust default register name for "unnamed" in 'clipboard'. Can only be
++     * done after the clipboard is available and all initial commands that may
++     * modify the 'clipboard' setting have run; i.e. just before entering the
++     * main loop. */
++    {
++	int default_regname = 0;
++	adjust_clip_reg(&default_regname);
++	set_reg_var(default_regname);
++    }
++#endif
++
+ #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
+     /* When a startup script or session file setup for diff'ing and
+      * scrollbind, sync the scrollbind now. */
+@@ -940,7 +998,7 @@
+     if (netbeansArg != NULL && strncmp("-nb", netbeansArg, 3) == 0)
+     {
+ # ifdef FEAT_GUI
+-#  if !defined(FEAT_GUI_MOTIF) && !defined(FEAT_GUI_GTK)  \
++#  if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
+ 		&& !defined(FEAT_GUI_W32)
+ 	if (gui.in_use)
+ 	{
+@@ -958,17 +1016,12 @@
+ 
+     /*
+      * Call the main command loop.  This never returns.
+-     * For embedded MzScheme the main_loop will be called by Scheme
+-     * for proper stack tracking
+-     */
+-#ifndef FEAT_MZSCHEME
++    */
+     main_loop(FALSE, FALSE);
+-#else
+-    mzscheme_main();
+-#endif
+ 
+     return 0;
+ }
++#endif /* NO_VIM_MAIN */
+ #endif /* PROTO */
+ 
+ /*
+@@ -1009,6 +1062,7 @@
+ 	skip_redraw = FALSE;
+ 	RedrawingDisabled = 0;
+ 	no_wait_return = 0;
++	vgetc_busy = 0;
+ # ifdef FEAT_EVAL
+ 	emsg_skip = 0;
+ # endif
+@@ -1121,6 +1175,19 @@
+ 	    }
+ #endif
+ 
++#ifdef FEAT_AUTOCMD
++	    /* Trigger TextChanged if b_changedtick differs. */
++	    if (!finish_op && has_textchanged()
++		    && last_changedtick != curbuf->b_changedtick)
++	    {
++		if (last_changedtick_buf == curbuf)
++		    apply_autocmds(EVENT_TEXTCHANGED, NULL, NULL,
++							       FALSE, curbuf);
++		last_changedtick_buf = curbuf;
++		last_changedtick = curbuf->b_changedtick;
++	    }
++#endif
++
+ #if defined(FEAT_DIFF) && defined(FEAT_SCROLLBIND)
+ 	    /* Scroll-binding for diff mode may have been postponed until
+ 	     * here.  Avoids doing it for every change. */
+@@ -1202,7 +1269,9 @@
+ 			|| conceal_cursor_line(curwin)
+ 			|| need_cursor_line_redraw))
+ 	    {
+-		if (conceal_old_cursor_line != conceal_new_cursor_line)
++		if (conceal_old_cursor_line != conceal_new_cursor_line
++			&& conceal_old_cursor_line
++						<= curbuf->b_ml.ml_line_count)
+ 		    update_single_line(curwin, conceal_old_cursor_line);
+ 		update_single_line(curwin, conceal_new_cursor_line);
+ 		curwin->w_valid &= ~VALID_CROW;
+@@ -1330,12 +1399,15 @@
+ 	    for (wp = (tp == curtab)
+ 		    ? firstwin : tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+ 	    {
++		if (wp->w_buffer == NULL)
++		    /* Autocmd must have close the buffer already, skip. */
++		    continue;
+ 		buf = wp->w_buffer;
+ 		if (buf->b_changedtick != -1)
+ 		{
+ 		    apply_autocmds(EVENT_BUFWINLEAVE, buf->b_fname,
+ 						    buf->b_fname, FALSE, buf);
+-		    buf->b_changedtick = -1;    /* note that we did it already */
++		    buf->b_changedtick = -1;  /* note that we did it already */
+ 		    /* start all over, autocommands may mess up the lists */
+ 		    next_tp = first_tabpage;
+ 		    break;
+@@ -1432,6 +1504,7 @@
+     mch_exit(exitval);
+ }
+ 
++#ifndef NO_VIM_MAIN
+ /*
+  * Get a (optional) count for a Vim argument.
+  */
+@@ -2996,6 +3069,8 @@
+ #endif
+ }
+ 
++#endif  /* NO_VIM_MAIN */
++
+ /*
+  * Get an environment variable, and execute it as Ex commands.
+  * Returns FAIL if the environment variable was not executed, OK otherwise.
+@@ -3035,7 +3110,7 @@
+     return FAIL;
+ }
+ 
+-#if defined(UNIX) || defined(VMS)
++#if (defined(UNIX) || defined(VMS)) && !defined(NO_VIM_MAIN)
+ /*
+  * Return TRUE if we are certain the user owns the file "fname".
+  * Used for ".vimrc" and ".exrc".
+@@ -3093,6 +3168,7 @@
+     mainerr(ME_ARG_MISSING, str);
+ }
+ 
++#ifndef NO_VIM_MAIN
+ /*
+  * print a message with three spaces prepended and '\n' appended.
+  */
+@@ -3155,6 +3231,7 @@
+ #endif
+     main_msg(_("-v\t\t\tVi mode (like \"vi\")"));
+     main_msg(_("-e\t\t\tEx mode (like \"ex\")"));
++    main_msg(_("-E\t\t\tImproved Ex mode"));
+     main_msg(_("-s\t\t\tSilent (batch) mode (only for \"ex\")"));
+ #ifdef FEAT_DIFF
+     main_msg(_("-d\t\t\tDiff mode (like \"vimdiff\")"));
+@@ -3270,11 +3347,6 @@
+     main_msg(_("+reverse\t\tDon't use reverse video (also: +rv)"));
+     main_msg(_("-xrm <resource>\tSet the specified resource"));
+ #endif /* FEAT_GUI_X11 */
+-#if defined(FEAT_GUI) && defined(RISCOS)
+-    mch_msg(_("\nArguments recognised by gvim (RISC OS version):\n"));
+-    main_msg(_("--columns <number>\tInitial width of window in columns"));
+-    main_msg(_("--rows <number>\tInitial height of window in rows"));
+-#endif
+ #ifdef FEAT_GUI_GTK
+     mch_msg(_("\nArguments recognised by gvim (GTK+ version):\n"));
+     main_msg(_("-font <font>\t\tUse <font> for normal text (also: -fn)"));
+@@ -3283,6 +3355,7 @@
+     main_msg(_("-display <display>\tRun vim on <display> (also: --display)"));
+     main_msg(_("--role <role>\tSet a unique role to identify the main window"));
+     main_msg(_("--socketid <xid>\tOpen Vim inside another GTK widget"));
++    main_msg(_("--echo-wid\t\tMake gvim echo the Window ID on stdout"));
+ #endif
+ #ifdef FEAT_GUI_W32
+     main_msg(_("-P <parent title>\tOpen Vim inside parent application"));
+@@ -3292,7 +3365,10 @@
+ #ifdef FEAT_GUI_GNOME
+     /* Gnome gives extra messages for --help if we continue, but not for -h. */
+     if (gui.starting)
++    {
+ 	mch_msg("\n");
++	gui.dofork = FALSE;
++    }
+     else
+ #endif
+ 	mch_exit(0);
+@@ -3313,6 +3389,8 @@
+ }
+ #endif
+ 
++#endif
++
+ #if defined(STARTUPTIME) || defined(PROTO)
+ static void time_diff __ARGS((struct timeval *then, struct timeval *now));
+ 
+@@ -3422,7 +3500,7 @@
+ 
+ #endif
+ 
+-#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
++#if (defined(FEAT_CLIENTSERVER) && !defined(NO_VIM_MAIN)) || defined(PROTO)
+ 
+ /*
+  * Common code for the X command server and the Win32 command server.
+@@ -3806,7 +3884,7 @@
+     int		i;
+     char_u	*inicmd = NULL;
+     char_u	*p;
+-    char_u	cwd[MAXPATHL];
++    char_u	*cwd;
+ 
+     if (filec > 0 && filev[0][0] == '+')
+     {
+@@ -3817,15 +3895,25 @@
+     /* Check if we have at least one argument. */
+     if (filec <= 0)
+ 	mainerr_arg_missing((char_u *)filev[-1]);
++
++    /* Temporarily cd to the current directory to handle relative file names. */
++    cwd = alloc(MAXPATHL);
++    if (cwd == NULL)
++	return NULL;
+     if (mch_dirname(cwd, MAXPATHL) != OK)
++    {
++	vim_free(cwd);
+ 	return NULL;
+-    if ((p = vim_strsave_escaped_ext(cwd,
++    }
++    p = vim_strsave_escaped_ext(cwd,
+ #ifdef BACKSLASH_IN_FILENAME
+ 		    "",  /* rem_backslash() will tell what chars to escape */
+ #else
+ 		    PATH_ESC_CHARS,
+ #endif
+-		    '\\', TRUE)) == NULL)
++		    '\\', TRUE);
++    vim_free(cwd);
++    if (p == NULL)
+ 	return NULL;
+     ga_init2(&ga, 1, 100);
+     ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd ");
+@@ -3858,13 +3946,20 @@
+ 	ga_concat(&ga, p);
+ 	vim_free(p);
+     }
++    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
++
+     /* The :drop commands goes to Insert mode when 'insertmode' is set, use
+      * CTRL-\ CTRL-N again. */
+-    ga_concat(&ga, (char_u *)"|if exists('*inputrestore')|call inputrestore()|endif<CR>");
+-    ga_concat(&ga, (char_u *)"<C-\\><C-N>:cd -");
++    ga_concat(&ga, (char_u *)"<C-\\><C-N>");
++
++    /* Switch back to the correct current directory (prior to temporary path
++     * switch) unless 'autochdir' is set, in which case it will already be
++     * correct after the :drop command. */
++    ga_concat(&ga, (char_u *)":if !exists('+acd')||!&acd|cd -|endif<CR>");
++
+     if (sendReply)
+-	ga_concat(&ga, (char_u *)"<CR>:call SetupRemoteReplies()");
+-    ga_concat(&ga, (char_u *)"<CR>:");
++	ga_concat(&ga, (char_u *)":call SetupRemoteReplies()<CR>");
++    ga_concat(&ga, (char_u *)":");
+     if (inicmd != NULL)
+     {
+ 	/* Can't use <CR> after "inicmd", because an "startinsert" would cause
+@@ -3881,6 +3976,32 @@
+ }
+ 
+ /*
++ * Make our basic server name: use the specified "arg" if given, otherwise use
++ * the tail of the command "cmd" we were started with.
++ * Return the name in allocated memory.  This doesn't include a serial number.
++ */
++    static char_u *
++serverMakeName(arg, cmd)
++    char_u	*arg;
++    char	*cmd;
++{
++    char_u *p;
++
++    if (arg != NULL && *arg != NUL)
++	p = vim_strsave_up(arg);
++    else
++    {
++	p = vim_strsave_up(gettail((char_u *)cmd));
++	/* Remove .exe or .bat from the name. */
++	if (p != NULL && vim_strchr(p, '.') != NULL)
++	    *vim_strchr(p, '.') = NUL;
++    }
++    return p;
++}
++#endif /* FEAT_CLIENTSERVER */
++
++#if defined(FEAT_CLIENTSERVER) || defined(PROTO)
++/*
+  * Replace termcodes such as <CR> and insert as key presses if there is room.
+  */
+     void
+@@ -3924,8 +4045,6 @@
+ 
+ /*
+  * Evaluate an expression that the client sent to a string.
+- * Handles disabling error messages and disables debugging, otherwise Vim
+- * hangs, waiting for "cont" to be typed.
+  */
+     char_u *
+ eval_client_expr_to_string(expr)
+@@ -3935,15 +4054,21 @@
+     int		save_dbl = debug_break_level;
+     int		save_ro = redir_off;
+ 
++     /* Disable debugging, otherwise Vim hangs, waiting for "cont" to be
++      * typed. */
+     debug_break_level = -1;
+     redir_off = 0;
+-    ++emsg_skip;
++    /* Do not display error message, otherwise Vim hangs, waiting for "cont"
++     * to be typed.  Do generate errors so that try/catch works. */
++    ++emsg_silent;
+ 
+     res = eval_to_string(expr, NULL, TRUE);
+ 
+     debug_break_level = save_dbl;
+     redir_off = save_ro;
+-    --emsg_skip;
++    --emsg_silent;
++    if (emsg_silent < 0)
++	emsg_silent = 0;
+ 
+     /* A client can tell us to redraw, but not to display the cursor, so do
+      * that here. */
+@@ -3991,32 +4116,7 @@
+ # endif
+     return res;
+ }
+-
+-
+-/*
+- * Make our basic server name: use the specified "arg" if given, otherwise use
+- * the tail of the command "cmd" we were started with.
+- * Return the name in allocated memory.  This doesn't include a serial number.
+- */
+-    static char_u *
+-serverMakeName(arg, cmd)
+-    char_u	*arg;
+-    char	*cmd;
+-{
+-    char_u *p;
+-
+-    if (arg != NULL && *arg != NUL)
+-	p = vim_strsave_up(arg);
+-    else
+-    {
+-	p = vim_strsave_up(gettail((char_u *)cmd));
+-	/* Remove .exe or .bat from the name. */
+-	if (p != NULL && vim_strchr(p, '.') != NULL)
+-	    *vim_strchr(p, '.') = NUL;
+-    }
+-    return p;
+-}
+-#endif /* FEAT_CLIENTSERVER */
++#endif
+ 
+ /*
+  * When FEAT_FKMAP is defined, also compile the Farsi source code.
+diff -Naur vim73.orig/src/mark.c vim73/src/mark.c
+--- vim73.orig/src/mark.c	2010-08-13 09:14:35.000000000 +0000
++++ vim73/src/mark.c	2013-06-07 17:07:31.985584007 +0000
+@@ -98,6 +98,19 @@
+ 	return OK;
+     }
+ 
++#ifdef FEAT_VISUAL
++    if (c == '<')
++    {
++	curbuf->b_visual.vi_start = *pos;
++	return OK;
++    }
++    if (c == '>')
++    {
++	curbuf->b_visual.vi_end = *pos;
++	return OK;
++    }
++#endif
++
+ #ifndef EBCDIC
+     if (c > 'z')	    /* some islower() and isupper() cannot handle
+ 				characters above 127 */
+@@ -291,7 +304,7 @@
+ #endif
+ 
+ /*
+- * Find mark "c".
++ * Find mark "c" in buffer pointed to by "buf".
+  * If "changefile" is TRUE it's allowed to edit another file for '0, 'A, etc.
+  * If "fnum" is not NULL store the fnum there for '0, 'A etc., don't edit
+  * another file.
+@@ -302,15 +315,25 @@
+  * - -1 if mark is in other file and jumped there (only if changefile is TRUE)
+  */
+     pos_T *
++getmark_buf(buf, c, changefile)
++    buf_T	*buf;
++    int		c;
++    int		changefile;
++{
++    return getmark_buf_fnum(buf, c, changefile, NULL);
++}
++
++    pos_T *
+ getmark(c, changefile)
+     int		c;
+     int		changefile;
+ {
+-    return getmark_fnum(c, changefile, NULL);
++    return getmark_buf_fnum(curbuf, c, changefile, NULL);
+ }
+ 
+     pos_T *
+-getmark_fnum(c, changefile, fnum)
++getmark_buf_fnum(buf, c, changefile, fnum)
++    buf_T	*buf;
+     int		c;
+     int		changefile;
+     int		*fnum;
+@@ -338,15 +361,15 @@
+ 	posp = &pos_copy;		/*   w_pcmark may be changed soon */
+     }
+     else if (c == '"')			/* to pos when leaving buffer */
+-	posp = &(curbuf->b_last_cursor);
++	posp = &(buf->b_last_cursor);
+     else if (c == '^')			/* to where Insert mode stopped */
+-	posp = &(curbuf->b_last_insert);
++	posp = &(buf->b_last_insert);
+     else if (c == '.')			/* to where last change was made */
+-	posp = &(curbuf->b_last_change);
++	posp = &(buf->b_last_change);
+     else if (c == '[')			/* to start of previous operator */
+-	posp = &(curbuf->b_op_start);
++	posp = &(buf->b_op_start);
+     else if (c == ']')			/* to end of previous operator */
+-	posp = &(curbuf->b_op_end);
++	posp = &(buf->b_op_end);
+     else if (c == '{' || c == '}')	/* to previous/next paragraph */
+     {
+ 	pos_T	pos;
+@@ -382,8 +405,8 @@
+ #ifdef FEAT_VISUAL
+     else if (c == '<' || c == '>')	/* start/end of visual area */
+     {
+-	startp = &curbuf->b_visual.vi_start;
+-	endp = &curbuf->b_visual.vi_end;
++	startp = &buf->b_visual.vi_start;
++	endp = &buf->b_visual.vi_end;
+ 	if ((c == '<') == lt(*startp, *endp))
+ 	    posp = startp;
+ 	else
+@@ -391,7 +414,7 @@
+ 	/*
+ 	 * For Visual line mode, set mark at begin or end of line
+ 	 */
+-	if (curbuf->b_visual.vi_mode == 'V')
++	if (buf->b_visual.vi_mode == 'V')
+ 	{
+ 	    pos_copy = *posp;
+ 	    posp = &pos_copy;
+@@ -407,7 +430,7 @@
+ #endif
+     else if (ASCII_ISLOWER(c))		/* normal named mark */
+     {
+-	posp = &(curbuf->b_namedm[c - 'a']);
++	posp = &(buf->b_namedm[c - 'a']);
+     }
+     else if (ASCII_ISUPPER(c) || VIM_ISDIGIT(c))	/* named file mark */
+     {
+@@ -422,7 +445,7 @@
+ 
+ 	if (fnum != NULL)
+ 	    *fnum = namedfm[c].fmark.fnum;
+-	else if (namedfm[c].fmark.fnum != curbuf->b_fnum)
++	else if (namedfm[c].fmark.fnum != buf->b_fnum)
+ 	{
+ 	    /* mark is in another file */
+ 	    posp = &pos_copy;
+@@ -1024,6 +1047,7 @@
+ #ifdef FEAT_WINDOWS
+     tabpage_T	*tab;
+ #endif
++    static pos_T initpos = INIT_POS_T(1, 0, 0);
+ 
+     if (line2 < line1 && amount_after == 0L)	    /* nothing to do */
+ 	return;
+@@ -1049,6 +1073,11 @@
+ 	/* last change position */
+ 	one_adjust(&(curbuf->b_last_change.lnum));
+ 
++	/* last cursor position, if it was set */
++	if (!equalpos(curbuf->b_last_cursor, initpos))
++	    one_adjust(&(curbuf->b_last_cursor.lnum));
++
++
+ #ifdef FEAT_JUMPLIST
+ 	/* list of change positions */
+ 	for (i = 0; i < curbuf->b_changelistlen; ++i)
+@@ -1750,7 +1779,10 @@
+ 	    {
+ 		if (line[1] != NUL)
+ 		{
+-		    sscanf((char *)line + 2, "%ld %u", &pos.lnum, &pos.col);
++		    unsigned u;
++
++		    sscanf((char *)line + 2, "%ld %u", &pos.lnum, &u);
++		    pos.col = u;
+ 		    switch (line[1])
+ 		    {
+ 			case '"': curbuf->b_last_cursor = pos; break;
+diff -Naur vim73.orig/src/mbyte.c vim73/src/mbyte.c
+--- vim73.orig/src/mbyte.c	2010-07-18 13:05:44.000000000 +0000
++++ vim73/src/mbyte.c	2013-06-07 17:07:32.018917245 +0000
+@@ -132,6 +132,7 @@
+ static int dbcs_char2cells __ARGS((int c));
+ static int dbcs_ptr2cells_len __ARGS((char_u *p, int size));
+ static int dbcs_ptr2char __ARGS((char_u *p));
++static int utf_safe_read_char_adv __ARGS((char_u **s, size_t *n));
+ 
+ /*
+  * Lookup table to quickly get the length in bytes of a UTF-8 character from
+@@ -612,7 +613,7 @@
+     enc_dbcs = enc_dbcs_new;
+     has_mbyte = (enc_dbcs != 0 || enc_utf8);
+ 
+-#ifdef WIN3264
++#if defined(WIN3264) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
+     enc_codepage = encname2codepage(p_enc);
+     enc_latin9 = (STRCMP(p_enc, "iso-8859-15") == 0);
+ #endif
+@@ -707,7 +708,7 @@
+ 	     */
+ 	    n = (i & 0x80) ? 2 : 1;
+ # else
+-	    char buf[MB_MAXBYTES];
++	    char buf[MB_MAXBYTES + 1];
+ # ifdef X_LOCALE
+ #  ifndef mblen
+ #   define mblen _Xmblen
+@@ -837,6 +838,27 @@
+ }
+ 
+ /*
++ * Remove all BOM from "s" by moving remaining text.
++ */
++    void
++remove_bom(s)
++    char_u *s;
++{
++    if (enc_utf8)
++    {
++	char_u *p = s;
++
++	while ((p = vim_strbyte(p, 0xef)) != NULL)
++	{
++	    if (p[1] == 0xbb && p[2] == 0xbf)
++		STRMOVE(p, p + 3);
++	    else
++		++p;
++	}
++    }
++}
++
++/*
+  * Get class of pointer:
+  * 0 for blank or NUL
+  * 1 for punctuation
+@@ -847,11 +869,19 @@
+ mb_get_class(p)
+     char_u	*p;
+ {
++    return mb_get_class_buf(p, curbuf);
++}
++
++    int
++mb_get_class_buf(p, buf)
++    char_u	*p;
++    buf_T	*buf;
++{
+     if (MB_BYTE2LEN(p[0]) == 1)
+     {
+ 	if (p[0] == NUL || vim_iswhite(p[0]))
+ 	    return 0;
+-	if (vim_iswordc(p[0]))
++	if (vim_iswordc_buf(p[0], buf))
+ 	    return 2;
+ 	return 1;
+     }
+@@ -873,7 +903,7 @@
+ {
+     switch (enc_dbcs)
+     {
+-	/* please add classfy routine for your language in here */
++	/* please add classify routine for your language in here */
+ 
+ 	case DBCS_JPNU:	/* ? */
+ 	case DBCS_JPN:
+@@ -973,7 +1003,7 @@
+ 		 * 26 : Box Drawings
+ 		 * 27 : Unit Symbols
+ 		 * 28 : Circled/Parenthesized Letter
+-		 * 29 : Hirigana/Katakana
++		 * 29 : Hiragana/Katakana
+ 		 * 30 : Cyrillic Letter
+ 		 */
+ 
+@@ -1024,7 +1054,7 @@
+ 			    return 28;
+ 		    case 0xAA:
+ 		    case 0xAB:
+-			/* Hirigana/Katakana */
++			/* Hiragana/Katakana */
+ 			return 29;
+ 		    case 0xAC:
+ 			/* Cyrillic Letter */
+@@ -1701,6 +1731,66 @@
+ }
+ 
+ /*
++ * Convert a UTF-8 byte sequence to a wide character.
++ * String is assumed to be terminated by NUL or after "n" bytes, whichever
++ * comes first.
++ * The function is safe in the sense that it never accesses memory beyond the
++ * first "n" bytes of "s".
++ *
++ * On success, returns decoded codepoint, advances "s" to the beginning of
++ * next character and decreases "n" accordingly.
++ *
++ * If end of string was reached, returns 0 and, if "n" > 0, advances "s" past
++ * NUL byte.
++ *
++ * If byte sequence is illegal or incomplete, returns -1 and does not advance
++ * "s".
++ */
++    static int
++utf_safe_read_char_adv(s, n)
++    char_u      **s;
++    size_t      *n;
++{
++    int		c, k;
++
++    if (*n == 0) /* end of buffer */
++	return 0;
++
++    k = utf8len_tab_zero[**s];
++
++    if (k == 1)
++    {
++	/* ASCII character or NUL */
++	(*n)--;
++	return *(*s)++;
++    }
++
++    if ((size_t)k <= *n)
++    {
++	/* We have a multibyte sequence and it isn't truncated by buffer
++	 * limits so utf_ptr2char() is safe to use. Or the first byte is
++	 * illegal (k=0), and it's also safe to use utf_ptr2char(). */
++	c = utf_ptr2char(*s);
++
++	/* On failure, utf_ptr2char() returns the first byte, so here we
++	 * check equality with the first byte. The only non-ASCII character
++	 * which equals the first byte of its own UTF-8 representation is
++	 * U+00C3 (UTF-8: 0xC3 0x83), so need to check that special case too.
++	 * It's safe even if n=1, else we would have k=2 > n. */
++	if (c != (int)(**s) || (c == 0xC3 && (*s)[1] == 0x83))
++	{
++	    /* byte sequence was successfully decoded */
++	    *s += k;
++	    *n -= k;
++	    return c;
++	}
++    }
++
++    /* byte sequence is incomplete or illegal */
++    return -1;
++}
++
++/*
+  * Get character at **pp and advance *pp to the next character.
+  * Note: composing characters are skipped!
+  */
+@@ -1871,7 +1961,7 @@
+ /*
+  * Convert the character at screen position "off" to a sequence of bytes.
+  * Includes the composing characters.
+- * "buf" must at least have the length MB_MAXBYTES.
++ * "buf" must at least have the length MB_MAXBYTES + 1.
+  * Only to be used when ScreenLinesUC[off] != 0.
+  * Returns the produced number of bytes.
+  */
+@@ -2667,7 +2757,8 @@
+ 	{0x10400,0x10427,1,40}
+ };
+ 
+-static int utf_convert(int a, convertStruct table[], int tableSize);
++static int utf_convert __ARGS((int a, convertStruct table[], int tableSize));
++static int utf_strnicmp __ARGS((char_u *s1, char_u *s2, size_t n1, size_t n2));
+ 
+ /*
+  * Generic conversion function for case operations.
+@@ -2681,19 +2772,22 @@
+     int			tableSize;
+ {
+     int start, mid, end; /* indices into table */
++    int entries = tableSize / sizeof(convertStruct);
+ 
+     start = 0;
+-    end = tableSize / sizeof(convertStruct);
++    end = entries;
+     while (start < end)
+     {
+ 	/* need to search further */
+-	mid = (end + start) /2;
++	mid = (end + start) / 2;
+ 	if (table[mid].rangeEnd < a)
+ 	    start = mid + 1;
+ 	else
+ 	    end = mid;
+     }
+-    if (table[start].rangeStart <= a && a <= table[start].rangeEnd
++    if (start < entries
++	    && table[start].rangeStart <= a
++	    && a <= table[start].rangeEnd
+ 	    && (a - table[start].rangeStart) % table[start].step == 0)
+ 	return (a + table[start].offset);
+     else
+@@ -2708,7 +2802,7 @@
+ utf_fold(a)
+     int		a;
+ {
+-    return utf_convert(a, foldCase, sizeof(foldCase));
++    return utf_convert(a, foldCase, (int)sizeof(foldCase));
+ }
+ 
+ static convertStruct toLower[] =
+@@ -2863,7 +2957,7 @@
+ {
+ 	{0x61,0x7a,1,-32},
+ 	{0xb5,0xb5,-1,743},
+-	{0xe0,0xf6,1,-32},
++	{0xe0,0xf6,1,-32},  /* 0xdf (German sharp s) is not upper-cased */
+ 	{0xf8,0xfe,1,-32},
+ 	{0xff,0xff,-1,121},
+ 	{0x101,0x12f,2,-1},
+@@ -3036,14 +3130,15 @@
+ 	return TOUPPER_LOC(a);
+ 
+     /* For any other characters use the above mapping table. */
+-    return utf_convert(a, toUpper, sizeof(toUpper));
++    return utf_convert(a, toUpper, (int)sizeof(toUpper));
+ }
+ 
+     int
+ utf_islower(a)
+     int		a;
+ {
+-    return (utf_toupper(a) != a);
++    /* German sharp s is lower case but has no upper case equivalent. */
++    return (utf_toupper(a) != a) || a == 0xdf;
+ }
+ 
+ /*
+@@ -3069,7 +3164,7 @@
+ 	return TOLOWER_LOC(a);
+ 
+     /* For any other characters use the above mapping table. */
+-    return utf_convert(a, toLower, sizeof(toLower));
++    return utf_convert(a, toLower, (int)sizeof(toLower));
+ }
+ 
+     int
+@@ -3079,9 +3174,83 @@
+     return (utf_tolower(a) != a);
+ }
+ 
++    static int
++utf_strnicmp(s1, s2, n1, n2)
++    char_u      *s1, *s2;
++    size_t      n1, n2;
++{
++    int		c1, c2, cdiff;
++    char_u	buffer[6];
++
++    for (;;)
++    {
++	c1 = utf_safe_read_char_adv(&s1, &n1);
++	c2 = utf_safe_read_char_adv(&s2, &n2);
++
++	if (c1 <= 0 || c2 <= 0)
++	    break;
++
++	if (c1 == c2)
++	    continue;
++
++	cdiff = utf_fold(c1) - utf_fold(c2);
++	if (cdiff != 0)
++	    return cdiff;
++    }
++
++    /* some string ended or has an incomplete/illegal character sequence */
++
++    if (c1 == 0 || c2 == 0)
++    {
++	/* some string ended. shorter string is smaller */
++	if (c1 == 0 && c2 == 0)
++	    return 0;
++	return c1 == 0 ? -1 : 1;
++    }
++
++    /* Continue with bytewise comparison to produce some result that
++     * would make comparison operations involving this function transitive.
++     *
++     * If only one string had an error, comparison should be made with
++     * folded version of the other string. In this case it is enough
++     * to fold just one character to determine the result of comparison. */
++
++    if (c1 != -1 && c2 == -1)
++    {
++	n1 = utf_char2bytes(utf_fold(c1), buffer);
++	s1 = buffer;
++    }
++    else if (c2 != -1 && c1 == -1)
++    {
++	n2 = utf_char2bytes(utf_fold(c2), buffer);
++	s2 = buffer;
++    }
++
++    while (n1 > 0 && n2 > 0 && *s1 != NUL && *s2 != NUL)
++    {
++	cdiff = (int)(*s1) - (int)(*s2);
++	if (cdiff != 0)
++	    return cdiff;
++
++	s1++;
++	s2++;
++	n1--;
++	n2--;
++    }
++
++    if (n1 > 0 && *s1 == NUL)
++	n1 = 0;
++    if (n2 > 0 && *s2 == NUL)
++	n2 = 0;
++
++    if (n1 == 0 && n2 == 0)
++	return 0;
++    return n1 == 0 ? -1 : 1;
++}
++
+ /*
+  * Version of strnicmp() that handles multi-byte characters.
+- * Needed for Big5, Sjift-JIS and UTF-8 encoding.  Other DBCS encodings can
++ * Needed for Big5, Shift-JIS and UTF-8 encoding.  Other DBCS encodings can
+  * probably use strnicmp(), because there are no ASCII characters in the
+  * second byte.
+  * Returns zero if s1 and s2 are equal (ignoring case), the difference between
+@@ -3092,46 +3261,21 @@
+     char_u	*s1, *s2;
+     size_t	nn;
+ {
+-    int		i, j, l;
++    int		i, l;
+     int		cdiff;
+-    int		incomplete = FALSE;
+     int		n = (int)nn;
+ 
+-    for (i = 0; i < n; i += l)
++    if (enc_utf8)
+     {
+-	if (s1[i] == NUL && s2[i] == NUL)   /* both strings end */
+-	    return 0;
+-	if (enc_utf8)
+-	{
+-	    l = utf_byte2len(s1[i]);
+-	    if (l > n - i)
+-	    {
+-		l = n - i;		    /* incomplete character */
+-		incomplete = TRUE;
+-	    }
+-	    /* Check directly first, it's faster. */
+-	    for (j = 0; j < l; ++j)
+-	    {
+-		if (s1[i + j] != s2[i + j])
+-		    break;
+-		if (s1[i + j] == 0)
+-		    /* Both stings have the same bytes but are incomplete or
+-		     * have illegal bytes, accept them as equal. */
+-		    l = j;
+-	    }
+-	    if (j < l)
+-	    {
+-		/* If one of the two characters is incomplete return -1. */
+-		if (incomplete || i + utf_byte2len(s2[i]) > n)
+-		    return -1;
+-		cdiff = utf_fold(utf_ptr2char(s1 + i))
+-					     - utf_fold(utf_ptr2char(s2 + i));
+-		if (cdiff != 0)
+-		    return cdiff;
+-	    }
+-	}
+-	else
++	return utf_strnicmp(s1, s2, nn, nn);
++    }
++    else
++    {
++	for (i = 0; i < n; i += l)
+ 	{
++	    if (s1[i] == NUL && s2[i] == NUL)	/* both strings end */
++		return 0;
++
+ 	    l = (*mb_ptr2len)(s1 + i);
+ 	    if (l <= 1)
+ 	    {
+@@ -3560,7 +3704,7 @@
+     void
+ mb_adjust_cursor()
+ {
+-    mb_adjustpos(&curwin->w_cursor);
++    mb_adjustpos(curbuf, &curwin->w_cursor);
+ }
+ 
+ /*
+@@ -3568,7 +3712,8 @@
+  * If it points to a tail byte it's moved backwards to the head byte.
+  */
+     void
+-mb_adjustpos(lp)
++mb_adjustpos(buf, lp)
++    buf_T	*buf;
+     pos_T	*lp;
+ {
+     char_u	*p;
+@@ -3579,7 +3724,7 @@
+ #endif
+ 	    )
+     {
+-	p = ml_get(lp->lnum);
++	p = ml_get_buf(buf, lp->lnum, FALSE);
+ 	lp->col -= (*mb_head_off)(p, p + lp->col);
+ #ifdef FEAT_VIRTUALEDIT
+ 	/* Reset "coladd" when the cursor would be on the right half of a
+@@ -3656,13 +3801,15 @@
+ mb_unescape(pp)
+     char_u **pp;
+ {
+-    static char_u	buf[MB_MAXBYTES + 1];
+-    int			n, m = 0;
++    static char_u	buf[6];
++    int			n;
++    int			m = 0;
+     char_u		*str = *pp;
+ 
+     /* Must translate K_SPECIAL KS_SPECIAL KE_FILLER to K_SPECIAL and CSI
+-     * KS_EXTRA KE_CSI to CSI. */
+-    for (n = 0; str[n] != NUL && m <= MB_MAXBYTES; ++n)
++     * KS_EXTRA KE_CSI to CSI.
++     * Maximum length of a utf-8 character is 4 bytes. */
++    for (n = 0; str[n] != NUL && m < 4; ++n)
+     {
+ 	if (str[n] == K_SPECIAL
+ 		&& str[n + 1] == KS_SPECIAL
+@@ -3699,6 +3846,10 @@
+ 	    *pp = str + n + 1;
+ 	    return buf;
+ 	}
++
++	/* Bail out quickly for ASCII. */
++	if (buf[0] < 128)
++	    break;
+     }
+     return NULL;
+ }
+@@ -3938,7 +4089,7 @@
+     return enc_canonize((char_u *)buf);
+ }
+ 
+-#if defined(WIN3264) || defined(PROTO)
++#if defined(WIN3264) || defined(PROTO) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
+ /*
+  * Convert an encoding name to an MS-Windows codepage.
+  * Returns zero if no codepage can be figured out.
+@@ -4126,7 +4277,7 @@
+ 	done = to - (char *)result;
+     }
+ 
+-    if (resultlenp != NULL)
++    if (resultlenp != NULL && result != NULL)
+ 	*resultlenp = (int)(to - (char *)result);
+     return result;
+ }
+@@ -4151,6 +4302,47 @@
+ #  endif
+ 
+ /*
++ * Get the address of 'funcname' which is imported by 'hInst' DLL.
++ */
++    static void *
++get_iconv_import_func(HINSTANCE hInst, const char *funcname)
++{
++    PBYTE			pImage = (PBYTE)hInst;
++    PIMAGE_DOS_HEADER		pDOS = (PIMAGE_DOS_HEADER)hInst;
++    PIMAGE_NT_HEADERS		pPE;
++    PIMAGE_IMPORT_DESCRIPTOR	pImpDesc;
++    PIMAGE_THUNK_DATA		pIAT;	    /* Import Address Table */
++    PIMAGE_THUNK_DATA		pINT;	    /* Import Name Table */
++    PIMAGE_IMPORT_BY_NAME	pImpName;
++
++    if (pDOS->e_magic != IMAGE_DOS_SIGNATURE)
++	return NULL;
++    pPE = (PIMAGE_NT_HEADERS)(pImage + pDOS->e_lfanew);
++    if (pPE->Signature != IMAGE_NT_SIGNATURE)
++	return NULL;
++    pImpDesc = (PIMAGE_IMPORT_DESCRIPTOR)(pImage
++	    + pPE->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
++							    .VirtualAddress);
++    for (; pImpDesc->FirstThunk; ++pImpDesc)
++    {
++	if (!pImpDesc->OriginalFirstThunk)
++	    continue;
++	pIAT = (PIMAGE_THUNK_DATA)(pImage + pImpDesc->FirstThunk);
++	pINT = (PIMAGE_THUNK_DATA)(pImage + pImpDesc->OriginalFirstThunk);
++	for (; pIAT->u1.Function; ++pIAT, ++pINT)
++	{
++	    if (IMAGE_SNAP_BY_ORDINAL(pINT->u1.Ordinal))
++		continue;
++	    pImpName = (PIMAGE_IMPORT_BY_NAME)(pImage
++					+ (UINT_PTR)(pINT->u1.AddressOfData));
++	    if (strcmp(pImpName->Name, funcname) == 0)
++		return (void *)pIAT->u1.Function;
++	}
++    }
++    return NULL;
++}
++
++/*
+  * Try opening the iconv.dll and return TRUE if iconv() can be used.
+  */
+     int
+@@ -4159,11 +4351,11 @@
+ {
+     if (hIconvDLL != 0 && hMsvcrtDLL != 0)
+ 	return TRUE;
+-    hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL);
++    hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL);
+     if (hIconvDLL == 0)		/* sometimes it's called libiconv.dll */
+-	hIconvDLL = LoadLibrary(DYNAMIC_ICONV_DLL_ALT);
++	hIconvDLL = vimLoadLib(DYNAMIC_ICONV_DLL_ALT);
+     if (hIconvDLL != 0)
+-	hMsvcrtDLL = LoadLibrary(DYNAMIC_MSVCRT_DLL);
++	hMsvcrtDLL = vimLoadLib(DYNAMIC_MSVCRT_DLL);
+     if (hIconvDLL == 0 || hMsvcrtDLL == 0)
+     {
+ 	/* Only give the message when 'verbose' is set, otherwise it might be
+@@ -4183,7 +4375,9 @@
+     iconv_open	= (void *)GetProcAddress(hIconvDLL, "libiconv_open");
+     iconv_close	= (void *)GetProcAddress(hIconvDLL, "libiconv_close");
+     iconvctl	= (void *)GetProcAddress(hIconvDLL, "libiconvctl");
+-    iconv_errno	= (void *)GetProcAddress(hMsvcrtDLL, "_errno");
++    iconv_errno	= get_iconv_import_func(hIconvDLL, "_errno");
++    if (iconv_errno == NULL)
++	iconv_errno = (void *)GetProcAddress(hMsvcrtDLL, "_errno");
+     if (iconv == NULL || iconv_open == NULL || iconv_close == NULL
+ 	    || iconvctl == NULL || iconv_errno == NULL)
+     {
+@@ -4368,7 +4562,8 @@
+     vgetc_busy = TRUE;
+     showmode();
+     vgetc_busy = old_vgetc_busy;
+-    setcursor();
++    if ((State & NORMAL) || (State & INSERT))
++	setcursor();
+     out_flush();
+ }
+ 
+@@ -4404,7 +4599,7 @@
+     }
+ 
+     /* The thing which setting "preedit_start_col" to MAXCOL means that
+-     * "preedit_start_col" will be set forcely when calling
++     * "preedit_start_col" will be set forcedly when calling
+      * preedit_changed_cb() next time.
+      * "preedit_start_col" should not reset with MAXCOL on this part. Vim
+      * is simulating the preediting by using add_to_input_str(). when
+@@ -5058,6 +5253,10 @@
+ 		/* We had a keypad key, and XIM tried to thieve it */
+ 		return FALSE;
+ 
++	    /* This is supposed to fix a problem with iBus, that space
++	     * characters don't work in input mode. */
++	    xim_expected_char = NUL;
++
+ 	    /* Normal processing */
+ 	    return imresult;
+ 	}
+@@ -5167,16 +5366,16 @@
+     void
+ xim_set_preedit()
+ {
+-    if (xic == NULL)
+-	return;
+-
+-    xim_set_focus(TRUE);
+-
+     XVaNestedList attr_list;
+     XRectangle spot_area;
+     XPoint over_spot;
+     int line_space;
+ 
++    if (xic == NULL)
++	return;
++
++    xim_set_focus(TRUE);
++
+     if (!xim_has_focus)
+     {
+ 	/* hide XIM cursor */
+@@ -5554,12 +5753,12 @@
+     void
+ xim_set_status_area()
+ {
+-    if (xic == NULL)
+-	return;
+-
+     XVaNestedList preedit_list = 0, status_list = 0, list = 0;
+     XRectangle pre_area, status_area;
+ 
++    if (xic == NULL)
++	return;
++
+     if (input_style & XIMStatusArea)
+     {
+ 	if (input_style & XIMPreeditArea)
+@@ -6057,8 +6256,23 @@
+ 	    if (vcp->vc_cpfrom == 0)
+ 		tmp_len = utf8_to_utf16(ptr, len, NULL, NULL);
+ 	    else
+-		tmp_len = MultiByteToWideChar(vcp->vc_cpfrom, 0,
+-							      ptr, len, 0, 0);
++	    {
++		tmp_len = MultiByteToWideChar(vcp->vc_cpfrom,
++					unconvlenp ? MB_ERR_INVALID_CHARS : 0,
++					ptr, len, 0, 0);
++		if (tmp_len == 0
++			&& GetLastError() == ERROR_NO_UNICODE_TRANSLATION)
++		{
++		    if (lenp != NULL)
++			*lenp = 0;
++		    if (unconvlenp != NULL)
++			*unconvlenp = len;
++		    retval = alloc(1);
++		    if (retval)
++			retval[0] = NUL;
++		    return retval;
++		}
++	    }
+ 	    tmp = (short_u *)alloc(sizeof(short_u) * tmp_len);
+ 	    if (tmp == NULL)
+ 		break;
+diff -Naur vim73.orig/src/memfile.c vim73/src/memfile.c
+--- vim73.orig/src/memfile.c	2010-06-21 02:59:57.000000000 +0000
++++ vim73/src/memfile.c	2013-06-07 17:07:32.042250512 +0000
+@@ -32,10 +32,6 @@
+  * file is opened.
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ /*
+@@ -88,6 +84,13 @@
+ static int  mf_write_block __ARGS((memfile_T *mfp, bhdr_T *hp, off_t offset, unsigned size));
+ static int  mf_trans_add __ARGS((memfile_T *, bhdr_T *));
+ static void mf_do_open __ARGS((memfile_T *, char_u *, int));
++static void mf_hash_init __ARGS((mf_hashtab_T *));
++static void mf_hash_free __ARGS((mf_hashtab_T *));
++static void mf_hash_free_all __ARGS((mf_hashtab_T *));
++static mf_hashitem_T *mf_hash_find __ARGS((mf_hashtab_T *, blocknr_T));
++static void mf_hash_add_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
++static void mf_hash_rem_item __ARGS((mf_hashtab_T *, mf_hashitem_T *));
++static int mf_hash_grow __ARGS((mf_hashtab_T *));
+ 
+ /*
+  * The functions for using a memfile:
+@@ -123,9 +126,8 @@
+     int		flags;
+ {
+     memfile_T		*mfp;
+-    int			i;
+     off_t		size;
+-#if defined(STATFS) && defined(UNIX) && !defined(__QNX__)
++#if defined(STATFS) && defined(UNIX) && !defined(__QNX__) && !defined(__minix)
+ # define USE_FSTATFS
+     struct STATFS	stf;
+ #endif
+@@ -156,11 +158,8 @@
+     mfp->mf_used_last = NULL;
+     mfp->mf_dirty = FALSE;
+     mfp->mf_used_count = 0;
+-    for (i = 0; i < MEMHASHSIZE; ++i)
+-    {
+-	mfp->mf_hash[i] = NULL;		/* hash lists are empty */
+-	mfp->mf_trans[i] = NULL;	/* trans lists are empty */
+-    }
++    mf_hash_init(&mfp->mf_hash);
++    mf_hash_init(&mfp->mf_trans);
+     mfp->mf_page_size = MEMFILE_PAGE_SIZE;
+ #ifdef FEAT_CRYPT
+     mfp->mf_old_key = NULL;
+@@ -246,8 +245,6 @@
+     int		del_file;
+ {
+     bhdr_T	*hp, *nextp;
+-    NR_TRANS	*tp, *tpnext;
+-    int		i;
+ 
+     if (mfp == NULL)		    /* safety check */
+ 	return;
+@@ -267,12 +264,8 @@
+     }
+     while (mfp->mf_free_first != NULL)	    /* free entries in free list */
+ 	vim_free(mf_rem_free(mfp));
+-    for (i = 0; i < MEMHASHSIZE; ++i)	    /* free entries in trans lists */
+-	for (tp = mfp->mf_trans[i]; tp != NULL; tp = tpnext)
+-	{
+-	    tpnext = tp->nt_next;
+-	    vim_free(tp);
+-	}
++    mf_hash_free(&mfp->mf_hash);
++    mf_hash_free_all(&mfp->mf_trans);	    /* free hashtable and its items */
+     vim_free(mfp->mf_fname);
+     vim_free(mfp->mf_ffname);
+     vim_free(mfp);
+@@ -635,7 +628,7 @@
+ 	 * sync from the system itself).
+ 	 */
+ #  if defined(__EMX__)
+-   error "Dont use fsync with EMX! Read emxdoc.doc or emxfix01.doc for info."
++   error "Don't use fsync with EMX! Read emxdoc.doc or emxfix01.doc for info."
+ #  endif
+ 	if (STRCMP(p_sws, "fsync") == 0)
+ 	{
+@@ -747,16 +740,7 @@
+     memfile_T	*mfp;
+     bhdr_T	*hp;
+ {
+-    bhdr_T	*hhp;
+-    int		hash;
+-
+-    hash = MEMHASH(hp->bh_bnum);
+-    hhp = mfp->mf_hash[hash];
+-    hp->bh_hash_next = hhp;
+-    hp->bh_hash_prev = NULL;
+-    if (hhp != NULL)
+-	hhp->bh_hash_prev = hp;
+-    mfp->mf_hash[hash] = hp;
++    mf_hash_add_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
+ }
+ 
+ /*
+@@ -767,13 +751,7 @@
+     memfile_T	*mfp;
+     bhdr_T	*hp;
+ {
+-    if (hp->bh_hash_prev == NULL)
+-	mfp->mf_hash[MEMHASH(hp->bh_bnum)] = hp->bh_hash_next;
+-    else
+-	hp->bh_hash_prev->bh_hash_next = hp->bh_hash_next;
+-
+-    if (hp->bh_hash_next)
+-	hp->bh_hash_next->bh_hash_prev = hp->bh_hash_prev;
++    mf_hash_rem_item(&mfp->mf_hash, (mf_hashitem_T *)hp);
+ }
+ 
+ /*
+@@ -784,12 +762,7 @@
+     memfile_T	*mfp;
+     blocknr_T	nr;
+ {
+-    bhdr_T	*hp;
+-
+-    for (hp = mfp->mf_hash[MEMHASH(nr)]; hp != NULL; hp = hp->bh_hash_next)
+-	if (hp->bh_bnum == nr)
+-	    break;
+-    return hp;
++    return (bhdr_T *)mf_hash_find(&mfp->mf_hash, nr);
+ }
+ 
+ /*
+@@ -1049,7 +1022,7 @@
+ 	PERROR(_("E294: Seek error in swap file read"));
+ 	return FAIL;
+     }
+-    if ((unsigned)vim_read(mfp->mf_fd, hp->bh_data, size) != size)
++    if ((unsigned)read_eintr(mfp->mf_fd, hp->bh_data, size) != size)
+     {
+ 	PERROR(_("E295: Read error in swap file"));
+ 	return FAIL;
+@@ -1102,7 +1075,7 @@
+ 	if (nr > mfp->mf_infile_count)		/* beyond end of file */
+ 	{
+ 	    nr = mfp->mf_infile_count;
+-	    hp2 = mf_find_hash(mfp, nr);	/* NULL catched below */
++	    hp2 = mf_find_hash(mfp, nr);	/* NULL caught below */
+ 	}
+ 	else
+ 	    hp2 = hp;
+@@ -1168,7 +1141,7 @@
+     }
+ #endif
+ 
+-    if ((unsigned)vim_write(mfp->mf_fd, data, size) != size)
++    if ((unsigned)write_eintr(mfp->mf_fd, data, size) != size)
+ 	result = FAIL;
+ 
+ #ifdef FEAT_CRYPT
+@@ -1191,7 +1164,6 @@
+ {
+     bhdr_T	*freep;
+     blocknr_T	new_bnum;
+-    int		hash;
+     NR_TRANS	*np;
+     int		page_count;
+ 
+@@ -1212,7 +1184,7 @@
+     {
+ 	new_bnum = freep->bh_bnum;
+ 	/*
+-	 * If the page count of the free block was larger, recude it.
++	 * If the page count of the free block was larger, reduce it.
+ 	 * If the page count matches, remove the block from the free list
+ 	 */
+ 	if (freep->bh_page_count > page_count)
+@@ -1239,12 +1211,8 @@
+     hp->bh_bnum = new_bnum;
+     mf_ins_hash(mfp, hp);		    /* insert in new hash list */
+ 
+-    hash = MEMHASH(np->nt_old_bnum);	    /* insert in trans list */
+-    np->nt_next = mfp->mf_trans[hash];
+-    mfp->mf_trans[hash] = np;
+-    if (np->nt_next != NULL)
+-	np->nt_next->nt_prev = np;
+-    np->nt_prev = NULL;
++    /* Insert "np" into "mf_trans" hashtable with key "np->nt_old_bnum" */
++    mf_hash_add_item(&mfp->mf_trans, (mf_hashitem_T *)np);
+ 
+     return OK;
+ }
+@@ -1259,25 +1227,20 @@
+     memfile_T	*mfp;
+     blocknr_T	old_nr;
+ {
+-    int		hash;
+     NR_TRANS	*np;
+     blocknr_T	new_bnum;
+ 
+-    hash = MEMHASH(old_nr);
+-    for (np = mfp->mf_trans[hash]; np != NULL; np = np->nt_next)
+-	if (np->nt_old_bnum == old_nr)
+-	    break;
++    np = (NR_TRANS *)mf_hash_find(&mfp->mf_trans, old_nr);
++
+     if (np == NULL)		/* not found */
+ 	return old_nr;
+ 
+     mfp->mf_neg_count--;
+     new_bnum = np->nt_new_bnum;
+-    if (np->nt_prev != NULL)		/* remove entry from the trans list */
+-	np->nt_prev->nt_next = np->nt_next;
+-    else
+-	mfp->mf_trans[hash] = np->nt_next;
+-    if (np->nt_next != NULL)
+-	np->nt_next->nt_prev = np->nt_prev;
++
++    /* remove entry from the trans list */
++    mf_hash_rem_item(&mfp->mf_trans, (mf_hashitem_T *)np);
++
+     vim_free(np);
+ 
+     return new_bnum;
+@@ -1344,9 +1307,9 @@
+      * fname cannot be NameBuff, because it must have been allocated.
+      */
+     mf_set_ffname(mfp);
+-#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
++#if defined(MSDOS) || defined(MSWIN)
+     /*
+-     * A ":!cd e:xxx" may change the directory without us knowning, use the
++     * A ":!cd e:xxx" may change the directory without us knowing, use the
+      * full pathname always.  Careful: This frees fname!
+      */
+     mf_fullname(mfp);
+@@ -1401,3 +1364,207 @@
+ 	mch_hide(mfp->mf_fname);    /* try setting the 'hidden' flag */
+     }
+ }
++
++/*
++ * Implementation of mf_hashtab_T follows.
++ */
++
++/*
++ * The number of buckets in the hashtable is increased by a factor of
++ * MHT_GROWTH_FACTOR when the average number of items per bucket
++ * exceeds 2 ^ MHT_LOG_LOAD_FACTOR.
++ */
++#define MHT_LOG_LOAD_FACTOR 6
++#define MHT_GROWTH_FACTOR   2   /* must be a power of two */
++
++/*
++ * Initialize an empty hash table.
++ */
++    static void
++mf_hash_init(mht)
++    mf_hashtab_T *mht;
++{
++    vim_memset(mht, 0, sizeof(mf_hashtab_T));
++    mht->mht_buckets = mht->mht_small_buckets;
++    mht->mht_mask = MHT_INIT_SIZE - 1;
++}
++
++/*
++ * Free the array of a hash table.  Does not free the items it contains!
++ * The hash table must not be used again without another mf_hash_init() call.
++ */
++    static void
++mf_hash_free(mht)
++    mf_hashtab_T *mht;
++{
++    if (mht->mht_buckets != mht->mht_small_buckets)
++	vim_free(mht->mht_buckets);
++}
++
++/*
++ * Free the array of a hash table and all the items it contains.
++ */
++    static void
++mf_hash_free_all(mht)
++    mf_hashtab_T    *mht;
++{
++    long_u	    idx;
++    mf_hashitem_T   *mhi;
++    mf_hashitem_T   *next;
++
++    for (idx = 0; idx <= mht->mht_mask; idx++)
++	for (mhi = mht->mht_buckets[idx]; mhi != NULL; mhi = next)
++	{
++	    next = mhi->mhi_next;
++	    vim_free(mhi);
++	}
++
++    mf_hash_free(mht);
++}
++
++/*
++ * Find "key" in hashtable "mht".
++ * Returns a pointer to a mf_hashitem_T or NULL if the item was not found.
++ */
++    static mf_hashitem_T *
++mf_hash_find(mht, key)
++    mf_hashtab_T    *mht;
++    blocknr_T	    key;
++{
++    mf_hashitem_T   *mhi;
++
++    mhi = mht->mht_buckets[key & mht->mht_mask];
++    while (mhi != NULL && mhi->mhi_key != key)
++	mhi = mhi->mhi_next;
++
++    return mhi;
++}
++
++/*
++ * Add item "mhi" to hashtable "mht".
++ * "mhi" must not be NULL.
++ */
++    static void
++mf_hash_add_item(mht, mhi)
++    mf_hashtab_T    *mht;
++    mf_hashitem_T   *mhi;
++{
++    long_u	    idx;
++
++    idx = mhi->mhi_key & mht->mht_mask;
++    mhi->mhi_next = mht->mht_buckets[idx];
++    mhi->mhi_prev = NULL;
++    if (mhi->mhi_next != NULL)
++	mhi->mhi_next->mhi_prev = mhi;
++    mht->mht_buckets[idx] = mhi;
++
++    mht->mht_count++;
++
++    /*
++     * Grow hashtable when we have more thank 2^MHT_LOG_LOAD_FACTOR
++     * items per bucket on average
++     */
++    if (mht->mht_fixed == 0
++	&& (mht->mht_count >> MHT_LOG_LOAD_FACTOR) > mht->mht_mask)
++    {
++	if (mf_hash_grow(mht) == FAIL)
++	{
++	    /* stop trying to grow after first failure to allocate memory */
++	    mht->mht_fixed = 1;
++	}
++    }
++}
++
++/*
++ * Remove item "mhi" from hashtable "mht".
++ * "mhi" must not be NULL and must have been inserted into "mht".
++ */
++    static void
++mf_hash_rem_item(mht, mhi)
++    mf_hashtab_T    *mht;
++    mf_hashitem_T   *mhi;
++{
++    if (mhi->mhi_prev == NULL)
++	mht->mht_buckets[mhi->mhi_key & mht->mht_mask] = mhi->mhi_next;
++    else
++	mhi->mhi_prev->mhi_next = mhi->mhi_next;
++
++    if (mhi->mhi_next != NULL)
++	mhi->mhi_next->mhi_prev = mhi->mhi_prev;
++
++    mht->mht_count--;
++
++    /* We could shrink the table here, but it typically takes little memory,
++     * so why bother?  */
++}
++
++/*
++ * Increase number of buckets in the hashtable by MHT_GROWTH_FACTOR and
++ * rehash items.
++ * Returns FAIL when out of memory.
++ */
++    static int
++mf_hash_grow(mht)
++    mf_hashtab_T    *mht;
++{
++    long_u	    i, j;
++    int		    shift;
++    mf_hashitem_T   *mhi;
++    mf_hashitem_T   *tails[MHT_GROWTH_FACTOR];
++    mf_hashitem_T   **buckets;
++    size_t	    size;
++
++    size = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR * sizeof(void *);
++    buckets = (mf_hashitem_T **)lalloc_clear(size, FALSE);
++    if (buckets == NULL)
++	return FAIL;
++
++    shift = 0;
++    while ((mht->mht_mask >> shift) != 0)
++	shift++;
++
++    for (i = 0; i <= mht->mht_mask; i++)
++    {
++	/*
++	 * Traverse the items in the i-th original bucket and move them into
++	 * MHT_GROWTH_FACTOR new buckets, preserving their relative order
++	 * within each new bucket.  Preserving the order is important because
++	 * mf_get() tries to keep most recently used items at the front of
++	 * each bucket.
++	 *
++	 * Here we strongly rely on the fact the hashes are computed modulo
++	 * a power of two.
++	 */
++
++	vim_memset(tails, 0, sizeof(tails));
++
++	for (mhi = mht->mht_buckets[i]; mhi != NULL; mhi = mhi->mhi_next)
++	{
++	    j = (mhi->mhi_key >> shift) & (MHT_GROWTH_FACTOR - 1);
++	    if (tails[j] == NULL)
++	    {
++		buckets[i + (j << shift)] = mhi;
++		tails[j] = mhi;
++		mhi->mhi_prev = NULL;
++	    }
++	    else
++	    {
++		tails[j]->mhi_next = mhi;
++		mhi->mhi_prev = tails[j];
++		tails[j] = mhi;
++	    }
++	}
++
++	for (j = 0; j < MHT_GROWTH_FACTOR; j++)
++	    if (tails[j] != NULL)
++		tails[j]->mhi_next = NULL;
++    }
++
++    if (mht->mht_buckets != mht->mht_small_buckets)
++	vim_free(mht->mht_buckets);
++
++    mht->mht_buckets = buckets;
++    mht->mht_mask = (mht->mht_mask + 1) * MHT_GROWTH_FACTOR - 1;
++
++    return OK;
++}
+diff -Naur vim73.orig/src/memfile_test.c vim73/src/memfile_test.c
+--- vim73.orig/src/memfile_test.c	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/memfile_test.c	2013-06-07 17:07:32.045583836 +0000
+@@ -0,0 +1,145 @@
++/* vi:set ts=8 sts=4 sw=4:
++ *
++ * VIM - Vi IMproved	by Bram Moolenaar
++ *
++ * Do ":help uganda"  in Vim to read copying and usage conditions.
++ * Do ":help credits" in Vim to see a list of people who contributed.
++ * See README.txt for an overview of the Vim source code.
++ */
++
++/*
++ * memfile_test.c: Unittests for memfile.c
++ * Mostly by Ivan Krasilnikov.
++ */
++
++#undef NDEBUG
++#include <assert.h>
++
++/* Must include main.c because it contains much more than just main() */
++#define NO_VIM_MAIN
++#include "main.c"
++
++/* This file has to be included because the tested functions are static */
++#include "memfile.c"
++
++#define index_to_key(i) ((i) ^ 15167)
++#define TEST_COUNT 50000
++
++static void test_mf_hash __ARGS((void));
++
++/*
++ * Test mf_hash_*() functions.
++ */
++    static void
++test_mf_hash()
++{
++    mf_hashtab_T   ht;
++    mf_hashitem_T  *item;
++    blocknr_T      key;
++    long_u	   i;
++    long_u	   num_buckets;
++
++    mf_hash_init(&ht);
++
++    /* insert some items and check invariants */
++    for (i = 0; i < TEST_COUNT; i++)
++    {
++	assert(ht.mht_count == i);
++
++	/* check that number of buckets is a power of 2 */
++	num_buckets = ht.mht_mask + 1;
++	assert(num_buckets > 0 && (num_buckets & (num_buckets - 1)) == 0);
++
++	/* check load factor */
++	assert(ht.mht_count <= (num_buckets << MHT_LOG_LOAD_FACTOR));
++
++	if (i < (MHT_INIT_SIZE << MHT_LOG_LOAD_FACTOR))
++	{
++	    /* first expansion shouldn't have occurred yet */
++	    assert(num_buckets == MHT_INIT_SIZE);
++	    assert(ht.mht_buckets == ht.mht_small_buckets);
++	}
++	else
++	{
++	    assert(num_buckets > MHT_INIT_SIZE);
++	    assert(ht.mht_buckets != ht.mht_small_buckets);
++	}
++
++	key = index_to_key(i);
++	assert(mf_hash_find(&ht, key) == NULL);
++
++	/* allocate and add new item */
++	item = (mf_hashitem_T *)lalloc_clear(sizeof(mf_hashtab_T), FALSE);
++	assert(item != NULL);
++	item->mhi_key = key;
++	mf_hash_add_item(&ht, item);
++
++	assert(mf_hash_find(&ht, key) == item);
++
++	if (ht.mht_mask + 1 != num_buckets)
++	{
++	    /* hash table was expanded */
++	    assert(ht.mht_mask + 1 == num_buckets * MHT_GROWTH_FACTOR);
++	    assert(i + 1 == (num_buckets << MHT_LOG_LOAD_FACTOR));
++	}
++    }
++
++    /* check presence of inserted items */
++    for (i = 0; i < TEST_COUNT; i++)
++    {
++	key = index_to_key(i);
++	item = mf_hash_find(&ht, key);
++	assert(item != NULL);
++	assert(item->mhi_key == key);
++    }
++
++    /* delete some items */
++    for (i = 0; i < TEST_COUNT; i++)
++    {
++	if (i % 100 < 70)
++	{
++	    key = index_to_key(i);
++	    item = mf_hash_find(&ht, key);
++	    assert(item != NULL);
++	    assert(item->mhi_key == key);
++
++	    mf_hash_rem_item(&ht, item);
++	    assert(mf_hash_find(&ht, key) == NULL);
++
++	    mf_hash_add_item(&ht, item);
++	    assert(mf_hash_find(&ht, key) == item);
++
++	    mf_hash_rem_item(&ht, item);
++	    assert(mf_hash_find(&ht, key) == NULL);
++
++	    vim_free(item);
++	}
++    }
++
++    /* check again */
++    for (i = 0; i < TEST_COUNT; i++)
++    {
++	key = index_to_key(i);
++	item = mf_hash_find(&ht, key);
++
++	if (i % 100 < 70)
++	{
++	    assert(item == NULL);
++	}
++	else
++	{
++	    assert(item != NULL);
++	    assert(item->mhi_key == key);
++	}
++    }
++
++    /* free hash table and all remaining items */
++    mf_hash_free_all(&ht);
++}
++
++    int
++main()
++{
++    test_mf_hash();
++    return 0;
++}
+diff -Naur vim73.orig/src/memline.c vim73/src/memline.c
+--- vim73.orig/src/memline.c	2010-08-08 13:11:46.000000000 +0000
++++ vim73/src/memline.c	2013-06-07 17:07:32.075583750 +0000
+@@ -42,10 +42,6 @@
+  *  mf_get().
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ #ifndef UNIX		/* it's in os_unix.h for Unix */
+@@ -56,10 +52,6 @@
+ # include <proto/dos.h>	    /* for Open() and Close() */
+ #endif
+ 
+-#ifdef HAVE_ERRNO_H
+-# include <errno.h>
+-#endif
+-
+ typedef struct block0		ZERO_BL;    /* contents of the first block */
+ typedef struct pointer_block	PTR_BL;	    /* contents of a pointer block */
+ typedef struct data_block	DATA_BL;    /* contents of a data block */
+@@ -582,6 +574,9 @@
+ 	    idx = ip->ip_index + 1;	    /* go to next index */
+ 	    page_count = 1;
+ 	}
++
++	if (error > 0)
++	    EMSG(_("E843: Error while updating swap file crypt"));
+     }
+ 
+     mfp->mf_old_key = NULL;
+@@ -626,6 +621,8 @@
+ 	    break;
+ 	fname = findswapname(buf, &dirp, mfp->mf_fname);
+ 						    /* alloc's fname */
++	if (dirp == NULL)	    /* out of memory */
++	    break;
+ 	if (fname == NULL)	    /* no file name found for this dir */
+ 	    continue;
+ 
+@@ -749,11 +746,13 @@
+ 	 * and creating it, another Vim creates the file.  In that case the
+ 	 * creation will fail and we will use another directory. */
+ 	fname = findswapname(buf, &dirp, NULL); /* allocates fname */
++	if (dirp == NULL)
++	    break;  /* out of memory */
+ 	if (fname == NULL)
+ 	    continue;
+ 	if (mf_open_file(mfp, fname) == OK)	/* consumes fname! */
+ 	{
+-#if defined(MSDOS) || defined(MSWIN) || defined(RISCOS)
++#if defined(MSDOS) || defined(MSWIN)
+ 	    /*
+ 	     * set full pathname for swap file now, because a ":!cd dir" may
+ 	     * change directory without us knowing it.
+@@ -781,9 +780,7 @@
+ 	need_wait_return = TRUE;	/* call wait_return later */
+ 	++no_wait_return;
+ 	(void)EMSG2(_("E303: Unable to open swap file for \"%s\", recovery impossible"),
+-		    buf_spname(buf) != NULL
+-			? (char_u *)buf_spname(buf)
+-			: buf->b_fname);
++		    buf_spname(buf) != NULL ? buf_spname(buf) : buf->b_fname);
+ 	--no_wait_return;
+     }
+ 
+@@ -938,7 +935,7 @@
+ 	b0p->b0_fname[0] = NUL;
+     else
+     {
+-#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA) || defined(RISCOS)
++#if defined(MSDOS) || defined(MSWIN) || defined(AMIGA)
+ 	/* Systems that cannot translate "~user" back into a path: copy the
+ 	 * file name unmodified.  Do use slashes instead of backslashes for
+ 	 * portability. */
+@@ -1108,7 +1105,7 @@
+ 	fname = (char_u *)"";
+     len = (int)STRLEN(fname);
+     if (len >= 4 &&
+-#if defined(VMS) || defined(RISCOS)
++#if defined(VMS)
+ 	    STRNICMP(fname + len - 4, "_s" , 2)
+ #else
+ 	    STRNICMP(fname + len - 4, ".s" , 2)
+@@ -1316,7 +1313,7 @@
+     smsg((char_u *)_("Using swap file \"%s\""), NameBuff);
+ 
+     if (buf_spname(curbuf) != NULL)
+-	STRCPY(NameBuff, buf_spname(curbuf));
++	vim_strncpy(NameBuff, buf_spname(curbuf), MAXPATHL - 1);
+     else
+ 	home_replace(NULL, curbuf->b_ffname, NameBuff, MAXPATHL, TRUE);
+     smsg((char_u *)_("Original file \"%s\""), NameBuff);
+@@ -1512,6 +1509,7 @@
+ 		    bnum = pp->pb_pointer[idx].pe_bnum;
+ 		    line_count = pp->pb_pointer[idx].pe_line_count;
+ 		    page_count = pp->pb_pointer[idx].pe_page_count;
++		    idx = 0;
+ 		    continue;
+ 		}
+ 	    }
+@@ -1778,11 +1776,7 @@
+ #ifdef VMS
+ 		names[0] = vim_strsave((char_u *)"*_sw%");
+ #else
+-# ifdef RISCOS
+-		names[0] = vim_strsave((char_u *)"*_sw#");
+-# else
+ 		names[0] = vim_strsave((char_u *)"*.sw?");
+-# endif
+ #endif
+ #if defined(UNIX) || defined(WIN3264)
+ 		/* For Unix names starting with a dot are special.  MS-Windows
+@@ -1809,11 +1803,7 @@
+ #ifdef VMS
+ 		names[0] = concat_fnames(dir_name, (char_u *)"*_sw%", TRUE);
+ #else
+-# ifdef RISCOS
+-		names[0] = concat_fnames(dir_name, (char_u *)"*_sw#", TRUE);
+-# else
+ 		names[0] = concat_fnames(dir_name, (char_u *)"*.sw?", TRUE);
+-# endif
+ #endif
+ #if defined(UNIX) || defined(WIN3264)
+ 		/* For Unix names starting with a dot are special.  MS-Windows
+@@ -1882,7 +1872,7 @@
+ 	    char_u	    *swapname;
+ 
+ 	    swapname = modname(fname_res,
+-#if defined(VMS) || defined(RISCOS)
++#if defined(VMS)
+ 			       (char_u *)"_swp", FALSE
+ #else
+ 			       (char_u *)".swp", TRUE
+@@ -2059,7 +2049,7 @@
+     fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+     if (fd >= 0)
+     {
+-	if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
++	if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ 	{
+ 	    if (STRNCMP(b0.b0_version, "VIM 3.0", 7) == 0)
+ 	    {
+@@ -2181,11 +2171,7 @@
+ #ifdef VMS
+     names[num_names] = concat_fnames(path, (char_u *)"_sw%", FALSE);
+ #else
+-# ifdef RISCOS
+-    names[num_names] = concat_fnames(path, (char_u *)"_sw#", FALSE);
+-# else
+     names[num_names] = concat_fnames(path, (char_u *)".sw?", FALSE);
+-# endif
+ #endif
+     if (names[num_names] == NULL)
+ 	goto end;
+@@ -2212,11 +2198,7 @@
+ #ifdef VMS
+     names[num_names] = modname(path, (char_u *)"_sw%", FALSE);
+ #else
+-# ifdef RISCOS
+-    names[num_names] = modname(path, (char_u *)"_sw#", FALSE);
+-# else
+     names[num_names] = modname(path, (char_u *)".sw?", FALSE);
+-# endif
+ #endif
+     if (names[num_names] == NULL)
+ 	goto end;
+@@ -2384,7 +2366,7 @@
+  * Make a copy of the line if necessary.
+  */
+ /*
+- * get a pointer to a (read-only copy of a) line
++ * Return a pointer to a (read-only copy of a) line.
+  *
+  * On failure an error message is given and IObuff is returned (to avoid
+  * having to check for error everywhere).
+@@ -2397,7 +2379,7 @@
+ }
+ 
+ /*
+- * ml_get_pos: get pointer to position 'pos'
++ * Return pointer to position "pos".
+  */
+     char_u *
+ ml_get_pos(pos)
+@@ -2407,7 +2389,7 @@
+ }
+ 
+ /*
+- * ml_get_curline: get pointer to cursor line.
++ * Return pointer to cursor line.
+  */
+     char_u *
+ ml_get_curline()
+@@ -2416,7 +2398,7 @@
+ }
+ 
+ /*
+- * ml_get_cursor: get pointer to cursor position
++ * Return pointer to cursor position.
+  */
+     char_u *
+ ml_get_cursor()
+@@ -2426,7 +2408,7 @@
+ }
+ 
+ /*
+- * get a pointer to a line in a specific buffer
++ * Return a pointer to a line in a specific buffer
+  *
+  * "will_change": if TRUE mark the buffer dirty (chars in the line will be
+  * changed)
+@@ -3159,7 +3141,7 @@
+ 	   )
+ 	    set_keep_msg((char_u *)_(no_lines_msg), 0);
+ 
+-	/* FEAT_BYTEOFF already handled in there, dont worry 'bout it below */
++	/* FEAT_BYTEOFF already handled in there, don't worry 'bout it below */
+ 	i = ml_replace((linenr_T)1, (char_u *)"", TRUE);
+ 	buf->b_ml.ml_flags |= ML_EMPTY;
+ 
+@@ -3210,7 +3192,8 @@
+ 	mf_free(mfp, hp);	/* free the data block */
+ 	buf->b_ml.ml_locked = NULL;
+ 
+-	for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0; --stack_idx)
++	for (stack_idx = buf->b_ml.ml_stack_top - 1; stack_idx >= 0;
++								  --stack_idx)
+ 	{
+ 	    buf->b_ml.ml_stack_top = 0;	    /* stack is invalid when failing */
+ 	    ip = &(buf->b_ml.ml_stack[stack_idx]);
+@@ -3961,14 +3944,9 @@
+ #else
+ 	    (buf->b_p_sn || buf->b_shortname),
+ #endif
+-#ifdef RISCOS
+-	    /* Avoid problems if fname has special chars, eg <Wimp$Scrap> */
+-	    ffname,
+-#else
+ 	    fname_res,
+-#endif
+ 	    (char_u *)
+-#if defined(VMS) || defined(RISCOS)
++#if defined(VMS)
+ 	    "_swp",
+ #else
+ 	    ".swp",
+@@ -4076,9 +4054,9 @@
+     }
+     /* Some of these messages are long to allow translation to
+      * other languages. */
+-    MSG_PUTS(_("\n(1) Another program may be editing the same file.\n    If this is the case, be careful not to end up with two\n    different instances of the same file when making changes.\n"));
+-    MSG_PUTS(_("    Quit, or continue with caution.\n"));
+-    MSG_PUTS(_("\n(2) An edit session for this file crashed.\n"));
++    MSG_PUTS(_("\n(1) Another program may be editing the same file.  If this is the case,\n    be careful not to end up with two different instances of the same\n    file when making changes."));
++    MSG_PUTS(_("  Quit, or continue with caution.\n"));
++    MSG_PUTS(_("(2) An edit session for this file crashed.\n"));
+     MSG_PUTS(_("    If this is the case, use \":recover\" or \"vim -r "));
+     msg_outtrans(buf->b_fname);
+     MSG_PUTS(_("\"\n    to recover the changes (see \":help recovery\").\n"));
+@@ -4138,6 +4116,7 @@
+  *
+  * Several names are tried to find one that does not exist
+  * Returns the name in allocated memory or NULL.
++ * When out of memory "dirp" is set to NULL.
+  *
+  * Note: If BASENAMELEN is not correct, you will get error messages for
+  *	 not being able to open the swap or undo file
+@@ -4181,7 +4160,9 @@
+      * First allocate some memory to put the directory name in.
+      */
+     dir_name = alloc((unsigned)STRLEN(*dirp) + 1);
+-    if (dir_name != NULL)
++    if (dir_name == NULL)
++	*dirp = NULL;
++    else
+ 	(void)copy_option_part(dirp, dir_name, 31000, ",");
+ 
+     /*
+@@ -4389,7 +4370,7 @@
+ 		fd = mch_open((char *)fname, O_RDONLY | O_EXTRA, 0);
+ 		if (fd >= 0)
+ 		{
+-		    if (read(fd, (char *)&b0, sizeof(b0)) == sizeof(b0))
++		    if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0))
+ 		    {
+ 			/*
+ 			 * If the swapfile has the same directory as the
+@@ -4432,14 +4413,6 @@
+ 		    }
+ 		    close(fd);
+ 		}
+-#ifdef RISCOS
+-		else
+-		    /* Can't open swap file, though it does exist.
+-		     * Assume that the user is editing two files with
+-		     * the same name in different directories. No error.
+-		     */
+-		    differ = TRUE;
+-#endif
+ 
+ 		/* give the ATTENTION message when there is an old swap file
+ 		 * for the current file, and the buffer was not recovered. */
+@@ -4521,7 +4494,7 @@
+ 				    process_still_running
+ 					? (char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Quit\n&Abort") :
+ # endif
+-					(char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL);
++					(char_u *)_("&Open Read-Only\n&Edit anyway\n&Recover\n&Delete it\n&Quit\n&Abort"), 1, NULL, FALSE);
+ 
+ # if defined(UNIX) || defined(__EMX__) || defined(VMS)
+ 			if (process_still_running && choice >= 4)
+diff -Naur vim73.orig/src/menu.c vim73/src/menu.c
+--- vim73.orig/src/menu.c	2010-07-14 14:49:01.000000000 +0000
++++ vim73/src/menu.c	2013-06-07 17:07:32.108916988 +0000
+@@ -1394,7 +1394,8 @@
+     int		idx;
+ {
+     static vimmenu_T	*menu = NULL;
+-    static char_u	tbuffer[256]; /*hack*/
++#define TBUFFER_LEN 256
++    static char_u	tbuffer[TBUFFER_LEN]; /*hack*/
+     char_u		*str;
+ #ifdef FEAT_MULTI_LANG
+     static  int		should_advance = FALSE;
+@@ -1428,11 +1429,11 @@
+ 	{
+ #ifdef FEAT_MULTI_LANG
+ 	    if (should_advance)
+-		STRCPY(tbuffer, menu->en_dname);
++		vim_strncpy(tbuffer, menu->en_dname, TBUFFER_LEN - 2);
+ 	    else
+ 	    {
+ #endif
+-		STRCPY(tbuffer, menu->dname);
++		vim_strncpy(tbuffer, menu->dname,  TBUFFER_LEN - 2);
+ #ifdef FEAT_MULTI_LANG
+ 		if (menu->en_dname == NULL)
+ 		    should_advance = TRUE;
+@@ -1512,8 +1513,8 @@
+ {
+ #ifdef FEAT_MULTI_LANG
+     if (menu->en_name != NULL
+-	    && (menu_namecmp(name,menu->en_name)
+-		|| menu_namecmp(name,menu->en_dname)))
++	    && (menu_namecmp(name, menu->en_name)
++		|| menu_namecmp(name, menu->en_dname)))
+ 	return TRUE;
+ #endif
+     return menu_namecmp(name, menu->name) || menu_namecmp(name, menu->dname);
+@@ -2342,7 +2343,7 @@
+ 
+ 	while (menu != NULL)
+ 	{
+-	    if (STRCMP(name, menu->name) == 0 || STRCMP(name, menu->dname) == 0)
++	    if (menu_name_equal(name, menu))
+ 	    {
+ 		if (menu->children == NULL)
+ 		{
+diff -Naur vim73.orig/src/message.c vim73/src/message.c
+--- vim73.orig/src/message.c	2010-08-04 18:10:02.000000000 +0000
++++ vim73/src/message.c	2013-06-07 17:07:32.138916903 +0000
+@@ -39,7 +39,6 @@
+ static void msg_screen_putchar __ARGS((int c, int attr));
+ static int  msg_check_screen __ARGS((void));
+ static void redir_write __ARGS((char_u *s, int maxlen));
+-static void verbose_write __ARGS((char_u *s, int maxlen));
+ #ifdef FEAT_CON_DIALOG
+ static char_u *msg_show_console_dialog __ARGS((char_u *message, char_u *buttons, int dfltbutton));
+ static int	confirm_msg_used = FALSE;	/* displaying confirm_msg */
+@@ -58,6 +57,9 @@
+ static struct msg_hist *last_msg_hist = NULL;
+ static int msg_hist_len = 0;
+ 
++static FILE *verbose_fd = NULL;
++static int  verbose_did_open = FALSE;
++
+ /*
+  * When writing messages to the screen, there are many different situations.
+  * A number of variables is used to remember the current state:
+@@ -83,7 +85,7 @@
+  *		    need_wait_return to be set.  This is a hack to make ":ts"
+  *		    work without an extra prompt.
+  * lines_left	    Number of lines available for messages before the
+- *		    more-prompt is to be given.
++ *		    more-prompt is to be given.  -1 when not set.
+  * need_wait_return TRUE when the hit-return prompt is needed.
+  *		    Reset: After giving the hit-return prompt, when the user
+  *		    has answered some other prompt.
+@@ -220,15 +222,16 @@
+ 	    if (enc_utf8)
+ 		/* may have up to 18 bytes per cell (6 per char, up to two
+ 		 * composing chars) */
+-		buf = alloc((room + 2) * 18);
++		len = (room + 2) * 18;
+ 	    else if (enc_dbcs == DBCS_JPNU)
+ 		/* may have up to 2 bytes per cell for euc-jp */
+-		buf = alloc((room + 2) * 2);
++		len = (room + 2) * 2;
+ 	    else
+ #endif
+-		buf = alloc(room + 2);
++		len = room + 2;
++	    buf = alloc(len);
+ 	    if (buf != NULL)
+-		trunc_string(s, buf, room);
++		trunc_string(s, buf, room, len);
+ 	}
+     }
+     return buf;
+@@ -239,10 +242,11 @@
+  * "s" and "buf" may be equal.
+  */
+     void
+-trunc_string(s, buf, room)
++trunc_string(s, buf, room, buflen)
+     char_u	*s;
+     char_u	*buf;
+     int		room;
++    int		buflen;
+ {
+     int		half;
+     int		len;
+@@ -255,7 +259,7 @@
+     len = 0;
+ 
+     /* First part: Start of the string. */
+-    for (e = 0; len < half; ++e)
++    for (e = 0; len < half && e < buflen; ++e)
+     {
+ 	if (s[e] == NUL)
+ 	{
+@@ -272,7 +276,8 @@
+ 	if (has_mbyte)
+ 	    for (n = (*mb_ptr2len)(s + e); --n > 0; )
+ 	    {
+-		++e;
++		if (++e == buflen)
++		    break;
+ 		buf[e] = s[e];
+ 	    }
+ #endif
+@@ -317,8 +322,19 @@
+     }
+ 
+     /* Set the middle and copy the last part. */
+-    mch_memmove(buf + e, "...", (size_t)3);
+-    STRMOVE(buf + e + 3, s + i);
++    if (e + 3 < buflen)
++    {
++	mch_memmove(buf + e, "...", (size_t)3);
++	len = (int)STRLEN(s + i) + 1;
++	if (len >= buflen - e - 3)
++	    len = buflen - e - 3 - 1;
++	mch_memmove(buf + e + 3, s + i, len);
++	buf[e + 3 + len - 1] = NUL;
++    }
++    else
++    {
++	buf[e - 1] = NUL;  /* make sure it is truncated */
++    }
+ }
+ 
+ /*
+@@ -569,6 +585,10 @@
+     int		severe;
+ #endif
+ 
++    /* Skip this if not giving error messages at the moment. */
++    if (emsg_not_now())
++	return TRUE;
++
+     called_emsg = TRUE;
+     ex_exitval = 1;
+ 
+@@ -581,10 +601,6 @@
+     emsg_severe = FALSE;
+ #endif
+ 
+-    /* Skip this if not giving error messages at the moment. */
+-    if (emsg_not_now())
+-	return TRUE;
+-
+     if (!emsg_off || vim_strchr(p_debug, 't') != NULL)
+     {
+ #ifdef FEAT_EVAL
+@@ -853,6 +869,7 @@
+     cmdline_row = msg_row;
+     msg_col = 0;
+     msg_clr_eos();
++    lines_left = -1;
+ }
+ #endif
+ 
+@@ -879,16 +896,17 @@
+     if (msg_silent != 0)
+ 	return;
+ 
+-/*
+- * With the global command (and some others) we only need one return at the
+- * end. Adjust cmdline_row to avoid the next message overwriting the last one.
+- * When inside vgetc(), we can't wait for a typed character at all.
+- */
++    /*
++     * When inside vgetc(), we can't wait for a typed character at all.
++     * With the global command (and some others) we only need one return at
++     * the end. Adjust cmdline_row to avoid the next message overwriting the
++     * last one.
++     */
+     if (vgetc_busy > 0)
+ 	return;
++    need_wait_return = TRUE;
+     if (no_wait_return)
+     {
+-	need_wait_return = TRUE;
+ 	if (!exmode_active)
+ 	    cmdline_row = msg_row;
+ 	return;
+@@ -921,6 +939,12 @@
+ #ifdef USE_ON_FLY_SCROLL
+ 	dont_scroll = TRUE;		/* disallow scrolling here */
+ #endif
++	/* Avoid the sequence that the user types ":" at the hit-return prompt
++	 * to start an Ex command, but the file-changed dialog gets in the
++	 * way. */
++	if (need_check_timestamps)
++	    check_timestamps(FALSE);
++
+ 	hit_return_msg();
+ 
+ 	do
+@@ -958,10 +982,22 @@
+ 	     */
+ 	    if (p_more && !p_cp)
+ 	    {
+-		if (c == 'b' || c == 'k' || c == 'u' || c == 'g' || c == K_UP)
++		if (c == 'b' || c == 'k' || c == 'u' || c == 'g'
++						|| c == K_UP || c == K_PAGEUP)
+ 		{
+-		    /* scroll back to show older messages */
+-		    do_more_prompt(c);
++		    if (msg_scrolled > Rows)
++			/* scroll back to show older messages */
++			do_more_prompt(c);
++		    else
++		    {
++			msg_didout = FALSE;
++			c = K_IGNORE;
++			msg_col =
++#ifdef FEAT_RIGHTLEFT
++			    cmdmsg_rl ? Columns - 1 :
++#endif
++			    0;
++		    }
+ 		    if (quit_more)
+ 		    {
+ 			c = CAR;		/* just pretend CR was hit */
+@@ -975,7 +1011,8 @@
+ 		    }
+ 		}
+ 		else if (msg_scrolled > Rows - 2
+-			 && (c == 'j' || c == K_DOWN || c == 'd' || c == 'f'))
++			 && (c == 'j' || c == 'd' || c == 'f'
++					   || c == K_DOWN || c == K_PAGEDOWN))
+ 		    c = K_IGNORE;
+ 	    }
+ 	} while ((had_got_int && c == Ctrl_C)
+@@ -1477,6 +1514,27 @@
+     return retval;
+ }
+ 
++#if defined(FEAT_EVAL) || defined(PROTO)
++/*
++ * Return the lhs or rhs of a mapping, with the key codes turned into printable
++ * strings, in an allocated string.
++ */
++    char_u *
++str2special_save(str, is_lhs)
++    char_u  *str;
++    int	    is_lhs;  /* TRUE for lhs, FALSE for rhs */
++{
++    garray_T	ga;
++    char_u	*p = str;
++
++    ga_init2(&ga, 1, 40);
++    while (*p != NUL)
++	ga_concat(&ga, str2special(&p, is_lhs));
++    ga_append(&ga, NUL);
++    return (char_u *)ga.ga_data;
++}
++#endif
++
+ /*
+  * Return the printable string for the key codes at "*sp".
+  * Used for translating the lhs or rhs of a mapping to printable chars.
+@@ -1525,16 +1583,27 @@
+ 	if (IS_SPECIAL(c) || modifiers)	/* special key */
+ 	    special = TRUE;
+     }
+-    *sp = str + 1;
+ 
+ #ifdef FEAT_MBYTE
+-    /* For multi-byte characters check for an illegal byte. */
+-    if (has_mbyte && MB_BYTE2LEN(*str) > (*mb_ptr2len)(str))
++    if (has_mbyte && !IS_SPECIAL(c))
+     {
+-	transchar_nonprint(buf, c);
+-	return buf;
++	int len = (*mb_ptr2len)(str);
++
++	/* For multi-byte characters check for an illegal byte. */
++	if (has_mbyte && MB_BYTE2LEN(*str) > len)
++	{
++	    transchar_nonprint(buf, c);
++	    *sp = str + 1;
++	    return buf;
++	}
++	/* Since 'special' is TRUE the multi-byte character 'c' will be
++	 * processed by get_special_key_name() */
++	c = (*mb_ptr2char)(str);
++	*sp = str + len;
+     }
++    else
+ #endif
++	*sp = str + 1;
+ 
+     /* Make unprintable characters in <> form, also <M-Space> and <Tab>.
+      * Use <Space> only for lhs of a mapping. */
+@@ -1616,8 +1685,16 @@
+ 	else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1)
+ 	{
+ 	    col += (*mb_ptr2cells)(s);
+-	    mch_memmove(buf, s, (size_t)l);
+-	    buf[l] = NUL;
++	    if (lcs_nbsp != NUL && list && mb_ptr2char(s) == 160)
++	    {
++		mb_char2bytes(lcs_nbsp, buf);
++		buf[(*mb_ptr2len)(buf)] = NUL;
++	    }
++	    else
++	    {
++		mch_memmove(buf, s, (size_t)l);
++		buf[l] = NUL;
++	    }
+ 	    msg_puts(buf);
+ 	    s += l;
+ 	    continue;
+@@ -1643,6 +1720,11 @@
+ 		    attr = hl_attr(HLF_8);
+ 		}
+ 	    }
++	    else if (c == 160 && list && lcs_nbsp != NUL)
++	    {
++		c = lcs_nbsp;
++		attr = hl_attr(HLF_8);
++	    }
+ 	    else if (c == NUL && list && lcs_eol != NUL)
+ 	    {
+ 		p_extra = (char_u *)"";
+@@ -2285,6 +2367,16 @@
+ }
+ 
+ /*
++ * Mark the last message chunk as finishing the line.
++ */
++    void
++msg_sb_eol()
++{
++    if (last_msgchunk != NULL)
++	last_msgchunk->sb_eol = TRUE;
++}
++
++/*
+  * Display a screen line from previously displayed text at row "row".
+  * Returns a pointer to the text for the next line (can be NULL).
+  */
+@@ -2438,7 +2530,7 @@
+ #ifdef FEAT_CON_DIALOG
+     int		retval = FALSE;
+ #endif
+-    int		scroll;
++    int		toscroll;
+     msgchunk_T	*mp_last = NULL;
+     msgchunk_T	*mp;
+     int		i;
+@@ -2489,49 +2581,49 @@
+ 	}
+ #endif
+ 
+-	scroll = 0;
++	toscroll = 0;
+ 	switch (c)
+ 	{
+ 	case BS:		/* scroll one line back */
+ 	case K_BS:
+ 	case 'k':
+ 	case K_UP:
+-	    scroll = -1;
++	    toscroll = -1;
+ 	    break;
+ 
+ 	case CAR:		/* one extra line */
+ 	case NL:
+ 	case 'j':
+ 	case K_DOWN:
+-	    scroll = 1;
++	    toscroll = 1;
+ 	    break;
+ 
+ 	case 'u':		/* Up half a page */
+-	    scroll = -(Rows / 2);
++	    toscroll = -(Rows / 2);
+ 	    break;
+ 
+ 	case 'd':		/* Down half a page */
+-	    scroll = Rows / 2;
++	    toscroll = Rows / 2;
+ 	    break;
+ 
+ 	case 'b':		/* one page back */
+ 	case K_PAGEUP:
+-	    scroll = -(Rows - 1);
++	    toscroll = -(Rows - 1);
+ 	    break;
+ 
+ 	case ' ':		/* one extra page */
+ 	case 'f':
+ 	case K_PAGEDOWN:
+ 	case K_LEFTMOUSE:
+-	    scroll = Rows - 1;
++	    toscroll = Rows - 1;
+ 	    break;
+ 
+ 	case 'g':		/* all the way back to the start */
+-	    scroll = -999999;
++	    toscroll = -999999;
+ 	    break;
+ 
+ 	case 'G':		/* all the way to the end */
+-	    scroll = 999999;
++	    toscroll = 999999;
+ 	    lines_left = 999999;
+ 	    break;
+ 
+@@ -2584,9 +2676,9 @@
+ 	    continue;
+ 	}
+ 
+-	if (scroll != 0)
++	if (toscroll != 0)
+ 	{
+-	    if (scroll < 0)
++	    if (toscroll < 0)
+ 	    {
+ 		/* go to start of last line */
+ 		if (mp_last == NULL)
+@@ -2604,7 +2696,7 @@
+ 		if (mp != NULL && mp->sb_prev != NULL)
+ 		{
+ 		    /* Find line to be displayed at top. */
+-		    for (i = 0; i > scroll; --i)
++		    for (i = 0; i > toscroll; --i)
+ 		    {
+ 			if (mp == NULL || mp->sb_prev == NULL)
+ 			    break;
+@@ -2615,7 +2707,7 @@
+ 			    mp_last = msg_sb_start(mp_last->sb_prev);
+ 		    }
+ 
+-		    if (scroll == -1 && screen_ins_lines(0, 0, 1,
++		    if (toscroll == -1 && screen_ins_lines(0, 0, 1,
+ 						       (int)Rows, NULL) == OK)
+ 		    {
+ 			/* display line at top */
+@@ -2631,13 +2723,13 @@
+ 			    ++msg_scrolled;
+ 			}
+ 		    }
+-		    scroll = 0;
++		    toscroll = 0;
+ 		}
+ 	    }
+ 	    else
+ 	    {
+ 		/* First display any text that we scrolled back. */
+-		while (scroll > 0 && mp_last != NULL)
++		while (toscroll > 0 && mp_last != NULL)
+ 		{
+ 		    /* scroll up, display line at bottom */
+ 		    msg_scroll_up();
+@@ -2645,11 +2737,11 @@
+ 		    screen_fill((int)Rows - 2, (int)Rows - 1, 0,
+ 						   (int)Columns, ' ', ' ', 0);
+ 		    mp_last = disp_sb_line((int)Rows - 2, mp_last);
+-		    --scroll;
++		    --toscroll;
+ 		}
+ 	    }
+ 
+-	    if (scroll <= 0)
++	    if (toscroll <= 0)
+ 	    {
+ 		/* displayed the requested text, more prompt again */
+ 		screen_fill((int)Rows - 1, (int)Rows, 0,
+@@ -2659,7 +2751,7 @@
+ 	    }
+ 
+ 	    /* display more text, return to caller */
+-	    lines_left = scroll;
++	    lines_left = toscroll;
+ 	}
+ 
+ 	break;
+@@ -3019,12 +3111,9 @@
+     if (redir_off)
+ 	return;
+ 
+-    /*
+-     * If 'verbosefile' is set write message in that file.
+-     * Must come before the rest because of updating "msg_col".
+-     */
+-    if (*p_vfile != NUL)
+-	verbose_write(s, maxlen);
++    /* If 'verbosefile' is set prepare for writing in that file. */
++    if (*p_vfile != NUL && verbose_fd == NULL)
++	verbose_open();
+ 
+     if (redirecting())
+     {
+@@ -3038,9 +3127,12 @@
+ 		    write_reg_contents(redir_reg, (char_u *)" ", -1, TRUE);
+ 		else if (redir_vname)
+ 		    var_redir_str((char_u *)" ", -1);
+-		else if (redir_fd)
++		else
+ #endif
++		    if (redir_fd != NULL)
+ 		    fputs(" ", redir_fd);
++		if (verbose_fd != NULL)
++		    fputs(" ", verbose_fd);
+ 		++cur_col;
+ 	    }
+ 	}
+@@ -3052,13 +3144,16 @@
+ 	    var_redir_str(s, maxlen);
+ #endif
+ 
+-	/* Adjust the current column */
++	/* Write and adjust the current column. */
+ 	while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+ 	{
+ #ifdef FEAT_EVAL
+-	    if (!redir_reg && !redir_vname && redir_fd != NULL)
++	    if (!redir_reg && !redir_vname)
+ #endif
+-		putc(*s, redir_fd);
++		if (redir_fd != NULL)
++		    putc(*s, redir_fd);
++	    if (verbose_fd != NULL)
++		putc(*s, verbose_fd);
+ 	    if (*s == '\r' || *s == '\n')
+ 		cur_col = 0;
+ 	    else if (*s == '\t')
+@@ -3076,7 +3171,7 @@
+     int
+ redirecting()
+ {
+-    return redir_fd != NULL
++    return redir_fd != NULL || *p_vfile != NUL
+ #ifdef FEAT_EVAL
+ 			  || redir_reg || redir_vname
+ #endif
+@@ -3134,9 +3229,6 @@
+ 	cmdline_row = msg_row;
+ }
+ 
+-static FILE *verbose_fd = NULL;
+-static int  verbose_did_open = FALSE;
+-
+ /*
+  * Called when 'verbosefile' is set: stop writing to the file.
+  */
+@@ -3174,49 +3266,6 @@
+ }
+ 
+ /*
+- * Write a string to 'verbosefile'.
+- * When "maxlen" is -1 write the whole string, otherwise up to "maxlen" bytes.
+- */
+-    static void
+-verbose_write(str, maxlen)
+-    char_u	*str;
+-    int		maxlen;
+-{
+-    char_u	*s = str;
+-    static int	cur_col = 0;
+-
+-    /* Open the file when called the first time. */
+-    if (verbose_fd == NULL)
+-	verbose_open();
+-
+-    if (verbose_fd != NULL)
+-    {
+-	/* If the string doesn't start with CR or NL, go to msg_col */
+-	if (*s != '\n' && *s != '\r')
+-	{
+-	    while (cur_col < msg_col)
+-	    {
+-		fputs(" ", verbose_fd);
+-		++cur_col;
+-	    }
+-	}
+-
+-	/* Adjust the current column */
+-	while (*s != NUL && (maxlen < 0 || (int)(s - str) < maxlen))
+-	{
+-	    putc(*s, verbose_fd);
+-	    if (*s == '\r' || *s == '\n')
+-		cur_col = 0;
+-	    else if (*s == '\t')
+-		cur_col += (8 - cur_col % 8);
+-	    else
+-		++cur_col;
+-	    ++s;
+-	}
+-    }
+-}
+-
+-/*
+  * Give a warning message (for searching).
+  * Use 'w' highlighting and may repeat the message after redrawing
+  */
+@@ -3294,7 +3343,7 @@
+  * different letter.
+  */
+     int
+-do_dialog(type, title, message, buttons, dfltbutton, textfield)
++do_dialog(type, title, message, buttons, dfltbutton, textfield, ex_cmd)
+     int		type UNUSED;
+     char_u	*title UNUSED;
+     char_u	*message;
+@@ -3302,6 +3351,8 @@
+     int		dfltbutton;
+     char_u	*textfield UNUSED;	/* IObuff for inputdialog(), NULL
+ 					   otherwise */
++    int		ex_cmd;	    /* when TRUE pressing : accepts default and starts
++			       Ex command */
+ {
+     int		oldState;
+     int		retval = 0;
+@@ -3320,7 +3371,7 @@
+     if (gui.in_use && vim_strchr(p_go, GO_CONDIALOG) == NULL)
+     {
+ 	c = gui_mch_dialog(type, title, message, buttons, dfltbutton,
+-								   textfield);
++							   textfield, ex_cmd);
+ 	/* avoid a hit-enter prompt without clearing the cmdline */
+ 	need_wait_return = FALSE;
+ 	emsg_on_display = FALSE;
+@@ -3367,6 +3418,13 @@
+ 	    default:		/* Could be a hotkey? */
+ 		if (c < 0)	/* special keys are ignored here */
+ 		    continue;
++		if (c == ':' && ex_cmd)
++		{
++		    retval = dfltbutton;
++		    ins_char_typebuf(':');
++		    break;
++		}
++
+ 		/* Make the character lowercase, as chars in "hotkeys" are. */
+ 		c = MB_TOLOWER(c);
+ 		retval = 1;
+@@ -3640,7 +3698,7 @@
+     if (do_dialog(type,
+ 		title == NULL ? (char_u *)_("Question") : title,
+ 		message,
+-		(char_u *)_("&Yes\n&No"), dflt, NULL) == 1)
++		(char_u *)_("&Yes\n&No"), dflt, NULL, FALSE) == 1)
+ 	return VIM_YES;
+     return VIM_NO;
+ }
+@@ -3655,7 +3713,7 @@
+     switch (do_dialog(type,
+ 		title == NULL ? (char_u *)_("Question") : title,
+ 		message,
+-		(char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL))
++		(char_u *)_("&Yes\n&No\n&Cancel"), dflt, NULL, FALSE))
+     {
+ 	case 1: return VIM_YES;
+ 	case 2: return VIM_NO;
+@@ -3674,7 +3732,7 @@
+ 		title == NULL ? (char_u *)"Question" : title,
+ 		message,
+ 		(char_u *)_("&Yes\n&No\nSave &All\n&Discard All\n&Cancel"),
+-								  dflt, NULL))
++							   dflt, NULL, FALSE))
+     {
+ 	case 1: return VIM_YES;
+ 	case 2: return VIM_NO;
+@@ -4251,6 +4309,7 @@
+ 	    case '%':
+ 	    case 'c':
+ 	    case 's':
++	    case 'S':
+ 		length_modifier = '\0';
+ 		str_arg_l = 1;
+ 		switch (fmt_spec)
+@@ -4279,6 +4338,7 @@
+ 		    }
+ 
+ 		case 's':
++		case 'S':
+ 		    str_arg =
+ #ifndef HAVE_STDARG_H
+ 				(char *)get_a_arg(arg_idx);
+@@ -4315,6 +4375,24 @@
+ 			str_arg_l = (q == NULL) ? precision
+ 						      : (size_t)(q - str_arg);
+ 		    }
++#ifdef FEAT_MBYTE
++		    if (fmt_spec == 'S')
++		    {
++			if (min_field_width != 0)
++			    min_field_width += STRLEN(str_arg)
++				     - mb_string2cells((char_u *)str_arg, -1);
++			if (precision)
++			{
++			    char_u *p1 = (char_u *)str_arg;
++			    size_t i;
++
++			    for (i = 0; i < precision && *p1; i++)
++				p1 += mb_ptr2len(p1);
++
++			    str_arg_l = precision = p1 - (char_u *)str_arg;
++			}
++		    }
++#endif
+ 		    break;
+ 
+ 		default:
+diff -Naur vim73.orig/src/misc1.c vim73/src/misc1.c
+--- vim73.orig/src/misc1.c	2010-08-15 11:24:05.000000000 +0000
++++ vim73/src/misc1.c	2013-06-07 17:07:32.162250169 +0000
+@@ -18,6 +18,11 @@
+ static char_u *remove_tail __ARGS((char_u *p, char_u *pend, char_u *name));
+ static int copy_indent __ARGS((int size, char_u	*src));
+ 
++/* All user names (for ~user completion as done by shell). */
++#if defined(FEAT_CMDL_COMPL) || defined(PROTO)
++static garray_T	ga_users;
++#endif
++
+ /*
+  * Count the size (in window cells) of the indent in the current line.
+  */
+@@ -363,7 +368,7 @@
+ 
+ 	/* Fill to next tabstop with a tab, if possible */
+ 	tab_pad = (int)curbuf->b_p_ts - (ind_done % (int)curbuf->b_p_ts);
+-	if (todo >= tab_pad)
++	if (todo >= tab_pad && !curbuf->b_p_et)
+ 	{
+ 	    todo -= tab_pad;
+ 	    ++ind_len;
+@@ -372,7 +377,7 @@
+ 	}
+ 
+ 	/* Add tabs required for indent */
+-	while (todo >= (int)curbuf->b_p_ts)
++	while (todo >= (int)curbuf->b_p_ts && !curbuf->b_p_et)
+ 	{
+ 	    todo -= (int)curbuf->b_p_ts;
+ 	    ++ind_len;
+@@ -423,27 +428,36 @@
+ {
+     colnr_T	col;
+     pos_T	pos;
+-    regmmatch_T	regmatch;
++
++    regmatch_T	regmatch;
++    int		lead_len = 0;	/* length of comment leader */
+ 
+     if (lnum > curbuf->b_ml.ml_line_count)
+ 	return -1;
+     pos.lnum = 0;
++
++#ifdef FEAT_COMMENTS
++    /* In format_lines() (i.e. not insert mode), fo+=q is needed too...  */
++    if ((State & INSERT) || has_format_option(FO_Q_COMS))
++	lead_len = get_leader_len(ml_get(lnum), NULL, FALSE, TRUE);
++#endif
+     regmatch.regprog = vim_regcomp(curbuf->b_p_flp, RE_MAGIC);
+     if (regmatch.regprog != NULL)
+     {
+-	regmatch.rmm_ic = FALSE;
+-	regmatch.rmm_maxcol = 0;
+-	if (vim_regexec_multi(&regmatch, curwin, curbuf, lnum,
+-							    (colnr_T)0, NULL))
++	regmatch.rm_ic = FALSE;
++
++	/* vim_regexec() expects a pointer to a line.  This lets us
++	 * start matching for the flp beyond any comment leader...  */
++	if (vim_regexec(&regmatch, ml_get(lnum) + lead_len, (colnr_T)0))
+ 	{
+-	    pos.lnum = regmatch.endpos[0].lnum + lnum;
+-	    pos.col = regmatch.endpos[0].col;
++	    pos.lnum = lnum;
++	    pos.col = (colnr_T)(*regmatch.endp - ml_get(lnum));
+ #ifdef FEAT_VIRTUALEDIT
+ 	    pos.coladd = 0;
+ #endif
+ 	}
+-	vim_free(regmatch.regprog);
+     }
++    vim_free(regmatch.regprog);
+ 
+     if (pos.lnum == 0 || *ml_get_pos(&pos) == NUL)
+ 	return -1;
+@@ -502,14 +516,18 @@
+  *	    OPENLINE_DO_COM	format comments
+  *	    OPENLINE_KEEPTRAIL	keep trailing spaces
+  *	    OPENLINE_MARKFIX	adjust mark positions after the line break
++ *	    OPENLINE_COM_LIST	format comments with list or 2nd line indent
++ *
++ * "second_line_indent": indent for after ^^D in Insert mode or if flag
++ *			  OPENLINE_COM_LIST
+  *
+  * Return TRUE for success, FALSE for failure
+  */
+     int
+-open_line(dir, flags, old_indent)
++open_line(dir, flags, second_line_indent)
+     int		dir;		/* FORWARD or BACKWARD */
+     int		flags;
+-    int		old_indent;	/* indent for after ^^D in Insert mode */
++    int		second_line_indent;
+ {
+     char_u	*saved_line;		/* copy of the original line */
+     char_u	*next_line = NULL;	/* copy of the next line */
+@@ -650,8 +668,8 @@
+ 	 * count white space on current line
+ 	 */
+ 	newindent = get_indent_str(saved_line, (int)curbuf->b_p_ts);
+-	if (newindent == 0)
+-	    newindent = old_indent;	/* for ^^D command in insert mode */
++	if (newindent == 0 && !(flags & OPENLINE_COM_LIST))
++	    newindent = second_line_indent; /* for ^^D command in insert mode */
+ 
+ #ifdef FEAT_SMARTINDENT
+ 	/*
+@@ -671,7 +689,7 @@
+ 	    ptr = saved_line;
+ # ifdef FEAT_COMMENTS
+ 	    if (flags & OPENLINE_DO_COM)
+-		lead_len = get_leader_len(ptr, NULL, FALSE);
++		lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
+ 	    else
+ 		lead_len = 0;
+ # endif
+@@ -693,7 +711,7 @@
+ 		}
+ # ifdef FEAT_COMMENTS
+ 		if (flags & OPENLINE_DO_COM)
+-		    lead_len = get_leader_len(ptr, NULL, FALSE);
++		    lead_len = get_leader_len(ptr, NULL, FALSE, TRUE);
+ 		else
+ 		    lead_len = 0;
+ 		if (lead_len > 0)
+@@ -836,7 +854,7 @@
+      */
+     end_comment_pending = NUL;
+     if (flags & OPENLINE_DO_COM)
+-	lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD);
++	lead_len = get_leader_len(saved_line, &lead_flags, dir == BACKWARD, TRUE);
+     else
+ 	lead_len = 0;
+     if (lead_len > 0)
+@@ -1007,9 +1025,9 @@
+ 	}
+ 	if (lead_len)
+ 	{
+-	    /* allocate buffer (may concatenate p_exta later) */
+-	    leader = alloc(lead_len + lead_repl_len + extra_space +
+-							      extra_len + 1);
++	    /* allocate buffer (may concatenate p_extra later) */
++	    leader = alloc(lead_len + lead_repl_len + extra_space + extra_len
++		     + (second_line_indent > 0 ? second_line_indent : 0) + 1);
+ 	    allocated = leader;		    /* remember to free it later */
+ 
+ 	    if (leader == NULL)
+@@ -1304,6 +1322,22 @@
+     /* concatenate leader and p_extra, if there is a leader */
+     if (lead_len)
+     {
++	if (flags & OPENLINE_COM_LIST && second_line_indent > 0)
++	{
++	    int i;
++	    int padding = second_line_indent
++					  - (newindent + (int)STRLEN(leader));
++
++	    /* Here whitespace is inserted after the comment char.
++	     * Below, set_indent(newindent, SIN_INSERT) will insert the
++	     * whitespace needed before the comment char. */
++	    for (i = 0; i < padding; i++)
++	    {
++		STRCAT(leader, " ");
++		less_cols--;
++		newcol++;
++	    }
++	}
+ 	STRCAT(leader, p_extra);
+ 	p_extra = leader;
+ 	did_ai = TRUE;	    /* So truncating blanks works with comments */
+@@ -1360,9 +1394,11 @@
+ #ifdef FEAT_SMARTINDENT
+ 	if (did_si)
+ 	{
++	    int        sw = (int)get_sw_value();
++
+ 	    if (p_sr)
+-		newindent -= newindent % (int)curbuf->b_p_sw;
+-	    newindent += (int)curbuf->b_p_sw;
++		newindent -= newindent % sw;
++	    newindent += sw;
+ 	}
+ #endif
+ 	/* Copy the indent */
+@@ -1548,28 +1584,35 @@
+  * When "flags" is not NULL, it is set to point to the flags of the recognized
+  * comment leader.
+  * "backward" must be true for the "O" command.
++ * If "include_space" is set, include trailing whitespace while calculating the
++ * length.
+  */
+     int
+-get_leader_len(line, flags, backward)
++get_leader_len(line, flags, backward, include_space)
+     char_u	*line;
+     char_u	**flags;
+     int		backward;
++    int		include_space;
+ {
+     int		i, j;
++    int		result;
+     int		got_com = FALSE;
+     int		found_one;
+     char_u	part_buf[COM_MAX_LEN];	/* buffer for one option part */
+     char_u	*string;		/* pointer to comment string */
+     char_u	*list;
++    int		middle_match_len = 0;
++    char_u	*prev_list;
++    char_u	*saved_flags = NULL;
+ 
+-    i = 0;
++    result = i = 0;
+     while (vim_iswhite(line[i]))    /* leading white space is ignored */
+ 	++i;
+ 
+     /*
+      * Repeat to match several nested comment strings.
+      */
+-    while (line[i])
++    while (line[i] != NUL)
+     {
+ 	/*
+ 	 * scan through the 'comments' option for a match
+@@ -1577,29 +1620,161 @@
+ 	found_one = FALSE;
+ 	for (list = curbuf->b_p_com; *list; )
+ 	{
+-	    /*
+-	     * Get one option part into part_buf[].  Advance list to next one.
+-	     * put string at start of string.
+-	     */
+-	    if (!got_com && flags != NULL)  /* remember where flags started */
+-		*flags = list;
++	    /* Get one option part into part_buf[].  Advance "list" to next
++	     * one.  Put "string" at start of string.  */
++	    if (!got_com && flags != NULL)
++		*flags = list;	    /* remember where flags started */
++	    prev_list = list;
+ 	    (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
+ 	    string = vim_strchr(part_buf, ':');
+ 	    if (string == NULL)	    /* missing ':', ignore this part */
+ 		continue;
+ 	    *string++ = NUL;	    /* isolate flags from string */
+ 
+-	    /*
+-	     * When already found a nested comment, only accept further
+-	     * nested comments.
+-	     */
++	    /* If we found a middle match previously, use that match when this
++	     * is not a middle or end. */
++	    if (middle_match_len != 0
++		    && vim_strchr(part_buf, COM_MIDDLE) == NULL
++		    && vim_strchr(part_buf, COM_END) == NULL)
++		break;
++
++	    /* When we already found a nested comment, only accept further
++	     * nested comments. */
+ 	    if (got_com && vim_strchr(part_buf, COM_NEST) == NULL)
+ 		continue;
+ 
+-	    /* When 'O' flag used don't use for "O" command */
++	    /* When 'O' flag present and using "O" command skip this one. */
+ 	    if (backward && vim_strchr(part_buf, COM_NOBACK) != NULL)
+ 		continue;
+ 
++	    /* Line contents and string must match.
++	     * When string starts with white space, must have some white space
++	     * (but the amount does not need to match, there might be a mix of
++	     * TABs and spaces). */
++	    if (vim_iswhite(string[0]))
++	    {
++		if (i == 0 || !vim_iswhite(line[i - 1]))
++		    continue;  /* missing white space */
++		while (vim_iswhite(string[0]))
++		    ++string;
++	    }
++	    for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
++		;
++	    if (string[j] != NUL)
++		continue;  /* string doesn't match */
++
++	    /* When 'b' flag used, there must be white space or an
++	     * end-of-line after the string in the line. */
++	    if (vim_strchr(part_buf, COM_BLANK) != NULL
++			   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
++		continue;
++
++	    /* We have found a match, stop searching unless this is a middle
++	     * comment. The middle comment can be a substring of the end
++	     * comment in which case it's better to return the length of the
++	     * end comment and its flags.  Thus we keep searching with middle
++	     * and end matches and use an end match if it matches better. */
++	    if (vim_strchr(part_buf, COM_MIDDLE) != NULL)
++	    {
++		if (middle_match_len == 0)
++		{
++		    middle_match_len = j;
++		    saved_flags = prev_list;
++		}
++		continue;
++	    }
++	    if (middle_match_len != 0 && j > middle_match_len)
++		/* Use this match instead of the middle match, since it's a
++		 * longer thus better match. */
++		middle_match_len = 0;
++
++	    if (middle_match_len == 0)
++		i += j;
++	    found_one = TRUE;
++	    break;
++	}
++
++	if (middle_match_len != 0)
++	{
++	    /* Use the previously found middle match after failing to find a
++	     * match with an end. */
++	    if (!got_com && flags != NULL)
++		*flags = saved_flags;
++	    i += middle_match_len;
++	    found_one = TRUE;
++	}
++
++	/* No match found, stop scanning. */
++	if (!found_one)
++	    break;
++
++	result = i;
++
++	/* Include any trailing white space. */
++	while (vim_iswhite(line[i]))
++	    ++i;
++
++	if (include_space)
++	    result = i;
++
++	/* If this comment doesn't nest, stop here. */
++	got_com = TRUE;
++	if (vim_strchr(part_buf, COM_NEST) == NULL)
++	    break;
++    }
++    return result;
++}
++
++/*
++ * Return the offset at which the last comment in line starts. If there is no
++ * comment in the whole line, -1 is returned.
++ *
++ * When "flags" is not null, it is set to point to the flags describing the
++ * recognized comment leader.
++ */
++    int
++get_last_leader_offset(line, flags)
++    char_u	*line;
++    char_u	**flags;
++{
++    int		result = -1;
++    int		i, j;
++    int		lower_check_bound = 0;
++    char_u	*string;
++    char_u	*com_leader;
++    char_u	*com_flags;
++    char_u	*list;
++    int		found_one;
++    char_u	part_buf[COM_MAX_LEN];	/* buffer for one option part */
++
++    /*
++     * Repeat to match several nested comment strings.
++     */
++    i = (int)STRLEN(line);
++    while (--i >= lower_check_bound)
++    {
++	/*
++	 * scan through the 'comments' option for a match
++	 */
++	found_one = FALSE;
++	for (list = curbuf->b_p_com; *list; )
++	{
++	    char_u *flags_save = list;
++
++	    /*
++	     * Get one option part into part_buf[].  Advance list to next one.
++	     * put string at start of string.
++	     */
++	    (void)copy_option_part(&list, part_buf, COM_MAX_LEN, ",");
++	    string = vim_strchr(part_buf, ':');
++	    if (string == NULL)	/* If everything is fine, this cannot actually
++				 * happen. */
++	    {
++		continue;
++	    }
++	    *string++ = NUL;	/* Isolate flags from string. */
++	    com_leader = string;
++
+ 	    /*
+ 	     * Line contents and string must match.
+ 	     * When string starts with white space, must have some white space
+@@ -1614,7 +1789,7 @@
+ 		    ++string;
+ 	    }
+ 	    for (j = 0; string[j] != NUL && string[j] == line[i + j]; ++j)
+-		;
++		/* do nothing */;
+ 	    if (string[j] != NUL)
+ 		continue;
+ 
+@@ -1623,37 +1798,77 @@
+ 	     * end-of-line after the string in the line.
+ 	     */
+ 	    if (vim_strchr(part_buf, COM_BLANK) != NULL
+-			   && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
++		    && !vim_iswhite(line[i + j]) && line[i + j] != NUL)
++	    {
+ 		continue;
++	    }
+ 
+ 	    /*
+ 	     * We have found a match, stop searching.
+ 	     */
+-	    i += j;
+-	    got_com = TRUE;
+ 	    found_one = TRUE;
++
++	    if (flags)
++		*flags = flags_save;
++	    com_flags = flags_save;
++
+ 	    break;
+ 	}
+ 
+-	/*
+-	 * No match found, stop scanning.
+-	 */
+-	if (!found_one)
+-	    break;
++	if (found_one)
++	{
++	    char_u  part_buf2[COM_MAX_LEN];	/* buffer for one option part */
++	    int     len1, len2, off;
+ 
+-	/*
+-	 * Include any trailing white space.
+-	 */
+-	while (vim_iswhite(line[i]))
+-	    ++i;
++	    result = i;
++	    /*
++	     * If this comment nests, continue searching.
++	     */
++	    if (vim_strchr(part_buf, COM_NEST) != NULL)
++		continue;
+ 
+-	/*
+-	 * If this comment doesn't nest, stop here.
+-	 */
+-	if (vim_strchr(part_buf, COM_NEST) == NULL)
+-	    break;
++	    lower_check_bound = i;
++
++	    /* Let's verify whether the comment leader found is a substring
++	     * of other comment leaders. If it is, let's adjust the
++	     * lower_check_bound so that we make sure that we have determined
++	     * the comment leader correctly.
++	     */
++
++	    while (vim_iswhite(*com_leader))
++		++com_leader;
++	    len1 = (int)STRLEN(com_leader);
++
++	    for (list = curbuf->b_p_com; *list; )
++	    {
++		char_u *flags_save = list;
++
++		(void)copy_option_part(&list, part_buf2, COM_MAX_LEN, ",");
++		if (flags_save == com_flags)
++		    continue;
++		string = vim_strchr(part_buf2, ':');
++		++string;
++		while (vim_iswhite(*string))
++		    ++string;
++		len2 = (int)STRLEN(string);
++		if (len2 == 0)
++		    continue;
++
++		/* Now we have to verify whether string ends with a substring
++		 * beginning the com_leader. */
++		for (off = (len2 > i ? i : len2); off > 0 && off + len1 > len2;)
++		{
++		    --off;
++		    if (!STRNCMP(string + off, com_leader, len2 - off))
++		    {
++			if (i - off < lower_check_bound)
++			    lower_check_bound = i - off;
++		    }
++		}
++	    }
++	}
+     }
+-    return (got_com ? i : 0);
++    return result;
+ }
+ #endif
+ 
+@@ -1907,7 +2122,7 @@
+     int		c;
+ {
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+-    char_u	buf[MB_MAXBYTES];
++    char_u	buf[MB_MAXBYTES + 1];
+     int		n;
+ 
+     n = (*mb_char2bytes)(c, buf);
+@@ -2073,14 +2288,18 @@
+      */
+     if (p_sm && (State & INSERT)
+ 	    && msg_silent == 0
+-#ifdef FEAT_MBYTE
+-	    && charlen == 1
+-#endif
+ #ifdef FEAT_INS_EXPAND
+ 	    && !ins_compl_active()
+ #endif
+        )
+-	showmatch(c);
++    {
++#ifdef FEAT_MBYTE
++	if (has_mbyte)
++	    showmatch(mb_ptr2char(buf));
++	else
++#endif
++	    showmatch(c);
++    }
+ 
+ #ifdef FEAT_RIGHTLEFT
+     if (!p_ri || (State & REPLACE_FLAG))
+@@ -2919,7 +3138,7 @@
+     buf_T	*buf;
+     int		ff;	/* also reset 'fileformat' */
+ {
+-    if (buf->b_changed || (ff && file_ff_differs(buf)))
++    if (buf->b_changed || (ff && file_ff_differs(buf, FALSE)))
+     {
+ 	buf->b_changed = 0;
+ 	ml_setflags(buf);
+@@ -3069,6 +3288,38 @@
+     return r;
+ }
+ 
++#if defined(FEAT_MOUSE) || defined(PROTO)
++/*
++ * Return TRUE if "c" is a mouse key.
++ */
++    int
++is_mouse_key(c)
++    int c;
++{
++    return c == K_LEFTMOUSE
++	|| c == K_LEFTMOUSE_NM
++	|| c == K_LEFTDRAG
++	|| c == K_LEFTRELEASE
++	|| c == K_LEFTRELEASE_NM
++	|| c == K_MIDDLEMOUSE
++	|| c == K_MIDDLEDRAG
++	|| c == K_MIDDLERELEASE
++	|| c == K_RIGHTMOUSE
++	|| c == K_RIGHTDRAG
++	|| c == K_RIGHTRELEASE
++	|| c == K_MOUSEDOWN
++	|| c == K_MOUSEUP
++	|| c == K_MOUSELEFT
++	|| c == K_MOUSERIGHT
++	|| c == K_X1MOUSE
++	|| c == K_X1DRAG
++	|| c == K_X1RELEASE
++	|| c == K_X2MOUSE
++	|| c == K_X2DRAG
++	|| c == K_X2RELEASE;
++}
++#endif
++
+ /*
+  * Get a key stroke directly from the user.
+  * Ignores mouse clicks and scrollbar events, except a click for the left
+@@ -3080,8 +3331,9 @@
+     int
+ get_keystroke()
+ {
+-#define CBUFLEN 151
+-    char_u	buf[CBUFLEN];
++    char_u	*buf = NULL;
++    int		buflen = 150;
++    int		maxlen;
+     int		len = 0;
+     int		n;
+     int		save_mapped_ctrl_c = mapped_ctrl_c;
+@@ -3093,12 +3345,29 @@
+ 	cursor_on();
+ 	out_flush();
+ 
++	/* Leave some room for check_termcode() to insert a key code into (max
++	 * 5 chars plus NUL).  And fix_input_buffer() can triple the number of
++	 * bytes. */
++	maxlen = (buflen - 6 - len) / 3;
++	if (buf == NULL)
++	    buf = alloc(buflen);
++	else if (maxlen < 10)
++	{
++	    /* Need some more space. This might happen when receiving a long
++	     * escape sequence. */
++	    buflen += 100;
++	    buf = vim_realloc(buf, buflen);
++	    maxlen = (buflen - 6 - len) / 3;
++	}
++	if (buf == NULL)
++	{
++	    do_outofmem_msg((long_u)buflen);
++	    return ESC;  /* panic! */
++	}
++
+ 	/* First time: blocking wait.  Second time: wait up to 100ms for a
+-	 * terminal code to complete.  Leave some room for check_termcode() to
+-	 * insert a key code into (max 5 chars plus NUL).  And
+-	 * fix_input_buffer() can triple the number of bytes. */
+-	n = ui_inchar(buf + len, (CBUFLEN - 6 - len) / 3,
+-						    len == 0 ? -1L : 100L, 0);
++	 * terminal code to complete. */
++	n = ui_inchar(buf + len, maxlen, len == 0 ? -1L : 100L, 0);
+ 	if (n > 0)
+ 	{
+ 	    /* Replace zero and CSI by a special key code. */
+@@ -3110,14 +3379,23 @@
+ 	    ++waited;	    /* keep track of the waiting time */
+ 
+ 	/* Incomplete termcode and not timed out yet: get more characters */
+-	if ((n = check_termcode(1, buf, len)) < 0
++	if ((n = check_termcode(1, buf, buflen, &len)) < 0
+ 	       && (!p_ttimeout || waited * 100L < (p_ttm < 0 ? p_tm : p_ttm)))
+ 	    continue;
+ 
+-	/* found a termcode: adjust length */
+-	if (n > 0)
++	if (n == KEYLEN_REMOVED)  /* key code removed */
++	{
++	    if (must_redraw != 0 && !need_wait_return && (State & CMDLINE) == 0)
++	    {
++		/* Redrawing was postponed, do it now. */
++		update_screen(0);
++		setcursor(); /* put cursor back where it belongs */
++	    }
++	    continue;
++	}
++	if (n > 0)		/* found a termcode: adjust length */
+ 	    len = n;
+-	if (len == 0)	    /* nothing typed yet */
++	if (len == 0)		/* nothing typed yet */
+ 	    continue;
+ 
+ 	/* Handle modifier and/or special key code. */
+@@ -3128,30 +3406,11 @@
+ 	    if (buf[1] == KS_MODIFIER
+ 		    || n == K_IGNORE
+ #ifdef FEAT_MOUSE
+-		    || n == K_LEFTMOUSE_NM
+-		    || n == K_LEFTDRAG
+-		    || n == K_LEFTRELEASE
+-		    || n == K_LEFTRELEASE_NM
+-		    || n == K_MIDDLEMOUSE
+-		    || n == K_MIDDLEDRAG
+-		    || n == K_MIDDLERELEASE
+-		    || n == K_RIGHTMOUSE
+-		    || n == K_RIGHTDRAG
+-		    || n == K_RIGHTRELEASE
+-		    || n == K_MOUSEDOWN
+-		    || n == K_MOUSEUP
+-		    || n == K_MOUSELEFT
+-		    || n == K_MOUSERIGHT
+-		    || n == K_X1MOUSE
+-		    || n == K_X1DRAG
+-		    || n == K_X1RELEASE
+-		    || n == K_X2MOUSE
+-		    || n == K_X2DRAG
+-		    || n == K_X2RELEASE
+-# ifdef FEAT_GUI
++		    || (is_mouse_key(n) && n != K_LEFTMOUSE)
++#endif
++#ifdef FEAT_GUI
+ 		    || n == K_VER_SCROLLBAR
+ 		    || n == K_HOR_SCROLLBAR
+-# endif
+ #endif
+ 	       )
+ 	    {
+@@ -3169,7 +3428,7 @@
+ 	{
+ 	    if (MB_BYTE2LEN(n) > len)
+ 		continue;	/* more bytes to get */
+-	    buf[len >= CBUFLEN ? CBUFLEN - 1 : len] = NUL;
++	    buf[len >= buflen ? buflen - 1 : len] = NUL;
+ 	    n = (*mb_ptr2char)(buf);
+ 	}
+ #endif
+@@ -3179,6 +3438,7 @@
+ #endif
+ 	break;
+     }
++    vim_free(buf);
+ 
+     mapped_ctrl_c = save_mapped_ctrl_c;
+     return n;
+@@ -3323,19 +3583,23 @@
+ 	if (pn == 1)
+ 	{
+ 	    if (n > 0)
+-		STRCPY(msg_buf, _("1 more line"));
++		vim_strncpy(msg_buf, (char_u *)_("1 more line"),
++							     MSG_BUF_LEN - 1);
+ 	    else
+-		STRCPY(msg_buf, _("1 line less"));
++		vim_strncpy(msg_buf, (char_u *)_("1 line less"),
++							     MSG_BUF_LEN - 1);
+ 	}
+ 	else
+ 	{
+ 	    if (n > 0)
+-		sprintf((char *)msg_buf, _("%ld more lines"), pn);
++		vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
++						     _("%ld more lines"), pn);
+ 	    else
+-		sprintf((char *)msg_buf, _("%ld fewer lines"), pn);
++		vim_snprintf((char *)msg_buf, MSG_BUF_LEN,
++						    _("%ld fewer lines"), pn);
+ 	}
+ 	if (got_int)
+-	    STRCAT(msg_buf, _(" (Interrupted)"));
++	    vim_strcat(msg_buf, (char_u *)_(" (Interrupted)"), MSG_BUF_LEN);
+ 	if (msg(msg_buf))
+ 	{
+ 	    set_keep_msg(msg_buf, 0);
+@@ -3492,7 +3756,7 @@
+     if (enc_utf8 && var != NULL)
+     {
+ 	int	len;
+-	char_u  *pp;
++	char_u  *pp = NULL;
+ 
+ 	/* Convert from active codepage to UTF-8.  Other conversions are
+ 	 * not done, because they would fail for non-ASCII characters. */
+@@ -3540,6 +3804,14 @@
+ {
+     vim_free(homedir);
+ }
++
++# ifdef FEAT_CMDL_COMPL
++    void
++free_users()
++{
++    ga_clear_strings(&ga_users);
++}
++# endif
+ #endif
+ 
+ /*
+@@ -3859,11 +4131,13 @@
+  * Vim's version of getenv().
+  * Special handling of $HOME, $VIM and $VIMRUNTIME.
+  * Also does ACP to 'enc' conversion for Win32.
++ * "mustfree" is set to TRUE when returned is allocated, it must be
++ * initialized to FALSE by the caller.
+  */
+     char_u *
+ vim_getenv(name, mustfree)
+     char_u	*name;
+-    int		*mustfree;	/* set to TRUE when returned is allocated */
++    int		*mustfree;
+ {
+     char_u	*p;
+     char_u	*pend;
+@@ -3885,7 +4159,7 @@
+ 	if (enc_utf8)
+ 	{
+ 	    int	    len;
+-	    char_u  *pp;
++	    char_u  *pp = NULL;
+ 
+ 	    /* Convert from active codepage to UTF-8.  Other conversions are
+ 	     * not done, because they would fail for non-ASCII characters. */
+@@ -3929,7 +4203,7 @@
+ 	    if (enc_utf8)
+ 	    {
+ 		int	len;
+-		char_u  *pp;
++		char_u  *pp = NULL;
+ 
+ 		/* Convert from active codepage to UTF-8.  Other conversions
+ 		 * are not done, because they would fail for non-ASCII
+@@ -3937,7 +4211,7 @@
+ 		acp_to_enc(p, (int)STRLEN(p), &pp, &len);
+ 		if (pp != NULL)
+ 		{
+-		    if (mustfree)
++		    if (*mustfree)
+ 			vim_free(p);
+ 		    p = pp;
+ 		    *mustfree = TRUE;
+@@ -4074,17 +4348,6 @@
+ 	{
+ 	    vim_setenv((char_u *)"VIMRUNTIME", p);
+ 	    didset_vimruntime = TRUE;
+-#ifdef FEAT_GETTEXT
+-	    {
+-		char_u	*buf = concat_str(p, (char_u *)"/lang");
+-
+-		if (buf != NULL)
+-		{
+-		    bindtextdomain(VIMPACKAGE, (char *)buf);
+-		    vim_free(buf);
+-		}
+-	    }
+-#endif
+ 	}
+ 	else
+ 	{
+@@ -4162,6 +4425,22 @@
+ 	putenv((char *)envbuf);
+     }
+ #endif
++#ifdef FEAT_GETTEXT
++    /*
++     * When setting $VIMRUNTIME adjust the directory to find message
++     * translations to $VIMRUNTIME/lang.
++     */
++    if (*val != NUL && STRICMP(name, "VIMRUNTIME") == 0)
++    {
++	char_u	*buf = concat_str(val, (char_u *)"/lang");
++
++	if (buf != NULL)
++	{
++	    bindtextdomain(VIMPACKAGE, (char *)buf);
++	    vim_free(buf);
++	}
++    }
++#endif
+ }
+ 
+ #if defined(FEAT_CMDL_COMPL) || defined(PROTO)
+@@ -4202,6 +4481,80 @@
+     return name;
+ # endif
+ }
++
++/*
++ * Find all user names for user completion.
++ * Done only once and then cached.
++ */
++    static void
++init_users() {
++    static int	lazy_init_done = FALSE;
++
++    if (lazy_init_done)
++	return;
++
++    lazy_init_done = TRUE;
++    ga_init2(&ga_users, sizeof(char_u *), 20);
++
++# if defined(HAVE_GETPWENT) && defined(HAVE_PWD_H)
++    {
++	char_u*		user;
++	struct passwd*	pw;
++
++	setpwent();
++	while ((pw = getpwent()) != NULL)
++	    /* pw->pw_name shouldn't be NULL but just in case... */
++	    if (pw->pw_name != NULL)
++	    {
++		if (ga_grow(&ga_users, 1) == FAIL)
++		    break;
++		user = vim_strsave((char_u*)pw->pw_name);
++		if (user == NULL)
++		    break;
++		((char_u **)(ga_users.ga_data))[ga_users.ga_len++] = user;
++	    }
++	endpwent();
++    }
++# endif
++}
++
++/*
++ * Function given to ExpandGeneric() to obtain an user names.
++ */
++    char_u*
++get_users(xp, idx)
++    expand_T	*xp UNUSED;
++    int		idx;
++{
++    init_users();
++    if (idx < ga_users.ga_len)
++	return ((char_u **)ga_users.ga_data)[idx];
++    return NULL;
++}
++
++/*
++ * Check whether name matches a user name. Return:
++ * 0 if name does not match any user name.
++ * 1 if name partially matches the beginning of a user name.
++ * 2 is name fully matches a user name.
++ */
++int match_user(name)
++    char_u* name;
++{
++    int i;
++    int n = (int)STRLEN(name);
++    int result = 0;
++
++    init_users();
++    for (i = 0; i < ga_users.ga_len; i++)
++    {
++	if (STRCMP(((char_u **)ga_users.ga_data)[i], name) == 0)
++	    return 2; /* full match */
++	if (STRNCMP(((char_u **)ga_users.ga_data)[i], name, n) == 0)
++	    result = 1; /* partial match */
++    }
++    return result;
++}
+ #endif
+ 
+ /*
+@@ -4220,7 +4573,7 @@
+ {
+     size_t	dirlen = 0, envlen = 0;
+     size_t	len;
+-    char_u	*homedir_env;
++    char_u	*homedir_env, *homedir_env_orig;
+     char_u	*p;
+ 
+     if (src == NULL)
+@@ -4246,13 +4599,31 @@
+ 	dirlen = STRLEN(homedir);
+ 
+ #ifdef VMS
+-    homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
++    homedir_env_orig = homedir_env = mch_getenv((char_u *)"SYS$LOGIN");
+ #else
+-    homedir_env = mch_getenv((char_u *)"HOME");
++    homedir_env_orig = homedir_env = mch_getenv((char_u *)"HOME");
+ #endif
+-
++    /* Empty is the same as not set. */
+     if (homedir_env != NULL && *homedir_env == NUL)
+ 	homedir_env = NULL;
++
++#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL)
++    if (homedir_env != NULL && vim_strchr(homedir_env, '~') != NULL)
++    {
++	int	usedlen = 0;
++	int	flen;
++	char_u	*fbuf = NULL;
++
++	flen = (int)STRLEN(homedir_env);
++	(void)modify_fname((char_u *)":p", &usedlen,
++						  &homedir_env, &fbuf, &flen);
++	flen = (int)STRLEN(homedir_env);
++	if (flen > 0 && vim_ispathsep(homedir_env[flen - 1]))
++	    /* Remove the trailing / that is added to a directory. */
++	    homedir_env[flen - 1] = NUL;
++    }
++#endif
++
+     if (homedir_env != NULL)
+ 	envlen = STRLEN(homedir_env);
+ 
+@@ -4306,6 +4677,9 @@
+     /* if (dstlen == 0) out of space, what to do??? */
+ 
+     *dst = NUL;
++
++    if (homedir_env != homedir_env_orig)
++	vim_free(homedir_env);
+ }
+ 
+ /*
+@@ -4549,25 +4923,21 @@
+ vim_ispathsep(c)
+     int c;
+ {
+-#ifdef RISCOS
+-    return (c == '.' || c == ':');
+-#else
+-# ifdef UNIX
++#ifdef UNIX
+     return (c == '/');	    /* UNIX has ':' inside file names */
+-# else
+-#  ifdef BACKSLASH_IN_FILENAME
++#else
++# ifdef BACKSLASH_IN_FILENAME
+     return (c == ':' || c == '/' || c == '\\');
+-#  else
+-#   ifdef VMS
++# else
++#  ifdef VMS
+     /* server"user passwd"::device:[full.path.name]fname.extension;version" */
+     return (c == ':' || c == '[' || c == ']' || c == '/'
+ 	    || c == '<' || c == '>' || c == '"' );
+-#   else		/* Amiga */
++#  else
+     return (c == ':' || c == '/');
+-#   endif /* VMS */
+-#  endif
++#  endif /* VMS */
+ # endif
+-#endif /* RISC OS */
++#endif
+ }
+ 
+ #if defined(FEAT_SEARCHPATH) || defined(PROTO)
+@@ -4656,16 +5026,21 @@
+     return retval;
+ }
+ 
+-#if (defined(CASE_INSENSITIVE_FILENAME) && defined(BACKSLASH_IN_FILENAME)) \
+-	|| defined(PROTO)
+ /*
+- * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally.
++ * Versions of fnamecmp() and fnamencmp() that handle '/' and '\' equally
++ * and deal with 'fileignorecase'.
+  */
+     int
+ vim_fnamecmp(x, y)
+     char_u	*x, *y;
+ {
++#ifdef BACKSLASH_IN_FILENAME
+     return vim_fnamencmp(x, y, MAXPATHL);
++#else
++    if (p_fic)
++	return MB_STRICMP(x, y);
++    return STRCMP(x, y);
++#endif
+ }
+ 
+     int
+@@ -4673,21 +5048,34 @@
+     char_u	*x, *y;
+     size_t	len;
+ {
+-    while (len > 0 && *x && *y)
+-    {
+-	if (TOLOWER_LOC(*x) != TOLOWER_LOC(*y)
+-		&& !(*x == '/' && *y == '\\')
+-		&& !(*x == '\\' && *y == '/'))
++#ifdef BACKSLASH_IN_FILENAME
++    char_u	*px = x;
++    char_u	*py = y;
++    int		cx = NUL;
++    int		cy = NUL;
++
++    while (len > 0)
++    {
++	cx = PTR2CHAR(px);
++	cy = PTR2CHAR(py);
++	if (cx == NUL || cy == NUL
++	    || ((p_fic ? MB_TOLOWER(cx) != MB_TOLOWER(cy) : cx != cy)
++		&& !(cx == '/' && cy == '\\')
++		&& !(cx == '\\' && cy == '/')))
+ 	    break;
+-	++x;
+-	++y;
+-	--len;
++	len -= MB_PTR2LEN(px);
++	px += MB_PTR2LEN(px);
++	py += MB_PTR2LEN(py);
+     }
+     if (len == 0)
+ 	return 0;
+-    return (*x - *y);
+-}
++    return (cx - cy);
++#else
++    if (p_fic)
++	return MB_STRNICMP(x, y, len);
++    return STRNCMP(x, y, len);
+ #endif
++}
+ 
+ /*
+  * Concatenate file names fname1 and fname2 into allocated memory.
+@@ -4752,8 +5140,8 @@
+     char_u  *
+ FullName_save(fname, force)
+     char_u	*fname;
+-    int		force;	    /* force expansion, even when it already looks
+-			       like a full path name */
++    int		force;		/* force expansion, even when it already looks
++				 * like a full path name */
+ {
+     char_u	*buf;
+     char_u	*new_fname = NULL;
+@@ -4907,22 +5295,25 @@
+ static int	cin_islinecomment __ARGS((char_u *));
+ static int	cin_isterminated __ARGS((char_u *, int, int));
+ static int	cin_isinit __ARGS((void));
+-static int	cin_isfuncdecl __ARGS((char_u **, linenr_T));
++static int	cin_isfuncdecl __ARGS((char_u **, linenr_T, linenr_T, int, int));
+ static int	cin_isif __ARGS((char_u *));
+ static int	cin_iselse __ARGS((char_u *));
+ static int	cin_isdo __ARGS((char_u *));
+ static int	cin_iswhileofdo __ARGS((char_u *, linenr_T, int));
++static int	cin_is_if_for_while_before_offset __ARGS((char_u *line, int *poffset));
+ static int	cin_iswhileofdo_end __ARGS((int terminated, int	ind_maxparen, int ind_maxcomment));
+ static int	cin_isbreak __ARGS((char_u *));
+ static int	cin_is_cpp_baseclass __ARGS((colnr_T *col));
+ static int	get_baseclass_amount __ARGS((int col, int ind_maxparen, int ind_maxcomment, int ind_cpp_baseclass));
+ static int	cin_ends_in __ARGS((char_u *, char_u *, char_u *));
++static int	cin_starts_with __ARGS((char_u *s, char *word));
+ static int	cin_skip2pos __ARGS((pos_T *trypos));
+ static pos_T	*find_start_brace __ARGS((int));
+ static pos_T	*find_match_paren __ARGS((int, int));
+ static int	corr_ind_maxparen __ARGS((int ind_maxparen, pos_T *startpos));
+ static int	find_last_paren __ARGS((char_u *l, int start, int end));
+ static int	find_match __ARGS((int lookfor, linenr_T ourscope, int ind_maxparen, int ind_maxcomment));
++static int	cin_is_cpp_namespace __ARGS((char_u *));
+ 
+ static int	ind_hash_comment = 0;   /* # starts a comment */
+ 
+@@ -4968,7 +5359,7 @@
+ }
+ 
+ /*
+- * Return TRUE if there there is no code at *s.  White space and comments are
++ * Return TRUE if there is no code at *s.  White space and comments are
+  * not considered code.
+  */
+     static int
+@@ -5087,21 +5478,40 @@
+ }
+ 
+ /*
+- * Recognize structure initialization and enumerations.
+- * Q&D-Implementation:
+- * check for "=" at end or "[typedef] enum" at beginning of line.
++ * Recognize structure initialization and enumerations:
++ * "[typedef] [static|public|protected|private] enum"
++ * "[typedef] [static|public|protected|private] = {"
+  */
+     static int
+ cin_isinit(void)
+ {
+     char_u	*s;
++    static char *skip[] = {"static", "public", "protected", "private"};
+ 
+     s = cin_skipcomment(ml_get_curline());
+ 
+-    if (STRNCMP(s, "typedef", 7) == 0 && !vim_isIDc(s[7]))
++    if (cin_starts_with(s, "typedef"))
+ 	s = cin_skipcomment(s + 7);
+ 
+-    if (STRNCMP(s, "enum", 4) == 0 && !vim_isIDc(s[4]))
++    for (;;)
++    {
++	int i, l;
++
++	for (i = 0; i < (int)(sizeof(skip) / sizeof(char *)); ++i)
++	{
++	    l = (int)strlen(skip[i]);
++	    if (cin_starts_with(s, skip[i]))
++	    {
++		s = cin_skipcomment(s + l);
++		l = 0;
++		break;
++	    }
++	}
++	if (l != 0)
++	    break;
++    }
++
++    if (cin_starts_with(s, "enum"))
+ 	return TRUE;
+ 
+     if (cin_ends_in(s, (char_u *)"=", (char_u *)"{"))
+@@ -5119,7 +5529,7 @@
+     int strict; /* Allow relaxed check of case statement for JS */
+ {
+     s = cin_skipcomment(s);
+-    if (STRNCMP(s, "case", 4) == 0 && !vim_isIDc(s[4]))
++    if (cin_starts_with(s, "case"))
+     {
+ 	for (s += 4; *s; ++s)
+ 	{
+@@ -5185,6 +5595,50 @@
+     return (*(s = cin_skipcomment(s + i)) == ':' && s[1] != ':');
+ }
+ 
++/* Maximum number of lines to search back for a "namespace" line. */
++#define FIND_NAMESPACE_LIM 20
++
++/*
++ * Recognize a "namespace" scope declaration.
++ */
++    static int
++cin_is_cpp_namespace(s)
++    char_u	*s;
++{
++    char_u	*p;
++    int		has_name = FALSE;
++
++    s = cin_skipcomment(s);
++    if (STRNCMP(s, "namespace", 9) == 0 && (s[9] == NUL || !vim_iswordc(s[9])))
++    {
++	p = cin_skipcomment(skipwhite(s + 9));
++	while (*p != NUL)
++	{
++	    if (vim_iswhite(*p))
++	    {
++		has_name = TRUE; /* found end of a name */
++		p = cin_skipcomment(skipwhite(p));
++	    }
++	    else if (*p == '{')
++	    {
++		break;
++	    }
++	    else if (vim_iswordc(*p))
++	    {
++		if (has_name)
++		    return FALSE; /* word character after skipping past name */
++		++p;
++	    }
++	    else
++	    {
++		return FALSE;
++	    }
++	}
++	return TRUE;
++    }
++    return FALSE;
++}
++
+ /*
+  * Return a pointer to the first non-empty non-comment character after a ':'.
+  * Return NULL if not found.
+@@ -5383,8 +5837,7 @@
+ cin_ispreproc(s)
+     char_u *s;
+ {
+-    s = skipwhite(s);
+-    if (*s == '#')
++    if (*skipwhite(s) == '#')
+ 	return TRUE;
+     return FALSE;
+ }
+@@ -5444,8 +5897,11 @@
+ }
+ 
+ /*
+- * Recognize a line that starts with '{' or '}', or ends with ';', '{' or '}'.
++ * Recognize a line that starts with '{' or '}', or ends with ';', ',', '{' or
++ * '}'.
+  * Don't consider "} else" a terminated line.
++ * If a line begins with an "else", only consider it terminated if no unmatched
++ * opening braces follow (handle "else { foo();" correctly).
+  * Return the character terminating the line (ending char's have precedence if
+  * both apply in order to determine initializations).
+  */
+@@ -5455,21 +5911,35 @@
+     int		incl_open;	/* include '{' at the end as terminator */
+     int		incl_comma;	/* recognize a trailing comma */
+ {
+-    char_u found_start = 0;
++    char_u	found_start = 0;
++    unsigned	n_open = 0;
++    int		is_else = FALSE;
+ 
+     s = cin_skipcomment(s);
+ 
+     if (*s == '{' || (*s == '}' && !cin_iselse(s)))
+ 	found_start = *s;
+ 
++    if (!found_start)
++	is_else = cin_iselse(s);
++
+     while (*s)
+     {
+ 	/* skip over comments, "" strings and 'c'haracters */
+ 	s = skip_string(cin_skipcomment(s));
+-	if ((*s == ';' || (incl_open && *s == '{') || *s == '}'
+-						 || (incl_comma && *s == ','))
++	if (*s == '}' && n_open > 0)
++	    --n_open;
++	if ((!is_else || n_open == 0)
++		&& (*s == ';' || *s == '}' || (incl_comma && *s == ','))
+ 		&& cin_nocode(s + 1))
+ 	    return *s;
++	else if (*s == '{')
++	{
++	    if (incl_open && cin_nocode(s + 1))
++		return *s;
++	    else
++		++n_open;
++	}
+ 
+ 	if (*s)
+ 	    s++;
+@@ -5485,21 +5955,41 @@
+  * "sp" points to a string with the line.  When looking at other lines it must
+  * be restored to the line.  When it's NULL fetch lines here.
+  * "lnum" is where we start looking.
++ * "min_lnum" is the line before which we will not be looking.
+  */
+     static int
+-cin_isfuncdecl(sp, first_lnum)
++cin_isfuncdecl(sp, first_lnum, min_lnum, ind_maxparen, ind_maxcomment)
+     char_u	**sp;
+     linenr_T	first_lnum;
++    linenr_T	min_lnum;
++    int		ind_maxparen;
++    int		ind_maxcomment;
+ {
+     char_u	*s;
+     linenr_T	lnum = first_lnum;
+     int		retval = FALSE;
++    pos_T	*trypos;
++    int		just_started = TRUE;
+ 
+     if (sp == NULL)
+ 	s = ml_get(lnum);
+     else
+ 	s = *sp;
+ 
++    if (find_last_paren(s, '(', ')')
++	&& (trypos = find_match_paren(ind_maxparen, ind_maxcomment)) != NULL)
++    {
++	lnum = trypos->lnum;
++	if (lnum < min_lnum)
++	    return FALSE;
++
++	s = ml_get(lnum);
++    }
++
++    /* Ignore line starting with #. */
++    if (cin_ispreproc(s))
++	return FALSE;
++
+     while (*s && *s != '(' && *s != ';' && *s != '\'' && *s != '"')
+     {
+ 	if (cin_iscomment(s))	/* ignore comments */
+@@ -5525,18 +6015,38 @@
+ 		retval = TRUE;
+ 	    goto done;
+ 	}
+-	if (*s == ',' && cin_nocode(s + 1))
++	if ((*s == ',' && cin_nocode(s + 1)) || s[1] == NUL || cin_nocode(s))
+ 	{
+-	    /* ',' at the end: continue looking in the next line */
++	    int comma = (*s == ',');
++
++	    /* ',' at the end: continue looking in the next line.
++	     * At the end: check for ',' in the next line, for this style:
++	     * func(arg1
++	     *       , arg2) */
++	    for (;;)
++	    {
++		if (lnum >= curbuf->b_ml.ml_line_count)
++		    break;
++		s = ml_get(++lnum);
++		if (!cin_ispreproc(s))
++		    break;
++	    }
+ 	    if (lnum >= curbuf->b_ml.ml_line_count)
+ 		break;
+-
+-	    s = ml_get(++lnum);
++	    /* Require a comma at end of the line or a comma or ')' at the
++	     * start of next line. */
++	    s = skipwhite(s);
++	    if (!just_started && (!comma && *s != ',' && *s != ')'))
++		break;
++	    just_started = FALSE;
+ 	}
+ 	else if (cin_iscomment(s))	/* ignore comments */
+ 	    s = cin_skipcomment(s);
+ 	else
++	{
+ 	    ++s;
++	    just_started = FALSE;
++	}
+     }
+ 
+ done:
+@@ -5587,7 +6097,7 @@
+     p = cin_skipcomment(p);
+     if (*p == '}')		/* accept "} while (cond);" */
+ 	p = cin_skipcomment(p + 1);
+-    if (STRNCMP(p, "while", 5) == 0 && !vim_isIDc(p[5]))
++    if (cin_starts_with(p, "while"))
+     {
+ 	cursor_save = curwin->w_cursor;
+ 	curwin->w_cursor.lnum = lnum;
+@@ -5607,6 +6117,52 @@
+ }
+ 
+ /*
++ * Check whether in "p" there is an "if", "for" or "while" before "*poffset".
++ * Return 0 if there is none.
++ * Otherwise return !0 and update "*poffset" to point to the place where the
++ * string was found.
++ */
++    static int
++cin_is_if_for_while_before_offset(line, poffset)
++    char_u *line;
++    int    *poffset;
++{
++    int offset = *poffset;
++
++    if (offset-- < 2)
++	return 0;
++    while (offset > 2 && vim_iswhite(line[offset]))
++	--offset;
++
++    offset -= 1;
++    if (!STRNCMP(line + offset, "if", 2))
++	goto probablyFound;
++
++    if (offset >= 1)
++    {
++	offset -= 1;
++	if (!STRNCMP(line + offset, "for", 3))
++	    goto probablyFound;
++
++	if (offset >= 2)
++	{
++	    offset -= 2;
++	    if (!STRNCMP(line + offset, "while", 5))
++		goto probablyFound;
++	}
++    }
++    return 0;
++
++probablyFound:
++    if (!offset || !vim_isIDc(line[offset - 1]))
++    {
++	*poffset = offset;
++	return 1;
++    }
++    return 0;
++}
++
++/*
+  * Return TRUE if we are at the end of a do-while.
+  *    do
+  *       nothing;
+@@ -5648,7 +6204,7 @@
+ 		    s = cin_skipcomment(ml_get(trypos->lnum));
+ 		    if (*s == '}')		/* accept "} while (cond);" */
+ 			s = cin_skipcomment(s + 1);
+-		    if (STRNCMP(s, "while", 5) == 0 && !vim_isIDc(s[5]))
++		    if (cin_starts_with(s, "while"))
+ 		    {
+ 			curwin->w_cursor.lnum = trypos->lnum;
+ 			return TRUE;
+@@ -5754,7 +6310,9 @@
+ 		continue;
+ 	}
+ 
+-	if (s[0] == ':')
++	if (s[0] == '"')
++	    s = skip_string(s) + 1;
++	else if (s[0] == ':')
+ 	{
+ 	    if (s[1] == ':')
+ 	    {
+@@ -5896,6 +6454,19 @@
+ }
+ 
+ /*
++ * Return TRUE when "s" starts with "word" and then a non-ID character.
++ */
++    static int
++cin_starts_with(s, word)
++    char_u *s;
++    char *word;
++{
++    int l = (int)STRLEN(word);
++
++    return (STRNCMP(s, word, l) == 0 && !vim_isIDc(s[l]));
++}
++
++/*
+  * Skip strings, chars and comments until at or past "trypos".
+  * Return the column found.
+  */
+@@ -5958,7 +6529,7 @@
+ 
+ /*
+  * Find the matching '(', failing if it is in a comment.
+- * Return NULL of no match found.
++ * Return NULL if no match found.
+  */
+     static pos_T *
+ find_match_paren(ind_maxparen, ind_maxcomment)	    /* XXX */
+@@ -6008,7 +6579,7 @@
+ 
+ /*
+  * Set w_cursor.col to the column number of the last unmatched ')' or '{' in
+- * line "l".
++ * line "l".  "l" must point to the start of the line.
+  */
+     static int
+ find_last_paren(l, start, end)
+@@ -6021,7 +6592,7 @@
+ 
+     curwin->w_cursor.col = 0;		    /* default is start of line */
+ 
+-    for (i = 0; l[i]; i++)
++    for (i = 0; l[i] != NUL; i++)
+     {
+ 	i = (int)(cin_skipcomment(l + i) - l); /* ignore parens in comments */
+ 	i = (int)(skip_string(l + i) - l);    /* ignore parens in quotes */
+@@ -6044,11 +6615,14 @@
+     int
+ get_c_indent()
+ {
++    int sw = (int)get_sw_value();
++
+     /*
+      * spaces from a block's opening brace the prevailing indent for that
+      * block should be
+      */
+-    int ind_level = curbuf->b_p_sw;
++
++    int ind_level = sw;
+ 
+     /*
+      * spaces from the edge of the line an open brace that's at the end of a
+@@ -6095,12 +6669,12 @@
+     /*
+      * spaces from the switch() indent a "case xx" label should be located
+      */
+-    int ind_case = curbuf->b_p_sw;
++    int ind_case = sw;
+ 
+     /*
+      * spaces from the "case xx:" code after a switch() should be located
+      */
+-    int ind_case_code = curbuf->b_p_sw;
++    int ind_case_code = sw;
+ 
+     /*
+      * lineup break at end of case in switch() with case label
+@@ -6111,45 +6685,45 @@
+      * spaces from the class declaration indent a scope declaration label
+      * should be located
+      */
+-    int ind_scopedecl = curbuf->b_p_sw;
++    int ind_scopedecl = sw;
+ 
+     /*
+      * spaces from the scope declaration label code should be located
+      */
+-    int ind_scopedecl_code = curbuf->b_p_sw;
++    int ind_scopedecl_code = sw;
+ 
+     /*
+      * amount K&R-style parameters should be indented
+      */
+-    int ind_param = curbuf->b_p_sw;
++    int ind_param = sw;
+ 
+     /*
+      * amount a function type spec should be indented
+      */
+-    int ind_func_type = curbuf->b_p_sw;
++    int ind_func_type = sw;
+ 
+     /*
+      * amount a cpp base class declaration or constructor initialization
+      * should be indented
+      */
+-    int ind_cpp_baseclass = curbuf->b_p_sw;
++    int ind_cpp_baseclass = sw;
+ 
+     /*
+      * additional spaces beyond the prevailing indent a continuation line
+      * should be located
+      */
+-    int ind_continuation = curbuf->b_p_sw;
++    int ind_continuation = sw;
+ 
+     /*
+      * spaces from the indent of the line with an unclosed parentheses
+      */
+-    int ind_unclosed = curbuf->b_p_sw * 2;
++    int ind_unclosed = sw * 2;
+ 
+     /*
+      * spaces from the indent of the line with an unclosed parentheses, which
+      * itself is also unclosed
+      */
+-    int ind_unclosed2 = curbuf->b_p_sw;
++    int ind_unclosed2 = sw;
+ 
+     /*
+      * suppress ignoring spaces from the indent of a line starting with an
+@@ -6222,6 +6796,17 @@
+      */
+     int ind_keep_case_label = 0;
+ 
++    /*
++     * handle C++ namespace
++     */
++    int ind_cpp_namespace = 0;
++
++    /*
++     * handle continuation lines containing conditions of if(), for() and
++     * while()
++     */
++    int ind_if_for_while = 0;
++
+     pos_T	cur_curpos;
+     int		amount;
+     int		scope_amount;
+@@ -6257,19 +6842,23 @@
+     int		whilelevel;
+     linenr_T	lnum;
+     char_u	*options;
++    char_u	*digits;
+     int		fraction = 0;	    /* init for GCC */
+     int		divider;
+     int		n;
+     int		iscase;
+     int		lookfor_break;
++    int		lookfor_cpp_namespace = FALSE;
+     int		cont_amount = 0;    /* amount for continuation line */
+     int		original_line_islabel;
++    int		added_to_amount = 0;
+ 
+     for (options = curbuf->b_p_cino; *options; )
+     {
+ 	l = options++;
+ 	if (*options == '-')
+ 	    ++options;
++	digits = options;	    /* remember where the digits start */
+ 	n = getdigits(&options);
+ 	divider = 0;
+ 	if (*options == '.')	    /* ".5s" means a fraction */
+@@ -6286,13 +6875,13 @@
+ 	}
+ 	if (*options == 's')	    /* "2s" means two times 'shiftwidth' */
+ 	{
+-	    if (n == 0 && fraction == 0)
+-		n = curbuf->b_p_sw;	/* just "s" is one 'shiftwidth' */
++	    if (options == digits)
++		n = sw;	/* just "s" is one 'shiftwidth' */
+ 	    else
+ 	    {
+-		n *= curbuf->b_p_sw;
++		n *= sw;
+ 		if (divider)
+-		    n += (curbuf->b_p_sw * fraction + divider / 2) / divider;
++		    n += (sw * fraction + divider / 2) / divider;
+ 	    }
+ 	    ++options;
+ 	}
+@@ -6335,6 +6924,8 @@
+ 	    case 'J': ind_js = n; break;
+ 	    case 'l': ind_keep_case_label = n; break;
+ 	    case '#': ind_hash_comment = n; break;
++	    case 'N': ind_cpp_namespace = n; break;
++	    case 'k': ind_if_for_while = n; break;
+ 	}
+ 	if (*options == ',')
+ 	    ++options;
+@@ -6424,6 +7015,8 @@
+ 	/* find how indented the line beginning the comment is */
+ 	getvcol(curwin, trypos, &col, NULL, NULL);
+ 	amount = col;
++	*lead_start = NUL;
++	*lead_middle = NUL;
+ 
+ 	p = curbuf->b_p_com;
+ 	while (*p != NUL)
+@@ -6636,6 +7229,33 @@
+ 	if (amount == -1)
+ 	{
+ 	    int	    ignore_paren_col = 0;
++	    int	    is_if_for_while = 0;
++
++	    if (ind_if_for_while)
++	    {
++		/* Look for the outermost opening parenthesis on this line
++		 * and check whether it belongs to an "if", "for" or "while". */
++
++		pos_T	    cursor_save = curwin->w_cursor;
++		pos_T	    outermost;
++		char_u	    *line;
++
++		trypos = &our_paren_pos;
++		do {
++		    outermost = *trypos;
++		    curwin->w_cursor.lnum = outermost.lnum;
++		    curwin->w_cursor.col = outermost.col;
++
++		    trypos = find_match_paren(ind_maxparen, ind_maxcomment);
++		} while (trypos && trypos->lnum == outermost.lnum);
++
++		curwin->w_cursor = cursor_save;
++
++		line = ml_get(outermost.lnum);
++
++		is_if_for_while =
++		    cin_is_if_for_while_before_offset(line, &outermost.col);
++	    }
+ 
+ 	    amount = skip_label(our_paren_pos.lnum, &look, ind_maxcomment);
+ 	    look = skipwhite(look);
+@@ -6660,7 +7280,7 @@
+ 		curwin->w_cursor.lnum = save_lnum;
+ 		look = ml_get(our_paren_pos.lnum) + look_col;
+ 	    }
+-	    if (theline[0] == ')' || ind_unclosed == 0
++	    if (theline[0] == ')' || (ind_unclosed == 0 && is_if_for_while == 0)
+ 		    || (!ind_unclosed_noignore && *look == '('
+ 						    && ignore_paren_col == 0))
+ 	    {
+@@ -6731,7 +7351,8 @@
+ 	    {
+ 		/* Line up with the start of the matching paren line. */
+ 	    }
+-	    else if (ind_unclosed == 0 || (!ind_unclosed_noignore
++	    else if ((ind_unclosed == 0 && is_if_for_while == 0)
++		     || (!ind_unclosed_noignore
+ 				    && *look == '(' && ignore_paren_col == 0))
+ 	    {
+ 		if (cur_amount != MAXCOL)
+@@ -6764,11 +7385,15 @@
+ 		{
+ 		    curwin->w_cursor.lnum = our_paren_pos.lnum;
+ 		    curwin->w_cursor.col = col;
+-		    if ((trypos = find_match_paren(ind_maxparen,
+-						     ind_maxcomment)) != NULL)
++		    if (find_match_paren(ind_maxparen, ind_maxcomment) != NULL)
+ 			amount += ind_unclosed2;
+ 		    else
+-			amount += ind_unclosed;
++		    {
++			if (is_if_for_while)
++			    amount += ind_if_for_while;
++			else
++			    amount += ind_unclosed;
++		    }
+ 		}
+ 		/*
+ 		 * For a line starting with ')' use the minimum of the two
+@@ -6838,7 +7463,7 @@
+ 	     *			ldfd) {
+ 	     *		    }
+ 	     */
+-	    if ((ind_keep_case_label
++	    if (ind_js || (ind_keep_case_label
+ 			   && cin_iscase(skipwhite(ml_get_curline()), FALSE)))
+ 		amount = get_indent();
+ 	    else
+@@ -6901,11 +7526,24 @@
+ 	    if (start_brace == BRACE_IN_COL0)	    /* '{' is in column 0 */
+ 	    {
+ 		amount = ind_open_left_imag;
++		lookfor_cpp_namespace = TRUE;
++	    }
++	    else if (start_brace == BRACE_AT_START &&
++		    lookfor_cpp_namespace)	  /* '{' is at start */
++	    {
++
++		lookfor_cpp_namespace = TRUE;
+ 	    }
+ 	    else
+ 	    {
+ 		if (start_brace == BRACE_AT_END)    /* '{' is at end of line */
++		{
+ 		    amount += ind_open_imag;
++
++		    l = skipwhite(ml_get_curline());
++		    if (cin_is_cpp_namespace(l))
++			amount += ind_cpp_namespace;
++		}
+ 		else
+ 		{
+ 		    /* Compensate for adding ind_open_extra later. */
+@@ -7014,7 +7652,8 @@
+ 			 * (it's a variable declaration).
+ 			 */
+ 			if (start_brace != BRACE_IN_COL0
+-				|| !cin_isfuncdecl(&l, curwin->w_cursor.lnum))
++				|| !cin_isfuncdecl(&l, curwin->w_cursor.lnum,
++					     0, ind_maxparen, ind_maxcomment))
+ 			{
+ 			    /* if the line is terminated with another ','
+ 			     * it is a continued variable initialization.
+@@ -7076,12 +7715,59 @@
+ 			else
+ 			    amount += ind_continuation;
+ 		    }
+-		    else if (lookfor != LOOKFOR_TERM
+-					  && lookfor != LOOKFOR_CPP_BASECLASS)
++		    else
+ 		    {
+-			amount = scope_amount;
+-			if (theline[0] == '{')
+-			    amount += ind_open_extra;
++			if (lookfor != LOOKFOR_TERM
++					  && lookfor != LOOKFOR_CPP_BASECLASS)
++			{
++			    amount = scope_amount;
++			    if (theline[0] == '{')
++			    {
++				amount += ind_open_extra;
++				added_to_amount = ind_open_extra;
++			    }
++			}
++
++			if (lookfor_cpp_namespace)
++			{
++			    /*
++			     * Looking for C++ namespace, need to look further
++			     * back.
++			     */
++			    if (curwin->w_cursor.lnum == ourscope)
++				continue;
++
++			    if (curwin->w_cursor.lnum == 0
++				    || curwin->w_cursor.lnum
++					      < ourscope - FIND_NAMESPACE_LIM)
++				break;
++
++			    l = ml_get_curline();
++
++			    /* If we're in a comment now, skip to the start of
++			     * the comment. */
++			    trypos = find_start_comment(ind_maxcomment);
++			    if (trypos != NULL)
++			    {
++				curwin->w_cursor.lnum = trypos->lnum + 1;
++				curwin->w_cursor.col = 0;
++				continue;
++			    }
++
++			    /* Skip preprocessor directives and blank lines. */
++			    if (cin_ispreproc_cont(&l, &curwin->w_cursor.lnum))
++				continue;
++
++			    /* Finally the actual check for "namespace". */
++			    if (cin_is_cpp_namespace(l))
++			    {
++				amount += ind_cpp_namespace - added_to_amount;
++				break;
++			    }
++
++			    if (cin_nocode(l))
++				continue;
++			}
+ 		    }
+ 		    break;
+ 		}
+@@ -7466,17 +8152,25 @@
+ 
+ 			/*
+ 			 * When searching for a terminated line, don't use the
+-			 * one between the "if" and the "else".
++			 * one between the "if" and the matching "else".
+ 			 * Need to use the scope of this "else".  XXX
+ 			 * If whilelevel != 0 continue looking for a "do {".
+ 			 */
+-			if (cin_iselse(l)
+-				&& whilelevel == 0
+-				&& ((trypos = find_start_brace(ind_maxcomment))
+-								    == NULL
++			if (cin_iselse(l) && whilelevel == 0)
++			{
++			    /* If we're looking at "} else", let's make sure we
++			     * find the opening brace of the enclosing scope,
++			     * not the one from "if () {". */
++			    if (*l == '}')
++				curwin->w_cursor.col =
++					  (colnr_T)(l - ml_get_curline()) + 1;
++
++			    if ((trypos = find_start_brace(ind_maxcomment))
++								       == NULL
+ 				    || find_match(LOOKFOR_IF, trypos->lnum,
+-					ind_maxparen, ind_maxcomment) == FAIL))
+-			    break;
++					ind_maxparen, ind_maxcomment) == FAIL)
++				break;
++			}
+ 		    }
+ 
+ 		    /*
+@@ -7757,8 +8451,8 @@
+ 			 * If we're at the end of a block, skip to the start of
+ 			 * that block.
+ 			 */
+-			curwin->w_cursor.col = 0;
+-			if (*cin_skipcomment(l) == '}'
++			l = ml_get_curline();
++			if (find_last_paren(l, '{', '}')
+ 				&& (trypos = find_start_brace(ind_maxcomment))
+ 							    != NULL) /* XXX */
+ 			{
+@@ -7820,7 +8514,9 @@
+ 		&& vim_strchr(theline, '}') == NULL
+ 		&& !cin_ends_in(theline, (char_u *)":", NULL)
+ 		&& !cin_ends_in(theline, (char_u *)",", NULL)
+-		&& cin_isfuncdecl(NULL, cur_curpos.lnum + 1)
++		&& cin_isfuncdecl(NULL, cur_curpos.lnum + 1,
++				  cur_curpos.lnum + 1,
++				  ind_maxparen, ind_maxcomment)
+ 		&& !cin_isterminated(theline, FALSE, TRUE))
+ 	{
+ 	    amount = ind_func_type;
+@@ -7926,7 +8622,8 @@
+ 		 * If the line looks like a function declaration, and we're
+ 		 * not in a comment, put it the left margin.
+ 		 */
+-		if (cin_isfuncdecl(NULL, cur_curpos.lnum))  /* XXX */
++		if (cin_isfuncdecl(NULL, cur_curpos.lnum, 0,
++				   ind_maxparen, ind_maxcomment))  /* XXX */
+ 		    break;
+ 		l = ml_get_curline();
+ 
+@@ -7947,11 +8644,35 @@
+ 		    break;
+ 
+ 		/*
++		 * Find a line only has a semicolon that belongs to a previous
++		 * line ending in '}', e.g. before an #endif.  Don't increase
++		 * indent then.
++		 */
++		if (*(look = skipwhite(l)) == ';' && cin_nocode(look + 1))
++		{
++		    pos_T curpos_save = curwin->w_cursor;
++
++		    while (curwin->w_cursor.lnum > 1)
++		    {
++			look = ml_get(--curwin->w_cursor.lnum);
++			if (!(cin_nocode(look) || cin_ispreproc_cont(
++					      &look, &curwin->w_cursor.lnum)))
++			    break;
++		    }
++		    if (curwin->w_cursor.lnum > 0
++				    && cin_ends_in(look, (char_u *)"}", NULL))
++			break;
++
++		    curwin->w_cursor = curpos_save;
++		}
++
++		/*
+ 		 * If the PREVIOUS line is a function declaration, the current
+ 		 * line (and the ones that follow) needs to be indented as
+ 		 * parameters.
+ 		 */
+-		if (cin_isfuncdecl(&l, curwin->w_cursor.lnum))
++		if (cin_isfuncdecl(&l, curwin->w_cursor.lnum, 0,
++				   ind_maxparen, ind_maxcomment))
+ 		{
+ 		    amount = ind_param;
+ 		    break;
+@@ -8149,12 +8870,18 @@
+ get_expr_indent()
+ {
+     int		indent;
+-    pos_T	pos;
++    pos_T	save_pos;
++    colnr_T	save_curswant;
++    int		save_set_curswant;
+     int		save_State;
+     int		use_sandbox = was_set_insecurely((char_u *)"indentexpr",
+ 								   OPT_LOCAL);
+ 
+-    pos = curwin->w_cursor;
++    /* Save and restore cursor position and curswant, in case it was changed
++     * via :normal commands */
++    save_pos = curwin->w_cursor;
++    save_curswant = curwin->w_curswant;
++    save_set_curswant = curwin->w_set_curswant;
+     set_vim_var_nr(VV_LNUM, curwin->w_cursor.lnum);
+     if (use_sandbox)
+ 	++sandbox;
+@@ -8169,7 +8896,9 @@
+      * command. */
+     save_State = State;
+     State = INSERT;
+-    curwin->w_cursor = pos;
++    curwin->w_cursor = save_pos;
++    curwin->w_curswant = save_curswant;
++    curwin->w_set_curswant = save_set_curswant;
+     check_cursor();
+     State = save_State;
+ 
+@@ -8856,11 +9585,15 @@
+     }
+ 
+     /* compile the regexp into a program */
++    if (flags & (EW_NOERROR | EW_NOTWILD))
++	++emsg_silent;
+     regmatch.rm_ic = TRUE;		/* Always ignore case */
+     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
++    if (flags & (EW_NOERROR | EW_NOTWILD))
++	--emsg_silent;
+     vim_free(pat);
+ 
+-    if (regmatch.regprog == NULL)
++    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
+     {
+ 	vim_free(buf);
+ 	return 0;
+@@ -8928,7 +9661,10 @@
+ 	 * all entries found with "matchname". */
+ 	if ((p[0] != '.' || starts_with_dot)
+ 		&& (matchname == NULL
+-		    || vim_regexec(&regmatch, p, (colnr_T)0)))
++		  || (regmatch.regprog != NULL
++				     && vim_regexec(&regmatch, p, (colnr_T)0))
++		  || ((flags & EW_NOTWILD)
++		     && fnamencmp(path + (s - buf), p, e - s) == 0)))
+ 	{
+ #ifdef WIN3264
+ 	    STRCPY(s, p);
+@@ -9096,6 +9832,7 @@
+ 
+     /*
+      * Find the first part in the path name that contains a wildcard.
++     * When EW_ICASE is set every letter is considered to be a wildcard.
+      * Copy it into "buf", including the preceding characters.
+      */
+     p = buf;
+@@ -9115,7 +9852,9 @@
+ 	    s = p + 1;
+ 	}
+ 	else if (path_end >= path + wildoff
+-			 && vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
++			 && (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL
++			     || (!p_fic && (flags & EW_ICASE)
++					     && isalpha(PTR2CHAR(path_end)))))
+ 	    e = p;
+ #ifdef FEAT_MBYTE
+ 	if (has_mbyte)
+@@ -9132,7 +9871,7 @@
+     e = p;
+     *e = NUL;
+ 
+-    /* now we have one wildcard component between "s" and "e" */
++    /* Now we have one wildcard component between "s" and "e". */
+     /* Remove backslashes between "wildoff" and the start of the wildcard
+      * component. */
+     for (p = buf + wildoff; p < s; ++p)
+@@ -9158,15 +9897,18 @@
+     }
+ 
+     /* compile the regexp into a program */
+-#ifdef CASE_INSENSITIVE_FILENAME
+-    regmatch.rm_ic = TRUE;		/* Behave like Terminal.app */
+-#else
+-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
+-#endif
++    if (flags & EW_ICASE)
++	regmatch.rm_ic = TRUE;		/* 'wildignorecase' set */
++    else
++	regmatch.rm_ic = p_fic;	/* ignore case when 'fileignorecase' is set */
++    if (flags & (EW_NOERROR | EW_NOTWILD))
++	++emsg_silent;
+     regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
++    if (flags & (EW_NOERROR | EW_NOTWILD))
++	--emsg_silent;
+     vim_free(pat);
+ 
+-    if (regmatch.regprog == NULL)
++    if (regmatch.regprog == NULL && (flags & EW_NOTWILD) == 0)
+     {
+ 	vim_free(buf);
+ 	return 0;
+@@ -9196,7 +9938,10 @@
+ 	    if (dp == NULL)
+ 		break;
+ 	    if ((dp->d_name[0] != '.' || starts_with_dot)
+-		    && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
++		 && ((regmatch.regprog != NULL && vim_regexec(&regmatch,
++					     (char_u *)dp->d_name, (colnr_T)0))
++		   || ((flags & EW_NOTWILD)
++		     && fnamencmp(path + (s - buf), dp->d_name, e - s) == 0)))
+ 	    {
+ 		STRCPY(s, dp->d_name);
+ 		len = STRLEN(buf);
+@@ -9317,7 +10062,8 @@
+ 	    continue;  /* it's different when it's shorter */
+ 
+ 	rival = other_paths[j] + other_path_len - candidate_len;
+-	if (fnamecmp(maybe_unique, rival) == 0)
++	if (fnamecmp(maybe_unique, rival) == 0
++		&& (rival == other_paths[j] || vim_ispathsep(*(rival - 1))))
+ 	    return FALSE;  /* match */
+     }
+ 
+@@ -9389,6 +10135,15 @@
+ 
+ 	if (ga_grow(gap, 1) == FAIL)
+ 	    break;
++
++# if defined(MSWIN) || defined(MSDOS)
++	/* Avoid the path ending in a backslash, it fails when a comma is
++	 * appended. */
++	len = (int)STRLEN(buf);
++	if (buf[len - 1] == '\\')
++	    buf[len - 1] = '/';
++# endif
++
+ 	p = vim_strsave(buf);
+ 	if (p == NULL)
+ 	    break;
+@@ -9642,7 +10397,7 @@
+     if (paths == NULL)
+ 	return 0;
+ 
+-    files = globpath(paths, pattern, 0);
++    files = globpath(paths, pattern, (flags & EW_ICASE) ? WILD_ICASE : 0);
+     vim_free(paths);
+     if (files == NULL)
+ 	return 0;
+diff -Naur vim73.orig/src/misc2.c vim73/src/misc2.c
+--- vim73.orig/src/misc2.c	2010-08-13 09:14:35.000000000 +0000
++++ vim73/src/misc2.c	2013-06-07 17:07:32.205583379 +0000
+@@ -200,7 +200,6 @@
+ 	}
+ #endif
+ 
+-	idx = -1;
+ 	ptr = line;
+ 	while (col <= wcol && *ptr != NUL)
+ 	{
+@@ -334,7 +333,7 @@
+ #ifdef FEAT_MBYTE
+     /* prevent from moving onto a trail byte */
+     if (has_mbyte)
+-	mb_adjustpos(pos);
++	mb_adjustpos(curbuf, pos);
+ #endif
+ 
+     if (col < wcol)
+@@ -545,16 +544,26 @@
+     void
+ check_cursor_col()
+ {
++    check_cursor_col_win(curwin);
++}
++
++/*
++ * Make sure win->w_cursor.col is valid.
++ */
++    void
++check_cursor_col_win(win)
++    win_T *win;
++{
+     colnr_T len;
+ #ifdef FEAT_VIRTUALEDIT
+-    colnr_T oldcol = curwin->w_cursor.col;
+-    colnr_T oldcoladd = curwin->w_cursor.col + curwin->w_cursor.coladd;
++    colnr_T oldcol = win->w_cursor.col;
++    colnr_T oldcoladd = win->w_cursor.col + win->w_cursor.coladd;
+ #endif
+ 
+-    len = (colnr_T)STRLEN(ml_get_curline());
++    len = (colnr_T)STRLEN(ml_get_buf(win->w_buffer, win->w_cursor.lnum, FALSE));
+     if (len == 0)
+-	curwin->w_cursor.col = 0;
+-    else if (curwin->w_cursor.col >= len)
++	win->w_cursor.col = 0;
++    else if (win->w_cursor.col >= len)
+     {
+ 	/* Allow cursor past end-of-line when:
+ 	 * - in Insert mode or restarting Insert mode
+@@ -568,33 +577,33 @@
+ 		|| (ve_flags & VE_ONEMORE)
+ #endif
+ 		|| virtual_active())
+-	    curwin->w_cursor.col = len;
++	    win->w_cursor.col = len;
+ 	else
+ 	{
+-	    curwin->w_cursor.col = len - 1;
++	    win->w_cursor.col = len - 1;
+ #ifdef FEAT_MBYTE
+-	    /* prevent cursor from moving on the trail byte */
++	    /* Move the cursor to the head byte. */
+ 	    if (has_mbyte)
+-		mb_adjust_cursor();
++		mb_adjustpos(win->w_buffer, &win->w_cursor);
+ #endif
+ 	}
+     }
+-    else if (curwin->w_cursor.col < 0)
+-	curwin->w_cursor.col = 0;
++    else if (win->w_cursor.col < 0)
++	win->w_cursor.col = 0;
+ 
+ #ifdef FEAT_VIRTUALEDIT
+     /* If virtual editing is on, we can leave the cursor on the old position,
+      * only we must set it to virtual.  But don't do it when at the end of the
+      * line. */
+     if (oldcol == MAXCOL)
+-	curwin->w_cursor.coladd = 0;
++	win->w_cursor.coladd = 0;
+     else if (ve_flags == VE_ALL)
+     {
+-	if (oldcoladd > curwin->w_cursor.col)
+-	    curwin->w_cursor.coladd = oldcoladd - curwin->w_cursor.col;
++	if (oldcoladd > win->w_cursor.col)
++	    win->w_cursor.coladd = oldcoladd - win->w_cursor.col;
+ 	else
+ 	    /* avoid weird number when there is a miscalculation or overflow */
+-	    curwin->w_cursor.coladd = 0;
++	    win->w_cursor.coladd = 0;
+     }
+ #endif
+ }
+@@ -806,6 +815,7 @@
+ #else
+ # define KEEP_ROOM (2 * 8192L)
+ #endif
++#define KEEP_ROOM_KB (KEEP_ROOM / 1024L)
+ 
+ /*
+  * Note: if unsigned is 16 bits we can only allocate up to 64K with alloc().
+@@ -931,7 +941,7 @@
+ 	    allocated = 0;
+ # endif
+ 	    /* 3. check for available memory: call mch_avail_mem() */
+-	    if (mch_avail_mem(TRUE) < KEEP_ROOM && !releasing)
++	    if (mch_avail_mem(TRUE) < KEEP_ROOM_KB && !releasing)
+ 	    {
+ 		free((char *)p);	/* System is low... no go! */
+ 		p = NULL;
+@@ -1003,8 +1013,12 @@
+     {
+ 	/* Don't hide this message */
+ 	emsg_silent = 0;
+-	EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
++
++	/* Must come first to avoid coming back here when printing the error
++	 * message fails, e.g. when setting v:errmsg. */
+ 	did_outofmem_msg = TRUE;
++
++	EMSGN(_("E342: Out of memory!  (allocating %lu bytes)"), size);
+     }
+ }
+ 
+@@ -1096,6 +1110,9 @@
+     free_all_marks();
+     alist_clear(&global_alist);
+     free_homedir();
++# if defined(FEAT_CMDL_COMPL)
++    free_users();
++# endif
+     free_search_patterns();
+     free_old_sub();
+     free_last_insert();
+@@ -1160,7 +1177,7 @@
+     for (buf = firstbuf; buf != NULL; )
+     {
+ 	nextbuf = buf->b_next;
+-	close_buffer(NULL, buf, DOBUF_WIPE);
++	close_buffer(NULL, buf, DOBUF_WIPE, FALSE);
+ 	if (buf_valid(buf))
+ 	    buf = nextbuf;	/* didn't work, try next one */
+ 	else
+@@ -1223,7 +1240,7 @@
+ #endif
+ 
+ /*
+- * copy a string into newly allocated memory
++ * Copy "string" into newly allocated memory.
+  */
+     char_u *
+ vim_strsave(string)
+@@ -1239,6 +1256,12 @@
+     return p;
+ }
+ 
++/*
++ * Copy up to "len" bytes of "string" into newly allocated memory and
++ * terminate with a NUL.
++ * The allocated memory always has size "len + 1", also when "string" is
++ * shorter.
++ */
+     char_u *
+ vim_strnsave(string, len)
+     char_u	*string;
+@@ -1540,7 +1563,7 @@
+ 	    if (enc_utf8)
+ 	    {
+ 		int	c, uc;
+-		int	nl;
++		int	newl;
+ 		char_u	*s;
+ 
+ 		c = utf_ptr2char(p);
+@@ -1549,21 +1572,21 @@
+ 		/* Reallocate string when byte count changes.  This is rare,
+ 		 * thus it's OK to do another malloc()/free(). */
+ 		l = utf_ptr2len(p);
+-		nl = utf_char2len(uc);
+-		if (nl != l)
++		newl = utf_char2len(uc);
++		if (newl != l)
+ 		{
+-		    s = alloc((unsigned)STRLEN(res) + 1 + nl - l);
++		    s = alloc((unsigned)STRLEN(res) + 1 + newl - l);
+ 		    if (s == NULL)
+ 			break;
+ 		    mch_memmove(s, res, p - res);
+-		    STRCPY(s + (p - res) + nl, p + l);
++		    STRCPY(s + (p - res) + newl, p + l);
+ 		    p = s + (p - res);
+ 		    vim_free(res);
+ 		    res = s;
+ 		}
+ 
+ 		utf_char2bytes(uc, p);
+-		p += nl;
++		p += newl;
+ 	    }
+ 	    else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
+ 		p += l;		/* skip multi-byte character */
+@@ -1642,6 +1665,28 @@
+ }
+ 
+ /*
++ * Like strcat(), but make sure the result fits in "tosize" bytes and is
++ * always NUL terminated.
++ */
++    void
++vim_strcat(to, from, tosize)
++    char_u	*to;
++    char_u	*from;
++    size_t	tosize;
++{
++    size_t tolen = STRLEN(to);
++    size_t fromlen = STRLEN(from);
++
++    if (tolen + fromlen + 1 > tosize)
++    {
++	mch_memmove(to + tolen, from, tosize - tolen - 1);
++	to[tosize - 1] = NUL;
++    }
++    else
++	STRCPY(to + tolen, from);
++}
++
++/*
+  * Isolate one part of a string option where parts are separated with
+  * "sep_chars".
+  * The part is copied into "buf[maxlen]".
+@@ -2023,24 +2068,22 @@
+     garray_T	*gap;
+     int		n;
+ {
+-    size_t	len;
++    size_t	old_len;
++    size_t	new_len;
+     char_u	*pp;
+ 
+     if (gap->ga_maxlen - gap->ga_len < n)
+     {
+ 	if (n < gap->ga_growsize)
+ 	    n = gap->ga_growsize;
+-	len = gap->ga_itemsize * (gap->ga_len + n);
+-	pp = alloc_clear((unsigned)len);
++	new_len = gap->ga_itemsize * (gap->ga_len + n);
++	pp = (gap->ga_data == NULL)
++	      ? alloc((unsigned)new_len) : vim_realloc(gap->ga_data, new_len);
+ 	if (pp == NULL)
+ 	    return FAIL;
++	old_len = gap->ga_itemsize * gap->ga_maxlen;
++	vim_memset(pp + old_len, 0, new_len - old_len);
+ 	gap->ga_maxlen = gap->ga_len + n;
+-	if (gap->ga_data != NULL)
+-	{
+-	    mch_memmove(pp, gap->ga_data,
+-				      (size_t)(gap->ga_itemsize * gap->ga_len));
+-	    vim_free(gap->ga_data);
+-	}
+ 	gap->ga_data = pp;
+     }
+     return OK;
+@@ -2109,6 +2152,25 @@
+     }
+ }
+ 
++#if (defined(UNIX) && !defined(USE_SYSTEM)) || defined(WIN3264)
++/*
++ * Append the text in "gap" below the cursor line and clear "gap".
++ */
++    void
++append_ga_line(gap)
++    garray_T	*gap;
++{
++    /* Remove trailing CR. */
++    if (gap->ga_len > 0
++	    && !curbuf->b_p_bin
++	    && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
++	--gap->ga_len;
++    ga_append(gap, NUL);
++    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
++    gap->ga_len = 0;
++}
++#endif
++
+ /************************************************************************
+  * functions that use lookup tables for various things, generally to do with
+  * special key codes.
+@@ -2356,10 +2418,24 @@
+     {'<',		(char_u *)"lt"},
+ 
+     {K_MOUSE,		(char_u *)"Mouse"},
++#ifdef FEAT_MOUSE_NET
+     {K_NETTERM_MOUSE,	(char_u *)"NetMouse"},
++#endif
++#ifdef FEAT_MOUSE_DEC
+     {K_DEC_MOUSE,	(char_u *)"DecMouse"},
++#endif
++#ifdef FEAT_MOUSE_JSB
+     {K_JSBTERM_MOUSE,	(char_u *)"JsbMouse"},
++#endif
++#ifdef FEAT_MOUSE_PTERM
+     {K_PTERM_MOUSE,	(char_u *)"PtermMouse"},
++#endif
++#ifdef FEAT_MOUSE_URXVT
++    {K_URXVT_MOUSE,	(char_u *)"UrxvtMouse"},
++#endif
++#ifdef FEAT_MOUSE_SGR
++    {K_SGR_MOUSE,	(char_u *)"SgrMouse"},
++#endif
+     {K_LEFTMOUSE,	(char_u *)"LeftMouse"},
+     {K_LEFTMOUSE_NM,	(char_u *)"LeftMouseNM"},
+     {K_LEFTDRAG,	(char_u *)"LeftDrag"},
+@@ -2698,6 +2774,7 @@
+     int		bit;
+     int		key;
+     unsigned long n;
++    int		l;
+ 
+     src = *srcp;
+     if (src[0] != '<')
+@@ -2710,26 +2787,32 @@
+ 	if (*bp == '-')
+ 	{
+ 	    last_dash = bp;
+-	    if (bp[1] != NUL && bp[2] == '>')
+-		++bp;	/* anything accepted, like <C-?> */
++	    if (bp[1] != NUL)
++	    {
++#ifdef FEAT_MBYTE
++		if (has_mbyte)
++		    l = mb_ptr2len(bp + 1);
++		else
++#endif
++		    l = 1;
++		if (bp[l + 1] == '>')
++		    bp += l;	/* anything accepted, like <C-?> */
++	    }
+ 	}
+ 	if (bp[0] == 't' && bp[1] == '_' && bp[2] && bp[3])
+ 	    bp += 3;	/* skip t_xx, xx may be '-' or '>' */
++	else if (STRNICMP(bp, "char-", 5) == 0)
++	{
++	    vim_str2nr(bp + 5, NULL, &l, TRUE, TRUE, NULL, NULL);
++	    bp += l + 5;
++	    break;
++	}
+     }
+ 
+     if (*bp == '>')	/* found matching '>' */
+     {
+ 	end_of_name = bp + 1;
+ 
+-	if (STRNICMP(src + 1, "char-", 5) == 0 && VIM_ISDIGIT(src[6]))
+-	{
+-	    /* <Char-123> or <Char-033> or <Char-0x33> */
+-	    vim_str2nr(src + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
+-	    *modp = 0;
+-	    *srcp = end_of_name;
+-	    return (int)n;
+-	}
+-
+ 	/* Which modifiers are given? */
+ 	modifiers = 0x0;
+ 	for (bp = src + 1; bp < last_dash; bp++)
+@@ -2748,16 +2831,32 @@
+ 	 */
+ 	if (bp >= last_dash)
+ 	{
+-	    /*
+-	     * Modifier with single letter, or special key name.
+-	     */
+-	    if (modifiers != 0 && last_dash[2] == '>')
+-		key = last_dash[1];
++	    if (STRNICMP(last_dash + 1, "char-", 5) == 0
++						 && VIM_ISDIGIT(last_dash[6]))
++	    {
++		/* <Char-123> or <Char-033> or <Char-0x33> */
++		vim_str2nr(last_dash + 6, NULL, NULL, TRUE, TRUE, NULL, &n);
++		key = (int)n;
++	    }
+ 	    else
+ 	    {
+-		key = get_special_key_code(last_dash + 1);
+-		if (!keep_x_key)
+-		    key = handle_x_keys(key);
++		/*
++		 * Modifier with single letter, or special key name.
++		 */
++#ifdef FEAT_MBYTE
++		if (has_mbyte)
++		    l = mb_ptr2len(last_dash + 1);
++		else
++#endif
++		    l = 1;
++		if (modifiers != 0 && last_dash[l + 1] == '>')
++		    key = PTR2CHAR(last_dash + 1);
++		else
++		{
++		    key = get_special_key_code(last_dash + 1);
++		    if (!keep_x_key)
++			key = handle_x_keys(key);
++		}
+ 	    }
+ 
+ 	    /*
+@@ -2808,7 +2907,7 @@
+     int	modifiers = *modp;
+ 
+ #ifdef MACOS
+-    /* Command-key really special, No fancynest */
++    /* Command-key really special, no fancynest */
+     if (!(modifiers & MOD_MASK_CMD))
+ #endif
+     if ((modifiers & MOD_MASK_SHIFT) && ASCII_ISALPHA(key))
+@@ -2835,7 +2934,7 @@
+ 	    key = K_ZERO;
+     }
+ #ifdef MACOS
+-    /* Command-key really special, No fancynest */
++    /* Command-key really special, no fancynest */
+     if (!(modifiers & MOD_MASK_CMD))
+ #endif
+     if ((modifiers & MOD_MASK_ALT) && key < 0x80
+@@ -3131,17 +3230,31 @@
+ 	    retval = mch_call_shell(cmd, opt);
+ 	else
+ 	{
+-	    ncmd = alloc((unsigned)(STRLEN(cmd) + STRLEN(p_sxq) * 2 + 1));
++	    char_u *ecmd = cmd;
++
++	    if (*p_sxe != NUL && STRCMP(p_sxq, "(") == 0)
++	    {
++		ecmd = vim_strsave_escaped_ext(cmd, p_sxe, '^', FALSE);
++		if (ecmd == NULL)
++		    ecmd = cmd;
++	    }
++	    ncmd = alloc((unsigned)(STRLEN(ecmd) + STRLEN(p_sxq) * 2 + 1));
+ 	    if (ncmd != NULL)
+ 	    {
+ 		STRCPY(ncmd, p_sxq);
+-		STRCAT(ncmd, cmd);
+-		STRCAT(ncmd, p_sxq);
++		STRCAT(ncmd, ecmd);
++		/* When 'shellxquote' is ( append ).
++		 * When 'shellxquote' is "( append )". */
++		STRCAT(ncmd, STRCMP(p_sxq, "(") == 0 ? (char_u *)")"
++			   : STRCMP(p_sxq, "\"(") == 0 ? (char_u *)")\""
++			   : p_sxq);
+ 		retval = mch_call_shell(ncmd, opt);
+ 		vim_free(ncmd);
+ 	    }
+ 	    else
+ 		retval = -1;
++	    if (ecmd != cmd)
++		vim_free(ecmd);
+ 	}
+ #ifdef FEAT_GUI
+ 	--hold_gui_events;
+@@ -3191,7 +3304,7 @@
+ #if defined(FEAT_MBYTE) || defined(PROTO)
+ /*
+  * Return TRUE if "p" points to just after a path separator.
+- * Take care of multi-byte characters.
++ * Takes care of multi-byte characters.
+  * "b" must point to the start of the file name
+  */
+     int
+@@ -3199,7 +3312,7 @@
+     char_u	*b;
+     char_u	*p;
+ {
+-    return vim_ispathsep(p[-1])
++    return p > b && vim_ispathsep(p[-1])
+ 			     && (!has_mbyte || (*mb_head_off)(b, p - 1) == 0);
+ }
+ #endif
+@@ -3747,7 +3860,7 @@
+     ush temp; \
+  \
+     temp = (ush)keys[2] | 2; \
+-    t = (int)(((unsigned)(temp * (temp ^ 1)) >> 8) & 0xff); \
++    t = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff); \
+ }
+ 
+ /*
+@@ -3889,7 +4002,7 @@
+ 	    ush temp;
+ 
+ 	    temp = (ush)keys[2] | 2;
+-	    temp = (int)(((unsigned)(temp * (temp ^ 1)) >> 8) & 0xff);
++	    temp = (int)(((unsigned)(temp * (temp ^ 1U)) >> 8) & 0xff);
+ 	    UPDATE_KEYS_ZIP(*p ^= temp);
+ 	}
+     else
+@@ -4210,6 +4323,8 @@
+ static int ff_path_in_stoplist __ARGS((char_u *, int, char_u **));
+ #endif
+ 
++static char_u e_pathtoolong[] = N_("E854: path too long for completion");
++
+ #if 0
+ /*
+  * if someone likes findfirst/findnext, here are the functions
+@@ -4506,6 +4621,11 @@
+ 	len = 0;
+ 	while (*wc_part != NUL)
+ 	{
++	    if (len + 5 >= MAXPATHL)
++	    {
++		EMSG(_(e_pathtoolong));
++		break;
++	    }
+ 	    if (STRNCMP(wc_part, "**", 2) == 0)
+ 	    {
+ 		ff_expand_buffer[len++] = *wc_part++;
+@@ -4551,6 +4671,12 @@
+     }
+ 
+     /* create an absolute path */
++    if (STRLEN(search_ctx->ffsc_start_dir)
++			  + STRLEN(search_ctx->ffsc_fix_path) + 3 >= MAXPATHL)
++    {
++	EMSG(_(e_pathtoolong));
++	goto error_return;
++    }
+     STRCPY(ff_expand_buffer, search_ctx->ffsc_start_dir);
+     add_pathsep(ff_expand_buffer);
+     STRCAT(ff_expand_buffer, search_ctx->ffsc_fix_path);
+@@ -4597,9 +4723,8 @@
+     {
+ 	if (r_ptr[0] == '\\' && r_ptr[1] == ';')
+ 	{
+-	    /* overwrite the escape char,
+-	     * use STRLEN(r_ptr) to move the trailing '\0'
+-	     */
++	    /* Overwrite the escape char,
++	     * use STRLEN(r_ptr) to move the trailing '\0'. */
+ 	    STRMOVE(r_ptr, r_ptr + 1);
+ 	    r_ptr++;
+ 	}
+@@ -4858,10 +4983,13 @@
+ 			stackp->ffs_filearray_size = 0;
+ 		}
+ 		else
++		    /* Add EW_NOTWILD because the expanded path may contain
++		     * wildcard characters that are to be taken literally.
++		     * This is a bit of a hack. */
+ 		    expand_wildcards((dirptrs[1] == NULL) ? 1 : 2, dirptrs,
+ 			    &stackp->ffs_filearray_size,
+ 			    &stackp->ffs_filearray,
+-			    EW_DIR|EW_ADDSLASH|EW_SILENT);
++			    EW_DIR|EW_ADDSLASH|EW_SILENT|EW_NOTWILD);
+ 
+ 		stackp->ffs_filearray_cur = 0;
+ 		stackp->ffs_stage = 0;
+@@ -5224,6 +5352,8 @@
+     char_u	*s2;
+ {
+     int		i;
++    int		prev1 = NUL;
++    int		prev2 = NUL;
+ 
+     if (s1 == s2)
+ 	return TRUE;
+@@ -5234,22 +5364,16 @@
+     if (STRLEN(s1) != STRLEN(s2))
+ 	return FAIL;
+ 
+-    for (i = 0; s1[i] != NUL && s2[i] != NUL; i++)
++    for (i = 0; s1[i] != NUL && s2[i] != NUL; i += MB_PTR2LEN(s1 + i))
+     {
+-	if (s1[i] != s2[i]
+-#ifdef CASE_INSENSITIVE_FILENAME
+-		&& TOUPPER_LOC(s1[i]) != TOUPPER_LOC(s2[i])
+-#endif
+-		)
+-	{
+-	    if (i >= 2)
+-		if (s1[i-1] == '*' && s1[i-2] == '*')
+-		    continue;
+-		else
+-		    return FAIL;
+-	    else
+-		return FAIL;
+-	}
++	int c1 = PTR2CHAR(s1 + i);
++	int c2 = PTR2CHAR(s2 + i);
++
++	if ((p_fic ? MB_TOLOWER(c1) != MB_TOLOWER(c2) : c1 != c2)
++		&& (prev1 != '*' || prev2 != '*'))
++	    return FAIL;
++	prev2 = prev1;
++	prev1 = c1;
+     }
+     return TRUE;
+ }
+@@ -5975,57 +6099,59 @@
+     int maxlen;
+ {
+     int		i;
++    int		c1, c2;
+     const char	*s = NULL;
+ 
+-    for (i = 0; maxlen < 0 || i < maxlen; ++i)
++    for (i = 0; maxlen < 0 || i < maxlen; i += MB_PTR2LEN((char_u *)p + i))
+     {
++	c1 = PTR2CHAR((char_u *)p + i);
++	c2 = PTR2CHAR((char_u *)q + i);
++
+ 	/* End of "p": check if "q" also ends or just has a slash. */
+-	if (p[i] == NUL)
++	if (c1 == NUL)
+ 	{
+-	    if (q[i] == NUL)  /* full match */
++	    if (c2 == NUL)  /* full match */
+ 		return 0;
+ 	    s = q;
+ 	    break;
+ 	}
+ 
+ 	/* End of "q": check if "p" just has a slash. */
+-	if (q[i] == NUL)
++	if (c2 == NUL)
+ 	{
+ 	    s = p;
+ 	    break;
+ 	}
+ 
+-	if (
+-#ifdef CASE_INSENSITIVE_FILENAME
+-		TOUPPER_LOC(p[i]) != TOUPPER_LOC(q[i])
+-#else
+-		p[i] != q[i]
+-#endif
++	if ((p_fic ? MB_TOUPPER(c1) != MB_TOUPPER(c2) : c1 != c2)
+ #ifdef BACKSLASH_IN_FILENAME
+ 		/* consider '/' and '\\' to be equal */
+-		&& !((p[i] == '/' && q[i] == '\\')
+-		    || (p[i] == '\\' && q[i] == '/'))
++		&& !((c1 == '/' && c2 == '\\')
++		    || (c1 == '\\' && c2 == '/'))
+ #endif
+ 		)
+ 	{
+-	    if (vim_ispathsep(p[i]))
++	    if (vim_ispathsep(c1))
+ 		return -1;
+-	    if (vim_ispathsep(q[i]))
++	    if (vim_ispathsep(c2))
+ 		return 1;
+-	    return ((char_u *)p)[i] - ((char_u *)q)[i];	    /* no match */
++	    return p_fic ? MB_TOUPPER(c1) - MB_TOUPPER(c2)
++		    : c1 - c2;  /* no match */
+ 	}
+     }
+     if (s == NULL)	/* "i" ran into "maxlen" */
+ 	return 0;
+ 
++    c1 = PTR2CHAR((char_u *)s + i);
++    c2 = PTR2CHAR((char_u *)s + i + MB_PTR2LEN((char_u *)s + i));
+     /* ignore a trailing slash, but not "//" or ":/" */
+-    if (s[i + 1] == NUL
++    if (c2 == NUL
+ 	    && i > 0
+ 	    && !after_pathsep((char_u *)s, (char_u *)s + i)
+ #ifdef BACKSLASH_IN_FILENAME
+-	    && (s[i] == '/' || s[i] == '\\')
++	    && (c1 == '/' || c1 == '\\')
+ #else
+-	    && s[i] == '/'
++	    && c1 == '/'
+ #endif
+        )
+ 	return 0;   /* match with trailing slash */
+@@ -6443,3 +6569,23 @@
+ #endif
+ 
+ #endif
++
++#if (defined(FEAT_MBYTE) && defined(FEAT_QUICKFIX)) \
++	|| defined(FEAT_SPELL) || defined(PROTO)
++/*
++ * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
++ * When "s" is NULL FALSE is returned.
++ */
++    int
++has_non_ascii(s)
++    char_u	*s;
++{
++    char_u	*p;
++
++    if (s != NULL)
++	for (p = s; *p != NUL; ++p)
++	    if (*p >= 128)
++		return TRUE;
++    return FALSE;
++}
++#endif
+diff -Naur vim73.orig/src/move.c vim73/src/move.c
+--- vim73.orig/src/move.c	2010-08-08 13:12:31.000000000 +0000
++++ vim73/src/move.c	2013-06-07 17:07:32.232249969 +0000
+@@ -362,7 +362,7 @@
+ #endif
+ 	    )
+     {
+-	dollar_vcol = 0;
++	dollar_vcol = -1;
+ 	if (curwin->w_skipcol != 0)
+ 	{
+ 	    curwin->w_skipcol = 0;
+@@ -926,8 +926,8 @@
+  * Also updates curwin->w_leftcol.
+  */
+     void
+-curs_columns(scroll)
+-    int		scroll;		/* when TRUE, may scroll horizontally */
++curs_columns(may_scroll)
++    int		may_scroll;	/* when TRUE, may scroll horizontally */
+ {
+     int		diff;
+     int		extra;		/* offset for first screen line */
+@@ -966,7 +966,7 @@
+ 
+     /* remove '$' from change command when cursor moves onto it */
+     if (startcol > dollar_vcol)
+-	dollar_vcol = 0;
++	dollar_vcol = -1;
+ 
+     extra = curwin_col_off();
+     curwin->w_wcol = curwin->w_virtcol + extra;
+@@ -1014,7 +1014,7 @@
+     /* No line wrapping: compute curwin->w_leftcol if scrolling is on and line
+      * is not folded.
+      * If scrolling is off, curwin->w_leftcol is assumed to be 0 */
+-    else if (scroll
++    else if (may_scroll
+ #ifdef FEAT_FOLDING
+ 	    && !curwin->w_cline_folded
+ #endif
+@@ -2576,7 +2576,7 @@
+     else
+ 	topline_back(lp);
+     h2 = lp->height;
+-    if (h2 + h1 > min_height)
++    if (h2 == MAXCOL || h2 + h1 > min_height)
+     {
+ 	*lp = loff0;	/* no overlap */
+ 	return;
+@@ -2588,7 +2588,7 @@
+     else
+ 	topline_back(lp);
+     h3 = lp->height;
+-    if (h3 + h2 > min_height)
++    if (h3 == MAXCOL || h3 + h2 > min_height)
+     {
+ 	*lp = loff0;	/* no overlap */
+ 	return;
+@@ -2600,7 +2600,7 @@
+     else
+ 	topline_back(lp);
+     h4 = lp->height;
+-    if (h4 + h3 + h2 > min_height || h3 + h2 + h1 > min_height)
++    if (h4 == MAXCOL || h4 + h3 + h2 > min_height || h3 + h2 + h1 > min_height)
+ 	*lp = loff1;	/* 1 line overlap */
+     else
+ 	*lp = loff2;	/* 2 lines overlap */
+@@ -2843,9 +2843,15 @@
+ do_check_cursorbind()
+ {
+     linenr_T	line = curwin->w_cursor.lnum;
+-    colnr_T	col =  curwin->w_cursor.col;
++    colnr_T	col = curwin->w_cursor.col;
++# ifdef FEAT_VIRTUALEDIT
++    colnr_T	coladd = curwin->w_cursor.coladd;
++# endif
++    colnr_T	curswant = curwin->w_curswant;
++    int		set_curswant = curwin->w_set_curswant;
+     win_T	*old_curwin = curwin;
+     buf_T	*old_curbuf = curbuf;
++    int		restart_edit_save;
+ # ifdef FEAT_VISUAL
+     int		old_VIsual_select = VIsual_select;
+     int		old_VIsual_active = VIsual_active;
+@@ -2874,17 +2880,28 @@
+ # endif
+ 		curwin->w_cursor.lnum = line;
+ 	    curwin->w_cursor.col = col;
++# ifdef FEAT_VIRTUALEDIT
++	    curwin->w_cursor.coladd = coladd;
++# endif
++	    curwin->w_curswant = curswant;
++	    curwin->w_set_curswant = set_curswant;
+ 
+-	    /* Make sure the cursor is in a valid position. */
++	    /* Make sure the cursor is in a valid position.  Temporarily set
++	     * "restart_edit" to allow the cursor to be beyond the EOL. */
++	    restart_edit_save = restart_edit;
++	    restart_edit = TRUE;
+ 	    check_cursor();
++	    restart_edit = restart_edit_save;
+ # ifdef FEAT_MBYTE
+ 	    /* Correct cursor for multi-byte character. */
+ 	    if (has_mbyte)
+ 		mb_adjust_cursor();
+ # endif
+-
+ 	    redraw_later(VALID);
+-	    update_topline();
++
++	    /* Only scroll when 'scrollbind' hasn't done this. */
++	    if (!curwin->w_p_scb)
++		update_topline();
+ # ifdef FEAT_WINDOWS
+ 	    curwin->w_redr_status = TRUE;
+ # endif
+diff -Naur vim73.orig/src/msvc2010.bat vim73/src/msvc2010.bat
+--- vim73.orig/src/msvc2010.bat	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/msvc2010.bat	2013-06-07 17:07:32.262249884 +0000
+@@ -0,0 +1,7 @@
++@echo off
++rem To be used on MS-Windows for Visual C++ 2010 Express Edition
++rem   aka Microsoft Visual Studio 10.0.
++rem See INSTALLpc.txt for information.
++@echo on
++
++call "%VS100COMNTOOLS%%vsvars32.bat"
+diff -Naur vim73.orig/src/nbdebug.c vim73/src/nbdebug.c
+--- vim73.orig/src/nbdebug.c	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/nbdebug.c	2013-06-07 17:07:32.292249798 +0000
+@@ -17,7 +17,7 @@
+  * debugging startup problems because gvim will be started automatically from
+  * netbeans and cannot be run directly from a debugger. The only way to debug
+  * a gvim started by netbeans is by attaching a debugger to it. Without this
+- * tool all starup code will have completed before you can get the pid and
++ * tool all startup code will have completed before you can get the pid and
+  * attach.
+  *
+  * The second tool is a log tool.
+diff -Naur vim73.orig/src/netbeans.c vim73/src/netbeans.c
+--- vim73.orig/src/netbeans.c	2010-08-09 20:48:09.000000000 +0000
++++ vim73/src/netbeans.c	2013-06-07 17:07:32.315583065 +0000
+@@ -14,12 +14,15 @@
+  * which are *between* characters, whereas vim uses line number
+  * and column number which are *on* characters.
+  * See ":help netbeans-protocol" for explanation.
++ *
++ * The Netbeans messages are received and queued in the gui event loop, or in
++ * the select loop when Vim runs in a terminal. These messages are processed
++ * by netbeans_parse_messages() which is invoked in the idle loop when Vim is
++ * waiting for user input. The function netbeans_parse_messages() is also
++ * called from the ":sleep" command, to allow the execution of test cases that
++ * may not invoke the idle loop.
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for mch_open(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ #if defined(FEAT_NETBEANS_INTG) || defined(PROTO)
+@@ -87,7 +90,7 @@
+ static void nb_init_graphics __ARGS((void));
+ static void coloncmd __ARGS((char *cmd, ...));
+ static void nb_set_curbuf __ARGS((buf_T *buf));
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+ static void messageFromNetbeans __ARGS((XtPointer, int *, XtInputId *));
+ #endif
+ #ifdef FEAT_GUI_GTK
+@@ -112,7 +115,7 @@
+ static NBSOCK nbsock = -1;		/* socket fd for Netbeans connection */
+ #define NETBEANS_OPEN (nbsock != -1)
+ 
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+ static XtInputId inputHandler = (XtInputId)NULL;  /* Cookie for input */
+ #endif
+ #ifdef FEAT_GUI_GTK
+@@ -135,15 +138,13 @@
+ static int needupdate = 0;
+ static int inAtomic = 0;
+ 
++/*
++ * Close the socket and remove the input handlers.
++ */
+     static void
+-netbeans_close(void)
++nb_close_socket(void)
+ {
+-    if (!NETBEANS_OPEN)
+-	return;
+-
+-    netbeans_send_disconnect();
+-
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+     if (inputHandler != (XtInputId)NULL)
+     {
+ 	XtRemoveInput(inputHandler);
+@@ -167,13 +168,27 @@
+ # endif
+ #endif
+ 
++    sock_close(nbsock);
++    nbsock = -1;
++}
++
++/*
++ * Close the connection and cleanup.
++ * May be called when nb_close_socket() was called earlier.
++ */
++    static void
++netbeans_close(void)
++{
++    if (NETBEANS_OPEN)
++    {
++	netbeans_send_disconnect();
++	nb_close_socket();
++    }
++
+ #ifdef FEAT_BEVAL
+     bevalServers &= ~BEVAL_NETBEANS;
+ #endif
+ 
+-    sock_close(nbsock);
+-    nbsock = -1;
+-
+     needupdate = 0;
+     inAtomic = 0;
+     nb_free();
+@@ -183,6 +198,7 @@
+     changed_window_setting();
+     update_screen(CLEAR);
+     setcursor();
++    cursor_on();
+     out_flush();
+ #ifdef FEAT_GUI
+     if (gui.in_use)
+@@ -311,14 +327,9 @@
+     server.sin_port = htons(port);
+     if ((host = gethostbyname(hostname)) == NULL)
+     {
+-	if (mch_access(hostname, R_OK) >= 0)
+-	{
+-	    /* DEBUG: input file */
+-	    sd = mch_open(hostname, O_RDONLY, 0);
+-	    goto theend;
+-	}
+ 	nbdebug(("error in gethostbyname() in netbeans_connect()\n"));
+ 	PERROR("gethostbyname() in netbeans_connect()");
++	sock_close(sd);
+ 	goto theend;
+     }
+     memcpy((char *)&server.sin_addr, host->h_addr, host->h_length);
+@@ -368,15 +379,12 @@
+ 							 || (errno == EINTR)))
+ 		{
+ 		    nbdebug(("retrying...\n"));
+-		    sleep(5);
+-		    if (!doabort)
++		    mch_delay(3000L, TRUE);
++		    ui_breakcheck();
++		    if (got_int)
+ 		    {
+-			ui_breakcheck();
+-			if (got_int)
+-			{
+-			    errno = EINTR;
+-			    break;
+-			}
++			errno = EINTR;
++			break;
+ 		    }
+ 		    if (connect(sd, (struct sockaddr *)&server,
+ 							 sizeof(server)) == 0)
+@@ -391,6 +399,7 @@
+ 		    /* Get here when the server can't be found. */
+ 		    nbdebug(("Cannot connect to Netbeans #2\n"));
+ 		    PERROR(_("Cannot connect to Netbeans #2"));
++		    sock_close(sd);
+ 		    if (doabort)
+ 			getout(1);
+ 		    goto theend;
+@@ -401,6 +410,7 @@
+ 	{
+ 	    nbdebug(("Cannot connect to Netbeans\n"));
+ 	    PERROR(_("Cannot connect to Netbeans"));
++	    sock_close(sd);
+ 	    if (doabort)
+ 		getout(1);
+ 	    goto theend;
+@@ -433,7 +443,7 @@
+     FILE *fp;
+     char_u buf[BUFSIZ];
+     char_u *lp;
+-    char_u *nl;
++    char_u *nlp;
+ #ifdef UNIX
+     struct stat	st;
+ 
+@@ -462,8 +472,8 @@
+     /* Read the file. There should be one of each parameter */
+     while ((lp = (char_u *)fgets((char *)buf, BUFSIZ, fp)) != NULL)
+     {
+-	if ((nl = vim_strchr(lp, '\n')) != NULL)
+-	    *nl = 0;	    /* strip off the trailing newline */
++	if ((nlp = vim_strchr(lp, '\n')) != NULL)
++	    *nlp = 0;	    /* strip off the trailing newline */
+ 
+ 	if (STRNCMP(lp, "host=", 5) == 0)
+ 	{
+@@ -631,9 +641,7 @@
+ {
+     char_u	*p;
+     queue_T	*node;
+-
+-    if (!NETBEANS_OPEN)
+-	return;
++    int		own_node;
+ 
+     while (head.next != NULL && head.next != &head)
+     {
+@@ -672,20 +680,25 @@
+ 	    *p++ = NUL;
+ 	    if (*p == NUL)
+ 	    {
++		own_node = TRUE;
+ 		head.next = node->next;
+ 		node->next->prev = node->prev;
+ 	    }
++	    else
++		own_node = FALSE;
+ 
+ 	    /* now, parse and execute the commands */
+ 	    nb_parse_cmd(node->buffer);
+ 
+-	    if (*p == NUL)
++	    if (own_node)
+ 	    {
+ 		/* buffer finished, dispose of the node and buffer */
+ 		vim_free(node->buffer);
+ 		vim_free(node);
+ 	    }
+-	    else
++	    /* Check that "head" wasn't changed under our fingers, e.g. when a
++	     * DETACH command was handled. */
++	    else if (head.next == node)
+ 	    {
+ 		/* more follows, move to the start */
+ 		STRMOVE(node->buffer, p);
+@@ -700,7 +713,7 @@
+ /*
+  * Read a command from netbeans.
+  */
+-#ifdef FEAT_GUI_MOTIF
++#ifdef FEAT_GUI_X11
+     static void
+ messageFromNetbeans(XtPointer clientData UNUSED,
+ 		    int *unused1 UNUSED,
+@@ -720,15 +733,14 @@
+ }
+ #endif
+ 
++#define DETACH_MSG "DETACH\n"
++
+     void
+ netbeans_read()
+ {
+     static char_u	*buf = NULL;
+     int			len = 0;
+     int			readlen = 0;
+-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
+-    static int		level = 0;
+-#endif
+ #ifdef HAVE_SELECT
+     struct timeval	tval;
+     fd_set		rfds;
+@@ -744,13 +756,6 @@
+ 	return;
+     }
+ 
+-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_GTK) && !defined(FEAT_GUI_W32)
+-    /* recursion guard; this will be called from the X event loop at unknown
+-     * moments */
+-    if (NB_HAS_GUI)
+-	++level;
+-#endif
+-
+     /* Allocate a buffer to read into. */
+     if (buf == NULL)
+     {
+@@ -790,34 +795,32 @@
+ 	    break;	/* did read everything that's available */
+     }
+ 
++    /* Reading a socket disconnection (readlen == 0), or a socket error. */
+     if (readlen <= 0)
+     {
+-	/* read error or didn't read anything */
+-	netbeans_close();
+-	nbdebug(("messageFromNetbeans: Error in read() from socket\n"));
++	/* Queue a "DETACH" netbeans message in the command queue in order to
++	 * terminate the netbeans session later. Do not end the session here
++	 * directly as we may be running in the context of a call to
++	 * netbeans_parse_messages():
++	 *	netbeans_parse_messages
++	 *	    -> autocmd triggered while processing the netbeans cmd
++	 *		-> ui_breakcheck
++	 *		    -> gui event loop or select loop
++	 *			-> netbeans_read()
++	 */
++	save((char_u *)DETACH_MSG, (int)strlen(DETACH_MSG));
++	nb_close_socket();
++
+ 	if (len < 0)
+ 	{
+ 	    nbdebug(("read from Netbeans socket\n"));
+ 	    PERROR(_("read from Netbeans socket"));
+ 	}
+-	return; /* don't try to parse it */
+     }
+ 
+-#if defined(NB_HAS_GUI) && !defined(FEAT_GUI_W32)
+-    /* Let the main loop handle messages. */
+-    if (NB_HAS_GUI)
+-    {
+-# ifdef FEAT_GUI_GTK
+-	if (gtk_main_level() > 0)
+-	    gtk_main_quit();
+-# else
+-	/* Parse the messages now, but avoid recursion. */
+-	if (level == 1)
+-	    netbeans_parse_messages();
+-
+-	--level;
+-# endif
+-    }
++#if defined(NB_HAS_GUI) && defined(FEAT_GUI_GTK)
++    if (NB_HAS_GUI && gtk_main_level() > 0)
++	gtk_main_quit();
+ #endif
+ }
+ 
+@@ -955,7 +958,6 @@
+     keyQ_T *key_node = keyHead.next;
+     queue_T *cmd_node = head.next;
+     nbbuf_T buf;
+-    buf_T *bufp;
+     int i;
+ 
+     /* free the netbeans buffer list */
+@@ -964,7 +966,7 @@
+ 	buf = buf_list[i];
+ 	vim_free(buf.displayname);
+ 	vim_free(buf.signmap);
+-	if ((bufp=buf.bufp) != NULL)
++	if (buf.bufp != NULL)
+ 	{
+ 	    buf.bufp->b_netbeans_file = FALSE;
+ 	    buf.bufp->b_was_netbeans_file = FALSE;
+@@ -976,7 +978,7 @@
+     buf_list_used = 0;
+ 
+     /* free the queued key commands */
+-    while(key_node != NULL && key_node != &keyHead)
++    while (key_node != NULL && key_node != &keyHead)
+     {
+ 	keyQ_T *next = key_node->next;
+ 	vim_free(key_node->keystr);
+@@ -991,7 +993,7 @@
+     }
+ 
+     /* free the queued netbeans commands */
+-    while(cmd_node != NULL && cmd_node != &head)
++    while (cmd_node != NULL && cmd_node != &head)
+     {
+ 	queue_T *next = cmd_node->next;
+ 	vim_free(cmd_node->buffer);
+@@ -1186,6 +1188,10 @@
+ 
+     nbdebug(("REP %d: <none>\n", cmdno));
+ 
++    /* Avoid printing an annoying error message. */
++    if (!NETBEANS_OPEN)
++	return;
++
+     sprintf(reply, "%d\n", cmdno);
+     nb_send(reply, "nb_reply_nil");
+ }
+@@ -1389,7 +1395,7 @@
+     int		cmdno,
+     char_u	*args)	    /* points to space before arguments or NUL */
+ {
+-    int		doupdate = 0;
++    int		do_update = 0;
+     long	off = 0;
+     nbbuf_T	*buf = nb_get_buf(bufno);
+     static int	skip = 0;
+@@ -1594,7 +1600,7 @@
+ 							last.lnum, last.col));
+ 		del_from_lnum = first.lnum;
+ 		del_to_lnum = last.lnum;
+-		doupdate = 1;
++		do_update = 1;
+ 
+ 		/* Get the position of the first byte after the deleted
+ 		 * section.  "next" is NULL when deleting to the end of the
+@@ -1734,7 +1740,7 @@
+ 		int	added = 0;
+ 		int	oldFire = netbeansFireChanges;
+ 		int	old_b_changed;
+-		char_u	*nl;
++		char_u	*nlp;
+ 		linenr_T lnum;
+ 		linenr_T lnum_start;
+ 		pos_T	*pos;
+@@ -1771,11 +1777,11 @@
+ 		lnum = lnum_start;
+ 
+ 		/* Loop over the "\n" separated lines of the argument. */
+-		doupdate = 1;
++		do_update = 1;
+ 		while (*args != NUL)
+ 		{
+-		    nl = vim_strchr(args, '\n');
+-		    if (nl == NULL)
++		    nlp = vim_strchr(args, '\n');
++		    if (nlp == NULL)
+ 		    {
+ 			/* Incomplete line, probably truncated.  Next "insert"
+ 			 * command should append to this one. */
+@@ -1783,13 +1789,13 @@
+ 		    }
+ 		    else
+ 		    {
+-			len = nl - args;
++			len = nlp - args;
+ 
+ 			/*
+ 			 * We need to detect EOL style, because the commands
+ 			 * use a character offset.
+ 			 */
+-			if (nl > args && nl[-1] == '\r')
++			if (nlp > args && nlp[-1] == '\r')
+ 			{
+ 			    ff_detected = EOL_DOS;
+ 			    --len;
+@@ -1806,13 +1812,15 @@
+ 			char_u *oldline = ml_get(lnum);
+ 			char_u *newline;
+ 
+-			/* Insert halfway a line.  For simplicity we assume we
+-			 * need to append to the line. */
+-			newline = alloc_check((unsigned)(STRLEN(oldline) + len + 1));
++			/* Insert halfway a line. */
++			newline = alloc_check(
++				       (unsigned)(STRLEN(oldline) + len + 1));
+ 			if (newline != NULL)
+ 			{
+-			    STRCPY(newline, oldline);
++			    mch_memmove(newline, oldline, (size_t)pos->col);
++			    newline[pos->col] = NUL;
+ 			    STRCAT(newline, args);
++			    STRCAT(newline, oldline + pos->col);
+ 			    ml_replace(lnum, newline, FALSE);
+ 			}
+ 		    }
+@@ -1820,14 +1828,15 @@
+ 		    {
+ 			/* Append a new line.  Not that we always do this,
+ 			 * also when the text doesn't end in a "\n". */
+-			ml_append((linenr_T)(lnum - 1), args, (colnr_T)(len + 1), FALSE);
++			ml_append((linenr_T)(lnum - 1), args,
++						   (colnr_T)(len + 1), FALSE);
+ 			++added;
+ 		    }
+ 
+-		    if (nl == NULL)
++		    if (nlp == NULL)
+ 			break;
+ 		    ++lnum;
+-		    args = nl + 1;
++		    args = nlp + 1;
+ 		}
+ 
+ 		/* Adjust the marks below the inserted lines. */
+@@ -1986,7 +1995,7 @@
+ 		EMSG("E640: invalid buffer identifier in initDone");
+ 		return FAIL;
+ 	    }
+-	    doupdate = 1;
++	    do_update = 1;
+ 	    buf->initDone = TRUE;
+ 	    nb_set_curbuf(buf->bufp);
+ #if defined(FEAT_AUTOCMD)
+@@ -2075,7 +2084,7 @@
+ 					     ECMD_HIDE + ECMD_OLDBUF, curwin);
+ 	    buf->bufp = curbuf;
+ 	    buf->initDone = TRUE;
+-	    doupdate = 1;
++	    do_update = 1;
+ #if defined(FEAT_TITLE)
+ 	    maketitle();
+ #endif
+@@ -2103,7 +2112,7 @@
+ 		exarg.forceit = FALSE;
+ 		dosetvisible = TRUE;
+ 		goto_buffer(&exarg, DOBUF_FIRST, FORWARD, buf->bufp->b_fnum);
+-		doupdate = 1;
++		do_update = 1;
+ 		dosetvisible = FALSE;
+ 
+ #ifdef FEAT_GUI
+@@ -2250,6 +2259,7 @@
+ 	    update_topline();		/* scroll to show the line */
+ 	    update_screen(VALID);
+ 	    setcursor();
++	    cursor_on();
+ 	    out_flush();
+ #ifdef FEAT_GUI
+ 	    if (gui.in_use)
+@@ -2302,7 +2312,7 @@
+ 						     buf->bufp->b_fnum, TRUE);
+ 	    buf->bufp = NULL;
+ 	    buf->initDone = FALSE;
+-	    doupdate = 1;
++	    do_update = 1;
+ /* =====================================================================*/
+ 	}
+ 	else if (streq((char *)cmd, "setStyle")) /* obsolete... */
+@@ -2393,7 +2403,7 @@
+ 		return FAIL;
+ 	    }
+ 
+-	    doupdate = 1;
++	    do_update = 1;
+ 
+ 	    cp = (char *)args;
+ 	    serNum = strtol(cp, &cp, 10);
+@@ -2441,7 +2451,7 @@
+ 		nbdebug(("    invalid buffer identifier in removeAnno\n"));
+ 		return FAIL;
+ 	    }
+-	    doupdate = 1;
++	    do_update = 1;
+ 	    cp = (char *)args;
+ 	    serNum = strtol(cp, &cp, 10);
+ 	    args = (char_u *)cp;
+@@ -2486,7 +2496,7 @@
+ 	    len = strtol(cp, NULL, 10);
+ 	    args = (char_u *)cp;
+ 	    pos = off2pos(buf->bufp, off);
+-	    doupdate = 1;
++	    do_update = 1;
+ 	    if (!pos)
+ 		nbdebug(("    no such start pos in %s, %ld\n", cmd, off));
+ 	    else
+@@ -2548,7 +2558,7 @@
+ 	    inAtomic = 0;
+ 	    if (needupdate)
+ 	    {
+-		doupdate = 1;
++		do_update = 1;
+ 		needupdate = 0;
+ 	    }
+ /* =====================================================================*/
+@@ -2629,21 +2639,22 @@
+ 	 * Unrecognized command is ignored.
+ 	 */
+     }
+-    if (inAtomic && doupdate)
++    if (inAtomic && do_update)
+     {
+ 	needupdate = 1;
+-	doupdate = 0;
++	do_update = 0;
+     }
+ 
+     /*
+      * Is this needed? I moved the netbeans_Xt_connect() later during startup
+      * and it may no longer be necessary. If its not needed then needupdate
+-     * and doupdate can also be removed.
++     * and do_update can also be removed.
+      */
+-    if (buf != NULL && buf->initDone && doupdate)
++    if (buf != NULL && buf->initDone && do_update)
+     {
+ 	update_screen(NOT_VALID);
+ 	setcursor();
++	cursor_on();
+ 	out_flush();
+ #ifdef FEAT_GUI
+ 	if (gui.in_use)
+@@ -2773,6 +2784,16 @@
+ ex_nbstart(eap)
+     exarg_T	*eap;
+ {
++#ifdef FEAT_GUI
++# if !defined(FEAT_GUI_X11) && !defined(FEAT_GUI_GTK)  \
++		&& !defined(FEAT_GUI_W32)
++    if (gui.in_use)
++    {
++	EMSG(_("E838: netbeans is not supported with this GUI"));
++	return;
++    }
++# endif
++#endif
+     netbeans_open((char *)eap->arg, FALSE);
+ }
+ 
+@@ -2880,7 +2901,7 @@
+     char_u	*text;
+     linenr_T	lnum;
+     int		col;
+-    char	buf[MAXPATHL * 2 + 25];
++    char	*buf;
+     char_u	*p;
+ 
+     /* Don't do anything when 'ballooneval' is off, messages scrolled the
+@@ -2894,15 +2915,20 @@
+ 	 * length. */
+ 	if (text != NULL && text[0] != NUL && STRLEN(text) < MAXPATHL)
+ 	{
+-	    p = nb_quote(text);
+-	    if (p != NULL)
++	    buf = (char *)alloc(MAXPATHL * 2 + 25);
++	    if (buf != NULL)
+ 	    {
+-		vim_snprintf(buf, sizeof(buf),
+-				       "0:balloonText=%d \"%s\"\n", r_cmdno, p);
+-		vim_free(p);
++		p = nb_quote(text);
++		if (p != NULL)
++		{
++		    vim_snprintf(buf, MAXPATHL * 2 + 25,
++				     "0:balloonText=%d \"%s\"\n", r_cmdno, p);
++		    vim_free(p);
++		}
++		nbdebug(("EVT: %s", buf));
++		nb_send(buf, "netbeans_beval_cb");
++		vim_free(buf);
+ 	    }
+-	    nbdebug(("EVT: %s", buf));
+-	    nb_send(buf, "netbeans_beval_cb");
+ 	}
+ 	vim_free(text);
+     }
+@@ -2937,7 +2963,7 @@
+     if (!NB_HAS_GUI || !NETBEANS_OPEN)
+ 	return;
+ 
+-# ifdef FEAT_GUI_MOTIF
++# ifdef FEAT_GUI_X11
+     /* tell notifier we are interested in being called
+      * when there is input on the editor connection socket
+      */
+@@ -3000,6 +3026,7 @@
+     changed_window_setting();
+     update_screen(CLEAR);
+     setcursor();
++    cursor_on();
+     out_flush();
+ #ifdef FEAT_GUI
+     if (gui.in_use)
+@@ -3027,7 +3054,7 @@
+     }
+ }
+ 
+-#if defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_W32) || defined(PROTO)
++#if defined(FEAT_GUI_X11) || defined(FEAT_GUI_W32) || defined(PROTO)
+ /*
+  * Tell netbeans that the window was moved or resized.
+  */
+@@ -3458,7 +3485,7 @@
+     return FALSE;
+ }
+ 
+-#if defined(FEAT_GUI_MOTIF) || defined(PROTO)
++#if defined(FEAT_GUI_X11) || defined(PROTO)
+ /*
+  * We have multiple signs to draw at the same location. Draw the
+  * multi-sign indicator instead. This is the Motif version.
+@@ -3487,7 +3514,7 @@
+     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+3, y++);
+     XDrawPoint(gui.dpy, gui.wid, gui.text_gc, x+2, y);
+ }
+-#endif /* FEAT_GUI_MOTIF */
++#endif /* FEAT_GUI_X11 */
+ 
+ #if defined(FEAT_GUI_GTK) && !defined(PROTO)
+ /*
+@@ -3902,14 +3929,12 @@
+     }
+     else
+     {
+-	char_u ebuf[BUFSIZ];
++	char_u msgbuf[IOSIZE];
+ 
+-	STRCPY(ebuf, (char_u *)_("E505: "));
+-	STRCAT(ebuf, IObuff);
+-	STRCAT(ebuf, (char_u *)_("is read-only (add ! to override)"));
+-	STRCPY(IObuff, ebuf);
+-	nbdebug(("    %s\n", ebuf ));
+-	emsg(IObuff);
++	vim_snprintf((char *)msgbuf, IOSIZE,
++		_("E505: %s is read-only (add ! to override)"), IObuff);
++	nbdebug(("    %s\n", msgbuf));
++	emsg(msgbuf);
+     }
+ }
+ 
+diff -Naur vim73.orig/src/normal.c vim73/src/normal.c
+--- vim73.orig/src/normal.c	2010-07-31 13:25:19.000000000 +0000
++++ vim73/src/normal.c	2013-06-07 17:07:32.362249598 +0000
+@@ -20,15 +20,19 @@
+  */
+ static int	resel_VIsual_mode = NUL;	/* 'v', 'V', or Ctrl-V */
+ static linenr_T	resel_VIsual_line_count;	/* number of lines */
+-static colnr_T	resel_VIsual_col;		/* nr of cols or end col */
++static colnr_T	resel_VIsual_vcol;		/* nr of cols or end col */
++static int	VIsual_mode_orig = NUL;         /* type of Visual mode, that user entered */
+ 
+ static int	restart_VIsual_select = 0;
+ #endif
+ 
++#ifdef FEAT_EVAL
++static void	set_vcount_ca __ARGS((cmdarg_T *cap, int *set_prevcount));
++#endif
+ static int
+-# ifdef __BORLANDC__
+-_RTLENTRYF
+-# endif
++#ifdef __BORLANDC__
++    _RTLENTRYF
++#endif
+ 		nv_compare __ARGS((const void *s1, const void *s2));
+ static int	find_command __ARGS((int cmdchar));
+ static void	op_colon __ARGS((oparg_T *oap));
+@@ -648,6 +652,14 @@
+     dont_scroll = FALSE;	/* allow scrolling here */
+ #endif
+ 
++#ifdef FEAT_EVAL
++    /* Set v:count here, when called from main() and not a stuffed
++     * command, so that v:count can be used in an expression mapping
++     * when there is no count. */
++    if (toplevel && stuff_empty())
++	set_vcount_ca(&ca, &set_prevcount);
++#endif
++
+     /*
+      * Get the command character from the user.
+      */
+@@ -689,6 +701,7 @@
+ 	else
+ 	    c = 'c';
+ 	msg_nowait = TRUE;	/* don't delay going to insert mode */
++	old_mapped_len = 0;	/* do go to Insert mode */
+     }
+ #endif
+ 
+@@ -725,15 +738,7 @@
+ 	     * command, so that v:count can be used in an expression mapping
+ 	     * right after the count. */
+ 	    if (toplevel && stuff_empty())
+-	    {
+-		long count = ca.count0;
+-
+-		/* multiply with ca.opcount the same way as below */
+-		if (ca.opcount != 0)
+-		    count = ca.opcount * (count == 0 ? 1 : count);
+-		set_vcount(count, count == 0 ? 1 : count, set_prevcount);
+-		set_prevcount = FALSE;  /* only set v:prevcount once */
+-	    }
++		set_vcount_ca(&ca, &set_prevcount);
+ #endif
+ 	    if (ctrl_w)
+ 	    {
+@@ -957,8 +962,11 @@
+ #ifdef FEAT_CMDL_INFO
+ 	    need_flushbuf |= add_to_showcmd(ca.nchar);
+ #endif
++	    /* For "gn" from redo, need to get one more char to determine the
++	     * operator */
+ 	    if (ca.nchar == 'r' || ca.nchar == '\'' || ca.nchar == '`'
+-						      || ca.nchar == Ctrl_BSL)
++						       || ca.nchar == Ctrl_BSL
++		  || ((ca.nchar == 'n' || ca.nchar == 'N') && !stuff_empty()))
+ 	    {
+ 		cp = &ca.extra_char;	/* need to get a third character */
+ 		if (ca.nchar != 'r')
+@@ -1080,6 +1088,8 @@
+ 		ca.nchar = ca.extra_char;
+ 		idx = find_command(ca.cmdchar);
+ 	    }
++	    else if ((ca.nchar == 'n' || ca.nchar == 'N') && ca.cmdchar == 'g')
++		ca.oap->op_type = get_op_type(*cp, NUL);
+ 	    else if (*cp == Ctrl_BSL)
+ 	    {
+ 		long towait = (p_ttm >= 0 ? p_ttm : p_tm);
+@@ -1199,7 +1209,16 @@
+     {
+ 	clearop(oap);
+ #ifdef FEAT_EVAL
+-	set_reg_var('"');
++	{
++	    int regname = 0;
++
++	    /* Adjust the register according to 'clipboard', so that when
++	     * "unnamed" is present it becomes '*' or '+' instead of '"'. */
++# ifdef FEAT_CLIPBOARD
++	    adjust_clip_reg(&regname);
++# endif
++	    set_reg_var(regname);
++	}
+ #endif
+     }
+ 
+@@ -1386,6 +1405,26 @@
+     opcount = ca.opcount;
+ }
+ 
++#ifdef FEAT_EVAL
++/*
++ * Set v:count and v:count1 according to "cap".
++ * Set v:prevcount only when "set_prevcount" is TRUE.
++ */
++    static void
++set_vcount_ca(cap, set_prevcount)
++    cmdarg_T	*cap;
++    int		*set_prevcount;
++{
++    long count = cap->count0;
++
++    /* multiply with cap->opcount the same way as above */
++    if (cap->opcount != 0)
++	count = cap->opcount * (count == 0 ? 1 : count);
++    set_vcount(count, count == 0 ? 1 : count, *set_prevcount);
++    *set_prevcount = FALSE;  /* only set v:prevcount once */
++}
++#endif
++
+ /*
+  * Handle an operator after visual mode or when the movement is finished
+  */
+@@ -1404,7 +1443,7 @@
+     /* The visual area is remembered for redo */
+     static int	    redo_VIsual_mode = NUL; /* 'v', 'V', or Ctrl-V */
+     static linenr_T redo_VIsual_line_count; /* number of lines */
+-    static colnr_T  redo_VIsual_col;	    /* number of cols or end column */
++    static colnr_T  redo_VIsual_vcol;	    /* number of cols or end column */
+     static long	    redo_VIsual_count;	    /* count for Visual operator */
+ # ifdef FEAT_VIRTUALEDIT
+     int		    include_line_break = FALSE;
+@@ -1419,7 +1458,7 @@
+      * This could call do_pending_operator() recursively, but that's OK
+      * because gui_yank will be TRUE for the nested call.
+      */
+-    if (clip_star.available
++    if ((clip_star.available || clip_plus.available)
+ 	    && oap->op_type != OP_NOP
+ 	    && !gui_yank
+ # ifdef FEAT_VISUAL
+@@ -1466,11 +1505,14 @@
+ 	}
+ #endif
+ 
+-	/* only redo yank when 'y' flag is in 'cpoptions' */
+-	/* never redo "zf" (define fold) */
++	/* Only redo yank when 'y' flag is in 'cpoptions'. */
++	/* Never redo "zf" (define fold). */
+ 	if ((vim_strchr(p_cpo, CPO_YANK) != NULL || oap->op_type != OP_YANK)
+ #ifdef FEAT_VISUAL
+-		&& (!VIsual_active || oap->motion_force)
++		&& ((!VIsual_active || oap->motion_force)
++		    /* Also redo Operator-pending Visual mode mappings */
++		    || (VIsual_active && cap->cmdchar == ':'
++						 && oap->op_type != OP_COLON))
+ #endif
+ 		&& cap->cmdchar != 'D'
+ #ifdef FEAT_FOLDING
+@@ -1517,22 +1559,31 @@
+ #ifdef FEAT_VISUAL
+ 	if (redo_VIsual_busy)
+ 	{
++	    /* Redo of an operation on a Visual area. Use the same size from
++	     * redo_VIsual_line_count and redo_VIsual_vcol. */
+ 	    oap->start = curwin->w_cursor;
+ 	    curwin->w_cursor.lnum += redo_VIsual_line_count - 1;
+ 	    if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
+ 		curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
+ 	    VIsual_mode = redo_VIsual_mode;
+-	    if (VIsual_mode == 'v')
++	    if (redo_VIsual_vcol == MAXCOL || VIsual_mode == 'v')
+ 	    {
+-		if (redo_VIsual_line_count <= 1)
+-		    curwin->w_cursor.col += redo_VIsual_col - 1;
++		if (VIsual_mode == 'v')
++		{
++		    if (redo_VIsual_line_count <= 1)
++		    {
++			validate_virtcol();
++			curwin->w_curswant =
++				     curwin->w_virtcol + redo_VIsual_vcol - 1;
++		    }
++		    else
++			curwin->w_curswant = redo_VIsual_vcol;
++		}
+ 		else
+-		    curwin->w_cursor.col = redo_VIsual_col;
+-	    }
+-	    if (redo_VIsual_col == MAXCOL)
+-	    {
+-		curwin->w_curswant = MAXCOL;
+-		coladvance((colnr_T)MAXCOL);
++		{
++		    curwin->w_curswant = MAXCOL;
++		}
++		coladvance(curwin->w_curswant);
+ 	    }
+ 	    cap->count0 = redo_VIsual_count;
+ 	    if (redo_VIsual_count != 0)
+@@ -1548,6 +1599,11 @@
+ 		curbuf->b_visual.vi_start = VIsual;
+ 		curbuf->b_visual.vi_end = curwin->w_cursor;
+ 		curbuf->b_visual.vi_mode = VIsual_mode;
++		if (VIsual_mode_orig != NUL)
++		{
++		    curbuf->b_visual.vi_mode = VIsual_mode_orig;
++		    VIsual_mode_orig = NUL;
++		}
+ 		curbuf->b_visual.vi_curswant = curwin->w_curswant;
+ # ifdef FEAT_EVAL
+ 		curbuf->b_visual_mode_eval = VIsual_mode;
+@@ -1678,7 +1734,7 @@
+ 		    }
+ 		}
+ 		else if (redo_VIsual_busy)
+-		    oap->end_vcol = oap->start_vcol + redo_VIsual_col - 1;
++		    oap->end_vcol = oap->start_vcol + redo_VIsual_vcol - 1;
+ 		/*
+ 		 * Correct oap->end.col and oap->start.col to be the
+ 		 * upper-left and lower-right corner of the block area.
+@@ -1703,13 +1759,22 @@
+ 		 */
+ 		resel_VIsual_mode = VIsual_mode;
+ 		if (curwin->w_curswant == MAXCOL)
+-		    resel_VIsual_col = MAXCOL;
+-		else if (VIsual_mode == Ctrl_V)
+-		    resel_VIsual_col = oap->end_vcol - oap->start_vcol + 1;
+-		else if (oap->line_count > 1)
+-		    resel_VIsual_col = oap->end.col;
++		    resel_VIsual_vcol = MAXCOL;
+ 		else
+-		    resel_VIsual_col = oap->end.col - oap->start.col + 1;
++		{
++		    if (VIsual_mode != Ctrl_V)
++			getvvcol(curwin, &(oap->end),
++						  NULL, NULL, &oap->end_vcol);
++		    if (VIsual_mode == Ctrl_V || oap->line_count <= 1)
++		    {
++			if (VIsual_mode != Ctrl_V)
++			    getvvcol(curwin, &(oap->start),
++						&oap->start_vcol, NULL, NULL);
++			resel_VIsual_vcol = oap->end_vcol - oap->start_vcol + 1;
++		    }
++		    else
++			resel_VIsual_vcol = oap->end_vcol;
++		}
+ 		resel_VIsual_line_count = oap->line_count;
+ 	    }
+ 
+@@ -1730,14 +1795,22 @@
+ 	    {
+ 		/* Prepare for redoing.  Only use the nchar field for "r",
+ 		 * otherwise it might be the second char of the operator. */
+-		prep_redo(oap->regname, 0L, NUL, 'v',
+-				get_op_char(oap->op_type),
+-				get_extra_op_char(oap->op_type),
+-				oap->op_type == OP_REPLACE ? cap->nchar : NUL);
++		if (cap->cmdchar == 'g' && (cap->nchar == 'n'
++							|| cap->nchar == 'N'))
++		    /* "gn" and "gN" are a bit different */
++		    prep_redo(oap->regname, 0L, NUL, cap->cmdchar, cap->nchar,
++					get_op_char(oap->op_type),
++					get_extra_op_char(oap->op_type));
++		else if (cap->cmdchar != ':')
++		    prep_redo(oap->regname, 0L, NUL, 'v',
++					get_op_char(oap->op_type),
++					get_extra_op_char(oap->op_type),
++					oap->op_type == OP_REPLACE
++							  ? cap->nchar : NUL);
+ 		if (!redo_VIsual_busy)
+ 		{
+ 		    redo_VIsual_mode = resel_VIsual_mode;
+-		    redo_VIsual_col = resel_VIsual_col;
++		    redo_VIsual_vcol = resel_VIsual_vcol;
+ 		    redo_VIsual_line_count = resel_VIsual_line_count;
+ 		    redo_VIsual_count = cap->count0;
+ 		}
+@@ -1763,17 +1836,25 @@
+ 		{
+ 		    oap->inclusive = FALSE;
+ 		    /* Try to include the newline, unless it's an operator
+-		     * that works on lines only */
+-		    if (*p_sel != 'o'
+-			    && !op_on_lines(oap->op_type)
+-			    && oap->end.lnum < curbuf->b_ml.ml_line_count)
++		     * that works on lines only. */
++		    if (*p_sel != 'o' && !op_on_lines(oap->op_type))
+ 		    {
+-			++oap->end.lnum;
+-			oap->end.col = 0;
++			if (oap->end.lnum < curbuf->b_ml.ml_line_count)
++			{
++			    ++oap->end.lnum;
++			    oap->end.col = 0;
+ # ifdef FEAT_VIRTUALEDIT
+-			oap->end.coladd = 0;
++			    oap->end.coladd = 0;
+ # endif
+-			++oap->line_count;
++			    ++oap->line_count;
++			}
++			else
++			{
++			    /* Cannot move below the last line, make the op
++			     * inclusive to tell the operation to include the
++			     * line break. */
++			    oap->inclusive = TRUE;
++			}
+ 		    }
+ 		}
+ 	    }
+@@ -1910,7 +1991,7 @@
+ 		beep_flush();
+ 	    else
+ 	    {
+-		(void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE);
++		(void)do_join(oap->line_count, oap->op_type == OP_JOIN, TRUE, TRUE);
+ 		auto_format(FALSE, TRUE);
+ 	    }
+ 	    break;
+@@ -1920,7 +2001,10 @@
+ 	    VIsual_reselect = FALSE;	    /* don't reselect now */
+ #endif
+ 	    if (empty_region_error)
++	    {
+ 		vim_beep();
++		CancelRedo();
++	    }
+ 	    else
+ 	    {
+ 		(void)op_delete(oap);
+@@ -1934,7 +2018,10 @@
+ 	    if (empty_region_error)
+ 	    {
+ 		if (!gui_yank)
++		{
+ 		    vim_beep();
++		    CancelRedo();
++		}
+ 	    }
+ 	    else
+ 		(void)op_yank(oap, FALSE, !gui_yank);
+@@ -1946,7 +2033,10 @@
+ 	    VIsual_reselect = FALSE;	    /* don't reselect now */
+ #endif
+ 	    if (empty_region_error)
++	    {
+ 		vim_beep();
++		CancelRedo();
++	    }
+ 	    else
+ 	    {
+ 		/* This is a new edit command, not a restart.  Need to
+@@ -2008,7 +2098,10 @@
+ 	case OP_LOWER:
+ 	case OP_ROT13:
+ 	    if (empty_region_error)
++	    {
+ 		vim_beep();
++		CancelRedo();
++	    }
+ 	    else
+ 		op_tilde(oap);
+ 	    check_cursor_col();
+@@ -2041,7 +2134,10 @@
+ #endif
+ #ifdef FEAT_VISUALEXTRA
+ 	    if (empty_region_error)
++	    {
+ 		vim_beep();
++		CancelRedo();
++	    }
+ 	    else
+ 	    {
+ 		/* This is a new edit command, not a restart.  Need to
+@@ -2071,7 +2167,10 @@
+ #ifdef FEAT_VISUALEXTRA
+ 	    if (empty_region_error)
+ #endif
++	    {
+ 		vim_beep();
++		CancelRedo();
++	    }
+ #ifdef FEAT_VISUALEXTRA
+ 	    else
+ 		op_replace(oap, cap->nchar);
+@@ -2203,6 +2302,9 @@
+ {
+ #ifdef FEAT_EVAL
+     char_u	*(argv[1]);
++# ifdef FEAT_VIRTUALEDIT
++    int		save_virtual_op = virtual_op;
++# endif
+ 
+     if (*p_opfunc == NUL)
+ 	EMSG(_("E774: 'operatorfunc' is empty"));
+@@ -2221,7 +2323,18 @@
+ 	    argv[0] = (char_u *)"line";
+ 	else
+ 	    argv[0] = (char_u *)"char";
++
++# ifdef FEAT_VIRTUALEDIT
++	/* Reset virtual_op so that 'virtualedit' can be changed in the
++	 * function. */
++	virtual_op = MAYBE;
++# endif
++
+ 	(void)call_func_retnr(p_opfunc, 1, argv, FALSE);
++
++# ifdef FEAT_VIRTUALEDIT
++	virtual_op = save_virtual_op;
++# endif
+     }
+ #else
+     EMSG(_("E775: Eval feature not available"));
+@@ -2334,7 +2447,31 @@
+ 		return FALSE;
+ 	}
+ 
+-    which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
++    for (;;)
++    {
++	which_button = get_mouse_button(KEY2TERMCAP1(c), &is_click, &is_drag);
++	if (is_drag)
++	{
++	    /* If the next character is the same mouse event then use that
++	     * one. Speeds up dragging the status line. */
++	    if (vpeekc() != NUL)
++	    {
++		int nc;
++		int save_mouse_row = mouse_row;
++		int save_mouse_col = mouse_col;
++
++		/* Need to get the character, peeking doesn't get the actual
++		 * one. */
++		nc = safe_vgetc();
++		if (c == nc)
++		    continue;
++		vungetc(nc);
++		mouse_row = save_mouse_row;
++		mouse_col = save_mouse_col;
++	    }
++	}
++	break;
++    }
+ 
+ #ifdef FEAT_MOUSESHAPE
+     /* May have stopped dragging the status or separator line.  The pointer is
+@@ -2377,7 +2514,7 @@
+ 
+ #ifndef FEAT_VISUAL
+     /*
+-     * ALT is only used for starging/extending Visual mode.
++     * ALT is only used for starting/extending Visual mode.
+      */
+     if ((mod_mask & MOD_MASK_ALT))
+ 	return FALSE;
+@@ -4342,7 +4479,7 @@
+ 	    break;
+ 	}
+ #ifdef FEAT_COMMENTS
+-	if (get_leader_len(ml_get_curline(), NULL, FALSE) > 0)
++	if (get_leader_len(ml_get_curline(), NULL, FALSE, TRUE) > 0)
+ 	{
+ 	    /* Ignore this line, continue at start of next line. */
+ 	    ++curwin->w_cursor.lnum;
+@@ -4501,6 +4638,7 @@
+ 		}
+ 		curwin->w_cursor.lnum++;
+ 		curwin->w_curswant %= width2;
++		linelen = linetabsize(ml_get_curline());
+ 	    }
+ 	}
+       }
+@@ -4545,11 +4683,10 @@
+ nv_mousescroll(cap)
+     cmdarg_T	*cap;
+ {
+-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
++# ifdef FEAT_WINDOWS
+     win_T *old_curwin = curwin;
+ 
+-    /* Currently we only get the mouse coordinates in the GUI. */
+-    if (gui.in_use && mouse_row >= 0 && mouse_col >= 0)
++    if (mouse_row >= 0 && mouse_col >= 0)
+     {
+ 	int row, col;
+ 
+@@ -4594,7 +4731,7 @@
+     }
+ # endif
+ 
+-# if defined(FEAT_GUI) && defined(FEAT_WINDOWS)
++# ifdef FEAT_WINDOWS
+     curwin->w_redr_status = TRUE;
+ 
+     curwin = old_curwin;
+@@ -4948,7 +5085,7 @@
+ 		}
+ 		break;
+ 
+-		/* "zE": erease all folds */
++		/* "zE": erase all folds */
+     case 'E':	if (foldmethodIsManual(curwin))
+ 		{
+ 		    clearFolding(curwin);
+@@ -5285,6 +5422,7 @@
+     cmdarg_T  *cap;
+ {
+     int	    old_p_im;
++    int	    cmd_result;
+ 
+ #ifdef FEAT_VISUAL
+     if (VIsual_active)
+@@ -5316,7 +5454,7 @@
+ 	old_p_im = p_im;
+ 
+ 	/* get a command line and execute it */
+-	do_cmdline(NULL, getexline, NULL,
++	cmd_result = do_cmdline(NULL, getexline, NULL,
+ 			    cap->oap->op_type != OP_NOP ? DOCMD_KEEPLINE : 0);
+ 
+ 	/* If 'insertmode' changed, enter or exit Insert mode */
+@@ -5328,12 +5466,17 @@
+ 		restart_edit = 0;
+ 	}
+ 
+-	/* The start of the operator may have become invalid by the Ex
+-	 * command. */
+-	if (cap->oap->op_type != OP_NOP
++	if (cmd_result == FAIL)
++	    /* The Ex command failed, do not execute the operator. */
++	    clearop(cap->oap);
++	else if (cap->oap->op_type != OP_NOP
+ 		&& (cap->oap->start.lnum > curbuf->b_ml.ml_line_count
+ 		    || cap->oap->start.col >
+-			       (colnr_T)STRLEN(ml_get(cap->oap->start.lnum))))
++			       (colnr_T)STRLEN(ml_get(cap->oap->start.lnum))
++		    || did_emsg
++		    ))
++	    /* The start of the operator has become invalid by the Ex command.
++	     */
+ 	    clearopbeep(cap->oap);
+     }
+ }
+@@ -5666,8 +5809,13 @@
+ 	else if (cmdchar == '#')
+ 	    aux_ptr = (char_u *)(p_magic ? "/?.*~[^$\\" : "/?^$\\");
+ 	else if (tag_cmd)
+-	    /* Don't escape spaces and Tabs in a tag with a backslash */
+-	    aux_ptr = (char_u *)"\\|\"\n[";
++	{
++	    if (curbuf->b_help)
++		/* ":help" handles unescaped argument */
++		aux_ptr = (char_u *)"";
++	    else
++		aux_ptr = (char_u *)"\\|\"\n[";
++	}
+ 	else
+ 	    aux_ptr = (char_u *)"\\|\"\n*?[";
+ 
+@@ -6980,7 +7128,18 @@
+ 	    for (n = cap->count1; n > 0; --n)
+ 	    {
+ 		State = REPLACE;
+-		ins_char(cap->nchar);
++		if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
++		{
++		    int c = ins_copychar(curwin->w_cursor.lnum
++					   + (cap->nchar == Ctrl_Y ? -1 : 1));
++		    if (c != NUL)
++			ins_char(c);
++		    else
++			/* will be decremented further down */
++			++curwin->w_cursor.col;
++		}
++		else
++		    ins_char(cap->nchar);
+ 		State = old_State;
+ 		if (cap->ncharC1 != 0)
+ 		    ins_char(cap->ncharC1);
+@@ -7002,7 +7161,15 @@
+ 		 * line will be changed.
+ 		 */
+ 		ptr = ml_get_buf(curbuf, curwin->w_cursor.lnum, TRUE);
+-		ptr[curwin->w_cursor.col] = cap->nchar;
++		if (cap->nchar == Ctrl_E || cap->nchar == Ctrl_Y)
++		{
++		  int c = ins_copychar(curwin->w_cursor.lnum
++					   + (cap->nchar == Ctrl_Y ? -1 : 1));
++		  if (c != NUL)
++		    ptr[curwin->w_cursor.col] = c;
++		}
++		else
++		    ptr[curwin->w_cursor.col] = cap->nchar;
+ 		if (p_sm && msg_silent == 0)
+ 		    showmatch(cap->nchar);
+ 		++curwin->w_cursor.col;
+@@ -7103,6 +7270,7 @@
+     {
+ 	cap->cmdchar = 'c';
+ 	cap->nchar = NUL;
++	VIsual_mode_orig = VIsual_mode; /* remember original area for gv */
+ 	VIsual_mode = 'V';
+ 	nv_operator(cap);
+     }
+@@ -7298,11 +7466,14 @@
+     static char_u trans[] = "YyDdCcxdXdAAIIrr";
+ 
+     /* Uppercase means linewise, except in block mode, then "D" deletes till
+-     * the end of the line, and "C" replaces til EOL */
++     * the end of the line, and "C" replaces till EOL */
+     if (isupper(cap->cmdchar))
+     {
+ 	if (VIsual_mode != Ctrl_V)
++	{
++	    VIsual_mode_orig = VIsual_mode;
+ 	    VIsual_mode = 'V';
++	}
+ 	else if (cap->cmdchar == 'C' || cap->cmdchar == 'D')
+ 	    curwin->w_curswant = MAXCOL;
+     }
+@@ -7322,7 +7493,10 @@
+     if (VIsual_active)	/* "vs" and "vS" are the same as "vc" */
+     {
+ 	if (cap->cmdchar == 'S')
++	{
++	    VIsual_mode_orig = VIsual_mode;
+ 	    VIsual_mode = 'V';
++	}
+ 	cap->cmdchar = 'c';
+ 	nv_operator(cap);
+     }
+@@ -7401,7 +7575,7 @@
+     pos_T	*pos;
+     int		c;
+ #ifdef FEAT_FOLDING
+-    linenr_T	lnum = curwin->w_cursor.lnum;
++    pos_T	old_cursor = curwin->w_cursor;
+     int		old_KeyTyped = KeyTyped;    /* getting file may reset it */
+ #endif
+ 
+@@ -7430,7 +7604,8 @@
+ #endif
+ #ifdef FEAT_FOLDING
+     if (cap->oap->op_type == OP_NOP
+-	    && (pos == (pos_T *)-1 || lnum != curwin->w_cursor.lnum)
++	    && pos != NULL
++	    && (pos == (pos_T *)-1 || !equalpos(old_cursor, *pos))
+ 	    && (fdo_flags & FDO_MARK)
+ 	    && old_KeyTyped)
+ 	foldOpenCursor();
+@@ -7551,13 +7726,9 @@
+     else		    /* start Visual mode */
+     {
+ 	check_visual_highlight();
+-	if (cap->count0)		    /* use previously selected part */
++	if (cap->count0 > 0 && resel_VIsual_mode != NUL)
+ 	{
+-	    if (resel_VIsual_mode == NUL)   /* there is none */
+-	    {
+-		beep_flush();
+-		return;
+-	    }
++	    /* use previously selected part */
+ 	    VIsual = curwin->w_cursor;
+ 
+ 	    VIsual_active = TRUE;
+@@ -7585,12 +7756,16 @@
+ 	    if (VIsual_mode == 'v')
+ 	    {
+ 		if (resel_VIsual_line_count <= 1)
+-		    curwin->w_cursor.col += resel_VIsual_col * cap->count0 - 1;
++		{
++		    validate_virtcol();
++		    curwin->w_curswant = curwin->w_virtcol
++					+ resel_VIsual_vcol * cap->count0 - 1;
++		}
+ 		else
+-		    curwin->w_cursor.col = resel_VIsual_col;
+-		check_cursor_col();
++		    curwin->w_curswant = resel_VIsual_vcol;
++		coladvance(curwin->w_curswant);
+ 	    }
+-	    if (resel_VIsual_col == MAXCOL)
++	    if (resel_VIsual_vcol == MAXCOL)
+ 	    {
+ 		curwin->w_curswant = MAXCOL;
+ 		coladvance((colnr_T)MAXCOL);
+@@ -7599,7 +7774,7 @@
+ 	    {
+ 		validate_virtcol();
+ 		curwin->w_curswant = curwin->w_virtcol
+-					 + resel_VIsual_col * cap->count0 - 1;
++					+ resel_VIsual_vcol * cap->count0 - 1;
+ 		coladvance(curwin->w_curswant);
+ 	    }
+ 	    else
+@@ -7612,6 +7787,16 @@
+ 		/* start Select mode when 'selectmode' contains "cmd" */
+ 		may_start_select('c');
+ 	    n_start_visual_mode(cap->cmdchar);
++	    if (VIsual_mode != 'V' && *p_sel == 'e')
++		++cap->count1;  /* include one more char */
++	    if (cap->count0 > 0 && --cap->count1 > 0)
++	    {
++		/* With a count select that many characters or lines. */
++		if (VIsual_mode == 'v' || VIsual_mode == Ctrl_V)
++		    nv_right(cap);
++		else if (VIsual_mode == 'V')
++		    nv_down(cap);
++	    }
+ 	}
+     }
+ }
+@@ -7659,7 +7844,10 @@
+      * virtualedit.  Recalculate curwin->w_cursor to avoid bad hilighting.
+      */
+     if (c == Ctrl_V && (ve_flags & VE_BLOCK) && gchar_cursor() == TAB)
++    {
++	validate_virtcol();
+ 	coladvance(curwin->w_virtcol);
++    }
+ #endif
+     VIsual = curwin->w_cursor;
+ 
+@@ -7870,6 +8058,18 @@
+ 	break;
+ #endif /* FEAT_VISUAL */
+ 
++    /* "gn", "gN" visually select next/previous search match
++     * "gn" selects next match
++     * "gN" selects previous match
++     */
++    case 'N':
++    case 'n':
++#ifdef FEAT_VISUAL
++	if (!current_search(cap->count1, cap->nchar == 'n'))
++#endif
++	    clearopbeep(oap);
++	break;
++
+     /*
+      * "gj" and "gk" two new funny movement keys -- up and down
+      * movement based on *screen* line rather than *file* line.
+@@ -8274,10 +8474,12 @@
+ 
+ #ifdef FEAT_WINDOWS
+     case 't':
+-	goto_tabpage((int)cap->count0);
++	if (!checkclearop(oap))
++	    goto_tabpage((int)cap->count0);
+ 	break;
+     case 'T':
+-	goto_tabpage(-(int)cap->count1);
++	if (!checkclearop(oap))
++	    goto_tabpage(-(int)cap->count1);
+ 	break;
+ #endif
+ 
+@@ -8479,7 +8681,9 @@
+     cap->oap->motion_type = MLINE;
+     if (cursor_down(cap->count1 - 1L, cap->oap->op_type == OP_NOP) == FAIL)
+ 	clearopbeep(cap->oap);
+-    else if (  cap->oap->op_type == OP_DELETE
++    else if (  (cap->oap->op_type == OP_DELETE /* only with linewise motions */
++		&& cap->oap->motion_force != 'v'
++		&& cap->oap->motion_force != Ctrl_V)
+ 	    || cap->oap->op_type == OP_LSHIFT
+ 	    || cap->oap->op_type == OP_RSHIFT)
+ 	beginline(BL_SOL | BL_FIX);
+@@ -8524,7 +8728,7 @@
+     else
+ 	curwin->w_curswant = 0;
+     /* keep curswant at the column where we wanted to go, not where
+-       we ended; differs if line is too short */
++     * we ended; differs if line is too short */
+     curwin->w_set_curswant = FALSE;
+ }
+ 
+@@ -8601,7 +8805,7 @@
+ 		 * at first, but it's really more what we mean when we say
+ 		 * 'cw'.
+ 		 * Another strangeness: When standing on the end of a word
+-		 * "ce" will change until the end of the next wordt, but "cw"
++		 * "ce" will change until the end of the next word, but "cw"
+ 		 * will change only one character! This is done by setting
+ 		 * flag.
+ 		 */
+@@ -8736,7 +8940,7 @@
+ 	{
+ 	    --pp->col;
+ #ifdef FEAT_MBYTE
+-	    mb_adjustpos(pp);
++	    mb_adjustpos(curbuf, pp);
+ #endif
+ 	}
+ 	else if (pp->lnum > 1)
+@@ -8947,7 +9151,7 @@
+ 		{
+ 		    int save_State = State;
+ 
+-		    /* Pretent Insert mode here to allow the cursor on the
++		    /* Pretend Insert mode here to allow the cursor on the
+ 		     * character past the end of the line */
+ 		    State = INSERT;
+ 		    coladvance((colnr_T)MAXCOL);
+@@ -8986,7 +9190,7 @@
+ 	{
+ 	    int save_State = State;
+ 
+-	    /* Pretent Insert mode here to allow the cursor on the
++	    /* Pretend Insert mode here to allow the cursor on the
+ 	     * character past the end of the line */
+ 	    State = INSERT;
+ 	    coladvance(getviscol());
+@@ -9205,7 +9409,7 @@
+ 	{
+ 	    prep_redo(cap->oap->regname, cap->count0,
+ 			 NUL, cap->cmdchar, NUL, NUL, cap->nchar);
+-	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE);
++	    (void)do_join(cap->count0, cap->nchar == NUL, TRUE, TRUE);
+ 	}
+     }
+ }
+@@ -9261,14 +9465,15 @@
+ # ifdef FEAT_CLIPBOARD
+ 	    adjust_clip_reg(&regname);
+ # endif
+-	    if (regname == 0 || VIM_ISDIGIT(regname)
++           if (regname == 0 || regname == '"'
++				     || VIM_ISDIGIT(regname) || regname == '-'
+ # ifdef FEAT_CLIPBOARD
+ 		    || (clip_unnamed && (regname == '*' || regname == '+'))
+ # endif
+ 
+ 		    )
+ 	    {
+-		/* the delete is going to overwrite the register we want to
++		/* The delete is going to overwrite the register we want to
+ 		 * put, save it first. */
+ 		reg1 = get_register(regname, TRUE);
+ 	    }
+diff -Naur vim73.orig/src/ops.c vim73/src/ops.c
+--- vim73.orig/src/ops.c	2010-08-01 12:16:08.000000000 +0000
++++ vim73/src/ops.c	2013-06-07 17:07:32.395582836 +0000
+@@ -112,6 +112,9 @@
+ # endif
+ #endif
+ static void	dis_msg __ARGS((char_u *p, int skip_esc));
++#if defined(FEAT_COMMENTS) || defined(PROTO)
++static char_u	*skip_comment __ARGS((char_u *line, int process, int include_space, int *is_comment));
++#endif
+ #ifdef FEAT_VISUAL
+ static void	block_prep __ARGS((oparg_T *oap, struct block_def *, linenr_T, int));
+ #endif
+@@ -329,7 +332,7 @@
+ {
+     int		count;
+     int		i, j;
+-    int		p_sw = (int)curbuf->b_p_sw;
++    int		p_sw = (int)get_sw_value();
+ 
+     count = get_indent();	/* get current indent */
+ 
+@@ -385,7 +388,7 @@
+     int			total;
+     char_u		*newp, *oldp;
+     int			oldcol = curwin->w_cursor.col;
+-    int			p_sw = (int)curbuf->b_p_sw;
++    int			p_sw = (int)get_sw_value();
+     int			p_ts = (int)curbuf->b_p_ts;
+     struct block_def	bd;
+     int			incr;
+@@ -395,7 +398,7 @@
+ #ifdef FEAT_RIGHTLEFT
+     int			old_p_ri = p_ri;
+ 
+-    p_ri = 0;			/* don't want revins in ident */
++    p_ri = 0;			/* don't want revins in indent */
+ #endif
+ 
+     State = INSERT;		/* don't want REPLACE for State */
+@@ -959,8 +962,14 @@
+      * selection too. */
+     if (name == '*' && clip_star.available)
+     {
+-	if (clip_isautosel())
+-	    clip_update_selection();
++	if (clip_isautosel_star())
++	    clip_update_selection(&clip_star);
++	may_get_selection(name);
++    }
++    if (name == '+' && clip_plus.available)
++    {
++	if (clip_isautosel_plus())
++	    clip_update_selection(&clip_plus);
+ 	may_get_selection(name);
+     }
+ #endif
+@@ -1008,6 +1017,19 @@
+     may_set_selection();
+ # endif
+ }
++
++    void
++free_register(reg)
++    void	*reg;
++{
++    struct yankreg tmp;
++
++    tmp = *y_current;
++    *y_current = *(struct yankreg *)reg;
++    free_yank_all();
++    vim_free(reg);
++    *y_current = tmp;
++}
+ #endif
+ 
+ #if defined(FEAT_MOUSE) || defined(PROTO)
+@@ -1584,9 +1606,11 @@
+ adjust_clip_reg(rp)
+     int		*rp;
+ {
+-    /* If no reg. specified, and "unnamed" is in 'clipboard', use '*' reg. */
+-    if (*rp == 0 && clip_unnamed)
+-	*rp = '*';
++    /* If no reg. specified, and "unnamed" or "unnamedplus" is in 'clipboard',
++     * use '*' or '+' reg, respectively. "unnamedplus" prevails. */
++    if (*rp == 0 && clip_unnamed != 0)
++	*rp = ((clip_unnamed & CLIP_UNNAMED_PLUS) && clip_plus.available)
++								  ? '+' : '*';
+     if (!clip_star.available && *rp == '*')
+ 	*rp = 0;
+     if (!clip_plus.available && *rp == '+')
+@@ -1612,6 +1636,7 @@
+ #endif
+     linenr_T		old_lcount = curbuf->b_ml.ml_line_count;
+     int			did_yank = FALSE;
++    int			orig_regname = oap->regname;
+ 
+     if (curbuf->b_ml.ml_flags & ML_EMPTY)	    /* nothing to do */
+ 	return OK;
+@@ -1646,9 +1671,12 @@
+ 	    && !oap->block_mode
+ #endif
+ 	    && oap->line_count > 1
++	    && oap->motion_force == NUL
+ 	    && oap->op_type == OP_DELETE)
+     {
+-	ptr = ml_get(oap->end.lnum) + oap->end.col + oap->inclusive;
++	ptr = ml_get(oap->end.lnum) + oap->end.col;
++	if (*ptr != NUL)
++	    ptr += oap->inclusive;
+ 	ptr = skipwhite(ptr);
+ 	if (*ptr == NUL && inindent(0))
+ 	    oap->motion_type = MLINE;
+@@ -1701,8 +1729,10 @@
+ 	/*
+ 	 * Put deleted text into register 1 and shift number registers if the
+ 	 * delete contains a line break, or when a regname has been specified.
++	 * Use the register name from before adjust_clip_reg() may have
++	 * changed it.
+ 	 */
+-	if (oap->regname != 0 || oap->motion_type == MLINE
++	if (orig_regname != 0 || oap->motion_type == MLINE
+ 				   || oap->line_count > 1 || oap->use_reg_one)
+ 	{
+ 	    y_current = &y_regs[9];
+@@ -1715,9 +1745,14 @@
+ 		did_yank = TRUE;
+ 	}
+ 
+-	/* Yank into small delete register when no register specified and the
+-	 * delete is within one line. */
+-	if (oap->regname == 0 && oap->motion_type != MLINE
++	/* Yank into small delete register when no named register specified
++	 * and the delete is within one line. */
++	if ((
++#ifdef FEAT_CLIPBOARD
++	    ((clip_unnamed & CLIP_UNNAMED) && oap->regname == '*') ||
++	    ((clip_unnamed & CLIP_UNNAMED_PLUS) && oap->regname == '+') ||
++#endif
++	    oap->regname == 0) && oap->motion_type != MLINE
+ 						      && oap->line_count == 1)
+ 	{
+ 	    oap->regname = '-';
+@@ -1918,38 +1953,66 @@
+ 		    curwin->w_cursor.coladd = 0;
+ 	    }
+ #endif
+-	    (void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
++	    if (oap->op_type == OP_DELETE
++		    && oap->inclusive
++		    && oap->end.lnum == curbuf->b_ml.ml_line_count
++		    && n > (int)STRLEN(ml_get(oap->end.lnum)))
++	    {
++		/* Special case: gH<Del> deletes the last line. */
++		del_lines(1L, FALSE);
++	    }
++	    else
++	    {
++		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ 				    && !oap->is_VIsual
+ #endif
+ 							);
++	    }
+ 	}
+ 	else				/* delete characters between lines */
+ 	{
+ 	    pos_T   curpos;
++	    int     delete_last_line;
+ 
+ 	    /* save deleted and changed lines for undo */
+ 	    if (u_save((linenr_T)(curwin->w_cursor.lnum - 1),
+ 		 (linenr_T)(curwin->w_cursor.lnum + oap->line_count)) == FAIL)
+ 		return FAIL;
+ 
++	    delete_last_line = (oap->end.lnum == curbuf->b_ml.ml_line_count);
+ 	    truncate_line(TRUE);	/* delete from cursor to end of line */
+ 
+ 	    curpos = curwin->w_cursor;	/* remember curwin->w_cursor */
+ 	    ++curwin->w_cursor.lnum;
+ 	    del_lines((long)(oap->line_count - 2), FALSE);
+ 
+-	    /* delete from start of line until op_end */
+-	    curwin->w_cursor.col = 0;
+-	    (void)del_bytes((long)(oap->end.col + 1 - !oap->inclusive),
+-					!virtual_op, oap->op_type == OP_DELETE
++	    if (delete_last_line)
++		oap->end.lnum = curbuf->b_ml.ml_line_count;
++
++	    n = (oap->end.col + 1 - !oap->inclusive);
++	    if (oap->inclusive && delete_last_line
++		    && n > (int)STRLEN(ml_get(oap->end.lnum)))
++	    {
++		/* Special case: gH<Del> deletes the last line. */
++		del_lines(1L, FALSE);
++		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
++		if (curwin->w_cursor.lnum > curbuf->b_ml.ml_line_count)
++		    curwin->w_cursor.lnum = curbuf->b_ml.ml_line_count;
++	    }
++	    else
++	    {
++		/* delete from start of line until op_end */
++		curwin->w_cursor.col = 0;
++		(void)del_bytes((long)n, !virtual_op, oap->op_type == OP_DELETE
+ #ifdef FEAT_VISUAL
+ 					&& !oap->is_VIsual
+ #endif
+ 							    );
+-	    curwin->w_cursor = curpos;		/* restore curwin->w_cursor */
+-
+-	    (void)do_join(2, FALSE, FALSE);
++		curwin->w_cursor = curpos;	/* restore curwin->w_cursor */
++	    }
++	    if (curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
++		(void)do_join(2, FALSE, FALSE, FALSE);
+ 	}
+     }
+ 
+@@ -2144,7 +2207,8 @@
+ 		{
+ 		    /* This is slow, but it handles replacing a single-byte
+ 		     * with a multi-byte and the other way around. */
+-		    oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
++		    if (curwin->w_cursor.lnum == oap->end.lnum)
++			oap->end.col += (*mb_char2len)(c) - (*mb_char2len)(n);
+ 		    n = State;
+ 		    State = REPLACE;
+ 		    ins_char(c);
+@@ -2569,7 +2633,8 @@
+ 	firstline = ml_get(oap->start.lnum) + bd.textcol;
+ 	if (oap->op_type == OP_APPEND)
+ 	    firstline += bd.textlen;
+-	if ((ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
++	if (pre_textlen >= 0
++		     && (ins_len = (long)STRLEN(firstline) - pre_textlen) > 0)
+ 	{
+ 	    ins_text = vim_strnsave(firstline, (int)ins_len);
+ 	    if (ins_text != NULL)
+@@ -2842,6 +2907,9 @@
+     char_u		*p;
+     char_u		*pnew;
+     struct block_def	bd;
++#if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++    int			did_star = FALSE;
++#endif
+ 
+ 				    /* check for read-only register */
+     if (oap->regname != 0 && !valid_yank_reg(oap->regname, TRUE))
+@@ -3000,6 +3068,8 @@
+ 			}
+ #endif
+ 		    }
++		    if (endcol == MAXCOL)
++			endcol = (colnr_T)STRLEN(p);
+ 		    if (startcol > endcol
+ #ifdef FEAT_VIRTUALEDIT
+ 			    || is_oneChar
+@@ -3008,8 +3078,6 @@
+ 			bd.textlen = 0;
+ 		    else
+ 		    {
+-			if (endcol == MAXCOL)
+-			    endcol = (colnr_T)STRLEN(p);
+ 			bd.textlen = endcol - startcol + oap->inclusive;
+ 		    }
+ 		    bd.textstart = p + startcol;
+@@ -3115,7 +3183,8 @@
+      */
+     if (clip_star.available
+ 	    && (curr == &(y_regs[STAR_REGISTER])
+-		|| (!deleting && oap->regname == 0 && clip_unnamed)))
++		|| (!deleting && oap->regname == 0
++					   && (clip_unnamed & CLIP_UNNAMED))))
+     {
+ 	if (curr != &(y_regs[STAR_REGISTER]))
+ 	    /* Copy the text from register 0 to the clipboard register. */
+@@ -3123,6 +3192,9 @@
+ 
+ 	clip_own_selection(&clip_star);
+ 	clip_gen_set_selection(&clip_star);
++# ifdef FEAT_X11
++	did_star = TRUE;
++# endif
+     }
+ 
+ # ifdef FEAT_X11
+@@ -3130,12 +3202,19 @@
+      * If we were yanking to the '+' register, send result to selection.
+      * Also copy to the '*' register, in case auto-select is off.
+      */
+-    else if (clip_plus.available && curr == &(y_regs[PLUS_REGISTER]))
++    if (clip_plus.available
++	    && (curr == &(y_regs[PLUS_REGISTER])
++		|| (!deleting && oap->regname == 0
++				      && (clip_unnamed & CLIP_UNNAMED_PLUS))))
+     {
+-	/* No need to copy to * register upon 'unnamed' now - see below */
++	if (curr != &(y_regs[PLUS_REGISTER]))
++	    /* Copy the text from register 0 to the clipboard register. */
++	    copy_yank_reg(&(y_regs[PLUS_REGISTER]));
++
+ 	clip_own_selection(&clip_plus);
+ 	clip_gen_set_selection(&clip_plus);
+-	if (!clip_isautosel())
++	if (!clip_isautosel_star() && !did_star
++					  && curr == &(y_regs[PLUS_REGISTER]))
+ 	{
+ 	    copy_yank_reg(&(y_regs[STAR_REGISTER]));
+ 	    clip_own_selection(&clip_star);
+@@ -3286,6 +3365,12 @@
+ 	    return;
+     }
+ 
++#ifdef FEAT_AUTOCMD
++    /* Autocommands may be executed when saving lines for undo, which may make
++     * y_array invalid.  Start undo now to avoid that. */
++    u_save(curwin->w_cursor.lnum, curwin->w_cursor.lnum + 1);
++#endif
++
+     if (insert_string != NULL)
+     {
+ 	y_type = MCHAR;
+@@ -3293,8 +3378,8 @@
+ 	if (regname == '=')
+ 	{
+ 	    /* For the = register we need to split the string at NL
+-	     * characters. */
+-	    /* Loop twice: count the number of lines and save them. */
++	     * characters.
++	     * Loop twice: count the number of lines and save them. */
+ 	    for (;;)
+ 	    {
+ 		y_size = 0;
+@@ -3310,7 +3395,7 @@
+ 			if (y_array != NULL)
+ 			    *ptr = NUL;
+ 			++ptr;
+-			/* A trailing '\n' makes the string linewise */
++			/* A trailing '\n' makes the register linewise. */
+ 			if (*ptr == NUL)
+ 			{
+ 			    y_type = MLINE;
+@@ -3979,7 +4064,12 @@
+     for (i = -1; i < NUM_REGISTERS && !got_int; ++i)
+     {
+ 	name = get_register_name(i);
+-	if (arg != NULL && vim_strchr(arg, name) == NULL)
++	if (arg != NULL && vim_strchr(arg, name) == NULL
++#ifdef ONE_CLIPBOARD
++	    /* Star register and plus register contain the same thing. */
++		&& (name != '*' || vim_strchr(arg, '+') == NULL)
++#endif
++		)
+ 	    continue;	    /* did not ask for this register */
+ 
+ #ifdef FEAT_CLIPBOARD
+@@ -4140,22 +4230,101 @@
+     ui_breakcheck();
+ }
+ 
++#if defined(FEAT_COMMENTS) || defined(PROTO)
++/*
++ * If "process" is TRUE and the line begins with a comment leader (possibly
++ * after some white space), return a pointer to the text after it. Put a boolean
++ * value indicating whether the line ends with an unclosed comment in
++ * "is_comment".
++ * line - line to be processed,
++ * process - if FALSE, will only check whether the line ends with an unclosed
++ *	     comment,
++ * include_space - whether to also skip space following the comment leader,
++ * is_comment - will indicate whether the current line ends with an unclosed
++ *		comment.
++ */
++    static char_u *
++skip_comment(line, process, include_space, is_comment)
++    char_u   *line;
++    int      process;
++    int	     include_space;
++    int      *is_comment;
++{
++    char_u *comment_flags = NULL;
++    int    lead_len;
++    int    leader_offset = get_last_leader_offset(line, &comment_flags);
++
++    *is_comment = FALSE;
++    if (leader_offset != -1)
++    {
++	/* Let's check whether the line ends with an unclosed comment.
++	 * If the last comment leader has COM_END in flags, there's no comment.
++	 */
++	while (*comment_flags)
++	{
++	    if (*comment_flags == COM_END
++		    || *comment_flags == ':')
++		break;
++	    ++comment_flags;
++	}
++	if (*comment_flags != COM_END)
++	    *is_comment = TRUE;
++    }
++
++    if (process == FALSE)
++	return line;
++
++    lead_len = get_leader_len(line, &comment_flags, FALSE, include_space);
++
++    if (lead_len == 0)
++	return line;
++
++    /* Find:
++     * - COM_END,
++     * - colon,
++     * whichever comes first.
++     */
++    while (*comment_flags)
++    {
++	if (*comment_flags == COM_END
++		|| *comment_flags == ':')
++	{
++	    break;
++	}
++	++comment_flags;
++    }
++
++    /* If we found a colon, it means that we are not processing a line
++     * starting with a closing part of a three-part comment. That's good,
++     * because we don't want to remove those as this would be annoying.
++     */
++    if (*comment_flags == ':' || *comment_flags == NUL)
++	line += lead_len;
++
++    return line;
++}
++#endif
++
+ /*
+  * Join 'count' lines (minimal 2) at cursor position.
+  * When "save_undo" is TRUE save lines for undo first.
++ * Set "use_formatoptions" to FALSE when e.g. processing
++ * backspace and comment leaders should not be removed.
+  *
+  * return FAIL for failure, OK otherwise
+  */
+     int
+-do_join(count, insert_space, save_undo)
++do_join(count, insert_space, save_undo, use_formatoptions)
+     long    count;
+     int	    insert_space;
+     int	    save_undo;
++    int	    use_formatoptions UNUSED;
+ {
+     char_u	*curr = NULL;
++    char_u      *curr_start = NULL;
+     char_u	*cend;
+     char_u	*newp;
+-    char_u	*spaces;	/* number of spaces inserte before a line */
++    char_u	*spaces;	/* number of spaces inserted before a line */
+     int		endcurr1 = NUL;
+     int		endcurr2 = NUL;
+     int		currsize = 0;	/* size of the current line */
+@@ -4163,6 +4332,13 @@
+     linenr_T	t;
+     colnr_T	col = 0;
+     int		ret = OK;
++#if defined(FEAT_COMMENTS) || defined(PROTO)
++    int		*comments = NULL;
++    int		remove_comments = (use_formatoptions == TRUE)
++				  && has_format_option(FO_REMOVE_COMS);
++    int		prev_was_comment;
++#endif
++
+ 
+     if (save_undo && u_save((linenr_T)(curwin->w_cursor.lnum - 1),
+ 			    (linenr_T)(curwin->w_cursor.lnum + count)) == FAIL)
+@@ -4174,6 +4350,17 @@
+     spaces = lalloc_clear((long_u)count, TRUE);
+     if (spaces == NULL)
+ 	return FAIL;
++#if defined(FEAT_COMMENTS) || defined(PROTO)
++    if (remove_comments)
++    {
++	comments = (int *)lalloc_clear((long_u)count * sizeof(int), TRUE);
++	if (comments == NULL)
++	{
++	    vim_free(spaces);
++	    return FAIL;
++	}
++    }
++#endif
+ 
+     /*
+      * Don't move anything, just compute the final line length
+@@ -4181,7 +4368,26 @@
+      */
+     for (t = 0; t < count; ++t)
+     {
+-	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
++	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t));
++#if defined(FEAT_COMMENTS) || defined(PROTO)
++	if (remove_comments)
++	{
++	    /* We don't want to remove the comment leader if the
++	     * previous line is not a comment. */
++	    if (t > 0 && prev_was_comment)
++	    {
++
++		char_u *new_curr = skip_comment(curr, TRUE, insert_space,
++							   &prev_was_comment);
++		comments[t] = (int)(new_curr - curr);
++		curr = new_curr;
++	    }
++	    else
++		curr = skip_comment(curr, FALSE, insert_space,
++							   &prev_was_comment);
++	}
++#endif
++
+ 	if (insert_space && t > 0)
+ 	{
+ 	    curr = skipwhite(curr);
+@@ -4265,10 +4471,14 @@
+ 	    copy_spaces(cend, (size_t)(spaces[t]));
+ 	}
+ 	mark_col_adjust(curwin->w_cursor.lnum + t, (colnr_T)0, (linenr_T)-t,
+-				 (long)(cend - newp + spaces[t]));
++			 (long)(cend - newp + spaces[t] - (curr - curr_start)));
+ 	if (t == 0)
+ 	    break;
+-	curr = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
++	curr = curr_start = ml_get((linenr_T)(curwin->w_cursor.lnum + t - 1));
++#if defined(FEAT_COMMENTS) || defined(PROTO)
++	if (remove_comments)
++	    curr += comments[t - 1];
++#endif
+ 	if (insert_space && t > 1)
+ 	    curr = skipwhite(curr);
+ 	currsize = (int)STRLEN(curr);
+@@ -4306,6 +4516,10 @@
+ 
+ theend:
+     vim_free(spaces);
++#if defined(FEAT_COMMENTS) || defined(PROTO)
++    if (remove_comments)
++	vim_free(comments);
++#endif
+     return ret;
+ }
+ 
+@@ -4388,7 +4602,7 @@
+ #endif
+ 
+ /*
+- * implementation of the format operator 'gq'
++ * Implementation of the format operator 'gq'.
+  */
+     void
+ op_format(oap, keep_cursor)
+@@ -4539,9 +4753,11 @@
+     char_u	*leader_flags = NULL;	/* flags for leader of current line */
+     char_u	*next_leader_flags;	/* flags for leader of next line */
+     int		do_comments;		/* format comments */
++    int		do_comments_list = 0;	/* format comments with 'n' or '2' */
+ #endif
+     int		advance = TRUE;
+-    int		second_indent = -1;
++    int		second_indent = -1;	/* indent for second line (comment
++					 * aware) */
+     int		do_second_indent;
+     int		do_number_indent;
+     int		do_trail_white;
+@@ -4644,18 +4860,46 @@
+ 	    if (first_par_line
+ 		    && (do_second_indent || do_number_indent)
+ 		    && prev_is_end_par
+-		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count
++		    && curwin->w_cursor.lnum < curbuf->b_ml.ml_line_count)
++	    {
++		if (do_second_indent && !lineempty(curwin->w_cursor.lnum + 1))
++		{
+ #ifdef FEAT_COMMENTS
+-		    && leader_len == 0
+-		    && next_leader_len == 0
++		    if (leader_len == 0 && next_leader_len == 0)
++		    {
++			/* no comment found */
+ #endif
+-		    )
+-	    {
+-		if (do_second_indent
+-			&& !lineempty(curwin->w_cursor.lnum + 1))
+-		    second_indent = get_indent_lnum(curwin->w_cursor.lnum + 1);
++			second_indent =
++				   get_indent_lnum(curwin->w_cursor.lnum + 1);
++#ifdef FEAT_COMMENTS
++		    }
++		    else
++		    {
++			second_indent = next_leader_len;
++			do_comments_list = 1;
++		    }
++#endif
++		}
+ 		else if (do_number_indent)
+-		    second_indent = get_number_indent(curwin->w_cursor.lnum);
++		{
++#ifdef FEAT_COMMENTS
++		    if (leader_len == 0 && next_leader_len == 0)
++		    {
++			/* no comment found */
++#endif
++			second_indent =
++				     get_number_indent(curwin->w_cursor.lnum);
++#ifdef FEAT_COMMENTS
++		    }
++		    else
++		    {
++			/* get_number_indent() is now "comment aware"... */
++			second_indent =
++				     get_number_indent(curwin->w_cursor.lnum);
++			do_comments_list = 1;
++		    }
++#endif
++		}
+ 	    }
+ 
+ 	    /*
+@@ -4694,6 +4938,8 @@
+ 		insertchar(NUL, INSCHAR_FORMAT
+ #ifdef FEAT_COMMENTS
+ 			+ (do_comments ? INSCHAR_DO_COM : 0)
++			+ (do_comments && do_comments_list
++						       ? INSCHAR_COM_LIST : 0)
+ #endif
+ 			+ (avoid_fex ? INSCHAR_NO_FEX : 0), second_indent);
+ 		State = old_State;
+@@ -4730,7 +4976,7 @@
+ 						      (long)-next_leader_len);
+ #endif
+ 		curwin->w_cursor.lnum--;
+-		if (do_join(2, TRUE, FALSE) == FAIL)
++		if (do_join(2, TRUE, FALSE, FALSE) == FAIL)
+ 		{
+ 		    beep_flush();
+ 		    break;
+@@ -4786,7 +5032,7 @@
+ 
+     ptr = ml_get(lnum);
+     if (do_comments)
+-	*leader_len = get_leader_len(ptr, leader_flags, FALSE);
++	*leader_len = get_leader_len(ptr, leader_flags, FALSE, TRUE);
+     else
+ 	*leader_len = 0;
+ 
+@@ -5596,6 +5842,8 @@
+ 					       && len < 1024*1024 && len > 0)
+     {
+ #ifdef FEAT_MBYTE
++	int ok = TRUE;
++
+ 	/* The CUT_BUFFER0 is supposed to always contain latin1.  Convert from
+ 	 * 'enc' when it is a multi-byte encoding.  When 'enc' is an 8-bit
+ 	 * encoding conversion usually doesn't work, so keep the text as-is.
+@@ -5610,6 +5858,7 @@
+ 		int	intlen = len;
+ 		char_u	*conv_str;
+ 
++		vc.vc_fail = TRUE;
+ 		conv_str = string_convert(&vc, str, &intlen);
+ 		len = intlen;
+ 		if (conv_str != NULL)
+@@ -5617,12 +5866,26 @@
+ 		    vim_free(str);
+ 		    str = conv_str;
+ 		}
++		else
++		{
++		    ok = FALSE;
++		}
+ 		convert_setup(&vc, NULL, NULL);
+ 	    }
++	    else
++	    {
++		ok = FALSE;
++	    }
+ 	}
++
++	/* Do not store the string if conversion failed.  Better to use any
++	 * other selection than garbled text. */
++	if (ok)
+ #endif
+-	XStoreBuffer(dpy, (char *)str, (int)len, 0);
+-	XFlush(dpy);
++	{
++	    XStoreBuffer(dpy, (char *)str, (int)len, 0);
++	    XFlush(dpy);
++	}
+     }
+ 
+     vim_free(str);
+@@ -5712,7 +5975,9 @@
+     }
+ }
+ 
+-/* Convert from the GUI selection string into the '*'/'+' register */
++/*
++ * Convert from the GUI selection string into the '*'/'+' register.
++ */
+     void
+ clip_yank_selection(type, str, len, cbd)
+     int		type;
+@@ -6069,9 +6334,6 @@
+     if (yank_type == MBLOCK)
+ 	yank_type = MAUTO;
+ #endif
+-    if (yank_type == MAUTO)
+-	yank_type = ((len > 0 && (str[len - 1] == '\n' || str[len - 1] == '\r'))
+-							     ? MLINE : MCHAR);
+     str_to_reg(y_current, yank_type, str, len, block_len);
+ 
+ # ifdef FEAT_CLIPBOARD
+@@ -6092,13 +6354,14 @@
+  * is appended.
+  */
+     static void
+-str_to_reg(y_ptr, type, str, len, blocklen)
++str_to_reg(y_ptr, yank_type, str, len, blocklen)
+     struct yankreg	*y_ptr;		/* pointer to yank register */
+-    int			type;		/* MCHAR, MLINE or MBLOCK */
++    int			yank_type;	/* MCHAR, MLINE, MBLOCK, MAUTO */
+     char_u		*str;		/* string to put in register */
+     long		len;		/* length of string */
+     long		blocklen;	/* width of Visual block */
+ {
++    int		type;			/* MCHAR, MLINE or MBLOCK */
+     int		lnum;
+     long	start;
+     long	i;
+@@ -6115,6 +6378,12 @@
+     if (y_ptr->y_array == NULL)		/* NULL means empty register */
+ 	y_ptr->y_size = 0;
+ 
++    if (yank_type == MAUTO)
++	type = ((len > 0 && (str[len - 1] == NL || str[len - 1] == CAR))
++							     ? MLINE : MCHAR);
++    else
++	type = yank_type;
++
+     /*
+      * Count the number of lines within the string
+      */
+@@ -6236,7 +6505,7 @@
+     long	chars = 0;
+     int		is_word = 0;
+ 
+-    for (i = 0; line[i] && i < limit; )
++    for (i = 0; i < limit && line[i] != NUL; )
+     {
+ 	if (is_word)
+ 	{
+@@ -6261,7 +6530,7 @@
+     *wc += words;
+ 
+     /* Add eol_size if the end of line was reached before hitting limit. */
+-    if (line[i] == NUL && i < limit)
++    if (i < limit && line[i] == NUL)
+     {
+ 	i += eol_size;
+ 	chars += eol_size;
+diff -Naur vim73.orig/src/option.c vim73/src/option.c
+--- vim73.orig/src/option.c	2010-08-04 18:49:18.000000000 +0000
++++ vim73/src/option.c	2013-06-07 17:07:32.422249427 +0000
+@@ -140,9 +140,6 @@
+ #define PV_MOD		OPT_BUF(BV_MOD)
+ #define PV_MPS		OPT_BUF(BV_MPS)
+ #define PV_NF		OPT_BUF(BV_NF)
+-#ifdef FEAT_OSFILETYPE
+-# define PV_OFT		OPT_BUF(BV_OFT)
+-#endif
+ #ifdef FEAT_COMPL_FUNC
+ # define PV_OFU		OPT_BUF(BV_OFU)
+ #endif
+@@ -337,9 +334,6 @@
+ static int	p_mod;
+ static char_u	*p_mps;
+ static char_u	*p_nf;
+-#ifdef FEAT_OSFILETYPE
+-static char_u	*p_oft;
+-#endif
+ static int	p_pi;
+ #ifdef FEAT_TEXTOBJ
+ static char_u	*p_qe;
+@@ -439,17 +433,19 @@
+ #define P_RCLR		0x7000	/* clear and redraw all */
+ 
+ #define P_COMMA		0x8000	/* comma separated list */
+-#define P_NODUP		0x10000L/* don't allow duplicate strings */
+-#define P_FLAGLIST	0x20000L/* list of single-char flags */
++#define P_NODUP		0x10000L /* don't allow duplicate strings */
++#define P_FLAGLIST	0x20000L /* list of single-char flags */
+ 
+-#define P_SECURE	0x40000L/* cannot change in modeline or secure mode */
+-#define P_GETTEXT	0x80000L/* expand default value with _() */
+-#define P_NOGLOB       0x100000L/* do not use local value for global vimrc */
+-#define P_NFNAME       0x200000L/* only normal file name chars allowed */
+-#define P_INSECURE     0x400000L/* option was set from a modeline */
+-#define P_PRI_MKRC     0x800000L/* priority for :mkvimrc (setting option has
++#define P_SECURE	0x40000L /* cannot change in modeline or secure mode */
++#define P_GETTEXT	0x80000L /* expand default value with _() */
++#define P_NOGLOB       0x100000L /* do not use local value for global vimrc */
++#define P_NFNAME       0x200000L /* only normal file name chars allowed */
++#define P_INSECURE     0x400000L /* option was set from a modeline */
++#define P_PRI_MKRC     0x800000L /* priority for :mkvimrc (setting option has
+ 				   side effects) */
+-#define P_NO_ML       0x1000000L/* not allowed in modeline */
++#define P_NO_ML       0x1000000L /* not allowed in modeline */
++#define P_CURSWANT    0x2000000L /* update curswant required; not needed when
++				  * there is a redraw flag */
+ 
+ #define ISK_LATIN1  (char_u *)"@,48-57,_,192-255"
+ 
+@@ -466,9 +462,9 @@
+ #if defined(FEAT_DIFF) || defined(FEAT_FOLDING) || defined(FEAT_SPELL) \
+ 	|| defined(FEAT_VERTSPLIT) || defined(FEAT_CLIPBOARD) \
+ 	|| defined(FEAT_INS_EXPAND) || defined(FEAT_SYN_HL) || defined(FEAT_CONCEAL)
+-# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
++# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,c:VertSplit,t:Title,v:Visual,V:VisualNOS,w:WarningMsg,W:WildMenu,f:Folded,F:FoldColumn,A:DiffAdd,C:DiffChange,D:DiffDelete,T:DiffText,>:SignColumn,-:Conceal,B:SpellBad,P:SpellCap,R:SpellRare,L:SpellLocal,+:Pmenu,=:PmenuSel,x:PmenuSbar,X:PmenuThumb,*:TabLine,#:TabLineSel,_:TabLineFill,!:CursorColumn,.:CursorLine,o:ColorColumn"
+ #else
+-# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
++# define HIGHLIGHT_INIT "8:SpecialKey,@:NonText,d:Directory,e:ErrorMsg,i:IncSearch,l:Search,m:MoreMsg,M:ModeMsg,n:LineNr,N:CursorLineNr,r:Question,s:StatusLine,S:StatusLineNC,t:Title,v:Visual,w:WarningMsg,W:WildMenu,>:SignColumn,*:TabLine,#:TabLineSel,_:TabLineFill"
+ #endif
+ 
+ /*
+@@ -485,7 +481,7 @@
+ #endif
+ 	options[] =
+ {
+-    {"aleph",	    "al",   P_NUM|P_VI_DEF,
++    {"aleph",	    "al",   P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_RIGHTLEFT
+ 			    (char_u *)&p_aleph, PV_NONE,
+ #else
+@@ -507,7 +503,7 @@
+ 			    {(char_u *)FALSE, (char_u *)FALSE}
+ #endif
+ 			    SCRIPTID_INIT},
+-    {"arabic",	    "arab", P_BOOL|P_VI_DEF|P_VIM,
++    {"arabic",	    "arab", P_BOOL|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_ARABIC
+ 			    (char_u *)VAR_WIN, PV_ARAB,
+ #else
+@@ -784,7 +780,7 @@
+     {"columns",	    "co",   P_NUM|P_NODEFAULT|P_NO_MKRC|P_VI_DEF|P_RCLR,
+ 			    (char_u *)&Columns, PV_NONE,
+ 			    {(char_u *)80L, (char_u *)0L} SCRIPTID_INIT},
+-    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP,
++    {"comments",    "com",  P_STRING|P_ALLOCED|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
+ #ifdef FEAT_COMMENTS
+ 			    (char_u *)&p_com, PV_COM,
+ 			    {(char_u *)"s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:-",
+@@ -794,7 +790,7 @@
+ 			    {(char_u *)0L, (char_u *)0L}
+ #endif
+ 			    SCRIPTID_INIT},
+-    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF,
++    {"commentstring", "cms", P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FOLDING
+ 			    (char_u *)&p_cms, PV_CMS,
+ 			    {(char_u *)"/*%s*/", (char_u *)0L}
+@@ -907,6 +903,13 @@
+ 			    {(char_u *)0L, (char_u *)0L}
+ #endif
+ 			    SCRIPTID_INIT},
++    {"cscoperelative", "csre", P_BOOL|P_VI_DEF|P_VIM,
++#ifdef FEAT_CSCOPE
++			    (char_u *)&p_csre, PV_NONE,
++#else
++			    (char_u *)NULL, PV_NONE,
++#endif
++			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+     {"cscopetag",   "cst",  P_BOOL|P_VI_DEF|P_VIM,
+ #ifdef FEAT_CSCOPE
+ 			    (char_u *)&p_cst, PV_NONE,
+@@ -952,7 +955,7 @@
+     {"debug",	    NULL,   P_STRING|P_VI_DEF,
+ 			    (char_u *)&p_debug, PV_NONE,
+ 			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
+-    {"define",	    "def",  P_STRING|P_ALLOCED|P_VI_DEF,
++    {"define",	    "def",  P_STRING|P_ALLOCED|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_FIND_ID
+ 			    (char_u *)&p_def, PV_DEF,
+ 			    {(char_u *)"^\\s*#\\s*define", (char_u *)0L}
+@@ -982,7 +985,7 @@
+ 			    (char_u *)NULL, PV_NONE,
+ #endif
+ 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+-    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE,
++    {"diffexpr",    "dex",  P_STRING|P_VI_DEF|P_SECURE|P_CURSWANT,
+ #if defined(FEAT_DIFF) && defined(FEAT_EVAL)
+ 			    (char_u *)&p_dex, PV_NONE,
+ 			    {(char_u *)"", (char_u *)0L}
+@@ -1098,13 +1101,22 @@
+ 			    {(char_u *)0L, (char_u *)0L}
+ #endif
+ 			    SCRIPTID_INIT},
+-    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC,
++    {"fileformat",  "ff",   P_STRING|P_ALLOCED|P_VI_DEF|P_RSTAT|P_NO_MKRC|P_CURSWANT,
+ 			    (char_u *)&p_ff, PV_FF,
+ 			    {(char_u *)DFLT_FF, (char_u *)0L} SCRIPTID_INIT},
+     {"fileformats", "ffs",  P_STRING|P_VIM|P_COMMA|P_NODUP,
+ 			    (char_u *)&p_ffs, PV_NONE,
+ 			    {(char_u *)DFLT_FFS_VI, (char_u *)DFLT_FFS_VIM}
+ 			    SCRIPTID_INIT},
++    {"fileignorecase", "fic", P_BOOL|P_VI_DEF,
++			    (char_u *)&p_fic, PV_NONE,
++			    {
++#ifdef CASE_INSENSITIVE_FILENAME
++				    (char_u *)TRUE,
++#else
++				    (char_u *)FALSE,
++#endif
++					(char_u *)0L} SCRIPTID_INIT},
+     {"filetype",    "ft",   P_STRING|P_ALLOCED|P_VI_DEF|P_NOGLOB|P_NFNAME,
+ #ifdef FEAT_AUTOCMD
+ 			    (char_u *)&p_ft, PV_FT,
+@@ -1158,7 +1170,7 @@
+     {"foldlevel",   "fdl",  P_NUM|P_VI_DEF|P_RWIN,
+ 			    (char_u *)VAR_WIN, PV_FDL,
+ 			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+-    {"foldlevelstart","fdls", P_NUM|P_VI_DEF,
++    {"foldlevelstart","fdls", P_NUM|P_VI_DEF|P_CURSWANT,
+ 			    (char_u *)&p_fdls, PV_NONE,
+ 			    {(char_u *)-1L, (char_u *)0L} SCRIPTID_INIT},
+     {"foldmarker",  "fmr",  P_STRING|P_ALLOCED|P_VIM|P_VI_DEF|
+@@ -1175,7 +1187,7 @@
+     {"foldnestmax", "fdn",  P_NUM|P_VI_DEF|P_RWIN,
+ 			    (char_u *)VAR_WIN, PV_FDN,
+ 			    {(char_u *)20L, (char_u *)0L} SCRIPTID_INIT},
+-    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
++    {"foldopen",    "fdo",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP|P_CURSWANT,
+ 			    (char_u *)&p_fdo, PV_NONE,
+ 		 {(char_u *)"block,hor,mark,percent,quickfix,search,tag,undo",
+ 						 (char_u *)0L} SCRIPTID_INIT},
+@@ -1740,7 +1752,7 @@
+     {"matchtime",   "mat",  P_NUM|P_VI_DEF,
+ 			    (char_u *)&p_mat, PV_NONE,
+ 			    {(char_u *)5L, (char_u *)0L} SCRIPTID_INIT},
+-    {"maxcombine",  "mco",  P_NUM|P_VI_DEF,
++    {"maxcombine",  "mco",  P_NUM|P_VI_DEF|P_CURSWANT,
+ #ifdef FEAT_MBYTE
+ 			    (char_u *)&p_mco, PV_NONE,
+ #else
+@@ -1901,14 +1913,8 @@
+ 			    (char_u *)NULL, PV_NONE,
+ 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+     {"osfiletype",  "oft",  P_STRING|P_ALLOCED|P_VI_DEF,
+-#ifdef FEAT_OSFILETYPE
+-			    (char_u *)&p_oft, PV_OFT,
+-			    {(char_u *)DFLT_OFT, (char_u *)0L}
+-#else
+ 			    (char_u *)NULL, PV_NONE,
+-			    {(char_u *)0L, (char_u *)0L}
+-#endif
+-			    SCRIPTID_INIT},
++			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+     {"paragraphs",  "para", P_STRING|P_VI_DEF,
+ 			    (char_u *)&p_para, PV_NONE,
+ 			    {(char_u *)"IPLPPPQPP TPHPLIPpLpItpplpipbp",
+@@ -2071,6 +2077,9 @@
+ 			    (char_u *)NULL, PV_NONE,
+ #endif
+ 			    {(char_u *)2000L, (char_u *)0L} SCRIPTID_INIT},
++    {"regexpengine", "re",  P_NUM|P_VI_DEF,
++			    (char_u *)&p_re, PV_NONE,
++			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+     {"relativenumber", "rnu", P_BOOL|P_VI_DEF|P_RWIN,
+ 			    (char_u *)VAR_WIN, PV_RNU,
+ 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+@@ -2278,6 +2287,15 @@
+ 			    (char_u *)"",
+ #endif
+ 				(char_u *)0L} SCRIPTID_INIT},
++    {"shellxescape", "sxe", P_STRING|P_VI_DEF|P_SECURE,
++			    (char_u *)&p_sxe, PV_NONE,
++			    {
++#if defined(MSDOS) || defined(WIN16) || defined(WIN3264)
++			    (char_u *)"\"&|<>()@^",
++#else
++			    (char_u *)"",
++#endif
++				(char_u *)0L} SCRIPTID_INIT},
+     {"shiftround",  "sr",   P_BOOL|P_VI_DEF|P_VIM,
+ 			    (char_u *)&p_sr, PV_NONE,
+ 			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+@@ -2706,7 +2724,7 @@
+ 			    {(char_u *)0L, (char_u *)0L}
+ #endif
+ 			    SCRIPTID_INIT},
+-    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM,
++    {"virtualedit", "ve",   P_STRING|P_COMMA|P_NODUP|P_VI_DEF|P_VIM|P_CURSWANT,
+ #ifdef FEAT_VIRTUALEDIT
+ 			    (char_u *)&p_ve, PV_NONE,
+ 			    {(char_u *)"", (char_u *)""}
+@@ -2740,7 +2758,7 @@
+ 			    (char_u *)&p_wc, PV_NONE,
+ 			    {(char_u *)(long)Ctrl_E, (char_u *)(long)TAB}
+ 			    SCRIPTID_INIT},
+-    {"wildcharm",   "wcm",   P_NUM|P_VI_DEF,
++    {"wildcharm",   "wcm",  P_NUM|P_VI_DEF,
+ 			    (char_u *)&p_wcm, PV_NONE,
+ 			    {(char_u *)0L, (char_u *)0L} SCRIPTID_INIT},
+     {"wildignore",  "wig",  P_STRING|P_VI_DEF|P_COMMA|P_NODUP,
+@@ -2750,6 +2768,9 @@
+ 			    (char_u *)NULL, PV_NONE,
+ #endif
+ 			    {(char_u *)"", (char_u *)0L} SCRIPTID_INIT},
++    {"wildignorecase", "wic", P_BOOL|P_VI_DEF,
++			    (char_u *)&p_wic, PV_NONE,
++			    {(char_u *)FALSE, (char_u *)0L} SCRIPTID_INIT},
+     {"wildmenu",    "wmnu", P_BOOL|P_VI_DEF,
+ #ifdef FEAT_WILDMENU
+ 			    (char_u *)&p_wmnu, PV_NONE,
+@@ -2891,6 +2912,7 @@
+     p_term("t_op", T_OP)
+     p_term("t_RI", T_CRI)
+     p_term("t_RV", T_CRV)
++    p_term("t_u7", T_U7)
+     p_term("t_Sb", T_CSB)
+     p_term("t_Sf", T_CSF)
+     p_term("t_se", T_SE)
+@@ -2996,7 +3018,7 @@
+ # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags)
+ #endif
+ static void set_string_option_global __ARGS((int opt_idx, char_u **varp));
+-static void set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
++static char_u *set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags));
+ static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags));
+ static char_u *set_chars_option __ARGS((char_u **varp));
+ #ifdef FEAT_SYN_HL
+@@ -3145,7 +3167,7 @@
+ 	{
+ #ifdef HAVE_AVAIL_MEM
+ 	    /* Use amount of memory available at this moment. */
+-	    n = (mch_avail_mem(FALSE) >> 11);
++	    n = (mch_avail_mem(FALSE) >> 1);
+ #else
+ # ifdef HAVE_TOTAL_MEM
+ 	    /* Use amount of memory available to Vim. */
+@@ -3843,6 +3865,8 @@
+ # ifndef OS2	/* Always use bourne shell style redirection if we reach this */
+ 	    if (       fnamecmp(p, "sh") == 0
+ 		    || fnamecmp(p, "ksh") == 0
++		    || fnamecmp(p, "mksh") == 0
++		    || fnamecmp(p, "pdksh") == 0
+ 		    || fnamecmp(p, "zsh") == 0
+ 		    || fnamecmp(p, "zsh-beta") == 0
+ 		    || fnamecmp(p, "bash") == 0
+@@ -3850,6 +3874,8 @@
+ 		    || fnamecmp(p, "cmd") == 0
+ 		    || fnamecmp(p, "sh.exe") == 0
+ 		    || fnamecmp(p, "ksh.exe") == 0
++		    || fnamecmp(p, "mksh.exe") == 0
++		    || fnamecmp(p, "pdksh.exe") == 0
+ 		    || fnamecmp(p, "zsh.exe") == 0
+ 		    || fnamecmp(p, "zsh-beta.exe") == 0
+ 		    || fnamecmp(p, "bash.exe") == 0
+@@ -3881,7 +3907,8 @@
+ 
+ #if defined(MSDOS) || defined(WIN3264) || defined(OS2)
+     /*
+-     * Set 'shellcmdflag and 'shellquote' depending on the 'shell' option.
++     * Set 'shellcmdflag', 'shellxquote', and 'shellquote' depending on the
++     * 'shell' option.
+      * This is done after other initializations, where 'shell' might have been
+      * set, but only if they have not been set before.  Default for p_shcf is
+      * "/c", for p_shq is "".  For "sh" like  shells it is changed here to
+@@ -3918,6 +3945,37 @@
+ #  endif
+ # endif
+     }
++    else if (strstr((char *)gettail(p_sh), "cmd.exe") != NULL)
++    {
++	int	idx3;
++
++	/*
++	 * cmd.exe on Windows will strip the first and last double quote given
++	 * on the command line, e.g. most of the time things like:
++	 *   cmd /c "my path/to/echo" "my args to echo"
++	 * become:
++	 *   my path/to/echo" "my args to echo
++	 * when executed.
++	 *
++	 * To avoid this, set shellxquote to surround the command in
++	 * parenthesis.  This appears to make most commands work, without
++	 * breaking commands that worked previously, such as
++	 * '"path with spaces/cmd" "a&b"'.
++	 */
++	idx3 = findoption((char_u *)"sxq");
++	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
++	{
++	    p_sxq = (char_u *)"(";
++	    options[idx3].def_val[VI_DEFAULT] = p_sxq;
++	}
++
++	idx3 = findoption((char_u *)"shcf");
++	if (idx3 >= 0 && !(options[idx3].flags & P_WAS_SET))
++	{
++	    p_shcf = (char_u *)"/c";
++	    options[idx3].def_val[VI_DEFAULT] = p_shcf;
++	}
++    }
+ #endif
+ 
+ #ifdef FEAT_TITLE
+@@ -4349,7 +4407,7 @@
+ 		    p = find_termcode(key_name);
+ 		    if (p == NULL)
+ 		    {
+-			errmsg = (char_u *)N_("E518: Unknown option");
++			errmsg = (char_u *)N_("E846: Key code not set");
+ 			goto skip;
+ 		    }
+ 		    else
+@@ -4565,6 +4623,31 @@
+ 				arg = errbuf;
+ 			    }
+ 			    /*
++			     * Convert 'backspace' number to string, for
++			     * adding, prepending and removing string.
++			     */
++			    else if (varp == (char_u *)&p_bs
++					 && VIM_ISDIGIT(**(char_u **)varp))
++			    {
++				i = getdigits((char_u **)varp);
++				switch (i)
++				{
++				    case 0:
++					*(char_u **)varp = empty_option;
++					break;
++				    case 1:
++					*(char_u **)varp = vim_strsave(
++						      (char_u *)"indent,eol");
++					break;
++				    case 2:
++					*(char_u **)varp = vim_strsave(
++						(char_u *)"indent,eol,start");
++					break;
++				}
++				vim_free(oldval);
++				oldval = *(char_u **)varp;
++			    }
++			    /*
+ 			     * Convert 'whichwrap' number to string, for
+ 			     * backwards compatibility with Vim 3.0.
+ 			     * Misuse errbuf[] for the resulting string.
+@@ -4697,8 +4780,8 @@
+ 						|| s[i] == ','
+ 						|| s[i] == NUL))
+ 					break;
+-				    /* Count backspaces.  Only a comma with an
+-				     * even number of backspaces before it is
++				    /* Count backslashes.  Only a comma with an
++				     * even number of backslashes before it is
+ 				     * recognized as a separator */
+ 				    if (s > origval && s[-1] == '\\')
+ 					++bs;
+@@ -5275,9 +5358,6 @@
+ #ifdef FEAT_AUTOCMD
+     check_string_option(&buf->b_p_ft);
+ #endif
+-#ifdef FEAT_OSFILETYPE
+-    check_string_option(&buf->b_p_oft);
+-#endif
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+     check_string_option(&buf->b_p_cinw);
+ #endif
+@@ -5520,8 +5600,10 @@
+ 
+ /*
+  * Set a string option to a new value, and handle the effects.
++ *
++ * Returns NULL on success or error message on error.
+  */
+-    static void
++    static char_u *
+ set_string_option(opt_idx, value, opt_flags)
+     int		opt_idx;
+     char_u	*value;
+@@ -5530,9 +5612,10 @@
+     char_u	*s;
+     char_u	**varp;
+     char_u	*oldval;
++    char_u	*r = NULL;
+ 
+     if (options[opt_idx].var == NULL)	/* don't set hidden option */
+-	return;
++	return NULL;
+ 
+     s = vim_strsave(value);
+     if (s != NULL)
+@@ -5544,10 +5627,11 @@
+ 		    : opt_flags);
+ 	oldval = *varp;
+ 	*varp = s;
+-	if (did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
+-							   opt_flags) == NULL)
++	if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
++							   opt_flags)) == NULL)
+ 	    did_set_option(opt_idx, opt_flags, TRUE);
+     }
++    return r;
+ }
+ 
+ /*
+@@ -6082,16 +6166,46 @@
+     /* 'matchpairs' */
+     else if (gvarp == &p_mps)
+     {
+-	/* Check for "x:y,x:y" */
+-	for (p = *varp; *p != NUL; p += 4)
++#ifdef FEAT_MBYTE
++	if (has_mbyte)
+ 	{
+-	    if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
++	    for (p = *varp; *p != NUL; ++p)
+ 	    {
+-		errmsg = e_invarg;
+-		break;
++		int x2 = -1;
++		int x3 = -1;
++
++		if (*p != NUL)
++		    p += mb_ptr2len(p);
++		if (*p != NUL)
++		    x2 = *p++;
++		if (*p != NUL)
++		{
++		    x3 = mb_ptr2char(p);
++		    p += mb_ptr2len(p);
++		}
++		if (x2 != ':' || x3 == -1 || (*p != NUL && *p != ','))
++		{
++		    errmsg = e_invarg;
++		    break;
++		}
++		if (*p == NUL)
++		    break;
++	    }
++	}
++	else
++#endif
++	{
++	    /* Check for "x:y,x:y" */
++	    for (p = *varp; *p != NUL; p += 4)
++	    {
++		if (p[1] != ':' || p[2] == NUL || (p[3] != NUL && p[3] != ','))
++		{
++		    errmsg = e_invarg;
++		    break;
++		}
++		if (p[3] == NUL)
++		    break;
+ 	    }
+-	    if (p[3] == NUL)
+-		break;
+ 	}
+     }
+ 
+@@ -6635,7 +6749,7 @@
+     {
+ 	for (s = *varp; *s;)
+ 	{
+-	    while(*s == ',' || *s == ' ')
++	    while (*s == ',' || *s == ' ')
+ 		s++;
+ 	    if (!*s)
+ 		break;
+@@ -6999,8 +7113,10 @@
+     }
+ #endif
+ 
+-    if (curwin->w_curswant != MAXCOL)
+-	curwin->w_set_curswant = TRUE;  /* in case 'showbreak' changed */
++    if (curwin->w_curswant != MAXCOL
++		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
++	curwin->w_set_curswant = TRUE;
++
+ #ifdef FEAT_GUI
+     /* check redraw when it's not a GUI option or the GUI is active. */
+     if (!redraw_gui_only || gui.in_use)
+@@ -7010,7 +7126,7 @@
+     return errmsg;
+ }
+ 
+-#ifdef FEAT_SYN_HL
++#if defined(FEAT_SYN_HL) || defined(PROTO)
+ /*
+  * Simple int comparison function for use with qsort()
+  */
+@@ -7037,6 +7153,9 @@
+     int		i;
+     int		j = 0;
+ 
++    if (wp->w_buffer == NULL)
++	return NULL;  /* buffer was closed */
++
+     for (s = wp->w_p_cc; *s != NUL && count < 255;)
+     {
+ 	if (*s == '-' || *s == '+')
+@@ -7304,8 +7423,9 @@
+     static char_u *
+ check_clipboard_option()
+ {
+-    int		new_unnamed = FALSE;
+-    int		new_autoselect = FALSE;
++    int		new_unnamed = 0;
++    int		new_autoselect_star = FALSE;
++    int		new_autoselect_plus = FALSE;
+     int		new_autoselectml = FALSE;
+     int		new_html = FALSE;
+     regprog_T	*new_exclude_prog = NULL;
+@@ -7316,17 +7436,29 @@
+     {
+ 	if (STRNCMP(p, "unnamed", 7) == 0 && (p[7] == ',' || p[7] == NUL))
+ 	{
+-	    new_unnamed = TRUE;
++	    new_unnamed |= CLIP_UNNAMED;
+ 	    p += 7;
+ 	}
++	else if (STRNCMP(p, "unnamedplus", 11) == 0
++					    && (p[11] == ',' || p[11] == NUL))
++	{
++	    new_unnamed |= CLIP_UNNAMED_PLUS;
++	    p += 11;
++	}
+ 	else if (STRNCMP(p, "autoselect", 10) == 0
+-					&& (p[10] == ',' || p[10] == NUL))
++					    && (p[10] == ',' || p[10] == NUL))
+ 	{
+-	    new_autoselect = TRUE;
++	    new_autoselect_star = TRUE;
+ 	    p += 10;
+ 	}
++	else if (STRNCMP(p, "autoselectplus", 14) == 0
++					    && (p[14] == ',' || p[14] == NUL))
++	{
++	    new_autoselect_plus = TRUE;
++	    p += 14;
++	}
+ 	else if (STRNCMP(p, "autoselectml", 12) == 0
+-					&& (p[12] == ',' || p[12] == NUL))
++					    && (p[12] == ',' || p[12] == NUL))
+ 	{
+ 	    new_autoselectml = TRUE;
+ 	    p += 12;
+@@ -7355,7 +7487,8 @@
+     if (errmsg == NULL)
+     {
+ 	clip_unnamed = new_unnamed;
+-	clip_autoselect = new_autoselect;
++	clip_autoselect_star = new_autoselect_star;
++	clip_autoselect_plus = new_autoselect_plus;
+ 	clip_autoselectml = new_autoselectml;
+ 	clip_html = new_html;
+ 	vim_free(clip_exclude_prog);
+@@ -7483,21 +7616,36 @@
+ 	compatible_set();
+     }
+ 
+-    /* 'list', 'number' */
+-    else if ((int *)varp == &curwin->w_p_list
+-	  || (int *)varp == &curwin->w_p_nu
+-	  || (int *)varp == &curwin->w_p_rnu)
+-    {
+-	if (curwin->w_curswant != MAXCOL)
+-	    curwin->w_set_curswant = TRUE;
+-
+-	/* If 'number' is set, reset 'relativenumber'. */
+-	/* If 'relativenumber' is set, reset 'number'. */
+-	if ((int *)varp == &curwin->w_p_nu && curwin->w_p_nu)
+-	    curwin->w_p_rnu = FALSE;
+-	if ((int *)varp == &curwin->w_p_rnu && curwin->w_p_rnu)
+-	    curwin->w_p_nu = FALSE;
++#ifdef FEAT_PERSISTENT_UNDO
++    /* 'undofile' */
++    else if ((int *)varp == &curbuf->b_p_udf || (int *)varp == &p_udf)
++    {
++	/* Only take action when the option was set. When reset we do not
++	 * delete the undo file, the option may be set again without making
++	 * any changes in between. */
++	if (curbuf->b_p_udf || p_udf)
++	{
++	    char_u	hash[UNDO_HASH_SIZE];
++	    buf_T	*save_curbuf = curbuf;
++
++	    for (curbuf = firstbuf; curbuf != NULL; curbuf = curbuf->b_next)
++	    {
++		/* When 'undofile' is set globally: for every buffer, otherwise
++		 * only for the current buffer: Try to read in the undofile,
++		 * if one exists, the buffer wasn't changed and the buffer was
++		 * loaded */
++		if ((curbuf == save_curbuf
++				|| (opt_flags & OPT_GLOBAL) || opt_flags == 0)
++			&& !curbufIsChanged() && curbuf->b_ml.ml_mfp != NULL)
++		{
++		    u_compute_hash(hash);
++		    u_read_undo(NULL, hash, curbuf->b_fname);
++		}
++	    }
++	    curbuf = save_curbuf;
++	}
+     }
++#endif
+ 
+     else if ((int *)varp == &curbuf->b_p_ro)
+     {
+@@ -7735,8 +7883,6 @@
+     {
+ 	if (curwin->w_p_wrap)
+ 	    curwin->w_leftcol = 0;
+-	if (curwin->w_curswant != MAXCOL)
+-	    curwin->w_set_curswant = TRUE;
+     }
+ 
+ #ifdef FEAT_WINDOWS
+@@ -7763,9 +7909,9 @@
+ #ifdef FEAT_BEVAL
+     else if ((int *)varp == &p_beval)
+     {
+-	if (p_beval == TRUE)
++	if (p_beval && !old_value)
+ 	    gui_mch_enable_beval_area(balloonEval);
+-	else
++	else if (!p_beval && old_value)
+ 	    gui_mch_disable_beval_area(balloonEval);
+     }
+ #endif
+@@ -7798,6 +7944,10 @@
+ 	/* Only de-activate it here, it will be enabled when changing mode. */
+ 	if (p_imdisable)
+ 	    im_set_active(FALSE);
++	else if (State & INSERT)
++	    /* When the option is set from an autocommand, it may need to take
++	     * effect right away. */
++	    im_set_active(curbuf->b_p_iminsert == B_IMODE_IM);
+     }
+ #endif
+ 
+@@ -7959,31 +8109,8 @@
+ 	    curbuf->b_p_imsearch = B_IMODE_USE_INSERT;
+ # endif
+ 	}
+-	if (curwin->w_curswant != MAXCOL)
+-	    curwin->w_set_curswant = TRUE;
+     }
+ 
+-    else if ((int *)varp == &p_arshape)
+-    {
+-	if (curwin->w_curswant != MAXCOL)
+-	    curwin->w_set_curswant = TRUE;
+-    }
+-#endif
+-
+-#ifdef FEAT_LINEBREAK
+-    if ((int *)varp == &curwin->w_p_lbr)
+-    {
+-	if (curwin->w_curswant != MAXCOL)
+-	    curwin->w_set_curswant = TRUE;
+-    }
+-#endif
+-
+-#ifdef FEAT_RIGHTLEFT
+-    if ((int *)varp == &curwin->w_p_rl)
+-    {
+-	if (curwin->w_curswant != MAXCOL)
+-	    curwin->w_set_curswant = TRUE;
+-    }
+ #endif
+ 
+     /*
+@@ -7993,7 +8120,9 @@
+     options[opt_idx].flags |= P_WAS_SET;
+ 
+     comp_col();			    /* in case 'ruler' or 'showcmd' changed */
+-
++    if (curwin->w_curswant != MAXCOL
++		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
++	curwin->w_set_curswant = TRUE;
+     check_redraw(options[opt_idx].flags);
+ 
+     return NULL;
+@@ -8036,7 +8165,7 @@
+     need_mouse_correct = TRUE;
+ #endif
+ 
+-    if (curbuf->b_p_sw <= 0)
++    if (curbuf->b_p_sw < 0)
+     {
+ 	errmsg = e_positive;
+ 	curbuf->b_p_sw = curbuf->b_p_ts;
+@@ -8420,11 +8549,6 @@
+ 	    p_window = Rows - 1;
+     }
+ 
+-    if (curbuf->b_p_sts < 0)
+-    {
+-	errmsg = e_positive;
+-	curbuf->b_p_sts = 0;
+-    }
+     if (curbuf->b_p_ts <= 0)
+     {
+ 	errmsg = e_positive;
+@@ -8458,6 +8582,11 @@
+ 	errmsg = e_positive;
+ 	p_hi = 0;
+     }
++    if (p_re < 0 || p_re > 2)
++    {
++	errmsg = e_invarg;
++	p_re = 0;
++    }
+     if (p_report < 0)
+     {
+ 	errmsg = e_positive;
+@@ -8508,8 +8637,9 @@
+     options[opt_idx].flags |= P_WAS_SET;
+ 
+     comp_col();			    /* in case 'columns' or 'ls' changed */
+-    if (curwin->w_curswant != MAXCOL)
+-	curwin->w_set_curswant = TRUE;  /* in case 'tabstop' changed */
++    if (curwin->w_curswant != MAXCOL
++		     && (options[opt_idx].flags & (P_CURSWANT | P_RCLR)) != 0)
++	curwin->w_set_curswant = TRUE;
+     check_redraw(options[opt_idx].flags);
+ 
+     return errmsg;
+@@ -8523,8 +8653,8 @@
+     long_u	flags;
+ {
+     /* Careful: P_RCLR and P_RALL are a combination of other P_ flags */
+-    int		clear = (flags & P_RCLR) == P_RCLR;
+-    int		all = ((flags & P_RALL) == P_RALL || clear);
++    int		doclear = (flags & P_RCLR) == P_RCLR;
++    int		all = ((flags & P_RALL) == P_RALL || doclear);
+ 
+ #ifdef FEAT_WINDOWS
+     if ((flags & P_RSTAT) || all)	/* mark all status lines dirty */
+@@ -8535,7 +8665,7 @@
+ 	changed_window_setting();
+     if (flags & P_RBUF)
+ 	redraw_curbuf_later(NOT_VALID);
+-    if (clear)
++    if (doclear)
+ 	redraw_all_later(CLEAR);
+     else if (all)
+ 	redraw_all_later(NOT_VALID);
+@@ -8673,11 +8803,151 @@
+ }
+ #endif
+ 
++#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3)
++/*
++ * Returns the option attributes and its value. Unlike the above function it
++ * will return either global value or local value of the option depending on
++ * what was requested, but it will never return global value if it was
++ * requested to return local one and vice versa. Neither it will return
++ * buffer-local value if it was requested to return window-local one.
++ *
++ * Pretends that option is absent if it is not present in the requested scope
++ * (i.e. has no global, window-local or buffer-local value depending on
++ * opt_type). Uses
++ *
++ * Returned flags:
++ *       0 hidden or unknown option
++ *  see SOPT_* in vim.h for other flags
++ *
++ * Possible opt_type values: see SREQ_* in vim.h
++ */
++    int
++get_option_value_strict(name, numval, stringval, opt_type, from)
++    char_u	*name;
++    long	*numval;
++    char_u	**stringval;	    /* NULL when only obtaining attributes */
++    int		opt_type;
++    void	*from;
++{
++    int		opt_idx;
++    char_u	*varp = NULL;
++    struct vimoption *p;
++    int		r = 0;
++
++    opt_idx = findoption(name);
++    if (opt_idx < 0)
++	return 0;
++
++    p = &(options[opt_idx]);
++
++    /* Hidden option */
++    if (p->var == NULL)
++	return 0;
++
++    if (p->flags & P_BOOL)
++	r |= SOPT_BOOL;
++    else if (p->flags & P_NUM)
++	r |= SOPT_NUM;
++    else if (p->flags & P_STRING)
++	r |= SOPT_STRING;
++
++    if (p->indir == PV_NONE)
++    {
++	if (opt_type == SREQ_GLOBAL)
++	    r |= SOPT_GLOBAL;
++	else
++	    return 0; /* Did not request global-only option */
++    }
++    else
++    {
++	if (p->indir & PV_BOTH)
++	    r |= SOPT_GLOBAL;
++	else if (opt_type == SREQ_GLOBAL)
++	    return 0; /* Requested global option */
++
++	if (p->indir & PV_WIN)
++	{
++	    if (opt_type == SREQ_BUF)
++		return 0; /* Did not request window-local option */
++	    else
++		r |= SOPT_WIN;
++	}
++	else if (p->indir & PV_BUF)
++	{
++	    if (opt_type == SREQ_WIN)
++		return 0; /* Did not request buffer-local option */
++	    else
++		r |= SOPT_BUF;
++	}
++    }
++
++    if (stringval == NULL)
++	return r;
++
++    if (opt_type == SREQ_GLOBAL)
++	varp = p->var;
++    else
++    {
++	if (opt_type == SREQ_BUF)
++	{
++	    /* Special case: 'modified' is b_changed, but we also want to
++	     * consider it set when 'ff' or 'fenc' changed. */
++	    if (p->indir == PV_MOD)
++	    {
++		*numval = bufIsChanged((buf_T *) from);
++		varp = NULL;
++	    }
++#ifdef FEAT_CRYPT
++	    else if (p->indir == PV_KEY)
++	    {
++		/* never return the value of the crypt key */
++		*stringval = NULL;
++		varp = NULL;
++	    }
++#endif
++	    else
++	    {
++		aco_save_T	aco;
++		aucmd_prepbuf(&aco, (buf_T *) from);
++		varp = get_varp(p);
++		aucmd_restbuf(&aco);
++	    }
++	}
++	else if (opt_type == SREQ_WIN)
++	{
++	    win_T	*save_curwin;
++	    save_curwin = curwin;
++	    curwin = (win_T *) from;
++	    curbuf = curwin->w_buffer;
++	    varp = get_varp(p);
++	    curwin = save_curwin;
++	    curbuf = curwin->w_buffer;
++	}
++	if (varp == p->var)
++	    return (r | SOPT_UNSET);
++    }
++
++    if (varp != NULL)
++    {
++	if (p->flags & P_STRING)
++	    *stringval = vim_strsave(*(char_u **)(varp));
++	else if (p->flags & P_NUM)
++	    *numval = *(long *) varp;
++	else
++	    *numval = *(int *)varp;
++    }
++
++    return r;
++}
++#endif
++
+ /*
+  * Set the value of option "name".
+  * Use "string" for string options, use "number" for other options.
++ *
++ * Returns NULL on success or error message on error.
+  */
+-    void
++    char_u *
+ set_option_value(name, number, string, opt_flags)
+     char_u	*name;
+     long	number;
+@@ -8699,11 +8969,11 @@
+ 	if (sandbox > 0 && (flags & P_SECURE))
+ 	{
+ 	    EMSG(_(e_sandbox));
+-	    return;
++	    return NULL;
+ 	}
+ #endif
+ 	if (flags & P_STRING)
+-	    set_string_option(opt_idx, string, opt_flags);
++	    return set_string_option(opt_idx, string, opt_flags);
+ 	else
+ 	{
+ 	    varp = get_varp_scope(&(options[opt_idx]), opt_flags);
+@@ -8724,19 +8994,20 @@
+ 			 * num option using a string. */
+ 			EMSG3(_("E521: Number required: &%s = '%s'"),
+ 								name, string);
+-			return;     /* do nothing as we hit an error */
++			return NULL;     /* do nothing as we hit an error */
+ 
+ 		    }
+ 		}
+ 		if (flags & P_NUM)
+-		    (void)set_num_option(opt_idx, varp, number,
++		    return set_num_option(opt_idx, varp, number,
+ 							  NULL, 0, opt_flags);
+ 		else
+-		    (void)set_bool_option(opt_idx, varp, (int)number,
++		    return set_bool_option(opt_idx, varp, (int)number,
+ 								   opt_flags);
+ 	    }
+ 	}
+     }
++    return NULL;
+ }
+ 
+ /*
+@@ -9172,7 +9443,7 @@
+     int		expand;
+ {
+     char_u	*s;
+-    char_u	buf[MAXPATHL];
++    char_u	*buf;
+ 
+     if (fprintf(fd, "%s %s=", cmd, name) < 0)
+ 	return FAIL;
+@@ -9190,9 +9461,16 @@
+ 	}
+ 	else if (expand)
+ 	{
++	    buf = alloc(MAXPATHL);
++	    if (buf == NULL)
++		return FAIL;
+ 	    home_replace(NULL, *valuep, buf, MAXPATHL, FALSE);
+ 	    if (put_escstr(fd, buf, 2) == FAIL)
++	    {
++		vim_free(buf);
+ 		return FAIL;
++	    }
++	    vim_free(buf);
+ 	}
+ 	else if (put_escstr(fd, *valuep, 2) == FAIL)
+ 	    return FAIL;
+@@ -9403,6 +9681,85 @@
+ }
+ 
+ /*
++ * Unset local option value, similar to ":set opt<".
++ */
++
++    void
++unset_global_local_option(name, from)
++    char_u	*name;
++    void	*from;
++{
++    struct vimoption *p;
++    int		opt_idx;
++    buf_T	*buf = (buf_T *)from;
++
++    opt_idx = findoption(name);
++    p = &(options[opt_idx]);
++
++    switch ((int)p->indir)
++    {
++	/* global option with local value: use local value if it's been set */
++	case PV_EP:
++	    clear_string_option(&buf->b_p_ep);
++	    break;
++	case PV_KP:
++	    clear_string_option(&buf->b_p_kp);
++	    break;
++	case PV_PATH:
++	    clear_string_option(&buf->b_p_path);
++	    break;
++	case PV_AR:
++	    buf->b_p_ar = -1;
++	    break;
++	case PV_TAGS:
++	    clear_string_option(&buf->b_p_tags);
++	    break;
++#ifdef FEAT_FIND_ID
++	case PV_DEF:
++	    clear_string_option(&buf->b_p_def);
++	    break;
++	case PV_INC:
++	    clear_string_option(&buf->b_p_inc);
++	    break;
++#endif
++#ifdef FEAT_INS_EXPAND
++	case PV_DICT:
++	    clear_string_option(&buf->b_p_dict);
++	    break;
++	case PV_TSR:
++	    clear_string_option(&buf->b_p_tsr);
++	    break;
++#endif
++#ifdef FEAT_QUICKFIX
++	case PV_EFM:
++	    clear_string_option(&buf->b_p_efm);
++	    break;
++	case PV_GP:
++	    clear_string_option(&buf->b_p_gp);
++	    break;
++	case PV_MP:
++	    clear_string_option(&buf->b_p_mp);
++	    break;
++#endif
++#if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
++	case PV_BEXPR:
++	    clear_string_option(&buf->b_p_bexpr);
++	    break;
++#endif
++#if defined(FEAT_CRYPT)
++	case PV_CM:
++	    clear_string_option(&buf->b_p_cm);
++	    break;
++#endif
++#ifdef FEAT_STL_OPT
++	case PV_STL:
++	    clear_string_option(&((win_T *)from)->w_p_stl);
++	    break;
++#endif
++    }
++}
++
++/*
+  * Get pointer to option variable, depending on local or global scope.
+  */
+     static char_u *
+@@ -9645,9 +10002,6 @@
+ 	case PV_MA:	return (char_u *)&(curbuf->b_p_ma);
+ 	case PV_MOD:	return (char_u *)&(curbuf->b_changed);
+ 	case PV_NF:	return (char_u *)&(curbuf->b_p_nf);
+-#ifdef FEAT_OSFILETYPE
+-	case PV_OFT:	return (char_u *)&(curbuf->b_p_oft);
+-#endif
+ 	case PV_PI:	return (char_u *)&(curbuf->b_p_pi);
+ #ifdef FEAT_TEXTOBJ
+ 	case PV_QE:	return (char_u *)&(curbuf->b_p_qe);
+@@ -9756,6 +10110,9 @@
+ #ifdef FEAT_SCROLLBIND
+     to->wo_scb = from->wo_scb;
+ #endif
++#ifdef FEAT_CURSORBIND
++    to->wo_crb = from->wo_crb;
++#endif
+ #ifdef FEAT_SPELL
+     to->wo_spell = from->wo_spell;
+ #endif
+@@ -9995,9 +10352,6 @@
+ 	    /* Don't copy 'filetype', it must be detected */
+ 	    buf->b_p_ft = empty_option;
+ #endif
+-#ifdef FEAT_OSFILETYPE
+-	    buf->b_p_oft = vim_strsave(p_oft);
+-#endif
+ 	    buf->b_p_pi = p_pi;
+ #if defined(FEAT_SMARTINDENT) || defined(FEAT_CINDENT)
+ 	    buf->b_p_cinw = vim_strsave(p_cinw);
+@@ -10011,7 +10365,7 @@
+ 	    buf->b_p_smc = p_smc;
+ #endif
+ #ifdef FEAT_SPELL
+-	    buf->b_s.b_p_spc = vim_strsave(p_spf);
++	    buf->b_s.b_p_spc = vim_strsave(p_spc);
+ 	    (void)compile_cap_prog(&buf->b_s);
+ 	    buf->b_s.b_p_spf = vim_strsave(p_spf);
+ 	    buf->b_s.b_p_spl = vim_strsave(p_spl);
+@@ -10877,7 +11231,8 @@
+ shortmess(x)
+     int	    x;
+ {
+-    return (   vim_strchr(p_shm, x) != NULL
++    return p_shm != NULL &&
++	    (   vim_strchr(p_shm, x) != NULL
+ 	    || (vim_strchr(p_shm, 'a') != NULL
+ 		&& vim_strchr((char_u *)SHM_A, x) != NULL));
+ }
+@@ -11083,6 +11438,19 @@
+ }
+ 
+ /*
++ * Reset the flag indicating option "name" was set.
++ */
++    void
++reset_option_was_set(name)
++    char_u	*name;
++{
++    int idx = findoption(name);
++
++    if (idx >= 0)
++	options[idx].flags &= ~P_WAS_SET;
++}
++
++/*
+  * compatible_set() - Called when 'compatible' has been set or unset.
+  *
+  * When 'compatible' set: Set all relevant options (those that have the P_VIM)
+@@ -11284,16 +11652,19 @@
+  * from when editing started (save_file_ff() called).
+  * Also when 'endofline' was changed and 'binary' is set, or when 'bomb' was
+  * changed and 'binary' is not set.
+- * Don't consider a new, empty buffer to be changed.
++ * When "ignore_empty" is true don't consider a new, empty buffer to be
++ * changed.
+  */
+     int
+-file_ff_differs(buf)
++file_ff_differs(buf, ignore_empty)
+     buf_T	*buf;
++    int		ignore_empty;
+ {
+     /* In a buffer that was never loaded the options are not valid. */
+     if (buf->b_flags & BF_NEVERLOADED)
+ 	return FALSE;
+-    if ((buf->b_flags & BF_NEW)
++    if (ignore_empty
++	    && (buf->b_flags & BF_NEW)
+ 	    && buf->b_ml.ml_line_count == 1
+ 	    && *ml_get_buf(buf, (linenr_T)1, FALSE) == NUL)
+ 	return FALSE;
+@@ -11321,3 +11692,121 @@
+ {
+     return check_opt_strings(p, p_ff_values, FALSE);
+ }
++
++/*
++ * Return the effective shiftwidth value for current buffer, using the
++ * 'tabstop' value when 'shiftwidth' is zero.
++ */
++    long
++get_sw_value()
++{
++    return curbuf->b_p_sw ? curbuf->b_p_sw : curbuf->b_p_ts;
++}
++
++/*
++ * Return the effective softtabstop value for the current buffer, using the
++ * 'tabstop' value when 'softtabstop' is negative.
++ */
++    long
++get_sts_value()
++{
++    return curbuf->b_p_sts < 0 ? get_sw_value() : curbuf->b_p_sts;
++}
++
++/*
++ * Check matchpairs option for "*initc".
++ * If there is a match set "*initc" to the matching character and "*findc" to
++ * the opposite character.  Set "*backwards" to the direction.
++ * When "switchit" is TRUE swap the direction.
++ */
++    void
++find_mps_values(initc, findc, backwards, switchit)
++    int	    *initc;
++    int	    *findc;
++    int	    *backwards;
++    int	    switchit;
++{
++    char_u	*ptr;
++
++    ptr = curbuf->b_p_mps;
++    while (*ptr != NUL)
++    {
++#ifdef FEAT_MBYTE
++	if (has_mbyte)
++	{
++	    char_u *prev;
++
++	    if (mb_ptr2char(ptr) == *initc)
++	    {
++		if (switchit)
++		{
++		    *findc = *initc;
++		    *initc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
++		    *backwards = TRUE;
++		}
++		else
++		{
++		    *findc = mb_ptr2char(ptr + mb_ptr2len(ptr) + 1);
++		    *backwards = FALSE;
++		}
++		return;
++	    }
++	    prev = ptr;
++	    ptr += mb_ptr2len(ptr) + 1;
++	    if (mb_ptr2char(ptr) == *initc)
++	    {
++		if (switchit)
++		{
++		    *findc = *initc;
++		    *initc = mb_ptr2char(prev);
++		    *backwards = FALSE;
++		}
++		else
++		{
++		    *findc = mb_ptr2char(prev);
++		    *backwards = TRUE;
++		}
++		return;
++	    }
++	    ptr += mb_ptr2len(ptr);
++	}
++	else
++#endif
++	{
++	    if (*ptr == *initc)
++	    {
++		if (switchit)
++		{
++		    *backwards = TRUE;
++		    *findc = *initc;
++		    *initc = ptr[2];
++		}
++		else
++		{
++		    *backwards = FALSE;
++		    *findc = ptr[2];
++		}
++		return;
++	    }
++	    ptr += 2;
++	    if (*ptr == *initc)
++	    {
++		if (switchit)
++		{
++		    *backwards = FALSE;
++		    *findc = *initc;
++		    *initc = ptr[-2];
++		}
++		else
++		{
++		    *backwards = TRUE;
++		    *findc =  ptr[-2];
++		}
++		return;
++	    }
++	    ++ptr;
++	}
++	if (*ptr == ',')
++	    ++ptr;
++    }
++}
+diff -Naur vim73.orig/src/option.h vim73/src/option.h
+--- vim73.orig/src/option.h	2010-07-25 14:15:02.000000000 +0000
++++ vim73/src/option.h	2013-06-07 17:07:32.455582665 +0000
+@@ -33,7 +33,7 @@
+ #     ifdef EBCDIC
+ #define DFLT_EFM	"%*[^ ] %*[^ ] %f:%l%*[ ]%m,%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ #     else
+-#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-Gfrom %f:%l:%c,%-Gfrom %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
++#define DFLT_EFM	"%*[^\"]\"%f\"%*\\D%l: %m,\"%f\"%*\\D%l: %m,%-G%f:%l: (Each undeclared identifier is reported only once,%-G%f:%l: for each function it appears in.),%-GIn file included from %f:%l:%c:,%-GIn file included from %f:%l:%c\\,,%-GIn file included from %f:%l:%c,%-GIn file included from %f:%l,%-G%*[ ]from %f:%l:%c,%-G%*[ ]from %f:%l:,%-G%*[ ]from %f:%l\\,,%-G%*[ ]from %f:%l,%f:%l:%c:%m,%f(%l):%m,%f:%l:%m,\"%f\"\\, line %l%*\\D%c%*[^ ] %m,%D%*\\a[%*\\d]: Entering directory `%f',%X%*\\a[%*\\d]: Leaving directory `%f',%D%*\\a: Entering directory `%f',%X%*\\a: Leaving directory `%f',%DMaking %*\\a in %f,%f|%l| %m"
+ #     endif
+ #    endif
+ #   endif
+@@ -104,10 +104,11 @@
+ #define FO_ONE_LETTER	'1'
+ #define FO_WHITE_PAR	'w'	/* trailing white space continues paragr. */
+ #define FO_AUTO		'a'	/* automatic formatting */
++#define FO_REMOVE_COMS	'j'	/* remove comment leaders when joining lines */
+ 
+ #define DFLT_FO_VI	"vt"
+ #define DFLT_FO_VIM	"tcq"
+-#define FO_ALL		"tcroq2vlb1mMBn,aw"	/* for do_set() */
++#define FO_ALL		"tcroq2vlb1mMBn,awj"	/* for do_set() */
+ 
+ /* characters for the p_cpo option: */
+ #define CPO_ALTREAD	'a'	/* ":read" sets alternate file name */
+@@ -169,10 +170,12 @@
+ #define CPO_SUBPERCENT	'/'	/* % in :s string uses previous one */
+ #define CPO_BACKSL	'\\'	/* \ is not special in [] */
+ #define CPO_CHDIR	'.'	/* don't chdir if buffer is modified */
++#define CPO_SCOLON	';'	/* using "," and ";" will skip over char if
++				 * cursor would not move */
+ /* default values for Vim, Vi and POSIX */
+ #define CPO_VIM		"aABceFs"
+-#define CPO_VI		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>"
+-#define CPO_ALL		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\."
++#define CPO_VI		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>;"
++#define CPO_ALL		"aAbBcCdDeEfFgHiIjJkKlLmMnoOpPqrRsStuvwWxXyZ$!%*-+<>#{|&/\\.;"
+ 
+ /* characters for p_ww option: */
+ #define WW_ALL		"bshl<>[],~"
+@@ -226,6 +229,7 @@
+ #define GO_MENUS	'm'		/* use menu bar */
+ #define GO_NOSYSMENU	'M'		/* don't source system menu */
+ #define GO_POINTER	'p'		/* pointer enter/leave callbacks */
++#define GO_ASELPLUS	'P'		/* autoselectPlus */
+ #define GO_RIGHT	'r'		/* use right scrollbar */
+ #define GO_VRIGHT	'R'		/* right scrollbar with vert split */
+ #define GO_TEAROFF	't'		/* add tear-off menu items */
+@@ -391,6 +395,7 @@
+ EXTERN char_u	*p_cpo;		/* 'cpoptions' */
+ #ifdef FEAT_CSCOPE
+ EXTERN char_u	*p_csprg;	/* 'cscopeprg' */
++EXTERN int	p_csre;		/* 'cscoperelative' */
+ # ifdef FEAT_QUICKFIX
+ EXTERN char_u	*p_csqf;	/* 'cscopequickfix' */
+ #  define	CSQF_CMDS   "sgdctefi"
+@@ -448,6 +453,7 @@
+ EXTERN char_u	*p_fencs;	/* 'fileencodings' */
+ #endif
+ EXTERN char_u	*p_ffs;		/* 'fileformats' */
++EXTERN long	p_fic;		/* 'fileignorecase' */
+ #ifdef FEAT_FOLDING
+ EXTERN char_u	*p_fcl;		/* 'foldclose' */
+ EXTERN long	p_fdls;		/* 'foldlevelstart' */
+@@ -647,6 +653,7 @@
+ EXTERN long	p_rdt;		/* 'redrawtime' */
+ #endif
+ EXTERN int	p_remap;	/* 'remap' */
++EXTERN long	p_re;		/* 'regexpengine' */
+ EXTERN long	p_report;	/* 'report' */
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+ EXTERN long	p_pvh;		/* 'previewheight' */
+@@ -709,6 +716,7 @@
+ #endif
+ EXTERN char_u	*p_shq;		/* 'shellquote' */
+ EXTERN char_u	*p_sxq;		/* 'shellxquote' */
++EXTERN char_u	*p_sxe;		/* 'shellxescape' */
+ EXTERN char_u	*p_srr;		/* 'shellredir' */
+ #ifdef AMIGA
+ EXTERN long	p_st;		/* 'shelltype' */
+@@ -816,7 +824,7 @@
+ EXTERN char_u	*p_ttym;	/* 'ttymouse' */
+ EXTERN unsigned ttym_flags;
+ # ifdef IN_OPTION_C
+-static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", NULL};
++static char *(p_ttym_values[]) = {"xterm", "xterm2", "dec", "netterm", "jsbterm", "pterm", "urxvt", "sgr", NULL};
+ # endif
+ # define TTYM_XTERM		0x01
+ # define TTYM_XTERM2		0x02
+@@ -824,6 +832,8 @@
+ # define TTYM_NETTERM		0x08
+ # define TTYM_JSBTERM		0x10
+ # define TTYM_PTERM		0x20
++# define TTYM_URXVT		0x40
++# define TTYM_SGR		0x80
+ #endif
+ EXTERN char_u	*p_udir;	/* 'undodir' */
+ EXTERN long	p_ul;		/* 'undolevels' */
+@@ -854,7 +864,11 @@
+ # define VE_ONEMORE	8
+ #endif
+ EXTERN long	p_verbose;	/* 'verbose' */
+-EXTERN char_u	*p_vfile;	/* 'verbosefile' */
++#ifdef IN_OPTION_C
++char_u	*p_vfile = (char_u *)""; /* used before options are initialized */
++#else
++extern char_u	*p_vfile;	/* 'verbosefile' */
++#endif
+ EXTERN int	p_warn;		/* 'warn' */
+ #ifdef FEAT_CMDL_COMPL
+ EXTERN char_u	*p_wop;		/* 'wildoptions' */
+@@ -872,6 +886,7 @@
+ EXTERN char_u	*p_ww;		/* 'whichwrap' */
+ EXTERN long	p_wc;		/* 'wildchar' */
+ EXTERN long	p_wcm;		/* 'wildcharm' */
++EXTERN long	p_wic;		/* 'wildignorecase' */
+ EXTERN char_u	*p_wim;		/* 'wildmode' */
+ #ifdef FEAT_WILDMENU
+ EXTERN int	p_wmnu;		/* 'wildmenu' */
+@@ -979,9 +994,6 @@
+     , BV_MOD
+     , BV_MPS
+     , BV_NF
+-#ifdef FEAT_OSFILETYPE
+-    , BV_OFT
+-#endif
+ #ifdef FEAT_COMPL_FUNC
+     , BV_OFU
+ #endif
+diff -Naur vim73.orig/src/os_amiga.c vim73/src/os_amiga.c
+--- vim73.orig/src/os_amiga.c	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/os_amiga.c	2013-06-07 17:07:32.478915932 +0000
+@@ -22,6 +22,9 @@
+ #undef TRUE		/* will be redefined by exec/types.h */
+ #undef FALSE
+ 
++/* cproto fails on missing include files, skip them */
++#ifndef PROTO
++
+ #ifndef LATTICE
+ # include <exec/types.h>
+ # include <exec/exec.h>
+@@ -55,6 +58,8 @@
+ # include <libraries/arp_pragmas.h>
+ #endif
+ 
++#endif /* PROTO */
++
+ /*
+  * At this point TRUE and FALSE are defined as 1L and 0L, but we want 1 and 0.
+  */
+@@ -113,7 +118,7 @@
+ }
+ 
+ /*
+- * mch_inchar(): low level input funcion.
++ * mch_inchar(): low level input function.
+  * Get a characters from the keyboard.
+  * If time == 0 do not wait for characters.
+  * If time == n wait a short time for characters.
+@@ -191,16 +196,16 @@
+ }
+ 
+ /*
+- * Return amount of memory still available.
++ * Return amount of memory still available in Kbyte.
+  */
+     long_u
+ mch_avail_mem(special)
+     int	    special;
+ {
+ #ifdef __amigaos4__
+-    return (long_u)AvailMem(MEMF_ANY);
++    return (long_u)AvailMem(MEMF_ANY) >> 10;
+ #else
+-    return (long_u)AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY);
++    return (long_u)(AvailMem(special ? (long)MEMF_CHIP : (long)MEMF_ANY)) >> 10;
+ #endif
+ }
+ 
+@@ -283,7 +288,9 @@
+ #endif
+ }
+ 
+-#include <workbench/startup.h>
++#ifndef PROTO
++# include <workbench/startup.h>
++#endif
+ 
+ /*
+  * Check_win checks whether we have an interactive window.
+@@ -1002,7 +1009,9 @@
+  * Heavely modified by mool.
+  */
+ 
+-#include <devices/conunit.h>
++#ifndef PROTO
++# include <devices/conunit.h>
++#endif
+ 
+ /*
+  * try to get the real window size
+@@ -1022,7 +1031,7 @@
+ 
+     /* insure longword alignment */
+ #ifdef __amigaos4__
+-    if(!(id = AllocDosObject(DOS_INFODATA, 0)))
++    if (!(id = AllocDosObject(DOS_INFODATA, 0)))
+ 	goto out;
+ #else
+     id = (struct InfoData *)(((long)id_a + 3L) & ~3L);
+@@ -1129,9 +1138,11 @@
+  * say 'oml lib:amiga.lib -r sendpacket.o'
+  */
+ 
++#ifndef PROTO
+ /* #include <proto/exec.h> */
+ /* #include <proto/dos.h> */
+-#include <exec/memory.h>
++# include <exec/memory.h>
++#endif
+ 
+ /*
+  * Function - dos_packet written by Phil Lindsay, Carolyn Scheppner, and Andy
+diff -Naur vim73.orig/src/os_amiga.h vim73/src/os_amiga.h
+--- vim73.orig/src/os_amiga.h	2010-05-23 12:15:40.000000000 +0000
++++ vim73/src/os_amiga.h	2013-06-07 17:07:32.488915903 +0000
+@@ -56,6 +56,9 @@
+ # define TEMPNAMELEN	12
+ #endif
+ 
++/* cproto fails on missing include files */
++#ifndef PROTO
++
+ #include <exec/types.h>
+ #include <libraries/dos.h>
+ #include <libraries/dosextens.h>
+@@ -67,6 +70,8 @@
+ # include <proto/intuition.h>
+ #endif
+ 
++#endif /* PROTO */
++
+ #define FNAME_ILLEGAL ";*?`#%" /* illegal characters in a file name */
+ 
+ /*
+@@ -85,6 +90,7 @@
+ # include <unistd.h>
+ #endif
+ 
++#ifndef PROTO
+ /*
+  * arpbase.h must be included before functions.h
+  */
+@@ -92,6 +98,8 @@
+ # include <libraries/arpbase.h>
+ #endif
+ 
++#endif /* PROTO */
++
+ /*
+  * This won't be needed if you have a version of Lattice 4.01 without broken
+  * break signal handling.
+diff -Naur vim73.orig/src/os_beos.c vim73/src/os_beos.c
+--- vim73.orig/src/os_beos.c	2010-05-15 11:04:09.000000000 +0000
++++ vim73/src/os_beos.c	2013-06-07 17:07:32.495582551 +0000
+@@ -13,7 +13,10 @@
+ 
+ #include <float.h>
+ #include <termios.h>
+-#include <kernel/OS.h>
++#ifndef PROTO
++# include <kernel/OS.h>
++#endif
++
+ #include "vim.h"
+ 
+ #if USE_THREAD_FOR_INPUT_WITH_TIMEOUT
+diff -Naur vim73.orig/src/os_beos.h vim73/src/os_beos.h
+--- vim73.orig/src/os_beos.h	2010-05-15 11:04:11.000000000 +0000
++++ vim73/src/os_beos.h	2013-06-07 17:07:32.505582522 +0000
+@@ -22,4 +22,6 @@
+ 
+ /* select emulation */
+ 
+-#include <net/socket.h>		/* for typedefs and #defines only */
++#ifndef PROTO
++# include <net/socket.h>		/* for typedefs and #defines only */
++#endif
+diff -Naur vim73.orig/src/os_mac.h vim73/src/os_mac.h
+--- vim73.orig/src/os_mac.h	2010-07-14 18:28:05.000000000 +0000
++++ vim73/src/os_mac.h	2013-06-07 17:07:32.532249113 +0000
+@@ -45,7 +45,7 @@
+ /* Get stat.h or something similar. Comment: How come some OS get in in vim.h */
+ # include <sys/stat.h>
+ /* && defined(HAVE_CURSE) */
+-/* The curses.h from MacOS X provides by default some BACKWARD compatibilty
++/* The curses.h from MacOS X provides by default some BACKWARD compatibility
+  * definition which can cause us problem later on. So we undefine a few of them. */
+ # include <curses.h>
+ # undef reg
+diff -Naur vim73.orig/src/os_mac_conv.c vim73/src/os_mac_conv.c
+--- vim73.orig/src/os_mac_conv.c	2010-07-14 11:50:20.000000000 +0000
++++ vim73/src/os_mac_conv.c	2013-06-07 17:07:32.555582379 +0000
+@@ -14,6 +14,8 @@
+  */
+ 
+ #define NO_X11_INCLUDES
++#define BalloonEval int   /* used in header files */
++
+ #include "vim.h"
+ #ifndef FEAT_GUI_MAC
+ # include <CoreServices/CoreServices.h>
+@@ -75,7 +77,7 @@
+ 	*unconvlenp = 0;
+     cfstr = CFStringCreateWithBytes(NULL, ptr, len, from, 0);
+ 
+-    if(cfstr == NULL)
++    if (cfstr == NULL)
+ 	fprintf(stderr, "Encoding failed\n");
+     /* When conversion failed, try excluding bytes from the end, helps when
+      * there is an incomplete byte sequence.  Only do up to 6 bytes to avoid
+diff -Naur vim73.orig/src/os_macosx.m vim73/src/os_macosx.m
+--- vim73.orig/src/os_macosx.m	2010-08-15 10:56:50.000000000 +0000
++++ vim73/src/os_macosx.m	2013-06-07 17:07:32.668915389 +0000
+@@ -15,6 +15,11 @@
+     Error: MACOS 9 is no longer supported in Vim 7
+ #endif
+ 
++/* Avoid a conflict for the definition of Boolean between Mac header files and
++ * X11 header files. */
++#define NO_X11_INCLUDES
++#define BalloonEval int   /* used in header files */
++
+ #include "vim.h"
+ #import <Cocoa/Cocoa.h>
+ 
+@@ -23,9 +28,9 @@
+  * Clipboard support for the console.
+  * Don't include this when building the GUI version, the functions in
+  * gui_mac.c are used then.  TODO: remove those instead?
+- * But for MacVim we need these ones.
++ * But for MacVim we do need these ones.
+  */
+-#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI) || defined(FEAT_GUI_MACVIM))
++#if defined(FEAT_CLIPBOARD) && (!defined(FEAT_GUI_ENABLED) || defined(FEAT_GUI_MACVIM))
+ 
+ /* Used to identify clipboard data copied from Vim. */
+ 
+@@ -60,7 +65,7 @@
+     NSString *bestType = [pb availableTypeFromArray:supportedTypes];
+     if (!bestType) goto releasepool;
+ 
+-    int motion_type = MCHAR;
++    int motion_type = MAUTO;
+     NSString *string = nil;
+ 
+     if ([bestType isEqual:VimPboardType])
+@@ -84,9 +89,7 @@
+ 
+     if (!string)
+     {
+-	/* Use NSStringPboardType.  The motion type is set to line-wise if the
+-	 * string contains at least one EOL character, otherwise it is set to
+-	 * character-wise (block-wise is never used).
++	/* Use NSStringPboardType.  The motion type is detected automatically.
+ 	 */
+ 	NSMutableString *mstring =
+ 		[[pb stringForType:NSStringPboardType] mutableCopy];
+@@ -103,19 +106,13 @@
+ 					   options:0 range:range];
+ 	}
+ 
+-	/* Scan for newline character to decide whether the string should be
+-	 * pasted line-wise or character-wise.
+-	 */
+-	motion_type = MCHAR;
+-	if (0 < n || NSNotFound != [mstring rangeOfString:@"\n"].location)
+-	    motion_type = MLINE;
+-
+ 	string = mstring;
+     }
+ 
++    /* Default to MAUTO, uses MCHAR or MLINE depending on trailing NL. */
+     if (!(MCHAR == motion_type || MLINE == motion_type || MBLOCK == motion_type
+ 	    || MAUTO == motion_type))
+-	motion_type = MCHAR;
++	motion_type = MAUTO;
+ 
+     char_u *str = (char_u*)[string UTF8String];
+     int len = [string lengthOfBytesUsingEncoding:NSUTF8StringEncoding];
+diff -Naur vim73.orig/src/os_msdos.c vim73/src/os_msdos.c
+--- vim73.orig/src/os_msdos.c	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/os_msdos.c	2013-06-07 17:07:32.898914732 +0000
+@@ -21,10 +21,12 @@
+  * Some functions are also used for Win16 (MS-Windows 3.1).
+  */
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+-#include <conio.h>
++/* cproto fails on missing include files */
++#ifndef PROTO
++# include <conio.h>
++#endif
+ 
+ /*
+  * MS-DOS only code, not used for Win16.
+@@ -32,17 +34,19 @@
+ #ifndef WIN16
+ 
+ 
+-#include <bios.h>
+-#ifdef DJGPP
+-# include <dpmi.h>
+-# include <signal.h>
+-# include <sys/movedata.h>
+-# include <crt0.h>
+-# ifdef FEAT_CLIPBOARD
+-#  include <sys/segments.h>
++#ifndef PROTO
++# include <bios.h>
++# ifdef DJGPP
++#  include <dpmi.h>
++#  include <signal.h>
++#  include <sys/movedata.h>
++#  include <crt0.h>
++#  ifdef FEAT_CLIPBOARD
++#   include <sys/segments.h>
++#  endif
++# else
++#  include <alloc.h>
+ # endif
+-#else
+-# include <alloc.h>
+ #endif
+ 
+ #if defined(DJGPP) || defined(PROTO)
+@@ -551,15 +555,15 @@
+ #endif
+ 
+ /*
+- * Return amount of memory currently available.
++ * Return amount of memory currently available in Kbyte.
+  */
+     long_u
+ mch_avail_mem(int special)
+ {
+ #ifdef DJGPP
+-    return _go32_dpmi_remaining_virtual_memory();
++    return _go32_dpmi_remaining_virtual_memory() >> 10;
+ #else
+-    return coreleft();
++    return coreleft() >> 10;
+ #endif
+ }
+ 
+@@ -698,7 +702,7 @@
+  * If Vim should work over the serial line after a 'ctty com1' we must use
+  * kbhit() and getch(). (jw)
+  * Usually kbhit() is not used, because then CTRL-C and CTRL-P
+- * will be catched by DOS (mool).
++ * will be caught by DOS (mool).
+  *
+  * return TRUE if a character is available, FALSE otherwise
+  */
+@@ -967,7 +971,7 @@
+ }
+ 
+ /*
+- * mch_inchar(): low level input funcion.
++ * mch_inchar(): low level input function.
+  * Get a characters from the keyboard.
+  * If time == 0 do not wait for characters.
+  * If time == n wait a short time for characters.
+@@ -989,7 +993,7 @@
+ 
+     /*
+      * if we got a ctrl-C when we were busy, there will be a "^C" somewhere
+-     * on the sceen, so we need to redisplay it.
++     * on the screen, so we need to redisplay it.
+      */
+     if (delayed_redraw)
+     {
+@@ -1741,7 +1745,7 @@
+ mch_setmouse(int on)
+ {
+     mouse_active = on;
+-    mouse_hidden = TRUE;	/* dont show it until moved */
++    mouse_hidden = TRUE;	/* don't show it until moved */
+ }
+ #endif
+ 
+@@ -2131,8 +2135,10 @@
+ 
+ #undef setlocale
+ 
+-#include <go32.h>
+-#include <inlines/ctype.ha>
++#ifndef PROTO
++# include <go32.h>
++# include <inlines/ctype.ha>
++#endif
+ #include <locale.h>
+ 
+ #define UPCASE (__dj_ISALNUM | __dj_ISALPHA | __dj_ISGRAPH | __dj_ISPRINT | __dj_ISUPPER)
+@@ -2233,7 +2239,7 @@
+     void
+ clip_mch_request_selection(VimClipboard *cbd)
+ {
+-    int		type = MCHAR;
++    int		type = MAUTO;
+     char_u	*pAllocated = NULL;
+     char_u	*pClipText = NULL;
+     int		clip_data_format = 0;
+@@ -2281,14 +2287,12 @@
+ 	{
+ 	    clip_data_format = CF_TEXT;
+ 	    pClipText = pAllocated;
+-	    type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
+ 	}
+ 
+ 	else if ((pAllocated = Win16GetClipboardData(CF_OEMTEXT)) != NULL)
+ 	{
+ 	    clip_data_format = CF_OEMTEXT;
+ 	    pClipText = pAllocated;
+-	    type = (vim_strchr((char*)pClipText, '\r') != NULL) ? MLINE : MCHAR;
+ 	}
+ 
+ 	/* Did we get anything? */
+@@ -2434,7 +2438,7 @@
+     long    start_time;
+     int	    tick_count;
+ 
+-    /* int 02xf, AX = 0x1701 attempts to open the Windows clipboard.  Upon
++    /* int 0x2f, AX = 0x1701 attempts to open the Windows clipboard.  Upon
+      * return from the interrupt, if AX is non-zero, the clipboard was
+      * successfully opened.  If AX is zero, the clipboard could not be opened
+      * because it is currently in use by another process.
+@@ -2529,7 +2533,7 @@
+ {
+     __dpmi_regs  dpmi_regs;
+ 
+-    /* int 02xf, AX = 0x1702 attempts to empty the Windows clipboard.  Upon
++    /* int 0x2f, AX = 0x1702 attempts to empty the Windows clipboard.  Upon
+      * return from the interrupt, if AX == 0, the clipboard could not be
+      * emptied (for some reason).
+      */
+@@ -2612,7 +2616,7 @@
+     case CF_TEXT:		    /* Windows text */
+     case CF_OEMTEXT:		    /* DOS (OEM) text */
+ 
+-	/* int 02xf, AX = 0x1704 returns the number of bytes of data currently
++	/* int 0x2f, AX = 0x1704 returns the number of bytes of data currently
+ 	 * on the Windows clipboard, for the specified format.  Upon return
+ 	 * from the interrupt, DX:AX = the number of bytes, rounded up to the
+ 	 * nearest multiple of 32.
+@@ -2816,7 +2820,7 @@
+ 	clip_data_size);		/* how many bytes to copy */
+ 
+     /* Send data from the DOS transfer buffer to the Windows clipboard.
+-     * int 02xf, AX = 0x1703 sends SI:CX bytes of data from the buffer
++     * int 0x2f, AX = 0x1703 sends SI:CX bytes of data from the buffer
+      * at ES:BX, to the clipboard.
+      */
+     dpmi_regs.x.ax = 0x1703;			/* send clipboard data */
+diff -Naur vim73.orig/src/os_msdos.h vim73/src/os_msdos.h
+--- vim73.orig/src/os_msdos.h	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/os_msdos.h	2013-06-07 17:07:33.028914361 +0000
+@@ -53,9 +53,12 @@
+ 
+ #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
+ 
+-#include <dos.h>
+-#include <dir.h>
+-#include <time.h>
++/* cproto fails on missing include files */
++#ifndef PROTO
++# include <dos.h>
++# include <dir.h>
++# include <time.h>
++#endif
+ 
+ #ifdef DJGPP
+ # include <unistd.h>
+diff -Naur vim73.orig/src/os_mswin.c vim73/src/os_mswin.c
+--- vim73.orig/src/os_mswin.c	2010-07-27 19:39:05.000000000 +0000
++++ vim73/src/os_mswin.c	2013-06-07 17:07:33.105580808 +0000
+@@ -22,19 +22,22 @@
+ # endif
+ #endif
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+ #ifdef WIN16
+ # define SHORT_FNAME		/* always 8.3 file name */
+-# include <dos.h>
++/* cproto fails on missing include files */
++# ifndef PROTO
++#  include <dos.h>
++# endif
+ # include <string.h>
+ #endif
+ #include <sys/types.h>
+-#include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+-#include <process.h>
++#ifndef PROTO
++# include <process.h>
++#endif
+ 
+ #undef chdir
+ #ifdef __GNUC__
+@@ -45,20 +48,23 @@
+ # include <direct.h>
+ #endif
+ 
+-#if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
+-# include <shellapi.h>
+-#endif
+-
+-#if defined(FEAT_PRINTER) && !defined(FEAT_POSTSCRIPT)
+-# include <dlgs.h>
+-# ifdef WIN3264
+-#  include <winspool.h>
+-# else
+-#  include <print.h>
++#ifndef PROTO
++# if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
++#  include <shellapi.h>
+ # endif
+-# include <commdlg.h>
++
++# if defined(FEAT_PRINTER) && !defined(FEAT_POSTSCRIPT)
++#  include <dlgs.h>
++#  ifdef WIN3264
++#   include <winspool.h>
++#  else
++#   include <print.h>
++#  endif
++#  include <commdlg.h>
+ #endif
+ 
++#endif /* PROTO */
++
+ #ifdef __MINGW32__
+ # ifndef FROM_LEFT_1ST_BUTTON_PRESSED
+ #  define FROM_LEFT_1ST_BUTTON_PRESSED    0x0001
+@@ -178,12 +184,14 @@
+ }
+ # endif
+ 
++# if !defined(__MINGW32__) || (__GNUC__ < 4)
+ int _chdrive(int drive)
+ {
+     char temp [3] = "-:";
+     temp[0] = drive + 'A' - 1;
+     return !SetCurrentDirectory(temp);
+ }
++# endif
+ #else
+ # ifdef __BORLANDC__
+ /* being a more ANSI compliant compiler, BorlandC doesn't define _stricoll:
+@@ -595,7 +603,7 @@
+ 				     gui.starting ? (char_u *)_("Message") :
+ #endif
+ 					     (char_u *)_("Error"),
+-				     p, (char_u *)_("&Ok"), 1, NULL);
++				     p, (char_u *)_("&Ok"), 1, NULL, FALSE);
+ 		break;
+ 	    }
+ 	ga_clear(&error_ga);
+@@ -817,7 +825,11 @@
+     BOOL fRunTimeLinkSuccess = FALSE;
+ 
+     // Get a handle to the DLL module.
++# ifdef WIN16
+     hinstLib = LoadLibrary(libname);
++# else
++    hinstLib = vimLoadLib(libname);
++# endif
+ 
+     // If the handle is valid, try to get the function address.
+     if (hinstLib != NULL)
+@@ -895,736 +907,6 @@
+ }
+ #endif
+ 
+-#if defined(FEAT_MBYTE) || defined(PROTO)
+-/*
+- * Convert an UTF-8 string to UTF-16.
+- * "instr[inlen]" is the input.  "inlen" is in bytes.
+- * When "outstr" is NULL only return the number of UTF-16 words produced.
+- * Otherwise "outstr" must be a buffer of sufficient size.
+- * Returns the number of UTF-16 words produced.
+- */
+-    int
+-utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
+-{
+-    int		outlen = 0;
+-    char_u	*p = instr;
+-    int		todo = inlen;
+-    int		l;
+-    int		ch;
+-
+-    while (todo > 0)
+-    {
+-	/* Only convert if we have a complete sequence. */
+-	l = utf_ptr2len_len(p, todo);
+-	if (l > todo)
+-	{
+-	    /* Return length of incomplete sequence. */
+-	    if (unconvlenp != NULL)
+-		*unconvlenp = todo;
+-	    break;
+-	}
+-
+-	ch = utf_ptr2char(p);
+-	if (ch >= 0x10000)
+-	{
+-	    /* non-BMP character, encoding with surrogate pairs */
+-	    ++outlen;
+-	    if (outstr != NULL)
+-	    {
+-		*outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
+-		*outstr++ = 0xDC00 | (ch & 0x3FF);
+-	    }
+-	}
+-	else if (outstr != NULL)
+-	    *outstr++ = ch;
+-	++outlen;
+-	p += l;
+-	todo -= l;
+-    }
+-
+-    return outlen;
+-}
+-
+-/*
+- * Convert an UTF-16 string to UTF-8.
+- * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
+- * When "outstr" is NULL only return the required number of bytes.
+- * Otherwise "outstr" must be a buffer of sufficient size.
+- * Return the number of bytes produced.
+- */
+-    int
+-utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
+-{
+-    int		outlen = 0;
+-    int		todo = inlen;
+-    short_u	*p = instr;
+-    int		l;
+-    int		ch, ch2;
+-
+-    while (todo > 0)
+-    {
+-	ch = *p;
+-	if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
+-	{
+-	    /* surrogate pairs handling */
+-	    ch2 = p[1];
+-	    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
+-	    {
+-		ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
+-		++p;
+-		--todo;
+-	    }
+-	}
+-	if (outstr != NULL)
+-	{
+-	    l = utf_char2bytes(ch, outstr);
+-	    outstr += l;
+-	}
+-	else
+-	    l = utf_char2len(ch);
+-	++p;
+-	outlen += l;
+-	--todo;
+-    }
+-
+-    return outlen;
+-}
+-
+-/*
+- * Call MultiByteToWideChar() and allocate memory for the result.
+- * Returns the result in "*out[*outlen]" with an extra zero appended.
+- * "outlen" is in words.
+- */
+-    void
+-MultiByteToWideChar_alloc(UINT cp, DWORD flags,
+-	LPCSTR in, int inlen,
+-	LPWSTR *out, int *outlen)
+-{
+-    *outlen = MultiByteToWideChar(cp, flags, in, inlen, 0, 0);
+-    /* Add one one word to avoid a zero-length alloc(). */
+-    *out = (LPWSTR)alloc(sizeof(WCHAR) * (*outlen + 1));
+-    if (*out != NULL)
+-    {
+-	MultiByteToWideChar(cp, flags, in, inlen, *out, *outlen);
+-	(*out)[*outlen] = 0;
+-    }
+-}
+-
+-/*
+- * Call WideCharToMultiByte() and allocate memory for the result.
+- * Returns the result in "*out[*outlen]" with an extra NUL appended.
+- */
+-    void
+-WideCharToMultiByte_alloc(UINT cp, DWORD flags,
+-	LPCWSTR in, int inlen,
+-	LPSTR *out, int *outlen,
+-	LPCSTR def, LPBOOL useddef)
+-{
+-    *outlen = WideCharToMultiByte(cp, flags, in, inlen, NULL, 0, def, useddef);
+-    /* Add one one byte to avoid a zero-length alloc(). */
+-    *out = alloc((unsigned)*outlen + 1);
+-    if (*out != NULL)
+-    {
+-	WideCharToMultiByte(cp, flags, in, inlen, *out, *outlen, def, useddef);
+-	(*out)[*outlen] = 0;
+-    }
+-}
+-
+-#endif /* FEAT_MBYTE */
+-
+-#ifdef FEAT_CLIPBOARD
+-/*
+- * Clipboard stuff, for cutting and pasting text to other windows.
+- */
+-
+-/* Type used for the clipboard type of Vim's data. */
+-typedef struct
+-{
+-    int type;		/* MCHAR, MBLOCK or MLINE */
+-    int txtlen;		/* length of CF_TEXT in bytes */
+-    int ucslen;		/* length of CF_UNICODETEXT in words */
+-    int rawlen;		/* length of clip_star.format_raw, including encoding,
+-			   excluding terminating NUL */
+-} VimClipType_t;
+-
+-/*
+- * Make vim the owner of the current selection.  Return OK upon success.
+- */
+-/*ARGSUSED*/
+-    int
+-clip_mch_own_selection(VimClipboard *cbd)
+-{
+-    /*
+-     * Never actually own the clipboard.  If another application sets the
+-     * clipboard, we don't want to think that we still own it.
+-     */
+-    return FAIL;
+-}
+-
+-/*
+- * Make vim NOT the owner of the current selection.
+- */
+-/*ARGSUSED*/
+-    void
+-clip_mch_lose_selection(VimClipboard *cbd)
+-{
+-    /* Nothing needs to be done here */
+-}
+-
+-/*
+- * Copy "str[*size]" into allocated memory, changing CR-NL to NL.
+- * Return the allocated result and the size in "*size".
+- * Returns NULL when out of memory.
+- */
+-    static char_u *
+-crnl_to_nl(const char_u *str, int *size)
+-{
+-    int		pos = 0;
+-    int		str_len = *size;
+-    char_u	*ret;
+-    char_u	*retp;
+-
+-    /* Avoid allocating zero bytes, it generates an error message. */
+-    ret = lalloc((long_u)(str_len == 0 ? 1 : str_len), TRUE);
+-    if (ret != NULL)
+-    {
+-	retp = ret;
+-	for (pos = 0; pos < str_len; ++pos)
+-	{
+-	    if (str[pos] == '\r' && str[pos + 1] == '\n')
+-	    {
+-		++pos;
+-		--(*size);
+-	    }
+-	    *retp++ = str[pos];
+-	}
+-    }
+-
+-    return ret;
+-}
+-
+-#if defined(FEAT_MBYTE) || defined(PROTO)
+-/*
+- * Note: the following two functions are only guaranteed to work when using
+- * valid MS-Windows codepages or when iconv() is available.
+- */
+-
+-/*
+- * Convert "str" from 'encoding' to UTF-16.
+- * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
+- * Output is returned as an allocated string.  "*lenp" is set to the length of
+- * the result.  A trailing NUL is always added.
+- * Returns NULL when out of memory.
+- */
+-    short_u *
+-enc_to_utf16(char_u *str, int *lenp)
+-{
+-    vimconv_T	conv;
+-    WCHAR	*ret;
+-    char_u	*allocbuf = NULL;
+-    int		len_loc;
+-    int		length;
+-
+-    if (lenp == NULL)
+-    {
+-	len_loc = (int)STRLEN(str) + 1;
+-	lenp = &len_loc;
+-    }
+-
+-    if (enc_codepage > 0)
+-    {
+-	/* We can do any CP### -> UTF-16 in one pass, and we can do it
+-	 * without iconv() (convert_* may need iconv). */
+-	MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
+-    }
+-    else
+-    {
+-	/* Use "latin1" by default, we might be called before we have p_enc
+-	 * set up.  Convert to utf-8 first, works better with iconv().  Does
+-	 * nothing if 'encoding' is "utf-8". */
+-	conv.vc_type = CONV_NONE;
+-	if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
+-						   (char_u *)"utf-8") == FAIL)
+-	    return NULL;
+-	if (conv.vc_type != CONV_NONE)
+-	{
+-	    str = allocbuf = string_convert(&conv, str, lenp);
+-	    if (str == NULL)
+-		return NULL;
+-	}
+-	convert_setup(&conv, NULL, NULL);
+-
+-	length = utf8_to_utf16(str, *lenp, NULL, NULL);
+-	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
+-	if (ret != NULL)
+-	{
+-	    utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
+-	    ret[length] = 0;
+-	}
+-
+-	vim_free(allocbuf);
+-    }
+-
+-    *lenp = length;
+-    return (short_u *)ret;
+-}
+-
+-/*
+- * Convert an UTF-16 string to 'encoding'.
+- * Input in "str" with length (counted in wide characters) "*lenp".  When
+- * "lenp" is NULL, use wcslen().
+- * Output is returned as an allocated string.  If "*lenp" is not NULL it is
+- * set to the length of the result.
+- * Returns NULL when out of memory.
+- */
+-    char_u *
+-utf16_to_enc(short_u *str, int *lenp)
+-{
+-    vimconv_T	conv;
+-    char_u	*utf8_str = NULL, *enc_str = NULL;
+-    int		len_loc;
+-
+-    if (lenp == NULL)
+-    {
+-	len_loc = (int)wcslen(str) + 1;
+-	lenp = &len_loc;
+-    }
+-
+-    if (enc_codepage > 0)
+-    {
+-	/* We can do any UTF-16 -> CP### in one pass. */
+-	int length;
+-
+-	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
+-					    (LPSTR *)&enc_str, &length, 0, 0);
+-	*lenp = length;
+-	return enc_str;
+-    }
+-
+-    /* Avoid allocating zero bytes, it generates an error message. */
+-    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
+-    if (utf8_str != NULL)
+-    {
+-	*lenp = utf16_to_utf8(str, *lenp, utf8_str);
+-
+-	/* We might be called before we have p_enc set up. */
+-	conv.vc_type = CONV_NONE;
+-	convert_setup(&conv, (char_u *)"utf-8",
+-					    p_enc? p_enc: (char_u *)"latin1");
+-	if (conv.vc_type == CONV_NONE)
+-	{
+-	    /* p_enc is utf-8, so we're done. */
+-	    enc_str = utf8_str;
+-	}
+-	else
+-	{
+-	    enc_str = string_convert(&conv, utf8_str, lenp);
+-	    vim_free(utf8_str);
+-	}
+-
+-	convert_setup(&conv, NULL, NULL);
+-    }
+-
+-    return enc_str;
+-}
+-#endif /* FEAT_MBYTE */
+-
+-/*
+- * Wait for another process to Close the Clipboard.
+- * Returns TRUE for success.
+- */
+-    static int
+-vim_open_clipboard(void)
+-{
+-    int delay = 10;
+-
+-    while (!OpenClipboard(NULL))
+-    {
+-	if (delay > 500)
+-	    return FALSE;  /* waited too long, give up */
+-	Sleep(delay);
+-	delay *= 2;	/* wait for 10, 20, 40, 80, etc. msec */
+-    }
+-    return TRUE;
+-}
+-
+-/*
+- * Get the current selection and put it in the clipboard register.
+- *
+- * NOTE: Must use GlobalLock/Unlock here to ensure Win32s compatibility.
+- * On NT/W95 the clipboard data is a fixed global memory object and
+- * so its handle = its pointer.
+- * On Win32s, however, co-operation with the Win16 system means that
+- * the clipboard data is moveable and its handle is not a pointer at all,
+- * so we can't just cast the return value of GetClipboardData to (char_u*).
+- * <VN>
+- */
+-    void
+-clip_mch_request_selection(VimClipboard *cbd)
+-{
+-    VimClipType_t	metadata = { -1, -1, -1, -1 };
+-    HGLOBAL		hMem = NULL;
+-    char_u		*str = NULL;
+-#if defined(FEAT_MBYTE) && defined(WIN3264)
+-    char_u		*to_free = NULL;
+-#endif
+-#ifdef FEAT_MBYTE
+-    HGLOBAL		rawh = NULL;
+-#endif
+-    int			str_size = 0;
+-    int			maxlen;
+-    size_t		n;
+-
+-    /*
+-     * Don't pass GetActiveWindow() as an argument to OpenClipboard() because
+-     * then we can't paste back into the same window for some reason - webb.
+-     */
+-    if (!vim_open_clipboard())
+-	return;
+-
+-    /* Check for vim's own clipboard format first.  This only gets the type of
+-     * the data, still need to use CF_UNICODETEXT or CF_TEXT for the text. */
+-    if (IsClipboardFormatAvailable(cbd->format))
+-    {
+-	VimClipType_t	*meta_p;
+-	HGLOBAL		meta_h;
+-
+-	/* We have metadata on the clipboard; try to get it. */
+-	if ((meta_h = GetClipboardData(cbd->format)) != NULL
+-		&& (meta_p = (VimClipType_t *)GlobalLock(meta_h)) != NULL)
+-	{
+-	    /* The size of "VimClipType_t" changed, "rawlen" was added later.
+-	     * Only copy what is available for backwards compatibility. */
+-	    n = sizeof(VimClipType_t);
+-	    if (GlobalSize(meta_h) < n)
+-		n = GlobalSize(meta_h);
+-	    memcpy(&metadata, meta_p, n);
+-	    GlobalUnlock(meta_h);
+-	}
+-    }
+-
+-#ifdef FEAT_MBYTE
+-    /* Check for Vim's raw clipboard format first.  This is used without
+-     * conversion, but only if 'encoding' matches. */
+-    if (IsClipboardFormatAvailable(cbd->format_raw)
+-				      && metadata.rawlen > (int)STRLEN(p_enc))
+-    {
+-	/* We have raw data on the clipboard; try to get it. */
+-	if ((rawh = GetClipboardData(cbd->format_raw)) != NULL)
+-	{
+-	    char_u	*rawp;
+-
+-	    rawp = (char_u *)GlobalLock(rawh);
+-	    if (rawp != NULL && STRCMP(p_enc, rawp) == 0)
+-	    {
+-		n = STRLEN(p_enc) + 1;
+-		str = rawp + n;
+-		str_size = (int)(metadata.rawlen - n);
+-	    }
+-	    else
+-	    {
+-		GlobalUnlock(rawh);
+-		rawh = NULL;
+-	    }
+-	}
+-    }
+-    if (str == NULL)
+-    {
+-#endif
+-
+-#if defined(FEAT_MBYTE) && defined(WIN3264)
+-    /* Try to get the clipboard in Unicode if it's not an empty string. */
+-    if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
+-    {
+-	HGLOBAL hMemW;
+-
+-	if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
+-	{
+-	    WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
+-
+-	    /* Use the length of our metadata if possible, but limit it to the
+-	     * GlobalSize() for safety. */
+-	    maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
+-	    if (metadata.ucslen >= 0)
+-	    {
+-		if (metadata.ucslen > maxlen)
+-		    str_size = maxlen;
+-		else
+-		    str_size = metadata.ucslen;
+-	    }
+-	    else
+-	    {
+-		for (str_size = 0; str_size < maxlen; ++str_size)
+-		    if (hMemWstr[str_size] == NUL)
+-			break;
+-	    }
+-	    to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
+-	    GlobalUnlock(hMemW);
+-	}
+-    }
+-    else
+-#endif
+-    /* Get the clipboard in the Active codepage. */
+-    if (IsClipboardFormatAvailable(CF_TEXT))
+-    {
+-	if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
+-	{
+-	    str = (char_u *)GlobalLock(hMem);
+-
+-	    /* The length is either what our metadata says or the strlen().
+-	     * But limit it to the GlobalSize() for safety. */
+-	    maxlen = (int)GlobalSize(hMem);
+-	    if (metadata.txtlen >= 0)
+-	    {
+-		if (metadata.txtlen > maxlen)
+-		    str_size = maxlen;
+-		else
+-		    str_size = metadata.txtlen;
+-	    }
+-	    else
+-	    {
+-		for (str_size = 0; str_size < maxlen; ++str_size)
+-		    if (str[str_size] == NUL)
+-			break;
+-	    }
+-
+-# if defined(FEAT_MBYTE) && defined(WIN3264)
+-	    /* The text is in the active codepage.  Convert to 'encoding',
+-	     * going through UTF-16. */
+-	    acp_to_enc(str, str_size, &to_free, &maxlen);
+-	    if (to_free != NULL)
+-	    {
+-		str_size = maxlen;
+-		str = to_free;
+-	    }
+-# endif
+-	}
+-    }
+-#ifdef FEAT_MBYTE
+-    }
+-#endif
+-
+-    if (str != NULL && *str != NUL)
+-    {
+-	char_u *temp_clipboard;
+-
+-	/* If the type is not known guess it. */
+-	if (metadata.type == -1)
+-	    metadata.type = (vim_strchr(str, '\n') == NULL) ? MCHAR : MLINE;
+-
+-	/* Translate <CR><NL> into <NL>. */
+-	temp_clipboard = crnl_to_nl(str, &str_size);
+-	if (temp_clipboard != NULL)
+-	{
+-	    clip_yank_selection(metadata.type, temp_clipboard, str_size, cbd);
+-	    vim_free(temp_clipboard);
+-	}
+-    }
+-
+-    /* unlock the global object */
+-    if (hMem != NULL)
+-	GlobalUnlock(hMem);
+-#ifdef FEAT_MBYTE
+-    if (rawh != NULL)
+-	GlobalUnlock(rawh);
+-#endif
+-    CloseClipboard();
+-#if defined(FEAT_MBYTE) && defined(WIN3264)
+-    vim_free(to_free);
+-#endif
+-}
+-
+-#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
+-/*
+- * Convert from the active codepage to 'encoding'.
+- * Input is "str[str_size]".
+- * The result is in allocated memory: "out[outlen]".  With terminating NUL.
+- */
+-    void
+-acp_to_enc(str, str_size, out, outlen)
+-    char_u	*str;
+-    int		str_size;
+-    char_u	**out;
+-    int		*outlen;
+-
+-{
+-    LPWSTR	widestr;
+-
+-    MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
+-    if (widestr != NULL)
+-    {
+-	++*outlen;	/* Include the 0 after the string */
+-	*out = utf16_to_enc((short_u *)widestr, outlen);
+-	vim_free(widestr);
+-    }
+-}
+-#endif
+-
+-/*
+- * Send the current selection to the clipboard.
+- */
+-    void
+-clip_mch_set_selection(VimClipboard *cbd)
+-{
+-    char_u		*str = NULL;
+-    VimClipType_t	metadata;
+-    long_u		txtlen;
+-    HGLOBAL		hMemRaw = NULL;
+-    HGLOBAL		hMem = NULL;
+-    HGLOBAL		hMemVim = NULL;
+-# if defined(FEAT_MBYTE) && defined(WIN3264)
+-    HGLOBAL		hMemW = NULL;
+-# endif
+-
+-    /* If the '*' register isn't already filled in, fill it in now */
+-    cbd->owned = TRUE;
+-    clip_get_selection(cbd);
+-    cbd->owned = FALSE;
+-
+-    /* Get the text to be put on the clipboard, with CR-LF. */
+-    metadata.type = clip_convert_selection(&str, &txtlen, cbd);
+-    if (metadata.type < 0)
+-	return;
+-    metadata.txtlen = (int)txtlen;
+-    metadata.ucslen = 0;
+-    metadata.rawlen = 0;
+-
+-#ifdef FEAT_MBYTE
+-    /* Always set the raw bytes: 'encoding', NUL and the text.  This is used
+-     * when copy/paste from/to Vim with the same 'encoding', so that illegal
+-     * bytes can also be copied and no conversion is needed. */
+-    {
+-	LPSTR lpszMemRaw;
+-
+-	metadata.rawlen = (int)(txtlen + STRLEN(p_enc) + 1);
+-	hMemRaw = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+-							 metadata.rawlen + 1);
+-	lpszMemRaw = (LPSTR)GlobalLock(hMemRaw);
+-	if (lpszMemRaw != NULL)
+-	{
+-	    STRCPY(lpszMemRaw, p_enc);
+-	    memcpy(lpszMemRaw + STRLEN(p_enc) + 1, str, txtlen + 1);
+-	    GlobalUnlock(hMemRaw);
+-	}
+-	else
+-	    metadata.rawlen = 0;
+-    }
+-#endif
+-
+-# if defined(FEAT_MBYTE) && defined(WIN3264)
+-    {
+-	WCHAR		*out;
+-	int		len = metadata.txtlen;
+-
+-	/* Convert the text to UTF-16. This is put on the clipboard as
+-	 * CF_UNICODETEXT. */
+-	out = (WCHAR *)enc_to_utf16(str, &len);
+-	if (out != NULL)
+-	{
+-	    WCHAR *lpszMemW;
+-
+-	    /* Convert the text for CF_TEXT to Active codepage. Otherwise it's
+-	     * p_enc, which has no relation to the Active codepage. */
+-	    metadata.txtlen = WideCharToMultiByte(GetACP(), 0, out, len,
+-							       NULL, 0, 0, 0);
+-	    vim_free(str);
+-	    str = (char_u *)alloc((unsigned)(metadata.txtlen == 0 ? 1
+-							  : metadata.txtlen));
+-	    if (str == NULL)
+-	    {
+-		vim_free(out);
+-		return;		/* out of memory */
+-	    }
+-	    WideCharToMultiByte(GetACP(), 0, out, len,
+-						  str, metadata.txtlen, 0, 0);
+-
+-	    /* Allocate memory for the UTF-16 text, add one NUL word to
+-	     * terminate the string. */
+-	    hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
+-						   (len + 1) * sizeof(WCHAR));
+-	    lpszMemW = (WCHAR *)GlobalLock(hMemW);
+-	    if (lpszMemW != NULL)
+-	    {
+-		memcpy(lpszMemW, out, len * sizeof(WCHAR));
+-		lpszMemW[len] = NUL;
+-		GlobalUnlock(hMemW);
+-	    }
+-	    vim_free(out);
+-	    metadata.ucslen = len;
+-	}
+-    }
+-# endif
+-
+-    /* Allocate memory for the text, add one NUL byte to terminate the string.
+-     */
+-    hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, metadata.txtlen + 1);
+-    {
+-	LPSTR lpszMem = (LPSTR)GlobalLock(hMem);
+-
+-	if (lpszMem)
+-	{
+-	    vim_strncpy(lpszMem, str, metadata.txtlen);
+-	    GlobalUnlock(hMem);
+-	}
+-    }
+-
+-    /* Set up metadata: */
+-    {
+-	VimClipType_t *lpszMemVim = NULL;
+-
+-	hMemVim = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,
+-						       sizeof(VimClipType_t));
+-	lpszMemVim = (VimClipType_t *)GlobalLock(hMemVim);
+-	memcpy(lpszMemVim, &metadata, sizeof(metadata));
+-	GlobalUnlock(hMemVim);
+-    }
+-
+-    /*
+-     * Open the clipboard, clear it and put our text on it.
+-     * Always set our Vim format.  Put Unicode and plain text on it.
+-     *
+-     * Don't pass GetActiveWindow() as an argument to OpenClipboard()
+-     * because then we can't paste back into the same window for some
+-     * reason - webb.
+-     */
+-    if (vim_open_clipboard())
+-    {
+-	if (EmptyClipboard())
+-	{
+-	    SetClipboardData(cbd->format, hMemVim);
+-	    hMemVim = 0;
+-# if defined(FEAT_MBYTE) && defined(WIN3264)
+-	    if (hMemW != NULL)
+-	    {
+-		if (SetClipboardData(CF_UNICODETEXT, hMemW) != NULL)
+-		    hMemW = NULL;
+-	    }
+-# endif
+-	    /* Always use CF_TEXT.  On Win98 Notepad won't obtain the
+-	     * CF_UNICODETEXT text, only CF_TEXT. */
+-	    SetClipboardData(CF_TEXT, hMem);
+-	    hMem = 0;
+-	}
+-	CloseClipboard();
+-    }
+-
+-    vim_free(str);
+-    /* Free any allocations we didn't give to the clipboard: */
+-    if (hMemRaw)
+-	GlobalFree(hMemRaw);
+-    if (hMem)
+-	GlobalFree(hMem);
+-# if defined(FEAT_MBYTE) && defined(WIN3264)
+-    if (hMemW)
+-	GlobalFree(hMemW);
+-# endif
+-    if (hMemVim)
+-	GlobalFree(hMemVim);
+-}
+-
+-#endif /* FEAT_CLIPBOARD */
+-
+-
+ /*
+  * Debugging helper: expose the MCH_WRITE_DUMP stuff to other modules
+  */
+@@ -1779,7 +1061,7 @@
+ }
+ 
+ /* Attempt to make this work for old and new compilers */
+-#if !defined(_MSC_VER) || (_MSC_VER < 1300) || !defined(INT_PTR)
++#if !defined(_WIN64) && (!defined(_MSC_VER) || _MSC_VER < 1300)
+ # define PDP_RETVAL BOOL
+ #else
+ # define PDP_RETVAL INT_PTR
+@@ -1854,12 +1136,12 @@
+ {
+     MSG msg;
+ 
+-    while (!*bUserAbort && PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
++    while (!*bUserAbort && pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+     {
+-	if (!hDlgPrint || !IsDialogMessage(hDlgPrint, &msg))
++	if (!hDlgPrint || !pIsDialogMessage(hDlgPrint, &msg))
+ 	{
+ 	    TranslateMessage(&msg);
+-	    DispatchMessage(&msg);
++	    pDispatchMessage(&msg);
+ 	}
+     }
+     return !*bUserAbort;
+@@ -1867,7 +1149,7 @@
+ 
+ #ifndef FEAT_GUI
+ 
+-    static UINT CALLBACK
++    static UINT_PTR CALLBACK
+ PrintHookProc(
+ 	HWND hDlg,	// handle to dialog box
+ 	UINT uiMsg,	// message identifier
+@@ -2408,7 +1690,9 @@
+ 
+ 
+ #if defined(FEAT_SHORTCUT) || defined(PROTO)
+-# include <shlobj.h>
++# ifndef PROTO
++#  include <shlobj.h>
++# endif
+ 
+ /*
+  * When "fname" is the name of a shortcut (*.lnk) resolve the file it points
+@@ -2510,7 +1794,7 @@
+  *
+  * So we create a hidden window, and arrange to destroy it on exit.
+  */
+-HWND message_window = 0;	    /* window that's handling messsages */
++HWND message_window = 0;	    /* window that's handling messages */
+ 
+ #define VIM_CLASSNAME      "VIM_MESSAGES"
+ #define VIM_CLASSNAME_LEN  (sizeof(VIM_CLASSNAME) - 1)
+@@ -2573,7 +1857,7 @@
+ 
+ static int save_reply(HWND server, char_u *reply, int expr);
+ 
+-/*s
++/*
+  * The window procedure for the hidden message window.
+  * It handles callback messages and notifications from servers.
+  * In order to process these messages, it is necessary to run a
+@@ -3130,10 +2414,10 @@
+ {
+     MSG msg;
+ 
+-    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
++    while (pPeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
+     {
+ 	TranslateMessage(&msg);
+-	DispatchMessage(&msg);
++	pDispatchMessage(&msg);
+     }
+ }
+ 
+@@ -3319,7 +2603,7 @@
+ 
+     ReleaseDC(hwnd, hdc);
+ 
+-    /* If we couldn't find a useable font, return failure */
++    /* If we couldn't find a usable font, return failure */
+     if (n == 1)
+ 	return FAIL;
+ 
+diff -Naur vim73.orig/src/os_qnx.c vim73/src/os_qnx.c
+--- vim73.orig/src/os_qnx.c	2010-05-24 09:42:44.000000000 +0000
++++ vim73/src/os_qnx.c	2013-06-07 17:07:33.185580580 +0000
+@@ -24,10 +24,10 @@
+ #if defined(FEAT_GUI_PHOTON)
+     PhChannelParms_t parms;
+ 
+-    memset( &parms, 0, sizeof( parms ) );
++    memset(&parms, 0, sizeof(parms));
+     parms.flags = Ph_DYNAMIC_BUFFER;
+ 
+-    is_photon_available = (PhAttach( NULL, &parms ) != NULL) ? TRUE : FALSE;
++    is_photon_available = (PhAttach(NULL, &parms) != NULL) ? TRUE : FALSE;
+ #endif
+ }
+ 
+@@ -39,8 +39,8 @@
+ /* Turn on the clipboard for a console vim when photon is running */
+ void qnx_clip_init()
+ {
+-    if( is_photon_available == TRUE && !gui.in_use)
+-	clip_init( TRUE );
++    if (is_photon_available == TRUE && !gui.in_use)
++	clip_init(TRUE);
+ }
+ 
+ /*****************************************************************************/
+@@ -48,32 +48,32 @@
+ 
+ /* No support for owning the clipboard */
+ int
+-clip_mch_own_selection( VimClipboard *cbd )
++clip_mch_own_selection(VimClipboard *cbd)
+ {
+     return FALSE;
+ }
+ 
+ void
+-clip_mch_lose_selection( VimClipboard *cbd )
++clip_mch_lose_selection(VimClipboard *cbd)
+ {
+ }
+ 
+ void
+-clip_mch_request_selection( VimClipboard *cbd )
++clip_mch_request_selection(VimClipboard *cbd)
+ {
+     int		    type = MLINE, clip_length = 0, is_type_set = FALSE;
+     void	    *cbdata;
+     PhClipHeader    *clip_header;
+     char_u	    *clip_text = NULL;
+ 
+-    cbdata = PhClipboardPasteStart( PhInputGroup( NULL ));
+-    if( cbdata != NULL )
++    cbdata = PhClipboardPasteStart(PhInputGroup(NULL));
++    if (cbdata != NULL)
+     {
+ 	/* Look for the vim specific clip first */
+-	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_VIM );
+-	if( clip_header != NULL && clip_header->data != NULL )
++	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_VIM);
++	if (clip_header != NULL && clip_header->data != NULL)
+ 	{
+-	    switch( *(char *) clip_header->data )
++	    switch(*(char *) clip_header->data)
+ 	    {
+ 		default: /* fallthrough to line type */
+ 		case 'L': type = MLINE; break;
+@@ -86,27 +86,27 @@
+ 	}
+ 
+ 	/* Try for just normal text */
+-	clip_header = PhClipboardPasteType( cbdata, CLIP_TYPE_TEXT );
+-	if( clip_header != NULL )
++	clip_header = PhClipboardPasteType(cbdata, CLIP_TYPE_TEXT);
++	if (clip_header != NULL)
+ 	{
+ 	    clip_text = clip_header->data;
+ 	    clip_length  = clip_header->length - 1;
+ 
+-	    if( clip_text != NULL && is_type_set == FALSE )
+-		type = (strchr( clip_text, '\r' ) != NULL) ? MLINE : MCHAR;
++	    if (clip_text != NULL && is_type_set == FALSE)
++		type = MAUTO;
+ 	}
+ 
+-	if( (clip_text != NULL) && (clip_length > 0) )
++	if ((clip_text != NULL) && (clip_length > 0))
+ 	{
+-	    clip_yank_selection( type, clip_text, clip_length, cbd );
++	    clip_yank_selection(type, clip_text, clip_length, cbd);
+ 	}
+ 
+-	PhClipboardPasteFinish( cbdata );
++	PhClipboardPasteFinish(cbdata);
+     }
+ }
+ 
+ void
+-clip_mch_set_selection( VimClipboard *cbd )
++clip_mch_set_selection(VimClipboard *cbd)
+ {
+     int type;
+     long_u  len;
+@@ -114,31 +114,31 @@
+     PhClipHeader clip_header[2];
+ 
+     /* Prevent recursion from clip_get_selection() */
+-    if( cbd->owned == TRUE )
++    if (cbd->owned == TRUE)
+ 	return;
+ 
+     cbd->owned = TRUE;
+-    clip_get_selection( cbd );
++    clip_get_selection(cbd);
+     cbd->owned = FALSE;
+ 
+-    type = clip_convert_selection( &str, &len, cbd );
+-    if( type >= 0 )
++    type = clip_convert_selection(&str, &len, cbd);
++    if (type >= 0)
+     {
+-	text_clip = lalloc( len + 1, TRUE ); /* Normal text */
++	text_clip = lalloc(len + 1, TRUE); /* Normal text */
+ 
+-	if( text_clip && vim_clip )
++	if (text_clip && vim_clip)
+ 	{
+-	    memset( clip_header, 0, sizeof( clip_header ) );
++	    memset(clip_header, 0, sizeof(clip_header));
+ 
+-	    STRNCPY( clip_header[0].type, CLIP_TYPE_VIM, 8 );
+-	    clip_header[0].length = sizeof( vim_clip );
++	    STRNCPY(clip_header[0].type, CLIP_TYPE_VIM, 8);
++	    clip_header[0].length = sizeof(vim_clip);
+ 	    clip_header[0].data   = vim_clip;
+ 
+-	    STRNCPY( clip_header[1].type, CLIP_TYPE_TEXT, 8 );
++	    STRNCPY(clip_header[1].type, CLIP_TYPE_TEXT, 8);
+ 	    clip_header[1].length = len + 1;
+ 	    clip_header[1].data   = text_clip;
+ 
+-	    switch( type )
++	    switch(type)
+ 	    {
+ 		default: /* fallthrough to MLINE */
+ 		case MLINE:	*vim_clip = 'L'; break;
+@@ -148,14 +148,14 @@
+ #endif
+ 	    }
+ 
+-	    vim_strncpy( text_clip, str, len );
++	    vim_strncpy(text_clip, str, len);
+ 
+ 	    vim_clip[ 1 ] = NUL;
+ 
+-	    PhClipboardCopy( PhInputGroup( NULL ), 2, clip_header);
++	    PhClipboardCopy(PhInputGroup(NULL), 2, clip_header);
+ 	}
+-	vim_free( text_clip );
++	vim_free(text_clip);
+     }
+-    vim_free( str );
++    vim_free(str);
+ }
+ #endif
+diff -Naur vim73.orig/src/os_riscos.c vim73/src/os_riscos.c
+--- vim73.orig/src/os_riscos.c	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/os_riscos.c	1970-01-01 00:00:00.000000000 +0000
+@@ -1,1292 +0,0 @@
+-/* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved	by Bram Moolenaar
+- *
+- * Do ":help uganda"  in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- * See README.txt for an overview of the Vim source code.
+- */
+-
+-#include "vim.h"
+-
+-/*
+- * os_riscos.c
+- *
+- * Thomas Leonard <tal197@ecs.soton.ac.uk>
+- */
+-
+-const char *__dynamic_da_name = "Vim heap"; /* Enable and name our dynamic area */
+-int ro_line_mode = TRUE;  /* For Ex mode we much echo chars to the screen ourselves */
+-int windowed;		/* Flag - are we running inside a text window? */
+-int WinLeft, WinTop;	/* We might be started inside a text window */
+-int ScrollTop;		/* Make cursor movements relative to ScrollTop. */
+-
+-int old_escape_state = -1;
+-int old_cursor_state = -1;
+-
+-#define rgb(r,g,b) ((b<<24) + (g<<16) + (r<<8))
+-#define NORMAL_FG 0x00000000
+-#define NORMAL_BG 0xffffffff
+-
+-/* Convert a DOS colour number to an RGB palette entry.
+- * Mappings from X11 rgb/txt file.
+- */
+-    static int
+-map_colour(dos)
+-    int dos;		/* Standard DOS colour number. */
+-{
+-    switch (dos)
+-    {
+-	case 0: return 0;			/* Black */
+-	case 1: return rgb(0,0,139);		/* DarkBlue */
+-	case 2: return rgb(0,100,0);		/* DarkGreen */
+-	case 3: return rgb(0,139,139);		/* DarkCyan */
+-	case 4: return rgb(139,0,0);		/* DarkRed */
+-	case 5: return rgb(139,0,139);		/* DarkMagenta */
+-	case 6: return rgb(165,42,42);		/* Brown, DarkYellow */
+-	case 7: return rgb(211,211,211);	/* LightGray, LightGrey, Gray, Grey */
+-	case 8: return rgb(169,169,169);	/* DarkGray, DarkGrey */
+-	case 9: return rgb(173,216,230);	/* Blue, LightBlue */
+-	case 10: return rgb(144,238,144);	/* Green, LightGreen */
+-	case 11: return rgb(224,255,255);	/* Cyan, LightCyan */
+-	case 12: return rgb(255,0,0);		/* Red, LightRed */
+-	case 13: return rgb(255,0,255);		/* Magenta, LightMagenta */
+-	case 14: return rgb(255,255,0);		/* Yellow, LightYellow */
+-	case 15: return rgb(255,255,255);	/* White */
+-    }
+-    return rgb(100,100,100);
+-}
+-
+-    static void
+-text_fg(fg)
+-    int fg;		/* Foregound colour in the form &BBGGRR00 */
+-{
+-    xswi(ColourTrans_SetTextColour, fg, 0, 0, 0);
+-}
+-
+-    static void
+-text_bg(bg)
+-    int		bg;	/* Backgound colour in the form &BBGGRR00 */
+-{
+-    xswi(ColourTrans_SetTextColour, bg, 0, 0, 1 << 7);
+-}
+-
+-#define OUT_NORMAL 0
+-#define OUT_NUMBER 1		/* Reading in a number */
+-
+-    void
+-mch_write(s, len)
+-    char_u  *s;
+-    int	    len;
+-{
+-    static int mode = OUT_NORMAL;
+-    static int x, y;			/* For reading numbers in. */
+-
+-    if (!term_console)
+-    {
+-	/* Maybe we are running Vim remotely - don't interpret chars */
+-	while (len--)
+-	{
+-	    char_u c = *s++;
+-	    swi(OS_WriteC, c);
+-	    /* We might need to send a CR too. This shouldn't
+-	     * hurt if we don't need it, should it?
+-	     */
+-	    if (c == 10)
+-		swi(OS_WriteI + 13);
+-	}
+-	return;
+-    }
+-
+-    while (len--)
+-    {
+-	char_u c = *s++;
+-	switch (mode)
+-	{
+-	    case OUT_NUMBER:
+-		if (c < '0' || c > '9')
+-		{
+-		    mode = OUT_NORMAL;
+-		}
+-		else
+-		{
+-		    x = (x * 10) + c - '0';
+-		    continue;
+-		}
+-	    /* note: no break here! */
+-
+-	    case OUT_NORMAL:
+-		switch (c)
+-		{
+-		    case 1:
+-			/* Number (in decimal) follows. */
+-			mode = OUT_NUMBER;
+-			y = x;
+-			x = 0;
+-			break;
+-		    case 2:
+-			/* Position cursor. */
+-			swi(OS_WriteI + 31);
+-			swi(OS_WriteC, x);
+-			swi(OS_WriteC, y - ScrollTop);
+-			break;
+-		    case 3:
+-			/* Set scroll region. */
+-			if (x == Rows -1 && y == 0 && !windowed)
+-			{
+-			    /* Whole screen - remove text window.
+-			     * This is MUCH faster.
+-			     */
+-			    swi(OS_WriteI + 26);
+-			}
+-			else
+-			{
+-			    /* Create a text window. */
+-			    swi(OS_WriteI + 28);
+-			    swi(OS_WriteC, WinLeft);
+-			    swi(OS_WriteC, WinTop + x);
+-			    swi(OS_WriteC, WinLeft + Columns - 1);
+-			    swi(OS_WriteC, WinTop + y);
+-			}
+-			ScrollTop = y;
+-			break;
+-		    case 4:
+-			/* Normal mode. */
+-			text_fg(NORMAL_FG);
+-			text_bg(NORMAL_BG);
+-			break;
+-		    case 5:
+-			/* Reverse mode. */
+-			text_fg(NORMAL_BG);
+-			text_bg(NORMAL_FG);
+-			break;
+-		    case 10:
+-			swi(OS_NewLine);
+-			break;
+-		    case 14:
+-			/* Cursor invisible. */
+-			swi(OS_WriteN,
+-			     "\027\001\000\000\000\000\000\000\000\000",
+-			     10);
+-			break;
+-		    case 15:
+-			/* Cursor visible. */
+-			swi(OS_WriteN,
+-			     "\027\001\002\000\000\000\000\000\000\000",
+-			     10);
+-			break;
+-		    case 16:
+-			/* Cursor very visible (flash) */
+-			swi(OS_WriteN,
+-			     "\027\001\003\000\000\000\000\000\000\000",
+-			     10);
+-		    case 17:
+-			/* Set foreground colour. */
+-			text_fg(map_colour(x));
+-			break;
+-		    case 18:
+-			/* Set background colour. */
+-			text_bg(map_colour(x));
+-			break;
+-		    case 19:
+-			/* Scroll text down. */
+-			swi(OS_WriteN,
+-			     "\027\007\000\002\000\000\000\000\000\000",
+-			     10);
+-			break;
+-		    default:
+-			swi(OS_WriteC, c);
+-		}
+-		continue;
+-
+-	    default:
+-		printf("[output error]");
+-		mode = OUT_NORMAL;
+-	}
+-    }
+-}
+-
+-/*
+- * mch_inchar(): low level input funcion.
+- * Get a characters from the keyboard.
+- * Return the number of characters that are available.
+- * If wtime == 0 do not wait for characters.
+- * If wtime == n wait n msecs for characters.
+- * If wtime == -1 wait forever for characters.
+- *
+- * TODO: call convert_input() for 'fileencoding' to 'encoding' conversion.
+- */
+-    int
+-mch_inchar(buf, maxlen, wtime, tb_change_cnt)
+-    char_u  *buf;
+-    int	    maxlen;
+-    long    wtime;
+-    int	    tb_change_cnt;
+-{
+-    int got=0;
+-    unsigned int start_time = clock();
+-
+-    if (ro_line_mode)
+-    {
+-	/* We're probably in Ex mode - get whole lines at a time. */
+-
+-	static char_u	line_buffer[256];
+-	static int	remaining_chars = 0;
+-	static int	buf_pos = 0;
+-
+-	/* Do we need to fetch another line? */
+-	if (remaining_chars == 0)
+-	{
+-	    int		old_esc_state;
+-	    swi(OS_Byte, 200, 1, 0xfe);
+-	    old_esc_state = r1;
+-
+-	    buf_pos = 0;
+-	    if (xswi(OS_ReadLine, line_buffer, 255, 0, 255) & (c_flag | v_flag))
+-	    {
+-		got_int = TRUE;	    /* ESC pressed */
+-		r1 = 0;
+-	    }
+-	    line_buffer[r1] = 13;
+-	    remaining_chars = r1 + 1;	/* Count CR as part of input */
+-
+-	    swi(OS_Byte, 200, old_esc_state, 0);
+-	}
+-
+-	/* Can we send the rest of the buffer back in one go? */
+-	if (remaining_chars <= maxlen)
+-	{
+-	    int	    got = remaining_chars;
+-
+-	    memcpy(buf, line_buffer + buf_pos, got);
+-	    remaining_chars = 0;
+-	    return  got;
+-	}
+-
+-	/* Send as much as we can */
+-	memcpy(buf, line_buffer + buf_pos, maxlen);
+-	buf_pos += maxlen;
+-	remaining_chars -= maxlen;
+-
+-	return maxlen;
+-    }
+-
+-    if (!term_console)
+-    {
+-	/* Use OS_ReadC for all input.
+-	 * Avoids problems with remote access getting interference from
+-	 * the keyboard.
+-	 */
+-	if (wtime == 0)
+-	    return 0;	    /* Ignore quick key checks */
+-
+-	if (xswi(OS_ReadC) & c_flag)
+-	{
+-	    got_int = TRUE;	/* ESC pressed - can this happen? */
+-	    swi(OS_Byte, 124);	/* Clear Escape state */
+-	    r0 = 0x1b;		/* It *might* not have been Escape! */
+-	}
+-	buf[0] = r0;
+-	return 1;
+-    }
+-
+-    /*
+-     * OK, here's the plan:
+-     *
+-     * 1) Wait until wtime expires or we get a key
+-     * 2) Get keys until the keyboard buffer is empty or buf is full
+-     */
+-
+-    while (xswi(OS_Byte,145,0) & c_flag)
+-    {
+-	/* Nothing at all in the keyboard buffer.
+-	 * Has our time expired yet?
+-	 */
+-	if ( (wtime != -1) && (clock() - start_time) >= wtime )
+-	    return 0;		/* Nothing read - giving up */
+-    }
+-
+-    /* We've got one char (in r2) - are there any more? */
+-
+-    while (got < maxlen)
+-    {
+-	buf[got++] = r2;
+-
+-	if (xswi(OS_Byte,145,0) & c_flag)
+-	    return got;		/* Keyboard buffer empty */
+-    }
+-    return got;			/* buf is full */
+-}
+-
+-/*
+- * return non-zero if a character is available
+- */
+-    int
+-mch_char_avail()
+-{
+-    if (!term_console)
+-	return 0;	    /* Can't tell */
+-    if (xswi(OS_Byte, 152, 0) & c_flag)
+-	return 0;
+-    return 1;
+-}
+-
+-/* Find out how much free memory we have.
+- * I don't know how to work this out exactly but, since we can claim
+- * more memory from the OS, let's just report the free pool size.
+- * Dynamic area 6 doesn't exist pre 3.6 according to StrongHelp, so
+- * we'll use Wimp_SlotSize. If that fails (outside the desktop?)
+- * then just return a big number and hope.
+- */
+-    long_u
+-mch_avail_mem(special)
+-    int special;
+-{
+-    if (xswi(Wimp_SlotSize, -1, -1) & v_flag)
+-	return 0x7fffffff;
+-    return r2;
+-}
+-
+-    void
+-mch_delay(msec, ignoreinput)
+-    long	msec;
+-    int		ignoreinput;
+-{
+-    int		start_time, time_now;
+-    int		csec = msec / 10;
+-
+-    swi(OS_ReadMonotonicTime);
+-    start_time = r0;
+-
+-    for (;;)
+-    {
+-	swi(OS_ReadMonotonicTime);
+-	time_now = r0;
+-	if (time_now - start_time > csec)
+-	    return;
+-#ifdef FEAT_GUI
+-	/* In the GUI, allow other programs to run while waiting. */
+-	if (gui.in_use)
+-	    gui_mch_wait_for_chars(start_time + csec);
+-#endif
+-    }
+-}
+-
+-/*
+- * If the machine has job control, use it to suspend the program,
+- * otherwise fake it by starting a new shell.
+- */
+-    void
+-mch_suspend()
+-{
+-    suspend_shell();
+-}
+-
+-    void
+-mch_init()
+-{
+-    /*
+-     * Read window size first. Calls to mch_get_shellsize() will
+-     * simply return these values in future so that setting the
+-     * text window (used for scrolling) won't give strange results.
+-     */
+-
+-    int buf[7] = {132, 135, 256, 257, 1, 2, -1};
+-
+-    /* Command windows are no longer forced open, since if we are
+-     * in the desktop then we'll use the GUI version.
+-     * Opening a command window here messes up the GUI version startup
+-     */
+-#ifndef FEAT_GUI
+-    swi(OS_WriteI);
+-#endif
+-    swi(OS_ReadVduVariables, buf, buf);
+-    WinLeft = buf[0];
+-    WinTop  = buf[1];
+-    Columns = buf[2];
+-    Rows    = buf[3] + 1;	/* Seems to be one off (VduVars wrong?) */
+-    ScrollTop = 0;
+-
+-    /* Are we running in a textwindow? */
+-    if (Rows == buf[5] + 1 && Columns == buf[4] + 1)
+-	windowed = 0;
+-    else
+-	windowed = 1;
+-
+-    /* Choose a nice colour scheme. */
+-    text_fg(NORMAL_FG);
+-    text_bg(NORMAL_BG);
+-}
+-
+-/*
+- * Check_win checks whether we have an interactive stdout.
+- */
+-/* ARGSUSED */
+-    int
+-mch_check_win(argc, argv)
+-    int	    argc;
+-    char    **argv;
+-{
+-    return OK;
+-}
+-
+-/*
+- * Return TRUE if the input comes from a terminal, FALSE otherwise.
+- */
+-    int
+-mch_input_isatty()
+-{
+-    if (xswi(OS_ChangeRedirection, -1, -1) & v_flag)
+-	return TRUE;		/* Error - TRUE is probably correct though */
+-    if (r0 == 0)
+-	return TRUE;
+-    return FALSE;
+-}
+-
+-#ifdef FEAT_TITLE
+-    int
+-mch_can_restore_title()
+-{
+-    return FALSE;
+-}
+-
+-    int
+-mch_can_restore_icon()
+-{
+-    return FALSE;
+-}
+-
+-
+-/*
+- * Set the window title and icon.
+- */
+-    void
+-mch_settitle(title, icon)
+-    char_u *title;
+-    char_u *icon;
+-{
+-    if (title == NULL)
+-	title = (char_u *) "<untitled>";
+-#ifdef FEAT_GUI
+-    if (gui.in_use && strcmp(title, gui.window_title))
+-    {
+-	int length;
+-	length = strlen(title);
+-	if (length >= gui.window_title_size)
+-	    length = gui.window_title_size - 1;
+-	strncpy(gui.window_title, title, length);
+-	gui.window_title[length] = 0;
+-	ro_redraw_title(gui.window_handle);
+-    }
+-#endif
+-    return;
+-}
+-
+-/*
+- * Restore the window/icon title.
+- * "which" is one of:
+- *  1  only restore title
+- *  2  only restore icon
+- *  3  restore title and icon
+- */
+-    void
+-mch_restore_title(which)
+-    int which;
+-{
+-    return;
+-}
+-#endif
+-
+-/*
+- * Insert user name in s[len].
+- * Return OK if a name found.
+- */
+-    int
+-mch_get_user_name(s, len)
+-    char_u  *s;
+-    int	    len;
+-{
+-    /* RISC OS doesn't support user names. */
+-    *s = NUL;
+-    return FAIL;
+-}
+-
+-/*
+- * Insert host name in s[len].
+- */
+-
+-    void
+-mch_get_host_name(s, len)
+-    char_u  *s;
+-    int	    len;
+-{
+-    if (xswi(OS_ReadVarVal, "Machine$Name", s, len, 0, 3) & v_flag)
+-    {
+-	/* Variable does not exist (normal operation) */
+-	vim_strncpy(s, "(unknown)", len - 1);
+-    }
+-}
+-
+-/*
+- * return process ID
+- */
+-    long
+-mch_get_pid()
+-{
+-    if (xswi(Wimp_ReadSysInfo, 5) & v_flag)
+-	return 0;
+-    return r0;
+-}
+-
+-/*
+- * Get name of current directory into buffer 'buf' of length 'len' bytes.
+- * Return OK for success, FAIL for failure.
+- */
+-    int
+-mch_dirname(buf, len)
+-    char_u  *buf;
+-    int	    len;
+-{
+-    if (xswi(OS_FSControl, 37, "@", buf, 0, 0, len) & v_flag)
+-	return FAIL;
+-    return OK;
+-}
+-
+-/*
+- * Get absolute file name into buffer 'buf' of length 'len' bytes.
+- *
+- * return FAIL for failure, OK for success
+- */
+-    int
+-mch_FullName(fname, buf, len, force)
+-    char_u *fname, *buf;
+-    int len;
+-    int	force;		/* Also expand when already absolute path name.
+-			 * Not used under RISC OS.
+-			 */
+-{
+-    if (xswi(OS_FSControl, 37, fname, buf, 0, 0, len) & v_flag)
+-	return FAIL;
+-    return OK;
+-}
+-
+-/*
+- * Return TRUE if "fname" does not depend on the current directory.
+- */
+-    int
+-mch_isFullName(fname)
+-    char_u	*fname;
+-{
+-    if (strstr(fname, "::") && strstr(fname,".$."))
+-	return TRUE;
+-    return FALSE;
+-}
+-
+-/*
+- * Get file permissions for 'name'.
+- * Returns -1 when it doesn't exist.
+- */
+-    long
+-mch_getperm(name)
+-    char_u *name;
+-{
+-    struct stat statb;
+-
+-    if (stat((char *)name, &statb))
+-	return -1;
+-    return statb.st_mode;
+-}
+-
+-/*
+- * set file permission for 'name' to 'perm'
+- *
+- * return FAIL for failure, OK otherwise
+- */
+-    int
+-mch_setperm(name, perm)
+-    char_u  *name;
+-    long    perm;
+-{
+-    return (chmod((char *)name, (mode_t)perm) == 0 ? OK : FAIL);
+-}
+-
+-/*
+- * Set hidden flag for "name".
+- */
+-/* ARGSUSED */
+-    void
+-mch_hide(name)
+-    char_u	*name;
+-{
+-    /* can't hide a file */
+-}
+-
+-/*
+- * return TRUE if "name" is a directory
+- * return FALSE if "name" is not a directory
+- * return FALSE for error
+- */
+-    int
+-mch_isdir(name)
+-    char_u *name;
+-{
+-    if (xswi(OS_File, 17, name) & v_flag)
+-	return FALSE;
+-    if (r0 == 2 || r0 == 3)
+-	return TRUE;		/* Count image files as directories. */
+-    return FALSE;
+-}
+-
+-/*
+- * Return 1 if "name" can be executed, 0 if not.
+- * Return -1 if unknown. Requires which to work.
+- */
+-    int
+-mch_can_exe(name)
+-    char_u	*name;
+-{
+-    char_u	*buf;
+-    char_u	*p;
+-    int		retval;
+-
+-    buf = alloc((unsigned)STRLEN(name) + 7);
+-    if (buf == NULL)
+-	return -1;
+-    sprintf((char *)buf, "which %s", name);
+-    p = get_cmd_output(buf, NULL, SHELL_SILENT);
+-    vim_free(buf);
+-    if (p == NULL)
+-	return -1;
+-    /* result can be: "name: Command not found" */
+-    retval = (*p != NUL && strstr((char *)p, "not found") == NULL);
+-    vim_free(p);
+-    return retval;
+-}
+-
+-/*
+- * Check what "name" is:
+- * NODE_NORMAL: file or directory (or doesn't exist)
+- * NODE_WRITABLE: writable device, socket, fifo, etc.
+- * NODE_OTHER: non-writable things
+- */
+-    int
+-mch_nodetype(name)
+-    char_u	*name;
+-{
+-    /* TODO */
+-    return NODE_NORMAL;
+-}
+-
+-    void
+-mch_early_init()
+-{
+-    /* Turn off all the horrible filename munging in UnixLib. */
+-    int __riscosify_control = __RISCOSIFY_NO_PROCESS;
+-}
+-
+-    void
+-mch_exit(r)
+-    int r;
+-{
+-    settmode(TMODE_COOK);
+-    exiting = TRUE;
+-    out_flush();
+-    ml_close_all(TRUE);		/* remove all memfiles */
+-
+-#ifdef FEAT_GUI
+-    if (gui.in_use)
+-	gui_exit(r);
+-#endif
+-    swi(OS_NewLine);
+-    if (old_escape_state != -1)
+-	swi(OS_Byte, 229, old_escape_state, 0);
+-    if (old_cursor_state != -1)
+-	swi(OS_Byte, 4, old_cursor_state);
+-    exit(r);
+-}
+-
+-    void
+-mch_settmode(tmode)
+-    int		tmode;	    /* TMODE_RAW or TMODE_COOK */
+-{
+-    if (tmode == TMODE_COOK)
+-    {
+-	ro_line_mode = TRUE;
+-	return;
+-    }
+-
+-    ro_line_mode = FALSE;
+-
+-    if (term_console)
+-    {
+-	/* Block cursor. */
+-	swi(OS_WriteN,
+-		"\027\000\012\000\000\000\000\000\000\000",
+-		10);
+-
+-	/* Disable the standard cursor key actions. */
+-	swi(OS_Byte, 4, 1);
+-	if (old_cursor_state == -1)
+-	    old_cursor_state = r1;
+-    }
+-
+-    /* Stop Escape from quitting Vim! */
+-    swi(OS_Byte, 229, 1, 0);
+-    if (old_escape_state == -1)
+-	old_escape_state = r1;
+-}
+-
+-/*
+- * set mouse clicks on or off (only works for xterms)
+- */
+-    void
+-mch_setmouse(on)
+-    int	    on;
+-{
+-}
+-
+-/*
+- * set screen mode, always fails.
+- */
+-/* ARGSUSED */
+-    int
+-mch_screenmode(arg)
+-    char_u   *arg;
+-{
+-    EMSG(_(e_screenmode));
+-    return FAIL;
+-}
+-
+-/*
+- * Try to get the current window size.
+- * Return OK when size could be determined, FAIL otherwise.
+- * Simply return results stored by mch_init() if we are the
+- * machine's console. If not, we don't know how big the screen is.
+- */
+-    int
+-mch_get_shellsize()
+-{
+-    /* if size changed: screenalloc will allocate new screen buffers */
+-    return term_console ? OK : FAIL;
+-}
+-
+-/*
+- * Can't change the size.
+- * Assume the user knows what he's doing and use the new values.
+- */
+-    void
+-mch_set_shellsize()
+-{
+-    /* Assume the user knows what he's doing and use the new values. */
+-}
+-
+-/*
+- * Rows and/or Columns has changed.
+- */
+-    void
+-mch_new_shellsize()
+-{
+-    /* Nothing to do. */
+-}
+-
+-    int
+-mch_call_shell(cmd, options)
+-    char_u	*cmd;
+-    int		options;	/* SHELL_*, see vim.h */
+-{
+-    int		retval;
+-    int		tmode = cur_tmode;
+-
+-    if (cmd == NULL)
+-	cmd = (char_u *) "GOS";
+-
+-#ifdef FEAT_GUI
+-    if (gui.in_use)
+-	return gui_mch_call_shell(cmd, options);
+-#endif
+-    if (options & SHELL_COOKED)
+-	settmode(TMODE_COOK);		/* set to normal mode */
+-    MSG_PUTS("\n");
+-
+-   /* I don't even want to think about what UnixLib must
+-    * be doing to allow this to work...
+-    */
+-    retval = system(cmd);
+-    if (retval && !(options & SHELL_SILENT))
+-	EMSG(strerror(EOPSYS));		/* Doesn't seem to set errno? */
+-
+-    swi(OS_Byte, 229, 1, 0);		/* Re-disable escape */
+-    if (tmode == TMODE_RAW)
+-	settmode(TMODE_RAW);		/* set to raw mode */
+-    return retval ? FAIL : OK;
+-}
+-
+-/*
+- * Check for Escape being pressed right now.
+- * [ different if !term_console? ]
+- */
+-    void
+-mch_breakcheck()
+-{
+-    if (xswi(OS_Byte, 121, 0xf0) & v_flag)
+-	return;
+-    if (r1 == 0xff)
+-    {
+-	got_int = TRUE;
+-	swi(OS_Byte, 15, 1);	/* Flush input buffer */
+-    }
+-}
+-
+-/*
+- * Recursively expand one path component into all matching files and/or
+- * directories.
+- * "path" has backslashes before chars that are not to be expanded.
+- * Return the number of matches found.
+- */
+-    int
+-mch_expandpath(gap, path, flags)
+-    garray_T	*gap;	/* Grow array for results. */
+-    char_u	*path;
+-    int		flags;	/* EW_* flags */
+-{
+-    int		got;	/* Number of matches. */
+-    char_u	*pattern;
+-
+-   /* Plan:
+-    *
+-    * 1) Get first part of path - no wildcards
+-    * 2) Get next path element (wildcarded)
+-    * 3) Get rest of path
+-    *
+-    * If (3) is nothing then only the leaf is wildcarded - add to gap
+-    * Otherwise call recursively for each path in (2), passing (3)
+-    *
+-    * This is just the header function.
+-    */
+-
+-    /* We must be able to modifiy path, so make a copy */
+-    pattern = vim_strsave(path);
+-    if (pattern == NULL)
+-	return 0;
+-    got = expand_section(gap, (char_u *)"", pattern, flags);
+-    vim_free(pattern);
+-    return got;
+-}
+-
+-/*
+- * expand_section(gap, "$.Dir1.Dir2", "ABBA*.myleaf##")
+- *
+- * calls expand_section(gap, "$.Dir1.Dir2.ABBA_Gold", "myleaf##")
+- *   and expand_section(gap, "$.Dir1.Dir2.ABBA_Live", "myleaf##")
+- *
+- * If rest is just a leaf then all matches are added to gap.
+- *
+- * Returns number of items added to gap.
+- */
+-    int
+-expand_section(gap, root, rest, flags)
+-    garray_T	*gap;
+-    char_u	*root;	/* Non-wildcarded path to search */
+-    char_u	*rest;	/* Wildcarded remainder of path */
+-    int		flags;	/* Add dirs/files/missing objects. */
+-{
+-    static char_u buf[MAXPATHL];	/* Temporary buffer. */
+-    char_u dir[MAXPATHL];
+-    int start_element = -1;		/* Start of wildcarded element */
+-    char_u c;
+-    int i;
+-    int got, dir_pos;
+-    int buflen;			/* Chars used in buf[] */
+-    int colon = 0;		/* Dir ends in ':' */
+-
+-    buflen = strlen(root);
+-    STRNCPY(buf, root, buflen);	/* Copy root into buffer. */
+-
+-   /*
+-    * Find end of nonwildcarded section.
+-    * Count ':' as a path sep since Vim:Bug* is a valid pathname.
+-    */
+-
+-    for (i = 0; c = rest[i]; i++)
+-    {
+-	if (c == PATHSEP)
+-	{
+-	    start_element = i;
+-	    colon = 0;
+-	}
+-	if (c == ':')
+-	{
+-	    start_element = i + 1;
+-	    colon = 1;
+-	}
+-	if (c == '#' || c == '*')
+-	    break;
+-    }
+-    if (c == 0)
+-	start_element = i;
+-
+-   /*
+-    * start_element +> terminator for non-wildcarded section.
+-    * Transfer this bit into buf.
+-    */
+-    if (buflen + start_element + 4 >= MAXPATHL)
+-       return 0;			/* Buffer full */
+-    if (start_element >= 0)
+-    {
+-	if (*root && !colon)
+-	    buf[buflen++] = PATHSEP;
+-	strncpy(buf + buflen, rest, start_element);
+-	buflen += start_element;
+-    }
+-    buf[buflen] = 0;
+-
+-   /*
+-    * Did we reach the end of the string without hitting any wildcards?
+-    */
+-    if (c == 0)
+-    {
+-	/* Yes - add combined path to grow array and return. */
+-	addfile(gap, buf, flags);
+-	return 1;
+-    }
+-
+-    if (start_element < 0 || !colon)
+-	start_element++;
+-    rest += start_element;
+-
+-   /*
+-    * rest does contain wildcards if we get here.
+-    *
+-    * Now : have we reached the leaf names part yet?
+-    * If so, add all matches (files and dirs) to gap.
+-    * If not, get next path element and scan all matching directories.
+-    */
+-
+-    start_element = -1;
+-    for (i = 0; rest[i]; i++)
+-    {
+-	if (rest[i] == '.')
+-	{
+-	    start_element = i;
+-	    rest[i] = 0;		/* Break string here. */
+-	    break;
+-	}
+-    }
+-
+-    /* If start_element is -1 then we are matching leaf names */
+-
+-    r3 = 0;			/* Number of objs read. */
+-    dir_pos = 0;		/* Position through directory. */
+-    got = 0;			/* Files added so far. */
+-    while (dir_pos != -1)
+-    {
+-	buf[buflen] = 0;
+-	if (xswi(OS_GBPB, 9,
+-		buf,				/* Directory to scan. */
+-		buf + buflen + (1 - colon),	/* Buffer for result. */
+-		1,			/* Number of objects to read. */
+-		dir_pos,		/* Search position. */
+-		MAXPATHL - 2 - buflen,	/* Size of result buffer. */
+-		rest)			/* Wildcarded leafname. */
+-			& v_flag)
+-	{
+-	    EMSG(r0 + 4);
+-	    r4 = -1;
+-	}
+-	dir_pos = r4;		/* r4 corrupted by addfile() */
+-	if (r3 > 0)
+-	{
+-	    char_u *path = buf;
+-	    if (buflen == 0)
+-		path++;			/* Don't do '.File' */
+-	    else if (!colon)
+-		buf[buflen] = '.';		/* Join path and leaf */
+-
+-	   /* Path -> full path of object found */
+-	    if (start_element == -1)
+-	    {
+-		addfile(gap, path, flags);
+-		got++;
+-	    }
+-	    else
+-	    {
+-	       /* Scan into subdirectories and images; ignore files */
+-		swi(OS_File, 17, path);
+-		if (r0 == 2 || r0 == 3)
+-		    got += expand_section(gap,
+-						path,
+-						rest + start_element + 1,
+-						flags);
+-	    }
+-	}
+-    }
+-
+-    /* Restore the dot if we removed it. */
+-    if (start_element >= 0)
+-	rest[start_element] = '.';
+-    return got;
+-}
+-
+-/*
+- * mch_expand_wildcards() - this code does wild-card pattern matching using
+- * the shell. It isn't used under RISC OS.
+- *
+- * return OK for success, FAIL for error (you may lose some memory) and put
+- * an error message in *file.
+- *
+- * num_pat is number of input patterns
+- * pat is array of pointers to input patterns
+- * num_file is pointer to number of matched file names
+- * file is pointer to array of pointers to matched file names
+- */
+-    int
+-mch_expand_wildcards(num_pat, pat, num_file, file, flags)
+-    int		    num_pat;
+-    char_u	  **pat;
+-    int		   *num_file;
+-    char_u	 ***file;
+-    int		    flags;		/* EW_* flags */
+-{
+-    /* This doesn't get called unless SPECIAL_WILDCHAR is defined. */
+-    return FAIL;
+-}
+-
+-/*
+- * Return TRUE if "p" contains wildcards which can be expanded by
+- * mch_expandpath().
+- */
+-    int
+-mch_has_exp_wildcard(p)
+-    char_u	*p;
+-{
+-    if (vim_strpbrk((char_u *)"*#", p))
+-	return TRUE;
+-    return FALSE;
+-}
+-
+-/* Return TRUE if "p" contains wildcards. */
+-    int
+-mch_has_wildcard(p)
+-    char_u	*p;
+-{
+-    if (vim_strpbrk((char_u *)"*#`", p))
+-	return TRUE;
+-    return FALSE;
+-}
+-
+-    int			/* see Unix unlink(2) */
+-mch_remove(file)
+-    char_u *file;	/* Name of file to delete. */
+-{
+-    if (xswi(OS_FSControl, 27, file, 0, 0) & v_flag)
+-	return EXIT_FAILURE;
+-    return EXIT_SUCCESS;
+-}
+-
+-/* Try to make existing scripts work without modification.
+- * Return a pointer to the new string (freed by caller), or NULL
+- *
+- * Two main cases:
+- * - Absolute : $VIM/syntax/help.vim
+- * - Relative : Adfs::4.$.!Vim.Resources.Syntax/help.vim
+- */
+-    char_u *
+-mch_munge_fname(fname)
+-    char_u *fname;
+-{
+-    char_u c;
+-    int len;
+-    char_u *retval;
+-
+-    retval = fname = vim_strsave(fname);
+-    if (fname == NULL)
+-	return NULL;
+-
+-    if (strncmp(fname, "$VIM/", 5) == 0)
+-    {
+-	strncpy(fname, "Vim:", 4);
+-	for (fname += 5; c = *fname; fname++)
+-	{
+-	    if (c == '.')
+-		break;
+-	    if (c == '/')
+-		fname[-1] = '.';
+-	    else
+-		fname[-1] = c;
+-	}
+-	fname[-1] = '\0';
+-    }
+-    else
+-    {
+-	/* Check to see if the file exists without modification. */
+-	if (xswi(OS_File, 17, fname) & v_flag)
+-	    r0 == 0;		/* Invalid filename? */
+-	if (r0)
+-	    return retval;
+-
+-	len = strlen(fname);
+-	if (strcmp(fname + len - 4, ".vim") == 0)
+-	{
+-	    fname[len - 4] = '\0';
+-	    for (; c = *fname; fname++)
+-	    {
+-		if (c == '/')
+-		    *fname = '.';
+-	    }
+-	}
+-    }
+-    return retval;
+-}
+-
+-/* QuickFix reads munged names from the error file.
+- * Correct them.
+- */
+-    int
+-ro_buflist_add(old_name)
+-    char_u  *old_name;	/* Name of file found by quickfix */
+-{
+-    char_u  *fname;
+-    char_u  *leaf;	/* Pointer to start of leaf in old_name */
+-    char_u  *ptr;
+-    char_u  c;
+-    int	    retval;
+-
+-    if (old_name == NULL)
+-	return buflist_add(NULL, 0);
+-
+-    /* Copy the name so we can mess around with it. */
+-    fname = vim_strsave(old_name);
+-    if (fname == NULL)
+-	/* Out of memory - can't modify name */
+-	return buflist_add(old_name, 0);
+-
+-    /* Change `dir/main.c' into `dir.c.main' */
+-    leaf = fname;
+-    for (ptr = fname; c = *ptr; ptr++)
+-    {
+-	if (c == '/')
+-	{
+-	    leaf = ptr + 1;
+-	    *ptr = '.';
+-	}
+-	else if (c == '.')
+-	    break;
+-    }
+-    if (c == '.')
+-    {
+-	/* Change `main.c' into `c.main'
+-	 *	  |    |
+-	 *      leaf  ptr
+-	 */
+-	ptr += old_name - fname;
+-	*ptr = '\0';
+-	sprintf(leaf,
+-		"%s.%s",
+-		ptr + 1,
+-		leaf - fname + old_name);
+-    }
+-
+-    retval = buflist_add(fname, 0);
+-    free(fname);
+-    return retval;
+-}
+-
+-/* Change the current directory.
+- * Strip trailing dots to make it easier to use with filename completion.
+- * Return 0 for success, -1 for failure.
+- */
+-    int
+-mch_chdir(dir)
+-    char_u  *dir;
+-{
+-    int	    length;
+-    int	    retval;
+-    char_u  *new_dir;
+-
+-    if (p_verbose >= 5)
+-    {
+-	verbose_enter();
+-	smsg((char_u *)"chdir(%s)", dir);
+-	verbose_leave();
+-    }
+-    length = strlen(dir);
+-    if (dir[length - 1] != '.')
+-	return chdir(dir);	    /* No trailing dots - nothing to do. */
+-    new_dir = vim_strsave(dir);
+-    if (new_dir == NULL)
+-	return chdir(dir);	    /* Can't allocate memory. */
+-
+-    while (new_dir[--length] == '.')
+-	new_dir[length] = '\0';
+-
+-    retval = chdir(new_dir);
+-    vim_free(new_dir);
+-    return retval;
+-}
+-
+-/* Examine the named file, and set the 'osfiletype' option
+- * (in curbuf) to the file's type.
+- */
+-    void
+-mch_read_filetype(file)
+-    char_u  *file;
+-{
+-    int	    type;
+-    char_u  type_string[9];
+-    int	    i;
+-
+-    if (xswi(OS_File, 23, file) & v_flag)
+-	type = 0xfff;		/* Default to Text */
+-    else
+-	type = r6;
+-
+-    /* Type is the numerical value - see if we have a textual equivalent */
+-    swi(OS_FSControl, 18, 0, type);
+-    ((int *) type_string)[0] = r2;
+-    ((int *) type_string)[1] = r3;
+-    type_string[8] = 0;
+-    for (i = 0; type_string[i] > ' '; i++)
+-	;
+-    type_string[i] = 0;
+-
+-    set_string_option_direct("osfiletype", -1, type_string, OPT_FREE, 0);
+-    return;
+-}
+-
+-    void
+-mch_set_filetype(file, type)
+-    char_u  *file;
+-    char_u  *type;
+-{
+-    if (xswi(OS_FSControl, 31, type) & v_flag)
+-    {
+-	EMSG(_("E366: Invalid 'osfiletype' option - using Text"));
+-	r2 = 0xfff;
+-    }
+-
+-    swi(OS_File, 18, file, r2);
+-}
+-
+-/* Return TRUE if the file's type matches 'type'
+- * RISC OS types always start with '&'
+- */
+-    int
+-mch_check_filetype(fname, type)
+-    char_u  *fname;
+-    char_u  *type;
+-{
+-    int	    value;
+-    char    *end;
+-
+-    if (*type != '&')
+-	return FALSE;
+-
+-    value = strtol(type + 1, &end, 16);
+-    if (*end)
+-	return FALSE;		/* Invalid type (report error?) */
+-
+-    if (xswi(OS_File, 23, fname) & v_flag)
+-	return FALSE;		/* Invalid filename? */
+-
+-    return (r0 && r6 == value);
+-}
+diff -Naur vim73.orig/src/os_riscos.h vim73/src/os_riscos.h
+--- vim73.orig/src/os_riscos.h	2010-05-23 12:16:06.000000000 +0000
++++ vim73/src/os_riscos.h	1970-01-01 00:00:00.000000000 +0000
+@@ -1,166 +0,0 @@
+-/* vi:set ts=8 sts=4 sw=4:
+- *
+- * VIM - Vi IMproved	by Bram Moolenaar
+- *
+- * Do ":help uganda"  in Vim to read copying and usage conditions.
+- * Do ":help credits" in Vim to see a list of people who contributed.
+- */
+-
+-#include <sys/types.h>
+-#include <sys/stat.h>
+-#include <sys/ioctl.h>
+-#include <termios.h>
+-#include <stdlib.h>
+-#include <unixlib/local.h>
+-#include <errno.h>
+-#include <fcntl.h>
+-
+-#define CASE_INSENSITIVE_FILENAME
+-#define FEAT_MODIFY_FNAME
+-#define FEAT_OSFILETYPE
+-#define DFLT_OFT	"Text"
+-#define USE_TERM_CONSOLE
+-#define HAVE_AVAIL_MEM
+-
+-/* Longer filenames now accessible to all */
+-#ifndef BASENAMELEN
+-# define BASENAMELEN 64 /* Same length as unzip */
+-#endif
+-
+-#ifndef TEMNAME
+-# define TEMPNAME	"<Wimp$ScrapDir>.v?XXXXXX"
+-# define TEMPNAMELEN	25
+-#endif
+-
+-#ifndef DFLT_HELPFILE
+-# define DFLT_HELPFILE "Vim:doc.help"
+-#endif
+-
+-#ifndef DFLT_BDIR
+-# define DFLT_BDIR	".,<Wimp$ScrapDir>."	/* default for 'backupdir' */
+-#endif
+-
+-/* Paths to try putting swap file in. */
+-#ifndef DFLT_DIR
+-# define DFLT_DIR	"<Wimp$ScrapDir>.,."	/* default for 'directory' */
+-#endif
+-
+-#ifndef DFLT_VDIR
+-# define DFLT_VDIR	"Choices:Vim.view"	/* default for 'viewdir' */
+-#endif
+-
+-#ifndef TERMCAPFILE
+-# define TERMCAPFILE	"Vim:TermCap"
+-#endif
+-#define HAVE_TGETENT
+-
+-#ifndef SYNTAX_FNAME
+-# define SYNTAX_FNAME	"Vim:Syntax.%s"
+-#endif
+-
+-#ifndef EVIM_FILE
+-# define EVIM_FILE	"Vim:Evim"
+-#endif
+-
+-#define FEAT_VIMINFO
+-
+-#ifndef VIMINFO_FILE
+-# define VIMINFO_FILE	"<Choices$Write>.Vim.VimInfo"
+-#endif
+-#ifndef VIMINFO_FILE2
+-# define VIMINFO_FILE2	"Choices:Vim.VimInfo"
+-#endif
+-
+-#ifndef VIMRC_FILE
+-# define VIMRC_FILE	"/vimrc"
+-#endif
+-#ifndef EXRC_FILE
+-# define EXRC_FILE	"/exrc"
+-#endif
+-#ifndef GVIMRC_FILE
+-# define GVIMRC_FILE	"/gvimrc"
+-#endif
+-#ifndef USR_VIMRC_FILE
+-# define USR_VIMRC_FILE	"Vim:Evim"
+-#endif
+-#ifndef SESSION_FILE
+-# define SESSION_FILE	"/Session.vim"
+-#endif
+-#ifndef USR_VIMRC_FILE
+-# define USR_VIMRC_FILE	"Choices:Vim.VimRC"
+-#endif
+-#ifndef USR_GVIMRC_FILE
+-# define USR_GVIMRC_FILE    "Choices:Vim.GVimRC"
+-#endif
+-#ifndef USR_EXRC_FILE
+-# define USR_EXRC_FILE    "Choices:Vim.ExRC"
+-#endif
+-#ifndef SYS_VIMRC_FILE
+-# define SYS_VIMRC_FILE	    "Vim:VimRC"
+-#endif
+-#ifndef SYS_GVIMRC_FILE
+-# define SYS_GVIMRC_FILE    "Vim:GVimRC"
+-#endif
+-#ifndef SYS_MENU_FILE
+-# define SYS_MENU_FILE	    "Vim:Menu"
+-#endif
+-#ifndef SYS_OPTWIN_FILE
+-# define SYS_OPTWIN_FILE    "Vim:Optwin"
+-#endif
+-#ifndef FILETYPE_FILE
+-# define FILETYPE_FILE	    "Vim:Filetype"
+-#endif
+-#ifndef FTPLUGIN_FILE
+-# define FTPLUGIN_FILE	    "Vim:Ftplugin/vim"
+-#endif
+-#ifndef INDENT_FILE
+-# define INDENT_FILE	    "Vim:Indent/vim"
+-#endif
+-#ifndef FTOFF_FILE
+-# define FTOFF_FILE	    "Vim:Ftoff"
+-#endif
+-#ifndef FTPLUGOF_FILE
+-# define FTPLUGOF_FILE	    "Vim:Ftplugof"
+-#endif
+-#ifndef INDOFF_FILE
+-# define INDOFF_FILE	    "Vim:Indoff"
+-#endif
+-
+-#define DFLT_ERRORFILE		"errors/vim"
+-#define DFLT_RUNTIMEPATH	"Choices:Vim,Vim:,Choices:Vim.after"
+-
+-/*
+- * RISC PCs have plenty of memory, use large buffers
+- */
+-#define CMDBUFFSIZE 1024	/* size of the command processing buffer */
+-#define MAXPATHL    256		/* paths are always quite short though */
+-
+-#ifndef DFLT_MAXMEM
+-# define DFLT_MAXMEM	(5*1024)    /* use up to 5 Mbyte for a buffer */
+-#endif
+-
+-#ifndef DFLT_MAXMEMTOT
+-# define DFLT_MAXMEMTOT	(10*1024)    /* use up to 10 Mbyte for Vim */
+-#endif
+-
+-#ifdef HAVE_SIGSET
+-# define signal sigset
+-#endif
+-
+-#define n_flag (1<<31)
+-#define z_flag (1<<30)
+-#define c_flag (1<<29)
+-#define v_flag (1<<28)
+-
+-/* These take r0-r7 as inputs, returns r0-r7 in global variables. */
+-void swi(int swinum, ...);      /* Handles errors itself */
+-int xswi(int swinum, ...);      /* Returns errors using v flag */
+-extern int r0, r1, r2, r3, r4, r5, r6, r7;  /* For return values */
+-
+-#include <kernel.h>
+-#include <swis.h>
+-
+-#define mch_memmove(to, from, len) memmove((char *)(to), (char *)(from), len)
+-#define mch_rename(src, dst) rename(src, dst)
+-#define mch_getenv(x) (char_u *)getenv((char *)x)
+-#define mch_setenv(name, val, x) setenv(name, val, x)
+diff -Naur vim73.orig/src/os_unix.c vim73/src/os_unix.c
+--- vim73.orig/src/os_unix.c	2010-08-08 13:14:04.000000000 +0000
++++ vim73/src/os_unix.c	2013-06-07 17:07:33.215580494 +0000
+@@ -61,6 +61,11 @@
+ #  include <cygwin/version.h>
+ #  include <sys/cygwin.h>	/* for cygwin_conv_to_posix_path() and/or
+ 				 * for cygwin_conv_path() */
++#  ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
++#   define WIN32_LEAN_AND_MEAN
++#   include <windows.h>
++#   include "winclip.pro"
++#  endif
+ # endif
+ #endif
+ 
+@@ -127,6 +132,7 @@
+ #  include <X11/Shell.h>
+ #  include <X11/StringDefs.h>
+ static Widget	xterm_Shell = (Widget)0;
++static void clip_update __ARGS((void));
+ static void xterm_update __ARGS((void));
+ # endif
+ 
+@@ -154,6 +160,13 @@
+ 
+ static void may_core_dump __ARGS((void));
+ 
++#ifdef HAVE_UNION_WAIT
++typedef union wait waitstatus;
++#else
++typedef int waitstatus;
++#endif
++static pid_t wait4pid __ARGS((pid_t, waitstatus *));
++
+ static int  WaitForChar __ARGS((long));
+ #if defined(__BEOS__)
+ int  RealWaitForChar __ARGS((int, long, int *));
+@@ -271,7 +284,8 @@
+ #ifdef SIGBUS
+     {SIGBUS,	    "BUS",	TRUE},
+ #endif
+-#ifdef SIGSEGV
++#if defined(SIGSEGV) && !defined(FEAT_MZSCHEME)
++    /* MzScheme uses SEGV in its garbage collector */
+     {SIGSEGV,	    "SEGV",	TRUE},
+ #endif
+ #ifdef SIGSYS
+@@ -283,7 +297,7 @@
+ #ifdef SIGTERM
+     {SIGTERM,	    "TERM",	TRUE},
+ #endif
+-#ifdef SIGVTALRM
++#if defined(SIGVTALRM) && !defined(FEAT_RUBY)
+     {SIGVTALRM,	    "VTALRM",	TRUE},
+ #endif
+ #if defined(SIGPROF) && !defined(FEAT_MZSCHEME) && !defined(WE_ARE_PROFILING)
+@@ -1107,7 +1121,7 @@
+  * On Linux, signal is not always handled immediately either.
+  * See https://bugs.launchpad.net/bugs/291373
+  *
+- * volatile because it is used in in signal handler sigcont_handler().
++ * volatile because it is used in signal handler sigcont_handler().
+  */
+ static volatile int sigcont_received;
+ static RETSIGTYPE sigcont_handler __ARGS(SIGPROTOARG);
+@@ -1123,6 +1137,75 @@
+ }
+ #endif
+ 
++# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++static void loose_clipboard __ARGS((void));
++# ifdef USE_SYSTEM
++static void save_clipboard __ARGS((void));
++static void restore_clipboard __ARGS((void));
++
++static void *clip_star_save = NULL;
++static void *clip_plus_save = NULL;
++# endif
++
++/*
++ * Called when Vim is going to sleep or execute a shell command.
++ * We can't respond to requests for the X selections.  Lose them, otherwise
++ * other applications will hang.  But first copy the text to cut buffer 0.
++ */
++    static void
++loose_clipboard()
++{
++    if (clip_star.owned || clip_plus.owned)
++    {
++	x11_export_final_selection();
++	if (clip_star.owned)
++	    clip_lose_selection(&clip_star);
++	if (clip_plus.owned)
++	    clip_lose_selection(&clip_plus);
++	if (x11_display != NULL)
++	    XFlush(x11_display);
++    }
++}
++
++# ifdef USE_SYSTEM
++/*
++ * Save clipboard text to restore later.
++ */
++    static void
++save_clipboard()
++{
++    if (clip_star.owned)
++	clip_star_save = get_register('*', TRUE);
++    if (clip_plus.owned)
++	clip_plus_save = get_register('+', TRUE);
++}
++
++/*
++ * Restore clipboard text if no one own the X selection.
++ */
++    static void
++restore_clipboard()
++{
++    if (clip_star_save != NULL)
++    {
++	if (!clip_gen_owner_exists(&clip_star))
++	    put_register('*', clip_star_save);
++	else
++	    free_register(clip_star_save);
++	clip_star_save = NULL;
++    }
++    if (clip_plus_save != NULL)
++    {
++	if (!clip_gen_owner_exists(&clip_plus))
++	    put_register('+', clip_plus_save);
++	else
++	    free_register(clip_plus_save);
++	clip_plus_save = NULL;
++    }
++}
++# endif
++#endif
++
+ /*
+  * If the machine has job control, use it to suspend the program,
+  * otherwise fake it by starting a new shell.
+@@ -1137,19 +1220,7 @@
+     out_flush();	    /* needed to disable mouse on some systems */
+ 
+ # if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+-    /* Since we are going to sleep, we can't respond to requests for the X
+-     * selections.  Lose them, otherwise other applications will hang.  But
+-     * first copy the text to cut buffer 0. */
+-    if (clip_star.owned || clip_plus.owned)
+-    {
+-	x11_export_final_selection();
+-	if (clip_star.owned)
+-	    clip_lose_selection(&clip_star);
+-	if (clip_plus.owned)
+-	    clip_lose_selection(&clip_plus);
+-	if (x11_display != NULL)
+-	    XFlush(x11_display);
+-    }
++    loose_clipboard();
+ # endif
+ 
+ # if defined(_REENTRANT) && defined(SIGCONT)
+@@ -1203,6 +1274,9 @@
+ #ifdef MACOS_CONVERT
+     mac_conv_init();
+ #endif
++#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
++    win_clip_init();
++#endif
+ }
+ 
+     static void
+@@ -1726,6 +1800,11 @@
+     }
+     if (x11_window == 0 || x11_display == NULL)
+ 	return (result = FAIL);
++
++# ifdef FEAT_EVAL
++    set_vim_var_nr(VV_WINDOWID, (long)x11_window);
++# endif
++
+     return (result = OK);
+ }
+ 
+@@ -2134,10 +2213,16 @@
+  * Return non-zero when using an xterm mouse, according to 'ttymouse'.
+  * Return 1 for "xterm".
+  * Return 2 for "xterm2".
++ * Return 3 for "urxvt".
++ * Return 4 for "sgr".
+  */
+     int
+ use_xterm_mouse()
+ {
++    if (ttym_flags == TTYM_SGR)
++	return 4;
++    if (ttym_flags == TTYM_URXVT)
++	return 3;
+     if (ttym_flags == TTYM_XTERM2)
+ 	return 2;
+     if (ttym_flags == TTYM_XTERM)
+@@ -2482,15 +2567,12 @@
+ 	}
+ 
+ 	l = STRLEN(buf);
+-	if (l >= len)
+-	    retval = FAIL;
++	if (l >= len - 1)
++	    retval = FAIL; /* no space for trailing "/" */
+ #ifndef VMS
+-	else
+-	{
+-	    if (l > 0 && buf[l - 1] != '/' && *fname != NUL
++	else if (l > 0 && buf[l - 1] != '/' && *fname != NUL
+ 						   && STRCMP(fname, ".") != 0)
+-		STRCAT(buf, "/");
+-	}
++	    STRCAT(buf, "/");
+ #endif
+     }
+ 
+@@ -2719,6 +2801,13 @@
+ #ifdef HAVE_POSIX_ACL
+     ret = (vim_acl_T)acl_get_file((char *)fname, ACL_TYPE_ACCESS);
+ #else
++#ifdef HAVE_SOLARIS_ZFS_ACL
++    acl_t *aclent;
++
++    if (acl_get((char *)fname, 0, &aclent) < 0)
++	return NULL;
++    ret = (vim_acl_T)aclent;
++#else
+ #ifdef HAVE_SOLARIS_ACL
+     vim_acl_solaris_T   *aclent;
+ 
+@@ -2764,6 +2853,7 @@
+     ret = (vim_acl_T)aclent;
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++#endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+     return ret;
+ }
+@@ -2781,6 +2871,9 @@
+ #ifdef HAVE_POSIX_ACL
+     acl_set_file((char *)fname, ACL_TYPE_ACCESS, (acl_t)aclent);
+ #else
++#ifdef HAVE_SOLARIS_ZFS_ACL
++    acl_set((char *)fname, (acl_t *)aclent);
++#else
+ #ifdef HAVE_SOLARIS_ACL
+     acl((char *)fname, SETACL, ((vim_acl_solaris_T *)aclent)->acl_cnt,
+ 	    ((vim_acl_solaris_T *)aclent)->acl_entry);
+@@ -2789,6 +2882,7 @@
+     chacl((char *)fname, aclent, ((struct acl *)aclent)->acl_len);
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++#endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ }
+ 
+@@ -2801,6 +2895,9 @@
+ #ifdef HAVE_POSIX_ACL
+     acl_free((acl_t)aclent);
+ #else
++#ifdef HAVE_SOLARIS_ZFS_ACL
++    acl_free((acl_t *)aclent);
++#else
+ #ifdef HAVE_SOLARIS_ACL
+     free(((vim_acl_solaris_T *)aclent)->acl_entry);
+     free(aclent);
+@@ -2809,6 +2906,7 @@
+     free(aclent);
+ #endif /* HAVE_AIX_ACL */
+ #endif /* HAVE_SOLARIS_ACL */
++#endif /* HAVE_SOLARIS_ZFS_ACL */
+ #endif /* HAVE_POSIX_ACL */
+ }
+ #endif
+@@ -3294,6 +3392,29 @@
+ 	return;
+ 
+     xterm_mouse_vers = use_xterm_mouse();
++
++# ifdef FEAT_MOUSE_URXVT
++    if (ttym_flags == TTYM_URXVT)
++    {
++	out_str_nf((char_u *)
++		   (on
++		   ? IF_EB("\033[?1015h", ESC_STR "[?1015h")
++		   : IF_EB("\033[?1015l", ESC_STR "[?1015l")));
++	ison = on;
++    }
++# endif
++
++# ifdef FEAT_MOUSE_SGR
++    if (ttym_flags == TTYM_SGR)
++    {
++	out_str_nf((char_u *)
++		   (on
++		   ? IF_EB("\033[?1006h", ESC_STR "[?1006h")
++		   : IF_EB("\033[?1006l", ESC_STR "[?1006l")));
++	ison = on;
++    }
++# endif
++
+     if (xterm_mouse_vers > 0)
+     {
+ 	if (on)	/* enable mouse events, use mouse tracking if available */
+@@ -3372,13 +3493,14 @@
+ 	     *	  4 = Windows Cross Hair
+ 	     *	  5 = Windows UP Arrow
+ 	     */
+-#ifdef JSBTERM_MOUSE_NONADVANCED /* Disables full feedback of pointer movements */
++#  ifdef JSBTERM_MOUSE_NONADVANCED
++	    /* Disables full feedback of pointer movements */
+ 	    out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK1Q\033\\",
+ 					 ESC_STR "[0~ZwLMRK1Q" ESC_STR "\\"));
+-#else
++#  else
+ 	    out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK+1Q\033\\",
+ 					ESC_STR "[0~ZwLMRK+1Q" ESC_STR "\\"));
+-#endif
++#  endif
+ 	    ison = TRUE;
+ 	}
+ 	else
+@@ -3410,6 +3532,9 @@
+ {
+ # ifdef FEAT_MOUSE_XTERM
+     if (use_xterm_mouse()
++# ifdef FEAT_MOUSE_URXVT
++	    && use_xterm_mouse() != 3
++# endif
+ #  ifdef FEAT_GUI
+ 	    && !gui.in_use
+ #  endif
+@@ -3499,6 +3624,48 @@
+     else
+ 	del_mouse_termcode(KS_PTERM_MOUSE);
+ # endif
++# ifdef FEAT_MOUSE_URXVT
++    /* same as the dec mouse */
++    if (use_xterm_mouse() == 3
++#  ifdef FEAT_GUI
++	    && !gui.in_use
++#  endif
++	    )
++    {
++	set_mouse_termcode(KS_URXVT_MOUSE, (char_u *)(term_is_8bit(T_NAME)
++		    ? IF_EB("\233", CSI_STR)
++		    : IF_EB("\033[", ESC_STR "[")));
++
++	if (*p_mouse != NUL)
++	{
++	    mch_setmouse(FALSE);
++	    setmouse();
++	}
++    }
++    else
++	del_mouse_termcode(KS_URXVT_MOUSE);
++# endif
++# ifdef FEAT_MOUSE_SGR
++    /* same as the dec mouse */
++    if (use_xterm_mouse() == 4
++#  ifdef FEAT_GUI
++	    && !gui.in_use
++#  endif
++	    )
++    {
++	set_mouse_termcode(KS_SGR_MOUSE, (char_u *)(term_is_8bit(T_NAME)
++		    ? IF_EB("\233<", CSI_STR "<")
++		    : IF_EB("\033[<", ESC_STR "[<")));
++
++	if (*p_mouse != NUL)
++	{
++	    mch_setmouse(FALSE);
++	    setmouse();
++	}
++    }
++    else
++	del_mouse_termcode(KS_SGR_MOUSE);
++# endif
+ }
+ #endif
+ 
+@@ -3643,26 +3810,43 @@
+     /* Nothing to do. */
+ }
+ 
+-#ifndef USE_SYSTEM
+-static void append_ga_line __ARGS((garray_T *gap));
+-
+ /*
+- * Append the text in "gap" below the cursor line and clear "gap".
++ * Wait for process "child" to end.
++ * Return "child" if it exited properly, <= 0 on error.
+  */
+-    static void
+-append_ga_line(gap)
+-    garray_T	*gap;
+-{
+-    /* Remove trailing CR. */
+-    if (gap->ga_len > 0
+-	    && !curbuf->b_p_bin
+-	    && ((char_u *)gap->ga_data)[gap->ga_len - 1] == CAR)
+-	--gap->ga_len;
+-    ga_append(gap, NUL);
+-    ml_append(curwin->w_cursor.lnum++, gap->ga_data, 0, FALSE);
+-    gap->ga_len = 0;
++    static pid_t
++wait4pid(child, status)
++    pid_t	child;
++    waitstatus	*status;
++{
++    pid_t wait_pid = 0;
++
++    while (wait_pid != child)
++    {
++	/* When compiled with Python threads are probably used, in which case
++	 * wait() sometimes hangs for no obvious reason.  Use waitpid()
++	 * instead and loop (like the GUI). Also needed for other interfaces,
++	 * they might call system(). */
++# ifdef __NeXT__
++	wait_pid = wait4(child, status, WNOHANG, (struct rusage *)0);
++# else
++	wait_pid = waitpid(child, status, WNOHANG);
++# endif
++	if (wait_pid == 0)
++	{
++	    /* Wait for 10 msec before trying again. */
++	    mch_delay(10L, TRUE);
++	    continue;
++	}
++	if (wait_pid <= 0
++# ifdef ECHILD
++		&& errno == ECHILD
++# endif
++	   )
++	    break;
++    }
++    return wait_pid;
+ }
+-#endif
+ 
+     int
+ mch_call_shell(cmd, options)
+@@ -3706,6 +3890,11 @@
+     if (options & SHELL_COOKED)
+ 	settmode(TMODE_COOK);	    /* set to normal mode */
+ 
++# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++    save_clipboard();
++    loose_clipboard();
++# endif
++
+ # ifdef __EMX__
+     if (cmd == NULL)
+ 	x = system("");	/* this starts an interactive shell in emx */
+@@ -3776,6 +3965,9 @@
+ # ifdef FEAT_TITLE
+     resettitle();
+ # endif
++# if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
++    restore_clipboard();
++# endif
+     return x;
+ 
+ #else /* USE_SYSTEM */	    /* don't use system(), use fork()/exec() */
+@@ -3795,6 +3987,7 @@
+     int		retval = -1;
+     char	**argv = NULL;
+     int		argc;
++    char_u	*p_shcf_copy = NULL;
+     int		i;
+     char_u	*p;
+     int		inquote;
+@@ -3814,14 +4007,14 @@
+ # endif
+     int		did_settmode = FALSE;	/* settmode(TMODE_RAW) called */
+ 
+-    out_flush();
+-    if (options & SHELL_COOKED)
+-	settmode(TMODE_COOK);		/* set to normal mode */
+-
+     newcmd = vim_strsave(p_sh);
+     if (newcmd == NULL)		/* out of memory */
+ 	goto error;
+ 
++    out_flush();
++    if (options & SHELL_COOKED)
++	settmode(TMODE_COOK);		/* set to normal mode */
++
+     /*
+      * Do this loop twice:
+      * 1: find number of arguments
+@@ -3851,6 +4044,19 @@
+ 	}
+ 	if (argv == NULL)
+ 	{
++	    /*
++	     * Account for possible multiple args in p_shcf.
++	     */
++	    p = p_shcf;
++	    for (;;)
++	    {
++		p = skiptowhite(p);
++		if (*p == NUL)
++		    break;
++		++argc;
++		p = skipwhite(p);
++	    }
++
+ 	    argv = (char **)alloc((unsigned)((argc + 4) * sizeof(char *)));
+ 	    if (argv == NULL)	    /* out of memory */
+ 		goto error;
+@@ -3858,9 +4064,27 @@
+     }
+     if (cmd != NULL)
+     {
++	char_u	*s;
++
+ 	if (extra_shell_arg != NULL)
+ 	    argv[argc++] = (char *)extra_shell_arg;
+-	argv[argc++] = (char *)p_shcf;
++
++	/* Break 'shellcmdflag' into white separated parts.  This doesn't
++	 * handle quoted strings, they are very unlikely to appear. */
++	p_shcf_copy = alloc((unsigned)STRLEN(p_shcf) + 1);
++	if (p_shcf_copy == NULL)    /* out of memory */
++	    goto error;
++	s = p_shcf_copy;
++	p = p_shcf;
++	while (*p != NUL)
++	{
++	    argv[argc++] = (char *)s;
++	    while (*p && *p != ' ' && *p != TAB)
++		*s++ = *p++;
++	    *s++ = NUL;
++	    p = skipwhite(p);
++	}
++
+ 	argv[argc++] = (char *)cmd;
+     }
+     argv[argc] = NULL;
+@@ -3885,11 +4109,21 @@
+ 	if (p_guipty && !(options & (SHELL_READ|SHELL_WRITE)))
+ 	{
+ 	    pty_master_fd = OpenPTY(&tty_name);	    /* open pty */
+-	    if (pty_master_fd >= 0 && ((pty_slave_fd =
+-				    open(tty_name, O_RDWR | O_EXTRA, 0)) < 0))
++	    if (pty_master_fd >= 0)
+ 	    {
+-		close(pty_master_fd);
+-		pty_master_fd = -1;
++		/* Leaving out O_NOCTTY may lead to waitpid() always returning
++		 * 0 on Mac OS X 10.7 thereby causing freezes. Let's assume
++		 * adding O_NOCTTY always works when defined. */
++#ifdef O_NOCTTY
++		pty_slave_fd = open(tty_name, O_RDWR | O_NOCTTY | O_EXTRA, 0);
++#else
++		pty_slave_fd = open(tty_name, O_RDWR | O_EXTRA, 0);
++#endif
++		if (pty_slave_fd < 0)
++		{
++		    close(pty_master_fd);
++		    pty_master_fd = -1;
++		}
+ 	    }
+ 	}
+ 	/*
+@@ -4148,7 +4382,6 @@
+ # ifdef FEAT_GUI
+ 		if (pty_master_fd >= 0)
+ 		{
+-		    close(pty_slave_fd);	/* close slave side of pty */
+ 		    fromshell_fd = pty_master_fd;
+ 		    toshell_fd = dup(pty_master_fd);
+ 		}
+@@ -4190,15 +4423,13 @@
+ 		    {
+ 			MSG_PUTS(_("\nCannot fork\n"));
+ 		    }
+-		    else if (wpid == 0)
++		    else if (wpid == 0) /* child */
+ 		    {
+ 			linenr_T    lnum = curbuf->b_op_start.lnum;
+ 			int	    written = 0;
+ 			char_u	    *lp = ml_get(lnum);
+-			char_u	    *s;
+ 			size_t	    l;
+ 
+-			/* child */
+ 			close(fromshell_fd);
+ 			for (;;)
+ 			{
+@@ -4210,7 +4441,8 @@
+ 				len = write(toshell_fd, "", (size_t)1);
+ 			    else
+ 			    {
+-				s = vim_strchr(lp + written, NL);
++				char_u	*s = vim_strchr(lp + written, NL);
++
+ 				len = write(toshell_fd, (char *)lp + written,
+ 					   s == NULL ? l
+ 					      : (size_t)(s - (lp + written)));
+@@ -4221,7 +4453,7 @@
+ 				 * should not have one. */
+ 				if (lnum != curbuf->b_op_end.lnum
+ 					|| !curbuf->b_p_bin
+-					|| (lnum != write_no_eol_lnum
++					|| (lnum != curbuf->b_no_eol_lnum
+ 					    && (lnum !=
+ 						    curbuf->b_ml.ml_line_count
+ 						    || curbuf->b_p_eol)))
+@@ -4243,7 +4475,7 @@
+ 			}
+ 			_exit(0);
+ 		    }
+-		    else
++		    else /* parent */
+ 		    {
+ 			close(toshell_fd);
+ 			toshell_fd = -1;
+@@ -4430,7 +4662,7 @@
+ 		    ++noread_cnt;
+ 		    while (RealWaitForChar(fromshell_fd, 10L, NULL))
+ 		    {
+-			len = read(fromshell_fd, (char *)buffer
++			len = read_eintr(fromshell_fd, buffer
+ # ifdef FEAT_MBYTE
+ 				+ buffer_off, (size_t)(BUFLEN - buffer_off)
+ # else
+@@ -4540,7 +4772,7 @@
+ 		     * typed characters (otherwise we would lose typeahead).
+ 		     */
+ # ifdef __NeXT__
+-		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *) 0);
++		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+ # else
+ 		    wait_pid = waitpid(pid, &status, WNOHANG);
+ # endif
+@@ -4555,6 +4787,11 @@
+ 		    }
+ 		    else
+ 			wait_pid = 0;
++
++# if defined(FEAT_XCLIPBOARD) && defined(FEAT_X11)
++		    /* Handle any X events, e.g. serving the clipboard. */
++		    clip_update();
++# endif
+ 		}
+ finished:
+ 		p_more = p_more_save;
+@@ -4564,10 +4801,10 @@
+ 		    {
+ 			append_ga_line(&ga);
+ 			/* remember that the NL was missing */
+-			write_no_eol_lnum = curwin->w_cursor.lnum;
++			curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
+ 		    }
+ 		    else
+-			write_no_eol_lnum = 0;
++			curbuf->b_no_eol_lnum = 0;
+ 		    ga_clear(&ga);
+ 		}
+ 
+@@ -4581,6 +4818,45 @@
+ 		    close(toshell_fd);
+ 		close(fromshell_fd);
+ 	    }
++# if defined(FEAT_XCLIPBOARD) && defined(FEAT_X11)
++	    else
++	    {
++		/*
++		 * Similar to the loop above, but only handle X events, no
++		 * I/O.
++		 */
++		for (;;)
++		{
++		    if (got_int)
++		    {
++			/* CTRL-C sends a signal to the child, we ignore it
++			 * ourselves */
++#  ifdef HAVE_SETSID
++			kill(-pid, SIGINT);
++#  else
++			kill(0, SIGINT);
++#  endif
++			got_int = FALSE;
++		    }
++# ifdef __NeXT__
++		    wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
++# else
++		    wait_pid = waitpid(pid, &status, WNOHANG);
++# endif
++		    if ((wait_pid == (pid_t)-1 && errno == ECHILD)
++			    || (wait_pid == pid && WIFEXITED(status)))
++		    {
++			wait_pid = pid;
++			break;
++		    }
++
++		    /* Handle any X events, e.g. serving the clipboard. */
++		    clip_update();
++
++		    mch_delay(10L, TRUE);
++		}
++	    }
++# endif
+ 
+ 	    /*
+ 	     * Wait until our child has exited.
+@@ -4589,38 +4865,24 @@
+ 	     * Don't wait if wait_pid was already set above, indicating the
+ 	     * child already exited.
+ 	     */
+-	    while (wait_pid != pid)
+-	    {
+-# ifdef _THREAD_SAFE
+-		/* Ugly hack: when compiled with Python threads are probably
+-		 * used, in which case wait() sometimes hangs for no obvious
+-		 * reason.  Use waitpid() instead and loop (like the GUI). */
+-#  ifdef __NeXT__
+-		wait_pid = wait4(pid, &status, WNOHANG, (struct rusage *)0);
+-#  else
+-		wait_pid = waitpid(pid, &status, WNOHANG);
+-#  endif
+-		if (wait_pid == 0)
+-		{
+-		    /* Wait for 1/100 sec before trying again. */
+-		    mch_delay(10L, TRUE);
+-		    continue;
+-		}
+-# else
+-		wait_pid = wait(&status);
+-# endif
+-		if (wait_pid <= 0
+-# ifdef ECHILD
+-			&& errno == ECHILD
++	    if (wait_pid != pid)
++		wait_pid = wait4pid(pid, &status);
++
++# ifdef FEAT_GUI
++	    /* Close slave side of pty.  Only do this after the child has
++	     * exited, otherwise the child may hang when it tries to write on
++	     * the pty. */
++	    if (pty_master_fd >= 0)
++		close(pty_slave_fd);
+ # endif
+-		   )
+-		    break;
+-	    }
+ 
+ 	    /* Make sure the child that writes to the external program is
+ 	     * dead. */
+ 	    if (wpid > 0)
++	    {
+ 		kill(wpid, SIGKILL);
++		wait4pid(wpid, NULL);
++	    }
+ 
+ 	    /*
+ 	     * Set to raw mode right now, otherwise a CTRL-C after
+@@ -4635,7 +4897,7 @@
+ 	    {
+ 		/* LINTED avoid "bitwise operation on signed value" */
+ 		retval = WEXITSTATUS(status);
+-		if (retval && !emsg_silent)
++		if (retval != 0 && !emsg_silent)
+ 		{
+ 		    if (retval == EXEC_FAILED)
+ 		    {
+@@ -4656,6 +4918,7 @@
+ 	}
+     }
+     vim_free(argv);
++    vim_free(p_shcf_copy);
+ 
+ error:
+     if (!did_settmode)
+@@ -4766,7 +5029,8 @@
+ 
+ /*
+  * Wait "msec" msec until a character is available from file descriptor "fd".
+- * Time == -1 will block forever.
++ * "msec" == 0 will check for characters once.
++ * "msec" == -1 will block until a character is available.
+  * When a GUI is being used, this will not be used for input -- webb
+  * Returns also, when a request from Sniff is waiting -- toni.
+  * Or when a Linux GPM mouse event is waiting.
+@@ -5004,7 +5268,8 @@
+ 	/*
+ 	 * Select on ready for reading and exceptional condition (end of file).
+ 	 */
+-	FD_ZERO(&rfds); /* calls bzero() on a sun */
++select_eintr:
++	FD_ZERO(&rfds);
+ 	FD_ZERO(&efds);
+ 	FD_SET(fd, &rfds);
+ # if !defined(__QNX__) && !defined(__CYGWIN32__)
+@@ -5028,6 +5293,10 @@
+ 	    FD_SET(ConnectionNumber(xterm_dpy), &rfds);
+ 	    if (maxfd < ConnectionNumber(xterm_dpy))
+ 		maxfd = ConnectionNumber(xterm_dpy);
++
++	    /* An event may have already been read but not handled.  In
++	     * particulary, XFlush may cause this. */
++	    xterm_update();
+ 	}
+ # endif
+ # ifdef FEAT_MOUSE_GPM
+@@ -5048,14 +5317,14 @@
+ 		maxfd = xsmp_icefd;
+ 	}
+ # endif
+-#ifdef FEAT_NETBEANS_INTG
++# ifdef FEAT_NETBEANS_INTG
+ 	if (nb_fd != -1)
+ 	{
+ 	    FD_SET(nb_fd, &rfds);
+ 	    if (maxfd < nb_fd)
+ 		maxfd = nb_fd;
+ 	}
+-#endif
++# endif
+ 
+ # ifdef OLD_VMS
+ 	/* Old VMS as v6.2 and older have broken select(). It waits more than
+@@ -5064,6 +5333,21 @@
+ # else
+ 	ret = select(maxfd + 1, &rfds, NULL, &efds, tvp);
+ # endif
++# ifdef EINTR
++	if (ret == -1 && errno == EINTR)
++	{
++	    /* Check whether window has been resized, EINTR may be caused by
++	     * SIGWINCH. */
++	    if (do_resize)
++		handle_resize();
++
++	    /* Interrupted by a signal, need to try again.  We ignore msec
++	     * here, because we do want to check even after a timeout if
++	     * characters are available.  Needed for reading output of an
++	     * external command after the process has finished. */
++	    goto select_eintr;
++	}
++# endif
+ # ifdef __TANDEM
+ 	if (ret == -1 && errno == ENOTSUP)
+ 	{
+@@ -5071,7 +5355,7 @@
+ 	    FD_ZERO(&efds);
+ 	    ret = 0;
+ 	}
+-#endif
++# endif
+ # ifdef FEAT_MZSCHEME
+ 	if (ret == 0 && mzquantum_used)
+ 	    /* loop if MzThreads must be scheduled and timeout occurred */
+@@ -5693,6 +5977,7 @@
+ 	if (shell_style == STYLE_PRINT && !did_find_nul)
+ 	{
+ 	    /* If there is a NUL, set did_find_nul, else set check_spaces */
++	    buffer[len] = NUL;
+ 	    if (len && (int)STRLEN(buffer) < (int)len - 1)
+ 		did_find_nul = TRUE;
+ 	    else
+@@ -6562,7 +6847,7 @@
+ 	    xterm_hints.x = 2;
+ 	return TRUE;
+     }
+-    if (mouse_code == NULL)
++    if (mouse_code == NULL || STRLEN(mouse_code) > 45)
+     {
+ 	xterm_trace = 0;
+ 	return FALSE;
+@@ -6623,6 +6908,21 @@
+ # endif
+ 
+ /*
++ * Catch up with GUI or X events.
++ */
++    static void
++clip_update()
++{
++# ifdef FEAT_GUI
++    if (gui.in_use)
++	gui_mch_update();
++    else
++# endif
++    if (xterm_Shell != (Widget)0)
++	xterm_update();
++}
++
++/*
+  * Catch up with any queued X events.  This may put keyboard input into the
+  * input buffer, call resize call-backs, trigger timers etc.  If there is
+  * nothing in the X event queue (& no timers pending), then we return
+diff -Naur vim73.orig/src/os_unix.h vim73/src/os_unix.h
+--- vim73.orig/src/os_unix.h	2010-05-23 12:16:14.000000000 +0000
++++ vim73/src/os_unix.h	2013-06-07 17:07:33.235580437 +0000
+@@ -184,10 +184,6 @@
+ 
+ #define BASENAMELEN	(MAXNAMLEN - 5)
+ 
+-#ifdef HAVE_ERRNO_H
+-# include <errno.h>
+-#endif
+-
+ #ifdef HAVE_PWD_H
+ # include <pwd.h>
+ #endif
+@@ -202,6 +198,9 @@
+ # define HAVE_TOTAL_MEM
+ #endif
+ 
++
++#ifndef PROTO
++
+ #ifdef VMS
+ # include <unixio.h>
+ # include <unixlib.h>
+@@ -230,7 +229,11 @@
+ # ifdef FEAT_GUI_GTK
+ #  include "gui_gtk_vms.h"
+ # endif
++#endif
++
++#endif /* PROTO */
+ 
++#ifdef VMS
+ typedef struct dsc$descriptor   DESC;
+ #endif
+ 
+diff -Naur vim73.orig/src/os_win16.c vim73/src/os_win16.c
+--- vim73.orig/src/os_win16.c	2010-06-26 04:03:31.000000000 +0000
++++ vim73/src/os_win16.c	2013-06-07 17:07:33.342246799 +0000
+@@ -20,20 +20,25 @@
+ # pragma warn -obs
+ #endif
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+-#include <dos.h>
++/* cproto fails on missing include files */
++#ifndef PROTO
++# include <dos.h>
++#endif
++
+ #include <string.h>
+ #include <sys/types.h>
+-#include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+-#include <process.h>
+ 
+-#undef chdir
+-#include <direct.h>
+-#include <shellapi.h>	/* required for FindExecutable() */
++#ifndef PROTO
++# include <process.h>
++
++# undef chdir
++# include <direct.h>
++# include <shellapi.h>	/* required for FindExecutable() */
++#endif
+ 
+ 
+ /* Record all output and all keyboard & mouse input */
+@@ -245,9 +250,9 @@
+ 	/* Wait for the command to terminate before continuing */
+ 	while (GetModuleUsage((HINSTANCE)h_module) > 0 && again )
+ 	{
+-	    while( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) && again )
++	    while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) && again)
+ 	    {
+-		if(msg.message == WM_QUIT)
++		if (msg.message == WM_QUIT)
+ 
+ 		{
+ 		    PostQuitMessage(msg.wParam);
+@@ -381,13 +386,13 @@
+ 
+ 
+ /*
+- * How much memory is available?
++ * How much memory is available in Kbyte?
+  */
+     long_u
+ mch_avail_mem(
+     int special)
+ {
+-    return GetFreeSpace(0);
++    return GetFreeSpace(0) >> 10;
+ }
+ 
+ 
+diff -Naur vim73.orig/src/os_win16.h vim73/src/os_win16.h
+--- vim73.orig/src/os_win16.h	2010-05-15 11:04:06.000000000 +0000
++++ vim73/src/os_win16.h	2013-06-07 17:07:33.342246799 +0000
+@@ -50,7 +50,7 @@
+ #endif
+ 
+ /* toupper() is not really broken, but it's very slow.	Probably because of
+- * using unicde characters on Windows NT */
++ * using unicode characters on Windows NT */
+ #define BROKEN_TOUPPER
+ 
+ #define FNAME_ILLEGAL "\"*?><|" /* illegal characters in a file name */
+@@ -63,16 +63,21 @@
+ 
+ #include <stdlib.h>
+ #include <time.h>
+-#include <dos.h>
+-#include <dir.h>
+ 
+-#ifndef STRICT
+-# define STRICT
+-#endif
+-#ifndef COBJMACROS
+-# define COBJMACROS	/* For OLE: Enable "friendlier" access to objects */
+-#endif
+-#include <windows.h>
++/* cproto fails on missing include files */
++#ifndef PROTO
++# include <dos.h>
++# include <dir.h>
++
++# ifndef STRICT
++#  define STRICT
++# endif
++# ifndef COBJMACROS
++#  define COBJMACROS	/* For OLE: Enable "friendlier" access to objects */
++# endif
++# include <windows.h>
++
++#endif /* PROTO */
+ 
+ /*
+  *  plenty of memory, use large buffers
+diff -Naur vim73.orig/src/os_win32.c vim73/src/os_win32.c
+--- vim73.orig/src/os_win32.c	2010-07-14 14:49:36.000000000 +0000
++++ vim73/src/os_win32.c	2013-06-07 17:07:33.362246742 +0000
+@@ -20,7 +20,6 @@
+  * Roger Knobbe <rogerk@wonderware.com> did the initial port of Vim 3.0.
+  */
+ 
+-#include "vimio.h"
+ #include "vim.h"
+ 
+ #ifdef FEAT_MZSCHEME
+@@ -28,10 +27,13 @@
+ #endif
+ 
+ #include <sys/types.h>
+-#include <errno.h>
+ #include <signal.h>
+ #include <limits.h>
+-#include <process.h>
++
++/* cproto fails on missing include files */
++#ifndef PROTO
++# include <process.h>
++#endif
+ 
+ #undef chdir
+ #ifdef __GNUC__
+@@ -42,8 +44,10 @@
+ # include <direct.h>
+ #endif
+ 
+-#if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
+-# include <shellapi.h>
++#ifndef PROTO
++# if defined(FEAT_TITLE) && !defined(FEAT_GUI_W32)
++#  include <shellapi.h>
++# endif
+ #endif
+ 
+ #ifdef __MINGW32__
+@@ -127,6 +131,7 @@
+ typedef int WORD;
+ typedef int WCHAR;
+ typedef void VOID;
++typedef int BY_HANDLE_FILE_INFORMATION;
+ #endif
+ 
+ #ifndef FEAT_GUI_W32
+@@ -154,6 +159,18 @@
+ # define wcsicmp(a, b) wcscmpi((a), (b))
+ #endif
+ 
++#ifndef PROTO
++
++/* Enable common dialogs input unicode from IME if possible. */
++#ifdef FEAT_MBYTE
++LRESULT (WINAPI *pDispatchMessage)(CONST MSG *) = DispatchMessage;
++BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT) = GetMessage;
++BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG) = IsDialogMessage;
++BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT) = PeekMessage;
++#endif
++
++#endif /* PROTO */
++
+ #ifndef FEAT_GUI_W32
+ /* Win32 Console handles for input and output */
+ static HANDLE g_hConIn  = INVALID_HANDLE_VALUE;
+@@ -206,55 +223,130 @@
+ static int suppress_winsize = 1;	/* don't fiddle with console */
+ #endif
+ 
++static char_u *exe_path = NULL;
++
+     static void
+ get_exe_name(void)
+ {
+-    char	temp[256];
+-    static int	did_set_PATH = FALSE;
++    /* Maximum length of $PATH is more than MAXPATHL.  8191 is often mentioned
++     * as the maximum length that works (plus a NUL byte). */
++#define MAX_ENV_PATH_LEN 8192
++    char	temp[MAX_ENV_PATH_LEN];
++    char_u	*p;
+ 
+     if (exe_name == NULL)
+     {
+ 	/* store the name of the executable, may be used for $VIM */
+-	GetModuleFileName(NULL, temp, 255);
++	GetModuleFileName(NULL, temp, MAX_ENV_PATH_LEN - 1);
+ 	if (*temp != NUL)
+ 	    exe_name = FullName_save((char_u *)temp, FALSE);
+     }
+ 
+-    if (!did_set_PATH && exe_name != NULL)
++    if (exe_path == NULL && exe_name != NULL)
+     {
+-	char_u	    *p;
+-	char_u	    *newpath;
+-
+-	/* Append our starting directory to $PATH, so that when doing "!xxd"
+-	 * it's found in our starting directory.  Needed because SearchPath()
+-	 * also looks there. */
+-	p = mch_getenv("PATH");
+-	newpath = alloc((unsigned)(STRLEN(p) + STRLEN(exe_name) + 2));
+-	if (newpath != NULL)
+-	{
+-	    STRCPY(newpath, p);
+-	    STRCAT(newpath, ";");
+-	    vim_strncpy(newpath + STRLEN(newpath), exe_name,
+-					    gettail_sep(exe_name) - exe_name);
+-	    vim_setenv((char_u *)"PATH", newpath);
+-	    vim_free(newpath);
++	exe_path = vim_strnsave(exe_name,
++				     (int)(gettail_sep(exe_name) - exe_name));
++	if (exe_path != NULL)
++	{
++	    /* Append our starting directory to $PATH, so that when doing
++	     * "!xxd" it's found in our starting directory.  Needed because
++	     * SearchPath() also looks there. */
++	    p = mch_getenv("PATH");
++	    if (p == NULL
++		       || STRLEN(p) + STRLEN(exe_path) + 2 < MAX_ENV_PATH_LEN)
++	    {
++		if (p == NULL || *p == NUL)
++		    temp[0] = NUL;
++		else
++		{
++		    STRCPY(temp, p);
++		    STRCAT(temp, ";");
++		}
++		STRCAT(temp, exe_path);
++		vim_setenv((char_u *)"PATH", temp);
++	    }
+ 	}
++    }
++}
++
++/*
++ * Unescape characters in "p" that appear in "escaped".
++ */
++    static void
++unescape_shellxquote(char_u *p, char_u *escaped)
++{
++    int	    l = (int)STRLEN(p);
++    int	    n;
++
++    while (*p != NUL)
++    {
++	if (*p == '^' && vim_strchr(escaped, p[1]) != NULL)
++	    mch_memmove(p, p + 1, l--);
++#ifdef FEAT_MBYTE
++	n = (*mb_ptr2len)(p);
++#else
++	n = 1;
++#endif
++	p += n;
++	l -= n;
++    }
++}
++
++/*
++ * Load library "name".
++ */
++    HINSTANCE
++vimLoadLib(char *name)
++{
++    HINSTANCE	dll = NULL;
++    char	old_dir[MAXPATHL];
++
++    /* NOTE: Do not use mch_dirname() and mch_chdir() here, they may call
++     * vimLoadLib() recursively, which causes a stack overflow. */
++    if (exe_path == NULL)
++	get_exe_name();
++    if (exe_path != NULL)
++    {
++#ifdef FEAT_MBYTE
++	WCHAR old_dirw[MAXPATHL];
+ 
+-	did_set_PATH = TRUE;
++	if (GetCurrentDirectoryW(MAXPATHL, old_dirw) != 0)
++	{
++	    /* Change directory to where the executable is, both to make
++	     * sure we find a .dll there and to avoid looking for a .dll
++	     * in the current directory. */
++	    SetCurrentDirectory(exe_path);
++	    dll = LoadLibrary(name);
++	    SetCurrentDirectoryW(old_dirw);
++	    return dll;
++	}
++	/* Retry with non-wide function (for Windows 98). */
++	if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
++#endif
++	    if (GetCurrentDirectory(MAXPATHL, old_dir) != 0)
++	    {
++		/* Change directory to where the executable is, both to make
++		 * sure we find a .dll there and to avoid looking for a .dll
++		 * in the current directory. */
++		SetCurrentDirectory(exe_path);
++		dll = LoadLibrary(name);
++		SetCurrentDirectory(old_dir);
++	    }
+     }
++    return dll;
+ }
+ 
+ #if defined(DYNAMIC_GETTEXT) || defined(PROTO)
+ # ifndef GETTEXT_DLL
+ #  define GETTEXT_DLL "libintl.dll"
+ # endif
+-/* Dummy funcitons */
++/* Dummy functions */
+ static char *null_libintl_gettext(const char *);
+ static char *null_libintl_textdomain(const char *);
+ static char *null_libintl_bindtextdomain(const char *, const char *);
+ static char *null_libintl_bind_textdomain_codeset(const char *, const char *);
+ 
+-static HINSTANCE hLibintlDLL = 0;
++static HINSTANCE hLibintlDLL = NULL;
+ char *(*dyn_libintl_gettext)(const char *) = null_libintl_gettext;
+ char *(*dyn_libintl_textdomain)(const char *) = null_libintl_textdomain;
+ char *(*dyn_libintl_bindtextdomain)(const char *, const char *)
+@@ -282,26 +374,16 @@
+     if (hLibintlDLL)
+ 	return 1;
+     /* Load gettext library (libintl.dll) */
+-    hLibintlDLL = LoadLibrary(libname != NULL ? libname : GETTEXT_DLL);
++    hLibintlDLL = vimLoadLib(libname != NULL ? libname : GETTEXT_DLL);
+     if (!hLibintlDLL)
+     {
+-	char_u	    dirname[_MAX_PATH];
+-
+-	/* Try using the path from gvim.exe to find the .dll there. */
+-	get_exe_name();
+-	STRCPY(dirname, exe_name);
+-	STRCPY(gettail(dirname), GETTEXT_DLL);
+-	hLibintlDLL = LoadLibrary((char *)dirname);
+-	if (!hLibintlDLL)
++	if (p_verbose > 0)
+ 	{
+-	    if (p_verbose > 0)
+-	    {
+-		verbose_enter();
+-		EMSG2(_(e_loadlib), GETTEXT_DLL);
+-		verbose_leave();
+-	    }
+-	    return 0;
++	    verbose_enter();
++	    EMSG2(_(e_loadlib), GETTEXT_DLL);
++	    verbose_leave();
+ 	}
++	return 0;
+     }
+     for (i = 0; libintl_entry[i].name != NULL
+ 					 && libintl_entry[i].ptr != NULL; ++i)
+@@ -382,7 +464,10 @@
+ DWORD g_PlatformId;
+ 
+ #ifdef HAVE_ACL
+-# include <aclapi.h>
++# ifndef PROTO
++#  include <aclapi.h>
++# endif
++
+ /*
+  * These are needed to dynamically load the ADVAPI DLL, which is not
+  * implemented under Windows 95 (and causes VIM to crash)
+@@ -398,6 +483,11 @@
+ static PGNSECINFO pGetNamedSecurityInfo;
+ #endif
+ 
++typedef BOOL (WINAPI *PSETHANDLEINFORMATION)(HANDLE, DWORD, DWORD);
++
++static BOOL allowPiping = FALSE;
++static PSETHANDLEINFORMATION pSetHandleInformation;
++
+ /*
+  * Set g_PlatformId to VER_PLATFORM_WIN32_NT (NT) or
+  * VER_PLATFORM_WIN32_WINDOWS (Win95).
+@@ -430,7 +520,7 @@
+ 	     * Seems like a lot of overhead to load/unload ADVAPI32.DLL each
+ 	     * time we verify security...
+ 	     */
+-	    advapi_lib = LoadLibrary("ADVAPI32.DLL");
++	    advapi_lib = vimLoadLib("ADVAPI32.DLL");
+ 	    if (advapi_lib != NULL)
+ 	    {
+ 		pSetNamedSecurityInfo = (PSNSECINFO)GetProcAddress(advapi_lib,
+@@ -448,6 +538,18 @@
+ 	    }
+ 	}
+ #endif
++	/*
++	 * If we are on windows NT, try to load the pipe functions, only
++	 * available from Win2K.
++	 */
++	if (g_PlatformId == VER_PLATFORM_WIN32_NT)
++	{
++	    HANDLE kernel32 = GetModuleHandle("kernel32");
++	    pSetHandleInformation = (PSETHANDLEINFORMATION)GetProcAddress(
++					    kernel32, "SetHandleInformation");
++
++	    allowPiping = pSetHandleInformation != NULL;
++	}
+ 	done = TRUE;
+     }
+ }
+@@ -930,7 +1032,7 @@
+ 	    DWORD dwLR = (pmer->dwButtonState & LEFT_RIGHT);
+ 
+ 	    /* if either left or right button only is pressed, see if the
+-	     * the next mouse event has both of them pressed */
++	     * next mouse event has both of them pressed */
+ 	    if (dwLR == LEFT || dwLR == RIGHT)
+ 	    {
+ 		for (;;)
+@@ -1342,7 +1444,7 @@
+ 
+ 
+ /*
+- * mch_inchar(): low-level input funcion.
++ * mch_inchar(): low-level input function.
+  * Get one or more characters from the keyboard or the mouse.
+  * If time == 0, do not wait for characters.
+  * If time == n, wait a short time for characters.
+@@ -1364,6 +1466,11 @@
+ #define TYPEAHEADLEN 20
+     static char_u   typeahead[TYPEAHEADLEN];	/* previously typed bytes. */
+     static int	    typeaheadlen = 0;
++#ifdef FEAT_MBYTE
++    static char_u   *rest = NULL;	/* unconverted rest of previous read */
++    static int	    restlen = 0;
++    int		    unconverted;
++#endif
+ 
+     /* First use any typeahead that was kept because "buf" was too small. */
+     if (typeaheadlen > 0)
+@@ -1467,6 +1574,33 @@
+ 
+ 	    c = tgetch(&modifiers, &ch2);
+ 
++#ifdef FEAT_MBYTE
++	    /* stolen from fill_input_buf() in ui.c */
++	    if (rest != NULL)
++	    {
++		/* Use remainder of previous call, starts with an invalid
++		 * character that may become valid when reading more. */
++		if (restlen > TYPEAHEADLEN - typeaheadlen)
++		    unconverted = TYPEAHEADLEN - typeaheadlen;
++		else
++		    unconverted = restlen;
++		mch_memmove(typeahead + typeaheadlen, rest, unconverted);
++		if (unconverted == restlen)
++		{
++		    vim_free(rest);
++		    rest = NULL;
++		}
++		else
++		{
++		    restlen -= unconverted;
++		    mch_memmove(rest, rest + unconverted, restlen);
++		}
++		typeaheadlen += unconverted;
++	    }
++	    else
++		unconverted = 0;
++#endif
++
+ 	    if (typebuf_changed(tb_change_cnt))
+ 	    {
+ 		/* "buf" may be invalid now if a client put something in the
+@@ -1502,8 +1636,12 @@
+ 		 * when 'tenc' is set. */
+ 		if (input_conv.vc_type != CONV_NONE
+ 						&& (ch2 == NUL || c != K_NUL))
+-		    n = convert_input(typeahead + typeaheadlen, n,
+-						 TYPEAHEADLEN - typeaheadlen);
++		{
++		    typeaheadlen -= unconverted;
++		    n = convert_input_safe(typeahead + typeaheadlen,
++				n + unconverted, TYPEAHEADLEN - typeaheadlen,
++				rest == NULL ? &rest : NULL, &restlen);
++		}
+ #endif
+ 
+ 		/* Use the ALT key to set the 8th bit of the character
+@@ -1570,8 +1708,10 @@
+ #endif /* FEAT_GUI_W32 */
+ }
+ 
+-#ifndef __MINGW32__
+-# include <shellapi.h>	/* required for FindExecutable() */
++#ifndef PROTO
++# ifndef __MINGW32__
++#  include <shellapi.h>	/* required for FindExecutable() */
++# endif
+ #endif
+ 
+ /*
+@@ -1615,6 +1755,35 @@
+     return TRUE;
+ }
+ 
++#if ((defined(__MINGW32__) || defined (__CYGWIN32__)) && \
++       __MSVCRT_VERSION__ >= 0x800) || (defined(_MSC_VER) && _MSC_VER >= 1400)
++/*
++ * Bad parameter handler.
++ *
++ * Certain MS CRT functions will intentionally crash when passed invalid
++ * parameters to highlight possible security holes.  Setting this function as
++ * the bad parameter handler will prevent the crash.
++ *
++ * In debug builds the parameters contain CRT information that might help track
++ * down the source of a problem, but in non-debug builds the arguments are all
++ * NULL/0.  Debug builds will also produce assert dialogs from the CRT, it is
++ * worth allowing these to make debugging of issues easier.
++ */
++    static void
++bad_param_handler(const wchar_t *expression,
++    const wchar_t *function,
++    const wchar_t *file,
++    unsigned int line,
++    uintptr_t pReserved)
++{
++}
++
++# define SET_INVALID_PARAM_HANDLER \
++	((void)_set_invalid_parameter_handler(bad_param_handler))
++#else
++# define SET_INVALID_PARAM_HANDLER
++#endif
++
+ #ifdef FEAT_GUI_W32
+ 
+ /*
+@@ -1627,6 +1796,9 @@
+     extern int _fmode;
+ #endif
+ 
++    /* Silently handle invalid parameters to CRT functions */
++    SET_INVALID_PARAM_HANDLER;
++
+     /* Let critical errors result in a failure, not in a dialog box.  Required
+      * for the timestamp test to work on removed floppies. */
+     SetErrorMode(SEM_FAILCRITICALERRORS);
+@@ -1679,16 +1851,7 @@
+ 	set_option_value((char_u *)"grepprg", 0, (char_u *)"grep -n", 0);
+ 
+ #ifdef FEAT_CLIPBOARD
+-    clip_init(TRUE);
+-
+-    /*
+-     * Vim's own clipboard format recognises whether the text is char, line,
+-     * or rectangular block.  Only useful for copying between two Vims.
+-     * "VimClipboard" was used for previous versions, using the first
+-     * character to specify MCHAR, MLINE or MBLOCK.
+-     */
+-    clip_star.format = RegisterClipboardFormat("VimClipboard2");
+-    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
++    win_clip_init();
+ #endif
+ }
+ 
+@@ -1835,8 +1998,7 @@
+ 	cb->BufferSize.X = cb->Info.dwSize.X;
+ 	cb->BufferSize.Y = cb->Info.dwSize.Y;
+ 	NumCells = cb->BufferSize.X * cb->BufferSize.Y;
+-	if (cb->Buffer != NULL)
+-	    vim_free(cb->Buffer);
++	vim_free(cb->Buffer);
+ 	cb->Buffer = (PCHAR_INFO)alloc(NumCells * sizeof(CHAR_INFO));
+ 	if (cb->Buffer == NULL)
+ 	    return FALSE;
+@@ -2103,6 +2265,9 @@
+     extern int _fmode;
+ #endif
+ 
++    /* Silently handle invalid parameters to CRT functions */
++    SET_INVALID_PARAM_HANDLER;
++
+     /* Let critical errors result in a failure, not in a dialog box.  Required
+      * for the timestamp test to work on removed floppies. */
+     SetErrorMode(SEM_FAILCRITICALERRORS);
+@@ -2171,16 +2336,7 @@
+ #endif
+ 
+ #ifdef FEAT_CLIPBOARD
+-    clip_init(TRUE);
+-
+-    /*
+-     * Vim's own clipboard format recognises whether the text is char, line, or
+-     * rectangular block.  Only useful for copying between two Vims.
+-     * "VimClipboard" was used for previous versions, using the first
+-     * character to specify MCHAR, MLINE or MBLOCK.
+-     */
+-    clip_star.format = RegisterClipboardFormat("VimClipboard2");
+-    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
++    win_clip_init();
+ #endif
+ 
+     /* This will be NULL on anything but NT 4.0 */
+@@ -2273,12 +2429,14 @@
+     int		len)
+ {
+     char		szTrueName[_MAX_PATH + 2];
++    char		szTrueNameTemp[_MAX_PATH + 2];
+     char		*ptrue, *ptruePrev;
+     char		*porig, *porigPrev;
+     int			flen;
+     WIN32_FIND_DATA	fb;
+     HANDLE		hFind;
+     int			c;
++    int			slen;
+ 
+     flen = (int)STRLEN(name);
+     if (flen == 0 || flen > _MAX_PATH)
+@@ -2323,12 +2481,19 @@
+ 	}
+ 	*ptrue = NUL;
+ 
++	/* To avoid a slow failure append "\*" when searching a directory,
++	 * server or network share. */
++	STRCPY(szTrueNameTemp, szTrueName);
++	slen = (int)strlen(szTrueNameTemp);
++	if (*porig == psepc && slen + 2 < _MAX_PATH)
++	    STRCPY(szTrueNameTemp + slen, "\\*");
++
+ 	/* Skip "", "." and "..". */
+ 	if (ptrue > ptruePrev
+ 		&& (ptruePrev[0] != '.'
+ 		    || (ptruePrev[1] != NUL
+ 			&& (ptruePrev[1] != '.' || ptruePrev[2] != NUL)))
+-		&& (hFind = FindFirstFile(szTrueName, &fb))
++		&& (hFind = FindFirstFile(szTrueNameTemp, &fb))
+ 						      != INVALID_HANDLE_VALUE)
+ 	{
+ 	    c = *porig;
+@@ -2578,30 +2743,73 @@
+ }
+ 
+ /*
++ * Create directory "name".
++ * Return 0 on success, -1 on error.
++ */
++    int
++mch_mkdir(char_u *name)
++{
++#ifdef FEAT_MBYTE
++    if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++    {
++	WCHAR	*p;
++	int	retval;
++
++	p = enc_to_utf16(name, NULL);
++	if (p == NULL)
++	    return -1;
++	retval = _wmkdir(p);
++	vim_free(p);
++	return retval;
++    }
++#endif
++    return _mkdir(name);
++}
++
++/*
+  * Return TRUE if file "fname" has more than one link.
+  */
+     int
+ mch_is_linked(char_u *fname)
+ {
++    BY_HANDLE_FILE_INFORMATION info;
++
++    return win32_fileinfo(fname, &info) == FILEINFO_OK
++						   && info.nNumberOfLinks > 1;
++}
++
++/*
++ * Get the by-handle-file-information for "fname".
++ * Returns FILEINFO_OK when OK.
++ * returns FILEINFO_ENC_FAIL when enc_to_utf16() failed.
++ * Returns FILEINFO_READ_FAIL when CreateFile() failed.
++ * Returns FILEINFO_INFO_FAIL when GetFileInformationByHandle() failed.
++ */
++    int
++win32_fileinfo(char_u *fname, BY_HANDLE_FILE_INFORMATION *info)
++{
+     HANDLE	hFile;
+-    int		res = 0;
+-    BY_HANDLE_FILE_INFORMATION inf;
++    int		res = FILEINFO_READ_FAIL;
+ #ifdef FEAT_MBYTE
+     WCHAR	*wn = NULL;
+ 
+     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
++    {
+ 	wn = enc_to_utf16(fname, NULL);
++	if (wn == NULL)
++	    res = FILEINFO_ENC_FAIL;
++    }
+     if (wn != NULL)
+     {
+ 	hFile = CreateFileW(wn,		/* file name */
+ 		    GENERIC_READ,	/* access mode */
+-		    0,			/* share mode */
++		    FILE_SHARE_READ | FILE_SHARE_WRITE,	/* share mode */
+ 		    NULL,		/* security descriptor */
+ 		    OPEN_EXISTING,	/* creation disposition */
+-		    0,			/* file attributes */
++		    FILE_FLAG_BACKUP_SEMANTICS,	/* file attributes */
+ 		    NULL);		/* handle to template file */
+ 	if (hFile == INVALID_HANDLE_VALUE
+-		&& GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
++			      && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ 	{
+ 	    /* Retry with non-wide function (for Windows 98). */
+ 	    vim_free(wn);
+@@ -2612,17 +2820,18 @@
+ #endif
+ 	hFile = CreateFile(fname,	/* file name */
+ 		    GENERIC_READ,	/* access mode */
+-		    0,			/* share mode */
++		    FILE_SHARE_READ | FILE_SHARE_WRITE,	/* share mode */
+ 		    NULL,		/* security descriptor */
+ 		    OPEN_EXISTING,	/* creation disposition */
+-		    0,			/* file attributes */
++		    FILE_FLAG_BACKUP_SEMANTICS,	/* file attributes */
+ 		    NULL);		/* handle to template file */
+ 
+     if (hFile != INVALID_HANDLE_VALUE)
+     {
+-	if (GetFileInformationByHandle(hFile, &inf) != 0
+-		&& inf.nNumberOfLinks > 1)
+-	    res = 1;
++	if (GetFileInformationByHandle(hFile, info) != 0)
++	    res = FILEINFO_OK;
++	else
++	    res = FILEINFO_INFO_FAIL;
+ 	CloseHandle(hFile);
+     }
+ 
+@@ -3104,7 +3313,7 @@
+  *    4. Prompt the user to press a key to close the console window
+  */
+     static int
+-mch_system(char *cmd, int options)
++mch_system_classic(char *cmd, int options)
+ {
+     STARTUPINFO		si;
+     PROCESS_INFORMATION pi;
+@@ -3120,9 +3329,10 @@
+      * It's nicer to run a filter command in a minimized window, but in
+      * Windows 95 this makes the command MUCH slower.  We can't do it under
+      * Win32s either as it stops the synchronous spawn workaround working.
++     * Don't activate the window to keep focus on Vim.
+      */
+     if ((options & SHELL_DOOUT) && !mch_windows95() && !gui_is_win32s())
+-	si.wShowWindow = SW_SHOWMINIMIZED;
++	si.wShowWindow = SW_SHOWMINNOACTIVE;
+     else
+ 	si.wShowWindow = SW_SHOWNORMAL;
+     si.cbReserved2 = 0;
+@@ -3160,10 +3370,12 @@
+ 	{
+ 	    MSG	msg;
+ 
+-	    if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
++	    if (pPeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
+ 	    {
+ 		TranslateMessage(&msg);
+-		DispatchMessage(&msg);
++		pDispatchMessage(&msg);
++		delay = 1;
++		continue;
+ 	    }
+ 	    if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
+ 		break;
+@@ -3208,6 +3420,506 @@
+ 
+     return ret;
+ }
++
++/*
++ * Thread launched by the gui to send the current buffer data to the
++ * process. This way avoid to hang up vim totally if the children
++ * process take a long time to process the lines.
++ */
++    static DWORD WINAPI
++sub_process_writer(LPVOID param)
++{
++    HANDLE	    g_hChildStd_IN_Wr = param;
++    linenr_T	    lnum = curbuf->b_op_start.lnum;
++    DWORD	    len = 0;
++    DWORD	    l;
++    char_u	    *lp = ml_get(lnum);
++    char_u	    *s;
++    int		    written = 0;
++
++    for (;;)
++    {
++	l = (DWORD)STRLEN(lp + written);
++	if (l == 0)
++	    len = 0;
++	else if (lp[written] == NL)
++	{
++	    /* NL -> NUL translation */
++	    WriteFile(g_hChildStd_IN_Wr, "", 1, &len, NULL);
++	}
++	else
++	{
++	    s = vim_strchr(lp + written, NL);
++	    WriteFile(g_hChildStd_IN_Wr, (char *)lp + written,
++		      s == NULL ? l : (DWORD)(s - (lp + written)),
++		      &len, NULL);
++	}
++	if (len == (int)l)
++	{
++	    /* Finished a line, add a NL, unless this line should not have
++	     * one. */
++	    if (lnum != curbuf->b_op_end.lnum
++		|| !curbuf->b_p_bin
++		|| (lnum != curbuf->b_no_eol_lnum
++		    && (lnum != curbuf->b_ml.ml_line_count
++			|| curbuf->b_p_eol)))
++	    {
++		WriteFile(g_hChildStd_IN_Wr, "\n", 1, (LPDWORD)&ignored, NULL);
++	    }
++
++	    ++lnum;
++	    if (lnum > curbuf->b_op_end.lnum)
++		break;
++
++	    lp = ml_get(lnum);
++	    written = 0;
++	}
++	else if (len > 0)
++	    written += len;
++    }
++
++    /* finished all the lines, close pipe */
++    CloseHandle(g_hChildStd_IN_Wr);
++    ExitThread(0);
++}
++
++
++# define BUFLEN 100	/* length for buffer, stolen from unix version */
++
++/*
++ * This function read from the children's stdout and write the
++ * data on screen or in the buffer accordingly.
++ */
++    static void
++dump_pipe(int	    options,
++	  HANDLE    g_hChildStd_OUT_Rd,
++	  garray_T  *ga,
++	  char_u    buffer[],
++	  DWORD	    *buffer_off)
++{
++    DWORD	availableBytes = 0;
++    DWORD	i;
++    int		ret;
++    DWORD	len;
++    DWORD	toRead;
++    int		repeatCount;
++
++    /* we query the pipe to see if there is any data to read
++     * to avoid to perform a blocking read */
++    ret = PeekNamedPipe(g_hChildStd_OUT_Rd, /* pipe to query */
++			NULL,		    /* optional buffer */
++			0,		    /* buffer size */
++			NULL,		    /* number of read bytes */
++			&availableBytes,    /* available bytes total */
++			NULL);		    /* byteLeft */
++
++    repeatCount = 0;
++    /* We got real data in the pipe, read it */
++    while (ret != 0 && availableBytes > 0)
++    {
++	repeatCount++;
++	toRead =
++# ifdef FEAT_MBYTE
++		 (DWORD)(BUFLEN - *buffer_off);
++# else
++		 (DWORD)BUFLEN;
++# endif
++	toRead = availableBytes < toRead ? availableBytes : toRead;
++	ReadFile(g_hChildStd_OUT_Rd, buffer
++# ifdef FEAT_MBYTE
++		 + *buffer_off, toRead
++# else
++		 , toRead
++# endif
++		 , &len, NULL);
++
++	/* If we haven't read anything, there is a problem */
++	if (len == 0)
++	    break;
++
++	availableBytes -= len;
++
++	if (options & SHELL_READ)
++	{
++	    /* Do NUL -> NL translation, append NL separated
++	     * lines to the current buffer. */
++	    for (i = 0; i < len; ++i)
++	    {
++		if (buffer[i] == NL)
++		    append_ga_line(ga);
++		else if (buffer[i] == NUL)
++		    ga_append(ga, NL);
++		else
++		    ga_append(ga, buffer[i]);
++	    }
++	}
++# ifdef FEAT_MBYTE
++	else if (has_mbyte)
++	{
++	    int		l;
++	    int		c;
++	    char_u	*p;
++
++	    len += *buffer_off;
++	    buffer[len] = NUL;
++
++	    /* Check if the last character in buffer[] is
++	     * incomplete, keep these bytes for the next
++	     * round. */
++	    for (p = buffer; p < buffer + len; p += l)
++	    {
++		l = mb_cptr2len(p);
++		if (l == 0)
++		    l = 1;  /* NUL byte? */
++		else if (MB_BYTE2LEN(*p) != l)
++		    break;
++	    }
++	    if (p == buffer)	/* no complete character */
++	    {
++		/* avoid getting stuck at an illegal byte */
++		if (len >= 12)
++		    ++p;
++		else
++		{
++		    *buffer_off = len;
++		    return;
++		}
++	    }
++	    c = *p;
++	    *p = NUL;
++	    msg_puts(buffer);
++	    if (p < buffer + len)
++	    {
++		*p = c;
++		*buffer_off = (DWORD)((buffer + len) - p);
++		mch_memmove(buffer, p, *buffer_off);
++		return;
++	    }
++	    *buffer_off = 0;
++	}
++# endif /* FEAT_MBYTE */
++	else
++	{
++	    buffer[len] = NUL;
++	    msg_puts(buffer);
++	}
++
++	windgoto(msg_row, msg_col);
++	cursor_on();
++	out_flush();
++    }
++}
++
++/*
++ * Version of system to use for windows NT > 5.0 (Win2K), use pipe
++ * for communication and doesn't open any new window.
++ */
++    static int
++mch_system_piped(char *cmd, int options)
++{
++    STARTUPINFO		si;
++    PROCESS_INFORMATION pi;
++    DWORD		ret = 0;
++
++    HANDLE g_hChildStd_IN_Rd = NULL;
++    HANDLE g_hChildStd_IN_Wr = NULL;
++    HANDLE g_hChildStd_OUT_Rd = NULL;
++    HANDLE g_hChildStd_OUT_Wr = NULL;
++
++    char_u	buffer[BUFLEN + 1]; /* reading buffer + size */
++    DWORD	len;
++
++    /* buffer used to receive keys */
++    char_u	ta_buf[BUFLEN + 1];	/* TypeAHead */
++    int		ta_len = 0;		/* valid bytes in ta_buf[] */
++
++    DWORD	i;
++    int		c;
++    int		noread_cnt = 0;
++    garray_T	ga;
++    int	    delay = 1;
++    DWORD	buffer_off = 0;	/* valid bytes in buffer[] */
++    char	*p = NULL;
++
++    SECURITY_ATTRIBUTES saAttr;
++
++    /* Set the bInheritHandle flag so pipe handles are inherited. */
++    saAttr.nLength = sizeof(SECURITY_ATTRIBUTES);
++    saAttr.bInheritHandle = TRUE;
++    saAttr.lpSecurityDescriptor = NULL;
++
++    if ( ! CreatePipe(&g_hChildStd_OUT_Rd, &g_hChildStd_OUT_Wr, &saAttr, 0)
++	/* Ensure the read handle to the pipe for STDOUT is not inherited. */
++       || ! pSetHandleInformation(g_hChildStd_OUT_Rd, HANDLE_FLAG_INHERIT, 0)
++	/* Create a pipe for the child process's STDIN. */
++       || ! CreatePipe(&g_hChildStd_IN_Rd, &g_hChildStd_IN_Wr, &saAttr, 0)
++	/* Ensure the write handle to the pipe for STDIN is not inherited. */
++       || ! pSetHandleInformation(g_hChildStd_IN_Wr, HANDLE_FLAG_INHERIT, 0) )
++    {
++	CloseHandle(g_hChildStd_IN_Rd);
++	CloseHandle(g_hChildStd_IN_Wr);
++	CloseHandle(g_hChildStd_OUT_Rd);
++	CloseHandle(g_hChildStd_OUT_Wr);
++	MSG_PUTS(_("\nCannot create pipes\n"));
++    }
++
++    si.cb = sizeof(si);
++    si.lpReserved = NULL;
++    si.lpDesktop = NULL;
++    si.lpTitle = NULL;
++    si.dwFlags = STARTF_USESHOWWINDOW | STARTF_USESTDHANDLES;
++
++    /* set-up our file redirection */
++    si.hStdError = g_hChildStd_OUT_Wr;
++    si.hStdOutput = g_hChildStd_OUT_Wr;
++    si.hStdInput = g_hChildStd_IN_Rd;
++    si.wShowWindow = SW_HIDE;
++    si.cbReserved2 = 0;
++    si.lpReserved2 = NULL;
++
++    if (options & SHELL_READ)
++	ga_init2(&ga, 1, BUFLEN);
++
++    if (cmd != NULL)
++    {
++	p = (char *)vim_strsave((char_u *)cmd);
++	if (p != NULL)
++	    unescape_shellxquote((char_u *)p, p_sxe);
++	else
++	    p = cmd;
++    }
++
++    /* Now, run the command */
++    CreateProcess(NULL,			/* Executable name */
++		  p,			/* Command to execute */
++		  NULL,			/* Process security attributes */
++		  NULL,			/* Thread security attributes */
++
++		  // this command can be litigious, handle inheritance was
++		  // deactivated for pending temp file, but, if we deactivate
++		  // it, the pipes don't work for some reason.
++		  TRUE,			/* Inherit handles, first deactivated,
++					 * but needed */
++		  CREATE_DEFAULT_ERROR_MODE, /* Creation flags */
++		  NULL,			/* Environment */
++		  NULL,			/* Current directory */
++		  &si,			/* Startup information */
++		  &pi);			/* Process information */
++
++    if (p != cmd)
++	vim_free(p);
++
++    /* Close our unused side of the pipes */
++    CloseHandle(g_hChildStd_IN_Rd);
++    CloseHandle(g_hChildStd_OUT_Wr);
++
++    if (options & SHELL_WRITE)
++    {
++	HANDLE thread =
++	   CreateThread(NULL,  /* security attributes */
++			0,     /* default stack size */
++			sub_process_writer, /* function to be executed */
++			g_hChildStd_IN_Wr,  /* parameter */
++			0,		 /* creation flag, start immediately */
++			NULL);		    /* we don't care about thread id */
++	CloseHandle(thread);
++	g_hChildStd_IN_Wr = NULL;
++    }
++
++    /* Keep updating the window while waiting for the shell to finish. */
++    for (;;)
++    {
++	MSG	msg;
++
++	if (PeekMessage(&msg, (HWND)NULL, 0, 0, PM_REMOVE))
++	{
++	    TranslateMessage(&msg);
++	    DispatchMessage(&msg);
++	}
++
++	/* write pipe information in the window */
++	if ((options & (SHELL_READ|SHELL_WRITE))
++# ifdef FEAT_GUI
++		|| gui.in_use
++# endif
++	    )
++	{
++	    len = 0;
++	    if (!(options & SHELL_EXPAND)
++		&& ((options &
++			(SHELL_READ|SHELL_WRITE|SHELL_COOKED))
++		    != (SHELL_READ|SHELL_WRITE|SHELL_COOKED)
++# ifdef FEAT_GUI
++		    || gui.in_use
++# endif
++		    )
++		&& (ta_len > 0 || noread_cnt > 4))
++	    {
++		if (ta_len == 0)
++		{
++		    /* Get extra characters when we don't have any.  Reset the
++		     * counter and timer. */
++		    noread_cnt = 0;
++# if defined(HAVE_GETTIMEOFDAY) && defined(HAVE_SYS_TIME_H)
++		    gettimeofday(&start_tv, NULL);
++# endif
++		    len = ui_inchar(ta_buf, BUFLEN, 10L, 0);
++		}
++		if (ta_len > 0 || len > 0)
++		{
++		    /*
++		     * For pipes: Check for CTRL-C: send interrupt signal to
++		     * child.  Check for CTRL-D: EOF, close pipe to child.
++		     */
++		    if (len == 1 && cmd != NULL)
++		    {
++			if (ta_buf[ta_len] == Ctrl_C)
++			{
++			    /* Learn what exit code is expected, for
++				* now put 9 as SIGKILL */
++			    TerminateProcess(pi.hProcess, 9);
++			}
++			if (ta_buf[ta_len] == Ctrl_D)
++			{
++			    CloseHandle(g_hChildStd_IN_Wr);
++			    g_hChildStd_IN_Wr = NULL;
++			}
++		    }
++
++		    /* replace K_BS by <BS> and K_DEL by <DEL> */
++		    for (i = ta_len; i < ta_len + len; ++i)
++		    {
++			if (ta_buf[i] == CSI && len - i > 2)
++			{
++			    c = TERMCAP2KEY(ta_buf[i + 1], ta_buf[i + 2]);
++			    if (c == K_DEL || c == K_KDEL || c == K_BS)
++			    {
++				mch_memmove(ta_buf + i + 1, ta_buf + i + 3,
++					    (size_t)(len - i - 2));
++				if (c == K_DEL || c == K_KDEL)
++				    ta_buf[i] = DEL;
++				else
++				    ta_buf[i] = Ctrl_H;
++				len -= 2;
++			    }
++			}
++			else if (ta_buf[i] == '\r')
++			    ta_buf[i] = '\n';
++# ifdef FEAT_MBYTE
++			if (has_mbyte)
++			    i += (*mb_ptr2len_len)(ta_buf + i,
++						    ta_len + len - i) - 1;
++# endif
++		    }
++
++		    /*
++		     * For pipes: echo the typed characters.  For a pty this
++		     * does not seem to work.
++		     */
++		    for (i = ta_len; i < ta_len + len; ++i)
++		    {
++			if (ta_buf[i] == '\n' || ta_buf[i] == '\b')
++			    msg_putchar(ta_buf[i]);
++# ifdef FEAT_MBYTE
++			else if (has_mbyte)
++			{
++			    int l = (*mb_ptr2len)(ta_buf + i);
++
++			    msg_outtrans_len(ta_buf + i, l);
++			    i += l - 1;
++			}
++# endif
++			else
++			    msg_outtrans_len(ta_buf + i, 1);
++		    }
++		    windgoto(msg_row, msg_col);
++		    out_flush();
++
++		    ta_len += len;
++
++		    /*
++		     * Write the characters to the child, unless EOF has been
++		     * typed for pipes.  Write one character at a time, to
++		     * avoid losing too much typeahead.  When writing buffer
++		     * lines, drop the typed characters (only check for
++		     * CTRL-C).
++		     */
++		    if (options & SHELL_WRITE)
++			ta_len = 0;
++		    else if (g_hChildStd_IN_Wr != NULL)
++		    {
++			WriteFile(g_hChildStd_IN_Wr, (char*)ta_buf,
++				    1, &len, NULL);
++			// if we are typing in, we want to keep things reactive
++			delay = 1;
++			if (len > 0)
++			{
++			    ta_len -= len;
++			    mch_memmove(ta_buf, ta_buf + len, ta_len);
++			}
++		    }
++		}
++	    }
++	}
++
++	if (ta_len)
++	    ui_inchar_undo(ta_buf, ta_len);
++
++	if (WaitForSingleObject(pi.hProcess, delay) != WAIT_TIMEOUT)
++	{
++	    dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
++	    break;
++	}
++
++	++noread_cnt;
++	dump_pipe(options, g_hChildStd_OUT_Rd, &ga, buffer, &buffer_off);
++
++	/* We start waiting for a very short time and then increase it, so
++	 * that we respond quickly when the process is quick, and don't
++	 * consume too much overhead when it's slow. */
++	if (delay < 50)
++	    delay += 10;
++    }
++
++    /* Close the pipe */
++    CloseHandle(g_hChildStd_OUT_Rd);
++    if (g_hChildStd_IN_Wr != NULL)
++	CloseHandle(g_hChildStd_IN_Wr);
++
++    WaitForSingleObject(pi.hProcess, INFINITE);
++
++    /* Get the command exit code */
++    GetExitCodeProcess(pi.hProcess, &ret);
++
++    if (options & SHELL_READ)
++    {
++	if (ga.ga_len > 0)
++	{
++	    append_ga_line(&ga);
++	    /* remember that the NL was missing */
++	    curbuf->b_no_eol_lnum = curwin->w_cursor.lnum;
++	}
++	else
++	    curbuf->b_no_eol_lnum = 0;
++	ga_clear(&ga);
++    }
++
++    /* Close the handles to the subprocess, so that it goes away */
++    CloseHandle(pi.hThread);
++    CloseHandle(pi.hProcess);
++
++    return ret;
++}
++
++    static int
++mch_system(char *cmd, int options)
++{
++    /* if we can pipe and the shelltemp option is off */
++    if (allowPiping && !p_stmp)
++	return mch_system_piped(cmd, options);
++    else
++	return mch_system_classic(cmd, options);
++}
+ #else
+ 
+ # define mch_system(c, o) system(c)
+@@ -3278,84 +3990,147 @@
+     else
+     {
+ 	/* we use "command" or "cmd" to start the shell; slow but easy */
+-	char_u *newcmd;
+-	long_u cmdlen =  (
+-#ifdef FEAT_GUI_W32
+-		STRLEN(vimrun_path) +
+-#endif
+-		STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
++	char_u	*newcmd = NULL;
++	char_u	*cmdbase = cmd;
++	long_u	cmdlen;
++
++	/* Skip a leading ", ( and "(. */
++	if (*cmdbase == '"' )
++	    ++cmdbase;
++	if (*cmdbase == '(')
++	    ++cmdbase;
++
++	if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
++	{
++	    STARTUPINFO		si;
++	    PROCESS_INFORMATION	pi;
++	    DWORD		flags = CREATE_NEW_CONSOLE;
++	    char_u		*p;
++
++	    si.cb = sizeof(si);
++	    si.lpReserved = NULL;
++	    si.lpDesktop = NULL;
++	    si.lpTitle = NULL;
++	    si.dwFlags = 0;
++	    si.cbReserved2 = 0;
++	    si.lpReserved2 = NULL;
++
++	    cmdbase = skipwhite(cmdbase + 5);
++	    if ((STRNICMP(cmdbase, "/min", 4) == 0)
++		    && vim_iswhite(cmdbase[4]))
++	    {
++		cmdbase = skipwhite(cmdbase + 4);
++		si.dwFlags = STARTF_USESHOWWINDOW;
++		si.wShowWindow = SW_SHOWMINNOACTIVE;
++	    }
++	    else if ((STRNICMP(cmdbase, "/b", 2) == 0)
++		    && vim_iswhite(cmdbase[2]))
++	    {
++		cmdbase = skipwhite(cmdbase + 2);
++		flags = CREATE_NO_WINDOW;
++		si.dwFlags = STARTF_USESTDHANDLES;
++		si.hStdInput = CreateFile("\\\\.\\NUL",	// File name
++		    GENERIC_READ,			// Access flags
++		    0,					// Share flags
++		    NULL,				// Security att.
++		    OPEN_EXISTING,			// Open flags
++		    FILE_ATTRIBUTE_NORMAL,		// File att.
++		    NULL);				// Temp file
++		si.hStdOutput = si.hStdInput;
++		si.hStdError = si.hStdInput;
++	    }
+ 
+-	newcmd = lalloc(cmdlen, TRUE);
+-	if (newcmd != NULL)
+-	{
+-	    char_u *cmdbase = (*cmd == '"' ? cmd + 1 : cmd);
++	    /* Remove a trailing ", ) and )" if they have a match
++	     * at the start of the command. */
++	    if (cmdbase > cmd)
++	    {
++		p = cmdbase + STRLEN(cmdbase);
++		if (p > cmdbase && p[-1] == '"' && *cmd == '"')
++		    *--p = NUL;
++		if (p > cmdbase && p[-1] == ')'
++			&& (*cmd =='(' || cmd[1] == '('))
++		    *--p = NUL;
++	    }
++
++	    newcmd = cmdbase;
++	    unescape_shellxquote(cmdbase, p_sxe);
+ 
+-	    if ((STRNICMP(cmdbase, "start", 5) == 0) && vim_iswhite(cmdbase[5]))
++	    /*
++	     * If creating new console, arguments are passed to the
++	     * 'cmd.exe' as-is. If it's not, arguments are not treated
++	     * correctly for current 'cmd.exe'. So unescape characters in
++	     * shellxescape except '|' for avoiding to be treated as
++	     * argument to them. Pass the arguments to sub-shell.
++	     */
++	    if (flags != CREATE_NEW_CONSOLE)
+ 	    {
+-		STARTUPINFO		si;
+-		PROCESS_INFORMATION	pi;
+-
+-		si.cb = sizeof(si);
+-		si.lpReserved = NULL;
+-		si.lpDesktop = NULL;
+-		si.lpTitle = NULL;
+-		si.dwFlags = 0;
+-		si.cbReserved2 = 0;
+-		si.lpReserved2 = NULL;
+-
+-		cmdbase = skipwhite(cmdbase + 5);
+-		if ((STRNICMP(cmdbase, "/min", 4) == 0)
+-			&& vim_iswhite(cmdbase[4]))
+-		{
+-		    cmdbase = skipwhite(cmdbase + 4);
+-		    si.dwFlags = STARTF_USESHOWWINDOW;
+-		    si.wShowWindow = SW_SHOWMINNOACTIVE;
+-		}
++		char_u	*subcmd;
++		char_u	*cmd_shell = mch_getenv("COMSPEC");
+ 
+-		/* When the command is in double quotes, but 'shellxquote' is
+-		 * empty, keep the double quotes around the command.
+-		 * Otherwise remove the double quotes, they aren't needed
+-		 * here, because we don't use a shell to run the command. */
+-		if (*cmd == '"' && *p_sxq == NUL)
+-		{
+-		    newcmd[0] = '"';
+-		    STRCPY(newcmd + 1, cmdbase);
+-		}
+-		else
++		if (cmd_shell == NULL || *cmd_shell == NUL)
++		    cmd_shell = default_shell();
++
++		subcmd = vim_strsave_escaped_ext(cmdbase, "|", '^', FALSE);
++		if (subcmd != NULL)
+ 		{
+-		    STRCPY(newcmd, cmdbase);
+-		    if (*cmd == '"' && *newcmd != NUL)
+-			newcmd[STRLEN(newcmd) - 1] = NUL;
++		    /* make "cmd.exe /c arguments" */
++		    cmdlen = STRLEN(cmd_shell) + STRLEN(subcmd) + 5;
++		    newcmd = lalloc(cmdlen, TRUE);
++		    if (newcmd != NULL)
++			vim_snprintf((char *)newcmd, cmdlen, "%s /c %s",
++						       cmd_shell, subcmd);
++		    else
++			newcmd = cmdbase;
++		    vim_free(subcmd);
+ 		}
++	    }
+ 
+-		/*
+-		 * Now, start the command as a process, so that it doesn't
+-		 * inherit our handles which causes unpleasant dangling swap
+-		 * files if we exit before the spawned process
+-		 */
+-		if (CreateProcess (NULL,	// Executable name
+-			newcmd,			// Command to execute
+-			NULL,			// Process security attributes
+-			NULL,			// Thread security attributes
+-			FALSE,			// Inherit handles
+-			CREATE_NEW_CONSOLE,	// Creation flags
+-			NULL,			// Environment
+-			NULL,			// Current directory
+-			&si,			// Startup information
+-			&pi))			// Process information
+-		    x = 0;
+-		else
+-		{
+-		    x = -1;
++	    /*
++	     * Now, start the command as a process, so that it doesn't
++	     * inherit our handles which causes unpleasant dangling swap
++	     * files if we exit before the spawned process
++	     */
++	    if (CreateProcess(NULL,		// Executable name
++		    newcmd,			// Command to execute
++		    NULL,			// Process security attributes
++		    NULL,			// Thread security attributes
++		    FALSE,			// Inherit handles
++		    flags,			// Creation flags
++		    NULL,			// Environment
++		    NULL,			// Current directory
++		    &si,			// Startup information
++		    &pi))			// Process information
++		x = 0;
++	    else
++	    {
++		x = -1;
+ #ifdef FEAT_GUI_W32
+-		    EMSG(_("E371: Command not found"));
++		EMSG(_("E371: Command not found"));
+ #endif
+-		}
+-		/* Close the handles to the subprocess, so that it goes away */
+-		CloseHandle(pi.hThread);
+-		CloseHandle(pi.hProcess);
+ 	    }
+-	    else
++
++	    if (newcmd != cmdbase)
++		vim_free(newcmd);
++
++	    if (si.hStdInput != NULL)
++	    {
++		/* Close the handle to \\.\NUL */
++		CloseHandle(si.hStdInput);
++	    }
++	    /* Close the handles to the subprocess, so that it goes away */
++	    CloseHandle(pi.hThread);
++	    CloseHandle(pi.hProcess);
++	}
++	else
++	{
++	    cmdlen = (
++#ifdef FEAT_GUI_W32
++		(allowPiping && !p_stmp ? 0 : STRLEN(vimrun_path)) +
++#endif
++		STRLEN(p_sh) + STRLEN(p_shcf) + STRLEN(cmd) + 10);
++
++	    newcmd = lalloc(cmdlen, TRUE);
++	    if (newcmd != NULL)
+ 	    {
+ #if defined(FEAT_GUI_W32)
+ 		if (need_vimrun_warning)
+@@ -3368,7 +4143,7 @@
+ 			    MB_ICONWARNING);
+ 		    need_vimrun_warning = FALSE;
+ 		}
+-		if (!s_dont_use_vimrun)
++		if (!s_dont_use_vimrun && (!allowPiping || p_stmp))
+ 		    /* Use vimrun to execute the command.  It opens a console
+ 		     * window, which can be closed without killing Vim. */
+ 		    vim_snprintf((char *)newcmd, cmdlen, "%s%s%s %s %s",
+@@ -3381,8 +4156,8 @@
+ 		    vim_snprintf((char *)newcmd, cmdlen, "%s %s %s",
+ 							   p_sh, p_shcf, cmd);
+ 		x = mch_system((char *)newcmd, options);
++		vim_free(newcmd);
+ 	    }
+-	    vim_free(newcmd);
+ 	}
+     }
+ 
+@@ -3392,7 +4167,8 @@
+     /* Print the return value, unless "vimrun" was used. */
+     if (x != 0 && !(options & SHELL_SILENT) && !emsg_silent
+ #if defined(FEAT_GUI_W32)
+-		&& ((options & SHELL_DOOUT) || s_dont_use_vimrun)
++		&& ((options & SHELL_DOOUT) || s_dont_use_vimrun
++						  || (allowPiping && !p_stmp))
+ #endif
+ 	    )
+     {
+@@ -4273,18 +5049,34 @@
+ 
+ 
+ /*
+- * How much memory is available?
++ * How much memory is available in Kbyte?
+  * Return sum of available physical and page file memory.
+  */
+ /*ARGSUSED*/
+     long_u
+ mch_avail_mem(int special)
+ {
+-    MEMORYSTATUS	ms;
++#ifdef MEMORYSTATUSEX
++    PlatformId();
++    if (g_PlatformId == VER_PLATFORM_WIN32_NT)
++    {
++	MEMORYSTATUSEX	ms;
++
++	/* Need to use GlobalMemoryStatusEx() when there is more memory than
++	 * what fits in 32 bits. But it's not always available. */
++	ms.dwLength = sizeof(MEMORYSTATUSEX);
++	GlobalMemoryStatusEx(&ms);
++	return (long_u)((ms.ullAvailPhys + ms.ullAvailPageFile) >> 10);
++    }
++    else
++#endif
++    {
++	MEMORYSTATUS	ms;
+ 
+-    ms.dwLength = sizeof(MEMORYSTATUS);
+-    GlobalMemoryStatus(&ms);
+-    return (long_u) (ms.dwAvailPhys + ms.dwAvailPageFile);
++	ms.dwLength = sizeof(MEMORYSTATUS);
++	GlobalMemoryStatus(&ms);
++	return (long_u)((ms.dwAvailPhys + ms.dwAvailPageFile) >> 10);
++    }
+ }
+ 
+ #ifdef FEAT_MBYTE
+diff -Naur vim73.orig/src/os_win32.h vim73/src/os_win32.h
+--- vim73.orig/src/os_win32.h	2010-05-31 19:50:24.000000000 +0000
++++ vim73/src/os_win32.h	2013-06-07 17:07:33.365580066 +0000
+@@ -12,7 +12,10 @@
+ 
+ #include "os_dos.h"		/* common MS-DOS and Win32 stuff */
+ #ifndef __CYGWIN__
+-#include <direct.h>		/* for _mkdir() */
++/* cproto fails on missing include files */
++# ifndef PROTO
++#  include <direct.h>		/* for _mkdir() */
++# endif
+ #endif
+ 
+ /* Stop the VC2005 compiler from nagging. */
+@@ -101,14 +104,16 @@
+ #ifndef COBJMACROS
+ # define COBJMACROS	/* For OLE: Enable "friendlier" access to objects */
+ #endif
+-#include <windows.h>
++#ifndef PROTO
++# include <windows.h>
++#endif
+ 
+ /*
+  * Win32 has plenty of memory, use large buffers
+  */
+ #define CMDBUFFSIZE 1024	/* size of the command processing buffer */
+ 
+-/* _MAX_PATH is only 256 (stdlib.h), but we want more for the 'path' option,
++/* _MAX_PATH is only 260 (stdlib.h), but we want more for the 'path' option,
+  * thus use a larger number. */
+ #define MAXPATHL	1024
+ 
+@@ -191,5 +196,23 @@
+ #ifdef __BORLANDC__
+ # define vim_mkdir(x, y) mkdir(x)
+ #else
+-# define vim_mkdir(x, y) _mkdir(x)
++# define vim_mkdir(x, y) mch_mkdir(x)
+ #endif
++
++#ifndef PROTO
++
++/* Enable common dialogs input unicode from IME if possible. */
++#ifdef FEAT_MBYTE
++    /* The variables are defined in os_win32.c. */
++extern LRESULT (WINAPI *pDispatchMessage)(CONST MSG *);
++extern BOOL (WINAPI *pGetMessage)(LPMSG, HWND, UINT, UINT);
++extern BOOL (WINAPI *pIsDialogMessage)(HWND, LPMSG);
++extern BOOL (WINAPI *pPeekMessage)(LPMSG, HWND, UINT, UINT, UINT);
++#else
++# define pDispatchMessage DispatchMessage
++# define pGetMessage GetMessage
++# define pIsDialogMessage IsDialogMessage
++# define pPeekMessage PeekMessage
++#endif
++
++#endif /* PROTO */
+diff -Naur vim73.orig/src/po/Makefile vim73/src/po/Makefile
+--- vim73.orig/src/po/Makefile	2010-08-07 11:37:24.000000000 +0000
++++ vim73/src/po/Makefile	2013-06-07 17:07:33.502246342 +0000
+@@ -20,6 +20,7 @@
+ 		ko \
+ 		ko.UTF-8 \
+ 		nb \
++		nl \
+ 		no \
+ 		pl \
+ 		pt_BR \
+@@ -33,6 +34,17 @@
+ 		zh_TW \
+ 		zh_TW.UTF-8
+ 
++CONVERTED = \
++		cs.cp1250 \
++		ja.sjis \
++		ja.euc-jp \
++		pl.cp1250 \
++		pl.UTF-8 \
++		ru.cp1251 \
++		sk.cp1250 \
++		uk.cp1251 \
++		zh_CN.cp936
++
+ MOFILES = \
+ 		af.mo \
+ 		ca.mo \
+@@ -49,6 +61,7 @@
+ 		ko.mo \
+ 		ko.UTF-8.mo \
+ 		nb.mo \
++		nl.mo \
+ 		no.mo \
+ 		pl.mo \
+ 		pt_BR.mo \
+@@ -62,9 +75,10 @@
+ 		zh_TW.UTF-8.mo \
+ 		zh_TW.mo
+ 
+-CONVERTED = \
++MOCONVERTED = \
+ 		cs.cp1250.mo \
+ 		ja.sjis.mo \
++		ja.euc-jp.mo \
+ 		pl.cp1250.mo \
+ 		pl.UTF-8.mo \
+ 		ru.cp1251.mo \
+@@ -88,6 +102,7 @@
+ 		ko.ck \
+ 		ko.UTF-8.ck \
+ 		nb.ck \
++		nl.ck \
+ 		no.ck \
+ 		pl.ck \
+ 		pt_BR.ck \
+@@ -102,6 +117,7 @@
+ 		zh_TW.ck \
+ 		cs.cp1250.ck \
+ 		ja.sjis.ck \
++		ja.euc-jp.ck \
+ 		pl.cp1250.ck \
+ 		pl.UTF-8.ck \
+ 		ru.cp1251.ck \
+@@ -123,7 +139,7 @@
+ 
+ .SUFFIXES:
+ .SUFFIXES: .po .mo .pot .ck
+-.PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES)
++.PHONY: all install uninstall prefixcheck converted check clean checkclean distclean update-po $(LANGUAGES) $(CONVERTED)
+ 
+ .po.mo:
+ 	$(MSGFMT) -o $@ $<
+@@ -132,13 +148,13 @@
+ 	$(VIM) -u NONE -e -X -S check.vim -c "if error == 0 | q | endif" -c cq $<
+ 	touch $@
+ 
+-all: $(MOFILES)
++all: $(MOFILES) $(MOCONVERTED)
+ 
+ check: $(CHECKFILES)
+ 
+-install: $(MOFILES)
++install: $(MOFILES) $(MOCONVERTED)
+ 	@$(MAKE) prefixcheck
+-	for lang in $(LANGUAGES); do \
++	for lang in $(LANGUAGES) $(CONVERTED); do \
+ 	  dir=$(LOCALEDIR)/$$lang/; \
+ 	  if test ! -x "$$dir"; then \
+ 	    mkdir $$dir; chmod 755 $$dir; \
+@@ -155,13 +171,18 @@
+ 
+ uninstall:
+ 	@$(MAKE) prefixcheck
+-	for cat in $(MOFILES); do \
++	for cat in $(MOFILES) $(MOCONVERTED); do \
+ 	  cat=`basename $$cat`; \
+ 	  lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
+ 	  rm -f $(LOCALEDIR)/$$lang/LC_MESSAGES/$(PACKAGE).mo; \
+ 	done
+ 
+-converted: $(CONVERTED)
++converted: $(MOCONVERTED)
++
++# nl.po was added later, if it does not exist use a file with just a # in it
++# (an empty file doesn't work with old msgfmt).
++nl.po:
++	@( echo \# > nl.po )
+ 
+ # Norwegian/Bokmal: "nb" is an alias for "no".
+ # Copying the file is not efficient, but I don't know of another way to make
+@@ -175,11 +196,15 @@
+ ja.sjis.po: ja.po
+ 	@$(MAKE) sjiscorr
+ 	rm -f ja.sjis.po
+-	iconv -f euc-jp -t cp932 ja.po | ./sjiscorr > ja.sjis.po
++	iconv -f utf-8 -t cp932 ja.po | ./sjiscorr > ja.sjis.po
+ 
+ sjiscorr: sjiscorr.c
+ 	$(CC) -o sjiscorr sjiscorr.c
+ 
++ja.euc-jp.po: ja.po
++	iconv -f utf-8 -t euc-jp ja.po | \
++		sed -e 's/charset=utf-8/charset=euc-jp/' -e 's/# Original translations/# Generated from ja.po, DO NOT EDIT/' > ja.euc-jp.po
++
+ # Convert cs.po to create cs.cp1250.po.
+ cs.cp1250.po: cs.po
+ 	rm -f cs.cp1250.po
+diff -Naur vim73.orig/src/po/README.txt vim73/src/po/README.txt
+--- vim73.orig/src/po/README.txt	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/README.txt	2013-06-07 17:07:33.515579637 +0000
+@@ -107,3 +107,25 @@
+ 	make xx.mo
+ 
+     Look out for syntax errors and fix them.
++
++
++USING GETTEXT WITHOUT ICONV
++
++When using gettext which doesn't support iconv, the encoding of the .mo file
++must match your active encoding.  For that you must convert and change
++encoding of *.po file in advance of generating the *.mo file.  For example, to
++convert ja.po to EUC-JP (supposed as your system encoding):
++
++(1) Convert the file encoding:
++
++	mv ja.po ja.po.orig
++	iconv -f utf-8 -t euc-jp ja.po.orig > ja.po
++
++(2) Rewrite charset declaration in the file:
++
++    Open ja.po find this line:
++	"Content-Type: text/plain; charset=utf-8\n"
++    You should change "charset" like this:
++	"Content-Type: text/plain; charset=euc-jp\n"
++
++There are examples in the Makefile for the conversions already supported.
+diff -Naur vim73.orig/src/po/af.po vim73/src/po/af.po
+--- vim73.orig/src/po/af.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/af.po	2013-06-07 17:07:33.545579552 +0000
+@@ -1768,19 +1768,6 @@
+ msgid "Undo"
+ msgstr "Herroep"
+ 
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Kan nie Zap font '%s' laai nie"
+-
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Kan nie font %s gebruik nie"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Besig om doodsboodskap aan kindproses te stuur.\n"
+-
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Kan nie venster titel vind nie \"%s\""
+ 
+@@ -3752,9 +3739,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Ongeldige karakter '%c' in fontnaam \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Ongeldige 'osfiletype' opsie - gaan Text gebruik"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Dubbel sein, staak\n"
+ 
+diff -Naur vim73.orig/src/po/ca.po vim73/src/po/ca.po
+--- vim73.orig/src/po/ca.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/ca.po	2013-06-07 17:07:33.558912847 +0000
+@@ -1,6 +1,6 @@
+ # Catalan messages for vim.
+-# Copyright (C) 2003-2008 Ernest Adrogué <eadrogue@gmx.net>.
+-# This file is distributed under the GNU General Public License.
++# Copyright (C) 2003-2012 Ernest Adrogué <eadrogue@gmx.net>.
++# This file is distributed under the Vim License.
+ #
+ msgid ""
+ msgstr ""
+@@ -13,8 +13,6 @@
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=iso-8859-1\n"
+ "Content-Transfer-Encoding: 8bit\n"
+-"X-Poedit-Language: Catalan\n"
+-"X-Poedit-Country: SPAIN\n"
+ 
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: No s'ha pogut assignar memòria per cap buffer, sortint..."
+@@ -2077,21 +2075,6 @@
+ msgstr "&Desfés"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: No s'ha pogut carregar la fosa Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: No es pot utilitzar la fosa %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Enviant un missatge per finalitzar el procés fill.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: No s'ha trobat el títol de finestra \"%s\""
+ 
+@@ -4282,9 +4265,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Caràcter '%c' il·legal en el tipus \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: L'opció 'osfiletype' no és vàlida - s'usa Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: S'ha rebut un doble senyal, sortint\n"
+ 
+diff -Naur vim73.orig/src/po/de.po vim73/src/po/de.po
+--- vim73.orig/src/po/de.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/de.po	2013-06-07 17:07:33.685579152 +0000
+@@ -1700,7 +1700,7 @@
+ "&Load File"
+ msgstr ""
+ "&OK\n"
+-"&Lese Datei"
++"&Lies Datei"
+ 
+ #, c-format
+ msgid "E462: Could not prepare for reloading \"%s\""
+@@ -1977,21 +1977,6 @@
+ msgstr "&Rückgängig"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Zap-Schriftart '%s' kann nicht geladen werden"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Schriftart %s kann nicht verwendet werden"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Sende Nachricht zum Beenden des Kind-Prozesses.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Kann Fenstertitel \"%s\" nicht finden"
+ 
+@@ -2769,16 +2754,16 @@
+ msgstr "-Z\t\t\tEingeschränkter Modus (wie \"rvim\")"
+ 
+ msgid "-m\t\t\tModifications (writing files) not allowed"
+-msgstr "-m\t\t\tModifikatioen (beim Schreiben von Dateien) sind nicht erlaubt"
++msgstr "-m\t\t\tModifikationen (beim Schreiben von Dateien) sind nicht erlaubt"
+ 
+ msgid "-M\t\t\tModifications in text not allowed"
+-msgstr "-M\t\t\tModifikatioen im Text nicht erlaubt"
++msgstr "-M\t\t\tModifikationen im Text nicht erlaubt"
+ 
+ msgid "-b\t\t\tBinary mode"
+ msgstr "-b\t\t\tBinärmodus"
+ 
+ msgid "-l\t\t\tLisp mode"
+-msgstr "-l\t\t\tList Modus"
++msgstr "-l\t\t\tLisp Modus"
+ 
+ msgid "-C\t\t\tCompatible with Vi: 'compatible'"
+ msgstr "-C\t\t\tKompatibel zu Vi: 'compatible'"
+@@ -4169,9 +4154,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Unzulässiges Zeichen '%c' in der Schriftart \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Unzulässige 'osfiletype'-Option - verwende Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Doppel-Signal, beenden\n"
+ 
+diff -Naur vim73.orig/src/po/en_GB.po vim73/src/po/en_GB.po
+--- vim73.orig/src/po/en_GB.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/en_GB.po	2013-06-07 17:07:33.705579095 +0000
+@@ -139,14 +139,6 @@
+ msgid "E615: vim_SelFile: can't get current directory"
+ msgstr "E615: vim_SelFile: cannot get current directory"
+ 
+-#, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Cannot load Zap font '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Cannot use font %s"
+-
+ msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
+ msgstr ""
+ "Vim E458: Cannot allocate colourmap entry, some colours may be incorrect"
+diff -Naur vim73.orig/src/po/eo.po vim73/src/po/eo.po
+--- vim73.orig/src/po/eo.po	2010-08-13 13:56:41.000000000 +0000
++++ vim73/src/po/eo.po	2013-06-07 17:07:33.735579009 +0000
+@@ -14,7 +14,7 @@
+ #   Komputada leksikono: http://bertilow.com/div/komputada_leksikono/
+ #
+ # Lasta versio:
+-#   http://svn.ikso.net/programtradukoj/vim/vim7/src/po/eo.po
++#   http://dominique.pelle.free.fr/vim-eo.php
+ #
+ # Äiu komento estas bonvenata...
+ # Every remark is welcome...
+@@ -23,10 +23,11 @@
+ msgstr ""
+ "Project-Id-Version: Vim(Esperanto)\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2010-08-06 21:08+0200\n"
+-"PO-Revision-Date: 2010-08-06 21:34+0200\n"
++"POT-Creation-Date: 2013-05-27 04:50+0200\n"
++"PO-Revision-Date: 2013-05-27 04:55+0200\n"
+ "Last-Translator: Dominique PELLÃ <dominique.pelle@gmail.com>\n"
+ "Language-Team: \n"
++"Language: eo\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=utf-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+@@ -53,6 +54,9 @@
+ msgid "[Quickfix List]"
+ msgstr "[Listo de rapidriparoj]"
+ 
++msgid "E855: Autocommands caused command to abort"
++msgstr "E855: AÅ­tokomandoj haltigis komandon"
++
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: Ne eblas disponigi iun ajn bufron, nun eliras..."
+ 
+@@ -186,7 +190,6 @@
+ msgid "Top"
+ msgstr "Supro"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+@@ -256,7 +259,7 @@
+ msgstr "E787: Bufro ÅanÄiÄis neatendite"
+ 
+ msgid "E104: Escape not allowed in digraph"
+-msgstr "E104: Eskapsigno malpermesita en duliteraÄµo"
++msgstr "E104: Eskapsigno nepermesebla en duliteraÄµo"
+ 
+ msgid "E544: Keymap file not found"
+ msgstr "E544: Dosiero de klavmapo ne troveblas"
+@@ -314,6 +317,12 @@
+ msgid "Hit end of paragraph"
+ msgstr "Atingis finon de alineo"
+ 
++msgid "E839: Completion function changed window"
++msgstr "E839: Kompletiga funkcio ÅanÄis la fenestron"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: Kompletiga funkcio forviÅis tekston"
++
+ msgid "'dictionary' option is empty"
+ msgstr "La opcio 'dictionary' estas malplena"
+ 
+@@ -457,7 +466,7 @@
+ msgstr "E711: Lista valoro ne havas sufiÄe da eroj"
+ 
+ msgid "E690: Missing \"in\" after :for"
+-msgstr "E690: \"in\" mankas malantaÅ­ \":for\""
++msgstr "E690: \"in\" mankas post \":for\""
+ 
+ #, c-format
+ msgid "E107: Missing parentheses: %s"
+@@ -471,7 +480,7 @@
+ msgstr "E743: variablo ingita tro profunde por malÅlosi"
+ 
+ msgid "E109: Missing ':' after '?'"
+-msgstr "E109: Mankas ':' malantaÅ­ '?'"
++msgstr "E109: Mankas ':' post '?'"
+ 
+ msgid "E691: Can only compare List with List"
+ msgstr "E691: Eblas nur kompari Liston kun Listo"
+@@ -557,7 +566,7 @@
+ 
+ #, c-format
+ msgid "E119: Not enough arguments for function: %s"
+-msgstr "E119: Ne sufiÄe da argumentoj de funkcio: %s"
++msgstr "E119: Ne sufiÄe da argumentoj por funkcio: %s"
+ 
+ #, c-format
+ msgid "E120: Using <SID> not in a script context: %s"
+@@ -570,6 +579,9 @@
+ msgid "E808: Number or Float required"
+ msgstr "E808: Nombro aÅ­ Glitpunktnombro bezonata"
+ 
++msgid "add() argument"
++msgstr "argumento de add()"
++
+ msgid "E699: Too many arguments"
+ msgstr "E699: Tro da argumentoj"
+ 
+@@ -584,10 +596,19 @@
+ msgid "&Ok"
+ msgstr "&Bone"
+ 
++msgid "extend() argument"
++msgstr "argumento de extend()"
++
+ #, c-format
+ msgid "E737: Key already exists: %s"
+ msgstr "E737: Ålosilo jam ekzistas: %s"
+ 
++msgid "map() argument"
++msgstr "argumento de map()"
++
++msgid "filter() argument"
++msgstr "argumento de filter()"
++
+ #, c-format
+ msgid "+-%s%3ld lines: "
+ msgstr "+-%s%3ld linioj: "
+@@ -606,8 +627,11 @@
+ msgid "called inputrestore() more often than inputsave()"
+ msgstr "alvokis inputrestore() pli ofte ol inputsave()"
+ 
++msgid "insert() argument"
++msgstr "argumento de insert()"
++
+ msgid "E786: Range not allowed"
+-msgstr "E786: Amplekso malpermesita"
++msgstr "E786: Amplekso nepermesebla"
+ 
+ msgid "E701: Invalid type for len()"
+ msgstr "E701: Nevalida datumtipo de len()"
+@@ -631,12 +655,21 @@
+ msgid "E277: Unable to read a server reply"
+ msgstr "E277: Ne eblas legi respondon de servilo"
+ 
++msgid "remove() argument"
++msgstr "argumento de remove()"
++
+ msgid "E655: Too many symbolic links (cycle?)"
+ msgstr "E655: Tro da simbolaj ligiloj (Äu estas ciklo?)"
+ 
++msgid "reverse() argument"
++msgstr "argumento de reverse()"
++
+ msgid "E258: Unable to send to client"
+ msgstr "E258: Ne eblas sendi al kliento"
+ 
++msgid "sort() argument"
++msgstr "argumento de sort()"
++
+ msgid "E702: Sort compare function failed"
+ msgstr "E702: Ordiga funkcio fiaskis"
+ 
+@@ -671,14 +704,6 @@
+ msgstr "E806: uzo de Glitpunktnombro kiel Äeno"
+ 
+ #, c-format
+-msgid "E704: Funcref variable name must start with a capital: %s"
+-msgstr "E704: Nomo de variablo Funcref ekendas per majusklo: %s"
+-
+-#, c-format
+-msgid "E705: Variable name conflicts with existing function: %s"
+-msgstr "E705: Nomo de variablo konfliktas kun ekzistanta funkcio: %s"
+-
+-#, c-format
+ msgid "E706: Variable type mismatch for: %s"
+ msgstr "E706: Nekongrua datumtipo de variablo: %s"
+ 
+@@ -687,6 +712,14 @@
+ msgstr "E795: Ne eblas forviÅi variablon %s"
+ 
+ #, c-format
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: Nomo de variablo Funcref devas finiÄi per majusklo: %s"
++
++#, c-format
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: Nomo de variablo konfliktas kun ekzistanta funkcio: %s"
++
++#, c-format
+ msgid "E741: Value is locked: %s"
+ msgstr "E741: Valoro estas Ålosita: %s"
+ 
+@@ -708,10 +741,17 @@
+ msgid "E124: Missing '(': %s"
+ msgstr "E124: Mankas '(': %s"
+ 
++msgid "E862: Cannot use g: here"
++msgstr "E862: Ne eblas uzi g: Äi tie"
++
+ #, c-format
+ msgid "E125: Illegal argument: %s"
+ msgstr "E125: Nevalida argumento: %s"
+ 
++#, c-format
++msgid "E853: Duplicate argument name: %s"
++msgstr "E853: Ripetita nomo de argumento: %s"
++
+ msgid "E126: Missing :endfunction"
+ msgstr "E126: Mankas \":endfunction\""
+ 
+@@ -854,7 +894,6 @@
+ msgid "# This viminfo file was generated by Vim %s.\n"
+ msgstr "# Tiu dosiero viminfo estis kreita de Vim %s.\n"
+ 
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+@@ -862,7 +901,6 @@
+ "# Vi povas redakti Äin se vi estas singarda.\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+ msgstr "# Valoro de 'encoding' kiam tiu dosiero estis kreita\n"
+ 
+@@ -930,7 +968,7 @@
+ msgstr "E144: nenumera argumento de :z"
+ 
+ msgid "E145: Shell commands not allowed in rvim"
+-msgstr "E145: Åelkomandoj ne permesataj en rvim"
++msgstr "E145: Åelkomandoj nepermeseblaj en rvim"
+ 
+ msgid "E146: Regular expressions can't be delimited by letters"
+ msgstr "E146: Ne eblas limigi regulesprimon per literoj"
+@@ -975,6 +1013,9 @@
+ msgstr "Åablono trovita en Äiuj linioj: %s"
+ 
+ #, c-format
++msgid "Pattern not found: %s"
++msgstr "Åablono ne trovita: %s"
++
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+@@ -1223,7 +1264,7 @@
+ msgstr "E319: BedaÅ­rinde, tiu komando ne haveblas en tiu versio"
+ 
+ msgid "E172: Only one file name allowed"
+-msgstr "E172: Nur unu dosiernomo permesita"
++msgstr "E172: Nur unu dosiernomo permesebla"
+ 
+ msgid "1 more file to edit.  Quit anyway?"
+ msgstr "1 plia redaktenda dosiero. Äu tamen eliri?"
+@@ -1278,6 +1319,9 @@
+ msgid "E183: User defined commands must start with an uppercase letter"
+ msgstr "E183: Komandoj difinataj de uzanto devas eki per majusklo"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: Rezervita nomo, neuzebla por komando difinita de uzanto"
++
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+ msgstr "E184: Neniu komando-difinita-de-uzanto kiel: %s"
+@@ -1288,7 +1332,8 @@
+ 
+ msgid "E468: Completion argument only allowed for custom completion"
+ msgstr ""
+-"E468: Argumento de kompletigo nur permesata por kompletigo difinita de uzanto"
++"E468: Argumento de kompletigo nur permesebla por kompletigo difinita de "
++"uzanto"
+ 
+ msgid "E467: Custom completion requires a function argument"
+ msgstr "E467: Uzula kompletigo bezonas funkcian argumenton"
+@@ -1297,8 +1342,8 @@
+ msgstr "nekonata"
+ 
+ #, c-format
+-msgid "E185: Cannot find color scheme %s"
+-msgstr "E185: Ne eblas trovi agordaron de koloroj %s"
++msgid "E185: Cannot find color scheme '%s'"
++msgstr "E185: Ne eblas trovi agordaron de koloroj '%s'"
+ 
+ msgid "Greetings, Vim user!"
+ msgstr "Bonvenon, uzanto de Vim!"
+@@ -1384,30 +1429,25 @@
+ msgid "E194: No alternate file name to substitute for '#'"
+ msgstr "E194: Neniu alterna dosiernomo por anstataÅ­igi al '#'"
+ 
+-# DP: mi ne certas, Äu <afile> tradukeblas
+-# AM: laÅ­ mi ne
+ msgid "E495: no autocommand file name to substitute for \"<afile>\""
+ msgstr "E495: neniu dosiernomo de aÅ­tokomando por anstataÅ­igi al \"<afile>\""
+ 
+-# DP: mi ne certas, Äu <abuf> tradukeblas
+-# AM: laÅ­ mi ne
+ msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+ msgstr ""
+ "E496: neniu numero de bufro de aÅ­tokomando por anstataÅ­igi al \"<abuf>\""
+ 
+-# DP: mi ne certas, Äu <amatch> tradukeblas
+-# AM: laÅ­ mi ne
+ # DP: Äu match estas verbo aÅ­ nomo en la angla version?
+ # AM: Äi tie, nomo, Åajnas al mi
+ msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+ msgstr ""
+ "E497: neniu nomo de kongruo de aÅ­tokomando por anstataÅ­igi al \"<amatch>\""
+ 
+-# DP: mi ne certas, Äu <sfile> tradukeblas
+-# AM: laÅ­ mi ne
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+ msgstr "E498: neniu dosiernomo \":source\" por anstataÅ­igi al \"<sfile>\""
+ 
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: neniu uzebla numero de linio por \"<slnum>\""
++
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+ msgstr "E499: Malplena dosiernomo por '%' aÅ­ '#', nur funkcias kun \":p:h\""
+@@ -1487,7 +1527,7 @@
+ msgstr "E583: pluraj \":else\""
+ 
+ msgid "E584: :elseif after :else"
+-msgstr "E584: \":elseif\" malantaÅ­ \":else\""
++msgstr "E584: \":elseif\" post \":else\""
+ 
+ msgid "E585: :while/:for nesting too deep"
+ msgstr "E585: \":while/:for\" ingita tro profunde"
+@@ -1513,7 +1553,7 @@
+ #. Give up for a ":catch" after ":finally" and ignore it.
+ #. * Just parse.
+ msgid "E604: :catch after :finally"
+-msgstr "E604: \":catch\" malantaÅ­ \":finally\""
++msgstr "E604: \":catch\" post \":finally\""
+ 
+ msgid "E606: :finally without :try"
+ msgstr "E606: \":finally\" sen \":try\""
+@@ -1529,7 +1569,7 @@
+ msgstr "E193: \":endfunction\" ekster funkcio"
+ 
+ msgid "E788: Not allowed to edit another buffer now"
+-msgstr "E788: Nun malpermesas redakti alian bufron"
++msgstr "E788: Ne eblas redakti alian bufron nun"
+ 
+ msgid "E811: Not allowed to change buffer information now"
+ msgstr "E811: Ne eblas ÅanÄi informon de bufro nun"
+@@ -1639,6 +1679,9 @@
+ msgid "[converted]"
+ msgstr "[konvertita]"
+ 
++msgid "[blowfish]"
++msgstr "[blowfish]"
++
+ msgid "[crypted]"
+ msgstr "[Äifrita]"
+ 
+@@ -1816,6 +1859,7 @@
+ msgid "%lld characters"
+ msgstr "%lld signoj"
+ 
++#. Explicit typecast avoids warning on Mac OS X 10.6
+ #, c-format
+ msgid "%ld characters"
+ msgstr "%ld signoj"
+@@ -1914,7 +1958,7 @@
+ 
+ #, c-format
+ msgid "E215: Illegal character after *: %s"
+-msgstr "E215: Nevalida signo malantaÅ­ *: %s"
++msgstr "E215: Nevalida signo post *: %s"
+ 
+ #, c-format
+ msgid "E216: No such event: %s"
+@@ -2007,6 +2051,12 @@
+ msgid "E228: makemap: Illegal mode"
+ msgstr "E228: makemap: Nevalida reÄimo"
+ 
++msgid "E851: Failed to create a new process for the GUI"
++msgstr "E851: Ne sukcesis krei novan procezon por la grafika interfaco"
++
++msgid "E852: The child process failed to start the GUI"
++msgstr "E852: La ida procezo ne sukcesis startigi la grafikan interfacon"
++
+ msgid "E229: Cannot start the GUI"
+ msgstr "E229: Ne eblas lanÄi la grafikan interfacon"
+ 
+@@ -2090,7 +2140,7 @@
+ 
+ #. whole word only button
+ msgid "Match whole word only"
+-msgstr "Kongrui nur plenan vorton"
++msgstr "Kongrui kun nur plena vorto"
+ 
+ #. match case button
+ msgid "Match case"
+@@ -2170,21 +2220,6 @@
+ msgstr "&Malfari"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Ne eblas Åargi la tiparon Zap \"%s\""
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Ne eblas uzi tiparon %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Sendas mesaÄon por finigi idan procezon\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Ne eblas trovi titolon de fenestro \"%s\""
+ 
+@@ -2230,7 +2265,7 @@
+ 
+ #, c-format
+ msgid "Font '%s' is not fixed-width"
+-msgstr "Tiparo \"%s\" ne estas egallarÄa"
++msgstr "Tiparo '%s' ne estas egallarÄa"
+ 
+ #, c-format
+ msgid "E253: Fontset name: %s\n"
+@@ -2486,7 +2521,7 @@
+ "       g: Find this definition\n"
+ "       i: Find files #including this file\n"
+ "       s: Find this C symbol\n"
+-"       t: Find assignments to\n"
++"       t: Find this text string\n"
+ msgstr ""
+ "\n"
+ "       c: Trovi funkciojn, kiuj alvokas tiun funkcion\n"
+@@ -2496,7 +2531,7 @@
+ "       g: Trovi tiun difinon\n"
+ "       i: Trovi dosierojn, kiuj inkluzivas (#include) tiun dosieron\n"
+ "       s: Trovi tiun C-simbolon\n"
+-"       t: Trovi atribuojn al\n"
++"       t: Trovi tiun Äenon\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2590,6 +2625,9 @@
+ msgid "string cannot contain newlines"
+ msgstr "Äeno ne rajtas enhavi liniavancojn"
+ 
++msgid "error converting Scheme values to Vim"
++msgstr "eraro dum konverto de Scheme-valoro al Vim"
++
+ msgid "Vim error: ~a"
+ msgstr "Eraro de Vim: ~a"
+ 
+@@ -2606,13 +2644,13 @@
+ msgstr "numero de linio ekster limoj"
+ 
+ msgid "not allowed in the Vim sandbox"
+-msgstr "nepermesita en sabloludejo de Vim"
++msgstr "nepermesebla en sabloludejo de Vim"
+ 
+ msgid "E836: This Vim cannot execute :python after using :py3"
+-msgstr "E836: Pitono: Ne eblas uzi :py kaj :py3 en la sama seanco"
++msgstr "E836: Vim ne povas plenumi :python post uzo de :py3"
+ 
+-msgid "E837: This Vim cannot execute :py3 after using :python"
+-msgstr "E837: Pitono: Ne eblas uzi :py kaj :py3 en la sama seanco"
++msgid "only string keys are allowed"
++msgstr "nur Äenaj Ålosiloj estas permeseblaj"
+ 
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+@@ -2624,18 +2662,11 @@
+ msgid "E659: Cannot invoke Python recursively"
+ msgstr "E659: Ne eblas alvoki Pitonon rekursie"
+ 
+-msgid "can't delete OutputObject attributes"
+-msgstr "ne eblas forviÅi atributojn de OutputObject"
+-
+-msgid "softspace must be an integer"
+-msgstr "malmolspaceto (softspace) devas esti entjero"
++msgid "E837: This Vim cannot execute :py3 after using :python"
++msgstr "E837: Vim ne povas plenumi :py3  post uzo de :python"
+ 
+-msgid "invalid attribute"
+-msgstr "nevalida atributo"
+-
+-#, c-format
+-msgid "<buffer object (deleted) at %p>"
+-msgstr "<bufra objekto (forviÅita) Äe %p>"
++msgid "index must be int or slice"
++msgstr "indekso devas esti 'int' aÅ­ 'slice'"
+ 
+ msgid "E265: $_ must be an instance of String"
+ msgstr "E265: $_ devas esti apero de Äeno"
+@@ -2669,7 +2700,7 @@
+ msgstr "E273: nekonata stato de longjmp: %d"
+ 
+ msgid "Toggle implementation/definition"
+-msgstr "Baskuli realigon/difinon"
++msgstr "Baskuligi realigon/difinon"
+ 
+ msgid "Show base class of"
+ msgstr "Vidigi bazan klason de"
+@@ -2760,10 +2791,10 @@
+ msgstr "Sniff: Eraro dum skribo. Malkonektita"
+ 
+ msgid "invalid buffer number"
+-msgstr "nevalida nombro de bufroj"
++msgstr "nevalida numero de bufro"
+ 
+ msgid "not implemented yet"
+-msgstr "ne jam realigita"
++msgstr "ankoraÅ­ ne realigita"
+ 
+ #. ???
+ msgid "cannot set line(s)"
+@@ -2825,12 +2856,6 @@
+ "E571: BedaÅ­rinde tiu komando estas malÅaltita: la biblioteko Tcl ne "
+ "Åargeblis."
+ 
+-msgid ""
+-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+-msgstr ""
+-"E281: TCL-ERARO: elira kodo ne estas entjera!? Bv. retpoÅti al vim-dev@vim."
+-"org"
+-
+ #, c-format
+ msgid "E572: exit code %d"
+ msgstr "E572: elira kodo %d"
+@@ -2859,10 +2884,10 @@
+ msgstr "Tro da argumentoj de redakto"
+ 
+ msgid "Argument missing after"
+-msgstr "Argumento mankas malantaÅ­"
++msgstr "Argumento mankas post"
+ 
+ msgid "Garbage after option argument"
+-msgstr "ForÄµetindaÄµo malantaÅ­ argumento de opcio"
++msgstr "ForÄµetindaÄµo post argumento de opcio"
+ 
+ msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+ msgstr "Tro da argumentoj \"+komando\", \"-c komando\" aÅ­ \"--cmd komando\""
+@@ -2965,7 +2990,7 @@
+ "Argumentoj:\n"
+ 
+ msgid "--\t\t\tOnly file names after this"
+-msgstr "--\t\t\tNur dosiernomoj malantaÅ­ tio"
++msgstr "--\t\t\tNur dosiernomoj post tio"
+ 
+ msgid "--literal\t\tDon't expand wildcards"
+ msgstr "--literal\t\tNe malvolvi Äµokerojn"
+@@ -2988,6 +3013,9 @@
+ msgid "-e\t\t\tEx mode (like \"ex\")"
+ msgstr "-e\t\t\tReÄimo Ex (kiel \"ex\")"
+ 
++msgid "-E\t\t\tImproved Ex mode"
++msgstr "-E\t\t\tPlibonigita Ex-reÄimo"
++
+ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+ msgstr "-s\t\t\tSilenta (stapla) reÄimo (nur por \"ex\")"
+ 
+@@ -3004,10 +3032,10 @@
+ msgstr "-Z\t\t\tLimigita reÄimo (kiel \"rvim\")"
+ 
+ msgid "-m\t\t\tModifications (writing files) not allowed"
+-msgstr "-m\t\t\tÅanÄoj (skribo al dosieroj) malpermesitaj"
++msgstr "-m\t\t\tÅanÄoj (skribo al dosieroj) nepermeseblaj"
+ 
+ msgid "-M\t\t\tModifications in text not allowed"
+-msgstr "-M\t\t\tÅanÄoj al teksto malpermesitaj"
++msgstr "-M\t\t\tÅanÄoj al teksto nepermeseblaj"
+ 
+ msgid "-b\t\t\tBinary mode"
+ msgstr "-b\t\t\tDuuma reÄimo"
+@@ -3035,7 +3063,7 @@
+ msgstr "-r\t\t\tListigi permutodosierojn .swp kaj eliri"
+ 
+ msgid "-r (with file name)\tRecover crashed session"
+-msgstr "-r (kun dosiernomo)\tRestaÅ­ri kolapsitan seancon"
++msgstr "-r (kun dosiernomo)\tRestaÅ­ri kolapsintan seancon"
+ 
+ msgid "-L\t\t\tSame as -r"
+ msgstr "-L\t\t\tKiel -r"
+@@ -3190,12 +3218,6 @@
+ msgid "-iconic\t\tStart vim iconified"
+ msgstr "-iconic\t\tLanÄi vim piktograme"
+ 
+-msgid "-name <name>\t\tUse resource as if vim was <name>"
+-msgstr "-name <nomo>\t\tUzi rimedon kvazaÅ­ vim estus <nomo>"
+-
+-msgid "\t\t\t  (Unimplemented)\n"
+-msgstr "\t\t\t  (Nerealigita)\n"
+-
+ msgid "-background <color>\tUse <color> for the background (also: -bg)"
+ msgstr "-background <koloro>\tUzi <koloro>-n por la fona koloro (ankaÅ­: -bg)"
+ 
+@@ -3237,19 +3259,6 @@
+ 
+ msgid ""
+ "\n"
+-"Arguments recognised by gvim (RISC OS version):\n"
+-msgstr ""
+-"\n"
+-"Argumentoj agnoskitaj de gvim (versio RISC OS):\n"
+-
+-msgid "--columns <number>\tInitial width of window in columns"
+-msgstr "--columns <nombro>\tKomenca larÄo de fenestro en kolumnoj"
+-
+-msgid "--rows <number>\tInitial height of window in rows"
+-msgstr "--rows <nombro>\tKomenca alto de fenestro en vicoj"
+-
+-msgid ""
+-"\n"
+ "Arguments recognised by gvim (GTK+ version):\n"
+ msgstr ""
+ "\n"
+@@ -3264,6 +3273,9 @@
+ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+ msgstr "--socketid <xid>\tMalfermi Vim en alia GTK fenestraÄµo"
+ 
++msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++msgstr "--echo-wid\t\tIgas gvim afiÅi la identigilon de vindozo sur stdout"
++
+ msgid "-P <parent title>\tOpen Vim inside parent application"
+ msgstr "-P <gepatra titolo>\tMalfermi Vim en gepatra aplikaÄµo"
+ 
+@@ -3322,7 +3334,6 @@
+ "\n"
+ "ÅanÄo  linio kol teksto"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+@@ -3331,7 +3342,6 @@
+ "# Markoj de dosiero:\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+@@ -3339,7 +3349,6 @@
+ "\n"
+ "# Saltlisto (plej novaj unue):\n"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+@@ -3399,6 +3408,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: Äu ne akiris blokon n-ro 2?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: Eraro dum Äisdatigo de Äifrada permutodosiero .swp"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: Ve, perdis la permutodosieron .swp!!!"
+@@ -3655,7 +3667,7 @@
+ "        proceza ID: "
+ 
+ msgid " (still running)"
+-msgstr " (ankoraÅ­ rulas)"
++msgstr " (ankoraÅ­ ruliÄas)"
+ 
+ msgid ""
+ "\n"
+@@ -3757,24 +3769,20 @@
+ #. * other languages.
+ msgid ""
+ "\n"
+-"(1) Another program may be editing the same file.\n"
+-"    If this is the case, be careful not to end up with two\n"
+-"    different instances of the same file when making changes.\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
+ msgstr ""
+ "\n"
+ "(1) Alia programo eble redaktas la saman dosieron.\n"
+ "    Se jes, estu singarda por ne havi du malsamajn\n"
+-"    aperojn de la sama dosiero, kiam vi faros ÅanÄojn.\n"
++"    aperojn de la sama dosiero, kiam vi faros ÅanÄojn."
+ 
+-msgid "    Quit, or continue with caution.\n"
+-msgstr "    Eliru, aÅ­ daÅ­rigu singarde.\n"
++msgid "  Quit, or continue with caution.\n"
++msgstr "  Eliru, aÅ­ daÅ­rigu singarde.\n"
+ 
+-msgid ""
+-"\n"
+-"(2) An edit session for this file crashed.\n"
+-msgstr ""
+-"\n"
+-"(2) Redakta seanco de tiu dosiero kolapsis.\n"
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) Redakta seanco de tiu dosiero kolapsis.\n"
+ 
+ msgid "    If this is the case, use \":recover\" or \"vim -r "
+ msgstr "    Se veras, uzu \":recover\" aÅ­ \"vim -r "
+@@ -4008,7 +4016,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "Vim: Finita.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "ERARO: "
+ 
+@@ -4068,6 +4075,9 @@
+ msgid "Keys don't match!"
+ msgstr "Ålosiloj ne kongruas!"
+ 
++msgid "E854: path too long for completion"
++msgstr "E854: tro longa vojo por kompletigo"
++
+ #, c-format
+ msgid ""
+ "E343: Invalid path: '**[number]' must be at the end of the path or be "
+@@ -4110,11 +4120,15 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: Konekto de NetBeans perdita por bufro %ld"
+ 
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: netbeans ne estas subtenata kun tiu grafika interfaco"
++
+ msgid "E511: netbeans already connected"
+ msgstr "E511: nebeans jam konektata"
+ 
+-msgid "E505: "
+-msgstr "E505: "
++#, c-format
++msgid "E505: %s is read-only (add ! to override)"
++msgstr "E505: %s estas nurlegebla (aldonu ! por transpasi)"
+ 
+ msgid "E349: No identifier under cursor"
+ msgstr "E349: Neniu identigilo sub la kursoro"
+@@ -4245,8 +4259,8 @@
+ "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+ "Bytes"
+ msgstr ""
+-"Apartigis %s%ld de %ld Linioj; %ld de %ld Vortoj; %ld de %ld Signoj; %ld de %"
+-"ld Bajtoj"
++"Apartigis %s%ld de %ld Linioj; %ld de %ld Vortoj; %ld de %ld Signoj; %ld de "
++"%ld Bajtoj"
+ 
+ #, c-format
+ msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+@@ -4257,8 +4271,8 @@
+ "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+ "%ld"
+ msgstr ""
+-"Kol %s de %s; Linio %ld de %ld; Vorto %ld de %ld; Signo %ld de %ld; Bajto %"
+-"ld de %ld"
++"Kol %s de %s; Linio %ld de %ld; Vorto %ld de %ld; Signo %ld de %ld; Bajto "
++"%ld de %ld"
+ 
+ #, c-format
+ msgid "(+%ld for BOM)"
+@@ -4277,10 +4291,13 @@
+ msgstr "E519: Opcio ne subtenata"
+ 
+ msgid "E520: Not allowed in a modeline"
+-msgstr "E520: Ne permesita en reÄimlinio"
++msgstr "E520: Nepermesebla en reÄimlinio"
++
++msgid "E846: Key code not set"
++msgstr "E846: Klavkodo ne agordita"
+ 
+ msgid "E521: Number required after ="
+-msgstr "E521: Nombro bezonata malantaÅ­ ="
++msgstr "E521: Nombro bezonata post ="
+ 
+ msgid "E522: Not found in termcap"
+ msgstr "E522: Netrovita en termcap"
+@@ -4318,7 +4335,7 @@
+ 
+ #, c-format
+ msgid "E526: Missing number after <%s>"
+-msgstr "E526: Mankas nombro malantaÅ­ <%s>"
++msgstr "E526: Mankas nombro post <%s>"
+ 
+ msgid "E527: Missing comma"
+ msgstr "E527: Mankas komo"
+@@ -4346,7 +4363,7 @@
+ 
+ #, c-format
+ msgid "E535: Illegal character after <%c>"
+-msgstr "E535: Nevalida signo malantaÅ­ <%c>"
++msgstr "E535: Nevalida signo post <%c>"
+ 
+ msgid "E536: comma required"
+ msgstr "E536: komo bezonata"
+@@ -4429,7 +4446,7 @@
+ 
+ #, c-format
+ msgid "E358: 'langmap': Extra characters after semicolon: %s"
+-msgstr "E358: 'langmap': Ekstraj signoj malantaÅ­ punktokomo: %s"
++msgstr "E358: 'langmap': Ekstraj signoj post punktokomo: %s"
+ 
+ msgid "cannot open "
+ msgstr "ne eblas malfermi "
+@@ -4502,7 +4519,7 @@
+ 
+ #, c-format
+ msgid "Printing '%s'"
+-msgstr "Presas \"%s\""
++msgstr "Presas '%s'"
+ 
+ #, c-format
+ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+@@ -4512,10 +4529,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Nevalida signo '%c' en nomo de tiparo \"%s\""
+ 
+-# DP: Äu traduki Text?
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Nevalida opcio 'osfiletype' - uzas Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Duobla signalo, eliranta\n"
+ 
+@@ -4740,18 +4753,9 @@
+ msgid "E369: invalid item in %s%%[]"
+ msgstr "E369: nevalida ano en %s%%[]"
+ 
+-msgid "E339: Pattern too long"
+-msgstr "E339: Åablono tro longa"
+-
+-msgid "E50: Too many \\z("
+-msgstr "E50: Tro da \\z("
+-
+ #, c-format
+-msgid "E51: Too many %s("
+-msgstr "E51: Tro da %s("
+-
+-msgid "E52: Unmatched \\z("
+-msgstr "E52: Neekvilibra \\z("
++msgid "E769: Missing ] after %s["
++msgstr "E769: Mankas ] post %s["
+ 
+ #, c-format
+ msgid "E53: Unmatched %s%%("
+@@ -4765,9 +4769,22 @@
+ msgid "E55: Unmatched %s)"
+ msgstr "E55: Neekvilibra %s"
+ 
++msgid "E339: Pattern too long"
++msgstr "E339: Åablono tro longa"
++
++msgid "E50: Too many \\z("
++msgstr "E50: Tro da \\z("
++
++#, c-format
++msgid "E51: Too many %s("
++msgstr "E51: Tro da %s("
++
++msgid "E52: Unmatched \\z("
++msgstr "E52: Neekvilibra \\z("
++
+ #, c-format
+ msgid "E59: invalid character after %s@"
+-msgstr "E59: nevalida signo malantaÅ­ %s@"
++msgstr "E59: nevalida signo post %s@"
+ 
+ #, c-format
+ msgid "E60: Too many complex %s{...}s"
+@@ -4792,18 +4809,18 @@
+ msgstr "E65: Nevalida retro-referenco"
+ 
+ msgid "E66: \\z( not allowed here"
+-msgstr "E66: \\z( estas malpermesa tie"
++msgstr "E66: \\z( estas permesebla tie"
+ 
+ # DP: vidu http://www.thefreedictionary.com/et+al.
+ msgid "E67: \\z1 et al. not allowed here"
+-msgstr "E67: \\z1 kaj aliaj estas malpermesataj tie"
++msgstr "E67: \\z1 kaj aliaj estas nepermeseblaj tie"
+ 
+ msgid "E68: Invalid character after \\z"
+-msgstr "E68: Nevalida signo malantaÅ­ \\z"
++msgstr "E68: Nevalida signo post \\z"
+ 
+ #, c-format
+ msgid "E69: Missing ] after %s%%["
+-msgstr "E69: Mankas ] malantaÅ­ %s%%["
++msgstr "E69: Mankas ] post %s%%["
+ 
+ #, c-format
+ msgid "E70: Empty %s%%[]"
+@@ -4811,15 +4828,11 @@
+ 
+ #, c-format
+ msgid "E678: Invalid character after %s%%[dxouU]"
+-msgstr "E678: Nevalida signo malantaÅ­ %s%%[dxouU]"
++msgstr "E678: Nevalida signo post %s%%[dxouU]"
+ 
+ #, c-format
+ msgid "E71: Invalid character after %s%%"
+-msgstr "E71: Nevalida signo malantaÅ­ %s%%"
+-
+-#, c-format
+-msgid "E769: Missing ] after %s["
+-msgstr "E769: Mankas ] malantaÅ­ %s["
++msgstr "E71: Nevalida signo post %s%%"
+ 
+ #, c-format
+ msgid "E554: Syntax error in %s{...}"
+@@ -4828,6 +4841,83 @@
+ msgid "External submatches:\n"
+ msgstr "Eksteraj subkongruoj:\n"
+ 
++msgid ""
++"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
++"used "
++msgstr ""
++"E864: \\%#= povas nur esti sekvita de 0, 1, aÅ­ 2. La aÅ­tomata motoro de "
++"regulesprimo estos uzata "
++
++#, c-format
++msgid "E866: (NFA regexp) Misplaced %c"
++msgstr "E866: (NFA-regulesprimo) Mispoziciigita %c"
++
++msgid "E865: (NFA) Regexp end encountered prematurely"
++msgstr "E865: (NFA) Trovis finon de regulesprimo tro frue"
++
++#, c-format
++msgid "E867: (NFA) Unknown operator '\\z%c'"
++msgstr "E867: (NFA) Nekonata operatoro '\\z%c'"
++
++#. should never happen
++msgid "E868: Error building NFA with equivalence class!"
++msgstr "E868: Eraro dum prekomputado de NFA kun ekvivalentoklaso!"
++
++#, c-format
++msgid "E869: (NFA) Unknown operator '\\@%c'"
++msgstr "E869: (NFA) Nekonata operatoro '\\@%c'"
++
++msgid "E870: (NFA regexp) Error reading repetition limits"
++msgstr "E870: (NFS-regulesprimo) Eraro dum legado de limoj de ripeto"
++
++msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
++msgstr ""
++"E871: (NFA-regulesprimo) Ne povas havi mult-selekton tuj post alia mult-"
++"selekto!"
++
++msgid "E872: (NFA regexp) Too many '('"
++msgstr "E872: (NFA-regulesprimo) tro da '('"
++
++msgid "E873: (NFA regexp) proper termination error"
++msgstr "E873: (NFA-regulesprimo) propra end-eraro"
++
++msgid "E874: (NFA) Could not pop the stack !"
++msgstr "E874: (NFA) Ne povis elpreni de la staplo!"
++
++msgid ""
++"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
++"left on stack"
++msgstr ""
++"E875: (NFA-regulesprimo) (dum konverto de postmeto al NFA), restas tro da "
++"statoj en la staplo"
++
++msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
++msgstr "E876: (NFA-regulesprimo) ne sufiÄa spaco por enmomorigi la tutan NFA "
++
++msgid "E999: (NFA regexp internal error) Should not process NOT node !"
++msgstr ""
++"E999: (interna eraro de NFA-regulesprimo) Ne devus procezi nodon 'NOT'!"
++
++#. should not be here :P
++msgid "E877: (NFA regexp) Invalid character class "
++msgstr "E877: (NFA-regulesprimo) Nevalida klaso de signo "
++
++#, c-format
++msgid "(NFA) COULD NOT OPEN %s !"
++msgstr "(NFA) NE POVIS MALFERMI %s!"
++
++msgid ""
++"Could not open temporary log file for writing, displaying on stderr ... "
++msgstr ""
++"Ne povis malfermi provizoran protokolan dosieron por skribi, nun montras sur "
++"stderr ..."
++
++msgid "E878: (NFA) Could not allocate memory for branch traversal!"
++msgstr "E878: (NFA) Ne povis asigni memoron por traigi branÄojn!"
++
++msgid "Could not open temporary log file for writing "
++msgstr "Ne povis malfermi la provizoran protokolan dosieron por skribi "
++
+ msgid " VREPLACE"
+ msgstr " V-ANSTATAÅ¬IGO"
+ 
+@@ -4895,7 +4985,7 @@
+ msgstr "E385: serÄo atingis SUBON sen trovi: %s"
+ 
+ msgid "E386: Expected '?' or '/'  after ';'"
+-msgstr "E386: Atendis '?' aÅ­ '/' malantaÅ­ ';'"
++msgstr "E386: Atendis '?' aÅ­ '/' post ';'"
+ 
+ msgid " (includes previously listed match)"
+ msgstr " (enhavas antaÅ­e listigitajn kongruojn)"
+@@ -4905,7 +4995,7 @@
+ msgstr "--- Inkluzivitaj dosieroj "
+ 
+ msgid "not found "
+-msgstr "netrovita "
++msgstr "netrovitaj "
+ 
+ msgid "in path ---\n"
+ msgstr "en serÄvojo ---\n"
+@@ -4979,6 +5069,10 @@
+ msgstr "E756: Literumilo ne estas Åaltita"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr "Averto: Ne eblas trovi vortliston \"%s_%s.spl\" aÅ­ \"%s_ascii.spl\""
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr "Averto: Ne eblas trovi vortliston \"%s.%s.spl\" aÅ­ \"%s.ascii.spl\""
+ 
+@@ -5024,23 +5118,23 @@
+ 
+ #, c-format
+ msgid "FLAG after using flags in %s line %d: %s"
+-msgstr "FLAG malantaÅ­ flagoj en %s linio %d: %s"
++msgstr "FLAG post flagoj en %s linio %d: %s"
+ 
+ #, c-format
+ msgid ""
+ "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+ "%d"
+ msgstr ""
+-"Difino de COMPOUNDFORBIDFLAG malantaÅ­ ano PFX povas doni neÄustajn rezultojn "
+-"en %s linio %d"
++"Difino de COMPOUNDFORBIDFLAG post ano PFX povas doni neÄustajn rezultojn en "
++"%s linio %d"
+ 
+ #, c-format
+ msgid ""
+ "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+ "%d"
+ msgstr ""
+-"Difino de COMPOUNDPERMITFLAG malantaÅ­ ano PFX povas doni neÄustajn rezultojn "
+-"en %s linio %d"
++"Difino de COMPOUNDPERMITFLAG post ano PFX povas doni neÄustajn rezultojn en "
++"%s linio %d"
+ 
+ #, c-format
+ msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
+@@ -5176,7 +5270,7 @@
+ 
+ #, c-format
+ msgid "/encoding= line after word ignored in %s line %d: %s"
+-msgstr "Linio /encoding= malantaÅ­ vorto ignorita en %s linio %d: %s"
++msgstr "Linio /encoding= post vorto ignorita en %s linio %d: %s"
+ 
+ #, c-format
+ msgid "Duplicate /regions= line ignored in %s line %d: %s"
+@@ -5202,6 +5296,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "Ignoris %d vorto(j)n kun neaskiaj signoj"
+ 
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: Ne sufiÄe da memoro, vortlisto estos nekompleta."
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "Densigis %d de %d nodoj; %d (%d%%) restantaj"
+@@ -5379,8 +5476,8 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: La argumento \"contains\" ne akcepteblas tie"
+ 
+-msgid "E396: containedin argument not accepted here"
+-msgstr "E396: La argumento \"containedin\" ne akcepteblas tie"
++msgid "E844: invalid cchar value"
++msgstr "E844: nevalida valoro de cchar"
+ 
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: La argumento \"group[t]here\" ne akcepteblas tie"
+@@ -5392,6 +5489,9 @@
+ msgid "E397: Filename required"
+ msgstr "E397: Dosiernomo bezonata"
+ 
++msgid "E847: Too many syntax includes"
++msgstr "E847: Tro da sintaksaj inkluzivoj"
++
+ #, c-format
+ msgid "E789: Missing ']': %s"
+ msgstr "E789: Mankas ']': %s"
+@@ -5404,6 +5504,9 @@
+ msgid "E399: Not enough arguments: syntax region %s"
+ msgstr "E399: Ne sufiÄaj argumentoj: sintaksa regiono %s"
+ 
++msgid "E848: Too many syntax clusters"
++msgstr "E848: Tro da sintaksaj grupoj"
++
+ msgid "E400: No cluster specified"
+ msgstr "E400: Neniu fasko specifita"
+ 
+@@ -5413,7 +5516,7 @@
+ 
+ #, c-format
+ msgid "E402: Garbage after pattern: %s"
+-msgstr "E402: ForÄµetindaÄµo malantaÅ­ Åablono: %s"
++msgstr "E402: ForÄµetindaÄµo post Åablono: %s"
+ 
+ msgid "E403: syntax sync: line continuations pattern specified twice"
+ msgstr "E403: sintaksa sinkronigo: Åablono de linia daÅ­rigo specifita dufoje"
+@@ -5432,7 +5535,7 @@
+ 
+ #, c-format
+ msgid "E407: %s not allowed here"
+-msgstr "E407: %s ne estas permesata tie"
++msgstr "E407: %s ne estas permesebla tie"
+ 
+ #, c-format
+ msgid "E408: %s must be first in contains list"
+@@ -5507,6 +5610,9 @@
+ msgid "W18: Invalid character in group name"
+ msgstr "W18: Nevalida signo en nomo de grupo"
+ 
++msgid "E849: Too many highlight and syntax groups"
++msgstr "E849: Tro da emfazaj kaj sintaksaj grupoj"
++
+ msgid "E555: at bottom of tag stack"
+ msgstr "E555: Äe subo de stako de etikedoj"
+ 
+@@ -5568,6 +5674,9 @@
+ msgid "E430: Tag file path truncated for %s\n"
+ msgstr "E430: Vojo de etikeda dosiero trunkita por %s\n"
+ 
++msgid "Ignoring long line in tags file"
++msgstr "Ignoro de longa linio en etikeda dosiero"
++
+ #, c-format
+ msgid "E431: Format error in tags file \"%s\""
+ msgstr "E431: Eraro de formato en etikeda dosiero \"%s\""
+@@ -5584,9 +5693,6 @@
+ msgid "E433: No tags file"
+ msgstr "E433: Neniu etikeda dosiero"
+ 
+-msgid "Ignoring long line in tags file"
+-msgstr "Ignoro de longa linio en etikeda dosiero"
+-
+ msgid "E434: Can't find tag pattern"
+ msgstr "E434: Ne eblas trovi Åablonon de etikedo"
+ 
+@@ -5681,7 +5787,7 @@
+ 
+ #, c-format
+ msgid "Reading undo file: %s"
+-msgstr "Legado de de malfara dosiero: %s"
++msgstr "Legado de malfara dosiero: %s"
+ 
+ #, c-format
+ msgid "E822: Cannot open undo file for reading: %s"
+@@ -5753,20 +5859,20 @@
+ msgstr "antaÅ­"
+ 
+ msgid "after"
+-msgstr "malantaÅ­"
++msgstr "post"
+ 
+ msgid "Nothing to undo"
+ msgstr "Nenio por malfari"
+ 
+-msgid "number changes  time            saved"
+-msgstr "numero ÅanÄoj   tempo           konservita"
++msgid "number changes  when               saved"
++msgstr "numero ÅanÄoj   tempo              konservita"
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+ msgstr "antaÅ­ %ld sekundoj"
+ 
+ msgid "E790: undojoin is not allowed after undo"
+-msgstr "E790: undojoin estas nepermesita malantaÅ­ malfaro"
++msgstr "E790: undojoin estas nepermesebla post malfaro"
+ 
+ msgid "E439: undo list corrupt"
+ msgstr "E439: listo de malfaro estas difekta"
+@@ -5860,13 +5966,6 @@
+ 
+ msgid ""
+ "\n"
+-"RISC OS version"
+-msgstr ""
+-"\n"
+-"Versio RISC operaciumo"
+-
+-msgid ""
+-"\n"
+ "OpenVMS version"
+ msgstr ""
+ "\n"
+@@ -6054,7 +6153,7 @@
+ msgstr "tajpu  :help version7<Enenklavo>  por informo de versio"
+ 
+ msgid "Running in Vi compatible mode"
+-msgstr "Rulas en reÄimo kongrua kun Vi"
++msgstr "RuliÄas en reÄimo kongrua kun Vi"
+ 
+ # DP: atentu al la spacetoj: Äiuj Äenoj devas havi la saman longon
+ msgid "type  :set nocp<Enter>        for Vim defaults"
+@@ -6069,11 +6168,11 @@
+ msgstr "menuo  Help->Orfinoj              por pliaj informoj   "
+ 
+ msgid "Running modeless, typed text is inserted"
+-msgstr "Rulas senreÄime, tajpita teksto estas enmetita"
++msgstr "RuliÄas senreÄime, tajpita teksto estas enmetita"
+ 
+ # DP: atentu al la spacetoj: Äiuj Äenoj devas havi la saman longon
+ msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+-msgstr "menuo Redakti->Mallokaj Agordoj->Baskuli Enmetan ReÄimon"
++msgstr "menuo Redakti->Mallokaj Agordoj->Baskuligi Enmetan ReÄimon"
+ 
+ # DP: atentu al la spacetoj: Äiuj Äenoj devas havi la saman longon
+ msgid "                              for two modes      "
+@@ -6082,7 +6181,7 @@
+ # DP: tiu Äeno pli longas (mi ne volas igi Äiujn aliajn Äenojn
+ #     pli longajn)
+ msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
+-msgstr "menuo Redakti->Mallokaj Agordoj->Baskuli ReÄimon Kongruan kun Vi"
++msgstr "menuo Redakti->Mallokaj Agordoj->Baskuligi ReÄimon Kongruan kun Vi"
+ 
+ # DP: atentu al la spacetoj: Äiuj Äenoj devas havi la saman longon
+ msgid "                              for Vim defaults   "
+@@ -6206,7 +6305,7 @@
+ 
+ msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
+ msgstr ""
+-"E12: Malpermesata komando el exrc/vimrc en aktuala dosierujo aÅ­ etikeda serÄo"
++"E12: Nepermesebla komando el exrc/vimrc en aktuala dosierujo aÅ­ etikeda serÄo"
+ 
+ msgid "E171: Missing :endif"
+ msgstr "E171: Mankas \":endif\""
+@@ -6301,7 +6400,7 @@
+ msgstr "E24: Ne estas tia mallongigo"
+ 
+ msgid "E477: No ! allowed"
+-msgstr "E477: Neniu ! permesita"
++msgstr "E477: Neniu ! permesebla"
+ 
+ msgid "E25: GUI cannot be used: Not enabled at compile time"
+ msgstr "E25: Grafika interfaco ne uzeblas: MalÅaltita dum kompilado"
+@@ -6348,7 +6447,7 @@
+ msgstr "E35: Neniu antaÅ­a regulesprimo"
+ 
+ msgid "E481: No range allowed"
+-msgstr "E481: Amplekso ne permesita"
++msgstr "E481: Amplekso nepermesebla"
+ 
+ msgid "E36: Not enough room"
+ msgstr "E36: Ne sufiÄe da spaco"
+@@ -6431,10 +6530,10 @@
+ msgstr "E47: Eraro dum legado de erardosiero"
+ 
+ msgid "E48: Not allowed in sandbox"
+-msgstr "E48: Ne permesita en sabloludejo"
++msgstr "E48: Nepermesebla en sabloludejo"
+ 
+ msgid "E523: Not allowed here"
+-msgstr "E523: Ne permesita tie"
++msgstr "E523: Nepermesebla tie"
+ 
+ msgid "E359: Screen mode setting not supported"
+ msgstr "E359: ReÄimo de ekrano ne subtenata"
+@@ -6519,6 +6618,9 @@
+ msgid "E764: Option '%s' is not set"
+ msgstr "E764: La opcio '%s' ne estas Åaltita"
+ 
++msgid "E850: Invalid register name"
++msgstr "E850: Nevalida nomo de reÄistro"
++
+ msgid "search hit TOP, continuing at BOTTOM"
+ msgstr "serÄo atingis SUPRON, daÅ­rigonte al SUBO"
+ 
+@@ -6529,14 +6631,110 @@
+ msgid "Need encryption key for \"%s\""
+ msgstr "Ålosilo de Äifrado bezonata por \"%s\""
+ 
++msgid "can't delete OutputObject attributes"
++msgstr "ne eblas forviÅi atributojn de OutputObject"
++
++msgid "softspace must be an integer"
++msgstr "malmolspaceto (softspace) devas esti entjero"
++
++msgid "invalid attribute"
++msgstr "nevalida atributo"
++
+ msgid "writelines() requires list of strings"
+ msgstr "writelines() bezonas liston de Äenoj"
+ 
+ msgid "E264: Python: Error initialising I/O objects"
+ msgstr "E264: Pitono: Eraro de pravalorizo de eneligaj objektoj"
+ 
+-msgid "no such buffer"
+-msgstr "ne estas tia bufro"
++msgid "empty keys are not allowed"
++msgstr "malplenaj Ålosiloj nepermeseblaj"
++
++msgid "Cannot delete DictionaryObject attributes"
++msgstr "ne eblas forviÅi atributojn de DictionaryObject"
++
++msgid "Cannot modify fixed dictionary"
++msgstr "Ne eblas ÅanÄi fiksan vortaron"
++
++msgid "Cannot set this attribute"
++msgstr "Ne eblas agordi tiun atributon"
++
++msgid "dict is locked"
++msgstr "vortaro estas Ålosita"
++
++msgid "failed to add key to dictionary"
++msgstr "aldono de Ålosilo al vortaro fiaskis"
++
++msgid "list index out of range"
++msgstr "indekso de listo ekster limoj"
++
++msgid "internal error: failed to get vim list item"
++msgstr "interna eraro: obteno de vim-a listero fiaskis"
++
++msgid "list is locked"
++msgstr "listo estas Ålosita"
++
++msgid "Failed to add item to list"
++msgstr "Aldono de listero fiaskis"
++
++msgid "internal error: no vim list item"
++msgstr "interna eraro: neniu vim-a listero"
++
++msgid "can only assign lists to slice"
++msgstr "nur eblas pravalorizi listojn al segmento"
++
++msgid "internal error: failed to add item to list"
++msgstr "interna eraro: aldono de listero fiaskis"
++
++msgid "can only concatenate with lists"
++msgstr "eblas nur kunmeti kun listoj"
++
++msgid "cannot delete vim.dictionary attributes"
++msgstr "ne eblas forviÅi atributojn de 'vim.dictionary'"
++
++msgid "cannot modify fixed list"
++msgstr "ne eblas ÅanÄi fiksan liston"
++
++msgid "cannot set this attribute"
++msgstr "ne eblas agordi tiun atributon"
++
++msgid "'self' argument must be a dictionary"
++msgstr "argumento 'self' devas esti vortaro"
++
++msgid "failed to run function"
++msgstr "fiaskis ruli funkcion"
++
++msgid "unable to get option value"
++msgstr "fiaskis akiri valoron de opcio"
++
++msgid "unable to unset global option"
++msgstr "ne povis malÅalti mallokan opcion"
++
++msgid "unable to unset option without global value"
++msgstr "ne povis malÅalti opcion sen malloka valoro"
++
++msgid "object must be integer"
++msgstr "objekto devas esti entjero."
++
++msgid "object must be string"
++msgstr "objekto devas esti Äeno"
++
++msgid "attempt to refer to deleted tab page"
++msgstr "provo de referenco al forviÅita langeto"
++
++#, c-format
++msgid "<tabpage object (deleted) at %p>"
++msgstr "<langeta objekto (forviÅita) Äe %p>"
++
++#, c-format
++msgid "<tabpage object (unknown) at %p>"
++msgstr "<langeta objekto (nekonata) Äe %p>"
++
++#, c-format
++msgid "<tabpage %d>"
++msgstr "<langeto %d>"
++
++msgid "no such tab page"
++msgstr "ne estas tia langeto"
+ 
+ msgid "attempt to refer to deleted window"
+ msgstr "provo de referenco al forviÅita fenestro"
+@@ -6564,3 +6762,64 @@
+ 
+ msgid "attempt to refer to deleted buffer"
+ msgstr "provo de referenco al forviÅita bufro"
++
++#, c-format
++msgid "<buffer object (deleted) at %p>"
++msgstr "<bufra objekto (forviÅita) Äe %p>"
++
++msgid "key must be integer"
++msgstr "Ålosilo devas esti entjero."
++
++msgid "expected vim.buffer object"
++msgstr "atendis objekton vim.buffer"
++
++msgid "failed to switch to given buffer"
++msgstr "ne povis salti al la specifita bufro"
++
++msgid "expected vim.window object"
++msgstr "atendis objekton vim.window"
++
++msgid "failed to find window in the current tab page"
++msgstr "ne povis trovi vindozon en la nuna langeto"
++
++msgid "did not switch to the specified window"
++msgstr "ne saltis al la specifita vindozo"
++
++msgid "expected vim.tabpage object"
++msgstr "atendis objekton vim.tabpage"
++
++msgid "did not switch to the specified tab page"
++msgstr "ne saltis al la specifita langeto"
++
++msgid "failed to run the code"
++msgstr "fiaskis ruli la kodon"
++
++msgid "E858: Eval did not return a valid python object"
++msgstr "E858: Eval ne revenis kun valida python-objekto"
++
++msgid "E859: Failed to convert returned python object to vim value"
++msgstr "E859: Konverto de revena python-objekto al vim-valoro fiaskis"
++
++msgid "unable to convert to vim structure"
++msgstr "ne povis konverti al vim-strukturo"
++
++msgid "NULL reference passed"
++msgstr "NULL-referenco argumento"
++
++msgid "internal error: invalid value type"
++msgstr "interna eraro: nevalida tipo de valoro"
++
++#~ msgid "E863: return value must be an instance of str"
++#~ msgstr "E863: elira valoro devas esti apero de str"
++
++#~ msgid "E860: Eval did not return a valid python 3 object"
++#~ msgstr "E860: Eval ne revenis kun valida python3-objekto"
++
++#~ msgid "E861: Failed to convert returned python 3 object to vim value"
++#~ msgstr "E861: Konverto de revena python3-objekto al vim-valoro fiaskis"
++
++#~ msgid "Only boolean objects are allowed"
++#~ msgstr "Nur buleaj objektoj estas permeseblaj"
++
++#~ msgid "no such key in dictionary"
++#~ msgstr "tiu Ålosilo ne ekzistas en vortaro"
+diff -Naur vim73.orig/src/po/es.po vim73/src/po/es.po
+--- vim73.orig/src/po/es.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/es.po	2013-06-07 17:07:33.752245628 +0000
+@@ -2806,24 +2806,6 @@
+ msgid "&Undo"
+ msgstr "&Deshacer"
+ 
+-#: gui_riscos.c:953
+-#, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: No se pudo cargar el tipo de letra de impresiÃ³n Zap '%s'"
+-
+-#: gui_riscos.c:1052
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: No se puede usar el tipo de letra de impresiÃ³n %s"
+-
+-#: gui_riscos.c:3282
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Enviando mensaje para terminar los procesos dependientes (\"child\").\n"
+-
+ #: gui_w32.c:1177
+ #, c-format
+ msgid "E671: Cannot find window title \"%s\""
+@@ -5814,10 +5796,6 @@
+ "E245: CarÃ¡cter '%c' ilegal en el nombre del tipo de letra de\n"
+ "impresiÃ³n %s"
+ 
+-#: os_riscos.c:1263
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: La opciÃ³n \"osfiletype\" no es vÃ¡lida - usando Texto"
+-
+ #: os_unix.c:1065
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: SeÃ±al doble, saliendo\n"
+diff -Naur vim73.orig/src/po/fi.po vim73/src/po/fi.po
+--- vim73.orig/src/po/fi.po	2010-08-13 13:57:05.000000000 +0000
++++ vim73/src/po/fi.po	2013-06-07 17:07:33.785578866 +0000
+@@ -367,7 +367,7 @@
+ 
+ #, c-format
+ msgid "E121: Undefined variable: %s"
+-msgstr "E121: Määrittelemätön muuttuja %s"
++msgstr "E121: Määrittelemätön muuttuja: %s"
+ 
+ msgid "E111: Missing ']'"
+ msgstr "E111: ] puuttuu"
+@@ -392,7 +392,7 @@
+ 
+ #, c-format
+ msgid "E118: Too many arguments for function: %s"
+-msgstr "E118: Liikaa argumentteja funktiolle %s"
++msgstr "E118: Liikaa argumentteja funktiolle: %s"
+ 
+ #, c-format
+ msgid "E716: Key not present in Dictionary: %s"
+@@ -1266,7 +1266,7 @@
+ 
+ #, c-format
+ msgid "E181: Invalid attribute: %s"
+-msgstr "E181: Virheellinen attribuutti %s"
++msgstr "E181: Virheellinen attribuutti: %s"
+ 
+ msgid "E182: Invalid command name"
+ msgstr "E182: Virheellinen komennon nimi"
+@@ -2167,22 +2167,6 @@
+ msgstr "&Kumoa"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Zap-fontin latause ei onnistu %s"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Ei voi käyttää fonttia %s"
+-
+-# varmaan SIGTERM, ei SIGKILL tms.
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Lähetetään viestiä lapsiprosessien terminoimiseksi.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Ikkunan otsikkoa ei löydy %s"
+ 
+@@ -2236,7 +2220,7 @@
+ 
+ #, c-format
+ msgid "Font0: %s\n"
+-msgstr "Fontti0. %s\n"
++msgstr "Fontti0: %s\n"
+ 
+ #, c-format
+ msgid "Font1: %s\n"
+@@ -2497,7 +2481,7 @@
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+-msgstr "E625: ei voi avata csope-tietokantaa %s"
++msgstr "E625: ei voi avata cscope-tietokantaa: %s"
+ 
+ msgid "E626: cannot get cscope database information"
+ msgstr "E626: ei voi hakea cscope-tietokannan tietoja"
+@@ -4468,9 +4452,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Virheellinen merkki %c fontin nimessä %s"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Virheellinen osfiletype - käytetään Textiä"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Kaksoissignaali, lopetetaan\n"
+ 
+@@ -5347,7 +5328,7 @@
+ 
+ #, c-format
+ msgid "E789: Missing ']': %s"
+-msgstr "E789: ] puuttuu; %s"
++msgstr "E789: ] puuttuu: %s"
+ 
+ #, c-format
+ msgid "E398: Missing '=': %s"
+@@ -6192,11 +6173,11 @@
+ 
+ #, c-format
+ msgid "E475: Invalid argument: %s"
+-msgstr "E475: Virheellinen argumentti %s"
++msgstr "E475: Virheellinen argumentti: %s"
+ 
+ #, c-format
+ msgid "E15: Invalid expression: %s"
+-msgstr "E15: Virheellinen ilmaus %s"
++msgstr "E15: Virheellinen ilmaus: %s"
+ 
+ msgid "E16: Invalid range"
+ msgstr "E16: Virheellinen arvoalue"
+diff -Naur vim73.orig/src/po/fr.po vim73/src/po/fr.po
+--- vim73.orig/src/po/fr.po	2010-08-13 13:57:24.000000000 +0000
++++ vim73/src/po/fr.po	2013-06-07 17:07:33.798912161 +0000
+@@ -6,7 +6,7 @@
+ #  FIRST AUTHOR  DindinX         <David.Odin@bigfoot.com>     2000.
+ # SECOND AUTHOR  Adrien Beau     <version.francaise@free.fr>  2002, 2003.
+ #  THIRD AUTHOR  David Blanchet  <david.blanchet@free.fr>     2006, 2008.
+-# FOURTH AUTHOR  Dominique Pellé <dominique.pelle@gmail.com>  2008, 2010.
++# FOURTH AUTHOR  Dominique Pellé <dominique.pelle@gmail.com>  2008, 2013.
+ #
+ # Latest translation available at:
+ #   http://dominique.pelle.free.fr/vim-fr.php
+@@ -15,10 +15,11 @@
+ msgstr ""
+ "Project-Id-Version: Vim(Français)\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2010-08-06 21:08+0200\n"
+-"PO-Revision-Date: 2010-08-06 21:31+0200\n"
++"POT-Creation-Date: 2013-05-27 04:55+0200\n"
++"PO-Revision-Date: 2013-05-27 10:22+0200\n"
+ "Last-Translator: Dominique Pellé <dominique.pelle@gmail.com>\n"
+ "Language-Team: \n"
++"Language: fr\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=ISO_8859-15\n"
+ "Content-Transfer-Encoding: 8bit\n"
+@@ -45,6 +46,9 @@
+ msgid "[Quickfix List]"
+ msgstr "[Liste Quickfix]"
+ 
++msgid "E855: Autocommands caused command to abort"
++msgstr "E855: Des autocommandes ont causé la terminaison de la commande"
++
+ # AB - Il faut respecter l'esprit plus que la lettre.
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: Aucun tampon ne peut être alloué, Vim doit s'arrêter"
+@@ -201,7 +205,6 @@
+ msgid "Top"
+ msgstr "Haut"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+@@ -353,6 +356,12 @@
+ msgid "Hit end of paragraph"
+ msgstr "Fin du paragraphe"
+ 
++msgid "E839: Completion function changed window"
++msgstr "E839: La fonction de complètement a changé la fenêtre"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: La fonction de complètement a effacé du texte"
++
+ msgid "'dictionary' option is empty"
+ msgstr "L'option 'dictionary' est vide"
+ 
+@@ -634,6 +643,9 @@
+ msgid "E808: Number or Float required"
+ msgstr "E808: Nombre ou Flottant requis"
+ 
++msgid "add() argument"
++msgstr "argument de add()"
++
+ msgid "E699: Too many arguments"
+ msgstr "E699: Trop d'arguments"
+ 
+@@ -650,10 +662,19 @@
+ msgid "&Ok"
+ msgstr "&Ok"
+ 
++msgid "extend() argument"
++msgstr "argument de extend()"
++
+ #, c-format
+ msgid "E737: Key already exists: %s"
+ msgstr "E737: un mappage existe déjà pour %s"
+ 
++msgid "map() argument"
++msgstr "argument de map()"
++
++msgid "filter() argument"
++msgstr "argument de filter()"
++
+ #, c-format
+ msgid "+-%s%3ld lines: "
+ msgstr "+-%s%3ld lignes : "
+@@ -674,6 +695,9 @@
+ msgid "called inputrestore() more often than inputsave()"
+ msgstr "inputrestore() a été appelé plus de fois qu'inputsave()"
+ 
++msgid "insert() argument"
++msgstr "argument de insert()"
++
+ msgid "E786: Range not allowed"
+ msgstr "E786: Les plages ne sont pas autorisées"
+ 
+@@ -702,13 +726,22 @@
+ msgid "E277: Unable to read a server reply"
+ msgstr "E277: Impossible de lire la réponse du serveur"
+ 
++msgid "remove() argument"
++msgstr "argument de remove()"
++
+ msgid "E655: Too many symbolic links (cycle?)"
+ msgstr "E655: Trop de liens symboliques (cycle ?)"
+ 
++msgid "reverse() argument"
++msgstr "argument de reverse()"
++
+ # AB - La version française est meilleure que la version anglaise.
+ msgid "E258: Unable to send to client"
+ msgstr "E258: La réponse n'a pas pu être envoyée au client"
+ 
++msgid "sort() argument"
++msgstr "argument de sort()"
++
+ msgid "E702: Sort compare function failed"
+ msgstr "E702: La fonction de comparaison de sort() a échoué"
+ 
+@@ -742,14 +775,6 @@
+ msgid "E806: using Float as a String"
+ msgstr "E806: Utilisation d'un Flottant comme une Chaîne"
+ 
+-#, c-format
+-msgid "E704: Funcref variable name must start with a capital: %s"
+-msgstr "E704: Le nom d'une Funcref doit commencer par une majuscule : %s"
+-
+-#, c-format
+-msgid "E705: Variable name conflicts with existing function: %s"
+-msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
+-
+ # DB : On doit pouvoir trouver nettement mieux que ça.
+ #, c-format
+ msgid "E706: Variable type mismatch for: %s"
+@@ -760,6 +785,14 @@
+ msgstr "E795: Impossible de supprimer la variable %s"
+ 
+ #, c-format
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: Le nom d'une Funcref doit commencer par une majuscule : %s"
++
++#, c-format
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: Le nom d'une variable entre en conflit avec la fonction %s"
++
++#, c-format
+ msgid "E741: Value is locked: %s"
+ msgstr "E741: La valeur de %s est verrouillée"
+ 
+@@ -784,10 +817,17 @@
+ msgid "E124: Missing '(': %s"
+ msgstr "E124: Il manque '(' après %s"
+ 
++msgid "E862: Cannot use g: here"
++msgstr "E862: Impossible d'utiliser g: ici"
++
+ #, c-format
+ msgid "E125: Illegal argument: %s"
+ msgstr "E125: Argument invalide : %s"
+ 
++#, c-format
++msgid "E853: Duplicate argument name: %s"
++msgstr "E853: Nom d'argument dupliqué : %s"
++
+ msgid "E126: Missing :endfunction"
+ msgstr "E126: Il manque :endfunction"
+ 
+@@ -979,7 +1019,6 @@
+ msgstr "# Ce fichier viminfo a été généré par Vim %s.\n"
+ 
+ # AB - Les deux versions, bien que différentes, se valent.
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+@@ -987,7 +1026,6 @@
+ "# Vous pouvez l'éditer, mais soyez prudent.\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+ msgstr "# 'encoding' dans lequel ce fichier a été écrit\n"
+ 
+@@ -1129,13 +1167,16 @@
+ msgid "Pattern found in every line: %s"
+ msgstr "Motif trouvé dans toutes les lignes : %s"
+ 
++#, c-format
++msgid "Pattern not found: %s"
++msgstr "Motif introuvable: %s"
++
+ # AB - Ne pas traduire le dollar.
+ # AB - Ce message n'est volontairement pas traduit. En effet, il fait partie
+ #      d'un groupe de trois messages dans viminfo, dont deux ne sont pas soumis
+ #      à internationalisation. J'attends que les deux autres messages soient
+ #      traduisibles pour traduire celui-ci.
+ # DB - TODO : Qu'en est-il à présent ?
+-#, c-format
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+@@ -1465,6 +1506,10 @@
+ msgid "E183: User defined commands must start with an uppercase letter"
+ msgstr "E183: Les commandes utilisateur doivent commencer par une majuscule"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr ""
++"E841: Nom réservé, ne peux pas être utilisé pour une commande utilisateur"
++
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+ msgstr "E184: Aucune commande %s définie par l'utilisateur"
+@@ -1483,8 +1528,8 @@
+ msgstr "inconnu"
+ 
+ #, c-format
+-msgid "E185: Cannot find color scheme %s"
+-msgstr "E185: Impossible de trouver le jeu de couleurs %s"
++msgid "E185: Cannot find color scheme '%s'"
++msgstr "E185: Impossible de trouver le jeu de couleurs '%s'"
+ 
+ msgid "Greetings, Vim user!"
+ msgstr "Bienvenue, utilisateur de Vim !"
+@@ -1583,6 +1628,9 @@
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+ msgstr "E498: Aucun nom de fichier :source à substituer à \"<sfile>\""
+ 
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: aucun numéro de ligne à utiliser pour \"<slnum>\""
++
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+ msgstr "E499: Nom de fichier vide pour '%' ou '#', ne marche qu'avec \":p:h\""
+@@ -1752,7 +1800,7 @@
+ msgstr "E199: Fenêtre ou tampon actif effacé"
+ 
+ msgid "E812: Autocommands changed buffer or buffer name"
+-msgstr "E812: Des autocommandes on changé le tampon ou le nom du tampon"
++msgstr "E812: Des autocommandes ont changé le tampon ou le nom du tampon"
+ 
+ msgid "Illegal file name"
+ msgstr "Nom de fichier invalide"
+@@ -1823,6 +1871,9 @@
+ msgid "[converted]"
+ msgstr "[converti]"
+ 
++msgid "[blowfish]"
++msgstr "[blowfish]"
++
+ msgid "[crypted]"
+ msgstr "[chiffré]"
+ 
+@@ -2010,6 +2061,7 @@
+ msgid "%lld characters"
+ msgstr "%lld caractères"
+ 
++#. Explicit typecast avoids warning on Mac OS X 10.6
+ #, c-format
+ msgid "%ld characters"
+ msgstr "%ld caractères"
+@@ -2162,7 +2214,7 @@
+ msgstr "E220: } manquant."
+ 
+ msgid "E490: No fold found"
+-msgstr "E490: Aucune repli trouvé"
++msgstr "E490: Aucun repli trouvé"
+ 
+ msgid "E350: Cannot create fold with current 'foldmethod'"
+ msgstr "E350: Impossible de créer un repli avec la 'foldmethod'e actuelle"
+@@ -2205,6 +2257,15 @@
+ msgid "E228: makemap: Illegal mode"
+ msgstr "E228: makemap : mode invalide"
+ 
++msgid "E851: Failed to create a new process for the GUI"
++msgstr ""
++"E851: Échec lors de la création d'un nouveau processus pour l'interface "
++"graphique"
++
++msgid "E852: The child process failed to start the GUI"
++msgstr ""
++"E852: Le processus fils n'a pas réussi à démarrer l'interface graphique"
++
+ msgid "E229: Cannot start the GUI"
+ msgstr "E229: Impossible de démarrer l'interface graphique"
+ 
+@@ -2369,21 +2430,6 @@
+ msgstr "Ann&uler"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Impossible de charger la police Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Impossible d'utiliser la police %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Envoi d'un message pour interrompre le processus fils.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Titre de fenêtre \"%s\" introuvable"
+ 
+@@ -2703,7 +2749,7 @@
+ "       g: Find this definition\n"
+ "       i: Find files #including this file\n"
+ "       s: Find this C symbol\n"
+-"       t: Find assignments to\n"
++"       t: Find this text string\n"
+ msgstr ""
+ "\n"
+ "       c: Trouver les fonctions appelant cette fonction\n"
+@@ -2713,7 +2759,7 @@
+ "       g: Trouver cette définition\n"
+ "       i: Trouver les fichiers qui #incluent ce fichier\n"
+ "       s: Trouver ce symbole C\n"
+-"       t: Trouver les affectations à\n"
++"       t: Trouver cette chaîne\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2809,6 +2855,9 @@
+ msgid "string cannot contain newlines"
+ msgstr "une chaîne ne peut pas contenir de saut-de-ligne"
+ 
++msgid "error converting Scheme values to Vim"
++msgstr "erreur lors de la conversion d'une valeur de Scheme à Vim"
++
+ msgid "Vim error: ~a"
+ msgstr "Erreur Vim : ~a"
+ 
+@@ -2828,10 +2877,10 @@
+ msgstr "non autorisé dans le bac à sable"
+ 
+ msgid "E836: This Vim cannot execute :python after using :py3"
+-msgstr "E836: Python : impossible d'utiliser :py et :py3 dans la même session"
++msgstr "E836: Vim ne peut pas exécuter :python après avoir utilisé :py3"
+ 
+-msgid "E837: This Vim cannot execute :py3 after using :python"
+-msgstr "E837: Python : impossible d'utiliser :py et :py3 dans la même session"
++msgid "only string keys are allowed"
++msgstr "seule une chaine est autorisée comme clé"
+ 
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+@@ -2843,18 +2892,11 @@
+ msgid "E659: Cannot invoke Python recursively"
+ msgstr "E659: Impossible d'invoquer Python récursivement"
+ 
+-msgid "can't delete OutputObject attributes"
+-msgstr "impossible d'effacer les attributs d'OutputObject"
+-
+-msgid "softspace must be an integer"
+-msgstr "softspace doit être un nombre entier"
+-
+-msgid "invalid attribute"
+-msgstr "attribut invalide"
++msgid "E837: This Vim cannot execute :py3 after using :python"
++msgstr "E837: Vim ne peut pas exécuter :py3 après avoir utilisé :python"
+ 
+-#, c-format
+-msgid "<buffer object (deleted) at %p>"
+-msgstr "<objet tampon (effacé) à %p>"
++msgid "index must be int or slice"
++msgstr "index doit être int ou slice"
+ 
+ msgid "E265: $_ must be an instance of String"
+ msgstr "E265: $_ doit être une instance de chaîne (String)"
+@@ -3044,11 +3086,6 @@
+ "E571: Désolé, commande désactivée: la bibliothèque Tcl n'a pas pu être "
+ "chargée."
+ 
+-msgid ""
+-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+-msgstr ""
+-"E281: ERREUR TCL: code de sortie non entier ?! Contactez vim-dev@vim.org, SVP"
+-
+ #, c-format
+ msgid "E572: exit code %d"
+ msgstr "E572: code de sortie %d"
+@@ -3131,7 +3168,7 @@
+ "More info with: \"vim -h\"\n"
+ msgstr ""
+ "\n"
+-"Plus d'info avec: \"vim -h\"\n"
++"Plus d'info avec : \"vim -h\"\n"
+ 
+ msgid "[file ..]       edit specified file(s)"
+ msgstr "[fichier ...]  ouvrir le ou les fichiers spécifiés"
+@@ -3208,6 +3245,9 @@
+ msgid "-e\t\t\tEx mode (like \"ex\")"
+ msgstr "-e\t\tMode Ex (comme \"ex\")"
+ 
++msgid "-E\t\t\tImproved Ex mode"
++msgstr "-E\t\t\tMode Ex amélioré"
++
+ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+ msgstr "-s\t\tMode silencieux (batch) (seulement pour \"ex\")"
+ 
+@@ -3408,12 +3448,6 @@
+ msgid "-iconic\t\tStart vim iconified"
+ msgstr "-iconic\t\tIconifier Vim au démarrage"
+ 
+-msgid "-name <name>\t\tUse resource as if vim was <name>"
+-msgstr "-name <nom>\t\tEmployer les ressources comme si Vim s'appelait <nom>"
+-
+-msgid "\t\t\t  (Unimplemented)\n"
+-msgstr "\t\t\t  (non implémenté)\n"
+-
+ msgid "-background <color>\tUse <color> for the background (also: -bg)"
+ msgstr ""
+ "-background <coul>\tUtiliser <couleur> pour l'arrière-plan\t   (abrv : -bg)"
+@@ -3456,19 +3490,6 @@
+ 
+ msgid ""
+ "\n"
+-"Arguments recognised by gvim (RISC OS version):\n"
+-msgstr ""
+-"\n"
+-"Arguments reconnus par gvim (version RISC OS) :\n"
+-
+-msgid "--columns <number>\tInitial width of window in columns"
+-msgstr "--columns <nombre>\tNombre de colonnes initial de la fenêtre"
+-
+-msgid "--rows <number>\tInitial height of window in rows"
+-msgstr "--rows <nombre>\tNombre de lignes initial de la fenêtre"
+-
+-msgid ""
+-"\n"
+ "Arguments recognised by gvim (GTK+ version):\n"
+ msgstr ""
+ "\n"
+@@ -3484,6 +3505,9 @@
+ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+ msgstr "--socketid <xid>\tOuvrir Vim dans un autre widget GTK"
+ 
++msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++msgstr "--echo-wid\t\tGvim affiche l'ID de la fenêtre sur stdout"
++
+ msgid "-P <parent title>\tOpen Vim inside parent application"
+ msgstr "-P <titre parent>\tOuvrir Vim dans une application parente"
+ 
+@@ -3542,7 +3566,6 @@
+ "\n"
+ "modif  ligne col fichier/texte"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+@@ -3551,7 +3574,6 @@
+ "# Marques dans le fichier :\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+@@ -3559,7 +3581,6 @@
+ "\n"
+ "# Liste de sauts (le plus récent en premier) :\n"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+@@ -3621,6 +3642,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: Bloc n°2 non récupéré ?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: Erreur lors de la mise à jour du fichier d'échange crypté"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: Oups, le fichier d'échange a disparu !"
+@@ -3984,24 +4008,20 @@
+ #. * other languages.
+ msgid ""
+ "\n"
+-"(1) Another program may be editing the same file.\n"
+-"    If this is the case, be careful not to end up with two\n"
+-"    different instances of the same file when making changes.\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
+ msgstr ""
+ "\n"
+ "(1) Un autre programme est peut-être en train d'éditer ce fichier.\n"
+ "    Si c'est le cas, faites attention à ne pas vous retrouver avec\n"
+-"    deux version différentes du même fichier en faisant des modifications.\n"
++"    deux versions différentes du même fichier en faisant des modifications."
+ 
+-msgid "    Quit, or continue with caution.\n"
+-msgstr "    Quittez, ou continuez prudemment.\n"
++msgid "  Quit, or continue with caution.\n"
++msgstr "  Quittez, ou continuez prudemment.\n"
+ 
+-msgid ""
+-"\n"
+-"(2) An edit session for this file crashed.\n"
+-msgstr ""
+-"\n"
+-"(2) Une session d'édition de ce fichier a planté.\n"
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) Une session d'édition de ce fichier a planté.\n"
+ 
+ msgid "    If this is the case, use \":recover\" or \"vim -r "
+ msgstr "    Si c'est le cas, utilisez \":recover\" ou \"vim -r "
+@@ -4236,7 +4256,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "Vim : Fini.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "ERREUR : "
+ 
+@@ -4295,6 +4314,9 @@
+ msgid "Keys don't match!"
+ msgstr "Les clés ne correspondent pas !"
+ 
++msgid "E854: path too long for completion"
++msgstr "E854: chemin trop long pour complètement"
++
+ #, c-format
+ msgid ""
+ "E343: Invalid path: '**[number]' must be at the end of the path or be "
+@@ -4339,11 +4361,15 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: Connexion NetBeans perdue pour le tampon %ld"
+ 
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: netbeans n'est pas supporté avec cette interface graphique"
++
+ msgid "E511: netbeans already connected"
+ msgstr "E511: netbeans déjà connecté"
+ 
+-msgid "E505: "
+-msgstr "E505: "
++#, c-format
++msgid "E505: %s is read-only (add ! to override)"
++msgstr "E505: %s est en lecture seule (ajoutez ! pour passer outre)"
+ 
+ msgid "E349: No identifier under cursor"
+ msgstr "E349: Aucun identifiant sous le curseur"
+@@ -4476,8 +4502,8 @@
+ "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+ "Bytes"
+ msgstr ""
+-"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; %ld sur %"
+-"ld octets sélectionnés"
++"%s%ld sur %ld Lignes ; %ld sur %ld Mots ; %ld sur %ld Caractères ; %ld sur "
++"%ld octets sélectionnés"
+ 
+ #, c-format
+ msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+@@ -4489,8 +4515,8 @@
+ "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+ "%ld"
+ msgstr ""
+-"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractère %ld sur %"
+-"ld ; Octet %ld sur %ld"
++"Colonne %s sur %s ; Ligne %ld sur %ld ; Mot %ld sur %ld ; Caractère %ld sur "
++"%ld ; Octet %ld sur %ld"
+ 
+ #, c-format
+ msgid "(+%ld for BOM)"
+@@ -4511,6 +4537,9 @@
+ msgid "E520: Not allowed in a modeline"
+ msgstr "E520: Non autorisé dans une ligne de mode"
+ 
++msgid "E846: Key code not set"
++msgstr "E846: Le code de touche n'est pas configuré"
++
+ msgid "E521: Number required after ="
+ msgstr "E521: Nombre requis après ="
+ 
+@@ -4748,9 +4777,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Caractère '%c' invalide dans le nom de fonte \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Option 'osfiletype' invalide - Text est utilisé"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim : Double signal, sortie\n"
+ 
+@@ -4975,18 +5001,9 @@
+ msgid "E369: invalid item in %s%%[]"
+ msgstr "E369: élément invalide dans %s%%[]"
+ 
+-msgid "E339: Pattern too long"
+-msgstr "E339: Motif trop long"
+-
+-msgid "E50: Too many \\z("
+-msgstr "E50: Trop de \\z("
+-
+ #, c-format
+-msgid "E51: Too many %s("
+-msgstr "E51: Trop de %s("
+-
+-msgid "E52: Unmatched \\z("
+-msgstr "E52: Pas de correspondance pour \\z("
++msgid "E769: Missing ] after %s["
++msgstr "E769: ']' manquant après %s["
+ 
+ #, c-format
+ msgid "E53: Unmatched %s%%("
+@@ -5000,6 +5017,19 @@
+ msgid "E55: Unmatched %s)"
+ msgstr "E55: %s) fermante non ouverte"
+ 
++msgid "E339: Pattern too long"
++msgstr "E339: Motif trop long"
++
++msgid "E50: Too many \\z("
++msgstr "E50: Trop de \\z("
++
++#, c-format
++msgid "E51: Too many %s("
++msgstr "E51: Trop de %s("
++
++msgid "E52: Unmatched \\z("
++msgstr "E52: Pas de correspondance pour \\z("
++
+ #, c-format
+ msgid "E59: invalid character after %s@"
+ msgstr "E59: caractère invalide après %s@"
+@@ -5052,16 +5082,89 @@
+ msgstr "E71: Caractère invalide après %s%%"
+ 
+ #, c-format
+-msgid "E769: Missing ] after %s["
+-msgstr "E769: ']' manquant après %s["
+-
+-#, c-format
+ msgid "E554: Syntax error in %s{...}"
+ msgstr "E554: Erreur de syntaxe dans %s{...}"
+ 
+ msgid "External submatches:\n"
+ msgstr "Sous-correspondances externes :\n"
+ 
++msgid ""
++"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
++"used "
++msgstr ""
++"E864: \\%#= peut être suivi uniquement de 0, 1 ou 2. Le moteur automatique "
++"sera utilisé "
++
++#, c-format
++msgid "E866: (NFA regexp) Misplaced %c"
++msgstr "E866: (regexp NFA) %c au mauvais endroit"
++
++msgid "E865: (NFA) Regexp end encountered prematurely"
++msgstr "E865: (NFA) Fin de regexp rencontrée prématurément"
++
++#, c-format
++msgid "E867: (NFA) Unknown operator '\\z%c'"
++msgstr "E867: (NFA) Opérateur inconnu '\\z%c'"
++
++#. should never happen
++msgid "E868: Error building NFA with equivalence class!"
++msgstr "E868: Erreur lors de la construction du NFA avec classe d'équivalence"
++
++#, c-format
++msgid "E869: (NFA) Unknown operator '\\@%c'"
++msgstr "E869: (NFA) Opérateur inconnu '\\@%c'"
++
++msgid "E870: (NFA regexp) Error reading repetition limits"
++msgstr "E870: (regexp NFA) Erreur à la lecture des limites de répétition"
++
++msgid "E871: (NFA regexp) Can't have a multi follow a multi !"
++msgstr "E871: (regexp NFA) Un multi ne peut pas suivre un multi !"
++
++msgid "E872: (NFA regexp) Too many '('"
++msgstr "E872: (regexp NFA) Trop de '('"
++
++msgid "E873: (NFA regexp) proper termination error"
++msgstr "E873: (NFA regexp) erreur de terminaison"
++
++msgid "E874: (NFA) Could not pop the stack !"
++msgstr "E874: (NFA) Impossible de dépiler !"
++
++msgid ""
++"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
++"left on stack"
++msgstr ""
++"E875: (regexp NFA) (lors de la conversion de postfix à NFA), il reste trop "
++"d'états sur la pile"
++
++msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
++msgstr "E876: (regexp NFA) Pas assez de mémoire pour stocker le NFA"
++
++msgid "E999: (NFA regexp internal error) Should not process NOT node !"
++msgstr ""
++"E999: (erreur interne du regexp NFA) Un noeud 'NOT' ne devrait pas être "
++"traité !"
++
++#. should not be here :P
++msgid "E877: (NFA regexp) Invalid character class "
++msgstr "E877: (regexp NFA) Classe de caractère invalide "
++
++#, c-format
++msgid "(NFA) COULD NOT OPEN %s !"
++msgstr "(NFA) IMPOSSIBLE D'OUVRIR %s !"
++
++msgid ""
++"Could not open temporary log file for writing, displaying on stderr ... "
++msgstr ""
++"Impossible d'ouvrir le fichier de log temporaire en écriture, affichage sur "
++"stderr ... "
++
++msgid "E878: (NFA) Could not allocate memory for branch traversal!"
++msgstr ""
++"E878: (NFA) Impossible d'allouer la mémoire pour parcourir les branches!"
++
++msgid "Could not open temporary log file for writing "
++msgstr "Impossible d'ouvrir le fichier de log en écriture"
++
+ msgid " VREPLACE"
+ msgstr " VREMPLACEMENT"
+ 
+@@ -5166,7 +5269,7 @@
+ msgstr "Tous les fichiers inclus ont été trouvés"
+ 
+ msgid "No included files"
+-msgstr "Aucun fichiers inclus"
++msgstr "Aucun fichier inclus"
+ 
+ msgid "E388: Couldn't find definition"
+ msgstr "E388: Impossible de trouver la définition"
+@@ -5214,6 +5317,10 @@
+ msgstr "E756: La vérification orthographique n'est pas activée"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr "Alerte : Liste de mots \"%s_%s.spl\" ou \"%s_ascii.spl\" introuvable"
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr "Alerte : Liste de mots \"%s.%s.spl\" ou \"%s.ascii.spl\" introuvable"
+ 
+@@ -5235,7 +5342,7 @@
+ 
+ #, c-format
+ msgid "Warning: region %s not supported"
+-msgstr "Alerte : region %s non supportée"
++msgstr "Alerte : région %s non supportée"
+ 
+ #, c-format
+ msgid "Reading affix file %s ..."
+@@ -5306,7 +5413,7 @@
+ 
+ #, c-format
+ msgid "Duplicate affix in %s line %d: %s"
+-msgstr "Affixe dupliquée dans %s ligne %d : %s"
++msgstr "Affixe dupliqué dans %s ligne %d : %s"
+ 
+ #, c-format
+ msgid ""
+@@ -5441,6 +5548,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "%d mot(s) ignoré(s) avec des caractères non-ASCII"
+ 
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: mémoire insuffisante, liste de mots peut-être incomplète"
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "%d noeuds compressés sur %d ; %d (%d%%) restants "
+@@ -5506,7 +5616,7 @@
+ 
+ msgid "E763: Word characters differ between spell files"
+ msgstr ""
+-"E763: Les caractères de mots diffèrent entre les fichier orthographiques"
++"E763: Les caractères de mots diffèrent entre les fichiers orthographiques"
+ 
+ msgid "Sorry, no suggestions"
+ msgstr "Désolé, aucune suggestion"
+@@ -5624,8 +5734,8 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: L'argument « contains » n'est pas accepté ici"
+ 
+-msgid "E396: containedin argument not accepted here"
+-msgstr "E396: L'argument « containedin » n'est pas accepté ici"
++msgid "E844: invalid cchar value"
++msgstr "E844: valeur de cchar invalide"
+ 
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: L'argument « group[t]here » n'est pas accepté ici"
+@@ -5637,6 +5747,9 @@
+ msgid "E397: Filename required"
+ msgstr "E397: Nom de fichier requis"
+ 
++msgid "E847: Too many syntax includes"
++msgstr "E847: Trop d'inclusions de syntaxe"
++
+ #, c-format
+ msgid "E789: Missing ']': %s"
+ msgstr "E789: ']' manquant : %s"
+@@ -5649,6 +5762,9 @@
+ msgid "E399: Not enough arguments: syntax region %s"
+ msgstr "E399: Pas assez d'arguments : syntax region %s"
+ 
++msgid "E848: Too many syntax clusters"
++msgstr "E848: Trop de grappes de syntaxe"
++
+ msgid "E400: No cluster specified"
+ msgstr "E400: Aucune grappe spécifiée"
+ 
+@@ -5754,6 +5870,9 @@
+ msgid "W18: Invalid character in group name"
+ msgstr "W18: Caractère invalide dans un nom de groupe"
+ 
++msgid "E849: Too many highlight and syntax groups"
++msgstr "E849: Trop de groupes de surbrillance et de syntaxe"
++
+ msgid "E555: at bottom of tag stack"
+ msgstr "E555: En bas de la pile de marqueurs"
+ 
+@@ -5814,6 +5933,9 @@
+ msgid "E430: Tag file path truncated for %s\n"
+ msgstr "E430: Chemin de fichiers de marqueurs tronqué pour %s\n"
+ 
++msgid "Ignoring long line in tags file"
++msgstr "Ignore longue ligne dans le fichier de marqueurs"
++
+ #, c-format
+ msgid "E431: Format error in tags file \"%s\""
+ msgstr "E431: Erreur de format dans le fichier de marqueurs \"%s\""
+@@ -5830,9 +5952,6 @@
+ msgid "E433: No tags file"
+ msgstr "E433: Aucun fichier de marqueurs"
+ 
+-msgid "Ignoring long line in tags file"
+-msgstr "Ignore longue ligne dans le fichier de marqueurs"
+-
+ msgid "E434: Can't find tag pattern"
+ msgstr "E434: Le motif de marqueur est introuvable"
+ 
+@@ -5909,7 +6028,7 @@
+ 
+ #, c-format
+ msgid "Will not overwrite with undo file, cannot read: %s"
+-msgstr "Le fichier d'annulations de sera pas écrasé, impossible de lire : %s"
++msgstr "Le fichier d'annulations ne sera pas écrasé, impossible de lire : %s"
+ 
+ #, c-format
+ msgid "Will not overwrite, this is not an undo file: %s"
+@@ -6012,8 +6131,8 @@
+ msgstr "Rien à annuler"
+ 
+ # DB - Les deux premières colonnes sont alignées à droite.
+-msgid "number changes  time            saved"
+-msgstr "numéro  modif.  instant         enregistré"
++msgid "number changes  when               saved"
++msgstr "numéro modif.   instant            enregistré"
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+@@ -6114,13 +6233,6 @@
+ 
+ msgid ""
+ "\n"
+-"RISC OS version"
+-msgstr ""
+-"\n"
+-"Version RISC OS"
+-
+-msgid ""
+-"\n"
+ "OpenVMS version"
+ msgstr ""
+ "\n"
+@@ -6772,6 +6884,9 @@
+ msgid "E764: Option '%s' is not set"
+ msgstr "E764: L'option '%s' n'est pas activée"
+ 
++msgid "E850: Invalid register name"
++msgstr "E850: Nom de registre invalide"
++
+ msgid "search hit TOP, continuing at BOTTOM"
+ msgstr "La recherche a atteint le HAUT, et continue en BAS"
+ 
+@@ -6782,14 +6897,110 @@
+ msgid "Need encryption key for \"%s\""
+ msgstr "Besoin de la clé de chiffrement pour \"%s\""
+ 
++msgid "can't delete OutputObject attributes"
++msgstr "impossible d'effacer les attributs d'OutputObject"
++
++msgid "softspace must be an integer"
++msgstr "softspace doit être un nombre entier"
++
++msgid "invalid attribute"
++msgstr "attribut invalide"
++
+ msgid "writelines() requires list of strings"
+ msgstr "writelines() requiert une liste de chaînes"
+ 
+ msgid "E264: Python: Error initialising I/O objects"
+ msgstr "E264: Python : Erreur d'initialisation des objets d'E/S"
+ 
+-msgid "no such buffer"
+-msgstr "Ce tampon n'existe pas"
++msgid "empty keys are not allowed"
++msgstr "les clés vides ne sont pas autorisées"
++
++msgid "Cannot delete DictionaryObject attributes"
++msgstr "Impossible d'effacer les attributs de DictionaryObject"
++
++msgid "Cannot modify fixed dictionary"
++msgstr "Impossible de modifier un dictionnaire fixe"
++
++msgid "Cannot set this attribute"
++msgstr "Impossible d'initialiser cet attribut"
++
++msgid "dict is locked"
++msgstr "dictionnaire est verrouillé"
++
++msgid "failed to add key to dictionary"
++msgstr "l'ajout de clé au dictionnaire a échoué"
++
++msgid "list index out of range"
++msgstr "index de liste hors limites"
++
++msgid "internal error: failed to get vim list item"
++msgstr "erreur interne : accès à un élément de liste a échoué"
++
++msgid "list is locked"
++msgstr "liste verrouillée"
++
++msgid "Failed to add item to list"
++msgstr "Ajout à la liste a échoué"
++
++msgid "internal error: no vim list item"
++msgstr "erreur interne : pas d'élément de liste vim"
++
++msgid "can only assign lists to slice"
++msgstr "seules des tranches peuvent être assignées aux listes"
++
++msgid "internal error: failed to add item to list"
++msgstr "erreur interne : ajout d'élément à la liste a échoué"
++
++msgid "can only concatenate with lists"
++msgstr "on ne peut que concaténer avec des listes"
++
++msgid "cannot delete vim.dictionary attributes"
++msgstr "impossible d'effacer les attributs de vim.dictionary"
++
++msgid "cannot modify fixed list"
++msgstr "impossible de modifier une liste fixe"
++
++msgid "cannot set this attribute"
++msgstr "impossible d'initialiser cet attribut"
++
++msgid "'self' argument must be a dictionary"
++msgstr "l'argument 'self' doit être un dictionnaire"
++
++msgid "failed to run function"
++msgstr "exécution de la fonction a échoué"
++
++msgid "unable to get option value"
++msgstr "impossible d'obtenir la valeur d'une option"
++
++msgid "unable to unset global option"
++msgstr "impossible de désactiver une option globale"
++
++msgid "unable to unset option without global value"
++msgstr "impossible de désactiver une option sans une valeur globale"
++
++msgid "object must be integer"
++msgstr "objet doit être un nombre entier"
++
++msgid "object must be string"
++msgstr "objet doit être de type string"
++
++msgid "attempt to refer to deleted tab page"
++msgstr "tentative de référencer un onglet effacé"
++
++#, c-format
++msgid "<tabpage object (deleted) at %p>"
++msgstr "<objet onglet (effacé) à %p>"
++
++#, c-format
++msgid "<tabpage object (unknown) at %p>"
++msgstr "<objet onglet (inconnu) à %p>"
++
++#, c-format
++msgid "<tabpage %d>"
++msgstr "<onglet %d>"
++
++msgid "no such tab page"
++msgstr "cet onglet n'existe pas"
+ 
+ msgid "attempt to refer to deleted window"
+ msgstr "tentative de référencer une fenêtre effacée"
+@@ -6817,3 +7028,64 @@
+ 
+ msgid "attempt to refer to deleted buffer"
+ msgstr "tentative de référencer un tampon effacé"
++
++#, c-format
++msgid "<buffer object (deleted) at %p>"
++msgstr "<objet tampon (effacé) à %p>"
++
++msgid "key must be integer"
++msgstr "la clé doit être un nombre entier"
++
++msgid "expected vim.buffer object"
++msgstr "objet vim.buffer attendu"
++
++msgid "failed to switch to given buffer"
++msgstr "impossible de se déplacer au tampon donné"
++
++msgid "expected vim.window object"
++msgstr "objet vim.window attendu"
++
++msgid "failed to find window in the current tab page"
++msgstr "impossible de trouver une fenêtre dans l'onglet courant"
++
++msgid "did not switch to the specified window"
++msgstr "ne s'est pas déplacé à la fenêtre spécifiée"
++
++msgid "expected vim.tabpage object"
++msgstr "objet vim.tabpage attendu"
++
++msgid "did not switch to the specified tab page"
++msgstr "impossible de se déplacer à l'onglet spécifié"
++
++msgid "failed to run the code"
++msgstr "exécution du code a échoué"
++
++msgid "E858: Eval did not return a valid python object"
++msgstr "E858: Eval n'a pas retourné un objet python valide"
++
++msgid "E859: Failed to convert returned python object to vim value"
++msgstr "E859: Conversion d'objet python à une valeur de vim a échoué"
++
++msgid "unable to convert to vim structure"
++msgstr "conversion à une structure vim impossible"
++
++msgid "NULL reference passed"
++msgstr "référence NULL passée"
++
++msgid "internal error: invalid value type"
++msgstr "erreur interne : type de valeur invalide"
++
++#~ msgid "E860: Eval did not return a valid python 3 object"
++#~ msgstr "E860: Eval n'a pas retourné un object python 3 valid"
++
++#~ msgid "E861: Failed to convert returned python 3 object to vim value"
++#~ msgstr "E861: Conversion d'objet python 3 à une valeur de vim a échoué"
++
++#~ msgid "E863: return value must be an instance of str"
++#~ msgstr "E863: valeur de retour doit être une instance de Str"
++
++#~ msgid "Only boolean objects are allowed"
++#~ msgstr "Seuls les objets booléens sont autorisés"
++
++#~ msgid "no such key in dictionary"
++#~ msgstr "cette clé est inexistante dans le dictionnaire"
+diff -Naur vim73.orig/src/po/ga.po vim73/src/po/ga.po
+--- vim73.orig/src/po/ga.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/ga.po	2013-06-07 17:07:33.812245457 +0000
+@@ -2141,21 +2141,6 @@
+ msgstr "&Cealaigh"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Ní féidir an chlófhoireann Zap '%s' a luchtú"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Ní féidir an chlófhoireann %s a úsáid"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Ag seoladh teachtaireachta chun an macphróiseas a stopadh.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Ní féidir teideal na fuinneoige \"%s\" a aimsiú"
+ 
+@@ -4476,9 +4461,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Carachtar neamhcheadaithe '%c' mar pháirt d'ainm cló \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Rogha neamhbhailí 'osfiletype' - ag baint úsáid as `Text'"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Comhartha dúbailte, ag scor\n"
+ 
+diff -Naur vim73.orig/src/po/it.po vim73/src/po/it.po
+--- vim73.orig/src/po/it.po	2010-08-13 13:57:44.000000000 +0000
++++ vim73/src/po/it.po	2013-06-07 17:07:33.872245285 +0000
+@@ -13,8 +13,8 @@
+ msgstr ""
+ "Project-Id-Version: vim 7.3\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2010-08-09 12:53+0200\n"
+-"PO-Revision-Date:  2010-08-09 21:00+0200\n"
++"POT-Creation-Date: 2011-03-10 11:10+0100\n"
++"PO-Revision-Date:  2011-03-12 07:08+0100\n"
+ "Last-Translator:   Vlad Sandrini   <vlad.gently@gmail.com>\n"
+ "Language-Team:     Italian"
+ "                   Antonio Colombo <azc100@gmail.com>"
+@@ -303,6 +303,12 @@
+ msgid "Hit end of paragraph"
+ msgstr "Giunto alla fine del paragrafo"
+ 
++msgid "E839: Completion function changed window"
++msgstr "E839: La funzione di completamento ha modificato la finestra"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: La funzione di completamento ha eliminato del testo"
++
+ msgid "'dictionary' option is empty"
+ msgstr "l'opzione 'dictionary' non è impostata"
+ 
+@@ -1271,6 +1277,9 @@
+ msgstr ""
+ "E183: I comandi definiti dall'utente devono iniziare con lettera maiuscola"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: Nome riservato, non usabile in un comando definito dall'utente"
++
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+ msgstr "E184: Comando definito dall'utente %s inesistente"
+@@ -1395,6 +1404,9 @@
+ msgstr ""
+ "E498: nessun nome di file :source trovato da sostituire per \"<sfile>\""
+ 
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: nessun numero di riga da usare per \"<slnum>\""
++
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+ msgstr "E499: Un nome di file nullo per '%' o '#', va bene solo con \":p:h\""
+@@ -1626,6 +1638,9 @@
+ msgid "[converted]"
+ msgstr "[convertito]"
+ 
++msgid "[blowfish]"
++msgstr "[blowfish]"
++
+ msgid "[crypted]"
+ msgstr "[cifrato]"
+ 
+@@ -2167,21 +2182,6 @@
+ msgstr "&U Disfa"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Non riesco a caricare il font Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Non riesco a usare il font %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Spedisco un messaggio per terminare il processo figlio.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Non trovo il titolo della finestra \"%s\""
+ 
+@@ -2307,7 +2307,6 @@
+ msgid "No text to be printed"
+ msgstr "Manca testo da stampare"
+ 
+-#, c-format
+ msgid "Printing page %d (%d%%)"
+ msgstr "Sto stampando pagina %d (%d%%)"
+ 
+@@ -2482,7 +2481,7 @@
+ "       g: Find this definition\n"
+ "       i: Find files #including this file\n"
+ "       s: Find this C symbol\n"
+-"       t: Find assignments to\n"
++"       t: Find this text string\n"
+ msgstr ""
+ "\n"
+ "       c: Trova funzioni che chiamano questa\n"
+@@ -2492,7 +2491,7 @@
+ "       g: Trova questa definizione\n"
+ "       i: Trova file che #includono questo file\n"
+ "       s: Trova questo simbolo C\n"
+-"       t: Trova assegnazioni a\n"
++"       t: Trova questa stringa\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2608,7 +2607,7 @@
+ msgstr "E836: Python: Impossibile usare :py e :py3 nella stessa sessione"
+ 
+ msgid "E837: This Vim cannot execute :py3 after using :python"
+-msgstr "E837: Python: Impossibile usare :py e :py3 nella stessa sessione"
++msgstr "E837: Impossibile usare ora :py3 dopo aver usato :python"
+ 
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+@@ -3207,12 +3206,6 @@
+ msgid "-iconic\t\tStart vim iconified"
+ msgstr "-iconic\t\tInizia vim riducendolo ad icona"
+ 
+-msgid "-name <name>\t\tUse resource as if vim was <name>"
+-msgstr "-name <nome>\t\tUsa risorsa come se vim fosse <nome>"
+-
+-msgid "\t\t\t  (Unimplemented)\n"
+-msgstr "\t\t\t  (Non implementato)\n"
+-
+ msgid "-background <color>\tUse <color> for the background (also: -bg)"
+ msgstr "-background <colore>\tUsa <colore> come sfondo (anche: -bg)"
+ 
+@@ -3415,6 +3408,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: Non riesco a leggere blocco numero 2?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: Errore aggiornando cifratura dello swap file"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: Ahimè, lo swap file è perduto!!!"
+@@ -3518,7 +3514,7 @@
+ "If you wrote the text file after changing the crypt key press enter"
+ msgstr ""
+ "\n"
+-"Se hai riscritto il file dopo aver cambio chiave di cifr., premi Invio"
++"Se hai riscritto il file dopo aver cambiato chiave di cifr., premi Invio"
+ 
+ msgid ""
+ "\n"
+@@ -3773,24 +3769,20 @@
+ #. * other languages.
+ msgid ""
+ "\n"
+-"(1) Another program may be editing the same file.\n"
+-"    If this is the case, be careful not to end up with two\n"
+-"    different instances of the same file when making changes.\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
+ msgstr ""
+ "\n"
+ "(1) Un altro programma può essere in edit sullo stesso file.\n"
+ "    Se è così, attenzione a non trovarti con due versioni\n"
+-"    differenti dello stesso file a cui vengono apportate modifiche.\n"
++"    differenti dello stesso file a cui vengono apportate modifiche."
+ 
+-msgid "    Quit, or continue with caution.\n"
+-msgstr "    Esci, o continua con prudenza.\n"
++msgid "  Quit, or continue with caution.\n"
++msgstr "  Esci, o continua con prudenza.\n"
+ 
+-msgid ""
+-"\n"
+-"(2) An edit session for this file crashed.\n"
+-msgstr ""
+-"\n"
+-"(2) Una sessione di edit per questo file è finita male.\n"
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) Una sessione di edit per questo file è finita male.\n"
+ 
+ msgid "    If this is the case, use \":recover\" or \"vim -r "
+ msgstr "    Se è così, usa \":recover\" oppure \"vim -r "
+@@ -4022,7 +4014,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "Vim: Finito.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "ERRORE: "
+ 
+@@ -4123,6 +4114,9 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: Connessione NetBeans persa per il buffer %ld"
+ 
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: netbeans non è supportato con questa GUI"
++
+ msgid "E511: netbeans already connected"
+ msgstr "E511: netbeans già connesso"
+ 
+@@ -4524,9 +4518,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Carattere non ammesso '%c' nel font di nome \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Opzione 'osfiletype' non valida - uso 'Text'"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Segnale doppio, esco\n"
+ 
+@@ -4534,7 +4525,6 @@
+ msgid "Vim: Caught deadly signal %s\n"
+ msgstr "Vim: Intercettato segnale fatale %s\n"
+ 
+-#, c-format
+ msgid "Vim: Caught deadly signal\n"
+ msgstr "Vim: Intercettato segnale fatale\n"
+ 
+@@ -4678,26 +4668,21 @@
+ msgid "Vim Warning"
+ msgstr "Avviso da Vim"
+ 
+-#, c-format
+ msgid "E372: Too many %%%c in format string"
+ msgstr "E372: Troppi %%%c nella stringa di 'format'"
+ 
+-#, c-format
+ msgid "E373: Unexpected %%%c in format string"
+ msgstr "E373: %%%c imprevisto nella stringa di 'format'"
+ 
+ msgid "E374: Missing ] in format string"
+ msgstr "E374: Manca ] nella stringa di 'format'"
+ 
+-#, c-format
+ msgid "E375: Unsupported %%%c in format string"
+ msgstr "E375: %%%c non supportato nella stringa di 'format'"
+ 
+-#, c-format
+ msgid "E376: Invalid %%%c in format string prefix"
+ msgstr "E376: %%%c non valido nel prefisso della stringa di 'format'"
+ 
+-#, c-format
+ msgid "E377: Invalid %%%c in format string"
+ msgstr "E377: %%%c non valido nella stringa di 'format'"
+ 
+@@ -4746,10 +4731,6 @@
+ msgid "E777: String or List expected"
+ msgstr "E777: aspettavo Stringa o Lista"
+ 
+-#, c-format
+-msgid "E369: invalid item in %s%%[]"
+-msgstr "E369: elemento non valido in %s%%[]"
+-
+ msgid "E339: Pattern too long"
+ msgstr "E339: Espressione troppo lunga"
+ 
+@@ -4763,7 +4744,6 @@
+ msgid "E52: Unmatched \\z("
+ msgstr "E52: Senza riscontro: \\z("
+ 
+-#, c-format
+ msgid "E53: Unmatched %s%%("
+ msgstr "E53: Senza riscontro: %s%%("
+ 
+@@ -4810,19 +4790,15 @@
+ msgid "E68: Invalid character after \\z"
+ msgstr "E68: Carattere non ammesso dopo \\z"
+ 
+-#, c-format
+ msgid "E69: Missing ] after %s%%["
+ msgstr "E69: Manca ] dopo %s%%["
+ 
+-#, c-format
+ msgid "E70: Empty %s%%[]"
+ msgstr "E70: %s%%[] vuoto"
+ 
+-#, c-format
+ msgid "E678: Invalid character after %s%%[dxouU]"
+ msgstr "E678: Carattere non valido dopo %s%%[dxouU]"
+ 
+-#, c-format
+ msgid "E71: Invalid character after %s%%"
+ msgstr "E71: Carattere non ammesso dopo %s%%"
+ 
+@@ -4988,6 +4964,10 @@
+ msgstr "E756: Controllo ortografico non abilitato"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr "Attenzione: Non trovo lista parole \"%s_%s.spl\" o \"%s_ascii.spl\""
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr "Attenzione: Non trovo lista parole \"%s.%s.spl\" o \"%s.ascii.spl\""
+ 
+@@ -5212,6 +5192,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "%d parole con caratteri non-ASCII ignorate"
+ 
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: Memoria insufficiente, la lista parole sarà incompleta"
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "%d di %d nodi compressi; ne restano %d (%d%%)"
+@@ -5389,8 +5372,8 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: contiene argomenti non accettati qui"
+ 
+-msgid "E396: containedin argument not accepted here"
+-msgstr "E396: argomento 'containedin' non accettato qui"
++msgid "E844: invalid cchar value"
++msgstr "E844: valore cchar non valido"
+ 
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: group[t]here non ammesso qui"
+@@ -5768,8 +5751,8 @@
+ msgid "Nothing to undo"
+ msgstr "Nessuna modifica, Undo impossibile"
+ 
+-msgid "number changes  time            saved"
+-msgstr "numero modif.   ora             salv."
++msgid "number changes  when               saved"
++msgstr "numero modif.   quando             salv."
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+@@ -6164,7 +6147,6 @@
+ msgid "Edit with &Vim"
+ msgstr "Apri con &Vim"
+ 
+-#. Now concatenate
+ msgid "Edit with existing Vim - "
+ msgstr "Apri con Vim esistente - "
+ 
+diff -Naur vim73.orig/src/po/ja.euc-jp.po vim73/src/po/ja.euc-jp.po
+--- vim73.orig/src/po/ja.euc-jp.po	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/po/ja.euc-jp.po	2013-06-07 17:07:33.885578580 +0000
+@@ -0,0 +1,6683 @@
++# Japanese translation for Vim			vim:set foldmethod=marker:
++#
++# Do ":help uganda"  in Vim to read copying and usage conditions.
++# Do ":help credits" in Vim to see a list of people who contributed.
++#
++# Last Change: 2013 May 19
++#
++# Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
++# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
++#
++# Generated from ja.po, DO NOT EDIT.
++#
++msgid ""
++msgstr ""
++"Project-Id-Version: Vim 7.4\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2013-05-19 12:20+0900\n"
++"PO-Revision-Date: 2013-05-19 12:30+0900\n"
++"Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
++"Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
++"Language: Japanese\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=euc-jp\n"
++"Content-Transfer-Encoding: 8-bit\n"
++
++msgid "E831: bf_key_init() called with empty password"
++msgstr "E831: bf_key_init() €¬¶õ¥Ñ¥¹¥ï¡Œ¥É€ÇžÆ€ÓœÐ€µ€ì€Þ€·€¿"
++
++msgid "E820: sizeof(uint32_t) != 4"
++msgstr "E820: sizeof(uint32_t) != 4"
++
++msgid "E817: Blowfish big/little endian use wrong"
++msgstr "E817: Blowfish°Å¹æ€Î¥Ó¥Ã¥°/¥ê¥È¥ë¥š¥ó¥Ç¥£¥¢¥ó€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++
++msgid "E818: sha256 test failed"
++msgstr "E818: sha256€Î¥Æ¥¹¥È€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E819: Blowfish test failed"
++msgstr "E819: Blowfish°Å¹æ€Î¥Æ¥¹¥È€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "[Location List]"
++msgstr "[Ÿìœê¥ê¥¹¥È]"
++
++msgid "[Quickfix List]"
++msgstr "[Quickfix¥ê¥¹¥È]"
++
++msgid "E855: Autocommands caused command to abort"
++msgstr "E855: autocommand€¬¥³¥Þ¥ó¥É€ÎÄä»ß€ò°ú€­µ¯€³€·€Þ€·€¿"
++
++msgid "E82: Cannot allocate any buffer, exiting..."
++msgstr "E82: ¥Ð¥Ã¥Õ¥¡€ò1€Ä€âºîÀ®€Ç€­€Ê€€€Î€Ç, œªÎ»€·€Þ€¹..."
++
++msgid "E83: Cannot allocate buffer, using other one..."
++msgstr "E83: ¥Ð¥Ã¥Õ¥¡€òºîÀ®€Ç€­€Ê€€€Î€Ç, ÂŸ€Î€ò»ÈÍÑ€·€Þ€¹..."
++
++msgid "E515: No buffers were unloaded"
++msgstr "E515: ²òÊü€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++
++msgid "E516: No buffers were deleted"
++msgstr "E516: ºïœü€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++
++msgid "E517: No buffers were wiped out"
++msgstr "E517: ÇËŽþ€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++
++msgid "1 buffer unloaded"
++msgstr "1 žÄ€Î¥Ð¥Ã¥Õ¥¡€¬²òÊü€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%d buffers unloaded"
++msgstr "%d žÄ€Î¥Ð¥Ã¥Õ¥¡€¬²òÊü€µ€ì€Þ€·€¿"
++
++msgid "1 buffer deleted"
++msgstr "1 žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ºïœü€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%d buffers deleted"
++msgstr "%d žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ºïœü€µ€ì€Þ€·€¿"
++
++msgid "1 buffer wiped out"
++msgstr "1 žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ÇËŽþ€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%d buffers wiped out"
++msgstr "%d žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ÇËŽþ€µ€ì€Þ€·€¿"
++
++msgid "E84: No modified buffer found"
++msgstr "E84: ÊÑ¹¹€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++
++#. back where we started, didn't find anything.
++msgid "E85: There is no listed buffer"
++msgstr "E85: ¥ê¥¹¥ÈÉœŒš€µ€ì€ë¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E86: Buffer %ld does not exist"
++msgstr "E86: ¥Ð¥Ã¥Õ¥¡ %ld €Ï€¢€ê€Þ€»€ó"
++
++msgid "E87: Cannot go beyond last buffer"
++msgstr "E87: ºÇžå€Î¥Ð¥Ã¥Õ¥¡€ò±Û€š€Æ°ÜÆ°€Ï€Ç€­€Þ€»€ó"
++
++msgid "E88: Cannot go before first buffer"
++msgstr "E88: ºÇœé€Î¥Ð¥Ã¥Õ¥¡€è€êÁ°€Ø€Ï°ÜÆ°€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E89: No write since last change for buffer %ld (add ! to override)"
++msgstr "E89: ¥Ð¥Ã¥Õ¥¡ %ld €ÎÊÑ¹¹€ÏÊÝÂž€µ€ì€Æ€€€Þ€»€ó (! €ÇÊÑ¹¹€òÇËŽþ)"
++
++msgid "E90: Cannot unload last buffer"
++msgstr "E90: ºÇžå€Î¥Ð¥Ã¥Õ¥¡€Ï²òÊü€Ç€­€Þ€»€ó"
++
++msgid "W14: Warning: List of file names overflow"
++msgstr "W14: ·Ù¹ð: ¥Õ¥¡¥€¥ëÌŸ€Î¥ê¥¹¥È€¬Ä¹²á€®€Þ€¹"
++
++#, c-format
++msgid "E92: Buffer %ld not found"
++msgstr "E92: ¥Ð¥Ã¥Õ¥¡ %ld €¬ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E93: More than one match for %s"
++msgstr "E93: %s €ËÊ£¿ô€Î³ºÅö€¬€¢€ê€Þ€·€¿"
++
++#, c-format
++msgid "E94: No matching buffer for %s"
++msgstr "E94: %s €Ë³ºÅö€¹€ë¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó€Ç€·€¿"
++
++#, c-format
++msgid "line %ld"
++msgstr "¹Ô %ld"
++
++msgid "E95: Buffer with this name already exists"
++msgstr "E95: €³€ÎÌŸÁ°€Î¥Ð¥Ã¥Õ¥¡€ÏŽû€Ë€¢€ê€Þ€¹"
++
++msgid " [Modified]"
++msgstr " [ÊÑ¹¹€¢€ê]"
++
++msgid "[Not edited]"
++msgstr "[Ì€ÊÔœž]"
++
++msgid "[New file]"
++msgstr "[¿·¥Õ¥¡¥€¥ë]"
++
++msgid "[Read errors]"
++msgstr "[ÆÉ¹þ¥š¥é¡Œ]"
++
++msgid "[readonly]"
++msgstr "[ÆÉ¹þÀìÍÑ]"
++
++#, c-format
++msgid "1 line --%d%%--"
++msgstr "1 ¹Ô --%d%%--"
++
++#, c-format
++msgid "%ld lines --%d%%--"
++msgstr "%ld ¹Ô --%d%%--"
++
++#, c-format
++msgid "line %ld of %ld --%d%%-- col "
++msgstr "¹Ô %ld (ÁŽÂÎ %ld) --%d%%-- col "
++
++msgid "[No Name]"
++msgstr "[ÌµÌŸ]"
++
++#. must be a help buffer
++msgid "help"
++msgstr "¥Ø¥ë¥×"
++
++msgid "[Help]"
++msgstr "[¥Ø¥ë¥×]"
++
++msgid "[Preview]"
++msgstr "[¥×¥ì¥Ó¥å¡Œ]"
++
++msgid "All"
++msgstr "ÁŽ€Æ"
++
++msgid "Bot"
++msgstr "ËöÈø"
++
++msgid "Top"
++msgstr "ÀèÆ¬"
++
++msgid ""
++"\n"
++"# Buffer list:\n"
++msgstr ""
++"\n"
++"# ¥Ð¥Ã¥Õ¥¡¥ê¥¹¥È:\n"
++
++msgid "[Scratch]"
++msgstr "[²Œœñ€­]"
++
++msgid ""
++"\n"
++"--- Signs ---"
++msgstr ""
++"\n"
++"--- ¥µ¥€¥ó ---"
++
++#, c-format
++msgid "Signs for %s:"
++msgstr "%s €Î¥µ¥€¥ó:"
++
++#, c-format
++msgid "    line=%ld  id=%d  name=%s"
++msgstr "    ¹Ô=%ld  Œ±ÊÌ»Ò=%d  ÌŸÁ°=%s"
++
++#, c-format
++msgid "E96: Can not diff more than %ld buffers"
++msgstr "E96: %ld °ÊŸå€Î¥Ð¥Ã¥Õ¥¡€Ïdiff€Ç€­€Þ€»€ó"
++
++msgid "E810: Cannot read or write temp files"
++msgstr "E810: °ì»þ¥Õ¥¡¥€¥ë€ÎÆÉ¹þ€â€·€¯€Ïœñ¹þ€¬€Ç€­€Þ€»€ó"
++
++msgid "E97: Cannot create diffs"
++msgstr "E97: º¹Ê¬€òºîÀ®€Ç€­€Þ€»€ó "
++
++msgid "Patch file"
++msgstr "¥Ñ¥Ã¥Á¥Õ¥¡¥€¥ë"
++
++msgid "E816: Cannot read patch output"
++msgstr "E816: patch€ÎœÐÎÏ€òÆÉ¹þ€á€Þ€»€ó"
++
++msgid "E98: Cannot read diff output"
++msgstr "E98: diff€ÎœÐÎÏ€òÆÉ¹þ€á€Þ€»€ó"
++
++msgid "E99: Current buffer is not in diff mode"
++msgstr "E99: žœºß€Î¥Ð¥Ã¥Õ¥¡€Ïº¹Ê¬¥â¡Œ¥É€Ç€Ï€¢€ê€Þ€»€ó"
++
++msgid "E793: No other buffer in diff mode is modifiable"
++msgstr "E793: º¹Ê¬¥â¡Œ¥É€Ç€¢€ëÂŸ€Î¥Ð¥Ã¥Õ¥¡€ÏÊÑ¹¹²ÄÇœ€Ç€¹"
++
++msgid "E100: No other buffer in diff mode"
++msgstr "E100: º¹Ê¬¥â¡Œ¥É€Ç€¢€ëÂŸ€Î¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++
++msgid "E101: More than two buffers in diff mode, don't know which one to use"
++msgstr ""
++"E101: º¹Ê¬¥â¡Œ¥É€Î¥Ð¥Ã¥Õ¥¡€¬2žÄ°ÊŸå€¢€ë€Î€Ç¡¢€É€ì€ò»È€Š€«ÆÃÄê€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E102: Can't find buffer \"%s\""
++msgstr "E102: ¥Ð¥Ã¥Õ¥¡ \"%s\" €¬ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E103: Buffer \"%s\" is not in diff mode"
++msgstr "E103: ¥Ð¥Ã¥Õ¥¡ \"%s\" €Ïº¹Ê¬¥â¡Œ¥É€Ç€Ï€¢€ê€Þ€»€ó"
++
++msgid "E787: Buffer changed unexpectedly"
++msgstr "E787: ÍœŽü€»€º¥Ð¥Ã¥Õ¥¡€¬ÊÑ¹¹ÊÑ¹¹€µ€ì€Þ€·€¿"
++
++msgid "E104: Escape not allowed in digraph"
++msgstr "E104: ¹ç»ú€ËEscape€Ï»ÈÍÑ€Ç€­€Þ€»€ó"
++
++msgid "E544: Keymap file not found"
++msgstr "E544: ¥­¡Œ¥Þ¥Ã¥×¥Õ¥¡¥€¥ë€¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E105: Using :loadkeymap not in a sourced file"
++msgstr "E105: :source €ÇŒè¹þ€à¥Õ¥¡¥€¥ë°Ê³°€Ç€Ï :loadkeymap €ò»È€š€Þ€»€ó"
++
++msgid "E791: Empty keymap entry"
++msgstr "E791: ¶õ€Î¥­¡Œ¥Þ¥Ã¥×¥š¥ó¥È¥ê"
++
++msgid " Keyword completion (^N^P)"
++msgstr " ¥­¡Œ¥ï¡Œ¥ÉÊäŽ° (^N^P)"
++
++#. ctrl_x_mode == 0, ^P/^N compl.
++msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
++msgstr " ^X ¥â¡Œ¥É (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
++
++msgid " Whole line completion (^L^N^P)"
++msgstr " ¹Ô(ÁŽÂÎ)ÊäŽ° (^L^N^P)"
++
++msgid " File name completion (^F^N^P)"
++msgstr "¥Õ¥¡¥€¥ëÌŸÊäŽ° (^F^N^P)"
++
++msgid " Tag completion (^]^N^P)"
++msgstr " ¥¿¥°ÊäŽ° (^]^N^P)"
++
++msgid " Path pattern completion (^N^P)"
++msgstr " ¥Ñ¥¹¥Ñ¥¿¡Œ¥óÊäŽ° (^N^P)"
++
++msgid " Definition completion (^D^N^P)"
++msgstr " ÄêµÁÊäŽ° (^D^N^P)"
++
++msgid " Dictionary completion (^K^N^P)"
++msgstr " Œ­œñÊäŽ° (^K^N^P)"
++
++msgid " Thesaurus completion (^T^N^P)"
++msgstr " ¥·¥œ¡Œ¥é¥¹ÊäŽ° (^T^N^P)"
++
++msgid " Command-line completion (^V^N^P)"
++msgstr " ¥³¥Þ¥ó¥É¥é¥€¥óÊäŽ° (^V^N^P)"
++
++msgid " User defined completion (^U^N^P)"
++msgstr " ¥æ¡Œ¥¶ÄêµÁÊäŽ° (^U^N^P)"
++
++msgid " Omni completion (^O^N^P)"
++msgstr " ¥ª¥à¥ËÊäŽ° (^O^N^P)"
++
++msgid " Spelling suggestion (s^N^P)"
++msgstr " ÄÖ€êœ€ÀµžõÊä (s^N^P)"
++
++msgid " Keyword Local completion (^N^P)"
++msgstr " ¶Éœê¥­¡Œ¥ï¡Œ¥ÉÊäŽ° (^N^P)"
++
++msgid "Hit end of paragraph"
++msgstr "ÃÊÍî€ÎºÇžå€Ë¥Ò¥Ã¥È"
++
++msgid "E839: Completion function changed window"
++msgstr "E839: ÊäŽÖŽØ¿ô€¬¥Š¥£¥ó¥É¥Š€òÊÑ¹¹€·€Þ€·€¿"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: ÊäŽ°ŽØ¿ô€¬¥Æ¥­¥¹¥È€òºïœü€·€Þ€·€¿"
++
++msgid "'dictionary' option is empty"
++msgstr "'dictionary' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++
++msgid "'thesaurus' option is empty"
++msgstr "'thesaurus' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++
++#, c-format
++msgid "Scanning dictionary: %s"
++msgstr "Œ­œñ€ò¥¹¥­¥ã¥óÃæ: %s"
++
++msgid " (insert) Scroll (^E/^Y)"
++msgstr " (ÁÞÆþ) ¥¹¥¯¥í¡Œ¥ë(^E/^Y)"
++
++msgid " (replace) Scroll (^E/^Y)"
++msgstr " (ÃÖŽ¹) ¥¹¥¯¥í¡Œ¥ë (^E/^Y)"
++
++#, c-format
++msgid "Scanning: %s"
++msgstr "¥¹¥­¥ã¥óÃæ: %s"
++
++msgid "Scanning tags."
++msgstr "¥¿¥°€ò¥¹¥­¥ã¥óÃæ."
++
++msgid " Adding"
++msgstr " ÄÉ²ÃÃæ"
++
++#. showmode might reset the internal line pointers, so it must
++#. * be called before line = ml_get(), or when this address is no
++#. * longer needed.  -- Acevedo.
++#.
++msgid "-- Searching..."
++msgstr "-- ž¡º÷Ãæ..."
++
++msgid "Back at original"
++msgstr "»Ï€á€ËÌá€ë"
++
++msgid "Word from other line"
++msgstr "ÂŸ€Î¹Ô€ÎÃ±žì"
++
++msgid "The only match"
++msgstr "Í£°ì€Î³ºÅö"
++
++#, c-format
++msgid "match %d of %d"
++msgstr "%d ÈÖÌÜ€Î³ºÅö (ÁŽ³ºÅö %d žÄÃæ)"
++
++#, c-format
++msgid "match %d"
++msgstr "%d ÈÖÌÜ€Î³ºÅö"
++
++msgid "E18: Unexpected characters in :let"
++msgstr "E18: ÍœŽü€»€ÌÊž»ú€¬ :let €Ë€¢€ê€Þ€·€¿"
++
++#, c-format
++msgid "E684: list index out of range: %ld"
++msgstr "E684: ¥ê¥¹¥È€Î¥€¥ó¥Ç¥Ã¥¯¥¹€¬ÈÏ°Ï³°€Ç€¹: %ld"
++
++#, c-format
++msgid "E121: Undefined variable: %s"
++msgstr "E121: Ì€ÄêµÁ€ÎÊÑ¿ô€Ç€¹: %s"
++
++msgid "E111: Missing ']'"
++msgstr "E111: ']' €¬ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E686: Argument of %s must be a List"
++msgstr "E686: %s €Î°ú¿ô€Ï¥ê¥¹¥È·¿€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++#, c-format
++msgid "E712: Argument of %s must be a List or Dictionary"
++msgstr "E712: %s €Î°ú¿ô€Ï¥ê¥¹¥È·¿€Þ€¿€ÏŒ­œñ·¿€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "E713: Cannot use empty key for Dictionary"
++msgstr "E713: Œ­œñ·¿€Ë¶õ€Î¥­¡Œ€ò»È€Š€³€È€Ï€Ç€­€Þ€»€ó"
++
++msgid "E714: List required"
++msgstr "E714: ¥ê¥¹¥È·¿€¬É¬Í×€Ç€¹"
++
++msgid "E715: Dictionary required"
++msgstr "E715: Œ­œñ·¿€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "E118: Too many arguments for function: %s"
++msgstr "E118: ŽØ¿ô€Î°ú¿ô€¬Â¿²á€®€Þ€¹: %s"
++
++#, c-format
++msgid "E716: Key not present in Dictionary: %s"
++msgstr "E716: Œ­œñ·¿€Ë¥­¡Œ€¬Âžºß€·€Þ€»€ó: %s"
++
++#, c-format
++msgid "E122: Function %s already exists, add ! to replace it"
++msgstr "E122: ŽØ¿ô %s €ÏÄêµÁºÑ€Ç€¹, ºÆÄêµÁ€¹€ë€Ë€Ï ! €òÄÉ²Ã€·€Æ€¯€À€µ€€"
++
++msgid "E717: Dictionary entry already exists"
++msgstr "E717: Œ­œñ·¿Æâ€Ë¥š¥ó¥È¥ê€¬Žû€ËÂžºß€·€Þ€¹"
++
++msgid "E718: Funcref required"
++msgstr "E718: ŽØ¿ô»²ŸÈ·¿€¬Í×µá€µ€ì€Þ€¹"
++
++msgid "E719: Cannot use [:] with a Dictionary"
++msgstr "E719: [:] €òŒ­œñ·¿€ÈÁÈ€ß¹ç€ï€»€Æ€Ï»È€š€Þ€»€ó"
++
++#, c-format
++msgid "E734: Wrong variable type for %s="
++msgstr "E734: °Û€Ê€Ã€¿·¿€ÎÊÑ¿ô€Ç€¹ %s="
++
++#, c-format
++msgid "E130: Unknown function: %s"
++msgstr "E130: Ì€ÃÎ€ÎŽØ¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E461: Illegal variable name: %s"
++msgstr "E461: ÉÔÀµ€ÊÊÑ¿ôÌŸ€Ç€¹: %s"
++
++msgid "E687: Less targets than List items"
++msgstr "E687: ¥¿¡Œ¥²¥Ã¥È€¬¥ê¥¹¥È·¿Æâ€ÎÍ×ÁÇ€è€ê€âŸ¯€Ê€€€Ç€¹"
++
++msgid "E688: More targets than List items"
++msgstr "E688: ¥¿¡Œ¥²¥Ã¥È€¬¥ê¥¹¥È·¿Æâ€ÎÍ×ÁÇ€è€ê€âÂ¿€€€Ç€¹"
++
++msgid "Double ; in list of variables"
++msgstr "¥ê¥¹¥È·¿€ÎÃÍ€Ë2€Ä°ÊŸå€Î ; €¬ž¡œÐ€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "E738: Can't list variables for %s"
++msgstr "E738: %s €ÎÃÍ€ò°ìÍ÷ÉœŒš€Ç€­€Þ€»€ó"
++
++msgid "E689: Can only index a List or Dictionary"
++msgstr "E689: ¥ê¥¹¥È·¿€ÈŒ­œñ·¿°Ê³°€Ï¥€¥ó¥Ç¥Ã¥¯¥¹»ØÄê€Ç€­€Þ€»€ó"
++
++msgid "E708: [:] must come last"
++msgstr "E708: [:] €ÏºÇžå€Ç€Ê€±€ì€Ð€€€±€Þ€»€ó"
++
++msgid "E709: [:] requires a List value"
++msgstr "E709: [:] €Ë€Ï¥ê¥¹¥È·¿€ÎÃÍ€¬É¬Í×€Ç€¹"
++
++msgid "E710: List value has more items than target"
++msgstr "E710: ¥ê¥¹¥È·¿ÊÑ¿ô€Ë¥¿¡Œ¥²¥Ã¥È€è€ê€âÂ¿€€Í×ÁÇ€¬€¢€ê€Þ€¹"
++
++msgid "E711: List value has not enough items"
++msgstr "E711: ¥ê¥¹¥È·¿ÊÑ¿ô€ËœœÊ¬€Ê¿ô€ÎÍ×ÁÇ€¬€¢€ê€Þ€»€ó"
++
++#
++msgid "E690: Missing \"in\" after :for"
++msgstr "E690: :for €Îžå€Ë \"in\" €¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E107: Missing parentheses: %s"
++msgstr "E107: ¥«¥Ã¥³ '(' €¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E108: No such variable: \"%s\""
++msgstr "E108: €œ€ÎÊÑ¿ô€Ï€¢€ê€Þ€»€ó: \"%s\""
++
++msgid "E743: variable nested too deep for (un)lock"
++msgstr "E743: (¥¢¥ó)¥í¥Ã¥¯€¹€ë€Ë€ÏÊÑ¿ô€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++msgid "E109: Missing ':' after '?'"
++msgstr "E109: '?' €Îžå€Ë ':' €¬€¢€ê€Þ€»€ó"
++
++msgid "E691: Can only compare List with List"
++msgstr "E691: ¥ê¥¹¥È·¿€Ï¥ê¥¹¥È·¿€È€·€«Èæ³Ó€Ç€­€Þ€»€ó"
++
++msgid "E692: Invalid operation for Lists"
++msgstr "E692: ¥ê¥¹¥È·¿€Ë€ÏÌµžú€ÊÁàºî€Ç€¹"
++
++msgid "E735: Can only compare Dictionary with Dictionary"
++msgstr "E735: Œ­œñ·¿€ÏŒ­œñ·¿€È€·€«Èæ³Ó€Ç€­€Þ€»€ó"
++
++msgid "E736: Invalid operation for Dictionary"
++msgstr "E736: Œ­œñ·¿€Ë€ÏÌµžú€ÊÁàºî€Ç€¹"
++
++msgid "E693: Can only compare Funcref with Funcref"
++msgstr "E693: ŽØ¿ô»²ŸÈ·¿€ÏŽØ¿ô»²ŸÈ·¿€È€·€«Èæ³Ó€Ç€­€Þ€»€ó"
++
++msgid "E694: Invalid operation for Funcrefs"
++msgstr "E694: ŽØ¿ô»²ŸÈ·¿€Ë€ÏÌµžú€ÊÁàºî€Ç€¹"
++
++msgid "E804: Cannot use '%' with Float"
++msgstr "E804: '%' €òÉâÆ°Ÿ®¿ôÅÀ¿ô€ÈÁÈ€ß¹ç€ï€»€Æ€Ï»È€š€Þ€»€ó"
++
++msgid "E110: Missing ')'"
++msgstr "E110: ')' €¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E695: Cannot index a Funcref"
++msgstr "E695: ŽØ¿ô»²ŸÈ·¿€Ï¥€¥ó¥Ç¥Ã¥¯¥¹€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E112: Option name missing: %s"
++msgstr "E112: ¥ª¥×¥·¥ç¥óÌŸ€¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E113: Unknown option: %s"
++msgstr "E113: Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹: %s"
++
++#, c-format
++msgid "E114: Missing quote: %s"
++msgstr "E114: °úÍÑÉä (\") €¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E115: Missing quote: %s"
++msgstr "E115: °úÍÑÉä (') €¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E696: Missing comma in List: %s"
++msgstr "E696: ¥ê¥¹¥È·¿€Ë¥«¥ó¥Þ€¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E697: Missing end of List ']': %s"
++msgstr "E697: ¥ê¥¹¥È·¿€ÎºÇžå€Ë ']' €¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E720: Missing colon in Dictionary: %s"
++msgstr "E720: Œ­œñ·¿€Ë¥³¥í¥ó€¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E721: Duplicate key in Dictionary: \"%s\""
++msgstr "E721: Œ­œñ·¿€ËœÅÊ£¥­¡Œ€¬€¢€ê€Þ€¹: \"%s\""
++
++#, c-format
++msgid "E722: Missing comma in Dictionary: %s"
++msgstr "E722: Œ­œñ·¿€Ë¥«¥ó¥Þ€¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E723: Missing end of Dictionary '}': %s"
++msgstr "E723: Œ­œñ·¿€ÎºÇžå€Ë '}' €¬€¢€ê€Þ€»€ó: %s"
++
++msgid "E724: variable nested too deep for displaying"
++msgstr "E724: ÉœŒš€¹€ë€Ë€ÏÊÑ¿ô€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++#, c-format
++msgid "E740: Too many arguments for function %s"
++msgstr "E740: ŽØ¿ô€Î°ú¿ô€¬Â¿²á€®€Þ€¹: %s"
++
++#, c-format
++msgid "E116: Invalid arguments for function %s"
++msgstr "E116: ŽØ¿ô€ÎÌµžú€Ê°ú¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E117: Unknown function: %s"
++msgstr "E117: Ì€ÃÎ€ÎŽØ¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E119: Not enough arguments for function: %s"
++msgstr "E119: ŽØ¿ô€Î°ú¿ô€¬Ÿ¯€Ê²á€®€Þ€¹: %s"
++
++#, c-format
++msgid "E120: Using <SID> not in a script context: %s"
++msgstr "E120: ¥¹¥¯¥ê¥×¥È°Ê³°€Ç<SID>€¬»È€ï€ì€Þ€·€¿: %s"
++
++#, c-format
++msgid "E725: Calling dict function without Dictionary: %s"
++msgstr "E725: Œ­œñÍÑŽØ¿ô€¬žÆ€Ð€ì€Þ€·€¿€¬Œ­œñ€¬€¢€ê€Þ€»€ó: %s"
++
++msgid "E808: Number or Float required"
++msgstr "E808: ¿ôÃÍ€«ÉâÆ°Ÿ®¿ôÅÀ¿ô€¬É¬Í×€Ç€¹"
++
++msgid "add() argument"
++msgstr "add() €Î°ú¿ô"
++
++msgid "E699: Too many arguments"
++msgstr "E699: °ú¿ô€¬Â¿²á€®€Þ€¹"
++
++msgid "E785: complete() can only be used in Insert mode"
++msgstr "E785: complete() €ÏÁÞÆþ¥â¡Œ¥É€Ç€·€«ÍøÍÑ€Ç€­€Þ€»€ó"
++
++#.
++#. * Yes this is ugly, I don't particularly like it either.  But doing it
++#. * this way has the compelling advantage that translations need not to
++#. * be touched at all.  See below what 'ok' and 'ync' are used for.
++#.
++msgid "&Ok"
++msgstr "&Ok"
++
++msgid "extend() argument"
++msgstr "extend() €Î°ú¿ô"
++
++#, c-format
++msgid "E737: Key already exists: %s"
++msgstr "E737: ¥­¡Œ€ÏŽû€ËÂžºß€·€Þ€¹: %s"
++
++msgid "map() argument"
++msgstr "map() €Î°ú¿ô"
++
++msgid "filter() argument"
++msgstr "filter() €Î°ú¿ô"
++
++#, c-format
++msgid "+-%s%3ld lines: "
++msgstr "+-%s%3ld ¹Ô: "
++
++#, c-format
++msgid "E700: Unknown function: %s"
++msgstr "E700: Ì€ÃÎ€ÎŽØ¿ô€Ç€¹: %s"
++
++msgid ""
++"&OK\n"
++"&Cancel"
++msgstr ""
++"·èÄê(&O)\n"
++"¥­¥ã¥ó¥»¥ë(&C)"
++
++msgid "called inputrestore() more often than inputsave()"
++msgstr "inputrestore() €¬ inputsave() €è€ê€âÂ¿€¯žÆ€Ð€ì€Þ€·€¿"
++
++msgid "insert() argument"
++msgstr "insert() €Î°ú¿ô"
++
++msgid "E786: Range not allowed"
++msgstr "E786: ÈÏ°Ï»ØÄê€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E701: Invalid type for len()"
++msgstr "E701: len() €Ë€ÏÌµžú€Ê·¿€Ç€¹"
++
++msgid "E726: Stride is zero"
++msgstr "E726: ¥¹¥È¥é¥€¥É(Á°¿ÊÎÌ)€¬ 0 €Ç€¹"
++
++msgid "E727: Start past end"
++msgstr "E727: ³«»Ï°ÌÃÖ€¬œªÎ»°ÌÃÖ€ò±Û€š€Þ€·€¿"
++
++msgid "<empty>"
++msgstr "<¶õ>"
++
++msgid "E240: No connection to Vim server"
++msgstr "E240: Vim ¥µ¡Œ¥Ð€Ø€ÎÀÜÂ³€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E241: Unable to send to %s"
++msgstr "E241: %s €ØÁ÷€ë€³€È€¬€Ç€­€Þ€»€ó"
++
++msgid "E277: Unable to read a server reply"
++msgstr "E277: ¥µ¡Œ¥Ð€Î±þÅú€¬€¢€ê€Þ€»€ó"
++
++msgid "remove() argument"
++msgstr "remove() €Î°ú¿ô"
++
++# Added at 10-Mar-2004.
++msgid "E655: Too many symbolic links (cycle?)"
++msgstr "E655: ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯€¬Â¿²á€®€Þ€¹ (œÛŽÄ€·€Æ€€€ë²ÄÇœÀ­€¬€¢€ê€Þ€¹)"
++
++msgid "reverse() argument"
++msgstr "reverse() €Î°ú¿ô"
++
++msgid "E258: Unable to send to client"
++msgstr "E258: ¥¯¥é¥€¥¢¥ó¥È€ØÁ÷€ë€³€È€¬€Ç€­€Þ€»€ó"
++
++msgid "sort() argument"
++msgstr "sort() €Î°ú¿ô"
++
++msgid "E702: Sort compare function failed"
++msgstr "E702: ¥œ¡Œ¥È€ÎÈæ³ÓŽØ¿ô€¬ŒºÇÔ€·€Þ€·€¿"
++
++msgid "(Invalid)"
++msgstr "(Ìµžú)"
++
++msgid "E677: Error writing temp file"
++msgstr "E677: °ì»þ¥Õ¥¡¥€¥ëœñ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿"
++
++msgid "E805: Using a Float as a Number"
++msgstr "E805: ÉâÆ°Ÿ®¿ôÅÀ¿ô€ò¿ôÃÍ€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++
++msgid "E703: Using a Funcref as a Number"
++msgstr "E703: ŽØ¿ô»²ŸÈ·¿€ò¿ôÃÍ€È€·€Æ°·€Ã€Æ€€€Þ€¹¡£"
++
++msgid "E745: Using a List as a Number"
++msgstr "E745: ¥ê¥¹¥È·¿€ò¿ôÃÍ€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++
++msgid "E728: Using a Dictionary as a Number"
++msgstr "E728: Œ­œñ·¿€ò¿ôÃÍ€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++
++msgid "E729: using Funcref as a String"
++msgstr "E729: ŽØ¿ô»²ŸÈ·¿€òÊž»úÎó€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++
++msgid "E730: using List as a String"
++msgstr "E730: ¥ê¥¹¥È·¿€òÊž»úÎó€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++
++msgid "E731: using Dictionary as a String"
++msgstr "E731: Œ­œñ·¿€òÊž»úÎó€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++
++msgid "E806: using Float as a String"
++msgstr "E806: ÉâÆ°Ÿ®¿ôÅÀ¿ô€òÊž»úÎó€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E706: Variable type mismatch for: %s"
++msgstr "E706: ÊÑ¿ô€Î·¿€¬°ìÃ×€·€Þ€»€ó: %s"
++
++#, c-format
++msgid "E795: Cannot delete variable %s"
++msgstr "E795: ÊÑ¿ô %s €òºïœü€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: ŽØ¿ô»²ŸÈ·¿ÊÑ¿ôÌŸ€ÏÂçÊž»ú€Ç»Ï€Þ€é€Ê€±€ì€Ð€Ê€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: ÊÑ¿ôÌŸ€¬ŽûÂž€ÎŽØ¿ôÌŸ€ÈŸ×ÆÍ€·€Þ€¹: %s"
++
++#, c-format
++msgid "E741: Value is locked: %s"
++msgstr "E741: ÃÍ€¬¥í¥Ã¥¯€µ€ì€Æ€€€Þ€¹: %s"
++
++msgid "Unknown"
++msgstr "ÉÔÌÀ"
++
++#, c-format
++msgid "E742: Cannot change value of %s"
++msgstr "E742: %s €ÎÃÍ€òÊÑ¹¹€Ç€­€Þ€»€ó"
++
++msgid "E698: variable nested too deep for making a copy"
++msgstr "E698: ¥³¥Ô¡Œ€òŒè€ë€Ë€ÏÊÑ¿ô€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++#, c-format
++msgid "E123: Undefined function: %s"
++msgstr "E123: Ì€ÄêµÁ€ÎŽØ¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E124: Missing '(': %s"
++msgstr "E124: '(' €¬€¢€ê€Þ€»€ó: %s"
++
++msgid "E862: Cannot use g: here"
++msgstr "E862: €³€³€Ç€Ï g: €Ï»È€š€Þ€»€ó"
++
++#, c-format
++msgid "E125: Illegal argument: %s"
++msgstr "E125: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E853: Duplicate argument name: %s"
++msgstr "E853: °ú¿ôÌŸ€¬œÅÊ£€·€Æ€€€Þ€¹: %s"
++
++msgid "E126: Missing :endfunction"
++msgstr "E126: :endfunction €¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E707: Function name conflicts with variable: %s"
++msgstr "E707: ŽØ¿ôÌŸ€¬ÊÑ¿ôÌŸ€ÈŸ×ÆÍ€·€Þ€¹: %s"
++
++#, c-format
++msgid "E127: Cannot redefine function %s: It is in use"
++msgstr "E127: ŽØ¿ô %s €òºÆÄêµÁ€Ç€­€Þ€»€ó: »ÈÍÑÃæ€Ç€¹"
++
++#, c-format
++msgid "E746: Function name does not match script file name: %s"
++msgstr "E746: ŽØ¿ôÌŸ€¬¥¹¥¯¥ê¥×¥È€Î¥Õ¥¡¥€¥ëÌŸ€È°ìÃ×€·€Þ€»€ó: %s"
++
++msgid "E129: Function name required"
++msgstr "E129: ŽØ¿ôÌŸ€¬Í×µá€µ€ì€Þ€¹"
++
++#, c-format
++msgid "E128: Function name must start with a capital or contain a colon: %s"
++msgstr "E128: ŽØ¿ôÌŸ€ÏÂçÊž»ú€Ç»Ï€Þ€ë€«¥³¥í¥ó€òŽÞ€Þ€Ê€±€ì€Ð€Ê€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E131: Cannot delete function %s: It is in use"
++msgstr "E131: ŽØ¿ô %s €òºïœü€Ç€­€Þ€»€ó: »ÈÍÑÃæ€Ç€¹"
++
++msgid "E132: Function call depth is higher than 'maxfuncdepth'"
++msgstr "E132: ŽØ¿ôžÆœÐ€ÎÆþ€ì»Ò¿ô€¬ 'maxfuncdepth' €òÄ¶€š€Þ€·€¿"
++
++#, c-format
++msgid "calling %s"
++msgstr "%s €òŒÂ¹ÔÃæ€Ç€¹"
++
++#, c-format
++msgid "%s aborted"
++msgstr "%s €¬ÃæÃÇ€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%s returning #%ld"
++msgstr "%s €¬ #%ld €òÊÖ€·€Þ€·€¿"
++
++#, c-format
++msgid "%s returning %s"
++msgstr "%s €¬ %s €òÊÖ€·€Þ€·€¿"
++
++#, c-format
++msgid "continuing in %s"
++msgstr "%s €ÎŒÂ¹Ô€ò·ÑÂ³Ãæ€Ç€¹"
++
++msgid "E133: :return not inside a function"
++msgstr "E133: ŽØ¿ô³°€Ë :return €¬€¢€ê€Þ€·€¿"
++
++msgid ""
++"\n"
++"# global variables:\n"
++msgstr ""
++"\n"
++"# ¥°¥í¡Œ¥Ð¥ëÊÑ¿ô:\n"
++
++msgid ""
++"\n"
++"\tLast set from "
++msgstr ""
++"\n"
++"\tLast set from "
++
++msgid "No old files"
++msgstr "žÅ€€¥Õ¥¡¥€¥ë€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
++msgstr "<%s>%s%s  %d,  16¿Ê¿ô %02x,  8¿Ê¿ô %03o"
++
++#, c-format
++msgid "> %d, Hex %04x, Octal %o"
++msgstr "> %d, 16¿Ê¿ô %04x, 8¿Ê¿ô %o"
++
++#, c-format
++msgid "> %d, Hex %08x, Octal %o"
++msgstr "> %d, 16¿Ê¿ô %08x, 8¿Ê¿ô %o"
++
++msgid "E134: Move lines into themselves"
++msgstr "E134: ¹Ô€ò€œ€ìŒ«¿È€Ë€Ï°ÜÆ°€Ç€­€Þ€»€ó"
++
++msgid "1 line moved"
++msgstr "1 ¹Ô€¬°ÜÆ°€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%ld lines moved"
++msgstr "%ld ¹Ô€¬°ÜÆ°€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%ld lines filtered"
++msgstr "%ld ¹Ô€¬¥Õ¥£¥ë¥¿œèÍý€µ€ì€Þ€·€¿"
++
++msgid "E135: *Filter* Autocommands must not change current buffer"
++msgstr "E135: *¥Õ¥£¥ë¥¿* autocommand€Ïžœºß€Î¥Ð¥Ã¥Õ¥¡€òÊÑ¹¹€·€Æ€Ï€€€±€Þ€»€ó"
++
++msgid "[No write since last change]\n"
++msgstr "[ºÇžå€ÎÊÑ¹¹€¬ÊÝÂž€µ€ì€Æ€€€Þ€»€ó]\n"
++
++#, c-format
++msgid "%sviminfo: %s in line: "
++msgstr "%sviminfo: %s ¹ÔÌÜ: "
++
++msgid "E136: viminfo: Too many errors, skipping rest of file"
++msgstr "E136: viminfo: ¥š¥é¡Œ€¬Â¿²á€®€ë€Î€Ç, °Ê¹ß€Ï¥¹¥­¥Ã¥×€·€Þ€¹"
++
++#, c-format
++msgid "Reading viminfo file \"%s\"%s%s%s"
++msgstr "viminfo¥Õ¥¡¥€¥ë \"%s\"%s%s%s €òÆÉ¹þ€ßÃæ "
++
++msgid " info"
++msgstr " ŸðÊó"
++
++msgid " marks"
++msgstr " ¥Þ¡Œ¥¯"
++
++msgid " oldfiles"
++msgstr " µì¥Õ¥¡¥€¥ë·²"
++
++msgid " FAILED"
++msgstr " ŒºÇÔ"
++
++#. avoid a wait_return for this message, it's annoying
++#, c-format
++msgid "E137: Viminfo file is not writable: %s"
++msgstr "E137: viminfo¥Õ¥¡¥€¥ë€¬œñ¹þ€ß€Ç€­€Þ€»€ó: %s"
++
++#, c-format
++msgid "E138: Can't write viminfo file %s!"
++msgstr "E138: viminfo¥Õ¥¡¥€¥ë %s €òÊÝÂž€Ç€­€Þ€»€ó!"
++
++#, c-format
++msgid "Writing viminfo file \"%s\""
++msgstr "viminfo¥Õ¥¡¥€¥ë \"%s\" €òœñ¹þ€ßÃæ"
++
++#. Write the info:
++#, c-format
++msgid "# This viminfo file was generated by Vim %s.\n"
++msgstr "# €³€Î viminfo ¥Õ¥¡¥€¥ë€Ï Vim %s €Ë€è€Ã€ÆÀžÀ®€µ€ì€Þ€·€¿.\n"
++
++msgid ""
++"# You may edit it if you're careful!\n"
++"\n"
++msgstr ""
++"# ÊÑ¹¹€¹€ëºÝ€Ë€ÏœœÊ¬Ãí°Õ€·€Æ€¯€À€µ€€!\n"
++"\n"
++
++msgid "# Value of 'encoding' when this file was written\n"
++msgstr "# €³€Î¥Õ¥¡¥€¥ë€¬œñ€«€ì€¿»þ€Î 'encoding' €ÎÃÍ\n"
++
++msgid "Illegal starting char"
++msgstr "ÉÔÀµ€ÊÀèÆ¬Êž»ú€Ç€¹"
++
++msgid "Save As"
++msgstr "ÊÌÌŸ€ÇÊÝÂž"
++
++msgid "Write partial file?"
++msgstr "¥Õ¥¡¥€¥ë€òÉôÊ¬Åª€ËÊÝÂž€·€Þ€¹€«?"
++
++msgid "E140: Use ! to write partial buffer"
++msgstr "E140: ¥Ð¥Ã¥Õ¥¡€òÉôÊ¬Åª€ËÊÝÂž€¹€ë€Ë€Ï ! €ò»È€Ã€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "Overwrite existing file \"%s\"?"
++msgstr "ŽûÂž€Î¥Õ¥¡¥€¥ë \"%s\" €òŸåœñ€­€·€Þ€¹€«?"
++
++#, c-format
++msgid "Swap file \"%s\" exists, overwrite anyway?"
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \"%s\" €¬Âžºß€·€Þ€¹. Ÿåœñ€­€ò¶¯À©€·€Þ€¹€«?"
++
++#, c-format
++msgid "E768: Swap file exists: %s (:silent! overrides)"
++msgstr "E768: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Âžºß€·€Þ€¹: %s (:silent! €òÄÉ²Ã€ÇŸåœñ)"
++
++#, c-format
++msgid "E141: No file name for buffer %ld"
++msgstr "E141: ¥Ð¥Ã¥Õ¥¡ %ld €Ë€ÏÌŸÁ°€¬€¢€ê€Þ€»€ó"
++
++msgid "E142: File not written: Writing is disabled by 'write' option"
++msgstr "E142: ¥Õ¥¡¥€¥ë€ÏÊÝÂž€µ€ì€Þ€»€ó€Ç€·€¿: 'write' ¥ª¥×¥·¥ç¥ó€Ë€è€êÌµžú€Ç€¹"
++
++#, c-format
++msgid ""
++"'readonly' option is set for \"%s\".\n"
++"Do you wish to write anyway?"
++msgstr ""
++"\"%s\" €Ë€Ï 'readonly' ¥ª¥×¥·¥ç¥ó€¬ÀßÄê€µ€ì€Æ€€€Þ€¹.\n"
++"Ÿåœñ€­¶¯À©€ò€·€Þ€¹€«?"
++
++#, c-format
++msgid ""
++"File permissions of \"%s\" are read-only.\n"
++"It may still be possible to write it.\n"
++"Do you wish to try?"
++msgstr ""
++"¥Õ¥¡¥€¥ë \"%s\" €Î¥Ñ¡Œ¥ß¥Ã¥·¥ç¥ó€¬ÆÉ¹þÀìÍÑ€Ç€¹.\n"
++"€œ€ì€Ç€â¶²€é€¯œñ€­¹þ€à€³€È€Ï²ÄÇœ€Ç€¹.\n"
++"·ÑÂ³€·€Þ€¹€«?"
++
++#, c-format
++msgid "E505: \"%s\" is read-only (add ! to override)"
++msgstr "E505: \"%s\" €ÏÆÉ¹þÀìÍÑ€Ç€¹ (¶¯À©œñ¹þ€Ë€Ï ! €òÄÉ²Ã)"
++
++msgid "Edit File"
++msgstr "¥Õ¥¡¥€¥ë€òÊÔœž"
++
++#, c-format
++msgid "E143: Autocommands unexpectedly deleted new buffer %s"
++msgstr "E143: autocommand€¬ÍœŽü€»€º¿·€·€€¥Ð¥Ã¥Õ¥¡ %s €òºïœü€·€Þ€·€¿"
++
++msgid "E144: non-numeric argument to :z"
++msgstr "E144: ¿ô€Ç€Ï€Ê€€°ú¿ô€¬ :z €ËÅÏ€µ€ì€Þ€·€¿"
++
++msgid "E145: Shell commands not allowed in rvim"
++msgstr "E145: rvim€Ç€Ï¥·¥§¥ë¥³¥Þ¥ó¥É€ò»È€š€Þ€»€ó"
++
++msgid "E146: Regular expressions can't be delimited by letters"
++msgstr "E146: Àµµ¬Éœžœ€ÏÊž»ú€Ç¶èÀÚ€ë€³€È€¬€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
++msgstr "%s €ËÃÖŽ¹€·€Þ€¹€«? (y/n/a/q/l/^E/^Y)"
++
++msgid "(Interrupted) "
++msgstr "(³ä¹þ€Þ€ì€Þ€·€¿) "
++
++msgid "1 match"
++msgstr "1 ²Õœê³ºÅö€·€Þ€·€¿"
++
++msgid "1 substitution"
++msgstr "1 ²ÕœêÃÖŽ¹€·€Þ€·€¿"
++
++#, c-format
++msgid "%ld matches"
++msgstr "%ld ²Õœê³ºÅö€·€Þ€·€¿"
++
++#, c-format
++msgid "%ld substitutions"
++msgstr "%ld ²ÕœêÃÖŽ¹€·€Þ€·€¿"
++
++msgid " on 1 line"
++msgstr " (·× 1 ¹ÔÆâ)"
++
++#, c-format
++msgid " on %ld lines"
++msgstr " (·× %ld ¹ÔÆâ)"
++
++msgid "E147: Cannot do :global recursive"
++msgstr "E147: :global €òºÆµ¢Åª€Ë€Ï»È€š€Þ€»€ó"
++
++msgid "E148: Regular expression missing from global"
++msgstr "E148: global¥³¥Þ¥ó¥É€ËÀµµ¬Éœžœ€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "Pattern found in every line: %s"
++msgstr "¥Ñ¥¿¡Œ¥ó€¬ÁŽ€Æ€Î¹Ô€Çž«€Ä€«€ê€Þ€·€¿: %s"
++
++#, c-format
++msgid "Pattern not found: %s"
++msgstr "¥Ñ¥¿¡Œ¥ó€Ïž«€Ä€«€ê€Þ€»€ó€Ç€·€¿: %s"
++
++msgid ""
++"\n"
++"# Last Substitute String:\n"
++"$"
++msgstr ""
++"\n"
++"# ºÇžå€ËÃÖŽ¹€µ€ì€¿Êž»úÎó:\n"
++"$"
++
++msgid "E478: Don't panic!"
++msgstr "E478: ¹²€Æ€Ê€€€Ç€¯€À€µ€€"
++
++#, c-format
++msgid "E661: Sorry, no '%s' help for %s"
++msgstr "E661: »ÄÇ°€Ç€¹€¬ '%s' €Î¥Ø¥ë¥×€¬ %s €Ë€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E149: Sorry, no help for %s"
++msgstr "E149: »ÄÇ°€Ç€¹€¬ %s €Ë€Ï¥Ø¥ë¥×€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "Sorry, help file \"%s\" not found"
++msgstr "»ÄÇ°€Ç€¹€¬¥Ø¥ë¥×¥Õ¥¡¥€¥ë \"%s\" €¬ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E150: Not a directory: %s"
++msgstr "E150: ¥Ç¥£¥ì¥¯¥È¥ê€Ç€Ï€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E152: Cannot open %s for writing"
++msgstr "E152: œñ¹þ€ßÍÑ€Ë %s €ò³«€±€Þ€»€ó"
++
++#, c-format
++msgid "E153: Unable to open %s for reading"
++msgstr "E153: ÆÉ¹þÍÑ€Ë %s €ò³«€±€Þ€»€ó"
++
++# Added at 29-Apr-2004.
++#, c-format
++msgid "E670: Mix of help file encodings within a language: %s"
++msgstr "E670: 1€Ä€ÎžÀžì€Î¥Ø¥ë¥×¥Õ¥¡¥€¥ë€ËÊ£¿ô€Î¥š¥ó¥³¡Œ¥É€¬º®ºß€·€Æ€€€Þ€¹: %s"
++
++#, c-format
++msgid "E154: Duplicate tag \"%s\" in file %s/%s"
++msgstr "E154: ¥¿¥° \"%s\" €¬¥Õ¥¡¥€¥ë %s/%s €ËœÅÊ£€·€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E160: Unknown sign command: %s"
++msgstr "E160: Ì€ÃÎ€Îsign¥³¥Þ¥ó¥É€Ç€¹: %s"
++
++msgid "E156: Missing sign name"
++msgstr "E156: signÌŸ€¬€¢€ê€Þ€»€ó"
++
++msgid "E612: Too many signs defined"
++msgstr "E612: sign€ÎÄêµÁ€¬Â¿¿ôž«€Ä€«€ê€Þ€·€¿"
++
++#, c-format
++msgid "E239: Invalid sign text: %s"
++msgstr "E239: Ìµžú€Êsign€Î¥Æ¥­¥¹¥È€Ç€¹: %s"
++
++#, c-format
++msgid "E155: Unknown sign: %s"
++msgstr "E155: Ì€ÃÎ€Îsign€Ç€¹: %s"
++
++msgid "E159: Missing sign number"
++msgstr "E159: sign€ÎÈÖ¹æ€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E158: Invalid buffer name: %s"
++msgstr "E158: Ìµžú€Ê¥Ð¥Ã¥Õ¥¡ÌŸ€Ç€¹: %s"
++
++#, c-format
++msgid "E157: Invalid sign ID: %ld"
++msgstr "E157: Ìµžú€ÊsignŒ±ÊÌ»Ò€Ç€¹: %ld"
++
++# Added at 27-Jan-2004.
++msgid " (NOT FOUND)"
++msgstr "  (ž«€Ä€«€ê€Þ€»€ó)"
++
++msgid " (not supported)"
++msgstr " (Èó¥µ¥Ý¡Œ¥È)"
++
++msgid "[Deleted]"
++msgstr "[ºïœüºÑ]"
++
++msgid "Entering Debug mode.  Type \"cont\" to continue."
++msgstr "¥Ç¥Ð¥Ã¥°¥â¡Œ¥É€ËÆþ€ê€Þ€¹. Â³€±€ë€Ë€Ï \"cont\" €ÈÆþÎÏ€·€Æ€¯€À€µ€€."
++
++#, c-format
++msgid "line %ld: %s"
++msgstr "¹Ô %ld: %s"
++
++#, c-format
++msgid "cmd: %s"
++msgstr "¥³¥Þ¥ó¥É: %s"
++
++#, c-format
++msgid "Breakpoint in \"%s%s\" line %ld"
++msgstr "¥Ö¥ì¡Œ¥¯¥Ý¥€¥ó¥È \"%s%s\" ¹Ô %ld"
++
++#, c-format
++msgid "E161: Breakpoint not found: %s"
++msgstr "E161: ¥Ö¥ì¡Œ¥¯¥Ý¥€¥ó¥È€¬ž«€Ä€«€ê€Þ€»€ó: %s"
++
++msgid "No breakpoints defined"
++msgstr "¥Ö¥ì¡Œ¥¯¥Ý¥€¥ó¥È€¬ÄêµÁ€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "%3d  %s %s  line %ld"
++msgstr "%3d  %s %s  ¹Ô %ld"
++
++msgid "E750: First use \":profile start {fname}\""
++msgstr "E750: œé€á€Ë \":profile start {fname}\" €òŒÂ¹Ô€·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "Save changes to \"%s\"?"
++msgstr "ÊÑ¹¹€ò \"%s\" €ËÊÝÂž€·€Þ€¹€«?"
++
++msgid "Untitled"
++msgstr "ÌµÂê"
++
++#, c-format
++msgid "E162: No write since last change for buffer \"%s\""
++msgstr "E162: ¥Ð¥Ã¥Õ¥¡ \"%s\" €ÎÊÑ¹¹€ÏÊÝÂž€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
++msgstr "·Ù¹ð: ÍœŽü€»€ºÂŸ¥Ð¥Ã¥Õ¥¡€Ø°ÜÆ°€·€Þ€·€¿ (autocommands €òÄŽ€Ù€Æ€¯€À€µ€€)"
++
++msgid "E163: There is only one file to edit"
++msgstr "E163: ÊÔœž€¹€ë¥Õ¥¡¥€¥ë€Ï1€Ä€·€«€¢€ê€Þ€»€ó"
++
++msgid "E164: Cannot go before first file"
++msgstr "E164: ºÇœé€Î¥Õ¥¡¥€¥ë€è€êÁ°€Ë€Ï¹Ô€±€Þ€»€ó"
++
++msgid "E165: Cannot go beyond last file"
++msgstr "E165: ºÇžå€Î¥Õ¥¡¥€¥ë€ò±Û€š€Æžå€Ë€Ï¹Ô€±€Þ€»€ó"
++
++#, c-format
++msgid "E666: compiler not supported: %s"
++msgstr "E666: €œ€Î¥³¥ó¥Ñ¥€¥é€Ë€ÏÂÐ±þ€·€Æ€€€Þ€»€ó: %s"
++
++#, c-format
++msgid "Searching for \"%s\" in \"%s\""
++msgstr "\"%s\" €ò \"%s\" €«€éž¡º÷Ãæ"
++
++#, c-format
++msgid "Searching for \"%s\""
++msgstr "\"%s\" €òž¡º÷Ãæ"
++
++#, c-format
++msgid "not found in 'runtimepath': \"%s\""
++msgstr "'runtimepath' €ÎÃæ€Ë€Ïž«€Ä€«€ê€Þ€»€ó: \"%s\""
++
++msgid "Source Vim script"
++msgstr "Vim¥¹¥¯¥ê¥×¥È€ÎŒè¹þ€ß"
++
++#, c-format
++msgid "Cannot source a directory: \"%s\""
++msgstr "¥Ç¥£¥ì¥¯¥È¥ê€ÏŒè¹þ€á€Þ€»€ó: \"%s\""
++
++#, c-format
++msgid "could not source \"%s\""
++msgstr "\"%s\" €òŒè¹þ€á€Þ€»€ó"
++
++#, c-format
++msgid "line %ld: could not source \"%s\""
++msgstr "¹Ô %ld: \"%s\" €òŒè¹þ€á€Þ€»€ó"
++
++#, c-format
++msgid "sourcing \"%s\""
++msgstr "\"%s\" €òŒè¹þÃæ"
++
++#, c-format
++msgid "line %ld: sourcing \"%s\""
++msgstr "¹Ô %ld: %s €òŒè¹þÃæ"
++
++#, c-format
++msgid "finished sourcing %s"
++msgstr "%s €ÎŒè¹þ€òŽ°Î»"
++
++msgid "modeline"
++msgstr "¥â¡Œ¥É¹Ô"
++
++msgid "--cmd argument"
++msgstr "--cmd °ú¿ô"
++
++msgid "-c argument"
++msgstr "-c °ú¿ô"
++
++msgid "environment variable"
++msgstr "ŽÄ¶­ÊÑ¿ô"
++
++msgid "error handler"
++msgstr "¥š¥é¡Œ¥Ï¥ó¥É¥é"
++
++msgid "W15: Warning: Wrong line separator, ^M may be missing"
++msgstr "W15: ·Ù¹ð: ¹Ô¶èÀÚ€¬ÉÔÀµ€Ç€¹. ^M €¬€Ê€€€Î€Ç€·€ç€Š"
++
++msgid "E167: :scriptencoding used outside of a sourced file"
++msgstr "E167: :scriptencoding €¬Œè¹þ¥¹¥¯¥ê¥×¥È°Ê³°€Ç»ÈÍÑ€µ€ì€Þ€·€¿"
++
++msgid "E168: :finish used outside of a sourced file"
++msgstr "E168: :finish €¬Œè¹þ¥¹¥¯¥ê¥×¥È°Ê³°€Ç»ÈÍÑ€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "Current %slanguage: \"%s\""
++msgstr "žœºß€Î %sžÀžì: \"%s\""
++
++#, c-format
++msgid "E197: Cannot set language to \"%s\""
++msgstr "E197: žÀžì€ò \"%s\" €ËÀßÄê€Ç€­€Þ€»€ó"
++
++msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
++msgstr "Ex¥â¡Œ¥É€ËÆþ€ê€Þ€¹. ¥Î¡Œ¥Þ¥ë€ËÌá€ë€Ë€Ï\"visual\"€ÈÆþÎÏ€·€Æ€¯€À€µ€€."
++
++msgid "E501: At end-of-file"
++msgstr "E501: ¥Õ¥¡¥€¥ë€ÎœªÎ»°ÌÃÖ"
++
++msgid "E169: Command too recursive"
++msgstr "E169: ¥³¥Þ¥ó¥É€¬ºÆµ¢Åª²á€®€Þ€¹"
++
++#, c-format
++msgid "E605: Exception not caught: %s"
++msgstr "E605: Îã³°€¬ÊáÂª€µ€ì€Þ€»€ó€Ç€·€¿: %s"
++
++msgid "End of sourced file"
++msgstr "Œè¹þ¥Õ¥¡¥€¥ë€ÎºÇžå€Ç€¹"
++
++msgid "End of function"
++msgstr "ŽØ¿ô€ÎºÇžå€Ç€¹"
++
++msgid "E464: Ambiguous use of user-defined command"
++msgstr "E464: ¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€Î€¢€€€Þ€€€Ê»ÈÍÑ€Ç€¹"
++
++msgid "E492: Not an editor command"
++msgstr "E492: ¥š¥Ç¥£¥¿€Î¥³¥Þ¥ó¥É€Ç€Ï€¢€ê€Þ€»€ó"
++
++msgid "E493: Backwards range given"
++msgstr "E493: µÕ€µ€Þ€ÎÈÏ°Ï€¬»ØÄê€µ€ì€Þ€·€¿"
++
++msgid "Backwards range given, OK to swap"
++msgstr "µÕ€µ€Þ€ÎÈÏ°Ï€¬»ØÄê€µ€ì€Þ€·€¿, ÆþÂØ€š€Þ€¹€«?"
++
++msgid "E494: Use w or w>>"
++msgstr "E494: w €â€·€¯€Ï w>> €ò»ÈÍÑ€·€Æ€¯€À€µ€€"
++
++msgid "E319: Sorry, the command is not available in this version"
++msgstr "E319: €³€Î¥Ð¡Œ¥ž¥ç¥ó€Ç€Ï€³€Î¥³¥Þ¥ó¥É€ÏÍøÍÑ€Ç€­€Þ€»€ó, €Ž€á€ó€Ê€µ€€"
++
++msgid "E172: Only one file name allowed"
++msgstr "E172: ¥Õ¥¡¥€¥ëÌŸ€Ï 1 €Ä€Ë€·€Æ€¯€À€µ€€"
++
++msgid "1 more file to edit.  Quit anyway?"
++msgstr "ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬ 1 žÄ€¢€ê€Þ€¹€¬, œªÎ»€·€Þ€¹€«?"
++
++#, c-format
++msgid "%d more files to edit.  Quit anyway?"
++msgstr "ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬€¢€È %d žÄ€¢€ê€Þ€¹€¬, œªÎ»€·€Þ€¹€«?"
++
++msgid "E173: 1 more file to edit"
++msgstr "E173: ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬ 1 žÄ€¢€ê€Þ€¹"
++
++#, c-format
++msgid "E173: %ld more files to edit"
++msgstr "E173: ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬€¢€È %ld žÄ€¢€ê€Þ€¹"
++
++msgid "E174: Command already exists: add ! to replace it"
++msgstr "E174: ¥³¥Þ¥ó¥É€¬Žû€Ë€¢€ê€Þ€¹: ºÆÄêµÁ€¹€ë€Ë€Ï ! €òÄÉ²Ã€·€Æ€¯€À€µ€€"
++
++msgid ""
++"\n"
++"    Name        Args Range Complete  Definition"
++msgstr ""
++"\n"
++"    ÌŸÁ°        °ú¿ô ÈÏ°Ï  ÊäŽ°      ÄêµÁ"
++
++msgid "No user-defined commands found"
++msgstr "¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€¬ž«€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++
++msgid "E175: No attribute specified"
++msgstr "E175: Â°À­€ÏÄêµÁ€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E176: Invalid number of arguments"
++msgstr "E176: °ú¿ô€Î¿ô€¬Ìµžú€Ç€¹"
++
++msgid "E177: Count cannot be specified twice"
++msgstr "E177: ¥«¥Š¥ó¥È€ò2œÅ»ØÄê€¹€ë€³€È€Ï€Ç€­€Þ€»€ó"
++
++msgid "E178: Invalid default value for count"
++msgstr "E178: ¥«¥Š¥ó¥È€ÎŸÊÎ¬ÃÍ€¬Ìµžú€Ç€¹"
++
++msgid "E179: argument required for -complete"
++msgstr "E179: -ÊäŽ°€Î€¿€á€Î°ú¿ô€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "E181: Invalid attribute: %s"
++msgstr "E181: Ìµžú€ÊÂ°À­€Ç€¹: %s"
++
++msgid "E182: Invalid command name"
++msgstr "E182: Ìµžú€Ê¥³¥Þ¥ó¥ÉÌŸ€Ç€¹"
++
++msgid "E183: User defined commands must start with an uppercase letter"
++msgstr "E183: ¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€Ï±ÑÂçÊž»ú€Ç»Ï€Þ€é€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: ÍœÌóÌŸ€Ê€Î€Ç, ¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€ËÍøÍÑ€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E184: No such user-defined command: %s"
++msgstr "E184: €œ€Î¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€Ï€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E180: Invalid complete value: %s"
++msgstr "E180: Ìµžú€ÊÊäŽ°»ØÄê€Ç€¹: %s"
++
++msgid "E468: Completion argument only allowed for custom completion"
++msgstr "E468: ÊäŽ°°ú¿ô€Ï¥«¥¹¥¿¥àÊäŽ°€Ç€·€«»ÈÍÑ€Ç€­€Þ€»€ó"
++
++msgid "E467: Custom completion requires a function argument"
++msgstr "E467: ¥«¥¹¥¿¥àÊäŽ°€Ë€Ï°ú¿ô€È€·€ÆŽØ¿ô€¬É¬Í×€Ç€¹"
++
++msgid "unknown"
++msgstr "ÉÔÌÀ"
++
++#, c-format
++msgid "E185: Cannot find color scheme '%s'"
++msgstr "E185: ¥«¥é¡Œ¥¹¥­¡Œ¥à '%s' €¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "Greetings, Vim user!"
++msgstr "Vim »È€€€µ€ó¡¢€ä€¢!"
++
++msgid "E784: Cannot close last tab page"
++msgstr "E784: ºÇžå€Î¥¿¥Ö¥Ú¡Œ¥ž€òÊÄ€ž€ë€³€È€Ï€Ç€­€Þ€»€ó"
++
++msgid "Already only one tab page"
++msgstr "Žû€Ë¥¿¥Ö¥Ú¡Œ¥ž€Ï1€Ä€·€«€¢€ê€Þ€»€ó"
++
++msgid "Edit File in new window"
++msgstr "¿·€·€€¥Š¥£¥ó¥É¥Š€Ç¥Õ¥¡¥€¥ë€òÊÔœž€·€Þ€¹"
++
++#, c-format
++msgid "Tab page %d"
++msgstr "¥¿¥Ö¥Ú¡Œ¥ž %d"
++
++msgid "No swap file"
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++
++msgid "Append File"
++msgstr "ÄÉ²Ã¥Õ¥¡¥€¥ë"
++
++msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
++msgstr ""
++"E747: ¥Ð¥Ã¥Õ¥¡€¬œ€Àµ€µ€ì€Æ€€€ë€Î€Ç, ¥Ç¥£¥ì¥¯¥È¥ê€òÊÑ¹¹€Ç€­€Þ€»€ó (! €òÄÉ²Ã€Ç"
++"Ÿåœñ)"
++
++msgid "E186: No previous directory"
++msgstr "E186: Á°€Î¥Ç¥£¥ì¥¯¥È¥ê€Ï€¢€ê€Þ€»€ó"
++
++msgid "E187: Unknown"
++msgstr "E187: Ì€ÃÎ"
++
++msgid "E465: :winsize requires two number arguments"
++msgstr "E465: :winsize €Ë€Ï2€Ä€Î¿ôÃÍ€Î°ú¿ô€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "Window position: X %d, Y %d"
++msgstr "¥Š¥£¥ó¥É¥Š°ÌÃÖ: X %d, Y %d"
++
++msgid "E188: Obtaining window position not implemented for this platform"
++msgstr ""
++"E188: €³€Î¥×¥é¥Ã¥È¥Û¡Œ¥à€Ë€Ï¥Š¥£¥ó¥É¥Š°ÌÃÖ€ÎŒèÆÀµ¡Çœ€ÏŒÂÁõ€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E466: :winpos requires two number arguments"
++msgstr "E466: :winpos €Ë€Ï2€Ä€Î¿ôÃÍ€Î°ú¿ô€¬É¬Í×€Ç€¹"
++
++msgid "Save Redirection"
++msgstr "¥ê¥À¥€¥ì¥¯¥È€òÊÝÂž€·€Þ€¹"
++
++msgid "Save View"
++msgstr "¥Ó¥å¡Œ€òÊÝÂž€·€Þ€¹"
++
++msgid "Save Session"
++msgstr "¥»¥Ã¥·¥ç¥óŸðÊó€òÊÝÂž€·€Þ€¹"
++
++msgid "Save Setup"
++msgstr "ÀßÄê€òÊÝÂž€·€Þ€¹"
++
++#, c-format
++msgid "E739: Cannot create directory: %s"
++msgstr "E739: ¥Ç¥£¥ì¥¯¥È¥ê€òºîÀ®€Ç€­€Þ€»€ó: %s"
++
++#, c-format
++msgid "E189: \"%s\" exists (add ! to override)"
++msgstr "E189: \"%s\" €¬Âžºß€·€Þ€¹ (Ÿåœñ€¹€ë€Ë€Ï ! €òÄÉ²Ã€·€Æ€¯€À€µ€€)"
++
++#, c-format
++msgid "E190: Cannot open \"%s\" for writing"
++msgstr "E190: \"%s\" €òœñ¹þ€ßÍÑ€È€·€Æ³«€±€Þ€»€ó"
++
++#. set mark
++msgid "E191: Argument must be a letter or forward/backward quote"
++msgstr "E191: °ú¿ô€Ï1Êž»ú€Î±Ñ»ú€«°úÍÑÉä (' €« `) €Ç€Ê€±€ì€Ð€€€±€Þ€»€ó"
++
++msgid "E192: Recursive use of :normal too deep"
++msgstr "E192: :normal €ÎºÆµ¢ÍøÍÑ€¬¿Œ€¯€Ê€ê²á€®€Þ€·€¿"
++
++msgid "E809: #< is not available without the +eval feature"
++msgstr "E809: #< €Ï +eval µ¡Çœ€¬Ìµ€€€ÈÍøÍÑ€Ç€­€Þ€»€ó"
++
++msgid "E194: No alternate file name to substitute for '#'"
++msgstr "E194: '#'€òÃÖ€­Ž¹€š€ëÉû¥Õ¥¡¥€¥ë€ÎÌŸÁ°€¬€¢€ê€Þ€»€ó"
++
++msgid "E495: no autocommand file name to substitute for \"<afile>\""
++msgstr "E495: \"<afile>\"€òÃÖ€­Ž¹€š€ëautocommand€Î¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++
++msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
++msgstr "E496: \"<abuf>\"€òÃÖ€­Ž¹€š€ëautocommand¥Ð¥Ã¥Õ¥¡ÈÖ¹æ€¬€¢€ê€Þ€»€ó"
++
++msgid "E497: no autocommand match name to substitute for \"<amatch>\""
++msgstr "E497: \"<amatch>\"€òÃÖ€­Ž¹€š€ëautocommand€Î³ºÅöÌŸ€¬€¢€ê€Þ€»€ó"
++
++msgid "E498: no :source file name to substitute for \"<sfile>\""
++msgstr "E498: \"<sfile>\"€òÃÖ€­Ž¹€š€ë :source ÂÐŸÝ¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: \"<slnum>\"€òÃÖ€­Ž¹€š€ë¹ÔÈÖ¹æ€¬€¢€ê€Þ€»€ó"
++
++#, no-c-format
++msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
++msgstr ""
++"E499: '%' €ä '#' €¬ÌµÌŸ¥Õ¥¡¥€¥ë€Ê€Î€Ç \":p:h\" €òÈŒ€ï€Ê€€»È€€Êý€Ï€Ç€­€Þ€»€ó"
++
++msgid "E500: Evaluates to an empty string"
++msgstr "E500: ¶õÊž»úÎó€È€·€ÆÉŸ²Á€µ€ì€Þ€·€¿"
++
++msgid "E195: Cannot open viminfo file for reading"
++msgstr "E195: viminfo¥Õ¥¡¥€¥ë€òÆÉ¹þÍÑ€È€·€Æ³«€±€Þ€»€ó"
++
++msgid "E196: No digraphs in this version"
++msgstr "E196: €³€Î¥Ð¡Œ¥ž¥ç¥ó€Ë¹ç»ú€Ï€¢€ê€Þ€»€ó"
++
++msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
++msgstr "E608: 'Vim' €Ç»Ï€Þ€ëÎã³°€Ï :throw €Ç€­€Þ€»€ó"
++
++#. always scroll up, don't overwrite
++#, c-format
++msgid "Exception thrown: %s"
++msgstr "Îã³°€¬È¯Àž€·€Þ€·€¿: %s"
++
++#, c-format
++msgid "Exception finished: %s"
++msgstr "Îã³°€¬ŒýÂ«€·€Þ€·€¿: %s"
++
++#, c-format
++msgid "Exception discarded: %s"
++msgstr "Îã³°€¬ÇËŽþ€µ€ì€Þ€·€¿: %s"
++
++#, c-format
++msgid "%s, line %ld"
++msgstr "%s, ¹Ô %ld"
++
++#. always scroll up, don't overwrite
++#, c-format
++msgid "Exception caught: %s"
++msgstr "Îã³°€¬ÊáÂª€µ€ì€Þ€·€¿: %s"
++
++#, c-format
++msgid "%s made pending"
++msgstr "%s €Ë€è€êÌ€·èÄêŸõÂÖ€¬Àž€ž€Þ€·€¿"
++
++#, c-format
++msgid "%s resumed"
++msgstr "%s €¬ºÆ³«€·€Þ€·€¿"
++
++#, c-format
++msgid "%s discarded"
++msgstr "%s €¬ÇËŽþ€µ€ì€Þ€·€¿"
++
++msgid "Exception"
++msgstr "Îã³°"
++
++msgid "Error and interrupt"
++msgstr "¥š¥é¡Œ€È³ä¹þ€ß"
++
++msgid "Error"
++msgstr "¥š¥é¡Œ"
++
++#. if (pending & CSTP_INTERRUPT)
++msgid "Interrupt"
++msgstr "³ä¹þ€ß"
++
++msgid "E579: :if nesting too deep"
++msgstr "E579: :if €ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++msgid "E580: :endif without :if"
++msgstr "E580: :if €Î€Ê€€ :endif €¬€¢€ê€Þ€¹"
++
++msgid "E581: :else without :if"
++msgstr "E581: :if €Î€Ê€€ :else €¬€¢€ê€Þ€¹"
++
++msgid "E582: :elseif without :if"
++msgstr "E582: :if €Î€Ê€€ :elseif €¬€¢€ê€Þ€¹"
++
++msgid "E583: multiple :else"
++msgstr "E583: Ê£¿ô€Î :else €¬€¢€ê€Þ€¹"
++
++msgid "E584: :elseif after :else"
++msgstr "E584: :else €Îžå€Ë :elseif €¬€¢€ê€Þ€¹"
++
++msgid "E585: :while/:for nesting too deep"
++msgstr "E585: :while €ä :for €ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++msgid "E586: :continue without :while or :for"
++msgstr "E586: :while €ä :for €Î€Ê€€ :continue €¬€¢€ê€Þ€¹"
++
++msgid "E587: :break without :while or :for"
++msgstr "E587: :while €ä :for €Î€Ê€€ :break €¬€¢€ê€Þ€¹"
++
++msgid "E732: Using :endfor with :while"
++msgstr "E732: :endfor €ò :while €ÈÁÈ€ß¹ç€ï€»€Æ€€€Þ€¹"
++
++msgid "E733: Using :endwhile with :for"
++msgstr "E733: :endwhile €ò :for €ÈÁÈ€ß¹ç€ï€»€Æ€€€Þ€¹"
++
++msgid "E601: :try nesting too deep"
++msgstr "E601: :try €ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++msgid "E603: :catch without :try"
++msgstr "E603: :try €Î€Ê€€ :catch €¬€¢€ê€Þ€¹"
++
++#. Give up for a ":catch" after ":finally" and ignore it.
++#. * Just parse.
++msgid "E604: :catch after :finally"
++msgstr "E604: :finally €Îžå€Ë :catch €¬€¢€ê€Þ€¹"
++
++msgid "E606: :finally without :try"
++msgstr "E606: :try €Î€Ê€€ :finally €¬€¢€ê€Þ€¹"
++
++#. Give up for a multiple ":finally" and ignore it.
++msgid "E607: multiple :finally"
++msgstr "E607: Ê£¿ô€Î :finally €¬€¢€ê€Þ€¹"
++
++msgid "E602: :endtry without :try"
++msgstr "E602: :try €Î€Ê€€ :endtry €Ç€¹"
++
++msgid "E193: :endfunction not inside a function"
++msgstr "E193: ŽØ¿ô€Î³°€Ë :endfunction €¬€¢€ê€Þ€·€¿"
++
++msgid "E788: Not allowed to edit another buffer now"
++msgstr "E788: žœºß€ÏÂŸ€Î¥Ð¥Ã¥Õ¥¡€òÊÔœž€¹€ë€³€È€Ïµö€µ€ì€Þ€»€ó"
++
++msgid "E811: Not allowed to change buffer information now"
++msgstr "E811: žœºß€Ï¥Ð¥Ã¥Õ¥¡ŸðÊó€òÊÑ¹¹€¹€ë€³€È€Ïµö€µ€ì€Þ€»€ó"
++
++msgid "tagname"
++msgstr "¥¿¥°ÌŸ"
++
++msgid " kind file\n"
++msgstr " ¥Õ¥¡¥€¥ëŒïÎà\n"
++
++msgid "'history' option is zero"
++msgstr "¥ª¥×¥·¥ç¥ó 'history' €¬¥Œ¥í€Ç€¹"
++
++#, c-format
++msgid ""
++"\n"
++"# %s History (newest to oldest):\n"
++msgstr ""
++"\n"
++"# %s ¹àÌÜ€ÎÍúÎò (¿·€·€€€â€Î€«€éžÅ€€€â€Î€Ø):\n"
++
++msgid "Command Line"
++msgstr "¥³¥Þ¥ó¥É¥é¥€¥ó"
++
++msgid "Search String"
++msgstr "ž¡º÷Êž»úÎó"
++
++msgid "Expression"
++msgstr "Œ°"
++
++msgid "Input Line"
++msgstr "ÆþÎÏ¹Ô"
++
++msgid "E198: cmd_pchar beyond the command length"
++msgstr "E198: cmd_pchar €¬¥³¥Þ¥ó¥ÉÄ¹€òÄ¶€š€Þ€·€¿"
++
++msgid "E199: Active window or buffer deleted"
++msgstr "E199: ¥¢¥¯¥Æ¥£¥Ö€Ê¥Š¥£¥ó¥É¥Š€«¥Ð¥Ã¥Õ¥¡€¬ºïœü€µ€ì€Þ€·€¿"
++
++msgid "E812: Autocommands changed buffer or buffer name"
++msgstr "E812: autocommand€¬¥Ð¥Ã¥Õ¥¡€«¥Ð¥Ã¥Õ¥¡ÌŸ€òÊÑ¹¹€·€Þ€·€¿"
++
++msgid "Illegal file name"
++msgstr "ÉÔÀµ€Ê¥Õ¥¡¥€¥ëÌŸ"
++
++msgid "is a directory"
++msgstr " €Ï¥Ç¥£¥ì¥¯¥È¥ê€Ç€¹"
++
++msgid "is not a file"
++msgstr " €Ï¥Õ¥¡¥€¥ë€Ç€Ï€¢€ê€Þ€»€ó"
++
++msgid "is a device (disabled with 'opendevice' option)"
++msgstr " €Ï¥Ç¥Ð¥€¥¹€Ç€¹ ('opendevice' ¥ª¥×¥·¥ç¥ó€Ç²óÈò€Ç€­€Þ€¹)"
++
++msgid "[New File]"
++msgstr "[¿·¥Õ¥¡¥€¥ë]"
++
++msgid "[New DIRECTORY]"
++msgstr "[¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê]"
++
++msgid "[File too big]"
++msgstr "[¥Õ¥¡¥€¥ë²áÂç]"
++
++msgid "[Permission Denied]"
++msgstr "[Ç§²Ä€¬€¢€ê€Þ€»€ó]"
++
++msgid "E200: *ReadPre autocommands made the file unreadable"
++msgstr "E200: *ReadPre autocommand €¬¥Õ¥¡¥€¥ë€òÆÉ¹þÉÔ²Ä€Ë€·€Þ€·€¿"
++
++msgid "E201: *ReadPre autocommands must not change current buffer"
++msgstr "E201: *ReadPre autocommand €Ïžœºß€Î¥Ð¥Ã¥Õ¥¡€òÊÑ€š€é€ì€Þ€»€ó"
++
++msgid "Vim: Reading from stdin...\n"
++msgstr "Vim: ÉžœàÆþÎÏ€«€éÆÉ¹þÃæ...\n"
++
++msgid "Reading from stdin..."
++msgstr "ÉžœàÆþÎÏ€«€éÆÉ¹þ€ßÃæ..."
++
++#. Re-opening the original file failed!
++msgid "E202: Conversion made file unreadable!"
++msgstr "E202: ÊÑŽ¹€¬¥Õ¥¡¥€¥ë€òÆÉ¹þÉÔ²Ä€Ë€·€Þ€·€¿"
++
++msgid "[fifo/socket]"
++msgstr "[FIFO/¥œ¥±¥Ã¥È]"
++
++msgid "[fifo]"
++msgstr "[FIFO]"
++
++msgid "[socket]"
++msgstr "[¥œ¥±¥Ã¥È]"
++
++msgid "[character special]"
++msgstr "[¥­¥ã¥é¥¯¥¿¡Š¥Ç¥Ð¥€¥¹]"
++
++msgid "[RO]"
++msgstr "[ÆÉÀì]"
++
++msgid "[CR missing]"
++msgstr "[CRÌµ]"
++
++msgid "[long lines split]"
++msgstr "[Ä¹¹ÔÊ¬³ä]"
++
++msgid "[NOT converted]"
++msgstr "[Ì€ÊÑŽ¹]"
++
++msgid "[converted]"
++msgstr "[ÊÑŽ¹ºÑ]"
++
++msgid "[blowfish]"
++msgstr "[blowfish°Å¹æ²œ]"
++
++msgid "[crypted]"
++msgstr "[°Å¹æ²œ]"
++
++#, c-format
++msgid "[CONVERSION ERROR in line %ld]"
++msgstr "[%ld ¹ÔÌÜ€ÇÊÑŽ¹¥š¥é¡Œ]"
++
++#, c-format
++msgid "[ILLEGAL BYTE in line %ld]"
++msgstr "[%ld ¹ÔÌÜ€ÎÉÔÀµ€Ê¥Ð¥€¥È]"
++
++msgid "[READ ERRORS]"
++msgstr "[ÆÉ¹þ¥š¥é¡Œ]"
++
++msgid "Can't find temp file for conversion"
++msgstr "ÊÑŽ¹€ËÉ¬Í×€Ê°ì»þ¥Õ¥¡¥€¥ë€¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "Conversion with 'charconvert' failed"
++msgstr "'charconvert' €Ë€è€ëÊÑŽ¹€¬ŒºÇÔ€·€Þ€·€¿"
++
++msgid "can't read output of 'charconvert'"
++msgstr "'charconvert' €ÎœÐÎÏ€òÆÉ¹þ€á€Þ€»€ó€Ç€·€¿"
++
++msgid "E821: File is encrypted with unknown method"
++msgstr "E821: ¥Õ¥¡¥€¥ë€¬Ì€ÃÎ€ÎÊýË¡€Ç°Å¹æ²œ€µ€ì€Æ€€€Þ€¹"
++
++msgid "E676: No matching autocommands for acwrite buffer"
++msgstr "E676: acwrite¥Ð¥Ã¥Õ¥¡€Î³ºÅö€¹€ëautocommand€ÏÂžºß€·€Þ€»€ó"
++
++msgid "E203: Autocommands deleted or unloaded buffer to be written"
++msgstr "E203: ÊÝÂž€¹€ë¥Ð¥Ã¥Õ¥¡€òautocommand€¬ºïœü€«²òÊü€·€Þ€·€¿"
++
++msgid "E204: Autocommand changed number of lines in unexpected way"
++msgstr "E204: autocommand€¬ÍœŽü€»€ÌÊýË¡€Ç¹Ô¿ô€òÊÑ¹¹€·€Þ€·€¿"
++
++# Added at 19-Jan-2004.
++msgid "NetBeans disallows writes of unmodified buffers"
++msgstr "NetBeans€ÏÌ€ÊÑ¹¹€Î¥Ð¥Ã¥Õ¥¡€òŸåœñ€¹€ë€³€È€Ïµö²Ä€·€Æ€€€Þ€»€ó"
++
++msgid "Partial writes disallowed for NetBeans buffers"
++msgstr "NetBeans¥Ð¥Ã¥Õ¥¡€Î°ìÉô€òœñ€­œÐ€¹€³€È€Ï€Ç€­€Þ€»€ó"
++
++msgid "is not a file or writable device"
++msgstr "€Ï¥Õ¥¡¥€¥ë€Ç€âœñ¹þ€ß²ÄÇœ¥Ç¥Ð¥€¥¹€Ç€â€¢€ê€Þ€»€ó"
++
++msgid "writing to device disabled with 'opendevice' option"
++msgstr "'opendevice' ¥ª¥×¥·¥ç¥ó€Ë€è€ê¥Ç¥Ð¥€¥¹€Ø€Îœñ€­¹þ€ß€Ï€Ç€­€Þ€»€ó"
++
++msgid "is read-only (add ! to override)"
++msgstr "€ÏÆÉ¹þÀìÍÑ€Ç€¹ (¶¯À©œñ¹þ€Ë€Ï ! €òÄÉ²Ã)"
++
++msgid "E506: Can't write to backup file (add ! to override)"
++msgstr "E506: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òÊÝÂž€Ç€­€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ÊÝÂž)"
++
++msgid "E507: Close error for backup file (add ! to override)"
++msgstr ""
++"E507: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òÊÄ€ž€ëºÝ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿ (! €òÄÉ²Ã€Ç¶¯À©)"
++
++msgid "E508: Can't read file for backup (add ! to override)"
++msgstr "E508: ¥Ð¥Ã¥¯¥¢¥Ã¥×ÍÑ¥Õ¥¡¥€¥ë€òÆÉ¹þ€á€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ÆÉ¹þ)"
++
++msgid "E509: Cannot create backup file (add ! to override)"
++msgstr "E509: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òºî€ì€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ºîÀ®)"
++
++msgid "E510: Can't make backup file (add ! to override)"
++msgstr "E510: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òºî€ì€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ºîÀ®)"
++
++msgid "E460: The resource fork would be lost (add ! to override)"
++msgstr "E460: ¥ê¥œ¡Œ¥¹¥Õ¥©¡Œ¥¯€¬Œº€ï€ì€ë€«€â€·€ì€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©)"
++
++msgid "E214: Can't find temp file for writing"
++msgstr "E214: ÊÝÂžÍÑ°ì»þ¥Õ¥¡¥€¥ë€¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E213: Cannot convert (add ! to write without conversion)"
++msgstr "E213: ÊÑŽ¹€Ç€­€Þ€»€ó (! €òÄÉ²Ã€ÇÊÑŽ¹€»€º€ËÊÝÂž)"
++
++msgid "E166: Can't open linked file for writing"
++msgstr "E166: ¥ê¥ó¥¯€µ€ì€¿¥Õ¥¡¥€¥ë€Ëœñ¹þ€á€Þ€»€ó"
++
++msgid "E212: Can't open file for writing"
++msgstr "E212: œñ¹þ€ßÍÑ€Ë¥Õ¥¡¥€¥ë€ò³«€±€Þ€»€ó"
++
++msgid "E667: Fsync failed"
++msgstr "E667: fsync €ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E512: Close failed"
++msgstr "E512: ÊÄ€ž€ë€³€È€ËŒºÇÔ"
++
++msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
++msgstr "E513: œñ¹þ€ß¥š¥é¡Œ, ÊÑŽ¹ŒºÇÔ (Ÿåœñ€¹€ë€Ë€Ï 'fenc' €ò¶õ€Ë€·€Æ€¯€À€µ€€)"
++
++#, c-format
++msgid ""
++"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
++"override)"
++msgstr ""
++"E513: œñ¹þ€ß¥š¥é¡Œ, ÊÑŽ¹ŒºÇÔ, ¹Ô¿ô %ld (Ÿåœñ€¹€ë€Ë€Ï 'fenc' €ò¶õ€Ë€·€Æ€¯€À€µ"
++"€€)"
++
++msgid "E514: write error (file system full?)"
++msgstr "E514: œñ¹þ€ß¥š¥é¡Œ, (¥Õ¥¡¥€¥ë¥·¥¹¥Æ¥à€¬ËþÇÕ?)"
++
++msgid " CONVERSION ERROR"
++msgstr " ÊÑŽ¹¥š¥é¡Œ"
++
++#, c-format
++msgid " in line %ld;"
++msgstr "¹Ô %ld;"
++
++msgid "[Device]"
++msgstr "[¥Ç¥Ð¥€¥¹]"
++
++msgid "[New]"
++msgstr "[¿·]"
++
++msgid " [a]"
++msgstr " [a]"
++
++msgid " appended"
++msgstr " ÄÉ²Ã"
++
++msgid " [w]"
++msgstr " [w]"
++
++msgid " written"
++msgstr " œñ¹þ€ß"
++
++msgid "E205: Patchmode: can't save original file"
++msgstr "E205: patchmode: ž¶ËÜ¥Õ¥¡¥€¥ë€òÊÝÂž€Ç€­€Þ€»€ó"
++
++msgid "E206: patchmode: can't touch empty original file"
++msgstr "E206: patchmode: ¶õ€Îž¶ËÜ¥Õ¥¡¥€¥ë€òtouch€Ç€­€Þ€»€ó"
++
++msgid "E207: Can't delete backup file"
++msgstr "E207: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òŸÃ€»€Þ€»€ó"
++
++msgid ""
++"\n"
++"WARNING: Original file may be lost or damaged\n"
++msgstr ""
++"\n"
++"·Ù¹ð: ž¶ËÜ¥Õ¥¡¥€¥ë€¬Œº€ï€ì€¿€«ÊÑ¹¹€µ€ì€Þ€·€¿\n"
++
++msgid "don't quit the editor until the file is successfully written!"
++msgstr "¥Õ¥¡¥€¥ë€ÎÊÝÂž€ËÀ®žù€¹€ë€Þ€Ç¥š¥Ç¥£¥¿€òœªÎ»€·€Ê€€€Ç€¯€À€µ€€!"
++
++msgid "[dos]"
++msgstr "[dos]"
++
++msgid "[dos format]"
++msgstr "[dos¥Õ¥©¡Œ¥Þ¥Ã¥È]"
++
++msgid "[mac]"
++msgstr "[mac]"
++
++msgid "[mac format]"
++msgstr "[mac¥Õ¥©¡Œ¥Þ¥Ã¥È]"
++
++msgid "[unix]"
++msgstr "[unix]"
++
++msgid "[unix format]"
++msgstr "[unix¥Õ¥©¡Œ¥Þ¥Ã¥È]"
++
++msgid "1 line, "
++msgstr "1 ¹Ô, "
++
++#, c-format
++msgid "%ld lines, "
++msgstr "%ld ¹Ô, "
++
++msgid "1 character"
++msgstr "1 Êž»ú"
++
++#, c-format
++msgid "%lld characters"
++msgstr "%lld Êž»ú"
++
++#. Explicit typecast avoids warning on Mac OS X 10.6
++#, c-format
++msgid "%ld characters"
++msgstr "%ld Êž»ú"
++
++msgid "[noeol]"
++msgstr "[noeol]"
++
++msgid "[Incomplete last line]"
++msgstr "[ºÇœª¹Ô€¬ÉÔŽ°ÁŽ]"
++
++#. don't overwrite messages here
++#. must give this prompt
++#. don't use emsg() here, don't want to flush the buffers
++msgid "WARNING: The file has been changed since reading it!!!"
++msgstr "·Ù¹ð: ÆÉ¹þ€ó€Àžå€Ë¥Õ¥¡¥€¥ë€ËÊÑ¹¹€¬€¢€ê€Þ€·€¿!!!"
++
++msgid "Do you really want to write to it"
++msgstr "ËÜÅö€ËŸåœñ€­€·€Þ€¹€«"
++
++#, c-format
++msgid "E208: Error writing to \"%s\""
++msgstr "E208: \"%s\" €òœñ¹þ€ßÃæ€Î¥š¥é¡Œ€Ç€¹"
++
++#, c-format
++msgid "E209: Error closing \"%s\""
++msgstr "E209: \"%s\" €òÊÄ€ž€ë»þ€Ë¥š¥é¡Œ€Ç€¹"
++
++#, c-format
++msgid "E210: Error reading \"%s\""
++msgstr "E210: \"%s\" €òÆÉ¹þÃæ€Î¥š¥é¡Œ€Ç€¹"
++
++msgid "E246: FileChangedShell autocommand deleted buffer"
++msgstr "E246: autocommand €Î FileChangedShell €¬¥Ð¥Ã¥Õ¥¡€òºïœü€·€Þ€·€¿"
++
++#, c-format
++msgid "E211: File \"%s\" no longer available"
++msgstr "E211: ¥Õ¥¡¥€¥ë \"%s\" €ÏŽû€ËÂžºß€·€Þ€»€ó"
++
++#, c-format
++msgid ""
++"W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
++"well"
++msgstr "W12: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €¬ÊÑ¹¹€µ€ìVim€Î¥Ð¥Ã¥Õ¥¡€âÊÑ¹¹€µ€ì€Þ€·€¿"
++
++msgid "See \":help W12\" for more info."
++msgstr "ŸÜºÙ€Ï \":help W12\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "W11: Warning: File \"%s\" has changed since editing started"
++msgstr "W11: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €ÏÊÔœž³«»Ïžå€ËÊÑ¹¹€µ€ì€Þ€·€¿"
++
++msgid "See \":help W11\" for more info."
++msgstr "ŸÜºÙ€Ï \":help W11\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
++msgstr "W16: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €Î¥â¡Œ¥É€¬ÊÔœž³«»Ïžå€ËÊÑ¹¹€µ€ì€Þ€·€¿"
++
++msgid "See \":help W16\" for more info."
++msgstr "ŸÜºÙ€Ï \":help W16\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "W13: Warning: File \"%s\" has been created after editing started"
++msgstr "W13: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €ÏÊÔœž³«»Ïžå€ËºîÀ®€µ€ì€Þ€·€¿"
++
++msgid "Warning"
++msgstr "·Ù¹ð"
++
++msgid ""
++"&OK\n"
++"&Load File"
++msgstr ""
++"&OK\n"
++"¥Õ¥¡¥€¥ëÆÉ¹þ(&L)"
++
++#, c-format
++msgid "E462: Could not prepare for reloading \"%s\""
++msgstr "E462: \"%s\" €ò¥ê¥í¡Œ¥É€¹€ëœàÈ÷€¬€Ç€­€Þ€»€ó€Ç€·€¿"
++
++#, c-format
++msgid "E321: Could not reload \"%s\""
++msgstr "E321: \"%s\" €Ï¥ê¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "--Deleted--"
++msgstr "--ºïœüºÑ--"
++
++#, c-format
++msgid "auto-removing autocommand: %s <buffer=%d>"
++msgstr "autocommand: %s <¥Ð¥Ã¥Õ¥¡=%d> €¬Œ«Æ°Åª€Ëºïœü€µ€ì€Þ€¹"
++
++#. the group doesn't exist
++#, c-format
++msgid "E367: No such group: \"%s\""
++msgstr "E367: €œ€Î¥°¥ë¡Œ¥×€Ï€¢€ê€Þ€»€ó: \"%s\""
++
++#, c-format
++msgid "E215: Illegal character after *: %s"
++msgstr "E215: * €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿: %s"
++
++#, c-format
++msgid "E216: No such event: %s"
++msgstr "E216: €œ€Î€è€Š€Ê¥€¥Ù¥ó¥È€Ï€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E216: No such group or event: %s"
++msgstr "E216: €œ€Î€è€Š€Ê¥°¥ë¡Œ¥×€â€·€¯€Ï¥€¥Ù¥ó¥È€Ï€¢€ê€Þ€»€ó: %s"
++
++#. Highlight title
++msgid ""
++"\n"
++"--- Auto-Commands ---"
++msgstr ""
++"\n"
++"--- Auto-Commands ---"
++
++#, c-format
++msgid "E680: <buffer=%d>: invalid buffer number "
++msgstr "E680: <¥Ð¥Ã¥Õ¥¡=%d>: Ìµžú€Ê¥Ð¥Ã¥Õ¥¡ÈÖ¹æ€Ç€¹ "
++
++msgid "E217: Can't execute autocommands for ALL events"
++msgstr "E217: ÁŽ€Æ€Î¥€¥Ù¥ó¥È€ËÂÐ€·€Æ€Îautocommand€ÏŒÂ¹Ô€Ç€­€Þ€»€ó"
++
++msgid "No matching autocommands"
++msgstr "³ºÅö€¹€ëautocommand€ÏÂžºß€·€Þ€»€ó"
++
++msgid "E218: autocommand nesting too deep"
++msgstr "E218: autocommand€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++#, c-format
++msgid "%s Auto commands for \"%s\""
++msgstr "%s Auto commands for \"%s\""
++
++#, c-format
++msgid "Executing %s"
++msgstr "%s €òŒÂ¹Ô€·€Æ€€€Þ€¹"
++
++#, c-format
++msgid "autocommand %s"
++msgstr "autocommand %s"
++
++msgid "E219: Missing {."
++msgstr "E219: { €¬€¢€ê€Þ€»€ó."
++
++msgid "E220: Missing }."
++msgstr "E220: } €¬€¢€ê€Þ€»€ó."
++
++msgid "E490: No fold found"
++msgstr "E490: ÀÞŸö€ß€¬€¢€ê€Þ€»€ó"
++
++msgid "E350: Cannot create fold with current 'foldmethod'"
++msgstr "E350: žœºß€Î 'foldmethod' €Ç€ÏÀÞŸö€ß€òºîÀ®€Ç€­€Þ€»€ó"
++
++msgid "E351: Cannot delete fold with current 'foldmethod'"
++msgstr "E351: žœºß€Î 'foldmethod' €Ç€ÏÀÞŸö€ß€òºïœü€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "+--%3ld lines folded "
++msgstr "+--%3ld ¹Ô€¬ÀÞŸö€Þ€ì€Þ€·€¿ "
++
++msgid "E222: Add to read buffer"
++msgstr "E222: ÆÉ¹þ¥Ð¥Ã¥Õ¥¡€ØÄÉ²Ã"
++
++msgid "E223: recursive mapping"
++msgstr "E223: ºÆµ¢Åª¥Þ¥Ã¥Ô¥ó¥°"
++
++#, c-format
++msgid "E224: global abbreviation already exists for %s"
++msgstr "E224: %s €È€€€Š¥°¥í¡Œ¥Ð¥ëÃ»œÌÆþÎÏ€ÏŽû€ËÂžºß€·€Þ€¹"
++
++#, c-format
++msgid "E225: global mapping already exists for %s"
++msgstr "E225: %s €È€€€Š¥°¥í¡Œ¥Ð¥ë¥Þ¥Ã¥Ô¥ó¥°€ÏŽû€ËÂžºß€·€Þ€¹"
++
++#, c-format
++msgid "E226: abbreviation already exists for %s"
++msgstr "E226: %s €È€€€ŠÃ»œÌÆþÎÏ€ÏŽû€ËÂžºß€·€Þ€¹"
++
++#, c-format
++msgid "E227: mapping already exists for %s"
++msgstr "E227: %s €È€€€Š¥Þ¥Ã¥Ô¥ó¥°€ÏŽû€ËÂžºß€·€Þ€¹"
++
++msgid "No abbreviation found"
++msgstr "Ã»œÌÆþÎÏ€Ïž«€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++
++msgid "No mapping found"
++msgstr "¥Þ¥Ã¥Ô¥ó¥°€Ïž«€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++
++msgid "E228: makemap: Illegal mode"
++msgstr "E228: makemap: ÉÔÀµ€Ê¥â¡Œ¥É"
++
++msgid "E851: Failed to create a new process for the GUI"
++msgstr "E851: GUIÍÑ€Î¥×¥í¥»¥¹€Îµ¯Æ°€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E852: The child process failed to start the GUI"
++msgstr "E852: »Ò¥×¥í¥»¥¹€¬GUI€Îµ¯Æ°€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E229: Cannot start the GUI"
++msgstr "E229: GUI€ò³«»Ï€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E230: Cannot read from \"%s\""
++msgstr "E230: \"%s\"€«€éÆÉ¹þ€à€³€È€¬€Ç€­€Þ€»€ó"
++
++msgid "E665: Cannot start GUI, no valid font found"
++msgstr "E665: Í­žú€Ê¥Õ¥©¥ó¥È€¬ž«€Ä€«€é€Ê€€€Î€Ç, GUI€ò³«»Ï€Ç€­€Þ€»€ó"
++
++msgid "E231: 'guifontwide' invalid"
++msgstr "E231: 'guifontwide' €¬Ìµžú€Ç€¹"
++
++msgid "E599: Value of 'imactivatekey' is invalid"
++msgstr "E599: 'imactivatekey' €ËÀßÄê€µ€ì€¿ÃÍ€¬Ìµžú€Ç€¹"
++
++#, c-format
++msgid "E254: Cannot allocate color %s"
++msgstr "E254: %s €Î¿§€ò³ä€êÅö€Æ€é€ì€Þ€»€ó"
++
++msgid "No match at cursor, finding next"
++msgstr "¥«¡Œ¥œ¥ë€Î°ÌÃÖ€Ë¥Þ¥Ã¥Á€Ï€¢€ê€Þ€»€ó, Œ¡€òž¡º÷€·€Æ€€€Þ€¹"
++
++msgid "<cannot open> "
++msgstr "<³«€±€Þ€»€ó> "
++
++#, c-format
++msgid "E616: vim_SelFile: can't get font %s"
++msgstr "E616: vim_SelFile: ¥Õ¥©¥ó¥È %s €òŒèÆÀ€Ç€­€Þ€»€ó"
++
++msgid "E614: vim_SelFile: can't return to current directory"
++msgstr "E614: vim_SelFile: žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê€ËÌá€ì€Þ€»€ó"
++
++msgid "Pathname:"
++msgstr "¥Ñ¥¹ÌŸ:"
++
++msgid "E615: vim_SelFile: can't get current directory"
++msgstr "E615: vim_SelFile: žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê€òŒèÆÀ€Ç€­€Þ€»€ó"
++
++msgid "OK"
++msgstr "OK"
++
++msgid "Cancel"
++msgstr "¥­¥ã¥ó¥»¥ë"
++
++msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
++msgstr "¥¹¥¯¥í¡Œ¥ë¥Ð¡Œ: ²èÁü€òŒèÆÀ€Ç€­€Þ€»€ó€Ç€·€¿."
++
++msgid "Vim dialog"
++msgstr "Vim ¥À¥€¥¢¥í¥°"
++
++msgid "E232: Cannot create BalloonEval with both message and callback"
++msgstr "E232: ¥á¥Ã¥»¡Œ¥ž€È¥³¡Œ¥ë¥Ð¥Ã¥¯€Î€¢€ë BalloonEval €òºîÀ®€Ç€­€Þ€»€ó"
++
++msgid ""
++"&Yes\n"
++"&No\n"
++"&Cancel"
++msgstr ""
++"€Ï€€(&Y)\n"
++"€€€€€š(&N)\n"
++"¥­¥ã¥ó¥»¥ë(&C)"
++
++msgid "Input _Methods"
++msgstr "¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É"
++
++msgid "VIM - Search and Replace..."
++msgstr "VIM - ž¡º÷€ÈÃÖŽ¹..."
++
++msgid "VIM - Search..."
++msgstr "VIM - ž¡º÷..."
++
++msgid "Find what:"
++msgstr "ž¡º÷Êž»úÎó:"
++
++msgid "Replace with:"
++msgstr "ÃÖŽ¹Êž»úÎó:"
++
++#. whole word only button
++msgid "Match whole word only"
++msgstr "Àµ³Î€Ë³ºÅö€¹€ë€â€Î€À€±"
++
++#. match case button
++msgid "Match case"
++msgstr "ÂçÊž»ú/Ÿ®Êž»ú€ò¶èÊÌ€¹€ë"
++
++msgid "Direction"
++msgstr "Êýžþ"
++
++#. 'Up' and 'Down' buttons
++msgid "Up"
++msgstr "Ÿå"
++
++msgid "Down"
++msgstr "²Œ"
++
++#. 'Find Next' button
++msgid "Find Next"
++msgstr "Œ¡€òž¡º÷"
++
++#. 'Replace' button
++msgid "Replace"
++msgstr "ÃÖŽ¹"
++
++#. 'Replace All' button
++msgid "Replace All"
++msgstr "ÁŽ€ÆÃÖŽ¹"
++
++msgid "Vim: Received \"die\" request from session manager\n"
++msgstr "Vim: ¥»¥Ã¥·¥ç¥ó¥Þ¥Í¡Œ¥ž¥ã€«€é \"die\" Í×µá€òŒõ€±Œè€ê€Þ€·€¿\n"
++
++msgid "Close"
++msgstr "ÊÄ€ž€ë"
++
++msgid "New tab"
++msgstr "¿·µ¬¥¿¥Ö¥Ú¡Œ¥ž"
++
++msgid "Open Tab..."
++msgstr "¥¿¥Ö¥Ú¡Œ¥ž€ò³«€¯..."
++
++msgid "Vim: Main window unexpectedly destroyed\n"
++msgstr "Vim: ¥á¥€¥ó¥Š¥£¥ó¥É¥Š€¬ÉÔ°Õ€ËÇË²õ€µ€ì€Þ€·€¿\n"
++
++msgid "&Filter"
++msgstr "¥Õ¥£¥ë¥¿(&F)"
++
++msgid "&Cancel"
++msgstr "¥­¥ã¥ó¥»¥ë(&C)"
++
++msgid "Directories"
++msgstr "¥Ç¥£¥ì¥¯¥È¥ê"
++
++msgid "Filter"
++msgstr "¥Õ¥£¥ë¥¿"
++
++msgid "&Help"
++msgstr "¥Ø¥ë¥×(&H)"
++
++msgid "Files"
++msgstr "¥Õ¥¡¥€¥ë"
++
++msgid "&OK"
++msgstr "&OK"
++
++msgid "Selection"
++msgstr "ÁªÂò"
++
++msgid "Find &Next"
++msgstr "Œ¡€òž¡º÷(&N)"
++
++msgid "&Replace"
++msgstr "ÃÖŽ¹(&R)"
++
++msgid "Replace &All"
++msgstr "ÁŽ€ÆÃÖŽ¹(&A)"
++
++msgid "&Undo"
++msgstr "¥¢¥ó¥É¥¥(&U)"
++
++#, c-format
++msgid "E671: Cannot find window title \"%s\""
++msgstr "E671: ¥¿¥€¥È¥ë€¬ \"%s\" €Î¥Š¥£¥ó¥É¥Š€Ïž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
++msgstr "E243: °ú¿ô€Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó: \"-%s\"; OLEÈÇ€ò»ÈÍÑ€·€Æ€¯€À€µ€€."
++
++msgid "E672: Unable to open window inside MDI application"
++msgstr "E672: MDI¥¢¥×¥ê€ÎÃæ€Ç€Ï¥Š¥£¥ó¥É¥Š€ò³«€±€Þ€»€ó"
++
++msgid "Close tab"
++msgstr "¥¿¥Ö¥Ú¡Œ¥ž€òÊÄ€ž€ë"
++
++msgid "Open tab..."
++msgstr "¥¿¥Ö¥Ú¡Œ¥ž€ò³«€¯"
++
++msgid "Find string (use '\\\\' to find  a '\\')"
++msgstr "ž¡º÷Êž»úÎó ('\\' €òž¡º÷€¹€ë€Ë€Ï '\\\\')"
++
++msgid "Find & Replace (use '\\\\' to find  a '\\')"
++msgstr "ž¡º÷¡ŠÃÖŽ¹ ('\\' €òž¡º÷€¹€ë€Ë€Ï '\\\\')"
++
++#. We fake this: Use a filter that doesn't select anything and a default
++#. * file name that won't be used.
++msgid "Not Used"
++msgstr "»È€ï€ì€Þ€»€ó"
++
++msgid "Directory\t*.nothing\n"
++msgstr "¥Ç¥£¥ì¥¯¥È¥ê\t*.nothing\n"
++
++msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
++msgstr "Vim E458: ¿§»ØÄê€¬Àµ€·€¯€Ê€€€Î€Ç¥š¥ó¥È¥ê€ò³ä€êÅö€Æ€é€ì€Þ€»€ó"
++
++#, c-format
++msgid "E250: Fonts for the following charsets are missing in fontset %s:"
++msgstr "E250: °Ê²Œ€ÎÊž»ú¥»¥Ã¥È€Î¥Õ¥©¥ó¥È€¬€¢€ê€Þ€»€ó %s:"
++
++#, c-format
++msgid "E252: Fontset name: %s"
++msgstr "E252: ¥Õ¥©¥ó¥È¥»¥Ã¥ÈÌŸ: %s"
++
++#, c-format
++msgid "Font '%s' is not fixed-width"
++msgstr "¥Õ¥©¥ó¥È '%s' €ÏžÇÄêÉý€Ç€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E253: Fontset name: %s\n"
++msgstr "E253: ¥Õ¥©¥ó¥È¥»¥Ã¥ÈÌŸ: %s\n"
++
++#, c-format
++msgid "Font0: %s\n"
++msgstr "¥Õ¥©¥ó¥È0: %s\n"
++
++#, c-format
++msgid "Font1: %s\n"
++msgstr "¥Õ¥©¥ó¥È1: %s\n"
++
++#, c-format
++msgid "Font%ld width is not twice that of font0\n"
++msgstr "¥Õ¥©¥ó¥È%ld €ÎÉý€¬¥Õ¥©¥ó¥È0€Î2ÇÜ€Ç€Ï€¢€ê€Þ€»€ó\n"
++
++#, c-format
++msgid "Font0 width: %ld\n"
++msgstr "¥Õ¥©¥ó¥È0€ÎÉý: %ld\n"
++
++#, c-format
++msgid ""
++"Font1 width: %ld\n"
++"\n"
++msgstr ""
++"¥Õ¥©¥ó¥È1€ÎÉý: %ld\n"
++"\n"
++
++msgid "Invalid font specification"
++msgstr "Ìµžú€Ê¥Õ¥©¥ó¥È»ØÄê€Ç€¹"
++
++msgid "&Dismiss"
++msgstr "µÑ²Œ€¹€ë(&D)"
++
++msgid "no specific match"
++msgstr "¥Þ¥Ã¥Á€¹€ë€â€Î€¬€¢€ê€Þ€»€ó"
++
++msgid "Vim - Font Selector"
++msgstr "Vim - ¥Õ¥©¥ó¥ÈÁªÂò"
++
++msgid "Name:"
++msgstr "ÌŸÁ°:"
++
++#. create toggle button
++msgid "Show size in Points"
++msgstr "¥µ¥€¥º€ò¥Ý¥€¥ó¥È€ÇÉœŒš€¹€ë"
++
++msgid "Encoding:"
++msgstr "¥š¥ó¥³¡Œ¥É:"
++
++msgid "Font:"
++msgstr "¥Õ¥©¥ó¥È:"
++
++msgid "Style:"
++msgstr "¥¹¥¿¥€¥ë:"
++
++msgid "Size:"
++msgstr "¥µ¥€¥º:"
++
++msgid "E256: Hangul automata ERROR"
++msgstr "E256: ¥Ï¥ó¥°¥ë¥ª¡Œ¥È¥Þ¥È¥ó¥š¥é¡Œ"
++
++msgid "E550: Missing colon"
++msgstr "E550: ¥³¥í¥ó€¬€¢€ê€Þ€»€ó"
++
++msgid "E551: Illegal component"
++msgstr "E551: ÉÔÀµ€Ê¹œÊžÍ×ÁÇ€Ç€¹"
++
++msgid "E552: digit expected"
++msgstr "E552: ¿ôÃÍ€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "Page %d"
++msgstr "%d ¥Ú¡Œ¥ž"
++
++msgid "No text to be printed"
++msgstr "°õºþ€¹€ë¥Æ¥­¥¹¥È€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "Printing page %d (%d%%)"
++msgstr "°õºþÃæ: ¥Ú¡Œ¥ž %d (%d%%)"
++
++#, c-format
++msgid " Copy %d of %d"
++msgstr " ¥³¥Ô¡Œ %d (ÁŽ %d Ãæ)"
++
++#, c-format
++msgid "Printed: %s"
++msgstr "°õºþ€·€Þ€·€¿: %s"
++
++msgid "Printing aborted"
++msgstr "°õºþ€¬Ãæ»ß€µ€ì€Þ€·€¿"
++
++msgid "E455: Error writing to PostScript output file"
++msgstr "E455: PostScriptœÐÎÏ¥Õ¥¡¥€¥ë€Îœñ¹þ€ß¥š¥é¡Œ€Ç€¹"
++
++#, c-format
++msgid "E624: Can't open file \"%s\""
++msgstr "E624: ¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++
++#, c-format
++msgid "E457: Can't read PostScript resource file \"%s\""
++msgstr "E457: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"%s\" €òÆÉ¹þ€á€Þ€»€ó"
++
++#, c-format
++msgid "E618: file \"%s\" is not a PostScript resource file"
++msgstr "E618: ¥Õ¥¡¥€¥ë \"%s\" €Ï PostScript ¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë€Ç€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E619: file \"%s\" is not a supported PostScript resource file"
++msgstr "E619: ¥Õ¥¡¥€¥ë \"%s\" €ÏÂÐ±þ€·€Æ€€€Ê€€ PostScript ¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë€Ç€¹"
++
++#, c-format
++msgid "E621: \"%s\" resource file has wrong version"
++msgstr "E621: ¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"%s\" €Ï¥Ð¡Œ¥ž¥ç¥ó€¬°Û€Ê€ê€Þ€¹"
++
++msgid "E673: Incompatible multi-byte encoding and character set."
++msgstr "E673: žßŽ¹À­€ÎÌµ€€¥Þ¥ë¥Á¥Ð¥€¥È¥š¥ó¥³¡Œ¥Ç¥£¥ó¥°€ÈÊž»ú¥»¥Ã¥È€Ç€¹"
++
++msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
++msgstr "E674: ¥Þ¥ë¥Á¥Ð¥€¥È¥š¥ó¥³¡Œ¥Ç¥£¥ó¥°€Ç€Ï printmbcharset €ò¶õ€Ë€Ç€­€Þ€»€ó"
++
++msgid "E675: No default font specified for multi-byte printing."
++msgstr ""
++"E675: ¥Þ¥ë¥Á¥Ð¥€¥ÈÊž»ú€ò°õºþ€¹€ë€¿€á€Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E324: Can't open PostScript output file"
++msgstr "E324: PostScriptœÐÎÏÍÑ€Î¥Õ¥¡¥€¥ë€ò³«€±€Þ€»€ó"
++
++#, c-format
++msgid "E456: Can't open file \"%s\""
++msgstr "E456: ¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++
++msgid "E456: Can't find PostScript resource file \"prolog.ps\""
++msgstr "E456: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"prolog.ps\" €¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
++msgstr "E456: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"cidfont.ps\" €¬ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E456: Can't find PostScript resource file \"%s.ps\""
++msgstr "E456: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"%s.ps\" €¬ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E620: Unable to convert to print encoding \"%s\""
++msgstr "E620: °õºþ¥š¥ó¥³¡Œ¥É \"%s\" €ØÊÑŽ¹€Ç€­€Þ€»€ó"
++
++msgid "Sending to printer..."
++msgstr "¥×¥ê¥ó¥¿€ËÁ÷¿®Ãæ..."
++
++msgid "E365: Failed to print PostScript file"
++msgstr "E365: PostScript¥Õ¥¡¥€¥ë€Î°õºþ€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "Print job sent."
++msgstr "°õºþ¥ž¥ç¥Ö€òÁ÷¿®€·€Þ€·€¿."
++
++msgid "Add a new database"
++msgstr "¿·¥Ç¡Œ¥¿¥Ù¡Œ¥¹€òÄÉ²Ã"
++
++msgid "Query for a pattern"
++msgstr "¥Ñ¥¿¡Œ¥ó€Î¥¯¥š¥ê¡Œ€òÄÉ²Ã"
++
++msgid "Show this message"
++msgstr "€³€Î¥á¥Ã¥»¡Œ¥ž€òÉœŒš€¹€ë"
++
++msgid "Kill a connection"
++msgstr "ÀÜÂ³€òœªÎ»€¹€ë"
++
++msgid "Reinit all connections"
++msgstr "ÁŽ€Æ€ÎÀÜÂ³€òºÆœéŽü²œ€¹€ë"
++
++msgid "Show connections"
++msgstr "ÀÜÂ³€òÉœŒš€¹€ë"
++
++#, c-format
++msgid "E560: Usage: cs[cope] %s"
++msgstr "E560: »ÈÍÑÊýË¡: cs[cope] %s"
++
++msgid "This cscope command does not support splitting the window.\n"
++msgstr "€³€Îcscope¥³¥Þ¥ó¥É€ÏÊ¬³ä¥Š¥£¥ó¥É¥Š€Ç€Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó.\n"
++
++msgid "E562: Usage: cstag <ident>"
++msgstr "E562: »ÈÍÑË¡: cstag <ident>"
++
++msgid "E257: cstag: tag not found"
++msgstr "E257: cstag: ¥¿¥°€¬ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E563: stat(%s) error: %d"
++msgstr "E563: stat(%s) ¥š¥é¡Œ: %d"
++
++msgid "E563: stat error"
++msgstr "E563: stat ¥š¥é¡Œ"
++
++#, c-format
++msgid "E564: %s is not a directory or a valid cscope database"
++msgstr "E564: %s €Ï¥Ç¥£¥ì¥¯¥È¥êµÚ€ÓÍ­žú€Êcscope€Î¥Ç¡Œ¥¿¥Ù¡Œ¥¹€Ç€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "Added cscope database %s"
++msgstr "cscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹ %s €òÄÉ²Ã"
++
++#, c-format
++msgid "E262: error reading cscope connection %ld"
++msgstr "E262: cscope€ÎÀÜÂ³ %ld €òÆÉ¹þ€ßÃæ€Î¥š¥é¡Œ€Ç€¹"
++
++msgid "E561: unknown cscope search type"
++msgstr "E561: Ì€ÃÎ€Îcscopež¡º÷·¿€Ç€¹"
++
++msgid "E566: Could not create cscope pipes"
++msgstr "E566: cscope¥Ñ¥€¥×€òºîÀ®€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "E622: Could not fork for cscope"
++msgstr "E622: cscope€Îµ¯Æ°œàÈ÷(fork)€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "cs_create_connection exec failed"
++msgstr "cs_create_connection €ÎŒÂ¹Ô€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "cs_create_connection: fdopen for to_fp failed"
++msgstr "cs_create_connection: to_fp €Î fdopen €ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "cs_create_connection: fdopen for fr_fp failed"
++msgstr "cs_create_connection: fr_fp €Î fdopen €ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E623: Could not spawn cscope process"
++msgstr "E623: cscope¥×¥í¥»¥¹€òµ¯Æ°€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "E567: no cscope connections"
++msgstr "E567: cscopeÀÜÂ³€ËŒºÇÔ€·€Þ€·€¿"
++
++#, c-format
++msgid "E469: invalid cscopequickfix flag %c for %c"
++msgstr "E469: Ìµžú€Ê cscopequickfix ¥Õ¥é¥° %c €Î %c €Ç€¹"
++
++#, c-format
++msgid "E259: no matches found for cscope query %s of %s"
++msgstr "E259: cscope¥¯¥š¥ê¡Œ %s of %s €Ë³ºÅö€¬€¢€ê€Þ€»€ó€Ç€·€¿"
++
++msgid "cscope commands:\n"
++msgstr "cscope¥³¥Þ¥ó¥É:\n"
++
++#, c-format
++msgid "%-5s: %s%*s (Usage: %s)"
++msgstr "%-5s: %s%*s (»ÈÍÑË¡: %s)"
++
++msgid ""
++"\n"
++"       c: Find functions calling this function\n"
++"       d: Find functions called by this function\n"
++"       e: Find this egrep pattern\n"
++"       f: Find this file\n"
++"       g: Find this definition\n"
++"       i: Find files #including this file\n"
++"       s: Find this C symbol\n"
++"       t: Find this text string\n"
++msgstr ""
++"\n"
++"       c: €³€ÎŽØ¿ô€òžÆ€ó€Ç€€€ëŽØ¿ô€òÃµ€¹\n"
++"       d: €³€ÎŽØ¿ô€«€éžÆ€ó€Ç€€€ëŽØ¿ô€òÃµ€¹\n"
++"       e: €³€Îegrep¥Ñ¥¿¡Œ¥ó€òÃµ€¹\n"
++"       f: €³€Î¥Õ¥¡¥€¥ë€òÃµ€¹\n"
++"       g: €³€ÎÄêµÁ€òÃµ€¹\n"
++"       i: €³€Î¥Õ¥¡¥€¥ë€ò#include€·€Æ€€€ë¥Õ¥¡¥€¥ë€òÃµ€¹\n"
++"       s: €³€ÎC¥·¥ó¥Ü¥ë€òÃµ€¹\n"
++"       t: €³€Î¥Æ¥­¥¹¥ÈÊž»úÎó€òÃµ€¹\n"
++
++#, c-format
++msgid "E625: cannot open cscope database: %s"
++msgstr "E625: cscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹: %s €ò³«€¯€³€È€¬€Ç€­€Þ€»€ó"
++
++msgid "E626: cannot get cscope database information"
++msgstr "E626: cscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹€ÎŸðÊó€òŒèÆÀ€Ç€­€Þ€»€ó"
++
++msgid "E568: duplicate cscope database not added"
++msgstr "E568: œÅÊ£€¹€ëcscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹€ÏÄÉ²Ã€µ€ì€Þ€»€ó€Ç€·€¿"
++
++#, c-format
++msgid "E261: cscope connection %s not found"
++msgstr "E261: cscopeÀÜÂ³ %s €¬ž«€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++
++#, c-format
++msgid "cscope connection %s closed"
++msgstr "cscopeÀÜÂ³ %s €¬ÊÄ€ž€é€ì€Þ€·€¿"
++
++#. should not reach here
++msgid "E570: fatal error in cs_manage_matches"
++msgstr "E570: cs_manage_matches €ÇÃ×Ì¿Åª€Ê¥š¥é¡Œ€Ç€¹"
++
++#, c-format
++msgid "Cscope tag: %s"
++msgstr "Cscope ¥¿¥°: %s"
++
++msgid ""
++"\n"
++"   #   line"
++msgstr ""
++"\n"
++"   #   ¹ÔÈÖ¹æ"
++
++msgid "filename / context / line\n"
++msgstr "¥Õ¥¡¥€¥ëÌŸ / ÊžÌ® / ¹Ô\n"
++
++#, c-format
++msgid "E609: Cscope error: %s"
++msgstr "E609: cscope¥š¥é¡Œ: %s"
++
++msgid "All cscope databases reset"
++msgstr "ÁŽ€Æ€Îcscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹€ò¥ê¥»¥Ã¥È€·€Þ€¹"
++
++msgid "no cscope connections\n"
++msgstr "cscopeÀÜÂ³€¬€¢€ê€Þ€»€ó\n"
++
++msgid " # pid    database name                       prepend path\n"
++msgstr " # pid    ¥Ç¡Œ¥¿¥Ù¡Œ¥¹ÌŸ                      prepend ¥Ñ¥¹\n"
++
++msgid "Lua library cannot be loaded."
++msgstr "Lua¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó."
++
++msgid "cannot save undo information"
++msgstr "¥¢¥ó¥É¥¥ŸðÊó€¬ÊÝÂž€Ç€­€Þ€»€ó"
++
++msgid ""
++"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
++"loaded."
++msgstr "E815: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹. MzScheme ¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó."
++
++msgid "invalid expression"
++msgstr "Ìµžú€ÊŒ°€Ç€¹"
++
++msgid "expressions disabled at compile time"
++msgstr "Œ°€Ï¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹"
++
++msgid "hidden option"
++msgstr "±£€·¥ª¥×¥·¥ç¥ó"
++
++msgid "unknown option"
++msgstr "Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹"
++
++msgid "window index is out of range"
++msgstr "ÈÏ°Ï³°€Î¥Š¥£¥ó¥É¥ŠÈÖ¹æ€Ç€¹"
++
++msgid "couldn't open buffer"
++msgstr "¥Ð¥Ã¥Õ¥¡€ò³«€±€Þ€»€ó"
++
++msgid "cannot delete line"
++msgstr "¹Ô€òŸÃ€»€Þ€»€ó"
++
++msgid "cannot replace line"
++msgstr "¹Ô€òÃÖŽ¹€Ç€­€Þ€»€ó"
++
++msgid "cannot insert line"
++msgstr "¹Ô€òÁÞÆþ€Ç€­€Þ€»€ó"
++
++msgid "string cannot contain newlines"
++msgstr "Êž»úÎó€Ë€Ï²þ¹ÔÊž»ú€òŽÞ€á€é€ì€Þ€»€ó"
++
++msgid "error converting Scheme values to Vim"
++msgstr "SchemeÃÍ€ÎVim€Ø€ÎÊÑŽ¹¥š¥é¡Œ"
++
++msgid "Vim error: ~a"
++msgstr "Vim ¥š¥é¡Œ: ~a"
++
++msgid "Vim error"
++msgstr "Vim ¥š¥é¡Œ"
++
++msgid "buffer is invalid"
++msgstr "¥Ð¥Ã¥Õ¥¡€ÏÌµžú€Ç€¹"
++
++msgid "window is invalid"
++msgstr "¥Š¥£¥ó¥É¥Š€ÏÌµžú€Ç€¹"
++
++msgid "linenr out of range"
++msgstr "ÈÏ°Ï³°€Î¹ÔÈÖ¹æ€Ç€¹"
++
++msgid "not allowed in the Vim sandbox"
++msgstr "¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€Ïµö€µ€ì€Þ€»€ó"
++
++#, c-format
++msgid "E370: Could not load library %s"
++msgstr "E370: ¥é¥€¥Ö¥é¥ê %s €ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "Sorry, this command is disabled: the Perl library could not be loaded."
++msgstr ""
++"€³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹, €Ž€á€ó€Ê€µ€€: Perl¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿."
++
++msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
++msgstr ""
++"E299: ¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€Ï Safe ¥â¥ž¥å¡Œ¥ë€ò»ÈÍÑ€·€Ê€€Perl¥¹¥¯¥ê¥×¥È€Ï¶Ø€ž€é€ì"
++"€Æ€€€Þ€¹"
++
++msgid "E836: This Vim cannot execute :python after using :py3"
++msgstr "E836: €³€ÎVim€Ç€Ï :py3 €ò»È€Ã€¿žå€Ë :python €ò»È€š€Þ€»€ó"
++
++msgid "only string keys are allowed"
++msgstr "Êž»úÎó€Î¥­¡Œ€Î€ß€¬µö²Ä€µ€ì€Æ€€€Þ€¹"
++
++msgid ""
++"E263: Sorry, this command is disabled, the Python library could not be "
++"loaded."
++msgstr ""
++"E263: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹,€Ž€á€ó€Ê€µ€€: Python¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó"
++"€Ç€·€¿."
++
++# Added at 07-Feb-2004.
++msgid "E659: Cannot invoke Python recursively"
++msgstr "E659: Python €òºÆµ¢Åª€ËŒÂ¹Ô€¹€ë€³€È€Ï€Ç€­€Þ€»€ó"
++
++msgid "E858: Eval did not return a valid python object"
++msgstr "E858: Œ°ÉŸ²Á€ÏÍ­žú€Êpython¥ª¥Ö¥ž¥§¥¯¥È€òÊÖ€·€Þ€»€ó€Ç€·€¿"
++
++msgid "E859: Failed to convert returned python object to vim value"
++msgstr "E859: ÊÖ€µ€ì€¿python¥ª¥Ö¥ž¥§¥¯¥È€òvim€ÎÃÍ€ËÊÑŽ¹€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "failed to run the code"
++msgstr "¥³¡Œ¥É€ÎŒÂ¹Ô€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E863: return value must be an instance of str"
++msgstr "E863: Ìá€êÃÍ€ÏÊž»úÎó€Î¥€¥ó¥¹¥¿¥ó¥¹€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "E837: This Vim cannot execute :py3 after using :python"
++msgstr "E837: €³€ÎVim€Ç€Ï :python €ò»È€Ã€¿žå€Ë :py3 €ò»È€š€Þ€»€ó"
++
++msgid "E860: Eval did not return a valid python 3 object"
++msgstr "E860: Œ°ÉŸ²Á€ÏÍ­žú€Êpython 3¥ª¥Ö¥ž¥§¥¯¥È€òÊÖ€·€Þ€»€ó€Ç€·€¿"
++
++msgid "E861: Failed to convert returned python 3 object to vim value"
++msgstr "E861: ÊÖ€µ€ì€¿python 3¥ª¥Ö¥ž¥§¥¯¥È€òvim€ÎÃÍ€ËÊÑŽ¹€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "index must be int or slice"
++msgstr "¥€¥ó¥Ç¥Ã¥¯¥¹€ÏÀ°¿ô€«¥¹¥é¥€¥¹€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "E265: $_ must be an instance of String"
++msgstr "E265: $_ €ÏÊž»úÎó€Î¥€¥ó¥¹¥¿¥ó¥¹€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid ""
++"E266: Sorry, this command is disabled, the Ruby library could not be loaded."
++msgstr ""
++"E266: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹,€Ž€á€ó€Ê€µ€€: Ruby¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç"
++"€·€¿."
++
++msgid "E267: unexpected return"
++msgstr "E267: ÍœŽü€»€Ì return €Ç€¹"
++
++msgid "E268: unexpected next"
++msgstr "E268: ÍœŽü€»€Ì next €Ç€¹"
++
++msgid "E269: unexpected break"
++msgstr "E269: ÍœŽü€»€Ì break €Ç€¹"
++
++msgid "E270: unexpected redo"
++msgstr "E270: ÍœŽü€»€Ì redo €Ç€¹"
++
++msgid "E271: retry outside of rescue clause"
++msgstr "E271: rescue €Î³°€Î retry €Ç€¹"
++
++msgid "E272: unhandled exception"
++msgstr "E272: Œè€ê°·€ï€ì€Ê€«€Ã€¿Îã³°€¬€¢€ê€Þ€¹"
++
++#, c-format
++msgid "E273: unknown longjmp status %d"
++msgstr "E273: Ì€ÃÎ€ÎlongjmpŸõÂÖ: %d"
++
++msgid "Toggle implementation/definition"
++msgstr "ŒÂÁõ€ÈÄêµÁ€òÀÚ€êÂØ€š€ë"
++
++msgid "Show base class of"
++msgstr "Œ¡€Î¥¯¥é¥¹€ÎŽðÄì€òÉœŒš"
++
++msgid "Show overridden member function"
++msgstr "¥ª¡Œ¥Ð¡Œ¥é¥€¥É€µ€ì€¿¥á¥ó¥ÐŽØ¿ô€òÉœŒš"
++
++msgid "Retrieve from file"
++msgstr "¥Õ¥¡¥€¥ë€«€é²óÉü€¹€ë"
++
++msgid "Retrieve from project"
++msgstr "¥×¥í¥ž¥§¥¯¥È€«€é²óÉü€¹€ë"
++
++msgid "Retrieve from all projects"
++msgstr "ÁŽ€Æ€Î¥×¥í¥ž¥§¥¯¥È€«€é²óÉü€¹€ë"
++
++msgid "Retrieve"
++msgstr "²óÉü"
++
++msgid "Show source of"
++msgstr "Œ¡€Î¥œ¡Œ¥¹€òÉœŒš€¹€ë"
++
++msgid "Find symbol"
++msgstr "ž«€Ä€±€¿¥·¥ó¥Ü¥ë"
++
++msgid "Browse class"
++msgstr "¥¯¥é¥¹€ò»²ŸÈ"
++
++msgid "Show class in hierarchy"
++msgstr "³¬ÁØ€Ç¥¯¥é¥¹€òÉœŒš"
++
++msgid "Show class in restricted hierarchy"
++msgstr "žÂÄê€µ€ì€¿³¬ÁØ€Ç¥¯¥é¥¹€òÉœŒš"
++
++msgid "Xref refers to"
++msgstr "Xref €Î»²ŸÈÀè"
++
++msgid "Xref referred by"
++msgstr "Xref €¬»²ŸÈ€µ€ì€ë"
++
++msgid "Xref has a"
++msgstr "Xref €¬Œ¡€Î€â€Î€ò€â€Ã€Æ€€€Þ€¹"
++
++msgid "Xref used by"
++msgstr "Xref €¬»ÈÍÑ€µ€ì€ë"
++
++msgid "Show docu of"
++msgstr "Œ¡€ÎÊžŸÏ€òÉœŒš"
++
++msgid "Generate docu for"
++msgstr "Œ¡€ÎÊžŸÏ€òÀžÀ®"
++
++msgid ""
++"Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
++"$PATH).\n"
++msgstr ""
++"SNiFF+€ËÀÜÂ³€Ç€­€Þ€»€ó. ŽÄ¶­€ò¥Á¥§¥Ã¥¯€·€Æ€¯€À€µ€€(sniffemacs €¬ $PATH €Ë€Ê€±"
++"€ì€Ð€Ê€ê€Þ€»€ó).\n"
++
++msgid "E274: Sniff: Error during read. Disconnected"
++msgstr "E274: Sniff: ÆÉ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿. ÀÚÃÇ€·€Þ€·€¿"
++
++msgid "SNiFF+ is currently "
++msgstr "žœºßSNiFF+ €ÎŸõÂÖ€Ï¡Ö"
++
++msgid "not "
++msgstr "Ì€"
++
++msgid "connected"
++msgstr "ÀÜÂ³¡×€Ç€¹"
++
++#, c-format
++msgid "E275: Unknown SNiFF+ request: %s"
++msgstr "E275: Ì€ÃÎ€Î SNiFF+ ¥ê¥¯¥š¥¹¥È€Ç€¹: %s"
++
++msgid "E276: Error connecting to SNiFF+"
++msgstr "E276: SNiFF+ €Ø€ÎÀÜÂ³Ãæ€Î¥š¥é¡Œ€Ç€¹"
++
++msgid "E278: SNiFF+ not connected"
++msgstr "E278: SNiFF+ €ËÀÜÂ³€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E279: Not a SNiFF+ buffer"
++msgstr "E279: SNiFF+ ¥Ð¥Ã¥Õ¥¡€¬€¢€ê€Þ€»€ó"
++
++msgid "Sniff: Error during write. Disconnected"
++msgstr "Sniff: œñ¹þ€ßÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€¿€Î€ÇÀÚÃÇ€·€Þ€·€¿"
++
++msgid "invalid buffer number"
++msgstr "Ìµžú€Ê¥Ð¥Ã¥Õ¥¡ÈÖ¹æ€Ç€¹"
++
++msgid "not implemented yet"
++msgstr "€Þ€ÀŒÂÁõ€µ€ì€Æ€€€Þ€»€ó"
++
++#. ???
++msgid "cannot set line(s)"
++msgstr "¹Ô€òÀßÄê€Ç€­€Þ€»€ó"
++
++msgid "invalid mark name"
++msgstr "Ìµžú€Ê¥Þ¡Œ¥¯ÌŸ€Ç€¹"
++
++msgid "mark not set"
++msgstr "¥Þ¡Œ¥¯€ÏÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "row %d column %d"
++msgstr "¹Ô %d Îó %d"
++
++msgid "cannot insert/append line"
++msgstr "¹Ô€ÎÁÞÆþ/ÄÉ²Ã€ò€Ç€­€Þ€»€ó"
++
++msgid "line number out of range"
++msgstr "ÈÏ°Ï³°€Î¹ÔÈÖ¹æ€Ç€¹"
++
++msgid "unknown flag: "
++msgstr "Ì€ÃÎ€Î¥Õ¥é¥°: "
++
++msgid "unknown vimOption"
++msgstr "Ì€ÃÎ€Î vimOption €Ç€¹"
++
++msgid "keyboard interrupt"
++msgstr "¥­¡Œ¥Ü¡Œ¥É³ä¹þ€ß"
++
++msgid "vim error"
++msgstr "vim ¥š¥é¡Œ"
++
++msgid "cannot create buffer/window command: object is being deleted"
++msgstr ""
++"¥Ð¥Ã¥Õ¥¡/¥Š¥£¥ó¥É¥ŠºîÀ®¥³¥Þ¥ó¥É€òºîÀ®€Ç€­€Þ€»€ó: ¥ª¥Ö¥ž¥§¥¯¥È€¬ŸÃµî€µ€ì€Æ€€€Þ"
++"€·€¿"
++
++msgid ""
++"cannot register callback command: buffer/window is already being deleted"
++msgstr ""
++"¥³¡Œ¥ë¥Ð¥Ã¥¯¥³¥Þ¥ó¥É€òÅÐÏ¿€Ç€­€Þ€»€ó: ¥Ð¥Ã¥Õ¥¡/¥Š¥£¥ó¥É¥Š€¬Žû€ËŸÃµî€µ€ì€Þ€·€¿"
++
++#. This should never happen.  Famous last word?
++msgid ""
++"E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
++"org"
++msgstr ""
++"E280: TCL Ã×Ì¿Åª¥š¥é¡Œ: reflist ±øÀ÷!? vim-dev@vim.org €ËÊó¹ð€·€Æ€¯€À€µ€€"
++
++msgid "cannot register callback command: buffer/window reference not found"
++msgstr ""
++"¥³¡Œ¥ë¥Ð¥Ã¥¯¥³¥Þ¥ó¥É€òÅÐÏ¿€Ç€­€Þ€»€ó: ¥Ð¥Ã¥Õ¥¡/¥Š¥£¥ó¥É¥Š€Î»²ŸÈ€¬ž«€Ä€«€ê€Þ€»"
++"€ó"
++
++msgid ""
++"E571: Sorry, this command is disabled: the Tcl library could not be loaded."
++msgstr ""
++"E571: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹,€Ž€á€ó€Ê€µ€€: Tcl¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç"
++"€·€¿."
++
++#, c-format
++msgid "E572: exit code %d"
++msgstr "E572: œªÎ»¥³¡Œ¥É %d"
++
++msgid "cannot get line"
++msgstr "¹Ô€òŒèÆÀ€Ç€­€Þ€»€ó"
++
++msgid "Unable to register a command server name"
++msgstr "Ì¿Îá¥µ¡Œ¥Ð€ÎÌŸÁ°€òÅÐÏ¿€Ç€­€Þ€»€ó"
++
++msgid "E248: Failed to send command to the destination program"
++msgstr "E248: ÌÜÅª€Î¥×¥í¥°¥é¥à€Ø€Î¥³¥Þ¥ó¥ÉÁ÷¿®€ËŒºÇÔ€·€Þ€·€¿"
++
++#, c-format
++msgid "E573: Invalid server id used: %s"
++msgstr "E573: Ìµžú€Ê¥µ¡Œ¥ÐID€¬»È€ï€ì€Þ€·€¿: %s"
++
++msgid "E251: VIM instance registry property is badly formed.  Deleted!"
++msgstr "E251: VIM ŒÂÂÎ€ÎÅÐÏ¿¥×¥í¥Ñ¥Æ¥£€¬ÉÔÀµ€Ç€¹. ŸÃµî€·€Þ€·€¿!"
++
++msgid "Unknown option argument"
++msgstr "Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó°ú¿ô€Ç€¹"
++
++msgid "Too many edit arguments"
++msgstr "ÊÔœž°ú¿ô€¬Â¿²á€®€Þ€¹"
++
++msgid "Argument missing after"
++msgstr "°ú¿ô€¬€¢€ê€Þ€»€ó"
++
++msgid "Garbage after option argument"
++msgstr "¥ª¥×¥·¥ç¥ó°ú¿ô€Îžå€Ë¥Ž¥ß€¬€¢€ê€Þ€¹"
++
++msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
++msgstr "\"+command\", \"-c command\", \"--cmd command\" €Î°ú¿ô€¬Â¿²á€®€Þ€¹"
++
++msgid "Invalid argument for"
++msgstr "Ìµžú€Ê°ú¿ô€Ç€¹: "
++
++#, c-format
++msgid "%d files to edit\n"
++msgstr "%d žÄ€Î¥Õ¥¡¥€¥ë€¬ÊÔœž€ò¹µ€š€Æ€€€Þ€¹\n"
++
++msgid "netbeans is not supported with this GUI\n"
++msgstr "netbeans €Ï€³€ÎGUI€Ç€ÏÍøÍÑ€Ç€­€Þ€»€ó\n"
++
++msgid "This Vim was not compiled with the diff feature."
++msgstr "€³€ÎVim€Ë€Ïdiffµ¡Çœ€¬€¢€ê€Þ€»€ó(¥³¥ó¥Ñ¥€¥ë»þÀßÄê)."
++
++msgid "'-nb' cannot be used: not enabled at compile time\n"
++msgstr "'-nb' »ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹\n"
++
++msgid "Attempt to open script file again: \""
++msgstr "¥¹¥¯¥ê¥×¥È¥Õ¥¡¥€¥ë€òºÆ€Ó³«€€€Æ€ß€Þ€¹: \""
++
++msgid "Cannot open for reading: \""
++msgstr "ÆÉ¹þÍÑ€È€·€Æ³«€±€Þ€»€ó"
++
++msgid "Cannot open for script output: \""
++msgstr "¥¹¥¯¥ê¥×¥ÈœÐÎÏÍÑ€ò³«€±€Þ€»€ó"
++
++msgid "Vim: Error: Failure to start gvim from NetBeans\n"
++msgstr "Vim: ¥š¥é¡Œ: NetBeans€«€égvim€ò¥¹¥¿¡Œ¥È€Ç€­€Þ€»€ó\n"
++
++msgid "Vim: Warning: Output is not to a terminal\n"
++msgstr "Vim: ·Ù¹ð: ÃŒËö€Ø€ÎœÐÎÏ€Ç€Ï€¢€ê€Þ€»€ó\n"
++
++msgid "Vim: Warning: Input is not from a terminal\n"
++msgstr "Vim: ·Ù¹ð: ÃŒËö€«€é€ÎÆþÎÏ€Ç€Ï€¢€ê€Þ€»€ó\n"
++
++#. just in case..
++msgid "pre-vimrc command line"
++msgstr "vimrcÁ°€Î¥³¥Þ¥ó¥É¥é¥€¥ó"
++
++#, c-format
++msgid "E282: Cannot read from \"%s\""
++msgstr "E282: \"%s\"€«€éÆÉ¹þ€à€³€È€¬€Ç€­€Þ€»€ó"
++
++msgid ""
++"\n"
++"More info with: \"vim -h\"\n"
++msgstr ""
++"\n"
++"€è€êŸÜºÙ€ÊŸðÊó€Ï: \"vim -h\"\n"
++
++msgid "[file ..]       edit specified file(s)"
++msgstr "[¥Õ¥¡¥€¥ë..]    €¢€ë¥Õ¥¡¥€¥ë€òÊÔœž€¹€ë"
++
++msgid "-               read text from stdin"
++msgstr "-               ÉžœàÆþÎÏ€«€é¥Æ¥­¥¹¥È€òÆÉ¹þ€à"
++
++msgid "-t tag          edit file where tag is defined"
++msgstr "-t ¥¿¥°         ¥¿¥°€¬ÄêµÁ€µ€ì€¿€È€³€í€«€éÊÔœž€¹€ë"
++
++msgid "-q [errorfile]  edit file with first error"
++msgstr "-q [errorfile]  ºÇœé€Î¥š¥é¡Œ€ÇÊÔœž€¹€ë"
++
++msgid ""
++"\n"
++"\n"
++"usage:"
++msgstr ""
++"\n"
++"\n"
++"»ÈÍÑË¡:"
++
++msgid " vim [arguments] "
++msgstr " vim [°ú¿ô] "
++
++msgid ""
++"\n"
++"   or:"
++msgstr ""
++"\n"
++"   €â€·€¯€Ï:"
++
++msgid ""
++"\n"
++"Where case is ignored prepend / to make flag upper case"
++msgstr ""
++"\n"
++"ÂçŸ®Êž»ú€¬Ìµ»ë€µ€ì€ëŸì¹ç€ÏÂçÊž»ú€Ë€¹€ë€¿€á€Ë / €òÁ°ÃÖ€·€Æ€¯€À€µ€€"
++
++msgid ""
++"\n"
++"\n"
++"Arguments:\n"
++msgstr ""
++"\n"
++"\n"
++"°ú¿ô:\n"
++
++msgid "--\t\t\tOnly file names after this"
++msgstr "--\t\t\t€³€Î€¢€È€Ë€Ï¥Õ¥¡¥€¥ëÌŸ€À€±"
++
++msgid "--literal\t\tDon't expand wildcards"
++msgstr "--literal\t\t¥ï¥€¥ë¥É¥«¡Œ¥É€òÅž³«€·€Ê€€"
++
++msgid "-register\t\tRegister this gvim for OLE"
++msgstr "-register\t\t€³€Îgvim€òOLE€È€·€ÆÅÐÏ¿€¹€ë"
++
++msgid "-unregister\t\tUnregister gvim for OLE"
++msgstr "-unregister\t\tgvim€ÎOLEÅÐÏ¿€ò²òœü€¹€ë"
++
++msgid "-g\t\t\tRun using GUI (like \"gvim\")"
++msgstr "-g\t\t\tGUI€Çµ¯Æ°€¹€ë (\"gvim\" €ÈÆ±€ž)"
++
++msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
++msgstr "-f or  --nofork\t¥Õ¥©¥¢¥°¥é¥Š¥ó¥É: GUI€ò»Ï€á€ë€È€­€Ëfork€·€Ê€€"
++
++msgid "-v\t\t\tVi mode (like \"vi\")"
++msgstr "-v\t\t\tVi¥â¡Œ¥É (\"vi\" €ÈÆ±€ž)"
++
++msgid "-e\t\t\tEx mode (like \"ex\")"
++msgstr "-e\t\t\tEx¥â¡Œ¥É (\"ex\" €ÈÆ±€ž)"
++
++msgid "-E\t\t\tImproved Ex mode"
++msgstr "-E\t\t\t²þÎÉEx¥â¡Œ¥É"
++
++msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
++msgstr "-s\t\t\t¥µ¥€¥ì¥ó¥È(¥Ð¥Ã¥Á)¥â¡Œ¥É (\"ex\" ÀìÍÑ)"
++
++msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
++msgstr "-d\t\t\tº¹Ê¬¥â¡Œ¥É (\"vidiff\" €ÈÆ±€ž)"
++
++msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
++msgstr "-y\t\t\t¥€¡Œ¥ž¡Œ¥â¡Œ¥É (\"evim\" €ÈÆ±€ž, ¥â¡Œ¥ÉÌµ)"
++
++msgid "-R\t\t\tReadonly mode (like \"view\")"
++msgstr "-R\t\t\tÆÉ¹þÀìÍÑ¥â¡Œ¥É (\"view\" €ÈÆ±€ž)"
++
++msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
++msgstr "-Z\t\t\tÀ©žÂ¥â¡Œ¥É (\"rvim\" €ÈÆ±€ž)"
++
++msgid "-m\t\t\tModifications (writing files) not allowed"
++msgstr "-m\t\t\tÊÑ¹¹ (¥Õ¥¡¥€¥ëÊÝÂž»þ) €ò€Ç€­€Ê€€€è€Š€Ë€¹€ë"
++
++msgid "-M\t\t\tModifications in text not allowed"
++msgstr "-M\t\t\t¥Æ¥­¥¹¥È€ÎÊÔœž€ò¹Ô€Ê€š€Ê€€€è€Š€Ë€¹€ë"
++
++msgid "-b\t\t\tBinary mode"
++msgstr "-b\t\t\t¥Ð¥€¥Ê¥ê¥â¡Œ¥É"
++
++msgid "-l\t\t\tLisp mode"
++msgstr "-l\t\t\tLisp¥â¡Œ¥É"
++
++msgid "-C\t\t\tCompatible with Vi: 'compatible'"
++msgstr "-C\t\t\tVižßŽ¹¥â¡Œ¥É: 'compatible'"
++
++msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
++msgstr "-N\t\t\tViÈóžßŽ¹¥â¡Œ¥É: 'nocompatible"
++
++msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
++msgstr "-V[N][fname]\t\t¥í¥°œÐÎÏÀßÄê [¥ì¥Ù¥ë N] [¥í¥°¥Õ¥¡¥€¥ëÌŸ fname]"
++
++msgid "-D\t\t\tDebugging mode"
++msgstr "-D\t\t\t¥Ç¥Ð¥Ã¥°¥â¡Œ¥É"
++
++msgid "-n\t\t\tNo swap file, use memory only"
++msgstr "-n\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ò»ÈÍÑ€»€º¥á¥â¥ê€À€±"
++
++msgid "-r\t\t\tList swap files and exit"
++msgstr "-r\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€òÎóµó€·œªÎ»"
++
++msgid "-r (with file name)\tRecover crashed session"
++msgstr "-r (¥Õ¥¡¥€¥ëÌŸ)\t¥¯¥é¥Ã¥·¥å€·€¿¥»¥Ã¥·¥ç¥ó€òÉüµ¢"
++
++msgid "-L\t\t\tSame as -r"
++msgstr "-L\t\t\t-r€ÈÆ±€ž"
++
++msgid "-f\t\t\tDon't use newcli to open window"
++msgstr "-f\t\t\t¥Š¥£¥ó¥É¥Š€ò³«€¯€Î€Ë newcli €ò»ÈÍÑ€·€Ê€€"
++
++msgid "-dev <device>\t\tUse <device> for I/O"
++msgstr "-dev <device>\t\tI/O€Ë <device> €ò»ÈÍÑ€¹€ë"
++
++msgid "-A\t\t\tstart in Arabic mode"
++msgstr "-A\t\t\t¥¢¥é¥Ó¥¢žì¥â¡Œ¥É€Çµ¯Æ°€¹€ë"
++
++msgid "-H\t\t\tStart in Hebrew mode"
++msgstr "-H\t\t\t¥Ø¥Ö¥é¥€žì¥â¡Œ¥É€Çµ¯Æ°€¹€ë"
++
++msgid "-F\t\t\tStart in Farsi mode"
++msgstr "-F\t\t\t¥Ú¥ë¥·¥¢žì¥â¡Œ¥É€Çµ¯Æ°€¹€ë"
++
++msgid "-T <terminal>\tSet terminal type to <terminal>"
++msgstr "-T <terminal>\tÃŒËö€ò <terminal> €ËÀßÄê€¹€ë"
++
++msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
++msgstr "-u <vimrc>\t\t.vimrc€ÎÂå€ï€ê€Ë <vimrc> €ò»È€Š"
++
++msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
++msgstr "-U <gvimrc>\t\t.gvimrc€ÎÂå€ï€ê€Ë <gvimrc> €ò»È€Š"
++
++msgid "--noplugin\t\tDon't load plugin scripts"
++msgstr "--noplugin\t\t¥×¥é¥°¥€¥ó¥¹¥¯¥ê¥×¥È€ò¥í¡Œ¥É€·€Ê€€"
++
++msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
++msgstr "-p[N]\t\tN žÄ¥¿¥Ö¥Ú¡Œ¥ž€ò³«€¯(ŸÊÎ¬ÃÍ: ¥Õ¥¡¥€¥ë€Ë€Ä€­1žÄ)"
++
++msgid "-o[N]\t\tOpen N windows (default: one for each file)"
++msgstr "-o[N]\t\tN žÄ¥Š¥£¥ó¥É¥Š€ò³«€¯(ŸÊÎ¬ÃÍ: ¥Õ¥¡¥€¥ë€Ë€Ä€­1žÄ)"
++
++msgid "-O[N]\t\tLike -o but split vertically"
++msgstr "-O[N]\t\t-o€ÈÆ±€ž€À€¬¿âÄŸÊ¬³ä"
++
++msgid "+\t\t\tStart at end of file"
++msgstr "+\t\t\t¥Õ¥¡¥€¥ë€ÎºÇžå€«€é€Ï€ž€á€ë"
++
++msgid "+<lnum>\t\tStart at line <lnum>"
++msgstr "+<lnum>\t\t<lnum> ¹Ô€«€é€Ï€ž€á€ë"
++
++msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
++msgstr "--cmd <command>\tvimrc€ò¥í¡Œ¥É€¹€ëÁ°€Ë <command> €òŒÂ¹Ô€¹€ë"
++
++msgid "-c <command>\t\tExecute <command> after loading the first file"
++msgstr "-c <command>\t\tºÇœé€Î¥Õ¥¡¥€¥ë€ò¥í¡Œ¥Éžå <command> €òŒÂ¹Ô€¹€ë"
++
++msgid "-S <session>\t\tSource file <session> after loading the first file"
++msgstr "-S <session>\t\tºÇœé€Î¥Õ¥¡¥€¥ë€ò¥í¡Œ¥Éžå¥Õ¥¡¥€¥ë <session> €òŒè¹þ€à"
++
++msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
++msgstr "-s <scriptin>\t¥Õ¥¡¥€¥ë <scriptin> €«€é¥Î¡Œ¥Þ¥ë¥³¥Þ¥ó¥É€òÆÉ¹þ€à"
++
++msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
++msgstr "-w <scriptout>\tÆþÎÏ€·€¿ÁŽ¥³¥Þ¥ó¥É€ò¥Õ¥¡¥€¥ë <scriptout> €ËÄÉ²Ã€¹€ë"
++
++msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
++msgstr "-W <scriptout>\tÆþÎÏ€·€¿ÁŽ¥³¥Þ¥ó¥É€ò¥Õ¥¡¥€¥ë <scriptout> €ËÊÝÂž€¹€ë"
++
++msgid "-x\t\t\tEdit encrypted files"
++msgstr "-x\t\t\t°Å¹æ²œ€µ€ì€¿¥Õ¥¡¥€¥ë€òÊÔœž€¹€ë"
++
++msgid "-display <display>\tConnect vim to this particular X-server"
++msgstr "-display <display>\tvim€ò»ØÄê€·€¿ X ¥µ¡Œ¥Ð€ËÀÜÂ³€¹€ë"
++
++msgid "-X\t\t\tDo not connect to X server"
++msgstr "-X\t\t\tX¥µ¡Œ¥Ð€ËÀÜÂ³€·€Ê€€"
++
++msgid "--remote <files>\tEdit <files> in a Vim server if possible"
++msgstr "--remote <files>\t²ÄÇœ€Ê€é€ÐVim¥µ¡Œ¥Ð€Ç <files> €òÊÔœž€¹€ë"
++
++msgid "--remote-silent <files>  Same, don't complain if there is no server"
++msgstr "--remote-silent <files>  Æ±Ÿå, ¥µ¡Œ¥Ð€¬Ìµ€¯€Æ€â·Ù¹ðÊž€òœÐÎÏ€·€Ê€€"
++
++msgid ""
++"--remote-wait <files>  As --remote but wait for files to have been edited"
++msgstr "--remote-wait <files>\t--remotežå ¥Õ¥¡¥€¥ë€ÎÊÔœž€¬œª€ï€ë€Î€òÂÔ€Ä"
++
++msgid ""
++"--remote-wait-silent <files>  Same, don't complain if there is no server"
++msgstr "--remote-wait-silent <files>  Æ±Ÿå, ¥µ¡Œ¥Ð€¬Ìµ€¯€Æ€â·Ù¹ðÊž€òœÐÎÏ€·€Ê€€"
++
++msgid ""
++"--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
++msgstr ""
++"--remote-tab[-wait][-silent] <files>  --remote€Ç¥Õ¥¡¥€¥ë1€Ä€Ë€Ä€­1€Ä€Î¥¿¥Ö"
++"¥Ú¡Œ¥ž€ò³«€¯"
++
++msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
++msgstr "--remote-send <keys>\tVim¥µ¡Œ¥Ð€Ë <keys> €òÁ÷¿®€·€ÆœªÎ»€¹€ë"
++
++msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
++msgstr "--remote-expr <expr>\t¥µ¡Œ¥Ð€Ç <expr> €òŒÂ¹Ô€·€Æ·ë²Ì€òÉœŒš€¹€ë"
++
++msgid "--serverlist\t\tList available Vim server names and exit"
++msgstr "--serverlist\t\tVim¥µ¡Œ¥ÐÌŸ€Î°ìÍ÷€òÉœŒš€·€ÆœªÎ»€¹€ë"
++
++msgid "--servername <name>\tSend to/become the Vim server <name>"
++msgstr "--servername <name>\tVim¥µ¡Œ¥Ð <name> €ËÁ÷¿®/ÌŸÁ°ÀßÄê€¹€ë"
++
++msgid "--startuptime <file>\tWrite startup timing messages to <file>"
++msgstr "--startuptime <file>\tµ¯Æ°€Ë€«€«€Ã€¿»þŽÖ€ÎŸÜºÙ€ò <file> €ØœÐÎÏ€¹€ë"
++
++msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
++msgstr "-i <viminfo>\t\t.viminfo€ÎÂå€ï€ê€Ë <viminfo> €ò»È€Š"
++
++msgid "-h  or  --help\tPrint Help (this message) and exit"
++msgstr "-h or  --help\t¥Ø¥ë¥×(€³€Î¥á¥Ã¥»¡Œ¥ž)€òÉœŒš€·œªÎ»€¹€ë"
++
++msgid "--version\t\tPrint version information and exit"
++msgstr "--version\t\t¥Ð¡Œ¥ž¥ç¥óŸðÊó€òÉœŒš€·œªÎ»€¹€ë"
++
++msgid ""
++"\n"
++"Arguments recognised by gvim (Motif version):\n"
++msgstr ""
++"\n"
++"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(Motif¥Ð¡Œ¥ž¥ç¥ó):\n"
++
++msgid ""
++"\n"
++"Arguments recognised by gvim (neXtaw version):\n"
++msgstr ""
++"\n"
++"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(neXtaw¥Ð¡Œ¥ž¥ç¥ó):\n"
++
++msgid ""
++"\n"
++"Arguments recognised by gvim (Athena version):\n"
++msgstr ""
++"\n"
++"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(Athena¥Ð¡Œ¥ž¥ç¥ó):\n"
++
++msgid "-display <display>\tRun vim on <display>"
++msgstr "-display <display>\t<display> €Çvim€òŒÂ¹Ô€¹€ë"
++
++msgid "-iconic\t\tStart vim iconified"
++msgstr "-iconic\t\tºÇŸ®²œ€·€¿ŸõÂÖ€Çvim€òµ¯Æ°€¹€ë"
++
++msgid "-background <color>\tUse <color> for the background (also: -bg)"
++msgstr "-background <color>\tÇØ·Ê¿§€Ë <color> €ò»È€Š(Æ±µÁ: -bg)"
++
++msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
++msgstr "-foreground <color>\tÁ°·Ê¿§€Ë <color> €ò»È€Š(Æ±µÁ: -fg)"
++
++msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
++msgstr "-font <font>\t\t¥Æ¥­¥¹¥ÈÉœŒš€Ë <font> €ò»È€Š(Æ±µÁ: -fn)"
++
++msgid "-boldfont <font>\tUse <font> for bold text"
++msgstr "-boldfont <font>\tÂÀ»ú€Ë <font> €ò»È€Š"
++
++msgid "-italicfont <font>\tUse <font> for italic text"
++msgstr "-italicfont <for>\tŒÐÂÎ»ú€Ë <font> €ò»È€Š"
++
++msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
++msgstr "-geometry <geom>\tœéŽüÇÛÃÖ€Ë <geom> €ò»È€Š(Æ±µÁ: -geom)"
++
++msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
++msgstr "-borderwidth <width>\t¶­³Š€ÎÉý€ò <width> €Ë€¹€ë(Æ±µÁ: -bw)"
++
++msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
++msgstr ""
++"-scrollbarwidth <width>  ¥¹¥¯¥í¡Œ¥ë¥Ð¡Œ€ÎÉý€ò <width> €Ë€¹€ë(Æ±µÁ: -sw)"
++
++msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
++msgstr "-menuheight <height>\t¥á¥Ë¥å¡Œ¥Ð¡Œ€Î¹â€µ€ò <height> €Ë€¹€ë(Æ±µÁ: -mh)"
++
++msgid "-reverse\t\tUse reverse video (also: -rv)"
++msgstr "-reverse\t\tÈ¿ÅŸ±ÇÁü€ò»ÈÍÑ€¹€ë(Æ±µÁ: -rv)"
++
++msgid "+reverse\t\tDon't use reverse video (also: +rv)"
++msgstr "+reverse\t\tÈ¿ÅŸ±ÇÁü€ò»ÈÍÑ€·€Ê€€(Æ±µÁ: +rv)"
++
++msgid "-xrm <resource>\tSet the specified resource"
++msgstr "-xrm <resource>\tÆÃÄê€Î¥ê¥œ¡Œ¥¹€ò»ÈÍÑ€¹€ë"
++
++msgid ""
++"\n"
++"Arguments recognised by gvim (GTK+ version):\n"
++msgstr ""
++"\n"
++"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(GTK+¥Ð¡Œ¥ž¥ç¥ó):\n"
++
++msgid "-display <display>\tRun vim on <display> (also: --display)"
++msgstr "-display <display>\t<display> €Çvim€òŒÂ¹Ô€¹€ë(Æ±µÁ: --display)"
++
++msgid "--role <role>\tSet a unique role to identify the main window"
++msgstr "--role <role>\t¥á¥€¥ó¥Š¥£¥ó¥É¥Š€òŒ±ÊÌ€¹€ë°ì°Õ€ÊÌò³ä(role)€òÀßÄê€¹€ë"
++
++msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
++msgstr "--socketid <xid>\t°Û€Ê€ëGTK widget€ÇVim€ò³«€¯"
++
++msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++msgstr "--echo-wid\t\t¥Š¥£¥ó¥É¥ŠID€òÉžœàœÐÎÏ€ËœÐÎÏ€¹€ë"
++
++msgid "-P <parent title>\tOpen Vim inside parent application"
++msgstr "-P <¿Æ€Î¥¿¥€¥È¥ë>\tVim€ò¿Æ¥¢¥×¥ê¥±¡Œ¥·¥ç¥ó€ÎÃæ€Çµ¯Æ°€¹€ë"
++
++msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
++msgstr "--windowid <HWND>\t°Û€Ê€ëWin32 widget€ÎÆâÉô€ËVim€ò³«€¯"
++
++msgid "No display"
++msgstr "¥Ç¥£¥¹¥×¥ì¥€€¬ž«€Ä€«€ê€Þ€»€ó"
++
++#. Failed to send, abort.
++msgid ": Send failed.\n"
++msgstr ": Á÷¿®€ËŒºÇÔ€·€Þ€·€¿.\n"
++
++#. Let vim start normally.
++msgid ": Send failed. Trying to execute locally\n"
++msgstr ": Á÷¿®€ËŒºÇÔ€·€Þ€·€¿. ¥í¡Œ¥«¥ë€Ç€ÎŒÂ¹Ô€ò»î€ß€Æ€€€Þ€¹\n"
++
++#, c-format
++msgid "%d of %d edited"
++msgstr "%d žÄ (%d žÄÃæ) €Î¥Õ¥¡¥€¥ë€òÊÔœž€·€Þ€·€¿"
++
++msgid "No display: Send expression failed.\n"
++msgstr "¥Ç¥£¥¹¥×¥ì¥€€¬€¢€ê€Þ€»€ó: Œ°€ÎÁ÷¿®€ËŒºÇÔ€·€Þ€·€¿.\n"
++
++msgid ": Send expression failed.\n"
++msgstr ": Œ°€ÎÁ÷¿®€ËŒºÇÔ€·€Þ€·€¿.\n"
++
++msgid "No marks set"
++msgstr "¥Þ¡Œ¥¯€¬ÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E283: No marks matching \"%s\""
++msgstr "E283: \"%s\" €Ë³ºÅö€¹€ë¥Þ¡Œ¥¯€¬€¢€ê€Þ€»€ó"
++
++#. Highlight title
++msgid ""
++"\n"
++"mark line  col file/text"
++msgstr ""
++"\n"
++"mark   ¹Ô   Îó ¥Õ¥¡¥€¥ë/¥Æ¥­¥¹¥È"
++
++#. Highlight title
++msgid ""
++"\n"
++" jump line  col file/text"
++msgstr ""
++"\n"
++" jump   ¹Ô   Îó ¥Õ¥¡¥€¥ë/¥Æ¥­¥¹¥È"
++
++#. Highlight title
++msgid ""
++"\n"
++"change line  col text"
++msgstr ""
++"\n"
++"ÊÑ¹¹   ¹Ô    Îó  ¥Æ¥­¥¹¥È"
++
++msgid ""
++"\n"
++"# File marks:\n"
++msgstr ""
++"\n"
++"# ¥Õ¥¡¥€¥ë¥Þ¡Œ¥¯:\n"
++
++#. Write the jumplist with -'
++msgid ""
++"\n"
++"# Jumplist (newest first):\n"
++msgstr ""
++"\n"
++"# ¥ž¥ã¥ó¥×¥ê¥¹¥È (¿·€·€€€â€Î€¬Àè):\n"
++
++msgid ""
++"\n"
++"# History of marks within files (newest to oldest):\n"
++msgstr ""
++"\n"
++"# ¥Õ¥¡¥€¥ëÆâ¥Þ¡Œ¥¯€ÎÍúÎò (¿·€·€€€â€Î€«€éžÅ€€€â€Î):\n"
++
++msgid "Missing '>'"
++msgstr "'>' €¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E543: Not a valid codepage"
++msgstr "E543: Ìµžú€Ê¥³¡Œ¥É¥Ú¡Œ¥ž€Ç€¹"
++
++msgid "E284: Cannot set IC values"
++msgstr "E284: IC€ÎÃÍ€òÀßÄê€Ç€­€Þ€»€ó"
++
++msgid "E285: Failed to create input context"
++msgstr "E285: ¥€¥ó¥×¥Ã¥È¥³¥ó¥Æ¥­¥¹¥È€ÎºîÀ®€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E286: Failed to open input method"
++msgstr "E286: ¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É€Î¥ª¡Œ¥×¥ó€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "E287: Warning: Could not set destroy callback to IM"
++msgstr "E287: ·Ù¹ð: IM€ÎÇË²õ¥³¡Œ¥ë¥Ð¥Ã¥¯€òÀßÄê€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "E288: input method doesn't support any style"
++msgstr "E288: ¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É€Ï€É€ó€Ê¥¹¥¿¥€¥ë€â¥µ¥Ý¡Œ¥È€·€Þ€»€ó"
++
++msgid "E289: input method doesn't support my preedit type"
++msgstr "E289: ¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É€Ï my preedit type €ò¥µ¥Ý¡Œ¥È€·€Þ€»€ó"
++
++msgid "E293: block was not locked"
++msgstr "E293: ¥Ö¥í¥Ã¥¯€¬¥í¥Ã¥¯€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E294: Seek error in swap file read"
++msgstr "E294: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ëÆÉ¹þ»þ€Ë¥·¡Œ¥¯¥š¥é¡Œ€Ç€¹"
++
++msgid "E295: Read error in swap file"
++msgstr "E295: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ÎÆÉ¹þ€ß¥š¥é¡Œ€Ç€¹"
++
++msgid "E296: Seek error in swap file write"
++msgstr "E296: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ëœñ¹þ€ß»þ€Ë¥·¡Œ¥¯¥š¥é¡Œ€Ç€¹"
++
++msgid "E297: Write error in swap file"
++msgstr "E297: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Îœñ¹þ€ß¥š¥é¡Œ€Ç€¹"
++
++msgid "E300: Swap file already exists (symlink attack?)"
++msgstr "E300: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Žû€ËÂžºß€·€Þ€¹ (symlink€Ë€è€ë¹¶·â?)"
++
++msgid "E298: Didn't get block nr 0?"
++msgstr "E298: ¥Ö¥í¥Ã¥¯ 0 €òŒèÆÀ€Ç€­€Þ€»€ó?"
++
++msgid "E298: Didn't get block nr 1?"
++msgstr "E298: ¥Ö¥í¥Ã¥¯ 1 €òŒèÆÀ€Ç€­€Þ€»€ó?"
++
++msgid "E298: Didn't get block nr 2?"
++msgstr "E298: ¥Ö¥í¥Ã¥¯ 2 €òŒèÆÀ€Ç€­€Þ€»€ó?"
++
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Î°Å¹æ€ò¹¹¿·Ãæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿"
++
++#. could not (re)open the swap file, what can we do????
++msgid "E301: Oops, lost the swap file!!!"
++msgstr "E301: €ª€Ã€È, ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Œº€ï€ì€Þ€·€¿!!!"
++
++msgid "E302: Could not rename swap file"
++msgstr "E302: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ÎÌŸÁ°€òÊÑ€š€é€ì€Þ€»€ó"
++
++#, c-format
++msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
++msgstr "E303: \"%s\" €Î¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ò³«€±€Ê€€€Î€Ç¥ê¥«¥Ð¥ê€ÏÉÔ²ÄÇœ€Ç€¹"
++
++msgid "E304: ml_upd_block0(): Didn't get block 0??"
++msgstr "E304: ml_upd_block0(): ¥Ö¥í¥Ã¥¯ 0 €òŒèÆÀ€Ç€­€Þ€»€ó€Ç€·€¿??"
++
++#, c-format
++msgid "E305: No swap file found for %s"
++msgstr "E305: %s €Ë€Ï¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "Enter number of swap file to use (0 to quit): "
++msgstr "»ÈÍÑ€¹€ë¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ÎÈÖ¹æ€òÆþÎÏ€·€Æ€¯€À€µ€€(0 €ÇœªÎ»): "
++
++#, c-format
++msgid "E306: Cannot open %s"
++msgstr "E306: %s €ò³«€±€Þ€»€ó"
++
++msgid "Unable to read block 0 from "
++msgstr "¥Ö¥í¥Ã¥¯ 0 €òÆÉ¹þ€á€Þ€»€ó "
++
++msgid ""
++"\n"
++"Maybe no changes were made or Vim did not update the swap file."
++msgstr ""
++"\n"
++"¶²€é€¯ÊÑ¹¹€¬€µ€ì€Æ€€€Ê€€€«Vim€¬¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ò¹¹¿·€·€Æ€€€Þ€»€ó."
++
++msgid " cannot be used with this version of Vim.\n"
++msgstr " Vim€Î€³€Î¥Ð¡Œ¥ž¥ç¥ó€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó.\n"
++
++msgid "Use Vim version 3.0.\n"
++msgstr "Vim€Î¥Ð¡Œ¥ž¥ç¥ó3.0€ò»ÈÍÑ€·€Æ€¯€À€µ€€.\n"
++
++#, c-format
++msgid "E307: %s does not look like a Vim swap file"
++msgstr "E307: %s €ÏVim€Î¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹"
++
++msgid " cannot be used on this computer.\n"
++msgstr " €³€Î¥³¥ó¥Ô¥å¡Œ¥¿€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó.\n"
++
++msgid "The file was created on "
++msgstr "€³€Î¥Õ¥¡¥€¥ë€ÏŒ¡€ÎŸìœê€Çºî€é€ì€Þ€·€¿ "
++
++msgid ""
++",\n"
++"or the file has been damaged."
++msgstr ""
++",\n"
++"€â€·€¯€Ï¥Õ¥¡¥€¥ë€¬Â»œý€·€Æ€€€Þ€¹."
++
++#, c-format
++msgid ""
++"E833: %s is encrypted and this version of Vim does not support encryption"
++msgstr ""
++"E833: %s €Ï€³€Î¥Ð¡Œ¥ž¥ç¥ó€ÎVim€Ç¥µ¥Ý¡Œ¥È€·€Æ€€€Ê€€·ÁŒ°€Ç°Å¹æ²œ€µ€ì€Æ€€€Þ€¹"
++
++msgid " has been damaged (page size is smaller than minimum value).\n"
++msgstr " €ÏÂ»œý€·€Æ€€€Þ€¹ (¥Ú¡Œ¥ž¥µ¥€¥º€¬ºÇŸ®ÃÍ€ò²Œ²ó€Ã€Æ€€€Þ€¹).\n"
++
++#, c-format
++msgid "Using swap file \"%s\""
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \"%s\" €ò»ÈÍÑÃæ"
++
++#, c-format
++msgid "Original file \"%s\""
++msgstr "ž¶ËÜ¥Õ¥¡¥€¥ë \"%s\""
++
++msgid "E308: Warning: Original file may have been changed"
++msgstr "E308: ·Ù¹ð: ž¶ËÜ¥Õ¥¡¥€¥ë€¬ÊÑ¹¹€µ€ì€Æ€€€Þ€¹"
++
++#, c-format
++msgid "Swap file is encrypted: \"%s\""
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Ï°Å¹æ²œ€µ€ì€Æ€€€Þ€¹: \"%s\""
++
++msgid ""
++"\n"
++"If you entered a new crypt key but did not write the text file,"
++msgstr ""
++"\n"
++"¿·€·€€°Å¹æ¥­¡Œ€òÆþÎÏ€·€¿€¢€È€Ë¥Æ¥­¥¹¥È¥Õ¥¡¥€¥ë€òÊÝÂž€·€Æ€€€Ê€€Ÿì¹ç€Ï,"
++
++msgid ""
++"\n"
++"enter the new crypt key."
++msgstr ""
++"\n"
++"¿·€·€€°Å¹æ¥­¡Œ€òÆþÎÏ€·€Æ€¯€À€µ€€."
++
++msgid ""
++"\n"
++"If you wrote the text file after changing the crypt key press enter"
++msgstr ""
++"\n"
++"°Å¹æ¥­¡Œ€òÊÑ€š€¿€¢€È€Ë¥Æ¥­¥¹¥È¥Õ¥¡¥€¥ë€òÊÝÂž€·€¿Ÿì¹ç€Ï, ¥Æ¥­¥¹¥È¥Õ¥¡¥€¥ë€È"
++
++msgid ""
++"\n"
++"to use the same key for text file and swap file"
++msgstr ""
++"\n"
++"¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ËÆ±€ž°Å¹æ¥­¡Œ€ò»È€Š€¿€á€Ëenter€À€±€ò²¡€·€Æ€¯€À€µ€€."
++
++#, c-format
++msgid "E309: Unable to read block 1 from %s"
++msgstr "E309: %s €«€é¥Ö¥í¥Ã¥¯ 1 €òÆÉ¹þ€á€Þ€»€ó"
++
++msgid "???MANY LINES MISSING"
++msgstr "???Â¿€¯€Î¹Ô€¬Œº€ï€ì€Æ€€€Þ€¹"
++
++msgid "???LINE COUNT WRONG"
++msgstr "???¹Ô¿ô€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++
++msgid "???EMPTY BLOCK"
++msgstr "???¥Ö¥í¥Ã¥¯€¬¶õ€Ç€¹"
++
++msgid "???LINES MISSING"
++msgstr "???¹Ô€¬Œº€ï€ì€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
++msgstr "E310: ¥Ö¥í¥Ã¥¯ 1 €ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹(%s €¬.swp¥Õ¥¡¥€¥ë€Ç€Ê€€?)"
++
++msgid "???BLOCK MISSING"
++msgstr "???¥Ö¥í¥Ã¥¯€¬€¢€ê€Þ€»€ó"
++
++msgid "??? from here until ???END lines may be messed up"
++msgstr "??? €³€³€«€é ???END €Þ€Ç€Î¹Ô€¬ÇË²õ€µ€ì€Æ€€€ë€è€Š€Ç€¹"
++
++msgid "??? from here until ???END lines may have been inserted/deleted"
++msgstr "??? €³€³€«€é ???END €Þ€Ç€Î¹Ô€¬ÁÞÆþ€«ºïœü€µ€ì€¿€è€Š€Ç€¹"
++
++msgid "???END"
++msgstr "???END"
++
++msgid "E311: Recovery Interrupted"
++msgstr "E311: ¥ê¥«¥Ð¥ê€¬³ä¹þ€Þ€ì€Þ€·€¿"
++
++msgid ""
++"E312: Errors detected while recovering; look for lines starting with ???"
++msgstr ""
++"E312: ¥ê¥«¥Ð¥ê€ÎºÇÃæ€Ë¥š¥é¡Œ€¬ž¡œÐ€µ€ì€Þ€·€¿; ???€Ç»Ï€Þ€ë¹Ô€ò»²ŸÈ€·€Æ€¯€À€µ€€"
++
++msgid "See \":help E312\" for more information."
++msgstr "ŸÜºÙ€Ï \":help E312\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++
++msgid "Recovery completed. You should check if everything is OK."
++msgstr "¥ê¥«¥Ð¥ê€¬œªÎ»€·€Þ€·€¿. ÁŽ€Æ€¬Àµ€·€€€«¥Á¥§¥Ã¥¯€·€Æ€¯€À€µ€€."
++
++msgid ""
++"\n"
++"(You might want to write out this file under another name\n"
++msgstr ""
++"\n"
++"(ÊÑ¹¹€ò¥Á¥§¥Ã¥¯€¹€ë€¿€á€Ë, €³€Î¥Õ¥¡¥€¥ë€òÊÌ€ÎÌŸÁ°€ÇÊÝÂž€·€¿Ÿå€Ç\n"
++
++msgid "and run diff with the original file to check for changes)"
++msgstr "ž¶ËÜ¥Õ¥¡¥€¥ë€È€Î diff €òŒÂ¹Ô€¹€ë€ÈÎÉ€€€Ç€·€ç€Š)"
++
++msgid "Recovery completed. Buffer contents equals file contents."
++msgstr "ÉüžµŽ°Î». ¥Ð¥Ã¥Õ¥¡€ÎÆâÍÆ€Ï¥Õ¥¡¥€¥ë€ÈÆ±€ž€Ë€Ê€ê€Þ€·€¿."
++
++msgid ""
++"\n"
++"You may want to delete the .swp file now.\n"
++"\n"
++msgstr ""
++"\n"
++"€œ€ì€«€é.swp¥Õ¥¡¥€¥ë€òºïœü€·€Æ€¯€À€µ€€\n"
++"\n"
++
++msgid "Using crypt key from swap file for the text file.\n"
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€«€éŒèÆÀ€·€¿°Å¹æ¥­¡Œ€ò¥Æ¥­¥¹¥È¥Õ¥¡¥€¥ë€Ë»È€€€Þ€¹.\n"
++
++#. use msg() to start the scrolling properly
++msgid "Swap files found:"
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Ê£¿ôž«€Ä€«€ê€Þ€·€¿:"
++
++msgid "   In current directory:\n"
++msgstr "   žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê:\n"
++
++msgid "   Using specified name:\n"
++msgstr "   €¢€ëÌŸÁ°€ò»ÈÍÑÃæ:\n"
++
++msgid "   In directory "
++msgstr "   ¥Ç¥£¥ì¥¯¥È¥ê "
++
++msgid "      -- none --\n"
++msgstr "      -- €Ê€· --\n"
++
++msgid "          owned by: "
++msgstr "            œêÍ­ŒÔ: "
++
++msgid "   dated: "
++msgstr "   ÆüÉÕ: "
++
++msgid "             dated: "
++msgstr "             ÆüÉÕ: "
++
++msgid "         [from Vim version 3.0]"
++msgstr "         [from Vim version 3.0]"
++
++msgid "         [does not look like a Vim swap file]"
++msgstr "         [Vim€Î¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹]"
++
++msgid "         file name: "
++msgstr "        ¥Õ¥¡¥€¥ëÌŸ: "
++
++msgid ""
++"\n"
++"          modified: "
++msgstr ""
++"\n"
++"          ÊÑ¹¹ŸõÂÖ: "
++
++msgid "YES"
++msgstr "€¢€ê"
++
++msgid "no"
++msgstr "€Ê€·"
++
++msgid ""
++"\n"
++"         user name: "
++msgstr ""
++"\n"
++"          ¥æ¡Œ¥¶ÌŸ: "
++
++msgid "   host name: "
++msgstr "   ¥Û¥¹¥ÈÌŸ: "
++
++msgid ""
++"\n"
++"         host name: "
++msgstr ""
++"\n"
++"          ¥Û¥¹¥ÈÌŸ: "
++
++msgid ""
++"\n"
++"        process ID: "
++msgstr ""
++"\n"
++"        ¥×¥í¥»¥¹ID: "
++
++msgid " (still running)"
++msgstr " (€Þ€ÀŒÂ¹ÔÃæ)"
++
++msgid ""
++"\n"
++"         [not usable with this version of Vim]"
++msgstr ""
++"\n"
++"         [€³€ÎVim¥Ð¡Œ¥ž¥ç¥ó€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó]"
++
++msgid ""
++"\n"
++"         [not usable on this computer]"
++msgstr ""
++"\n"
++"         [€³€Î¥³¥ó¥Ô¥å¡Œ¥¿€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó]"
++
++msgid "         [cannot be read]"
++msgstr "         [ÆÉ¹þ€á€Þ€»€ó]"
++
++msgid "         [cannot be opened]"
++msgstr "         [³«€±€Þ€»€ó]"
++
++msgid "E313: Cannot preserve, there is no swap file"
++msgstr "E313: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Ìµ€€€Î€Ç°Ý»ý€Ç€­€Þ€»€ó"
++
++msgid "File preserved"
++msgstr "¥Õ¥¡¥€¥ë€¬°Ý»ý€µ€ì€Þ€¹"
++
++msgid "E314: Preserve failed"
++msgstr "E314: °Ý»ý€ËŒºÇÔ€·€Þ€·€¿"
++
++#, c-format
++msgid "E315: ml_get: invalid lnum: %ld"
++msgstr "E315: ml_get: Ìµžú€Êlnum€Ç€¹: %ld"
++
++#, c-format
++msgid "E316: ml_get: cannot find line %ld"
++msgstr "E316: ml_get: ¹Ô %ld €òž«€Ä€±€é€ì€Þ€»€ó"
++
++msgid "E317: pointer block id wrong 3"
++msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹ 3"
++
++msgid "stack_idx should be 0"
++msgstr "stack_idx €Ï 0 €Ç€¢€ë€Ù€­€Ç€¹"
++
++msgid "E318: Updated too many blocks?"
++msgstr "E318: ¹¹¿·€µ€ì€¿¥Ö¥í¥Ã¥¯€¬Â¿²á€®€ë€«€â?"
++
++msgid "E317: pointer block id wrong 4"
++msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹ 4"
++
++msgid "deleted block 1?"
++msgstr "¥Ö¥í¥Ã¥¯ 1 €ÏŸÃ€µ€ì€¿?"
++
++#, c-format
++msgid "E320: Cannot find line %ld"
++msgstr "E320: ¹Ô %ld €¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E317: pointer block id wrong"
++msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++
++msgid "pe_line_count is zero"
++msgstr "pe_line_count €¬¥Œ¥í€Ç€¹"
++
++#, c-format
++msgid "E322: line number out of range: %ld past the end"
++msgstr "E322: ¹ÔÈÖ¹æ€¬ÈÏ°Ï³°€Ç€¹: %ld Ä¶€š€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E323: line count wrong in block %ld"
++msgstr "E323: ¥Ö¥í¥Ã¥¯ %ld €Î¹Ô¥«¥Š¥ó¥È€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++
++msgid "Stack size increases"
++msgstr "¥¹¥¿¥Ã¥¯¥µ¥€¥º€¬Áý€š€Þ€¹"
++
++msgid "E317: pointer block id wrong 2"
++msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹ 2"
++
++#, c-format
++msgid "E773: Symlink loop for \"%s\""
++msgstr "E773: \"%s\" €Î¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯€¬¥ë¡Œ¥×€Ë€Ê€Ã€Æ€€€Þ€¹"
++
++msgid "E325: ATTENTION"
++msgstr "E325: Ãí°Õ"
++
++msgid ""
++"\n"
++"Found a swap file by the name \""
++msgstr ""
++"\n"
++"Œ¡€ÎÌŸÁ°€Ç¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€òž«€Ä€±€Þ€·€¿ \""
++
++msgid "While opening file \""
++msgstr "Œ¡€Î¥Õ¥¡¥€¥ë€ò³«€€€Æ€€€ëºÇÃæ \""
++
++msgid "      NEWER than swap file!\n"
++msgstr "      ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€è€ê€â¿·€·€€€Ç€¹!\n"
++
++#. Some of these messages are long to allow translation to
++#. * other languages.
++msgid ""
++"\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
++msgstr ""
++"\n"
++"(1) ÊÌ€Î¥×¥í¥°¥é¥à€¬Æ±€ž¥Õ¥¡¥€¥ë€òÊÔœž€·€Æ€€€ë€«€â€·€ì€Þ€»€ó.\n"
++"    €³€ÎŸì¹ç€Ë€Ï, ÊÑ¹¹€ò€·€¿ºÝ€ËºÇœªÅª€Ë, Æ±€ž¥Õ¥¡¥€¥ë€Î°Û€Ê€ë\n"
++"    2€Ä€Î¥€¥ó¥¹¥¿¥ó¥¹€¬€Ç€­€Æ€·€Þ€Š€³€È€ËÃí°Õ€·€Æ€¯€À€µ€€."
++
++msgid "  Quit, or continue with caution.\n"
++msgstr "  œªÎ»€¹€ë€«, Ãí°Õ€·€Ê€¬€éÂ³€±€Æ€¯€À€µ€€.\n"
++
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) €³€Î¥Õ¥¡¥€¥ë€ÎÊÔœž¥»¥Ã¥·¥ç¥ó€¬¥¯¥é¥Ã¥·¥å€·€¿.\n"
++
++msgid "    If this is the case, use \":recover\" or \"vim -r "
++msgstr "    €³€ÎŸì¹ç€Ë€Ï \":recover\" €« \"vim -r "
++
++msgid ""
++"\"\n"
++"    to recover the changes (see \":help recovery\").\n"
++msgstr ""
++"\"\n"
++"    €ò»ÈÍÑ€·€ÆÊÑ¹¹€ò¥ê¥«¥Ð¡Œ€·€Þ€¹(\":help recovery\" €ò»²ŸÈ).\n"
++
++msgid "    If you did this already, delete the swap file \""
++msgstr "    Žû€Ë€³€ì€ò¹Ô€Ê€Ã€¿€Î€Ê€é€Ð, ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \""
++
++msgid ""
++"\"\n"
++"    to avoid this message.\n"
++msgstr ""
++"\"\n"
++"    €òŸÃ€»€Ð€³€Î¥á¥Ã¥»¡Œ¥ž€ò²óÈò€Ç€­€Þ€¹.\n"
++
++msgid "Swap file \""
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \""
++
++msgid "\" already exists!"
++msgstr "\" €¬Žû€Ë€¢€ê€Þ€¹!"
++
++msgid "VIM - ATTENTION"
++msgstr "VIM - Ãí°Õ"
++
++msgid "Swap file already exists!"
++msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Žû€ËÂžºß€·€Þ€¹!"
++
++msgid ""
++"&Open Read-Only\n"
++"&Edit anyway\n"
++"&Recover\n"
++"&Quit\n"
++"&Abort"
++msgstr ""
++"ÆÉ¹þÀìÍÑ€Ç³«€¯(&O)\n"
++"€È€Ë€«€¯ÊÔœž€¹€ë(&E)\n"
++"Éü³è€µ€»€ë(&R)\n"
++"œªÎ»€¹€ë(&Q)\n"
++"Ãæ»ß€¹€ë(&A)"
++
++msgid ""
++"&Open Read-Only\n"
++"&Edit anyway\n"
++"&Recover\n"
++"&Delete it\n"
++"&Quit\n"
++"&Abort"
++msgstr ""
++"ÆÉ¹þÀìÍÑ€Ç³«€¯(&O)\n"
++"€È€Ë€«€¯ÊÔœž€¹€ë(&E)\n"
++"Éü³è€µ€»€ë(&R)\n"
++"ºïœü€¹€ë(&D)\n"
++"œªÎ»€¹€ë(&Q)\n"
++"Ãæ»ß€¹€ë(&A)"
++
++msgid "E326: Too many swap files found"
++msgstr "E326: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Â¿¿ôž«€Ä€«€ê€Þ€·€¿"
++
++msgid "E327: Part of menu-item path is not sub-menu"
++msgstr "E327: ¥á¥Ë¥å¡Œ¥¢¥€¥Æ¥à€Î¥Ñ¥¹€ÎÉôÊ¬€¬¥µ¥Ö¥á¥Ë¥å¡Œ€Ç€Ï€¢€ê€Þ€»€ó"
++
++msgid "E328: Menu only exists in another mode"
++msgstr "E328: ¥á¥Ë¥å¡Œ€ÏÂŸ€Î¥â¡Œ¥É€Ë€À€±€¢€ê€Þ€¹"
++
++#, c-format
++msgid "E329: No menu \"%s\""
++msgstr "E329: \"%s\" €È€€€Š¥á¥Ë¥å¡Œ€Ï€¢€ê€Þ€»€ó"
++
++#. Only a mnemonic or accelerator is not valid.
++msgid "E792: Empty menu name"
++msgstr "E792: ¥á¥Ë¥å¡ŒÌŸ€¬¶õ€Ç€¹"
++
++msgid "E330: Menu path must not lead to a sub-menu"
++msgstr "E330: ¥á¥Ë¥å¡Œ¥Ñ¥¹€Ï¥µ¥Ö¥á¥Ë¥å¡Œ€òÀž€ž€ë€Ù€­€Ç€Ï€¢€ê€Þ€»€ó"
++
++msgid "E331: Must not add menu items directly to menu bar"
++msgstr "E331: ¥á¥Ë¥å¡Œ¥Ð¡Œ€Ë€ÏÄŸÀÜ¥á¥Ë¥å¡Œ¥¢¥€¥Æ¥à€òÄÉ²Ã€Ç€­€Þ€»€ó"
++
++msgid "E332: Separator cannot be part of a menu path"
++msgstr "E332: ¶èÀÚ€ê€Ï¥á¥Ë¥å¡Œ¥Ñ¥¹€Î°ìÉô€Ç€Ï€¢€ê€Þ€»€ó"
++
++#. Now we have found the matching menu, and we list the mappings
++#. Highlight title
++msgid ""
++"\n"
++"--- Menus ---"
++msgstr ""
++"\n"
++"--- ¥á¥Ë¥å¡Œ ---"
++
++msgid "Tear off this menu"
++msgstr "€³€Î¥á¥Ë¥å¡Œ€òÀÚ€êŒè€ë"
++
++msgid "E333: Menu path must lead to a menu item"
++msgstr "E333: ¥á¥Ë¥å¡Œ¥Ñ¥¹€Ï¥á¥Ë¥å¡Œ¥¢¥€¥Æ¥à€òÀž€ž€Ê€±€ì€Ð€€€±€Þ€»€ó"
++
++#, c-format
++msgid "E334: Menu not found: %s"
++msgstr "E334: ¥á¥Ë¥å¡Œ€¬ž«€Ä€«€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E335: Menu not defined for %s mode"
++msgstr "E335: %s €Ë€Ï¥á¥Ë¥å¡Œ€¬ÄêµÁ€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E336: Menu path must lead to a sub-menu"
++msgstr "E336: ¥á¥Ë¥å¡Œ¥Ñ¥¹€Ï¥µ¥Ö¥á¥Ë¥å¡Œ€òÀž€ž€Ê€±€ì€Ð€€€±€Þ€»€ó"
++
++msgid "E337: Menu not found - check menu names"
++msgstr "E337: ¥á¥Ë¥å¡Œ€¬ž«€Ä€«€ê€Þ€»€ó - ¥á¥Ë¥å¡ŒÌŸ€ò³ÎÇ§€·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "Error detected while processing %s:"
++msgstr "%s €ÎœèÍýÃæ€Ë¥š¥é¡Œ€¬ž¡œÐ€µ€ì€Þ€·€¿:"
++
++#, c-format
++msgid "line %4ld:"
++msgstr "¹Ô %4ld:"
++
++#, c-format
++msgid "E354: Invalid register name: '%s'"
++msgstr "E354: Ìµžú€Ê¥ì¥ž¥¹¥¿ÌŸ: '%s'"
++
++msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
++msgstr "ÆüËÜžì¥á¥Ã¥»¡Œ¥žËÝÌõ/ŽÆœ€: ÂŒ²¬ ÂÀÏº <koron.kaoriya@gmail.com>"
++
++msgid "Interrupt: "
++msgstr "³ä¹þ€ß: "
++
++msgid "Press ENTER or type command to continue"
++msgstr "Â³€±€ë€Ë€ÏENTER€ò²¡€¹€«¥³¥Þ¥ó¥É€òÆþÎÏ€·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "%s line %ld"
++msgstr "%s ¹Ô %ld"
++
++msgid "-- More --"
++msgstr "-- ·ÑÂ³ --"
++
++msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
++msgstr " SPACE/d/j: ²èÌÌ/¥Ú¡Œ¥ž/¹Ô ²Œ, b/u/k: Ÿå, q: œªÎ» "
++
++msgid "Question"
++msgstr "ŒÁÌä"
++
++msgid ""
++"&Yes\n"
++"&No"
++msgstr ""
++"€Ï€€(&Y)\n"
++"€€€€€š(&N)"
++
++msgid ""
++"&Yes\n"
++"&No\n"
++"Save &All\n"
++"&Discard All\n"
++"&Cancel"
++msgstr ""
++"€Ï€€(&Y)\n"
++"€€€€€š(&N)\n"
++"ÁŽ€ÆÊÝÂž(&A)\n"
++"ÁŽ€ÆÊüŽþ(&D)\n"
++"¥­¥ã¥ó¥»¥ë(&C)"
++
++msgid "Select Directory dialog"
++msgstr "¥Ç¥£¥ì¥¯¥È¥êÁªÂò¥À¥€¥¢¥í¥°"
++
++msgid "Save File dialog"
++msgstr "¥Õ¥¡¥€¥ëÊÝÂž¥À¥€¥¢¥í¥°"
++
++msgid "Open File dialog"
++msgstr "¥Õ¥¡¥€¥ëÆÉ¹þ¥À¥€¥¢¥í¥°"
++
++#. TODO: non-GUI file selector here
++msgid "E338: Sorry, no file browser in console mode"
++msgstr "E338: ¥³¥ó¥œ¡Œ¥ë¥â¡Œ¥É€Ç€Ï¥Õ¥¡¥€¥ë¥Ö¥é¥Š¥¶€ò»È€š€Þ€»€ó, €Ž€á€ó€Ê€µ€€"
++
++msgid "E766: Insufficient arguments for printf()"
++msgstr "E766: printf() €Î°ú¿ô€¬ÉÔœœÊ¬€Ç€¹"
++
++msgid "E807: Expected Float argument for printf()"
++msgstr "E807: printf() €Î°ú¿ô€Ë€ÏÉâÆ°Ÿ¯¿ôÅÀ¿ô€¬ŽüÂÔ€µ€ì€Æ€€€Þ€¹"
++
++msgid "E767: Too many arguments to printf()"
++msgstr "E767: printf() €Î°ú¿ô€¬Â¿²á€®€Þ€¹"
++
++msgid "W10: Warning: Changing a readonly file"
++msgstr "W10: ·Ù¹ð: ÆÉ¹þÀìÍÑ¥Õ¥¡¥€¥ë€òÊÑ¹¹€·€Þ€¹"
++
++msgid "Type number and <Enter> or click with mouse (empty cancels): "
++msgstr ""
++"ÈÖ¹æ€È<Enter>€òÆþÎÏ€¹€ë€«¥Þ¥Š¥¹€Ç¥¯¥ê¥Ã¥¯€·€Æ€¯€À€µ€€ (¶õ€Ç¥­¥ã¥ó¥»¥ë): "
++
++msgid "Type number and <Enter> (empty cancels): "
++msgstr "ÈÖ¹æ€È<Enter>€òÆþÎÏ€·€Æ€¯€À€µ€€ (¶õ€Ç¥­¥ã¥ó¥»¥ë): "
++
++msgid "1 more line"
++msgstr "1 ¹Ô ÄÉ²Ã€·€Þ€·€¿"
++
++msgid "1 line less"
++msgstr "1 ¹Ô ºïœü€·€Þ€·€¿"
++
++#, c-format
++msgid "%ld more lines"
++msgstr "%ld ¹Ô ÄÉ²Ã€·€Þ€·€¿"
++
++#, c-format
++msgid "%ld fewer lines"
++msgstr "%ld ¹Ô ºïœü€·€Þ€·€¿"
++
++msgid " (Interrupted)"
++msgstr " (³ä¹þ€Þ€ì€Þ€·€¿)"
++
++msgid "Beep!"
++msgstr "¥Ó¡Œ¥Ã!"
++
++msgid "Vim: preserving files...\n"
++msgstr "Vim: ¥Õ¥¡¥€¥ë€òÊÝÂžÃæ...\n"
++
++#. close all memfiles, without deleting
++msgid "Vim: Finished.\n"
++msgstr "Vim: œªÎ»€·€Þ€·€¿.\n"
++
++msgid "ERROR: "
++msgstr "¥š¥é¡Œ: "
++
++#, c-format
++msgid ""
++"\n"
++"[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
++msgstr ""
++"\n"
++"[¥á¥â¥ê(¥Ð¥€¥È)] Áí³äÅö-²òÊüÎÌ %lu-%lu, »ÈÍÑÎÌ %lu, ¥Ô¡Œ¥¯»þ %lu\n"
++
++#, c-format
++msgid ""
++"[calls] total re/malloc()'s %lu, total free()'s %lu\n"
++"\n"
++msgstr ""
++"[žÆœÐ] Áí re/malloc() ²ó¿ô %lu, Áí free() ²ó¿ô %lu\n"
++"\n"
++
++msgid "E340: Line is becoming too long"
++msgstr "E340: ¹Ô€¬Ä¹€¯€Ê€ê²á€®€Þ€·€¿"
++
++#, c-format
++msgid "E341: Internal error: lalloc(%ld, )"
++msgstr "E341: ÆâÉô¥š¥é¡Œ: lalloc(%ld,)"
++
++#, c-format
++msgid "E342: Out of memory!  (allocating %lu bytes)"
++msgstr "E342: ¥á¥â¥ê€¬Â­€ê€Þ€»€ó!  (%lu ¥Ð¥€¥È€ò³äÅöÍ×µá)"
++
++#, c-format
++msgid "Calling shell to execute: \"%s\""
++msgstr "ŒÂ¹Ô€Î€¿€á€Ë¥·¥§¥ë€òžÆœÐ€·Ãæ: \"%s\""
++
++msgid "E545: Missing colon"
++msgstr "E545: ¥³¥í¥ó€¬€¢€ê€Þ€»€ó"
++
++msgid "E546: Illegal mode"
++msgstr "E546: ÉÔÀµ€Ê¥â¡Œ¥É€Ç€¹"
++
++msgid "E547: Illegal mouseshape"
++msgstr "E547: ÉÔÀµ€Ê 'mouseshape' €Ç€¹"
++
++msgid "E548: digit expected"
++msgstr "E548: ¿ôÃÍ€¬É¬Í×€Ç€¹"
++
++msgid "E549: Illegal percentage"
++msgstr "E549: ÉÔÀµ€Ê¥Ñ¡Œ¥»¥ó¥Æ¡Œ¥ž€Ç€¹"
++
++msgid "Enter encryption key: "
++msgstr "°Å¹æ²œÍÑ€Î¥­¡Œ€òÆþÎÏ€·€Æ€¯€À€µ€€: "
++
++msgid "Enter same key again: "
++msgstr "€â€Š°ìÅÙÆ±€ž¥­¡Œ€òÆþÎÏ€·€Æ€¯€À€µ€€: "
++
++msgid "Keys don't match!"
++msgstr "¥­¡Œ€¬°ìÃ×€·€Þ€»€ó"
++
++msgid "E854: path too long for completion"
++msgstr "E854: ¥Ñ¥¹€¬Ä¹²á€®€ÆÊäŽ°€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid ""
++"E343: Invalid path: '**[number]' must be at the end of the path or be "
++"followed by '%s'."
++msgstr ""
++"E343: Ìµžú€Ê¥Ñ¥¹€Ç€¹: '**[¿ôÃÍ]' €Ïpath€ÎºÇžå€« '%s' €¬Â³€€€Æ€Ê€€€È€€€±€Þ€»"
++"€ó."
++
++#, c-format
++msgid "E344: Can't find directory \"%s\" in cdpath"
++msgstr "E344: cdpath€Ë€Ï \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E345: Can't find file \"%s\" in path"
++msgstr "E345: path€Ë€Ï \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E346: No more directory \"%s\" found in cdpath"
++msgstr "E346: cdpath€Ë€Ï€³€ì°ÊŸå \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E347: No more file \"%s\" found in path"
++msgstr "E347: ¥Ñ¥¹€Ë€Ï€³€ì°ÊŸå \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++
++msgid "Cannot connect to Netbeans #2"
++msgstr "Netbeans #2 €ËÀÜÂ³€Ç€­€Þ€»€ó"
++
++msgid "Cannot connect to Netbeans"
++msgstr "Netbeans €ËÀÜÂ³€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
++msgstr ""
++"E668: NetBeans€ÎÀÜÂ³ŸðÊó¥Õ¥¡¥€¥ë€Î¥¢¥¯¥»¥¹¥â¡Œ¥É€ËÌäÂê€¬€¢€ê€Þ€¹: \"%s\""
++
++msgid "read from Netbeans socket"
++msgstr "Netbeans €Î¥œ¥±¥Ã¥È€òÆÉ¹þ€ß"
++
++#, c-format
++msgid "E658: NetBeans connection lost for buffer %ld"
++msgstr "E658: ¥Ð¥Ã¥Õ¥¡ %ld €Î NetBeans ÀÜÂ³€¬Œº€ï€ì€Þ€·€¿"
++
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: NetBeans€Ï€³€ÎGUI€Ë€ÏÂÐ±þ€·€Æ€€€Þ€»€ó"
++
++msgid "E511: netbeans already connected"
++msgstr "E511: NetBeans€ÏŽû€ËÀÜÂ³€·€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E505: %s is read-only (add ! to override)"
++msgstr "E505: %s €ÏÆÉ¹þÀìÍÑ€Ç€¹ (¶¯À©œñ¹þ€Ë€Ï ! €òÄÉ²Ã)"
++
++msgid "E349: No identifier under cursor"
++msgstr "E349: ¥«¡Œ¥œ¥ë€Î°ÌÃÖ€Ë€ÏŒ±ÊÌ»Ò€¬€¢€ê€Þ€»€ó"
++
++msgid "E774: 'operatorfunc' is empty"
++msgstr "E774: 'operatorfunc' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++
++msgid "E775: Eval feature not available"
++msgstr "E775: Œ°ÉŸ²Áµ¡Çœ€¬Ìµžú€Ë€Ê€Ã€Æ€€€Þ€¹"
++
++msgid "Warning: terminal cannot highlight"
++msgstr "·Ù¹ð: »ÈÍÑ€·€Æ€€€ëÃŒËö€Ï¥Ï¥€¥é¥€¥È€Ç€­€Þ€»€ó"
++
++msgid "E348: No string under cursor"
++msgstr "E348: ¥«¡Œ¥œ¥ë€Î°ÌÃÖ€Ë€ÏÊž»úÎó€¬€¢€ê€Þ€»€ó"
++
++msgid "E352: Cannot erase folds with current 'foldmethod'"
++msgstr "E352: žœºß€Î 'foldmethod' €Ç€ÏÀÞŸö€ß€òŸÃµî€Ç€­€Þ€»€ó"
++
++msgid "E664: changelist is empty"
++msgstr "E664: ÊÑ¹¹¥ê¥¹¥È€¬¶õ€Ç€¹"
++
++msgid "E662: At start of changelist"
++msgstr "E662: ÊÑ¹¹¥ê¥¹¥È€ÎÀèÆ¬"
++
++msgid "E663: At end of changelist"
++msgstr "E663: ÊÑ¹¹¥ê¥¹¥È€ÎËöÈø"
++
++msgid "Type  :quit<Enter>  to exit Vim"
++msgstr "Vim€òœªÎ»€¹€ë€Ë€Ï :quit<Enter> €ÈÆþÎÏ€·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "1 line %sed 1 time"
++msgstr "1 ¹Ô€¬ %s €Ç 1 ²óœèÍý€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "1 line %sed %d times"
++msgstr "1 ¹Ô€¬ %s €Ç %d ²óœèÍý€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%ld lines %sed 1 time"
++msgstr "%ld ¹Ô€¬ %s €Ç 1 ²óœèÍý€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%ld lines %sed %d times"
++msgstr "%ld ¹Ô€¬ %s €Ç %d ²óœèÍý€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%ld lines to indent... "
++msgstr "%ld ¹Ô€¬¥€¥ó¥Ç¥ó¥È€µ€ì€Þ€¹... "
++
++msgid "1 line indented "
++msgstr "1 ¹Ô€ò¥€¥ó¥Ç¥ó¥È€·€Þ€·€¿ "
++
++#, c-format
++msgid "%ld lines indented "
++msgstr "%ld ¹Ô€ò¥€¥ó¥Ç¥ó¥È€·€Þ€·€¿ "
++
++msgid "E748: No previously used register"
++msgstr "E748: €Þ€À¥ì¥ž¥¹¥¿€ò»ÈÍÑ€·€Æ€€€Þ€»€ó"
++
++#. must display the prompt
++msgid "cannot yank; delete anyway"
++msgstr "¥ä¥ó¥¯€Ç€­€Þ€»€ó; €È€Ë€«€¯ŸÃµî"
++
++msgid "1 line changed"
++msgstr "1 ¹Ô€¬ÊÑ¹¹€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%ld lines changed"
++msgstr "%ld ¹Ô€¬ÊÑ¹¹€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "freeing %ld lines"
++msgstr "%ld ¹Ô€ò²òÊüÃæ"
++
++msgid "block of 1 line yanked"
++msgstr "1 ¹Ô€Î¥Ö¥í¥Ã¥¯€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++
++msgid "1 line yanked"
++msgstr "1 ¹Ô€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "block of %ld lines yanked"
++msgstr "%ld ¹Ô€Î¥Ö¥í¥Ã¥¯€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "%ld lines yanked"
++msgstr "%ld ¹Ô€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "E353: Nothing in register %s"
++msgstr "E353: ¥ì¥ž¥¹¥¿ %s €Ë€Ï²¿€â€¢€ê€Þ€»€ó"
++
++#. Highlight title
++msgid ""
++"\n"
++"--- Registers ---"
++msgstr ""
++"\n"
++"--- ¥ì¥ž¥¹¥¿ ---"
++
++msgid "Illegal register name"
++msgstr "ÉÔÀµ€Ê¥ì¥ž¥¹¥¿ÌŸ"
++
++msgid ""
++"\n"
++"# Registers:\n"
++msgstr ""
++"\n"
++"# ¥ì¥ž¥¹¥¿:\n"
++
++#, c-format
++msgid "E574: Unknown register type %d"
++msgstr "E574: Ì€ÃÎ€Î¥ì¥ž¥¹¥¿·¿ %d €Ç€¹"
++
++#, c-format
++msgid "%ld Cols; "
++msgstr "%ld Îó; "
++
++#, c-format
++msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
++msgstr "ÁªÂò %s%ld / %ld ¹Ô; %ld / %ld Ã±žì; %ld / %ld ¥Ð¥€¥È"
++
++#, c-format
++msgid ""
++"Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
++"Bytes"
++msgstr "ÁªÂò %s%ld / %ld ¹Ô; %ld / %ld Ã±žì; %ld / %ld Êž»ú; %ld / %ld ¥Ð¥€¥È"
++
++#, c-format
++msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
++msgstr "Îó %s / %s; ¹Ô %ld of %ld; Ã±žì %ld / %ld; ¥Ð¥€¥È %ld / %ld"
++
++#, c-format
++msgid ""
++"Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
++"%ld"
++msgstr ""
++"Îó %s / %s; ¹Ô %ld / %ld; Ã±žì %ld / %ld; Êž»ú %ld / %ld; ¥Ð¥€¥È %ld of %ld"
++
++#, c-format
++msgid "(+%ld for BOM)"
++msgstr "(+%ld for BOM)"
++
++msgid "%<%f%h%m%=Page %N"
++msgstr "%<%f%h%m%=%N ¥Ú¡Œ¥ž"
++
++msgid "Thanks for flying Vim"
++msgstr "Vim €ò»È€Ã€Æ€¯€ì€Æ€¢€ê€¬€È€Š"
++
++msgid "E518: Unknown option"
++msgstr "E518: Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹"
++
++msgid "E519: Option not supported"
++msgstr "E519: ¥ª¥×¥·¥ç¥ó€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E520: Not allowed in a modeline"
++msgstr "E520: modeline €Ç€Ïµö²Ä€µ€ì€Þ€»€ó"
++
++msgid "E846: Key code not set"
++msgstr "E846: ¥­¡Œ¥³¡Œ¥É€¬ÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E521: Number required after ="
++msgstr "E521: = €Îžå€Ë€Ï¿ô»ú€¬É¬Í×€Ç€¹"
++
++msgid "E522: Not found in termcap"
++msgstr "E522: termcap Æâ€Ëž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "E539: Illegal character <%s>"
++msgstr "E539: ÉÔÀµ€ÊÊž»ú€Ç€¹ <%s>"
++
++msgid "E529: Cannot set 'term' to empty string"
++msgstr "E529: 'term' €Ë€Ï¶õÊž»úÎó€òÀßÄê€Ç€­€Þ€»€ó"
++
++msgid "E530: Cannot change term in GUI"
++msgstr "E530: GUI€Ç€Ï 'term' €òÊÑ¹¹€Ç€­€Þ€»€ó"
++
++msgid "E531: Use \":gui\" to start the GUI"
++msgstr "E531: GUI€ò¥¹¥¿¡Œ¥È€¹€ë€Ë€Ï \":gui\" €ò»ÈÍÑ€·€Æ€¯€À€µ€€"
++
++msgid "E589: 'backupext' and 'patchmode' are equal"
++msgstr "E589: 'backupext' €È 'patchmode' €¬Æ±€ž€Ç€¹"
++
++msgid "E834: Conflicts with value of 'listchars'"
++msgstr "E834: 'listchars'€ÎÃÍ€ËÌ·œâ€¬€¢€ê€Þ€¹"
++
++msgid "E835: Conflicts with value of 'fillchars'"
++msgstr "E835: 'fillchars'€ÎÃÍ€ËÌ·œâ€¬€¢€ê€Þ€¹"
++
++msgid "E617: Cannot be changed in the GTK+ 2 GUI"
++msgstr "E617: GTK+2 GUI€Ç€ÏÊÑ¹¹€Ç€­€Þ€»€ó"
++
++msgid "E524: Missing colon"
++msgstr "E524: ¥³¥í¥ó€¬€¢€ê€Þ€»€ó"
++
++msgid "E525: Zero length string"
++msgstr "E525: Êž»úÎó€ÎÄ¹€µ€¬¥Œ¥í€Ç€¹"
++
++#, c-format
++msgid "E526: Missing number after <%s>"
++msgstr "E526: <%s> €Îžå€Ë¿ô»ú€¬€¢€ê€Þ€»€ó"
++
++msgid "E527: Missing comma"
++msgstr "E527: ¥«¥ó¥Þ€¬€¢€ê€Þ€»€ó"
++
++msgid "E528: Must specify a ' value"
++msgstr "E528: ' €ÎÃÍ€ò»ØÄê€·€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "E595: contains unprintable or wide character"
++msgstr "E595: ÉœŒš€Ç€­€Ê€€Êž»ú€«¥ï¥€¥ÉÊž»ú€òŽÞ€ó€Ç€€€Þ€¹"
++
++msgid "E596: Invalid font(s)"
++msgstr "E596: Ìµžú€Ê¥Õ¥©¥ó¥È€Ç€¹"
++
++msgid "E597: can't select fontset"
++msgstr "E597: ¥Õ¥©¥ó¥È¥»¥Ã¥È€òÁªÂò€Ç€­€Þ€»€ó"
++
++msgid "E598: Invalid fontset"
++msgstr "E598: Ìµžú€Ê¥Õ¥©¥ó¥È¥»¥Ã¥È€Ç€¹"
++
++msgid "E533: can't select wide font"
++msgstr "E533: ¥ï¥€¥É¥Õ¥©¥ó¥È€òÁªÂò€Ç€­€Þ€»€ó"
++
++msgid "E534: Invalid wide font"
++msgstr "E534: Ìµžú€Ê¥ï¥€¥É¥Õ¥©¥ó¥È€Ç€¹"
++
++#, c-format
++msgid "E535: Illegal character after <%c>"
++msgstr "E535: <%c> €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€¹"
++
++msgid "E536: comma required"
++msgstr "E536: ¥«¥ó¥Þ€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "E537: 'commentstring' must be empty or contain %s"
++msgstr "E537: 'commentstring' €Ï¶õ€Ç€¢€ë€« %s €òŽÞ€àÉ¬Í×€¬€¢€ê€Þ€¹"
++
++msgid "E538: No mouse support"
++msgstr "E538: ¥Þ¥Š¥¹€Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó"
++
++msgid "E540: Unclosed expression sequence"
++msgstr "E540: Œ°€¬œªÎ»€·€Æ€€€Þ€»€ó"
++
++msgid "E541: too many items"
++msgstr "E541: Í×ÁÇ€¬Â¿²á€®€Þ€¹"
++
++msgid "E542: unbalanced groups"
++msgstr "E542: ¥°¥ë¡Œ¥×€¬Äà¹ç€€€Þ€»€ó"
++
++msgid "E590: A preview window already exists"
++msgstr "E590: ¥×¥ì¥Ó¥å¡Œ¥Š¥£¥ó¥É¥Š€¬Žû€ËÂžºß€·€Þ€¹"
++
++msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
++msgstr ""
++"W17: ¥¢¥é¥Ó¥¢Êž»ú€Ë€ÏUTF-8€¬É¬Í×€Ê€Î€Ç, ':set encoding=utf-8' €·€Æ€¯€À€µ€€"
++
++#, c-format
++msgid "E593: Need at least %d lines"
++msgstr "E593: ºÇÄã %d €Î¹Ô¿ô€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "E594: Need at least %d columns"
++msgstr "E594: ºÇÄã %d €Î¥«¥é¥àÉý€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "E355: Unknown option: %s"
++msgstr "E355: Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹: %s"
++
++#. There's another character after zeros or the string
++#. * is empty.  In both cases, we are trying to set a
++#. * num option using a string.
++#, c-format
++msgid "E521: Number required: &%s = '%s'"
++msgstr "E521: ¿ô»ú€¬É¬Í×€Ç€¹: &%s = '%s'"
++
++msgid ""
++"\n"
++"--- Terminal codes ---"
++msgstr ""
++"\n"
++"--- ÃŒËö¥³¡Œ¥É ---"
++
++msgid ""
++"\n"
++"--- Global option values ---"
++msgstr ""
++"\n"
++"--- ¥°¥í¡Œ¥Ð¥ë¥ª¥×¥·¥ç¥óÃÍ ---"
++
++msgid ""
++"\n"
++"--- Local option values ---"
++msgstr ""
++"\n"
++"--- ¥í¡Œ¥«¥ë¥ª¥×¥·¥ç¥óÃÍ ---"
++
++msgid ""
++"\n"
++"--- Options ---"
++msgstr ""
++"\n"
++"--- ¥ª¥×¥·¥ç¥ó ---"
++
++msgid "E356: get_varp ERROR"
++msgstr "E356: get_varp ¥š¥é¡Œ"
++
++#, c-format
++msgid "E357: 'langmap': Matching character missing for %s"
++msgstr "E357: 'langmap': %s €ËÂÐ±þ€¹€ëÊž»ú€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E358: 'langmap': Extra characters after semicolon: %s"
++msgstr "E358: 'langmap': ¥»¥ß¥³¥í¥ó€Îžå€ËÍŸÊ¬€ÊÊž»ú€¬€¢€ê€Þ€¹: %s"
++
++msgid "cannot open "
++msgstr "³«€±€Þ€»€ó "
++
++msgid "VIM: Can't open window!\n"
++msgstr "VIM: ¥Š¥£¥ó¥É¥Š€ò³«€±€Þ€»€ó!\n"
++
++msgid "Need Amigados version 2.04 or later\n"
++msgstr "Amigados€Î¥Ð¡Œ¥ž¥ç¥ó 2.04€«€œ€ì°Ê¹ß€¬É¬Í×€Ç€¹\n"
++
++#, c-format
++msgid "Need %s version %ld\n"
++msgstr "%s €Î¥Ð¡Œ¥ž¥ç¥ó %ld €¬É¬Í×€Ç€¹\n"
++
++msgid "Cannot open NIL:\n"
++msgstr "NIL€ò³«€±€Þ€»€ó:\n"
++
++msgid "Cannot create "
++msgstr "ºîÀ®€Ç€­€Þ€»€ó "
++
++#, c-format
++msgid "Vim exiting with %d\n"
++msgstr "Vim€Ï %d €ÇœªÎ»€·€Þ€¹\n"
++
++msgid "cannot change console mode ?!\n"
++msgstr "¥³¥ó¥œ¡Œ¥ë¥â¡Œ¥É€òÊÑ¹¹€Ç€­€Þ€»€ó?!\n"
++
++msgid "mch_get_shellsize: not a console??\n"
++msgstr "mch_get_shellsize: ¥³¥ó¥œ¡Œ¥ë€Ç€Ï€Ê€€??\n"
++
++#. if Vim opened a window: Executing a shell may cause crashes
++msgid "E360: Cannot execute shell with -f option"
++msgstr "E360: -f ¥ª¥×¥·¥ç¥ó€Ç¥·¥§¥ë€òŒÂ¹Ô€Ç€­€Þ€»€ó"
++
++msgid "Cannot execute "
++msgstr "ŒÂ¹Ô€Ç€­€Þ€»€ó "
++
++msgid "shell "
++msgstr "¥·¥§¥ë "
++
++msgid " returned\n"
++msgstr " Ìá€ê€Þ€·€¿\n"
++
++msgid "ANCHOR_BUF_SIZE too small."
++msgstr "ANCHOR_BUF_SIZE €¬Ÿ®€µ²á€®€Þ€¹."
++
++msgid "I/O ERROR"
++msgstr "ÆþœÐÎÏ¥š¥é¡Œ"
++
++msgid "Message"
++msgstr "¥á¥Ã¥»¡Œ¥ž"
++
++msgid "'columns' is not 80, cannot execute external commands"
++msgstr "'columns' €¬80€Ç€Ï€Ê€€€¿€á, ³°Éô¥³¥Þ¥ó¥É€òŒÂ¹Ô€Ç€­€Þ€»€ó"
++
++msgid "E237: Printer selection failed"
++msgstr "E237: ¥×¥ê¥ó¥¿€ÎÁªÂò€ËŒºÇÔ€·€Þ€·€¿"
++
++#, c-format
++msgid "to %s on %s"
++msgstr "%s €Ø (%s Ÿå€Î)"
++
++#, c-format
++msgid "E613: Unknown printer font: %s"
++msgstr "E613: Ì€ÃÎ€Î¥×¥ê¥ó¥¿¥ª¥×¥·¥ç¥ó€Ç€¹: %s"
++
++#, c-format
++msgid "E238: Print error: %s"
++msgstr "E238: °õºþ¥š¥é¡Œ: %s"
++
++#, c-format
++msgid "Printing '%s'"
++msgstr "°õºþ€·€Æ€€€Þ€¹: '%s'"
++
++#, c-format
++msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
++msgstr "E244: Êž»ú¥»¥Ã¥ÈÌŸ \"%s\" €ÏÉÔÀµ€Ç€¹ (¥Õ¥©¥ó¥ÈÌŸ \"%s\")"
++
++#, c-format
++msgid "E245: Illegal char '%c' in font name \"%s\""
++msgstr "E245: '%c' €ÏÉÔÀµ€ÊÊž»ú€Ç€¹ (¥Õ¥©¥ó¥ÈÌŸ \"%s\")"
++
++msgid "Vim: Double signal, exiting\n"
++msgstr "Vim: 2œÅ€Î¥·¥°¥Ê¥ë€Î€¿€á, œªÎ»€·€Þ€¹\n"
++
++#, c-format
++msgid "Vim: Caught deadly signal %s\n"
++msgstr "Vim: Ã×Ì¿Åª¥·¥°¥Ê¥ë %s €òž¡ÃÎ€·€Þ€·€¿\n"
++
++#, c-format
++msgid "Vim: Caught deadly signal\n"
++msgstr "Vim: Ã×Ì¿Åª¥·¥°¥Ê¥ë€òž¡ÃÎ€·€Þ€·€¿\n"
++
++#, c-format
++msgid "Opening the X display took %ld msec"
++msgstr "X¥µ¡Œ¥Ð€Ø€ÎÀÜÂ³€Ë %ld ¥ß¥êÉÃ€«€«€ê€Þ€·€¿"
++
++msgid ""
++"\n"
++"Vim: Got X error\n"
++msgstr ""
++"\n"
++"Vim: X €Î¥š¥é¡Œ€òž¡œÐ€·€Þ€·€¿r\n"
++
++msgid "Testing the X display failed"
++msgstr "X display €Î¥Á¥§¥Ã¥¯€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "Opening the X display timed out"
++msgstr "X display €Î open €¬¥¿¥€¥à¥¢¥Š¥È€·€Þ€·€¿"
++
++msgid ""
++"\n"
++"Could not get security context for "
++msgstr ""
++"\n"
++"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È€òŒèÆÀ€Ç€­€Þ€»€ó "
++
++msgid ""
++"\n"
++"Could not set security context for "
++msgstr ""
++"\n"
++"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È€òÀßÄê€Ç€­€Þ€»€ó "
++
++msgid ""
++"\n"
++"Cannot execute shell "
++msgstr ""
++"\n"
++"¥·¥§¥ë€òŒÂ¹Ô€Ç€­€Þ€»€ó "
++
++msgid ""
++"\n"
++"Cannot execute shell sh\n"
++msgstr ""
++"\n"
++"sh ¥·¥§¥ë€òŒÂ¹Ô€Ç€­€Þ€»€ó\n"
++
++msgid ""
++"\n"
++"shell returned "
++msgstr ""
++"\n"
++"¥·¥§¥ë€¬ÃÍ€òÊÖ€·€Þ€·€¿ "
++
++msgid ""
++"\n"
++"Cannot create pipes\n"
++msgstr ""
++"\n"
++"¥Ñ¥€¥×€òºîÀ®€Ç€­€Þ€»€ó\n"
++
++msgid ""
++"\n"
++"Cannot fork\n"
++msgstr ""
++"\n"
++"fork €Ç€­€Þ€»€ó\n"
++
++msgid ""
++"\n"
++"Command terminated\n"
++msgstr ""
++"\n"
++"¥³¥Þ¥ó¥É€òÃæÃÇ€·€Þ€·€¿\n"
++
++msgid "XSMP lost ICE connection"
++msgstr "XSMP €¬ICEÀÜÂ³€òŒº€€€Þ€·€¿"
++
++#, c-format
++msgid "dlerror = \"%s\""
++msgstr "dlerror = \"%s\""
++
++msgid "Opening the X display failed"
++msgstr "X display €Î open €ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "XSMP handling save-yourself request"
++msgstr "XSMP €¬save-yourselfÍ×µá€òœèÍý€·€Æ€€€Þ€¹"
++
++msgid "XSMP opening connection"
++msgstr "XSMP €¬ÀÜÂ³€ò³«»Ï€·€Æ€€€Þ€¹"
++
++msgid "XSMP ICE connection watch failed"
++msgstr "XSMP ICEÀÜÂ³€¬ŒºÇÔ€·€¿€è€Š€Ç€¹"
++
++#, c-format
++msgid "XSMP SmcOpenConnection failed: %s"
++msgstr "XSMP SmcOpenConnection€¬ŒºÇÔ€·€Þ€·€¿: %s"
++
++msgid "At line"
++msgstr "¹Ô"
++
++msgid "Could not load vim32.dll!"
++msgstr "vim32.dll €ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "VIM Error"
++msgstr "VIM¥š¥é¡Œ"
++
++msgid "Could not fix up function pointers to the DLL!"
++msgstr "DLL€«€éŽØ¿ô¥Ý¥€¥ó¥¿€òŒèÆÀ€Ç€­€Þ€»€ó€Ç€·€¿"
++
++#, c-format
++msgid "shell returned %d"
++msgstr "¥·¥§¥ë€¬¥³¡Œ¥É %d €ÇœªÎ»€·€Þ€·€¿"
++
++#, c-format
++msgid "Vim: Caught %s event\n"
++msgstr "Vim: ¥€¥Ù¥ó¥È %s €òž¡ÃÎ\n"
++
++msgid "close"
++msgstr "ÊÄ€ž€ë"
++
++msgid "logoff"
++msgstr "¥í¥°¥ª¥Õ"
++
++msgid "shutdown"
++msgstr "¥·¥ã¥Ã¥È¥À¥Š¥ó"
++
++msgid "E371: Command not found"
++msgstr "E371: ¥³¥Þ¥ó¥É€¬€¢€ê€Þ€»€ó"
++
++msgid ""
++"VIMRUN.EXE not found in your $PATH.\n"
++"External commands will not pause after completion.\n"
++"See  :help win32-vimrun  for more information."
++msgstr ""
++"VIMRUN.EXE€¬ $PATH €ÎÃæ€Ëž«€Ä€«€ê€Þ€»€ó.\n"
++"³°Éô¥³¥Þ¥ó¥É€ÎœªÎ»žå€Ë°ì»þÄä»ß€ò€·€Þ€»€ó.\n"
++"ŸÜºÙ€Ï  :help win32-vimrun  €ò»²ŸÈ€·€Æ€¯€À€µ€€."
++
++msgid "Vim Warning"
++msgstr "Vim€Î·Ù¹ð"
++
++#, c-format
++msgid "E372: Too many %%%c in format string"
++msgstr "E372: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€Ë %%%c €¬Â¿²á€®€Þ€¹"
++
++#, c-format
++msgid "E373: Unexpected %%%c in format string"
++msgstr "E373: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€ËÍœŽü€»€Ì %%%c €¬€¢€ê€Þ€·€¿"
++
++msgid "E374: Missing ] in format string"
++msgstr "E374: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€Ë ] €¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E375: Unsupported %%%c in format string"
++msgstr "E375: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€Ç€Ï %%%c €Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó"
++
++#, c-format
++msgid "E376: Invalid %%%c in format string prefix"
++msgstr "E376: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€ÎÁ°ÃÖ€ËÌµžú€Ê %%%c €¬€¢€ê€Þ€¹"
++
++#, c-format
++msgid "E377: Invalid %%%c in format string"
++msgstr "E377: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€ËÌµžú€Ê %%%c €¬€¢€ê€Þ€¹"
++
++msgid "E378: 'errorformat' contains no pattern"
++msgstr "E378: 'errorformat' €Ë¥Ñ¥¿¡Œ¥ó€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E379: Missing or empty directory name"
++msgstr "E379: ¥Ç¥£¥ì¥¯¥È¥êÌŸ€¬Ìµ€€€«¶õ€Ç€¹"
++
++msgid "E553: No more items"
++msgstr "E553: Í×ÁÇ€¬€â€Š€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "(%d of %d)%s%s: "
++msgstr "(%d of %d)%s%s: "
++
++msgid " (line deleted)"
++msgstr " (¹Ô€¬ºïœü€µ€ì€Þ€·€¿)"
++
++msgid "E380: At bottom of quickfix stack"
++msgstr "E380: quickfix ¥¹¥¿¥Ã¥¯€ÎËöÈø€Ç€¹"
++
++msgid "E381: At top of quickfix stack"
++msgstr "E381: quickfix ¥¹¥¿¥Ã¥¯€ÎÀèÆ¬€Ç€¹"
++
++#, c-format
++msgid "error list %d of %d; %d errors"
++msgstr "¥š¥é¡Œ°ìÍ÷ %d of %d; %d žÄ¥š¥é¡Œ"
++
++msgid "E382: Cannot write, 'buftype' option is set"
++msgstr "E382: 'buftype' ¥ª¥×¥·¥ç¥ó€¬ÀßÄê€µ€ì€Æ€€€ë€Î€Çœñ¹þ€ß€Þ€»€ó"
++
++msgid "Error file"
++msgstr "¥š¥é¡Œ¥Õ¥¡¥€¥ë"
++
++msgid "E683: File name missing or invalid pattern"
++msgstr "E683: ¥Õ¥¡¥€¥ëÌŸ€¬Ìµ€€€«Ìµžú€Ê¥Ñ¥¿¡Œ¥ó€Ç€¹"
++
++#, c-format
++msgid "Cannot open file \"%s\""
++msgstr "¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++
++msgid "E681: Buffer is not loaded"
++msgstr "E681: ¥Ð¥Ã¥Õ¥¡€ÏÆÉ€ß¹þ€Þ€ì€Þ€»€ó€Ç€·€¿"
++
++msgid "E777: String or List expected"
++msgstr "E777: Êž»úÎó€«¥ê¥¹¥È€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "E369: invalid item in %s%%[]"
++msgstr "E369: Ìµžú€Ê¹àÌÜ€Ç€¹: %s%%[]"
++
++msgid "E339: Pattern too long"
++msgstr "E339: ¥Ñ¥¿¡Œ¥ó€¬Ä¹²á€®€Þ€¹"
++
++msgid "E50: Too many \\z("
++msgstr "E50: \\z( €¬Â¿²á€®€Þ€¹"
++
++#, c-format
++msgid "E51: Too many %s("
++msgstr "E51: %s( €¬Â¿²á€®€Þ€¹"
++
++msgid "E52: Unmatched \\z("
++msgstr "E52: \\z( €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E53: Unmatched %s%%("
++msgstr "E53: %s%%( €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E54: Unmatched %s("
++msgstr "E54: %s( €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E55: Unmatched %s)"
++msgstr "E55: %s) €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E59: invalid character after %s@"
++msgstr "E59: %s@ €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++
++#, c-format
++msgid "E60: Too many complex %s{...}s"
++msgstr "E60: Ê£»š€Ê %s{...} €¬Â¿²á€®€Þ€¹"
++
++#, c-format
++msgid "E61: Nested %s*"
++msgstr "E61:%s* €¬Æþ€ì»Ò€Ë€Ê€Ã€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E62: Nested %s%c"
++msgstr "E62:%s%c €¬Æþ€ì»Ò€Ë€Ê€Ã€Æ€€€Þ€¹"
++
++#
++msgid "E63: invalid use of \\_"
++msgstr "E63: \\_ €ÎÌµžú€Ê»ÈÍÑÊýË¡€Ç€¹"
++
++#, c-format
++msgid "E64: %s%c follows nothing"
++msgstr "E64:%s%c €Îžå€Ë€Ê€Ë€â€¢€ê€Þ€»€ó"
++
++#
++msgid "E65: Illegal back reference"
++msgstr "E65: ÉÔÀµ€ÊžåÊý»²ŸÈ€Ç€¹"
++
++#
++msgid "E66: \\z( not allowed here"
++msgstr "E66: \\z( €Ï¥³¥³€Ç€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++#
++msgid "E67: \\z1 et al. not allowed here"
++msgstr "E67: \\z1 €œ€ÎÂŸ€Ï¥³¥³€Ç€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++#
++msgid "E68: Invalid character after \\z"
++msgstr "E68: \\z €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++
++#
++#, c-format
++msgid "E69: Missing ] after %s%%["
++msgstr "E69: %s%%[ €Îžå€Ë ] €¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E70: Empty %s%%[]"
++msgstr "E70: %s%%[] €¬¶õ€Ç€¹"
++
++#
++#, c-format
++msgid "E678: Invalid character after %s%%[dxouU]"
++msgstr "E678: %s%%[dxouU] €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++
++#
++#, c-format
++msgid "E71: Invalid character after %s%%"
++msgstr "E71: %s%% €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++
++#
++#, c-format
++msgid "E769: Missing ] after %s["
++msgstr "E769: %s[ €Îžå€Ë ] €¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E554: Syntax error in %s{...}"
++msgstr "E554: %s{...} Æâ€ËÊžË¡¥š¥é¡Œ€¬€¢€ê€Þ€¹"
++
++msgid "External submatches:\n"
++msgstr "³°Éô€ÎÉôÊ¬³ºÅö:\n"
++
++msgid " VREPLACE"
++msgstr " ²ŸÁÛÃÖŽ¹"
++
++msgid " REPLACE"
++msgstr " ÃÖŽ¹"
++
++msgid " REVERSE"
++msgstr " È¿ÅŸ"
++
++msgid " INSERT"
++msgstr " ÁÞÆþ"
++
++msgid " (insert)"
++msgstr " (ÁÞÆþ)"
++
++msgid " (replace)"
++msgstr " (ÃÖŽ¹)"
++
++msgid " (vreplace)"
++msgstr " (²ŸÁÛÃÖŽ¹)"
++
++msgid " Hebrew"
++msgstr " ¥Ø¥Ö¥é¥€"
++
++msgid " Arabic"
++msgstr " ¥¢¥é¥Ó¥¢"
++
++msgid " (lang)"
++msgstr " (žÀžì)"
++
++msgid " (paste)"
++msgstr " (Åœ€êÉÕ€±)"
++
++msgid " VISUAL"
++msgstr " ¥Ó¥ž¥å¥¢¥ë"
++
++msgid " VISUAL LINE"
++msgstr " ¥Ó¥ž¥å¥¢¥ë ¹Ô"
++
++msgid " VISUAL BLOCK"
++msgstr " ¥Ó¥ž¥å¥¢¥ë ¶ë·Á"
++
++msgid " SELECT"
++msgstr " ¥»¥ì¥¯¥È"
++
++msgid " SELECT LINE"
++msgstr " ¹Ô»ØžþÁªÂò"
++
++msgid " SELECT BLOCK"
++msgstr " ¶ë·ÁÁªÂò"
++
++msgid "recording"
++msgstr "µ­Ï¿Ãæ"
++
++#, c-format
++msgid "E383: Invalid search string: %s"
++msgstr "E383: Ìµžú€Êž¡º÷Êž»úÎó€Ç€¹: %s"
++
++#, c-format
++msgid "E384: search hit TOP without match for: %s"
++msgstr "E384: Ÿå€Þ€Çž¡º÷€·€Þ€·€¿€¬³ºÅö²Õœê€Ï€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E385: search hit BOTTOM without match for: %s"
++msgstr "E385: ²Œ€Þ€Çž¡º÷€·€Þ€·€¿€¬³ºÅö²Õœê€Ï€¢€ê€Þ€»€ó: %s"
++
++msgid "E386: Expected '?' or '/'  after ';'"
++msgstr "E386: ';' €Î€¢€È€Ë€Ï '?' €« '/' €¬ŽüÂÔ€µ€ì€Æ€€€ë"
++
++msgid " (includes previously listed match)"
++msgstr " (Á°€ËÎóµó€·€¿³ºÅö²Õœê€òŽÞ€à)"
++
++#. cursor at status line
++msgid "--- Included files "
++msgstr "--- ¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë "
++
++msgid "not found "
++msgstr "ž«€Ä€«€ê€Þ€»€ó "
++
++msgid "in path ---\n"
++msgstr "¥Ñ¥¹€Ë ----\n"
++
++msgid "  (Already listed)"
++msgstr "  (Žû€ËÎóµó)"
++
++msgid "  NOT FOUND"
++msgstr "  ž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "Scanning included file: %s"
++msgstr "¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë€ò¥¹¥­¥ã¥óÃæ: %s"
++
++#, c-format
++msgid "Searching included file %s"
++msgstr "¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë€ò¥¹¥­¥ã¥óÃæ %s"
++
++msgid "E387: Match is on current line"
++msgstr "E387: žœºß¹Ô€Ë³ºÅö€¬€¢€ê€Þ€¹"
++
++msgid "All included files were found"
++msgstr "ÁŽ€Æ€Î¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë€¬ž«€Ä€«€ê€Þ€·€¿"
++
++msgid "No included files"
++msgstr "¥€¥ó¥¯¥ë¡Œ¥É¥Õ¥¡¥€¥ë€Ï€¢€ê€Þ€»€ó"
++
++msgid "E388: Couldn't find definition"
++msgstr "E388: ÄêµÁ€òž«€Ä€±€é€ì€Þ€»€ó"
++
++msgid "E389: Couldn't find pattern"
++msgstr "E389: ¥Ñ¥¿¡Œ¥ó€òž«€Ä€±€é€ì€Þ€»€ó"
++
++msgid "Substitute "
++msgstr "Substitute "
++
++#, c-format
++msgid ""
++"\n"
++"# Last %sSearch Pattern:\n"
++"~"
++msgstr ""
++"\n"
++"# ºÇžå€Î %sž¡º÷¥Ñ¥¿¡Œ¥ó:\n"
++"~"
++
++msgid "E759: Format error in spell file"
++msgstr "E759: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€ÎœñŒ°¥š¥é¡Œ€Ç€¹"
++
++msgid "E758: Truncated spell file"
++msgstr "E758: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€¬ÀÚŒè€é€ì€Æ€€€ë€è€Š€Ç€¹"
++
++#, c-format
++msgid "Trailing text in %s line %d: %s"
++msgstr "%s (%d ¹ÔÌÜ) €ËÂ³€¯¥Æ¥­¥¹¥È: %s"
++
++#, c-format
++msgid "Affix name too long in %s line %d: %s"
++msgstr "%s (%d ¹ÔÌÜ) €Î affix ÌŸ€¬Ä¹²á€®€Þ€¹: %s"
++
++msgid "E761: Format error in affix file FOL, LOW or UPP"
++msgstr ""
++"E761: affix¥Õ¥¡¥€¥ë€Î FOL, LOW €â€·€¯€Ï UPP €Î¥Õ¥©¡Œ¥Þ¥Ã¥È€Ë¥š¥é¡Œ€¬€¢€ê€Þ€¹"
++
++msgid "E762: Character in FOL, LOW or UPP is out of range"
++msgstr "E762: FOL, LOW €â€·€¯€Ï UPP €ÎÊž»ú€¬ÈÏ°Ï³°€Ç€¹"
++
++msgid "Compressing word tree..."
++msgstr "Ã±žì¥Ä¥ê¡Œ€ò°µœÌ€·€Æ€€€Þ€¹..."
++
++msgid "E756: Spell checking is not enabled"
++msgstr "E756: ¥¹¥Ú¥ë¥Á¥§¥Ã¥¯€ÏÌµžú²œ€µ€ì€Æ€€€Þ€¹"
++
++#, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr ""
++"·Ù¹ð: Ã±žì¥ê¥¹¥È \"%s_%s.spl\" €ª€è€Ó \"%s_ascii.spl\" €Ïž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
++msgstr ""
++"·Ù¹ð: Ã±žì¥ê¥¹¥È \"%s.%s.spl\" €ª€è€Ó \"%s.ascii.spl\" €Ïž«€Ä€«€ê€Þ€»€ó"
++
++#, c-format
++msgid "Reading spell file \"%s\""
++msgstr "¥¹¥Ú¥ë¥Õ¥¡¥€¥ë \"%s\" €òÆÉ¹þÃæ"
++
++msgid "E757: This does not look like a spell file"
++msgstr "E757: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹"
++
++msgid "E771: Old spell file, needs to be updated"
++msgstr "E771: žÅ€€¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ê€Î€Ç, ¥¢¥Ã¥×¥Ç¡Œ¥È€·€Æ€¯€À€µ€€"
++
++msgid "E772: Spell file is for newer version of Vim"
++msgstr "E772: €è€ê¿·€·€€¥Ð¡Œ¥ž¥ç¥ó€Î Vim ÍÑ€Î¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ç€¹"
++
++msgid "E770: Unsupported section in spell file"
++msgstr "E770: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ë¥µ¥Ý¡Œ¥È€·€Æ€€€Ê€€¥»¥¯¥·¥ç¥ó€¬€¢€ê€Þ€¹"
++
++#, c-format
++msgid "Warning: region %s not supported"
++msgstr "·Ù¹ð9: %s €È€€€ŠÈÏ°Ï€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "Reading affix file %s ..."
++msgstr "affix ¥Õ¥¡¥€¥ë %s €òÆÉ¹þÃæ..."
++
++#, c-format
++msgid "Conversion failure for word in %s line %d: %s"
++msgstr "%s (%d ¹ÔÌÜ) €ÎÃ±žì€òÊÑŽ¹€Ç€­€Þ€»€ó€Ç€·€¿: %s"
++
++#, c-format
++msgid "Conversion in %s not supported: from %s to %s"
++msgstr "%s Æâ€ÎŒ¡€ÎÊÑŽ¹€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó: %s €«€é %s €Ø"
++
++#, c-format
++msgid "Conversion in %s not supported"
++msgstr "%s Æâ€ÎÊÑŽ¹€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "Invalid value for FLAG in %s line %d: %s"
++msgstr "%s Æâ€Î %d ¹ÔÌÜ€Î FLAG €ËÌµžú€ÊÃÍ€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid "FLAG after using flags in %s line %d: %s"
++msgstr "%s Æâ€Î %d ¹ÔÌÜ€Ë¥Õ¥é¥°€ÎÆóœÅ»ÈÍÑ€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid ""
++"Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
++"%d"
++msgstr ""
++"%s €Î %d ¹ÔÌÜ€Î PFX ¹àÌÜ€Îžå€Î COMPOUNDFORBIDFLAG €ÎÄêµÁ€Ïží€Ã€¿·ë²Ì€òÀž€ž€ë"
++"€³€È€¬€¢€ê€Þ€¹"
++
++#, c-format
++msgid ""
++"Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
++"%d"
++msgstr ""
++"%s €Î %d ¹ÔÌÜ€Î PFX ¹àÌÜ€Îžå€Î COMPOUNDPERMITFLAG €ÎÄêµÁ€Ïží€Ã€¿·ë²Ì€òÀž€ž€ë"
++"€³€È€¬€¢€ê€Þ€¹"
++
++#, c-format
++msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
++msgstr "COMPOUNDRULES €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹. ¥Õ¥¡¥€¥ë %s €Î %d ¹ÔÌÜ: %s"
++
++#, c-format
++msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î COMPOUNDWORDMAX €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î COMPOUNDMIN €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î COMPOUNDSYLMAX €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î CHECKCOMPOUNDPATTERN €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid "Different combining flag in continued affix block in %s line %d: %s"
++msgstr ""
++"%s €Î %d ¹ÔÌÜ€Î Ï¢Â³ affix ¥Ö¥í¥Ã¥¯€Î¥Õ¥é¥°€ÎÁÈ¹ç€»€Ë°ã€€€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid "Duplicate affix in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Ë œÅÊ£€·€¿ affix €òž¡œÐ€·€Þ€·€¿: %s"
++
++#, c-format
++msgid ""
++"Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
++"line %d: %s"
++msgstr ""
++"%s €Î %d ¹ÔÌÜ€Î affix €Ï BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
++"€Ë»ÈÍÑ€·€Æ€¯€À€µ€€: %s"
++
++#, c-format
++msgid "Expected Y or N in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Ç€Ï Y €« N €¬É¬Í×€Ç€¹: %s"
++
++#, c-format
++msgid "Broken condition in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î Ÿò·ï€Ï²õ€ì€Æ€€€Þ€¹: %s"
++
++#, c-format
++msgid "Expected REP(SAL) count in %s line %d"
++msgstr "%s €Î %d ¹ÔÌÜ€Ë€Ï REP(SAL) €Î²ó¿ô€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "Expected MAP count in %s line %d"
++msgstr "%s €Î %d ¹ÔÌÜ€Ë€Ï MAP €Î²ó¿ô€¬É¬Í×€Ç€¹"
++
++#, c-format
++msgid "Duplicate character in MAP in %s line %d"
++msgstr "%s €Î %d ¹ÔÌÜ€Î MAP €ËœÅÊ£€·€¿Êž»ú€¬€¢€ê€Þ€¹"
++
++#, c-format
++msgid "Unrecognized or duplicate item in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Ë Ç§Œ±€Ç€­€Ê€€€«œÅÊ£€·€¿¹àÌÜ€¬€¢€ê€Þ€¹: %s"
++
++#, c-format
++msgid "Missing FOL/LOW/UPP line in %s"
++msgstr "%s ¹ÔÌÜ€Ë FOL/LOW/UPP €¬€¢€ê€Þ€»€ó"
++
++msgid "COMPOUNDSYLMAX used without SYLLABLE"
++msgstr "SYLLABLE €¬»ØÄê€µ€ì€Ê€€ COMPOUNDSYLMAX"
++
++msgid "Too many postponed prefixes"
++msgstr "ÃÙ±äžåÃÖ»Ò€¬Â¿²á€®€Þ€¹"
++
++msgid "Too many compound flags"
++msgstr "Ê£¹ç¥Õ¥é¥°€¬Â¿²á€®€Þ€¹"
++
++msgid "Too many postponed prefixes and/or compound flags"
++msgstr "ÃÙ±äžåÃÖ»Ò €È/€â€·€¯€Ï Ê£¹ç¥Õ¥é¥°€¬Â¿²á€®€Þ€¹"
++
++#, c-format
++msgid "Missing SOFO%s line in %s"
++msgstr "SOFO%s ¹Ô€¬ %s €Ë€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "Both SAL and SOFO lines in %s"
++msgstr "SAL¹Ô €È SOFO¹Ô €¬ %s €ÇÎŸÊý»ØÄê€µ€ì€Æ€€€Þ€¹"
++
++#, c-format
++msgid "Flag is not a number in %s line %d: %s"
++msgstr "%s €Î %d ¹Ô€Î ¥Õ¥é¥°€¬¿ôÃÍ€Ç€Ï€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "Illegal flag in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î ¥Õ¥é¥°€¬ÉÔÀµ€Ç€¹: %s"
++
++#, c-format
++msgid "%s value differs from what is used in another .aff file"
++msgstr "ÃÍ %s €ÏÂŸ€Î .aff ¥Õ¥¡¥€¥ë€Ç»ÈÍÑ€µ€ì€¿€Î€È°Û€Ê€ê€Þ€¹"
++
++#, c-format
++msgid "Reading dictionary file %s ..."
++msgstr "Œ­œñ¥Õ¥¡¥€¥ë %s €ò¥¹¥­¥ã¥óÃæ..."
++
++#, c-format
++msgid "E760: No word count in %s"
++msgstr "E760: %s €Ë€ÏÃ±žì¿ô€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "line %6d, word %6d - %s"
++msgstr "¹Ô %6d, Ã±žì %6d - %s"
++
++#, c-format
++msgid "Duplicate word in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Ç œÅÊ£Ã±žì€¬ž«€Ä€«€ê€Þ€·€¿: %s"
++
++#, c-format
++msgid "First duplicate word in %s line %d: %s"
++msgstr "œÅÊ£€Î€Š€ÁºÇœé€ÎÃ±žì€Ï %s €Î %d ¹ÔÌÜ€Ç€¹: %s"
++
++#, c-format
++msgid "%d duplicate word(s) in %s"
++msgstr "%d žÄ€ÎÃ±žì€¬ž«€Ä€«€ê€Þ€·€¿ (%s Æâ)"
++
++#, c-format
++msgid "Ignored %d word(s) with non-ASCII characters in %s"
++msgstr "ÈóASCIIÊž»ú€òŽÞ€à %d žÄ€ÎÃ±žì€òÌµ»ë€·€Þ€·€¿ (%s Æâ)"
++
++#, c-format
++msgid "Reading word file %s ..."
++msgstr "ÉžœàÆþÎÏ€«€éÆÉ¹þ€ßÃæ %s ..."
++
++#, c-format
++msgid "Duplicate /encoding= line ignored in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î œÅÊ£€·€¿ /encoding= ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++
++#, c-format
++msgid "/encoding= line after word ignored in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î Ã±žì€Îžå€Î /encoding= ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++
++#, c-format
++msgid "Duplicate /regions= line ignored in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î œÅÊ£€·€¿ /regions= ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++
++#, c-format
++msgid "Too many regions in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ, ÈÏ°Ï»ØÄê€¬Â¿²á€®€Þ€¹: %s"
++
++#, c-format
++msgid "/ line ignored in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ€Î œÅÊ£€·€¿ / ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++
++#, c-format
++msgid "Invalid region nr in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ Ìµžú€Ê nr ÎÎ°è€Ç€¹: %s"
++
++#, c-format
++msgid "Unrecognized flags in %s line %d: %s"
++msgstr "%s €Î %d ¹ÔÌÜ Ç§Œ±ÉÔÇœ€Ê¥Õ¥é¥°€Ç€¹: %s"
++
++#, c-format
++msgid "Ignored %d words with non-ASCII characters"
++msgstr "ÈóASCIIÊž»ú€òŽÞ€à %d žÄ€ÎÃ±žì€òÌµ»ë€·€Þ€·€¿"
++
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: ¥á¥â¥ê€¬Â­€ê€Ê€€€Î€Ç¡¢Ã±žì¥ê¥¹¥È€ÏÉÔŽ°ÁŽ€Ç€¹"
++
++#, c-format
++msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
++msgstr "¥Î¡Œ¥É %d žÄ(ÁŽ %d žÄÃæ) €ò°µœÌ€·€Þ€·€¿; »Ä€ê %d (%d%%)"
++
++msgid "Reading back spell file..."
++msgstr "¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€òµÕÆÉ¹þÃæ"
++
++#.
++#. * Go through the trie of good words, soundfold each word and add it to
++#. * the soundfold trie.
++#.
++msgid "Performing soundfolding..."
++msgstr "²»ÀŒŸö¹þ€ß€òŒÂ¹ÔÃæ..."
++
++#, c-format
++msgid "Number of words after soundfolding: %ld"
++msgstr "²»ÀŒŸö¹þ€ßžå€ÎÁíÃ±žì¿ô: %ld"
++
++#, c-format
++msgid "Total number of words: %d"
++msgstr "ÁíÃ±žì¿ô: %d"
++
++#, c-format
++msgid "Writing suggestion file %s ..."
++msgstr "œ€ÀµžõÊä¥Õ¥¡¥€¥ë \"%s\" €òœñ¹þ€ßÃæ..."
++
++#, c-format
++msgid "Estimated runtime memory use: %d bytes"
++msgstr "¿äÄê¥á¥â¥ê»ÈÍÑÎÌ: %d ¥Ð¥€¥È"
++
++msgid "E751: Output file name must not have region name"
++msgstr "E751: œÐÎÏ¥Õ¥¡¥€¥ëÌŸ€Ë€ÏÈÏ°ÏÌŸ€òŽÞ€á€é€ì€Þ€»€ó"
++
++msgid "E754: Only up to 8 regions supported"
++msgstr "E754: ÈÏ°Ï€Ï 8 žÄ€Þ€Ç€·€«¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E755: Invalid region in %s"
++msgstr "E755: Ìµžú€ÊÈÏ°Ï€Ç€¹: %s"
++
++msgid "Warning: both compounding and NOBREAK specified"
++msgstr "·Ù¹ð: Ê£¹ç¥Õ¥é¥°€È NOBREAK €¬ÎŸÊý€È€â»ØÄê€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "Writing spell file %s ..."
++msgstr "¥¹¥Ú¥ë¥Õ¥¡¥€¥ë %s €òœñ¹þ€ßÃæ..."
++
++msgid "Done!"
++msgstr "ŒÂ¹Ô€·€Þ€·€¿!"
++
++#, c-format
++msgid "E765: 'spellfile' does not have %ld entries"
++msgstr "E765: 'spellfile' €Ë€Ï %ld žÄ€Î¥š¥ó¥È¥ê€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "Word removed from %s"
++msgstr "%s €«€éÃ±žì€¬ºïœü€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "Word added to %s"
++msgstr "%s €ËÃ±žì€¬ÄÉ²Ã€µ€ì€Þ€·€¿"
++
++msgid "E763: Word characters differ between spell files"
++msgstr "E763: Ã±žì€ÎÊž»ú€¬¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€È°Û€Ê€ê€Þ€¹"
++
++msgid "Sorry, no suggestions"
++msgstr "»ÄÇ°€Ç€¹€¬, œ€ÀµžõÊä€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "Sorry, only %ld suggestions"
++msgstr "»ÄÇ°€Ç€¹€¬, œ€ÀµžõÊä€Ï %ld žÄ€·€«€¢€ê€Þ€»€ó"
++
++#. for when 'cmdheight' > 1
++#. avoid more prompt
++#, c-format
++msgid "Change \"%.*s\" to:"
++msgstr "\"%.*s\" €òŒ¡€ØÊÑŽ¹:"
++
++#, c-format
++msgid " < \"%.*s\""
++msgstr " < \"%.*s\""
++
++msgid "E752: No previous spell replacement"
++msgstr "E752: ¥¹¥Ú¥ëÃÖŽ¹€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E753: Not found: %s"
++msgstr "E753: ž«€Ä€«€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E778: This does not look like a .sug file: %s"
++msgstr "E778: .sug ¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹: %s"
++
++#, c-format
++msgid "E779: Old .sug file, needs to be updated: %s"
++msgstr "E779: žÅ€€ .sug ¥Õ¥¡¥€¥ë€Ê€Î€Ç, ¥¢¥Ã¥×¥Ç¡Œ¥È€·€Æ€¯€À€µ€€: %s"
++
++#, c-format
++msgid "E780: .sug file is for newer version of Vim: %s"
++msgstr "E780: €è€ê¿·€·€€¥Ð¡Œ¥ž¥ç¥ó€Î Vim ÍÑ€Î .sug ¥Õ¥¡¥€¥ë€Ç€¹: %s"
++
++#, c-format
++msgid "E781: .sug file doesn't match .spl file: %s"
++msgstr "E781: .sug ¥Õ¥¡¥€¥ë€¬ .spl ¥Õ¥¡¥€¥ë€È°ìÃ×€·€Þ€»€ó: %s"
++
++#, c-format
++msgid "E782: error while reading .sug file: %s"
++msgstr "E782: .sug ¥Õ¥¡¥€¥ë€ÎÆÉ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿: %s"
++
++#. This should have been checked when generating the .spl
++#. * file.
++msgid "E783: duplicate char in MAP entry"
++msgstr "E783: MAP ¥š¥ó¥È¥ê€ËœÅÊ£Êž»ú€¬Âžºß€·€Þ€¹"
++
++#, c-format
++msgid "E390: Illegal argument: %s"
++msgstr "E390: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E391: No such syntax cluster: %s"
++msgstr "E391: €œ€Î€è€Š€Ê¹œÊž¥¯¥é¥¹¥¿€Ï€¢€ê€Þ€»€ó: %s"
++
++msgid "No Syntax items defined for this buffer"
++msgstr "€³€Î¥Ð¥Ã¥Õ¥¡€ËÄêµÁ€µ€ì€¿¹œÊžÍ×ÁÇ€Ï€¢€ê€Þ€»€ó"
++
++msgid "syncing on C-style comments"
++msgstr "CžÀžìÉ÷¥³¥á¥ó¥È€«€éÆ±ŽüÃæ"
++
++msgid "no syncing"
++msgstr "ÈóÆ±Žü"
++
++msgid "syncing starts "
++msgstr "Æ±Žü³«»Ï "
++
++msgid " lines before top line"
++msgstr " ¹ÔÁ°(¥È¥Ã¥×¹Ô€è€ê€â)"
++
++msgid ""
++"\n"
++"--- Syntax sync items ---"
++msgstr ""
++"\n"
++"--- ¹œÊžÆ±ŽüÍ×ÁÇ ---"
++
++msgid ""
++"\n"
++"syncing on items"
++msgstr ""
++"\n"
++"Í×ÁÇŸå€ÇÆ±ŽüÃæ"
++
++msgid ""
++"\n"
++"--- Syntax items ---"
++msgstr ""
++"\n"
++"--- ¹œÊžÍ×ÁÇ ---"
++
++#, c-format
++msgid "E392: No such syntax cluster: %s"
++msgstr "E392: €œ€Î€è€Š€Ê¹œÊž¥¯¥é¥¹¥¿€Ï€¢€ê€Þ€»€ó: %s"
++
++msgid "minimal "
++msgstr "minimal "
++
++msgid "maximal "
++msgstr "maximal "
++
++msgid "; match "
++msgstr "; ³ºÅö "
++
++msgid " line breaks"
++msgstr " žÄ€Î²þ¹Ô"
++
++msgid "E395: contains argument not accepted here"
++msgstr "E395: €³€ÎŸìœê€Ç€Ï°ú¿ôcontains€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E844: invalid cchar value"
++msgstr "E844: Ìµžú€Êcchar€ÎÃÍ€Ç€¹"
++
++msgid "E393: group[t]here not accepted here"
++msgstr "E393: €³€³€Ç€Ï¥°¥ë¡Œ¥×€Ïµö²Ä€µ€ì€Þ€»€ó"
++
++#, c-format
++msgid "E394: Didn't find region item for %s"
++msgstr "E394: %s €ÎÈÏ°ÏÍ×ÁÇ€¬ž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E397: Filename required"
++msgstr "E397: ¥Õ¥¡¥€¥ëÌŸ€¬É¬Í×€Ç€¹"
++
++msgid "E847: Too many syntax includes"
++msgstr "E847: ¹œÊž€ÎŒè€ê¹þ€ß(include)€¬Â¿²á€®€Þ€¹"
++
++#, c-format
++msgid "E789: Missing ']': %s"
++msgstr "E789: ']' €¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E398: Missing '=': %s"
++msgstr "E398: '=' €¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E399: Not enough arguments: syntax region %s"
++msgstr "E399: °ú¿ô€¬Â­€ê€Þ€»€ó: ¹œÊžÈÏ°Ï %s"
++
++msgid "E848: Too many syntax clusters"
++msgstr "E848: ¹œÊž¥¯¥é¥¹¥¿€¬Â¿²á€®€Þ€¹"
++
++msgid "E400: No cluster specified"
++msgstr "E400: ¥¯¥é¥¹¥¿€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E401: Pattern delimiter not found: %s"
++msgstr "E401: ¥Ñ¥¿¡Œ¥ó¶èÀÚ€ê€¬ž«€Ä€«€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E402: Garbage after pattern: %s"
++msgstr "E402: ¥Ñ¥¿¡Œ¥ó€Î€¢€È€Ë¥Ž¥ß€¬€¢€ê€Þ€¹: %s"
++
++msgid "E403: syntax sync: line continuations pattern specified twice"
++msgstr "E403: ¹œÊžÆ±Žü: Ï¢Â³¹Ô¥Ñ¥¿¡Œ¥ó€¬2ÅÙ»ØÄê€µ€ì€Þ€·€¿"
++
++#, c-format
++msgid "E404: Illegal arguments: %s"
++msgstr "E404: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E405: Missing equal sign: %s"
++msgstr "E405: Åù¹æ€¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E406: Empty argument: %s"
++msgstr "E406: ¶õ€Î°ú¿ô: %s"
++
++#, c-format
++msgid "E407: %s not allowed here"
++msgstr "E407: %s €Ï¥³¥³€Ç€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++#, c-format
++msgid "E408: %s must be first in contains list"
++msgstr "E408: %s €ÏÆâÍÆ¥ê¥¹¥È€ÎÀèÆ¬€Ç€Ê€±€ì€Ð€Ê€é€Ê€€"
++
++#, c-format
++msgid "E409: Unknown group name: %s"
++msgstr "E409: Ì€ÃÎ€Î¥°¥ë¡Œ¥×ÌŸ: %s"
++
++#, c-format
++msgid "E410: Invalid :syntax subcommand: %s"
++msgstr "E410: Ìµžú€Ê :syntax €Î¥µ¥Ö¥³¥Þ¥ó¥É: %s"
++
++msgid "E679: recursive loop loading syncolor.vim"
++msgstr "E679: syncolor.vim €ÎºÆµ¢žÆ€ÓœÐ€·€òž¡œÐ€·€Þ€·€¿"
++
++#, c-format
++msgid "E411: highlight group not found: %s"
++msgstr "E411: ¥Ï¥€¥é¥€¥È¥°¥ë¡Œ¥×€¬ž«€Ä€«€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E412: Not enough arguments: \":highlight link %s\""
++msgstr "E412: °ú¿ô€¬œŒÊ¬€Ç€Ï€Ê€€: \":highlight link %s\""
++
++#, c-format
++msgid "E413: Too many arguments: \":highlight link %s\""
++msgstr "E413: °ú¿ô€¬Â¿²á€®€Þ€¹: \":highlight link %s\""
++
++msgid "E414: group has settings, highlight link ignored"
++msgstr "E414: ¥°¥ë¡Œ¥×€¬ÀßÄê€µ€ì€Æ€€€ë€Î€Ç¥Ï¥€¥é¥€¥È¥ê¥ó¥¯€ÏÌµ»ë€µ€ì€Þ€¹"
++
++#, c-format
++msgid "E415: unexpected equal sign: %s"
++msgstr "E415: ÍœŽü€»€ÌÅù¹æ€Ç€¹: %s"
++
++#, c-format
++msgid "E416: missing equal sign: %s"
++msgstr "E416: Åù¹æ€¬€¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E417: missing argument: %s"
++msgstr "E417: °ú¿ô€¬€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E418: Illegal value: %s"
++msgstr "E418: ÉÔÀµ€ÊÃÍ€Ç€¹: %s"
++
++msgid "E419: FG color unknown"
++msgstr "E419: Ì€ÃÎ€ÎÁ°·Ê¿§€Ç€¹"
++
++msgid "E420: BG color unknown"
++msgstr "E420: Ì€ÃÎ€ÎÇØ·Ê¿§€Ç€¹"
++
++#, c-format
++msgid "E421: Color name or number not recognized: %s"
++msgstr "E421: ¥«¥é¡ŒÌŸ€äÈÖ¹æ€òÇ§Œ±€Ç€­€Þ€»€ó: %s"
++
++#, c-format
++msgid "E422: terminal code too long: %s"
++msgstr "E422: œªÃŒ¥³¡Œ¥É€¬Ä¹²á€®€Þ€¹: %s"
++
++#, c-format
++msgid "E423: Illegal argument: %s"
++msgstr "E423: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++
++msgid "E424: Too many different highlighting attributes in use"
++msgstr "E424: Â¿€¯€Î°Û€Ê€ë¥Ï¥€¥é¥€¥ÈÂ°À­€¬»È€ï€ì²á€®€Æ€€€Þ€¹"
++
++msgid "E669: Unprintable character in group name"
++msgstr "E669: ¥°¥ë¡Œ¥×ÌŸ€Ë°õºþÉÔ²ÄÇœ€ÊÊž»ú€¬€¢€ê€Þ€¹"
++
++msgid "W18: Invalid character in group name"
++msgstr "W18: ¥°¥ë¡Œ¥×ÌŸ€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€¹"
++
++msgid "E849: Too many highlight and syntax groups"
++msgstr "E849: ¥Ï¥€¥é¥€¥È€È¹œÊž¥°¥ë¡Œ¥×€¬Â¿²á€®€Þ€¹"
++
++msgid "E555: at bottom of tag stack"
++msgstr "E555: ¥¿¥°¥¹¥¿¥Ã¥¯€ÎËöÈø€Ç€¹"
++
++msgid "E556: at top of tag stack"
++msgstr "E556: ¥¿¥°¥¹¥¿¥Ã¥¯€ÎÀèÆ¬€Ç€¹"
++
++msgid "E425: Cannot go before first matching tag"
++msgstr "E425: ºÇœé€Î³ºÅö¥¿¥°€òÄ¶€š€ÆÌá€ë€³€È€Ï€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E426: tag not found: %s"
++msgstr "E426: ¥¿¥°€¬ž«€Ä€«€ê€Þ€»€ó: %s"
++
++msgid "  # pri kind tag"
++msgstr "  # pri kind tag"
++
++msgid "file\n"
++msgstr "¥Õ¥¡¥€¥ë\n"
++
++msgid "E427: There is only one matching tag"
++msgstr "E427: ³ºÅö¥¿¥°€¬1€Ä€À€±€·€«€¢€ê€Þ€»€ó"
++
++msgid "E428: Cannot go beyond last matching tag"
++msgstr "E428: ºÇžå€Ë³ºÅö€¹€ë¥¿¥°€òÄ¶€š€Æ¿Ê€à€³€È€Ï€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "File \"%s\" does not exist"
++msgstr "¥Õ¥¡¥€¥ë \"%s\" €¬€¢€ê€Þ€»€ó"
++
++#. Give an indication of the number of matching tags
++#, c-format
++msgid "tag %d of %d%s"
++msgstr "¥¿¥° %d (ÁŽ%d%s)"
++
++msgid " or more"
++msgstr " €«€œ€ì°ÊŸå"
++
++msgid "  Using tag with different case!"
++msgstr "  ¥¿¥°€ò°Û€Ê€ëcase€Ç»ÈÍÑ€·€Þ€¹!"
++
++#, c-format
++msgid "E429: File \"%s\" does not exist"
++msgstr "E429: ¥Õ¥¡¥€¥ë \"%s\" €¬€¢€ê€Þ€»€ó"
++
++#. Highlight title
++msgid ""
++"\n"
++"  # TO tag         FROM line  in file/text"
++msgstr ""
++"\n"
++"  # TO ¥¿¥°        FROM ¹Ô    in file/text"
++
++#, c-format
++msgid "Searching tags file %s"
++msgstr "¥¿¥°¥Õ¥¡¥€¥ë %s €òž¡º÷Ãæ"
++
++#, c-format
++msgid "E430: Tag file path truncated for %s\n"
++msgstr "E430: ¥¿¥°¥Õ¥¡¥€¥ë€Î¥Ñ¥¹€¬ %s €ËÀÚ€êŒÎ€Æ€é€ì€Þ€·€¿\n"
++
++msgid "Ignoring long line in tags file"
++msgstr "¥¿¥°¥Õ¥¡¥€¥ëÆâ€ÎÄ¹€€¹Ô€òÌµ»ë€·€Þ€¹"
++
++#, c-format
++msgid "E431: Format error in tags file \"%s\""
++msgstr "E431: ¥¿¥°¥Õ¥¡¥€¥ë \"%s\" €Î¥Õ¥©¡Œ¥Þ¥Ã¥È€Ë¥š¥é¡Œ€¬€¢€ê€Þ€¹"
++
++#, c-format
++msgid "Before byte %ld"
++msgstr "ÄŸÁ°€Î %ld ¥Ð¥€¥È"
++
++#, c-format
++msgid "E432: Tags file not sorted: %s"
++msgstr "E432: ¥¿¥°¥Õ¥¡¥€¥ë€¬¥œ¡Œ¥È€µ€ì€Æ€€€Þ€»€ó: %s"
++
++#. never opened any tags file
++msgid "E433: No tags file"
++msgstr "E433: ¥¿¥°¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++
++msgid "E434: Can't find tag pattern"
++msgstr "E434: ¥¿¥°¥Ñ¥¿¡Œ¥ó€òž«€Ä€±€é€ì€Þ€»€ó"
++
++msgid "E435: Couldn't find tag, just guessing!"
++msgstr "E435: ¥¿¥°€òž«€Ä€±€é€ì€Ê€€€Î€ÇÃ±€Ë¿äÂ¬€·€Þ€¹!"
++
++#, c-format
++msgid "Duplicate field name: %s"
++msgstr "œÅÊ£€·€¿¥Õ¥£¡Œ¥ë¥ÉÌŸ: %s"
++
++msgid "' not known. Available builtin terminals are:"
++msgstr "' €ÏÌ€ÃÎ€Ç€¹. žœ¹Ô€ÎÁÈ€ß¹þ€ßÃŒËö€ÏŒ¡€Î€È€ª€ê€Ç€¹:"
++
++msgid "defaulting to '"
++msgstr "ŸÊÎ¬ÃÍ€òŒ¡€Î€è€Š€ËÀßÄê€·€Þ€¹ '"
++
++msgid "E557: Cannot open termcap file"
++msgstr "E557: termcap¥Õ¥¡¥€¥ë€ò³«€±€Þ€»€ó"
++
++msgid "E558: Terminal entry not found in terminfo"
++msgstr "E558: terminfo€ËÃŒËö¥š¥ó¥È¥ê€òž«€Ä€±€é€ì€Þ€»€ó"
++
++msgid "E559: Terminal entry not found in termcap"
++msgstr "E559: termcap€ËÃŒËö¥š¥ó¥È¥ê€òž«€Ä€±€é€ì€Þ€»€ó"
++
++#, c-format
++msgid "E436: No \"%s\" entry in termcap"
++msgstr "E436: termcap€Ë \"%s\" €Î¥š¥ó¥È¥ê€¬€¢€ê€Þ€»€ó"
++
++msgid "E437: terminal capability \"cm\" required"
++msgstr "E437: ÃŒËö€Ë \"cm\" µ¡Çœ€¬É¬Í×€Ç€¹"
++
++#. Highlight title
++msgid ""
++"\n"
++"--- Terminal keys ---"
++msgstr ""
++"\n"
++"--- ÃŒËö¥­¡Œ ---"
++
++msgid "new shell started\n"
++msgstr "¿·€·€€¥·¥§¥ë€òµ¯Æ°€·€Þ€¹\n"
++
++msgid "Vim: Error reading input, exiting...\n"
++msgstr "Vim: ÆþÎÏ€òÆÉ¹þ€ßÃæ€Î¥š¥é¡Œ€Ë€è€êœªÎ»€·€Þ€¹...\n"
++
++msgid "Used CUT_BUFFER0 instead of empty selection"
++msgstr "¶õ€ÎÁªÂòÎÎ°è€Î€«€ï€ê€ËCUT_BUFFER0€¬»ÈÍÑ€µ€ì€Þ€·€¿"
++
++#. This happens when the FileChangedRO autocommand changes the
++#. * file in a way it becomes shorter.
++msgid "E834: Line count changed unexpectedly"
++msgstr "E834: ÍœŽü€»€º¹Ô¥«¥Š¥ó¥È€¬ÊÑ€ï€ê€Þ€·€¿"
++
++#. must display the prompt
++msgid "No undo possible; continue anyway"
++msgstr "²ÄÇœ€Ê¥¢¥ó¥É¥¥€Ï€¢€ê€Þ€»€ó: €È€ê€¢€š€ºÂ³€±€Þ€¹"
++
++#, c-format
++msgid "E828: Cannot open undo file for writing: %s"
++msgstr "E828: œñ¹þ€ßÍÑ€Ë¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€ò³«€±€Þ€»€ó: %s"
++
++#, c-format
++msgid "E825: Corrupted undo file (%s): %s"
++msgstr "E825: ¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€¬²õ€ì€Æ€€€Þ€¹ (%s): %s"
++
++msgid "Cannot write undo file in any directory in 'undodir'"
++msgstr "'undodir'€Î¥Ç¥£¥ì¥¯¥È¥ê€Ë¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€òœñ€­¹þ€á€Þ€»€ó"
++
++#, c-format
++msgid "Will not overwrite with undo file, cannot read: %s"
++msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€È€·€ÆÆÉ€ß¹þ€á€Ê€€€Î€ÇŸåœñ€­€·€Þ€»€ó: %s"
++
++#, c-format
++msgid "Will not overwrite, this is not an undo file: %s"
++msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€Î€ÇŸåœñ€­€·€Þ€»€ó: %s"
++
++msgid "Skipping undo file write, nothing to undo"
++msgstr "ÂÐŸÝ€¬€Ê€€€Î€Ç¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€Îœñ€­¹þ€ß€ò¥¹¥­¥Ã¥×€·€Þ€¹"
++
++#, c-format
++msgid "Writing undo file: %s"
++msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ëœñ€­¹þ€ßÃæ: %s"
++
++#, c-format
++msgid "E829: write error in undo file: %s"
++msgstr "E829: ¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€Îœñ€­¹þ€ß¥š¥é¡Œ€Ç€¹: %s"
++
++#, c-format
++msgid "Not reading undo file, owner differs: %s"
++msgstr "¥ª¡Œ¥Ê¡Œ€¬°Û€Ê€ë€Î€Ç¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€òÆÉ€ß¹þ€ß€Þ€»€ó: %s"
++
++#, c-format
++msgid "Reading undo file: %s"
++msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ëÆÉ¹þÃæ: %s"
++
++#, c-format
++msgid "E822: Cannot open undo file for reading: %s"
++msgstr "E822: ¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€òÆÉ¹þÍÑ€È€·€Æ³«€±€Þ€»€ó: %s"
++
++#, c-format
++msgid "E823: Not an undo file: %s"
++msgstr "E823: ¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€Ç€Ï€¢€ê€Þ€»€ó: %s"
++
++#, c-format
++msgid "E832: Non-encrypted file has encrypted undo file: %s"
++msgstr "E832: Èó°Å¹æ²œ¥Õ¥¡¥€¥ë€¬°Å¹æ²œ€µ€ì€¿¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€ò»È€Ã€Æ€Þ€¹: %s"
++
++#, c-format
++msgid "E826: Undo file decryption failed: %s"
++msgstr "E826: °Å¹æ²œ€µ€ì€¿¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€Î²òÆÉ€ËŒºÇÔ€·€Þ€·€¿: %s"
++
++#, c-format
++msgid "E827: Undo file is encrypted: %s"
++msgstr "E827: ¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€¬°Å¹æ²œ€µ€ì€Æ€€€Þ€¹: %s"
++
++#, c-format
++msgid "E824: Incompatible undo file: %s"
++msgstr "E824: žßŽ¹À­€ÎÌµ€€¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë€Ç€¹: %s"
++
++msgid "File contents changed, cannot use undo info"
++msgstr "¥Õ¥¡¥€¥ë€ÎÆâÍÆ€¬ÊÑ€ï€Ã€Æ€€€ë€¿€á¡¢¥¢¥ó¥É¥¥ŸðÊó€òÍøÍÑ€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "Finished reading undo file %s"
++msgstr "¥¢¥ó¥É¥¥¥Õ¥¡¥€¥ë %s €ÎŒè¹þ€òŽ°Î»"
++
++msgid "Already at oldest change"
++msgstr "Žû€Ë°ìÈÖžÅ€€ÊÑ¹¹€Ç€¹"
++
++msgid "Already at newest change"
++msgstr "Žû€Ë°ìÈÖ¿·€·€€ÊÑ¹¹€Ç€¹"
++
++#, c-format
++msgid "E830: Undo number %ld not found"
++msgstr "E830: ¥¢¥ó¥É¥¥ÈÖ¹æ %ld €Ïž«€Ä€«€ê€Þ€»€ó"
++
++msgid "E438: u_undo: line numbers wrong"
++msgstr "E438: u_undo: ¹ÔÈÖ¹æ€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++
++msgid "more line"
++msgstr "¹Ô ÄÉ²Ã€·€Þ€·€¿"
++
++msgid "more lines"
++msgstr "¹Ô ÄÉ²Ã€·€Þ€·€¿"
++
++msgid "line less"
++msgstr "¹Ô ºïœü€·€Þ€·€¿"
++
++msgid "fewer lines"
++msgstr "¹Ô ºïœü€·€Þ€·€¿"
++
++msgid "change"
++msgstr "²ÕœêÊÑ¹¹€·€Þ€·€¿"
++
++msgid "changes"
++msgstr "²ÕœêÊÑ¹¹€·€Þ€·€¿"
++
++#, c-format
++msgid "%ld %s; %s #%ld  %s"
++msgstr "%ld %s; %s #%ld  %s"
++
++msgid "before"
++msgstr "Á°Êý"
++
++msgid "after"
++msgstr "žåÊý"
++
++msgid "Nothing to undo"
++msgstr "¥¢¥ó¥É¥¥ÂÐŸÝ€¬€¢€ê€Þ€»€ó"
++
++msgid "number changes  when               saved"
++msgstr "ÄÌÈÖ   ÊÑ¹¹¿ô   ÊÑ¹¹»þŽü           ÊÝÂžºÑ"
++
++#, c-format
++msgid "%ld seconds ago"
++msgstr "%ld ÉÃ·Ð²á€·€Æ€€€Þ€¹"
++
++msgid "E790: undojoin is not allowed after undo"
++msgstr "E790: undo €ÎÄŸžå€Ë undojoin €Ï€Ç€­€Þ€»€ó"
++
++msgid "E439: undo list corrupt"
++msgstr "E439: ¥¢¥ó¥É¥¥¥ê¥¹¥È€¬²õ€ì€Æ€€€Þ€¹"
++
++msgid "E440: undo line missing"
++msgstr "E440: ¥¢¥ó¥É¥¥¹Ô€¬€¢€ê€Þ€»€ó"
++
++#. Only MS VC 4.1 and earlier can do Win32s
++msgid ""
++"\n"
++"MS-Windows 16/32-bit GUI version"
++msgstr ""
++"\n"
++"MS-Windows 16/32 ¥Ó¥Ã¥È GUI ÈÇ"
++
++msgid ""
++"\n"
++"MS-Windows 64-bit GUI version"
++msgstr ""
++"\n"
++"MS-Windows 64 ¥Ó¥Ã¥È GUI ÈÇ"
++
++msgid ""
++"\n"
++"MS-Windows 32-bit GUI version"
++msgstr ""
++"\n"
++"MS-Windows 32 ¥Ó¥Ã¥È GUI ÈÇ"
++
++msgid " in Win32s mode"
++msgstr " in Win32s ¥â¡Œ¥É"
++
++msgid " with OLE support"
++msgstr " with OLE ¥µ¥Ý¡Œ¥È"
++
++msgid ""
++"\n"
++"MS-Windows 64-bit console version"
++msgstr ""
++"\n"
++"MS-Windows 64 ¥Ó¥Ã¥È ¥³¥ó¥œ¡Œ¥ë ÈÇ"
++
++msgid ""
++"\n"
++"MS-Windows 32-bit console version"
++msgstr ""
++"\n"
++"MS-Windows 32 ¥Ó¥Ã¥È ¥³¥ó¥œ¡Œ¥ë ÈÇ"
++
++msgid ""
++"\n"
++"MS-Windows 16-bit version"
++msgstr ""
++"\n"
++"MS-Windows 16 ¥Ó¥Ã¥È ÈÇ"
++
++msgid ""
++"\n"
++"32-bit MS-DOS version"
++msgstr ""
++"\n"
++"32 ¥Ó¥Ã¥È MS-DOS ÈÇ"
++
++msgid ""
++"\n"
++"16-bit MS-DOS version"
++msgstr ""
++"\n"
++"16 ¥Ó¥Ã¥È MS-DOS ÈÇ"
++
++msgid ""
++"\n"
++"MacOS X (unix) version"
++msgstr ""
++"\n"
++"MacOS X (unix) ÈÇ"
++
++msgid ""
++"\n"
++"MacOS X version"
++msgstr ""
++"\n"
++"MacOS X ÈÇ"
++
++msgid ""
++"\n"
++"MacOS version"
++msgstr ""
++"\n"
++"MacOS ÈÇ"
++
++msgid ""
++"\n"
++"OpenVMS version"
++msgstr ""
++"\n"
++"OpenVMS ÈÇ"
++
++msgid ""
++"\n"
++"Included patches: "
++msgstr ""
++"\n"
++"Å¬ÍÑºÑ¥Ñ¥Ã¥Á: "
++
++msgid ""
++"\n"
++"Extra patches: "
++msgstr ""
++"\n"
++"ÄÉ²Ã³ÈÄ¥¥Ñ¥Ã¥Á: "
++
++msgid "Modified by "
++msgstr "Modified by "
++
++msgid ""
++"\n"
++"Compiled "
++msgstr ""
++"\n"
++"Compiled "
++
++msgid "by "
++msgstr "by "
++
++msgid ""
++"\n"
++"Huge version "
++msgstr ""
++"\n"
++"Huge ÈÇ "
++
++msgid ""
++"\n"
++"Big version "
++msgstr ""
++"\n"
++"Big ÈÇ "
++
++msgid ""
++"\n"
++"Normal version "
++msgstr ""
++"\n"
++"ÄÌŸï ÈÇ "
++
++msgid ""
++"\n"
++"Small version "
++msgstr ""
++"\n"
++"Small ÈÇ "
++
++msgid ""
++"\n"
++"Tiny version "
++msgstr ""
++"\n"
++"Tiny ÈÇ "
++
++msgid "without GUI."
++msgstr "without GUI."
++
++msgid "with GTK2-GNOME GUI."
++msgstr "with GTK2-GNOME GUI."
++
++msgid "with GTK2 GUI."
++msgstr "with GTK2 GUI."
++
++msgid "with X11-Motif GUI."
++msgstr "with X11-Motif GUI."
++
++msgid "with X11-neXtaw GUI."
++msgstr "with X11-neXtaw GUI."
++
++msgid "with X11-Athena GUI."
++msgstr "with X11-Athena GUI."
++
++msgid "with Photon GUI."
++msgstr "with Photon GUI."
++
++msgid "with GUI."
++msgstr "with GUI."
++
++msgid "with Carbon GUI."
++msgstr "with Carbon GUI."
++
++msgid "with Cocoa GUI."
++msgstr "with Cocoa GUI."
++
++msgid "with (classic) GUI."
++msgstr "with (¥¯¥é¥·¥Ã¥¯) GUI."
++
++msgid "  Features included (+) or not (-):\n"
++msgstr "  µ¡Çœ€Î°ìÍ÷ Í­žú(+)/Ìµžú(-)\n"
++
++msgid "   system vimrc file: \""
++msgstr "      ¥·¥¹¥Æ¥à vimrc: \""
++
++msgid "     user vimrc file: \""
++msgstr "        ¥æ¡Œ¥¶ vimrc: \""
++
++msgid " 2nd user vimrc file: \""
++msgstr "     Âè2¥æ¡Œ¥¶ vimrc: \""
++
++msgid " 3rd user vimrc file: \""
++msgstr "     Âè3¥æ¡Œ¥¶ vimrc: \""
++
++msgid "      user exrc file: \""
++msgstr "         ¥æ¡Œ¥¶ exrc: \""
++
++msgid "  2nd user exrc file: \""
++msgstr "      Âè2¥æ¡Œ¥¶ exrc: \""
++
++msgid "  system gvimrc file: \""
++msgstr "     ¥·¥¹¥Æ¥à gvimrc: \""
++
++msgid "    user gvimrc file: \""
++msgstr "       ¥æ¡Œ¥¶ gvimrc: \""
++
++msgid "2nd user gvimrc file: \""
++msgstr "    Âè2¥æ¡Œ¥¶ gvimrc: \""
++
++msgid "3rd user gvimrc file: \""
++msgstr "    Âè3¥æ¡Œ¥¶ gvimrc: \""
++
++msgid "    system menu file: \""
++msgstr "    ¥·¥¹¥Æ¥à¥á¥Ë¥å¡Œ: \""
++
++msgid "  fall-back for $VIM: \""
++msgstr "       ŸÊÎ¬»þ€Î $VIM: \""
++
++msgid " f-b for $VIMRUNTIME: \""
++msgstr "ŸÊÎ¬»þ€Î $VIMRUNTIME: \""
++
++msgid "Compilation: "
++msgstr "¥³¥ó¥Ñ¥€¥ë: "
++
++msgid "Compiler: "
++msgstr "¥³¥ó¥Ñ¥€¥é: "
++
++msgid "Linking: "
++msgstr "¥ê¥ó¥¯: "
++
++msgid "  DEBUG BUILD"
++msgstr "¥Ç¥Ð¥Ã¥°¥Ó¥ë¥É"
++
++msgid "VIM - Vi IMproved"
++msgstr "VIM - Vi IMproved"
++
++msgid "version "
++msgstr "version "
++
++msgid "by Bram Moolenaar et al."
++msgstr "by Bram Moolenaar ÂŸ."
++
++msgid "Vim is open source and freely distributable"
++msgstr "Vim €Ï¥ª¡Œ¥×¥ó¥œ¡Œ¥¹€Ç€¢€êŒ«Í³€ËÇÛÉÛ²ÄÇœ€Ç€¹"
++
++msgid "Help poor children in Uganda!"
++msgstr "¥Š¥¬¥ó¥À€Î·Ã€Þ€ì€Ê€€»Ò¶¡€¿€Á€Ë±çœõ€ò!"
++
++msgid "type  :help iccf<Enter>       for information "
++msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help iccf<Enter>      "
++
++msgid "type  :q<Enter>               to exit         "
++msgstr "œªÎ»€¹€ë€Ë€Ï           :q<Enter>              "
++
++msgid "type  :help<Enter>  or  <F1>  for on-line help"
++msgstr "¥ª¥ó¥é¥€¥ó¥Ø¥ë¥×€Ï     :help<Enter> €« <F1>   "
++
++msgid "type  :help version7<Enter>   for version info"
++msgstr "¥Ð¡Œ¥ž¥ç¥óŸðÊó€Ï       :help version7<Enter>  "
++
++msgid "Running in Vi compatible mode"
++msgstr "VižßŽ¹¥â¡Œ¥É€ÇÆ°ºîÃæ"
++
++msgid "type  :set nocp<Enter>        for Vim defaults"
++msgstr "Vim¿äŸ©ÃÍ€Ë€¹€ë€Ë€Ï    :set nocp<Enter>       "
++
++msgid "type  :help cp-default<Enter> for info on this"
++msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help cp-default<Enter>"
++
++msgid "menu  Help->Orphans           for information    "
++msgstr "ŸÜºÙ€Ï¥á¥Ë¥å¡Œ€Î ¥Ø¥ë¥×¢ªžÉ»ù €ò»²ŸÈ€·€Æ²Œ€µ€€   "
++
++msgid "Running modeless, typed text is inserted"
++msgstr "¥â¡Œ¥ÉÌµ€ÇŒÂ¹ÔÃæ, ¥¿¥€¥×€·€¿Êž»ú€¬ÁÞÆþ€µ€ì€Þ€¹"
++
++msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
++msgstr "¥á¥Ë¥å¡Œ€Î ÊÔœž¢ªÁŽÂÎÀßÄê¢ªÁÞÆþ(œé¿ŽŒÔ)¥â¡Œ¥ÉÀÚÂØ "
++
++msgid "                              for two modes      "
++msgstr "                              €Ç¥â¡Œ¥ÉÍ­€Ë       "
++
++msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
++msgstr "¥á¥Ë¥å¡Œ€Î ÊÔœž¢ªÁŽÂÎÀßÄê¢ªVižßŽ¹¥â¡Œ¥ÉÀÚÂØ      "
++
++msgid "                              for Vim defaults   "
++msgstr "                              €ÇVim€È€·€ÆÆ°ºî    "
++
++msgid "Sponsor Vim development!"
++msgstr "Vim€Î³«È¯€ò±þ±ç€·€Æ€¯€À€µ€€!"
++
++msgid "Become a registered Vim user!"
++msgstr "Vim€ÎÅÐÏ¿¥æ¡Œ¥¶€Ë€Ê€Ã€Æ€¯€À€µ€€!"
++
++msgid "type  :help sponsor<Enter>    for information "
++msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help sponsor<Enter>   "
++
++msgid "type  :help register<Enter>   for information "
++msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help register<Enter>  "
++
++msgid "menu  Help->Sponsor/Register  for information    "
++msgstr "ŸÜºÙ€Ï¥á¥Ë¥å¡Œ€Î ¥Ø¥ë¥×¢ª¥¹¥Ý¥ó¥µ¡Œ/ÅÐÏ¿ €ò»²ŸÈ€·€Æ²Œ€µ€€   "
++
++msgid "WARNING: Windows 95/98/ME detected"
++msgstr "   ·Ù¹ð: Windows 95/98/Me €òž¡œÐ  "
++
++msgid "type  :help windows95<Enter>  for info on this"
++msgstr " ŸÜºÙ€ÊŸðÊó€Ï          :help windows95<Enter> "
++
++msgid "Already only one window"
++msgstr "Žû€Ë¥Š¥£¥ó¥É¥Š€Ï1€Ä€·€«€¢€ê€Þ€»€ó"
++
++msgid "E441: There is no preview window"
++msgstr "E441: ¥×¥ì¥Ó¥å¡Œ¥Š¥£¥ó¥É¥Š€¬€¢€ê€Þ€»€ó"
++
++msgid "E442: Can't split topleft and botright at the same time"
++msgstr "E442: ºžŸå€È±Š²Œ€òÆ±»þ€ËÊ¬³ä€¹€ë€³€È€Ï€Ç€­€Þ€»€ó"
++
++msgid "E443: Cannot rotate when another window is split"
++msgstr "E443: ÂŸ€Î¥Š¥£¥ó¥É¥Š€¬Ê¬³ä€µ€ì€Æ€€€ë»þ€Ë€Ïœç²ó€Ç€­€Þ€»€ó"
++
++msgid "E444: Cannot close last window"
++msgstr "E444: ºÇžå€Î¥Š¥£¥ó¥É¥Š€òÊÄ€ž€ë€³€È€Ï€Ç€­€Þ€»€ó"
++
++msgid "E813: Cannot close autocmd window"
++msgstr "E813: autocmd¥Š¥£¥ó¥É¥Š€ÏÊÄ€ž€é€ì€Þ€»€ó"
++
++msgid "E814: Cannot close window, only autocmd window would remain"
++msgstr "E814: autocmd¥Š¥£¥ó¥É¥Š€·€«»Ä€é€Ê€€€¿€á¡¢¥Š¥£¥ó¥É¥Š€ÏÊÄ€ž€é€ì€Þ€»€ó"
++
++msgid "E445: Other window contains changes"
++msgstr "E445: ÂŸ€Î¥Š¥£¥ó¥É¥Š€Ë€ÏÊÑ¹¹€¬€¢€ê€Þ€¹"
++
++msgid "E446: No file name under cursor"
++msgstr "E446: ¥«¡Œ¥œ¥ë€Î²Œ€Ë¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E447: Can't find file \"%s\" in path"
++msgstr "E447: path€Ë€Ï \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++
++msgid "Edit with &multiple Vims"
++msgstr "Ê£¿ô€ÎVim€ÇÊÔœž€¹€ë (&M)"
++
++msgid "Edit with single &Vim"
++msgstr "1€Ä€ÎVim€ÇÊÔœž€¹€ë (&V)"
++
++msgid "Diff with Vim"
++msgstr "Vim€Çº¹Ê¬€òÉœŒš€¹€ë"
++
++msgid "Edit with &Vim"
++msgstr "Vim€ÇÊÔœž€¹€ë (&V)"
++
++#. Now concatenate
++msgid "Edit with existing Vim - "
++msgstr "µ¯Æ°ºÑ€ÎVim€ÇÊÔœž€¹€ë - "
++
++msgid "Edits the selected file(s) with Vim"
++msgstr "ÁªÂò€·€¿¥Õ¥¡¥€¥ë€òVim€ÇÊÔœž€¹€ë"
++
++msgid "Error creating process: Check if gvim is in your path!"
++msgstr "¥×¥í¥»¥¹€ÎºîÀ®€ËŒºÇÔ: gvim€¬ŽÄ¶­ÊÑ¿ôPATHŸå€Ë€¢€ë€«³ÎÇ§€·€Æ€¯€À€µ€€!"
++
++msgid "gvimext.dll error"
++msgstr "gvimext.dll ¥š¥é¡Œ"
++
++msgid "Path length too long!"
++msgstr "¥Ñ¥¹€¬Ä¹€¹€®€Þ€¹!"
++
++msgid "--No lines in buffer--"
++msgstr "--¥Ð¥Ã¥Õ¥¡€Ë¹Ô€¬€¢€ê€Þ€»€ó--"
++
++#.
++#. * The error messages that can be shared are included here.
++#. * Excluded are errors that are only used once and debugging messages.
++#.
++msgid "E470: Command aborted"
++msgstr "E470: ¥³¥Þ¥ó¥É€¬ÃæÃÇ€µ€ì€Þ€·€¿"
++
++msgid "E471: Argument required"
++msgstr "E471: °ú¿ô€¬É¬Í×€Ç€¹"
++
++msgid "E10: \\ should be followed by /, ? or &"
++msgstr "E10: \\ €Îžå€Ï / €« ? €« & €Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
++msgstr "E11: ¥³¥Þ¥ó¥É¥é¥€¥ó€Ç€ÏÌµžú€Ç€¹; <CR>€ÇŒÂ¹Ô, CTRL-C€Ç€ä€á€ë"
++
++msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
++msgstr ""
++"E12: žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê€ä¥¿¥°ž¡º÷€Ç€Ïexrc/vimrc€Î¥³¥Þ¥ó¥É€Ïµö²Ä€µ€ì€Þ€»€ó"
++
++msgid "E171: Missing :endif"
++msgstr "E171: :endif €¬€¢€ê€Þ€»€ó"
++
++msgid "E600: Missing :endtry"
++msgstr "E600: :endtry €¬€¢€ê€Þ€»€ó"
++
++msgid "E170: Missing :endwhile"
++msgstr "E170: :endwhile €¬€¢€ê€Þ€»€ó"
++
++msgid "E170: Missing :endfor"
++msgstr "E170: :endfor €¬€¢€ê€Þ€»€ó"
++
++msgid "E588: :endwhile without :while"
++msgstr "E588: :while €Î€Ê€€ :endwhile €¬€¢€ê€Þ€¹"
++
++msgid "E588: :endfor without :for"
++msgstr "E588: :endfor €Î€Ê€€ :for €¬€¢€ê€Þ€¹"
++
++msgid "E13: File exists (add ! to override)"
++msgstr "E13: ¥Õ¥¡¥€¥ë€¬Âžºß€·€Þ€¹ (! €òÄÉ²Ã€ÇŸåœñ)"
++
++msgid "E472: Command failed"
++msgstr "E472: ¥³¥Þ¥ó¥É€¬ŒºÇÔ€·€Þ€·€¿"
++
++#, c-format
++msgid "E234: Unknown fontset: %s"
++msgstr "E234: Ì€ÃÎ€Î¥Õ¥©¥ó¥È¥»¥Ã¥È: %s"
++
++#, c-format
++msgid "E235: Unknown font: %s"
++msgstr "E235: Ì€ÃÎ€Î¥Õ¥©¥ó¥È: %s"
++
++#, c-format
++msgid "E236: Font \"%s\" is not fixed-width"
++msgstr "E236: ¥Õ¥©¥ó¥È \"%s\" €ÏžÇÄêÉý€Ç€Ï€¢€ê€Þ€»€ó"
++
++msgid "E473: Internal error"
++msgstr "E473: ÆâÉô¥š¥é¡Œ€Ç€¹"
++
++msgid "Interrupted"
++msgstr "³ä¹þ€Þ€ì€Þ€·€¿"
++
++msgid "E14: Invalid address"
++msgstr "E14: Ìµžú€Ê¥¢¥É¥ì¥¹€Ç€¹"
++
++msgid "E474: Invalid argument"
++msgstr "E474: Ìµžú€Ê°ú¿ô€Ç€¹"
++
++#, c-format
++msgid "E475: Invalid argument: %s"
++msgstr "E475: Ìµžú€Ê°ú¿ô€Ç€¹: %s"
++
++#, c-format
++msgid "E15: Invalid expression: %s"
++msgstr "E15: Ìµžú€ÊŒ°€Ç€¹: %s"
++
++msgid "E16: Invalid range"
++msgstr "E16: Ìµžú€ÊÈÏ°Ï€Ç€¹"
++
++msgid "E476: Invalid command"
++msgstr "E476: Ìµžú€Ê¥³¥Þ¥ó¥É€Ç€¹"
++
++#, c-format
++msgid "E17: \"%s\" is a directory"
++msgstr "E17: \"%s\" €Ï¥Ç¥£¥ì¥¯¥È¥ê€Ç€¹"
++
++#, c-format
++msgid "E364: Library call failed for \"%s()\""
++msgstr "E364: \"%s\"() €Î¥é¥€¥Ö¥é¥êžÆœÐ€ËŒºÇÔ€·€Þ€·€¿"
++
++#, c-format
++msgid "E448: Could not load library function %s"
++msgstr "E448: ¥é¥€¥Ö¥é¥ê€ÎŽØ¿ô %s €ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
++
++msgid "E19: Mark has invalid line number"
++msgstr "E19: ¥Þ¡Œ¥¯€ËÌµžú€Ê¹ÔÈÖ¹æ€¬»ØÄê€µ€ì€Æ€€€Þ€·€¿"
++
++msgid "E20: Mark not set"
++msgstr "E20: ¥Þ¡Œ¥¯€ÏÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E21: Cannot make changes, 'modifiable' is off"
++msgstr "E21: 'modifiable' €¬¥ª¥Õ€Ê€Î€Ç, ÊÑ¹¹€Ç€­€Þ€»€ó"
++
++msgid "E22: Scripts nested too deep"
++msgstr "E22: ¥¹¥¯¥ê¥×¥È€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++
++msgid "E23: No alternate file"
++msgstr "E23: Éû¥Õ¥¡¥€¥ë€Ï€¢€ê€Þ€»€ó"
++
++msgid "E24: No such abbreviation"
++msgstr "E24: €œ€Î€è€Š€ÊÃ»œÌÆþÎÏ€Ï€¢€ê€Þ€»€ó"
++
++msgid "E477: No ! allowed"
++msgstr "E477: ! €Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E25: GUI cannot be used: Not enabled at compile time"
++msgstr "E25: GUI€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹"
++
++msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
++msgstr "E26: ¥Ø¥Ö¥é¥€žì€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹\n"
++
++msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
++msgstr "E27: ¥Ú¥ë¥·¥¢žì€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹\n"
++
++msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
++msgstr "E800: ¥¢¥é¥Ó¥¢žì€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹\n"
++
++#, c-format
++msgid "E28: No such highlight group name: %s"
++msgstr "E28: €œ€Î€è€Š€ÊÌŸ€Î¥Ï¥€¥é¥€¥È¥°¥ë¡Œ¥×€Ï€¢€ê€Þ€»€ó: %s"
++
++msgid "E29: No inserted text yet"
++msgstr "E29: €Þ€À¥Æ¥­¥¹¥È€¬ÁÞÆþ€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E30: No previous command line"
++msgstr "E30: °ÊÁ°€Ë¥³¥Þ¥ó¥É¹Ô€¬€¢€ê€Þ€»€ó"
++
++msgid "E31: No such mapping"
++msgstr "E31: €œ€Î€è€Š€Ê¥Þ¥Ã¥Ô¥ó¥°€Ï€¢€ê€Þ€»€ó"
++
++msgid "E479: No match"
++msgstr "E479: ³ºÅö€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E480: No match: %s"
++msgstr "E480: ³ºÅö€Ï€¢€ê€Þ€»€ó: %s"
++
++msgid "E32: No file name"
++msgstr "E32: ¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++
++msgid "E33: No previous substitute regular expression"
++msgstr "E33: Àµµ¬ÉœžœÃÖŽ¹€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E34: No previous command"
++msgstr "E34: ¥³¥Þ¥ó¥É€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E35: No previous regular expression"
++msgstr "E35: Àµµ¬Éœžœ€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E481: No range allowed"
++msgstr "E481: ÈÏ°Ï»ØÄê€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E36: Not enough room"
++msgstr "E36: ¥Š¥£¥ó¥É¥Š€ËœœÊ¬€Ê¹â€µ€â€·€¯€ÏÉý€¬€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E247: no registered server named \"%s\""
++msgstr "E247: %s €È€€€ŠÌŸÁ°€ÎÅÐÏ¿€µ€ì€¿¥µ¡Œ¥Ð€Ï€¢€ê€Þ€»€ó"
++
++#, c-format
++msgid "E482: Can't create file %s"
++msgstr "E482: ¥Õ¥¡¥€¥ë %s €òºîÀ®€Ç€­€Þ€»€ó"
++
++msgid "E483: Can't get temp file name"
++msgstr "E483: °ì»þ¥Õ¥¡¥€¥ë€ÎÌŸÁ°€òŒèÆÀ€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E484: Can't open file %s"
++msgstr "E484: ¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++
++#, c-format
++msgid "E485: Can't read file %s"
++msgstr "E485: ¥Õ¥¡¥€¥ë %s €òÆÉ¹þ€á€Þ€»€ó"
++
++msgid "E37: No write since last change (add ! to override)"
++msgstr "E37: ºÇžå€ÎÊÑ¹¹€¬ÊÝÂž€µ€ì€Æ€€€Þ€»€ó (! €òÄÉ²Ã€ÇÊÑ¹¹€òÇËŽþ)"
++
++msgid "E38: Null argument"
++msgstr "E38: °ú¿ô€¬¶õ€Ç€¹"
++
++msgid "E39: Number expected"
++msgstr "E39: ¿ôÃÍ€¬Í×µá€µ€ì€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E40: Can't open errorfile %s"
++msgstr "E40: ¥š¥é¡Œ¥Õ¥¡¥€¥ë %s €ò³«€±€Þ€»€ó"
++
++msgid "E233: cannot open display"
++msgstr "E233: ¥Ç¥£¥¹¥×¥ì¥€€ò³«€±€Þ€»€ó"
++
++msgid "E41: Out of memory!"
++msgstr "E41: ¥á¥â¥ê€¬¿Ô€­²Ì€Æ€Þ€·€¿!"
++
++msgid "Pattern not found"
++msgstr "¥Ñ¥¿¡Œ¥ó€Ïž«€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++
++#, c-format
++msgid "E486: Pattern not found: %s"
++msgstr "E486: ¥Ñ¥¿¡Œ¥ó€Ïž«€Ä€«€ê€Þ€»€ó€Ç€·€¿: %s"
++
++msgid "E487: Argument must be positive"
++msgstr "E487: °ú¿ô€ÏÀµ€ÎÃÍ€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "E459: Cannot go back to previous directory"
++msgstr "E459: Á°€Î¥Ç¥£¥ì¥¯¥È¥ê€ËÌá€ì€Þ€»€ó"
++
++msgid "E42: No Errors"
++msgstr "E42: ¥š¥é¡Œ€Ï€¢€ê€Þ€»€ó"
++
++msgid "E776: No location list"
++msgstr "E776: Ÿìœê¥ê¥¹¥È€Ï€¢€ê€Þ€»€ó"
++
++msgid "E43: Damaged match string"
++msgstr "E43: ³ºÅöÊž»úÎó€¬ÇËÂ»€·€Æ€€€Þ€¹"
++
++msgid "E44: Corrupted regexp program"
++msgstr "E44: ÉÔÀµ€ÊÀµµ¬Éœžœ¥×¥í¥°¥é¥à€Ç€¹"
++
++msgid "E45: 'readonly' option is set (add ! to override)"
++msgstr "E45: 'readonly' ¥ª¥×¥·¥ç¥ó€¬ÀßÄê€µ€ì€Æ€€€Þ€¹ (! €òÄÉ²Ã€ÇŸåœñ€­)"
++
++#, c-format
++msgid "E46: Cannot change read-only variable \"%s\""
++msgstr "E46: ÆÉŒèÀìÍÑÊÑ¿ô \"%s\" €Ë€ÏÃÍ€òÀßÄê€Ç€­€Þ€»€ó"
++
++#, c-format
++msgid "E794: Cannot set variable in the sandbox: \"%s\""
++msgstr "E794: ¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€ÏÊÑ¿ô \"%s\" €ËÃÍ€òÀßÄê€Ç€­€Þ€»€ó"
++
++msgid "E47: Error while reading errorfile"
++msgstr "E47: ¥š¥é¡Œ¥Õ¥¡¥€¥ë€ÎÆÉ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿"
++
++msgid "E48: Not allowed in sandbox"
++msgstr "E48: ¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€Ïµö€µ€ì€Þ€»€ó"
++
++msgid "E523: Not allowed here"
++msgstr "E523: €³€³€Ç€Ïµö²Ä€µ€ì€Þ€»€ó"
++
++msgid "E359: Screen mode setting not supported"
++msgstr "E359: ¥¹¥¯¥ê¡Œ¥ó¥â¡Œ¥É€ÎÀßÄê€Ë€ÏÂÐ±þ€·€Æ€€€Þ€»€ó"
++
++msgid "E49: Invalid scroll size"
++msgstr "E49: Ìµžú€Ê¥¹¥¯¥í¡Œ¥ëÎÌ€Ç€¹"
++
++msgid "E91: 'shell' option is empty"
++msgstr "E91: 'shell' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++
++msgid "E255: Couldn't read in sign data!"
++msgstr "E255: sign €Î¥Ç¡Œ¥¿€òÆÉ¹þ€á€Þ€»€ó€Ç€·€¿"
++
++msgid "E72: Close error on swap file"
++msgstr "E72: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Î¥¯¥í¡Œ¥º»þ¥š¥é¡Œ€Ç€¹"
++
++msgid "E73: tag stack empty"
++msgstr "E73: ¥¿¥°¥¹¥¿¥Ã¥¯€¬¶õ€Ç€¹"
++
++msgid "E74: Command too complex"
++msgstr "E74: ¥³¥Þ¥ó¥É€¬Ê£»š²á€®€Þ€¹"
++
++msgid "E75: Name too long"
++msgstr "E75: ÌŸÁ°€¬Ä¹²á€®€Þ€¹"
++
++msgid "E76: Too many ["
++msgstr "E76: [ €¬Â¿²á€®€Þ€¹"
++
++msgid "E77: Too many file names"
++msgstr "E77: ¥Õ¥¡¥€¥ëÌŸ€¬Â¿²á€®€Þ€¹"
++
++msgid "E488: Trailing characters"
++msgstr "E488: ÍŸÊ¬€ÊÊž»ú€¬žå€í€Ë€¢€ê€Þ€¹"
++
++msgid "E78: Unknown mark"
++msgstr "E78: Ì€ÃÎ€Î¥Þ¡Œ¥¯"
++
++msgid "E79: Cannot expand wildcards"
++msgstr "E79: ¥ï¥€¥ë¥É¥«¡Œ¥É€òÅž³«€Ç€­€Þ€»€ó"
++
++msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
++msgstr "E591: 'winheight' €Ï 'winminheight' €è€êŸ®€µ€¯€Ç€­€Þ€»€ó"
++
++msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
++msgstr "E592: 'winwidth' €Ï 'winminwidth' €è€êŸ®€µ€¯€Ç€­€Þ€»€ó"
++
++msgid "E80: Error while writing"
++msgstr "E80: œñ¹þ€ßÃæ€Î¥š¥é¡Œ"
++
++msgid "Zero count"
++msgstr "¥Œ¥í¥«¥Š¥ó¥È"
++
++msgid "E81: Using <SID> not in a script context"
++msgstr "E81: ¥¹¥¯¥ê¥×¥È°Ê³°€Ç<SID>€¬»È€ï€ì€Þ€·€¿"
++
++msgid "E449: Invalid expression received"
++msgstr "E449: Ìµžú€ÊŒ°€òŒõ€±Œè€ê€Þ€·€¿"
++
++msgid "E463: Region is guarded, cannot modify"
++msgstr "E463: ÎÎ°è€¬ÊÝžî€µ€ì€Æ€€€ë€Î€Ç, ÊÑ¹¹€Ç€­€Þ€»€ó"
++
++msgid "E744: NetBeans does not allow changes in read-only files"
++msgstr "E744: NetBeans €ÏÆÉ¹þÀìÍÑ¥Õ¥¡¥€¥ë€òÊÑ¹¹€¹€ë€³€È€òµö€·€Þ€»€ó"
++
++#, c-format
++msgid "E685: Internal error: %s"
++msgstr "E685: ÆâÉô¥š¥é¡Œ€Ç€¹: %s"
++
++msgid "E363: pattern uses more memory than 'maxmempattern'"
++msgstr "E363: ¥Ñ¥¿¡Œ¥ó€¬ 'maxmempattern' °ÊŸå€Î¥á¥â¥ê€ò»ÈÍÑ€·€Þ€¹"
++
++msgid "E749: empty buffer"
++msgstr "E749: ¥Ð¥Ã¥Õ¥¡€¬¶õ€Ç€¹"
++
++msgid "E682: Invalid search pattern or delimiter"
++msgstr "E682: ž¡º÷¥Ñ¥¿¡Œ¥ó€«¶èÀÚ€êµ­¹æ€¬ÉÔÀµ€Ç€¹"
++
++msgid "E139: File is loaded in another buffer"
++msgstr "E139: Æ±€žÌŸÁ°€Î¥Õ¥¡¥€¥ë€¬ÂŸ€Î¥Ð¥Ã¥Õ¥¡€ÇÆÉ¹þ€Þ€ì€Æ€€€Þ€¹"
++
++#, c-format
++msgid "E764: Option '%s' is not set"
++msgstr "E764: ¥ª¥×¥·¥ç¥ó '%s' €ÏÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "E850: Invalid register name"
++msgstr "E850: Ìµžú€Ê¥ì¥ž¥¹¥¿ÌŸ€Ç€¹"
++
++msgid "search hit TOP, continuing at BOTTOM"
++msgstr "Ÿå€Þ€Çž¡º÷€·€¿€Î€Ç²Œ€ËÌá€ê€Þ€¹"
++
++msgid "search hit BOTTOM, continuing at TOP"
++msgstr "²Œ€Þ€Çž¡º÷€·€¿€Î€ÇŸå€ËÌá€ê€Þ€¹"
++
++#, c-format
++msgid "Need encryption key for \"%s\""
++msgstr "°Å¹æ¥­¡Œ€¬É¬Í×€Ç€¹: \"%s\""
++
++msgid "can't delete OutputObject attributes"
++msgstr "OutputObjectÂ°À­€òŸÃ€»€Þ€»€ó"
++
++msgid "softspace must be an integer"
++msgstr "softspace €Ï integer €Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "invalid attribute"
++msgstr "Ìµžú€ÊÂ°À­€Ç€¹"
++
++msgid "writelines() requires list of strings"
++msgstr "writelines() €Ë€ÏÊž»úÎó€Î¥ê¥¹¥È€¬É¬Í×€Ç€¹"
++
++msgid "E264: Python: Error initialising I/O objects"
++msgstr "E264: Python: I/O¥ª¥Ö¥ž¥§¥¯¥È€ÎœéŽü²œ¥š¥é¡Œ"
++
++msgid "empty keys are not allowed"
++msgstr "¶õ€Î¥­¡Œ€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++
++msgid "Cannot delete DictionaryObject attributes"
++msgstr "DictionaryObjectÂ°À­€òŸÃ€»€Þ€»€ó"
++
++msgid "Cannot modify fixed dictionary"
++msgstr "žÇÄê€µ€ì€¿Œ­œñ€ÏÊÑ¹¹€Ç€­€Þ€»€ó"
++
++msgid "Cannot set this attribute"
++msgstr "€³€ÎÂ°À­€ÏÀßÄê€Ç€­€Þ€»€ó"
++
++msgid "dict is locked"
++msgstr "Œ­œñ€Ï¥í¥Ã¥¯€µ€ì€Æ€€€Þ€¹"
++
++msgid "failed to add key to dictionary"
++msgstr "Œ­œñ€Ø€Î¥­¡Œ€ÎÄÉ²Ã€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "list index out of range"
++msgstr "¥ê¥¹¥ÈÈÏ°Ï³°€Î¥€¥ó¥Ç¥Ã¥¯¥¹€Ç€¹"
++
++msgid "internal error: failed to get vim list item"
++msgstr "ÆâÉô¥š¥é¡Œ: vim€Î¥ê¥¹¥ÈÍ×ÁÇ€ÎŒèÆÀ€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "list is locked"
++msgstr "¥ê¥¹¥È€Ï¥í¥Ã¥¯€µ€ì€Æ€€€Þ€¹"
++
++msgid "Failed to add item to list"
++msgstr "¥ê¥¹¥È€Ø€ÎÍ×ÁÇÄÉ²Ã€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "internal error: no vim list item"
++msgstr "ÆâÉô¥š¥é¡Œ: vim€Î¥ê¥¹¥ÈÍ×ÁÇ€¬€¢€ê€Þ€»€ó"
++
++msgid "can only assign lists to slice"
++msgstr "¥¹¥é¥€¥¹€Ë€Ï¥ê¥¹¥È€À€±€¬ÂåÆþ€Ç€­€Þ€¹"
++
++msgid "internal error: failed to add item to list"
++msgstr "ÆâÉô¥š¥é¡Œ: ¥ê¥¹¥È€Ø€ÎÍ×ÁÇÄÉ²Ã€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "can only concatenate with lists"
++msgstr "¥ê¥¹¥È€È€Î€ßÀÜÂ³€Ç€­€Þ€¹"
++
++msgid "cannot delete vim.dictionary attributes"
++msgstr "vim.dictionaryÂ°À­€ÏŸÃ€»€Þ€»€ó"
++
++msgid "cannot modify fixed list"
++msgstr "žÇÄê€µ€ì€¿¥ê¥¹¥È€ÏÊÑ¹¹€Ç€­€Þ€»€ó"
++
++msgid "cannot set this attribute"
++msgstr "€³€ÎÂ°À­€ÏÀßÄê€Ç€­€Þ€»€ó"
++
++msgid "'self' argument must be a dictionary"
++msgstr "'self' °ú¿ô€ÏŒ­œñ·¿€ÎÃÍ€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "failed to run function"
++msgstr "ŽØ¿ô€ÎŒÂ¹Ô€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "unable to get option value"
++msgstr "¥ª¥×¥·¥ç¥ó€ÎÃÍ€ÏŒèÆÀ€Ç€­€Þ€»€ó"
++
++msgid "unable to unset global option"
++msgstr "¥°¥í¡Œ¥Ð¥ë¥ª¥×¥·¥ç¥ó€ÎÀßÄê²òœü€Ï€Ç€­€Þ€»€ó"
++
++msgid "unable to unset option without global value"
++msgstr "¥°¥í¡Œ¥Ð¥ëÊÑ¿ô€ò»È€ï€º€Ë¥ª¥×¥·¥ç¥ó€ÎÀßÄê²òœü€Ï€Ç€­€Þ€»€ó"
++
++msgid "object must be integer"
++msgstr "¥ª¥Ö¥ž¥§¥¯¥È€ÏÀ°¿ô€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "object must be string"
++msgstr "¥ª¥Ö¥ž¥§¥¯¥È€ÏÊž»úÎó€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "attempt to refer to deleted tab page"
++msgstr "ºïœü€µ€ì€¿¥¿¥Ö€ò»²ŸÈ€·€è€Š€È€·€Þ€·€¿"
++
++#, c-format
++msgid "<tabpage object (deleted) at %p>"
++msgstr "<¥¿¥Ö¥Ú¡Œ¥ž¥ª¥Ö¥ž¥§¥¯¥È (ŸÃµîºÑ€ß) %p>"
++
++#, c-format
++msgid "<tabpage object (unknown) at %p>"
++msgstr "<¥¿¥Ö¥Ú¡Œ¥ž¥ª¥Ö¥ž¥§¥¯¥È (ÉÔÌÀ) %p>"
++
++#, c-format
++msgid "<tabpage %d>"
++msgstr "<¥¿¥Ö¥Ú¡Œ¥ž %d>"
++
++msgid "no such tab page"
++msgstr "€œ€Î€è€Š€Ê¥¿¥Ö¥Ú¡Œ¥ž€Ï€¢€ê€Þ€»€ó"
++
++msgid "attempt to refer to deleted window"
++msgstr "ºïœü€µ€ì€¿¥Š¥£¥ó¥É¥Š€ò»²ŸÈ€·€è€Š€È€·€Þ€·€¿"
++
++msgid "readonly attribute"
++msgstr "ÆÉ¹þÀìÍÑÂ°À­"
++
++msgid "cursor position outside buffer"
++msgstr "¥«¡Œ¥œ¥ë°ÌÃÖ€¬¥Ð¥Ã¥Õ¥¡€Î³°ÂŠ€Ç€¹"
++
++#, c-format
++msgid "<window object (deleted) at %p>"
++msgstr "<¥Š¥£¥ó¥É¥Š¥ª¥Ö¥ž¥§¥¯¥È (ŸÃµîºÑ€ß) %p>"
++
++#, c-format
++msgid "<window object (unknown) at %p>"
++msgstr "<¥Š¥£¥ó¥É¥Š¥ª¥Ö¥ž¥§¥¯¥È (ÉÔÌÀ) %p>"
++
++#, c-format
++msgid "<window %d>"
++msgstr "<¥Š¥£¥ó¥É¥Š %d>"
++
++msgid "no such window"
++msgstr "€œ€Î€è€Š€Ê¥Š¥£¥ó¥É¥Š€Ï€¢€ê€Þ€»€ó"
++
++msgid "attempt to refer to deleted buffer"
++msgstr "ºïœü€µ€ì€¿¥Ð¥Ã¥Õ¥¡€ò»²ŸÈ€·€è€Š€È€·€Þ€·€¿"
++
++#, c-format
++msgid "<buffer object (deleted) at %p>"
++msgstr "<¥Ð¥Ã¥Õ¥¡¥ª¥Ö¥ž¥§¥¯¥È (ŸÃµîºÑ€ß) %p>"
++
++msgid "key must be integer"
++msgstr "¥­¡Œ€ÏÀ°¿ôÃÍ€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++
++msgid "expected vim.buffer object"
++msgstr "vim.buffer¥ª¥Ö¥ž¥§¥¯¥È€òŽüÂÔ€·€Æ€€€Þ€¹"
++
++msgid "failed to switch to given buffer"
++msgstr "»ØÄê€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ø€ÎÀÚ€êÂØ€š€ËŒºÇÔ€·€Þ€·€¿"
++
++msgid "expected vim.window object"
++msgstr "vim.window¥ª¥Ö¥ž¥§¥¯¥È€òŽüÂÔ€·€Æ€€€Þ€¹"
++
++msgid "failed to find window in the current tab page"
++msgstr "žœºß€Î¥¿¥Ö€Ë€Ï»ØÄê€µ€ì€¿¥Š¥£¥ó¥É¥Š€¬€¢€ê€Þ€»€ó€Ç€·€¿"
++
++msgid "did not switch to the specified window"
++msgstr "»ØÄê€µ€ì€¿¥Š¥£¥ó¥É¥Š€ËÀÚ€êÂØ€š€Þ€»€ó€Ç€·€¿"
++
++msgid "expected vim.tabpage object"
++msgstr "vim.tabpage¥ª¥Ö¥ž¥§¥¯¥È€òŽüÂÔ€·€Æ€€€Þ€¹"
++
++msgid "did not switch to the specified tab page"
++msgstr "»ØÄê€µ€ì€¿¥¿¥Ö¥Ú¡Œ¥ž€ËÀÚ€êÂØ€š€Þ€»€ó€Ç€·€¿"
++
++msgid "unable to convert to vim structure"
++msgstr "vim€Î¹œÂ€ÂÎ€ËÊÑŽ¹€Ç€­€Þ€»€ó"
++
++msgid "NULL reference passed"
++msgstr "NULL»²ŸÈ€¬ÅÏ€µ€ì€Þ€·€¿"
++
++msgid "internal error: invalid value type"
++msgstr "ÆâÉô¥š¥é¡Œ: Ìµžú€ÊÃÍ·¿€Ç€¹"
+diff -Naur vim73.orig/src/po/ja.po vim73/src/po/ja.po
+--- vim73.orig/src/po/ja.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/ja.po	2013-06-07 17:07:33.942245085 +0000
+@@ -3,525 +3,578 @@
+ # Do ":help uganda"  in Vim to read copying and usage conditions.
+ # Do ":help credits" in Vim to see a list of people who contributed.
+ #
+-# MURAOKA Taro <koron.kaoriya@gmail.com>, 2001-8.
+-# Last Change: 31-May-2008.
++# Last Change: 2013 May 19
++#
++# Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
++# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
++#
++# Original translations.
+ #
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: Vim 7.1\n"
++"Project-Id-Version: Vim 7.4\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2008-05-31 22:00+0900\n"
+-"PO-Revision-Date: 2008-05-31 22:30+0900\n"
++"POT-Creation-Date: 2013-05-19 12:20+0900\n"
++"PO-Revision-Date: 2013-05-19 12:30+0900\n"
+ "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+ "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
++"Language: Japanese\n"
+ "MIME-Version: 1.0\n"
+-"Content-Type: text/plain; charset=euc-jp\n"
++"Content-Type: text/plain; charset=utf-8\n"
+ "Content-Transfer-Encoding: 8-bit\n"
+ 
++msgid "E831: bf_key_init() called with empty password"
++msgstr "E831: bf_key_init() ãç©ºãã¹ã¯ãŒãã§åŒã³åºãããŸãã"
++
++msgid "E820: sizeof(uint32_t) != 4"
++msgstr "E820: sizeof(uint32_t) != 4"
++
++msgid "E817: Blowfish big/little endian use wrong"
++msgstr "E817: Blowfishæå·ã®ããã°/ãªãã«ãšã³ãã£ã¢ã³ãééã£ãŠããŸã"
++
++msgid "E818: sha256 test failed"
++msgstr "E818: sha256ã®ãã¹ãã«å€±æããŸãã"
++
++msgid "E819: Blowfish test failed"
++msgstr "E819: Blowfishæå·ã®ãã¹ãã«å€±æããŸãã"
++
++msgid "[Location List]"
++msgstr "[å Žæãªã¹ã]"
++
++msgid "[Quickfix List]"
++msgstr "[Quickfixãªã¹ã]"
++
++msgid "E855: Autocommands caused command to abort"
++msgstr "E855: autocommandãã³ãã³ãã®åæ­¢ãåŒãèµ·ãããŸãã"
++
+ msgid "E82: Cannot allocate any buffer, exiting..."
+-msgstr "E82: ¥Ð¥Ã¥Õ¥¡€ò1€Ä€âºîÀ®€Ç€­€Ê€€€Î€Ç, œªÎ»€·€Þ€¹..."
++msgstr "E82: ãããã¡ã1ã€ãäœæã§ããªãã®ã§, çµäºããŸã..."
+ 
+ msgid "E83: Cannot allocate buffer, using other one..."
+-msgstr "E83: ¥Ð¥Ã¥Õ¥¡€òºîÀ®€Ç€­€Ê€€€Î€Ç, ÂŸ€Î€ò»ÈÍÑ€·€Þ€¹..."
++msgstr "E83: ãããã¡ãäœæã§ããªãã®ã§, ä»ã®ãäœ¿çšããŸã..."
+ 
+ msgid "E515: No buffers were unloaded"
+-msgstr "E515: ²òÊü€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++msgstr "E515: è§£æŸããããããã¡ã¯ãããŸãã"
+ 
+ msgid "E516: No buffers were deleted"
+-msgstr "E516: ºïœü€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++msgstr "E516: åé€ããããããã¡ã¯ãããŸãã"
+ 
+ msgid "E517: No buffers were wiped out"
+-msgstr "E517: ÇËŽþ€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++msgstr "E517: ç Žæ£ããããããã¡ã¯ãããŸãã"
+ 
+ msgid "1 buffer unloaded"
+-msgstr "1 žÄ€Î¥Ð¥Ã¥Õ¥¡€¬²òÊü€µ€ì€Þ€·€¿"
++msgstr "1 åã®ãããã¡ãè§£æŸãããŸãã"
+ 
+ #, c-format
+ msgid "%d buffers unloaded"
+-msgstr "%d žÄ€Î¥Ð¥Ã¥Õ¥¡€¬²òÊü€µ€ì€Þ€·€¿"
++msgstr "%d åã®ãããã¡ãè§£æŸãããŸãã"
+ 
+ msgid "1 buffer deleted"
+-msgstr "1 žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ºïœü€µ€ì€Þ€·€¿"
++msgstr "1 åã®ãããã¡ãåé€ãããŸãã"
+ 
+ #, c-format
+ msgid "%d buffers deleted"
+-msgstr "%d žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ºïœü€µ€ì€Þ€·€¿"
++msgstr "%d åã®ãããã¡ãåé€ãããŸãã"
+ 
+ msgid "1 buffer wiped out"
+-msgstr "1 žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ÇËŽþ€µ€ì€Þ€·€¿"
++msgstr "1 åã®ãããã¡ãç Žæ£ãããŸãã"
+ 
+ #, c-format
+ msgid "%d buffers wiped out"
+-msgstr "%d žÄ€Î¥Ð¥Ã¥Õ¥¡€¬ÇËŽþ€µ€ì€Þ€·€¿"
++msgstr "%d åã®ãããã¡ãç Žæ£ãããŸãã"
+ 
+ msgid "E84: No modified buffer found"
+-msgstr "E84: ÊÑ¹¹€µ€ì€¿¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++msgstr "E84: å€æŽããããããã¡ã¯ãããŸãã"
+ 
+ #. back where we started, didn't find anything.
+ msgid "E85: There is no listed buffer"
+-msgstr "E85: ¥ê¥¹¥ÈÉœŒš€µ€ì€ë¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++msgstr "E85: ãªã¹ãè¡šç€ºããããããã¡ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E86: Buffer %ld does not exist"
+-msgstr "E86: ¥Ð¥Ã¥Õ¥¡ %ld €Ï€¢€ê€Þ€»€ó"
++msgstr "E86: ãããã¡ %ld ã¯ãããŸãã"
+ 
+ msgid "E87: Cannot go beyond last buffer"
+-msgstr "E87: ºÇžå€Î¥Ð¥Ã¥Õ¥¡€ò±Û€š€Æ°ÜÆ°€Ï€Ç€­€Þ€»€ó"
++msgstr "E87: æåŸã®ãããã¡ãè¶ããŠç§»åã¯ã§ããŸãã"
+ 
+ msgid "E88: Cannot go before first buffer"
+-msgstr "E88: ºÇœé€Î¥Ð¥Ã¥Õ¥¡€è€êÁ°€Ø€Ï°ÜÆ°€Ç€­€Þ€»€ó"
++msgstr "E88: æåã®ãããã¡ããåãžã¯ç§»åã§ããŸãã"
+ 
+ #, c-format
+ msgid "E89: No write since last change for buffer %ld (add ! to override)"
+-msgstr "E89: ¥Ð¥Ã¥Õ¥¡ %ld €ÎÊÑ¹¹€ÏÊÝÂž€µ€ì€Æ€€€Þ€»€ó (! €ÇÊÑ¹¹€òÇËŽþ)"
++msgstr "E89: ãããã¡ %ld ã®å€æŽã¯ä¿å­ãããŠããŸãã (! ã§å€æŽãç Žæ£)"
+ 
+ msgid "E90: Cannot unload last buffer"
+-msgstr "E90: ºÇžå€Î¥Ð¥Ã¥Õ¥¡€Ï²òÊü€Ç€­€Þ€»€ó"
++msgstr "E90: æåŸã®ãããã¡ã¯è§£æŸã§ããŸãã"
+ 
+ msgid "W14: Warning: List of file names overflow"
+-msgstr "W14: ·Ù¹ð: ¥Õ¥¡¥€¥ëÌŸ€Î¥ê¥¹¥È€¬Ä¹²á€®€Þ€¹"
++msgstr "W14: è­Šå: ãã¡ã€ã«åã®ãªã¹ããé·éããŸã"
+ 
+ #, c-format
+ msgid "E92: Buffer %ld not found"
+-msgstr "E92: ¥Ð¥Ã¥Õ¥¡ %ld €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E92: ãããã¡ %ld ãèŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E93: More than one match for %s"
+-msgstr "E93: %s €ËÊ£¿ô€Î³ºÅö€¬€¢€ê€Þ€·€¿"
++msgstr "E93: %s ã«è€æ°ã®è©²åœããããŸãã"
+ 
+ #, c-format
+ msgid "E94: No matching buffer for %s"
+-msgstr "E94: %s €Ë³ºÅö€¹€ë¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó€Ç€·€¿"
++msgstr "E94: %s ã«è©²åœãããããã¡ã¯ãããŸããã§ãã"
+ 
+ #, c-format
+ msgid "line %ld"
+-msgstr "¹Ô %ld"
++msgstr "è¡ %ld"
+ 
+ msgid "E95: Buffer with this name already exists"
+-msgstr "E95: €³€ÎÌŸÁ°€Î¥Ð¥Ã¥Õ¥¡€ÏŽû€Ë€¢€ê€Þ€¹"
++msgstr "E95: ãã®ååã®ãããã¡ã¯æ¢ã«ãããŸã"
+ 
+ msgid " [Modified]"
+-msgstr " [ÊÑ¹¹€¢€ê]"
++msgstr " [å€æŽãã]"
+ 
+ msgid "[Not edited]"
+-msgstr "[Ì€ÊÔœž]"
++msgstr "[æªç·šé]"
+ 
+ msgid "[New file]"
+-msgstr "[¿·¥Õ¥¡¥€¥ë]"
++msgstr "[æ°ãã¡ã€ã«]"
+ 
+ msgid "[Read errors]"
+-msgstr "[ÆÉ¹þ¥š¥é¡Œ]"
++msgstr "[èª­èŸŒãšã©ãŒ]"
+ 
+ msgid "[readonly]"
+-msgstr "[ÆÉ¹þÀìÍÑ]"
++msgstr "[èª­èŸŒå°çš]"
+ 
+ #, c-format
+ msgid "1 line --%d%%--"
+-msgstr "1 ¹Ô --%d%%--"
++msgstr "1 è¡ --%d%%--"
+ 
+ #, c-format
+ msgid "%ld lines --%d%%--"
+-msgstr "%ld ¹Ô --%d%%--"
++msgstr "%ld è¡ --%d%%--"
+ 
+ #, c-format
+ msgid "line %ld of %ld --%d%%-- col "
+-msgstr "¹Ô %ld (ÁŽÂÎ %ld) --%d%%-- col "
++msgstr "è¡ %ld (å
+šäœ %ld) --%d%%-- col "
+ 
+ msgid "[No Name]"
+-msgstr "[ÌµÌŸ]"
++msgstr "[ç¡å]"
+ 
+ #. must be a help buffer
+ msgid "help"
+-msgstr "¥Ø¥ë¥×"
++msgstr "ãã«ã"
+ 
+ msgid "[Help]"
+-msgstr "[¥Ø¥ë¥×]"
++msgstr "[ãã«ã]"
+ 
+ msgid "[Preview]"
+-msgstr "[¥×¥ì¥Ó¥å¡Œ]"
++msgstr "[ãã¬ãã¥ãŒ]"
+ 
+ msgid "All"
+-msgstr "ÁŽ€Æ"
++msgstr "å
+šãŠ"
+ 
+ msgid "Bot"
+-msgstr "ËöÈø"
++msgstr "æ«å°Ÿ"
+ 
+ msgid "Top"
+-msgstr "ÀèÆ¬"
++msgstr "å
+é ­"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+ msgstr ""
+ "\n"
+-"# ¥Ð¥Ã¥Õ¥¡¥ê¥¹¥È:\n"
+-
+-msgid "[Location List]"
+-msgstr "[Ÿìœê¥ê¥¹¥È]"
++"# ãããã¡ãªã¹ã:\n"
+ 
+-msgid "[Quickfix List]"
+-msgstr "[Quickfix¥ê¥¹¥È]"
++msgid "[Scratch]"
++msgstr "[äžæžã]"
+ 
+ msgid ""
+ "\n"
+ "--- Signs ---"
+ msgstr ""
+ "\n"
+-"--- ¥µ¥€¥ó ---"
++"--- ãµã€ã³ ---"
+ 
+ #, c-format
+ msgid "Signs for %s:"
+-msgstr "%s €Î¥µ¥€¥ó:"
++msgstr "%s ã®ãµã€ã³:"
+ 
+ #, c-format
+ msgid "    line=%ld  id=%d  name=%s"
+-msgstr "    ¹Ô=%ld  Œ±ÊÌ»Ò=%d  ÌŸÁ°=%s"
++msgstr "    è¡=%ld  è­å¥å­=%d  åå=%s"
+ 
+ #, c-format
+ msgid "E96: Can not diff more than %ld buffers"
+-msgstr "E96: %ld °ÊŸå€Î¥Ð¥Ã¥Õ¥¡€Ïdiff€Ç€­€Þ€»€ó"
++msgstr "E96: %ld ä»¥äžã®ãããã¡ã¯diffã§ããŸãã"
++
++msgid "E810: Cannot read or write temp files"
++msgstr "E810: äžæãã¡ã€ã«ã®èª­èŸŒãããã¯æžèŸŒãã§ããŸãã"
+ 
+ msgid "E97: Cannot create diffs"
+-msgstr "E97: º¹Ê¬€òºîÀ®€Ç€­€Þ€»€ó "
++msgstr "E97: å·®åãäœæã§ããŸãã "
+ 
+ msgid "Patch file"
+-msgstr "¥Ñ¥Ã¥Á¥Õ¥¡¥€¥ë"
++msgstr "ããããã¡ã€ã«"
++
++msgid "E816: Cannot read patch output"
++msgstr "E816: patchã®åºåãèª­èŸŒããŸãã"
+ 
+ msgid "E98: Cannot read diff output"
+-msgstr "E98: diff€ÎœÐÎÏ€òÆÉ¹þ€á€Þ€»€ó"
++msgstr "E98: diffã®åºåãèª­èŸŒããŸãã"
+ 
+ msgid "E99: Current buffer is not in diff mode"
+-msgstr "E99: žœºß€Î¥Ð¥Ã¥Õ¥¡€Ïº¹Ê¬¥â¡Œ¥É€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E99: çŸåšã®ãããã¡ã¯å·®åã¢ãŒãã§ã¯ãããŸãã"
+ 
+ msgid "E793: No other buffer in diff mode is modifiable"
+-msgstr "E793: º¹Ê¬¥â¡Œ¥É€Ç€¢€ëÂŸ€Î¥Ð¥Ã¥Õ¥¡€ÏÊÑ¹¹²ÄÇœ€Ç€¹"
++msgstr "E793: å·®åã¢ãŒãã§ããä»ã®ãããã¡ã¯å€æŽå¯èœã§ã"
+ 
+ msgid "E100: No other buffer in diff mode"
+-msgstr "E100: º¹Ê¬¥â¡Œ¥É€Ç€¢€ëÂŸ€Î¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
++msgstr "E100: å·®åã¢ãŒãã§ããä»ã®ãããã¡ã¯ãããŸãã"
+ 
+ msgid "E101: More than two buffers in diff mode, don't know which one to use"
+ msgstr ""
+-"E101: º¹Ê¬¥â¡Œ¥É€Î¥Ð¥Ã¥Õ¥¡€¬2žÄ°ÊŸå€¢€ë€Î€Ç¡¢€É€ì€ò»È€Š€«ÆÃÄê€Ç€­€Þ€»€ó"
++"E101: å·®åã¢ãŒãã®ãããã¡ã2åä»¥äžããã®ã§ãã©ããäœ¿ããç¹å®ã§ããŸãã"
+ 
+ #, c-format
+ msgid "E102: Can't find buffer \"%s\""
+-msgstr "E102: ¥Ð¥Ã¥Õ¥¡ \"%s\" €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E102: ãããã¡ \"%s\" ãèŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E103: Buffer \"%s\" is not in diff mode"
+-msgstr "E103: ¥Ð¥Ã¥Õ¥¡ \"%s\" €Ïº¹Ê¬¥â¡Œ¥É€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E103: ãããã¡ \"%s\" ã¯å·®åã¢ãŒãã§ã¯ãããŸãã"
+ 
+ msgid "E787: Buffer changed unexpectedly"
+-msgstr "E787: ÍœŽü€»€º¥Ð¥Ã¥Õ¥¡€¬ÊÑ¹¹ÊÑ¹¹€µ€ì€Þ€·€¿"
++msgstr "E787: äºæãããããã¡ãå€æŽå€æŽãããŸãã"
+ 
+ msgid "E104: Escape not allowed in digraph"
+-msgstr "E104: ¹ç»ú€ËEscape€Ï»ÈÍÑ€Ç€­€Þ€»€ó"
++msgstr "E104: åå­ã«Escapeã¯äœ¿çšã§ããŸãã"
+ 
+ msgid "E544: Keymap file not found"
+-msgstr "E544: ¥­¡Œ¥Þ¥Ã¥×¥Õ¥¡¥€¥ë€¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E544: ã­ãŒããããã¡ã€ã«ãèŠã€ãããŸãã"
+ 
+ msgid "E105: Using :loadkeymap not in a sourced file"
+-msgstr "E105: :source €ÇŒè¹þ€à¥Õ¥¡¥€¥ë°Ê³°€Ç€Ï :loadkeymap €ò»È€š€Þ€»€ó"
++msgstr "E105: :source ã§åèŸŒããã¡ã€ã«ä»¥å€ã§ã¯ :loadkeymap ãäœ¿ããŸãã"
+ 
+ msgid "E791: Empty keymap entry"
+-msgstr "E791: ¶õ€Î¥­¡Œ¥Þ¥Ã¥×¥š¥ó¥È¥ê"
++msgstr "E791: ç©ºã®ã­ãŒããããšã³ããª"
+ 
+ msgid " Keyword completion (^N^P)"
+-msgstr " ¥­¡Œ¥ï¡Œ¥ÉÊäŽ° (^N^P)"
++msgstr " ã­ãŒã¯ãŒãè£å® (^N^P)"
+ 
+ #. ctrl_x_mode == 0, ^P/^N compl.
+ msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+-msgstr " ^X ¥â¡Œ¥É (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
++msgstr " ^X ã¢ãŒã (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
+ 
+ msgid " Whole line completion (^L^N^P)"
+-msgstr " ¹Ô(ÁŽÂÎ)ÊäŽ° (^L^N^P)"
++msgstr " è¡(å
+šäœ)è£å® (^L^N^P)"
+ 
+ msgid " File name completion (^F^N^P)"
+-msgstr "¥Õ¥¡¥€¥ëÌŸÊäŽ° (^F^N^P)"
++msgstr "ãã¡ã€ã«åè£å® (^F^N^P)"
+ 
+ msgid " Tag completion (^]^N^P)"
+-msgstr " ¥¿¥°ÊäŽ° (^]^N^P)"
++msgstr " ã¿ã°è£å® (^]^N^P)"
+ 
+ msgid " Path pattern completion (^N^P)"
+-msgstr " ¥Ñ¥¹¥Ñ¥¿¡Œ¥óÊäŽ° (^N^P)"
++msgstr " ãã¹ãã¿ãŒã³è£å® (^N^P)"
+ 
+ msgid " Definition completion (^D^N^P)"
+-msgstr " ÄêµÁÊäŽ° (^D^N^P)"
++msgstr " å®çŸ©è£å® (^D^N^P)"
+ 
+ msgid " Dictionary completion (^K^N^P)"
+-msgstr " Œ­œñÊäŽ° (^K^N^P)"
++msgstr " èŸæžè£å® (^K^N^P)"
+ 
+ msgid " Thesaurus completion (^T^N^P)"
+-msgstr " ¥·¥œ¡Œ¥é¥¹ÊäŽ° (^T^N^P)"
++msgstr " ã·ãœãŒã©ã¹è£å® (^T^N^P)"
+ 
+ msgid " Command-line completion (^V^N^P)"
+-msgstr " ¥³¥Þ¥ó¥É¥é¥€¥óÊäŽ° (^V^N^P)"
++msgstr " ã³ãã³ãã©ã€ã³è£å® (^V^N^P)"
+ 
+ msgid " User defined completion (^U^N^P)"
+-msgstr " ¥æ¡Œ¥¶ÄêµÁÊäŽ° (^U^N^P)"
++msgstr " ãŠãŒã¶å®çŸ©è£å® (^U^N^P)"
+ 
+ msgid " Omni completion (^O^N^P)"
+-msgstr " ¥ª¥à¥ËÊäŽ° (^O^N^P)"
++msgstr " ãªã ãè£å® (^O^N^P)"
+ 
+ msgid " Spelling suggestion (s^N^P)"
+-msgstr " ÄÖ€êœ€ÀµžõÊä (s^N^P)"
++msgstr " ç¶Žãä¿®æ­£åè£ (s^N^P)"
+ 
+ msgid " Keyword Local completion (^N^P)"
+-msgstr " ¶Éœê¥­¡Œ¥ï¡Œ¥ÉÊäŽ° (^N^P)"
++msgstr " å±æã­ãŒã¯ãŒãè£å® (^N^P)"
+ 
+ msgid "Hit end of paragraph"
+-msgstr "ÃÊÍî€ÎºÇžå€Ë¥Ò¥Ã¥È"
++msgstr "æ®µèœã®æåŸã«ããã"
++
++msgid "E839: Completion function changed window"
++msgstr "E839: è£éé¢æ°ããŠã£ã³ããŠãå€æŽããŸãã"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: è£å®é¢æ°ããã­ã¹ããåé€ããŸãã"
+ 
+ msgid "'dictionary' option is empty"
+-msgstr "'dictionary' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++msgstr "'dictionary' ãªãã·ã§ã³ãç©ºã§ã"
+ 
+ msgid "'thesaurus' option is empty"
+-msgstr "'thesaurus' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++msgstr "'thesaurus' ãªãã·ã§ã³ãç©ºã§ã"
+ 
+ #, c-format
+ msgid "Scanning dictionary: %s"
+-msgstr "Œ­œñ€ò¥¹¥­¥ã¥óÃæ: %s"
++msgstr "èŸæžãã¹ã­ã£ã³äž­: %s"
+ 
+ msgid " (insert) Scroll (^E/^Y)"
+-msgstr " (ÁÞÆþ) ¥¹¥¯¥í¡Œ¥ë(^E/^Y)"
++msgstr " (æ¿å
+¥) ã¹ã¯ã­ãŒã«(^E/^Y)"
+ 
+ msgid " (replace) Scroll (^E/^Y)"
+-msgstr " (ÃÖŽ¹) ¥¹¥¯¥í¡Œ¥ë (^E/^Y)"
++msgstr " (çœ®æ) ã¹ã¯ã­ãŒã« (^E/^Y)"
+ 
+ #, c-format
+ msgid "Scanning: %s"
+-msgstr "¥¹¥­¥ã¥óÃæ: %s"
++msgstr "ã¹ã­ã£ã³äž­: %s"
+ 
+-#, c-format
+ msgid "Scanning tags."
+-msgstr "¥¿¥°€ò¥¹¥­¥ã¥óÃæ."
++msgstr "ã¿ã°ãã¹ã­ã£ã³äž­."
+ 
+ msgid " Adding"
+-msgstr " ÄÉ²ÃÃæ"
++msgstr " è¿œå äž­"
+ 
+ #. showmode might reset the internal line pointers, so it must
+ #. * be called before line = ml_get(), or when this address is no
+ #. * longer needed.  -- Acevedo.
+ #.
+ msgid "-- Searching..."
+-msgstr "-- ž¡º÷Ãæ..."
++msgstr "-- æ€çŽ¢äž­..."
+ 
+ msgid "Back at original"
+-msgstr "»Ï€á€ËÌá€ë"
++msgstr "å§ãã«æ»ã"
+ 
+ msgid "Word from other line"
+-msgstr "ÂŸ€Î¹Ô€ÎÃ±žì"
++msgstr "ä»ã®è¡ã®åèª"
+ 
+ msgid "The only match"
+-msgstr "Í£°ì€Î³ºÅö"
++msgstr "å¯äžã®è©²åœ"
+ 
+ #, c-format
+ msgid "match %d of %d"
+-msgstr "%d ÈÖÌÜ€Î³ºÅö (ÁŽ³ºÅö %d žÄÃæ)"
++msgstr "%d çªç®ã®è©²åœ (å
+šè©²åœ %d åäž­)"
+ 
+ #, c-format
+ msgid "match %d"
+-msgstr "%d ÈÖÌÜ€Î³ºÅö"
++msgstr "%d çªç®ã®è©²åœ"
+ 
+ msgid "E18: Unexpected characters in :let"
+-msgstr "E18: ÍœŽü€»€ÌÊž»ú€¬ :let €Ë€¢€ê€Þ€·€¿"
++msgstr "E18: äºæãã¬æå­ã :let ã«ãããŸãã"
+ 
+ #, c-format
+ msgid "E684: list index out of range: %ld"
+-msgstr "E684: ¥ê¥¹¥È€Î¥€¥ó¥Ç¥Ã¥¯¥¹€¬ÈÏ°Ï³°€Ç€¹: %ld"
++msgstr "E684: ãªã¹ãã®ã€ã³ããã¯ã¹ãç¯å²å€ã§ã: %ld"
+ 
+ #, c-format
+ msgid "E121: Undefined variable: %s"
+-msgstr "E121: Ì€ÄêµÁ€ÎÊÑ¿ô€Ç€¹: %s"
++msgstr "E121: æªå®çŸ©ã®å€æ°ã§ã: %s"
+ 
+ msgid "E111: Missing ']'"
+-msgstr "E111: ']' €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E111: ']' ãèŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E686: Argument of %s must be a List"
+-msgstr "E686: %s €Î°ú¿ô€Ï¥ê¥¹¥È·¿€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgstr "E686: %s ã®åŒæ°ã¯ãªã¹ãåã§ãªããã°ãªããŸãã"
+ 
+ #, c-format
+ msgid "E712: Argument of %s must be a List or Dictionary"
+-msgstr "E712: %s €Î°ú¿ô€Ï¥ê¥¹¥È·¿€Þ€¿€ÏŒ­œñ·¿€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgstr "E712: %s ã®åŒæ°ã¯ãªã¹ãåãŸãã¯èŸæžåã§ãªããã°ãªããŸãã"
+ 
+ msgid "E713: Cannot use empty key for Dictionary"
+-msgstr "E713: Œ­œñ·¿€Ë¶õ€Î¥­¡Œ€ò»È€Š€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "E713: èŸæžåã«ç©ºã®ã­ãŒãäœ¿ãããšã¯ã§ããŸãã"
+ 
+ msgid "E714: List required"
+-msgstr "E714: ¥ê¥¹¥È·¿€¬É¬Í×€Ç€¹"
++msgstr "E714: ãªã¹ãåãå¿
+èŠã§ã"
+ 
+ msgid "E715: Dictionary required"
+-msgstr "E715: Œ­œñ·¿€¬É¬Í×€Ç€¹"
++msgstr "E715: èŸæžåãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "E118: Too many arguments for function: %s"
+-msgstr "E118: ŽØ¿ô€Î°ú¿ô€¬Â¿²á€®€Þ€¹: %s"
++msgstr "E118: é¢æ°ã®åŒæ°ãå€éããŸã: %s"
+ 
+ #, c-format
+ msgid "E716: Key not present in Dictionary: %s"
+-msgstr "E716: Œ­œñ·¿€Ë¥­¡Œ€¬Âžºß€·€Þ€»€ó: %s"
++msgstr "E716: èŸæžåã«ã­ãŒãå­åšããŸãã: %s"
+ 
+ #, c-format
+ msgid "E122: Function %s already exists, add ! to replace it"
+-msgstr "E122: ŽØ¿ô %s €ÏÄêµÁºÑ€Ç€¹, ºÆÄêµÁ€¹€ë€Ë€Ï ! €òÄÉ²Ã€·€Æ€¯€À€µ€€"
++msgstr "E122: é¢æ° %s ã¯å®çŸ©æžã§ã, åå®çŸ©ããã«ã¯ ! ãè¿œå ããŠãã ãã"
+ 
+ msgid "E717: Dictionary entry already exists"
+-msgstr "E717: Œ­œñ·¿Æâ€Ë¥š¥ó¥È¥ê€¬Žû€ËÂžºß€·€Þ€¹"
++msgstr "E717: èŸæžåå
+ã«ãšã³ããªãæ¢ã«å­åšããŸã"
+ 
+ msgid "E718: Funcref required"
+-msgstr "E718: ŽØ¿ô»²ŸÈ·¿€¬Í×µá€µ€ì€Þ€¹"
++msgstr "E718: é¢æ°åç
+§åãèŠæ±ãããŸã"
+ 
+ msgid "E719: Cannot use [:] with a Dictionary"
+-msgstr "E719: [:] €òŒ­œñ·¿€ÈÁÈ€ß¹ç€ï€»€Æ€Ï»È€š€Þ€»€ó"
++msgstr "E719: [:] ãèŸæžåãšçµã¿åãããŠã¯äœ¿ããŸãã"
+ 
+ #, c-format
+ msgid "E734: Wrong variable type for %s="
+-msgstr "E734: °Û€Ê€Ã€¿·¿€ÎÊÑ¿ô€Ç€¹ %s="
++msgstr "E734: ç°ãªã£ãåã®å€æ°ã§ã %s="
+ 
+ #, c-format
+ msgid "E130: Unknown function: %s"
+-msgstr "E130: Ì€ÃÎ€ÎŽØ¿ô€Ç€¹: %s"
++msgstr "E130: æªç¥ã®é¢æ°ã§ã: %s"
+ 
+ #, c-format
+ msgid "E461: Illegal variable name: %s"
+-msgstr "E461: ÉÔÀµ€ÊÊÑ¿ôÌŸ€Ç€¹: %s"
++msgstr "E461: äžæ­£ãªå€æ°åã§ã: %s"
+ 
+ msgid "E687: Less targets than List items"
+-msgstr "E687: ¥¿¡Œ¥²¥Ã¥È€¬¥ê¥¹¥È·¿Æâ€ÎÍ×ÁÇ€è€ê€âŸ¯€Ê€€€Ç€¹"
++msgstr "E687: ã¿ãŒã²ããããªã¹ãåå
+ã®èŠçŽ ãããå°ãªãã§ã"
+ 
+ msgid "E688: More targets than List items"
+-msgstr "E688: ¥¿¡Œ¥²¥Ã¥È€¬¥ê¥¹¥È·¿Æâ€ÎÍ×ÁÇ€è€ê€âÂ¿€€€Ç€¹"
++msgstr "E688: ã¿ãŒã²ããããªã¹ãåå
+ã®èŠçŽ ãããå€ãã§ã"
+ 
+ msgid "Double ; in list of variables"
+-msgstr "¥ê¥¹¥È·¿€ÎÃÍ€Ë2€Ä°ÊŸå€Î ; €¬ž¡œÐ€µ€ì€Þ€·€¿"
++msgstr "ãªã¹ãåã®å€ã«2ã€ä»¥äžã® ; ãæ€åºãããŸãã"
+ 
+ #, c-format
+ msgid "E738: Can't list variables for %s"
+-msgstr "E738: %s €ÎÃÍ€ò°ìÍ÷ÉœŒš€Ç€­€Þ€»€ó"
++msgstr "E738: %s ã®å€ãäžèŠ§è¡šç€ºã§ããŸãã"
+ 
+ msgid "E689: Can only index a List or Dictionary"
+-msgstr "E689: ¥ê¥¹¥È·¿€ÈŒ­œñ·¿°Ê³°€Ï¥€¥ó¥Ç¥Ã¥¯¥¹»ØÄê€Ç€­€Þ€»€ó"
++msgstr "E689: ãªã¹ãåãšèŸæžåä»¥å€ã¯ã€ã³ããã¯ã¹æå®ã§ããŸãã"
+ 
+ msgid "E708: [:] must come last"
+-msgstr "E708: [:] €ÏºÇžå€Ç€Ê€±€ì€Ð€€€±€Þ€»€ó"
++msgstr "E708: [:] ã¯æåŸã§ãªããã°ãããŸãã"
+ 
+ msgid "E709: [:] requires a List value"
+-msgstr "E709: [:] €Ë€Ï¥ê¥¹¥È·¿€ÎÃÍ€¬É¬Í×€Ç€¹"
++msgstr "E709: [:] ã«ã¯ãªã¹ãåã®å€ãå¿
+èŠã§ã"
+ 
+ msgid "E710: List value has more items than target"
+-msgstr "E710: ¥ê¥¹¥È·¿ÊÑ¿ô€Ë¥¿¡Œ¥²¥Ã¥È€è€ê€âÂ¿€€Í×ÁÇ€¬€¢€ê€Þ€¹"
++msgstr "E710: ãªã¹ãåå€æ°ã«ã¿ãŒã²ãããããå€ãèŠçŽ ããããŸã"
+ 
+ msgid "E711: List value has not enough items"
+-msgstr "E711: ¥ê¥¹¥È·¿ÊÑ¿ô€ËœœÊ¬€Ê¿ô€ÎÍ×ÁÇ€¬€¢€ê€Þ€»€ó"
++msgstr "E711: ãªã¹ãåå€æ°ã«ååãªæ°ã®èŠçŽ ããããŸãã"
+ 
+ #
+ msgid "E690: Missing \"in\" after :for"
+-msgstr "E690: :for €Îžå€Ë \"in\" €¬€¢€ê€Þ€»€ó"
++msgstr "E690: :for ã®åŸã« \"in\" ããããŸãã"
+ 
+ #, c-format
+ msgid "E107: Missing parentheses: %s"
+-msgstr "E107: ¥«¥Ã¥³ '(' €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E107: ã«ãã³ '(' ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E108: No such variable: \"%s\""
+-msgstr "E108: €œ€ÎÊÑ¿ô€Ï€¢€ê€Þ€»€ó: \"%s\""
++msgstr "E108: ãã®å€æ°ã¯ãããŸãã: \"%s\""
+ 
+ msgid "E743: variable nested too deep for (un)lock"
+-msgstr "E743: (¥¢¥ó¥Á)¥í¥Ã¥¯€¹€ë€Ë€ÏÊÑ¿ô€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E743: (ã¢ã³)ã­ãã¯ããã«ã¯å€æ°ã®å
+¥ãå­ãæ·±éããŸã"
+ 
+ msgid "E109: Missing ':' after '?'"
+-msgstr "E109: '?' €Îžå€Ë ':' €¬€¢€ê€Þ€»€ó"
++msgstr "E109: '?' ã®åŸã« ':' ããããŸãã"
+ 
+ msgid "E691: Can only compare List with List"
+-msgstr "E691: ¥ê¥¹¥È·¿€Ï¥ê¥¹¥È·¿€È€·€«Èæ³Ó€Ç€­€Þ€»€ó"
++msgstr "E691: ãªã¹ãåã¯ãªã¹ãåãšããæ¯èŒã§ããŸãã"
+ 
+ msgid "E692: Invalid operation for Lists"
+-msgstr "E692: ¥ê¥¹¥È·¿€Ë€ÏÌµžú€ÊÁàºî€Ç€¹"
++msgstr "E692: ãªã¹ãåã«ã¯ç¡å¹ãªæäœã§ã"
+ 
+ msgid "E735: Can only compare Dictionary with Dictionary"
+-msgstr "E735: Œ­œñ·¿€ÏŒ­œñ·¿€È€·€«Èæ³Ó€Ç€­€Þ€»€ó"
++msgstr "E735: èŸæžåã¯èŸæžåãšããæ¯èŒã§ããŸãã"
+ 
+ msgid "E736: Invalid operation for Dictionary"
+-msgstr "E736: Œ­œñ·¿€Ë€ÏÌµžú€ÊÁàºî€Ç€¹"
++msgstr "E736: èŸæžåã«ã¯ç¡å¹ãªæäœã§ã"
+ 
+ msgid "E693: Can only compare Funcref with Funcref"
+-msgstr "E693: ŽØ¿ô»²ŸÈ·¿€ÏŽØ¿ô»²ŸÈ·¿€È€·€«Èæ³Ó€Ç€­€Þ€»€ó"
++msgstr "E693: é¢æ°åç
+§åã¯é¢æ°åç
+§åãšããæ¯èŒã§ããŸãã"
+ 
+ msgid "E694: Invalid operation for Funcrefs"
+-msgstr "E694: ŽØ¿ô»²ŸÈ·¿€Ë€ÏÌµžú€ÊÁàºî€Ç€¹"
++msgstr "E694: é¢æ°åç
+§åã«ã¯ç¡å¹ãªæäœã§ã"
++
++msgid "E804: Cannot use '%' with Float"
++msgstr "E804: '%' ãæµ®åå°æ°ç¹æ°ãšçµã¿åãããŠã¯äœ¿ããŸãã"
+ 
+ msgid "E110: Missing ')'"
+-msgstr "E110: ')' €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E110: ')' ãèŠã€ãããŸãã"
+ 
+ msgid "E695: Cannot index a Funcref"
+-msgstr "E695: ŽØ¿ô»²ŸÈ·¿€Ï¥€¥ó¥Ç¥Ã¥¯¥¹€Ç€­€Þ€»€ó"
++msgstr "E695: é¢æ°åç
+§åã¯ã€ã³ããã¯ã¹ã§ããŸãã"
+ 
+ #, c-format
+ msgid "E112: Option name missing: %s"
+-msgstr "E112: ¥ª¥×¥·¥ç¥óÌŸ€¬€¢€ê€Þ€»€ó: %s"
++msgstr "E112: ãªãã·ã§ã³åããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E113: Unknown option: %s"
+-msgstr "E113: Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹: %s"
++msgstr "E113: æªç¥ã®ãªãã·ã§ã³ã§ã: %s"
+ 
+ #, c-format
+ msgid "E114: Missing quote: %s"
+-msgstr "E114: °úÍÑÉä (\") €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E114: åŒçšç¬Š (\") ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E115: Missing quote: %s"
+-msgstr "E115: °úÍÑÉä (') €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E115: åŒçšç¬Š (') ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E696: Missing comma in List: %s"
+-msgstr "E696: ¥ê¥¹¥È·¿€Ë¥«¥ó¥Þ€¬€¢€ê€Þ€»€ó: %s"
++msgstr "E696: ãªã¹ãåã«ã«ã³ãããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E697: Missing end of List ']': %s"
+-msgstr "E697: ¥ê¥¹¥È·¿€ÎºÇžå€Ë ']' €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E697: ãªã¹ãåã®æåŸã« ']' ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E720: Missing colon in Dictionary: %s"
+-msgstr "E720: Œ­œñ·¿€Ë¥³¥í¥ó€¬€¢€ê€Þ€»€ó: %s"
++msgstr "E720: èŸæžåã«ã³ã­ã³ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E721: Duplicate key in Dictionary: \"%s\""
+-msgstr "E721: Œ­œñ·¿€ËœÅÊ£¥­¡Œ€¬€¢€ê€Þ€¹: \"%s\""
++msgstr "E721: èŸæžåã«éè€ã­ãŒããããŸã: \"%s\""
+ 
+ #, c-format
+ msgid "E722: Missing comma in Dictionary: %s"
+-msgstr "E722: Œ­œñ·¿€Ë¥«¥ó¥Þ€¬€¢€ê€Þ€»€ó: %s"
++msgstr "E722: èŸæžåã«ã«ã³ãããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E723: Missing end of Dictionary '}': %s"
+-msgstr "E723: Œ­œñ·¿€ÎºÇžå€Ë '}' €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E723: èŸæžåã®æåŸã« '}' ããããŸãã: %s"
+ 
+ msgid "E724: variable nested too deep for displaying"
+-msgstr "E724: ÉœŒš€¹€ë€Ë€ÏÊÑ¿ô€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E724: è¡šç€ºããã«ã¯å€æ°ã®å
+¥ãå­ãæ·±éããŸã"
++
++#, c-format
++msgid "E740: Too many arguments for function %s"
++msgstr "E740: é¢æ°ã®åŒæ°ãå€éããŸã: %s"
++
++#, c-format
++msgid "E116: Invalid arguments for function %s"
++msgstr "E116: é¢æ°ã®ç¡å¹ãªåŒæ°ã§ã: %s"
+ 
+ #, c-format
+ msgid "E117: Unknown function: %s"
+-msgstr "E117: Ì€ÃÎ€ÎŽØ¿ô€Ç€¹: %s"
++msgstr "E117: æªç¥ã®é¢æ°ã§ã: %s"
+ 
+ #, c-format
+ msgid "E119: Not enough arguments for function: %s"
+-msgstr "E119: ŽØ¿ô€Î°ú¿ô€¬Ÿ¯€Ê²á€®€Þ€¹: %s"
++msgstr "E119: é¢æ°ã®åŒæ°ãå°ãªéããŸã: %s"
+ 
+ #, c-format
+ msgid "E120: Using <SID> not in a script context: %s"
+-msgstr "E120: ¥¹¥¯¥ê¥×¥È°Ê³°€Ç<SID>€¬»È€ï€ì€Þ€·€¿: %s"
++msgstr "E120: ã¹ã¯ãªããä»¥å€ã§<SID>ãäœ¿ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E725: Calling dict function without Dictionary: %s"
+-msgstr "E725: Œ­œñÍÑŽØ¿ô€¬žÆ€Ð€ì€Þ€·€¿€¬Œ­œñ€¬€¢€ê€Þ€»€ó: %s"
++msgstr "E725: èŸæžçšé¢æ°ãåŒã°ããŸãããèŸæžããããŸãã: %s"
++
++msgid "E808: Number or Float required"
++msgstr "E808: æ°å€ãæµ®åå°æ°ç¹æ°ãå¿
+èŠã§ã"
++
++msgid "add() argument"
++msgstr "add() ã®åŒæ°"
+ 
+ msgid "E699: Too many arguments"
+-msgstr "E699: €¬Â¿²á€®€Þ€¹"
++msgstr "E699: åŒæ°ãå€éããŸã"
+ 
+ msgid "E785: complete() can only be used in Insert mode"
+-msgstr "E785: complete() €ÏÁÞÆþ¥â¡Œ¥É€Ç€·€«ÍøÍÑ€Ç€­€Þ€»€ó"
++msgstr "E785: complete() ã¯æ¿å
+¥ã¢ãŒãã§ããå©çšã§ããŸãã"
+ 
+ #.
+ #. * Yes this is ugly, I don't particularly like it either.  But doing it
+@@ -531,176 +584,221 @@
+ msgid "&Ok"
+ msgstr "&Ok"
+ 
++msgid "extend() argument"
++msgstr "extend() ã®åŒæ°"
++
+ #, c-format
+ msgid "E737: Key already exists: %s"
+-msgstr "E737: %s €È€€€Š¥­¡Œ€ÏŽû€ËÂžºß€·€Þ€¹"
++msgstr "E737: ã­ãŒã¯æ¢ã«å­åšããŸã: %s"
++
++msgid "map() argument"
++msgstr "map() ã®åŒæ°"
++
++msgid "filter() argument"
++msgstr "filter() ã®åŒæ°"
+ 
+ #, c-format
+ msgid "+-%s%3ld lines: "
+-msgstr "+-%s%3ld ¹Ô:"
++msgstr "+-%s%3ld è¡: "
+ 
+ #, c-format
+ msgid "E700: Unknown function: %s"
+-msgstr "E700: Ì€ÃÎ€ÎŽØ¿ô€Ç€¹: %s"
++msgstr "E700: æªç¥ã®é¢æ°ã§ã: %s"
+ 
+ msgid ""
+ "&OK\n"
+ "&Cancel"
+ msgstr ""
+-"·èÄê(&O)\n"
+-"¥­¥ã¥ó¥»¥ë(&C)"
++"æ±ºå®(&O)\n"
++"ã­ã£ã³ã»ã«(&C)"
+ 
+ msgid "called inputrestore() more often than inputsave()"
+-msgstr "inputrestore() €¬ inputsave() €è€ê€âÂ¿€¯žÆ€Ð€ì€Þ€·€¿"
++msgstr "inputrestore() ã inputsave() ãããå€ãåŒã°ããŸãã"
++
++msgid "insert() argument"
++msgstr "insert() ã®åŒæ°"
+ 
+ msgid "E786: Range not allowed"
+-msgstr "E786: ÈÏ°Ï»ØÄê€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E786: ç¯å²æå®ã¯èš±å¯ãããŠããŸãã"
+ 
+ msgid "E701: Invalid type for len()"
+-msgstr "E701: len() €Ë€ÏÌµžú€Ê·¿€Ç€¹"
++msgstr "E701: len() ã«ã¯ç¡å¹ãªåã§ã"
+ 
+ msgid "E726: Stride is zero"
+-msgstr "E726: ¥¹¥È¥é¥€¥É(Á°¿ÊÎÌ)€¬ 0 €Ç€¹"
++msgstr "E726: ã¹ãã©ã€ã(åé²é)ã 0 ã§ã"
+ 
+ msgid "E727: Start past end"
+-msgstr "E727: ³«»Ï°ÌÃÖ€¬œªÎ»°ÌÃÖ€ò±Û€š€Þ€·€¿"
++msgstr "E727: éå§äœçœ®ãçµäºäœçœ®ãè¶ããŸãã"
+ 
+ msgid "<empty>"
+-msgstr "<¶õ>"
++msgstr "<ç©º>"
+ 
+ msgid "E240: No connection to Vim server"
+-msgstr "E240: Vim ¥µ¡Œ¥Ð€Ø€ÎÀÜÂ³€¬€¢€ê€Þ€»€ó"
++msgstr "E240: Vim ãµãŒããžã®æ¥ç¶ããããŸãã"
+ 
+ #, c-format
+ msgid "E241: Unable to send to %s"
+-msgstr "E241: %s €ØÁ÷€ë€³€È€¬€Ç€­€Þ€»€ó"
++msgstr "E241: %s ãžéãããšãã§ããŸãã"
+ 
+ msgid "E277: Unable to read a server reply"
+-msgstr "E277: ¥µ¡Œ¥Ð€Î±þÅú€¬€¢€ê€Þ€»€ó"
++msgstr "E277: ãµãŒãã®å¿ç­ããããŸãã"
++
++msgid "remove() argument"
++msgstr "remove() ã®åŒæ°"
+ 
+ # Added at 10-Mar-2004.
+ msgid "E655: Too many symbolic links (cycle?)"
+-msgstr "E655: ¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯€¬Â¿²á€®€Þ€¹ (œÛŽÄ€·€Æ€€€ë²ÄÇœÀ­€¬€¢€ê€Þ€¹)"
++msgstr "E655: ã·ã³ããªãã¯ãªã³ã¯ãå€éããŸã (åŸªç°ããŠããå¯èœæ§ããããŸã)"
++
++msgid "reverse() argument"
++msgstr "reverse() ã®åŒæ°"
+ 
+ msgid "E258: Unable to send to client"
+-msgstr "E258: ¥¯¥é¥€¥¢¥ó¥È€ØÁ÷€ë€³€È€¬€Ç€­€Þ€»€ó"
++msgstr "E258: ã¯ã©ã€ã¢ã³ããžéãããšãã§ããŸãã"
++
++msgid "sort() argument"
++msgstr "sort() ã®åŒæ°"
+ 
+ msgid "E702: Sort compare function failed"
+-msgstr "E702: ¥œ¡Œ¥È€ÎÈæ³ÓŽØ¿ô€¬ŒºÇÔ€·€Þ€·€¿"
++msgstr "E702: ãœãŒãã®æ¯èŒé¢æ°ãå€±æããŸãã"
+ 
+ msgid "(Invalid)"
+-msgstr "(Ìµžú)"
++msgstr "(ç¡å¹)"
+ 
+ msgid "E677: Error writing temp file"
+-msgstr "E677: °ì»þ¥Õ¥¡¥€¥ëœñ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿"
++msgstr "E677: äžæãã¡ã€ã«æžèŸŒäž­ã«ãšã©ãŒãçºçããŸãã"
++
++msgid "E805: Using a Float as a Number"
++msgstr "E805: æµ®åå°æ°ç¹æ°ãæ°å€ãšããŠæ±ã£ãŠããŸã"
+ 
+ msgid "E703: Using a Funcref as a Number"
+-msgstr "E703: ŽØ¿ô»²ŸÈ·¿€ò¿ôÃÍ€È€·€Æ°·€Ã€Æ€€€Þ€¹¡£"
++msgstr "E703: é¢æ°åç
+§åãæ°å€ãšããŠæ±ã£ãŠããŸãã"
+ 
+ msgid "E745: Using a List as a Number"
+-msgstr "E745: ¥ê¥¹¥È·¿€ò¿ôÃÍ€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++msgstr "E745: ãªã¹ãåãæ°å€ãšããŠæ±ã£ãŠããŸã"
+ 
+ msgid "E728: Using a Dictionary as a Number"
+-msgstr "E728: Œ­œñ·¿€ò¿ôÃÍ€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++msgstr "E728: èŸæžåãæ°å€ãšããŠæ±ã£ãŠããŸã"
+ 
+ msgid "E729: using Funcref as a String"
+-msgstr "E729: ŽØ¿ô»²ŸÈ·¿€òÊž»úÎó€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++msgstr "E729: é¢æ°åç
+§åãæå­åãšããŠæ±ã£ãŠããŸã"
+ 
+ msgid "E730: using List as a String"
+-msgstr "E730: ¥ê¥¹¥È·¿€òÊž»úÎó€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++msgstr "E730: ãªã¹ãåãæå­åãšããŠæ±ã£ãŠããŸã"
+ 
+ msgid "E731: using Dictionary as a String"
+-msgstr "E731: ÊÑ¿ô·¿€òÊž»úÎó€È€·€Æ°·€Ã€Æ€€€Þ€¹"
++msgstr "E731: èŸæžåãæå­åãšããŠæ±ã£ãŠããŸã"
++
++msgid "E806: using Float as a String"
++msgstr "E806: æµ®åå°æ°ç¹æ°ãæå­åãšããŠæ±ã£ãŠããŸã"
+ 
+ #, c-format
+-msgid "E704: Funcref variable name must start with a capital: %s"
+-msgstr "E704: ŽØ¿ô»²ŸÈ·¿ÊÑ¿ôÌŸ€ÏÂçÊž»ú€Ç»Ï€Þ€é€Ê€±€ì€Ð€Ê€ê€Þ€»€ó: %s"
++msgid "E706: Variable type mismatch for: %s"
++msgstr "E706: å€æ°ã®åãäžèŽããŸãã: %s"
+ 
+ #, c-format
+-msgid "E705: Variable name conflicts with existing function: %s"
+-msgstr "E705: ÊÑ¿ôÌŸ€¬ŽûÂž€ÎŽØ¿ôÌŸ€ÈŸ×ÆÍ€·€Þ€¹: %s"
++msgid "E795: Cannot delete variable %s"
++msgstr "E795: å€æ° %s ãåé€ã§ããŸãã"
+ 
+ #, c-format
+-msgid "E706: Variable type mismatch for: %s"
+-msgstr "E706: ÊÑ¿ô€Î·¿€¬°ìÃ×€·€Þ€»€ó: %s"
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: é¢æ°åç
+§åå€æ°åã¯å€§æå­ã§å§ãŸããªããã°ãªããŸãã: %s"
+ 
+ #, c-format
+-msgid "E795: Cannot delete variable %s"
+-msgstr "E795: ÊÑ¿ô %s €òºïœü€Ç€­€Þ€»€ó"
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: å€æ°åãæ¢å­ã®é¢æ°åãšè¡çªããŸã: %s"
+ 
+ #, c-format
+ msgid "E741: Value is locked: %s"
+-msgstr "E741: ÃÍ€¬¥í¥Ã¥¯€µ€ì€Æ€€€Þ€¹: %s"
++msgstr "E741: å€ãã­ãã¯ãããŠããŸã: %s"
+ 
+ msgid "Unknown"
+-msgstr "ÉÔÌÀ"
++msgstr "äžæ"
+ 
+ #, c-format
+ msgid "E742: Cannot change value of %s"
+-msgstr "E742: %s €ÎÃÍ€òÊÑ¹¹€Ç€­€Þ€»€ó"
++msgstr "E742: %s ã®å€ãå€æŽã§ããŸãã"
+ 
+ msgid "E698: variable nested too deep for making a copy"
+-msgstr "E698: ¥³¥Ô¡Œ€òŒè€ë€Ë€ÏÊÑ¿ô€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E698: ã³ããŒãåãã«ã¯å€æ°ã®å
+¥ãå­ãæ·±éããŸã"
++
++#, c-format
++msgid "E123: Undefined function: %s"
++msgstr "E123: æªå®çŸ©ã®é¢æ°ã§ã: %s"
+ 
+ #, c-format
+ msgid "E124: Missing '(': %s"
+-msgstr "E124: '(' €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E124: '(' ããããŸãã: %s"
++
++msgid "E862: Cannot use g: here"
++msgstr "E862: ããã§ã¯ g: ã¯äœ¿ããŸãã"
+ 
+ #, c-format
+ msgid "E125: Illegal argument: %s"
+-msgstr "E125: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++msgstr "E125: äžæ­£ãªåŒæ°ã§ã: %s"
++
++#, c-format
++msgid "E853: Duplicate argument name: %s"
++msgstr "E853: åŒæ°åãéè€ããŠããŸã: %s"
+ 
+ msgid "E126: Missing :endfunction"
+-msgstr "E126: :endfunction €¬€¢€ê€Þ€»€ó"
++msgstr "E126: :endfunction ããããŸãã"
++
++#, c-format
++msgid "E707: Function name conflicts with variable: %s"
++msgstr "E707: é¢æ°åãå€æ°åãšè¡çªããŸã: %s"
++
++#, c-format
++msgid "E127: Cannot redefine function %s: It is in use"
++msgstr "E127: é¢æ° %s ãåå®çŸ©ã§ããŸãã: äœ¿çšäž­ã§ã"
+ 
+ #, c-format
+ msgid "E746: Function name does not match script file name: %s"
+-msgstr "E746: ŽØ¿ôÌŸ€¬¥¹¥¯¥ê¥×¥È€Î¥Õ¥¡¥€¥ëÌŸ€È°ìÃ×€·€Þ€»€ó: %s"
++msgstr "E746: é¢æ°åãã¹ã¯ãªããã®ãã¡ã€ã«åãšäžèŽããŸãã: %s"
+ 
+ msgid "E129: Function name required"
+-msgstr "E129: ŽØ¿ôÌŸ€¬Í×µá€µ€ì€Þ€¹"
++msgstr "E129: é¢æ°åãèŠæ±ãããŸã"
+ 
+ #, c-format
+ msgid "E128: Function name must start with a capital or contain a colon: %s"
+-msgstr "E128: ŽØ¿ôÌŸ€ÏÂçÊž»ú€Ç»Ï€Þ€ë€«¥³¥í¥ó€òŽÞ€Þ€Ê€±€ì€Ð€Ê€ê€Þ€»€ó: %s"
++msgstr "E128: é¢æ°åã¯å€§æå­ã§å§ãŸããã³ã­ã³ãå«ãŸãªããã°ãªããŸãã: %s"
+ 
+ #, c-format
+ msgid "E131: Cannot delete function %s: It is in use"
+-msgstr "E131: ŽØ¿ô %s €òºïœü€Ç€­€Þ€»€ó: »ÈÍÑÃæ€Ç€¹"
++msgstr "E131: é¢æ° %s ãåé€ã§ããŸãã: äœ¿çšäž­ã§ã"
+ 
+ msgid "E132: Function call depth is higher than 'maxfuncdepth'"
+-msgstr "E132: ŽØ¿ôžÆœÐ€ÎÆþ€ì»Ò¿ô€¬ 'maxfuncdepth' €òÄ¶€š€Þ€·€¿"
++msgstr "E132: é¢æ°åŒåºã®å
+¥ãå­æ°ã 'maxfuncdepth' ãè¶
+ããŸãã"
+ 
+ #, c-format
+ msgid "calling %s"
+-msgstr "%s €òŒÂ¹ÔÃæ€Ç€¹"
++msgstr "%s ãå®è¡äž­ã§ã"
+ 
+ #, c-format
+ msgid "%s aborted"
+-msgstr "%s €¬ÃæÃÇ€µ€ì€Þ€·€¿"
++msgstr "%s ãäž­æ­ãããŸãã"
+ 
+ #, c-format
+ msgid "%s returning #%ld"
+-msgstr "%s €¬ #%ld €òÊÖ€·€Þ€·€¿"
++msgstr "%s ã #%ld ãè¿ããŸãã"
+ 
+ #, c-format
+ msgid "%s returning %s"
+-msgstr "%s €¬ %s €òÊÖ€·€Þ€·€¿"
++msgstr "%s ã %s ãè¿ããŸãã"
+ 
+ #, c-format
+ msgid "continuing in %s"
+-msgstr "%s €ÎŒÂ¹Ô€ò·ÑÂ³Ãæ€Ç€¹"
++msgstr "%s ã®å®è¡ãç¶ç¶äž­ã§ã"
+ 
+ msgid "E133: :return not inside a function"
+-msgstr "E133: ŽØ¿ô³°€Ë :return €¬€¢€ê€Þ€·€¿"
++msgstr "E133: é¢æ°å€ã« :return ããããŸãã"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# global variables:\n"
+ msgstr ""
+ "\n"
+-"# ¥°¥í¡Œ¥Ð¥ëÊÑ¿ô:\n"
++"# ã°ã­ãŒãã«å€æ°:\n"
+ 
+ msgid ""
+ "\n"
+@@ -709,126 +807,130 @@
+ "\n"
+ "\tLast set from "
+ 
++msgid "No old files"
++msgstr "å€ããã¡ã€ã«ã¯ãããŸãã"
++
+ #, c-format
+ msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+-msgstr "<%s>%s%s  %d,  16¿Ê¿ô %02x,  8¿Ê¿ô %03o"
++msgstr "<%s>%s%s  %d,  16é²æ° %02x,  8é²æ° %03o"
+ 
+ #, c-format
+ msgid "> %d, Hex %04x, Octal %o"
+-msgstr "> %d, 16¿Ê¿ô %04x, 8¿Ê¿ô %o"
++msgstr "> %d, 16é²æ° %04x, 8é²æ° %o"
+ 
+ #, c-format
+ msgid "> %d, Hex %08x, Octal %o"
+-msgstr "> %d, 16¿Ê¿ô %08x, 8¿Ê¿ô %o"
++msgstr "> %d, 16é²æ° %08x, 8é²æ° %o"
+ 
+ msgid "E134: Move lines into themselves"
+-msgstr "E134: ¹Ô€ò€œ€ìŒ«¿È€Ë€Ï°ÜÆ°€Ç€­€Þ€»€ó"
++msgstr "E134: è¡ãããèªèº«ã«ã¯ç§»åã§ããŸãã"
+ 
+ msgid "1 line moved"
+-msgstr "1 ¹Ô€¬°ÜÆ°€µ€ì€Þ€·€¿"
++msgstr "1 è¡ãç§»åãããŸãã"
+ 
+ #, c-format
+ msgid "%ld lines moved"
+-msgstr "%ld ¹Ô€¬°ÜÆ°€µ€ì€Þ€·€¿"
++msgstr "%ld è¡ãç§»åãããŸãã"
+ 
+ #, c-format
+ msgid "%ld lines filtered"
+-msgstr "%ld ¹Ô€¬¥Õ¥£¥ë¥¿œèÍý€µ€ì€Þ€·€¿"
++msgstr "%ld è¡ããã£ã«ã¿åŠçãããŸãã"
+ 
+ msgid "E135: *Filter* Autocommands must not change current buffer"
+-msgstr "E135: *¥Õ¥£¥ë¥¿* autocommand€Ïžœºß€Î¥Ð¥Ã¥Õ¥¡€òÊÑ¹¹€·€Æ€Ï€€€±€Þ€»€ó"
++msgstr "E135: *ãã£ã«ã¿* autocommandã¯çŸåšã®ãããã¡ãå€æŽããŠã¯ãããŸãã"
+ 
+ msgid "[No write since last change]\n"
+-msgstr "[ºÇžå€ÎÊÑ¹¹€¬ÊÝÂž€µ€ì€Æ€€€Þ€»€ó]\n"
++msgstr "[æåŸã®å€æŽãä¿å­ãããŠããŸãã]\n"
+ 
+ #, c-format
+ msgid "%sviminfo: %s in line: "
+-msgstr "%sviminfo: %s ¹ÔÌÜ: "
++msgstr "%sviminfo: %s è¡ç®: "
+ 
+ msgid "E136: viminfo: Too many errors, skipping rest of file"
+-msgstr "E136: viminfo: ¥š¥é¡Œ€¬Â¿²á€®€ë€Î€Ç, °Ê¹ß€Ï¥¹¥­¥Ã¥×€·€Þ€¹"
++msgstr "E136: viminfo: ãšã©ãŒãå€éããã®ã§, ä»¥éã¯ã¹ã­ããããŸã"
+ 
+ #, c-format
+ msgid "Reading viminfo file \"%s\"%s%s%s"
+-msgstr "viminfo¥Õ¥¡¥€¥ë \"%s\"%s%s%s €òÆÉ¹þ€ßÃæ "
++msgstr "viminfoãã¡ã€ã« \"%s\"%s%s%s ãèª­èŸŒã¿äž­ "
+ 
+ msgid " info"
+-msgstr " ŸðÊó"
++msgstr " æ
+å ±"
+ 
+ msgid " marks"
+-msgstr " ¥Þ¡Œ¥¯"
++msgstr " ããŒã¯"
++
++msgid " oldfiles"
++msgstr " æ§ãã¡ã€ã«çŸ€"
+ 
+ msgid " FAILED"
+-msgstr " ŒºÇÔ"
++msgstr " å€±æ"
+ 
+ #. avoid a wait_return for this message, it's annoying
+ #, c-format
+ msgid "E137: Viminfo file is not writable: %s"
+-msgstr "E137: viminfo¥Õ¥¡¥€¥ë€¬œñ¹þ€ß€Ç€­€Þ€»€ó: %s"
++msgstr "E137: viminfoãã¡ã€ã«ãæžèŸŒã¿ã§ããŸãã: %s"
+ 
+ #, c-format
+ msgid "E138: Can't write viminfo file %s!"
+-msgstr "E138: viminfo¥Õ¥¡¥€¥ë %s €òÊÝÂž€Ç€­€Þ€»€ó!"
++msgstr "E138: viminfoãã¡ã€ã« %s ãä¿å­ã§ããŸãã!"
+ 
+ #, c-format
+ msgid "Writing viminfo file \"%s\""
+-msgstr "viminfo¥Õ¥¡¥€¥ë \"%s\" €òœñ¹þ€ßÃæ"
++msgstr "viminfoãã¡ã€ã« \"%s\" ãæžèŸŒã¿äž­"
+ 
+ #. Write the info:
+ #, c-format
+ msgid "# This viminfo file was generated by Vim %s.\n"
+-msgstr "# €³€Î viminfo ¥Õ¥¡¥€¥ë€Ï Vim %s €Ë€è€Ã€ÆÀžÀ®€µ€ì€Þ€·€¿.\n"
++msgstr "# ãã® viminfo ãã¡ã€ã«ã¯ Vim %s ã«ãã£ãŠçæãããŸãã.\n"
+ 
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+ msgstr ""
+-"# ÊÑ¹¹€¹€ëºÝ€Ë€ÏœœÊ¬Ãí°Õ€·€Æ€¯€À€µ€€!\n"
++"# å€æŽããéã«ã¯ååæ³šæããŠãã ãã!\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+-msgstr "# €³€Î¥Õ¥¡¥€¥ë€¬œñ€«€ì€¿»þ€Î 'encoding' €ÎÃÍ\n"
++msgstr "# ãã®ãã¡ã€ã«ãæžãããæã® 'encoding' ã®å€\n"
+ 
+ msgid "Illegal starting char"
+-msgstr "ÉÔÀµ€ÊÀèÆ¬Êž»ú€Ç€¹"
++msgstr "äžæ­£ãªå
+é ­æå­ã§ã"
+ 
+ msgid "Save As"
+-msgstr "ÊÌÌŸ€ÇÊÝÂž"
++msgstr "å¥åã§ä¿å­"
+ 
+ msgid "Write partial file?"
+-msgstr "¥Õ¥¡¥€¥ë€òÉôÊ¬Åª€ËÊÝÂž€·€Þ€¹€«?"
++msgstr "ãã¡ã€ã«ãéšåçã«ä¿å­ããŸãã?"
+ 
+ msgid "E140: Use ! to write partial buffer"
+-msgstr "E140: ¥Ð¥Ã¥Õ¥¡€òÉôÊ¬Åª€ËÊÝÂž€¹€ë€Ë€Ï ! €ò»È€Ã€Æ€¯€À€µ€€"
++msgstr "E140: ãããã¡ãéšåçã«ä¿å­ããã«ã¯ ! ãäœ¿ã£ãŠãã ãã"
+ 
+ #, c-format
+ msgid "Overwrite existing file \"%s\"?"
+-msgstr "ŽûÂž€Î¥Õ¥¡¥€¥ë \"%s\" €òŸåœñ€­€·€Þ€¹€«?"
++msgstr "æ¢å­ã®ãã¡ã€ã« \"%s\" ãäžæžãããŸãã?"
+ 
+ #, c-format
+ msgid "Swap file \"%s\" exists, overwrite anyway?"
+-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \"%s\" €¬Âžºß€·€Þ€¹. Ÿåœñ€­€ò¶¯À©€·€Þ€¹€«?"
++msgstr "ã¹ã¯ãããã¡ã€ã« \"%s\" ãå­åšããŸã. äžæžããåŒ·å¶ããŸãã?"
+ 
+ #, c-format
+ msgid "E768: Swap file exists: %s (:silent! overrides)"
+-msgstr "E768: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Âžºß€·€Þ€¹: %s (:silent! €òÄÉ²Ã€ÇŸåœñ)"
++msgstr "E768: ã¹ã¯ãããã¡ã€ã«ãå­åšããŸã: %s (:silent! ãè¿œå ã§äžæž)"
+ 
+ #, c-format
+ msgid "E141: No file name for buffer %ld"
+-msgstr "E141: ¥Ð¥Ã¥Õ¥¡ %ld €Ë€ÏÌŸÁ°€¬€¢€ê€Þ€»€ó"
++msgstr "E141: ãããã¡ %ld ã«ã¯ååããããŸãã"
+ 
+ msgid "E142: File not written: Writing is disabled by 'write' option"
+-msgstr "E142: ¥Õ¥¡¥€¥ë€ÏÊÝÂž€µ€ì€Þ€»€ó€Ç€·€¿: 'write' ¥ª¥×¥·¥ç¥ó€Ë€è€êÌµžú€Ç€¹"
++msgstr "E142: ãã¡ã€ã«ã¯ä¿å­ãããŸããã§ãã: 'write' ãªãã·ã§ã³ã«ããç¡å¹ã§ã"
+ 
+ #, c-format
+ msgid ""
+ "'readonly' option is set for \"%s\".\n"
+ "Do you wish to write anyway?"
+ msgstr ""
+-"\"%s\" €Ë€Ï 'readonly' ¥ª¥×¥·¥ç¥ó€¬ÀßÄê€µ€ì€Æ€€€Þ€¹.\n"
+-"Ÿåœñ€­¶¯À©€ò€·€Þ€¹€«?"
++"\"%s\" ã«ã¯ 'readonly' ãªãã·ã§ã³ãèš­å®ãããŠããŸã.\n"
++"äžæžãåŒ·å¶ãããŸãã?"
+ 
+ #, c-format
+ msgid ""
+@@ -836,615 +938,633 @@
+ "It may still be possible to write it.\n"
+ "Do you wish to try?"
+ msgstr ""
+-"¥Õ¥¡¥€¥ë \"%s\" €Î¥Ñ¡Œ¥ß¥Ã¥·¥ç¥ó€¬ÆÉ¹þÀìÍÑ€Ç€¹.\n"
+-"€œ€ì€Ç€â¶²€é€¯œñ€­¹þ€à€³€È€Ï²ÄÇœ€Ç€¹.\n"
+-"·ÑÂ³€·€Þ€¹€«?"
++"ãã¡ã€ã« \"%s\" ã®ããŒããã·ã§ã³ãèª­èŸŒå°çšã§ã.\n"
++"ããã§ãæããæžãèŸŒãããšã¯å¯èœã§ã.\n"
++"ç¶ç¶ããŸãã?"
+ 
+ #, c-format
+ msgid "E505: \"%s\" is read-only (add ! to override)"
+-msgstr "E505: \"%s\" €ÏÆÉ¹þÀìÍÑ€Ç€¹ (¶¯À©œñ¹þ€Ë€Ï ! €òÄÉ²Ã)"
++msgstr "E505: \"%s\" ã¯èª­èŸŒå°çšã§ã (åŒ·å¶æžèŸŒã«ã¯ ! ãè¿œå )"
+ 
+ msgid "Edit File"
+-msgstr "¥Õ¥¡¥€¥ë€òÊÔœž"
++msgstr "ãã¡ã€ã«ãç·šé"
+ 
+ #, c-format
+ msgid "E143: Autocommands unexpectedly deleted new buffer %s"
+-msgstr "E143: autocommand€¬ÍœŽü€»€º¿·€·€€¥Ð¥Ã¥Õ¥¡ %s €òºïœü€·€Þ€·€¿"
++msgstr "E143: autocommandãäºæããæ°ãããããã¡ %s ãåé€ããŸãã"
+ 
+ msgid "E144: non-numeric argument to :z"
+-msgstr "E144: ¿ô€Ç€Ï€Ê€€°ú¿ô€¬ :z €ËÅÏ€µ€ì€Þ€·€¿"
++msgstr "E144: æ°ã§ã¯ãªãåŒæ°ã :z ã«æž¡ãããŸãã"
+ 
+ msgid "E145: Shell commands not allowed in rvim"
+-msgstr "E145: rvim€Ç€Ï¥·¥§¥ë¥³¥Þ¥ó¥É€ò»È€š€Þ€»€ó"
++msgstr "E145: rvimã§ã¯ã·ã§ã«ã³ãã³ããäœ¿ããŸãã"
+ 
+ msgid "E146: Regular expressions can't be delimited by letters"
+-msgstr "E146: Àµµ¬Éœžœ€ÏÊž»ú€Ç¶èÀÚ€ë€³€È€¬€Ç€­€Þ€»€ó"
++msgstr "E146: æ­£èŠè¡šçŸã¯æå­ã§åºåãããšãã§ããŸãã"
+ 
+ #, c-format
+ msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
+-msgstr "%s €ËÃÖŽ¹€·€Þ€¹€«? (y/n/a/q/l/^E/^Y)"
++msgstr "%s ã«çœ®æããŸãã? (y/n/a/q/l/^E/^Y)"
+ 
+ msgid "(Interrupted) "
+-msgstr "(³ä¹þ€Þ€ì€Þ€·€¿)"
++msgstr "(å²èŸŒãŸããŸãã) "
+ 
+ msgid "1 match"
+-msgstr "1 ²Õœê³ºÅö€·€Þ€·€¿"
++msgstr "1 ç®æè©²åœããŸãã"
+ 
+ msgid "1 substitution"
+-msgstr "1 ²ÕœêÃÖŽ¹€·€Þ€·€¿"
++msgstr "1 ç®æçœ®æããŸãã"
+ 
+ #, c-format
+ msgid "%ld matches"
+-msgstr "%ld ²Õœê³ºÅö€·€Þ€·€¿"
++msgstr "%ld ç®æè©²åœããŸãã"
+ 
+ #, c-format
+ msgid "%ld substitutions"
+-msgstr "%ld ²ÕœêÃÖŽ¹€·€Þ€·€¿"
++msgstr "%ld ç®æçœ®æããŸãã"
+ 
+ msgid " on 1 line"
+-msgstr " (·× 1 ¹ÔÆâ)"
++msgstr " (èš 1 è¡å
+)"
+ 
+ #, c-format
+ msgid " on %ld lines"
+-msgstr " (·× %ld ¹ÔÆâ)"
++msgstr " (èš %ld è¡å
+)"
+ 
+ msgid "E147: Cannot do :global recursive"
+-msgstr "E147: :global €òºÆµ¢Åª€Ë€Ï»È€š€Þ€»€ó"
++msgstr "E147: :global ãååž°çã«ã¯äœ¿ããŸãã"
+ 
+ msgid "E148: Regular expression missing from global"
+-msgstr "E148: global¥³¥Þ¥ó¥É€ËÀµµ¬Éœžœ€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E148: globalã³ãã³ãã«æ­£èŠè¡šçŸãæå®ãããŠããŸãã"
+ 
+ #, c-format
+ msgid "Pattern found in every line: %s"
+-msgstr "¥Ñ¥¿¡Œ¥ó€¬ÁŽ€Æ€Î¹Ô€Ç€ß€Ä€«€ê€Þ€·€¿: %s"
++msgstr "ãã¿ãŒã³ãå
+šãŠã®è¡ã§èŠã€ãããŸãã: %s"
+ 
+ #, c-format
++msgid "Pattern not found: %s"
++msgstr "ãã¿ãŒã³ã¯èŠã€ãããŸããã§ãã: %s"
++
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+ "$"
+ msgstr ""
+ "\n"
+-"# ºÇžå€ËÃÖŽ¹€µ€ì€¿Êž»úÎó:\n"
++"# æåŸã«çœ®æãããæå­å:\n"
+ "$"
+ 
+ msgid "E478: Don't panic!"
+-msgstr "E478: ¹²€Æ€Ê€€€Ç€¯€À€µ€€"
++msgstr "E478: æ
+ãŠãªãã§ãã ãã"
+ 
+ #, c-format
+ msgid "E661: Sorry, no '%s' help for %s"
+-msgstr "E661: »ÄÇ°€Ç€¹€¬ '%s' €Î¥Ø¥ë¥×€¬ %s €Ë€Ï€¢€ê€Þ€»€ó"
++msgstr "E661: æ®å¿µã§ãã '%s' ã®ãã«ãã %s ã«ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E149: Sorry, no help for %s"
+-msgstr "E149: »ÄÇ°€Ç€¹€¬ %s €Ë€Ï¥Ø¥ë¥×€¬€¢€ê€Þ€»€ó"
++msgstr "E149: æ®å¿µã§ãã %s ã«ã¯ãã«ãããããŸãã"
+ 
+ #, c-format
+ msgid "Sorry, help file \"%s\" not found"
+-msgstr "»ÄÇ°€Ç€¹€¬¥Ø¥ë¥×¥Õ¥¡¥€¥ë \"%s\" €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "æ®å¿µã§ãããã«ããã¡ã€ã« \"%s\" ãèŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E150: Not a directory: %s"
+-msgstr "E150: ¥Ç¥£¥ì¥¯¥È¥ê€Ç€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E150: ãã£ã¬ã¯ããªã§ã¯ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E152: Cannot open %s for writing"
+-msgstr "E152: œñ¹þ€ßÍÑ€Ë %s €ò³«€±€Þ€»€ó"
++msgstr "E152: æžèŸŒã¿çšã« %s ãéããŸãã"
+ 
+ #, c-format
+ msgid "E153: Unable to open %s for reading"
+-msgstr "E153: ÆÉ¹þÍÑ€Ë %s €ò³«€±€Þ€»€ó"
++msgstr "E153: èª­èŸŒçšã« %s ãéããŸãã"
+ 
+ # Added at 29-Apr-2004.
+ #, c-format
+ msgid "E670: Mix of help file encodings within a language: %s"
+-msgstr "E670: 1€Ä€ÎžÀžì€Î¥Ø¥ë¥×¥Õ¥¡¥€¥ë€ËÊ£¿ô€Î¥š¥ó¥³¡Œ¥É€¬º®ºß€·€Æ€€€Þ€¹: %s"
++msgstr "E670: 1ã€ã®èšèªã®ãã«ããã¡ã€ã«ã«è€æ°ã®ãšã³ã³ãŒããæ··åšããŠããŸã: %s"
+ 
+ #, c-format
+ msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+-msgstr "E154: ¥¿¥° \"%s\" €¬¥Õ¥¡¥€¥ë %s/%s €ËœÅÊ£€·€Æ€€€Þ€¹"
++msgstr "E154: ã¿ã° \"%s\" ããã¡ã€ã« %s/%s ã«éè€ããŠããŸã"
+ 
+ #, c-format
+ msgid "E160: Unknown sign command: %s"
+-msgstr "E160: Ì€ÃÎ€Îsign¥³¥Þ¥ó¥É€Ç€¹: %s"
++msgstr "E160: æªç¥ã®signã³ãã³ãã§ã: %s"
+ 
+ msgid "E156: Missing sign name"
+-msgstr "E156: signÌŸ€¬€¢€ê€Þ€»€ó"
++msgstr "E156: signåããããŸãã"
+ 
+ msgid "E612: Too many signs defined"
+-msgstr "E612: sign€ÎÄêµÁ€¬Â¿¿ôž«€Ä€«€ê€Þ€·€¿"
++msgstr "E612: signã®å®çŸ©ãå€æ°èŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E239: Invalid sign text: %s"
+-msgstr "E239: Ìµžú€Êsign€Î¥Æ¥­¥¹¥È€Ç€¹: %s"
++msgstr "E239: ç¡å¹ãªsignã®ãã­ã¹ãã§ã: %s"
+ 
+ #, c-format
+ msgid "E155: Unknown sign: %s"
+-msgstr "E155: Ì€ÃÎ€Îsign€Ç€¹: %s"
++msgstr "E155: æªç¥ã®signã§ã: %s"
+ 
+ msgid "E159: Missing sign number"
+-msgstr "E159: sign€ÎÈÖ¹æ€¬€¢€ê€Þ€»€ó"
++msgstr "E159: signã®çªå·ããããŸãã"
+ 
+ #, c-format
+ msgid "E158: Invalid buffer name: %s"
+-msgstr "E158: Ìµžú€Ê¥Ð¥Ã¥Õ¥¡ÌŸ€Ç€¹: %s"
++msgstr "E158: ç¡å¹ãªãããã¡åã§ã: %s"
+ 
+ #, c-format
+ msgid "E157: Invalid sign ID: %ld"
+-msgstr "E157: Ìµžú€ÊsignŒ±ÊÌ»Ò€Ç€¹: %ld"
++msgstr "E157: ç¡å¹ãªsignè­å¥å­ã§ã: %ld"
+ 
+ # Added at 27-Jan-2004.
+ msgid " (NOT FOUND)"
+-msgstr "  (€ß€Ä€«€ê€Þ€»€ó)"
++msgstr "  (èŠã€ãããŸãã)"
+ 
+ msgid " (not supported)"
+-msgstr " (Èó¥µ¥Ý¡Œ¥È)"
++msgstr " (éãµããŒã)"
+ 
+ msgid "[Deleted]"
+-msgstr "[ºïœüºÑ]"
++msgstr "[åé€æž]"
+ 
+ msgid "Entering Debug mode.  Type \"cont\" to continue."
+-msgstr "¥Ç¥Ð¥Ã¥°¥â¡Œ¥É€ËÆþ€ê€Þ€¹. Â³€±€ë€Ë€Ï \"cont\" €ÈÆþÎÏ€·€Æ€¯€À€µ€€."
++msgstr "ãããã°ã¢ãŒãã«å
+¥ããŸã. ç¶ããã«ã¯ \"cont\" ãšå
+¥åããŠãã ãã."
+ 
+ #, c-format
+ msgid "line %ld: %s"
+-msgstr "¹Ô %ld: %s"
++msgstr "è¡ %ld: %s"
+ 
+ #, c-format
+ msgid "cmd: %s"
+-msgstr "¥³¥Þ¥ó¥É: %s"
++msgstr "ã³ãã³ã: %s"
+ 
+ #, c-format
+ msgid "Breakpoint in \"%s%s\" line %ld"
+-msgstr "¥Ö¥ì¡Œ¥¯¥Ý¥€¥ó¥È \"%s%s\" ¹Ô %ld"
++msgstr "ãã¬ãŒã¯ãã€ã³ã \"%s%s\" è¡ %ld"
+ 
+ #, c-format
+ msgid "E161: Breakpoint not found: %s"
+-msgstr "E161: ¥Ö¥ì¡Œ¥¯¥Ý¥€¥ó¥È€¬€ß€Ä€«€ê€Þ€»€ó: %s"
++msgstr "E161: ãã¬ãŒã¯ãã€ã³ããèŠã€ãããŸãã: %s"
+ 
+ msgid "No breakpoints defined"
+-msgstr "¥Ö¥ì¡Œ¥¯¥Ý¥€¥ó¥È€¬ÄêµÁ€µ€ì€Æ€€€Þ€»€ó"
++msgstr "ãã¬ãŒã¯ãã€ã³ããå®çŸ©ãããŠããŸãã"
+ 
+ #, c-format
+ msgid "%3d  %s %s  line %ld"
+-msgstr "%3d  %s %s  ¹Ô %ld"
++msgstr "%3d  %s %s  è¡ %ld"
+ 
+-msgid "E750: First use :profile start <fname>"
+-msgstr "E750: œé€á€Ë :profile start <fname> €òŒÂ¹Ô€·€Æ€¯€À€µ€€"
++msgid "E750: First use \":profile start {fname}\""
++msgstr "E750: åãã« \":profile start {fname}\" ãå®è¡ããŠãã ãã"
+ 
+ #, c-format
+ msgid "Save changes to \"%s\"?"
+-msgstr "ÊÑ¹¹€ò \"%s\" €ËÊÝÂž€·€Þ€¹€«?"
++msgstr "å€æŽã \"%s\" ã«ä¿å­ããŸãã?"
+ 
+ msgid "Untitled"
+-msgstr "ÌµÂê"
++msgstr "ç¡é¡"
+ 
+ #, c-format
+ msgid "E162: No write since last change for buffer \"%s\""
+-msgstr "E162: ¥Ð¥Ã¥Õ¥¡ \"%s\" €ÎÊÑ¹¹€ÏÊÝÂž€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E162: ãããã¡ \"%s\" ã®å€æŽã¯ä¿å­ãããŠããŸãã"
+ 
+ msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
+-msgstr "·Ù¹ð: ÍœŽü€»€ºÂŸ¥Ð¥Ã¥Õ¥¡€Ø°ÜÆ°€·€Þ€·€¿ (autocommands €òÄŽ€Ù€Æ€¯€À€µ€€)"
++msgstr "è­Šå: äºæããä»ãããã¡ãžç§»åããŸãã (autocommands ãèª¿ã¹ãŠãã ãã)"
+ 
+ msgid "E163: There is only one file to edit"
+-msgstr "E163: ÊÔœž€¹€ë¥Õ¥¡¥€¥ë€Ï1€Ä€·€«€¢€ê€Þ€»€ó"
++msgstr "E163: ç·šéãããã¡ã€ã«ã¯1ã€ãããããŸãã"
+ 
+ msgid "E164: Cannot go before first file"
+-msgstr "E164: ºÇœé€Î¥Õ¥¡¥€¥ë€è€êÁ°€Ë€Ï¹Ô€±€Þ€»€ó"
++msgstr "E164: æåã®ãã¡ã€ã«ããåã«ã¯è¡ããŸãã"
+ 
+ msgid "E165: Cannot go beyond last file"
+-msgstr "E165: ºÇžå€Î¥Õ¥¡¥€¥ë€ò±Û€š€Æžå€Ë€Ï¹Ô€±€Þ€»€ó"
++msgstr "E165: æåŸã®ãã¡ã€ã«ãè¶ããŠåŸã«ã¯è¡ããŸãã"
+ 
+ #, c-format
+ msgid "E666: compiler not supported: %s"
+-msgstr "E666: €œ€Î¥³¥ó¥Ñ¥€¥é€Ë€ÏÂÐ±þ€·€Æ€€€Þ€»€ó: %s"
++msgstr "E666: ãã®ã³ã³ãã€ã©ã«ã¯å¯Ÿå¿ããŠããŸãã: %s"
+ 
+ #, c-format
+ msgid "Searching for \"%s\" in \"%s\""
+-msgstr "\"%s\" €ò \"%s\" €«€éž¡º÷Ãæ"
++msgstr "\"%s\" ã \"%s\" ããæ€çŽ¢äž­"
+ 
+ #, c-format
+ msgid "Searching for \"%s\""
+-msgstr "\"%s\" €òž¡º÷Ãæ"
++msgstr "\"%s\" ãæ€çŽ¢äž­"
+ 
+ #, c-format
+ msgid "not found in 'runtimepath': \"%s\""
+-msgstr "'runtimepath' €ÎÃæ€Ë€Ï€ß€Ä€«€ê€Þ€»€ó: \"%s\""
++msgstr "'runtimepath' ã®äž­ã«ã¯èŠã€ãããŸãã: \"%s\""
+ 
+ msgid "Source Vim script"
+-msgstr "Vim¥¹¥¯¥ê¥×¥È€ÎŒè¹þ€ß"
++msgstr "Vimã¹ã¯ãªããã®åèŸŒã¿"
+ 
+ #, c-format
+ msgid "Cannot source a directory: \"%s\""
+-msgstr "¥Ç¥£¥ì¥¯¥È¥ê€ÏŒè¹þ€á€Þ€»€ó: \"%s\""
++msgstr "ãã£ã¬ã¯ããªã¯åèŸŒããŸãã: \"%s\""
+ 
+ #, c-format
+ msgid "could not source \"%s\""
+-msgstr "\"%s\" €òŒè¹þ€á€Þ€»€ó"
++msgstr "\"%s\" ãåèŸŒããŸãã"
+ 
+ #, c-format
+ msgid "line %ld: could not source \"%s\""
+-msgstr "¹Ô %ld: \"%s\" €òŒè¹þ€á€Þ€»€ó"
++msgstr "è¡ %ld: \"%s\" ãåèŸŒããŸãã"
+ 
+ #, c-format
+ msgid "sourcing \"%s\""
+-msgstr "\"%s\" €òŒè¹þÃæ"
++msgstr "\"%s\" ãåèŸŒäž­"
+ 
+ #, c-format
+ msgid "line %ld: sourcing \"%s\""
+-msgstr "¹Ô %ld: %s €òŒè¹þÃæ"
++msgstr "è¡ %ld: %s ãåèŸŒäž­"
+ 
+ #, c-format
+ msgid "finished sourcing %s"
+-msgstr "%s €ÎŒè¹þ€òŽ°Î»"
++msgstr "%s ã®åèŸŒãå®äº"
+ 
+ msgid "modeline"
+-msgstr "¥â¡Œ¥É¹Ô"
++msgstr "ã¢ãŒãè¡"
+ 
+ msgid "--cmd argument"
+-msgstr "--cmd °ú¿ô"
++msgstr "--cmd åŒæ°"
+ 
+ msgid "-c argument"
+-msgstr "-c °ú¿ô"
++msgstr "-c åŒæ°"
+ 
+ msgid "environment variable"
+-msgstr "ŽÄ¶­ÊÑ¿ô"
++msgstr "ç°å¢å€æ°"
+ 
+ msgid "error handler"
+-msgstr "¥š¥é¡Œ¥Ï¥ó¥É¥é"
++msgstr "ãšã©ãŒãã³ãã©"
+ 
+ msgid "W15: Warning: Wrong line separator, ^M may be missing"
+-msgstr "W15: ·Ù¹ð: ¹Ô¶èÀÚ€¬ÉÔÀµ€Ç€¹. ^M €¬€Ê€€€Î€Ç€·€ç€Š"
++msgstr "W15: è­Šå: è¡åºåãäžæ­£ã§ã. ^M ããªãã®ã§ããã"
+ 
+ msgid "E167: :scriptencoding used outside of a sourced file"
+-msgstr "E167: :scriptencoding €¬Œè¹þ¥¹¥¯¥ê¥×¥È°Ê³°€Ç»ÈÍÑ€µ€ì€Þ€·€¿"
++msgstr "E167: :scriptencoding ãåèŸŒã¹ã¯ãªããä»¥å€ã§äœ¿çšãããŸãã"
+ 
+ msgid "E168: :finish used outside of a sourced file"
+-msgstr "E168: :finish €¬Œè¹þ¥¹¥¯¥ê¥×¥È°Ê³°€Ç»ÈÍÑ€µ€ì€Þ€·€¿"
++msgstr "E168: :finish ãåèŸŒã¹ã¯ãªããä»¥å€ã§äœ¿çšãããŸãã"
+ 
+ #, c-format
+ msgid "Current %slanguage: \"%s\""
+-msgstr "žœºß€Î %sžÀžì: \"%s\""
++msgstr "çŸåšã® %sèšèª: \"%s\""
+ 
+ #, c-format
+ msgid "E197: Cannot set language to \"%s\""
+-msgstr "E197: žÀžì€ò \"%s\" €ËÀßÄê€Ç€­€Þ€»€ó"
++msgstr "E197: èšèªã \"%s\" ã«èš­å®ã§ããŸãã"
+ 
+ msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+-msgstr "Ex¥â¡Œ¥É€ËÆþ€ê€Þ€¹. ¥Î¡Œ¥Þ¥ë€ËÌá€ë€Ë€Ï\"visual\"€ÈÆþÎÏ€·€Æ€¯€À€µ€€."
++msgstr "Exã¢ãŒãã«å
+¥ããŸã. ããŒãã«ã«æ»ãã«ã¯\"visual\"ãšå
+¥åããŠãã ãã."
+ 
+ msgid "E501: At end-of-file"
+-msgstr "E501: ¥Õ¥¡¥€¥ë€ÎœªÎ»°ÌÃÖ"
++msgstr "E501: ãã¡ã€ã«ã®çµäºäœçœ®"
+ 
+ msgid "E169: Command too recursive"
+-msgstr "E169: ¥³¥Þ¥ó¥É€¬ºÆµ¢Åª²á€®€Þ€¹"
++msgstr "E169: ã³ãã³ããååž°çéããŸã"
+ 
+ #, c-format
+ msgid "E605: Exception not caught: %s"
+-msgstr "E605: Îã³°€¬ÊáÂª€µ€ì€Þ€»€ó€Ç€·€¿: %s"
++msgstr "E605: äŸå€ãææãããŸããã§ãã: %s"
+ 
+ msgid "End of sourced file"
+-msgstr "Œè¹þ¥Õ¥¡¥€¥ë€ÎºÇžå€Ç€¹"
++msgstr "åèŸŒãã¡ã€ã«ã®æåŸã§ã"
+ 
+ msgid "End of function"
+-msgstr "ŽØ¿ô€ÎºÇžå€Ç€¹"
++msgstr "é¢æ°ã®æåŸã§ã"
+ 
+ msgid "E464: Ambiguous use of user-defined command"
+-msgstr "E464: ¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€Î€¢€€€Þ€€€Ê»ÈÍÑ€Ç€¹"
++msgstr "E464: ãŠãŒã¶å®çŸ©ã³ãã³ãã®ãããŸããªäœ¿çšã§ã"
+ 
+ msgid "E492: Not an editor command"
+-msgstr "E492: ¥š¥Ç¥£¥¿€Î¥³¥Þ¥ó¥É€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E492: ãšãã£ã¿ã®ã³ãã³ãã§ã¯ãããŸãã"
+ 
+ msgid "E493: Backwards range given"
+-msgstr "E493: µÕ€µ€Þ€ÎÈÏ°Ï€¬»ØÄê€µ€ì€Þ€·€¿"
++msgstr "E493: éããŸã®ç¯å²ãæå®ãããŸãã"
+ 
+ msgid "Backwards range given, OK to swap"
+-msgstr "µÕ€µ€Þ€ÎÈÏ°Ï€¬»ØÄê€µ€ì€Þ€·€¿, ÆþÂØ€š€Þ€¹€«?"
++msgstr "éããŸã®ç¯å²ãæå®ãããŸãã, å
+¥æ¿ããŸãã?"
+ 
+ msgid "E494: Use w or w>>"
+-msgstr "E494: w €â€·€¯€Ï w>> €ò»ÈÍÑ€·€Æ€¯€À€µ€€"
++msgstr "E494: w ãããã¯ w>> ãäœ¿çšããŠãã ãã"
+ 
+ msgid "E319: Sorry, the command is not available in this version"
+-msgstr "E319: €³€Î¥Ð¡Œ¥ž¥ç¥ó€Ç€Ï€³€Î¥³¥Þ¥ó¥É€ÏÍøÍÑ€Ç€­€Þ€»€ó, €Ž€á€ó€Ê€µ€€"
++msgstr "E319: ãã®ããŒãžã§ã³ã§ã¯ãã®ã³ãã³ãã¯å©çšã§ããŸãã, ããããªãã"
+ 
+ msgid "E172: Only one file name allowed"
+-msgstr "E172: ¥Õ¥¡¥€¥ëÌŸ€Ï 1 €Ä€Ë€·€Æ€¯€À€µ€€"
++msgstr "E172: ãã¡ã€ã«åã¯ 1 ã€ã«ããŠãã ãã"
+ 
+ msgid "1 more file to edit.  Quit anyway?"
+-msgstr "ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬ 1 žÄ€¢€ê€Þ€¹€¬, œªÎ»€·€Þ€¹€«?"
++msgstr "ç·šéãã¹ããã¡ã€ã«ã 1 åãããŸãã, çµäºããŸãã?"
+ 
+ #, c-format
+ msgid "%d more files to edit.  Quit anyway?"
+-msgstr "ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬€¢€È %d žÄ€¢€ê€Þ€¹€¬, œªÎ»€·€Þ€¹€«?"
++msgstr "ç·šéãã¹ããã¡ã€ã«ãããš %d åãããŸãã, çµäºããŸãã?"
+ 
+ msgid "E173: 1 more file to edit"
+-msgstr "E173: ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬ 1 žÄ€¢€ê€Þ€¹"
++msgstr "E173: ç·šéãã¹ããã¡ã€ã«ã 1 åãããŸã"
+ 
+ #, c-format
+ msgid "E173: %ld more files to edit"
+-msgstr "E173: ÊÔœž€¹€Ù€­¥Õ¥¡¥€¥ë€¬€¢€È %ld žÄ€¢€ê€Þ€¹"
++msgstr "E173: ç·šéãã¹ããã¡ã€ã«ãããš %ld åãããŸã"
+ 
+ msgid "E174: Command already exists: add ! to replace it"
+-msgstr "E174: ¥³¥Þ¥ó¥É€¬Žû€Ë€¢€ê€Þ€¹: ºÆÄêµÁ€¹€ë€Ë€Ï ! €òÄÉ²Ã€·€Æ€¯€À€µ€€"
++msgstr "E174: ã³ãã³ããæ¢ã«ãããŸã: åå®çŸ©ããã«ã¯ ! ãè¿œå ããŠãã ãã"
+ 
+ msgid ""
+ "\n"
+ "    Name        Args Range Complete  Definition"
+ msgstr ""
+ "\n"
+-"    ÌŸÁ°        °ú¿ô ÈÏ°Ï  ÊäŽ°      ÄêµÁ"
++"    åå        åŒæ° ç¯å²  è£å®      å®çŸ©"
+ 
+ msgid "No user-defined commands found"
+-msgstr "¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€¬ž«€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++msgstr "ãŠãŒã¶å®çŸ©ã³ãã³ããèŠã€ãããŸããã§ãã"
+ 
+ msgid "E175: No attribute specified"
+-msgstr "E175: Â°À­€ÏÄêµÁ€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E175: å±æ§ã¯å®çŸ©ãããŠããŸãã"
+ 
+ msgid "E176: Invalid number of arguments"
+-msgstr "E176: °ú¿ô€Î¿ô€¬Ìµžú€Ç€¹"
++msgstr "E176: åŒæ°ã®æ°ãç¡å¹ã§ã"
+ 
+ msgid "E177: Count cannot be specified twice"
+-msgstr "E177: ¥«¥Š¥ó¥È€ò2œÅ»ØÄê€¹€ë€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "E177: ã«ãŠã³ãã2éæå®ããããšã¯ã§ããŸãã"
+ 
+ msgid "E178: Invalid default value for count"
+-msgstr "E178: ¥«¥Š¥ó¥È€ÎŸÊÎ¬ÃÍ€¬Ìµžú€Ç€¹"
++msgstr "E178: ã«ãŠã³ãã®çç¥å€ãç¡å¹ã§ã"
+ 
+ msgid "E179: argument required for -complete"
+-msgstr "E179: -ÊäŽ°€Î€¿€á€Î°ú¿ô€¬É¬Í×€Ç€¹"
++msgstr "E179: -è£å®ã®ããã®åŒæ°ãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "E181: Invalid attribute: %s"
+-msgstr "E181: Ìµžú€ÊÂ°À­€Ç€¹: %s"
++msgstr "E181: ç¡å¹ãªå±æ§ã§ã: %s"
+ 
+ msgid "E182: Invalid command name"
+-msgstr "E182: Ìµžú€Ê¥³¥Þ¥ó¥ÉÌŸ€Ç€¹"
++msgstr "E182: ç¡å¹ãªã³ãã³ãåã§ã"
+ 
+ msgid "E183: User defined commands must start with an uppercase letter"
+-msgstr "E183: ¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€Ï±ÑÂçÊž»ú€Ç»Ï€Þ€é€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgstr "E183: ãŠãŒã¶å®çŸ©ã³ãã³ãã¯è±å€§æå­ã§å§ãŸããªããã°ãªããŸãã"
++
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: äºçŽåãªã®ã§, ãŠãŒã¶å®çŸ©ã³ãã³ãã«å©çšã§ããŸãã"
+ 
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+-msgstr "E184: €œ€Î¥æ¡Œ¥¶ÄêµÁ¥³¥Þ¥ó¥É€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E184: ãã®ãŠãŒã¶å®çŸ©ã³ãã³ãã¯ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E180: Invalid complete value: %s"
+-msgstr "E180: Ìµžú€ÊÊäŽ°»ØÄê€Ç€¹: %s"
++msgstr "E180: ç¡å¹ãªè£å®æå®ã§ã: %s"
+ 
+ msgid "E468: Completion argument only allowed for custom completion"
+-msgstr "E468: ÊäŽ°°ú¿ô€Ï¥«¥¹¥¿¥àÊäŽ°€Ç€·€«»ÈÍÑ€Ç€­€Þ€»€ó"
++msgstr "E468: è£å®åŒæ°ã¯ã«ã¹ã¿ã è£å®ã§ããäœ¿çšã§ããŸãã"
+ 
+ msgid "E467: Custom completion requires a function argument"
+-msgstr "E467: ¥«¥¹¥¿¥àÊäŽ°€Ë€Ï°ú¿ô€È€·€ÆŽØ¿ô€¬É¬Í×€Ç€¹"
++msgstr "E467: ã«ã¹ã¿ã è£å®ã«ã¯åŒæ°ãšããŠé¢æ°ãå¿
+èŠã§ã"
++
++msgid "unknown"
++msgstr "äžæ"
+ 
+ #, c-format
+-msgid "E185: Cannot find color scheme %s"
+-msgstr "E185: ¥«¥é¡Œ¥¹¥­¡Œ¥à %s €¬€ß€Ä€«€ê€Þ€»€ó"
++msgid "E185: Cannot find color scheme '%s'"
++msgstr "E185: ã«ã©ãŒã¹ã­ãŒã  '%s' ãèŠã€ãããŸãã"
+ 
+ msgid "Greetings, Vim user!"
+-msgstr "Vim »È€€€µ€ó¡¢€ä€¢!"
++msgstr "Vim äœ¿ãããããã!"
+ 
+ msgid "E784: Cannot close last tab page"
+-msgstr "E784: ºÇžå€Î¥¿¥Ö¥Ú¡Œ¥ž€òÊÄ€ž€ë€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "E784: æåŸã®ã¿ãããŒãžãéããããšã¯ã§ããŸãã"
+ 
+ msgid "Already only one tab page"
+-msgstr "Žû€Ë¥¿¥Ö¥Ú¡Œ¥ž€Ï1€Ä€·€«€¢€ê€Þ€»€ó"
++msgstr "æ¢ã«ã¿ãããŒãžã¯1ã€ãããããŸãã"
+ 
+ msgid "Edit File in new window"
+-msgstr "¿·€·€€¥Š¥£¥ó¥É¥Š€Ç¥Õ¥¡¥€¥ë€òÊÔœž€·€Þ€¹"
++msgstr "æ°ãããŠã£ã³ããŠã§ãã¡ã€ã«ãç·šéããŸã"
+ 
+ #, c-format
+ msgid "Tab page %d"
+-msgstr "¥¿¥Ö¥Ú¡Œ¥ž %d"
++msgstr "ã¿ãããŒãž %d"
+ 
+ msgid "No swap file"
+-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++msgstr "ã¹ã¯ãããã¡ã€ã«ããããŸãã"
+ 
+ msgid "Append File"
+-msgstr "ÄÉ²Ã¥Õ¥¡¥€¥ë"
++msgstr "è¿œå ãã¡ã€ã«"
+ 
+ msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
+ msgstr ""
+-"E747: ¥Ð¥Ã¥Õ¥¡€¬œ€Àµ€µ€ì€Æ€€€ë€Î€Ç, ¥Ç¥£¥ì¥¯¥È¥ê€òÊÑ¹¹€Ç€­€Þ€»€ó (! €òÄÉ²Ã€Ç"
+-"Ÿåœñ)"
++"E747: ãããã¡ãä¿®æ­£ãããŠããã®ã§, ãã£ã¬ã¯ããªãå€æŽã§ããŸãã (! ãè¿œå ã§"
++"äžæž)"
+ 
+ msgid "E186: No previous directory"
+-msgstr "E186: Á°€Î¥Ç¥£¥ì¥¯¥È¥ê€Ï€¢€ê€Þ€»€ó"
++msgstr "E186: åã®ãã£ã¬ã¯ããªã¯ãããŸãã"
+ 
+ msgid "E187: Unknown"
+-msgstr "E187: Ì€ÃÎ"
++msgstr "E187: æªç¥"
+ 
+ msgid "E465: :winsize requires two number arguments"
+-msgstr "E465: "
++msgstr "E465: :winsize ã«ã¯2ã€ã®æ°å€ã®åŒæ°ãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "Window position: X %d, Y %d"
+-msgstr "¥Š¥£¥ó¥É¥Š°ÌÃÖ: X %d, Y %d"
++msgstr "ãŠã£ã³ããŠäœçœ®: X %d, Y %d"
+ 
+ msgid "E188: Obtaining window position not implemented for this platform"
+ msgstr ""
+-"E188: €³€Î¥×¥é¥Ã¥È¥Û¡Œ¥à€Ë€Ï¥Š¥£¥ó¥É¥Š°ÌÃÖ€ÎŒèÆÀµ¡Çœ€ÏŒÂÁõ€µ€ì€Æ€€€Þ€»€ó"
++"E188: ãã®ãã©ããããŒã ã«ã¯ãŠã£ã³ããŠäœçœ®ã®ååŸæ©èœã¯å®è£
+ãããŠããŸãã"
+ 
+ msgid "E466: :winpos requires two number arguments"
+-msgstr "E466: :winpos €Ë€Ï2€Ä€Î¿ôÃÍ€Î°ú¿ô€¬É¬Í×€Ç€¹"
++msgstr "E466: :winpos ã«ã¯2ã€ã®æ°å€ã®åŒæ°ãå¿
+èŠã§ã"
+ 
+ msgid "Save Redirection"
+-msgstr "¥ê¥À¥€¥ì¥¯¥È€òÊÝÂž€·€Þ€¹"
++msgstr "ãªãã€ã¬ã¯ããä¿å­ããŸã"
+ 
+ msgid "Save View"
+-msgstr "¥Ó¥å¡Œ€òÊÝÂž€·€Þ€¹"
++msgstr "ãã¥ãŒãä¿å­ããŸã"
+ 
+ msgid "Save Session"
+-msgstr "¥»¥Ã¥·¥ç¥óŸðÊó€òÊÝÂž€·€Þ€¹"
++msgstr "ã»ãã·ã§ã³æ
+å ±ãä¿å­ããŸã"
+ 
+ msgid "Save Setup"
+-msgstr "ÀßÄê€òÊÝÂž€·€Þ€¹"
++msgstr "èš­å®ãä¿å­ããŸã"
+ 
+ #, c-format
+ msgid "E739: Cannot create directory: %s"
+-msgstr "E739: ¥Ç¥£¥ì¥¯¥È¥ê€òºîÀ®€Ç€­€Þ€»€ó: %s"
++msgstr "E739: ãã£ã¬ã¯ããªãäœæã§ããŸãã: %s"
+ 
+ #, c-format
+ msgid "E189: \"%s\" exists (add ! to override)"
+-msgstr "E189: \"%s\" €¬Âžºß€·€Þ€¹ (Ÿåœñ€¹€ë€Ë€Ï ! €òÄÉ²Ã€·€Æ€¯€À€µ€€)"
++msgstr "E189: \"%s\" ãå­åšããŸã (äžæžããã«ã¯ ! ãè¿œå ããŠãã ãã)"
+ 
+ #, c-format
+ msgid "E190: Cannot open \"%s\" for writing"
+-msgstr "E190: \"%s\" €òœñ¹þ€ßÍÑ€È€·€Æ³«€±€Þ€»€ó"
++msgstr "E190: \"%s\" ãæžèŸŒã¿çšãšããŠéããŸãã"
+ 
+ #. set mark
+ msgid "E191: Argument must be a letter or forward/backward quote"
+-msgstr "E191: °ú¿ô€ÏÊž»ú€«Á°¿Ê/žåÂà¥¯¥©¡Œ¥È€Ç€·€Ê€±€ì€Ð€€€±€Þ€»€ó"
++msgstr "E191: åŒæ°ã¯1æå­ã®è±å­ãåŒçšç¬Š (' ã `) ã§ãªããã°ãããŸãã"
+ 
+ msgid "E192: Recursive use of :normal too deep"
+-msgstr "E192: :normal €ÎºÆµ¢ÍøÍÑ€¬¿Œ€¯€Ê€ê²á€®€Þ€·€¿"
++msgstr "E192: :normal ã®ååž°å©çšãæ·±ããªãéããŸãã"
++
++msgid "E809: #< is not available without the +eval feature"
++msgstr "E809: #< ã¯ +eval æ©èœãç¡ããšå©çšã§ããŸãã"
+ 
+ msgid "E194: No alternate file name to substitute for '#'"
+-msgstr "E194: '#'€òÃÖ€­Ž¹€š€ëÉû¥Õ¥¡¥€¥ë€ÎÌŸÁ°€¬€¢€ê€Þ€»€ó"
++msgstr "E194: '#'ãçœ®ãæããå¯ãã¡ã€ã«ã®ååããããŸãã"
+ 
+ msgid "E495: no autocommand file name to substitute for \"<afile>\""
+-msgstr "E495: \"<afile>\"€òÃÖ€­Ž¹€š€ëautocommand€Î¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++msgstr "E495: \"<afile>\"ãçœ®ãæããautocommandã®ãã¡ã€ã«åããããŸãã"
+ 
+ msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+-msgstr "E496: \"<abuf>\"€òÃÖ€­Ž¹€š€ëautocommand¥Ð¥Ã¥Õ¥¡ÈÖ¹æ€¬€¢€ê€Þ€»€ó"
++msgstr "E496: \"<abuf>\"ãçœ®ãæããautocommandãããã¡çªå·ããããŸãã"
+ 
+ msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+-msgstr "E497: \"<amatch>\"€òÃÖ€­Ž¹€š€ëautocommand€Î³ºÅöÌŸ€¬€¢€ê€Þ€»€ó"
++msgstr "E497: \"<amatch>\"ãçœ®ãæããautocommandã®è©²åœåããããŸãã"
+ 
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+-msgstr "E498: \"<sfile>\"€òÃÖ€­Ž¹€š€ë :source ÂÐŸÝ¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++msgstr "E498: \"<sfile>\"ãçœ®ãæãã :source å¯Ÿè±¡ãã¡ã€ã«åããããŸãã"
++
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: \"<slnum>\"ãçœ®ãæããè¡çªå·ããããŸãã"
+ 
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+ msgstr ""
+-"E499: '%' €ä '#' €¬ÌµÌŸ¥Õ¥¡¥€¥ë€Ê€Î€Ç \":p:h\" €òÈŒ€ï€Ê€€»È€€Êý€Ï€Ç€­€Þ€»€ó"
++"E499: '%' ã '#' ãç¡åãã¡ã€ã«ãªã®ã§ \":p:h\" ãäŒŽããªãäœ¿ãæ¹ã¯ã§ããŸãã"
+ 
+ msgid "E500: Evaluates to an empty string"
+-msgstr "E500: ¶õÊž»úÎó€È€·€ÆÉŸ²Á€µ€ì€Þ€·€¿"
++msgstr "E500: ç©ºæå­åãšããŠè©äŸ¡ãããŸãã"
+ 
+ msgid "E195: Cannot open viminfo file for reading"
+-msgstr "E195: viminfo¥Õ¥¡¥€¥ë€òÆÉ¹þÍÑ€È€·€Æ³«€±€Þ€»€ó"
++msgstr "E195: viminfoãã¡ã€ã«ãèª­èŸŒçšãšããŠéããŸãã"
+ 
+ msgid "E196: No digraphs in this version"
+-msgstr "E196: €³€Î¥Ð¡Œ¥ž¥ç¥ó€Ë¹ç»ú€Ï€¢€ê€Þ€»€ó"
++msgstr "E196: ãã®ããŒãžã§ã³ã«åå­ã¯ãããŸãã"
+ 
+ msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
+-msgstr "E608: 'Vim' €Ç»Ï€Þ€ëÎã³°€Ï :throw €Ç€­€Þ€»€ó"
++msgstr "E608: 'Vim' ã§å§ãŸãäŸå€ã¯ :throw ã§ããŸãã"
+ 
+ #. always scroll up, don't overwrite
+ #, c-format
+ msgid "Exception thrown: %s"
+-msgstr "Îã³°€¬È¯Àž€·€Þ€·€¿: %s"
++msgstr "äŸå€ãçºçããŸãã: %s"
+ 
+ #, c-format
+ msgid "Exception finished: %s"
+-msgstr "Îã³°€¬ŒýÂ«€·€Þ€·€¿: %s"
++msgstr "äŸå€ãåæããŸãã: %s"
+ 
+ #, c-format
+ msgid "Exception discarded: %s"
+-msgstr "Îã³°€¬ÇËŽþ€µ€ì€Þ€·€¿: %s"
++msgstr "äŸå€ãç Žæ£ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "%s, line %ld"
+-msgstr "%s, ¹Ô %ld"
++msgstr "%s, è¡ %ld"
+ 
+ #. always scroll up, don't overwrite
+ #, c-format
+ msgid "Exception caught: %s"
+-msgstr "Îã³°€¬ÊáÂª€µ€ì€Þ€·€¿: %s"
++msgstr "äŸå€ãææãããŸãã: %s"
+ 
+ #, c-format
+ msgid "%s made pending"
+-msgstr "%s €Ë€è€êÌ€·èÄêŸõÂÖ€¬Àž€ž€Þ€·€¿"
++msgstr "%s ã«ããæªæ±ºå®ç¶æ
+ãçããŸãã"
+ 
+ #, c-format
+ msgid "%s resumed"
+-msgstr "%s €¬ºÆ³«€·€Þ€·€¿"
++msgstr "%s ãåéããŸãã"
+ 
+ #, c-format
+ msgid "%s discarded"
+-msgstr "%s €¬ÇËŽþ€µ€ì€Þ€·€¿"
++msgstr "%s ãç Žæ£ãããŸãã"
+ 
+ msgid "Exception"
+-msgstr "Îã³°"
++msgstr "äŸå€"
+ 
+ msgid "Error and interrupt"
+-msgstr "¥š¥é¡Œ€È³ä¹þ€ß"
++msgstr "ãšã©ãŒãšå²èŸŒã¿"
+ 
+ msgid "Error"
+-msgstr "¥š¥é¡Œ"
++msgstr "ãšã©ãŒ"
+ 
+ #. if (pending & CSTP_INTERRUPT)
+ msgid "Interrupt"
+-msgstr "³ä¹þ€ß"
++msgstr "å²èŸŒã¿"
+ 
+ msgid "E579: :if nesting too deep"
+-msgstr "E579: :if €ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E579: :if ã®å
+¥ãå­ãæ·±éããŸã"
+ 
+ msgid "E580: :endif without :if"
+-msgstr "E580: :if €Î€Ê€€ :endif €¬€¢€ê€Þ€¹"
++msgstr "E580: :if ã®ãªã :endif ããããŸã"
+ 
+ msgid "E581: :else without :if"
+-msgstr "E581: :if €Î€Ê€€ :else €¬€¢€ê€Þ€¹"
++msgstr "E581: :if ã®ãªã :else ããããŸã"
+ 
+ msgid "E582: :elseif without :if"
+-msgstr "E582: :if €Î€Ê€€ :elseif €¬€¢€ê€Þ€¹"
++msgstr "E582: :if ã®ãªã :elseif ããããŸã"
+ 
+ msgid "E583: multiple :else"
+-msgstr "E583: Ê£¿ô€Î :else €¬€¢€ê€Þ€¹"
++msgstr "E583: è€æ°ã® :else ããããŸã"
+ 
+ msgid "E584: :elseif after :else"
+-msgstr "E584: :else €Îžå€Ë :elseif €¬€¢€ê€Þ€¹"
++msgstr "E584: :else ã®åŸã« :elseif ããããŸã"
+ 
+ msgid "E585: :while/:for nesting too deep"
+-msgstr "E585: :while €ä :for €ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E585: :while ã :for ã®å
+¥ãå­ãæ·±éããŸã"
+ 
+ msgid "E586: :continue without :while or :for"
+-msgstr "E586: :while €ä :for €Î€Ê€€ :continue €¬€¢€ê€Þ€¹"
++msgstr "E586: :while ã :for ã®ãªã :continue ããããŸã"
+ 
+ msgid "E587: :break without :while or :for"
+-msgstr "E587: :while €ä :for €Î€Ê€€ :break €¬€¢€ê€Þ€¹"
++msgstr "E587: :while ã :for ã®ãªã :break ããããŸã"
+ 
+ msgid "E732: Using :endfor with :while"
+-msgstr "E732: :endfor €ò :while €ÈÁÈ€ß¹ç€ï€»€Æ€€€Þ€¹"
++msgstr "E732: :endfor ã :while ãšçµã¿åãããŠããŸã"
+ 
+ msgid "E733: Using :endwhile with :for"
+-msgstr "E733: :endwhile €ò :for €ÈÁÈ€ß¹ç€ï€»€Æ€€€Þ€¹"
++msgstr "E733: :endwhile ã :for ãšçµã¿åãããŠããŸã"
+ 
+ msgid "E601: :try nesting too deep"
+-msgstr "E601: :try €ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E601: :try ã®å
+¥ãå­ãæ·±éããŸã"
+ 
+ msgid "E603: :catch without :try"
+-msgstr "E603: :try €Î€Ê€€ :catch €¬€¢€ê€Þ€¹"
++msgstr "E603: :try ã®ãªã :catch ããããŸã"
+ 
+ #. Give up for a ":catch" after ":finally" and ignore it.
+ #. * Just parse.
+ msgid "E604: :catch after :finally"
+-msgstr "E604: :finally €Îžå€Ë :catch €¬€¢€ê€Þ€¹"
++msgstr "E604: :finally ã®åŸã« :catch ããããŸã"
+ 
+ msgid "E606: :finally without :try"
+-msgstr "E606: :try €Î€Ê€€ :finally €¬€¢€ê€Þ€¹"
++msgstr "E606: :try ã®ãªã :finally ããããŸã"
+ 
+ #. Give up for a multiple ":finally" and ignore it.
+ msgid "E607: multiple :finally"
+-msgstr "E607: Ê£¿ô€Î :finalyy €¬€¢€ê€Þ€¹"
++msgstr "E607: è€æ°ã® :finally ããããŸã"
+ 
+ msgid "E602: :endtry without :try"
+-msgstr "E602: :try €Î€Ê€€ :endtry €Ç€¹"
++msgstr "E602: :try ã®ãªã :endtry ã§ã"
+ 
+ msgid "E193: :endfunction not inside a function"
+-msgstr "E193: ŽØ¿ô€Î³°€Ë :endfunction €¬€¢€ê€Þ€·€¿"
++msgstr "E193: é¢æ°ã®å€ã« :endfunction ããããŸãã"
+ 
+ msgid "E788: Not allowed to edit another buffer now"
+-msgstr "E788: žœºß€ÏÂŸ€Î¥Ð¥Ã¥Õ¥¡€òÊÔœž€¹€ë€³€È€Ïµö€µ€ì€Þ€»€ó"
++msgstr "E788: çŸåšã¯ä»ã®ãããã¡ãç·šéããããšã¯èš±ãããŸãã"
++
++msgid "E811: Not allowed to change buffer information now"
++msgstr "E811: çŸåšã¯ãããã¡æ
+å ±ãå€æŽããããšã¯èš±ãããŸãã"
+ 
+ msgid "tagname"
+-msgstr "¥¿¥°ÌŸ"
++msgstr "ã¿ã°å"
+ 
+ msgid " kind file\n"
+-msgstr " ¥Õ¥¡¥€¥ëŒïÎà\n"
++msgstr " ãã¡ã€ã«çš®é¡\n"
+ 
+ msgid "'history' option is zero"
+-msgstr "¥ª¥×¥·¥ç¥ó 'history' €¬¥Œ¥í€Ç€¹"
++msgstr "ãªãã·ã§ã³ 'history' ããŒã­ã§ã"
+ 
+ #, c-format
+ msgid ""
+@@ -1452,361 +1572,384 @@
+ "# %s History (newest to oldest):\n"
+ msgstr ""
+ "\n"
+-"# %s ¹àÌÜ€ÎÍúÎò (¿·€·€€€â€Î€«€éžÅ€€€â€Î€Ø):\n"
++"# %s é 
+ç®ã®å±¥æ­Ž (æ°ãããã®ããå€ããã®ãž):\n"
+ 
+ msgid "Command Line"
+-msgstr "¥³¥Þ¥ó¥É¥é¥€¥ó"
++msgstr "ã³ãã³ãã©ã€ã³"
+ 
+ msgid "Search String"
+-msgstr "ž¡º÷Êž»úÎó"
++msgstr "æ€çŽ¢æå­å"
+ 
+ msgid "Expression"
+-msgstr "Œ°"
++msgstr "åŒ"
+ 
+ msgid "Input Line"
+-msgstr "ÆþÎÏ¹Ô"
++msgstr "å
+¥åè¡"
+ 
+ msgid "E198: cmd_pchar beyond the command length"
+-msgstr "E198: cmd_pchar €¬¥³¥Þ¥ó¥ÉÄ¹€òÄ¶€š€Þ€·€¿"
++msgstr "E198: cmd_pchar ãã³ãã³ãé·ãè¶
+ããŸãã"
+ 
+ msgid "E199: Active window or buffer deleted"
+-msgstr "E199: ¥¢¥¯¥Æ¥£¥Ö€Ê¥Š¥£¥ó¥É¥Š€«¥Ð¥Ã¥Õ¥¡€¬ºïœü€µ€ì€Þ€·€¿"
++msgstr "E199: ã¢ã¯ãã£ããªãŠã£ã³ããŠããããã¡ãåé€ãããŸãã"
++
++msgid "E812: Autocommands changed buffer or buffer name"
++msgstr "E812: autocommandããããã¡ããããã¡åãå€æŽããŸãã"
+ 
+ msgid "Illegal file name"
+-msgstr "ÉÔÀµ€Ê¥Õ¥¡¥€¥ëÌŸ"
++msgstr "äžæ­£ãªãã¡ã€ã«å"
+ 
+ msgid "is a directory"
+-msgstr " €Ï¥Ç¥£¥ì¥¯¥È¥ê€Ç€¹"
++msgstr " ã¯ãã£ã¬ã¯ããªã§ã"
+ 
+ msgid "is not a file"
+-msgstr " €Ï¥Õ¥¡¥€¥ë€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr " ã¯ãã¡ã€ã«ã§ã¯ãããŸãã"
+ 
+ msgid "is a device (disabled with 'opendevice' option)"
+-msgstr " €Ï¥Ç¥Ð¥€¥¹€Ç€¹ ('opendevice' ¥ª¥×¥·¥ç¥ó€Ç²óÈò€Ç€­€Þ€¹)"
++msgstr " ã¯ããã€ã¹ã§ã ('opendevice' ãªãã·ã§ã³ã§åé¿ã§ããŸã)"
+ 
+ msgid "[New File]"
+-msgstr "[¿·¥Õ¥¡¥€¥ë]"
++msgstr "[æ°ãã¡ã€ã«]"
+ 
+ msgid "[New DIRECTORY]"
+-msgstr "[¿·µ¬¥Ç¥£¥ì¥¯¥È¥ê]"
++msgstr "[æ°èŠãã£ã¬ã¯ããª]"
+ 
+ msgid "[File too big]"
+-msgstr "[¥Õ¥¡¥€¥ë²áÂç]"
++msgstr "[ãã¡ã€ã«éå€§]"
+ 
+ msgid "[Permission Denied]"
+-msgstr "[Ç§²Ä€¬€¢€ê€Þ€»€ó]"
++msgstr "[èªå¯ããããŸãã]"
+ 
+ msgid "E200: *ReadPre autocommands made the file unreadable"
+-msgstr "E200: *ReadPre autocommand €¬¥Õ¥¡¥€¥ë€òÆÉ¹þÉÔ²Ä€Ë€·€Þ€·€¿"
++msgstr "E200: *ReadPre autocommand ããã¡ã€ã«ãèª­èŸŒäžå¯ã«ããŸãã"
+ 
+ msgid "E201: *ReadPre autocommands must not change current buffer"
+-msgstr "E201: *ReadPre autocommand €Ïžœºß€Î¥Ð¥Ã¥Õ¥¡€òÊÑ€š€é€ì€Þ€»€ó"
++msgstr "E201: *ReadPre autocommand ã¯çŸåšã®ãããã¡ãå€ããããŸãã"
+ 
+ msgid "Vim: Reading from stdin...\n"
+-msgstr "Vim: ÉžœàÆþÎÏ€«€éÆÉ¹þÃæ...\n"
++msgstr "Vim: æšæºå
+¥åããèª­èŸŒäž­...\n"
+ 
+ msgid "Reading from stdin..."
+-msgstr "ÉžœàÆþÎÏ€«€éÆÉ¹þ€ßÃæ..."
++msgstr "æšæºå
+¥åããèª­èŸŒã¿äž­..."
+ 
+ #. Re-opening the original file failed!
+ msgid "E202: Conversion made file unreadable!"
+-msgstr "E202: ÊÑŽ¹€¬¥Õ¥¡¥€¥ë€òÆÉ¹þÉÔ²Ä€Ë€·€Þ€·€¿"
++msgstr "E202: å€æããã¡ã€ã«ãèª­èŸŒäžå¯ã«ããŸãã"
+ 
+ msgid "[fifo/socket]"
+-msgstr "[FIFO/¥œ¥±¥Ã¥È]"
++msgstr "[FIFO/ãœã±ãã]"
+ 
+ msgid "[fifo]"
+ msgstr "[FIFO]"
+ 
+ msgid "[socket]"
+-msgstr "[¥œ¥±¥Ã¥È]"
++msgstr "[ãœã±ãã]"
+ 
+ msgid "[character special]"
+-msgstr "[¥­¥ã¥é¥¯¥¿¡Š¥Ç¥Ð¥€¥¹]"
++msgstr "[ã­ã£ã©ã¯ã¿ã»ããã€ã¹]"
+ 
+ msgid "[RO]"
+-msgstr "[ÆÉÀì]"
++msgstr "[èª­å°]"
+ 
+ msgid "[CR missing]"
+-msgstr "[CRÌµ]"
+-
+-msgid "[NL found]"
+-msgstr "[NLÍ­]"
++msgstr "[CRç¡]"
+ 
+ msgid "[long lines split]"
+-msgstr "[Ä¹¹ÔÊ¬³ä]"
++msgstr "[é·è¡åå²]"
+ 
+ msgid "[NOT converted]"
+-msgstr "[Ì€ÊÑŽ¹]"
++msgstr "[æªå€æ]"
+ 
+ msgid "[converted]"
+-msgstr "[ÊÑŽ¹ºÑ]"
++msgstr "[å€ææž]"
++
++msgid "[blowfish]"
++msgstr "[blowfishæå·å]"
+ 
+ msgid "[crypted]"
+-msgstr "[°Å¹æ²œ]"
++msgstr "[æå·å]"
+ 
+ #, c-format
+ msgid "[CONVERSION ERROR in line %ld]"
+-msgstr "[%ld ¹ÔÌÜ€ÇÊÑŽ¹¥š¥é¡Œ]"
++msgstr "[%ld è¡ç®ã§å€æãšã©ãŒ]"
+ 
+ #, c-format
+ msgid "[ILLEGAL BYTE in line %ld]"
+-msgstr "[%ld ¹ÔÌÜ€ÎÉÔÀµ€Ê¥Ð¥€¥È]"
++msgstr "[%ld è¡ç®ã®äžæ­£ãªãã€ã]"
+ 
+ msgid "[READ ERRORS]"
+-msgstr "[ÆÉ¹þ¥š¥é¡Œ]"
++msgstr "[èª­èŸŒãšã©ãŒ]"
+ 
+ msgid "Can't find temp file for conversion"
+-msgstr "ÊÑŽ¹€ËÉ¬Í×€Ê°ì»þ¥Õ¥¡¥€¥ë€¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "å€æã«å¿
+èŠãªäžæãã¡ã€ã«ãèŠã€ãããŸãã"
+ 
+ msgid "Conversion with 'charconvert' failed"
+-msgstr "'charconvert' €Ë€è€ëÊÑŽ¹€¬ŒºÇÔ€·€Þ€·€¿"
++msgstr "'charconvert' ã«ããå€æãå€±æããŸãã"
+ 
+ msgid "can't read output of 'charconvert'"
+-msgstr "'charconvert' €ÎœÐÎÏ€òÆÉ¹þ€á€Þ€»€ó€Ç€·€¿"
++msgstr "'charconvert' ã®åºåãèª­èŸŒããŸããã§ãã"
++
++msgid "E821: File is encrypted with unknown method"
++msgstr "E821: ãã¡ã€ã«ãæªç¥ã®æ¹æ³ã§æå·åãããŠããŸã"
+ 
+ msgid "E676: No matching autocommands for acwrite buffer"
+-msgstr "E676: acwrite¥Ð¥Ã¥Õ¥¡€Î³ºÅö€¹€ëautocommand€ÏÂžºß€·€Þ€»€ó"
++msgstr "E676: acwriteãããã¡ã®è©²åœããautocommandã¯å­åšããŸãã"
+ 
+ msgid "E203: Autocommands deleted or unloaded buffer to be written"
+-msgstr "E203: ÊÝÂž€¹€ë¥Ð¥Ã¥Õ¥¡€òautocommand€¬ºïœü€«²òÊü€·€Þ€·€¿"
++msgstr "E203: ä¿å­ãããããã¡ãautocommandãåé€ãè§£æŸããŸãã"
+ 
+ msgid "E204: Autocommand changed number of lines in unexpected way"
+-msgstr "E204: autocommand€¬ÍœŽü€»€ÌÊýË¡€Ç¹Ô¿ô€òÊÑ¹¹€·€Þ€·€¿"
++msgstr "E204: autocommandãäºæãã¬æ¹æ³ã§è¡æ°ãå€æŽããŸãã"
+ 
+ # Added at 19-Jan-2004.
+ msgid "NetBeans disallows writes of unmodified buffers"
+-msgstr "NetBeans€ÏÌ€ÊÑ¹¹€Î¥Ð¥Ã¥Õ¥¡€òŸåœñ€¹€ë€³€È€Ïµö²Ä€·€Æ€€€Þ€»€ó"
++msgstr "NetBeansã¯æªå€æŽã®ãããã¡ãäžæžããããšã¯èš±å¯ããŠããŸãã"
+ 
+ msgid "Partial writes disallowed for NetBeans buffers"
+-msgstr "NetBeans¥Ð¥Ã¥Õ¥¡€Î°ìÉô€òœñ€­œÐ€¹€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "NetBeansãããã¡ã®äžéšãæžãåºãããšã¯ã§ããŸãã"
+ 
+ msgid "is not a file or writable device"
+-msgstr "€Ï¥Õ¥¡¥€¥ë€Ç€âœñ¹þ€ß²ÄÇœ¥Ç¥Ð¥€¥¹€Ç€â€¢€ê€Þ€»€ó"
++msgstr "ã¯ãã¡ã€ã«ã§ãæžèŸŒã¿å¯èœããã€ã¹ã§ããããŸãã"
+ 
+ msgid "writing to device disabled with 'opendevice' option"
+-msgstr "'opendevice' ¥ª¥×¥·¥ç¥ó€Ë€è€ê¥Ç¥Ð¥€¥¹€Ø€Îœñ€­¹þ€ß€Ï€Ç€­€Þ€»€ó"
++msgstr "'opendevice' ãªãã·ã§ã³ã«ããããã€ã¹ãžã®æžãèŸŒã¿ã¯ã§ããŸãã"
+ 
+ msgid "is read-only (add ! to override)"
+-msgstr "€ÏÆÉ¹þÀìÍÑ€Ç€¹ (¶¯À©œñ¹þ€Ë€Ï ! €òÄÉ²Ã)"
++msgstr "ã¯èª­èŸŒå°çšã§ã (åŒ·å¶æžèŸŒã«ã¯ ! ãè¿œå )"
+ 
+ msgid "E506: Can't write to backup file (add ! to override)"
+-msgstr "E506: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òÊÝÂž€Ç€­€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ÊÝÂž)"
++msgstr "E506: ããã¯ã¢ãããã¡ã€ã«ãä¿å­ã§ããŸãã (! ãè¿œå ã§åŒ·å¶ä¿å­)"
+ 
+ msgid "E507: Close error for backup file (add ! to override)"
+ msgstr ""
+-"E507: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òÊÄ€ž€ëºÝ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿ (! €òÄÉ²Ã€Ç¶¯À©)"
++"E507: ããã¯ã¢ãããã¡ã€ã«ãéããéã«ãšã©ãŒãçºçããŸãã (! ãè¿œå ã§åŒ·å¶)"
+ 
+ msgid "E508: Can't read file for backup (add ! to override)"
+-msgstr "E508: ¥Ð¥Ã¥¯¥¢¥Ã¥×ÍÑ¥Õ¥¡¥€¥ë€òÆÉ¹þ€á€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ÆÉ¹þ)"
++msgstr "E508: ããã¯ã¢ããçšãã¡ã€ã«ãèª­èŸŒããŸãã (! ãè¿œå ã§åŒ·å¶èª­èŸŒ)"
+ 
+ msgid "E509: Cannot create backup file (add ! to override)"
+-msgstr "E509: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òºî€ì€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ºîÀ®)"
++msgstr "E509: ããã¯ã¢ãããã¡ã€ã«ãäœããŸãã (! ãè¿œå ã§åŒ·å¶äœæ)"
+ 
+ msgid "E510: Can't make backup file (add ! to override)"
+-msgstr "E510: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òºî€ì€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©ºîÀ®)"
++msgstr "E510: ããã¯ã¢ãããã¡ã€ã«ãäœããŸãã (! ãè¿œå ã§åŒ·å¶äœæ)"
+ 
+ msgid "E460: The resource fork would be lost (add ! to override)"
+-msgstr "E460: ¥ê¥œ¡Œ¥¹¥Õ¥©¡Œ¥¯€¬Œº€ï€ì€ë€«€â€·€ì€Þ€»€ó (! €òÄÉ²Ã€Ç¶¯À©)"
++msgstr "E460: ãªãœãŒã¹ãã©ãŒã¯ãå€±ããããããããŸãã (! ãè¿œå ã§åŒ·å¶)"
+ 
+ msgid "E214: Can't find temp file for writing"
+-msgstr "E214: ÊÝÂžÍÑ°ì»þ¥Õ¥¡¥€¥ë€¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E214: ä¿å­çšäžæãã¡ã€ã«ãèŠã€ãããŸãã"
+ 
+ msgid "E213: Cannot convert (add ! to write without conversion)"
+-msgstr "E213: ÊÑŽ¹€Ç€­€Þ€»€ó (! €òÄÉ²Ã€ÇÊÑŽ¹€»€º€ËÊÝÂž)"
++msgstr "E213: å€æã§ããŸãã (! ãè¿œå ã§å€æããã«ä¿å­)"
+ 
+ msgid "E166: Can't open linked file for writing"
+-msgstr "E166: ¥ê¥ó¥¯€µ€ì€¿¥Õ¥¡¥€¥ë€Ëœñ¹þ€á€Þ€»€ó"
++msgstr "E166: ãªã³ã¯ããããã¡ã€ã«ã«æžèŸŒããŸãã"
+ 
+ msgid "E212: Can't open file for writing"
+-msgstr "E212: œñ¹þ€ßÍÑ€Ë¥Õ¥¡¥€¥ë€ò³«€±€Þ€»€ó"
++msgstr "E212: æžèŸŒã¿çšã«ãã¡ã€ã«ãéããŸãã"
+ 
+ msgid "E667: Fsync failed"
+-msgstr "E667: fsync €ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E667: fsync ã«å€±æããŸãã"
+ 
+ msgid "E512: Close failed"
+-msgstr "E512: ÊÄ€ž€ë€³€È€ËŒºÇÔ"
++msgstr "E512: éããããšã«å€±æ"
+ 
+ msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+-msgstr "E513: œñ¹þ€ß¥š¥é¡Œ, ÊÑŽ¹ŒºÇÔ (Ÿåœñ€¹€ë€Ë€Ï 'fenc' €ò¶õ€Ë€·€Æ€¯€À€µ€€)"
++msgstr "E513: æžèŸŒã¿ãšã©ãŒ, å€æå€±æ (äžæžããã«ã¯ 'fenc' ãç©ºã«ããŠãã ãã)"
++
++#, c-format
++msgid ""
++"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
++"override)"
++msgstr ""
++"E513: æžèŸŒã¿ãšã©ãŒ, å€æå€±æ, è¡æ° %ld (äžæžããã«ã¯ 'fenc' ãç©ºã«ããŠãã ã"
++"ã)"
+ 
+ msgid "E514: write error (file system full?)"
+-msgstr "E514: œñ¹þ€ß¥š¥é¡Œ, (¥Õ¥¡¥€¥ë¥·¥¹¥Æ¥à€¬ËþÇÕ?)"
++msgstr "E514: æžèŸŒã¿ãšã©ãŒ, (ãã¡ã€ã«ã·ã¹ãã ãæºæ¯?)"
+ 
+ msgid " CONVERSION ERROR"
+-msgstr " ÊÑŽ¹¥š¥é¡Œ"
++msgstr " å€æãšã©ãŒ"
++
++#, c-format
++msgid " in line %ld;"
++msgstr "è¡ %ld;"
+ 
+ msgid "[Device]"
+-msgstr "[¥Ç¥Ð¥€¥¹]"
++msgstr "[ããã€ã¹]"
+ 
+ msgid "[New]"
+-msgstr "[¿·]"
++msgstr "[æ°]"
+ 
+ msgid " [a]"
+ msgstr " [a]"
+ 
+ msgid " appended"
+-msgstr " ÄÉ²Ã"
++msgstr " è¿œå "
+ 
+ msgid " [w]"
+ msgstr " [w]"
+ 
+ msgid " written"
+-msgstr " œñ¹þ€ß"
++msgstr " æžèŸŒã¿"
+ 
+ msgid "E205: Patchmode: can't save original file"
+-msgstr "E205: patchmode: ž¶ËÜ¥Õ¥¡¥€¥ë€òÊÝÂž€Ç€­€Þ€»€ó"
++msgstr "E205: patchmode: åæ¬ãã¡ã€ã«ãä¿å­ã§ããŸãã"
+ 
+ msgid "E206: patchmode: can't touch empty original file"
+-msgstr "E206: patchmode: ¶õ€Îž¶ËÜ¥Õ¥¡¥€¥ë€òtouch€Ç€­€Þ€»€ó"
++msgstr "E206: patchmode: ç©ºã®åæ¬ãã¡ã€ã«ãtouchã§ããŸãã"
+ 
+ msgid "E207: Can't delete backup file"
+-msgstr "E207: ¥Ð¥Ã¥¯¥¢¥Ã¥×¥Õ¥¡¥€¥ë€òŸÃ€»€Þ€»€ó"
++msgstr "E207: ããã¯ã¢ãããã¡ã€ã«ãæ¶ããŸãã"
+ 
+ msgid ""
+ "\n"
+ "WARNING: Original file may be lost or damaged\n"
+ msgstr ""
+ "\n"
+-"·Ù¹ð: ž¶ËÜ¥Õ¥¡¥€¥ë€¬Œº€ï€ì€¿€«ÊÑ¹¹€µ€ì€Þ€·€¿\n"
++"è­Šå: åæ¬ãã¡ã€ã«ãå€±ããããå€æŽãããŸãã\n"
+ 
+ msgid "don't quit the editor until the file is successfully written!"
+-msgstr "¥Õ¥¡¥€¥ë€ÎÊÝÂž€ËÀ®žù€¹€ë€Þ€Ç¥š¥Ç¥£¥¿€òœªÎ»€·€Ê€€€Ç€¯€À€µ€€!"
++msgstr "ãã¡ã€ã«ã®ä¿å­ã«æåãããŸã§ãšãã£ã¿ãçµäºããªãã§ãã ãã!"
+ 
+ msgid "[dos]"
+ msgstr "[dos]"
+ 
+ msgid "[dos format]"
+-msgstr "[dos¥Õ¥©¡Œ¥Þ¥Ã¥È]"
++msgstr "[dosãã©ãŒããã]"
+ 
+ msgid "[mac]"
+ msgstr "[mac]"
+ 
+ msgid "[mac format]"
+-msgstr "[mac¥Õ¥©¡Œ¥Þ¥Ã¥È]"
++msgstr "[macãã©ãŒããã]"
+ 
+ msgid "[unix]"
+ msgstr "[unix]"
+ 
+ msgid "[unix format]"
+-msgstr "[unix¥Õ¥©¡Œ¥Þ¥Ã¥È]"
++msgstr "[unixãã©ãŒããã]"
+ 
+ msgid "1 line, "
+-msgstr "1 ¹Ô, "
++msgstr "1 è¡, "
+ 
+ #, c-format
+ msgid "%ld lines, "
+-msgstr "%ld ¹Ô, "
++msgstr "%ld è¡, "
+ 
+ msgid "1 character"
+-msgstr "1 Êž»ú"
++msgstr "1 æå­"
++
++#, c-format
++msgid "%lld characters"
++msgstr "%lld æå­"
+ 
++#. Explicit typecast avoids warning on Mac OS X 10.6
+ #, c-format
+ msgid "%ld characters"
+-msgstr "%ld Êž»ú"
++msgstr "%ld æå­"
+ 
+ msgid "[noeol]"
+ msgstr "[noeol]"
+ 
+ msgid "[Incomplete last line]"
+-msgstr "[ºÇœª¹Ô€¬ÉÔŽ°ÁŽ]"
++msgstr "[æçµè¡ãäžå®å
+š]"
+ 
+ #. don't overwrite messages here
+ #. must give this prompt
+ #. don't use emsg() here, don't want to flush the buffers
+ msgid "WARNING: The file has been changed since reading it!!!"
+-msgstr "·Ù¹ð: ÆÉ¹þ€ó€Àžå€Ë¥Õ¥¡¥€¥ë€ËÊÑ¹¹€¬€¢€ê€Þ€·€¿!!!"
++msgstr "è­Šå: èª­èŸŒãã åŸã«ãã¡ã€ã«ã«å€æŽããããŸãã!!!"
+ 
+ msgid "Do you really want to write to it"
+-msgstr "ËÜÅö€ËŸåœñ€­€·€Þ€¹€«"
++msgstr "æ¬åœã«äžæžãããŸãã"
+ 
+ #, c-format
+ msgid "E208: Error writing to \"%s\""
+-msgstr "E208: \"%s\" €òœñ¹þ€ßÃæ€Î¥š¥é¡Œ€Ç€¹"
++msgstr "E208: \"%s\" ãæžèŸŒã¿äž­ã®ãšã©ãŒã§ã"
+ 
+ #, c-format
+ msgid "E209: Error closing \"%s\""
+-msgstr "E209: \"%s\" €òÊÄ€ž€ë»þ€Ë¥š¥é¡Œ€Ç€¹"
++msgstr "E209: \"%s\" ãéããæã«ãšã©ãŒã§ã"
+ 
+ #, c-format
+ msgid "E210: Error reading \"%s\""
+-msgstr "E210: \"%s\" €òÆÉ¹þÃæ€Î¥š¥é¡Œ€Ç€¹"
++msgstr "E210: \"%s\" ãèª­èŸŒäž­ã®ãšã©ãŒã§ã"
+ 
+ msgid "E246: FileChangedShell autocommand deleted buffer"
+-msgstr "E246: autocommand €Î FileChangedShell €¬¥Ð¥Ã¥Õ¥¡€òºïœü€·€Þ€·€¿"
++msgstr "E246: autocommand ã® FileChangedShell ããããã¡ãåé€ããŸãã"
+ 
+ #, c-format
+ msgid "E211: File \"%s\" no longer available"
+-msgstr "E211: ¥Õ¥¡¥€¥ë \"%s\" €ÏŽû€ËÂžºß€·€Þ€»€ó"
++msgstr "E211: ãã¡ã€ã« \"%s\" ã¯æ¢ã«å­åšããŸãã"
+ 
+ #, c-format
+ msgid ""
+ "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
+ "well"
+-msgstr "W12: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €¬ÊÑ¹¹€µ€ìVim€Î¥Ð¥Ã¥Õ¥¡€âÊÑ¹¹€µ€ì€Þ€·€¿"
++msgstr "W12: è­Šå: ãã¡ã€ã« \"%s\" ãå€æŽããVimã®ãããã¡ãå€æŽãããŸãã"
+ 
+ msgid "See \":help W12\" for more info."
+-msgstr "ŸÜºÙ€Ï \":help W12\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++msgstr "è©³çŽ°ã¯ \":help W12\" ãåç
+§ããŠãã ãã"
+ 
+ #, c-format
+ msgid "W11: Warning: File \"%s\" has changed since editing started"
+-msgstr "W11: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €ÏÊÔœž³«»Ïžå€ËÊÑ¹¹€µ€ì€Þ€·€¿"
++msgstr "W11: è­Šå: ãã¡ã€ã« \"%s\" ã¯ç·šééå§åŸã«å€æŽãããŸãã"
+ 
+ msgid "See \":help W11\" for more info."
+-msgstr "ŸÜºÙ€Ï \":help W11\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++msgstr "è©³çŽ°ã¯ \":help W11\" ãåç
+§ããŠãã ãã"
+ 
+ #, c-format
+ msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
+-msgstr "W16: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €Î¥â¡Œ¥É€¬ÊÔœž³«»Ïžå€ËÊÑ¹¹€µ€ì€Þ€·€¿"
++msgstr "W16: è­Šå: ãã¡ã€ã« \"%s\" ã®ã¢ãŒããç·šééå§åŸã«å€æŽãããŸãã"
+ 
+ msgid "See \":help W16\" for more info."
+-msgstr "ŸÜºÙ€Ï \":help W16\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++msgstr "è©³çŽ°ã¯ \":help W16\" ãåç
+§ããŠãã ãã"
+ 
+ #, c-format
+ msgid "W13: Warning: File \"%s\" has been created after editing started"
+-msgstr "W13: ·Ù¹ð: ¥Õ¥¡¥€¥ë \"%s\" €ÏÊÔœž³«»Ïžå€ËºîÀ®€µ€ì€Þ€·€¿"
++msgstr "W13: è­Šå: ãã¡ã€ã« \"%s\" ã¯ç·šééå§åŸã«äœæãããŸãã"
+ 
+ msgid "Warning"
+-msgstr "·Ù¹ð"
++msgstr "è­Šå"
+ 
+ msgid ""
+ "&OK\n"
+ "&Load File"
+ msgstr ""
+ "&OK\n"
+-"¥Õ¥¡¥€¥ëÆÉ¹þ(&L)"
++"ãã¡ã€ã«èª­èŸŒ(&L)"
+ 
+ #, c-format
+ msgid "E462: Could not prepare for reloading \"%s\""
+-msgstr "E462: \"%s\" €ò¥ê¥í¡Œ¥É€¹€ëœàÈ÷€¬€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "E462: \"%s\" ããªã­ãŒãããæºåãã§ããŸããã§ãã"
+ 
+ #, c-format
+ msgid "E321: Could not reload \"%s\""
+-msgstr "E321: \"%s\" €Ï¥ê¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "E321: \"%s\" ã¯ãªã­ãŒãã§ããŸããã§ãã"
+ 
+ msgid "--Deleted--"
+-msgstr "--ºïœüºÑ--"
++msgstr "--åé€æž--"
+ 
+ #, c-format
+ msgid "auto-removing autocommand: %s <buffer=%d>"
+-msgstr "autocommand: %s <¥Ð¥Ã¥Õ¥¡=%d> €¬Œ«Æ°Åª€Ëºïœü€µ€ì€Þ€¹"
++msgstr "autocommand: %s <ãããã¡=%d> ãèªåçã«åé€ãããŸã"
+ 
+ #. the group doesn't exist
+ #, c-format
+ msgid "E367: No such group: \"%s\""
+-msgstr "E367: €œ€Î¥°¥ë¡Œ¥×€Ï€¢€ê€Þ€»€ó: \"%s\""
++msgstr "E367: ãã®ã°ã«ãŒãã¯ãããŸãã: \"%s\""
+ 
+ #, c-format
+ msgid "E215: Illegal character after *: %s"
+-msgstr "E215: * €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿: %s"
++msgstr "E215: * ã®åŸã«äžæ­£ãªæå­ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E216: No such event: %s"
+-msgstr "E216: €œ€Î€è€Š€Ê¥€¥Ù¥ó¥È€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E216: ãã®ãããªã€ãã³ãã¯ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E216: No such group or event: %s"
+-msgstr "E216: €œ€Î€è€Š€Ê¥°¥ë¡Œ¥×€â€·€¯€Ï¥€¥Ù¥ó¥È€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E216: ãã®ãããªã°ã«ãŒããããã¯ã€ãã³ãã¯ãããŸãã: %s"
+ 
+ #. Highlight title
+ msgid ""
+@@ -1818,16 +1961,16 @@
+ 
+ #, c-format
+ msgid "E680: <buffer=%d>: invalid buffer number "
+-msgstr "E680: <¥Ð¥Ã¥Õ¥¡=%d>: Ìµžú€Ê¥Ð¥Ã¥Õ¥¡ÈÖ¹æ€Ç€¹"
++msgstr "E680: <ãããã¡=%d>: ç¡å¹ãªãããã¡çªå·ã§ã "
+ 
+ msgid "E217: Can't execute autocommands for ALL events"
+-msgstr "E217: ÁŽ€Æ€Î¥€¥Ù¥ó¥È€ËÂÐ€·€Æ€Îautocommand€ÏŒÂ¹Ô€Ç€­€Þ€»€ó"
++msgstr "E217: å
+šãŠã®ã€ãã³ãã«å¯ŸããŠã®autocommandã¯å®è¡ã§ããŸãã"
+ 
+ msgid "No matching autocommands"
+-msgstr "³ºÅö€¹€ëautocommand€ÏÂžºß€·€Þ€»€ó"
++msgstr "è©²åœããautocommandã¯å­åšããŸãã"
+ 
+ msgid "E218: autocommand nesting too deep"
+-msgstr "E218: autocommand€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E218: autocommandã®å
+¥ãå­ãæ·±éããŸã"
+ 
+ #, c-format
+ msgid "%s Auto commands for \"%s\""
+@@ -1835,984 +1978,985 @@
+ 
+ #, c-format
+ msgid "Executing %s"
+-msgstr "%s €òŒÂ¹Ô€·€Æ€€€Þ€¹"
++msgstr "%s ãå®è¡ããŠããŸã"
+ 
+ #, c-format
+ msgid "autocommand %s"
+ msgstr "autocommand %s"
+ 
+ msgid "E219: Missing {."
+-msgstr "E219: { €¬€¢€ê€Þ€»€ó."
++msgstr "E219: { ããããŸãã."
+ 
+ msgid "E220: Missing }."
+-msgstr "E220: } €¬€¢€ê€Þ€»€ó."
++msgstr "E220: } ããããŸãã."
+ 
+ msgid "E490: No fold found"
+-msgstr "E490: ÀÞŸö€ß€¬€¢€ê€Þ€»€ó"
++msgstr "E490: æç³ã¿ããããŸãã"
+ 
+ msgid "E350: Cannot create fold with current 'foldmethod'"
+-msgstr "E350: žœºß€Î 'foldmethod' €Ç€ÏÀÞŸö€ß€òºîÀ®€Ç€­€Þ€»€ó"
++msgstr "E350: çŸåšã® 'foldmethod' ã§ã¯æç³ã¿ãäœæã§ããŸãã"
+ 
+ msgid "E351: Cannot delete fold with current 'foldmethod'"
+-msgstr "E351: žœºß€Î 'foldmethod' €Ç€ÏÀÞŸö€ß€òºïœü€Ç€­€Þ€»€ó"
++msgstr "E351: çŸåšã® 'foldmethod' ã§ã¯æç³ã¿ãåé€ã§ããŸãã"
+ 
+ #, c-format
+ msgid "+--%3ld lines folded "
+-msgstr "+--%3ld ¹Ô€¬ÀÞŸö€Þ€ì€Þ€·€¿"
++msgstr "+--%3ld è¡ãæç³ãŸããŸãã "
+ 
+ msgid "E222: Add to read buffer"
+-msgstr "E222: ÆÉ¹þ¥Ð¥Ã¥Õ¥¡€ØÄÉ²Ã"
++msgstr "E222: èª­èŸŒãããã¡ãžè¿œå "
+ 
+ msgid "E223: recursive mapping"
+-msgstr "E223: ºÆµ¢Åª¥Þ¥Ã¥Ô¥ó¥°"
++msgstr "E223: ååž°çãããã³ã°"
+ 
+ #, c-format
+ msgid "E224: global abbreviation already exists for %s"
+-msgstr "E224: %s €È€€€Š¥°¥í¡Œ¥Ð¥ëÃ»œÌÆþÎÏ€ÏŽû€ËÂžºß€·€Þ€¹"
++msgstr "E224: %s ãšããã°ã­ãŒãã«ç­çž®å
+¥åã¯æ¢ã«å­åšããŸã"
+ 
+ #, c-format
+ msgid "E225: global mapping already exists for %s"
+-msgstr "E225: %s €È€€€Š¥°¥í¡Œ¥Ð¥ë¥Þ¥Ã¥Ô¥ó¥°€ÏŽû€ËÂžºß€·€Þ€¹"
++msgstr "E225: %s ãšããã°ã­ãŒãã«ãããã³ã°ã¯æ¢ã«å­åšããŸã"
+ 
+ #, c-format
+ msgid "E226: abbreviation already exists for %s"
+-msgstr "E226: %s €È€€€ŠÃ»œÌÆþÎÏ€ÏŽû€ËÂžºß€·€Þ€¹"
++msgstr "E226: %s ãšããç­çž®å
+¥åã¯æ¢ã«å­åšããŸã"
+ 
+ #, c-format
+ msgid "E227: mapping already exists for %s"
+-msgstr "E227: %s €È€€€Š¥Þ¥Ã¥Ô¥ó¥°€ÏŽû€ËÂžºß€·€Þ€¹"
++msgstr "E227: %s ãšãããããã³ã°ã¯æ¢ã«å­åšããŸã"
+ 
+ msgid "No abbreviation found"
+-msgstr "Ã»œÌÆþÎÏ€Ï€ß€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++msgstr "ç­çž®å
+¥åã¯èŠã€ãããŸããã§ãã"
+ 
+ msgid "No mapping found"
+-msgstr "¥Þ¥Ã¥Ô¥ó¥°€Ï€ß€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++msgstr "ãããã³ã°ã¯èŠã€ãããŸããã§ãã"
+ 
+ msgid "E228: makemap: Illegal mode"
+-msgstr "E228: makemap: ÉÔÀµ€Ê¥â¡Œ¥É"
++msgstr "E228: makemap: äžæ­£ãªã¢ãŒã"
++
++msgid "E851: Failed to create a new process for the GUI"
++msgstr "E851: GUIçšã®ãã­ã»ã¹ã®èµ·åã«å€±æããŸãã"
++
++msgid "E852: The child process failed to start the GUI"
++msgstr "E852: å­ãã­ã»ã¹ãGUIã®èµ·åã«å€±æããŸãã"
+ 
+ msgid "E229: Cannot start the GUI"
+-msgstr "E229: GUI€ò³«»Ï€Ç€­€Þ€»€ó"
++msgstr "E229: GUIãéå§ã§ããŸãã"
+ 
+ #, c-format
+ msgid "E230: Cannot read from \"%s\""
+-msgstr "E230: \"%s\"€«€éÆÉ¹þ€à€³€È€¬€Ç€­€Þ€»€ó"
++msgstr "E230: \"%s\"ããèª­èŸŒãããšãã§ããŸãã"
+ 
+ msgid "E665: Cannot start GUI, no valid font found"
+-msgstr "E665: Í­žú€Ê¥Õ¥©¥ó¥È€¬ž«€Ä€«€é€Ê€€€Î€Ç, GUI€ò³«»Ï€Ç€­€Þ€»€ó"
++msgstr "E665: æå¹ãªãã©ã³ããèŠã€ãããªãã®ã§, GUIãéå§ã§ããŸãã"
+ 
+ msgid "E231: 'guifontwide' invalid"
+-msgstr "E231: 'guifontwide' €¬Ìµžú€Ç€¹"
++msgstr "E231: 'guifontwide' ãç¡å¹ã§ã"
+ 
+ msgid "E599: Value of 'imactivatekey' is invalid"
+-msgstr "E599: 'imactivatekey' €ËÀßÄê€µ€ì€¿ÃÍ€¬Ìµžú€Ç€¹"
++msgstr "E599: 'imactivatekey' ã«èš­å®ãããå€ãç¡å¹ã§ã"
+ 
+ #, c-format
+ msgid "E254: Cannot allocate color %s"
+-msgstr "E254: %s €Î¿§€ò³ä€êÅö€Æ€é€ì€Þ€»€ó"
++msgstr "E254: %s ã®è²ãå²ãåœãŠãããŸãã"
+ 
+ msgid "No match at cursor, finding next"
+-msgstr "¥«¡Œ¥œ¥ë€Î°ÌÃÖ€Ë¥Þ¥Ã¥Á€Ï€¢€ê€Þ€»€ó, Œ¡€òž¡º÷€·€Æ€€€Þ€¹"
++msgstr "ã«ãŒãœã«ã®äœçœ®ã«ãããã¯ãããŸãã, æ¬¡ãæ€çŽ¢ããŠããŸã"
+ 
+ msgid "<cannot open> "
+-msgstr "<³«€±€Þ€»€ó>"
++msgstr "<éããŸãã> "
+ 
+ #, c-format
+ msgid "E616: vim_SelFile: can't get font %s"
+-msgstr "E616: vim_SelFile: ¥Õ¥©¥ó¥È %s €òŒèÆÀ€Ç€­€Þ€»€ó"
++msgstr "E616: vim_SelFile: ãã©ã³ã %s ãååŸã§ããŸãã"
+ 
+ msgid "E614: vim_SelFile: can't return to current directory"
+-msgstr "E614: vim_SelFile: žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê€ËÌá€ì€Þ€»€ó"
++msgstr "E614: vim_SelFile: çŸåšã®ãã£ã¬ã¯ããªã«æ»ããŸãã"
+ 
+ msgid "Pathname:"
+-msgstr "¥Ñ¥¹ÌŸ:"
++msgstr "ãã¹å:"
+ 
+ msgid "E615: vim_SelFile: can't get current directory"
+-msgstr "E615: vim_SelFile: žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê€òŒèÆÀ€Ç€­€Þ€»€ó"
++msgstr "E615: vim_SelFile: çŸåšã®ãã£ã¬ã¯ããªãååŸã§ããŸãã"
+ 
+ msgid "OK"
+ msgstr "OK"
+ 
+ msgid "Cancel"
+-msgstr "¥­¥ã¥ó¥»¥ë"
++msgstr "ã­ã£ã³ã»ã«"
+ 
+ msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
+-msgstr "¥¹¥¯¥í¡Œ¥ë¥Ð¡Œ: ²èÁü€òŒèÆÀ€Ç€­€Þ€»€ó€Ç€·€¿."
++msgstr "ã¹ã¯ã­ãŒã«ããŒ: ç»åãååŸã§ããŸããã§ãã."
+ 
+ msgid "Vim dialog"
+-msgstr "Vim ¥À¥€¥¢¥í¥°"
++msgstr "Vim ãã€ã¢ã­ã°"
+ 
+ msgid "E232: Cannot create BalloonEval with both message and callback"
+-msgstr "E232: ¥á¥Ã¥»¡Œ¥ž€È¥³¡Œ¥ë¥Ð¥Ã¥¯€Î€¢€ë BalloonEval €òºîÀ®€Ç€­€Þ€»€ó"
+-
+-msgid "Vim dialog..."
+-msgstr "Vim ¥À¥€¥¢¥í¥°..."
++msgstr "E232: ã¡ãã»ãŒãžãšã³ãŒã«ããã¯ã®ãã BalloonEval ãäœæã§ããŸãã"
+ 
+ msgid ""
+ "&Yes\n"
+ "&No\n"
+ "&Cancel"
+ msgstr ""
+-"€Ï€€(&Y)\n"
+-"€€€€€š(&N)\n"
+-"¥­¥ã¥ó¥»¥ë(&C)"
++"ã¯ã(&Y)\n"
++"ããã(&N)\n"
++"ã­ã£ã³ã»ã«(&C)"
+ 
+ msgid "Input _Methods"
+-msgstr "¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É"
++msgstr "ã€ã³ãããã¡ãœãã"
+ 
+ msgid "VIM - Search and Replace..."
+-msgstr "VIM - ž¡º÷€ÈÃÖŽ¹..."
++msgstr "VIM - æ€çŽ¢ãšçœ®æ..."
+ 
+ msgid "VIM - Search..."
+-msgstr "VIM - ž¡º÷..."
++msgstr "VIM - æ€çŽ¢..."
+ 
+ msgid "Find what:"
+-msgstr "ž¡º÷Êž»úÎó:"
++msgstr "æ€çŽ¢æå­å:"
+ 
+ msgid "Replace with:"
+-msgstr "ÃÖŽ¹Êž»úÎó:"
++msgstr "çœ®ææå­å:"
+ 
+ #. whole word only button
+ msgid "Match whole word only"
+-msgstr "Àµ³Î€Ë³ºÅö€¹€ë€â€Î€À€±"
++msgstr "æ­£ç¢ºã«è©²åœãããã®ã ã"
+ 
+ #. match case button
+ msgid "Match case"
+-msgstr "ÂçÊž»ú/Ÿ®Êž»ú€ò¶èÊÌ€¹€ë"
++msgstr "å€§æå­/å°æå­ãåºå¥ãã"
+ 
+ msgid "Direction"
+-msgstr "Êýžþ"
++msgstr "æ¹å"
+ 
+ #. 'Up' and 'Down' buttons
+ msgid "Up"
+-msgstr "Ÿå"
++msgstr "äž"
+ 
+ msgid "Down"
+-msgstr "²Œ"
++msgstr "äž"
+ 
++#. 'Find Next' button
+ msgid "Find Next"
+-msgstr "Œ¡€òž¡º÷"
++msgstr "æ¬¡ãæ€çŽ¢"
+ 
++#. 'Replace' button
+ msgid "Replace"
+-msgstr "ÃÖŽ¹"
++msgstr "çœ®æ"
+ 
++#. 'Replace All' button
+ msgid "Replace All"
+-msgstr "ÁŽ€ÆÃÖŽ¹"
++msgstr "å
+šãŠçœ®æ"
+ 
+ msgid "Vim: Received \"die\" request from session manager\n"
+-msgstr "Vim: ¥»¥Ã¥·¥ç¥ó¥Þ¥Í¡Œ¥ž¥ã€«€é \"die\" Í×µá€òŒõ€±Œè€ê€Þ€·€¿\n"
++msgstr "Vim: ã»ãã·ã§ã³ãããŒãžã£ãã \"die\" èŠæ±ãåãåããŸãã\n"
+ 
+ msgid "Close"
+-msgstr "ÊÄ€ž€ë"
++msgstr "éãã"
+ 
+ msgid "New tab"
+-msgstr "¿·µ¬¥¿¥Ö¥Ú¡Œ¥ž"
++msgstr "æ°èŠã¿ãããŒãž"
+ 
+ msgid "Open Tab..."
+-msgstr "¥¿¥Ö¥Ú¡Œ¥ž€ò³«€¯..."
++msgstr "ã¿ãããŒãžãéã..."
+ 
+ msgid "Vim: Main window unexpectedly destroyed\n"
+-msgstr "Vim: ¥á¥€¥ó¥Š¥£¥ó¥É¥Š€¬ÉÔ°Õ€ËÇË²õ€µ€ì€Þ€·€¿\n"
+-
+-msgid "Font Selection"
+-msgstr "¥Õ¥©¥ó¥ÈÁªÂò"
+-
+-msgid "Used CUT_BUFFER0 instead of empty selection"
+-msgstr "¶õ€ÎÁªÂòÎÎ°è€Î€«€ï€ê€ËCUT_BUFFER0€¬»ÈÍÑ€µ€ì€Þ€·€¿"
++msgstr "Vim: ã¡ã€ã³ãŠã£ã³ããŠãäžæã«ç Žå£ãããŸãã\n"
+ 
+ msgid "&Filter"
+-msgstr "¥Õ¥£¥ë¥¿(&F)"
++msgstr "ãã£ã«ã¿(&F)"
+ 
+ msgid "&Cancel"
+-msgstr "¥­¥ã¥ó¥»¥ë(&C)"
++msgstr "ã­ã£ã³ã»ã«(&C)"
+ 
+ msgid "Directories"
+-msgstr "¥Ç¥£¥ì¥¯¥È¥ê"
++msgstr "ãã£ã¬ã¯ããª"
+ 
+ msgid "Filter"
+-msgstr "¥Õ¥£¥ë¥¿"
++msgstr "ãã£ã«ã¿"
+ 
+ msgid "&Help"
+-msgstr "¥Ø¥ë¥×(&H)"
++msgstr "ãã«ã(&H)"
+ 
+ msgid "Files"
+-msgstr "¥Õ¥¡¥€¥ë"
++msgstr "ãã¡ã€ã«"
+ 
+ msgid "&OK"
+ msgstr "&OK"
+ 
+ msgid "Selection"
+-msgstr "ÁªÂò"
++msgstr "éžæ"
+ 
+ msgid "Find &Next"
+-msgstr "Œ¡€òž¡º÷(&N)"
++msgstr "æ¬¡ãæ€çŽ¢(&N)"
+ 
+ msgid "&Replace"
+-msgstr "ÃÖŽ¹(&R)"
++msgstr "çœ®æ(&R)"
+ 
+ msgid "Replace &All"
+-msgstr "ÁŽ€ÆÃÖŽ¹(&A)"
++msgstr "å
+šãŠçœ®æ(&A)"
+ 
+ msgid "&Undo"
+-msgstr "¥¢¥ó¥É¥¥(&U)"
+-
+-#, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Zap¥Õ¥©¥ó¥È '%s' €òÆÉ¹þ€á€Þ€»€ó"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: ¥Õ¥©¥ó¥È %s €ò»ÈÍÑ€Ç€­€Þ€»€ó"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"»Ò¥×¥í¥»¥¹€ØÄä»ß¥á¥Ã¥»¡Œ¥ž€òÁ÷¿®Ãæ€Ç€¹.\n"
++msgstr "ã¢ã³ãã¥(&U)"
+ 
+ #, c-format
+ msgid "E671: Cannot find window title \"%s\""
+-msgstr "E671: ¥¿¥€¥È¥ë€¬ \"%s\" €Î¥Š¥£¥ó¥É¥Š€Ï€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E671: ã¿ã€ãã«ã \"%s\" ã®ãŠã£ã³ããŠã¯èŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+-msgstr "E243: °ú¿ô€Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó: \"-%s\"; OLEÈÇ€ò»ÈÍÑ€·€Æ€¯€À€µ€€."
++msgstr "E243: åŒæ°ã¯ãµããŒããããŸãã: \"-%s\"; OLEçãäœ¿çšããŠãã ãã."
+ 
+ msgid "E672: Unable to open window inside MDI application"
+-msgstr "E672: MDI¥¢¥×¥ê€ÎÃæ€Ç€Ï¥Š¥£¥ó¥É¥Š€ò³«€±€Þ€»€ó"
++msgstr "E672: MDIã¢ããªã®äž­ã§ã¯ãŠã£ã³ããŠãéããŸãã"
+ 
+ msgid "Close tab"
+-msgstr "¥¿¥Ö¥Ú¡Œ¥ž€òÊÄ€ž€ë"
++msgstr "ã¿ãããŒãžãéãã"
+ 
+ msgid "Open tab..."
+-msgstr "¥¿¥Ö¥Ú¡Œ¥ž€ò³«€¯"
++msgstr "ã¿ãããŒãžãéã"
+ 
+ msgid "Find string (use '\\\\' to find  a '\\')"
+-msgstr "ž¡º÷Êž»úÎó ('\\' €òž¡º÷€¹€ë€Ë€Ï '\\\\')"
++msgstr "æ€çŽ¢æå­å ('\\' ãæ€çŽ¢ããã«ã¯ '\\\\')"
+ 
+ msgid "Find & Replace (use '\\\\' to find  a '\\')"
+-msgstr "ž¡º÷¡ŠÃÖŽ¹ ('\\' €òž¡º÷€¹€ë€Ë€Ï '\\\\')"
++msgstr "æ€çŽ¢ã»çœ®æ ('\\' ãæ€çŽ¢ããã«ã¯ '\\\\')"
+ 
+ #. We fake this: Use a filter that doesn't select anything and a default
+ #. * file name that won't be used.
+ msgid "Not Used"
+-msgstr "»È€ï€ì€Þ€»€ó"
++msgstr "äœ¿ãããŸãã"
+ 
+ msgid "Directory\t*.nothing\n"
+-msgstr "¥Ç¥£¥ì¥¯¥È¥ê\t*.nothing\n"
++msgstr "ãã£ã¬ã¯ããª\t*.nothing\n"
+ 
+ msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
+-msgstr "Vim E458: ¿§»ØÄê€¬Àµ€·€¯€Ê€€€Î€Ç¥š¥ó¥È¥ê€ò³ä€êÅö€Æ€é€ì€Þ€»€ó"
++msgstr "Vim E458: è²æå®ãæ­£ãããªãã®ã§ãšã³ããªãå²ãåœãŠãããŸãã"
+ 
+ #, c-format
+ msgid "E250: Fonts for the following charsets are missing in fontset %s:"
+-msgstr "E250: °Ê²Œ€ÎÊž»ú¥»¥Ã¥È€Î¥Õ¥©¥ó¥È€¬€¢€ê€Þ€»€ó %s:"
++msgstr "E250: ä»¥äžã®æå­ã»ããã®ãã©ã³ãããããŸãã %s:"
+ 
+ #, c-format
+ msgid "E252: Fontset name: %s"
+-msgstr "E252: ¥Õ¥©¥ó¥È¥»¥Ã¥ÈÌŸ: %s"
++msgstr "E252: ãã©ã³ãã»ããå: %s"
+ 
+ #, c-format
+ msgid "Font '%s' is not fixed-width"
+-msgstr "¥Õ¥©¥ó¥È '%s' €ÏžÇÄêÉý€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "ãã©ã³ã '%s' ã¯åºå®å¹
+ã§ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E253: Fontset name: %s\n"
+-msgstr "E253: ¥Õ¥©¥ó¥È¥»¥Ã¥ÈÌŸ: %s\n"
++msgstr "E253: ãã©ã³ãã»ããå: %s\n"
+ 
+ #, c-format
+ msgid "Font0: %s\n"
+-msgstr "¥Õ¥©¥ó¥È0: %s\n"
++msgstr "ãã©ã³ã0: %s\n"
+ 
+ #, c-format
+ msgid "Font1: %s\n"
+-msgstr "¥Õ¥©¥ó¥È1: %s\n"
++msgstr "ãã©ã³ã1: %s\n"
+ 
+ #, c-format
+ msgid "Font%ld width is not twice that of font0\n"
+-msgstr "¥Õ¥©¥ó¥È%ld €ÎÉý€¬¥Õ¥©¥ó¥È0€Î2ÇÜ€Ç€Ï€¢€ê€Þ€»€ó\n"
++msgstr "ãã©ã³ã%ld ã®å¹
+ããã©ã³ã0ã®2åã§ã¯ãããŸãã\n"
+ 
+ #, c-format
+ msgid "Font0 width: %ld\n"
+-msgstr "¥Õ¥©¥ó¥È0€ÎÉý: %ld\n"
++msgstr "ãã©ã³ã0ã®å¹
+: %ld\n"
+ 
+ #, c-format
+ msgid ""
+ "Font1 width: %ld\n"
+ "\n"
+ msgstr ""
+-"¥Õ¥©¥ó¥È1€ÎÉý: %ld\n"
++"ãã©ã³ã1ã®å¹
+: %ld\n"
+ "\n"
+ 
+ msgid "Invalid font specification"
+-msgstr "Ìµžú€Ê¥Õ¥©¥ó¥È»ØÄê€Ç€¹"
++msgstr "ç¡å¹ãªãã©ã³ãæå®ã§ã"
+ 
+ msgid "&Dismiss"
+-msgstr "µÑ²Œ€¹€ë(&D)"
++msgstr "åŽäžãã(&D)"
+ 
+ msgid "no specific match"
+-msgstr "¥Þ¥Ã¥Á€¹€ë€â€Î€¬€¢€ê€Þ€»€ó"
++msgstr "ããããããã®ããããŸãã"
+ 
+ msgid "Vim - Font Selector"
+-msgstr "Vim - ¥Õ¥©¥ó¥ÈÁªÂò"
++msgstr "Vim - ãã©ã³ãéžæ"
+ 
+ msgid "Name:"
+-msgstr "ÌŸÁ°:"
++msgstr "åå:"
+ 
+ #. create toggle button
+ msgid "Show size in Points"
+-msgstr "¥µ¥€¥º€ò¥Ý¥€¥ó¥È€ÇÉœŒš€¹€ë"
++msgstr "ãµã€ãºããã€ã³ãã§è¡šç€ºãã"
+ 
+ msgid "Encoding:"
+-msgstr "¥š¥ó¥³¡Œ¥É:"
++msgstr "ãšã³ã³ãŒã:"
+ 
+ msgid "Font:"
+-msgstr "¥Õ¥©¥ó¥È:"
++msgstr "ãã©ã³ã:"
+ 
+ msgid "Style:"
+-msgstr "¥¹¥¿¥€¥ë:"
++msgstr "ã¹ã¿ã€ã«:"
+ 
+ msgid "Size:"
+-msgstr "¥µ¥€¥º:"
++msgstr "ãµã€ãº:"
+ 
+ msgid "E256: Hangul automata ERROR"
+-msgstr "E256: ¥Ï¥ó¥°¥ë¥ª¡Œ¥È¥Þ¥È¥ó¥š¥é¡Œ"
++msgstr "E256: ãã³ã°ã«ãªãŒãããã³ãšã©ãŒ"
+ 
+ msgid "E550: Missing colon"
+-msgstr "E550: ¥³¥í¥ó€¬€¢€ê€Þ€»€ó"
++msgstr "E550: ã³ã­ã³ããããŸãã"
+ 
+ msgid "E551: Illegal component"
+-msgstr "E551: ÉÔÀµ€Ê¹œÊžÍ×ÁÇ€Ç€¹"
++msgstr "E551: äžæ­£ãªæ§æèŠçŽ ã§ã"
+ 
+ msgid "E552: digit expected"
+-msgstr "E552: ¿ôÃÍ€¬É¬Í×€Ç€¹"
++msgstr "E552: æ°å€ãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "Page %d"
+-msgstr "%d ¥Ú¡Œ¥ž"
++msgstr "%d ããŒãž"
+ 
+ msgid "No text to be printed"
+-msgstr "°õºþ€¹€ë¥Æ¥­¥¹¥È€¬€¢€ê€Þ€»€ó"
++msgstr "å°å·ãããã­ã¹ãããããŸãã"
+ 
+ #, c-format
+ msgid "Printing page %d (%d%%)"
+-msgstr "°õºþÃæ: ¥Ú¡Œ¥ž %d (%d%%)"
++msgstr "å°å·äž­: ããŒãž %d (%d%%)"
+ 
+ #, c-format
+ msgid " Copy %d of %d"
+-msgstr " ¥³¥Ô¡Œ %d (ÁŽ %d Ãæ)"
++msgstr " ã³ããŒ %d (å
+š %d äž­)"
+ 
+ #, c-format
+ msgid "Printed: %s"
+-msgstr "°õºþ€·€Þ€·€¿: %s"
++msgstr "å°å·ããŸãã: %s"
+ 
+ msgid "Printing aborted"
+-msgstr "°õºþ€¬Ãæ»ß€µ€ì€Þ€·€¿"
++msgstr "å°å·ãäž­æ­¢ãããŸãã"
+ 
+ msgid "E455: Error writing to PostScript output file"
+-msgstr "E455: PostScriptœÐÎÏ¥Õ¥¡¥€¥ë€Îœñ¹þ€ß¥š¥é¡Œ€Ç€¹"
++msgstr "E455: PostScriptåºåãã¡ã€ã«ã®æžèŸŒã¿ãšã©ãŒã§ã"
+ 
+ #, c-format
+ msgid "E624: Can't open file \"%s\""
+-msgstr "E624: ¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++msgstr "E624: ãã¡ã€ã« \"%s\" ãéããŸãã"
+ 
+ #, c-format
+ msgid "E457: Can't read PostScript resource file \"%s\""
+-msgstr "E457: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"%s\" €òÆÉ¹þ€á€Þ€»€ó"
++msgstr "E457: PostScriptã®ãªãœãŒã¹ãã¡ã€ã« \"%s\" ãèª­èŸŒããŸãã"
+ 
+ #, c-format
+ msgid "E618: file \"%s\" is not a PostScript resource file"
+-msgstr "E618: ¥Õ¥¡¥€¥ë \"%s\" €Ï PostScript ¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E618: ãã¡ã€ã« \"%s\" ã¯ PostScript ãªãœãŒã¹ãã¡ã€ã«ã§ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E619: file \"%s\" is not a supported PostScript resource file"
+-msgstr "E619: ¥Õ¥¡¥€¥ë \"%s\" €ÏÂÐ±þ€·€Æ€€€Ê€€ PostScript ¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë€Ç€¹"
++msgstr "E619: ãã¡ã€ã« \"%s\" ã¯å¯Ÿå¿ããŠããªã PostScript ãªãœãŒã¹ãã¡ã€ã«ã§ã"
+ 
+ #, c-format
+ msgid "E621: \"%s\" resource file has wrong version"
+-msgstr "E621: ¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"%s\" €Ï¥Ð¡Œ¥ž¥ç¥ó€¬°Û€Ê€ê€Þ€¹"
++msgstr "E621: ãªãœãŒã¹ãã¡ã€ã« \"%s\" ã¯ããŒãžã§ã³ãç°ãªããŸã"
+ 
+ msgid "E673: Incompatible multi-byte encoding and character set."
+-msgstr "E673: žßŽ¹À­€ÎÌµ€€¥Þ¥ë¥Á¥Ð¥€¥È¥š¥ó¥³¡Œ¥Ç¥£¥ó¥°€ÈÊž»ú¥»¥Ã¥È€Ç€¹"
++msgstr "E673: äºææ§ã®ç¡ããã«ããã€ããšã³ã³ãŒãã£ã³ã°ãšæå­ã»ããã§ã"
+ 
+ msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+-msgstr "E674: ¥Þ¥ë¥Á¥Ð¥€¥È¥š¥ó¥³¡Œ¥Ç¥£¥ó¥°€Ç€Ï printmbcharset €ò¶õ€Ë€Ç€­€Þ€»€ó"
++msgstr "E674: ãã«ããã€ããšã³ã³ãŒãã£ã³ã°ã§ã¯ printmbcharset ãç©ºã«ã§ããŸãã"
+ 
+ msgid "E675: No default font specified for multi-byte printing."
+ msgstr ""
+-"E675: ¥Þ¥ë¥Á¥Ð¥€¥ÈÊž»ú€ò°õºþ€¹€ë€¿€á€Î¥Ç¥Õ¥©¥ë¥È¥Õ¥©¥ó¥È€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++"E675: ãã«ããã€ãæå­ãå°å·ããããã®ããã©ã«ããã©ã³ããæå®ãããŠããŸãã"
+ 
+ msgid "E324: Can't open PostScript output file"
+-msgstr "E324: PostScriptœÐÎÏÍÑ€Î¥Õ¥¡¥€¥ë€ò³«€±€Þ€»€ó"
++msgstr "E324: PostScriptåºåçšã®ãã¡ã€ã«ãéããŸãã"
+ 
+ #, c-format
+ msgid "E456: Can't open file \"%s\""
+-msgstr "E456: ¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++msgstr "E456: ãã¡ã€ã« \"%s\" ãéããŸãã"
+ 
+ msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+-msgstr "E456: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"prolog.ps\" €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E456: PostScriptã®ãªãœãŒã¹ãã¡ã€ã« \"prolog.ps\" ãèŠã€ãããŸãã"
+ 
+ msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+-msgstr "E456: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"cidfont.ps\" €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E456: PostScriptã®ãªãœãŒã¹ãã¡ã€ã« \"cidfont.ps\" ãèŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E456: Can't find PostScript resource file \"%s.ps\""
+-msgstr "E456: PostScript€Î¥ê¥œ¡Œ¥¹¥Õ¥¡¥€¥ë \"%s.ps\" €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E456: PostScriptã®ãªãœãŒã¹ãã¡ã€ã« \"%s.ps\" ãèŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E620: Unable to convert to print encoding \"%s\""
+-msgstr "E620: °õºþ¥š¥ó¥³¡Œ¥É \"%s\" €ØÊÑŽ¹€Ç€­€Þ€»€ó"
++msgstr "E620: å°å·ãšã³ã³ãŒã \"%s\" ãžå€æã§ããŸãã"
+ 
+ msgid "Sending to printer..."
+-msgstr "¥×¥ê¥ó¥¿€ËÁ÷¿®Ãæ..."
++msgstr "ããªã³ã¿ã«éä¿¡äž­..."
+ 
+ msgid "E365: Failed to print PostScript file"
+-msgstr "E365: PostScript¥Õ¥¡¥€¥ë€Î°õºþ€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E365: PostScriptãã¡ã€ã«ã®å°å·ã«å€±æããŸãã"
+ 
+ msgid "Print job sent."
+-msgstr "°õºþ¥ž¥ç¥Ö€òÁ÷¿®€·€Þ€·€¿."
++msgstr "å°å·ãžã§ããéä¿¡ããŸãã."
+ 
+ msgid "Add a new database"
+-msgstr "¿·¥Ç¡Œ¥¿¥Ù¡Œ¥¹€òÄÉ²Ã"
++msgstr "æ°ããŒã¿ããŒã¹ãè¿œå "
+ 
+ msgid "Query for a pattern"
+-msgstr "¥Ñ¥¿¡Œ¥ó€Î¥¯¥š¥ê¡Œ€òÄÉ²Ã"
++msgstr "ãã¿ãŒã³ã®ã¯ãšãªãŒãè¿œå "
+ 
+ msgid "Show this message"
+-msgstr "€³€Î¥á¥Ã¥»¡Œ¥ž€òÉœŒš€¹€ë"
++msgstr "ãã®ã¡ãã»ãŒãžãè¡šç€ºãã"
+ 
+ msgid "Kill a connection"
+-msgstr "ÀÜÂ³€òœªÎ»€¹€ë"
++msgstr "æ¥ç¶ãçµäºãã"
+ 
+ msgid "Reinit all connections"
+-msgstr "ÁŽ€Æ€ÎÀÜÂ³€òºÆœéŽü²œ€¹€ë"
++msgstr "å
+šãŠã®æ¥ç¶ãååæåãã"
+ 
+ msgid "Show connections"
+-msgstr "ÀÜÂ³€òÉœŒš€¹€ë"
++msgstr "æ¥ç¶ãè¡šç€ºãã"
+ 
+ #, c-format
+ msgid "E560: Usage: cs[cope] %s"
+-msgstr "E560: »ÈÍÑÊýË¡: cs[cope] %s"
++msgstr "E560: äœ¿çšæ¹æ³: cs[cope] %s"
+ 
+ msgid "This cscope command does not support splitting the window.\n"
+-msgstr "€³€Îcscope¥³¥Þ¥ó¥É€ÏÊ¬³ä¥Š¥£¥ó¥É¥Š€Ç€Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó.\n"
++msgstr "ãã®cscopeã³ãã³ãã¯åå²ãŠã£ã³ããŠã§ã¯ãµããŒããããŸãã.\n"
+ 
+ msgid "E562: Usage: cstag <ident>"
+-msgstr "E562: »ÈÍÑË¡: cstag <ident>"
++msgstr "E562: äœ¿çšæ³: cstag <ident>"
+ 
+ msgid "E257: cstag: tag not found"
+-msgstr "E257: cstag: ¥¿¥°€¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E257: cstag: ã¿ã°ãèŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E563: stat(%s) error: %d"
+-msgstr "E563: stat(%s) ¥š¥é¡Œ: %d"
++msgstr "E563: stat(%s) ãšã©ãŒ: %d"
+ 
+ msgid "E563: stat error"
+-msgstr "E563: stat ¥š¥é¡Œ"
++msgstr "E563: stat ãšã©ãŒ"
+ 
+ #, c-format
+ msgid "E564: %s is not a directory or a valid cscope database"
+-msgstr "E564: %s €Ï¥Ç¥£¥ì¥¯¥È¥êµÚ€ÓÍ­žú€Êcscope€Î¥Ç¡Œ¥¿¥Ù¡Œ¥¹€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E564: %s ã¯ãã£ã¬ã¯ããªåã³æå¹ãªcscopeã®ããŒã¿ããŒã¹ã§ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "Added cscope database %s"
+-msgstr "cscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹ %s €òÄÉ²Ã"
++msgstr "cscopeããŒã¿ããŒã¹ %s ãè¿œå "
+ 
+ #, c-format
+ msgid "E262: error reading cscope connection %ld"
+-msgstr "E262: cscope€ÎÀÜÂ³ %ld €òÆÉ¹þ€ßÃæ€Î¥š¥é¡Œ€Ç€¹"
++msgstr "E262: cscopeã®æ¥ç¶ %ld ãèª­èŸŒã¿äž­ã®ãšã©ãŒã§ã"
+ 
+ msgid "E561: unknown cscope search type"
+-msgstr "E561: Ì€ÃÎ€Îcscopež¡º÷·¿€Ç€¹"
++msgstr "E561: æªç¥ã®cscopeæ€çŽ¢åã§ã"
+ 
+ msgid "E566: Could not create cscope pipes"
+-msgstr "E566: cscope¥Ñ¥€¥×€òºîÀ®€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "E566: cscopeãã€ããäœæã§ããŸããã§ãã"
+ 
+ msgid "E622: Could not fork for cscope"
+-msgstr "E622: cscope€Îµ¯Æ°œàÈ÷(fork)€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E622: cscopeã®èµ·åæºå(fork)ã«å€±æããŸãã"
+ 
+ msgid "cs_create_connection exec failed"
+-msgstr "cs_create_connection €ÎŒÂ¹Ô€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "cs_create_connection ã®å®è¡ã«å€±æããŸãã"
+ 
+ msgid "cs_create_connection: fdopen for to_fp failed"
+-msgstr "cs_create_connection: to_fp €Î fdopen €ËŒºÇÔ€·€Þ€·€¿"
++msgstr "cs_create_connection: to_fp ã® fdopen ã«å€±æããŸãã"
+ 
+ msgid "cs_create_connection: fdopen for fr_fp failed"
+-msgstr "cs_create_connection: fr_fp €Î fdopen €ËŒºÇÔ€·€Þ€·€¿"
++msgstr "cs_create_connection: fr_fp ã® fdopen ã«å€±æããŸãã"
+ 
+ msgid "E623: Could not spawn cscope process"
+-msgstr "E623: cscope¥×¥í¥»¥¹€òµ¯Æ°€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "E623: cscopeãã­ã»ã¹ãèµ·åã§ããŸããã§ãã"
+ 
+ msgid "E567: no cscope connections"
+-msgstr "E567: cscopeÀÜÂ³€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E567: cscopeæ¥ç¶ã«å€±æããŸãã"
+ 
+ #, c-format
+-msgid "E259: no matches found for cscope query %s of %s"
+-msgstr "E259: cscope¥¯¥š¥ê¡Œ %s of %s €Ë³ºÅö€¬€¢€ê€Þ€»€ó€Ç€·€¿"
++msgid "E469: invalid cscopequickfix flag %c for %c"
++msgstr "E469: ç¡å¹ãª cscopequickfix ãã©ã° %c ã® %c ã§ã"
+ 
+ #, c-format
+-msgid "E469: invalid cscopequickfix flag %c for %c"
+-msgstr "E469: Ìµžú€Ê cscopequickfix ¥Õ¥é¥° %c €Î %c €Ç€¹"
++msgid "E259: no matches found for cscope query %s of %s"
++msgstr "E259: cscopeã¯ãšãªãŒ %s of %s ã«è©²åœããããŸããã§ãã"
+ 
+ msgid "cscope commands:\n"
+-msgstr "cscope¥³¥Þ¥ó¥É:\n"
++msgstr "cscopeã³ãã³ã:\n"
+ 
+ #, c-format
+-msgid "%-5s: %-30s (Usage: %s)"
+-msgstr "%-5s: %-30s (»ÈÍÑË¡: %s)"
++msgid "%-5s: %s%*s (Usage: %s)"
++msgstr "%-5s: %s%*s (äœ¿çšæ³: %s)"
++
++msgid ""
++"\n"
++"       c: Find functions calling this function\n"
++"       d: Find functions called by this function\n"
++"       e: Find this egrep pattern\n"
++"       f: Find this file\n"
++"       g: Find this definition\n"
++"       i: Find files #including this file\n"
++"       s: Find this C symbol\n"
++"       t: Find this text string\n"
++msgstr ""
++"\n"
++"       c: ãã®é¢æ°ãåŒãã§ããé¢æ°ãæ¢ã\n"
++"       d: ãã®é¢æ°ããåŒãã§ããé¢æ°ãæ¢ã\n"
++"       e: ãã®egrepãã¿ãŒã³ãæ¢ã\n"
++"       f: ãã®ãã¡ã€ã«ãæ¢ã\n"
++"       g: ãã®å®çŸ©ãæ¢ã\n"
++"       i: ãã®ãã¡ã€ã«ã#includeããŠãããã¡ã€ã«ãæ¢ã\n"
++"       s: ãã®Cã·ã³ãã«ãæ¢ã\n"
++"       t: ãã®ãã­ã¹ãæå­åãæ¢ã\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+-msgstr "E625: cscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹: %s €ò³«€¯€³€È€¬€Ç€­€Þ€»€ó"
++msgstr "E625: cscopeããŒã¿ããŒã¹: %s ãéãããšãã§ããŸãã"
+ 
+ msgid "E626: cannot get cscope database information"
+-msgstr "E626: cscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹€ÎŸðÊó€òŒèÆÀ€Ç€­€Þ€»€ó"
++msgstr "E626: cscopeããŒã¿ããŒã¹ã®æ
+å ±ãååŸã§ããŸãã"
+ 
+ msgid "E568: duplicate cscope database not added"
+-msgstr "E568: œÅÊ£€¹€ëcscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹€ÏÄÉ²Ã€µ€ì€Þ€»€ó€Ç€·€¿"
+-
+-msgid "E569: maximum number of cscope connections reached"
+-msgstr "E569: cscopeÀÜÂ³€ÎºÇÂç¿ô€ËÃ£€·€Þ€·€¿"
++msgstr "E568: éè€ããcscopeããŒã¿ããŒã¹ã¯è¿œå ãããŸããã§ãã"
+ 
+ #, c-format
+ msgid "E261: cscope connection %s not found"
+-msgstr "E261: cscopeÀÜÂ³ %s €¬€ß€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++msgstr "E261: cscopeæ¥ç¶ %s ãèŠã€ãããŸããã§ãã"
+ 
+ #, c-format
+ msgid "cscope connection %s closed"
+-msgstr "cscopeÀÜÂ³ %s €¬ÊÄ€ž€é€ì€Þ€·€¿"
++msgstr "cscopeæ¥ç¶ %s ãéããããŸãã"
+ 
+ #. should not reach here
+ msgid "E570: fatal error in cs_manage_matches"
+-msgstr "E570: cs_manage_matches €ÇÃ×Ì¿Åª€Ê¥š¥é¡Œ€Ç€¹"
++msgstr "E570: cs_manage_matches ã§èŽåœçãªãšã©ãŒã§ã"
+ 
+ #, c-format
+ msgid "Cscope tag: %s"
+-msgstr "Cscope ¥¿¥°: %s"
++msgstr "Cscope ã¿ã°: %s"
+ 
+ msgid ""
+ "\n"
+ "   #   line"
+ msgstr ""
+ "\n"
+-"   #   ¹ÔÈÖ¹æ"
++"   #   è¡çªå·"
+ 
+ msgid "filename / context / line\n"
+-msgstr "¥Õ¥¡¥€¥ëÌŸ / ÊžÌ® / ¹Ô\n"
++msgstr "ãã¡ã€ã«å / æè / è¡\n"
+ 
+ #, c-format
+ msgid "E609: Cscope error: %s"
+-msgstr "E609: cscope¥š¥é¡Œ: %s"
++msgstr "E609: cscopeãšã©ãŒ: %s"
+ 
+ msgid "All cscope databases reset"
+-msgstr "ÁŽ€Æ€Îcscope¥Ç¡Œ¥¿¥Ù¡Œ¥¹€ò¥ê¥»¥Ã¥È€·€Þ€¹"
++msgstr "å
+šãŠã®cscopeããŒã¿ããŒã¹ããªã»ããããŸã"
+ 
+ msgid "no cscope connections\n"
+-msgstr "cscopeÀÜÂ³€¬€¢€ê€Þ€»€ó\n"
++msgstr "cscopeæ¥ç¶ããããŸãã\n"
+ 
+ msgid " # pid    database name                       prepend path\n"
+-msgstr " # pid    ¥Ç¡Œ¥¿¥Ù¡Œ¥¹ÌŸ                      prepend ¥Ñ¥¹\n"
++msgstr " # pid    ããŒã¿ããŒã¹å                      prepend ãã¹\n"
++
++msgid "Lua library cannot be loaded."
++msgstr "Luaã©ã€ãã©ãªãã­ãŒãã§ããŸãã."
++
++msgid "cannot save undo information"
++msgstr "ã¢ã³ãã¥æ
+å ±ãä¿å­ã§ããŸãã"
+ 
+ msgid ""
+-"???: Sorry, this command is disabled, the MzScheme library could not be "
++"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
+ "loaded."
+-msgstr ""
+-"???: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹, €Ž€á€ó€Ê€µ€€: MzScheme ¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ"
+-"€»€ó€Ç€·€¿."
++msgstr "E815: ãã®ã³ãã³ãã¯ç¡å¹ã§ã. MzScheme ã©ã€ãã©ãªãã­ãŒãã§ããŸãã."
+ 
+ msgid "invalid expression"
+-msgstr "Ìµžú€ÊŒ°€Ç€¹"
++msgstr "ç¡å¹ãªåŒã§ã"
+ 
+ msgid "expressions disabled at compile time"
+-msgstr "Œ°€Ï¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹"
++msgstr "åŒã¯ã³ã³ãã€ã«æã«ç¡å¹ã«ãããŠããŸã"
+ 
+ msgid "hidden option"
+-msgstr "±£€·¥ª¥×¥·¥ç¥ó"
++msgstr "é ããªãã·ã§ã³"
+ 
+ msgid "unknown option"
+-msgstr "Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹"
++msgstr "æªç¥ã®ãªãã·ã§ã³ã§ã"
+ 
+ msgid "window index is out of range"
+-msgstr "ÈÏ°Ï³°€Î¥Š¥£¥ó¥É¥ŠÈÖ¹æ€Ç€¹"
++msgstr "ç¯å²å€ã®ãŠã£ã³ããŠçªå·ã§ã"
+ 
+ msgid "couldn't open buffer"
+-msgstr "¥Ð¥Ã¥Õ¥¡€ò³«€±€Þ€»€ó"
+-
+-msgid "cannot save undo information"
+-msgstr "¥¢¥ó¥É¥¥ŸðÊó€¬ÊÝÂž€Ç€­€Þ€»€ó"
++msgstr "ãããã¡ãéããŸãã"
+ 
+ msgid "cannot delete line"
+-msgstr "¹Ô€òŸÃ€»€Þ€»€ó"
++msgstr "è¡ãæ¶ããŸãã"
+ 
+ msgid "cannot replace line"
+-msgstr "¹Ô€òÃÖŽ¹€Ç€­€Þ€»€ó"
++msgstr "è¡ãçœ®æã§ããŸãã"
+ 
+ msgid "cannot insert line"
+-msgstr "¹Ô€òÁÞÆþ€Ç€­€Þ€»€ó"
++msgstr "è¡ãæ¿å
+¥ã§ããŸãã"
+ 
+ msgid "string cannot contain newlines"
+-msgstr "Êž»úÎó€Ë€Ï²þ¹ÔÊž»ú€òŽÞ€á€é€ì€Þ€»€ó"
++msgstr "æå­åã«ã¯æ¹è¡æå­ãå«ããããŸãã"
++
++msgid "error converting Scheme values to Vim"
++msgstr "Schemeå€ã®Vimãžã®å€æãšã©ãŒ"
+ 
+ msgid "Vim error: ~a"
+-msgstr "Vim ¥š¥é¡Œ: ~a"
++msgstr "Vim ãšã©ãŒ: ~a"
+ 
+ msgid "Vim error"
+-msgstr "Vim ¥š¥é¡Œ"
++msgstr "Vim ãšã©ãŒ"
+ 
+ msgid "buffer is invalid"
+-msgstr "¥Ð¥Ã¥Õ¥¡€ÏÌµžú€Ç€¹"
++msgstr "ãããã¡ã¯ç¡å¹ã§ã"
+ 
+ msgid "window is invalid"
+-msgstr "¥Š¥£¥ó¥É¥Š€ÏÌµžú€Ç€¹"
++msgstr "ãŠã£ã³ããŠã¯ç¡å¹ã§ã"
+ 
+ msgid "linenr out of range"
+-msgstr "ÈÏ°Ï³°€Î¹ÔÈÖ¹æ€Ç€¹"
++msgstr "ç¯å²å€ã®è¡çªå·ã§ã"
+ 
+ msgid "not allowed in the Vim sandbox"
+-msgstr "¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€Ïµö€µ€ì€Þ€»€ó"
++msgstr "ãµã³ãããã¯ã¹ã§ã¯èš±ãããŸãã"
++
++#, c-format
++msgid "E370: Could not load library %s"
++msgstr "E370: ã©ã€ãã©ãª %s ãã­ãŒãã§ããŸããã§ãã"
++
++msgid "Sorry, this command is disabled: the Perl library could not be loaded."
++msgstr ""
++"ãã®ã³ãã³ãã¯ç¡å¹ã§ã, ããããªãã: Perlã©ã€ãã©ãªãã­ãŒãã§ããŸããã§ãã."
++
++msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
++msgstr ""
++"E299: ãµã³ãããã¯ã¹ã§ã¯ Safe ã¢ãžã¥ãŒã«ãäœ¿çšããªãPerlã¹ã¯ãªããã¯çŠããã"
++"ãŠããŸã"
++
++msgid "E836: This Vim cannot execute :python after using :py3"
++msgstr "E836: ãã®Vimã§ã¯ :py3 ãäœ¿ã£ãåŸã« :python ãäœ¿ããŸãã"
++
++msgid "only string keys are allowed"
++msgstr "æå­åã®ã­ãŒã®ã¿ãèš±å¯ãããŠããŸã"
+ 
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+ "loaded."
+ msgstr ""
+-"E263: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹,€Ž€á€ó€Ê€µ€€: Python¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó"
+-"€Ç€·€¿."
++"E263: ãã®ã³ãã³ãã¯ç¡å¹ã§ã,ããããªãã: Pythonã©ã€ãã©ãªãã­ãŒãã§ããŸãã"
++"ã§ãã."
+ 
+ # Added at 07-Feb-2004.
+ msgid "E659: Cannot invoke Python recursively"
+-msgstr "E659: Python €òºÆµ¢Åª€ËŒÂ¹Ô€¹€ë€³€È€Ï€Ç€­€Þ€»€ó"
+-
+-msgid "can't delete OutputObject attributes"
+-msgstr "OutputObjectÂ°À­€òŸÃ€»€Þ€»€ó"
++msgstr "E659: Python ãååž°çã«å®è¡ããããšã¯ã§ããŸãã"
+ 
+-msgid "softspace must be an integer"
+-msgstr "softspace €Ï integer €Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgid "E858: Eval did not return a valid python object"
++msgstr "E858: åŒè©äŸ¡ã¯æå¹ãªpythonãªããžã§ã¯ããè¿ããŸããã§ãã"
+ 
+-msgid "invalid attribute"
+-msgstr "Ìµžú€ÊÂ°À­€Ç€¹"
++msgid "E859: Failed to convert returned python object to vim value"
++msgstr "E859: è¿ãããpythonãªããžã§ã¯ããvimã®å€ã«å€æã§ããŸããã§ãã"
+ 
+-msgid "writelines() requires list of strings"
+-msgstr "writelines() €Ë€ÏÊž»úÎó€Î¥ê¥¹¥È€¬É¬Í×€Ç€¹"
++msgid "failed to run the code"
++msgstr "ã³ãŒãã®å®è¡ã«å€±æããŸãã"
+ 
+-msgid "E264: Python: Error initialising I/O objects"
+-msgstr "E264: Python: I/O¥ª¥Ö¥ž¥§¥¯¥È€ÎœéŽü²œÃæ€Ë¥š¥é¡Œ€Ç€¹"
++msgid "E863: return value must be an instance of str"
++msgstr "E863: æ»ãå€ã¯æå­åã®ã€ã³ã¹ã¿ã³ã¹ã§ãªããã°ãªããŸãã"
+ 
+-msgid "attempt to refer to deleted buffer"
+-msgstr "ŸÃ€µ€ì€¿¥Ð¥Ã¥Õ¥¡€¬»²ŸÈ€µ€ì€Þ€·€¿"
++msgid "E837: This Vim cannot execute :py3 after using :python"
++msgstr "E837: ãã®Vimã§ã¯ :python ãäœ¿ã£ãåŸã« :py3 ãäœ¿ããŸãã"
+ 
+-msgid "line number out of range"
+-msgstr "ÈÏ°Ï³°€Î¹ÔÈÖ¹æ€Ç€¹"
++msgid "E860: Eval did not return a valid python 3 object"
++msgstr "E860: åŒè©äŸ¡ã¯æå¹ãªpython 3ãªããžã§ã¯ããè¿ããŸããã§ãã"
+ 
+-#, c-format
+-msgid "<buffer object (deleted) at %8lX>"
+-msgstr "<¥Ð¥Ã¥Õ¥¡¥ª¥Ö¥ž¥§¥¯¥È (ŸÃµîºÑ€ß) %8lX>"
++msgid "E861: Failed to convert returned python 3 object to vim value"
++msgstr "E861: è¿ãããpython 3ãªããžã§ã¯ããvimã®å€ã«å€æã§ããŸããã§ãã"
+ 
+-msgid "invalid mark name"
+-msgstr "Ìµžú€Ê¥Þ¡Œ¥¯ÌŸ€Ç€¹"
+-
+-msgid "no such buffer"
+-msgstr "€œ€Î€è€Š€Ê¥Ð¥Ã¥Õ¥¡€Ï€¢€ê€Þ€»€ó"
+-
+-msgid "attempt to refer to deleted window"
+-msgstr "ŸÃ€µ€ì€¿¥Š¥£¥ó¥É¥Š€¬»²ŸÈ€µ€ì€Þ€·€¿"
+-
+-msgid "readonly attribute"
+-msgstr "ÆÉ¹þÀìÍÑÂ°À­"
+-
+-msgid "cursor position outside buffer"
+-msgstr "¥«¡Œ¥œ¥ë€¬¥Ð¥Ã¥Õ¥¡€Î³°€Ë€¢€ê€Þ€¹"
+-
+-#, c-format
+-msgid "<window object (deleted) at %.8lX>"
+-msgstr "<¥Š¥£¥ó¥É¥Š¥ª¥Ö¥ž¥§¥¯¥È (ŸÃµîºÑ) %.8lX>"
+-
+-#, c-format
+-msgid "<window object (unknown) at %.8lX>"
+-msgstr "<¥Š¥£¥ó¥É¥Š¥ª¥Ö¥ž¥§¥¯¥È (Ì€ÃÎ) %.8lX>"
+-
+-#, c-format
+-msgid "<window %d>"
+-msgstr "<¥Š¥£¥ó¥É¥Š %d>"
+-
+-msgid "no such window"
+-msgstr "€œ€Î€è€Š€Ê¥Š¥£¥ó¥É¥Š€Ï€¢€ê€Þ€»€ó"
++msgid "index must be int or slice"
++msgstr "ã€ã³ããã¯ã¹ã¯æŽæ°ãã¹ã©ã€ã¹ã§ãªããã°ãªããŸãã"
+ 
+ msgid "E265: $_ must be an instance of String"
+-msgstr "E265: $_ €ÏÊž»úÎó€Î¥€¥ó¥¹¥¿¥ó¥¹€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgstr "E265: $_ ã¯æå­åã®ã€ã³ã¹ã¿ã³ã¹ã§ãªããã°ãªããŸãã"
+ 
+ msgid ""
+ "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
+ msgstr ""
+-"E266: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹,€Ž€á€ó€Ê€µ€€: Ruby¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç"
+-"€·€¿."
++"E266: ãã®ã³ãã³ãã¯ç¡å¹ã§ã,ããããªãã: Rubyã©ã€ãã©ãªãã­ãŒãã§ããŸããã§"
++"ãã."
+ 
+ msgid "E267: unexpected return"
+-msgstr "E267: ÍœŽü€»€Ì return €Ç€¹"
++msgstr "E267: äºæãã¬ return ã§ã"
+ 
+ msgid "E268: unexpected next"
+-msgstr "E268: ÍœŽü€»€Ì next €Ç€¹"
++msgstr "E268: äºæãã¬ next ã§ã"
+ 
+ msgid "E269: unexpected break"
+-msgstr "E269: ÍœŽü€»€Ì break €Ç€¹"
++msgstr "E269: äºæãã¬ break ã§ã"
+ 
+ msgid "E270: unexpected redo"
+-msgstr "E270: ÍœŽü€»€Ì redo €Ç€¹"
++msgstr "E270: äºæãã¬ redo ã§ã"
+ 
+ msgid "E271: retry outside of rescue clause"
+-msgstr "E271: rescue €Î³°€Î retry €Ç€¹"
++msgstr "E271: rescue ã®å€ã® retry ã§ã"
+ 
+ msgid "E272: unhandled exception"
+-msgstr "E272: Œè€ê°·€ï€ì€Ê€«€Ã€¿Îã³°€¬€¢€ê€Þ€¹"
++msgstr "E272: åãæ±ãããªãã£ãäŸå€ããããŸã"
+ 
+ #, c-format
+ msgid "E273: unknown longjmp status %d"
+-msgstr "E273: Ì€ÃÎ€ÎlongjmpŸõÂÖ: %d"
++msgstr "E273: æªç¥ã®longjmpç¶æ
+: %d"
+ 
+ msgid "Toggle implementation/definition"
+-msgstr "ŒÂÁõ€ÈÄêµÁ€òÀÚ€êÂØ€š€ë"
++msgstr "å®è£
+ãšå®çŸ©ãåãæ¿ãã"
+ 
+ msgid "Show base class of"
+-msgstr "Œ¡€Î¥¯¥é¥¹€ÎŽðÄì€òÉœŒš"
++msgstr "æ¬¡ã®ã¯ã©ã¹ã®åºåºãè¡šç€º"
+ 
+ msgid "Show overridden member function"
+-msgstr "¥ª¡Œ¥Ð¡Œ¥é¥€¥É€µ€ì€¿¥á¥ó¥ÐŽØ¿ô€òÉœŒš"
++msgstr "ãªãŒããŒã©ã€ããããã¡ã³ãé¢æ°ãè¡šç€º"
+ 
+ msgid "Retrieve from file"
+-msgstr "¥Õ¥¡¥€¥ë€«€é²óÉü€¹€ë"
++msgstr "ãã¡ã€ã«ããååŸ©ãã"
+ 
+ msgid "Retrieve from project"
+-msgstr "¥×¥í¥ž¥§¥¯¥È€«€é²óÉü€¹€ë"
++msgstr "ãã­ãžã§ã¯ãããååŸ©ãã"
+ 
+ msgid "Retrieve from all projects"
+-msgstr "ÁŽ€Æ€Î¥×¥í¥ž¥§¥¯¥È€«€é²óÉü€¹€ë"
++msgstr "å
+šãŠã®ãã­ãžã§ã¯ãããååŸ©ãã"
+ 
+ msgid "Retrieve"
+-msgstr "²óÉü"
++msgstr "ååŸ©"
+ 
+ msgid "Show source of"
+-msgstr "Œ¡€Î¥œ¡Œ¥¹€òÉœŒš€¹€ë"
++msgstr "æ¬¡ã®ãœãŒã¹ãè¡šç€ºãã"
+ 
+ msgid "Find symbol"
+-msgstr "€ß€Ä€±€¿¥·¥ó¥Ü¥ë"
++msgstr "èŠã€ããã·ã³ãã«"
+ 
+ msgid "Browse class"
+-msgstr "¥¯¥é¥¹€ò»²ŸÈ"
++msgstr "ã¯ã©ã¹ãåç
+§"
+ 
+ msgid "Show class in hierarchy"
+-msgstr "³¬ÁØ€Ç¥¯¥é¥¹€òÉœŒš"
++msgstr "éå±€ã§ã¯ã©ã¹ãè¡šç€º"
+ 
+ msgid "Show class in restricted hierarchy"
+-msgstr "žÂÄê€µ€ì€¿³¬ÁØ€Ç¥¯¥é¥¹€òÉœŒš"
++msgstr "éå®ãããéå±€ã§ã¯ã©ã¹ãè¡šç€º"
+ 
+ msgid "Xref refers to"
+-msgstr "Xref €Î»²ŸÈÀè"
++msgstr "Xref ã®åç
+§å
+"
+ 
+ msgid "Xref referred by"
+-msgstr "Xref €¬»²ŸÈ€µ€ì€ë"
++msgstr "Xref ãåç
+§ããã"
+ 
+ msgid "Xref has a"
+-msgstr "Xref €¬Œ¡€Î€â€Î€ò€â€Ã€Æ€€€Þ€¹"
++msgstr "Xref ãæ¬¡ã®ãã®ããã£ãŠããŸã"
+ 
+ msgid "Xref used by"
+-msgstr "Xref €¬»ÈÍÑ€µ€ì€ë"
++msgstr "Xref ãäœ¿çšããã"
+ 
+ msgid "Show docu of"
+-msgstr "Œ¡€ÎÊžŸÏ€òÉœŒš"
++msgstr "æ¬¡ã®æç« ãè¡šç€º"
+ 
+ msgid "Generate docu for"
+-msgstr "Œ¡€ÎÊžŸÏ€òÀžÀ®"
++msgstr "æ¬¡ã®æç« ãçæ"
+ 
+ msgid ""
+ "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in "
+ "$PATH).\n"
+ msgstr ""
+-"SNiFF+€ËÀÜÂ³€Ç€­€Þ€»€ó. ŽÄ¶­€ò¥Á¥§¥Ã¥¯€·€Æ€¯€À€µ€€(sniffemacs €¬ $PATH €Ë€Ê€±"
+-"€ì€Ð€Ê€ê€Þ€»€ó).\n"
++"SNiFF+ã«æ¥ç¶ã§ããŸãã. ç°å¢ããã§ãã¯ããŠãã ãã(sniffemacs ã $PATH ã«ãªã"
++"ãã°ãªããŸãã).\n"
+ 
+ msgid "E274: Sniff: Error during read. Disconnected"
+-msgstr "E274: Sniff: ÆÉ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿. ÀÚÃÇ€·€Þ€·€¿"
++msgstr "E274: Sniff: èª­èŸŒäž­ã«ãšã©ãŒãçºçããŸãã. åæ­ããŸãã"
+ 
+ msgid "SNiFF+ is currently "
+-msgstr "žœºßSNiFF+ €ÎŸõÂÖ€Ï¡Ö"
++msgstr "çŸåšSNiFF+ ã®ç¶æ
+ã¯ã"
+ 
+ msgid "not "
+-msgstr "Ì€"
++msgstr "æª"
+ 
+ msgid "connected"
+-msgstr "ÀÜÂ³¡×€Ç€¹"
++msgstr "æ¥ç¶ãã§ã"
+ 
+ #, c-format
+ msgid "E275: Unknown SNiFF+ request: %s"
+-msgstr "E275: Ì€ÃÎ€Î SNiFF+ ¥ê¥¯¥š¥¹¥È€Ç€¹: %s"
++msgstr "E275: æªç¥ã® SNiFF+ ãªã¯ãšã¹ãã§ã: %s"
+ 
+ msgid "E276: Error connecting to SNiFF+"
+-msgstr "E276: SNiFF+ €Ø€ÎÀÜÂ³Ãæ€Î¥š¥é¡Œ€Ç€¹"
++msgstr "E276: SNiFF+ ãžã®æ¥ç¶äž­ã®ãšã©ãŒã§ã"
+ 
+ msgid "E278: SNiFF+ not connected"
+-msgstr "E278: SNiFF+ €ËÀÜÂ³€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E278: SNiFF+ ã«æ¥ç¶ãããŠããŸãã"
+ 
+ msgid "E279: Not a SNiFF+ buffer"
+-msgstr "E279: SNiFF+ ¥Ð¥Ã¥Õ¥¡€¬€¢€ê€Þ€»€ó"
++msgstr "E279: SNiFF+ ãããã¡ããããŸãã"
+ 
+ msgid "Sniff: Error during write. Disconnected"
+-msgstr "Sniff: œñ¹þ€ßÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€¿€Î€ÇÀÚÃÇ€·€Þ€·€¿"
++msgstr "Sniff: æžèŸŒã¿äž­ã«ãšã©ãŒãçºçããã®ã§åæ­ããŸãã"
+ 
+ msgid "invalid buffer number"
+-msgstr "Ìµžú€Ê¥Ð¥Ã¥Õ¥¡ÈÖ¹æ€Ç€¹"
++msgstr "ç¡å¹ãªãããã¡çªå·ã§ã"
+ 
+ msgid "not implemented yet"
+-msgstr "€Þ€ÀŒÂÁõ€µ€ì€Æ€€€Þ€»€ó"
++msgstr "ãŸã å®è£
+ãããŠããŸãã"
+ 
+ #. ???
+ msgid "cannot set line(s)"
+-msgstr "¹Ô€òÀßÄê€Ç€­€Þ€»€ó"
++msgstr "è¡ãèš­å®ã§ããŸãã"
++
++msgid "invalid mark name"
++msgstr "ç¡å¹ãªããŒã¯åã§ã"
+ 
+ msgid "mark not set"
+-msgstr "¥Þ¡Œ¥¯€ÏÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++msgstr "ããŒã¯ã¯èš­å®ãããŠããŸãã"
+ 
+ #, c-format
+ msgid "row %d column %d"
+-msgstr "¹Ô %d Îó %d"
++msgstr "è¡ %d å %d"
+ 
+ msgid "cannot insert/append line"
+-msgstr "¹Ô€ÎÁÞÆþ/ÄÉ²Ã€ò€Ç€­€Þ€»€ó"
++msgstr "è¡ã®æ¿å
+¥/è¿œå ãã§ããŸãã"
++
++msgid "line number out of range"
++msgstr "ç¯å²å€ã®è¡çªå·ã§ã"
+ 
+ msgid "unknown flag: "
+-msgstr "Ì€ÃÎ€Î¥Õ¥é¥°:"
++msgstr "æªç¥ã®ãã©ã°: "
+ 
+ msgid "unknown vimOption"
+-msgstr "Ì€ÃÎ€Î vimOption €Ç€¹"
++msgstr "æªç¥ã® vimOption ã§ã"
+ 
+ msgid "keyboard interrupt"
+-msgstr "¥­¡Œ¥Ü¡Œ¥É³ä¹þ€ß"
++msgstr "ã­ãŒããŒãå²èŸŒã¿"
+ 
+ msgid "vim error"
+-msgstr "vim ¥š¥é¡Œ"
++msgstr "vim ãšã©ãŒ"
+ 
+ msgid "cannot create buffer/window command: object is being deleted"
+ msgstr ""
+-"¥Ð¥Ã¥Õ¥¡/¥Š¥£¥ó¥É¥ŠºîÀ®¥³¥Þ¥ó¥É€òºîÀ®€Ç€­€Þ€»€ó: ¥ª¥Ö¥ž¥§¥¯¥È€¬ŸÃµî€µ€ì€Æ€€€Þ"
+-"€·€¿"
++"ãããã¡/ãŠã£ã³ããŠäœæã³ãã³ããäœæã§ããŸãã: ãªããžã§ã¯ããæ¶å»ãããŠããŸ"
++"ãã"
+ 
+ msgid ""
+ "cannot register callback command: buffer/window is already being deleted"
+ msgstr ""
+-"¥³¡Œ¥ë¥Ð¥Ã¥¯¥³¥Þ¥ó¥É€òÅÐÏ¿€Ç€­€Þ€»€ó: ¥Ð¥Ã¥Õ¥¡/¥Š¥£¥ó¥É¥Š€¬Žû€ËŸÃµî€µ€ì€Þ€·€¿"
++"ã³ãŒã«ããã¯ã³ãã³ããç»é²ã§ããŸãã: ãããã¡/ãŠã£ã³ããŠãæ¢ã«æ¶å»ãããŸãã"
+ 
+ #. This should never happen.  Famous last word?
+ msgid ""
+ "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim."
+ "org"
+ msgstr ""
+-"E280: TCL Ã×Ì¿Åª¥š¥é¡Œ: reflist ±øÀ÷!? vim-dev@vim.org €ËÊó¹ð€·€Æ€¯€À€µ€€"
++"E280: TCL èŽåœçãšã©ãŒ: reflist æ±æ!? vim-dev@vim.org ã«å ±åããŠãã ãã"
+ 
+ msgid "cannot register callback command: buffer/window reference not found"
+ msgstr ""
+-"¥³¡Œ¥ë¥Ð¥Ã¥¯¥³¥Þ¥ó¥É€òÅÐÏ¿€Ç€­€Þ€»€ó: ¥Ð¥Ã¥Õ¥¡/¥Š¥£¥ó¥É¥Š€Î»²ŸÈ€¬€ß€Ä€«€ê€Þ€»"
+-"€ó"
++"ã³ãŒã«ããã¯ã³ãã³ããç»é²ã§ããŸãã: ãããã¡/ãŠã£ã³ããŠã®åç
+§ãèŠã€ãããŸã"
++"ã"
+ 
+ msgid ""
+ "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
+ msgstr ""
+-"E571: €³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹,€Ž€á€ó€Ê€µ€€: Tcl¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç"
+-"€·€¿."
+-
+-msgid ""
+-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+-msgstr ""
+-"E281: TCL ¥š¥é¡Œ: œªÎ»¥³¡Œ¥É€¬À°¿ôÃÍ€Ç€Ï€¢€ê€Þ€»€ó!? vim-dev@vim.org €ËÊó¹ð€·"
+-"€Æ€¯€À€µ€€"
++"E571: ãã®ã³ãã³ãã¯ç¡å¹ã§ã,ããããªãã: Tclã©ã€ãã©ãªãã­ãŒãã§ããŸããã§"
++"ãã."
+ 
+ #, c-format
+ msgid "E572: exit code %d"
+-msgstr "E572: œªÎ»¥³¡Œ¥É %d"
++msgstr "E572: çµäºã³ãŒã %d"
+ 
+ msgid "cannot get line"
+-msgstr "¹Ô€òŒèÆÀ€Ç€­€Þ€»€ó"
++msgstr "è¡ãååŸã§ããŸãã"
+ 
+ msgid "Unable to register a command server name"
+-msgstr "Ì¿Îá¥µ¡Œ¥Ð€ÎÌŸÁ°€òÅÐÏ¿€Ç€­€Þ€»€ó"
++msgstr "åœä»€ãµãŒãã®ååãç»é²ã§ããŸãã"
+ 
+ msgid "E248: Failed to send command to the destination program"
+-msgstr "E248: ÌÜÅª€Î¥×¥í¥°¥é¥à€Ø€Î¥³¥Þ¥ó¥ÉÁ÷¿®€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E248: ç®çã®ãã­ã°ã©ã ãžã®ã³ãã³ãéä¿¡ã«å€±æããŸãã"
+ 
+ #, c-format
+ msgid "E573: Invalid server id used: %s"
+-msgstr "E573: Ìµžú€Ê¥µ¡Œ¥ÐID€¬»È€ï€ì€Þ€·€¿: %s"
++msgstr "E573: ç¡å¹ãªãµãŒãIDãäœ¿ãããŸãã: %s"
+ 
+ msgid "E251: VIM instance registry property is badly formed.  Deleted!"
+-msgstr "E251: VIM ŒÂÂÎ€ÎÅÐÏ¿¥×¥í¥Ñ¥Æ¥£€¬ÉÔÀµ€Ç€¹. ŸÃµî€·€Þ€·€¿!"
++msgstr "E251: VIM å®äœã®ç»é²ãã­ããã£ãäžæ­£ã§ã. æ¶å»ããŸãã!"
+ 
+ msgid "Unknown option argument"
+-msgstr "Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó°ú¿ô€Ç€¹"
++msgstr "æªç¥ã®ãªãã·ã§ã³åŒæ°ã§ã"
+ 
+ msgid "Too many edit arguments"
+-msgstr "ÊÔœž°ú¿ô€¬Â¿²á€®€Þ€¹"
++msgstr "ç·šéåŒæ°ãå€éããŸã"
+ 
+ msgid "Argument missing after"
+-msgstr "°ú¿ô€¬€¢€ê€Þ€»€ó"
++msgstr "åŒæ°ããããŸãã"
+ 
+ msgid "Garbage after option argument"
+-msgstr "¥ª¥×¥·¥ç¥ó°ú¿ô€Îžå€Ë¥Ž¥ß€¬€¢€ê€Þ€¹"
++msgstr "ãªãã·ã§ã³åŒæ°ã®åŸã«ãŽãããããŸã"
+ 
+ msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+-msgstr "\"+command\", \"-c command\", \"--cmd command\" €Î°ú¿ô€¬Â¿²á€®€Þ€¹"
++msgstr "\"+command\", \"-c command\", \"--cmd command\" ã®åŒæ°ãå€éããŸã"
+ 
+ msgid "Invalid argument for"
+-msgstr "Ìµžú€Ê°ú¿ô€Ç€¹: "
++msgstr "ç¡å¹ãªåŒæ°ã§ã: "
+ 
+ #, c-format
+ msgid "%d files to edit\n"
+-msgstr "%d žÄ€Î¥Õ¥¡¥€¥ë€¬ÊÔœž€ò¹µ€š€Æ€€€Þ€¹\n"
++msgstr "%d åã®ãã¡ã€ã«ãç·šéãæ§ããŠããŸã\n"
++
++msgid "netbeans is not supported with this GUI\n"
++msgstr "netbeans ã¯ãã®GUIã§ã¯å©çšã§ããŸãã\n"
+ 
+ msgid "This Vim was not compiled with the diff feature."
+-msgstr "€³€ÎVim€Ë€Ïdiffµ¡Çœ€¬€¢€ê€Þ€»€ó(¥³¥ó¥Ñ¥€¥ë»þÀßÄê)."
++msgstr "ãã®Vimã«ã¯diffæ©èœããããŸãã(ã³ã³ãã€ã«æèš­å®)."
++
++msgid "'-nb' cannot be used: not enabled at compile time\n"
++msgstr "'-nb' äœ¿çšäžå¯èœã§ã: ã³ã³ãã€ã«æã«ç¡å¹ã«ãããŠããŸã\n"
+ 
+ msgid "Attempt to open script file again: \""
+-msgstr "¥¹¥¯¥ê¥×¥È¥Õ¥¡¥€¥ë€òºÆ€Ó³«€€€Æ€ß€Þ€¹: \""
++msgstr "ã¹ã¯ãªãããã¡ã€ã«ãåã³éããŠã¿ãŸã: \""
+ 
+ msgid "Cannot open for reading: \""
+-msgstr "ÆÉ¹þÍÑ€È€·€Æ³«€±€Þ€»€ó"
++msgstr "èª­èŸŒçšãšããŠéããŸãã"
+ 
+ msgid "Cannot open for script output: \""
+-msgstr "¥¹¥¯¥ê¥×¥ÈœÐÎÏÍÑ€ò³«€±€Þ€»€ó"
++msgstr "ã¹ã¯ãªããåºåçšãéããŸãã"
+ 
+ msgid "Vim: Error: Failure to start gvim from NetBeans\n"
+-msgstr "Vim: ¥š¥é¡Œ: NetBeans€«€égvim€ò¥¹¥¿¡Œ¥È€Ç€­€Þ€»€ó\n"
++msgstr "Vim: ãšã©ãŒ: NetBeansããgvimãã¹ã¿ãŒãã§ããŸãã\n"
+ 
+ msgid "Vim: Warning: Output is not to a terminal\n"
+-msgstr "Vim: ·Ù¹ð: ÃŒËö€Ø€ÎœÐÎÏ€Ç€Ï€¢€ê€Þ€»€ó\n"
++msgstr "Vim: è­Šå: ç«¯æ«ãžã®åºåã§ã¯ãããŸãã\n"
+ 
+ msgid "Vim: Warning: Input is not from a terminal\n"
+-msgstr "Vim: ·Ù¹ð: ÃŒËö€«€é€ÎÆþÎÏ€Ç€Ï€¢€ê€Þ€»€ó\n"
++msgstr "Vim: è­Šå: ç«¯æ«ããã®å
+¥åã§ã¯ãããŸãã\n"
+ 
+ #. just in case..
+ msgid "pre-vimrc command line"
+-msgstr "vimrcÁ°€Î¥³¥Þ¥ó¥É¥é¥€¥ó"
++msgstr "vimrcåã®ã³ãã³ãã©ã€ã³"
+ 
+ #, c-format
+ msgid "E282: Cannot read from \"%s\""
+-msgstr "E282: \"%s\"€«€éÆÉ¹þ€à€³€È€¬€Ç€­€Þ€»€ó"
++msgstr "E282: \"%s\"ããèª­èŸŒãããšãã§ããŸãã"
+ 
+ msgid ""
+ "\n"
+ "More info with: \"vim -h\"\n"
+ msgstr ""
+ "\n"
+-"€è€êŸÜºÙ€ÊŸðÊó€Ï: \"vim -h\"\n"
++"ããè©³çŽ°ãªæ
+å ±ã¯: \"vim -h\"\n"
+ 
+ msgid "[file ..]       edit specified file(s)"
+-msgstr "[¥Õ¥¡¥€¥ë..]    €¢€ë¥Õ¥¡¥€¥ë€òÊÔœž€¹€ë"
++msgstr "[ãã¡ã€ã«..]    ãããã¡ã€ã«ãç·šéãã"
+ 
+ msgid "-               read text from stdin"
+-msgstr "-               ÉžœàÆþÎÏ€«€é¥Æ¥­¥¹¥È€òÆÉ¹þ€à"
++msgstr "-               æšæºå
+¥åãããã­ã¹ããèª­èŸŒã"
+ 
+ msgid "-t tag          edit file where tag is defined"
+-msgstr "-t ¥¿¥°         ¥¿¥°€¬ÄêµÁ€µ€ì€¿€È€³€í€«€éÊÔœž€¹€ë"
++msgstr "-t ã¿ã°         ã¿ã°ãå®çŸ©ããããšããããç·šéãã"
+ 
+ msgid "-q [errorfile]  edit file with first error"
+-msgstr "-q [errorfile]  ºÇœé€Î¥š¥é¡Œ€ÇÊÔœž€¹€ë"
++msgstr "-q [errorfile]  æåã®ãšã©ãŒã§ç·šéãã"
+ 
+ msgid ""
+ "\n"
+@@ -2821,24 +2965,24 @@
+ msgstr ""
+ "\n"
+ "\n"
+-"»ÈÍÑË¡:"
++"äœ¿çšæ³:"
+ 
+ msgid " vim [arguments] "
+-msgstr " vim [°ú¿ô]"
++msgstr " vim [åŒæ°] "
+ 
+ msgid ""
+ "\n"
+ "   or:"
+ msgstr ""
+ "\n"
+-"   €â€·€¯€Ï:"
++"   ãããã¯:"
+ 
+ msgid ""
+ "\n"
+ "Where case is ignored prepend / to make flag upper case"
+ msgstr ""
+ "\n"
+-"ÂçŸ®Êž»ú€¬Ìµ»ë€µ€ì€ëŸì¹ç€ÏÂçÊž»ú€Ë€¹€ë€¿€á€Ë / €òÁ°ÃÖ€·€Æ€¯€À€µ€€"
++"å€§å°æå­ãç¡èŠãããå Žåã¯å€§æå­ã«ããããã« / ãåçœ®ããŠãã ãã"
+ 
+ msgid ""
+ "\n"
+@@ -2847,325 +2991,315 @@
+ msgstr ""
+ "\n"
+ "\n"
+-"°ú¿ô:\n"
++"åŒæ°:\n"
+ 
+ msgid "--\t\t\tOnly file names after this"
+-msgstr "--\t\t\t€³€Î€¢€È€Ë€Ï¥Õ¥¡¥€¥ëÌŸ€À€±"
++msgstr "--\t\t\tãã®ããšã«ã¯ãã¡ã€ã«åã ã"
+ 
+ msgid "--literal\t\tDon't expand wildcards"
+-msgstr "--literal\t\t¥ï¥€¥ë¥É¥«¡Œ¥É€òÅž³«€·€Ê€€"
++msgstr "--literal\t\tã¯ã€ã«ãã«ãŒããå±éããªã"
+ 
+ msgid "-register\t\tRegister this gvim for OLE"
+-msgstr "-register\t\t€³€Îgvim€òOLE€È€·€ÆÅÐÏ¿€¹€ë"
++msgstr "-register\t\tãã®gvimãOLEãšããŠç»é²ãã"
+ 
+ msgid "-unregister\t\tUnregister gvim for OLE"
+-msgstr "-unregister\t\tgvim€ÎOLEÅÐÏ¿€ò²òœü€¹€ë"
++msgstr "-unregister\t\tgvimã®OLEç»é²ãè§£é€ãã"
+ 
+ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
+-msgstr "-g\t\t\tGUI€Çµ¯Æ°€¹€ë (\"gvim\" €ÈÆ±€ž)"
++msgstr "-g\t\t\tGUIã§èµ·åãã (\"gvim\" ãšåã)"
+ 
+ msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
+-msgstr "-f or  --nofork\t¥Õ¥©¥¢¥°¥é¥Š¥ó¥É: GUI€ò»Ï€á€ë€È€­€Ëfork€·€Ê€€"
++msgstr "-f or  --nofork\tãã©ã¢ã°ã©ãŠã³ã: GUIãå§ãããšãã«forkããªã"
+ 
+ msgid "-v\t\t\tVi mode (like \"vi\")"
+-msgstr "-v\t\t\tVi¥â¡Œ¥É (\"vi\" €ÈÆ±€ž)"
++msgstr "-v\t\t\tViã¢ãŒã (\"vi\" ãšåã)"
+ 
+ msgid "-e\t\t\tEx mode (like \"ex\")"
+-msgstr "-e\t\t\tEx¥â¡Œ¥É (\"ex\" €ÈÆ±€ž)"
++msgstr "-e\t\t\tExã¢ãŒã (\"ex\" ãšåã)"
++
++msgid "-E\t\t\tImproved Ex mode"
++msgstr "-E\t\t\tæ¹è¯Exã¢ãŒã"
+ 
+ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+-msgstr "-s\t\t\t¥µ¥€¥ì¥ó¥È(¥Ð¥Ã¥Á)¥â¡Œ¥É (\"ex\" ÀìÍÑ)"
++msgstr "-s\t\t\tãµã€ã¬ã³ã(ããã)ã¢ãŒã (\"ex\" å°çš)"
+ 
+ msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+-msgstr "-d\t\t\tº¹Ê¬¥â¡Œ¥É (\"vidiff\" €ÈÆ±€ž)"
++msgstr "-d\t\t\tå·®åã¢ãŒã (\"vidiff\" ãšåã)"
+ 
+ msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+-msgstr "-y\t\t\t¥€¡Œ¥ž¡Œ¥â¡Œ¥É (\"evim\" €ÈÆ±€ž, ¥â¡Œ¥ÉÌµ)"
++msgstr "-y\t\t\tã€ãŒãžãŒã¢ãŒã (\"evim\" ãšåã, ã¢ãŒãç¡)"
+ 
+ msgid "-R\t\t\tReadonly mode (like \"view\")"
+-msgstr "-R\t\t\tÆÉ¹þÀìÍÑ¥â¡Œ¥É (\"view\" €ÈÆ±€ž)"
++msgstr "-R\t\t\tèª­èŸŒå°çšã¢ãŒã (\"view\" ãšåã)"
+ 
+ msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+-msgstr "-Z\t\t\tÀ©žÂ¥â¡Œ¥É (\"rvim\" €ÈÆ±€ž)"
++msgstr "-Z\t\t\tå¶éã¢ãŒã (\"rvim\" ãšåã)"
+ 
+ msgid "-m\t\t\tModifications (writing files) not allowed"
+-msgstr "-m\t\t\tÊÑ¹¹ (¥Õ¥¡¥€¥ëÊÝÂž»þ) €ò€Ç€­€Ê€€€è€Š€Ë€¹€ë"
++msgstr "-m\t\t\tå€æŽ (ãã¡ã€ã«ä¿å­æ) ãã§ããªãããã«ãã"
+ 
+ msgid "-M\t\t\tModifications in text not allowed"
+-msgstr "-M\t\t\t¥Æ¥­¥¹¥È€ÎÊÔœž€ò¹Ô€Ê€š€Ê€€€è€Š€Ë€¹€ë"
++msgstr "-M\t\t\tãã­ã¹ãã®ç·šéãè¡ãªããªãããã«ãã"
+ 
+ msgid "-b\t\t\tBinary mode"
+-msgstr "-b\t\t\t¥Ð¥€¥Ê¥ê¥â¡Œ¥É"
++msgstr "-b\t\t\tãã€ããªã¢ãŒã"
+ 
+ msgid "-l\t\t\tLisp mode"
+-msgstr "-l\t\t\tLisp¥â¡Œ¥É"
++msgstr "-l\t\t\tLispã¢ãŒã"
+ 
+ msgid "-C\t\t\tCompatible with Vi: 'compatible'"
+-msgstr "-C\t\t\tVižßŽ¹¥â¡Œ¥É: 'compatible'"
++msgstr "-C\t\t\tViäºæã¢ãŒã: 'compatible'"
+ 
+ msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
+-msgstr "-N\t\t\tViÈóžßŽ¹¥â¡Œ¥É: 'nocompatible"
++msgstr "-N\t\t\tViéäºæã¢ãŒã: 'nocompatible"
+ 
+ msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
+-msgstr "-V[N][fname]\t\t¥í¥°œÐÎÏÀßÄê [¥ì¥Ù¥ë N] [¥í¥°¥Õ¥¡¥€¥ëÌŸ fname]"
++msgstr "-V[N][fname]\t\tã­ã°åºåèš­å® [ã¬ãã« N] [ã­ã°ãã¡ã€ã«å fname]"
+ 
+ msgid "-D\t\t\tDebugging mode"
+-msgstr "-D\t\t\t¥Ç¥Ð¥Ã¥°¥â¡Œ¥É"
++msgstr "-D\t\t\tãããã°ã¢ãŒã"
+ 
+ msgid "-n\t\t\tNo swap file, use memory only"
+-msgstr "-n\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ò»ÈÍÑ€»€º¥á¥â¥ê€À€±"
++msgstr "-n\t\t\tã¹ã¯ãããã¡ã€ã«ãäœ¿çšããã¡ã¢ãªã ã"
+ 
+ msgid "-r\t\t\tList swap files and exit"
+-msgstr "-r\t\t\t¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€òÎóµó€·œªÎ»"
++msgstr "-r\t\t\tã¹ã¯ãããã¡ã€ã«ãåæãçµäº"
+ 
+ msgid "-r (with file name)\tRecover crashed session"
+-msgstr "-r (¥Õ¥¡¥€¥ëÌŸ)\t¥¯¥é¥Ã¥·¥å€·€¿¥»¥Ã¥·¥ç¥ó€òÉüµ¢"
++msgstr "-r (ãã¡ã€ã«å)\tã¯ã©ãã·ã¥ããã»ãã·ã§ã³ãåŸ©åž°"
+ 
+ msgid "-L\t\t\tSame as -r"
+-msgstr "-L\t\t\t-r€ÈÆ±€ž"
++msgstr "-L\t\t\t-rãšåã"
+ 
+ msgid "-f\t\t\tDon't use newcli to open window"
+-msgstr "-f\t\t\t¥Š¥£¥ó¥É¥Š€ò³«€¯€Î€Ë newcli €ò»ÈÍÑ€·€Ê€€"
++msgstr "-f\t\t\tãŠã£ã³ããŠãéãã®ã« newcli ãäœ¿çšããªã"
+ 
+ msgid "-dev <device>\t\tUse <device> for I/O"
+-msgstr "-dev <device>\t\tI/O€Ë <device> €ò»ÈÍÑ€¹€ë"
++msgstr "-dev <device>\t\tI/Oã« <device> ãäœ¿çšãã"
+ 
+ msgid "-A\t\t\tstart in Arabic mode"
+-msgstr "-A\t\t\t¥¢¥é¥Ó¥¢žì¥â¡Œ¥É€Çµ¯Æ°€¹€ë"
++msgstr "-A\t\t\tã¢ã©ãã¢èªã¢ãŒãã§èµ·åãã"
+ 
+ msgid "-H\t\t\tStart in Hebrew mode"
+-msgstr "-H\t\t\t¥Ø¥Ö¥é¥€žì¥â¡Œ¥É€Çµ¯Æ°€¹€ë"
++msgstr "-H\t\t\tããã©ã€èªã¢ãŒãã§èµ·åãã"
+ 
+ msgid "-F\t\t\tStart in Farsi mode"
+-msgstr "-F\t\t\t¥Ú¥ë¥·¥¢žì¥â¡Œ¥É€Çµ¯Æ°€¹€ë"
++msgstr "-F\t\t\tãã«ã·ã¢èªã¢ãŒãã§èµ·åãã"
+ 
+ msgid "-T <terminal>\tSet terminal type to <terminal>"
+-msgstr "-T <terminal>\tÃŒËö€ò <terminal> €ËÀßÄê€¹€ë"
++msgstr "-T <terminal>\tç«¯æ«ã <terminal> ã«èš­å®ãã"
+ 
+ msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
+-msgstr "-u <vimrc>\t\t.vimrc€ÎÂå€ï€ê€Ë <vimrc> €ò»È€Š"
++msgstr "-u <vimrc>\t\t.vimrcã®ä»£ããã« <vimrc> ãäœ¿ã"
+ 
+ msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
+-msgstr "-U <gvimrc>\t\t.gvimrc€ÎÂå€ï€ê€Ë <gvimrc> €ò»È€Š"
++msgstr "-U <gvimrc>\t\t.gvimrcã®ä»£ããã« <gvimrc> ãäœ¿ã"
+ 
+ msgid "--noplugin\t\tDon't load plugin scripts"
+-msgstr "--noplugin\t\t¥×¥é¥°¥€¥ó¥¹¥¯¥ê¥×¥È€ò¥í¡Œ¥É€·€Ê€€"
++msgstr "--noplugin\t\tãã©ã°ã€ã³ã¹ã¯ãªãããã­ãŒãããªã"
+ 
+ msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
+-msgstr "-p[N]\t\tN žÄ¥¿¥Ö¥Ú¡Œ¥ž€ò³«€¯(ŸÊÎ¬ÃÍ: ¥Õ¥¡¥€¥ë€Ë€Ä€­1žÄ)"
++msgstr "-p[N]\t\tN åã¿ãããŒãžãéã(çç¥å€: ãã¡ã€ã«ã«ã€ã1å)"
+ 
+ msgid "-o[N]\t\tOpen N windows (default: one for each file)"
+-msgstr "-o[N]\t\tN žÄ¥Š¥£¥ó¥É¥Š€ò³«€¯(ŸÊÎ¬ÃÍ: ¥Õ¥¡¥€¥ë€Ë€Ä€­1žÄ)"
++msgstr "-o[N]\t\tN åãŠã£ã³ããŠãéã(çç¥å€: ãã¡ã€ã«ã«ã€ã1å)"
+ 
+ msgid "-O[N]\t\tLike -o but split vertically"
+-msgstr "-O[N]\t\t-o€ÈÆ±€ž€À€¬¿âÄŸÊ¬³ä"
++msgstr "-O[N]\t\t-oãšåãã ãåçŽåå²"
+ 
+ msgid "+\t\t\tStart at end of file"
+-msgstr "+\t\t\t¥Õ¥¡¥€¥ë€ÎºÇžå€«€é€Ï€ž€á€ë"
++msgstr "+\t\t\tãã¡ã€ã«ã®æåŸããã¯ããã"
+ 
+ msgid "+<lnum>\t\tStart at line <lnum>"
+-msgstr "+<lnum>\t\t<lnum> ¹Ô€«€é€Ï€ž€á€ë"
++msgstr "+<lnum>\t\t<lnum> è¡ããã¯ããã"
+ 
+ msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
+-msgstr "--cmd <command>\tvimrc€ò¥í¡Œ¥É€¹€ëÁ°€Ë <command> €òŒÂ¹Ô€¹€ë"
++msgstr "--cmd <command>\tvimrcãã­ãŒãããåã« <command> ãå®è¡ãã"
+ 
+ msgid "-c <command>\t\tExecute <command> after loading the first file"
+-msgstr "-c <command>\t\tºÇœé€Î¥Õ¥¡¥€¥ë€ò¥í¡Œ¥Éžå <command> €òŒÂ¹Ô€¹€ë"
++msgstr "-c <command>\t\tæåã®ãã¡ã€ã«ãã­ãŒãåŸ <command> ãå®è¡ãã"
+ 
+ msgid "-S <session>\t\tSource file <session> after loading the first file"
+-msgstr "-S <session>\t\tºÇœé€Î¥Õ¥¡¥€¥ë€ò¥í¡Œ¥Éžå¥Õ¥¡¥€¥ë <session> €òŒè¹þ€à"
++msgstr "-S <session>\t\tæåã®ãã¡ã€ã«ãã­ãŒãåŸãã¡ã€ã« <session> ãåèŸŒã"
+ 
+ msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
+-msgstr "-s <scriptin>\t¥Õ¥¡¥€¥ë <scriptin> €«€é¥Î¡Œ¥Þ¥ë¥³¥Þ¥ó¥É€òÆÉ¹þ€à"
++msgstr "-s <scriptin>\tãã¡ã€ã« <scriptin> ããããŒãã«ã³ãã³ããèª­èŸŒã"
+ 
+ msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
+-msgstr "-w <scriptout>\tÆþÎÏ€·€¿ÁŽ¥³¥Þ¥ó¥É€ò¥Õ¥¡¥€¥ë <scriptout> €ËÄÉ²Ã€¹€ë"
++msgstr "-w <scriptout>\tå
+¥åããå
+šã³ãã³ãããã¡ã€ã« <scriptout> ã«è¿œå ãã"
+ 
+ msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
+-msgstr "-W <scriptout>\tÆþÎÏ€·€¿ÁŽ¥³¥Þ¥ó¥É€ò¥Õ¥¡¥€¥ë <scriptout> €ËÊÝÂž€¹€ë"
++msgstr "-W <scriptout>\tå
+¥åããå
+šã³ãã³ãããã¡ã€ã« <scriptout> ã«ä¿å­ãã"
+ 
+ msgid "-x\t\t\tEdit encrypted files"
+-msgstr "-x\t\t\t°Å¹æ²œ€µ€ì€¿¥Õ¥¡¥€¥ë€òÊÔœž€¹€ë"
++msgstr "-x\t\t\tæå·åããããã¡ã€ã«ãç·šéãã"
+ 
+ msgid "-display <display>\tConnect vim to this particular X-server"
+-msgstr "-display <display>\tvim€ò»ØÄê€·€¿ X ¥µ¡Œ¥Ð€ËÀÜÂ³€¹€ë"
++msgstr "-display <display>\tvimãæå®ãã X ãµãŒãã«æ¥ç¶ãã"
+ 
+ msgid "-X\t\t\tDo not connect to X server"
+-msgstr "-X\t\t\tX¥µ¡Œ¥Ð€ËÀÜÂ³€·€Ê€€"
++msgstr "-X\t\t\tXãµãŒãã«æ¥ç¶ããªã"
+ 
+ msgid "--remote <files>\tEdit <files> in a Vim server if possible"
+-msgstr "--remote <files>\t²ÄÇœ€Ê€é€ÐVim¥µ¡Œ¥Ð€Ç <files> €òÊÔœž€¹€ë"
++msgstr "--remote <files>\tå¯èœãªãã°VimãµãŒãã§ <files> ãç·šéãã"
+ 
+ msgid "--remote-silent <files>  Same, don't complain if there is no server"
+-msgstr "--remote-silnet <files>  Æ±Ÿå, ¥µ¡Œ¥Ð€¬Ìµ€¯€Æ€â·Ù¹ðÊž€òœÐÎÏ€·€Ê€€"
++msgstr "--remote-silent <files>  åäž, ãµãŒããç¡ããŠãè­Šåæãåºåããªã"
+ 
+ msgid ""
+ "--remote-wait <files>  As --remote but wait for files to have been edited"
+-msgstr "--remote-wait <files>\t--remotežå ¥Õ¥¡¥€¥ë€ÎÊÔœž€¬œª€ï€ë€Î€òÂÔ€Ä"
++msgstr "--remote-wait <files>\t--remoteåŸ ãã¡ã€ã«ã®ç·šéãçµããã®ãåŸ
+ã€"
+ 
+ msgid ""
+ "--remote-wait-silent <files>  Same, don't complain if there is no server"
+-msgstr "--remote-wait-silent <files>  Æ±Ÿå, ¥µ¡Œ¥Ð€¬Ìµ€¯€Æ€â·Ù¹ðÊž€òœÐÎÏ€·€Ê€€"
++msgstr "--remote-wait-silent <files>  åäž, ãµãŒããç¡ããŠãè­Šåæãåºåããªã"
+ 
+ msgid ""
+ "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+ msgstr ""
+-"--remote-tab[-wait][-silent] <files>  --remote€Ç¥Õ¥¡¥€¥ë1€Ä€Ë€Ä€­1€Ä€Î¥¿¥Ö"
+-"¥Ú¡Œ¥ž€ò³«€¯"
++"--remote-tab[-wait][-silent] <files>  --remoteã§ãã¡ã€ã«1ã€ã«ã€ã1ã€ã®ã¿ã"
++"ããŒãžãéã"
+ 
+ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
+-msgstr "--remote-send <keys>\tVim¥µ¡Œ¥Ð€Ë <keys> €òÁ÷¿®€·€ÆœªÎ»€¹€ë"
++msgstr "--remote-send <keys>\tVimãµãŒãã« <keys> ãéä¿¡ããŠçµäºãã"
+ 
+ msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
+-msgstr "--remote-expr <expr>\t¥µ¡Œ¥Ð€Ç <expr> €òŒÂ¹Ô€·€Æ·ë²Ì€òÉœŒš€¹€ë"
++msgstr "--remote-expr <expr>\tãµãŒãã§ <expr> ãå®è¡ããŠçµæãè¡šç€ºãã"
+ 
+ msgid "--serverlist\t\tList available Vim server names and exit"
+-msgstr "--serverlist\t\tVim¥µ¡Œ¥ÐÌŸ€Î°ìÍ÷€òÉœŒš€·€ÆœªÎ»€¹€ë"
++msgstr "--serverlist\t\tVimãµãŒãåã®äžèŠ§ãè¡šç€ºããŠçµäºãã"
+ 
+ msgid "--servername <name>\tSend to/become the Vim server <name>"
+-msgstr "--servename <name>\t\tVim¥µ¡Œ¥Ð <name> €ËÁ÷¿®/ÌŸÁ°ÀßÄê€¹€ë"
++msgstr "--servername <name>\tVimãµãŒã <name> ã«éä¿¡/ååèš­å®ãã"
++
++msgid "--startuptime <file>\tWrite startup timing messages to <file>"
++msgstr "--startuptime <file>\tèµ·åã«ããã£ãæéã®è©³çŽ°ã <file> ãžåºåãã"
+ 
+ msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
+-msgstr "-i <viminfo>\t\t.viminfo€ÎÂå€ï€ê€Ë <viminfo> €ò»È€Š"
++msgstr "-i <viminfo>\t\t.viminfoã®ä»£ããã« <viminfo> ãäœ¿ã"
+ 
+ msgid "-h  or  --help\tPrint Help (this message) and exit"
+-msgstr "-h or  --help\t¥Ø¥ë¥×(€³€Î¥á¥Ã¥»¡Œ¥ž)€òÉœŒš€·œªÎ»€¹€ë"
++msgstr "-h or  --help\tãã«ã(ãã®ã¡ãã»ãŒãž)ãè¡šç€ºãçµäºãã"
+ 
+ msgid "--version\t\tPrint version information and exit"
+-msgstr "--version\t\t¥Ð¡Œ¥ž¥ç¥óŸðÊó€òÉœŒš€·œªÎ»€¹€ë"
++msgstr "--version\t\tããŒãžã§ã³æ
+å ±ãè¡šç€ºãçµäºãã"
+ 
+ msgid ""
+ "\n"
+ "Arguments recognised by gvim (Motif version):\n"
+ msgstr ""
+ "\n"
+-"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(Motif¥Ð¡Œ¥ž¥ç¥ó):\n"
++"gvimã«ãã£ãŠè§£éãããåŒæ°(MotifããŒãžã§ã³):\n"
+ 
+ msgid ""
+ "\n"
+ "Arguments recognised by gvim (neXtaw version):\n"
+ msgstr ""
+ "\n"
+-"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(neXtaw¥Ð¡Œ¥ž¥ç¥ó):\n"
++"gvimã«ãã£ãŠè§£éãããåŒæ°(neXtawããŒãžã§ã³):\n"
+ 
+ msgid ""
+ "\n"
+ "Arguments recognised by gvim (Athena version):\n"
+ msgstr ""
+ "\n"
+-"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(Athena¥Ð¡Œ¥ž¥ç¥ó):\n"
++"gvimã«ãã£ãŠè§£éãããåŒæ°(AthenaããŒãžã§ã³):\n"
+ 
+ msgid "-display <display>\tRun vim on <display>"
+-msgstr "-display <display>\t<display> €Çvim€òŒÂ¹Ô€¹€ë"
++msgstr "-display <display>\t<display> ã§vimãå®è¡ãã"
+ 
+ msgid "-iconic\t\tStart vim iconified"
+-msgstr "-iconic\t\tºÇŸ®²œ€·€¿ŸõÂÖ€Çvim€òµ¯Æ°€¹€ë"
+-
+-msgid "-name <name>\t\tUse resource as if vim was <name>"
+-msgstr "-name <name>\t\tvim€ÎÌŸ€¬ <name> €Ç€¢€ë€È€·€Æ¥ê¥œ¡Œ¥¹€ò»È€Š"
+-
+-msgid "\t\t\t  (Unimplemented)\n"
+-msgstr "\t\t\t  (ŒÂÁõ€µ€ì€Æ€€€Ê€€)\n"
++msgstr "-iconic\t\tæå°åããç¶æ
+ã§vimãèµ·åãã"
+ 
+ msgid "-background <color>\tUse <color> for the background (also: -bg)"
+-msgstr "-background <color>\tÇØ·Ê¿§€Ë <color> €ò»È€Š(Æ±µÁ: -bg)"
++msgstr "-background <color>\tèæ¯è²ã« <color> ãäœ¿ã(åçŸ©: -bg)"
+ 
+ msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
+-msgstr "-foreground <color>\tÁ°·Ê¿§€Ë <color> €ò»È€Š(Æ±µÁ: -fg)"
++msgstr "-foreground <color>\tåæ¯è²ã« <color> ãäœ¿ã(åçŸ©: -fg)"
+ 
+ msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
+-msgstr "-font <font>\t\t¥Æ¥­¥¹¥ÈÉœŒš€Ë <font> €ò»È€Š(Æ±µÁ: -fn)"
++msgstr "-font <font>\t\tãã­ã¹ãè¡šç€ºã« <font> ãäœ¿ã(åçŸ©: -fn)"
+ 
+ msgid "-boldfont <font>\tUse <font> for bold text"
+-msgstr "-boldfont <font>\tÂÀ»ú€Ë <font> €ò»È€Š"
++msgstr "-boldfont <font>\tå€ªå­ã« <font> ãäœ¿ã"
+ 
+ msgid "-italicfont <font>\tUse <font> for italic text"
+-msgstr "-italicfont <for>\tŒÐÂÎ»ú€Ë <font> €ò»È€Š"
++msgstr "-italicfont <for>\tæäœå­ã« <font> ãäœ¿ã"
+ 
+ msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
+-msgstr "-geometry <geom>\tœéŽüÇÛÃÖ€Ë <geom> €ò»È€Š(Æ±µÁ: -geom)"
++msgstr "-geometry <geom>\tåæé
+çœ®ã« <geom> ãäœ¿ã(åçŸ©: -geom)"
+ 
+ msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
+-msgstr "-borderwidth <width>\t¶­³Š€ÎÉý€ò <width> €Ë€¹€ë(Æ±µÁ: -bw)"
++msgstr "-borderwidth <width>\tå¢çã®å¹
+ã <width> ã«ãã(åçŸ©: -bw)"
+ 
+ msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
+ msgstr ""
+-"-scrollbarwidth <width>  ¥¹¥¯¥í¡Œ¥ë¥Ð¡Œ€ÎÉý€ò <width> €Ë€¹€ë(Æ±µÁ: -sw)"
++"-scrollbarwidth <width>  ã¹ã¯ã­ãŒã«ããŒã®å¹
+ã <width> ã«ãã(åçŸ©: -sw)"
+ 
+ msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
+-msgstr "-menuheight <height>\t¥á¥Ë¥å¡Œ¥Ð¡Œ€Î¹â€µ€ò <height> €Ë€¹€ë(Æ±µÁ: -mh)"
++msgstr "-menuheight <height>\tã¡ãã¥ãŒããŒã®é«ãã <height> ã«ãã(åçŸ©: -mh)"
+ 
+ msgid "-reverse\t\tUse reverse video (also: -rv)"
+-msgstr "-reverse\t\tÈ¿ÅŸ±ÇÁü€ò»ÈÍÑ€¹€ë(Æ±µÁ: -rv)"
++msgstr "-reverse\t\tåè»¢æ åãäœ¿çšãã(åçŸ©: -rv)"
+ 
+ msgid "+reverse\t\tDon't use reverse video (also: +rv)"
+-msgstr "+reverse\t\tÈ¿ÅŸ±ÇÁü€ò»ÈÍÑ€·€Ê€€(Æ±µÁ: +rv)"
++msgstr "+reverse\t\tåè»¢æ åãäœ¿çšããªã(åçŸ©: +rv)"
+ 
+ msgid "-xrm <resource>\tSet the specified resource"
+-msgstr "-xrm <resource>\tÆÃÄê€Î¥ê¥œ¡Œ¥¹€ò»ÈÍÑ€¹€ë"
+-
+-msgid ""
+-"\n"
+-"Arguments recognised by gvim (RISC OS version):\n"
+-msgstr ""
+-"\n"
+-"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(RISC OS¥Ð¡Œ¥ž¥ç¥ó):\n"
+-
+-msgid "--columns <number>\tInitial width of window in columns"
+-msgstr "--columns <number>\tœéŽü€Î¥Š¥£¥ó¥É¥Š€Î¥³¥é¥àÃ±°Ì€ÎÉý"
+-
+-msgid "--rows <number>\tInitial height of window in rows"
+-msgstr "--rows <number>\tœéŽü€Î¥Š¥£¥ó¥É¥Š€Î¹ÔÃ±°Ì€Î¹â€µ"
++msgstr "-xrm <resource>\tç¹å®ã®ãªãœãŒã¹ãäœ¿çšãã"
+ 
+ msgid ""
+ "\n"
+ "Arguments recognised by gvim (GTK+ version):\n"
+ msgstr ""
+ "\n"
+-"gvim€Ë€è€Ã€Æ²òŒá€µ€ì€ë°ú¿ô(GTK+¥Ð¡Œ¥ž¥ç¥ó):\n"
++"gvimã«ãã£ãŠè§£éãããåŒæ°(GTK+ããŒãžã§ã³):\n"
+ 
+ msgid "-display <display>\tRun vim on <display> (also: --display)"
+-msgstr "-display <display>\t<display> €Çvim€òŒÂ¹Ô€¹€ë(Æ±µÁ: --display)"
++msgstr "-display <display>\t<display> ã§vimãå®è¡ãã(åçŸ©: --display)"
+ 
+ msgid "--role <role>\tSet a unique role to identify the main window"
+-msgstr "--role <role>\t¥á¥€¥ó¥Š¥£¥ó¥É¥Š€òŒ±ÊÌ€¹€ë°ì°Õ€ÊÌò³ä(role)€òÀßÄê€¹€ë"
++msgstr "--role <role>\tã¡ã€ã³ãŠã£ã³ããŠãè­å¥ããäžæãªåœ¹å²(role)ãèš­å®ãã"
+ 
+ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+-msgstr "--socketid <xid>\t°Û€Ê€ëGTK widget€ÇVim€ò³«€¯"
++msgstr "--socketid <xid>\tç°ãªãGTK widgetã§Vimãéã"
++
++msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++msgstr "--echo-wid\t\tãŠã£ã³ããŠIDãæšæºåºåã«åºåãã"
+ 
+ msgid "-P <parent title>\tOpen Vim inside parent application"
+-msgstr "-P <¿Æ€Î¥¿¥€¥È¥ë>\tVim€ò¿Æ¥¢¥×¥ê¥±¡Œ¥·¥ç¥ó€ÎÃæ€Çµ¯Æ°€¹€ë"
++msgstr "-P <èŠªã®ã¿ã€ãã«>\tVimãèŠªã¢ããªã±ãŒã·ã§ã³ã®äž­ã§èµ·åãã"
+ 
+ msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
+-msgstr "--windowid <HWND>\t°Û€Ê€ëWin32 widget€ÎÆâÉô€ËVim€ò³«€¯"
++msgstr "--windowid <HWND>\tç°ãªãWin32 widgetã®å
+éšã«Vimãéã"
+ 
+ msgid "No display"
+-msgstr "¥Ç¥£¥¹¥×¥ì¥€€¬ž«€Ä€«€ê€Þ€»€ó"
++msgstr "ãã£ã¹ãã¬ã€ãèŠã€ãããŸãã"
+ 
+ #. Failed to send, abort.
+ msgid ": Send failed.\n"
+-msgstr ": Á÷¿®€ËŒºÇÔ€·€Þ€·€¿.\n"
++msgstr ": éä¿¡ã«å€±æããŸãã.\n"
+ 
+ #. Let vim start normally.
+ msgid ": Send failed. Trying to execute locally\n"
+-msgstr ": Á÷¿®€ËŒºÇÔ€·€Þ€·€¿. ¥í¡Œ¥«¥ë€Ç€ÎŒÂ¹Ô€ò»î€ß€Æ€€€Þ€¹\n"
++msgstr ": éä¿¡ã«å€±æããŸãã. ã­ãŒã«ã«ã§ã®å®è¡ãè©Šã¿ãŠããŸã\n"
+ 
+ #, c-format
+ msgid "%d of %d edited"
+-msgstr "%d žÄ (%d žÄÃæ) €Î¥Õ¥¡¥€¥ë€òÊÔœž€·€Þ€·€¿"
++msgstr "%d å (%d åäž­) ã®ãã¡ã€ã«ãç·šéããŸãã"
+ 
+ msgid "No display: Send expression failed.\n"
+-msgstr "¥Ç¥£¥¹¥×¥ì¥€€¬€¢€ê€Þ€»€ó: Œ°€ÎÁ÷¿®€ËŒºÇÔ€·€Þ€·€¿.\n"
++msgstr "ãã£ã¹ãã¬ã€ããããŸãã: åŒã®éä¿¡ã«å€±æããŸãã.\n"
+ 
+ msgid ": Send expression failed.\n"
+-msgstr ": Œ°€ÎÁ÷¿®€ËŒºÇÔ€·€Þ€·€¿.\n"
++msgstr ": åŒã®éä¿¡ã«å€±æããŸãã.\n"
+ 
+ msgid "No marks set"
+-msgstr "¥Þ¡Œ¥¯€¬ÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++msgstr "ããŒã¯ãèš­å®ãããŠããŸãã"
+ 
+ #, c-format
+ msgid "E283: No marks matching \"%s\""
+-msgstr "E283: \"%s\" €Ë³ºÅö€¹€ë¥Þ¡Œ¥¯€¬€¢€ê€Þ€»€ó"
++msgstr "E283: \"%s\" ã«è©²åœããããŒã¯ããããŸãã"
+ 
+ #. Highlight title
+ msgid ""
+@@ -3173,7 +3307,7 @@
+ "mark line  col file/text"
+ msgstr ""
+ "\n"
+-"mark   ¹Ô   Îó ¥Õ¥¡¥€¥ë/¥Æ¥­¥¹¥È"
++"mark   è¡   å ãã¡ã€ã«/ãã­ã¹ã"
+ 
+ #. Highlight title
+ msgid ""
+@@ -3181,7 +3315,7 @@
+ " jump line  col file/text"
+ msgstr ""
+ "\n"
+-" jump   ¹Ô   Îó ¥Õ¥¡¥€¥ë/¥Æ¥­¥¹¥È"
++" jump   è¡   å ãã¡ã€ã«/ãã­ã¹ã"
+ 
+ #. Highlight title
+ msgid ""
+@@ -3189,452 +3323,485 @@
+ "change line  col text"
+ msgstr ""
+ "\n"
+-"ÊÑ¹¹   ¹Ô    Îó  ¥Æ¥­¥¹¥È"
++"å€æŽ   è¡    å  ãã­ã¹ã"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+ msgstr ""
+ "\n"
+-"# ¥Õ¥¡¥€¥ë¥Þ¡Œ¥¯:\n"
++"# ãã¡ã€ã«ããŒã¯:\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+ msgstr ""
+ "\n"
+-"# ¥ž¥ã¥ó¥×¥ê¥¹¥È (¿·€·€€€â€Î€¬Àè):\n"
++"# ãžã£ã³ããªã¹ã (æ°ãããã®ãå
+):\n"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+ msgstr ""
+ "\n"
+-"# ¥Õ¥¡¥€¥ëÆâ¥Þ¡Œ¥¯€ÎÍúÎò (¿·€·€€€â€Î€«€éžÅ€€€â€Î):\n"
++"# ãã¡ã€ã«å
+ããŒã¯ã®å±¥æ­Ž (æ°ãããã®ããå€ããã®):\n"
+ 
+ msgid "Missing '>'"
+-msgstr "'>' €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "'>' ãèŠã€ãããŸãã"
+ 
+ msgid "E543: Not a valid codepage"
+-msgstr "E543: Ìµžú€Ê¥³¡Œ¥É¥Ú¡Œ¥ž€Ç€¹"
++msgstr "E543: ç¡å¹ãªã³ãŒãããŒãžã§ã"
+ 
+ msgid "E284: Cannot set IC values"
+-msgstr "E284: IC€ÎÃÍ€òÀßÄê€Ç€­€Þ€»€ó"
++msgstr "E284: ICã®å€ãèš­å®ã§ããŸãã"
+ 
+ msgid "E285: Failed to create input context"
+-msgstr "E285: ¥€¥ó¥×¥Ã¥È¥³¥ó¥Æ¥­¥¹¥È€ÎºîÀ®€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E285: ã€ã³ãããã³ã³ãã­ã¹ãã®äœæã«å€±æããŸãã"
+ 
+ msgid "E286: Failed to open input method"
+-msgstr "E286: ¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É€Î¥ª¡Œ¥×¥ó€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E286: ã€ã³ãããã¡ãœããã®ãªãŒãã³ã«å€±æããŸãã"
+ 
+ msgid "E287: Warning: Could not set destroy callback to IM"
+-msgstr "E287: ·Ù¹ð: IM€ÎÇË²õ¥³¡Œ¥ë¥Ð¥Ã¥¯€òÀßÄê€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "E287: è­Šå: IMã®ç Žå£ã³ãŒã«ããã¯ãèš­å®ã§ããŸããã§ãã"
+ 
+ msgid "E288: input method doesn't support any style"
+-msgstr "E288: ¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É€Ï€É€ó€Ê¥¹¥¿¥€¥ë€â¥µ¥Ý¡Œ¥È€·€Þ€»€ó"
++msgstr "E288: ã€ã³ãããã¡ãœããã¯ã©ããªã¹ã¿ã€ã«ããµããŒãããŸãã"
+ 
+ msgid "E289: input method doesn't support my preedit type"
+-msgstr "E289: ¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É€Ï my preedit type €ò¥µ¥Ý¡Œ¥È€·€Þ€»€ó"
+-
+-msgid "E290: over-the-spot style requires fontset"
+-msgstr "E290: over-the-spot ¥¹¥¿¥€¥ë€Ë€Ïfontset€¬É¬Í×€Ç€¹"
+-
+-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
+-msgstr "E291: GTK+€¬1.2.3€è€ê€âžÅ€€€Î€Ç¥¹¥Æ¡Œ¥¿¥¹¥š¥ê¥¢€¬Ìµžú€Ç€¹"
+-
+-msgid "E292: Input Method Server is not running"
+-msgstr "E292: ¥€¥ó¥×¥Ã¥È¥á¥œ¥Ã¥É¥µ¡Œ¥Ð €¬Æ°ºî€·€Æ€€€Þ€»€ó"
++msgstr "E289: ã€ã³ãããã¡ãœããã¯ my preedit type ããµããŒãããŸãã"
+ 
+ msgid "E293: block was not locked"
+-msgstr "E293: ¥Ö¥í¥Ã¥¯€¬¥í¥Ã¥¯€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E293: ãã­ãã¯ãã­ãã¯ãããŠããŸãã"
+ 
+ msgid "E294: Seek error in swap file read"
+-msgstr "E294: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ëÆÉ¹þ»þ€Ë¥·¡Œ¥¯¥š¥é¡Œ€Ç€¹"
++msgstr "E294: ã¹ã¯ãããã¡ã€ã«èª­èŸŒæã«ã·ãŒã¯ãšã©ãŒã§ã"
+ 
+ msgid "E295: Read error in swap file"
+-msgstr "E295: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ÎÆÉ¹þ€ß¥š¥é¡Œ€Ç€¹"
++msgstr "E295: ã¹ã¯ãããã¡ã€ã«ã®èª­èŸŒã¿ãšã©ãŒã§ã"
+ 
+ msgid "E296: Seek error in swap file write"
+-msgstr "E296: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ëœñ¹þ€ß»þ€Ë¥·¡Œ¥¯¥š¥é¡Œ€Ç€¹"
++msgstr "E296: ã¹ã¯ãããã¡ã€ã«æžèŸŒã¿æã«ã·ãŒã¯ãšã©ãŒã§ã"
+ 
+ msgid "E297: Write error in swap file"
+-msgstr "E297: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Îœñ¹þ€ß¥š¥é¡Œ€Ç€¹"
++msgstr "E297: ã¹ã¯ãããã¡ã€ã«ã®æžèŸŒã¿ãšã©ãŒã§ã"
+ 
+ msgid "E300: Swap file already exists (symlink attack?)"
+-msgstr "E300: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Žû€ËÂžºß€·€Þ€¹ (symlink€Ë€è€ë¹¶·â?)"
++msgstr "E300: ã¹ã¯ãããã¡ã€ã«ãæ¢ã«å­åšããŸã (symlinkã«ããæ»æ?)"
+ 
+ msgid "E298: Didn't get block nr 0?"
+-msgstr "E298: ¥Ö¥í¥Ã¥¯ 0 €òŒèÆÀ€Ç€­€Þ€»€ó?"
++msgstr "E298: ãã­ãã¯ 0 ãååŸã§ããŸãã?"
+ 
+ msgid "E298: Didn't get block nr 1?"
+-msgstr "E298: ¥Ö¥í¥Ã¥¯ 1 €òŒèÆÀ€Ç€­€Þ€»€ó?"
++msgstr "E298: ãã­ãã¯ 1 ãååŸã§ããŸãã?"
+ 
+ msgid "E298: Didn't get block nr 2?"
+-msgstr "E298: ¥Ö¥í¥Ã¥¯ 2 €òŒèÆÀ€Ç€­€Þ€»€ó?"
++msgstr "E298: ãã­ãã¯ 2 ãååŸã§ããŸãã?"
++
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: ã¹ã¯ãããã¡ã€ã«ã®æå·ãæŽæ°äž­ã«ãšã©ãŒãçºçããŸãã"
+ 
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+-msgstr "E301: €ª€Ã€È, ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Œº€ï€ì€Þ€·€¿!!!"
++msgstr "E301: ãã£ãš, ã¹ã¯ãããã¡ã€ã«ãå€±ãããŸãã!!!"
+ 
+ msgid "E302: Could not rename swap file"
+-msgstr "E302: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ÎÌŸÁ°€òÊÑ€š€é€ì€Þ€»€ó"
++msgstr "E302: ã¹ã¯ãããã¡ã€ã«ã®ååãå€ããããŸãã"
+ 
+ #, c-format
+ msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
+-msgstr "E303: \"%s\" €Î¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ò³«€±€Ê€€€Î€Ç¥ê¥«¥Ð¥ê€ÏÉÔ²ÄÇœ€Ç€¹"
++msgstr "E303: \"%s\" ã®ã¹ã¯ãããã¡ã€ã«ãéããªãã®ã§ãªã«ããªã¯äžå¯èœã§ã"
+ 
+ msgid "E304: ml_upd_block0(): Didn't get block 0??"
+-msgstr "E304: ml_upd_block0(): ¥Ö¥í¥Ã¥¯ 0 €òŒèÆÀ€Ç€­€Þ€»€ó€Ç€·€¿??"
++msgstr "E304: ml_upd_block0(): ãã­ãã¯ 0 ãååŸã§ããŸããã§ãã??"
+ 
+ #, c-format
+ msgid "E305: No swap file found for %s"
+-msgstr "E305: %s €Ë€Ï¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E305: %s ã«ã¯ã¹ã¯ãããã¡ã€ã«ãèŠã€ãããŸãã"
+ 
+ msgid "Enter number of swap file to use (0 to quit): "
+-msgstr "»ÈÍÑ€¹€ë¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ÎÈÖ¹æ€òÆþÎÏ€·€Æ€¯€À€µ€€(0 €ÇœªÎ»): "
++msgstr "äœ¿çšããã¹ã¯ãããã¡ã€ã«ã®çªå·ãå
+¥åããŠãã ãã(0 ã§çµäº): "
+ 
+ #, c-format
+ msgid "E306: Cannot open %s"
+-msgstr "E306: %s €ò³«€±€Þ€»€ó"
++msgstr "E306: %s ãéããŸãã"
+ 
+ msgid "Unable to read block 0 from "
+-msgstr "¥Ö¥í¥Ã¥¯ 0 €òÆÉ¹þ€á€Þ€»€ó "
++msgstr "ãã­ãã¯ 0 ãèª­èŸŒããŸãã "
+ 
+ msgid ""
+ "\n"
+ "Maybe no changes were made or Vim did not update the swap file."
+ msgstr ""
+ "\n"
+-"¶²€é€¯ÊÑ¹¹€¬€µ€ì€Æ€€€Ê€€€«Vim€¬¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€ò¹¹¿·€·€Æ€€€Þ€»€ó."
++"æããå€æŽããããŠããªããVimãã¹ã¯ãããã¡ã€ã«ãæŽæ°ããŠããŸãã."
+ 
+ msgid " cannot be used with this version of Vim.\n"
+-msgstr " Vim€Î€³€Î¥Ð¡Œ¥ž¥ç¥ó€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó.\n"
++msgstr " Vimã®ãã®ããŒãžã§ã³ã§ã¯äœ¿çšã§ããŸãã.\n"
+ 
+ msgid "Use Vim version 3.0.\n"
+-msgstr "Vim€Î¥Ð¡Œ¥ž¥ç¥ó3.0€ò»ÈÍÑ€·€Æ€¯€À€µ€€.\n"
++msgstr "Vimã®ããŒãžã§ã³3.0ãäœ¿çšããŠãã ãã.\n"
+ 
+ #, c-format
+ msgid "E307: %s does not look like a Vim swap file"
+-msgstr "E307: %s €ÏVim€Î¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹"
++msgstr "E307: %s ã¯Vimã®ã¹ã¯ãããã¡ã€ã«ã§ã¯ãªãããã§ã"
+ 
+ msgid " cannot be used on this computer.\n"
+-msgstr " €³€Î¥³¥ó¥Ô¥å¡Œ¥¿€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó.\n"
++msgstr " ãã®ã³ã³ãã¥ãŒã¿ã§ã¯äœ¿çšã§ããŸãã.\n"
+ 
+ msgid "The file was created on "
+-msgstr "€³€Î¥Õ¥¡¥€¥ë€ÏŒ¡€ÎŸìœê€Çºî€é€ì€Þ€·€¿ "
++msgstr "ãã®ãã¡ã€ã«ã¯æ¬¡ã®å Žæã§äœãããŸãã "
+ 
+ msgid ""
+ ",\n"
+ "or the file has been damaged."
+ msgstr ""
+ ",\n"
+-"€â€·€¯€Ï¥Õ¥¡¥€¥ë€¬Â»œý€·€Æ€€€Þ€¹."
++"ãããã¯ãã¡ã€ã«ãæå·ããŠããŸã."
++
++#, c-format
++msgid ""
++"E833: %s is encrypted and this version of Vim does not support encryption"
++msgstr ""
++"E833: %s ã¯ãã®ããŒãžã§ã³ã®Vimã§ãµããŒãããŠããªãåœ¢åŒã§æå·åãããŠããŸã"
+ 
+ msgid " has been damaged (page size is smaller than minimum value).\n"
+-msgstr " €ÏÂ»œý€·€Æ€€€Þ€¹ (¥Ú¡Œ¥ž¥µ¥€¥º€¬ºÇŸ®ÃÍ€ò²Œ²ó€Ã€Æ€€€Þ€¹).\n"
++msgstr " ã¯æå·ããŠããŸã (ããŒãžãµã€ãºãæå°å€ãäžåã£ãŠããŸã).\n"
+ 
+ #, c-format
+ msgid "Using swap file \"%s\""
+-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \"%s\" €ò»ÈÍÑÃæ"
++msgstr "ã¹ã¯ãããã¡ã€ã« \"%s\" ãäœ¿çšäž­"
+ 
+ #, c-format
+ msgid "Original file \"%s\""
+-msgstr "ž¶ËÜ¥Õ¥¡¥€¥ë \"%s\""
++msgstr "åæ¬ãã¡ã€ã« \"%s\""
+ 
+ msgid "E308: Warning: Original file may have been changed"
+-msgstr "E308: ·Ù¹ð: ž¶ËÜ¥Õ¥¡¥€¥ë€¬ÊÑ¹¹€µ€ì€Æ€€€Þ€¹"
++msgstr "E308: è­Šå: åæ¬ãã¡ã€ã«ãå€æŽãããŠããŸã"
++
++#, c-format
++msgid "Swap file is encrypted: \"%s\""
++msgstr "ã¹ã¯ãããã¡ã€ã«ã¯æå·åãããŠããŸã: \"%s\""
++
++msgid ""
++"\n"
++"If you entered a new crypt key but did not write the text file,"
++msgstr ""
++"\n"
++"æ°ããæå·ã­ãŒãå
+¥åããããšã«ãã­ã¹ããã¡ã€ã«ãä¿å­ããŠããªãå Žåã¯,"
++
++msgid ""
++"\n"
++"enter the new crypt key."
++msgstr ""
++"\n"
++"æ°ããæå·ã­ãŒãå
+¥åããŠãã ãã."
++
++msgid ""
++"\n"
++"If you wrote the text file after changing the crypt key press enter"
++msgstr ""
++"\n"
++"æå·ã­ãŒãå€ããããšã«ãã­ã¹ããã¡ã€ã«ãä¿å­ããå Žåã¯, ãã­ã¹ããã¡ã€ã«ãš"
++
++msgid ""
++"\n"
++"to use the same key for text file and swap file"
++msgstr ""
++"\n"
++"ã¹ã¯ãããã¡ã€ã«ã«åãæå·ã­ãŒãäœ¿ãããã«enterã ããæŒããŠãã ãã."
+ 
+ #, c-format
+ msgid "E309: Unable to read block 1 from %s"
+-msgstr "E309: %s €«€é¥Ö¥í¥Ã¥¯ 1 €òÆÉ¹þ€á€Þ€»€ó"
++msgstr "E309: %s ãããã­ãã¯ 1 ãèª­èŸŒããŸãã"
+ 
+ msgid "???MANY LINES MISSING"
+-msgstr "???Â¿€¯€Î¹Ô€¬Œº€ï€ì€Æ€€€Þ€¹"
++msgstr "???å€ãã®è¡ãå€±ãããŠããŸã"
+ 
+ msgid "???LINE COUNT WRONG"
+-msgstr "???¹Ô¿ô€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++msgstr "???è¡æ°ãééã£ãŠããŸã"
+ 
+ msgid "???EMPTY BLOCK"
+-msgstr "???¥Ö¥í¥Ã¥¯€¬¶õ€Ç€¹"
++msgstr "???ãã­ãã¯ãç©ºã§ã"
+ 
+ msgid "???LINES MISSING"
+-msgstr "???¹Ô€¬Œº€ï€ì€Æ€€€Þ€¹"
++msgstr "???è¡ãå€±ãããŠããŸã"
+ 
+ #, c-format
+ msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
+-msgstr "E310: ¥Ö¥í¥Ã¥¯ 1 €ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹(%s €¬.swp¥Õ¥¡¥€¥ë€Ç€Ê€€?)"
++msgstr "E310: ãã­ãã¯ 1 ã®IDãééã£ãŠããŸã(%s ã.swpãã¡ã€ã«ã§ãªã?)"
+ 
+ msgid "???BLOCK MISSING"
+-msgstr "???¥Ö¥í¥Ã¥¯€¬€¢€ê€Þ€»€ó"
++msgstr "???ãã­ãã¯ããããŸãã"
+ 
+ msgid "??? from here until ???END lines may be messed up"
+-msgstr "??? €³€³€«€é???END€Þ€Ç€Î¹Ô€¬ÇË²õ€µ€ì€Æ€€€ë€è€Š€Ç€¹"
++msgstr "??? ãããã ???END ãŸã§ã®è¡ãç Žå£ãããŠããããã§ã"
+ 
+ msgid "??? from here until ???END lines may have been inserted/deleted"
+-msgstr "??? €³€³€«€é??END€Þ€Ç€Î¹Ô€¬ÁÞÆþ€«ºïœü€µ€ì€¿€è€Š€Ç€¹"
++msgstr "??? ãããã ???END ãŸã§ã®è¡ãæ¿å
+¥ãåé€ãããããã§ã"
+ 
+ msgid "???END"
+ msgstr "???END"
+ 
+ msgid "E311: Recovery Interrupted"
+-msgstr "E311: ¥ê¥«¥Ð¥ê€¬³ä¹þ€Þ€ì€Þ€·€¿"
++msgstr "E311: ãªã«ããªãå²èŸŒãŸããŸãã"
+ 
+ msgid ""
+ "E312: Errors detected while recovering; look for lines starting with ???"
+ msgstr ""
+-"E312: ¥ê¥«¥Ð¥ê€ÎºÇÃæ€Ë¥š¥é¡Œ€¬ž¡œÐ€µ€ì€Þ€·€¿; ???€Ç»Ï€Þ€ë¹Ô€ò»²ŸÈ€·€Æ€¯€À€µ€€"
++"E312: ãªã«ããªã®æäž­ã«ãšã©ãŒãæ€åºãããŸãã; ???ã§å§ãŸãè¡ãåç
+§ããŠãã ãã"
+ 
+ msgid "See \":help E312\" for more information."
+-msgstr "ŸÜºÙ€Ï \":help E312\" €ò»²ŸÈ€·€Æ€¯€À€µ€€"
++msgstr "è©³çŽ°ã¯ \":help E312\" ãåç
+§ããŠãã ãã"
+ 
+ msgid "Recovery completed. You should check if everything is OK."
+-msgstr "¥ê¥«¥Ð¥ê€¬œªÎ»€·€Þ€·€¿. ÁŽ€Æ€¬Àµ€·€€€«¥Á¥§¥Ã¥¯€·€Æ€¯€À€µ€€."
++msgstr "ãªã«ããªãçµäºããŸãã. å
+šãŠãæ­£ããããã§ãã¯ããŠãã ãã."
+ 
+ msgid ""
+ "\n"
+ "(You might want to write out this file under another name\n"
+ msgstr ""
+ "\n"
+-"(ÊÑ¹¹€ò¥Á¥§¥Ã¥¯€¹€ë€¿€á€Ë, €³€Î¥Õ¥¡¥€¥ë€òÊÌ€ÎÌŸÁ°€ÇÊÝÂž€·€¿Ÿå€Ç\n"
++"(å€æŽããã§ãã¯ããããã«, ãã®ãã¡ã€ã«ãå¥ã®ååã§ä¿å­ããäžã§\n"
++
++msgid "and run diff with the original file to check for changes)"
++msgstr "åæ¬ãã¡ã€ã«ãšã® diff ãå®è¡ãããšè¯ãã§ããã)"
+ 
+-msgid "and run diff with the original file to check for changes)\n"
+-msgstr "ž¶ËÜ¥Õ¥¡¥€¥ë€È€Î diff €òŒÂ¹Ô€¹€ë€ÈÎÉ€€€Ç€·€ç€Š)\n"
++msgid "Recovery completed. Buffer contents equals file contents."
++msgstr "åŸ©å
+å®äº. ãããã¡ã®å
+å®¹ã¯ãã¡ã€ã«ãšåãã«ãªããŸãã."
+ 
+ msgid ""
+-"Delete the .swp file afterwards.\n"
++"\n"
++"You may want to delete the .swp file now.\n"
+ "\n"
+ msgstr ""
+-"€œ€ì€«€é.swp¥Õ¥¡¥€¥ë€òºïœü€·€Æ€¯€À€µ€€\n"
+ "\n"
++"ãããã.swpãã¡ã€ã«ãåé€ããŠãã ãã\n"
++"\n"
++
++msgid "Using crypt key from swap file for the text file.\n"
++msgstr "ã¹ã¯ãããã¡ã€ã«ããååŸããæå·ã­ãŒããã­ã¹ããã¡ã€ã«ã«äœ¿ããŸã.\n"
+ 
+ #. use msg() to start the scrolling properly
+ msgid "Swap files found:"
+-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Ê£¿ôž«€Ä€«€ê€Þ€·€¿:"
++msgstr "ã¹ã¯ãããã¡ã€ã«ãè€æ°èŠã€ãããŸãã:"
+ 
+ msgid "   In current directory:\n"
+-msgstr "   žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê:\n"
++msgstr "   çŸåšã®ãã£ã¬ã¯ããª:\n"
+ 
+ msgid "   Using specified name:\n"
+-msgstr "   €¢€ëÌŸÁ°€ò»ÈÍÑÃæ:\n"
++msgstr "   ããååãäœ¿çšäž­:\n"
+ 
+ msgid "   In directory "
+-msgstr "   ¥Ç¥£¥ì¥¯¥È¥ê "
++msgstr "   ãã£ã¬ã¯ããª "
+ 
+ msgid "      -- none --\n"
+-msgstr "      -- €Ê€· --\n"
++msgstr "      -- ãªã --\n"
+ 
+ msgid "          owned by: "
+-msgstr "            œêÍ­ŒÔ: "
++msgstr "            ææè
+: "
+ 
+ msgid "   dated: "
+-msgstr "   ÆüÉÕ: "
++msgstr "   æ¥ä»: "
+ 
+ msgid "             dated: "
+-msgstr "             ÆüÉÕ: "
++msgstr "             æ¥ä»: "
+ 
+ msgid "         [from Vim version 3.0]"
+ msgstr "         [from Vim version 3.0]"
+ 
+ msgid "         [does not look like a Vim swap file]"
+-msgstr "         [Vim€Î¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹]"
++msgstr "         [Vimã®ã¹ã¯ãããã¡ã€ã«ã§ã¯ãªãããã§ã]"
+ 
+ msgid "         file name: "
+-msgstr "        ¥Õ¥¡¥€¥ëÌŸ: "
++msgstr "        ãã¡ã€ã«å: "
+ 
+ msgid ""
+ "\n"
+ "          modified: "
+ msgstr ""
+ "\n"
+-"          ÊÑ¹¹ŸõÂÖ: "
++"          å€æŽç¶æ
+: "
+ 
+ msgid "YES"
+-msgstr "€¢€ê"
++msgstr "ãã"
+ 
+ msgid "no"
+-msgstr "€Ê€·"
++msgstr "ãªã"
+ 
+ msgid ""
+ "\n"
+ "         user name: "
+ msgstr ""
+ "\n"
+-"          ¥æ¡Œ¥¶ÌŸ: "
++"          ãŠãŒã¶å: "
+ 
+ msgid "   host name: "
+-msgstr "   ¥Û¥¹¥ÈÌŸ: "
++msgstr "   ãã¹ãå: "
+ 
+ msgid ""
+ "\n"
+ "         host name: "
+ msgstr ""
+ "\n"
+-"          ¥Û¥¹¥ÈÌŸ: "
++"          ãã¹ãå: "
+ 
+ msgid ""
+ "\n"
+ "        process ID: "
+ msgstr ""
+ "\n"
+-"        ¥×¥í¥»¥¹ID: "
++"        ãã­ã»ã¹ID: "
+ 
+ msgid " (still running)"
+-msgstr " (€Þ€ÀŒÂ¹ÔÃæ)"
++msgstr " (ãŸã å®è¡äž­)"
+ 
+ msgid ""
+ "\n"
+ "         [not usable with this version of Vim]"
+ msgstr ""
+ "\n"
+-"         [€³€ÎVim¥Ð¡Œ¥ž¥ç¥ó€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó]"
++"         [ãã®VimããŒãžã§ã³ã§ã¯äœ¿çšã§ããŸãã]"
+ 
+ msgid ""
+ "\n"
+ "         [not usable on this computer]"
+ msgstr ""
+ "\n"
+-"         [€³€Î¥³¥ó¥Ô¥å¡Œ¥¿€Ç€Ï»ÈÍÑ€Ç€­€Þ€»€ó]"
++"         [ãã®ã³ã³ãã¥ãŒã¿ã§ã¯äœ¿çšã§ããŸãã]"
+ 
+ msgid "         [cannot be read]"
+-msgstr "         [ÆÉ¹þ€á€Þ€»€ó]"
++msgstr "         [èª­èŸŒããŸãã]"
+ 
+ msgid "         [cannot be opened]"
+-msgstr "         [³«€±€Þ€»€ó]"
++msgstr "         [éããŸãã]"
+ 
+ msgid "E313: Cannot preserve, there is no swap file"
+-msgstr "E313: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Ìµ€€€Î€Ç°Ý»ý€Ç€­€Þ€»€ó"
++msgstr "E313: ã¹ã¯ãããã¡ã€ã«ãç¡ãã®ã§ç¶­æã§ããŸãã"
+ 
+ msgid "File preserved"
+-msgstr "¥Õ¥¡¥€¥ë€¬°Ý»ý€µ€ì€Þ€¹"
++msgstr "ãã¡ã€ã«ãç¶­æãããŸã"
+ 
+ msgid "E314: Preserve failed"
+-msgstr "E314: °Ý»ý€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E314: ç¶­æã«å€±æããŸãã"
+ 
+ #, c-format
+ msgid "E315: ml_get: invalid lnum: %ld"
+-msgstr "E315: ml_get: Ìµžú€Êlnum€Ç€¹: %ld"
++msgstr "E315: ml_get: ç¡å¹ãªlnumã§ã: %ld"
+ 
+ #, c-format
+ msgid "E316: ml_get: cannot find line %ld"
+-msgstr "E316: ml_get: ¹Ô %ld €ò€ß€Ä€±€é€ì€Þ€»€ó"
++msgstr "E316: ml_get: è¡ %ld ãèŠã€ããããŸãã"
+ 
+ msgid "E317: pointer block id wrong 3"
+-msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹ 3"
++msgstr "E317: ãã€ã³ã¿ãã­ãã¯ã®IDãééã£ãŠããŸã 3"
+ 
+ msgid "stack_idx should be 0"
+-msgstr "stack_idx €Ï 0 €Ç€¢€ë€Ù€­€Ç€¹"
++msgstr "stack_idx ã¯ 0 ã§ããã¹ãã§ã"
+ 
+ msgid "E318: Updated too many blocks?"
+-msgstr "E318: ¹¹¿·€µ€ì€¿¥Ö¥í¥Ã¥¯€¬Â¿²á€®€ë€«€â?"
++msgstr "E318: æŽæ°ããããã­ãã¯ãå€éãããã?"
+ 
+ msgid "E317: pointer block id wrong 4"
+-msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹ 4"
++msgstr "E317: ãã€ã³ã¿ãã­ãã¯ã®IDãééã£ãŠããŸã 4"
+ 
+ msgid "deleted block 1?"
+-msgstr "¥Ö¥í¥Ã¥¯ 1 €ÏŸÃ€µ€ì€¿?"
++msgstr "ãã­ãã¯ 1 ã¯æ¶ããã?"
+ 
+ #, c-format
+ msgid "E320: Cannot find line %ld"
+-msgstr "E320: ¹Ô %ld €¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E320: è¡ %ld ãèŠã€ãããŸãã"
+ 
+ msgid "E317: pointer block id wrong"
+-msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++msgstr "E317: ãã€ã³ã¿ãã­ãã¯ã®IDãééã£ãŠããŸã"
+ 
+ msgid "pe_line_count is zero"
+-msgstr "pe_line_count €¬¥Œ¥í€Ç€¹"
++msgstr "pe_line_count ããŒã­ã§ã"
+ 
+ #, c-format
+ msgid "E322: line number out of range: %ld past the end"
+-msgstr "E322: ¹ÔÈÖ¹æ€¬ÈÏ°Ï³°€Ç€¹: %ld Ä¶€š€Æ€€€Þ€¹"
++msgstr "E322: è¡çªå·ãç¯å²å€ã§ã: %ld è¶
+ããŠããŸã"
+ 
+ #, c-format
+ msgid "E323: line count wrong in block %ld"
+-msgstr "E323: ¥Ö¥í¥Ã¥¯ %ld €Î¹Ô¥«¥Š¥ó¥È€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++msgstr "E323: ãã­ãã¯ %ld ã®è¡ã«ãŠã³ããééã£ãŠããŸã"
+ 
+ msgid "Stack size increases"
+-msgstr "¥¹¥¿¥Ã¥¯¥µ¥€¥º€¬Áý€š€Þ€¹"
++msgstr "ã¹ã¿ãã¯ãµã€ãºãå¢ããŸã"
+ 
+ msgid "E317: pointer block id wrong 2"
+-msgstr "E317: ¥Ý¥€¥ó¥¿¥Ö¥í¥Ã¥¯€ÎID€¬ŽÖ°ã€Ã€Æ€€€Þ€¹ 2"
++msgstr "E317: ãã€ã³ã¿ãã­ãã¯ã®IDãééã£ãŠããŸã 2"
+ 
+ #, c-format
+ msgid "E773: Symlink loop for \"%s\""
+-msgstr "E773: \"%s\" €Î¥·¥ó¥Ü¥ê¥Ã¥¯¥ê¥ó¥¯€¬¥ë¡Œ¥×€Ë€Ê€Ã€Æ€€€Þ€¹"
++msgstr "E773: \"%s\" ã®ã·ã³ããªãã¯ãªã³ã¯ãã«ãŒãã«ãªã£ãŠããŸã"
+ 
+ msgid "E325: ATTENTION"
+-msgstr "E325: Ãí°Õ"
++msgstr "E325: æ³šæ"
+ 
+ msgid ""
+ "\n"
+ "Found a swap file by the name \""
+ msgstr ""
+ "\n"
+-"Œ¡€ÎÌŸÁ°€Ç¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€òž«€Ä€±€Þ€·€¿ \""
++"æ¬¡ã®ååã§ã¹ã¯ãããã¡ã€ã«ãèŠã€ããŸãã \""
+ 
+ msgid "While opening file \""
+-msgstr "Œ¡€Î¥Õ¥¡¥€¥ë€ò³«€€€Æ€€€ëºÇÃæ \""
++msgstr "æ¬¡ã®ãã¡ã€ã«ãéããŠããæäž­ \""
+ 
+ msgid "      NEWER than swap file!\n"
+-msgstr "      ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€è€ê€â¿·€·€€€Ç€¹!\n"
++msgstr "      ã¹ã¯ãããã¡ã€ã«ãããæ°ããã§ã!\n"
+ 
+ #. Some of these messages are long to allow translation to
+ #. * other languages.
+ msgid ""
+ "\n"
+-"(1) Another program may be editing the same file.\n"
+-"    If this is the case, be careful not to end up with two\n"
+-"    different instances of the same file when making changes.\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
+ msgstr ""
+ "\n"
+-"(1) ÊÌ€Î¥×¥í¥°¥é¥à€¬Æ±€ž¥Õ¥¡¥€¥ë€òÊÔœž€·€Æ€€€ë€«€â€·€ì€Þ€»€ó.\n"
+-"    €³€ÎŸì¹ç€Ë€Ï, ÊÑ¹¹€ò€·€¿ºÝ€ËºÇœªÅª€Ë, Æ±€ž¥Õ¥¡¥€¥ë€Î°Û€Ê€ë\n"
+-"    2€Ä€Î¥€¥ó¥¹¥¿¥ó¥¹€¬€Ç€­€Æ€·€Þ€Š€³€È€ËÃí°Õ€·€Æ€¯€À€µ€€.\n"
++"(1) å¥ã®ãã­ã°ã©ã ãåããã¡ã€ã«ãç·šéããŠãããããããŸãã.\n"
++"    ãã®å Žåã«ã¯, å€æŽãããéã«æçµçã«, åããã¡ã€ã«ã®ç°ãªã\n"
++"    2ã€ã®ã€ã³ã¹ã¿ã³ã¹ãã§ããŠããŸãããšã«æ³šæããŠãã ãã."
+ 
+-msgid "    Quit, or continue with caution.\n"
+-msgstr "    œªÎ»€¹€ë€«, Ãí°Õ€·€Ê€¬€éÂ³€±€Þ€¹.\n"
++msgid "  Quit, or continue with caution.\n"
++msgstr "  çµäºããã, æ³šæããªããç¶ããŠãã ãã.\n"
+ 
+-msgid ""
+-"\n"
+-"(2) An edit session for this file crashed.\n"
+-msgstr ""
+-"\n"
+-"(2) €³€Î¥Õ¥¡¥€¥ë€ÎÊÔœž¥»¥Ã¥·¥ç¥ó€¬¥¯¥é¥Ã¥·¥å€·€¿.\n"
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) ãã®ãã¡ã€ã«ã®ç·šéã»ãã·ã§ã³ãã¯ã©ãã·ã¥ãã.\n"
+ 
+ msgid "    If this is the case, use \":recover\" or \"vim -r "
+-msgstr "    €³€ÎŸì¹ç€Ë€Ï \":recover\" €« \"vim -r "
++msgstr "    ãã®å Žåã«ã¯ \":recover\" ã \"vim -r "
+ 
+ msgid ""
+ "\"\n"
+ "    to recover the changes (see \":help recovery\").\n"
+ msgstr ""
+ "\"\n"
+-"    €ò»ÈÍÑ€·€ÆÊÑ¹¹€ò¥ê¥«¥Ð¡Œ€·€Þ€¹(\":help recover\" €ò»²ŸÈ).\n"
++"    ãäœ¿çšããŠå€æŽããªã«ããŒããŸã(\":help recovery\" ãåç
+§).\n"
+ 
+ msgid "    If you did this already, delete the swap file \""
+-msgstr "    Žû€Ë€³€ì€ò¹Ô€Ê€Ã€¿€Î€Ê€é€Ð, ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \""
++msgstr "    æ¢ã«ãããè¡ãªã£ãã®ãªãã°, ã¹ã¯ãããã¡ã€ã« \""
+ 
+ msgid ""
+ "\"\n"
+ "    to avoid this message.\n"
+ msgstr ""
+ "\"\n"
+-"    €òŸÃ€»€Ð€³€Î¥á¥Ã¥»¡Œ¥ž€ò²óÈò€Ç€­€Þ€¹.\n"
++"    ãæ¶ãã°ãã®ã¡ãã»ãŒãžãåé¿ã§ããŸã.\n"
+ 
+ msgid "Swap file \""
+-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë \""
++msgstr "ã¹ã¯ãããã¡ã€ã« \""
+ 
+ msgid "\" already exists!"
+-msgstr "\" €¬Žû€Ë€¢€ê€Þ€¹!"
++msgstr "\" ãæ¢ã«ãããŸã!"
+ 
+ msgid "VIM - ATTENTION"
+-msgstr "VIM - Ãí°Õ"
++msgstr "VIM - æ³šæ"
+ 
+ msgid "Swap file already exists!"
+-msgstr "¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Žû€ËÂžºß€·€Þ€¹!"
++msgstr "ã¹ã¯ãããã¡ã€ã«ãæ¢ã«å­åšããŸã!"
+ 
+ msgid ""
+ "&Open Read-Only\n"
+@@ -3643,11 +3810,11 @@
+ "&Quit\n"
+ "&Abort"
+ msgstr ""
+-"ÆÉ¹þÀìÍÑ€Ç³«€¯(&O)\n"
+-"€È€Ë€«€¯ÊÔœž€¹€ë(&E)\n"
+-"Éü³è€µ€»€ë(&R)ecover\n"
+-"œªÎ»€¹€ë(&Q)\n"
+-"Ãæ»ß€¹€ë(&A)"
++"èª­èŸŒå°çšã§éã(&O)\n"
++"ãšã«ããç·šéãã(&E)\n"
++"åŸ©æŽ»ããã(&R)\n"
++"çµäºãã(&Q)\n"
++"äž­æ­¢ãã(&A)"
+ 
+ msgid ""
+ "&Open Read-Only\n"
+@@ -3657,38 +3824,38 @@
+ "&Quit\n"
+ "&Abort"
+ msgstr ""
+-"ÆÉ¹þÀìÍÑ€Ç³«€¯(&O)\n"
+-"€È€Ë€«€¯ÊÔœž€¹€ë(&E)\n"
+-"Éü³è€µ€»€ë(&R)ecover\n"
+-"ºïœü€¹€ë(&D)\n"
+-"œªÎ»€¹€ë(&Q)\n"
+-"Ãæ»ß€¹€ë(&A)"
++"èª­èŸŒå°çšã§éã(&O)\n"
++"ãšã«ããç·šéãã(&E)\n"
++"åŸ©æŽ»ããã(&R)\n"
++"åé€ãã(&D)\n"
++"çµäºãã(&Q)\n"
++"äž­æ­¢ãã(&A)"
+ 
+ msgid "E326: Too many swap files found"
+-msgstr "E326: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€¬Â¿¿ôž«€Ä€«€ê€Þ€·€¿"
++msgstr "E326: ã¹ã¯ãããã¡ã€ã«ãå€æ°èŠã€ãããŸãã"
+ 
+ msgid "E327: Part of menu-item path is not sub-menu"
+-msgstr "E327: ¥á¥Ë¥å¡Œ¥¢¥€¥Æ¥à€Î¥Ñ¥¹€ÎÉôÊ¬€¬¥µ¥Ö¥á¥Ë¥å¡Œ€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E327: ã¡ãã¥ãŒã¢ã€ãã ã®ãã¹ã®éšåããµãã¡ãã¥ãŒã§ã¯ãããŸãã"
+ 
+ msgid "E328: Menu only exists in another mode"
+-msgstr "E328: ¥á¥Ë¥å¡Œ€ÏÂŸ€Î¥â¡Œ¥É€Ë€À€±€¢€ê€Þ€¹"
++msgstr "E328: ã¡ãã¥ãŒã¯ä»ã®ã¢ãŒãã«ã ããããŸã"
+ 
+ #, c-format
+ msgid "E329: No menu \"%s\""
+-msgstr "E329: \"%s\" €È€€€Š¥á¥Ë¥å¡Œ€Ï€¢€ê€Þ€»€ó"
++msgstr "E329: \"%s\" ãšããã¡ãã¥ãŒã¯ãããŸãã"
+ 
+ #. Only a mnemonic or accelerator is not valid.
+ msgid "E792: Empty menu name"
+-msgstr "E792: ¥á¥Ë¥å¡ŒÌŸ€¬¶õ€Ç€¹"
++msgstr "E792: ã¡ãã¥ãŒåãç©ºã§ã"
+ 
+ msgid "E330: Menu path must not lead to a sub-menu"
+-msgstr "E330: ¥á¥Ë¥å¡Œ¥Ñ¥¹€Ï¥µ¥Ö¥á¥Ë¥å¡Œ€òÀž€ž€ë€Ù€­€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E330: ã¡ãã¥ãŒãã¹ã¯ãµãã¡ãã¥ãŒãçããã¹ãã§ã¯ãããŸãã"
+ 
+ msgid "E331: Must not add menu items directly to menu bar"
+-msgstr "E331: ¥á¥Ë¥å¡Œ¥Ð¡Œ€Ë€ÏÄŸÀÜ¥á¥Ë¥å¡Œ¥¢¥€¥Æ¥à€òÄÉ²Ã€Ç€­€Þ€»€ó"
++msgstr "E331: ã¡ãã¥ãŒããŒã«ã¯çŽæ¥ã¡ãã¥ãŒã¢ã€ãã ãè¿œå ã§ããŸãã"
+ 
+ msgid "E332: Separator cannot be part of a menu path"
+-msgstr "E332: ¶èÀÚ€ê€Ï¥á¥Ë¥å¡Œ¥Ñ¥¹€Î°ìÉô€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E332: åºåãã¯ã¡ãã¥ãŒãã¹ã®äžéšã§ã¯ãããŸãã"
+ 
+ #. Now we have found the matching menu, and we list the mappings
+ #. Highlight title
+@@ -3697,68 +3864,68 @@
+ "--- Menus ---"
+ msgstr ""
+ "\n"
+-"--- ¥á¥Ë¥å¡Œ ---"
++"--- ã¡ãã¥ãŒ ---"
+ 
+ msgid "Tear off this menu"
+-msgstr "€³€Î¥á¥Ë¥å¡Œ€òÀÚ€êŒè€ë"
++msgstr "ãã®ã¡ãã¥ãŒãåãåã"
+ 
+ msgid "E333: Menu path must lead to a menu item"
+-msgstr "E333: ¥á¥Ë¥å¡Œ¥Ñ¥¹€Ï¥á¥Ë¥å¡Œ¥¢¥€¥Æ¥à€òÀž€ž€Ê€±€ì€Ð€€€±€Þ€»€ó"
++msgstr "E333: ã¡ãã¥ãŒãã¹ã¯ã¡ãã¥ãŒã¢ã€ãã ãçããªããã°ãããŸãã"
+ 
+ #, c-format
+ msgid "E334: Menu not found: %s"
+-msgstr "E334: ¥á¥Ë¥å¡Œ€¬€ß€Ä€«€ê€Þ€»€ó: %s"
++msgstr "E334: ã¡ãã¥ãŒãèŠã€ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E335: Menu not defined for %s mode"
+-msgstr "E335: %s €Ë€Ï¥á¥Ë¥å¡Œ€¬ÄêµÁ€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E335: %s ã«ã¯ã¡ãã¥ãŒãå®çŸ©ãããŠããŸãã"
+ 
+ msgid "E336: Menu path must lead to a sub-menu"
+-msgstr "E336: ¥á¥Ë¥å¡Œ¥Ñ¥¹€Ï¥µ¥Ö¥á¥Ë¥å¡Œ€òÀž€ž€Ê€±€ì€Ð€€€±€Þ€»€ó"
++msgstr "E336: ã¡ãã¥ãŒãã¹ã¯ãµãã¡ãã¥ãŒãçããªããã°ãããŸãã"
+ 
+ msgid "E337: Menu not found - check menu names"
+-msgstr "E337: ¥á¥Ë¥å¡Œ€¬€ß€Ä€«€ê€Þ€»€ó - ¥á¥Ë¥å¡ŒÌŸ€ò³ÎÇ§€·€Æ€¯€À€µ€€"
++msgstr "E337: ã¡ãã¥ãŒãèŠã€ãããŸãã - ã¡ãã¥ãŒåãç¢ºèªããŠãã ãã"
+ 
+ #, c-format
+ msgid "Error detected while processing %s:"
+-msgstr "%s €ÎœèÍýÃæ€Ë¥š¥é¡Œ€¬ž¡œÐ€µ€ì€Þ€·€¿:"
++msgstr "%s ã®åŠçäž­ã«ãšã©ãŒãæ€åºãããŸãã:"
+ 
+ #, c-format
+ msgid "line %4ld:"
+-msgstr "¹Ô %4ld:"
++msgstr "è¡ %4ld:"
+ 
+ #, c-format
+ msgid "E354: Invalid register name: '%s'"
+-msgstr "E354: Ìµžú€Ê¥ì¥ž¥¹¥¿ÌŸ: '%s'"
++msgstr "E354: ç¡å¹ãªã¬ãžã¹ã¿å: '%s'"
+ 
+ msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
+-msgstr "ÆüËÜžì¥á¥Ã¥»¡Œ¥žËÝÌõ/ŽÆœ€: ÂŒ²¬ ÂÀÏº <koron.kaoriya@gmail.com>"
++msgstr "æ¥æ¬èªã¡ãã»ãŒãžç¿»èš³/ç£ä¿®: æå²¡ å€ªé <koron.kaoriya@gmail.com>"
+ 
+ msgid "Interrupt: "
+-msgstr "³ä¹þ€ß: "
++msgstr "å²èŸŒã¿: "
+ 
+ msgid "Press ENTER or type command to continue"
+-msgstr "Â³€±€ë€Ë€ÏENTER€ò²¡€¹€«¥³¥Þ¥ó¥É€òÆþÎÏ€·€Æ€¯€À€µ€€"
++msgstr "ç¶ããã«ã¯ENTERãæŒããã³ãã³ããå
+¥åããŠãã ãã"
+ 
+ #, c-format
+ msgid "%s line %ld"
+-msgstr "%s ¹Ô %ld"
++msgstr "%s è¡ %ld"
+ 
+ msgid "-- More --"
+-msgstr "-- ·ÑÂ³ --"
++msgstr "-- ç¶ç¶ --"
+ 
+ msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+-msgstr " SPACE/d/j: ²èÌÌ/¥Ú¡Œ¥ž/¹Ô ²Œ, b/uk: Ÿå, q: œªÎ» "
++msgstr " SPACE/d/j: ç»é¢/ããŒãž/è¡ äž, b/u/k: äž, q: çµäº "
+ 
+ msgid "Question"
+-msgstr "ŒÁÌä"
++msgstr "è³ªå"
+ 
+ msgid ""
+ "&Yes\n"
+ "&No"
+ msgstr ""
+-"€Ï€€(&Y)\n"
+-"€€€€€š(&N)"
++"ã¯ã(&Y)\n"
++"ããã(&N)"
+ 
+ msgid ""
+ "&Yes\n"
+@@ -3767,70 +3934,73 @@
+ "&Discard All\n"
+ "&Cancel"
+ msgstr ""
+-"€Ï€€(&Y)\n"
+-"€€€€€š(&N)\n"
+-"ÁŽ€ÆÊÝÂž(&A)\n"
+-"ÁŽ€ÆÊüŽþ(&D)\n"
+-"¥­¥ã¥ó¥»¥ë(&C)"
++"ã¯ã(&Y)\n"
++"ããã(&N)\n"
++"å
+šãŠä¿å­(&A)\n"
++"å
+šãŠæŸæ£(&D)\n"
++"ã­ã£ã³ã»ã«(&C)"
+ 
+ msgid "Select Directory dialog"
+-msgstr "¥Ç¥£¥ì¥¯¥È¥êÁªÂò¥À¥€¥¢¥í¥°"
++msgstr "ãã£ã¬ã¯ããªéžæãã€ã¢ã­ã°"
+ 
+ msgid "Save File dialog"
+-msgstr "¥Õ¥¡¥€¥ëÊÝÂž¥À¥€¥¢¥í¥°"
++msgstr "ãã¡ã€ã«ä¿å­ãã€ã¢ã­ã°"
+ 
+ msgid "Open File dialog"
+-msgstr "¥Õ¥¡¥€¥ëÆÉ¹þ¥À¥€¥¢¥í¥°"
++msgstr "ãã¡ã€ã«èª­èŸŒãã€ã¢ã­ã°"
+ 
+ #. TODO: non-GUI file selector here
+ msgid "E338: Sorry, no file browser in console mode"
+-msgstr "E338: ¥³¥ó¥œ¡Œ¥ë¥â¡Œ¥É€Ç€Ï¥Õ¥¡¥€¥ë¥Ö¥é¥Š¥¶€ò»È€š€Þ€»€ó, €Ž€á€ó€Ê€µ€€"
++msgstr "E338: ã³ã³ãœãŒã«ã¢ãŒãã§ã¯ãã¡ã€ã«ãã©ãŠã¶ãäœ¿ããŸãã, ããããªãã"
+ 
+ msgid "E766: Insufficient arguments for printf()"
+-msgstr "E766: printf() €Î°ú¿ô€¬ÉÔœœÊ¬€Ç€¹"
++msgstr "E766: printf() ã®åŒæ°ãäžååã§ã"
++
++msgid "E807: Expected Float argument for printf()"
++msgstr "E807: printf() ã®åŒæ°ã«ã¯æµ®åå°æ°ç¹æ°ãæåŸ
+ãããŠããŸã"
+ 
+ msgid "E767: Too many arguments to printf()"
+-msgstr "E767: pirntf() €Î°ú¿ô€¬Â¿²á€®€Þ€¹"
++msgstr "E767: printf() ã®åŒæ°ãå€éããŸã"
+ 
+ msgid "W10: Warning: Changing a readonly file"
+-msgstr "W10: ·Ù¹ð: ÆÉ¹þÀìÍÑ¥Õ¥¡¥€¥ë€òÊÑ¹¹€·€Þ€¹"
++msgstr "W10: è­Šå: èª­èŸŒå°çšãã¡ã€ã«ãå€æŽããŸã"
+ 
+-msgid "Type number or click with mouse (<Enter> cancels): "
+-msgstr "¿ôÃÍ€òÆþÎÏ€¹€ë€«¥Þ¥Š¥¹€ò¥¯¥ê¥Ã¥¯€·€Æ€¯€À€µ€€ (<Enter> €Ç¥­¥ã¥ó¥»¥ë): "
++msgid "Type number and <Enter> or click with mouse (empty cancels): "
++msgstr ""
++"çªå·ãš<Enter>ãå
+¥åãããããŠã¹ã§ã¯ãªãã¯ããŠãã ãã (ç©ºã§ã­ã£ã³ã»ã«): "
+ 
+-msgid "Choice number (<Enter> cancels): "
+-msgstr "ÈÖ¹æ€òÁªÂò€·€Æ€¯€À€µ€€ (<Enter> €Ç¥­¥ã¥ó¥»¥ë): "
++msgid "Type number and <Enter> (empty cancels): "
++msgstr "çªå·ãš<Enter>ãå
+¥åããŠãã ãã (ç©ºã§ã­ã£ã³ã»ã«): "
+ 
+ msgid "1 more line"
+-msgstr "1 ¹Ô ÄÉ²Ã€·€Þ€·€¿"
++msgstr "1 è¡ è¿œå ããŸãã"
+ 
+ msgid "1 line less"
+-msgstr "1 ¹Ô ºïœü€·€Þ€·€¿"
++msgstr "1 è¡ åé€ããŸãã"
+ 
+ #, c-format
+ msgid "%ld more lines"
+-msgstr "%ld ¹Ô ÄÉ²Ã€·€Þ€·€¿"
++msgstr "%ld è¡ è¿œå ããŸãã"
+ 
+ #, c-format
+ msgid "%ld fewer lines"
+-msgstr "%ld ¹Ô ºïœü€·€Þ€·€¿"
++msgstr "%ld è¡ åé€ããŸãã"
+ 
+ msgid " (Interrupted)"
+-msgstr " (³ä¹þ€Þ€ì€Þ€·€¿)"
++msgstr " (å²èŸŒãŸããŸãã)"
+ 
+ msgid "Beep!"
+-msgstr "¥Ó¡Œ¥Ã!"
++msgstr "ããŒã!"
+ 
+ msgid "Vim: preserving files...\n"
+-msgstr "Vim: ¥Õ¥¡¥€¥ë€òÊÝÂžÃæ...\n"
++msgstr "Vim: ãã¡ã€ã«ãä¿å­äž­...\n"
+ 
+ #. close all memfiles, without deleting
+ msgid "Vim: Finished.\n"
+-msgstr "Vim: œªÎ»€·€Þ€·€¿.\n"
++msgstr "Vim: çµäºããŸãã.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+-msgstr "¥š¥é¡Œ: "
++msgstr "ãšã©ãŒ: "
+ 
+ #, c-format
+ msgid ""
+@@ -3838,193 +4008,202 @@
+ "[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
+ msgstr ""
+ "\n"
+-"[¥á¥â¥ê(¥Ð¥€¥È)] Áí³äÅö-²òÊüÎÌ %lu-%lu, »ÈÍÑÎÌ %lu, ¥Ô¡Œ¥¯»þ %lu\n"
++"[ã¡ã¢ãª(ãã€ã)] ç·å²åœ-è§£æŸé %lu-%lu, äœ¿çšé %lu, ããŒã¯æ %lu\n"
+ 
+ #, c-format
+ msgid ""
+ "[calls] total re/malloc()'s %lu, total free()'s %lu\n"
+ "\n"
+ msgstr ""
+-"[žÆœÐ] Áí re/malloc() ²ó¿ô %lu, Áí free() ²ó¿ô %lu\n"
++"[åŒåº] ç· re/malloc() åæ° %lu, ç· free() åæ° %lu\n"
+ "\n"
+ 
+ msgid "E340: Line is becoming too long"
+-msgstr "E340: ¹Ô€¬Ä¹€¯€Ê€ê²á€®€Þ€·€¿"
++msgstr "E340: è¡ãé·ããªãéããŸãã"
+ 
+ #, c-format
+ msgid "E341: Internal error: lalloc(%ld, )"
+-msgstr "E341: ÆâÉô¥š¥é¡Œ: lalloc(%ld,)"
++msgstr "E341: å
+éšãšã©ãŒ: lalloc(%ld,)"
+ 
+ #, c-format
+ msgid "E342: Out of memory!  (allocating %lu bytes)"
+-msgstr "E342: ¥á¥â¥ê€¬Â­€ê€Þ€»€ó!  (%lu ¥Ð¥€¥È€ò³äÅöÍ×µá)"
++msgstr "E342: ã¡ã¢ãªãè¶³ããŸãã!  (%lu ãã€ããå²åœèŠæ±)"
+ 
+ #, c-format
+ msgid "Calling shell to execute: \"%s\""
+-msgstr "ŒÂ¹Ô€Î€¿€á€Ë¥·¥§¥ë€òžÆœÐ€·Ãæ: \"%s\""
++msgstr "å®è¡ã®ããã«ã·ã§ã«ãåŒåºãäž­: \"%s\""
+ 
+ msgid "E545: Missing colon"
+-msgstr "E545: ¥³¥í¥ó€¬€¢€ê€Þ€»€ó"
++msgstr "E545: ã³ã­ã³ããããŸãã"
+ 
+ msgid "E546: Illegal mode"
+-msgstr "E546: ÉÔÀµ€Ê¥â¡Œ¥É€Ç€¹"
++msgstr "E546: äžæ­£ãªã¢ãŒãã§ã"
+ 
+ msgid "E547: Illegal mouseshape"
+-msgstr "E547: ÉÔÀµ€Ê 'mouseshape' €Ç€¹"
++msgstr "E547: äžæ­£ãª 'mouseshape' ã§ã"
+ 
+ msgid "E548: digit expected"
+-msgstr "E548: ¿ôÃÍ€¬É¬Í×€Ç€¹"
++msgstr "E548: æ°å€ãå¿
+èŠã§ã"
+ 
+ msgid "E549: Illegal percentage"
+-msgstr "E549: ÉÔÀµ€Ê¥Ñ¡Œ¥»¥ó¥Æ¡Œ¥ž€Ç€¹"
++msgstr "E549: äžæ­£ãªããŒã»ã³ããŒãžã§ã"
+ 
+ msgid "Enter encryption key: "
+-msgstr "°Å¹æ²œÍÑ€Î¥­¡Œ€òÆþÎÏ€·€Æ€¯€À€µ€€: "
++msgstr "æå·åçšã®ã­ãŒãå
+¥åããŠãã ãã: "
+ 
+ msgid "Enter same key again: "
+-msgstr "€â€Š°ìÅÙÆ±€ž¥­¡Œ€òÆþÎÏ€·€Æ€¯€À€µ€€: "
++msgstr "ããäžåºŠåãã­ãŒãå
+¥åããŠãã ãã: "
+ 
+ msgid "Keys don't match!"
+-msgstr "¥­¡Œ€¬°ìÃ×€·€Þ€»€ó"
++msgstr "ã­ãŒãäžèŽããŸãã"
++
++msgid "E854: path too long for completion"
++msgstr "E854: ãã¹ãé·éããŠè£å®ã§ããŸãã"
+ 
+ #, c-format
+ msgid ""
+ "E343: Invalid path: '**[number]' must be at the end of the path or be "
+ "followed by '%s'."
+ msgstr ""
+-"E343: Ìµžú€Ê¥Ñ¥¹€Ç€¹: '**[¿ôÃÍ]' €Ïpath€ÎºÇžå€« '%s' €¬Â³€€€Æ€Ê€€€È€€€±€Þ€»"
+-"€ó."
++"E343: ç¡å¹ãªãã¹ã§ã: '**[æ°å€]' ã¯pathã®æåŸã '%s' ãç¶ããŠãªããšãããŸã"
++"ã."
+ 
+ #, c-format
+ msgid "E344: Can't find directory \"%s\" in cdpath"
+-msgstr "E344: cdpath€Ë€Ï \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++msgstr "E344: cdpathã«ã¯ \"%s\" ãšãããã¡ã€ã«ããããŸãã"
+ 
+ #, c-format
+ msgid "E345: Can't find file \"%s\" in path"
+-msgstr "E345: path€Ë€Ï \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++msgstr "E345: pathã«ã¯ \"%s\" ãšãããã¡ã€ã«ããããŸãã"
+ 
+ #, c-format
+ msgid "E346: No more directory \"%s\" found in cdpath"
+-msgstr "E346: cdpath€Ë€Ï€³€ì°ÊŸå \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++msgstr "E346: cdpathã«ã¯ããä»¥äž \"%s\" ãšãããã¡ã€ã«ããããŸãã"
+ 
+ #, c-format
+ msgid "E347: No more file \"%s\" found in path"
+-msgstr "E347: ¥Ñ¥¹€Ë€Ï€³€ì°ÊŸå \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++msgstr "E347: ãã¹ã«ã¯ããä»¥äž \"%s\" ãšãããã¡ã€ã«ããããŸãã"
+ 
+-#. Get here when the server can't be found.
+ msgid "Cannot connect to Netbeans #2"
+-msgstr "Netbeans #2 €ËÀÜÂ³€Ç€­€Þ€»€ó"
++msgstr "Netbeans #2 ã«æ¥ç¶ã§ããŸãã"
+ 
+ msgid "Cannot connect to Netbeans"
+-msgstr "Netbeans €ËÀÜÂ³€Ç€­€Þ€»€ó"
++msgstr "Netbeans ã«æ¥ç¶ã§ããŸãã"
+ 
+ #, c-format
+ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
+ msgstr ""
+-"E668: NetBeans€ÎÀÜÂ³ŸðÊó¥Õ¥¡¥€¥ë€Î¥¢¥¯¥»¥¹¥â¡Œ¥É€ËÌäÂê€¬€¢€ê€Þ€¹: \"%s\""
++"E668: NetBeansã®æ¥ç¶æ
+å ±ãã¡ã€ã«ã®ã¢ã¯ã»ã¹ã¢ãŒãã«åé¡ããããŸã: \"%s\""
+ 
+ msgid "read from Netbeans socket"
+-msgstr "Netbeans €Î¥œ¥±¥Ã¥È€òÆÉ¹þ€ß"
++msgstr "Netbeans ã®ãœã±ãããèª­èŸŒã¿"
+ 
+ #, c-format
+ msgid "E658: NetBeans connection lost for buffer %ld"
+-msgstr "E658: ¥Ð¥Ã¥Õ¥¡ %ld €Î NetBeans ÀÜÂ³€¬Œº€ï€ì€Þ€·€¿"
++msgstr "E658: ãããã¡ %ld ã® NetBeans æ¥ç¶ãå€±ãããŸãã"
++
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: NetBeansã¯ãã®GUIã«ã¯å¯Ÿå¿ããŠããŸãã"
++
++msgid "E511: netbeans already connected"
++msgstr "E511: NetBeansã¯æ¢ã«æ¥ç¶ããŠããŸã"
+ 
+-msgid "E505: "
+-msgstr "E505: "
++#, c-format
++msgid "E505: %s is read-only (add ! to override)"
++msgstr "E505: %s ã¯èª­èŸŒå°çšã§ã (åŒ·å¶æžèŸŒã«ã¯ ! ãè¿œå )"
++
++msgid "E349: No identifier under cursor"
++msgstr "E349: ã«ãŒãœã«ã®äœçœ®ã«ã¯è­å¥å­ããããŸãã"
+ 
+ msgid "E774: 'operatorfunc' is empty"
+-msgstr "E774: 'operatorfunc' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++msgstr "E774: 'operatorfunc' ãªãã·ã§ã³ãç©ºã§ã"
+ 
+ msgid "E775: Eval feature not available"
+-msgstr "E775: Œ°ÉŸ²Áµ¡Çœ€¬Ìµžú€Ë€Ê€Ã€Æ€€€Þ€¹"
++msgstr "E775: åŒè©äŸ¡æ©èœãç¡å¹ã«ãªã£ãŠããŸã"
+ 
+ msgid "Warning: terminal cannot highlight"
+-msgstr "·Ù¹ð: »ÈÍÑ€·€Æ€€€ëÃŒËö€Ï¥Ï¥€¥é¥€¥È€Ç€­€Þ€»€ó"
++msgstr "è­Šå: äœ¿çšããŠããç«¯æ«ã¯ãã€ã©ã€ãã§ããŸãã"
+ 
+ msgid "E348: No string under cursor"
+-msgstr "E348: ¥«¡Œ¥œ¥ë€Î°ÌÃÖ€Ë€ÏÊž»úÎó€¬€¢€ê€Þ€»€ó"
+-
+-msgid "E349: No identifier under cursor"
+-msgstr "E349: ¥«¡Œ¥œ¥ë€Î°ÌÃÖ€Ë€ÏŒ±ÊÌ»Ò€¬€¢€ê€Þ€»€ó"
++msgstr "E348: ã«ãŒãœã«ã®äœçœ®ã«ã¯æå­åããããŸãã"
+ 
+ msgid "E352: Cannot erase folds with current 'foldmethod'"
+-msgstr "E352: žœºß€Î 'foldmethod' €Ç€ÏÀÞŸö€ß€òŸÃµî€Ç€­€Þ€»€ó"
++msgstr "E352: çŸåšã® 'foldmethod' ã§ã¯æç³ã¿ãæ¶å»ã§ããŸãã"
+ 
+ msgid "E664: changelist is empty"
+-msgstr "E664: ÊÑ¹¹¥ê¥¹¥È€¬¶õ€Ç€¹"
++msgstr "E664: å€æŽãªã¹ããç©ºã§ã"
+ 
+ msgid "E662: At start of changelist"
+-msgstr "E662: ÊÑ¹¹¥ê¥¹¥È€ÎÀèÆ¬"
++msgstr "E662: å€æŽãªã¹ãã®å
+é ­"
+ 
+ msgid "E663: At end of changelist"
+-msgstr "E663: ÊÑ¹¹¥ê¥¹¥È€ÎËöÈø"
++msgstr "E663: å€æŽãªã¹ãã®æ«å°Ÿ"
+ 
+ msgid "Type  :quit<Enter>  to exit Vim"
+-msgstr "Vim€òœªÎ»€¹€ë€Ë€Ï :quit<Enter> €ÈÆþÎÏ€·€Æ€¯€À€µ€€"
++msgstr "Vimãçµäºããã«ã¯ :quit<Enter> ãšå
+¥åããŠãã ãã"
+ 
+ #, c-format
+ msgid "1 line %sed 1 time"
+-msgstr "1 ¹Ô€¬ %s €Ç 1 ²óœèÍý€µ€ì€Þ€·€¿"
++msgstr "1 è¡ã %s ã§ 1 ååŠçãããŸãã"
+ 
+ #, c-format
+ msgid "1 line %sed %d times"
+-msgstr "1 ¹Ô€¬ %s €Ç %d ²óœèÍý€µ€ì€Þ€·€¿"
++msgstr "1 è¡ã %s ã§ %d ååŠçãããŸãã"
+ 
+ #, c-format
+ msgid "%ld lines %sed 1 time"
+-msgstr "%ld ¹Ô€¬ %s €Ç 1 ²óœèÍý€µ€ì€Þ€·€¿"
++msgstr "%ld è¡ã %s ã§ 1 ååŠçãããŸãã"
+ 
+ #, c-format
+ msgid "%ld lines %sed %d times"
+-msgstr "%ld ¹Ô€¬ %s €Ç %d ²óœèÍý€µ€ì€Þ€·€¿"
++msgstr "%ld è¡ã %s ã§ %d ååŠçãããŸãã"
+ 
+ #, c-format
+ msgid "%ld lines to indent... "
+-msgstr "%ld ¹Ô€¬¥€¥ó¥Ç¥ó¥È€µ€ì€Þ€¹... "
++msgstr "%ld è¡ãã€ã³ãã³ããããŸã... "
+ 
+ msgid "1 line indented "
+-msgstr "1 ¹Ô€ò¥€¥ó¥Ç¥ó¥È€·€Þ€·€¿"
++msgstr "1 è¡ãã€ã³ãã³ãããŸãã "
+ 
+ #, c-format
+ msgid "%ld lines indented "
+-msgstr "%ld ¹Ô€ò¥€¥ó¥Ç¥ó¥È€·€Þ€·€¿"
++msgstr "%ld è¡ãã€ã³ãã³ãããŸãã "
+ 
+ msgid "E748: No previously used register"
+-msgstr "E748: €Þ€À¥ì¥ž¥¹¥¿€ò»ÈÍÑ€·€Æ€€€Þ€»€ó"
++msgstr "E748: ãŸã ã¬ãžã¹ã¿ãäœ¿çšããŠããŸãã"
+ 
+ #. must display the prompt
+ msgid "cannot yank; delete anyway"
+-msgstr "¥ä¥ó¥¯€Ç€­€Þ€»€ó; €È€Ë€«€¯ŸÃµî"
++msgstr "ã€ã³ã¯ã§ããŸãã; ãšã«ããæ¶å»"
+ 
+ msgid "1 line changed"
+-msgstr "1 ¹Ô€¬ÊÑ¹¹€µ€ì€Þ€·€¿"
++msgstr "1 è¡ãå€æŽãããŸãã"
+ 
+ #, c-format
+ msgid "%ld lines changed"
+-msgstr "%ld ¹Ô€¬ÊÑ¹¹€µ€ì€Þ€·€¿"
++msgstr "%ld è¡ãå€æŽãããŸãã"
+ 
+ #, c-format
+ msgid "freeing %ld lines"
+-msgstr "%ld ¹Ô€ò³«ÊüÃæ"
++msgstr "%ld è¡ãè§£æŸäž­"
+ 
+ msgid "block of 1 line yanked"
+-msgstr "1 ¹Ô€Î¥Ö¥í¥Ã¥¯€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++msgstr "1 è¡ã®ãã­ãã¯ãã€ã³ã¯ãããŸãã"
+ 
+ msgid "1 line yanked"
+-msgstr "1 ¹Ô€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++msgstr "1 è¡ãã€ã³ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "block of %ld lines yanked"
+-msgstr "%ld ¹Ô€Î¥Ö¥í¥Ã¥¯€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++msgstr "%ld è¡ã®ãã­ãã¯ãã€ã³ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "%ld lines yanked"
+-msgstr "%ld ¹Ô€¬¥ä¥ó¥¯€µ€ì€Þ€·€¿"
++msgstr "%ld è¡ãã€ã³ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E353: Nothing in register %s"
+-msgstr "E353: ¥ì¥ž¥¹¥¿ %s €Ë€Ï²¿€â€¢€ê€Þ€»€ó"
++msgstr "E353: ã¬ãžã¹ã¿ %s ã«ã¯äœããããŸãã"
+ 
+ #. Highlight title
+ msgid ""
+@@ -4032,724 +4211,735 @@
+ "--- Registers ---"
+ msgstr ""
+ "\n"
+-"--- ¥ì¥ž¥¹¥¿ ---"
++"--- ã¬ãžã¹ã¿ ---"
+ 
+ msgid "Illegal register name"
+-msgstr "ÉÔÀµ€Ê¥ì¥ž¥¹¥¿ÌŸ"
++msgstr "äžæ­£ãªã¬ãžã¹ã¿å"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Registers:\n"
+ msgstr ""
+ "\n"
+-"# ¥ì¥ž¥¹¥¿:\n"
++"# ã¬ãžã¹ã¿:\n"
+ 
+ #, c-format
+ msgid "E574: Unknown register type %d"
+-msgstr "E574: Ì€ÃÎ€Î¥ì¥ž¥¹¥¿·¿ %d €Ç€¹"
++msgstr "E574: æªç¥ã®ã¬ãžã¹ã¿å %d ã§ã"
+ 
+ #, c-format
+ msgid "%ld Cols; "
+-msgstr "%ld Îó; "
++msgstr "%ld å; "
+ 
+ #, c-format
+ msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
+-msgstr "ÁªÂò %s%ld / %ld ¹Ô; %ld / %ld Ã±žì; %ld / %ld Êž»ú"
++msgstr "éžæ %s%ld / %ld è¡; %ld / %ld åèª; %ld / %ld ãã€ã"
+ 
+ #, c-format
+ msgid ""
+ "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+ "Bytes"
+-msgstr "ÁªÂò %s%ld / %ld ¹Ô; %ld / %ld Ã±žì; %ld / %ld Êž»ú; %ld / %ld ¥Ð¥€¥È"
++msgstr "éžæ %s%ld / %ld è¡; %ld / %ld åèª; %ld / %ld æå­; %ld / %ld ãã€ã"
+ 
+ #, c-format
+ msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+-msgstr "Îó %s / %s; ¹Ô %ld of %ld; Ã±žì %ld / %ld; Êž»ú %ld / %ld"
++msgstr "å %s / %s; è¡ %ld of %ld; åèª %ld / %ld; ãã€ã %ld / %ld"
+ 
+ #, c-format
+ msgid ""
+ "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+ "%ld"
+ msgstr ""
+-"Îó %s / %s; ¹Ô %ld / %ld; Ã±žì %ld / %ld; Êž»ú %ld / %ld; ¥Ð¥€¥È %ld of %ld"
++"å %s / %s; è¡ %ld / %ld; åèª %ld / %ld; æå­ %ld / %ld; ãã€ã %ld of %ld"
+ 
+ #, c-format
+ msgid "(+%ld for BOM)"
+ msgstr "(+%ld for BOM)"
+ 
+ msgid "%<%f%h%m%=Page %N"
+-msgstr "%<%f%h%m%=%N ¥Ú¡Œ¥ž"
++msgstr "%<%f%h%m%=%N ããŒãž"
+ 
+ msgid "Thanks for flying Vim"
+-msgstr "Vim €ò»È€Ã€Æ€¯€ì€Æ€¢€ê€¬€È€Š"
++msgstr "Vim ãäœ¿ã£ãŠãããŠããããšã"
+ 
+ msgid "E518: Unknown option"
+-msgstr "E518: Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹"
++msgstr "E518: æªç¥ã®ãªãã·ã§ã³ã§ã"
+ 
+ msgid "E519: Option not supported"
+-msgstr "E519: ¥ª¥×¥·¥ç¥ó€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E519: ãªãã·ã§ã³ã¯ãµããŒããããŠããŸãã"
+ 
+ msgid "E520: Not allowed in a modeline"
+-msgstr "E520: modeline €Ç€Ïµö²Ä€µ€ì€Þ€»€ó"
++msgstr "E520: modeline ã§ã¯èš±å¯ãããŸãã"
++
++msgid "E846: Key code not set"
++msgstr "E846: ã­ãŒã³ãŒããèš­å®ãããŠããŸãã"
+ 
+ msgid "E521: Number required after ="
+-msgstr "E521: = €Îžå€Ë€Ï¿ô»ú€¬É¬Í×€Ç€¹"
++msgstr "E521: = ã®åŸã«ã¯æ°å­ãå¿
+èŠã§ã"
+ 
+ msgid "E522: Not found in termcap"
+-msgstr "E522: termcap Æâ€Ë€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E522: termcap å
+ã«èŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "E539: Illegal character <%s>"
+-msgstr "E539: ÉÔÀµ€ÊÊž»ú€Ç€¹ <%s>"
++msgstr "E539: äžæ­£ãªæå­ã§ã <%s>"
+ 
+ msgid "E529: Cannot set 'term' to empty string"
+-msgstr "E529: 'term' €Ë€Ï¶õÊž»úÎó€òÀßÄê€Ç€­€Þ€»€ó"
++msgstr "E529: 'term' ã«ã¯ç©ºæå­åãèš­å®ã§ããŸãã"
+ 
+ msgid "E530: Cannot change term in GUI"
+-msgstr "E530: GUI€Ç€Ï 'term' €òÊÑ¹¹€Ç€­€Þ€»€ó"
++msgstr "E530: GUIã§ã¯ 'term' ãå€æŽã§ããŸãã"
+ 
+ msgid "E531: Use \":gui\" to start the GUI"
+-msgstr "E531: GUI€ò¥¹¥¿¡Œ¥È€¹€ë€Ë€Ï \":gui\" €ò»ÈÍÑ€·€Æ€¯€À€µ€€"
++msgstr "E531: GUIãã¹ã¿ãŒãããã«ã¯ \":gui\" ãäœ¿çšããŠãã ãã"
+ 
+ msgid "E589: 'backupext' and 'patchmode' are equal"
+-msgstr "E589: 'backupext' €È 'patchmode' €¬Æ±€ž€Ç€¹"
++msgstr "E589: 'backupext' ãš 'patchmode' ãåãã§ã"
++
++msgid "E834: Conflicts with value of 'listchars'"
++msgstr "E834: 'listchars'ã®å€ã«ççŸããããŸã"
++
++msgid "E835: Conflicts with value of 'fillchars'"
++msgstr "E835: 'fillchars'ã®å€ã«ççŸããããŸã"
+ 
+ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+-msgstr "E617: GTK+2 GUI€Ç€ÏÊÑ¹¹€Ç€­€Þ€»€ó"
++msgstr "E617: GTK+2 GUIã§ã¯å€æŽã§ããŸãã"
+ 
+ msgid "E524: Missing colon"
+-msgstr "E524: ¥³¥í¥ó€¬€¢€ê€Þ€»€ó"
++msgstr "E524: ã³ã­ã³ããããŸãã"
+ 
+ msgid "E525: Zero length string"
+-msgstr "E525: Êž»úÎó€ÎÄ¹€µ€¬¥Œ¥í€Ç€¹"
++msgstr "E525: æå­åã®é·ãããŒã­ã§ã"
+ 
+ #, c-format
+ msgid "E526: Missing number after <%s>"
+-msgstr "E526: <%s> €Îžå€Ë¿ô»ú€¬€¢€ê€Þ€»€ó"
++msgstr "E526: <%s> ã®åŸã«æ°å­ããããŸãã"
+ 
+ msgid "E527: Missing comma"
+-msgstr "E527: ¥«¥ó¥Þ€¬€¢€ê€Þ€»€ó"
++msgstr "E527: ã«ã³ãããããŸãã"
+ 
+ msgid "E528: Must specify a ' value"
+-msgstr "E528: ' €ÎÃÍ€ò»ØÄê€·€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgstr "E528: ' ã®å€ãæå®ããªããã°ãªããŸãã"
+ 
+ msgid "E595: contains unprintable or wide character"
+-msgstr "E595: ÉœŒš€Ç€­€Ê€€Êž»ú€«¥ï¥€¥ÉÊž»ú€òŽÞ€ó€Ç€€€Þ€¹"
++msgstr "E595: è¡šç€ºã§ããªãæå­ãã¯ã€ãæå­ãå«ãã§ããŸã"
+ 
+ msgid "E596: Invalid font(s)"
+-msgstr "E596: Ìµžú€Ê¥Õ¥©¥ó¥È€Ç€¹"
++msgstr "E596: ç¡å¹ãªãã©ã³ãã§ã"
+ 
+ msgid "E597: can't select fontset"
+-msgstr "E597: ¥Õ¥©¥ó¥È¥»¥Ã¥È€òÁªÂò€Ç€­€Þ€»€ó"
++msgstr "E597: ãã©ã³ãã»ãããéžæã§ããŸãã"
+ 
+ msgid "E598: Invalid fontset"
+-msgstr "E598: Ìµžú€Ê¥Õ¥©¥ó¥È¥»¥Ã¥È€Ç€¹"
++msgstr "E598: ç¡å¹ãªãã©ã³ãã»ããã§ã"
+ 
+ msgid "E533: can't select wide font"
+-msgstr "E533: ¥ï¥€¥É¥Õ¥©¥ó¥È€òÁªÂò€Ç€­€Þ€»€ó"
++msgstr "E533: ã¯ã€ããã©ã³ããéžæã§ããŸãã"
+ 
+ msgid "E534: Invalid wide font"
+-msgstr "E534: Ìµžú€Ê¥ï¥€¥É¥Õ¥©¥ó¥È€Ç€¹"
++msgstr "E534: ç¡å¹ãªã¯ã€ããã©ã³ãã§ã"
+ 
+ #, c-format
+ msgid "E535: Illegal character after <%c>"
+-msgstr "E535: <%c> €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€¹"
++msgstr "E535: <%c> ã®åŸã«äžæ­£ãªæå­ããããŸã"
+ 
+ msgid "E536: comma required"
+-msgstr "E536: ¥«¥ó¥Þ€¬É¬Í×€Ç€¹"
++msgstr "E536: ã«ã³ããå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "E537: 'commentstring' must be empty or contain %s"
+-msgstr "E537: 'commentstring' €Ï¶õ€Ç€¢€ë€« %s €òŽÞ€àÉ¬Í×€¬€¢€ê€Þ€¹"
++msgstr "E537: 'commentstring' ã¯ç©ºã§ããã %s ãå«ãå¿
+èŠããããŸã"
+ 
+ msgid "E538: No mouse support"
+-msgstr "E538: ¥Þ¥Š¥¹€Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó"
++msgstr "E538: ããŠã¹ã¯ãµããŒããããŸãã"
+ 
+ msgid "E540: Unclosed expression sequence"
+-msgstr "E540: Œ°€¬œªÎ»€·€Æ€€€Þ€»€ó"
++msgstr "E540: åŒãçµäºããŠããŸãã"
+ 
+ msgid "E541: too many items"
+-msgstr "E541: Í×ÁÇ€¬Â¿²á€®€Þ€¹"
++msgstr "E541: èŠçŽ ãå€éããŸã"
+ 
+ msgid "E542: unbalanced groups"
+-msgstr "E542: ¥°¥ë¡Œ¥×€¬Äà¹ç€€€Þ€»€ó"
++msgstr "E542: ã°ã«ãŒããé£åããŸãã"
+ 
+ msgid "E590: A preview window already exists"
+-msgstr "E590: ¥×¥ì¥Ó¥å¡Œ¥Š¥£¥ó¥É¥Š€¬Žû€ËÂžºß€·€Þ€¹"
++msgstr "E590: ãã¬ãã¥ãŒãŠã£ã³ããŠãæ¢ã«å­åšããŸã"
+ 
+ msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
+ msgstr ""
+-"W17: ¥¢¥é¥Ó¥¢Êž»ú€Ë€ÏUTF-8€¬É¬Í×€Ê€Î€Ç, ':set encoding=utf-8' €·€Æ€¯€À€µ€€"
++"W17: ã¢ã©ãã¢æå­ã«ã¯UTF-8ãå¿
+èŠãªã®ã§, ':set encoding=utf-8' ããŠãã ãã"
+ 
+ #, c-format
+ msgid "E593: Need at least %d lines"
+-msgstr "E593: ºÇÄã %d €Î¹Ô¿ô€¬É¬Í×€Ç€¹"
++msgstr "E593: æäœ %d ã®è¡æ°ãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "E594: Need at least %d columns"
+-msgstr "E594: ºÇÄã %d €Î¥«¥é¥àÉý€¬É¬Í×€Ç€¹"
++msgstr "E594: æäœ %d ã®ã«ã©ã å¹
+ãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "E355: Unknown option: %s"
+-msgstr "E355: Ì€ÃÎ€Î¥ª¥×¥·¥ç¥ó€Ç€¹: %s"
++msgstr "E355: æªç¥ã®ãªãã·ã§ã³ã§ã: %s"
+ 
+ #. There's another character after zeros or the string
+ #. * is empty.  In both cases, we are trying to set a
+ #. * num option using a string.
+ #, c-format
+ msgid "E521: Number required: &%s = '%s'"
+-msgstr "E521: ¿ô»ú€¬É¬Í×€Ç€¹: &%s = '%s'"
++msgstr "E521: æ°å­ãå¿
+èŠã§ã: &%s = '%s'"
+ 
+ msgid ""
+ "\n"
+ "--- Terminal codes ---"
+ msgstr ""
+ "\n"
+-"--- ÃŒËö¥³¡Œ¥É ---"
++"--- ç«¯æ«ã³ãŒã ---"
+ 
+ msgid ""
+ "\n"
+ "--- Global option values ---"
+ msgstr ""
+ "\n"
+-"--- ¥°¥í¡Œ¥Ð¥ë¥ª¥×¥·¥ç¥óÃÍ ---"
++"--- ã°ã­ãŒãã«ãªãã·ã§ã³å€ ---"
+ 
+ msgid ""
+ "\n"
+ "--- Local option values ---"
+ msgstr ""
+ "\n"
+-"--- ¥í¡Œ¥«¥ë¥ª¥×¥·¥ç¥óÃÍ ---"
++"--- ã­ãŒã«ã«ãªãã·ã§ã³å€ ---"
+ 
+ msgid ""
+ "\n"
+ "--- Options ---"
+ msgstr ""
+ "\n"
+-"--- ¥ª¥×¥·¥ç¥ó ---"
++"--- ãªãã·ã§ã³ ---"
+ 
+ msgid "E356: get_varp ERROR"
+-msgstr "E356: get_varp ¥š¥é¡Œ"
++msgstr "E356: get_varp ãšã©ãŒ"
+ 
+ #, c-format
+ msgid "E357: 'langmap': Matching character missing for %s"
+-msgstr "E357: 'langmap': %s €ËÂÐ±þ€¹€ëÊž»ú€¬€¢€ê€Þ€»€ó"
++msgstr "E357: 'langmap': %s ã«å¯Ÿå¿ããæå­ããããŸãã"
+ 
+ #, c-format
+ msgid "E358: 'langmap': Extra characters after semicolon: %s"
+-msgstr "E358: 'langmap': ¥»¥ß¥³¥í¥ó€Îžå€ËÍŸÊ¬€ÊÊž»ú€¬€¢€ê€Þ€¹: %s"
++msgstr "E358: 'langmap': ã»ãã³ã­ã³ã®åŸã«äœåãªæå­ããããŸã: %s"
+ 
+ msgid "cannot open "
+-msgstr "³«€±€Þ€»€ó "
++msgstr "éããŸãã "
+ 
+ msgid "VIM: Can't open window!\n"
+-msgstr "VIM: ¥Š¥£¥ó¥É¥Š€ò³«€±€Þ€»€ó!\n"
++msgstr "VIM: ãŠã£ã³ããŠãéããŸãã!\n"
+ 
+ msgid "Need Amigados version 2.04 or later\n"
+-msgstr "Amigados€Î¥Ð¡Œ¥ž¥ç¥ó 2.04€«€œ€ì°Ê¹ß€¬É¬Í×€Ç€¹\n"
++msgstr "Amigadosã®ããŒãžã§ã³ 2.04ãããä»¥éãå¿
+èŠã§ã\n"
+ 
+ #, c-format
+ msgid "Need %s version %ld\n"
+-msgstr "%s €Î¥Ð¡Œ¥ž¥ç¥ó %ld €¬É¬Í×€Ç€¹\n"
++msgstr "%s ã®ããŒãžã§ã³ %ld ãå¿
+èŠã§ã\n"
+ 
+ msgid "Cannot open NIL:\n"
+-msgstr "NIL€ò³«€±€Þ€»€ó:\n"
++msgstr "NILãéããŸãã:\n"
+ 
+ msgid "Cannot create "
+-msgstr "ºîÀ®€Ç€­€Þ€»€ó "
++msgstr "äœæã§ããŸãã "
+ 
+ #, c-format
+ msgid "Vim exiting with %d\n"
+-msgstr "Vim€Ï %d €ÇœªÎ»€·€Þ€¹\n"
++msgstr "Vimã¯ %d ã§çµäºããŸã\n"
+ 
+ msgid "cannot change console mode ?!\n"
+-msgstr "¥³¥ó¥œ¡Œ¥ë¥â¡Œ¥É€òÊÑ¹¹€Ç€­€Þ€»€ó?!\n"
++msgstr "ã³ã³ãœãŒã«ã¢ãŒããå€æŽã§ããŸãã?!\n"
+ 
+ msgid "mch_get_shellsize: not a console??\n"
+-msgstr "mch_get_shellsize: ¥³¥ó¥œ¡Œ¥ë€Ç€Ï€Ê€€??\n"
++msgstr "mch_get_shellsize: ã³ã³ãœãŒã«ã§ã¯ãªã??\n"
+ 
+ #. if Vim opened a window: Executing a shell may cause crashes
+ msgid "E360: Cannot execute shell with -f option"
+-msgstr "E360: -f ¥ª¥×¥·¥ç¥ó€Ç¥·¥§¥ë€òŒÂ¹Ô€Ç€­€Þ€»€ó"
++msgstr "E360: -f ãªãã·ã§ã³ã§ã·ã§ã«ãå®è¡ã§ããŸãã"
+ 
+ msgid "Cannot execute "
+-msgstr "ŒÂ¹Ô€Ç€­€Þ€»€ó "
++msgstr "å®è¡ã§ããŸãã "
+ 
+ msgid "shell "
+-msgstr "¥·¥§¥ë "
++msgstr "ã·ã§ã« "
+ 
+ msgid " returned\n"
+-msgstr " Ìá€ê€Þ€·€¿\n"
++msgstr " æ»ããŸãã\n"
+ 
+ msgid "ANCHOR_BUF_SIZE too small."
+-msgstr "ANCHOR_BUF_SIZE €¬Ÿ®€µ²á€®€Þ€¹."
++msgstr "ANCHOR_BUF_SIZE ãå°ãéããŸã."
+ 
+ msgid "I/O ERROR"
+-msgstr "ÆþœÐÎÏ¥š¥é¡Œ"
++msgstr "å
+¥åºåãšã©ãŒ"
+ 
+ msgid "Message"
+-msgstr "¥á¥Ã¥»¡Œ¥ž"
++msgstr "ã¡ãã»ãŒãž"
+ 
+ msgid "'columns' is not 80, cannot execute external commands"
+-msgstr "'columns' €¬80€Ç€Ï€Ê€€€¿€á, ³°Éô¥³¥Þ¥ó¥É€òŒÂ¹Ô€Ç€­€Þ€»€ó"
++msgstr "'columns' ã80ã§ã¯ãªããã, å€éšã³ãã³ããå®è¡ã§ããŸãã"
+ 
+ msgid "E237: Printer selection failed"
+-msgstr "E237: ¥×¥ê¥ó¥¿€ÎÁªÂò€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E237: ããªã³ã¿ã®éžæã«å€±æããŸãã"
+ 
+ #, c-format
+ msgid "to %s on %s"
+-msgstr "%s €Ø (%s Ÿå€Î)"
++msgstr "%s ãž (%s äžã®)"
+ 
+ #, c-format
+ msgid "E613: Unknown printer font: %s"
+-msgstr "E613: Ì€ÃÎ€Î¥×¥ê¥ó¥¿¥ª¥×¥·¥ç¥ó€Ç€¹: %s"
++msgstr "E613: æªç¥ã®ããªã³ã¿ãªãã·ã§ã³ã§ã: %s"
+ 
+ #, c-format
+ msgid "E238: Print error: %s"
+-msgstr "E238: °õºþ¥š¥é¡Œ: %s"
++msgstr "E238: å°å·ãšã©ãŒ: %s"
+ 
+ #, c-format
+ msgid "Printing '%s'"
+-msgstr "°õºþ€·€Æ€€€Þ€¹: '%s'"
++msgstr "å°å·ããŠããŸã: '%s'"
+ 
+ #, c-format
+ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+-msgstr "E244: Êž»ú¥»¥Ã¥ÈÌŸ \"%s\" €ÏÉÔÀµ€Ç€¹ (¥Õ¥©¥ó¥ÈÌŸ \"%s\")"
++msgstr "E244: æå­ã»ããå \"%s\" ã¯äžæ­£ã§ã (ãã©ã³ãå \"%s\")"
+ 
+ #, c-format
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+-msgstr "E245: '%c' €ÏÉÔÀµ€ÊÊž»ú€Ç€¹ (¥Õ¥©¥ó¥ÈÌŸ \"%s\")"
+-
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Ìµžú€Ê 'osfiletype' ¥ª¥×¥·¥ç¥ó - \"Text\" €ò»È€€€Þ€¹"
++msgstr "E245: '%c' ã¯äžæ­£ãªæå­ã§ã (ãã©ã³ãå \"%s\")"
+ 
+ msgid "Vim: Double signal, exiting\n"
+-msgstr "Vim: 2œÅ€Î¥·¥°¥Ê¥ë€Î€¿€á, œªÎ»€·€Þ€¹\n"
++msgstr "Vim: 2éã®ã·ã°ãã«ã®ãã, çµäºããŸã\n"
+ 
+ #, c-format
+ msgid "Vim: Caught deadly signal %s\n"
+-msgstr "Vim: Ã×Ì¿Åª¥·¥°¥Ê¥ë %s €òž¡ÃÎ€·€Þ€·€¿\n"
++msgstr "Vim: èŽåœçã·ã°ãã« %s ãæ€ç¥ããŸãã\n"
+ 
+ #, c-format
+ msgid "Vim: Caught deadly signal\n"
+-msgstr "Vim: Ã×Ì¿Åª¥·¥°¥Ê¥ë€òž¡ÃÎ€·€Þ€·€¿\n"
++msgstr "Vim: èŽåœçã·ã°ãã«ãæ€ç¥ããŸãã\n"
+ 
+ #, c-format
+ msgid "Opening the X display took %ld msec"
+-msgstr "X¥µ¡Œ¥Ð€Ø€ÎÀÜÂ³€Ë %ld ¥ß¥êÉÃ€«€«€ê€Þ€·€¿"
++msgstr "XãµãŒããžã®æ¥ç¶ã« %ld ããªç§ããããŸãã"
+ 
+ msgid ""
+ "\n"
+ "Vim: Got X error\n"
+ msgstr ""
+ "\n"
+-"Vim: X €Î¥š¥é¡Œ€òž¡œÐ€·€Þ€·€¿r\n"
++"Vim: X ã®ãšã©ãŒãæ€åºããŸããr\n"
+ 
+ msgid "Testing the X display failed"
+-msgstr "X display €Î¥Á¥§¥Ã¥¯€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "X display ã®ãã§ãã¯ã«å€±æããŸãã"
+ 
+ msgid "Opening the X display timed out"
+-msgstr "X display €Î open €¬¥¿¥€¥à¥¢¥Š¥È€·€Þ€·€¿"
++msgstr "X display ã® open ãã¿ã€ã ã¢ãŠãããŸãã"
+ 
+ msgid ""
+ "\n"
+ "Could not get security context for "
+ msgstr ""
+ "\n"
+-"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È€òŒèÆÀ€Ç€­€Þ€»€ó "
++"ã»ã­ã¥ãªãã£ã³ã³ãã­ã¹ããååŸã§ããŸãã "
+ 
+ msgid ""
+ "\n"
+ "Could not set security context for "
+ msgstr ""
+ "\n"
+-"¥»¥­¥å¥ê¥Æ¥£¥³¥ó¥Æ¥­¥¹¥È€òÀßÄê€Ç€­€Þ€»€ó "
++"ã»ã­ã¥ãªãã£ã³ã³ãã­ã¹ããèš­å®ã§ããŸãã "
+ 
+ msgid ""
+ "\n"
+ "Cannot execute shell "
+ msgstr ""
+ "\n"
+-"¥·¥§¥ë€òŒÂ¹Ô€Ç€­€Þ€»€ó "
++"ã·ã§ã«ãå®è¡ã§ããŸãã "
+ 
+ msgid ""
+ "\n"
+ "Cannot execute shell sh\n"
+ msgstr ""
+ "\n"
+-"sh ¥·¥§¥ë€òŒÂ¹Ô€Ç€­€Þ€»€ó\n"
++"sh ã·ã§ã«ãå®è¡ã§ããŸãã\n"
+ 
+ msgid ""
+ "\n"
+ "shell returned "
+ msgstr ""
+ "\n"
+-"¥·¥§¥ë€¬ÃÍ€òÊÖ€·€Þ€·€¿ "
++"ã·ã§ã«ãå€ãè¿ããŸãã "
+ 
+ msgid ""
+ "\n"
+ "Cannot create pipes\n"
+ msgstr ""
+ "\n"
+-"¥Ñ¥€¥×€òºîÀ®€Ç€­€Þ€»€ó\n"
++"ãã€ããäœæã§ããŸãã\n"
+ 
+ msgid ""
+ "\n"
+ "Cannot fork\n"
+ msgstr ""
+ "\n"
+-"fork €Ç€­€Þ€»€ó\n"
++"fork ã§ããŸãã\n"
+ 
+ msgid ""
+ "\n"
+ "Command terminated\n"
+ msgstr ""
+ "\n"
+-"¥³¥Þ¥ó¥É€òÃæÃÇ€·€Þ€·€¿\n"
++"ã³ãã³ããäž­æ­ããŸãã\n"
+ 
+ msgid "XSMP lost ICE connection"
+-msgstr "XSMP €¬ICEÀÜÂ³€òŒº€€€Þ€·€¿"
++msgstr "XSMP ãICEæ¥ç¶ãå€±ããŸãã"
+ 
+ #, c-format
+ msgid "dlerror = \"%s\""
+ msgstr "dlerror = \"%s\""
+ 
+ msgid "Opening the X display failed"
+-msgstr "X display €Î open €ËŒºÇÔ€·€Þ€·€¿"
++msgstr "X display ã® open ã«å€±æããŸãã"
+ 
+ msgid "XSMP handling save-yourself request"
+-msgstr "XSMP €¬save-yourselfÍ×µá€òœèÍý€·€Æ€€€Þ€¹"
++msgstr "XSMP ãsave-yourselfèŠæ±ãåŠçããŠããŸã"
+ 
+ msgid "XSMP opening connection"
+-msgstr "XSMP €¬ÀÜÂ³€ò³«»Ï€·€Æ€€€Þ€¹"
++msgstr "XSMP ãæ¥ç¶ãéå§ããŠããŸã"
+ 
+ msgid "XSMP ICE connection watch failed"
+-msgstr "XSMP ICEÀÜÂ³€¬ŒºÇÔ€·€¿€è€Š€Ç€¹"
++msgstr "XSMP ICEæ¥ç¶ãå€±æããããã§ã"
+ 
+ #, c-format
+ msgid "XSMP SmcOpenConnection failed: %s"
+-msgstr "XSMP SmcOpenConnection€¬ŒºÇÔ€·€Þ€·€¿: %s"
++msgstr "XSMP SmcOpenConnectionãå€±æããŸãã: %s"
+ 
+ msgid "At line"
+-msgstr "¹Ô"
++msgstr "è¡"
+ 
+ msgid "Could not load vim32.dll!"
+-msgstr "vim32.dll €ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "vim32.dll ãã­ãŒãã§ããŸããã§ãã"
+ 
+ msgid "VIM Error"
+-msgstr "VIM¥š¥é¡Œ"
++msgstr "VIMãšã©ãŒ"
+ 
+ msgid "Could not fix up function pointers to the DLL!"
+-msgstr "DLL€«€éŽØ¿ô¥Ý¥€¥ó¥¿€òŒèÆÀ€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "DLLããé¢æ°ãã€ã³ã¿ãååŸã§ããŸããã§ãã"
+ 
+ #, c-format
+ msgid "shell returned %d"
+-msgstr "¥·¥§¥ë€¬¥³¡Œ¥É %d €ÇœªÎ»€·€Þ€·€¿"
++msgstr "ã·ã§ã«ãã³ãŒã %d ã§çµäºããŸãã"
+ 
+ #, c-format
+ msgid "Vim: Caught %s event\n"
+-msgstr "Vim: ¥€¥Ù¥ó¥È %s €òž¡ÃÎ\n"
++msgstr "Vim: ã€ãã³ã %s ãæ€ç¥\n"
+ 
+ msgid "close"
+-msgstr "ÊÄ€ž€ë"
++msgstr "éãã"
+ 
+ msgid "logoff"
+-msgstr "¥í¥°¥ª¥Õ"
++msgstr "ã­ã°ãªã"
+ 
+ msgid "shutdown"
+-msgstr "¥·¥ã¥Ã¥È¥À¥Š¥ó"
++msgstr "ã·ã£ããããŠã³"
+ 
+ msgid "E371: Command not found"
+-msgstr "E371: ¥³¥Þ¥ó¥É€¬€¢€ê€Þ€»€ó"
++msgstr "E371: ã³ãã³ãããããŸãã"
+ 
+ msgid ""
+ "VIMRUN.EXE not found in your $PATH.\n"
+ "External commands will not pause after completion.\n"
+ "See  :help win32-vimrun  for more information."
+ msgstr ""
+-"VIMRUN.EXE€¬ $PATH €ÎÃæ€Ë€ß€Ä€«€ê€Þ€»€ó.\n"
+-"³°Éô¥³¥Þ¥ó¥É€ÎœªÎ»žå€Ë°ì»þÄä»ß€ò€·€Þ€»€ó.\n"
+-"ŸÜºÙ€Ï  :help win32-vimrun  €ò»²ŸÈ€·€Æ€¯€À€µ€€."
++"VIMRUN.EXEã $PATH ã®äž­ã«èŠã€ãããŸãã.\n"
++"å€éšã³ãã³ãã®çµäºåŸã«äžæåæ­¢ãããŸãã.\n"
++"è©³çŽ°ã¯  :help win32-vimrun  ãåç
+§ããŠãã ãã."
+ 
+ msgid "Vim Warning"
+-msgstr "Vim€Î·Ù¹ð"
++msgstr "Vimã®è­Šå"
+ 
+ #, c-format
+ msgid "E372: Too many %%%c in format string"
+-msgstr "E372: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€Ë %%%c €¬Â¿²á€®€Þ€¹"
++msgstr "E372: ãã©ãŒãããæå­åã« %%%c ãå€éããŸã"
+ 
+ #, c-format
+ msgid "E373: Unexpected %%%c in format string"
+-msgstr "E373: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€ËÍœŽü€»€Ì %%%c €¬€¢€ê€Þ€·€¿"
++msgstr "E373: ãã©ãŒãããæå­åã«äºæãã¬ %%%c ããããŸãã"
+ 
+ msgid "E374: Missing ] in format string"
+-msgstr "E374: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€Ë ] €¬€¢€ê€Þ€»€ó"
++msgstr "E374: ãã©ãŒãããæå­åã« ] ããããŸãã"
+ 
+ #, c-format
+ msgid "E375: Unsupported %%%c in format string"
+-msgstr "E375: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€Ç€Ï %%%c €Ï¥µ¥Ý¡Œ¥È€µ€ì€Þ€»€ó"
++msgstr "E375: ãã©ãŒãããæå­åã§ã¯ %%%c ã¯ãµããŒããããŸãã"
+ 
+ #, c-format
+ msgid "E376: Invalid %%%c in format string prefix"
+-msgstr "E376: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€ÎÁ°ÃÖ€ËÌµžú€Ê %%%c €¬€¢€ê€Þ€¹"
++msgstr "E376: ãã©ãŒãããæå­åã®åçœ®ã«ç¡å¹ãª %%%c ããããŸã"
+ 
+ #, c-format
+ msgid "E377: Invalid %%%c in format string"
+-msgstr "E377: ¥Õ¥©¡Œ¥Þ¥Ã¥ÈÊž»úÎó€ËÌµžú€Ê %%%c €¬€¢€ê€Þ€¹"
++msgstr "E377: ãã©ãŒãããæå­åã«ç¡å¹ãª %%%c ããããŸã"
+ 
+ msgid "E378: 'errorformat' contains no pattern"
+-msgstr "E378: 'errorformat' €Ë¥Ñ¥¿¡Œ¥ó€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E378: 'errorformat' ã«ãã¿ãŒã³ãæå®ãããŠããŸãã"
+ 
+ msgid "E379: Missing or empty directory name"
+-msgstr "E379: ¥Ç¥£¥ì¥¯¥È¥êÌŸ€¬Ìµ€€€«¶õ€Ç€¹"
++msgstr "E379: ãã£ã¬ã¯ããªåãç¡ããç©ºã§ã"
+ 
+ msgid "E553: No more items"
+-msgstr "E553: Í×ÁÇ€¬€â€Š€¢€ê€Þ€»€ó"
++msgstr "E553: èŠçŽ ããããããŸãã"
+ 
+ #, c-format
+ msgid "(%d of %d)%s%s: "
+ msgstr "(%d of %d)%s%s: "
+ 
+ msgid " (line deleted)"
+-msgstr " (¹Ô€¬ºïœü€µ€ì€Þ€·€¿)"
++msgstr " (è¡ãåé€ãããŸãã)"
+ 
+ msgid "E380: At bottom of quickfix stack"
+-msgstr "E380: quickfix ¥¹¥¿¥Ã¥¯€ÎËöÈø€Ç€¹"
++msgstr "E380: quickfix ã¹ã¿ãã¯ã®æ«å°Ÿã§ã"
+ 
+ msgid "E381: At top of quickfix stack"
+-msgstr "E381: quickfix ¥¹¥¿¥Ã¥¯€ÎÀèÆ¬€Ç€¹"
++msgstr "E381: quickfix ã¹ã¿ãã¯ã®å
+é ­ã§ã"
+ 
+ #, c-format
+ msgid "error list %d of %d; %d errors"
+-msgstr "¥š¥é¡Œ°ìÍ÷ %d of %d; %d žÄ¥š¥é¡Œ"
++msgstr "ãšã©ãŒäžèŠ§ %d of %d; %d åãšã©ãŒ"
+ 
+ msgid "E382: Cannot write, 'buftype' option is set"
+-msgstr "E382: 'buftype' ¥ª¥×¥·¥ç¥ó€¬ÀßÄê€µ€ì€Æ€€€ë€Î€Çœñ¹þ€ß€Þ€»€ó"
++msgstr "E382: 'buftype' ãªãã·ã§ã³ãèš­å®ãããŠããã®ã§æžèŸŒã¿ãŸãã"
++
++msgid "Error file"
++msgstr "ãšã©ãŒãã¡ã€ã«"
+ 
+ msgid "E683: File name missing or invalid pattern"
+-msgstr "E683: ¥Õ¥¡¥€¥ëÌŸ€¬Ìµ€€€«Ìµžú€Ê¥Ñ¥¿¡Œ¥ó€Ç€¹"
++msgstr "E683: ãã¡ã€ã«åãç¡ããç¡å¹ãªãã¿ãŒã³ã§ã"
+ 
+ #, c-format
+ msgid "Cannot open file \"%s\""
+-msgstr "¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++msgstr "ãã¡ã€ã« \"%s\" ãéããŸãã"
+ 
+ msgid "E681: Buffer is not loaded"
+-msgstr "E681: ¥Ð¥Ã¥Õ¥¡€ÏÆÉ€ß¹þ€Þ€ì€Þ€»€ó€Ç€·€¿"
++msgstr "E681: ãããã¡ã¯èª­ã¿èŸŒãŸããŸããã§ãã"
+ 
+ msgid "E777: String or List expected"
+-msgstr "E777: Êž»úÎó€«¥ê¥¹¥È€¬É¬Í×€Ç€¹"
++msgstr "E777: æå­åããªã¹ããå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "E369: invalid item in %s%%[]"
+-msgstr "E369: Ìµžú€Ê¹àÌÜ€Ç€¹: %s%%[]"
++msgstr "E369: ç¡å¹ãªé 
+ç®ã§ã: %s%%[]"
+ 
+ msgid "E339: Pattern too long"
+-msgstr "E339: ¥Ñ¥¿¡Œ¥ó€¬Ä¹²á€®€Þ€¹"
++msgstr "E339: ãã¿ãŒã³ãé·éããŸã"
+ 
+ msgid "E50: Too many \\z("
+-msgstr "E50: \\z( €¬Â¿²á€®€Þ€¹"
++msgstr "E50: \\z( ãå€éããŸã"
+ 
+ #, c-format
+ msgid "E51: Too many %s("
+-msgstr "E51: %s( €¬Â¿²á€®€Þ€¹"
++msgstr "E51: %s( ãå€éããŸã"
+ 
+ msgid "E52: Unmatched \\z("
+-msgstr "E52: \\z( €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++msgstr "E52: \\z( ãé£ãåã£ãŠããŸãã"
+ 
+ #, c-format
+ msgid "E53: Unmatched %s%%("
+-msgstr "E53: %s%%( €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++msgstr "E53: %s%%( ãé£ãåã£ãŠããŸãã"
+ 
+ #, c-format
+ msgid "E54: Unmatched %s("
+-msgstr "E54: %s( €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++msgstr "E54: %s( ãé£ãåã£ãŠããŸãã"
+ 
+ #, c-format
+ msgid "E55: Unmatched %s)"
+-msgstr "E55: %s) €¬Äà€ê¹ç€Ã€Æ€€€Þ€»€ó"
++msgstr "E55: %s) ãé£ãåã£ãŠããŸãã"
+ 
+ #, c-format
+ msgid "E59: invalid character after %s@"
+-msgstr "E59: %s@ €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++msgstr "E59: %s@ ã®åŸã«äžæ­£ãªæå­ããããŸãã"
+ 
+ #, c-format
+ msgid "E60: Too many complex %s{...}s"
+-msgstr "E60: Ê£»š€Ê %s{...} €¬Â¿²á€®€Þ€¹"
++msgstr "E60: è€éãª %s{...} ãå€éããŸã"
+ 
+ #, c-format
+ msgid "E61: Nested %s*"
+-msgstr "E61:%s* €¬Æþ€ì»Ò€Ë€Ê€Ã€Æ€€€Þ€¹"
++msgstr "E61:%s* ãå
+¥ãå­ã«ãªã£ãŠããŸã"
+ 
+ #, c-format
+ msgid "E62: Nested %s%c"
+-msgstr "E62:%s%c €¬Æþ€ì»Ò€Ë€Ê€Ã€Æ€€€Þ€¹"
++msgstr "E62:%s%c ãå
+¥ãå­ã«ãªã£ãŠããŸã"
+ 
+ #
+ msgid "E63: invalid use of \\_"
+-msgstr "E63: \\_ €ÎÌµžú€Ê»ÈÍÑÊýË¡€Ç€¹"
++msgstr "E63: \\_ ã®ç¡å¹ãªäœ¿çšæ¹æ³ã§ã"
+ 
+ #, c-format
+ msgid "E64: %s%c follows nothing"
+-msgstr "E64:%s%c €Îžå€Ë€Ê€Ë€â€¢€ê€Þ€»€ó"
++msgstr "E64:%s%c ã®åŸã«ãªã«ããããŸãã"
+ 
+ #
+ msgid "E65: Illegal back reference"
+-msgstr "E65: ÉÔÀµ€ÊžåÊý»²ŸÈ€Ç€¹"
++msgstr "E65: äžæ­£ãªåŸæ¹åç
+§ã§ã"
+ 
+ #
+ msgid "E66: \\z( not allowed here"
+-msgstr "E66: \\z( €Ï¥³¥³€Ç€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E66: \\z( ã¯ã³ã³ã§ã¯èš±å¯ãããŠããŸãã"
+ 
+ #
+ msgid "E67: \\z1 et al. not allowed here"
+-msgstr "E67: \\z1 €œ€ÎÂŸ€Ï¥³¥³€Ç€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E67: \\z1 ãã®ä»ã¯ã³ã³ã§ã¯èš±å¯ãããŠããŸãã"
+ 
+ #
+ msgid "E68: Invalid character after \\z"
+-msgstr "E68: \\z €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++msgstr "E68: \\z ã®åŸã«äžæ­£ãªæå­ããããŸãã"
+ 
+ #
+ #, c-format
+ msgid "E69: Missing ] after %s%%["
+-msgstr "E69: %s%%[ €Îžå€Ë ] €¬€¢€ê€Þ€»€ó"
++msgstr "E69: %s%%[ ã®åŸã« ] ããããŸãã"
+ 
+ #, c-format
+ msgid "E70: Empty %s%%[]"
+-msgstr "E70: %s%%[] €¬¶õ€Ç€¹"
++msgstr "E70: %s%%[] ãç©ºã§ã"
+ 
+ #
+ #, c-format
+ msgid "E678: Invalid character after %s%%[dxouU]"
+-msgstr "E678: %s%%[dxouU] €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++msgstr "E678: %s%%[dxouU] ã®åŸã«äžæ­£ãªæå­ããããŸãã"
+ 
+ #
+ #, c-format
+ msgid "E71: Invalid character after %s%%"
+-msgstr "E71: %s%% €Îžå€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€·€¿"
++msgstr "E71: %s%% ã®åŸã«äžæ­£ãªæå­ããããŸãã"
+ 
+ #
+ #, c-format
+ msgid "E769: Missing ] after %s["
+-msgstr "E769: %s[ €Îžå€Ë ] €¬€¢€ê€Þ€»€ó"
++msgstr "E769: %s[ ã®åŸã« ] ããããŸãã"
+ 
+ #, c-format
+ msgid "E554: Syntax error in %s{...}"
+-msgstr "E554: %s{...} Æâ€ËÊžË¡¥š¥é¡Œ€¬€¢€ê€Þ€¹"
++msgstr "E554: %s{...} å
+ã«ææ³ãšã©ãŒããããŸã"
+ 
+ msgid "External submatches:\n"
+-msgstr "³°Éô€ÎÉôÊ¬³ºÅö:\n"
++msgstr "å€éšã®éšåè©²åœ:\n"
+ 
+ msgid " VREPLACE"
+-msgstr " ²ŸÁÛÃÖŽ¹"
++msgstr " ä»®æ³çœ®æ"
+ 
+ msgid " REPLACE"
+-msgstr " ÃÖŽ¹"
++msgstr " çœ®æ"
+ 
+ msgid " REVERSE"
+-msgstr " È¿ÅŸ"
++msgstr " åè»¢"
+ 
+ msgid " INSERT"
+-msgstr " ÁÞÆþ"
++msgstr " æ¿å
+¥"
+ 
+ msgid " (insert)"
+-msgstr " (ÁÞÆþ)"
++msgstr " (æ¿å
+¥)"
+ 
+ msgid " (replace)"
+-msgstr " (ÃÖŽ¹)"
++msgstr " (çœ®æ)"
+ 
+ msgid " (vreplace)"
+-msgstr " (²ŸÁÛÃÖŽ¹)"
++msgstr " (ä»®æ³çœ®æ)"
+ 
+ msgid " Hebrew"
+-msgstr " ¥Ø¥Ö¥é¥€"
++msgstr " ããã©ã€"
+ 
+ msgid " Arabic"
+-msgstr " ¥¢¥é¥Ó¥¢"
++msgstr " ã¢ã©ãã¢"
+ 
+ msgid " (lang)"
+-msgstr " (žÀžì)"
++msgstr " (èšèª)"
+ 
+ msgid " (paste)"
+-msgstr " (Åœ€êÉÕ€±)"
++msgstr " (è²Œãä»ã)"
+ 
+ msgid " VISUAL"
+-msgstr " ¥Ó¥ž¥å¥¢¥ë"
++msgstr " ããžã¥ã¢ã«"
+ 
+ msgid " VISUAL LINE"
+-msgstr " ¥Ó¥ž¥å¥¢¥ë ¹Ô"
++msgstr " ããžã¥ã¢ã« è¡"
+ 
+ msgid " VISUAL BLOCK"
+-msgstr " ¥Ó¥ž¥å¥¢¥ë ¶ë·Á"
++msgstr " ããžã¥ã¢ã« ç©åœ¢"
+ 
+ msgid " SELECT"
+-msgstr " ¥»¥ì¥¯¥È"
++msgstr " ã»ã¬ã¯ã"
+ 
+ msgid " SELECT LINE"
+-msgstr " ¹Ô»ØžþÁªÂò"
++msgstr " è¡æåéžæ"
+ 
+ msgid " SELECT BLOCK"
+-msgstr " ¶ë·ÁÁªÂò"
++msgstr " ç©åœ¢éžæ"
+ 
+ msgid "recording"
+-msgstr "µ­Ï¿Ãæ"
++msgstr "èšé²äž­"
+ 
+ #, c-format
+ msgid "E383: Invalid search string: %s"
+-msgstr "E383: Ìµžú€Êž¡º÷Êž»úÎó€Ç€¹: %s"
++msgstr "E383: ç¡å¹ãªæ€çŽ¢æå­åã§ã: %s"
+ 
+ #, c-format
+ msgid "E384: search hit TOP without match for: %s"
+-msgstr "E384: Ÿå€Þ€Çž¡º÷€·€¿€±€ì€É³ºÅö²Õœê€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E384: äžãŸã§æ€çŽ¢ããŸãããè©²åœç®æã¯ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E385: search hit BOTTOM without match for: %s"
+-msgstr "E385: ²Œ€Þ€Çž¡º÷€·€¿€±€ì€É³ºÅö²Õœê€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E385: äžãŸã§æ€çŽ¢ããŸãããè©²åœç®æã¯ãããŸãã: %s"
+ 
+ msgid "E386: Expected '?' or '/'  after ';'"
+-msgstr "E386: ';' €Î€¢€È€Ë€Ï '?' €« '/' €¬ŽüÂÔ€µ€ì€Æ€€€ë"
++msgstr "E386: ';' ã®ããšã«ã¯ '?' ã '/' ãæåŸ
+ãããŠãã"
+ 
+ msgid " (includes previously listed match)"
+-msgstr " (Á°€ËÎóµó€·€¿³ºÅö²Õœê€òŽÞ€à)"
++msgstr " (åã«åæããè©²åœç®æãå«ã)"
+ 
+ #. cursor at status line
+ msgid "--- Included files "
+-msgstr "--- ¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë"
++msgstr "--- ã€ã³ã¯ã«ãŒãããããã¡ã€ã« "
+ 
+ msgid "not found "
+-msgstr "€ß€Ä€«€ê€Þ€»€ó "
++msgstr "èŠã€ãããŸãã "
+ 
+ msgid "in path ---\n"
+-msgstr "¥Ñ¥¹€Ë ----\n"
++msgstr "ãã¹ã« ----\n"
+ 
+ msgid "  (Already listed)"
+-msgstr "  (Žû€ËÎóµó)"
++msgstr "  (æ¢ã«åæ)"
+ 
+ msgid "  NOT FOUND"
+-msgstr "  €ß€Ä€«€ê€Þ€»€ó"
++msgstr "  èŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "Scanning included file: %s"
+-msgstr "¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë€ò¥¹¥­¥ã¥óÃæ: %s"
++msgstr "ã€ã³ã¯ã«ãŒãããããã¡ã€ã«ãã¹ã­ã£ã³äž­: %s"
+ 
+ #, c-format
+ msgid "Searching included file %s"
+-msgstr "¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë€ò¥¹¥­¥ã¥óÃæ %s"
++msgstr "ã€ã³ã¯ã«ãŒãããããã¡ã€ã«ãã¹ã­ã£ã³äž­ %s"
+ 
+ msgid "E387: Match is on current line"
+-msgstr "E387: žœºß¹Ô€Ë³ºÅö€¬€¢€ê€Þ€¹"
++msgstr "E387: çŸåšè¡ã«è©²åœããããŸã"
+ 
+ msgid "All included files were found"
+-msgstr "ÁŽ€Æ€Î¥€¥ó¥¯¥ë¡Œ¥É€µ€ì€¿¥Õ¥¡¥€¥ë€¬€ß€Ä€«€ê€Þ€·€¿"
++msgstr "å
+šãŠã®ã€ã³ã¯ã«ãŒãããããã¡ã€ã«ãèŠã€ãããŸãã"
+ 
+ msgid "No included files"
+-msgstr "¥€¥ó¥¯¥ë¡Œ¥É¥Õ¥¡¥€¥ë€Ï€¢€ê€Þ€»€ó"
++msgstr "ã€ã³ã¯ã«ãŒããã¡ã€ã«ã¯ãããŸãã"
+ 
+ msgid "E388: Couldn't find definition"
+-msgstr "E388: ÄêµÁ€ò€ß€Ä€±€é€ì€Þ€»€ó"
++msgstr "E388: å®çŸ©ãèŠã€ããããŸãã"
+ 
+ msgid "E389: Couldn't find pattern"
+-msgstr "E389: ¥Ñ¥¿¡Œ¥ó€ò€ß€Ä€±€é€ì€Þ€»€ó"
++msgstr "E389: ãã¿ãŒã³ãèŠã€ããããŸãã"
++
++msgid "Substitute "
++msgstr "Substitute "
+ 
+ #, c-format
+ msgid ""
+@@ -4758,606 +4948,627 @@
+ "~"
+ msgstr ""
+ "\n"
+-"# ºÇžå€Î %sž¡º÷¥Ñ¥¿¡Œ¥ó:\n"
++"# æåŸã® %sæ€çŽ¢ãã¿ãŒã³:\n"
+ "~"
+ 
+ msgid "E759: Format error in spell file"
+-msgstr "E759: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€ÎœñŒ°¥š¥é¡Œ€Ç€¹"
++msgstr "E759: ã¹ãã«ãã¡ã€ã«ã®æžåŒãšã©ãŒã§ã"
+ 
+ msgid "E758: Truncated spell file"
+-msgstr "E758: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€¬ÀÚŒè€é€ì€Æ€€€ë€è€Š€Ç€¹"
++msgstr "E758: ã¹ãã«ãã¡ã€ã«ãååãããŠããããã§ã"
+ 
+ #, c-format
+ msgid "Trailing text in %s line %d: %s"
+-msgstr "%s (%d ¹ÔÌÜ) €ËÂ³€¯¥Æ¥­¥¹¥È: %s"
++msgstr "%s (%d è¡ç®) ã«ç¶ããã­ã¹ã: %s"
+ 
+ #, c-format
+ msgid "Affix name too long in %s line %d: %s"
+-msgstr "%s (%d ¹ÔÌÜ) €Î affix ÌŸ€¬Ä¹²á€®€Þ€¹: %s"
++msgstr "%s (%d è¡ç®) ã® affix åãé·éããŸã: %s"
+ 
+ msgid "E761: Format error in affix file FOL, LOW or UPP"
+ msgstr ""
+-"E761: affix¥Õ¥¡¥€¥ë€Î FOL, LOW €â€·€¯€Ï UPP €Î¥Õ¥©¡Œ¥Þ¥Ã¥È€Ë¥š¥é¡Œ€¬€¢€ê€Þ€¹"
++"E761: affixãã¡ã€ã«ã® FOL, LOW ãããã¯ UPP ã®ãã©ãŒãããã«ãšã©ãŒããããŸã"
+ 
+ msgid "E762: Character in FOL, LOW or UPP is out of range"
+-msgstr "E762: FOL, LOW €â€·€¯€Ï UPP €ÎÊž»ú€¬ÈÏ°Ï³°€Ç€¹"
++msgstr "E762: FOL, LOW ãããã¯ UPP ã®æå­ãç¯å²å€ã§ã"
+ 
+ msgid "Compressing word tree..."
+-msgstr "Ã±žì¥Ä¥ê¡Œ€ò°µœÌ€·€Æ€€€Þ€¹..."
++msgstr "åèªããªãŒãå§çž®ããŠããŸã..."
+ 
+ msgid "E756: Spell checking is not enabled"
+-msgstr "E756: ¥¹¥Ú¥ë¥Á¥§¥Ã¥¯€ÏÌµžú²œ€µ€ì€Æ€€€Þ€¹"
++msgstr "E756: ã¹ãã«ãã§ãã¯ã¯ç¡å¹åãããŠããŸã"
++
++#, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr ""
++"è­Šå: åèªãªã¹ã \"%s_%s.spl\" ããã³ \"%s_ascii.spl\" ã¯èŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr ""
+-"·Ù¹ð: Ã±žì¥ê¥¹¥È \"%s.%s.spl\" €ª€è€Ó \"%s.ascii.spl\" €Ïž«€Ä€«€ê€Þ€»€ó"
++"è­Šå: åèªãªã¹ã \"%s.%s.spl\" ããã³ \"%s.ascii.spl\" ã¯èŠã€ãããŸãã"
+ 
+ #, c-format
+ msgid "Reading spell file \"%s\""
+-msgstr "¥¹¥Ú¥ë¥Õ¥¡¥€¥ë \"%s\" €òÆÉ¹þÃæ"
++msgstr "ã¹ãã«ãã¡ã€ã« \"%s\" ãèª­èŸŒäž­"
+ 
+ msgid "E757: This does not look like a spell file"
+-msgstr "E757: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹"
++msgstr "E757: ã¹ãã«ãã¡ã€ã«ã§ã¯ãªãããã§ã"
+ 
+ msgid "E771: Old spell file, needs to be updated"
+-msgstr "E771: žÅ€€¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ê€Î€Ç, ¥¢¥Ã¥×¥Ç¡Œ¥È€·€Æ€¯€À€µ€€"
++msgstr "E771: å€ãã¹ãã«ãã¡ã€ã«ãªã®ã§, ã¢ããããŒãããŠãã ãã"
+ 
+ msgid "E772: Spell file is for newer version of Vim"
+-msgstr "E772: €è€ê¿·€·€€¥Ð¡Œ¥ž¥ç¥ó€Î Vim ÍÑ€Î¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ç€¹"
++msgstr "E772: ããæ°ããããŒãžã§ã³ã® Vim çšã®ã¹ãã«ãã¡ã€ã«ã§ã"
+ 
+ msgid "E770: Unsupported section in spell file"
+-msgstr "E770: ¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€Ë¥µ¥Ý¡Œ¥È€·€Æ€€€Ê€€¥»¥¯¥·¥ç¥ó€¬€¢€ê€Þ€¹"
++msgstr "E770: ã¹ãã«ãã¡ã€ã«ã«ãµããŒãããŠããªãã»ã¯ã·ã§ã³ããããŸã"
+ 
+ #, c-format
+ msgid "Warning: region %s not supported"
+-msgstr "·Ù¹ð9: %s €È€€€ŠÈÏ°Ï€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++msgstr "è­Šå9: %s ãšããç¯å²ã¯ãµããŒããããŠããŸãã"
+ 
+ #, c-format
+ msgid "Reading affix file %s ..."
+-msgstr "affix ¥Õ¥¡¥€¥ë %s €òÆÉ¹þÃæ..."
++msgstr "affix ãã¡ã€ã« %s ãèª­èŸŒäž­..."
+ 
+ #, c-format
+ msgid "Conversion failure for word in %s line %d: %s"
+-msgstr "%s (%d ¹ÔÌÜ) €ÎÃ±žì€òÊÑŽ¹€Ç€­€Þ€»€ó€Ç€·€¿: %s"
++msgstr "%s (%d è¡ç®) ã®åèªãå€æã§ããŸããã§ãã: %s"
+ 
+ #, c-format
+ msgid "Conversion in %s not supported: from %s to %s"
+-msgstr "%s Æâ€ÎŒ¡€ÎÊÑŽ¹€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó: %s €«€é %s €Ø"
++msgstr "%s å
+ã®æ¬¡ã®å€æã¯ãµããŒããããŠããŸãã: %s ãã %s ãž"
+ 
+ #, c-format
+ msgid "Conversion in %s not supported"
+-msgstr "%s Æâ€ÎÊÑŽ¹€Ï¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++msgstr "%s å
+ã®å€æã¯ãµããŒããããŠããŸãã"
+ 
+ #, c-format
+ msgid "Invalid value for FLAG in %s line %d: %s"
+-msgstr "%s Æâ€Î %d ¹ÔÌÜ€Î FLAG €ËÌµžú€ÊÃÍ€¬€¢€ê€Þ€¹: %s"
++msgstr "%s å
+ã® %d è¡ç®ã® FLAG ã«ç¡å¹ãªå€ããããŸã: %s"
+ 
+ #, c-format
+ msgid "FLAG after using flags in %s line %d: %s"
+-msgstr "%s Æâ€Î %d ¹ÔÌÜ€Ë¥Õ¥é¥°€ÎÆóœÅ»ÈÍÑ€¬€¢€ê€Þ€¹: %s"
++msgstr "%s å
+ã® %d è¡ç®ã«ãã©ã°ã®äºéäœ¿çšããããŸã: %s"
+ 
+ #, c-format
+ msgid ""
+ "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line "
+ "%d"
+ msgstr ""
+-"%s €Î %d ¹ÔÌÜ€Î PFX ¹àÌÜ€Îžå€Î COMPOUNDFORBIDFLAG €ÎÄêµÁ€Ïží€Ã€¿·ë²Ì€òÀž€ž€ë"
+-"€³€È€¬€¢€ê€Þ€¹"
++"%s ã® %d è¡ç®ã® PFX é 
+ç®ã®åŸã® COMPOUNDFORBIDFLAG ã®å®çŸ©ã¯èª€ã£ãçµæãçãã"
++"ããšããããŸã"
+ 
+ #, c-format
+ msgid ""
+ "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line "
+ "%d"
+ msgstr ""
+-"%s €Î %d ¹ÔÌÜ€Î PFX ¹àÌÜ€Îžå€Î COMPOUNDPERMITFLAG €ÎÄêµÁ€Ïží€Ã€¿·ë²Ì€òÀž€ž€ë"
+-"€³€È€¬€¢€ê€Þ€¹"
++"%s ã® %d è¡ç®ã® PFX é 
+ç®ã®åŸã® COMPOUNDPERMITFLAG ã®å®çŸ©ã¯èª€ã£ãçµæãçãã"
++"ããšããããŸã"
++
++#, c-format
++msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
++msgstr "COMPOUNDRULES ã®å€ã«èª€ãããããŸã. ãã¡ã€ã« %s ã® %d è¡ç®: %s"
+ 
+ #, c-format
+ msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î COMPOUNDWORDMAX €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++msgstr "%s ã® %d è¡ç®ã® COMPOUNDWORDMAX ã®å€ã«èª€ãããããŸã: %s"
+ 
+ #, c-format
+ msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î COMPOUNDMIN €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++msgstr "%s ã® %d è¡ç®ã® COMPOUNDMIN ã®å€ã«èª€ãããããŸã: %s"
+ 
+ #, c-format
+ msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î COMPOUNDSYLMAX €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++msgstr "%s ã® %d è¡ç®ã® COMPOUNDSYLMAX ã®å€ã«èª€ãããããŸã: %s"
+ 
+ #, c-format
+ msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î CHECKCOMPOUNDPATTERN €ÎÃÍ€Ëží€ê€¬€¢€ê€Þ€¹: %s"
++msgstr "%s ã® %d è¡ç®ã® CHECKCOMPOUNDPATTERN ã®å€ã«èª€ãããããŸã: %s"
+ 
+ #, c-format
+ msgid "Different combining flag in continued affix block in %s line %d: %s"
+ msgstr ""
+-"%s €Î %d ¹ÔÌÜ€Î Ï¢Â³ affix ¥Ö¥í¥Ã¥¯€Î¥Õ¥é¥°€ÎÁÈ¹ç€»€Ë°ã€€€¬€¢€ê€Þ€¹: %s"
++"%s ã® %d è¡ç®ã® é£ç¶ affix ãã­ãã¯ã®ãã©ã°ã®çµåãã«éãããããŸã: %s"
+ 
+ #, c-format
+ msgid "Duplicate affix in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Ë œÅÊ£€·€¿ affix €òž¡œÐ€·€Þ€·€¿: %s"
++msgstr "%s ã® %d è¡ç®ã« éè€ãã affix ãæ€åºããŸãã: %s"
+ 
+ #, c-format
+ msgid ""
+ "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s "
+ "line %d: %s"
+ msgstr ""
+-"%s €Î %d ¹ÔÌÜ€Î affix €Ï BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
+-"€Ë»ÈÍÑ€·€Æ€¯€À€µ€€: %s"
++"%s ã® %d è¡ç®ã® affix ã¯ BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST "
++"ã«äœ¿çšããŠãã ãã: %s"
+ 
+ #, c-format
+ msgid "Expected Y or N in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Ç€Ï Y €« N €¬É¬Í×€Ç€¹: %s"
++msgstr "%s ã® %d è¡ç®ã§ã¯ Y ã N ãå¿
+èŠã§ã: %s"
+ 
+ #, c-format
+ msgid "Broken condition in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î Ÿò·ï€Ï²õ€ì€Æ€€€Þ€¹: %s"
++msgstr "%s ã® %d è¡ç®ã® æ¡ä»¶ã¯å£ããŠããŸã: %s"
+ 
+ #, c-format
+ msgid "Expected REP(SAL) count in %s line %d"
+-msgstr "%s €Î %d ¹ÔÌÜ€Ë€Ï REP(SAL) €Î²ó¿ô€¬É¬Í×€Ç€¹"
++msgstr "%s ã® %d è¡ç®ã«ã¯ REP(SAL) ã®åæ°ãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "Expected MAP count in %s line %d"
+-msgstr "%s €Î %d ¹ÔÌÜ€Ë€Ï MAP €Î²ó¿ô€¬É¬Í×€Ç€¹"
++msgstr "%s ã® %d è¡ç®ã«ã¯ MAP ã®åæ°ãå¿
+èŠã§ã"
+ 
+ #, c-format
+ msgid "Duplicate character in MAP in %s line %d"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î MAP €ËœÅÊ£€·€¿Êž»ú€¬€¢€ê€Þ€¹"
++msgstr "%s ã® %d è¡ç®ã® MAP ã«éè€ããæå­ããããŸã"
+ 
+ #, c-format
+ msgid "Unrecognized or duplicate item in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Ë Ç§Œ±€Ç€­€Ê€€€«œÅÊ£€·€¿¹àÌÜ€¬€¢€ê€Þ€¹: %s"
++msgstr "%s ã® %d è¡ç®ã« èªè­ã§ããªããéè€ããé 
+ç®ããããŸã: %s"
+ 
+ #, c-format
+ msgid "Missing FOL/LOW/UPP line in %s"
+-msgstr "%s ¹ÔÌÜ€Ë FOL/LOW/UPP €¬€¢€ê€Þ€»€ó"
++msgstr "%s è¡ç®ã« FOL/LOW/UPP ããããŸãã"
+ 
+ msgid "COMPOUNDSYLMAX used without SYLLABLE"
+-msgstr "SYLLABLE €¬»ØÄê€µ€ì€Ê€€ COMPOUNDSYLMAX"
++msgstr "SYLLABLE ãæå®ãããªã COMPOUNDSYLMAX"
+ 
+ msgid "Too many postponed prefixes"
+-msgstr "ÃÙ±äžåÃÖ»Ò€¬Â¿€¹€®€Þ€¹"
++msgstr "é
+å»¶åŸçœ®å­ãå€éããŸã"
+ 
+ msgid "Too many compound flags"
+-msgstr "Ê£¹ç¥Õ¥é¥°€¬Â¿²á€®€Þ€¹"
++msgstr "è€åãã©ã°ãå€éããŸã"
+ 
+ msgid "Too many postponed prefixes and/or compound flags"
+-msgstr "ÃÙ±äžåÃÖ»Ò €È/€â€·€¯€Ï Ê£¹ç¥Õ¥é¥°€¬Â¿€¹€®€Þ€¹"
++msgstr "é
+å»¶åŸçœ®å­ ãš/ãããã¯ è€åãã©ã°ãå€éããŸã"
+ 
+ #, c-format
+ msgid "Missing SOFO%s line in %s"
+-msgstr "SOFO%s ¹Ô€¬ %s €Ë€¢€ê€Þ€»€ó"
++msgstr "SOFO%s è¡ã %s ã«ãããŸãã"
+ 
+ #, c-format
+ msgid "Both SAL and SOFO lines in %s"
+-msgstr "SAL¹Ô €È SOFO¹Ô €¬ %s €ÇÎŸÊý»ØÄê€µ€ì€Æ€€€Þ€¹"
++msgstr "SALè¡ ãš SOFOè¡ ã %s ã§äž¡æ¹æå®ãããŠããŸã"
+ 
+ #, c-format
+ msgid "Flag is not a number in %s line %d: %s"
+-msgstr "%s €Î %d ¹Ô€Î ¥Õ¥é¥°€¬¿ôÃÍ€Ç€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "%s ã® %d è¡ã® ãã©ã°ãæ°å€ã§ã¯ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "Illegal flag in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î ¥Õ¥é¥°€¬ÉÔÀµ€Ç€¹: %s"
++msgstr "%s ã® %d è¡ç®ã® ãã©ã°ãäžæ­£ã§ã: %s"
+ 
+ #, c-format
+ msgid "%s value differs from what is used in another .aff file"
+-msgstr "ÃÍ %s €ÏÂŸ€Î .aff ¥Õ¥¡¥€¥ë€Ç»ÈÍÑ€µ€ì€¿€Î€È°Û€Ê€ê€Þ€¹"
++msgstr "å€ %s ã¯ä»ã® .aff ãã¡ã€ã«ã§äœ¿çšãããã®ãšç°ãªããŸã"
+ 
+ #, c-format
+ msgid "Reading dictionary file %s ..."
+-msgstr "Œ­œñ¥Õ¥¡¥€¥ë %s €ò¥¹¥­¥ã¥óÃæ..."
++msgstr "èŸæžãã¡ã€ã« %s ãã¹ã­ã£ã³äž­..."
+ 
+ #, c-format
+ msgid "E760: No word count in %s"
+-msgstr "E760: %s €Ë€ÏÃ±žì¿ô€¬€¢€ê€Þ€»€ó"
++msgstr "E760: %s ã«ã¯åèªæ°ããããŸãã"
+ 
+ #, c-format
+ msgid "line %6d, word %6d - %s"
+-msgstr "¹Ô %6d, Ã±žì %6d - %s"
++msgstr "è¡ %6d, åèª %6d - %s"
+ 
+ #, c-format
+ msgid "Duplicate word in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Ç œÅÊ£Ã±žì€¬€ß€Ä€«€ê€Þ€·€¿: %s"
++msgstr "%s ã® %d è¡ç®ã§ éè€åèªãèŠã€ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "First duplicate word in %s line %d: %s"
+-msgstr "œÅÊ£€Î€Š€ÁºÇœé€ÎÃ±žì€Ï %s €Î %d ¹ÔÌÜ€Ç€¹: %s"
++msgstr "éè€ã®ãã¡æåã®åèªã¯ %s ã® %d è¡ç®ã§ã: %s"
+ 
+ #, c-format
+ msgid "%d duplicate word(s) in %s"
+-msgstr "%d žÄ€ÎÃ±žì€¬ž«€Ä€«€ê€Þ€·€¿ (%s Æâ)"
++msgstr "%d åã®åèªãèŠã€ãããŸãã (%s å
+)"
+ 
+ #, c-format
+ msgid "Ignored %d word(s) with non-ASCII characters in %s"
+-msgstr "ÈóASCIIÊž»ú€òŽÞ€à %d žÄ€ÎÃ±žì€òÌµ»ë€·€Þ€·€¿ (%s Æâ)"
++msgstr "éASCIIæå­ãå«ã %d åã®åèªãç¡èŠããŸãã (%s å
+)"
+ 
+ #, c-format
+ msgid "Reading word file %s ..."
+-msgstr "ÉžœàÆþÎÏ€«€éÆÉ¹þ€ßÃæ %s ..."
++msgstr "æšæºå
+¥åããèª­èŸŒã¿äž­ %s ..."
+ 
+ #, c-format
+ msgid "Duplicate /encoding= line ignored in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î œÅÊ£€·€¿ /encoding= ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++msgstr "%s ã® %d è¡ç®ã® éè€ãã /encoding= è¡ãç¡èŠããŸãã: %s"
+ 
+ #, c-format
+ msgid "/encoding= line after word ignored in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î Ã±žì€Îžå€Î /encoding= ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++msgstr "%s ã® %d è¡ç®ã® åèªã®åŸã® /encoding= è¡ãç¡èŠããŸãã: %s"
+ 
+ #, c-format
+ msgid "Duplicate /regions= line ignored in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î œÅÊ£€·€¿ /regions= ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++msgstr "%s ã® %d è¡ç®ã® éè€ãã /regions= è¡ãç¡èŠããŸãã: %s"
+ 
+ #, c-format
+ msgid "Too many regions in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ, ÈÏ°Ï»ØÄê€¬Â¿€¹€®€Þ€¹: %s"
++msgstr "%s ã® %d è¡ç®, ç¯å²æå®ãå€éããŸã: %s"
+ 
+ #, c-format
+ msgid "/ line ignored in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ€Î œÅÊ£€·€¿ / ¹Ô€òÌµ»ë€·€Þ€·€¿: %s"
++msgstr "%s ã® %d è¡ç®ã® éè€ãã / è¡ãç¡èŠããŸãã: %s"
+ 
+ #, c-format
+ msgid "Invalid region nr in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ Ìµžú€Ê nr ÎÎ°è€Ç€¹: %s"
++msgstr "%s ã® %d è¡ç® ç¡å¹ãª nr é åã§ã: %s"
+ 
+ #, c-format
+ msgid "Unrecognized flags in %s line %d: %s"
+-msgstr "%s €Î %d ¹ÔÌÜ Ç§Œ±ÉÔÇœ€Ê¥Õ¥é¥°€Ç€¹: %s"
++msgstr "%s ã® %d è¡ç® èªè­äžèœãªãã©ã°ã§ã: %s"
+ 
+ #, c-format
+ msgid "Ignored %d words with non-ASCII characters"
+-msgstr "ÈóASCIIÊž»ú€òŽÞ€à %d žÄ€ÎÃ±žì€òÌµ»ë€·€Þ€·€¿"
++msgstr "éASCIIæå­ãå«ã %d åã®åèªãç¡èŠããŸãã"
++
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: ã¡ã¢ãªãè¶³ããªãã®ã§ãåèªãªã¹ãã¯äžå®å
+šã§ã"
+ 
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+-msgstr "¥Î¡Œ¥É %d žÄ(ÁŽ %d žÄÃæ) €ò°µœÌ€·€Þ€·€¿; »Ä€ê %d (%d%%)"
++msgstr "ããŒã %d å(å
+š %d åäž­) ãå§çž®ããŸãã; æ®ã %d (%d%%)"
+ 
+ msgid "Reading back spell file..."
+-msgstr "¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€òµÕÆÉ¹þÃæ"
++msgstr "ã¹ãã«ãã¡ã€ã«ãéèª­èŸŒäž­"
+ 
+ #.
+ #. * Go through the trie of good words, soundfold each word and add it to
+ #. * the soundfold trie.
+ #.
+ msgid "Performing soundfolding..."
+-msgstr "²»ÀŒŸö¹þ€ß€òŒÂ¹ÔÃæ..."
++msgstr "é³å£°ç³èŸŒã¿ãå®è¡äž­..."
+ 
+ #, c-format
+ msgid "Number of words after soundfolding: %ld"
+-msgstr "²»ÀŒŸö¹þ€ßžå€ÎÁíÃ±žì¿ô: %ld"
++msgstr "é³å£°ç³èŸŒã¿åŸã®ç·åèªæ°: %ld"
+ 
+ #, c-format
+ msgid "Total number of words: %d"
+-msgstr "ÁíÃ±žì¿ô: %d"
++msgstr "ç·åèªæ°: %d"
+ 
+ #, c-format
+ msgid "Writing suggestion file %s ..."
+-msgstr "œ€ÀµžõÊä¥Õ¥¡¥€¥ë \"%s\" €òœñ¹þ€ßÃæ..."
++msgstr "ä¿®æ­£åè£ãã¡ã€ã« \"%s\" ãæžèŸŒã¿äž­..."
+ 
+ #, c-format
+ msgid "Estimated runtime memory use: %d bytes"
+-msgstr "¿äÄê¥á¥â¥ê»ÈÍÑÎÌ: %d ¥Ð¥€¥È"
++msgstr "æšå®ã¡ã¢ãªäœ¿çšé: %d ãã€ã"
+ 
+ msgid "E751: Output file name must not have region name"
+-msgstr "E751: œÐÎÏ¥Õ¥¡¥€¥ëÌŸ€Ë€ÏÈÏ°ÏÌŸ€òŽÞ€á€é€ì€Þ€»€ó"
++msgstr "E751: åºåãã¡ã€ã«åã«ã¯ç¯å²åãå«ããããŸãã"
+ 
+ msgid "E754: Only up to 8 regions supported"
+-msgstr "E754: ÈÏ°Ï€Ï 8 žÄ€Þ€Ç€·€«¥µ¥Ý¡Œ¥È€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E754: ç¯å²ã¯ 8 åãŸã§ãããµããŒããããŠããŸãã"
+ 
+ #, c-format
+ msgid "E755: Invalid region in %s"
+-msgstr "E755: Ìµžú€ÊÈÏ°Ï€Ç€¹: %s"
++msgstr "E755: ç¡å¹ãªç¯å²ã§ã: %s"
+ 
+ msgid "Warning: both compounding and NOBREAK specified"
+-msgstr "·Ù¹ð: Ê£¹ç¥Õ¥é¥°€È NOBREAK €¬ÎŸÊý€È€â»ØÄê€µ€ì€Þ€·€¿"
++msgstr "è­Šå: è€åãã©ã°ãš NOBREAK ãäž¡æ¹ãšãæå®ãããŸãã"
+ 
+ #, c-format
+ msgid "Writing spell file %s ..."
+-msgstr "¥¹¥Ú¥ë¥Õ¥¡¥€¥ë %s €òœñ¹þ€ßÃæ..."
++msgstr "ã¹ãã«ãã¡ã€ã« %s ãæžèŸŒã¿äž­..."
+ 
+ msgid "Done!"
+-msgstr "ŒÂ¹Ô€·€Þ€·€¿!"
++msgstr "å®è¡ããŸãã!"
+ 
+ #, c-format
+ msgid "E765: 'spellfile' does not have %ld entries"
+-msgstr "E765: 'spellfile' €Ë€Ï %ld žÄ€Î¥š¥ó¥È¥ê€Ï€¢€ê€Þ€»€ó"
++msgstr "E765: 'spellfile' ã«ã¯ %ld åã®ãšã³ããªã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "Word removed from %s"
+-msgstr "%s €«€éÃ±žì€¬ºïœü€µ€ì€Þ€·€¿"
++msgstr "%s ããåèªãåé€ãããŸãã"
+ 
+ #, c-format
+ msgid "Word added to %s"
+-msgstr "%s €ËÃ±žì€¬ÄÉ²Ã€µ€ì€Þ€·€¿"
++msgstr "%s ã«åèªãè¿œå ãããŸãã"
+ 
+ msgid "E763: Word characters differ between spell files"
+-msgstr "E763: Ã±žì€ÎÊž»ú€¬¥¹¥Ú¥ë¥Õ¥¡¥€¥ë€È°Û€Ê€ê€Þ€¹"
++msgstr "E763: åèªã®æå­ãã¹ãã«ãã¡ã€ã«ãšç°ãªããŸã"
+ 
+ msgid "Sorry, no suggestions"
+-msgstr "»ÄÇ°€Ç€¹€¬, œ€ÀµžõÊä€Ï€¢€ê€Þ€»€ó"
++msgstr "æ®å¿µã§ãã, ä¿®æ­£åè£ã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "Sorry, only %ld suggestions"
+-msgstr "»ÄÇ°€Ç€¹€¬, œ€ÀµžõÊä€Ï %ld žÄ€·€«€¢€ê€Þ€»€ó"
++msgstr "æ®å¿µã§ãã, ä¿®æ­£åè£ã¯ %ld åãããããŸãã"
+ 
+ #. for when 'cmdheight' > 1
+ #. avoid more prompt
+ #, c-format
+ msgid "Change \"%.*s\" to:"
+-msgstr "\"%.*s\" €òŒ¡€ØÊÑŽ¹:"
++msgstr "\"%.*s\" ãæ¬¡ãžå€æ:"
+ 
+ #, c-format
+ msgid " < \"%.*s\""
+ msgstr " < \"%.*s\""
+ 
+ msgid "E752: No previous spell replacement"
+-msgstr "E752: ¥¹¥Ú¥ëÃÖŽ¹€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E752: ã¹ãã«çœ®æããŸã å®è¡ãããŠããŸãã"
+ 
+ #, c-format
+ msgid "E753: Not found: %s"
+-msgstr "E753: €ß€Ä€«€ê€Þ€»€ó: %s"
++msgstr "E753: èŠã€ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E778: This does not look like a .sug file: %s"
+-msgstr "E778: .sug ¥Õ¥¡¥€¥ë€Ç€Ï€Ê€€€è€Š€Ç€¹: %s"
++msgstr "E778: .sug ãã¡ã€ã«ã§ã¯ãªãããã§ã: %s"
+ 
+ #, c-format
+ msgid "E779: Old .sug file, needs to be updated: %s"
+-msgstr "E779: žÅ€€ .sug ¥Õ¥¡¥€¥ë€Ê€Î€Ç, ¥¢¥Ã¥×¥Ç¡Œ¥È€·€Æ€¯€À€µ€€: %s"
++msgstr "E779: å€ã .sug ãã¡ã€ã«ãªã®ã§, ã¢ããããŒãããŠãã ãã: %s"
+ 
+ #, c-format
+ msgid "E780: .sug file is for newer version of Vim: %s"
+-msgstr "E780: €è€ê¿·€·€€¥Ð¡Œ¥ž¥ç¥ó€Î Vim ÍÑ€Î .sug ¥Õ¥¡¥€¥ë€Ç€¹: %s"
++msgstr "E780: ããæ°ããããŒãžã§ã³ã® Vim çšã® .sug ãã¡ã€ã«ã§ã: %s"
+ 
+ #, c-format
+ msgid "E781: .sug file doesn't match .spl file: %s"
+-msgstr "E781: .sug ¥Õ¥¡¥€¥ë€¬ .spl ¥Õ¥¡¥€¥ë€È°ìÃ×€·€Þ€»€ó: %s"
++msgstr "E781: .sug ãã¡ã€ã«ã .spl ãã¡ã€ã«ãšäžèŽããŸãã: %s"
+ 
+ #, c-format
+ msgid "E782: error while reading .sug file: %s"
+-msgstr "E782: .sug ¥Õ¥¡¥€¥ë€ÎÆÉ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿: %s"
++msgstr "E782: .sug ãã¡ã€ã«ã®èª­èŸŒäž­ã«ãšã©ãŒãçºçããŸãã: %s"
+ 
+ #. This should have been checked when generating the .spl
+ #. * file.
+ msgid "E783: duplicate char in MAP entry"
+-msgstr "E783: MAP ¥š¥ó¥È¥ê€ËœÅÊ£Êž»ú€¬Âžºß€·€Þ€¹"
++msgstr "E783: MAP ãšã³ããªã«éè€æå­ãå­åšããŸã"
+ 
+ #, c-format
+ msgid "E390: Illegal argument: %s"
+-msgstr "E390: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++msgstr "E390: äžæ­£ãªåŒæ°ã§ã: %s"
+ 
+ #, c-format
+ msgid "E391: No such syntax cluster: %s"
+-msgstr "E391: €œ€Î€è€Š€Ê¹œÊž¥¯¥é¥¹¥¿€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E391: ãã®ãããªæ§æã¯ã©ã¹ã¿ã¯ãããŸãã: %s"
+ 
+ msgid "No Syntax items defined for this buffer"
+-msgstr "€³€Î¥Ð¥Ã¥Õ¥¡€ËÄêµÁ€µ€ì€¿¹œÊžÍ×ÁÇ€Ï€¢€ê€Þ€»€ó"
++msgstr "ãã®ãããã¡ã«å®çŸ©ãããæ§æèŠçŽ ã¯ãããŸãã"
+ 
+ msgid "syncing on C-style comments"
+-msgstr "CžÀžìÉ÷¥³¥á¥ó¥È€«€éÆ±ŽüÃæ"
++msgstr "Cèšèªé¢šã³ã¡ã³ãããåæäž­"
+ 
+ msgid "no syncing"
+-msgstr "ÈóÆ±Žü"
++msgstr "éåæ"
+ 
+ msgid "syncing starts "
+-msgstr "Æ±Žü³«»Ï "
++msgstr "åæéå§ "
+ 
+ msgid " lines before top line"
+-msgstr " ¹ÔÁ°(¥È¥Ã¥×¹Ô€è€ê€â)"
++msgstr " è¡å(ãããè¡ããã)"
+ 
+ msgid ""
+ "\n"
+ "--- Syntax sync items ---"
+ msgstr ""
+ "\n"
+-"--- ¹œÊžÆ±ŽüÍ×ÁÇ ---"
++"--- æ§æåæèŠçŽ  ---"
+ 
+ msgid ""
+ "\n"
+ "syncing on items"
+ msgstr ""
+ "\n"
+-"Í×ÁÇŸå€ÇÆ±ŽüÃæ"
++"èŠçŽ äžã§åæäž­"
+ 
+ msgid ""
+ "\n"
+ "--- Syntax items ---"
+ msgstr ""
+ "\n"
+-"--- ¹œÊžÍ×ÁÇ ---"
++"--- æ§æèŠçŽ  ---"
+ 
+ #, c-format
+ msgid "E392: No such syntax cluster: %s"
+-msgstr "E392: €œ€Î€è€Š€Ê¹œÊž¥¯¥é¥¹¥¿€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E392: ãã®ãããªæ§æã¯ã©ã¹ã¿ã¯ãããŸãã: %s"
+ 
+ msgid "minimal "
+-msgstr "minimal"
++msgstr "minimal "
+ 
+ msgid "maximal "
+-msgstr "maximal"
++msgstr "maximal "
+ 
+ msgid "; match "
+-msgstr "; ³ºÅö "
++msgstr "; è©²åœ "
+ 
+ msgid " line breaks"
+-msgstr " žÄ€Î²þ¹Ô"
++msgstr " åã®æ¹è¡"
+ 
+ msgid "E395: contains argument not accepted here"
+-msgstr "E395: €³€ÎŸìœê€Ç€Ï°ú¿ôcontains€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E395: ãã®å Žæã§ã¯åŒæ°containsã¯èš±å¯ãããŠããŸãã"
+ 
+-msgid "E396: containedin argument not accepted here"
+-msgstr "E396: €³€ÎŸìœê€Ç€Ï°ú¿ôcontainedin€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgid "E844: invalid cchar value"
++msgstr "E844: ç¡å¹ãªccharã®å€ã§ã"
+ 
+ msgid "E393: group[t]here not accepted here"
+-msgstr "E393: €³€³€Ç€Ï¥°¥ë¡Œ¥×€Ïµö²Ä€µ€ì€Þ€»€ó"
++msgstr "E393: ããã§ã¯ã°ã«ãŒãã¯èš±å¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E394: Didn't find region item for %s"
+-msgstr "E394: %s €ÎÈÏ°ÏÍ×ÁÇ€¬€ß€Ä€«€ê€Þ€»€ó"
++msgstr "E394: %s ã®ç¯å²èŠçŽ ãèŠã€ãããŸãã"
+ 
+ msgid "E397: Filename required"
+-msgstr "E397: ¥Õ¥¡¥€¥ëÌŸ€¬É¬Í×€Ç€¹"
++msgstr "E397: ãã¡ã€ã«åãå¿
+èŠã§ã"
++
++msgid "E847: Too many syntax includes"
++msgstr "E847: æ§æã®åãèŸŒã¿(include)ãå€éããŸã"
+ 
+ #, c-format
+ msgid "E789: Missing ']': %s"
+-msgstr "E789: ']' €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E789: ']' ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E398: Missing '=': %s"
+-msgstr "E398: '=' €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E398: '=' ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E399: Not enough arguments: syntax region %s"
+-msgstr "E399: °ú¿ô€¬Â­€ê€Þ€»€ó: ¹œÊžÈÏ°Ï %s"
++msgstr "E399: åŒæ°ãè¶³ããŸãã: æ§æç¯å² %s"
++
++msgid "E848: Too many syntax clusters"
++msgstr "E848: æ§æã¯ã©ã¹ã¿ãå€éããŸã"
+ 
+ msgid "E400: No cluster specified"
+-msgstr "E400: ¥¯¥é¥¹¥¿€¬»ØÄê€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E400: ã¯ã©ã¹ã¿ãæå®ãããŠããŸãã"
+ 
+ #, c-format
+ msgid "E401: Pattern delimiter not found: %s"
+-msgstr "E401: ¥Ñ¥¿¡Œ¥ó¶èÀÚ€ê€¬€ß€Ä€«€ê€Þ€»€ó: %s"
++msgstr "E401: ãã¿ãŒã³åºåããèŠã€ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E402: Garbage after pattern: %s"
+-msgstr "E402: ¥Ñ¥¿¡Œ¥ó€Î€¢€È€Ë¥Ž¥ß€¬€¢€ê€Þ€¹: %s"
++msgstr "E402: ãã¿ãŒã³ã®ããšã«ãŽãããããŸã: %s"
+ 
+ msgid "E403: syntax sync: line continuations pattern specified twice"
+-msgstr "E403: ¹œÊžÆ±Žü: Ï¢Â³¹Ô¥Ñ¥¿¡Œ¥ó€¬2ÅÙ»ØÄê€µ€ì€Þ€·€¿"
++msgstr "E403: æ§æåæ: é£ç¶è¡ãã¿ãŒã³ã2åºŠæå®ãããŸãã"
+ 
+ #, c-format
+ msgid "E404: Illegal arguments: %s"
+-msgstr "E404: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++msgstr "E404: äžæ­£ãªåŒæ°ã§ã: %s"
+ 
+ #, c-format
+ msgid "E405: Missing equal sign: %s"
+-msgstr "E405: Åù€·€€ sign €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E405: ç­å·ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E406: Empty argument: %s"
+-msgstr "E406: ¶õ€Î°ú¿ô: %s"
++msgstr "E406: ç©ºã®åŒæ°: %s"
+ 
+ #, c-format
+ msgid "E407: %s not allowed here"
+-msgstr "E407: %s €Ï¥³¥³€Ç€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E407: %s ã¯ã³ã³ã§ã¯èš±å¯ãããŠããŸãã"
+ 
+ #, c-format
+ msgid "E408: %s must be first in contains list"
+-msgstr "E408: %s €ÏÆâÍÆ¥ê¥¹¥È€ÎÀèÆ¬€Ç€Ê€±€ì€Ð€Ê€é€Ê€€"
++msgstr "E408: %s ã¯å
+å®¹ãªã¹ãã®å
+é ­ã§ãªããã°ãªããªã"
+ 
+ #, c-format
+ msgid "E409: Unknown group name: %s"
+-msgstr "E409: Ì€ÃÎ€Î¥°¥ë¡Œ¥×ÌŸ: %s"
++msgstr "E409: æªç¥ã®ã°ã«ãŒãå: %s"
+ 
+ #, c-format
+ msgid "E410: Invalid :syntax subcommand: %s"
+-msgstr "E410: Ìµžú€Ê :syntax €Î¥µ¥Ö¥³¥Þ¥ó¥É: %s"
++msgstr "E410: ç¡å¹ãª :syntax ã®ãµãã³ãã³ã: %s"
+ 
+ msgid "E679: recursive loop loading syncolor.vim"
+-msgstr "E679: syncolor.vim €ÎºÆµ¢žÆ€ÓœÐ€·€òž¡œÐ€·€Þ€·€¿"
++msgstr "E679: syncolor.vim ã®ååž°åŒã³åºããæ€åºããŸãã"
+ 
+ #, c-format
+ msgid "E411: highlight group not found: %s"
+-msgstr "E411: ¥Ï¥€¥é¥€¥È¥°¥ë¡Œ¥×€¬€ß€Ä€«€ê€Þ€»€ó: %s"
++msgstr "E411: ãã€ã©ã€ãã°ã«ãŒããèŠã€ãããŸãã: %s"
+ 
+ #, c-format
+ msgid "E412: Not enough arguments: \":highlight link %s\""
+-msgstr "E412: °ú¿ô€¬œŒÊ¬€Ç€Ï€Ê€€: \":highlight link %s\""
++msgstr "E412: åŒæ°ãå
+
+åã§ã¯ãªã: \":highlight link %s\""
+ 
+ #, c-format
+ msgid "E413: Too many arguments: \":highlight link %s\""
+-msgstr "E413: °ú¿ô€¬Â¿²á€®€Þ€¹: \":highlight link %s\""
++msgstr "E413: åŒæ°ãå€éããŸã: \":highlight link %s\""
+ 
+ msgid "E414: group has settings, highlight link ignored"
+-msgstr "E414: ¥°¥ë¡Œ¥×€¬ÀßÄê€µ€ì€Æ€€€ë€Î€Ç¥Ï¥€¥é¥€¥È¥ê¥ó¥¯€ÏÌµ»ë€µ€ì€Þ€¹"
++msgstr "E414: ã°ã«ãŒããèš­å®ãããŠããã®ã§ãã€ã©ã€ããªã³ã¯ã¯ç¡èŠãããŸã"
+ 
+ #, c-format
+ msgid "E415: unexpected equal sign: %s"
+-msgstr "E415: ÍœŽü€»€ÌÆ±€ž sign €Ç€¹: %s"
++msgstr "E415: äºæãã¬ç­å·ã§ã: %s"
+ 
+ #, c-format
+ msgid "E416: missing equal sign: %s"
+-msgstr "E416: Æ±€ž sign €¬€¢€ê€Þ€»€ó: %s"
++msgstr "E416: ç­å·ãããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E417: missing argument: %s"
+-msgstr "E417: °ú¿ô€¬€¢€ê€Þ€»€ó: %s"
++msgstr "E417: åŒæ°ããããŸãã: %s"
+ 
+ #, c-format
+ msgid "E418: Illegal value: %s"
+-msgstr "E418: ÉÔÀµ€ÊÃÍ€Ç€¹: %s"
++msgstr "E418: äžæ­£ãªå€ã§ã: %s"
+ 
+ msgid "E419: FG color unknown"
+-msgstr "E419: Ì€ÃÎ€ÎÁ°·Ê¿§€Ç€¹"
++msgstr "E419: æªç¥ã®åæ¯è²ã§ã"
+ 
+ msgid "E420: BG color unknown"
+-msgstr "E420: Ì€ÃÎ€ÎÇØ·Ê¿§€Ç€¹"
++msgstr "E420: æªç¥ã®èæ¯è²ã§ã"
+ 
+ #, c-format
+ msgid "E421: Color name or number not recognized: %s"
+-msgstr "E421: ¥«¥é¡ŒÌŸ€äÈÖ¹æ€òÇ§Œ±€Ç€­€Þ€»€ó: %s"
++msgstr "E421: ã«ã©ãŒåãçªå·ãèªè­ã§ããŸãã: %s"
+ 
+ #, c-format
+ msgid "E422: terminal code too long: %s"
+-msgstr "E422: œªÃŒ¥³¡Œ¥É€¬Ä¹²á€®€Þ€¹: %s"
++msgstr "E422: çµç«¯ã³ãŒããé·éããŸã: %s"
+ 
+ #, c-format
+ msgid "E423: Illegal argument: %s"
+-msgstr "E423: ÉÔÀµ€Ê°ú¿ô€Ç€¹: %s"
++msgstr "E423: äžæ­£ãªåŒæ°ã§ã: %s"
+ 
+ msgid "E424: Too many different highlighting attributes in use"
+-msgstr "E424: Â¿€¯€Î°Û€Ê€ë¥Ï¥€¥é¥€¥ÈÂ°À­€¬»È€ï€ì²á€®€Æ€€€Þ€¹"
++msgstr "E424: å€ãã®ç°ãªããã€ã©ã€ãå±æ§ãäœ¿ããéããŠããŸã"
+ 
+ msgid "E669: Unprintable character in group name"
+-msgstr "E669: ¥°¥ë¡Œ¥×ÌŸ€Ë°õºþÉÔ²ÄÇœ€ÊÊž»ú€¬€¢€ê€Þ€¹"
++msgstr "E669: ã°ã«ãŒãåã«å°å·äžå¯èœãªæå­ããããŸã"
+ 
+ msgid "W18: Invalid character in group name"
+-msgstr "W18: ¥°¥ë¡Œ¥×ÌŸ€ËÉÔÀµ€ÊÊž»ú€¬€¢€ê€Þ€¹"
++msgstr "W18: ã°ã«ãŒãåã«äžæ­£ãªæå­ããããŸã"
++
++msgid "E849: Too many highlight and syntax groups"
++msgstr "E849: ãã€ã©ã€ããšæ§æã°ã«ãŒããå€éããŸã"
+ 
+ msgid "E555: at bottom of tag stack"
+-msgstr "E555: ¥¿¥°¥¹¥¿¥Ã¥¯€ÎËöÈø€Ç€¹"
++msgstr "E555: ã¿ã°ã¹ã¿ãã¯ã®æ«å°Ÿã§ã"
+ 
+ msgid "E556: at top of tag stack"
+-msgstr "E556: ¥¿¥°¥¹¥¿¥Ã¥¯€ÎÀèÆ¬€Ç€¹"
++msgstr "E556: ã¿ã°ã¹ã¿ãã¯ã®å
+é ­ã§ã"
+ 
+ msgid "E425: Cannot go before first matching tag"
+-msgstr "E425: ºÇœé€Î³ºÅö¥¿¥°€òÄ¶€š€ÆÌá€ë€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "E425: æåã®è©²åœã¿ã°ãè¶
+ããŠæ»ãããšã¯ã§ããŸãã"
+ 
+ #, c-format
+ msgid "E426: tag not found: %s"
+-msgstr "E426: ¥¿¥°€¬€ß€Ä€«€ê€Þ€»€ó: %s"
++msgstr "E426: ã¿ã°ãèŠã€ãããŸãã: %s"
+ 
+ msgid "  # pri kind tag"
+ msgstr "  # pri kind tag"
+ 
+ msgid "file\n"
+-msgstr "¥Õ¥¡¥€¥ë\n"
++msgstr "ãã¡ã€ã«\n"
+ 
+ msgid "E427: There is only one matching tag"
+-msgstr "E427: ³ºÅö¥¿¥°€¬1€Ä€À€±€·€«€¢€ê€Þ€»€ó"
++msgstr "E427: è©²åœã¿ã°ã1ã€ã ããããããŸãã"
+ 
+ msgid "E428: Cannot go beyond last matching tag"
+-msgstr "E428: ºÇžå€Ë³ºÅö€¹€ë¥¿¥°€òÄ¶€š€Æ¿Ê€à€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "E428: æåŸã«è©²åœããã¿ã°ãè¶
+ããŠé²ãããšã¯ã§ããŸãã"
+ 
+ #, c-format
+ msgid "File \"%s\" does not exist"
+-msgstr "¥Õ¥¡¥€¥ë \"%s\" €¬€¢€ê€Þ€»€ó"
++msgstr "ãã¡ã€ã« \"%s\" ããããŸãã"
+ 
+ #. Give an indication of the number of matching tags
+ #, c-format
+ msgid "tag %d of %d%s"
+-msgstr "¥¿¥° %d (ÁŽ%d%s)"
++msgstr "ã¿ã° %d (å
+š%d%s)"
+ 
+ msgid " or more"
+-msgstr " €«€œ€ì°ÊŸå"
++msgstr " ãããä»¥äž"
+ 
+ msgid "  Using tag with different case!"
+-msgstr "  ¥¿¥°€ò°Û€Ê€ëcase€Ç»ÈÍÑ€·€Þ€¹!"
++msgstr "  ã¿ã°ãç°ãªãcaseã§äœ¿çšããŸã!"
+ 
+ #, c-format
+ msgid "E429: File \"%s\" does not exist"
+-msgstr "E429: ¥Õ¥¡¥€¥ë \"%s\" €¬€¢€ê€Þ€»€ó"
++msgstr "E429: ãã¡ã€ã« \"%s\" ããããŸãã"
+ 
+ #. Highlight title
+ msgid ""
+@@ -5365,59 +5576,66 @@
+ "  # TO tag         FROM line  in file/text"
+ msgstr ""
+ "\n"
+-"  # TO ¥¿¥°        FROM ¹Ô    in file/text"
++"  # TO ã¿ã°        FROM è¡    in file/text"
+ 
+ #, c-format
+ msgid "Searching tags file %s"
+-msgstr "¥¿¥°¥Õ¥¡¥€¥ë %s €òž¡º÷Ãæ"
++msgstr "ã¿ã°ãã¡ã€ã« %s ãæ€çŽ¢äž­"
+ 
+ #, c-format
+ msgid "E430: Tag file path truncated for %s\n"
+-msgstr "E430: ¥¿¥°¥Õ¥¡¥€¥ë€Î¥Ñ¥¹€¬ %s €ËÀÚ€êŒÎ€Æ€é€ì€Þ€·€¿\n"
++msgstr "E430: ã¿ã°ãã¡ã€ã«ã®ãã¹ã %s ã«åãæšãŠãããŸãã\n"
++
++msgid "Ignoring long line in tags file"
++msgstr "ã¿ã°ãã¡ã€ã«å
+ã®é·ãè¡ãç¡èŠããŸã"
+ 
+ #, c-format
+ msgid "E431: Format error in tags file \"%s\""
+-msgstr "E431: ¥¿¥°¥Õ¥¡¥€¥ë \"%s\" €Î¥Õ¥©¡Œ¥Þ¥Ã¥È€Ë¥š¥é¡Œ€¬€¢€ê€Þ€¹"
++msgstr "E431: ã¿ã°ãã¡ã€ã« \"%s\" ã®ãã©ãŒãããã«ãšã©ãŒããããŸã"
+ 
+ #, c-format
+ msgid "Before byte %ld"
+-msgstr "ÄŸÁ°€Î %ld ¥Ð¥€¥È"
++msgstr "çŽåã® %ld ãã€ã"
+ 
+ #, c-format
+ msgid "E432: Tags file not sorted: %s"
+-msgstr "E432: ¥¿¥°¥Õ¥¡¥€¥ë€¬¥œ¡Œ¥È€µ€ì€Æ€€€Þ€»€ó: %s"
++msgstr "E432: ã¿ã°ãã¡ã€ã«ããœãŒããããŠããŸãã: %s"
+ 
+ #. never opened any tags file
+ msgid "E433: No tags file"
+-msgstr "E433: ¥¿¥°¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
++msgstr "E433: ã¿ã°ãã¡ã€ã«ããããŸãã"
+ 
+ msgid "E434: Can't find tag pattern"
+-msgstr "E434: ¥¿¥°¥Ñ¥¿¡Œ¥ó€ò€ß€Ä€±€é€ì€Þ€»€ó"
++msgstr "E434: ã¿ã°ãã¿ãŒã³ãèŠã€ããããŸãã"
+ 
+ msgid "E435: Couldn't find tag, just guessing!"
+-msgstr "E435: ¥¿¥°€ò€ß€Ä€±€é€ì€Ê€€€Î€ÇÃ±€Ë¿äÂ¬€·€Þ€¹!"
++msgstr "E435: ã¿ã°ãèŠã€ããããªãã®ã§åã«æšæž¬ããŸã!"
++
++#, c-format
++msgid "Duplicate field name: %s"
++msgstr "éè€ãããã£ãŒã«ãå: %s"
+ 
+ msgid "' not known. Available builtin terminals are:"
+-msgstr "' €ÏÌ€ÃÎ€Ç€¹. žœ¹Ô€ÎÁÈ€ß¹þ€ßÃŒËö€ÏŒ¡€Î€È€ª€ê€Ç€¹:"
++msgstr "' ã¯æªç¥ã§ã. çŸè¡ã®çµã¿èŸŒã¿ç«¯æ«ã¯æ¬¡ã®ãšããã§ã:"
+ 
+ msgid "defaulting to '"
+-msgstr "ŸÊÎ¬ÃÍ€òŒ¡€Î€è€Š€ËÀßÄê€·€Þ€¹ '"
++msgstr "çç¥å€ãæ¬¡ã®ããã«èš­å®ããŸã '"
+ 
+ msgid "E557: Cannot open termcap file"
+-msgstr "E557: termcap¥Õ¥¡¥€¥ë€ò³«€±€Þ€»€ó"
++msgstr "E557: termcapãã¡ã€ã«ãéããŸãã"
+ 
+ msgid "E558: Terminal entry not found in terminfo"
+-msgstr "E558: terminfo€ËÃŒËö¥š¥ó¥È¥ê€ò€ß€Ä€±€é€ì€Þ€»€ó"
++msgstr "E558: terminfoã«ç«¯æ«ãšã³ããªãèŠã€ããããŸãã"
+ 
+ msgid "E559: Terminal entry not found in termcap"
+-msgstr "E559: termcap€ËÃŒËö¥š¥ó¥È¥ê€ò€ß€Ä€±€é€ì€Þ€»€ó"
++msgstr "E559: termcapã«ç«¯æ«ãšã³ããªãèŠã€ããããŸãã"
+ 
+ #, c-format
+ msgid "E436: No \"%s\" entry in termcap"
+-msgstr "E436: termcap€Ë \"%s\" €Î¥š¥ó¥È¥ê€¬€¢€ê€Þ€»€ó"
++msgstr "E436: termcapã« \"%s\" ã®ãšã³ããªããããŸãã"
+ 
+ msgid "E437: terminal capability \"cm\" required"
+-msgstr "E437: ÃŒËö€Ë \"cm\" µ¡Çœ€¬É¬Í×€Ç€¹"
++msgstr "E437: ç«¯æ«ã« \"cm\" æ©èœãå¿
+èŠã§ã"
+ 
+ #. Highlight title
+ msgid ""
+@@ -5425,77 +5643,154 @@
+ "--- Terminal keys ---"
+ msgstr ""
+ "\n"
+-"--- ÃŒËö¥­¡Œ ---"
++"--- ç«¯æ«ã­ãŒ ---"
+ 
+ msgid "new shell started\n"
+-msgstr "¿·€·€€¥·¥§¥ë€òµ¯Æ°€·€Þ€¹\n"
++msgstr "æ°ããã·ã§ã«ãèµ·åããŸã\n"
+ 
+ msgid "Vim: Error reading input, exiting...\n"
+-msgstr "Vim: ÆþÎÏ€òÆÉ¹þ€ßÃæ€Î¥š¥é¡Œ€Ë€è€êœªÎ»€·€Þ€¹...\n"
++msgstr "Vim: å
+¥åãèª­èŸŒã¿äž­ã®ãšã©ãŒã«ããçµäºããŸã...\n"
++
++msgid "Used CUT_BUFFER0 instead of empty selection"
++msgstr "ç©ºã®éžæé åã®ãããã«CUT_BUFFER0ãäœ¿çšãããŸãã"
++
++#. This happens when the FileChangedRO autocommand changes the
++#. * file in a way it becomes shorter.
++msgid "E834: Line count changed unexpectedly"
++msgstr "E834: äºæããè¡ã«ãŠã³ããå€ãããŸãã"
+ 
+ #. must display the prompt
+ msgid "No undo possible; continue anyway"
+-msgstr "²ÄÇœ€Ê¥¢¥ó¥É¥¥€Ï€¢€ê€Þ€»€ó: €È€ê€¢€š€ºÂ³€±€Þ€¹"
++msgstr "å¯èœãªã¢ã³ãã¥ã¯ãããŸãã: ãšããããç¶ããŸã"
++
++#, c-format
++msgid "E828: Cannot open undo file for writing: %s"
++msgstr "E828: æžèŸŒã¿çšã«ã¢ã³ãã¥ãã¡ã€ã«ãéããŸãã: %s"
++
++#, c-format
++msgid "E825: Corrupted undo file (%s): %s"
++msgstr "E825: ã¢ã³ãã¥ãã¡ã€ã«ãå£ããŠããŸã (%s): %s"
++
++msgid "Cannot write undo file in any directory in 'undodir'"
++msgstr "'undodir'ã®ãã£ã¬ã¯ããªã«ã¢ã³ãã¥ãã¡ã€ã«ãæžãèŸŒããŸãã"
++
++#, c-format
++msgid "Will not overwrite with undo file, cannot read: %s"
++msgstr "ã¢ã³ãã¥ãã¡ã€ã«ãšããŠèª­ã¿èŸŒããªãã®ã§äžæžãããŸãã: %s"
++
++#, c-format
++msgid "Will not overwrite, this is not an undo file: %s"
++msgstr "ã¢ã³ãã¥ãã¡ã€ã«ã§ã¯ãªãã®ã§äžæžãããŸãã: %s"
++
++msgid "Skipping undo file write, nothing to undo"
++msgstr "å¯Ÿè±¡ããªãã®ã§ã¢ã³ãã¥ãã¡ã€ã«ã®æžãèŸŒã¿ãã¹ã­ããããŸã"
++
++#, c-format
++msgid "Writing undo file: %s"
++msgstr "ã¢ã³ãã¥ãã¡ã€ã«æžãèŸŒã¿äž­: %s"
++
++#, c-format
++msgid "E829: write error in undo file: %s"
++msgstr "E829: ã¢ã³ãã¥ãã¡ã€ã«ã®æžãèŸŒã¿ãšã©ãŒã§ã: %s"
++
++#, c-format
++msgid "Not reading undo file, owner differs: %s"
++msgstr "ãªãŒããŒãç°ãªãã®ã§ã¢ã³ãã¥ãã¡ã€ã«ãèª­ã¿èŸŒã¿ãŸãã: %s"
++
++#, c-format
++msgid "Reading undo file: %s"
++msgstr "ã¢ã³ãã¥ãã¡ã€ã«èª­èŸŒäž­: %s"
++
++#, c-format
++msgid "E822: Cannot open undo file for reading: %s"
++msgstr "E822: ã¢ã³ãã¥ãã¡ã€ã«ãèª­èŸŒçšãšããŠéããŸãã: %s"
++
++#, c-format
++msgid "E823: Not an undo file: %s"
++msgstr "E823: ã¢ã³ãã¥ãã¡ã€ã«ã§ã¯ãããŸãã: %s"
++
++#, c-format
++msgid "E832: Non-encrypted file has encrypted undo file: %s"
++msgstr "E832: éæå·åãã¡ã€ã«ãæå·åãããã¢ã³ãã¥ãã¡ã€ã«ãäœ¿ã£ãŠãŸã: %s"
++
++#, c-format
++msgid "E826: Undo file decryption failed: %s"
++msgstr "E826: æå·åãããã¢ã³ãã¥ãã¡ã€ã«ã®è§£èª­ã«å€±æããŸãã: %s"
++
++#, c-format
++msgid "E827: Undo file is encrypted: %s"
++msgstr "E827: ã¢ã³ãã¥ãã¡ã€ã«ãæå·åãããŠããŸã: %s"
++
++#, c-format
++msgid "E824: Incompatible undo file: %s"
++msgstr "E824: äºææ§ã®ç¡ãã¢ã³ãã¥ãã¡ã€ã«ã§ã: %s"
++
++msgid "File contents changed, cannot use undo info"
++msgstr "ãã¡ã€ã«ã®å
+å®¹ãå€ãã£ãŠãããããã¢ã³ãã¥æ
+å ±ãå©çšã§ããŸãã"
++
++#, c-format
++msgid "Finished reading undo file %s"
++msgstr "ã¢ã³ãã¥ãã¡ã€ã« %s ã®åèŸŒãå®äº"
+ 
+ msgid "Already at oldest change"
+-msgstr "Žû€Ë°ìÈÖžÅ€€ÊÑ¹¹€Ç€¹"
++msgstr "æ¢ã«äžçªå€ãå€æŽã§ã"
+ 
+ msgid "Already at newest change"
+-msgstr "Žû€Ë°ìÈÖ¿·€·€€ÊÑ¹¹€Ç€¹"
++msgstr "æ¢ã«äžçªæ°ããå€æŽã§ã"
+ 
+ #, c-format
+-msgid "Undo number %ld not found"
+-msgstr "¥¢¥ó¥É¥¥ÈÖ¹æ %ld €¬€ß€Ä€«€ê€Þ€»€ó"
++msgid "E830: Undo number %ld not found"
++msgstr "E830: ã¢ã³ãã¥çªå· %ld ã¯èŠã€ãããŸãã"
+ 
+ msgid "E438: u_undo: line numbers wrong"
+-msgstr "E438: u_undo: ¹ÔÈÖ¹æ€¬ŽÖ°ã€Ã€Æ€€€Þ€¹"
++msgstr "E438: u_undo: è¡çªå·ãééã£ãŠããŸã"
+ 
+ msgid "more line"
+-msgstr "¹Ô ÄÉ²Ã€·€Þ€·€¿"
++msgstr "è¡ è¿œå ããŸãã"
+ 
+ msgid "more lines"
+-msgstr "¹Ô ÄÉ²Ã€·€Þ€·€¿"
++msgstr "è¡ è¿œå ããŸãã"
+ 
+ msgid "line less"
+-msgstr "¹Ô ºïœü€·€Þ€·€¿"
++msgstr "è¡ åé€ããŸãã"
+ 
+ msgid "fewer lines"
+-msgstr "¹Ô ºïœü€·€Þ€·€¿"
++msgstr "è¡ åé€ããŸãã"
+ 
+ msgid "change"
+-msgstr "²ÕœêÊÑ¹¹€·€Þ€·€¿"
++msgstr "ç®æå€æŽããŸãã"
+ 
+ msgid "changes"
+-msgstr "²ÕœêÊÑ¹¹€·€Þ€·€¿"
++msgstr "ç®æå€æŽããŸãã"
+ 
+ #, c-format
+ msgid "%ld %s; %s #%ld  %s"
+ msgstr "%ld %s; %s #%ld  %s"
+ 
+ msgid "before"
+-msgstr "Á°Êý"
++msgstr "åæ¹"
+ 
+ msgid "after"
+-msgstr "žåÊý"
++msgstr "åŸæ¹"
+ 
+ msgid "Nothing to undo"
+-msgstr "¥¢¥ó¥É¥¥ÂÐŸÝ€¬€¢€ê€Þ€»€ó"
++msgstr "ã¢ã³ãã¥å¯Ÿè±¡ããããŸãã"
+ 
+-msgid "number changes  time"
+-msgstr "ÈÖ¹æ   ÊÑ¹¹     »þ¹ï"
++msgid "number changes  when               saved"
++msgstr "éçª   å€æŽæ°   å€æŽææ           ä¿å­æž"
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+-msgstr "%ld ÉÃ·Ð²á€·€Æ€€€Þ€¹"
++msgstr "%ld ç§çµéããŠããŸã"
+ 
+ msgid "E790: undojoin is not allowed after undo"
+-msgstr "E790: undo €ÎÄŸžå€Ë undojoin €Ï€Ç€­€Þ€»€ó"
++msgstr "E790: undo ã®çŽåŸã« undojoin ã¯ã§ããŸãã"
+ 
+ msgid "E439: undo list corrupt"
+-msgstr "E439: ¥¢¥ó¥É¥¥¥ê¥¹¥È€¬²õ€ì€Æ€€€Þ€¹"
++msgstr "E439: ã¢ã³ãã¥ãªã¹ããå£ããŠããŸã"
+ 
+ msgid "E440: undo line missing"
+-msgstr "E440: ¥¢¥ó¥É¥¥¹Ô€¬€¢€ê€Þ€»€ó"
++msgstr "E440: ã¢ã³ãã¥è¡ããããŸãã"
+ 
+ #. Only MS VC 4.1 and earlier can do Win32s
+ msgid ""
+@@ -5503,90 +5798,104 @@
+ "MS-Windows 16/32-bit GUI version"
+ msgstr ""
+ "\n"
+-"MS-Windows 16/32 ¥Ó¥Ã¥È GUI ÈÇ"
++"MS-Windows 16/32 ããã GUI ç"
+ 
+ msgid ""
+ "\n"
+ "MS-Windows 64-bit GUI version"
+ msgstr ""
+ "\n"
+-"MS-Windows 64 ¥Ó¥Ã¥È GUI ÈÇ"
++"MS-Windows 64 ããã GUI ç"
+ 
+ msgid ""
+ "\n"
+ "MS-Windows 32-bit GUI version"
+ msgstr ""
+ "\n"
+-"MS-Windows 32 ¥Ó¥Ã¥È GUI ÈÇ"
++"MS-Windows 32 ããã GUI ç"
+ 
+ msgid " in Win32s mode"
+-msgstr " in Win32s ¥â¡Œ¥É"
++msgstr " in Win32s ã¢ãŒã"
+ 
+ msgid " with OLE support"
+-msgstr " with OLE ¥µ¥Ý¡Œ¥È"
++msgstr " with OLE ãµããŒã"
++
++msgid ""
++"\n"
++"MS-Windows 64-bit console version"
++msgstr ""
++"\n"
++"MS-Windows 64 ããã ã³ã³ãœãŒã« ç"
+ 
+ msgid ""
+ "\n"
+ "MS-Windows 32-bit console version"
+ msgstr ""
+ "\n"
+-"MS-Windows 32 ¥Ó¥Ã¥È ¥³¥ó¥œ¡Œ¥ë ÈÇ"
++"MS-Windows 32 ããã ã³ã³ãœãŒã« ç"
+ 
+ msgid ""
+ "\n"
+ "MS-Windows 16-bit version"
+ msgstr ""
+ "\n"
+-"MS-Windows 16 ¥Ó¥Ã¥È ÈÇ"
++"MS-Windows 16 ããã ç"
+ 
+ msgid ""
+ "\n"
+ "32-bit MS-DOS version"
+ msgstr ""
+ "\n"
+-"32 ¥Ó¥Ã¥È MS-DOS ÈÇ"
++"32 ããã MS-DOS ç"
+ 
+ msgid ""
+ "\n"
+ "16-bit MS-DOS version"
+ msgstr ""
+ "\n"
+-"16 ¥Ó¥Ã¥È MS-DOS ÈÇ"
++"16 ããã MS-DOS ç"
+ 
+ msgid ""
+ "\n"
+ "MacOS X (unix) version"
+ msgstr ""
+ "\n"
+-"MacOS X (unix) ÈÇ"
++"MacOS X (unix) ç"
+ 
+ msgid ""
+ "\n"
+ "MacOS X version"
+ msgstr ""
+ "\n"
+-"MacOS X ÈÇ"
++"MacOS X ç"
+ 
+ msgid ""
+ "\n"
+ "MacOS version"
+ msgstr ""
+ "\n"
+-"MacOS ÈÇ"
++"MacOS ç"
+ 
+ msgid ""
+ "\n"
+-"RISC OS version"
++"OpenVMS version"
+ msgstr ""
+ "\n"
+-"RISC OS ÈÇ"
++"OpenVMS ç"
+ 
+ msgid ""
+ "\n"
+ "Included patches: "
+ msgstr ""
+ "\n"
+-"Å¬ÍÑºÑ¥Ñ¥Ã¥Á: "
++"é©çšæžããã: "
++
++msgid ""
++"\n"
++"Extra patches: "
++msgstr ""
++"\n"
++"è¿œå æ¡åŒµããã: "
+ 
+ msgid "Modified by "
+ msgstr "Modified by "
+@@ -5606,35 +5915,35 @@
+ "Huge version "
+ msgstr ""
+ "\n"
+-"Huge ÈÇ "
++"Huge ç "
+ 
+ msgid ""
+ "\n"
+ "Big version "
+ msgstr ""
+ "\n"
+-"Big ÈÇ "
++"Big ç "
+ 
+ msgid ""
+ "\n"
+ "Normal version "
+ msgstr ""
+ "\n"
+-"ÄÌŸï ÈÇ "
++"éåžž ç "
+ 
+ msgid ""
+ "\n"
+ "Small version "
+ msgstr ""
+ "\n"
+-"Small ÈÇ "
++"Small ç "
+ 
+ msgid ""
+ "\n"
+ "Tiny version "
+ msgstr ""
+ "\n"
+-"Tiny ÈÇ "
++"Tiny ç "
+ 
+ msgid "without GUI."
+ msgstr "without GUI."
+@@ -5642,15 +5951,9 @@
+ msgid "with GTK2-GNOME GUI."
+ msgstr "with GTK2-GNOME GUI."
+ 
+-msgid "with GTK-GNOME GUI."
+-msgstr "with GTK-GNOME GUI."
+-
+ msgid "with GTK2 GUI."
+ msgstr "with GTK2 GUI."
+ 
+-msgid "with GTK GUI."
+-msgstr "with GTK GUI."
+-
+ msgid "with X11-Motif GUI."
+ msgstr "with X11-Motif GUI."
+ 
+@@ -5673,61 +5976,61 @@
+ msgstr "with Cocoa GUI."
+ 
+ msgid "with (classic) GUI."
+-msgstr "with (¥¯¥é¥·¥Ã¥¯) GUI."
++msgstr "with (ã¯ã©ã·ãã¯) GUI."
+ 
+ msgid "  Features included (+) or not (-):\n"
+-msgstr "  µ¡Çœ€Î°ìÍ÷ Í­žú(+)/Ìµžú(-)\n"
++msgstr "  æ©èœã®äžèŠ§ æå¹(+)/ç¡å¹(-)\n"
+ 
+ msgid "   system vimrc file: \""
+-msgstr "      ¥·¥¹¥Æ¥à vimrc: \""
++msgstr "      ã·ã¹ãã  vimrc: \""
+ 
+ msgid "     user vimrc file: \""
+-msgstr "        ¥æ¡Œ¥¶ vimrc: \""
++msgstr "        ãŠãŒã¶ vimrc: \""
+ 
+ msgid " 2nd user vimrc file: \""
+-msgstr "     Âè2¥æ¡Œ¥¶ vimrc: \""
++msgstr "     ç¬¬2ãŠãŒã¶ vimrc: \""
+ 
+ msgid " 3rd user vimrc file: \""
+-msgstr "     Âè3¥æ¡Œ¥¶ vimrc: \""
++msgstr "     ç¬¬3ãŠãŒã¶ vimrc: \""
+ 
+ msgid "      user exrc file: \""
+-msgstr "         ¥æ¡Œ¥¶ exrc: \""
++msgstr "         ãŠãŒã¶ exrc: \""
+ 
+ msgid "  2nd user exrc file: \""
+-msgstr "      Âè2¥æ¡Œ¥¶ exrc: \""
++msgstr "      ç¬¬2ãŠãŒã¶ exrc: \""
+ 
+ msgid "  system gvimrc file: \""
+-msgstr "     ¥·¥¹¥Æ¥à gvimrc: \""
++msgstr "     ã·ã¹ãã  gvimrc: \""
+ 
+ msgid "    user gvimrc file: \""
+-msgstr "       ¥æ¡Œ¥¶ gvimrc: \""
++msgstr "       ãŠãŒã¶ gvimrc: \""
+ 
+ msgid "2nd user gvimrc file: \""
+-msgstr "    Âè2¥æ¡Œ¥¶ gvimrc: \""
++msgstr "    ç¬¬2ãŠãŒã¶ gvimrc: \""
+ 
+ msgid "3rd user gvimrc file: \""
+-msgstr "    Âè3¥æ¡Œ¥¶ gvimrc: \""
++msgstr "    ç¬¬3ãŠãŒã¶ gvimrc: \""
+ 
+ msgid "    system menu file: \""
+-msgstr "    ¥·¥¹¥Æ¥à¥á¥Ë¥å¡Œ: \""
++msgstr "    ã·ã¹ãã ã¡ãã¥ãŒ: \""
+ 
+ msgid "  fall-back for $VIM: \""
+-msgstr "       ŸÊÎ¬»þ€Î $VIM: \""
++msgstr "       çç¥æã® $VIM: \""
+ 
+ msgid " f-b for $VIMRUNTIME: \""
+-msgstr "ŸÊÎ¬»þ€Î $VIMRUNTIME: \""
++msgstr "çç¥æã® $VIMRUNTIME: \""
+ 
+ msgid "Compilation: "
+-msgstr "¥³¥ó¥Ñ¥€¥ë: "
++msgstr "ã³ã³ãã€ã«: "
+ 
+ msgid "Compiler: "
+-msgstr "¥³¥ó¥Ñ¥€¥é: "
++msgstr "ã³ã³ãã€ã©: "
+ 
+ msgid "Linking: "
+-msgstr "¥ê¥ó¥¯: "
++msgstr "ãªã³ã¯: "
+ 
+ msgid "  DEBUG BUILD"
+-msgstr "¥Ç¥Ð¥Ã¥°¥Ó¥ë¥É"
++msgstr "ãããã°ãã«ã"
+ 
+ msgid "VIM - Vi IMproved"
+ msgstr "VIM - Vi IMproved"
+@@ -5736,477 +6039,645 @@
+ msgstr "version "
+ 
+ msgid "by Bram Moolenaar et al."
+-msgstr "by Bram Moolenaar ÂŸ."
++msgstr "by Bram Moolenaar ä»."
+ 
+ msgid "Vim is open source and freely distributable"
+-msgstr "Vim €Ï¥ª¡Œ¥×¥ó¥œ¡Œ¥¹€Ç€¢€êŒ«Í³€ËÇÛÉÛ²ÄÇœ€Ç€¹"
++msgstr "Vim ã¯ãªãŒãã³ãœãŒã¹ã§ããèªç±ã«é
+åžå¯èœã§ã"
+ 
+ msgid "Help poor children in Uganda!"
+-msgstr "¥Š¥¬¥ó¥À€Î·Ã€Þ€ì€Ê€€»Ò¶¡€¿€Á€Ë±çœõ€ò!"
++msgstr "ãŠã¬ã³ãã®æµãŸããªãå­äŸãã¡ã«æŽå©ã!"
+ 
+ msgid "type  :help iccf<Enter>       for information "
+-msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help iccf<Enter>      "
++msgstr "è©³çŽ°ãªæ
+å ±ã¯           :help iccf<Enter>      "
+ 
+ msgid "type  :q<Enter>               to exit         "
+-msgstr "œªÎ»€¹€ë€Ë€Ï           :q<Enter>              "
++msgstr "çµäºããã«ã¯           :q<Enter>              "
+ 
+ msgid "type  :help<Enter>  or  <F1>  for on-line help"
+-msgstr "¥ª¥ó¥é¥€¥ó¥Ø¥ë¥×€Ï     :help<Enter> €« <F1>   "
++msgstr "ãªã³ã©ã€ã³ãã«ãã¯     :help<Enter> ã <F1>   "
+ 
+ msgid "type  :help version7<Enter>   for version info"
+-msgstr "¥Ð¡Œ¥ž¥ç¥óŸðÊó€Ï       :help version7<Enter>  "
++msgstr "ããŒãžã§ã³æ
+å ±ã¯       :help version7<Enter>  "
+ 
+ msgid "Running in Vi compatible mode"
+-msgstr "VižßŽ¹¥â¡Œ¥É€ÇÆ°ºîÃæ"
++msgstr "Viäºæã¢ãŒãã§åäœäž­"
+ 
+ msgid "type  :set nocp<Enter>        for Vim defaults"
+-msgstr "Vim¿äŸ©ÃÍ€Ë€¹€ë€Ë€Ï    :set nocp<Enter>       "
++msgstr "Vimæšå¥šå€ã«ããã«ã¯    :set nocp<Enter>       "
+ 
+ msgid "type  :help cp-default<Enter> for info on this"
+-msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help cp-default<Enter>"
++msgstr "è©³çŽ°ãªæ
+å ±ã¯           :help cp-default<Enter>"
+ 
+ msgid "menu  Help->Orphans           for information    "
+-msgstr "ŸÜºÙ€Ï¥á¥Ë¥å¡Œ€Î ¥Ø¥ë¥×¢ªžÉ»ù €ò»²ŸÈ€·€Æ²Œ€µ€€   "
++msgstr "è©³çŽ°ã¯ã¡ãã¥ãŒã® ãã«ãâå­€å
+ ãåç
+§ããŠäžãã   "
+ 
+ msgid "Running modeless, typed text is inserted"
+-msgstr "¥â¡Œ¥ÉÌµ€ÇŒÂ¹ÔÃæ, ¥¿¥€¥×€·€¿Êž»ú€¬ÁÞÆþ€µ€ì€Þ€¹"
++msgstr "ã¢ãŒãç¡ã§å®è¡äž­, ã¿ã€ãããæå­ãæ¿å
+¥ãããŸã"
+ 
+ msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+-msgstr "¥á¥Ë¥å¡Œ€Î ÊÔœž¢ªÁŽÂÎÀßÄê¢ªÁÞÆþ(œé¿ŽŒÔ)¥â¡Œ¥ÉÀÚÂØ"
++msgstr "ã¡ãã¥ãŒã® ç·šéâå
+šäœèš­å®âæ¿å
+¥(åå¿è
+)ã¢ãŒãåæ¿ "
+ 
+ msgid "                              for two modes      "
+-msgstr "                              €Ç¥â¡Œ¥ÉÍ­€Ë       "
++msgstr "                              ã§ã¢ãŒãæã«       "
+ 
+ msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
+-msgstr "¥á¥Ë¥å¡Œ€Î ÊÔœž¢ªÁŽÂÎÀßÄê¢ªVižßŽ¹¥â¡Œ¥ÉÀÚÂØ      "
++msgstr "ã¡ãã¥ãŒã® ç·šéâå
+šäœèš­å®âViäºæã¢ãŒãåæ¿      "
+ 
+ msgid "                              for Vim defaults   "
+-msgstr "                              €ÇVim€È€·€ÆÆ°ºî    "
++msgstr "                              ã§VimãšããŠåäœ    "
+ 
+ msgid "Sponsor Vim development!"
+-msgstr "Vim€Î³«È¯€ò±þ±ç€·€Æ€¯€À€µ€€!"
++msgstr "Vimã®éçºãå¿æŽããŠãã ãã!"
+ 
+ msgid "Become a registered Vim user!"
+-msgstr "Vim€ÎÅÐÏ¿¥æ¡Œ¥¶€Ë€Ê€Ã€Æ€¯€À€µ€€!"
++msgstr "Vimã®ç»é²ãŠãŒã¶ã«ãªã£ãŠãã ãã!"
+ 
+ msgid "type  :help sponsor<Enter>    for information "
+-msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help sponsor<Enter>   "
++msgstr "è©³çŽ°ãªæ
+å ±ã¯           :help sponsor<Enter>   "
+ 
+ msgid "type  :help register<Enter>   for information "
+-msgstr "ŸÜºÙ€ÊŸðÊó€Ï           :help register<Enter>  "
++msgstr "è©³çŽ°ãªæ
+å ±ã¯           :help register<Enter>  "
+ 
+ msgid "menu  Help->Sponsor/Register  for information    "
+-msgstr "ŸÜºÙ€Ï¥á¥Ë¥å¡Œ€Î ¥Ø¥ë¥×¢ª¥¹¥Ý¥ó¥µ¡Œ/ÅÐÏ¿ €ò»²ŸÈ€·€Æ²Œ€µ€€   "
++msgstr "è©³çŽ°ã¯ã¡ãã¥ãŒã® ãã«ãâã¹ãã³ãµãŒ/ç»é² ãåç
+§ããŠäžãã   "
+ 
+ msgid "WARNING: Windows 95/98/ME detected"
+-msgstr "   ·Ù¹ð: Windows 95/98/Me €òž¡œÐ  "
++msgstr "   è­Šå: Windows 95/98/Me ãæ€åº  "
+ 
+ msgid "type  :help windows95<Enter>  for info on this"
+-msgstr " ŸÜºÙ€ÊŸðÊó€Ï          :help windows95<Enter> "
++msgstr " è©³çŽ°ãªæ
+å ±ã¯          :help windows95<Enter> "
+ 
+ msgid "Already only one window"
+-msgstr "Žû€Ë¥Š¥£¥ó¥É¥Š€Ï1€Ä€·€«€¢€ê€Þ€»€ó"
++msgstr "æ¢ã«ãŠã£ã³ããŠã¯1ã€ãããããŸãã"
+ 
+ msgid "E441: There is no preview window"
+-msgstr "E441: ¥×¥ì¥Ó¥å¡Œ¥Š¥£¥ó¥É¥Š€¬€¢€ê€Þ€»€ó"
++msgstr "E441: ãã¬ãã¥ãŒãŠã£ã³ããŠããããŸãã"
+ 
+ msgid "E442: Can't split topleft and botright at the same time"
+-msgstr "E442: ºžŸå€È±Š²Œ€òÆ±»þ€ËÊ¬³ä€¹€ë€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "E442: å·Šäžãšå³äžãåæã«åå²ããããšã¯ã§ããŸãã"
+ 
+ msgid "E443: Cannot rotate when another window is split"
+-msgstr "E443: ÂŸ€Î¥Š¥£¥ó¥É¥Š€¬Ê¬³ä€µ€ì€Æ€€€ë»þ€Ë€Ïœç²ó€Ç€­€Þ€»€ó"
++msgstr "E443: ä»ã®ãŠã£ã³ããŠãåå²ãããŠããæã«ã¯é åã§ããŸãã"
+ 
+ msgid "E444: Cannot close last window"
+-msgstr "E444: ºÇžå€Î¥Š¥£¥ó¥É¥Š€òÊÄ€ž€ë€³€È€Ï€Ç€­€Þ€»€ó"
++msgstr "E444: æåŸã®ãŠã£ã³ããŠãéããããšã¯ã§ããŸãã"
++
++msgid "E813: Cannot close autocmd window"
++msgstr "E813: autocmdãŠã£ã³ããŠã¯éããããŸãã"
++
++msgid "E814: Cannot close window, only autocmd window would remain"
++msgstr "E814: autocmdãŠã£ã³ããŠããæ®ããªãããããŠã£ã³ããŠã¯éããããŸãã"
+ 
+ msgid "E445: Other window contains changes"
+-msgstr "E445: ÂŸ€Î¥Š¥£¥ó¥É¥Š€Ë€ÏÊÑ¹¹€¬€¢€ê€Þ€¹"
++msgstr "E445: ä»ã®ãŠã£ã³ããŠã«ã¯å€æŽããããŸã"
+ 
+ msgid "E446: No file name under cursor"
+-msgstr "E446: ¥«¡Œ¥œ¥ë€Î²Œ€Ë¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++msgstr "E446: ã«ãŒãœã«ã®äžã«ãã¡ã€ã«åããããŸãã"
+ 
+ #, c-format
+ msgid "E447: Can't find file \"%s\" in path"
+-msgstr "E447: path€Ë€Ï \"%s\" €È€€€Š¥Õ¥¡¥€¥ë€¬€¢€ê€Þ€»€ó"
+-
+-#, c-format
+-msgid "E370: Could not load library %s"
+-msgstr "E370: ¥é¥€¥Ö¥é¥ê %s €ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
+-
+-msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+-msgstr ""
+-"€³€Î¥³¥Þ¥ó¥É€ÏÌµžú€Ç€¹, €Ž€á€ó€Ê€µ€€: Perl¥é¥€¥Ö¥é¥ê€ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿."
+-
+-msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+-msgstr ""
+-"E299: ¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€Ï Safe ¥â¥ž¥å¡Œ¥ë€ò»ÈÍÑ€·€Ê€€Perl¥¹¥¯¥ê¥×¥È€Ï¶Ø€ž€é€ì"
+-"€Æ€€€Þ€¹"
++msgstr "E447: pathã«ã¯ \"%s\" ãšãããã¡ã€ã«ããããŸãã"
+ 
+ msgid "Edit with &multiple Vims"
+-msgstr "Ê£¿ô€ÎVim€ÇÊÔœž€¹€ë (&M)"
++msgstr "è€æ°ã®Vimã§ç·šéãã (&M)"
+ 
+ msgid "Edit with single &Vim"
+-msgstr "1€Ä€ÎVim€ÇÊÔœž€¹€ë (&V)"
++msgstr "1ã€ã®Vimã§ç·šéãã (&V)"
+ 
+ msgid "Diff with Vim"
+-msgstr "Vim€Çº¹Ê¬€òž«€ë"
++msgstr "Vimã§å·®åãè¡šç€ºãã"
+ 
+ msgid "Edit with &Vim"
+-msgstr "Vim€ÇÊÔœž€¹€ë (&V)"
++msgstr "Vimã§ç·šéãã (&V)"
+ 
+ #. Now concatenate
+ msgid "Edit with existing Vim - "
+-msgstr "ŽûÂž€ÎVim€ÇÊÔœž€¹€ë - "
++msgstr "èµ·åæžã®Vimã§ç·šéãã - "
+ 
+ msgid "Edits the selected file(s) with Vim"
+-msgstr "ÁªÂò€µ€ì€¿¥Õ¥¡¥€¥ë€òVim€ÇÊÔœž€¹€ë"
++msgstr "éžæãããã¡ã€ã«ãVimã§ç·šéãã"
+ 
+ msgid "Error creating process: Check if gvim is in your path!"
+-msgstr ""
+-"µ¯Æ°€ËŒºÇÔ€·€Þ€·€¿: gvim €Ø€Î¥Ñ¥¹€¬Àµ€·€¯ÀßÄê€µ€ì€Æ€€€ë€«³ÎÇ§€·€Æ€¯€À€µ€€!"
++msgstr "ãã­ã»ã¹ã®äœæã«å€±æ: gvimãç°å¢å€æ°PATHäžã«ãããç¢ºèªããŠãã ãã!"
+ 
+ msgid "gvimext.dll error"
+-msgstr "gvimext.dll ¥š¥é¡Œ"
++msgstr "gvimext.dll ãšã©ãŒ"
+ 
+ msgid "Path length too long!"
+-msgstr "¥Ñ¥¹€¬Ä¹²á€®€Þ€¹!"
++msgstr "ãã¹ãé·ãããŸã!"
+ 
+ msgid "--No lines in buffer--"
+-msgstr "--¥Ð¥Ã¥Õ¥¡€Ë¹Ô€¬€¢€ê€Þ€»€ó--"
++msgstr "--ãããã¡ã«è¡ããããŸãã--"
+ 
+ #.
+ #. * The error messages that can be shared are included here.
+ #. * Excluded are errors that are only used once and debugging messages.
+ #.
+ msgid "E470: Command aborted"
+-msgstr "E470: ¥³¥Þ¥ó¥É€¬ÃæÃÇ€µ€ì€Þ€·€¿"
++msgstr "E470: ã³ãã³ããäž­æ­ãããŸãã"
+ 
+ msgid "E471: Argument required"
+-msgstr "E471: °ú¿ô€¬É¬Í×€Ç€¹"
++msgstr "E471: åŒæ°ãå¿
+èŠã§ã"
+ 
+ msgid "E10: \\ should be followed by /, ? or &"
+-msgstr "E10: \\ €Îžå€Ï / €« ? €« & €Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgstr "E10: \\ ã®åŸã¯ / ã ? ã & ã§ãªããã°ãªããŸãã"
+ 
+ msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
+-msgstr "E11: ¥³¥Þ¥ó¥É¥é¥€¥ó€Ç€ÏÌµžú€Ç€¹; <CR>€ÇŒÂ¹Ô, CTRL-C€Ç€ä€á€ë"
++msgstr "E11: ã³ãã³ãã©ã€ã³ã§ã¯ç¡å¹ã§ã; <CR>ã§å®è¡, CTRL-Cã§ããã"
+ 
+ msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
+ msgstr ""
+-"E12: žœºß€Î¥Ç¥£¥ì¥¯¥È¥ê€ä¥¿¥°ž¡º÷€Ç€Ïexrc/vimrc€Î¥³¥Þ¥ó¥É€Ïµö²Ä€µ€ì€Þ€»€ó"
++"E12: çŸåšã®ãã£ã¬ã¯ããªãã¿ã°æ€çŽ¢ã§ã¯exrc/vimrcã®ã³ãã³ãã¯èš±å¯ãããŸãã"
+ 
+ msgid "E171: Missing :endif"
+-msgstr "E171: :endif €¬€¢€ê€Þ€»€ó"
++msgstr "E171: :endif ããããŸãã"
+ 
+ msgid "E600: Missing :endtry"
+-msgstr "E600: :endtry €¬€¢€ê€Þ€»€ó"
++msgstr "E600: :endtry ããããŸãã"
+ 
+ msgid "E170: Missing :endwhile"
+-msgstr "E170: :endwhile €¬€¢€ê€Þ€»€ó"
++msgstr "E170: :endwhile ããããŸãã"
+ 
+ msgid "E170: Missing :endfor"
+-msgstr "E170: :endfor €¬€¢€ê€Þ€»€ó"
++msgstr "E170: :endfor ããããŸãã"
+ 
+ msgid "E588: :endwhile without :while"
+-msgstr "E588: :while €Î€Ê€€ :endwhile €¬€¢€ê€Þ€¹"
++msgstr "E588: :while ã®ãªã :endwhile ããããŸã"
+ 
+ msgid "E588: :endfor without :for"
+-msgstr "E588: :endfor €Î€Ê€€ :for €¬€¢€ê€Þ€¹"
++msgstr "E588: :endfor ã®ãªã :for ããããŸã"
+ 
+ msgid "E13: File exists (add ! to override)"
+-msgstr "E13: ¥Õ¥¡¥€¥ë€¬Âžºß€·€Þ€¹ (! €òÄÉ²Ã€ÇŸåœñ)"
++msgstr "E13: ãã¡ã€ã«ãå­åšããŸã (! ãè¿œå ã§äžæž)"
+ 
+ msgid "E472: Command failed"
+-msgstr "E472: ¥³¥Þ¥ó¥É€¬ŒºÇÔ€·€Þ€·€¿"
++msgstr "E472: ã³ãã³ããå€±æããŸãã"
+ 
+ #, c-format
+ msgid "E234: Unknown fontset: %s"
+-msgstr "E234: Ì€ÃÎ€Î¥Õ¥©¥ó¥È¥»¥Ã¥È: %s"
++msgstr "E234: æªç¥ã®ãã©ã³ãã»ãã: %s"
+ 
+ #, c-format
+ msgid "E235: Unknown font: %s"
+-msgstr "E235: Ì€ÃÎ€Î¥Õ¥©¥ó¥È: %s"
++msgstr "E235: æªç¥ã®ãã©ã³ã: %s"
+ 
+ #, c-format
+ msgid "E236: Font \"%s\" is not fixed-width"
+-msgstr "E236: ¥Õ¥©¥ó¥È \"%s\" €ÏžÇÄêÉý€Ç€Ï€¢€ê€Þ€»€ó"
++msgstr "E236: ãã©ã³ã \"%s\" ã¯åºå®å¹
+ã§ã¯ãããŸãã"
+ 
+ msgid "E473: Internal error"
+-msgstr "E473: ÆâÉô¥š¥é¡Œ€Ç€¹"
++msgstr "E473: å
+éšãšã©ãŒã§ã"
+ 
+ msgid "Interrupted"
+-msgstr "³ä¹þ€Þ€ì€Þ€·€¿"
++msgstr "å²èŸŒãŸããŸãã"
+ 
+ msgid "E14: Invalid address"
+-msgstr "E14: Ìµžú€Ê¥¢¥É¥ì¥¹€Ç€¹"
++msgstr "E14: ç¡å¹ãªã¢ãã¬ã¹ã§ã"
+ 
+ msgid "E474: Invalid argument"
+-msgstr "E474: Ìµžú€Ê°ú¿ô€Ç€¹"
++msgstr "E474: ç¡å¹ãªåŒæ°ã§ã"
+ 
+ #, c-format
+ msgid "E475: Invalid argument: %s"
+-msgstr "E475: Ìµžú€Ê°ú¿ô€Ç€¹: %s"
++msgstr "E475: ç¡å¹ãªåŒæ°ã§ã: %s"
+ 
+ #, c-format
+ msgid "E15: Invalid expression: %s"
+-msgstr "E15: Ìµžú€ÊŒ°€Ç€¹: %s"
++msgstr "E15: ç¡å¹ãªåŒã§ã: %s"
+ 
+ msgid "E16: Invalid range"
+-msgstr "E16: Ìµžú€ÊÈÏ°Ï€Ç€¹"
++msgstr "E16: ç¡å¹ãªç¯å²ã§ã"
+ 
+ msgid "E476: Invalid command"
+-msgstr "E476: Ìµžú€Ê¥³¥Þ¥ó¥É€Ç€¹"
++msgstr "E476: ç¡å¹ãªã³ãã³ãã§ã"
+ 
+ #, c-format
+ msgid "E17: \"%s\" is a directory"
+-msgstr "E17: \"%s\" €Ï¥Ç¥£¥ì¥¯¥È¥ê€Ç€¹"
++msgstr "E17: \"%s\" ã¯ãã£ã¬ã¯ããªã§ã"
+ 
+ #, c-format
+ msgid "E364: Library call failed for \"%s()\""
+-msgstr "E364: \"%s\"() €Î¥é¥€¥Ö¥é¥êžÆœÐ€ËŒºÇÔ€·€Þ€·€¿"
++msgstr "E364: \"%s\"() ã®ã©ã€ãã©ãªåŒåºã«å€±æããŸãã"
+ 
+ #, c-format
+ msgid "E448: Could not load library function %s"
+-msgstr "E448: ¥é¥€¥Ö¥é¥ê€ÎŽØ¿ô %s €ò¥í¡Œ¥É€Ç€­€Þ€»€ó€Ç€·€¿"
++msgstr "E448: ã©ã€ãã©ãªã®é¢æ° %s ãã­ãŒãã§ããŸããã§ãã"
+ 
+ msgid "E19: Mark has invalid line number"
+-msgstr "E19: ¥Þ¡Œ¥¯€ËÌµžú€Ê¹ÔÈÖ¹æ€¬»ØÄê€µ€ì€Æ€€€Þ€·€¿"
++msgstr "E19: ããŒã¯ã«ç¡å¹ãªè¡çªå·ãæå®ãããŠããŸãã"
+ 
+ msgid "E20: Mark not set"
+-msgstr "E20: ¥Þ¡Œ¥¯€ÏÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E20: ããŒã¯ã¯èš­å®ãããŠããŸãã"
+ 
+ msgid "E21: Cannot make changes, 'modifiable' is off"
+-msgstr "E21: 'modifiable' €¬¥ª¥Õ€Ê€Î€Ç, ÊÑ¹¹€Ç€­€Þ€»€ó"
++msgstr "E21: 'modifiable' ããªããªã®ã§, å€æŽã§ããŸãã"
+ 
+ msgid "E22: Scripts nested too deep"
+-msgstr "E22: ¥¹¥¯¥ê¥×¥È€ÎÆþ€ì»Ò€¬¿Œ²á€®€Þ€¹"
++msgstr "E22: ã¹ã¯ãªããã®å
+¥ãå­ãæ·±éããŸã"
+ 
+ msgid "E23: No alternate file"
+-msgstr "E23: Éû¥Õ¥¡¥€¥ë€Ï€¢€ê€Þ€»€ó"
++msgstr "E23: å¯ãã¡ã€ã«ã¯ãããŸãã"
+ 
+ msgid "E24: No such abbreviation"
+-msgstr "E24: €œ€Î€è€Š€ÊÃ»œÌÆþÎÏ€Ï€¢€ê€Þ€»€ó"
++msgstr "E24: ãã®ãããªç­çž®å
+¥åã¯ãããŸãã"
+ 
+ msgid "E477: No ! allowed"
+-msgstr "E477: ! €Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E477: ! ã¯èš±å¯ãããŠããŸãã"
+ 
+ msgid "E25: GUI cannot be used: Not enabled at compile time"
+-msgstr "E25: GUI€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹"
++msgstr "E25: GUIã¯äœ¿çšäžå¯èœã§ã: ã³ã³ãã€ã«æã«ç¡å¹ã«ãããŠããŸã"
+ 
+ msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
+-msgstr "E26: ¥Ø¥Ö¥é¥€žì€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹\n"
++msgstr "E26: ããã©ã€èªã¯äœ¿çšäžå¯èœã§ã: ã³ã³ãã€ã«æã«ç¡å¹ã«ãããŠããŸã\n"
+ 
+ msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
+-msgstr "E27: ¥Ú¥ë¥·¥¢žì€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹\n"
++msgstr "E27: ãã«ã·ã¢èªã¯äœ¿çšäžå¯èœã§ã: ã³ã³ãã€ã«æã«ç¡å¹ã«ãããŠããŸã\n"
+ 
+ msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
+-msgstr "E800: ¥¢¥é¥Ó¥¢žì€Ï»ÈÍÑÉÔ²ÄÇœ€Ç€¹: ¥³¥ó¥Ñ¥€¥ë»þ€ËÌµžú€Ë€µ€ì€Æ€€€Þ€¹\n"
++msgstr "E800: ã¢ã©ãã¢èªã¯äœ¿çšäžå¯èœã§ã: ã³ã³ãã€ã«æã«ç¡å¹ã«ãããŠããŸã\n"
+ 
+ #, c-format
+ msgid "E28: No such highlight group name: %s"
+-msgstr "E28: €œ€Î€è€Š€ÊÌŸ€Î¥Ï¥€¥é¥€¥È¥°¥ë¡Œ¥×€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E28: ãã®ãããªåã®ãã€ã©ã€ãã°ã«ãŒãã¯ãããŸãã: %s"
+ 
+ msgid "E29: No inserted text yet"
+-msgstr "E29: €Þ€À¥Æ¥­¥¹¥È€¬ÁÞÆþ€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E29: ãŸã ãã­ã¹ããæ¿å
+¥ãããŠããŸãã"
+ 
+ msgid "E30: No previous command line"
+-msgstr "E30: °ÊÁ°€Ë¥³¥Þ¥ó¥É¹Ô€¬€¢€ê€Þ€»€ó"
++msgstr "E30: ä»¥åã«ã³ãã³ãè¡ããããŸãã"
+ 
+ msgid "E31: No such mapping"
+-msgstr "E31: €œ€Î€è€Š€Ê¥Þ¥Ã¥Ô¥ó¥°€Ï€¢€ê€Þ€»€ó"
++msgstr "E31: ãã®ãããªãããã³ã°ã¯ãããŸãã"
+ 
+ msgid "E479: No match"
+-msgstr "E479: ³ºÅö€Ï€¢€ê€Þ€»€ó"
++msgstr "E479: è©²åœã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E480: No match: %s"
+-msgstr "E480: ³ºÅö€Ï€¢€ê€Þ€»€ó: %s"
++msgstr "E480: è©²åœã¯ãããŸãã: %s"
+ 
+ msgid "E32: No file name"
+-msgstr "E32: ¥Õ¥¡¥€¥ëÌŸ€¬€¢€ê€Þ€»€ó"
++msgstr "E32: ãã¡ã€ã«åããããŸãã"
+ 
+ msgid "E33: No previous substitute regular expression"
+-msgstr "E33: Àµµ¬ÉœžœÃÖŽ¹€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E33: æ­£èŠè¡šçŸçœ®æããŸã å®è¡ãããŠããŸãã"
+ 
+ msgid "E34: No previous command"
+-msgstr "E34: ¥³¥Þ¥ó¥É€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E34: ã³ãã³ãããŸã å®è¡ãããŠããŸãã"
+ 
+ msgid "E35: No previous regular expression"
+-msgstr "E35: Àµµ¬Éœžœ€¬€Þ€ÀŒÂ¹Ô€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E35: æ­£èŠè¡šçŸããŸã å®è¡ãããŠããŸãã"
+ 
+ msgid "E481: No range allowed"
+-msgstr "E481: ÈÏ°Ï»ØÄê€Ïµö²Ä€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E481: ç¯å²æå®ã¯èš±å¯ãããŠããŸãã"
+ 
+ msgid "E36: Not enough room"
+-msgstr "E36: œŒÊ¬€ÊÍÆÎÌ€¬€¢€ê€Þ€»€ó"
++msgstr "E36: ãŠã£ã³ããŠã«ååãªé«ããããã¯å¹
+ããããŸãã"
+ 
+ #, c-format
+ msgid "E247: no registered server named \"%s\""
+-msgstr "E247: %s €È€€€ŠÌŸÁ°€ÎÅÐÏ¿€µ€ì€¿¥µ¡Œ¥Ð€Ï€¢€ê€Þ€»€ó"
++msgstr "E247: %s ãšããååã®ç»é²ããããµãŒãã¯ãããŸãã"
+ 
+ #, c-format
+ msgid "E482: Can't create file %s"
+-msgstr "E482: ¥Õ¥¡¥€¥ë %s €òºîÀ®€Ç€­€Þ€»€ó"
++msgstr "E482: ãã¡ã€ã« %s ãäœæã§ããŸãã"
+ 
+ msgid "E483: Can't get temp file name"
+-msgstr "E483: °ì»þ¥Õ¥¡¥€¥ë€ÎÌŸÁ°€òŒèÆÀ€Ç€­€Þ€»€ó"
++msgstr "E483: äžæãã¡ã€ã«ã®ååãååŸã§ããŸãã"
+ 
+ #, c-format
+ msgid "E484: Can't open file %s"
+-msgstr "E484: ¥Õ¥¡¥€¥ë \"%s\" €ò³«€±€Þ€»€ó"
++msgstr "E484: ãã¡ã€ã« \"%s\" ãéããŸãã"
+ 
+ #, c-format
+ msgid "E485: Can't read file %s"
+-msgstr "E485: ¥Õ¥¡¥€¥ë %s €òÆÉ¹þ€á€Þ€»€ó"
++msgstr "E485: ãã¡ã€ã« %s ãèª­èŸŒããŸãã"
+ 
+ msgid "E37: No write since last change (add ! to override)"
+-msgstr "E37: ºÇžå€ÎÊÑ¹¹€¬ÊÝÂž€µ€ì€Æ€€€Þ€»€ó (! €òÄÉ²Ã€ÇÊÑ¹¹€òÇËŽþ)"
++msgstr "E37: æåŸã®å€æŽãä¿å­ãããŠããŸãã (! ãè¿œå ã§å€æŽãç Žæ£)"
+ 
+ msgid "E38: Null argument"
+-msgstr "E38: °ú¿ô€¬¶õ€Ç€¹"
++msgstr "E38: åŒæ°ãç©ºã§ã"
+ 
+ msgid "E39: Number expected"
+-msgstr "E39: ¿ôÃÍ€¬Í×µá€µ€ì€Æ€€€Þ€¹"
++msgstr "E39: æ°å€ãèŠæ±ãããŠããŸã"
+ 
+ #, c-format
+ msgid "E40: Can't open errorfile %s"
+-msgstr "E40: ¥š¥é¡Œ¥Õ¥¡¥€¥ë %s €ò³«€±€Þ€»€ó"
++msgstr "E40: ãšã©ãŒãã¡ã€ã« %s ãéããŸãã"
+ 
+ msgid "E233: cannot open display"
+-msgstr "E233: ¥Ç¥£¥¹¥×¥ì¥€€ò³«€±€Þ€»€ó"
++msgstr "E233: ãã£ã¹ãã¬ã€ãéããŸãã"
+ 
+ msgid "E41: Out of memory!"
+-msgstr "E41: ¥á¥â¥ê€¬¿Ô€­²Ì€Æ€Þ€·€¿!"
++msgstr "E41: ã¡ã¢ãªãå°œãæãŠãŸãã!"
+ 
+ msgid "Pattern not found"
+-msgstr "¥Ñ¥¿¡Œ¥ó€Ï€ß€Ä€«€ê€Þ€»€ó€Ç€·€¿"
++msgstr "ãã¿ãŒã³ã¯èŠã€ãããŸããã§ãã"
+ 
+ #, c-format
+ msgid "E486: Pattern not found: %s"
+-msgstr "E486: ¥Ñ¥¿¡Œ¥ó€Ï€ß€Ä€«€ê€Þ€»€ó€Ç€·€¿: %s"
++msgstr "E486: ãã¿ãŒã³ã¯èŠã€ãããŸããã§ãã: %s"
+ 
+ msgid "E487: Argument must be positive"
+-msgstr "E487: °ú¿ô€ÏÀµ€ÎÃÍ€Ç€Ê€±€ì€Ð€Ê€ê€Þ€»€ó"
++msgstr "E487: åŒæ°ã¯æ­£ã®å€ã§ãªããã°ãªããŸãã"
+ 
+ msgid "E459: Cannot go back to previous directory"
+-msgstr "E459: Á°€Î¥Ç¥£¥ì¥¯¥È¥ê€ËÌá€ì€Þ€»€ó"
++msgstr "E459: åã®ãã£ã¬ã¯ããªã«æ»ããŸãã"
+ 
+ msgid "E42: No Errors"
+-msgstr "E42: ¥š¥é¡Œ€Ï€¢€ê€Þ€»€ó"
++msgstr "E42: ãšã©ãŒã¯ãããŸãã"
+ 
+ msgid "E776: No location list"
+-msgstr "E776: Ÿìœê¥ê¥¹¥È€Ï€¢€ê€Þ€»€ó"
++msgstr "E776: å Žæãªã¹ãã¯ãããŸãã"
+ 
+ msgid "E43: Damaged match string"
+-msgstr "E43: ³ºÅöÊž»úÎó€¬ÇËÂ»€·€Æ€€€Þ€¹"
++msgstr "E43: è©²åœæå­åãç ŽæããŠããŸã"
+ 
+ msgid "E44: Corrupted regexp program"
+-msgstr "E44: ÉÔÀµ€ÊÀµµ¬Éœžœ¥×¥í¥°¥é¥à€Ç€¹"
++msgstr "E44: äžæ­£ãªæ­£èŠè¡šçŸãã­ã°ã©ã ã§ã"
+ 
+ msgid "E45: 'readonly' option is set (add ! to override)"
+-msgstr "E45: 'readonly' ¥ª¥×¥·¥ç¥ó€¬ÀßÄê€µ€ì€Æ€€€Þ€¹ (! €òÄÉ²Ã€ÇŸåœñ€­)"
++msgstr "E45: 'readonly' ãªãã·ã§ã³ãèš­å®ãããŠããŸã (! ãè¿œå ã§äžæžã)"
+ 
+ #, c-format
+ msgid "E46: Cannot change read-only variable \"%s\""
+-msgstr "E46: ÆÉŒèÀìÍÑÊÑ¿ô \"%s\" €Ë€ÏÃÍ€òÀßÄê€Ç€­€Þ€»€ó"
++msgstr "E46: èª­åå°çšå€æ° \"%s\" ã«ã¯å€ãèš­å®ã§ããŸãã"
+ 
+ #, c-format
+ msgid "E794: Cannot set variable in the sandbox: \"%s\""
+-msgstr "E794: ¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€ÏÊÑ¿ô \"%s\" €ËÃÍ€òÀßÄê€Ç€­€Þ€»€ó"
++msgstr "E794: ãµã³ãããã¯ã¹ã§ã¯å€æ° \"%s\" ã«å€ãèš­å®ã§ããŸãã"
+ 
+ msgid "E47: Error while reading errorfile"
+-msgstr "E47: ¥š¥é¡Œ¥Õ¥¡¥€¥ë€ÎÆÉ¹þÃæ€Ë¥š¥é¡Œ€¬È¯Àž€·€Þ€·€¿"
++msgstr "E47: ãšã©ãŒãã¡ã€ã«ã®èª­èŸŒäž­ã«ãšã©ãŒãçºçããŸãã"
+ 
+ msgid "E48: Not allowed in sandbox"
+-msgstr "E48: ¥µ¥ó¥É¥Ü¥Ã¥¯¥¹€Ç€Ïµö€µ€ì€Þ€»€ó"
++msgstr "E48: ãµã³ãããã¯ã¹ã§ã¯èš±ãããŸãã"
+ 
+ msgid "E523: Not allowed here"
+-msgstr "E523: €³€³€Ç€Ïµö²Ä€µ€ì€Þ€»€ó"
++msgstr "E523: ããã§ã¯èš±å¯ãããŸãã"
+ 
+ msgid "E359: Screen mode setting not supported"
+-msgstr "E359: ¥¹¥¯¥ê¡Œ¥ó¥â¡Œ¥É€ÎÀßÄê€Ë€ÏÂÐ±þ€·€Æ€€€Þ€»€ó"
++msgstr "E359: ã¹ã¯ãªãŒã³ã¢ãŒãã®èš­å®ã«ã¯å¯Ÿå¿ããŠããŸãã"
+ 
+ msgid "E49: Invalid scroll size"
+-msgstr "E49: Ìµžú€Ê¥¹¥¯¥í¡Œ¥ëÎÌ€Ç€¹"
++msgstr "E49: ç¡å¹ãªã¹ã¯ã­ãŒã«éã§ã"
+ 
+ msgid "E91: 'shell' option is empty"
+-msgstr "E91: 'shell' ¥ª¥×¥·¥ç¥ó€¬¶õ€Ç€¹"
++msgstr "E91: 'shell' ãªãã·ã§ã³ãç©ºã§ã"
+ 
+ msgid "E255: Couldn't read in sign data!"
+-msgstr "E255: sign €Î¥Ç¡Œ¥¿€òÆÉ¹þ€á€Þ€»€ó€Ç€·€¿"
++msgstr "E255: sign ã®ããŒã¿ãèª­èŸŒããŸããã§ãã"
+ 
+ msgid "E72: Close error on swap file"
+-msgstr "E72: ¥¹¥ï¥Ã¥×¥Õ¥¡¥€¥ë€Î¥¯¥í¡Œ¥º»þ¥š¥é¡Œ€Ç€¹"
++msgstr "E72: ã¹ã¯ãããã¡ã€ã«ã®ã¯ã­ãŒãºæãšã©ãŒã§ã"
+ 
+ msgid "E73: tag stack empty"
+-msgstr "E73: ¥¿¥°¥¹¥¿¥Ã¥¯€¬¶õ€Ç€¹"
++msgstr "E73: ã¿ã°ã¹ã¿ãã¯ãç©ºã§ã"
+ 
+ msgid "E74: Command too complex"
+-msgstr "E74: ¥³¥Þ¥ó¥É€¬Ê£»š²á€®€Þ€¹"
++msgstr "E74: ã³ãã³ããè€ééããŸã"
+ 
+ msgid "E75: Name too long"
+-msgstr "E75: ÌŸÁ°€¬Ä¹²á€®€Þ€¹"
++msgstr "E75: ååãé·éããŸã"
+ 
+ msgid "E76: Too many ["
+-msgstr "E76: [ €¬Â¿²á€®€Þ€¹"
++msgstr "E76: [ ãå€éããŸã"
+ 
+ msgid "E77: Too many file names"
+-msgstr "E77: ¥Õ¥¡¥€¥ëÌŸ€¬Â¿²á€®€Þ€¹"
++msgstr "E77: ãã¡ã€ã«åãå€éããŸã"
+ 
+ msgid "E488: Trailing characters"
+-msgstr "E488: ÍŸÊ¬€ÊÊž»ú€¬žå€í€Ë€¢€ê€Þ€¹"
++msgstr "E488: äœåãªæå­ãåŸãã«ãããŸã"
+ 
+ msgid "E78: Unknown mark"
+-msgstr "E78: Ì€ÃÎ€Î¥Þ¡Œ¥¯"
++msgstr "E78: æªç¥ã®ããŒã¯"
+ 
+ msgid "E79: Cannot expand wildcards"
+-msgstr "E79: ¥ï¥€¥ë¥É¥«¡Œ¥É€òÅž³«€Ç€­€Þ€»€ó"
++msgstr "E79: ã¯ã€ã«ãã«ãŒããå±éã§ããŸãã"
+ 
+ msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
+-msgstr "E591: 'winheight' €Ï 'winminheight' €è€êŸ®€µ€¯€Ç€­€Þ€»€ó"
++msgstr "E591: 'winheight' ã¯ 'winminheight' ããå°ããã§ããŸãã"
+ 
+ msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
+-msgstr "E592: 'winwidth' €Ï 'winminwidth' €è€êŸ®€µ€¯€Ç€­€Þ€»€ó"
++msgstr "E592: 'winwidth' ã¯ 'winminwidth' ããå°ããã§ããŸãã"
+ 
+ msgid "E80: Error while writing"
+-msgstr "E80: œñ¹þ€ßÃæ€Î¥š¥é¡Œ"
++msgstr "E80: æžèŸŒã¿äž­ã®ãšã©ãŒ"
+ 
+ msgid "Zero count"
+-msgstr "¥Œ¥í¥«¥Š¥ó¥È"
++msgstr "ãŒã­ã«ãŠã³ã"
+ 
+ msgid "E81: Using <SID> not in a script context"
+-msgstr "E81: ¥¹¥¯¥ê¥×¥È°Ê³°€Ç<SID>€¬»È€ï€ì€Þ€·€¿"
++msgstr "E81: ã¹ã¯ãªããä»¥å€ã§<SID>ãäœ¿ãããŸãã"
+ 
+ msgid "E449: Invalid expression received"
+-msgstr "E449: Ìµžú€ÊŒ°€òŒõ€±Œè€ê€Þ€·€¿"
++msgstr "E449: ç¡å¹ãªåŒãåãåããŸãã"
+ 
+ msgid "E463: Region is guarded, cannot modify"
+-msgstr "E463: ÎÎ°è€¬ÊÝžî€µ€ì€Æ€€€ë€Î€Ç, ÊÑ¹¹€Ç€­€Þ€»€ó"
++msgstr "E463: é åãä¿è­·ãããŠããã®ã§, å€æŽã§ããŸãã"
+ 
+ msgid "E744: NetBeans does not allow changes in read-only files"
+-msgstr "E744: NetBeans €ÏÆÉ¹þÀìÍÑ¥Õ¥¡¥€¥ë€òÊÑ¹¹€¹€ë€³€È€òµö€·€Þ€»€ó"
++msgstr "E744: NetBeans ã¯èª­èŸŒå°çšãã¡ã€ã«ãå€æŽããããšãèš±ããŸãã"
+ 
+ #, c-format
+ msgid "E685: Internal error: %s"
+-msgstr "E685: ÆâÉô¥š¥é¡Œ€Ç€¹: %s"
++msgstr "E685: å
+éšãšã©ãŒã§ã: %s"
+ 
+ msgid "E363: pattern uses more memory than 'maxmempattern'"
+-msgstr "E363: ¥Ñ¥¿¡Œ¥ó€¬ 'maxmempattern' °ÊŸå€Î¥á¥â¥ê€ò»ÈÍÑ€·€Þ€¹"
++msgstr "E363: ãã¿ãŒã³ã 'maxmempattern' ä»¥äžã®ã¡ã¢ãªãäœ¿çšããŸã"
+ 
+ msgid "E749: empty buffer"
+-msgstr "E749: ¥Ð¥Ã¥Õ¥¡€¬¶õ€Ç€¹"
++msgstr "E749: ãããã¡ãç©ºã§ã"
+ 
+ msgid "E682: Invalid search pattern or delimiter"
+-msgstr "E682: ž¡º÷¥Ñ¥¿¡Œ¥ó€«¶èÀÚ€êµ­¹æ€¬ÉÔÀµ€Ç€¹"
++msgstr "E682: æ€çŽ¢ãã¿ãŒã³ãåºåãèšå·ãäžæ­£ã§ã"
+ 
+ msgid "E139: File is loaded in another buffer"
+-msgstr "E139: Æ±€žÌŸÁ°€Î¥Õ¥¡¥€¥ë€¬ÂŸ€Î¥Ð¥Ã¥Õ¥¡€ÇÆÉ¹þ€Þ€ì€Æ€€€Þ€¹"
++msgstr "E139: åãååã®ãã¡ã€ã«ãä»ã®ãããã¡ã§èª­èŸŒãŸããŠããŸã"
+ 
+ #, c-format
+ msgid "E764: Option '%s' is not set"
+-msgstr "E764: ¥ª¥×¥·¥ç¥ó '%s' €ÏÀßÄê€µ€ì€Æ€€€Þ€»€ó"
++msgstr "E764: ãªãã·ã§ã³ '%s' ã¯èš­å®ãããŠããŸãã"
++
++msgid "E850: Invalid register name"
++msgstr "E850: ç¡å¹ãªã¬ãžã¹ã¿åã§ã"
+ 
+ msgid "search hit TOP, continuing at BOTTOM"
+-msgstr "Ÿå€Þ€Çž¡º÷€·€¿€Î€Ç²Œ€ËÌá€ê€Þ€¹"
++msgstr "äžãŸã§æ€çŽ¢ããã®ã§äžã«æ»ããŸã"
+ 
+ msgid "search hit BOTTOM, continuing at TOP"
+-msgstr "²Œ€Þ€Çž¡º÷€·€¿€Î€ÇŸå€ËÌá€ê€Þ€¹"
++msgstr "äžãŸã§æ€çŽ¢ããã®ã§äžã«æ»ããŸã"
++
++#, c-format
++msgid "Need encryption key for \"%s\""
++msgstr "æå·ã­ãŒãå¿
+èŠã§ã: \"%s\""
++
++msgid "can't delete OutputObject attributes"
++msgstr "OutputObjectå±æ§ãæ¶ããŸãã"
++
++msgid "softspace must be an integer"
++msgstr "softspace ã¯ integer ã§ãªããã°ãªããŸãã"
++
++msgid "invalid attribute"
++msgstr "ç¡å¹ãªå±æ§ã§ã"
++
++msgid "writelines() requires list of strings"
++msgstr "writelines() ã«ã¯æå­åã®ãªã¹ããå¿
+èŠã§ã"
++
++msgid "E264: Python: Error initialising I/O objects"
++msgstr "E264: Python: I/Oãªããžã§ã¯ãã®åæåãšã©ãŒ"
++
++msgid "empty keys are not allowed"
++msgstr "ç©ºã®ã­ãŒã¯èš±å¯ãããŠããŸãã"
++
++msgid "Cannot delete DictionaryObject attributes"
++msgstr "DictionaryObjectå±æ§ãæ¶ããŸãã"
++
++msgid "Cannot modify fixed dictionary"
++msgstr "åºå®ãããèŸæžã¯å€æŽã§ããŸãã"
++
++msgid "Cannot set this attribute"
++msgstr "ãã®å±æ§ã¯èš­å®ã§ããŸãã"
++
++msgid "dict is locked"
++msgstr "èŸæžã¯ã­ãã¯ãããŠããŸã"
++
++msgid "failed to add key to dictionary"
++msgstr "èŸæžãžã®ã­ãŒã®è¿œå ã«å€±æããŸãã"
++
++msgid "list index out of range"
++msgstr "ãªã¹ãç¯å²å€ã®ã€ã³ããã¯ã¹ã§ã"
++
++msgid "internal error: failed to get vim list item"
++msgstr "å
+éšãšã©ãŒ: vimã®ãªã¹ãèŠçŽ ã®ååŸã«å€±æããŸãã"
++
++msgid "list is locked"
++msgstr "ãªã¹ãã¯ã­ãã¯ãããŠããŸã"
++
++msgid "Failed to add item to list"
++msgstr "ãªã¹ããžã®èŠçŽ è¿œå ã«å€±æããŸãã"
++
++msgid "internal error: no vim list item"
++msgstr "å
+éšãšã©ãŒ: vimã®ãªã¹ãèŠçŽ ããããŸãã"
++
++msgid "can only assign lists to slice"
++msgstr "ã¹ã©ã€ã¹ã«ã¯ãªã¹ãã ããä»£å
+¥ã§ããŸã"
++
++msgid "internal error: failed to add item to list"
++msgstr "å
+éšãšã©ãŒ: ãªã¹ããžã®èŠçŽ è¿œå ã«å€±æããŸãã"
++
++msgid "can only concatenate with lists"
++msgstr "ãªã¹ããšã®ã¿æ¥ç¶ã§ããŸã"
++
++msgid "cannot delete vim.dictionary attributes"
++msgstr "vim.dictionaryå±æ§ã¯æ¶ããŸãã"
++
++msgid "cannot modify fixed list"
++msgstr "åºå®ããããªã¹ãã¯å€æŽã§ããŸãã"
++
++msgid "cannot set this attribute"
++msgstr "ãã®å±æ§ã¯èš­å®ã§ããŸãã"
++
++msgid "'self' argument must be a dictionary"
++msgstr "'self' åŒæ°ã¯èŸæžåã®å€ã§ãªããã°ãªããŸãã"
++
++msgid "failed to run function"
++msgstr "é¢æ°ã®å®è¡ã«å€±æããŸãã"
++
++msgid "unable to get option value"
++msgstr "ãªãã·ã§ã³ã®å€ã¯ååŸã§ããŸãã"
++
++msgid "unable to unset global option"
++msgstr "ã°ã­ãŒãã«ãªãã·ã§ã³ã®èš­å®è§£é€ã¯ã§ããŸãã"
++
++msgid "unable to unset option without global value"
++msgstr "ã°ã­ãŒãã«å€æ°ãäœ¿ããã«ãªãã·ã§ã³ã®èš­å®è§£é€ã¯ã§ããŸãã"
++
++msgid "object must be integer"
++msgstr "ãªããžã§ã¯ãã¯æŽæ°ã§ãªããã°ãªããŸãã"
++
++msgid "object must be string"
++msgstr "ãªããžã§ã¯ãã¯æå­åã§ãªããã°ãªããŸãã"
++
++msgid "attempt to refer to deleted tab page"
++msgstr "åé€ãããã¿ããåç
+§ããããšããŸãã"
++
++#, c-format
++msgid "<tabpage object (deleted) at %p>"
++msgstr "<ã¿ãããŒãžãªããžã§ã¯ã (æ¶å»æžã¿) %p>"
++
++#, c-format
++msgid "<tabpage object (unknown) at %p>"
++msgstr "<ã¿ãããŒãžãªããžã§ã¯ã (äžæ) %p>"
++
++#, c-format
++msgid "<tabpage %d>"
++msgstr "<ã¿ãããŒãž %d>"
++
++msgid "no such tab page"
++msgstr "ãã®ãããªã¿ãããŒãžã¯ãããŸãã"
++
++msgid "attempt to refer to deleted window"
++msgstr "åé€ããããŠã£ã³ããŠãåç
+§ããããšããŸãã"
++
++msgid "readonly attribute"
++msgstr "èª­èŸŒå°çšå±æ§"
++
++msgid "cursor position outside buffer"
++msgstr "ã«ãŒãœã«äœçœ®ããããã¡ã®å€åŽã§ã"
++
++#, c-format
++msgid "<window object (deleted) at %p>"
++msgstr "<ãŠã£ã³ããŠãªããžã§ã¯ã (æ¶å»æžã¿) %p>"
++
++#, c-format
++msgid "<window object (unknown) at %p>"
++msgstr "<ãŠã£ã³ããŠãªããžã§ã¯ã (äžæ) %p>"
++
++#, c-format
++msgid "<window %d>"
++msgstr "<ãŠã£ã³ããŠ %d>"
++
++msgid "no such window"
++msgstr "ãã®ãããªãŠã£ã³ããŠã¯ãããŸãã"
++
++msgid "attempt to refer to deleted buffer"
++msgstr "åé€ããããããã¡ãåç
+§ããããšããŸãã"
++
++#, c-format
++msgid "<buffer object (deleted) at %p>"
++msgstr "<ãããã¡ãªããžã§ã¯ã (æ¶å»æžã¿) %p>"
++
++msgid "key must be integer"
++msgstr "ã­ãŒã¯æŽæ°å€ã§ãªããã°ãªããŸãã"
++
++msgid "expected vim.buffer object"
++msgstr "vim.bufferãªããžã§ã¯ããæåŸ
+ããŠããŸã"
++
++msgid "failed to switch to given buffer"
++msgstr "æå®ããããããã¡ãžã®åãæ¿ãã«å€±æããŸãã"
++
++msgid "expected vim.window object"
++msgstr "vim.windowãªããžã§ã¯ããæåŸ
+ããŠããŸã"
++
++msgid "failed to find window in the current tab page"
++msgstr "çŸåšã®ã¿ãã«ã¯æå®ããããŠã£ã³ããŠããããŸããã§ãã"
++
++msgid "did not switch to the specified window"
++msgstr "æå®ããããŠã£ã³ããŠã«åãæ¿ããŸããã§ãã"
++
++msgid "expected vim.tabpage object"
++msgstr "vim.tabpageãªããžã§ã¯ããæåŸ
+ããŠããŸã"
++
++msgid "did not switch to the specified tab page"
++msgstr "æå®ãããã¿ãããŒãžã«åãæ¿ããŸããã§ãã"
++
++msgid "unable to convert to vim structure"
++msgstr "vimã®æ§é äœã«å€æã§ããŸãã"
++
++msgid "NULL reference passed"
++msgstr "NULLåç
+§ãæž¡ãããŸãã"
++
++msgid "internal error: invalid value type"
++msgstr "å
+éšãšã©ãŒ: ç¡å¹ãªå€åã§ã"
+diff -Naur vim73.orig/src/po/ja.sjis.po vim73/src/po/ja.sjis.po
+--- vim73.orig/src/po/ja.sjis.po	2010-08-15 13:02:25.000000000 +0000
++++ vim73/src/po/ja.sjis.po	2013-06-07 17:07:33.972245000 +0000
+@@ -3,21 +3,50 @@
+ # Do ":help uganda"  in Vim to read copying and usage conditions.
+ # Do ":help credits" in Vim to see a list of people who contributed.
+ #
+-# MURAOKA Taro <koron.kaoriya@gmail.com>, 2001-8.
+-# Last Change: 31-May-2008.
++# Last Change: 2013 May 19
++#
++# Copyright (C) 2001-12 MURAOKA Taro <koron.kaoriya@gmail.com>
++# THIS FILE IS DISTRIBUTED UNDER THE VIM LICENSE.
++#
++# Original translations.
+ #
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: Vim 7.1\n"
++"Project-Id-Version: Vim 7.4\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2008-05-31 22:00+0900\n"
+-"PO-Revision-Date: 2008-05-31 22:30+0900\n"
++"POT-Creation-Date: 2013-05-19 12:20+0900\n"
++"PO-Revision-Date: 2013-05-19 12:30+0900\n"
+ "Last-Translator: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
+ "Language-Team: MURAOKA Taro <koron.kaoriya@gmail.com>\n"
++"Language: Japanese\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=cp932\n"
+ "Content-Transfer-Encoding: 8-bit\n"
+ 
++msgid "E831: bf_key_init() called with empty password"
++msgstr "E831: bf_key_init() ªópX[hÅÄÑo³êÜµœ"
++
++msgid "E820: sizeof(uint32_t) != 4"
++msgstr "E820: sizeof(uint32_t) != 4"
++
++msgid "E817: Blowfish big/little endian use wrong"
++msgstr "E817: BlowfishÃÌrbO/gGfBAªÔáÁÄ¢Ü·"
++
++msgid "E818: sha256 test failed"
++msgstr "E818: sha256ÌeXgÉžsµÜµœ"
++
++msgid "E819: Blowfish test failed"
++msgstr "E819: BlowfishÃÌeXgÉžsµÜµœ"
++
++msgid "[Location List]"
++msgstr "[êXg]"
++
++msgid "[Quickfix List]"
++msgstr "[QuickfixXg]"
++
++msgid "E855: Autocommands caused command to abort"
++msgstr "E855: autocommandªR}hÌâ~ðø«N±µÜµœ"
++
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: obt@ð1Âàì¬Å«È¢ÌÅ, I¹µÜ·..."
+ 
+@@ -83,7 +112,7 @@
+ 
+ #, c-format
+ msgid "E92: Buffer %ld not found"
+-msgstr "E92: obt@ %ld ªÝÂ©èÜ¹ñ"
++msgstr "E92: obt@ %ld ª©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E93: More than one match for %s"
+@@ -149,7 +178,6 @@
+ msgid "Top"
+ msgstr "æª"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+@@ -157,11 +185,8 @@
+ "\n"
+ "# obt@Xg:\n"
+ 
+-msgid "[Location List]"
+-msgstr "[êXg]"
+-
+-msgid "[Quickfix List]"
+-msgstr "[QuickfixXg]"
++msgid "[Scratch]"
++msgstr "[º«]"
+ 
+ msgid ""
+ "\n"
+@@ -182,12 +207,18 @@
+ msgid "E96: Can not diff more than %ld buffers"
+ msgstr "E96: %ld ÈãÌobt@ÍdiffÅ«Ü¹ñ"
+ 
++msgid "E810: Cannot read or write temp files"
++msgstr "E810: êt@CÌÇàµ­ÍªÅ«Ü¹ñ"
++
+ msgid "E97: Cannot create diffs"
+ msgstr "E97: ·ªðì¬Å«Ü¹ñ "
+ 
+ msgid "Patch file"
+ msgstr "pb`t@C"
+ 
++msgid "E816: Cannot read patch output"
++msgstr "E816: patchÌoÍðÇßÜ¹ñ"
++
+ msgid "E98: Cannot read diff output"
+ msgstr "E98: diffÌoÍðÇßÜ¹ñ"
+ 
+@@ -206,7 +237,7 @@
+ 
+ #, c-format
+ msgid "E102: Can't find buffer \"%s\""
+-msgstr "E102: obt@ \"%s\" ªÝÂ©èÜ¹ñ"
++msgstr "E102: obt@ \"%s\" ª©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E103: Buffer \"%s\" is not in diff mode"
+@@ -219,7 +250,7 @@
+ msgstr "E104: ÉEscapeÍgpÅ«Ü¹ñ"
+ 
+ msgid "E544: Keymap file not found"
+-msgstr "E544: L[}bvt@CªÝÂ©èÜ¹ñ"
++msgstr "E544: L[}bvt@Cª©Â©èÜ¹ñ"
+ 
+ msgid "E105: Using :loadkeymap not in a sourced file"
+ msgstr "E105: :source ÅæÞt@CÈOÅÍ :loadkeymap ðgŠÜ¹ñ"
+@@ -273,6 +304,12 @@
+ msgid "Hit end of paragraph"
+ msgstr "iÌÅãÉqbg"
+ 
++msgid "E839: Completion function changed window"
++msgstr "E839: âÔÖªEBhEðÏXµÜµœ"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: â®ÖªeLXgðíµÜµœ"
++
+ msgid "'dictionary' option is empty"
+ msgstr "'dictionary' IvVªóÅ·"
+ 
+@@ -293,7 +330,6 @@
+ msgid "Scanning: %s"
+ msgstr "XL: %s"
+ 
+-#, c-format
+ msgid "Scanning tags."
+ msgstr "^OðXL."
+ 
+@@ -336,7 +372,7 @@
+ msgstr "E121: ¢è`ÌÏÅ·: %s"
+ 
+ msgid "E111: Missing ']'"
+-msgstr "E111: ']' ªÝÂ©èÜ¹ñ"
++msgstr "E111: ']' ª©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E686: Argument of %s must be a List"
+@@ -429,7 +465,7 @@
+ msgstr "E108: »ÌÏÍ èÜ¹ñ: \"%s\""
+ 
+ msgid "E743: variable nested too deep for (un)lock"
+-msgstr "E743: (A`)bN·éÉÍÏÌüêqª[ß¬Ü·"
++msgstr "E743: (A)bN·éÉÍÏÌüêqª[ß¬Ü·"
+ 
+ msgid "E109: Missing ':' after '?'"
+ msgstr "E109: '?' ÌãÉ ':' ª èÜ¹ñ"
+@@ -452,8 +488,11 @@
+ msgid "E694: Invalid operation for Funcrefs"
+ msgstr "E694: ÖQÆ^ÉÍ³øÈìÅ·"
+ 
++msgid "E804: Cannot use '%' with Float"
++msgstr "E804: '%' ð®¬_ÆgÝí¹ÄÍgŠÜ¹ñ"
++
+ msgid "E110: Missing ')'"
+-msgstr "E110: ')' ªÝÂ©èÜ¹ñ"
++msgstr "E110: ')' ª©Â©èÜ¹ñ"
+ 
+ msgid "E695: Cannot index a Funcref"
+ msgstr "E695: ÖQÆ^ÍCfbNXÅ«Ü¹ñ"
+@@ -502,6 +541,14 @@
+ msgstr "E724: \\Š·éÉÍÏÌüêqª[ß¬Ü·"
+ 
+ #, c-format
++msgid "E740: Too many arguments for function %s"
++msgstr "E740: ÖÌøªœß¬Ü·: %s"
++
++#, c-format
++msgid "E116: Invalid arguments for function %s"
++msgstr "E116: ÖÌ³øÈøÅ·: %s"
++
++#, c-format
+ msgid "E117: Unknown function: %s"
+ msgstr "E117: ¢mÌÖÅ·: %s"
+ 
+@@ -517,8 +564,14 @@
+ msgid "E725: Calling dict function without Dictionary: %s"
+ msgstr "E725: «pÖªÄÎêÜµœª«ª èÜ¹ñ: %s"
+ 
++msgid "E808: Number or Float required"
++msgstr "E808: l©®¬_ªKvÅ·"
++
++msgid "add() argument"
++msgstr "add() Ìø"
++
+ msgid "E699: Too many arguments"
+-msgstr "E699: ªœß¬Ü·"
++msgstr "E699: øªœß¬Ü·"
+ 
+ msgid "E785: complete() can only be used in Insert mode"
+ msgstr "E785: complete() Í}ü[hÅµ©pÅ«Ü¹ñ"
+@@ -531,13 +584,22 @@
+ msgid "&Ok"
+ msgstr "&Ok"
+ 
++msgid "extend() argument"
++msgstr "extend() Ìø"
++
+ #, c-format
+ msgid "E737: Key already exists: %s"
+-msgstr "E737: %s Æ¢€L[ÍùÉ¶ÝµÜ·"
++msgstr "E737: L[ÍùÉ¶ÝµÜ·: %s"
++
++msgid "map() argument"
++msgstr "map() Ìø"
++
++msgid "filter() argument"
++msgstr "filter() Ìø"
+ 
+ #, c-format
+ msgid "+-%s%3ld lines: "
+-msgstr "+-%s%3ld s:"
++msgstr "+-%s%3ld s: "
+ 
+ #, c-format
+ msgid "E700: Unknown function: %s"
+@@ -553,6 +615,9 @@
+ msgid "called inputrestore() more often than inputsave()"
+ msgstr "inputrestore() ª inputsave() æèàœ­ÄÎêÜµœ"
+ 
++msgid "insert() argument"
++msgstr "insert() Ìø"
++
+ msgid "E786: Range not allowed"
+ msgstr "E786: ÍÍwèÍÂ³êÄ¢Ü¹ñ"
+ 
+@@ -578,13 +643,22 @@
+ msgid "E277: Unable to read a server reply"
+ msgstr "E277: T[oÌª èÜ¹ñ"
+ 
++msgid "remove() argument"
++msgstr "remove() Ìø"
++
+ # Added at 10-Mar-2004.
+ msgid "E655: Too many symbolic links (cycle?)"
+ msgstr "E655: V{bNNªœß¬Ü· (zÂµÄ¢éÂ\\«ª èÜ·)"
+ 
++msgid "reverse() argument"
++msgstr "reverse() Ìø"
++
+ msgid "E258: Unable to send to client"
+ msgstr "E258: NCAgÖé±ÆªÅ«Ü¹ñ"
+ 
++msgid "sort() argument"
++msgstr "sort() Ìø"
++
+ msgid "E702: Sort compare function failed"
+ msgstr "E702: \\[gÌärÖªžsµÜµœ"
+ 
+@@ -594,6 +668,9 @@
+ msgid "E677: Error writing temp file"
+ msgstr "E677: êt@CÉG[ª­¶µÜµœ"
+ 
++msgid "E805: Using a Float as a Number"
++msgstr "E805: ®¬_ðlÆµÄµÁÄ¢Ü·"
++
+ msgid "E703: Using a Funcref as a Number"
+ msgstr "E703: ÖQÆ^ðlÆµÄµÁÄ¢Ü·B"
+ 
+@@ -610,15 +687,10 @@
+ msgstr "E730: Xg^ð¶ñÆµÄµÁÄ¢Ü·"
+ 
+ msgid "E731: using Dictionary as a String"
+-msgstr "E731: Ï^ð¶ñÆµÄµÁÄ¢Ü·"
++msgstr "E731: «^ð¶ñÆµÄµÁÄ¢Ü·"
+ 
+-#, c-format
+-msgid "E704: Funcref variable name must start with a capital: %s"
+-msgstr "E704: ÖQÆ^ÏŒÍå¶ÅnÜçÈ¯êÎÈèÜ¹ñ: %s"
+-
+-#, c-format
+-msgid "E705: Variable name conflicts with existing function: %s"
+-msgstr "E705: ÏŒªù¶ÌÖŒÆÕËµÜ·: %s"
++msgid "E806: using Float as a String"
++msgstr "E806: ®¬_ð¶ñÆµÄµÁÄ¢Ü·"
+ 
+ #, c-format
+ msgid "E706: Variable type mismatch for: %s"
+@@ -629,6 +701,14 @@
+ msgstr "E795: Ï %s ðíÅ«Ü¹ñ"
+ 
+ #, c-format
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: ÖQÆ^ÏŒÍå¶ÅnÜçÈ¯êÎÈèÜ¹ñ: %s"
++
++#, c-format
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: ÏŒªù¶ÌÖŒÆÕËµÜ·: %s"
++
++#, c-format
+ msgid "E741: Value is locked: %s"
+ msgstr "E741: lªbN³êÄ¢Ü·: %s"
+ 
+@@ -643,17 +723,36 @@
+ msgstr "E698: Rs[ðæéÉÍÏÌüêqª[ß¬Ü·"
+ 
+ #, c-format
++msgid "E123: Undefined function: %s"
++msgstr "E123: ¢è`ÌÖÅ·: %s"
++
++#, c-format
+ msgid "E124: Missing '(': %s"
+ msgstr "E124: '(' ª èÜ¹ñ: %s"
+ 
++msgid "E862: Cannot use g: here"
++msgstr "E862: ±±ÅÍ g: ÍgŠÜ¹ñ"
++
+ #, c-format
+ msgid "E125: Illegal argument: %s"
+ msgstr "E125: s³ÈøÅ·: %s"
+ 
++#, c-format
++msgid "E853: Duplicate argument name: %s"
++msgstr "E853: øŒªd¡µÄ¢Ü·: %s"
++
+ msgid "E126: Missing :endfunction"
+ msgstr "E126: :endfunction ª èÜ¹ñ"
+ 
+ #, c-format
++msgid "E707: Function name conflicts with variable: %s"
++msgstr "E707: ÖŒªÏŒÆÕËµÜ·: %s"
++
++#, c-format
++msgid "E127: Cannot redefine function %s: It is in use"
++msgstr "E127: Ö %s ðÄè`Å«Ü¹ñ: gpÅ·"
++
++#, c-format
+ msgid "E746: Function name does not match script file name: %s"
+ msgstr "E746: ÖŒªXNvgÌt@CŒÆêvµÜ¹ñ: %s"
+ 
+@@ -694,7 +793,6 @@
+ msgid "E133: :return not inside a function"
+ msgstr "E133: ÖOÉ :return ª èÜµœ"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# global variables:\n"
+@@ -709,6 +807,9 @@
+ "\n"
+ "\tLast set from "
+ 
++msgid "No old files"
++msgstr "Ã¢t@CÍ èÜ¹ñ"
++
+ #, c-format
+ msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+ msgstr "<%s>%s%s  %d,  16i %02x,  8i %03o"
+@@ -758,6 +859,9 @@
+ msgid " marks"
+ msgstr " }[N"
+ 
++msgid " oldfiles"
++msgstr " t@CQ"
++
+ msgid " FAILED"
+ msgstr " žs"
+ 
+@@ -779,7 +883,6 @@
+ msgid "# This viminfo file was generated by Vim %s.\n"
+ msgstr "# ±Ì viminfo t@CÍ Vim %s ÉæÁÄ¶¬³êÜµœ.\n"
+ 
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+@@ -787,7 +890,6 @@
+ "# ÏX·éÛÉÍ\\ªÓµÄ­Ÿ³¢!\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+ msgstr "# ±Ìt@Cª©êœÌ 'encoding' Ìl\n"
+ 
+@@ -865,7 +967,7 @@
+ msgstr "%s Éu·µÜ·©? (y/n/a/q/l/^E/^Y)"
+ 
+ msgid "(Interrupted) "
+-msgstr "(ÜêÜµœ)"
++msgstr "(ÜêÜµœ) "
+ 
+ msgid "1 match"
+ msgstr "1 ÓYµÜµœ"
+@@ -896,9 +998,12 @@
+ 
+ #, c-format
+ msgid "Pattern found in every line: %s"
+-msgstr "p^[ªSÄÌsÅÝÂ©èÜµœ: %s"
++msgstr "p^[ªSÄÌsÅ©Â©èÜµœ: %s"
+ 
+ #, c-format
++msgid "Pattern not found: %s"
++msgstr "p^[Í©Â©èÜ¹ñÅµœ: %s"
++
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+@@ -921,7 +1026,7 @@
+ 
+ #, c-format
+ msgid "Sorry, help file \"%s\" not found"
+-msgstr "cOÅ·ªwvt@C \"%s\" ªÝÂ©èÜ¹ñ"
++msgstr "cOÅ·ªwvt@C \"%s\" ª©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E150: Not a directory: %s"
+@@ -975,7 +1080,7 @@
+ 
+ # Added at 27-Jan-2004.
+ msgid " (NOT FOUND)"
+-msgstr "  (ÝÂ©èÜ¹ñ)"
++msgstr "  (©Â©èÜ¹ñ)"
+ 
+ msgid " (not supported)"
+ msgstr " (ñT|[g)"
+@@ -1000,7 +1105,7 @@
+ 
+ #, c-format
+ msgid "E161: Breakpoint not found: %s"
+-msgstr "E161: u[N|CgªÝÂ©èÜ¹ñ: %s"
++msgstr "E161: u[N|Cgª©Â©èÜ¹ñ: %s"
+ 
+ msgid "No breakpoints defined"
+ msgstr "u[N|Cgªè`³êÄ¢Ü¹ñ"
+@@ -1009,8 +1114,8 @@
+ msgid "%3d  %s %s  line %ld"
+ msgstr "%3d  %s %s  s %ld"
+ 
+-msgid "E750: First use :profile start <fname>"
+-msgstr "E750: ßÉ :profile start <fname> ðÀsµÄ­Ÿ³¢"
++msgid "E750: First use \":profile start {fname}\""
++msgstr "E750: ßÉ \":profile start {fname}\" ðÀsµÄ­Ÿ³¢"
+ 
+ #, c-format
+ msgid "Save changes to \"%s\"?"
+@@ -1049,7 +1154,7 @@
+ 
+ #, c-format
+ msgid "not found in 'runtimepath': \"%s\""
+-msgstr "'runtimepath' ÌÉÍÝÂ©èÜ¹ñ: \"%s\""
++msgstr "'runtimepath' ÌÉÍ©Â©èÜ¹ñ: \"%s\""
+ 
+ msgid "Source Vim script"
+ msgstr "VimXNvgÌæÝ"
+@@ -1202,6 +1307,9 @@
+ msgid "E183: User defined commands must start with an uppercase letter"
+ msgstr "E183: [Uè`R}hÍpå¶ÅnÜçÈ¯êÎÈèÜ¹ñ"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: \\ñŒÈÌÅ, [Uè`R}hÉpÅ«Ü¹ñ"
++
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+ msgstr "E184: »Ì[Uè`R}hÍ èÜ¹ñ: %s"
+@@ -1216,9 +1324,12 @@
+ msgid "E467: Custom completion requires a function argument"
+ msgstr "E467: JX^â®ÉÍøÆµÄÖªKvÅ·"
+ 
++msgid "unknown"
++msgstr "sŸ"
++
+ #, c-format
+-msgid "E185: Cannot find color scheme %s"
+-msgstr "E185: J[XL[ %s ªÝÂ©èÜ¹ñ"
++msgid "E185: Cannot find color scheme '%s'"
++msgstr "E185: J[XL[ '%s' ª©Â©èÜ¹ñ"
+ 
+ msgid "Greetings, Vim user!"
+ msgstr "Vim g¢³ñAâ !"
+@@ -1254,7 +1365,7 @@
+ msgstr "E187: ¢m"
+ 
+ msgid "E465: :winsize requires two number arguments"
+-msgstr "E465: "
++msgstr "E465: :winsize ÉÍ2ÂÌlÌøªKvÅ·"
+ 
+ #, c-format
+ msgid "Window position: X %d, Y %d"
+@@ -1293,11 +1404,14 @@
+ 
+ #. set mark
+ msgid "E191: Argument must be a letter or forward/backward quote"
+-msgstr "E191: øÍ¶©Oi/ãÞNH[gÅµÈ¯êÎ¢¯Ü¹ñ"
++msgstr "E191: øÍ1¶Ìp©øp (' © `) ÅÈ¯êÎ¢¯Ü¹ñ"
+ 
+ msgid "E192: Recursive use of :normal too deep"
+ msgstr "E192: :normal ÌÄApª[­Èèß¬Üµœ"
+ 
++msgid "E809: #< is not available without the +eval feature"
++msgstr "E809: #< Í +eval @\\ª³¢ÆpÅ«Ü¹ñ"
++
+ msgid "E194: No alternate file name to substitute for '#'"
+ msgstr "E194: '#'ðu«·Šét@CÌŒOª èÜ¹ñ"
+ 
+@@ -1313,6 +1427,9 @@
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+ msgstr "E498: \"<sfile>\"ðu«·Šé :source ÎÛt@CŒª èÜ¹ñ"
+ 
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: \"<slnum>\"ðu«·ŠésÔª èÜ¹ñ"
++
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+ msgstr ""
+@@ -1426,7 +1543,7 @@
+ 
+ #. Give up for a multiple ":finally" and ignore it.
+ msgid "E607: multiple :finally"
+-msgstr "E607: ¡Ì :finalyy ª èÜ·"
++msgstr "E607: ¡Ì :finally ª èÜ·"
+ 
+ msgid "E602: :endtry without :try"
+ msgstr "E602: :try ÌÈ¢ :endtry Å·"
+@@ -1437,6 +1554,9 @@
+ msgid "E788: Not allowed to edit another buffer now"
+ msgstr "E788: »ÝÍŒÌobt@ðÒW·é±ÆÍ³êÜ¹ñ"
+ 
++msgid "E811: Not allowed to change buffer information now"
++msgstr "E811: »ÝÍobt@îñðÏX·é±ÆÍ³êÜ¹ñ"
++
+ msgid "tagname"
+ msgstr "^OŒ"
+ 
+@@ -1472,6 +1592,9 @@
+ msgid "E199: Active window or buffer deleted"
+ msgstr "E199: ANeBuÈEBhE©obt@ªí³êÜµœ"
+ 
++msgid "E812: Autocommands changed buffer or buffer name"
++msgstr "E812: autocommandªobt@©obt@ŒðÏXµÜµœ"
++
+ msgid "Illegal file name"
+ msgstr "s³Èt@CŒ"
+ 
+@@ -1530,9 +1653,6 @@
+ msgid "[CR missing]"
+ msgstr "[CR³]"
+ 
+-msgid "[NL found]"
+-msgstr "[NLL]"
+-
+ msgid "[long lines split]"
+ msgstr "[·sª]"
+ 
+@@ -1542,6 +1662,9 @@
+ msgid "[converted]"
+ msgstr "[Ï·Ï]"
+ 
++msgid "[blowfish]"
++msgstr "[blowfishÃ»]"
++
+ msgid "[crypted]"
+ msgstr "[Ã»]"
+ 
+@@ -1557,7 +1680,7 @@
+ msgstr "[ÇG[]"
+ 
+ msgid "Can't find temp file for conversion"
+-msgstr "Ï·ÉKvÈêt@CªÝÂ©èÜ¹ñ"
++msgstr "Ï·ÉKvÈêt@Cª©Â©èÜ¹ñ"
+ 
+ msgid "Conversion with 'charconvert' failed"
+ msgstr "'charconvert' ÉæéÏ·ªžsµÜµœ"
+@@ -1565,6 +1688,9 @@
+ msgid "can't read output of 'charconvert'"
+ msgstr "'charconvert' ÌoÍðÇßÜ¹ñÅµœ"
+ 
++msgid "E821: File is encrypted with unknown method"
++msgstr "E821: t@Cª¢mÌû@ÅÃ»³êÄ¢Ü·"
++
+ msgid "E676: No matching autocommands for acwrite buffer"
+ msgstr "E676: acwriteobt@ÌY·éautocommandÍ¶ÝµÜ¹ñ"
+ 
+@@ -1610,7 +1736,7 @@
+ msgstr "E460: \\[XtH[Nªžíêé©àµêÜ¹ñ (! ðÇÁÅ­§)"
+ 
+ msgid "E214: Can't find temp file for writing"
+-msgstr "E214: Û¶pêt@CªÝÂ©èÜ¹ñ"
++msgstr "E214: Û¶pêt@Cª©Â©èÜ¹ñ"
+ 
+ msgid "E213: Cannot convert (add ! to write without conversion)"
+ msgstr "E213: Ï·Å«Ü¹ñ (! ðÇÁÅÏ·¹žÉÛ¶)"
+@@ -1630,12 +1756,24 @@
+ msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
+ msgstr "E513: ÝG[, Ï·žs (ã·éÉÍ 'fenc' ðóÉµÄ­Ÿ³¢)"
+ 
++#, c-format
++msgid ""
++"E513: write error, conversion failed in line %ld (make 'fenc' empty to "
++"override)"
++msgstr ""
++"E513: ÝG[, Ï·žs, s %ld (ã·éÉÍ 'fenc' ðóÉµÄ­Ÿ³"
++"¢)"
++
+ msgid "E514: write error (file system full?)"
+ msgstr "E514: ÝG[, (t@CVXeªt?)"
+ 
+ msgid " CONVERSION ERROR"
+ msgstr " Ï·G["
+ 
++#, c-format
++msgid " in line %ld;"
++msgstr "s %ld;"
++
+ msgid "[Device]"
+ msgstr "[foCX]"
+ 
+@@ -1702,6 +1840,11 @@
+ msgstr "1 ¶"
+ 
+ #, c-format
++msgid "%lld characters"
++msgstr "%lld ¶"
++
++#. Explicit typecast avoids warning on Mac OS X 10.6
++#, c-format
+ msgid "%ld characters"
+ msgstr "%ld ¶"
+ 
+@@ -1818,7 +1961,7 @@
+ 
+ #, c-format
+ msgid "E680: <buffer=%d>: invalid buffer number "
+-msgstr "E680: <obt@=%d>: ³øÈobt@ÔÅ·"
++msgstr "E680: <obt@=%d>: ³øÈobt@ÔÅ· "
+ 
+ msgid "E217: Can't execute autocommands for ALL events"
+ msgstr "E217: SÄÌCxgÉÎµÄÌautocommandÍÀsÅ«Ü¹ñ"
+@@ -1858,7 +2001,7 @@
+ 
+ #, c-format
+ msgid "+--%3ld lines folded "
+-msgstr "+--%3ld sªÜôÜêÜµœ"
++msgstr "+--%3ld sªÜôÜêÜµœ "
+ 
+ msgid "E222: Add to read buffer"
+ msgstr "E222: Çobt@ÖÇÁ"
+@@ -1883,14 +2026,20 @@
+ msgstr "E227: %s Æ¢€}bsOÍùÉ¶ÝµÜ·"
+ 
+ msgid "No abbreviation found"
+-msgstr "ZküÍÍÝÂ©èÜ¹ñÅµœ"
++msgstr "ZküÍÍ©Â©èÜ¹ñÅµœ"
+ 
+ msgid "No mapping found"
+-msgstr "}bsOÍÝÂ©èÜ¹ñÅµœ"
++msgstr "}bsOÍ©Â©èÜ¹ñÅµœ"
+ 
+ msgid "E228: makemap: Illegal mode"
+ msgstr "E228: makemap: s³È[h"
+ 
++msgid "E851: Failed to create a new process for the GUI"
++msgstr "E851: GUIpÌvZXÌN®ÉžsµÜµœ"
++
++msgid "E852: The child process failed to start the GUI"
++msgstr "E852: qvZXªGUIÌN®ÉžsµÜµœ"
++
+ msgid "E229: Cannot start the GUI"
+ msgstr "E229: GUIðJnÅ«Ü¹ñ"
+ 
+@@ -1915,7 +2064,7 @@
+ msgstr "J[\\ÌÊuÉ}b`Í èÜ¹ñ, ðõµÄ¢Ü·"
+ 
+ msgid "<cannot open> "
+-msgstr "<J¯Ü¹ñ>"
++msgstr "<J¯Ü¹ñ> "
+ 
+ #, c-format
+ msgid "E616: vim_SelFile: can't get font %s"
+@@ -1945,9 +2094,6 @@
+ msgid "E232: Cannot create BalloonEval with both message and callback"
+ msgstr "E232: bZ[WÆR[obNÌ é BalloonEval ðì¬Å«Ü¹ñ"
+ 
+-msgid "Vim dialog..."
+-msgstr "Vim _CAO..."
+-
+ msgid ""
+ "&Yes\n"
+ "&No\n"
+@@ -1990,12 +2136,15 @@
+ msgid "Down"
+ msgstr "º"
+ 
++#. 'Find Next' button
+ msgid "Find Next"
+ msgstr "ðõ"
+ 
++#. 'Replace' button
+ msgid "Replace"
+ msgstr "u·"
+ 
++#. 'Replace All' button
+ msgid "Replace All"
+ msgstr "SÄu·"
+ 
+@@ -2014,12 +2163,6 @@
+ msgid "Vim: Main window unexpectedly destroyed\n"
+ msgstr "Vim: CEBhEªsÓÉjó³êÜµœ\n"
+ 
+-msgid "Font Selection"
+-msgstr "tHgIð"
+-
+-msgid "Used CUT_BUFFER0 instead of empty selection"
+-msgstr "óÌIðÌæÌ©íèÉCUT_BUFFER0ªgp³êÜµœ"
+-
+ msgid "&Filter"
+ msgstr "tB^(&F)"
+ 
+@@ -2057,23 +2200,8 @@
+ msgstr "AhD(&U)"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: ZaptHg '%s' ðÇßÜ¹ñ"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: tHg %s ðgpÅ«Ü¹ñ"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"qvZXÖâ~bZ[WðMÅ·.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+-msgstr "E671: ^Cgª \"%s\" ÌEBhEÍÝÂ©èÜ¹ñ"
++msgstr "E671: ^Cgª \"%s\" ÌEBhEÍ©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+@@ -2251,14 +2379,14 @@
+ msgstr "E456: t@C \"%s\" ðJ¯Ü¹ñ"
+ 
+ msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+-msgstr "E456: PostScriptÌ\\[Xt@C \"prolog.ps\" ªÝÂ©èÜ¹ñ"
++msgstr "E456: PostScriptÌ\\[Xt@C \"prolog.ps\" ª©Â©èÜ¹ñ"
+ 
+ msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+-msgstr "E456: PostScriptÌ\\[Xt@C \"cidfont.ps\" ªÝÂ©èÜ¹ñ"
++msgstr "E456: PostScriptÌ\\[Xt@C \"cidfont.ps\" ª©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E456: Can't find PostScript resource file \"%s.ps\""
+-msgstr "E456: PostScriptÌ\\[Xt@C \"%s.ps\" ªÝÂ©èÜ¹ñ"
++msgstr "E456: PostScriptÌ\\[Xt@C \"%s.ps\" ª©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E620: Unable to convert to print encoding \"%s\""
+@@ -2302,7 +2430,7 @@
+ msgstr "E562: gp@: cstag <ident>"
+ 
+ msgid "E257: cstag: tag not found"
+-msgstr "E257: cstag: ^OªÝÂ©èÜ¹ñ"
++msgstr "E257: cstag: ^Oª©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E563: stat(%s) error: %d"
+@@ -2348,19 +2476,40 @@
+ msgstr "E567: cscopeÚ±ÉžsµÜµœ"
+ 
+ #, c-format
+-msgid "E259: no matches found for cscope query %s of %s"
+-msgstr "E259: cscopeNG[ %s of %s ÉYª èÜ¹ñÅµœ"
+-
+-#, c-format
+ msgid "E469: invalid cscopequickfix flag %c for %c"
+ msgstr "E469: ³øÈ cscopequickfix tO %c Ì %c Å·"
+ 
++#, c-format
++msgid "E259: no matches found for cscope query %s of %s"
++msgstr "E259: cscopeNG[ %s of %s ÉYª èÜ¹ñÅµœ"
++
+ msgid "cscope commands:\n"
+ msgstr "cscopeR}h:\n"
+ 
+ #, c-format
+-msgid "%-5s: %-30s (Usage: %s)"
+-msgstr "%-5s: %-30s (gp@: %s)"
++msgid "%-5s: %s%*s (Usage: %s)"
++msgstr "%-5s: %s%*s (gp@: %s)"
++
++msgid ""
++"\n"
++"       c: Find functions calling this function\n"
++"       d: Find functions called by this function\n"
++"       e: Find this egrep pattern\n"
++"       f: Find this file\n"
++"       g: Find this definition\n"
++"       i: Find files #including this file\n"
++"       s: Find this C symbol\n"
++"       t: Find this text string\n"
++msgstr ""
++"\n"
++"       c: ±ÌÖðÄñÅ¢éÖðT·\n"
++"       d: ±ÌÖ©çÄñÅ¢éÖðT·\n"
++"       e: ±Ìegrepp^[ðT·\n"
++"       f: ±Ìt@CðT·\n"
++"       g: ±Ìè`ðT·\n"
++"       i: ±Ìt@Cð#includeµÄ¢ét@CðT·\n"
++"       s: ±ÌCV{ðT·\n"
++"       t: ±ÌeLXg¶ñðT·\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2372,12 +2521,9 @@
+ msgid "E568: duplicate cscope database not added"
+ msgstr "E568: d¡·écscopef[^x[XÍÇÁ³êÜ¹ñÅµœ"
+ 
+-msgid "E569: maximum number of cscope connections reached"
+-msgstr "E569: cscopeÚ±ÌÅåÉBµÜµœ"
+-
+ #, c-format
+ msgid "E261: cscope connection %s not found"
+-msgstr "E261: cscopeÚ± %s ªÝÂ©èÜ¹ñÅµœ"
++msgstr "E261: cscopeÚ± %s ª©Â©èÜ¹ñÅµœ"
+ 
+ #, c-format
+ msgid "cscope connection %s closed"
+@@ -2414,12 +2560,16 @@
+ msgid " # pid    database name                       prepend path\n"
+ msgstr " # pid    f[^x[XŒ                      prepend pX\n"
+ 
++msgid "Lua library cannot be loaded."
++msgstr "LuaCuð[hÅ«Ü¹ñ."
++
++msgid "cannot save undo information"
++msgstr "AhDîñªÛ¶Å«Ü¹ñ"
++
+ msgid ""
+-"???: Sorry, this command is disabled, the MzScheme library could not be "
++"E815: Sorry, this command is disabled, the MzScheme libraries could not be "
+ "loaded."
+-msgstr ""
+-"???: ±ÌR}hÍ³øÅ·, ²ßñÈ³¢: MzScheme Cuð[hÅ«Ü"
+-"¹ñÅµœ."
++msgstr "E815: ±ÌR}hÍ³øÅ·. MzScheme Cuð[hÅ«Ü¹ñ."
+ 
+ msgid "invalid expression"
+ msgstr "³øÈ®Å·"
+@@ -2439,9 +2589,6 @@
+ msgid "couldn't open buffer"
+ msgstr "obt@ðJ¯Ü¹ñ"
+ 
+-msgid "cannot save undo information"
+-msgstr "AhDîñªÛ¶Å«Ü¹ñ"
+-
+ msgid "cannot delete line"
+ msgstr "sðÁ¹Ü¹ñ"
+ 
+@@ -2454,6 +2601,9 @@
+ msgid "string cannot contain newlines"
+ msgstr "¶ñÉÍüs¶ðÜßçêÜ¹ñ"
+ 
++msgid "error converting Scheme values to Vim"
++msgstr "SchemelÌVimÖÌÏ·G["
++
+ msgid "Vim error: ~a"
+ msgstr "Vim G[: ~a"
+ 
+@@ -2472,6 +2622,25 @@
+ msgid "not allowed in the Vim sandbox"
+ msgstr "Th{bNXÅÍ³êÜ¹ñ"
+ 
++#, c-format
++msgid "E370: Could not load library %s"
++msgstr "E370: Cu %s ð[hÅ«Ü¹ñÅµœ"
++
++msgid "Sorry, this command is disabled: the Perl library could not be loaded."
++msgstr ""
++"±ÌR}hÍ³øÅ·, ²ßñÈ³¢: PerlCuð[hÅ«Ü¹ñÅµœ."
++
++msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
++msgstr ""
++"E299: Th{bNXÅÍ Safe W
+[ðgpµÈ¢PerlXNvgÍÖ¶çê"
++"Ä¢Ü·"
++
++msgid "E836: This Vim cannot execute :python after using :py3"
++msgstr "E836: ±ÌVimÅÍ :py3 ðgÁœãÉ :python ðgŠÜ¹ñ"
++
++msgid "only string keys are allowed"
++msgstr "¶ñÌL[ÌÝªÂ³êÄ¢Ü·"
++
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+ "loaded."
+@@ -2483,60 +2652,29 @@
+ msgid "E659: Cannot invoke Python recursively"
+ msgstr "E659: Python ðÄAIÉÀs·é±ÆÍÅ«Ü¹ñ"
+ 
+-msgid "can't delete OutputObject attributes"
+-msgstr "OutputObject®«ðÁ¹Ü¹ñ"
+-
+-msgid "softspace must be an integer"
+-msgstr "softspace Í integer ÅÈ¯êÎÈèÜ¹ñ"
+-
+-msgid "invalid attribute"
+-msgstr "³øÈ®«Å·"
+-
+-msgid "writelines() requires list of strings"
+-msgstr "writelines() ÉÍ¶ñÌXgªKvÅ·"
+-
+-msgid "E264: Python: Error initialising I/O objects"
+-msgstr "E264: Python: I/OIuWFNgÌú»ÉG[Å·"
+-
+-msgid "attempt to refer to deleted buffer"
+-msgstr "Á³êœobt@ªQÆ³êÜµœ"
+-
+-msgid "line number out of range"
+-msgstr "ÍÍOÌsÔÅ·"
+-
+-#, c-format
+-msgid "<buffer object (deleted) at %8lX>"
+-msgstr "<obt@IuWFNg (ÁÏÝ) %8lX>"
++msgid "E858: Eval did not return a valid python object"
++msgstr "E858: ®]¿ÍLøÈpythonIuWFNgðÔµÜ¹ñÅµœ"
+ 
+-msgid "invalid mark name"
+-msgstr "³øÈ}[NŒÅ·"
++msgid "E859: Failed to convert returned python object to vim value"
++msgstr "E859: Ô³êœpythonIuWFNgðvimÌlÉÏ·Å«Ü¹ñÅµœ"
+ 
+-msgid "no such buffer"
+-msgstr "»Ìæ€Èobt@Í èÜ¹ñ"
++msgid "failed to run the code"
++msgstr "R[hÌÀsÉžsµÜµœ"
+ 
+-msgid "attempt to refer to deleted window"
+-msgstr "Á³êœEBhEªQÆ³êÜµœ"
++msgid "E863: return value must be an instance of str"
++msgstr "E863: ßèlÍ¶ñÌCX^XÅÈ¯êÎÈèÜ¹ñ"
+ 
+-msgid "readonly attribute"
+-msgstr "Çêp®«"
+-
+-msgid "cursor position outside buffer"
+-msgstr "J[\\ªobt@ÌOÉ èÜ·"
++msgid "E837: This Vim cannot execute :py3 after using :python"
++msgstr "E837: ±ÌVimÅÍ :python ðgÁœãÉ :py3 ðgŠÜ¹ñ"
+ 
+-#, c-format
+-msgid "<window object (deleted) at %.8lX>"
+-msgstr "<EBhEIuWFNg (ÁÏ) %.8lX>"
+-
+-#, c-format
+-msgid "<window object (unknown) at %.8lX>"
+-msgstr "<EBhEIuWFNg (¢m) %.8lX>"
++msgid "E860: Eval did not return a valid python 3 object"
++msgstr "E860: ®]¿ÍLøÈpython 3IuWFNgðÔµÜ¹ñÅµœ"
+ 
+-#, c-format
+-msgid "<window %d>"
+-msgstr "<EBhE %d>"
++msgid "E861: Failed to convert returned python 3 object to vim value"
++msgstr "E861: Ô³êœpython 3IuWFNgðvimÌlÉÏ·Å«Ü¹ñÅµœ"
+ 
+-msgid "no such window"
+-msgstr "»Ìæ€ÈEBhEÍ èÜ¹ñ"
++msgid "index must be int or slice"
++msgstr "CfbNXÍ®©XCXÅÈ¯êÎÈèÜ¹ñ"
+ 
+ msgid "E265: $_ must be an instance of String"
+ msgstr "E265: $_ Í¶ñÌCX^XÅÈ¯êÎÈèÜ¹ñ"
+@@ -2594,7 +2732,7 @@
+ msgstr "Ì\\[Xð\\Š·é"
+ 
+ msgid "Find symbol"
+-msgstr "ÝÂ¯œV{"
++msgstr "©Â¯œV{"
+ 
+ msgid "Browse class"
+ msgstr "NXðQÆ"
+@@ -2668,6 +2806,9 @@
+ msgid "cannot set line(s)"
+ msgstr "sðÝèÅ«Ü¹ñ"
+ 
++msgid "invalid mark name"
++msgstr "³øÈ}[NŒÅ·"
++
+ msgid "mark not set"
+ msgstr "}[NÍÝè³êÄ¢Ü¹ñ"
+ 
+@@ -2678,8 +2819,11 @@
+ msgid "cannot insert/append line"
+ msgstr "sÌ}ü/ÇÁðÅ«Ü¹ñ"
+ 
++msgid "line number out of range"
++msgstr "ÍÍOÌsÔÅ·"
++
+ msgid "unknown flag: "
+-msgstr "¢mÌtO:"
++msgstr "¢mÌtO: "
+ 
+ msgid "unknown vimOption"
+ msgstr "¢mÌ vimOption Å·"
+@@ -2709,7 +2853,7 @@
+ 
+ msgid "cannot register callback command: buffer/window reference not found"
+ msgstr ""
+-"R[obNR}hðo^Å«Ü¹ñ: obt@/EBhEÌQÆªÝÂ©èÜ¹"
++"R[obNR}hðo^Å«Ü¹ñ: obt@/EBhEÌQÆª©Â©èÜ¹"
+ "ñ"
+ 
+ msgid ""
+@@ -2718,12 +2862,6 @@
+ "E571: ±ÌR}hÍ³øÅ·,²ßñÈ³¢: TclCuð[hÅ«Ü¹ñÅ"
+ "µœ."
+ 
+-msgid ""
+-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+-msgstr ""
+-"E281: TCL G[: I¹R[hª®lÅÍ èÜ¹ñ!? vim-dev@vim.org Éñµ"
+-"Ä­Ÿ³¢"
+-
+ #, c-format
+ msgid "E572: exit code %d"
+ msgstr "E572: I¹R[h %d"
+@@ -2766,9 +2904,15 @@
+ msgid "%d files to edit\n"
+ msgstr "%d ÂÌt@CªÒWðTŠÄ¢Ü·\n"
+ 
++msgid "netbeans is not supported with this GUI\n"
++msgstr "netbeans Í±ÌGUIÅÍpÅ«Ü¹ñ\n"
++
+ msgid "This Vim was not compiled with the diff feature."
+ msgstr "±ÌVimÉÍdiff@\\ª èÜ¹ñ(RpCÝè)."
+ 
++msgid "'-nb' cannot be used: not enabled at compile time\n"
++msgstr "'-nb' gpsÂ\\Å·: RpCÉ³øÉ³êÄ¢Ü·\n"
++
+ msgid "Attempt to open script file again: \""
+ msgstr "XNvgt@CðÄÑJ¢ÄÝÜ·: \""
+ 
+@@ -2824,7 +2968,7 @@
+ "gp@:"
+ 
+ msgid " vim [arguments] "
+-msgstr " vim [ø]"
++msgstr " vim [ø] "
+ 
+ msgid ""
+ "\n"
+@@ -2873,6 +3017,9 @@
+ msgid "-e\t\t\tEx mode (like \"ex\")"
+ msgstr "-e\t\t\tEx[h (\"ex\" Æ¯¶)"
+ 
++msgid "-E\t\t\tImproved Ex mode"
++msgstr "-E\t\t\tüÇEx[h"
++
+ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+ msgstr "-s\t\t\tTCg(ob`)[h (\"ex\" êp)"
+ 
+@@ -2997,7 +3144,7 @@
+ msgstr "--remote <files>\tÂ\\ÈçÎVimT[oÅ <files> ðÒW·é"
+ 
+ msgid "--remote-silent <files>  Same, don't complain if there is no server"
+-msgstr "--remote-silnet <files>  ¯ã, T[oª³­Äàx¶ðoÍµÈ¢"
++msgstr "--remote-silent <files>  ¯ã, T[oª³­Äàx¶ðoÍµÈ¢"
+ 
+ msgid ""
+ "--remote-wait <files>  As --remote but wait for files to have been edited"
+@@ -3023,7 +3170,10 @@
+ msgstr "--serverlist\t\tVimT[oŒÌêð\\ŠµÄI¹·é"
+ 
+ msgid "--servername <name>\tSend to/become the Vim server <name>"
+-msgstr "--servename <name>\t\tVimT[o <name> ÉM/ŒOÝè·é"
++msgstr "--servername <name>\tVimT[o <name> ÉM/ŒOÝè·é"
++
++msgid "--startuptime <file>\tWrite startup timing messages to <file>"
++msgstr "--startuptime <file>\tN®É©©ÁœÔÌÚ×ð <file> ÖoÍ·é"
+ 
+ msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
+ msgstr "-i <viminfo>\t\t.viminfoÌãíèÉ <viminfo> ðg€"
+@@ -3061,12 +3211,6 @@
+ msgid "-iconic\t\tStart vim iconified"
+ msgstr "-iconic\t\tÅ¬»µœóÔÅvimðN®·é"
+ 
+-msgid "-name <name>\t\tUse resource as if vim was <name>"
+-msgstr "-name <name>\t\tvimÌŒª <name> Å éÆµÄ\\[Xðg€"
+-
+-msgid "\t\t\t  (Unimplemented)\n"
+-msgstr "\t\t\t  (À³êÄ¢È¢)\n"
+-
+ msgid "-background <color>\tUse <color> for the background (also: -bg)"
+ msgstr "-background <color>\twiFÉ <color> ðg€(¯`: -bg)"
+ 
+@@ -3106,19 +3250,6 @@
+ 
+ msgid ""
+ "\n"
+-"Arguments recognised by gvim (RISC OS version):\n"
+-msgstr ""
+-"\n"
+-"gvimÉæÁÄðß³êéø(RISC OSo[W):\n"
+-
+-msgid "--columns <number>\tInitial width of window in columns"
+-msgstr "--columns <number>\túÌEBhEÌRPÊÌ"
+-
+-msgid "--rows <number>\tInitial height of window in rows"
+-msgstr "--rows <number>\túÌEBhEÌsPÊÌ³"
+-
+-msgid ""
+-"\n"
+ "Arguments recognised by gvim (GTK+ version):\n"
+ msgstr ""
+ "\n"
+@@ -3133,6 +3264,9 @@
+ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+ msgstr "--socketid <xid>\tÙÈéGTK widgetÅVimðJ­"
+ 
++msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++msgstr "--echo-wid\t\tEBhEIDðWoÍÉoÍ·é"
++
+ msgid "-P <parent title>\tOpen Vim inside parent application"
+ msgstr "-P <eÌ^Cg>\tVimðeAvP[VÌÅN®·é"
+ 
+@@ -3191,7 +3325,6 @@
+ "\n"
+ "ÏX   s    ñ  eLXg"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+@@ -3200,7 +3333,6 @@
+ "# t@C}[N:\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+@@ -3208,7 +3340,6 @@
+ "\n"
+ "# WvXg (Vµ¢àÌªæ):\n"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+@@ -3217,7 +3348,7 @@
+ "# t@Cà}[NÌð (Vµ¢àÌ©çÃ¢àÌ):\n"
+ 
+ msgid "Missing '>'"
+-msgstr "'>' ªÝÂ©èÜ¹ñ"
++msgstr "'>' ª©Â©èÜ¹ñ"
+ 
+ msgid "E543: Not a valid codepage"
+ msgstr "E543: ³øÈR[hy[WÅ·"
+@@ -3240,15 +3371,6 @@
+ msgid "E289: input method doesn't support my preedit type"
+ msgstr "E289: Cvbg\\bhÍ my preedit type ðT|[gµÜ¹ñ"
+ 
+-msgid "E290: over-the-spot style requires fontset"
+-msgstr "E290: over-the-spot X^CÉÍfontsetªKvÅ·"
+-
+-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
+-msgstr "E291: GTK+ª1.2.3æèàÃ¢ÌÅXe[^XGAª³øÅ·"
+-
+-msgid "E292: Input Method Server is not running"
+-msgstr "E292: Cvbg\\bhT[o ª®ìµÄ¢Ü¹ñ"
+-
+ msgid "E293: block was not locked"
+ msgstr "E293: ubNªbN³êÄ¢Ü¹ñ"
+ 
+@@ -3276,6 +3398,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: ubN 2 ðæŸÅ«Ü¹ñ?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: Xbvt@CÌÃðXVÉG[ª­¶µÜµœ"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: šÁÆ, Xbvt@CªžíêÜµœ!!!"
+@@ -3292,7 +3417,7 @@
+ 
+ #, c-format
+ msgid "E305: No swap file found for %s"
+-msgstr "E305: %s ÉÍXbvt@CªÝÂ©èÜ¹ñ"
++msgstr "E305: %s ÉÍXbvt@Cª©Â©èÜ¹ñ"
+ 
+ msgid "Enter number of swap file to use (0 to quit): "
+ msgstr "gp·éXbvt@CÌÔðüÍµÄ­Ÿ³¢(0 ÅI¹): "
+@@ -3334,6 +3459,12 @@
+ ",\n"
+ "àµ­Ít@Cª¹µÄ¢Ü·."
+ 
++#, c-format
++msgid ""
++"E833: %s is encrypted and this version of Vim does not support encryption"
++msgstr ""
++"E833: %s Í±Ìo[WÌVimÅT|[gµÄ¢È¢`®ÅÃ»³êÄ¢Ü·"
++
+ msgid " has been damaged (page size is smaller than minimum value).\n"
+ msgstr " Í¹µÄ¢Ü· (y[WTCYªÅ¬lðºñÁÄ¢Ü·).\n"
+ 
+@@ -3349,6 +3480,38 @@
+ msgstr "E308: x: Ž{t@CªÏX³êÄ¢Ü·"
+ 
+ #, c-format
++msgid "Swap file is encrypted: \"%s\""
++msgstr "Xbvt@CÍÃ»³êÄ¢Ü·: \"%s\""
++
++msgid ""
++"\n"
++"If you entered a new crypt key but did not write the text file,"
++msgstr ""
++"\n"
++"Vµ¢ÃL[ðüÍµœ ÆÉeLXgt@CðÛ¶µÄ¢È¢êÍ,"
++
++msgid ""
++"\n"
++"enter the new crypt key."
++msgstr ""
++"\n"
++"Vµ¢ÃL[ðüÍµÄ­Ÿ³¢."
++
++msgid ""
++"\n"
++"If you wrote the text file after changing the crypt key press enter"
++msgstr ""
++"\n"
++"ÃL[ðÏŠœ ÆÉeLXgt@CðÛ¶µœêÍ, eLXgt@CÆ"
++
++msgid ""
++"\n"
++"to use the same key for text file and swap file"
++msgstr ""
++"\n"
++"Xbvt@CÉ¯¶ÃL[ðg€œßÉenterŸ¯ðµÄ­Ÿ³¢."
++
++#, c-format
+ msgid "E309: Unable to read block 1 from %s"
+ msgstr "E309: %s ©çubN 1 ðÇßÜ¹ñ"
+ 
+@@ -3372,10 +3535,10 @@
+ msgstr "???ubNª èÜ¹ñ"
+ 
+ msgid "??? from here until ???END lines may be messed up"
+-msgstr "??? ±±©ç???ENDÜÅÌsªjó³êÄ¢éæ€Å·"
++msgstr "??? ±±©ç ???END ÜÅÌsªjó³êÄ¢éæ€Å·"
+ 
+ msgid "??? from here until ???END lines may have been inserted/deleted"
+-msgstr "??? ±±©ç??ENDÜÅÌsª}ü©í³êœæ€Å·"
++msgstr "??? ±±©ç ???END ÜÅÌsª}ü©í³êœæ€Å·"
+ 
+ msgid "???END"
+ msgstr "???END"
+@@ -3401,16 +3564,24 @@
+ "\n"
+ "(ÏXð`FbN·éœßÉ, ±Ìt@CðÊÌŒOÅÛ¶µœãÅ\n"
+ 
+-msgid "and run diff with the original file to check for changes)\n"
+-msgstr "Ž{t@CÆÌ diff ðÀs·éÆÇ¢Åµå€)\n"
++msgid "and run diff with the original file to check for changes)"
++msgstr "Ž{t@CÆÌ diff ðÀs·éÆÇ¢Åµå€)"
++
++msgid "Recovery completed. Buffer contents equals file contents."
++msgstr "³®¹. obt@ÌàeÍt@CÆ¯¶ÉÈèÜµœ."
+ 
+ msgid ""
+-"Delete the .swp file afterwards.\n"
++"\n"
++"You may want to delete the .swp file now.\n"
+ "\n"
+ msgstr ""
++"\n"
+ "»ê©ç.swpt@CðíµÄ­Ÿ³¢\n"
+ "\n"
+ 
++msgid "Using crypt key from swap file for the text file.\n"
++msgstr "Xbvt@C©çæŸµœÃL[ðeLXgt@CÉg¢Ü·.\n"
++
+ #. use msg() to start the scrolling properly
+ msgid "Swap files found:"
+ msgstr "Xbvt@Cª¡©Â©èÜµœ:"
+@@ -3520,7 +3691,7 @@
+ 
+ #, c-format
+ msgid "E316: ml_get: cannot find line %ld"
+-msgstr "E316: ml_get: s %ld ðÝÂ¯çêÜ¹ñ"
++msgstr "E316: ml_get: s %ld ð©Â¯çêÜ¹ñ"
+ 
+ msgid "E317: pointer block id wrong 3"
+ msgstr "E317: |C^ubNÌIDªÔáÁÄ¢Ü· 3"
+@@ -3539,7 +3710,7 @@
+ 
+ #, c-format
+ msgid "E320: Cannot find line %ld"
+-msgstr "E320: s %ld ªÝÂ©èÜ¹ñ"
++msgstr "E320: s %ld ª©Â©èÜ¹ñ"
+ 
+ msgid "E317: pointer block id wrong"
+ msgstr "E317: |C^ubNÌIDªÔáÁÄ¢Ü·"
+@@ -3585,24 +3756,20 @@
+ #. * other languages.
+ msgid ""
+ "\n"
+-"(1) Another program may be editing the same file.\n"
+-"    If this is the case, be careful not to end up with two\n"
+-"    different instances of the same file when making changes.\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
+ msgstr ""
+ "\n"
+ "(1) ÊÌvOª¯¶t@CðÒWµÄ¢é©àµêÜ¹ñ.\n"
+ "    ±ÌêÉÍ, ÏXðµœÛÉÅIIÉ, ¯¶t@CÌÙÈé\n"
+-"    2ÂÌCX^XªÅ«ÄµÜ€±ÆÉÓµÄ­Ÿ³¢.\n"
++"    2ÂÌCX^XªÅ«ÄµÜ€±ÆÉÓµÄ­Ÿ³¢."
+ 
+-msgid "    Quit, or continue with caution.\n"
+-msgstr "    I¹·é©, ÓµÈªç±¯Ü·.\n"
++msgid "  Quit, or continue with caution.\n"
++msgstr "  I¹·é©, ÓµÈªç±¯Ä­Ÿ³¢.\n"
+ 
+-msgid ""
+-"\n"
+-"(2) An edit session for this file crashed.\n"
+-msgstr ""
+-"\n"
+-"(2) ±Ìt@CÌÒWZbVªNbV
+µœ.\n"
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) ±Ìt@CÌÒWZbVªNbV
+µœ.\n"
+ 
+ msgid "    If this is the case, use \":recover\" or \"vim -r "
+ msgstr "    ±ÌêÉÍ \":recover\" © \"vim -r "
+@@ -3612,7 +3779,7 @@
+ "    to recover the changes (see \":help recovery\").\n"
+ msgstr ""
+ "\"\n"
+-"    ðgpµÄÏXðJo[µÜ·(\":help recover\" ðQÆ).\n"
++"    ðgpµÄÏXðJo[µÜ·(\":help recovery\" ðQÆ).\n"
+ 
+ msgid "    If you did this already, delete the swap file \""
+ msgstr "    ùÉ±êðsÈÁœÌÈçÎ, Xbvt@C \""
+@@ -3645,7 +3812,7 @@
+ msgstr ""
+ "ÇêpÅJ­(&O)\n"
+ "ÆÉ©­ÒW·é(&E)\n"
+-"³¹é(&R)ecover\n"
++"³¹é(&R)\n"
+ "I¹·é(&Q)\n"
+ "~·é(&A)"
+ 
+@@ -3659,7 +3826,7 @@
+ msgstr ""
+ "ÇêpÅJ­(&O)\n"
+ "ÆÉ©­ÒW·é(&E)\n"
+-"³¹é(&R)ecover\n"
++"³¹é(&R)\n"
+ "í·é(&D)\n"
+ "I¹·é(&Q)\n"
+ "~·é(&A)"
+@@ -3707,7 +3874,7 @@
+ 
+ #, c-format
+ msgid "E334: Menu not found: %s"
+-msgstr "E334: j
+[ªÝÂ©èÜ¹ñ: %s"
++msgstr "E334: j
+[ª©Â©èÜ¹ñ: %s"
+ 
+ #, c-format
+ msgid "E335: Menu not defined for %s mode"
+@@ -3717,7 +3884,7 @@
+ msgstr "E336: j
+[pXÍTuj
+[ð¶¶È¯êÎ¢¯Ü¹ñ"
+ 
+ msgid "E337: Menu not found - check menu names"
+-msgstr "E337: j
+[ªÝÂ©èÜ¹ñ - j
+[ŒðmFµÄ­Ÿ³¢"
++msgstr "E337: j
+[ª©Â©èÜ¹ñ - j
+[ŒðmFµÄ­Ÿ³¢"
+ 
+ #, c-format
+ msgid "Error detected while processing %s:"
+@@ -3748,7 +3915,7 @@
+ msgstr "-- p± --"
+ 
+ msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+-msgstr " SPACE/d/j: æÊ/y[W/s º, b/uk: ã, q: I¹ "
++msgstr " SPACE/d/j: æÊ/y[W/s º, b/u/k: ã, q: I¹ "
+ 
+ msgid "Question"
+ msgstr "¿â"
+@@ -3789,17 +3956,21 @@
+ msgid "E766: Insufficient arguments for printf()"
+ msgstr "E766: printf() Ìøªs\\ªÅ·"
+ 
++msgid "E807: Expected Float argument for printf()"
++msgstr "E807: printf() ÌøÉÍ®­_ªúÒ³êÄ¢Ü·"
++
+ msgid "E767: Too many arguments to printf()"
+-msgstr "E767: pirntf() Ìøªœß¬Ü·"
++msgstr "E767: printf() Ìøªœß¬Ü·"
+ 
+ msgid "W10: Warning: Changing a readonly file"
+ msgstr "W10: x: Çêpt@CðÏXµÜ·"
+ 
+-msgid "Type number or click with mouse (<Enter> cancels): "
+-msgstr "lðüÍ·é©}EXðNbNµÄ­Ÿ³¢ (<Enter> ÅLZ): "
++msgid "Type number and <Enter> or click with mouse (empty cancels): "
++msgstr ""
++"ÔÆ<Enter>ðüÍ·é©}EXÅNbNµÄ­Ÿ³¢ (óÅLZ): "
+ 
+-msgid "Choice number (<Enter> cancels): "
+-msgstr "ÔðIðµÄ­Ÿ³¢ (<Enter> ÅLZ): "
++msgid "Type number and <Enter> (empty cancels): "
++msgstr "ÔÆ<Enter>ðüÍµÄ­Ÿ³¢ (óÅLZ): "
+ 
+ msgid "1 more line"
+ msgstr "1 s ÇÁµÜµœ"
+@@ -3828,7 +3999,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "Vim: I¹µÜµœ.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "G[: "
+ 
+@@ -3887,6 +4057,9 @@
+ msgid "Keys don't match!"
+ msgstr "L[ªêvµÜ¹ñ"
+ 
++msgid "E854: path too long for completion"
++msgstr "E854: pXª·ß¬Äâ®Å«Ü¹ñ"
++
+ #, c-format
+ msgid ""
+ "E343: Invalid path: '**[number]' must be at the end of the path or be "
+@@ -3911,7 +4084,6 @@
+ msgid "E347: No more file \"%s\" found in path"
+ msgstr "E347: pXÉÍ±êÈã \"%s\" Æ¢€t@Cª èÜ¹ñ"
+ 
+-#. Get here when the server can't be found.
+ msgid "Cannot connect to Netbeans #2"
+ msgstr "Netbeans #2 ÉÚ±Å«Ü¹ñ"
+ 
+@@ -3930,8 +4102,18 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: obt@ %ld Ì NetBeans Ú±ªžíêÜµœ"
+ 
+-msgid "E505: "
+-msgstr "E505: "
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: NetBeansÍ±ÌGUIÉÍÎµÄ¢Ü¹ñ"
++
++msgid "E511: netbeans already connected"
++msgstr "E511: NetBeansÍùÉÚ±µÄ¢Ü·"
++
++#, c-format
++msgid "E505: %s is read-only (add ! to override)"
++msgstr "E505: %s ÍÇêpÅ· (­§ÉÍ ! ðÇÁ)"
++
++msgid "E349: No identifier under cursor"
++msgstr "E349: J[\\ÌÊuÉÍ¯Êqª èÜ¹ñ"
+ 
+ msgid "E774: 'operatorfunc' is empty"
+ msgstr "E774: 'operatorfunc' IvVªóÅ·"
+@@ -3945,9 +4127,6 @@
+ msgid "E348: No string under cursor"
+ msgstr "E348: J[\\ÌÊuÉÍ¶ñª èÜ¹ñ"
+ 
+-msgid "E349: No identifier under cursor"
+-msgstr "E349: J[\\ÌÊuÉÍ¯Êqª èÜ¹ñ"
+-
+ msgid "E352: Cannot erase folds with current 'foldmethod'"
+ msgstr "E352: »ÝÌ 'foldmethod' ÅÍÜôÝðÁÅ«Ü¹ñ"
+ 
+@@ -3984,11 +4163,11 @@
+ msgstr "%ld sªCfg³êÜ·... "
+ 
+ msgid "1 line indented "
+-msgstr "1 sðCfgµÜµœ"
++msgstr "1 sðCfgµÜµœ "
+ 
+ #, c-format
+ msgid "%ld lines indented "
+-msgstr "%ld sðCfgµÜµœ"
++msgstr "%ld sðCfgµÜµœ "
+ 
+ msgid "E748: No previously used register"
+ msgstr "E748: ÜŸWX^ðgpµÄ¢Ü¹ñ"
+@@ -4006,7 +4185,7 @@
+ 
+ #, c-format
+ msgid "freeing %ld lines"
+-msgstr "%ld sðJú"
++msgstr "%ld sððú"
+ 
+ msgid "block of 1 line yanked"
+ msgstr "1 sÌubNªN³êÜµœ"
+@@ -4037,7 +4216,6 @@
+ msgid "Illegal register name"
+ msgstr "s³ÈWX^Œ"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Registers:\n"
+@@ -4055,7 +4233,7 @@
+ 
+ #, c-format
+ msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
+-msgstr "Ið %s%ld / %ld s; %ld / %ld Pê; %ld / %ld ¶"
++msgstr "Ið %s%ld / %ld s; %ld / %ld Pê; %ld / %ld oCg"
+ 
+ #, c-format
+ msgid ""
+@@ -4065,7 +4243,7 @@
+ 
+ #, c-format
+ msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+-msgstr "ñ %s / %s; s %ld of %ld; Pê %ld / %ld; ¶ %ld / %ld"
++msgstr "ñ %s / %s; s %ld of %ld; Pê %ld / %ld; oCg %ld / %ld"
+ 
+ #, c-format
+ msgid ""
+@@ -4093,11 +4271,14 @@
+ msgid "E520: Not allowed in a modeline"
+ msgstr "E520: modeline ÅÍÂ³êÜ¹ñ"
+ 
++msgid "E846: Key code not set"
++msgstr "E846: L[R[hªÝè³êÄ¢Ü¹ñ"
++
+ msgid "E521: Number required after ="
+ msgstr "E521: = ÌãÉÍªKvÅ·"
+ 
+ msgid "E522: Not found in termcap"
+-msgstr "E522: termcap àÉÝÂ©èÜ¹ñ"
++msgstr "E522: termcap àÉ©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E539: Illegal character <%s>"
+@@ -4115,6 +4296,12 @@
+ msgid "E589: 'backupext' and 'patchmode' are equal"
+ msgstr "E589: 'backupext' Æ 'patchmode' ª¯¶Å·"
+ 
++msgid "E834: Conflicts with value of 'listchars'"
++msgstr "E834: 'listchars'ÌlÉµª èÜ·"
++
++msgid "E835: Conflicts with value of 'fillchars'"
++msgstr "E835: 'fillchars'ÌlÉµª èÜ·"
++
+ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+ msgstr "E617: GTK+2 GUIÅÍÏXÅ«Ü¹ñ"
+ 
+@@ -4321,9 +4508,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: '%c' Ís³È¶Å· (tHgŒ \"%s\")"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: ³øÈ 'osfiletype' IvV - \"Text\" ðg¢Ü·"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: 2dÌVOiÌœß, I¹µÜ·\n"
+ 
+@@ -4468,7 +4652,7 @@
+ "External commands will not pause after completion.\n"
+ "See  :help win32-vimrun  for more information."
+ msgstr ""
+-"VIMRUN.EXEª $PATH ÌÉÝÂ©èÜ¹ñ.\n"
++"VIMRUN.EXEª $PATH ÌÉ©Â©èÜ¹ñ.\n"
+ "OR}hÌI¹ãÉêâ~ðµÜ¹ñ.\n"
+ "Ú×Í  :help win32-vimrun  ðQÆµÄ­Ÿ³¢."
+ 
+@@ -4527,6 +4711,9 @@
+ msgid "E382: Cannot write, 'buftype' option is set"
+ msgstr "E382: 'buftype' IvVªÝè³êÄ¢éÌÅÝÜ¹ñ"
+ 
++msgid "Error file"
++msgstr "G[t@C"
++
+ msgid "E683: File name missing or invalid pattern"
+ msgstr "E683: t@CŒª³¢©³øÈp^[Å·"
+ 
+@@ -4700,11 +4887,11 @@
+ 
+ #, c-format
+ msgid "E384: search hit TOP without match for: %s"
+-msgstr "E384: ãÜÅõµœ¯êÇYÓÍ èÜ¹ñ: %s"
++msgstr "E384: ãÜÅõµÜµœªYÓÍ èÜ¹ñ: %s"
+ 
+ #, c-format
+ msgid "E385: search hit BOTTOM without match for: %s"
+-msgstr "E385: ºÜÅõµœ¯êÇYÓÍ èÜ¹ñ: %s"
++msgstr "E385: ºÜÅõµÜµœªYÓÍ èÜ¹ñ: %s"
+ 
+ msgid "E386: Expected '?' or '/'  after ';'"
+ msgstr "E386: ';' Ì ÆÉÍ '?' © '/' ªúÒ³êÄ¢é"
+@@ -4714,10 +4901,10 @@
+ 
+ #. cursor at status line
+ msgid "--- Included files "
+-msgstr "--- CN[h³êœt@C"
++msgstr "--- CN[h³êœt@C "
+ 
+ msgid "not found "
+-msgstr "ÝÂ©èÜ¹ñ "
++msgstr "©Â©èÜ¹ñ "
+ 
+ msgid "in path ---\n"
+ msgstr "pXÉ ----\n"
+@@ -4726,7 +4913,7 @@
+ msgstr "  (ùÉñ)"
+ 
+ msgid "  NOT FOUND"
+-msgstr "  ÝÂ©èÜ¹ñ"
++msgstr "  ©Â©èÜ¹ñ"
+ 
+ #, c-format
+ msgid "Scanning included file: %s"
+@@ -4740,16 +4927,19 @@
+ msgstr "E387: »ÝsÉYª èÜ·"
+ 
+ msgid "All included files were found"
+-msgstr "SÄÌCN[h³êœt@CªÝÂ©èÜµœ"
++msgstr "SÄÌCN[h³êœt@Cª©Â©èÜµœ"
+ 
+ msgid "No included files"
+ msgstr "CN[ht@CÍ èÜ¹ñ"
+ 
+ msgid "E388: Couldn't find definition"
+-msgstr "E388: è`ðÝÂ¯çêÜ¹ñ"
++msgstr "E388: è`ð©Â¯çêÜ¹ñ"
+ 
+ msgid "E389: Couldn't find pattern"
+-msgstr "E389: p^[ðÝÂ¯çêÜ¹ñ"
++msgstr "E389: p^[ð©Â¯çêÜ¹ñ"
++
++msgid "Substitute "
++msgstr "Substitute "
+ 
+ #, c-format
+ msgid ""
+@@ -4789,6 +4979,11 @@
+ msgstr "E756: Xy`FbNÍ³ø»³êÄ¢Ü·"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr ""
++"x: PêXg \"%s_%s.spl\" šæÑ \"%s_ascii.spl\" Í©Â©èÜ¹ñ"
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr ""
+ "x: PêXg \"%s.%s.spl\" šæÑ \"%s.ascii.spl\" Í©Â©èÜ¹ñ"
+@@ -4854,6 +5049,10 @@
+ "±Æª èÜ·"
+ 
+ #, c-format
++msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
++msgstr "COMPOUNDRULES ÌlÉëèª èÜ·. t@C %s Ì %d sÚ: %s"
++
++#, c-format
+ msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
+ msgstr "%s Ì %d sÚÌ COMPOUNDWORDMAX ÌlÉëèª èÜ·: %s"
+ 
+@@ -4918,13 +5117,13 @@
+ msgstr "SYLLABLE ªwè³êÈ¢ COMPOUNDSYLMAX"
+ 
+ msgid "Too many postponed prefixes"
+-msgstr "xãuqªœ·¬Ü·"
++msgstr "xãuqªœß¬Ü·"
+ 
+ msgid "Too many compound flags"
+ msgstr "¡tOªœß¬Ü·"
+ 
+ msgid "Too many postponed prefixes and/or compound flags"
+-msgstr "xãuq Æ/àµ­Í ¡tOªœ·¬Ü·"
++msgstr "xãuq Æ/àµ­Í ¡tOªœß¬Ü·"
+ 
+ #, c-format
+ msgid "Missing SOFO%s line in %s"
+@@ -4960,7 +5159,7 @@
+ 
+ #, c-format
+ msgid "Duplicate word in %s line %d: %s"
+-msgstr "%s Ì %d sÚÅ d¡PêªÝÂ©èÜµœ: %s"
++msgstr "%s Ì %d sÚÅ d¡Pêª©Â©èÜµœ: %s"
+ 
+ #, c-format
+ msgid "First duplicate word in %s line %d: %s"
+@@ -4992,7 +5191,7 @@
+ 
+ #, c-format
+ msgid "Too many regions in %s line %d: %s"
+-msgstr "%s Ì %d sÚ, ÍÍwèªœ·¬Ü·: %s"
++msgstr "%s Ì %d sÚ, ÍÍwèªœß¬Ü·: %s"
+ 
+ #, c-format
+ msgid "/ line ignored in %s line %d: %s"
+@@ -5010,6 +5209,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "ñASCII¶ðÜÞ %d ÂÌPêð³µÜµœ"
+ 
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: ª«èÈ¢ÌÅAPêXgÍs®SÅ·"
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "m[h %d Â(S %d Â) ð³kµÜµœ; cè %d (%d%%)"
+@@ -5097,7 +5299,7 @@
+ 
+ #, c-format
+ msgid "E753: Not found: %s"
+-msgstr "E753: ÝÂ©èÜ¹ñ: %s"
++msgstr "E753: ©Â©èÜ¹ñ: %s"
+ 
+ #, c-format
+ msgid "E778: This does not look like a .sug file: %s"
+@@ -5173,10 +5375,10 @@
+ msgstr "E392: »Ìæ€È\\¶NX^Í èÜ¹ñ: %s"
+ 
+ msgid "minimal "
+-msgstr "minimal"
++msgstr "minimal "
+ 
+ msgid "maximal "
+-msgstr "maximal"
++msgstr "maximal "
+ 
+ msgid "; match "
+ msgstr "; Y "
+@@ -5187,19 +5389,22 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: ±ÌêÅÍøcontainsÍÂ³êÄ¢Ü¹ñ"
+ 
+-msgid "E396: containedin argument not accepted here"
+-msgstr "E396: ±ÌêÅÍøcontainedinÍÂ³êÄ¢Ü¹ñ"
++msgid "E844: invalid cchar value"
++msgstr "E844: ³øÈccharÌlÅ·"
+ 
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: ±±ÅÍO[vÍÂ³êÜ¹ñ"
+ 
+ #, c-format
+ msgid "E394: Didn't find region item for %s"
+-msgstr "E394: %s ÌÍÍvfªÝÂ©èÜ¹ñ"
++msgstr "E394: %s ÌÍÍvfª©Â©èÜ¹ñ"
+ 
+ msgid "E397: Filename required"
+ msgstr "E397: t@CŒªKvÅ·"
+ 
++msgid "E847: Too many syntax includes"
++msgstr "E847: \\¶ÌæèÝ(include)ªœß¬Ü·"
++
+ #, c-format
+ msgid "E789: Missing ']': %s"
+ msgstr "E789: ']' ª èÜ¹ñ: %s"
+@@ -5212,12 +5417,15 @@
+ msgid "E399: Not enough arguments: syntax region %s"
+ msgstr "E399: øª«èÜ¹ñ: \\¶ÍÍ %s"
+ 
++msgid "E848: Too many syntax clusters"
++msgstr "E848: \\¶NX^ªœß¬Ü·"
++
+ msgid "E400: No cluster specified"
+ msgstr "E400: NX^ªwè³êÄ¢Ü¹ñ"
+ 
+ #, c-format
+ msgid "E401: Pattern delimiter not found: %s"
+-msgstr "E401: p^[æØèªÝÂ©èÜ¹ñ: %s"
++msgstr "E401: p^[æØèª©Â©èÜ¹ñ: %s"
+ 
+ #, c-format
+ msgid "E402: Garbage after pattern: %s"
+@@ -5232,7 +5440,7 @@
+ 
+ #, c-format
+ msgid "E405: Missing equal sign: %s"
+-msgstr "E405: µ¢ sign ª èÜ¹ñ: %s"
++msgstr "E405: ª èÜ¹ñ: %s"
+ 
+ #, c-format
+ msgid "E406: Empty argument: %s"
+@@ -5259,7 +5467,7 @@
+ 
+ #, c-format
+ msgid "E411: highlight group not found: %s"
+-msgstr "E411: nCCgO[vªÝÂ©èÜ¹ñ: %s"
++msgstr "E411: nCCgO[vª©Â©èÜ¹ñ: %s"
+ 
+ #, c-format
+ msgid "E412: Not enough arguments: \":highlight link %s\""
+@@ -5274,11 +5482,11 @@
+ 
+ #, c-format
+ msgid "E415: unexpected equal sign: %s"
+-msgstr "E415: \\ú¹Ê¯¶ sign Å·: %s"
++msgstr "E415: \\ú¹ÊÅ·: %s"
+ 
+ #, c-format
+ msgid "E416: missing equal sign: %s"
+-msgstr "E416: ¯¶ sign ª èÜ¹ñ: %s"
++msgstr "E416: ªª èÜ¹ñ: %s"
+ 
+ #, c-format
+ msgid "E417: missing argument: %s"
+@@ -5315,6 +5523,9 @@
+ msgid "W18: Invalid character in group name"
+ msgstr "W18: O[vŒÉs³È¶ª èÜ·"
+ 
++msgid "E849: Too many highlight and syntax groups"
++msgstr "E849: nCCgÆ\\¶O[vªœß¬Ü·"
++
+ msgid "E555: at bottom of tag stack"
+ msgstr "E555: ^OX^bNÌöÅ·"
+ 
+@@ -5326,7 +5537,7 @@
+ 
+ #, c-format
+ msgid "E426: tag not found: %s"
+-msgstr "E426: ^OªÝÂ©èÜ¹ñ: %s"
++msgstr "E426: ^Oª©Â©èÜ¹ñ: %s"
+ 
+ msgid "  # pri kind tag"
+ msgstr "  # pri kind tag"
+@@ -5375,6 +5586,9 @@
+ msgid "E430: Tag file path truncated for %s\n"
+ msgstr "E430: ^Ot@CÌpXª %s ÉØèÌÄçêÜµœ\n"
+ 
++msgid "Ignoring long line in tags file"
++msgstr "^Ot@CàÌ·¢sð³µÜ·"
++
+ #, c-format
+ msgid "E431: Format error in tags file \"%s\""
+ msgstr "E431: ^Ot@C \"%s\" ÌtH[}bgÉG[ª èÜ·"
+@@ -5392,10 +5606,14 @@
+ msgstr "E433: ^Ot@Cª èÜ¹ñ"
+ 
+ msgid "E434: Can't find tag pattern"
+-msgstr "E434: ^Op^[ðÝÂ¯çêÜ¹ñ"
++msgstr "E434: ^Op^[ð©Â¯çêÜ¹ñ"
+ 
+ msgid "E435: Couldn't find tag, just guessing!"
+-msgstr "E435: ^OðÝÂ¯çêÈ¢ÌÅPÉªµÜ·!"
++msgstr "E435: ^Oð©Â¯çêÈ¢ÌÅPÉªµÜ·!"
++
++#, c-format
++msgid "Duplicate field name: %s"
++msgstr "d¡µœtB[hŒ: %s"
+ 
+ msgid "' not known. Available builtin terminals are:"
+ msgstr "' Í¢mÅ·. »sÌgÝÝ[ÍÌÆšèÅ·:"
+@@ -5407,10 +5625,10 @@
+ msgstr "E557: termcapt@CðJ¯Ü¹ñ"
+ 
+ msgid "E558: Terminal entry not found in terminfo"
+-msgstr "E558: terminfoÉ[GgðÝÂ¯çêÜ¹ñ"
++msgstr "E558: terminfoÉ[Ggð©Â¯çêÜ¹ñ"
+ 
+ msgid "E559: Terminal entry not found in termcap"
+-msgstr "E559: termcapÉ[GgðÝÂ¯çêÜ¹ñ"
++msgstr "E559: termcapÉ[Ggð©Â¯çêÜ¹ñ"
+ 
+ #, c-format
+ msgid "E436: No \"%s\" entry in termcap"
+@@ -5433,10 +5651,87 @@
+ msgid "Vim: Error reading input, exiting...\n"
+ msgstr "Vim: üÍðÇÝÌG[ÉæèI¹µÜ·...\n"
+ 
++msgid "Used CUT_BUFFER0 instead of empty selection"
++msgstr "óÌIðÌæÌ©íèÉCUT_BUFFER0ªgp³êÜµœ"
++
++#. This happens when the FileChangedRO autocommand changes the
++#. * file in a way it becomes shorter.
++msgid "E834: Line count changed unexpectedly"
++msgstr "E834: \\ú¹žsJEgªÏíèÜµœ"
++
+ #. must display the prompt
+ msgid "No undo possible; continue anyway"
+ msgstr "Â\\ÈAhDÍ èÜ¹ñ: Æè Šž±¯Ü·"
+ 
++#, c-format
++msgid "E828: Cannot open undo file for writing: %s"
++msgstr "E828: ÝpÉAhDt@CðJ¯Ü¹ñ: %s"
++
++#, c-format
++msgid "E825: Corrupted undo file (%s): %s"
++msgstr "E825: AhDt@CªóêÄ¢Ü· (%s): %s"
++
++msgid "Cannot write undo file in any directory in 'undodir'"
++msgstr "'undodir'ÌfBNgÉAhDt@Cð«ßÜ¹ñ"
++
++#, c-format
++msgid "Will not overwrite with undo file, cannot read: %s"
++msgstr "AhDt@CÆµÄÇÝßÈ¢ÌÅã«µÜ¹ñ: %s"
++
++#, c-format
++msgid "Will not overwrite, this is not an undo file: %s"
++msgstr "AhDt@CÅÍÈ¢ÌÅã«µÜ¹ñ: %s"
++
++msgid "Skipping undo file write, nothing to undo"
++msgstr "ÎÛªÈ¢ÌÅAhDt@CÌ«ÝðXLbvµÜ·"
++
++#, c-format
++msgid "Writing undo file: %s"
++msgstr "AhDt@C«Ý: %s"
++
++#, c-format
++msgid "E829: write error in undo file: %s"
++msgstr "E829: AhDt@CÌ«ÝG[Å·: %s"
++
++#, c-format
++msgid "Not reading undo file, owner differs: %s"
++msgstr "I[i[ªÙÈéÌÅAhDt@CðÇÝÝÜ¹ñ: %s"
++
++#, c-format
++msgid "Reading undo file: %s"
++msgstr "AhDt@CÇ: %s"
++
++#, c-format
++msgid "E822: Cannot open undo file for reading: %s"
++msgstr "E822: AhDt@CðÇpÆµÄJ¯Ü¹ñ: %s"
++
++#, c-format
++msgid "E823: Not an undo file: %s"
++msgstr "E823: AhDt@CÅÍ èÜ¹ñ: %s"
++
++#, c-format
++msgid "E832: Non-encrypted file has encrypted undo file: %s"
++msgstr "E832: ñÃ»t@CªÃ»³êœAhDt@CðgÁÄÜ·: %s"
++
++#, c-format
++msgid "E826: Undo file decryption failed: %s"
++msgstr "E826: Ã»³êœAhDt@CÌðÇÉžsµÜµœ: %s"
++
++#, c-format
++msgid "E827: Undo file is encrypted: %s"
++msgstr "E827: AhDt@CªÃ»³êÄ¢Ü·: %s"
++
++#, c-format
++msgid "E824: Incompatible undo file: %s"
++msgstr "E824: Ý·«Ì³¢AhDt@CÅ·: %s"
++
++msgid "File contents changed, cannot use undo info"
++msgstr "t@CÌàeªÏíÁÄ¢éœßAAhDîñðpÅ«Ü¹ñ"
++
++#, c-format
++msgid "Finished reading undo file %s"
++msgstr "AhDt@C %s Ìæð®¹"
++
+ msgid "Already at oldest change"
+ msgstr "ùÉêÔÃ¢ÏXÅ·"
+ 
+@@ -5444,8 +5739,8 @@
+ msgstr "ùÉêÔVµ¢ÏXÅ·"
+ 
+ #, c-format
+-msgid "Undo number %ld not found"
+-msgstr "AhDÔ %ld ªÝÂ©èÜ¹ñ"
++msgid "E830: Undo number %ld not found"
++msgstr "E830: AhDÔ %ld Í©Â©èÜ¹ñ"
+ 
+ msgid "E438: u_undo: line numbers wrong"
+ msgstr "E438: u_undo: sÔªÔáÁÄ¢Ü·"
+@@ -5481,8 +5776,8 @@
+ msgid "Nothing to undo"
+ msgstr "AhDÎÛª èÜ¹ñ"
+ 
+-msgid "number changes  time"
+-msgstr "Ô   ÏX     "
++msgid "number changes  when               saved"
++msgstr "ÊÔ   ÏX   ÏXú           Û¶Ï"
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+@@ -5527,6 +5822,13 @@
+ 
+ msgid ""
+ "\n"
++"MS-Windows 64-bit console version"
++msgstr ""
++"\n"
++"MS-Windows 64 rbg R\\[ Å"
++
++msgid ""
++"\n"
+ "MS-Windows 32-bit console version"
+ msgstr ""
+ "\n"
+@@ -5576,10 +5878,10 @@
+ 
+ msgid ""
+ "\n"
+-"RISC OS version"
++"OpenVMS version"
+ msgstr ""
+ "\n"
+-"RISC OS Å"
++"OpenVMS Å"
+ 
+ msgid ""
+ "\n"
+@@ -5588,6 +5890,13 @@
+ "\n"
+ "KpÏpb`: "
+ 
++msgid ""
++"\n"
++"Extra patches: "
++msgstr ""
++"\n"
++"ÇÁg£pb`: "
++
+ msgid "Modified by "
+ msgstr "Modified by "
+ 
+@@ -5642,15 +5951,9 @@
+ msgid "with GTK2-GNOME GUI."
+ msgstr "with GTK2-GNOME GUI."
+ 
+-msgid "with GTK-GNOME GUI."
+-msgstr "with GTK-GNOME GUI."
+-
+ msgid "with GTK2 GUI."
+ msgstr "with GTK2 GUI."
+ 
+-msgid "with GTK GUI."
+-msgstr "with GTK GUI."
+-
+ msgid "with X11-Motif GUI."
+ msgstr "with X11-Motif GUI."
+ 
+@@ -5772,7 +6075,7 @@
+ msgstr "[h³ÅÀs, ^Cvµœ¶ª}ü³êÜ·"
+ 
+ msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+-msgstr "j
+[Ì ÒWšSÌÝèš}ü(SÒ)[hØÖ"
++msgstr "j
+[Ì ÒWšSÌÝèš}ü(SÒ)[hØÖ "
+ 
+ msgid "                              for two modes      "
+ msgstr "                              Å[hLÉ       "
+@@ -5819,6 +6122,12 @@
+ msgid "E444: Cannot close last window"
+ msgstr "E444: ÅãÌEBhEðÂ¶é±ÆÍÅ«Ü¹ñ"
+ 
++msgid "E813: Cannot close autocmd window"
++msgstr "E813: autocmdEBhEÍÂ¶çêÜ¹ñ"
++
++msgid "E814: Cannot close window, only autocmd window would remain"
++msgstr "E814: autocmdEBhEµ©cçÈ¢œßAEBhEÍÂ¶çêÜ¹ñ"
++
+ msgid "E445: Other window contains changes"
+ msgstr "E445: ŒÌEBhEÉÍÏXª èÜ·"
+ 
+@@ -5829,19 +6138,6 @@
+ msgid "E447: Can't find file \"%s\" in path"
+ msgstr "E447: pathÉÍ \"%s\" Æ¢€t@Cª èÜ¹ñ"
+ 
+-#, c-format
+-msgid "E370: Could not load library %s"
+-msgstr "E370: Cu %s ð[hÅ«Ü¹ñÅµœ"
+-
+-msgid "Sorry, this command is disabled: the Perl library could not be loaded."
+-msgstr ""
+-"±ÌR}hÍ³øÅ·, ²ßñÈ³¢: PerlCuð[hÅ«Ü¹ñÅµœ."
+-
+-msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
+-msgstr ""
+-"E299: Th{bNXÅÍ Safe W
+[ðgpµÈ¢PerlXNvgÍÖ¶çê"
+-"Ä¢Ü·"
+-
+ msgid "Edit with &multiple Vims"
+ msgstr "¡ÌVimÅÒW·é (&M)"
+ 
+@@ -5849,27 +6145,26 @@
+ msgstr "1ÂÌVimÅÒW·é (&V)"
+ 
+ msgid "Diff with Vim"
+-msgstr "VimÅ·ªð©é"
++msgstr "VimÅ·ªð\\Š·é"
+ 
+ msgid "Edit with &Vim"
+ msgstr "VimÅÒW·é (&V)"
+ 
+ #. Now concatenate
+ msgid "Edit with existing Vim - "
+-msgstr "ù¶ÌVimÅÒW·é - "
++msgstr "N®ÏÌVimÅÒW·é - "
+ 
+ msgid "Edits the selected file(s) with Vim"
+-msgstr "Ið³êœt@CðVimÅÒW·é"
++msgstr "Iðµœt@CðVimÅÒW·é"
+ 
+ msgid "Error creating process: Check if gvim is in your path!"
+-msgstr ""
+-"N®ÉžsµÜµœ: gvim ÖÌpXª³µ­Ýè³êÄ¢é©mFµÄ­Ÿ³¢!"
++msgstr "vZXÌì¬Éžs: gvimªÂ«ÏPATHãÉ é©mFµÄ­Ÿ³¢!"
+ 
+ msgid "gvimext.dll error"
+ msgstr "gvimext.dll G["
+ 
+ msgid "Path length too long!"
+-msgstr "pXª·ß¬Ü·!"
++msgstr "pXª··¬Ü·!"
+ 
+ msgid "--No lines in buffer--"
+ msgstr "--obt@Ésª èÜ¹ñ--"
+@@ -6037,7 +6332,7 @@
+ msgstr "E481: ÍÍwèÍÂ³êÄ¢Ü¹ñ"
+ 
+ msgid "E36: Not enough room"
+-msgstr "E36: [ªÈeÊª èÜ¹ñ"
++msgstr "E36: EBhEÉ\\ªÈ³àµ­Íª èÜ¹ñ"
+ 
+ #, c-format
+ msgid "E247: no registered server named \"%s\""
+@@ -6078,11 +6373,11 @@
+ msgstr "E41: ªs«ÊÄÜµœ!"
+ 
+ msgid "Pattern not found"
+-msgstr "p^[ÍÝÂ©èÜ¹ñÅµœ"
++msgstr "p^[Í©Â©èÜ¹ñÅµœ"
+ 
+ #, c-format
+ msgid "E486: Pattern not found: %s"
+-msgstr "E486: p^[ÍÝÂ©èÜ¹ñÅµœ: %s"
++msgstr "E486: p^[Í©Â©èÜ¹ñÅµœ: %s"
+ 
+ msgid "E487: Argument must be positive"
+ msgstr "E487: øÍ³ÌlÅÈ¯êÎÈèÜ¹ñ"
+@@ -6205,8 +6500,184 @@
+ msgid "E764: Option '%s' is not set"
+ msgstr "E764: IvV '%s' ÍÝè³êÄ¢Ü¹ñ"
+ 
++msgid "E850: Invalid register name"
++msgstr "E850: ³øÈWX^ŒÅ·"
++
+ msgid "search hit TOP, continuing at BOTTOM"
+ msgstr "ãÜÅõµœÌÅºÉßèÜ·"
+ 
+ msgid "search hit BOTTOM, continuing at TOP"
+ msgstr "ºÜÅõµœÌÅãÉßèÜ·"
++
++#, c-format
++msgid "Need encryption key for \"%s\""
++msgstr "ÃL[ªKvÅ·: \"%s\""
++
++msgid "can't delete OutputObject attributes"
++msgstr "OutputObject®«ðÁ¹Ü¹ñ"
++
++msgid "softspace must be an integer"
++msgstr "softspace Í integer ÅÈ¯êÎÈèÜ¹ñ"
++
++msgid "invalid attribute"
++msgstr "³øÈ®«Å·"
++
++msgid "writelines() requires list of strings"
++msgstr "writelines() ÉÍ¶ñÌXgªKvÅ·"
++
++msgid "E264: Python: Error initialising I/O objects"
++msgstr "E264: Python: I/OIuWFNgÌú»G["
++
++msgid "empty keys are not allowed"
++msgstr "óÌL[ÍÂ³êÄ¢Ü¹ñ"
++
++msgid "Cannot delete DictionaryObject attributes"
++msgstr "DictionaryObject®«ðÁ¹Ü¹ñ"
++
++msgid "Cannot modify fixed dictionary"
++msgstr "Åè³êœ«ÍÏXÅ«Ü¹ñ"
++
++msgid "Cannot set this attribute"
++msgstr "±Ì®«ÍÝèÅ«Ü¹ñ"
++
++msgid "dict is locked"
++msgstr "«ÍbN³êÄ¢Ü·"
++
++msgid "failed to add key to dictionary"
++msgstr "«ÖÌL[ÌÇÁÉžsµÜµœ"
++
++msgid "list index out of range"
++msgstr "XgÍÍOÌCfbNXÅ·"
++
++msgid "internal error: failed to get vim list item"
++msgstr "àG[: vimÌXgvfÌæŸÉžsµÜµœ"
++
++msgid "list is locked"
++msgstr "XgÍbN³êÄ¢Ü·"
++
++msgid "Failed to add item to list"
++msgstr "XgÖÌvfÇÁÉžsµÜµœ"
++
++msgid "internal error: no vim list item"
++msgstr "àG[: vimÌXgvfª èÜ¹ñ"
++
++msgid "can only assign lists to slice"
++msgstr "XCXÉÍXgŸ¯ªãüÅ«Ü·"
++
++msgid "internal error: failed to add item to list"
++msgstr "àG[: XgÖÌvfÇÁÉžsµÜµœ"
++
++msgid "can only concatenate with lists"
++msgstr "XgÆÌÝÚ±Å«Ü·"
++
++msgid "cannot delete vim.dictionary attributes"
++msgstr "vim.dictionary®«ÍÁ¹Ü¹ñ"
++
++msgid "cannot modify fixed list"
++msgstr "Åè³êœXgÍÏXÅ«Ü¹ñ"
++
++msgid "cannot set this attribute"
++msgstr "±Ì®«ÍÝèÅ«Ü¹ñ"
++
++msgid "'self' argument must be a dictionary"
++msgstr "'self' øÍ«^ÌlÅÈ¯êÎÈèÜ¹ñ"
++
++msgid "failed to run function"
++msgstr "ÖÌÀsÉžsµÜµœ"
++
++msgid "unable to get option value"
++msgstr "IvVÌlÍæŸÅ«Ü¹ñ"
++
++msgid "unable to unset global option"
++msgstr "O[oIvVÌÝèðÍÅ«Ü¹ñ"
++
++msgid "unable to unset option without global value"
++msgstr "O[oÏðgížÉIvVÌÝèðÍÅ«Ü¹ñ"
++
++msgid "object must be integer"
++msgstr "IuWFNgÍ®ÅÈ¯êÎÈèÜ¹ñ"
++
++msgid "object must be string"
++msgstr "IuWFNgÍ¶ñÅÈ¯êÎÈèÜ¹ñ"
++
++msgid "attempt to refer to deleted tab page"
++msgstr "í³êœ^uðQÆµæ€ÆµÜµœ"
++
++#, c-format
++msgid "<tabpage object (deleted) at %p>"
++msgstr "<^uy[WIuWFNg (ÁÏÝ) %p>"
++
++#, c-format
++msgid "<tabpage object (unknown) at %p>"
++msgstr "<^uy[WIuWFNg (sŸ) %p>"
++
++#, c-format
++msgid "<tabpage %d>"
++msgstr "<^uy[W %d>"
++
++msgid "no such tab page"
++msgstr "»Ìæ€È^uy[WÍ èÜ¹ñ"
++
++msgid "attempt to refer to deleted window"
++msgstr "í³êœEBhEðQÆµæ€ÆµÜµœ"
++
++msgid "readonly attribute"
++msgstr "Çêp®«"
++
++msgid "cursor position outside buffer"
++msgstr "J[\\Êuªobt@ÌO€Å·"
++
++#, c-format
++msgid "<window object (deleted) at %p>"
++msgstr "<EBhEIuWFNg (ÁÏÝ) %p>"
++
++#, c-format
++msgid "<window object (unknown) at %p>"
++msgstr "<EBhEIuWFNg (sŸ) %p>"
++
++#, c-format
++msgid "<window %d>"
++msgstr "<EBhE %d>"
++
++msgid "no such window"
++msgstr "»Ìæ€ÈEBhEÍ èÜ¹ñ"
++
++msgid "attempt to refer to deleted buffer"
++msgstr "í³êœobt@ðQÆµæ€ÆµÜµœ"
++
++#, c-format
++msgid "<buffer object (deleted) at %p>"
++msgstr "<obt@IuWFNg (ÁÏÝ) %p>"
++
++msgid "key must be integer"
++msgstr "L[Í®lÅÈ¯êÎÈèÜ¹ñ"
++
++msgid "expected vim.buffer object"
++msgstr "vim.bufferIuWFNgðúÒµÄ¢Ü·"
++
++msgid "failed to switch to given buffer"
++msgstr "wè³êœobt@ÖÌØèÖŠÉžsµÜµœ"
++
++msgid "expected vim.window object"
++msgstr "vim.windowIuWFNgðúÒµÄ¢Ü·"
++
++msgid "failed to find window in the current tab page"
++msgstr "»ÝÌ^uÉÍwè³êœEBhEª èÜ¹ñÅµœ"
++
++msgid "did not switch to the specified window"
++msgstr "wè³êœEBhEÉØèÖŠÜ¹ñÅµœ"
++
++msgid "expected vim.tabpage object"
++msgstr "vim.tabpageIuWFNgðúÒµÄ¢Ü·"
++
++msgid "did not switch to the specified tab page"
++msgstr "wè³êœ^uy[WÉØèÖŠÜ¹ñÅµœ"
++
++msgid "unable to convert to vim structure"
++msgstr "vimÌ\\¢ÌÉÏ·Å«Ü¹ñ"
++
++msgid "NULL reference passed"
++msgstr "NULLQÆªn³êÜµœ"
++
++msgid "internal error: invalid value type"
++msgstr "àG[: ³øÈl^Å·"
+diff -Naur vim73.orig/src/po/ko.UTF-8.po vim73/src/po/ko.UTF-8.po
+--- vim73.orig/src/po/ko.UTF-8.po	2010-06-08 21:16:08.000000000 +0000
++++ vim73/src/po/ko.UTF-8.po	2013-06-07 17:07:33.995578266 +0000
+@@ -1,12 +1,12 @@
+ # Korean translation for Vim
+ #
+-# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2010
++# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2011
+ #
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: vim 7.2\n"
++"Project-Id-Version: vim 7.3\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2010-02-18 09:43+0900\n"
++"POT-Creation-Date: 2011-02-16 16:18+0900\n"
+ "PO-Revision-Date: 2010-02-18 09:49+0900\n"
+ "Last-Translator: SungHyun Nam <goweol@gmail.com>\n"
+ "Language-Team: GTP Korean <gnome-kr-translation@gnome.or.kr>\n"
+@@ -14,6 +14,27 @@
+ "Content-Type: text/plain; charset=UTF-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ 
++msgid "E831: bf_key_init() called with empty password"
++msgstr "E831: ë¹ ë¹ë°ë²ížë¡ bf_key_init() íšìê° ë¶ë €ì¡ìµëë€"
++
++msgid "E820: sizeof(uint32_t) != 4"
++msgstr "E820: sizeof(uint32_t) != 4"
++
++msgid "E817: Blowfish big/little endian use wrong"
++msgstr "E817: Blowfish big/little endian use wrong"
++
++msgid "E818: sha256 test failed"
++msgstr "E818: sha256 ìíìŽ ì€íšíìµëë€."
++
++msgid "E819: Blowfish test failed"
++msgstr "E819: Blowfish ìíìŽ ì€íšíìµëë€."
++
++msgid "[Location List]"
++msgstr "[ìì¹ ëª©ë¡]"
++
++msgid "[Quickfix List]"
++msgstr "[Quickfix ëª©ë¡]"
++
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: ë²íŒë¥Œ í ë¹í  ì ììŽì ëë
+ëë€..."
+ 
+@@ -147,7 +168,6 @@
+ msgid "Top"
+ msgstr "êŒ­ëêž°"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+@@ -155,12 +175,6 @@
+ "\n"
+ "# ë²íŒ ëª©ë¡:\n"
+ 
+-msgid "[Location List]"
+-msgstr "[ìì¹ ëª©ë¡]"
+-
+-msgid "[Quickfix List]"
+-msgstr "[Quickfix ëª©ë¡]"
+-
+ msgid "[Scratch]"
+ msgstr "[Scratch]"
+ 
+@@ -232,7 +246,7 @@
+ msgstr "E105: ë¶ë¬ë€ìž íìŒìì :loadkeymapì ì¬ì©íì§ ìììµëë€"
+ 
+ msgid "E791: Empty keymap entry"
+-msgstr "E791: í€ë§µ ìížëŠ¬ê° ë¹ìŽììŽ"
++msgstr "E791: í€ë§µ ìížëŠ¬ê° ë¹ìŽìì"
+ 
+ msgid " Keyword completion (^N^P)"
+ msgstr " ë±ë§ ìì± (^N^P)"
+@@ -280,6 +294,12 @@
+ msgid "Hit end of paragraph"
+ msgstr "ëšëœì ë§ì§ë§ ë§ëš"
+ 
++msgid "E839: Completion function changed window"
++msgstr "E839: Completion êž°ë¥ìŽ ì°œì ë°êŸžììµëë€"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: Completion êž°ë¥ìŽ ë¬žììŽì ì§ì ìµëë€"
++
+ msgid "'dictionary' option is empty"
+ msgstr "'dictionary' ìµì
+ìŽ ë¹ììµëë€"
+ 
+@@ -367,7 +387,7 @@
+ 
+ #, c-format
+ msgid "E716: Key not present in Dictionary: %s"
+-msgstr "E716: Dictionaryì í€ê° ììŽ: %s"
++msgstr "E716: Dictionaryì í€ê° ìì: %s"
+ 
+ #, c-format
+ msgid "E122: Function %s already exists, add ! to replace it"
+@@ -585,7 +605,7 @@
+ msgstr "E727: ìììì¹ê° ëì ì§ëì¹š"
+ 
+ msgid "<empty>"
+-msgstr "<ë¹ìŽììŽ>"
++msgstr "<ë¹ìŽìì>"
+ 
+ msgid "E240: No connection to Vim server"
+ msgstr "E240: Vim ìë²ì ì°ê²°ëìŽ ìì§ ììµëë€"
+@@ -730,7 +750,6 @@
+ msgid "E133: :return not inside a function"
+ msgstr "E133: :returnìŽ íšì ìì ìì§ ììµëë€"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# global variables:\n"
+@@ -821,7 +840,6 @@
+ msgid "# This viminfo file was generated by Vim %s.\n"
+ msgstr "# ìŽ viminfo íìŒì ë¹ìŽ ë§ë  ê²ì
+ëë€ Vim %s.\n"
+ 
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+@@ -829,7 +847,6 @@
+ "# ì¡°ì¬ë§ íë€ë©Ž ê³ ì¹  ìë ììµëë€!\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+ msgstr "# ìŽ íìŒìŽ ì ì¥ëìì ëì 'encoding'ì ê°\n"
+ 
+@@ -855,7 +872,7 @@
+ 
+ #, c-format
+ msgid "E768: Swap file exists: %s (:silent! overrides)"
+-msgstr "E768: ì€ì íìŒ ììŽ: %s (ë®ìŽì°ë €ë©Ž :silent! ì¬ì©)"
++msgstr "E768: ì€ì íìŒ ìì: %s (ë®ìŽì°ë €ë©Ž :silent! ì¬ì©)"
+ 
+ #, c-format
+ msgid "E141: No file name for buffer %ld"
+@@ -940,7 +957,6 @@
+ msgid "Pattern found in every line: %s"
+ msgstr "ì¬ë¬ ì€ìì íšíŽì ì°Ÿììµëë€: %s"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+@@ -1049,8 +1065,8 @@
+ msgid "%3d  %s %s  line %ld"
+ msgstr "%3d  %s %s  %ld ì€"
+ 
+-msgid "E750: First use :profile start <fname>"
+-msgstr "E750: ëšŒì  ':profile start <fname>'ì ì¬ì©íìžì"
++msgid "E750: First use \":profile start {fname}\""
++msgstr "E750: ëšŒì  \":profile start {fname}\"ì ì¬ì©íìžì"
+ 
+ #, c-format
+ msgid "Save changes to \"%s\"?"
+@@ -1096,7 +1112,7 @@
+ 
+ #, c-format
+ msgid "Cannot source a directory: \"%s\""
+-msgstr "ëë í ëŠ¬ë sourceí  ì ììŽ: \"%s\""
++msgstr "ëë í ëŠ¬ë sourceí  ì ìì: \"%s\""
+ 
+ #, c-format
+ msgid "could not source \"%s\""
+@@ -1121,11 +1137,11 @@
+ #~ msgid "modeline"
+ #~ msgstr ""
+ 
+-#~ msgid "--cmd argument"
+-#~ msgstr ""
++msgid "--cmd argument"
++msgstr "--cmd ìžì"
+ 
+-#~ msgid "-c argument"
+-#~ msgstr ""
++msgid "-c argument"
++msgstr "-c ìžì"
+ 
+ msgid "environment variable"
+ msgstr "íê²œ ë³ì"
+@@ -1242,6 +1258,9 @@
+ msgid "E183: User defined commands must start with an uppercase letter"
+ msgstr "E183: ì¬ì©ì ì ì ëª
+ë ¹ì ëë¬žìë¡ ììíŽìŒ í©ëë€"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: ììœë ìŽëŠ, ì¬ì©ì ì ì ëª
+ë ¹ìŒë¡ ì¬ì©ë  ì ììµëë€"
++
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+ msgstr "E184: ê·žë° ì¬ì©ì ì ì ëª
+ë ¹ ìì: %s"
+@@ -1256,6 +1275,9 @@
+ msgid "E467: Custom completion requires a function argument"
+ msgstr "E467: ì¬ì©ì ìì±ì íšì ìžìê° íìí©ëë€"
+ 
++msgid "unknown"
++msgstr "ëªšëŠ"
++
+ #, c-format
+ msgid "E185: Cannot find color scheme %s"
+ msgstr "E185: ì ì€íŽ %sì(ë¥Œ) ì°Ÿì ì ììµëë€"
+@@ -1353,6 +1375,9 @@
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+ msgstr "E498: \"<sfile>\"ì ëíŽ ì¹íí  :source íìŒ ìŽëŠìŽ ììµëë€"
+ 
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: \"<slnum>\"ì ì¬ì©ë  ì€ ë²ížê° ììµëë€"
++
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+ msgstr "E499: '%'ë '#'ì ëí ë¹ íìŒ ìŽëŠ, ì€ë¡ì§ \":p:h\"ìë§ ëìí©ëë€"
+@@ -1607,6 +1632,9 @@
+ msgid "can't read output of 'charconvert'"
+ msgstr "'charconvert'ì ì¶ë ¥ê²°ê³Œë¥Œ ìœì ì ììµëë€"
+ 
++msgid "E821: File is encrypted with unknown method"
++msgstr "E821: íìŒìŽ ëªšë¥Žë ë°©ë²ìŒë¡ ìížíëìŽ ììµëë€"
++
+ msgid "E676: No matching autocommands for acwrite buffer"
+ msgstr "E676: acwrite ë²íŒì ëí autocommandë¥Œ ì°Ÿì ì ììµëë€"
+ 
+@@ -1674,9 +1702,7 @@
+ msgid ""
+ "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+ "override)"
+-msgstr ""
+-"E513: ì°êž° ìë¬, %ld ì€ìì ë³í ì€íš (ë¬Žìíë €ë©Ž 'fenc'ë¥Œ ë¹ì°ë©Ž "
+-"ëš)"
++msgstr "E513: ì°êž° ìë¬, %ld ì€ìì ë³í ì€íš (ë¬Žìíë €ë©Ž 'fenc'ë¥Œ ë¹ì°ë©Ž ëš)"
+ 
+ msgid "E514: write error (file system full?)"
+ msgstr "E514: ì°êž° ìë¬ (íìŒ ìì€í
+ìŽ êœì°Œëì?)"
+@@ -1754,6 +1780,11 @@
+ msgstr "1 êžì"
+ 
+ #, c-format
++msgid "%lld characters"
++msgstr "%lld êžì"
++
++#. Explicit typecast avoids warning on Mac OS X 10.6
++#, c-format
+ msgid "%ld characters"
+ msgstr "%ld êžì"
+ 
+@@ -1998,9 +2029,6 @@
+ msgid "E232: Cannot create BalloonEval with both message and callback"
+ msgstr "E232: ë©ìì§ì ìœë°± ëªšëë¥Œ ì¬ì©íŽìë BalloonEvalì ë§ë€ ì ììµëë€"
+ 
+-msgid "Vim dialog..."
+-msgstr "ë¹ ëíìì..."
+-
+ msgid ""
+ "&Yes\n"
+ "&No\n"
+@@ -2043,12 +2071,15 @@
+ msgid "Down"
+ msgstr "ìëë¡"
+ 
++#. 'Find Next' button
+ msgid "Find Next"
+ msgstr "ë€ì ì°Ÿêž°"
+ 
++#. 'Replace' button
+ msgid "Replace"
+ msgstr "ë°êŸžêž°"
+ 
++#. 'Replace All' button
+ msgid "Replace All"
+ msgstr "ëªšë ë°êŸžêž°"
+ 
+@@ -2067,9 +2098,6 @@
+ msgid "Vim: Main window unexpectedly destroyed\n"
+ msgstr "ë¹: ë©ìž ì°œìŽ ì£œê² ë  ê²ì
+ëë€\n"
+ 
+-msgid "Font Selection"
+-msgstr "êžêŒŽ ê³ ë¥Žêž°"
+-
+ msgid "&Filter"
+ msgstr "ê±°ë¥Žê°(&F)"
+ 
+@@ -2107,21 +2135,6 @@
+ msgstr "ì·šì(&U)"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Zap êžêŒŽ '%s'ì(ë¥Œ) ë¡ëí  ì ììµëë€"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: êžêŒŽ %sì(ë¥Œ) ì¬ì©í  ì ììµëë€"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"ìì íë¡ìžì€ë¥Œ ëëŽêž° ìíŽ ë©ìì§ë¥Œ ë³Žëìµëë€.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: ì°œ ì ëª© \"%s\"ì(ë¥Œ) ì°Ÿì ì ììµëë€"
+ 
+@@ -2398,11 +2411,11 @@
+ msgstr "E567: cscope ì°ê²°ìŽ ììµëë€"
+ 
+ #, c-format
+-#~ msgid "E259: no matches found for cscope query %s of %s"
++#~ msgid "E469: invalid cscopequickfix flag %c for %c"
+ #~ msgstr ""
+ 
+ #, c-format
+-#~ msgid "E469: invalid cscopequickfix flag %c for %c"
++#~ msgid "E259: no matches found for cscope query %s of %s"
+ #~ msgstr ""
+ 
+ msgid "cscope commands:\n"
+@@ -2421,7 +2434,7 @@
+ "       g: Find this definition\n"
+ "       i: Find files #including this file\n"
+ "       s: Find this C symbol\n"
+-"       t: Find assignments to\n"
++"       t: Find this text string\n"
+ msgstr ""
+ "\n"
+ "       c: ìŽ íšìë¥Œ ë¶ë¥Žë íšìë€ ì°Ÿêž°\n"
+@@ -2431,7 +2444,7 @@
+ "       g: ìŽ ì ì ì°Ÿêž°\n"
+ "       i: ìŽ íìŒì í¬íšíë íìŒë€ ì°Ÿêž°\n"
+ "       s: ìŽ C ì¬ë³Œ ì°Ÿêž°\n"
+-"       t: Find assignments to\n"
++"       t: ìŽ ë¬žììŽ ì°Ÿêž°\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2482,12 +2495,18 @@
+ msgid " # pid    database name                       prepend path\n"
+ msgstr " # pid    ë°ìŽí°ë² ìŽì€ ìŽëŠ                   prepend path\n"
+ 
++#~ msgid "Lua library cannot be loaded."
++#~ msgstr ""
++
++msgid "cannot save undo information"
++msgstr "undo ì ë³Žë¥Œ ì ì¥í  ì ììµëë€"
++
+ msgid ""
+ "E815: Sorry, this command is disabled, the MzScheme libraries could not be "
+ "loaded."
+ msgstr ""
+-"E815: ë¯žìí©ëë€, ìŽ ëª
+ë ¹ì ì¬ì©í  ì ììµëë€, MzScheme ëŒìŽëžë¬ëŠ¬ë¥Œ ë¡ë©í  ì ì"
+-"ìµëë€."
++"E815: ë¯žìí©ëë€, ìŽ ëª
+ë ¹ì ì¬ì©í  ì ììµëë€, MzScheme ëŒìŽëžë¬ëŠ¬ë¥Œ ë¡ë©í  "
++"ì ììµëë€."
+ 
+ msgid "invalid expression"
+ msgstr "ìëª»ë ííì"
+@@ -2507,9 +2526,6 @@
+ msgid "couldn't open buffer"
+ msgstr "ë²íŒë¥Œ ìŽ ì ìììµëë€"
+ 
+-msgid "cannot save undo information"
+-msgstr "undo ì ë³Žë¥Œ ì ì¥í  ì ììµëë€"
+-
+ msgid "cannot delete line"
+ msgstr "ì€ì ì§ìž ì ììµëë€"
+ 
+@@ -2540,6 +2556,9 @@
+ msgid "not allowed in the Vim sandbox"
+ msgstr "Vim sandboxììë íì©ëì§ ììµëë€"
+ 
++msgid "E836: This Vim cannot execute :python after using :py3"
++msgstr "E836: ìŽ Vimì :py3ì ì¬ì©í íì :pythonì ì¬ì©í  ì ììµëë€"
++
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+ "loaded."
+@@ -2559,51 +2578,12 @@
+ msgid "invalid attribute"
+ msgstr "ìëª»ë ìì±"
+ 
+-msgid "writelines() requires list of strings"
+-msgstr "writelines()ë ë¬žììŽ ëª©ë¡ìŽ íìí©ëë€"
+-
+-msgid "E264: Python: Error initialising I/O objects"
+-msgstr "E264: íìŽì¬: I/O ê°ì²Ž ìŽêž°íì€ ìë¬ê° ìê²Œìµëë€"
+-
+-msgid "attempt to refer to deleted buffer"
+-msgstr "ì§ìì§ ë²íŒë¥Œ ì°žì¡°íë €ê³  íììµëë€"
+-
+-msgid "line number out of range"
+-msgstr "ì€ ë²ížê° ë²ìë¥Œ ë²ìŽë¬ìµëë€"
+-
+ #, c-format
+ msgid "<buffer object (deleted) at %p>"
+ msgstr "<%pì ë²íŒ ê°ì²Ž (ì­ì ëš)>"
+ 
+-msgid "invalid mark name"
+-msgstr "ìëª»ë ë§í¬ ìŽëŠ"
+-
+-msgid "no such buffer"
+-msgstr "ê·žë° ë²íŒë ììµëë€"
+-
+-msgid "attempt to refer to deleted window"
+-msgstr "ì§ìì§ ì°œì ì°žì¡°íë €ê³  íììµëë€"
+-
+-msgid "readonly attribute"
+-msgstr "ìœêž° ì ì© ìì±"
+-
+-msgid "cursor position outside buffer"
+-msgstr "íŒì ìì¹ê° ë²íŒ ë°ì ììµëë€"
+-
+-#, c-format
+-msgid "<window object (deleted) at %p>"
+-msgstr "<%pì ì°œ ê°ì²Ž (ì­ì ëš)>"
+-
+-#, c-format
+-msgid "<window object (unknown) at %p>"
+-msgstr "<%pì ì°œ ê°ì²Ž (ëªšëŠ)>"
+-
+-#, c-format
+-msgid "<window %d>"
+-msgstr "<ì°œ %d>"
+-
+-msgid "no such window"
+-msgstr "ê·žë° ì°œì ììµëë€"
++msgid "E837: This Vim cannot execute :py3 after using :python"
++msgstr "E837: ìŽ Vimì :pythonì ì¬ì©í íì :py3ì ì¬ì©í  ì ììµëë€"
+ 
+ #~ msgid "E265: $_ must be an instance of String"
+ #~ msgstr ""
+@@ -2735,6 +2715,9 @@
+ msgid "cannot set line(s)"
+ msgstr "ì€ì ì€ì í  ì ììµëë€"
+ 
++msgid "invalid mark name"
++msgstr "ìëª»ë ë§í¬ ìŽëŠ"
++
+ msgid "mark not set"
+ msgstr "ë§í¬ê° ì€ì ëì§ ìììµëë€"
+ 
+@@ -2745,6 +2728,9 @@
+ msgid "cannot insert/append line"
+ msgstr "ì€ì ëŒìë£ê±°ë ëí  ì ììµëë€"
+ 
++msgid "line number out of range"
++msgstr "ì€ ë²ížê° ë²ìë¥Œ ë²ìŽë¬ìµëë€"
++
+ msgid "unknown flag: "
+ msgstr "ëªšë¥Žë íëê·ž: "
+ 
+@@ -2829,11 +2815,14 @@
+ msgid "%d files to edit\n"
+ msgstr "%d íìŒì ê³ ì¹êž°\n"
+ 
++msgid "netbeans is not supported with this GUI\n"
++msgstr "ìŽ GUIë netbeansë¥Œ ì§ìíì§ ììµëë€\n"
++
+ msgid "This Vim was not compiled with the diff feature."
+ msgstr "ìŽ ë¹ì diff êž°ë¥ ììŽ ì»ŽíìŒ ëììµëë€."
+ 
+ msgid "'-nb' cannot be used: not enabled at compile time\n"
+-msgstr "'-nb'ë ì¬ì©í  ì ììŽ: ì»ŽíìŒí  ë í¬íšëì§ ìì\n"
++msgstr "'-nb'ë ì¬ì©í  ì ìì: ì»ŽíìŒí  ë í¬íšëì§ ìì\n"
+ 
+ msgid "Attempt to open script file again: \""
+ msgstr "ì€í¬ëŠœíž íìŒì ë€ì ìŽë €ê³  ìë: \""
+@@ -3074,7 +3063,8 @@
+ msgid ""
+ "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+ msgstr ""
+-"--remote-tab[-wait][-silent] <files>  --remoteì ê°ì§ë§ íìŒë³ë¡ í­ íìŽì§ ì¬ì©"
++"--remote-tab[-wait][-silent] <files>  --remoteì ê°ì§ë§ íìŒë³ë¡ í­ íìŽì§ ì¬"
++"ì©"
+ 
+ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
+ msgstr "--remote-send <keys>\të¹ ìë²ë¡ <keys>ë¥Œ ë³ŽëŽê³  ëëŽêž°"
+@@ -3127,12 +3117,6 @@
+ msgid "-iconic\t\tStart vim iconified"
+ msgstr "-iconic\t\tììŽìœ ìíë¡ ë¹ ìì"
+ 
+-msgid "-name <name>\t\tUse resource as if vim was <name>"
+-msgstr "-name <name>\t\të¹ìŽ <name>ìž ê²ì²ëŒ ëŠ¬ìì€ ì¬ì©"
+-
+-msgid "\t\t\t  (Unimplemented)\n"
+-msgstr "\t\t\t  (êµ¬íëì§ ìì)\n"
+-
+ msgid "-background <color>\tUse <color> for the background (also: -bg)"
+ msgstr "-background <color>\të°í ììŒë¡ <color> ì¬ì© (also: -bg)"
+ 
+@@ -3254,7 +3238,6 @@
+ #~ "change line  col text"
+ #~ msgstr ""
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+@@ -3263,7 +3246,6 @@
+ "# íìŒ ë§í¬:\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+@@ -3271,7 +3253,6 @@
+ "\n"
+ "# ì íëª©ë¡ (ìê²ìŽ ëšŒì ):\n"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+@@ -3303,15 +3284,6 @@
+ msgid "E289: input method doesn't support my preedit type"
+ msgstr "E289: ì
+ë ¥ ë°©ììŽ ëŽ preedit íìì ì§ìíì§ ììµëë€"
+ 
+-msgid "E290: over-the-spot style requires fontset"
+-msgstr "E290: over-the-spot íìì fontsetìŽ ì¬ì©ëìŽìŒ í©ëë€"
+-
+-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
+-msgstr "E291: GTK+ê° 1.2.3 ìŽì  íì
+ëë€. ìí ìì­ì ì¬ì©í  ì ììµëë€"
+-
+-msgid "E292: Input Method Server is not running"
+-msgstr "E292: ì
+ë ¥ ìë²ê° ì€íëì§ ìê³  ììµëë€"
+-
+ msgid "E293: block was not locked"
+ msgstr "E293: êµ¬ì­ìŽ ì ê¶ì§ì§ ìììµëë€"
+ 
+@@ -3339,6 +3311,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: êµ¬ì­ ë²íž 2ë¥Œ ì»ì§ ëª»íëì?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: ì€ì íìŒì ìížíí  ì ììµëë€"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: ìŒìœ, ì€ì íìŒì ììŽë²ë žìµëë€!!!"
+@@ -3395,6 +3370,12 @@
+ #~ "or the file has been damaged."
+ #~ msgstr ""
+ 
++#, c-format
++msgid ""
++"E833: %s is encrypted and this version of Vim does not support encryption"
++msgstr ""
++"E833: %sìŽ(ê°) ìížíëìŽ ìë ë°, ìŽ Vimì ìížíë¥Œ ì§ìíì§ ììµëë€"
++
+ #~ msgid " has been damaged (page size is smaller than minimum value).\n"
+ #~ msgstr ""
+ 
+@@ -3410,6 +3391,38 @@
+ msgstr "E308: ê²œê³ : ìë íìŒìŽ ë°ëììµëë€"
+ 
+ #, c-format
++msgid "Swap file is encrypted: \"%s\""
++msgstr "ì€ì íìŒìŽ ìížíëš: \"%s\""
++
++msgid ""
++"\n"
++"If you entered a new crypt key but did not write the text file,"
++msgstr ""
++"\n"
++"ìë¡ìŽ ìíž í€ë¥Œ ì
+ë ¥íë ë°, íìŒì ì ì¥íì§ ìììë€ë©Ž,"
++
++msgid ""
++"\n"
++"enter the new crypt key."
++msgstr ""
++"\n"
++"ìë¡ìŽ ìíž í€ë¥Œ ì
+ë ¥íìžì."
++
++msgid ""
++"\n"
++"If you wrote the text file after changing the crypt key press enter"
++msgstr ""
++"\n"
++"ìíž í€ë¥Œ ë°êŸŒ íì íìŒì ì ì¥íìë€ë©Ž ê°ì í€ë¡ í
+ì€íž íìŒê³Œ"
++
++msgid ""
++"\n"
++"to use the same key for text file and swap file"
++msgstr ""
++"\n"
++"ì€ìíìŒì ì ì¥íë €ë©Ž ìí°ë¥Œ ëë¥Žìžì"
++
++#, c-format
+ msgid "E309: Unable to read block 1 from %s"
+ msgstr "E309: %sì êµ¬ì­ 1ì ìœì ì ììµëë€"
+ 
+@@ -3461,16 +3474,24 @@
+ "\n"
+ "(ìŽì©ë©Ž ë€ë¥ž ìŽëŠìŒë¡ ì ì¥íê³  ì¶ìŒì€ ì§ë ëªšë¥Žê² ìµëë€\n"
+ 
+-msgid "and run diff with the original file to check for changes)\n"
+-msgstr "ê·žëŠ¬ê³  ë°ë ëŽì©ì íìžíë €ë©Ž diffë¥Œ ìŽì©íì­ìì€)\n"
++msgid "and run diff with the original file to check for changes)"
++msgstr "ê·žëŠ¬ê³  ë°ë ëŽì©ì íìžíë €ë©Ž ìë íìŒì ëíŽ diffë¥Œ ì€ííìžì)"
++
++msgid "Recovery completed. Buffer contents equals file contents."
++msgstr "ë³µêµ¬ê° ëë¬ìµëë€. ë²íŒì ëŽì©ìŽ íìŒ ëŽì©ê³Œ ê°ìµëë€."
+ 
+ msgid ""
+-"Delete the .swp file afterwards.\n"
++"\n"
++"You may want to delete the .swp file now.\n"
+ "\n"
+ msgstr ""
+-"ëì€ì .swp íìŒì ì§ì°ì­ìì€.\n"
++"\n"
++"ìŽì  .swp íìŒì ì§ì°ì
+ë ë©ëë€.\n"
+ "\n"
+ 
++msgid "Using crypt key from swap file for the text file.\n"
++msgstr "í
+ì€íž íìŒì ì€ìíìŒìì ê°ì žìš ìíž í€ë¥Œ ì¬ì©í©ëë€.\n"
++
+ #. use msg() to start the scrolling properly
+ msgid "Swap files found:"
+ msgstr "ì€ì íìŒì ì°Ÿìì:"
+@@ -3677,10 +3698,12 @@
+ msgid "    If you did this already, delete the swap file \""
+ msgstr "    ìŽë¯ž ë³µêµ¬íì
+šìë€ë©Ž ì€ìíìŒ \""
+ 
+-#~ msgid ""
+-#~ "\"\n"
+-#~ "    to avoid this message.\n"
+-#~ msgstr ""
++msgid ""
++"\"\n"
++"    to avoid this message.\n"
++msgstr ""
++"\"\n"
++"    ì(ë¥Œ) ì§ì°ì
+ìŒ ìŽ ë©ìì§ê° ì¬ëŒì§ëë€.\n"
+ 
+ msgid "Swap file \""
+ msgstr "ì€ì íìŒ \""
+@@ -3889,7 +3912,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "ë¹: ëë¬ìµëë€.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "ìë¬: "
+ 
+@@ -3985,8 +4007,14 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: ë²íŒ %ldì ëí NetBeans ì°ê²°ì ììŽë²ë žìµëë€"
+ 
+-#~ msgid "E505: "
+-#~ msgstr ""
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: ìŽ GUIë netbeansë¥Œ ì§ìíì§ ììµëë€"
++
++msgid "E511: netbeans already connected"
++msgstr "E511: netbeansê° ìŽë¯ž ì°ê²°ëìŽ ììµëë€"
++
++msgid "E505: "
++msgstr "E505: "
+ 
+ msgid "E349: No identifier under cursor"
+ msgstr "E349: ì»€ì ë°ì ìë³ìê° ììµëë€"
+@@ -4092,7 +4120,6 @@
+ msgid "Illegal register name"
+ msgstr "ìŽìí ë ì§ì€í° ìŽëŠ"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Registers:\n"
+@@ -4117,8 +4144,8 @@
+ "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+ "Bytes"
+ msgstr ""
+-"Selected %s%ld of %ld ëŒìž; %ld of %ld ëšìŽ; %ld of %ld ë¬žì; %ld of %ld "
+-"ë°ìŽíž"
++"Selected %s%ld of %ld ëŒìž; %ld of %ld ëšìŽ; %ld of %ld ë¬žì; %ld of %ld ë°ìŽ"
++"íž"
+ 
+ #, c-format
+ msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+@@ -4129,8 +4156,8 @@
+ "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+ "%ld"
+ msgstr ""
+-"Col %s of %s; ëŒìž %ld of %ld; ëšìŽ %ld of %ld; ë¬žì %ld of %ld; ë°ìŽíž %ld of "
+-"%ld"
++"Col %s of %s; ëŒìž %ld of %ld; ëšìŽ %ld of %ld; ë¬žì %ld of %ld; ë°ìŽíž %ld "
++"of %ld"
+ 
+ #, c-format
+ msgid "(+%ld for BOM)"
+@@ -4173,6 +4200,12 @@
+ msgid "E589: 'backupext' and 'patchmode' are equal"
+ msgstr "E589: 'backupext'ì 'patchmode'ê° ëìŒí©ëë€"
+ 
++msgid "E834: Conflicts with value of 'listchars'"
++msgstr "E834: 'listchars' ê°ê³Œ ì¶©ëìŽ ë°ìí©ëë€"
++
++msgid "E835: Conflicts with value of 'fillchars'"
++msgstr "E835: 'fillchars' ê°ê³Œ ì¶©ëìŽ ë°ìí©ëë€"
++
+ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+ msgstr "E617: GTK+ 2 GUIììë ë°ë ì ììµëë€"
+ 
+@@ -4378,9 +4411,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: ìëª»ë êžì '%c'ìŽ(ê°) êžêŒŽ ìŽëŠ \"%s\"ì ììµëë€"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: ìëª»ë 'osfiletype' ìµì
+ - Textë¥Œ ì¬ì©í©ëë€"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "ë¹: ê°ì ìê·žë ë ë², ëë
+ëë€\n"
+ 
+@@ -4584,6 +4614,9 @@
+ msgid "E382: Cannot write, 'buftype' option is set"
+ msgstr "E382: ìž ì ìì, 'buftype' ìµì
+ìŽ ì€ì ëìŽ ììµëë€"
+ 
++msgid "Error file"
++msgstr "ìë¬ íìŒ"
++
+ msgid "E683: File name missing or invalid pattern"
+ msgstr "E683: íìŒëª
+ ëëœ í¹ì ìëª»ë íšíŽ"
+ 
+@@ -4839,6 +4872,10 @@
+ msgstr "E756: ë§ì¶€ë² ê²ì¬ê° íì±íëìŽ ìì§ ììµëë€"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr "ê²œê³ : ëšìŽ ëª©ë¡ \"%s_%s.spl\" í¹ì \"%s_ascii.spl\"ì ì°Ÿì ì ììµëë€"
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr "ê²œê³ : ëšìŽ ëª©ë¡ \"%s.%s.spl\" í¹ì \"%s.ascii.spl\"ì ì°Ÿì ì ììµëë€"
+ 
+@@ -5062,6 +5099,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "ìì€í€ ë¬žììŽìŽ ìë %dê°ì ëšìŽê° ë¬Žìëììµëë€"
+ 
++#~ msgid "E845: Insufficient memory, word list will be incomplete"
++#~ msgstr ""
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "%d/%d ë
+žëê° ìì¶ëš; %d (%d%%)ê° ëšì"
+@@ -5149,7 +5189,7 @@
+ 
+ #, c-format
+ msgid "E753: Not found: %s"
+-msgstr "E753: ì°Ÿì ì ììŽ: %s"
++msgstr "E753: ì°Ÿì ì ìì: %s"
+ 
+ #, c-format
+ msgid "E778: This does not look like a .sug file: %s"
+@@ -5239,8 +5279,8 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: contains ìžìë ì¬êž°ì ìž ì ììµëë€"
+ 
+-msgid "E396: containedin argument not accepted here"
+-msgstr "E396: containedin ìžìë ì¬êž°ì ìž ì ììµëë€"
++msgid "E844: invalid cchar value"
++msgstr "E844: ìëª»ë cchar ê°"
+ 
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: group[t]hereë ì¬êž°ìì ì¬ì©ë  ì ììµëë€"
+@@ -5452,6 +5492,10 @@
+ msgid "E435: Couldn't find tag, just guessing!"
+ msgstr "E435: íê·žë¥Œ ì°Ÿì ì ìì§ë§ ìŽê±° ê°ìµëë€!"
+ 
++#, c-format
++msgid "Duplicate field name: %s"
++msgstr "ì€ë³µë íë ëª
+: %s"
++
+ msgid "' not known. Available builtin terminals are:"
+ msgstr "' not known. Available builtin terminals are:"
+ 
+@@ -5491,10 +5535,84 @@
+ msgid "Used CUT_BUFFER0 instead of empty selection"
+ msgstr "ë¹ ê³ ë¥Žêž° ëì  CUT_BUFFER0ì ì¬ì©íìµëë€"
+ 
++#. This happens when the FileChangedRO autocommand changes the
++#. * file in a way it becomes shorter.
++msgid "E834: Line count changed unexpectedly"
++msgstr "E834: ì€ ê°¯ìê° ëªšë¥Žë ì¬ìŽì ë°ëììµëë€"
++
+ #. must display the prompt
+ msgid "No undo possible; continue anyway"
+ msgstr "ì·šì ë¶ê°ë¥; ìŽìšë  ê³ìí©ëë€"
+ 
++#, c-format
++msgid "E828: Cannot open undo file for writing: %s"
++msgstr "E828: ì°êž° ìíŽ undoì ìŽ ì ììµëë€: %s"
++
++#, c-format
++msgid "E825: Corrupted undo file (%s): %s"
++msgstr "E825: ê¹šì§ undo íìŒ (%s): %s"
++
++msgid "Cannot write undo file in any directory in 'undodir'"
++msgstr "'undodir'ì ìë ìŽë€ ëë í ëŠ¬ìë undo íìŒì ìž ì ììµëë€"
++
++#, c-format
++msgid "Will not overwrite with undo file, cannot read: %s"
++msgstr "ìœì ìê° ììŽì undo íìŒì ë®ìŽìž ì ììµëë€: %s"
++
++#, c-format
++msgid "Will not overwrite, this is not an undo file: %s"
++msgstr "undo íìŒìŽ ìëìŽì ë®ìŽìž ì ììµëë€: %s"
++
++msgid "Skipping undo file write, nothing to undo"
++msgstr "undoí  ëŽì©ìŽ ììŽì undo íìŒ ì ì¥ì ê±Žëëëë€"
++
++#, c-format
++msgid "Writing undo file: %s"
++msgstr "undo íìŒ ì°ë ì€: %s"
++
++#, c-format
++msgid "E829: write error in undo file: %s"
++msgstr "E829: undo íìŒ ì°êž° ìë¬: %s"
++
++#, c-format
++msgid "Not reading undo file, owner differs: %s"
++msgstr "ìì ìê° ë¬ëŒì undo íìŒì ìœì§ ììµëë€: %s"
++
++#, c-format
++msgid "Reading undo file: %s"
++msgstr "undo íìŒ ìœë ì€: %s"
++
++#, c-format
++msgid "E822: Cannot open undo file for reading: %s"
++msgstr "E822: ìœêž° ìíŽ undo íìŒì ìŽ ì ììµëë€: %s"
++
++#, c-format
++msgid "E823: Not an undo file: %s"
++msgstr "E823: undo íìŒìŽ ìëëë€: %s"
++
++#, c-format
++msgid "E832: Non-encrypted file has encrypted undo file: %s"
++msgstr "E832: ìížíëì§ ìì íìŒìŽ ìížíë undo íìŒì ê°ì§ê³  ììµëë€: %s"
++
++#, c-format
++msgid "E826: Undo file decryption failed: %s"
++msgstr "E826: Undo íìŒì íŽë
+í  ì ììµëë€: %s"
++
++#, c-format
++msgid "E827: Undo file is encrypted: %s"
++msgstr "E827: Undo íìŒìŽ ìížíëììµëë€: %s"
++
++#, c-format
++msgid "E824: Incompatible undo file: %s"
++msgstr "E824: ížíëì§ ìë undo íìŒ: %s"
++
++msgid "File contents changed, cannot use undo info"
++msgstr "íìŒ ëŽì©ìŽ ë°ëìŽì, undo ì ë³Žë¥Œ ì¬ì©í  ì ììµëë€"
++
++#, c-format
++msgid "Finished reading undo file %s"
++msgstr "undo íìŒ %sì(ë¥Œ) ìœìŽë€ììµëë€"
++
+ msgid "Already at oldest change"
+ msgstr "ë ìŽìì ìì ìŽ ìììµëë€"
+ 
+@@ -5502,8 +5620,8 @@
+ msgstr "ë ìŽìì ìì ì ìììµëë€"
+ 
+ #, c-format
+-msgid "Undo number %ld not found"
+-msgstr "ì·šì ë²íž %ldë¥Œ ì°Ÿì ì ììµëë€"
++msgid "E830: Undo number %ld not found"
++msgstr "E830: Undo ë²íž %ldë¥Œ ì°Ÿì ì ììµëë€"
+ 
+ msgid "E438: u_undo: line numbers wrong"
+ msgstr "E438: u_undo: ìëª»ë ì€ ë²íž"
+@@ -5539,8 +5657,8 @@
+ msgid "Nothing to undo"
+ msgstr "ì·šìí  ê² ììµëë€"
+ 
+-msgid "number changes  time"
+-msgstr "number changes  time"
++#~ msgid "number changes  when               saved"
++#~ msgstr ""
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+@@ -5721,15 +5839,9 @@
+ msgid "with GTK2-GNOME GUI."
+ msgstr "GTK2-GNOME GUI."
+ 
+-msgid "with GTK-GNOME GUI."
+-msgstr "GTK-GNOME GUI."
+-
+ msgid "with GTK2 GUI."
+ msgstr "GTK2 GUI."
+ 
+-msgid "with GTK GUI."
+-msgstr "GTK GUI."
+-
+ msgid "with X11-Motif GUI."
+ msgstr "X11-Motif GUI."
+ 
+@@ -5902,7 +6014,7 @@
+ msgstr "E813: autocmd ì°œì ë«ì ì ììµëë€"
+ 
+ msgid "E814: Cannot close window, only autocmd window would remain"
+-msgstr "E814: ì°œì ë«ì ì ììŽ, autocmd ì°œë§ ëšì"
++msgstr "E814: ì°œì ë«ì ì ìì, autocmd ì°œë§ ëšì"
+ 
+ msgid "E445: Other window contains changes"
+ msgstr "E445: ë€ë¥ž ì°œìŽ ë°ëììµëë€"
+@@ -6142,7 +6254,7 @@
+ msgstr "E485: %s íìŒì ìœì ì ììµëë€"
+ 
+ msgid "E37: No write since last change (add ! to override)"
+-msgstr "E37: ë§ì§ë§ìŒë¡ ê³ ì¹ ë€ ì ì¥ëì§ ìììµëë€ (ë®ìŽì°ë €ë©Ž ! ëíêž°)"
++msgstr "E37: ë§ì§ë§ìŒë¡ ê³ ì¹ ë€ ì ì¥ëì§ ìììµëë€ (ë¬Žìíë €ë©Ž ! ëíêž°)"
+ 
+ msgid "E38: Null argument"
+ msgstr "E38: ë ìžì"
+@@ -6177,7 +6289,7 @@
+ msgstr "E42: ìë¬ ìì"
+ 
+ msgid "E776: No location list"
+-msgstr "E776: ìì¹ ëª©ë¡ ììŽ"
++msgstr "E776: ìì¹ ëª©ë¡ ìì"
+ 
+ msgid "E43: Damaged match string"
+ msgstr "E43: ê¹šì§ ë§ë ë¬žììŽ"
+@@ -6194,7 +6306,7 @@
+ 
+ #, c-format
+ msgid "E794: Cannot set variable in the sandbox: \"%s\""
+-msgstr "E794: sandbox ìììë ë³ìë¥Œ ì€ì í  ì ììŽ: \"%s\""
++msgstr "E794: sandbox ìììë ë³ìë¥Œ ì€ì í  ì ìì: \"%s\""
+ 
+ msgid "E47: Error while reading errorfile"
+ msgstr "E47: ìë¬íìŒ ìœë ëì€ì ìë¬"
+@@ -6294,3 +6406,42 @@
+ msgid "search hit BOTTOM, continuing at TOP"
+ msgstr "ëê¹ì§ ì°Ÿìì, ì²ìë¶í° ê³ì"
+ 
++#, c-format
++msgid "Need encryption key for \"%s\""
++msgstr "\"%s\"ì ëí ìíž í€ê° íìí©ëë€"
++
++msgid "writelines() requires list of strings"
++msgstr "writelines()ë ë¬žììŽ ëª©ë¡ìŽ íìí©ëë€"
++
++msgid "E264: Python: Error initialising I/O objects"
++msgstr "E264: íìŽì¬: I/O ê°ì²Ž ìŽêž°íì€ ìë¬ê° ìê²Œìµëë€"
++
++msgid "no such buffer"
++msgstr "ê·žë° ë²íŒë ììµëë€"
++
++msgid "attempt to refer to deleted window"
++msgstr "ì§ìì§ ì°œì ì°žì¡°íë €ê³  íììµëë€"
++
++msgid "readonly attribute"
++msgstr "ìœêž° ì ì© ìì±"
++
++msgid "cursor position outside buffer"
++msgstr "íŒì ìì¹ê° ë²íŒ ë°ì ììµëë€"
++
++#, c-format
++msgid "<window object (deleted) at %p>"
++msgstr "<%pì ì°œ ê°ì²Ž (ì­ì ëš)>"
++
++#, c-format
++msgid "<window object (unknown) at %p>"
++msgstr "<%pì ì°œ ê°ì²Ž (ëªšëŠ)>"
++
++#, c-format
++msgid "<window %d>"
++msgstr "<ì°œ %d>"
++
++msgid "no such window"
++msgstr "ê·žë° ì°œì ììµëë€"
++
++msgid "attempt to refer to deleted buffer"
++msgstr "ì§ìì§ ë²íŒë¥Œ ì°žì¡°íë €ê³  íììµëë€"
+diff -Naur vim73.orig/src/po/ko.po vim73/src/po/ko.po
+--- vim73.orig/src/po/ko.po	2010-06-08 21:16:17.000000000 +0000
++++ vim73/src/po/ko.po	2013-06-07 17:07:34.032244828 +0000
+@@ -1,12 +1,12 @@
+ # Generated from ko.UTF-8.po, DO NOT EDIT
+ #
+-# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2010
++# FIRST AUTHOR SungHyun Nam <goweol@gmail.com>, 2000-2011
+ #
+ msgid ""
+ msgstr ""
+-"Project-Id-Version: vim 7.2\n"
++"Project-Id-Version: vim 7.3\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2010-02-18 09:43+0900\n"
++"POT-Creation-Date: 2011-02-16 16:18+0900\n"
+ "PO-Revision-Date: 2010-02-18 09:49+0900\n"
+ "Last-Translator: SungHyun Nam <goweol@gmail.com>\n"
+ "Language-Team: GTP Korean <gnome-kr-translation@gnome.or.kr>\n"
+@@ -14,6 +14,27 @@
+ "Content-Type: text/plain; charset=euc-kr\n"
+ "Content-Transfer-Encoding: 8bit\n"
+ 
++msgid "E831: bf_key_init() called with empty password"
++msgstr "E831: ºó ºñ¹Ð¹øÈ£·Î bf_key_init() ÇÔŒö°¡ ºÒ·ÁÁ³œÀŽÏŽÙ"
++
++msgid "E820: sizeof(uint32_t) != 4"
++msgstr "E820: sizeof(uint32_t) != 4"
++
++msgid "E817: Blowfish big/little endian use wrong"
++msgstr "E817: Blowfish big/little endian use wrong"
++
++msgid "E818: sha256 test failed"
++msgstr "E818: sha256 œÃÇèÀÌ œÇÆÐÇßœÀŽÏŽÙ."
++
++msgid "E819: Blowfish test failed"
++msgstr "E819: Blowfish œÃÇèÀÌ œÇÆÐÇßœÀŽÏŽÙ."
++
++msgid "[Location List]"
++msgstr "[À§Ä¡ žñ·Ï]"
++
++msgid "[Quickfix List]"
++msgstr "[Quickfix žñ·Ï]"
++
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: ¹öÆÛžŠ ÇÒŽçÇÒ Œö ŸøŸîŒ­ ³¡³ÀŽÏŽÙ..."
+ 
+@@ -147,7 +168,6 @@
+ msgid "Top"
+ msgstr "²ÀŽë±â"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+@@ -155,12 +175,6 @@
+ "\n"
+ "# ¹öÆÛ žñ·Ï:\n"
+ 
+-msgid "[Location List]"
+-msgstr "[À§Ä¡ žñ·Ï]"
+-
+-msgid "[Quickfix List]"
+-msgstr "[Quickfix žñ·Ï]"
+-
+ msgid "[Scratch]"
+ msgstr "[Scratch]"
+ 
+@@ -232,7 +246,7 @@
+ msgstr "E105: ºÒ·¯µéÀÎ ÆÄÀÏ¿¡Œ­ :loadkeymapÀ» »ç¿ëÇÏÁö ŸÊŸÒœÀŽÏŽÙ"
+ 
+ msgid "E791: Empty keymap entry"
+-msgstr "E791: Å°žÊ ¿£Æ®ž®°¡ ºñŸîÀÖœ¿"
++msgstr "E791: Å°žÊ ¿£Æ®ž®°¡ ºñŸîÀÖÀœ"
+ 
+ msgid " Keyword completion (^N^P)"
+ msgstr " ³¹ž» ¿ÏŒº (^N^P)"
+@@ -280,6 +294,12 @@
+ msgid "Hit end of paragraph"
+ msgstr "ŽÜ¶ôÀÇ ž¶Áöž· žž³²"
+ 
++msgid "E839: Completion function changed window"
++msgstr "E839: Completion ±âŽÉÀÌ Ã¢À» ¹Ù²ÙŸúœÀŽÏŽÙ"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: Completion ±âŽÉÀÌ ¹®ÀÚ¿­À» Áö¿üœÀŽÏŽÙ"
++
+ msgid "'dictionary' option is empty"
+ msgstr "'dictionary' ¿ÉŒÇÀÌ ºñŸúœÀŽÏŽÙ"
+ 
+@@ -367,7 +387,7 @@
+ 
+ #, c-format
+ msgid "E716: Key not present in Dictionary: %s"
+-msgstr "E716: Dictionary¿¡ Å°°¡ Ÿøœ¿: %s"
++msgstr "E716: Dictionary¿¡ Å°°¡ ŸøÀœ: %s"
+ 
+ #, c-format
+ msgid "E122: Function %s already exists, add ! to replace it"
+@@ -585,7 +605,7 @@
+ msgstr "E727: œÃÀÛÀ§Ä¡°¡ ³¡À» Áö³ªÄ§"
+ 
+ msgid "<empty>"
+-msgstr "<ºñŸîÀÖœ¿>"
++msgstr "<ºñŸîÀÖÀœ>"
+ 
+ msgid "E240: No connection to Vim server"
+ msgstr "E240: Vim Œ­¹ö¿¡ ¿¬°áµÇŸî ÀÖÁö ŸÊœÀŽÏŽÙ"
+@@ -730,7 +750,6 @@
+ msgid "E133: :return not inside a function"
+ msgstr "E133: :returnÀÌ ÇÔŒö ŸÈ¿¡ ÀÖÁö ŸÊœÀŽÏŽÙ"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# global variables:\n"
+@@ -821,7 +840,6 @@
+ msgid "# This viminfo file was generated by Vim %s.\n"
+ msgstr "# ÀÌ viminfo ÆÄÀÏÀº ºöÀÌ žžµç °ÍÀÔŽÏŽÙ Vim %s.\n"
+ 
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+@@ -829,7 +847,6 @@
+ "# Á¶œÉžž ÇÑŽÙžé °íÄ¥ Œöµµ ÀÖœÀŽÏŽÙ!\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+ msgstr "# ÀÌ ÆÄÀÏÀÌ ÀúÀåµÇŸúÀ» ¶§ÀÇ 'encoding'ÀÇ °ª\n"
+ 
+@@ -855,7 +872,7 @@
+ 
+ #, c-format
+ msgid "E768: Swap file exists: %s (:silent! overrides)"
+-msgstr "E768: œº¿Ò ÆÄÀÏ ÀÖœ¿: %s (µ€ŸîŸ²·Ážé :silent! »ç¿ë)"
++msgstr "E768: œº¿Ò ÆÄÀÏ ÀÖÀœ: %s (µ€ŸîŸ²·Ážé :silent! »ç¿ë)"
+ 
+ #, c-format
+ msgid "E141: No file name for buffer %ld"
+@@ -940,7 +957,6 @@
+ msgid "Pattern found in every line: %s"
+ msgstr "¿©·¯ ÁÙ¿¡Œ­ ÆÐÅÏÀ» Ã£ŸÒœÀŽÏŽÙ: %s"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+@@ -1049,8 +1065,8 @@
+ msgid "%3d  %s %s  line %ld"
+ msgstr "%3d  %s %s  %ld ÁÙ"
+ 
+-msgid "E750: First use :profile start <fname>"
+-msgstr "E750: žÕÀú ':profile start <fname>'À» »ç¿ëÇÏŒŒ¿ä"
++msgid "E750: First use \":profile start {fname}\""
++msgstr "E750: žÕÀú \":profile start {fname}\"À» »ç¿ëÇÏŒŒ¿ä"
+ 
+ #, c-format
+ msgid "Save changes to \"%s\"?"
+@@ -1096,7 +1112,7 @@
+ 
+ #, c-format
+ msgid "Cannot source a directory: \"%s\""
+-msgstr "µð·ºÅäž®ŽÂ sourceÇÒ Œö Ÿøœ¿: \"%s\""
++msgstr "µð·ºÅäž®ŽÂ sourceÇÒ Œö ŸøÀœ: \"%s\""
+ 
+ #, c-format
+ msgid "could not source \"%s\""
+@@ -1121,11 +1137,11 @@
+ #~ msgid "modeline"
+ #~ msgstr ""
+ 
+-#~ msgid "--cmd argument"
+-#~ msgstr ""
++msgid "--cmd argument"
++msgstr "--cmd ÀÎÀÚ"
+ 
+-#~ msgid "-c argument"
+-#~ msgstr ""
++msgid "-c argument"
++msgstr "-c ÀÎÀÚ"
+ 
+ msgid "environment variable"
+ msgstr "È¯°æ º¯Œö"
+@@ -1242,6 +1258,9 @@
+ msgid "E183: User defined commands must start with an uppercase letter"
+ msgstr "E183: »ç¿ëÀÚ Á€ÀÇ ží·ÉÀº Žë¹®ÀÚ·Î œÃÀÛÇØŸß ÇÕŽÏŽÙ"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: ¿¹ŸàµÈ ÀÌž§, »ç¿ëÀÚ Á€ÀÇ ží·ÉÀž·Î »ç¿ëµÉ Œö ŸøœÀŽÏŽÙ"
++
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+ msgstr "E184: ±×·± »ç¿ëÀÚ Á€ÀÇ ží·É ŸøÀœ: %s"
+@@ -1256,6 +1275,9 @@
+ msgid "E467: Custom completion requires a function argument"
+ msgstr "E467: »ç¿ëÀÚ ¿ÏŒºÀº ÇÔŒö ÀÎÀÚ°¡ ÇÊ¿äÇÕŽÏŽÙ"
+ 
++msgid "unknown"
++msgstr "žðž§"
++
+ #, c-format
+ msgid "E185: Cannot find color scheme %s"
+ msgstr "E185: »ö œºÅŽ %sÀ»(žŠ) Ã£À» Œö ŸøœÀŽÏŽÙ"
+@@ -1353,6 +1375,9 @@
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+ msgstr "E498: \"<sfile>\"¿¡ ŽëÇØ Ä¡È¯ÇÒ :source ÆÄÀÏ ÀÌž§ÀÌ ŸøœÀŽÏŽÙ"
+ 
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: \"<slnum>\"¿¡ »ç¿ëµÉ ÁÙ ¹øÈ£°¡ ŸøœÀŽÏŽÙ"
++
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+ msgstr "E499: '%'³ª '#'¿¡ ŽëÇÑ ºó ÆÄÀÏ ÀÌž§, ¿À·ÎÁö \":p:h\"¿Ížž µ¿ÀÛÇÕŽÏŽÙ"
+@@ -1607,6 +1632,9 @@
+ msgid "can't read output of 'charconvert'"
+ msgstr "'charconvert'ÀÇ Ãâ·Â°á°úžŠ ÀÐÀ» Œö ŸøœÀŽÏŽÙ"
+ 
++msgid "E821: File is encrypted with unknown method"
++msgstr "E821: ÆÄÀÏÀÌ žðž£ŽÂ ¹æ¹ýÀž·Î ŸÏÈ£È­µÇŸî ÀÖœÀŽÏŽÙ"
++
+ msgid "E676: No matching autocommands for acwrite buffer"
+ msgstr "E676: acwrite ¹öÆÛ¿¡ ŽëÇÑ autocommandžŠ Ã£À» Œö ŸøœÀŽÏŽÙ"
+ 
+@@ -1674,9 +1702,7 @@
+ msgid ""
+ "E513: write error, conversion failed in line %ld (make 'fenc' empty to "
+ "override)"
+-msgstr ""
+-"E513: Ÿ²±â ¿¡·¯, %ld ÁÙ¿¡Œ­ º¯È¯ œÇÆÐ (¹«œÃÇÏ·Ážé 'fenc'žŠ ºñ¿ìžé "
+-"µÊ)"
++msgstr "E513: Ÿ²±â ¿¡·¯, %ld ÁÙ¿¡Œ­ º¯È¯ œÇÆÐ (¹«œÃÇÏ·Ážé 'fenc'žŠ ºñ¿ìžé µÊ)"
+ 
+ msgid "E514: write error (file system full?)"
+ msgstr "E514: Ÿ²±â ¿¡·¯ (ÆÄÀÏ œÃœºÅÛÀÌ ²ËÃ¡³ª¿ä?)"
+@@ -1754,6 +1780,11 @@
+ msgstr "1 ±ÛÀÚ"
+ 
+ #, c-format
++msgid "%lld characters"
++msgstr "%lld ±ÛÀÚ"
++
++#. Explicit typecast avoids warning on Mac OS X 10.6
++#, c-format
+ msgid "%ld characters"
+ msgstr "%ld ±ÛÀÚ"
+ 
+@@ -1998,9 +2029,6 @@
+ msgid "E232: Cannot create BalloonEval with both message and callback"
+ msgstr "E232: žÞœÃÁö¿Í ÄÝ¹é žðµÎžŠ »ç¿ëÇØŒ­ŽÂ BalloonEvalÀ» žžµé Œö ŸøœÀŽÏŽÙ"
+ 
+-msgid "Vim dialog..."
+-msgstr "ºö ŽëÈ­»óÀÚ..."
+-
+ msgid ""
+ "&Yes\n"
+ "&No\n"
+@@ -2043,12 +2071,15 @@
+ msgid "Down"
+ msgstr "ŸÆ·¡·Î"
+ 
++#. 'Find Next' button
+ msgid "Find Next"
+ msgstr "ŽÙÀœ Ã£±â"
+ 
++#. 'Replace' button
+ msgid "Replace"
+ msgstr "¹Ù²Ù±â"
+ 
++#. 'Replace All' button
+ msgid "Replace All"
+ msgstr "žðµÎ ¹Ù²Ù±â"
+ 
+@@ -2067,9 +2098,6 @@
+ msgid "Vim: Main window unexpectedly destroyed\n"
+ msgstr "ºö: žÞÀÎ Ã¢ÀÌ Á×°Ô µÉ °ÍÀÔŽÏŽÙ\n"
+ 
+-msgid "Font Selection"
+-msgstr "±Û²Ã °íž£±â"
+-
+ msgid "&Filter"
+ msgstr "°Åž£°³(&F)"
+ 
+@@ -2107,21 +2135,6 @@
+ msgstr "ÃëŒÒ(&U)"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Zap ±Û²Ã '%s'À»(žŠ) ·ÎµåÇÒ Œö ŸøœÀŽÏŽÙ"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: ±Û²Ã %sÀ»(žŠ) »ç¿ëÇÒ Œö ŸøœÀŽÏŽÙ"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"ÀÚœÄ ÇÁ·ÎŒŒœºžŠ ³¡³»±â À§ÇØ žÞœÃÁöžŠ ºž³ÂœÀŽÏŽÙ.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Ã¢ ÁŠžñ \"%s\"À»(žŠ) Ã£À» Œö ŸøœÀŽÏŽÙ"
+ 
+@@ -2398,11 +2411,11 @@
+ msgstr "E567: cscope ¿¬°áÀÌ ŸøœÀŽÏŽÙ"
+ 
+ #, c-format
+-#~ msgid "E259: no matches found for cscope query %s of %s"
++#~ msgid "E469: invalid cscopequickfix flag %c for %c"
+ #~ msgstr ""
+ 
+ #, c-format
+-#~ msgid "E469: invalid cscopequickfix flag %c for %c"
++#~ msgid "E259: no matches found for cscope query %s of %s"
+ #~ msgstr ""
+ 
+ msgid "cscope commands:\n"
+@@ -2421,7 +2434,7 @@
+ "       g: Find this definition\n"
+ "       i: Find files #including this file\n"
+ "       s: Find this C symbol\n"
+-"       t: Find assignments to\n"
++"       t: Find this text string\n"
+ msgstr ""
+ "\n"
+ "       c: ÀÌ ÇÔŒöžŠ ºÎž£ŽÂ ÇÔŒöµé Ã£±â\n"
+@@ -2431,7 +2444,7 @@
+ "       g: ÀÌ Á€ÀÇ Ã£±â\n"
+ "       i: ÀÌ ÆÄÀÏÀ» Æ÷ÇÔÇÏŽÂ ÆÄÀÏµé Ã£±â\n"
+ "       s: ÀÌ C œÉºŒ Ã£±â\n"
+-"       t: Find assignments to\n"
++"       t: ÀÌ ¹®ÀÚ¿­ Ã£±â\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2482,12 +2495,18 @@
+ msgid " # pid    database name                       prepend path\n"
+ msgstr " # pid    µ¥ÀÌÅÍº£ÀÌœº ÀÌž§                   prepend path\n"
+ 
++#~ msgid "Lua library cannot be loaded."
++#~ msgstr ""
++
++msgid "cannot save undo information"
++msgstr "undo Á€ºžžŠ ÀúÀåÇÒ Œö ŸøœÀŽÏŽÙ"
++
+ msgid ""
+ "E815: Sorry, this command is disabled, the MzScheme libraries could not be "
+ "loaded."
+ msgstr ""
+-"E815: ¹ÌŸÈÇÕŽÏŽÙ, ÀÌ ží·ÉÀº »ç¿ëÇÒ Œö ŸøœÀŽÏŽÙ, MzScheme ¶óÀÌºê·¯ž®žŠ ·ÎµùÇÒ Œö Ÿø"
+-"œÀŽÏŽÙ."
++"E815: ¹ÌŸÈÇÕŽÏŽÙ, ÀÌ ží·ÉÀº »ç¿ëÇÒ Œö ŸøœÀŽÏŽÙ, MzScheme ¶óÀÌºê·¯ž®žŠ ·ÎµùÇÒ "
++"Œö ŸøœÀŽÏŽÙ."
+ 
+ msgid "invalid expression"
+ msgstr "ÀßžøµÈ Ç¥ÇöœÄ"
+@@ -2507,9 +2526,6 @@
+ msgid "couldn't open buffer"
+ msgstr "¹öÆÛžŠ ¿­ Œö ŸøŸúœÀŽÏŽÙ"
+ 
+-msgid "cannot save undo information"
+-msgstr "undo Á€ºžžŠ ÀúÀåÇÒ Œö ŸøœÀŽÏŽÙ"
+-
+ msgid "cannot delete line"
+ msgstr "ÁÙÀ» Áö¿ï Œö ŸøœÀŽÏŽÙ"
+ 
+@@ -2540,6 +2556,9 @@
+ msgid "not allowed in the Vim sandbox"
+ msgstr "Vim sandbox¿¡Œ­ŽÂ Çã¿ëµÇÁö ŸÊœÀŽÏŽÙ"
+ 
++msgid "E836: This Vim cannot execute :python after using :py3"
++msgstr "E836: ÀÌ VimÀº :py3À» »ç¿ëÇÑ ÈÄ¿¡ :pythonÀ» »ç¿ëÇÒ Œö ŸøœÀŽÏŽÙ"
++
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+ "loaded."
+@@ -2559,51 +2578,12 @@
+ msgid "invalid attribute"
+ msgstr "ÀßžøµÈ ŒÓŒº"
+ 
+-msgid "writelines() requires list of strings"
+-msgstr "writelines()ŽÂ ¹®ÀÚ¿­ žñ·ÏÀÌ ÇÊ¿äÇÕŽÏŽÙ"
+-
+-msgid "E264: Python: Error initialising I/O objects"
+-msgstr "E264: ÆÄÀÌœã: I/O °ŽÃŒ ÃÊ±âÈ­Áß ¿¡·¯°¡ »ý°åœÀŽÏŽÙ"
+-
+-msgid "attempt to refer to deleted buffer"
+-msgstr "Áö¿öÁø ¹öÆÛžŠ ÂüÁ¶ÇÏ·Á°í ÇÏ¿ŽœÀŽÏŽÙ"
+-
+-msgid "line number out of range"
+-msgstr "ÁÙ ¹øÈ£°¡ ¹üÀ§žŠ ¹þŸî³µœÀŽÏŽÙ"
+-
+ #, c-format
+ msgid "<buffer object (deleted) at %p>"
+ msgstr "<%p¿¡ ¹öÆÛ °ŽÃŒ (»èÁŠµÊ)>"
+ 
+-msgid "invalid mark name"
+-msgstr "ÀßžøµÈ ž¶Å© ÀÌž§"
+-
+-msgid "no such buffer"
+-msgstr "±×·± ¹öÆÛŽÂ ŸøœÀŽÏŽÙ"
+-
+-msgid "attempt to refer to deleted window"
+-msgstr "Áö¿öÁø Ã¢À» ÂüÁ¶ÇÏ·Á°í ÇÏ¿ŽœÀŽÏŽÙ"
+-
+-msgid "readonly attribute"
+-msgstr "ÀÐ±â Àü¿ë ŒÓŒº"
+-
+-msgid "cursor position outside buffer"
+-msgstr "ÆÛŒ­ À§Ä¡°¡ ¹öÆÛ ¹Û¿¡ ÀÖœÀŽÏŽÙ"
+-
+-#, c-format
+-msgid "<window object (deleted) at %p>"
+-msgstr "<%p¿¡ Ã¢ °ŽÃŒ (»èÁŠµÊ)>"
+-
+-#, c-format
+-msgid "<window object (unknown) at %p>"
+-msgstr "<%p¿¡ Ã¢ °ŽÃŒ (žðž§)>"
+-
+-#, c-format
+-msgid "<window %d>"
+-msgstr "<Ã¢ %d>"
+-
+-msgid "no such window"
+-msgstr "±×·± Ã¢Àº ŸøœÀŽÏŽÙ"
++msgid "E837: This Vim cannot execute :py3 after using :python"
++msgstr "E837: ÀÌ VimÀº :pythonÀ» »ç¿ëÇÑ ÈÄ¿¡ :py3À» »ç¿ëÇÒ Œö ŸøœÀŽÏŽÙ"
+ 
+ #~ msgid "E265: $_ must be an instance of String"
+ #~ msgstr ""
+@@ -2735,6 +2715,9 @@
+ msgid "cannot set line(s)"
+ msgstr "ÁÙÀ» Œ³Á€ÇÒ Œö ŸøœÀŽÏŽÙ"
+ 
++msgid "invalid mark name"
++msgstr "ÀßžøµÈ ž¶Å© ÀÌž§"
++
+ msgid "mark not set"
+ msgstr "ž¶Å©°¡ Œ³Á€µÇÁö ŸÊŸÒœÀŽÏŽÙ"
+ 
+@@ -2745,6 +2728,9 @@
+ msgid "cannot insert/append line"
+ msgstr "ÁÙÀ» ³¢¿ö³Ö°Å³ª ŽõÇÒ Œö ŸøœÀŽÏŽÙ"
+ 
++msgid "line number out of range"
++msgstr "ÁÙ ¹øÈ£°¡ ¹üÀ§žŠ ¹þŸî³µœÀŽÏŽÙ"
++
+ msgid "unknown flag: "
+ msgstr "žðž£ŽÂ ÇÃ·¡±×: "
+ 
+@@ -2829,11 +2815,14 @@
+ msgid "%d files to edit\n"
+ msgstr "%d ÆÄÀÏÀ» °íÄ¡±â\n"
+ 
++msgid "netbeans is not supported with this GUI\n"
++msgstr "ÀÌ GUIŽÂ netbeansžŠ Áö¿øÇÏÁö ŸÊœÀŽÏŽÙ\n"
++
+ msgid "This Vim was not compiled with the diff feature."
+ msgstr "ÀÌ ºöÀº diff ±âŽÉ ŸøÀÌ ÄÄÆÄÀÏ µÇŸúœÀŽÏŽÙ."
+ 
+ msgid "'-nb' cannot be used: not enabled at compile time\n"
+-msgstr "'-nb'ŽÂ »ç¿ëÇÒ Œö Ÿøœ¿: ÄÄÆÄÀÏÇÒ ¶§ Æ÷ÇÔµÇÁö ŸÊÀœ\n"
++msgstr "'-nb'ŽÂ »ç¿ëÇÒ Œö ŸøÀœ: ÄÄÆÄÀÏÇÒ ¶§ Æ÷ÇÔµÇÁö ŸÊÀœ\n"
+ 
+ msgid "Attempt to open script file again: \""
+ msgstr "œºÅ©ž³Æ® ÆÄÀÏÀ» ŽÙœÃ ¿­·Á°í œÃµµ: \""
+@@ -3074,7 +3063,8 @@
+ msgid ""
+ "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
+ msgstr ""
+-"--remote-tab[-wait][-silent] <files>  --remote¿Í °°Áöžž ÆÄÀÏº°·Î ÅÇ ÆäÀÌÁö »ç¿ë"
++"--remote-tab[-wait][-silent] <files>  --remote¿Í °°Áöžž ÆÄÀÏº°·Î ÅÇ ÆäÀÌÁö »ç"
++"¿ë"
+ 
+ msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
+ msgstr "--remote-send <keys>\tºö Œ­¹ö·Î <keys>žŠ ºž³»°í ³¡³»±â"
+@@ -3127,12 +3117,6 @@
+ msgid "-iconic\t\tStart vim iconified"
+ msgstr "-iconic\t\tŸÆÀÌÄÜ »óÅÂ·Î ºö œÃÀÛ"
+ 
+-msgid "-name <name>\t\tUse resource as if vim was <name>"
+-msgstr "-name <name>\t\tºöÀÌ <name>ÀÎ °ÍÃ³·³ ž®ŒÒœº »ç¿ë"
+-
+-msgid "\t\t\t  (Unimplemented)\n"
+-msgstr "\t\t\t  (±žÇöµÇÁö ŸÊÀœ)\n"
+-
+ msgid "-background <color>\tUse <color> for the background (also: -bg)"
+ msgstr "-background <color>\t¹ÙÅÁ »öÀž·Î <color> »ç¿ë (also: -bg)"
+ 
+@@ -3254,7 +3238,6 @@
+ #~ "change line  col text"
+ #~ msgstr ""
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+@@ -3263,7 +3246,6 @@
+ "# ÆÄÀÏ ž¶Å©:\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+@@ -3271,7 +3253,6 @@
+ "\n"
+ "# Á¡ÇÁžñ·Ï (»õ°ÍÀÌ žÕÀú):\n"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+@@ -3303,15 +3284,6 @@
+ msgid "E289: input method doesn't support my preedit type"
+ msgstr "E289: ÀÔ·Â ¹æœÄÀÌ ³» preedit ÇüœÄÀ» Áö¿øÇÏÁö ŸÊœÀŽÏŽÙ"
+ 
+-msgid "E290: over-the-spot style requires fontset"
+-msgstr "E290: over-the-spot ÇüœÄÀº fontsetÀÌ »ç¿ëµÇŸîŸß ÇÕŽÏŽÙ"
+-
+-msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
+-msgstr "E291: GTK+°¡ 1.2.3 ÀÌÀü ÆÇÀÔŽÏŽÙ. »óÅÂ ¿µ¿ªÀ» »ç¿ëÇÒ Œö ŸøœÀŽÏŽÙ"
+-
+-msgid "E292: Input Method Server is not running"
+-msgstr "E292: ÀÔ·Â Œ­¹ö°¡ œÇÇàµÇÁö ŸÊ°í ÀÖœÀŽÏŽÙ"
+-
+ msgid "E293: block was not locked"
+ msgstr "E293: ±ž¿ªÀÌ Àá±ÅÁöÁö ŸÊŸÒœÀŽÏŽÙ"
+ 
+@@ -3339,6 +3311,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: ±ž¿ª ¹øÈ£ 2žŠ ŸòÁö žøÇß³ª¿ä?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: œº¿Ò ÆÄÀÏÀ» ŸÏÈ£È­ÇÒ Œö ŸøœÀŽÏŽÙ"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: ÀžÀ¹, œº¿Ò ÆÄÀÏÀ» ÀÒŸî¹ö·ÈœÀŽÏŽÙ!!!"
+@@ -3395,6 +3370,12 @@
+ #~ "or the file has been damaged."
+ #~ msgstr ""
+ 
++#, c-format
++msgid ""
++"E833: %s is encrypted and this version of Vim does not support encryption"
++msgstr ""
++"E833: %sÀÌ(°¡) ŸÏÈ£È­µÇŸî ÀÖŽÂ µ¥, ÀÌ VimÀº ŸÏÈ£È­žŠ Áö¿øÇÏÁö ŸÊœÀŽÏŽÙ"
++
+ #~ msgid " has been damaged (page size is smaller than minimum value).\n"
+ #~ msgstr ""
+ 
+@@ -3410,6 +3391,38 @@
+ msgstr "E308: °æ°í: ¿ø·¡ ÆÄÀÏÀÌ ¹Ù²îŸúœÀŽÏŽÙ"
+ 
+ #, c-format
++msgid "Swap file is encrypted: \"%s\""
++msgstr "œº¿Ò ÆÄÀÏÀÌ ŸÏÈ£È­µÊ: \"%s\""
++
++msgid ""
++"\n"
++"If you entered a new crypt key but did not write the text file,"
++msgstr ""
++"\n"
++"»õ·Î¿î ŸÏÈ£ Å°žŠ ÀÔ·ÂÇßŽÂ µ¥, ÆÄÀÏÀ» ÀúÀåÇÏÁö ŸÊŸÒŸúŽÙžé,"
++
++msgid ""
++"\n"
++"enter the new crypt key."
++msgstr ""
++"\n"
++"»õ·Î¿î ŸÏÈ£ Å°žŠ ÀÔ·ÂÇÏŒŒ¿ä."
++
++msgid ""
++"\n"
++"If you wrote the text file after changing the crypt key press enter"
++msgstr ""
++"\n"
++"ŸÏÈ£ Å°žŠ ¹Ù²Û ÈÄ¿¡ ÆÄÀÏÀ» ÀúÀåÇßŸúŽÙžé °°Àº Å°·Î ÅØœºÆ® ÆÄÀÏ°ú"
++
++msgid ""
++"\n"
++"to use the same key for text file and swap file"
++msgstr ""
++"\n"
++"œº¿ÒÆÄÀÏÀ» ÀúÀåÇÏ·Ážé ¿£ÅÍžŠ Ž©ž£ŒŒ¿ä"
++
++#, c-format
+ msgid "E309: Unable to read block 1 from %s"
+ msgstr "E309: %sÀÇ ±ž¿ª 1À» ÀÐÀ» Œö ŸøœÀŽÏŽÙ"
+ 
+@@ -3461,16 +3474,24 @@
+ "\n"
+ "(ŸîÂŒžé ŽÙž¥ ÀÌž§Àž·Î ÀúÀåÇÏ°í œÍÀžœÇ Áöµµ žðž£°ÚœÀŽÏŽÙ\n"
+ 
+-msgid "and run diff with the original file to check for changes)\n"
+-msgstr "±×ž®°í ¹Ù²ï ³»¿ëÀ» È®ÀÎÇÏ·Ážé diffžŠ ÀÌ¿ëÇÏœÊœÃ¿À)\n"
++msgid "and run diff with the original file to check for changes)"
++msgstr "±×ž®°í ¹Ù²ï ³»¿ëÀ» È®ÀÎÇÏ·Ážé ¿ø·¡ ÆÄÀÏ¿¡ ŽëÇØ diffžŠ œÇÇàÇÏŒŒ¿ä)"
++
++msgid "Recovery completed. Buffer contents equals file contents."
++msgstr "º¹±ž°¡ ³¡³µœÀŽÏŽÙ. ¹öÆÛÀÇ ³»¿ëÀÌ ÆÄÀÏ ³»¿ë°ú °°œÀŽÏŽÙ."
+ 
+ msgid ""
+-"Delete the .swp file afterwards.\n"
++"\n"
++"You may want to delete the .swp file now.\n"
+ "\n"
+ msgstr ""
+-"³ªÁß¿¡ .swp ÆÄÀÏÀ» Áö¿ìœÊœÃ¿À.\n"
++"\n"
++"ÀÌÁŠ .swp ÆÄÀÏÀ» Áö¿ìŒÅµµ µËŽÏŽÙ.\n"
+ "\n"
+ 
++msgid "Using crypt key from swap file for the text file.\n"
++msgstr "ÅØœºÆ® ÆÄÀÏ¿¡ œº¿ÒÆÄÀÏ¿¡Œ­ °¡Á®¿Â ŸÏÈ£ Å°žŠ »ç¿ëÇÕŽÏŽÙ.\n"
++
+ #. use msg() to start the scrolling properly
+ msgid "Swap files found:"
+ msgstr "œº¿Ò ÆÄÀÏÀ» Ã£ŸÒÀœ:"
+@@ -3677,10 +3698,12 @@
+ msgid "    If you did this already, delete the swap file \""
+ msgstr "    ÀÌ¹Ì º¹±žÇÏŒÌŸúŽÙžé œº¿ÒÆÄÀÏ \""
+ 
+-#~ msgid ""
+-#~ "\"\n"
+-#~ "    to avoid this message.\n"
+-#~ msgstr ""
++msgid ""
++"\"\n"
++"    to avoid this message.\n"
++msgstr ""
++"\"\n"
++"    À»(žŠ) Áö¿ìŒÅŸß ÀÌ žÞœÃÁö°¡ »ç¶óÁýŽÏŽÙ.\n"
+ 
+ msgid "Swap file \""
+ msgstr "œº¿Ò ÆÄÀÏ \""
+@@ -3889,7 +3912,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "ºö: ²ø³µœÀŽÏŽÙ.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "¿¡·¯: "
+ 
+@@ -3985,8 +4007,14 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: ¹öÆÛ %ld¿¡ ŽëÇÑ NetBeans ¿¬°áÀ» ÀÒŸî¹ö·ÈœÀŽÏŽÙ"
+ 
+-#~ msgid "E505: "
+-#~ msgstr ""
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: ÀÌ GUIŽÂ netbeansžŠ Áö¿øÇÏÁö ŸÊœÀŽÏŽÙ"
++
++msgid "E511: netbeans already connected"
++msgstr "E511: netbeans°¡ ÀÌ¹Ì ¿¬°áµÇŸî ÀÖœÀŽÏŽÙ"
++
++msgid "E505: "
++msgstr "E505: "
+ 
+ msgid "E349: No identifier under cursor"
+ msgstr "E349: Ä¿Œ­ ¹Ø¿¡ œÄº°ÀÚ°¡ ŸøœÀŽÏŽÙ"
+@@ -4092,7 +4120,6 @@
+ msgid "Illegal register name"
+ msgstr "ÀÌ»óÇÑ ·¹ÁöœºÅÍ ÀÌž§"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Registers:\n"
+@@ -4117,8 +4144,8 @@
+ "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld "
+ "Bytes"
+ msgstr ""
+-"Selected %s%ld of %ld ¶óÀÎ; %ld of %ld ŽÜŸî; %ld of %ld ¹®ÀÚ; %ld of %ld "
+-"¹ÙÀÌÆ®"
++"Selected %s%ld of %ld ¶óÀÎ; %ld of %ld ŽÜŸî; %ld of %ld ¹®ÀÚ; %ld of %ld ¹ÙÀÌ"
++"Æ®"
+ 
+ #, c-format
+ msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
+@@ -4129,8 +4156,8 @@
+ "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+ "%ld"
+ msgstr ""
+-"Col %s of %s; ¶óÀÎ %ld of %ld; ŽÜŸî %ld of %ld; ¹®ÀÚ %ld of %ld; ¹ÙÀÌÆ® %ld of "
+-"%ld"
++"Col %s of %s; ¶óÀÎ %ld of %ld; ŽÜŸî %ld of %ld; ¹®ÀÚ %ld of %ld; ¹ÙÀÌÆ® %ld "
++"of %ld"
+ 
+ #, c-format
+ msgid "(+%ld for BOM)"
+@@ -4173,6 +4200,12 @@
+ msgid "E589: 'backupext' and 'patchmode' are equal"
+ msgstr "E589: 'backupext'¿Í 'patchmode'°¡ µ¿ÀÏÇÕŽÏŽÙ"
+ 
++msgid "E834: Conflicts with value of 'listchars'"
++msgstr "E834: 'listchars' °ª°ú Ãæµ¹ÀÌ ¹ß»ýÇÕŽÏŽÙ"
++
++msgid "E835: Conflicts with value of 'fillchars'"
++msgstr "E835: 'fillchars' °ª°ú Ãæµ¹ÀÌ ¹ß»ýÇÕŽÏŽÙ"
++
+ msgid "E617: Cannot be changed in the GTK+ 2 GUI"
+ msgstr "E617: GTK+ 2 GUI¿¡Œ­ŽÂ ¹Ù²ð Œö ŸøœÀŽÏŽÙ"
+ 
+@@ -4378,9 +4411,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: ÀßžøµÈ ±ÛÀÚ '%c'ÀÌ(°¡) ±Û²Ã ÀÌž§ \"%s\"¿¡ ÀÖœÀŽÏŽÙ"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: ÀßžøµÈ 'osfiletype' ¿ÉŒÇ - TextžŠ »ç¿ëÇÕŽÏŽÙ"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "ºö: °°Àº œÃ±×³Î µÎ ¹ø, ³¡³ÀŽÏŽÙ\n"
+ 
+@@ -4584,6 +4614,9 @@
+ msgid "E382: Cannot write, 'buftype' option is set"
+ msgstr "E382: Ÿµ Œö ŸøÀœ, 'buftype' ¿ÉŒÇÀÌ Œ³Á€µÇŸî ÀÖœÀŽÏŽÙ"
+ 
++msgid "Error file"
++msgstr "¿¡·¯ ÆÄÀÏ"
++
+ msgid "E683: File name missing or invalid pattern"
+ msgstr "E683: ÆÄÀÏží Ž©¶ô È€Àº ÀßžøµÈ ÆÐÅÏ"
+ 
+@@ -4839,6 +4872,10 @@
+ msgstr "E756: žÂÃã¹ý °Ë»ç°¡ È°ŒºÈ­µÇŸî ÀÖÁö ŸÊœÀŽÏŽÙ"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr "°æ°í: ŽÜŸî žñ·Ï \"%s_%s.spl\" È€Àº \"%s_ascii.spl\"À» Ã£À» Œö ŸøœÀŽÏŽÙ"
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr "°æ°í: ŽÜŸî žñ·Ï \"%s.%s.spl\" È€Àº \"%s.ascii.spl\"À» Ã£À» Œö ŸøœÀŽÏŽÙ"
+ 
+@@ -5062,6 +5099,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "ŸÆœºÅ° ¹®ÀÚ¿­ÀÌ ŸÆŽÑ %d°³ÀÇ ŽÜŸî°¡ ¹«œÃµÇŸúœÀŽÏŽÙ"
+ 
++#~ msgid "E845: Insufficient memory, word list will be incomplete"
++#~ msgstr ""
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "%d/%d ³ëµå°¡ ŸÐÃàµÊ; %d (%d%%)°¡ ³²Àœ"
+@@ -5149,7 +5189,7 @@
+ 
+ #, c-format
+ msgid "E753: Not found: %s"
+-msgstr "E753: Ã£À» Œö Ÿøœ¿: %s"
++msgstr "E753: Ã£À» Œö ŸøÀœ: %s"
+ 
+ #, c-format
+ msgid "E778: This does not look like a .sug file: %s"
+@@ -5239,8 +5279,8 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: contains ÀÎÀÚŽÂ ¿©±â¿¡ Ÿµ Œö ŸøœÀŽÏŽÙ"
+ 
+-msgid "E396: containedin argument not accepted here"
+-msgstr "E396: containedin ÀÎÀÚŽÂ ¿©±â¿¡ Ÿµ Œö ŸøœÀŽÏŽÙ"
++msgid "E844: invalid cchar value"
++msgstr "E844: ÀßžøµÈ cchar °ª"
+ 
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: group[t]hereŽÂ ¿©±â¿¡Œ­ »ç¿ëµÉ Œö ŸøœÀŽÏŽÙ"
+@@ -5452,6 +5492,10 @@
+ msgid "E435: Couldn't find tag, just guessing!"
+ msgstr "E435: ÅÂ±×žŠ Ã£À» Œö ŸøÁöžž ÀÌ°Å °°œÀŽÏŽÙ!"
+ 
++#, c-format
++msgid "Duplicate field name: %s"
++msgstr "Áßº¹µÈ ÇÊµå ží: %s"
++
+ msgid "' not known. Available builtin terminals are:"
+ msgstr "' not known. Available builtin terminals are:"
+ 
+@@ -5491,10 +5535,84 @@
+ msgid "Used CUT_BUFFER0 instead of empty selection"
+ msgstr "ºó °íž£±â ŽëœÅ CUT_BUFFER0À» »ç¿ëÇßœÀŽÏŽÙ"
+ 
++#. This happens when the FileChangedRO autocommand changes the
++#. * file in a way it becomes shorter.
++msgid "E834: Line count changed unexpectedly"
++msgstr "E834: ÁÙ °¹Œö°¡ žðž£ŽÂ »çÀÌ¿¡ ¹Ù²îŸúœÀŽÏŽÙ"
++
+ #. must display the prompt
+ msgid "No undo possible; continue anyway"
+ msgstr "ÃëŒÒ ºÒ°¡ŽÉ; ŸîÂ·µç °èŒÓÇÕŽÏŽÙ"
+ 
++#, c-format
++msgid "E828: Cannot open undo file for writing: %s"
++msgstr "E828: Ÿ²±â À§ÇØ undoÀ» ¿­ Œö ŸøœÀŽÏŽÙ: %s"
++
++#, c-format
++msgid "E825: Corrupted undo file (%s): %s"
++msgstr "E825: ±úÁø undo ÆÄÀÏ (%s): %s"
++
++msgid "Cannot write undo file in any directory in 'undodir'"
++msgstr "'undodir'¿¡ ÀÖŽÂ Ÿî¶² µð·ºÅäž®¿¡µµ undo ÆÄÀÏÀ» Ÿµ Œö ŸøœÀŽÏŽÙ"
++
++#, c-format
++msgid "Will not overwrite with undo file, cannot read: %s"
++msgstr "ÀÐÀ» Œö°¡ ŸøŸîŒ­ undo ÆÄÀÏ¿¡ µ€ŸîŸµ Œö ŸøœÀŽÏŽÙ: %s"
++
++#, c-format
++msgid "Will not overwrite, this is not an undo file: %s"
++msgstr "undo ÆÄÀÏÀÌ ŸÆŽÏŸîŒ­ µ€ŸîŸµ Œö ŸøœÀŽÏŽÙ: %s"
++
++msgid "Skipping undo file write, nothing to undo"
++msgstr "undoÇÒ ³»¿ëÀÌ ŸøŸîŒ­ undo ÆÄÀÏ ÀúÀåÀ» °Ç³Ê¶ÝŽÏŽÙ"
++
++#, c-format
++msgid "Writing undo file: %s"
++msgstr "undo ÆÄÀÏ Ÿ²ŽÂ Áß: %s"
++
++#, c-format
++msgid "E829: write error in undo file: %s"
++msgstr "E829: undo ÆÄÀÏ Ÿ²±â ¿¡·¯: %s"
++
++#, c-format
++msgid "Not reading undo file, owner differs: %s"
++msgstr "ŒÒÀ¯ÀÚ°¡ ŽÞ¶óŒ­ undo ÆÄÀÏÀ» ÀÐÁö ŸÊœÀŽÏŽÙ: %s"
++
++#, c-format
++msgid "Reading undo file: %s"
++msgstr "undo ÆÄÀÏ ÀÐŽÂ Áß: %s"
++
++#, c-format
++msgid "E822: Cannot open undo file for reading: %s"
++msgstr "E822: ÀÐ±â À§ÇØ undo ÆÄÀÏÀ» ¿­ Œö ŸøœÀŽÏŽÙ: %s"
++
++#, c-format
++msgid "E823: Not an undo file: %s"
++msgstr "E823: undo ÆÄÀÏÀÌ ŸÆŽÕŽÏŽÙ: %s"
++
++#, c-format
++msgid "E832: Non-encrypted file has encrypted undo file: %s"
++msgstr "E832: ŸÏÈ£È­µÇÁö ŸÊÀº ÆÄÀÏÀÌ ŸÏÈ£È­µÈ undo ÆÄÀÏÀ» °¡Áö°í ÀÖœÀŽÏŽÙ: %s"
++
++#, c-format
++msgid "E826: Undo file decryption failed: %s"
++msgstr "E826: Undo ÆÄÀÏÀ» ÇØµ¶ÇÒ Œö ŸøœÀŽÏŽÙ: %s"
++
++#, c-format
++msgid "E827: Undo file is encrypted: %s"
++msgstr "E827: Undo ÆÄÀÏÀÌ ŸÏÈ£È­µÇŸúœÀŽÏŽÙ: %s"
++
++#, c-format
++msgid "E824: Incompatible undo file: %s"
++msgstr "E824: È£È¯µÇÁö ŸÊŽÂ undo ÆÄÀÏ: %s"
++
++msgid "File contents changed, cannot use undo info"
++msgstr "ÆÄÀÏ ³»¿ëÀÌ ¹Ù²îŸîŒ­, undo Á€ºžžŠ »ç¿ëÇÒ Œö ŸøœÀŽÏŽÙ"
++
++#, c-format
++msgid "Finished reading undo file %s"
++msgstr "undo ÆÄÀÏ %sÀ»(žŠ) ÀÐŸîµé¿ŽœÀŽÏŽÙ"
++
+ msgid "Already at oldest change"
+ msgstr "Žõ ÀÌ»óÀÇ ŒöÁ€ÀÌ ŸøŸúœÀŽÏŽÙ"
+ 
+@@ -5502,8 +5620,8 @@
+ msgstr "Žõ ÀÌ»óÀÇ ŒöÁ€Àº ŸøŸúœÀŽÏŽÙ"
+ 
+ #, c-format
+-msgid "Undo number %ld not found"
+-msgstr "ÃëŒÒ ¹øÈ£ %ldžŠ Ã£À» Œö ŸøœÀŽÏŽÙ"
++msgid "E830: Undo number %ld not found"
++msgstr "E830: Undo ¹øÈ£ %ldžŠ Ã£À» Œö ŸøœÀŽÏŽÙ"
+ 
+ msgid "E438: u_undo: line numbers wrong"
+ msgstr "E438: u_undo: ÀßžøµÈ ÁÙ ¹øÈ£"
+@@ -5539,8 +5657,8 @@
+ msgid "Nothing to undo"
+ msgstr "ÃëŒÒÇÒ °Ô ŸøœÀŽÏŽÙ"
+ 
+-msgid "number changes  time"
+-msgstr "number changes  time"
++#~ msgid "number changes  when               saved"
++#~ msgstr ""
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+@@ -5721,15 +5839,9 @@
+ msgid "with GTK2-GNOME GUI."
+ msgstr "GTK2-GNOME GUI."
+ 
+-msgid "with GTK-GNOME GUI."
+-msgstr "GTK-GNOME GUI."
+-
+ msgid "with GTK2 GUI."
+ msgstr "GTK2 GUI."
+ 
+-msgid "with GTK GUI."
+-msgstr "GTK GUI."
+-
+ msgid "with X11-Motif GUI."
+ msgstr "X11-Motif GUI."
+ 
+@@ -5902,7 +6014,7 @@
+ msgstr "E813: autocmd Ã¢À» ŽÝÀ» Œö ŸøœÀŽÏŽÙ"
+ 
+ msgid "E814: Cannot close window, only autocmd window would remain"
+-msgstr "E814: Ã¢À» ŽÝÀ» Œö Ÿøœ¿, autocmd Ã¢žž ³²Àœ"
++msgstr "E814: Ã¢À» ŽÝÀ» Œö ŸøÀœ, autocmd Ã¢žž ³²Àœ"
+ 
+ msgid "E445: Other window contains changes"
+ msgstr "E445: ŽÙž¥ Ã¢ÀÌ ¹Ù²îŸúœÀŽÏŽÙ"
+@@ -6142,7 +6254,7 @@
+ msgstr "E485: %s ÆÄÀÏÀ» ÀÐÀ» Œö ŸøœÀŽÏŽÙ"
+ 
+ msgid "E37: No write since last change (add ! to override)"
+-msgstr "E37: ž¶Áöž·Àž·Î °íÄ£ µÚ ÀúÀåµÇÁö ŸÊŸÒœÀŽÏŽÙ (µ€ŸîŸ²·Ážé ! ŽõÇÏ±â)"
++msgstr "E37: ž¶Áöž·Àž·Î °íÄ£ µÚ ÀúÀåµÇÁö ŸÊŸÒœÀŽÏŽÙ (¹«œÃÇÏ·Ážé ! ŽõÇÏ±â)"
+ 
+ msgid "E38: Null argument"
+ msgstr "E38: ³Î ÀÎÀÚ"
+@@ -6177,7 +6289,7 @@
+ msgstr "E42: ¿¡·¯ ŸøÀœ"
+ 
+ msgid "E776: No location list"
+-msgstr "E776: À§Ä¡ žñ·Ï Ÿøœ¿"
++msgstr "E776: À§Ä¡ žñ·Ï ŸøÀœ"
+ 
+ msgid "E43: Damaged match string"
+ msgstr "E43: ±úÁø žÂŽÂ ¹®ÀÚ¿­"
+@@ -6194,7 +6306,7 @@
+ 
+ #, c-format
+ msgid "E794: Cannot set variable in the sandbox: \"%s\""
+-msgstr "E794: sandbox ŸÈ¿¡Œ­ŽÂ º¯ŒöžŠ Œ³Á€ÇÒ Œö Ÿøœ¿: \"%s\""
++msgstr "E794: sandbox ŸÈ¿¡Œ­ŽÂ º¯ŒöžŠ Œ³Á€ÇÒ Œö ŸøÀœ: \"%s\""
+ 
+ msgid "E47: Error while reading errorfile"
+ msgstr "E47: ¿¡·¯ÆÄÀÏ ÀÐŽÂ µµÁß¿¡ ¿¡·¯"
+@@ -6294,3 +6406,42 @@
+ msgid "search hit BOTTOM, continuing at TOP"
+ msgstr "³¡±îÁö Ã£ŸÒÀœ, Ã³ÀœºÎÅÍ °èŒÓ"
+ 
++#, c-format
++msgid "Need encryption key for \"%s\""
++msgstr "\"%s\"¿¡ ŽëÇÑ ŸÏÈ£ Å°°¡ ÇÊ¿äÇÕŽÏŽÙ"
++
++msgid "writelines() requires list of strings"
++msgstr "writelines()ŽÂ ¹®ÀÚ¿­ žñ·ÏÀÌ ÇÊ¿äÇÕŽÏŽÙ"
++
++msgid "E264: Python: Error initialising I/O objects"
++msgstr "E264: ÆÄÀÌœã: I/O °ŽÃŒ ÃÊ±âÈ­Áß ¿¡·¯°¡ »ý°åœÀŽÏŽÙ"
++
++msgid "no such buffer"
++msgstr "±×·± ¹öÆÛŽÂ ŸøœÀŽÏŽÙ"
++
++msgid "attempt to refer to deleted window"
++msgstr "Áö¿öÁø Ã¢À» ÂüÁ¶ÇÏ·Á°í ÇÏ¿ŽœÀŽÏŽÙ"
++
++msgid "readonly attribute"
++msgstr "ÀÐ±â Àü¿ë ŒÓŒº"
++
++msgid "cursor position outside buffer"
++msgstr "ÆÛŒ­ À§Ä¡°¡ ¹öÆÛ ¹Û¿¡ ÀÖœÀŽÏŽÙ"
++
++#, c-format
++msgid "<window object (deleted) at %p>"
++msgstr "<%p¿¡ Ã¢ °ŽÃŒ (»èÁŠµÊ)>"
++
++#, c-format
++msgid "<window object (unknown) at %p>"
++msgstr "<%p¿¡ Ã¢ °ŽÃŒ (žðž§)>"
++
++#, c-format
++msgid "<window %d>"
++msgstr "<Ã¢ %d>"
++
++msgid "no such window"
++msgstr "±×·± Ã¢Àº ŸøœÀŽÏŽÙ"
++
++msgid "attempt to refer to deleted buffer"
++msgstr "Áö¿öÁø ¹öÆÛžŠ ÂüÁ¶ÇÏ·Á°í ÇÏ¿ŽœÀŽÏŽÙ"
+diff -Naur vim73.orig/src/po/nb.po vim73/src/po/nb.po
+--- vim73.orig/src/po/nb.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/nb.po	2013-06-07 17:07:34.062244743 +0000
+@@ -2070,21 +2070,6 @@
+ msgstr "&Angre"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Kan ikke laste Zap-skrifttype '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Kan ikke bruke skrifttype %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Sender beskjed om å avslutte barneprosess.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Fant ikke vindutittel \"%s\""
+ 
+@@ -4324,9 +4309,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Ulovlig tegn '%c' i skrifttypenavn \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Ugyldig 'osfiletype'-valg - bruker Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Dobbelt signal, avslutter\n"
+ 
+diff -Naur vim73.orig/src/po/nl.po vim73/src/po/nl.po
+--- vim73.orig/src/po/nl.po	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/po/nl.po	2013-06-07 17:07:34.102244628 +0000
+@@ -0,0 +1,8207 @@
++# Dutch Translation for Vim		vim:set foldmethod=marker:
++# Do ":help uganda"  in Vim to read copying and usage conditions.
++# Do ":help credits" in Vim to see a list of people who contributed.
++# Previous-Translator(s):
++# highlight: oplichten
++# Erwin Poeze <erwin.poeze@gmail.com>, 2011, 2012.
++msgid ""
++msgstr ""
++"Project-Id-Version: vim 7.3\n"
++"Report-Msgid-Bugs-To: \n"
++"POT-Creation-Date: 2011-05-29 07:43+0200\n"
++"PO-Revision-Date: 2012-03-28 08:07+0200\n"
++"Last-Translator: YOUR NAME <E-MAIL@ADDRESS>\n"
++"Language-Team: Dutch <vertaling@vrijschrift.nl>\n"
++"Language: nl\n"
++"MIME-Version: 1.0\n"
++"Content-Type: text/plain; charset=UTF-8\n"
++"Content-Transfer-Encoding: 8bit\n"
++"Plural-Forms: nplurals=2; plural=(n != 1);\n"
++
++#: blowfish.c:418
++msgid "E831: bf_key_init() called with empty password"
++msgstr "E831: bf_key_init() uitgevoerd met leeg wachtwoord"
++
++#: blowfish.c:513
++msgid "E820: sizeof(uint32_t) != 4"
++msgstr "E820: sizeof(uint32_t) != 4"
++
++#: blowfish.c:532
++msgid "E817: Blowfish big/little endian use wrong"
++msgstr "E817: gebruik Blowfish big/little endian is onjuist"
++
++#: blowfish.c:645
++msgid "E818: sha256 test failed"
++msgstr "E818: sha256 test mislukt"
++
++#: blowfish.c:650
++msgid "E819: Blowfish test failed"
++msgstr "E819: Blowfish test mislukt"
++
++#: buffer.c:103
++msgid "E82: Cannot allocate any buffer, exiting..."
++msgstr "E82: kan geen buffer aanmaken, beÃ«indigen..."
++
++#: buffer.c:106
++msgid "E83: Cannot allocate buffer, using other one..."
++msgstr "E83: kan geen buffer aanmaken, een andere wordt gebruikt..."
++
++#: buffer.c:879
++msgid "E515: No buffers were unloaded"
++msgstr "E515: geen van de buffers is gelost"
++
++#: buffer.c:881
++msgid "E516: No buffers were deleted"
++msgstr "E516: geen van de buffers is verwijderd"
++
++#: buffer.c:883
++msgid "E517: No buffers were wiped out"
++msgstr "E517: geen van de buffers is gewist"
++
++#: buffer.c:891
++msgid "1 buffer unloaded"
++msgstr "1 buffer gelost"
++
++#: buffer.c:893
++#, c-format
++msgid "%d buffers unloaded"
++msgstr "%d buffers gelost"
++
++#: buffer.c:898
++msgid "1 buffer deleted"
++msgstr "1 buffer verwijderd"
++
++#: buffer.c:900
++#, c-format
++msgid "%d buffers deleted"
++msgstr "%d buffers verwijderd"
++
++#: buffer.c:905
++msgid "1 buffer wiped out"
++msgstr "1 buffer gewist"
++
++#: buffer.c:907
++#, c-format
++msgid "%d buffers wiped out"
++msgstr "%d buffers gewist"
++
++#: buffer.c:965
++msgid "E84: No modified buffer found"
++msgstr "E84: geen aangepast buffer gevonden"
++
++#. back where we started, didn't find anything.
++#: buffer.c:1004
++msgid "E85: There is no listed buffer"
++msgstr "E85: er is geen vermelde buffer"
++
++#: buffer.c:1016
++#, c-format
++msgid "E86: Buffer %ld does not exist"
++msgstr "E86: Buffer %ld bestaat niet"
++
++#: buffer.c:1019
++msgid "E87: Cannot go beyond last buffer"
++msgstr "E87: kan niet voorbij het laatste buffer komen"
++
++#: buffer.c:1021
++msgid "E88: Cannot go before first buffer"
++msgstr "E88: kan niet vÃ³Ã³r het eerste buffer komen"
++
++#: buffer.c:1063
++#, c-format
++msgid "E89: No write since last change for buffer %ld (add ! to override)"
++msgstr "E89: niets opgeslagen sinds laatste wijziging van buffer %ld (voeg ! toe om te forceren)"
++
++#: buffer.c:1080
++msgid "E90: Cannot unload last buffer"
++msgstr "E90: kan laatste buffer niet legen"
++
++#: buffer.c:1657
++msgid "W14: Warning: List of file names overflow"
++msgstr "W14: waarschuwing: lijst met bestandsnamen is vol"
++
++#: buffer.c:1856
++#: quickfix.c:3626
++#, c-format
++msgid "E92: Buffer %ld not found"
++msgstr "E92: buffer %ld niet gevonden"
++
++#: buffer.c:2131
++#, c-format
++msgid "E93: More than one match for %s"
++msgstr "E93: %s meermaals gevonden"
++
++#: buffer.c:2133
++#, c-format
++msgid "E94: No matching buffer for %s"
++msgstr "E94: geen overeenkomstig buffer voor %s"
++
++#: buffer.c:2585
++#, c-format
++msgid "line %ld"
++msgstr "regel %ld"
++
++#: buffer.c:2672
++msgid "E95: Buffer with this name already exists"
++msgstr "E95: buffer met deze naam bestaat al"
++
++#: buffer.c:2999
++msgid " [Modified]"
++msgstr " [Gewijzigd]"
++
++#: buffer.c:3004
++msgid "[Not edited]"
++msgstr "[Niet bewerkt]"
++
++#: buffer.c:3009
++msgid "[New file]"
++msgstr "[Nieuw bestand]"
++
++#: buffer.c:3010
++msgid "[Read errors]"
++msgstr "[Leesfouten]"
++
++#: buffer.c:3012
++#: fileio.c:2429
++#: netbeans.c:3848
++msgid "[readonly]"
++msgstr "[alleen-lezen]"
++
++#: buffer.c:3035
++#, c-format
++msgid "1 line --%d%%--"
++msgstr "1 regel --%d%%--"
++
++#: buffer.c:3038
++#, c-format
++msgid "%ld lines --%d%%--"
++msgstr "%ld regels --%d%%--"
++
++#: buffer.c:3045
++#, c-format
++msgid "line %ld of %ld --%d%%-- col "
++msgstr "regel %ld van %ld --%d%%-- kol "
++
++#: buffer.c:3166
++#: buffer.c:5132
++#: memline.c:1783
++msgid "[No Name]"
++msgstr "[Geen naam]"
++
++#. must be a help buffer
++#: buffer.c:3204
++msgid "help"
++msgstr "hulp"
++
++#: buffer.c:3832
++#: screen.c:6091
++msgid "[Help]"
++msgstr "[Hulp]"
++
++#: buffer.c:3866
++#: screen.c:6097
++msgid "[Preview]"
++msgstr "[Voorvertoning]"
++
++#: buffer.c:4188
++msgid "All"
++msgstr "Alles"
++
++#: buffer.c:4188
++msgid "Bot"
++msgstr "Bodem"
++
++#: buffer.c:4191
++msgid "Top"
++msgstr "Top"
++
++#: buffer.c:5067
++#, c-format
++msgid ""
++"\n"
++"# Buffer list:\n"
++msgstr ""
++"\n"
++"# Bufferlijst:\n"
++
++#: buffer.c:5116
++msgid "[Location List]"
++msgstr "[Locatielijst]"
++
++#: buffer.c:5118
++msgid "[Quickfix list]"
++msgstr "[Quickfix-lijst]"
++
++#: buffer.c:5128
++msgid "[Scratch]"
++msgstr "[Klad]"
++
++#: buffer.c:5445
++msgid ""
++"\n"
++"--- Signs ---"
++msgstr ""
++"\n"
++"--- Tekens ---"
++
++#: buffer.c:5455
++#, c-format
++msgid "Signs for %s:"
++msgstr "Tekens voor %s:"
++
++#: buffer.c:5461
++#, c-format
++msgid "    line=%ld  id=%d  name=%s"
++msgstr "    regel=%ld  id=%d  naam=%s"
++
++#: diff.c:141
++#, c-format
++msgid "E96: Can not diff more than %ld buffers"
++msgstr "E96: kan niet meer dan %ld buffers vergelijken"
++
++#: diff.c:777
++msgid "E810: Cannot read or write temp files"
++msgstr "E810: kan tijdelijke bestand niet lezen of opslaan"
++
++#: diff.c:778
++msgid "E97: Cannot create diffs"
++msgstr "E97: kan geen verschillen genereren"
++
++#: diff.c:901
++msgid "Patch file"
++msgstr "Patch-bestand"
++
++#: diff.c:1005
++msgid "E816: Cannot read patch output"
++msgstr "E816: kan patch-uitvoer niet lezen"
++
++#: diff.c:1236
++msgid "E98: Cannot read diff output"
++msgstr "E98: kan diff-uitvoer niet lezen"
++
++#: diff.c:2095
++msgid "E99: Current buffer is not in diff mode"
++msgstr "E99: huidige buffer is niet in diff-modus"
++
++#: diff.c:2114
++msgid "E793: No other buffer in diff mode is modifiable"
++msgstr "E793: geen ander buffer in diff-modus is bewerkbaar"
++
++#: diff.c:2116
++msgid "E100: No other buffer in diff mode"
++msgstr "E100: geen ander buffer in diff-modus"
++
++#: diff.c:2126
++msgid "E101: More than two buffers in diff mode, don't know which one to use"
++msgstr "E101: meer dan twee buffers in diff-modus, weet niet welke gebruikt moet worden"
++
++#: diff.c:2149
++#, c-format
++msgid "E102: Can't find buffer \"%s\""
++msgstr "E102: kan buffer \"%s\" niet vinden"
++
++#: diff.c:2157
++#, c-format
++msgid "E103: Buffer \"%s\" is not in diff mode"
++msgstr "E103: buffer \"%s\" is niet in diff-modus"
++
++#: diff.c:2201
++msgid "E787: Buffer changed unexpectedly"
++msgstr "E787: buffer is onverwacht gewijzigd"
++
++#: digraph.c:2214
++msgid "E104: Escape not allowed in digraph"
++msgstr "E104: Escape in digraph niet toegestaan"
++
++#: digraph.c:2407
++msgid "E544: Keymap file not found"
++msgstr "E544: bestand met toetsbindingen niet gevonden"
++
++#: digraph.c:2434
++msgid "E105: Using :loadkeymap not in a sourced file"
++msgstr "E105: Gebruik van :loadkeymap niet in een 'sourced' bestand"
++
++#: digraph.c:2473
++msgid "E791: Empty keymap entry"
++msgstr "E791: toetsbinding leeg"
++
++#: edit.c:42
++msgid " Keyword completion (^N^P)"
++msgstr " trefwoordvoltooiing (^N^P)"
++
++#. ctrl_x_mode == 0, ^P/^N compl.
++#: edit.c:43
++msgid " ^X mode (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
++msgstr " ^X-modus (^]^D^E^F^I^K^L^N^O^Ps^U^V^Y)"
++
++#: edit.c:45
++msgid " Whole line completion (^L^N^P)"
++msgstr " gehele-regelvoltooiing (^L^N^P)"
++
++#: edit.c:46
++msgid " File name completion (^F^N^P)"
++msgstr " bestandsnaamvoltooiing (^F^N^P)"
++
++#: edit.c:47
++msgid " Tag completion (^]^N^P)"
++msgstr " tag-voltooiing (^]^N^P)"
++
++#: edit.c:48
++msgid " Path pattern completion (^N^P)"
++msgstr " Padpatroonvoltooiing (^N^P)"
++
++#: edit.c:49
++msgid " Definition completion (^D^N^P)"
++msgstr " definitievoltooiiing (^D^N^P)"
++
++#: edit.c:51
++msgid " Dictionary completion (^K^N^P)"
++msgstr " Dictionaryvoltooiing (^K^N^P)"
++
++#: edit.c:52
++msgid " Thesaurus completion (^T^N^P)"
++msgstr " Thesaurusvoltooiing (^T^N^P)"
++
++#: edit.c:53
++msgid " Command-line completion (^V^N^P)"
++msgstr " opdrachtregelvoltooiing (^V^N^P)"
++
++#: edit.c:54
++msgid " User defined completion (^U^N^P)"
++msgstr " gebruikergedefinieerde voltooiing (^U^N^P)"
++
++#: edit.c:55
++msgid " Omni completion (^O^N^P)"
++msgstr " omni-voltooiing (^O^N^P)"
++
++#: edit.c:56
++msgid " Spelling suggestion (s^N^P)"
++msgstr " spellingsuggestie (s^N^P)"
++
++#: edit.c:57
++msgid " Keyword Local completion (^N^P)"
++msgstr " lokaal-trefwoordvoltooiing (^N^P)"
++
++#: edit.c:60
++msgid "Hit end of paragraph"
++msgstr "Einde van paragraaf"
++
++#: edit.c:2042
++msgid "'dictionary' option is empty"
++msgstr "'Dictionary'-optie is leeg"
++
++#: edit.c:2043
++msgid "'thesaurus' option is empty"
++msgstr "'thesaurus'-optie is leeg"
++
++#: edit.c:3009
++#, c-format
++msgid "Scanning dictionary: %s"
++msgstr "Doorzoeken Dictionary: %s"
++
++#: edit.c:3494
++msgid " (insert) Scroll (^E/^Y)"
++msgstr " (invoegen) scroll (^E/^Y)"
++
++#: edit.c:3496
++msgid " (replace) Scroll (^E/^Y)"
++msgstr " (vervangen) scroll (^E/^Y)"
++
++#: edit.c:3973
++#, c-format
++msgid "Scanning: %s"
++msgstr "doorzoeken: %s"
++
++#: edit.c:4008
++msgid "Scanning tags."
++msgstr "Doorzoeken tags."
++
++#: edit.c:5021
++msgid " Adding"
++msgstr " toevoegen"
++
++#. showmode might reset the internal line pointers, so it must
++#. * be called before line = ml_get(), or when this address is no
++#. * longer needed.  -- Acevedo.
++#.
++#: edit.c:5068
++msgid "-- Searching..."
++msgstr "-- doorzoeken..."
++
++#: edit.c:5128
++msgid "Back at original"
++msgstr "Terug naar origineel"
++
++#: edit.c:5133
++msgid "Word from other line"
++msgstr "Woord uit andere regel"
++
++#: edit.c:5138
++msgid "The only match"
++msgstr "Het enige resultaat"
++
++#: edit.c:5203
++#, c-format
++msgid "match %d of %d"
++msgstr "resultaat %d van %d"
++
++#: edit.c:5207
++#, c-format
++msgid "match %d"
++msgstr "resultaat %d"
++
++#: eval.c:96
++msgid "E18: Unexpected characters in :let"
++msgstr "E18: onverwachte tekens in :let"
++
++#: eval.c:97
++#, c-format
++msgid "E684: list index out of range: %ld"
++msgstr "E684: lijstindex buiten bereik: %ld"
++
++#: eval.c:98
++#, c-format
++msgid "E121: Undefined variable: %s"
++msgstr "E121: ongedefinieerde variabele: %s"
++
++#: eval.c:99
++msgid "E111: Missing ']'"
++msgstr "E111: ontbrekende ']'"
++
++#: eval.c:100
++#, c-format
++msgid "E686: Argument of %s must be a List"
++msgstr "E686: argument van %s moet een List zijn"
++
++#: eval.c:101
++#, c-format
++msgid "E712: Argument of %s must be a List or Dictionary"
++msgstr "E712: argument van %s moet een List of Dictionary zijn"
++
++#: eval.c:102
++msgid "E713: Cannot use empty key for Dictionary"
++msgstr "E713: kan geen leeg trefwoord als Dictionary gebruiken"
++
++#: eval.c:103
++msgid "E714: List required"
++msgstr "E714: List is vereist"
++
++#: eval.c:104
++msgid "E715: Dictionary required"
++msgstr "E715: Dictionary is vereist"
++
++#: eval.c:105
++#, c-format
++msgid "E118: Too many arguments for function: %s"
++msgstr "E118: te veel argumenten voor functie: %s"
++
++#: eval.c:106
++#, c-format
++msgid "E716: Key not present in Dictionary: %s"
++msgstr "E716: trefwoord niet aangetroffen in Dictionary: %s"
++
++#: eval.c:107
++#, c-format
++msgid "E122: Function %s already exists, add ! to replace it"
++msgstr "E122: function %s bestaat reeds, voeg ! toe om te vervangen"
++
++#: eval.c:108
++msgid "E717: Dictionary entry already exists"
++msgstr "E717: woord bestaat al in Dictionary"
++
++#: eval.c:109
++msgid "E718: Funcref required"
++msgstr "E718: Funcref is vereist"
++
++#: eval.c:110
++msgid "E719: Cannot use [:] with a Dictionary"
++msgstr "E719: kan [:] niet met een Dictionary gebruiken"
++
++#: eval.c:111
++#, c-format
++msgid "E734: Wrong variable type for %s="
++msgstr "E734: onjuist type variabele voor %s="
++
++#: eval.c:112
++#, c-format
++msgid "E130: Unknown function: %s"
++msgstr "E130: onbekende functie: %s"
++
++#: eval.c:113
++#, c-format
++msgid "E461: Illegal variable name: %s"
++msgstr "E461: ongeldige variabelenaam: %s"
++
++#: eval.c:1931
++msgid "E687: Less targets than List items"
++msgstr "E687: minder doelen dan Listitems"
++
++#: eval.c:1936
++msgid "E688: More targets than List items"
++msgstr "E688: meer doelen dan Listitems"
++
++#: eval.c:2022
++msgid "Double ; in list of variables"
++msgstr "Dubbele ; in variabelenlijst"
++
++#: eval.c:2241
++#, c-format
++msgid "E738: Can't list variables for %s"
++msgstr "E738: kan variabelen voor %s niet tonen"
++
++#: eval.c:2587
++msgid "E689: Can only index a List or Dictionary"
++msgstr "E689: alleen een List of Dictionary kan geÃÂ¯ndexeerd worden"
++
++#: eval.c:2593
++msgid "E708: [:] must come last"
++msgstr "E708: [:] moet als laatste staan"
++
++#: eval.c:2645
++msgid "E709: [:] requires a List value"
++msgstr "E709: [:] vereist een Listwaarde"
++
++#: eval.c:2881
++msgid "E710: List value has more items than target"
++msgstr "E710: Listwaarde heeft meer  value has more items than target"
++
++#: eval.c:2885
++msgid "E711: List value has not enough items"
++msgstr "E711: Listwaarde heeft onvoldoende items"
++
++#: eval.c:3120
++msgid "E690: Missing \"in\" after :for"
++msgstr "E690: \"in\" ontbreekt na :for"
++
++#: eval.c:3353
++#, c-format
++msgid "E107: Missing parentheses: %s"
++msgstr "E107: ontbrekende haakjes: %s"
++
++#: eval.c:3592
++#, c-format
++msgid "E108: No such variable: \"%s\""
++msgstr "E108: onbekende variabele: \"%s\""
++
++#: eval.c:3679
++msgid "E743: variable nested too deep for (un)lock"
++msgstr "E743: variabele is te diep genest om te beveiligen"
++
++#: eval.c:4027
++msgid "E109: Missing ':' after '?'"
++msgstr "E109: ':' ontbreekt na '?'"
++
++#: eval.c:4329
++msgid "E691: Can only compare List with List"
++msgstr "E691: List kan alleen met een Lijst worden vergeleken"
++
++#: eval.c:4331
++msgid "E692: Invalid operation for Lists"
++msgstr "E692: ongeldige bewerking voor Listen"
++
++#: eval.c:4358
++msgid "E735: Can only compare Dictionary with Dictionary"
++msgstr "E735: Dictionary kan alleen met Woordenboek worden vergeleken"
++
++#: eval.c:4360
++msgid "E736: Invalid operation for Dictionary"
++msgstr "E736: ongeldige bewerking voor Dictionary"
++
++#: eval.c:4380
++msgid "E693: Can only compare Funcref with Funcref"
++msgstr "E693: Funcref kan alleen met Funcref worden vergeleken"
++
++#: eval.c:4382
++msgid "E694: Invalid operation for Funcrefs"
++msgstr "E694: ongeldige bewerking voor Funcrefs"
++
++#: eval.c:4802
++msgid "E804: Cannot use '%' with Float"
++msgstr "E804: '%' kan niet met Float worden gebruikt"
++
++#: eval.c:5022
++msgid "E110: Missing ')'"
++msgstr "E110: ')' ontbreekt"
++
++#: eval.c:5174
++msgid "E695: Cannot index a Funcref"
++msgstr "E695: een Funcref kan niet geÃÂ¯ndexeerd worden"
++
++#: eval.c:5431
++#, c-format
++msgid "E112: Option name missing: %s"
++msgstr "E112: optienaam ontbreekt: %s"
++
++#: eval.c:5449
++#, c-format
++msgid "E113: Unknown option: %s"
++msgstr "E113: onbekende optie: %s"
++
++#: eval.c:5515
++#, c-format
++msgid "E114: Missing quote: %s"
++msgstr "E114: ontbrekend aanhaalteken: %s"
++
++#: eval.c:5651
++#, c-format
++msgid "E115: Missing quote: %s"
++msgstr "E115: ontbrekend aanhaalteken: %s"
++
++#: eval.c:5730
++#, c-format
++msgid "E696: Missing comma in List: %s"
++msgstr "E696: komma ontbreekt in List: %s"
++
++#: eval.c:5738
++#, c-format
++msgid "E697: Missing end of List ']': %s"
++msgstr "E697: einde van List ']' ontbreekt: %s"
++
++#: eval.c:7230
++#, c-format
++msgid "E720: Missing colon in Dictionary: %s"
++msgstr "E720: dubbelepunt in Dictionary ontbreekt: %s"
++
++#: eval.c:7259
++#, c-format
++msgid "E721: Duplicate key in Dictionary: \"%s\""
++msgstr "E721: dubbele sleutel in Dictionary: \"%s\""
++
++#: eval.c:7279
++#, c-format
++msgid "E722: Missing comma in Dictionary: %s"
++msgstr "E722: komma ontbreekt in Dictionary: %s"
++
++#: eval.c:7287
++#, c-format
++msgid "E723: Missing end of Dictionary '}': %s"
++msgstr "E723: einde van Dictionary '}' ontbreekt: %s"
++
++#: eval.c:7325
++msgid "E724: variable nested too deep for displaying"
++msgstr "E724: variabele is te diep genest om te tonen"
++
++#: eval.c:8059
++#, c-format
++msgid "E740: Too many arguments for function %s"
++msgstr "E740: teveel argumenten voor functie %s"
++
++#: eval.c:8061
++#, c-format
++msgid "E116: Invalid arguments for function %s"
++msgstr "E116: ongeldige argumenten voor functie %s"
++
++#: eval.c:8270
++#, c-format
++msgid "E117: Unknown function: %s"
++msgstr "E117: onbekende functie: %s"
++
++#: eval.c:8276
++#, c-format
++msgid "E119: Not enough arguments for function: %s"
++msgstr "E119: onvoldoende argumenten voor functie: %s"
++
++#: eval.c:8280
++#, c-format
++msgid "E120: Using <SID> not in a script context: %s"
++msgstr "E120: gebruik van <SID> buiten een scriptcontext: %s"
++
++#: eval.c:8284
++#, c-format
++msgid "E725: Calling dict function without Dictionary: %s"
++msgstr "E725: dict-functie aanroep zonder Dictionary: %s"
++
++#: eval.c:8357
++msgid "E808: Number or Float required"
++msgstr "E808: Number of Float vereist"
++
++#: eval.c:8949
++msgid "E699: Too many arguments"
++msgstr "E699:teveel argumenten"
++
++#: eval.c:9118
++msgid "E785: complete() can only be used in Insert mode"
++msgstr "E785: complete() kan alleen in Invoegmodus worden gebruikt"
++
++#.
++#. * Yes this is ugly, I don't particularly like it either.  But doing it
++#. * this way has the compelling advantage that translations need not to
++#. * be touched at all.  See below what 'ok' and 'ync' are used for.
++#.
++#: eval.c:9218
++#: gui.c:4876
++#: gui_gtk.c:2144
++#: os_mswin.c:598
++msgid "&Ok"
++msgstr "&Ok"
++
++#: eval.c:9914
++#, c-format
++msgid "E737: Key already exists: %s"
++msgstr "E737: sleutel bestaat al: %s"
++
++#: eval.c:10506
++#, c-format
++msgid "+-%s%3ld lines: "
++msgstr "+-%s%3ld regels: "
++
++#: eval.c:10594
++#, c-format
++msgid "E700: Unknown function: %s"
++msgstr "E700: onbekende functie: %s"
++
++#: eval.c:12620
++msgid ""
++"&OK\n"
++"&Cancel"
++msgstr ""
++"&OK\n"
++"&Annuleren"
++
++#: eval.c:12702
++msgid "called inputrestore() more often than inputsave()"
++msgstr "inputrestore() vaker aangeroepen dan inputsave()"
++
++#: eval.c:12836
++msgid "E786: Range not allowed"
++msgstr "E786: bereik niet toegestaan"
++
++#: eval.c:13036
++msgid "E701: Invalid type for len()"
++msgstr "E701: ongeldig type voor len()"
++
++#: eval.c:14063
++msgid "E726: Stride is zero"
++msgstr "E726: stap is nul"
++
++#: eval.c:14065
++msgid "E727: Start past end"
++msgstr "E727: start na einde"
++
++#: eval.c:14118
++#: eval.c:17978
++msgid "<empty>"
++msgstr "<leeg>"
++
++#: eval.c:14352
++msgid "E240: No connection to Vim server"
++msgstr "E240: geen verbinding met Vim-server"
++
++#: eval.c:14400
++#, c-format
++msgid "E241: Unable to send to %s"
++msgstr "E241: verzenden naar %s onmogelijk"
++
++#: eval.c:14547
++msgid "E277: Unable to read a server reply"
++msgstr "E277: lezen van serverantwoord onmogelijk"
++
++#: eval.c:14797
++msgid "E655: Too many symbolic links (cycle?)"
++msgstr "E655: teveel symbolische koppelingen (oneindige lus?)"
++
++#: eval.c:15527
++msgid "E258: Unable to send to client"
++msgstr "E258: verzenden nar client onmogelijk"
++
++#: eval.c:16294
++msgid "E702: Sort compare function failed"
++msgstr "E702: sorteer-vergelijkfunctie mislukt"
++
++#: eval.c:16619
++msgid "(Invalid)"
++msgstr "(ongeldig)"
++
++#: eval.c:17104
++msgid "E677: Error writing temp file"
++msgstr "E677: opslaan van temp-bestand is mislukt"
++
++#: eval.c:19007
++msgid "E805: Using a Float as a Number"
++msgstr "E805: een Float wordt als Number gebruikt"
++
++#: eval.c:19011
++msgid "E703: Using a Funcref as a Number"
++msgstr "E703: een Funcref wordt als Number gebruikt"
++
++#: eval.c:19019
++msgid "E745: Using a List as a Number"
++msgstr "E745: List wordt als een Number gebruikt"
++
++#: eval.c:19022
++msgid "E728: Using a Dictionary as a Number"
++msgstr "E728: Dictionary gebruiken als een Number"
++
++#: eval.c:19125
++msgid "E729: using Funcref as a String"
++msgstr "E729: Funcref gebruiken als een String"
++
++#: eval.c:19128
++msgid "E730: using List as a String"
++msgstr "E730: List gebruiken als een String"
++
++#: eval.c:19131
++msgid "E731: using Dictionary as a String"
++msgstr "E731: Dictionary gebruiken als een String"
++
++#: eval.c:19135
++msgid "E806: using Float as a String"
++msgstr "E806: Float gebruiken als een String"
++
++#: eval.c:19505
++#, c-format
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: variabelenaam van Funcref moet beginnen met een hoofdletter: %s"
++
++#: eval.c:19513
++#, c-format
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: variablenaam botst met bestaande functie: %s"
++
++#: eval.c:19538
++#, c-format
++msgid "E706: Variable type mismatch for: %s"
++msgstr "E706: variabelesoort past niet bij: %s"
++
++#: eval.c:19647
++#, c-format
++msgid "E795: Cannot delete variable %s"
++msgstr "E795: kan variabele %s niet verwijderen"
++
++#: eval.c:19664
++#, c-format
++msgid "E741: Value is locked: %s"
++msgstr "E741: waarde is geblokkeerd: %s"
++
++#: eval.c:19665
++#: eval.c:19671
++#: message.c:2132
++#: os_mswin.c:2258
++msgid "Unknown"
++msgstr "Onbekend"
++
++#: eval.c:19670
++#, c-format
++msgid "E742: Cannot change value of %s"
++msgstr "E742: kan waarde van %s niet veranderen"
++
++#: eval.c:19755
++msgid "E698: variable nested too deep for making a copy"
++msgstr "E698: variabele te diep genest om een kopie te maken"
++
++#: eval.c:20228
++#, c-format
++msgid "E123: Undefined function: %s"
++msgstr "E123: ongedefinieerde functie: %s"
++
++#: eval.c:20241
++#, c-format
++msgid "E124: Missing '(': %s"
++msgstr "E124: ontbrekende '(': %s"
++
++#: eval.c:20297
++#, c-format
++msgid "E125: Illegal argument: %s"
++msgstr "E125: ongeldig argument: %s"
++
++#: eval.c:20407
++msgid "E126: Missing :endfunction"
++msgstr "E126: ontbrekende :endfunction"
++
++#: eval.c:20544
++#, c-format
++msgid "E707: Function name conflicts with variable: %s"
++msgstr "E707: functienaam botst met variabele: %s"
++
++#: eval.c:20559
++#, c-format
++msgid "E127: Cannot redefine function %s: It is in use"
++msgstr "E127: kan functie %s niet opnieuw definiÃÂ«ren, het is in gebruik"
++
++#: eval.c:20624
++#, c-format
++msgid "E746: Function name does not match script file name: %s"
++msgstr "E746: functienaam komt niet overeen met bestandsnaam van het script: %s"
++
++#: eval.c:20742
++msgid "E129: Function name required"
++msgstr "E129: functienaam is vereist"
++
++#: eval.c:20862
++#, c-format
++msgid "E128: Function name must start with a capital or contain a colon: %s"
++msgstr "E128: functionnaam moet met een hoofdletter beginnen of een dubbelepunt bevatten: %s"
++
++#: eval.c:21394
++#, c-format
++msgid "E131: Cannot delete function %s: It is in use"
++msgstr "E131: functie %s wordt gebruikt en kan niet worden verwijderd"
++
++#: eval.c:21514
++msgid "E132: Function call depth is higher than 'maxfuncdepth'"
++msgstr "E132: diepte functieaanroep overstijgt 'maxfuncdepth'"
++
++#: eval.c:21653
++#, c-format
++msgid "calling %s"
++msgstr "%s aanroepen"
++
++#: eval.c:21745
++#, c-format
++msgid "%s aborted"
++msgstr "%s afgebroken"
++
++#: eval.c:21747
++#, c-format
++msgid "%s returning #%ld"
++msgstr "%s komt terug met de waarde #%ld"
++
++#: eval.c:21763
++#, c-format
++msgid "%s returning %s"
++msgstr "%s komt terug met de waarde %s"
++
++#: eval.c:21787
++#: ex_cmds2.c:3233
++#, c-format
++msgid "continuing in %s"
++msgstr "voortzetten in %s"
++
++#: eval.c:21906
++msgid "E133: :return not inside a function"
++msgstr "E133: :return niet binnen een functie"
++
++#: eval.c:22319
++msgid ""
++"\n"
++"# global variables:\n"
++msgstr ""
++"\n"
++"# globale variabelen:\n"
++
++#: eval.c:22436
++msgid ""
++"\n"
++"\tLast set from "
++msgstr ""
++"\n"
++"\tLaatst ingesteld door "
++
++#: eval.c:22456
++msgid "No old files"
++msgstr "Geen oudere bestanden"
++
++#: ex_cmds.c:101
++#, c-format
++msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
++msgstr "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
++
++#: ex_cmds.c:128
++#, c-format
++msgid "> %d, Hex %04x, Octal %o"
++msgstr "> %d, Hex %04x, Octal %o"
++
++#: ex_cmds.c:129
++#, c-format
++msgid "> %d, Hex %08x, Octal %o"
++msgstr "> %d, Hex %08x, Octal %o"
++
++#: ex_cmds.c:739
++msgid "E134: Move lines into themselves"
++msgstr "E134: verplaats regels in zichzelf"
++
++#: ex_cmds.c:808
++msgid "1 line moved"
++msgstr "1 regel verplaatst"
++
++#: ex_cmds.c:810
++#, c-format
++msgid "%ld lines moved"
++msgstr "%ld regels verplaatst"
++
++#: ex_cmds.c:1305
++#, c-format
++msgid "%ld lines filtered"
++msgstr "%ld regels gefilterd"
++
++#: ex_cmds.c:1329
++msgid "E135: *Filter* Autocommands must not change current buffer"
++msgstr "E135: *Filter* Autocommands mogen huidige buffer niet wijzigen"
++
++#: ex_cmds.c:1414
++msgid "[No write since last change]\n"
++msgstr "[Niets opgeslagen sinds laatste wijziging]\n"
++
++#: ex_cmds.c:1672
++#, c-format
++msgid "%sviminfo: %s in line: "
++msgstr "%sviminfo: %s in regel: "
++
++#: ex_cmds.c:1680
++msgid "E136: viminfo: Too many errors, skipping rest of file"
++msgstr "E136: viminfo: teveel fouten, restand van bestand overgeslagen"
++
++#: ex_cmds.c:1709
++#, c-format
++msgid "Reading viminfo file \"%s\"%s%s%s"
++msgstr "Inlezen viminfo-bestand \"%s\"%s%s%s"
++
++#: ex_cmds.c:1711
++msgid " info"
++msgstr " info"
++
++#: ex_cmds.c:1712
++msgid " marks"
++msgstr " markering"
++
++#: ex_cmds.c:1713
++msgid " oldfiles"
++msgstr " oud-bestanden"
++
++#: ex_cmds.c:1714
++msgid " FAILED"
++msgstr " MISLUKT"
++
++#. avoid a wait_return for this message, it's annoying
++#: ex_cmds.c:1810
++#, c-format
++msgid "E137: Viminfo file is not writable: %s"
++msgstr "E137: viminfo-bestand is niet schrijfbaar: %s"
++
++#: ex_cmds.c:1963
++#, c-format
++msgid "E138: Can't write viminfo file %s!"
++msgstr "E138: kan niet naar viminfo-bestand %s schrijven!"
++
++#: ex_cmds.c:1973
++#, c-format
++msgid "Writing viminfo file \"%s\""
++msgstr "viminfo-bestand \"%s\" opslaan"
++
++#. Write the info:
++#: ex_cmds.c:2081
++#, c-format
++msgid "# This viminfo file was generated by Vim %s.\n"
++msgstr "# Dit viminfo-bestand is aangemaakt door Vim %s.\n"
++
++#: ex_cmds.c:2083
++#, c-format
++msgid ""
++"# You may edit it if you're careful!\n"
++"\n"
++msgstr ""
++"# Bewerken is toegestaan, maar doe het met aandacht!\n"
++"\n"
++
++#: ex_cmds.c:2085
++#, c-format
++msgid "# Value of 'encoding' when this file was written\n"
++msgstr "# Waarde van 'encoding' bij het opslaan van dit bestand\n"
++
++#: ex_cmds.c:2185
++msgid "Illegal starting char"
++msgstr "Ongeldig startteken"
++
++#: ex_cmds.c:2551
++#: ex_cmds2.c:1478
++msgid "Save As"
++msgstr "Opslaan als"
++
++#: ex_cmds.c:2628
++msgid "Write partial file?"
++msgstr "Gedeeltelijk bestand opslaan?"
++
++#: ex_cmds.c:2635
++msgid "E140: Use ! to write partial buffer"
++msgstr "E140: gebruik ! om gedeeltelijk buffer op te slaan"
++
++#: ex_cmds.c:2777
++#, c-format
++msgid "Overwrite existing file \"%s\"?"
++msgstr "Bestaand bestand \"%s\" overschrijven?"
++
++#: ex_cmds.c:2820
++#, c-format
++msgid "Swap file \"%s\" exists, overwrite anyway?"
++msgstr "Wisselbestand \"%s\" bestaat, toch overschrijven?"
++
++#: ex_cmds.c:2833
++#, c-format
++msgid "E768: Swap file exists: %s (:silent! overrides)"
++msgstr "E768: wisselbestand bestaat: %s (:silent! overschrijft)"
++
++#: ex_cmds.c:2901
++#, c-format
++msgid "E141: No file name for buffer %ld"
++msgstr "E141: buffer %ld heeft geen bestandsnaam"
++
++#: ex_cmds.c:2940
++msgid "E142: File not written: Writing is disabled by 'write' option"
++msgstr "E142: bestand is niet opgeslagen: opslaan is uitgeschakeld door 'write'-optie"
++
++#: ex_cmds.c:2970
++#, c-format
++msgid ""
++"'readonly' option is set for \"%s\".\n"
++"Do you wish to write anyway?"
++msgstr ""
++"'alleen-lezen'-optie is inschakeld voor \"%s\".\n"
++"Toch opslaan?"
++
++#: ex_cmds.c:2973
++#, c-format
++msgid ""
++"File permissions of \"%s\" are read-only.\n"
++"It may still be possible to write it.\n"
++"Do you wish to try?"
++msgstr ""
++"Bestandsrechten van \"%s\" zijn alleen-lezen.\n"
++"Mogelijk kan er toch naar weggeschreven worden.\n"
++"Proberen op te slaan?"
++
++#: ex_cmds.c:2990
++#, c-format
++msgid "E505: \"%s\" is read-only (add ! to override)"
++msgstr "E505: \"%s\" is alleen-lezen (voeg ! toe om te overschrijven)"
++
++#: ex_cmds.c:3177
++msgid "Edit File"
++msgstr "Bestand bewerken"
++
++#: ex_cmds.c:3860
++#, c-format
++msgid "E143: Autocommands unexpectedly deleted new buffer %s"
++msgstr "E143: 'Autocommands' hebben het nieuwe buffer %s onverwacht verwijderd"
++
++#: ex_cmds.c:4076
++msgid "E144: non-numeric argument to :z"
++msgstr "E144: niet-numeriek argument voor :z"
++
++#: ex_cmds.c:4175
++msgid "E145: Shell commands not allowed in rvim"
++msgstr "E145: in rvim zijn shell-opdrachten zijn niet toegestaan"
++
++#: ex_cmds.c:4276
++msgid "E146: Regular expressions can't be delimited by letters"
++msgstr "E146: reguliere expressies kunnen niet begrensd worden door letters"
++
++#: ex_cmds.c:4736
++#, c-format
++msgid "replace with %s (y/n/a/q/l/^E/^Y)?"
++msgstr "vervang door %s (y/n/a/q/l/^E/^Y)?"
++
++#: ex_cmds.c:5181
++msgid "(Interrupted) "
++msgstr "(Onderbroken) "
++
++#: ex_cmds.c:5186
++msgid "1 match"
++msgstr "1 overeenkomst"
++
++#: ex_cmds.c:5186
++msgid "1 substitution"
++msgstr "1 vervanging"
++
++#: ex_cmds.c:5189
++#, c-format
++msgid "%ld matches"
++msgstr "%ld overeenkomsten"
++
++#: ex_cmds.c:5189
++#, c-format
++msgid "%ld substitutions"
++msgstr "%ld vervangingen"
++
++#: ex_cmds.c:5194
++msgid " on 1 line"
++msgstr " op 1 regel"
++
++#: ex_cmds.c:5197
++#, c-format
++msgid " on %ld lines"
++msgstr " op %ld regels"
++
++#: ex_cmds.c:5244
++msgid "E147: Cannot do :global recursive"
++msgstr "E147: kan :global niet recursief uitvoeren"
++
++#: ex_cmds.c:5277
++msgid "E148: Regular expression missing from global"
++msgstr "E148: reguliere expressies ontbreken bij global"
++
++#: ex_cmds.c:5326
++#, c-format
++msgid "Pattern found in every line: %s"
++msgstr "Patroon aangetroffen in iedere regel: %s"
++
++#: ex_cmds.c:5413
++#, c-format
++msgid ""
++"\n"
++"# Last Substitute String:\n"
++"$"
++msgstr ""
++"\n"
++"# Laatst vervangingsstring:\n"
++"$"
++
++#: ex_cmds.c:5526
++msgid "E478: Don't panic!"
++msgstr "E478: geen paniek!"
++
++#: ex_cmds.c:5572
++#, c-format
++msgid "E661: Sorry, no '%s' help for %s"
++msgstr "E661: helaas, geen '%s'-hulp voor %s"
++
++#: ex_cmds.c:5575
++#, c-format
++msgid "E149: Sorry, no help for %s"
++msgstr "E149: helaas, geen hulp voor %s"
++
++#: ex_cmds.c:5617
++#, c-format
++msgid "Sorry, help file \"%s\" not found"
++msgstr "helaas, hulpbestand \"%s\" is niet gevonden"
++
++#: ex_cmds.c:6195
++#, c-format
++msgid "E150: Not a directory: %s"
++msgstr "E150: geen map: %s"
++
++#: ex_cmds.c:6338
++#, c-format
++msgid "E152: Cannot open %s for writing"
++msgstr "E152: kan %s niet openen om naar te schrijven"
++
++#: ex_cmds.c:6375
++#, c-format
++msgid "E153: Unable to open %s for reading"
++msgstr "E153: kan %s niet openen om uit te lezen"
++
++#: ex_cmds.c:6411
++#, c-format
++msgid "E670: Mix of help file encodings within a language: %s"
++msgstr "E670: mengelmoes van hulpbestandcoderingen binnen een taal: %s"
++
++#: ex_cmds.c:6489
++#, c-format
++msgid "E154: Duplicate tag \"%s\" in file %s/%s"
++msgstr "E154: dubbele tag \"%s\" in bestand %s/%s"
++
++#: ex_cmds.c:6625
++#, c-format
++msgid "E160: Unknown sign command: %s"
++msgstr "E160: onbekende opdracht voor margetekens: %s"
++
++#: ex_cmds.c:6642
++msgid "E156: Missing sign name"
++msgstr "E156: ontbrekende naam margeteken"
++
++#: ex_cmds.c:6688
++msgid "E612: Too many signs defined"
++msgstr "E612: teveel margetekens gedefinieerd"
++
++#: ex_cmds.c:6756
++#, c-format
++msgid "E239: Invalid sign text: %s"
++msgstr "E239: ongeldige tekst margeteken: %s"
++
++#: ex_cmds.c:6787
++#: ex_cmds.c:6962
++#, c-format
++msgid "E155: Unknown sign: %s"
++msgstr "E155: onbekend margeteken: %s"
++
++#: ex_cmds.c:6820
++msgid "E159: Missing sign number"
++msgstr "E159: ontbrekend nummer margeteken"
++
++#: ex_cmds.c:6902
++#, c-format
++msgid "E158: Invalid buffer name: %s"
++msgstr "E158: ongeldige buffernaam: %s"
++
++#: ex_cmds.c:6941
++#, c-format
++msgid "E157: Invalid sign ID: %ld"
++msgstr "E157: ongeldige id margeteken: %ld"
++
++#: ex_cmds.c:7011
++msgid " (NOT FOUND)"
++msgstr " (NIET GEVONDEN)"
++
++#: ex_cmds.c:7013
++msgid " (not supported)"
++msgstr "(niet ondersteund)"
++
++#: ex_cmds.c:7137
++msgid "[Deleted]"
++msgstr "[Verwijderd]"
++
++#: ex_cmds2.c:138
++msgid "Entering Debug mode.  Type \"cont\" to continue."
++msgstr "Debug-modus gestart.  Typ \"cont\" om verder te gaan."
++
++#: ex_cmds2.c:142
++#: ex_docmd.c:1094
++#, c-format
++msgid "line %ld: %s"
++msgstr "regel %ld: %s"
++
++#: ex_cmds2.c:144
++#, c-format
++msgid "cmd: %s"
++msgstr "cmd: %s"
++
++#: ex_cmds2.c:344
++#, c-format
++msgid "Breakpoint in \"%s%s\" line %ld"
++msgstr "'Breakpoint' in \"%s%s\" regel %ld"
++
++#: ex_cmds2.c:656
++#, c-format
++msgid "E161: Breakpoint not found: %s"
++msgstr "E161: 'Breakpoint' niet gevonden: %s"
++
++#: ex_cmds2.c:692
++msgid "No breakpoints defined"
++msgstr "Geen 'breakpoints' opgegeven"
++
++#: ex_cmds2.c:697
++#, c-format
++msgid "%3d  %s %s  line %ld"
++msgstr "%3d  %s %s  regel %ld"
++
++#: ex_cmds2.c:1095
++msgid "E750: First use \":profile start {fname}\""
++msgstr "E750: gebruik eerst \":profile start {fname}\""
++
++#: ex_cmds2.c:1503
++#, c-format
++msgid "Save changes to \"%s\"?"
++msgstr "veranderingen opslaan in \"%s\"?"
++
++#: ex_cmds2.c:1505
++#: ex_docmd.c:10880
++msgid "Untitled"
++msgstr "naamloos"
++
++#: ex_cmds2.c:1634
++#, c-format
++msgid "E162: No write since last change for buffer \"%s\""
++msgstr "E162: niets opgeslagen sinds laatste wijziging van buffer \"%s\""
++
++#: ex_cmds2.c:1705
++msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
++msgstr "Waarschuwing: onverwacht ander buffer binnengegaan (controleer 'autocommands')"
++
++#: ex_cmds2.c:2149
++msgid "E163: There is only one file to edit"
++msgstr "E163: slechts een bestand beschikbaar voor bewerking"
++
++#: ex_cmds2.c:2151
++msgid "E164: Cannot go before first file"
++msgstr "E164: kan niet verder terug dan eerste bestand"
++
++#: ex_cmds2.c:2153
++msgid "E165: Cannot go beyond last file"
++msgstr "E165: kan niet verder dan laatste bestand"
++
++#: ex_cmds2.c:2583
++#, c-format
++msgid "E666: compiler not supported: %s"
++msgstr "E666: compiler niet ondersteund: %s"
++
++#: ex_cmds2.c:2684
++#, c-format
++msgid "Searching for \"%s\" in \"%s\""
++msgstr "Naar \"%s\" in \"%s\" zoeken"
++
++#: ex_cmds2.c:2711
++#, c-format
++msgid "Searching for \"%s\""
++msgstr "Naar \"%s\" zoeken"
++
++#: ex_cmds2.c:2737
++#, c-format
++msgid "not found in 'runtimepath': \"%s\""
++msgstr "niet gevonden in 'runtimepath': \"%s\""
++
++#: ex_cmds2.c:2772
++msgid "Source Vim script"
++msgstr "Vim-script laden"
++
++#: ex_cmds2.c:2962
++#, c-format
++msgid "Cannot source a directory: \"%s\""
++msgstr "kan geen map laden: \"%s\""
++
++#: ex_cmds2.c:3019
++#, c-format
++msgid "could not source \"%s\""
++msgstr "kan \"%s\" niet laden"
++
++#: ex_cmds2.c:3021
++#, c-format
++msgid "line %ld: could not source \"%s\""
++msgstr "regel %ld: kan \"%s\" niet laden"
++
++#: ex_cmds2.c:3037
++#, c-format
++msgid "sourcing \"%s\""
++msgstr "\"%s\" laden"
++
++#: ex_cmds2.c:3039
++#, c-format
++msgid "line %ld: sourcing \"%s\""
++msgstr "regel %ld: \"%s\" laden"
++
++#: ex_cmds2.c:3231
++#, c-format
++msgid "finished sourcing %s"
++msgstr "laden van %s afgerond"
++
++#: ex_cmds2.c:3315
++msgid "modeline"
++msgstr "modusregel"
++
++#: ex_cmds2.c:3317
++msgid "--cmd argument"
++msgstr "argument van --cmd"
++
++#: ex_cmds2.c:3319
++msgid "-c argument"
++msgstr "argument van -c"
++
++#: ex_cmds2.c:3321
++msgid "environment variable"
++msgstr "omgevingsvariabele"
++
++#: ex_cmds2.c:3323
++msgid "error handler"
++msgstr "foutafhandeling"
++
++#: ex_cmds2.c:3615
++msgid "W15: Warning: Wrong line separator, ^M may be missing"
++msgstr "W15: waarschuwing: ongeldige regelscheiding, ^M kan ontbreken"
++
++#: ex_cmds2.c:3748
++msgid "E167: :scriptencoding used outside of a sourced file"
++msgstr "E167: :scriptencoding buiten een geladen bestand gebruikt"
++
++#: ex_cmds2.c:3781
++msgid "E168: :finish used outside of a sourced file"
++msgstr "E168: :finish buiten een geladen bestand gebruikt"
++
++#: ex_cmds2.c:4103
++#, c-format
++msgid "Current %slanguage: \"%s\""
++msgstr "Huidige %s-taal: \"%s\""
++
++#: ex_cmds2.c:4120
++#, c-format
++msgid "E197: Cannot set language to \"%s\""
++msgstr "E197: taal kan niet ingesteld worden op \"%s\""
++
++#: ex_docmd.c:639
++msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
++msgstr "Ex-modus betreden.  Typ \"visual\" om naar de Normaal-modus te gaan."
++
++#: ex_docmd.c:694
++msgid "E501: At end-of-file"
++msgstr "E501: bij bestandseinde"
++
++#: ex_docmd.c:793
++msgid "E169: Command too recursive"
++msgstr "E169: opdracht te recursief"
++
++#: ex_docmd.c:1372
++#, c-format
++msgid "E605: Exception not caught: %s"
++msgstr "E605: uitzondering niet afgevangen: %s"
++
++#: ex_docmd.c:1460
++msgid "End of sourced file"
++msgstr "Einde van geladen bestand"
++
++#: ex_docmd.c:1461
++msgid "End of function"
++msgstr "Einde van functie"
++
++#: ex_docmd.c:2109
++msgid "E464: Ambiguous use of user-defined command"
++msgstr "E464: dubbelzinnig gebruik van gebruikergedefinieerde opdracht"
++
++#: ex_docmd.c:2123
++msgid "E492: Not an editor command"
++msgstr "E492: geen editor-opdracht"
++
++#: ex_docmd.c:2255
++msgid "E493: Backwards range given"
++msgstr "E493: Teruggaand bereik opgegeven"
++
++#: ex_docmd.c:2259
++msgid "Backwards range given, OK to swap"
++msgstr "Teruggaand bereik opgegeven, wisselen is toegestaan"
++
++#: ex_docmd.c:2322
++msgid "E494: Use w or w>>"
++msgstr "E494: w of w>> gebruiken"
++
++#: ex_docmd.c:4095
++msgid "E319: Sorry, the command is not available in this version"
++msgstr "E319: Helaas, in deze versie is de opdracht niet beschikbaar"
++
++#: ex_docmd.c:4444
++msgid "E172: Only one file name allowed"
++msgstr "E172: slechts een bestandsnaam toegestaan"
++
++#: ex_docmd.c:5056
++msgid "1 more file to edit.  Quit anyway?"
++msgstr "1 bestand wacht nog op bewerking.  Toch stoppen?"
++
++#: ex_docmd.c:5059
++#, c-format
++msgid "%d more files to edit.  Quit anyway?"
++msgstr "%d bestanden wachten nog op bewerking.  Toch stoppen?"
++
++#: ex_docmd.c:5066
++msgid "E173: 1 more file to edit"
++msgstr "E173: 1 bestand wacht op bewerking"
++
++#: ex_docmd.c:5068
++#, c-format
++msgid "E173: %ld more files to edit"
++msgstr "E173: %ld bestanden wachten op bewerking"
++
++#: ex_docmd.c:5162
++msgid "E174: Command already exists: add ! to replace it"
++msgstr "E174: opdracht bestaat al: voeg ! toe om het te vervangen"
++
++#: ex_docmd.c:5284
++msgid ""
++"\n"
++"    Name        Args Range Complete  Definition"
++msgstr ""
++"\n"
++"    Naam        Args Berk.  Compleet  Definitie"
++
++#: ex_docmd.c:5377
++msgid "No user-defined commands found"
++msgstr "Geen gebruikergedefinieerde opdrachten gevonden"
++
++#: ex_docmd.c:5409
++msgid "E175: No attribute specified"
++msgstr "E175: geen attribute opgegeven"
++
++#: ex_docmd.c:5461
++msgid "E176: Invalid number of arguments"
++msgstr "E176: ongeldig aantal argumenten"
++
++#: ex_docmd.c:5476
++msgid "E177: Count cannot be specified twice"
++msgstr "E177: aantal kan niet tweemaal worden opgegeven"
++
++#: ex_docmd.c:5486
++msgid "E178: Invalid default value for count"
++msgstr "E178: ongeldige standaardwaarde voor aantal"
++
++#: ex_docmd.c:5514
++msgid "E179: argument required for -complete"
++msgstr "E179: argument vereist voor -complete"
++
++#: ex_docmd.c:5526
++#, c-format
++msgid "E181: Invalid attribute: %s"
++msgstr "E181: ongeldig attribute: %s"
++
++#: ex_docmd.c:5572
++msgid "E182: Invalid command name"
++msgstr "E182: ongeldige opdrachtnaam"
++
++#: ex_docmd.c:5587
++msgid "E183: User defined commands must start with an uppercase letter"
++msgstr "E183: door gebruiker gedefinieerde opdrachten moet een een hoofdletter beginnen"
++
++#: ex_docmd.c:5655
++#, c-format
++msgid "E184: No such user-defined command: %s"
++msgstr "E184: deze door gebruiker gedefinieerde opdracht bestaat niet: %s"
++
++#: ex_docmd.c:6207
++#, c-format
++msgid "E180: Invalid complete value: %s"
++msgstr "E180: ongeldige voltooiingswaarde: %s"
++
++#: ex_docmd.c:6218
++msgid "E468: Completion argument only allowed for custom completion"
++msgstr "E468: argument voor voltooiing alleen toegestaan bij aangepaste voltooiing"
++
++#: ex_docmd.c:6226
++msgid "E467: Custom completion requires a function argument"
++msgstr "E467: aangepaste voltooiing vereist een functieargument"
++
++#: ex_docmd.c:6262
++msgid "unknown"
++msgstr "onbekend"
++
++#: ex_docmd.c:6266
++#, c-format
++msgid "E185: Cannot find color scheme %s"
++msgstr "E185: kan kleurenschema %s niet vinden"
++
++#: ex_docmd.c:6274
++msgid "Greetings, Vim user!"
++msgstr "Gegroet, Vim-gebruiker!"
++
++#: ex_docmd.c:6492
++msgid "E784: Cannot close last tab page"
++msgstr "E784: laatste tabpagina kan niet afgesloten worden"
++
++#: ex_docmd.c:6534
++msgid "Already only one tab page"
++msgstr "Reeds beperkt tot Ã©Ã©n tabpagina"
++
++#: ex_docmd.c:7221
++msgid "Edit File in new window"
++msgstr "Bestand in nieuw venster bewerken"
++
++#: ex_docmd.c:7347
++#, c-format
++msgid "Tab page %d"
++msgstr "Tabpagina %d"
++
++#: ex_docmd.c:7739
++msgid "No swap file"
++msgstr "Geen wisselbestand"
++
++#: ex_docmd.c:7844
++msgid "Append File"
++msgstr "Bestand toevoegen"
++
++#: ex_docmd.c:7943
++msgid "E747: Cannot change directory, buffer is modified (add ! to override)"
++msgstr "E747: kan niet van map veranderen, buffer is gewijzigd (voeg ! toe om te forceren)"
++
++#: ex_docmd.c:7952
++msgid "E186: No previous directory"
++msgstr "E186: geen voorgaande map"
++
++#: ex_docmd.c:8033
++msgid "E187: Unknown"
++msgstr "E187: onbekend"
++
++#: ex_docmd.c:8128
++msgid "E465: :winsize requires two number arguments"
++msgstr "E465: :winsize vereist twee getallen als argument"
++
++#: ex_docmd.c:8190
++#, c-format
++msgid "Window position: X %d, Y %d"
++msgstr "Vensterpositie: X %d, Y %d"
++
++#: ex_docmd.c:8195
++msgid "E188: Obtaining window position not implemented for this platform"
++msgstr "E188: verkrijgen van vensterpositie is voor dit platform niet geÃ¯mplementeerd"
++
++#: ex_docmd.c:8205
++msgid "E466: :winpos requires two number arguments"
++msgstr "E466: :winpos vereist twee getallen als argument"
++
++#: ex_docmd.c:8565
++msgid "Save Redirection"
++msgstr "'Redirection' opslaan"
++
++#: ex_docmd.c:8796
++msgid "Save View"
++msgstr "Beeld opslaan"
++
++#: ex_docmd.c:8797
++msgid "Save Session"
++msgstr "Sessie opslaan"
++
++#: ex_docmd.c:8799
++msgid "Save Setup"
++msgstr "Instellingen opslaan"
++
++#: ex_docmd.c:8955
++#, c-format
++msgid "E739: Cannot create directory: %s"
++msgstr "E739: kan map %s niet aanmaken"
++
++#: ex_docmd.c:8984
++#, c-format
++msgid "E189: \"%s\" exists (add ! to override)"
++msgstr "E189: \"%s\" bestaat al (voeg ! toe om te forceren)"
++
++#: ex_docmd.c:8989
++#, c-format
++msgid "E190: Cannot open \"%s\" for writing"
++msgstr "E190: \"%s\" kan niet worden beschreven"
++
++#. set mark
++#: ex_docmd.c:9013
++msgid "E191: Argument must be a letter or forward/backward quote"
++msgstr "E191: argument moet een letter zijn of een aanhaalteken, voor of achterwaarts"
++
++#: ex_docmd.c:9060
++msgid "E192: Recursive use of :normal too deep"
++msgstr "E192: recursief gebruik van :normal gaat te diep"
++
++#: ex_docmd.c:9659
++msgid "E809: #< is not available without the +eval feature"
++msgstr "E809: #< is zonder de +eval-functionaliteit niet beschikbaar"
++
++#: ex_docmd.c:9668
++msgid "E194: No alternate file name to substitute for '#'"
++msgstr "E194: er is geen wisselende bestandsnaam beschikbaar om '#' te vervangen"
++
++#: ex_docmd.c:9709
++msgid "E495: no autocommand file name to substitute for \"<afile>\""
++msgstr "E495: er is geen 'autocommand'-bestandsnaam om \"<afile>\" te vervangen"
++
++#: ex_docmd.c:9718
++msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
++msgstr "E496: er is geen 'autocommand'-buffernummer om \"<abuf>\" te vervangen"
++
++#: ex_docmd.c:9729
++msgid "E497: no autocommand match name to substitute for \"<amatch>\""
++msgstr "E497: er is geen 'autocommand'-naamovereenkomst om \"<amatch>\" te vervangen"
++
++#: ex_docmd.c:9739
++msgid "E498: no :source file name to substitute for \"<sfile>\""
++msgstr "E498: er is geen :source-bestandsnaam om \"<sfile>\" te vervangen"
++
++#: ex_docmd.c:9781
++#, no-c-format
++msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
++msgstr "E499: lege bestandsnaam voor '%' of '#', werkt alleen samen met \":p:h\""
++
++#: ex_docmd.c:9783
++msgid "E500: Evaluates to an empty string"
++msgstr "E500: resulteert in een lege string"
++
++#: ex_docmd.c:10860
++msgid "E195: Cannot open viminfo file for reading"
++msgstr "E195: het 'viminfo'-bestand kan niet worden gelezen"
++
++#: ex_docmd.c:11048
++msgid "E196: No digraphs in this version"
++msgstr "E196: deze versie bevat geen 'digraphs'"
++
++#: ex_eval.c:441
++msgid "E608: Cannot :throw exceptions with 'Vim' prefix"
++msgstr "E608: :throw exceptions met 'Vim' als voorvoegsel zijn niet mogelijk"
++
++#. always scroll up, don't overwrite
++#: ex_eval.c:534
++#, c-format
++msgid "Exception thrown: %s"
++msgstr "Geworpen uitzondering: %s"
++
++#: ex_eval.c:588
++#, c-format
++msgid "Exception finished: %s"
++msgstr "Afgeronde uitzondering: %s"
++
++#: ex_eval.c:589
++#, c-format
++msgid "Exception discarded: %s"
++msgstr "Afgedankte uitzondering: %s"
++
++#: ex_eval.c:635
++#: ex_eval.c:687
++#, c-format
++msgid "%s, line %ld"
++msgstr "%s, regel %ld"
++
++#. always scroll up, don't overwrite
++#: ex_eval.c:657
++#, c-format
++msgid "Exception caught: %s"
++msgstr "Gevangen uitzondering: %s"
++
++#: ex_eval.c:737
++#, c-format
++msgid "%s made pending"
++msgstr "%s aanhanging gemaakt"
++
++#: ex_eval.c:740
++#, c-format
++msgid "%s resumed"
++msgstr "%s voortgezet"
++
++#: ex_eval.c:744
++#, c-format
++msgid "%s discarded"
++msgstr "%s afgedankt"
++
++#: ex_eval.c:771
++msgid "Exception"
++msgstr "Uitzondering"
++
++#: ex_eval.c:777
++msgid "Error and interrupt"
++msgstr "Fout en onderbreken"
++
++#: ex_eval.c:779
++#: gui.c:4875
++#: gui_xmdlg.c:689
++#: gui_xmdlg.c:808
++#: os_mswin.c:597
++msgid "Error"
++msgstr "Fout"
++
++#. if (pending & CSTP_INTERRUPT)
++#: ex_eval.c:781
++msgid "Interrupt"
++msgstr "Onderbreken"
++
++#: ex_eval.c:873
++msgid "E579: :if nesting too deep"
++msgstr "E579: te diepe :if-nesting"
++
++#: ex_eval.c:910
++msgid "E580: :endif without :if"
++msgstr "E580: :endif zonder :if"
++
++#: ex_eval.c:955
++msgid "E581: :else without :if"
++msgstr "E581: :else zonder :if"
++
++#: ex_eval.c:958
++msgid "E582: :elseif without :if"
++msgstr "E582: :elseif zonder :if"
++
++#: ex_eval.c:965
++msgid "E583: multiple :else"
++msgstr "E583: meerdere :else"
++
++#: ex_eval.c:968
++msgid "E584: :elseif after :else"
++msgstr "E584: :elseif na :else"
++
++#: ex_eval.c:1035
++msgid "E585: :while/:for nesting too deep"
++msgstr "E585: te diepe :while/:for-nesting"
++
++#: ex_eval.c:1133
++msgid "E586: :continue without :while or :for"
++msgstr "E586: :continue zonder :while of :for"
++
++#: ex_eval.c:1172
++msgid "E587: :break without :while or :for"
++msgstr "E587: :break zonder :while of :for"
++
++#: ex_eval.c:1222
++msgid "E732: Using :endfor with :while"
++msgstr "E732: gebruik van :endfor met :while"
++
++#: ex_eval.c:1224
++msgid "E733: Using :endwhile with :for"
++msgstr "E733: gebruik van :endwhile met :for"
++
++#: ex_eval.c:1399
++msgid "E601: :try nesting too deep"
++msgstr "E601: te diepe :try-nesting"
++
++#: ex_eval.c:1479
++msgid "E603: :catch without :try"
++msgstr "E603: :catch zonder :try"
++
++#. Give up for a ":catch" after ":finally" and ignore it.
++#. * Just parse.
++#: ex_eval.c:1498
++msgid "E604: :catch after :finally"
++msgstr "E604: :catch na :finally"
++
++#: ex_eval.c:1632
++msgid "E606: :finally without :try"
++msgstr "E606: :finally zonder :try"
++
++#. Give up for a multiple ":finally" and ignore it.
++#: ex_eval.c:1652
++msgid "E607: multiple :finally"
++msgstr "E607: meerdere :finally"
++
++#: ex_eval.c:1762
++msgid "E602: :endtry without :try"
++msgstr "E602: :endtry zonder :try"
++
++#: ex_eval.c:2267
++msgid "E193: :endfunction not inside a function"
++msgstr "E193: :endfunction niet binnen een functie"
++
++#: ex_getln.c:2010
++msgid "E788: Not allowed to edit another buffer now"
++msgstr "E788: nu een andere buffer bewerken is niet toegestaan"
++
++#: ex_getln.c:2025
++msgid "E811: Not allowed to change buffer information now"
++msgstr "E811: nu bufferinformatie wijzigen is niet toegestaan"
++
++#: ex_getln.c:3923
++msgid "tagname"
++msgstr "tagnaam"
++
++#: ex_getln.c:3926
++msgid " kind file\n"
++msgstr "soor bestand\n"
++
++#: ex_getln.c:5708
++msgid "'history' option is zero"
++msgstr "'history'-optie is nul"
++
++#: ex_getln.c:5979
++#, c-format
++msgid ""
++"\n"
++"# %s History (newest to oldest):\n"
++msgstr ""
++"\n"
++"# %s Historie (jongste naar oudste):\n"
++
++#: ex_getln.c:5980
++msgid "Command Line"
++msgstr "Opdrachtregel"
++
++#: ex_getln.c:5981
++msgid "Search String"
++msgstr "Zoekstring"
++
++#: ex_getln.c:5982
++msgid "Expression"
++msgstr "Expressie"
++
++#: ex_getln.c:5983
++msgid "Input Line"
++msgstr "Invoerregel"
++
++#: ex_getln.c:6021
++msgid "E198: cmd_pchar beyond the command length"
++msgstr "E198: cmd_pchar is langer dan toegestaan voor een opdracht"
++
++#: ex_getln.c:6222
++msgid "E199: Active window or buffer deleted"
++msgstr "E199: actieve venster of buffer verwijderd"
++
++#: fileio.c:158
++msgid "E812: Autocommands changed buffer or buffer name"
++msgstr "E812: buffer of buffernaam gewijzigd door autocommands"
++
++#: fileio.c:418
++msgid "Illegal file name"
++msgstr "Ongeldige bestandsnaam"
++
++#: fileio.c:447
++#: fileio.c:601
++#: fileio.c:3542
++#: fileio.c:3593
++msgid "is a directory"
++msgstr "is een map"
++
++#: fileio.c:449
++msgid "is not a file"
++msgstr "is geen bestand"
++
++#: fileio.c:462
++msgid "is a device (disabled with 'opendevice' option)"
++msgstr "is een apparaat (uitgeschakeld door optie 'opendevice'"
++
++#: fileio.c:642
++#: fileio.c:4848
++msgid "[New File]"
++msgstr "[Nieuw bestand]"
++
++#: fileio.c:645
++msgid "[New DIRECTORY]"
++msgstr "[Nieuwe MAP]"
++
++#: fileio.c:679
++#: fileio.c:682
++msgid "[File too big]"
++msgstr "Bestand te groot"
++
++#: fileio.c:684
++msgid "[Permission Denied]"
++msgstr "[Geen rechten]"
++
++#: fileio.c:817
++msgid "E200: *ReadPre autocommands made the file unreadable"
++msgstr "E200: *ReadPre autocommands hebben het bestand niet-leesbaar gemaakt"
++
++#: fileio.c:819
++msgid "E201: *ReadPre autocommands must not change current buffer"
++msgstr "E201: *ReadPre autocommands mogen huidige buffer niet wijzigen"
++
++#: fileio.c:840
++msgid "Vim: Reading from stdin...\n"
++msgstr "Vim: lezen van standaardinvoer...\n"
++
++#: fileio.c:846
++msgid "Reading from stdin..."
++msgstr "Lezen van standaardinvoer..."
++
++#. Re-opening the original file failed!
++#: fileio.c:1145
++msgid "E202: Conversion made file unreadable!"
++msgstr "E202: bestand niet-leesbaar gemaakt door conversatie"
++
++#: fileio.c:2400
++msgid "[fifo/socket]"
++msgstr "[fifo/socket]"
++
++#: fileio.c:2407
++msgid "[fifo]"
++msgstr "[fifo]"
++
++#: fileio.c:2414
++msgid "[socket]"
++msgstr "[socket]"
++
++#: fileio.c:2422
++msgid "[character special]"
++msgstr "[karakter speciaal]"
++
++#: fileio.c:2429
++#: netbeans.c:3848
++msgid "[RO]"
++msgstr "[RO]"
++
++#: fileio.c:2439
++msgid "[CR missing]"
++msgstr "[CR ontbreekt]"
++
++#: fileio.c:2444
++msgid "[long lines split]"
++msgstr "[lange regels gesplitst]"
++
++#: fileio.c:2450
++#: fileio.c:4832
++msgid "[NOT converted]"
++msgstr "[NIET omgezet]"
++
++#: fileio.c:2455
++#: fileio.c:4837
++msgid "[converted]"
++msgstr "[omgezet]"
++
++#: fileio.c:2462
++#: fileio.c:4862
++msgid "[crypted]"
++msgstr "[versleuteld]"
++
++#: fileio.c:2470
++#, c-format
++msgid "[CONVERSION ERROR in line %ld]"
++msgstr "[OMZETFOUT in regel %ld]"
++
++#: fileio.c:2476
++#, c-format
++msgid "[ILLEGAL BYTE in line %ld]"
++msgstr "[ONGELDIGE BYTE in regel %ld]"
++
++#: fileio.c:2483
++msgid "[READ ERRORS]"
++msgstr "[LEESFOUTEN]"
++
++#: fileio.c:2775
++msgid "Can't find temp file for conversion"
++msgstr "Tijdelijk bestand voor conversie ontbreekt"
++
++#: fileio.c:2782
++msgid "Conversion with 'charconvert' failed"
++msgstr "Conversatie met 'charconvert' is mislukt"
++
++#: fileio.c:2785
++msgid "can't read output of 'charconvert'"
++msgstr "uitvoer van 'charconvert' kan niet worden gelezen"
++
++#: fileio.c:2852
++msgid "E821: File is encrypted with unknown method"
++msgstr "E821: bestand is met onbekende methode versleuteld"
++
++#: fileio.c:3387
++msgid "E676: No matching autocommands for acwrite buffer"
++msgstr "E676: geen overeenkomende autocommands voor 'acwrite'-buffer"
++
++#: fileio.c:3422
++msgid "E203: Autocommands deleted or unloaded buffer to be written"
++msgstr "E203: autocommands hebben buffer verwijderd of gelost die moest worden opgeslagen"
++
++#: fileio.c:3445
++msgid "E204: Autocommand changed number of lines in unexpected way"
++msgstr "E204: autocommand heeft op onverwachte wijze het aantal regels gewijzigd"
++
++#: fileio.c:3485
++msgid "NetBeans disallows writes of unmodified buffers"
++msgstr "Netbeans staat het opslaan van onveranderde buffers niet toe"
++
++#: fileio.c:3493
++msgid "Partial writes disallowed for NetBeans buffers"
++msgstr "Deelopslag voor buffers van Netbeans niet toegestaan"
++
++#: fileio.c:3548
++#: fileio.c:3566
++msgid "is not a file or writable device"
++msgstr "is geen bestand of schrijfbaar apparaat"
++
++#: fileio.c:3577
++msgid "writing to device disabled with 'opendevice' option"
++msgstr "het schrijven naar apparaat is uitgeschakeld met optie 'opendevice'"
++
++#: fileio.c:3619
++#: netbeans.c:3913
++msgid "is read-only (add ! to override)"
++msgstr "is alleen-lezen (voeg ! toe om te schrijven)"
++
++#: fileio.c:3983
++msgid "E506: Can't write to backup file (add ! to override)"
++msgstr "E506: kan niet naar back-upbestand schrijven (voeg hiervoor ! toe)"
++
++#: fileio.c:3995
++msgid "E507: Close error for backup file (add ! to override)"
++msgstr "E507: fout tijdens afsluiten van back-upbestand (voeg ! om toch af te sluiten)"
++
++#: fileio.c:3997
++msgid "E508: Can't read file for backup (add ! to override)"
++msgstr "E508: kan bestand voor back-up niet lezen (voeg ! toe om toch te lezen)"
++
++#: fileio.c:4016
++msgid "E509: Cannot create backup file (add ! to override)"
++msgstr "E509: kan back-upbestand niet aanmaken (voeg ! toe om dit toch aan te maken)"
++
++#: fileio.c:4118
++msgid "E510: Can't make backup file (add ! to override)"
++msgstr "E510: kan back-upbestand niet maken (voeg ! toe om dit toch te maken)"
++
++#: fileio.c:4180
++msgid "E460: The resource fork would be lost (add ! to override)"
++msgstr "E460: de afsplitsing van middelen zou verloren gaan (voeg ! toe om dit toch te doen)"
++
++#: fileio.c:4289
++msgid "E214: Can't find temp file for writing"
++msgstr "E214: kan tijdelijk bestand voor wegschrijven niet vinden"
++
++#: fileio.c:4307
++msgid "E213: Cannot convert (add ! to write without conversion)"
++msgstr "E213: kan niet omzetten (voeg ! toe om zonder omzetting op te slaan)"
++
++#: fileio.c:4342
++msgid "E166: Can't open linked file for writing"
++msgstr "E166: kan niet schrijven naar gekoppeld bestand"
++
++#: fileio.c:4346
++msgid "E212: Can't open file for writing"
++msgstr "E212: kan niet schrijven naar bestand"
++
++#: fileio.c:4648
++msgid "E667: Fsync failed"
++msgstr "E667: fsync is mislukt"
++
++#: fileio.c:4687
++msgid "E512: Close failed"
++msgstr "E512: Afsluiten is mislukt"
++
++#: fileio.c:4739
++msgid "E513: write error, conversion failed (make 'fenc' empty to override)"
++msgstr "E513: schrijffout waarbij omzetting is mislukt (leeg 'fenc' om te overschrijven)"
++
++#: fileio.c:4744
++#, c-format
++msgid "E513: write error, conversion failed in line %ld (make 'fenc' empty to override)"
++msgstr "E513: schrijffout waarbij omzetting in regel %ld is mislukt (leeg 'fenc' om te overschrijven)"
++
++#: fileio.c:4753
++msgid "E514: write error (file system full?)"
++msgstr "E514: schrijffout (is bestandssysteem vol?)"
++
++#: fileio.c:4821
++msgid " CONVERSION ERROR"
++msgstr " OMZETTINGFOUT"
++
++#: fileio.c:4826
++#, c-format
++msgid " in line %ld;"
++msgstr " in regel %ld;"
++
++#: fileio.c:4843
++msgid "[Device]"
++msgstr "[Apparaat]"
++
++#: fileio.c:4848
++msgid "[New]"
++msgstr "[Nieuw]"
++
++#: fileio.c:4870
++msgid " [a]"
++msgstr " [a]"
++
++#: fileio.c:4870
++msgid " appended"
++msgstr " toegevoegd"
++
++#: fileio.c:4872
++msgid " [w]"
++msgstr " [w]"
++
++#: fileio.c:4872
++msgid " written"
++msgstr " opgeslagen"
++
++#: fileio.c:4927
++msgid "E205: Patchmode: can't save original file"
++msgstr "E205: patch-modus: kan oorspronkelijke bestand niet opslaan"
++
++#: fileio.c:4950
++msgid "E206: patchmode: can't touch empty original file"
++msgstr "E206: patch-modus: kan oorspronkelijk leeg bestand niet aanraken"
++
++#: fileio.c:4965
++msgid "E207: Can't delete backup file"
++msgstr "E207: back-upbestand kan niet worden verwijderd"
++
++#: fileio.c:5031
++msgid ""
++"\n"
++"WARNING: Original file may be lost or damaged\n"
++msgstr ""
++"\n"
++"WAARSCHUWING: oorspronkelijk bestand kan verloren gaan of beschadigen\n"
++
++#: fileio.c:5033
++msgid "don't quit the editor until the file is successfully written!"
++msgstr "verlaat vim niet voordat het bestand volledig opgeslagen is!"
++
++#: fileio.c:5189
++msgid "[dos]"
++msgstr "[dos]"
++
++#: fileio.c:5189
++msgid "[dos format]"
++msgstr "[dos-format]"
++
++#: fileio.c:5196
++msgid "[mac]"
++msgstr "[mac]"
++
++#: fileio.c:5196
++msgid "[mac format]"
++msgstr "[mac-format]"
++
++#: fileio.c:5203
++msgid "[unix]"
++msgstr "[unix]"
++
++#: fileio.c:5203
++msgid "[unix format]"
++msgstr "[unix-format]"
++
++#: fileio.c:5236
++msgid "1 line, "
++msgstr "1 regel, "
++
++#: fileio.c:5238
++#, c-format
++msgid "%ld lines, "
++msgstr "%ld regels, "
++
++#: fileio.c:5241
++msgid "1 character"
++msgstr "1 teken"
++
++#: fileio.c:5245
++#, c-format
++msgid "%lld characters"
++msgstr "%lld tekens"
++
++#: fileio.c:5247
++#, c-format
++msgid "%ld characters"
++msgstr "%ld tekens"
++
++#: fileio.c:5259
++#: netbeans.c:3853
++msgid "[noeol]"
++msgstr "[noeol]"
++
++#: fileio.c:5259
++#: netbeans.c:3854
++msgid "[Incomplete last line]"
++msgstr "[Laatste regel onvolledig]"
++
++#. don't overwrite messages here
++#. must give this prompt
++#. don't use emsg() here, don't want to flush the buffers
++#: fileio.c:5278
++msgid "WARNING: The file has been changed since reading it!!!"
++msgstr "WAARSCHUWING: het bestand is na het laden gewijzigd!!!"
++
++#: fileio.c:5280
++msgid "Do you really want to write to it"
++msgstr "Wilt u er zeker naar schrijven"
++
++#: fileio.c:6639
++#, c-format
++msgid "E208: Error writing to \"%s\""
++msgstr "E208: schrijven naar \"%s\" is mislukt"
++
++#: fileio.c:6646
++#, c-format
++msgid "E209: Error closing \"%s\""
++msgstr "E209: afsluiten van \"%s\" is mislukt"
++
++#: fileio.c:6649
++#, c-format
++msgid "E210: Error reading \"%s\""
++msgstr "E210: lezen van \"%s\" is mislukt"
++
++#: fileio.c:6911
++msgid "E246: FileChangedShell autocommand deleted buffer"
++msgstr "E246: buffer verwijderd door 'autocommand' FileChangedShell"
++
++#: fileio.c:6926
++#, c-format
++msgid "E211: File \"%s\" no longer available"
++msgstr "E211: bestand \"%s\" is niet meer beschikbaar"
++
++#: fileio.c:6941
++#, c-format
++msgid "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as well"
++msgstr "W12: waarschuwing: bestand \"%s\" en de buffer zijn gewijzigd in Vim "
++
++#: fileio.c:6942
++msgid "See \":help W12\" for more info."
++msgstr "Lees \":help W12\" voor meer informatie."
++
++#: fileio.c:6946
++#, c-format
++msgid "W11: Warning: File \"%s\" has changed since editing started"
++msgstr "W11: waarschuwing: bestand \"%s\" is gewijzigd sinds het begin van het bewerken"
++
++#: fileio.c:6947
++msgid "See \":help W11\" for more info."
++msgstr "Lees \":help W11\" voor meer informatie."
++
++#: fileio.c:6951
++#, c-format
++msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
++msgstr "W16: waarschuwing: rechten van bestand \"%s\" zijn gewijzigd sinds het begin van het bewerken"
++
++#: fileio.c:6952
++msgid "See \":help W16\" for more info."
++msgstr "Lees \":help W16\" voor meer informatie"
++
++#: fileio.c:6967
++#, c-format
++msgid "W13: Warning: File \"%s\" has been created after editing started"
++msgstr "W13: waarschuwing: na het begin van het bewerken van bestand \"%s\" is deze ook elders aangemaakt"
++
++#: fileio.c:6997
++msgid "Warning"
++msgstr "Waarschuwing"
++
++#: fileio.c:6998
++msgid ""
++"&OK\n"
++"&Load File"
++msgstr ""
++"&OK\n"
++"Bestand &Laden"
++
++#: fileio.c:7121
++#, c-format
++msgid "E462: Could not prepare for reloading \"%s\""
++msgstr "E462: het voorbereiden van \"%s\" voor het opnieuw laden is mislukt"
++
++#: fileio.c:7140
++#, c-format
++msgid "E321: Could not reload \"%s\""
++msgstr "E321: kan \"%s\" niet opnieuw laden"
++
++#: fileio.c:7754
++msgid "--Deleted--"
++msgstr "--Verwijderd--"
++
++#: fileio.c:7907
++#, c-format
++msgid "auto-removing autocommand: %s <buffer=%d>"
++msgstr "automatisch verwijderen 'autocommand': %s <buffer=%d>"
++
++#. the group doesn't exist
++#: fileio.c:7953
++#, c-format
++msgid "E367: No such group: \"%s\""
++msgstr "E367: groep \"%s\" bestaat niet"
++
++#: fileio.c:8100
++#, c-format
++msgid "E215: Illegal character after *: %s"
++msgstr "E215: ongeldig teken na *: %s"
++
++#: fileio.c:8112
++#, c-format
++msgid "E216: No such event: %s"
++msgstr "E216: onbekend 'event': %s"
++
++#: fileio.c:8114
++#, c-format
++msgid "E216: No such group or event: %s"
++msgstr "E216: onbekende groep of 'event': %s"
++
++#. Highlight title
++#: fileio.c:8325
++msgid ""
++"\n"
++"--- Auto-Commands ---"
++msgstr ""
++"\n"
++"--- Auto-Commands ---"
++
++#: fileio.c:8561
++#, c-format
++msgid "E680: <buffer=%d>: invalid buffer number "
++msgstr "E680: <buffer=%d>: ongeldig buffernummer "
++
++#: fileio.c:8658
++msgid "E217: Can't execute autocommands for ALL events"
++msgstr "E217: autocommands kunnen niet voor alle 'events' worden uitgevoerd"
++
++#: fileio.c:8681
++msgid "No matching autocommands"
++msgstr "Geen overeenkomstige autocommands"
++
++#: fileio.c:9130
++msgid "E218: autocommand nesting too deep"
++msgstr "E218: hierarchie van aanroepen autocommands te diep"
++
++#: fileio.c:9483
++#, c-format
++msgid "%s Auto commands for \"%s\""
++msgstr "%s 'Auto commands' voor \"%s\""
++
++#: fileio.c:9493
++#, c-format
++msgid "Executing %s"
++msgstr "%s uitvoeren"
++
++#: fileio.c:9562
++#, c-format
++msgid "autocommand %s"
++msgstr "autocommand %s"
++
++#: fileio.c:10252
++msgid "E219: Missing {."
++msgstr "E219: ontbrekende {."
++
++#: fileio.c:10254
++msgid "E220: Missing }."
++msgstr "E220: ontbrekende }."
++
++#: fold.c:68
++msgid "E490: No fold found"
++msgstr "E490: geen vouw gevonden"
++
++#: fold.c:593
++msgid "E350: Cannot create fold with current 'foldmethod'"
++msgstr "E350: kan geen vouw aanmaken met huidige 'vouwmethode'"
++
++#: fold.c:595
++msgid "E351: Cannot delete fold with current 'foldmethod'"
++msgstr "E351: kan geen vouw verwijderen met huidige 'vouwmethode'"
++
++#: fold.c:1998
++#, c-format
++msgid "+--%3ld lines folded "
++msgstr "+--%3ld regels gevouwen "
++
++#: getchar.c:252
++msgid "E222: Add to read buffer"
++msgstr "E222: aan leesbuffer toevoegen"
++
++#: getchar.c:2418
++msgid "E223: recursive mapping"
++msgstr "E223: recursieve toewijzing"
++
++#: getchar.c:3404
++#, c-format
++msgid "E224: global abbreviation already exists for %s"
++msgstr "E224: algemene afkorting bestaat al voor %s"
++
++#: getchar.c:3407
++#, c-format
++msgid "E225: global mapping already exists for %s"
++msgstr "E225: er bestaat al een algemene toewijzing voor %s"
++
++#: getchar.c:3539
++#, c-format
++msgid "E226: abbreviation already exists for %s"
++msgstr "E226: er bestaat al een afkorting voor %s"
++
++#: getchar.c:3542
++#, c-format
++msgid "E227: mapping already exists for %s"
++msgstr "E227: toewijzing bestaat al voor %s"
++
++#: getchar.c:3610
++msgid "No abbreviation found"
++msgstr "Geen afkorting gevonden"
++
++#: getchar.c:3612
++msgid "No mapping found"
++msgstr "Geen toewijzing gevonden"
++
++#: getchar.c:4725
++msgid "E228: makemap: Illegal mode"
++msgstr "E228: makemap: ongeldige modus"
++
++#: gui.c:226
++msgid "E229: Cannot start the GUI"
++msgstr "E229: de GUI kan niet worden gestart"
++
++#: gui.c:361
++#, c-format
++msgid "E230: Cannot read from \"%s\""
++msgstr "E230: kan niet gelezen worden uit \"%s\""
++
++#: gui.c:487
++msgid "E665: Cannot start GUI, no valid font found"
++msgstr "E665: de GUI kan niet gestart worden, er is geen geldig lettertype gevonden"
++
++#: gui.c:492
++msgid "E231: 'guifontwide' invalid"
++msgstr "E231: 'guifontwide' ongeldig"
++
++#: gui.c:598
++msgid "E599: Value of 'imactivatekey' is invalid"
++msgstr "E599: waarde van 'imactivatekey' is ongeldig"
++
++#: gui.c:4528
++#, c-format
++msgid "E254: Cannot allocate color %s"
++msgstr "E254: kan de kleur %s niet reserveren"
++
++#: gui.c:5112
++msgid "No match at cursor, finding next"
++msgstr "Op cursorpositie is geen overeenkomst: de volgende zoeken"
++
++#: gui_at_fs.c:300
++msgid "<cannot open> "
++msgstr "<kan niet openen> "
++
++#: gui_at_fs.c:1133
++#, c-format
++msgid "E616: vim_SelFile: can't get font %s"
++msgstr "E616: vim_SelFile: lettertype %s niet gevonden"
++
++#: gui_at_fs.c:2767
++msgid "E614: vim_SelFile: can't return to current directory"
++msgstr "E614: vim_SelFile: teruggaan naar huidige map is niet mogelijk"
++
++#: gui_at_fs.c:2787
++msgid "Pathname:"
++msgstr "Padnaam:"
++
++#: gui_at_fs.c:2793
++msgid "E615: vim_SelFile: can't get current directory"
++msgstr "E615: vim_SelFile: vaststellen huidige map is niet mogelijk"
++
++#: gui_at_fs.c:2801
++#: gui_xmdlg.c:931
++msgid "OK"
++msgstr "Ok"
++
++#: gui_at_fs.c:2801
++#: gui_gtk.c:2818
++#: gui_xmdlg.c:940
++msgid "Cancel"
++msgstr "Annuleren"
++
++#: gui_at_sb.c:490
++msgid "Scrollbar Widget: Could not get geometry of thumb pixmap."
++msgstr "Scrollbar-widget: vaststellen afmetingen van miniaturenkaart niet mogelijk."
++
++#: gui_athena.c:2160
++#: gui_motif.c:2588
++msgid "Vim dialog"
++msgstr "Vim-dialoog"
++
++#: gui_beval.c:202
++#: gui_w32.c:4740
++msgid "E232: Cannot create BalloonEval with both message and callback"
++msgstr "E232: aanmaken 'BalloonEval' met zowel een bericht als een 'callback' is niet mogelijk"
++
++#: gui_gtk.c:1694
++msgid "Vim dialog..."
++msgstr "Vim-dialoog..."
++
++#: gui_gtk.c:2145
++#: message.c:3654
++msgid ""
++"&Yes\n"
++"&No\n"
++"&Cancel"
++msgstr ""
++"&Ja\n"
++"&Nee\n"
++"&Annuleren"
++
++#: gui_gtk.c:2343
++msgid "Input _Methods"
++msgstr "Invoer_wijzen"
++
++#: gui_gtk.c:2621
++#: gui_motif.c:3761
++msgid "VIM - Search and Replace..."
++msgstr "VIM - zoeken en vervangen..."
++
++#: gui_gtk.c:2629
++#: gui_motif.c:3763
++msgid "VIM - Search..."
++msgstr "VIM - zoeken..."
++
++#: gui_gtk.c:2661
++#: gui_motif.c:3872
++msgid "Find what:"
++msgstr "Zoek naar:"
++
++#: gui_gtk.c:2679
++#: gui_motif.c:3905
++msgid "Replace with:"
++msgstr "Vervang door:"
++
++#. whole word only button
++#: gui_gtk.c:2711
++#: gui_motif.c:4026
++msgid "Match whole word only"
++msgstr "Alleen volledig woord"
++
++#. match case button
++#: gui_gtk.c:2722
++#: gui_motif.c:4038
++msgid "Match case"
++msgstr "Hoofdlettergevoelig"
++
++#: gui_gtk.c:2732
++#: gui_motif.c:3977
++msgid "Direction"
++msgstr "Richting"
++
++#. 'Up' and 'Down' buttons
++#: gui_gtk.c:2744
++#: gui_motif.c:3990
++msgid "Up"
++msgstr "Opwaarts"
++
++#: gui_gtk.c:2748
++#: gui_motif.c:3999
++msgid "Down"
++msgstr "Neerwaarts"
++
++#: gui_gtk.c:2770
++#: gui_gtk.c:2772
++msgid "Find Next"
++msgstr "Volgende zoeken"
++
++#: gui_gtk.c:2789
++#: gui_gtk.c:2791
++msgid "Replace"
++msgstr "Vervangen"
++
++#: gui_gtk.c:2802
++#: gui_gtk.c:2804
++msgid "Replace All"
++msgstr "Alles vervangen"
++
++#: gui_gtk_x11.c:2432
++msgid "Vim: Received \"die\" request from session manager\n"
++msgstr "Vim: \"die\"-verzoek van sessiebeheerder ontvangen\n"
++
++#: gui_gtk_x11.c:3259
++msgid "Close"
++msgstr "Sluiten"
++
++#: gui_gtk_x11.c:3260
++#: gui_w48.c:2374
++msgid "New tab"
++msgstr "Nieuw tabblad"
++
++#: gui_gtk_x11.c:3261
++msgid "Open Tab..."
++msgstr "Tabblad openen..."
++
++#: gui_gtk_x11.c:4092
++msgid "Vim: Main window unexpectedly destroyed\n"
++msgstr "Vim: hoofdvenster onverwacht gesloten\n"
++
++#: gui_gtk_x11.c:4807
++msgid "Font Selection"
++msgstr "Lettertypeselectie"
++
++#: gui_motif.c:2355
++msgid "&Filter"
++msgstr "&Filter"
++
++#: gui_motif.c:2356
++#: gui_motif.c:3840
++msgid "&Cancel"
++msgstr "&Annuleren"
++
++#: gui_motif.c:2357
++msgid "Directories"
++msgstr "Mappen"
++
++#: gui_motif.c:2358
++msgid "Filter"
++msgstr "Filter"
++
++#: gui_motif.c:2359
++msgid "&Help"
++msgstr "&Hulp"
++
++#: gui_motif.c:2360
++msgid "Files"
++msgstr "Bestanden"
++
++#: gui_motif.c:2361
++msgid "&OK"
++msgstr "&Ok"
++
++#: gui_motif.c:2362
++msgid "Selection"
++msgstr "Selectie"
++
++#: gui_motif.c:3792
++msgid "Find &Next"
++msgstr "&Volgende zoeken"
++
++#: gui_motif.c:3807
++msgid "&Replace"
++msgstr "Ve&rvangen"
++
++#: gui_motif.c:3818
++msgid "Replace &All"
++msgstr "&Alles vervangen"
++
++#: gui_motif.c:3829
++msgid "&Undo"
++msgstr "&Herstellen"
++
++#: gui_riscos.c:953
++#, c-format
++msgid "E610: Can't load Zap font '%s'"
++msgstr "E610: Zap-lettertype '%s' kan niet worden geladen"
++
++#: gui_riscos.c:1052
++#, c-format
++msgid "E611: Can't use font %s"
++msgstr "E611: lettertype %s kan niet worden gebruikt"
++
++#: gui_riscos.c:3282
++msgid ""
++"\n"
++"Sending message to terminate child process.\n"
++msgstr ""
++"\n"
++"Bericht versturen om kindproces te beÃ«indigen.\n"
++
++#: gui_w32.c:1178
++#, c-format
++msgid "E671: Cannot find window title \"%s\""
++msgstr "E671: kan venstertitel \"%s\" niet vinden"
++
++#: gui_w32.c:1191
++#, c-format
++msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
++msgstr "E243: argument niet ondersteund: \"-%s\"; gebruik de OLE-versie."
++
++#: gui_w32.c:1432
++msgid "E672: Unable to open window inside MDI application"
++msgstr "E672: kan geen venster binnen MDI-applicatie openen"
++
++#: gui_w48.c:2373
++msgid "Close tab"
++msgstr "Tabblad sluiten"
++
++#: gui_w48.c:2376
++msgid "Open tab..."
++msgstr "Tabblad openen..."
++
++#: gui_w48.c:2632
++msgid "Find string (use '\\\\' to find  a '\\')"
++msgstr "Tekenreeks zoeken (gebruik '\\\\' om een '\\' te vinden)"
++
++#: gui_w48.c:2668
++msgid "Find & Replace (use '\\\\' to find  a '\\')"
++msgstr "Zoeken & vervangen (gebruik '\\\\' om een '\\' te vinden')"
++
++#. We fake this: Use a filter that doesn't select anything and a default
++#. * file name that won't be used.
++#: gui_w48.c:3462
++msgid "Not Used"
++msgstr "Niet gebruikt"
++
++#: gui_w48.c:3463
++msgid "Directory\t*.nothing\n"
++msgstr "Map\t*.niets\n"
++
++#: gui_x11.c:1545
++msgid "Vim E458: Cannot allocate colormap entry, some colors may be incorrect"
++msgstr "E458: kan geen kleur toewijzen, sommige kleuren kunnen onjuist zijn"
++
++#: gui_x11.c:2137
++#, c-format
++msgid "E250: Fonts for the following charsets are missing in fontset %s:"
++msgstr "E250: lettertypen voor de volgende tekenverzamelingen ontbreken in verzameling %s:"
++
++#: gui_x11.c:2180
++#, c-format
++msgid "E252: Fontset name: %s"
++msgstr "E252: naam lettertypeverzameling: %s"
++
++#: gui_x11.c:2181
++#, c-format
++msgid "Font '%s' is not fixed-width"
++msgstr "Lettertype '%s' heeft geen vaste breedte"
++
++#: gui_x11.c:2200
++#, c-format
++msgid "E253: Fontset name: %s\n"
++msgstr "E253: naam lettertypeverzameling: %s\n"
++
++#: gui_x11.c:2201
++#, c-format
++msgid "Font0: %s\n"
++msgstr "Font0: %s\n"
++
++#: gui_x11.c:2202
++#, c-format
++msgid "Font1: %s\n"
++msgstr "Font1: %s\n"
++
++#: gui_x11.c:2203
++#, c-format
++msgid "Font%ld width is not twice that of font0\n"
++msgstr "Breedte font%ld is niet het dubbele van font0\n"
++
++#: gui_x11.c:2204
++#, c-format
++msgid "Font0 width: %ld\n"
++msgstr "Font0-breedte: %ld\n"
++
++#: gui_x11.c:2205
++#, c-format
++msgid ""
++"Font1 width: %ld\n"
++"\n"
++msgstr ""
++"Font1-breedte: %ld\n"
++"\n"
++
++#: gui_xmdlg.c:690
++#: gui_xmdlg.c:809
++msgid "Invalid font specification"
++msgstr "Onjuiste specificatie van lettertype"
++
++#: gui_xmdlg.c:691
++#: gui_xmdlg.c:810
++msgid "&Dismiss"
++msgstr "&Afwijzen"
++
++#: gui_xmdlg.c:700
++msgid "no specific match"
++msgstr "geen specifieke overeenkomst"
++
++#: gui_xmdlg.c:909
++msgid "Vim - Font Selector"
++msgstr "Vim - Lettertypekiezer"
++
++#: gui_xmdlg.c:978
++msgid "Name:"
++msgstr "Naam:"
++
++#. create toggle button
++#: gui_xmdlg.c:1018
++msgid "Show size in Points"
++msgstr "Grootte in punten tonen"
++
++#: gui_xmdlg.c:1037
++msgid "Encoding:"
++msgstr "Codering:"
++
++#: gui_xmdlg.c:1083
++msgid "Font:"
++msgstr "Lettertype:"
++
++#: gui_xmdlg.c:1116
++msgid "Style:"
++msgstr "Stijl:"
++
++#: gui_xmdlg.c:1148
++msgid "Size:"
++msgstr "Grootte:"
++
++#: hangulin.c:610
++msgid "E256: Hangul automata ERROR"
++msgstr "E256: 'Hangul automata'-fout"
++
++#: hardcopy.c:210
++msgid "E550: Missing colon"
++msgstr "E550: dubbelepunt ontbreekt"
++
++#: hardcopy.c:222
++msgid "E551: Illegal component"
++msgstr "E551: ongeldige component"
++
++#: hardcopy.c:230
++msgid "E552: digit expected"
++msgstr "E552: cijfer verwacht"
++
++#: hardcopy.c:501
++#, c-format
++msgid "Page %d"
++msgstr "Pagina %d"
++
++#: hardcopy.c:658
++msgid "No text to be printed"
++msgstr "Geen tekst om af te drukken"
++
++#: hardcopy.c:736
++#, c-format
++msgid "Printing page %d (%d%%)"
++msgstr "Afdrukken van pagina %d (%d%%)"
++
++#: hardcopy.c:748
++#, c-format
++msgid " Copy %d of %d"
++msgstr "Kopie %d van %d"
++
++#: hardcopy.c:806
++#, c-format
++msgid "Printed: %s"
++msgstr "Afgedrukt: %s"
++
++#: hardcopy.c:814
++msgid "Printing aborted"
++msgstr "Afdrukken afgebroken"
++
++#: hardcopy.c:1469
++msgid "E455: Error writing to PostScript output file"
++msgstr "E455: wegschrijven Postscript-uitvoerbestand is mislukt"
++
++#: hardcopy.c:1931
++#, c-format
++msgid "E624: Can't open file \"%s\""
++msgstr "E624: openen bestand \"%s\" is mislukt"
++
++#: hardcopy.c:1941
++#: hardcopy.c:2822
++#, c-format
++msgid "E457: Can't read PostScript resource file \"%s\""
++msgstr "E457: kan 'Postscript resource'-bestand \"%s\" niet lezen"
++
++#: hardcopy.c:1957
++#, c-format
++msgid "E618: file \"%s\" is not a PostScript resource file"
++msgstr "E618L bestand \"%s\" is geen 'Postscript resource'-bestand"
++
++#: hardcopy.c:1975
++#: hardcopy.c:1994
++#: hardcopy.c:2037
++#, c-format
++msgid "E619: file \"%s\" is not a supported PostScript resource file"
++msgstr "E619: bestand \"%s\" is geen ondersteund 'Postscript resource'-bestand"
++
++#: hardcopy.c:2056
++#, c-format
++msgid "E621: \"%s\" resource file has wrong version"
++msgstr "E621: 'resource'-bestand \"%s\" heeft verkeerde versie"
++
++#: hardcopy.c:2543
++msgid "E673: Incompatible multi-byte encoding and character set."
++msgstr "E673: Multi-byte-codering en de tekenverzameling zijn onverenigbaar."
++
++#: hardcopy.c:2560
++msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
++msgstr "E674: printmbcharset mag bij multi-byte-codering niet leeg zijn."
++
++#: hardcopy.c:2578
++msgid "E675: No default font specified for multi-byte printing."
++msgstr "E675: geen standaard lettertype opgegeven voor multi-byte-afdrukken."
++
++#: hardcopy.c:2771
++msgid "E324: Can't open PostScript output file"
++msgstr "E324: openen van PostScript-uitoverbestand is mislukt"
++
++#: hardcopy.c:2808
++#, c-format
++msgid "E456: Can't open file \"%s\""
++msgstr "E456: Bestand \"%s\" kan niet worden geopend"
++
++#: hardcopy.c:2942
++msgid "E456: Can't find PostScript resource file \"prolog.ps\""
++msgstr "E456: 'PostScript resource'-bestand \"prolog.ps\" is niet gevonden"
++
++#: hardcopy.c:2955
++msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
++msgstr "E456: 'PostScript resource'-bestand \"cidfont.ps\" is niet gevonden"
++
++#: hardcopy.c:2993
++#: hardcopy.c:3015
++#: hardcopy.c:3044
++#, c-format
++msgid "E456: Can't find PostScript resource file \"%s.ps\""
++msgstr "E456: 'PostScript resource'-bestand \"%s.ps\" is niet gevonden"
++
++#: hardcopy.c:3031
++#, c-format
++msgid "E620: Unable to convert to print encoding \"%s\""
++msgstr "E620: omzetten naar afdrukcodering \"%s\" is mislukt"
++
++#: hardcopy.c:3285
++msgid "Sending to printer..."
++msgstr "Naar printer versturen..."
++
++#: hardcopy.c:3289
++msgid "E365: Failed to print PostScript file"
++msgstr "E365: Afdrukken van PostScript-bestand is mislukt"
++
++#: hardcopy.c:3291
++msgid "Print job sent."
++msgstr "Afdrukopdracht verzonden"
++
++#: if_cscope.c:77
++msgid "Add a new database"
++msgstr "Nieuwe databank toevoegen"
++
++#: if_cscope.c:79
++msgid "Query for a pattern"
++msgstr "Naar een patroon zoeken"
++
++#: if_cscope.c:81
++msgid "Show this message"
++msgstr "Dit bericht tonen"
++
++#: if_cscope.c:83
++msgid "Kill a connection"
++msgstr "Een verbinding verbreken"
++
++#: if_cscope.c:85
++msgid "Reinit all connections"
++msgstr "Alle verbindingen opnieuw initialiseren"
++
++#: if_cscope.c:87
++msgid "Show connections"
++msgstr "Verbindingen tonen"
++
++#: if_cscope.c:95
++#, c-format
++msgid "E560: Usage: cs[cope] %s"
++msgstr "E560: Gebruik: cs[cope] %s"
++
++#: if_cscope.c:236
++msgid "This cscope command does not support splitting the window.\n"
++msgstr "Deze cscope-opdracht ondersteunt niet het splitsen van het venster.\n"
++
++#: if_cscope.c:287
++msgid "E562: Usage: cstag <ident>"
++msgstr "E562: Gebruik: cstag <ident>"
++
++#: if_cscope.c:345
++msgid "E257: cstag: tag not found"
++msgstr "E257: cstag: tag is gevonden"
++
++#: if_cscope.c:515
++#, c-format
++msgid "E563: stat(%s) error: %d"
++msgstr "E563: bevraag((%s) fout: %d"
++
++#: if_cscope.c:525
++msgid "E563: stat error"
++msgstr "E563: bevragingsfout"
++
++#: if_cscope.c:622
++#, c-format
++msgid "E564: %s is not a directory or a valid cscope database"
++msgstr "E564: %s is geen map of een geldige cscope-databank"
++
++#: if_cscope.c:640
++#, c-format
++msgid "Added cscope database %s"
++msgstr "cscope-databank %s toegevoegd"
++
++#: if_cscope.c:695
++#, c-format
++msgid "E262: error reading cscope connection %ld"
++msgstr "E262: lezen van cscope-verbinding %ld is mislukt"
++
++#: if_cscope.c:802
++msgid "E561: unknown cscope search type"
++msgstr "E561: soort cscope-zoekopdracht is onbekend"
++
++#: if_cscope.c:866
++#: if_cscope.c:905
++msgid "E566: Could not create cscope pipes"
++msgstr "E566: aanmaken cscopei-pijp is mislukt"
++
++#: if_cscope.c:882
++msgid "E622: Could not fork for cscope"
++msgstr "E622: nieuw cscope-proces beginnen is mislukt"
++
++#: if_cscope.c:992
++#: if_cscope.c:1029
++msgid "cs_create_connection exec failed"
++msgstr "uitvoering cs_create_connection is mislukt"
++
++#: if_cscope.c:1002
++#: if_cscope.c:1042
++msgid "cs_create_connection: fdopen for to_fp failed"
++msgstr "cs_create_connection: fdopen voor to_fp is mislukt"
++
++#: if_cscope.c:1004
++#: if_cscope.c:1046
++msgid "cs_create_connection: fdopen for fr_fp failed"
++msgstr "cs_create_connection: fdopen voor fr_fp is mislukt"
++
++#: if_cscope.c:1030
++msgid "E623: Could not spawn cscope process"
++msgstr "E623: voortbrengen cscope-proces is mislukt"
++
++#: if_cscope.c:1074
++msgid "E567: no cscope connections"
++msgstr "E567: geen cscope-verbindingen"
++
++#: if_cscope.c:1155
++#, c-format
++msgid "E469: invalid cscopequickfix flag %c for %c"
++msgstr "E469: cscopequickfix-vlag %c voor %c is ongeldig"
++
++#: if_cscope.c:1218
++#, c-format
++msgid "E259: no matches found for cscope query %s of %s"
++msgstr "E259: cscope-zoekopdracht %s van %s leverde geen resultaten"
++
++#: if_cscope.c:1324
++msgid "cscope commands:\n"
++msgstr "cscope-opdrachten:\n"
++
++#: if_cscope.c:1333
++#, c-format
++msgid "%-5s: %s%*s (Usage: %s)"
++msgstr "%-5s: %s%*s (Gebruik: %s)"
++
++#: if_cscope.c:1338
++msgid ""
++"\n"
++"       c: Find functions calling this function\n"
++"       d: Find functions called by this function\n"
++"       e: Find this egrep pattern\n"
++"       f: Find this file\n"
++"       g: Find this definition\n"
++"       i: Find files #including this file\n"
++"       s: Find this C symbol\n"
++"       t: Find assignments to\n"
++msgstr ""
++"\n"
++"       c: zoek functies die deze functie aanroepen\n"
++"       d: zoek functies die door deze functie worden aangeroepen\n"
++"       e: zoek op dit egrep-patroon\n"
++"       f: zoek dit bestand\n"
++"       g: zoek deze definitie\n"
++"       i: zoek bestanden #inclusief dit bestand\n"
++"       s: zoek dit C-symbool\n"
++"       t: zoek toekenningen aan\n"
++
++#: if_cscope.c:1426
++#, c-format
++msgid "E625: cannot open cscope database: %s"
++msgstr "E625: openen is mislukt van cscope-databank: %s"
++
++#: if_cscope.c:1444
++msgid "E626: cannot get cscope database information"
++msgstr "E626: opvragen cscope-databankinformatie is mislukt"
++
++#: if_cscope.c:1469
++msgid "E568: duplicate cscope database not added"
++msgstr "E568: dubbele cscope-databank is niet toegevoegd"
++
++#: if_cscope.c:1614
++#, c-format
++msgid "E261: cscope connection %s not found"
++msgstr "E261: cscope-verbinding %s is niet gevonden"
++
++#: if_cscope.c:1648
++#, c-format
++msgid "cscope connection %s closed"
++msgstr "cscope-verbinding %s is verbroken"
++
++#. should not reach here
++#: if_cscope.c:1788
++msgid "E570: fatal error in cs_manage_matches"
++msgstr "E570: fatale fout in cs_manage_matches"
++
++#: if_cscope.c:2050
++#, c-format
++msgid "Cscope tag: %s"
++msgstr "Cscope-tag: %s"
++
++#: if_cscope.c:2072
++msgid ""
++"\n"
++"   #   line"
++msgstr ""
++"\n"
++"   #   regel"
++
++#: if_cscope.c:2074
++msgid "filename / context / line\n"
++msgstr "bestandsnaam / context / regel\n"
++
++#: if_cscope.c:2186
++#, c-format
++msgid "E609: Cscope error: %s"
++msgstr "E609: Cscope-fout: %s"
++
++#: if_cscope.c:2459
++msgid "All cscope databases reset"
++msgstr "Alle cscope-databanken opnieuw ingesteld"
++
++#: if_cscope.c:2526
++msgid "no cscope connections\n"
++msgstr "geen cscope-verbindingen\n"
++
++#: if_cscope.c:2530
++msgid " # pid    database name                       prepend path\n"
++msgstr " # pid    databanknaam                        padvoorvoegsel\n"
++
++#: if_mzsch.c:1038
++msgid "E815: Sorry, this command is disabled, the MzScheme libraries could not be loaded."
++msgstr "E815: helaas, deze opdracht is uitgeschakeld. De MzScheme-bibliotheken kunnen niet geladen worden."
++
++#: if_mzsch.c:1425
++#: if_python.c:1271
++#: if_tcl.c:1404
++msgid "invalid expression"
++msgstr "ongeldige uitdrukking"
++
++#: if_mzsch.c:1433
++#: if_python.c:1290
++#: if_tcl.c:1409
++msgid "expressions disabled at compile time"
++msgstr "tijdens compileren zijn de expressies uitgeschakeld"
++
++#: if_mzsch.c:1522
++msgid "hidden option"
++msgstr "verborgen optie"
++
++#: if_mzsch.c:1524
++#: if_tcl.c:501
++msgid "unknown option"
++msgstr "onbekende optie"
++
++#: if_mzsch.c:1683
++msgid "window index is out of range"
++msgstr "vensterindex valt buiten het bereik"
++
++#: if_mzsch.c:1843
++msgid "couldn't open buffer"
++msgstr "buffer openen is mislukt"
++
++#: if_mzsch.c:2123
++#: if_mzsch.c:2153
++#: if_mzsch.c:2250
++#: if_mzsch.c:2314
++#: if_mzsch.c:2435
++#: if_mzsch.c:2492
++#: if_python.c:2508
++#: if_python.c:2542
++#: if_python.c:2601
++#: if_python.c:2668
++#: if_python.c:2790
++#: if_python.c:2842
++#: if_tcl.c:684
++#: if_tcl.c:729
++#: if_tcl.c:803
++#: if_tcl.c:875
++#: if_tcl.c:2017
++msgid "cannot save undo information"
++msgstr "herstelinformatie kan niet worden opgeslagen"
++
++#: if_mzsch.c:2128
++#: if_mzsch.c:2258
++#: if_mzsch.c:2328
++#: if_python.c:2510
++#: if_python.c:2608
++#: if_python.c:2679
++msgid "cannot delete line"
++msgstr "regel kan niet worden verwijderd"
++
++#: if_mzsch.c:2159
++#: if_mzsch.c:2343
++#: if_python.c:2547
++#: if_python.c:2695
++#: if_tcl.c:690
++#: if_tcl.c:2039
++msgid "cannot replace line"
++msgstr "regel kan niet worden vervangen"
++
++#: if_mzsch.c:2358
++#: if_mzsch.c:2441
++#: if_mzsch.c:2502
++#: if_python.c:2713
++#: if_python.c:2792
++#: if_python.c:2850
++msgid "cannot insert line"
++msgstr "regel kan niet worden ingevoegd"
++
++#: if_mzsch.c:2593
++#: if_python.c:2962
++msgid "string cannot contain newlines"
++msgstr "tekenreeks kan geen regeleinden bevatten"
++
++#: if_mzsch.c:3034
++msgid "Vim error: ~a"
++msgstr "Vim-fout: ~a"
++
++#: if_mzsch.c:3067
++msgid "Vim error"
++msgstr "Vim-fout"
++
++#: if_mzsch.c:3133
++msgid "buffer is invalid"
++msgstr "buffer is ongeldig"
++
++#: if_mzsch.c:3142
++msgid "window is invalid"
++msgstr "venster is ongeldig"
++
++#: if_mzsch.c:3162
++msgid "linenr out of range"
++msgstr "regelnummer buiten het bereik"
++
++#: if_mzsch.c:3313
++#: if_mzsch.c:3355
++msgid "not allowed in the Vim sandbox"
++msgstr "niet toegestaan in de Vim-zandbak"
++
++#: if_python.c:517
++msgid "E263: Sorry, this command is disabled, the Python library could not be loaded."
++msgstr "E263: helaas, deze opdracht is uitgeschakeld. De Python-bibliotheek kan niet worden geladen."
++
++#: if_python.c:583
++msgid "E659: Cannot invoke Python recursively"
++msgstr "E659: Python kan niet recursief worden aangeroepen"
++
++#: if_python.c:776
++msgid "can't delete OutputObject attributes"
++msgstr "attributen van OutputObject kunnen niet worden verwijderd"
++
++#: if_python.c:783
++msgid "softspace must be an integer"
++msgstr "zachte spatie moet een geheel getal zijn"
++
++#: if_python.c:791
++msgid "invalid attribute"
++msgstr "ongeldig attribuut"
++
++#: if_python.c:830
++#: if_python.c:844
++msgid "writelines() requires list of strings"
++msgstr "writelines() vereist een lijst met tekenreeksen"
++
++#: if_python.c:970
++msgid "E264: Python: Error initialising I/O objects"
++msgstr "E264: Python: initialiseren I/O-objecten is mislukt"
++
++#: if_python.c:1303
++msgid "attempt to refer to deleted buffer"
++msgstr "poging om naar een verwijderd buffer te verwijzen"
++
++#: if_python.c:1318
++#: if_python.c:1359
++#: if_python.c:1423
++#: if_tcl.c:1216
++msgid "line number out of range"
++msgstr "regelnummer valt buiten het bereik"
++
++#: if_python.c:1558
++#, c-format
++msgid "<buffer object (deleted) at %p>"
++msgstr "<buffer-object (verwijderd) bij %p>"
++
++#: if_python.c:1649
++#: if_tcl.c:836
++msgid "invalid mark name"
++msgstr "naam markering ongeldig"
++
++#: if_python.c:1927
++msgid "no such buffer"
++msgstr "onbekende buffer"
++
++#: if_python.c:2015
++msgid "attempt to refer to deleted window"
++msgstr "poging om naar een verwijderd venster te verwijzen"
++
++#: if_python.c:2060
++msgid "readonly attribute"
++msgstr "alleen-lezen attribuut"
++
++#: if_python.c:2074
++msgid "cursor position outside buffer"
++msgstr "cursorpositie valt buiten buffer"
++
++#: if_python.c:2157
++#, c-format
++msgid "<window object (deleted) at %p>"
++msgstr "<venster-object (verwijderd) bij %p>"
++
++#: if_python.c:2169
++#, c-format
++msgid "<window object (unknown) at %p>"
++msgstr "<venster-object (onbekend) bij %p>"
++
++#: if_python.c:2172
++#, c-format
++msgid "<window %d>"
++msgstr "<venster %d>"
++
++#: if_python.c:2246
++msgid "no such window"
++msgstr "onbekend venster"
++
++#: if_ruby.c:554
++msgid "E265: $_ must be an instance of String"
++msgstr "E265: $_ moet een instantie van String zijn"
++
++#: if_ruby.c:630
++msgid "E266: Sorry, this command is disabled, the Ruby library could not be loaded."
++msgstr "E266: helaas, deze opdracht is uitgeschakeld. De Ruby-bibliotheek kan niet worden geladen."
++
++#: if_ruby.c:662
++msgid "E267: unexpected return"
++msgstr "E267: onverwacht resultaat"
++
++#: if_ruby.c:665
++msgid "E268: unexpected next"
++msgstr "E268: onverwachte volgende"
++
++#: if_ruby.c:668
++msgid "E269: unexpected break"
++msgstr "E269: onverwachte onderbreking"
++
++#: if_ruby.c:671
++msgid "E270: unexpected redo"
++msgstr "E270: onverwachte herstelopdracht"
++
++#: if_ruby.c:674
++msgid "E271: retry outside of rescue clause"
++msgstr "E271: hernieuwde poging buiten de reddingsclausule"
++
++#: if_ruby.c:686
++msgid "E272: unhandled exception"
++msgstr "E272: niet-afgehandelde uitzondering"
++
++#: if_ruby.c:701
++#, c-format
++msgid "E273: unknown longjmp status %d"
++msgstr "E273: onbekende longjmp-status %d"
++
++#: if_sniff.c:64
++msgid "Toggle implementation/definition"
++msgstr "Implementatie/definitie wisselen"
++
++#: if_sniff.c:65
++msgid "Show base class of"
++msgstr "Toon basisklasse van"
++
++#: if_sniff.c:66
++msgid "Show overridden member function"
++msgstr "Toon overschreven member-functie"
++
++#: if_sniff.c:67
++msgid "Retrieve from file"
++msgstr "Uit bestand halen"
++
++#: if_sniff.c:68
++msgid "Retrieve from project"
++msgstr "Uit project halen"
++
++#: if_sniff.c:70
++msgid "Retrieve from all projects"
++msgstr "Uit alle projecten halen"
++
++#: if_sniff.c:71
++msgid "Retrieve"
++msgstr "Ophalen"
++
++#: if_sniff.c:72
++msgid "Show source of"
++msgstr "Toon broncode van"
++
++#: if_sniff.c:73
++msgid "Find symbol"
++msgstr "Zoek symbool"
++
++#: if_sniff.c:74
++msgid "Browse class"
++msgstr "Bekijk klasse"
++
++#: if_sniff.c:75
++msgid "Show class in hierarchy"
++msgstr "Toon klasse in hierarchie"
++
++#: if_sniff.c:76
++msgid "Show class in restricted hierarchy"
++msgstr "Toon klasse in beperkte hierarchie"
++
++#: if_sniff.c:77
++msgid "Xref refers to"
++msgstr "Xref verwijst naar"
++
++#: if_sniff.c:78
++msgid "Xref referred by"
++msgstr "Xref wordt naar verwezen door"
++
++#: if_sniff.c:79
++msgid "Xref has a"
++msgstr "Xref heeft een"
++
++#: if_sniff.c:80
++msgid "Xref used by"
++msgstr "Xref gebruikt door"
++
++#: if_sniff.c:81
++msgid "Show docu of"
++msgstr "Toon documentatie van"
++
++#: if_sniff.c:82
++msgid "Generate docu for"
++msgstr "Genereer documentatie voor"
++
++#: if_sniff.c:94
++msgid "Cannot connect to SNiFF+. Check environment (sniffemacs must be found in $PATH).\n"
++msgstr "Verbinden met SNiFF+ is mislukt. Controleer omgevingsvariabelen (sniffemacs moet in $PATH staan).\n"
++
++#: if_sniff.c:422
++msgid "E274: Sniff: Error during read. Disconnected"
++msgstr "E274: Sniff: leesfout. Verbroken"
++
++#: if_sniff.c:550
++msgid "SNiFF+ is currently "
++msgstr "SNiFF+ is momenteel "
++
++#: if_sniff.c:552
++msgid "not "
++msgstr "niet "
++
++#: if_sniff.c:553
++msgid "connected"
++msgstr "verbonden"
++
++#: if_sniff.c:589
++#, c-format
++msgid "E275: Unknown SNiFF+ request: %s"
++msgstr "E275: onbekend SNiFF+-verzoek: %s"
++
++#: if_sniff.c:602
++msgid "E276: Error connecting to SNiFF+"
++msgstr "E276: verbinden met SNiFF+ is mislukt"
++
++#: if_sniff.c:1013
++msgid "E278: SNiFF+ not connected"
++msgstr "E278: SNiFF+ niet verbonden"
++
++#: if_sniff.c:1022
++msgid "E279: Not a SNiFF+ buffer"
++msgstr "E279: geen SNiFF+-buffer"
++
++#: if_sniff.c:1089
++msgid "Sniff: Error during write. Disconnected"
++msgstr "Sniff: schrijven is mislukt. Verbroken"
++
++#: if_tcl.c:419
++msgid "invalid buffer number"
++msgstr "buffernummer is ongeldig"
++
++#: if_tcl.c:465
++#: if_tcl.c:935
++#: if_tcl.c:1115
++msgid "not implemented yet"
++msgstr "nog niet geÃ¯mplementeerd"
++
++#. ???
++#: if_tcl.c:774
++msgid "cannot set line(s)"
++msgstr "kan regel(s) niet instellen"
++
++#: if_tcl.c:845
++msgid "mark not set"
++msgstr "markering niet ingesteld"
++
++#: if_tcl.c:852
++#: if_tcl.c:1071
++#, c-format
++msgid "row %d column %d"
++msgstr "rij %d kolom %d"
++
++#: if_tcl.c:884
++msgid "cannot insert/append line"
++msgstr "invoegen/toevoegen regel is mislukt"
++
++#: if_tcl.c:1270
++msgid "unknown flag: "
++msgstr "unbekende instelling: "
++
++#: if_tcl.c:1340
++msgid "unknown vimOption"
++msgstr "onbekende vim-optie"
++
++#: if_tcl.c:1425
++msgid "keyboard interrupt"
++msgstr "toetsenbord-interrupt"
++
++#: if_tcl.c:1430
++msgid "vim error"
++msgstr "vim-fout"
++
++#: if_tcl.c:1474
++msgid "cannot create buffer/window command: object is being deleted"
++msgstr "aanmaken buffer-/vensteropdracht is mislukt: object wordt verwijderd"
++
++#: if_tcl.c:1550
++msgid "cannot register callback command: buffer/window is already being deleted"
++msgstr " kan 'callback'-opdracht niet registreren: buffer/venster is reeds verwijderd"
++
++#. This should never happen.  Famous last word?
++#: if_tcl.c:1569
++msgid "E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"
++msgstr "E280: TCL FATALE FOUT: reflist misschien corrupt!? Meld dit a.u.b. aan vim-dev@vim.org"
++
++#: if_tcl.c:1570
++msgid "cannot register callback command: buffer/window reference not found"
++msgstr "'callback'-opdracht kan niet worden geregistreerd: buffer-/vensterreferentie ontbreekt"
++
++#: if_tcl.c:1742
++msgid "E571: Sorry, this command is disabled: the Tcl library could not be loaded."
++msgstr "E571: Helaas, deze opdracht is uitgeschakeld: het laden van de Tcl-bibliotheek is mislukt."
++
++#: if_tcl.c:1904
++msgid "E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
++msgstr "E281: Tcl-fout: afsluitcode is geen geheel getal!? Meld dit a.u.b. aan vim-dev@vim.org"
++
++#: if_tcl.c:1909
++#, c-format
++msgid "E572: exit code %d"
++msgstr "E572: afsluitcode %d"
++
++#: if_tcl.c:2025
++msgid "cannot get line"
++msgstr "kan regel niet verkrijgen"
++
++#: if_xcmdsrv.c:218
++msgid "Unable to register a command server name"
++msgstr "Het registreren van een opdrachtservernaam is mislukt"
++
++#: if_xcmdsrv.c:477
++msgid "E248: Failed to send command to the destination program"
++msgstr "E248: versturen van opdracht naar het doelprogramma is mislukt"
++
++#: if_xcmdsrv.c:750
++#, c-format
++msgid "E573: Invalid server id used: %s"
++msgstr "E573: ongeldige server-id gebruikt: %s"
++
++#: if_xcmdsrv.c:1131
++msgid "E251: VIM instance registry property is badly formed.  Deleted!"
++msgstr "E251: registereigenschap van VIM-instantie is misvormd.  Verwijderd!"
++
++#: main.c:138
++msgid "Unknown option argument"
++msgstr "Onbekend optieargument"
++
++#: main.c:140
++msgid "Too many edit arguments"
++msgstr "Teveel bewerkargumenten"
++
++#: main.c:142
++msgid "Argument missing after"
++msgstr "Argument ontbreekt na"
++
++#: main.c:144
++msgid "Garbage after option argument"
++msgstr "Rommel na optieargument"
++
++#: main.c:146
++msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
++msgstr "Teveel \"+opdracht\", \"-c opdracht\" of \"--cmd opdracht\"-argumenten"
++
++#: main.c:148
++msgid "Invalid argument for"
++msgstr "Ongeldig argument voor"
++
++#: main.c:517
++#, c-format
++msgid "%d files to edit\n"
++msgstr "%d bestanden om te bewerken\n"
++
++#: main.c:942
++msgid "netbeans is not supported with this GUI\n"
++msgstr "Netbeans wordt door deze GUI niet ondersteund\n"
++
++#: main.c:1531
++msgid "This Vim was not compiled with the diff feature."
++msgstr "Deze Vim is niet met de diff-functionaliteit gecompileerd"
++
++#: main.c:1633
++msgid "'-nb' cannot be used: not enabled at compile time\n"
++msgstr "'-nb' kan niet worden gebruikt: was tijdens compilatie niet ingeschakeld\n"
++
++#: main.c:2165
++msgid "Attempt to open script file again: \""
++msgstr "Poging scriptbestand wederom te openen: \""
++
++#: main.c:2174
++msgid "Cannot open for reading: \""
++msgstr "Openen om te lezen is mislukt: \""
++
++#: main.c:2228
++msgid "Cannot open for script output: \""
++msgstr "Openen voor script-uitvoer is mislukt: \""
++
++#: main.c:2394
++msgid "Vim: Error: Failure to start gvim from NetBeans\n"
++msgstr "Vim: Fout: gvim starten vanuit Netbeans is mislukt\n"
++
++#: main.c:2399
++msgid "Vim: Warning: Output is not to a terminal\n"
++msgstr "Vim: Waarschuwing: Uitvoer gaan niet naar een terminal\n"
++
++#: main.c:2401
++msgid "Vim: Warning: Input is not from a terminal\n"
++msgstr "Vim: Waarschuwing: Invoer komt niet van een terminal\n"
++
++#. just in case..
++#: main.c:2718
++msgid "pre-vimrc command line"
++msgstr "pre-vimrc-opdracjtregel"
++
++#: main.c:2815
++#, c-format
++msgid "E282: Cannot read from \"%s\""
++msgstr "E282: Kan niet lezen vanuit \"%s\""
++
++#: main.c:3032
++msgid ""
++"\n"
++"More info with: \"vim -h\"\n"
++msgstr ""
++"\n"
++"Meer informatie via: \"vim -h\"\n"
++
++#: main.c:3065
++msgid "[file ..]       edit specified file(s)"
++msgstr "[bestand ..]       bewerk opgegeven bestand(en)"
++
++#: main.c:3066
++msgid "-               read text from stdin"
++msgstr "-               lees tekst vanuit stdin"
++
++#: main.c:3067
++msgid "-t tag          edit file where tag is defined"
++msgstr "-t tag          bewerk bestand waar tag is gedefinieerd"
++
++#: main.c:3069
++msgid "-q [errorfile]  edit file with first error"
++msgstr "-q [foutbestand]  bewerk bestand dat eerste fout bevat"
++
++#: main.c:3078
++msgid ""
++"\n"
++"\n"
++"usage:"
++msgstr ""
++"\n"
++"\n"
++"Gebruik:"
++
++#: main.c:3081
++msgid " vim [arguments] "
++msgstr " vim [argumenten] "
++
++#: main.c:3085
++msgid ""
++"\n"
++"   or:"
++msgstr ""
++"\n"
++"   of:"
++
++#: main.c:3088
++msgid ""
++"\n"
++"Where case is ignored prepend / to make flag upper case"
++msgstr ""
++"\n"
++"Daar waar hoofdletters genegeerd worden kan met / vlag in hoofdletters gezet worden"
++
++#: main.c:3091
++msgid ""
++"\n"
++"\n"
++"Arguments:\n"
++msgstr ""
++"\n"
++"\n"
++"Argumenten:\n"
++
++#: main.c:3092
++msgid "--\t\t\tOnly file names after this"
++msgstr "--\t\t\tHierna alleen bestandsnamen"
++
++#: main.c:3094
++msgid "--literal\t\tDon't expand wildcards"
++msgstr "--literal\t\tJokertekens niet vervangen"
++
++#: main.c:3097
++msgid "-register\t\tRegister this gvim for OLE"
++msgstr "-register\t\tDeze gvim voor OLE registreren"
++
++#: main.c:3098
++msgid "-unregister\t\tUnregister gvim for OLE"
++msgstr "-unregister\t\tgvim afmelden voor OLE"
++
++#: main.c:3101
++msgid "-g\t\t\tRun using GUI (like \"gvim\")"
++msgstr "-g\t\t\tMet GUI opstarten (zoals \"gvim\")"
++
++#: main.c:3102
++msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
++msgstr "-f  of  --nofork\tVoorgrond: niet afsplitsen tijdens opstarten GUI"
++
++#: main.c:3104
++msgid "-v\t\t\tVi mode (like \"vi\")"
++msgstr "-v\t\t\tVi-modus (zoals \"vi\")"
++
++#: main.c:3105
++msgid "-e\t\t\tEx mode (like \"ex\")"
++msgstr "-e\t\t\tEx-modus (zoals \"ex\")"
++
++#: main.c:3106
++msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
++msgstr "-s\t\t\tStille (bulk)modus (alleen bij \"ex\")"
++
++#: main.c:3108
++msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
++msgstr "-d\t\t\tDiff-modus (zoals \"vimdiff\")"
++
++#: main.c:3110
++msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
++msgstr "-y\t\t\tEenvoudige modus (zoals \"evim\", zonder modus)"
++
++#: main.c:3111
++msgid "-R\t\t\tReadonly mode (like \"view\")"
++msgstr "-R\t\t\tAlleen-lezen modus (zoals \"view\")"
++
++#: main.c:3112
++msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
++msgstr "-Z\t\t\tBeperkte modus (zoals \"rvim\")"
++
++#: main.c:3113
++msgid "-m\t\t\tModifications (writing files) not allowed"
++msgstr "-m\t\t\tAanpassingen (bestanden opslaan) niet toegestaan"
++
++#: main.c:3114
++msgid "-M\t\t\tModifications in text not allowed"
++msgstr "-M\t\t\tTekstuele aanpassingen niet toegestaan"
++
++#: main.c:3115
++msgid "-b\t\t\tBinary mode"
++msgstr "-b\t\t\tBinaire modus"
++
++#: main.c:3117
++msgid "-l\t\t\tLisp mode"
++msgstr "-l\t\t\tLisp-modus"
++
++#: main.c:3119
++msgid "-C\t\t\tCompatible with Vi: 'compatible'"
++msgstr "-C\t\t\tUitwisselbaar met Vi: 'compatible'"
++
++#: main.c:3120
++msgid "-N\t\t\tNot fully Vi compatible: 'nocompatible'"
++msgstr "-N\t\t\tNiet volledig met Vi uitwisselbaar: 'nocompatible'"
++
++#: main.c:3121
++msgid "-V[N][fname]\t\tBe verbose [level N] [log messages to fname]"
++msgstr "-V[N][fname]\t\tWees uitbundig [niveau N] [schrijf berichten naar fname]"
++
++#: main.c:3123
++msgid "-D\t\t\tDebugging mode"
++msgstr "-D\t\t\tFoutopspoormodus"
++
++#: main.c:3125
++msgid "-n\t\t\tNo swap file, use memory only"
++msgstr "-n\t\t\tGeen wisselbestand, alleen geheugen gebruiken"
++
++#: main.c:3126
++msgid "-r\t\t\tList swap files and exit"
++msgstr "-r\t\t\tWisselbestanden tonen en stoppen"
++
++#: main.c:3127
++msgid "-r (with file name)\tRecover crashed session"
++msgstr "-r (bestandsnaam)\tHerstel ontspoorde sessie"
++
++#: main.c:3128
++msgid "-L\t\t\tSame as -r"
++msgstr "-L\t\t\tGelijk aan -r"
++
++#: main.c:3130
++msgid "-f\t\t\tDon't use newcli to open window"
++msgstr "-f\t\t\tGebruik geen newcli om venster te openen"
++
++#: main.c:3131
++msgid "-dev <device>\t\tUse <device> for I/O"
++msgstr "-dev <device>\t\tGebruik <device> voor in- en uitvoer"
++
++#: main.c:3134
++msgid "-A\t\t\tstart in Arabic mode"
++msgstr "-A\t\t\tIn Arabische modus starten"
++
++#: main.c:3137
++msgid "-H\t\t\tStart in Hebrew mode"
++msgstr "-H\t\t\tIn Hebrewsche modus starten"
++
++#: main.c:3140
++msgid "-F\t\t\tStart in Farsi mode"
++msgstr "-F\t\t\tIn Perzische modus starten"
++
++#: main.c:3142
++msgid "-T <terminal>\tSet terminal type to <terminal>"
++msgstr "-T <terminal>\tTerminalsoort op <terminal> instellen"
++
++#: main.c:3143
++msgid "-u <vimrc>\t\tUse <vimrc> instead of any .vimrc"
++msgstr "-u <vimrc>\t\tGebruik <vimrc> in plaats van enige .vimrc"
++
++#: main.c:3145
++msgid "-U <gvimrc>\t\tUse <gvimrc> instead of any .gvimrc"
++msgstr "-U <gvimrc>\t\tGebruik <gvimrc> in plaats van enige .gvimrc"
++
++#: main.c:3147
++msgid "--noplugin\t\tDon't load plugin scripts"
++msgstr "--noplugin\t\tGeen plugin-scripts laden"
++
++#: main.c:3149
++msgid "-p[N]\t\tOpen N tab pages (default: one for each file)"
++msgstr "-p[N]\t\tN tabpagina's openen (standaard: 1 per bestand)"
++
++#: main.c:3150
++msgid "-o[N]\t\tOpen N windows (default: one for each file)"
++msgstr "-o[N]\t\tN vensters openen (standaard: 1 per bestand)"
++
++#: main.c:3151
++msgid "-O[N]\t\tLike -o but split vertically"
++msgstr "-O[N]\t\tGelijk aan -o maar vertikaal gesplitst"
++
++#: main.c:3153
++msgid "+\t\t\tStart at end of file"
++msgstr "+\t\t\tAan einde van bestand beginnen"
++
++#: main.c:3154
++msgid "+<lnum>\t\tStart at line <lnum>"
++msgstr "+<lnum>\t\tOp regel <lnum> beginnen"
++
++#: main.c:3155
++msgid "--cmd <command>\tExecute <command> before loading any vimrc file"
++msgstr "--cmd <opdracht>\tOpdracht <opdracht> uitvoeren voor enige vimrc-bestand"
++
++#: main.c:3156
++msgid "-c <command>\t\tExecute <command> after loading the first file"
++msgstr "-c <opdracht>\t\tOpdracht <opdracht> uitvoeren na eerste bestand"
++
++#: main.c:3157
++msgid "-S <session>\t\tSource file <session> after loading the first file"
++msgstr ""
++
++#: main.c:3158
++msgid "-s <scriptin>\tRead Normal mode commands from file <scriptin>"
++msgstr ""
++
++#: main.c:3159
++msgid "-w <scriptout>\tAppend all typed commands to file <scriptout>"
++msgstr ""
++
++#: main.c:3160
++msgid "-W <scriptout>\tWrite all typed commands to file <scriptout>"
++msgstr ""
++
++#: main.c:3162
++msgid "-x\t\t\tEdit encrypted files"
++msgstr ""
++
++#: main.c:3166
++msgid "-display <display>\tConnect vim to this particular X-server"
++msgstr ""
++
++#: main.c:3168
++msgid "-X\t\t\tDo not connect to X server"
++msgstr ""
++
++#: main.c:3171
++msgid "--remote <files>\tEdit <files> in a Vim server if possible"
++msgstr ""
++
++#: main.c:3172
++msgid "--remote-silent <files>  Same, don't complain if there is no server"
++msgstr ""
++
++#: main.c:3173
++msgid "--remote-wait <files>  As --remote but wait for files to have been edited"
++msgstr ""
++
++#: main.c:3174
++msgid "--remote-wait-silent <files>  Same, don't complain if there is no server"
++msgstr ""
++
++#: main.c:3176
++msgid "--remote-tab[-wait][-silent] <files>  As --remote but use tab page per file"
++msgstr ""
++
++#: main.c:3178
++msgid "--remote-send <keys>\tSend <keys> to a Vim server and exit"
++msgstr ""
++
++#: main.c:3179
++msgid "--remote-expr <expr>\tEvaluate <expr> in a Vim server and print result"
++msgstr ""
++
++#: main.c:3180
++msgid "--serverlist\t\tList available Vim server names and exit"
++msgstr ""
++
++#: main.c:3181
++msgid "--servername <name>\tSend to/become the Vim server <name>"
++msgstr ""
++
++#: main.c:3184
++msgid "--startuptime <file>\tWrite startup timing messages to <file>"
++msgstr ""
++
++#: main.c:3187
++msgid "-i <viminfo>\t\tUse <viminfo> instead of .viminfo"
++msgstr ""
++
++#: main.c:3189
++msgid "-h  or  --help\tPrint Help (this message) and exit"
++msgstr "-h  of  --help\tDit bericht tonen en stoppen"
++
++#: main.c:3190
++msgid "--version\t\tPrint version information and exit"
++msgstr "--version\t\tVersieinformatie tonen en stoppen"
++
++#: main.c:3194
++msgid ""
++"\n"
++"Arguments recognised by gvim (Motif version):\n"
++msgstr ""
++
++#: main.c:3198
++msgid ""
++"\n"
++"Arguments recognised by gvim (neXtaw version):\n"
++msgstr ""
++
++#: main.c:3200
++msgid ""
++"\n"
++"Arguments recognised by gvim (Athena version):\n"
++msgstr ""
++
++#: main.c:3204
++msgid "-display <display>\tRun vim on <display>"
++msgstr ""
++
++#: main.c:3205
++msgid "-iconic\t\tStart vim iconified"
++msgstr ""
++
++#: main.c:3207
++msgid "-name <name>\t\tUse resource as if vim was <name>"
++msgstr ""
++
++#: main.c:3208
++msgid "\t\t\t  (Unimplemented)\n"
++msgstr ""
++
++#: main.c:3210
++msgid "-background <color>\tUse <color> for the background (also: -bg)"
++msgstr ""
++
++#: main.c:3211
++msgid "-foreground <color>\tUse <color> for normal text (also: -fg)"
++msgstr ""
++
++#: main.c:3212
++#: main.c:3232
++msgid "-font <font>\t\tUse <font> for normal text (also: -fn)"
++msgstr ""
++
++#: main.c:3213
++msgid "-boldfont <font>\tUse <font> for bold text"
++msgstr ""
++
++#: main.c:3214
++msgid "-italicfont <font>\tUse <font> for italic text"
++msgstr ""
++
++#: main.c:3215
++#: main.c:3233
++msgid "-geometry <geom>\tUse <geom> for initial geometry (also: -geom)"
++msgstr ""
++
++#: main.c:3216
++msgid "-borderwidth <width>\tUse a border width of <width> (also: -bw)"
++msgstr ""
++
++#: main.c:3217
++msgid "-scrollbarwidth <width>  Use a scrollbar width of <width> (also: -sw)"
++msgstr ""
++
++#: main.c:3219
++msgid "-menuheight <height>\tUse a menu bar height of <height> (also: -mh)"
++msgstr ""
++
++#: main.c:3221
++#: main.c:3234
++msgid "-reverse\t\tUse reverse video (also: -rv)"
++msgstr ""
++
++#: main.c:3222
++msgid "+reverse\t\tDon't use reverse video (also: +rv)"
++msgstr ""
++
++#: main.c:3223
++msgid "-xrm <resource>\tSet the specified resource"
++msgstr ""
++
++#: main.c:3226
++msgid ""
++"\n"
++"Arguments recognised by gvim (RISC OS version):\n"
++msgstr ""
++
++#: main.c:3227
++msgid "--columns <number>\tInitial width of window in columns"
++msgstr ""
++
++#: main.c:3228
++msgid "--rows <number>\tInitial height of window in rows"
++msgstr ""
++
++#: main.c:3231
++msgid ""
++"\n"
++"Arguments recognised by gvim (GTK+ version):\n"
++msgstr ""
++
++#: main.c:3235
++msgid "-display <display>\tRun vim on <display> (also: --display)"
++msgstr ""
++
++#: main.c:3237
++msgid "--role <role>\tSet a unique role to identify the main window"
++msgstr ""
++
++#: main.c:3239
++msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
++msgstr ""
++
++#: main.c:3242
++msgid "-P <parent title>\tOpen Vim inside parent application"
++msgstr ""
++
++#: main.c:3243
++msgid "--windowid <HWND>\tOpen Vim inside another win32 widget"
++msgstr ""
++
++#: main.c:3587
++msgid "No display"
++msgstr ""
++
++#. Failed to send, abort.
++#: main.c:3602
++msgid ": Send failed.\n"
++msgstr ""
++
++#. Let vim start normally.
++#: main.c:3608
++msgid ": Send failed. Trying to execute locally\n"
++msgstr ""
++
++#: main.c:3646
++#: main.c:3667
++#, c-format
++msgid "%d of %d edited"
++msgstr ""
++
++#: main.c:3689
++msgid "No display: Send expression failed.\n"
++msgstr ""
++
++#: main.c:3701
++msgid ": Send expression failed.\n"
++msgstr ""
++
++#: mark.c:761
++msgid "No marks set"
++msgstr ""
++
++#: mark.c:763
++#, c-format
++msgid "E283: No marks matching \"%s\""
++msgstr ""
++
++#. Highlight title
++#: mark.c:774
++msgid ""
++"\n"
++"mark line  col file/text"
++msgstr ""
++
++#. Highlight title
++#: mark.c:896
++msgid ""
++"\n"
++" jump line  col file/text"
++msgstr ""
++
++#. Highlight title
++#: mark.c:943
++msgid ""
++"\n"
++"change line  col text"
++msgstr ""
++
++#: mark.c:1437
++#, c-format
++msgid ""
++"\n"
++"# File marks:\n"
++msgstr ""
++
++#. Write the jumplist with -'
++#: mark.c:1472
++#, c-format
++msgid ""
++"\n"
++"# Jumplist (newest first):\n"
++msgstr ""
++
++#: mark.c:1573
++#, c-format
++msgid ""
++"\n"
++"# History of marks within files (newest to oldest):\n"
++msgstr ""
++
++#: mark.c:1677
++msgid "Missing '>'"
++msgstr ""
++
++#: mbyte.c:550
++msgid "E543: Not a valid codepage"
++msgstr ""
++
++#: mbyte.c:5540
++msgid "E284: Cannot set IC values"
++msgstr ""
++
++#: mbyte.c:5692
++msgid "E285: Failed to create input context"
++msgstr ""
++
++#: mbyte.c:5850
++msgid "E286: Failed to open input method"
++msgstr ""
++
++#: mbyte.c:5863
++msgid "E287: Warning: Could not set destroy callback to IM"
++msgstr ""
++
++#: mbyte.c:5869
++msgid "E288: input method doesn't support any style"
++msgstr ""
++
++#: mbyte.c:5928
++msgid "E289: input method doesn't support my preedit type"
++msgstr ""
++
++#: mbyte.c:6004
++msgid "E290: over-the-spot style requires fontset"
++msgstr ""
++
++#: mbyte.c:6040
++msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
++msgstr ""
++
++#: mbyte.c:6351
++msgid "E292: Input Method Server is not running"
++msgstr ""
++
++#: memfile.c:502
++msgid "E293: block was not locked"
++msgstr ""
++
++#: memfile.c:1045
++msgid "E294: Seek error in swap file read"
++msgstr ""
++
++#: memfile.c:1050
++msgid "E295: Read error in swap file"
++msgstr ""
++
++#: memfile.c:1102
++msgid "E296: Seek error in swap file write"
++msgstr ""
++
++#: memfile.c:1120
++msgid "E297: Write error in swap file"
++msgstr ""
++
++#: memfile.c:1317
++msgid "E300: Swap file already exists (symlink attack?)"
++msgstr ""
++
++#: memline.c:312
++msgid "E298: Didn't get block nr 0?"
++msgstr "E298: Ophalen blok nummer 0 mislukt?"
++
++#: memline.c:359
++msgid "E298: Didn't get block nr 1?"
++msgstr "E298: Ophalen blok nummer 1 mislukt?"
++
++#: memline.c:377
++msgid "E298: Didn't get block nr 2?"
++msgstr "E298: Ophalen blok nummer 2 mislukt?"
++
++#. could not (re)open the swap file, what can we do????
++#: memline.c:490
++msgid "E301: Oops, lost the swap file!!!"
++msgstr "E301: Helaas, wisselbestand is verdwenen!!!"
++
++#: memline.c:502
++msgid "E302: Could not rename swap file"
++msgstr ""
++
++#: memline.c:592
++#, c-format
++msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
++msgstr ""
++
++#: memline.c:703
++msgid "E304: ml_upd_block0(): Didn't get block 0??"
++msgstr ""
++
++#: memline.c:905
++#, c-format
++msgid "E305: No swap file found for %s"
++msgstr ""
++
++#: memline.c:915
++msgid "Enter number of swap file to use (0 to quit): "
++msgstr "Typ het nummer van het wisselbestand om te gebruiken (0 om te stoppen): "
++
++#: memline.c:960
++#, c-format
++msgid "E306: Cannot open %s"
++msgstr ""
++
++#: memline.c:982
++msgid "Unable to read block 0 from "
++msgstr ""
++
++#: memline.c:985
++msgid ""
++"\n"
++"Maybe no changes were made or Vim did not update the swap file."
++msgstr ""
++
++#: memline.c:995
++#: memline.c:1012
++msgid " cannot be used with this version of Vim.\n"
++msgstr ""
++
++#: memline.c:997
++msgid "Use Vim version 3.0.\n"
++msgstr ""
++
++#: memline.c:1003
++#, c-format
++msgid "E307: %s does not look like a Vim swap file"
++msgstr ""
++
++#: memline.c:1016
++msgid " cannot be used on this computer.\n"
++msgstr ""
++
++#: memline.c:1018
++msgid "The file was created on "
++msgstr ""
++
++#: memline.c:1022
++msgid ""
++",\n"
++"or the file has been damaged."
++msgstr ""
++
++#: memline.c:1040
++msgid " has been damaged (page size is smaller than minimum value).\n"
++msgstr ""
++
++#: memline.c:1072
++#, c-format
++msgid "Using swap file \"%s\""
++msgstr "Toepassen van wisselbestand \"%s\""
++
++#: memline.c:1078
++#, c-format
++msgid "Original file \"%s\""
++msgstr "Oorspronkelijke bestand \"%s\""
++
++#: memline.c:1091
++msgid "E308: Warning: Original file may have been changed"
++msgstr ""
++
++#: memline.c:1161
++#, c-format
++msgid "E309: Unable to read block 1 from %s"
++msgstr ""
++
++#: memline.c:1165
++msgid "???MANY LINES MISSING"
++msgstr ""
++
++#: memline.c:1181
++msgid "???LINE COUNT WRONG"
++msgstr ""
++
++#: memline.c:1188
++msgid "???EMPTY BLOCK"
++msgstr ""
++
++#: memline.c:1214
++msgid "???LINES MISSING"
++msgstr ""
++
++#: memline.c:1246
++#, c-format
++msgid "E310: Block 1 ID wrong (%s not a .swp file?)"
++msgstr ""
++
++#: memline.c:1251
++msgid "???BLOCK MISSING"
++msgstr ""
++
++#: memline.c:1267
++msgid "??? from here until ???END lines may be messed up"
++msgstr ""
++
++#: memline.c:1283
++msgid "??? from here until ???END lines may have been inserted/deleted"
++msgstr ""
++
++#: memline.c:1303
++msgid "???END"
++msgstr ""
++
++#: memline.c:1366
++msgid "E311: Recovery Interrupted"
++msgstr ""
++
++#: memline.c:1371
++msgid "E312: Errors detected while recovering; look for lines starting with ???"
++msgstr ""
++
++#: memline.c:1373
++msgid "See \":help E312\" for more information."
++msgstr ""
++
++#: memline.c:1380
++msgid "Recovery completed. You should check if everything is OK."
++msgstr "Herstel is afgerond. Controleer of het resultaat juist is."
++
++#: memline.c:1381
++msgid ""
++"\n"
++"(You might want to write out this file under another name\n"
++msgstr ""
++"\n"
++"(Een advies is dit bestand onder een andere naam op te slaan\n"
++
++#: memline.c:1382
++msgid "and run diff with the original file to check for changes)"
++msgstr "en met 'diff' te controleren op wijzigingen)"
++
++#: memline.c:1385
++msgid "Recovery completed. Buffer contents equals file contents."
++msgstr "Herstel is afgerond. Inhoud van het buffer komt overeen met de bestandsinhoud."
++
++#: memline.c:1386
++msgid ""
++"\n"
++"You may want to delete the .swp file now.\n"
++"\n"
++msgstr ""
++"\n"
++"Het .swp-bestand kan nu verwijderd worden.\n"
++"\n"
++
++#. use msg() to start the scrolling properly
++#: memline.c:1462
++msgid "Swap files found:"
++msgstr "Gevonden wisselbestanden:"
++
++#: memline.c:1649
++msgid "   In current directory:\n"
++msgstr "   In huidige map:\n"
++
++#: memline.c:1651
++msgid "   Using specified name:\n"
++msgstr "   Gebruikt opgegeven naam:\n"
++
++#: memline.c:1655
++msgid "   In directory "
++msgstr "   In map "
++
++#: memline.c:1673
++msgid "      -- none --\n"
++msgstr "      -- geen --\n"
++
++#: memline.c:1748
++msgid "          owned by: "
++msgstr "          eigenaar: "
++
++#: memline.c:1750
++msgid "   dated: "
++msgstr "   datum: "
++
++#: memline.c:1754
++#: memline.c:3794
++msgid "             dated: "
++msgstr "             datum: "
++
++#: memline.c:1773
++msgid "         [from Vim version 3.0]"
++msgstr "         [van Vim-versie 3.0]"
++
++#: memline.c:1777
++msgid "         [does not look like a Vim swap file]"
++msgstr "         [lijkt geen Vvim-wisselbestand te zijn]"
++
++#: memline.c:1781
++msgid "         file name: "
++msgstr "      bestandsnaam: "
++
++#: memline.c:1787
++msgid ""
++"\n"
++"          modified: "
++msgstr ""
++"\n"
++"           bewerkt: "
++
++#: memline.c:1788
++msgid "YES"
++msgstr "JA"
++
++#: memline.c:1788
++msgid "no"
++msgstr "nee"
++
++#: memline.c:1792
++msgid ""
++"\n"
++"         user name: "
++msgstr ""
++"\n"
++"    gebruikersnaam: "
++
++#: memline.c:1799
++msgid "   host name: "
++msgstr "  host-naam:"
++
++#: memline.c:1801
++msgid ""
++"\n"
++"         host name: "
++msgstr ""
++"\n"
++"         host-naam: "
++
++#: memline.c:1807
++msgid ""
++"\n"
++"        process ID: "
++msgstr ""
++"\n"
++"         proces-id: "
++
++#: memline.c:1813
++msgid " (still running)"
++msgstr "    (nog actief)"
++
++#: memline.c:1825
++msgid ""
++"\n"
++"         [not usable with this version of Vim]"
++msgstr ""
++"\n"
++"         [onbruikbaar met deze versie van Vim]"
++
++#: memline.c:1828
++msgid ""
++"\n"
++"         [not usable on this computer]"
++msgstr ""
++"\n"
++"         [onbruikbaar op deze computer]"
++
++#: memline.c:1833
++msgid "         [cannot be read]"
++msgstr "         [lezen is onmogelijk]"
++
++#: memline.c:1837
++msgid "         [cannot be opened]"
++msgstr "         [openen is onmogelijk]"
++
++#: memline.c:2027
++msgid "E313: Cannot preserve, there is no swap file"
++msgstr "E313: kan niet worden behouden, want er is geen wisselbestand"
++
++#: memline.c:2080
++msgid "File preserved"
++msgstr "Bestand behouden"
++
++#: memline.c:2082
++msgid "E314: Preserve failed"
++msgstr "E314: behouden is mislukt"
++
++#: memline.c:2159
++#, c-format
++msgid "E315: ml_get: invalid lnum: %ld"
++msgstr ""
++
++#: memline.c:2194
++#, c-format
++msgid "E316: ml_get: cannot find line %ld"
++msgstr ""
++
++#: memline.c:2608
++msgid "E317: pointer block id wrong 3"
++msgstr ""
++
++#: memline.c:2688
++msgid "stack_idx should be 0"
++msgstr ""
++
++#: memline.c:2750
++msgid "E318: Updated too many blocks?"
++msgstr ""
++
++#: memline.c:2930
++msgid "E317: pointer block id wrong 4"
++msgstr ""
++
++#: memline.c:2957
++msgid "deleted block 1?"
++msgstr ""
++
++#: memline.c:3164
++#, c-format
++msgid "E320: Cannot find line %ld"
++msgstr ""
++
++#: memline.c:3413
++msgid "E317: pointer block id wrong"
++msgstr ""
++
++#: memline.c:3429
++msgid "pe_line_count is zero"
++msgstr ""
++
++#: memline.c:3458
++#, c-format
++msgid "E322: line number out of range: %ld past the end"
++msgstr ""
++
++#: memline.c:3462
++#, c-format
++msgid "E323: line count wrong in block %ld"
++msgstr ""
++
++#: memline.c:3511
++msgid "Stack size increases"
++msgstr ""
++
++#: memline.c:3558
++msgid "E317: pointer block id wrong 2"
++msgstr ""
++
++#: memline.c:3595
++#, c-format
++msgid "E773: Symlink loop for \"%s\""
++msgstr "E773: Symbolische koppelingslus voor \"%s\""
++
++#: memline.c:3784
++msgid "E325: ATTENTION"
++msgstr "E325: OPGELET"
++
++#: memline.c:3785
++msgid ""
++"\n"
++"Found a swap file by the name \""
++msgstr ""
++"\n"
++"Er is een wisselbestand aangetroffen met de naam \""
++
++#: memline.c:3789
++msgid "While opening file \""
++msgstr "bij het openen van bestand \""
++
++#: memline.c:3802
++msgid "      NEWER than swap file!\n"
++msgstr "    NIEUWER dan het wisselbestand!\n"
++
++#. Some of these messages are long to allow translation to
++#. * other languages.
++#: memline.c:3806
++msgid ""
++"\n"
++"(1) Another program may be editing the same file.\n"
++"    If this is the case, be careful not to end up with two\n"
++"    different instances of the same file when making changes.\n"
++msgstr ""
++"\n"
++"(1) Mogelijk wordt dit bestand met een ander programma bewerkt.\n"
++"    Als dit het geval is, pas dan op niet met twee verschillende\n"
++"    versies van hetzelfde bestand te eindigen bij het bewerken.\n"
++
++#: memline.c:3807
++msgid "    Quit, or continue with caution.\n"
++msgstr "    Stop of ga aandachtig verder.\n"
++
++#: memline.c:3808
++msgid ""
++"\n"
++"(2) An edit session for this file crashed.\n"
++msgstr ""
++"\n"
++"(2) Een sessie waarin dit bestand werd bewerkt is onverhoeds gestopt.\n"
++
++#: memline.c:3809
++msgid "    If this is the case, use \":recover\" or \"vim -r "
++msgstr "    Als dit het geval is, gebruikt dan \":recover\" of \"vim -r "
++
++#: memline.c:3811
++msgid ""
++"\"\n"
++"    to recover the changes (see \":help recovery\").\n"
++msgstr ""
++"\"\n"
++"    om de aanpassingen te herstellen (zie \":help recovery\").\n"
++
++#: memline.c:3812
++msgid "    If you did this already, delete the swap file \""
++msgstr "    Als dit al gedaan is, verwijder dan het wisselbestand \""
++
++#: memline.c:3814
++msgid ""
++"\"\n"
++"    to avoid this message.\n"
++msgstr ""
++"\"\n"
++"    om dit bericht te voorkomen.\n"
++
++#: memline.c:4233
++#: memline.c:4237
++msgid "Swap file \""
++msgstr "Wisselbestand \""
++
++#: memline.c:4234
++#: memline.c:4240
++msgid "\" already exists!"
++msgstr "\" bestaat al!"
++
++#: memline.c:4243
++msgid "VIM - ATTENTION"
++msgstr "VIM - OPGELET"
++
++#: memline.c:4245
++msgid "Swap file already exists!"
++msgstr "Wisselbestand bestaat reeds."
++
++#: memline.c:4249
++msgid ""
++"&Open Read-Only\n"
++"&Edit anyway\n"
++"&Recover\n"
++"&Quit\n"
++"&Abort"
++msgstr ""
++"Alleen-lezen &openen\n"
++"Toch b&ewerken\n"
++"He&rstellen\n"
++"&Stoppen\n"
++"&Afbreken"
++
++#: memline.c:4251
++msgid ""
++"&Open Read-Only\n"
++"&Edit anyway\n"
++"&Recover\n"
++"&Delete it\n"
++"&Quit\n"
++"&Abort"
++msgstr ""
++"Alleen-lezen &openen\n"
++"Toch b&ewerken\n"
++"He&rstellen\n"
++"Verwij&deren\n"
++"&Stoppen\n"
++"&Afbreken"
++
++#: memline.c:4322
++msgid "E326: Too many swap files found"
++msgstr "E326: teveel wisselbestanden aangetroffen"
++
++#: menu.c:67
++msgid "E327: Part of menu-item path is not sub-menu"
++msgstr "E327: deel van menu-itempad is geen submenu"
++
++#: menu.c:68
++msgid "E328: Menu only exists in another mode"
++msgstr "E328: menu bestaat alleen in andere modus"
++
++#: menu.c:69
++#, c-format
++msgid "E329: No menu \"%s\""
++msgstr "E329: geen menu \"%s\""
++
++#. Only a mnemonic or accelerator is not valid.
++#: menu.c:480
++msgid "E792: Empty menu name"
++msgstr "E792: menunaam is leeg"
++
++#: menu.c:498
++msgid "E330: Menu path must not lead to a sub-menu"
++msgstr ""
++
++#: menu.c:537
++msgid "E331: Must not add menu items directly to menu bar"
++msgstr ""
++
++#: menu.c:543
++msgid "E332: Separator cannot be part of a menu path"
++msgstr ""
++
++#. Now we have found the matching menu, and we list the mappings
++#. Highlight title
++#: menu.c:1112
++msgid ""
++"\n"
++"--- Menus ---"
++msgstr ""
++
++#: menu.c:2146
++msgid "Tear off this menu"
++msgstr ""
++
++#: menu.c:2211
++msgid "E333: Menu path must lead to a menu item"
++msgstr ""
++
++#: menu.c:2231
++#, c-format
++msgid "E334: Menu not found: %s"
++msgstr ""
++
++#: menu.c:2313
++#, c-format
++msgid "E335: Menu not defined for %s mode"
++msgstr ""
++
++#: menu.c:2351
++msgid "E336: Menu path must lead to a sub-menu"
++msgstr ""
++
++#: menu.c:2372
++msgid "E337: Menu not found - check menu names"
++msgstr ""
++
++#: message.c:462
++#, c-format
++msgid "Error detected while processing %s:"
++msgstr "Fout opgetreden tijdens verwerken van %s:"
++
++#: message.c:487
++#, c-format
++msgid "line %4ld:"
++msgstr "regel %4ld:"
++
++#: message.c:685
++#, c-format
++msgid "E354: Invalid register name: '%s'"
++msgstr ""
++
++#: message.c:833
++msgid "Messages maintainer: Bram Moolenaar <Bram@vim.org>"
++msgstr "Vertaald door: Erwin Poeze <erwin.poeze@gmail.com>"
++
++#: message.c:1090
++msgid "Interrupt: "
++msgstr ""
++
++#: message.c:1092
++msgid "Press ENTER or type command to continue"
++msgstr "Toets ENTER of typ een opdracht om verder te gaan"
++
++#: message.c:2139
++#, c-format
++msgid "%s line %ld"
++msgstr "%s regel %ld"
++
++#: message.c:2839
++msgid "-- More --"
++msgstr "-- meer --"
++
++#: message.c:2845
++msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
++msgstr ""
++
++#: message.c:3637
++#: message.c:3652
++msgid "Question"
++msgstr "Vraag"
++
++#: message.c:3639
++msgid ""
++"&Yes\n"
++"&No"
++msgstr ""
++
++#: message.c:3672
++msgid ""
++"&Yes\n"
++"&No\n"
++"Save &All\n"
++"&Discard All\n"
++"&Cancel"
++msgstr ""
++
++#: message.c:3713
++msgid "Select Directory dialog"
++msgstr ""
++
++#: message.c:3715
++msgid "Save File dialog"
++msgstr ""
++
++#: message.c:3717
++msgid "Open File dialog"
++msgstr ""
++
++#. TODO: non-GUI file selector here
++#: message.c:3817
++msgid "E338: Sorry, no file browser in console mode"
++msgstr ""
++
++#: message.c:3848
++msgid "E766: Insufficient arguments for printf()"
++msgstr ""
++
++#: message.c:3924
++msgid "E807: Expected Float argument for printf()"
++msgstr ""
++
++#: message.c:4812
++msgid "E767: Too many arguments to printf()"
++msgstr ""
++
++#: misc1.c:2984
++msgid "W10: Warning: Changing a readonly file"
++msgstr ""
++
++#: misc1.c:3278
++msgid "Type number and <Enter> or click with mouse (empty cancels): "
++msgstr ""
++
++#: misc1.c:3280
++msgid "Type number and <Enter> (empty cancels): "
++msgstr ""
++
++#: misc1.c:3332
++msgid "1 more line"
++msgstr "1 regel meer"
++
++#: misc1.c:3334
++msgid "1 line less"
++msgstr "1 regel minder"
++
++#: misc1.c:3339
++#, c-format
++msgid "%ld more lines"
++msgstr "%ld regels meer"
++
++#: misc1.c:3341
++#, c-format
++msgid "%ld fewer lines"
++msgstr "%ld regels minder"
++
++#: misc1.c:3344
++msgid " (Interrupted)"
++msgstr " (onderbroken)"
++
++#: misc1.c:3409
++msgid "Beep!"
++msgstr "biep!"
++
++#: misc1.c:8394
++msgid "Vim: preserving files...\n"
++msgstr ""
++
++#. close all memfiles, without deleting
++#: misc1.c:8404
++msgid "Vim: Finished.\n"
++msgstr ""
++
++#: misc2.c:771
++#: misc2.c:787
++#, c-format
++msgid "ERROR: "
++msgstr ""
++
++#: misc2.c:791
++#, c-format
++msgid ""
++"\n"
++"[bytes] total alloc-freed %lu-%lu, in use %lu, peak use %lu\n"
++msgstr ""
++
++#: misc2.c:793
++#, c-format
++msgid ""
++"[calls] total re/malloc()'s %lu, total free()'s %lu\n"
++"\n"
++msgstr ""
++
++#: misc2.c:848
++msgid "E340: Line is becoming too long"
++msgstr ""
++
++#: misc2.c:892
++#, c-format
++msgid "E341: Internal error: lalloc(%ld, )"
++msgstr ""
++
++#: misc2.c:1006
++#, c-format
++msgid "E342: Out of memory!  (allocating %lu bytes)"
++msgstr ""
++
++#: misc2.c:3087
++#, c-format
++msgid "Calling shell to execute: \"%s\""
++msgstr ""
++
++#: misc2.c:3356
++msgid "E545: Missing colon"
++msgstr ""
++
++#: misc2.c:3358
++#: misc2.c:3385
++msgid "E546: Illegal mode"
++msgstr ""
++
++#: misc2.c:3424
++msgid "E547: Illegal mouseshape"
++msgstr ""
++
++#: misc2.c:3464
++msgid "E548: digit expected"
++msgstr ""
++
++#: misc2.c:3469
++msgid "E549: Illegal percentage"
++msgstr ""
++
++#: misc2.c:3864
++msgid "Enter encryption key: "
++msgstr ""
++
++#: misc2.c:3865
++msgid "Enter same key again: "
++msgstr ""
++
++#: misc2.c:3876
++msgid "Keys don't match!"
++msgstr ""
++
++#: misc2.c:4418
++#, c-format
++msgid "E343: Invalid path: '**[number]' must be at the end of the path or be followed by '%s'."
++msgstr ""
++
++#: misc2.c:5713
++#, c-format
++msgid "E344: Can't find directory \"%s\" in cdpath"
++msgstr ""
++
++#: misc2.c:5716
++#, c-format
++msgid "E345: Can't find file \"%s\" in path"
++msgstr ""
++
++#: misc2.c:5722
++#, c-format
++msgid "E346: No more directory \"%s\" found in cdpath"
++msgstr ""
++
++#: misc2.c:5725
++#, c-format
++msgid "E347: No more file \"%s\" found in path"
++msgstr ""
++
++#: netbeans.c:390
++msgid "Cannot connect to Netbeans #2"
++msgstr ""
++
++#: netbeans.c:400
++msgid "Cannot connect to Netbeans"
++msgstr ""
++
++#: netbeans.c:445
++#, c-format
++msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
++msgstr ""
++
++#: netbeans.c:798
++msgid "read from Netbeans socket"
++msgstr ""
++
++#: netbeans.c:1950
++#, c-format
++msgid "E658: NetBeans connection lost for buffer %ld"
++msgstr ""
++
++#: netbeans.c:2976
++msgid "E511: netbeans already connected"
++msgstr ""
++
++#: netbeans.c:3911
++msgid "E505: "
++msgstr ""
++
++#: normal.c:186
++msgid "E349: No identifier under cursor"
++msgstr ""
++
++#: normal.c:2206
++msgid "E774: 'operatorfunc' is empty"
++msgstr ""
++
++#: normal.c:2225
++msgid "E775: Eval feature not available"
++msgstr ""
++
++#: normal.c:3240
++msgid "Warning: terminal cannot highlight"
++msgstr "waarschuwing: terminal kan niet oplichten"
++
++#: normal.c:3535
++msgid "E348: No string under cursor"
++msgstr ""
++
++#: normal.c:4887
++msgid "E352: Cannot erase folds with current 'foldmethod'"
++msgstr ""
++
++#: normal.c:7449
++msgid "E664: changelist is empty"
++msgstr "E664: wijzigingslijst is leeg"
++
++#: normal.c:7451
++msgid "E662: At start of changelist"
++msgstr "E662: begin van wijzigingslijst"
++
++#: normal.c:7453
++msgid "E663: At end of changelist"
++msgstr "E663: einde van wijzigingslijst"
++
++#: normal.c:8854
++msgid "Type  :quit<Enter>  to exit Vim"
++msgstr "Typ :quit<Enter> om Vim te verlaten"
++
++#: ops.c:293
++#, c-format
++msgid "1 line %sed 1 time"
++msgstr "1 regel %sed 1 maal"
++
++#: ops.c:295
++#, c-format
++msgid "1 line %sed %d times"
++msgstr "1 regel %sed %d maal"
++
++#: ops.c:300
++#, c-format
++msgid "%ld lines %sed 1 time"
++msgstr "%ld regels %sed 1 maal"
++
++#: ops.c:303
++#, c-format
++msgid "%ld lines %sed %d times"
++msgstr "%ld regels %sed %d maal"
++
++#: ops.c:691
++#, c-format
++msgid "%ld lines to indent... "
++msgstr "%ld in te springen regels... "
++
++#: ops.c:742
++msgid "1 line indented "
++msgstr "1 regel ingesprongen "
++
++#: ops.c:744
++#, c-format
++msgid "%ld lines indented "
++msgstr "%ld regels ingesprongen "
++
++#: ops.c:1170
++msgid "E748: No previously used register"
++msgstr ""
++
++#. must display the prompt
++#: ops.c:1741
++msgid "cannot yank; delete anyway"
++msgstr "kopiÃÂ«ren niet mogelijk; toch verwijderd"
++
++#: ops.c:2338
++msgid "1 line changed"
++msgstr "1 regel gewijzigd"
++
++#: ops.c:2340
++#, c-format
++msgid "%ld lines changed"
++msgstr "%ld regels gewijzigd"
++
++#: ops.c:2795
++#, c-format
++msgid "freeing %ld lines"
++msgstr ""
++
++#: ops.c:3080
++msgid "block of 1 line yanked"
++msgstr "blok van 1 regel gekopieerd"
++
++#: ops.c:3083
++msgid "1 line yanked"
++msgstr "1 regel gekopieerd"
++
++#: ops.c:3087
++#, c-format
++msgid "block of %ld lines yanked"
++msgstr "blok van %ld regels gekopieerd"
++
++#: ops.c:3090
++#, c-format
++msgid "%ld lines yanked"
++msgstr "%ld regels gekopieerd"
++
++#: ops.c:3385
++#, c-format
++msgid "E353: Nothing in register %s"
++msgstr "E353: niets in register %s"
++
++#. Highlight title
++#: ops.c:3977
++msgid ""
++"\n"
++"--- Registers ---"
++msgstr ""
++"\n"
++"--- Registers ---"
++
++#: ops.c:5351
++msgid "Illegal register name"
++msgstr "ongeldige registernaam"
++
++#: ops.c:5447
++#, c-format
++msgid ""
++"\n"
++"# Registers:\n"
++msgstr ""
++"\n"
++"# Registers:\n"
++
++#: ops.c:5504
++#, c-format
++msgid "E574: Unknown register type %d"
++msgstr ""
++
++#: ops.c:6445
++#, c-format
++msgid "%ld Cols; "
++msgstr "%ld koln; "
++
++#: ops.c:6454
++#, c-format
++msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Bytes"
++msgstr "geselecteerd %s%ld van %ld regels; %ld van %ld woorden; %ld van %ld bytes"
++
++#: ops.c:6461
++#, c-format
++msgid "Selected %s%ld of %ld Lines; %ld of %ld Words; %ld of %ld Chars; %ld of %ld Bytes"
++msgstr "geselecteerd %s%ld van %ld regels; %ld van %ld woorden; %ld van %ld rekens; %ld van %ld bytes"
++
++#: ops.c:6480
++#, c-format
++msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Byte %ld of %ld"
++msgstr "kol %s van %s; regel %ld van %ld; woord %ld van %ld; byte %ld van %ld"
++
++#: ops.c:6488
++#, c-format
++msgid "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of %ld"
++msgstr "kol %s van %s; regel %ld van %ld; woord %ld van %ld; teken %ld van %ld; byte %ld van %ld"
++
++#: ops.c:6500
++#, c-format
++msgid "(+%ld for BOM)"
++msgstr "(+%ld voor BOD)"
++
++#: option.c:1991
++msgid "%<%f%h%m%=Page %N"
++msgstr "%<%f%h%m%=pagina %N"
++
++#: option.c:2565
++msgid "Thanks for flying Vim"
++msgstr "Dank voor het gebruik van Vim"
++
++#: option.c:4179
++#: option.c:4322
++msgid "E518: Unknown option"
++msgstr "E518: onbekende optie"
++
++#: option.c:4192
++msgid "E519: Option not supported"
++msgstr "E519: optie niet ondersteund"
++
++#: option.c:4230
++msgid "E520: Not allowed in a modeline"
++msgstr ""
++
++#: option.c:4448
++msgid "E521: Number required after ="
++msgstr ""
++
++#: option.c:4773
++#: option.c:5579
++msgid "E522: Not found in termcap"
++msgstr ""
++
++#: option.c:4890
++#, c-format
++msgid "E539: Illegal character <%s>"
++msgstr ""
++
++#: option.c:5571
++msgid "E529: Cannot set 'term' to empty string"
++msgstr ""
++
++#: option.c:5574
++msgid "E530: Cannot change term in GUI"
++msgstr ""
++
++#: option.c:5576
++msgid "E531: Use \":gui\" to start the GUI"
++msgstr ""
++
++#: option.c:5605
++msgid "E589: 'backupext' and 'patchmode' are equal"
++msgstr ""
++
++#: option.c:5833
++msgid "E617: Cannot be changed in the GTK+ 2 GUI"
++msgstr ""
++
++#: option.c:6015
++msgid "E524: Missing colon"
++msgstr ""
++
++#: option.c:6017
++msgid "E525: Zero length string"
++msgstr ""
++
++#: option.c:6100
++#, c-format
++msgid "E526: Missing number after <%s>"
++msgstr ""
++
++#: option.c:6114
++msgid "E527: Missing comma"
++msgstr ""
++
++#: option.c:6121
++msgid "E528: Must specify a ' value"
++msgstr ""
++
++#: option.c:6170
++msgid "E595: contains unprintable or wide character"
++msgstr ""
++
++#: option.c:6214
++msgid "E596: Invalid font(s)"
++msgstr ""
++
++#: option.c:6223
++msgid "E597: can't select fontset"
++msgstr ""
++
++#: option.c:6225
++msgid "E598: Invalid fontset"
++msgstr ""
++
++#: option.c:6233
++msgid "E533: can't select wide font"
++msgstr ""
++
++#: option.c:6235
++msgid "E534: Invalid wide font"
++msgstr ""
++
++#: option.c:6564
++#, c-format
++msgid "E535: Illegal character after <%c>"
++msgstr "E535: ongeldig teken na <%c>"
++
++#: option.c:6688
++msgid "E536: comma required"
++msgstr "E536: komma is vereist"
++
++#: option.c:6698
++#, c-format
++msgid "E537: 'commentstring' must be empty or contain %s"
++msgstr "E537: 'commentstring' moet leeg zijn of het volgende bevatten: %s"
++
++#: option.c:6779
++msgid "E538: No mouse support"
++msgstr "E538: geen muisondersteuning"
++
++#: option.c:7104
++msgid "E540: Unclosed expression sequence"
++msgstr "E540: ongepaarde expressie-volgorde"
++
++#: option.c:7108
++msgid "E541: too many items"
++msgstr "E541: teveel items"
++
++#: option.c:7110
++msgid "E542: unbalanced groups"
++msgstr "E542: ongepaarde groepen"
++
++#: option.c:7461
++msgid "E590: A preview window already exists"
++msgstr "E590: een voorvertoningsvenster bestaat al"
++
++#: option.c:7716
++msgid "W17: Arabic requires UTF-8, do ':set encoding=utf-8'"
++msgstr "W17: Arabisch vereist UTF-8, typ ':set encoding=utf-8'"
++
++#: option.c:8172
++#, c-format
++msgid "E593: Need at least %d lines"
++msgstr "E593: vereist minstens %d regels"
++
++#: option.c:8182
++#, c-format
++msgid "E594: Need at least %d columns"
++msgstr "E594: vereist minstens %d kolommen"
++
++#: option.c:8501
++#, c-format
++msgid "E355: Unknown option: %s"
++msgstr "E355: onbekende optie: %s"
++
++#. There's another character after zeros or the string
++#. * is empty.  In both cases, we are trying to set a
++#. * num option using a string.
++#: option.c:8533
++#, c-format
++msgid "E521: Number required: &%s = '%s'"
++msgstr "E521: 'Number' vereist: &%s = '%s'"
++
++#: option.c:8657
++msgid ""
++"\n"
++"--- Terminal codes ---"
++msgstr ""
++"\n"
++"--- Terminal-codes ---"
++
++#: option.c:8659
++msgid ""
++"\n"
++"--- Global option values ---"
++msgstr ""
++"\n"
++"--- Globale optiewaarden ---"
++
++#: option.c:8661
++msgid ""
++"\n"
++"--- Local option values ---"
++msgstr ""
++"\n"
++"--- Lokale optiewaarden ---"
++
++#: option.c:8663
++msgid ""
++"\n"
++"--- Options ---"
++msgstr ""
++"\n"
++"--- Opties ---"
++
++#: option.c:9489
++msgid "E356: get_varp ERROR"
++msgstr ""
++
++#: option.c:10604
++#, c-format
++msgid "E357: 'langmap': Matching character missing for %s"
++msgstr ""
++
++#: option.c:10628
++#, c-format
++msgid "E358: 'langmap': Extra characters after semicolon: %s"
++msgstr ""
++
++#: os_amiga.c:278
++msgid "cannot open "
++msgstr "gefaald tijden openen van "
++
++#: os_amiga.c:313
++msgid "VIM: Can't open window!\n"
++msgstr "VIM: kan venster niet openen!\n"
++
++#: os_amiga.c:340
++msgid "Need Amigados version 2.04 or later\n"
++msgstr "Vereist Amigados versie 2.04 of nieuwer\n"
++
++#: os_amiga.c:346
++#, c-format
++msgid "Need %s version %ld\n"
++msgstr "Vereist %s versie %ld\n"
++
++#: os_amiga.c:419
++msgid "Cannot open NIL:\n"
++msgstr ""
++
++#: os_amiga.c:437
++msgid "Cannot create "
++msgstr "Gefaald tijdens aanmaken van "
++
++#: os_amiga.c:943
++#, c-format
++msgid "Vim exiting with %d\n"
++msgstr "Vim stoppen met %d\n"
++
++#: os_amiga.c:979
++msgid "cannot change console mode ?!\n"
++msgstr ""
++
++#: os_amiga.c:1057
++msgid "mch_get_shellsize: not a console??\n"
++msgstr ""
++
++#. if Vim opened a window: Executing a shell may cause crashes
++#: os_amiga.c:1212
++msgid "E360: Cannot execute shell with -f option"
++msgstr ""
++
++#: os_amiga.c:1253
++#: os_amiga.c:1343
++msgid "Cannot execute "
++msgstr ""
++
++#: os_amiga.c:1256
++#: os_amiga.c:1353
++msgid "shell "
++msgstr ""
++
++#: os_amiga.c:1276
++#: os_amiga.c:1378
++msgid " returned\n"
++msgstr ""
++
++#: os_amiga.c:1540
++msgid "ANCHOR_BUF_SIZE too small."
++msgstr ""
++
++#: os_amiga.c:1544
++msgid "I/O ERROR"
++msgstr ""
++
++#: os_mswin.c:595
++msgid "Message"
++msgstr ""
++
++#: os_mswin.c:710
++msgid "'columns' is not 80, cannot execute external commands"
++msgstr ""
++
++#: os_mswin.c:2143
++msgid "E237: Printer selection failed"
++msgstr ""
++
++#: os_mswin.c:2183
++#, c-format
++msgid "to %s on %s"
++msgstr ""
++
++#: os_mswin.c:2198
++#, c-format
++msgid "E613: Unknown printer font: %s"
++msgstr ""
++
++#: os_mswin.c:2247
++#: os_mswin.c:2257
++#, c-format
++msgid "E238: Print error: %s"
++msgstr ""
++
++#: os_mswin.c:2285
++#, c-format
++msgid "Printing '%s'"
++msgstr ""
++
++#: os_mswin.c:3461
++#, c-format
++msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
++msgstr ""
++
++#: os_mswin.c:3471
++#, c-format
++msgid "E245: Illegal char '%c' in font name \"%s\""
++msgstr ""
++
++#: os_riscos.c:1263
++msgid "E366: Invalid 'osfiletype' option - using Text"
++msgstr ""
++
++#: os_unix.c:1083
++msgid "Vim: Double signal, exiting\n"
++msgstr "Vim: dubbel signaal, stoppen\n"
++
++#: os_unix.c:1089
++#, c-format
++msgid "Vim: Caught deadly signal %s\n"
++msgstr "Vim: fataal signaal gevangen %s\n"
++
++#: os_unix.c:1092
++#, c-format
++msgid "Vim: Caught deadly signal\n"
++msgstr "Vim: fataal signaal gevangen\n"
++
++#: os_unix.c:1430
++#, c-format
++msgid "Opening the X display took %ld msec"
++msgstr "Openen van X-display vereiste %ld ms"
++
++#: os_unix.c:1457
++msgid ""
++"\n"
++"Vim: Got X error\n"
++msgstr ""
++
++#: os_unix.c:1568
++msgid "Testing the X display failed"
++msgstr ""
++
++#: os_unix.c:1708
++msgid "Opening the X display timed out"
++msgstr ""
++
++#: os_unix.c:2682
++#: os_unix.c:2689
++msgid ""
++"\n"
++"Could not get security context for "
++msgstr ""
++
++#: os_unix.c:2699
++msgid ""
++"\n"
++"Could not set security context for "
++msgstr ""
++
++#: os_unix.c:3718
++#: os_unix.c:4643
++msgid ""
++"\n"
++"Cannot execute shell "
++msgstr ""
++
++#: os_unix.c:3766
++msgid ""
++"\n"
++"Cannot execute shell sh\n"
++msgstr ""
++
++#: os_unix.c:3770
++#: os_unix.c:4649
++msgid ""
++"\n"
++"shell returned "
++msgstr ""
++
++#: os_unix.c:3914
++msgid ""
++"\n"
++"Cannot create pipes\n"
++msgstr ""
++
++#: os_unix.c:3928
++#: os_unix.c:4192
++msgid ""
++"\n"
++"Cannot fork\n"
++msgstr ""
++
++#: os_unix.c:4656
++msgid ""
++"\n"
++"Command terminated\n"
++msgstr ""
++
++#: os_unix.c:4957
++#: os_unix.c:5122
++#: os_unix.c:6852
++msgid "XSMP lost ICE connection"
++msgstr ""
++
++#: os_unix.c:6252
++#: os_unix.c:6355
++#, c-format
++msgid "dlerror = \"%s\""
++msgstr ""
++
++#: os_unix.c:6437
++msgid "Opening the X display failed"
++msgstr ""
++
++#: os_unix.c:6761
++msgid "XSMP handling save-yourself request"
++msgstr ""
++
++#: os_unix.c:6875
++msgid "XSMP opening connection"
++msgstr ""
++
++#: os_unix.c:6894
++msgid "XSMP ICE connection watch failed"
++msgstr ""
++
++#: os_unix.c:6918
++#, c-format
++msgid "XSMP SmcOpenConnection failed: %s"
++msgstr ""
++
++#: os_vms_mms.c:60
++msgid "At line"
++msgstr "Bij regel"
++
++#: os_w32exe.c:89
++msgid "Could not load vim32.dll!"
++msgstr ""
++
++#: os_w32exe.c:89
++#: os_w32exe.c:100
++msgid "VIM Error"
++msgstr "Vim-fout"
++
++#: os_w32exe.c:99
++msgid "Could not fix up function pointers to the DLL!"
++msgstr ""
++
++#: os_win16.c:342
++#: os_win32.c:3399
++#, c-format
++msgid "shell returned %d"
++msgstr ""
++
++#: os_win32.c:2856
++#, c-format
++msgid "Vim: Caught %s event\n"
++msgstr ""
++
++#: os_win32.c:2858
++msgid "close"
++msgstr "sluiten"
++
++#: os_win32.c:2860
++msgid "logoff"
++msgstr "uitloggen"
++
++#: os_win32.c:2861
++msgid "shutdown"
++msgstr "afsluiten"
++
++#: os_win32.c:3351
++msgid "E371: Command not found"
++msgstr "E371: opdracht niet gevonden"
++
++#: os_win32.c:3364
++msgid ""
++"VIMRUN.EXE not found in your $PATH.\n"
++"External commands will not pause after completion.\n"
++"See  :help win32-vimrun  for more information."
++msgstr ""
++
++#: os_win32.c:3367
++msgid "Vim Warning"
++msgstr "Vim-waarschuwing"
++
++#: quickfix.c:330
++#, c-format
++msgid "E372: Too many %%%c in format string"
++msgstr ""
++
++#: quickfix.c:343
++#, c-format
++msgid "E373: Unexpected %%%c in format string"
++msgstr ""
++
++#: quickfix.c:405
++msgid "E374: Missing ] in format string"
++msgstr ""
++
++#: quickfix.c:419
++#, c-format
++msgid "E375: Unsupported %%%c in format string"
++msgstr ""
++
++#: quickfix.c:439
++#, c-format
++msgid "E376: Invalid %%%c in format string prefix"
++msgstr ""
++
++#: quickfix.c:447
++#, c-format
++msgid "E377: Invalid %%%c in format string"
++msgstr ""
++
++#: quickfix.c:473
++msgid "E378: 'errorformat' contains no pattern"
++msgstr ""
++
++#: quickfix.c:706
++msgid "E379: Missing or empty directory name"
++msgstr ""
++
++#: quickfix.c:1408
++msgid "E553: No more items"
++msgstr ""
++
++#: quickfix.c:1830
++#, c-format
++msgid "(%d of %d)%s%s: "
++msgstr ""
++
++#: quickfix.c:1832
++msgid " (line deleted)"
++msgstr ""
++
++#: quickfix.c:2055
++msgid "E380: At bottom of quickfix stack"
++msgstr ""
++
++#: quickfix.c:2064
++msgid "E381: At top of quickfix stack"
++msgstr ""
++
++#: quickfix.c:2078
++#, c-format
++msgid "error list %d of %d; %d errors"
++msgstr ""
++
++#: quickfix.c:2664
++msgid "E382: Cannot write, 'buftype' option is set"
++msgstr ""
++
++#: quickfix.c:3068
++msgid "E683: File name missing or invalid pattern"
++msgstr ""
++
++#: quickfix.c:3166
++#, c-format
++msgid "Cannot open file \"%s\""
++msgstr ""
++
++#: quickfix.c:3703
++msgid "E681: Buffer is not loaded"
++msgstr "E681: buffer is niet geladen"
++
++#: quickfix.c:3764
++msgid "E777: String or List expected"
++msgstr ""
++
++#: regexp.c:331
++#, c-format
++msgid "E369: invalid item in %s%%[]"
++msgstr ""
++
++#: regexp.c:1059
++#: regexp.c:1077
++msgid "E339: Pattern too long"
++msgstr ""
++
++#: regexp.c:1234
++msgid "E50: Too many \\z("
++msgstr ""
++
++#: regexp.c:1245
++#, c-format
++msgid "E51: Too many %s("
++msgstr ""
++
++#: regexp.c:1302
++msgid "E52: Unmatched \\z("
++msgstr "E52: \\z( is niet gepaard"
++
++#: regexp.c:1306
++#, c-format
++msgid "E53: Unmatched %s%%("
++msgstr "E53: %s%%( is niet gepaard"
++
++#: regexp.c:1308
++#, c-format
++msgid "E54: Unmatched %s("
++msgstr "E54: %s( is niet gepaard"
++
++#: regexp.c:1313
++#, c-format
++msgid "E55: Unmatched %s)"
++msgstr "E55: %s) is ongepaard"
++
++#: regexp.c:1531
++#, c-format
++msgid "E59: invalid character after %s@"
++msgstr ""
++
++#: regexp.c:1565
++#, c-format
++msgid "E60: Too many complex %s{...}s"
++msgstr ""
++
++#: regexp.c:1581
++#, c-format
++msgid "E61: Nested %s*"
++msgstr "E61: geneste %s*"
++
++#: regexp.c:1584
++#, c-format
++msgid "E62: Nested %s%c"
++msgstr "E62: geneste %s%c"
++
++#: regexp.c:1704
++msgid "E63: invalid use of \\_"
++msgstr "E63: onjuist gebruikt van \\_"
++
++#: regexp.c:1760
++#, c-format
++msgid "E64: %s%c follows nothing"
++msgstr "E64: %s%c volgt op niets"
++
++#: regexp.c:1816
++msgid "E65: Illegal back reference"
++msgstr "E65: ongeldige terugverwijzing"
++
++#: regexp.c:1829
++msgid "E66: \\z( not allowed here"
++msgstr "E66: \\z( hier niet toegestaan"
++
++#: regexp.c:1848
++msgid "E67: \\z1 et al. not allowed here"
++msgstr "E67: \\z1 en andere hier niet toegestaan"
++
++#: regexp.c:1860
++msgid "E68: Invalid character after \\z"
++msgstr "E68: ongeldig teken na \\z"
++
++#: regexp.c:1912
++#, c-format
++msgid "E69: Missing ] after %s%%["
++msgstr "E69: ontbrekende ] na %s%%["
++
++#: regexp.c:1928
++#, c-format
++msgid "E70: Empty %s%%[]"
++msgstr "E70: leeg %s%%[]"
++
++#: regexp.c:1973
++#, c-format
++msgid "E678: Invalid character after %s%%[dxouU]"
++msgstr "E678: onjuist teken na %s%%[dxouU]"
++
++#: regexp.c:2044
++#, c-format
++msgid "E71: Invalid character after %s%%"
++msgstr "E71: onjuist teken na %s%%"
++
++#: regexp.c:2337
++#, c-format
++msgid "E769: Missing ] after %s["
++msgstr "E769: ontbrekende ] na %s["
++
++#: regexp.c:3033
++#, c-format
++msgid "E554: Syntax error in %s{...}"
++msgstr "E554: Syntaxfout in %s{...}"
++
++#: regexp.c:3876
++msgid "External submatches:\n"
++msgstr ""
++
++#: screen.c:9356
++msgid " VREPLACE"
++msgstr ""
++
++#: screen.c:9360
++msgid " REPLACE"
++msgstr " VERVANGEN"
++
++#: screen.c:9365
++msgid " REVERSE"
++msgstr ""
++
++#: screen.c:9367
++msgid " INSERT"
++msgstr " INVOEGEN"
++
++#: screen.c:9370
++msgid " (insert)"
++msgstr " (invoegen)"
++
++#: screen.c:9372
++msgid " (replace)"
++msgstr " (vervangen)"
++
++#: screen.c:9374
++msgid " (vreplace)"
++msgstr ""
++
++#: screen.c:9377
++msgid " Hebrew"
++msgstr ""
++
++#: screen.c:9388
++msgid " Arabic"
++msgstr ""
++
++#: screen.c:9391
++msgid " (lang)"
++msgstr ""
++
++#: screen.c:9395
++msgid " (paste)"
++msgstr ""
++
++#: screen.c:9408
++msgid " VISUAL"
++msgstr " VISUEEL"
++
++#: screen.c:9409
++msgid " VISUAL LINE"
++msgstr " VISUELE REGEL"
++
++#: screen.c:9410
++msgid " VISUAL BLOCK"
++msgstr " VISUEEL BLOK"
++
++#: screen.c:9411
++msgid " SELECT"
++msgstr " SELECTEREN"
++
++#: screen.c:9412
++msgid " SELECT LINE"
++msgstr " REGELSELECTIE"
++
++#: screen.c:9413
++msgid " SELECT BLOCK"
++msgstr " BLOKSELECTIE"
++
++#: screen.c:9429
++#: screen.c:9495
++msgid "recording"
++msgstr "opnemen"
++
++#: search.c:562
++#, c-format
++msgid "E383: Invalid search string: %s"
++msgstr "E383: ongeldige zoekstring: %s"
++
++#: search.c:983
++#, c-format
++msgid "E384: search hit TOP without match for: %s"
++msgstr "E384: TOP bereikt zonder overeenkomst voor: %s"
++
++#: search.c:986
++#, c-format
++msgid "E385: search hit BOTTOM without match for: %s"
++msgstr "E385: BODEM bereikt zonder overeenkomst voor: %s"
++
++#: search.c:1418
++msgid "E386: Expected '?' or '/'  after ';'"
++msgstr "E386: verwachte '?' of '/' na ';'"
++
++#: search.c:4691
++msgid " (includes previously listed match)"
++msgstr " (bevat eerder getoonde overeenkomst)"
++
++#. cursor at status line
++#: search.c:4711
++msgid "--- Included files "
++msgstr "--- bevatte bestanden "
++
++#: search.c:4713
++msgid "not found "
++msgstr "niet gevonden "
++
++#: search.c:4714
++msgid "in path ---\n"
++msgstr "in pad ---\n"
++
++#: search.c:4771
++msgid "  (Already listed)"
++msgstr " (Reeds getoond)"
++
++#: search.c:4773
++msgid "  NOT FOUND"
++msgstr "  NIET GEVONDEN"
++
++#: search.c:4827
++#, c-format
++msgid "Scanning included file: %s"
++msgstr ""
++
++#: search.c:4836
++#, c-format
++msgid "Searching included file %s"
++msgstr ""
++
++#: search.c:5059
++msgid "E387: Match is on current line"
++msgstr ""
++
++#: search.c:5203
++msgid "All included files were found"
++msgstr ""
++
++#: search.c:5205
++msgid "No included files"
++msgstr ""
++
++#: search.c:5221
++msgid "E388: Couldn't find definition"
++msgstr ""
++
++#: search.c:5223
++msgid "E389: Couldn't find pattern"
++msgstr "E389: kan zoekpatroon niet vinden"
++
++#: search.c:5401
++msgid "Substitute "
++msgstr "Vervangen "
++
++#: search.c:5414
++#, c-format
++msgid ""
++"\n"
++"# Last %sSearch Pattern:\n"
++"~"
++msgstr ""
++"\n"
++"# Laatste %szoekpatroon:\n"
++"~"
++
++#: spell.c:984
++msgid "E759: Format error in spell file"
++msgstr ""
++
++#: spell.c:985
++msgid "E758: Truncated spell file"
++msgstr ""
++
++#: spell.c:986
++#, c-format
++msgid "Trailing text in %s line %d: %s"
++msgstr ""
++
++#: spell.c:987
++#, c-format
++msgid "Affix name too long in %s line %d: %s"
++msgstr ""
++
++#: spell.c:988
++msgid "E761: Format error in affix file FOL, LOW or UPP"
++msgstr ""
++
++#: spell.c:989
++msgid "E762: Character in FOL, LOW or UPP is out of range"
++msgstr ""
++
++#: spell.c:990
++msgid "Compressing word tree..."
++msgstr ""
++
++#: spell.c:2146
++msgid "E756: Spell checking is not enabled"
++msgstr ""
++
++#: spell.c:2499
++#, c-format
++msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
++msgstr ""
++
++#: spell.c:2773
++#, c-format
++msgid "Reading spell file \"%s\""
++msgstr ""
++
++#: spell.c:2805
++msgid "E757: This does not look like a spell file"
++msgstr ""
++
++#: spell.c:2811
++msgid "E771: Old spell file, needs to be updated"
++msgstr ""
++
++#: spell.c:2816
++msgid "E772: Spell file is for newer version of Vim"
++msgstr ""
++
++#: spell.c:2919
++msgid "E770: Unsupported section in spell file"
++msgstr ""
++
++#: spell.c:4320
++#, c-format
++msgid "Warning: region %s not supported"
++msgstr ""
++
++#: spell.c:5207
++#, c-format
++msgid "Reading affix file %s ..."
++msgstr ""
++
++#: spell.c:5255
++#: spell.c:6599
++#: spell.c:7178
++#, c-format
++msgid "Conversion failure for word in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5303
++#: spell.c:7213
++#, c-format
++msgid "Conversion in %s not supported: from %s to %s"
++msgstr ""
++
++#: spell.c:5307
++#: spell.c:7218
++#, c-format
++msgid "Conversion in %s not supported"
++msgstr ""
++
++#: spell.c:5320
++#, c-format
++msgid "Invalid value for FLAG in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5333
++#, c-format
++msgid "FLAG after using flags in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5424
++#, c-format
++msgid "Defining COMPOUNDFORBIDFLAG after PFX item may give wrong results in %s line %d"
++msgstr ""
++
++#: spell.c:5433
++#, c-format
++msgid "Defining COMPOUNDPERMITFLAG after PFX item may give wrong results in %s line %d"
++msgstr ""
++
++#: spell.c:5454
++#, c-format
++msgid "Wrong COMPOUNDRULES value in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5481
++#, c-format
++msgid "Wrong COMPOUNDWORDMAX value in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5489
++#, c-format
++msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5497
++#, c-format
++msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5519
++#, c-format
++msgid "Wrong CHECKCOMPOUNDPATTERN value in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5585
++#, c-format
++msgid "Different combining flag in continued affix block in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5588
++#, c-format
++msgid "Duplicate affix in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5610
++#, c-format
++msgid "Affix also used for BAD/RARE/KEEPCASE/NEEDAFFIX/NEEDCOMPOUND/NOSUGGEST in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5634
++#, c-format
++msgid "Expected Y or N in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5718
++#, c-format
++msgid "Broken condition in %s line %d: %s"
++msgstr ""
++
++#: spell.c:5866
++#, c-format
++msgid "Expected REP(SAL) count in %s line %d"
++msgstr ""
++
++#: spell.c:5901
++#, c-format
++msgid "Expected MAP count in %s line %d"
++msgstr ""
++
++#: spell.c:5920
++#, c-format
++msgid "Duplicate character in MAP in %s line %d"
++msgstr ""
++
++#: spell.c:5977
++#, c-format
++msgid "Unrecognized or duplicate item in %s line %d: %s"
++msgstr ""
++
++#: spell.c:6005
++#, c-format
++msgid "Missing FOL/LOW/UPP line in %s"
++msgstr ""
++
++#: spell.c:6031
++msgid "COMPOUNDSYLMAX used without SYLLABLE"
++msgstr ""
++
++#: spell.c:6049
++msgid "Too many postponed prefixes"
++msgstr ""
++
++#: spell.c:6051
++msgid "Too many compound flags"
++msgstr ""
++
++#: spell.c:6053
++msgid "Too many postponed prefixes and/or compound flags"
++msgstr ""
++
++#: spell.c:6065
++#, c-format
++msgid "Missing SOFO%s line in %s"
++msgstr ""
++
++#: spell.c:6068
++#, c-format
++msgid "Both SAL and SOFO lines in %s"
++msgstr ""
++
++#: spell.c:6175
++#, c-format
++msgid "Flag is not a number in %s line %d: %s"
++msgstr ""
++
++#: spell.c:6178
++#, c-format
++msgid "Illegal flag in %s line %d: %s"
++msgstr ""
++
++#: spell.c:6395
++#: spell.c:6408
++#, c-format
++msgid "%s value differs from what is used in another .aff file"
++msgstr ""
++
++#: spell.c:6560
++#, c-format
++msgid "Reading dictionary file %s ..."
++msgstr ""
++
++#: spell.c:6569
++#, c-format
++msgid "E760: No word count in %s"
++msgstr ""
++
++#: spell.c:6640
++#, c-format
++msgid "line %6d, word %6d - %s"
++msgstr ""
++
++#: spell.c:6664
++#, c-format
++msgid "Duplicate word in %s line %d: %s"
++msgstr ""
++
++#: spell.c:6667
++#, c-format
++msgid "First duplicate word in %s line %d: %s"
++msgstr ""
++
++#: spell.c:6722
++#, c-format
++msgid "%d duplicate word(s) in %s"
++msgstr ""
++
++#: spell.c:6724
++#, c-format
++msgid "Ignored %d word(s) with non-ASCII characters in %s"
++msgstr ""
++
++#: spell.c:7147
++#, c-format
++msgid "Reading word file %s ..."
++msgstr ""
++
++#: spell.c:7197
++#, c-format
++msgid "Duplicate /encoding= line ignored in %s line %d: %s"
++msgstr ""
++
++#: spell.c:7200
++#, c-format
++msgid "/encoding= line after word ignored in %s line %d: %s"
++msgstr ""
++
++#: spell.c:7227
++#, c-format
++msgid "Duplicate /regions= line ignored in %s line %d: %s"
++msgstr ""
++
++#: spell.c:7233
++#, c-format
++msgid "Too many regions in %s line %d: %s"
++msgstr ""
++
++#: spell.c:7247
++#, c-format
++msgid "/ line ignored in %s line %d: %s"
++msgstr ""
++
++#: spell.c:7277
++#, c-format
++msgid "Invalid region nr in %s line %d: %s"
++msgstr ""
++
++#: spell.c:7285
++#, c-format
++msgid "Unrecognized flags in %s line %d: %s"
++msgstr ""
++
++#: spell.c:7315
++#, c-format
++msgid "Ignored %d words with non-ASCII characters"
++msgstr ""
++
++#: spell.c:7776
++#, c-format
++msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
++msgstr ""
++
++#: spell.c:8567
++msgid "Reading back spell file..."
++msgstr ""
++
++#.
++#. * Go through the trie of good words, soundfold each word and add it to
++#. * the soundfold trie.
++#.
++#: spell.c:8588
++msgid "Performing soundfolding..."
++msgstr ""
++
++#: spell.c:8601
++#, c-format
++msgid "Number of words after soundfolding: %ld"
++msgstr ""
++
++#: spell.c:8726
++#, c-format
++msgid "Total number of words: %d"
++msgstr ""
++
++#: spell.c:8943
++#, c-format
++msgid "Writing suggestion file %s ..."
++msgstr ""
++
++#: spell.c:9004
++#: spell.c:9265
++#, c-format
++msgid "Estimated runtime memory use: %d bytes"
++msgstr ""
++
++#: spell.c:9136
++msgid "E751: Output file name must not have region name"
++msgstr ""
++
++#: spell.c:9138
++msgid "E754: Only up to 8 regions supported"
++msgstr ""
++
++#: spell.c:9168
++#, c-format
++msgid "E755: Invalid region in %s"
++msgstr ""
++
++#: spell.c:9239
++msgid "Warning: both compounding and NOBREAK specified"
++msgstr ""
++
++#: spell.c:9258
++#, c-format
++msgid "Writing spell file %s ..."
++msgstr ""
++
++#: spell.c:9263
++msgid "Done!"
++msgstr ""
++
++#: spell.c:9390
++#, c-format
++msgid "E765: 'spellfile' does not have %ld entries"
++msgstr ""
++
++#: spell.c:9435
++#, c-format
++msgid "Word removed from %s"
++msgstr ""
++
++#: spell.c:9480
++#, c-format
++msgid "Word added to %s"
++msgstr ""
++
++#: spell.c:9799
++msgid "E763: Word characters differ between spell files"
++msgstr ""
++
++#: spell.c:10177
++msgid "Sorry, no suggestions"
++msgstr ""
++
++#: spell.c:10181
++#, c-format
++msgid "Sorry, only %ld suggestions"
++msgstr ""
++
++#. for when 'cmdheight' > 1
++#. avoid more prompt
++#: spell.c:10202
++#, c-format
++msgid "Change \"%.*s\" to:"
++msgstr ""
++
++#: spell.c:10242
++#, c-format
++msgid " < \"%.*s\""
++msgstr ""
++
++#: spell.c:10420
++msgid "E752: No previous spell replacement"
++msgstr ""
++
++#: spell.c:10470
++#, c-format
++msgid "E753: Not found: %s"
++msgstr ""
++
++#: spell.c:10890
++#, c-format
++msgid "E778: This does not look like a .sug file: %s"
++msgstr ""
++
++#: spell.c:10897
++#, c-format
++msgid "E779: Old .sug file, needs to be updated: %s"
++msgstr ""
++
++#: spell.c:10903
++#, c-format
++msgid "E780: .sug file is for newer version of Vim: %s"
++msgstr ""
++
++#: spell.c:10913
++#, c-format
++msgid "E781: .sug file doesn't match .spl file: %s"
++msgstr ""
++
++#: spell.c:10926
++#, c-format
++msgid "E782: error while reading .sug file: %s"
++msgstr ""
++
++#. This should have been checked when generating the .spl
++#. * file.
++#: spell.c:13623
++msgid "E783: duplicate char in MAP entry"
++msgstr ""
++
++#: syntax.c:3321
++#: syntax.c:3346
++#: syntax.c:3372
++#, c-format
++msgid "E390: Illegal argument: %s"
++msgstr ""
++
++#: syntax.c:3571
++#, c-format
++msgid "E391: No such syntax cluster: %s"
++msgstr ""
++
++#: syntax.c:3730
++msgid "No Syntax items defined for this buffer"
++msgstr ""
++
++#: syntax.c:3738
++msgid "syncing on C-style comments"
++msgstr ""
++
++#: syntax.c:3746
++msgid "no syncing"
++msgstr ""
++
++#: syntax.c:3749
++msgid "syncing starts "
++msgstr ""
++
++#: syntax.c:3751
++#: syntax.c:3827
++msgid " lines before top line"
++msgstr ""
++
++#: syntax.c:3756
++msgid ""
++"\n"
++"--- Syntax sync items ---"
++msgstr ""
++
++#: syntax.c:3761
++msgid ""
++"\n"
++"syncing on items"
++msgstr ""
++
++#: syntax.c:3767
++msgid ""
++"\n"
++"--- Syntax items ---"
++msgstr ""
++
++#: syntax.c:3790
++#, c-format
++msgid "E392: No such syntax cluster: %s"
++msgstr ""
++
++#: syntax.c:3817
++msgid "minimal "
++msgstr ""
++
++#: syntax.c:3824
++msgid "maximal "
++msgstr ""
++
++#: syntax.c:3836
++msgid "; match "
++msgstr ""
++
++#: syntax.c:3838
++msgid " line breaks"
++msgstr ""
++
++#: syntax.c:4480
++msgid "E395: contains argument not accepted here"
++msgstr ""
++
++#: syntax.c:4491
++msgid "E396: containedin argument not accepted here"
++msgstr ""
++
++#: syntax.c:4535
++msgid "E393: group[t]here not accepted here"
++msgstr ""
++
++#: syntax.c:4559
++#, c-format
++msgid "E394: Didn't find region item for %s"
++msgstr ""
++
++#: syntax.c:4636
++msgid "E397: Filename required"
++msgstr ""
++
++#: syntax.c:4759
++#, c-format
++msgid "E789: Missing ']': %s"
++msgstr ""
++
++#: syntax.c:5004
++#, c-format
++msgid "E398: Missing '=': %s"
++msgstr ""
++
++#: syntax.c:5166
++#, c-format
++msgid "E399: Not enough arguments: syntax region %s"
++msgstr ""
++
++#: syntax.c:5500
++msgid "E400: No cluster specified"
++msgstr ""
++
++#: syntax.c:5537
++#, c-format
++msgid "E401: Pattern delimiter not found: %s"
++msgstr ""
++
++#: syntax.c:5612
++#, c-format
++msgid "E402: Garbage after pattern: %s"
++msgstr ""
++
++#: syntax.c:5701
++msgid "E403: syntax sync: line continuations pattern specified twice"
++msgstr ""
++
++#: syntax.c:5758
++#, c-format
++msgid "E404: Illegal arguments: %s"
++msgstr ""
++
++#: syntax.c:5808
++#, c-format
++msgid "E405: Missing equal sign: %s"
++msgstr ""
++
++#: syntax.c:5814
++#, c-format
++msgid "E406: Empty argument: %s"
++msgstr ""
++
++#: syntax.c:5840
++#, c-format
++msgid "E407: %s not allowed here"
++msgstr ""
++
++#: syntax.c:5847
++#, c-format
++msgid "E408: %s must be first in contains list"
++msgstr ""
++
++#: syntax.c:5917
++#, c-format
++msgid "E409: Unknown group name: %s"
++msgstr ""
++
++#: syntax.c:6153
++#, c-format
++msgid "E410: Invalid :syntax subcommand: %s"
++msgstr ""
++
++#: syntax.c:6702
++msgid "E679: recursive loop loading syncolor.vim"
++msgstr ""
++
++#: syntax.c:6829
++#, c-format
++msgid "E411: highlight group not found: %s"
++msgstr ""
++
++#: syntax.c:6853
++#, c-format
++msgid "E412: Not enough arguments: \":highlight link %s\""
++msgstr ""
++
++#: syntax.c:6860
++#, c-format
++msgid "E413: Too many arguments: \":highlight link %s\""
++msgstr ""
++
++#: syntax.c:6880
++msgid "E414: group has settings, highlight link ignored"
++msgstr ""
++
++#: syntax.c:7012
++#, c-format
++msgid "E415: unexpected equal sign: %s"
++msgstr ""
++
++#: syntax.c:7048
++#, c-format
++msgid "E416: missing equal sign: %s"
++msgstr ""
++
++#: syntax.c:7076
++#, c-format
++msgid "E417: missing argument: %s"
++msgstr ""
++
++#: syntax.c:7113
++#, c-format
++msgid "E418: Illegal value: %s"
++msgstr ""
++
++#: syntax.c:7232
++msgid "E419: FG color unknown"
++msgstr ""
++
++#: syntax.c:7243
++msgid "E420: BG color unknown"
++msgstr ""
++
++#: syntax.c:7304
++#, c-format
++msgid "E421: Color name or number not recognized: %s"
++msgstr ""
++
++#: syntax.c:7537
++#, c-format
++msgid "E422: terminal code too long: %s"
++msgstr ""
++
++#: syntax.c:7584
++#, c-format
++msgid "E423: Illegal argument: %s"
++msgstr ""
++
++#: syntax.c:8145
++msgid "E424: Too many different highlighting attributes in use"
++msgstr ""
++
++#: syntax.c:8894
++msgid "E669: Unprintable character in group name"
++msgstr ""
++
++#: syntax.c:8903
++msgid "W18: Invalid character in group name"
++msgstr ""
++
++#: tag.c:85
++msgid "E555: at bottom of tag stack"
++msgstr ""
++
++#: tag.c:86
++msgid "E556: at top of tag stack"
++msgstr ""
++
++#: tag.c:435
++msgid "E425: Cannot go before first matching tag"
++msgstr ""
++
++#: tag.c:584
++#, c-format
++msgid "E426: tag not found: %s"
++msgstr "E426: tag niet gevonden: %s"
++
++#: tag.c:617
++msgid "  # pri kind tag"
++msgstr ""
++
++#: tag.c:620
++msgid "file\n"
++msgstr ""
++
++#: tag.c:954
++msgid "E427: There is only one matching tag"
++msgstr ""
++
++#: tag.c:956
++msgid "E428: Cannot go beyond last matching tag"
++msgstr ""
++
++#: tag.c:980
++#, c-format
++msgid "File \"%s\" does not exist"
++msgstr ""
++
++#. Give an indication of the number of matching tags
++#: tag.c:992
++#, c-format
++msgid "tag %d of %d%s"
++msgstr ""
++
++#: tag.c:995
++msgid " or more"
++msgstr ""
++
++#: tag.c:997
++msgid "  Using tag with different case!"
++msgstr ""
++
++#: tag.c:1052
++#, c-format
++msgid "E429: File \"%s\" does not exist"
++msgstr ""
++
++#. Highlight title
++#: tag.c:1120
++msgid ""
++"\n"
++"  # TO tag         FROM line  in file/text"
++msgstr ""
++
++#: tag.c:1547
++#, c-format
++msgid "Searching tags file %s"
++msgstr ""
++
++#: tag.c:1738
++#, c-format
++msgid "E430: Tag file path truncated for %s\n"
++msgstr ""
++
++#: tag.c:2389
++#, c-format
++msgid "E431: Format error in tags file \"%s\""
++msgstr ""
++
++#: tag.c:2393
++#, c-format
++msgid "Before byte %ld"
++msgstr ""
++
++#: tag.c:2426
++#, c-format
++msgid "E432: Tags file not sorted: %s"
++msgstr ""
++
++#. never opened any tags file
++#: tag.c:2470
++msgid "E433: No tags file"
++msgstr "E433: geen tags-bestand"
++
++#: tag.c:2749
++msgid "Ignoring long line in tags file"
++msgstr ""
++
++#: tag.c:3258
++msgid "E434: Can't find tag pattern"
++msgstr ""
++
++#: tag.c:3269
++msgid "E435: Couldn't find tag, just guessing!"
++msgstr ""
++
++#: term.c:1793
++msgid "' not known. Available builtin terminals are:"
++msgstr ""
++
++#: term.c:1817
++msgid "defaulting to '"
++msgstr ""
++
++#: term.c:2172
++msgid "E557: Cannot open termcap file"
++msgstr ""
++
++#: term.c:2176
++msgid "E558: Terminal entry not found in terminfo"
++msgstr ""
++
++#: term.c:2178
++msgid "E559: Terminal entry not found in termcap"
++msgstr ""
++
++#: term.c:2337
++#, c-format
++msgid "E436: No \"%s\" entry in termcap"
++msgstr ""
++
++#: term.c:2814
++msgid "E437: terminal capability \"cm\" required"
++msgstr ""
++
++#. Highlight title
++#: term.c:5283
++msgid ""
++"\n"
++"--- Terminal keys ---"
++msgstr ""
++
++#: ui.c:284
++msgid "new shell started\n"
++msgstr ""
++
++#: ui.c:1886
++msgid "Vim: Error reading input, exiting...\n"
++msgstr "Vim: lezen van de invoer is mislukt. Stoppen...\n"
++
++#: ui.c:2409
++msgid "Used CUT_BUFFER0 instead of empty selection"
++msgstr ""
++
++#. must display the prompt
++#: undo.c:654
++msgid "No undo possible; continue anyway"
++msgstr ""
++
++#. magic at start of header
++#. magic after last header
++#. magic at start of entry
++#. magic after last entry
++#. 2-byte undofile version number
++#. idem, encrypted
++#: undo.c:675
++#, c-format
++msgid "E828: Cannot open undo file for writing: %s"
++msgstr ""
++
++#: undo.c:784
++#, c-format
++msgid "E825: Corrupted undo file (%s): %s"
++msgstr ""
++
++#: undo.c:1195
++msgid "Cannot write undo file in any directory in 'undodir'"
++msgstr ""
++
++#: undo.c:1243
++#, c-format
++msgid "Will not overwrite with undo file, cannot read: %s"
++msgstr ""
++
++#: undo.c:1265
++#, c-format
++msgid "Will not overwrite, this is not an undo file: %s"
++msgstr ""
++
++#: undo.c:1282
++msgid "Skipping undo file write, noting to undo"
++msgstr ""
++
++#: undo.c:1297
++#, c-format
++msgid "Writing undo file: %s"
++msgstr ""
++
++#: undo.c:1387
++#, c-format
++msgid "E829: write error in undo file: %s"
++msgstr ""
++
++#: undo.c:1467
++#, c-format
++msgid "Not reading undo file, owner differs: %s"
++msgstr ""
++
++#: undo.c:1481
++#, c-format
++msgid "Reading undo file: %s"
++msgstr ""
++
++#: undo.c:1489
++#, c-format
++msgid "E822: Cannot open undo file for reading: %s"
++msgstr ""
++
++#: undo.c:1499
++#, c-format
++msgid "E823: Not an undo file: %s"
++msgstr ""
++
++#: undo.c:1508
++#, c-format
++msgid "E832: Non-encrypted file has encrypted undo file: %s"
++msgstr ""
++
++#: undo.c:1514
++#, c-format
++msgid "E826: Undo file decryption failed: %s"
++msgstr ""
++
++#: undo.c:1518
++#, c-format
++msgid "E827: Undo file is encrypted: %s"
++msgstr ""
++
++#: undo.c:1524
++#, c-format
++msgid "E824: Incompatible undo file: %s"
++msgstr ""
++
++#: undo.c:1542
++msgid "File contents changed, cannot use undo info"
++msgstr ""
++
++#: undo.c:1707
++#, c-format
++msgid "Finished reading undo file %s"
++msgstr ""
++
++#: undo.c:1803
++#: undo.c:2011
++msgid "Already at oldest change"
++msgstr "Reeds de laatste wijziging"
++
++#: undo.c:1818
++#: undo.c:2013
++msgid "Already at newest change"
++msgstr "Reeds de nieuwste wijziging"
++
++#: undo.c:2004
++#, c-format
++msgid "E830: Undo number %ld not found"
++msgstr "E830: Ongedaan-nummer %ld niet gevonden"
++
++#: undo.c:2177
++msgid "E438: u_undo: line numbers wrong"
++msgstr "E438: u_undo: regelnummers onjuist"
++
++#: undo.c:2415
++msgid "more line"
++msgstr "extra regel"
++
++#: undo.c:2417
++msgid "more lines"
++msgstr "extra regel"
++
++#: undo.c:2419
++msgid "line less"
++msgstr "regel minder"
++
++#: undo.c:2421
++msgid "fewer lines"
++msgstr "regels minder"
++
++#: undo.c:2426
++msgid "change"
++msgstr "wijziging"
++
++#: undo.c:2428
++msgid "changes"
++msgstr "wijzigingen"
++
++#: undo.c:2452
++#, c-format
++msgid "%ld %s; %s #%ld  %s"
++msgstr "%ld %s; %s #%ld  %s"
++
++#: undo.c:2455
++msgid "before"
++msgstr "voor"
++
++#: undo.c:2455
++msgid "after"
++msgstr "na"
++
++#: undo.c:2562
++msgid "Nothing to undo"
++msgstr "Niets om ongedaan te maken"
++
++#: undo.c:2568
++msgid "number changes  time"
++msgstr "aantal wijzign  tijd"
++
++#: undo.c:2601
++#, c-format
++msgid "%ld seconds ago"
++msgstr "%ld seconden geleden"
++
++#: undo.c:2616
++msgid "E790: undojoin is not allowed after undo"
++msgstr ""
++
++#: undo.c:2666
++msgid "E439: undo list corrupt"
++msgstr ""
++
++#: undo.c:2698
++msgid "E440: undo line missing"
++msgstr ""
++
++#. Only MS VC 4.1 and earlier can do Win32s
++#: version.c:775
++msgid ""
++"\n"
++"MS-Windows 16/32-bit GUI version"
++msgstr ""
++"\n"
++"MS-Windows 16/32-bit GUI-versie"
++
++#: version.c:778
++msgid ""
++"\n"
++"MS-Windows 64-bit GUI version"
++msgstr ""
++"\n"
++"MS-Windows 64-bit GUI-versie"
++
++#: version.c:780
++msgid ""
++"\n"
++"MS-Windows 32-bit GUI version"
++msgstr ""
++"\n"
++"MS-Windows 32-bit GUIversie"
++
++#: version.c:784
++msgid " in Win32s mode"
++msgstr " in Win32s-modus"
++
++#: version.c:786
++msgid " with OLE support"
++msgstr "met OLE-ondersteuning"
++
++#: version.c:790
++msgid ""
++"\n"
++"MS-Windows 64-bit console version"
++msgstr ""
++"\n"
++"MS-Windows 64-bit console-versie"
++
++#: version.c:792
++msgid ""
++"\n"
++"MS-Windows 32-bit console version"
++msgstr ""
++"\n"
++"MS-Windows 32-bit console-versie"
++
++#: version.c:797
++msgid ""
++"\n"
++"MS-Windows 16-bit version"
++msgstr ""
++"\n"
++"MS-Windows 16-bit-versie"
++
++#: version.c:801
++msgid ""
++"\n"
++"32-bit MS-DOS version"
++msgstr ""
++"\n"
++"32-bit MS-DOS-versie"
++
++#: version.c:803
++msgid ""
++"\n"
++"16-bit MS-DOS version"
++msgstr ""
++"\n"
++"16-bit MS-DOS-versie"
++
++#: version.c:809
++msgid ""
++"\n"
++"MacOS X (unix) version"
++msgstr ""
++"\n"
++"MacOS X (unix)-versie"
++
++#: version.c:811
++msgid ""
++"\n"
++"MacOS X-versie"
++msgstr ""
++"\n"
++"MacOS X version"
++
++#: version.c:814
++msgid ""
++"\n"
++"MacOS version"
++msgstr ""
++"\n"
++"MacOS-versie"
++
++#: version.c:819
++msgid ""
++"\n"
++"RISC OS version"
++msgstr ""
++"\n"
++"RISC OS-versie"
++
++#: version.c:822
++msgid ""
++"\n"
++"OpenVMS version"
++msgstr ""
++"\n"
++"OpenVMS-versie"
++
++#: version.c:837
++msgid ""
++"\n"
++"Included patches: "
++msgstr ""
++"\n"
++"Inclusief 'patches': "
++
++#: version.c:864
++msgid ""
++"\n"
++"Extra patches: "
++msgstr ""
++"\n"
++"Extra 'patches': "
++
++#: version.c:876
++#: version.c:1240
++msgid "Modified by "
++msgstr "Aangepast door "
++
++#: version.c:883
++msgid ""
++"\n"
++"Compiled "
++msgstr ""
++"\n"
++"Gecompileerd "
++
++#: version.c:886
++msgid "by "
++msgstr "door "
++
++#: version.c:898
++msgid ""
++"\n"
++"Huge version "
++msgstr ""
++"\n"
++"Enorme versie "
++
++#: version.c:901
++msgid ""
++"\n"
++"Big version "
++msgstr ""
++"\n"
++"Grote versie "
++
++#: version.c:904
++msgid ""
++"\n"
++"Normal version "
++msgstr ""
++"\n"
++"Normale versie "
++
++#: version.c:907
++msgid ""
++"\n"
++"Small version "
++msgstr ""
++"\n"
++"Kleine versie "
++
++#: version.c:909
++msgid ""
++"\n"
++"Tiny version "
++msgstr ""
++"\n"
++"Mini versie "
++
++#: version.c:915
++msgid "without GUI."
++msgstr ""
++
++#: version.c:920
++msgid "with GTK2-GNOME GUI."
++msgstr ""
++
++#: version.c:922
++msgid "with GTK-GNOME GUI."
++msgstr ""
++
++#: version.c:926
++msgid "with GTK2 GUI."
++msgstr ""
++
++#: version.c:928
++msgid "with GTK GUI."
++msgstr ""
++
++#: version.c:933
++msgid "with X11-Motif GUI."
++msgstr ""
++
++#: version.c:937
++msgid "with X11-neXtaw GUI."
++msgstr ""
++
++#: version.c:939
++msgid "with X11-Athena GUI."
++msgstr ""
++
++#: version.c:943
++msgid "with Photon GUI."
++msgstr ""
++
++#: version.c:946
++msgid "with GUI."
++msgstr ""
++
++#: version.c:949
++msgid "with Carbon GUI."
++msgstr ""
++
++#: version.c:952
++msgid "with Cocoa GUI."
++msgstr ""
++
++#: version.c:955
++msgid "with (classic) GUI."
++msgstr ""
++
++#: version.c:965
++msgid "  Features included (+) or not (-):\n"
++msgstr ""
++
++#: version.c:977
++msgid "   system vimrc file: \""
++msgstr ""
++
++#: version.c:982
++msgid "     user vimrc file: \""
++msgstr ""
++
++#: version.c:987
++msgid " 2nd user vimrc file: \""
++msgstr ""
++
++#: version.c:992
++msgid " 3rd user vimrc file: \""
++msgstr ""
++
++#: version.c:997
++msgid "      user exrc file: \""
++msgstr ""
++
++#: version.c:1002
++msgid "  2nd user exrc file: \""
++msgstr ""
++
++#: version.c:1008
++msgid "  system gvimrc file: \""
++msgstr ""
++
++#: version.c:1012
++msgid "    user gvimrc file: \""
++msgstr ""
++
++#: version.c:1016
++msgid "2nd user gvimrc file: \""
++msgstr ""
++
++#: version.c:1021
++msgid "3rd user gvimrc file: \""
++msgstr ""
++
++#: version.c:1028
++msgid "    system menu file: \""
++msgstr ""
++
++#: version.c:1036
++msgid "  fall-back for $VIM: \""
++msgstr ""
++
++#: version.c:1042
++msgid " f-b for $VIMRUNTIME: \""
++msgstr ""
++
++#: version.c:1046
++msgid "Compilation: "
++msgstr "Compilatie: "
++
++#: version.c:1052
++msgid "Compiler: "
++msgstr "Compiler: "
++
++#: version.c:1057
++msgid "Linking: "
++msgstr "Linking: "
++
++#: version.c:1062
++msgid "  DEBUG BUILD"
++msgstr "  DEBUG BUILD"
++
++#: version.c:1101
++msgid "VIM - Vi IMproved"
++msgstr "VIM - Vi IMproved"
++
++#: version.c:1103
++msgid "version "
++msgstr "versie "
++
++#: version.c:1104
++msgid "by Bram Moolenaar et al."
++msgstr "door Bram Moolenaar en anderen"
++
++#: version.c:1108
++msgid "Vim is open source and freely distributable"
++msgstr "Vim is open-source en vrij verspreidbaar"
++
++#: version.c:1110
++msgid "Help poor children in Uganda!"
++msgstr "Help arme kinderen in Uganda!"
++
++#: version.c:1111
++msgid "type  :help iccf<Enter>       for information "
++msgstr "typ :help iccf<Enter> voor informatie"
++
++#: version.c:1113
++msgid "type   :q<Enter>               to exit"
++msgstr "typ :q<Enter> om te stoppen"
++
++#: version.c:1114
++msgid "type  :help<Enter>  or  <F1>  for on-line help"
++msgstr "typ :help<Enter> of <F1> voor on-line hulp"
++
++#: version.c:1115
++msgid "type  :help version7<Enter>   for version info"
++msgstr "typ :help version7<Enter> voor versieinformatie"
++
++#: version.c:1118
++msgid "Running in Vi compatible mode"
++msgstr "wordt uitgevoerd in Vi compatible-modus"
++
++#: version.c:1119
++msgid "type :set nocp<Enter> for Vim defaults"
++msgstr "typ :set nocp<Enter>  voor standaardinstellingen van Vim"
++
++#: version.c:1120
++msgid "type  :help cp-default<Enter> for info on this"
++msgstr "typ :help cp-default<Enter> voor informatie hierover"
++
++#: version.c:1135
++msgid "menu  Help->Orphans           for information    "
++msgstr "menu Help->Orphans voor informatie"
++
++#: version.c:1137
++msgid "Running modeless, typed text is inserted"
++msgstr ""
++
++#: version.c:1138
++msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
++msgstr ""
++
++#: version.c:1139
++msgid "                              for two modes      "
++msgstr ""
++
++#: version.c:1143
++msgid "menu  Edit->Global Settings->Toggle Vi Compatible"
++msgstr ""
++
++#: version.c:1144
++msgid "                              for Vim defaults   "
++msgstr ""
++
++#: version.c:1191
++msgid "Sponsor Vim development!"
++msgstr "Ondersteun de ontwikkeling van Vim!"
++
++#: version.c:1192
++msgid "Become a registered Vim user!"
++msgstr "Word een geregistreerde Vim-gebruiker!"
++
++#: version.c:1195
++msgid "type  :help sponsor<Enter>    for information "
++msgstr "typ   :help sponsor<Enter>    voor informatie "
++
++#: version.c:1196
++msgid "type  :help register<Enter>   for information "
++msgstr "typ   :help register<Enter>   voor informatie "
++
++#: version.c:1198
++msgid "menu  Help->Sponsor/Register  for information    "
++msgstr "menu  Help->Sponsor/Register  voor informatie    "
++
++#: version.c:1208
++msgid "WARNING: Windows 95/98/ME detected"
++msgstr "Waarschuwing: Windows 95/98/ME gedetecteerd"
++
++#: version.c:1211
++msgid "type  :help windows95<Enter>  for info on this"
++msgstr "typ   :help windows95<Enter>  voor informatie hierover"
++
++#: window.c:88
++msgid "Already only one window"
++msgstr "Reeds beperkt tot een venster"
++
++#: window.c:237
++msgid "E441: There is no preview window"
++msgstr "E441: er is geen voorvertoningsvenster"
++
++#: window.c:672
++msgid "E442: Can't split topleft and botright at the same time"
++msgstr "E442: kan linkerbovenzijde en rechteronderzijde niet gelijktijdig splitsen"
++
++#: window.c:1491
++msgid "E443: Cannot rotate when another window is split"
++msgstr ""
++
++#: window.c:2120
++msgid "E444: Cannot close last window"
++msgstr "E444: sluiten laatste venster is mislukt"
++
++#: window.c:2127
++msgid "E813: Cannot close autocmd window"
++msgstr "E813: sluiten autocmd-venster is mislukt"
++
++#: window.c:2132
++msgid "E814: Cannot close window, only autocmd window would remain"
++msgstr "E814: venster kan niet sluiten want autocmd-venster blijft als enige achter"
++
++#: window.c:3195
++msgid "E445: Other window contains changes"
++msgstr "E445: ander venster blijft achter"
++
++#: window.c:5885
++msgid "E446: No file name under cursor"
++msgstr "E446: cursor staat niet op een bestandsnaam"
++
++#: window.c:6022
++#, c-format
++msgid "E447: Can't find file \"%s\" in path"
++msgstr "E447: bestand \"%s\" niet in pad gevonden"
++
++#: if_perl.xs:434
++#: globals.h:1427
++#, c-format
++msgid "E370: Could not load library %s"
++msgstr "E370: laden van bibliotheek %s is mislukt"
++
++#: if_perl.xs:685
++msgid "Sorry, this command is disabled: the Perl library could not be loaded."
++msgstr ""
++
++#: if_perl.xs:742
++msgid "E299: Perl evaluation forbidden in sandbox without the Safe module"
++msgstr ""
++
++#: GvimExt/gvimext.cpp:587
++msgid "Edit with &multiple Vims"
++msgstr ""
++
++#: GvimExt/gvimext.cpp:593
++msgid "Edit with single &Vim"
++msgstr ""
++
++#: GvimExt/gvimext.cpp:602
++msgid "Diff with Vim"
++msgstr ""
++
++#: GvimExt/gvimext.cpp:615
++msgid "Edit with &Vim"
++msgstr ""
++
++#. Now concatenate
++#: GvimExt/gvimext.cpp:637
++msgid "Edit with existing Vim - "
++msgstr ""
++
++#: GvimExt/gvimext.cpp:752
++msgid "Edits the selected file(s) with Vim"
++msgstr ""
++
++#: GvimExt/gvimext.cpp:891
++#: GvimExt/gvimext.cpp:972
++msgid "Error creating process: Check if gvim is in your path!"
++msgstr ""
++
++#: GvimExt/gvimext.cpp:892
++#: GvimExt/gvimext.cpp:906
++#: GvimExt/gvimext.cpp:973
++msgid "gvimext.dll error"
++msgstr ""
++
++#: GvimExt/gvimext.cpp:905
++msgid "Path length too long!"
++msgstr ""
++
++#: globals.h:1182
++msgid "--No lines in buffer--"
++msgstr "-- geen regels in buffer --"
++
++#.
++#. * The error messages that can be shared are included here.
++#. * Excluded are errors that are only used once and debugging messages.
++#.
++#: globals.h:1381
++msgid "E470: Command aborted"
++msgstr "E470: opdracht afgebroken"
++
++#: globals.h:1382
++msgid "E471: Argument required"
++msgstr "E471: Argument vereist"
++
++#: globals.h:1383
++msgid "E10: \\ should be followed by /, ? or &"
++msgstr "E10: \\ moet worden gevolgd door /, ? of &"
++
++#: globals.h:1385
++msgid "E11: Invalid in command-line window; <CR> executes, CTRL-C quits"
++msgstr "E11: ongeldig in opdrachtregelvenster; <CR> voert uit, CTRL-C stopt"
++
++#: globals.h:1387
++msgid "E12: Command not allowed from exrc/vimrc in current dir or tag search"
++msgstr ""
++
++#: globals.h:1389
++msgid "E171: Missing :endif"
++msgstr ""
++
++#: globals.h:1390
++msgid "E600: Missing :endtry"
++msgstr ""
++
++#: globals.h:1391
++msgid "E170: Missing :endwhile"
++msgstr ""
++
++#: globals.h:1392
++msgid "E170: Missing :endfor"
++msgstr ""
++
++#: globals.h:1393
++msgid "E588: :endwhile without :while"
++msgstr ""
++
++#: globals.h:1394
++msgid "E588: :endfor without :for"
++msgstr ""
++
++#: globals.h:1396
++msgid "E13: File exists (add ! to override)"
++msgstr ""
++
++#: globals.h:1397
++msgid "E472: Command failed"
++msgstr ""
++
++#: globals.h:1399
++#, c-format
++msgid "E234: Unknown fontset: %s"
++msgstr ""
++
++#: globals.h:1403
++#, c-format
++msgid "E235: Unknown font: %s"
++msgstr ""
++
++#: globals.h:1406
++#, c-format
++msgid "E236: Font \"%s\" is not fixed-width"
++msgstr ""
++
++#: globals.h:1408
++msgid "E473: Internal error"
++msgstr "E473: interne fout"
++
++#: globals.h:1409
++msgid "Interrupted"
++msgstr "onderbroken"
++
++#: globals.h:1410
++msgid "E14: Invalid address"
++msgstr "E14: ongeldig adres"
++
++#: globals.h:1411
++msgid "E474: Invalid argument"
++msgstr "E474: ongeldig argument"
++
++#: globals.h:1412
++#, c-format
++msgid "E475: Invalid argument: %s"
++msgstr "E475: ongeldig argument: %s"
++
++#: globals.h:1414
++#, c-format
++msgid "E15: Invalid expression: %s"
++msgstr "E15: ongeldige expressie: %s"
++
++#: globals.h:1416
++msgid "E16: Invalid range"
++msgstr "E16: ongeldig bereik"
++
++#: globals.h:1417
++msgid "E476: Invalid command"
++msgstr "E476: ongeldige opdracht"
++
++#: globals.h:1419
++#, c-format
++msgid "E17: \"%s\" is a directory"
++msgstr ""
++
++#: globals.h:1422
++#, c-format
++msgid "E364: Library call failed for \"%s()\""
++msgstr ""
++
++#: globals.h:1428
++#, c-format
++msgid "E448: Could not load library function %s"
++msgstr ""
++
++#: globals.h:1430
++msgid "E19: Mark has invalid line number"
++msgstr "E19: markering heeft een ongeldig regelnummer"
++
++#: globals.h:1431
++msgid "E20: Mark not set"
++msgstr "E20: Markering is niet ingesteld"
++
++#: globals.h:1432
++msgid "E21: Cannot make changes, 'modifiable' is off"
++msgstr "E21: kan geen veranderingen maken, 'modifiable' is uitgeschakeld"
++
++#: globals.h:1433
++msgid "E22: Scripts nested too deep"
++msgstr "E22: scripts "
++
++#: globals.h:1434
++msgid "E23: No alternate file"
++msgstr ""
++
++#: globals.h:1435
++msgid "E24: No such abbreviation"
++msgstr ""
++
++#: globals.h:1436
++msgid "E477: No ! allowed"
++msgstr ""
++
++#: globals.h:1438
++msgid "E25: GUI cannot be used: Not enabled at compile time"
++msgstr ""
++
++#: globals.h:1441
++msgid "E26: Hebrew cannot be used: Not enabled at compile time\n"
++msgstr ""
++
++#: globals.h:1444
++msgid "E27: Farsi cannot be used: Not enabled at compile time\n"
++msgstr ""
++
++#: globals.h:1447
++msgid "E800: Arabic cannot be used: Not enabled at compile time\n"
++msgstr ""
++
++#: globals.h:1450
++#, c-format
++msgid "E28: No such highlight group name: %s"
++msgstr "E28: naam van deze oplichtgroep is onbekend: %s"
++
++#: globals.h:1452
++msgid "E29: No inserted text yet"
++msgstr ""
++
++#: globals.h:1453
++msgid "E30: No previous command line"
++msgstr ""
++
++#: globals.h:1454
++msgid "E31: No such mapping"
++msgstr ""
++
++#: globals.h:1455
++msgid "E479: No match"
++msgstr "E479: geen overeenkomst"
++
++#: globals.h:1456
++#, c-format
++msgid "E480: No match: %s"
++msgstr "E480: geen overeenkomst: %s"
++
++#: globals.h:1457
++msgid "E32: No file name"
++msgstr "E32: geen bestandsnaam"
++
++#: globals.h:1458
++msgid "E33: No previous substitute regular expression"
++msgstr "E33: geen eerdere reguliere expressie substitutie"
++
++#: globals.h:1459
++msgid "E34: No previous command"
++msgstr "E34: geen eerdere opdracht"
++
++#: globals.h:1460
++msgid "E35: No previous regular expression"
++msgstr "E35: geen eerdere reguliere expressie"
++
++#: globals.h:1461
++msgid "E481: No range allowed"
++msgstr "E481: een bereik is niet toegestaan"
++
++#: globals.h:1463
++msgid "E36: Not enough room"
++msgstr "E36: onvoldoende ruimte"
++
++#: globals.h:1466
++#, c-format
++msgid "E247: no registered server named \"%s\""
++msgstr "E247: \"%s\" niet gevonden als geregistreerde server"
++
++#: globals.h:1468
++#, c-format
++msgid "E482: Can't create file %s"
++msgstr "E482: aanmaken bestand %s is mislukt"
++
++#: globals.h:1469
++msgid "E483: Can't get temp file name"
++msgstr "E483: bepalen naam tijdelijk bestand is mislukt"
++
++#: globals.h:1470
++#, c-format
++msgid "E484: Can't open file %s"
++msgstr "E484: openen bestand %s is mislukt"
++
++#: globals.h:1471
++#, c-format
++msgid "E485: Can't read file %s"
++msgstr "E485: lezen bestand %s is mislukt"
++
++#: globals.h:1472
++msgid "E37: No write since last change (add ! to override)"
++msgstr "E37: niets opgeslagen sinds laatste wijziging (voeg ! toe om te forceren)"
++
++#: globals.h:1473
++msgid "E38: Null argument"
++msgstr "E38: leeg argument (null)"
++
++#: globals.h:1475
++msgid "E39: Number expected"
++msgstr "E39: getal verwacht"
++
++#: globals.h:1478
++#, c-format
++msgid "E40: Can't open errorfile %s"
++msgstr "E40: openen foutenbestand %s is mislukt"
++
++#: globals.h:1481
++msgid "E233: cannot open display"
++msgstr "E233: openen scherm is mislukt"
++
++#: globals.h:1483
++msgid "E41: Out of memory!"
++msgstr "E41: te weinig geheugen!"
++
++#: globals.h:1485
++msgid "Pattern not found"
++msgstr "patroon niet gevonden"
++
++#: globals.h:1487
++#, c-format
++msgid "E486: Pattern not found: %s"
++msgstr "E486: patroon niet gevonden: %s"
++
++#: globals.h:1488
++msgid "E487: Argument must be positive"
++msgstr "E487: argument moet positief zijn"
++
++#: globals.h:1490
++msgid "E459: Cannot go back to previous directory"
++msgstr "E459: kan niet terug naar vorig Dictionary"
++
++#: globals.h:1494
++msgid "E42: No Errors"
++msgstr "E42: geen fouten"
++
++#: globals.h:1495
++msgid "E776: No location list"
++msgstr ""
++
++#: globals.h:1497
++msgid "E43: Damaged match string"
++msgstr "E43: beschadigde zoekstring"
++
++#: globals.h:1498
++msgid "E44: Corrupted regexp program"
++msgstr "E44: regexp-programma is misvormd"
++
++#: globals.h:1499
++msgid "E45: 'readonly' option is set (add ! to override)"
++msgstr "E45: 'alleen-lezen'-optie is ingeschakeld (voeg ! toe om te overschrijven)"
++
++#: globals.h:1501
++#, c-format
++msgid "E46: Cannot change read-only variable \"%s\""
++msgstr "E46: kan alleen-lezenvariabele \"%s\" niet veranderen"
++
++#: globals.h:1502
++#, c-format
++msgid "E794: Cannot set variable in the sandbox: \"%s\""
++msgstr "E794: kan variabele niet instellen in de zandbak: \"%s\""
++
++#: globals.h:1505
++msgid "E47: Error while reading errorfile"
++msgstr "E47: fout tijdens lezen foutenbestand"
++
++#: globals.h:1508
++msgid "E48: Not allowed in sandbox"
++msgstr "E48: niet toegestaan in zandbak"
++
++#: globals.h:1510
++msgid "E523: Not allowed here"
++msgstr "E523: hier niet toegestaan"
++
++#: globals.h:1513
++msgid "E359: Screen mode setting not supported"
++msgstr "E359: instelling schermmodus niet ondersteund"
++
++#: globals.h:1515
++msgid "E49: Invalid scroll size"
++msgstr "E49: ongeldige scroll-grootte"
++
++#: globals.h:1516
++msgid "E91: 'shell' option is empty"
++msgstr "E91: 'shell'-optie is leeg"
++
++#: globals.h:1518
++msgid "E255: Couldn't read in sign data!"
++msgstr ""
++
++#: globals.h:1520
++msgid "E72: Close error on swap file"
++msgstr ""
++
++#: globals.h:1521
++msgid "E73: tag stack empty"
++msgstr ""
++
++#: globals.h:1522
++msgid "E74: Command too complex"
++msgstr "E74: opdracht te ingewikkeld"
++
++#: globals.h:1523
++msgid "E75: Name too long"
++msgstr "E75: te lange naam"
++
++#: globals.h:1524
++msgid "E76: Too many ["
++msgstr "E76: teveel ["
++
++#: globals.h:1525
++msgid "E77: Too many file names"
++msgstr "E77: teveel bestandsnamen"
++
++#: globals.h:1526
++msgid "E488: Trailing characters"
++msgstr "E488: nakomende tekens"
++
++#: globals.h:1527
++msgid "E78: Unknown mark"
++msgstr "E78: onbekende markering"
++
++#: globals.h:1528
++msgid "E79: Cannot expand wildcards"
++msgstr "E79: vervangen jokertekens is mislukt"
++
++#: globals.h:1530
++msgid "E591: 'winheight' cannot be smaller than 'winminheight'"
++msgstr "E591: 'winheight' kan niet kleiner zijn dan 'winminheight'"
++
++#: globals.h:1532
++msgid "E592: 'winwidth' cannot be smaller than 'winminwidth'"
++msgstr "E592: 'winwidth' kan niet kleiner zijn dan 'winminwidth'"
++
++#: globals.h:1535
++msgid "E80: Error while writing"
++msgstr "E80: opslaan is mislukt"
++
++#: globals.h:1536
++msgid "Zero count"
++msgstr "Aantal is nul"
++
++#: globals.h:1538
++msgid "E81: Using <SID> not in a script context"
++msgstr "E81: <SID> wordt buiten de scriptcontext gebruikt"
++
++#: globals.h:1541
++msgid "E449: Invalid expression received"
++msgstr "E449: ontvangen expressie is ongeldig"
++
++#: globals.h:1544
++msgid "E463: Region is guarded, cannot modify"
++msgstr "E463: Regio is bescherm en kan niet worden veranderd"
++
++#: globals.h:1545
++msgid "E744: NetBeans does not allow changes in read-only files"
++msgstr "E744: NetBeans staat geen veranderingen in alleen-lezenbestanden toe"
++
++#: globals.h:1547
++#, c-format
++msgid "E685: Internal error: %s"
++msgstr "E685: interne fout: %s"
++
++#: globals.h:1548
++msgid "E363: pattern uses more memory than 'maxmempattern'"
++msgstr "E363: patroon gebruikt meer geheugen dan 'maxmempattern'"
++
++#: globals.h:1549
++msgid "E749: empty buffer"
++msgstr "E749: leeg buffer"
++
++#: globals.h:1552
++msgid "E682: Invalid search pattern or delimiter"
++msgstr "E682: zoekpatroon of scheidingsteken is ongeldig"
++
++#: globals.h:1554
++msgid "E139: File is loaded in another buffer"
++msgstr "E139: bestand is in een ander buffer geladen"
++
++#: globals.h:1557
++#, c-format
++msgid "E764: Option '%s' is not set"
++msgstr "E764: Optie '%s' is niet ingesteld"
++
++#: globals.h:1564
++msgid "search hit TOP, continuing at BOTTOM"
++msgstr "zoeken bereikte TOP, verder vanaf BODEM"
++
++#: globals.h:1565
++msgid "search hit BOTTOM, continuing at TOP"
++msgstr "zoeken bereikte BODEM, verder vanaf TOP"
++
+diff -Naur vim73.orig/src/po/no.po vim73/src/po/no.po
+--- vim73.orig/src/po/no.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/no.po	2013-06-07 17:07:34.128911219 +0000
+@@ -2070,21 +2070,6 @@
+ msgstr "&Angre"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Kan ikke laste Zap-skrifttype '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Kan ikke bruke skrifttype %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Sender beskjed om å avslutte barneprosess.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Fant ikke vindutittel \"%s\""
+ 
+@@ -4324,9 +4309,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Ulovlig tegn '%c' i skrifttypenavn \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Ugyldig 'osfiletype'-valg - bruker Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Dobbelt signal, avslutter\n"
+ 
+diff -Naur vim73.orig/src/po/pl.UTF-8.po vim73/src/po/pl.UTF-8.po
+--- vim73.orig/src/po/pl.UTF-8.po	2010-08-13 14:11:08.000000000 +0000
++++ vim73/src/po/pl.UTF-8.po	2013-06-07 17:07:34.148911162 +0000
+@@ -2147,21 +2147,6 @@
+ msgstr "&Cofnij"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Nie mogÄ zaÅadowaÄ czcionki Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Nie mogÄ uÅŒyÄ czcionki %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"WysyÅam zawiadomienie koÅczÄ
+ce proces pochodny.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Nie mogÄ znaleÅºÄ tytuÅu okna \"%s\""
+ 
+@@ -4472,9 +4457,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: NiewÅaÅciwa opcja 'osfiletype' - uÅŒywam Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: PodwÃ³jny sygnaÅ, wychodzÄ\n"
+ 
+diff -Naur vim73.orig/src/po/pl.cp1250.po vim73/src/po/pl.cp1250.po
+--- vim73.orig/src/po/pl.cp1250.po	2010-08-15 13:02:25.000000000 +0000
++++ vim73/src/po/pl.cp1250.po	2013-06-07 17:07:34.192244371 +0000
+@@ -2147,21 +2147,6 @@
+ msgstr "&Cofnij"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Nie mogê za³adowaæ czcionki Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Nie mogê u¿yæ czcionki %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Wysy³am zawiadomienie koñcz¹ce proces pochodny.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Nie mogê znaleæ tytu³u okna \"%s\""
+ 
+@@ -4472,9 +4457,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Niew³aciwa opcja 'osfiletype' - u¿ywam Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Podwójny sygna³, wychodzê\n"
+ 
+diff -Naur vim73.orig/src/po/pl.po vim73/src/po/pl.po
+--- vim73.orig/src/po/pl.po	2010-08-13 13:58:37.000000000 +0000
++++ vim73/src/po/pl.po	2013-06-07 17:07:34.232244257 +0000
+@@ -2147,21 +2147,6 @@
+ msgstr "&Cofnij"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Nie mogê za³adowaæ czcionki Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Nie mogê u¿yæ czcionki %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Wysy³am zawiadomienie koñcz±ce proces pochodny.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Nie mogê znaleŒæ tytu³u okna \"%s\""
+ 
+@@ -4472,9 +4457,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Niedozwolony znak '%c' w nazwie czcionki \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Niew³a¶ciwa opcja 'osfiletype' - u¿ywam Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Podwójny sygna³, wychodzê\n"
+ 
+diff -Naur vim73.orig/src/po/pt_BR.po vim73/src/po/pt_BR.po
+--- vim73.orig/src/po/pt_BR.po	2010-08-11 21:08:01.000000000 +0000
++++ vim73/src/po/pt_BR.po	2013-06-07 17:07:34.265577495 +0000
+@@ -2098,21 +2098,6 @@
+ msgstr "&Desfazer"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Impossível carregar a fonte Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Impossível usar a fonte %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Enviando mensagem para terminar processo-filho.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Impossível encontrar janela de título \"%s\""
+ 
+@@ -4342,9 +4327,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Caractere '%c' inválido no nome da fonte \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Valor inválido para 'osfiletype' - usando Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Sinal duplo, saindo\n"
+ 
+diff -Naur vim73.orig/src/po/ru.cp1251.po vim73/src/po/ru.cp1251.po
+--- vim73.orig/src/po/ru.cp1251.po	2010-08-15 13:02:25.000000000 +0000
++++ vim73/src/po/ru.cp1251.po	2013-06-07 17:07:34.282244114 +0000
+@@ -1790,21 +1790,6 @@
+ msgid "Undo"
+ msgstr "Îòìåíà"
+ 
+-#, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Íåâîçìîæíî çàãðóçèòü øðèôò Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Íåâîçìîæíî èñïîëüçîâàòü øðèôò %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Îòïðàâêà ñîîáùåíèÿ äëÿ óíè÷òîæåíèÿ ïðîöåññà-ïîòîìêà.\n"
+-
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Îêíî ñ çàãîëîâêîì \"%s\" íå îáíàðóæåíî"
+ 
+@@ -3816,9 +3801,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Íåäîïóñòèìûé ñèìâîë '%c' â èìåíè øðèôòà \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Íåäîïóñòèìîå çíà÷åíèå îïöèè 'osfiletype' -- èñïîëüçóåòñÿ Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Äâîéíîé ñèãíàë, çàâåðøåíèå ðàáîòû\n"
+ 
+@@ -4906,15 +4888,15 @@
+ msgid "Edit with single &Vim"
+ msgstr "Ðåäàêòèðîâàòü â &îäíîì Vim"
+ 
+-msgid "&Diff with Vim"
+-msgstr "&Ñðàâíèòü ñ ïîìîùüþ Vim"
++msgid "Diff with Vim"
++msgstr "Ñðàâíèòü ñ ïîìîùüþ Vim"
+ 
+ msgid "Edit with &Vim"
+ msgstr "Ðå&äàêòèðîâàòü ñ ïîìîùüþ Vim"
+ 
+ #. Now concatenate
+-msgid "Edit with existing Vim - &"
+-msgstr "Ðåäàêòèðîâàòü â çàïóùåííîì Vim - &"
++msgid "Edit with existing Vim - "
++msgstr "Ðåäàêòèðîâàòü â çàïóùåííîì Vim - "
+ 
+ msgid "Edits the selected file(s) with Vim"
+ msgstr "Ðåäàêòèðîâàòü âûäåëåííûå ôàéëû ñ ïîìîùüþ Vim"
+diff -Naur vim73.orig/src/po/ru.po vim73/src/po/ru.po
+--- vim73.orig/src/po/ru.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/ru.po	2013-06-07 17:07:34.308910705 +0000
+@@ -1790,21 +1790,6 @@
+ msgid "Undo"
+ msgstr "ÐÑÐŒÐµÐœÐ°"
+ 
+-#, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ Ð·Ð°Ð³ÑÑÐ·ÐžÑÑ ÑÑÐžÑÑ Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: ÐÐµÐ²ÐŸÐ·ÐŒÐŸÐ¶ÐœÐŸ ÐžÑÐ¿ÐŸÐ»ÑÐ·ÐŸÐ²Ð°ÑÑ ÑÑÐžÑÑ %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"ÐÑÐ¿ÑÐ°Ð²ÐºÐ° ÑÐŸÐŸÐ±ÑÐµÐœÐžÑ ÐŽÐ»Ñ ÑÐœÐžÑÑÐŸÐ¶ÐµÐœÐžÑ Ð¿ÑÐŸÑÐµÑÑÐ°-Ð¿ÐŸÑÐŸÐŒÐºÐ°.\n"
+-
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: ÐÐºÐœÐŸ Ñ Ð·Ð°Ð³ÐŸÐ»ÐŸÐ²ÐºÐŸÐŒ \"%s\" ÐœÐµ ÐŸÐ±ÐœÐ°ÑÑÐ¶ÐµÐœÐŸ"
+ 
+@@ -3816,9 +3801,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: ÐÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÑÐ¹ ÑÐžÐŒÐ²ÐŸÐ» '%c' Ð² ÐžÐŒÐµÐœÐž ÑÑÐžÑÑÐ° \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: ÐÐµÐŽÐŸÐ¿ÑÑÑÐžÐŒÐŸÐµ Ð·ÐœÐ°ÑÐµÐœÐžÐµ ÐŸÐ¿ÑÐžÐž 'osfiletype' -- ÐžÑÐ¿ÐŸÐ»ÑÐ·ÑÐµÑÑÑ Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: ÐÐ²ÐŸÐ¹ÐœÐŸÐ¹ ÑÐžÐ³ÐœÐ°Ð», Ð·Ð°Ð²ÐµÑÑÐµÐœÐžÐµ ÑÐ°Ð±ÐŸÑÑ\n"
+ 
+@@ -4906,15 +4888,15 @@
+ msgid "Edit with single &Vim"
+ msgstr "Ð ÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ Ð² &ÐŸÐŽÐœÐŸÐŒ Vim"
+ 
+-msgid "&Diff with Vim"
+-msgstr "&Ð¡ÑÐ°Ð²ÐœÐžÑÑ Ñ Ð¿ÐŸÐŒÐŸÑÑÑ Vim"
++msgid "Diff with Vim"
++msgstr "Ð¡ÑÐ°Ð²ÐœÐžÑÑ Ñ Ð¿ÐŸÐŒÐŸÑÑÑ Vim"
+ 
+ msgid "Edit with &Vim"
+ msgstr "Ð Ðµ&ÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ Ñ Ð¿ÐŸÐŒÐŸÑÑÑ Vim"
+ 
+ #. Now concatenate
+-msgid "Edit with existing Vim - &"
+-msgstr "Ð ÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ Ð² Ð·Ð°Ð¿ÑÑÐµÐœÐœÐŸÐŒ Vim - &"
++msgid "Edit with existing Vim - "
++msgstr "Ð ÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ Ð² Ð·Ð°Ð¿ÑÑÐµÐœÐœÐŸÐŒ Vim - "
+ 
+ msgid "Edits the selected file(s) with Vim"
+ msgstr "Ð ÐµÐŽÐ°ÐºÑÐžÑÐŸÐ²Ð°ÑÑ Ð²ÑÐŽÐµÐ»ÐµÐœÐœÑÐµ ÑÐ°Ð¹Ð»Ñ Ñ Ð¿ÐŸÐŒÐŸÑÑÑ Vim"
+diff -Naur vim73.orig/src/po/sjiscorr.c vim73/src/po/sjiscorr.c
+--- vim73.orig/src/po/sjiscorr.c	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/sjiscorr.c	2013-06-07 17:07:34.335577295 +0000
+@@ -18,10 +18,10 @@
+ 	{
+ 		for (p = buffer; *p != 0; p++)
+ 		{
+-			if (strncmp(p, "charset=euc-jp", 14) == 0)
++			if (strncmp(p, "charset=utf-8", 13) == 0)
+ 			{
+ 				fputs("charset=cp932", stdout);
+-				p += 13;
++				p += 12;
+ 			}
+ 			else if (strncmp(p, "ja.po - Japanese message file", 29) == 0)
+ 			{
+diff -Naur vim73.orig/src/po/sk.cp1250.po vim73/src/po/sk.cp1250.po
+--- vim73.orig/src/po/sk.cp1250.po	2010-08-15 13:02:25.000000000 +0000
++++ vim73/src/po/sk.cp1250.po	2013-06-07 17:07:34.352243914 +0000
+@@ -1908,19 +1908,6 @@
+ msgid "&Undo"
+ msgstr "&Spä"
+ 
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Nemôem naèíta chybný font '%s'"
+-
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Nedá sa pouí písmo %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Posielam správu na ukonèenie synovského procesu.\n"
+-
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Nemono nájs okno s titulkom \"%s\""
+ 
+@@ -4095,9 +4082,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Chybný znak '%c' v názve písma \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Chybná 'osfiletype' voŸba - pouitie Textu"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: dvojitý signál, konèím\n"
+ 
+diff -Naur vim73.orig/src/po/sk.po vim73/src/po/sk.po
+--- vim73.orig/src/po/sk.po	2010-08-13 14:00:22.000000000 +0000
++++ vim73/src/po/sk.po	2013-06-07 17:07:34.382243829 +0000
+@@ -1908,19 +1908,6 @@
+ msgid "&Undo"
+ msgstr "&Spä»"
+ 
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: NemôŸem naèíta» chybný font '%s'"
+-
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Nedá sa pouŸí» písmo %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Posielam správu na ukonèenie synovského procesu.\n"
+-
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: NemoŸno nájs» okno s titulkom \"%s\""
+ 
+@@ -4095,9 +4082,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Chybný znak '%c' v názve písma \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Chybná 'osfiletype' voµba - pouŸitie Textu"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: dvojitý signál, konèím\n"
+ 
+diff -Naur vim73.orig/src/po/sv.po vim73/src/po/sv.po
+--- vim73.orig/src/po/sv.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/sv.po	2013-06-07 17:07:34.408910419 +0000
+@@ -173,7 +173,7 @@
+ 
+ #, c-format
+ msgid "    line=%ld  id=%d  name=%s"
+-msgstr "    line=%ld  id=%d  namn%s"
++msgstr "    line=%ld  id=%d  namn=%s"
+ 
+ #, c-format
+ msgid "E96: Can not diff more than %ld buffers"
+@@ -2038,21 +2038,6 @@
+ msgstr "&Ångra"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Kan inte läsa in Zap-typsnitt '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Kan inte använda typsnitt %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Skickar meddelande för att avsluta barnprocess.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: Kan inte hitta fönstertitel \"%s\""
+ 
+@@ -4303,9 +4288,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: Otillåtet tecken '%c' i typsnittsnamn \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Ogiltig 'osfiletype'-flagga - använder Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Dubbelsignal, avslutar\n"
+ 
+diff -Naur vim73.orig/src/po/uk.cp1251.po vim73/src/po/uk.cp1251.po
+--- vim73.orig/src/po/uk.cp1251.po	2010-08-15 13:02:25.000000000 +0000
++++ vim73/src/po/uk.cp1251.po	2013-06-07 17:07:34.442243657 +0000
+@@ -14,10 +14,11 @@
+ msgstr ""
+ "Project-Id-Version: vim 7.3\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2010-08-11 12:13+0300\n"
++"POT-Creation-Date: 2013-01-17 10:06+0200\n"
+ "PO-Revision-Date: 2010-06-18 21:53+0300\n"
+ "Last-Translator: Àíàòîë³é Ñàõí³ê <sakhnik@gmail.com>\n"
+ "Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
++"Language: uk\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=cp1251\n"
+ "Content-Transfer-Encoding: 8bit\n"
+@@ -43,6 +44,9 @@
+ msgid "[Quickfix List]"
+ msgstr "[Ñïèñîê âèïðàâëåíü]"
+ 
++msgid "E855: Autocommands caused command to abort"
++msgstr "E855: Àâòîêîìàíäè ïðèçâåëè äî ñêàñóâàííÿ êîìàíäè"
++
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: Íåìàº ìîæëèâîñò³ ðîçì³ñòèòè õî÷ îäèí áóôåð, çàâåðøåííÿ ðîáîòè..."
+ 
+@@ -174,7 +178,6 @@
+ msgid "Top"
+ msgstr "Âãîð³"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+@@ -235,11 +238,11 @@
+ 
+ #, c-format
+ msgid "E102: Can't find buffer \"%s\""
+-msgstr "E102: Íå âäàëîñÿ çíàéòè áóôåð \"%s\""
++msgstr "E102: Íå âäàëîñÿ çíàéòè áóôåð «%s»"
+ 
+ #, c-format
+ msgid "E103: Buffer \"%s\" is not in diff mode"
+-msgstr "E103: Áóôåð \"%s\" íå â ðåæèì³ ïîð³âíÿííÿ"
++msgstr "E103: Áóôåð «%s» íå â ðåæèì³ ïîð³âíÿííÿ"
+ 
+ msgid "E787: Buffer changed unexpectedly"
+ msgstr "E787: Áóôåð íåñïîä³âàíî çì³íèâñÿ"
+@@ -302,6 +305,13 @@
+ msgid "Hit end of paragraph"
+ msgstr "Òðàïèâñÿ ê³íåöü ïàðàãðàôà"
+ 
++# msgstr "E443: "
++msgid "E839: Completion function changed window"
++msgstr "E839: Ôóíêö³ÿ äîïîâíåííÿ çì³íèëà â³êíî"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: Ôóíêö³ÿ äîïîâíåííÿ çíèùèëà òåêñò"
++
+ msgid "'dictionary' option is empty"
+ msgstr "Îïö³ÿ 'dictionary' ïîðîæíÿ"
+ 
+@@ -448,7 +458,7 @@
+ msgstr "E711: Ñïèñîê ìàº íåäîñòàòíüî åëåìåíò³â"
+ 
+ msgid "E690: Missing \"in\" after :for"
+-msgstr "E690: Ïðîïóùåíî \"in\" ï³ñëÿ :for"
++msgstr "E690: Ïðîïóùåíî «in» ï³ñëÿ :for"
+ 
+ #, c-format
+ msgid "E107: Missing parentheses: %s"
+@@ -456,7 +466,7 @@
+ 
+ #, c-format
+ msgid "E108: No such variable: \"%s\""
+-msgstr "E108: Çì³ííî¿ íåìàº: \"%s\""
++msgstr "E108: Çì³ííî¿ íåìàº: «%s»"
+ 
+ msgid "E743: variable nested too deep for (un)lock"
+ msgstr "E743: Çì³ííà ìàº çàáàãàòî âêëàäåíü ùîá áóòè çà-/â³äêðèòîþ."
+@@ -501,11 +511,11 @@
+ 
+ #, c-format
+ msgid "E114: Missing quote: %s"
+-msgstr "E114: Áðàêóº '\"': %s"
++msgstr "E114: Áðàêóº ëàïêè: %s"
+ 
+ #, c-format
+ msgid "E115: Missing quote: %s"
+-msgstr "E115: Áðàêóº \"'\": %s"
++msgstr "E115: Áðàêóº ëàïêè: %s"
+ 
+ # msgstr "E404: "
+ #, c-format
+@@ -523,7 +533,7 @@
+ 
+ #, c-format
+ msgid "E721: Duplicate key in Dictionary: \"%s\""
+-msgstr "E721: Ïîâòîðåííÿ êëþ÷à â ñëîâíèêó: \"%s\""
++msgstr "E721: Ïîâòîðåííÿ êëþ÷à â ñëîâíèêó: «%s»"
+ 
+ # msgstr "E235: "
+ #, c-format
+@@ -565,6 +575,10 @@
+ msgid "E808: Number or Float required"
+ msgstr "E808: Òðåáà âêàçàòè Number ÷è Float"
+ 
++# msgstr "E14: "
++msgid "add() argument"
++msgstr "àðãóìåíò add()"
++
+ msgid "E699: Too many arguments"
+ msgstr "E699: Çàáàãàòî àðãóìåíò³â"
+ 
+@@ -580,11 +594,23 @@
+ msgid "&Ok"
+ msgstr "&O:Ãàðàçä"
+ 
++# msgstr "E14: "
++msgid "extend() argument"
++msgstr "àðãóìåíò extend()"
++
+ # msgstr "E226: "
+ #, c-format
+ msgid "E737: Key already exists: %s"
+ msgstr "E737: Êëþ÷ âæå ³ñíóº: %s"
+ 
++# msgstr "E14: "
++msgid "map() argument"
++msgstr "àðãóìåíò map()"
++
++# msgstr "E14: "
++msgid "filter() argument"
++msgstr "àðãóìåíò filter()"
++
+ #, c-format
+ msgid "+-%s%3ld lines: "
+ msgstr "+-%s%3ld ðÿäê³â: "
+@@ -603,6 +629,10 @@
+ msgid "called inputrestore() more often than inputsave()"
+ msgstr "Âèêëèêè äî inputrestore() ÷àñò³øå, í³æ äî inputsave()"
+ 
++# msgstr "E14: "
++msgid "insert() argument"
++msgstr "àðãóìåíò insert()"
++
+ # msgstr "E406: "
+ msgid "E786: Range not allowed"
+ msgstr "E786: ²íòåðâàë íå äîçâîëåíî"
+@@ -630,12 +660,24 @@
+ msgid "E277: Unable to read a server reply"
+ msgstr "E277: Íå âäàëîñÿ ïðî÷èòàòè â³äïîâ³äü ñåðâåðà"
+ 
++# msgstr "E14: "
++msgid "remove() argument"
++msgstr "àðãóìåíò remove()"
++
+ msgid "E655: Too many symbolic links (cycle?)"
+ msgstr "E655: Çàáàãàòî ñèìâîëüíèõ ïîñèëàíü (öèêë?)"
+ 
++# msgstr "E14: "
++msgid "reverse() argument"
++msgstr "àðãóìåíò reverse()"
++
+ msgid "E258: Unable to send to client"
+ msgstr "E258: Íå âäàëîñÿ íàä³ñëàòè êë³ºíòó"
+ 
++# msgstr "E14: "
++msgid "sort() argument"
++msgstr "àðãóìåíò sort()"
++
+ # msgstr "E364: "
+ msgid "E702: Sort compare function failed"
+ msgstr "E702: Ïîìèëêà ó ôóíêö³¿ ïîð³âíÿííÿ"
+@@ -673,14 +715,6 @@
+ msgstr "E806: Float âæèòî ÿê String"
+ 
+ #, c-format
+-msgid "E704: Funcref variable name must start with a capital: %s"
+-msgstr "E704: Íàçâà çì³ííî¿ Funcref ìàº ïî÷èíàòèñÿ ç âåëèêî¿ ë³òåðè: %s"
+-
+-#, c-format
+-msgid "E705: Variable name conflicts with existing function: %s"
+-msgstr "E705: Íàçâà çì³ííî¿ ñï³âïàäàº ç ³ñíóþ÷îþ ôóíêö³ºþ: %s"
+-
+-#, c-format
+ msgid "E706: Variable type mismatch for: %s"
+ msgstr "E706: Íåïðàâèëüíèé òèï çì³ííî¿: %s"
+ 
+@@ -689,6 +723,14 @@
+ msgstr "E795: Íå ìîæíà çíèùèòè çì³ííó %s"
+ 
+ #, c-format
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: Íàçâà çì³ííî¿ Funcref ìàº ïî÷èíàòèñÿ ç âåëèêî¿ ë³òåðè: %s"
++
++#, c-format
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: Íàçâà çì³ííî¿ ñï³âïàäàº ç ³ñíóþ÷îþ ôóíêö³ºþ: %s"
++
++#, c-format
+ msgid "E741: Value is locked: %s"
+ msgstr "E741: Çíà÷åííÿ çàõèùåíå: %s"
+ 
+@@ -714,6 +756,10 @@
+ msgid "E125: Illegal argument: %s"
+ msgstr "E125: Íåäîçâîëåíèé àðãóìåíò: %s"
+ 
++#, c-format
++msgid "E853: Duplicate argument name: %s"
++msgstr "E853: Íàçâà àðãóìåíòó ïîâòîðþºòüñÿ: %s"
++
+ msgid "E126: Missing :endfunction"
+ msgstr "E126: Áðàêóº :endfunction"
+ 
+@@ -785,7 +831,7 @@
+ msgstr "Æîäíîãî ñòàðîãî ôàéëó"
+ 
+ msgid "Entering Debug mode.  Type \"cont\" to continue."
+-msgstr "Ðåæèì íàëàãîäæåííÿ.  Ùîá ïðîäîâæèòè ââåä³òü \"cont\"."
++msgstr "Ðåæèì íàëàãîäæåííÿ.  Ùîá ïðîäîâæèòè ââåä³òü «cont»."
+ 
+ #, c-format
+ msgid "line %ld: %s"
+@@ -797,7 +843,7 @@
+ 
+ #, c-format
+ msgid "Breakpoint in \"%s%s\" line %ld"
+-msgstr "Òî÷êà çóïèíêè â \"%s%s\" ðÿäîê %ld"
++msgstr "Òî÷êà çóïèíêè â «%s%s» ðÿäîê %ld"
+ 
+ #, c-format
+ msgid "E161: Breakpoint not found: %s"
+@@ -811,21 +857,21 @@
+ msgstr "%3d %s %s   ðÿäîê %ld"
+ 
+ msgid "E750: First use \":profile start {fname}\""
+-msgstr "E750: Ñïî÷àòêó çðîá³òü \":profile start {ôàéë}\""
++msgstr "E750: Ñïî÷àòêó çðîá³òü «:profile start {ôàéë}»"
+ 
+ msgid "Save As"
+ msgstr "Çáåðåãòè ÿê"
+ 
+ #, c-format
+ msgid "Save changes to \"%s\"?"
+-msgstr "Çáåðåãòè çì³íè â \"%s\"?"
++msgstr "Çáåðåãòè çì³íè â «%s»?"
+ 
+ msgid "Untitled"
+ msgstr "Íåíàçâàíèé"
+ 
+ #, c-format
+ msgid "E162: No write since last change for buffer \"%s\""
+-msgstr "E162: Áóôåð \"%s\" ìàº íåçáåðåæåí³ çì³íè"
++msgstr "E162: Áóôåð «%s» ìàº íåçáåðåæåí³ çì³íè"
+ 
+ msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
+ msgstr ""
+@@ -847,38 +893,38 @@
+ # msgstr "E195: "
+ #, c-format
+ msgid "Searching for \"%s\" in \"%s\""
+-msgstr "Ïîøóê \"%s\" â \"%s\""
++msgstr "Ïîøóê «%s» â «%s»"
+ 
+ #, c-format
+ msgid "Searching for \"%s\""
+-msgstr "Ïîøóê \"%s\""
++msgstr "Ïîøóê «%s»"
+ 
+ #, c-format
+ msgid "not found in 'runtimepath': \"%s\""
+-msgstr "Â 'runtimepath' íå çíàéäåíî \"%s\""
++msgstr "Â 'runtimepath' íå çíàéäåíî «%s»"
+ 
+ msgid "Source Vim script"
+ msgstr "Ïðî÷èòàòè ñêðèïò Vim"
+ 
+ #, c-format
+ msgid "Cannot source a directory: \"%s\""
+-msgstr "Íå âäàëîñÿ ïðî÷èòàòè êàòàëîã: \"%s\""
++msgstr "Íå âäàëîñÿ ïðî÷èòàòè êàòàëîã: «%s»"
+ 
+ #, c-format
+ msgid "could not source \"%s\""
+-msgstr "Íå âäàëîñÿ âèêîíàòè \"%s\""
++msgstr "Íå âäàëîñÿ âèêîíàòè «%s»"
+ 
+ #, c-format
+ msgid "line %ld: could not source \"%s\""
+-msgstr "ðÿäîê %ld: íå âäàëîñÿ âèêîíàòè \"%s\""
++msgstr "ðÿäîê %ld: íå âäàëîñÿ âèêîíàòè «%s»"
+ 
+ #, c-format
+ msgid "sourcing \"%s\""
+-msgstr "âèêîíóºòüñÿ \"%s\""
++msgstr "âèêîíóºòüñÿ «%s»"
+ 
+ #, c-format
+ msgid "line %ld: sourcing \"%s\""
+-msgstr "ðÿäîê %ld: âèêîíóºòüñÿ \"%s\""
++msgstr "ðÿäîê %ld: âèêîíóºòüñÿ «%s»"
+ 
+ #, c-format
+ msgid "finished sourcing %s"
+@@ -912,11 +958,11 @@
+ 
+ #, c-format
+ msgid "Current %slanguage: \"%s\""
+-msgstr "Ìîâà (%s): \"%s\""
++msgstr "Ìîâà (%s): «%s»"
+ 
+ #, c-format
+ msgid "E197: Cannot set language to \"%s\""
+-msgstr "E197: Íå âäàëîñÿ âñòàíîâèòè ìîâó \"%s\""
++msgstr "E197: Íå âäàëîñÿ âñòàíîâèòè ìîâó «%s»"
+ 
+ #, c-format
+ msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+@@ -959,7 +1005,7 @@
+ 
+ #, c-format
+ msgid "Reading viminfo file \"%s\"%s%s%s"
+-msgstr "Ç÷èòóºòüñÿ ôàéë viminfo: \"%s\"%s%s%s"
++msgstr "Ç÷èòóºòüñÿ ôàéë viminfo: «%s»%s%s%s"
+ 
+ msgid " info"
+ msgstr " ³íôîðìàö³ÿ"
+@@ -976,7 +1022,7 @@
+ #. avoid a wait_return for this message, it's annoying
+ #, c-format
+ msgid "E137: Viminfo file is not writable: %s"
+-msgstr "E137: Íå äîçâîëåíî çàïèñ ó ôàéë viminfo: \"%s\""
++msgstr "E137: Íå äîçâîëåíî çàïèñ ó ôàéë viminfo: %s"
+ 
+ #, c-format
+ msgid "E138: Can't write viminfo file %s!"
+@@ -984,14 +1030,13 @@
+ 
+ #, c-format
+ msgid "Writing viminfo file \"%s\""
+-msgstr "Çàïèñóºòüñÿ ôàéë viminfo \"%s\""
++msgstr "Çàïèñóºòüñÿ ôàéë viminfo «%s»"
+ 
+ #. Write the info:
+ #, c-format
+ msgid "# This viminfo file was generated by Vim %s.\n"
+ msgstr "# Öåé ôàéë àâòîìàòè÷íî ñòâîðåíèé Vim %s.\n"
+ 
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+@@ -999,7 +1044,6 @@
+ "# Ìîæåòå ðåäàãóâàòè, àëå ÎÁÅÐÅÆÍÎ!\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+ msgstr "# Çíà÷åííÿ 'encoding' ï³ä ÷àñ ñòâîðåííÿ öüîãî ôàéëó\n"
+ 
+@@ -1014,11 +1058,11 @@
+ 
+ #, c-format
+ msgid "Overwrite existing file \"%s\"?"
+-msgstr "Ïåðåïèñàòè ³ñíóþ÷èé ôàéë \"%s\"?"
++msgstr "Ïåðåïèñàòè ³ñíóþ÷èé ôàéë «%s»?"
+ 
+ #, c-format
+ msgid "Swap file \"%s\" exists, overwrite anyway?"
+-msgstr "Ôàéë îáì³íó \"%s\" ³ñíóº, ïåðåçàïèñàòè?"
++msgstr "Ôàéë îáì³íó «%s» ³ñíóº, ïåðåçàïèñàòè?"
+ 
+ #, c-format
+ msgid "E768: Swap file exists: %s (:silent! overrides)"
+@@ -1036,7 +1080,7 @@
+ "'readonly' option is set for \"%s\".\n"
+ "Do you wish to write anyway?"
+ msgstr ""
+-"Äëÿ \"%s\" âñòàíîâëåíî 'readonly'.\n"
++"Äëÿ «%s» âñòàíîâëåíî 'readonly'.\n"
+ "Áàæàºòå âñå îäíî ïðîäîâæèòè çàïèñ?"
+ 
+ #, c-format
+@@ -1045,13 +1089,13 @@
+ "It may still be possible to write it.\n"
+ "Do you wish to try?"
+ msgstr ""
+-"Ôàéë \"%s\" äîçâîëåíî ò³ëüêè ÷èòàòè.\n"
++"Ôàéë «%s» äîçâîëåíî ò³ëüêè ÷èòàòè.\n"
+ "Ïðîòå, ìîæëèâî, éîãî ìîæíà çàïèñàòè.\n"
+ "Õî÷åòå ñïðîáóâàòè?"
+ 
+ #, c-format
+ msgid "E505: \"%s\" is read-only (add ! to override)"
+-msgstr "E505: \"%s\" ò³ëüêè äëÿ ÷èòàííÿ (! ùîá íå çâàæàòè)"
++msgstr "E505: «%s» ò³ëüêè äëÿ ÷èòàííÿ (! ùîá íå çâàæàòè)"
+ 
+ msgid "Edit File"
+ msgstr "Ðåäàãóâàòè Ôàéë"
+@@ -1108,7 +1152,6 @@
+ msgid "Pattern found in every line: %s"
+ msgstr "Çðàçîê çíàéäåíî ó êîæíîìó ðÿäêó: %s"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+@@ -1131,7 +1174,7 @@
+ 
+ #, c-format
+ msgid "Sorry, help file \"%s\" not found"
+-msgstr "Âèáà÷òå, ôàéë äîïîìîãè \"%s\" íå çíàéäåíî"
++msgstr "Âèáà÷òå, ôàéë äîïîìîãè «%s» íå çíàéäåíî"
+ 
+ #, c-format
+ msgid "E150: Not a directory: %s"
+@@ -1151,7 +1194,7 @@
+ 
+ #, c-format
+ msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+-msgstr "E154: Ïîâòîðåííÿ òåŽó \"%s\" ó ôàéë³ %s/%s"
++msgstr "E154: Ïîâòîðåííÿ òåŽó «%s» ó ôàéë³ %s/%s"
+ 
+ #, c-format
+ msgid "E160: Unknown sign command: %s"
+@@ -1192,7 +1235,7 @@
+ msgstr "[Çíèùåíî]"
+ 
+ msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+-msgstr "Ðåæèì Ex. Äëÿ ïîâåðíåííÿ äî íîðìàëüíîãî ðåæèìó âèêîíàéòå \"visual\""
++msgstr "Ðåæèì Ex. Äëÿ ïîâåðíåííÿ äî íîðìàëüíîãî ðåæèìó âèêîíàéòå «visual»"
+ 
+ msgid "E501: At end-of-file"
+ msgstr "E501: Ê³íåöü ôàéëó"
+@@ -1220,7 +1263,7 @@
+ msgstr "E493: ²íòåðâàë çàäàíî íàâèâîð³ò"
+ 
+ msgid "Backwards range given, OK to swap"
+-msgstr "²íòåðâàë çàäàíî íàâèâîð³ò, ùîá ïîì³íÿòè ì³ñöÿìè -- ÃÀÐÀÇÄ"
++msgstr "²íòåðâàë çàäàíî íàâèâîð³ò, ùîá ïîì³íÿòè ì³ñöÿìè  ÃÀÐÀÇÄ"
+ 
+ msgid "E494: Use w or w>>"
+ msgstr "E494: Ñïðîáóéòå w àáî w>>"
+@@ -1288,6 +1331,9 @@
+ msgid "E183: User defined commands must start with an uppercase letter"
+ msgstr "E183: Êîìàíäè êîðèñòóâà÷à ïîâèíí³ ïî÷èíàòèñÿ ç âåëèêî¿ ë³òåðè"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: Çàðåçåðâîâàíà íàçâà, íå ìîæíà âèêîðèñòàòè äëÿ êîðèñòóâàöüêî¿ êîìàíäè"
++
+ # msgstr "E183: "
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+@@ -1309,8 +1355,8 @@
+ 
+ # msgstr "E184: "
+ #, c-format
+-msgid "E185: Cannot find color scheme %s"
+-msgstr "E185: Íå âäàëîñÿ çíàéòè ñõåìó êîëüîð³â %s"
++msgid "E185: Cannot find color scheme '%s'"
++msgstr "E185: Íå âäàëîñÿ çíàéòè ñõåìó êîëüîð³â «%s»"
+ 
+ msgid "Greetings, Vim user!"
+ msgstr "Â³òàííÿ, êîðèñòóâà÷ó Vim!"
+@@ -1380,12 +1426,12 @@
+ 
+ #, c-format
+ msgid "E189: \"%s\" exists (add ! to override)"
+-msgstr "E189: Ôàéë \"%s\" ³ñíóº (! ùîá íå çâàæàòè)"
++msgstr "E189: Ôàéë «%s» ³ñíóº (! ùîá íå çâàæàòè)"
+ 
+ # msgstr "E189: "
+ #, c-format
+ msgid "E190: Cannot open \"%s\" for writing"
+-msgstr "E190: Íå âäàëîñÿ â³äêðèòè \"%s\" äëÿ çàïèñó"
++msgstr "E190: Íå âäàëîñÿ â³äêðèòè «%s» äëÿ çàïèñó"
+ 
+ # msgstr "E190: "
+ #. set mark
+@@ -1404,23 +1450,26 @@
+ msgstr "E194: Íåìàº íàçâè âòîðèííîãî ôàéëó äëÿ çàì³íè '#'"
+ 
+ msgid "E495: no autocommand file name to substitute for \"<afile>\""
+-msgstr "E495: Íåìàº íàçâè ôàéëó àâòîêîìàíäè äëÿ çàì³íè \"<afile>\""
++msgstr "E495: Íåìàº íàçâè ôàéëó àâòîêîìàíäè äëÿ çàì³íè «<afile>»"
+ 
+ msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+-msgstr "E496: Íåìàº íîìåðà áóôåðà àâòîêîìàíäè äëÿ çàì³íè \"<abuf>\""
++msgstr "E496: Íåìàº íîìåðà áóôåðà àâòîêîìàíäè äëÿ çàì³íè «<abuf>»"
+ 
+ msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+-msgstr "E497: Íåìàº íàçâè çá³ãó àâòîêîìàíäè äëÿ çàì³íè \"<amatch>\""
++msgstr "E497: Íåìàº íàçâè çá³ãó àâòîêîìàíäè äëÿ çàì³íè «<amatch>»"
+ 
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+-msgstr "E498: Íåìàº íàçâè ôàéëó :source äëÿ çàì³íè \"<sfile>\""
++msgstr "E498: Íåìàº íàçâè ôàéëó :source äëÿ çàì³íè «<sfile>»"
++
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: íåìàº íîìåðà ðÿäêà, ùîá âèêîðèñòàòè ç «<sfile>»"
+ 
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+-msgstr "E499: Íàçâà ôàéëó äëÿ '%' ÷è '#' ïîðîæíÿ, ïðàöþº ëèøå ç \":p:h\""
++msgstr "E499: Íàçâà ôàéëó äëÿ '%' ÷è '#' ïîðîæíÿ, ïðàöþº ëèøå ç «:p:h»"
+ 
+ msgid "E500: Evaluates to an empty string"
+-msgstr "E500: Ðåçóëüòàò -- ïîðîæí³é ðÿäîê"
++msgstr "E500: Ðåçóëüòàò  ïîðîæí³é ðÿäîê"
+ 
+ msgid "E195: Cannot open viminfo file for reading"
+ msgstr "E195: Íå âäàëîñÿ ïðî÷èòàòè ôàéë viminfo"
+@@ -1652,6 +1701,9 @@
+ msgid "[converted]"
+ msgstr "[êîíâåðòîâàíî]"
+ 
++msgid "[blowfish]"
++msgstr "[blowfish]"
++
+ msgid "[crypted]"
+ msgstr "[çàøèôðîâàíî]"
+ 
+@@ -1853,50 +1905,50 @@
+ 
+ #, c-format
+ msgid "E208: Error writing to \"%s\""
+-msgstr "E208: Ïîìèëêà çàïèñó ó \"%s\""
++msgstr "E208: Ïîìèëêà çàïèñó ó «%s»"
+ 
+ #, c-format
+ msgid "E209: Error closing \"%s\""
+-msgstr "E209: Ïîìèëêà çàêðèòòÿ \"%s\""
++msgstr "E209: Ïîìèëêà çàêðèòòÿ «%s»"
+ 
+ #, c-format
+ msgid "E210: Error reading \"%s\""
+-msgstr "E210: Ïîìèëêà ÷èòàííÿ \"%s\""
++msgstr "E210: Ïîìèëêà ÷èòàííÿ «%s»"
+ 
+ msgid "E246: FileChangedShell autocommand deleted buffer"
+ msgstr "E246: Àâòîêîìàíäà FileChangedShell çíèùèëà áóôåð"
+ 
+ #, c-format
+ msgid "E211: File \"%s\" no longer available"
+-msgstr "E211: Ôàéë \"%s\" á³ëüøå íå äîñÿæíèé"
++msgstr "E211: Ôàéë «%s» á³ëüøå íå äîñÿæíèé"
+ 
+ #, c-format
+ msgid ""
+ "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
+ "well"
+-msgstr "W12: Çàñòåðåæåííÿ: Ôàéë \"%s\" çì³íèâñÿ, àëå é áóôåð ó Vim òàêîæ"
++msgstr "W12: Çàñòåðåæåííÿ: Ôàéë «%s» çì³íèâñÿ, àëå é áóôåð ó Vim òàêîæ"
+ 
+ msgid "See \":help W12\" for more info."
+-msgstr "Äèâ. \":help W12\" äëÿ óòî÷íåííÿ."
++msgstr "Äèâ. «:help W12» äëÿ óòî÷íåííÿ."
+ 
+ #, c-format
+ msgid "W11: Warning: File \"%s\" has changed since editing started"
+-msgstr "W11: Çàñòåðåæåííÿ: Ôàéë \"%s\" çì³íèâñÿ ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
++msgstr "W11: Çàñòåðåæåííÿ: Ôàéë «%s» çì³íèâñÿ ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
+ 
+ msgid "See \":help W11\" for more info."
+-msgstr "Äèâ. \":help W11\" äëÿ óòî÷íåííÿ."
++msgstr "Äèâ. «:help W11» äëÿ óòî÷íåííÿ."
+ 
+ #, c-format
+ msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
+ msgstr ""
+-"W16: Çàñòåðåæåííÿ: Ðåæèì ôàéëó \"%s\" çì³íèâñÿ ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
++"W16: Çàñòåðåæåííÿ: Ðåæèì ôàéëó «%s» çì³íèâñÿ ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
+ 
+ msgid "See \":help W16\" for more info."
+-msgstr "Äèâ. \":help W16\" äëÿ óòî÷íåííÿ."
++msgstr "Äèâ. «:help W16» äëÿ óòî÷íåííÿ."
+ 
+ #, c-format
+ msgid "W13: Warning: File \"%s\" has been created after editing started"
+-msgstr "W13: Çàñòåðåæåííÿ: Ôàéë \"%s\" áóëî ñòâîðåíî ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
++msgstr "W13: Çàñòåðåæåííÿ: Ôàéë «%s» áóëî ñòâîðåíî ï³ñëÿ ïî÷àòêó ðåäàãóâàííÿ"
+ 
+ msgid "Warning"
+ msgstr "Çàñòåðåæåííÿ"
+@@ -1910,11 +1962,11 @@
+ 
+ #, c-format
+ msgid "E462: Could not prepare for reloading \"%s\""
+-msgstr "E462: Íå âäàëîñÿ ï³äãîòóâàòè \"%s\" äëÿ ïåðå÷èòàííÿ"
++msgstr "E462: Íå âäàëîñÿ ï³äãîòóâàòè «%s», ùîá ïåðå÷èòàòè"
+ 
+ #, c-format
+ msgid "E321: Could not reload \"%s\""
+-msgstr "E321: Íå âäàëîñÿ ïåðå÷èòàòè \"%s\""
++msgstr "E321: Íå âäàëîñÿ ïåðå÷èòàòè «%s»"
+ 
+ msgid "--Deleted--"
+ msgstr "--Çíèùåíî--"
+@@ -1926,7 +1978,7 @@
+ #. the group doesn't exist
+ #, c-format
+ msgid "E367: No such group: \"%s\""
+-msgstr "E367: Íåìàº òàêî¿ ãðóïè: \"%s\""
++msgstr "E367: Íåìàº òàêî¿ ãðóïè: «%s»"
+ 
+ #, c-format
+ msgid "E215: Illegal character after *: %s"
+@@ -1968,7 +2020,7 @@
+ # msgstr "E218: "
+ #, c-format
+ msgid "%s Auto commands for \"%s\""
+-msgstr "Àâòîêîìàíäè %s äëÿ \"%s\""
++msgstr "Àâòîêîìàíäè %s äëÿ «%s»"
+ 
+ #, c-format
+ msgid "Executing %s"
+@@ -2067,6 +2119,12 @@
+ msgid "E232: Cannot create BalloonEval with both message and callback"
+ msgstr "E232: Íå âäàëîñÿ ñòâîðèòè BalloonEval ç ïîâ³äîìëåííÿì ³ ôóíêö³ºþ"
+ 
++msgid "E851: Failed to create a new process for the GUI"
++msgstr "E851: Íå âäàëîñÿ ñòâîðèòè íîâèé ïðîöåñ äëÿ GUI"
++
++msgid "E852: The child process failed to start the GUI"
++msgstr "E852: Äî÷³ðí³é ïðîöåñ íå çì³ã çàïóñòèòè GUI"
++
+ # msgstr "E228: "
+ msgid "E229: Cannot start the GUI"
+ msgstr "E229: Íå âäàëîñÿ çàïóñòèòè GUI"
+@@ -2074,7 +2132,7 @@
+ # msgstr "E229: "
+ #, c-format
+ msgid "E230: Cannot read from \"%s\""
+-msgstr "E230: Íå âäàëîñÿ ïðî÷èòàòè ç \"%s\""
++msgstr "E230: Íå âäàëîñÿ ïðî÷èòàòè ç «%s»"
+ 
+ msgid "E665: Cannot start GUI, no valid font found"
+ msgstr "E665: Íå âäàëîñÿ çàïóñòèòè GUI, íå çíàéäåíî øðèôò"
+@@ -2148,7 +2206,7 @@
+ msgstr "Çàì³íèòè óñ³"
+ 
+ msgid "Vim: Received \"die\" request from session manager\n"
+-msgstr "Vim: Îòðèìàâ çàïèò \"die\" â³ä ìåíåäæåðà ñåñ³é\n"
++msgstr "Vim: Îòðèìàâ çàïèò «die» â³ä ìåíåäæåðà ñåñ³é\n"
+ 
+ msgid "Close"
+ msgstr "Çàêðèòè"
+@@ -2199,29 +2257,12 @@
+ msgstr "&U:Ñêàñóâàòè"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: Íå âäàëîñÿ çàâàíòàæèòè øðèôò Zap '%s'"
+-
+-# msgstr "E235: "
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: Íå âäàëîñÿ âèêîðèñòàòè øðèôò %s"
+-
+-# msgstr "E242: "
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Ïîñèëàºòüñÿ ïîâ³äîìëåííÿ ùîá ïðèïèíèòè äî÷³ðí³é ïðîöåñ.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+-msgstr "E671: Íå âäàëîñÿ çíàéòè â³êíî \"%s\""
++msgstr "E671: Íå âäàëîñÿ çíàéòè â³êíî «%s»"
+ 
+ #, c-format
+ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+-msgstr "E243: Àðãóìåíò íå ï³äòðèìóºòüñÿ: \"-%s\"; êîðèñòóéòåñü âåðñ³ºþ ç OLE."
++msgstr "E243: Àðãóìåíò íå ï³äòðèìóºòüñÿ: «-%s»; êîðèñòóéòåñü âåðñ³ºþ ç OLE."
+ 
+ msgid "E672: Unable to open window inside MDI application"
+ msgstr "E672: Íå âäàëîñÿ â³äêðèòè â³êíî âñåðåäèí³ ïðîãðàìè MDI"
+@@ -2366,23 +2407,23 @@
+ 
+ #, c-format
+ msgid "E624: Can't open file \"%s\""
+-msgstr "E624: Íå âäàëîñÿ â³äêðèòè ôàéë \"%s\""
++msgstr "E624: Íå âäàëîñÿ â³äêðèòè ôàéë «%s»"
+ 
+ #, c-format
+ msgid "E457: Can't read PostScript resource file \"%s\""
+-msgstr "E457: Íå âäàëîñÿ ïðî÷èòàòè ôàéë ðåñóðñ³â PostScript \"%s\""
++msgstr "E457: Íå âäàëîñÿ ïðî÷èòàòè ôàéë ðåñóðñ³â PostScript «%s»"
+ 
+ #, c-format
+ msgid "E618: file \"%s\" is not a PostScript resource file"
+-msgstr "E618: \"%s\" íå º ôàéëîì ðåñóðñ³â PostScript"
++msgstr "E618: «%s» íå º ôàéëîì ðåñóðñ³â PostScript"
+ 
+ #, c-format
+ msgid "E619: file \"%s\" is not a supported PostScript resource file"
+-msgstr "E619: \"%s\" íå º ï³äòðèìóâàíèì ôàéëîì ðåñóðñ³â PostScript"
++msgstr "E619: «%s» íå º ï³äòðèìóâàíèì ôàéëîì ðåñóðñ³â PostScript"
+ 
+ #, c-format
+ msgid "E621: \"%s\" resource file has wrong version"
+-msgstr "E621: Íåïðàâèëüíà âåðñ³ÿ ôàéëó ðåñóðñ³â \"%s\""
++msgstr "E621: Íåïðàâèëüíà âåðñ³ÿ ôàéëó ðåñóðñ³â «%s»"
+ 
+ msgid "E673: Incompatible multi-byte encoding and character set."
+ msgstr "E673: Íåñóì³ñí³ áàãàòîáàéòîâå êîäóâàííÿ é íàá³ð ñèìâîë³â."
+@@ -2399,21 +2440,21 @@
+ 
+ #, c-format
+ msgid "E456: Can't open file \"%s\""
+-msgstr "E456: Íå âäàëîñÿ â³äêðèòè ôàéë \"%s\""
++msgstr "E456: Íå âäàëîñÿ â³äêðèòè ôàéë «%s»"
+ 
+ msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+-msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript \"prolog.ps\""
++msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript «prolog.ps»"
+ 
+ msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+-msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript \"cidfont.ps\""
++msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript «cidfont.ps»"
+ 
+ #, c-format
+ msgid "E456: Can't find PostScript resource file \"%s.ps\""
+-msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript \"%s.ps\""
++msgstr "E456: Íå âäàëîñÿ çíàéòè ôàéë ðåñóðñ³â PostScript «%s.ps»"
+ 
+ #, c-format
+ msgid "E620: Unable to convert to print encoding \"%s\""
+-msgstr "E620: Íå âäàëîñÿ ïåðåòâîðèòè äî êîäóâàííÿ äðóêó \"%s\""
++msgstr "E620: Íå âäàëîñÿ ïåðåòâîðèòè äî êîäóâàííÿ äðóêó «%s»"
+ 
+ msgid "Sending to printer..."
+ msgstr "Â³äñèëàºòüñÿ íà ïðèíòåð..."
+@@ -2526,7 +2567,7 @@
+ "       g: Find this definition\n"
+ "       i: Find files #including this file\n"
+ "       s: Find this C symbol\n"
+-"       t: Find assignments to\n"
++"       t: Find this text string\n"
+ msgstr ""
+ "\n"
+ "       c: Çíàéòè ôóíêö³¿, ùî âèêëèêàþòü öþ ôóíêö³þ\n"
+@@ -2536,7 +2577,7 @@
+ "       g: Çíàéòè öå âèçíà÷åííÿ\n"
+ "       i: Çíàéòè ôàéëè, ÿê³ âêëþ÷àþòü â ñåáå öåé ôàéë\n"
+ "       s: Çíàéòè öåé ñèìâîë C\n"
+-"       t: Çíàéòè ïðèñâîºííÿ öüîìó\n"
++"       t: Çíàéòè öåé òåêñò\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2649,12 +2690,12 @@
+ msgid "not allowed in the Vim sandbox"
+ msgstr "íå äîçâîëåíî ó ï³ñî÷íèö³ Vim"
+ 
+-msgid "E836: This Vim cannot execute :python after using :py3"
+-msgstr "E836: Python: Íå ìîæíà âèêîðèñòàòè :py ³ :py3 â îäíîìó ñåàíñ³"
+-
+ msgid "E837: This Vim cannot execute :py3 after using :python"
+ msgstr "E837: Python: Íå ìîæíà âèêîðèñòàòè :py ³ :py3 â îäíîìó ñåàíñ³"
+ 
++msgid "only string keys are allowed"
++msgstr "Äîçâîëåíî ò³ëüêè òåêñòîâ³ êëþ÷³"
++
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+ "loaded."
+@@ -2662,23 +2703,28 @@
+ "E263: Âèáà÷òå, öÿ êîìàíäà âèìêíåíà, á³áë³îòåêà Python íå ìîæå áóòè "
+ "çàâàíòàæåíà."
+ 
+-msgid "can't delete OutputObject attributes"
+-msgstr "íå âäàëîñÿ çíèùèòè àòðèáóòè OutputObject"
+-
+-msgid "softspace must be an integer"
+-msgstr "softspace ìàº áóòè ö³ëèì"
++msgid "E860: Eval did not return a valid python 3 object"
++msgstr "E860: Eval íå ïîâåðíóâ ä³éñíèé îáºêò python 3"
+ 
+-# msgstr "E180: "
+-msgid "invalid attribute"
+-msgstr "íåïðàâèëüíèé àòðèáóò"
++msgid "E861: Failed to convert returned python 3 object to vim value"
++msgstr "E861: Íå âäàëîñÿ ïåðåòâîðèòè îáºêò python 3 ó çíà÷åííÿ vim"
+ 
+ #, c-format
+ msgid "<buffer object (deleted) at %p>"
+ msgstr "<îá'ºêò áóôåðà (çíèùåíî) çà àäðåñîþ %p>"
+ 
++msgid "E836: This Vim cannot execute :python after using :py3"
++msgstr "E836: Python: Íå ìîæíà âèêîðèñòàòè :py ³ :py3 â îäíîìó ñåàíñ³"
++
+ msgid "E659: Cannot invoke Python recursively"
+ msgstr "E659: Íå ìîæíà ðåêóðñèâíî âèêëèêàòè Python"
+ 
++msgid "E858: Eval did not return a valid python object"
++msgstr "E858: Eval íå ïîâåðíóâ ä³éñíèé îáºêò python"
++
++msgid "E859: Failed to convert returned python object to vim value"
++msgstr "E859: Íå âäàëîñÿ ïåðåòâîðèòè îáºêò python ó çíà÷åííÿ vim"
++
+ msgid "E265: $_ must be an instance of String"
+ msgstr "E265: $_ ìàº áóòè åêçåìïëÿðîì String"
+ 
+@@ -2863,12 +2909,6 @@
+ msgstr ""
+ "E571: Âèáà÷òå, öÿ êîìàíäà âèìêíåíà, á³áë³îòåêà Tcl íå ìîæå áóòè çàâàíòàæåíà."
+ 
+-msgid ""
+-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+-msgstr ""
+-"E281: ÏÎÌÈËÊÀ TCL: êîä âèõîäó íå º ö³ëèì!? Áóäü ëàñêà, ïîâ³äîìòå ó vim-"
+-"dev@vim.org"
+-
+ #, c-format
+ msgid "E572: exit code %d"
+ msgstr "E572: Êîä âèõîäó %d"
+@@ -2880,7 +2920,7 @@
+ msgstr "Íå âäàëîñÿ çàðåºñòðóâàòè íàçâó ñåðâåðà êîìàíä"
+ 
+ msgid "E248: Failed to send command to the destination program"
+-msgstr "E248: Íå âäàëîñÿ â³ä³ñëàòè êîìàíäó äî ïðîãðàìè-ïðèçíà÷åííÿ"
++msgstr "E248: Íå âäàëîñÿ â³ä³ñëàòè êîìàíäó äî ïðîãðàìè-ö³ë³"
+ 
+ #, c-format
+ msgid "E573: Invalid server id used: %s"
+@@ -2903,7 +2943,7 @@
+ 
+ msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+ msgstr ""
+-"Çàáàãàòî àðãóìåíò³â ó \"+êîìàíäà\", \"-c êîìàíäà\" àáî \"--cmd êîìàíäà\""
++"Çàáàãàòî àðãóìåíò³â ó «+êîìàíäà», «-c êîìàíäà» àáî «--cmd êîìàíäà»"
+ 
+ # msgstr "E14: "
+ msgid "Invalid argument for"
+@@ -2946,7 +2986,7 @@
+ 
+ #, c-format
+ msgid "E282: Cannot read from \"%s\""
+-msgstr "E282: Íå âäàëîñÿ ïðî÷èòàòè ç \"%s\""
++msgstr "E282: Íå âäàëîñÿ ïðî÷èòàòè ç «%s»"
+ 
+ # msgstr "E282: "
+ msgid ""
+@@ -2954,7 +2994,7 @@
+ "More info with: \"vim -h\"\n"
+ msgstr ""
+ "\n"
+-"Ä³çíàéòåñÿ á³ëüøå: \"vim -h\"\n"
++"Ä³çíàéòåñÿ á³ëüøå: «vim -h»\n"
+ 
+ msgid "[file ..]       edit specified file(s)"
+ msgstr "[ôàéë ..]       ðåäàãóâàòè âêàçàí³ ôàéëè"
+@@ -3017,31 +3057,34 @@
+ msgstr "-unregister\t\tÑêàñóâàòè ðåºñòðàö³þ öüîãî gvim äëÿ OLE"
+ 
+ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
+-msgstr "-g\t\t\tÇàïóñòèòè GUI (í³áè \"gvim\")"
++msgstr "-g\t\t\tÇàïóñòèòè GUI (í³áè «gvim»)"
+ 
+ msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
+ msgstr "-f  ÷è  --nofork\tÏåðåäí³é ïëàí: òðèìàòè òåðì³íàë ï³ñëÿ çàïóñêó GUI"
+ 
+ msgid "-v\t\t\tVi mode (like \"vi\")"
+-msgstr "-v\t\t\tÐåæèì Vi (í³áè \"vi\")"
++msgstr "-v\t\t\tÐåæèì Vi (í³áè «vi»)"
+ 
+ msgid "-e\t\t\tEx mode (like \"ex\")"
+-msgstr "-e\t\t\tÐåæèì Ex (í³áè \"ex\")"
++msgstr "-e\t\t\tÐåæèì Ex (í³áè «ex»)"
++
++msgid "-E\t\t\tImproved Ex mode"
++msgstr "-E\t\t\tÏîêðàùåíèé ðåæèì Ex"
+ 
+ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+-msgstr "-s\t\t\tÌîâ÷àçíèé (ïàêåòíèé) ðåæèì (ëèøå äëÿ \"ex\")"
++msgstr "-s\t\t\tÌîâ÷àçíèé (ïàêåòíèé) ðåæèì (ëèøå äëÿ «ex»)"
+ 
+ msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+-msgstr "-d\t\t\tÐåæèì ïîð³âíÿííÿ (í³áè \"vimdiff\")"
++msgstr "-d\t\t\tÐåæèì ïîð³âíÿííÿ (í³áè «vimdiff»)"
+ 
+ msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+-msgstr "-y\t\t\tÏðîñòèé ðåæèì (í³áè \"evim\", áåç ðåæèì³â)"
++msgstr "-y\t\t\tÏðîñòèé ðåæèì (í³áè «evim», áåç ðåæèì³â)"
+ 
+ msgid "-R\t\t\tReadonly mode (like \"view\")"
+-msgstr "-R\t\t\tÐåæèì ïåðåãëÿäó (í³áè \"view\")"
++msgstr "-R\t\t\tÐåæèì ïåðåãëÿäó (í³áè «view»)"
+ 
+ msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+-msgstr "-Z\t\t\tÎáìåæåíèé ðåæèì (í³áè \"rvim\")"
++msgstr "-Z\t\t\tÎáìåæåíèé ðåæèì (í³áè «rvim»)"
+ 
+ msgid "-m\t\t\tModifications (writing files) not allowed"
+ msgstr "-m\t\t\tÇì³íè (çàïèñ ôàéë³â) íå äîçâîëåíî"
+@@ -3266,19 +3309,6 @@
+ 
+ msgid ""
+ "\n"
+-"Arguments recognised by gvim (RISC OS version):\n"
+-msgstr ""
+-"\n"
+-"Àðãóìåíòè gvim (âåðñ³ÿ RISC OS):\n"
+-
+-msgid "--columns <number>\tInitial width of window in columns"
+-msgstr "--columns <ê³ëüê³ñòü>\tÏî÷àòêîâà ê³ëüê³ñòü êîëîíîê â³êíà"
+-
+-msgid "--rows <number>\tInitial height of window in rows"
+-msgstr "--rows <ê³ëüê³ñòü>\tÏî÷àòêîâà ê³ëüê³ñòü ðÿäê³â â³êíà"
+-
+-msgid ""
+-"\n"
+ "Arguments recognised by gvim (GTK+ version):\n"
+ msgstr ""
+ "\n"
+@@ -3294,6 +3324,9 @@
+ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+ msgstr "--socketid <xid>\tÂ³äêðèòè Vim â ³íøîìó åëåìåíò³ ³íòåðôåéñó GTK"
+ 
++msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++msgstr "--echo-wid\t\tÕàé gvim íàäðóêóº ³äåíòèô³êàòîð â³êíà íà stdout"
++
+ msgid "-P <parent title>\tOpen Vim inside parent application"
+ msgstr "-P <çàãîëîâîê áàòüêà>\tÂ³äêðèòè Vim âñåðåäèí³ áàòüê³âñüêîãî â³êíà"
+ 
+@@ -3326,7 +3359,7 @@
+ 
+ #, c-format
+ msgid "E283: No marks matching \"%s\""
+-msgstr "E283: Ïîì³òêó \"%s\" íå çíàéäåíî"
++msgstr "E283: Ïîì³òêó «%s» íå çíàéäåíî"
+ 
+ # msgstr "E283: "
+ #. Highlight title
+@@ -3355,7 +3388,6 @@
+ "çì³íèòè ðÿä. ñòîâï. òåêñò"
+ 
+ # TODO
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+@@ -3364,7 +3396,6 @@
+ "# Ïîì³òêè:\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+@@ -3373,7 +3404,6 @@
+ "# Ñïèñîê ïåðåõîä³â (â³ä íàéíîâ³øèõ):\n"
+ 
+ # TODO
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+@@ -3439,6 +3469,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: Íåìàº áëîêó 2?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: Ïîìèëêà ïîíîâëåííÿ øèôðóâàííÿ ôàéëó îáì³íó"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: Îé, âòðà÷åíî ôàéë îáì³íó!!!"
+@@ -3451,7 +3484,7 @@
+ #, c-format
+ msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
+ msgstr ""
+-"E303: Íå âäàëîñÿ ïðî÷èòàòè ôàéë îáì³íó äëÿ \"%s\", â³äíîâëåííÿ íåìîæëèâå"
++"E303: Íå âäàëîñÿ ïðî÷èòàòè ôàéë îáì³íó äëÿ «%s», â³äíîâëåííÿ íåìîæëèâå"
+ 
+ msgid "E304: ml_upd_block0(): Didn't get block 0??"
+ msgstr "E304: ml_upd_block0(): Íåìàº áëîêó 0??"
+@@ -3511,18 +3544,18 @@
+ 
+ #, c-format
+ msgid "Using swap file \"%s\""
+-msgstr "Âèêîðèñòîâóºòüñÿ ôàéë îáì³íó \"%s\""
++msgstr "Âèêîðèñòîâóºòüñÿ ôàéë îáì³íó «%s»"
+ 
+ #, c-format
+ msgid "Original file \"%s\""
+-msgstr "Ïî÷àòêîâèé ôàéë \"%s\""
++msgstr "Ïî÷àòêîâèé ôàéë «%s»"
+ 
+ msgid "E308: Warning: Original file may have been changed"
+ msgstr "E308: Çàñòåðåæåííÿ: Ìîæëèâî, ïî÷àòêîâèé ôàéë áóëî çì³íåíî"
+ 
+ #, c-format
+ msgid "Swap file is encrypted: \"%s\""
+-msgstr "Ôàéë îáì³íó çàøèôðîâàíèé: \"%s\""
++msgstr "Ôàéë îáì³íó çàøèôðîâàíèé: «%s»"
+ 
+ msgid ""
+ "\n"
+@@ -3597,7 +3630,7 @@
+ "ïî÷èíàþòüñÿ ç ???"
+ 
+ msgid "See \":help E312\" for more information."
+-msgstr "Äèâ. \":help E312\" äëÿ óòî÷íåííÿ."
++msgstr "Äèâ. «:help E312» äëÿ óòî÷íåííÿ."
+ 
+ msgid "Recovery completed. You should check if everything is OK."
+ msgstr "Â³äíîâëåííÿ çàê³í÷åíî, ïåðåâ³ðòå ÷è âñå ãàðàçä."
+@@ -3787,7 +3820,7 @@
+ 
+ #, c-format
+ msgid "E773: Symlink loop for \"%s\""
+-msgstr "E773: Öèêë³÷í³ ñèìâîëüí³ ïîñèëàííÿ \"%s\""
++msgstr "E773: Öèêë³÷í³ ñèìâîëüí³ ïîñèëàííÿ «%s»"
+ 
+ # msgstr "E317: "
+ msgid "E325: ATTENTION"
+@@ -3810,54 +3843,50 @@
+ #. * other languages.
+ msgid ""
+ "\n"
+-"(1) Another program may be editing the same file.\n"
+-"    If this is the case, be careful not to end up with two\n"
+-"    different instances of the same file when making changes.\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
+ msgstr ""
+ "\n"
+-"(1) Ìîæëèâî, ³íøà ïðîãðàìà âæå ðåäàãóº öåé ñàìèé ôàéë.\n"
+-"    Áóäüòå îáåðåæí³, ùîá íå çàëèøèëèñÿ äâà ð³çí³ åêçåìïëÿðè\n"
+-"    îäíîãî é òîãî ñàìîãî ôàéëó ï³ñëÿ çì³í.\n"
++"(1) Ìîæëèâî, ³íøà ïðîãðàìà âæå ðåäàãóº öåé ñàìèé ôàéë. ßêùî öå òàê,\n"
++"    áóäüòå îáåðåæí³, ùîá íå çàëèøèëèñÿ äâà ð³çí³ åêçåìïëÿðè\n"
++"    îäíîãî é òîãî ñàìîãî ôàéëó ï³ñëÿ çì³í."
+ 
+-msgid "    Quit, or continue with caution.\n"
+-msgstr "    Âèéä³òü, àáî ïðîäîâæóéòå îáåðåæíî.\n"
++msgid "  Quit, or continue with caution.\n"
++msgstr "  Âèéä³òü àáî ïðîäîâæóéòå îáåðåæíî.\n"
+ 
+-msgid ""
+-"\n"
+-"(2) An edit session for this file crashed.\n"
+-msgstr ""
+-"\n"
+-"(2) Ñåàíñ ðåäàãóâàííÿ öüîãî ôàéëó çàçíàâ êðàõó.\n"
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) Ñåàíñ ðåäàãóâàííÿ öüîãî ôàéëó çàçíàâ êðàõó.\n"
+ 
+ msgid "    If this is the case, use \":recover\" or \"vim -r "
+-msgstr "    ßêùî öå ñïðàâä³ òðàïèëîñÿ, ñïðîáóéòå \":recover\" àáî \"vim -r "
++msgstr "    ßêùî öå ñïðàâä³ òðàïèëîñÿ, ñïðîáóéòå «:recover» àáî «vim -r "
+ 
+ msgid ""
+ "\"\n"
+ "    to recover the changes (see \":help recovery\").\n"
+ msgstr ""
+-"\"\n"
+-"    ùîá â³äíîâèòè çì³íè (äèâ. \":help recovery\").\n"
++"»\n"
++"    ùîá â³äíîâèòè çì³íè (äèâ. «:help recovery»).\n"
+ 
+ msgid "    If you did this already, delete the swap file \""
+-msgstr "    ßêùî âè âæå öå çðîáèëè, çíèù³òü ôàéë îáì³íó \""
++msgstr "    ßêùî âè âæå öå çðîáèëè, çíèù³òü ôàéë îáì³íó «"
+ 
+ msgid ""
+ "\"\n"
+ "    to avoid this message.\n"
+ msgstr ""
+-"\"\n"
++"»,\n"
+ "    ùîá ïîçáóòèñÿ öüîãî ïîâ³äîìëåííÿ.\n"
+ "\n"
+ 
+ msgid "Swap file \""
+-msgstr "Ôàéë îáì³íó \""
++msgstr "Ôàéë îáì³íó «"
+ 
+ msgid "\" already exists!"
+-msgstr "\" âæå ³ñíóº!"
++msgstr "» âæå ³ñíóº!"
+ 
+ msgid "VIM - ATTENTION"
+-msgstr "VIM -- ÓÂÀÃÀ"
++msgstr "VIM  ÓÂÀÃÀ"
+ 
+ msgid "Swap file already exists!"
+ msgstr "Ôàéë îáì³íó âæå ³ñíóº!"
+@@ -3904,7 +3933,7 @@
+ # msgstr "E328: "
+ #, c-format
+ msgid "E329: No menu \"%s\""
+-msgstr "E329: Íåìàº ìåíþ \"%s\""
++msgstr "E329: Íåìàº ìåíþ «%s»"
+ 
+ #. Only a mnemonic or accelerator is not valid.
+ msgid "E792: Empty menu name"
+@@ -3954,7 +3983,7 @@
+ 
+ # msgstr "E336: "
+ msgid "E337: Menu not found - check menu names"
+-msgstr "E337: Ìåíþ íå çíàéäåíî -- ïåðåâ³ðòå íàçâó"
++msgstr "E337: Ìåíþ íå çíàéäåíî  ïåðåâ³ðòå íàçâó"
+ 
+ # msgstr "E337: "
+ #, c-format
+@@ -4070,7 +4099,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "Vim: Çàâåðøåíî.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "ÏÎÌÈËÊÀ: "
+ 
+@@ -4106,7 +4134,7 @@
+ # msgstr "E342: "
+ #, c-format
+ msgid "Calling shell to execute: \"%s\""
+-msgstr "Âèêëèêàºòüñÿ îáîëîíêà ùîá âèêîíàòè: \"%s\""
++msgstr "Âèêëèêàºòüñÿ îáîëîíêà ùîá âèêîíàòè: «%s»"
+ 
+ msgid "E545: Missing colon"
+ msgstr "E545: Ïðîïóùåíî äâîêðàïêó"
+@@ -4132,6 +4160,9 @@
+ msgid "Keys don't match!"
+ msgstr "Êëþ÷³ íå îäíàêîâ³!"
+ 
++msgid "E854: path too long for completion"
++msgstr "E854: øëÿõ çàíàäòî äîâãèé äëÿ äîïîâíåííÿ"
++
+ #, c-format
+ msgid ""
+ "E343: Invalid path: '**[number]' must be at the end of the path or be "
+@@ -4143,22 +4174,22 @@
+ # msgstr "E343: "
+ #, c-format
+ msgid "E344: Can't find directory \"%s\" in cdpath"
+-msgstr "E344: Íå âäàëîñÿ çíàéòè êàòàëîã \"%s\" ó cdpath"
++msgstr "E344: Íå âäàëîñÿ çíàéòè êàòàëîã «%s» ó cdpath"
+ 
+ # msgstr "E344: "
+ #, c-format
+ msgid "E345: Can't find file \"%s\" in path"
+-msgstr "E345: Íå âäàëîñÿ çíàéòè ôàéë \"%s\" ó path"
++msgstr "E345: Íå âäàëîñÿ çíàéòè ôàéë «%s» ó path"
+ 
+ # msgstr "E345: "
+ #, c-format
+ msgid "E346: No more directory \"%s\" found in cdpath"
+-msgstr "E346: Ó cdpath íåìàº á³ëüøå êàòàëîãó \"%s\""
++msgstr "E346: Ó cdpath íåìàº á³ëüøå êàòàëîãó «%s»"
+ 
+ # msgstr "E346: "
+ #, c-format
+ msgid "E347: No more file \"%s\" found in path"
+-msgstr "E347: Ó øëÿõó ïîøóêó á³ëüøå íåìàº ôàéë³â \"%s\""
++msgstr "E347: Ó øëÿõó ïîøóêó á³ëüøå íåìàº ôàéë³â «%s»"
+ 
+ msgid "Cannot connect to Netbeans #2"
+ msgstr "Íå âäàëîñÿ ç'ºäíàòèñÿ ³ç Netbeans #2"
+@@ -4170,7 +4201,7 @@
+ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
+ msgstr ""
+ "E668: Íåïðàâèëüíèé ðåæèì äîñòóïó äî ôàéëó ³íôîðìàö³¿ ïðî ç'ºäíàííÿ ç "
+-"NetBenans: \"%s\""
++"NetBenans: «%s»"
+ 
+ msgid "read from Netbeans socket"
+ msgstr "÷èòàºòüñÿ ç ñîêåòà Netbeans"
+@@ -4179,11 +4210,15 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: Âòðà÷åíî çâ'ÿçîê ³ç NetBeans äëÿ áóôåðà %ld"
+ 
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: netbeans íå ï³äòðèìóºòüñÿ ç öèì GUI"
++
+ msgid "E511: netbeans already connected"
+ msgstr "E511: netbeans âæå ï³ä'ºäíàíî"
+ 
+-msgid "E505: "
+-msgstr "E505: "
++#, c-format
++msgid "E505: %s is read-only (add ! to override)"
++msgstr "E505: %s ò³ëüêè äëÿ ÷èòàííÿ (! ùîá íå çâàæàòè)"
+ 
+ # msgstr "E348: "
+ msgid "E349: No identifier under cursor"
+@@ -4327,8 +4362,8 @@
+ "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+ "%ld"
+ msgstr ""
+-"Êîëîíêà %s ç %s; ðÿäîê %ld ç %ld; ñëîâî %ld ç %ld; ñèìâîë %ld of %ld; áàéò %"
+-"ld ç %ld"
++"Êîëîíêà %s ç %s; ðÿäîê %ld ç %ld; ñëîâî %ld ç %ld; ñèìâîë %ld of %ld; áàéò "
++"%ld ç %ld"
+ 
+ #, c-format
+ msgid "(+%ld for BOM)"
+@@ -4349,6 +4384,9 @@
+ msgid "E520: Not allowed in a modeline"
+ msgstr "E520: Íå äîçâîëåíî ó modeline"
+ 
++msgid "E846: Key code not set"
++msgstr "E846: Êîä êëþ÷à íå âñòàíîâëåíî"
++
+ msgid "E521: Number required after ="
+ msgstr "E521: Ï³ñëÿ = ïîòð³áíî âêàçàòè ÷èñëî"
+ 
+@@ -4366,7 +4404,7 @@
+ msgstr "E530: Íå âäàëîñÿ çì³íèòè term â GUI"
+ 
+ msgid "E531: Use \":gui\" to start the GUI"
+-msgstr "E531: Çàñòîñóéòå \":gui\" äëÿ çàïóñêó GUI"
++msgstr "E531: Çàñòîñóéòå «:gui» äëÿ çàïóñêó GUI"
+ 
+ msgid "E589: 'backupext' and 'patchmode' are equal"
+ msgstr "E589: Îïö³¿ 'backupext' ³ 'patchmode' îäíàêîâ³"
+@@ -4584,16 +4622,12 @@
+ 
+ #, c-format
+ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+-msgstr "E244: Íåêîðåêòíà íàçâà íàáîðó ñèìâîë³â \"%s\" ó íàçâ³ øðèôòó \"%s\""
++msgstr "E244: Íåêîðåêòíà íàçâà íàáîðó ñèìâîë³â «%s» ó íàçâ³ øðèôòó «%s»"
+ 
+ #, c-format
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+-msgstr "E245: Ïîìèëêîâèé ñèìâîë %c â íàçâ³ øðèôòó \"%s\""
++msgstr "E245: Ïîìèëêîâèé ñèìâîë %c â íàçâ³ øðèôòó «%s»"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: Íåïðàâèëüíà îïö³ÿ 'osfiletype' -- áóäå `Text'"
+-
+-# msgstr "E366: "
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Äâ³÷³ îòðèìàíî ñèãíàë, âèõ³ä\n"
+ 
+@@ -4684,7 +4718,7 @@
+ 
+ #, c-format
+ msgid "dlerror = \"%s\""
+-msgstr "dlerror = \"%s\""
++msgstr "dlerror = «%s»"
+ 
+ msgid "Opening the X display failed"
+ msgstr "Íå âäàëîñÿ â³äêðèòè äèñïëåé X"
+@@ -4815,7 +4849,7 @@
+ 
+ #, c-format
+ msgid "Cannot open file \"%s\""
+-msgstr "Íå âäàëîñÿ â³äêðèòè ôàéë \"%s\""
++msgstr "Íå âäàëîñÿ â³äêðèòè ôàéë «%s»"
+ 
+ msgid "E681: Buffer is not loaded"
+ msgstr "E681: Áóôåð íå çàâàíòàæåíî"
+@@ -5075,13 +5109,17 @@
+ msgstr "E756: Ïåðåâ³ðêà îðôîãðàô³¿ íå äîçâîëåíà"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr "Çàñòåðåæåííÿ: Íå âäàëîñÿ çíàéòè ñïèñîê ñë³â «%s_%s.spl» ÷è «%s_ascii.spl»"
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr ""
+-"Çàñòåðåæåííÿ: Íå âäàëîñÿ çíàéòè ñïèñîê ñë³â \"%s.%s.spl\" ÷è \"%s.ascii.spl\""
++"Çàñòåðåæåííÿ: Íå âäàëîñÿ çíàéòè ñïèñîê ñë³â «%s.%s.spl» ÷è «%s.ascii.spl»"
+ 
+ #, c-format
+ msgid "Reading spell file \"%s\""
+-msgstr "×èòàºòüñÿ ôàéë îðôîãðàô³¿ \"%s\""
++msgstr "×èòàºòüñÿ ôàéë îðôîãðàô³¿ «%s»"
+ 
+ msgid "E757: This does not look like a spell file"
+ msgstr "E757: Íå ñõîæå íà ôàéë îðôîãðàô³¿"
+@@ -5300,6 +5338,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "Ïðî³ãíîðîâàíî %d ñë³â ³ç íå-ASCII ñèìâîëàìè"
+ 
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: Íåäîñòàòíüî ïàìÿò³, ñïèñîê ñë³â áóäå íåïîâíèì"
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "Ñòèñíåíî %d ç %d âóçë³â; çàëèøèëîñÿ %d (%d%%)"
+@@ -5376,11 +5417,11 @@
+ #. avoid more prompt
+ #, c-format
+ msgid "Change \"%.*s\" to:"
+-msgstr "Çàì³íèòè \"%.*s\" íà:"
++msgstr "Çàì³íèòè «%.*s» íà:"
+ 
+ #, c-format
+ msgid " < \"%.*s\""
+-msgstr " < \"%.*s\""
++msgstr " < «%.*s»"
+ 
+ # msgstr "E34: "
+ msgid "E752: No previous spell replacement"
+@@ -5480,6 +5521,10 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: Ì³ñòèòü íåïðèéíÿòí³ òóò àðãóìåíòè"
+ 
++# msgstr "E14: "
++msgid "E844: invalid cchar value"
++msgstr "E844: Íåêîðåêòíå çíà÷åííÿ cchar"
++
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: group[t]hete òóò íåïðèéíÿòíèé"
+ 
+@@ -5491,6 +5536,9 @@
+ msgid "E397: Filename required"
+ msgstr "E397: Ïîòð³áíà íàçâà ôàéëó"
+ 
++msgid "E847: Too many syntax includes"
++msgstr "E847: Çàáàãàòî ñèíòàêñè÷íèõ âêëþ÷åíü"
++
+ #, c-format
+ msgid "E789: Missing ']': %s"
+ msgstr "E789: Ïðîïóùåíî ']': %s"
+@@ -5504,6 +5552,9 @@
+ msgid "E399: Not enough arguments: syntax region %s"
+ msgstr "E399: Áðàêóº àðãóìåíò³â: ñèíòàêñè÷íèé ðåã³îí %s"
+ 
++msgid "E848: Too many syntax clusters"
++msgstr "E848: Çàáàãàòî ñèíòàêñè÷íèõ êëàñòåð³â"
++
+ msgid "E400: No cluster specified"
+ msgstr "E400: Êëàñòåð íå âêàçàíî"
+ 
+@@ -5563,12 +5614,12 @@
+ # msgstr "E411: "
+ #, c-format
+ msgid "E412: Not enough arguments: \":highlight link %s\""
+-msgstr "E412: Íåäîñòàòíüî àðãóìåíò³â: \":highlight link %s\""
++msgstr "E412: Íåäîñòàòíüî àðãóìåíò³â: «:highlight link %s»"
+ 
+ # msgstr "E412: "
+ #, c-format
+ msgid "E413: Too many arguments: \":highlight link %s\""
+-msgstr "E413: Çàáàãàòî àðãóìåíò³â: \":highlight link %s\""
++msgstr "E413: Çàáàãàòî àðãóìåíò³â: «:highlight link %s»"
+ 
+ # msgstr "E413: "
+ msgid "E414: group has settings, highlight link ignored"
+@@ -5626,6 +5677,9 @@
+ msgid "W18: Invalid character in group name"
+ msgstr "W18: Íåêîðåêòíèé ñèìâîë ó íàçâ³ ãðóïè"
+ 
++msgid "E849: Too many highlight and syntax groups"
++msgstr "E849: Çàáàãàòî ãðóï ï³äñâ³÷óâàííÿ ³ ñèíòàêñèñó"
++
+ # msgstr "E424: "
+ msgid "E555: at bottom of tag stack"
+ msgstr "E555: Ê³íåöü ñòåêó òåŽ³â"
+@@ -5643,13 +5697,13 @@
+ 
+ # msgstr "E426: "
+ msgid "  # pri kind tag"
+-msgstr "  # ïð³ òèï  òåŽ"
++msgstr "  # ïð³ òèï òåŽ"
+ 
+ msgid "file\n"
+ msgstr "ôàéë\n"
+ 
+ msgid "E427: There is only one matching tag"
+-msgstr "E427: Ëèøå îäíèí â³äïîâ³äíèé òåŽ"
++msgstr "E427: Ëèøå îäèí â³äïîâ³äíèé òåŽ"
+ 
+ # msgstr "E427: "
+ msgid "E428: Cannot go beyond last matching tag"
+@@ -5658,7 +5712,7 @@
+ # msgstr "E428: "
+ #, c-format
+ msgid "File \"%s\" does not exist"
+-msgstr "Ôàéë \"%s\" íå ³ñíóº"
++msgstr "Ôàéë «%s» íå ³ñíóº"
+ 
+ #. Give an indication of the number of matching tags
+ #, c-format
+@@ -5673,7 +5727,7 @@
+ 
+ #, c-format
+ msgid "E429: File \"%s\" does not exist"
+-msgstr "E429: Ôàéë \"%s\" íå ³ñíóº"
++msgstr "E429: Ôàéë «%s» íå ³ñíóº"
+ 
+ # msgstr "E429: "
+ #. Highlight title
+@@ -5692,10 +5746,13 @@
+ msgid "E430: Tag file path truncated for %s\n"
+ msgstr "E430: Øëÿõ ôàéëó òåŽ³â ñêîðî÷åíî äî %s\n"
+ 
++msgid "Ignoring long line in tags file"
++msgstr "²ãíîðóºòüñÿ äîâãèé ðÿäîê ó ôàéë³ ç ïîçíà÷êàìè"
++
+ # msgstr "E430: "
+ #, c-format
+ msgid "E431: Format error in tags file \"%s\""
+-msgstr "E431: Ïîìèëêà ôîðìàòó ó ôàéë³ òåŽ³â \"%s\""
++msgstr "E431: Ïîìèëêà ôîðìàòó ó ôàéë³ òåŽ³â «%s»"
+ 
+ # msgstr "E431: "
+ #, c-format
+@@ -5711,9 +5768,6 @@
+ msgid "E433: No tags file"
+ msgstr "E433: Íåìàº ôàéëó òåŽ³â"
+ 
+-msgid "Ignoring long line in tags file"
+-msgstr "²ãíîðóºòüñÿ äîâãèé ðÿäîê ó ôàéë³ ç ïîçíà÷êàìè"
+-
+ # msgstr "E433: "
+ msgid "E434: Can't find tag pattern"
+ msgstr "E434: Íå âäàëîñÿ çíàéòè çðàçîê òåŽó"
+@@ -5744,10 +5798,10 @@
+ 
+ #, c-format
+ msgid "E436: No \"%s\" entry in termcap"
+-msgstr "E436: Íåìàº çàïèñó \"%s\" ïðî ìîæëèâîñò³ òåðì³íàëó"
++msgstr "E436: Íåìàº çàïèñó «%s» ïðî ìîæëèâîñò³ òåðì³íàëó"
+ 
+ msgid "E437: terminal capability \"cm\" required"
+-msgstr "E437: Ïîòð³áíà ìîæëèâ³ñòü òåðì³íàëó \"cm\""
++msgstr "E437: Ïîòð³áíà ìîæëèâ³ñòü òåðì³íàëó «cm»"
+ 
+ #. Highlight title
+ msgid ""
+@@ -5892,8 +5946,8 @@
+ msgid "Nothing to undo"
+ msgstr "Íåìàº í³÷îãî ñêàñîâóâàòè"
+ 
+-msgid "number changes  time            saved"
+-msgstr "íîìåð  çì³í     ÷àñ             çáåðåæåíî"
++msgid "number changes  when               saved"
++msgstr "íîìåð  çì³íè    ÷àñ             çáåðåæåíî"
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+@@ -5998,13 +6052,6 @@
+ 
+ msgid ""
+ "\n"
+-"RISC OS version"
+-msgstr ""
+-"\n"
+-"Âåðñ³ÿ äëÿ RISC OS"
+-
+-msgid ""
+-"\n"
+ "OpenVMS version"
+ msgstr ""
+ "\n"
+@@ -6169,7 +6216,7 @@
+ msgstr "àâòîð: Bram Moolenaar òà ³í."
+ 
+ msgid "Vim is open source and freely distributable"
+-msgstr "Vim -- öå â³äêðèòà é â³ëüíî ðîçïîâñþäæóâàíà ïðîãðàìà"
++msgstr "Vim  öå â³äêðèòà é â³ëüíî ðîçïîâñþäæóâàíà ïðîãðàìà"
+ 
+ msgid "Help poor children in Uganda!"
+ msgstr "Äîïîìîæ³òü ñèðîòàì ç Óãàíäè!"
+@@ -6271,7 +6318,7 @@
+ # msgstr "E446: "
+ #, c-format
+ msgid "E447: Can't find file \"%s\" in path"
+-msgstr "E447: Ôàéë \"%s\" íå çíàéäåíî ó øëÿõó ïîøóêó"
++msgstr "E447: Ôàéë «%s» íå çíàéäåíî ó øëÿõó ïîøóêó"
+ 
+ #, c-format
+ msgid "E370: Could not load library %s"
+@@ -6373,7 +6420,7 @@
+ # msgstr "E235: "
+ #, c-format
+ msgid "E236: Font \"%s\" is not fixed-width"
+-msgstr "E236: Øðèôò \"%s\" íå ìîíîøèðèííèé"
++msgstr "E236: Øðèôò «%s» íå ìîíîøèðèííèé"
+ 
+ msgid "E473: Internal error"
+ msgstr "E473: Âíóòð³øíÿ ïîìèëêà"
+@@ -6406,11 +6453,11 @@
+ 
+ #, c-format
+ msgid "E17: \"%s\" is a directory"
+-msgstr "E17: \"%s\" -- öå êàòàëîã"
++msgstr "E17: «%s»  öå êàòàëîã"
+ 
+ #, c-format
+ msgid "E364: Library call failed for \"%s()\""
+-msgstr "E364: Á³áë³îòå÷íèé âèêëèê äî \"%s()\" íå âäàâñÿ"
++msgstr "E364: Á³áë³îòå÷íèé âèêëèê äî «%s()» íå âäàâñÿ"
+ 
+ #, c-format
+ msgid "E448: Could not load library function %s"
+@@ -6506,7 +6553,7 @@
+ 
+ #, c-format
+ msgid "E247: no registered server named \"%s\""
+-msgstr "E247: Íåìàº çàðåºñòðîâàíèõ ñåðâåð³â ç íàçâîþ \"%s\""
++msgstr "E247: Íåìàº çàðåºñòðîâàíèõ ñåðâåð³â ç íàçâîþ «%s»"
+ 
+ # msgstr "E36: "
+ #, c-format
+@@ -6573,11 +6620,11 @@
+ 
+ #, c-format
+ msgid "E46: Cannot change read-only variable \"%s\""
+-msgstr "E46: Çì³ííà ò³ëüêè äëÿ ÷èòàííÿ: \"%s\""
++msgstr "E46: Çì³ííà ò³ëüêè äëÿ ÷èòàííÿ: «%s»"
+ 
+ #, c-format
+ msgid "E794: Cannot set variable in the sandbox: \"%s\""
+-msgstr "E794: Íå ìîæíà âñòàíîâèòè çì³ííó ó ï³ñî÷íèö³: \"%s\""
++msgstr "E794: Íå ìîæíà âñòàíîâèòè çì³ííó ó ï³ñî÷íèö³: «%s»"
+ 
+ msgid "E47: Error while reading errorfile"
+ msgstr "E47: Ïîìèëêà ÷èòàííÿ ôàéëó ïîìèëîê"
+@@ -6674,6 +6721,9 @@
+ msgid "E764: Option '%s' is not set"
+ msgstr "E764: Îïö³ÿ '%s' íå âñòàíîâëåíà"
+ 
++msgid "E850: Invalid register name"
++msgstr "E850: Íåïðàâèëüíà íàçâà ðåã³ñòðó"
++
+ msgid "search hit TOP, continuing at BOTTOM"
+ msgstr "Ïîøóê ä³éøîâ äî ÏÎ×ÀÒÊÓ, ïðîäîâæóºòüñÿ ç Ê²ÍÖß"
+ 
+@@ -6682,7 +6732,17 @@
+ 
+ #, c-format
+ msgid "Need encryption key for \"%s\""
+-msgstr "Äëÿ \"%s\" ïîòð³áåí êëþ÷: "
++msgstr "Äëÿ «%s» ïîòð³áåí êëþ÷: "
++
++msgid "can't delete OutputObject attributes"
++msgstr "íå âäàëîñÿ çíèùèòè àòðèáóòè OutputObject"
++
++msgid "softspace must be an integer"
++msgstr "softspace ìàº áóòè ö³ëèì"
++
++# msgstr "E180: "
++msgid "invalid attribute"
++msgstr "íåïðàâèëüíèé àòðèáóò"
+ 
+ msgid "writelines() requires list of strings"
+ msgstr "äëÿ writelines() ïîòð³áåí ñïèñîê ðÿäê³â"
+@@ -6693,6 +6753,61 @@
+ msgid "no such buffer"
+ msgstr "òàêîãî áóôåðà íåìàº"
+ 
++# msgstr "E406: "
++msgid "empty keys are not allowed"
++msgstr "ïîðîæí³ êëþ÷³ íå äîçâîëåí³"
++
++msgid "failed to add key to dictionary"
++msgstr "íå âäàëîñÿ äîäàòè êëþ÷ äî ñëîâíèêà"
++
++msgid "Cannot delete DictionaryObject attributes"
++msgstr "íå âäàëîñÿ çíèùèòè àòðèáóòè DictionaryObject"
++
++msgid "Cannot modify fixed dictionary"
++msgstr "Íå ìîæíà çì³íèòè ô³êñîâàíèé ñëîâíèê"
++
++msgid "Only boolean objects are allowed"
++msgstr "Äîçâîëåíî ò³ëüêè ëîã³÷í³ îáºêòè"
++
++msgid "Cannot set this attribute"
++msgstr "Íå ìîæíà âñòàíîâèòè öåé àòðèáóò"
++
++msgid "no such key in dictionary"
++msgstr "íåìàº òàêîãî êëþ÷à â ñëîâíèêó"
++
++msgid "dict is locked"
++msgstr "ñëîâíèê çàáëîêîâàíî"
++
++msgid "internal error: failed to get vim list item"
++msgstr "âíóòð³øíÿ ïîìèëêà: íå âäàëîñÿ îòðèìàòè åëåìåíò ñïèñêó vim"
++
++msgid "list is locked"
++msgstr "ñïèñîê çàáëîêîâàíî"
++
++msgid "Failed to add item to list"
++msgstr "Íå âäàëîñÿ äîäàòè åëåìåíò äî ñïèñêó"
++
++msgid "internal error: no vim list item"
++msgstr "âíóòð³øíÿ ïîìèëêà: íåìàº åëåìåíòà ñïèñêó vim"
++
++msgid "can only assign lists to slice"
++msgstr "ìîæíà ïðèñâîþâàòè ñïèñêè ò³ëüêè çð³çàì"
++
++msgid "internal error: failed to add item to list"
++msgstr "âíóòð³øíÿ ïîìèëêà: íå âäàëîñÿ äîäàòè åëåìåíò äî ñïèñêó"
++
++msgid "can only concatenate with lists"
++msgstr "ìîæíà çºäíóâàòè ò³ëüêè ç³ ñïèñêàìè"
++
++msgid "Cannot modify fixed list"
++msgstr "Íå ìîæíà çì³íèòè ô³êñîâàíèé ñïèñîê"
++
++msgid "'self' argument must be a dictionary"
++msgstr "Àðãóìåíò «self» ìàº áóòè ñëîâíèêîì"
++
++msgid "failed to run function"
++msgstr "Íå âäàëîñÿ âèêîíàòè ôóíêö³þ"
++
+ msgid "attempt to refer to deleted window"
+ msgstr "ñïðîáà çâåðíóòèñÿ äî çíèùåíîãî â³êíà"
+ 
+@@ -6720,43 +6835,11 @@
+ msgid "attempt to refer to deleted buffer"
+ msgstr "ñïðîáà çâåðíåííÿ äî çíèùåíîãî áóôåðà"
+ 
+-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
+-#~ msgstr "-name <íàçâà>\t\tÂèêîðèñòàòè ðåñóðñè, í³áè vim ìàº çàäàíó <íàçâó>"
+-
+-#~ msgid "\t\t\t  (Unimplemented)\n"
+-#~ msgstr "\t\t\t  (Íå ä³º)\n"
+-
+-#~ msgid "E396: containedin argument not accepted here"
+-#~ msgstr "E396: Àðãóìåíò containedin òóò íåïðèéíÿòíèé"
+-
+-# msgstr "E232: "
+-#~ msgid "Vim dialog..."
+-#~ msgstr "Ä³àëîã Vim..."
+-
+-# msgstr "E234: "
+-#~ msgid "Font Selection"
+-#~ msgstr "Âèáðàòè øðèôò"
+-
+-# msgstr "E289: "
+-#~ msgid "E290: over-the-spot style requires fontset"
+-#~ msgstr "E290: Ñòèëü over-the-spot âèìàãàº íàá³ð øðèôò³â"
+-
+-# msgstr "E290: "
+-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
+-#~ msgstr "E291: Ó âàñ ñòàðøà çà 1.2.3 âåðñ³ÿ GTK+. Îáëàñòü ñòàíó âèìêíåíî"
+-
+-# msgstr "E291: "
+-#~ msgid "E292: Input Method Server is not running"
+-#~ msgstr "E292: Ñåðâåð ìåòîäó ââîäó íå ôóíêö³îíóº"
+-
+-#~ msgid "with GTK-GNOME GUI."
+-#~ msgstr "ç GUI GTK-GNOME."
+-
+-#~ msgid "with GTK GUI."
+-#~ msgstr "ç GUI GTK."
++msgid "unable to convert to vim structure"
++msgstr "íå âäàëîñÿ ïåðåòâîðèòè äî ñòðóêòóðè vim"
+ 
+-#~ msgid "[NL found]"
+-#~ msgstr "[Çíàéäåíî NL]"
++msgid "NULL reference passed"
++msgstr "ïåðåäàíî ïîñèëàííÿ NULL"
+ 
+-#~ msgid "E569: maximum number of cscope connections reached"
+-#~ msgstr "E569: Ê³ëüê³ñòü ç'ºäíàíü ç cscope äîñÿãëà ìàêñèìóìó"
++msgid "internal error: invalid value type"
++msgstr "âíóòð³øíÿ ïîìèëêà: íåïðàâèëüíèé òèï çíà÷åííÿ"
+diff -Naur vim73.orig/src/po/uk.po vim73/src/po/uk.po
+--- vim73.orig/src/po/uk.po	2010-08-13 13:59:29.000000000 +0000
++++ vim73/src/po/uk.po	2013-06-07 17:07:34.475576895 +0000
+@@ -14,10 +14,11 @@
+ msgstr ""
+ "Project-Id-Version: vim 7.3\n"
+ "Report-Msgid-Bugs-To: \n"
+-"POT-Creation-Date: 2010-08-11 12:13+0300\n"
++"POT-Creation-Date: 2013-01-17 10:06+0200\n"
+ "PO-Revision-Date: 2010-06-18 21:53+0300\n"
+ "Last-Translator: ÐÐœÐ°ÑÐŸÐ»ÑÐ¹ Ð¡Ð°Ñ
+ÐœÑÐº <sakhnik@gmail.com>\n"
+ "Language-Team: Bohdan Vlasyuk <bohdan@vstu.edu.ua>\n"
++"Language: uk\n"
+ "MIME-Version: 1.0\n"
+ "Content-Type: text/plain; charset=utf-8\n"
+ "Content-Transfer-Encoding: 8bit\n"
+@@ -43,6 +44,9 @@
+ msgid "[Quickfix List]"
+ msgstr "[Ð¡Ð¿ÐžÑÐŸÐº Ð²ÐžÐ¿ÑÐ°Ð²Ð»ÐµÐœÑ]"
+ 
++msgid "E855: Autocommands caused command to abort"
++msgstr "E855: ÐÐ²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž Ð¿ÑÐžÐ·Ð²ÐµÐ»Ðž ÐŽÐŸ ÑÐºÐ°ÑÑÐ²Ð°ÐœÐœÑ ÐºÐŸÐŒÐ°ÐœÐŽÐž"
++
+ msgid "E82: Cannot allocate any buffer, exiting..."
+ msgstr "E82: ÐÐµÐŒÐ°Ñ ÐŒÐŸÐ¶Ð»ÐžÐ²ÐŸÑÑÑ ÑÐŸÐ·ÐŒÑÑÑÐžÑÐž Ñ
+ÐŸÑ ÐŸÐŽÐžÐœ Ð±ÑÑÐµÑ, Ð·Ð°Ð²ÐµÑÑÐµÐœÐœÑ ÑÐŸÐ±ÐŸÑÐž..."
+ 
+@@ -174,7 +178,6 @@
+ msgid "Top"
+ msgstr "ÐÐ³ÐŸÑÑ"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Buffer list:\n"
+@@ -235,11 +238,11 @@
+ 
+ #, c-format
+ msgid "E102: Can't find buffer \"%s\""
+-msgstr "E102: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž Ð±ÑÑÐµÑ \"%s\""
++msgstr "E102: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž Ð±ÑÑÐµÑ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E103: Buffer \"%s\" is not in diff mode"
+-msgstr "E103: ÐÑÑÐµÑ \"%s\" ÐœÐµ Ð² ÑÐµÐ¶ÐžÐŒÑ Ð¿ÐŸÑÑÐ²ÐœÑÐœÐœÑ"
++msgstr "E103: ÐÑÑÐµÑ Â«%sÂ» ÐœÐµ Ð² ÑÐµÐ¶ÐžÐŒÑ Ð¿ÐŸÑÑÐ²ÐœÑÐœÐœÑ"
+ 
+ msgid "E787: Buffer changed unexpectedly"
+ msgstr "E787: ÐÑÑÐµÑ ÐœÐµÑÐ¿ÐŸÐŽÑÐ²Ð°ÐœÐŸ Ð·ÐŒÑÐœÐžÐ²ÑÑ"
+@@ -302,6 +305,13 @@
+ msgid "Hit end of paragraph"
+ msgstr "Ð¢ÑÐ°Ð¿ÐžÐ²ÑÑ ÐºÑÐœÐµÑÑ Ð¿Ð°ÑÐ°Ð³ÑÐ°ÑÐ°"
+ 
++# msgstr "E443: "
++msgid "E839: Completion function changed window"
++msgstr "E839: Ð€ÑÐœÐºÑÑÑ ÐŽÐŸÐ¿ÐŸÐ²ÐœÐµÐœÐœÑ Ð·ÐŒÑÐœÐžÐ»Ð° Ð²ÑÐºÐœÐŸ"
++
++msgid "E840: Completion function deleted text"
++msgstr "E840: Ð€ÑÐœÐºÑÑÑ ÐŽÐŸÐ¿ÐŸÐ²ÐœÐµÐœÐœÑ Ð·ÐœÐžÑÐžÐ»Ð° ÑÐµÐºÑÑ"
++
+ msgid "'dictionary' option is empty"
+ msgstr "ÐÐ¿ÑÑÑ 'dictionary' Ð¿ÐŸÑÐŸÐ¶ÐœÑ"
+ 
+@@ -448,7 +458,7 @@
+ msgstr "E711: Ð¡Ð¿ÐžÑÐŸÐº ÐŒÐ°Ñ ÐœÐµÐŽÐŸÑÑÐ°ÑÐœÑÐŸ ÐµÐ»ÐµÐŒÐµÐœÑÑÐ²"
+ 
+ msgid "E690: Missing \"in\" after :for"
+-msgstr "E690: ÐÑÐŸÐ¿ÑÑÐµÐœÐŸ \"in\" Ð¿ÑÑÐ»Ñ :for"
++msgstr "E690: ÐÑÐŸÐ¿ÑÑÐµÐœÐŸ Â«inÂ» Ð¿ÑÑÐ»Ñ :for"
+ 
+ #, c-format
+ msgid "E107: Missing parentheses: %s"
+@@ -456,7 +466,7 @@
+ 
+ #, c-format
+ msgid "E108: No such variable: \"%s\""
+-msgstr "E108: ÐÐŒÑÐœÐœÐŸÑ ÐœÐµÐŒÐ°Ñ: \"%s\""
++msgstr "E108: ÐÐŒÑÐœÐœÐŸÑ ÐœÐµÐŒÐ°Ñ: Â«%sÂ»"
+ 
+ msgid "E743: variable nested too deep for (un)lock"
+ msgstr "E743: ÐÐŒÑÐœÐœÐ° ÐŒÐ°Ñ Ð·Ð°Ð±Ð°Ð³Ð°ÑÐŸ Ð²ÐºÐ»Ð°ÐŽÐµÐœÑ ÑÐŸÐ± Ð±ÑÑÐž Ð·Ð°-/Ð²ÑÐŽÐºÑÐžÑÐŸÑ."
+@@ -501,11 +511,11 @@
+ 
+ #, c-format
+ msgid "E114: Missing quote: %s"
+-msgstr "E114: ÐÑÐ°ÐºÑÑ '\"': %s"
++msgstr "E114: ÐÑÐ°ÐºÑÑ Ð»Ð°Ð¿ÐºÐž: %s"
+ 
+ #, c-format
+ msgid "E115: Missing quote: %s"
+-msgstr "E115: ÐÑÐ°ÐºÑÑ \"'\": %s"
++msgstr "E115: ÐÑÐ°ÐºÑÑ Ð»Ð°Ð¿ÐºÐž: %s"
+ 
+ # msgstr "E404: "
+ #, c-format
+@@ -523,7 +533,7 @@
+ 
+ #, c-format
+ msgid "E721: Duplicate key in Dictionary: \"%s\""
+-msgstr "E721: ÐÐŸÐ²ÑÐŸÑÐµÐœÐœÑ ÐºÐ»ÑÑÐ° Ð² ÑÐ»ÐŸÐ²ÐœÐžÐºÑ: \"%s\""
++msgstr "E721: ÐÐŸÐ²ÑÐŸÑÐµÐœÐœÑ ÐºÐ»ÑÑÐ° Ð² ÑÐ»ÐŸÐ²ÐœÐžÐºÑ: Â«%sÂ»"
+ 
+ # msgstr "E235: "
+ #, c-format
+@@ -565,6 +575,10 @@
+ msgid "E808: Number or Float required"
+ msgstr "E808: Ð¢ÑÐµÐ±Ð° Ð²ÐºÐ°Ð·Ð°ÑÐž Number ÑÐž Float"
+ 
++# msgstr "E14: "
++msgid "add() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ add()"
++
+ msgid "E699: Too many arguments"
+ msgstr "E699: ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ²"
+ 
+@@ -580,11 +594,23 @@
+ msgid "&Ok"
+ msgstr "&O:ÐÐ°ÑÐ°Ð·ÐŽ"
+ 
++# msgstr "E14: "
++msgid "extend() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ extend()"
++
+ # msgstr "E226: "
+ #, c-format
+ msgid "E737: Key already exists: %s"
+ msgstr "E737: ÐÐ»ÑÑ Ð²Ð¶Ðµ ÑÑÐœÑÑ: %s"
+ 
++# msgstr "E14: "
++msgid "map() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ map()"
++
++# msgstr "E14: "
++msgid "filter() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ filter()"
++
+ #, c-format
+ msgid "+-%s%3ld lines: "
+ msgstr "+-%s%3ld ÑÑÐŽÐºÑÐ²: "
+@@ -603,6 +629,10 @@
+ msgid "called inputrestore() more often than inputsave()"
+ msgstr "ÐÐžÐºÐ»ÐžÐºÐž ÐŽÐŸ inputrestore() ÑÐ°ÑÑÑÑÐµ, ÐœÑÐ¶ ÐŽÐŸ inputsave()"
+ 
++# msgstr "E14: "
++msgid "insert() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ insert()"
++
+ # msgstr "E406: "
+ msgid "E786: Range not allowed"
+ msgstr "E786: ÐÐœÑÐµÑÐ²Ð°Ð» ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ"
+@@ -630,12 +660,24 @@
+ msgid "E277: Unable to read a server reply"
+ msgstr "E277: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž Ð²ÑÐŽÐ¿ÐŸÐ²ÑÐŽÑ ÑÐµÑÐ²ÐµÑÐ°"
+ 
++# msgstr "E14: "
++msgid "remove() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ remove()"
++
+ msgid "E655: Too many symbolic links (cycle?)"
+ msgstr "E655: ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ ÑÐžÐŒÐ²ÐŸÐ»ÑÐœÐžÑ
+ Ð¿ÐŸÑÐžÐ»Ð°ÐœÑ (ÑÐžÐºÐ»?)"
+ 
++# msgstr "E14: "
++msgid "reverse() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ reverse()"
++
+ msgid "E258: Unable to send to client"
+ msgstr "E258: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ ÐœÐ°ÐŽÑÑÐ»Ð°ÑÐž ÐºÐ»ÑÑÐœÑÑ"
+ 
++# msgstr "E14: "
++msgid "sort() argument"
++msgstr "Ð°ÑÐ³ÑÐŒÐµÐœÑ sort()"
++
+ # msgstr "E364: "
+ msgid "E702: Sort compare function failed"
+ msgstr "E702: ÐÐŸÐŒÐžÐ»ÐºÐ° Ñ ÑÑÐœÐºÑÑÑ Ð¿ÐŸÑÑÐ²ÐœÑÐœÐœÑ"
+@@ -673,14 +715,6 @@
+ msgstr "E806: Float Ð²Ð¶ÐžÑÐŸ ÑÐº String"
+ 
+ #, c-format
+-msgid "E704: Funcref variable name must start with a capital: %s"
+-msgstr "E704: ÐÐ°Ð·Ð²Ð° Ð·ÐŒÑÐœÐœÐŸÑ Funcref ÐŒÐ°Ñ Ð¿ÐŸÑÐžÐœÐ°ÑÐžÑÑ Ð· Ð²ÐµÐ»ÐžÐºÐŸÑ Ð»ÑÑÐµÑÐž: %s"
+-
+-#, c-format
+-msgid "E705: Variable name conflicts with existing function: %s"
+-msgstr "E705: ÐÐ°Ð·Ð²Ð° Ð·ÐŒÑÐœÐœÐŸÑ ÑÐ¿ÑÐ²Ð¿Ð°ÐŽÐ°Ñ Ð· ÑÑÐœÑÑÑÐŸÑ ÑÑÐœÐºÑÑÑÑ: %s"
+-
+-#, c-format
+ msgid "E706: Variable type mismatch for: %s"
+ msgstr "E706: ÐÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐžÐ¹ ÑÐžÐ¿ Ð·ÐŒÑÐœÐœÐŸÑ: %s"
+ 
+@@ -689,6 +723,14 @@
+ msgstr "E795: ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð·ÐœÐžÑÐžÑÐž Ð·ÐŒÑÐœÐœÑ %s"
+ 
+ #, c-format
++msgid "E704: Funcref variable name must start with a capital: %s"
++msgstr "E704: ÐÐ°Ð·Ð²Ð° Ð·ÐŒÑÐœÐœÐŸÑ Funcref ÐŒÐ°Ñ Ð¿ÐŸÑÐžÐœÐ°ÑÐžÑÑ Ð· Ð²ÐµÐ»ÐžÐºÐŸÑ Ð»ÑÑÐµÑÐž: %s"
++
++#, c-format
++msgid "E705: Variable name conflicts with existing function: %s"
++msgstr "E705: ÐÐ°Ð·Ð²Ð° Ð·ÐŒÑÐœÐœÐŸÑ ÑÐ¿ÑÐ²Ð¿Ð°ÐŽÐ°Ñ Ð· ÑÑÐœÑÑÑÐŸÑ ÑÑÐœÐºÑÑÑÑ: %s"
++
++#, c-format
+ msgid "E741: Value is locked: %s"
+ msgstr "E741: ÐÐœÐ°ÑÐµÐœÐœÑ Ð·Ð°Ñ
+ÐžÑÐµÐœÐµ: %s"
+ 
+@@ -714,6 +756,10 @@
+ msgid "E125: Illegal argument: %s"
+ msgstr "E125: ÐÐµÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐžÐ¹ Ð°ÑÐ³ÑÐŒÐµÐœÑ: %s"
+ 
++#, c-format
++msgid "E853: Duplicate argument name: %s"
++msgstr "E853: ÐÐ°Ð·Ð²Ð° Ð°ÑÐ³ÑÐŒÐµÐœÑÑ Ð¿ÐŸÐ²ÑÐŸÑÑÑÑÑÑÑ: %s"
++
+ msgid "E126: Missing :endfunction"
+ msgstr "E126: ÐÑÐ°ÐºÑÑ :endfunction"
+ 
+@@ -785,7 +831,7 @@
+ msgstr "ÐÐŸÐŽÐœÐŸÐ³ÐŸ ÑÑÐ°ÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ñ"
+ 
+ msgid "Entering Debug mode.  Type \"cont\" to continue."
+-msgstr "Ð ÐµÐ¶ÐžÐŒ ÐœÐ°Ð»Ð°Ð³ÐŸÐŽÐ¶ÐµÐœÐœÑ.  Ð©ÐŸÐ± Ð¿ÑÐŸÐŽÐŸÐ²Ð¶ÐžÑÐž Ð²Ð²ÐµÐŽÑÑÑ \"cont\"."
++msgstr "Ð ÐµÐ¶ÐžÐŒ ÐœÐ°Ð»Ð°Ð³ÐŸÐŽÐ¶ÐµÐœÐœÑ.  Ð©ÐŸÐ± Ð¿ÑÐŸÐŽÐŸÐ²Ð¶ÐžÑÐž Ð²Ð²ÐµÐŽÑÑÑ Â«contÂ»."
+ 
+ #, c-format
+ msgid "line %ld: %s"
+@@ -797,7 +843,7 @@
+ 
+ #, c-format
+ msgid "Breakpoint in \"%s%s\" line %ld"
+-msgstr "Ð¢ÐŸÑÐºÐ° Ð·ÑÐ¿ÐžÐœÐºÐž Ð² \"%s%s\" ÑÑÐŽÐŸÐº %ld"
++msgstr "Ð¢ÐŸÑÐºÐ° Ð·ÑÐ¿ÐžÐœÐºÐž Ð² Â«%s%sÂ» ÑÑÐŽÐŸÐº %ld"
+ 
+ #, c-format
+ msgid "E161: Breakpoint not found: %s"
+@@ -811,21 +857,21 @@
+ msgstr "%3d %s %s   ÑÑÐŽÐŸÐº %ld"
+ 
+ msgid "E750: First use \":profile start {fname}\""
+-msgstr "E750: Ð¡Ð¿ÐŸÑÐ°ÑÐºÑ Ð·ÑÐŸÐ±ÑÑÑ \":profile start {ÑÐ°Ð¹Ð»}\""
++msgstr "E750: Ð¡Ð¿ÐŸÑÐ°ÑÐºÑ Ð·ÑÐŸÐ±ÑÑÑ Â«:profile start {ÑÐ°Ð¹Ð»}Â»"
+ 
+ msgid "Save As"
+ msgstr "ÐÐ±ÐµÑÐµÐ³ÑÐž ÑÐº"
+ 
+ #, c-format
+ msgid "Save changes to \"%s\"?"
+-msgstr "ÐÐ±ÐµÑÐµÐ³ÑÐž Ð·ÐŒÑÐœÐž Ð² \"%s\"?"
++msgstr "ÐÐ±ÐµÑÐµÐ³ÑÐž Ð·ÐŒÑÐœÐž Ð² Â«%sÂ»?"
+ 
+ msgid "Untitled"
+ msgstr "ÐÐµÐœÐ°Ð·Ð²Ð°ÐœÐžÐ¹"
+ 
+ #, c-format
+ msgid "E162: No write since last change for buffer \"%s\""
+-msgstr "E162: ÐÑÑÐµÑ \"%s\" ÐŒÐ°Ñ ÐœÐµÐ·Ð±ÐµÑÐµÐ¶ÐµÐœÑ Ð·ÐŒÑÐœÐž"
++msgstr "E162: ÐÑÑÐµÑ Â«%sÂ» ÐŒÐ°Ñ ÐœÐµÐ·Ð±ÐµÑÐµÐ¶ÐµÐœÑ Ð·ÐŒÑÐœÐž"
+ 
+ msgid "Warning: Entered other buffer unexpectedly (check autocommands)"
+ msgstr ""
+@@ -847,38 +893,38 @@
+ # msgstr "E195: "
+ #, c-format
+ msgid "Searching for \"%s\" in \"%s\""
+-msgstr "ÐÐŸÑÑÐº \"%s\" Ð² \"%s\""
++msgstr "ÐÐŸÑÑÐº Â«%sÂ» Ð² Â«%sÂ»"
+ 
+ #, c-format
+ msgid "Searching for \"%s\""
+-msgstr "ÐÐŸÑÑÐº \"%s\""
++msgstr "ÐÐŸÑÑÐº Â«%sÂ»"
+ 
+ #, c-format
+ msgid "not found in 'runtimepath': \"%s\""
+-msgstr "Ð 'runtimepath' ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ \"%s\""
++msgstr "Ð 'runtimepath' ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ Â«%sÂ»"
+ 
+ msgid "Source Vim script"
+ msgstr "ÐÑÐŸÑÐžÑÐ°ÑÐž ÑÐºÑÐžÐ¿Ñ Vim"
+ 
+ #, c-format
+ msgid "Cannot source a directory: \"%s\""
+-msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž ÐºÐ°ÑÐ°Ð»ÐŸÐ³: \"%s\""
++msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž ÐºÐ°ÑÐ°Ð»ÐŸÐ³: Â«%sÂ»"
+ 
+ #, c-format
+ msgid "could not source \"%s\""
+-msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÐžÐºÐŸÐœÐ°ÑÐž \"%s\""
++msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÐžÐºÐŸÐœÐ°ÑÐž Â«%sÂ»"
+ 
+ #, c-format
+ msgid "line %ld: could not source \"%s\""
+-msgstr "ÑÑÐŽÐŸÐº %ld: ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÐžÐºÐŸÐœÐ°ÑÐž \"%s\""
++msgstr "ÑÑÐŽÐŸÐº %ld: ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÐžÐºÐŸÐœÐ°ÑÐž Â«%sÂ»"
+ 
+ #, c-format
+ msgid "sourcing \"%s\""
+-msgstr "Ð²ÐžÐºÐŸÐœÑÑÑÑÑÑ \"%s\""
++msgstr "Ð²ÐžÐºÐŸÐœÑÑÑÑÑÑ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "line %ld: sourcing \"%s\""
+-msgstr "ÑÑÐŽÐŸÐº %ld: Ð²ÐžÐºÐŸÐœÑÑÑÑÑÑ \"%s\""
++msgstr "ÑÑÐŽÐŸÐº %ld: Ð²ÐžÐºÐŸÐœÑÑÑÑÑÑ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "finished sourcing %s"
+@@ -912,11 +958,11 @@
+ 
+ #, c-format
+ msgid "Current %slanguage: \"%s\""
+-msgstr "ÐÐŸÐ²Ð° (%s): \"%s\""
++msgstr "ÐÐŸÐ²Ð° (%s): Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E197: Cannot set language to \"%s\""
+-msgstr "E197: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÑÐ°ÐœÐŸÐ²ÐžÑÐž ÐŒÐŸÐ²Ñ \"%s\""
++msgstr "E197: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÑÐ°ÐœÐŸÐ²ÐžÑÐž ÐŒÐŸÐ²Ñ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "<%s>%s%s  %d,  Hex %02x,  Octal %03o"
+@@ -959,7 +1005,7 @@
+ 
+ #, c-format
+ msgid "Reading viminfo file \"%s\"%s%s%s"
+-msgstr "ÐÑÐžÑÑÑÑÑÑÑ ÑÐ°Ð¹Ð» viminfo: \"%s\"%s%s%s"
++msgstr "ÐÑÐžÑÑÑÑÑÑÑ ÑÐ°Ð¹Ð» viminfo: Â«%sÂ»%s%s%s"
+ 
+ msgid " info"
+ msgstr " ÑÐœÑÐŸÑÐŒÐ°ÑÑÑ"
+@@ -976,7 +1022,7 @@
+ #. avoid a wait_return for this message, it's annoying
+ #, c-format
+ msgid "E137: Viminfo file is not writable: %s"
+-msgstr "E137: ÐÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ Ð·Ð°Ð¿ÐžÑ Ñ ÑÐ°Ð¹Ð» viminfo: \"%s\""
++msgstr "E137: ÐÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ Ð·Ð°Ð¿ÐžÑ Ñ ÑÐ°Ð¹Ð» viminfo: %s"
+ 
+ #, c-format
+ msgid "E138: Can't write viminfo file %s!"
+@@ -984,14 +1030,13 @@
+ 
+ #, c-format
+ msgid "Writing viminfo file \"%s\""
+-msgstr "ÐÐ°Ð¿ÐžÑÑÑÑÑÑÑ ÑÐ°Ð¹Ð» viminfo \"%s\""
++msgstr "ÐÐ°Ð¿ÐžÑÑÑÑÑÑÑ ÑÐ°Ð¹Ð» viminfo Â«%sÂ»"
+ 
+ #. Write the info:
+ #, c-format
+ msgid "# This viminfo file was generated by Vim %s.\n"
+ msgstr "# ÐŠÐµÐ¹ ÑÐ°Ð¹Ð» Ð°Ð²ÑÐŸÐŒÐ°ÑÐžÑÐœÐŸ ÑÑÐ²ÐŸÑÐµÐœÐžÐ¹ Vim %s.\n"
+ 
+-#, c-format
+ msgid ""
+ "# You may edit it if you're careful!\n"
+ "\n"
+@@ -999,7 +1044,6 @@
+ "# ÐÐŸÐ¶ÐµÑÐµ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÑÐž, Ð°Ð»Ðµ ÐÐÐÐ ÐÐÐÐ!\n"
+ "\n"
+ 
+-#, c-format
+ msgid "# Value of 'encoding' when this file was written\n"
+ msgstr "# ÐÐœÐ°ÑÐµÐœÐœÑ 'encoding' Ð¿ÑÐŽ ÑÐ°Ñ ÑÑÐ²ÐŸÑÐµÐœÐœÑ ÑÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ñ\n"
+ 
+@@ -1014,11 +1058,11 @@
+ 
+ #, c-format
+ msgid "Overwrite existing file \"%s\"?"
+-msgstr "ÐÐµÑÐµÐ¿ÐžÑÐ°ÑÐž ÑÑÐœÑÑÑÐžÐ¹ ÑÐ°Ð¹Ð» \"%s\"?"
++msgstr "ÐÐµÑÐµÐ¿ÐžÑÐ°ÑÐž ÑÑÐœÑÑÑÐžÐ¹ ÑÐ°Ð¹Ð» Â«%sÂ»?"
+ 
+ #, c-format
+ msgid "Swap file \"%s\" exists, overwrite anyway?"
+-msgstr "Ð€Ð°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ \"%s\" ÑÑÐœÑÑ, Ð¿ÐµÑÐµÐ·Ð°Ð¿ÐžÑÐ°ÑÐž?"
++msgstr "Ð€Ð°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ Â«%sÂ» ÑÑÐœÑÑ, Ð¿ÐµÑÐµÐ·Ð°Ð¿ÐžÑÐ°ÑÐž?"
+ 
+ #, c-format
+ msgid "E768: Swap file exists: %s (:silent! overrides)"
+@@ -1036,7 +1080,7 @@
+ "'readonly' option is set for \"%s\".\n"
+ "Do you wish to write anyway?"
+ msgstr ""
+-"ÐÐ»Ñ \"%s\" Ð²ÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœÐŸ 'readonly'.\n"
++"ÐÐ»Ñ Â«%sÂ» Ð²ÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœÐŸ 'readonly'.\n"
+ "ÐÐ°Ð¶Ð°ÑÑÐµ Ð²ÑÐµ ÐŸÐŽÐœÐŸ Ð¿ÑÐŸÐŽÐŸÐ²Ð¶ÐžÑÐž Ð·Ð°Ð¿ÐžÑ?"
+ 
+ #, c-format
+@@ -1045,13 +1089,13 @@
+ "It may still be possible to write it.\n"
+ "Do you wish to try?"
+ msgstr ""
+-"Ð€Ð°Ð¹Ð» \"%s\" ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ ÑÑÐ»ÑÐºÐž ÑÐžÑÐ°ÑÐž.\n"
++"Ð€Ð°Ð¹Ð» Â«%sÂ» ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ ÑÑÐ»ÑÐºÐž ÑÐžÑÐ°ÑÐž.\n"
+ "ÐÑÐŸÑÐµ, ÐŒÐŸÐ¶Ð»ÐžÐ²ÐŸ, Ð¹ÐŸÐ³ÐŸ ÐŒÐŸÐ¶ÐœÐ° Ð·Ð°Ð¿ÐžÑÐ°ÑÐž.\n"
+ "Ð¥ÐŸÑÐµÑÐµ ÑÐ¿ÑÐŸÐ±ÑÐ²Ð°ÑÐž?"
+ 
+ #, c-format
+ msgid "E505: \"%s\" is read-only (add ! to override)"
+-msgstr "E505: \"%s\" ÑÑÐ»ÑÐºÐž ÐŽÐ»Ñ ÑÐžÑÐ°ÐœÐœÑ (! ÑÐŸÐ± ÐœÐµ Ð·Ð²Ð°Ð¶Ð°ÑÐž)"
++msgstr "E505: Â«%sÂ» ÑÑÐ»ÑÐºÐž ÐŽÐ»Ñ ÑÐžÑÐ°ÐœÐœÑ (! ÑÐŸÐ± ÐœÐµ Ð·Ð²Ð°Ð¶Ð°ÑÐž)"
+ 
+ msgid "Edit File"
+ msgstr "Ð ÐµÐŽÐ°Ð³ÑÐ²Ð°ÑÐž Ð€Ð°Ð¹Ð»"
+@@ -1108,7 +1152,6 @@
+ msgid "Pattern found in every line: %s"
+ msgstr "ÐÑÐ°Ð·ÐŸÐº Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ Ñ ÐºÐŸÐ¶ÐœÐŸÐŒÑ ÑÑÐŽÐºÑ: %s"
+ 
+-#, c-format
+ msgid ""
+ "\n"
+ "# Last Substitute String:\n"
+@@ -1131,7 +1174,7 @@
+ 
+ #, c-format
+ msgid "Sorry, help file \"%s\" not found"
+-msgstr "ÐÐžÐ±Ð°ÑÑÐµ, ÑÐ°Ð¹Ð» ÐŽÐŸÐ¿ÐŸÐŒÐŸÐ³Ðž \"%s\" ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ"
++msgstr "ÐÐžÐ±Ð°ÑÑÐµ, ÑÐ°Ð¹Ð» ÐŽÐŸÐ¿ÐŸÐŒÐŸÐ³Ðž Â«%sÂ» ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ"
+ 
+ #, c-format
+ msgid "E150: Not a directory: %s"
+@@ -1151,7 +1194,7 @@
+ 
+ #, c-format
+ msgid "E154: Duplicate tag \"%s\" in file %s/%s"
+-msgstr "E154: ÐÐŸÐ²ÑÐŸÑÐµÐœÐœÑ ÑÐµÒÑ \"%s\" Ñ ÑÐ°Ð¹Ð»Ñ %s/%s"
++msgstr "E154: ÐÐŸÐ²ÑÐŸÑÐµÐœÐœÑ ÑÐµÒÑ Â«%sÂ» Ñ ÑÐ°Ð¹Ð»Ñ %s/%s"
+ 
+ #, c-format
+ msgid "E160: Unknown sign command: %s"
+@@ -1192,7 +1235,7 @@
+ msgstr "[ÐÐœÐžÑÐµÐœÐŸ]"
+ 
+ msgid "Entering Ex mode.  Type \"visual\" to go to Normal mode."
+-msgstr "Ð ÐµÐ¶ÐžÐŒ Ex. ÐÐ»Ñ Ð¿ÐŸÐ²ÐµÑÐœÐµÐœÐœÑ ÐŽÐŸ ÐœÐŸÑÐŒÐ°Ð»ÑÐœÐŸÐ³ÐŸ ÑÐµÐ¶ÐžÐŒÑ Ð²ÐžÐºÐŸÐœÐ°Ð¹ÑÐµ \"visual\""
++msgstr "Ð ÐµÐ¶ÐžÐŒ Ex. ÐÐ»Ñ Ð¿ÐŸÐ²ÐµÑÐœÐµÐœÐœÑ ÐŽÐŸ ÐœÐŸÑÐŒÐ°Ð»ÑÐœÐŸÐ³ÐŸ ÑÐµÐ¶ÐžÐŒÑ Ð²ÐžÐºÐŸÐœÐ°Ð¹ÑÐµ Â«visualÂ»"
+ 
+ msgid "E501: At end-of-file"
+ msgstr "E501: ÐÑÐœÐµÑÑ ÑÐ°Ð¹Ð»Ñ"
+@@ -1220,7 +1263,7 @@
+ msgstr "E493: ÐÐœÑÐµÑÐ²Ð°Ð» Ð·Ð°ÐŽÐ°ÐœÐŸ ÐœÐ°Ð²ÐžÐ²ÐŸÑÑÑ"
+ 
+ msgid "Backwards range given, OK to swap"
+-msgstr "ÐÐœÑÐµÑÐ²Ð°Ð» Ð·Ð°ÐŽÐ°ÐœÐŸ ÐœÐ°Ð²ÐžÐ²ÐŸÑÑÑ, ÑÐŸÐ± Ð¿ÐŸÐŒÑÐœÑÑÐž ÐŒÑÑÑÑÐŒÐž -- ÐÐÐ ÐÐÐ"
++msgstr "ÐÐœÑÐµÑÐ²Ð°Ð» Ð·Ð°ÐŽÐ°ÐœÐŸ ÐœÐ°Ð²ÐžÐ²ÐŸÑÑÑ, ÑÐŸÐ± Ð¿ÐŸÐŒÑÐœÑÑÐž ÐŒÑÑÑÑÐŒÐž â ÐÐÐ ÐÐÐ"
+ 
+ msgid "E494: Use w or w>>"
+ msgstr "E494: Ð¡Ð¿ÑÐŸÐ±ÑÐ¹ÑÐµ w Ð°Ð±ÐŸ w>>"
+@@ -1288,6 +1331,9 @@
+ msgid "E183: User defined commands must start with an uppercase letter"
+ msgstr "E183: ÐÐŸÐŒÐ°ÐœÐŽÐž ÐºÐŸÑÐžÑÑÑÐ²Ð°ÑÐ° Ð¿ÐŸÐ²ÐžÐœÐœÑ Ð¿ÐŸÑÐžÐœÐ°ÑÐžÑÑ Ð· Ð²ÐµÐ»ÐžÐºÐŸÑ Ð»ÑÑÐµÑÐž"
+ 
++msgid "E841: Reserved name, cannot be used for user defined command"
++msgstr "E841: ÐÐ°ÑÐµÐ·ÐµÑÐ²ÐŸÐ²Ð°ÐœÐ° ÐœÐ°Ð·Ð²Ð°, ÐœÐµ ÐŒÐŸÐ¶ÐœÐ° Ð²ÐžÐºÐŸÑÐžÑÑÐ°ÑÐž ÐŽÐ»Ñ ÐºÐŸÑÐžÑÑÑÐ²Ð°ÑÑÐºÐŸÑ ÐºÐŸÐŒÐ°ÐœÐŽÐž"
++
+ # msgstr "E183: "
+ #, c-format
+ msgid "E184: No such user-defined command: %s"
+@@ -1309,8 +1355,8 @@
+ 
+ # msgstr "E184: "
+ #, c-format
+-msgid "E185: Cannot find color scheme %s"
+-msgstr "E185: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÑ
+ÐµÐŒÑ ÐºÐŸÐ»ÑÐŸÑÑÐ² %s"
++msgid "E185: Cannot find color scheme '%s'"
++msgstr "E185: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÑ
+ÐµÐŒÑ ÐºÐŸÐ»ÑÐŸÑÑÐ² Â«%sÂ»"
+ 
+ msgid "Greetings, Vim user!"
+ msgstr "ÐÑÑÐ°ÐœÐœÑ, ÐºÐŸÑÐžÑÑÑÐ²Ð°ÑÑ Vim!"
+@@ -1380,12 +1426,12 @@
+ 
+ #, c-format
+ msgid "E189: \"%s\" exists (add ! to override)"
+-msgstr "E189: Ð€Ð°Ð¹Ð» \"%s\" ÑÑÐœÑÑ (! ÑÐŸÐ± ÐœÐµ Ð·Ð²Ð°Ð¶Ð°ÑÐž)"
++msgstr "E189: Ð€Ð°Ð¹Ð» Â«%sÂ» ÑÑÐœÑÑ (! ÑÐŸÐ± ÐœÐµ Ð·Ð²Ð°Ð¶Ð°ÑÐž)"
+ 
+ # msgstr "E189: "
+ #, c-format
+ msgid "E190: Cannot open \"%s\" for writing"
+-msgstr "E190: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž \"%s\" ÐŽÐ»Ñ Ð·Ð°Ð¿ÐžÑÑ"
++msgstr "E190: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž Â«%sÂ» ÐŽÐ»Ñ Ð·Ð°Ð¿ÐžÑÑ"
+ 
+ # msgstr "E190: "
+ #. set mark
+@@ -1404,23 +1450,26 @@
+ msgstr "E194: ÐÐµÐŒÐ°Ñ ÐœÐ°Ð·Ð²Ðž Ð²ÑÐŸÑÐžÐœÐœÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ñ ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž '#'"
+ 
+ msgid "E495: no autocommand file name to substitute for \"<afile>\""
+-msgstr "E495: ÐÐµÐŒÐ°Ñ ÐœÐ°Ð·Ð²Ðž ÑÐ°Ð¹Ð»Ñ Ð°Ð²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž \"<afile>\""
++msgstr "E495: ÐÐµÐŒÐ°Ñ ÐœÐ°Ð·Ð²Ðž ÑÐ°Ð¹Ð»Ñ Ð°Ð²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž Â«<afile>Â»"
+ 
+ msgid "E496: no autocommand buffer number to substitute for \"<abuf>\""
+-msgstr "E496: ÐÐµÐŒÐ°Ñ ÐœÐŸÐŒÐµÑÐ° Ð±ÑÑÐµÑÐ° Ð°Ð²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž \"<abuf>\""
++msgstr "E496: ÐÐµÐŒÐ°Ñ ÐœÐŸÐŒÐµÑÐ° Ð±ÑÑÐµÑÐ° Ð°Ð²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž Â«<abuf>Â»"
+ 
+ msgid "E497: no autocommand match name to substitute for \"<amatch>\""
+-msgstr "E497: ÐÐµÐŒÐ°Ñ ÐœÐ°Ð·Ð²Ðž Ð·Ð±ÑÐ³Ñ Ð°Ð²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž \"<amatch>\""
++msgstr "E497: ÐÐµÐŒÐ°Ñ ÐœÐ°Ð·Ð²Ðž Ð·Ð±ÑÐ³Ñ Ð°Ð²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž Â«<amatch>Â»"
+ 
+ msgid "E498: no :source file name to substitute for \"<sfile>\""
+-msgstr "E498: ÐÐµÐŒÐ°Ñ ÐœÐ°Ð·Ð²Ðž ÑÐ°Ð¹Ð»Ñ :source ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž \"<sfile>\""
++msgstr "E498: ÐÐµÐŒÐ°Ñ ÐœÐ°Ð·Ð²Ðž ÑÐ°Ð¹Ð»Ñ :source ÐŽÐ»Ñ Ð·Ð°ÐŒÑÐœÐž Â«<sfile>Â»"
++
++msgid "E842: no line number to use for \"<slnum>\""
++msgstr "E842: ÐœÐµÐŒÐ°Ñ ÐœÐŸÐŒÐµÑÐ° ÑÑÐŽÐºÐ°, ÑÐŸÐ± Ð²ÐžÐºÐŸÑÐžÑÑÐ°ÑÐž Ð· Â«<sfile>Â»"
+ 
+ #, no-c-format
+ msgid "E499: Empty file name for '%' or '#', only works with \":p:h\""
+-msgstr "E499: ÐÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ñ ÐŽÐ»Ñ '%' ÑÐž '#' Ð¿ÐŸÑÐŸÐ¶ÐœÑ, Ð¿ÑÐ°ÑÑÑ Ð»ÐžÑÐµ Ð· \":p:h\""
++msgstr "E499: ÐÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ñ ÐŽÐ»Ñ '%' ÑÐž '#' Ð¿ÐŸÑÐŸÐ¶ÐœÑ, Ð¿ÑÐ°ÑÑÑ Ð»ÐžÑÐµ Ð· Â«:p:hÂ»"
+ 
+ msgid "E500: Evaluates to an empty string"
+-msgstr "E500: Ð ÐµÐ·ÑÐ»ÑÑÐ°Ñ -- Ð¿ÐŸÑÐŸÐ¶ÐœÑÐ¹ ÑÑÐŽÐŸÐº"
++msgstr "E500: Ð ÐµÐ·ÑÐ»ÑÑÐ°Ñ â Ð¿ÐŸÑÐŸÐ¶ÐœÑÐ¹ ÑÑÐŽÐŸÐº"
+ 
+ msgid "E195: Cannot open viminfo file for reading"
+ msgstr "E195: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž ÑÐ°Ð¹Ð» viminfo"
+@@ -1652,6 +1701,9 @@
+ msgid "[converted]"
+ msgstr "[ÐºÐŸÐœÐ²ÐµÑÑÐŸÐ²Ð°ÐœÐŸ]"
+ 
++msgid "[blowfish]"
++msgstr "[blowfish]"
++
+ msgid "[crypted]"
+ msgstr "[Ð·Ð°ÑÐžÑÑÐŸÐ²Ð°ÐœÐŸ]"
+ 
+@@ -1853,50 +1905,50 @@
+ 
+ #, c-format
+ msgid "E208: Error writing to \"%s\""
+-msgstr "E208: ÐÐŸÐŒÐžÐ»ÐºÐ° Ð·Ð°Ð¿ÐžÑÑ Ñ \"%s\""
++msgstr "E208: ÐÐŸÐŒÐžÐ»ÐºÐ° Ð·Ð°Ð¿ÐžÑÑ Ñ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E209: Error closing \"%s\""
+-msgstr "E209: ÐÐŸÐŒÐžÐ»ÐºÐ° Ð·Ð°ÐºÑÐžÑÑÑ \"%s\""
++msgstr "E209: ÐÐŸÐŒÐžÐ»ÐºÐ° Ð·Ð°ÐºÑÐžÑÑÑ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E210: Error reading \"%s\""
+-msgstr "E210: ÐÐŸÐŒÐžÐ»ÐºÐ° ÑÐžÑÐ°ÐœÐœÑ \"%s\""
++msgstr "E210: ÐÐŸÐŒÐžÐ»ÐºÐ° ÑÐžÑÐ°ÐœÐœÑ Â«%sÂ»"
+ 
+ msgid "E246: FileChangedShell autocommand deleted buffer"
+ msgstr "E246: ÐÐ²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐ° FileChangedShell Ð·ÐœÐžÑÐžÐ»Ð° Ð±ÑÑÐµÑ"
+ 
+ #, c-format
+ msgid "E211: File \"%s\" no longer available"
+-msgstr "E211: Ð€Ð°Ð¹Ð» \"%s\" Ð±ÑÐ»ÑÑÐµ ÐœÐµ ÐŽÐŸÑÑÐ¶ÐœÐžÐ¹"
++msgstr "E211: Ð€Ð°Ð¹Ð» Â«%sÂ» Ð±ÑÐ»ÑÑÐµ ÐœÐµ ÐŽÐŸÑÑÐ¶ÐœÐžÐ¹"
+ 
+ #, c-format
+ msgid ""
+ "W12: Warning: File \"%s\" has changed and the buffer was changed in Vim as "
+ "well"
+-msgstr "W12: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð€Ð°Ð¹Ð» \"%s\" Ð·ÐŒÑÐœÐžÐ²ÑÑ, Ð°Ð»Ðµ Ð¹ Ð±ÑÑÐµÑ Ñ Vim ÑÐ°ÐºÐŸÐ¶"
++msgstr "W12: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð€Ð°Ð¹Ð» Â«%sÂ» Ð·ÐŒÑÐœÐžÐ²ÑÑ, Ð°Ð»Ðµ Ð¹ Ð±ÑÑÐµÑ Ñ Vim ÑÐ°ÐºÐŸÐ¶"
+ 
+ msgid "See \":help W12\" for more info."
+-msgstr "ÐÐžÐ². \":help W12\" ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
++msgstr "ÐÐžÐ². Â«:help W12Â» ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
+ 
+ #, c-format
+ msgid "W11: Warning: File \"%s\" has changed since editing started"
+-msgstr "W11: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð€Ð°Ð¹Ð» \"%s\" Ð·ÐŒÑÐœÐžÐ²ÑÑ Ð¿ÑÑÐ»Ñ Ð¿ÐŸÑÐ°ÑÐºÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ"
++msgstr "W11: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð€Ð°Ð¹Ð» Â«%sÂ» Ð·ÐŒÑÐœÐžÐ²ÑÑ Ð¿ÑÑÐ»Ñ Ð¿ÐŸÑÐ°ÑÐºÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ"
+ 
+ msgid "See \":help W11\" for more info."
+-msgstr "ÐÐžÐ². \":help W11\" ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
++msgstr "ÐÐžÐ². Â«:help W11Â» ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
+ 
+ #, c-format
+ msgid "W16: Warning: Mode of file \"%s\" has changed since editing started"
+ msgstr ""
+-"W16: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð ÐµÐ¶ÐžÐŒ ÑÐ°Ð¹Ð»Ñ \"%s\" Ð·ÐŒÑÐœÐžÐ²ÑÑ Ð¿ÑÑÐ»Ñ Ð¿ÐŸÑÐ°ÑÐºÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ"
++"W16: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð ÐµÐ¶ÐžÐŒ ÑÐ°Ð¹Ð»Ñ Â«%sÂ» Ð·ÐŒÑÐœÐžÐ²ÑÑ Ð¿ÑÑÐ»Ñ Ð¿ÐŸÑÐ°ÑÐºÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ"
+ 
+ msgid "See \":help W16\" for more info."
+-msgstr "ÐÐžÐ². \":help W16\" ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
++msgstr "ÐÐžÐ². Â«:help W16Â» ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
+ 
+ #, c-format
+ msgid "W13: Warning: File \"%s\" has been created after editing started"
+-msgstr "W13: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð€Ð°Ð¹Ð» \"%s\" Ð±ÑÐ»ÐŸ ÑÑÐ²ÐŸÑÐµÐœÐŸ Ð¿ÑÑÐ»Ñ Ð¿ÐŸÑÐ°ÑÐºÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ"
++msgstr "W13: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: Ð€Ð°Ð¹Ð» Â«%sÂ» Ð±ÑÐ»ÐŸ ÑÑÐ²ÐŸÑÐµÐœÐŸ Ð¿ÑÑÐ»Ñ Ð¿ÐŸÑÐ°ÑÐºÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ"
+ 
+ msgid "Warning"
+ msgstr "ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ"
+@@ -1910,11 +1962,11 @@
+ 
+ #, c-format
+ msgid "E462: Could not prepare for reloading \"%s\""
+-msgstr "E462: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŽÐ³ÐŸÑÑÐ²Ð°ÑÐž \"%s\" ÐŽÐ»Ñ Ð¿ÐµÑÐµÑÐžÑÐ°ÐœÐœÑ"
++msgstr "E462: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŽÐ³ÐŸÑÑÐ²Ð°ÑÐž Â«%sÂ», ÑÐŸÐ± Ð¿ÐµÑÐµÑÐžÑÐ°ÑÐž"
+ 
+ #, c-format
+ msgid "E321: Could not reload \"%s\""
+-msgstr "E321: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÐµÑÐµÑÐžÑÐ°ÑÐž \"%s\""
++msgstr "E321: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÐµÑÐµÑÐžÑÐ°ÑÐž Â«%sÂ»"
+ 
+ msgid "--Deleted--"
+ msgstr "--ÐÐœÐžÑÐµÐœÐŸ--"
+@@ -1926,7 +1978,7 @@
+ #. the group doesn't exist
+ #, c-format
+ msgid "E367: No such group: \"%s\""
+-msgstr "E367: ÐÐµÐŒÐ°Ñ ÑÐ°ÐºÐŸÑ Ð³ÑÑÐ¿Ðž: \"%s\""
++msgstr "E367: ÐÐµÐŒÐ°Ñ ÑÐ°ÐºÐŸÑ Ð³ÑÑÐ¿Ðž: Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E215: Illegal character after *: %s"
+@@ -1968,7 +2020,7 @@
+ # msgstr "E218: "
+ #, c-format
+ msgid "%s Auto commands for \"%s\""
+-msgstr "ÐÐ²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž %s ÐŽÐ»Ñ \"%s\""
++msgstr "ÐÐ²ÑÐŸÐºÐŸÐŒÐ°ÐœÐŽÐž %s ÐŽÐ»Ñ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "Executing %s"
+@@ -2067,6 +2119,12 @@
+ msgid "E232: Cannot create BalloonEval with both message and callback"
+ msgstr "E232: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ ÑÑÐ²ÐŸÑÐžÑÐž BalloonEval Ð· Ð¿ÐŸÐ²ÑÐŽÐŸÐŒÐ»ÐµÐœÐœÑÐŒ Ñ ÑÑÐœÐºÑÑÑÑ"
+ 
++msgid "E851: Failed to create a new process for the GUI"
++msgstr "E851: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ ÑÑÐ²ÐŸÑÐžÑÐž ÐœÐŸÐ²ÐžÐ¹ Ð¿ÑÐŸÑÐµÑ ÐŽÐ»Ñ GUI"
++
++msgid "E852: The child process failed to start the GUI"
++msgstr "E852: ÐÐŸÑÑÑÐœÑÐ¹ Ð¿ÑÐŸÑÐµÑ ÐœÐµ Ð·ÐŒÑÐ³ Ð·Ð°Ð¿ÑÑÑÐžÑÐž GUI"
++
+ # msgstr "E228: "
+ msgid "E229: Cannot start the GUI"
+ msgstr "E229: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°Ð¿ÑÑÑÐžÑÐž GUI"
+@@ -2074,7 +2132,7 @@
+ # msgstr "E229: "
+ #, c-format
+ msgid "E230: Cannot read from \"%s\""
+-msgstr "E230: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž Ð· \"%s\""
++msgstr "E230: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž Ð· Â«%sÂ»"
+ 
+ msgid "E665: Cannot start GUI, no valid font found"
+ msgstr "E665: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°Ð¿ÑÑÑÐžÑÐž GUI, ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ ÑÑÐžÑÑ"
+@@ -2148,7 +2206,7 @@
+ msgstr "ÐÐ°ÐŒÑÐœÐžÑÐž ÑÑÑ"
+ 
+ msgid "Vim: Received \"die\" request from session manager\n"
+-msgstr "Vim: ÐÑÑÐžÐŒÐ°Ð² Ð·Ð°Ð¿ÐžÑ \"die\" Ð²ÑÐŽ ÐŒÐµÐœÐµÐŽÐ¶ÐµÑÐ° ÑÐµÑÑÐ¹\n"
++msgstr "Vim: ÐÑÑÐžÐŒÐ°Ð² Ð·Ð°Ð¿ÐžÑ Â«dieÂ» Ð²ÑÐŽ ÐŒÐµÐœÐµÐŽÐ¶ÐµÑÐ° ÑÐµÑÑÐ¹\n"
+ 
+ msgid "Close"
+ msgstr "ÐÐ°ÐºÑÐžÑÐž"
+@@ -2199,29 +2257,12 @@
+ msgstr "&U:Ð¡ÐºÐ°ÑÑÐ²Ð°ÑÐž"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐžÑÐž ÑÑÐžÑÑ Zap '%s'"
+-
+-# msgstr "E235: "
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÐžÐºÐŸÑÐžÑÑÐ°ÑÐž ÑÑÐžÑÑ %s"
+-
+-# msgstr "E242: "
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"ÐÐŸÑÐžÐ»Ð°ÑÑÑÑÑ Ð¿ÐŸÐ²ÑÐŽÐŸÐŒÐ»ÐµÐœÐœÑ ÑÐŸÐ± Ð¿ÑÐžÐ¿ÐžÐœÐžÑÐž ÐŽÐŸÑÑÑÐœÑÐ¹ Ð¿ÑÐŸÑÐµÑ.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+-msgstr "E671: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž Ð²ÑÐºÐœÐŸ \"%s\""
++msgstr "E671: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž Ð²ÑÐºÐœÐŸ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E243: Argument not supported: \"-%s\"; Use the OLE version."
+-msgstr "E243: ÐÑÐ³ÑÐŒÐµÐœÑ ÐœÐµ Ð¿ÑÐŽÑÑÐžÐŒÑÑÑÑÑÑ: \"-%s\"; ÐºÐŸÑÐžÑÑÑÐ¹ÑÐµÑÑ Ð²ÐµÑÑÑÑÑ Ð· OLE."
++msgstr "E243: ÐÑÐ³ÑÐŒÐµÐœÑ ÐœÐµ Ð¿ÑÐŽÑÑÐžÐŒÑÑÑÑÑÑ: Â«-%sÂ»; ÐºÐŸÑÐžÑÑÑÐ¹ÑÐµÑÑ Ð²ÐµÑÑÑÑÑ Ð· OLE."
+ 
+ msgid "E672: Unable to open window inside MDI application"
+ msgstr "E672: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž Ð²ÑÐºÐœÐŸ Ð²ÑÐµÑÐµÐŽÐžÐœÑ Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐž MDI"
+@@ -2366,23 +2407,23 @@
+ 
+ #, c-format
+ msgid "E624: Can't open file \"%s\""
+-msgstr "E624: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž ÑÐ°Ð¹Ð» \"%s\""
++msgstr "E624: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž ÑÐ°Ð¹Ð» Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E457: Can't read PostScript resource file \"%s\""
+-msgstr "E457: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript \"%s\""
++msgstr "E457: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E618: file \"%s\" is not a PostScript resource file"
+-msgstr "E618: \"%s\" ÐœÐµ Ñ ÑÐ°Ð¹Ð»ÐŸÐŒ ÑÐµÑÑÑÑÑÐ² PostScript"
++msgstr "E618: Â«%sÂ» ÐœÐµ Ñ ÑÐ°Ð¹Ð»ÐŸÐŒ ÑÐµÑÑÑÑÑÐ² PostScript"
+ 
+ #, c-format
+ msgid "E619: file \"%s\" is not a supported PostScript resource file"
+-msgstr "E619: \"%s\" ÐœÐµ Ñ Ð¿ÑÐŽÑÑÐžÐŒÑÐ²Ð°ÐœÐžÐŒ ÑÐ°Ð¹Ð»ÐŸÐŒ ÑÐµÑÑÑÑÑÐ² PostScript"
++msgstr "E619: Â«%sÂ» ÐœÐµ Ñ Ð¿ÑÐŽÑÑÐžÐŒÑÐ²Ð°ÐœÐžÐŒ ÑÐ°Ð¹Ð»ÐŸÐŒ ÑÐµÑÑÑÑÑÐ² PostScript"
+ 
+ #, c-format
+ msgid "E621: \"%s\" resource file has wrong version"
+-msgstr "E621: ÐÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐ° Ð²ÐµÑÑÑÑ ÑÐ°Ð¹Ð»Ñ ÑÐµÑÑÑÑÑÐ² \"%s\""
++msgstr "E621: ÐÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐ° Ð²ÐµÑÑÑÑ ÑÐ°Ð¹Ð»Ñ ÑÐµÑÑÑÑÑÐ² Â«%sÂ»"
+ 
+ msgid "E673: Incompatible multi-byte encoding and character set."
+ msgstr "E673: ÐÐµÑÑÐŒÑÑÐœÑ Ð±Ð°Ð³Ð°ÑÐŸÐ±Ð°Ð¹ÑÐŸÐ²Ðµ ÐºÐŸÐŽÑÐ²Ð°ÐœÐœÑ Ð¹ ÐœÐ°Ð±ÑÑ ÑÐžÐŒÐ²ÐŸÐ»ÑÐ²."
+@@ -2399,21 +2440,21 @@
+ 
+ #, c-format
+ msgid "E456: Can't open file \"%s\""
+-msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž ÑÐ°Ð¹Ð» \"%s\""
++msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž ÑÐ°Ð¹Ð» Â«%sÂ»"
+ 
+ msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+-msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript \"prolog.ps\""
++msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript Â«prolog.psÂ»"
+ 
+ msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+-msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript \"cidfont.ps\""
++msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript Â«cidfont.psÂ»"
+ 
+ #, c-format
+ msgid "E456: Can't find PostScript resource file \"%s.ps\""
+-msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript \"%s.ps\""
++msgstr "E456: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» ÑÐµÑÑÑÑÑÐ² PostScript Â«%s.psÂ»"
+ 
+ #, c-format
+ msgid "E620: Unable to convert to print encoding \"%s\""
+-msgstr "E620: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÐµÑÐµÑÐ²ÐŸÑÐžÑÐž ÐŽÐŸ ÐºÐŸÐŽÑÐ²Ð°ÐœÐœÑ ÐŽÑÑÐºÑ \"%s\""
++msgstr "E620: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÐµÑÐµÑÐ²ÐŸÑÐžÑÐž ÐŽÐŸ ÐºÐŸÐŽÑÐ²Ð°ÐœÐœÑ ÐŽÑÑÐºÑ Â«%sÂ»"
+ 
+ msgid "Sending to printer..."
+ msgstr "ÐÑÐŽÑÐžÐ»Ð°ÑÑÑÑÑ ÐœÐ° Ð¿ÑÐžÐœÑÐµÑ..."
+@@ -2526,7 +2567,7 @@
+ "       g: Find this definition\n"
+ "       i: Find files #including this file\n"
+ "       s: Find this C symbol\n"
+-"       t: Find assignments to\n"
++"       t: Find this text string\n"
+ msgstr ""
+ "\n"
+ "       c: ÐÐœÐ°Ð¹ÑÐž ÑÑÐœÐºÑÑÑ, ÑÐŸ Ð²ÐžÐºÐ»ÐžÐºÐ°ÑÑÑ ÑÑ ÑÑÐœÐºÑÑÑ\n"
+@@ -2536,7 +2577,7 @@
+ "       g: ÐÐœÐ°Ð¹ÑÐž ÑÐµ Ð²ÐžÐ·ÐœÐ°ÑÐµÐœÐœÑ\n"
+ "       i: ÐÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð»Ðž, ÑÐºÑ Ð²ÐºÐ»ÑÑÐ°ÑÑÑ Ð² ÑÐµÐ±Ðµ ÑÐµÐ¹ ÑÐ°Ð¹Ð»\n"
+ "       s: ÐÐœÐ°Ð¹ÑÐž ÑÐµÐ¹ ÑÐžÐŒÐ²ÐŸÐ» C\n"
+-"       t: ÐÐœÐ°Ð¹ÑÐž Ð¿ÑÐžÑÐ²ÐŸÑÐœÐœÑ ÑÑÐŸÐŒÑ\n"
++"       t: ÐÐœÐ°Ð¹ÑÐž ÑÐµÐ¹ ÑÐµÐºÑÑ\n"
+ 
+ #, c-format
+ msgid "E625: cannot open cscope database: %s"
+@@ -2649,12 +2690,12 @@
+ msgid "not allowed in the Vim sandbox"
+ msgstr "ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ Ñ Ð¿ÑÑÐŸÑÐœÐžÑÑ Vim"
+ 
+-msgid "E836: This Vim cannot execute :python after using :py3"
+-msgstr "E836: Python: ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð²ÐžÐºÐŸÑÐžÑÑÐ°ÑÐž :py Ñ :py3 Ð² ÐŸÐŽÐœÐŸÐŒÑ ÑÐµÐ°ÐœÑÑ"
+-
+ msgid "E837: This Vim cannot execute :py3 after using :python"
+ msgstr "E837: Python: ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð²ÐžÐºÐŸÑÐžÑÑÐ°ÑÐž :py Ñ :py3 Ð² ÐŸÐŽÐœÐŸÐŒÑ ÑÐµÐ°ÐœÑÑ"
+ 
++msgid "only string keys are allowed"
++msgstr "ÐÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ ÑÑÐ»ÑÐºÐž ÑÐµÐºÑÑÐŸÐ²Ñ ÐºÐ»ÑÑÑ"
++
+ msgid ""
+ "E263: Sorry, this command is disabled, the Python library could not be "
+ "loaded."
+@@ -2662,23 +2703,28 @@
+ "E263: ÐÐžÐ±Ð°ÑÑÐµ, ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐ° Ð²ÐžÐŒÐºÐœÐµÐœÐ°, Ð±ÑÐ±Ð»ÑÐŸÑÐµÐºÐ° Python ÐœÐµ ÐŒÐŸÐ¶Ðµ Ð±ÑÑÐž "
+ "Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐµÐœÐ°."
+ 
+-msgid "can't delete OutputObject attributes"
+-msgstr "ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐžÑÐžÑÐž Ð°ÑÑÐžÐ±ÑÑÐž OutputObject"
+-
+-msgid "softspace must be an integer"
+-msgstr "softspace ÐŒÐ°Ñ Ð±ÑÑÐž ÑÑÐ»ÐžÐŒ"
++msgid "E860: Eval did not return a valid python 3 object"
++msgstr "E860: Eval ÐœÐµ Ð¿ÐŸÐ²ÐµÑÐœÑÐ² ÐŽÑÐ¹ÑÐœÐžÐ¹ ÐŸÐ±âÑÐºÑ python 3"
+ 
+-# msgstr "E180: "
+-msgid "invalid attribute"
+-msgstr "ÐœÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐžÐ¹ Ð°ÑÑÐžÐ±ÑÑ"
++msgid "E861: Failed to convert returned python 3 object to vim value"
++msgstr "E861: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÐµÑÐµÑÐ²ÐŸÑÐžÑÐž ÐŸÐ±âÑÐºÑ python 3 Ñ Ð·ÐœÐ°ÑÐµÐœÐœÑ vim"
+ 
+ #, c-format
+ msgid "<buffer object (deleted) at %p>"
+ msgstr "<ÐŸÐ±'ÑÐºÑ Ð±ÑÑÐµÑÐ° (Ð·ÐœÐžÑÐµÐœÐŸ) Ð·Ð° Ð°ÐŽÑÐµÑÐŸÑ %p>"
+ 
++msgid "E836: This Vim cannot execute :python after using :py3"
++msgstr "E836: Python: ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð²ÐžÐºÐŸÑÐžÑÑÐ°ÑÐž :py Ñ :py3 Ð² ÐŸÐŽÐœÐŸÐŒÑ ÑÐµÐ°ÐœÑÑ"
++
+ msgid "E659: Cannot invoke Python recursively"
+ msgstr "E659: ÐÐµ ÐŒÐŸÐ¶ÐœÐ° ÑÐµÐºÑÑÑÐžÐ²ÐœÐŸ Ð²ÐžÐºÐ»ÐžÐºÐ°ÑÐž Python"
+ 
++msgid "E858: Eval did not return a valid python object"
++msgstr "E858: Eval ÐœÐµ Ð¿ÐŸÐ²ÐµÑÐœÑÐ² ÐŽÑÐ¹ÑÐœÐžÐ¹ ÐŸÐ±âÑÐºÑ python"
++
++msgid "E859: Failed to convert returned python object to vim value"
++msgstr "E859: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÐµÑÐµÑÐ²ÐŸÑÐžÑÐž ÐŸÐ±âÑÐºÑ python Ñ Ð·ÐœÐ°ÑÐµÐœÐœÑ vim"
++
+ msgid "E265: $_ must be an instance of String"
+ msgstr "E265: $_ ÐŒÐ°Ñ Ð±ÑÑÐž ÐµÐºÐ·ÐµÐŒÐ¿Ð»ÑÑÐŸÐŒ String"
+ 
+@@ -2863,12 +2909,6 @@
+ msgstr ""
+ "E571: ÐÐžÐ±Ð°ÑÑÐµ, ÑÑ ÐºÐŸÐŒÐ°ÐœÐŽÐ° Ð²ÐžÐŒÐºÐœÐµÐœÐ°, Ð±ÑÐ±Ð»ÑÐŸÑÐµÐºÐ° Tcl ÐœÐµ ÐŒÐŸÐ¶Ðµ Ð±ÑÑÐž Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐµÐœÐ°."
+ 
+-msgid ""
+-"E281: TCL ERROR: exit code is not int!? Please report this to vim-dev@vim.org"
+-msgstr ""
+-"E281: ÐÐÐÐÐÐÐ TCL: ÐºÐŸÐŽ Ð²ÐžÑ
+ÐŸÐŽÑ ÐœÐµ Ñ ÑÑÐ»ÐžÐŒ!? ÐÑÐŽÑ Ð»Ð°ÑÐºÐ°, Ð¿ÐŸÐ²ÑÐŽÐŸÐŒÑÐµ Ñ vim-"
+-"dev@vim.org"
+-
+ #, c-format
+ msgid "E572: exit code %d"
+ msgstr "E572: ÐÐŸÐŽ Ð²ÐžÑ
+ÐŸÐŽÑ %d"
+@@ -2880,7 +2920,7 @@
+ msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·Ð°ÑÐµÑÑÑÑÑÐ²Ð°ÑÐž ÐœÐ°Ð·Ð²Ñ ÑÐµÑÐ²ÐµÑÐ° ÐºÐŸÐŒÐ°ÐœÐŽ"
+ 
+ msgid "E248: Failed to send command to the destination program"
+-msgstr "E248: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÑÑÐ»Ð°ÑÐž ÐºÐŸÐŒÐ°ÐœÐŽÑ ÐŽÐŸ Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐž-Ð¿ÑÐžÐ·ÐœÐ°ÑÐµÐœÐœÑ"
++msgstr "E248: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÑÑÐ»Ð°ÑÐž ÐºÐŸÐŒÐ°ÐœÐŽÑ ÐŽÐŸ Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐž-ÑÑÐ»Ñ"
+ 
+ #, c-format
+ msgid "E573: Invalid server id used: %s"
+@@ -2903,7 +2943,7 @@
+ 
+ msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
+ msgstr ""
+-"ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ² Ñ \"+ÐºÐŸÐŒÐ°ÐœÐŽÐ°\", \"-c ÐºÐŸÐŒÐ°ÐœÐŽÐ°\" Ð°Ð±ÐŸ \"--cmd ÐºÐŸÐŒÐ°ÐœÐŽÐ°\""
++"ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ² Ñ Â«+ÐºÐŸÐŒÐ°ÐœÐŽÐ°Â», Â«-c ÐºÐŸÐŒÐ°ÐœÐŽÐ°Â» Ð°Ð±ÐŸ Â«--cmd ÐºÐŸÐŒÐ°ÐœÐŽÐ°Â»"
+ 
+ # msgstr "E14: "
+ msgid "Invalid argument for"
+@@ -2946,7 +2986,7 @@
+ 
+ #, c-format
+ msgid "E282: Cannot read from \"%s\""
+-msgstr "E282: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž Ð· \"%s\""
++msgstr "E282: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž Ð· Â«%sÂ»"
+ 
+ # msgstr "E282: "
+ msgid ""
+@@ -2954,7 +2994,7 @@
+ "More info with: \"vim -h\"\n"
+ msgstr ""
+ "\n"
+-"ÐÑÐ·ÐœÐ°Ð¹ÑÐµÑÑ Ð±ÑÐ»ÑÑÐµ: \"vim -h\"\n"
++"ÐÑÐ·ÐœÐ°Ð¹ÑÐµÑÑ Ð±ÑÐ»ÑÑÐµ: Â«vim -hÂ»\n"
+ 
+ msgid "[file ..]       edit specified file(s)"
+ msgstr "[ÑÐ°Ð¹Ð» ..]       ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÑÐž Ð²ÐºÐ°Ð·Ð°ÐœÑ ÑÐ°Ð¹Ð»Ðž"
+@@ -3017,31 +3057,34 @@
+ msgstr "-unregister\t\tÐ¡ÐºÐ°ÑÑÐ²Ð°ÑÐž ÑÐµÑÑÑÑÐ°ÑÑÑ ÑÑÐŸÐ³ÐŸ gvim ÐŽÐ»Ñ OLE"
+ 
+ msgid "-g\t\t\tRun using GUI (like \"gvim\")"
+-msgstr "-g\t\t\tÐÐ°Ð¿ÑÑÑÐžÑÐž GUI (ÐœÑÐ±Ðž \"gvim\")"
++msgstr "-g\t\t\tÐÐ°Ð¿ÑÑÑÐžÑÐž GUI (ÐœÑÐ±Ðž Â«gvimÂ»)"
+ 
+ msgid "-f  or  --nofork\tForeground: Don't fork when starting GUI"
+ msgstr "-f  ÑÐž  --nofork\tÐÐµÑÐµÐŽÐœÑÐ¹ Ð¿Ð»Ð°Ðœ: ÑÑÐžÐŒÐ°ÑÐž ÑÐµÑÐŒÑÐœÐ°Ð» Ð¿ÑÑÐ»Ñ Ð·Ð°Ð¿ÑÑÐºÑ GUI"
+ 
+ msgid "-v\t\t\tVi mode (like \"vi\")"
+-msgstr "-v\t\t\tÐ ÐµÐ¶ÐžÐŒ Vi (ÐœÑÐ±Ðž \"vi\")"
++msgstr "-v\t\t\tÐ ÐµÐ¶ÐžÐŒ Vi (ÐœÑÐ±Ðž Â«viÂ»)"
+ 
+ msgid "-e\t\t\tEx mode (like \"ex\")"
+-msgstr "-e\t\t\tÐ ÐµÐ¶ÐžÐŒ Ex (ÐœÑÐ±Ðž \"ex\")"
++msgstr "-e\t\t\tÐ ÐµÐ¶ÐžÐŒ Ex (ÐœÑÐ±Ðž Â«exÂ»)"
++
++msgid "-E\t\t\tImproved Ex mode"
++msgstr "-E\t\t\tÐÐŸÐºÑÐ°ÑÐµÐœÐžÐ¹ ÑÐµÐ¶ÐžÐŒ Ex"
+ 
+ msgid "-s\t\t\tSilent (batch) mode (only for \"ex\")"
+-msgstr "-s\t\t\tÐÐŸÐ²ÑÐ°Ð·ÐœÐžÐ¹ (Ð¿Ð°ÐºÐµÑÐœÐžÐ¹) ÑÐµÐ¶ÐžÐŒ (Ð»ÐžÑÐµ ÐŽÐ»Ñ \"ex\")"
++msgstr "-s\t\t\tÐÐŸÐ²ÑÐ°Ð·ÐœÐžÐ¹ (Ð¿Ð°ÐºÐµÑÐœÐžÐ¹) ÑÐµÐ¶ÐžÐŒ (Ð»ÐžÑÐµ ÐŽÐ»Ñ Â«exÂ»)"
+ 
+ msgid "-d\t\t\tDiff mode (like \"vimdiff\")"
+-msgstr "-d\t\t\tÐ ÐµÐ¶ÐžÐŒ Ð¿ÐŸÑÑÐ²ÐœÑÐœÐœÑ (ÐœÑÐ±Ðž \"vimdiff\")"
++msgstr "-d\t\t\tÐ ÐµÐ¶ÐžÐŒ Ð¿ÐŸÑÑÐ²ÐœÑÐœÐœÑ (ÐœÑÐ±Ðž Â«vimdiffÂ»)"
+ 
+ msgid "-y\t\t\tEasy mode (like \"evim\", modeless)"
+-msgstr "-y\t\t\tÐÑÐŸÑÑÐžÐ¹ ÑÐµÐ¶ÐžÐŒ (ÐœÑÐ±Ðž \"evim\", Ð±ÐµÐ· ÑÐµÐ¶ÐžÐŒÑÐ²)"
++msgstr "-y\t\t\tÐÑÐŸÑÑÐžÐ¹ ÑÐµÐ¶ÐžÐŒ (ÐœÑÐ±Ðž Â«evimÂ», Ð±ÐµÐ· ÑÐµÐ¶ÐžÐŒÑÐ²)"
+ 
+ msgid "-R\t\t\tReadonly mode (like \"view\")"
+-msgstr "-R\t\t\tÐ ÐµÐ¶ÐžÐŒ Ð¿ÐµÑÐµÐ³Ð»ÑÐŽÑ (ÐœÑÐ±Ðž \"view\")"
++msgstr "-R\t\t\tÐ ÐµÐ¶ÐžÐŒ Ð¿ÐµÑÐµÐ³Ð»ÑÐŽÑ (ÐœÑÐ±Ðž Â«viewÂ»)"
+ 
+ msgid "-Z\t\t\tRestricted mode (like \"rvim\")"
+-msgstr "-Z\t\t\tÐÐ±ÐŒÐµÐ¶ÐµÐœÐžÐ¹ ÑÐµÐ¶ÐžÐŒ (ÐœÑÐ±Ðž \"rvim\")"
++msgstr "-Z\t\t\tÐÐ±ÐŒÐµÐ¶ÐµÐœÐžÐ¹ ÑÐµÐ¶ÐžÐŒ (ÐœÑÐ±Ðž Â«rvimÂ»)"
+ 
+ msgid "-m\t\t\tModifications (writing files) not allowed"
+ msgstr "-m\t\t\tÐÐŒÑÐœÐž (Ð·Ð°Ð¿ÐžÑ ÑÐ°Ð¹Ð»ÑÐ²) ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ"
+@@ -3266,19 +3309,6 @@
+ 
+ msgid ""
+ "\n"
+-"Arguments recognised by gvim (RISC OS version):\n"
+-msgstr ""
+-"\n"
+-"ÐÑÐ³ÑÐŒÐµÐœÑÐž gvim (Ð²ÐµÑÑÑÑ RISC OS):\n"
+-
+-msgid "--columns <number>\tInitial width of window in columns"
+-msgstr "--columns <ÐºÑÐ»ÑÐºÑÑÑÑ>\tÐÐŸÑÐ°ÑÐºÐŸÐ²Ð° ÐºÑÐ»ÑÐºÑÑÑÑ ÐºÐŸÐ»ÐŸÐœÐŸÐº Ð²ÑÐºÐœÐ°"
+-
+-msgid "--rows <number>\tInitial height of window in rows"
+-msgstr "--rows <ÐºÑÐ»ÑÐºÑÑÑÑ>\tÐÐŸÑÐ°ÑÐºÐŸÐ²Ð° ÐºÑÐ»ÑÐºÑÑÑÑ ÑÑÐŽÐºÑÐ² Ð²ÑÐºÐœÐ°"
+-
+-msgid ""
+-"\n"
+ "Arguments recognised by gvim (GTK+ version):\n"
+ msgstr ""
+ "\n"
+@@ -3294,6 +3324,9 @@
+ msgid "--socketid <xid>\tOpen Vim inside another GTK widget"
+ msgstr "--socketid <xid>\tÐÑÐŽÐºÑÐžÑÐž Vim Ð² ÑÐœÑÐŸÐŒÑ ÐµÐ»ÐµÐŒÐµÐœÑÑ ÑÐœÑÐµÑÑÐµÐ¹ÑÑ GTK"
+ 
++msgid "--echo-wid\t\tMake gvim echo the Window ID on stdout"
++msgstr "--echo-wid\t\tÐ¥Ð°Ð¹ gvim ÐœÐ°ÐŽÑÑÐºÑÑ ÑÐŽÐµÐœÑÐžÑÑÐºÐ°ÑÐŸÑ Ð²ÑÐºÐœÐ° ÐœÐ° stdout"
++
+ msgid "-P <parent title>\tOpen Vim inside parent application"
+ msgstr "-P <Ð·Ð°Ð³ÐŸÐ»ÐŸÐ²ÐŸÐº Ð±Ð°ÑÑÐºÐ°>\tÐÑÐŽÐºÑÐžÑÐž Vim Ð²ÑÐµÑÐµÐŽÐžÐœÑ Ð±Ð°ÑÑÐºÑÐ²ÑÑÐºÐŸÐ³ÐŸ Ð²ÑÐºÐœÐ°"
+ 
+@@ -3326,7 +3359,7 @@
+ 
+ #, c-format
+ msgid "E283: No marks matching \"%s\""
+-msgstr "E283: ÐÐŸÐŒÑÑÐºÑ \"%s\" ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ"
++msgstr "E283: ÐÐŸÐŒÑÑÐºÑ Â«%sÂ» ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ"
+ 
+ # msgstr "E283: "
+ #. Highlight title
+@@ -3355,7 +3388,6 @@
+ "Ð·ÐŒÑÐœÐžÑÐž ÑÑÐŽ. ÑÑÐŸÐ²Ð¿. ÑÐµÐºÑÑ"
+ 
+ # TODO
+-#, c-format
+ msgid ""
+ "\n"
+ "# File marks:\n"
+@@ -3364,7 +3396,6 @@
+ "# ÐÐŸÐŒÑÑÐºÐž:\n"
+ 
+ #. Write the jumplist with -'
+-#, c-format
+ msgid ""
+ "\n"
+ "# Jumplist (newest first):\n"
+@@ -3373,7 +3404,6 @@
+ "# Ð¡Ð¿ÐžÑÐŸÐº Ð¿ÐµÑÐµÑ
+ÐŸÐŽÑÐ² (Ð²ÑÐŽ ÐœÐ°Ð¹ÐœÐŸÐ²ÑÑÐžÑ
+):\n"
+ 
+ # TODO
+-#, c-format
+ msgid ""
+ "\n"
+ "# History of marks within files (newest to oldest):\n"
+@@ -3439,6 +3469,9 @@
+ msgid "E298: Didn't get block nr 2?"
+ msgstr "E298: ÐÐµÐŒÐ°Ñ Ð±Ð»ÐŸÐºÑ 2?"
+ 
++msgid "E843: Error while updating swap file crypt"
++msgstr "E843: ÐÐŸÐŒÐžÐ»ÐºÐ° Ð¿ÐŸÐœÐŸÐ²Ð»ÐµÐœÐœÑ ÑÐžÑÑÑÐ²Ð°ÐœÐœÑ ÑÐ°Ð¹Ð»Ñ ÐŸÐ±ÐŒÑÐœÑ"
++
+ #. could not (re)open the swap file, what can we do????
+ msgid "E301: Oops, lost the swap file!!!"
+ msgstr "E301: ÐÐ¹, Ð²ÑÑÐ°ÑÐµÐœÐŸ ÑÐ°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ!!!"
+@@ -3451,7 +3484,7 @@
+ #, c-format
+ msgid "E303: Unable to open swap file for \"%s\", recovery impossible"
+ msgstr ""
+-"E303: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž ÑÐ°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ ÐŽÐ»Ñ \"%s\", Ð²ÑÐŽÐœÐŸÐ²Ð»ÐµÐœÐœÑ ÐœÐµÐŒÐŸÐ¶Ð»ÐžÐ²Ðµ"
++"E303: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÑÐŸÑÐžÑÐ°ÑÐž ÑÐ°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ ÐŽÐ»Ñ Â«%sÂ», Ð²ÑÐŽÐœÐŸÐ²Ð»ÐµÐœÐœÑ ÐœÐµÐŒÐŸÐ¶Ð»ÐžÐ²Ðµ"
+ 
+ msgid "E304: ml_upd_block0(): Didn't get block 0??"
+ msgstr "E304: ml_upd_block0(): ÐÐµÐŒÐ°Ñ Ð±Ð»ÐŸÐºÑ 0??"
+@@ -3511,18 +3544,18 @@
+ 
+ #, c-format
+ msgid "Using swap file \"%s\""
+-msgstr "ÐÐžÐºÐŸÑÐžÑÑÐŸÐ²ÑÑÑÑÑÑ ÑÐ°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ \"%s\""
++msgstr "ÐÐžÐºÐŸÑÐžÑÑÐŸÐ²ÑÑÑÑÑÑ ÑÐ°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "Original file \"%s\""
+-msgstr "ÐÐŸÑÐ°ÑÐºÐŸÐ²ÐžÐ¹ ÑÐ°Ð¹Ð» \"%s\""
++msgstr "ÐÐŸÑÐ°ÑÐºÐŸÐ²ÐžÐ¹ ÑÐ°Ð¹Ð» Â«%sÂ»"
+ 
+ msgid "E308: Warning: Original file may have been changed"
+ msgstr "E308: ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: ÐÐŸÐ¶Ð»ÐžÐ²ÐŸ, Ð¿ÐŸÑÐ°ÑÐºÐŸÐ²ÐžÐ¹ ÑÐ°Ð¹Ð» Ð±ÑÐ»ÐŸ Ð·ÐŒÑÐœÐµÐœÐŸ"
+ 
+ #, c-format
+ msgid "Swap file is encrypted: \"%s\""
+-msgstr "Ð€Ð°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ Ð·Ð°ÑÐžÑÑÐŸÐ²Ð°ÐœÐžÐ¹: \"%s\""
++msgstr "Ð€Ð°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ Ð·Ð°ÑÐžÑÑÐŸÐ²Ð°ÐœÐžÐ¹: Â«%sÂ»"
+ 
+ msgid ""
+ "\n"
+@@ -3597,7 +3630,7 @@
+ "Ð¿ÐŸÑÐžÐœÐ°ÑÑÑÑÑ Ð· ???"
+ 
+ msgid "See \":help E312\" for more information."
+-msgstr "ÐÐžÐ². \":help E312\" ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
++msgstr "ÐÐžÐ². Â«:help E312Â» ÐŽÐ»Ñ ÑÑÐŸÑÐœÐµÐœÐœÑ."
+ 
+ msgid "Recovery completed. You should check if everything is OK."
+ msgstr "ÐÑÐŽÐœÐŸÐ²Ð»ÐµÐœÐœÑ Ð·Ð°ÐºÑÐœÑÐµÐœÐŸ, Ð¿ÐµÑÐµÐ²ÑÑÑÐµ ÑÐž Ð²ÑÐµ Ð³Ð°ÑÐ°Ð·ÐŽ."
+@@ -3787,7 +3820,7 @@
+ 
+ #, c-format
+ msgid "E773: Symlink loop for \"%s\""
+-msgstr "E773: ÐŠÐžÐºÐ»ÑÑÐœÑ ÑÐžÐŒÐ²ÐŸÐ»ÑÐœÑ Ð¿ÐŸÑÐžÐ»Ð°ÐœÐœÑ \"%s\""
++msgstr "E773: ÐŠÐžÐºÐ»ÑÑÐœÑ ÑÐžÐŒÐ²ÐŸÐ»ÑÐœÑ Ð¿ÐŸÑÐžÐ»Ð°ÐœÐœÑ Â«%sÂ»"
+ 
+ # msgstr "E317: "
+ msgid "E325: ATTENTION"
+@@ -3810,54 +3843,50 @@
+ #. * other languages.
+ msgid ""
+ "\n"
+-"(1) Another program may be editing the same file.\n"
+-"    If this is the case, be careful not to end up with two\n"
+-"    different instances of the same file when making changes.\n"
++"(1) Another program may be editing the same file.  If this is the case,\n"
++"    be careful not to end up with two different instances of the same\n"
++"    file when making changes."
+ msgstr ""
+ "\n"
+-"(1) ÐÐŸÐ¶Ð»ÐžÐ²ÐŸ, ÑÐœÑÐ° Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐ° Ð²Ð¶Ðµ ÑÐµÐŽÐ°Ð³ÑÑ ÑÐµÐ¹ ÑÐ°ÐŒÐžÐ¹ ÑÐ°Ð¹Ð».\n"
+-"    ÐÑÐŽÑÑÐµ ÐŸÐ±ÐµÑÐµÐ¶ÐœÑ, ÑÐŸÐ± ÐœÐµ Ð·Ð°Ð»ÐžÑÐžÐ»ÐžÑÑ ÐŽÐ²Ð° ÑÑÐ·ÐœÑ ÐµÐºÐ·ÐµÐŒÐ¿Ð»ÑÑÐž\n"
+-"    ÐŸÐŽÐœÐŸÐ³ÐŸ Ð¹ ÑÐŸÐ³ÐŸ ÑÐ°ÐŒÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ñ Ð¿ÑÑÐ»Ñ Ð·ÐŒÑÐœ.\n"
++"(1) ÐÐŸÐ¶Ð»ÐžÐ²ÐŸ, ÑÐœÑÐ° Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐ° Ð²Ð¶Ðµ ÑÐµÐŽÐ°Ð³ÑÑ ÑÐµÐ¹ ÑÐ°ÐŒÐžÐ¹ ÑÐ°Ð¹Ð». Ð¯ÐºÑÐŸ ÑÐµ ÑÐ°Ðº,\n"
++"    Ð±ÑÐŽÑÑÐµ ÐŸÐ±ÐµÑÐµÐ¶ÐœÑ, ÑÐŸÐ± ÐœÐµ Ð·Ð°Ð»ÐžÑÐžÐ»ÐžÑÑ ÐŽÐ²Ð° ÑÑÐ·ÐœÑ ÐµÐºÐ·ÐµÐŒÐ¿Ð»ÑÑÐž\n"
++"    ÐŸÐŽÐœÐŸÐ³ÐŸ Ð¹ ÑÐŸÐ³ÐŸ ÑÐ°ÐŒÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ñ Ð¿ÑÑÐ»Ñ Ð·ÐŒÑÐœ."
+ 
+-msgid "    Quit, or continue with caution.\n"
+-msgstr "    ÐÐžÐ¹ÐŽÑÑÑ, Ð°Ð±ÐŸ Ð¿ÑÐŸÐŽÐŸÐ²Ð¶ÑÐ¹ÑÐµ ÐŸÐ±ÐµÑÐµÐ¶ÐœÐŸ.\n"
++msgid "  Quit, or continue with caution.\n"
++msgstr "  ÐÐžÐ¹ÐŽÑÑÑ Ð°Ð±ÐŸ Ð¿ÑÐŸÐŽÐŸÐ²Ð¶ÑÐ¹ÑÐµ ÐŸÐ±ÐµÑÐµÐ¶ÐœÐŸ.\n"
+ 
+-msgid ""
+-"\n"
+-"(2) An edit session for this file crashed.\n"
+-msgstr ""
+-"\n"
+-"(2) Ð¡ÐµÐ°ÐœÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ ÑÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ñ Ð·Ð°Ð·ÐœÐ°Ð² ÐºÑÐ°Ñ
+Ñ.\n"
++msgid "(2) An edit session for this file crashed.\n"
++msgstr "(2) Ð¡ÐµÐ°ÐœÑ ÑÐµÐŽÐ°Ð³ÑÐ²Ð°ÐœÐœÑ ÑÑÐŸÐ³ÐŸ ÑÐ°Ð¹Ð»Ñ Ð·Ð°Ð·ÐœÐ°Ð² ÐºÑÐ°Ñ
+Ñ.\n"
+ 
+ msgid "    If this is the case, use \":recover\" or \"vim -r "
+-msgstr "    Ð¯ÐºÑÐŸ ÑÐµ ÑÐ¿ÑÐ°Ð²ÐŽÑ ÑÑÐ°Ð¿ÐžÐ»ÐŸÑÑ, ÑÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ \":recover\" Ð°Ð±ÐŸ \"vim -r "
++msgstr "    Ð¯ÐºÑÐŸ ÑÐµ ÑÐ¿ÑÐ°Ð²ÐŽÑ ÑÑÐ°Ð¿ÐžÐ»ÐŸÑÑ, ÑÐ¿ÑÐŸÐ±ÑÐ¹ÑÐµ Â«:recoverÂ» Ð°Ð±ÐŸ Â«vim -r "
+ 
+ msgid ""
+ "\"\n"
+ "    to recover the changes (see \":help recovery\").\n"
+ msgstr ""
+-"\"\n"
+-"    ÑÐŸÐ± Ð²ÑÐŽÐœÐŸÐ²ÐžÑÐž Ð·ÐŒÑÐœÐž (ÐŽÐžÐ². \":help recovery\").\n"
++"Â»\n"
++"    ÑÐŸÐ± Ð²ÑÐŽÐœÐŸÐ²ÐžÑÐž Ð·ÐŒÑÐœÐž (ÐŽÐžÐ². Â«:help recoveryÂ»).\n"
+ 
+ msgid "    If you did this already, delete the swap file \""
+-msgstr "    Ð¯ÐºÑÐŸ Ð²Ðž Ð²Ð¶Ðµ ÑÐµ Ð·ÑÐŸÐ±ÐžÐ»Ðž, Ð·ÐœÐžÑÑÑÑ ÑÐ°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ \""
++msgstr "    Ð¯ÐºÑÐŸ Ð²Ðž Ð²Ð¶Ðµ ÑÐµ Ð·ÑÐŸÐ±ÐžÐ»Ðž, Ð·ÐœÐžÑÑÑÑ ÑÐ°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ Â«"
+ 
+ msgid ""
+ "\"\n"
+ "    to avoid this message.\n"
+ msgstr ""
+-"\"\n"
++"Â»,\n"
+ "    ÑÐŸÐ± Ð¿ÐŸÐ·Ð±ÑÑÐžÑÑ ÑÑÐŸÐ³ÐŸ Ð¿ÐŸÐ²ÑÐŽÐŸÐŒÐ»ÐµÐœÐœÑ.\n"
+ "\n"
+ 
+ msgid "Swap file \""
+-msgstr "Ð€Ð°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ \""
++msgstr "Ð€Ð°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ Â«"
+ 
+ msgid "\" already exists!"
+-msgstr "\" Ð²Ð¶Ðµ ÑÑÐœÑÑ!"
++msgstr "Â» Ð²Ð¶Ðµ ÑÑÐœÑÑ!"
+ 
+ msgid "VIM - ATTENTION"
+-msgstr "VIM -- Ð£ÐÐÐÐ"
++msgstr "VIM â Ð£ÐÐÐÐ"
+ 
+ msgid "Swap file already exists!"
+ msgstr "Ð€Ð°Ð¹Ð» ÐŸÐ±ÐŒÑÐœÑ Ð²Ð¶Ðµ ÑÑÐœÑÑ!"
+@@ -3904,7 +3933,7 @@
+ # msgstr "E328: "
+ #, c-format
+ msgid "E329: No menu \"%s\""
+-msgstr "E329: ÐÐµÐŒÐ°Ñ ÐŒÐµÐœÑ \"%s\""
++msgstr "E329: ÐÐµÐŒÐ°Ñ ÐŒÐµÐœÑ Â«%sÂ»"
+ 
+ #. Only a mnemonic or accelerator is not valid.
+ msgid "E792: Empty menu name"
+@@ -3954,7 +3983,7 @@
+ 
+ # msgstr "E336: "
+ msgid "E337: Menu not found - check menu names"
+-msgstr "E337: ÐÐµÐœÑ ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ -- Ð¿ÐµÑÐµÐ²ÑÑÑÐµ ÐœÐ°Ð·Ð²Ñ"
++msgstr "E337: ÐÐµÐœÑ ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ â Ð¿ÐµÑÐµÐ²ÑÑÑÐµ ÐœÐ°Ð·Ð²Ñ"
+ 
+ # msgstr "E337: "
+ #, c-format
+@@ -4070,7 +4099,6 @@
+ msgid "Vim: Finished.\n"
+ msgstr "Vim: ÐÐ°Ð²ÐµÑÑÐµÐœÐŸ.\n"
+ 
+-#, c-format
+ msgid "ERROR: "
+ msgstr "ÐÐÐÐÐÐÐ: "
+ 
+@@ -4106,7 +4134,7 @@
+ # msgstr "E342: "
+ #, c-format
+ msgid "Calling shell to execute: \"%s\""
+-msgstr "ÐÐžÐºÐ»ÐžÐºÐ°ÑÑÑÑÑ ÐŸÐ±ÐŸÐ»ÐŸÐœÐºÐ° ÑÐŸÐ± Ð²ÐžÐºÐŸÐœÐ°ÑÐž: \"%s\""
++msgstr "ÐÐžÐºÐ»ÐžÐºÐ°ÑÑÑÑÑ ÐŸÐ±ÐŸÐ»ÐŸÐœÐºÐ° ÑÐŸÐ± Ð²ÐžÐºÐŸÐœÐ°ÑÐž: Â«%sÂ»"
+ 
+ msgid "E545: Missing colon"
+ msgstr "E545: ÐÑÐŸÐ¿ÑÑÐµÐœÐŸ ÐŽÐ²ÐŸÐºÑÐ°Ð¿ÐºÑ"
+@@ -4132,6 +4160,9 @@
+ msgid "Keys don't match!"
+ msgstr "ÐÐ»ÑÑÑ ÐœÐµ ÐŸÐŽÐœÐ°ÐºÐŸÐ²Ñ!"
+ 
++msgid "E854: path too long for completion"
++msgstr "E854: ÑÐ»ÑÑ
+ Ð·Ð°ÐœÐ°ÐŽÑÐŸ ÐŽÐŸÐ²Ð³ÐžÐ¹ ÐŽÐ»Ñ ÐŽÐŸÐ¿ÐŸÐ²ÐœÐµÐœÐœÑ"
++
+ #, c-format
+ msgid ""
+ "E343: Invalid path: '**[number]' must be at the end of the path or be "
+@@ -4143,22 +4174,22 @@
+ # msgstr "E343: "
+ #, c-format
+ msgid "E344: Can't find directory \"%s\" in cdpath"
+-msgstr "E344: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÐºÐ°ÑÐ°Ð»ÐŸÐ³ \"%s\" Ñ cdpath"
++msgstr "E344: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÐºÐ°ÑÐ°Ð»ÐŸÐ³ Â«%sÂ» Ñ cdpath"
+ 
+ # msgstr "E344: "
+ #, c-format
+ msgid "E345: Can't find file \"%s\" in path"
+-msgstr "E345: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» \"%s\" Ñ path"
++msgstr "E345: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ°Ð¹Ð» Â«%sÂ» Ñ path"
+ 
+ # msgstr "E345: "
+ #, c-format
+ msgid "E346: No more directory \"%s\" found in cdpath"
+-msgstr "E346: Ð£ cdpath ÐœÐµÐŒÐ°Ñ Ð±ÑÐ»ÑÑÐµ ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ñ \"%s\""
++msgstr "E346: Ð£ cdpath ÐœÐµÐŒÐ°Ñ Ð±ÑÐ»ÑÑÐµ ÐºÐ°ÑÐ°Ð»ÐŸÐ³Ñ Â«%sÂ»"
+ 
+ # msgstr "E346: "
+ #, c-format
+ msgid "E347: No more file \"%s\" found in path"
+-msgstr "E347: Ð£ ÑÐ»ÑÑ
+Ñ Ð¿ÐŸÑÑÐºÑ Ð±ÑÐ»ÑÑÐµ ÐœÐµÐŒÐ°Ñ ÑÐ°Ð¹Ð»ÑÐ² \"%s\""
++msgstr "E347: Ð£ ÑÐ»ÑÑ
+Ñ Ð¿ÐŸÑÑÐºÑ Ð±ÑÐ»ÑÑÐµ ÐœÐµÐŒÐ°Ñ ÑÐ°Ð¹Ð»ÑÐ² Â«%sÂ»"
+ 
+ msgid "Cannot connect to Netbeans #2"
+ msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·'ÑÐŽÐœÐ°ÑÐžÑÑ ÑÐ· Netbeans #2"
+@@ -4170,7 +4201,7 @@
+ msgid "E668: Wrong access mode for NetBeans connection info file: \"%s\""
+ msgstr ""
+ "E668: ÐÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐžÐ¹ ÑÐµÐ¶ÐžÐŒ ÐŽÐŸÑÑÑÐ¿Ñ ÐŽÐŸ ÑÐ°Ð¹Ð»Ñ ÑÐœÑÐŸÑÐŒÐ°ÑÑÑ Ð¿ÑÐŸ Ð·'ÑÐŽÐœÐ°ÐœÐœÑ Ð· "
+-"NetBenans: \"%s\""
++"NetBenans: Â«%sÂ»"
+ 
+ msgid "read from Netbeans socket"
+ msgstr "ÑÐžÑÐ°ÑÑÑÑÑ Ð· ÑÐŸÐºÐµÑÐ° Netbeans"
+@@ -4179,11 +4210,15 @@
+ msgid "E658: NetBeans connection lost for buffer %ld"
+ msgstr "E658: ÐÑÑÐ°ÑÐµÐœÐŸ Ð·Ð²'ÑÐ·ÐŸÐº ÑÐ· NetBeans ÐŽÐ»Ñ Ð±ÑÑÐµÑÐ° %ld"
+ 
++msgid "E838: netbeans is not supported with this GUI"
++msgstr "E838: netbeans ÐœÐµ Ð¿ÑÐŽÑÑÐžÐŒÑÑÑÑÑÑ Ð· ÑÐžÐŒ GUI"
++
+ msgid "E511: netbeans already connected"
+ msgstr "E511: netbeans Ð²Ð¶Ðµ Ð¿ÑÐŽ'ÑÐŽÐœÐ°ÐœÐŸ"
+ 
+-msgid "E505: "
+-msgstr "E505: "
++#, c-format
++msgid "E505: %s is read-only (add ! to override)"
++msgstr "E505: %s ÑÑÐ»ÑÐºÐž ÐŽÐ»Ñ ÑÐžÑÐ°ÐœÐœÑ (! ÑÐŸÐ± ÐœÐµ Ð·Ð²Ð°Ð¶Ð°ÑÐž)"
+ 
+ # msgstr "E348: "
+ msgid "E349: No identifier under cursor"
+@@ -4327,8 +4362,8 @@
+ "Col %s of %s; Line %ld of %ld; Word %ld of %ld; Char %ld of %ld; Byte %ld of "
+ "%ld"
+ msgstr ""
+-"ÐÐŸÐ»ÐŸÐœÐºÐ° %s Ð· %s; ÑÑÐŽÐŸÐº %ld Ð· %ld; ÑÐ»ÐŸÐ²ÐŸ %ld Ð· %ld; ÑÐžÐŒÐ²ÐŸÐ» %ld of %ld; Ð±Ð°Ð¹Ñ %"
+-"ld Ð· %ld"
++"ÐÐŸÐ»ÐŸÐœÐºÐ° %s Ð· %s; ÑÑÐŽÐŸÐº %ld Ð· %ld; ÑÐ»ÐŸÐ²ÐŸ %ld Ð· %ld; ÑÐžÐŒÐ²ÐŸÐ» %ld of %ld; Ð±Ð°Ð¹Ñ "
++"%ld Ð· %ld"
+ 
+ #, c-format
+ msgid "(+%ld for BOM)"
+@@ -4349,6 +4384,9 @@
+ msgid "E520: Not allowed in a modeline"
+ msgstr "E520: ÐÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ Ñ modeline"
+ 
++msgid "E846: Key code not set"
++msgstr "E846: ÐÐŸÐŽ ÐºÐ»ÑÑÐ° ÐœÐµ Ð²ÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœÐŸ"
++
+ msgid "E521: Number required after ="
+ msgstr "E521: ÐÑÑÐ»Ñ = Ð¿ÐŸÑÑÑÐ±ÐœÐŸ Ð²ÐºÐ°Ð·Ð°ÑÐž ÑÐžÑÐ»ÐŸ"
+ 
+@@ -4366,7 +4404,7 @@
+ msgstr "E530: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐŒÑÐœÐžÑÐž term Ð² GUI"
+ 
+ msgid "E531: Use \":gui\" to start the GUI"
+-msgstr "E531: ÐÐ°ÑÑÐŸÑÑÐ¹ÑÐµ \":gui\" ÐŽÐ»Ñ Ð·Ð°Ð¿ÑÑÐºÑ GUI"
++msgstr "E531: ÐÐ°ÑÑÐŸÑÑÐ¹ÑÐµ Â«:guiÂ» ÐŽÐ»Ñ Ð·Ð°Ð¿ÑÑÐºÑ GUI"
+ 
+ msgid "E589: 'backupext' and 'patchmode' are equal"
+ msgstr "E589: ÐÐ¿ÑÑÑ 'backupext' Ñ 'patchmode' ÐŸÐŽÐœÐ°ÐºÐŸÐ²Ñ"
+@@ -4584,16 +4622,12 @@
+ 
+ #, c-format
+ msgid "E244: Illegal charset name \"%s\" in font name \"%s\""
+-msgstr "E244: ÐÐµÐºÐŸÑÐµÐºÑÐœÐ° ÐœÐ°Ð·Ð²Ð° ÐœÐ°Ð±ÐŸÑÑ ÑÐžÐŒÐ²ÐŸÐ»ÑÐ² \"%s\" Ñ ÐœÐ°Ð·Ð²Ñ ÑÑÐžÑÑÑ \"%s\""
++msgstr "E244: ÐÐµÐºÐŸÑÐµÐºÑÐœÐ° ÐœÐ°Ð·Ð²Ð° ÐœÐ°Ð±ÐŸÑÑ ÑÐžÐŒÐ²ÐŸÐ»ÑÐ² Â«%sÂ» Ñ ÐœÐ°Ð·Ð²Ñ ÑÑÐžÑÑÑ Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+-msgstr "E245: ÐÐŸÐŒÐžÐ»ÐºÐŸÐ²ÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ» %c Ð² ÐœÐ°Ð·Ð²Ñ ÑÑÐžÑÑÑ \"%s\""
++msgstr "E245: ÐÐŸÐŒÐžÐ»ÐºÐŸÐ²ÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ» %c Ð² ÐœÐ°Ð·Ð²Ñ ÑÑÐžÑÑÑ Â«%sÂ»"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: ÐÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐ° ÐŸÐ¿ÑÑÑ 'osfiletype' -- Ð±ÑÐŽÐµ `Text'"
+-
+-# msgstr "E366: "
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: ÐÐ²ÑÑÑ ÐŸÑÑÐžÐŒÐ°ÐœÐŸ ÑÐžÐ³ÐœÐ°Ð», Ð²ÐžÑ
+ÑÐŽ\n"
+ 
+@@ -4684,7 +4718,7 @@
+ 
+ #, c-format
+ msgid "dlerror = \"%s\""
+-msgstr "dlerror = \"%s\""
++msgstr "dlerror = Â«%sÂ»"
+ 
+ msgid "Opening the X display failed"
+ msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž ÐŽÐžÑÐ¿Ð»ÐµÐ¹ X"
+@@ -4815,7 +4849,7 @@
+ 
+ #, c-format
+ msgid "Cannot open file \"%s\""
+-msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž ÑÐ°Ð¹Ð» \"%s\""
++msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÑÐŽÐºÑÐžÑÐž ÑÐ°Ð¹Ð» Â«%sÂ»"
+ 
+ msgid "E681: Buffer is not loaded"
+ msgstr "E681: ÐÑÑÐµÑ ÐœÐµ Ð·Ð°Ð²Ð°ÐœÑÐ°Ð¶ÐµÐœÐŸ"
+@@ -5075,13 +5109,17 @@
+ msgstr "E756: ÐÐµÑÐµÐ²ÑÑÐºÐ° ÐŸÑÑÐŸÐ³ÑÐ°ÑÑÑ ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐ°"
+ 
+ #, c-format
++msgid "Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""
++msgstr "ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ¿ÐžÑÐŸÐº ÑÐ»ÑÐ² Â«%s_%s.splÂ» ÑÐž Â«%s_ascii.splÂ»"
++
++#, c-format
+ msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+ msgstr ""
+-"ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ¿ÐžÑÐŸÐº ÑÐ»ÑÐ² \"%s.%s.spl\" ÑÐž \"%s.ascii.spl\""
++"ÐÐ°ÑÑÐµÑÐµÐ¶ÐµÐœÐœÑ: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž ÑÐ¿ÐžÑÐŸÐº ÑÐ»ÑÐ² Â«%s.%s.splÂ» ÑÐž Â«%s.ascii.splÂ»"
+ 
+ #, c-format
+ msgid "Reading spell file \"%s\""
+-msgstr "Ð§ÐžÑÐ°ÑÑÑÑÑ ÑÐ°Ð¹Ð» ÐŸÑÑÐŸÐ³ÑÐ°ÑÑÑ \"%s\""
++msgstr "Ð§ÐžÑÐ°ÑÑÑÑÑ ÑÐ°Ð¹Ð» ÐŸÑÑÐŸÐ³ÑÐ°ÑÑÑ Â«%sÂ»"
+ 
+ msgid "E757: This does not look like a spell file"
+ msgstr "E757: ÐÐµ ÑÑ
+ÐŸÐ¶Ðµ ÐœÐ° ÑÐ°Ð¹Ð» ÐŸÑÑÐŸÐ³ÑÐ°ÑÑÑ"
+@@ -5300,6 +5338,9 @@
+ msgid "Ignored %d words with non-ASCII characters"
+ msgstr "ÐÑÐŸÑÐ³ÐœÐŸÑÐŸÐ²Ð°ÐœÐŸ %d ÑÐ»ÑÐ² ÑÐ· ÐœÐµ-ASCII ÑÐžÐŒÐ²ÐŸÐ»Ð°ÐŒÐž"
+ 
++msgid "E845: Insufficient memory, word list will be incomplete"
++msgstr "E845: ÐÐµÐŽÐŸÑÑÐ°ÑÐœÑÐŸ Ð¿Ð°ÐŒâÑÑÑ, ÑÐ¿ÐžÑÐŸÐº ÑÐ»ÑÐ² Ð±ÑÐŽÐµ ÐœÐµÐ¿ÐŸÐ²ÐœÐžÐŒ"
++
+ #, c-format
+ msgid "Compressed %d of %d nodes; %d (%d%%) remaining"
+ msgstr "Ð¡ÑÐžÑÐœÐµÐœÐŸ %d Ð· %d Ð²ÑÐ·Ð»ÑÐ²; Ð·Ð°Ð»ÐžÑÐžÐ»ÐŸÑÑ %d (%d%%)"
+@@ -5376,11 +5417,11 @@
+ #. avoid more prompt
+ #, c-format
+ msgid "Change \"%.*s\" to:"
+-msgstr "ÐÐ°ÐŒÑÐœÐžÑÐž \"%.*s\" ÐœÐ°:"
++msgstr "ÐÐ°ÐŒÑÐœÐžÑÐž Â«%.*sÂ» ÐœÐ°:"
+ 
+ #, c-format
+ msgid " < \"%.*s\""
+-msgstr " < \"%.*s\""
++msgstr " < Â«%.*sÂ»"
+ 
+ # msgstr "E34: "
+ msgid "E752: No previous spell replacement"
+@@ -5480,6 +5521,10 @@
+ msgid "E395: contains argument not accepted here"
+ msgstr "E395: ÐÑÑÑÐžÑÑ ÐœÐµÐ¿ÑÐžÐ¹ÐœÑÑÐœÑ ÑÑÑ Ð°ÑÐ³ÑÐŒÐµÐœÑÐž"
+ 
++# msgstr "E14: "
++msgid "E844: invalid cchar value"
++msgstr "E844: ÐÐµÐºÐŸÑÐµÐºÑÐœÐµ Ð·ÐœÐ°ÑÐµÐœÐœÑ cchar"
++
+ msgid "E393: group[t]here not accepted here"
+ msgstr "E393: group[t]hete ÑÑÑ ÐœÐµÐ¿ÑÐžÐ¹ÐœÑÑÐœÐžÐ¹"
+ 
+@@ -5491,6 +5536,9 @@
+ msgid "E397: Filename required"
+ msgstr "E397: ÐÐŸÑÑÑÐ±ÐœÐ° ÐœÐ°Ð·Ð²Ð° ÑÐ°Ð¹Ð»Ñ"
+ 
++msgid "E847: Too many syntax includes"
++msgstr "E847: ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ ÑÐžÐœÑÐ°ÐºÑÐžÑÐœÐžÑ
+ Ð²ÐºÐ»ÑÑÐµÐœÑ"
++
+ #, c-format
+ msgid "E789: Missing ']': %s"
+ msgstr "E789: ÐÑÐŸÐ¿ÑÑÐµÐœÐŸ ']': %s"
+@@ -5504,6 +5552,9 @@
+ msgid "E399: Not enough arguments: syntax region %s"
+ msgstr "E399: ÐÑÐ°ÐºÑÑ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ²: ÑÐžÐœÑÐ°ÐºÑÐžÑÐœÐžÐ¹ ÑÐµÐ³ÑÐŸÐœ %s"
+ 
++msgid "E848: Too many syntax clusters"
++msgstr "E848: ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ ÑÐžÐœÑÐ°ÐºÑÐžÑÐœÐžÑ
+ ÐºÐ»Ð°ÑÑÐµÑÑÐ²"
++
+ msgid "E400: No cluster specified"
+ msgstr "E400: ÐÐ»Ð°ÑÑÐµÑ ÐœÐµ Ð²ÐºÐ°Ð·Ð°ÐœÐŸ"
+ 
+@@ -5563,12 +5614,12 @@
+ # msgstr "E411: "
+ #, c-format
+ msgid "E412: Not enough arguments: \":highlight link %s\""
+-msgstr "E412: ÐÐµÐŽÐŸÑÑÐ°ÑÐœÑÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ²: \":highlight link %s\""
++msgstr "E412: ÐÐµÐŽÐŸÑÑÐ°ÑÐœÑÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ²: Â«:highlight link %sÂ»"
+ 
+ # msgstr "E412: "
+ #, c-format
+ msgid "E413: Too many arguments: \":highlight link %s\""
+-msgstr "E413: ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ²: \":highlight link %s\""
++msgstr "E413: ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ Ð°ÑÐ³ÑÐŒÐµÐœÑÑÐ²: Â«:highlight link %sÂ»"
+ 
+ # msgstr "E413: "
+ msgid "E414: group has settings, highlight link ignored"
+@@ -5626,6 +5677,9 @@
+ msgid "W18: Invalid character in group name"
+ msgstr "W18: ÐÐµÐºÐŸÑÐµÐºÑÐœÐžÐ¹ ÑÐžÐŒÐ²ÐŸÐ» Ñ ÐœÐ°Ð·Ð²Ñ Ð³ÑÑÐ¿Ðž"
+ 
++msgid "E849: Too many highlight and syntax groups"
++msgstr "E849: ÐÐ°Ð±Ð°Ð³Ð°ÑÐŸ Ð³ÑÑÐ¿ Ð¿ÑÐŽÑÐ²ÑÑÑÐ²Ð°ÐœÐœÑ Ñ ÑÐžÐœÑÐ°ÐºÑÐžÑÑ"
++
+ # msgstr "E424: "
+ msgid "E555: at bottom of tag stack"
+ msgstr "E555: ÐÑÐœÐµÑÑ ÑÑÐµÐºÑ ÑÐµÒÑÐ²"
+@@ -5643,13 +5697,13 @@
+ 
+ # msgstr "E426: "
+ msgid "  # pri kind tag"
+-msgstr "  # Ð¿ÑÑ ÑÐžÐ¿  ÑÐµÒ"
++msgstr "  # Ð¿ÑÑ ÑÐžÐ¿ ÑÐµÒ"
+ 
+ msgid "file\n"
+ msgstr "ÑÐ°Ð¹Ð»\n"
+ 
+ msgid "E427: There is only one matching tag"
+-msgstr "E427: ÐÐžÑÐµ ÐŸÐŽÐœÐžÐœ Ð²ÑÐŽÐ¿ÐŸÐ²ÑÐŽÐœÐžÐ¹ ÑÐµÒ"
++msgstr "E427: ÐÐžÑÐµ ÐŸÐŽÐžÐœ Ð²ÑÐŽÐ¿ÐŸÐ²ÑÐŽÐœÐžÐ¹ ÑÐµÒ"
+ 
+ # msgstr "E427: "
+ msgid "E428: Cannot go beyond last matching tag"
+@@ -5658,7 +5712,7 @@
+ # msgstr "E428: "
+ #, c-format
+ msgid "File \"%s\" does not exist"
+-msgstr "Ð€Ð°Ð¹Ð» \"%s\" ÐœÐµ ÑÑÐœÑÑ"
++msgstr "Ð€Ð°Ð¹Ð» Â«%sÂ» ÐœÐµ ÑÑÐœÑÑ"
+ 
+ #. Give an indication of the number of matching tags
+ #, c-format
+@@ -5673,7 +5727,7 @@
+ 
+ #, c-format
+ msgid "E429: File \"%s\" does not exist"
+-msgstr "E429: Ð€Ð°Ð¹Ð» \"%s\" ÐœÐµ ÑÑÐœÑÑ"
++msgstr "E429: Ð€Ð°Ð¹Ð» Â«%sÂ» ÐœÐµ ÑÑÐœÑÑ"
+ 
+ # msgstr "E429: "
+ #. Highlight title
+@@ -5692,10 +5746,13 @@
+ msgid "E430: Tag file path truncated for %s\n"
+ msgstr "E430: ÐšÐ»ÑÑ
+ ÑÐ°Ð¹Ð»Ñ ÑÐµÒÑÐ² ÑÐºÐŸÑÐŸÑÐµÐœÐŸ ÐŽÐŸ %s\n"
+ 
++msgid "Ignoring long line in tags file"
++msgstr "ÐÐ³ÐœÐŸÑÑÑÑÑÑÑ ÐŽÐŸÐ²Ð³ÐžÐ¹ ÑÑÐŽÐŸÐº Ñ ÑÐ°Ð¹Ð»Ñ Ð· Ð¿ÐŸÐ·ÐœÐ°ÑÐºÐ°ÐŒÐž"
++
+ # msgstr "E430: "
+ #, c-format
+ msgid "E431: Format error in tags file \"%s\""
+-msgstr "E431: ÐÐŸÐŒÐžÐ»ÐºÐ° ÑÐŸÑÐŒÐ°ÑÑ Ñ ÑÐ°Ð¹Ð»Ñ ÑÐµÒÑÐ² \"%s\""
++msgstr "E431: ÐÐŸÐŒÐžÐ»ÐºÐ° ÑÐŸÑÐŒÐ°ÑÑ Ñ ÑÐ°Ð¹Ð»Ñ ÑÐµÒÑÐ² Â«%sÂ»"
+ 
+ # msgstr "E431: "
+ #, c-format
+@@ -5711,9 +5768,6 @@
+ msgid "E433: No tags file"
+ msgstr "E433: ÐÐµÐŒÐ°Ñ ÑÐ°Ð¹Ð»Ñ ÑÐµÒÑÐ²"
+ 
+-msgid "Ignoring long line in tags file"
+-msgstr "ÐÐ³ÐœÐŸÑÑÑÑÑÑÑ ÐŽÐŸÐ²Ð³ÐžÐ¹ ÑÑÐŽÐŸÐº Ñ ÑÐ°Ð¹Ð»Ñ Ð· Ð¿ÐŸÐ·ÐœÐ°ÑÐºÐ°ÐŒÐž"
+-
+ # msgstr "E433: "
+ msgid "E434: Can't find tag pattern"
+ msgstr "E434: ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐ°Ð¹ÑÐž Ð·ÑÐ°Ð·ÐŸÐº ÑÐµÒÑ"
+@@ -5744,10 +5798,10 @@
+ 
+ #, c-format
+ msgid "E436: No \"%s\" entry in termcap"
+-msgstr "E436: ÐÐµÐŒÐ°Ñ Ð·Ð°Ð¿ÐžÑÑ \"%s\" Ð¿ÑÐŸ ÐŒÐŸÐ¶Ð»ÐžÐ²ÐŸÑÑÑ ÑÐµÑÐŒÑÐœÐ°Ð»Ñ"
++msgstr "E436: ÐÐµÐŒÐ°Ñ Ð·Ð°Ð¿ÐžÑÑ Â«%sÂ» Ð¿ÑÐŸ ÐŒÐŸÐ¶Ð»ÐžÐ²ÐŸÑÑÑ ÑÐµÑÐŒÑÐœÐ°Ð»Ñ"
+ 
+ msgid "E437: terminal capability \"cm\" required"
+-msgstr "E437: ÐÐŸÑÑÑÐ±ÐœÐ° ÐŒÐŸÐ¶Ð»ÐžÐ²ÑÑÑÑ ÑÐµÑÐŒÑÐœÐ°Ð»Ñ \"cm\""
++msgstr "E437: ÐÐŸÑÑÑÐ±ÐœÐ° ÐŒÐŸÐ¶Ð»ÐžÐ²ÑÑÑÑ ÑÐµÑÐŒÑÐœÐ°Ð»Ñ Â«cmÂ»"
+ 
+ #. Highlight title
+ msgid ""
+@@ -5892,8 +5946,8 @@
+ msgid "Nothing to undo"
+ msgstr "ÐÐµÐŒÐ°Ñ ÐœÑÑÐŸÐ³ÐŸ ÑÐºÐ°ÑÐŸÐ²ÑÐ²Ð°ÑÐž"
+ 
+-msgid "number changes  time            saved"
+-msgstr "ÐœÐŸÐŒÐµÑ  Ð·ÐŒÑÐœ     ÑÐ°Ñ             Ð·Ð±ÐµÑÐµÐ¶ÐµÐœÐŸ"
++msgid "number changes  when               saved"
++msgstr "ÐœÐŸÐŒÐµÑ  Ð·ÐŒÑÐœÐž    ÑÐ°Ñ             Ð·Ð±ÐµÑÐµÐ¶ÐµÐœÐŸ"
+ 
+ #, c-format
+ msgid "%ld seconds ago"
+@@ -5998,13 +6052,6 @@
+ 
+ msgid ""
+ "\n"
+-"RISC OS version"
+-msgstr ""
+-"\n"
+-"ÐÐµÑÑÑÑ ÐŽÐ»Ñ RISC OS"
+-
+-msgid ""
+-"\n"
+ "OpenVMS version"
+ msgstr ""
+ "\n"
+@@ -6169,7 +6216,7 @@
+ msgstr "Ð°Ð²ÑÐŸÑ: Bram Moolenaar ÑÐ° ÑÐœ."
+ 
+ msgid "Vim is open source and freely distributable"
+-msgstr "Vim -- ÑÐµ Ð²ÑÐŽÐºÑÐžÑÐ° Ð¹ Ð²ÑÐ»ÑÐœÐŸ ÑÐŸÐ·Ð¿ÐŸÐ²ÑÑÐŽÐ¶ÑÐ²Ð°ÐœÐ° Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐ°"
++msgstr "Vim â ÑÐµ Ð²ÑÐŽÐºÑÐžÑÐ° Ð¹ Ð²ÑÐ»ÑÐœÐŸ ÑÐŸÐ·Ð¿ÐŸÐ²ÑÑÐŽÐ¶ÑÐ²Ð°ÐœÐ° Ð¿ÑÐŸÐ³ÑÐ°ÐŒÐ°"
+ 
+ msgid "Help poor children in Uganda!"
+ msgstr "ÐÐŸÐ¿ÐŸÐŒÐŸÐ¶ÑÑÑ ÑÐžÑÐŸÑÐ°ÐŒ Ð· Ð£Ð³Ð°ÐœÐŽÐž!"
+@@ -6271,7 +6318,7 @@
+ # msgstr "E446: "
+ #, c-format
+ msgid "E447: Can't find file \"%s\" in path"
+-msgstr "E447: Ð€Ð°Ð¹Ð» \"%s\" ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ Ñ ÑÐ»ÑÑ
+Ñ Ð¿ÐŸÑÑÐºÑ"
++msgstr "E447: Ð€Ð°Ð¹Ð» Â«%sÂ» ÐœÐµ Ð·ÐœÐ°Ð¹ÐŽÐµÐœÐŸ Ñ ÑÐ»ÑÑ
+Ñ Ð¿ÐŸÑÑÐºÑ"
+ 
+ #, c-format
+ msgid "E370: Could not load library %s"
+@@ -6373,7 +6420,7 @@
+ # msgstr "E235: "
+ #, c-format
+ msgid "E236: Font \"%s\" is not fixed-width"
+-msgstr "E236: ÐšÑÐžÑÑ \"%s\" ÐœÐµ ÐŒÐŸÐœÐŸÑÐžÑÐžÐœÐœÐžÐ¹"
++msgstr "E236: ÐšÑÐžÑÑ Â«%sÂ» ÐœÐµ ÐŒÐŸÐœÐŸÑÐžÑÐžÐœÐœÐžÐ¹"
+ 
+ msgid "E473: Internal error"
+ msgstr "E473: ÐÐœÑÑÑÑÑÐœÑ Ð¿ÐŸÐŒÐžÐ»ÐºÐ°"
+@@ -6406,11 +6453,11 @@
+ 
+ #, c-format
+ msgid "E17: \"%s\" is a directory"
+-msgstr "E17: \"%s\" -- ÑÐµ ÐºÐ°ÑÐ°Ð»ÐŸÐ³"
++msgstr "E17: Â«%sÂ» â ÑÐµ ÐºÐ°ÑÐ°Ð»ÐŸÐ³"
+ 
+ #, c-format
+ msgid "E364: Library call failed for \"%s()\""
+-msgstr "E364: ÐÑÐ±Ð»ÑÐŸÑÐµÑÐœÐžÐ¹ Ð²ÐžÐºÐ»ÐžÐº ÐŽÐŸ \"%s()\" ÐœÐµ Ð²ÐŽÐ°Ð²ÑÑ"
++msgstr "E364: ÐÑÐ±Ð»ÑÐŸÑÐµÑÐœÐžÐ¹ Ð²ÐžÐºÐ»ÐžÐº ÐŽÐŸ Â«%s()Â» ÐœÐµ Ð²ÐŽÐ°Ð²ÑÑ"
+ 
+ #, c-format
+ msgid "E448: Could not load library function %s"
+@@ -6506,7 +6553,7 @@
+ 
+ #, c-format
+ msgid "E247: no registered server named \"%s\""
+-msgstr "E247: ÐÐµÐŒÐ°Ñ Ð·Ð°ÑÐµÑÑÑÑÐŸÐ²Ð°ÐœÐžÑ
+ ÑÐµÑÐ²ÐµÑÑÐ² Ð· ÐœÐ°Ð·Ð²ÐŸÑ \"%s\""
++msgstr "E247: ÐÐµÐŒÐ°Ñ Ð·Ð°ÑÐµÑÑÑÑÐŸÐ²Ð°ÐœÐžÑ
+ ÑÐµÑÐ²ÐµÑÑÐ² Ð· ÐœÐ°Ð·Ð²ÐŸÑ Â«%sÂ»"
+ 
+ # msgstr "E36: "
+ #, c-format
+@@ -6573,11 +6620,11 @@
+ 
+ #, c-format
+ msgid "E46: Cannot change read-only variable \"%s\""
+-msgstr "E46: ÐÐŒÑÐœÐœÐ° ÑÑÐ»ÑÐºÐž ÐŽÐ»Ñ ÑÐžÑÐ°ÐœÐœÑ: \"%s\""
++msgstr "E46: ÐÐŒÑÐœÐœÐ° ÑÑÐ»ÑÐºÐž ÐŽÐ»Ñ ÑÐžÑÐ°ÐœÐœÑ: Â«%sÂ»"
+ 
+ #, c-format
+ msgid "E794: Cannot set variable in the sandbox: \"%s\""
+-msgstr "E794: ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð²ÑÑÐ°ÐœÐŸÐ²ÐžÑÐž Ð·ÐŒÑÐœÐœÑ Ñ Ð¿ÑÑÐŸÑÐœÐžÑÑ: \"%s\""
++msgstr "E794: ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð²ÑÑÐ°ÐœÐŸÐ²ÐžÑÐž Ð·ÐŒÑÐœÐœÑ Ñ Ð¿ÑÑÐŸÑÐœÐžÑÑ: Â«%sÂ»"
+ 
+ msgid "E47: Error while reading errorfile"
+ msgstr "E47: ÐÐŸÐŒÐžÐ»ÐºÐ° ÑÐžÑÐ°ÐœÐœÑ ÑÐ°Ð¹Ð»Ñ Ð¿ÐŸÐŒÐžÐ»ÐŸÐº"
+@@ -6674,6 +6721,9 @@
+ msgid "E764: Option '%s' is not set"
+ msgstr "E764: ÐÐ¿ÑÑÑ '%s' ÐœÐµ Ð²ÑÑÐ°ÐœÐŸÐ²Ð»ÐµÐœÐ°"
+ 
++msgid "E850: Invalid register name"
++msgstr "E850: ÐÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐ° ÐœÐ°Ð·Ð²Ð° ÑÐµÐ³ÑÑÑÑÑ"
++
+ msgid "search hit TOP, continuing at BOTTOM"
+ msgstr "ÐÐŸÑÑÐº ÐŽÑÐ¹ÑÐŸÐ² ÐŽÐŸ ÐÐÐ§ÐÐ¢ÐÐ£, Ð¿ÑÐŸÐŽÐŸÐ²Ð¶ÑÑÑÑÑÑ Ð· ÐÐÐÐŠÐ¯"
+ 
+@@ -6682,7 +6732,17 @@
+ 
+ #, c-format
+ msgid "Need encryption key for \"%s\""
+-msgstr "ÐÐ»Ñ \"%s\" Ð¿ÐŸÑÑÑÐ±ÐµÐœ ÐºÐ»ÑÑ: "
++msgstr "ÐÐ»Ñ Â«%sÂ» Ð¿ÐŸÑÑÑÐ±ÐµÐœ ÐºÐ»ÑÑ: "
++
++msgid "can't delete OutputObject attributes"
++msgstr "ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐžÑÐžÑÐž Ð°ÑÑÐžÐ±ÑÑÐž OutputObject"
++
++msgid "softspace must be an integer"
++msgstr "softspace ÐŒÐ°Ñ Ð±ÑÑÐž ÑÑÐ»ÐžÐŒ"
++
++# msgstr "E180: "
++msgid "invalid attribute"
++msgstr "ÐœÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐžÐ¹ Ð°ÑÑÐžÐ±ÑÑ"
+ 
+ msgid "writelines() requires list of strings"
+ msgstr "ÐŽÐ»Ñ writelines() Ð¿ÐŸÑÑÑÐ±ÐµÐœ ÑÐ¿ÐžÑÐŸÐº ÑÑÐŽÐºÑÐ²"
+@@ -6693,6 +6753,61 @@
+ msgid "no such buffer"
+ msgstr "ÑÐ°ÐºÐŸÐ³ÐŸ Ð±ÑÑÐµÑÐ° ÐœÐµÐŒÐ°Ñ"
+ 
++# msgstr "E406: "
++msgid "empty keys are not allowed"
++msgstr "Ð¿ÐŸÑÐŸÐ¶ÐœÑ ÐºÐ»ÑÑÑ ÐœÐµ ÐŽÐŸÐ·Ð²ÐŸÐ»ÐµÐœÑ"
++
++msgid "failed to add key to dictionary"
++msgstr "ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ ÐŽÐŸÐŽÐ°ÑÐž ÐºÐ»ÑÑ ÐŽÐŸ ÑÐ»ÐŸÐ²ÐœÐžÐºÐ°"
++
++msgid "Cannot delete DictionaryObject attributes"
++msgstr "ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð·ÐœÐžÑÐžÑÐž Ð°ÑÑÐžÐ±ÑÑÐž DictionaryObject"
++
++msgid "Cannot modify fixed dictionary"
++msgstr "ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð·ÐŒÑÐœÐžÑÐž ÑÑÐºÑÐŸÐ²Ð°ÐœÐžÐ¹ ÑÐ»ÐŸÐ²ÐœÐžÐº"
++
++msgid "Only boolean objects are allowed"
++msgstr "ÐÐŸÐ·Ð²ÐŸÐ»ÐµÐœÐŸ ÑÑÐ»ÑÐºÐž Ð»ÐŸÐ³ÑÑÐœÑ ÐŸÐ±âÑÐºÑÐž"
++
++msgid "Cannot set this attribute"
++msgstr "ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð²ÑÑÐ°ÐœÐŸÐ²ÐžÑÐž ÑÐµÐ¹ Ð°ÑÑÐžÐ±ÑÑ"
++
++msgid "no such key in dictionary"
++msgstr "ÐœÐµÐŒÐ°Ñ ÑÐ°ÐºÐŸÐ³ÐŸ ÐºÐ»ÑÑÐ° Ð² ÑÐ»ÐŸÐ²ÐœÐžÐºÑ"
++
++msgid "dict is locked"
++msgstr "ÑÐ»ÐŸÐ²ÐœÐžÐº Ð·Ð°Ð±Ð»ÐŸÐºÐŸÐ²Ð°ÐœÐŸ"
++
++msgid "internal error: failed to get vim list item"
++msgstr "Ð²ÐœÑÑÑÑÑÐœÑ Ð¿ÐŸÐŒÐžÐ»ÐºÐ°: ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ ÐŸÑÑÐžÐŒÐ°ÑÐž ÐµÐ»ÐµÐŒÐµÐœÑ ÑÐ¿ÐžÑÐºÑ vim"
++
++msgid "list is locked"
++msgstr "ÑÐ¿ÐžÑÐŸÐº Ð·Ð°Ð±Ð»ÐŸÐºÐŸÐ²Ð°ÐœÐŸ"
++
++msgid "Failed to add item to list"
++msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ ÐŽÐŸÐŽÐ°ÑÐž ÐµÐ»ÐµÐŒÐµÐœÑ ÐŽÐŸ ÑÐ¿ÐžÑÐºÑ"
++
++msgid "internal error: no vim list item"
++msgstr "Ð²ÐœÑÑÑÑÑÐœÑ Ð¿ÐŸÐŒÐžÐ»ÐºÐ°: ÐœÐµÐŒÐ°Ñ ÐµÐ»ÐµÐŒÐµÐœÑÐ° ÑÐ¿ÐžÑÐºÑ vim"
++
++msgid "can only assign lists to slice"
++msgstr "ÐŒÐŸÐ¶ÐœÐ° Ð¿ÑÐžÑÐ²ÐŸÑÐ²Ð°ÑÐž ÑÐ¿ÐžÑÐºÐž ÑÑÐ»ÑÐºÐž Ð·ÑÑÐ·Ð°ÐŒ"
++
++msgid "internal error: failed to add item to list"
++msgstr "Ð²ÐœÑÑÑÑÑÐœÑ Ð¿ÐŸÐŒÐžÐ»ÐºÐ°: ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ ÐŽÐŸÐŽÐ°ÑÐž ÐµÐ»ÐµÐŒÐµÐœÑ ÐŽÐŸ ÑÐ¿ÐžÑÐºÑ"
++
++msgid "can only concatenate with lists"
++msgstr "ÐŒÐŸÐ¶ÐœÐ° Ð·âÑÐŽÐœÑÐ²Ð°ÑÐž ÑÑÐ»ÑÐºÐž Ð·Ñ ÑÐ¿ÐžÑÐºÐ°ÐŒÐž"
++
++msgid "Cannot modify fixed list"
++msgstr "ÐÐµ ÐŒÐŸÐ¶ÐœÐ° Ð·ÐŒÑÐœÐžÑÐž ÑÑÐºÑÐŸÐ²Ð°ÐœÐžÐ¹ ÑÐ¿ÐžÑÐŸÐº"
++
++msgid "'self' argument must be a dictionary"
++msgstr "ÐÑÐ³ÑÐŒÐµÐœÑ Â«selfÂ» ÐŒÐ°Ñ Ð±ÑÑÐž ÑÐ»ÐŸÐ²ÐœÐžÐºÐŸÐŒ"
++
++msgid "failed to run function"
++msgstr "ÐÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð²ÐžÐºÐŸÐœÐ°ÑÐž ÑÑÐœÐºÑÑÑ"
++
+ msgid "attempt to refer to deleted window"
+ msgstr "ÑÐ¿ÑÐŸÐ±Ð° Ð·Ð²ÐµÑÐœÑÑÐžÑÑ ÐŽÐŸ Ð·ÐœÐžÑÐµÐœÐŸÐ³ÐŸ Ð²ÑÐºÐœÐ°"
+ 
+@@ -6720,43 +6835,11 @@
+ msgid "attempt to refer to deleted buffer"
+ msgstr "ÑÐ¿ÑÐŸÐ±Ð° Ð·Ð²ÐµÑÐœÐµÐœÐœÑ ÐŽÐŸ Ð·ÐœÐžÑÐµÐœÐŸÐ³ÐŸ Ð±ÑÑÐµÑÐ°"
+ 
+-#~ msgid "-name <name>\t\tUse resource as if vim was <name>"
+-#~ msgstr "-name <ÐœÐ°Ð·Ð²Ð°>\t\tÐÐžÐºÐŸÑÐžÑÑÐ°ÑÐž ÑÐµÑÑÑÑÐž, ÐœÑÐ±Ðž vim ÐŒÐ°Ñ Ð·Ð°ÐŽÐ°ÐœÑ <ÐœÐ°Ð·Ð²Ñ>"
+-
+-#~ msgid "\t\t\t  (Unimplemented)\n"
+-#~ msgstr "\t\t\t  (ÐÐµ ÐŽÑÑ)\n"
+-
+-#~ msgid "E396: containedin argument not accepted here"
+-#~ msgstr "E396: ÐÑÐ³ÑÐŒÐµÐœÑ containedin ÑÑÑ ÐœÐµÐ¿ÑÐžÐ¹ÐœÑÑÐœÐžÐ¹"
+-
+-# msgstr "E232: "
+-#~ msgid "Vim dialog..."
+-#~ msgstr "ÐÑÐ°Ð»ÐŸÐ³ Vim..."
+-
+-# msgstr "E234: "
+-#~ msgid "Font Selection"
+-#~ msgstr "ÐÐžÐ±ÑÐ°ÑÐž ÑÑÐžÑÑ"
+-
+-# msgstr "E289: "
+-#~ msgid "E290: over-the-spot style requires fontset"
+-#~ msgstr "E290: Ð¡ÑÐžÐ»Ñ over-the-spot Ð²ÐžÐŒÐ°Ð³Ð°Ñ ÐœÐ°Ð±ÑÑ ÑÑÐžÑÑÑÐ²"
+-
+-# msgstr "E290: "
+-#~ msgid "E291: Your GTK+ is older than 1.2.3. Status area disabled"
+-#~ msgstr "E291: Ð£ Ð²Ð°Ñ ÑÑÐ°ÑÑÐ° Ð·Ð° 1.2.3 Ð²ÐµÑÑÑÑ GTK+. ÐÐ±Ð»Ð°ÑÑÑ ÑÑÐ°ÐœÑ Ð²ÐžÐŒÐºÐœÐµÐœÐŸ"
+-
+-# msgstr "E291: "
+-#~ msgid "E292: Input Method Server is not running"
+-#~ msgstr "E292: Ð¡ÐµÑÐ²ÐµÑ ÐŒÐµÑÐŸÐŽÑ Ð²Ð²ÐŸÐŽÑ ÐœÐµ ÑÑÐœÐºÑÑÐŸÐœÑÑ"
+-
+-#~ msgid "with GTK-GNOME GUI."
+-#~ msgstr "Ð· GUI GTK-GNOME."
+-
+-#~ msgid "with GTK GUI."
+-#~ msgstr "Ð· GUI GTK."
++msgid "unable to convert to vim structure"
++msgstr "ÐœÐµ Ð²ÐŽÐ°Ð»ÐŸÑÑ Ð¿ÐµÑÐµÑÐ²ÐŸÑÐžÑÐž ÐŽÐŸ ÑÑÑÑÐºÑÑÑÐž vim"
+ 
+-#~ msgid "[NL found]"
+-#~ msgstr "[ÐÐœÐ°Ð¹ÐŽÐµÐœÐŸ NL]"
++msgid "NULL reference passed"
++msgstr "Ð¿ÐµÑÐµÐŽÐ°ÐœÐŸ Ð¿ÐŸÑÐžÐ»Ð°ÐœÐœÑ NULL"
+ 
+-#~ msgid "E569: maximum number of cscope connections reached"
+-#~ msgstr "E569: ÐÑÐ»ÑÐºÑÑÑÑ Ð·'ÑÐŽÐœÐ°ÐœÑ Ð· cscope ÐŽÐŸÑÑÐ³Ð»Ð° ÐŒÐ°ÐºÑÐžÐŒÑÐŒÑ"
++msgid "internal error: invalid value type"
++msgstr "Ð²ÐœÑÑÑÑÑÐœÑ Ð¿ÐŸÐŒÐžÐ»ÐºÐ°: ÐœÐµÐ¿ÑÐ°Ð²ÐžÐ»ÑÐœÐžÐ¹ ÑÐžÐ¿ Ð·ÐœÐ°ÑÐµÐœÐœÑ"
+diff -Naur vim73.orig/src/po/vi.po vim73/src/po/vi.po
+--- vim73.orig/src/po/vi.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/vi.po	2013-06-07 17:07:34.498910162 +0000
+@@ -1785,21 +1785,6 @@
+ msgstr "Há»§y thao tÃ¡c"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: KhÃŽng náº¡p ÄÆ°á»£c phÃŽng chá»¯ Zap '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: KhÃŽng sá»­ dá»¥ng ÄÆ°á»£c phÃŽng chá»¯ %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"Gá»­i thÃŽng bÃ¡o Äá» \"há»§y diá»t\" (dá»«ng) tiáº¿n trÃ¬nh con.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: KhÃŽng tÃ¬m ÄÆ°á»£c tiÃªu Äá» cá»­a sá» \"%s\""
+ 
+@@ -3801,9 +3786,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: KÃœ tá»± khÃŽng cho phÃ©p '%c' trong tÃªn phÃŽng chá»¯ \"%s\""
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: GiÃ¡ trá» tÃ¹y chá»n 'osfiletype' khÃŽng cho phÃ©p - sá»­ dá»¥ng Text"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: TÃ­n hiá»u ÄÃŽi, thoÃ¡t\n"
+ 
+diff -Naur vim73.orig/src/po/zh_CN.UTF-8.po vim73/src/po/zh_CN.UTF-8.po
+--- vim73.orig/src/po/zh_CN.UTF-8.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/zh_CN.UTF-8.po	2013-06-07 17:07:34.528910076 +0000
+@@ -241,9 +241,8 @@
+ msgid " Tag completion (^]^N^P)"
+ msgstr " Tag è¡¥å
+š (^]^N^P)"
+ 
+-#, fuzzy
+-#~ msgid " Path pattern completion (^N^P)"
+-#~ msgstr " è·¯åŸæš¡åŒè¡¥å
+š (^N^P)"
++msgid " Path pattern completion (^N^P)"
++msgstr " å€Žæä»¶æš¡åŒè¡¥å
+š (^N^P)"
+ 
+ msgid " Definition completion (^D^N^P)"
+ msgstr " å®ä¹è¡¥å
+š (^D^N^P)"
+@@ -2016,21 +2015,6 @@
+ msgstr "æ€é(&U)"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: æ æ³å èœœ Zap å­äœ '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: æ æ³äœ¿çšå­äœ %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"æ­£åšåéæ¶æ¯ç»æ­¢å­è¿çšã\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: æŸäžå°çªå£æ é¢ \"%s\""
+ 
+@@ -4226,9 +4210,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: äžæ­£ç¡®çå­ç¬Š '%c' åºç°åšå­äœåç§° \"%s\" å
+"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: äžæ­£ç¡®ç 'osfiletype' éé¡¹ - äœ¿çšçº¯æå­æš¡åŒ"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: åéä¿¡å·ïŒéåºäž­\n"
+ 
+@@ -5302,7 +5283,7 @@
+ 
+ #. must display the prompt
+ msgid "No undo possible; continue anyway"
+-msgstr "æ æ³æ€éïŒè¯·ç»§ç»­"
++msgstr "æ æ³æ€éïŒä»ç¶ç»§ç»­"
+ 
+ msgid "Already at oldest change"
+ msgstr "å·²äœäºææ§çæ¹å"
+@@ -5619,13 +5600,13 @@
+ msgstr "èŸå
+¥  :help cp-default<Enter> æ¥ççžå
+³è¯Žæ    "
+ 
+ msgid "menu  Help->Orphans           for information    "
+-msgstr "èå  Help->Orphans           æ¥çè¯Žæ           "
++msgstr "èå  åž®å©->å­€å¿           æ¥çè¯Žæ           "
+ 
+ msgid "Running modeless, typed text is inserted"
+ msgstr "æ æš¡åŒè¿è¡ïŒèŸå
+¥æå­å³æå
+¥"
+ 
+ msgid "menu  Edit->Global Settings->Toggle Insert Mode  "
+-msgstr "èå  Edit->Global Settings->Toggle Insert Mode  "
++msgstr "èå  çŒèŸ->å
+šå±è®Ÿå®->åŒ/å
+³æå
+¥æš¡åŒ  "
+ 
+ #, fuzzy
+ #~ msgid "                              for two modes      "
+diff -Naur vim73.orig/src/po/zh_CN.cp936.po vim73/src/po/zh_CN.cp936.po
+--- vim73.orig/src/po/zh_CN.cp936.po	2010-08-15 13:02:25.000000000 +0000
++++ vim73/src/po/zh_CN.cp936.po	2013-06-07 17:07:34.565576638 +0000
+@@ -2016,21 +2016,6 @@
+ msgstr "³·Ïú(&U)"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: ÎÞ·šŒÓÔØ Zap ×ÖÌå '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: ÎÞ·šÊ¹ÓÃ×ÖÌå %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"ÕýÔÚ·¢ËÍÏûÏ¢ÖÕÖ¹×Óœø³Ì¡£\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: ÕÒ²»µœŽ°¿Ú±êÌâ \"%s\""
+ 
+@@ -4226,9 +4211,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: ²»ÕýÈ·µÄ×Ö·û '%c' ³öÏÖÔÚ×ÖÌåÃû³Æ \"%s\" ÄÚ"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: ²»ÕýÈ·µÄ 'osfiletype' Ñ¡Ïî - Ê¹ÓÃŽ¿ÎÄ×ÖÄ£Êœ"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Ë«ÖØÐÅºÅ£¬ÍË³öÖÐ\n"
+ 
+diff -Naur vim73.orig/src/po/zh_CN.po vim73/src/po/zh_CN.po
+--- vim73.orig/src/po/zh_CN.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/zh_CN.po	2013-06-07 17:07:34.605576524 +0000
+@@ -2016,21 +2016,6 @@
+ msgstr "³·Ïú(&U)"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: ÎÞ·šŒÓÔØ Zap ×ÖÌå '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: ÎÞ·šÊ¹ÓÃ×ÖÌå %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"ÕýÔÚ·¢ËÍÏûÏ¢ÖÕÖ¹×Óœø³Ì¡£\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: ÕÒ²»µœŽ°¿Ú±êÌâ \"%s\""
+ 
+@@ -4226,9 +4211,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: ²»ÕýÈ·µÄ×Ö·û '%c' ³öÏÖÔÚ×ÖÌåÃû³Æ \"%s\" ÄÚ"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: ²»ÕýÈ·µÄ 'osfiletype' Ñ¡Ïî - Ê¹ÓÃŽ¿ÎÄ×ÖÄ£Êœ"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Ë«ÖØÐÅºÅ£¬ÍË³öÖÐ\n"
+ 
+diff -Naur vim73.orig/src/po/zh_TW.UTF-8.po vim73/src/po/zh_TW.UTF-8.po
+--- vim73.orig/src/po/zh_TW.UTF-8.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/zh_TW.UTF-8.po	2013-06-07 17:07:34.648909734 +0000
+@@ -1806,21 +1806,6 @@
+ msgstr "åŸ©å"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: ç¡æ³éå Zap å­å '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: ç¡æ³äœ¿çšå­å %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"éåºäž­æ·å­çšåŒçèšæ¯äž­.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: æŸäžå°æšé¡çº \"%s\" çèŠçª"
+ 
+@@ -3785,9 +3770,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: äžæ­£ç¢ºçå­å
+ '%c' åºçŸåšå­ååçš± \"%s\" å
+§"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: äžæ­£ç¢ºç 'filetype' éžé 
+ - äœ¿çšçŽæå­æš¡åŒ"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: éésignal, é¢éäž­\n"
+ 
+diff -Naur vim73.orig/src/po/zh_TW.po vim73/src/po/zh_TW.po
+--- vim73.orig/src/po/zh_TW.po	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/po/zh_TW.po	2013-06-07 17:07:34.675576324 +0000
+@@ -1799,21 +1799,6 @@
+ msgstr "Ž_­ì"
+ 
+ #, c-format
+-msgid "E610: Can't load Zap font '%s'"
+-msgstr "E610: µLªk¶}±Ò Zap Šr«¬ '%s'"
+-
+-#, c-format
+-msgid "E611: Can't use font %s"
+-msgstr "E611: µLªkšÏ¥ÎŠr«¬ %s"
+-
+-msgid ""
+-"\n"
+-"Sending message to terminate child process.\n"
+-msgstr ""
+-"\n"
+-"°e¥X€€Â_€lµ{Š¡ªº°T®§€€.\n"
+-
+-#, c-format
+ msgid "E671: Cannot find window title \"%s\""
+ msgstr "E671: §ä€£šìŒÐÃD¬° \"%s\" ªºµøµ¡"
+ 
+@@ -3778,9 +3763,6 @@
+ msgid "E245: Illegal char '%c' in font name \"%s\""
+ msgstr "E245: €£¥¿œTªºŠr€ž '%c' ¥X²{ŠbŠr«¬ŠWºÙ \"%s\" €º"
+ 
+-msgid "E366: Invalid 'osfiletype' option - using Text"
+-msgstr "E366: €£¥¿œTªº 'filetype' ¿ï¶µ - šÏ¥Î¯Â€åŠrŒÒŠ¡"
+-
+ msgid "Vim: Double signal, exiting\n"
+ msgstr "Vim: Âù­«signal, Â÷¶}€€\n"
+ 
+diff -Naur vim73.orig/src/popupmnu.c vim73/src/popupmnu.c
+--- vim73.orig/src/popupmnu.c	2010-08-08 13:14:58.000000000 +0000
++++ vim73/src/popupmnu.c	2013-06-07 17:07:34.698909591 +0000
+@@ -558,8 +558,11 @@
+ 	    win_T	*curwin_save = curwin;
+ 	    int		res = OK;
+ 
+-	    /* Open a preview window.  3 lines by default. */
++	    /* Open a preview window.  3 lines by default.  Prefer
++	     * 'previewheight' if set and smaller. */
+ 	    g_do_tagpreview = 3;
++	    if (p_pvh > 0 && p_pvh < g_do_tagpreview)
++		g_do_tagpreview = p_pvh;
+ 	    resized = prepare_tagpreview(FALSE);
+ 	    g_do_tagpreview = 0;
+ 
+diff -Naur vim73.orig/src/proto/buffer.pro vim73/src/proto/buffer.pro
+--- vim73.orig/src/proto/buffer.pro	2010-08-15 12:30:19.000000000 +0000
++++ vim73/src/proto/buffer.pro	2013-06-07 17:07:34.735576153 +0000
+@@ -1,7 +1,7 @@
+ /* buffer.c */
+ int open_buffer __ARGS((int read_stdin, exarg_T *eap, int flags));
+ int buf_valid __ARGS((buf_T *buf));
+-void close_buffer __ARGS((win_T *win, buf_T *buf, int action));
++void close_buffer __ARGS((win_T *win, buf_T *buf, int action, int abort_if_last));
+ void buf_clear_file __ARGS((buf_T *buf));
+ void buf_freeall __ARGS((buf_T *buf, int flags));
+ void goto_buffer __ARGS((exarg_T *eap, int start, int dir, int count));
+@@ -17,7 +17,7 @@
+ void buflist_getfpos __ARGS((void));
+ buf_T *buflist_findname_exp __ARGS((char_u *fname));
+ buf_T *buflist_findname __ARGS((char_u *ffname));
+-int buflist_findpat __ARGS((char_u *pattern, char_u *pattern_end, int unlisted, int diffmode));
++int buflist_findpat __ARGS((char_u *pattern, char_u *pattern_end, int unlisted, int diffmode, int curtab_only));
+ int ExpandBufnames __ARGS((char_u *pat, int *num_file, char_u ***file, int options));
+ buf_T *buflist_findnr __ARGS((int nr));
+ char_u *buflist_nr2name __ARGS((int n, int fullname, int helptail));
+@@ -51,7 +51,7 @@
+ void do_modelines __ARGS((int flags));
+ int read_viminfo_bufferlist __ARGS((vir_T *virp, int writing));
+ void write_viminfo_bufferlist __ARGS((FILE *fp));
+-char *buf_spname __ARGS((buf_T *buf));
++char_u *buf_spname __ARGS((buf_T *buf));
+ void buf_addsign __ARGS((buf_T *buf, int id, linenr_T lnum, int typenr));
+ linenr_T buf_change_sign_type __ARGS((buf_T *buf, int markId, int typenr));
+ int buf_getsigntype __ARGS((buf_T *buf, linenr_T lnum, int type));
+@@ -60,6 +60,7 @@
+ int buf_findsign_id __ARGS((buf_T *buf, linenr_T lnum));
+ int buf_findsigntype_id __ARGS((buf_T *buf, linenr_T lnum, int typenr));
+ int buf_signcount __ARGS((buf_T *buf, linenr_T lnum));
++void buf_delete_signs __ARGS((buf_T *buf));
+ void buf_delete_all_signs __ARGS((void));
+ void sign_list_placed __ARGS((buf_T *rbuf));
+ void sign_mark_adjust __ARGS((linenr_T line1, linenr_T line2, long amount, long amount_after));
+diff -Naur vim73.orig/src/proto/charset.pro vim73/src/proto/charset.pro
+--- vim73.orig/src/proto/charset.pro	2010-08-15 12:30:20.000000000 +0000
++++ vim73/src/proto/charset.pro	2013-06-07 17:07:34.752242772 +0000
+@@ -19,8 +19,9 @@
+ int win_linetabsize __ARGS((win_T *wp, char_u *p, colnr_T len));
+ int vim_isIDc __ARGS((int c));
+ int vim_iswordc __ARGS((int c));
++int vim_iswordc_buf __ARGS((int c, buf_T *buf));
+ int vim_iswordp __ARGS((char_u *p));
+-int vim_iswordc_buf __ARGS((char_u *p, buf_T *buf));
++int vim_iswordp_buf __ARGS((char_u *p, buf_T *buf));
+ int vim_isfilec __ARGS((int c));
+ int vim_isfilec_or_wc __ARGS((int c));
+ int vim_isprintc __ARGS((int c));
+diff -Naur vim73.orig/src/proto/digraph.pro vim73/src/proto/digraph.pro
+--- vim73.orig/src/proto/digraph.pro	2010-08-15 12:30:22.000000000 +0000
++++ vim73/src/proto/digraph.pro	2013-06-07 17:07:34.788909334 +0000
+@@ -1,7 +1,7 @@
+ /* digraph.c */
+ int do_digraph __ARGS((int c));
+ int get_digraph __ARGS((int cmdline));
+-int getdigraph __ARGS((int char1, int char2, int meta));
++int getdigraph __ARGS((int char1, int char2, int meta_char));
+ void putdigraph __ARGS((char_u *str));
+ void listdigraphs __ARGS((void));
+ char_u *keymap_init __ARGS((void));
+diff -Naur vim73.orig/src/proto/edit.pro vim73/src/proto/edit.pro
+--- vim73.orig/src/proto/edit.pro	2010-08-15 12:30:22.000000000 +0000
++++ vim73/src/proto/edit.pro	2013-06-07 17:07:34.798909305 +0000
+@@ -39,4 +39,5 @@
+ int hkmap __ARGS((int c));
+ void ins_scroll __ARGS((void));
+ void ins_horscroll __ARGS((void));
++int ins_copychar __ARGS((linenr_T lnum));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/eval.pro vim73/src/proto/eval.pro
+--- vim73.orig/src/proto/eval.pro	2010-08-15 12:30:23.000000000 +0000
++++ vim73/src/proto/eval.pro	2013-06-07 17:07:34.805575953 +0000
+@@ -23,8 +23,9 @@
+ list_T *eval_spell_expr __ARGS((char_u *badword, char_u *expr));
+ int get_spellword __ARGS((list_T *list, char_u **pp));
+ typval_T *eval_expr __ARGS((char_u *arg, char_u **nextcmd));
+-void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
++int call_vim_function __ARGS((char_u *func, int argc, char_u **argv, int safe, int str_arg_only, typval_T *rettv));
+ long call_func_retnr __ARGS((char_u *func, int argc, char_u **argv, int safe));
++void *call_func_retstr __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ void *call_func_retlist __ARGS((char_u *func, int argc, char_u **argv, int safe));
+ void *save_funccal __ARGS((void));
+ void restore_funccal __ARGS((void *vfc));
+@@ -32,6 +33,8 @@
+ void prof_child_exit __ARGS((proftime_T *tm));
+ int eval_foldexpr __ARGS((char_u *arg, int *cp));
+ void ex_let __ARGS((exarg_T *eap));
++void list_add_watch __ARGS((list_T *l, listwatch_T *lw));
++void list_rem_watch __ARGS((list_T *l, listwatch_T *lwrem));
+ void *eval_for_line __ARGS((char_u *arg, int *errp, char_u **nextcmdp, int skip));
+ int next_for_item __ARGS((void *fi_void, char_u *arg));
+ void free_for_info __ARGS((void *fi_void));
+@@ -45,13 +48,25 @@
+ list_T *list_alloc __ARGS((void));
+ void list_unref __ARGS((list_T *l));
+ void list_free __ARGS((list_T *l, int recurse));
++listitem_T *listitem_alloc __ARGS((void));
++void listitem_free __ARGS((listitem_T *item));
++void listitem_remove __ARGS((list_T *l, listitem_T *item));
+ dictitem_T *dict_lookup __ARGS((hashitem_T *hi));
++listitem_T *list_find __ARGS((list_T *l, long n));
+ char_u *list_find_str __ARGS((list_T *l, long idx));
++void list_append __ARGS((list_T *l, listitem_T *item));
+ int list_append_tv __ARGS((list_T *l, typval_T *tv));
+ int list_append_dict __ARGS((list_T *list, dict_T *dict));
+ int list_append_string __ARGS((list_T *l, char_u *str, int len));
++int list_insert_tv __ARGS((list_T *l, typval_T *tv, listitem_T *item));
++void list_remove __ARGS((list_T *l, listitem_T *item, listitem_T *item2));
+ int garbage_collect __ARGS((void));
++void set_ref_in_ht __ARGS((hashtab_T *ht, int copyID));
++void set_ref_in_list __ARGS((list_T *l, int copyID));
++void set_ref_in_item __ARGS((typval_T *tv, int copyID));
+ dict_T *dict_alloc __ARGS((void));
++void dict_unref __ARGS((dict_T *d));
++void dict_free __ARGS((dict_T *d, int recurse));
+ dictitem_T *dictitem_alloc __ARGS((char_u *key));
+ void dictitem_free __ARGS((dictitem_T *item));
+ int dict_add __ARGS((dict_T *d, dictitem_T *item));
+@@ -60,8 +75,13 @@
+ dictitem_T *dict_find __ARGS((dict_T *d, char_u *key, int len));
+ char_u *get_dict_string __ARGS((dict_T *d, char_u *key, int save));
+ long get_dict_number __ARGS((dict_T *d, char_u *key));
++void dict_extend __ARGS((dict_T *d1, dict_T *d2, char_u *action));
+ char_u *get_function_name __ARGS((expand_T *xp, int idx));
+ char_u *get_expr_name __ARGS((expand_T *xp, int idx));
++char_u *get_expanded_name __ARGS((char_u *name, int check));
++int translated_function_exists __ARGS((char_u *name));
++int func_call __ARGS((char_u *name, typval_T *args, dict_T *selfdict, typval_T *rettv));
++void mzscheme_call_vim __ARGS((char_u *name, typval_T *args, typval_T *rettv));
+ long do_searchpair __ARGS((char_u *spat, char_u *mpat, char_u *epat, int dir, char_u *skip, int flags, pos_T *match_pos, linenr_T lnum_stop, long time_limit));
+ void set_vim_var_nr __ARGS((int idx, long val));
+ long get_vim_var_nr __ARGS((int idx));
+@@ -81,7 +101,8 @@
+ char_u *get_tv_string_chk __ARGS((typval_T *varp));
+ char_u *get_var_value __ARGS((char_u *name));
+ void new_script_vars __ARGS((scid_T id));
+-void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var));
++void init_var_dict __ARGS((dict_T *dict, dictitem_T *dict_var, int scope));
++void unref_var_dict __ARGS((dict_T *dict));
+ void vars_clear __ARGS((hashtab_T *ht));
+ void copy_tv __ARGS((typval_T *from, typval_T *to));
+ void ex_echo __ARGS((exarg_T *eap));
+@@ -92,6 +113,8 @@
+ void func_dump_profile __ARGS((FILE *fd));
+ char_u *get_user_func_name __ARGS((expand_T *xp, int idx));
+ void ex_delfunction __ARGS((exarg_T *eap));
++void func_unref __ARGS((char_u *name));
++void func_ref __ARGS((char_u *name));
+ void ex_return __ARGS((exarg_T *eap));
+ int do_return __ARGS((exarg_T *eap, int reanimate, int is_cmd, void *rettv));
+ void discard_pending_return __ARGS((void *rettv));
+diff -Naur vim73.orig/src/proto/ex_cmds.pro vim73/src/proto/ex_cmds.pro
+--- vim73.orig/src/proto/ex_cmds.pro	2010-08-15 12:30:24.000000000 +0000
++++ vim73/src/proto/ex_cmds.pro	2013-06-07 17:07:34.818909248 +0000
+@@ -19,10 +19,12 @@
+ void do_fixdel __ARGS((exarg_T *eap));
+ void print_line_no_prefix __ARGS((linenr_T lnum, int use_number, int list));
+ void print_line __ARGS((linenr_T lnum, int use_number, int list));
++int rename_buffer __ARGS((char_u *new_fname));
+ void ex_file __ARGS((exarg_T *eap));
+ void ex_update __ARGS((exarg_T *eap));
+ void ex_write __ARGS((exarg_T *eap));
+ int do_write __ARGS((exarg_T *eap));
++int check_overwrite __ARGS((exarg_T *eap, buf_T *buf, char_u *fname, char_u *ffname, int other));
+ void ex_wnext __ARGS((exarg_T *eap));
+ void do_wqall __ARGS((exarg_T *eap));
+ int not_writing __ARGS((void));
+diff -Naur vim73.orig/src/proto/ex_cmds2.pro vim73/src/proto/ex_cmds2.pro
+--- vim73.orig/src/proto/ex_cmds2.pro	2010-08-15 12:30:25.000000000 +0000
++++ vim73/src/proto/ex_cmds2.pro	2013-06-07 17:07:34.822242572 +0000
+@@ -17,12 +17,13 @@
+ void profile_setlimit __ARGS((long msec, proftime_T *tm));
+ int profile_passed_limit __ARGS((proftime_T *tm));
+ void profile_zero __ARGS((proftime_T *tm));
++void profile_divide __ARGS((proftime_T *tm, int count, proftime_T *tm2));
+ void profile_add __ARGS((proftime_T *tm, proftime_T *tm2));
+ void profile_self __ARGS((proftime_T *self, proftime_T *total, proftime_T *children));
+ void profile_get_wait __ARGS((proftime_T *tm));
+ void profile_sub_wait __ARGS((proftime_T *tm, proftime_T *tma));
+ int profile_equal __ARGS((proftime_T *tm1, proftime_T *tm2));
+-int profile_cmp __ARGS((proftime_T *tm1, proftime_T *tm2));
++int profile_cmp __ARGS((const proftime_T *tm1, const proftime_T *tm2));
+ void ex_profile __ARGS((exarg_T *eap));
+ char_u *get_profile_name __ARGS((expand_T *xp, int idx));
+ void set_context_in_profile_cmd __ARGS((expand_T *xp, char_u *arg));
+@@ -42,7 +43,7 @@
+ int check_fname __ARGS((void));
+ int buf_write_all __ARGS((buf_T *buf, int forceit));
+ int get_arglist __ARGS((garray_T *gap, char_u *str));
+-int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp));
++int get_arglist_exp __ARGS((char_u *str, int *fcountp, char_u ***fnamesp, int wig));
+ void set_arglist __ARGS((char_u *str));
+ void check_arg_idx __ARGS((win_T *win));
+ void ex_args __ARGS((exarg_T *eap));
+@@ -83,5 +84,7 @@
+ char_u *get_mess_lang __ARGS((void));
+ void set_lang_var __ARGS((void));
+ void ex_language __ARGS((exarg_T *eap));
++void free_locales __ARGS((void));
+ char_u *get_lang_arg __ARGS((expand_T *xp, int idx));
++char_u *get_locales __ARGS((expand_T *xp, int idx));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/ex_docmd.pro vim73/src/proto/ex_docmd.pro
+--- vim73.orig/src/proto/ex_docmd.pro	2010-08-15 12:30:26.000000000 +0000
++++ vim73/src/proto/ex_docmd.pro	2013-06-07 17:07:34.825575896 +0000
+@@ -1,7 +1,7 @@
+ /* ex_docmd.c */
+ void do_exmode __ARGS((int improved));
+ int do_cmdline_cmd __ARGS((char_u *cmd));
+-int do_cmdline __ARGS((char_u *cmdline, char_u *(*getline)(int, void *, int), void *cookie, int flags));
++int do_cmdline __ARGS((char_u *cmdline, char_u *(*fgetline)(int, void *, int), void *cookie, int flags));
+ int getline_equal __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie, char_u *(*func)(int, void *, int)));
+ void *getline_cookie __ARGS((char_u *(*fgetline)(int, void *, int), void *cookie));
+ int checkforcmd __ARGS((char_u **pp, char *cmd, int len));
+@@ -53,4 +53,5 @@
+ int put_line __ARGS((FILE *fd, char *s));
+ void dialog_msg __ARGS((char_u *buff, char *format, char_u *fname));
+ char_u *get_behave_arg __ARGS((expand_T *xp, int idx));
++void post_chdir __ARGS((int local));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/ex_getln.pro vim73/src/proto/ex_getln.pro
+--- vim73.orig/src/proto/ex_getln.pro	2010-08-15 12:30:27.000000000 +0000
++++ vim73/src/proto/ex_getln.pro	2013-06-07 17:07:34.862242458 +0000
+@@ -31,7 +31,7 @@
+ char_u *addstar __ARGS((char_u *fname, int len, int context));
+ void set_cmd_context __ARGS((expand_T *xp, char_u *str, int len, int col));
+ int expand_cmdline __ARGS((expand_T *xp, char_u *str, int col, int *matchcount, char_u ***matches));
+-int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int))));
++int ExpandGeneric __ARGS((expand_T *xp, regmatch_T *regmatch, int *num_file, char_u ***file, char_u *((*func)(expand_T *, int)), int escaped));
+ char_u *globpath __ARGS((char_u *path, char_u *file, int expand_options));
+ void init_history __ARGS((void));
+ int get_histtype __ARGS((char_u *name));
+@@ -48,8 +48,8 @@
+ void remove_key_from_history __ARGS((void));
+ int get_list_range __ARGS((char_u **str, int *num1, int *num2));
+ void ex_history __ARGS((exarg_T *eap));
+-void prepare_viminfo_history __ARGS((int asklen));
+-int read_viminfo_history __ARGS((vir_T *virp));
++void prepare_viminfo_history __ARGS((int asklen, int writing));
++int read_viminfo_history __ARGS((vir_T *virp, int writing));
+ void finish_viminfo_history __ARGS((void));
+ void write_viminfo_history __ARGS((FILE *fp));
+ void cmd_pchar __ARGS((int c, int offset));
+diff -Naur vim73.orig/src/proto/fileio.pro vim73/src/proto/fileio.pro
+--- vim73.orig/src/proto/fileio.pro	2010-08-15 12:30:28.000000000 +0000
++++ vim73/src/proto/fileio.pro	2013-06-07 17:07:34.865575781 +0000
+@@ -35,6 +35,7 @@
+ void do_autocmd __ARGS((char_u *arg, int forceit));
+ int do_doautocmd __ARGS((char_u *arg, int do_msg));
+ void ex_doautoall __ARGS((exarg_T *eap));
++int check_nomodeline __ARGS((char_u **argp));
+ void aucmd_prepbuf __ARGS((aco_save_T *aco, buf_T *buf));
+ void aucmd_restbuf __ARGS((aco_save_T *aco));
+ int apply_autocmds __ARGS((event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf));
+@@ -43,8 +44,12 @@
+ int trigger_cursorhold __ARGS((void));
+ int has_cursormoved __ARGS((void));
+ int has_cursormovedI __ARGS((void));
++int has_textchanged __ARGS((void));
++int has_textchangedI __ARGS((void));
++int has_insertcharpre __ARGS((void));
+ void block_autocmds __ARGS((void));
+ void unblock_autocmds __ARGS((void));
++char_u *getnextac __ARGS((int c, void *cookie, int indent));
+ int has_autocmd __ARGS((event_T event, char_u *sfname, buf_T *buf));
+ char_u *get_augroup_name __ARGS((expand_T *xp, int idx));
+ char_u *set_context_in_autocmd __ARGS((expand_T *xp, char_u *arg, int doautocmd));
+@@ -54,4 +59,6 @@
+ int match_file_pat __ARGS((char_u *pattern, regprog_T *prog, char_u *fname, char_u *sfname, char_u *tail, int allow_dirs));
+ int match_file_list __ARGS((char_u *list, char_u *sfname, char_u *ffname));
+ char_u *file_pat_to_reg_pat __ARGS((char_u *pat, char_u *pat_end, char *allow_dirs, int no_bslash));
++long read_eintr __ARGS((int fd, void *buf, size_t bufsize));
++long write_eintr __ARGS((int fd, void *buf, size_t bufsize));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/fold.pro vim73/src/proto/fold.pro
+--- vim73.orig/src/proto/fold.pro	2010-08-15 12:30:29.000000000 +0000
++++ vim73/src/proto/fold.pro	2013-06-07 17:07:34.875575753 +0000
+@@ -27,7 +27,7 @@
+ void foldUpdate __ARGS((win_T *wp, linenr_T top, linenr_T bot));
+ void foldUpdateAll __ARGS((win_T *win));
+ int foldMoveTo __ARGS((int updown, int dir, long count));
+-void foldInitWin __ARGS((win_T *newwin));
++void foldInitWin __ARGS((win_T *new_win));
+ int find_wl_entry __ARGS((win_T *win, linenr_T lnum));
+ void foldAdjustVisual __ARGS((void));
+ void foldAdjustCursor __ARGS((void));
+diff -Naur vim73.orig/src/proto/getchar.pro vim73/src/proto/getchar.pro
+--- vim73.orig/src/proto/getchar.pro	2010-08-15 12:30:29.000000000 +0000
++++ vim73/src/proto/getchar.pro	2013-06-07 17:07:34.888909048 +0000
+@@ -4,8 +4,9 @@
+ char_u *get_inserted __ARGS((void));
+ int stuff_empty __ARGS((void));
+ void typeahead_noflush __ARGS((int c));
+-void flush_buffers __ARGS((int typeahead));
++void flush_buffers __ARGS((int flush_typeahead));
+ void ResetRedobuff __ARGS((void));
++void CancelRedo __ARGS((void));
+ void saveRedobuff __ARGS((void));
+ void restoreRedobuff __ARGS((void));
+ void AppendToRedobuff __ARGS((char_u *s));
+@@ -51,6 +52,7 @@
+ int get_map_mode __ARGS((char_u **cmdp, int forceit));
+ void map_clear __ARGS((char_u *cmdp, char_u *arg, int forceit, int abbr));
+ void map_clear_int __ARGS((buf_T *buf, int mode, int local, int abbr));
++char_u *map_mode_to_chars __ARGS((int mode));
+ int map_to_exists __ARGS((char_u *str, char_u *modechars, int abbr));
+ int map_to_exists_mode __ARGS((char_u *rhs, int mode, int abbr));
+ char_u *set_context_in_map_cmd __ARGS((expand_T *xp, char_u *cmd, char_u *arg, int forceit, int isabbrev, int isunmap, cmdidx_T cmdidx));
+@@ -61,7 +63,7 @@
+ int makemap __ARGS((FILE *fd, buf_T *buf));
+ int put_escstr __ARGS((FILE *fd, char_u *strstart, int what));
+ void check_map_keycodes __ARGS((void));
+-char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr));
++char_u *check_map __ARGS((char_u *keys, int mode, int exact, int ign_mod, int abbr, mapblock_T **mp_ptr, int *local_ptr));
+ void init_mappings __ARGS((void));
+ void add_map __ARGS((char_u *map, int mode));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/gui_athena.pro vim73/src/proto/gui_athena.pro
+--- vim73.orig/src/proto/gui_athena.pro	2010-08-15 12:31:06.000000000 +0000
++++ vim73/src/proto/gui_athena.pro	2013-06-07 17:07:34.902242343 +0000
+@@ -27,5 +27,5 @@
+ void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
+ Window gui_x11_get_wid __ARGS((void));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
++int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/gui_gtk.pro vim73/src/proto/gui_gtk.pro
+--- vim73.orig/src/proto/gui_gtk.pro	2010-08-15 12:31:03.000000000 +0000
++++ vim73/src/proto/gui_gtk.pro	2013-06-07 17:07:34.925575610 +0000
+@@ -13,7 +13,7 @@
+ void gui_mch_destroy_scrollbar __ARGS((scrollbar_T *sb));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+ char_u *gui_mch_browsedir __ARGS((char_u *title, char_u *initdir));
+-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield));
++int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int def_but, char_u *textfield, int ex_cmd));
+ void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+ void gui_make_popup __ARGS((char_u *path_name, int mouse_pos));
+ void gui_mch_find_dialog __ARGS((exarg_T *eap));
+diff -Naur vim73.orig/src/proto/gui_gtk_x11.pro vim73/src/proto/gui_gtk_x11.pro
+--- vim73.orig/src/proto/gui_gtk_x11.pro	2010-08-15 12:31:07.000000000 +0000
++++ vim73/src/proto/gui_gtk_x11.pro	2013-06-07 17:07:34.932242258 +0000
+@@ -4,6 +4,7 @@
+ void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+ void gui_mch_stop_blink __ARGS((void));
+ void gui_mch_start_blink __ARGS((void));
++int gui_mch_early_init_check __ARGS((void));
+ int gui_mch_init_check __ARGS((void));
+ void gui_mch_show_tabline __ARGS((int showit));
+ int gui_mch_showing_tabline __ARGS((void));
+@@ -20,6 +21,7 @@
+ void gui_mch_set_winpos __ARGS((int x, int y));
+ int gui_mch_maximized __ARGS((void));
+ void gui_mch_unmaximize __ARGS((void));
++void gui_mch_newfont __ARGS((void));
+ void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
+ void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+ void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
+@@ -57,6 +59,7 @@
+ void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+ int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+ void clip_mch_set_selection __ARGS((VimClipboard *cbd));
++int clip_gtk_owner_exists __ARGS((VimClipboard *cbd));
+ void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+ void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+ void gui_mch_draw_menubar __ARGS((void));
+diff -Naur vim73.orig/src/proto/gui_mac.pro vim73/src/proto/gui_mac.pro
+--- vim73.orig/src/proto/gui_mac.pro	2010-08-14 19:40:45.000000000 +0000
++++ vim73/src/proto/gui_mac.pro	2013-06-07 17:07:34.948908877 +0000
+@@ -81,7 +81,7 @@
+ int gui_mch_get_mouse_y __ARGS((void));
+ void gui_mch_setmouse __ARGS((int x, int y));
+ void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
++int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+ void gui_mch_set_foreground __ARGS((void));
+ void gui_mch_show_tabline __ARGS((int showit));
+diff -Naur vim73.orig/src/proto/gui_motif.pro vim73/src/proto/gui_motif.pro
+--- vim73.orig/src/proto/gui_motif.pro	2010-08-15 12:31:04.000000000 +0000
++++ vim73/src/proto/gui_motif.pro	2013-06-07 17:07:34.962242172 +0000
+@@ -29,7 +29,7 @@
+ void gui_mch_set_scrollbar_colors __ARGS((scrollbar_T *sb));
+ Window gui_x11_get_wid __ARGS((void));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *dflt, char_u *ext, char_u *initdir, char_u *filter));
+-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield));
++int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *button_names, int dfltbutton, char_u *textfield, int ex_cmd));
+ void gui_mch_enable_footer __ARGS((int showit));
+ void gui_mch_set_footer __ARGS((char_u *s));
+ void gui_mch_show_toolbar __ARGS((int showit));
+diff -Naur vim73.orig/src/proto/gui_photon.pro vim73/src/proto/gui_photon.pro
+--- vim73.orig/src/proto/gui_photon.pro	2010-08-15 12:31:10.000000000 +0000
++++ vim73/src/proto/gui_photon.pro	2013-06-07 17:07:34.972242143 +0000
+@@ -8,7 +8,7 @@
+ void gui_mch_update __ARGS((void));
+ int gui_mch_wait_for_chars __ARGS((int wtime));
+ char_u *gui_mch_browse __ARGS((int saving, char_u *title, char_u *default_name, char_u *ext, char_u *initdir, char_u *filter));
+-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield));
++int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int default_button, char_u *textfield, int ex_cmd));
+ int gui_mch_get_winpos __ARGS((int *x, int *y));
+ void gui_mch_set_winpos __ARGS((int x, int y));
+ void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height, int direction));
+diff -Naur vim73.orig/src/proto/gui_riscos.pro vim73/src/proto/gui_riscos.pro
+--- vim73.orig/src/proto/gui_riscos.pro	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/proto/gui_riscos.pro	1970-01-01 00:00:00.000000000 +0000
+@@ -1,66 +0,0 @@
+-/* Prototypes for gui_riscos.c
+- * Based on gui_x11_pro.h (10 March 2002 version)
+- */
+-void gui_mch_prepare __ARGS((int *argc, char **argv));
+-int gui_mch_init_check __ARGS((void));
+-int gui_mch_init __ARGS((void));
+-void gui_mch_uninit __ARGS((void));
+-void gui_mch_new_colors __ARGS((void));
+-int gui_mch_open __ARGS((void));
+-void gui_init_tooltip_font __ARGS((void));
+-void gui_init_menu_font __ARGS((void));void gui_mch_exit __ARGS((int rc));
+-int gui_mch_get_winpos __ARGS((int *x, int *y));
+-void gui_mch_set_winpos __ARGS((int x, int y));
+-void gui_mch_set_shellsize __ARGS((int width, int height, int min_width, int min_height, int base_width, int base_height));
+-void gui_mch_get_screen_dimensions __ARGS((int *screen_w, int *screen_h));
+-int gui_mch_init_font __ARGS((char_u *font_name, int do_fontset));
+-GuiFont gui_mch_get_font __ARGS((char_u *name, int giveErrorIfMissing));
+-int gui_mch_adjust_charheight __ARGS((void));
+-void gui_mch_set_font __ARGS((GuiFont font));
+-void gui_mch_set_fontset __ARGS((GuiFontset fontset));
+-void gui_mch_free_font __ARGS((GuiFont font));
+-void gui_mch_free_fontset __ARGS((GuiFontset fontset));
+-GuiFontset gui_mch_get_fontset __ARGS((char_u *name, int giveErrorIfMissing, int fixed_width));
+-guicolor_T gui_mch_get_color __ARGS((char_u *reqname));
+-void gui_mch_set_fg_color __ARGS((guicolor_T color));
+-void gui_mch_set_bg_color __ARGS((guicolor_T color));
+-void gui_mch_draw_string __ARGS((int row, int col, char_u *s, int len, int flags));
+-int gui_mch_haskey __ARGS((char_u *name));
+-void gui_mch_beep __ARGS((void));
+-void gui_mch_flash __ARGS((int msec));
+-void gui_mch_invert_rectangle __ARGS((int r, int c, int nr, int nc));
+-void gui_mch_iconify __ARGS((void));
+-void gui_mch_set_foreground __ARGS((void));
+-void gui_mch_draw_hollow_cursor __ARGS((guicolor_T color));
+-void gui_mch_draw_part_cursor __ARGS((int w, int h, guicolor_T color));
+-void gui_mch_update __ARGS((void));
+-int gui_mch_wait_for_chars __ARGS((long wtime));
+-void gui_mch_flush __ARGS((void));
+-void gui_mch_clear_block __ARGS((int row1, int col1, int row2, int col2));
+-void gui_mch_clear_all __ARGS((void));
+-void gui_mch_delete_lines __ARGS((int row, int num_lines));
+-void gui_mch_insert_lines __ARGS((int row, int num_lines));
+-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+-void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+-void gui_mch_menu_hidden __ARGS((vimmenu_T *menu, int hidden));
+-void gui_mch_draw_menubar __ARGS((void));
+-void gui_mch_set_blinking __ARGS((long waittime, long on, long off));
+-void gui_mch_stop_blink __ARGS((void));
+-void gui_mch_start_blink __ARGS((void));
+-void process_event __ARGS((int event, int *block));
+-void gui_mch_show_popupmenu __ARGS((vimmenu_T *menu));
+-long_u gui_mch_get_rgb __ARGS((guicolor_T pixel));
+-void gui_mch_getmouse __ARGS((int *x, int *y));
+-void gui_mch_setmouse __ARGS((int x, int y));
+-void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+-void gui_mch_destroy_sign __ARGS((XImage *sign));
+-void gui_mch_mousehide __ARGS((int hide));
+-void mch_set_mouse_shape __ARGS((int shape));
+-void gui_mch_menu_set_tip __ARGS((vimmenu_T *menu));
+-
+-void ro_redraw_title __ARGS((int window));
+-int ro_ok_to_quit __ARGS((void));
+-/* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/gui_w16.pro vim73/src/proto/gui_w16.pro
+--- vim73.orig/src/proto/gui_w16.pro	2010-08-15 12:31:09.000000000 +0000
++++ vim73/src/proto/gui_w16.pro	2013-06-07 17:07:34.978908791 +0000
+@@ -50,6 +50,7 @@
+ void gui_mch_insert_lines __ARGS((int row, int num_lines));
+ void gui_mch_exit __ARGS((int rc));
+ int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
++void gui_mch_wide_font_changed __ARGS((void));
+ int gui_mch_maximized __ARGS((void));
+ void gui_mch_newfont __ARGS((void));
+ void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
+@@ -74,6 +75,6 @@
+ void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
+ void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
+ void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
++int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ void gui_mch_set_foreground __ARGS((void));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/gui_w32.pro vim73/src/proto/gui_w32.pro
+--- vim73.orig/src/proto/gui_w32.pro	2010-08-15 12:31:09.000000000 +0000
++++ vim73/src/proto/gui_w32.pro	2013-06-07 17:07:34.995575410 +0000
+@@ -50,6 +50,7 @@
+ void gui_mch_insert_lines __ARGS((int row, int num_lines));
+ void gui_mch_exit __ARGS((int rc));
+ int gui_mch_init_font __ARGS((char_u *font_name, int fontset));
++void gui_mch_wide_font_changed __ARGS((void));
+ int gui_mch_maximized __ARGS((void));
+ void gui_mch_newfont __ARGS((void));
+ void gui_mch_settitle __ARGS((char_u *title, char_u *icon));
+@@ -81,7 +82,7 @@
+ void gui_mch_add_menu_item __ARGS((vimmenu_T *menu, int idx));
+ void gui_mch_destroy_menu __ARGS((vimmenu_T *menu));
+ void gui_mch_menu_grey __ARGS((vimmenu_T *menu, int grey));
+-int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
++int gui_mch_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ void gui_mch_set_foreground __ARGS((void));
+ void gui_mch_drawsign __ARGS((int row, int col, int typenr));
+ void *gui_mch_register_sign __ARGS((char_u *signfile));
+diff -Naur vim73.orig/src/proto/if_lua.pro vim73/src/proto/if_lua.pro
+--- vim73.orig/src/proto/if_lua.pro	2010-07-22 19:29:02.000000000 +0000
++++ vim73/src/proto/if_lua.pro	2013-06-07 17:07:35.078908505 +0000
+@@ -6,4 +6,6 @@
+ void ex_luafile __ARGS((exarg_T *eap));
+ void lua_buffer_free __ARGS((buf_T *buf));
+ void lua_window_free __ARGS((win_T *win));
++void do_luaeval __ARGS((char_u *str, typval_T *arg, typval_T *rettv));
++void set_ref_in_lua __ARGS((int copyID));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/if_mzsch.pro vim73/src/proto/if_mzsch.pro
+--- vim73.orig/src/proto/if_mzsch.pro	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/proto/if_mzsch.pro	2013-06-07 17:07:35.085575153 +0000
+@@ -14,6 +14,7 @@
+ void mzvim_reset_timer __ARGS((void));
+ void *mzvim_eval_string __ARGS((char_u *str));
+ int mzthreads_allowed __ARGS((void));
+-void mzscheme_main __ARGS((void));
++int mzscheme_main __ARGS((int argc, char **argv));
+ void do_mzeval __ARGS((char_u *str, typval_T *rettv));
++int vim_main2 __ARGS((int argc, char **argv));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/if_python.pro vim73/src/proto/if_python.pro
+--- vim73.orig/src/proto/if_python.pro	2010-08-15 12:30:35.000000000 +0000
++++ vim73/src/proto/if_python.pro	2013-06-07 17:07:35.135575010 +0000
+@@ -3,7 +3,11 @@
+ void python_end __ARGS((void));
+ int python_loaded __ARGS((void));
+ void ex_python __ARGS((exarg_T *eap));
++void ex_pydo __ARGS((exarg_T *eap));
+ void ex_pyfile __ARGS((exarg_T *eap));
+ void python_buffer_free __ARGS((buf_T *buf));
+ void python_window_free __ARGS((win_T *win));
++void python_tabpage_free __ARGS((tabpage_T *tab));
++void do_pyeval __ARGS((char_u *str, typval_T *rettv));
++void set_ref_in_python __ARGS((int copyID));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/if_python3.pro vim73/src/proto/if_python3.pro
+--- vim73.orig/src/proto/if_python3.pro	2010-08-15 12:30:36.000000000 +0000
++++ vim73/src/proto/if_python3.pro	2013-06-07 17:07:35.162241601 +0000
+@@ -3,7 +3,11 @@
+ void python3_end __ARGS((void));
+ int python3_loaded __ARGS((void));
+ void ex_py3 __ARGS((exarg_T *eap));
++void ex_py3do __ARGS((exarg_T *eap));
+ void ex_py3file __ARGS((exarg_T *eap));
+ void python3_buffer_free __ARGS((buf_T *buf));
+ void python3_window_free __ARGS((win_T *win));
++void python3_tabpage_free __ARGS((tabpage_T *tab));
++void do_py3eval __ARGS((char_u *str, typval_T *rettv));
++void set_ref_in_python3 __ARGS((int copyID));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/if_ruby.pro vim73/src/proto/if_ruby.pro
+--- vim73.orig/src/proto/if_ruby.pro	2010-08-15 12:30:36.000000000 +0000
++++ vim73/src/proto/if_ruby.pro	2013-06-07 17:07:35.168908248 +0000
+@@ -6,4 +6,5 @@
+ void ex_rubyfile __ARGS((exarg_T *eap));
+ void ruby_buffer_free __ARGS((buf_T *buf));
+ void ruby_window_free __ARGS((win_T *win));
++void vim_ruby_init __ARGS((void *stack_start));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/mark.pro vim73/src/proto/mark.pro
+--- vim73.orig/src/proto/mark.pro	2010-08-15 12:30:38.000000000 +0000
++++ vim73/src/proto/mark.pro	2013-06-07 17:07:35.222241429 +0000
+@@ -5,8 +5,9 @@
+ void checkpcmark __ARGS((void));
+ pos_T *movemark __ARGS((int count));
+ pos_T *movechangelist __ARGS((int count));
++pos_T *getmark_buf __ARGS((buf_T *buf, int c, int changefile));
+ pos_T *getmark __ARGS((int c, int changefile));
+-pos_T *getmark_fnum __ARGS((int c, int changefile, int *fnum));
++pos_T *getmark_buf_fnum __ARGS((buf_T *buf, int c, int changefile, int *fnum));
+ pos_T *getnextmark __ARGS((pos_T *startpos, int dir, int begin_line));
+ void fmarks_check_names __ARGS((buf_T *buf));
+ int check_mark __ARGS((pos_T *pos));
+diff -Naur vim73.orig/src/proto/mbyte.pro vim73/src/proto/mbyte.pro
+--- vim73.orig/src/proto/mbyte.pro	2010-08-15 12:30:44.000000000 +0000
++++ vim73/src/proto/mbyte.pro	2013-06-07 17:07:35.232241401 +0000
+@@ -2,7 +2,9 @@
+ int enc_canon_props __ARGS((char_u *name));
+ char_u *mb_init __ARGS((void));
+ int bomb_size __ARGS((void));
++void remove_bom __ARGS((char_u *s));
+ int mb_get_class __ARGS((char_u *p));
++int mb_get_class_buf __ARGS((char_u *p, buf_T *buf));
+ int dbcs_class __ARGS((unsigned lead, unsigned trail));
+ int latin_char2len __ARGS((int c));
+ int latin_char2bytes __ARGS((int c, char_u *buf));
+@@ -56,7 +58,7 @@
+ int utf_valid_string __ARGS((char_u *s, char_u *end));
+ int dbcs_screen_tail_off __ARGS((char_u *base, char_u *p));
+ void mb_adjust_cursor __ARGS((void));
+-void mb_adjustpos __ARGS((pos_T *lp));
++void mb_adjustpos __ARGS((buf_T *buf, pos_T *lp));
+ char_u *mb_prevptr __ARGS((char_u *line, char_u *p));
+ int mb_charlen __ARGS((char_u *str));
+ int mb_charlen_len __ARGS((char_u *str, int len));
+diff -Naur vim73.orig/src/proto/message.pro vim73/src/proto/message.pro
+--- vim73.orig/src/proto/message.pro	2010-08-15 12:30:41.000000000 +0000
++++ vim73/src/proto/message.pro	2013-06-07 17:07:35.268907963 +0000
+@@ -4,7 +4,7 @@
+ int msg_attr __ARGS((char_u *s, int attr));
+ int msg_attr_keep __ARGS((char_u *s, int attr, int keep));
+ char_u *msg_strtrunc __ARGS((char_u *s, int force));
+-void trunc_string __ARGS((char_u *s, char_u *buf, int room));
++void trunc_string __ARGS((char_u *s, char_u *buf, int room, int buflen));
+ void reset_last_sourcing __ARGS((void));
+ void msg_source __ARGS((int attr));
+ int emsg_not_now __ARGS((void));
+@@ -33,6 +33,7 @@
+ int msg_outtrans_len_attr __ARGS((char_u *msgstr, int len, int attr));
+ void msg_make __ARGS((char_u *arg));
+ int msg_outtrans_special __ARGS((char_u *strstart, int from));
++char_u *str2special_save __ARGS((char_u *str, int is_lhs));
+ char_u *str2special __ARGS((char_u **sp, int from));
+ void str2specialbuf __ARGS((char_u *sp, char_u *buf, int len));
+ void msg_prt_line __ARGS((char_u *s, int list));
+@@ -44,6 +45,7 @@
+ void may_clear_sb_text __ARGS((void));
+ void clear_sb_text __ARGS((void));
+ void show_sb_text __ARGS((void));
++void msg_sb_eol __ARGS((void));
+ int msg_use_printf __ARGS((void));
+ void mch_errmsg __ARGS((char *str));
+ void mch_msg __ARGS((char *str));
+@@ -63,7 +65,7 @@
+ int verbose_open __ARGS((void));
+ void give_warning __ARGS((char_u *message, int hl));
+ void msg_advance __ARGS((int col));
+-int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield));
++int do_dialog __ARGS((int type, char_u *title, char_u *message, char_u *buttons, int dfltbutton, char_u *textfield, int ex_cmd));
+ void display_confirm_msg __ARGS((void));
+ int vim_dialog_yesno __ARGS((int type, char_u *title, char_u *message, int dflt));
+ int vim_dialog_yesnocancel __ARGS((int type, char_u *title, char_u *message, int dflt));
+diff -Naur vim73.orig/src/proto/misc1.pro vim73/src/proto/misc1.pro
+--- vim73.orig/src/proto/misc1.pro	2010-08-15 12:30:42.000000000 +0000
++++ vim73/src/proto/misc1.pro	2013-06-07 17:07:35.272241286 +0000
+@@ -5,8 +5,9 @@
+ int get_indent_str __ARGS((char_u *ptr, int ts));
+ int set_indent __ARGS((int size, int flags));
+ int get_number_indent __ARGS((linenr_T lnum));
+-int open_line __ARGS((int dir, int flags, int old_indent));
+-int get_leader_len __ARGS((char_u *line, char_u **flags, int backward));
++int open_line __ARGS((int dir, int flags, int second_line_indent));
++int get_leader_len __ARGS((char_u *line, char_u **flags, int backward, int include_space));
++int get_last_leader_offset __ARGS((char_u *line, char_u **flags));
+ int plines __ARGS((linenr_T lnum));
+ int plines_win __ARGS((win_T *wp, linenr_T lnum, int winheight));
+ int plines_nofill __ARGS((linenr_T lnum));
+@@ -41,6 +42,7 @@
+ void check_status __ARGS((buf_T *buf));
+ void change_warning __ARGS((int col));
+ int ask_yesno __ARGS((char_u *str, int direct));
++int is_mouse_key __ARGS((int c));
+ int get_keystroke __ARGS((void));
+ int get_number __ARGS((int colon, int *mouse_used));
+ int prompt_for_number __ARGS((int *mouse_used));
+@@ -49,6 +51,7 @@
+ void vim_beep __ARGS((void));
+ void init_homedir __ARGS((void));
+ void free_homedir __ARGS((void));
++void free_users __ARGS((void));
+ char_u *expand_env_save __ARGS((char_u *src));
+ char_u *expand_env_save_opt __ARGS((char_u *src, int one));
+ void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
+@@ -56,6 +59,8 @@
+ char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
+ void vim_setenv __ARGS((char_u *name, char_u *val));
+ char_u *get_env_name __ARGS((expand_T *xp, int idx));
++char_u *get_users __ARGS((expand_T *xp, int idx));
++int match_user __ARGS((char_u *name));
+ void home_replace __ARGS((buf_T *buf, char_u *src, char_u *dst, int dstlen, int one));
+ char_u *home_replace_save __ARGS((buf_T *buf, char_u *src));
+ int fullpathcmp __ARGS((char_u *s1, char_u *s2, int checkname));
+diff -Naur vim73.orig/src/proto/misc2.pro vim73/src/proto/misc2.pro
+--- vim73.orig/src/proto/misc2.pro	2010-08-15 12:30:42.000000000 +0000
++++ vim73/src/proto/misc2.pro	2013-06-07 17:07:35.288907905 +0000
+@@ -14,6 +14,7 @@
+ linenr_T get_cursor_rel_lnum __ARGS((win_T *wp, linenr_T lnum));
+ void check_cursor_lnum __ARGS((void));
+ void check_cursor_col __ARGS((void));
++void check_cursor_col_win __ARGS((win_T *win));
+ void check_cursor __ARGS((void));
+ void adjust_cursor_col __ARGS((void));
+ int leftcol_changed __ARGS((void));
+@@ -40,6 +41,7 @@
+ void copy_chars __ARGS((char_u *ptr, size_t count, int c));
+ void del_trailing_spaces __ARGS((char_u *ptr));
+ void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
++void vim_strcat __ARGS((char_u *to, char_u *from, size_t tosize));
+ int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
+ void vim_free __ARGS((void *x));
+ int vim_stricmp __ARGS((char *s1, char *s2));
+@@ -56,6 +58,7 @@
+ char_u *ga_concat_strings __ARGS((garray_T *gap));
+ void ga_concat __ARGS((garray_T *gap, char_u *s));
+ void ga_append __ARGS((garray_T *gap, int c));
++void append_ga_line __ARGS((garray_T *gap));
+ int name_to_mod_mask __ARGS((int c));
+ int simplify_key __ARGS((int key, int *modifiers));
+ int handle_x_keys __ARGS((int key));
+@@ -113,4 +116,5 @@
+ char_u *read_string __ARGS((FILE *fd, int cnt));
+ int put_bytes __ARGS((FILE *fd, long_u nr, int len));
+ void put_time __ARGS((FILE *fd, time_t the_time));
++int has_non_ascii __ARGS((char_u *s));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/move.pro vim73/src/proto/move.pro
+--- vim73.orig/src/proto/move.pro	2010-08-15 12:30:43.000000000 +0000
++++ vim73/src/proto/move.pro	2013-06-07 17:07:35.292241229 +0000
+@@ -24,7 +24,7 @@
+ int curwin_col_off __ARGS((void));
+ int win_col_off2 __ARGS((win_T *wp));
+ int curwin_col_off2 __ARGS((void));
+-void curs_columns __ARGS((int scroll));
++void curs_columns __ARGS((int may_scroll));
+ void scrolldown __ARGS((long line_count, int byfold));
+ void scrollup __ARGS((long line_count, int byfold));
+ void check_topfill __ARGS((win_T *wp, int down));
+diff -Naur vim73.orig/src/proto/ops.pro vim73/src/proto/ops.pro
+--- vim73.orig/src/proto/ops.pro	2010-08-15 12:30:45.000000000 +0000
++++ vim73/src/proto/ops.pro	2013-06-07 17:07:35.325574467 +0000
+@@ -15,6 +15,7 @@
+ int may_get_selection __ARGS((int regname));
+ void *get_register __ARGS((int name, int copy));
+ void put_register __ARGS((int name, void *reg));
++void free_register __ARGS((void *reg));
+ int yank_register_mline __ARGS((int regname));
+ int do_record __ARGS((int c));
+ int do_execreg __ARGS((int regname, int colon, int addcr, int silent));
+@@ -36,7 +37,7 @@
+ int preprocs_left __ARGS((void));
+ int get_register_name __ARGS((int num));
+ void ex_display __ARGS((exarg_T *eap));
+-int do_join __ARGS((long count, int insert_space, int save_undo));
++int do_join __ARGS((long count, int insert_space, int save_undo, int use_formatoptions));
+ void op_format __ARGS((oparg_T *oap, int keep_cursor));
+ void op_formatexpr __ARGS((oparg_T *oap));
+ int fex_format __ARGS((linenr_T lnum, long count, int c));
+diff -Naur vim73.orig/src/proto/option.pro vim73/src/proto/option.pro
+--- vim73.orig/src/proto/option.pro	2010-08-15 12:30:46.000000000 +0000
++++ vim73/src/proto/option.pro	2013-06-07 17:07:35.338907763 +0000
+@@ -22,7 +22,8 @@
+ char_u *check_colorcolumn __ARGS((win_T *wp));
+ char_u *check_stl_option __ARGS((char_u *s));
+ int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags));
+-void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
++int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from));
++char_u *set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags));
+ char_u *get_term_code __ARGS((char_u *tname));
+ char_u *get_highlight_default __ARGS((void));
+ char_u *get_encoding_default __ARGS((void));
+@@ -33,6 +34,7 @@
+ void free_one_termoption __ARGS((char_u *var));
+ void set_term_defaults __ARGS((void));
+ void comp_col __ARGS((void));
++void unset_global_local_option __ARGS((char_u *name, void *from));
+ char_u *get_equalprg __ARGS((void));
+ void win_copy_options __ARGS((win_T *wp_from, win_T *wp_to));
+ void copy_winopt __ARGS((winopt_T *from, winopt_T *to));
+@@ -52,8 +54,12 @@
+ void vimrc_found __ARGS((char_u *fname, char_u *envname));
+ void change_compatible __ARGS((int on));
+ int option_was_set __ARGS((char_u *name));
++void reset_option_was_set __ARGS((char_u *name));
+ int can_bs __ARGS((int what));
+ void save_file_ff __ARGS((buf_T *buf));
+-int file_ff_differs __ARGS((buf_T *buf));
++int file_ff_differs __ARGS((buf_T *buf, int ignore_empty));
+ int check_ff_value __ARGS((char_u *p));
++long get_sw_value __ARGS((void));
++long get_sts_value __ARGS((void));
++void find_mps_values __ARGS((int *initc, int *findc, int *backwards, int switchit));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/os_beos.pro vim73/src/proto/os_beos.pro
+--- vim73.orig/src/proto/os_beos.pro	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/proto/os_beos.pro	2013-06-07 17:07:35.358907706 +0000
+@@ -0,0 +1,4 @@
++/* os_beos.c */
++void beos_cleanup_read_thread __ARGS((void));
++int beos_select __ARGS((int nbits, struct fd_set *rbits, struct fd_set *wbits, struct fd_set *ebits, struct timeval *timeout));
++/* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/os_mswin.pro vim73/src/proto/os_mswin.pro
+--- vim73.orig/src/proto/os_mswin.pro	2010-08-15 12:31:15.000000000 +0000
++++ vim73/src/proto/os_mswin.pro	2013-06-07 17:07:35.455574096 +0000
+@@ -22,17 +22,6 @@
+ int can_end_termcap_mode __ARGS((int give_msg));
+ int mch_screenmode __ARGS((char_u *arg));
+ int mch_libcall __ARGS((char_u *libname, char_u *funcname, char_u *argstring, int argint, char_u **string_result, int *number_result));
+-int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
+-int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
+-void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
+-void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
+-int clip_mch_own_selection __ARGS((VimClipboard *cbd));
+-void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
+-short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
+-char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
+-void clip_mch_request_selection __ARGS((VimClipboard *cbd));
+-void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
+-void clip_mch_set_selection __ARGS((VimClipboard *cbd));
+ void DumpPutS __ARGS((const char *psz));
+ int mch_get_winpos __ARGS((int *x, int *y));
+ void mch_set_winpos __ARGS((int x, int y));
+diff -Naur vim73.orig/src/proto/os_riscos.pro vim73/src/proto/os_riscos.pro
+--- vim73.orig/src/proto/os_riscos.pro	2010-08-15 12:31:16.000000000 +0000
++++ vim73/src/proto/os_riscos.pro	1970-01-01 00:00:00.000000000 +0000
+@@ -1,49 +0,0 @@
+-/* os_riscos.c */
+-void mch_write __ARGS((char_u *s, int len));
+-int mch_inchar __ARGS((char_u *buf, int maxlen, long wtime, int tb_change_cnt));
+-int mch_char_avail __ARGS((void));
+-long_u mch_avail_mem __ARGS((int special));
+-void mch_delay __ARGS((long msec, int ignoreinput));
+-void mch_suspend __ARGS((void));
+-void mch_init __ARGS((void));
+-int mch_check_win __ARGS((int argc, char **argv));
+-int mch_input_isatty __ARGS((void));
+-int mch_can_restore_title __ARGS((void));
+-int mch_can_restore_icon __ARGS((void));
+-void mch_settitle __ARGS((char_u *title, char_u *icon));
+-void mch_restore_title __ARGS((int which));
+-int mch_get_user_name __ARGS((char_u *s, int len));
+-void mch_get_host_name __ARGS((char_u *s, int len));
+-long mch_get_pid __ARGS((void));
+-int mch_dirname __ARGS((char_u *buf, int len));
+-int mch_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+-int mch_isFullName __ARGS((char_u *fname));
+-long mch_getperm __ARGS((char_u *name));
+-int mch_setperm __ARGS((char_u *name, long perm));
+-void mch_hide __ARGS((char_u *name));
+-int mch_isdir __ARGS((char_u *name));
+-int mch_can_exe __ARGS((char_u *name));
+-int mch_nodetype __ARGS((char_u *name));
+-void mch_early_init __ARGS((void));
+-void mch_exit __ARGS((int r));
+-void mch_settmode __ARGS((int tmode));
+-void mch_setmouse __ARGS((int on));
+-int mch_screenmode __ARGS((char_u *arg));
+-int mch_get_shellsize __ARGS((void));
+-void mch_set_shellsize __ARGS((void));
+-void mch_new_shellsize __ARGS((void));
+-int mch_call_shell __ARGS((char_u *cmd, int options));
+-void mch_breakcheck __ARGS((void));
+-int mch_expandpath __ARGS((garray_T *gap, char_u *path, int flags));
+-int expand_section __ARGS((garray_T *gap, char_u *root, char_u *rest, int flags));
+-int mch_expand_wildcards __ARGS((int num_pat, char_u **pat, int *num_file, char_u ***file, int flags));
+-int mch_has_exp_wildcard __ARGS((char_u *p));
+-int mch_has_wildcard __ARGS((char_u *p));
+-int mch_remove __ARGS((char_u *file));
+-char_u *mch_munge_fname __ARGS((char_u *fname));
+-int ro_buflist_add __ARGS((char_u *old_name));
+-int mch_chdir __ARGS((char_u *dir));
+-void mch_read_filetype __ARGS((char_u *file));
+-void mch_set_filetype __ARGS((char_u *file, char_u *type));
+-int mch_check_filetype __ARGS((char_u *fname, char_u *type));
+-/* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/os_win32.pro vim73/src/proto/os_win32.pro
+--- vim73.orig/src/proto/os_win32.pro	2010-08-15 12:31:14.000000000 +0000
++++ vim73/src/proto/os_win32.pro	2013-06-07 17:07:35.505573953 +0000
+@@ -1,4 +1,5 @@
+ /* os_win32.c */
++HINSTANCE vimLoadLib __ARGS((char *name));
+ int dyn_libintl_init __ARGS((char *libname));
+ void dyn_libintl_end __ARGS((void));
+ void PlatformId __ARGS((void));
+@@ -19,7 +20,9 @@
+ int mch_setperm __ARGS((char_u *name, long perm));
+ void mch_hide __ARGS((char_u *name));
+ int mch_isdir __ARGS((char_u *name));
++int mch_mkdir __ARGS((char_u *name));
+ int mch_is_linked __ARGS((char_u *fname));
++int win32_fileinfo __ARGS((char_u *fname, BY_HANDLE_FILE_INFORMATION *info));
+ int mch_writable __ARGS((char_u *name));
+ int mch_can_exe __ARGS((char_u *name));
+ int mch_nodetype __ARGS((char_u *name));
+diff -Naur vim73.orig/src/proto/screen.pro vim73/src/proto/screen.pro
+--- vim73.orig/src/proto/screen.pro	2010-08-15 12:30:50.000000000 +0000
++++ vim73/src/proto/screen.pro	2013-06-07 17:07:35.568907106 +0000
+@@ -31,8 +31,8 @@
+ void screen_draw_rectangle __ARGS((int row, int col, int height, int width, int invert));
+ void screen_fill __ARGS((int start_row, int end_row, int start_col, int end_col, int c1, int c2, int attr));
+ void check_for_delay __ARGS((int check_msg_scroll));
+-int screen_valid __ARGS((int clear));
+-void screenalloc __ARGS((int clear));
++int screen_valid __ARGS((int doclear));
++void screenalloc __ARGS((int doclear));
+ void free_screenlines __ARGS((void));
+ void screenclear __ARGS((void));
+ int can_clear __ARGS((char_u *p));
+@@ -50,4 +50,6 @@
+ int messaging __ARGS((void));
+ void showruler __ARGS((int always));
+ int number_width __ARGS((win_T *wp));
++int screen_screencol __ARGS((void));
++int screen_screenrow __ARGS((void));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/search.pro vim73/src/proto/search.pro
+--- vim73.orig/src/proto/search.pro	2010-08-15 12:30:51.000000000 +0000
++++ vim73/src/proto/search.pro	2013-06-07 17:07:35.572240430 +0000
+@@ -32,6 +32,7 @@
+ int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
+ int current_par __ARGS((oparg_T *oap, long count, int include, int type));
+ int current_quote __ARGS((oparg_T *oap, long count, int include, int quotechar));
++int current_search __ARGS((long count, int forward));
+ int linewhite __ARGS((linenr_T lnum));
+ void find_pattern_in_path __ARGS((char_u *ptr, int dir, int len, int whole, int skip_comments, int type, long count, int action, linenr_T start_lnum, linenr_T end_lnum));
+ int read_viminfo_search_pattern __ARGS((vir_T *virp, int force));
+diff -Naur vim73.orig/src/proto/sha256.pro vim73/src/proto/sha256.pro
+--- vim73.orig/src/proto/sha256.pro	2010-08-15 12:30:52.000000000 +0000
++++ vim73/src/proto/sha256.pro	2013-06-07 17:07:35.592240372 +0000
+@@ -2,6 +2,7 @@
+ void sha256_start __ARGS((context_sha256_T *ctx));
+ void sha256_update __ARGS((context_sha256_T *ctx, char_u *input, UINT32_T length));
+ void sha256_finish __ARGS((context_sha256_T *ctx, char_u digest[32]));
++char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len));
+ char_u *sha256_key __ARGS((char_u *buf, char_u *salt, int salt_len));
+ int sha256_self_test __ARGS((void));
+ void sha2_seed __ARGS((char_u *header, int header_len, char_u *salt, int salt_len));
+diff -Naur vim73.orig/src/proto/syntax.pro vim73/src/proto/syntax.pro
+--- vim73.orig/src/proto/syntax.pro	2010-08-15 12:30:54.000000000 +0000
++++ vim73/src/proto/syntax.pro	2013-06-07 17:07:35.595573696 +0000
+@@ -19,6 +19,7 @@
+ int syn_get_sub_char __ARGS((void));
+ int syn_get_stack_item __ARGS((int i));
+ int syn_get_foldlevel __ARGS((win_T *wp, long lnum));
++void ex_syntime __ARGS((exarg_T *eap));
+ void init_highlight __ARGS((int both, int reset));
+ int load_colors __ARGS((char_u *name));
+ void do_highlight __ARGS((char_u *line, int forceit, int init));
+diff -Naur vim73.orig/src/proto/term.pro vim73/src/proto/term.pro
+--- vim73.orig/src/proto/term.pro	2010-08-15 12:30:56.000000000 +0000
++++ vim73/src/proto/term.pro	2013-06-07 17:07:35.618906963 +0000
+@@ -34,6 +34,7 @@
+ void starttermcap __ARGS((void));
+ void stoptermcap __ARGS((void));
+ void may_req_termresponse __ARGS((void));
++void may_req_ambiguous_character_width __ARGS((void));
+ int swapping_screen __ARGS((void));
+ void setmouse __ARGS((void));
+ int mouse_has __ARGS((int c));
+@@ -50,7 +51,7 @@
+ char_u *get_termcode __ARGS((int i));
+ void del_termcode __ARGS((char_u *name));
+ void set_mouse_topline __ARGS((win_T *wp));
+-int check_termcode __ARGS((int max_offset, char_u *buf, int buflen));
++int check_termcode __ARGS((int max_offset, char_u *buf, int bufsize, int *buflen));
+ char_u *replace_termcodes __ARGS((char_u *from, char_u **bufp, int from_part, int do_lt, int special));
+ int find_term_bykeys __ARGS((char_u *src));
+ void show_termcodes __ARGS((void));
+diff -Naur vim73.orig/src/proto/ui.pro vim73/src/proto/ui.pro
+--- vim73.orig/src/proto/ui.pro	2010-08-15 12:30:57.000000000 +0000
++++ vim73/src/proto/ui.pro	2013-06-07 17:07:35.635573582 +0000
+@@ -11,17 +11,17 @@
+ void ui_new_shellsize __ARGS((void));
+ void ui_breakcheck __ARGS((void));
+ void clip_init __ARGS((int can_use));
+-void clip_update_selection __ARGS((void));
++void clip_update_selection __ARGS((VimClipboard *clip));
+ void clip_own_selection __ARGS((VimClipboard *cbd));
+ void clip_lose_selection __ARGS((VimClipboard *cbd));
+-void clip_copy_selection __ARGS((void));
+ void clip_auto_select __ARGS((void));
+-int clip_isautosel __ARGS((void));
++int clip_isautosel_star __ARGS((void));
++int clip_isautosel_plus __ARGS((void));
+ void clip_modeless __ARGS((int button, int is_click, int is_drag));
+ void clip_start_selection __ARGS((int col, int row, int repeated_click));
+ void clip_process_selection __ARGS((int button, int col, int row, int_u repeated_click));
+ void clip_may_redraw_selection __ARGS((int row, int col, int len));
+-void clip_clear_selection __ARGS((void));
++void clip_clear_selection __ARGS((VimClipboard *cbd));
+ void clip_may_clear_selection __ARGS((int row1, int row2));
+ void clip_scroll_selection __ARGS((int rows));
+ void clip_copy_modeless_selection __ARGS((int both));
+@@ -29,6 +29,7 @@
+ void clip_gen_lose_selection __ARGS((VimClipboard *cbd));
+ void clip_gen_set_selection __ARGS((VimClipboard *cbd));
+ void clip_gen_request_selection __ARGS((VimClipboard *cbd));
++int clip_gen_owner_exists __ARGS((VimClipboard *cbd));
+ int vim_is_input_buf_full __ARGS((void));
+ int vim_is_input_buf_empty __ARGS((void));
+ int vim_free_in_input_buf __ARGS((void));
+@@ -52,6 +53,7 @@
+ void clip_x11_lose_selection __ARGS((Widget myShell, VimClipboard *cbd));
+ int clip_x11_own_selection __ARGS((Widget myShell, VimClipboard *cbd));
+ void clip_x11_set_selection __ARGS((VimClipboard *cbd));
++int clip_x11_owner_exists __ARGS((VimClipboard *cbd));
+ void yank_cut_buffer0 __ARGS((Display *dpy, VimClipboard *cbd));
+ int jump_to_mouse __ARGS((int flags, int *inclusive, int which_button));
+ int mouse_comp_pos __ARGS((win_T *win, int *rowp, int *colp, linenr_T *lnump));
+diff -Naur vim73.orig/src/proto/winclip.pro vim73/src/proto/winclip.pro
+--- vim73.orig/src/proto/winclip.pro	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/proto/winclip.pro	2013-06-07 17:07:35.682240115 +0000
+@@ -0,0 +1,14 @@
++/* winclip.c */
++int utf8_to_utf16 __ARGS((char_u *instr, int inlen, short_u *outstr, int *unconvlenp));
++int utf16_to_utf8 __ARGS((short_u *instr, int inlen, char_u *outstr));
++void MultiByteToWideChar_alloc __ARGS((UINT cp, DWORD flags, LPCSTR in, int inlen, LPWSTR *out, int *outlen));
++void WideCharToMultiByte_alloc __ARGS((UINT cp, DWORD flags, LPCWSTR in, int inlen, LPSTR *out, int *outlen, LPCSTR def, LPBOOL useddef));
++void win_clip_init __ARGS((void));
++int clip_mch_own_selection __ARGS((VimClipboard *cbd));
++void clip_mch_lose_selection __ARGS((VimClipboard *cbd));
++void clip_mch_request_selection __ARGS((VimClipboard *cbd));
++void clip_mch_set_selection __ARGS((VimClipboard *cbd));
++short_u *enc_to_utf16 __ARGS((char_u *str, int *lenp));
++char_u *utf16_to_enc __ARGS((short_u *str, int *lenp));
++void acp_to_enc __ARGS((char_u *str, int str_size, char_u **out, int *outlen));
++/* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto/window.pro vim73/src/proto/window.pro
+--- vim73.orig/src/proto/window.pro	2010-08-15 12:30:59.000000000 +0000
++++ vim73/src/proto/window.pro	2013-06-07 17:07:35.692240087 +0000
+@@ -1,13 +1,14 @@
+ /* window.c */
+ void do_window __ARGS((int nchar, long Prenum, int xchar));
+ int win_split __ARGS((int size, int flags));
+-int win_split_ins __ARGS((int size, int flags, win_T *newwin, int dir));
++int win_split_ins __ARGS((int size, int flags, win_T *new_wp, int dir));
+ int win_valid __ARGS((win_T *win));
+ int win_count __ARGS((void));
+ int make_windows __ARGS((int count, int vertical));
+ void win_move_after __ARGS((win_T *win1, win_T *win2));
+ void win_equal __ARGS((win_T *next_curwin, int current, int dir));
+ void close_windows __ARGS((buf_T *buf, int keep_curwin));
++int one_window __ARGS((void));
+ void win_close __ARGS((win_T *win, int free_buf));
+ void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
+ void win_free_all __ARGS((void));
+@@ -26,11 +27,12 @@
+ tabpage_T *find_tabpage __ARGS((int n));
+ int tabpage_index __ARGS((tabpage_T *ftp));
+ void goto_tabpage __ARGS((int n));
+-void goto_tabpage_tp __ARGS((tabpage_T *tp));
++void goto_tabpage_tp __ARGS((tabpage_T *tp, int trigger_enter_autocmds, int trigger_leave_autocmds));
+ void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
+ void tabpage_move __ARGS((int nr));
+ void win_goto __ARGS((win_T *wp));
+ win_T *win_find_nr __ARGS((int winnr));
++tabpage_T *win_find_tabpage __ARGS((win_T *win));
+ void win_enter __ARGS((win_T *wp, int undo_sync));
+ win_T *buf_jump_open_win __ARGS((buf_T *buf));
+ win_T *buf_jump_open_tab __ARGS((buf_T *buf));
+@@ -50,6 +52,8 @@
+ void win_setminheight __ARGS((void));
+ void win_drag_status_line __ARGS((win_T *dragwin, int offset));
+ void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
++void win_new_height __ARGS((win_T *wp, int height));
++void win_new_width __ARGS((win_T *wp, int width));
+ void win_comp_scroll __ARGS((win_T *wp));
+ void command_height __ARGS((void));
+ void last_status __ARGS((int morewin));
+@@ -66,9 +70,15 @@
+ void check_lnums __ARGS((int do_curwin));
+ void make_snapshot __ARGS((int idx));
+ void restore_snapshot __ARGS((int idx, int close_curwin));
++int switch_win __ARGS((win_T **save_curwin, tabpage_T **save_curtab, win_T *win, tabpage_T *tp));
++void restore_win __ARGS((win_T *save_curwin, tabpage_T *save_curtab));
++void switch_buffer __ARGS((buf_T **save_curbuf, buf_T *buf));
++void restore_buffer __ARGS((buf_T *save_curbuf));
+ int win_hasvertsplit __ARGS((void));
+ int match_add __ARGS((win_T *wp, char_u *grp, char_u *pat, int prio, int id));
+ int match_delete __ARGS((win_T *wp, int id, int perr));
+ void clear_matches __ARGS((win_T *wp));
+ matchitem_T *get_match __ARGS((win_T *wp, int id));
++int get_win_number __ARGS((win_T *wp, win_T *first_win));
++int get_tab_number __ARGS((tabpage_T *tp));
+ /* vim: set ft=c : */
+diff -Naur vim73.orig/src/proto.h vim73/src/proto.h
+--- vim73.orig/src/proto.h	2010-07-17 15:28:51.000000000 +0000
++++ vim73/src/proto.h	2013-06-07 17:07:34.712242886 +0000
+@@ -47,10 +47,12 @@
+    typedef int LPBOOL;
+ #  include "os_win16.pro"
+ #  include "os_mswin.pro"
++#  include "winclip.pro"
+ # endif
+ # ifdef WIN3264
+ #  include "os_win32.pro"
+ #  include "os_mswin.pro"
++#  include "winclip.pro"
+ #  if (defined(__GNUC__) && !defined(__MINGW32__)) \
+ 	|| (defined(__BORLANDC__) && __BORLANDC__ < 0x502)
+ extern int _stricoll __ARGS((char *a, char *b));
+@@ -62,9 +64,6 @@
+ # ifdef __BEOS__
+ #  include "os_beos.pro"
+ # endif
+-# ifdef RISCOS
+-#  include "os_riscos.pro"
+-# endif
+ # ifdef __QNX__
+ #  include "os_qnx.pro"
+ # endif
+@@ -245,9 +244,6 @@
+ #  ifdef FEAT_GUI_X11
+ #   include "gui_x11.pro"
+ #  endif
+-#  ifdef RISCOS
+-#   include "gui_riscos.pro"
+-#  endif
+ #  ifdef FEAT_GUI_PHOTON
+ #   include "gui_photon.pro"
+ #  endif
+diff -Naur vim73.orig/src/pty.c vim73/src/pty.c
+--- vim73.orig/src/pty.c	2010-07-24 18:23:01.000000000 +0000
++++ vim73/src/pty.c	2013-06-07 17:07:35.718906677 +0000
+@@ -14,6 +14,10 @@
+  * It has been modified to work better with Vim.
+  * The parts that are not used in Vim have been deleted.
+  * See the "screen" sources for the complete stuff.
++ *
++ * This specific version is distibuted under the Vim license (attribution by
++ * Juergen Weigert), the GPL applies to the original version, see the
++ * copyright notice below.
+  */
+ 
+ /* Copyright (c) 1993
+@@ -123,8 +127,7 @@
+ static void initmaster __ARGS((int));
+ 
+ /*
+- *  Open all ptys with O_NOCTTY, just to be on the safe side
+- *  (RISCos mips breaks otherwise)
++ *  Open all ptys with O_NOCTTY, just to be on the safe side.
+  */
+ #ifndef O_NOCTTY
+ # define O_NOCTTY 0
+@@ -209,8 +212,8 @@
+ #ifdef _SEQUENT_
+     fvhangup(s);
+ #endif
+-    strncpy(PtyName, m, sizeof(PtyName));
+-    strncpy(TtyName, s, sizeof(TtyName));
++    vim_strncpy((char_u *)PtyName, (char_u *)m, sizeof(PtyName) - 1);
++    vim_strncpy((char_u *)TtyName, (char_u *)s, sizeof(TtyName) - 1);
+     initmaster(f);
+     *ttyn = TtyName;
+     return f;
+@@ -301,7 +304,7 @@
+ 	return -1;
+     }
+     signal(SIGCHLD, sigcld);
+-    strncpy(TtyName, m, sizeof(TtyName));
++    vim_strncpy((char_u *)TtyName, (char_u *)m, sizeof(TtyName) - 1);
+     initmaster(f);
+     *ttyn = TtyName;
+     return f;
+@@ -326,7 +329,7 @@
+     /* a dumb looking loop replaced by mycrofts code: */
+     if ((f = open("/dev/ptc", O_RDWR | O_NOCTTY | O_EXTRA)) < 0)
+ 	return -1;
+-    strncpy(TtyName, ttyname(f), sizeof(TtyName));
++    vim_strncpy((char_u *)TtyName, (char_u *)ttyname(f), sizeof(TtyName) - 1);
+     if (geteuid() != ROOT_UID && mch_access(TtyName, R_OK | W_OK))
+     {
+ 	close(f);
+diff -Naur vim73.orig/src/quickfix.c vim73/src/quickfix.c
+--- vim73.orig/src/quickfix.c	2010-08-09 20:12:14.000000000 +0000
++++ vim73/src/quickfix.c	2013-06-07 17:07:35.745573268 +0000
+@@ -126,12 +126,14 @@
+ static win_T	*qf_find_win __ARGS((qf_info_T *qi));
+ static buf_T	*qf_find_buf __ARGS((qf_info_T *qi));
+ static void	qf_update_buffer __ARGS((qf_info_T *qi));
++static void	qf_set_title __ARGS((qf_info_T *qi));
+ static void	qf_fill_buffer __ARGS((qf_info_T *qi));
+ #endif
+ static char_u	*get_mef_name __ARGS((void));
+-static buf_T	*load_dummy_buffer __ARGS((char_u *fname));
+-static void	wipe_dummy_buffer __ARGS((buf_T *buf));
+-static void	unload_dummy_buffer __ARGS((buf_T *buf));
++static void	restore_start_dir __ARGS((char_u *dirname_start));
++static buf_T	*load_dummy_buffer __ARGS((char_u *fname, char_u *dirname_start, char_u *resulting_dir));
++static void	wipe_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
++static void	unload_dummy_buffer __ARGS((buf_T *buf, char_u *dirname_start));
+ static qf_info_T *ll_get_or_alloc_list __ARGS((win_T *));
+ 
+ /* Quickfix window check helper macro */
+@@ -245,7 +247,7 @@
+ 			{'t', "."},
+ 			{'m', ".\\+"},
+ 			{'r', ".*"},
+-			{'p', "[- .]*"},
++			{'p', "[- 	.]*"},
+ 			{'v', "\\d\\+"},
+ 			{'s', ".\\+"}
+ 		    };
+@@ -561,6 +563,10 @@
+ 	    break;
+ 
+ 	IObuff[CMDBUFFSIZE - 2] = NUL;  /* for very long lines */
++#ifdef FEAT_MBYTE
++	remove_bom(IObuff);
++#endif
++
+ 	if ((efmp = vim_strrchr(IObuff, '\n')) != NULL)
+ 	    *efmp = NUL;
+ #ifdef USE_CRNL
+@@ -671,11 +677,23 @@
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[7]) > 0)		/* %p */
+ 		{
++		    char_u	*match_ptr;
++
+ 		    if (regmatch.startp[i] == NULL || regmatch.endp[i] == NULL)
+ 			continue;
+-		    col = (int)(regmatch.endp[i] - regmatch.startp[i] + 1);
+-		    if (*((char_u *)regmatch.startp[i]) != TAB)
+-			use_viscol = TRUE;
++		    col = 0;
++		    for (match_ptr = regmatch.startp[i];
++				   match_ptr != regmatch.endp[i]; ++match_ptr)
++		    {
++			++col;
++			if (*match_ptr == TAB)
++			{
++			    col += 7;
++			    col -= col % 8;
++			}
++		    }
++		    ++col;
++		    use_viscol = TRUE;
+ 		}
+ 		if ((i = (int)fmt_ptr->addr[8]) > 0)		/* %v */
+ 		{
+@@ -894,8 +912,7 @@
+     }
+     else
+ 	qi->qf_curlist = qi->qf_listcount++;
+-    qi->qf_lists[qi->qf_curlist].qf_index = 0;
+-    qi->qf_lists[qi->qf_curlist].qf_count = 0;
++    vim_memset(&qi->qf_lists[qi->qf_curlist], 0, (size_t)(sizeof(qf_list_T)));
+     if (qf_title != NULL)
+     {
+ 	char_u *p = alloc((int)STRLEN(qf_title) + 2);
+@@ -904,8 +921,6 @@
+ 	if (p != NULL)
+ 	    sprintf((char *)p, ":%s", (char *)qf_title);
+     }
+-    else
+-	qi->qf_lists[qi->qf_curlist].qf_title = NULL;
+ }
+ 
+ /*
+@@ -1164,7 +1179,7 @@
+ 
+ 	/* When no valid entries are present in the list, qf_ptr points to
+ 	 * the first item in the list */
+-	if (to_qfl->qf_nonevalid == TRUE)
++	if (to_qfl->qf_nonevalid)
+ 	    to_qfl->qf_ptr = to_qfl->qf_start;
+     }
+ 
+@@ -1182,21 +1197,17 @@
+     if (fname == NULL || *fname == NUL)		/* no file name */
+ 	return 0;
+     {
+-#ifdef RISCOS
+-	/* Name is reported as `main.c', but file is `c.main' */
+-	return ro_buflist_add(fname);
+-#else
+ 	char_u	    *ptr;
+ 	int	    fnum;
+ 
+-# ifdef VMS
++#ifdef VMS
+ 	vms_remove_version(fname);
+-# endif
+-# ifdef BACKSLASH_IN_FILENAME
++#endif
++#ifdef BACKSLASH_IN_FILENAME
+ 	if (directory != NULL)
+ 	    slash_adjust(directory);
+ 	slash_adjust(fname);
+-# endif
++#endif
+ 	if (directory != NULL && !vim_isAbsName(fname)
+ 		&& (ptr = concat_fnames(directory, fname, TRUE)) != NULL)
+ 	{
+@@ -1221,7 +1232,6 @@
+ 	    return fnum;
+ 	}
+ 	return buflist_add(fname, 0);
+-#endif
+     }
+ }
+ 
+@@ -1656,9 +1666,7 @@
+ 	    opened_window = TRUE;	/* close it when fail */
+ 	    p_swb = empty_option;	/* don't split again */
+ 	    swb_flags = 0;
+-# ifdef FEAT_SCROLLBIND
+-	    curwin->w_p_scb = FALSE;
+-# endif
++	    RESET_BINDING(curwin);
+ 	    if (ll_ref != NULL)
+ 	    {
+ 		/* The new window should use the location list from the
+@@ -1847,8 +1855,10 @@
+ #endif
+ 	if (print_message)
+ 	{
+-	    /* Update the screen before showing the message */
+-	    update_topline_redraw();
++	    /* Update the screen before showing the message, unless the screen
++	     * scrolled up. */
++	    if (!msg_scrolled)
++		update_topline_redraw();
+ 	    sprintf((char *)IObuff, _("(%d of %d)%s%s: "), qf_index,
+ 		    qi->qf_lists[qi->qf_curlist].qf_count,
+ 		    qf_ptr->qf_cleared ? _(" (line deleted)") : "",
+@@ -2075,7 +2085,7 @@
+ 	    if (qi->qf_curlist == 0)
+ 	    {
+ 		EMSG(_("E380: At bottom of quickfix stack"));
+-		return;
++		break;
+ 	    }
+ 	    --qi->qf_curlist;
+ 	}
+@@ -2084,13 +2094,12 @@
+ 	    if (qi->qf_curlist >= qi->qf_listcount - 1)
+ 	    {
+ 		EMSG(_("E381: At top of quickfix stack"));
+-		return;
++		break;
+ 	    }
+ 	    ++qi->qf_curlist;
+ 	}
+     }
+     qf_msg(qi);
+-
+ }
+ 
+     static void
+@@ -2114,17 +2123,28 @@
+     int		idx;
+ {
+     qfline_T	*qfp;
++    int		stop = FALSE;
+ 
+     while (qi->qf_lists[idx].qf_count)
+     {
+ 	qfp = qi->qf_lists[idx].qf_start->qf_next;
+-	vim_free(qi->qf_lists[idx].qf_start->qf_text);
+-	vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
+-	vim_free(qi->qf_lists[idx].qf_start);
++	if (qi->qf_lists[idx].qf_title != NULL && !stop)
++	{
++	    vim_free(qi->qf_lists[idx].qf_start->qf_text);
++	    stop = (qi->qf_lists[idx].qf_start == qfp);
++	    vim_free(qi->qf_lists[idx].qf_start->qf_pattern);
++	    vim_free(qi->qf_lists[idx].qf_start);
++	    if (stop)
++		/* Somehow qf_count may have an incorrect value, set it to 1
++		 * to avoid crashing when it's wrong.
++		 * TODO: Avoid qf_count being incorrect. */
++		qi->qf_lists[idx].qf_count = 1;
++	}
+ 	qi->qf_lists[idx].qf_start = qfp;
+ 	--qi->qf_lists[idx].qf_count;
+     }
+     vim_free(qi->qf_lists[idx].qf_title);
++    qi->qf_lists[idx].qf_title = NULL;
+ }
+ 
+ /*
+@@ -2244,6 +2264,7 @@
+      * it if we have errors; otherwise, leave it closed.
+      */
+     if (qi->qf_lists[qi->qf_curlist].qf_nonevalid
++	    || qi->qf_lists[qi->qf_curlist].qf_count == 0
+ 	    || qi->qf_curlist >= qi->qf_listcount)
+     {
+ 	if (win != NULL)
+@@ -2328,14 +2349,14 @@
+ 	/* The current window becomes the previous window afterwards. */
+ 	win = curwin;
+ 
+-	if (eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
+-	    /* Create the new window at the very bottom. */
++	if ((eap->cmdidx == CMD_copen || eap->cmdidx == CMD_cwindow)
++		&& cmdmod.split == 0)
++	    /* Create the new window at the very bottom, except when
++	     * :belowright or :aboveleft is used. */
+ 	    win_goto(lastwin);
+ 	if (win_split(height, WSP_BELOW | WSP_NEWLOC) == FAIL)
+ 	    return;		/* not enough room for window */
+-#ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;
+-#endif
++	RESET_BINDING(curwin);
+ 
+ 	if (eap->cmdidx == CMD_lopen || eap->cmdidx == CMD_lwindow)
+ 	{
+@@ -2362,6 +2383,7 @@
+ 	    set_option_value((char_u *)"bt", 0L, (char_u *)"quickfix",
+ 								   OPT_LOCAL);
+ 	    set_option_value((char_u *)"bh", 0L, (char_u *)"wipe", OPT_LOCAL);
++	    RESET_BINDING(curwin);
+ #ifdef FEAT_DIFF
+ 	    curwin->w_p_diff = FALSE;
+ #endif
+@@ -2390,8 +2412,7 @@
+     qf_fill_buffer(qi);
+ 
+     if (qi->qf_lists[qi->qf_curlist].qf_title != NULL)
+-	set_internal_string_var((char_u *)"w:quickfix_title",
+-				       qi->qf_lists[qi->qf_curlist].qf_title);
++	qf_set_title(qi);
+ 
+     curwin->w_cursor.lnum = qi->qf_lists[qi->qf_curlist].qf_index;
+     curwin->w_cursor.col = 0;
+@@ -2528,6 +2549,8 @@
+     qf_info_T	*qi;
+ {
+     buf_T	*buf;
++    win_T	*win;
++    win_T	*curwin_save;
+     aco_save_T	aco;
+ 
+     /* Check if a buffer for the quickfix list exists.  Update it. */
+@@ -2539,6 +2562,16 @@
+ 
+ 	qf_fill_buffer(qi);
+ 
++	if (qi->qf_lists[qi->qf_curlist].qf_title != NULL
++	    && (win = qf_find_win(qi)) != NULL)
++	{
++	    curwin_save = curwin;
++	    curwin = win;
++	    qf_set_title(qi);
++	    curwin = curwin_save;
++
++	}
++
+ 	/* restore curwin/curbuf and a few other things */
+ 	aucmd_restbuf(&aco);
+ 
+@@ -2546,6 +2579,14 @@
+     }
+ }
+ 
++    static void
++qf_set_title(qi)
++    qf_info_T	*qi;
++{
++    set_internal_string_var((char_u *)"w:quickfix_title",
++				    qi->qf_lists[qi->qf_curlist].qf_title);
++}
++
+ /*
+  * Fill current buffer with quickfix errors, replacing any previous contents.
+  * curbuf must be the quickfix buffer!
+@@ -2657,7 +2698,7 @@
+ bt_quickfix(buf)
+     buf_T	*buf;
+ {
+-    return (buf->b_p_bt[0] == 'q');
++    return buf != NULL && buf->b_p_bt[0] == 'q';
+ }
+ 
+ /*
+@@ -2668,8 +2709,8 @@
+ bt_nofile(buf)
+     buf_T	*buf;
+ {
+-    return (buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
+-	    || buf->b_p_bt[0] == 'a';
++    return buf != NULL && ((buf->b_p_bt[0] == 'n' && buf->b_p_bt[2] == 'f')
++	    || buf->b_p_bt[0] == 'a');
+ }
+ 
+ /*
+@@ -2679,7 +2720,7 @@
+ bt_dontwrite(buf)
+     buf_T	*buf;
+ {
+-    return (buf->b_p_bt[0] == 'n');
++    return buf != NULL && buf->b_p_bt[0] == 'n';
+ }
+ 
+     int
+@@ -2744,6 +2785,13 @@
+ #ifdef FEAT_AUTOCMD
+     char_u	*au_name = NULL;
+ 
++    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
++    if (grep_internal(eap->cmdidx))
++    {
++	ex_vimgrep(eap);
++	return;
++    }
++
+     switch (eap->cmdidx)
+     {
+ 	case CMD_make:	    au_name = (char_u *)"make"; break;
+@@ -2765,13 +2813,6 @@
+     }
+ #endif
+ 
+-    /* Redirect ":grep" to ":vimgrep" if 'grepprg' is "internal". */
+-    if (grep_internal(eap->cmdidx))
+-    {
+-	ex_vimgrep(eap);
+-	return;
+-    }
+-
+     if (eap->cmdidx == CMD_lmake || eap->cmdidx == CMD_lgrep
+ 	|| eap->cmdidx == CMD_lgrepadd)
+ 	wp = curwin;
+@@ -2819,17 +2860,21 @@
+ 					   (eap->cmdidx != CMD_grepadd
+ 					    && eap->cmdidx != CMD_lgrepadd),
+ 					   *eap->cmdlinep);
++    if (wp != NULL)
++	qi = GET_LOC_LIST(wp);
+ #ifdef FEAT_AUTOCMD
+     if (au_name != NULL)
++    {
+ 	apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
+ 					       curbuf->b_fname, TRUE, curbuf);
++	if (qi->qf_curlist < qi->qf_listcount)
++	    res = qi->qf_lists[qi->qf_curlist].qf_count;
++	else
++	    res = 0;
++    }
+ #endif
+     if (res > 0 && !eap->forceit)
+-    {
+-	if (wp != NULL)
+-	    qi = GET_LOC_LIST(wp);
+ 	qf_jump(qi, 0, 0, FALSE);		/* display first error */
+-    }
+ 
+     mch_remove(fname);
+     vim_free(fname);
+@@ -2974,11 +3019,28 @@
+ {
+     win_T	*wp = NULL;
+     qf_info_T	*qi = &ql_info;
++#ifdef FEAT_AUTOCMD
++    char_u	*au_name = NULL;
++#endif
+ 
+     if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
+-	|| eap->cmdidx == CMD_laddfile)
++					       || eap->cmdidx == CMD_laddfile)
+ 	wp = curwin;
+ 
++#ifdef FEAT_AUTOCMD
++    switch (eap->cmdidx)
++    {
++	case CMD_cfile:	    au_name = (char_u *)"cfile"; break;
++	case CMD_cgetfile:  au_name = (char_u *)"cgetfile"; break;
++	case CMD_caddfile:  au_name = (char_u *)"caddfile"; break;
++	case CMD_lfile:	    au_name = (char_u *)"lfile"; break;
++	case CMD_lgetfile:  au_name = (char_u *)"lgetfile"; break;
++	case CMD_laddfile:  au_name = (char_u *)"laddfile"; break;
++	default: break;
++    }
++    if (au_name != NULL)
++	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf);
++#endif
+ #ifdef FEAT_BROWSE
+     if (cmdmod.browse)
+     {
+@@ -3010,10 +3072,22 @@
+ 				  && (eap->cmdidx == CMD_cfile
+ 					     || eap->cmdidx == CMD_lfile))
+     {
++#ifdef FEAT_AUTOCMD
++	if (au_name != NULL)
++	    apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
++#endif
+ 	if (wp != NULL)
+ 	    qi = GET_LOC_LIST(wp);
+ 	qf_jump(qi, 0, 0, eap->forceit);	/* display first error */
+     }
++
++    else
++    {
++#ifdef FEAT_AUTOCMD
++	if (au_name != NULL)
++	    apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
++#endif
++    }
+ }
+ 
+ /*
+@@ -3034,6 +3108,9 @@
+     char_u	*p;
+     int		fi;
+     qf_info_T	*qi = &ql_info;
++#ifdef FEAT_AUTOCMD
++    qfline_T	*cur_qf_start;
++#endif
+     qfline_T	*prevp = NULL;
+     long	lnum;
+     buf_T	*buf;
+@@ -3051,18 +3128,22 @@
+     int		flags = 0;
+     colnr_T	col;
+     long	tomatch;
+-    char_u	dirname_start[MAXPATHL];
+-    char_u	dirname_now[MAXPATHL];
++    char_u	*dirname_start = NULL;
++    char_u	*dirname_now = NULL;
+     char_u	*target_dir = NULL;
+ #ifdef FEAT_AUTOCMD
+     char_u	*au_name =  NULL;
+ 
+     switch (eap->cmdidx)
+     {
+-	case CMD_vimgrep: au_name = (char_u *)"vimgrep"; break;
+-	case CMD_lvimgrep: au_name = (char_u *)"lvimgrep"; break;
+-	case CMD_vimgrepadd: au_name = (char_u *)"vimgrepadd"; break;
++	case CMD_vimgrep:     au_name = (char_u *)"vimgrep"; break;
++	case CMD_lvimgrep:    au_name = (char_u *)"lvimgrep"; break;
++	case CMD_vimgrepadd:  au_name = (char_u *)"vimgrepadd"; break;
+ 	case CMD_lvimgrepadd: au_name = (char_u *)"lvimgrepadd"; break;
++	case CMD_grep:	      au_name = (char_u *)"grep"; break;
++	case CMD_lgrep:	      au_name = (char_u *)"lgrep"; break;
++	case CMD_grepadd:     au_name = (char_u *)"grepadd"; break;
++	case CMD_lgrepadd:    au_name = (char_u *)"lgrepadd"; break;
+ 	default: break;
+     }
+     if (au_name != NULL)
+@@ -3097,7 +3178,20 @@
+ 	EMSG(_(e_invalpat));
+ 	goto theend;
+     }
+-    regmatch.regprog = vim_regcomp(s, RE_MAGIC);
++
++    if (s != NULL && *s == NUL)
++    {
++	/* Pattern is empty, use last search pattern. */
++	if (last_search_pat() == NULL)
++	{
++	    EMSG(_(e_noprevre));
++	    goto theend;
++	}
++	regmatch.regprog = vim_regcomp(last_search_pat(), RE_MAGIC);
++    }
++    else
++	regmatch.regprog = vim_regcomp(s, RE_MAGIC);
++
+     if (regmatch.regprog == NULL)
+ 	goto theend;
+     regmatch.rmm_ic = p_ic;
+@@ -3122,7 +3216,7 @@
+ 	    ;
+ 
+     /* parse the list of arguments */
+-    if (get_arglist_exp(p, &fcount, &fnames) == FAIL)
++    if (get_arglist_exp(p, &fcount, &fnames, TRUE) == FAIL)
+ 	goto theend;
+     if (fcount == 0)
+     {
+@@ -3130,10 +3224,21 @@
+ 	goto theend;
+     }
+ 
++    dirname_start = alloc(MAXPATHL);
++    dirname_now = alloc(MAXPATHL);
++    if (dirname_start == NULL || dirname_now == NULL)
++	goto theend;
++
+     /* Remember the current directory, because a BufRead autocommand that does
+      * ":lcd %:p:h" changes the meaning of short path names. */
+     mch_dirname(dirname_start, MAXPATHL);
+ 
++#ifdef FEAT_AUTOCMD
++     /* Remember the value of qf_start, so that we can check for autocommands
++      * changing the current quickfix list. */
++    cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
++#endif
++
+     seconds = (time_t)0;
+     for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
+     {
+@@ -3178,19 +3283,7 @@
+ 
+ 	    /* Load file into a buffer, so that 'fileencoding' is detected,
+ 	     * autocommands applied, etc. */
+-	    buf = load_dummy_buffer(fname);
+-
+-	    /* When autocommands changed directory: go back.  We assume it was
+-	     * ":lcd %:p:h". */
+-	    mch_dirname(dirname_now, MAXPATHL);
+-	    if (STRCMP(dirname_start, dirname_now) != 0)
+-	    {
+-		exarg_T ea;
+-
+-		ea.arg = dirname_start;
+-		ea.cmdidx = CMD_lcd;
+-		ex_cd(&ea);
+-	    }
++	    buf = load_dummy_buffer(fname, dirname_start, dirname_now);
+ 
+ 	    p_mls = save_mls;
+ #if defined(FEAT_AUTOCMD) && defined(FEAT_SYN_HL)
+@@ -3201,6 +3294,28 @@
+ 	    /* Use existing, loaded buffer. */
+ 	    using_dummy = FALSE;
+ 
++#ifdef FEAT_AUTOCMD
++	if (cur_qf_start != qi->qf_lists[qi->qf_curlist].qf_start)
++	{
++	    int idx;
++
++	    /* Autocommands changed the quickfix list.  Find the one we were
++	     * using and restore it. */
++	    for (idx = 0; idx < LISTCOUNT; ++idx)
++		if (cur_qf_start == qi->qf_lists[idx].qf_start)
++		{
++		    qi->qf_curlist = idx;
++		    break;
++		}
++	    if (idx == LISTCOUNT)
++	    {
++		/* List cannot be found, create a new one. */
++		qf_new_list(qi, *eap->cmdlinep);
++		cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
++	    }
++	}
++#endif
++
+ 	if (buf == NULL)
+ 	{
+ 	    if (!got_int)
+@@ -3252,6 +3367,9 @@
+ 		if (got_int)
+ 		    break;
+ 	    }
++#ifdef FEAT_AUTOCMD
++	    cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
++#endif
+ 
+ 	    if (using_dummy)
+ 	    {
+@@ -3261,7 +3379,7 @@
+ 		{
+ 		    /* Never keep a dummy buffer if there is another buffer
+ 		     * with the same name. */
+-		    wipe_dummy_buffer(buf);
++		    wipe_dummy_buffer(buf, dirname_start);
+ 		    buf = NULL;
+ 		}
+ 		else if (!cmdmod.hide
+@@ -3277,12 +3395,12 @@
+ 		     * many swap files. */
+ 		    if (!found_match)
+ 		    {
+-			wipe_dummy_buffer(buf);
++			wipe_dummy_buffer(buf, dirname_start);
+ 			buf = NULL;
+ 		    }
+ 		    else if (buf != first_match_buf || (flags & VGR_NOJUMP))
+ 		    {
+-			unload_dummy_buffer(buf);
++			unload_dummy_buffer(buf, dirname_start);
+ 			buf = NULL;
+ 		    }
+ 		}
+@@ -3366,6 +3484,8 @@
+     }
+ 
+ theend:
++    vim_free(dirname_now);
++    vim_free(dirname_start);
+     vim_free(target_dir);
+     vim_free(regmatch.regprog);
+ }
+@@ -3426,15 +3546,52 @@
+ }
+ 
+ /*
+- * Load file "fname" into a dummy buffer and return the buffer pointer.
++ * Restore current working directory to "dirname_start" if they differ, taking
++ * into account whether it is set locally or globally.
++ */
++    static void
++restore_start_dir(dirname_start)
++    char_u	*dirname_start;
++{
++    char_u *dirname_now = alloc(MAXPATHL);
++
++    if (NULL != dirname_now)
++    {
++	mch_dirname(dirname_now, MAXPATHL);
++	if (STRCMP(dirname_start, dirname_now) != 0)
++	{
++	    /* If the directory has changed, change it back by building up an
++	     * appropriate ex command and executing it. */
++	    exarg_T ea;
++
++	    ea.arg = dirname_start;
++	    ea.cmdidx = (curwin->w_localdir == NULL) ? CMD_cd : CMD_lcd;
++	    ex_cd(&ea);
++	}
++	vim_free(dirname_now);
++    }
++}
++
++/*
++ * Load file "fname" into a dummy buffer and return the buffer pointer,
++ * placing the directory resulting from the buffer load into the
++ * "resulting_dir" pointer. "resulting_dir" must be allocated by the caller
++ * prior to calling this function. Restores directory to "dirname_start" prior
++ * to returning, if autocmds or the 'autochdir' option have changed it.
++ *
++ * If creating the dummy buffer does not fail, must call unload_dummy_buffer()
++ * or wipe_dummy_buffer() later!
++ *
+  * Returns NULL if it fails.
+- * Must call unload_dummy_buffer() or wipe_dummy_buffer() later!
+  */
+     static buf_T *
+-load_dummy_buffer(fname)
++load_dummy_buffer(fname, dirname_start, resulting_dir)
+     char_u	*fname;
++    char_u	*dirname_start;  /* in: old directory */
++    char_u	*resulting_dir;  /* out: new directory */
+ {
+     buf_T	*newbuf;
++    buf_T	*newbuf_to_wipe = NULL;
+     int		failed = TRUE;
+     aco_save_T	aco;
+ 
+@@ -3471,33 +3628,48 @@
+ 	    failed = FALSE;
+ 	    if (curbuf != newbuf)
+ 	    {
+-		/* Bloody autocommands changed the buffer! */
+-		if (buf_valid(newbuf))
+-		    wipe_buffer(newbuf, FALSE);
++		/* Bloody autocommands changed the buffer!  Can happen when
++		 * using netrw and editing a remote file.  Use the current
++		 * buffer instead, delete the dummy one after restoring the
++		 * window stuff. */
++		newbuf_to_wipe = newbuf;
+ 		newbuf = curbuf;
+ 	    }
+ 	}
+ 
+ 	/* restore curwin/curbuf and a few other things */
+ 	aucmd_restbuf(&aco);
++	if (newbuf_to_wipe != NULL && buf_valid(newbuf_to_wipe))
++	    wipe_buffer(newbuf_to_wipe, FALSE);
+     }
+ 
++    /*
++     * When autocommands/'autochdir' option changed directory: go back.
++     * Let the caller know what the resulting dir was first, in case it is
++     * important.
++     */
++    mch_dirname(resulting_dir, MAXPATHL);
++    restore_start_dir(dirname_start);
++
+     if (!buf_valid(newbuf))
+ 	return NULL;
+     if (failed)
+     {
+-	wipe_dummy_buffer(newbuf);
++	wipe_dummy_buffer(newbuf, dirname_start);
+ 	return NULL;
+     }
+     return newbuf;
+ }
+ 
+ /*
+- * Wipe out the dummy buffer that load_dummy_buffer() created.
++ * Wipe out the dummy buffer that load_dummy_buffer() created. Restores
++ * directory to "dirname_start" prior to returning, if autocmds or the
++ * 'autochdir' option have changed it.
+  */
+     static void
+-wipe_dummy_buffer(buf)
++wipe_dummy_buffer(buf, dirname_start)
+     buf_T	*buf;
++    char_u	*dirname_start;
+ {
+     if (curbuf != buf)		/* safety check */
+     {
+@@ -3517,18 +3689,28 @@
+ 	 * new aborting error, interrupt, or uncaught exception. */
+ 	leave_cleanup(&cs);
+ #endif
++	/* When autocommands/'autochdir' option changed directory: go back. */
++	restore_start_dir(dirname_start);
+     }
+ }
+ 
+ /*
+- * Unload the dummy buffer that load_dummy_buffer() created.
++ * Unload the dummy buffer that load_dummy_buffer() created. Restores
++ * directory to "dirname_start" prior to returning, if autocmds or the
++ * 'autochdir' option have changed it.
+  */
+     static void
+-unload_dummy_buffer(buf)
++unload_dummy_buffer(buf, dirname_start)
+     buf_T	*buf;
++    char_u	*dirname_start;
+ {
+     if (curbuf != buf)		/* safety check */
+-	close_buffer(NULL, buf, DOBUF_UNLOAD);
++    {
++	close_buffer(NULL, buf, DOBUF_UNLOAD, FALSE);
++
++	/* When autocommands/'autochdir' option changed directory: go back. */
++	restore_start_dir(dirname_start);
++    }
+ }
+ 
+ #if defined(FEAT_EVAL) || defined(PROTO)
+@@ -3697,7 +3879,7 @@
+     }
+ 
+     if (qi->qf_lists[qi->qf_curlist].qf_index == 0)
+-	/* empty list or no valid entry */
++	/* no valid entry */
+ 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = TRUE;
+     else
+ 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+@@ -3841,16 +4023,35 @@
+     qf_info_T	*qi = &ql_info;
+     int		new_qi = FALSE;
+     win_T	*wp;
+-
+-    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
+-    save_cpo = p_cpo;
+-    p_cpo = empty_option;
++#ifdef FEAT_AUTOCMD
++    char_u	*au_name =  NULL;
++#endif
+ 
+ #ifdef FEAT_MULTI_LANG
+     /* Check for a specified language */
+     lang = check_help_lang(eap->arg);
+ #endif
+ 
++#ifdef FEAT_AUTOCMD
++    switch (eap->cmdidx)
++    {
++	case CMD_helpgrep:  au_name = (char_u *)"helpgrep"; break;
++	case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
++	default: break;
++    }
++    if (au_name != NULL)
++    {
++	apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
++					       curbuf->b_fname, TRUE, curbuf);
++	if (did_throw || force_abort)
++	    return;
++    }
++#endif
++
++    /* Make 'cpoptions' empty, the 'l' flag should not be used here. */
++    save_cpo = p_cpo;
++    p_cpo = empty_option;
++
+     if (eap->cmdidx == CMD_lhelpgrep)
+     {
+ 	/* Find an existing help window */
+@@ -3876,6 +4077,16 @@
+     regmatch.rm_ic = FALSE;
+     if (regmatch.regprog != NULL)
+     {
++#ifdef FEAT_MBYTE
++	vimconv_T vc;
++
++	/* Help files are in utf-8 or latin1, convert lines when 'encoding'
++	 * differs. */
++	vc.vc_type = CONV_NONE;
++	if (!enc_utf8)
++	    convert_setup(&vc, (char_u *)"utf-8", p_enc);
++#endif
++
+ 	/* create a new quickfix list */
+ 	qf_new_list(qi, *eap->cmdlinep);
+ 
+@@ -3910,21 +4121,33 @@
+ 			lnum = 1;
+ 			while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int)
+ 			{
+-			    if (vim_regexec(&regmatch, IObuff, (colnr_T)0))
++			    char_u    *line = IObuff;
++#ifdef FEAT_MBYTE
++			    /* Convert a line if 'encoding' is not utf-8 and
++			     * the line contains a non-ASCII character. */
++			    if (vc.vc_type != CONV_NONE
++						   && has_non_ascii(IObuff)) {
++				line = string_convert(&vc, IObuff, NULL);
++				if (line == NULL)
++				    line = IObuff;
++			    }
++#endif
++
++			    if (vim_regexec(&regmatch, line, (colnr_T)0))
+ 			    {
+-				int	l = (int)STRLEN(IObuff);
++				int	l = (int)STRLEN(line);
+ 
+ 				/* remove trailing CR, LF, spaces, etc. */
+-				while (l > 0 && IObuff[l - 1] <= ' ')
+-				     IObuff[--l] = NUL;
++				while (l > 0 && line[l - 1] <= ' ')
++				     line[--l] = NUL;
+ 
+ 				if (qf_add_entry(qi, &prevp,
+ 					    NULL,	/* dir */
+ 					    fnames[fi],
+ 					    0,
+-					    IObuff,
++					    line,
+ 					    lnum,
+-					    (int)(regmatch.startp[0] - IObuff)
++					    (int)(regmatch.startp[0] - line)
+ 								+ 1, /* col */
+ 					    FALSE,	/* vis_col */
+ 					    NULL,	/* search pattern */
+@@ -3934,9 +4157,17 @@
+ 					    ) == FAIL)
+ 				{
+ 				    got_int = TRUE;
++#ifdef FEAT_MBYTE
++				    if (line != IObuff)
++					vim_free(line);
++#endif
+ 				    break;
+ 				}
+ 			    }
++#ifdef FEAT_MBYTE
++			    if (line != IObuff)
++				vim_free(line);
++#endif
+ 			    ++lnum;
+ 			    line_breakcheck();
+ 			}
+@@ -3946,7 +4177,12 @@
+ 		FreeWild(fcount, fnames);
+ 	    }
+ 	}
++
+ 	vim_free(regmatch.regprog);
++#ifdef FEAT_MBYTE
++	if (vc.vc_type != CONV_NONE)
++	    convert_setup(&vc, NULL, NULL);
++#endif
+ 
+ 	qi->qf_lists[qi->qf_curlist].qf_nonevalid = FALSE;
+ 	qi->qf_lists[qi->qf_curlist].qf_ptr =
+@@ -3964,6 +4200,17 @@
+     qf_update_buffer(qi);
+ #endif
+ 
++#ifdef FEAT_AUTOCMD
++    if (au_name != NULL)
++    {
++	apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
++					       curbuf->b_fname, TRUE, curbuf);
++	if (!new_qi && qi != &ql_info && qf_find_buf(qi) == NULL)
++	    /* autocommands made "qi" invalid */
++	    return;
++    }
++#endif
++
+     /* Jump to first match. */
+     if (qi->qf_lists[qi->qf_curlist].qf_count > 0)
+ 	qf_jump(qi, 0, 0, FALSE);
+diff -Naur vim73.orig/src/regexp.c vim73/src/regexp.c
+--- vim73.orig/src/regexp.c	2010-07-12 20:41:48.000000000 +0000
++++ vim73/src/regexp.c	2013-06-07 17:07:35.762239887 +0000
+@@ -38,9 +38,22 @@
+  * Named character class support added by Walter Briscoe (1998 Jul 01)
+  */
+ 
++/* Uncomment the first if you do not want to see debugging logs or files
++ * related to regular expressions, even when compiling with -DDEBUG.
++ * Uncomment the second to get the regexp debugging. */
++/* #undef DEBUG */
++/* #define DEBUG */
++
+ #include "vim.h"
+ 
+-#undef DEBUG
++#ifdef DEBUG
++/* show/save debugging data when BT engine is used */
++# define BT_REGEXP_DUMP
++/* save the debugging data to a file instead of displaying it */
++# define BT_REGEXP_LOG
++# define BT_REGEXP_DEBUG_LOG
++# define BT_REGEXP_DEBUG_LOG_NAME	"bt_regexp_debug.log"
++#endif
+ 
+ /*
+  * The "internal use only" fields in regexp.h are present to pass info from
+@@ -326,9 +339,10 @@
+ /* Used for an error (down from) vim_regcomp(): give the error message, set
+  * rc_did_emsg and return NULL */
+ #define EMSG_RET_NULL(m) return (EMSG(m), rc_did_emsg = TRUE, (void *)NULL)
+-#define EMSG_M_RET_NULL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
+ #define EMSG_RET_FAIL(m) return (EMSG(m), rc_did_emsg = TRUE, FAIL)
+-#define EMSG_ONE_RET_NULL EMSG_M_RET_NULL(_("E369: invalid item in %s%%[]"), reg_magic == MAGIC_ALL)
++#define EMSG2_RET_NULL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, (void *)NULL)
++#define EMSG2_RET_FAIL(m, c) return (EMSG2((m), (c) ? "" : "\\"), rc_did_emsg = TRUE, FAIL)
++#define EMSG_ONE_RET_NULL EMSG2_RET_NULL(_("E369: invalid item in %s%%[]"), reg_magic == MAGIC_ALL)
+ 
+ #define MAX_LIMIT	(32767L << 16L)
+ 
+@@ -336,11 +350,23 @@
+ static int cstrncmp __ARGS((char_u *s1, char_u *s2, int *n));
+ static char_u *cstrchr __ARGS((char_u *, int));
+ 
++#ifdef BT_REGEXP_DUMP
++static void	regdump __ARGS((char_u *, bt_regprog_T *));
++#endif
+ #ifdef DEBUG
+-static void	regdump __ARGS((char_u *, regprog_T *));
+ static char_u	*regprop __ARGS((char_u *));
+ #endif
+ 
++static char_u e_missingbracket[] = N_("E769: Missing ] after %s[");
++static char_u e_unmatchedpp[] = N_("E53: Unmatched %s%%(");
++static char_u e_unmatchedp[] = N_("E54: Unmatched %s(");
++static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)");
++#ifdef FEAT_SYN_HL
++static char_u e_z_not_allowed[] = N_("E66: \\z( not allowed here");
++static char_u e_z1_not_allowed[] = N_("E67: \\z1 et al. not allowed here");
++#endif
++static char_u e_missing_sb[] = N_("E69: Missing ] after %s%%[");
++static char_u e_empty_sb[]  = N_("E70: Empty %s%%[]");
+ #define NOT_MULTI	0
+ #define MULTI_ONE	1
+ #define MULTI_MULT	2
+@@ -630,7 +656,13 @@
+ };
+ #endif
+ 
+-static int	curchr;
++static int	curchr;		/* currently parsed character */
++/* Previous character.  Note: prevchr is sometimes -1 when we are not at the
++ * start, eg in /[ ^I]^ the pattern was never found even if it existed,
++ * because ^ was taken to be magic -- webb */
++static int	prevchr;
++static int	prevprevchr;	/* previous-previous character */
++static int	nextchr;	/* used for ungetchr() */
+ 
+ /* arguments for reg() */
+ #define REG_NOPAREN	0	/* toplevel reg() */
+@@ -638,10 +670,25 @@
+ #define REG_ZPAREN	2	/* \z(\) */
+ #define REG_NPAREN	3	/* \%(\) */
+ 
++typedef struct
++{
++     char_u	*regparse;
++     int	prevchr_len;
++     int	curchr;
++     int	prevchr;
++     int	prevprevchr;
++     int	nextchr;
++     int	at_start;
++     int	prev_at_start;
++     int	regnpar;
++} parse_state_T;
++
+ /*
+  * Forward declarations for vim_regcomp()'s friends.
+  */
+ static void	initchr __ARGS((char_u *));
++static void	save_parse_state __ARGS((parse_state_T *ps));
++static void	restore_parse_state __ARGS((parse_state_T *ps));
+ static int	getchr __ARGS((void));
+ static void	skipchr_keepstart __ARGS((void));
+ static int	peekchr __ARGS((void));
+@@ -666,16 +713,24 @@
+ static void	regc __ARGS((int b));
+ #ifdef FEAT_MBYTE
+ static void	regmbc __ARGS((int c));
++# define REGMBC(x) regmbc(x);
++# define CASEMBC(x) case x:
+ #else
+ # define regmbc(c) regc(c)
++# define REGMBC(x)
++# define CASEMBC(x)
+ #endif
+ static void	reginsert __ARGS((int, char_u *));
++static void	reginsert_nr __ARGS((int op, long val, char_u *opnd));
+ static void	reginsert_limits __ARGS((int, long, long, char_u *));
+ static char_u	*re_put_long __ARGS((char_u *pr, long_u val));
+ static int	read_limits __ARGS((long *, long *));
+ static void	regtail __ARGS((char_u *, char_u *));
+ static void	regoptail __ARGS((char_u *, char_u *));
+ 
++static regengine_T bt_regengine;
++static regengine_T nfa_regengine;
++
+ /*
+  * Return TRUE if compiled regular expression "prog" can match a line break.
+  */
+@@ -758,6 +813,7 @@
+ /*
+  * Produce the bytes for equivalence class "c".
+  * Currently only handles latin1, latin9 and utf-8.
++ * NOTE: When changing this function, also change nfa_emit_equi_class()
+  */
+     static void
+ reg_equi_class(c)
+@@ -787,68 +843,295 @@
+ 	switch (c)
+ 	{
+ 	    case 'A': case '\300': case '\301': case '\302':
++	    CASEMBC(0x100) CASEMBC(0x102) CASEMBC(0x104) CASEMBC(0x1cd)
++	    CASEMBC(0x1de) CASEMBC(0x1e0) CASEMBC(0x1ea2)
+ 	    case '\303': case '\304': case '\305':
+ 		      regmbc('A'); regmbc('\300'); regmbc('\301');
+ 		      regmbc('\302'); regmbc('\303'); regmbc('\304');
+ 		      regmbc('\305');
++		      REGMBC(0x100) REGMBC(0x102) REGMBC(0x104)
++		      REGMBC(0x1cd) REGMBC(0x1de) REGMBC(0x1e0)
++		      REGMBC(0x1ea2)
++		      return;
++	    case 'B': CASEMBC(0x1e02) CASEMBC(0x1e06)
++		      regmbc('B'); REGMBC(0x1e02) REGMBC(0x1e06)
+ 		      return;
+ 	    case 'C': case '\307':
++	    CASEMBC(0x106) CASEMBC(0x108) CASEMBC(0x10a) CASEMBC(0x10c)
+ 		      regmbc('C'); regmbc('\307');
++		      REGMBC(0x106) REGMBC(0x108) REGMBC(0x10a)
++		      REGMBC(0x10c)
++		      return;
++	    case 'D': CASEMBC(0x10e) CASEMBC(0x110) CASEMBC(0x1e0a)
++	    CASEMBC(0x1e0e) CASEMBC(0x1e10)
++		      regmbc('D'); REGMBC(0x10e) REGMBC(0x110)
++		      REGMBC(0x1e0a) REGMBC(0x1e0e) REGMBC(0x1e10)
+ 		      return;
+ 	    case 'E': case '\310': case '\311': case '\312': case '\313':
++	    CASEMBC(0x112) CASEMBC(0x114) CASEMBC(0x116) CASEMBC(0x118)
++	    CASEMBC(0x11a) CASEMBC(0x1eba) CASEMBC(0x1ebc)
+ 		      regmbc('E'); regmbc('\310'); regmbc('\311');
+ 		      regmbc('\312'); regmbc('\313');
++		      REGMBC(0x112) REGMBC(0x114) REGMBC(0x116)
++		      REGMBC(0x118) REGMBC(0x11a) REGMBC(0x1eba)
++		      REGMBC(0x1ebc)
++		      return;
++	    case 'F': CASEMBC(0x1e1e)
++		      regmbc('F'); REGMBC(0x1e1e)
++		      return;
++	    case 'G': CASEMBC(0x11c) CASEMBC(0x11e) CASEMBC(0x120)
++	    CASEMBC(0x122) CASEMBC(0x1e4) CASEMBC(0x1e6) CASEMBC(0x1f4)
++	    CASEMBC(0x1e20)
++		      regmbc('G'); REGMBC(0x11c) REGMBC(0x11e)
++		      REGMBC(0x120) REGMBC(0x122) REGMBC(0x1e4)
++		      REGMBC(0x1e6) REGMBC(0x1f4) REGMBC(0x1e20)
++		      return;
++	    case 'H': CASEMBC(0x124) CASEMBC(0x126) CASEMBC(0x1e22)
++	    CASEMBC(0x1e26) CASEMBC(0x1e28)
++		      regmbc('H'); REGMBC(0x124) REGMBC(0x126)
++		      REGMBC(0x1e22) REGMBC(0x1e26) REGMBC(0x1e28)
+ 		      return;
+ 	    case 'I': case '\314': case '\315': case '\316': case '\317':
++	    CASEMBC(0x128) CASEMBC(0x12a) CASEMBC(0x12c) CASEMBC(0x12e)
++	    CASEMBC(0x130) CASEMBC(0x1cf) CASEMBC(0x1ec8)
+ 		      regmbc('I'); regmbc('\314'); regmbc('\315');
+ 		      regmbc('\316'); regmbc('\317');
++		      REGMBC(0x128) REGMBC(0x12a) REGMBC(0x12c)
++		      REGMBC(0x12e) REGMBC(0x130) REGMBC(0x1cf)
++		      REGMBC(0x1ec8)
++		      return;
++	    case 'J': CASEMBC(0x134)
++		      regmbc('J'); REGMBC(0x134)
++		      return;
++	    case 'K': CASEMBC(0x136) CASEMBC(0x1e8) CASEMBC(0x1e30)
++	    CASEMBC(0x1e34)
++		      regmbc('K'); REGMBC(0x136) REGMBC(0x1e8)
++		      REGMBC(0x1e30) REGMBC(0x1e34)
++		      return;
++	    case 'L': CASEMBC(0x139) CASEMBC(0x13b) CASEMBC(0x13d)
++	    CASEMBC(0x13f) CASEMBC(0x141) CASEMBC(0x1e3a)
++		      regmbc('L'); REGMBC(0x139) REGMBC(0x13b)
++		      REGMBC(0x13d) REGMBC(0x13f) REGMBC(0x141)
++		      REGMBC(0x1e3a)
++		      return;
++	    case 'M': CASEMBC(0x1e3e) CASEMBC(0x1e40)
++		      regmbc('M'); REGMBC(0x1e3e) REGMBC(0x1e40)
+ 		      return;
+ 	    case 'N': case '\321':
++	    CASEMBC(0x143) CASEMBC(0x145) CASEMBC(0x147) CASEMBC(0x1e44)
++	    CASEMBC(0x1e48)
+ 		      regmbc('N'); regmbc('\321');
++		      REGMBC(0x143) REGMBC(0x145) REGMBC(0x147)
++		      REGMBC(0x1e44) REGMBC(0x1e48)
+ 		      return;
+ 	    case 'O': case '\322': case '\323': case '\324': case '\325':
+-	    case '\326':
++	    case '\326': case '\330':
++	    CASEMBC(0x14c) CASEMBC(0x14e) CASEMBC(0x150) CASEMBC(0x1a0)
++	    CASEMBC(0x1d1) CASEMBC(0x1ea) CASEMBC(0x1ec) CASEMBC(0x1ece)
+ 		      regmbc('O'); regmbc('\322'); regmbc('\323');
+ 		      regmbc('\324'); regmbc('\325'); regmbc('\326');
++		      regmbc('\330');
++		      REGMBC(0x14c) REGMBC(0x14e) REGMBC(0x150)
++		      REGMBC(0x1a0) REGMBC(0x1d1) REGMBC(0x1ea)
++		      REGMBC(0x1ec) REGMBC(0x1ece)
++		      return;
++	    case 'P': case 0x1e54: case 0x1e56:
++		      regmbc('P'); REGMBC(0x1e54) REGMBC(0x1e56)
++		      return;
++	    case 'R': CASEMBC(0x154) CASEMBC(0x156) CASEMBC(0x158)
++	    CASEMBC(0x1e58) CASEMBC(0x1e5e)
++		      regmbc('R'); REGMBC(0x154) REGMBC(0x156) REGMBC(0x158)
++		      REGMBC(0x1e58) REGMBC(0x1e5e)
++		      return;
++	    case 'S': CASEMBC(0x15a) CASEMBC(0x15c) CASEMBC(0x15e)
++	    CASEMBC(0x160) CASEMBC(0x1e60)
++		      regmbc('S'); REGMBC(0x15a) REGMBC(0x15c)
++		      REGMBC(0x15e) REGMBC(0x160) REGMBC(0x1e60)
++		      return;
++	    case 'T': CASEMBC(0x162) CASEMBC(0x164) CASEMBC(0x166)
++	    CASEMBC(0x1e6a) CASEMBC(0x1e6e)
++		      regmbc('T'); REGMBC(0x162) REGMBC(0x164)
++		      REGMBC(0x166) REGMBC(0x1e6a) REGMBC(0x1e6e)
+ 		      return;
+ 	    case 'U': case '\331': case '\332': case '\333': case '\334':
++	    CASEMBC(0x168) CASEMBC(0x16a) CASEMBC(0x16c) CASEMBC(0x16e)
++	    CASEMBC(0x170) CASEMBC(0x172) CASEMBC(0x1af) CASEMBC(0x1d3)
++	    CASEMBC(0x1ee6)
+ 		      regmbc('U'); regmbc('\331'); regmbc('\332');
+ 		      regmbc('\333'); regmbc('\334');
++		      REGMBC(0x168) REGMBC(0x16a) REGMBC(0x16c)
++		      REGMBC(0x16e) REGMBC(0x170) REGMBC(0x172)
++		      REGMBC(0x1af) REGMBC(0x1d3) REGMBC(0x1ee6)
++		      return;
++	    case 'V': CASEMBC(0x1e7c)
++		      regmbc('V'); REGMBC(0x1e7c)
++		      return;
++	    case 'W': CASEMBC(0x174) CASEMBC(0x1e80) CASEMBC(0x1e82)
++	    CASEMBC(0x1e84) CASEMBC(0x1e86)
++		      regmbc('W'); REGMBC(0x174) REGMBC(0x1e80)
++		      REGMBC(0x1e82) REGMBC(0x1e84) REGMBC(0x1e86)
++		      return;
++	    case 'X': CASEMBC(0x1e8a) CASEMBC(0x1e8c)
++		      regmbc('X'); REGMBC(0x1e8a) REGMBC(0x1e8c)
+ 		      return;
+ 	    case 'Y': case '\335':
++	    CASEMBC(0x176) CASEMBC(0x178) CASEMBC(0x1e8e) CASEMBC(0x1ef2)
++	    CASEMBC(0x1ef6) CASEMBC(0x1ef8)
+ 		      regmbc('Y'); regmbc('\335');
++		      REGMBC(0x176) REGMBC(0x178) REGMBC(0x1e8e)
++		      REGMBC(0x1ef2) REGMBC(0x1ef6) REGMBC(0x1ef8)
++		      return;
++	    case 'Z': CASEMBC(0x179) CASEMBC(0x17b) CASEMBC(0x17d)
++	    CASEMBC(0x1b5) CASEMBC(0x1e90) CASEMBC(0x1e94)
++		      regmbc('Z'); REGMBC(0x179) REGMBC(0x17b)
++		      REGMBC(0x17d) REGMBC(0x1b5) REGMBC(0x1e90)
++		      REGMBC(0x1e94)
+ 		      return;
+ 	    case 'a': case '\340': case '\341': case '\342':
+ 	    case '\343': case '\344': case '\345':
++	    CASEMBC(0x101) CASEMBC(0x103) CASEMBC(0x105) CASEMBC(0x1ce)
++	    CASEMBC(0x1df) CASEMBC(0x1e1) CASEMBC(0x1ea3)
+ 		      regmbc('a'); regmbc('\340'); regmbc('\341');
+ 		      regmbc('\342'); regmbc('\343'); regmbc('\344');
+ 		      regmbc('\345');
++		      REGMBC(0x101) REGMBC(0x103) REGMBC(0x105)
++		      REGMBC(0x1ce) REGMBC(0x1df) REGMBC(0x1e1)
++		      REGMBC(0x1ea3)
++		      return;
++	    case 'b': CASEMBC(0x1e03) CASEMBC(0x1e07)
++		      regmbc('b'); REGMBC(0x1e03) REGMBC(0x1e07)
+ 		      return;
+ 	    case 'c': case '\347':
++	    CASEMBC(0x107) CASEMBC(0x109) CASEMBC(0x10b) CASEMBC(0x10d)
+ 		      regmbc('c'); regmbc('\347');
++		      REGMBC(0x107) REGMBC(0x109) REGMBC(0x10b)
++		      REGMBC(0x10d)
++		      return;
++	    case 'd': CASEMBC(0x10f) CASEMBC(0x111) CASEMBC(0x1d0b)
++	    CASEMBC(0x1e11)
++		      regmbc('d'); REGMBC(0x10f) REGMBC(0x111)
++		      REGMBC(0x1e0b) REGMBC(0x01e0f) REGMBC(0x1e11)
+ 		      return;
+ 	    case 'e': case '\350': case '\351': case '\352': case '\353':
++	    CASEMBC(0x113) CASEMBC(0x115) CASEMBC(0x117) CASEMBC(0x119)
++	    CASEMBC(0x11b) CASEMBC(0x1ebb) CASEMBC(0x1ebd)
+ 		      regmbc('e'); regmbc('\350'); regmbc('\351');
+ 		      regmbc('\352'); regmbc('\353');
++		      REGMBC(0x113) REGMBC(0x115) REGMBC(0x117)
++		      REGMBC(0x119) REGMBC(0x11b) REGMBC(0x1ebb)
++		      REGMBC(0x1ebd)
++		      return;
++	    case 'f': CASEMBC(0x1e1f)
++		      regmbc('f'); REGMBC(0x1e1f)
++		      return;
++	    case 'g': CASEMBC(0x11d) CASEMBC(0x11f) CASEMBC(0x121)
++	    CASEMBC(0x123) CASEMBC(0x1e5) CASEMBC(0x1e7) CASEMBC(0x1f5)
++	    CASEMBC(0x1e21)
++		      regmbc('g'); REGMBC(0x11d) REGMBC(0x11f)
++		      REGMBC(0x121) REGMBC(0x123) REGMBC(0x1e5)
++		      REGMBC(0x1e7) REGMBC(0x1f5) REGMBC(0x1e21)
++		      return;
++	    case 'h': CASEMBC(0x125) CASEMBC(0x127) CASEMBC(0x1e23)
++	    CASEMBC(0x1e27) CASEMBC(0x1e29) CASEMBC(0x1e96)
++		      regmbc('h'); REGMBC(0x125) REGMBC(0x127)
++		      REGMBC(0x1e23) REGMBC(0x1e27) REGMBC(0x1e29)
++		      REGMBC(0x1e96)
+ 		      return;
+ 	    case 'i': case '\354': case '\355': case '\356': case '\357':
++	    CASEMBC(0x129) CASEMBC(0x12b) CASEMBC(0x12d) CASEMBC(0x12f)
++	    CASEMBC(0x1d0) CASEMBC(0x1ec9)
+ 		      regmbc('i'); regmbc('\354'); regmbc('\355');
+ 		      regmbc('\356'); regmbc('\357');
++		      REGMBC(0x129) REGMBC(0x12b) REGMBC(0x12d)
++		      REGMBC(0x12f) REGMBC(0x1d0) REGMBC(0x1ec9)
++		      return;
++	    case 'j': CASEMBC(0x135) CASEMBC(0x1f0)
++		      regmbc('j'); REGMBC(0x135) REGMBC(0x1f0)
++		      return;
++	    case 'k': CASEMBC(0x137) CASEMBC(0x1e9) CASEMBC(0x1e31)
++	    CASEMBC(0x1e35)
++		      regmbc('k'); REGMBC(0x137) REGMBC(0x1e9)
++		      REGMBC(0x1e31) REGMBC(0x1e35)
++		      return;
++	    case 'l': CASEMBC(0x13a) CASEMBC(0x13c) CASEMBC(0x13e)
++	    CASEMBC(0x140) CASEMBC(0x142) CASEMBC(0x1e3b)
++		      regmbc('l'); REGMBC(0x13a) REGMBC(0x13c)
++		      REGMBC(0x13e) REGMBC(0x140) REGMBC(0x142)
++		      REGMBC(0x1e3b)
++		      return;
++	    case 'm': CASEMBC(0x1e3f) CASEMBC(0x1e41)
++		      regmbc('m'); REGMBC(0x1e3f) REGMBC(0x1e41)
+ 		      return;
+ 	    case 'n': case '\361':
++	    CASEMBC(0x144) CASEMBC(0x146) CASEMBC(0x148) CASEMBC(0x149)
++	    CASEMBC(0x1e45) CASEMBC(0x1e49)
+ 		      regmbc('n'); regmbc('\361');
++		      REGMBC(0x144) REGMBC(0x146) REGMBC(0x148)
++		      REGMBC(0x149) REGMBC(0x1e45) REGMBC(0x1e49)
+ 		      return;
+ 	    case 'o': case '\362': case '\363': case '\364': case '\365':
+-	    case '\366':
++	    case '\366': case '\370':
++	    CASEMBC(0x14d) CASEMBC(0x14f) CASEMBC(0x151) CASEMBC(0x1a1)
++	    CASEMBC(0x1d2) CASEMBC(0x1eb) CASEMBC(0x1ed) CASEMBC(0x1ecf)
+ 		      regmbc('o'); regmbc('\362'); regmbc('\363');
+ 		      regmbc('\364'); regmbc('\365'); regmbc('\366');
++		      regmbc('\370');
++		      REGMBC(0x14d) REGMBC(0x14f) REGMBC(0x151)
++		      REGMBC(0x1a1) REGMBC(0x1d2) REGMBC(0x1eb)
++		      REGMBC(0x1ed) REGMBC(0x1ecf)
++		      return;
++	    case 'p': CASEMBC(0x1e55) CASEMBC(0x1e57)
++		      regmbc('p'); REGMBC(0x1e55) REGMBC(0x1e57)
++		      return;
++	    case 'r': CASEMBC(0x155) CASEMBC(0x157) CASEMBC(0x159)
++	    CASEMBC(0x1e59) CASEMBC(0x1e5f)
++		      regmbc('r'); REGMBC(0x155) REGMBC(0x157) REGMBC(0x159)
++		      REGMBC(0x1e59) REGMBC(0x1e5f)
++		      return;
++	    case 's': CASEMBC(0x15b) CASEMBC(0x15d) CASEMBC(0x15f)
++	    CASEMBC(0x161) CASEMBC(0x1e61)
++		      regmbc('s'); REGMBC(0x15b) REGMBC(0x15d)
++		      REGMBC(0x15f) REGMBC(0x161) REGMBC(0x1e61)
++		      return;
++	    case 't': CASEMBC(0x163) CASEMBC(0x165) CASEMBC(0x167)
++	    CASEMBC(0x1e6b) CASEMBC(0x1e6f) CASEMBC(0x1e97)
++		      regmbc('t'); REGMBC(0x163) REGMBC(0x165) REGMBC(0x167)
++		      REGMBC(0x1e6b) REGMBC(0x1e6f) REGMBC(0x1e97)
+ 		      return;
+ 	    case 'u': case '\371': case '\372': case '\373': case '\374':
++	    CASEMBC(0x169) CASEMBC(0x16b) CASEMBC(0x16d) CASEMBC(0x16f)
++	    CASEMBC(0x171) CASEMBC(0x173) CASEMBC(0x1b0) CASEMBC(0x1d4)
++	    CASEMBC(0x1ee7)
+ 		      regmbc('u'); regmbc('\371'); regmbc('\372');
+ 		      regmbc('\373'); regmbc('\374');
++		      REGMBC(0x169) REGMBC(0x16b) REGMBC(0x16d)
++		      REGMBC(0x16f) REGMBC(0x171) REGMBC(0x173)
++		      REGMBC(0x1b0) REGMBC(0x1d4) REGMBC(0x1ee7)
++		      return;
++	    case 'v': CASEMBC(0x1e7d)
++		      regmbc('v'); REGMBC(0x1e7d)
++		      return;
++	    case 'w': CASEMBC(0x175) CASEMBC(0x1e81) CASEMBC(0x1e83)
++	    CASEMBC(0x1e85) CASEMBC(0x1e87) CASEMBC(0x1e98)
++		      regmbc('w'); REGMBC(0x175) REGMBC(0x1e81)
++		      REGMBC(0x1e83) REGMBC(0x1e85) REGMBC(0x1e87)
++		      REGMBC(0x1e98)
++		      return;
++	    case 'x': CASEMBC(0x1e8b) CASEMBC(0x1e8d)
++		      regmbc('x'); REGMBC(0x1e8b) REGMBC(0x1e8d)
+ 		      return;
+ 	    case 'y': case '\375': case '\377':
++	    CASEMBC(0x177) CASEMBC(0x1e8f) CASEMBC(0x1e99)
++	    CASEMBC(0x1ef3) CASEMBC(0x1ef7) CASEMBC(0x1ef9)
+ 		      regmbc('y'); regmbc('\375'); regmbc('\377');
++		      REGMBC(0x177) REGMBC(0x1e8f) REGMBC(0x1e99)
++		      REGMBC(0x1ef3) REGMBC(0x1ef7) REGMBC(0x1ef9)
++		      return;
++	    case 'z': CASEMBC(0x17a) CASEMBC(0x17c) CASEMBC(0x17e)
++	    CASEMBC(0x1b6) CASEMBC(0x1e91) CASEMBC(0x1e95)
++		      regmbc('z'); REGMBC(0x17a) REGMBC(0x17c)
++		      REGMBC(0x17e) REGMBC(0x1b6) REGMBC(0x1e91)
++		      REGMBC(0x1e95)
+ 		      return;
+ 	}
+ #endif
+@@ -891,6 +1174,16 @@
+     return 0;
+ }
+ 
++static void get_cpo_flags __ARGS((void));
++static int reg_cpo_lit; /* 'cpoptions' contains 'l' flag */
++static int reg_cpo_bsl; /* 'cpoptions' contains '\' flag */
++
++    static void
++get_cpo_flags()
++{
++    reg_cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
++    reg_cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
++}
+ 
+ /*
+  * Skip over a "[]" range.
+@@ -901,15 +1194,10 @@
+ skip_anyof(p)
+     char_u	*p;
+ {
+-    int		cpo_lit;	/* 'cpoptions' contains 'l' flag */
+-    int		cpo_bsl;	/* 'cpoptions' contains '\' flag */
+ #ifdef FEAT_MBYTE
+     int		l;
+ #endif
+ 
+-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
+-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
+-
+     if (*p == '^')	/* Complement of range. */
+ 	++p;
+     if (*p == ']' || *p == '-')
+@@ -928,9 +1216,9 @@
+ 		    mb_ptr_adv(p);
+ 	    }
+ 	else if (*p == '\\'
+-		&& !cpo_bsl
++		&& !reg_cpo_bsl
+ 		&& (vim_strchr(REGEXP_INRANGE, p[1]) != NULL
+-		    || (!cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
++		    || (!reg_cpo_lit && vim_strchr(REGEXP_ABBR, p[1]) != NULL)))
+ 	    p += 2;
+ 	else if (*p == '[')
+ 	{
+@@ -969,6 +1257,7 @@
+ 	mymagic = MAGIC_ON;
+     else
+ 	mymagic = MAGIC_OFF;
++    get_cpo_flags();
+ 
+     for (; p[0] != NUL; mb_ptr_adv(p))
+     {
+@@ -1008,8 +1297,11 @@
+     return p;
+ }
+ 
++static regprog_T    *bt_regcomp __ARGS((char_u *expr, int re_flags));
++
+ /*
+- * vim_regcomp() - compile a regular expression into internal code
++ * bt_regcomp() - compile a regular expression into internal code for the
++ * traditional back track matcher.
+  * Returns the program in allocated space.  Returns NULL for an error.
+  *
+  * We can't allocate space until we know how big the compiled form will be,
+@@ -1028,12 +1320,12 @@
+  * of the structure of the compiled regexp.
+  * "re_flags": RE_MAGIC and/or RE_STRING.
+  */
+-    regprog_T *
+-vim_regcomp(expr, re_flags)
++    static regprog_T *
++bt_regcomp(expr, re_flags)
+     char_u	*expr;
+     int		re_flags;
+ {
+-    regprog_T	*r;
++    bt_regprog_T    *r;
+     char_u	*scan;
+     char_u	*longest;
+     int		len;
+@@ -1060,7 +1352,7 @@
+ #endif
+ 
+     /* Allocate space. */
+-    r = (regprog_T *)lalloc(sizeof(regprog_T) + regsize, TRUE);
++    r = (bt_regprog_T *)lalloc(sizeof(bt_regprog_T) + regsize, TRUE);
+     if (r == NULL)
+ 	return NULL;
+ 
+@@ -1155,10 +1447,11 @@
+ 	    r->regmlen = len;
+ 	}
+     }
+-#ifdef DEBUG
++#ifdef BT_REGEXP_DUMP
+     regdump(expr, r);
+ #endif
+-    return r;
++    r->engine = &bt_regengine;
++    return (regprog_T *)r;
+ }
+ 
+ /*
+@@ -1176,6 +1469,7 @@
+ 	reg_magic = MAGIC_OFF;
+     reg_string = (re_flags & RE_STRING);
+     reg_strict = (re_flags & RE_STRICT);
++    get_cpo_flags();
+ 
+     num_complex_braces = 0;
+     regnpar = 1;
+@@ -1205,7 +1499,7 @@
+ #endif
+ 
+ /*
+- * reg - regular expression, i.e. main body or parenthesized thing
++ * Parse regular expression, i.e. main body or parenthesized thing.
+  *
+  * Caller must absorb opening parenthesis.
+  *
+@@ -1242,7 +1536,7 @@
+     {
+ 	/* Make a MOPEN node. */
+ 	if (regnpar >= NSUBEXP)
+-	    EMSG_M_RET_NULL(_("E51: Too many %s("), reg_magic == MAGIC_ALL);
++	    EMSG2_RET_NULL(_("E51: Too many %s("), reg_magic == MAGIC_ALL);
+ 	parno = regnpar;
+ 	++regnpar;
+ 	ret = regnode(MOPEN + parno);
+@@ -1303,14 +1597,14 @@
+ 	else
+ #endif
+ 	    if (paren == REG_NPAREN)
+-	    EMSG_M_RET_NULL(_("E53: Unmatched %s%%("), reg_magic == MAGIC_ALL);
++	    EMSG2_RET_NULL(_(e_unmatchedpp), reg_magic == MAGIC_ALL);
+ 	else
+-	    EMSG_M_RET_NULL(_("E54: Unmatched %s("), reg_magic == MAGIC_ALL);
++	    EMSG2_RET_NULL(_(e_unmatchedp), reg_magic == MAGIC_ALL);
+     }
+     else if (paren == REG_NOPAREN && peekchr() != NUL)
+     {
+ 	if (curchr == Magic(')'))
+-	    EMSG_M_RET_NULL(_("E55: Unmatched %s)"), reg_magic == MAGIC_ALL);
++	    EMSG2_RET_NULL(_(e_unmatchedpar), reg_magic == MAGIC_ALL);
+ 	else
+ 	    EMSG_RET_NULL(_(e_trailing));	/* "Can't happen". */
+ 	/* NOTREACHED */
+@@ -1325,7 +1619,7 @@
+ }
+ 
+ /*
+- * Handle one alternative of an | operator.
++ * Parse one alternative of an | operator.
+  * Implements the & operator.
+  */
+     static char_u *
+@@ -1368,7 +1662,7 @@
+ }
+ 
+ /*
+- * Handle one alternative of an | or & operator.
++ * Parse one alternative of an | or & operator.
+  * Implements the concatenation operator.
+  */
+     static char_u *
+@@ -1448,7 +1742,7 @@
+ }
+ 
+ /*
+- * regpiece - something followed by possible [*+=]
++ * Parse something followed by possible [*+=].
+  *
+  * Note that the branching code sequences used for = and the general cases
+  * of * and + are somewhat optimized:  they use the same NOTHING node as
+@@ -1515,7 +1809,9 @@
+ 	case Magic('@'):
+ 	    {
+ 		int	lop = END;
++		int	nr;
+ 
++		nr = getdecchrs();
+ 		switch (no_Magic(getchr()))
+ 		{
+ 		    case '=': lop = MATCH; break;		  /* \@= */
+@@ -1528,7 +1824,7 @@
+ 			      }
+ 		}
+ 		if (lop == END)
+-		    EMSG_M_RET_NULL(_("E59: invalid character after %s@"),
++		    EMSG2_RET_NULL(_("E59: invalid character after %s@"),
+ 						      reg_magic == MAGIC_ALL);
+ 		/* Look behind must match with behind_pos. */
+ 		if (lop == BEHIND || lop == NOBEHIND)
+@@ -1537,7 +1833,14 @@
+ 		    *flagp |= HASLOOKBH;
+ 		}
+ 		regtail(ret, regnode(END)); /* operand ends */
+-		reginsert(lop, ret);
++		if (lop == BEHIND || lop == NOBEHIND)
++		{
++		    if (nr < 0)
++			nr = 0; /* no limit is same as zero limit */
++		    reginsert_nr(lop, nr, ret);
++		}
++		else
++		    reginsert(lop, ret);
+ 		break;
+ 	    }
+ 
+@@ -1562,7 +1865,7 @@
+ 	    else
+ 	    {
+ 		if (num_complex_braces >= 10)
+-		    EMSG_M_RET_NULL(_("E60: Too many complex %s{...}s"),
++		    EMSG2_RET_NULL(_("E60: Too many complex %s{...}s"),
+ 						      reg_magic == MAGIC_ALL);
+ 		reginsert(BRACE_COMPLEX + num_complex_braces, ret);
+ 		regoptail(ret, regnode(BACK));
+@@ -1589,8 +1892,20 @@
+     return ret;
+ }
+ 
++/* When making changes to classchars also change nfa_classcodes. */
++static char_u	*classchars = (char_u *)".iIkKfFpPsSdDxXoOwWhHaAlLuU";
++static int	classcodes[] = {
++    ANY, IDENT, SIDENT, KWORD, SKWORD,
++    FNAME, SFNAME, PRINT, SPRINT,
++    WHITE, NWHITE, DIGIT, NDIGIT,
++    HEX, NHEX, OCTAL, NOCTAL,
++    WORD, NWORD, HEAD, NHEAD,
++    ALPHA, NALPHA, LOWER, NLOWER,
++    UPPER, NUPPER
++};
++
+ /*
+- * regatom - the lowest level
++ * Parse the lowest level.
+  *
+  * Optimization:  gobbles an entire sequence of ordinary characters so that
+  * it can turn them into a single node, which is smaller to store and
+@@ -1602,24 +1917,11 @@
+ {
+     char_u	    *ret;
+     int		    flags;
+-    int		    cpo_lit;	    /* 'cpoptions' contains 'l' flag */
+-    int		    cpo_bsl;	    /* 'cpoptions' contains '\' flag */
+     int		    c;
+-    static char_u   *classchars = (char_u *)".iIkKfFpPsSdDxXoOwWhHaAlLuU";
+-    static int	    classcodes[] = {ANY, IDENT, SIDENT, KWORD, SKWORD,
+-				    FNAME, SFNAME, PRINT, SPRINT,
+-				    WHITE, NWHITE, DIGIT, NDIGIT,
+-				    HEX, NHEX, OCTAL, NOCTAL,
+-				    WORD, NWORD, HEAD, NHEAD,
+-				    ALPHA, NALPHA, LOWER, NLOWER,
+-				    UPPER, NUPPER
+-				    };
+     char_u	    *p;
+     int		    extra = 0;
+ 
+     *flagp = WORST;		/* Tentatively. */
+-    cpo_lit = vim_strchr(p_cpo, CPO_LITERAL) != NULL;
+-    cpo_bsl = vim_strchr(p_cpo, CPO_BACKSL) != NULL;
+ 
+     c = getchr();
+     switch (c)
+@@ -1826,7 +2128,7 @@
+ 	    {
+ #ifdef FEAT_SYN_HL
+ 		case '(': if (reg_do_extmatch != REX_SET)
+-			      EMSG_RET_NULL(_("E66: \\z( not allowed here"));
++			      EMSG_RET_NULL(_(e_z_not_allowed));
+ 			  if (one_exactly)
+ 			      EMSG_ONE_RET_NULL;
+ 			  ret = reg(REG_ZPAREN, &flags);
+@@ -1845,7 +2147,7 @@
+ 		case '7':
+ 		case '8':
+ 		case '9': if (reg_do_extmatch != REX_USE)
+-			      EMSG_RET_NULL(_("E67: \\z1 et al. not allowed here"));
++			      EMSG_RET_NULL(_(e_z1_not_allowed));
+ 			  ret = regnode(ZREF + c - '0');
+ 			  re_has_z = REX_USE;
+ 			  break;
+@@ -1909,7 +2211,7 @@
+ 			      while ((c = getchr()) != ']')
+ 			      {
+ 				  if (c == NUL)
+-				      EMSG_M_RET_NULL(_("E69: Missing ] after %s%%["),
++				      EMSG2_RET_NULL(_(e_missing_sb),
+ 						      reg_magic == MAGIC_ALL);
+ 				  br = regnode(BRANCH);
+ 				  if (ret == NULL)
+@@ -1925,7 +2227,7 @@
+ 				      return NULL;
+ 			      }
+ 			      if (ret == NULL)
+-				  EMSG_M_RET_NULL(_("E70: Empty %s%%[]"),
++				  EMSG2_RET_NULL(_(e_empty_sb),
+ 						      reg_magic == MAGIC_ALL);
+ 			      lastbranch = regnode(BRANCH);
+ 			      br = regnode(NOTHING);
+@@ -1969,7 +2271,7 @@
+ 			      }
+ 
+ 			      if (i < 0)
+-				  EMSG_M_RET_NULL(
++				  EMSG2_RET_NULL(
+ 					_("E678: Invalid character after %s%%[dxouU]"),
+ 					reg_magic == MAGIC_ALL);
+ #ifdef FEAT_MBYTE
+@@ -2041,7 +2343,7 @@
+ 			      }
+ 			  }
+ 
+-			  EMSG_M_RET_NULL(_("E71: Invalid character after %s%%"),
++			  EMSG2_RET_NULL(_("E71: Invalid character after %s%%"),
+ 						      reg_magic == MAGIC_ALL);
+ 	    }
+ 	}
+@@ -2112,7 +2414,7 @@
+ 			    }
+ 
+ 			    /* Handle \o40, \x20 and \u20AC style sequences */
+-			    if (endc == '\\' && !cpo_lit && !cpo_bsl)
++			    if (endc == '\\' && !reg_cpo_lit && !reg_cpo_bsl)
+ 				endc = coll_get_char();
+ 
+ 			    if (startc > endc)
+@@ -2154,9 +2456,9 @@
+ 		     * Posix doesn't recognize backslash at all.
+ 		     */
+ 		    else if (*regparse == '\\'
+-			    && !cpo_bsl
++			    && !reg_cpo_bsl
+ 			    && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
+-				|| (!cpo_lit
++				|| (!reg_cpo_lit
+ 				    && vim_strchr(REGEXP_ABBR,
+ 						       regparse[1]) != NULL)))
+ 		    {
+@@ -2166,13 +2468,15 @@
+ 			    /* '\n' in range: also match NL */
+ 			    if (ret != JUST_CALC_SIZE)
+ 			    {
+-				if (*ret == ANYBUT)
+-				    *ret = ANYBUT + ADD_NL;
+-				else if (*ret == ANYOF)
++				/* Using \n inside [^] does not change what
++				 * matches. "[^\n]" is the same as ".". */
++				if (*ret == ANYOF)
++				{
+ 				    *ret = ANYOF + ADD_NL;
++				    *flagp |= HASNL;
++				}
+ 				/* else: must have had a \n already */
+ 			    }
+-			    *flagp |= HASNL;
+ 			    regparse++;
+ 			    startc = -1;
+ 			}
+@@ -2334,8 +2638,7 @@
+ 		break;
+ 	    }
+ 	    else if (reg_strict)
+-		EMSG_M_RET_NULL(_("E769: Missing ] after %s["),
+-						       reg_magic > MAGIC_OFF);
++		EMSG2_RET_NULL(_(e_missingbracket), reg_magic > MAGIC_OFF);
+ 	}
+ 	/* FALLTHROUGH */
+ 
+@@ -2426,7 +2729,7 @@
+ #endif
+ 
+ /*
+- * emit a node
++ * Emit a node.
+  * Return pointer to generated code.
+  */
+     static char_u *
+@@ -2468,6 +2771,8 @@
+ regmbc(c)
+     int		c;
+ {
++    if (!has_mbyte && c > 0xff)
++	return;
+     if (regcode == JUST_CALC_SIZE)
+ 	regsize += (*mb_char2len)(c);
+     else
+@@ -2476,7 +2781,7 @@
+ #endif
+ 
+ /*
+- * reginsert - insert an operator in front of already-emitted operand
++ * Insert an operator in front of already-emitted operand
+  *
+  * Means relocating the operand.
+  */
+@@ -2507,7 +2812,39 @@
+ }
+ 
+ /*
+- * reginsert_limits - insert an operator in front of already-emitted operand.
++ * Insert an operator in front of already-emitted operand.
++ * Add a number to the operator.
++ */
++    static void
++reginsert_nr(op, val, opnd)
++    int		op;
++    long	val;
++    char_u	*opnd;
++{
++    char_u	*src;
++    char_u	*dst;
++    char_u	*place;
++
++    if (regcode == JUST_CALC_SIZE)
++    {
++	regsize += 7;
++	return;
++    }
++    src = regcode;
++    regcode += 7;
++    dst = regcode;
++    while (src > opnd)
++	*--dst = *--src;
++
++    place = opnd;		/* Op node, where operand used to be. */
++    *place++ = op;
++    *place++ = NUL;
++    *place++ = NUL;
++    place = re_put_long(place, (long_u)val);
++}
++
++/*
++ * Insert an operator in front of already-emitted operand.
+  * The operator has the given limit values as operands.  Also set next pointer.
+  *
+  * Means relocating the operand.
+@@ -2559,7 +2896,7 @@
+ }
+ 
+ /*
+- * regtail - set the next-pointer at the end of a node chain
++ * Set the next-pointer at the end of a node chain.
+  */
+     static void
+ regtail(p, val)
+@@ -2588,7 +2925,7 @@
+     else
+ 	offset = (int)(val - scan);
+     /* When the offset uses more than 16 bits it can no longer fit in the two
+-     * bytes avaliable.  Use a global flag to avoid having to check return
++     * bytes available.  Use a global flag to avoid having to check return
+      * values in too many places. */
+     if (offset > 0xffff)
+ 	reg_toolong = TRUE;
+@@ -2600,7 +2937,7 @@
+ }
+ 
+ /*
+- * regoptail - regtail on item after a BRANCH; nop if none
++ * Like regtail, on item after a BRANCH; nop if none.
+  */
+     static void
+ regoptail(p, val)
+@@ -2616,22 +2953,15 @@
+ }
+ 
+ /*
+- * getchr() - get the next character from the pattern. We know about
+- * magic and such, so therefore we need a lexical analyzer.
++ * Functions for getting characters from the regexp input.
+  */
+ 
+-/* static int	    curchr; */
+-static int	prevprevchr;
+-static int	prevchr;
+-static int	nextchr;    /* used for ungetchr() */
+-/*
+- * Note: prevchr is sometimes -1 when we are not at the start,
+- * eg in /[ ^I]^ the pattern was never found even if it existed, because ^ was
+- * taken to be magic -- webb
+- */
+ static int	at_start;	/* True when on the first character */
+ static int	prev_at_start;  /* True when on the second character */
+ 
++/*
++ * Start parsing at "str".
++ */
+     static void
+ initchr(str)
+     char_u *str;
+@@ -2643,6 +2973,47 @@
+     prev_at_start = FALSE;
+ }
+ 
++/*
++ * Save the current parse state, so that it can be restored and parsing
++ * starts in the same state again.
++ */
++    static void
++save_parse_state(ps)
++    parse_state_T *ps;
++{
++    ps->regparse = regparse;
++    ps->prevchr_len = prevchr_len;
++    ps->curchr = curchr;
++    ps->prevchr = prevchr;
++    ps->prevprevchr = prevprevchr;
++    ps->nextchr = nextchr;
++    ps->at_start = at_start;
++    ps->prev_at_start = prev_at_start;
++    ps->regnpar = regnpar;
++}
++
++/*
++ * Restore a previously saved parse state.
++ */
++    static void
++restore_parse_state(ps)
++    parse_state_T *ps;
++{
++    regparse = ps->regparse;
++    prevchr_len = ps->prevchr_len;
++    curchr = ps->curchr;
++    prevchr = ps->prevchr;
++    prevprevchr = ps->prevprevchr;
++    nextchr = ps->nextchr;
++    at_start = ps->at_start;
++    prev_at_start = ps->prev_at_start;
++    regnpar = ps->regnpar;
++}
++
++
++/*
++ * Get the next character without advancing.
++ */
+     static int
+ peekchr()
+ {
+@@ -2851,6 +3222,10 @@
+     prevprevchr = prpr;
+ }
+ 
++/*
++ * Get the next character from the pattern. We know about magic and such, so
++ * therefore we need a lexical analyzer.
++ */
+     static int
+ getchr()
+ {
+@@ -2910,7 +3285,7 @@
+ }
+ 
+ /*
+- * get and return the value of the decimal string immediately after the
++ * Get and return the value of the decimal string immediately after the
+  * current position. Return -1 for invalid.  Consumes all digits.
+  */
+     static int
+@@ -2928,6 +3303,7 @@
+ 	nr *= 10;
+ 	nr += c - '0';
+ 	++regparse;
++	curchr = -1; /* no longer valid */
+     }
+ 
+     if (i == 0)
+@@ -3105,8 +3481,8 @@
+ } regbehind_T;
+ 
+ static char_u	*reg_getline __ARGS((linenr_T lnum));
+-static long	vim_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
+-static long	regtry __ARGS((regprog_T *prog, colnr_T col));
++static long	bt_regexec_both __ARGS((char_u *line, colnr_T col, proftime_T *tm));
++static long	regtry __ARGS((bt_regprog_T *prog, colnr_T col));
+ static void	cleanup_subexpr __ARGS((void));
+ #ifdef FEAT_SYN_HL
+ static void	cleanup_zsubexpr __ARGS((void));
+@@ -3163,7 +3539,7 @@
+ /*
+  * Sometimes need to save a copy of a line.  Since alloc()/free() is very
+  * slow, we keep one allocated piece of memory and only re-allocate it when
+- * it's too small.  It's freed in vim_regexec_both() when finished.
++ * it's too small.  It's freed in bt_regexec_both() when finished.
+  */
+ static char_u	*reg_tofree = NULL;
+ static unsigned	reg_tofreelen;
+@@ -3180,7 +3556,7 @@
+  * reg_startpos		<invalid>		reg_mmatch->startpos
+  * reg_endpos		<invalid>		reg_mmatch->endpos
+  * reg_win		NULL			window in which to search
+- * reg_buf		<invalid>		buffer in which to search
++ * reg_buf		curbuf			buffer in which to search
+  * reg_firstlnum	<invalid>		first line in which to search
+  * reg_maxline		0			last line nr
+  * reg_line_lbr		FALSE or TRUE		FALSE
+@@ -3321,6 +3697,8 @@
+ /* TRUE if using multi-line regexp. */
+ #define REG_MULTI	(reg_match == NULL)
+ 
++static int  bt_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
++
+ /*
+  * Match a regexp against a string.
+  * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+@@ -3328,8 +3706,8 @@
+  *
+  * Return TRUE if there is a match, FALSE if not.
+  */
+-    int
+-vim_regexec(rmp, line, col)
++    static int
++bt_regexec(rmp, line, col)
+     regmatch_T	*rmp;
+     char_u	*line;	/* string to match against */
+     colnr_T	col;	/* column to start looking for match */
+@@ -3338,22 +3716,26 @@
+     reg_mmatch = NULL;
+     reg_maxline = 0;
+     reg_line_lbr = FALSE;
++    reg_buf = curbuf;
+     reg_win = NULL;
+     ireg_ic = rmp->rm_ic;
+ #ifdef FEAT_MBYTE
+     ireg_icombine = FALSE;
+ #endif
+     ireg_maxcol = 0;
+-    return (vim_regexec_both(line, col, NULL) != 0);
++    return (bt_regexec_both(line, col, NULL) != 0);
+ }
+ 
+ #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
+ 	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
++
++static int  bt_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
++
+ /*
+  * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
+  */
+-    int
+-vim_regexec_nl(rmp, line, col)
++    static int
++bt_regexec_nl(rmp, line, col)
+     regmatch_T	*rmp;
+     char_u	*line;	/* string to match against */
+     colnr_T	col;	/* column to start looking for match */
+@@ -3362,16 +3744,19 @@
+     reg_mmatch = NULL;
+     reg_maxline = 0;
+     reg_line_lbr = TRUE;
++    reg_buf = curbuf;
+     reg_win = NULL;
+     ireg_ic = rmp->rm_ic;
+ #ifdef FEAT_MBYTE
+     ireg_icombine = FALSE;
+ #endif
+     ireg_maxcol = 0;
+-    return (vim_regexec_both(line, col, NULL) != 0);
++    return (bt_regexec_both(line, col, NULL) != 0);
+ }
+ #endif
+ 
++static long bt_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
++
+ /*
+  * Match a regexp against multiple lines.
+  * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
+@@ -3380,8 +3765,8 @@
+  * Return zero if there is no match.  Return number of lines contained in the
+  * match otherwise.
+  */
+-    long
+-vim_regexec_multi(rmp, win, buf, lnum, col, tm)
++    static long
++bt_regexec_multi(rmp, win, buf, lnum, col, tm)
+     regmmatch_T	*rmp;
+     win_T	*win;		/* window in which to search or NULL */
+     buf_T	*buf;		/* buffer in which to search */
+@@ -3390,7 +3775,6 @@
+     proftime_T	*tm;		/* timeout limit or NULL */
+ {
+     long	r;
+-    buf_T	*save_curbuf = curbuf;
+ 
+     reg_match = NULL;
+     reg_mmatch = rmp;
+@@ -3405,10 +3789,7 @@
+ #endif
+     ireg_maxcol = rmp->rmm_maxcol;
+ 
+-    /* Need to switch to buffer "buf" to make vim_iswordc() work. */
+-    curbuf = buf;
+-    r = vim_regexec_both(NULL, col, tm);
+-    curbuf = save_curbuf;
++    r = bt_regexec_both(NULL, col, tm);
+ 
+     return r;
+ }
+@@ -3418,12 +3799,12 @@
+  * lines ("line" is NULL, use reg_getline()).
+  */
+     static long
+-vim_regexec_both(line, col, tm)
++bt_regexec_both(line, col, tm)
+     char_u	*line;
+     colnr_T	col;		/* column to start looking for match */
+     proftime_T	*tm UNUSED;	/* timeout limit or NULL */
+ {
+-    regprog_T	*prog;
++    bt_regprog_T	*prog;
+     char_u	*s;
+     long	retval = 0L;
+ 
+@@ -3449,14 +3830,14 @@
+ 
+     if (REG_MULTI)
+     {
+-	prog = reg_mmatch->regprog;
++	prog = (bt_regprog_T *)reg_mmatch->regprog;
+ 	line = reg_getline((linenr_T)0);
+ 	reg_startpos = reg_mmatch->startpos;
+ 	reg_endpos = reg_mmatch->endpos;
+     }
+     else
+     {
+-	prog = reg_match->regprog;
++	prog = (bt_regprog_T *)reg_match->regprog;
+ 	reg_startp = reg_match->startp;
+ 	reg_endp = reg_match->endp;
+     }
+@@ -3538,6 +3919,7 @@
+ 
+     regline = line;
+     reglnum = 0;
++    reg_toolong = FALSE;
+ 
+     /* Simplest case: Anchored match need be tried only once. */
+     if (prog->reganch)
+@@ -3697,7 +4079,7 @@
+  */
+     static long
+ regtry(prog, col)
+-    regprog_T	*prog;
++    bt_regprog_T    *prog;
+     colnr_T	col;
+ {
+     reginput = regline + col;
+@@ -3781,12 +4163,91 @@
+ reg_prev_class()
+ {
+     if (reginput > regline)
+-	return mb_get_class(reginput - 1
+-				     - (*mb_head_off)(regline, reginput - 1));
++	return mb_get_class_buf(reginput - 1
++			    - (*mb_head_off)(regline, reginput - 1), reg_buf);
+     return -1;
+ }
+ 
+ #endif
++#ifdef FEAT_VISUAL
++static int reg_match_visual __ARGS((void));
++
++/*
++ * Return TRUE if the current reginput position matches the Visual area.
++ */
++    static int
++reg_match_visual()
++{
++    pos_T	top, bot;
++    linenr_T    lnum;
++    colnr_T	col;
++    win_T	*wp = reg_win == NULL ? curwin : reg_win;
++    int		mode;
++    colnr_T	start, end;
++    colnr_T	start2, end2;
++    colnr_T	cols;
++
++    /* Check if the buffer is the current buffer. */
++    if (reg_buf != curbuf || VIsual.lnum == 0)
++	return FALSE;
++
++    if (VIsual_active)
++    {
++	if (lt(VIsual, wp->w_cursor))
++	{
++	    top = VIsual;
++	    bot = wp->w_cursor;
++	}
++	else
++	{
++	    top = wp->w_cursor;
++	    bot = VIsual;
++	}
++	mode = VIsual_mode;
++    }
++    else
++    {
++	if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
++	{
++	    top = curbuf->b_visual.vi_start;
++	    bot = curbuf->b_visual.vi_end;
++	}
++	else
++	{
++	    top = curbuf->b_visual.vi_end;
++	    bot = curbuf->b_visual.vi_start;
++	}
++	mode = curbuf->b_visual.vi_mode;
++    }
++    lnum = reglnum + reg_firstlnum;
++    if (lnum < top.lnum || lnum > bot.lnum)
++	return FALSE;
++
++    if (mode == 'v')
++    {
++	col = (colnr_T)(reginput - regline);
++	if ((lnum == top.lnum && col < top.col)
++		|| (lnum == bot.lnum && col >= bot.col + (*p_sel != 'e')))
++	    return FALSE;
++    }
++    else if (mode == Ctrl_V)
++    {
++	getvvcol(wp, &top, &start, NULL, &end);
++	getvvcol(wp, &bot, &start2, NULL, &end2);
++	if (start2 < start)
++	    start = start2;
++	if (end2 > end)
++	    end = end2;
++	if (top.col == MAXCOL || bot.col == MAXCOL)
++	    end = MAXCOL;
++	cols = win_linetabsize(wp, regline, (colnr_T)(reginput - regline));
++	if (cols < start || cols > end - (*p_sel == 'e'))
++	    return FALSE;
++    }
++    return TRUE;
++}
++#endif
++
+ #define ADVANCE_REGINPUT() mb_ptr_adv(reginput)
+ 
+ /*
+@@ -3829,7 +4290,7 @@
+ #define RA_NOMATCH	5	/* didn't match */
+ 
+   /* Make "regstack" and "backpos" empty.  They are allocated and freed in
+-   * vim_regexec_both() to reduce malloc()/free() calls. */
++   * bt_regexec_both() to reduce malloc()/free() calls. */
+   regstack.ga_len = 0;
+   backpos.ga_len = 0;
+ 
+@@ -3838,14 +4299,14 @@
+    */
+   for (;;)
+   {
+-    /* Some patterns my cause a long time to match, even though they are not
++    /* Some patterns may cause a long time to match, even though they are not
+      * illegal.  E.g., "\([a-z]\+\)\+Q".  Allow breaking them with CTRL-C. */
+     fast_breakcheck();
+ 
+ #ifdef DEBUG
+     if (scan != NULL && regnarrate)
+     {
+-	mch_errmsg(regprop(scan));
++	mch_errmsg((char *)regprop(scan));
+ 	mch_errmsg("(\n");
+     }
+ #endif
+@@ -3866,7 +4327,7 @@
+ #ifdef DEBUG
+ 	if (regnarrate)
+ 	{
+-	    mch_errmsg(regprop(scan));
++	    mch_errmsg((char *)regprop(scan));
+ 	    mch_errmsg("...\n");
+ # ifdef FEAT_SYN_HL
+ 	    if (re_extmatch_in != NULL)
+@@ -3878,7 +4339,7 @@
+ 		{
+ 		    mch_errmsg("    \"");
+ 		    if (re_extmatch_in->matches[i] != NULL)
+-			mch_errmsg(re_extmatch_in->matches[i]);
++			mch_errmsg((char *)re_extmatch_in->matches[i]);
+ 		    mch_errmsg("\"\n");
+ 		}
+ 	    }
+@@ -3944,16 +4405,15 @@
+ 	    break;
+ 
+ 	  case RE_MARK:
+-	    /* Compare the mark position to the match position.  NOTE: Always
+-	     * uses the current buffer. */
++	    /* Compare the mark position to the match position. */
+ 	    {
+ 		int	mark = OPERAND(scan)[0];
+ 		int	cmp = OPERAND(scan)[1];
+ 		pos_T	*pos;
+ 
+-		pos = getmark(mark, FALSE);
++		pos = getmark_buf(reg_buf, mark, FALSE);
+ 		if (pos == NULL		     /* mark doesn't exist */
+-			|| pos->lnum <= 0    /* mark isn't set (in curbuf) */
++			|| pos->lnum <= 0    /* mark isn't set in reg_buf */
+ 			|| (pos->lnum == reglnum + reg_firstlnum
+ 				? (pos->col == (colnr_T)(reginput - regline)
+ 				    ? (cmp == '<' || cmp == '>')
+@@ -3969,80 +4429,9 @@
+ 
+ 	  case RE_VISUAL:
+ #ifdef FEAT_VISUAL
+-	    /* Check if the buffer is the current buffer. and whether the
+-	     * position is inside the Visual area. */
+-	    if (reg_buf != curbuf || VIsual.lnum == 0)
+-		status = RA_NOMATCH;
+-	    else
+-	    {
+-		pos_T	    top, bot;
+-		linenr_T    lnum;
+-		colnr_T	    col;
+-		win_T	    *wp = reg_win == NULL ? curwin : reg_win;
+-		int	    mode;
+-
+-		if (VIsual_active)
+-		{
+-		    if (lt(VIsual, wp->w_cursor))
+-		    {
+-			top = VIsual;
+-			bot = wp->w_cursor;
+-		    }
+-		    else
+-		    {
+-			top = wp->w_cursor;
+-			bot = VIsual;
+-		    }
+-		    mode = VIsual_mode;
+-		}
+-		else
+-		{
+-		    if (lt(curbuf->b_visual.vi_start, curbuf->b_visual.vi_end))
+-		    {
+-			top = curbuf->b_visual.vi_start;
+-			bot = curbuf->b_visual.vi_end;
+-		    }
+-		    else
+-		    {
+-			top = curbuf->b_visual.vi_end;
+-			bot = curbuf->b_visual.vi_start;
+-		    }
+-		    mode = curbuf->b_visual.vi_mode;
+-		}
+-		lnum = reglnum + reg_firstlnum;
+-		col = (colnr_T)(reginput - regline);
+-		if (lnum < top.lnum || lnum > bot.lnum)
+-		    status = RA_NOMATCH;
+-		else if (mode == 'v')
+-		{
+-		    if ((lnum == top.lnum && col < top.col)
+-			    || (lnum == bot.lnum
+-					 && col >= bot.col + (*p_sel != 'e')))
+-			status = RA_NOMATCH;
+-		}
+-		else if (mode == Ctrl_V)
+-		{
+-		    colnr_T	    start, end;
+-		    colnr_T	    start2, end2;
+-		    colnr_T	    cols;
+-
+-		    getvvcol(wp, &top, &start, NULL, &end);
+-		    getvvcol(wp, &bot, &start2, NULL, &end2);
+-		    if (start2 < start)
+-			start = start2;
+-		    if (end2 > end)
+-			end = end2;
+-		    if (top.col == MAXCOL || bot.col == MAXCOL)
+-			end = MAXCOL;
+-		    cols = win_linetabsize(wp,
+-				      regline, (colnr_T)(reginput - regline));
+-		    if (cols < start || cols > end - (*p_sel == 'e'))
+-			status = RA_NOMATCH;
+-		}
+-	    }
+-#else
+-	    status = RA_NOMATCH;
++	    if (!reg_match_visual())
+ #endif
++		status = RA_NOMATCH;
+ 	    break;
+ 
+ 	  case RE_LNUM:
+@@ -4072,7 +4461,7 @@
+ 		int this_class;
+ 
+ 		/* Get class of current and previous char (if it exists). */
+-		this_class = mb_get_class(reginput);
++		this_class = mb_get_class_buf(reginput, reg_buf);
+ 		if (this_class <= 1)
+ 		    status = RA_NOMATCH;  /* not on a word at all */
+ 		else if (reg_prev_class() == this_class)
+@@ -4081,8 +4470,8 @@
+ #endif
+ 	    else
+ 	    {
+-		if (!vim_iswordc(c)
+-			|| (reginput > regline && vim_iswordc(reginput[-1])))
++		if (!vim_iswordc_buf(c, reg_buf) || (reginput > regline
++				   && vim_iswordc_buf(reginput[-1], reg_buf)))
+ 		    status = RA_NOMATCH;
+ 	    }
+ 	    break;
+@@ -4096,7 +4485,7 @@
+ 		int this_class, prev_class;
+ 
+ 		/* Get class of current and previous char (if it exists). */
+-		this_class = mb_get_class(reginput);
++		this_class = mb_get_class_buf(reginput, reg_buf);
+ 		prev_class = reg_prev_class();
+ 		if (this_class == prev_class
+ 			|| prev_class == 0 || prev_class == 1)
+@@ -4105,13 +4494,14 @@
+ #endif
+ 	    else
+ 	    {
+-		if (!vim_iswordc(reginput[-1])
+-			|| (reginput[0] != NUL && vim_iswordc(c)))
++		if (!vim_iswordc_buf(reginput[-1], reg_buf)
++			|| (reginput[0] != NUL && vim_iswordc_buf(c, reg_buf)))
+ 		    status = RA_NOMATCH;
+ 	    }
+ 	    break; /* Matched with EOW */
+ 
+ 	  case ANY:
++	    /* ANY does not match new lines. */
+ 	    if (c == NUL)
+ 		status = RA_NOMATCH;
+ 	    else
+@@ -4133,14 +4523,14 @@
+ 	    break;
+ 
+ 	  case KWORD:
+-	    if (!vim_iswordp(reginput))
++	    if (!vim_iswordp_buf(reginput, reg_buf))
+ 		status = RA_NOMATCH;
+ 	    else
+ 		ADVANCE_REGINPUT();
+ 	    break;
+ 
+ 	  case SKWORD:
+-	    if (VIM_ISDIGIT(*reginput) || !vim_iswordp(reginput))
++	    if (VIM_ISDIGIT(*reginput) || !vim_iswordp_buf(reginput, reg_buf))
+ 		status = RA_NOMATCH;
+ 	    else
+ 		ADVANCE_REGINPUT();
+@@ -5153,7 +5543,7 @@
+ 		/* save the position after the found match for next */
+ 		reg_save(&(((regbehind_T *)rp) - 1)->save_after, &backpos);
+ 
+-		/* start looking for a match with operand at the current
++		/* Start looking for a match with operand at the current
+ 		 * position.  Go back one character until we find the
+ 		 * result, hitting the start of the line or the previous
+ 		 * line (for multi-line matching).
+@@ -5165,7 +5555,7 @@
+ 		rp->rs_state = RS_BEHIND2;
+ 
+ 		reg_restore(&rp->rs_un.regsave, &backpos);
+-		scan = OPERAND(rp->rs_scan);
++		scan = OPERAND(rp->rs_scan) + 4;
+ 	    }
+ 	    break;
+ 
+@@ -5193,12 +5583,22 @@
+ 	    }
+ 	    else
+ 	    {
++		long limit;
++
+ 		/* No match or a match that doesn't end where we want it: Go
+ 		 * back one character.  May go to previous line once. */
+ 		no = OK;
++		limit = OPERAND_MIN(rp->rs_scan);
+ 		if (REG_MULTI)
+ 		{
+-		    if (rp->rs_un.regsave.rs_u.pos.col == 0)
++		    if (limit > 0
++			    && ((rp->rs_un.regsave.rs_u.pos.lnum
++						    < behind_pos.rs_u.pos.lnum
++				    ? (colnr_T)STRLEN(regline)
++				    : behind_pos.rs_u.pos.col)
++				- rp->rs_un.regsave.rs_u.pos.col >= limit))
++			no = FAIL;
++		    else if (rp->rs_un.regsave.rs_u.pos.col == 0)
+ 		    {
+ 			if (rp->rs_un.regsave.rs_u.pos.lnum
+ 					< behind_pos.rs_u.pos.lnum
+@@ -5214,20 +5614,34 @@
+ 			}
+ 		    }
+ 		    else
+-			--rp->rs_un.regsave.rs_u.pos.col;
++		    {
++#ifdef FEAT_MBYTE
++			if (has_mbyte)
++			    rp->rs_un.regsave.rs_u.pos.col -=
++				(*mb_head_off)(regline, regline
++				    + rp->rs_un.regsave.rs_u.pos.col - 1) + 1;
++			else
++#endif
++			    --rp->rs_un.regsave.rs_u.pos.col;
++		    }
+ 		}
+ 		else
+ 		{
+ 		    if (rp->rs_un.regsave.rs_u.ptr == regline)
+ 			no = FAIL;
+ 		    else
+-			--rp->rs_un.regsave.rs_u.ptr;
++		    {
++			mb_ptr_back(regline, rp->rs_un.regsave.rs_u.ptr);
++			if (limit > 0 && (long)(behind_pos.rs_u.ptr
++				     - rp->rs_un.regsave.rs_u.ptr) > limit)
++			    no = FAIL;
++		    }
+ 		}
+ 		if (no == OK)
+ 		{
+ 		    /* Advanced, prepare for finding match again. */
+ 		    reg_restore(&rp->rs_un.regsave, &backpos);
+-		    scan = OPERAND(rp->rs_scan);
++		    scan = OPERAND(rp->rs_scan) + 4;
+ 		    if (status == RA_MATCH)
+ 		    {
+ 			/* We did match, so subexpr may have been changed,
+@@ -5472,7 +5886,7 @@
+       case SIDENT + ADD_NL:
+ 	while (count < maxcount)
+ 	{
+-	    if (vim_isIDc(*scan) && (testval || !VIM_ISDIGIT(*scan)))
++	    if (vim_isIDc(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
+ 	    {
+ 		mb_ptr_adv(scan);
+ 	    }
+@@ -5502,7 +5916,8 @@
+       case SKWORD + ADD_NL:
+ 	while (count < maxcount)
+ 	{
+-	    if (vim_iswordp(scan) && (testval || !VIM_ISDIGIT(*scan)))
++	    if (vim_iswordp_buf(scan, reg_buf)
++					  && (testval || !VIM_ISDIGIT(*scan)))
+ 	    {
+ 		mb_ptr_adv(scan);
+ 	    }
+@@ -5532,7 +5947,7 @@
+       case SFNAME + ADD_NL:
+ 	while (count < maxcount)
+ 	{
+-	    if (vim_isfilec(*scan) && (testval || !VIM_ISDIGIT(*scan)))
++	    if (vim_isfilec(PTR2CHAR(scan)) && (testval || !VIM_ISDIGIT(*scan)))
+ 	    {
+ 		mb_ptr_adv(scan);
+ 	    }
+@@ -5848,9 +6263,14 @@
+     static int
+ prog_magic_wrong()
+ {
+-    if (UCHARAT(REG_MULTI
+-		? reg_mmatch->regprog->program
+-		: reg_match->regprog->program) != REGMAGIC)
++    regprog_T	*prog;
++
++    prog = REG_MULTI ? reg_mmatch->regprog : reg_match->regprog;
++    if (prog->engine == &nfa_regengine)
++	/* For NFA matcher we don't check the magic */
++	return FALSE;
++
++    if (UCHARAT(((bt_regprog_T *)prog)->program) != REGMAGIC)
+     {
+ 	EMSG(_(e_re_corr));
+ 	return TRUE;
+@@ -6075,7 +6495,7 @@
+ }
+ 
+ 
+-#ifdef DEBUG
++#ifdef BT_REGEXP_DUMP
+ 
+ /*
+  * regdump - dump a regexp onto stdout in vaguely comprehensible form
+@@ -6083,14 +6503,22 @@
+     static void
+ regdump(pattern, r)
+     char_u	*pattern;
+-    regprog_T	*r;
++    bt_regprog_T	*r;
+ {
+     char_u  *s;
+     int	    op = EXACTLY;	/* Arbitrary non-END op. */
+     char_u  *next;
+     char_u  *end = NULL;
++    FILE    *f;
+ 
+-    printf("\r\nregcomp(%s):\r\n", pattern);
++#ifdef BT_REGEXP_LOG
++    f = fopen("bt_regexp_log.log", "a");
++#else
++    f = stdout;
++#endif
++    if (f == NULL)
++	return;
++    fprintf(f, "-------------------------------------\n\r\nregcomp(%s):\r\n", pattern);
+ 
+     s = r->program + 1;
+     /*
+@@ -6100,45 +6528,65 @@
+     while (op != END || s <= end)
+     {
+ 	op = OP(s);
+-	printf("%2d%s", (int)(s - r->program), regprop(s)); /* Where, what. */
++	fprintf(f, "%2d%s", (int)(s - r->program), regprop(s)); /* Where, what. */
+ 	next = regnext(s);
+ 	if (next == NULL)	/* Next ptr. */
+-	    printf("(0)");
++	    fprintf(f, "(0)");
+ 	else
+-	    printf("(%d)", (int)((s - r->program) + (next - s)));
++	    fprintf(f, "(%d)", (int)((s - r->program) + (next - s)));
+ 	if (end < next)
+ 	    end = next;
+ 	if (op == BRACE_LIMITS)
+ 	{
+-	    /* Two short ints */
+-	    printf(" minval %ld, maxval %ld", OPERAND_MIN(s), OPERAND_MAX(s));
++	    /* Two ints */
++	    fprintf(f, " minval %ld, maxval %ld", OPERAND_MIN(s), OPERAND_MAX(s));
+ 	    s += 8;
+ 	}
++	else if (op == BEHIND || op == NOBEHIND)
++	{
++	    /* one int */
++	    fprintf(f, " count %ld", OPERAND_MIN(s));
++	    s += 4;
++	}
++	else if (op == RE_LNUM || op == RE_COL || op == RE_VCOL)
++	{
++	    /* one int plus comperator */
++	    fprintf(f, " count %ld", OPERAND_MIN(s));
++	    s += 5;
++	}
+ 	s += 3;
+ 	if (op == ANYOF || op == ANYOF + ADD_NL
+ 		|| op == ANYBUT || op == ANYBUT + ADD_NL
+ 		|| op == EXACTLY)
+ 	{
+ 	    /* Literal string, where present. */
++	    fprintf(f, "\nxxxxxxxxx\n");
+ 	    while (*s != NUL)
+-		printf("%c", *s++);
++		fprintf(f, "%c", *s++);
++	    fprintf(f, "\nxxxxxxxxx\n");
+ 	    s++;
+ 	}
+-	printf("\r\n");
++	fprintf(f, "\r\n");
+     }
+ 
+     /* Header fields of interest. */
+     if (r->regstart != NUL)
+-	printf("start `%s' 0x%x; ", r->regstart < 256
++	fprintf(f, "start `%s' 0x%x; ", r->regstart < 256
+ 		? (char *)transchar(r->regstart)
+ 		: "multibyte", r->regstart);
+     if (r->reganch)
+-	printf("anchored; ");
++	fprintf(f, "anchored; ");
+     if (r->regmust != NULL)
+-	printf("must have \"%s\"", r->regmust);
+-    printf("\r\n");
++	fprintf(f, "must have \"%s\"", r->regmust);
++    fprintf(f, "\r\n");
++
++#ifdef BT_REGEXP_LOG
++    fclose(f);
++#endif
+ }
++#endif	    /* BT_REGEXP_DUMP */
+ 
++#ifdef DEBUG
+ /*
+  * regprop - printable representation of opcode
+  */
+@@ -6146,12 +6594,12 @@
+ regprop(op)
+     char_u	   *op;
+ {
+-    char_u	    *p;
+-    static char_u   buf[50];
++    char	    *p;
++    static char	    buf[50];
+ 
+-    (void) strcpy(buf, ":");
++    STRCPY(buf, ":");
+ 
+-    switch (OP(op))
++    switch ((int) OP(op))
+     {
+       case BOL:
+ 	p = "BOL";
+@@ -6518,10 +6966,10 @@
+ 	break;
+     }
+     if (p != NULL)
+-	(void) strcat(buf, p);
+-    return buf;
++	STRCAT(buf, p);
++    return (char_u *)buf;
+ }
+-#endif
++#endif	    /* DEBUG */
+ 
+ #ifdef FEAT_MBYTE
+ static void mb_decompose __ARGS((int c, int *c1, int *c2, int *c3));
+@@ -6591,7 +7039,7 @@
+ {
+     decomp_T d;
+ 
+-    if (c >= 0x4b20 && c <= 0xfb4f)
++    if (c >= 0xfb20 && c <= 0xfb4f)
+     {
+ 	d = decomp_table[c - 0xfb20];
+ 	*c1 = d.a;
+@@ -6871,6 +7319,7 @@
+ static regmmatch_T	*submatch_mmatch;
+ static linenr_T		submatch_firstlnum;
+ static linenr_T		submatch_maxline;
++static int		submatch_line_lbr;
+ #endif
+ 
+ #if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) || defined(PROTO)
+@@ -6904,6 +7353,7 @@
+     reg_match = rmp;
+     reg_mmatch = NULL;
+     reg_maxline = 0;
++    reg_buf = curbuf;
+     return vim_regsub_both(source, dest, copy, magic, backslash);
+ }
+ #endif
+@@ -6940,7 +7390,8 @@
+     int		c;
+     int		cc;
+     int		no = -1;
+-    fptr_T	func = (fptr_T)NULL;
++    fptr_T	func_all = (fptr_T)NULL;
++    fptr_T	func_one = (fptr_T)NULL;
+     linenr_T	clnum = 0;	/* init for GCC */
+     int		len = 0;	/* init for GCC */
+ #ifdef FEAT_EVAL
+@@ -6997,6 +7448,7 @@
+ 	    submatch_mmatch = reg_mmatch;
+ 	    submatch_firstlnum = reg_firstlnum;
+ 	    submatch_maxline = reg_maxline;
++	    submatch_line_lbr = reg_line_lbr;
+ 	    save_reg_win = reg_win;
+ 	    save_ireg_ic = ireg_ic;
+ 	    can_f_submatch = TRUE;
+@@ -7008,9 +7460,10 @@
+ 
+ 		for (s = eval_result; *s != NUL; mb_ptr_adv(s))
+ 		{
+-		    /* Change NL to CR, so that it becomes a line break.
++		    /* Change NL to CR, so that it becomes a line break,
++		     * unless called from vim_regexec_nl().
+ 		     * Skip over a backslashed character. */
+-		    if (*s == NL)
++		    if (*s == NL && !submatch_line_lbr)
+ 			*s = CAR;
+ 		    else if (*s == '\\' && s[1] != NUL)
+ 		    {
+@@ -7019,8 +7472,9 @@
+ 			 * :s/abc\\\ndef/\="aaa\\\nbbb"/  on text:
+ 			 *   abc\
+ 			 *   def
++			 * Not when called from vim_regexec_nl().
+ 			 */
+-			if (*s == NL)
++			if (*s == NL && !submatch_line_lbr)
+ 			    *s = CAR;
+ 			had_backslash = TRUE;
+ 		    }
+@@ -7043,6 +7497,7 @@
+ 	    reg_mmatch = submatch_mmatch;
+ 	    reg_firstlnum = submatch_firstlnum;
+ 	    reg_maxline = submatch_maxline;
++	    reg_line_lbr = submatch_line_lbr;
+ 	    reg_win = save_reg_win;
+ 	    ireg_ic = save_ireg_ic;
+ 	    can_f_submatch = FALSE;
+@@ -7069,16 +7524,16 @@
+ 	    {
+ 		switch (*src++)
+ 		{
+-		case 'u':   func = (fptr_T)do_upper;
++		case 'u':   func_one = (fptr_T)do_upper;
+ 			    continue;
+-		case 'U':   func = (fptr_T)do_Upper;
++		case 'U':   func_all = (fptr_T)do_Upper;
+ 			    continue;
+-		case 'l':   func = (fptr_T)do_lower;
++		case 'l':   func_one = (fptr_T)do_lower;
+ 			    continue;
+-		case 'L':   func = (fptr_T)do_Lower;
++		case 'L':   func_all = (fptr_T)do_Lower;
+ 			    continue;
+ 		case 'e':
+-		case 'E':   func = (fptr_T)NULL;
++		case 'E':   func_one = func_all = (fptr_T)NULL;
+ 			    continue;
+ 		}
+ 	    }
+@@ -7131,11 +7586,14 @@
+ #endif
+ 
+ 	    /* Write to buffer, if copy is set. */
+-	    if (func == (fptr_T)NULL)	/* just copy */
+-		cc = c;
+-	    else
++	    if (func_one != (fptr_T)NULL)
++		/* Turbo C complains without the typecast */
++		func_one = (fptr_T)(func_one(&cc, c));
++	    else if (func_all != (fptr_T)NULL)
+ 		/* Turbo C complains without the typecast */
+-		func = (fptr_T)(func(&cc, c));
++		func_all = (fptr_T)(func_all(&cc, c));
++	    else /* just copy */
++		cc = c;
+ 
+ #ifdef FEAT_MBYTE
+ 	    if (has_mbyte)
+@@ -7246,11 +7704,14 @@
+ #endif
+ 				c = *s;
+ 
+-			    if (func == (fptr_T)NULL)	/* just copy */
+-				cc = c;
+-			    else
++			    if (func_one != (fptr_T)NULL)
+ 				/* Turbo C complains without the typecast */
+-				func = (fptr_T)(func(&cc, c));
++				func_one = (fptr_T)(func_one(&cc, c));
++			    else if (func_all != (fptr_T)NULL)
++				/* Turbo C complains without the typecast */
++				func_all = (fptr_T)(func_all(&cc, c));
++			    else /* just copy */
++				cc = c;
+ 
+ #ifdef FEAT_MBYTE
+ 			    if (has_mbyte)
+@@ -7411,3 +7872,177 @@
+     return retval;
+ }
+ #endif
++
++static regengine_T bt_regengine =
++{
++    bt_regcomp,
++    bt_regexec,
++#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
++	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
++    bt_regexec_nl,
++#endif
++    bt_regexec_multi
++#ifdef DEBUG
++    ,(char_u *)""
++#endif
++};
++
++
++#include "regexp_nfa.c"
++
++static regengine_T nfa_regengine =
++{
++    nfa_regcomp,
++    nfa_regexec,
++#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
++	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
++    nfa_regexec_nl,
++#endif
++    nfa_regexec_multi
++#ifdef DEBUG
++    ,(char_u *)""
++#endif
++};
++
++/* Which regexp engine to use? Needed for vim_regcomp().
++ * Must match with 'regexpengine'. */
++static int regexp_engine = 0;
++#define	    AUTOMATIC_ENGINE	0
++#define	    BACKTRACKING_ENGINE	1
++#define	    NFA_ENGINE		2
++#ifdef DEBUG
++static char_u regname[][30] = {
++		    "AUTOMATIC Regexp Engine",
++		    "BACKTRACKING Regexp Engine",
++		    "NFA Regexp Engine"
++			    };
++#endif
++
++/*
++ * Compile a regular expression into internal code.
++ * Returns the program in allocated memory.  Returns NULL for an error.
++ */
++    regprog_T *
++vim_regcomp(expr_arg, re_flags)
++    char_u	*expr_arg;
++    int		re_flags;
++{
++    regprog_T   *prog = NULL;
++    char_u	*expr = expr_arg;
++
++    regexp_engine = p_re;
++
++    /* Check for prefix "\%#=", that sets the regexp engine */
++    if (STRNCMP(expr, "\\%#=", 4) == 0)
++    {
++	int newengine = expr[4] - '0';
++
++	if (newengine == AUTOMATIC_ENGINE
++	    || newengine == BACKTRACKING_ENGINE
++	    || newengine == NFA_ENGINE)
++	{
++	    regexp_engine = expr[4] - '0';
++	    expr += 5;
++#ifdef DEBUG
++	    EMSG3("New regexp mode selected (%d): %s", regexp_engine,
++						    regname[newengine]);
++#endif
++	}
++	else
++	{
++	    EMSG(_("E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be used "));
++	    regexp_engine = AUTOMATIC_ENGINE;
++	}
++    }
++#ifdef DEBUG
++    bt_regengine.expr = expr;
++    nfa_regengine.expr = expr;
++#endif
++
++    /*
++     * First try the NFA engine, unless backtracking was requested.
++     */
++    if (regexp_engine != BACKTRACKING_ENGINE)
++        prog = nfa_regengine.regcomp(expr, re_flags);
++    else
++	prog = bt_regengine.regcomp(expr, re_flags);
++
++    if (prog == NULL)	    /* error compiling regexp with initial engine */
++    {
++#ifdef BT_REGEXP_DEBUG_LOG
++	if (regexp_engine != BACKTRACKING_ENGINE)   /* debugging log for NFA */
++	{
++	    FILE *f;
++	    f = fopen(BT_REGEXP_DEBUG_LOG_NAME, "a");
++	    if (f)
++	    {
++		fprintf(f, "Syntax error in \"%s\"\n", expr);
++		fclose(f);
++	    }
++	    else
++		EMSG2("(NFA) Could not open \"%s\" to write !!!",
++                        BT_REGEXP_DEBUG_LOG_NAME);
++	}
++#endif
++	/*
++	 * If NFA engine failed, then revert to the backtracking engine.
++	 * Except when there was a syntax error, which was properly handled by
++	 * NFA engine.
++	 */
++	if (regexp_engine == AUTOMATIC_ENGINE)
++	    prog = bt_regengine.regcomp(expr, re_flags);
++    }
++
++    return prog;
++}
++
++/*
++ * Match a regexp against a string.
++ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
++ * Uses curbuf for line count and 'iskeyword'.
++ *
++ * Return TRUE if there is a match, FALSE if not.
++ */
++    int
++vim_regexec(rmp, line, col)
++    regmatch_T *rmp;
++    char_u      *line;  /* string to match against */
++    colnr_T     col;    /* column to start looking for match */
++{
++    return rmp->regprog->engine->regexec(rmp, line, col);
++}
++
++#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
++	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
++/*
++ * Like vim_regexec(), but consider a "\n" in "line" to be a line break.
++ */
++    int
++vim_regexec_nl(rmp, line, col)
++    regmatch_T *rmp;
++    char_u *line;
++    colnr_T col;
++{
++    return rmp->regprog->engine->regexec_nl(rmp, line, col);
++}
++#endif
++
++/*
++ * Match a regexp against multiple lines.
++ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
++ * Uses curbuf for line count and 'iskeyword'.
++ *
++ * Return zero if there is no match.  Return number of lines contained in the
++ * match otherwise.
++ */
++    long
++vim_regexec_multi(rmp, win, buf, lnum, col, tm)
++    regmmatch_T *rmp;
++    win_T       *win;           /* window in which to search or NULL */
++    buf_T       *buf;           /* buffer in which to search */
++    linenr_T    lnum;           /* nr of line to start looking for match */
++    colnr_T     col;            /* column to start looking for match */
++    proftime_T	*tm;		/* timeout limit or NULL */
++{
++    return rmp->regprog->engine->regexec_multi(rmp, win, buf, lnum, col, tm);
++}
+diff -Naur vim73.orig/src/regexp.h vim73/src/regexp.h
+--- vim73.orig/src/regexp.h	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/regexp.h	2013-06-07 17:07:35.765573211 +0000
+@@ -22,20 +22,86 @@
+ #define NSUBEXP  10
+ 
+ /*
++ * In the NFA engine: how many braces are allowed.
++ * TODO(RE): Use dynamic memory allocation instead of static, like here
++ */
++#define NFA_MAX_BRACES 20
++
++typedef struct regengine regengine_T;
++
++/*
+  * Structure returned by vim_regcomp() to pass on to vim_regexec().
++ * This is the general structure. For the actual matcher, two specific
++ * structures are used. See code below.
++ */
++typedef struct regprog
++{
++    regengine_T		*engine;
++    unsigned		regflags;
++} regprog_T;
++
++/*
++ * Structure used by the back track matcher.
+  * These fields are only to be used in regexp.c!
+- * See regep.c for an explanation.
++ * See regexp.c for an explanation.
+  */
+ typedef struct
+ {
++    /* These two members implement regprog_T */
++    regengine_T		*engine;
++    unsigned		regflags;
++
+     int			regstart;
+     char_u		reganch;
+     char_u		*regmust;
+     int			regmlen;
+-    unsigned		regflags;
++#ifdef FEAT_SYN_HL
+     char_u		reghasz;
+-    char_u		program[1];		/* actually longer.. */
+-} regprog_T;
++#endif
++    char_u		program[1];	/* actually longer.. */
++} bt_regprog_T;
++
++/*
++ * Structure representing a NFA state.
++ * A NFA state may have no outgoing edge, when it is a NFA_MATCH state.
++ */
++typedef struct nfa_state nfa_state_T;
++struct nfa_state
++{
++    int			c;
++    nfa_state_T		*out;
++    nfa_state_T		*out1;
++    int			id;
++    int			lastlist[2]; /* 0: normal, 1: recursive */
++    int			val;
++};
++
++/*
++ * Structure used by the NFA matcher.
++ */
++typedef struct
++{
++    /* These two members implement regprog_T */
++    regengine_T		*engine;
++    unsigned		regflags;
++
++    nfa_state_T		*start;		/* points into state[] */
++
++    int			reganch;	/* pattern starts with ^ */
++    int			regstart;	/* char at start of pattern */
++
++    int			has_zend;	/* pattern contains \ze */
++    int			has_backref;	/* pattern contains \1 .. \9 */
++#ifdef FEAT_SYN_HL
++    int			reghasz;
++#endif
++#ifdef DEBUG
++    char_u		*pattern;
++#endif
++    int			nsubexp;	/* number of () */
++    int			nstate;
++    nfa_state_T		state[0];	/* actually longer.. */
++} nfa_regprog_T;
+ 
+ /*
+  * Structure to be used for single-line matching.
+@@ -78,4 +144,18 @@
+     char_u		*matches[NSUBEXP];
+ } reg_extmatch_T;
+ 
++struct regengine
++{
++    regprog_T	*(*regcomp)(char_u*, int);
++    int		(*regexec)(regmatch_T*, char_u*, colnr_T);
++#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
++	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
++    int		(*regexec_nl)(regmatch_T*, char_u*, colnr_T);
++#endif
++    long	(*regexec_multi)(regmmatch_T*, win_T*, buf_T*, linenr_T, colnr_T, proftime_T*);
++#ifdef DEBUG
++    char_u	*expr;
++#endif
++};
++
+ #endif	/* _REGEXP_H */
+diff -Naur vim73.orig/src/regexp_nfa.c vim73/src/regexp_nfa.c
+--- vim73.orig/src/regexp_nfa.c	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/regexp_nfa.c	2013-06-07 17:07:35.778906506 +0000
+@@ -0,0 +1,5910 @@
++/* vi:set ts=8 sts=4 sw=4:
++ *
++ * NFA regular expression implementation.
++ *
++ * This file is included in "regexp.c".
++ */
++
++/*
++ * Logging of NFA engine.
++ *
++ * The NFA engine can write four log files:
++ * - Error log: Contains NFA engine's fatal errors.
++ * - Dump log: Contains compiled NFA state machine's information.
++ * - Run log: Contains information of matching procedure.
++ * - Debug log: Contains detailed information of matching procedure. Can be
++ *   disabled by undefining NFA_REGEXP_DEBUG_LOG.
++ * The first one can also be used without debug mode.
++ * The last three are enabled when compiled as debug mode and individually
++ * disabled by commenting them out.
++ * The log files can get quite big!
++ * Do disable all of this when compiling Vim for debugging, undefine DEBUG in
++ * regexp.c
++ */
++#ifdef DEBUG
++# define NFA_REGEXP_ERROR_LOG	"nfa_regexp_error.log"
++# define ENABLE_LOG
++# define NFA_REGEXP_DUMP_LOG	"nfa_regexp_dump.log"
++# define NFA_REGEXP_RUN_LOG	"nfa_regexp_run.log"
++# define NFA_REGEXP_DEBUG_LOG	"nfa_regexp_debug.log"
++#endif
++
++enum
++{
++    NFA_SPLIT = -1024,
++    NFA_MATCH,
++    NFA_SKIP_CHAR,		    /* matches a 0-length char */
++
++    NFA_START_COLL,		    /* [abc] start */
++    NFA_END_COLL,		    /* [abc] end */
++    NFA_START_NEG_COLL,		    /* [^abc] start */
++    NFA_END_NEG_COLL,		    /* [^abc] end (only used in postfix) */
++    NFA_RANGE,			    /* range of the two previous items (only
++				     * used in postfix) */
++    NFA_RANGE_MIN,		    /* low end of a range  */
++    NFA_RANGE_MAX,		    /* high end of a range  */
++
++    NFA_CONCAT,			    /* concatenate two previous items (only
++				     * used in postfix) */
++    NFA_OR,
++    NFA_STAR,			    /* greedy * */
++    NFA_STAR_NONGREEDY,		    /* non-greedy * */
++    NFA_QUEST,			    /* greedy \? */
++    NFA_QUEST_NONGREEDY,	    /* non-greedy \? */
++
++    NFA_BOL,			    /* ^    Begin line */
++    NFA_EOL,			    /* $    End line */
++    NFA_BOW,			    /* \<   Begin word */
++    NFA_EOW,			    /* \>   End word */
++    NFA_BOF,			    /* \%^  Begin file */
++    NFA_EOF,			    /* \%$  End file */
++    NFA_NEWL,
++    NFA_ZSTART,			    /* Used for \zs */
++    NFA_ZEND,			    /* Used for \ze */
++    NFA_NOPEN,			    /* Start of subexpression marked with \%( */
++    NFA_NCLOSE,			    /* End of subexpr. marked with \%( ... \) */
++    NFA_START_INVISIBLE,
++    NFA_START_INVISIBLE_NEG,
++    NFA_START_INVISIBLE_BEFORE,
++    NFA_START_INVISIBLE_BEFORE_NEG,
++    NFA_START_PATTERN,
++    NFA_END_INVISIBLE,
++    NFA_END_INVISIBLE_NEG,
++    NFA_END_PATTERN,
++    NFA_COMPOSING,		    /* Next nodes in NFA are part of the
++				       composing multibyte char */
++    NFA_END_COMPOSING,		    /* End of a composing char in the NFA */
++    NFA_OPT_CHARS,		    /* \%[abc] */
++
++    /* The following are used only in the postfix form, not in the NFA */
++    NFA_PREV_ATOM_NO_WIDTH,	    /* Used for \@= */
++    NFA_PREV_ATOM_NO_WIDTH_NEG,	    /* Used for \@! */
++    NFA_PREV_ATOM_JUST_BEFORE,	    /* Used for \@<= */
++    NFA_PREV_ATOM_JUST_BEFORE_NEG,  /* Used for \@<! */
++    NFA_PREV_ATOM_LIKE_PATTERN,	    /* Used for \@> */
++
++    NFA_BACKREF1,		    /* \1 */
++    NFA_BACKREF2,		    /* \2 */
++    NFA_BACKREF3,		    /* \3 */
++    NFA_BACKREF4,		    /* \4 */
++    NFA_BACKREF5,		    /* \5 */
++    NFA_BACKREF6,		    /* \6 */
++    NFA_BACKREF7,		    /* \7 */
++    NFA_BACKREF8,		    /* \8 */
++    NFA_BACKREF9,		    /* \9 */
++#ifdef FEAT_SYN_HL
++    NFA_ZREF1,			    /* \z1 */
++    NFA_ZREF2,			    /* \z2 */
++    NFA_ZREF3,			    /* \z3 */
++    NFA_ZREF4,			    /* \z4 */
++    NFA_ZREF5,			    /* \z5 */
++    NFA_ZREF6,			    /* \z6 */
++    NFA_ZREF7,			    /* \z7 */
++    NFA_ZREF8,			    /* \z8 */
++    NFA_ZREF9,			    /* \z9 */
++#endif
++    NFA_SKIP,			    /* Skip characters */
++
++    NFA_MOPEN,
++    NFA_MOPEN1,
++    NFA_MOPEN2,
++    NFA_MOPEN3,
++    NFA_MOPEN4,
++    NFA_MOPEN5,
++    NFA_MOPEN6,
++    NFA_MOPEN7,
++    NFA_MOPEN8,
++    NFA_MOPEN9,
++
++    NFA_MCLOSE,
++    NFA_MCLOSE1,
++    NFA_MCLOSE2,
++    NFA_MCLOSE3,
++    NFA_MCLOSE4,
++    NFA_MCLOSE5,
++    NFA_MCLOSE6,
++    NFA_MCLOSE7,
++    NFA_MCLOSE8,
++    NFA_MCLOSE9,
++
++#ifdef FEAT_SYN_HL
++    NFA_ZOPEN,
++    NFA_ZOPEN1,
++    NFA_ZOPEN2,
++    NFA_ZOPEN3,
++    NFA_ZOPEN4,
++    NFA_ZOPEN5,
++    NFA_ZOPEN6,
++    NFA_ZOPEN7,
++    NFA_ZOPEN8,
++    NFA_ZOPEN9,
++
++    NFA_ZCLOSE,
++    NFA_ZCLOSE1,
++    NFA_ZCLOSE2,
++    NFA_ZCLOSE3,
++    NFA_ZCLOSE4,
++    NFA_ZCLOSE5,
++    NFA_ZCLOSE6,
++    NFA_ZCLOSE7,
++    NFA_ZCLOSE8,
++    NFA_ZCLOSE9,
++#endif
++
++    /* NFA_FIRST_NL */
++    NFA_ANY,		/*	Match any one character. */
++    NFA_ANYOF,		/*	Match any character in this string. */
++    NFA_ANYBUT,		/*	Match any character not in this string. */
++    NFA_IDENT,		/*	Match identifier char */
++    NFA_SIDENT,		/*	Match identifier char but no digit */
++    NFA_KWORD,		/*	Match keyword char */
++    NFA_SKWORD,		/*	Match word char but no digit */
++    NFA_FNAME,		/*	Match file name char */
++    NFA_SFNAME,		/*	Match file name char but no digit */
++    NFA_PRINT,		/*	Match printable char */
++    NFA_SPRINT,		/*	Match printable char but no digit */
++    NFA_WHITE,		/*	Match whitespace char */
++    NFA_NWHITE,		/*	Match non-whitespace char */
++    NFA_DIGIT,		/*	Match digit char */
++    NFA_NDIGIT,		/*	Match non-digit char */
++    NFA_HEX,		/*	Match hex char */
++    NFA_NHEX,		/*	Match non-hex char */
++    NFA_OCTAL,		/*	Match octal char */
++    NFA_NOCTAL,		/*	Match non-octal char */
++    NFA_WORD,		/*	Match word char */
++    NFA_NWORD,		/*	Match non-word char */
++    NFA_HEAD,		/*	Match head char */
++    NFA_NHEAD,		/*	Match non-head char */
++    NFA_ALPHA,		/*	Match alpha char */
++    NFA_NALPHA,		/*	Match non-alpha char */
++    NFA_LOWER,		/*	Match lowercase char */
++    NFA_NLOWER,		/*	Match non-lowercase char */
++    NFA_UPPER,		/*	Match uppercase char */
++    NFA_NUPPER,		/*	Match non-uppercase char */
++
++    NFA_CURSOR,		/*	Match cursor pos */
++    NFA_LNUM,		/*	Match line number */
++    NFA_LNUM_GT,	/*	Match > line number */
++    NFA_LNUM_LT,	/*	Match < line number */
++    NFA_COL,		/*	Match cursor column */
++    NFA_COL_GT,		/*	Match > cursor column */
++    NFA_COL_LT,		/*	Match < cursor column */
++    NFA_VCOL,		/*	Match cursor virtual column */
++    NFA_VCOL_GT,	/*	Match > cursor virtual column */
++    NFA_VCOL_LT,	/*	Match < cursor virtual column */
++    NFA_MARK,		/*	Match mark */
++    NFA_MARK_GT,	/*	Match > mark */
++    NFA_MARK_LT,	/*	Match < mark */
++    NFA_VISUAL,		/*	Match Visual area */
++
++    NFA_FIRST_NL = NFA_ANY + ADD_NL,
++    NFA_LAST_NL = NFA_NUPPER + ADD_NL,
++
++    /* Character classes [:alnum:] etc */
++    NFA_CLASS_ALNUM,
++    NFA_CLASS_ALPHA,
++    NFA_CLASS_BLANK,
++    NFA_CLASS_CNTRL,
++    NFA_CLASS_DIGIT,
++    NFA_CLASS_GRAPH,
++    NFA_CLASS_LOWER,
++    NFA_CLASS_PRINT,
++    NFA_CLASS_PUNCT,
++    NFA_CLASS_SPACE,
++    NFA_CLASS_UPPER,
++    NFA_CLASS_XDIGIT,
++    NFA_CLASS_TAB,
++    NFA_CLASS_RETURN,
++    NFA_CLASS_BACKSPACE,
++    NFA_CLASS_ESCAPE
++};
++
++/* Keep in sync with classchars. */
++static int nfa_classcodes[] = {
++    NFA_ANY, NFA_IDENT, NFA_SIDENT, NFA_KWORD,NFA_SKWORD,
++    NFA_FNAME, NFA_SFNAME, NFA_PRINT, NFA_SPRINT,
++    NFA_WHITE, NFA_NWHITE, NFA_DIGIT, NFA_NDIGIT,
++    NFA_HEX, NFA_NHEX, NFA_OCTAL, NFA_NOCTAL,
++    NFA_WORD, NFA_NWORD, NFA_HEAD, NFA_NHEAD,
++    NFA_ALPHA, NFA_NALPHA, NFA_LOWER, NFA_NLOWER,
++    NFA_UPPER, NFA_NUPPER
++};
++
++static char_u e_misplaced[] = N_("E866: (NFA regexp) Misplaced %c");
++
++/* NFA regexp \ze operator encountered. */
++static int nfa_has_zend;
++
++/* NFA regexp \1 .. \9 encountered. */
++static int nfa_has_backref;
++
++#ifdef FEAT_SYN_HL
++/* NFA regexp has \z( ), set zsubexpr. */
++static int nfa_has_zsubexpr;
++#endif
++
++/* Number of sub expressions actually being used during execution. 1 if only
++ * the whole match (subexpr 0) is used. */
++static int nfa_nsubexpr;
++
++static int *post_start;  /* holds the postfix form of r.e. */
++static int *post_end;
++static int *post_ptr;
++
++static int nstate;	/* Number of states in the NFA. Also used when
++			 * executing. */
++static int istate;	/* Index in the state vector, used in alloc_state() */
++
++/* If not NULL match must end at this position */
++static save_se_T *nfa_endp = NULL;
++
++/* listid is global, so that it increases on recursive calls to
++ * nfa_regmatch(), which means we don't have to clear the lastlist field of
++ * all the states. */
++static int nfa_listid;
++static int nfa_alt_listid;
++
++/* 0 for first call to nfa_regmatch(), 1 for recursive call. */
++static int nfa_ll_index = 0;
++
++static int nfa_regcomp_start __ARGS((char_u *expr, int re_flags));
++static int nfa_get_reganch __ARGS((nfa_state_T *start, int depth));
++static int nfa_get_regstart __ARGS((nfa_state_T *start, int depth));
++static int nfa_recognize_char_class __ARGS((char_u *start, char_u *end, int extra_newl));
++static int nfa_emit_equi_class __ARGS((int c));
++static int nfa_regatom __ARGS((void));
++static int nfa_regpiece __ARGS((void));
++static int nfa_regconcat __ARGS((void));
++static int nfa_regbranch __ARGS((void));
++static int nfa_reg __ARGS((int paren));
++#ifdef DEBUG
++static void nfa_set_code __ARGS((int c));
++static void nfa_postfix_dump __ARGS((char_u *expr, int retval));
++static void nfa_print_state __ARGS((FILE *debugf, nfa_state_T *state));
++static void nfa_print_state2 __ARGS((FILE *debugf, nfa_state_T *state, garray_T *indent));
++static void nfa_dump __ARGS((nfa_regprog_T *prog));
++#endif
++static int *re2post __ARGS((void));
++static nfa_state_T *alloc_state __ARGS((int c, nfa_state_T *out, nfa_state_T *out1));
++static nfa_state_T *post2nfa __ARGS((int *postfix, int *end, int nfa_calc_size));
++static int check_char_class __ARGS((int class, int c));
++static void st_error __ARGS((int *postfix, int *end, int *p));
++static void nfa_save_listids __ARGS((nfa_regprog_T *prog, int *list));
++static void nfa_restore_listids __ARGS((nfa_regprog_T *prog, int *list));
++static int nfa_re_num_cmp __ARGS((long_u val, int op, long_u pos));
++static long nfa_regtry __ARGS((nfa_regprog_T *prog, colnr_T col));
++static long nfa_regexec_both __ARGS((char_u *line, colnr_T col));
++static regprog_T *nfa_regcomp __ARGS((char_u *expr, int re_flags));
++static int nfa_regexec __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
++static long nfa_regexec_multi __ARGS((regmmatch_T *rmp, win_T *win, buf_T *buf, linenr_T lnum, colnr_T col, proftime_T *tm));
++
++/* helper functions used when doing re2post() ... regatom() parsing */
++#define EMIT(c)	do {				\
++		    if (post_ptr >= post_end && realloc_post_list() == FAIL) \
++			return FAIL;		\
++		    *post_ptr++ = c;		\
++		} while (0)
++
++/*
++ * Initialize internal variables before NFA compilation.
++ * Return OK on success, FAIL otherwise.
++ */
++    static int
++nfa_regcomp_start(expr, re_flags)
++    char_u	*expr;
++    int		re_flags;	    /* see vim_regcomp() */
++{
++    size_t	postfix_size;
++    int		nstate_max;
++
++    nstate = 0;
++    istate = 0;
++    /* A reasonable estimation for maximum size */
++    nstate_max = (int)(STRLEN(expr) + 1) * 25;
++
++    /* Some items blow up in size, such as [A-z].  Add more space for that.
++     * When it is still not enough realloc_post_list() will be used. */
++    nstate_max += 1000;
++
++    /* Size for postfix representation of expr. */
++    postfix_size = sizeof(int) * nstate_max;
++
++    post_start = (int *)lalloc(postfix_size, TRUE);
++    if (post_start == NULL)
++	return FAIL;
++    post_ptr = post_start;
++    post_end = post_start + nstate_max;
++    nfa_has_zend = FALSE;
++    nfa_has_backref = FALSE;
++
++    /* shared with BT engine */
++    regcomp_start(expr, re_flags);
++
++    return OK;
++}
++
++/*
++ * Figure out if the NFA state list starts with an anchor, must match at start
++ * of the line.
++ */
++    static int
++nfa_get_reganch(start, depth)
++    nfa_state_T *start;
++    int		depth;
++{
++    nfa_state_T *p = start;
++
++    if (depth > 4)
++	return 0;
++
++    while (p != NULL)
++    {
++	switch (p->c)
++	{
++	    case NFA_BOL:
++	    case NFA_BOF:
++		return 1; /* yes! */
++
++	    case NFA_ZSTART:
++	    case NFA_ZEND:
++	    case NFA_CURSOR:
++	    case NFA_VISUAL:
++
++	    case NFA_MOPEN:
++	    case NFA_MOPEN1:
++	    case NFA_MOPEN2:
++	    case NFA_MOPEN3:
++	    case NFA_MOPEN4:
++	    case NFA_MOPEN5:
++	    case NFA_MOPEN6:
++	    case NFA_MOPEN7:
++	    case NFA_MOPEN8:
++	    case NFA_MOPEN9:
++	    case NFA_NOPEN:
++#ifdef FEAT_SYN_HL
++	    case NFA_ZOPEN:
++	    case NFA_ZOPEN1:
++	    case NFA_ZOPEN2:
++	    case NFA_ZOPEN3:
++	    case NFA_ZOPEN4:
++	    case NFA_ZOPEN5:
++	    case NFA_ZOPEN6:
++	    case NFA_ZOPEN7:
++	    case NFA_ZOPEN8:
++	    case NFA_ZOPEN9:
++#endif
++		p = p->out;
++		break;
++
++	    case NFA_SPLIT:
++		return nfa_get_reganch(p->out, depth + 1)
++				       && nfa_get_reganch(p->out1, depth + 1);
++
++	    default:
++		return 0; /* noooo */
++	}
++    }
++    return 0;
++}
++
++/*
++ * Figure out if the NFA state list starts with a character which must match
++ * at start of the match.
++ */
++    static int
++nfa_get_regstart(start, depth)
++    nfa_state_T *start;
++    int		depth;
++{
++    nfa_state_T *p = start;
++
++    if (depth > 4)
++	return 0;
++
++    while (p != NULL)
++    {
++	switch (p->c)
++	{
++	    /* all kinds of zero-width matches */
++	    case NFA_BOL:
++	    case NFA_BOF:
++	    case NFA_BOW:
++	    case NFA_EOW:
++	    case NFA_ZSTART:
++	    case NFA_ZEND:
++	    case NFA_CURSOR:
++	    case NFA_VISUAL:
++	    case NFA_LNUM:
++	    case NFA_LNUM_GT:
++	    case NFA_LNUM_LT:
++	    case NFA_COL:
++	    case NFA_COL_GT:
++	    case NFA_COL_LT:
++	    case NFA_VCOL:
++	    case NFA_VCOL_GT:
++	    case NFA_VCOL_LT:
++	    case NFA_MARK:
++	    case NFA_MARK_GT:
++	    case NFA_MARK_LT:
++
++	    case NFA_MOPEN:
++	    case NFA_MOPEN1:
++	    case NFA_MOPEN2:
++	    case NFA_MOPEN3:
++	    case NFA_MOPEN4:
++	    case NFA_MOPEN5:
++	    case NFA_MOPEN6:
++	    case NFA_MOPEN7:
++	    case NFA_MOPEN8:
++	    case NFA_MOPEN9:
++	    case NFA_NOPEN:
++#ifdef FEAT_SYN_HL
++	    case NFA_ZOPEN:
++	    case NFA_ZOPEN1:
++	    case NFA_ZOPEN2:
++	    case NFA_ZOPEN3:
++	    case NFA_ZOPEN4:
++	    case NFA_ZOPEN5:
++	    case NFA_ZOPEN6:
++	    case NFA_ZOPEN7:
++	    case NFA_ZOPEN8:
++	    case NFA_ZOPEN9:
++#endif
++		p = p->out;
++		break;
++
++	    case NFA_SPLIT:
++	    {
++		int c1 = nfa_get_regstart(p->out, depth + 1);
++		int c2 = nfa_get_regstart(p->out1, depth + 1);
++
++		if (c1 == c2)
++		    return c1; /* yes! */
++		return 0;
++	    }
++
++	    default:
++		if (p->c > 0)
++		    return p->c; /* yes! */
++		return 0;
++	}
++    }
++    return 0;
++}
++
++/*
++ * Allocate more space for post_start.  Called when
++ * running above the estimated number of states.
++ */
++    static int
++realloc_post_list()
++{
++    int   nstate_max = (int)(post_end - post_start);
++    int   new_max = nstate_max + 1000;
++    int   *new_start;
++    int	  *old_start;
++
++    new_start = (int *)lalloc(new_max * sizeof(int), TRUE);
++    if (new_start == NULL)
++	return FAIL;
++    mch_memmove(new_start, post_start, nstate_max * sizeof(int));
++    old_start = post_start;
++    post_start = new_start;
++    post_ptr = new_start + (post_ptr - old_start);
++    post_end = post_start + new_max;
++    vim_free(old_start);
++    return OK;
++}
++
++/*
++ * Search between "start" and "end" and try to recognize a
++ * character class in expanded form. For example [0-9].
++ * On success, return the id the character class to be emitted.
++ * On failure, return 0 (=FAIL)
++ * Start points to the first char of the range, while end should point
++ * to the closing brace.
++ */
++    static int
++nfa_recognize_char_class(start, end, extra_newl)
++    char_u  *start;
++    char_u  *end;
++    int	    extra_newl;
++{
++#   define CLASS_not		0x80
++#   define CLASS_af		0x40
++#   define CLASS_AF		0x20
++#   define CLASS_az		0x10
++#   define CLASS_AZ		0x08
++#   define CLASS_o7		0x04
++#   define CLASS_o9		0x02
++#   define CLASS_underscore	0x01
++
++    int		newl = FALSE;
++    char_u	*p;
++    int		config = 0;
++
++    if (extra_newl == TRUE)
++	newl = TRUE;
++
++    if (*end != ']')
++	return FAIL;
++    p = start;
++    if (*p == '^')
++    {
++	config |= CLASS_not;
++	p++;
++    }
++
++    while (p < end)
++    {
++	if (p + 2 < end && *(p + 1) == '-')
++	{
++	    switch (*p)
++	    {
++		case '0':
++		    if (*(p + 2) == '9')
++		    {
++			config |= CLASS_o9;
++			break;
++		    }
++		    else
++		    if (*(p + 2) == '7')
++		    {
++			config |= CLASS_o7;
++			break;
++		    }
++		case 'a':
++		    if (*(p + 2) == 'z')
++		    {
++			config |= CLASS_az;
++			break;
++		    }
++		    else
++		    if (*(p + 2) == 'f')
++		    {
++			config |= CLASS_af;
++			break;
++		    }
++		case 'A':
++		    if (*(p + 2) == 'Z')
++		    {
++			config |= CLASS_AZ;
++			break;
++		    }
++		    else
++		    if (*(p + 2) == 'F')
++		    {
++			config |= CLASS_AF;
++			break;
++		    }
++		/* FALLTHROUGH */
++		default:
++		    return FAIL;
++	    }
++	    p += 3;
++	}
++	else if (p + 1 < end && *p == '\\' && *(p + 1) == 'n')
++	{
++	    newl = TRUE;
++	    p += 2;
++	}
++	else if (*p == '_')
++	{
++	    config |= CLASS_underscore;
++	    p ++;
++	}
++	else if (*p == '\n')
++	{
++	    newl = TRUE;
++	    p ++;
++	}
++	else
++	    return FAIL;
++    } /* while (p < end) */
++
++    if (p != end)
++	return FAIL;
++
++    if (newl == TRUE)
++	extra_newl = ADD_NL;
++
++    switch (config)
++    {
++	case CLASS_o9:
++	    return extra_newl + NFA_DIGIT;
++	case CLASS_not |  CLASS_o9:
++	    return extra_newl + NFA_NDIGIT;
++	case CLASS_af | CLASS_AF | CLASS_o9:
++	    return extra_newl + NFA_HEX;
++	case CLASS_not | CLASS_af | CLASS_AF | CLASS_o9:
++	    return extra_newl + NFA_NHEX;
++	case CLASS_o7:
++	    return extra_newl + NFA_OCTAL;
++	case CLASS_not | CLASS_o7:
++	    return extra_newl + NFA_NOCTAL;
++	case CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
++	    return extra_newl + NFA_WORD;
++	case CLASS_not | CLASS_az | CLASS_AZ | CLASS_o9 | CLASS_underscore:
++	    return extra_newl + NFA_NWORD;
++	case CLASS_az | CLASS_AZ | CLASS_underscore:
++	    return extra_newl + NFA_HEAD;
++	case CLASS_not | CLASS_az | CLASS_AZ | CLASS_underscore:
++	    return extra_newl + NFA_NHEAD;
++	case CLASS_az | CLASS_AZ:
++	    return extra_newl + NFA_ALPHA;
++	case CLASS_not | CLASS_az | CLASS_AZ:
++	    return extra_newl + NFA_NALPHA;
++	case CLASS_az:
++	   return extra_newl + NFA_LOWER;
++	case CLASS_not | CLASS_az:
++	    return extra_newl + NFA_NLOWER;
++	case CLASS_AZ:
++	    return extra_newl + NFA_UPPER;
++	case CLASS_not | CLASS_AZ:
++	    return extra_newl + NFA_NUPPER;
++    }
++    return FAIL;
++}
++
++/*
++ * Produce the bytes for equivalence class "c".
++ * Currently only handles latin1, latin9 and utf-8.
++ * Emits bytes in postfix notation: 'a,b,NFA_OR,c,NFA_OR' is
++ * equivalent to 'a OR b OR c'
++ *
++ * NOTE! When changing this function, also update reg_equi_class()
++ */
++    static int
++nfa_emit_equi_class(c)
++    int	    c;
++{
++#define EMIT2(c)   EMIT(c); EMIT(NFA_CONCAT);
++
++#ifdef FEAT_MBYTE
++    if (enc_utf8 || STRCMP(p_enc, "latin1") == 0
++					 || STRCMP(p_enc, "iso-8859-15") == 0)
++#endif
++    {
++	switch (c)
++	{
++	    case 'A': case 0300: case 0301: case 0302:
++	    case 0303: case 0304: case 0305:
++		    EMIT2('A');	    EMIT2(0300);  EMIT2(0301);
++		    EMIT2(0302);  EMIT2(0303);  EMIT2(0304);
++		    EMIT2(0305);
++		    return OK;
++
++	    case 'C': case 0307:
++		    EMIT2('C');	    EMIT2(0307);
++		    return OK;
++
++	    case 'E': case 0310: case 0311: case 0312: case 0313:
++		    EMIT2('E');	    EMIT2(0310);  EMIT2(0311);
++		    EMIT2(0312);  EMIT2(0313);
++		    return OK;
++
++	    case 'I': case 0314: case 0315: case 0316: case 0317:
++		    EMIT2('I');	    EMIT2(0314);  EMIT2(0315);
++		    EMIT2(0316);  EMIT2(0317);
++		    return OK;
++
++	    case 'N': case 0321:
++		    EMIT2('N');	    EMIT2(0321);
++		    return OK;
++
++	    case 'O': case 0322: case 0323: case 0324: case 0325:
++	    case 0326:
++		    EMIT2('O');	    EMIT2(0322);  EMIT2(0323);
++		    EMIT2(0324);  EMIT2(0325);  EMIT2(0326);
++		    return OK;
++
++	    case 'U': case 0331: case 0332: case 0333: case 0334:
++		    EMIT2('U');	    EMIT2(0331);  EMIT2(0332);
++		    EMIT2(0333);  EMIT2(0334);
++		    return OK;
++
++	    case 'Y': case 0335:
++		    EMIT2('Y');	    EMIT2(0335);
++		    return OK;
++
++	    case 'a': case 0340: case 0341: case 0342:
++	    case 0343: case 0344: case 0345:
++		    EMIT2('a');	    EMIT2(0340);  EMIT2(0341);
++		    EMIT2(0342);  EMIT2(0343);  EMIT2(0344);
++		    EMIT2(0345);
++		    return OK;
++
++	    case 'c': case 0347:
++		    EMIT2('c');	    EMIT2(0347);
++		    return OK;
++
++	    case 'e': case 0350: case 0351: case 0352: case 0353:
++		    EMIT2('e');	    EMIT2(0350);  EMIT2(0351);
++		    EMIT2(0352);  EMIT2(0353);
++		    return OK;
++
++	    case 'i': case 0354: case 0355: case 0356: case 0357:
++		    EMIT2('i');	    EMIT2(0354);  EMIT2(0355);
++		    EMIT2(0356);  EMIT2(0357);
++		    return OK;
++
++	    case 'n': case 0361:
++		    EMIT2('n');	    EMIT2(0361);
++		    return OK;
++
++	    case 'o': case 0362: case 0363: case 0364: case 0365:
++	    case 0366:
++		    EMIT2('o');	    EMIT2(0362);  EMIT2(0363);
++		    EMIT2(0364);  EMIT2(0365);  EMIT2(0366);
++		    return OK;
++
++	    case 'u': case 0371: case 0372: case 0373: case 0374:
++		    EMIT2('u');	    EMIT2(0371);  EMIT2(0372);
++		    EMIT2(0373);  EMIT2(0374);
++		    return OK;
++
++	    case 'y': case 0375: case 0377:
++		    EMIT2('y');	    EMIT2(0375);  EMIT2(0377);
++		    return OK;
++
++	    default:
++		    return FAIL;
++	}
++    }
++
++    EMIT(c);
++    return OK;
++#undef EMIT2
++}
++
++/*
++ * Code to parse regular expression.
++ *
++ * We try to reuse parsing functions in regexp.c to
++ * minimize surprise and keep the syntax consistent.
++ */
++
++/*
++ * Parse the lowest level.
++ *
++ * An atom can be one of a long list of items.  Many atoms match one character
++ * in the text.  It is often an ordinary character or a character class.
++ * Braces can be used to make a pattern into an atom.  The "\z(\)" construct
++ * is only for syntax highlighting.
++ *
++ * atom    ::=     ordinary-atom
++ *     or  \( pattern \)
++ *     or  \%( pattern \)
++ *     or  \z( pattern \)
++ */
++    static int
++nfa_regatom()
++{
++    int		c;
++    int		charclass;
++    int		equiclass;
++    int		collclass;
++    int		got_coll_char;
++    char_u	*p;
++    char_u	*endp;
++#ifdef FEAT_MBYTE
++    char_u	*old_regparse = regparse;
++#endif
++    int		extra = 0;
++    int		emit_range;
++    int		negated;
++    int		result;
++    int		startc = -1;
++    int		endc = -1;
++    int		oldstartc = -1;
++
++    c = getchr();
++    switch (c)
++    {
++	case NUL:
++	    EMSG_RET_FAIL(_("E865: (NFA) Regexp end encountered prematurely"));
++
++	case Magic('^'):
++	    EMIT(NFA_BOL);
++	    break;
++
++	case Magic('$'):
++	    EMIT(NFA_EOL);
++#if defined(FEAT_SYN_HL) || defined(PROTO)
++	    had_eol = TRUE;
++#endif
++	    break;
++
++	case Magic('<'):
++	    EMIT(NFA_BOW);
++	    break;
++
++	case Magic('>'):
++	    EMIT(NFA_EOW);
++	    break;
++
++	case Magic('_'):
++	    c = no_Magic(getchr());
++	    if (c == '^')	/* "\_^" is start-of-line */
++	    {
++		EMIT(NFA_BOL);
++		break;
++	    }
++	    if (c == '$')	/* "\_$" is end-of-line */
++	    {
++		EMIT(NFA_EOL);
++#if defined(FEAT_SYN_HL) || defined(PROTO)
++		had_eol = TRUE;
++#endif
++		break;
++	    }
++
++	    extra = ADD_NL;
++
++	    /* "\_[" is collection plus newline */
++	    if (c == '[')
++		goto collection;
++
++	/* "\_x" is character class plus newline */
++	/*FALLTHROUGH*/
++
++	/*
++	 * Character classes.
++	 */
++	case Magic('.'):
++	case Magic('i'):
++	case Magic('I'):
++	case Magic('k'):
++	case Magic('K'):
++	case Magic('f'):
++	case Magic('F'):
++	case Magic('p'):
++	case Magic('P'):
++	case Magic('s'):
++	case Magic('S'):
++	case Magic('d'):
++	case Magic('D'):
++	case Magic('x'):
++	case Magic('X'):
++	case Magic('o'):
++	case Magic('O'):
++	case Magic('w'):
++	case Magic('W'):
++	case Magic('h'):
++	case Magic('H'):
++	case Magic('a'):
++	case Magic('A'):
++	case Magic('l'):
++	case Magic('L'):
++	case Magic('u'):
++	case Magic('U'):
++	    p = vim_strchr(classchars, no_Magic(c));
++	    if (p == NULL)
++	    {
++		EMSGN("INTERNAL: Unknown character class char: %ld", c);
++		return FAIL;
++	    }
++#ifdef FEAT_MBYTE
++	    /* When '.' is followed by a composing char ignore the dot, so that
++	     * the composing char is matched here. */
++	    if (enc_utf8 && c == Magic('.') && utf_iscomposing(peekchr()))
++	    {
++		old_regparse = regparse;
++		c = getchr();
++		goto nfa_do_multibyte;
++	    }
++#endif
++	    EMIT(nfa_classcodes[p - classchars]);
++	    if (extra == ADD_NL)
++	    {
++		EMIT(NFA_NEWL);
++		EMIT(NFA_OR);
++		regflags |= RF_HASNL;
++	    }
++	    break;
++
++	case Magic('n'):
++	    if (reg_string)
++		/* In a string "\n" matches a newline character. */
++		EMIT(NL);
++	    else
++	    {
++		/* In buffer text "\n" matches the end of a line. */
++		EMIT(NFA_NEWL);
++		regflags |= RF_HASNL;
++	    }
++	    break;
++
++	case Magic('('):
++	    if (nfa_reg(REG_PAREN) == FAIL)
++		return FAIL;	    /* cascaded error */
++	    break;
++
++	case Magic('|'):
++	case Magic('&'):
++	case Magic(')'):
++	    EMSGN(_(e_misplaced), no_Magic(c));
++	    return FAIL;
++
++	case Magic('='):
++	case Magic('?'):
++	case Magic('+'):
++	case Magic('@'):
++	case Magic('*'):
++	case Magic('{'):
++	    /* these should follow an atom, not form an atom */
++	    EMSGN(_(e_misplaced), no_Magic(c));
++	    return FAIL;
++
++	case Magic('~'):
++	    {
++		char_u	    *lp;
++
++		/* Previous substitute pattern.
++		 * Generated as "\%(pattern\)". */
++		if (reg_prev_sub == NULL)
++		{
++		    EMSG(_(e_nopresub));
++		    return FAIL;
++		}
++		for (lp = reg_prev_sub; *lp != NUL; mb_cptr_adv(lp))
++		{
++		    EMIT(PTR2CHAR(lp));
++		    if (lp != reg_prev_sub)
++			EMIT(NFA_CONCAT);
++		}
++		EMIT(NFA_NOPEN);
++		break;
++	    }
++
++	case Magic('1'):
++	case Magic('2'):
++	case Magic('3'):
++	case Magic('4'):
++	case Magic('5'):
++	case Magic('6'):
++	case Magic('7'):
++	case Magic('8'):
++	case Magic('9'):
++	    EMIT(NFA_BACKREF1 + (no_Magic(c) - '1'));
++	    nfa_has_backref = TRUE;
++	    break;
++
++	case Magic('z'):
++	    c = no_Magic(getchr());
++	    switch (c)
++	    {
++		case 's':
++		    EMIT(NFA_ZSTART);
++		    break;
++		case 'e':
++		    EMIT(NFA_ZEND);
++		    nfa_has_zend = TRUE;
++		    break;
++#ifdef FEAT_SYN_HL
++		case '1':
++		case '2':
++		case '3':
++		case '4':
++		case '5':
++		case '6':
++		case '7':
++		case '8':
++		case '9':
++		    /* \z1...\z9 */
++		    if (reg_do_extmatch != REX_USE)
++			EMSG_RET_FAIL(_(e_z1_not_allowed));
++		    EMIT(NFA_ZREF1 + (no_Magic(c) - '1'));
++		    /* No need to set nfa_has_backref, the sub-matches don't
++		     * change when \z1 .. \z9 matches or not. */
++		    re_has_z = REX_USE;
++		    break;
++		case '(':
++		    /* \z(  */
++		    if (reg_do_extmatch != REX_SET)
++			EMSG_RET_FAIL(_(e_z_not_allowed));
++		    if (nfa_reg(REG_ZPAREN) == FAIL)
++			return FAIL;	    /* cascaded error */
++		    re_has_z = REX_SET;
++		    break;
++#endif
++		default:
++		    EMSGN(_("E867: (NFA) Unknown operator '\\z%c'"),
++								 no_Magic(c));
++		    return FAIL;
++	    }
++	    break;
++
++	case Magic('%'):
++	    c = no_Magic(getchr());
++	    switch (c)
++	    {
++		/* () without a back reference */
++		case '(':
++		    if (nfa_reg(REG_NPAREN) == FAIL)
++			return FAIL;
++		    EMIT(NFA_NOPEN);
++		    break;
++
++		case 'd':   /* %d123 decimal */
++		case 'o':   /* %o123 octal */
++		case 'x':   /* %xab hex 2 */
++		case 'u':   /* %uabcd hex 4 */
++		case 'U':   /* %U1234abcd hex 8 */
++		    {
++			int nr;
++
++			switch (c)
++			{
++			    case 'd': nr = getdecchrs(); break;
++			    case 'o': nr = getoctchrs(); break;
++			    case 'x': nr = gethexchrs(2); break;
++			    case 'u': nr = gethexchrs(4); break;
++			    case 'U': nr = gethexchrs(8); break;
++			    default:  nr = -1; break;
++			}
++
++			if (nr < 0)
++			    EMSG2_RET_FAIL(
++			       _("E678: Invalid character after %s%%[dxouU]"),
++				    reg_magic == MAGIC_ALL);
++			/* TODO: what if a composing character follows? */
++			EMIT(nr);
++		    }
++		    break;
++
++		/* Catch \%^ and \%$ regardless of where they appear in the
++		 * pattern -- regardless of whether or not it makes sense. */
++		case '^':
++		    EMIT(NFA_BOF);
++		    break;
++
++		case '$':
++		    EMIT(NFA_EOF);
++		    break;
++
++		case '#':
++		    EMIT(NFA_CURSOR);
++		    break;
++
++		case 'V':
++		    EMIT(NFA_VISUAL);
++		    break;
++
++		case '[':
++		    {
++			int	    n;
++
++			/* \%[abc] */
++			for (n = 0; (c = getchr()) != ']'; ++n)
++			{
++			    if (c == NUL)
++				EMSG2_RET_FAIL(_(e_missing_sb),
++						      reg_magic == MAGIC_ALL);
++			    EMIT(c);
++			}
++			if (n == 0)
++			    EMSG2_RET_FAIL(_(e_empty_sb),
++						      reg_magic == MAGIC_ALL);
++			EMIT(NFA_OPT_CHARS);
++			EMIT(n);
++			break;
++		    }
++
++		default:
++		    {
++			int	n = 0;
++			int	cmp = c;
++
++			if (c == '<' || c == '>')
++			    c = getchr();
++			while (VIM_ISDIGIT(c))
++			{
++			    n = n * 10 + (c - '0');
++			    c = getchr();
++			}
++			if (c == 'l' || c == 'c' || c == 'v')
++			{
++			    if (c == 'l')
++				/* \%{n}l  \%{n}<l  \%{n}>l  */
++				EMIT(cmp == '<' ? NFA_LNUM_LT :
++				     cmp == '>' ? NFA_LNUM_GT : NFA_LNUM);
++			    else if (c == 'c')
++				/* \%{n}c  \%{n}<c  \%{n}>c  */
++				EMIT(cmp == '<' ? NFA_COL_LT :
++				     cmp == '>' ? NFA_COL_GT : NFA_COL);
++			    else
++				/* \%{n}v  \%{n}<v  \%{n}>v  */
++				EMIT(cmp == '<' ? NFA_VCOL_LT :
++				     cmp == '>' ? NFA_VCOL_GT : NFA_VCOL);
++			    EMIT(n);
++			    break;
++			}
++			else if (c == '\'' && n == 0)
++			{
++			    /* \%'m  \%<'m  \%>'m  */
++			    EMIT(cmp == '<' ? NFA_MARK_LT :
++				 cmp == '>' ? NFA_MARK_GT : NFA_MARK);
++			    EMIT(getchr());
++			    break;
++			}
++		    }
++		    EMSGN(_("E867: (NFA) Unknown operator '\\%%%c'"),
++								 no_Magic(c));
++		    return FAIL;
++	    }
++	    break;
++
++	case Magic('['):
++collection:
++	    /*
++	     * [abc]  uses NFA_START_COLL - NFA_END_COLL
++	     * [^abc] uses NFA_START_NEG_COLL - NFA_END_NEG_COLL
++	     * Each character is produced as a regular state, using
++	     * NFA_CONCAT to bind them together.
++	     * Besides normal characters there can be:
++	     * - character classes  NFA_CLASS_*
++	     * - ranges, two characters followed by NFA_RANGE.
++	     */
++
++	    p = regparse;
++	    endp = skip_anyof(p);
++	    if (*endp == ']')
++	    {
++		/*
++		 * Try to reverse engineer character classes. For example,
++		 * recognize that [0-9] stands for  \d and [A-Za-z_] with \h,
++		 * and perform the necessary substitutions in the NFA.
++		 */
++		result = nfa_recognize_char_class(regparse, endp,
++							    extra == ADD_NL);
++		if (result != FAIL)
++		{
++		    if (result >= NFA_DIGIT && result <= NFA_NUPPER)
++			EMIT(result);
++		    else	/* must be char class + newline */
++		    {
++			EMIT(result - ADD_NL);
++			EMIT(NFA_NEWL);
++			EMIT(NFA_OR);
++		    }
++		    regparse = endp;
++		    mb_ptr_adv(regparse);
++		    return OK;
++		}
++		/*
++		 * Failed to recognize a character class. Use the simple
++		 * version that turns [abc] into 'a' OR 'b' OR 'c'
++		 */
++		startc = endc = oldstartc = -1;
++		negated = FALSE;
++		if (*regparse == '^')			/* negated range */
++		{
++		    negated = TRUE;
++		    mb_ptr_adv(regparse);
++		    EMIT(NFA_START_NEG_COLL);
++		}
++		else
++		    EMIT(NFA_START_COLL);
++		if (*regparse == '-')
++		{
++		    startc = '-';
++		    EMIT(startc);
++		    EMIT(NFA_CONCAT);
++		    mb_ptr_adv(regparse);
++		}
++		/* Emit the OR branches for each character in the [] */
++		emit_range = FALSE;
++		while (regparse < endp)
++		{
++		    oldstartc = startc;
++		    startc = -1;
++		    got_coll_char = FALSE;
++		    if (*regparse == '[')
++		    {
++			/* Check for [: :], [= =], [. .] */
++			equiclass = collclass = 0;
++			charclass = get_char_class(&regparse);
++			if (charclass == CLASS_NONE)
++			{
++			    equiclass = get_equi_class(&regparse);
++			    if (equiclass == 0)
++				collclass = get_coll_element(&regparse);
++			}
++
++			/* Character class like [:alpha:]  */
++			if (charclass != CLASS_NONE)
++			{
++			    switch (charclass)
++			    {
++				case CLASS_ALNUM:
++				    EMIT(NFA_CLASS_ALNUM);
++				    break;
++				case CLASS_ALPHA:
++				    EMIT(NFA_CLASS_ALPHA);
++				    break;
++				case CLASS_BLANK:
++				    EMIT(NFA_CLASS_BLANK);
++				    break;
++				case CLASS_CNTRL:
++				    EMIT(NFA_CLASS_CNTRL);
++				    break;
++				case CLASS_DIGIT:
++				    EMIT(NFA_CLASS_DIGIT);
++				    break;
++				case CLASS_GRAPH:
++				    EMIT(NFA_CLASS_GRAPH);
++				    break;
++				case CLASS_LOWER:
++				    EMIT(NFA_CLASS_LOWER);
++				    break;
++				case CLASS_PRINT:
++				    EMIT(NFA_CLASS_PRINT);
++				    break;
++				case CLASS_PUNCT:
++				    EMIT(NFA_CLASS_PUNCT);
++				    break;
++				case CLASS_SPACE:
++				    EMIT(NFA_CLASS_SPACE);
++				    break;
++				case CLASS_UPPER:
++				    EMIT(NFA_CLASS_UPPER);
++				    break;
++				case CLASS_XDIGIT:
++				    EMIT(NFA_CLASS_XDIGIT);
++				    break;
++				case CLASS_TAB:
++				    EMIT(NFA_CLASS_TAB);
++				    break;
++				case CLASS_RETURN:
++				    EMIT(NFA_CLASS_RETURN);
++				    break;
++				case CLASS_BACKSPACE:
++				    EMIT(NFA_CLASS_BACKSPACE);
++				    break;
++				case CLASS_ESCAPE:
++				    EMIT(NFA_CLASS_ESCAPE);
++				    break;
++			    }
++			    EMIT(NFA_CONCAT);
++			    continue;
++			}
++			/* Try equivalence class [=a=] and the like */
++			if (equiclass != 0)
++			{
++			    result = nfa_emit_equi_class(equiclass);
++			    if (result == FAIL)
++			    {
++				/* should never happen */
++				EMSG_RET_FAIL(_("E868: Error building NFA with equivalence class!"));
++			    }
++			    continue;
++			}
++			/* Try collating class like [. .]  */
++			if (collclass != 0)
++			{
++			    startc = collclass;	 /* allow [.a.]-x as a range */
++			    /* Will emit the proper atom at the end of the
++			     * while loop. */
++			}
++		    }
++		    /* Try a range like 'a-x' or '\t-z'. Also allows '-' as a
++		     * start character. */
++		    if (*regparse == '-' && oldstartc != -1)
++		    {
++			emit_range = TRUE;
++			startc = oldstartc;
++			mb_ptr_adv(regparse);
++			continue;	    /* reading the end of the range */
++		    }
++
++		    /* Now handle simple and escaped characters.
++		     * Only "\]", "\^", "\]" and "\\" are special in Vi.  Vim
++		     * accepts "\t", "\e", etc., but only when the 'l' flag in
++		     * 'cpoptions' is not included.
++		     * Posix doesn't recognize backslash at all.
++		     */
++		    if (*regparse == '\\'
++			    && !reg_cpo_bsl
++			    && regparse + 1 <= endp
++			    && (vim_strchr(REGEXP_INRANGE, regparse[1]) != NULL
++				|| (!reg_cpo_lit
++				    && vim_strchr(REGEXP_ABBR, regparse[1])
++								      != NULL)
++			    )
++			)
++		    {
++			mb_ptr_adv(regparse);
++
++			if (*regparse == 'n')
++			    startc = reg_string ? NL : NFA_NEWL;
++			else
++			    if  (*regparse == 'd'
++				    || *regparse == 'o'
++				    || *regparse == 'x'
++				    || *regparse == 'u'
++				    || *regparse == 'U'
++				)
++			    {
++				/* TODO(RE) This needs more testing */
++				startc = coll_get_char();
++				got_coll_char = TRUE;
++				mb_ptr_back(old_regparse, regparse);
++			    }
++			    else
++			    {
++				/* \r,\t,\e,\b */
++				startc = backslash_trans(*regparse);
++			    }
++		    }
++
++		    /* Normal printable char */
++		    if (startc == -1)
++			startc = PTR2CHAR(regparse);
++
++		    /* Previous char was '-', so this char is end of range. */
++		    if (emit_range)
++		    {
++			endc = startc;
++			startc = oldstartc;
++			if (startc > endc)
++			    EMSG_RET_FAIL(_(e_invrange));
++
++			if (endc > startc + 2)
++			{
++			    /* Emit a range instead of the sequence of
++			     * individual characters. */
++			    if (startc == 0)
++				/* \x00 is translated to \x0a, start at \x01. */
++				EMIT(1);
++			    else
++				--post_ptr; /* remove NFA_CONCAT */
++			    EMIT(endc);
++			    EMIT(NFA_RANGE);
++			    EMIT(NFA_CONCAT);
++			}
++			else
++#ifdef FEAT_MBYTE
++			     if (has_mbyte && ((*mb_char2len)(startc) > 1
++				    || (*mb_char2len)(endc) > 1))
++			{
++			    /* Emit the characters in the range.
++			     * "startc" was already emitted, so skip it.
++			     * */
++			    for (c = startc + 1; c <= endc; c++)
++			    {
++				EMIT(c);
++				EMIT(NFA_CONCAT);
++			    }
++			}
++			else
++#endif
++			{
++#ifdef EBCDIC
++			    int alpha_only = FALSE;
++
++			    /* for alphabetical range skip the gaps
++			     * 'i'-'j', 'r'-'s', 'I'-'J' and 'R'-'S'. */
++			    if (isalpha(startc) && isalpha(endc))
++				alpha_only = TRUE;
++#endif
++			    /* Emit the range. "startc" was already emitted, so
++			     * skip it. */
++			    for (c = startc + 1; c <= endc; c++)
++#ifdef EBCDIC
++				if (!alpha_only || isalpha(startc))
++#endif
++				{
++				    EMIT(c);
++				    EMIT(NFA_CONCAT);
++				}
++			}
++			emit_range = FALSE;
++			startc = -1;
++		    }
++		    else
++		    {
++			/* This char (startc) is not part of a range. Just
++			 * emit it.
++			 * Normally, simply emit startc. But if we get char
++			 * code=0 from a collating char, then replace it with
++			 * 0x0a.
++			 * This is needed to completely mimic the behaviour of
++			 * the backtracking engine. */
++			if (startc == NFA_NEWL)
++			{
++			    /* Line break can't be matched as part of the
++			     * collection, add an OR below. But not for negated
++			     * range. */
++			    if (!negated)
++				extra = ADD_NL;
++			}
++			else
++			{
++			    if (got_coll_char == TRUE && startc == 0)
++				EMIT(0x0a);
++			    else
++				EMIT(startc);
++			    EMIT(NFA_CONCAT);
++			}
++		    }
++
++		    mb_ptr_adv(regparse);
++		} /* while (p < endp) */
++
++		mb_ptr_back(old_regparse, regparse);
++		if (*regparse == '-')	    /* if last, '-' is just a char */
++		{
++		    EMIT('-');
++		    EMIT(NFA_CONCAT);
++		}
++		mb_ptr_adv(regparse);
++
++		/* skip the trailing ] */
++		regparse = endp;
++		mb_ptr_adv(regparse);
++
++		/* Mark end of the collection. */
++		if (negated == TRUE)
++		    EMIT(NFA_END_NEG_COLL);
++		else
++		    EMIT(NFA_END_COLL);
++
++		/* \_[] also matches \n but it's not negated */
++		if (extra == ADD_NL)
++		{
++		    EMIT(reg_string ? NL : NFA_NEWL);
++		    EMIT(NFA_OR);
++		}
++
++		return OK;
++	    } /* if exists closing ] */
++
++	    if (reg_strict)
++		EMSG_RET_FAIL(_(e_missingbracket));
++	    /* FALLTHROUGH */
++
++	default:
++	    {
++#ifdef FEAT_MBYTE
++		int	plen;
++
++nfa_do_multibyte:
++		/* plen is length of current char with composing chars */
++		if (enc_utf8 && ((*mb_char2len)(c)
++			    != (plen = (*mb_ptr2len)(old_regparse))
++						       || utf_iscomposing(c)))
++		{
++		    int i = 0;
++
++		    /* A base character plus composing characters, or just one
++		     * or more composing characters.
++		     * This requires creating a separate atom as if enclosing
++		     * the characters in (), where NFA_COMPOSING is the ( and
++		     * NFA_END_COMPOSING is the ). Note that right now we are
++		     * building the postfix form, not the NFA itself;
++		     * a composing char could be: a, b, c, NFA_COMPOSING
++		     * where 'b' and 'c' are chars with codes > 256. */
++		    for (;;)
++		    {
++			EMIT(c);
++			if (i > 0)
++			    EMIT(NFA_CONCAT);
++			if ((i += utf_char2len(c)) >= plen)
++			    break;
++			c = utf_ptr2char(old_regparse + i);
++		    }
++		    EMIT(NFA_COMPOSING);
++		    regparse = old_regparse + plen;
++		}
++		else
++#endif
++		{
++		    c = no_Magic(c);
++		    EMIT(c);
++		}
++		return OK;
++	    }
++    }
++
++    return OK;
++}
++
++/*
++ * Parse something followed by possible [*+=].
++ *
++ * A piece is an atom, possibly followed by a multi, an indication of how many
++ * times the atom can be matched.  Example: "a*" matches any sequence of "a"
++ * characters: "", "a", "aa", etc.
++ *
++ * piece   ::=	    atom
++ *	or  atom  multi
++ */
++    static int
++nfa_regpiece()
++{
++    int		i;
++    int		op;
++    int		ret;
++    long	minval, maxval;
++    int		greedy = TRUE;      /* Braces are prefixed with '-' ? */
++    parse_state_T old_state;
++    parse_state_T new_state;
++    int		c2;
++    int		old_post_pos;
++    int		my_post_start;
++    int		quest;
++
++    /* Save the current parse state, so that we can use it if <atom>{m,n} is
++     * next. */
++    save_parse_state(&old_state);
++
++    /* store current pos in the postfix form, for \{m,n} involving 0s */
++    my_post_start = (int)(post_ptr - post_start);
++
++    ret = nfa_regatom();
++    if (ret == FAIL)
++	return FAIL;	    /* cascaded error */
++
++    op = peekchr();
++    if (re_multi_type(op) == NOT_MULTI)
++	return OK;
++
++    skipchr();
++    switch (op)
++    {
++	case Magic('*'):
++	    EMIT(NFA_STAR);
++	    break;
++
++	case Magic('+'):
++	    /*
++	     * Trick: Normally, (a*)\+ would match the whole input "aaa".  The
++	     * first and only submatch would be "aaa". But the backtracking
++	     * engine interprets the plus as "try matching one more time", and
++	     * a* matches a second time at the end of the input, the empty
++	     * string.
++	     * The submatch will the empty string.
++	     *
++	     * In order to be consistent with the old engine, we replace
++	     * <atom>+ with <atom><atom>*
++	     */
++	    restore_parse_state(&old_state);
++	    curchr = -1;
++	    if (nfa_regatom() == FAIL)
++		return FAIL;
++	    EMIT(NFA_STAR);
++	    EMIT(NFA_CONCAT);
++	    skipchr();		/* skip the \+	*/
++	    break;
++
++	case Magic('@'):
++	    c2 = getdecchrs();
++	    op = no_Magic(getchr());
++	    i = 0;
++	    switch(op)
++	    {
++		case '=':
++		    /* \@= */
++		    i = NFA_PREV_ATOM_NO_WIDTH;
++		    break;
++		case '!':
++		    /* \@! */
++		    i = NFA_PREV_ATOM_NO_WIDTH_NEG;
++		    break;
++		case '<':
++		    op = no_Magic(getchr());
++		    if (op == '=')
++			/* \@<= */
++			i = NFA_PREV_ATOM_JUST_BEFORE;
++		    else if (op == '!')
++			/* \@<! */
++			i = NFA_PREV_ATOM_JUST_BEFORE_NEG;
++		    break;
++		case '>':
++		    /* \@>  */
++		    i = NFA_PREV_ATOM_LIKE_PATTERN;
++		    break;
++	    }
++	    if (i == 0)
++	    {
++		EMSGN(_("E869: (NFA) Unknown operator '\\@%c'"), op);
++		return FAIL;
++	    }
++	    EMIT(i);
++	    if (i == NFA_PREV_ATOM_JUST_BEFORE
++					|| i == NFA_PREV_ATOM_JUST_BEFORE_NEG)
++		EMIT(c2);
++	    break;
++
++	case Magic('?'):
++	case Magic('='):
++	    EMIT(NFA_QUEST);
++	    break;
++
++	case Magic('{'):
++	    /* a{2,5} will expand to 'aaa?a?a?'
++	     * a{-1,3} will expand to 'aa??a??', where ?? is the nongreedy
++	     * version of '?'
++	     * \v(ab){2,3} will expand to '(ab)(ab)(ab)?', where all the
++	     * parenthesis have the same id
++	     */
++
++	    greedy = TRUE;
++	    c2 = peekchr();
++	    if (c2 == '-' || c2 == Magic('-'))
++	    {
++		skipchr();
++		greedy = FALSE;
++	    }
++	    if (!read_limits(&minval, &maxval))
++		EMSG_RET_FAIL(_("E870: (NFA regexp) Error reading repetition limits"));
++
++	    /*  <atom>{0,inf}, <atom>{0,} and <atom>{}  are equivalent to
++	     *  <atom>*  */
++	    if (minval == 0 && maxval == MAX_LIMIT)
++	    {
++		if (greedy)
++		    /* \{}, \{0,} */
++		    EMIT(NFA_STAR);
++		else
++		    /* \{-}, \{-0,} */
++		    EMIT(NFA_STAR_NONGREEDY);
++		break;
++	    }
++
++	    /* Special case: x{0} or x{-0} */
++	    if (maxval == 0)
++	    {
++		/* Ignore result of previous call to nfa_regatom() */
++		post_ptr = post_start + my_post_start;
++		/* NFA_SKIP_CHAR has 0-length and works everywhere */
++		EMIT(NFA_SKIP_CHAR);
++		return OK;
++	    }
++
++	    /* Ignore previous call to nfa_regatom() */
++	    post_ptr = post_start + my_post_start;
++	    /* Save parse state after the repeated atom and the \{} */
++	    save_parse_state(&new_state);
++
++	    quest = (greedy == TRUE? NFA_QUEST : NFA_QUEST_NONGREEDY);
++	    for (i = 0; i < maxval; i++)
++	    {
++		/* Goto beginning of the repeated atom */
++		restore_parse_state(&old_state);
++		old_post_pos = (int)(post_ptr - post_start);
++		if (nfa_regatom() == FAIL)
++		    return FAIL;
++		/* after "minval" times, atoms are optional */
++		if (i + 1 > minval)
++		{
++		    if (maxval == MAX_LIMIT)
++		    {
++			if (greedy)
++			    EMIT(NFA_STAR);
++			else
++			    EMIT(NFA_STAR_NONGREEDY);
++		    }
++		    else
++			EMIT(quest);
++		}
++		if (old_post_pos != my_post_start)
++		    EMIT(NFA_CONCAT);
++		if (i + 1 > minval && maxval == MAX_LIMIT)
++		    break;
++	    }
++
++	    /* Go to just after the repeated atom and the \{} */
++	    restore_parse_state(&new_state);
++	    curchr = -1;
++
++	    break;
++
++
++	default:
++	    break;
++    }	/* end switch */
++
++    if (re_multi_type(peekchr()) != NOT_MULTI)
++	/* Can't have a multi follow a multi. */
++	EMSG_RET_FAIL(_("E871: (NFA regexp) Can't have a multi follow a multi !"));
++
++    return OK;
++}
++
++/*
++ * Parse one or more pieces, concatenated.  It matches a match for the
++ * first piece, followed by a match for the second piece, etc.  Example:
++ * "f[0-9]b", first matches "f", then a digit and then "b".
++ *
++ * concat  ::=	    piece
++ *	or  piece piece
++ *	or  piece piece piece
++ *	etc.
++ */
++    static int
++nfa_regconcat()
++{
++    int		cont = TRUE;
++    int		first = TRUE;
++
++    while (cont)
++    {
++	switch (peekchr())
++	{
++	    case NUL:
++	    case Magic('|'):
++	    case Magic('&'):
++	    case Magic(')'):
++		cont = FALSE;
++		break;
++
++	    case Magic('Z'):
++#ifdef FEAT_MBYTE
++		regflags |= RF_ICOMBINE;
++#endif
++		skipchr_keepstart();
++		break;
++	    case Magic('c'):
++		regflags |= RF_ICASE;
++		skipchr_keepstart();
++		break;
++	    case Magic('C'):
++		regflags |= RF_NOICASE;
++		skipchr_keepstart();
++		break;
++	    case Magic('v'):
++		reg_magic = MAGIC_ALL;
++		skipchr_keepstart();
++		curchr = -1;
++		break;
++	    case Magic('m'):
++		reg_magic = MAGIC_ON;
++		skipchr_keepstart();
++		curchr = -1;
++		break;
++	    case Magic('M'):
++		reg_magic = MAGIC_OFF;
++		skipchr_keepstart();
++		curchr = -1;
++		break;
++	    case Magic('V'):
++		reg_magic = MAGIC_NONE;
++		skipchr_keepstart();
++		curchr = -1;
++		break;
++
++	    default:
++		if (nfa_regpiece() == FAIL)
++		    return FAIL;
++		if (first == FALSE)
++		    EMIT(NFA_CONCAT);
++		else
++		    first = FALSE;
++		break;
++	}
++    }
++
++    return OK;
++}
++
++/*
++ * Parse a branch, one or more concats, separated by "\&".  It matches the
++ * last concat, but only if all the preceding concats also match at the same
++ * position.  Examples:
++ *      "foobeep\&..." matches "foo" in "foobeep".
++ *      ".*Peter\&.*Bob" matches in a line containing both "Peter" and "Bob"
++ *
++ * branch ::=	    concat
++ *		or  concat \& concat
++ *		or  concat \& concat \& concat
++ *		etc.
++ */
++    static int
++nfa_regbranch()
++{
++    int		ch;
++    int		old_post_pos;
++
++    old_post_pos = (int)(post_ptr - post_start);
++
++    /* First branch, possibly the only one */
++    if (nfa_regconcat() == FAIL)
++	return FAIL;
++
++    ch = peekchr();
++    /* Try next concats */
++    while (ch == Magic('&'))
++    {
++	skipchr();
++	EMIT(NFA_NOPEN);
++	EMIT(NFA_PREV_ATOM_NO_WIDTH);
++	old_post_pos = (int)(post_ptr - post_start);
++	if (nfa_regconcat() == FAIL)
++	    return FAIL;
++	/* if concat is empty, skip a input char. But do emit a node */
++	if (old_post_pos == (int)(post_ptr - post_start))
++	    EMIT(NFA_SKIP_CHAR);
++	EMIT(NFA_CONCAT);
++	ch = peekchr();
++    }
++
++    /* Even if a branch is empty, emit one node for it */
++    if (old_post_pos == (int)(post_ptr - post_start))
++	EMIT(NFA_SKIP_CHAR);
++
++    return OK;
++}
++
++/*
++ *  Parse a pattern, one or more branches, separated by "\|".  It matches
++ *  anything that matches one of the branches.  Example: "foo\|beep" matches
++ *  "foo" and matches "beep".  If more than one branch matches, the first one
++ *  is used.
++ *
++ *  pattern ::=	    branch
++ *	or  branch \| branch
++ *	or  branch \| branch \| branch
++ *	etc.
++ */
++    static int
++nfa_reg(paren)
++    int		paren;	/* REG_NOPAREN, REG_PAREN, REG_NPAREN or REG_ZPAREN */
++{
++    int		parno = 0;
++
++    if (paren == REG_PAREN)
++    {
++	if (regnpar >= NSUBEXP) /* Too many `(' */
++	    EMSG_RET_FAIL(_("E872: (NFA regexp) Too many '('"));
++	parno = regnpar++;
++    }
++#ifdef FEAT_SYN_HL
++    else if (paren == REG_ZPAREN)
++    {
++	/* Make a ZOPEN node. */
++	if (regnzpar >= NSUBEXP)
++	    EMSG_RET_FAIL(_("E879: (NFA regexp) Too many \\z("));
++	parno = regnzpar++;
++    }
++#endif
++
++    if (nfa_regbranch() == FAIL)
++	return FAIL;	    /* cascaded error */
++
++    while (peekchr() == Magic('|'))
++    {
++	skipchr();
++	if (nfa_regbranch() == FAIL)
++	    return FAIL;    /* cascaded error */
++	EMIT(NFA_OR);
++    }
++
++    /* Check for proper termination. */
++    if (paren != REG_NOPAREN && getchr() != Magic(')'))
++    {
++	if (paren == REG_NPAREN)
++	    EMSG2_RET_FAIL(_(e_unmatchedpp), reg_magic == MAGIC_ALL);
++	else
++	    EMSG2_RET_FAIL(_(e_unmatchedp), reg_magic == MAGIC_ALL);
++    }
++    else if (paren == REG_NOPAREN && peekchr() != NUL)
++    {
++	if (peekchr() == Magic(')'))
++	    EMSG2_RET_FAIL(_(e_unmatchedpar), reg_magic == MAGIC_ALL);
++	else
++	    EMSG_RET_FAIL(_("E873: (NFA regexp) proper termination error"));
++    }
++    /*
++     * Here we set the flag allowing back references to this set of
++     * parentheses.
++     */
++    if (paren == REG_PAREN)
++    {
++	had_endbrace[parno] = TRUE;     /* have seen the close paren */
++	EMIT(NFA_MOPEN + parno);
++    }
++#ifdef FEAT_SYN_HL
++    else if (paren == REG_ZPAREN)
++	EMIT(NFA_ZOPEN + parno);
++#endif
++
++    return OK;
++}
++
++#ifdef DEBUG
++static char_u code[50];
++
++    static void
++nfa_set_code(c)
++    int	    c;
++{
++    int	    addnl = FALSE;
++
++    if (c >= NFA_FIRST_NL && c <= NFA_LAST_NL)
++    {
++	addnl = TRUE;
++	c -= ADD_NL;
++    }
++
++    STRCPY(code, "");
++    switch (c)
++    {
++	case NFA_MATCH:	    STRCPY(code, "NFA_MATCH "); break;
++	case NFA_SPLIT:	    STRCPY(code, "NFA_SPLIT "); break;
++	case NFA_CONCAT:    STRCPY(code, "NFA_CONCAT "); break;
++	case NFA_NEWL:	    STRCPY(code, "NFA_NEWL "); break;
++	case NFA_ZSTART:    STRCPY(code, "NFA_ZSTART"); break;
++	case NFA_ZEND:	    STRCPY(code, "NFA_ZEND"); break;
++
++	case NFA_BACKREF1:  STRCPY(code, "NFA_BACKREF1"); break;
++	case NFA_BACKREF2:  STRCPY(code, "NFA_BACKREF2"); break;
++	case NFA_BACKREF3:  STRCPY(code, "NFA_BACKREF3"); break;
++	case NFA_BACKREF4:  STRCPY(code, "NFA_BACKREF4"); break;
++	case NFA_BACKREF5:  STRCPY(code, "NFA_BACKREF5"); break;
++	case NFA_BACKREF6:  STRCPY(code, "NFA_BACKREF6"); break;
++	case NFA_BACKREF7:  STRCPY(code, "NFA_BACKREF7"); break;
++	case NFA_BACKREF8:  STRCPY(code, "NFA_BACKREF8"); break;
++	case NFA_BACKREF9:  STRCPY(code, "NFA_BACKREF9"); break;
++#ifdef FEAT_SYN_HL
++	case NFA_ZREF1:	    STRCPY(code, "NFA_ZREF1"); break;
++	case NFA_ZREF2:	    STRCPY(code, "NFA_ZREF2"); break;
++	case NFA_ZREF3:	    STRCPY(code, "NFA_ZREF3"); break;
++	case NFA_ZREF4:	    STRCPY(code, "NFA_ZREF4"); break;
++	case NFA_ZREF5:	    STRCPY(code, "NFA_ZREF5"); break;
++	case NFA_ZREF6:	    STRCPY(code, "NFA_ZREF6"); break;
++	case NFA_ZREF7:	    STRCPY(code, "NFA_ZREF7"); break;
++	case NFA_ZREF8:	    STRCPY(code, "NFA_ZREF8"); break;
++	case NFA_ZREF9:	    STRCPY(code, "NFA_ZREF9"); break;
++#endif
++	case NFA_SKIP:	    STRCPY(code, "NFA_SKIP"); break;
++
++	case NFA_PREV_ATOM_NO_WIDTH:
++			    STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH"); break;
++	case NFA_PREV_ATOM_NO_WIDTH_NEG:
++			    STRCPY(code, "NFA_PREV_ATOM_NO_WIDTH_NEG"); break;
++	case NFA_PREV_ATOM_JUST_BEFORE:
++			    STRCPY(code, "NFA_PREV_ATOM_JUST_BEFORE"); break;
++	case NFA_PREV_ATOM_JUST_BEFORE_NEG:
++			 STRCPY(code, "NFA_PREV_ATOM_JUST_BEFORE_NEG"); break;
++	case NFA_PREV_ATOM_LIKE_PATTERN:
++			    STRCPY(code, "NFA_PREV_ATOM_LIKE_PATTERN"); break;
++
++	case NFA_NOPEN:		    STRCPY(code, "NFA_NOPEN"); break;
++	case NFA_NCLOSE:	    STRCPY(code, "NFA_NCLOSE"); break;
++	case NFA_START_INVISIBLE:   STRCPY(code, "NFA_START_INVISIBLE"); break;
++	case NFA_START_INVISIBLE_NEG:
++			       STRCPY(code, "NFA_START_INVISIBLE_NEG"); break;
++	case NFA_START_INVISIBLE_BEFORE:
++			    STRCPY(code, "NFA_START_INVISIBLE_BEFORE"); break;
++	case NFA_START_INVISIBLE_BEFORE_NEG:
++			STRCPY(code, "NFA_START_INVISIBLE_BEFORE_NEG"); break;
++	case NFA_START_PATTERN:   STRCPY(code, "NFA_START_PATTERN"); break;
++	case NFA_END_INVISIBLE:	    STRCPY(code, "NFA_END_INVISIBLE"); break;
++	case NFA_END_INVISIBLE_NEG: STRCPY(code, "NFA_END_INVISIBLE_NEG"); break;
++	case NFA_END_PATTERN:	    STRCPY(code, "NFA_END_PATTERN"); break;
++
++	case NFA_COMPOSING:	    STRCPY(code, "NFA_COMPOSING"); break;
++	case NFA_END_COMPOSING:	    STRCPY(code, "NFA_END_COMPOSING"); break;
++	case NFA_OPT_CHARS:	    STRCPY(code, "NFA_OPT_CHARS"); break;
++
++	case NFA_MOPEN:
++	case NFA_MOPEN1:
++	case NFA_MOPEN2:
++	case NFA_MOPEN3:
++	case NFA_MOPEN4:
++	case NFA_MOPEN5:
++	case NFA_MOPEN6:
++	case NFA_MOPEN7:
++	case NFA_MOPEN8:
++	case NFA_MOPEN9:
++	    STRCPY(code, "NFA_MOPEN(x)");
++	    code[10] = c - NFA_MOPEN + '0';
++	    break;
++	case NFA_MCLOSE:
++	case NFA_MCLOSE1:
++	case NFA_MCLOSE2:
++	case NFA_MCLOSE3:
++	case NFA_MCLOSE4:
++	case NFA_MCLOSE5:
++	case NFA_MCLOSE6:
++	case NFA_MCLOSE7:
++	case NFA_MCLOSE8:
++	case NFA_MCLOSE9:
++	    STRCPY(code, "NFA_MCLOSE(x)");
++	    code[11] = c - NFA_MCLOSE + '0';
++	    break;
++#ifdef FEAT_SYN_HL
++	case NFA_ZOPEN:
++	case NFA_ZOPEN1:
++	case NFA_ZOPEN2:
++	case NFA_ZOPEN3:
++	case NFA_ZOPEN4:
++	case NFA_ZOPEN5:
++	case NFA_ZOPEN6:
++	case NFA_ZOPEN7:
++	case NFA_ZOPEN8:
++	case NFA_ZOPEN9:
++	    STRCPY(code, "NFA_ZOPEN(x)");
++	    code[10] = c - NFA_ZOPEN + '0';
++	    break;
++	case NFA_ZCLOSE:
++	case NFA_ZCLOSE1:
++	case NFA_ZCLOSE2:
++	case NFA_ZCLOSE3:
++	case NFA_ZCLOSE4:
++	case NFA_ZCLOSE5:
++	case NFA_ZCLOSE6:
++	case NFA_ZCLOSE7:
++	case NFA_ZCLOSE8:
++	case NFA_ZCLOSE9:
++	    STRCPY(code, "NFA_ZCLOSE(x)");
++	    code[11] = c - NFA_ZCLOSE + '0';
++	    break;
++#endif
++	case NFA_EOL:		STRCPY(code, "NFA_EOL "); break;
++	case NFA_BOL:		STRCPY(code, "NFA_BOL "); break;
++	case NFA_EOW:		STRCPY(code, "NFA_EOW "); break;
++	case NFA_BOW:		STRCPY(code, "NFA_BOW "); break;
++	case NFA_EOF:		STRCPY(code, "NFA_EOF "); break;
++	case NFA_BOF:		STRCPY(code, "NFA_BOF "); break;
++	case NFA_LNUM:		STRCPY(code, "NFA_LNUM "); break;
++	case NFA_LNUM_GT:	STRCPY(code, "NFA_LNUM_GT "); break;
++	case NFA_LNUM_LT:	STRCPY(code, "NFA_LNUM_LT "); break;
++	case NFA_COL:		STRCPY(code, "NFA_COL "); break;
++	case NFA_COL_GT:	STRCPY(code, "NFA_COL_GT "); break;
++	case NFA_COL_LT:	STRCPY(code, "NFA_COL_LT "); break;
++	case NFA_VCOL:		STRCPY(code, "NFA_VCOL "); break;
++	case NFA_VCOL_GT:	STRCPY(code, "NFA_VCOL_GT "); break;
++	case NFA_VCOL_LT:	STRCPY(code, "NFA_VCOL_LT "); break;
++	case NFA_MARK:		STRCPY(code, "NFA_MARK "); break;
++	case NFA_MARK_GT:	STRCPY(code, "NFA_MARK_GT "); break;
++	case NFA_MARK_LT:	STRCPY(code, "NFA_MARK_LT "); break;
++	case NFA_CURSOR:	STRCPY(code, "NFA_CURSOR "); break;
++	case NFA_VISUAL:	STRCPY(code, "NFA_VISUAL "); break;
++
++	case NFA_STAR:		STRCPY(code, "NFA_STAR "); break;
++	case NFA_STAR_NONGREEDY: STRCPY(code, "NFA_STAR_NONGREEDY "); break;
++	case NFA_QUEST:		STRCPY(code, "NFA_QUEST"); break;
++	case NFA_QUEST_NONGREEDY: STRCPY(code, "NFA_QUEST_NON_GREEDY"); break;
++	case NFA_SKIP_CHAR:	STRCPY(code, "NFA_SKIP_CHAR"); break;
++	case NFA_OR:		STRCPY(code, "NFA_OR"); break;
++
++	case NFA_START_COLL:	STRCPY(code, "NFA_START_COLL"); break;
++	case NFA_END_COLL:	STRCPY(code, "NFA_END_COLL"); break;
++	case NFA_START_NEG_COLL: STRCPY(code, "NFA_START_NEG_COLL"); break;
++	case NFA_END_NEG_COLL:	STRCPY(code, "NFA_END_NEG_COLL"); break;
++	case NFA_RANGE:		STRCPY(code, "NFA_RANGE"); break;
++	case NFA_RANGE_MIN:	STRCPY(code, "NFA_RANGE_MIN"); break;
++	case NFA_RANGE_MAX:	STRCPY(code, "NFA_RANGE_MAX"); break;
++
++	case NFA_CLASS_ALNUM:	STRCPY(code, "NFA_CLASS_ALNUM"); break;
++	case NFA_CLASS_ALPHA:	STRCPY(code, "NFA_CLASS_ALPHA"); break;
++	case NFA_CLASS_BLANK:	STRCPY(code, "NFA_CLASS_BLANK"); break;
++	case NFA_CLASS_CNTRL:	STRCPY(code, "NFA_CLASS_CNTRL"); break;
++	case NFA_CLASS_DIGIT:	STRCPY(code, "NFA_CLASS_DIGIT"); break;
++	case NFA_CLASS_GRAPH:	STRCPY(code, "NFA_CLASS_GRAPH"); break;
++	case NFA_CLASS_LOWER:	STRCPY(code, "NFA_CLASS_LOWER"); break;
++	case NFA_CLASS_PRINT:	STRCPY(code, "NFA_CLASS_PRINT"); break;
++	case NFA_CLASS_PUNCT:	STRCPY(code, "NFA_CLASS_PUNCT"); break;
++	case NFA_CLASS_SPACE:	STRCPY(code, "NFA_CLASS_SPACE"); break;
++	case NFA_CLASS_UPPER:	STRCPY(code, "NFA_CLASS_UPPER"); break;
++	case NFA_CLASS_XDIGIT:	STRCPY(code, "NFA_CLASS_XDIGIT"); break;
++	case NFA_CLASS_TAB:	STRCPY(code, "NFA_CLASS_TAB"); break;
++	case NFA_CLASS_RETURN:	STRCPY(code, "NFA_CLASS_RETURN"); break;
++	case NFA_CLASS_BACKSPACE:   STRCPY(code, "NFA_CLASS_BACKSPACE"); break;
++	case NFA_CLASS_ESCAPE:	STRCPY(code, "NFA_CLASS_ESCAPE"); break;
++
++	case NFA_ANY:	STRCPY(code, "NFA_ANY"); break;
++	case NFA_IDENT:	STRCPY(code, "NFA_IDENT"); break;
++	case NFA_SIDENT:STRCPY(code, "NFA_SIDENT"); break;
++	case NFA_KWORD:	STRCPY(code, "NFA_KWORD"); break;
++	case NFA_SKWORD:STRCPY(code, "NFA_SKWORD"); break;
++	case NFA_FNAME:	STRCPY(code, "NFA_FNAME"); break;
++	case NFA_SFNAME:STRCPY(code, "NFA_SFNAME"); break;
++	case NFA_PRINT:	STRCPY(code, "NFA_PRINT"); break;
++	case NFA_SPRINT:STRCPY(code, "NFA_SPRINT"); break;
++	case NFA_WHITE:	STRCPY(code, "NFA_WHITE"); break;
++	case NFA_NWHITE:STRCPY(code, "NFA_NWHITE"); break;
++	case NFA_DIGIT:	STRCPY(code, "NFA_DIGIT"); break;
++	case NFA_NDIGIT:STRCPY(code, "NFA_NDIGIT"); break;
++	case NFA_HEX:	STRCPY(code, "NFA_HEX"); break;
++	case NFA_NHEX:	STRCPY(code, "NFA_NHEX"); break;
++	case NFA_OCTAL:	STRCPY(code, "NFA_OCTAL"); break;
++	case NFA_NOCTAL:STRCPY(code, "NFA_NOCTAL"); break;
++	case NFA_WORD:	STRCPY(code, "NFA_WORD"); break;
++	case NFA_NWORD:	STRCPY(code, "NFA_NWORD"); break;
++	case NFA_HEAD:	STRCPY(code, "NFA_HEAD"); break;
++	case NFA_NHEAD:	STRCPY(code, "NFA_NHEAD"); break;
++	case NFA_ALPHA:	STRCPY(code, "NFA_ALPHA"); break;
++	case NFA_NALPHA:STRCPY(code, "NFA_NALPHA"); break;
++	case NFA_LOWER:	STRCPY(code, "NFA_LOWER"); break;
++	case NFA_NLOWER:STRCPY(code, "NFA_NLOWER"); break;
++	case NFA_UPPER:	STRCPY(code, "NFA_UPPER"); break;
++	case NFA_NUPPER:STRCPY(code, "NFA_NUPPER"); break;
++
++	default:
++	    STRCPY(code, "CHAR(x)");
++	    code[5] = c;
++    }
++
++    if (addnl == TRUE)
++	STRCAT(code, " + NEWLINE ");
++
++}
++
++#ifdef ENABLE_LOG
++static FILE *log_fd;
++
++/*
++ * Print the postfix notation of the current regexp.
++ */
++    static void
++nfa_postfix_dump(expr, retval)
++    char_u  *expr;
++    int	    retval;
++{
++    int *p;
++    FILE *f;
++
++    f = fopen(NFA_REGEXP_DUMP_LOG, "a");
++    if (f != NULL)
++    {
++	fprintf(f, "\n-------------------------\n");
++	if (retval == FAIL)
++	    fprintf(f, ">>> NFA engine failed ... \n");
++	else if (retval == OK)
++	    fprintf(f, ">>> NFA engine succeeded !\n");
++	fprintf(f, "Regexp: \"%s\"\nPostfix notation (char): \"", expr);
++	for (p = post_start; *p && p < post_end; p++)
++	{
++	    nfa_set_code(*p);
++	    fprintf(f, "%s, ", code);
++	}
++	fprintf(f, "\"\nPostfix notation (int): ");
++	for (p = post_start; *p && p < post_end; p++)
++		fprintf(f, "%d ", *p);
++	fprintf(f, "\n\n");
++	fclose(f);
++    }
++}
++
++/*
++ * Print the NFA starting with a root node "state".
++ */
++    static void
++nfa_print_state(debugf, state)
++    FILE *debugf;
++    nfa_state_T *state;
++{
++    garray_T indent;
++
++    ga_init2(&indent, 1, 64);
++    ga_append(&indent, '\0');
++    nfa_print_state2(debugf, state, &indent);
++    ga_clear(&indent);
++}
++
++    static void
++nfa_print_state2(debugf, state, indent)
++    FILE *debugf;
++    nfa_state_T *state;
++    garray_T *indent;
++{
++    char_u  *p;
++
++    if (state == NULL)
++	return;
++
++    fprintf(debugf, "(%2d)", abs(state->id));
++
++    /* Output indent */
++    p = (char_u *)indent->ga_data;
++    if (indent->ga_len >= 3)
++    {
++	int	last = indent->ga_len - 3;
++	char_u	save[2];
++
++	STRNCPY(save, &p[last], 2);
++	STRNCPY(&p[last], "+-", 2);
++	fprintf(debugf, " %s", p);
++	STRNCPY(&p[last], save, 2);
++    }
++    else
++	fprintf(debugf, " %s", p);
++
++    nfa_set_code(state->c);
++    fprintf(debugf, "%s (%d) (id=%d) val=%d\n",
++		 code,
++		 state->c,
++		 abs(state->id),
++		 state->val);
++    if (state->id < 0)
++	return;
++
++    state->id = abs(state->id) * -1;
++
++    /* grow indent for state->out */
++    indent->ga_len -= 1;
++    if (state->out1)
++	ga_concat(indent, (char_u *)"| ");
++    else
++	ga_concat(indent, (char_u *)"  ");
++    ga_append(indent, '\0');
++
++    nfa_print_state2(debugf, state->out, indent);
++
++    /* replace last part of indent for state->out1 */
++    indent->ga_len -= 3;
++    ga_concat(indent, (char_u *)"  ");
++    ga_append(indent, '\0');
++
++    nfa_print_state2(debugf, state->out1, indent);
++
++    /* shrink indent */
++    indent->ga_len -= 3;
++    ga_append(indent, '\0');
++}
++
++/*
++ * Print the NFA state machine.
++ */
++    static void
++nfa_dump(prog)
++    nfa_regprog_T *prog;
++{
++    FILE *debugf = fopen(NFA_REGEXP_DUMP_LOG, "a");
++
++    if (debugf != NULL)
++    {
++	nfa_print_state(debugf, prog->start);
++
++	fprintf(debugf, "reganch: %d\n", prog->reganch);
++	fprintf(debugf, "regstart: %d\n", prog->regstart);
++
++	fclose(debugf);
++    }
++}
++#endif	    /* ENABLE_LOG */
++#endif	    /* DEBUG */
++
++/*
++ * Parse r.e. @expr and convert it into postfix form.
++ * Return the postfix string on success, NULL otherwise.
++ */
++    static int *
++re2post()
++{
++    if (nfa_reg(REG_NOPAREN) == FAIL)
++	return NULL;
++    EMIT(NFA_MOPEN);
++    return post_start;
++}
++
++/* NB. Some of the code below is inspired by Russ's. */
++
++/*
++ * Represents an NFA state plus zero or one or two arrows exiting.
++ * if c == MATCH, no arrows out; matching state.
++ * If c == SPLIT, unlabeled arrows to out and out1 (if != NULL).
++ * If c < 256, labeled arrow with character c to out.
++ */
++
++static nfa_state_T	*state_ptr; /* points to nfa_prog->state */
++
++/*
++ * Allocate and initialize nfa_state_T.
++ */
++    static nfa_state_T *
++alloc_state(c, out, out1)
++    int		c;
++    nfa_state_T	*out;
++    nfa_state_T	*out1;
++{
++    nfa_state_T *s;
++
++    if (istate >= nstate)
++	return NULL;
++
++    s = &state_ptr[istate++];
++
++    s->c    = c;
++    s->out  = out;
++    s->out1 = out1;
++    s->val  = 0;
++
++    s->id   = istate;
++    s->lastlist[0] = 0;
++    s->lastlist[1] = 0;
++
++    return s;
++}
++
++/*
++ * A partially built NFA without the matching state filled in.
++ * Frag_T.start points at the start state.
++ * Frag_T.out is a list of places that need to be set to the
++ * next state for this fragment.
++ */
++
++/* Since the out pointers in the list are always
++ * uninitialized, we use the pointers themselves
++ * as storage for the Ptrlists. */
++typedef union Ptrlist Ptrlist;
++union Ptrlist
++{
++    Ptrlist	*next;
++    nfa_state_T	*s;
++};
++
++struct Frag
++{
++    nfa_state_T *start;
++    Ptrlist	*out;
++};
++typedef struct Frag Frag_T;
++
++static Frag_T frag __ARGS((nfa_state_T *start, Ptrlist *out));
++static Ptrlist *list1 __ARGS((nfa_state_T **outp));
++static void patch __ARGS((Ptrlist *l, nfa_state_T *s));
++static Ptrlist *append __ARGS((Ptrlist *l1, Ptrlist *l2));
++static void st_push __ARGS((Frag_T s, Frag_T **p, Frag_T *stack_end));
++static Frag_T st_pop __ARGS((Frag_T **p, Frag_T *stack));
++
++/*
++ * Initialize a Frag_T struct and return it.
++ */
++    static Frag_T
++frag(start, out)
++    nfa_state_T	*start;
++    Ptrlist	*out;
++{
++    Frag_T n;
++
++    n.start = start;
++    n.out = out;
++    return n;
++}
++
++/*
++ * Create singleton list containing just outp.
++ */
++    static Ptrlist *
++list1(outp)
++    nfa_state_T	**outp;
++{
++    Ptrlist *l;
++
++    l = (Ptrlist *)outp;
++    l->next = NULL;
++    return l;
++}
++
++/*
++ * Patch the list of states at out to point to start.
++ */
++    static void
++patch(l, s)
++    Ptrlist	*l;
++    nfa_state_T	*s;
++{
++    Ptrlist *next;
++
++    for (; l; l = next)
++    {
++	next = l->next;
++	l->s = s;
++    }
++}
++
++
++/*
++ * Join the two lists l1 and l2, returning the combination.
++ */
++    static Ptrlist *
++append(l1, l2)
++    Ptrlist *l1;
++    Ptrlist *l2;
++{
++    Ptrlist *oldl1;
++
++    oldl1 = l1;
++    while (l1->next)
++	l1 = l1->next;
++    l1->next = l2;
++    return oldl1;
++}
++
++/*
++ * Stack used for transforming postfix form into NFA.
++ */
++static Frag_T empty;
++
++    static void
++st_error(postfix, end, p)
++    int *postfix UNUSED;
++    int *end UNUSED;
++    int *p UNUSED;
++{
++#ifdef NFA_REGEXP_ERROR_LOG
++    FILE *df;
++    int *p2;
++
++    df = fopen(NFA_REGEXP_ERROR_LOG, "a");
++    if (df)
++    {
++	fprintf(df, "Error popping the stack!\n");
++#ifdef DEBUG
++	fprintf(df, "Current regexp is \"%s\"\n", nfa_regengine.expr);
++#endif
++	fprintf(df, "Postfix form is: ");
++#ifdef DEBUG
++	for (p2 = postfix; p2 < end; p2++)
++	{
++	    nfa_set_code(*p2);
++	    fprintf(df, "%s, ", code);
++	}
++	nfa_set_code(*p);
++	fprintf(df, "\nCurrent position is: ");
++	for (p2 = postfix; p2 <= p; p2 ++)
++	{
++	    nfa_set_code(*p2);
++	    fprintf(df, "%s, ", code);
++	}
++#else
++	for (p2 = postfix; p2 < end; p2++)
++	{
++	    fprintf(df, "%d, ", *p2);
++	}
++	fprintf(df, "\nCurrent position is: ");
++	for (p2 = postfix; p2 <= p; p2 ++)
++	{
++	    fprintf(df, "%d, ", *p2);
++	}
++#endif
++	fprintf(df, "\n--------------------------\n");
++	fclose(df);
++    }
++#endif
++    EMSG(_("E874: (NFA) Could not pop the stack !"));
++}
++
++/*
++ * Push an item onto the stack.
++ */
++    static void
++st_push(s, p, stack_end)
++    Frag_T s;
++    Frag_T **p;
++    Frag_T *stack_end;
++{
++    Frag_T *stackp = *p;
++
++    if (stackp >= stack_end)
++	return;
++    *stackp = s;
++    *p = *p + 1;
++}
++
++/*
++ * Pop an item from the stack.
++ */
++    static Frag_T
++st_pop(p, stack)
++    Frag_T **p;
++    Frag_T *stack;
++{
++    Frag_T *stackp;
++
++    *p = *p - 1;
++    stackp = *p;
++    if (stackp < stack)
++	return empty;
++    return **p;
++}
++
++/*
++ * Convert a postfix form into its equivalent NFA.
++ * Return the NFA start state on success, NULL otherwise.
++ */
++    static nfa_state_T *
++post2nfa(postfix, end, nfa_calc_size)
++    int		*postfix;
++    int		*end;
++    int		nfa_calc_size;
++{
++    int		*p;
++    int		mopen;
++    int		mclose;
++    Frag_T	*stack = NULL;
++    Frag_T	*stackp = NULL;
++    Frag_T	*stack_end = NULL;
++    Frag_T	e1;
++    Frag_T	e2;
++    Frag_T	e;
++    nfa_state_T	*s;
++    nfa_state_T	*s1;
++    nfa_state_T	*matchstate;
++    nfa_state_T	*ret = NULL;
++
++    if (postfix == NULL)
++	return NULL;
++
++#define PUSH(s)	    st_push((s), &stackp, stack_end)
++#define POP()	    st_pop(&stackp, stack);		\
++		    if (stackp < stack)			\
++		    {					\
++			st_error(postfix, end, p);	\
++			return NULL;			\
++		    }
++
++    if (nfa_calc_size == FALSE)
++    {
++	/* Allocate space for the stack. Max states on the stack : nstate */
++	stack = (Frag_T *)lalloc((nstate + 1) * sizeof(Frag_T), TRUE);
++	stackp = stack;
++	stack_end = stack + (nstate + 1);
++    }
++
++    for (p = postfix; p < end; ++p)
++    {
++	switch (*p)
++	{
++	case NFA_CONCAT:
++	    /* Concatenation.
++	     * Pay attention: this operator does not exist in the r.e. itself
++	     * (it is implicit, really).  It is added when r.e. is translated
++	     * to postfix form in re2post(). */
++	    if (nfa_calc_size == TRUE)
++	    {
++		/* nstate += 0; */
++		break;
++	    }
++	    e2 = POP();
++	    e1 = POP();
++	    patch(e1.out, e2.start);
++	    PUSH(frag(e1.start, e2.out));
++	    break;
++
++	case NFA_OR:
++	    /* Alternation */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    e2 = POP();
++	    e1 = POP();
++	    s = alloc_state(NFA_SPLIT, e1.start, e2.start);
++	    if (s == NULL)
++		goto theend;
++	    PUSH(frag(s, append(e1.out, e2.out)));
++	    break;
++
++	case NFA_STAR:
++	    /* Zero or more, prefer more */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    e = POP();
++	    s = alloc_state(NFA_SPLIT, e.start, NULL);
++	    if (s == NULL)
++		goto theend;
++	    patch(e.out, s);
++	    PUSH(frag(s, list1(&s->out1)));
++	    break;
++
++	case NFA_STAR_NONGREEDY:
++	    /* Zero or more, prefer zero */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    e = POP();
++	    s = alloc_state(NFA_SPLIT, NULL, e.start);
++	    if (s == NULL)
++		goto theend;
++	    patch(e.out, s);
++	    PUSH(frag(s, list1(&s->out)));
++	    break;
++
++	case NFA_QUEST:
++	    /* one or zero atoms=> greedy match */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    e = POP();
++	    s = alloc_state(NFA_SPLIT, e.start, NULL);
++	    if (s == NULL)
++		goto theend;
++	    PUSH(frag(s, append(e.out, list1(&s->out1))));
++	    break;
++
++	case NFA_QUEST_NONGREEDY:
++	    /* zero or one atoms => non-greedy match */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    e = POP();
++	    s = alloc_state(NFA_SPLIT, NULL, e.start);
++	    if (s == NULL)
++		goto theend;
++	    PUSH(frag(s, append(e.out, list1(&s->out))));
++	    break;
++
++	case NFA_END_COLL:
++	case NFA_END_NEG_COLL:
++	    /* On the stack is the sequence starting with NFA_START_COLL or
++	     * NFA_START_NEG_COLL and all possible characters. Patch it to
++	     * add the output to the start. */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    e = POP();
++	    s = alloc_state(NFA_END_COLL, NULL, NULL);
++	    if (s == NULL)
++		goto theend;
++	    patch(e.out, s);
++	    e.start->out1 = s;
++	    PUSH(frag(e.start, list1(&s->out)));
++	    break;
++
++	case NFA_RANGE:
++	    /* Before this are two characters, the low and high end of a
++	     * range.  Turn them into two states with MIN and MAX. */
++	    if (nfa_calc_size == TRUE)
++	    {
++		/* nstate += 0; */
++		break;
++	    }
++	    e2 = POP();
++	    e1 = POP();
++	    e2.start->val = e2.start->c;
++	    e2.start->c = NFA_RANGE_MAX;
++	    e1.start->val = e1.start->c;
++	    e1.start->c = NFA_RANGE_MIN;
++	    patch(e1.out, e2.start);
++	    PUSH(frag(e1.start, e2.out));
++	    break;
++
++	case NFA_SKIP_CHAR:
++	    /* Symbol of 0-length, Used in a repetition
++	     * with max/min count of 0 */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    s = alloc_state(NFA_SKIP_CHAR, NULL, NULL);
++	    if (s == NULL)
++		goto theend;
++	    PUSH(frag(s, list1(&s->out)));
++	    break;
++
++	case NFA_OPT_CHARS:
++	  {
++	    int    n;
++
++	    /* \%[abc] */
++	    n = *++p; /* get number of characters */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate += n;
++		break;
++	    }
++	    s = NULL; /* avoid compiler warning */
++	    e1.out = NULL; /* stores list with out1's */
++	    s1 = NULL; /* previous NFA_SPLIT to connect to */
++	    while (n-- > 0)
++	    {
++		e = POP(); /* get character */
++		s = alloc_state(NFA_SPLIT, e.start, NULL);
++		if (s == NULL)
++		    goto theend;
++		if (e1.out == NULL)
++		    e1 = e;
++		patch(e.out, s1);
++		append(e1.out, list1(&s->out1));
++		s1 = s;
++	    }
++	    PUSH(frag(s, e1.out));
++	    break;
++	  }
++
++	case NFA_PREV_ATOM_NO_WIDTH:
++	case NFA_PREV_ATOM_NO_WIDTH_NEG:
++	case NFA_PREV_ATOM_JUST_BEFORE:
++	case NFA_PREV_ATOM_JUST_BEFORE_NEG:
++	case NFA_PREV_ATOM_LIKE_PATTERN:
++	  {
++	    int before = (*p == NFA_PREV_ATOM_JUST_BEFORE
++				      || *p == NFA_PREV_ATOM_JUST_BEFORE_NEG);
++	    int pattern = (*p == NFA_PREV_ATOM_LIKE_PATTERN);
++	    int start_state;
++	    int end_state;
++	    int n = 0;
++	    nfa_state_T *zend;
++	    nfa_state_T *skip;
++
++	    switch (*p)
++	    {
++		case NFA_PREV_ATOM_NO_WIDTH:
++		    start_state = NFA_START_INVISIBLE;
++		    end_state = NFA_END_INVISIBLE;
++		    break;
++		case NFA_PREV_ATOM_NO_WIDTH_NEG:
++		    start_state = NFA_START_INVISIBLE_NEG;
++		    end_state = NFA_END_INVISIBLE_NEG;
++		    break;
++		case NFA_PREV_ATOM_JUST_BEFORE:
++		    start_state = NFA_START_INVISIBLE_BEFORE;
++		    end_state = NFA_END_INVISIBLE;
++		    break;
++		case NFA_PREV_ATOM_JUST_BEFORE_NEG:
++		    start_state = NFA_START_INVISIBLE_BEFORE_NEG;
++		    end_state = NFA_END_INVISIBLE_NEG;
++		    break;
++		case NFA_PREV_ATOM_LIKE_PATTERN:
++		    start_state = NFA_START_PATTERN;
++		    end_state = NFA_END_PATTERN;
++		    break;
++	    }
++
++	    if (before)
++		n = *++p; /* get the count */
++
++	    /* The \@= operator: match the preceding atom with zero width.
++	     * The \@! operator: no match for the preceding atom.
++	     * The \@<= operator: match for the preceding atom.
++	     * The \@<! operator: no match for the preceding atom.
++	     * Surrounds the preceding atom with START_INVISIBLE and
++	     * END_INVISIBLE, similarly to MOPEN. */
++
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate += pattern ? 4 : 2;
++		break;
++	    }
++	    e = POP();
++	    s1 = alloc_state(end_state, NULL, NULL);
++	    if (s1 == NULL)
++		goto theend;
++
++	    s = alloc_state(start_state, e.start, s1);
++	    if (s == NULL)
++		goto theend;
++	    if (before)
++		s->val = n; /* store the count */
++	    if (pattern)
++	    {
++		/* NFA_ZEND -> NFA_END_PATTERN -> NFA_SKIP -> what follows. */
++		skip = alloc_state(NFA_SKIP, NULL, NULL);
++		zend = alloc_state(NFA_ZEND, s1, NULL);
++		s1->out= skip;
++		patch(e.out, zend);
++		PUSH(frag(s, list1(&skip->out)));
++	    }
++	    else
++	    {
++		patch(e.out, s1);
++		PUSH(frag(s, list1(&s1->out)));
++	    }
++	    break;
++	  }
++
++#ifdef FEAT_MBYTE
++	case NFA_COMPOSING:	/* char with composing char */
++#if 0
++	    /* TODO */
++	    if (regflags & RF_ICOMBINE)
++	    {
++		/* use the base character only */
++	    }
++#endif
++	    /* FALLTHROUGH */
++#endif
++
++	case NFA_MOPEN:	/* \( \) Submatch */
++	case NFA_MOPEN1:
++	case NFA_MOPEN2:
++	case NFA_MOPEN3:
++	case NFA_MOPEN4:
++	case NFA_MOPEN5:
++	case NFA_MOPEN6:
++	case NFA_MOPEN7:
++	case NFA_MOPEN8:
++	case NFA_MOPEN9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZOPEN:	/* \z( \) Submatch */
++	case NFA_ZOPEN1:
++	case NFA_ZOPEN2:
++	case NFA_ZOPEN3:
++	case NFA_ZOPEN4:
++	case NFA_ZOPEN5:
++	case NFA_ZOPEN6:
++	case NFA_ZOPEN7:
++	case NFA_ZOPEN8:
++	case NFA_ZOPEN9:
++#endif
++	case NFA_NOPEN:	/* \%( \) "Invisible Submatch" */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate += 2;
++		break;
++	    }
++
++	    mopen = *p;
++	    switch (*p)
++	    {
++		case NFA_NOPEN: mclose = NFA_NCLOSE; break;
++#ifdef FEAT_SYN_HL
++		case NFA_ZOPEN: mclose = NFA_ZCLOSE; break;
++		case NFA_ZOPEN1: mclose = NFA_ZCLOSE1; break;
++		case NFA_ZOPEN2: mclose = NFA_ZCLOSE2; break;
++		case NFA_ZOPEN3: mclose = NFA_ZCLOSE3; break;
++		case NFA_ZOPEN4: mclose = NFA_ZCLOSE4; break;
++		case NFA_ZOPEN5: mclose = NFA_ZCLOSE5; break;
++		case NFA_ZOPEN6: mclose = NFA_ZCLOSE6; break;
++		case NFA_ZOPEN7: mclose = NFA_ZCLOSE7; break;
++		case NFA_ZOPEN8: mclose = NFA_ZCLOSE8; break;
++		case NFA_ZOPEN9: mclose = NFA_ZCLOSE9; break;
++#endif
++#ifdef FEAT_MBYTE
++		case NFA_COMPOSING: mclose = NFA_END_COMPOSING; break;
++#endif
++		default:
++		    /* NFA_MOPEN, NFA_MOPEN1 .. NFA_MOPEN9 */
++		    mclose = *p + NSUBEXP;
++		    break;
++	    }
++
++	    /* Allow "NFA_MOPEN" as a valid postfix representation for
++	     * the empty regexp "". In this case, the NFA will be
++	     * NFA_MOPEN -> NFA_MCLOSE. Note that this also allows
++	     * empty groups of parenthesis, and empty mbyte chars */
++	    if (stackp == stack)
++	    {
++		s = alloc_state(mopen, NULL, NULL);
++		if (s == NULL)
++		    goto theend;
++		s1 = alloc_state(mclose, NULL, NULL);
++		if (s1 == NULL)
++		    goto theend;
++		patch(list1(&s->out), s1);
++		PUSH(frag(s, list1(&s1->out)));
++		break;
++	    }
++
++	    /* At least one node was emitted before NFA_MOPEN, so
++	     * at least one node will be between NFA_MOPEN and NFA_MCLOSE */
++	    e = POP();
++	    s = alloc_state(mopen, e.start, NULL);   /* `(' */
++	    if (s == NULL)
++		goto theend;
++
++	    s1 = alloc_state(mclose, NULL, NULL);   /* `)' */
++	    if (s1 == NULL)
++		goto theend;
++	    patch(e.out, s1);
++
++#ifdef FEAT_MBYTE
++	    if (mopen == NFA_COMPOSING)
++		/* COMPOSING->out1 = END_COMPOSING */
++		patch(list1(&s->out1), s1);
++#endif
++
++	    PUSH(frag(s, list1(&s1->out)));
++	    break;
++
++	case NFA_BACKREF1:
++	case NFA_BACKREF2:
++	case NFA_BACKREF3:
++	case NFA_BACKREF4:
++	case NFA_BACKREF5:
++	case NFA_BACKREF6:
++	case NFA_BACKREF7:
++	case NFA_BACKREF8:
++	case NFA_BACKREF9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZREF1:
++	case NFA_ZREF2:
++	case NFA_ZREF3:
++	case NFA_ZREF4:
++	case NFA_ZREF5:
++	case NFA_ZREF6:
++	case NFA_ZREF7:
++	case NFA_ZREF8:
++	case NFA_ZREF9:
++#endif
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate += 2;
++		break;
++	    }
++	    s = alloc_state(*p, NULL, NULL);
++	    if (s == NULL)
++		goto theend;
++	    s1 = alloc_state(NFA_SKIP, NULL, NULL);
++	    if (s1 == NULL)
++		goto theend;
++	    patch(list1(&s->out), s1);
++	    PUSH(frag(s, list1(&s1->out)));
++	    break;
++
++	case NFA_LNUM:
++	case NFA_LNUM_GT:
++	case NFA_LNUM_LT:
++	case NFA_VCOL:
++	case NFA_VCOL_GT:
++	case NFA_VCOL_LT:
++	case NFA_COL:
++	case NFA_COL_GT:
++	case NFA_COL_LT:
++	case NFA_MARK:
++	case NFA_MARK_GT:
++	case NFA_MARK_LT:
++	  {
++	    int n = *++p; /* lnum, col or mark name */
++
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate += 1;
++		break;
++	    }
++	    s = alloc_state(p[-1], NULL, NULL);
++	    if (s == NULL)
++		goto theend;
++	    s->val = n;
++	    PUSH(frag(s, list1(&s->out)));
++	    break;
++	  }
++
++	case NFA_ZSTART:
++	case NFA_ZEND:
++	default:
++	    /* Operands */
++	    if (nfa_calc_size == TRUE)
++	    {
++		nstate++;
++		break;
++	    }
++	    s = alloc_state(*p, NULL, NULL);
++	    if (s == NULL)
++		goto theend;
++	    PUSH(frag(s, list1(&s->out)));
++	    break;
++
++	} /* switch(*p) */
++
++    } /* for(p = postfix; *p; ++p) */
++
++    if (nfa_calc_size == TRUE)
++    {
++	nstate++;
++	goto theend;	/* Return value when counting size is ignored anyway */
++    }
++
++    e = POP();
++    if (stackp != stack)
++	EMSG_RET_NULL(_("E875: (NFA regexp) (While converting from postfix to NFA), too many states left on stack"));
++
++    if (istate >= nstate)
++	EMSG_RET_NULL(_("E876: (NFA regexp) Not enough space to store the whole NFA "));
++
++    matchstate = &state_ptr[istate++]; /* the match state */
++    matchstate->c = NFA_MATCH;
++    matchstate->out = matchstate->out1 = NULL;
++    matchstate->id = 0;
++
++    patch(e.out, matchstate);
++    ret = e.start;
++
++theend:
++    vim_free(stack);
++    return ret;
++
++#undef POP1
++#undef PUSH1
++#undef POP2
++#undef PUSH2
++#undef POP
++#undef PUSH
++}
++
++/****************************************************************
++ * NFA execution code.
++ ****************************************************************/
++
++typedef struct
++{
++    int	    in_use; /* number of subexpr with useful info */
++
++    /* When REG_MULTI is TRUE list.multi is used, otherwise list.line. */
++    union
++    {
++	struct multipos
++	{
++	    lpos_T	start;
++	    lpos_T	end;
++	} multi[NSUBEXP];
++	struct linepos
++	{
++	    char_u	*start;
++	    char_u	*end;
++	} line[NSUBEXP];
++    } list;
++} regsub_T;
++
++typedef struct
++{
++    regsub_T	norm; /* \( .. \) matches */
++#ifdef FEAT_SYN_HL
++    regsub_T	synt; /* \z( .. \) matches */
++#endif
++} regsubs_T;
++
++/* nfa_pim_T stores a Postponed Invisible Match. */
++typedef struct nfa_pim_S nfa_pim_T;
++struct nfa_pim_S
++{
++    nfa_state_T	*state;
++    int		result;		/* NFA_PIM_TODO, NFA_PIM_[NO]MATCH */
++    nfa_pim_T	*pim;		/* another PIM at the same position */
++    regsubs_T	subs;		/* submatch info, only party used */
++};
++
++/* Values for done in nfa_pim_T. */
++#define NFA_PIM_TODO    0
++#define NFA_PIM_MATCH   1
++#define NFA_PIM_NOMATCH -1
++
++
++/* nfa_thread_T contains execution information of a NFA state */
++typedef struct
++{
++    nfa_state_T	*state;
++    int		count;
++    nfa_pim_T	*pim;		/* if not NULL: postponed invisible match */
++    regsubs_T	subs;		/* submatch info, only party used */
++} nfa_thread_T;
++
++/* nfa_list_T contains the alternative NFA execution states. */
++typedef struct
++{
++    nfa_thread_T    *t;		/* allocated array of states */
++    int		    n;		/* nr of states currently in "t" */
++    int		    len;	/* max nr of states in "t" */
++    int		    id;		/* ID of the list */
++} nfa_list_T;
++
++#ifdef ENABLE_LOG
++static void log_subsexpr __ARGS((regsubs_T *subs));
++static void log_subexpr __ARGS((regsub_T *sub));
++
++    static void
++log_subsexpr(subs)
++    regsubs_T *subs;
++{
++    log_subexpr(&subs->norm);
++# ifdef FEAT_SYN_HL
++    if (nfa_has_zsubexpr)
++	log_subexpr(&subs->synt);
++# endif
++}
++
++    static void
++log_subexpr(sub)
++    regsub_T *sub;
++{
++    int j;
++
++    for (j = 0; j < sub->in_use; j++)
++	if (REG_MULTI)
++	    fprintf(log_fd, "*** group %d, start: c=%d, l=%d, end: c=%d, l=%d\n",
++		    j,
++		    sub->list.multi[j].start.col,
++		    (int)sub->list.multi[j].start.lnum,
++		    sub->list.multi[j].end.col,
++		    (int)sub->list.multi[j].end.lnum);
++	else
++	{
++	    char *s = (char *)sub->list.line[j].start;
++	    char *e = (char *)sub->list.line[j].end;
++
++	    fprintf(log_fd, "*** group %d, start: \"%s\", end: \"%s\"\n",
++		    j,
++		    s == NULL ? "NULL" : s,
++		    e == NULL ? "NULL" : e);
++	}
++}
++#endif
++
++/* Used during execution: whether a match has been found. */
++static int nfa_match;
++
++static void clear_sub __ARGS((regsub_T *sub));
++static void copy_sub __ARGS((regsub_T *to, regsub_T *from));
++static void copy_sub_off __ARGS((regsub_T *to, regsub_T *from));
++static int sub_equal __ARGS((regsub_T *sub1, regsub_T *sub2));
++static int has_state_with_pos __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs));
++static int state_in_list __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs));
++static void addstate __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, int off));
++static void addstate_here __ARGS((nfa_list_T *l, nfa_state_T *state, regsubs_T *subs, nfa_pim_T *pim, int *ip));
++
++    static void
++clear_sub(sub)
++    regsub_T *sub;
++{
++    if (REG_MULTI)
++	/* Use 0xff to set lnum to -1 */
++	vim_memset(sub->list.multi, 0xff,
++				      sizeof(struct multipos) * nfa_nsubexpr);
++    else
++	vim_memset(sub->list.line, 0, sizeof(struct linepos) * nfa_nsubexpr);
++    sub->in_use = 0;
++}
++
++/*
++ * Copy the submatches from "from" to "to".
++ */
++    static void
++copy_sub(to, from)
++    regsub_T	*to;
++    regsub_T	*from;
++{
++    to->in_use = from->in_use;
++    if (from->in_use > 0)
++    {
++	/* Copy the match start and end positions. */
++	if (REG_MULTI)
++	    mch_memmove(&to->list.multi[0],
++			&from->list.multi[0],
++			sizeof(struct multipos) * from->in_use);
++	else
++	    mch_memmove(&to->list.line[0],
++			&from->list.line[0],
++			sizeof(struct linepos) * from->in_use);
++    }
++}
++
++/*
++ * Like copy_sub() but exclude the main match.
++ */
++    static void
++copy_sub_off(to, from)
++    regsub_T	*to;
++    regsub_T	*from;
++{
++    if (to->in_use < from->in_use)
++	to->in_use = from->in_use;
++    if (from->in_use > 1)
++    {
++	/* Copy the match start and end positions. */
++	if (REG_MULTI)
++	    mch_memmove(&to->list.multi[1],
++			&from->list.multi[1],
++			sizeof(struct multipos) * (from->in_use - 1));
++	else
++	    mch_memmove(&to->list.line[1],
++			&from->list.line[1],
++			sizeof(struct linepos) * (from->in_use - 1));
++    }
++}
++
++/*
++ * Return TRUE if "sub1" and "sub2" have the same positions.
++ */
++    static int
++sub_equal(sub1, sub2)
++    regsub_T	*sub1;
++    regsub_T	*sub2;
++{
++    int		i;
++    int		todo;
++    linenr_T	s1, e1;
++    linenr_T	s2, e2;
++    char_u	*sp1, *ep1;
++    char_u	*sp2, *ep2;
++
++    todo = sub1->in_use > sub2->in_use ? sub1->in_use : sub2->in_use;
++    if (REG_MULTI)
++    {
++	for (i = 0; i < todo; ++i)
++	{
++	    if (i < sub1->in_use)
++	    {
++		s1 = sub1->list.multi[i].start.lnum;
++		e1 = sub1->list.multi[i].end.lnum;
++	    }
++	    else
++	    {
++		s1 = 0;
++		e1 = 0;
++	    }
++	    if (i < sub2->in_use)
++	    {
++		s2 = sub2->list.multi[i].start.lnum;
++		e2 = sub2->list.multi[i].end.lnum;
++	    }
++	    else
++	    {
++		s2 = 0;
++		e2 = 0;
++	    }
++	    if (s1 != s2 || e1 != e2)
++		return FALSE;
++	    if (s1 != 0 && sub1->list.multi[i].start.col
++					     != sub2->list.multi[i].start.col)
++		return FALSE;
++	    if (e1 != 0 && sub1->list.multi[i].end.col
++					     != sub2->list.multi[i].end.col)
++		return FALSE;
++	}
++    }
++    else
++    {
++	for (i = 0; i < todo; ++i)
++	{
++	    if (i < sub1->in_use)
++	    {
++		sp1 = sub1->list.line[i].start;
++		ep1 = sub1->list.line[i].end;
++	    }
++	    else
++	    {
++		sp1 = NULL;
++		ep1 = NULL;
++	    }
++	    if (i < sub2->in_use)
++	    {
++		sp2 = sub2->list.line[i].start;
++		ep2 = sub2->list.line[i].end;
++	    }
++	    else
++	    {
++		sp2 = NULL;
++		ep2 = NULL;
++	    }
++	    if (sp1 != sp2 || ep1 != ep2)
++		return FALSE;
++	}
++    }
++
++    return TRUE;
++}
++
++#ifdef ENABLE_LOG
++    static void
++report_state(char *action, regsub_T *sub, nfa_state_T *state, int lid)
++{
++    int col;
++
++    if (sub->in_use <= 0)
++	col = -1;
++    else if (REG_MULTI)
++	col = sub->list.multi[0].start.col;
++    else
++	col = (int)(sub->list.line[0].start - regline);
++    nfa_set_code(state->c);
++    fprintf(log_fd, "> %s state %d to list %d. char %d: %s (start col %d)\n",
++	    action, abs(state->id), lid, state->c, code, col);
++}
++#endif
++
++/*
++ * Return TRUE if the same state is already in list "l" with the same
++ * positions as "subs".
++ */
++    static int
++has_state_with_pos(l, state, subs)
++    nfa_list_T		*l;	/* runtime state list */
++    nfa_state_T		*state;	/* state to update */
++    regsubs_T		*subs;	/* pointers to subexpressions */
++{
++    nfa_thread_T	*thread;
++    int			i;
++
++    for (i = 0; i < l->n; ++i)
++    {
++	thread = &l->t[i];
++	if (thread->state->id == state->id
++		&& sub_equal(&thread->subs.norm, &subs->norm)
++#ifdef FEAT_SYN_HL
++		&& (!nfa_has_zsubexpr ||
++		       sub_equal(&thread->subs.synt, &subs->synt))
++#endif
++			      )
++	    return TRUE;
++    }
++    return FALSE;
++}
++
++/*
++ * Return TRUE if "state" is already in list "l".
++ */
++    static int
++state_in_list(l, state, subs)
++    nfa_list_T		*l;	/* runtime state list */
++    nfa_state_T		*state;	/* state to update */
++    regsubs_T		*subs;	/* pointers to subexpressions */
++{
++    if (state->lastlist[nfa_ll_index] == l->id)
++    {
++	if (!nfa_has_backref || has_state_with_pos(l, state, subs))
++	    return TRUE;
++    }
++    return FALSE;
++}
++
++    static void
++addstate(l, state, subs, off)
++    nfa_list_T		*l;	/* runtime state list */
++    nfa_state_T		*state;	/* state to update */
++    regsubs_T		*subs;	/* pointers to subexpressions */
++    int			off;	/* byte offset, when -1 go to next line */
++{
++    int			subidx;
++    nfa_thread_T	*thread;
++    lpos_T		save_lpos;
++    int			save_in_use;
++    char_u		*save_ptr;
++    int			i;
++    regsub_T		*sub;
++#ifdef ENABLE_LOG
++    int			did_print = FALSE;
++#endif
++
++    if (l == NULL || state == NULL)
++	return;
++
++    switch (state->c)
++    {
++	case NFA_SPLIT:
++	case NFA_NOPEN:
++	case NFA_SKIP_CHAR:
++	case NFA_NCLOSE:
++	case NFA_MCLOSE:
++	case NFA_MCLOSE1:
++	case NFA_MCLOSE2:
++	case NFA_MCLOSE3:
++	case NFA_MCLOSE4:
++	case NFA_MCLOSE5:
++	case NFA_MCLOSE6:
++	case NFA_MCLOSE7:
++	case NFA_MCLOSE8:
++	case NFA_MCLOSE9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZCLOSE:
++	case NFA_ZCLOSE1:
++	case NFA_ZCLOSE2:
++	case NFA_ZCLOSE3:
++	case NFA_ZCLOSE4:
++	case NFA_ZCLOSE5:
++	case NFA_ZCLOSE6:
++	case NFA_ZCLOSE7:
++	case NFA_ZCLOSE8:
++	case NFA_ZCLOSE9:
++#endif
++	case NFA_ZEND:
++	    /* These nodes are not added themselves but their "out" and/or
++	     * "out1" may be added below.  */
++	    break;
++
++	case NFA_MOPEN:
++	case NFA_MOPEN1:
++	case NFA_MOPEN2:
++	case NFA_MOPEN3:
++	case NFA_MOPEN4:
++	case NFA_MOPEN5:
++	case NFA_MOPEN6:
++	case NFA_MOPEN7:
++	case NFA_MOPEN8:
++	case NFA_MOPEN9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZOPEN:
++	case NFA_ZOPEN1:
++	case NFA_ZOPEN2:
++	case NFA_ZOPEN3:
++	case NFA_ZOPEN4:
++	case NFA_ZOPEN5:
++	case NFA_ZOPEN6:
++	case NFA_ZOPEN7:
++	case NFA_ZOPEN8:
++	case NFA_ZOPEN9:
++#endif
++	case NFA_ZSTART:
++	    /* These nodes do not need to be added, but we need to bail out
++	     * when it was tried to be added to this list before. */
++	    if (state->lastlist[nfa_ll_index] == l->id)
++		goto skip_add;
++	    state->lastlist[nfa_ll_index] = l->id;
++	    break;
++
++	case NFA_BOL:
++	case NFA_BOF:
++	    /* "^" won't match past end-of-line, don't bother trying.
++	     * Except when we are going to the next line for a look-behind
++	     * match. */
++	    if (reginput > regline
++		    && (nfa_endp == NULL
++			|| !REG_MULTI
++			|| reglnum == nfa_endp->se_u.pos.lnum))
++		goto skip_add;
++	    /* FALLTHROUGH */
++
++	default:
++	    if (state->lastlist[nfa_ll_index] == l->id)
++	    {
++		/* This state is already in the list, don't add it again,
++		 * unless it is an MOPEN that is used for a backreference. */
++		if (!nfa_has_backref)
++		{
++skip_add:
++#ifdef ENABLE_LOG
++		    nfa_set_code(state->c);
++		    fprintf(log_fd, "> Not adding state %d to list %d. char %d: %s\n",
++			    abs(state->id), l->id, state->c, code);
++#endif
++		    return;
++		}
++
++		if (has_state_with_pos(l, state, subs))
++		    goto skip_add;
++	    }
++
++	    /* when there are backreferences or look-behind matches the number
++	     * of states may be (a lot) bigger */
++	    if (nfa_has_backref && l->n == l->len)
++	    {
++		int newlen = l->len * 3 / 2 + 50;
++
++		l->t = vim_realloc(l->t, newlen * sizeof(nfa_thread_T));
++		l->len = newlen;
++	    }
++
++	    /* add the state to the list */
++	    state->lastlist[nfa_ll_index] = l->id;
++	    thread = &l->t[l->n++];
++	    thread->state = state;
++	    thread->pim = NULL;
++	    copy_sub(&thread->subs.norm, &subs->norm);
++#ifdef FEAT_SYN_HL
++	    if (nfa_has_zsubexpr)
++		copy_sub(&thread->subs.synt, &subs->synt);
++#endif
++#ifdef ENABLE_LOG
++	    report_state("Adding", &thread->subs.norm, state, l->id);
++	    did_print = TRUE;
++#endif
++    }
++
++#ifdef ENABLE_LOG
++    if (!did_print)
++	report_state("Processing", &subs->norm, state, l->id);
++#endif
++    switch (state->c)
++    {
++	case NFA_MATCH:
++	    nfa_match = TRUE;
++	    break;
++
++	case NFA_SPLIT:
++	    /* order matters here */
++	    addstate(l, state->out, subs, off);
++	    addstate(l, state->out1, subs, off);
++	    break;
++
++	case NFA_SKIP_CHAR:
++	case NFA_NOPEN:
++	case NFA_NCLOSE:
++	    addstate(l, state->out, subs, off);
++	    break;
++
++	case NFA_MOPEN:
++	case NFA_MOPEN1:
++	case NFA_MOPEN2:
++	case NFA_MOPEN3:
++	case NFA_MOPEN4:
++	case NFA_MOPEN5:
++	case NFA_MOPEN6:
++	case NFA_MOPEN7:
++	case NFA_MOPEN8:
++	case NFA_MOPEN9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZOPEN:
++	case NFA_ZOPEN1:
++	case NFA_ZOPEN2:
++	case NFA_ZOPEN3:
++	case NFA_ZOPEN4:
++	case NFA_ZOPEN5:
++	case NFA_ZOPEN6:
++	case NFA_ZOPEN7:
++	case NFA_ZOPEN8:
++	case NFA_ZOPEN9:
++#endif
++	case NFA_ZSTART:
++	    if (state->c == NFA_ZSTART)
++	    {
++		subidx = 0;
++		sub = &subs->norm;
++	    }
++#ifdef FEAT_SYN_HL
++	    else if (state->c >= NFA_ZOPEN)
++	    {
++		subidx = state->c - NFA_ZOPEN;
++		sub = &subs->synt;
++	    }
++#endif
++	    else
++	    {
++		subidx = state->c - NFA_MOPEN;
++		sub = &subs->norm;
++	    }
++
++	    /* Set the position (with "off") in the subexpression.  Save and
++	     * restore it when it was in use.  Otherwise fill any gap. */
++	    save_ptr = NULL;
++	    if (REG_MULTI)
++	    {
++		if (subidx < sub->in_use)
++		{
++		    save_lpos = sub->list.multi[subidx].start;
++		    save_in_use = -1;
++		}
++		else
++		{
++		    save_in_use = sub->in_use;
++		    for (i = sub->in_use; i < subidx; ++i)
++		    {
++			sub->list.multi[i].start.lnum = -1;
++			sub->list.multi[i].end.lnum = -1;
++		    }
++		    sub->in_use = subidx + 1;
++		}
++		if (off == -1)
++		{
++		    sub->list.multi[subidx].start.lnum = reglnum + 1;
++		    sub->list.multi[subidx].start.col = 0;
++		}
++		else
++		{
++		    sub->list.multi[subidx].start.lnum = reglnum;
++		    sub->list.multi[subidx].start.col =
++					  (colnr_T)(reginput - regline + off);
++		}
++	    }
++	    else
++	    {
++		if (subidx < sub->in_use)
++		{
++		    save_ptr = sub->list.line[subidx].start;
++		    save_in_use = -1;
++		}
++		else
++		{
++		    save_in_use = sub->in_use;
++		    for (i = sub->in_use; i < subidx; ++i)
++		    {
++			sub->list.line[i].start = NULL;
++			sub->list.line[i].end = NULL;
++		    }
++		    sub->in_use = subidx + 1;
++		}
++		sub->list.line[subidx].start = reginput + off;
++	    }
++
++	    addstate(l, state->out, subs, off);
++
++	    if (save_in_use == -1)
++	    {
++		if (REG_MULTI)
++		    sub->list.multi[subidx].start = save_lpos;
++		else
++		    sub->list.line[subidx].start = save_ptr;
++	    }
++	    else
++		sub->in_use = save_in_use;
++	    break;
++
++	case NFA_MCLOSE:
++	    if (nfa_has_zend)
++	    {
++		/* Do not overwrite the position set by \ze. If no \ze
++		 * encountered end will be set in nfa_regtry(). */
++		addstate(l, state->out, subs, off);
++		break;
++	    }
++	case NFA_MCLOSE1:
++	case NFA_MCLOSE2:
++	case NFA_MCLOSE3:
++	case NFA_MCLOSE4:
++	case NFA_MCLOSE5:
++	case NFA_MCLOSE6:
++	case NFA_MCLOSE7:
++	case NFA_MCLOSE8:
++	case NFA_MCLOSE9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZCLOSE:
++	case NFA_ZCLOSE1:
++	case NFA_ZCLOSE2:
++	case NFA_ZCLOSE3:
++	case NFA_ZCLOSE4:
++	case NFA_ZCLOSE5:
++	case NFA_ZCLOSE6:
++	case NFA_ZCLOSE7:
++	case NFA_ZCLOSE8:
++	case NFA_ZCLOSE9:
++#endif
++	case NFA_ZEND:
++	    if (state->c == NFA_ZEND)
++	    {
++		subidx = 0;
++		sub = &subs->norm;
++	    }
++#ifdef FEAT_SYN_HL
++	    else if (state->c >= NFA_ZCLOSE)
++	    {
++		subidx = state->c - NFA_ZCLOSE;
++		sub = &subs->synt;
++	    }
++#endif
++	    else
++	    {
++		subidx = state->c - NFA_MCLOSE;
++		sub = &subs->norm;
++	    }
++
++	    /* We don't fill in gaps here, there must have been an MOPEN that
++	     * has done that. */
++	    save_in_use = sub->in_use;
++	    if (sub->in_use <= subidx)
++		sub->in_use = subidx + 1;
++	    if (REG_MULTI)
++	    {
++		save_lpos = sub->list.multi[subidx].end;
++		if (off == -1)
++		{
++		    sub->list.multi[subidx].end.lnum = reglnum + 1;
++		    sub->list.multi[subidx].end.col = 0;
++		}
++		else
++		{
++		    sub->list.multi[subidx].end.lnum = reglnum;
++		    sub->list.multi[subidx].end.col =
++					  (colnr_T)(reginput - regline + off);
++		}
++	    }
++	    else
++	    {
++		save_ptr = sub->list.line[subidx].end;
++		sub->list.line[subidx].end = reginput + off;
++	    }
++
++	    addstate(l, state->out, subs, off);
++
++	    if (REG_MULTI)
++		sub->list.multi[subidx].end = save_lpos;
++	    else
++		sub->list.line[subidx].end = save_ptr;
++	    sub->in_use = save_in_use;
++	    break;
++    }
++}
++
++/*
++ * Like addstate(), but the new state(s) are put at position "*ip".
++ * Used for zero-width matches, next state to use is the added one.
++ * This makes sure the order of states to be tried does not change, which
++ * matters for alternatives.
++ */
++    static void
++addstate_here(l, state, subs, pim, ip)
++    nfa_list_T		*l;	/* runtime state list */
++    nfa_state_T		*state;	/* state to update */
++    regsubs_T		*subs;	/* pointers to subexpressions */
++    nfa_pim_T		*pim;   /* postponed look-behind match */
++    int			*ip;
++{
++    int tlen = l->n;
++    int count;
++    int listidx = *ip;
++    int i;
++
++    /* first add the state(s) at the end, so that we know how many there are */
++    addstate(l, state, subs, 0);
++
++    /* fill in the "pim" field in the new states */
++    if (pim != NULL)
++	for (i = tlen; i < l->n; ++i)
++	    l->t[i].pim = pim;
++
++    /* when "*ip" was at the end of the list, nothing to do */
++    if (listidx + 1 == tlen)
++	return;
++
++    /* re-order to put the new state at the current position */
++    count = l->n - tlen;
++    if (count == 1)
++    {
++	/* overwrite the current state */
++	l->t[listidx] = l->t[l->n - 1];
++    }
++    else if (count > 1)
++    {
++	/* make space for new states, then move them from the
++	 * end to the current position */
++	mch_memmove(&(l->t[listidx + count]),
++		&(l->t[listidx + 1]),
++		sizeof(nfa_thread_T) * (l->n - listidx - 1));
++	mch_memmove(&(l->t[listidx]),
++		&(l->t[l->n - 1]),
++		sizeof(nfa_thread_T) * count);
++    }
++    --l->n;
++    *ip = listidx - 1;
++}
++
++/*
++ * Check character class "class" against current character c.
++ */
++    static int
++check_char_class(class, c)
++    int		class;
++    int		c;
++{
++    switch (class)
++    {
++	case NFA_CLASS_ALNUM:
++	    if (c >= 1 && c <= 255 && isalnum(c))
++		return OK;
++	    break;
++	case NFA_CLASS_ALPHA:
++	    if (c >= 1 && c <= 255 && isalpha(c))
++		return OK;
++	    break;
++	case NFA_CLASS_BLANK:
++	    if (c == ' ' || c == '\t')
++		return OK;
++	    break;
++	case NFA_CLASS_CNTRL:
++	    if (c >= 1 && c <= 255 && iscntrl(c))
++		return OK;
++	    break;
++	case NFA_CLASS_DIGIT:
++	    if (VIM_ISDIGIT(c))
++		return OK;
++	    break;
++	case NFA_CLASS_GRAPH:
++	    if (c >= 1 && c <= 255 && isgraph(c))
++		return OK;
++	    break;
++	case NFA_CLASS_LOWER:
++	    if (MB_ISLOWER(c))
++		return OK;
++	    break;
++	case NFA_CLASS_PRINT:
++	    if (vim_isprintc(c))
++		return OK;
++	    break;
++	case NFA_CLASS_PUNCT:
++	    if (c >= 1 && c <= 255 && ispunct(c))
++		return OK;
++	    break;
++	case NFA_CLASS_SPACE:
++	    if ((c >= 9 && c <= 13) || (c == ' '))
++		return OK;
++	    break;
++	case NFA_CLASS_UPPER:
++	    if (MB_ISUPPER(c))
++		return OK;
++	    break;
++	case NFA_CLASS_XDIGIT:
++	    if (vim_isxdigit(c))
++		return OK;
++	    break;
++	case NFA_CLASS_TAB:
++	    if (c == '\t')
++		return OK;
++	    break;
++	case NFA_CLASS_RETURN:
++	    if (c == '\r')
++		return OK;
++	    break;
++	case NFA_CLASS_BACKSPACE:
++	    if (c == '\b')
++		return OK;
++	    break;
++	case NFA_CLASS_ESCAPE:
++	    if (c == '\033')
++		return OK;
++	    break;
++
++	default:
++	    /* should not be here :P */
++	    EMSGN("E877: (NFA regexp) Invalid character class: %ld", class);
++	    return FAIL;
++    }
++    return FAIL;
++}
++
++static int match_backref __ARGS((regsub_T *sub, int subidx, int *bytelen));
++
++/*
++ * Check for a match with subexpression "subidx".
++ * Return TRUE if it matches.
++ */
++    static int
++match_backref(sub, subidx, bytelen)
++    regsub_T	*sub;	    /* pointers to subexpressions */
++    int		subidx;
++    int		*bytelen;   /* out: length of match in bytes */
++{
++    int		len;
++
++    if (sub->in_use <= subidx)
++    {
++retempty:
++	/* backref was not set, match an empty string */
++	*bytelen = 0;
++	return TRUE;
++    }
++
++    if (REG_MULTI)
++    {
++	if (sub->list.multi[subidx].start.lnum < 0
++				       || sub->list.multi[subidx].end.lnum < 0)
++	    goto retempty;
++	/* TODO: line breaks */
++	len = sub->list.multi[subidx].end.col
++					 - sub->list.multi[subidx].start.col;
++	if (cstrncmp(regline + sub->list.multi[subidx].start.col,
++							reginput, &len) == 0)
++	{
++	    *bytelen = len;
++	    return TRUE;
++	}
++    }
++    else
++    {
++	if (sub->list.line[subidx].start == NULL
++					|| sub->list.line[subidx].end == NULL)
++	    goto retempty;
++	len = (int)(sub->list.line[subidx].end - sub->list.line[subidx].start);
++	if (cstrncmp(sub->list.line[subidx].start, reginput, &len) == 0)
++	{
++	    *bytelen = len;
++	    return TRUE;
++	}
++    }
++    return FALSE;
++}
++
++#ifdef FEAT_SYN_HL
++
++static int match_zref __ARGS((int subidx, int *bytelen));
++
++/*
++ * Check for a match with \z subexpression "subidx".
++ * Return TRUE if it matches.
++ */
++    static int
++match_zref(subidx, bytelen)
++    int		subidx;
++    int		*bytelen;   /* out: length of match in bytes */
++{
++    int		len;
++
++    cleanup_zsubexpr();
++    if (re_extmatch_in == NULL || re_extmatch_in->matches[subidx] == NULL)
++    {
++	/* backref was not set, match an empty string */
++	*bytelen = 0;
++	return TRUE;
++    }
++
++    len = (int)STRLEN(re_extmatch_in->matches[subidx]);
++    if (cstrncmp(re_extmatch_in->matches[subidx], reginput, &len) == 0)
++    {
++	*bytelen = len;
++	return TRUE;
++    }
++    return FALSE;
++}
++#endif
++
++/*
++ * Save list IDs for all NFA states of "prog" into "list".
++ * Also reset the IDs to zero.
++ * Only used for the recursive value lastlist[1].
++ */
++    static void
++nfa_save_listids(prog, list)
++    nfa_regprog_T   *prog;
++    int		    *list;
++{
++    int		    i;
++    nfa_state_T	    *p;
++
++    /* Order in the list is reverse, it's a bit faster that way. */
++    p = &prog->state[0];
++    for (i = prog->nstate; --i >= 0; )
++    {
++	list[i] = p->lastlist[1];
++	p->lastlist[1] = 0;
++	++p;
++    }
++}
++
++/*
++ * Restore list IDs from "list" to all NFA states.
++ */
++    static void
++nfa_restore_listids(prog, list)
++    nfa_regprog_T   *prog;
++    int		    *list;
++{
++    int		    i;
++    nfa_state_T	    *p;
++
++    p = &prog->state[0];
++    for (i = prog->nstate; --i >= 0; )
++    {
++	p->lastlist[1] = list[i];
++	++p;
++    }
++}
++
++    static int
++nfa_re_num_cmp(val, op, pos)
++    long_u	val;
++    int		op;
++    long_u	pos;
++{
++    if (op == 1) return pos > val;
++    if (op == 2) return pos < val;
++    return val == pos;
++}
++
++static int recursive_regmatch __ARGS((nfa_state_T *state, nfa_regprog_T *prog, regsubs_T *submatch, regsubs_T *m, int **listids));
++static int nfa_regmatch __ARGS((nfa_regprog_T *prog, nfa_state_T *start, regsubs_T *submatch, regsubs_T *m));
++
++/*
++ * Recursively call nfa_regmatch()
++ */
++    static int
++recursive_regmatch(state, prog, submatch, m, listids)
++    nfa_state_T	    *state;
++    nfa_regprog_T   *prog;
++    regsubs_T	    *submatch;
++    regsubs_T	    *m;
++    int		    **listids;
++{
++    char_u	*save_reginput = reginput;
++    char_u	*save_regline = regline;
++    int		save_reglnum = reglnum;
++    int		save_nfa_match = nfa_match;
++    int		save_nfa_listid = nfa_listid;
++    save_se_T   *save_nfa_endp = nfa_endp;
++    save_se_T   endpos;
++    save_se_T   *endposp = NULL;
++    int		result;
++    int		need_restore = FALSE;
++
++    if (state->c == NFA_START_INVISIBLE_BEFORE
++        || state->c == NFA_START_INVISIBLE_BEFORE_NEG)
++    {
++	/* The recursive match must end at the current position. */
++	endposp = &endpos;
++	if (REG_MULTI)
++	{
++	    endpos.se_u.pos.col = (int)(reginput - regline);
++	    endpos.se_u.pos.lnum = reglnum;
++	}
++	else
++	    endpos.se_u.ptr = reginput;
++
++	/* Go back the specified number of bytes, or as far as the
++	 * start of the previous line, to try matching "\@<=" or
++	 * not matching "\@<!".
++	 * TODO: This is very inefficient! Would be better to
++	 * first check for a match with what follows. */
++	if (state->val <= 0)
++	{
++	    if (REG_MULTI)
++	    {
++		regline = reg_getline(--reglnum);
++		if (regline == NULL)
++		    /* can't go before the first line */
++		    regline = reg_getline(++reglnum);
++	    }
++	    reginput = regline;
++	}
++	else
++	{
++	    if (REG_MULTI && (int)(reginput - regline) < state->val)
++	    {
++		/* Not enough bytes in this line, go to end of
++		 * previous line. */
++		regline = reg_getline(--reglnum);
++		if (regline == NULL)
++		{
++		    /* can't go before the first line */
++		    regline = reg_getline(++reglnum);
++		    reginput = regline;
++		}
++		else
++		    reginput = regline + STRLEN(regline);
++	    }
++	    if ((int)(reginput - regline) >= state->val)
++	    {
++		reginput -= state->val;
++#ifdef FEAT_MBYTE
++		if (has_mbyte)
++		    reginput -= mb_head_off(regline, reginput);
++#endif
++	    }
++	    else
++		reginput = regline;
++	}
++    }
++
++#ifdef ENABLE_LOG
++    if (log_fd != stderr)
++	fclose(log_fd);
++    log_fd = NULL;
++#endif
++    /* Have to clear the lastlist field of the NFA nodes, so that
++     * nfa_regmatch() and addstate() can run properly after recursion. */
++    if (nfa_ll_index == 1)
++    {
++	/* Already calling nfa_regmatch() recursively.  Save the lastlist[1]
++	 * values and clear them. */
++	if (*listids == NULL)
++	{
++	    *listids = (int *)lalloc(sizeof(int) * nstate, TRUE);
++	    if (*listids == NULL)
++	    {
++		EMSG(_("E878: (NFA) Could not allocate memory for branch traversal!"));
++		return 0;
++	    }
++	}
++	nfa_save_listids(prog, *listids);
++	need_restore = TRUE;
++	/* any value of nfa_listid will do */
++    }
++    else
++    {
++	/* First recursive nfa_regmatch() call, switch to the second lastlist
++	 * entry.  Make sure nfa_listid is different from a previous recursive
++	 * call, because some states may still have this ID. */
++	++nfa_ll_index;
++	if (nfa_listid <= nfa_alt_listid)
++	    nfa_listid = nfa_alt_listid;
++    }
++
++    /* Call nfa_regmatch() to check if the current concat matches at this
++     * position. The concat ends with the node NFA_END_INVISIBLE */
++    nfa_endp = endposp;
++    result = nfa_regmatch(prog, state->out, submatch, m);
++
++    if (need_restore)
++	nfa_restore_listids(prog, *listids);
++    else
++    {
++	--nfa_ll_index;
++	nfa_alt_listid = nfa_listid;
++    }
++
++    /* restore position in input text */
++    reginput = save_reginput;
++    regline = save_regline;
++    reglnum = save_reglnum;
++    nfa_match = save_nfa_match;
++    nfa_endp = save_nfa_endp;
++    nfa_listid = save_nfa_listid;
++
++#ifdef ENABLE_LOG
++    log_fd = fopen(NFA_REGEXP_RUN_LOG, "a");
++    if (log_fd != NULL)
++    {
++	fprintf(log_fd, "****************************\n");
++	fprintf(log_fd, "FINISHED RUNNING nfa_regmatch() recursively\n");
++	fprintf(log_fd, "MATCH = %s\n", result == TRUE ? "OK" : "FALSE");
++	fprintf(log_fd, "****************************\n");
++    }
++    else
++    {
++	EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
++	log_fd = stderr;
++    }
++#endif
++
++    return result;
++}
++
++static int failure_chance __ARGS((nfa_state_T *state, int depth));
++
++/*
++ * Estimate the chance of a match with "state" failing.
++ * NFA_ANY: 1
++ * specific character: 99
++ */
++    static int
++failure_chance(state, depth)
++    nfa_state_T *state;
++    int		depth;
++{
++    int c = state->c;
++    int l, r;
++
++    /* detect looping */
++    if (depth > 4)
++	return 1;
++
++    switch (c)
++    {
++	case NFA_SPLIT:
++	    if (state->out->c == NFA_SPLIT || state->out1->c == NFA_SPLIT)
++		/* avoid recursive stuff */
++		return 1;
++	    /* two alternatives, use the lowest failure chance */
++	    l = failure_chance(state->out, depth + 1);
++	    r = failure_chance(state->out1, depth + 1);
++	    return l < r ? l : r;
++
++	case NFA_ANY:
++	    /* matches anything, unlikely to fail */
++	    return 1;
++	case NFA_MATCH:
++	    /* empty match works always */
++	    return 0;
++
++	case NFA_BOL:
++	case NFA_EOL:
++	case NFA_BOF:
++	case NFA_EOF:
++	case NFA_NEWL:
++	    return 99;
++
++	case NFA_BOW:
++	case NFA_EOW:
++	    return 90;
++
++	case NFA_MOPEN:
++	case NFA_MOPEN1:
++	case NFA_MOPEN2:
++	case NFA_MOPEN3:
++	case NFA_MOPEN4:
++	case NFA_MOPEN5:
++	case NFA_MOPEN6:
++	case NFA_MOPEN7:
++	case NFA_MOPEN8:
++	case NFA_MOPEN9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZOPEN:
++	case NFA_ZOPEN1:
++	case NFA_ZOPEN2:
++	case NFA_ZOPEN3:
++	case NFA_ZOPEN4:
++	case NFA_ZOPEN5:
++	case NFA_ZOPEN6:
++	case NFA_ZOPEN7:
++	case NFA_ZOPEN8:
++	case NFA_ZOPEN9:
++	case NFA_ZCLOSE:
++	case NFA_ZCLOSE1:
++	case NFA_ZCLOSE2:
++	case NFA_ZCLOSE3:
++	case NFA_ZCLOSE4:
++	case NFA_ZCLOSE5:
++	case NFA_ZCLOSE6:
++	case NFA_ZCLOSE7:
++	case NFA_ZCLOSE8:
++	case NFA_ZCLOSE9:
++#endif
++	case NFA_NOPEN:
++	case NFA_MCLOSE:
++	case NFA_MCLOSE1:
++	case NFA_MCLOSE2:
++	case NFA_MCLOSE3:
++	case NFA_MCLOSE4:
++	case NFA_MCLOSE5:
++	case NFA_MCLOSE6:
++	case NFA_MCLOSE7:
++	case NFA_MCLOSE8:
++	case NFA_MCLOSE9:
++	case NFA_NCLOSE:
++	    return failure_chance(state->out, depth + 1);
++
++	case NFA_BACKREF1:
++	case NFA_BACKREF2:
++	case NFA_BACKREF3:
++	case NFA_BACKREF4:
++	case NFA_BACKREF5:
++	case NFA_BACKREF6:
++	case NFA_BACKREF7:
++	case NFA_BACKREF8:
++	case NFA_BACKREF9:
++#ifdef FEAT_SYN_HL
++	case NFA_ZREF1:
++	case NFA_ZREF2:
++	case NFA_ZREF3:
++	case NFA_ZREF4:
++	case NFA_ZREF5:
++	case NFA_ZREF6:
++	case NFA_ZREF7:
++	case NFA_ZREF8:
++	case NFA_ZREF9:
++#endif
++	    /* backreferences don't match in many places */
++	    return 94;
++
++	case NFA_LNUM_GT:
++	case NFA_LNUM_LT:
++	case NFA_COL_GT:
++	case NFA_COL_LT:
++	case NFA_VCOL_GT:
++	case NFA_VCOL_LT:
++	case NFA_MARK_GT:
++	case NFA_MARK_LT:
++	case NFA_VISUAL:
++	    /* before/after positions don't match very often */
++	    return 85;
++
++	case NFA_LNUM:
++	    return 90;
++
++	case NFA_CURSOR:
++	case NFA_COL:
++	case NFA_VCOL:
++	case NFA_MARK:
++	    /* specific positions rarely match */
++	    return 98;
++
++	case NFA_COMPOSING:
++	    return 95;
++
++	default:
++	    if (c > 0)
++		/* character match fails often */
++		return 95;
++    }
++
++    /* something else, includes character classes */
++    return 50;
++}
++
++/*
++ * Main matching routine.
++ *
++ * Run NFA to determine whether it matches reginput.
++ *
++ * When "nfa_endp" is not NULL it is a required end-of-match position.
++ *
++ * Return TRUE if there is a match, FALSE otherwise.
++ * Note: Caller must ensure that: start != NULL.
++ */
++    static int
++nfa_regmatch(prog, start, submatch, m)
++    nfa_regprog_T	*prog;
++    nfa_state_T		*start;
++    regsubs_T		*submatch;
++    regsubs_T		*m;
++{
++    int		result;
++    int		size = 0;
++    int		flag = 0;
++    int		go_to_nextline = FALSE;
++    nfa_thread_T *t;
++    nfa_list_T	list[2];
++    int		listidx;
++    nfa_list_T	*thislist;
++    nfa_list_T	*nextlist;
++    int		*listids = NULL;
++    nfa_state_T *add_state;
++    int		 add_count;
++    int		 add_off;
++    garray_T	pimlist;
++#ifdef NFA_REGEXP_DEBUG_LOG
++    FILE	*debug = fopen(NFA_REGEXP_DEBUG_LOG, "a");
++
++    if (debug == NULL)
++    {
++	EMSG2(_("(NFA) COULD NOT OPEN %s !"), NFA_REGEXP_DEBUG_LOG);
++	return FALSE;
++    }
++#endif
++    nfa_match = FALSE;
++    ga_init2(&pimlist, sizeof(nfa_pim_T), 5);
++
++    /* Allocate memory for the lists of nodes. */
++    size = (nstate + 1) * sizeof(nfa_thread_T);
++    list[0].t = (nfa_thread_T *)lalloc(size, TRUE);
++    list[0].len = nstate + 1;
++    list[1].t = (nfa_thread_T *)lalloc(size, TRUE);
++    list[1].len = nstate + 1;
++    if (list[0].t == NULL || list[1].t == NULL)
++	goto theend;
++
++#ifdef ENABLE_LOG
++    log_fd = fopen(NFA_REGEXP_RUN_LOG, "a");
++    if (log_fd != NULL)
++    {
++	fprintf(log_fd, "**********************************\n");
++	nfa_set_code(start->c);
++	fprintf(log_fd, " RUNNING nfa_regmatch() starting with state %d, code %s\n",
++	abs(start->id), code);
++	fprintf(log_fd, "**********************************\n");
++    }
++    else
++    {
++	EMSG(_("Could not open temporary log file for writing, displaying on stderr ... "));
++	log_fd = stderr;
++    }
++#endif
++
++    thislist = &list[0];
++    thislist->n = 0;
++    nextlist = &list[1];
++    nextlist->n = 0;
++#ifdef ENABLE_LOG
++    fprintf(log_fd, "(---) STARTSTATE\n");
++#endif
++    thislist->id = nfa_listid + 1;
++    addstate(thislist, start, m, 0);
++
++#define	ADD_STATE_IF_MATCH(state)			\
++    if (result) {					\
++	add_state = state->out;				\
++	add_off = clen;					\
++    }
++
++    /*
++     * Run for each character.
++     */
++    for (;;)
++    {
++	int	curc;
++	int	clen;
++
++#ifdef FEAT_MBYTE
++	if (has_mbyte)
++	{
++	    curc = (*mb_ptr2char)(reginput);
++	    clen = (*mb_ptr2len)(reginput);
++	}
++	else
++#endif
++	{
++	    curc = *reginput;
++	    clen = 1;
++	}
++	if (curc == NUL)
++	{
++	    clen = 0;
++	    go_to_nextline = FALSE;
++	}
++
++	/* swap lists */
++	thislist = &list[flag];
++	nextlist = &list[flag ^= 1];
++	nextlist->n = 0;	    /* clear nextlist */
++	++nfa_listid;
++	thislist->id = nfa_listid;
++	nextlist->id = nfa_listid + 1;
++
++	pimlist.ga_len = 0;
++
++#ifdef ENABLE_LOG
++	fprintf(log_fd, "------------------------------------------\n");
++	fprintf(log_fd, ">>> Reginput is \"%s\"\n", reginput);
++	fprintf(log_fd, ">>> Advanced one character ... Current char is %c (code %d) \n", curc, (int)curc);
++	fprintf(log_fd, ">>> Thislist has %d states available: ", thislist->n);
++	{
++	    int i;
++
++	    for (i = 0; i < thislist->n; i++)
++		fprintf(log_fd, "%d  ", abs(thislist->t[i].state->id));
++	}
++	fprintf(log_fd, "\n");
++#endif
++
++#ifdef NFA_REGEXP_DEBUG_LOG
++	fprintf(debug, "\n-------------------\n");
++#endif
++	/*
++	 * If the state lists are empty we can stop.
++	 */
++	if (thislist->n == 0)
++	    break;
++
++	/* compute nextlist */
++	for (listidx = 0; listidx < thislist->n; ++listidx)
++	{
++	    t = &thislist->t[listidx];
++
++#ifdef NFA_REGEXP_DEBUG_LOG
++	    nfa_set_code(t->state->c);
++	    fprintf(debug, "%s, ", code);
++#endif
++#ifdef ENABLE_LOG
++	    {
++		int col;
++
++		if (t->subs.norm.in_use <= 0)
++		    col = -1;
++		else if (REG_MULTI)
++		    col = t->subs.norm.list.multi[0].start.col;
++		else
++		    col = (int)(t->subs.norm.list.line[0].start - regline);
++		nfa_set_code(t->state->c);
++		fprintf(log_fd, "(%d) char %d %s (start col %d) ... \n",
++			abs(t->state->id), (int)t->state->c, code, col);
++	    }
++#endif
++
++	    /*
++	     * Handle the possible codes of the current state.
++	     * The most important is NFA_MATCH.
++	     */
++	    add_state = NULL;
++	    add_count = 0;
++	    switch (t->state->c)
++	    {
++	    case NFA_MATCH:
++	      {
++		nfa_match = TRUE;
++		copy_sub(&submatch->norm, &t->subs.norm);
++#ifdef FEAT_SYN_HL
++		if (nfa_has_zsubexpr)
++		    copy_sub(&submatch->synt, &t->subs.synt);
++#endif
++#ifdef ENABLE_LOG
++		log_subsexpr(&t->subs);
++#endif
++		/* Found the left-most longest match, do not look at any other
++		 * states at this position.  When the list of states is going
++		 * to be empty quit without advancing, so that "reginput" is
++		 * correct. */
++		if (nextlist->n == 0)
++		    clen = 0;
++		goto nextchar;
++	      }
++
++	    case NFA_END_INVISIBLE:
++	    case NFA_END_INVISIBLE_NEG:
++	    case NFA_END_PATTERN:
++		/*
++		 * This is only encountered after a NFA_START_INVISIBLE or
++		 * NFA_START_INVISIBLE_BEFORE node.
++		 * They surround a zero-width group, used with "\@=", "\&",
++		 * "\@!", "\@<=" and "\@<!".
++		 * If we got here, it means that the current "invisible" group
++		 * finished successfully, so return control to the parent
++		 * nfa_regmatch().  For a look-behind match only when it ends
++		 * in the position in "nfa_endp".
++		 * Submatches are stored in *m, and used in the parent call.
++		 */
++#ifdef ENABLE_LOG
++		if (nfa_endp != NULL)
++		{
++		    if (REG_MULTI)
++			fprintf(log_fd, "Current lnum: %d, endp lnum: %d; current col: %d, endp col: %d\n",
++				(int)reglnum,
++				(int)nfa_endp->se_u.pos.lnum,
++				(int)(reginput - regline),
++				nfa_endp->se_u.pos.col);
++		    else
++			fprintf(log_fd, "Current col: %d, endp col: %d\n",
++				(int)(reginput - regline),
++				(int)(nfa_endp->se_u.ptr - reginput));
++		}
++#endif
++		/* If "nfa_endp" is set it's only a match if it ends at
++		 * "nfa_endp" */
++		if (nfa_endp != NULL && (REG_MULTI
++			? (reglnum != nfa_endp->se_u.pos.lnum
++			    || (int)(reginput - regline)
++						!= nfa_endp->se_u.pos.col)
++			: reginput != nfa_endp->se_u.ptr))
++		    break;
++
++		/* do not set submatches for \@! */
++		if (t->state->c != NFA_END_INVISIBLE_NEG)
++		{
++		    copy_sub(&m->norm, &t->subs.norm);
++#ifdef FEAT_SYN_HL
++		    if (nfa_has_zsubexpr)
++			copy_sub(&m->synt, &t->subs.synt);
++#endif
++		}
++#ifdef ENABLE_LOG
++		fprintf(log_fd, "Match found:\n");
++		log_subsexpr(m);
++#endif
++		nfa_match = TRUE;
++		break;
++
++	    case NFA_START_INVISIBLE:
++	    case NFA_START_INVISIBLE_NEG:
++	    case NFA_START_INVISIBLE_BEFORE:
++	    case NFA_START_INVISIBLE_BEFORE_NEG:
++		{
++		    nfa_pim_T *pim;
++		    int cout = t->state->out1->out->c;
++
++		    /* Do it directly when what follows is possibly end of
++		     * match (closing paren).
++		     * Postpone when it is \@<= or \@<!, these are expensive.
++		     * TODO: remove the check for t->pim and check multiple
++		     * where it's used?
++		     * Otherwise first do the one that has the highest chance
++		     * of failing. */
++		    if ((cout >= NFA_MCLOSE && cout <= NFA_MCLOSE9)
++#ifdef FEAT_SYN_HL
++			    || (cout >= NFA_ZCLOSE && cout <= NFA_ZCLOSE9)
++#endif
++			    || cout == NFA_NCLOSE
++			    || t->pim != NULL
++			    || (t->state->c != NFA_START_INVISIBLE_BEFORE
++			        && t->state->c != NFA_START_INVISIBLE_BEFORE_NEG
++				&& failure_chance(t->state->out1->out, 0)
++					  < failure_chance(t->state->out, 0)))
++		    {
++			/*
++			 * First try matching the invisible match, then what
++			 * follows.
++			 */
++			result = recursive_regmatch(t->state, prog,
++						       submatch, m, &listids);
++
++			/* for \@! and \@<! it is a match when the result is
++			 * FALSE */
++			if (result != (t->state->c == NFA_START_INVISIBLE_NEG
++			            || t->state->c
++					   == NFA_START_INVISIBLE_BEFORE_NEG))
++			{
++			    /* Copy submatch info from the recursive call */
++			    copy_sub_off(&t->subs.norm, &m->norm);
++#ifdef FEAT_SYN_HL
++			    if (nfa_has_zsubexpr)
++				copy_sub_off(&t->subs.synt, &m->synt);
++#endif
++
++			    /* t->state->out1 is the corresponding
++			     * END_INVISIBLE node; Add its out to the current
++			     * list (zero-width match). */
++			    addstate_here(thislist, t->state->out1->out,
++						  &t->subs, t->pim, &listidx);
++			}
++		    }
++		    else
++		    {
++			/*
++			 * First try matching what follows at the current
++			 * position.  Only if a match is found, addstate() is
++			 * called, then verify the invisible match matches.
++			 * Add a nfa_pim_T to the following states, it
++			 * contains info about the invisible match.
++			 */
++			if (ga_grow(&pimlist, 1) == FAIL)
++			    goto theend;
++			pim = (nfa_pim_T *)pimlist.ga_data + pimlist.ga_len;
++			++pimlist.ga_len;
++			pim->state = t->state;
++			pim->pim = NULL;
++			pim->result = NFA_PIM_TODO;
++
++			/* t->state->out1 is the corresponding END_INVISIBLE
++			 * node; Add its out to the current list (zero-width
++			 * match). */
++			addstate_here(thislist, t->state->out1->out, &t->subs,
++							       pim, &listidx);
++		    }
++		}
++		break;
++
++	    case NFA_START_PATTERN:
++	      {
++		nfa_state_T *skip = NULL;
++#ifdef ENABLE_LOG
++		int	    skip_lid = 0;
++#endif
++
++		/* There is no point in trying to match the pattern if the
++		 * output state is not going to be added to the list. */
++		if (state_in_list(nextlist, t->state->out1->out, &t->subs))
++		{
++		    skip = t->state->out1->out;
++#ifdef ENABLE_LOG
++		    skip_lid = nextlist->id;
++#endif
++		}
++		else if (state_in_list(nextlist,
++					  t->state->out1->out->out, &t->subs))
++		{
++		    skip = t->state->out1->out->out;
++#ifdef ENABLE_LOG
++		    skip_lid = nextlist->id;
++#endif
++		}
++		else if(state_in_list(thislist,
++					  t->state->out1->out->out, &t->subs))
++		{
++		    skip = t->state->out1->out->out;
++#ifdef ENABLE_LOG
++		    skip_lid = thislist->id;
++#endif
++		}
++		if (skip != NULL)
++		{
++#ifdef ENABLE_LOG
++		    nfa_set_code(skip->c);
++		    fprintf(log_fd, "> Not trying to match pattern, output state %d is already in list %d. char %d: %s\n",
++			    abs(skip->id), skip_lid, skip->c, code);
++#endif
++		    break;
++		}
++
++		/* First try matching the pattern. */
++		result = recursive_regmatch(t->state, prog,
++						       submatch, m, &listids);
++		if (result)
++		{
++		    int bytelen;
++
++#ifdef ENABLE_LOG
++		    fprintf(log_fd, "NFA_START_PATTERN matches:\n");
++		    log_subsexpr(m);
++#endif
++		    /* Copy submatch info from the recursive call */
++		    copy_sub_off(&t->subs.norm, &m->norm);
++#ifdef FEAT_SYN_HL
++		    if (nfa_has_zsubexpr)
++			copy_sub_off(&t->subs.synt, &m->synt);
++#endif
++		    /* Now we need to skip over the matched text and then
++		     * continue with what follows. */
++		    if (REG_MULTI)
++			/* TODO: multi-line match */
++			bytelen = m->norm.list.multi[0].end.col
++						  - (int)(reginput - regline);
++		    else
++			bytelen = (int)(m->norm.list.line[0].end - reginput);
++
++#ifdef ENABLE_LOG
++		    fprintf(log_fd, "NFA_START_PATTERN length: %d\n", bytelen);
++#endif
++		    if (bytelen == 0)
++		    {
++			/* empty match, output of corresponding
++			 * NFA_END_PATTERN/NFA_SKIP to be used at current
++			 * position */
++			addstate_here(thislist, t->state->out1->out->out,
++						  &t->subs, t->pim, &listidx);
++		    }
++		    else if (bytelen <= clen)
++		    {
++			/* match current character, output of corresponding
++			 * NFA_END_PATTERN to be used at next position. */
++			add_state = t->state->out1->out->out;
++			add_off = clen;
++		    }
++		    else
++		    {
++			/* skip over the matched characters, set character
++			 * count in NFA_SKIP */
++			add_state = t->state->out1->out;
++			add_off = bytelen;
++			add_count = bytelen - clen;
++		    }
++		}
++		break;
++	      }
++
++	    case NFA_BOL:
++		if (reginput == regline)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_EOL:
++		if (curc == NUL)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_BOW:
++		result = TRUE;
++
++		if (curc == NUL)
++		    result = FALSE;
++#ifdef FEAT_MBYTE
++		else if (has_mbyte)
++		{
++		    int this_class;
++
++		    /* Get class of current and previous char (if it exists). */
++		    this_class = mb_get_class_buf(reginput, reg_buf);
++		    if (this_class <= 1)
++			result = FALSE;
++		    else if (reg_prev_class() == this_class)
++			result = FALSE;
++		}
++#endif
++		else if (!vim_iswordc_buf(curc, reg_buf)
++			   || (reginput > regline
++				   && vim_iswordc_buf(reginput[-1], reg_buf)))
++		    result = FALSE;
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_EOW:
++		result = TRUE;
++		if (reginput == regline)
++		    result = FALSE;
++#ifdef FEAT_MBYTE
++		else if (has_mbyte)
++		{
++		    int this_class, prev_class;
++
++		    /* Get class of current and previous char (if it exists). */
++		    this_class = mb_get_class_buf(reginput, reg_buf);
++		    prev_class = reg_prev_class();
++		    if (this_class == prev_class
++					|| prev_class == 0 || prev_class == 1)
++			result = FALSE;
++		}
++#endif
++		else if (!vim_iswordc_buf(reginput[-1], reg_buf)
++			|| (reginput[0] != NUL
++					   && vim_iswordc_buf(curc, reg_buf)))
++		    result = FALSE;
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_BOF:
++		if (reglnum == 0 && reginput == regline
++					&& (!REG_MULTI || reg_firstlnum == 1))
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_EOF:
++		if (reglnum == reg_maxline && curc == NUL)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++#ifdef FEAT_MBYTE
++	    case NFA_COMPOSING:
++	    {
++		int	    mc = curc;
++		int	    len = 0;
++		nfa_state_T *end;
++		nfa_state_T *sta;
++		int	    cchars[MAX_MCO];
++		int	    ccount = 0;
++		int	    j;
++
++		sta = t->state->out;
++		len = 0;
++		if (utf_iscomposing(sta->c))
++		{
++		    /* Only match composing character(s), ignore base
++		     * character.  Used for ".{composing}" and "{composing}"
++		     * (no preceding character). */
++		    len += mb_char2len(mc);
++		}
++		if (ireg_icombine && len == 0)
++		{
++		    /* If \Z was present, then ignore composing characters.
++		     * When ignoring the base character this always matches. */
++		    if (len == 0 && sta->c != curc)
++			result = FAIL;
++		    else
++			result = OK;
++		    while (sta->c != NFA_END_COMPOSING)
++			sta = sta->out;
++		}
++
++		/* Check base character matches first, unless ignored. */
++		else if (len > 0 || mc == sta->c)
++		{
++		    if (len == 0)
++		    {
++			len += mb_char2len(mc);
++			sta = sta->out;
++		    }
++
++		    /* We don't care about the order of composing characters.
++		     * Get them into cchars[] first. */
++		    while (len < clen)
++		    {
++			mc = mb_ptr2char(reginput + len);
++			cchars[ccount++] = mc;
++			len += mb_char2len(mc);
++			if (ccount == MAX_MCO)
++			    break;
++		    }
++
++		    /* Check that each composing char in the pattern matches a
++		     * composing char in the text.  We do not check if all
++		     * composing chars are matched. */
++		    result = OK;
++		    while (sta->c != NFA_END_COMPOSING)
++		    {
++			for (j = 0; j < ccount; ++j)
++			    if (cchars[j] == sta->c)
++				break;
++			if (j == ccount)
++			{
++			    result = FAIL;
++			    break;
++			}
++			sta = sta->out;
++		    }
++		}
++		else
++		    result = FAIL;
++
++		end = t->state->out1;	    /* NFA_END_COMPOSING */
++		ADD_STATE_IF_MATCH(end);
++		break;
++	    }
++#endif
++
++	    case NFA_NEWL:
++		if (curc == NUL && !reg_line_lbr && REG_MULTI
++						    && reglnum <= reg_maxline)
++		{
++		    go_to_nextline = TRUE;
++		    /* Pass -1 for the offset, which means taking the position
++		     * at the start of the next line. */
++		    add_state = t->state->out;
++		    add_off = -1;
++		}
++		else if (curc == '\n' && reg_line_lbr)
++		{
++		    /* match \n as if it is an ordinary character */
++		    add_state = t->state->out;
++		    add_off = 1;
++		}
++		break;
++
++	    case NFA_START_COLL:
++	    case NFA_START_NEG_COLL:
++	      {
++		/* What follows is a list of characters, until NFA_END_COLL.
++		 * One of them must match or none of them must match. */
++		nfa_state_T	*state;
++		int		result_if_matched;
++		int		c1, c2;
++
++		/* Never match EOL. If it's part of the collection it is added
++		 * as a separate state with an OR. */
++		if (curc == NUL)
++		    break;
++
++		state = t->state->out;
++		result_if_matched = (t->state->c == NFA_START_COLL);
++		for (;;)
++		{
++		    if (state->c == NFA_END_COLL)
++		    {
++			result = !result_if_matched;
++			break;
++		    }
++		    if (state->c == NFA_RANGE_MIN)
++		    {
++			c1 = state->val;
++			state = state->out; /* advance to NFA_RANGE_MAX */
++			c2 = state->val;
++#ifdef ENABLE_LOG
++			fprintf(log_fd, "NFA_RANGE_MIN curc=%d c1=%d c2=%d\n",
++				curc, c1, c2);
++#endif
++			if (curc >= c1 && curc <= c2)
++			{
++			    result = result_if_matched;
++			    break;
++			}
++			if (ireg_ic)
++			{
++			    int curc_low = MB_TOLOWER(curc);
++			    int done = FALSE;
++
++			    for ( ; c1 <= c2; ++c1)
++				if (MB_TOLOWER(c1) == curc_low)
++				{
++				    result = result_if_matched;
++				    done = TRUE;
++				    break;
++				}
++			    if (done)
++				break;
++			}
++		    }
++		    else if (state->c < 0 ? check_char_class(state->c, curc)
++			        : (curc == state->c
++				   || (ireg_ic && MB_TOLOWER(curc)
++						    == MB_TOLOWER(state->c))))
++		    {
++			result = result_if_matched;
++			break;
++		    }
++		    state = state->out;
++		}
++		if (result)
++		{
++		    /* next state is in out of the NFA_END_COLL, out1 of
++		     * START points to the END state */
++		    add_state = t->state->out1->out;
++		    add_off = clen;
++		}
++		break;
++	      }
++
++	    case NFA_ANY:
++		/* Any char except '\0', (end of input) does not match. */
++		if (curc > 0)
++		{
++		    add_state = t->state->out;
++		    add_off = clen;
++		}
++		break;
++
++	    /*
++	     * Character classes like \a for alpha, \d for digit etc.
++	     */
++	    case NFA_IDENT:	/*  \i	*/
++		result = vim_isIDc(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_SIDENT:	/*  \I	*/
++		result = !VIM_ISDIGIT(curc) && vim_isIDc(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_KWORD:	/*  \k	*/
++		result = vim_iswordp_buf(reginput, reg_buf);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_SKWORD:	/*  \K	*/
++		result = !VIM_ISDIGIT(curc)
++					&& vim_iswordp_buf(reginput, reg_buf);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_FNAME:	/*  \f	*/
++		result = vim_isfilec(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_SFNAME:	/*  \F	*/
++		result = !VIM_ISDIGIT(curc) && vim_isfilec(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_PRINT:	/*  \p	*/
++		result = ptr2cells(reginput) == 1;
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_SPRINT:	/*  \P	*/
++		result = !VIM_ISDIGIT(curc) && ptr2cells(reginput) == 1;
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_WHITE:	/*  \s	*/
++		result = vim_iswhite(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NWHITE:	/*  \S	*/
++		result = curc != NUL && !vim_iswhite(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_DIGIT:	/*  \d	*/
++		result = ri_digit(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NDIGIT:	/*  \D	*/
++		result = curc != NUL && !ri_digit(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_HEX:	/*  \x	*/
++		result = ri_hex(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NHEX:	/*  \X	*/
++		result = curc != NUL && !ri_hex(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_OCTAL:	/*  \o	*/
++		result = ri_octal(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NOCTAL:	/*  \O	*/
++		result = curc != NUL && !ri_octal(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_WORD:	/*  \w	*/
++		result = ri_word(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NWORD:	/*  \W	*/
++		result = curc != NUL && !ri_word(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_HEAD:	/*  \h	*/
++		result = ri_head(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NHEAD:	/*  \H	*/
++		result = curc != NUL && !ri_head(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_ALPHA:	/*  \a	*/
++		result = ri_alpha(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NALPHA:	/*  \A	*/
++		result = curc != NUL && !ri_alpha(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_LOWER:	/*  \l	*/
++		result = ri_lower(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NLOWER:	/*  \L	*/
++		result = curc != NUL && !ri_lower(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_UPPER:	/*  \u	*/
++		result = ri_upper(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_NUPPER:	/* \U	*/
++		result = curc != NUL && !ri_upper(curc);
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++
++	    case NFA_BACKREF1:
++	    case NFA_BACKREF2:
++	    case NFA_BACKREF3:
++	    case NFA_BACKREF4:
++	    case NFA_BACKREF5:
++	    case NFA_BACKREF6:
++	    case NFA_BACKREF7:
++	    case NFA_BACKREF8:
++	    case NFA_BACKREF9:
++#ifdef FEAT_SYN_HL
++	    case NFA_ZREF1:
++	    case NFA_ZREF2:
++	    case NFA_ZREF3:
++	    case NFA_ZREF4:
++	    case NFA_ZREF5:
++	    case NFA_ZREF6:
++	    case NFA_ZREF7:
++	    case NFA_ZREF8:
++	    case NFA_ZREF9:
++#endif
++		/* \1 .. \9  \z1 .. \z9 */
++	      {
++		int subidx;
++		int bytelen;
++
++		if (t->state->c <= NFA_BACKREF9)
++		{
++		    subidx = t->state->c - NFA_BACKREF1 + 1;
++		    result = match_backref(&t->subs.norm, subidx, &bytelen);
++		}
++#ifdef FEAT_SYN_HL
++		else
++		{
++		    subidx = t->state->c - NFA_ZREF1 + 1;
++		    result = match_zref(subidx, &bytelen);
++		}
++#endif
++
++		if (result)
++		{
++		    if (bytelen == 0)
++		    {
++			/* empty match always works, output of NFA_SKIP to be
++			 * used next */
++			addstate_here(thislist, t->state->out->out, &t->subs,
++							    t->pim, &listidx);
++		    }
++		    else if (bytelen <= clen)
++		    {
++			/* match current character, jump ahead to out of
++			 * NFA_SKIP */
++			add_state = t->state->out->out;
++			add_off = clen;
++		    }
++		    else
++		    {
++			/* skip over the matched characters, set character
++			 * count in NFA_SKIP */
++			add_state = t->state->out;
++			add_off = bytelen;
++			add_count = bytelen - clen;
++		    }
++		}
++		break;
++	      }
++	    case NFA_SKIP:
++	      /* character of previous matching \1 .. \9  or \@> */
++	      if (t->count - clen <= 0)
++	      {
++		  /* end of match, go to what follows */
++		  add_state = t->state->out;
++		  add_off = clen;
++	      }
++	      else
++	      {
++		  /* add state again with decremented count */
++		  add_state = t->state;
++		  add_off = 0;
++		  add_count = t->count - clen;
++	      }
++	      break;
++
++	    case NFA_LNUM:
++	    case NFA_LNUM_GT:
++	    case NFA_LNUM_LT:
++		result = (REG_MULTI &&
++			nfa_re_num_cmp(t->state->val, t->state->c - NFA_LNUM,
++			    (long_u)(reglnum + reg_firstlnum)));
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_COL:
++	    case NFA_COL_GT:
++	    case NFA_COL_LT:
++		result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_COL,
++			(long_u)(reginput - regline) + 1);
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_VCOL:
++	    case NFA_VCOL_GT:
++	    case NFA_VCOL_LT:
++		result = nfa_re_num_cmp(t->state->val, t->state->c - NFA_VCOL,
++		    (long_u)win_linetabsize(
++			    reg_win == NULL ? curwin : reg_win,
++			    regline, (colnr_T)(reginput - regline)) + 1);
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_MARK:
++	    case NFA_MARK_GT:
++	    case NFA_MARK_LT:
++	      {
++		pos_T	*pos = getmark_buf(reg_buf, t->state->val, FALSE);
++
++		/* Compare the mark position to the match position. */
++		result = (pos != NULL		     /* mark doesn't exist */
++			&& pos->lnum > 0    /* mark isn't set in reg_buf */
++			&& (pos->lnum == reglnum + reg_firstlnum
++				? (pos->col == (colnr_T)(reginput - regline)
++				    ? t->state->c == NFA_MARK
++				    : (pos->col < (colnr_T)(reginput - regline)
++					? t->state->c == NFA_MARK_GT
++					: t->state->c == NFA_MARK_LT))
++				: (pos->lnum < reglnum + reg_firstlnum
++				    ? t->state->c == NFA_MARK_GT
++				    : t->state->c == NFA_MARK_LT)));
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++	      }
++
++	    case NFA_CURSOR:
++		result = (reg_win != NULL
++			&& (reglnum + reg_firstlnum == reg_win->w_cursor.lnum)
++			&& ((colnr_T)(reginput - regline)
++						   == reg_win->w_cursor.col));
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++		break;
++
++	    case NFA_VISUAL:
++#ifdef FEAT_VISUAL
++		result = reg_match_visual();
++		if (result)
++		    addstate_here(thislist, t->state->out, &t->subs,
++							    t->pim, &listidx);
++#endif
++		break;
++
++	    default:	/* regular character */
++	      {
++		int c = t->state->c;
++
++		/* TODO: put this in #ifdef later */
++		if (c < 0)
++		    EMSGN("INTERNAL: Negative state char: %ld", c);
++		result = (c == curc);
++
++		if (!result && ireg_ic)
++		    result = MB_TOLOWER(c) == MB_TOLOWER(curc);
++#ifdef FEAT_MBYTE
++		/* If there is a composing character which is not being
++		 * ignored there can be no match. Match with composing
++		 * character uses NFA_COMPOSING above. */
++		if (result && enc_utf8 && !ireg_icombine
++						&& clen != utf_char2len(curc))
++		    result = FALSE;
++#endif
++		ADD_STATE_IF_MATCH(t->state);
++		break;
++	      }
++
++	    } /* switch (t->state->c) */
++
++	    if (add_state != NULL)
++	    {
++		if (t->pim != NULL)
++		{
++		    /* postponed invisible match */
++		    /* TODO: also do t->pim->pim recursively? */
++		    if (t->pim->result == NFA_PIM_TODO)
++		    {
++#ifdef ENABLE_LOG
++			fprintf(log_fd, "\n");
++			fprintf(log_fd, "==================================\n");
++			fprintf(log_fd, "Postponed recursive nfa_regmatch()\n");
++			fprintf(log_fd, "\n");
++#endif
++			result = recursive_regmatch(t->pim->state,
++						 prog, submatch, m, &listids);
++			t->pim->result = result ? NFA_PIM_MATCH
++							    : NFA_PIM_NOMATCH;
++			/* for \@! and \@<! it is a match when the result is
++			 * FALSE */
++			if (result != (t->pim->state->c
++						    == NFA_START_INVISIBLE_NEG
++			            || t->pim->state->c
++					   == NFA_START_INVISIBLE_BEFORE_NEG))
++			{
++			    /* Copy submatch info from the recursive call */
++			    copy_sub_off(&t->pim->subs.norm, &m->norm);
++#ifdef FEAT_SYN_HL
++			    if (nfa_has_zsubexpr)
++				copy_sub_off(&t->pim->subs.synt, &m->synt);
++#endif
++			}
++		    }
++		    else
++		    {
++			result = (t->pim->result == NFA_PIM_MATCH);
++#ifdef ENABLE_LOG
++			fprintf(log_fd, "\n");
++			fprintf(log_fd, "Using previous recursive nfa_regmatch() result, result == %d\n", t->pim->result);
++			fprintf(log_fd, "MATCH = %s\n", result == TRUE ? "OK" : "FALSE");
++			fprintf(log_fd, "\n");
++#endif
++		    }
++
++		    /* for \@! and \@<! it is a match when result is FALSE */
++		    if (result != (t->pim->state->c == NFA_START_INVISIBLE_NEG
++			        || t->pim->state->c
++					   == NFA_START_INVISIBLE_BEFORE_NEG))
++		    {
++			/* Copy submatch info from the recursive call */
++			copy_sub_off(&t->subs.norm, &t->pim->subs.norm);
++#ifdef FEAT_SYN_HL
++			if (nfa_has_zsubexpr)
++			    copy_sub_off(&t->subs.synt, &t->pim->subs.synt);
++#endif
++		    }
++		    else
++			/* look-behind match failed, don't add the state */
++			continue;
++		}
++
++		addstate(nextlist, add_state, &t->subs, add_off);
++		if (add_count > 0)
++		    nextlist->t[nextlist->n - 1].count = add_count;
++	    }
++
++	} /* for (thislist = thislist; thislist->state; thislist++) */
++
++	/* Look for the start of a match in the current position by adding the
++	 * start state to the list of states.
++	 * The first found match is the leftmost one, thus the order of states
++	 * matters!
++	 * Do not add the start state in recursive calls of nfa_regmatch(),
++	 * because recursive calls should only start in the first position.
++	 * Unless "nfa_endp" is not NULL, then we match the end position.
++	 * Also don't start a match past the first line. */
++	if (nfa_match == FALSE
++		&& ((start->c == NFA_MOPEN
++			&& reglnum == 0
++			&& clen != 0
++			&& (ireg_maxcol == 0
++			    || (colnr_T)(reginput - regline) < ireg_maxcol))
++		    || (nfa_endp != NULL
++			&& (REG_MULTI
++			    ? (reglnum < nfa_endp->se_u.pos.lnum
++			       || (reglnum == nfa_endp->se_u.pos.lnum
++			           && (int)(reginput - regline)
++						    < nfa_endp->se_u.pos.col))
++			    : reginput < nfa_endp->se_u.ptr))))
++	{
++#ifdef ENABLE_LOG
++	    fprintf(log_fd, "(---) STARTSTATE\n");
++#endif
++	    addstate(nextlist, start, m, clen);
++	}
++
++#ifdef ENABLE_LOG
++	fprintf(log_fd, ">>> Thislist had %d states available: ", thislist->n);
++	{
++	    int i;
++
++	    for (i = 0; i < thislist->n; i++)
++		fprintf(log_fd, "%d  ", abs(thislist->t[i].state->id));
++	}
++	fprintf(log_fd, "\n");
++#endif
++
++nextchar:
++	/* Advance to the next character, or advance to the next line, or
++	 * finish. */
++	if (clen != 0)
++	    reginput += clen;
++	else if (go_to_nextline || (nfa_endp != NULL && REG_MULTI
++					&& reglnum < nfa_endp->se_u.pos.lnum))
++	    reg_nextline();
++	else
++	    break;
++    }
++
++#ifdef ENABLE_LOG
++    if (log_fd != stderr)
++	fclose(log_fd);
++    log_fd = NULL;
++#endif
++
++theend:
++    /* Free memory */
++    vim_free(list[0].t);
++    vim_free(list[1].t);
++    vim_free(listids);
++    ga_clear(&pimlist);
++#undef ADD_STATE_IF_MATCH
++#ifdef NFA_REGEXP_DEBUG_LOG
++    fclose(debug);
++#endif
++
++    return nfa_match;
++}
++
++/*
++ * Try match of "prog" with at regline["col"].
++ * Returns 0 for failure, number of lines contained in the match otherwise.
++ */
++    static long
++nfa_regtry(prog, col)
++    nfa_regprog_T   *prog;
++    colnr_T	    col;
++{
++    int		i;
++    regsubs_T	subs, m;
++    nfa_state_T	*start = prog->start;
++#ifdef ENABLE_LOG
++    FILE	*f;
++#endif
++
++    reginput = regline + col;
++    need_clear_subexpr = TRUE;
++#ifdef FEAT_SYN_HL
++    /* Clear the external match subpointers if necessary. */
++    if (prog->reghasz == REX_SET)
++    {
++	nfa_has_zsubexpr = TRUE;
++	need_clear_zsubexpr = TRUE;
++    }
++    else
++	nfa_has_zsubexpr = FALSE;
++#endif
++
++#ifdef ENABLE_LOG
++    f = fopen(NFA_REGEXP_RUN_LOG, "a");
++    if (f != NULL)
++    {
++	fprintf(f, "\n\n\t=======================================================\n");
++#ifdef DEBUG
++	fprintf(f, "\tRegexp is \"%s\"\n", nfa_regengine.expr);
++#endif
++	fprintf(f, "\tInput text is \"%s\" \n", reginput);
++	fprintf(f, "\t=======================================================\n\n");
++	nfa_print_state(f, start);
++	fprintf(f, "\n\n");
++	fclose(f);
++    }
++    else
++	EMSG(_("Could not open temporary log file for writing "));
++#endif
++
++    clear_sub(&subs.norm);
++    clear_sub(&m.norm);
++#ifdef FEAT_SYN_HL
++    clear_sub(&subs.synt);
++    clear_sub(&m.synt);
++#endif
++
++    if (nfa_regmatch(prog, start, &subs, &m) == FALSE)
++	return 0;
++
++    cleanup_subexpr();
++    if (REG_MULTI)
++    {
++	for (i = 0; i < subs.norm.in_use; i++)
++	{
++	    reg_startpos[i] = subs.norm.list.multi[i].start;
++	    reg_endpos[i] = subs.norm.list.multi[i].end;
++	}
++
++	if (reg_startpos[0].lnum < 0)
++	{
++	    reg_startpos[0].lnum = 0;
++	    reg_startpos[0].col = col;
++	}
++	if (reg_endpos[0].lnum < 0)
++	{
++	    /* pattern has a \ze but it didn't match, use current end */
++	    reg_endpos[0].lnum = reglnum;
++	    reg_endpos[0].col = (int)(reginput - regline);
++	}
++	else
++	    /* Use line number of "\ze". */
++	    reglnum = reg_endpos[0].lnum;
++    }
++    else
++    {
++	for (i = 0; i < subs.norm.in_use; i++)
++	{
++	    reg_startp[i] = subs.norm.list.line[i].start;
++	    reg_endp[i] = subs.norm.list.line[i].end;
++	}
++
++	if (reg_startp[0] == NULL)
++	    reg_startp[0] = regline + col;
++	if (reg_endp[0] == NULL)
++	    reg_endp[0] = reginput;
++    }
++
++#ifdef FEAT_SYN_HL
++    /* Package any found \z(...\) matches for export. Default is none. */
++    unref_extmatch(re_extmatch_out);
++    re_extmatch_out = NULL;
++
++    if (prog->reghasz == REX_SET)
++    {
++	cleanup_zsubexpr();
++	re_extmatch_out = make_extmatch();
++	for (i = 0; i < subs.synt.in_use; i++)
++	{
++	    if (REG_MULTI)
++	    {
++		struct multipos *mpos = &subs.synt.list.multi[i];
++
++		/* Only accept single line matches. */
++		if (mpos->start.lnum >= 0 && mpos->start.lnum == mpos->end.lnum)
++		    re_extmatch_out->matches[i] =
++			vim_strnsave(reg_getline(mpos->start.lnum)
++							    + mpos->start.col,
++					     mpos->end.col - mpos->start.col);
++	    }
++	    else
++	    {
++		struct linepos *lpos = &subs.synt.list.line[i];
++
++		if (lpos->start != NULL && lpos->end != NULL)
++		    re_extmatch_out->matches[i] =
++			    vim_strnsave(lpos->start,
++					      (int)(lpos->end - lpos->start));
++	    }
++	}
++    }
++#endif
++
++    return 1 + reglnum;
++}
++
++/*
++ * Match a regexp against a string ("line" points to the string) or multiple
++ * lines ("line" is NULL, use reg_getline()).
++ *
++ * Returns 0 for failure, number of lines contained in the match otherwise.
++ */
++    static long
++nfa_regexec_both(line, startcol)
++    char_u	*line;
++    colnr_T	startcol;	/* column to start looking for match */
++{
++    nfa_regprog_T   *prog;
++    long	    retval = 0L;
++    int		    i;
++    colnr_T	    col = startcol;
++
++    if (REG_MULTI)
++    {
++	prog = (nfa_regprog_T *)reg_mmatch->regprog;
++	line = reg_getline((linenr_T)0);    /* relative to the cursor */
++	reg_startpos = reg_mmatch->startpos;
++	reg_endpos = reg_mmatch->endpos;
++    }
++    else
++    {
++	prog = (nfa_regprog_T *)reg_match->regprog;
++	reg_startp = reg_match->startp;
++	reg_endp = reg_match->endp;
++    }
++
++    /* Be paranoid... */
++    if (prog == NULL || line == NULL)
++    {
++	EMSG(_(e_null));
++	goto theend;
++    }
++
++    /* If pattern contains "\c" or "\C": overrule value of ireg_ic */
++    if (prog->regflags & RF_ICASE)
++	ireg_ic = TRUE;
++    else if (prog->regflags & RF_NOICASE)
++	ireg_ic = FALSE;
++
++#ifdef FEAT_MBYTE
++    /* If pattern contains "\Z" overrule value of ireg_icombine */
++    if (prog->regflags & RF_ICOMBINE)
++	ireg_icombine = TRUE;
++#endif
++
++    regline = line;
++    reglnum = 0;    /* relative to line */
++
++    nfa_has_zend = prog->has_zend;
++    nfa_has_backref = prog->has_backref;
++    nfa_nsubexpr = prog->nsubexp;
++    nfa_listid = 1;
++    nfa_alt_listid = 2;
++#ifdef DEBUG
++    nfa_regengine.expr = prog->pattern;
++#endif
++
++    if (prog->reganch && col > 0)
++	return 0L;
++
++    if (prog->regstart != NUL)
++    {
++	char_u *s;
++
++	/* Skip until the char we know it must start with.
++	 * Used often, do some work to avoid call overhead. */
++	if (!ireg_ic
++#ifdef FEAT_MBYTE
++		    && !has_mbyte
++#endif
++		    )
++	    s = vim_strbyte(regline + col, prog->regstart);
++	else
++	    s = cstrchr(regline + col, prog->regstart);
++	if (s == NULL)
++	    return 0L;
++	col = (int)(s - regline);
++    }
++
++    /* If the start column is past the maximum column: no need to try. */
++    if (ireg_maxcol > 0 && col >= ireg_maxcol)
++	goto theend;
++
++    nstate = prog->nstate;
++    for (i = 0; i < nstate; ++i)
++    {
++	prog->state[i].id = i;
++	prog->state[i].lastlist[0] = 0;
++	prog->state[i].lastlist[1] = 0;
++    }
++
++    retval = nfa_regtry(prog, col);
++
++#ifdef DEBUG
++    nfa_regengine.expr = NULL;
++#endif
++
++theend:
++    return retval;
++}
++
++/*
++ * Compile a regular expression into internal code for the NFA matcher.
++ * Returns the program in allocated space.  Returns NULL for an error.
++ */
++    static regprog_T *
++nfa_regcomp(expr, re_flags)
++    char_u	*expr;
++    int		re_flags;
++{
++    nfa_regprog_T	*prog = NULL;
++    size_t		prog_size;
++    int			*postfix;
++
++    if (expr == NULL)
++	return NULL;
++
++#ifdef DEBUG
++    nfa_regengine.expr = expr;
++#endif
++
++    init_class_tab();
++
++    if (nfa_regcomp_start(expr, re_flags) == FAIL)
++	return NULL;
++
++    /* Build postfix form of the regexp. Needed to build the NFA
++     * (and count its size). */
++    postfix = re2post();
++    if (postfix == NULL)
++    {
++	/* TODO: only give this error for debugging? */
++	if (post_ptr >= post_end)
++	    EMSGN("Internal error: estimated max number of states insufficient: %ld", post_end - post_start);
++	goto fail;	    /* Cascaded (syntax?) error */
++    }
++
++    /*
++     * In order to build the NFA, we parse the input regexp twice:
++     * 1. first pass to count size (so we can allocate space)
++     * 2. second to emit code
++     */
++#ifdef ENABLE_LOG
++    {
++	FILE *f = fopen(NFA_REGEXP_RUN_LOG, "a");
++
++	if (f != NULL)
++	{
++	    fprintf(f, "\n*****************************\n\n\n\n\tCompiling regexp \"%s\" ... hold on !\n", expr);
++	    fclose(f);
++	}
++    }
++#endif
++
++    /*
++     * PASS 1
++     * Count number of NFA states in "nstate". Do not build the NFA.
++     */
++    post2nfa(postfix, post_ptr, TRUE);
++
++    /* Space for compiled regexp */
++    prog_size = sizeof(nfa_regprog_T) + sizeof(nfa_state_T) * nstate;
++    prog = (nfa_regprog_T *)lalloc(prog_size, TRUE);
++    if (prog == NULL)
++	goto fail;
++    state_ptr = prog->state;
++
++    /*
++     * PASS 2
++     * Build the NFA
++     */
++    prog->start = post2nfa(postfix, post_ptr, FALSE);
++    if (prog->start == NULL)
++	goto fail;
++
++    prog->regflags = regflags;
++    prog->engine = &nfa_regengine;
++    prog->nstate = nstate;
++    prog->has_zend = nfa_has_zend;
++    prog->has_backref = nfa_has_backref;
++    prog->nsubexp = regnpar;
++
++    prog->reganch = nfa_get_reganch(prog->start, 0);
++    prog->regstart = nfa_get_regstart(prog->start, 0);
++
++#ifdef ENABLE_LOG
++    nfa_postfix_dump(expr, OK);
++    nfa_dump(prog);
++#endif
++#ifdef FEAT_SYN_HL
++    /* Remember whether this pattern has any \z specials in it. */
++    prog->reghasz = re_has_z;
++#endif
++#ifdef DEBUG
++    prog->pattern = vim_strsave(expr); /* memory will leak */
++    nfa_regengine.expr = NULL;
++#endif
++
++out:
++    vim_free(post_start);
++    post_start = post_ptr = post_end = NULL;
++    state_ptr = NULL;
++    return (regprog_T *)prog;
++
++fail:
++    vim_free(prog);
++    prog = NULL;
++#ifdef ENABLE_LOG
++    nfa_postfix_dump(expr, FAIL);
++#endif
++#ifdef DEBUG
++    nfa_regengine.expr = NULL;
++#endif
++    goto out;
++}
++
++
++/*
++ * Match a regexp against a string.
++ * "rmp->regprog" is a compiled regexp as returned by nfa_regcomp().
++ * Uses curbuf for line count and 'iskeyword'.
++ *
++ * Return TRUE if there is a match, FALSE if not.
++ */
++    static int
++nfa_regexec(rmp, line, col)
++    regmatch_T	*rmp;
++    char_u	*line;	/* string to match against */
++    colnr_T	col;	/* column to start looking for match */
++{
++    reg_match = rmp;
++    reg_mmatch = NULL;
++    reg_maxline = 0;
++    reg_line_lbr = FALSE;
++    reg_buf = curbuf;
++    reg_win = NULL;
++    ireg_ic = rmp->rm_ic;
++#ifdef FEAT_MBYTE
++    ireg_icombine = FALSE;
++#endif
++    ireg_maxcol = 0;
++    return (nfa_regexec_both(line, col) != 0);
++}
++
++#if defined(FEAT_MODIFY_FNAME) || defined(FEAT_EVAL) \
++	|| defined(FIND_REPLACE_DIALOG) || defined(PROTO)
++
++static int  nfa_regexec_nl __ARGS((regmatch_T *rmp, char_u *line, colnr_T col));
++
++/*
++ * Like nfa_regexec(), but consider a "\n" in "line" to be a line break.
++ */
++    static int
++nfa_regexec_nl(rmp, line, col)
++    regmatch_T	*rmp;
++    char_u	*line;	/* string to match against */
++    colnr_T	col;	/* column to start looking for match */
++{
++    reg_match = rmp;
++    reg_mmatch = NULL;
++    reg_maxline = 0;
++    reg_line_lbr = TRUE;
++    reg_buf = curbuf;
++    reg_win = NULL;
++    ireg_ic = rmp->rm_ic;
++#ifdef FEAT_MBYTE
++    ireg_icombine = FALSE;
++#endif
++    ireg_maxcol = 0;
++    return (nfa_regexec_both(line, col) != 0);
++}
++#endif
++
++
++/*
++ * Match a regexp against multiple lines.
++ * "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
++ * Uses curbuf for line count and 'iskeyword'.
++ *
++ * Return zero if there is no match.  Return number of lines contained in the
++ * match otherwise.
++ *
++ * Note: the body is the same as bt_regexec() except for nfa_regexec_both()
++ *
++ * ! Also NOTE : match may actually be in another line. e.g.:
++ * when r.e. is \nc, cursor is at 'a' and the text buffer looks like
++ *
++ * +-------------------------+
++ * |a                        |
++ * |b                        |
++ * |c                        |
++ * |                         |
++ * +-------------------------+
++ *
++ * then nfa_regexec_multi() returns 3. while the original
++ * vim_regexec_multi() returns 0 and a second call at line 2 will return 2.
++ *
++ * FIXME if this behavior is not compatible.
++ */
++    static long
++nfa_regexec_multi(rmp, win, buf, lnum, col, tm)
++    regmmatch_T	*rmp;
++    win_T	*win;		/* window in which to search or NULL */
++    buf_T	*buf;		/* buffer in which to search */
++    linenr_T	lnum;		/* nr of line to start looking for match */
++    colnr_T	col;		/* column to start looking for match */
++    proftime_T	*tm UNUSED;	/* timeout limit or NULL */
++{
++    reg_match = NULL;
++    reg_mmatch = rmp;
++    reg_buf = buf;
++    reg_win = win;
++    reg_firstlnum = lnum;
++    reg_maxline = reg_buf->b_ml.ml_line_count - lnum;
++    reg_line_lbr = FALSE;
++    ireg_ic = rmp->rmm_ic;
++#ifdef FEAT_MBYTE
++    ireg_icombine = FALSE;
++#endif
++    ireg_maxcol = rmp->rmm_maxcol;
++
++    return nfa_regexec_both(NULL, col);
++}
++
++#ifdef DEBUG
++# undef ENABLE_LOG
++#endif
+diff -Naur vim73.orig/src/screen.c vim73/src/screen.c
+--- vim73.orig/src/screen.c	2010-08-13 13:21:27.000000000 +0000
++++ vim73/src/screen.c	2013-06-07 17:07:35.802239773 +0000
+@@ -89,6 +89,9 @@
+ 
+ #include "vim.h"
+ 
++#define MB_FILLER_CHAR '<'  /* character used when a double-width character
++			     * doesn't fit. */
++
+ /*
+  * The attributes that are actually active for writing to the screen.
+  */
+@@ -516,8 +519,10 @@
+ # endif
+ # ifdef FEAT_CLIPBOARD
+ 		/* When Visual area changed, may have to update selection. */
+-		if (clip_star.available && clip_isautosel())
+-		    clip_update_selection();
++		if (clip_star.available && clip_isautosel_star())
++		    clip_update_selection(&clip_star);
++		if (clip_plus.available && clip_isautosel_plus())
++		    clip_update_selection(&clip_plus);
+ # endif
+ #ifdef FEAT_GUI
+ 		/* Remove the cursor before starting to do anything, because
+@@ -543,6 +548,11 @@
+ #if defined(FEAT_SEARCH_EXTRA)
+     end_search_hl();
+ #endif
++#ifdef FEAT_INS_EXPAND
++    /* May need to redraw the popup menu. */
++    if (pum_visible())
++	pum_redraw();
++#endif
+ 
+ #ifdef FEAT_WINDOWS
+     /* Reset b_mod_set flags.  Going through all windows is probably faster
+@@ -764,9 +774,13 @@
+ 	    doit = TRUE;
+     }
+ 
+-    /* Return when there is nothing to do or screen updating already
+-     * happening. */
+-    if (!doit || updating_screen)
++    /* Return when there is nothing to do, screen updating is already
++     * happening (recursive call) or still starting up. */
++    if (!doit || updating_screen
++#ifdef FEAT_GUI
++	    || gui.starting
++#endif
++	    || starting)
+ 	return;
+ 
+     /* update all windows that need updating */
+@@ -807,8 +821,10 @@
+ 
+ #ifdef FEAT_CLIPBOARD
+     /* When Visual area changed, may have to update selection. */
+-    if (clip_star.available && clip_isautosel())
+-	clip_update_selection();
++    if (clip_star.available && clip_isautosel_star())
++	clip_update_selection(&clip_star);
++    if (clip_plus.available && clip_isautosel_plus())
++	clip_update_selection(&clip_plus);
+ #endif
+ 
+     win_update(wp);
+@@ -1633,11 +1649,11 @@
+ 	     * When at start of changed lines: May scroll following lines
+ 	     * up or down to minimize redrawing.
+ 	     * Don't do this when the change continues until the end.
+-	     * Don't scroll when dollar_vcol is non-zero, keep the "$".
++	     * Don't scroll when dollar_vcol >= 0, keep the "$".
+ 	     */
+ 	    if (lnum == mod_top
+ 		    && mod_bot != MAXLNUM
+-		    && !(dollar_vcol != 0 && mod_bot == mod_top + 1))
++		    && !(dollar_vcol >= 0 && mod_bot == mod_top + 1))
+ 	    {
+ 		int		old_rows = 0;
+ 		int		new_rows = 0;
+@@ -1864,12 +1880,12 @@
+ 	    if (row > wp->w_height)	/* past end of screen */
+ 	    {
+ 		/* we may need the size of that too long line later on */
+-		if (dollar_vcol == 0)
++		if (dollar_vcol == -1)
+ 		    wp->w_lines[idx].wl_size = plines_win(wp, lnum, TRUE);
+ 		++idx;
+ 		break;
+ 	    }
+-	    if (dollar_vcol == 0)
++	    if (dollar_vcol == -1)
+ 		wp->w_lines[idx].wl_size = row - srow;
+ 	    ++idx;
+ #ifdef FEAT_FOLDING
+@@ -1986,7 +2002,7 @@
+ 	    }
+ #endif
+ 	}
+-	else if (dollar_vcol == 0)
++	else if (dollar_vcol == -1)
+ 	    wp->w_botline = lnum;
+ 
+ 	/* make sure the rest of the screen is blank */
+@@ -2001,7 +2017,7 @@
+     wp->w_old_botfill = wp->w_botfill;
+ #endif
+ 
+-    if (dollar_vcol == 0)
++    if (dollar_vcol == -1)
+     {
+ 	/*
+ 	 * There is a trick with w_botline.  If we invalidate it on each
+@@ -2308,18 +2324,28 @@
+ 	{
+ 	    int	    w = number_width(wp);
+ 	    long num;
++	    char *fmt = "%*ld ";
+ 
+ 	    if (len > w + 1)
+ 		len = w + 1;
+ 
+-	    if (wp->w_p_nu)
+-		/* 'number' */
++	    if (wp->w_p_nu && !wp->w_p_rnu)
++		/* 'number' + 'norelativenumber' */
+ 		num = (long)lnum;
+ 	    else
++	    {
+ 		/* 'relativenumber', don't use negative numbers */
+-		num = (long)abs((int)get_cursor_rel_lnum(wp, lnum));
++		num = labs((long)get_cursor_rel_lnum(wp, lnum));
++		if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
++		{
++		    /* 'number' + 'relativenumber': cursor line shows absolute
++		     * line number */
++		    num = lnum;
++		    fmt = "%-*ld ";
++		}
++	    }
+ 
+-	    sprintf((char *)buf, "%*ld ", w, num);
++	    sprintf((char *)buf, fmt, w, num);
+ #ifdef FEAT_RIGHTLEFT
+ 	    if (wp->w_p_rl)
+ 		/* the line number isn't reversed */
+@@ -2531,7 +2557,9 @@
+ 		/* Visual block mode: highlight the chars part of the block */
+ 		if (wp->w_old_cursor_fcol + txtcol < (colnr_T)W_WIDTH(wp))
+ 		{
+-		    if (wp->w_old_cursor_lcol + txtcol < (colnr_T)W_WIDTH(wp))
++		    if (wp->w_old_cursor_lcol != MAXCOL
++			     && wp->w_old_cursor_lcol + txtcol
++						       < (colnr_T)W_WIDTH(wp))
+ 			len = wp->w_old_cursor_lcol;
+ 		    else
+ 			len = W_WIDTH(wp) - txtcol;
+@@ -2991,7 +3019,10 @@
+ 	    area_highlighting = TRUE;
+ 	    attr = hl_attr(HLF_V);
+ #if defined(FEAT_CLIPBOARD) && defined(FEAT_X11)
+-	    if (clip_star.available && !clip_star.owned && clip_isautosel())
++	    if ((clip_star.available && !clip_star.owned
++						     && clip_isautosel_star())
++		    || (clip_plus.available && !clip_plus.owned
++						    && clip_isautosel_plus()))
+ 		attr = hl_attr(HLF_VNC);
+ #endif
+ 	}
+@@ -3222,8 +3253,7 @@
+ 		/* no bad word found at line start, don't check until end of a
+ 		 * word */
+ 		spell_hlf = HLF_COUNT;
+-		word_end = (int)(spell_to_word_end(ptr, wp)
+-								  - line + 1);
++		word_end = (int)(spell_to_word_end(ptr, wp) - line + 1);
+ 	    }
+ 	    else
+ 	    {
+@@ -3405,9 +3435,9 @@
+ # endif
+ 		   )
+ 		{
+-		    int_u	text_sign;
++		    int	text_sign;
+ # ifdef FEAT_SIGN_ICONS
+-		    int_u	icon_sign;
++		    int	icon_sign;
+ # endif
+ 
+ 		    /* Draw two cells with the sign value or blank. */
+@@ -3469,16 +3499,24 @@
+ 			    )
+ 		    {
+ 			long num;
++			char *fmt = "%*ld ";
+ 
+-			if (wp->w_p_nu)
+-			    /* 'number' */
++			if (wp->w_p_nu && !wp->w_p_rnu)
++			    /* 'number' + 'norelativenumber' */
+ 			    num = (long)lnum;
+ 			else
++			{
+ 			    /* 'relativenumber', don't use negative numbers */
+-			    num = (long)abs((int)get_cursor_rel_lnum(wp,
+-								    lnum));
++			    num = labs((long)get_cursor_rel_lnum(wp, lnum));
++			    if (num == 0 && wp->w_p_nu && wp->w_p_rnu)
++			    {
++				/* 'number' + 'relativenumber' */
++				num = lnum;
++				fmt = "%-*ld ";
++			    }
++			}
+ 
+-			sprintf((char *)extra, "%*ld ",
++			sprintf((char *)extra, fmt,
+ 						number_width(wp), num);
+ 			if (wp->w_skipcol > 0)
+ 			    for (p_extra = extra; *p_extra == ' '; ++p_extra)
+@@ -3496,9 +3534,12 @@
+ 		    char_attr = hl_attr(HLF_N);
+ #ifdef FEAT_SYN_HL
+ 		    /* When 'cursorline' is set highlight the line number of
+-		     * the current line differently. */
+-		    if (wp->w_p_cul && lnum == wp->w_cursor.lnum)
+-			char_attr = hl_combine_attr(hl_attr(HLF_CUL), char_attr);
++		     * the current line differently.
++		     * TODO: Can we use CursorLine instead of CursorLineNr
++		     * when CursorLineNr isn't set? */
++		    if ((wp->w_p_cul || wp->w_p_rnu)
++						 && lnum == wp->w_cursor.lnum)
++			char_attr = hl_attr(HLF_CLN);
+ #endif
+ 		}
+ 	    }
+@@ -3559,7 +3600,7 @@
+ 	}
+ 
+ 	/* When still displaying '$' of change command, stop at cursor */
+-	if (dollar_vcol != 0 && wp == curwin
++	if (dollar_vcol >= 0 && wp == curwin
+ 		   && lnum == wp->w_cursor.lnum && vcol >= (long)wp->w_virtcol
+ #ifdef FEAT_DIFF
+ 				   && filler_todo <= 0
+@@ -4006,11 +4047,11 @@
+ 
+ 		/* If a double-width char doesn't fit at the left side display
+ 		 * a '<' in the first column.  Don't do this for unprintable
+-		 * charactes. */
++		 * characters. */
+ 		if (n_skip > 0 && mb_l > 1 && n_extra == 0)
+ 		{
+ 		    n_extra = 1;
+-		    c_extra = '<';
++		    c_extra = MB_FILLER_CHAR;
+ 		    c = ' ';
+ 		    if (area_attr == 0 && search_attr == 0)
+ 		    {
+@@ -4253,7 +4294,20 @@
+ 		{
+ 		    /* tab amount depends on current column */
+ 		    n_extra = (int)wp->w_buffer->b_p_ts
+-				   - vcol % (int)wp->w_buffer->b_p_ts - 1;
++					- vcol % (int)wp->w_buffer->b_p_ts - 1;
++#ifdef FEAT_CONCEAL
++		    /* Tab alignment should be identical regardless of
++		     * 'conceallevel' value. So tab compensates of all
++		     * previous concealed characters, and thus resets vcol_off
++		     * and boguscols accumulated so far in the line. Note that
++		     * the tab can be longer than 'tabstop' when there
++		     * are concealed characters. */
++		    n_extra += vcol_off;
++		    vcol -= vcol_off;
++		    vcol_off = 0;
++		    col -= boguscols;
++		    boguscols = 0;
++#endif
+ #ifdef FEAT_MBYTE
+ 		    mb_utf8 = FALSE;	/* don't draw as UTF-8 */
+ #endif
+@@ -4570,6 +4624,15 @@
+ 	    c = lcs_prec;
+ 	    lcs_prec_todo = NUL;
+ #ifdef FEAT_MBYTE
++	    if (has_mbyte && (*mb_char2cells)(mb_c) > 1)
++	    {
++		/* Double-width character being overwritten by the "precedes"
++		 * character, need to fill up half the character. */
++		c_extra = MB_FILLER_CHAR;
++		n_extra = 1;
++		n_attr = 2;
++		extra_attr = hl_attr(HLF_AT);
++	    }
+ 	    mb_c = c;
+ 	    if (enc_utf8 && (*mb_char2len)(c) > 1)
+ 	    {
+@@ -5307,8 +5370,9 @@
+ 		    && (ScreenLinesUC[off_from] != ScreenLinesUC[off_to]
+ 			|| (ScreenLinesUC[off_from] != 0
+ 			    && comp_char_differs(off_from, off_to))
+-			|| (cols > 1 && ScreenLines[off_from + 1]
+-						 != ScreenLines[off_to + 1])))
++			|| ((*mb_off2cells)(off_from, off_from + cols) > 1
++			    && ScreenLines[off_from + 1]
++						  != ScreenLines[off_to + 1])))
+ #endif
+ 	       ))
+ 	return TRUE;
+@@ -5366,6 +5430,12 @@
+ # define CHAR_CELLS 1
+ #endif
+ 
++    /* Check for illegal row and col, just in case. */
++    if (row >= Rows)
++	row = Rows - 1;
++    if (endcol > Columns)
++	endcol = Columns;
++
+ # ifdef FEAT_CLIPBOARD
+     clip_may_clear_selection(row, row);
+ # endif
+@@ -6436,6 +6506,8 @@
+     struct	stl_hlrec hltab[STL_MAX_ITEM];
+     struct	stl_hlrec tabtab[STL_MAX_ITEM];
+     int		use_sandbox = FALSE;
++    win_T	*ewp;
++    int		p_crb_save;
+ 
+     /* setup environment for the task at hand */
+     if (wp == NULL)
+@@ -6514,16 +6586,31 @@
+     if (maxwidth <= 0)
+ 	return;
+ 
++    /* Temporarily reset 'cursorbind', we don't want a side effect from moving
++     * the cursor away and back. */
++    ewp = wp == NULL ? curwin : wp;
++    p_crb_save = ewp->w_p_crb;
++    ewp->w_p_crb = FALSE;
++
+     /* Make a copy, because the statusline may include a function call that
+      * might change the option value and free the memory. */
+     stl = vim_strsave(stl);
+-    width = build_stl_str_hl(wp == NULL ? curwin : wp,
+-				buf, sizeof(buf),
++    width = build_stl_str_hl(ewp, buf, sizeof(buf),
+ 				stl, use_sandbox,
+ 				fillchar, maxwidth, hltab, tabtab);
+     vim_free(stl);
+-    len = (int)STRLEN(buf);
++    ewp->w_p_crb = p_crb_save;
++
++    /* Make all characters printable. */
++    p = transstr(buf);
++    if (p != NULL)
++    {
++	vim_strncpy(buf, p, sizeof(buf) - 1);
++	vim_free(p);
++    }
+ 
++    /* fill up with "fillchar" */
++    len = (int)STRLEN(buf);
+     while (width < maxwidth && len < (int)sizeof(buf) - 1)
+     {
+ #ifdef FEAT_MBYTE
+@@ -6591,16 +6678,17 @@
+     int	    row, col;
+     int	    attr;
+ {
+-#ifdef FEAT_MBYTE
+     char_u	buf[MB_MAXBYTES + 1];
+ 
+-    buf[(*mb_char2bytes)(c, buf)] = NUL;
+-#else
+-    char_u	buf[2];
+-
+-    buf[0] = c;
+-    buf[1] = NUL;
++#ifdef FEAT_MBYTE
++    if (has_mbyte)
++	buf[(*mb_char2bytes)(c, buf)] = NUL;
++    else
+ #endif
++    {
++	buf[0] = c;
++	buf[1] = NUL;
++    }
+     screen_puts(buf, row, col, attr);
+ }
+ 
+@@ -7827,15 +7915,15 @@
+ 
+ /*
+  * screen_valid -  allocate screen buffers if size changed
+- *   If "clear" is TRUE: clear screen if it has been resized.
++ *   If "doclear" is TRUE: clear screen if it has been resized.
+  *	Returns TRUE if there is a valid screen to write to.
+  *	Returns FALSE when starting up and screen not initialized yet.
+  */
+     int
+-screen_valid(clear)
+-    int	    clear;
++screen_valid(doclear)
++    int	    doclear;
+ {
+-    screenalloc(clear);	    /* allocate screen buffers if size changed */
++    screenalloc(doclear);	   /* allocate screen buffers if size changed */
+     return (ScreenLines != NULL);
+ }
+ 
+@@ -7850,8 +7938,8 @@
+  * final size of the shell is needed.
+  */
+     void
+-screenalloc(clear)
+-    int	    clear;
++screenalloc(doclear)
++    int	    doclear;
+ {
+     int		    new_row, old_row;
+ #ifdef FEAT_GUI
+@@ -8047,7 +8135,7 @@
+ 	     * (used when resizing the window at the "--more--" prompt or when
+ 	     * executing an external command, for the GUI).
+ 	     */
+-	    if (!clear)
++	    if (!doclear)
+ 	    {
+ 		(void)vim_memset(new_ScreenLines + new_row * Columns,
+ 				      ' ', (size_t)Columns * sizeof(schar_T));
+@@ -8137,7 +8225,7 @@
+     screen_Columns = Columns;
+ 
+     must_redraw = CLEAR;	/* need to clear the screen later */
+-    if (clear)
++    if (doclear)
+ 	screenclear2();
+ 
+ #ifdef FEAT_GUI
+@@ -9018,7 +9106,7 @@
+ 	    || (wp != NULL && wp->w_width != Columns)
+ # endif
+        )
+-	clip_clear_selection();
++	clip_clear_selection(&clip_star);
+     else
+ 	clip_scroll_selection(-line_count);
+ #endif
+@@ -9239,7 +9327,7 @@
+ 	    || (wp != NULL && wp->w_width != Columns)
+ # endif
+        )
+-	clip_clear_selection();
++	clip_clear_selection(&clip_star);
+     else
+ 	clip_scroll_selection(line_count);
+ #endif
+@@ -9826,7 +9914,7 @@
+     buf_T	*buf;
+ {
+     if (buf_spname(buf) != NULL)
+-	STRCPY(NameBuff, buf_spname(buf));
++	vim_strncpy(NameBuff, buf_spname(buf), MAXPATHL - 1);
+     else
+ 	home_replace(buf, buf->b_fname, NameBuff, MAXPATHL, TRUE);
+     trans_characters(NameBuff, MAXPATHL);
+@@ -10175,12 +10263,12 @@
+     int		n;
+     linenr_T	lnum;
+ 
+-    if (wp->w_p_nu)
+-	/* 'number' */
+-	lnum = wp->w_buffer->b_ml.ml_line_count;
+-    else
+-	/* 'relativenumber' */
++    if (wp->w_p_rnu && !wp->w_p_nu)
++	/* cursor line shows "0" */
+ 	lnum = wp->w_height;
++    else
++	/* cursor line shows absolute line number */
++	lnum = wp->w_buffer->b_ml.ml_line_count;
+ 
+     if (lnum == wp->w_nrwidth_line_count)
+ 	return wp->w_nrwidth_width;
+@@ -10201,3 +10289,23 @@
+     return n;
+ }
+ #endif
++
++/*
++ * Return the current cursor column. This is the actual position on the
++ * screen. First column is 0.
++ */
++    int
++screen_screencol()
++{
++    return screen_cur_col;
++}
++
++/*
++ * Return the current cursor row. This is the actual position on the screen.
++ * First row is 0.
++ */
++    int
++screen_screenrow()
++{
++    return screen_cur_row;
++}
+diff -Naur vim73.orig/src/search.c vim73/src/search.c
+--- vim73.orig/src/search.c	2010-07-14 14:49:41.000000000 +0000
++++ vim73/src/search.c	2013-06-07 17:07:35.815573068 +0000
+@@ -73,7 +73,7 @@
+ {
+     char_u	    *pat;	/* the pattern (in allocated memory) or NULL */
+     int		    magic;	/* magicness of the pattern */
+-    int		    no_scs;	/* no smarcase for this pattern */
++    int		    no_scs;	/* no smartcase for this pattern */
+     struct soffset  off;
+ };
+ 
+@@ -572,7 +572,8 @@
+ 	extra_col = 0;
+ #ifdef FEAT_MBYTE
+     /* Watch out for the "col" being MAXCOL - 2, used in a closed fold. */
+-    else if (has_mbyte && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
++    else if (dir != BACKWARD && has_mbyte
++		    && pos->lnum >= 1 && pos->lnum <= buf->b_ml.ml_line_count
+ 						     && pos->col < MAXCOL - 2)
+     {
+ 	ptr = ml_get_buf(buf, pos->lnum, FALSE) + pos->col;
+@@ -726,6 +727,8 @@
+ 					++matchcol;
+ 				}
+ 			    }
++			    if (matchcol == 0 && (options & SEARCH_START))
++				break;
+ 			    if (ptr[matchcol] == NUL
+ 				    || (nmatched = vim_regexec_multi(&regmatch,
+ 					      win, buf, lnum + matchpos.lnum,
+@@ -866,7 +869,7 @@
+ 		    /* With the SEARCH_END option move to the last character
+ 		     * of the match.  Don't do it for an empty match, end
+ 		     * should be same as start then. */
+-		    if (options & SEARCH_END && !(options & SEARCH_NOOF)
++		    if ((options & SEARCH_END) && !(options & SEARCH_NOOF)
+ 			    && !(matchpos.lnum == endpos.lnum
+ 				&& matchpos.col == endpos.col))
+ 		    {
+@@ -1161,12 +1164,20 @@
+ 	{
+ 	    if (spats[RE_SEARCH].pat == NULL)	    /* no previous pattern */
+ 	    {
+-		EMSG(_(e_noprevre));
+-		retval = 0;
+-		goto end_do_search;
++		pat = spats[RE_SUBST].pat;
++		if (pat == NULL)
++		{
++		    EMSG(_(e_noprevre));
++		    retval = 0;
++		    goto end_do_search;
++		}
++		searchstr = pat;
++	    }
++	    else
++	    {
++		/* make search_regcomp() use spats[RE_SEARCH].pat */
++		searchstr = (char_u *)"";
+ 	    }
+-	    /* make search_regcomp() use spats[RE_SEARCH].pat */
+-	    searchstr = (char_u *)"";
+ 	}
+ 
+ 	if (pat != NULL && *pat != NUL)	/* look for (new) offset */
+@@ -1538,8 +1549,9 @@
+     int			col;
+     char_u		*p;
+     int			len;
++    int			stop = TRUE;
+ #ifdef FEAT_MBYTE
+-    static char_u	bytes[MB_MAXBYTES];
++    static char_u	bytes[MB_MAXBYTES + 1];
+     static int		bytelen = 1;	/* >1 for multi-byte char */
+ #endif
+ 
+@@ -1572,6 +1584,12 @@
+ 	t_cmd = last_t_cmd;
+ 	c = lastc;
+ 	/* For multi-byte re-use last bytes[] and bytelen. */
++
++	/* Force a move of at least one char, so ";" and "," will move the
++	 * cursor, even if the cursor is right in front of char we are looking
++	 * at. */
++	if (vim_strchr(p_cpo, CPO_SCOLON) == NULL && count == 1 && t_cmd)
++	    stop = FALSE;
+     }
+ 
+     if (dir == BACKWARD)
+@@ -1604,14 +1622,15 @@
+ 		}
+ 		if (bytelen == 1)
+ 		{
+-		    if (p[col] == c)
++		    if (p[col] == c && stop)
+ 			break;
+ 		}
+ 		else
+ 		{
+-		    if (vim_memcmp(p + col, bytes, bytelen) == 0)
++		    if (vim_memcmp(p + col, bytes, bytelen) == 0 && stop)
+ 			break;
+ 		}
++		stop = TRUE;
+ 	    }
+ 	}
+ 	else
+@@ -1621,8 +1640,9 @@
+ 	    {
+ 		if ((col += dir) < 0 || col >= len)
+ 		    return FAIL;
+-		if (p[col] == c)
++		if (p[col] == c && stop)
+ 		    break;
++		stop = TRUE;
+ 	    }
+ 	}
+     }
+@@ -1769,28 +1789,8 @@
+     }
+     else if (initc != '#' && initc != NUL)
+     {
+-	/* 'matchpairs' is "x:y,x:y" */
+-	for (ptr = curbuf->b_p_mps; *ptr; ptr += 2)
+-	{
+-	    if (*ptr == initc)
+-	    {
+-		findc = initc;
+-		initc = ptr[2];
+-		backwards = TRUE;
+-		break;
+-	    }
+-	    ptr += 2;
+-	    if (*ptr == initc)
+-	    {
+-		findc = initc;
+-		initc = ptr[-2];
+-		backwards = FALSE;
+-		break;
+-	    }
+-	    if (ptr[1] != ',')
+-		break;
+-	}
+-	if (!findc)		/* invalid initc! */
++	find_mps_values(&initc, &findc, &backwards, TRUE);
++	if (findc == NUL)
+ 	    return NULL;
+     }
+     /*
+@@ -1869,36 +1869,14 @@
+ 		    --pos.col;
+ 		for (;;)
+ 		{
+-		    initc = linep[pos.col];
++		    initc = PTR2CHAR(linep + pos.col);
+ 		    if (initc == NUL)
+ 			break;
+ 
+-		    for (ptr = curbuf->b_p_mps; *ptr; ++ptr)
+-		    {
+-			if (*ptr == initc)
+-			{
+-			    findc = ptr[2];
+-			    backwards = FALSE;
+-			    break;
+-			}
+-			ptr += 2;
+-			if (*ptr == initc)
+-			{
+-			    findc = ptr[-2];
+-			    backwards = TRUE;
+-			    break;
+-			}
+-			if (!*++ptr)
+-			    break;
+-		    }
++		    find_mps_values(&initc, &findc, &backwards, FALSE);
+ 		    if (findc)
+ 			break;
+-#ifdef FEAT_MBYTE
+-		    if (has_mbyte)
+-			pos.col += (*mb_ptr2len)(linep + pos.col);
+-		    else
+-#endif
+-			++pos.col;
++		    pos.col += MB_PTR2LEN(linep + pos.col);
+ 		}
+ 		if (!findc)
+ 		{
+@@ -2243,7 +2221,8 @@
+ 	 *   inquote if the number of quotes in a line is even, unless this
+ 	 *   line or the previous one ends in a '\'.  Complicated, isn't it?
+ 	 */
+-	switch (c = linep[pos.col])
++	c = PTR2CHAR(linep + pos.col);
++	switch (c)
+ 	{
+ 	case NUL:
+ 	    /* at end of line without trailing backslash, reset inquote */
+@@ -2385,24 +2364,24 @@
+     {
+ 	if (vim_strchr(p, ';') != NULL) /* there may be comments */
+ 	{
+-	    int instr = FALSE;	/* inside of string */
++	    int in_str = FALSE;	/* inside of string */
+ 
+ 	    p = line;		/* scan from start */
+ 	    while ((p = vim_strpbrk(p, (char_u *)"\";")) != NULL)
+ 	    {
+ 		if (*p == '"')
+ 		{
+-		    if (instr)
++		    if (in_str)
+ 		    {
+ 			if (*(p - 1) != '\\') /* skip escaped quote */
+-			    instr = FALSE;
++			    in_str = FALSE;
+ 		    }
+ 		    else if (p == line || ((p - line) >= 2
+ 				      /* skip #\" form */
+ 				      && *(p - 1) != '\\' && *(p - 2) != '#'))
+-			instr = TRUE;
++			in_str = TRUE;
+ 		}
+-		else if (!instr && ((p - line) < 2
++		else if (!in_str && ((p - line) < 2
+ 				    || (*(p - 1) != '\\' && *(p - 2) != '#')))
+ 		    break;	/* found! */
+ 		++p;
+@@ -2452,26 +2431,27 @@
+      * Only show match for chars in the 'matchpairs' option.
+      */
+     /* 'matchpairs' is "x:y,x:y" */
+-    for (p = curbuf->b_p_mps; *p != NUL; p += 2)
++    for (p = curbuf->b_p_mps; *p != NUL; ++p)
+     {
+ #ifdef FEAT_RIGHTLEFT
+-	if (*p == c && (curwin->w_p_rl ^ p_ri))
++	if (PTR2CHAR(p) == c && (curwin->w_p_rl ^ p_ri))
+ 	    break;
+ #endif
+-	p += 2;
+-	if (*p == c
++	p += MB_PTR2LEN(p) + 1;
++	if (PTR2CHAR(p) == c
+ #ifdef FEAT_RIGHTLEFT
+ 		&& !(curwin->w_p_rl ^ p_ri)
+ #endif
+ 	   )
+ 	    break;
+-	if (p[1] != ',')
++	p += MB_PTR2LEN(p);
++	if (*p == NUL)
+ 	    return;
+     }
+ 
+     if ((lpos = findmatch(NULL, NUL)) == NULL)	    /* no match, so beep */
+ 	vim_beep();
+-    else if (lpos->lnum >= curwin->w_topline)
++    else if (lpos->lnum >= curwin->w_topline && lpos->lnum < curwin->w_botline)
+     {
+ 	if (!curwin->w_p_wrap)
+ 	    getvcol(curwin, lpos, NULL, &vcol, NULL);
+@@ -2484,8 +2464,8 @@
+ 	    save_siso = p_siso;
+ 	    /* Handle "$" in 'cpo': If the ')' is typed on top of the "$",
+ 	     * stop displaying the "$". */
+-	    if (dollar_vcol > 0 && dollar_vcol == curwin->w_virtcol)
+-		dollar_vcol = 0;
++	    if (dollar_vcol >= 0 && dollar_vcol == curwin->w_virtcol)
++		dollar_vcol = -1;
+ 	    ++curwin->w_virtcol;	/* do display ')' just before "$" */
+ 	    update_screen(VALID);	/* show the new char first */
+ 
+@@ -3403,7 +3383,7 @@
+ 
+ #ifdef FEAT_VISUAL
+     /*
+-     * When visual area is bigger than one character: Extend it.
++     * When the Visual area is bigger than one character: Extend it.
+      */
+     if (VIsual_active && !equalpos(start_pos, VIsual))
+     {
+@@ -3491,8 +3471,8 @@
+ #endif
+ 
+     /*
+-     * If cursor started on blank, check if it is just before the start of the
+-     * next sentence.
++     * If the cursor started on a blank, check if it is just before the start
++     * of the next sentence.
+      */
+     while (c = gchar_pos(&pos), vim_iswhite(c))	/* vim_iswhite() is a macro */
+ 	incl(&pos);
+@@ -3541,7 +3521,7 @@
+ #ifdef FEAT_VISUAL
+     if (VIsual_active)
+     {
+-	/* avoid getting stuck with "is" on a single space before a sent. */
++	/* Avoid getting stuck with "is" on a single space before a sentence. */
+ 	if (equalpos(start_pos, curwin->w_cursor))
+ 	    goto extend;
+ 	if (*p_sel == 'e')
+@@ -3566,7 +3546,7 @@
+ 
+ /*
+  * Find block under the cursor, cursor at end.
+- * "what" and "other" are two matching parenthesis/paren/etc.
++ * "what" and "other" are two matching parenthesis/brace/etc.
+  */
+     int
+ current_block(oap, count, include, what, other)
+@@ -3901,7 +3881,7 @@
+ 	curwin->w_cursor = old_pos;
+ 	goto theend;
+     }
+-    spat = alloc(len + 29);
++    spat = alloc(len + 31);
+     epat = alloc(len + 9);
+     if (spat == NULL || epat == NULL)
+     {
+@@ -3910,7 +3890,7 @@
+ 	curwin->w_cursor = old_pos;
+ 	goto theend;
+     }
+-    sprintf((char *)spat, "<%.*s\\%%(\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
++    sprintf((char *)spat, "<%.*s\\>\\%%(\\s\\_[^>]\\{-}[^/]>\\|>\\)\\c", len, p);
+     sprintf((char *)epat, "</%.*s>\\c", len, p);
+ 
+     r = do_searchpair(spat, (char_u *)"", epat, FORWARD, (char_u *)"",
+@@ -4508,6 +4488,203 @@
+ 
+ #endif /* FEAT_TEXTOBJ */
+ 
++#if defined(FEAT_VISUAL) || defined(PROTO)
++static int is_zerowidth __ARGS((char_u *pattern));
++
++/*
++ * Find next search match under cursor, cursor at end.
++ * Used while an operator is pending, and in Visual mode.
++ * TODO: redo only works when used in operator pending mode
++ */
++    int
++current_search(count, forward)
++    long	count;
++    int		forward;	/* move forward or backwards */
++{
++    pos_T	start_pos;	/* position before the pattern */
++    pos_T	orig_pos;	/* position of the cursor at beginning */
++    pos_T	pos;		/* position after the pattern */
++    int		i;
++    int		dir;
++    int		result;		/* result of various function calls */
++    char_u	old_p_ws = p_ws;
++    int		flags = 0;
++    pos_T	save_VIsual;
++    int		zerowidth = FALSE;
++
++    /* wrapping should not occur */
++    p_ws = FALSE;
++
++    /* Correct cursor when 'selection' is exclusive */
++    if (VIsual_active && *p_sel == 'e' && lt(VIsual, curwin->w_cursor))
++	dec_cursor();
++
++    if (VIsual_active)
++    {
++	orig_pos = curwin->w_cursor;
++	save_VIsual = VIsual;
++
++	pos = curwin->w_cursor;
++	start_pos = VIsual;
++
++	/* make sure, searching further will extend the match */
++	if (VIsual_active)
++	{
++	    if (forward)
++		incl(&pos);
++	    else
++		decl(&pos);
++	}
++    }
++    else
++	orig_pos = pos = start_pos = curwin->w_cursor;
++
++    /* Is the pattern is zero-width? */
++    zerowidth = is_zerowidth(spats[last_idx].pat);
++    if (zerowidth == -1)
++	return FAIL;
++
++    /*
++     * The trick is to first search backwards and then search forward again,
++     * so that a match at the current cursor position will be correctly
++     * captured.
++     */
++    for (i = 0; i < 2; i++)
++    {
++	if (forward)
++	    dir = i;
++	else
++	    dir = !i;
++
++	flags = 0;
++	if (!dir && !zerowidth)
++	    flags = SEARCH_END;
++
++	result = searchit(curwin, curbuf, &pos, (dir ? FORWARD : BACKWARD),
++		spats[last_idx].pat, (long) (i ? count : 1),
++		SEARCH_KEEP | flags, RE_SEARCH, 0, NULL);
++
++	/* First search may fail, but then start searching from the
++	 * beginning of the file (cursor might be on the search match)
++	 * except when Visual mode is active, so that extending the visual
++	 * selection works. */
++	if (!result && i) /* not found, abort */
++	{
++	    curwin->w_cursor = orig_pos;
++	    if (VIsual_active)
++		VIsual = save_VIsual;
++	    p_ws = old_p_ws;
++	    return FAIL;
++	}
++	else if (!i && !result)
++	{
++	    if (forward) /* try again from start of buffer */
++	    {
++		clearpos(&pos);
++	    }
++	    else /* try again from end of buffer */
++	    {
++		/* searching backwards, so set pos to last line and col */
++		pos.lnum = curwin->w_buffer->b_ml.ml_line_count;
++		pos.col  = (colnr_T)STRLEN(
++				ml_get(curwin->w_buffer->b_ml.ml_line_count));
++	    }
++	}
++
++    }
++
++    start_pos = pos;
++    flags = forward ? SEARCH_END : 0;
++
++    /* move to match, except for zero-width matches, in which case, we are
++     * already on the next match */
++    if (!zerowidth)
++	result = searchit(curwin, curbuf, &pos, (forward ? FORWARD : BACKWARD),
++	    spats[last_idx].pat, 0L, flags | SEARCH_KEEP, RE_SEARCH, 0, NULL);
++
++    if (!VIsual_active)
++	VIsual = start_pos;
++
++    p_ws = old_p_ws;
++    curwin->w_cursor = pos;
++    VIsual_active = TRUE;
++    VIsual_mode = 'v';
++
++    if (VIsual_active)
++    {
++	redraw_curbuf_later(INVERTED);	/* update the inversion */
++	if (*p_sel == 'e')
++	{
++	    /* Correction for exclusive selection depends on the direction. */
++	    if (forward && ltoreq(VIsual, curwin->w_cursor))
++		inc_cursor();
++	    else if (!forward && ltoreq(curwin->w_cursor, VIsual))
++		inc(&VIsual);
++	}
++
++    }
++
++#ifdef FEAT_FOLDING
++    if (fdo_flags & FDO_SEARCH && KeyTyped)
++	foldOpenCursor();
++#endif
++
++    may_start_select('c');
++#ifdef FEAT_MOUSE
++    setmouse();
++#endif
++#ifdef FEAT_CLIPBOARD
++    /* Make sure the clipboard gets updated.  Needed because start and
++     * end are still the same, and the selection needs to be owned */
++    clip_star.vmode = NUL;
++#endif
++    redraw_curbuf_later(INVERTED);
++    showmode();
++
++    return OK;
++}
++
++/*
++ * Check if the pattern is zero-width.
++ * Returns TRUE, FALSE or -1 for failure.
++ */
++    static int
++is_zerowidth(pattern)
++    char_u	*pattern;
++{
++    regmmatch_T	regmatch;
++    int		nmatched = 0;
++    int		result = -1;
++    pos_T	pos;
++    int		save_called_emsg = called_emsg;
++
++    if (search_regcomp(pattern, RE_SEARCH, RE_SEARCH,
++					      SEARCH_KEEP, &regmatch) == FAIL)
++	return -1;
++
++    /* move to match */
++    clearpos(&pos);
++    if (searchit(curwin, curbuf, &pos, FORWARD, spats[last_idx].pat, 1,
++				     SEARCH_KEEP, RE_SEARCH, 0, NULL) != FAIL)
++    {
++	/* Zero-width pattern should match somewhere, then we can check if
++	 * start and end are in the same position. */
++	called_emsg = FALSE;
++	nmatched = vim_regexec_multi(&regmatch, curwin, curbuf,
++						  pos.lnum, (colnr_T)0, NULL);
++
++	if (!called_emsg)
++	    result = (nmatched != 0
++		&& regmatch.startpos[0].lnum == regmatch.endpos[0].lnum
++		&& regmatch.startpos[0].col == regmatch.endpos[0].col);
++    }
++
++    called_emsg |= save_called_emsg;
++    vim_free(regmatch.regprog);
++    return result;
++}
++#endif /* FEAT_VISUAL */
++
+ #if defined(FEAT_LISP) || defined(FEAT_CINDENT) || defined(FEAT_TEXTOBJ) \
+ 	|| defined(PROTO)
+ /*
+@@ -4527,7 +4704,7 @@
+ #if defined(FEAT_FIND_ID) || defined(PROTO)
+ /*
+  * Find identifiers or defines in included files.
+- * if p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
++ * If p_ic && (compl_cont_status & CONT_SOL) then ptr must be in lowercase.
+  */
+     void
+ find_pattern_in_path(ptr, dir, len, whole, skip_comments,
+@@ -4573,9 +4750,6 @@
+     char_u	*already = NULL;
+     char_u	*startp = NULL;
+     char_u	*inc_opt = NULL;
+-#ifdef RISCOS
+-    int		previous_munging = __riscosify_control;
+-#endif
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+     win_T	*curwin_save = NULL;
+ #endif
+@@ -4588,11 +4762,6 @@
+     if (file_line == NULL)
+ 	return;
+ 
+-#ifdef RISCOS
+-    /* UnixLib knows best how to munge c file names - turn munging back on. */
+-    int __riscosify_control = 0;
+-#endif
+-
+     if (type != CHECK_PATH && type != FIND_DEFINE
+ #ifdef FEAT_INS_EXPAND
+ 	/* when CONT_SOL is set compare "ptr" with the beginning of the line
+@@ -4731,17 +4900,33 @@
+ 			 * Isolate the file name.
+ 			 * Include the surrounding "" or <> if present.
+ 			 */
+-			for (p = incl_regmatch.endp[0]; !vim_isfilec(*p); p++)
+-			    ;
+-			for (i = 0; vim_isfilec(p[i]); i++)
+-			    ;
++			if (inc_opt != NULL
++				   && strstr((char *)inc_opt, "\\zs") != NULL)
++			{
++			    /* pattern contains \zs, use the match */
++			    p = incl_regmatch.startp[0];
++			    i = (int)(incl_regmatch.endp[0]
++						   - incl_regmatch.startp[0]);
++			}
++			else
++			{
++			    /* find the file name after the end of the match */
++			    for (p = incl_regmatch.endp[0];
++						  *p && !vim_isfilec(*p); p++)
++				;
++			    for (i = 0; vim_isfilec(p[i]); i++)
++				;
++			}
++
+ 			if (i == 0)
+ 			{
+ 			    /* Nothing found, use the rest of the line. */
+ 			    p = incl_regmatch.endp[0];
+ 			    i = (int)STRLEN(p);
+ 			}
+-			else
++			/* Avoid checking before the start of the line, can
++			 * happen if \zs appears in the regexp. */
++			else if (p > line)
+ 			{
+ 			    if (p[-1] == '"' || p[-1] == '<')
+ 			    {
+@@ -4892,7 +5077,7 @@
+ #ifdef FEAT_COMMENTS
+ 			if ((*line != '#' ||
+ 				STRNCMP(skipwhite(line + 1), "define", 6) != 0)
+-				&& get_leader_len(line, NULL, FALSE))
++				&& get_leader_len(line, NULL, FALSE, TRUE))
+ 			    matched = FALSE;
+ 
+ 			/*
+@@ -5075,9 +5260,7 @@
+ 			if (win_split(0, 0) == FAIL)
+ #endif
+ 			    break;
+-#ifdef FEAT_SCROLLBIND
+-			curwin->w_p_scb = FALSE;
+-#endif
++			RESET_BINDING(curwin);
+ 		    }
+ 		    if (depth == -1)
+ 		    {
+@@ -5134,7 +5317,7 @@
+ 		    && !(compl_cont_status & CONT_SOL)
+ #endif
+ 		    && *startp != NUL
+-		    && *(p = startp + 1) != NUL)
++		    && *(p = startp + MB_PTR2LEN(startp)) != NUL)
+ 		goto search_line;
+ 	}
+ 	line_breakcheck();
+@@ -5222,11 +5405,6 @@
+     vim_free(regmatch.regprog);
+     vim_free(incl_regmatch.regprog);
+     vim_free(def_regmatch.regprog);
+-
+-#ifdef RISCOS
+-   /* Restore previous file munging state. */
+-    __riscosify_control = previous_munging;
+-#endif
+ }
+ 
+     static void
+diff -Naur vim73.orig/src/sha256.c vim73/src/sha256.c
+--- vim73.orig/src/sha256.c	2010-07-14 14:49:46.000000000 +0000
++++ vim73/src/sha256.c	2013-06-07 17:07:35.818906392 +0000
+@@ -7,9 +7,11 @@
+  * See README.txt for an overview of the Vim source code.
+  *
+  * FIPS-180-2 compliant SHA-256 implementation
+- * GPL by Christophe Devine.
++ * GPL by Christophe Devine, applies to older version.
+  * Modified for md5deep, in public domain.
+  * Modified For Vim, Mohsin Ahmed, http://www.cs.albany.edu/~mosh
++ * Mohsin Ahmed states this work is distributed under the VIM License or GPL,
++ * at your choice.
+  *
+  * Vim specific notes:
+  * Functions exported by this file:
+@@ -271,14 +273,13 @@
+ #endif /* FEAT_CRYPT || FEAT_PERSISTENT_UNDO */
+ 
+ #if defined(FEAT_CRYPT) || defined(PROTO)
+-static char_u *sha256_bytes __ARGS((char_u *buf, int buf_len, char_u *salt, int salt_len));
+ static unsigned int get_some_time __ARGS((void));
+ 
+ /*
+  * Returns hex digest of "buf[buf_len]" in a static array.
+  * if "salt" is not NULL also do "salt[salt_len]".
+  */
+-    static char_u *
++    char_u *
+ sha256_bytes(buf, buf_len, salt, salt_len)
+     char_u *buf;
+     int    buf_len;
+diff -Naur vim73.orig/src/spell.c vim73/src/spell.c
+--- vim73.orig/src/spell.c	2010-08-01 13:43:01.000000000 +0000
++++ vim73/src/spell.c	2013-06-07 17:07:35.895572839 +0000
+@@ -303,10 +303,6 @@
+  *			    few bytes as possible, see offset2bytes())
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ #if defined(FEAT_SPELL) || defined(PROTO)
+@@ -327,6 +323,16 @@
+ typedef long idx_T;
+ #endif
+ 
++#ifdef VMS
++# define SPL_FNAME_TMPL  "%s_%s.spl"
++# define SPL_FNAME_ADD   "_add."
++# define SPL_FNAME_ASCII "_ascii."
++#else
++# define SPL_FNAME_TMPL  "%s.%s.spl"
++# define SPL_FNAME_ADD   ".add."
++# define SPL_FNAME_ASCII ".ascii."
++#endif
++
+ /* Flags used for a word.  Only the lowest byte can be used, the region byte
+  * comes above it. */
+ #define WF_REGION   0x01	/* region byte follows */
+@@ -2471,14 +2477,24 @@
+ 	 * Find the first spell file for "lang" in 'runtimepath' and load it.
+ 	 */
+ 	vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
+-					"spell/%s.%s.spl", lang, spell_enc());
++#ifdef VMS
++					"spell/%s_%s.spl",
++#else
++					"spell/%s.%s.spl",
++#endif
++							   lang, spell_enc());
+ 	r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+ 
+ 	if (r == FAIL && *sl.sl_lang != NUL)
+ 	{
+ 	    /* Try loading the ASCII version. */
+ 	    vim_snprintf((char *)fname_enc, sizeof(fname_enc) - 5,
+-						  "spell/%s.ascii.spl", lang);
++#ifdef VMS
++						  "spell/%s_ascii.spl",
++#else
++						  "spell/%s.ascii.spl",
++#endif
++									lang);
+ 	    r = do_in_runtimepath(fname_enc, FALSE, spell_load_cb, &sl);
+ 
+ #ifdef FEAT_AUTOCMD
+@@ -2496,7 +2512,12 @@
+ 
+     if (r == FAIL)
+     {
+-	smsg((char_u *)_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
++	smsg((char_u *)
++#ifdef VMS
++	_("Warning: Cannot find word list \"%s_%s.spl\" or \"%s_ascii.spl\""),
++#else
++	_("Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""),
++#endif
+ 						     lang, spell_enc(), lang);
+     }
+     else if (sl.sl_slang != NULL)
+@@ -2530,7 +2551,7 @@
+ int_wordlist_spl(fname)
+     char_u	    *fname;
+ {
+-    vim_snprintf((char *)fname, MAXPATHL, "%s.%s.spl",
++    vim_snprintf((char *)fname, MAXPATHL, SPL_FNAME_TMPL,
+ 						  int_wordlist, spell_enc());
+ }
+ 
+@@ -2785,8 +2806,8 @@
+ 	if (lp->sl_fname == NULL)
+ 	    goto endFAIL;
+ 
+-	/* Check for .add.spl. */
+-	lp->sl_add = strstr((char *)gettail(fname), ".add.") != NULL;
++	/* Check for .add.spl (_add.spl for VMS). */
++	lp->sl_add = strstr((char *)gettail(fname), SPL_FNAME_ADD) != NULL;
+     }
+     else
+ 	lp = old_lp;
+@@ -3613,7 +3634,7 @@
+ 	}
+ 
+ 	/* Add all flags to "sl_compallflags". */
+-	if (vim_strchr((char_u *)"+*[]/", c) == NULL
++	if (vim_strchr((char_u *)"?*+[]/", c) == NULL
+ 		&& !byte_in_str(slang->sl_compallflags, c))
+ 	{
+ 	    *ap++ = c;
+@@ -3643,7 +3664,7 @@
+ 	/* Copy flag to "sl_comprules", unless we run into a wildcard. */
+ 	if (crp != NULL)
+ 	{
+-	    if (c == '+' || c == '*')
++	    if (c == '?' || c == '+' || c == '*')
+ 	    {
+ 		vim_free(slang->sl_comprules);
+ 		slang->sl_comprules = NULL;
+@@ -3661,8 +3682,8 @@
+ 	}
+ 	else		    /* normal char, "[abc]" and '*' are copied as-is */
+ 	{
+-	    if (c == '+' || c == '~')
+-		*pp++ = '\\';	    /* "a+" becomes "a\+" */
++	    if (c == '?' || c == '+' || c == '~')
++		*pp++ = '\\';	    /* "a?" becomes "a\?", "a+" becomes "a\+" */
+ #ifdef FEAT_MBYTE
+ 	    if (enc_utf8)
+ 		pp += mb_char2bytes(c, pp);
+@@ -4207,7 +4228,7 @@
+     ga_init2(&ga, sizeof(langp_T), 2);
+     clear_midword(wp);
+ 
+-    /* Make a copy of 'spellang', the SpellFileMissing autocommands may change
++    /* Make a copy of 'spelllang', the SpellFileMissing autocommands may change
+      * it under our fingers. */
+     spl_copy = vim_strsave(wp->w_s->b_p_spl);
+     if (spl_copy == NULL)
+@@ -4679,7 +4700,7 @@
+     buf_T	*buf;
+     char_u	fname[MAXPATHL];
+ 
+-    /* Go through all buffers and handle 'spelllang'. */ //<VN>
++    /* Go through all buffers and handle 'spelllang'. <VN> */
+     for (buf = firstbuf; buf != NULL; buf = buf->b_next)
+ 	ga_clear(&buf->b_s.b_langp);
+ 
+@@ -4700,8 +4721,6 @@
+ 	int_wordlist = NULL;
+     }
+ 
+-    init_spell_chartab();
+-
+     vim_free(repl_to);
+     repl_to = NULL;
+     vim_free(repl_from);
+@@ -4930,6 +4949,8 @@
+ 
+     sblock_T	*si_blocks;	/* memory blocks used */
+     long	si_blocks_cnt;	/* memory blocks allocated */
++    int		si_did_emsg;	/* TRUE when ran out of memory */
++
+     long	si_compress_cnt;    /* words to add before lowering
+ 				       compression limit */
+     wordnode_T	*si_first_free; /* List of nodes that have been freed during
+@@ -4951,7 +4972,7 @@
+     char_u	*si_info;	/* info text chars or NULL  */
+     int		si_region_count; /* number of regions supported (1 when there
+ 				    are no regions) */
+-    char_u	si_region_name[16]; /* region names; used only if
++    char_u	si_region_name[17]; /* region names; used only if
+ 				     * si_region_count > 1) */
+ 
+     garray_T	si_rep;		/* list of fromto_T entries from REP lines */
+@@ -4997,7 +5018,6 @@
+ static int str_equal __ARGS((char_u *s1, char_u	*s2));
+ static void add_fromto __ARGS((spellinfo_T *spin, garray_T *gap, char_u	*from, char_u *to));
+ static int sal_to_bool __ARGS((char_u *s));
+-static int has_non_ascii __ARGS((char_u *s));
+ static void spell_free_aff __ARGS((afffile_T *aff));
+ static int spell_read_dic __ARGS((spellinfo_T *spin, char_u *fname, afffile_T *affile));
+ static int get_affix_flags __ARGS((afffile_T *affile, char_u *afflist));
+@@ -5027,7 +5047,7 @@
+ static int offset2bytes __ARGS((int nr, char_u *buf));
+ static int bytes2offset __ARGS((char_u **pp));
+ static void sug_write __ARGS((spellinfo_T *spin, char_u *fname));
+-static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int overwrite, int added_word));
++static void mkspell __ARGS((int fcount, char_u **fnames, int ascii, int over_write, int added_word));
+ static void spell_message __ARGS((spellinfo_T *spin, char_u *str));
+ static void init_spellfile __ARGS((void));
+ 
+@@ -5456,21 +5476,25 @@
+ 	    }
+ 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDRULE", 2))
+ 	    {
+-		/* Concatenate this string to previously defined ones, using a
+-		 * slash to separate them. */
+-		l = (int)STRLEN(items[1]) + 1;
+-		if (compflags != NULL)
+-		    l += (int)STRLEN(compflags) + 1;
+-		p = getroom(spin, l, FALSE);
+-		if (p != NULL)
++		/* Don't use the first rule if it is a number. */
++		if (compflags != NULL || *skipdigits(items[1]) != NUL)
+ 		{
++		    /* Concatenate this string to previously defined ones,
++		     * using a slash to separate them. */
++		    l = (int)STRLEN(items[1]) + 1;
+ 		    if (compflags != NULL)
++			l += (int)STRLEN(compflags) + 1;
++		    p = getroom(spin, l, FALSE);
++		    if (p != NULL)
+ 		    {
+-			STRCPY(p, compflags);
+-			STRCAT(p, "/");
++			if (compflags != NULL)
++			{
++			    STRCPY(p, compflags);
++			    STRCAT(p, "/");
++			}
++			STRCAT(p, items[1]);
++			compflags = p;
+ 		    }
+-		    STRCAT(p, items[1]);
+-		    compflags = p;
+ 		}
+ 	    }
+ 	    else if (is_aff_rule(items, itemcnt, "COMPOUNDWORDMAX", 2)
+@@ -6270,7 +6294,7 @@
+ 
+     for (p = compflags; *p != NUL; )
+     {
+-	if (vim_strchr((char_u *)"/*+[]", *p) != NULL)
++	if (vim_strchr((char_u *)"/?*+[]", *p) != NULL)
+ 	    /* Copy non-flag characters directly. */
+ 	    *tp++ = *p++;
+ 	else
+@@ -6299,7 +6323,7 @@
+ 		    {
+ 			check_renumber(spin);
+ 			id = spin->si_newcompID--;
+-		    } while (vim_strchr((char_u *)"/+*[]\\-^", id) != NULL);
++		    } while (vim_strchr((char_u *)"/?*+[]\\-^", id) != NULL);
+ 		    ci->ci_newID = id;
+ 		    hash_add(&aff->af_comp, ci->ci_key);
+ 		}
+@@ -6458,23 +6482,6 @@
+ }
+ 
+ /*
+- * Return TRUE if string "s" contains a non-ASCII character (128 or higher).
+- * When "s" is NULL FALSE is returned.
+- */
+-    static int
+-has_non_ascii(s)
+-    char_u	*s;
+-{
+-    char_u	*p;
+-
+-    if (s != NULL)
+-	for (p = s; *p != NUL; ++p)
+-	    if (*p >= 128)
+-		return TRUE;
+-    return FALSE;
+-}
+-
+-/*
+  * Free the structure filled by spell_read_aff().
+  */
+     static void
+@@ -6930,7 +6937,7 @@
+ 			    if (ae->ae_add == NULL)
+ 				*newword = NUL;
+ 			    else
+-				STRCPY(newword, ae->ae_add);
++				vim_strncpy(newword, ae->ae_add, MAXWLEN - 1);
+ 			    p = word;
+ 			    if (ae->ae_chop != NULL)
+ 			    {
+@@ -6951,7 +6958,7 @@
+ 			else
+ 			{
+ 			    /* suffix: chop/add at the end of the word */
+-			    STRCPY(newword, word);
++			    vim_strncpy(newword, word, MAXWLEN - 1);
+ 			    if (ae->ae_chop != NULL)
+ 			    {
+ 				/* Remove chop string. */
+@@ -7343,10 +7350,21 @@
+ 
+     if (bl == NULL || bl->sb_used + len > SBLOCKSIZE)
+     {
+-	/* Allocate a block of memory. This is not freed until much later. */
+-	bl = (sblock_T *)alloc_clear((unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
++	if (len >= SBLOCKSIZE)
++	    bl = NULL;
++	else
++	    /* Allocate a block of memory. It is not freed until much later. */
++	    bl = (sblock_T *)alloc_clear(
++				   (unsigned)(sizeof(sblock_T) + SBLOCKSIZE));
+ 	if (bl == NULL)
++	{
++	    if (!spin->si_did_emsg)
++	    {
++		EMSG(_("E845: Insufficient memory, word list will be incomplete"));
++		spin->si_did_emsg = TRUE;
++	    }
+ 	    return NULL;
++	}
+ 	bl->sb_next = spin->si_blocks;
+ 	spin->si_blocks = bl;
+ 	bl->sb_used = 0;
+@@ -7361,6 +7379,7 @@
+ 
+ /*
+  * Make a copy of a string into memory allocated with getroom().
++ * Returns NULL when out of memory.
+  */
+     static char_u *
+ getroom_save(spin, s)
+@@ -7395,6 +7414,7 @@
+ 
+ /*
+  * Allocate the root of a word tree.
++ * Returns NULL when out of memory.
+  */
+     static wordnode_T *
+ wordtree_alloc(spin)
+@@ -7625,7 +7645,7 @@
+ 
+ 	/* Compress both trees.  Either they both have many nodes, which makes
+ 	 * compression useful, or one of them is small, which means
+-	 * compression goes fast.  But when filling the souldfold word tree
++	 * compression goes fast.  But when filling the soundfold word tree
+ 	 * there is no keep-case tree. */
+ 	wordtree_compress(spin, spin->si_foldroot);
+ 	if (affixID >= 0)
+@@ -7679,6 +7699,7 @@
+ /*
+  * Get a wordnode_T, either from the list of previously freed nodes or
+  * allocate a new one.
++ * Returns NULL when out of memory.
+  */
+     static wordnode_T *
+ get_wordnode(spin)
+@@ -7696,7 +7717,8 @@
+ 	--spin->si_free_count;
+     }
+ #ifdef SPELL_PRINTTREE
+-    n->wn_nr = ++spin->si_wordnode_nr;
++    if (n != NULL)
++	n->wn_nr = ++spin->si_wordnode_nr;
+ #endif
+     return n;
+ }
+@@ -8531,7 +8553,7 @@
+     }
+ 
+     /* Expand all the remaining arguments (e.g., $VIMRUNTIME). */
+-    if (get_arglist_exp(arg, &fcount, &fnames) == OK)
++    if (get_arglist_exp(arg, &fcount, &fnames, FALSE) == OK)
+     {
+ 	mkspell(fcount, fnames, ascii, eap->forceit, FALSE);
+ 	FreeWild(fcount, fnames);
+@@ -8548,7 +8570,7 @@
+     spellinfo_T	*spin;
+     char_u	*wfname;
+ {
+-    char_u	fname[MAXPATHL];
++    char_u	*fname = NULL;
+     int		len;
+     slang_T	*slang;
+     int		free_slang = FALSE;
+@@ -8612,13 +8634,17 @@
+      * Write the .sug file.
+      * Make the file name by changing ".spl" to ".sug".
+      */
+-    STRCPY(fname, wfname);
++    fname = alloc(MAXPATHL);
++    if (fname == NULL)
++	goto theend;
++    vim_strncpy(fname, wfname, MAXPATHL - 1);
+     len = (int)STRLEN(fname);
+     fname[len - 2] = 'u';
+     fname[len - 1] = 'g';
+     sug_write(spin, fname);
+ 
+ theend:
++    vim_free(fname);
+     if (free_slang)
+ 	slang_free(slang);
+     free_blocks(spin->si_blocks);
+@@ -8645,7 +8671,7 @@
+     unsigned	words_done = 0;
+     int		wordcount[MAXWLEN];
+ 
+-    /* We use si_foldroot for the souldfolded trie. */
++    /* We use si_foldroot for the soundfolded trie. */
+     spin->si_foldroot = wordtree_alloc(spin);
+     if (spin->si_foldroot == NULL)
+ 	return FAIL;
+@@ -9057,15 +9083,15 @@
+  * and ".spl" is appended to make the output file name.
+  */
+     static void
+-mkspell(fcount, fnames, ascii, overwrite, added_word)
++mkspell(fcount, fnames, ascii, over_write, added_word)
+     int		fcount;
+     char_u	**fnames;
+     int		ascii;		    /* -ascii argument given */
+-    int		overwrite;	    /* overwrite existing output file */
++    int		over_write;	    /* overwrite existing output file */
+     int		added_word;	    /* invoked through "zg" */
+ {
+-    char_u	fname[MAXPATHL];
+-    char_u	wfname[MAXPATHL];
++    char_u	*fname = NULL;
++    char_u	*wfname;
+     char_u	**innames;
+     int		incount;
+     afffile_T	*(afile[8]);
+@@ -9093,6 +9119,10 @@
+     innames = &fnames[1];
+     incount = fcount - 1;
+ 
++    wfname = alloc(MAXPATHL);
++    if (wfname == NULL)
++	return;
++
+     if (fcount >= 1)
+     {
+ 	len = (int)STRLEN(fnames[0]);
+@@ -9102,32 +9132,32 @@
+ 	     * "path/en.latin1.add.spl". */
+ 	    innames = &fnames[0];
+ 	    incount = 1;
+-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.spl", fnames[0]);
++	    vim_snprintf((char *)wfname, MAXPATHL, "%s.spl", fnames[0]);
+ 	}
+ 	else if (fcount == 1)
+ 	{
+ 	    /* For ":mkspell path/vim" output file is "path/vim.latin1.spl". */
+ 	    innames = &fnames[0];
+ 	    incount = 1;
+-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
+-			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
++	    vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
++		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ 	}
+ 	else if (len > 4 && STRCMP(fnames[0] + len - 4, ".spl") == 0)
+ 	{
+ 	    /* Name ends in ".spl", use as the file name. */
+-	    vim_strncpy(wfname, fnames[0], sizeof(wfname) - 1);
++	    vim_strncpy(wfname, fnames[0], MAXPATHL - 1);
+ 	}
+ 	else
+ 	    /* Name should be language, make the file name from it. */
+-	    vim_snprintf((char *)wfname, sizeof(wfname), "%s.%s.spl", fnames[0],
+-			     spin.si_ascii ? (char_u *)"ascii" : spell_enc());
++	    vim_snprintf((char *)wfname, MAXPATHL, SPL_FNAME_TMPL,
++		  fnames[0], spin.si_ascii ? (char_u *)"ascii" : spell_enc());
+ 
+ 	/* Check for .ascii.spl. */
+-	if (strstr((char *)gettail(wfname), ".ascii.") != NULL)
++	if (strstr((char *)gettail(wfname), SPL_FNAME_ASCII) != NULL)
+ 	    spin.si_ascii = TRUE;
+ 
+ 	/* Check for .add.spl. */
+-	if (strstr((char *)gettail(wfname), ".add.") != NULL)
++	if (strstr((char *)gettail(wfname), SPL_FNAME_ADD) != NULL)
+ 	    spin.si_add = TRUE;
+     }
+ 
+@@ -9141,17 +9171,21 @@
+     {
+ 	/* Check for overwriting before doing things that may take a lot of
+ 	 * time. */
+-	if (!overwrite && mch_stat((char *)wfname, &st) >= 0)
++	if (!over_write && mch_stat((char *)wfname, &st) >= 0)
+ 	{
+ 	    EMSG(_(e_exists));
+-	    return;
++	    goto theend;
+ 	}
+ 	if (mch_isdir(wfname))
+ 	{
+ 	    EMSG2(_(e_isadir2), wfname);
+-	    return;
++	    goto theend;
+ 	}
+ 
++	fname = alloc(MAXPATHL);
++	if (fname == NULL)
++	    goto theend;
++
+ 	/*
+ 	 * Init the aff and dic pointers.
+ 	 * Get the region names if there are more than 2 arguments.
+@@ -9167,7 +9201,7 @@
+ 						|| innames[i][len - 3] != '_')
+ 		{
+ 		    EMSG2(_("E755: Invalid region in %s"), innames[i]);
+-		    return;
++		    goto theend;
+ 		}
+ 		spin.si_region_name[i * 2] = TOLOWER_ASC(innames[i][len - 2]);
+ 		spin.si_region_name[i * 2 + 1] =
+@@ -9184,7 +9218,7 @@
+ 		|| spin.si_prefroot == NULL)
+ 	{
+ 	    free_blocks(spin.si_blocks);
+-	    return;
++	    goto theend;
+ 	}
+ 
+ 	/* When not producing a .add.spl file clear the character table when
+@@ -9205,7 +9239,7 @@
+ 	    spin.si_conv.vc_type = CONV_NONE;
+ 	    spin.si_region = 1 << i;
+ 
+-	    vim_snprintf((char *)fname, sizeof(fname), "%s.aff", innames[i]);
++	    vim_snprintf((char *)fname, MAXPATHL, "%s.aff", innames[i]);
+ 	    if (mch_stat((char *)fname, &st) >= 0)
+ 	    {
+ 		/* Read the .aff file.  Will init "spin->si_conv" based on the
+@@ -9216,7 +9250,7 @@
+ 		else
+ 		{
+ 		    /* Read the .dic file and store the words in the trees. */
+-		    vim_snprintf((char *)fname, sizeof(fname), "%s.dic",
++		    vim_snprintf((char *)fname, MAXPATHL, "%s.dic",
+ 								  innames[i]);
+ 		    if (spell_read_dic(&spin, fname, afile[i]) == FAIL)
+ 			error = TRUE;
+@@ -9298,6 +9332,10 @@
+ 	    spell_make_sugfile(&spin, wfname);
+ 
+     }
++
++theend:
++    vim_free(fname);
++    vim_free(wfname);
+ }
+ 
+ /*
+@@ -9350,7 +9388,7 @@
+     buf_T	*buf = NULL;
+     int		new_spf = FALSE;
+     char_u	*fname;
+-    char_u	fnamebuf[MAXPATHL];
++    char_u	*fnamebuf = NULL;
+     char_u	line[MAXWLEN * 2];
+     long	fpos, fpos_next = 0;
+     int		i;
+@@ -9380,6 +9418,9 @@
+ 	    EMSG2(_(e_notset), "spellfile");
+ 	    return;
+ 	}
++	fnamebuf = alloc(MAXPATHL);
++	if (fnamebuf == NULL)
++	    return;
+ 
+ 	for (spf = curwin->w_s->b_p_spf, i = 1; *spf != NUL; ++i)
+ 	{
+@@ -9389,6 +9430,7 @@
+ 	    if (*spf == NUL)
+ 	    {
+ 		EMSGN(_("E765: 'spellfile' does not have %ld entries"), idx);
++		vim_free(fnamebuf);
+ 		return;
+ 	    }
+ 	}
+@@ -9400,6 +9442,7 @@
+ 	if (buf != NULL && bufIsChanged(buf))
+ 	{
+ 	    EMSG(_(e_bufloaded));
++	    vim_free(fnamebuf);
+ 	    return;
+ 	}
+ 
+@@ -9494,6 +9537,7 @@
+ 
+ 	redraw_all_later(SOME_VALID);
+     }
++    vim_free(fnamebuf);
+ }
+ 
+ /*
+@@ -9502,7 +9546,7 @@
+     static void
+ init_spellfile()
+ {
+-    char_u	buf[MAXPATHL];
++    char_u	*buf;
+     int		l;
+     char_u	*fname;
+     char_u	*rtp;
+@@ -9512,6 +9556,10 @@
+ 
+     if (*curwin->w_s->b_p_spl != NUL && curwin->w_s->b_langp.ga_len > 0)
+     {
++	buf = alloc(MAXPATHL);
++	if (buf == NULL)
++	    return;
++
+ 	/* Find the end of the language name.  Exclude the region.  If there
+ 	 * is a path separator remember the start of the tail. */
+ 	for (lend = curwin->w_s->b_p_spl; *lend != NUL
+@@ -9530,7 +9578,8 @@
+ 	    if (aspath)
+ 		/* Use directory of an entry with path, e.g., for
+ 		 * "/dir/lg.utf-8.spl" use "/dir". */
+-		vim_strncpy(buf, curbuf->b_s.b_p_spl, lstart - curbuf->b_s.b_p_spl - 1);
++		vim_strncpy(buf, curbuf->b_s.b_p_spl,
++					    lstart - curbuf->b_s.b_p_spl - 1);
+ 	    else
+ 		/* Copy the path from 'runtimepath' to buf[]. */
+ 		copy_option_part(&rtp, buf, MAXPATHL, ",");
+@@ -9539,13 +9588,14 @@
+ 		/* Use the first language name from 'spelllang' and the
+ 		 * encoding used in the first loaded .spl file. */
+ 		if (aspath)
+-		    vim_strncpy(buf, curbuf->b_s.b_p_spl, lend - curbuf->b_s.b_p_spl);
++		    vim_strncpy(buf, curbuf->b_s.b_p_spl,
++						  lend - curbuf->b_s.b_p_spl);
+ 		else
+ 		{
+ 		    /* Create the "spell" directory if it doesn't exist yet. */
+ 		    l = (int)STRLEN(buf);
+ 		    vim_snprintf((char *)buf + l, MAXPATHL - l, "/spell");
+-		    if (!filewritable(buf) != 2)
++		    if (filewritable(buf) != 2)
+ 			vim_mkdir(buf, 0755);
+ 
+ 		    l = (int)STRLEN(buf);
+@@ -9553,7 +9603,8 @@
+ 				 "/%.*s", (int)(lend - lstart), lstart);
+ 		}
+ 		l = (int)STRLEN(buf);
+-		fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)->lp_slang->sl_fname;
++		fname = LANGP_ENTRY(curwin->w_s->b_langp, 0)
++							 ->lp_slang->sl_fname;
+ 		vim_snprintf((char *)buf + l, MAXPATHL - l, ".%s.add",
+ 			fname != NULL
+ 			  && strstr((char *)gettail(fname), ".ascii.") != NULL
+@@ -9563,6 +9614,8 @@
+ 	    }
+ 	    aspath = FALSE;
+ 	}
++
++	vim_free(buf);
+     }
+ }
+ 
+@@ -9837,10 +9890,7 @@
+ 	{
+ 	    /* be quick for ASCII */
+ 	    if (wp->w_s->b_spell_ismw[*p])
+-	    {
+ 		s = p + 1;		/* skip a mid-word character */
+-		l = MB_BYTE2LEN(*s);
+-	    }
+ 	}
+ 	else
+ 	{
+@@ -9848,10 +9898,7 @@
+ 	    if (c < 256 ? wp->w_s->b_spell_ismw[c]
+ 		    : (wp->w_s->b_spell_ismw_mb != NULL
+ 			   && vim_strchr(wp->w_s->b_spell_ismw_mb, c) != NULL))
+-	    {
+ 		s = p + l;
+-		l = MB_BYTE2LEN(*s);
+-	    }
+ 	}
+ 
+ 	c = mb_ptr2char(s);
+@@ -10223,7 +10270,7 @@
+ 
+ 	    /* The suggested word may replace only part of the bad word, add
+ 	     * the not replaced part. */
+-	    STRCPY(wcopy, stp->st_word);
++	    vim_strncpy(wcopy, stp->st_word, MAXWLEN);
+ 	    if (sug.su_badlen > stp->st_orglen)
+ 		vim_strncpy(wcopy + stp->st_wordlen,
+ 					       sug.su_badptr + stp->st_orglen,
+@@ -11130,7 +11177,7 @@
+ 	    c = *s++;
+ 
+ #ifdef FEAT_MBYTE
+-	/* We only change ß to SS when we are certain latin1 is used.  It
++	/* We only change 0xdf to SS when we are certain latin1 is used.  It
+ 	 * would cause weird errors in other 8-bit encodings. */
+ 	if (enc_latin1like && c == 0xdf)
+ 	{
+@@ -12972,7 +13019,7 @@
+ 
+ /*
+  * Combine the list of suggestions in su->su_ga and su->su_sga.
+- * They are intwined.
++ * They are entwined.
+  */
+     static void
+ score_combine(su)
+@@ -13124,7 +13171,7 @@
+ 	pbad = badsound2;
+     }
+ 
+-    if (lendiff > 0)
++    if (lendiff > 0 && stp->st_wordlen + lendiff < MAXWLEN)
+     {
+ 	/* Add part of the bad word to the good word, so that we soundfold
+ 	 * what replaces the bad word. */
+@@ -13410,7 +13457,7 @@
+ 
+ 		/* Add a small penalty for changing the first letter from
+ 		 * lower to upper case.  Helps for "tath" -> "Kath", which is
+-		 * less common thatn "tath" -> "path".  Don't do it when the
++		 * less common than "tath" -> "path".  Don't do it when the
+ 		 * letter is the same, that has already been counted. */
+ 		gc = PTR2CHAR(p);
+ 		if (SPELL_ISUPPER(gc))
+@@ -13645,7 +13692,7 @@
+ {
+     int		m1, m2;
+ #ifdef FEAT_MBYTE
+-    char_u	buf[MB_MAXBYTES];
++    char_u	buf[MB_MAXBYTES + 1];
+     hashitem_T  *hi;
+ 
+     if (c1 >= 256)
+@@ -13811,11 +13858,8 @@
+ 		    su->su_sfmaxscore = cleanup_suggestions(gap,
+ 				      su->su_sfmaxscore, SUG_CLEAN_COUNT(su));
+ 		else
+-		{
+-		    i = su->su_maxscore;
+ 		    su->su_maxscore = cleanup_suggestions(gap,
+ 					su->su_maxscore, SUG_CLEAN_COUNT(su));
+-		}
+ 	    }
+ 	}
+     }
+@@ -13840,7 +13884,7 @@
+     for (i = gap->ga_len - 1; i >= 0; --i)
+     {
+ 	/* Need to append what follows to check for "the the". */
+-	STRCPY(longword, stp[i].st_word);
++	vim_strncpy(longword, stp[i].st_word, MAXWLEN);
+ 	len = stp[i].st_wordlen;
+ 	vim_strncpy(longword + len, su->su_badptr + stp[i].st_orglen,
+ 							       MAXWLEN - len);
+@@ -14186,7 +14230,7 @@
+ 	*t = NUL;
+     }
+     else
+-	STRCPY(word, s);
++	vim_strncpy(word, s, MAXWLEN - 1);
+ 
+     smp = (salitem_T *)slang->sl_sal.ga_data;
+ 
+@@ -14448,13 +14492,15 @@
+     int		p0 = -333;
+     int		c0;
+     int		did_white = FALSE;
++    int		wordlen;
++
+ 
+     /*
+      * Convert the multi-byte string to a wide-character string.
+      * Remove accents, if wanted.  We actually remove all non-word characters.
+      * But keep white space.
+      */
+-    n = 0;
++    wordlen = 0;
+     for (s = inword; *s != NUL; )
+     {
+ 	t = s;
+@@ -14475,12 +14521,12 @@
+ 		    continue;
+ 	    }
+ 	}
+-	word[n++] = c;
++	word[wordlen++] = c;
+     }
+-    word[n] = NUL;
++    word[wordlen] = NUL;
+ 
+     /*
+-     * This comes from Aspell phonet.cpp.
++     * This algorithm comes from Aspell phonet.cpp.
+      * Converted from C++ to C.  Added support for multi-byte chars.
+      * Changed to keep spaces.
+      */
+@@ -14665,7 +14711,7 @@
+ 			    }
+ 			if (k > k0)
+ 			    mch_memmove(word + i + k0, word + i + k,
+-				    sizeof(int) * (STRLEN(word + i + k) + 1));
++				    sizeof(int) * (wordlen - (i + k) + 1));
+ 
+ 			/* new "actual letter" */
+ 			c = word[i];
+@@ -14693,7 +14739,7 @@
+ 			    if (c != NUL)
+ 				wres[reslen++] = c;
+ 			    mch_memmove(word, word + i + 1,
+-				    sizeof(int) * (STRLEN(word + i + 1) + 1));
++				       sizeof(int) * (wordlen - (i + 1) + 1));
+ 			    i = 0;
+ 			    z0 = 1;
+ 			}
+diff -Naur vim73.orig/src/structs.h vim73/src/structs.h
+--- vim73.orig/src/structs.h	2010-08-07 14:59:27.000000000 +0000
++++ vim73/src/structs.h	2013-06-07 17:07:35.905572811 +0000
+@@ -63,15 +63,16 @@
+ 
+ #define GA_EMPTY    {0, 0, 0, 0, NULL}
+ 
+-/*
+- * This is here because regexp.h needs pos_T and below regprog_T is used.
+- */
+-#include "regexp.h"
+-
+ typedef struct window_S		win_T;
+ typedef struct wininfo_S	wininfo_T;
+ typedef struct frame_S		frame_T;
+ typedef int			scid_T;		/* script ID */
++typedef struct file_buffer	buf_T;  /* forward declaration */
++
++/*
++ * This is here because regexp.h needs pos_T and below regprog_T is used.
++ */
++#include "regexp.h"
+ 
+ /*
+  * This is here because gui.h needs the pos_T and win_T, and win_T needs gui.h
+@@ -378,6 +379,35 @@
+ typedef long		    blocknr_T;
+ 
+ /*
++ * mf_hashtab_T is a chained hashtable with blocknr_T key and arbitrary
++ * structures as items.  This is an intrusive data structure: we require
++ * that items begin with mf_hashitem_T which contains the key and linked
++ * list pointers.  List of items in each bucket is doubly-linked.
++ */
++
++typedef struct mf_hashitem_S mf_hashitem_T;
++
++struct mf_hashitem_S
++{
++    mf_hashitem_T   *mhi_next;
++    mf_hashitem_T   *mhi_prev;
++    blocknr_T	    mhi_key;
++};
++
++#define MHT_INIT_SIZE   64
++
++typedef struct mf_hashtab_S
++{
++    long_u	    mht_mask;	    /* mask used for hash value (nr of items
++				     * in array is "mht_mask" + 1) */
++    long_u	    mht_count;	    /* nr of items inserted into hashtable */
++    mf_hashitem_T   **mht_buckets;  /* points to mht_small_buckets or
++				     *dynamically allocated array */
++    mf_hashitem_T   *mht_small_buckets[MHT_INIT_SIZE];   /* initial buckets */
++    char	    mht_fixed;	    /* non-zero value forbids growth */
++} mf_hashtab_T;
++
++/*
+  * for each (previously) used block in the memfile there is one block header.
+  *
+  * The block may be linked in the used list OR in the free list.
+@@ -394,11 +424,11 @@
+ 
+ struct block_hdr
+ {
++    mf_hashitem_T bh_hashitem;      /* header for hash table and key */
++#define bh_bnum bh_hashitem.mhi_key /* block number, part of bh_hashitem */
++
+     bhdr_T	*bh_next;	    /* next block_hdr in free or used list */
+     bhdr_T	*bh_prev;	    /* previous block_hdr in used list */
+-    bhdr_T	*bh_hash_next;	    /* next block_hdr in hash list */
+-    bhdr_T	*bh_hash_prev;	    /* previous block_hdr in hash list */
+-    blocknr_T	bh_bnum;	    /* block number */
+     char_u	*bh_data;	    /* pointer to memory (for used block) */
+     int		bh_page_count;	    /* number of pages in this block */
+ 
+@@ -417,9 +447,9 @@
+ 
+ struct nr_trans
+ {
+-    NR_TRANS	*nt_next;		/* next nr_trans in hash list */
+-    NR_TRANS	*nt_prev;		/* previous nr_trans in hash list */
+-    blocknr_T	nt_old_bnum;		/* old, negative, number */
++    mf_hashitem_T nt_hashitem;		/* header for hash table and key */
++#define nt_old_bnum nt_hashitem.mhi_key	/* old, negative, number */
++
+     blocknr_T	nt_new_bnum;		/* new, positive, number */
+ };
+ 
+@@ -497,14 +527,6 @@
+ # endif
+ } cmdmod_T;
+ 
+-typedef struct file_buffer buf_T;  /* forward declaration */
+-
+-/*
+- * Simplistic hashing scheme to quickly locate the blocks in the used list.
+- * 64 blocks are found directly (64 * 4K = 256K, most files are smaller).
+- */
+-#define MEMHASHSIZE	64
+-#define MEMHASH(nr)	((nr) & (MEMHASHSIZE - 1))
+ #define MF_SEED_LEN	8
+ 
+ struct memfile
+@@ -517,8 +539,8 @@
+     bhdr_T	*mf_used_last;		/* lru block_hdr in used list */
+     unsigned	mf_used_count;		/* number of pages in used list */
+     unsigned	mf_used_count_max;	/* maximum number of pages in memory */
+-    bhdr_T	*mf_hash[MEMHASHSIZE];	/* array of hash lists */
+-    NR_TRANS	*mf_trans[MEMHASHSIZE];	/* array of trans lists */
++    mf_hashtab_T mf_hash;		/* hash lists */
++    mf_hashtab_T mf_trans;		/* trans lists */
+     blocknr_T	mf_blocknr_max;		/* highest positive block number + 1*/
+     blocknr_T	mf_blocknr_min;		/* lowest negative block number - 1 */
+     blocknr_T	mf_neg_count;		/* number of negative blocks numbers */
+@@ -979,9 +1001,10 @@
+ struct mapblock
+ {
+     mapblock_T	*m_next;	/* next mapblock in list */
+-    char_u	*m_keys;	/* mapped from */
++    char_u	*m_keys;	/* mapped from, lhs */
+     int		m_keylen;	/* strlen(m_keys) */
+-    char_u	*m_str;		/* mapped to */
++    char_u	*m_str;		/* mapped to, rhs */
++    char_u	*m_orig_str;	/* rhs as entered by the user */
+     int		m_mode;		/* valid mode */
+     int		m_noremap;	/* if non-zero no re-mapping for m_str */
+     char	m_silent;	/* <silent> used, don't echo commands */
+@@ -1082,6 +1105,11 @@
+ #define VAR_DICT    5	/* "v_dict" is used */
+ #define VAR_FLOAT   6	/* "v_float" is used */
+ 
++/* Values for "dv_scope". */
++#define VAR_SCOPE     1	/* a:, v:, s:, etc. scope dictionaries */
++#define VAR_DEF_SCOPE 2	/* l:, g: scope dictionaries: here funcrefs are not
++			   allowed to mask existing functions */
++
+ /* Values for "v_lock". */
+ #define VAR_LOCKED  1	/* locked with lock(), can use unlock() */
+ #define VAR_FIXED   2	/* locked forever */
+@@ -1157,6 +1185,7 @@
+     int		dv_copyID;	/* ID used by deepcopy() */
+     dict_T	*dv_copydict;	/* copied dict used by deepcopy() */
+     char	dv_lock;	/* zero, VAR_LOCKED, VAR_FIXED */
++    char	dv_scope;	/* zero, VAR_SCOPE, VAR_DEF_SCOPE */
+     dict_T	*dv_used_next;	/* next dict in used dicts list */
+     dict_T	*dv_used_prev;	/* previous dict in used dicts list */
+ };
+@@ -1177,11 +1206,27 @@
+ typedef struct qf_info_S qf_info_T;
+ #endif
+ 
++#ifdef FEAT_PROFILE
++/*
++ * Used for :syntime: timing of executing a syntax pattern.
++ */
++typedef struct {
++    proftime_T	total;		/* total time used */
++    proftime_T	slowest;	/* time of slowest call */
++    long	count;		/* nr of times used */
++    long	match;		/* nr of times matched */
++} syn_time_T;
++#endif
++
++/*
++ * These are items normally related to a buffer.  But when using ":ownsyntax"
++ * a window may have its own instance.
++ */
+ typedef struct {
+ #ifdef FEAT_SYN_HL
+     hashtab_T	b_keywtab;		/* syntax keywords hash table */
+     hashtab_T	b_keywtab_ic;		/* idem, ignore case */
+-    int		b_syn_error;		/* TRUE when error occured in HL */
++    int		b_syn_error;		/* TRUE when error occurred in HL */
+     int		b_syn_ic;		/* ignore case for :syn cmds */
+     int		b_syn_spell;		/* SYNSPL_ values */
+     garray_T	b_syn_patterns;		/* table for syntax patterns */
+@@ -1197,6 +1242,9 @@
+     long	b_syn_sync_linebreaks;	/* offset for multi-line pattern */
+     char_u	*b_syn_linecont_pat;	/* line continuation pattern */
+     regprog_T	*b_syn_linecont_prog;	/* line continuation program */
++#ifdef FEAT_PROFILE
++    syn_time_T  b_syn_linecont_time;
++#endif
+     int		b_syn_linecont_ic;	/* ignore-case flag for above */
+     int		b_syn_topgrp;		/* for ":syntax include" */
+ # ifdef FEAT_CONCEAL
+@@ -1266,6 +1314,10 @@
+     int		b_nwindows;	/* nr of windows open on this buffer */
+ 
+     int		b_flags;	/* various BF_ flags */
++#ifdef FEAT_AUTOCMD
++    int		b_closing;	/* buffer is being closed, don't let
++				   autocommands close it too. */
++#endif
+ 
+     /*
+      * b_ffname has the full path of the file (NULL for no name).
+@@ -1506,9 +1558,6 @@
+     int		b_p_ml_nobin;	/* b_p_ml saved for binary mode */
+     int		b_p_ma;		/* 'modifiable' */
+     char_u	*b_p_nf;	/* 'nrformats' */
+-#ifdef FEAT_OSFILETYPE
+-    char_u	*b_p_oft;	/* 'osfiletype' */
+-#endif
+     int		b_p_pi;		/* 'preserveindent' */
+ #ifdef FEAT_TEXTOBJ
+     char_u	*b_p_qe;	/* 'quoteescape' */
+@@ -1563,6 +1612,9 @@
+ 
+     /* end of buffer options */
+ 
++    linenr_T	b_no_eol_lnum;	/* non-zero lnum when last line of next binary
++				 * write should not have an end-of-line */
++
+     int		b_start_eol;	/* last line had eol when it was read */
+     int		b_start_ffc;	/* first char of 'ff' when edit started */
+ #ifdef FEAT_MBYTE
+@@ -1573,7 +1625,7 @@
+ 
+ #ifdef FEAT_EVAL
+     dictitem_T	b_bufvar;	/* variable for "b:" Dictionary */
+-    dict_T	b_vars;		/* internal variables, local to buffer */
++    dict_T	*b_vars;	/* internal variables, local to buffer */
+ #endif
+ 
+ #if defined(FEAT_BEVAL) && defined(FEAT_EVAL)
+@@ -1719,7 +1771,15 @@
+     frame_T	    *(tp_snapshot[SNAP_COUNT]);  /* window layout snapshots */
+ #ifdef FEAT_EVAL
+     dictitem_T	    tp_winvar;	    /* variable for "t:" Dictionary */
+-    dict_T	    tp_vars;	    /* internal variables, local to tab page */
++    dict_T	    *tp_vars;	    /* internal variables, local to tab page */
++#endif
++
++#ifdef FEAT_PYTHON
++    void	    *tp_python_ref;	/* The Python value for this tab page */
++#endif
++
++#ifdef FEAT_PYTHON3
++    void	    *tp_python3_ref;	/* The Python value for this tab page */
+ #endif
+ };
+ 
+@@ -1822,13 +1882,17 @@
+ 				       often, keep it the first item!) */
+ 
+ #if defined(FEAT_SYN_HL) || defined(FEAT_SPELL)
+-    synblock_T	*w_s;
++    synblock_T	*w_s;		    /* for :ownsyntax */
+ #endif
+ 
+ #ifdef FEAT_WINDOWS
+     win_T	*w_prev;	    /* link to previous window */
+     win_T	*w_next;	    /* link to next window */
+ #endif
++#ifdef FEAT_AUTOCMD
++    int		w_closing;	    /* window is being closed, don't let
++				       autocommands close it too. */
++#endif
+ 
+     frame_T	*w_frame;	    /* frame containing this window */
+ 
+@@ -2038,7 +2102,7 @@
+ 
+ #ifdef FEAT_EVAL
+     dictitem_T	w_winvar;	/* variable for "w:" Dictionary */
+-    dict_T	w_vars;		/* internal variables, local to window */
++    dict_T	*w_vars;	/* internal variables, local to window */
+ #endif
+ 
+ #if defined(FEAT_RIGHTLEFT) && defined(FEAT_FKMAP)
+@@ -2339,11 +2403,6 @@
+     MenuHandle	menu_handle;
+     MenuHandle	submenu_handle;
+ #endif
+-#ifdef RISCOS
+-    int		*id;		    /* Not used, but gui.c needs it */
+-    int		greyed_out;	    /* Flag */
+-    int		hidden;
+-#endif
+ #ifdef FEAT_GUI_PHOTON
+     PtWidget_t	*id;
+     PtWidget_t	*submenu_id;
+diff -Naur vim73.orig/src/syntax.c vim73/src/syntax.c
+--- vim73.orig/src/syntax.c	2010-08-08 13:17:03.000000000 +0000
++++ vim73/src/syntax.c	2013-06-07 17:07:35.945572696 +0000
+@@ -68,6 +68,8 @@
+ 
+ #define HL_TABLE() ((struct hl_group *)((highlight_ga.ga_data)))
+ 
++#define MAX_HL_ID       20000	/* maximum value for a highlight ID. */
++
+ #ifdef FEAT_CMDL_COMPL
+ /* Flags to indicate an additional string for highlight name completion. */
+ static int include_none = 0;	/* when 1 include "None" */
+@@ -103,7 +105,7 @@
+ # ifdef FEAT_XFONTSET
+ static GuiFontset fontset_name2handle __ARGS((char_u *name, int fixed_width));
+ # endif
+-static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip));
++static void hl_do_font __ARGS((int idx, char_u *arg, int do_normal, int do_menu, int do_tooltip, int free_font));
+ #endif
+ 
+ /*
+@@ -151,6 +153,9 @@
+     short	 sp_syn_match_id;	/* highlight group ID of pattern */
+     char_u	*sp_pattern;		/* regexp to match, pattern */
+     regprog_T	*sp_prog;		/* regexp to match, program */
++#ifdef FEAT_PROFILE
++    syn_time_T	 sp_time;
++#endif
+     int		 sp_ic;			/* ignore-case flag for sp_prog */
+     short	 sp_off_flags;		/* see below */
+     int		 sp_offsets[SPO_COUNT];	/* offsets */
+@@ -219,16 +224,19 @@
+ 
+ /*
+  * Syntax group IDs have different types:
+- *     0 -  9999  normal syntax groups
+- * 10000 - 14999  ALLBUT indicator (current_syn_inc_tag added)
+- * 15000 - 19999  TOP indicator (current_syn_inc_tag added)
+- * 20000 - 24999  CONTAINED indicator (current_syn_inc_tag added)
+- * >= 25000	  cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
+- */
+-#define SYNID_ALLBUT	10000	    /* syntax group ID for contains=ALLBUT */
+-#define SYNID_TOP	15000	    /* syntax group ID for contains=TOP */
+-#define SYNID_CONTAINED	20000	    /* syntax group ID for contains=CONTAINED */
+-#define SYNID_CLUSTER	25000	    /* first syntax group ID for clusters */
++ *     0 - 19999  normal syntax groups
++ * 20000 - 20999  ALLBUT indicator (current_syn_inc_tag added)
++ * 21000 - 21999  TOP indicator (current_syn_inc_tag added)
++ * 22000 - 22999  CONTAINED indicator (current_syn_inc_tag added)
++ * 23000 - 32767  cluster IDs (subtract SYNID_CLUSTER for the cluster ID)
++ */
++#define SYNID_ALLBUT	MAX_HL_ID   /* syntax group ID for contains=ALLBUT */
++#define SYNID_TOP	21000	    /* syntax group ID for contains=TOP */
++#define SYNID_CONTAINED	22000	    /* syntax group ID for contains=CONTAINED */
++#define SYNID_CLUSTER	23000	    /* first syntax group ID for clusters */
++
++#define MAX_SYN_INC_TAG	999	    /* maximum before the above overflow */
++#define MAX_CLUSTER_ID  (32767 - SYNID_CLUSTER)
+ 
+ /*
+  * Annoying Hack(TM):  ":syn include" needs this pointer to pass to
+@@ -264,6 +272,8 @@
+  */
+ static int keepend_level = -1;
+ 
++static char msg_no_items[] = N_("No Syntax items defined for this buffer");
++
+ /*
+  * For the current state we need to remember more than just the idx.
+  * When si_m_endpos.lnum is 0, the items other than si_idx are unknown.
+@@ -390,6 +400,21 @@
+ static int in_id_list __ARGS((stateitem_T *item, short *cont_list, struct sp_syn *ssp, int contained));
+ static int push_current_state __ARGS((int idx));
+ static void pop_current_state __ARGS((void));
++#ifdef FEAT_PROFILE
++static void syn_clear_time __ARGS((syn_time_T *tt));
++static void syntime_clear __ARGS((void));
++#ifdef __BORLANDC__
++static int _RTLENTRYF syn_compare_syntime __ARGS((const void *v1, const void *v2));
++#else
++static int syn_compare_syntime __ARGS((const void *v1, const void *v2));
++#endif
++static void syntime_report __ARGS((void));
++static int syn_time_on = FALSE;
++# define IF_SYN_TIME(p) (p)
++#else
++# define IF_SYN_TIME(p) NULL
++typedef int syn_time_T;
++#endif
+ 
+ static void syn_stack_apply_changes_block __ARGS((synblock_T *block, buf_T *buf));
+ static void find_endpos __ARGS((int idx, lpos_T *startpos, lpos_T *m_endpos, lpos_T *hl_endpos, long *flagsp, lpos_T *end_endpos, int *end_idx, reg_extmatch_T *start_ext));
+@@ -401,7 +426,7 @@
+ static void syn_add_end_off __ARGS((lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra));
+ static void syn_add_start_off __ARGS((lpos_T *result, regmmatch_T *regmatch, synpat_T *spp, int idx, int extra));
+ static char_u *syn_getcurline __ARGS((void));
+-static int syn_regexec __ARGS((regmmatch_T *rmp, linenr_T lnum, colnr_T col));
++static int syn_regexec __ARGS((regmmatch_T *rmp, linenr_T lnum, colnr_T col, syn_time_T *st));
+ static int check_keyword_id __ARGS((char_u *line, int startcol, int *endcol, long *flags, short **next_list, stateitem_T *cur_si, int *ccharp));
+ static void syn_cmd_case __ARGS((exarg_T *eap, int syncing));
+ static void syn_cmd_spell __ARGS((exarg_T *eap, int syncing));
+@@ -554,7 +579,13 @@
+     if (INVALID_STATE(&current_state))
+     {
+ 	syn_sync(wp, lnum, last_valid);
+-	first_stored = current_lnum + syn_block->b_syn_sync_minlines;
++	if (current_lnum == 1)
++	    /* First line is always valid, no matter "minlines". */
++	    first_stored = 1;
++	else
++	    /* Need to parse "minlines" lines before state can be considered
++	     * valid to store. */
++	    first_stored = current_lnum + syn_block->b_syn_sync_minlines;
+     }
+     else
+ 	first_stored = current_lnum;
+@@ -966,7 +997,8 @@
+     {
+ 	regmatch.rmm_ic = syn_block->b_syn_linecont_ic;
+ 	regmatch.regprog = syn_block->b_syn_linecont_prog;
+-	return syn_regexec(&regmatch, lnum, (colnr_T)0);
++	return syn_regexec(&regmatch, lnum, (colnr_T)0,
++				IF_SYN_TIME(&syn_block->b_syn_linecont_time));
+     }
+     return FALSE;
+ }
+@@ -985,7 +1017,10 @@
+      * previous line and regions that have "keepend".
+      */
+     if (current_state.ga_len > 0)
++    {
+ 	syn_update_ends(TRUE);
++	check_state_ends();
++    }
+ 
+     next_match_idx = -1;
+     ++current_line_id;
+@@ -1059,7 +1094,6 @@
+ 	}
+     }
+     check_keepend();
+-    check_state_ends();
+ }
+ 
+ /****************************************
+@@ -1941,9 +1975,9 @@
+ 	    if (do_keywords)
+ 	    {
+ 	      line = syn_getcurline();
+-	      if (vim_iswordc_buf(line + current_col, syn_buf)
++	      if (vim_iswordp_buf(line + current_col, syn_buf)
+ 		      && (current_col == 0
+-			  || !vim_iswordc_buf(line + current_col - 1
++			  || !vim_iswordp_buf(line + current_col - 1
+ #ifdef FEAT_MBYTE
+ 			      - (has_mbyte
+ 				  ? (*mb_head_off)(line, line + current_col - 1)
+@@ -2055,8 +2089,10 @@
+ 
+ 			    regmatch.rmm_ic = spp->sp_ic;
+ 			    regmatch.regprog = spp->sp_prog;
+-			    if (!syn_regexec(&regmatch, current_lnum,
+-							     (colnr_T)lc_col))
++			    if (!syn_regexec(&regmatch,
++					     current_lnum,
++					     (colnr_T)lc_col,
++				             IF_SYN_TIME(&spp->sp_time)))
+ 			    {
+ 				/* no match in this line, try another one */
+ 				spp->sp_startcol = MAXCOL;
+@@ -2528,7 +2564,7 @@
+ check_state_ends()
+ {
+     stateitem_T	*cur_si;
+-    int		had_extend = FALSE;
++    int		had_extend;
+ 
+     cur_si = &CUR_STATE(current_state.ga_len - 1);
+     for (;;)
+@@ -2561,6 +2597,9 @@
+ #endif
+ 		update_si_attr(current_state.ga_len - 1);
+ 
++		/* nextgroup= should not match in the end pattern */
++		current_next_list = NULL;
++
+ 		/* what matches next may be different now, clear it */
+ 		next_match_idx = 0;
+ 		next_match_col = MAXCOL;
+@@ -2578,8 +2617,7 @@
+ 
+ 		/* When the ended item has "extend", another item with
+ 		 * "keepend" now needs to check for its end. */
+-		 if (cur_si->si_flags & HL_EXTEND)
+-		     had_extend = TRUE;
++		 had_extend = (cur_si->si_flags & HL_EXTEND);
+ 
+ 		pop_current_state();
+ 
+@@ -2935,7 +2973,8 @@
+ 
+ 	    regmatch.rmm_ic = spp->sp_ic;
+ 	    regmatch.regprog = spp->sp_prog;
+-	    if (syn_regexec(&regmatch, startpos->lnum, lc_col))
++	    if (syn_regexec(&regmatch, startpos->lnum, lc_col,
++						  IF_SYN_TIME(&spp->sp_time)))
+ 	    {
+ 		if (best_idx == -1 || regmatch.startpos[0].col
+ 					      < best_regmatch.startpos[0].col)
+@@ -2966,7 +3005,8 @@
+ 		lc_col = 0;
+ 	    regmatch.rmm_ic = spp_skip->sp_ic;
+ 	    regmatch.regprog = spp_skip->sp_prog;
+-	    if (syn_regexec(&regmatch, startpos->lnum, lc_col)
++	    if (syn_regexec(&regmatch, startpos->lnum, lc_col,
++					      IF_SYN_TIME(&spp_skip->sp_time))
+ 		    && regmatch.startpos[0].col
+ 					     <= best_regmatch.startpos[0].col)
+ 	    {
+@@ -3214,13 +3254,37 @@
+  * Returns TRUE when there is a match.
+  */
+     static int
+-syn_regexec(rmp, lnum, col)
++syn_regexec(rmp, lnum, col, st)
+     regmmatch_T	*rmp;
+     linenr_T	lnum;
+     colnr_T	col;
++    syn_time_T  *st UNUSED;
+ {
++    int r;
++#ifdef FEAT_PROFILE
++    proftime_T	pt;
++
++    if (syn_time_on)
++	profile_start(&pt);
++#endif
++
+     rmp->rmm_maxcol = syn_buf->b_p_smc;
+-    if (vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL) > 0)
++    r = vim_regexec_multi(rmp, syn_win, syn_buf, lnum, col, NULL);
++
++#ifdef FEAT_PROFILE
++    if (syn_time_on)
++    {
++	profile_end(&pt);
++	profile_add(&st->total, &pt);
++	if (profile_cmp(&pt, &st->slowest) < 0)
++	    st->slowest = pt;
++	++st->count;
++	if (r > 0)
++	    ++st->match;
++    }
++#endif
++
++    if (r > 0)
+     {
+ 	rmp->startpos[0].lnum += lnum;
+ 	rmp->endpos[0].lnum += lnum;
+@@ -3265,7 +3329,7 @@
+ #endif
+ 	    ++kwlen;
+     }
+-    while (vim_iswordc_buf(kwp + kwlen, syn_buf));
++    while (vim_iswordp_buf(kwp + kwlen, syn_buf));
+ 
+     if (kwlen > MAXKEYWLEN)
+ 	return 0;
+@@ -3442,6 +3506,9 @@
+     /* free the stored states */
+     syn_stack_free_all(block);
+     invalidate_current_state();
++
++    /* Reset the counter for ":syn include" */
++    running_syn_inc_tag = 0;
+ }
+ 
+ /*
+@@ -3751,7 +3818,7 @@
+ 
+     if (!syntax_present(curwin))
+     {
+-	MSG(_("No Syntax items defined for this buffer"));
++	MSG(_(msg_no_items));
+ 	return;
+     }
+ 
+@@ -3988,17 +4055,17 @@
+ }
+ 
+     static void
+-syn_list_flags(nl, flags, attr)
+-    struct name_list	*nl;
++syn_list_flags(nlist, flags, attr)
++    struct name_list	*nlist;
+     int			flags;
+     int			attr;
+ {
+     int		i;
+ 
+-    for (i = 0; nl[i].flag != 0; ++i)
+-	if (flags & nl[i].flag)
++    for (i = 0; nlist[i].flag != 0; ++i)
++	if (flags & nlist[i].flag)
+ 	{
+-	    msg_puts_attr((char_u *)nl[i].name, attr);
++	    msg_puts_attr((char_u *)nlist[i].name, attr);
+ 	    msg_putchar(' ');
+ 	}
+ }
+@@ -4537,6 +4604,13 @@
+ 		;
+ #endif
+ 	    }
++#ifdef FEAT_CONCEAL
++	    if (!vim_isprintc_strict(*conceal_char))
++	    {
++		EMSG(_("E844: invalid cchar value"));
++		return NULL;
++	    }
++#endif
+ 	    arg = skipwhite(arg + 7);
+ 	}
+ 	else
+@@ -4654,6 +4728,8 @@
+ 	    return;
+ 	}
+ 	sgl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
++	if (sgl_id == 0)
++	    return;
+ 	/* separate_nextcmd() and expand_filename() depend on this */
+ 	eap->arg = rest;
+     }
+@@ -4682,6 +4758,11 @@
+      * Save and restore the existing top-level grouplist id and ":syn
+      * include" tag around the actual inclusion.
+      */
++    if (running_syn_inc_tag >= MAX_SYN_INC_TAG)
++    {
++	EMSG((char_u *)_("E847: Too many syntax includes"));
++	return;
++    }
+     prev_syn_inc_tag = current_syn_inc_tag;
+     current_syn_inc_tag = ++running_syn_inc_tag;
+     prev_toplvl_grp = curwin->w_s->b_syn_topgrp;
+@@ -4705,7 +4786,7 @@
+     char_u	*group_name_end;
+     int		syn_id;
+     char_u	*rest;
+-    char_u	*keyword_copy;
++    char_u	*keyword_copy = NULL;
+     char_u	*p;
+     char_u	*kw;
+     syn_opt_arg_T syn_opt_arg;
+@@ -4717,9 +4798,9 @@
+     if (rest != NULL)
+     {
+ 	syn_id = syn_check_group(arg, (int)(group_name_end - arg));
+-
+-	/* allocate a buffer, for removing the backslashes in the keyword */
+-	keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
++	if (syn_id != 0)
++	    /* allocate a buffer, for removing backslashes in the keyword */
++	    keyword_copy = alloc((unsigned)STRLEN(rest) + 1);
+ 	if (keyword_copy != NULL)
+ 	{
+ 	    syn_opt_arg.flags = 0;
+@@ -5126,7 +5207,8 @@
+ 			    (item == ITEM_SKIP) ? SPTYPE_SKIP : SPTYPE_END;
+ 		    SYN_ITEMS(curwin->w_s)[idx].sp_flags |= syn_opt_arg.flags;
+ 		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.id = syn_id;
+-		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag = current_syn_inc_tag;
++		    SYN_ITEMS(curwin->w_s)[idx].sp_syn.inc_tag =
++							  current_syn_inc_tag;
+ 		    SYN_ITEMS(curwin->w_s)[idx].sp_syn_match_id =
+ 							ppp->pp_matchgroup_id;
+ #ifdef FEAT_CONCEAL
+@@ -5419,6 +5501,14 @@
+ 	curwin->w_s->b_syn_clusters.ga_growsize = 10;
+     }
+ 
++    len = curwin->w_s->b_syn_clusters.ga_len;
++    if (len >= MAX_CLUSTER_ID)
++    {
++	EMSG((char_u *)_("E848: Too many syntax clusters"));
++	vim_free(name);
++	return 0;
++    }
++
+     /*
+      * Make room for at least one other cluster entry.
+      */
+@@ -5427,7 +5517,6 @@
+ 	vim_free(name);
+ 	return 0;
+     }
+-    len = curwin->w_s->b_syn_clusters.ga_len;
+ 
+     vim_memset(&(SYN_CLSTR(curwin->w_s)[len]), 0, sizeof(syn_cluster_T));
+     SYN_CLSTR(curwin->w_s)[len].scl_name = name;
+@@ -5469,8 +5558,10 @@
+ 
+     if (rest != NULL)
+     {
+-	scl_id = syn_check_cluster(arg, (int)(group_name_end - arg))
+-							      - SYNID_CLUSTER;
++	scl_id = syn_check_cluster(arg, (int)(group_name_end - arg));
++	if (scl_id == 0)
++	    return;
++	scl_id -= SYNID_CLUSTER;
+ 
+ 	for (;;)
+ 	{
+@@ -5509,7 +5600,7 @@
+ 	if (got_clstr)
+ 	{
+ 	    redraw_curbuf_later(SOME_VALID);
+-	    syn_stack_free_all(curwin->w_s);	/* Need to recompute all syntax. */
++	    syn_stack_free_all(curwin->w_s);	/* Need to recompute all. */
+ 	}
+     }
+ 
+@@ -5567,6 +5658,9 @@
+     if (ci->sp_prog == NULL)
+ 	return NULL;
+     ci->sp_ic = curwin->w_s->b_syn_ic;
++#ifdef FEAT_PROFILE
++    syn_clear_time(&ci->sp_time);
++#endif
+ 
+     /*
+      * Check for a match, highlight or region offset.
+@@ -5741,8 +5835,11 @@
+ 		cpo_save = p_cpo;
+ 		p_cpo = (char_u *)"";
+ 		curwin->w_s->b_syn_linecont_prog =
+-			    vim_regcomp(curwin->w_s->b_syn_linecont_pat, RE_MAGIC);
++		       vim_regcomp(curwin->w_s->b_syn_linecont_pat, RE_MAGIC);
+ 		p_cpo = cpo_save;
++#ifdef FEAT_PROFILE
++		syn_clear_time(&curwin->w_s->b_syn_linecont_time);
++#endif
+ 
+ 		if (curwin->w_s->b_syn_linecont_prog == NULL)
+ 		{
+@@ -6027,7 +6124,7 @@
+     static int	depth = 0;
+     int		r;
+ 
+-    /* If spp has a "containedin" list and "cur_si" is in it, return TRUE. */
++    /* If ssp has a "containedin" list and "cur_si" is in it, return TRUE. */
+     if (cur_si != NULL && ssp->cont_in_list != NULL
+ 					    && !(cur_si->si_flags & HL_MATCH))
+     {
+@@ -6429,8 +6526,181 @@
+ }
+ #endif
+ 
+-#endif /* FEAT_SYN_HL */
++#ifdef FEAT_PROFILE
++/*
++ * ":syntime".
++ */
++    void
++ex_syntime(eap)
++    exarg_T	*eap;
++{
++    if (STRCMP(eap->arg, "on") == 0)
++	syn_time_on = TRUE;
++    else if (STRCMP(eap->arg, "off") == 0)
++	syn_time_on = FALSE;
++    else if (STRCMP(eap->arg, "clear") == 0)
++	syntime_clear();
++    else if (STRCMP(eap->arg, "report") == 0)
++	syntime_report();
++    else
++	EMSG2(_(e_invarg2), eap->arg);
++}
++
++    static void
++syn_clear_time(st)
++    syn_time_T *st;
++{
++    profile_zero(&st->total);
++    profile_zero(&st->slowest);
++    st->count = 0;
++    st->match = 0;
++}
++
++/*
++ * Clear the syntax timing for the current buffer.
++ */
++    static void
++syntime_clear()
++{
++    int		idx;
++    synpat_T	*spp;
++
++    if (!syntax_present(curwin))
++    {
++	MSG(_(msg_no_items));
++	return;
++    }
++    for (idx = 0; idx < curwin->w_s->b_syn_patterns.ga_len; ++idx)
++    {
++	spp = &(SYN_ITEMS(curwin->w_s)[idx]);
++	syn_clear_time(&spp->sp_time);
++    }
++}
++
++typedef struct
++{
++    proftime_T	total;
++    int		count;
++    int		match;
++    proftime_T	slowest;
++    proftime_T	average;
++    int		id;
++    char_u	*pattern;
++} time_entry_T;
++
++    static int
++#ifdef __BORLANDC__
++_RTLENTRYF
++#endif
++syn_compare_syntime(v1, v2)
++    const void	*v1;
++    const void	*v2;
++{
++    const time_entry_T	*s1 = v1;
++    const time_entry_T	*s2 = v2;
++
++    return profile_cmp(&s1->total, &s2->total);
++}
++
++/*
++ * Clear the syntax timing for the current buffer.
++ */
++    static void
++syntime_report()
++{
++    int		idx;
++    synpat_T	*spp;
++    proftime_T	tm;
++    int		len;
++    proftime_T	total_total;
++    int		total_count = 0;
++    garray_T    ga;
++    time_entry_T *p;
++
++    if (!syntax_present(curwin))
++    {
++	MSG(_(msg_no_items));
++	return;
++    }
++
++    ga_init2(&ga, sizeof(time_entry_T), 50);
++    profile_zero(&total_total);
++    for (idx = 0; idx < curwin->w_s->b_syn_patterns.ga_len; ++idx)
++    {
++	spp = &(SYN_ITEMS(curwin->w_s)[idx]);
++	if (spp->sp_time.count > 0)
++	{
++	    ga_grow(&ga, 1);
++	    p = ((time_entry_T *)ga.ga_data) + ga.ga_len;
++	    p->total = spp->sp_time.total;
++	    profile_add(&total_total, &spp->sp_time.total);
++	    p->count = spp->sp_time.count;
++	    p->match = spp->sp_time.match;
++	    total_count += spp->sp_time.count;
++	    p->slowest = spp->sp_time.slowest;
++# ifdef FEAT_FLOAT
++	    profile_divide(&spp->sp_time.total, spp->sp_time.count, &tm);
++	    p->average = tm;
++# endif
++	    p->id = spp->sp_syn.id;
++	    p->pattern = spp->sp_pattern;
++	    ++ga.ga_len;
++	}
++    }
++
++    /* sort on total time */
++    qsort(ga.ga_data, (size_t)ga.ga_len, sizeof(time_entry_T),
++							 syn_compare_syntime);
++
++    MSG_PUTS_TITLE(_("  TOTAL      COUNT  MATCH   SLOWEST     AVERAGE   NAME               PATTERN"));
++    MSG_PUTS("\n");
++    for (idx = 0; idx < ga.ga_len && !got_int; ++idx)
++    {
++	spp = &(SYN_ITEMS(curwin->w_s)[idx]);
++	p = ((time_entry_T *)ga.ga_data) + idx;
++
++	MSG_PUTS(profile_msg(&p->total));
++	MSG_PUTS(" "); /* make sure there is always a separating space */
++	msg_advance(13);
++	msg_outnum(p->count);
++	MSG_PUTS(" ");
++	msg_advance(20);
++	msg_outnum(p->match);
++	MSG_PUTS(" ");
++	msg_advance(26);
++	MSG_PUTS(profile_msg(&p->slowest));
++	MSG_PUTS(" ");
++	msg_advance(38);
++# ifdef FEAT_FLOAT
++	MSG_PUTS(profile_msg(&p->average));
++	MSG_PUTS(" ");
++# endif
++	msg_advance(50);
++	msg_outtrans(HL_TABLE()[p->id - 1].sg_name);
++	MSG_PUTS(" ");
++
++	msg_advance(69);
++	if (Columns < 80)
++	    len = 20; /* will wrap anyway */
++	else
++	    len = Columns - 70;
++	if (len > (int)STRLEN(p->pattern))
++	    len = (int)STRLEN(p->pattern);
++	msg_outtrans_len(p->pattern, len);
++	MSG_PUTS("\n");
++    }
++    if (!got_int)
++    {
++	MSG_PUTS("\n");
++	MSG_PUTS(profile_msg(&total_total));
++	msg_advance(13);
++	msg_outnum(total_count);
++	MSG_PUTS("\n");
++    }
++}
++#endif
+ 
++#endif /* FEAT_SYN_HL */
+ 
+ /**************************************
+  *  Highlighting stuff		      *
+@@ -6475,8 +6745,6 @@
+ 	     "DiffText term=reverse cterm=bold ctermbg=Red gui=bold guibg=Red"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+-	CENT("PmenuThumb cterm=reverse",
+-	     "PmenuThumb cterm=reverse gui=reverse"),
+ 	CENT("PmenuSbar ctermbg=Grey",
+ 	     "PmenuSbar ctermbg=Grey guibg=Grey"),
+ #endif
+@@ -6499,6 +6767,8 @@
+ 	     "Directory term=bold ctermfg=DarkBlue guifg=Blue"),
+ 	CENT("LineNr term=underline ctermfg=Brown",
+ 	     "LineNr term=underline ctermfg=Brown guifg=Brown"),
++	CENT("CursorLineNr term=bold ctermfg=Brown",
++	     "CursorLineNr term=bold ctermfg=Brown gui=bold guifg=Brown"),
+ 	CENT("MoreMsg term=bold ctermfg=DarkGreen",
+ 	     "MoreMsg term=bold ctermfg=DarkGreen gui=bold guifg=SeaGreen"),
+ 	CENT("Question term=standout ctermfg=DarkGreen",
+@@ -6516,10 +6786,12 @@
+ 	     "SpellLocal term=underline ctermbg=Cyan guisp=DarkCyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+-	CENT("Pmenu ctermbg=LightMagenta",
+-	     "Pmenu ctermbg=LightMagenta guibg=LightMagenta"),
+-	CENT("PmenuSel ctermbg=LightGrey",
+-	     "PmenuSel ctermbg=LightGrey guibg=Grey"),
++	CENT("PmenuThumb ctermbg=Black",
++	     "PmenuThumb ctermbg=Black guibg=Black"),
++	CENT("Pmenu ctermbg=LightMagenta ctermfg=Black",
++	     "Pmenu ctermbg=LightMagenta ctermfg=Black guibg=LightMagenta"),
++	CENT("PmenuSel ctermbg=LightGrey ctermfg=Black",
++	     "PmenuSel ctermbg=LightGrey ctermfg=Black guibg=Grey"),
+ #endif
+ 	CENT("SpecialKey term=bold ctermfg=DarkBlue",
+ 	     "SpecialKey term=bold ctermfg=DarkBlue guifg=Blue"),
+@@ -6585,6 +6857,8 @@
+ 	     "Directory term=bold ctermfg=LightCyan guifg=Cyan"),
+ 	CENT("LineNr term=underline ctermfg=Yellow",
+ 	     "LineNr term=underline ctermfg=Yellow guifg=Yellow"),
++	CENT("CursorLineNr term=bold ctermfg=Yellow",
++	     "CursorLineNr term=bold ctermfg=Yellow gui=bold guifg=Yellow"),
+ 	CENT("MoreMsg term=bold ctermfg=LightGreen",
+ 	     "MoreMsg term=bold ctermfg=LightGreen gui=bold guifg=SeaGreen"),
+ 	CENT("Question term=standout ctermfg=LightGreen",
+@@ -6604,10 +6878,12 @@
+ 	     "SpellLocal term=underline ctermbg=Cyan guisp=Cyan gui=undercurl"),
+ #endif
+ #ifdef FEAT_INS_EXPAND
+-	CENT("Pmenu ctermbg=Magenta",
+-	     "Pmenu ctermbg=Magenta guibg=Magenta"),
+-	CENT("PmenuSel ctermbg=DarkGrey",
+-	     "PmenuSel ctermbg=DarkGrey guibg=DarkGrey"),
++	CENT("PmenuThumb ctermbg=White",
++	     "PmenuThumb ctermbg=White guibg=White"),
++	CENT("Pmenu ctermbg=Magenta ctermfg=Black",
++	     "Pmenu ctermbg=Magenta ctermfg=Black guibg=Magenta"),
++	CENT("PmenuSel ctermbg=Black ctermfg=DarkGrey",
++	     "PmenuSel ctermbg=Black ctermfg=DarkGrey guibg=DarkGrey"),
+ #endif
+ 	CENT("Title term=bold ctermfg=LightMagenta",
+ 	     "Title term=bold ctermfg=LightMagenta gui=bold guifg=Magenta"),
+@@ -7212,14 +7488,13 @@
+ 		HL_TABLE()[idx].sg_fontset = NOFONTSET;
+ # endif
+ 		hl_do_font(idx, arg, is_normal_group, is_menu_group,
+-							    is_tooltip_group);
++						     is_tooltip_group, FALSE);
+ 
+ # ifdef FEAT_XFONTSET
+ 		if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
+ 		{
+-		    /* New fontset was accepted. Free the old one, if there was
+-		     * one.
+-		     */
++		    /* New fontset was accepted. Free the old one, if there
++		     * was one. */
+ 		    gui_mch_free_fontset(temp_sg_fontset);
+ 		    vim_free(HL_TABLE()[idx].sg_font_name);
+ 		    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
+@@ -7230,8 +7505,7 @@
+ 		if (HL_TABLE()[idx].sg_font != NOFONT)
+ 		{
+ 		    /* New font was accepted. Free the old one, if there was
+-		     * one.
+-		     */
++		     * one. */
+ 		    gui_mch_free_font(temp_sg_font);
+ 		    vim_free(HL_TABLE()[idx].sg_font_name);
+ 		    HL_TABLE()[idx].sg_font_name = vim_strsave(arg);
+@@ -7600,10 +7874,10 @@
+ 		/*
+ 		 * Copy characters from arg[] to buf[], translating <> codes.
+ 		 */
+-		for (p = arg, off = 0; off < 100 && *p; )
++		for (p = arg, off = 0; off < 100 - 6 && *p; )
+ 		{
+ 		    len = trans_special(&p, buf + off, FALSE);
+-		    if (len)		    /* recognized special char */
++		    if (len > 0)	    /* recognized special char */
+ 			off += len;
+ 		    else		    /* copy as normal char */
+ 			buf[off++] = *p++;
+@@ -8017,12 +8291,13 @@
+  * Get the font or fontset for one highlight group.
+  */
+     static void
+-hl_do_font(idx, arg, do_normal, do_menu, do_tooltip)
++hl_do_font(idx, arg, do_normal, do_menu, do_tooltip, free_font)
+     int		idx;
+     char_u	*arg;
+     int		do_normal;		/* set normal font */
+     int		do_menu UNUSED;		/* set menu font */
+     int		do_tooltip UNUSED;	/* set tooltip font */
++    int		free_font;		/* free current font/fontset */
+ {
+ # ifdef FEAT_XFONTSET
+     /* If 'guifontset' is not empty, first try using the name as a
+@@ -8036,6 +8311,9 @@
+ 	|| do_tooltip
+ #  endif
+ 	    )
++    {
++	if (free_font)
++	    gui_mch_free_fontset(HL_TABLE()[idx].sg_fontset);
+ 	HL_TABLE()[idx].sg_fontset = fontset_name2handle(arg, 0
+ #  ifdef FONTSET_ALWAYS
+ 		|| do_menu
+@@ -8044,10 +8322,11 @@
+ 		|| do_tooltip
+ #  endif
+ 		);
++    }
+     if (HL_TABLE()[idx].sg_fontset != NOFONTSET)
+     {
+-	/* If it worked and it's the Normal group, use it as the
+-	 * normal fontset.  Same for the Menu group. */
++	/* If it worked and it's the Normal group, use it as the normal
++	 * fontset.  Same for the Menu group. */
+ 	if (do_normal)
+ 	    gui_init_font(arg, TRUE);
+ #   if (defined(FEAT_GUI_MOTIF) || defined(FEAT_GUI_ATHENA)) && defined(FEAT_MENU)
+@@ -8079,6 +8358,8 @@
+     else
+ # endif
+     {
++	if (free_font)
++	    gui_mch_free_font(HL_TABLE()[idx].sg_font);
+ 	HL_TABLE()[idx].sg_font = font_name2handle(arg);
+ 	/* If it worked and it's the Normal group, use it as the
+ 	 * normal font.  Same for the Menu group. */
+@@ -8545,8 +8826,8 @@
+ 		if (iarg & hl_attr_table[i])
+ 		{
+ 		    if (buf[0] != NUL)
+-			STRCAT(buf, ",");
+-		    STRCAT(buf, hl_name_table[i]);
++			vim_strcat(buf, (char_u *)",", 100);
++		    vim_strcat(buf, (char_u *)hl_name_table[i], 100);
+ 		    iarg &= ~hl_attr_table[i];	    /* don't want "inverse" */
+ 		}
+ 	    }
+@@ -8965,6 +9246,13 @@
+ 	highlight_ga.ga_growsize = 10;
+     }
+ 
++    if (highlight_ga.ga_len >= MAX_HL_ID)
++    {
++	EMSG(_("E849: Too many highlight and syntax groups"));
++	vim_free(name);
++	return 0;
++    }
++
+     /*
+      * Make room for at least one other syntax_highlight entry.
+      */
+@@ -9108,7 +9396,7 @@
+     if (HL_TABLE()[idx].sg_font_name != NULL)
+     {
+ 	hl_do_font(idx, HL_TABLE()[idx].sg_font_name, FALSE, do_menu,
+-		   do_tooltip);
++							    do_tooltip, TRUE);
+ 	didit = TRUE;
+     }
+     if (HL_TABLE()[idx].sg_gui_fg_name != NULL)
+@@ -9422,7 +9710,7 @@
+     int	    cnt;
+     int	    attr;
+ {
+-    msg_puts_attr((char_u *)("N \bI \b!  \b" + cnt / 11), attr);
++    msg_puts_attr((char_u *)&("N \bI \b!  \b"[cnt / 11]), attr);
+     msg_clr_eos();
+     out_flush();
+     ui_delay(cnt == 99 ? 40L : (long)cnt * 50L, FALSE);
+diff -Naur vim73.orig/src/tag.c vim73/src/tag.c
+--- vim73.orig/src/tag.c	2010-08-10 07:25:22.000000000 +0000
++++ vim73/src/tag.c	2013-06-07 17:07:35.982239258 +0000
+@@ -11,10 +11,6 @@
+  * Code to handle tags and the tag stack
+  */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for lseek(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ /*
+@@ -208,7 +204,7 @@
+     else
+     {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-	if (g_do_tagpreview)
++	if (g_do_tagpreview != 0)
+ 	    use_tagstack = FALSE;
+ 	else
+ #endif
+@@ -226,7 +222,7 @@
+ 		    ))
+ 	{
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-	    if (g_do_tagpreview)
++	    if (g_do_tagpreview != 0)
+ 	    {
+ 		if (ptag_entry.tagname != NULL
+ 			&& STRCMP(ptag_entry.tagname, tag) == 0)
+@@ -282,7 +278,7 @@
+ 	{
+ 	    if (
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-		    g_do_tagpreview ? ptag_entry.tagname == NULL :
++		    g_do_tagpreview != 0 ? ptag_entry.tagname == NULL :
+ #endif
+ 		    tagstacklen == 0)
+ 	    {
+@@ -365,7 +361,7 @@
+ 	       )
+ 	    {
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-		if (g_do_tagpreview)
++		if (g_do_tagpreview != 0)
+ 		{
+ 		    cur_match = ptag_entry.cur_match;
+ 		    cur_fnum = ptag_entry.cur_fnum;
+@@ -403,7 +399,7 @@
+ 		prevtagstackidx = tagstackidx;
+ 
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-		if (g_do_tagpreview)
++		if (g_do_tagpreview != 0)
+ 		{
+ 		    cur_match = ptag_entry.cur_match;
+ 		    cur_fnum = ptag_entry.cur_fnum;
+@@ -441,7 +437,7 @@
+ 	}
+ 
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-	if (g_do_tagpreview)
++	if (g_do_tagpreview != 0)
+ 	{
+ 	    if (type != DT_SELECT && type != DT_JUMP)
+ 	    {
+@@ -496,7 +492,7 @@
+ 	if (use_tagstack)
+ 	    name = tagstack[tagstackidx].tagname;
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-	else if (g_do_tagpreview)
++	else if (g_do_tagpreview != 0)
+ 	    name = ptag_entry.tagname;
+ #endif
+ 	else
+@@ -624,7 +620,7 @@
+ 		    parse_match(matches[i], &tagp);
+ 		    if (!new_tag && (
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-				(g_do_tagpreview
++				(g_do_tagpreview != 0
+ 				 && i == ptag_entry.cur_match) ||
+ #endif
+ 				(use_tagstack
+@@ -779,17 +775,25 @@
+ 	    {
+ 		list_T	*list;
+ 		char_u	tag_name[128 + 1];
+-		char_u	fname[MAXPATHL + 1];
+-		char_u	cmd[CMDBUFFSIZE + 1];
++		char_u	*fname;
++		char_u	*cmd;
+ 
+ 		/*
+ 		 * Add the matching tags to the location list for the current
+ 		 * window.
+ 		 */
+ 
++		fname = alloc(MAXPATHL + 1);
++		cmd = alloc(CMDBUFFSIZE + 1);
+ 		list = list_alloc();
+-		if (list == NULL)
++		if (list == NULL || fname == NULL || cmd == NULL)
++		{
++		    vim_free(cmd);
++		    vim_free(fname);
++		    if (list != NULL)
++			list_free(list, TRUE);
+ 		    goto end_do_tag;
++		}
+ 
+ 		for (i = 0; i < num_matches; ++i)
+ 		{
+@@ -810,7 +814,7 @@
+ 		    p = tag_full_fname(&tagp);
+ 		    if (p == NULL)
+ 			continue;
+-		    STRCPY(fname, p);
++		    vim_strncpy(fname, p, MAXPATHL);
+ 		    vim_free(p);
+ 
+ 		    /*
+@@ -915,6 +919,8 @@
+ 		set_errorlist(curwin, list, ' ', IObuff);
+ 
+ 		list_free(list, TRUE);
++		vim_free(fname);
++		vim_free(cmd);
+ 
+ 		cur_match = 0;		/* Jump to the first tag */
+ 	    }
+@@ -966,7 +972,7 @@
+ 		++tagstackidx;
+ 	    }
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-	    else if (g_do_tagpreview)
++	    else if (g_do_tagpreview != 0)
+ 	    {
+ 		ptag_entry.cur_match = cur_match;
+ 		ptag_entry.cur_fnum = cur_fnum;
+@@ -1271,6 +1277,7 @@
+ {
+     FILE       *fp;
+     char_u     *lbuf;			/* line buffer */
++    int		lbuf_size = LSIZE;	/* length of lbuf */
+     char_u     *tag_fname;		/* name of tag file */
+     tagname_T	tn;			/* info for get_tagfname() */
+     int		first_file;		/* trying first tag file */
+@@ -1285,6 +1292,7 @@
+     char_u	*s;
+     int		i;
+ #ifdef FEAT_TAG_BINS
++    int		tag_file_sorted = NUL;	/* !_TAG_FILE_SORTED value */
+     struct tag_search_info	/* Binary search file offsets */
+     {
+ 	off_t	low_offset;	/* offset for first char of first line that
+@@ -1345,7 +1353,6 @@
+     int		match_count = 0;		/* number of matches found */
+     char_u	**matches;
+     int		mtt;
+-    int		len;
+     int		help_save;
+ #ifdef FEAT_MULTI_LANG
+     int		help_pri = 0;
+@@ -1354,13 +1361,8 @@
+     char_u	*saved_pat = NULL;		/* copy of pat[] */
+ #endif
+ 
+-    /* Use two sets of variables for the pattern: "orgpat" holds the values
+-     * for the original pattern and "convpat" converted from 'encoding' to
+-     * encoding of the tags file.  "pats" point to either one of these. */
+-    pat_T	*pats;
+     pat_T	orgpat;			/* holds unconverted pattern info */
+ #ifdef FEAT_MBYTE
+-    pat_T	convpat;		/* holds converted pattern info */
+     vimconv_T	vimconv;
+ #endif
+ 
+@@ -1384,7 +1386,6 @@
+ 
+     help_save = curbuf->b_help;
+     orgpat.pat = pat;
+-    pats = &orgpat;
+ #ifdef FEAT_MBYTE
+     vimconv.vc_type = CONV_NONE;
+ #endif
+@@ -1392,7 +1393,7 @@
+ /*
+  * Allocate memory for the buffers that are used
+  */
+-    lbuf = alloc(LSIZE);
++    lbuf = alloc(lbuf_size);
+     tag_fname = alloc(MAXPATHL + 1);
+ #ifdef FEAT_EMACS_TAGS
+     ebuf = alloc(LSIZE);
+@@ -1418,30 +1419,32 @@
+     if (help_only)				/* want tags from help file */
+ 	curbuf->b_help = TRUE;			/* will be restored later */
+ 
+-    pats->len = (int)STRLEN(pat);
++    orgpat.len = (int)STRLEN(pat);
+ #ifdef FEAT_MULTI_LANG
+     if (curbuf->b_help)
+     {
+ 	/* When "@ab" is specified use only the "ab" language, otherwise
+ 	 * search all languages. */
+-	if (pats->len > 3 && pat[pats->len - 3] == '@'
+-					  && ASCII_ISALPHA(pat[pats->len - 2])
+-					 && ASCII_ISALPHA(pat[pats->len - 1]))
++	if (orgpat.len > 3 && pat[orgpat.len - 3] == '@'
++					  && ASCII_ISALPHA(pat[orgpat.len - 2])
++					 && ASCII_ISALPHA(pat[orgpat.len - 1]))
+ 	{
+-	    saved_pat = vim_strnsave(pat, pats->len - 3);
++	    saved_pat = vim_strnsave(pat, orgpat.len - 3);
+ 	    if (saved_pat != NULL)
+ 	    {
+-		help_lang_find = &pat[pats->len - 2];
+-		pats->pat = saved_pat;
+-		pats->len -= 3;
++		help_lang_find = &pat[orgpat.len - 2];
++		orgpat.pat = saved_pat;
++		orgpat.len -= 3;
+ 	    }
+ 	}
+     }
+ #endif
+-    if (p_tl != 0 && pats->len > p_tl)		/* adjust for 'taglength' */
+-	pats->len = p_tl;
++    if (p_tl != 0 && orgpat.len > p_tl)		/* adjust for 'taglength' */
++	orgpat.len = p_tl;
+ 
+-    prepare_pats(pats, has_re);
++    prepare_pats(&orgpat, has_re);
++    if (has_re && orgpat.regmatch.regprog == NULL)
++	goto findtag_end;
+ 
+ #ifdef FEAT_TAG_BINS
+     /* This is only to avoid a compiler warning for using search_info
+@@ -1460,13 +1463,13 @@
+      * Only ignore case when TAG_NOIC not used or 'ignorecase' set.
+      */
+ #ifdef FEAT_TAG_BINS
+-    pats->regmatch.rm_ic = ((p_ic || !noic)
+-				&& (findall || pats->headlen == 0 || !p_tbs));
++    orgpat.regmatch.rm_ic = ((p_ic || !noic)
++				&& (findall || orgpat.headlen == 0 || !p_tbs));
+     for (round = 1; round <= 2; ++round)
+     {
+-      linear = (pats->headlen == 0 || !p_tbs || round == 2);
++      linear = (orgpat.headlen == 0 || !p_tbs || round == 2);
+ #else
+-      pats->regmatch.rm_ic = (p_ic || !noic);
++      orgpat.regmatch.rm_ic = (p_ic || !noic);
+ #endif
+ 
+       /*
+@@ -1695,6 +1698,36 @@
+ 	    }
+ line_read_in:
+ 
++#ifdef FEAT_MBYTE
++	    if (vimconv.vc_type != CONV_NONE)
++	    {
++		char_u	*conv_line;
++		int	len;
++
++		/* Convert every line.  Converting the pattern from 'enc' to
++		 * the tags file encoding doesn't work, because characters are
++		 * not recognized. */
++		conv_line = string_convert(&vimconv, lbuf, NULL);
++		if (conv_line != NULL)
++		{
++		    /* Copy or swap lbuf and conv_line. */
++		    len = (int)STRLEN(conv_line) + 1;
++		    if (len > lbuf_size)
++		    {
++			vim_free(lbuf);
++			lbuf = conv_line;
++			lbuf_size = len;
++		    }
++		    else
++		    {
++			STRCPY(lbuf, conv_line);
++			vim_free(conv_line);
++		    }
++		}
++	    }
++#endif
++
++
+ #ifdef FEAT_EMACS_TAGS
+ 	    /*
+ 	     * Emacs tags line with CTRL-L: New file name on next line.
+@@ -1764,6 +1797,33 @@
+ 	     */
+ 	    if (state == TS_START)
+ 	    {
++		if (STRNCMP(lbuf, "!_TAG_", 6) == 0)
++		{
++		    /*
++		     * Read header line.
++		     */
++#ifdef FEAT_TAG_BINS
++		    if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
++			tag_file_sorted = lbuf[18];
++#endif
++#ifdef FEAT_MBYTE
++		    if (STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
++		    {
++			/* Prepare to convert every line from the specified
++			 * encoding to 'encoding'. */
++			for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
++			    ;
++			*p = NUL;
++			convert_setup(&vimconv, lbuf + 20, p_enc);
++		    }
++#endif
++
++		    /* Read the next line.  Unrecognized flags are ignored. */
++		    continue;
++		}
++
++		/* Headers ends. */
++
+ #ifdef FEAT_TAG_BINS
+ 		/*
+ 		 * When there is no tag head, or ignoring case, need to do a
+@@ -1780,26 +1840,22 @@
+ 		if (linear)
+ # endif
+ 		    state = TS_LINEAR;
+-		else if (STRNCMP(lbuf, "!_TAG_", 6) > 0)
++		else if (tag_file_sorted == NUL)
+ 		    state = TS_BINARY;
+-		else if (STRNCMP(lbuf, "!_TAG_FILE_SORTED\t", 18) == 0)
+-		{
+-		    /* Check sorted flag */
+-		    if (lbuf[18] == '1')
++		else if (tag_file_sorted == '1')
+ 			state = TS_BINARY;
+-		    else if (lbuf[18] == '2')
+-		    {
+-			state = TS_BINARY;
+-			sortic = TRUE;
+-			pats->regmatch.rm_ic = (p_ic || !noic);
+-		    }
+-		    else
+-			state = TS_LINEAR;
++		else if (tag_file_sorted == '2')
++		{
++		    state = TS_BINARY;
++		    sortic = TRUE;
++		    orgpat.regmatch.rm_ic = (p_ic || !noic);
+ 		}
++		else
++		    state = TS_LINEAR;
+ 
+-		if (state == TS_BINARY && pats->regmatch.rm_ic && !sortic)
++		if (state == TS_BINARY && orgpat.regmatch.rm_ic && !sortic)
+ 		{
+-		    /* binary search won't work for ignoring case, use linear
++		    /* Binary search won't work for ignoring case, use linear
+ 		     * search. */
+ 		    linear = TRUE;
+ 		    state = TS_LINEAR;
+@@ -1837,40 +1893,12 @@
+ #endif
+ 	    }
+ 
+-#ifdef FEAT_MBYTE
+-	    if (lbuf[0] == '!' && pats == &orgpat
+-			   && STRNCMP(lbuf, "!_TAG_FILE_ENCODING\t", 20) == 0)
+-	    {
+-		/* Convert the search pattern from 'encoding' to the
+-		 * specified encoding. */
+-		for (p = lbuf + 20; *p > ' ' && *p < 127; ++p)
+-		    ;
+-		*p = NUL;
+-		convert_setup(&vimconv, p_enc, lbuf + 20);
+-		if (vimconv.vc_type != CONV_NONE)
+-		{
+-		    convpat.pat = string_convert(&vimconv, pats->pat, NULL);
+-		    if (convpat.pat != NULL)
+-		    {
+-			pats = &convpat;
+-			pats->len = (int)STRLEN(pats->pat);
+-			prepare_pats(pats, has_re);
+-			pats->regmatch.rm_ic = orgpat.regmatch.rm_ic;
+-		    }
+-		}
+-
+-		/* Prepare for converting a match the other way around. */
+-		convert_setup(&vimconv, lbuf + 20, p_enc);
+-		continue;
+-	    }
+-#endif
+-
+ 	    /*
+ 	     * Figure out where the different strings are in this line.
+ 	     * For "normal" tags: Do a quick check if the tag matches.
+ 	     * This speeds up tag searching a lot!
+ 	     */
+-	    if (pats->headlen
++	    if (orgpat.headlen
+ #ifdef FEAT_EMACS_TAGS
+ 			    && !is_etag
+ #endif
+@@ -1879,12 +1907,39 @@
+ 		tagp.tagname = lbuf;
+ #ifdef FEAT_TAG_ANYWHITE
+ 		tagp.tagname_end = skiptowhite(lbuf);
+-		if (*tagp.tagname_end == NUL)	    /* corrupted tag line */
++		if (*tagp.tagname_end == NUL)
+ #else
+ 		tagp.tagname_end = vim_strchr(lbuf, TAB);
+-		if (tagp.tagname_end == NULL)	    /* corrupted tag line */
++		if (tagp.tagname_end == NULL)
+ #endif
+ 		{
++		    if (vim_strchr(lbuf, NL) == NULL)
++		    {
++			/* Truncated line, ignore it.  Has been reported for
++			 * Mozilla JS with extremely long names. */
++			if (p_verbose >= 5)
++			{
++			    verbose_enter();
++			    MSG(_("Ignoring long line in tags file"));
++			    verbose_leave();
++			}
++#ifdef FEAT_TAG_BINS
++			if (state != TS_LINEAR)
++			{
++			    /* Avoid getting stuck. */
++			    linear = TRUE;
++			    state = TS_LINEAR;
++# ifdef HAVE_FSEEKO
++			    fseeko(fp, search_info.low_offset, SEEK_SET);
++# else
++			    fseek(fp, (long)search_info.low_offset, SEEK_SET);
++# endif
++			}
++#endif
++			continue;
++		    }
++
++		    /* Corrupted tag line. */
+ 		    line_error = TRUE;
+ 		    break;
+ 		}
+@@ -1927,9 +1982,9 @@
+ 		cmplen = (int)(tagp.tagname_end - tagp.tagname);
+ 		if (p_tl != 0 && cmplen > p_tl)	    /* adjust for 'taglength' */
+ 		    cmplen = p_tl;
+-		if (has_re && pats->headlen < cmplen)
+-		    cmplen = pats->headlen;
+-		else if (state == TS_LINEAR && pats->headlen != cmplen)
++		if (has_re && orgpat.headlen < cmplen)
++		    cmplen = orgpat.headlen;
++		else if (state == TS_LINEAR && orgpat.headlen != cmplen)
+ 		    continue;
+ 
+ #ifdef FEAT_TAG_BINS
+@@ -1948,10 +2003,10 @@
+ 		     * Compare the current tag with the searched tag.
+ 		     */
+ 		    if (sortic)
+-			tagcmp = tag_strnicmp(tagp.tagname, pats->head,
++			tagcmp = tag_strnicmp(tagp.tagname, orgpat.head,
+ 							      (size_t)cmplen);
+ 		    else
+-			tagcmp = STRNCMP(tagp.tagname, pats->head, cmplen);
++			tagcmp = STRNCMP(tagp.tagname, orgpat.head, cmplen);
+ 
+ 		    /*
+ 		     * A match with a shorter tag means to search forward.
+@@ -1959,9 +2014,9 @@
+ 		     */
+ 		    if (tagcmp == 0)
+ 		    {
+-			if (cmplen < pats->headlen)
++			if (cmplen < orgpat.headlen)
+ 			    tagcmp = -1;
+-			else if (cmplen > pats->headlen)
++			else if (cmplen > orgpat.headlen)
+ 			    tagcmp = 1;
+ 		    }
+ 
+@@ -2005,7 +2060,7 @@
+ 		}
+ 		else if (state == TS_SKIP_BACK)
+ 		{
+-		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
++		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ 			state = TS_STEP_FORWARD;
+ 		    else
+ 			/* Have to skip back more.  Restore the curr_offset
+@@ -2015,7 +2070,7 @@
+ 		}
+ 		else if (state == TS_STEP_FORWARD)
+ 		{
+-		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
++		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ 		    {
+ 			if ((off_t)ftell(fp) > search_info.match_offset)
+ 			    break;	/* past last match */
+@@ -2026,7 +2081,7 @@
+ 		else
+ #endif
+ 		    /* skip this match if it can't match */
+-		    if (MB_STRNICMP(tagp.tagname, pats->head, cmplen) != 0)
++		    if (MB_STRNICMP(tagp.tagname, orgpat.head, cmplen) != 0)
+ 		    continue;
+ 
+ 		/*
+@@ -2077,41 +2132,41 @@
+ 	    if (p_tl != 0 && cmplen > p_tl)	    /* adjust for 'taglength' */
+ 		cmplen = p_tl;
+ 	    /* if tag length does not match, don't try comparing */
+-	    if (pats->len != cmplen)
++	    if (orgpat.len != cmplen)
+ 		match = FALSE;
+ 	    else
+ 	    {
+-		if (pats->regmatch.rm_ic)
++		if (orgpat.regmatch.rm_ic)
+ 		{
+-		    match = (MB_STRNICMP(tagp.tagname, pats->pat, cmplen) == 0);
++		    match = (MB_STRNICMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ 		    if (match)
+-			match_no_ic = (STRNCMP(tagp.tagname, pats->pat,
++			match_no_ic = (STRNCMP(tagp.tagname, orgpat.pat,
+ 								cmplen) == 0);
+ 		}
+ 		else
+-		    match = (STRNCMP(tagp.tagname, pats->pat, cmplen) == 0);
++		    match = (STRNCMP(tagp.tagname, orgpat.pat, cmplen) == 0);
+ 	    }
+ 
+ 	    /*
+ 	     * Has a regexp: Also find tags matching regexp.
+ 	     */
+ 	    match_re = FALSE;
+-	    if (!match && pats->regmatch.regprog != NULL)
++	    if (!match && orgpat.regmatch.regprog != NULL)
+ 	    {
+ 		int	cc;
+ 
+ 		cc = *tagp.tagname_end;
+ 		*tagp.tagname_end = NUL;
+-		match = vim_regexec(&pats->regmatch, tagp.tagname, (colnr_T)0);
++		match = vim_regexec(&orgpat.regmatch, tagp.tagname, (colnr_T)0);
+ 		if (match)
+ 		{
+-		    matchoff = (int)(pats->regmatch.startp[0] - tagp.tagname);
+-		    if (pats->regmatch.rm_ic)
++		    matchoff = (int)(orgpat.regmatch.startp[0] - tagp.tagname);
++		    if (orgpat.regmatch.rm_ic)
+ 		    {
+-			pats->regmatch.rm_ic = FALSE;
+-			match_no_ic = vim_regexec(&pats->regmatch, tagp.tagname,
++			orgpat.regmatch.rm_ic = FALSE;
++			match_no_ic = vim_regexec(&orgpat.regmatch, tagp.tagname,
+ 								  (colnr_T)0);
+-			pats->regmatch.rm_ic = TRUE;
++			orgpat.regmatch.rm_ic = TRUE;
+ 		    }
+ 		}
+ 		*tagp.tagname_end = cc;
+@@ -2168,7 +2223,7 @@
+ 			else
+ 			    mtt = MT_GL_OTH;
+ 		    }
+-		    if (pats->regmatch.rm_ic && !match_no_ic)
++		    if (orgpat.regmatch.rm_ic && !match_no_ic)
+ 			mtt += MT_IC_OFF;
+ 		    if (match_re)
+ 			mtt += MT_RE_OFF;
+@@ -2181,35 +2236,8 @@
+ 		 */
+ 		if (ga_grow(&ga_match[mtt], 1) == OK)
+ 		{
+-#ifdef FEAT_MBYTE
+-		    char_u	*conv_line = NULL;
+-		    char_u	*lbuf_line = lbuf;
++		    int len;
+ 
+-		    if (vimconv.vc_type != CONV_NONE)
+-		    {
+-			/* Convert the tag line from the encoding of the tags
+-			 * file to 'encoding'.  Then parse the line again. */
+-			conv_line = string_convert(&vimconv, lbuf, NULL);
+-			if (conv_line != NULL)
+-			{
+-			    if (parse_tag_line(conv_line,
+-#ifdef FEAT_EMACS_TAGS
+-					is_etag,
+-#endif
+-					&tagp) == OK)
+-				lbuf_line = conv_line;
+-			    else
+-				/* doesn't work, go back to unconverted line. */
+-				(void)parse_tag_line(lbuf,
+-#ifdef FEAT_EMACS_TAGS
+-						     is_etag,
+-#endif
+-						     &tagp);
+-			}
+-		    }
+-#else
+-# define lbuf_line lbuf
+-#endif
+ 		    if (help_only)
+ 		    {
+ #ifdef FEAT_MULTI_LANG
+@@ -2301,7 +2329,7 @@
+ 			 * without Emacs tags: <mtt><tag_fname><NUL><lbuf>
+ 			 */
+ 			len = (int)STRLEN(tag_fname)
+-						 + (int)STRLEN(lbuf_line) + 3;
++						 + (int)STRLEN(lbuf) + 3;
+ #ifdef FEAT_EMACS_TAGS
+ 			if (is_etag)
+ 			    len += (int)STRLEN(ebuf) + 1;
+@@ -2331,7 +2359,7 @@
+ 			    else
+ 				*s++ = NUL;
+ #endif
+-			    STRCPY(s, lbuf_line);
++			    STRCPY(s, lbuf);
+ 			}
+ 		    }
+ 
+@@ -2367,10 +2395,6 @@
+ 			else
+ 			    vim_free(mfp);
+ 		    }
+-#ifdef FEAT_MBYTE
+-		    /* Note: this makes the values in "tagp" invalid! */
+-		    vim_free(conv_line);
+-#endif
+ 		}
+ 		else    /* Out of memory! Just forget about the rest. */
+ 		{
+@@ -2409,19 +2433,12 @@
+ 	}
+ #endif
+ #ifdef FEAT_MBYTE
+-	if (pats == &convpat)
+-	{
+-	    /* Go back from converted pattern to original pattern. */
+-	    vim_free(pats->pat);
+-	    vim_free(pats->regmatch.regprog);
+-	    orgpat.regmatch.rm_ic = pats->regmatch.rm_ic;
+-	    pats = &orgpat;
+-	}
+ 	if (vimconv.vc_type != CONV_NONE)
+ 	    convert_setup(&vimconv, NULL, NULL);
+ #endif
+ 
+ #ifdef FEAT_TAG_BINS
++	tag_file_sorted = NUL;
+ 	if (sort_error)
+ 	{
+ 	    EMSG2(_("E432: Tags file not sorted: %s"), tag_fname);
+@@ -2455,13 +2472,13 @@
+ #ifdef FEAT_TAG_BINS
+       /* stop searching when already did a linear search, or when TAG_NOIC
+        * used, and 'ignorecase' not set or already did case-ignore search */
+-      if (stop_searching || linear || (!p_ic && noic) || pats->regmatch.rm_ic)
++      if (stop_searching || linear || (!p_ic && noic) || orgpat.regmatch.rm_ic)
+ 	  break;
+ # ifdef FEAT_CSCOPE
+       if (use_cscope)
+ 	  break;
+ # endif
+-      pats->regmatch.rm_ic = TRUE;	/* try another time while ignoring case */
++      orgpat.regmatch.rm_ic = TRUE;	/* try another time while ignoring case */
+     }
+ #endif
+ 
+@@ -2474,7 +2491,7 @@
+ 
+ findtag_end:
+     vim_free(lbuf);
+-    vim_free(pats->regmatch.regprog);
++    vim_free(orgpat.regmatch.regprog);
+     vim_free(tag_fname);
+ #ifdef FEAT_EMACS_TAGS
+     vim_free(ebuf);
+@@ -3114,7 +3131,7 @@
+ #endif
+ 
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-    if (g_do_tagpreview)
++    if (g_do_tagpreview != 0)
+     {
+ 	postponed_split = 0;	/* don't split again below */
+ 	curwin_save = curwin;	/* Save current window */
+@@ -3143,9 +3160,7 @@
+     {
+ 	win_split(postponed_split > 0 ? postponed_split : 0,
+ 						       postponed_split_flags);
+-# ifdef FEAT_SCROLLBIND
+-	curwin->w_p_scb = FALSE;
+-# endif
++	RESET_BINDING(curwin);
+     }
+ #endif
+ 
+@@ -3154,7 +3169,7 @@
+ 	/* A :ta from a help file will keep the b_help flag set.  For ":ptag"
+ 	 * we need to use the flag from the window where we came from. */
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-	if (g_do_tagpreview)
++	if (g_do_tagpreview != 0)
+ 	    keep_help_flag = curwin_save->w_buffer->b_help;
+ 	else
+ #endif
+@@ -3328,7 +3343,8 @@
+ 	}
+ 
+ #if defined(FEAT_WINDOWS) && defined(FEAT_QUICKFIX)
+-	if (g_do_tagpreview && curwin != curwin_save && win_valid(curwin_save))
++	if (g_do_tagpreview != 0
++			   && curwin != curwin_save && win_valid(curwin_save))
+ 	{
+ 	    /* Return cursor to where we were */
+ 	    validate_cursor();
+@@ -3782,8 +3798,9 @@
+     char_u  *start;		/* start of the value */
+     char_u  *end;		/* after the value; can be NULL */
+ {
+-    char_u	buf[MAXPATHL];
++    char_u	*buf;
+     int		len = 0;
++    int		retval;
+ 
+     /* check that the field name doesn't exist yet */
+     if (dict_find(dict, (char_u *)field_name, -1) != NULL)
+@@ -3796,6 +3813,9 @@
+ 	}
+ 	return FAIL;
+     }
++    buf = alloc(MAXPATHL);
++    if (buf == NULL)
++	return FAIL;
+     if (start != NULL)
+     {
+ 	if (end == NULL)
+@@ -3805,12 +3825,14 @@
+ 		--end;
+ 	}
+ 	len = (int)(end - start);
+-	if (len > (int)sizeof(buf) - 1)
+-	    len = sizeof(buf) - 1;
++	if (len > MAXPATHL - 1)
++	    len = MAXPATHL - 1;
+ 	vim_strncpy(buf, start, len);
+     }
+     buf[len] = NUL;
+-    return dict_add_nr_str(dict, field_name, 0L, buf);
++    retval = dict_add_nr_str(dict, field_name, 0L, buf);
++    vim_free(buf);
++    return retval;
+ }
+ 
+ /*
+diff -Naur vim73.orig/src/term.c vim73/src/term.c
+--- vim73.orig/src/term.c	2010-07-25 13:30:31.000000000 +0000
++++ vim73/src/term.c	2013-06-07 17:07:36.052239058 +0000
+@@ -52,7 +52,7 @@
+ 
+ /*
+  * Here are the builtin termcap entries.  They are not stored as complete
+- * Tcarr structures, as such a structure is too big.
++ * structures with all entries, as such a structure is too big.
+  *
+  * The entries are compact, therefore they normally are included even when
+  * HAVE_TGETENT is defined. When HAVE_TGETENT is defined, the builtin entries
+@@ -111,6 +111,11 @@
+ #  define CRV_SENT	2	/* did send T_CRV, waiting for answer */
+ #  define CRV_GOT	3	/* received T_CRV response */
+ static int crv_status = CRV_GET;
++/* Request Cursor position report: */
++#  define U7_GET	1	/* send T_U7 when switched to RAW mode */
++#  define U7_SENT	2	/* did send T_U7, waiting for answer */
++#  define U7_GOT	3	/* received T_U7 response */
++static int u7_status = U7_GET;
+ # endif
+ 
+ /*
+@@ -199,71 +204,6 @@
+ #endif
+ 
+ #ifndef NO_BUILTIN_TCAPS
+-# if defined(RISCOS) || defined(ALL_BUILTIN_TCAPS)
+-/*
+- * Default for the Acorn.
+- */
+-    {(int)KS_NAME,	"riscos"},
+-    {(int)KS_CL,	"\014"},		/* Cls and Home Cursor */
+-    {(int)KS_CM,	"\001%d\001%d\002"},	/* Position cursor */
+-
+-    {(int)KS_CCO,	"16"},			/* Allow 16 colors */
+-
+-    {(int)KS_CAF,	"\001%d\021"},		/* Set foreground colour */
+-    {(int)KS_CAB,	"\001%d\022"},		/* Set background colour */
+-
+-
+-    {(int)KS_ME,	"\004"},		/* Normal mode */
+-    {(int)KS_MR,	"\005"},		/* Reverse */
+-
+-    {(int)KS_VI,	"\016"},		/* Cursor invisible */
+-    {(int)KS_VE,	"\017"},		/* Cursor visible */
+-    {(int)KS_VS,	"\020"},		/* Cursor very visible */
+-
+-    {(int)KS_CS,	"\001%d\001%d\003"},	/* Set scroll region */
+-    {(int)KS_SR,	"\023"},		/* Scroll text down */
+-    {K_UP,		"\217"},
+-    {K_DOWN,		"\216"},
+-    {K_LEFT,		"\214"},
+-    {K_RIGHT,		"\215"},
+-    {K_S_UP,		"\237"},
+-    {K_S_DOWN,		"\236"},
+-    {K_S_LEFT,		"\234"},
+-    {K_S_RIGHT,		"\235"},
+-
+-    {K_F1,		"\201"},
+-    {K_F2,		"\202"},
+-    {K_F3,		"\203"},
+-    {K_F4,		"\204"},
+-    {K_F5,		"\205"},
+-    {K_F6,		"\206"},
+-    {K_F7,		"\207"},
+-    {K_F8,		"\210"},
+-    {K_F9,		"\211"},
+-    {K_F10,		"\312"},
+-    {K_F11,		"\313"},
+-    {K_F12,		"\314"},
+-    {K_S_F1,		"\221"},
+-    {K_S_F2,		"\222"},
+-    {K_S_F3,		"\223"},
+-    {K_S_F4,		"\224"},
+-    {K_S_F5,		"\225"},
+-    {K_S_F6,		"\226"},
+-    {K_S_F7,		"\227"},
+-    {K_S_F8,		"\230"},
+-    {K_S_F9,		"\231"},
+-    {K_S_F10,		"\332"},
+-    {K_S_F11,		"\333"},
+-    {K_S_F12,		"\334"},
+-    {K_BS,		"\010"},
+-    {K_INS,		"\315"},
+-    {K_DEL,		"\177"},
+-    {K_HOME,		"\036"},
+-    {K_END,		"\213"},
+-    {K_PAGEUP,		"\237"},
+-    {K_PAGEDOWN,	"\236"},
+-# endif	/* Acorn terminal */
+-
+ 
+ # if defined(AMIGA) || defined(ALL_BUILTIN_TCAPS)
+ /*
+@@ -998,6 +938,7 @@
+     {(int)KS_CWP,	IF_EB("\033[3;%d;%dt", ESC_STR "[3;%d;%dt")},
+ #  endif
+     {(int)KS_CRV,	IF_EB("\033[>c", ESC_STR "[>c")},
++    {(int)KS_U7,	IF_EB("\033[6n", ESC_STR "[6n")},
+ 
+     {K_UP,		IF_EB("\033O*A", ESC_STR "O*A")},
+     {K_DOWN,		IF_EB("\033O*B", ESC_STR "O*B")},
+@@ -1286,6 +1227,7 @@
+     {(int)KS_CWP,	"[%dCWP%d]"},
+ #  endif
+     {(int)KS_CRV,	"[CRV]"},
++    {(int)KS_U7,	"[U7]"},
+     {K_UP,		"[KU]"},
+     {K_DOWN,		"[KD]"},
+     {K_LEFT,		"[KL]"},
+@@ -1399,10 +1341,6 @@
+ /*
+  * DEFAULT_TERM is used, when no terminal is specified with -T option or $TERM.
+  */
+-#ifdef RISCOS
+-# define DEFAULT_TERM	(char_u *)"riscos"
+-#endif
+-
+ #ifdef AMIGA
+ # define DEFAULT_TERM	(char_u *)"amiga"
+ #endif
+@@ -1665,6 +1603,7 @@
+ 				{KS_TS, "ts"}, {KS_FS, "fs"},
+ 				{KS_CWP, "WP"}, {KS_CWS, "WS"},
+ 				{KS_CSI, "SI"}, {KS_CEI, "EI"},
++				{KS_U7, "u7"},
+ 				{(enum SpecialKey)0, NULL}
+ 			    };
+ 
+@@ -1922,7 +1861,9 @@
+ #    ifdef FEAT_GUI
+ 	if (!gui.in_use)
+ #    endif
++#    ifndef FEAT_CYGWIN_WIN32_CLIPBOARD
+ 	    clip_init(FALSE);
++#    endif
+ #   endif
+ 	if (use_xterm_like_mouse(term))
+ 	{
+@@ -1933,7 +1874,12 @@
+ 	}
+ #  endif
+ 	if (p != NULL)
++	{
+ 	    set_option_value((char_u *)"ttym", 0L, p, 0);
++	    /* Reset the WAS_SET flag, 'ttymouse' can be set to "sgr" or
++	     * "xterm2" in check_termcode(). */
++	    reset_option_was_set((char_u *)"ttym");
++	}
+ 	if (p == NULL
+ #   ifdef FEAT_GUI
+ 		|| gui.in_use
+@@ -2065,6 +2011,8 @@
+ #  define HMT_DEC	4
+ #  define HMT_JSBTERM	8
+ #  define HMT_PTERM	16
++#  define HMT_URXVT	32
++#  define HMT_SGR	64
+ static int has_mouse_termcode = 0;
+ # endif
+ 
+@@ -2100,6 +2048,16 @@
+ 	has_mouse_termcode |= HMT_PTERM;
+     else
+ #   endif
++#   ifdef FEAT_MOUSE_URXVT
++    if (n == KS_URXVT_MOUSE)
++	has_mouse_termcode |= HMT_URXVT;
++    else
++#   endif
++#   ifdef FEAT_MOUSE_SGR
++    if (n == KS_SGR_MOUSE)
++	has_mouse_termcode |= HMT_SGR;
++    else
++#   endif
+ 	has_mouse_termcode |= HMT_NORMAL;
+ #  endif
+ }
+@@ -2137,6 +2095,16 @@
+ 	has_mouse_termcode &= ~HMT_PTERM;
+     else
+ #   endif
++#   ifdef FEAT_MOUSE_URXVT
++    if (n == KS_URXVT_MOUSE)
++	has_mouse_termcode &= ~HMT_URXVT;
++    else
++#   endif
++#   ifdef FEAT_MOUSE_SGR
++    if (n == KS_SGR_MOUSE)
++	has_mouse_termcode &= ~HMT_SGR;
++    else
++#   endif
+ 	has_mouse_termcode &= ~HMT_NORMAL;
+ #  endif
+ }
+@@ -3053,10 +3021,19 @@
+     int		old_Rows = Rows;
+     int		old_Columns = Columns;
+ 
+-    (void)ui_get_shellsize();
+-    check_shellsize();
+-    if (old_Rows != Rows || old_Columns != Columns)
+-	shell_resized();
++    if (!exiting
++#ifdef FEAT_GUI
++	    /* Do not get the size when executing a shell command during
++	     * startup. */
++	    && !gui.starting
++#endif
++	    )
++    {
++	(void)ui_get_shellsize();
++	check_shellsize();
++	if (old_Rows != Rows || old_Columns != Columns)
++	    shell_resized();
++    }
+ }
+ 
+ /*
+@@ -3083,12 +3060,20 @@
+     if (width < 0 || height < 0)    /* just checking... */
+ 	return;
+ 
+-    if (State == HITRETURN || State == SETWSIZE) /* postpone the resizing */
++    if (State == HITRETURN || State == SETWSIZE)
+     {
++	/* postpone the resizing */
+ 	State = SETWSIZE;
+ 	return;
+     }
+ 
++    /* curwin->w_buffer can be NULL when we are closing a window and the
++     * buffer has already been closed and removing a scrollbar causes a resize
++     * event. Don't resize then, it will happen after entering another buffer.
++     */
++    if (curwin->w_buffer == NULL)
++	return;
++
+     ++busy;
+ 
+ #ifdef AMIGA
+@@ -3206,7 +3191,8 @@
+ 		/* May need to check for T_CRV response and termcodes, it
+ 		 * doesn't work in Cooked mode, an external program may get
+ 		 * them. */
+-		if (tmode != TMODE_RAW && crv_status == CRV_SENT)
++		if (tmode != TMODE_RAW && (crv_status == CRV_SENT
++					 || u7_status == U7_SENT))
+ 		    (void)vpeekc_nomap();
+ 		check_for_codes_from_term();
+ 	    }
+@@ -3267,9 +3253,19 @@
+ 	if (!gui.in_use && !gui.starting)
+ # endif
+ 	{
+-	    /* May need to check for T_CRV response. */
+-	    if (crv_status == CRV_SENT)
+-		(void)vpeekc_nomap();
++	    /* May need to discard T_CRV or T_U7 response. */
++	    if (crv_status == CRV_SENT || u7_status == U7_SENT)
++	    {
++# ifdef UNIX
++		/* Give the terminal a chance to respond. */
++		mch_delay(100L, FALSE);
++# endif
++# ifdef TCIFLUSH
++		/* Discard data received but not read. */
++		if (exiting)
++		    tcflush(fileno(stdin), TCIFLUSH);
++# endif
++	    }
+ 	    /* Check for termcodes first, otherwise an external program may
+ 	     * get them. */
+ 	    check_for_codes_from_term();
+@@ -3322,6 +3318,48 @@
+ 	(void)vpeekc_nomap();
+     }
+ }
++
++# if defined(FEAT_MBYTE) || defined(PROTO)
++/*
++ * Check how the terminal treats ambiguous character width (UAX #11).
++ * First, we move the cursor to (0, 0) and print a test ambiguous character
++ * \u25bd (WHITE DOWN-POINTING TRIANGLE) and query current cursor position.
++ * If the terminal treats \u25bd as single width, the position is (0, 1),
++ * or if it is treated as double width, that will be (0, 2).
++ * This function has the side effect that changes cursor position, so
++ * it must be called immediately after entering termcap mode.
++ */
++    void
++may_req_ambiguous_character_width()
++{
++    if (u7_status == U7_GET
++	    && cur_tmode == TMODE_RAW
++	    && termcap_active
++	    && p_ek
++#  ifdef UNIX
++	    && isatty(1)
++	    && isatty(read_cmd_fd)
++#  endif
++	    && *T_U7 != NUL
++	    && !option_was_set((char_u *)"ambiwidth"))
++    {
++	 char_u	buf[16];
++
++	 term_windgoto(0, 0);
++	 buf[mb_char2bytes(0x25bd, buf)] = 0;
++	 out_str(buf);
++	 out_str(T_U7);
++	 u7_status = U7_SENT;
++	 term_windgoto(0, 0);
++	 out_str((char_u *)"  ");
++	 term_windgoto(0, 0);
++	 /* check for the characters now, otherwise they might be eaten by
++	  * get_keystroke() */
++	 out_flush();
++	 (void)vpeekc_nomap();
++    }
++}
++# endif
+ #endif
+ 
+ /*
+@@ -3828,23 +3866,27 @@
+  * Check from typebuf.tb_buf[typebuf.tb_off] to typebuf.tb_buf[typebuf.tb_off
+  * + max_offset].
+  * Return 0 for no match, -1 for partial match, > 0 for full match.
++ * Return KEYLEN_REMOVED when a key code was deleted.
+  * With a match, the match is removed, the replacement code is inserted in
+  * typebuf.tb_buf[] and the number of characters in typebuf.tb_buf[] is
+  * returned.
+- * When "buf" is not NULL, it is used instead of typebuf.tb_buf[]. "buflen" is
+- * then the length of the string in buf[].
++ * When "buf" is not NULL, buf[bufsize] is used instead of typebuf.tb_buf[].
++ * "buflen" is then the length of the string in buf[] and is updated for
++ * inserts and deletes.
+  */
+     int
+-check_termcode(max_offset, buf, buflen)
++check_termcode(max_offset, buf, bufsize, buflen)
+     int		max_offset;
+     char_u	*buf;
+-    int		buflen;
++    int		bufsize;
++    int		*buflen;
+ {
+     char_u	*tp;
+     char_u	*p;
+     int		slen = 0;	/* init for GCC */
+     int		modslen;
+     int		len;
++    int		retval = 0;
+     int		offset;
+     char_u	key_name[2];
+     int		modifiers;
+@@ -3894,8 +3936,7 @@
+      * Check at several positions in typebuf.tb_buf[], to catch something like
+      * "x<Up>" that can be mapped. Stop at max_offset, because characters
+      * after that cannot be used for mapping, and with @r commands
+-     * typebuf.tb_buf[]
+-     * can become very long.
++     * typebuf.tb_buf[] can become very long.
+      * This is used often, KEEP IT FAST!
+      */
+     for (offset = 0; offset < max_offset; ++offset)
+@@ -3909,10 +3950,10 @@
+ 	}
+ 	else
+ 	{
+-	    if (offset >= buflen)
++	    if (offset >= *buflen)
+ 		break;
+ 	    tp = buf + offset;
+-	    len = buflen - offset;
++	    len = *buflen - offset;
+ 	}
+ 
+ 	/*
+@@ -4064,15 +4105,32 @@
+ 	}
+ 
+ #ifdef FEAT_TERMRESPONSE
+-	if (key_name[0] == NUL)
+-	{
+-	    /* Check for xterm version string: "<Esc>[>{x};{vers};{y}c".  Also
+-	     * eat other possible responses to t_RV, rxvt returns
+-	     * "<Esc>[?1;2c".  Also accept CSI instead of <Esc>[.
+-	     * mrxvt has been reported to have "+" in the version. Assume
+-	     * the escape sequence ends with a letter or one of "{|}~". */
+-	    if (*T_CRV != NUL && ((tp[0] == ESC && tp[1] == '[' && len >= 3)
+-					       || (tp[0] == CSI && len >= 2)))
++	if (key_name[0] == NUL
++	    /* URXVT mouse uses <ESC>[#;#;#M, but we are matching <ESC>[ */
++	    || key_name[0] == KS_URXVT_MOUSE
++# ifdef FEAT_MBYTE
++	    || u7_status == U7_SENT
++# endif
++            )
++	{
++	    /* Check for some responses from terminal start with "<Esc>[" or
++	     * CSI.
++	     *
++	     * - xterm version string: <Esc>[>{x};{vers};{y}c
++	     *   Also eat other possible responses to t_RV, rxvt returns
++	     *   "<Esc>[?1;2c". Also accept CSI instead of <Esc>[.
++	     *   mrxvt has been reported to have "+" in the version. Assume
++	     *   the escape sequence ends with a letter or one of "{|}~".
++	     *
++	     * - cursor position report: <Esc>[{row};{col}R
++	     *   The final byte is 'R'. now it is only used for checking for
++	     *   ambiguous-width character state.
++	     */
++	    p = tp[0] == CSI ? tp + 1 : tp + 2;
++	    if ((*T_CRV != NUL || *T_U7 != NUL)
++			&& ((tp[0] == ESC && tp[1] == '[' && len >= 3)
++			    || (tp[0] == CSI && len >= 2))
++			&& (VIM_ISDIGIT(*p) || *p == '>' || *p == '?'))
+ 	    {
+ 		j = 0;
+ 		extra = 0;
+@@ -4080,14 +4138,41 @@
+ 				&& !(tp[i] >= '{' && tp[i] <= '~')
+ 				&& !ASCII_ISALPHA(tp[i]); ++i)
+ 		    if (tp[i] == ';' && ++j == 1)
+-			extra = atoi((char *)tp + i + 1);
++			extra = i + 1;
+ 		if (i == len)
+ 		    return -1;		/* not enough characters */
+ 
++#ifdef FEAT_MBYTE
++		/* eat it when it has 2 arguments and ends in 'R' */
++		if (j == 1 && tp[i] == 'R')
++		{
++		    char *aw = NULL;
++
++		    u7_status = U7_GOT;
++# ifdef FEAT_AUTOCMD
++		    did_cursorhold = TRUE;
++# endif
++		    if (extra > 0)
++			extra = atoi((char *)tp + extra);
++		    if (extra == 2)
++			aw = "single";
++		    else if (extra == 3)
++			aw = "double";
++		    if (aw != NULL)
++			set_option_value((char_u *)"ambw", 0L, (char_u *)aw, 0);
++		    key_name[0] = (int)KS_EXTRA;
++		    key_name[1] = (int)KE_IGNORE;
++		    slen = i + 1;
++		}
++		else
++#endif
+ 		/* eat it when at least one digit and ending in 'c' */
+-		if (i > 2 + (tp[0] != CSI) && tp[i] == 'c')
++		if (*T_CRV != NUL && i > 2 + (tp[0] != CSI) && tp[i] == 'c')
+ 		{
+ 		    crv_status = CRV_GOT;
++# ifdef FEAT_AUTOCMD
++		    did_cursorhold = TRUE;
++# endif
+ 
+ 		    /* If this code starts with CSI, you can bet that the
+ 		     * terminal uses 8-bit codes. */
+@@ -4097,15 +4182,29 @@
+ 		    /* rxvt sends its version number: "20703" is 2.7.3.
+ 		     * Ignore it for when the user has set 'term' to xterm,
+ 		     * even though it's an rxvt. */
++		    if (extra > 0)
++			extra = atoi((char *)tp + extra);
+ 		    if (extra > 20000)
+ 			extra = 0;
+ 
+ 		    if (tp[1 + (tp[0] != CSI)] == '>' && j == 2)
+ 		    {
+-			/* if xterm version >= 95 use mouse dragging */
+-			if (extra >= 95)
+-			    set_option_value((char_u *)"ttym", 0L,
++			/* Only set 'ttymouse' automatically if it was not set
++			 * by the user already. */
++			if (!option_was_set((char_u *)"ttym"))
++			{
++# ifdef TTYM_SGR
++			    if (extra >= 277)
++				set_option_value((char_u *)"ttym", 0L,
++							  (char_u *)"sgr", 0);
++			    else
++# endif
++			    /* if xterm version >= 95 use mouse dragging */
++			    if (extra >= 95)
++				set_option_value((char_u *)"ttym", 0L,
+ 						       (char_u *)"xterm2", 0);
++			}
++
+ 			/* if xterm version >= 141 try to get termcap codes */
+ 			if (extra >= 141)
+ 			{
+@@ -4184,18 +4283,24 @@
+ 	/*
+ 	 * If it is a mouse click, get the coordinates.
+ 	 */
+-	if (key_name[0] == (int)KS_MOUSE
++	if (key_name[0] == KS_MOUSE
+ # ifdef FEAT_MOUSE_JSB
+-		|| key_name[0] == (int)KS_JSBTERM_MOUSE
++		|| key_name[0] == KS_JSBTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_NET
+-		|| key_name[0] == (int)KS_NETTERM_MOUSE
++		|| key_name[0] == KS_NETTERM_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_DEC
+-		|| key_name[0] == (int)KS_DEC_MOUSE
++		|| key_name[0] == KS_DEC_MOUSE
+ # endif
+ # ifdef FEAT_MOUSE_PTERM
+-		|| key_name[0] == (int)KS_PTERM_MOUSE
++		|| key_name[0] == KS_PTERM_MOUSE
++# endif
++# ifdef FEAT_MOUSE_URXVT
++		|| key_name[0] == KS_URXVT_MOUSE
++# endif
++# ifdef FEAT_MOUSE_SGR
++		|| key_name[0] == KS_SGR_MOUSE
+ # endif
+ 		)
+ 	{
+@@ -4275,7 +4380,101 @@
+ 		    else
+ 			break;
+ 		}
++	    }
++
++# if defined(FEAT_MOUSE_URXVT) || defined(FEAT_MOUSE_SGR)
++	    if (key_name[0] == KS_URXVT_MOUSE
++		|| key_name[0] == KS_SGR_MOUSE)
++	    {
++		for (;;)
++		{
++		    /* URXVT 1015 mouse reporting mode:
++		     * Almost identical to xterm mouse mode, except the values
++		     * are decimal instead of bytes.
++		     *
++		     * \033[%d;%d;%dM
++		     *		  ^-- row
++		     *	       ^----- column
++		     *	    ^-------- code
++		     *
++		     * SGR 1006 mouse reporting mode:
++		     * Almost identical to xterm mouse mode, except the values
++		     * are decimal instead of bytes.
++		     *
++		     * \033[<%d;%d;%dM
++		     *		   ^-- row
++		     *	        ^----- column
++		     *	     ^-------- code
++		     *
++		     * \033[<%d;%d;%dm        : mouse release event
++		     *		   ^-- row
++		     *	        ^----- column
++		     *	     ^-------- code
++		     */
++		    p = tp + slen;
++
++		    mouse_code = getdigits(&p);
++		    if (*p++ != ';')
++			return -1;
++
++		    /* when mouse reporting is SGR, add 32 to mouse code */
++                    if (key_name[0] == KS_SGR_MOUSE)
++                        mouse_code += 32;
++
++		    mouse_col = getdigits(&p) - 1;
++		    if (*p++ != ';')
++			return -1;
++
++		    mouse_row = getdigits(&p) - 1;
++                    if (key_name[0] == KS_SGR_MOUSE && *p == 'm')
++			mouse_code |= MOUSE_RELEASE;
++                    else if (*p != 'M')
++			return -1;
++                    p++;
++
++		    slen += (int)(p - (tp + slen));
++
++		    /* skip this one if next one has same code (like xterm
++		     * case) */
++		    j = termcodes[idx].len;
++		    if (STRNCMP(tp, tp + slen, (size_t)j) == 0)
++		    {
++			int slen2;
++			int cmd_complete = 0;
++
++			/* check if the command is complete by looking for the
++			 * 'M' */
++			for (slen2 = slen; slen2 < len; slen2++)
++			{
++			    if (tp[slen2] == 'M'
++                                || (key_name[0] == KS_SGR_MOUSE
++							 && tp[slen2] == 'm'))
++			    {
++				cmd_complete = 1;
++				break;
++			    }
++			}
++			p += j;
++			if (cmd_complete && getdigits(&p) == mouse_code)
++			{
++			    slen += j; /* skip the \033[ */
++			    continue;
++			}
++		    }
++		    break;
++		}
++	    }
++# endif
+ 
++	if (key_name[0] == (int)KS_MOUSE
++#ifdef FEAT_MOUSE_URXVT
++	    || key_name[0] == (int)KS_URXVT_MOUSE
++#endif
++#ifdef FEAT_MOUSE_SGR
++	    || key_name[0] == KS_SGR_MOUSE
++#endif
++	    )
++	{
+ #  if !defined(MSWIN) && !defined(MSDOS)
+ 		/*
+ 		 * Handle mouse events.
+@@ -4940,6 +5139,13 @@
+ #endif
+ 		string[new_slen++] = key_name[1];
+ 	}
++	else if (new_slen == 0 && key_name[0] == KS_EXTRA
++						  && key_name[1] == KE_IGNORE)
++	{
++	    /* Do not put K_IGNORE into the buffer, do return KEYLEN_REMOVED
++	     * to indicate what happened. */
++	    retval = KEYLEN_REMOVED;
++	}
+ 	else
+ 	{
+ 	    string[new_slen++] = K_SPECIAL;
+@@ -4969,14 +5175,20 @@
+ 	    if (extra < 0)
+ 		/* remove matched characters */
+ 		mch_memmove(buf + offset, buf + offset - extra,
+-					   (size_t)(buflen + offset + extra));
++					   (size_t)(*buflen + offset + extra));
+ 	    else if (extra > 0)
+-		/* insert the extra space we need */
++	    {
++		/* Insert the extra space we need.  If there is insufficient
++		 * space return -1. */
++		if (*buflen + extra + new_slen >= bufsize)
++		    return -1;
+ 		mch_memmove(buf + offset + extra, buf + offset,
+-						   (size_t)(buflen - offset));
++						   (size_t)(*buflen - offset));
++	    }
+ 	    mch_memmove(buf + offset, string, (size_t)new_slen);
++	    *buflen = *buflen + extra + new_slen;
+ 	}
+-	return (len + extra + offset);
++	return retval == 0 ? (len + extra + offset) : retval;
+     }
+ 
+     return 0;			    /* no match found */
+@@ -5219,12 +5431,12 @@
+     char_u	*src;
+ {
+     int		i;
+-    int		slen;
++    int		slen = (int)STRLEN(src);
+ 
+     for (i = 0; i < tc_len; ++i)
+     {
+-	slen = termcodes[i].len;
+-	if (slen > 1 && STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
++	if (slen == termcodes[i].len
++			&& STRNCMP(termcodes[i].code, src, (size_t)slen) == 0)
+ 	    return i;
+     }
+     return -1;
+diff -Naur vim73.orig/src/term.h vim73/src/term.h
+--- vim73.orig/src/term.h	2010-05-15 11:04:06.000000000 +0000
++++ vim73/src/term.h	2013-06-07 17:07:36.055572382 +0000
+@@ -83,10 +83,11 @@
+ #ifdef FEAT_VERTSPLIT
+     KS_CSV,	/* scroll region vertical */
+ #endif
+-    KS_OP	/* original color pair */
++    KS_OP,	/* original color pair */
++    KS_U7	/* request cursor position */
+ };
+ 
+-#define KS_LAST	    KS_OP
++#define KS_LAST	    KS_U7
+ 
+ /*
+  * the terminal capabilities are stored in this array
+@@ -158,6 +159,7 @@
+ #define T_CEI	(term_str(KS_CEI))	/* end insert mode */
+ #define T_CRV	(term_str(KS_CRV))	/* request version string */
+ #define T_OP	(term_str(KS_OP))	/* original color pair */
++#define T_U7	(term_str(KS_U7))	/* request cursor position */
+ 
+ #define TMODE_COOK  0	/* terminal mode for external cmds and Ex mode */
+ #define TMODE_SLEEP 1	/* terminal mode for sleeping (cooked but no echo) */
+diff -Naur vim73.orig/src/termlib.c vim73/src/termlib.c
+--- vim73.orig/src/termlib.c	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/termlib.c	2013-06-07 17:07:36.078905649 +0000
+@@ -13,7 +13,7 @@
+ #include "vim.h"
+ #include "termlib.pro"
+ 
+-#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS) && !defined(RISCOS)
++#if !defined(AMIGA) && !defined(VMS) && !defined(MACOS)
+ # include <sgtty.h>
+ #endif
+ 
+diff -Naur vim73.orig/src/testdir/Make_amiga.mak vim73/src/testdir/Make_amiga.mak
+--- vim73.orig/src/testdir/Make_amiga.mak	2010-08-04 14:34:34.000000000 +0000
++++ vim73/src/testdir/Make_amiga.mak	2013-06-07 17:07:36.088905620 +0000
+@@ -13,6 +13,8 @@
+ # test25	uses symbolic link
+ # test27	can't edit file with "*"
+ # test52	only for Win32
++# test85	no Lua interface
++# test86, 87	no Python interface
+ 
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ 		test7.out test8.out test9.out \
+@@ -27,7 +29,11 @@
+ 		test56.out test57.out test58.out test59.out test60.out \
+ 		test61.out test62.out test63.out test64.out test65.out \
+ 		test66.out test67.out test68.out test69.out test70.out \
+-		test71.out test72.out test73.out
++		test71.out test72.out test73.out test74.out test75.out \
++		test76.out test77.out test78.out test79.out test80.out \
++		test81.out test82.out test83.out test84.out test88.out \
++		test89.out test90.out test91.out test92.out test93.out \
++		test94.out test95.out
+ 
+ .SUFFIXES: .in .out
+ 
+@@ -120,3 +126,22 @@
+ test71.out: test71.in
+ test72.out: test72.in
+ test73.out: test73.in
++test74.out: test74.in
++test75.out: test75.in
++test76.out: test76.in
++test77.out: test77.in
++test78.out: test78.in
++test79.out: test79.in
++test80.out: test80.in
++test81.out: test81.in
++test82.out: test82.in
++test83.out: test83.in
++test84.out: test84.in
++test88.out: test88.in
++test89.out: test89.in
++test90.out: test90.in
++test91.out: test91.in
++test92.out: test92.in
++test93.out: test93.in
++test94.out: test94.in
++test95.out: test95.in
+diff -Naur vim73.orig/src/testdir/Make_dos.mak vim73/src/testdir/Make_dos.mak
+--- vim73.orig/src/testdir/Make_dos.mak	2010-08-13 16:27:19.000000000 +0000
++++ vim73/src/testdir/Make_dos.mak	2013-06-07 17:07:36.108905563 +0000
+@@ -27,7 +27,12 @@
+ 		test30.out test31.out test32.out test33.out test34.out \
+ 		test37.out test38.out test39.out test40.out test41.out \
+ 		test42.out test52.out test65.out test66.out test67.out \
+-		test68.out test69.out test71.out test72.out test73.out
++		test68.out test69.out test71.out test72.out test73.out \
++		test74.out test75.out test76.out test77.out test78.out \
++		test79.out test80.out test81.out test82.out test83.out \
++		test84.out test85.out test86.out test87.out test88.out \
++		test89.out test90.out test91.out test92.out test93.out \
++		test94.out test95.out
+ 
+ SCRIPTS32 =	test50.out test70.out
+ 
+@@ -49,7 +54,8 @@
+ 
+ fixff:
+ 	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
+-	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q dotest.in
++	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
++		dotest.in test60.ok test71.ok test74.ok
+ 
+ clean:
+ 	-del *.out
+@@ -58,6 +64,7 @@
+ 	-if exist tiny.vim del tiny.vim
+ 	-if exist mbyte.vim del mbyte.vim
+ 	-if exist mzscheme.vim del mzscheme.vim
++	-if exist lua.vim del lua.vim
+ 	-del X*
+ 	-if exist viminfo del viminfo
+ 
+diff -Naur vim73.orig/src/testdir/Make_ming.mak vim73/src/testdir/Make_ming.mak
+--- vim73.orig/src/testdir/Make_ming.mak	2010-08-04 14:34:47.000000000 +0000
++++ vim73/src/testdir/Make_ming.mak	2013-06-07 17:07:36.125572182 +0000
+@@ -47,7 +47,12 @@
+ 		test30.out test31.out test32.out test33.out test34.out \
+ 		test37.out test38.out test39.out test40.out test41.out \
+ 		test42.out test52.out test65.out test66.out test67.out \
+-		test68.out test69.out test71.out test72.out test72.out
++		test68.out test69.out test71.out test72.out test73.out \
++		test74.out test75.out test76.out test77.out test78.out \
++		test79.out test80.out test81.out test82.out test83.out \
++		test84.out test85.out test86.out test87.out test88.out \
++		test89.out test90.out test91.out test92.out test93.out \
++		test94.out test95.out
+ 
+ SCRIPTS32 =	test50.out test70.out
+ 
+@@ -72,6 +77,8 @@
+ 
+ fixff:
+ 	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=dos|upd" +q *.in *.ok
++	-$(VIMPROG) -u dos.vim --noplugin "+argdo set ff=unix|upd" +q \
++		dotest.in test60.ok test71.ok test74.ok
+ 
+ clean:
+ 	-$(DEL) *.out
+@@ -80,6 +87,7 @@
+ 	-$(DEL) tiny.vim
+ 	-$(DEL) mbyte.vim
+ 	-$(DEL) mzscheme.vim
++	-$(DEL) lua.vim
+ 	-$(DEL) X*
+ 	-$(DEL) viminfo
+ 
+diff -Naur vim73.orig/src/testdir/Make_os2.mak vim73/src/testdir/Make_os2.mak
+--- vim73.orig/src/testdir/Make_os2.mak	2010-08-04 14:34:55.000000000 +0000
++++ vim73/src/testdir/Make_os2.mak	2013-06-07 17:07:36.132238830 +0000
+@@ -13,6 +13,8 @@
+ # test25	uses symbolic link
+ # test27	can't edit file with "*" in file name
+ # test52	only for Win32
++# test85	no Lua interface
++# test86, 87	no Python interface
+ 
+ SCRIPTS = test1.out test3.out test4.out test5.out test6.out \
+ 		test7.out test8.out test9.out \
+@@ -27,7 +29,11 @@
+ 		test56.out test57.out test58.out test59.out test60.out \
+ 		test61.out test62.out test63.out test64.out test65.out \
+ 		test66.out test67.out test68.out test69.out test70.out \
+-		test71.out test72.out test73.out
++		test71.out test72.out test73.out test74.out test75.out \
++		test76.out test77.out test78.out test79.out test80.out \
++		test81.out test82.out test83.out test84.out test88.out \
++		test89.out test90.out test91.out test92.out test93.out \
++		test94.out test95.out
+ 
+ .SUFFIXES: .in .out
+ 
+diff -Naur vim73.orig/src/testdir/Make_vms.mms vim73/src/testdir/Make_vms.mms
+--- vim73.orig/src/testdir/Make_vms.mms	2010-08-04 14:35:46.000000000 +0000
++++ vim73/src/testdir/Make_vms.mms	2013-06-07 17:07:36.142238801 +0000
+@@ -4,7 +4,7 @@
+ # Authors:	Zoltan Arpadffy, <arpadffy@polarhome.com>
+ #		Sandor Kopanyi,  <sandor.kopanyi@mailbox.hu>
+ #
+-# Last change:  2010 Aug 04
++# Last change:  2013 May 18
+ #
+ # This has been tested on VMS 6.2 to 8.3 on DEC Alpha, VAX and IA64.
+ # Edit the lines in the Configuration section below to select.
+@@ -74,7 +74,11 @@
+ 	 test56.out test57.out test60.out \
+ 	 test61.out test62.out test63.out test64.out test65.out \
+ 	 test66.out test67.out test68.out test69.out \
+-	 test71.out test72.out
++	 test71.out test72.out test74.out test75.out test76.out \
++	 test77.out test78.out test79.out test80.out test81.out \
++	 test82.out test83.out test84.out test88.out test89.out \
++	 test90.out test91.out test92.out test93.out test94.out \
++	 test95.out
+ 
+ # Known problems:
+ # Test 30: a problem around mac format - unknown reason
+@@ -87,6 +91,7 @@
+ # with too many dots).
+ #
+ # Test 72: unknown reason
++# Test 85: no Lua interface
+ 
+ .IFDEF WANT_GUI
+ SCRIPT_GUI = test16.out
+@@ -181,5 +186,6 @@
+ 	-@ if "''F$SEARCH("small.vim")'"    .NES. "" then delete/noconfirm/nolog small.vim.*
+ 	-@ if "''F$SEARCH("mbyte.vim")'"    .NES. "" then delete/noconfirm/nolog mbyte.vim.*
+ 	-@ if "''F$SEARCH("mzscheme.vim")'" .NES. "" then delete/noconfirm/nolog mzscheme.vim.*
++	-@ if "''F$SEARCH("lua.vim")'" .NES. "" then delete/noconfirm/nolog lua.vim.*
+ 	-@ if "''F$SEARCH("viminfo.*")'"    .NES. "" then delete/noconfirm/nolog viminfo.*.*
+ 
+diff -Naur vim73.orig/src/testdir/Makefile vim73/src/testdir/Makefile
+--- vim73.orig/src/testdir/Makefile	2010-08-15 12:56:30.000000000 +0000
++++ vim73/src/testdir/Makefile	2013-06-07 17:07:36.172238716 +0000
+@@ -10,9 +10,10 @@
+ #   This will make testing about 10 times as slow.
+ # VALGRIND = valgrind --tool=memcheck --leak-check=yes --num-callers=15 --log-file=valgrind.$*
+ 
++
+ SCRIPTS = test1.out test2.out test3.out test4.out test5.out test6.out \
+ 		test7.out test8.out test9.out test10.out test11.out \
+-		test12.out  test13.out test14.out test15.out test17.out \
++		test12.out test13.out test14.out test15.out test17.out \
+ 		test18.out test19.out test20.out test21.out test22.out \
+ 		test23.out test24.out test25.out test26.out test27.out \
+ 		test28.out test29.out test30.out test31.out test32.out \
+@@ -23,7 +24,12 @@
+ 		test54.out test55.out test56.out test57.out test58.out \
+ 		test59.out test60.out test61.out test62.out test63.out \
+ 		test64.out test65.out test66.out test67.out test68.out \
+-		test69.out test70.out test71.out test72.out test73.out
++		test69.out test70.out test71.out test72.out test73.out \
++		test74.out test75.out test76.out test77.out test78.out \
++		test79.out test80.out test81.out test82.out test83.out \
++		test84.out test85.out test86.out test87.out test88.out \
++		test89.out test90.out test91.out test92.out test93.out \
++		test94.out test95.out
+ 
+ SCRIPTS_GUI = test16.out
+ 
+@@ -43,12 +49,16 @@
+ 
+ $(SCRIPTS) $(SCRIPTS_GUI): $(VIMPROG)
+ 
++RM_ON_RUN = test.out X* viminfo
++RM_ON_START = tiny.vim small.vim mbyte.vim mzscheme.vim lua.vim test.ok
++RUN_VIM = $(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in
++
+ clean:
+-	-rm -rf *.out *.failed *.rej *.orig test.log tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* valgrind.pid* viminfo
++	-rm -rf *.out *.failed *.rej *.orig test.log $(RM_ON_RUN) $(RM_ON_START) valgrind.*
+ 
+ test1.out: test1.in
+-	-rm -f $*.failed tiny.vim small.vim mbyte.vim mzscheme.vim test.ok X* viminfo
+-	$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
++	-rm -rf $*.failed $(RM_ON_RUN) $(RM_ON_START)
++	$(RUN_VIM) $*.in
+ 	@/bin/sh -c "if diff test.out $*.ok; \
+ 		then mv -f test.out $*.out; \
+ 		else echo; \
+@@ -57,18 +67,34 @@
+ 	-rm -rf X* viminfo
+ 
+ .in.out:
+-	-rm -rf $*.failed test.ok test.out X* viminfo
++	-rm -rf $*.failed test.ok $(RM_ON_RUN)
+ 	cp $*.ok test.ok
+-	# Sleep a moment to avoid that the xterm title is messed up
+-	@-sleep .2
+-	-$(VALGRIND) $(VIMPROG) -u unix.vim -U NONE --noplugin -s dotest.in $*.in
+-	@/bin/sh -c "if test -f test.out; then\
++	# Sleep a moment to avoid that the xterm title is messed up.
++	# 200 msec is sufficient, but only modern sleep supports a fraction of
++	# a second, fall back to a second if it fails.
++	@-/bin/sh -c "sleep .2 > /dev/null 2>&1 || sleep 1"
++	-$(RUN_VIM) $*.in
++
++	# For flaky tests retry one time.
++	@/bin/sh -c "if test -f test.out -a $* = test61; then \
++		  if diff test.out $*.ok; \
++		  then echo flaky test ok first time; \
++		  else rm -rf $*.failed $(RM_ON_RUN); \
++			$(RUN_VIM) $*.in; \
++		  fi \
++		fi"
++
++	# Check if the test.out file matches test.ok.
++	@/bin/sh -c "if test -f test.out; then \
+ 		  if diff test.out $*.ok; \
+ 		  then mv -f test.out $*.out; \
+ 		  else echo $* FAILED >>test.log; mv -f test.out $*.failed; \
+ 		  fi \
+ 		else echo $* NO OUTPUT >>test.log; \
+ 		fi"
++	@/bin/sh -c "if test -f valgrind; then\
++		  mv -f valgrind valgrind.$*; \
++		fi"
+ 	-rm -rf X* test.ok viminfo
+ 
+ test49.out: test49.vim
+diff -Naur vim73.orig/src/testdir/main.aap vim73/src/testdir/main.aap
+--- vim73.orig/src/testdir/main.aap	2010-07-30 20:03:23.000000000 +0000
++++ vim73/src/testdir/main.aap	2013-06-07 17:07:36.198905306 +0000
+@@ -13,7 +13,7 @@
+ 		test33.out test34.out test35.out test36.out test37.out
+ 		test38.out test39.out test40.out test41.out test42.out
+ 		test43.out test44.out test45.out test46.out test47.out
+-		test48.out test49.out
++		test48.out test49.out test74.out
+ 
+ ScriptsGUI = test16.out
+ 
+diff -Naur vim73.orig/src/testdir/test1.in vim73/src/testdir/test1.in
+--- vim73.orig/src/testdir/test1.in	2010-08-04 14:06:24.000000000 +0000
++++ vim73/src/testdir/test1.in	2013-06-07 17:07:36.232238544 +0000
+@@ -15,6 +15,7 @@
+ be set like small.vim above.  mbyte.vim is sourced by tests that require the
+ +multi_byte feature.
+ Similar logic is applied to the +mzscheme feature, using mzscheme.vim.
++Similar logic is applied to the +lua feature, using lua.vim.
+ 
+ STARTTEST
+ :" Write a single line to test.out to check if testing works at all.
+@@ -28,10 +29,17 @@
+ qa!
+ :w! mbyte.vim
+ :w! mzscheme.vim
++:w! lua.vim
++:"
+ :" If +multi_byte feature supported, make mbyte.vim empty.
+ :if has("multi_byte") | sp another | w! mbyte.vim | q | endif
++:"
+ :" If +mzscheme feature supported, make mzscheme.vim empty.
+ :if has("mzscheme") | sp another | w! mzscheme.vim | q | endif
++:"
++:" If +lua feature supported, make lua.vim empty.
++:if has("lua") | sp another | w! lua.vim | q | endif
++:"
+ :" If +eval feature supported quit here, leaving tiny.vim and small.vim empty.
+ :" Otherwise write small.vim to skip the test.
+ :if 1 | q! | endif
+diff -Naur vim73.orig/src/testdir/test10.in vim73/src/testdir/test10.in
+--- vim73.orig/src/testdir/test10.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test10.in	2013-06-07 17:07:36.258905135 +0000
+@@ -2,56 +2,113 @@
+ 
+ STARTTEST
+ :so small.vim
+-:/start of errorfile/,/end of errorfile/w! Xerrorfile
++:" Also test a BOM is ignored.
++:so mbyte.vim
++:set encoding=utf-8
++:7/start of errorfile/,/end of errorfile/w! Xerrorfile1
++:7/start of errorfile/,/end of errorfile/-1w! Xerrorfile2
+ :/start of testfile/,/end of testfile/w! Xtestfile
+-:cf Xerrorfile
+-rA
++:set efm+==%f=\\,\ line\ %l%*\\D%v%*[^\ ]\ %m
++:set efm^=%AError\ in\ \"%f\"\ at\ line\ %l:,%Z%p^,%C%m
++:cf Xerrorfile2
++:clast
++:copen
++:let a=w:quickfix_title
++:wincmd p
++lgR=a
+
++:cf Xerrorfile1
++grA
+ :cn
+-rB
++gRLINE 6, COL 19
+ :cn
+-rC
++gRNO COLUMN SPECIFIED
+ :cn
+-rD
++gRAGAIN NO COLUMN
+ :cn
+-rE
++gRCOL 1
++:cn
++gRCOL 2
++:cn
++gRCOL 10
++:cn
++gRVCOL 10
++:cn
++grI
++:cn
++gR. SPACE POINTER
++:cn
++gR. DOT POINTER
++:cn
++gR. DASH POINTER
++:cn
++gR. TAB-SPACE POINTER
++:clast
++:cprev
++:cprev
++:wincmd w
++:let a=w:quickfix_title
++:wincmd p
++lgR=a
+
+ :w! test.out             " Write contents of this file
+ :qa!
+ ENDTEST
+ 
+ start of errorfile
+ "Xtestfile", line 4.12: 1506-045 (S) Undeclared identifier fd_set.
+-"Xtestfile", line 7 col 19; this is an error
++ï»¿"Xtestfile", line 6 col 19; this is an error
+ gcc -c -DHAVE_CONFIsing-prototypes -I/usr/X11R6/include  version.c
+-Xtestfile:13: parse error before `asd'
++Xtestfile:9: parse error before `asd'
+ make: *** [vim] Error 1
+-in file "Xtestfile" linenr 16: there is an error
++in file "Xtestfile" linenr 10: there is an error
+ 
+ 2 returned
+-"Xtestfile", linenr 19: yet another problem
++"Xtestfile", line 11 col 1; this is an error
++"Xtestfile", line 12 col 2; this is another error
++"Xtestfile", line 14:10; this is an error in column 10
++=Xtestfile=, line 15:10; this is another error, but in vcol 10 this time
++"Xtestfile", linenr 16: yet another problem
++Error in "Xtestfile" at line 17:
++x should be a dot
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
++            ^
++Error in "Xtestfile" at line 18:
++x should be a dot
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
++.............^
++Error in "Xtestfile" at line 19:
++x should be a dot
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
++--------------^
++Error in "Xtestfile" at line 20:
++x should be a dot
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
++	       ^
+ 
+ Does anyone know what is the problem and how to correction it?
++"Xtestfile", line 21 col 9: What is the title of the quickfix window?
++"Xtestfile", line 22 col 9: What is the title of the quickfix window?
+ end of errorfile
+ 
+ start of testfile
+-line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 4  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 7  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  4
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  6
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  9
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 10
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 12
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 14
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 15
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 17
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 18
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 19
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 20
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 21
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 22
+ end of testfile
+diff -Naur vim73.orig/src/testdir/test10.ok vim73/src/testdir/test10.ok
+--- vim73.orig/src/testdir/test10.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test10.ok	2013-06-07 17:07:36.262238459 +0000
+@@ -1,23 +1,23 @@
+ start of testfile
+-line 2  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 3  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 4  xxxAxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 5  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 6  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 7  xxxxxxxxxxBxxxxxxxxxxxxxxxxxxx
+-line 8  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 9  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 10 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 11 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 12 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-Cine 13 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 14 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 15 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-Dine 16 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 17 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 18 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-Eine 19 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 20 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 21 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
+-line 22 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  2
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  3
++	xxxxxxxxxxAxxxxxxxxxxxxxxxxxxx    line  4
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  5
++	xxxxxxxxxxxxxxxxxLINE 6, COL 19   line  6
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  7
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line  8
++	NO COLUMN SPECIFIEDxxxxxxxxxxx    line  9
++	AGAIN NO COLUMNxxxxxxxxxxxxxxx    line 10
++COL 1	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 11
++	COL 2xxxxxxxxxxxxxxxxxxxxxxxxx    line 12
++	xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 13
++	xxxxxxxxCOL 10xxxxxxxxxxxxxxxx    line 14
++	xVCOL 10xxxxxxxxxxxxxxxxxxxxxx    line 15
++	Ixxxxxxxxxxxxxxxxxxxxxxxxxxxxx    line 16
++	xxxx. SPACE POINTERxxxxxxxxxxx    line 17
++	xxxxx. DOT POINTERxxxxxxxxxxxx    line 18
++	xxxxxx. DASH POINTERxxxxxxxxxx    line 19
++	xxxxxxx. TAB-SPACE POINTERxxxx    line 20
++	xxxxxxxx:cf Xerrorfile1xxxxxxx    line 21
++	xxxxxxxx:cf Xerrorfile2xxxxxxx    line 22
+ end of testfile
+diff -Naur vim73.orig/src/testdir/test14.in vim73/src/testdir/test14.in
+--- vim73.orig/src/testdir/test14.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test14.in	2013-06-07 17:07:36.348904878 +0000
+@@ -2,6 +2,7 @@
+ Also test ":s/pat/sub/" with different ~s in sub.
+ Also test for ^Vxff and ^Vo123 in Insert mode.
+ Also test "[m", "]m", "[M" and "]M"
++Also test search()
+ 
+ STARTTEST
+ :so small.vim
+@@ -34,6 +35,19 @@
+ 2[MaJ:.w >>test.out
+ k[MaK:.w >>test.out
+ 3[MaL:.w >>test.out
++:"
++/^foobar
++:let startline = line('.')
++:call search('foobar', 'c')
++:call append(line('$'), line('.') - startline)
++j:call search('^$', 'c')
++:call append(line('$'), line('.') - startline)
++:call search('^$', 'bc')
++:call append(line('$'), line('.') - startline)
++/two
++:call search('.', 'c')
++:call append(line('$'), getline('.')[col('.') - 1:])
++:/^search()/,$w >>test.out
+ :qa!
+ ENDTEST
+ 
+@@ -64,3 +78,9 @@
+ 		}
+ 	} e3
+ }
++
++foobar
++
++
++one two
++search()
+diff -Naur vim73.orig/src/testdir/test14.ok vim73/src/testdir/test14.ok
+--- vim73.orig/src/testdir/test14.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test14.ok	2013-06-07 17:07:36.385571440 +0000
+@@ -15,3 +15,8 @@
+ 	}JH e3
+ 	}K e2
+ {LF
++search()
++0
++1
++1
++two
+diff -Naur vim73.orig/src/testdir/test16.in vim73/src/testdir/test16.in
+--- vim73.orig/src/testdir/test16.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test16.in	2013-06-07 17:07:36.412238030 +0000
+@@ -2,6 +2,7 @@
+ For KDE set a font, empty 'guifont' may cause a hang.
+ 
+ STARTTEST
++:if $DISPLAY == "" | e! test.ok | wq! test.out | endif
+ :set exrc secure
+ :if has("gui_kde")
+ :  set guifont=Courier\ 10\ Pitch/8/-1/5/50/0/0/0/0/0
+diff -Naur vim73.orig/src/testdir/test17.in vim73/src/testdir/test17.in
+--- vim73.orig/src/testdir/test17.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test17.in	2013-06-07 17:07:36.418904678 +0000
+@@ -1,4 +1,6 @@
+-Tests for "gf" on ${VAR}
++Tests for:
++- "gf" on ${VAR},
++- ":checkpath!" with various 'include' settings.
+ 
+ STARTTEST
+ :so small.vim
+@@ -20,8 +22,99 @@
+ :endif
+ gf
+ :w! test.out
+-:qa!
++:brewind
+ ENDTEST
+ 
+ 	${CDIR}/test17a.in
+ 	$TDIR/test17a.in
++
++STARTTEST
++:" check for 'include' without \zs or \ze
++:lang C
++:!rm -f ./Xbase.a
++:!rm -rf ./Xdir1
++:!mkdir -p Xdir1/dir2
++:e Xdir1/dir2/foo.a
++i#include   "bar.a"
++:w
++:e Xdir1/dir2/bar.a
++i#include      "baz.a"
++:w
++:e Xdir1/dir2/baz.a
++i#include            "foo.a"
++:w
++:e Xbase.a
++:set path=Xdir1/dir2
++i#include    <foo.a>
++:w
++:redir! >>test.out
++:checkpath!
++:redir END
++:brewind
++ENDTEST
++
++STARTTEST
++:" check for 'include' with \zs and \ze
++:!rm -f ./Xbase.b
++:!rm -rf ./Xdir1
++:!mkdir -p Xdir1/dir2
++:let &include='^\s*%inc\s*/\zs[^/]\+\ze'
++:function! DotsToSlashes()
++:  return substitute(v:fname, '\.', '/', 'g') . '.b'
++:endfunction
++:let &includeexpr='DotsToSlashes()'
++:e Xdir1/dir2/foo.b
++i%inc   /bar/
++:w
++:e Xdir1/dir2/bar.b
++i%inc      /baz/
++:w
++:e Xdir1/dir2/baz.b
++i%inc            /foo/
++:w
++:e Xbase.b
++:set path=Xdir1/dir2
++i%inc    /foo/
++:w
++:redir! >>test.out
++:checkpath!
++:redir END
++:brewind
++ENDTEST
++
++STARTTEST
++:" check for 'include' with \zs and no \ze
++:!rm -f ./Xbase.c
++:!rm -rf ./Xdir1
++:!mkdir -p Xdir1/dir2
++:let &include='^\s*%inc\s*\%([[:upper:]][^[:space:]]*\s\+\)\?\zs\S\+\ze'
++:function! StripNewlineChar()
++:  if v:fname =~ '\n$'
++:    return v:fname[:-2]
++:  endif
++:  return v:fname
++:endfunction
++:let &includeexpr='StripNewlineChar()'
++:e Xdir1/dir2/foo.c
++i%inc   bar.c
++:w
++:e Xdir1/dir2/bar.c
++i%inc      baz.c
++:w
++:e Xdir1/dir2/baz.c
++i%inc            foo.c
++:w
++:e Xdir1/dir2/FALSE.c
++i%inc            foo.c
++:w
++:e Xbase.c
++:set path=Xdir1/dir2
++i%inc    FALSE.c foo.c
++:w
++:redir! >>test.out
++:checkpath!
++:redir END
++:brewind
++:q
++ENDTEST
++
+diff -Naur vim73.orig/src/testdir/test17.ok vim73/src/testdir/test17.ok
+--- vim73.orig/src/testdir/test17.ok	2010-08-04 14:06:40.000000000 +0000
++++ vim73/src/testdir/test17.ok	2013-06-07 17:07:36.432237973 +0000
+@@ -1,3 +1,33 @@
+ This file is just to test "gf" in test 17.
+ The contents is not important.
+ Just testing!
++
++
++--- Included files in path ---
++Xdir1/dir2/foo.a
++Xdir1/dir2/foo.a -->
++  Xdir1/dir2/bar.a
++  Xdir1/dir2/bar.a -->
++    Xdir1/dir2/baz.a
++    Xdir1/dir2/baz.a -->
++      "foo.a"  (Already listed)
++
++
++--- Included files in path ---
++Xdir1/dir2/foo.b
++Xdir1/dir2/foo.b -->
++  Xdir1/dir2/bar.b
++  Xdir1/dir2/bar.b -->
++    Xdir1/dir2/baz.b
++    Xdir1/dir2/baz.b -->
++      foo  (Already listed)
++
++
++--- Included files in path ---
++Xdir1/dir2/foo.c
++Xdir1/dir2/foo.c -->
++  Xdir1/dir2/bar.c
++  Xdir1/dir2/bar.c -->
++    Xdir1/dir2/baz.c
++    Xdir1/dir2/baz.c -->
++      foo.c^@  (Already listed)
+diff -Naur vim73.orig/src/testdir/test19.in vim73/src/testdir/test19.in
+--- vim73.orig/src/testdir/test19.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test19.in	2013-06-07 17:07:36.468904535 +0000
+@@ -1,6 +1,8 @@
+ Tests for "r<Tab>" with 'smarttab' and 'expandtab' set/not set.
++Also test that dv_ works correctly
+ 
+ STARTTEST
++:so small.vim
+ :set smarttab expandtab ts=8 sw=4
+ :" make sure that backspace works, no matter what termcap is used
+ :set t_kD=x7f t_kb=x08
+@@ -12,7 +14,12 @@
+ 0wR			
+ :" Test replacing with Tabs
+ 0wR			
+-:?^start?,$w! test.out
++:" Test that copyindent works with expandtab set
++:set expandtab smartindent copyindent ts=8 sw=8 sts=8
++o{
++x:set nosol
++/Second line/
++fwdv_:?^start?,$w! test.out
+ :qa!
+ ENDTEST
+ 
+@@ -23,3 +30,4 @@
+     a cde
+     f ghi
+ test text
++  Second line beginning with whitespace
+diff -Naur vim73.orig/src/testdir/test19.ok vim73/src/testdir/test19.ok
+--- vim73.orig/src/testdir/test19.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test19.ok	2013-06-07 17:07:36.478904506 +0000
+@@ -5,3 +5,6 @@
+     a cde
+     		hi
+ test text
++{
++        x
++  with whitespace
+diff -Naur vim73.orig/src/testdir/test24.in vim73/src/testdir/test24.in
+--- vim73.orig/src/testdir/test24.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test24.in	2013-06-07 17:07:36.595570840 +0000
+@@ -44,6 +44,13 @@
+ :s/^\(\h\w*\%(->\|\.\)\=\)\+=/XX/
+ 
+ :s/^\(\h\w*\%(->\|\.\)\=\)\+=/YY/
++
++:s/aaa/xyz/
++
++:s/~/bcd/
++
++:s/~\+/BB/
++:"
+ :?start?,$w! test.out
+ :qa!
+ ENDTEST
+@@ -77,3 +84,6 @@
+ xx an file xx
+ x= 9;
+ hh= 77;
++ aaa 
++ xyz
++ bcdbcdbcd
+diff -Naur vim73.orig/src/testdir/test24.ok vim73/src/testdir/test24.ok
+--- vim73.orig/src/testdir/test24.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test24.ok	2013-06-07 17:07:36.598904164 +0000
+@@ -27,3 +27,6 @@
+ xx an A xx
+ XX 9;
+ YY 77;
++ xyz 
++ bcd
++ BB
+diff -Naur vim73.orig/src/testdir/test29.in vim73/src/testdir/test29.in
+--- vim73.orig/src/testdir/test29.in	2010-08-01 13:38:24.000000000 +0000
++++ vim73/src/testdir/test29.in	2013-06-07 17:07:36.688903907 +0000
+@@ -4,16 +4,17 @@
+  and with 'cpoptions' flag 'j' set or not
+ 
+ STARTTEST
++:so small.vim
+ :set nocompatible viminfo+=nviminfo
+ :set nojoinspaces
+ :set cpoptions-=j
+ /firstline/
+-j"tdGpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
++j"td/^STARTTEST/-1
++PJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j joinspaces
+ j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions+=j
+ j05lmx2j06lmy2k4Jy3l$p`xyl$p`yy2l$p:set cpoptions-=j nojoinspaces compatible
+-j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjdG:?firstline?+1,$w! test.out
+-:qa!
++j"tpJjJjJjJjJjJjJjJjJjJjJjJjJjJj4Jy3l$pjd/STARTTEST/-2
+ ENDTEST
+ 
+ firstline
+@@ -54,3 +55,148 @@
+ hjkl iop!
+ ert
+ 
++STARTTEST
++/^{/+1
++:set comments=s1:/*,mb:*,ex:*/,://
++:set nojoinspaces fo=j
++:set backspace=eol,start
++:.,+3join
++j4J
++:.,+2join
++j3J
++:.,+2join
++j3J
++:.,+2join
++jj3J
++ENDTEST
++
++{
++
++/*
++ * Make sure the previous comment leader is not removed.
++ */
++
++/*
++ * Make sure the previous comment leader is not removed.
++ */
++
++// Should the next comment leader be left alone?
++// Yes.
++
++// Should the next comment leader be left alone?
++// Yes.
++
++/* Here the comment leader should be left intact. */
++// And so should this one.
++
++/* Here the comment leader should be left intact. */
++// And so should this one.
++
++if (condition) // Remove the next comment leader!
++               // OK, I will.
++    action();
++
++if (condition) // Remove the next comment leader!
++               // OK, I will.
++    action();
++}
++
++STARTTEST
++/^{/+1
++:set comments=sO:*\ -,mO:*\ \ ,exO:*/
++:set comments+=s1:/*,mb:*,ex:*/,://
++:set comments+=s1:>#,mb:#,ex:#<,:<
++:set cpoptions-=j joinspaces fo=j
++:set backspace=eol,start
++:.,+3join
++j4J
++:.,+8join
++j9J
++:.,+2join
++j3J
++:.,+2join
++j3J
++:.,+2join
++jj3J
++j:.,+2join
++jj3J
++j:.,+5join
++j6J
++oSome code!
+// Make sure backspacing does not remove this comment leader.0i
++ENDTEST
++
++{
++
++/*
++ * Make sure the previous comment leader is not removed.
++ */
++
++/*
++ * Make sure the previous comment leader is not removed.
++ */
++
++/* List:
++ * - item1
++ *   foo bar baz
++ *   foo bar baz
++ * - item2
++ *   foo bar baz
++ *   foo bar baz
++ */
++
++/* List:
++ * - item1
++ *   foo bar baz
++ *   foo bar baz
++ * - item2
++ *   foo bar baz
++ *   foo bar baz
++ */
++
++// Should the next comment leader be left alone?
++// Yes.
++
++// Should the next comment leader be left alone?
++// Yes.
++
++/* Here the comment leader should be left intact. */
++// And so should this one.
++
++/* Here the comment leader should be left intact. */
++// And so should this one.
++
++if (condition) // Remove the next comment leader!
++               // OK, I will.
++    action();
++
++if (condition) // Remove the next comment leader!
++               // OK, I will.
++    action();
++
++int i = 7 /* foo *// 3
++ // comment
++ ;
++
++int i = 7 /* foo *// 3
++ // comment
++ ;
++
++># Note that the last character of the ending comment leader (left angle
++ # bracket) is a comment leader itself. Make sure that this comment leader is
++ # not removed from the next line #<
++< On this line a new comment is opened which spans 2 lines. This comment should
++< retain its comment leader.
++
++># Note that the last character of the ending comment leader (left angle
++ # bracket) is a comment leader itself. Make sure that this comment leader is
++ # not removed from the next line #<
++< On this line a new comment is opened which spans 2 lines. This comment should
++< retain its comment leader.
++
++}
++
++STARTTEST
++:g/^STARTTEST/.,/^ENDTEST/d
++:?firstline?+1,$w! test.out
++:qa!
++ENDTEST
+diff -Naur vim73.orig/src/testdir/test29.ok vim73/src/testdir/test29.ok
+--- vim73.orig/src/testdir/test29.ok	2010-07-10 12:08:18.000000000 +0000
++++ vim73/src/testdir/test29.ok	2013-06-07 17:07:36.702237202 +0000
+@@ -47,3 +47,42 @@
+ asdfasdf 	asdf
+ asdfasdf		asdf
+ zx cvn.  as dfg? hjkl iop! ert  a
++
++
++{
++/* Make sure the previous comment leader is not removed. */
++/* Make sure the previous comment leader is not removed. */
++// Should the next comment leader be left alone? Yes.
++// Should the next comment leader be left alone? Yes.
++/* Here the comment leader should be left intact. */ // And so should this one.
++/* Here the comment leader should be left intact. */ // And so should this one.
++if (condition) // Remove the next comment leader! OK, I will.
++    action();
++if (condition) // Remove the next comment leader! OK, I will.
++    action();
++}
++
++
++{
++/* Make sure the previous comment leader is not removed.  */
++/* Make sure the previous comment leader is not removed.  */
++/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
++/* List: item1 foo bar baz foo bar baz item2 foo bar baz foo bar baz */
++// Should the next comment leader be left alone?  Yes.
++// Should the next comment leader be left alone?  Yes.
++/* Here the comment leader should be left intact. */ // And so should this one.
++/* Here the comment leader should be left intact. */ // And so should this one.
++if (condition) // Remove the next comment leader!  OK, I will.
++    action();
++if (condition) // Remove the next comment leader!  OK, I will.
++    action();
++int i = 7 /* foo *// 3 // comment
++ ;
++int i = 7 /* foo *// 3 // comment
++ ;
++># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
++># Note that the last character of the ending comment leader (left angle bracket) is a comment leader itself. Make sure that this comment leader is not removed from the next line #< < On this line a new comment is opened which spans 2 lines. This comment should retain its comment leader.
++
++Some code!// Make sure backspacing does not remove this comment leader.
++}
++
+diff -Naur vim73.orig/src/testdir/test3.in vim73/src/testdir/test3.in
+--- vim73.orig/src/testdir/test3.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test3.in	2013-06-07 17:07:36.715570497 +0000
+@@ -299,18 +299,39 @@
+ 
+ enum soppie
+ {
+-	yes = 0,
+-	no,
+-	maybe
++yes = 0,
++no,
++maybe
+ };
+ 
+ typedef enum soppie
+ {
+-	yes = 0,
+-	no,
+-	maybe
++yes = 0,
++no,
++maybe
+ };
+ 
++static enum
++{
++yes = 0,
++no,
++maybe
++} soppie;
++
++public static enum
++{
++yes = 0,
++no,
++maybe
++} soppie;
++
++static private enum
++{
++yes = 0,
++no,
++maybe
++} soppie;
++
+ {
+ 	int a,
+ 		b;
+@@ -799,6 +820,69 @@
+ 	df */
+ 		hello
+ }
++
++/* valid namespaces with normal indent */
++namespace
++{
++{
++  111111111111;
++}
++}
++namespace /* test */
++{
++  11111111111111111;
++}
++namespace // test
++{
++  111111111111111111;
++}
++namespace
++{
++  111111111111111111;
++}
++namespace test
++{
++  111111111111111111;
++}
++namespace{
++  111111111111111111;
++}
++namespace test{
++  111111111111111111;
++}
++namespace {
++  111111111111111111;
++}
++namespace test {
++  111111111111111111;
++namespace test2 {
++  22222222222222222;
++}
++}
++
++/* invalid namespaces use block indent */
++namespace test test2 {
++  111111111111111111111;
++}
++namespace11111111111 {
++  111111111111;
++}
++namespace() {
++  1111111111111;
++}
++namespace()
++{
++  111111111111111111;
++}
++namespace test test2
++{
++  1111111111111111111;
++}
++namespace111111111
++{
++  111111111111111111;
++}
++
+ /* end of AUTO */
+ 
+ STARTTEST
+@@ -907,6 +991,24 @@
+ 
+ STARTTEST
+ :set cin
++:set cino=es,n0s
++/main
++=][
++ENDTEST
++
++main(void)
++{
++	/* Make sure that cino=X0s is not parsed like cino=Xs. */
++	if (cond)
++		foo();
++	else
++	{
++		bar();
++	}
++}
++
++STARTTEST
++:set cin
+ :set cino=
+ ]]=][
+ ENDTEST
+@@ -1246,6 +1348,20 @@
+ };
+ 
+ STARTTEST
++:set cino=(0,gs,hs
++2kdd]]=][
++ENDTEST
++
++class Foo : public Bar
++{
++public:
++virtual void method1(void) = 0;
++virtual void method2(int arg1,
++int arg2,
++int arg3) = 0;
++};
++
++STARTTEST
+ :set cino=+20
+ 2kdd]]=][
+ ENDTEST
+@@ -1315,6 +1431,626 @@
+ }
+ 
+ STARTTEST
++:set cino=(0,ts
++2kdd=][
++ENDTEST
++
++void func(int a
++#if defined(FOO)
++		  , int b
++		  , int c
++#endif
++		 )
++{
++}
++
++STARTTEST
++:set cino=(0
++2kdd=][
++ENDTEST
++
++void
++func(int a
++#if defined(FOO)
++		  , int b
++		  , int c
++#endif
++		 )
++{
++}
++
++STARTTEST
++:set cino&
++2kdd=7][
++ENDTEST
++
++void func(void)
++{
++	if(x==y)
++		if(y==z)
++			foo=1;
++		else { bar=1;
++			baz=2;
++		}
++	printf("Foo!\n");
++}
++
++void func1(void)
++{
++	char* tab[] = {"foo", "bar",
++		"baz", "quux",
++			"this line used", "to be indented incorrectly"};
++	foo();
++}
++
++void func2(void)
++{
++	int tab[] =
++	{1, 2,
++		3, 4,
++		5, 6};
++
++		printf("This line used to be indented incorrectly.\n");
++}
++
++int foo[]
++#ifdef BAR
++
++= { 1, 2, 3,
++	4, 5, 6 }
++
++#endif
++;
++	int baz;
++
++void func3(void)
++{
++	int tab[] = {
++	1, 2,
++	3, 4,
++	5, 6};
++
++printf("Don't you dare indent this line incorrectly!\n");
++}
++
++void
++func4(a, b,
++		c)
++int a;
++int b;
++int c;
++{
++}
++
++void
++func5(
++		int a,
++		int b)
++{
++}
++
++void
++func6(
++		int a)
++{
++}
++
++STARTTEST
++:set cino&
++:set cino+=l1
++2kdd=][
++ENDTEST
++
++void func(void)
++{
++	int tab[] =
++	{
++		1, 2, 3,
++		4, 5, 6};
++
++	printf("Indent this line correctly!\n");
++
++	switch (foo)
++	{
++		case bar:
++			printf("bar");
++			break;
++		case baz: {
++			printf("baz");
++			break;
++		}
++		case quux:
++printf("But don't break the indentation of this instruction\n");
++break;
++	}
++}
++
++STARTTEST
++:set cino&
++2kdd=][
++ENDTEST
++
++void func(void)
++{
++	cout << "a"
++	<< "b"
++	<< ") :"
++	<< "c";
++}
++
++STARTTEST
++:set com=s1:/*,m:*,ex:*/
++]]3jofoo();
++ENDTEST
++
++void func(void)
++{
++	/*
++	 * This is a comment.
++	 */
++}
++
++STARTTEST
++:set cino&
++2kdd=][
++ENDTEST
++
++void func(void)
++{
++	for (int i = 0; i < 10; ++i)
++		if (i & 1) {
++			foo(1);
++		} else
++			foo(0);
++baz();
++}
++
++STARTTEST
++:set cino=k2s,(0
++2kdd3j=][
++ENDTEST
++
++void func(void)
++{
++	if (condition1
++	&& condition2)
++	action();
++	function(argument1
++	&& argument2);
++
++	if (c1 && (c2 ||
++	c3))
++	foo;
++	if (c1 &&
++	(c2 || c3))
++	{
++	}
++
++	if (   c1
++	&& (      c2
++	|| c3))
++	foo;
++	func( c1
++	&& (     c2
++	|| c3))
++	foo;
++}
++
++STARTTEST
++:set cino=k2s,(s
++2kdd3j=][
++ENDTEST
++
++void func(void)
++{
++	if (condition1
++	&& condition2)
++	action();
++	function(argument1
++	&& argument2);
++
++	if (c1 && (c2 ||
++	c3))
++	foo;
++	if (c1 &&
++	(c2 || c3))
++	{
++	}
++
++	if (   c1
++	&& (      c2
++	|| c3))
++	foo;
++	func(   c1
++	&& (      c2
++	|| c3))
++	foo;
++}
++
++STARTTEST
++:set cino=k2s,(s,U1
++2kdd3j=][
++ENDTEST
++
++void func(void)
++{
++	if (condition1
++	&& condition2)
++	action();
++	function(argument1
++	&& argument2);
++
++	if (c1 && (c2 ||
++	c3))
++	foo;
++	if (c1 &&
++	(c2 || c3))
++	{
++	}
++	if (c123456789
++	&& (c22345
++	|| c3))
++	printf("foo\n");
++
++	c = c1 &&
++	(
++	c2 ||
++	c3
++	) && c4;
++}
++
++STARTTEST
++:set cino=k2s,(0,W4
++2kdd3j=][
++ENDTEST
++
++void func(void)
++{
++	if (condition1
++	&& condition2)
++	action();
++	function(argument1
++	&& argument2);
++
++	if (c1 && (c2 ||
++	c3))
++	foo;
++	if (c1 &&
++	(c2 || c3))
++	{
++	}
++	if (c123456789
++	&& (c22345
++	|| c3))
++	printf("foo\n");
++
++	if (   c1
++	&& (   c2
++	|| c3))
++	foo;
++
++	a_long_line(
++	argument,
++	argument);
++	a_short_line(argument,
++	argument);
++}
++
++STARTTEST
++:set cino=k2s,u2
++2kdd3j=][
++ENDTEST
++
++void func(void)
++{
++	if (condition1
++	&& condition2)
++	action();
++	function(argument1
++	&& argument2);
++
++	if (c1 && (c2 ||
++	c3))
++	foo;
++	if (c1 &&
++	(c2 || c3))
++	{
++	}
++	if (c123456789
++	&& (c22345
++	|| c3))
++	printf("foo\n");
++}
++
++STARTTEST
++:set cino=k2s,(0,w1
++2kdd3j=][
++ENDTEST
++
++void func(void)
++{
++	if (condition1
++	&& condition2)
++	action();
++	function(argument1
++	&& argument2);
++
++	if (c1 && (c2 ||
++	c3))
++	foo;
++	if (c1 &&
++	(c2 || c3))
++	{
++	}
++	if (c123456789
++	&& (c22345
++	|| c3))
++	printf("foo\n");
++
++	if (   c1
++	&& (      c2
++	|| c3))
++	foo;
++	func(   c1
++	&& (      c2
++	|| c3))
++	foo;
++}
++
++STARTTEST
++:set cino=k2,(s
++2kdd3j=][
++ENDTEST
++
++void func(void)
++{
++	if (condition1
++	  && condition2)
++		action();
++	function(argument1
++		&& argument2);
++
++	if (c1 && (c2 ||
++		  c3))
++		foo;
++	if (c1 &&
++	  (c2 || c3))
++	{
++	}
++}
++
++STARTTEST
++:set cino=N-s
++/^NAMESPACESTART
++=/^NAMESPACEEND
++ENDTEST
++
++NAMESPACESTART
++/* valid namespaces with normal indent */
++namespace
++{
++   {
++	111111111111;
++}
++}
++namespace /* test */
++{
++  11111111111111111;
++}
++namespace // test
++{
++  111111111111111111;
++}
++namespace
++{
++  111111111111111111;
++}
++namespace test
++{
++  111111111111111111;
++}
++namespace{
++  111111111111111111;
++}
++namespace test{
++  111111111111111111;
++}
++namespace {
++  111111111111111111;
++}
++namespace test {
++  111111111111111111;
++namespace test2 {
++  22222222222222222;
++}
++}
++
++/* invalid namespaces use block indent */
++namespace test test2 {
++  111111111111111111111;
++}
++namespace11111111111 {
++  111111111111;
++}
++namespace() {
++  1111111111111;
++}
++namespace()
++{
++  111111111111111111;
++}
++namespace test test2
++{
++  1111111111111111111;
++}
++namespace111111111
++{
++  111111111111111111;
++}
++NAMESPACEEND
++
++
++STARTTEST
++:set cino=j1,J1
++/^JSSTART
++=/^JSEND
++ENDTEST
++
++JSSTART
++var bar = {
++foo: {
++that: this,
++some: ok,
++},
++"bar":{
++a : 2,
++b: "123abc",
++x: 4,
++"y": 5
++}
++}
++JSEND
++
++STARTTEST
++:set cino=j1,J1
++/^JSSTART
++=/^JSEND
++ENDTEST
++
++JSSTART
++var foo = [
++1,  // indent 8 more
++2,
++3
++];  // indent 8 less
++JSEND
++
++STARTTEST
++:set cino=j1,J1
++/^JSSTART
++=/^JSEND
++ENDTEST
++
++JSSTART
++function bar() {
++var foo = [
++1,
++2,
++3
++];  // indent 16 less
++}
++JSEND
++
++STARTTEST
++:set cino=j1,J1
++/^JSSTART
++=/^JSEND
++ENDTEST
++
++JSSTART
++(function($){
++
++var class_name='myclass';
++
++function private_method() {
++}
++
++var public_method={
++method: function(options,args){
++private_method();
++}
++}
++
++function init(options) {
++
++$(this).data(class_name+'_public',$.extend({},{
++foo: 'bar',
++bar: 2,  // indent 8 more
++foobar: [  // indent 8 more
++1,  // indent 8 more
++2,  // indent 16 more
++3   // indent 16 more
++],
++callback: function(){  // indent 8 more
++return true;  // indent 8 more
++}  // indent 8 more
++}, options||{}));
++}
++
++$.fn[class_name]=function() {
++
++var _arguments=arguments;
++return this.each(function(){
++
++var options=$(this).data(class_name+'_public');
++if (!options) {
++init.apply(this,_arguments);
++
++} else {
++var method=public_method[_arguments[0]];
++
++if (typeof(method)!='function') {
++console.log(class_name+' has no method "'+_arguments[0]+'"');
++return false;
++}
++_arguments[0]=options;
++method.apply(this,_arguments);
++}
++});
++}
++
++})(jQuery);
++JSEND
++
++STARTTEST
++:set cino=j1,J1
++/^JSSTART
++=/^JSEND
++ENDTEST
++
++JSSTART
++function init(options) {
++$(this).data(class_name+'_public',$.extend({},{
++foo: 'bar',
++bar: 2,
++foobar: [
++1,  // indent 8 more
++2,  // indent 8 more
++3   // indent 8 more
++],
++callback: function(){
++return true;
++}
++}, options||{}));
++}
++JSEND
++
++STARTTEST
++:set cino=j1,J1
++/^JSSTART
++=/^JSEND
++ENDTEST
++
++JSSTART
++(function($){
++function init(options) {
++$(this).data(class_name+'_public',$.extend({},{
++foo: 'bar',
++bar: 2,  // indent 8 more
++foobar: [  // indent 8 more
++1,  // indent 8 more
++2,  // indent 16 more
++3  // indent 16 more
++],
++callback: function(){  // indent 8 more
++return true;  // indent 8 more
++}  // indent 8 more
++}, options||{}));
++}
++})(jQuery);
++JSEND
++
++STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/start of AUTO/,$wq! test.out
+ ENDTEST
+diff -Naur vim73.orig/src/testdir/test3.ok vim73/src/testdir/test3.ok
+--- vim73.orig/src/testdir/test3.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test3.ok	2013-06-07 17:07:36.718903821 +0000
+@@ -299,6 +299,27 @@
+ 	maybe
+ };
+ 
++static enum
++{
++	yes = 0,
++	no,
++	maybe
++} soppie;
++
++public static enum
++{
++	yes = 0,
++	no,
++	maybe
++} soppie;
++
++static private enum
++{
++	yes = 0,
++	no,
++	maybe
++} soppie;
++
+ {
+ 	int a,
+ 		b;
+@@ -787,6 +808,69 @@
+ 	   df */
+ 	hello
+ }
++
++/* valid namespaces with normal indent */
++namespace
++{
++	{
++		111111111111;
++	}
++}
++namespace /* test */
++{
++	11111111111111111;
++}
++namespace // test
++{
++	111111111111111111;
++}
++namespace
++{
++	111111111111111111;
++}
++namespace test
++{
++	111111111111111111;
++}
++namespace{
++	111111111111111111;
++}
++namespace test{
++	111111111111111111;
++}
++namespace {
++	111111111111111111;
++}
++namespace test {
++	111111111111111111;
++	namespace test2 {
++		22222222222222222;
++	}
++}
++
++/* invalid namespaces use block indent */
++namespace test test2 {
++	111111111111111111111;
++}
++namespace11111111111 {
++	111111111111;
++}
++namespace() {
++	1111111111111;
++}
++namespace()
++{
++	111111111111111111;
++}
++namespace test test2
++{
++	1111111111111111111;
++}
++namespace111111111
++{
++	111111111111111111;
++}
++
+ /* end of AUTO */
+ 
+ 
+@@ -870,6 +954,18 @@
+ }
+ 
+ 
++main(void)
++{
++	/* Make sure that cino=X0s is not parsed like cino=Xs. */
++	if (cond)
++		foo();
++	else
++	{
++		bar();
++	}
++}
++
++
+ {
+ 	do
+ 	{
+@@ -1127,6 +1223,16 @@
+ };
+ 
+ 
++class Foo : public Bar
++{
++	public:
++		virtual void method1(void) = 0;
++		virtual void method2(int arg1,
++							 int arg2,
++							 int arg3) = 0;
++};
++
++
+ 	void
+ foo()
+ {
+@@ -1183,3 +1289,532 @@
+ 		foo;
+ }
+ 
++
++void func(int a
++#if defined(FOO)
++		  , int b
++		  , int c
++#endif
++		 )
++{
++}
++
++
++	void
++func(int a
++#if defined(FOO)
++	 , int b
++	 , int c
++#endif
++	)
++{
++}
++
++
++void func(void)
++{
++	if(x==y)
++		if(y==z)
++			foo=1;
++		else { bar=1;
++			baz=2;
++		}
++	printf("Foo!\n");
++}
++
++void func1(void)
++{
++	char* tab[] = {"foo", "bar",
++		"baz", "quux",
++		"this line used", "to be indented incorrectly"};
++	foo();
++}
++
++void func2(void)
++{
++	int tab[] =
++	{1, 2,
++		3, 4,
++		5, 6};
++
++	printf("This line used to be indented incorrectly.\n");
++}
++
++int foo[]
++#ifdef BAR
++
++= { 1, 2, 3,
++	4, 5, 6 }
++
++#endif
++	;
++int baz;
++
++void func3(void)
++{
++	int tab[] = {
++		1, 2,
++		3, 4,
++		5, 6};
++
++	printf("Don't you dare indent this line incorrectly!\n");
++}
++
++	void
++func4(a, b,
++		c)
++	int a;
++	int b;
++	int c;
++{
++}
++
++	void
++func5(
++		int a,
++		int b)
++{
++}
++
++	void
++func6(
++		int a)
++{
++}
++
++
++void func(void)
++{
++	int tab[] =
++	{
++		1, 2, 3,
++		4, 5, 6};
++
++	printf("Indent this line correctly!\n");
++
++	switch (foo)
++	{
++		case bar:
++			printf("bar");
++			break;
++		case baz: {
++			printf("baz");
++			break;
++		}
++		case quux:
++			printf("But don't break the indentation of this instruction\n");
++			break;
++	}
++}
++
++
++void func(void)
++{
++	cout << "a"
++		<< "b"
++		<< ") :"
++		<< "c";
++}
++
++
++void func(void)
++{
++	/*
++	 * This is a comment.
++	 */
++	foo();
++}
++
++
++void func(void)
++{
++	for (int i = 0; i < 10; ++i)
++		if (i & 1) {
++			foo(1);
++		} else
++			foo(0);
++	baz();
++}
++
++
++void func(void)
++{
++	if (condition1
++			&& condition2)
++		action();
++	function(argument1
++			 && argument2);
++
++	if (c1 && (c2 ||
++				c3))
++		foo;
++	if (c1 &&
++			(c2 || c3))
++	{
++	}
++
++	if (   c1
++			&& (      c2
++					  || c3))
++		foo;
++	func( c1
++		  && (     c2
++				   || c3))
++		foo;
++}
++
++
++void func(void)
++{
++	if (condition1
++			&& condition2)
++		action();
++	function(argument1
++		&& argument2);
++
++	if (c1 && (c2 ||
++				c3))
++		foo;
++	if (c1 &&
++			(c2 || c3))
++	{
++	}
++
++	if (   c1
++			&& (      c2
++				|| c3))
++		foo;
++	func(   c1
++		&& (      c2
++			|| c3))
++		foo;
++}
++
++
++void func(void)
++{
++	if (condition1
++			&& condition2)
++		action();
++	function(argument1
++		&& argument2);
++
++	if (c1 && (c2 ||
++				c3))
++		foo;
++	if (c1 &&
++			(c2 || c3))
++	{
++	}
++	if (c123456789
++			&& (c22345
++				|| c3))
++		printf("foo\n");
++
++	c = c1 &&
++		(
++			c2 ||
++			c3
++		) && c4;
++}
++
++
++void func(void)
++{
++	if (condition1
++			&& condition2)
++		action();
++	function(argument1
++			 && argument2);
++
++	if (c1 && (c2 ||
++				c3))
++		foo;
++	if (c1 &&
++			(c2 || c3))
++	{
++	}
++	if (c123456789
++			&& (c22345
++				|| c3))
++		printf("foo\n");
++
++	if (   c1
++			&& (   c2
++				   || c3))
++		foo;
++
++	a_long_line(
++		argument,
++		argument);
++	a_short_line(argument,
++				 argument);
++}
++
++
++void func(void)
++{
++	if (condition1
++			&& condition2)
++		action();
++	function(argument1
++			&& argument2);
++
++	if (c1 && (c2 ||
++			  c3))
++		foo;
++	if (c1 &&
++			(c2 || c3))
++	{
++	}
++	if (c123456789
++			&& (c22345
++			  || c3))
++		printf("foo\n");
++}
++
++
++void func(void)
++{
++	if (condition1
++			&& condition2)
++		action();
++	function(argument1
++			 && argument2);
++
++	if (c1 && (c2 ||
++				c3))
++		foo;
++	if (c1 &&
++			(c2 || c3))
++	{
++	}
++	if (c123456789
++			&& (c22345
++				|| c3))
++		printf("foo\n");
++
++	if (   c1
++			&& (      c2
++				|| c3))
++		foo;
++	func(   c1
++		 && (      c2
++			 || c3))
++		foo;
++}
++
++
++void func(void)
++{
++	if (condition1
++	  && condition2)
++		action();
++	function(argument1
++		&& argument2);
++
++	if (c1 && (c2 ||
++		  c3))
++		foo;
++	if (c1 &&
++	  (c2 || c3))
++	{
++	}
++}
++
++
++NAMESPACESTART
++/* valid namespaces with normal indent */
++namespace
++{
++{
++	111111111111;
++}
++}
++namespace /* test */
++{
++11111111111111111;
++}
++namespace // test
++{
++111111111111111111;
++}
++namespace
++{
++111111111111111111;
++}
++namespace test
++{
++111111111111111111;
++}
++namespace{
++111111111111111111;
++}
++namespace test{
++111111111111111111;
++}
++namespace {
++111111111111111111;
++}
++namespace test {
++111111111111111111;
++namespace test2 {
++22222222222222222;
++}
++}
++
++/* invalid namespaces use block indent */
++namespace test test2 {
++	111111111111111111111;
++}
++namespace11111111111 {
++	111111111111;
++}
++namespace() {
++	1111111111111;
++}
++namespace()
++{
++	111111111111111111;
++}
++namespace test test2
++{
++	1111111111111111111;
++}
++namespace111111111
++{
++	111111111111111111;
++}
++NAMESPACEEND
++
++
++
++JSSTART
++var bar = {
++	foo: {
++		that: this,
++		some: ok,
++	},
++	"bar":{
++		a : 2,
++		b: "123abc",
++		x: 4,
++		"y": 5
++	}
++}
++JSEND
++
++
++JSSTART
++var foo = [
++1,  // indent 8 more
++	2,
++	3
++	];  // indent 8 less
++JSEND
++
++
++JSSTART
++function bar() {
++	var foo = [
++		1,
++		2,
++		3
++			];  // indent 16 less
++}
++JSEND
++
++
++JSSTART
++(function($){
++
++	var class_name='myclass';
++
++	function private_method() {
++	}
++
++	var public_method={
++		method: function(options,args){
++			private_method();
++		}
++	}
++
++	function init(options) {
++
++		$(this).data(class_name+'_public',$.extend({},{
++			foo: 'bar',
++		bar: 2,  // indent 8 more
++		foobar: [  // indent 8 more
++			1,  // indent 8 more
++		2,  // indent 16 more
++		3   // indent 16 more
++			],
++		callback: function(){  // indent 8 more
++			return true;  // indent 8 more
++		}  // indent 8 more
++		}, options||{}));
++	}
++
++	$.fn[class_name]=function() {
++
++		var _arguments=arguments;
++		return this.each(function(){
++
++			var options=$(this).data(class_name+'_public');
++			if (!options) {
++				init.apply(this,_arguments);
++
++			} else {
++				var method=public_method[_arguments[0]];
++
++				if (typeof(method)!='function') {
++					console.log(class_name+' has no method "'+_arguments[0]+'"');
++					return false;
++				}
++				_arguments[0]=options;
++				method.apply(this,_arguments);
++			}
++		});
++	}
++
++})(jQuery);
++JSEND
++
++
++JSSTART
++function init(options) {
++	$(this).data(class_name+'_public',$.extend({},{
++		foo: 'bar',
++		bar: 2,
++		foobar: [
++		1,  // indent 8 more
++		2,  // indent 8 more
++		3   // indent 8 more
++		],
++		callback: function(){
++			return true;
++		}
++	}, options||{}));
++}
++JSEND
++
++
++JSSTART
++(function($){
++	function init(options) {
++		$(this).data(class_name+'_public',$.extend({},{
++			foo: 'bar',
++		bar: 2,  // indent 8 more
++		foobar: [  // indent 8 more
++			1,  // indent 8 more
++		2,  // indent 16 more
++		3  // indent 16 more
++			],
++		callback: function(){  // indent 8 more
++			return true;  // indent 8 more
++		}  // indent 8 more
++		}, options||{}));
++	}
++})(jQuery);
++JSEND
++
+diff -Naur vim73.orig/src/testdir/test31.in vim73/src/testdir/test31.in
+--- vim73.orig/src/testdir/test31.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test31.in	2013-06-07 17:07:36.755570383 +0000
+@@ -63,6 +63,12 @@
+ :" write "testtext 1"
+ A 3:close!
+ :w >>test.out
++:set nohidden
++:" test ":all!" hides changed buffer; write "testtext 2 2 2"
++:sp Xtest4
++GA 4:all!
++:1wincmd w
++:w >>test.out
+ :qa!
+ ENDTEST
+ 
+diff -Naur vim73.orig/src/testdir/test31.ok vim73/src/testdir/test31.ok
+--- vim73.orig/src/testdir/test31.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test31.ok	2013-06-07 17:07:36.765570354 +0000
+@@ -9,3 +9,4 @@
+ testtext 1
+ testtext 3 3 3
+ testtext 1
++testtext 2 2 2
+diff -Naur vim73.orig/src/testdir/test34.in vim73/src/testdir/test34.in
+--- vim73.orig/src/testdir/test34.in	2010-05-29 13:09:55.000000000 +0000
++++ vim73/src/testdir/test34.in	2013-06-07 17:07:36.815570211 +0000
+@@ -1,5 +1,6 @@
+ Test for user functions.
+ Also test an <expr> mapping calling a function.
++Also test that a builtin function cannot be replaced.
+ 
+ STARTTEST
+ :so small.vim
+@@ -58,7 +59,10 @@
+ ---*---
+ (one
+ (two
+-[(one again:$-5,$w! test.out
++[(one again:call append(line('$'), max([1, 2, 3]))
++:call extend(g:, {'max': function('min')})
++:call append(line('$'), max([1, 2, 3]))
++:$-7,$w! test.out
+ :delfunc Table
+ :delfunc Compute
+ :delfunc Expr1
+diff -Naur vim73.orig/src/testdir/test34.ok vim73/src/testdir/test34.ok
+--- vim73.orig/src/testdir/test34.ok	2010-05-29 13:11:12.000000000 +0000
++++ vim73/src/testdir/test34.ok	2013-06-07 17:07:36.822236859 +0000
+@@ -1,6 +1,8 @@
+ xxx4asdf fail nop ok 9 333
+-XX111XX
++XX111-XX
+ ---222---
+ 1. one
+ 2. two
+ 1. one again
++3
++3
+diff -Naur vim73.orig/src/testdir/test36.in vim73/src/testdir/test36.in
+--- vim73.orig/src/testdir/test36.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test36.in	2013-06-07 17:07:36.845570126 +0000
+@@ -1,40 +1,105 @@
+-Test character classes in regexp
++Test character classes in regexp using regexpengine 0, 1, 2.
+ 
+ STARTTEST
+-/^start-here
+-j:s/\d//g
+-j:s/\D//g
+-j:s/\o//g
+-j:s/\O//g
+-j:s/\x//g
+-j:s/\X//g
+-j:s/\w//g
+-j:s/\W//g
+-j:s/\h//g
+-j:s/\H//g
+-j:s/\a//g
+-j:s/\A//g
+-j:s/\l//g
+-j:s/\L//g
+-j:s/\u//g
+-j:s/\U//g
++/^start-here/+1
++Y:s/\%#=0\d//g
++p:s/\%#=1\d//g
++p:s/\%#=2\d//g
++p:s/\%#=0[0-9]//g
++p:s/\%#=1[0-9]//g
++p:s/\%#=2[0-9]//g
++p:s/\%#=0\D//g
++p:s/\%#=1\D//g
++p:s/\%#=2\D//g
++p:s/\%#=0[^0-9]//g
++p:s/\%#=1[^0-9]//g
++p:s/\%#=2[^0-9]//g
++p:s/\%#=0\o//g
++p:s/\%#=1\o//g
++p:s/\%#=2\o//g
++p:s/\%#=0[0-7]//g
++p:s/\%#=1[0-7]//g
++p:s/\%#=2[0-7]//g
++p:s/\%#=0\O//g
++p:s/\%#=1\O//g
++p:s/\%#=2\O//g
++p:s/\%#=0[^0-7]//g
++p:s/\%#=1[^0-7]//g
++p:s/\%#=2[^0-7]//g
++p:s/\%#=0\x//g
++p:s/\%#=1\x//g
++p:s/\%#=2\x//g
++p:s/\%#=0[0-9A-Fa-f]//g
++p:s/\%#=1[0-9A-Fa-f]//g
++p:s/\%#=2[0-9A-Fa-f]//g
++p:s/\%#=0\X//g
++p:s/\%#=1\X//g
++p:s/\%#=2\X//g
++p:s/\%#=0[^0-9A-Fa-f]//g
++p:s/\%#=1[^0-9A-Fa-f]//g
++p:s/\%#=2[^0-9A-Fa-f]//g
++p:s/\%#=0\w//g
++p:s/\%#=1\w//g
++p:s/\%#=2\w//g
++p:s/\%#=0[0-9A-Za-z_]//g
++p:s/\%#=1[0-9A-Za-z_]//g
++p:s/\%#=2[0-9A-Za-z_]//g
++p:s/\%#=0\W//g
++p:s/\%#=1\W//g
++p:s/\%#=2\W//g
++p:s/\%#=0[^0-9A-Za-z_]//g
++p:s/\%#=1[^0-9A-Za-z_]//g
++p:s/\%#=2[^0-9A-Za-z_]//g
++p:s/\%#=0\h//g
++p:s/\%#=1\h//g
++p:s/\%#=2\h//g
++p:s/\%#=0[A-Za-z_]//g
++p:s/\%#=1[A-Za-z_]//g
++p:s/\%#=2[A-Za-z_]//g
++p:s/\%#=0\H//g
++p:s/\%#=1\H//g
++p:s/\%#=2\H//g
++p:s/\%#=0[^A-Za-z_]//g
++p:s/\%#=1[^A-Za-z_]//g
++p:s/\%#=2[^A-Za-z_]//g
++p:s/\%#=0\a//g
++p:s/\%#=1\a//g
++p:s/\%#=2\a//g
++p:s/\%#=0[A-Za-z]//g
++p:s/\%#=1[A-Za-z]//g
++p:s/\%#=2[A-Za-z]//g
++p:s/\%#=0\A//g
++p:s/\%#=1\A//g
++p:s/\%#=2\A//g
++p:s/\%#=0[^A-Za-z]//g
++p:s/\%#=1[^A-Za-z]//g
++p:s/\%#=2[^A-Za-z]//g
++p:s/\%#=0\l//g
++p:s/\%#=1\l//g
++p:s/\%#=2\l//g
++p:s/\%#=0[a-z]//g
++p:s/\%#=1[a-z]//g
++p:s/\%#=2[a-z]//g
++p:s/\%#=0\L//g
++p:s/\%#=1\L//g
++p:s/\%#=2\L//g
++p:s/\%#=0[^a-z]//g
++p:s/\%#=1[^a-z]//g
++p:s/\%#=2[^a-z]//g
++p:s/\%#=0\u//g
++p:s/\%#=1\u//g
++p:s/\%#=2\u//g
++p:s/\%#=0[A-Z]//g
++p:s/\%#=1[A-Z]//g
++p:s/\%#=2[A-Z]//g
++p:s/\%#=0\U//g
++p:s/\%#=1\U//g
++p:s/\%#=2\U//g
++p:s/\%#=0[^A-Z]//g
++p:s/\%#=1[^A-Z]//g
++p:s/\%#=2[^A-Z]//g
+ :/^start-here/+1,$wq! test.out
+ ENDTEST
+ 
+ start-here
+ 	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+-	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
+diff -Naur vim73.orig/src/testdir/test36.ok vim73/src/testdir/test36.ok
+--- vim73.orig/src/testdir/test36.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test36.ok	2013-06-07 17:07:36.845570126 +0000
+@@ -1,16 +1,96 @@
+ 	
+
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++0123456789
++0123456789
++0123456789
++0123456789
++0123456789
+ 0123456789
+ 	
+
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./89:;<=>?@ABCDEFGHIXYZ[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++01234567
++01234567
++01234567
++01234567
++01234567
+ 01234567
+ 	
+
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@GHIXYZ[\]^_`ghiwxyz{|}~Š±ŒÇÓé
++0123456789ABCDEFabcdef
++0123456789ABCDEFabcdef
++0123456789ABCDEFabcdef
++0123456789ABCDEFabcdef
++0123456789ABCDEFabcdef
+ 0123456789ABCDEFabcdef
+ 	
+
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./:;<=>?@[\]^`{|}~Š±ŒÇÓé
++0123456789ABCDEFGHIXYZ_abcdefghiwxyz
++0123456789ABCDEFGHIXYZ_abcdefghiwxyz
++0123456789ABCDEFGHIXYZ_abcdefghiwxyz
++0123456789ABCDEFGHIXYZ_abcdefghiwxyz
++0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+ 0123456789ABCDEFGHIXYZ_abcdefghiwxyz
+ 	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^`{|}~Š±ŒÇÓé
++ABCDEFGHIXYZ_abcdefghiwxyz
++ABCDEFGHIXYZ_abcdefghiwxyz
++ABCDEFGHIXYZ_abcdefghiwxyz
++ABCDEFGHIXYZ_abcdefghiwxyz
++ABCDEFGHIXYZ_abcdefghiwxyz
+ ABCDEFGHIXYZ_abcdefghiwxyz
+ 	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`{|}~Š±ŒÇÓé
++ABCDEFGHIXYZabcdefghiwxyz
++ABCDEFGHIXYZabcdefghiwxyz
++ABCDEFGHIXYZabcdefghiwxyz
++ABCDEFGHIXYZabcdefghiwxyz
++ABCDEFGHIXYZabcdefghiwxyz
+ ABCDEFGHIXYZabcdefghiwxyz
+ 	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@ABCDEFGHIXYZ[\]^_`{|}~Š±ŒÇÓé
++abcdefghiwxyz
++abcdefghiwxyz
++abcdefghiwxyz
++abcdefghiwxyz
++abcdefghiwxyz
+ abcdefghiwxyz
+ 	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++	
+
+ !"#$%&'()#+'-./0123456789:;<=>?@[\]^_`abcdefghiwxyz{|}~Š±ŒÇÓé
++ABCDEFGHIXYZ
++ABCDEFGHIXYZ
++ABCDEFGHIXYZ
++ABCDEFGHIXYZ
++ABCDEFGHIXYZ
+ ABCDEFGHIXYZ
+diff -Naur vim73.orig/src/testdir/test40.in vim73/src/testdir/test40.in
+--- vim73.orig/src/testdir/test40.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test40.in	2013-06-07 17:07:36.962236459 +0000
+@@ -3,18 +3,18 @@
+ STARTTEST
+ :so small.vim
+ :/^start/,$w! Xxx		" write lines below to Xxx
+-:au BufReadCmd testA 0r Xxx|$del
+-:e testA			" will read text of Xxd instead
+-:au BufWriteCmd testA call append(line("$"), "write")
++:au BufReadCmd XtestA 0r Xxx|$del
++:e XtestA			" will read text of Xxd instead
++:au BufWriteCmd XtestA call append(line("$"), "write")
+ :w				" will append a line to the file
+-:r testA			" should not read anything
++:r XtestA			" should not read anything
+ :				" now we have:
+ :				" 1	start of Xxx
+ :				" 2		test40
+ :				" 3	end of Xxx
+ :				" 4	write
+-:au FileReadCmd testB '[r Xxx
+-:2r testB			" will read Xxx below line 2 instead
++:au FileReadCmd XtestB '[r Xxx
++:2r XtestB			" will read Xxx below line 2 instead
+ :				" 1	start of Xxx
+ :				" 2		test40
+ :				" 3	start of Xxx
+@@ -22,10 +22,10 @@
+ :				" 5	end of Xxx
+ :				" 6	end of Xxx
+ :				" 7	write
+-:au FileWriteCmd testC '[,']copy $
++:au FileWriteCmd XtestC '[,']copy $
+ 4GA1
+-:4,5w testC			" will copy lines 4 and 5 to the end
+-:r testC			" should not read anything
++:4,5w XtestC			" will copy lines 4 and 5 to the end
++:r XtestC			" should not read anything
+ :				" 1	start of Xxx
+ :				" 2		test40
+ :				" 3	start of Xxx
+@@ -35,14 +35,14 @@
+ :				" 7	write
+ :				" 8		test401
+ :				" 9	end of Xxx
+-:au FILEAppendCmd testD '[,']w! test.out
+-:w >>testD			" will write all lines to test.out
+-:$r testD			" should not read anything
++:au FILEAppendCmd XtestD '[,']w! test.out
++:w >>XtestD			" will write all lines to test.out
++:$r XtestD			" should not read anything
+ :$w >>test.out			" append "end of Xxx" to test.out
+-:au BufReadCmd testE 0r test.out|$del
+-:sp testE			" split window with test.out
++:au BufReadCmd XtestE 0r test.out|$del
++:sp XtestE			" split window with test.out
+ 5Goasdf:"
+-:au BufWriteCmd testE w! test.out
++:au BufWriteCmd XtestE w! test.out
+ :wall				" will write other window to test.out
+ :				" 1	start of Xxx
+ :				" 2		test40
+diff -Naur vim73.orig/src/testdir/test43.in vim73/src/testdir/test43.in
+--- vim73.orig/src/testdir/test43.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test43.in	2013-06-07 17:07:37.032236259 +0000
+@@ -1,6 +1,7 @@
+ Tests for regexp with various magic settings.
+ 
+ STARTTEST
++:so small.vim
+ :set nocompatible viminfo+=nviminfo
+ /^1
+ /a*b\{2}c\+/e
+@@ -13,7 +14,11 @@
+ x:set magic
+ /\v(a)(b)\2\1\1/e
+ x/\V[ab]\(\[xy]\)\1
+-x:?^1?,$w! test.out
++x:$
++:set undolevels=100
++dv?bar?
++Yup:"
++:?^1?,$w! test.out
+ :qa!
+ ENDTEST
+ 
+@@ -25,3 +30,5 @@
+ 6 x ^aa$ x
+ 7 (a)(b) abbaa
+ 8 axx [ab]xx
++9 foobar
++
+diff -Naur vim73.orig/src/testdir/test43.ok vim73/src/testdir/test43.ok
+--- vim73.orig/src/testdir/test43.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test43.ok	2013-06-07 17:07:37.038902907 +0000
+@@ -6,3 +6,6 @@
+ 6 x aa$ x
+ 7 (a)(b) abba
+ 8 axx ab]xx
++9 foobar
++9 foo
++
+diff -Naur vim73.orig/src/testdir/test44.in vim73/src/testdir/test44.in
+--- vim73.orig/src/testdir/test44.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test44.in	2013-06-07 17:07:37.052236202 +0000
+@@ -27,7 +27,14 @@
+ x/\%U12345678
+ x/[\U1234abcd\u1234\uabcd]
+ x/\%d21879b
+-x:?^1?,$w! test.out
++x/ [[=A=]]* [[=B=]]* [[=C=]]* [[=D=]]* [[=E=]]* [[=F=]]* [[=G=]]* [[=H=]]* [[=I=]]* [[=J=]]* [[=K=]]* [[=L=]]* [[=M=]]* [[=N=]]* [[=O=]]* [[=P=]]* [[=Q=]]* [[=R=]]* [[=S=]]* [[=T=]]* [[=U=]]* [[=V=]]* [[=W=]]* [[=X=]]* [[=Y=]]* [[=Z=]]*/e
++x/ [[=a=]]* [[=b=]]* [[=c=]]* [[=d=]]* [[=e=]]* [[=f=]]* [[=g=]]* [[=h=]]* [[=i=]]* [[=j=]]* [[=k=]]* [[=l=]]* [[=m=]]* [[=n=]]* [[=o=]]* [[=p=]]* [[=q=]]* [[=r=]]* [[=s=]]* [[=t=]]* [[=u=]]* [[=v=]]* [[=w=]]* [[=x=]]* [[=y=]]* [[=z=]]*/e
++x:" Test backwards search from a multi-byte char
++/x
++x?.
++x:let @w=':%s#comb[i]nations#ÅÌá¹£ÌmÌ¥ÌÎ±ÌÌÌ#g'
++:@w
++:?^1?,$w! test.out
+ :e! test.out
+ G:put =matchstr(\"××××\", \".\", 0, 2) " ×
+ :put =matchstr(\"××××\", \"..\", 0, 2) " ××
+@@ -53,3 +60,7 @@
+ e ü
+žy
+ f ü¯z
+ g aå·bb
++h AÃÃÃÃÃÃ
+ÄÄÄÇÇÇ áº¢ Bážáž CÃÄÄÄÄ DÄÄážážáž EÃÃÃÃÄÄÄÄÄáººáºŒ Fáž GÄÄÄ Ä¢Ç€ÇŠÇŽáž  HÄ€ÄŠáž¢ážŠážš IÃÃÃÃÄšÄªÄ¬Ä®Ä°Çá» JÄŽ KÄ¶Çšáž°ážŽ LÄ¹Ä»ÄœÄ¿Åážº MážŸá¹ NÃÅÅ
+Åá¹á¹ OÃÃÃÃÃÃÅÅÅÆ ÇÇªÇ¬á» Pá¹á¹ Q RÅÅÅá¹á¹ SÅÅÅÅ á¹  TÅ¢Å€ÅŠá¹ªá¹® UÃÃÃÃÅšÅªÅ¬Å®Å°Å²Æ¯Çá»Š Vá¹Œ WÅŽáºáºáºáº Xáºáº YÃÅ¶Åžáºá»²á»¶á»ž ZÅ¹Å»ÅœÆµáºáº
++i aÃ Ã¡Ã¢Ã£Ã€Ã¥ÄÄÄ
+ÇÇÇ¡áº£ bážáž cÃ§ÄÄÄÄ dÄÄážážáž eÃšÃ©ÃªÃ«ÄÄÄÄÄáº»áºœ fáž gÄÄÄ¡Ä£Ç¥Ç§Çµáž¡ hÄ¥Ä§áž£áž§áž©áº iÃ¬Ã­Ã®Ã¯Ä©Ä«Ä­Ä¯Çá» jÄµÇ° kÄ·Ç©áž±ážµ lÄºÄŒÄŸÅÅáž» máž¿á¹ nÃ±ÅÅÅÅá¹
+á¹ oÃ²Ã³ÃŽÃµÃ¶ÃžÅÅÅÆ¡ÇÇ«Ç­á» pá¹á¹ q rÅÅÅá¹á¹ sÅÅÅÅ¡á¹¡ tÅ£Å¥Å§á¹«á¹¯áº uÃ¹ÃºÃ»ÃŒÅ©Å«Å­Å¯Å±Å³Æ°Çá»§ vá¹œ wÅµáºáºáº
+áºáº xáºáº yÃœÃ¿Å·áºáºá»³á»·á»¹ zÅºÅŒÅŸÆ¶áºáº
++j 0123â€x
++k combinations
+diff -Naur vim73.orig/src/testdir/test44.ok vim73/src/testdir/test44.ok
+--- vim73.orig/src/testdir/test44.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test44.ok	2013-06-07 17:07:37.062236173 +0000
+@@ -14,6 +14,10 @@
+ e y
+ f z
+ g abb
++h AÃÃÃÃÃÃ
+ÄÄÄÇÇÇ áº¢ Bážáž CÃÄÄÄÄ DÄÄážážáž EÃÃÃÃÄÄÄÄÄáººáºŒ Fáž GÄÄÄ Ä¢Ç€ÇŠÇŽáž  HÄ€ÄŠáž¢ážŠážš IÃÃÃÃÄšÄªÄ¬Ä®Ä°Çá» JÄŽ KÄ¶Çšáž°ážŽ LÄ¹Ä»ÄœÄ¿Åážº MážŸá¹ NÃÅÅ
+Åá¹á¹ OÃÃÃÃÃÃÅÅÅÆ ÇÇªÇ¬á» Pá¹á¹ Q RÅÅÅá¹á¹ SÅÅÅÅ á¹  TÅ¢Å€ÅŠá¹ªá¹® UÃÃÃÃÅšÅªÅ¬Å®Å°Å²Æ¯Çá»Š Vá¹Œ WÅŽáºáºáºáº Xáºáº YÃÅ¶Åžáºá»²á»¶á»ž ZÅ¹Å»ÅœÆµáº
++i aÃ Ã¡Ã¢Ã£Ã€Ã¥ÄÄÄ
+ÇÇÇ¡áº£ bážáž cÃ§ÄÄÄÄ dÄÄážážáž eÃšÃ©ÃªÃ«ÄÄÄÄÄáº»áºœ fáž gÄÄÄ¡Ä£Ç¥Ç§Çµáž¡ hÄ¥Ä§áž£áž§áž©áº iÃ¬Ã­Ã®Ã¯Ä©Ä«Ä­Ä¯Çá» jÄµÇ° kÄ·Ç©áž±ážµ lÄºÄŒÄŸÅÅáž» máž¿á¹ nÃ±ÅÅÅÅá¹
+á¹ oÃ²Ã³ÃŽÃµÃ¶ÃžÅÅÅÆ¡ÇÇ«Ç­á» pá¹á¹ q rÅÅÅá¹á¹ sÅÅÅÅ¡á¹¡ tÅ£Å¥Å§á¹«á¹¯áº uÃ¹ÃºÃ»ÃŒÅ©Å«Å­Å¯Å±Å³Æ°Çá»§ vá¹œ wÅµáºáºáº
+áºáº xáºáº yÃœÃ¿Å·áºáºá»³á»·á»¹ zÅºÅŒÅŸÆ¶áº
++j 012â€
++k ÅÌá¹£ÌmÌ¥ÌÎ±ÌÌÌ
+ ×
+ ××
+ ×
+diff -Naur vim73.orig/src/testdir/test47.in vim73/src/testdir/test47.in
+--- vim73.orig/src/testdir/test47.in	2010-07-25 11:39:45.000000000 +0000
++++ vim73/src/testdir/test47.in	2013-06-07 17:07:37.108902707 +0000
+@@ -36,7 +36,22 @@
+ :call append("$", two)
+ :call append("$", three)
+ :$-2,$w! test.out
+-:unlet one two three
++:" Test that diffing shows correct filler lines
++:diffoff!
++:windo :bw!
++:enew
++:put =range(4,10)
++:1d _
++:vnew
++:put =range(1,10)
++:1d _
++:windo :diffthis
++:wincmd h
++:let w0=line('w0')
++:enew
++:put =w0
++:.w >> test.out
++:unlet! one two three w0
+ :qa!
+ ENDTEST
+ 
+diff -Naur vim73.orig/src/testdir/test47.ok vim73/src/testdir/test47.ok
+--- vim73.orig/src/testdir/test47.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test47.ok	2013-06-07 17:07:37.125569326 +0000
+@@ -1,3 +1,4 @@
+ 2-4-5-6-8-9
+ 1-2-4-5-8
+ 2-3-4-5-6-7-8
++1
+diff -Naur vim73.orig/src/testdir/test48.in vim73/src/testdir/test48.in
+--- vim73.orig/src/testdir/test48.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test48.in	2013-06-07 17:07:37.128902650 +0000
+@@ -54,8 +54,12 @@
+ ^O3li4li4li   <-- should show the name of a noted text editor
+ ^o4li4li4li   <-- and its version number-dd
+ :"
++:" Test for yanking and pasting using the small delete register
++gg/^foo
++dewve"-p
+ :wq! test.out
+ ENDTEST
++foo, bar
+ keyword keyw
+ all your base are belong to us
+ 1 2 3 4 5 6
+diff -Naur vim73.orig/src/testdir/test48.ok vim73/src/testdir/test48.ok
+--- vim73.orig/src/testdir/test48.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test48.ok	2013-06-07 17:07:37.152235916 +0000
+@@ -1,3 +1,4 @@
++, foo
+ keyword keyword
+ all your base 
+ are belong to vim
+diff -Naur vim73.orig/src/testdir/test49.ok vim73/src/testdir/test49.ok
+--- vim73.orig/src/testdir/test49.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test49.ok	2013-06-07 17:07:37.168902535 +0000
+@@ -85,8 +85,15 @@
+ *** Test  83: OK (2835)
+ *** Test  84: OK (934782101)
+ *** Test  85: OK (198689)
+---- Test  86: All tests were run with throwing exceptions on error.
++--- Test  86: No Crash for vimgrep on BufUnload
++*** Test  86: OK (0)
++--- Test  87: 3
++--- Test  87: 5
++--- Test  87: abcdefghijk
++--- Test  87: Successfully executed funcref Add2
++*** Test  87: OK (0)
++--- Test  88: All tests were run with throwing exceptions on error.
+ 	      The $VIMNOERRTHROW control is not configured.
+---- Test  86: All tests were run with throwing exceptions on interrupt.
++--- Test  88: All tests were run with throwing exceptions on interrupt.
+ 	      The $VIMNOINTTHROW control is not configured.
+-*** Test  86: OK (50443995)
++*** Test  88: OK (50443995)
+diff -Naur vim73.orig/src/testdir/test49.vim vim73/src/testdir/test49.vim
+--- vim73.orig/src/testdir/test49.vim	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test49.vim	2013-06-07 17:07:37.178902507 +0000
+@@ -1,6 +1,6 @@
+ " Vim script language tests
+ " Author:	Servatius Brandt <Servatius.Brandt@fujitsu-siemens.com>
+-" Last Change:	2006 Apr 28
++" Last Change:	2013 Jun 06
+ 
+ "-------------------------------------------------------------------------------
+ " Test environment							    {{{1
+@@ -8711,7 +8711,7 @@
+ 		endif
+ 	    else
+ 		if cmd == "let"
+-		    let match = MATCH(0, thrmsg, 'E106', "Unknown variable")
++		    let match = MATCH(0, thrmsg, 'E121', "Undefined variable")
+ 		elseif cmd == "unlet"
+ 		    let match = MATCH(0, thrmsg, 'E108', "No such variable")
+ 		endif
+@@ -9603,9 +9603,59 @@
+ 
+ Xcheck 198689
+ 
++"-------------------------------------------------------------------------------
++" Test 86:  setloclist crash						    {{{1
++"
++"	    Executing a setloclist() on BufUnload shouldn't crash Vim
++"-------------------------------------------------------------------------------
++
++func F
++    au BufUnload * :call setloclist(0, [{'bufnr':1, 'lnum':1, 'col':1, 'text': 'tango down'}])
++
++    :lvimgrep /.*/ *.mak
++endfunc
++
++XpathINIT
++
++ExecAsScript F
++
++delfunction F
++Xout  "No Crash for vimgrep on BufUnload"
++Xcheck 0 
++
++"-------------------------------------------------------------------------------
++" Test 87   using (expr) ? funcref : funcref				    {{{1
++"
++"	    Vim needs to correctly parse the funcref and even when it does
++"	    not execute the funcref, it needs to consume the trailing ()
++"-------------------------------------------------------------------------------
++
++XpathINIT
++
++func Add2(x1, x2)
++    return a:x1 + a:x2
++endfu
++
++func GetStr()
++    return "abcdefghijklmnopqrstuvwxyp"
++endfu
++
++echo function('Add2')(2,3)
++
++Xout 1 ? function('Add2')(1,2) : function('Add2')(2,3)
++Xout 0 ? function('Add2')(1,2) : function('Add2')(2,3)
++" Make sure, GetStr() still works.
++Xout GetStr()[0:10]
++
++
++delfunction GetStr
++delfunction Add2
++Xout  "Successfully executed funcref Add2"
++
++Xcheck 0 
+ 
+ "-------------------------------------------------------------------------------
+-" Test 86:  $VIMNOERRTHROW and $VIMNOINTTHROW support			    {{{1
++" Test 88:  $VIMNOERRTHROW and $VIMNOINTTHROW support			    {{{1
+ "
+ "	    It is possible to configure Vim for throwing exceptions on error
+ "	    or interrupt, controlled by variables $VIMNOERRTHROW and
+diff -Naur vim73.orig/src/testdir/test53.in vim73/src/testdir/test53.in
+--- vim73.orig/src/testdir/test53.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test53.in	2013-06-07 17:07:37.298902164 +0000
+@@ -28,6 +28,23 @@
+ :put =matchstr(\"abcd\", \".\", 0, -1) " a
+ :put =match(\"abcd\", \".\", 0, 5) " -1
+ :put =match(\"abcd\", \".\", 0, -1) " 0
++/^foobar
++gncsearchmatch/one\_s*two\_s
++:1
++gnd
++/[a]bcdx
++:1
++2gnd/join
++/$
++0gnd
++/\>\zs
++0gnd/^
++gnd$h/\zs
++gnd/[u]niquepattern/s
++vlgnd
++/mother
++:set selection=exclusive
++$cgNmongoose
+ :/^start:/,/^end:/wq! test.out
+ ENDTEST
+ 
+@@ -45,4 +62,15 @@
+ -<b>asdf<i>Xasdf</i>asdf</b>-
+ -<b>asdX<i>as<b />df</i>asdf</b>-
+ </begin>
++SEARCH:
++foobar
++one
++two
++abcdx | abcdx | abcdx
++join 
++lines
++zero width pattern
++delete first and last chars
++uniquepattern uniquepattern
++my very excellent mother just served us nachos
+ end:
+diff -Naur vim73.orig/src/testdir/test53.ok vim73/src/testdir/test53.ok
+--- vim73.orig/src/testdir/test53.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test53.ok	2013-06-07 17:07:37.305568812 +0000
+@@ -18,4 +18,12 @@
+ a
+ -1
+ 0
++SEARCH:
++searchmatch
++abcdx |  | abcdx
++join lines
++zerowidth pattern
++elete first and last char
++ uniquepattern
++my very excellent mongoose just served us nachos
+ end:
+diff -Naur vim73.orig/src/testdir/test55.in vim73/src/testdir/test55.in
+--- vim73.orig/src/testdir/test55.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test55.in	2013-06-07 17:07:37.338902050 +0000
+@@ -3,6 +3,7 @@
+ STARTTEST
+ :so small.vim
+ :fun Test(...)
++:lang C
+ :" Creating List directly with different types
+ :let l = [1, 'as''d', [1, 2, function("strlen")], {'a': 1},]
+ :$put =string(l)
+@@ -342,13 +343,52 @@
+ :$put =(d == d)
+ :$put =(l != deepcopy(l))
+ :$put =(d != deepcopy(d))
++:"
++:" compare complex recursively linked list and dict
++:let l = []
++:call add(l, l)
++:let dict4 = {"l": l}
++:call add(dict4.l, dict4)
++:let lcopy = deepcopy(l)
++:let dict4copy = deepcopy(dict4)
++:$put =(l == lcopy)
++:$put =(dict4 == dict4copy)
++:"
++:" Pass the same List to extend()
++:let l = [1, 2, 3, 4, 5]
++:call extend(l, l)
++:$put =string(l)
++:"
++:" Pass the same Dict to extend()
++:let d = { 'a': {'b': 'B'}}
++:call extend(d, d)
++:$put =string(d)
++:"
++:" Pass the same Dict to extend() with "error"
++:try
++:  call extend(d, d, "error")
++:catch
++:  $put =v:exception[:15] . v:exception[-1:-1]
++:endtry
++:$put =string(d)
+ :endfun
++:"
+ :call Test(1, 2, [3, 4], {5: 6})  " This may take a while
+ :"
+ :delfunc Test
+ :unlet dict
+ :call garbagecollect(1)
+ :"
++:" test for patch 7.3.637
++:let a = 'No error caught'
++:try|foldopen|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++o=a
+:"
++:lang C
++:redir => a
++:try|foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++:redir END
++o=a
+:"
++:"
+ :/^start:/,$wq! test.out
+ ENDTEST
+ 
+diff -Naur vim73.orig/src/testdir/test55.ok vim73/src/testdir/test55.ok
+--- vim73.orig/src/testdir/test55.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test55.ok	2013-06-07 17:07:37.352235345 +0000
+@@ -109,3 +109,15 @@
+ 1
+ 0
+ 0
++1
++1
++[1, 2, 3, 4, 5, 1, 2, 3, 4, 5]
++{'a': {'b': 'B'}}
++Vim(call):E737: a
++{'a': {'b': 'B'}}
++Vim(foldopen):E490:
++
++
++Error detected while processing :
++E492: Not an editor command: foobar|catch|let a = matchstr(v:exception,'^[^ ]*')|endtry
++
+diff -Naur vim73.orig/src/testdir/test57.in vim73/src/testdir/test57.in
+--- vim73.orig/src/testdir/test57.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test57.in	2013-06-07 17:07:37.398901878 +0000
+@@ -53,15 +53,19 @@
+ t02: numeric
+ abc
+ ab
+-a
+ a321
+ a123
+ a122
++a
++x-22
+ b321
+ b123
++
+ c123d
++-24
+  123b
+ c321d
++0
+ b322b
+ b321
+ b321b
+diff -Naur vim73.orig/src/testdir/test57.ok vim73/src/testdir/test57.ok
+--- vim73.orig/src/testdir/test57.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test57.ok	2013-06-07 17:07:37.428901793 +0000
+@@ -21,6 +21,10 @@
+ a
+ 
+ 
++
++-24
++x-22
++0
+ a122
+ a123
+ b123
+diff -Naur vim73.orig/src/testdir/test61.in vim73/src/testdir/test61.in
+--- vim73.orig/src/testdir/test61.in	2010-06-27 03:07:58.000000000 +0000
++++ vim73/src/testdir/test61.in	2013-06-07 17:07:37.548901450 +0000
+@@ -4,6 +4,10 @@
+ Also tests :earlier and :later.
+ 
+ STARTTEST
++:echo undotree().entries
++ENDTEST
++
++STARTTEST
+ :" Delete three characters and undo
+ Gx:set ul=100
+ x:set ul=100
+diff -Naur vim73.orig/src/testdir/test62.in vim73/src/testdir/test62.in
+--- vim73.orig/src/testdir/test62.in	2010-05-31 19:22:55.000000000 +0000
++++ vim73/src/testdir/test62.in	2013-06-07 17:07:37.565568069 +0000
+@@ -49,6 +49,139 @@
+ :tabclose
+ :call append(line('$'), test_status)
+ :"
++:if has('gui') || has('clientserver')
++:" Test for ":tab drop exist-file" to keep current window.
++:sp test1
++:tab drop test1
++:let test_status = 'tab drop 1: fail'
++:if tabpagenr('$') == 1 && winnr('$') == 2 && winnr() == 1
++:    let test_status = 'tab drop 1: pass'
++:endif
++:close
++:call append(line('$'), test_status)
++:"
++:"
++:" Test for ":tab drop new-file" to keep current window of tabpage 1.
++:split
++:tab drop newfile
++:let test_status = 'tab drop 2: fail'
++:if tabpagenr('$') == 2 && tabpagewinnr(1, '$') == 2 && tabpagewinnr(1) == 1
++:    let test_status = 'tab drop 2: pass'
++:endif
++:tabclose
++:q
++:call append(line('$'), test_status)
++:"
++:"
++:" Test for ":tab drop multi-opend-file" to keep current tabpage and window.
++:new test1
++:tabnew
++:new test1
++:tab drop test1
++:let test_status = 'tab drop 3: fail'
++:if tabpagenr() == 2 && tabpagewinnr(2, '$') == 2 && tabpagewinnr(2) == 1
++:    let test_status = 'tab drop 3: pass'
++:endif
++:tabclose
++:q
++:call append(line('$'), test_status)
++:else
++:" :drop not supported
++:call append(line('$'), 'tab drop 1: pass')
++:call append(line('$'), 'tab drop 2: pass')
++:call append(line('$'), 'tab drop 3: pass')
++:endif
++:"
++:"
++:for i in range(9) | tabnew | endfor
++1gt
++Go=tabpagenr()
+
+
++:tabmove 5
++i=tabpagenr()
+
+
++:tabmove -2
++i=tabpagenr()
+
+
++:tabmove +4
++i=tabpagenr()
+
+
++:tabmove
++i=tabpagenr()
+
+
++:tabmove -20
++i=tabpagenr()
+
+
++:tabmove +20
++i=tabpagenr()
+
+
++:3tabmove
++i=tabpagenr()
+
+
++:7tabmove 5
++i=tabpagenr()
+
+
++:let a='No error caught.'
++:try
++:tabmove foo
++:catch E474
++:let a='E474 caught.'
++:endtry
++i=a
+
++:"
++:" Test autocommands
++:tabonly!
++:let g:r=[]
++:command -nargs=1 -bar C :call add(g:r, '=== ' . <q-args> . ' ===')|<args>
++:function Test()
++    let hasau=has('autocmd')
++    if hasau
++        autocmd TabEnter * :call add(g:r, 'TabEnter')
++        autocmd WinEnter * :call add(g:r, 'WinEnter')
++        autocmd BufEnter * :call add(g:r, 'BufEnter')
++        autocmd TabLeave * :call add(g:r, 'TabLeave')
++        autocmd WinLeave * :call add(g:r, 'WinLeave')
++        autocmd BufLeave * :call add(g:r, 'BufLeave')
++    endif
++    let t:a='a'
++    C tab split
++    if !hasau
++        let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter']
++    endif
++    let t:a='b'
++    C tabnew
++    if !hasau
++        let g:r+=['WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufLeave', 'BufEnter']
++    endif
++    let t:a='c'
++    call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
++    C call map(range(1, tabpagenr('$')), 'settabvar(v:val, "a", v:val*2)')
++    call add(g:r, join(map(range(1, tabpagenr('$')), 'gettabvar(v:val, "a")')))
++    let w:a='a'
++    C vsplit
++    if !hasau
++        let g:r+=['WinLeave', 'WinEnter']
++    endif
++    let w:a='a'
++    let tabn=tabpagenr()
++    let winr=range(1, winnr('$'))
++    C tabnext 1
++    if !hasau
++        let g:r+=['BufLeave', 'WinLeave', 'TabLeave', 'WinEnter', 'TabEnter', 'BufEnter']
++    endif
++    call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
++    C call map(copy(winr), 'settabwinvar('.tabn.', v:val, "a", v:val*2)')
++    call add(g:r, join(map(copy(winr), 'gettabwinvar('.tabn.', v:val, "a")')))
++    if hasau
++        augroup TabDestructive
++            autocmd TabEnter * :C tabnext 2 | C tabclose 3
++        augroup END
++        C tabnext 3
++        let g:r+=[tabpagenr().'/'.tabpagenr('$')]
++        autocmd! TabDestructive TabEnter
++        C tabnew
++        C tabnext 1
++        autocmd TabDestructive TabEnter * nested :C tabnext 2 | C tabclose 3
++        C tabnext 3
++        let g:r+=[tabpagenr().'/'.tabpagenr('$')]
++    else
++        let g:r+=["=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","2/2","=== tabnew ===","WinLeave","TabLeave","WinEnter","TabEnter","BufLeave","BufEnter","=== tabnext 1 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","BufEnter","=== tabnext 3 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","BufLeave","WinLeave","TabLeave","WinEnter","TabEnter","=== tabnext 2 ===","=== tabclose 3 ===","BufEnter","=== tabclose 3 ===","2/2",]
++    endif
++endfunction
++:call Test()
++:$ put =g:r
++:"
+ :"
+ :/^Results/,$w! test.out
+ :qa!
+diff -Naur vim73.orig/src/testdir/test62.ok vim73/src/testdir/test62.ok
+--- vim73.orig/src/testdir/test62.ok	2010-05-31 19:22:55.000000000 +0000
++++ vim73/src/testdir/test62.ok	2013-06-07 17:07:37.575568040 +0000
+@@ -5,3 +5,84 @@
+ this is tab page 4
+ gettabvar: pass
+ settabvar: pass
++tab drop 1: pass
++tab drop 2: pass
++tab drop 3: pass
++1
++6
++4
++8
++10
++1
++10
++4
++6
++E474 caught.
++=== tab split ===
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++=== tabnew ===
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++BufLeave
++BufEnter
++a b c
++=== call map(range(1, tabpagenr('$')), 'settabvar(v:val, ===
++a b c
++=== vsplit ===
++WinLeave
++WinEnter
++=== tabnext 1 ===
++BufLeave
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++BufEnter
++a a
++=== call map(copy(winr), 'settabwinvar('.tabn.', v:val, ===
++a a
++=== tabnext 3 ===
++BufLeave
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++=== tabnext 2 ===
++=== tabclose 3 ===
++2/2
++=== tabnew ===
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++BufLeave
++BufEnter
++=== tabnext 1 ===
++BufLeave
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++BufEnter
++=== tabnext 3 ===
++BufLeave
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++=== tabnext 2 ===
++BufLeave
++WinLeave
++TabLeave
++WinEnter
++TabEnter
++=== tabnext 2 ===
++=== tabclose 3 ===
++BufEnter
++=== tabclose 3 ===
++2/2
+diff -Naur vim73.orig/src/testdir/test64.in vim73/src/testdir/test64.in
+--- vim73.orig/src/testdir/test64.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test64.in	2013-06-07 17:07:37.608901279 +0000
+@@ -1,4 +1,5 @@
+-Test for regexp patterns.
++Test for regexp patterns without multi-byte support.
++See test95 for multi-byte tests.
+ 
+ A pattern that gives the expected result produces OK, so that we know it was
+ actually tried.
+@@ -14,154 +15,554 @@
+ :"    etc.
+ :"  When there is no match use only the first two items.
+ :let tl = []
+-:call add(tl, ['ab', 'aab', 'ab'])
+-:call add(tl, ['b', 'abcdef', 'b'])
+-:call add(tl, ['bc*', 'abccccdef', 'bcccc'])
+-:call add(tl, ['bc\{-}', 'abccccdef', 'b'])
+-:call add(tl, ['bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
+-:call add(tl, ['bc*', 'abbdef', 'b'])
+-:call add(tl, ['c*', 'ccc', 'ccc'])
+-:call add(tl, ['bc*', 'abdef', 'b'])
+-:call add(tl, ['c*', 'abdef', ''])
+-:call add(tl, ['bc\+', 'abccccdef', 'bcccc'])
+-:call add(tl, ['bc\+', 'abdef']) "no match
++:"
++:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
++:"""" Previously written tests """"""""""""""""""""""""""""""""
++:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
++:"
++:call add(tl, [2, 'ab', 'aab', 'ab'])
++:call add(tl, [2, 'b', 'abcdef', 'b'])
++:call add(tl, [2, 'bc*', 'abccccdef', 'bcccc'])
++:call add(tl, [2, 'bc\{-}', 'abccccdef', 'b'])
++:call add(tl, [2, 'bc\{-}\(d\)', 'abccccdef', 'bccccd', 'd'])
++:call add(tl, [2, 'bc*', 'abbdef', 'b'])
++:call add(tl, [2, 'c*', 'ccc', 'ccc'])
++:call add(tl, [2, 'bc*', 'abdef', 'b'])
++:call add(tl, [2, 'c*', 'abdef', ''])
++:call add(tl, [2, 'bc\+', 'abccccdef', 'bcccc'])
++:call add(tl, [2, 'bc\+', 'abdef']) "no match
+ :"
+ :"operator \|
+-:call add(tl, ['a\|ab', 'cabd', 'a']) "alternation is ordered
++:call add(tl, [2, 'a\|ab', 'cabd', 'a']) "alternation is ordered
+ :"
+-:call add(tl, ['c\?', 'ccb', 'c'])
+-:call add(tl, ['bc\?', 'abd', 'b'])
+-:call add(tl, ['bc\?', 'abccd', 'bc'])
+-:"
+-:call add(tl, ['\va{1}', 'ab', 'a'])
+-:"
+-:call add(tl, ['\va{2}', 'aa', 'aa'])
+-:call add(tl, ['\va{2}', 'caad', 'aa'])
+-:call add(tl, ['\va{2}', 'aba'])
+-:call add(tl, ['\va{2}', 'ab'])
+-:call add(tl, ['\va{2}', 'abaa', 'aa'])
+-:call add(tl, ['\va{2}', 'aaa', 'aa'])
+-:"
+-:call add(tl, ['\vb{1}', 'abca', 'b'])
+-:call add(tl, ['\vba{2}', 'abaa', 'baa'])
+-:call add(tl, ['\vba{3}', 'aabaac'])
+-:"
+-:call add(tl, ['\v(ab){1}', 'ab', 'ab', 'ab'])
+-:call add(tl, ['\v(ab){1}', 'dabc', 'ab', 'ab'])
+-:call add(tl, ['\v(ab){1}', 'acb'])
+-:"
+-:call add(tl, ['\v(ab){0,2}', 'acb', "", ""])
+-:call add(tl, ['\v(ab){0,2}', 'ab', 'ab', 'ab'])
+-:call add(tl, ['\v(ab){1,2}', 'ab', 'ab', 'ab'])
+-:call add(tl, ['\v(ab){1,2}', 'ababc', 'abab', 'ab'])
+-:call add(tl, ['\v(ab){2,4}', 'ababcab', 'abab', 'ab'])
+-:call add(tl, ['\v(ab){2,4}', 'abcababa', 'abab', 'ab'])
+-:"
+-:call add(tl, ['\v(ab){2}', 'abab', 'abab', 'ab'])
+-:call add(tl, ['\v(ab){2}', 'cdababe', 'abab', 'ab'])
+-:call add(tl, ['\v(ab){2}', 'abac'])
+-:call add(tl, ['\v(ab){2}', 'abacabab', 'abab', 'ab'])
+-:call add(tl, ['\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab'])
+-:call add(tl, ['\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab'])
+-:"
+-:call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
+-:call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
+-:call add(tl, ['\v(a{2}){1}', 'aaac', 'aa', 'aa'])
+-:call add(tl, ['\v(a{2}){1}', 'daaac', 'aa', 'aa'])
+-:call add(tl, ['\v(a{1}){2}', 'daaac', 'aa', 'a'])
+-:call add(tl, ['\v(a{1}){2}', 'aaa', 'aa', 'a'])
+-:call add(tl, ['\v(a{2})+', 'adaac', 'aa', 'aa'])
+-:call add(tl, ['\v(a{2})+', 'aa', 'aa', 'aa'])
+-:call add(tl, ['\v(a{2}){1}', 'aa', 'aa', 'aa'])
+-:call add(tl, ['\v(a{1}){2}', 'aa', 'aa', 'a'])
+-:call add(tl, ['\v(a{1}){1}', 'a', 'a', 'a'])
+-:call add(tl, ['\v(a{2}){2}', 'aaaa', 'aaaa', 'aa'])
+-:call add(tl, ['\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa'])
+-:"
+-:call add(tl, ['\v(a+){2}', 'dadaac', 'aa', 'a'])
+-:call add(tl, ['\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa'])
+-:"
+-:call add(tl, ['\v(a{1,2}){2}', 'daaac', 'aaa', 'a'])
+-:call add(tl, ['\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a'])
+-:call add(tl, ['\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa'])
+-:call add(tl, ['\v(a{1,3}){3}', 'daac'])
+-:call add(tl, ['\v(a{1,2}){2}', 'dac'])
+-:call add(tl, ['\v(a+)+', 'daac', 'aa', 'aa'])
+-:call add(tl, ['\v(a+)+', 'aaa', 'aaa', 'aaa'])
+-:call add(tl, ['\v(a+){1,2}', 'aaa', 'aaa', 'aaa'])
+-:call add(tl, ['\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a'])
+-:call add(tl, ['\v(a{3})+', 'daaaac', 'aaa', 'aaa'])
+-:call add(tl, ['\v(a|b|c)+', 'aacb', 'aacb', 'b'])
+-:call add(tl, ['\v(a|b|c){2}', 'abcb', 'ab', 'b'])
+-:call add(tl, ['\v(abc){2}', 'abcabd', ])
+-:call add(tl, ['\v(abc){2}', 'abdabcabc','abcabc', 'abc'])
+-:"
+-:call add(tl, ['a*', 'cc', ''])
+-:call add(tl, ['\v(a*)+', 'cc', ''])
+-:call add(tl, ['\v((ab)+)+', 'ab', 'ab', 'ab', 'ab'])
+-:call add(tl, ['\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab'])
+-:call add(tl, ['\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab'])
+-:call add(tl, ['\v(a{0,2})+', 'cc', ''])
+-:call add(tl, ['\v(a*)+', '', ''])
+-:call add(tl, ['\v((a*)+)+', '', ''])
+-:call add(tl, ['\v((ab)*)+', '', ''])
+-:call add(tl, ['\va{1,3}', 'aab', 'aa'])
+-:call add(tl, ['\va{2,3}', 'abaa', 'aa'])
+-:"
+-:call add(tl, ['\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
+-:call add(tl, ['\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb'])
+-:call add(tl, ['\va{2}|b{2}', 'abab'])
+-:call add(tl, ['\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a'])
+-:call add(tl, ['\vab{2,3}c', 'aabbccccccccccccc', 'abbc'])
+-:call add(tl, ['\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc'])
+-:call add(tl, ['\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde'])
+-:call add(tl, ['\va(bc){2}d', 'aabcbfbc' ])
+-:call add(tl, ['\va*a{2}', 'a', ])
+-:call add(tl, ['\va*a{2}', 'aa', 'aa' ])
+-:call add(tl, ['\va*a{2}', 'aaa', 'aaa' ])
+-:call add(tl, ['\va*a{2}', 'bbbabcc', ])
+-:call add(tl, ['\va*b*|a*c*', 'a', 'a'])
+-:call add(tl, ['\va{1}b{1}|a{1}b{1}', ''])
++:call add(tl, [2, 'c\?', 'ccb', 'c'])
++:call add(tl, [2, 'bc\?', 'abd', 'b'])
++:call add(tl, [2, 'bc\?', 'abccd', 'bc'])
++:"
++:call add(tl, [2, '\va{1}', 'ab', 'a'])
++:"
++:call add(tl, [2, '\va{2}', 'aa', 'aa'])
++:call add(tl, [2, '\va{2}', 'caad', 'aa'])
++:call add(tl, [2, '\va{2}', 'aba'])
++:call add(tl, [2, '\va{2}', 'ab'])
++:call add(tl, [2, '\va{2}', 'abaa', 'aa'])
++:call add(tl, [2, '\va{2}', 'aaa', 'aa'])
++:"
++:call add(tl, [2, '\vb{1}', 'abca', 'b'])
++:call add(tl, [2, '\vba{2}', 'abaa', 'baa'])
++:call add(tl, [2, '\vba{3}', 'aabaac'])
++:"
++:call add(tl, [2, '\v(ab){1}', 'ab', 'ab', 'ab'])
++:call add(tl, [2, '\v(ab){1}', 'dabc', 'ab', 'ab'])
++:call add(tl, [2, '\v(ab){1}', 'acb'])
++:"
++:call add(tl, [2, '\v(ab){0,2}', 'acb', "", ""])
++:call add(tl, [2, '\v(ab){0,2}', 'ab', 'ab', 'ab'])
++:call add(tl, [2, '\v(ab){1,2}', 'ab', 'ab', 'ab'])
++:call add(tl, [2, '\v(ab){1,2}', 'ababc', 'abab', 'ab'])
++:call add(tl, [2, '\v(ab){2,4}', 'ababcab', 'abab', 'ab'])
++:call add(tl, [2, '\v(ab){2,4}', 'abcababa', 'abab', 'ab'])
++:"
++:call add(tl, [2, '\v(ab){2}', 'abab', 'abab', 'ab'])
++:call add(tl, [2, '\v(ab){2}', 'cdababe', 'abab', 'ab'])
++:call add(tl, [2, '\v(ab){2}', 'abac'])
++:call add(tl, [2, '\v(ab){2}', 'abacabab', 'abab', 'ab'])
++:call add(tl, [2, '\v((ab){2}){2}', 'abababab', 'abababab', 'abab', 'ab'])
++:call add(tl, [2, '\v((ab){2}){2}', 'abacabababab', 'abababab', 'abab', 'ab'])
++:"
++:call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a'])
++:call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa'])
++:call add(tl, [2, '\v(a{2}){1}', 'aaac', 'aa', 'aa'])
++:call add(tl, [2, '\v(a{2}){1}', 'daaac', 'aa', 'aa'])
++:call add(tl, [2, '\v(a{1}){2}', 'daaac', 'aa', 'a'])
++:call add(tl, [2, '\v(a{1}){2}', 'aaa', 'aa', 'a'])
++:call add(tl, [2, '\v(a{2})+', 'adaac', 'aa', 'aa'])
++:call add(tl, [2, '\v(a{2})+', 'aa', 'aa', 'aa'])
++:call add(tl, [2, '\v(a{2}){1}', 'aa', 'aa', 'aa'])
++:call add(tl, [2, '\v(a{1}){2}', 'aa', 'aa', 'a'])
++:call add(tl, [2, '\v(a{1}){1}', 'a', 'a', 'a'])
++:call add(tl, [2, '\v(a{2}){2}', 'aaaa', 'aaaa', 'aa'])
++:call add(tl, [2, '\v(a{2}){2}', 'aaabaaaa', 'aaaa', 'aa'])
++:"
++:call add(tl, [2, '\v(a+){2}', 'dadaac', 'aa', 'a'])
++:call add(tl, [2, '\v(a{3}){2}', 'aaaaaaa', 'aaaaaa', 'aaa'])
++:"
++:call add(tl, [2, '\v(a{1,2}){2}', 'daaac', 'aaa', 'a'])
++:call add(tl, [2, '\v(a{1,3}){2}', 'daaaac', 'aaaa', 'a'])
++:call add(tl, [2, '\v(a{1,3}){2}', 'daaaaac', 'aaaaa', 'aa'])
++:call add(tl, [2, '\v(a{1,3}){3}', 'daac'])
++:call add(tl, [2, '\v(a{1,2}){2}', 'dac'])
++:call add(tl, [2, '\v(a+)+', 'daac', 'aa', 'aa'])
++:call add(tl, [2, '\v(a+)+', 'aaa', 'aaa', 'aaa'])
++:call add(tl, [2, '\v(a+){1,2}', 'aaa', 'aaa', 'aaa'])
++:call add(tl, [2, '\v(a+)(a+)', 'aaa', 'aaa', 'aa', 'a'])
++:call add(tl, [2, '\v(a{3})+', 'daaaac', 'aaa', 'aaa'])
++:call add(tl, [2, '\v(a|b|c)+', 'aacb', 'aacb', 'b'])
++:call add(tl, [2, '\v(a|b|c){2}', 'abcb', 'ab', 'b'])
++:call add(tl, [2, '\v(abc){2}', 'abcabd', ])
++:call add(tl, [2, '\v(abc){2}', 'abdabcabc','abcabc', 'abc'])
++:"
++:call add(tl, [2, 'a*', 'cc', ''])
++:call add(tl, [2, '\v(a*)+', 'cc', ''])
++:call add(tl, [2, '\v((ab)+)+', 'ab', 'ab', 'ab', 'ab'])
++:call add(tl, [2, '\v(((ab)+)+)+', 'ab', 'ab', 'ab', 'ab', 'ab'])
++:call add(tl, [2, '\v(((ab)+)+)+', 'dababc', 'abab', 'abab', 'abab', 'ab'])
++:call add(tl, [2, '\v(a{0,2})+', 'cc', ''])
++:call add(tl, [2, '\v(a*)+', '', ''])
++:call add(tl, [2, '\v((a*)+)+', '', ''])
++:call add(tl, [2, '\v((ab)*)+', '', ''])
++:call add(tl, [2, '\va{1,3}', 'aab', 'aa'])
++:call add(tl, [2, '\va{2,3}', 'abaa', 'aa'])
++:"
++:call add(tl, [2, '\v((ab)+|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
++:call add(tl, [2, '\v(a{2})|(b{3})', 'bbabbbb', 'bbb', '', 'bbb'])
++:call add(tl, [2, '\va{2}|b{2}', 'abab'])
++:call add(tl, [2, '\v(a)+|(c)+', 'bbacbaacbbb', 'a', 'a'])
++:call add(tl, [2, '\vab{2,3}c', 'aabbccccccccccccc', 'abbc'])
++:call add(tl, [2, '\vab{2,3}c', 'aabbbccccccccccccc', 'abbbc'])
++:call add(tl, [2, '\vab{2,3}cd{2,3}e', 'aabbbcddee', 'abbbcdde'])
++:call add(tl, [2, '\va(bc){2}d', 'aabcbfbc' ])
++:call add(tl, [2, '\va*a{2}', 'a', ])
++:call add(tl, [2, '\va*a{2}', 'aa', 'aa' ])
++:call add(tl, [2, '\va*a{2}', 'aaa', 'aaa' ])
++:call add(tl, [2, '\va*a{2}', 'bbbabcc', ])
++:call add(tl, [2, '\va*b*|a*c*', 'a', 'a'])
++:call add(tl, [2, '\va{1}b{1}|a{1}b{1}', ''])
+ :"
+ :"submatches
+-:call add(tl, ['\v(a)', 'ab', 'a', 'a'])
+-:call add(tl, ['\v(a)(b)', 'ab', 'ab', 'a', 'b'])
+-:call add(tl, ['\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c'])
+-:call add(tl, ['\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b'])
+-:call add(tl, ['\v(a)|(b)', 'ab', 'a', 'a'])
++:call add(tl, [2, '\v(a)', 'ab', 'a', 'a'])
++:call add(tl, [2, '\v(a)(b)', 'ab', 'ab', 'a', 'b'])
++:call add(tl, [2, '\v(ab)(b)(c)', 'abbc', 'abbc', 'ab', 'b', 'c'])
++:call add(tl, [2, '\v((a)(b))', 'ab', 'ab', 'ab', 'a', 'b'])
++:call add(tl, [2, '\v(a)|(b)', 'ab', 'a', 'a'])
++:"
++:call add(tl, [2, '\v(a*)+', 'aaaa', 'aaaa', ''])
++:call add(tl, [2, 'x', 'abcdef'])
++:"
++:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
++:""""" Simple tests """""""""""""""""""""""""""""""""""""""""""
++:""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
++:"
++:" Search single groups
++:call add(tl, [2, 'ab', 'aab', 'ab'])
++:call add(tl, [2, 'ab', 'baced'])
++:call add(tl, [2, 'ab', '                    ab           ', 'ab'])
++:"
++:" Search multi-modifiers
++:call add(tl, [2, 'x*', 'xcd', 'x'])
++:call add(tl, [2, 'x*', 'xxxxxxxxxxxxxxxxsofijiojgf', 'xxxxxxxxxxxxxxxx'])
++:" empty match is good
++:call add(tl, [2, 'x*', 'abcdoij', ''])
++:" no match here
++:call add(tl, [2, 'x\+', 'abcdoin'])
++:call add(tl, [2, 'x\+', 'abcdeoijdfxxiuhfij', 'xx'])
++:call add(tl, [2, 'x\+', 'xxxxx', 'xxxxx'])
++:call add(tl, [2, 'x\+', 'abc x siufhiush xxxxxxxxx', 'x'])
++:call add(tl, [2, 'x\=', 'x sdfoij', 'x'])
++:call add(tl, [2, 'x\=', 'abc sfoij', '']) " empty match is good
++:call add(tl, [2, 'x\=', 'xxxxxxxxx c', 'x'])
++:call add(tl, [2, 'x\?', 'x sdfoij', 'x'])
++:" empty match is good
++:call add(tl, [2, 'x\?', 'abc sfoij', ''])
++:call add(tl, [2, 'x\?', 'xxxxxxxxxx c', 'x'])
++:"
++:call add(tl, [2, 'a\{0,0}', 'abcdfdoij', ''])
++:" same thing as 'a?'
++:call add(tl, [2, 'a\{0,1}', 'asiubid axxxaaa', 'a'])
++:" same thing as 'a\{0,1}'
++:call add(tl, [2, 'a\{1,0}', 'asiubid axxxaaa', 'a'])
++:call add(tl, [2, 'a\{3,6}', 'aa siofuh'])
++:call add(tl, [2, 'a\{3,6}', 'aaaaa asfoij afaa', 'aaaaa'])
++:call add(tl, [2, 'a\{3,6}', 'aaaaaaaa', 'aaaaaa'])
++:call add(tl, [2, 'a\{0}', 'asoiuj', ''])
++:call add(tl, [2, 'a\{2}', 'aaaa', 'aa'])
++:call add(tl, [2, 'a\{2}', 'iuash fiusahfliusah fiushfilushfi uhsaifuh askfj nasfvius afg aaaa sfiuhuhiushf', 'aa'])
++:call add(tl, [2, 'a\{2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
++:" same thing as 'a*'
++:call add(tl, [2, 'a\{0,}', 'oij sdigfusnf', ''])
++:call add(tl, [2, 'a\{0,}', 'aaaaa aa', 'aaaaa'])
++:call add(tl, [2, 'a\{2,}', 'sdfiougjdsafg'])
++:call add(tl, [2, 'a\{2,}', 'aaaaasfoij ', 'aaaaa'])
++:call add(tl, [2, 'a\{5,}', 'xxaaaaxxx '])
++:call add(tl, [2, 'a\{5,}', 'xxaaaaaxxx ', 'aaaaa'])
++:call add(tl, [2, 'a\{,0}', 'oidfguih iuhi hiu aaaa', ''])
++:call add(tl, [2, 'a\{,5}', 'abcd', 'a'])
++:call add(tl, [2, 'a\{,5}', 'aaaaaaaaaa', 'aaaaa'])
++:" leading star as normal char when \{} follows
++:call add(tl, [2, '^*\{4,}$', '***'])
++:call add(tl, [2, '^*\{4,}$', '****', '****'])
++:call add(tl, [2, '^*\{4,}$', '*****', '*****'])
++:" same thing as 'a*'
++:call add(tl, [2, 'a\{}', 'bbbcddiuhfcd', ''])
++:call add(tl, [2, 'a\{}', 'aaaaioudfh coisf jda', 'aaaa'])
++:"
++:call add(tl, [2, 'a\{-0,0}', 'abcdfdoij', ''])
++:" anti-greedy version of 'a?'
++:call add(tl, [2, 'a\{-0,1}', 'asiubid axxxaaa', ''])
++:call add(tl, [2, 'a\{-3,6}', 'aa siofuh'])
++:call add(tl, [2, 'a\{-3,6}', 'aaaaa asfoij afaa', 'aaa'])
++:call add(tl, [2, 'a\{-3,6}', 'aaaaaaaa', 'aaa'])
++:call add(tl, [2, 'a\{-0}', 'asoiuj', ''])
++:call add(tl, [2, 'a\{-2}', 'aaaa', 'aa'])
++:call add(tl, [2, 'a\{-2}', 'abcdefghijklmnopqrestuvwxyz1234567890'])
++:call add(tl, [2, 'a\{-0,}', 'oij sdigfusnf', ''])
++:call add(tl, [2, 'a\{-0,}', 'aaaaa aa', ''])
++:call add(tl, [2, 'a\{-2,}', 'sdfiougjdsafg'])
++:call add(tl, [2, 'a\{-2,}', 'aaaaasfoij ', 'aa'])
++:call add(tl, [2, 'a\{-,0}', 'oidfguih iuhi hiu aaaa', ''])
++:call add(tl, [2, 'a\{-,5}', 'abcd', ''])
++:call add(tl, [2, 'a\{-,5}', 'aaaaaaaaaa', ''])
++:" anti-greedy version of 'a*'
++:call add(tl, [2, 'a\{-}', 'bbbcddiuhfcd', ''])
++:call add(tl, [2, 'a\{-}', 'aaaaioudfh coisf jda', ''])
++:"
++:" Test groups of characters and submatches
++:call add(tl, [2, '\(abc\)*', 'abcabcabc', 'abcabcabc', 'abc'])
++:call add(tl, [2, '\(ab\)\+', 'abababaaaaa', 'ababab', 'ab'])
++:call add(tl, [2, '\(abaaaaa\)*cd', 'cd', 'cd', ''])
++:call add(tl, [2, '\(test1\)\? \(test2\)\?', 'test1 test3', 'test1 ', 'test1', ''])
++:call add(tl, [2, '\(test1\)\= \(test2\) \(test4443\)\=', ' test2 test4443 yupiiiiiiiiiii', ' test2 test4443', '', 'test2', 'test4443'])
++:call add(tl, [2, '\(\(sub1\) hello \(sub 2\)\)', 'asterix sub1 hello sub 2 obelix', 'sub1 hello sub 2', 'sub1 hello sub 2', 'sub1', 'sub 2'])
++:call add(tl, [2, '\(\(\(yyxxzz\)\)\)', 'abcdddsfiusfyyzzxxyyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz', 'yyxxzz'])
++:call add(tl, [2, '\v((ab)+|c+)+', 'abcccaba', 'abcccab', 'ab', 'ab'])
++:call add(tl, [2, '\v((ab)|c*)+', 'abcccaba', 'abcccab', '', 'ab'])
++:call add(tl, [2, '\v(a(c*)+b)+', 'acbababaaa', 'acbabab', 'ab', ''])
++:call add(tl, [2, '\v(a|b*)+', 'aaaa', 'aaaa', ''])
++:"
++:" Test greedy-ness and lazy-ness
++:call add(tl, [2, 'a\{-2,7}','aaaaaaaaaaaaa', 'aa'])
++:call add(tl, [2, 'a\{-2,7}x','aaaaaaaaax', 'aaaaaaax'])
++:call add(tl, [2, 'a\{2,7}','aaaaaaaaaaaaaaaaaaaa', 'aaaaaaa'])
++:call add(tl, [2, 'a\{2,7}x','aaaaaaaaax', 'aaaaaaax'])
++:call add(tl, [2, '\vx(.{-,8})yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz','ayxa','xayzxayz'])
++:call add(tl, [2, '\vx(.*)yz(.*)','xayxayzxayzxayz','xayxayzxayzxayz', 'ayxayzxayzxa',''])
++:call add(tl, [2, '\v(a{1,2}){-2,3}','aaaaaaa','aaaa','aa'])
++:call add(tl, [2, '\v(a{-1,3})+','aa','aa','a'])
++:"
++:" Test Character classes
++:call add(tl, [2, '\d\+e\d\d','test 10e23 fd','10e23'])
++:"
++:" Test collections and character range []
++:call add(tl, [2, '\v[a]', 'abcd', 'a'])
++:call add(tl, [2, 'a[bcd]', 'abcd', 'ab'])
++:call add(tl, [2, 'a[b-d]', 'acbd', 'ac'])
++:call add(tl, [2, '[a-d][e-f][x-x]d', 'cexdxx', 'cexd'])
++:call add(tl, [2, '\v[[:alpha:]]+', 'abcdefghijklmnopqrstuvwxyz6','abcdefghijklmnopqrstuvwxyz'])
++:call add(tl, [2, '[[:alpha:]\+]', '6x8','x'])
++:call add(tl, [2, '[^abc]\+','abcabcabc'])
++:call add(tl, [2, '[^abc]','defghiasijvoinasoiunbvb','d'])
++:call add(tl, [2, '[^abc]\+','ddddddda','ddddddd'])
++:call add(tl, [2, '[^a-d]\+','aaaAAAZIHFNCddd','AAAZIHFNC'])
++:call add(tl, [2, '[a-f]*','iiiiiiii',''])
++:call add(tl, [2, '[a-f]*','abcdefgh','abcdef'])
++:call add(tl, [2, '[^a-f]\+','abcdefgh','gh'])
++:call add(tl, [2, '[a-c]\{-3,6}','abcabc','abc'])
++:call add(tl, [2, '[^[:alpha:]]\+','abcccadfoij7787ysf287yrnccdu','7787'])
++:call add(tl, [2, '[-a]', '-', '-'])
++:call add(tl, [2, '[a-]', '-', '-'])
++:" filename regexp
++:call add(tl, [2, '[-./[:alnum:]_~]\+', 'log13.file', 'log13.file'])
++:" special chars
++:call add(tl, [2, '[\]\^\-\\]\+', '\^\\\-\---^', '\^\\\-\---^'])
++:" collation elem
++:call add(tl, [2, '[[.a.]]\+', 'aa', 'aa'])
++:" middle of regexp
++:call add(tl, [2, 'abc[0-9]*ddd', 'siuhabc ii'])
++:call add(tl, [2, 'abc[0-9]*ddd', 'adf abc44482ddd oijs', 'abc44482ddd'])
++:call add(tl, [2, '\_[0-9]\+', 'asfi9888u', '9888'])
++:call add(tl, [2, '[0-9\n]\+', 'asfi9888u', '9888'])
++:call add(tl, [2, '\_[0-9]\+', "asfi\n9888u", "\n9888"])
++:call add(tl, [2, '\_f', "  \na ", "\n"])
++:call add(tl, [2, '\_f\+', "  \na ", "\na"])
++:call add(tl, [2, '[0-9A-Za-z-_.]\+', " @0_a.A-{ ", "0_a.A-"])
++:"
++:"""" Test start/end of line, start/end of file
++:call add(tl, [2, '^a.', "a_\nb ", "a_"])
++:call add(tl, [2, '^a.', "b a \na_"])
++:call add(tl, [2, '.a$', " a\n "])
++:call add(tl, [2, '.a$', " a b\n_a", "_a"])
++:call add(tl, [2, '\%^a.', "a a\na", "a "])
++:call add(tl, [2, '\%^a', " a \na "])
++:call add(tl, [2, '.a\%$', " a\n "])
++:call add(tl, [2, '.a\%$', " a\n_a", "_a"])
++:"
++:"""" Test recognition of some character classes
++:call add(tl, [2, '[0-9]', '8', '8'])
++:call add(tl, [2, '[^0-9]', '8'])
++:call add(tl, [2, '[0-9a-fA-F]*', '0a7', '0a7'])
++:call add(tl, [2, '[^0-9A-Fa-f]\+', '0a7'])
++:call add(tl, [2, '[a-z_A-Z0-9]\+', 'aso_sfoij', 'aso_sfoij'])
++:call add(tl, [2, '[a-z]', 'a', 'a'])
++:call add(tl, [2, '[a-zA-Z]', 'a', 'a'])
++:call add(tl, [2, '[A-Z]', 'a'])
++:call add(tl, [2, '\C[^A-Z]\+', 'ABCOIJDEOIFNSD jsfoij sa', ' jsfoij sa'])
++:"
++:"""" Tests for \z features
++:" match ends at \ze
++:call add(tl, [2, 'xx \ze test', 'xx '])
++:call add(tl, [2, 'abc\zeend', 'oij abcend', 'abc'])
++:call add(tl, [2, 'aa\zebb\|aaxx', ' aabb ', 'aa'])
++:call add(tl, [2, 'aa\zebb\|aaxx', ' aaxx ', 'aaxx'])
++:call add(tl, [2, 'aabb\|aa\zebb', ' aabb ', 'aabb'])
++:call add(tl, [2, 'aa\zebb\|aaebb', ' aabb ', 'aa'])
++:" match starts at \zs
++:call add(tl, [2, 'abc\zsdd', 'ddabcddxyzt', 'dd'])
++:call add(tl, [2, 'aa \zsax', ' ax'])
++:call add(tl, [2, 'abc \zsmatch\ze abc', 'abc abc abc match abc abc', 'match'])
++:call add(tl, [2, '\v(a \zsif .*){2}', 'a if then a if last', 'if last', 'a if last'])
++:call add(tl, [2, '\>\zs.', 'aword. ', '.'])
++:"
++:"""" Tests for \@= and \& features
++:call add(tl, [2, 'abc\@=', 'abc', 'ab'])
++:call add(tl, [2, 'abc\@=cd', 'abcd', 'abcd'])
++:call add(tl, [2, 'abc\@=', 'ababc', 'ab'])
++:" will never match, no matter the input text
++:call add(tl, [2, 'abcd\@=e', 'abcd'])
++:" will never match
++:call add(tl, [2, 'abcd\@=e', 'any text in here ... '])
++:call add(tl, [2, '\v(abc)@=..', 'xabcd', 'ab', 'abc'])
++:call add(tl, [2, '\(.*John\)\@=.*Bob', 'here is John, and here is B'])
++:call add(tl, [2, '\(John.*\)\@=.*Bob', 'John is Bobs friend', 'John is Bob', 'John is Bobs friend'])
++:call add(tl, [2, '\<\S\+\())\)\@=', '$((i=i+1))', 'i=i+1', '))'])
++:call add(tl, [2, '.*John\&.*Bob', 'here is John, and here is B'])
++:call add(tl, [2, '.*John\&.*Bob', 'John is Bobs friend', 'John is Bob'])
++:call add(tl, [2, '\v(test1)@=.*yep', 'this is a test1, yep it is', 'test1, yep', 'test1'])
++:call add(tl, [2, 'foo\(bar\)\@!', 'foobar'])
++:call add(tl, [2, 'foo\(bar\)\@!', 'foo bar', 'foo'])
++:call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if then else'])
++:call add(tl, [2, 'if \(\(then\)\@!.\)*$', ' if else ', 'if else ', ' '])
++:call add(tl, [2, '\(foo\)\@!bar', 'foobar', 'bar'])
++:call add(tl, [2, '\(foo\)\@!...bar', 'foobar'])
++:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' bar foo '])
++:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo bar '])
++:call add(tl, [2, '^\%(.*bar\)\@!.*\zsfoo', ' foo xxx ', 'foo'])
++:"
++:"""" Combining different tests and features
++:call add(tl, [2, '[[:alpha:]]\{-2,6}', '787abcdiuhsasiuhb4', 'ab'])
++:call add(tl, [2, '', 'abcd', ''])
++:call add(tl, [2, '\v(())', 'any possible text', ''])
++:call add(tl, [2, '\v%(ab(xyz)c)', '   abxyzc ', 'abxyzc', 'xyz'])
++:call add(tl, [2, '\v(test|)empty', 'tesempty', 'empty', ''])
++:call add(tl, [2, '\v(a|aa)(a|aa)', 'aaa', 'aa', 'a', 'a'])
++:"
++:"""" \%u and friends
++:call add(tl, [2, '\%d32', 'yes no', ' '])
++:call add(tl, [2, '\%o40', 'yes no', ' '])
++:call add(tl, [2, '\%x20', 'yes no', ' '])
++:call add(tl, [2, '\%u0020', 'yes no', ' '])
++:call add(tl, [2, '\%U00000020', 'yes no', ' '])
++:"
++:""""" \%[abc]
++:call add(tl, [2, 'foo\%[bar]', 'fobar'])
++:call add(tl, [2, 'foo\%[bar]', 'foobar', 'foobar'])
++:call add(tl, [2, 'foo\%[bar]', 'fooxx', 'foo'])
++:call add(tl, [2, 'foo\%[bar]', 'foobxx', 'foob'])
++:call add(tl, [2, 'foo\%[bar]', 'foobaxx', 'fooba'])
++:call add(tl, [2, 'foo\%[bar]', 'foobarxx', 'foobar'])
++:call add(tl, [2, 'foo\%[bar]x', 'foobxx', 'foobx'])
++:call add(tl, [2, 'foo\%[bar]x', 'foobarxx', 'foobarx'])
++:call add(tl, [2, '\%[bar]x', 'barxx', 'barx'])
++:call add(tl, [2, '\%[bar]x', 'bxx', 'bx'])
++:call add(tl, [2, '\%[bar]x', 'xxx', 'x'])
++:"
++:"""" Alternatives, must use first longest match
++:call add(tl, [2, 'goo\|go', 'google', 'goo'])
++:call add(tl, [2, '\<goo\|\<go', 'google', 'goo'])
++:call add(tl, [2, '\<goo\|go', 'google', 'goo'])
++:"
++:"""" Back references
++:call add(tl, [2, '\(\i\+\) \1', ' abc abc', 'abc abc', 'abc'])
++:call add(tl, [2, '\(\i\+\) \1', 'xgoo goox', 'goo goo', 'goo'])
++:call add(tl, [2, '\(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9', 'xabcddefghiabcddefghix', 'abcddefghiabcddefghi', 'a', 'b', 'c', 'dd', 'e', 'f', 'g', 'h', 'i'])
++:call add(tl, [2, '\(\d*\)a \1b', ' a b ', 'a b', ''])
++:"
++:"""" Look-behind with limit
++:call add(tl, [2, '<\@<=span.', 'xxspanxx<spanyyy', 'spany'])
++:call add(tl, [2, '<\@1<=span.', 'xxspanxx<spanyyy', 'spany'])
++:call add(tl, [2, '<\@2<=span.', 'xxspanxx<spanyyy', 'spany'])
++:call add(tl, [2, '\(<<\)\@<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<'])
++:call add(tl, [2, '\(<<\)\@1<=span.', 'xxspanxxxx<spanxx<<spanyyy'])
++:call add(tl, [2, '\(<<\)\@2<=span.', 'xxspanxxxx<spanxx<<spanyyy', 'spany', '<<'])
++:call add(tl, [2, '\(foo\)\@<!bar.', 'xx foobar1 xbar2 xx', 'bar2'])
++:"
++:""""" \@>
++:call add(tl, [2, '\(a*\)\@>a', 'aaaa'])
++:call add(tl, [2, '\(a*\)\@>b', 'aaab', 'aaab', 'aaa'])
++:" TODO: BT engine does not restore submatch after failure
++:call add(tl, [1, '\(a*\)\@>a\|a\+', 'aaaa', 'aaaa'])
++:"
++:"""" "\_" prepended negated collection matches EOL
++:call add(tl, [2, '\_[^8-9]\+', "asfi\n9888", "asfi\n"])
++:call add(tl, [2, '\_[^a]\+', "asfi\n9888", "sfi\n9888"])
++:"
++:"""" Requiring lots of states.
++:call add(tl, [2, '[0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}', " 12345678-1234-1234-1234-123456789012 ", "12345678-1234-1234-1234-123456789012", "1234-"])
++:"
+ :"
+-:call add(tl, ['\v(a*)+', 'aaaa', 'aaaa', ''])
+-:call add(tl, ['x', 'abcdef'])
++:"""" Run the tests
+ :"
+ :for t in tl
+-:  let l = matchlist(t[1], t[0])
++:  let re = t[0]
++:  let pat = t[1]
++:  let text = t[2]
++:  let matchidx = 3
++:  for engine in [0, 1, 2]
++:    if engine == 2 && re == 0 || engine == 1 && re ==1
++:      continue
++:    endif
++:    let &regexpengine = engine
++:    try
++:      let l = matchlist(text, pat)
++:    catch
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
++:    endtry
+ :" check the match itself
+-:  if len(l) == 0 && len(t) > 2
+-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", did not match, expected: \"' . t[2] . '\"'
+-:  elseif len(l) > 0 && len(t) == 2
+-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected no match'
+-:  elseif len(t) > 2 && l[0] != t[2]
+-:    $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", match: \"' . l[0] . '\", expected: \"' . t[2] . '\"'
+-:  else
+-:    $put ='OK'
+-:  endif
+-:  if len(l) > 0
++:    if len(l) == 0 && len(t) > matchidx
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
++:    elseif len(l) > 0 && len(t) == matchidx
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
++:    elseif len(t) > matchidx && l[0] != t[matchidx]
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
++:    else
++:      $put ='OK ' . engine . ' - ' . pat
++:    endif
++:    if len(l) > 0
+ :"   check all the nine submatches
+-:    for i in range(1, 9)
+-:      if len(t) <= i + 2
+-:        let e = ''
+-:      else
+-:        let e = t[i + 2]
+-:      endif
+-:      if l[i] != e
+-:        $put ='ERROR: pat: \"' . t[0] . '\", text: \"' . t[1] . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
+-:      endif
+-:    endfor
+-:    unlet i
+-:  endif
++:      for i in range(1, 9)
++:        if len(t) <= matchidx + i
++:          let e = ''
++:        else
++:          let e = t[matchidx + i]
++:        endif
++:        if l[i] != e
++:          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
++:        endif
++:      endfor
++:      unlet i
++:    endif
++:  endfor
+ :endfor
+ :unlet t tl e l
+-:/^Results/,$wq! test.out
++:"
++:" Check that \_[0-9] matching EOL does not break a following \>
++:" This only works on a buffer line, not with expression evaluation
++/^Find this
++/\%#=0\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
++y$Gop:"
++/^Find this
++/\%#=1\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
++y$Gop:"
++/^Find this
++/\%#=2\<\(\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\.\)\{3\}\(25\_[0-5]\|2\_[0-4]\_[0-9]\|\_[01]\?\_[0-9]\_[0-9]\?\)\>
++y$Gop:"
++:"
++:" Check that using a pattern on two lines doesn't get messed up by using
++:" matchstr() with \ze in between.
++:set re=0
++/^Substitute here
++:.+1,.+2s/""/\='"'.matchstr(getline("."), '\d\+\ze<').'"'
++/^Substitute here
++:.+1,.+2yank
++Gop:"
++:"
++:" Check a pattern with a line break matches in the right position.
++/^Multiline
++/\S.*\nx
++:.yank
++y$Gop:"
++:"
++:" Check a pattern with a look beind crossing a line boundary
++/^Behind:
++/\(<\_[xy]\+\)\@3<=start
++:.yank
++Gop:"
++:"
++:" Check matching Visual area
++/^Visual:
++jfxvfx:s/\%Ve/E/g
++jV:s/\%Va/A/g
++jfxfxj:s/\%Vo/O/g
++:/^Visual/+1,/^Visual/+4yank
++Gop:"
++:"
++:" Check matching marks
++/^Marks:
++jfSmsfEme:.-4,.+6s/.\%>'s.*\%<'e../here/
++jfSmsj0fEme:.-4,.+6s/.\%>'s\_.*\%<'e../again/
++:/^Marks:/+1,/^Marks:/+3yank
++Gop:"
++:"
++:" Check patterns matching cursor position.
++:func! Postest()
++ new
++ call setline(1, ['ffooooo', 'boboooo', 'zoooooo', 'koooooo', 'moooooo', "\t\t\tfoo", 'abababababababfoo', 'bababababababafoo', '********_'])
++ call setpos('.', [0, 1, 0, 0])
++ s/\%>3c.//g
++ call setpos('.', [0, 2, 4, 0])
++ s/\%#.*$//g
++ call setpos('.', [0, 3, 0, 0])
++ s/\%<3c./_/g
++ %s/\%4l\%>5c./_/g
++ %s/\%6l\%>25v./_/g
++ %s/\%>6l\%3c./!/g
++ %s/\%>7l\%12c./?/g
++ %s/\%>7l\%<9l\%>5v\%<8v./#/g
++ 1,$yank
++ quit!
++endfunc
++Go-0-:set re=0
++:call Postest()
++:put
++o-1-:set re=1
++:call Postest()
++:put
++o-2-:set re=2
++:call Postest()
++:put
++:"
++:" start and end of buffer
++/\%^
++yeGop:"
++50%/\%^..
++yeGopA END:"
++50%/\%$
++"ayb20gg/..\%$
++"bybGo"apo"bp:"
++:"
++:/\%#=1^Results/,$wq! test.out
+ ENDTEST
+ 
++Find this:
++localnet/192.168.0.1
++
++Substitute here:
++<T="">Ta 5</Title>
++<T="">Ac 7</Title>
++
++Multiline:
++abc
++def
++ghi
++xjk
++lmn
++
++Behind:
++asdfasd<yyy
++xxstart1
++asdfasd<yy
++xxxstart2
++asdfasd<yy
++xxstart3
++
++Visual:
++thexe the thexethe
++andaxand andaxand
++oooxofor foroxooo
++oooxofor foroxooo
++
++Marks:
++asdfSasdfsadfEasdf
++asdfSas
++dfsadfEasdf
++
+ Results of test64:
+diff -Naur vim73.orig/src/testdir/test64.ok vim73/src/testdir/test64.ok
+--- vim73.orig/src/testdir/test64.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test64.ok	2013-06-07 17:07:37.612234602 +0000
+@@ -1,102 +1,943 @@
+ Results of test64:
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
+-OK
++OK 0 - ab
++OK 1 - ab
++OK 2 - ab
++OK 0 - b
++OK 1 - b
++OK 2 - b
++OK 0 - bc*
++OK 1 - bc*
++OK 2 - bc*
++OK 0 - bc\{-}
++OK 1 - bc\{-}
++OK 2 - bc\{-}
++OK 0 - bc\{-}\(d\)
++OK 1 - bc\{-}\(d\)
++OK 2 - bc\{-}\(d\)
++OK 0 - bc*
++OK 1 - bc*
++OK 2 - bc*
++OK 0 - c*
++OK 1 - c*
++OK 2 - c*
++OK 0 - bc*
++OK 1 - bc*
++OK 2 - bc*
++OK 0 - c*
++OK 1 - c*
++OK 2 - c*
++OK 0 - bc\+
++OK 1 - bc\+
++OK 2 - bc\+
++OK 0 - bc\+
++OK 1 - bc\+
++OK 2 - bc\+
++OK 0 - a\|ab
++OK 1 - a\|ab
++OK 2 - a\|ab
++OK 0 - c\?
++OK 1 - c\?
++OK 2 - c\?
++OK 0 - bc\?
++OK 1 - bc\?
++OK 2 - bc\?
++OK 0 - bc\?
++OK 1 - bc\?
++OK 2 - bc\?
++OK 0 - \va{1}
++OK 1 - \va{1}
++OK 2 - \va{1}
++OK 0 - \va{2}
++OK 1 - \va{2}
++OK 2 - \va{2}
++OK 0 - \va{2}
++OK 1 - \va{2}
++OK 2 - \va{2}
++OK 0 - \va{2}
++OK 1 - \va{2}
++OK 2 - \va{2}
++OK 0 - \va{2}
++OK 1 - \va{2}
++OK 2 - \va{2}
++OK 0 - \va{2}
++OK 1 - \va{2}
++OK 2 - \va{2}
++OK 0 - \va{2}
++OK 1 - \va{2}
++OK 2 - \va{2}
++OK 0 - \vb{1}
++OK 1 - \vb{1}
++OK 2 - \vb{1}
++OK 0 - \vba{2}
++OK 1 - \vba{2}
++OK 2 - \vba{2}
++OK 0 - \vba{3}
++OK 1 - \vba{3}
++OK 2 - \vba{3}
++OK 0 - \v(ab){1}
++OK 1 - \v(ab){1}
++OK 2 - \v(ab){1}
++OK 0 - \v(ab){1}
++OK 1 - \v(ab){1}
++OK 2 - \v(ab){1}
++OK 0 - \v(ab){1}
++OK 1 - \v(ab){1}
++OK 2 - \v(ab){1}
++OK 0 - \v(ab){0,2}
++OK 1 - \v(ab){0,2}
++OK 2 - \v(ab){0,2}
++OK 0 - \v(ab){0,2}
++OK 1 - \v(ab){0,2}
++OK 2 - \v(ab){0,2}
++OK 0 - \v(ab){1,2}
++OK 1 - \v(ab){1,2}
++OK 2 - \v(ab){1,2}
++OK 0 - \v(ab){1,2}
++OK 1 - \v(ab){1,2}
++OK 2 - \v(ab){1,2}
++OK 0 - \v(ab){2,4}
++OK 1 - \v(ab){2,4}
++OK 2 - \v(ab){2,4}
++OK 0 - \v(ab){2,4}
++OK 1 - \v(ab){2,4}
++OK 2 - \v(ab){2,4}
++OK 0 - \v(ab){2}
++OK 1 - \v(ab){2}
++OK 2 - \v(ab){2}
++OK 0 - \v(ab){2}
++OK 1 - \v(ab){2}
++OK 2 - \v(ab){2}
++OK 0 - \v(ab){2}
++OK 1 - \v(ab){2}
++OK 2 - \v(ab){2}
++OK 0 - \v(ab){2}
++OK 1 - \v(ab){2}
++OK 2 - \v(ab){2}
++OK 0 - \v((ab){2}){2}
++OK 1 - \v((ab){2}){2}
++OK 2 - \v((ab){2}){2}
++OK 0 - \v((ab){2}){2}
++OK 1 - \v((ab){2}){2}
++OK 2 - \v((ab){2}){2}
++OK 0 - \v(a{1}){1}
++OK 1 - \v(a{1}){1}
++OK 2 - \v(a{1}){1}
++OK 0 - \v(a{2}){1}
++OK 1 - \v(a{2}){1}
++OK 2 - \v(a{2}){1}
++OK 0 - \v(a{2}){1}
++OK 1 - \v(a{2}){1}
++OK 2 - \v(a{2}){1}
++OK 0 - \v(a{2}){1}
++OK 1 - \v(a{2}){1}
++OK 2 - \v(a{2}){1}
++OK 0 - \v(a{1}){2}
++OK 1 - \v(a{1}){2}
++OK 2 - \v(a{1}){2}
++OK 0 - \v(a{1}){2}
++OK 1 - \v(a{1}){2}
++OK 2 - \v(a{1}){2}
++OK 0 - \v(a{2})+
++OK 1 - \v(a{2})+
++OK 2 - \v(a{2})+
++OK 0 - \v(a{2})+
++OK 1 - \v(a{2})+
++OK 2 - \v(a{2})+
++OK 0 - \v(a{2}){1}
++OK 1 - \v(a{2}){1}
++OK 2 - \v(a{2}){1}
++OK 0 - \v(a{1}){2}
++OK 1 - \v(a{1}){2}
++OK 2 - \v(a{1}){2}
++OK 0 - \v(a{1}){1}
++OK 1 - \v(a{1}){1}
++OK 2 - \v(a{1}){1}
++OK 0 - \v(a{2}){2}
++OK 1 - \v(a{2}){2}
++OK 2 - \v(a{2}){2}
++OK 0 - \v(a{2}){2}
++OK 1 - \v(a{2}){2}
++OK 2 - \v(a{2}){2}
++OK 0 - \v(a+){2}
++OK 1 - \v(a+){2}
++OK 2 - \v(a+){2}
++OK 0 - \v(a{3}){2}
++OK 1 - \v(a{3}){2}
++OK 2 - \v(a{3}){2}
++OK 0 - \v(a{1,2}){2}
++OK 1 - \v(a{1,2}){2}
++OK 2 - \v(a{1,2}){2}
++OK 0 - \v(a{1,3}){2}
++OK 1 - \v(a{1,3}){2}
++OK 2 - \v(a{1,3}){2}
++OK 0 - \v(a{1,3}){2}
++OK 1 - \v(a{1,3}){2}
++OK 2 - \v(a{1,3}){2}
++OK 0 - \v(a{1,3}){3}
++OK 1 - \v(a{1,3}){3}
++OK 2 - \v(a{1,3}){3}
++OK 0 - \v(a{1,2}){2}
++OK 1 - \v(a{1,2}){2}
++OK 2 - \v(a{1,2}){2}
++OK 0 - \v(a+)+
++OK 1 - \v(a+)+
++OK 2 - \v(a+)+
++OK 0 - \v(a+)+
++OK 1 - \v(a+)+
++OK 2 - \v(a+)+
++OK 0 - \v(a+){1,2}
++OK 1 - \v(a+){1,2}
++OK 2 - \v(a+){1,2}
++OK 0 - \v(a+)(a+)
++OK 1 - \v(a+)(a+)
++OK 2 - \v(a+)(a+)
++OK 0 - \v(a{3})+
++OK 1 - \v(a{3})+
++OK 2 - \v(a{3})+
++OK 0 - \v(a|b|c)+
++OK 1 - \v(a|b|c)+
++OK 2 - \v(a|b|c)+
++OK 0 - \v(a|b|c){2}
++OK 1 - \v(a|b|c){2}
++OK 2 - \v(a|b|c){2}
++OK 0 - \v(abc){2}
++OK 1 - \v(abc){2}
++OK 2 - \v(abc){2}
++OK 0 - \v(abc){2}
++OK 1 - \v(abc){2}
++OK 2 - \v(abc){2}
++OK 0 - a*
++OK 1 - a*
++OK 2 - a*
++OK 0 - \v(a*)+
++OK 1 - \v(a*)+
++OK 2 - \v(a*)+
++OK 0 - \v((ab)+)+
++OK 1 - \v((ab)+)+
++OK 2 - \v((ab)+)+
++OK 0 - \v(((ab)+)+)+
++OK 1 - \v(((ab)+)+)+
++OK 2 - \v(((ab)+)+)+
++OK 0 - \v(((ab)+)+)+
++OK 1 - \v(((ab)+)+)+
++OK 2 - \v(((ab)+)+)+
++OK 0 - \v(a{0,2})+
++OK 1 - \v(a{0,2})+
++OK 2 - \v(a{0,2})+
++OK 0 - \v(a*)+
++OK 1 - \v(a*)+
++OK 2 - \v(a*)+
++OK 0 - \v((a*)+)+
++OK 1 - \v((a*)+)+
++OK 2 - \v((a*)+)+
++OK 0 - \v((ab)*)+
++OK 1 - \v((ab)*)+
++OK 2 - \v((ab)*)+
++OK 0 - \va{1,3}
++OK 1 - \va{1,3}
++OK 2 - \va{1,3}
++OK 0 - \va{2,3}
++OK 1 - \va{2,3}
++OK 2 - \va{2,3}
++OK 0 - \v((ab)+|c*)+
++OK 1 - \v((ab)+|c*)+
++OK 2 - \v((ab)+|c*)+
++OK 0 - \v(a{2})|(b{3})
++OK 1 - \v(a{2})|(b{3})
++OK 2 - \v(a{2})|(b{3})
++OK 0 - \va{2}|b{2}
++OK 1 - \va{2}|b{2}
++OK 2 - \va{2}|b{2}
++OK 0 - \v(a)+|(c)+
++OK 1 - \v(a)+|(c)+
++OK 2 - \v(a)+|(c)+
++OK 0 - \vab{2,3}c
++OK 1 - \vab{2,3}c
++OK 2 - \vab{2,3}c
++OK 0 - \vab{2,3}c
++OK 1 - \vab{2,3}c
++OK 2 - \vab{2,3}c
++OK 0 - \vab{2,3}cd{2,3}e
++OK 1 - \vab{2,3}cd{2,3}e
++OK 2 - \vab{2,3}cd{2,3}e
++OK 0 - \va(bc){2}d
++OK 1 - \va(bc){2}d
++OK 2 - \va(bc){2}d
++OK 0 - \va*a{2}
++OK 1 - \va*a{2}
++OK 2 - \va*a{2}
++OK 0 - \va*a{2}
++OK 1 - \va*a{2}
++OK 2 - \va*a{2}
++OK 0 - \va*a{2}
++OK 1 - \va*a{2}
++OK 2 - \va*a{2}
++OK 0 - \va*a{2}
++OK 1 - \va*a{2}
++OK 2 - \va*a{2}
++OK 0 - \va*b*|a*c*
++OK 1 - \va*b*|a*c*
++OK 2 - \va*b*|a*c*
++OK 0 - \va{1}b{1}|a{1}b{1}
++OK 1 - \va{1}b{1}|a{1}b{1}
++OK 2 - \va{1}b{1}|a{1}b{1}
++OK 0 - \v(a)
++OK 1 - \v(a)
++OK 2 - \v(a)
++OK 0 - \v(a)(b)
++OK 1 - \v(a)(b)
++OK 2 - \v(a)(b)
++OK 0 - \v(ab)(b)(c)
++OK 1 - \v(ab)(b)(c)
++OK 2 - \v(ab)(b)(c)
++OK 0 - \v((a)(b))
++OK 1 - \v((a)(b))
++OK 2 - \v((a)(b))
++OK 0 - \v(a)|(b)
++OK 1 - \v(a)|(b)
++OK 2 - \v(a)|(b)
++OK 0 - \v(a*)+
++OK 1 - \v(a*)+
++OK 2 - \v(a*)+
++OK 0 - x
++OK 1 - x
++OK 2 - x
++OK 0 - ab
++OK 1 - ab
++OK 2 - ab
++OK 0 - ab
++OK 1 - ab
++OK 2 - ab
++OK 0 - ab
++OK 1 - ab
++OK 2 - ab
++OK 0 - x*
++OK 1 - x*
++OK 2 - x*
++OK 0 - x*
++OK 1 - x*
++OK 2 - x*
++OK 0 - x*
++OK 1 - x*
++OK 2 - x*
++OK 0 - x\+
++OK 1 - x\+
++OK 2 - x\+
++OK 0 - x\+
++OK 1 - x\+
++OK 2 - x\+
++OK 0 - x\+
++OK 1 - x\+
++OK 2 - x\+
++OK 0 - x\+
++OK 1 - x\+
++OK 2 - x\+
++OK 0 - x\=
++OK 1 - x\=
++OK 2 - x\=
++OK 0 - x\=
++OK 1 - x\=
++OK 2 - x\=
++OK 0 - x\=
++OK 1 - x\=
++OK 2 - x\=
++OK 0 - x\?
++OK 1 - x\?
++OK 2 - x\?
++OK 0 - x\?
++OK 1 - x\?
++OK 2 - x\?
++OK 0 - x\?
++OK 1 - x\?
++OK 2 - x\?
++OK 0 - a\{0,0}
++OK 1 - a\{0,0}
++OK 2 - a\{0,0}
++OK 0 - a\{0,1}
++OK 1 - a\{0,1}
++OK 2 - a\{0,1}
++OK 0 - a\{1,0}
++OK 1 - a\{1,0}
++OK 2 - a\{1,0}
++OK 0 - a\{3,6}
++OK 1 - a\{3,6}
++OK 2 - a\{3,6}
++OK 0 - a\{3,6}
++OK 1 - a\{3,6}
++OK 2 - a\{3,6}
++OK 0 - a\{3,6}
++OK 1 - a\{3,6}
++OK 2 - a\{3,6}
++OK 0 - a\{0}
++OK 1 - a\{0}
++OK 2 - a\{0}
++OK 0 - a\{2}
++OK 1 - a\{2}
++OK 2 - a\{2}
++OK 0 - a\{2}
++OK 1 - a\{2}
++OK 2 - a\{2}
++OK 0 - a\{2}
++OK 1 - a\{2}
++OK 2 - a\{2}
++OK 0 - a\{0,}
++OK 1 - a\{0,}
++OK 2 - a\{0,}
++OK 0 - a\{0,}
++OK 1 - a\{0,}
++OK 2 - a\{0,}
++OK 0 - a\{2,}
++OK 1 - a\{2,}
++OK 2 - a\{2,}
++OK 0 - a\{2,}
++OK 1 - a\{2,}
++OK 2 - a\{2,}
++OK 0 - a\{5,}
++OK 1 - a\{5,}
++OK 2 - a\{5,}
++OK 0 - a\{5,}
++OK 1 - a\{5,}
++OK 2 - a\{5,}
++OK 0 - a\{,0}
++OK 1 - a\{,0}
++OK 2 - a\{,0}
++OK 0 - a\{,5}
++OK 1 - a\{,5}
++OK 2 - a\{,5}
++OK 0 - a\{,5}
++OK 1 - a\{,5}
++OK 2 - a\{,5}
++OK 0 - ^*\{4,}$
++OK 1 - ^*\{4,}$
++OK 2 - ^*\{4,}$
++OK 0 - ^*\{4,}$
++OK 1 - ^*\{4,}$
++OK 2 - ^*\{4,}$
++OK 0 - ^*\{4,}$
++OK 1 - ^*\{4,}$
++OK 2 - ^*\{4,}$
++OK 0 - a\{}
++OK 1 - a\{}
++OK 2 - a\{}
++OK 0 - a\{}
++OK 1 - a\{}
++OK 2 - a\{}
++OK 0 - a\{-0,0}
++OK 1 - a\{-0,0}
++OK 2 - a\{-0,0}
++OK 0 - a\{-0,1}
++OK 1 - a\{-0,1}
++OK 2 - a\{-0,1}
++OK 0 - a\{-3,6}
++OK 1 - a\{-3,6}
++OK 2 - a\{-3,6}
++OK 0 - a\{-3,6}
++OK 1 - a\{-3,6}
++OK 2 - a\{-3,6}
++OK 0 - a\{-3,6}
++OK 1 - a\{-3,6}
++OK 2 - a\{-3,6}
++OK 0 - a\{-0}
++OK 1 - a\{-0}
++OK 2 - a\{-0}
++OK 0 - a\{-2}
++OK 1 - a\{-2}
++OK 2 - a\{-2}
++OK 0 - a\{-2}
++OK 1 - a\{-2}
++OK 2 - a\{-2}
++OK 0 - a\{-0,}
++OK 1 - a\{-0,}
++OK 2 - a\{-0,}
++OK 0 - a\{-0,}
++OK 1 - a\{-0,}
++OK 2 - a\{-0,}
++OK 0 - a\{-2,}
++OK 1 - a\{-2,}
++OK 2 - a\{-2,}
++OK 0 - a\{-2,}
++OK 1 - a\{-2,}
++OK 2 - a\{-2,}
++OK 0 - a\{-,0}
++OK 1 - a\{-,0}
++OK 2 - a\{-,0}
++OK 0 - a\{-,5}
++OK 1 - a\{-,5}
++OK 2 - a\{-,5}
++OK 0 - a\{-,5}
++OK 1 - a\{-,5}
++OK 2 - a\{-,5}
++OK 0 - a\{-}
++OK 1 - a\{-}
++OK 2 - a\{-}
++OK 0 - a\{-}
++OK 1 - a\{-}
++OK 2 - a\{-}
++OK 0 - \(abc\)*
++OK 1 - \(abc\)*
++OK 2 - \(abc\)*
++OK 0 - \(ab\)\+
++OK 1 - \(ab\)\+
++OK 2 - \(ab\)\+
++OK 0 - \(abaaaaa\)*cd
++OK 1 - \(abaaaaa\)*cd
++OK 2 - \(abaaaaa\)*cd
++OK 0 - \(test1\)\? \(test2\)\?
++OK 1 - \(test1\)\? \(test2\)\?
++OK 2 - \(test1\)\? \(test2\)\?
++OK 0 - \(test1\)\= \(test2\) \(test4443\)\=
++OK 1 - \(test1\)\= \(test2\) \(test4443\)\=
++OK 2 - \(test1\)\= \(test2\) \(test4443\)\=
++OK 0 - \(\(sub1\) hello \(sub 2\)\)
++OK 1 - \(\(sub1\) hello \(sub 2\)\)
++OK 2 - \(\(sub1\) hello \(sub 2\)\)
++OK 0 - \(\(\(yyxxzz\)\)\)
++OK 1 - \(\(\(yyxxzz\)\)\)
++OK 2 - \(\(\(yyxxzz\)\)\)
++OK 0 - \v((ab)+|c+)+
++OK 1 - \v((ab)+|c+)+
++OK 2 - \v((ab)+|c+)+
++OK 0 - \v((ab)|c*)+
++OK 1 - \v((ab)|c*)+
++OK 2 - \v((ab)|c*)+
++OK 0 - \v(a(c*)+b)+
++OK 1 - \v(a(c*)+b)+
++OK 2 - \v(a(c*)+b)+
++OK 0 - \v(a|b*)+
++OK 1 - \v(a|b*)+
++OK 2 - \v(a|b*)+
++OK 0 - a\{-2,7}
++OK 1 - a\{-2,7}
++OK 2 - a\{-2,7}
++OK 0 - a\{-2,7}x
++OK 1 - a\{-2,7}x
++OK 2 - a\{-2,7}x
++OK 0 - a\{2,7}
++OK 1 - a\{2,7}
++OK 2 - a\{2,7}
++OK 0 - a\{2,7}x
++OK 1 - a\{2,7}x
++OK 2 - a\{2,7}x
++OK 0 - \vx(.{-,8})yz(.*)
++OK 1 - \vx(.{-,8})yz(.*)
++OK 2 - \vx(.{-,8})yz(.*)
++OK 0 - \vx(.*)yz(.*)
++OK 1 - \vx(.*)yz(.*)
++OK 2 - \vx(.*)yz(.*)
++OK 0 - \v(a{1,2}){-2,3}
++OK 1 - \v(a{1,2}){-2,3}
++OK 2 - \v(a{1,2}){-2,3}
++OK 0 - \v(a{-1,3})+
++OK 1 - \v(a{-1,3})+
++OK 2 - \v(a{-1,3})+
++OK 0 - \d\+e\d\d
++OK 1 - \d\+e\d\d
++OK 2 - \d\+e\d\d
++OK 0 - \v[a]
++OK 1 - \v[a]
++OK 2 - \v[a]
++OK 0 - a[bcd]
++OK 1 - a[bcd]
++OK 2 - a[bcd]
++OK 0 - a[b-d]
++OK 1 - a[b-d]
++OK 2 - a[b-d]
++OK 0 - [a-d][e-f][x-x]d
++OK 1 - [a-d][e-f][x-x]d
++OK 2 - [a-d][e-f][x-x]d
++OK 0 - \v[[:alpha:]]+
++OK 1 - \v[[:alpha:]]+
++OK 2 - \v[[:alpha:]]+
++OK 0 - [[:alpha:]\+]
++OK 1 - [[:alpha:]\+]
++OK 2 - [[:alpha:]\+]
++OK 0 - [^abc]\+
++OK 1 - [^abc]\+
++OK 2 - [^abc]\+
++OK 0 - [^abc]
++OK 1 - [^abc]
++OK 2 - [^abc]
++OK 0 - [^abc]\+
++OK 1 - [^abc]\+
++OK 2 - [^abc]\+
++OK 0 - [^a-d]\+
++OK 1 - [^a-d]\+
++OK 2 - [^a-d]\+
++OK 0 - [a-f]*
++OK 1 - [a-f]*
++OK 2 - [a-f]*
++OK 0 - [a-f]*
++OK 1 - [a-f]*
++OK 2 - [a-f]*
++OK 0 - [^a-f]\+
++OK 1 - [^a-f]\+
++OK 2 - [^a-f]\+
++OK 0 - [a-c]\{-3,6}
++OK 1 - [a-c]\{-3,6}
++OK 2 - [a-c]\{-3,6}
++OK 0 - [^[:alpha:]]\+
++OK 1 - [^[:alpha:]]\+
++OK 2 - [^[:alpha:]]\+
++OK 0 - [-a]
++OK 1 - [-a]
++OK 2 - [-a]
++OK 0 - [a-]
++OK 1 - [a-]
++OK 2 - [a-]
++OK 0 - [-./[:alnum:]_~]\+
++OK 1 - [-./[:alnum:]_~]\+
++OK 2 - [-./[:alnum:]_~]\+
++OK 0 - [\]\^\-\\]\+
++OK 1 - [\]\^\-\\]\+
++OK 2 - [\]\^\-\\]\+
++OK 0 - [[.a.]]\+
++OK 1 - [[.a.]]\+
++OK 2 - [[.a.]]\+
++OK 0 - abc[0-9]*ddd
++OK 1 - abc[0-9]*ddd
++OK 2 - abc[0-9]*ddd
++OK 0 - abc[0-9]*ddd
++OK 1 - abc[0-9]*ddd
++OK 2 - abc[0-9]*ddd
++OK 0 - \_[0-9]\+
++OK 1 - \_[0-9]\+
++OK 2 - \_[0-9]\+
++OK 0 - [0-9\n]\+
++OK 1 - [0-9\n]\+
++OK 2 - [0-9\n]\+
++OK 0 - \_[0-9]\+
++OK 1 - \_[0-9]\+
++OK 2 - \_[0-9]\+
++OK 0 - \_f
++OK 1 - \_f
++OK 2 - \_f
++OK 0 - \_f\+
++OK 1 - \_f\+
++OK 2 - \_f\+
++OK 0 - [0-9A-Za-z-_.]\+
++OK 1 - [0-9A-Za-z-_.]\+
++OK 2 - [0-9A-Za-z-_.]\+
++OK 0 - ^a.
++OK 1 - ^a.
++OK 2 - ^a.
++OK 0 - ^a.
++OK 1 - ^a.
++OK 2 - ^a.
++OK 0 - .a$
++OK 1 - .a$
++OK 2 - .a$
++OK 0 - .a$
++OK 1 - .a$
++OK 2 - .a$
++OK 0 - \%^a.
++OK 1 - \%^a.
++OK 2 - \%^a.
++OK 0 - \%^a
++OK 1 - \%^a
++OK 2 - \%^a
++OK 0 - .a\%$
++OK 1 - .a\%$
++OK 2 - .a\%$
++OK 0 - .a\%$
++OK 1 - .a\%$
++OK 2 - .a\%$
++OK 0 - [0-9]
++OK 1 - [0-9]
++OK 2 - [0-9]
++OK 0 - [^0-9]
++OK 1 - [^0-9]
++OK 2 - [^0-9]
++OK 0 - [0-9a-fA-F]*
++OK 1 - [0-9a-fA-F]*
++OK 2 - [0-9a-fA-F]*
++OK 0 - [^0-9A-Fa-f]\+
++OK 1 - [^0-9A-Fa-f]\+
++OK 2 - [^0-9A-Fa-f]\+
++OK 0 - [a-z_A-Z0-9]\+
++OK 1 - [a-z_A-Z0-9]\+
++OK 2 - [a-z_A-Z0-9]\+
++OK 0 - [a-z]
++OK 1 - [a-z]
++OK 2 - [a-z]
++OK 0 - [a-zA-Z]
++OK 1 - [a-zA-Z]
++OK 2 - [a-zA-Z]
++OK 0 - [A-Z]
++OK 1 - [A-Z]
++OK 2 - [A-Z]
++OK 0 - \C[^A-Z]\+
++OK 1 - \C[^A-Z]\+
++OK 2 - \C[^A-Z]\+
++OK 0 - xx \ze test
++OK 1 - xx \ze test
++OK 2 - xx \ze test
++OK 0 - abc\zeend
++OK 1 - abc\zeend
++OK 2 - abc\zeend
++OK 0 - aa\zebb\|aaxx
++OK 1 - aa\zebb\|aaxx
++OK 2 - aa\zebb\|aaxx
++OK 0 - aa\zebb\|aaxx
++OK 1 - aa\zebb\|aaxx
++OK 2 - aa\zebb\|aaxx
++OK 0 - aabb\|aa\zebb
++OK 1 - aabb\|aa\zebb
++OK 2 - aabb\|aa\zebb
++OK 0 - aa\zebb\|aaebb
++OK 1 - aa\zebb\|aaebb
++OK 2 - aa\zebb\|aaebb
++OK 0 - abc\zsdd
++OK 1 - abc\zsdd
++OK 2 - abc\zsdd
++OK 0 - aa \zsax
++OK 1 - aa \zsax
++OK 2 - aa \zsax
++OK 0 - abc \zsmatch\ze abc
++OK 1 - abc \zsmatch\ze abc
++OK 2 - abc \zsmatch\ze abc
++OK 0 - \v(a \zsif .*){2}
++OK 1 - \v(a \zsif .*){2}
++OK 2 - \v(a \zsif .*){2}
++OK 0 - \>\zs.
++OK 1 - \>\zs.
++OK 2 - \>\zs.
++OK 0 - abc\@=
++OK 1 - abc\@=
++OK 2 - abc\@=
++OK 0 - abc\@=cd
++OK 1 - abc\@=cd
++OK 2 - abc\@=cd
++OK 0 - abc\@=
++OK 1 - abc\@=
++OK 2 - abc\@=
++OK 0 - abcd\@=e
++OK 1 - abcd\@=e
++OK 2 - abcd\@=e
++OK 0 - abcd\@=e
++OK 1 - abcd\@=e
++OK 2 - abcd\@=e
++OK 0 - \v(abc)@=..
++OK 1 - \v(abc)@=..
++OK 2 - \v(abc)@=..
++OK 0 - \(.*John\)\@=.*Bob
++OK 1 - \(.*John\)\@=.*Bob
++OK 2 - \(.*John\)\@=.*Bob
++OK 0 - \(John.*\)\@=.*Bob
++OK 1 - \(John.*\)\@=.*Bob
++OK 2 - \(John.*\)\@=.*Bob
++OK 0 - \<\S\+\())\)\@=
++OK 1 - \<\S\+\())\)\@=
++OK 2 - \<\S\+\())\)\@=
++OK 0 - .*John\&.*Bob
++OK 1 - .*John\&.*Bob
++OK 2 - .*John\&.*Bob
++OK 0 - .*John\&.*Bob
++OK 1 - .*John\&.*Bob
++OK 2 - .*John\&.*Bob
++OK 0 - \v(test1)@=.*yep
++OK 1 - \v(test1)@=.*yep
++OK 2 - \v(test1)@=.*yep
++OK 0 - foo\(bar\)\@!
++OK 1 - foo\(bar\)\@!
++OK 2 - foo\(bar\)\@!
++OK 0 - foo\(bar\)\@!
++OK 1 - foo\(bar\)\@!
++OK 2 - foo\(bar\)\@!
++OK 0 - if \(\(then\)\@!.\)*$
++OK 1 - if \(\(then\)\@!.\)*$
++OK 2 - if \(\(then\)\@!.\)*$
++OK 0 - if \(\(then\)\@!.\)*$
++OK 1 - if \(\(then\)\@!.\)*$
++OK 2 - if \(\(then\)\@!.\)*$
++OK 0 - \(foo\)\@!bar
++OK 1 - \(foo\)\@!bar
++OK 2 - \(foo\)\@!bar
++OK 0 - \(foo\)\@!...bar
++OK 1 - \(foo\)\@!...bar
++OK 2 - \(foo\)\@!...bar
++OK 0 - ^\%(.*bar\)\@!.*\zsfoo
++OK 1 - ^\%(.*bar\)\@!.*\zsfoo
++OK 2 - ^\%(.*bar\)\@!.*\zsfoo
++OK 0 - ^\%(.*bar\)\@!.*\zsfoo
++OK 1 - ^\%(.*bar\)\@!.*\zsfoo
++OK 2 - ^\%(.*bar\)\@!.*\zsfoo
++OK 0 - ^\%(.*bar\)\@!.*\zsfoo
++OK 1 - ^\%(.*bar\)\@!.*\zsfoo
++OK 2 - ^\%(.*bar\)\@!.*\zsfoo
++OK 0 - [[:alpha:]]\{-2,6}
++OK 1 - [[:alpha:]]\{-2,6}
++OK 2 - [[:alpha:]]\{-2,6}
++OK 0 - 
++OK 1 - 
++OK 2 - 
++OK 0 - \v(())
++OK 1 - \v(())
++OK 2 - \v(())
++OK 0 - \v%(ab(xyz)c)
++OK 1 - \v%(ab(xyz)c)
++OK 2 - \v%(ab(xyz)c)
++OK 0 - \v(test|)empty
++OK 1 - \v(test|)empty
++OK 2 - \v(test|)empty
++OK 0 - \v(a|aa)(a|aa)
++OK 1 - \v(a|aa)(a|aa)
++OK 2 - \v(a|aa)(a|aa)
++OK 0 - \%d32
++OK 1 - \%d32
++OK 2 - \%d32
++OK 0 - \%o40
++OK 1 - \%o40
++OK 2 - \%o40
++OK 0 - \%x20
++OK 1 - \%x20
++OK 2 - \%x20
++OK 0 - \%u0020
++OK 1 - \%u0020
++OK 2 - \%u0020
++OK 0 - \%U00000020
++OK 1 - \%U00000020
++OK 2 - \%U00000020
++OK 0 - foo\%[bar]
++OK 1 - foo\%[bar]
++OK 2 - foo\%[bar]
++OK 0 - foo\%[bar]
++OK 1 - foo\%[bar]
++OK 2 - foo\%[bar]
++OK 0 - foo\%[bar]
++OK 1 - foo\%[bar]
++OK 2 - foo\%[bar]
++OK 0 - foo\%[bar]
++OK 1 - foo\%[bar]
++OK 2 - foo\%[bar]
++OK 0 - foo\%[bar]
++OK 1 - foo\%[bar]
++OK 2 - foo\%[bar]
++OK 0 - foo\%[bar]
++OK 1 - foo\%[bar]
++OK 2 - foo\%[bar]
++OK 0 - foo\%[bar]x
++OK 1 - foo\%[bar]x
++OK 2 - foo\%[bar]x
++OK 0 - foo\%[bar]x
++OK 1 - foo\%[bar]x
++OK 2 - foo\%[bar]x
++OK 0 - \%[bar]x
++OK 1 - \%[bar]x
++OK 2 - \%[bar]x
++OK 0 - \%[bar]x
++OK 1 - \%[bar]x
++OK 2 - \%[bar]x
++OK 0 - \%[bar]x
++OK 1 - \%[bar]x
++OK 2 - \%[bar]x
++OK 0 - goo\|go
++OK 1 - goo\|go
++OK 2 - goo\|go
++OK 0 - \<goo\|\<go
++OK 1 - \<goo\|\<go
++OK 2 - \<goo\|\<go
++OK 0 - \<goo\|go
++OK 1 - \<goo\|go
++OK 2 - \<goo\|go
++OK 0 - \(\i\+\) \1
++OK 1 - \(\i\+\) \1
++OK 2 - \(\i\+\) \1
++OK 0 - \(\i\+\) \1
++OK 1 - \(\i\+\) \1
++OK 2 - \(\i\+\) \1
++OK 0 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
++OK 1 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
++OK 2 - \(a\)\(b\)\(c\)\(dd\)\(e\)\(f\)\(g\)\(h\)\(i\)\1\2\3\4\5\6\7\8\9
++OK 0 - \(\d*\)a \1b
++OK 1 - \(\d*\)a \1b
++OK 2 - \(\d*\)a \1b
++OK 0 - <\@<=span.
++OK 1 - <\@<=span.
++OK 2 - <\@<=span.
++OK 0 - <\@1<=span.
++OK 1 - <\@1<=span.
++OK 2 - <\@1<=span.
++OK 0 - <\@2<=span.
++OK 1 - <\@2<=span.
++OK 2 - <\@2<=span.
++OK 0 - \(<<\)\@<=span.
++OK 1 - \(<<\)\@<=span.
++OK 2 - \(<<\)\@<=span.
++OK 0 - \(<<\)\@1<=span.
++OK 1 - \(<<\)\@1<=span.
++OK 2 - \(<<\)\@1<=span.
++OK 0 - \(<<\)\@2<=span.
++OK 1 - \(<<\)\@2<=span.
++OK 2 - \(<<\)\@2<=span.
++OK 0 - \(foo\)\@<!bar.
++OK 1 - \(foo\)\@<!bar.
++OK 2 - \(foo\)\@<!bar.
++OK 0 - \(a*\)\@>a
++OK 1 - \(a*\)\@>a
++OK 2 - \(a*\)\@>a
++OK 0 - \(a*\)\@>b
++OK 1 - \(a*\)\@>b
++OK 2 - \(a*\)\@>b
++OK 0 - \(a*\)\@>a\|a\+
++OK 2 - \(a*\)\@>a\|a\+
++OK 0 - \_[^8-9]\+
++OK 1 - \_[^8-9]\+
++OK 2 - \_[^8-9]\+
++OK 0 - \_[^a]\+
++OK 1 - \_[^a]\+
++OK 2 - \_[^a]\+
++OK 0 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
++OK 1 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
++OK 2 - [0-9a-zA-Z]\{8}-\([0-9a-zA-Z]\{4}-\)\{3}[0-9a-zA-Z]\{12}
++192.168.0.1
++192.168.0.1
++192.168.0.1
++
++<T="5">Ta 5</Title>
++<T="7">Ac 7</Title>
++ghi
++
++xxstart3
++
++thexE thE thExethe
++AndAxAnd AndAxAnd
++oooxOfOr fOrOxooo
++oooxOfOr fOrOxooo
++
++asdfhereasdf
++asdfagainasdf
++
++-0-
++ffo
++bob
++__ooooo
++koooo__
++moooooo
++			f__
++ab!babababababfoo
++ba!ab##abab?bafoo
++**!*****_
++-1-
++ffo
++bob
++__ooooo
++koooo__
++moooooo
++			f__
++ab!babababababfoo
++ba!ab##abab?bafoo
++**!*****_
++-2-
++ffo
++bob
++__ooooo
++koooo__
++moooooo
++			f__
++ab!babababababfoo
++ba!ab##abab?bafoo
++**!*****_
++Test
++Test END
++EN
++E
+diff -Naur vim73.orig/src/testdir/test65.in vim73/src/testdir/test65.in
+--- vim73.orig/src/testdir/test65.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test65.in	2013-06-07 17:07:37.642234517 +0000
+@@ -1,4 +1,4 @@
+-Test for floating point.
++Test for floating point and logical operators.
+ 
+ STARTTEST
+ :so small.vim
+@@ -72,6 +72,23 @@
+ :$put ='float2nr'
+ :$put =float2nr(123.456)
+ :$put =float2nr(-123.456)
++:$put ='AND'
++:$put =and(127, 127)
++:$put =and(127, 16)
++:$put =and(127, 128)
++:$put ='OR'
++:$put =or(16, 7)
++:$put =or(8, 7)
++:$put =or(0, 123)
++:$put ='XOR'
++:$put =xor(127, 127)
++:$put =xor(127, 16)
++:$put =xor(127, 128)
++:$put ='invert'
++:$put =and(invert(127), 65535)
++:$put =and(invert(16), 65535)
++:$put =and(invert(128), 65535)
++:$put =invert(1.0)
+ :/^Results/,$wq! test.out
+ ENDTEST
+ 
+diff -Naur vim73.orig/src/testdir/test65.ok vim73/src/testdir/test65.ok
+--- vim73.orig/src/testdir/test65.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test65.ok	2013-06-07 17:07:37.648901164 +0000
+@@ -54,3 +54,20 @@
+ float2nr
+ 123
+ -123
++AND
++127
++16
++0
++OR
++23
++15
++123
++XOR
++0
++111
++255
++invert
++65408
++65519
++65407
++0
+diff -Naur vim73.orig/src/testdir/test66.in vim73/src/testdir/test66.in
+--- vim73.orig/src/testdir/test66.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test66.in	2013-06-07 17:07:37.665567783 +0000
+@@ -3,12 +3,14 @@
+ 
+ STARTTEST
+ :so small.vim
++/^one
++fe4jRugvr1:'<,'>w! test.out
+ /^abcdefgh
+ 4jI    j<<11|D
+ 7|a		
+ 7|a		   
+ 7|a	       	4k13|4j<
+-:$-4,$w! test.out
++:$-5,$w >> test.out
+ :$-4,$s/\s\+//g
+ 4kI    j<<
+ 7|a		
+@@ -18,6 +20,12 @@
+ :qa!
+ ENDTEST
+ 
++one two three
++one two three
++one two three
++one two three
++one two three
++
+ abcdefghijklmnopqrstuvwxyz
+ abcdefghijklmnopqrstuvwxyz
+ abcdefghijklmnopqrstuvwxyz
+diff -Naur vim73.orig/src/testdir/test66.ok vim73/src/testdir/test66.ok
+--- vim73.orig/src/testdir/test66.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test66.ok	2013-06-07 17:07:37.678901079 +0000
+@@ -1,3 +1,9 @@
++on1 two three
++on1 two three
++on1 two three
++on1 two three
++on1 two three
++
+     abcdefghijklmnopqrstuvwxyz
+ abcdefghij
+     abc	    defghijklmnopqrstuvwxyz
+diff -Naur vim73.orig/src/testdir/test68.in vim73/src/testdir/test68.in
+--- vim73.orig/src/testdir/test68.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test68.in	2013-06-07 17:07:37.712234317 +0000
+@@ -51,6 +51,67 @@
+ }
+ 
+ STARTTEST
++/^{/+1
++:set tw=5 fo=tcn comments=:#
++A bjA b
++ENDTEST
++
++{
++  1 a
++# 1 a
++}
++
++STARTTEST
++/^{/+1
++:set tw=5 fo=qn comments=:#
++gwap
++ENDTEST
++
++{
++# 1 a b
++}
++
++STARTTEST
++/^{/+1
++:set tw=5 fo=q2 comments=:#
++gwap
++ENDTEST
++
++{
++# x
++#   a b
++}
++
++STARTTEST
++/^{/+2
++:set tw& fo=a
++I^^
++ENDTEST
++
++{
++   1aa
++   2bb
++}
++
++STARTTEST
++/mno pqr/
++:setl tw=20 fo=an12wcq comments=s1:/*,mb:*,ex:*/
++A vwx yz
++ENDTEST
++
++/* abc def ghi jkl 
++ *    mno pqr stu
++ */
++
++STARTTEST
++/^#/
++:setl tw=12 fo=tqnc comments=:#
++A foobar
++ENDTEST
++
++# 1 xxxxx
++
++STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/^Results/,$wq! test.out
+ ENDTEST
+diff -Naur vim73.orig/src/testdir/test68.ok vim73/src/testdir/test68.ok
+--- vim73.orig/src/testdir/test68.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test68.ok	2013-06-07 17:07:37.725567612 +0000
+@@ -33,3 +33,36 @@
+ #a b
+ }
+ 
++
++{
++  1 a
++    b
++# 1 a
++#   b
++}
++
++
++{
++# 1 a
++#   b
++}
++
++
++{
++# x a
++#   b
++}
++
++
++{ 1aa ^^2bb }
++
++
++/* abc def ghi jkl 
++ *    mno pqr stu 
++ *    vwx yz
++ */
++
++
++# 1 xxxxx
++#   foobar
++
+diff -Naur vim73.orig/src/testdir/test69.in vim73/src/testdir/test69.in
+--- vim73.orig/src/testdir/test69.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test69.in	2013-06-07 17:07:37.735567583 +0000
+@@ -1,4 +1,6 @@
+ Test for multi-byte text formatting.
++Also test, that 'mps' with multibyte chars works.
++And test "ra" on multi-byte characters.
+ 
+ STARTTEST
+ :so mbyte.vim
+@@ -134,6 +136,24 @@
+ }
+ 
+ STARTTEST
++/^{/+1
++:set mps+=u2018:u2019
++d%
++ENDTEST
++
++{
++â two three â four
++}
++STARTTEST
++/^ra test
++jVjra
++ENDTEST
++
++ra test
++ïœbbïœ
++ïœïœb
++
++STARTTEST
+ :g/^STARTTEST/.,/^ENDTEST/d
+ :1;/^Results/,$wq! test.out
+ ENDTEST
+diff -Naur vim73.orig/src/testdir/test69.ok vim73/src/testdir/test69.ok
+--- vim73.orig/src/testdir/test69.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test69.ok	2013-06-07 17:07:37.742234231 +0000
+@@ -140,3 +140,12 @@
+ a
+ }
+ 
++
++{
++ four
++}
++
++ra test
++aaaa
++aaa
++
+diff -Naur vim73.orig/src/testdir/test70.in vim73/src/testdir/test70.in
+--- vim73.orig/src/testdir/test70.in	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test70.in	2013-06-07 17:07:37.772234145 +0000
+@@ -41,9 +41,19 @@
+ :if l2[2] == l2
+ :let res = "OK"
+ :else
+-:let res = "FAILED"
++:let res = "FAILED: " . l2[2]
+ :endif
+ :call setline(search("^3"), "circular test " . res)
++:" funcrefs
++:mz (define vim:max (vim-eval "function('max')"))
++:mz (define m (vim:max '(1 100 8)))
++:let m = mzeval('m')
++:if m == 100
++:let fref_res = "OK"
++:else
++:let fref_res = "FAILED: " . m
++:end
++:call append(line('$'), 'funcrefs '. fref_res)
+ :?^1?,$w! test.out
+ :qa!
+ ENDTEST
+diff -Naur vim73.orig/src/testdir/test70.ok vim73/src/testdir/test70.ok
+--- vim73.orig/src/testdir/test70.ok	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/testdir/test70.ok	2013-06-07 17:07:37.785567441 +0000
+@@ -3,3 +3,4 @@
+ 2 line 2
+ dictionary with list OK
+ circular test OK
++funcrefs OK
+diff -Naur vim73.orig/src/testdir/test72.in vim73/src/testdir/test72.in
+--- vim73.orig/src/testdir/test72.in	2010-08-07 11:26:43.000000000 +0000
++++ vim73/src/testdir/test72.in	2013-06-07 17:07:37.812234031 +0000
+@@ -51,6 +51,12 @@
+ :e Xtestfile
+ uuu:w >>test.out
+ :"
++:" Test that reading the undofiles when setting undofile works
++:set noundofile ul=0
++i
++u:e! Xtestfile
++:set undofile ul=100
++uuuuuu:w >>test.out
+ :" And now with encryption, cryptmethod=zip
+ :e! Xtestfile
+ :set undofile cm=zip
+diff -Naur vim73.orig/src/testdir/test72.ok vim73/src/testdir/test72.ok
+--- vim73.orig/src/testdir/test72.ok	2010-05-30 20:39:12.000000000 +0000
++++ vim73/src/testdir/test72.ok	2013-06-07 17:07:37.815567355 +0000
+@@ -7,6 +7,16 @@
+ eight
+ nine
+ ten
++one
++two
++three
++four
++five
++six
++seven
++eight
++nine
++ten
+ monday
+ wednesday
+ thursday
+diff -Naur vim73.orig/src/testdir/test73.in vim73/src/testdir/test73.in
+--- vim73.orig/src/testdir/test73.in	2010-08-15 11:02:37.000000000 +0000
++++ vim73/src/testdir/test73.in	2013-06-07 17:07:37.825567326 +0000
+@@ -158,6 +158,16 @@
+ :" Find the file containing 'E.T.' in the Xfind/in/path directory
+ :find file	
+ :exec "w >>" . test_out
++:"
++:" Test that completion works when path=.,,
++:"
++:set path=.,,
++:" Open Jimmy Hoffa file
++:e in/file.txt
++:exec "w >>" . test_out
++:" Search for the file containing Holy Grail in same directory as in/path.txt
++:find stu	
++:exec "w >>" . test_out
+ :q
+ :exec "cd " . cwd
+ :call DeleteDirectory("Xfind")
+diff -Naur vim73.orig/src/testdir/test73.ok vim73/src/testdir/test73.ok
+--- vim73.orig/src/testdir/test73.ok	2010-08-15 11:02:37.000000000 +0000
++++ vim73/src/testdir/test73.ok	2013-06-07 17:07:37.835567298 +0000
+@@ -17,3 +17,5 @@
+ Voyager 2
+ Jimmy Hoffa
+ E.T.
++Jimmy Hoffa
++Another Holy Grail
+diff -Naur vim73.orig/src/testdir/test74.in vim73/src/testdir/test74.in
+--- vim73.orig/src/testdir/test74.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test74.in	2013-06-07 17:07:37.842233945 +0000
+@@ -0,0 +1,36 @@
++" Tests for storing global variables in the .viminfo file vim: set ft=vim:
++
++STARTTEST
++:so small.vim
++:" Do all test in a separate window to avoid E211 when we recursively
++:" delete the Xfind directory during cleanup
++:"
++:" This will cause a few errors, do it silently.
++:set visualbell
++:set nocp viminfo+=!,nviminfo
++:let MY_GLOBAL_DICT={'foo': 1, 'bar': 0, 'longvarible': 1000}
++:" store a really long list, so line wrapping will occur in viminfo file
++:let MY_GLOBAL_LIST=range(1,100)
++:wv! Xviminfo
++:unlet MY_GLOBAL_DICT
++:unlet MY_GLOBAL_LIST
++:rv! Xviminfo
++:call delete('Xviminfo')
++:if exists("MY_GLOBAL_DICT")
++:redir >> test.out
++:echo MY_GLOBAL_DICT
++:redir end
++:endif
++:if exists("MY_GLOBAL_LIST")
++:redir >> test.out
++:echo MY_GLOBAL_LIST
++:redir end
++:endif
++:redir >> test.out
++:echo "foobar"
++:redir end
++:endif
++:qa!
++ENDTEST
++
++eof
+diff -Naur vim73.orig/src/testdir/test74.ok vim73/src/testdir/test74.ok
+--- vim73.orig/src/testdir/test74.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test74.ok	2013-06-07 17:07:37.868900536 +0000
+@@ -0,0 +1,5 @@
++
++{'foo': 1, 'longvarible': 1000, 'bar': 0}
++[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100]
++
++foobar
+diff -Naur vim73.orig/src/testdir/test75.in vim73/src/testdir/test75.in
+--- vim73.orig/src/testdir/test75.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test75.in	2013-06-07 17:07:37.882233831 +0000
+@@ -0,0 +1,22 @@
++" Tests for functions.
++
++STARTTEST
++:so small.vim
++:set cpo-=<
++:" Test maparg() with a string result
++:map foo<C-V> is<F4>foo
++:vnoremap <script> <buffer> <expr> <silent> bar isbar
++:call append('$', maparg('foo<C-V>'))
++:call append('$', string(maparg('foo<C-V>', '', 0, 1)))
++:call append('$', string(maparg('bar', '', 0, 1)))
++:"
++:map abc x<char-114>x
++:call append('$', maparg('abc'))
++:map abc y<S-char-114>y
++:call append('$', maparg('abc'))
++:"
++:/^eof/+1,$w! test.out
++:qa!
++ENDTEST
++
++eof
+diff -Naur vim73.orig/src/testdir/test75.ok vim73/src/testdir/test75.ok
+--- vim73.orig/src/testdir/test75.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test75.ok	2013-06-07 17:07:37.912233745 +0000
+@@ -0,0 +1,5 @@
++is<F4>foo
++{'silent': 0, 'noremap': 0, 'lhs': 'foo<C-V>', 'mode': ' ', 'expr': 0, 'sid': 0, 'rhs': 'is<F4>foo', 'buffer': 0}
++{'silent': 1, 'noremap': 1, 'lhs': 'bar', 'mode': 'v', 'expr': 1, 'sid': 0, 'rhs': 'isbar', 'buffer': 1}
++xrx
++yRy
+diff -Naur vim73.orig/src/testdir/test76.in vim73/src/testdir/test76.in
+--- vim73.orig/src/testdir/test76.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test76.in	2013-06-07 17:07:37.925567041 +0000
+@@ -0,0 +1,46 @@
++Tests for completefunc/omnifunc. vim: set ft=vim :
++
++STARTTEST
++:"Test that nothing happens if the 'completefunc' opens
++:"a new window (no completion, no crash)
++:so small.vim
++:function! DummyCompleteOne(findstart, base)
++:  if a:findstart
++:    return 0
++:  else
++:    wincmd n
++:    return ['onedef', 'oneDEF']
++:  endif
++:endfunction
++:setlocal completefunc=DummyCompleteOne
++/^one
++A:q!
++:function! DummyCompleteTwo(findstart, base)
++:  if a:findstart
++:    wincmd n
++:    return 0
++:  else
++:    return ['twodef', 'twoDEF']
++:  endif
++:endfunction
++:setlocal completefunc=DummyCompleteTwo
++/^two
++A:q!
++:"Test that 'completefunc' works when it's OK.
++:function! DummyCompleteThree(findstart, base)
++:  if a:findstart
++:    return 0
++:  else
++:    return ['threedef', 'threeDEF']
++:  endif
++:endfunction
++:setlocal completefunc=DummyCompleteThree
++/^three
++A:/^+++/,/^three/w! test.out
++:qa!
++ENDTEST
++
+++++
++one
++two
++three
+diff -Naur vim73.orig/src/testdir/test76.ok vim73/src/testdir/test76.ok
+--- vim73.orig/src/testdir/test76.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test76.ok	2013-06-07 17:07:37.942233660 +0000
+@@ -0,0 +1,4 @@
+++++
++
++two
++threeDEF
+diff -Naur vim73.orig/src/testdir/test77.in vim73/src/testdir/test77.in
+--- vim73.orig/src/testdir/test77.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test77.in	2013-06-07 17:07:37.958900279 +0000
+@@ -0,0 +1,29 @@
++Inserts 2 million lines with consecutive integers starting from 1
++(essentially, the output of GNU's seq 1 2000000), writes them to Xtest
++and writes its cksum to test.out.
++
++We need 2 million lines to trigger a call to mf_hash_grow().  If it would mess
++up the lines the checksum would differ.
++
++cksum is part of POSIX and so should be available on most Unixes.
++If it isn't available then the test will be skipped.
++
++STARTTEST
++:so small.vim
++:if !executable("cksum")
++: e! test.ok
++: w! test.out
++: qa!
++:endif
++:set fileformat=unix undolevels=-1
++ggdG
++:let i = 1
++:while i <= 2000000 | call append(i, range(i, i + 99)) | let i += 100 | endwhile
++ggdd
++:w! Xtest
++:r !cksum Xtest
++:s/\s/ /g
++:.w! test.out
++:qa!
++ENDTEST
++
+diff -Naur vim73.orig/src/testdir/test77.ok vim73/src/testdir/test77.ok
+--- vim73.orig/src/testdir/test77.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test77.ok	2013-06-07 17:07:37.965566926 +0000
+@@ -0,0 +1 @@
++3678979763 14888896 Xtest
+diff -Naur vim73.orig/src/testdir/test78.in vim73/src/testdir/test78.in
+--- vim73.orig/src/testdir/test78.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test78.in	2013-06-07 17:07:37.978900222 +0000
+@@ -0,0 +1,46 @@
++Inserts 10000 lines with text to fill the swap file with two levels of pointer
++blocks.  Then recovers from the swap file and checks all text is restored.
++
++We need about 10000 lines of 100 characters to get two levels of pointer
++blocks.
++
++STARTTEST
++:so small.vim
++:set nocp fileformat=unix undolevels=-1 viminfo+=nviminfo
++:e! Xtest
++ggdG
++:let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
++:let i = 1
++:let linecount = 10000
++:while i <= linecount | call append(i - 1, i . text) | let i += 1 | endwhile
++:preserve
++:" get the name of the swap file
++:redir => swapname
++:swapname
++:redir END
++:let swapname = substitute(swapname, '[[:blank:][:cntrl:]]*\(.\{-}\)[[:blank:][:cntrl:]]*$', '\1', '')
++:" make a copy of the swap file in Xswap
++:set bin
++:exe 'sp ' . swapname
++:w! Xswap
++:echo swapname
++:set nobin
++:new
++:only!
++:bwipe! Xtest
++:call rename('Xswap', swapname)
++:recover Xtest
++:call delete(swapname)
++:new
++:call append(0, 'recovery start')
++:wincmd w
++:let linedollar = line('$')
++:if linedollar < linecount | exe 'wincmd w' | call append(line('$'), "expected " . linecount . " lines but found only " . linedollar) | exe 'wincmd w' | let linecount = linedollar | endif
++:let i = 1
++:while i <= linecount | if getline(i) != i . text | exe 'wincmd w' | call append(line('$'), i . ' differs') | exe 'wincmd w' | endif | let i += 1 | endwhile
++:q!
++:call append(line('$'), 'recovery end')
++:w! test.out
++:qa!
++ENDTEST
++
+diff -Naur vim73.orig/src/testdir/test78.ok vim73/src/testdir/test78.ok
+--- vim73.orig/src/testdir/test78.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test78.ok	2013-06-07 17:07:37.992233517 +0000
+@@ -0,0 +1,3 @@
++recovery start
++
++recovery end
+diff -Naur vim73.orig/src/testdir/test79.in vim73/src/testdir/test79.in
+--- vim73.orig/src/testdir/test79.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test79.in	2013-06-07 17:07:37.995566841 +0000
+@@ -0,0 +1,226 @@
++Test for *sub-replace-special* and *sub-replace-expression* on :substitute.
++Test for submatch() on :substitue.
++Test for *:s%* on :substitute.
++
++STARTTEST
++:so small.vim
++ENDTEST
++
++Results of test71:
++
++STARTTEST
++:set magic
++:set cpo&
++/^TEST/
++j:s/A/&&/
++j:s/B/\&/
++j:s/C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/
++j:s/D/d/
++j:s/E/~/
++j:s/F/\~/
++j:s/G/\ugg/
++j:s/H/\Uh\Eh/
++j:s/I/\lII/
++j:s/J/\LJ\EJ/
++j:s/K/\Uk\ek/
++j:s/L/
+/
++j:s/M/\r/
++j:s/N/\
+/
++j:s/O/\n/
++j:s/P/\b/
++j:s/Q/\t/
++j:s/R/\\/
++j:s/S/\c/
++j:s/T//
++j:s/U/\L\uuUu\l\EU/
++j:s/V/\U\lVvV\u\Ev/
++ENDTEST
++
++TEST_1:
++A
++B
++C123456789
++D
++E
++F
++G
++H
++I
++J
++K
++lLl
++mMm
++nNn
++oOo
++pPp
++qQq
++rRr
++sSs
++tTt
++U
++V
++
++STARTTEST
++:set nomagic
++:set cpo&
++/^TEST/
++j:s/A/&&/
++j:s/B/\&/
++j:s/\mC\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\0\9\8\7\6\5\4\3\2\1/
++j:s/D/d/
++j:s/E/~/
++j:s/F/\~/
++j:s/G/\ugg/
++j:s/H/\Uh\Eh/
++j:s/I/\lII/
++j:s/J/\LJ\EJ/
++j:s/K/\Uk\ek/
++j:s/L/
+/
++j:s/M/\r/
++j:s/N/\
+/
++j:s/O/\n/
++j:s/P/\b/
++j:s/Q/\t/
++j:s/R/\\/
++j:s/S/\c/
++j:s/T//
++j:s/U/\L\uuUu\l\EU/
++j:s/V/\U\lVvV\u\Ev/
++ENDTEST
++
++TEST_2:
++A
++B
++C123456789
++D
++E
++F
++G
++H
++I
++J
++K
++lLl
++mMm
++nNn
++oOo
++pPp
++qQq
++rRr
++sSs
++tTt
++U
++V
++
++STARTTEST
++:set magic&
++:set cpo&
++/^TEST/
++j:s/A/\='\'/
++j:s/B/\='\\'/
++j:s/C/\='
+'/
++j:s/D/\='\
+'/
++j:s/E/\='\\
+'/
++j:s/F/\='\r'/
++j:s/G/\=''/
++j:s/H/\='\'/
++j:s/I/\='\\'/
++j:s/J/\='\n'/
++j:s/K/\="\r"/
++j:s/L/\="\n"/
++ENDTEST
++
++TEST_3:
++aAa
++bBb
++cCc
++dDd
++eEe
++fFf
++gGg
++hHh
++iIi
++jJj
++kKk
++lLl
++
++STARTTEST
++:set magic&
++:set cpo&
++/^TEST/
++j:s/A/\=substitute(submatch(0), '.', '\', '')/
++j:s/B/\=substitute(submatch(0), '.', '\\', '')/
++j:s/C/\=substitute(submatch(0), '.', '
+', '')/
++j:s/D/\=substitute(submatch(0), '.', '\
+', '')/
++j:s/E/\=substitute(submatch(0), '.', '\\
+', '')/
++j:s/F/\=substitute(submatch(0), '.', '\r', '')/
++j:s/G/\=substitute(submatch(0), '.', '', '')/
++j:s/H/\=substitute(submatch(0), '.', '\', '')/
++j:s/I/\=substitute(submatch(0), '.', '\\', '')/
++j:s/J/\=substitute(submatch(0), '.', '\n', '')/
++j:s/K/\=substitute(submatch(0), '.', "\r", '')/
++j:s/L/\=substitute(submatch(0), '.', "\n", '')/
++ENDTEST
++
++TEST_4:
++aAa
++bBb
++cCc
++dDd
++eEe
++fFf
++gGg
++hHh
++iIi
++jJj
++kKk
++lLl
++
++STARTTEST
++:set magic&
++:set cpo&
++/^TEST/
++j:s/A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)/\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)/
++ENDTEST
++
++TEST_5:
++A123456789
++
++STARTTEST
++:set magic&
++/^TEST/
++:set cpo+=/
++j:s/A/a/
++j:s/B/%/
++:set cpo-=/
++j:s/C/c/
++j:s/D/%/
++ENDTEST
++
++TEST_6:
++A
++B
++C
++D
++
++STARTTEST
++:set magic&
++:set cpo&
++/^TEST_7/
++j:s/A./\=submatch(0)/
++j:s/B./\=submatch(0)/
++/^Q$
++:s/Q[^\n]Q/\=submatch(0)."foobar"/
++:" Avoid :s error breaks dotest map on Windows.
++ENDTEST
++
++TEST_7:
++A
+A
++BB
++Q
++Q
++
++STARTTEST
++:g/^STARTTEST/.,/^ENDTEST/d
++:1;/^Results/,$wq! test.out
++ENDTEST
+diff -Naur vim73.orig/src/testdir/test79.ok vim73/src/testdir/test79.ok
+--- vim73.orig/src/testdir/test79.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test79.ok	2013-06-07 17:07:38.025566755 +0000
+@@ -0,0 +1,124 @@
++Results of test71:
++
++
++TEST_1:
++AA
++&
++C123456789987654321
++d
++d
++~
++Gg
++Hh
++iI
++jJ
++Kk
++l
++l
++m
++m
++n
+n
++oo
++pp
++q	q
++r\r
++scs
++tt
++UuuU
++vVVv
++
++
++TEST_2:
++&&
++B
++C123456789987654321
++d
++~
++~
++Gg
++Hh
++iI
++jJ
++Kk
++l
++l
++m
++m
++n
+n
++oo
++pp
++q	q
++r\r
++scs
++tt
++UuuU
++vVVv
++
++
++TEST_3:
++a\a
++b\\b
++c
++c
++d\
++d
++e\\
++e
++f\rf
++g
++g
++h\
++h
++i\\
++i
++j\nj
++k
++k
++l
++l
++
++
++TEST_4:
++a\a
++b\b
++c
++c
++d
++d
++e\
++e
++f
++f
++g
++g
++h
++h
++i\
++i
++j
++j
++k
++k
++l
++l
++
++
++TEST_5:
++A123456789987654321
++
++
++TEST_6:
++a
++a
++c
++%
++
++
++TEST_7:
++A
++A
++B
++B
++Q
++Q
++
+diff -Naur vim73.orig/src/testdir/test80.in vim73/src/testdir/test80.in
+--- vim73.orig/src/testdir/test80.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test80.in	2013-06-07 17:07:38.068899965 +0000
+@@ -0,0 +1,180 @@
++Test for *sub-replace-special* and *sub-replace-expression* on substitue().
++Test for submatch() on substitue().
++Test for *:s%* on :substitute.
++
++STARTTEST
++:so small.vim
++ENDTEST
++
++TEST_1:
++
++STARTTEST
++:set magic
++:set cpo&
++:$put =\"\n\nTEST_1:\"
++:$put =substitute('A', 'A', '&&', '')
++:$put =substitute('B', 'B', '\&', '')
++:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
++:$put =substitute('D', 'D', 'd', '')
++:$put =substitute('E', 'E', '~', '')
++:$put =substitute('F', 'F', '\~', '')
++:$put =substitute('G', 'G', '\ugg', '')
++:$put =substitute('H', 'H', '\Uh\Eh', '')
++:$put =substitute('I', 'I', '\lII', '')
++:$put =substitute('J', 'J', '\LJ\EJ', '')
++:$put =substitute('K', 'K', '\Uk\ek', '')
++:$put =substitute('lLl', 'L', '
+', '')
++:$put =substitute('mMm', 'M', '\r', '')
++:$put =substitute('nNn', 'N', '\
+', '')
++:$put =substitute('oOo', 'O', '\n', '')
++:$put =substitute('pPp', 'P', '\b', '')
++:$put =substitute('qQq', 'Q', '\t', '')
++:$put =substitute('rRr', 'R', '\\', '')
++:$put =substitute('sSs', 'S', '\c', '')
++:$put =substitute('uUu', 'U', \"\n\", '')
++:$put =substitute('vVv', 'V', \"\b\", '')
++:$put =substitute('wWw', 'W', \"\\\", '')
++:$put =substitute('xXx', 'X', \"\r\", '')
++:$put =substitute('Y', 'Y', '\L\uyYy\l\EY', '')
++:$put =substitute('Z', 'Z', '\U\lZzZ\u\Ez', '')
++/^TEST_2
++ENDTEST
++
++TEST_2:
++
++STARTTEST
++:set nomagic
++:set cpo&
++:$put =\"\n\nTEST_2:\"
++:$put =substitute('A', 'A', '&&', '')
++:$put =substitute('B', 'B', '\&', '')
++:$put =substitute('C123456789', 'C\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\0\9\8\7\6\5\4\3\2\1', '')
++:$put =substitute('D', 'D', 'd', '')
++:$put =substitute('E', 'E', '~', '')
++:$put =substitute('F', 'F', '\~', '')
++:$put =substitute('G', 'G', '\ugg', '')
++:$put =substitute('H', 'H', '\Uh\Eh', '')
++:$put =substitute('I', 'I', '\lII', '')
++:$put =substitute('J', 'J', '\LJ\EJ', '')
++:$put =substitute('K', 'K', '\Uk\ek', '')
++:$put =substitute('lLl', 'L', '
+', '')
++:$put =substitute('mMm', 'M', '\r', '')
++:$put =substitute('nNn', 'N', '\
+', '')
++:$put =substitute('oOo', 'O', '\n', '')
++:$put =substitute('pPp', 'P', '\b', '')
++:$put =substitute('qQq', 'Q', '\t', '')
++:$put =substitute('rRr', 'R', '\\', '')
++:$put =substitute('sSs', 'S', '\c', '')
++:$put =substitute('tTt', 'T', \"\r\", '')
++:$put =substitute('uUu', 'U', \"\n\", '')
++:$put =substitute('vVv', 'V', \"\b\", '')
++:$put =substitute('wWw', 'W', \"\\\", '')
++:$put =substitute('X', 'X', '\L\uxXx\l\EX', '')
++:$put =substitute('Y', 'Y', '\U\lYyY\u\Ey', '')
++/^TEST_3
++ENDTEST
++
++TEST_3:
++
++STARTTEST
++:set magic&
++:set cpo&
++:$put =\"\n\nTEST_3:\"
++:let y = substitute('aAa', 'A', '\="\\"', '')           | $put =y
++:let y = substitute('bBb', 'B', '\="\\\\"', '')         | $put =y
++:let y = substitute('cCc', 'C', '\="
+"', '')         | $put =y
++:let y = substitute('dDd', 'D', '\="\\
+"', '')       | $put =y
++:let y = substitute('eEe', 'E', '\="\\\\
+"', '')     | $put =y
++:let y = substitute('fFf', 'F', '\="\\r"', '')          | $put =y
++:let y = substitute('jJj', 'J', '\="\\n"', '')          | $put =y
++:let y = substitute('kKk', 'K', '\="\r"', '')           | $put =y
++:let y = substitute('lLl', 'L', '\="\n"', '')           | $put =y
++/^TEST_4
++ENDTEST
++
++TEST_4:
++
++STARTTEST
++:set magic&
++:set cpo&
++:$put =\"\n\nTEST_4:\"
++:let y = substitute('aAa', 'A', '\=substitute(submatch(0), ".", "\\", "")', '')       | $put =y
++:let y = substitute('bBb', 'B', '\=substitute(submatch(0), ".", "\\\\", "")', '')     | $put =y
++:let y = substitute('cCc', 'C', '\=substitute(submatch(0), ".", "
+", "")', '')     | $put =y
++:let y = substitute('dDd', 'D', '\=substitute(submatch(0), ".", "\\
+", "")', '')   | $put =y
++:let y = substitute('eEe', 'E', '\=substitute(submatch(0), ".", "\\\\
+", "")', '') | $put =y
++:let y = substitute('fFf', 'F', '\=substitute(submatch(0), ".", "\\r", "")', '')      | $put =y
++:let y = substitute('jJj', 'J', '\=substitute(submatch(0), ".", "\\n", "")', '')      | $put =y
++:let y = substitute('kKk', 'K', '\=substitute(submatch(0), ".", "\r", "")', '')       | $put =y
++:let y = substitute('lLl', 'L', '\=substitute(submatch(0), ".", "\n", "")', '')       | $put =y
++/^TEST_5
++ENDTEST
++
++TEST_5:
++
++STARTTEST
++:set magic&
++:set cpo&
++:$put =\"\n\nTEST_5:\"
++:$put =substitute('A123456789', 'A\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)\(.\)', '\=submatch(0) . submatch(9) . submatch(8) . submatch(7) . submatch(6) . submatch(5) . submatch(4) . submatch(3) . submatch(2) . submatch(1)', '')
++/^TEST_6
++ENDTEST
++
++TEST_6:
++
++STARTTEST
++:set magic&
++:$put =\"\n\nTEST_6:\"
++:set cpo+=/
++:$put =substitute('A', 'A', 'a', '')
++:$put =substitute('B', 'B', '%', '')
++:set cpo-=/
++:$put =substitute('C', 'C', 'c', '')
++:$put =substitute('D', 'D', '%', '')
++/^TEST_7
++ENDTEST
++
++TEST_7:
++
++STARTTEST
++:set magic&
++:set cpo&
++:$put =\"\n\nTEST_7:\"
++:$put =substitute('A
+A', 'A.', '\=submatch(0)', '')
++:$put =substitute(\"B\nB\", 'B.', '\=submatch(0)', '')
++/^TEST_8
++ENDTEST
++
++TEST_8:
++
++STARTTEST
++:set magic&
++:set cpo&
++:$put =\"\n\nTEST_8:\"
++:$put =',,X'
++:s/\(^\|,\)\ze\(,\|X\)/\1N/g
++:$put =',,Y'
++:s/\(^\|,\)\ze\(,\|Y\)/\1N/gc
++a:$put =',,Z'
++:s/\(^\|,\)\ze\(,\|Z\)/\1N/gc
++yy/^TEST_9:
++ENDTEST
++
++TEST_9:
++
++STARTTEST
++:set magic&
++:set cpo&
++:$put =\"\n\nTEST_9:\"
++:$put ='xxx'
++:s/x/X/gc
++yyq/^TEST_10:
++ENDTEST
++
++TEST_10:
++
++STARTTEST
++:/^Results/,$wq! test.out
++ENDTEST
++
++Results of test72:
+diff -Naur vim73.orig/src/testdir/test80.ok vim73/src/testdir/test80.ok
+--- vim73.orig/src/testdir/test80.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test80.ok	2013-06-07 17:07:38.078899936 +0000
+@@ -0,0 +1,115 @@
++Results of test72:
++
++
++TEST_1:
++AA
++&
++C123456789987654321
++d
++~
++~
++Gg
++Hh
++iI
++jJ
++Kk
++l
+l
++m
+m
++n
+n
++o
++o
++pp
++q	q
++r\r
++scs
++u
++u
++vv
++w\w
++x
+x
++YyyY
++zZZz
++
++
++TEST_2:
++AA
++&
++C123456789987654321
++d
++~
++~
++Gg
++Hh
++iI
++jJ
++Kk
++l
+l
++m
+m
++n
+n
++o
++o
++pp
++q	q
++r\r
++scs
++t
+t
++u
++u
++vv
++w\w
++XxxX
++yYYy
++
++
++TEST_3:
++a\a
++b\\b
++c
+c
++d\
+d
++e\\
+e
++f\rf
++j\nj
++k
+k
++l
++l
++
++
++TEST_4:
++a\a
++b\b
++c
+c
++d
+d
++e\
+e
++f
+f
++j
++j
++k
+k
++l
++l
++
++
++TEST_5:
++A123456789987654321
++
++
++TEST_6:
++a
++%
++c
++%
++
++
++TEST_7:
++A
+A
++B
++B
++
++
++TEST_8:
++N,,NX
++N,,NY
++N,,NZ
++
++
++TEST_9:
++XXx
+diff -Naur vim73.orig/src/testdir/test81.in vim73/src/testdir/test81.in
+--- vim73.orig/src/testdir/test81.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test81.in	2013-06-07 17:07:38.095566555 +0000
+@@ -0,0 +1,22 @@
++Test for t movement command and 'cpo-;' setting
++
++STARTTEST
++:set nocompatible viminfo+=nviminfo
++:set cpo-=;
++/firstline/
++j0tt;D
++0fz;D
++$Fy;D
++$Ty;D:set cpo+=;
++j0tt;;D
++$Ty;;D:?firstline?+1,$w! test.out
++:qa!
++ENDTEST
++
++firstline
++aaa two three four
++    zzz
++yyy   
++bbb yee yoo four
++ccc two three four
++ddd yee yoo four
+diff -Naur vim73.orig/src/testdir/test81.ok vim73/src/testdir/test81.ok
+--- vim73.orig/src/testdir/test81.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test81.ok	2013-06-07 17:07:38.108899850 +0000
+@@ -0,0 +1,6 @@
++aaa two
++    z
++y
++bbb y
++ccc
++ddd yee y
+diff -Naur vim73.orig/src/testdir/test82.in vim73/src/testdir/test82.in
+--- vim73.orig/src/testdir/test82.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test82.in	2013-06-07 17:07:38.115566498 +0000
+@@ -0,0 +1,93 @@
++Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
++
++STARTTEST
++:so small.vim
++:if !has("multi_byte")
++: e! test.ok
++: w! test.out
++: qa!
++:endif
++:set enc=utf8
++ggdG
++:
++:function! Ch(a, op, b, expected)
++:  if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
++:    call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
++:  else
++:    let b:passed += 1
++:  endif
++:endfunction
++:
++:function! Chk(a, b, result)
++:  if a:result == 0
++:    call Ch(a:a, '==?', a:b, 1)
++:    call Ch(a:a, '!=?', a:b, 0)
++:    call Ch(a:a, '<=?', a:b, 1)
++:    call Ch(a:a, '>=?', a:b, 1)
++:    call Ch(a:a, '<?', a:b, 0)
++:    call Ch(a:a, '>?', a:b, 0)
++:  elseif a:result > 0
++:    call Ch(a:a, '==?', a:b, 0)
++:    call Ch(a:a, '!=?', a:b, 1)
++:    call Ch(a:a, '<=?', a:b, 0)
++:    call Ch(a:a, '>=?', a:b, 1)
++:    call Ch(a:a, '<?', a:b, 0)
++:    call Ch(a:a, '>?', a:b, 1)
++:  else
++:    call Ch(a:a, '==?', a:b, 0)
++:    call Ch(a:a, '!=?', a:b, 1)
++:    call Ch(a:a, '<=?', a:b, 1)
++:    call Ch(a:a, '>=?', a:b, 0)
++:    call Ch(a:a, '<?', a:b, 1)
++:    call Ch(a:a, '>?', a:b, 0)
++:  endif
++:endfunction
++:
++:function! Check(a, b, result)
++:  call Chk(a:a, a:b, a:result)
++:  call Chk(a:b, a:a, -a:result)
++:endfunction
++:
++:function! LT(a, b)
++:  call Check(a:a, a:b, -1)
++:endfunction
++:
++:function! GT(a, b)
++:  call Check(a:a, a:b, 1)
++:endfunction
++:
++:function! EQ(a, b)
++:  call Check(a:a, a:b, 0)
++:endfunction
++:
++:let b:passed=0
++:call EQ('', '')
++:call LT('', 'a')
++:call EQ('abc', 'abc')
++:call EQ('Abc', 'abC')
++:call LT('ab', 'abc')
++:call LT('AB', 'abc')
++:call LT('ab', 'aBc')
++:call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
++:call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
++:call EQ('\xe2\x84\xaa', 'k')
++:call LT('\xe2\x84\xaa', 'kkkkkk')
++:call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
++:call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
++:call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
++:call EQ('Abc\x80', 'AbC\x80')
++:call LT('Abc\x80', 'AbC\x81')
++:call LT('Abc', 'AbC\x80')
++:call LT('abc\x80DEF', 'abc\x80def')  " case folding stops at the first bad character
++:call LT('\xc3XYZ', '\xc3xyz')
++:call EQ('\xef\xbc\xba', '\xef\xbd\x9a')  " FF3A (upper), FF5A (lower)
++:call GT('\xef\xbc\xba', '\xef\xbc\xff')  " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
++:call LT('\xc3', '\xc3\x83')
++:call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
++:for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
++:for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
++:for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
++:call append(0, printf('%d checks passed', b:passed))
++:wq! test.out
++ENDTEST
++
+diff -Naur vim73.orig/src/testdir/test82.ok vim73/src/testdir/test82.ok
+--- vim73.orig/src/testdir/test82.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test82.ok	2013-06-07 17:07:38.148899736 +0000
+@@ -0,0 +1,2 @@
++3732 checks passed
++
+diff -Naur vim73.orig/src/testdir/test83-tags2 vim73/src/testdir/test83-tags2
+--- vim73.orig/src/testdir/test83-tags2	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test83-tags2	2013-06-07 17:07:38.152233060 +0000
+@@ -0,0 +1,2 @@
++!_TAG_FILE_ENCODING	cp932	//
++`ab	Xtags2.txt	/`ab
+diff -Naur vim73.orig/src/testdir/test83-tags3 vim73/src/testdir/test83-tags3
+--- vim73.orig/src/testdir/test83-tags3	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test83-tags3	2013-06-07 17:07:38.155566384 +0000
+@@ -0,0 +1,102 @@
++!_TAG_FILE_SORTED	1	//
++!_TAG_FILE_ENCODING	cp932	//
++abc1	Xtags3.txt	/`ab
++abc2	Xtags3.txt	/`ab
++abc3	Xtags3.txt	/`ab
++abc4	Xtags3.txt	/`ab
++abc5	Xtags3.txt	/`ab
++abc6	Xtags3.txt	/`ab
++abc7	Xtags3.txt	/`ab
++abc8	Xtags3.txt	/`ab
++abc9	Xtags3.txt	/`ab
++abc10	Xtags3.txt	/`ab
++abc11	Xtags3.txt	/`ab
++abc12	Xtags3.txt	/`ab
++abc13	Xtags3.txt	/`ab
++abc14	Xtags3.txt	/`ab
++abc15	Xtags3.txt	/`ab
++abc16	Xtags3.txt	/`ab
++abc17	Xtags3.txt	/`ab
++abc18	Xtags3.txt	/`ab
++abc19	Xtags3.txt	/`ab
++abc20	Xtags3.txt	/`ab
++abc21	Xtags3.txt	/`ab
++abc22	Xtags3.txt	/`ab
++abc23	Xtags3.txt	/`ab
++abc24	Xtags3.txt	/`ab
++abc25	Xtags3.txt	/`ab
++abc26	Xtags3.txt	/`ab
++abc27	Xtags3.txt	/`ab
++abc28	Xtags3.txt	/`ab
++abc29	Xtags3.txt	/`ab
++abc30	Xtags3.txt	/`ab
++abc31	Xtags3.txt	/`ab
++abc32	Xtags3.txt	/`ab
++abc33	Xtags3.txt	/`ab
++abc34	Xtags3.txt	/`ab
++abc35	Xtags3.txt	/`ab
++abc36	Xtags3.txt	/`ab
++abc37	Xtags3.txt	/`ab
++abc38	Xtags3.txt	/`ab
++abc39	Xtags3.txt	/`ab
++abc40	Xtags3.txt	/`ab
++abc41	Xtags3.txt	/`ab
++abc42	Xtags3.txt	/`ab
++abc43	Xtags3.txt	/`ab
++abc44	Xtags3.txt	/`ab
++abc45	Xtags3.txt	/`ab
++abc46	Xtags3.txt	/`ab
++abc47	Xtags3.txt	/`ab
++abc48	Xtags3.txt	/`ab
++abc49	Xtags3.txt	/`ab
++abc50	Xtags3.txt	/`ab
++abc51	Xtags3.txt	/`ab
++abc52	Xtags3.txt	/`ab
++abc53	Xtags3.txt	/`ab
++abc54	Xtags3.txt	/`ab
++abc55	Xtags3.txt	/`ab
++abc56	Xtags3.txt	/`ab
++abc57	Xtags3.txt	/`ab
++abc58	Xtags3.txt	/`ab
++abc59	Xtags3.txt	/`ab
++abc60	Xtags3.txt	/`ab
++abc61	Xtags3.txt	/`ab
++abc62	Xtags3.txt	/`ab
++abc63	Xtags3.txt	/`ab
++abc64	Xtags3.txt	/`ab
++abc65	Xtags3.txt	/`ab
++abc66	Xtags3.txt	/`ab
++abc67	Xtags3.txt	/`ab
++abc68	Xtags3.txt	/`ab
++abc69	Xtags3.txt	/`ab
++abc70	Xtags3.txt	/`ab
++abc71	Xtags3.txt	/`ab
++abc72	Xtags3.txt	/`ab
++abc73	Xtags3.txt	/`ab
++abc74	Xtags3.txt	/`ab
++abc75	Xtags3.txt	/`ab
++abc76	Xtags3.txt	/`ab
++abc77	Xtags3.txt	/`ab
++abc78	Xtags3.txt	/`ab
++abc79	Xtags3.txt	/`ab
++abc80	Xtags3.txt	/`ab
++abc81	Xtags3.txt	/`ab
++abc82	Xtags3.txt	/`ab
++abc83	Xtags3.txt	/`ab
++abc84	Xtags3.txt	/`ab
++abc85	Xtags3.txt	/`ab
++abc86	Xtags3.txt	/`ab
++abc87	Xtags3.txt	/`ab
++abc88	Xtags3.txt	/`ab
++abc89	Xtags3.txt	/`ab
++abc90	Xtags3.txt	/`ab
++abc91	Xtags3.txt	/`ab
++abc92	Xtags3.txt	/`ab
++abc93	Xtags3.txt	/`ab
++abc94	Xtags3.txt	/`ab
++abc95	Xtags3.txt	/`ab
++abc96	Xtags3.txt	/`ab
++abc97	Xtags3.txt	/`ab
++abc98	Xtags3.txt	/`ab
++abc99	Xtags3.txt	/`ab
++abc100	Xtags3.txt	/`ab
+diff -Naur vim73.orig/src/testdir/test83.in vim73/src/testdir/test83.in
+--- vim73.orig/src/testdir/test83.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test83.in	2013-06-07 17:07:38.172233003 +0000
+@@ -0,0 +1,76 @@
++Tests for tag search with !_TAG_FILE_ENCODING.
++
++STARTTEST
++:so mbyte.vim
++:set enc=utf8
++:if !has('iconv') || iconv("\x82\x60", "cp932", "utf-8") != "\uff21"
++: e! test.ok
++: w! test.out
++: qa!
++:endif
++
++:/^text for tags1$/,/^text for tags1$/+1w! Xtags1.txt
++:/^text for tags2$/,/^text for tags2$/+1w! Xtags2.txt
++:/^text for tags3$/,/^text for tags3$/+1w! Xtags3.txt
++:/^tags1$/+1,/^tags1-end$/-1w! Xtags1
++
++ggdG
++
++:call setline('.', 'Results of test83')
++
++:" case1:
++:new
++:set tags=Xtags1
++:let v:errmsg = ''
++:tag abcdefghijklmnopqrs
++:if v:errmsg =~ 'E426:' || getline('.') != 'abcdefghijklmnopqrs'
++: close
++: put ='case1: failed'
++:else
++: close
++: put ='case1: ok'
++:endif
++
++:" case2:
++:new
++:set tags=test83-tags2
++:let v:errmsg = ''
++:tag /.ïŒ¢ïŒ£
++:if v:errmsg =~ 'E426:' || getline('.') != 'ïŒ¡ïŒ¢ïŒ£'
++: close
++: put ='case2: failed'
++:else
++: close
++: put ='case2: ok'
++:endif
++
++:" case3:
++:new
++:set tags=test83-tags3
++:let v:errmsg = ''
++:tag abc50
++:if v:errmsg =~ 'E426:' || getline('.') != 'ïŒ¡ïŒ¢ïŒ£'
++: close
++: put ='case3: failed'
++:else
++: close
++: put ='case3: ok'
++:endif
++:close
++
++:wq! test.out
++ENDTEST
++
++text for tags1
++abcdefghijklmnopqrs
++
++text for tags2
++ïŒ¡ïŒ¢ïŒ£
++
++text for tags3
++ïŒ¡ïŒ¢ïŒ£
++
++tags1
++!_TAG_FILE_ENCODING	utf-8	//
++abcdefghijklmnopqrs	Xtags1.txt	/abcdefghijklmnopqrs
++tags1-end
+diff -Naur vim73.orig/src/testdir/test83.ok vim73/src/testdir/test83.ok
+--- vim73.orig/src/testdir/test83.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test83.ok	2013-06-07 17:07:38.172233003 +0000
+@@ -0,0 +1,4 @@
++Results of test83
++case1: ok
++case2: ok
++case3: ok
+diff -Naur vim73.orig/src/testdir/test84.in vim73/src/testdir/test84.in
+--- vim73.orig/src/testdir/test84.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test84.in	2013-06-07 17:07:38.178899650 +0000
+@@ -0,0 +1,35 @@
++Tests for curswant not changing when setting an option
++
++STARTTEST
++:so small.vim
++:/^start target options$/+1,/^end target options$/-1 yank
++:let target_option_names = split(@0)
++:function TestCurswant(option_name)
++:  normal! ggf8j
++:  let curswant_before = winsaveview().curswant
++:  execute 'let' '&'.a:option_name '=' '&'.a:option_name
++:  let curswant_after = winsaveview().curswant
++:  return [a:option_name, curswant_before, curswant_after]
++:endfunction
++:
++:new
++:put =['1234567890', '12345']
++:1 delete _
++:let result = []
++:for option_name in target_option_names
++:  call add(result, TestCurswant(option_name))
++:endfor
++:
++:new
++:put =map(copy(result), 'join(v:val, '' '')')
++:1 delete _
++:write test.out
++:
++:qall!
++ENDTEST
++
++start target options
++	tabstop
++	timeoutlen
++	ttimeoutlen
++end target options
+diff -Naur vim73.orig/src/testdir/test84.ok vim73/src/testdir/test84.ok
+--- vim73.orig/src/testdir/test84.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test84.ok	2013-06-07 17:07:38.192232946 +0000
+@@ -0,0 +1,3 @@
++tabstop 7 4
++timeoutlen 7 7
++ttimeoutlen 7 7
+diff -Naur vim73.orig/src/testdir/test85.in vim73/src/testdir/test85.in
+--- vim73.orig/src/testdir/test85.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test85.in	2013-06-07 17:07:38.205566241 +0000
+@@ -0,0 +1,85 @@
++Test for Lua interface and luaeval() function
++
++STARTTEST
++:so small.vim
++:so lua.vim
++:set nocompatible viminfo+=nviminfo
++:lua l = vim.list():add"item0":add"dictionary with list OK":add"item2"
++:lua h = vim.dict(); h.list = l
++:call garbagecollect()
++/^1
++:" change buffer contents
++:lua curbuf = vim.buffer()
++:lua curline = vim.eval"line('.')"
++:lua curbuf[curline] = "1 changed line 1"
++:" scalar test
++:let tmp_string = luaeval('"string"')
++:let tmp_1000 = luaeval('1000')
++:if printf("%s%.0f", tmp_string, tmp_1000) == "string1000"
++:let scalar_res = "OK"
++:else
++:let scalar_res = "FAILED"
++:endif
++:call append(search("^1"), "scalar test " . scalar_res)
++:" dictionary containing a list
++:let tmp = luaeval("h").list[1]
++:/^2/put =tmp
++:" circular list (at the same time test lists containing lists)
++:lua l[2] = l
++:let l2 = luaeval("h").list
++:if l2[2] == l2
++:let res = "OK"
++:else
++:let res = "FAILED"
++:endif
++:call setline(search("^3"), "circular test " . res)
++
++:let l = []
++:lua l = vim.eval("l")
++:lua l:add(123)
++:lua l:add("abc")
++:lua l:add(vim.eval("[1, 2, 3]"))
++:lua l:add(vim.eval("{'a':1, 'b':2, 'c':3}"))
++:lua l:insert(123)
++:lua l:insert("abc")
++:lua l:insert(vim.eval("[1, 2, 3]"))
++:lua l:insert(vim.eval("{'a':1, 'b':2, 'c':3}"))
++:lua l[0] = l[0]
++:lua l[1] = l[1]
++:lua l[2] = l[2]
++:lua l[3] = l[3]
++:lua l[0] = 123
++:lua l[1] = "abc"
++:lua l[2] = vim.eval("[1, 2, 3]")
++:lua l[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
++:lua l[3] = nil
++:lua l[2] = nil
++:lua l[1] = nil
++:lua l[0] = nil
++:lua l = nil
++:$put =string(l)
++
++:let d = {}
++:lua d = vim.eval("d")
++:lua d[0] = 123
++:lua d[1] = "abc"
++:lua d[2] = vim.eval("[1, 2, 3]")
++:lua d[3] = vim.eval("{'a':1, 'b':2, 'c':3}")
++:lua d[4] = d[0]
++:lua d[5] = d[1]
++:lua d[6] = d[2]
++:lua d[7] = d[3]
++:lua d[3] = nil
++:lua d[2] = nil
++:lua d[1] = nil
++:lua d[0] = nil
++:lua d = nil
++:$put =string(d)
++
++:?^1?,$w! test.out
++:qa!
++ENDTEST
++
++1 line 1
++2 line 2
++3 line 3
+diff -Naur vim73.orig/src/testdir/test85.ok vim73/src/testdir/test85.ok
+--- vim73.orig/src/testdir/test85.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test85.ok	2013-06-07 17:07:38.215566212 +0000
+@@ -0,0 +1,7 @@
++1 changed line 1
++scalar test OK
++2 line 2
++dictionary with list OK
++circular test OK
++[123.0, 'abc', [1, 2, 3], {'a': 1, 'b': 2, 'c': 3}]
++{'4': 123.0, '5': 'abc', '6': [1, 2, 3], '7': {'a': 1, 'b': 2, 'c': 3}}
+diff -Naur vim73.orig/src/testdir/test86.in vim73/src/testdir/test86.in
+--- vim73.orig/src/testdir/test86.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test86.in	2013-06-07 17:07:38.218899536 +0000
+@@ -0,0 +1,1096 @@
++Tests for various python features.     vim: set ft=vim :
++
++NOTE: This will cause errors when run under valgrind.
++This would require recompiling Python with:
++  ./configure --without-pymalloc
++See http://svn.python.org/view/python/trunk/Misc/README.valgrind?view=markup
++
++STARTTEST
++:so small.vim
++:set encoding=latin1
++:if !has('python') | e! test.ok | wq! test.out | endif
++:lang C
++:py import vim
++:fun Test()
++:let l = []
++:py l=vim.bindeval('l')
++:py f=vim.bindeval('function("strlen")')
++:" Extending List directly with different types
++:py l.extend([1, "as'd", [1, 2, f, {'a': 1}]])
++:$put =string(l)
++:$put =string(l[-1])
++:try
++:  $put =string(l[-4])
++:catch
++:  $put =v:exception[:13]
++:endtry
++:" List assignment
++:py l[0]=0
++:$put =string(l)
++:py l[-2]=f
++:$put =string(l)
++:"
++:" Extending Dictionary directly with different types
++:let d = {}
++:fun d.f()
++:  return 1
++:endfun
++py << EOF
++d=vim.bindeval('d')
++d['1']='asd'
++d.update(b=[1, 2, f])
++d.update((('-1', {'a': 1}),))
++d.update({'0': -1})
++dk = d.keys()
++dv = d.values()
++di = d.items()
++dk.sort(key=repr)
++dv.sort(key=repr)
++di.sort(key=repr)
++EOF
++:$put =pyeval('d[''f''](self={})')
++:$put =pyeval('repr(dk)')
++:$put =substitute(pyeval('repr(dv)'),'0x\x\+','','g')
++:$put =substitute(pyeval('repr(di)'),'0x\x\+','','g')
++:for [key, Val] in sort(items(d))
++:  $put =string(key) . ' : ' . string(Val)
++:  unlet key Val
++:endfor
++:"
++:" removing items with del
++:py del l[2]
++:$put =string(l)
++:let l = range(8)
++:py l=vim.bindeval('l')
++:try
++:   py del l[:3]
++:   py del l[1:]
++:catch
++:   $put =v:exception
++:endtry
++:$put =string(l)
++:"
++:py del d['-1']
++:py del d['f']
++:$put =string(pyeval('d.get(''b'', 1)'))
++:$put =string(pyeval('d.pop(''b'')'))
++:$put =string(pyeval('d.get(''b'', 1)'))
++:$put =string(pyeval('d.pop(''1'', 2)'))
++:$put =string(pyeval('d.pop(''1'', 2)'))
++:$put =pyeval('repr(d.has_key(''0''))')
++:$put =pyeval('repr(d.has_key(''1''))')
++:$put =pyeval('repr(''0'' in d)')
++:$put =pyeval('repr(''1'' in d)')
++:$put =pyeval('repr(list(iter(d)))')
++:$put =string(d)
++:$put =pyeval('repr(d.popitem())')
++:$put =pyeval('repr(d.get(''0''))')
++:$put =pyeval('repr(list(iter(d)))')
++:"
++:" removing items out of range: silently skip items that don't exist
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:" The following two ranges delete nothing as they match empty list:
++:py del l[2:1]
++:$put =string(l)
++:py del l[2:2]
++:$put =string(l)
++:py del l[2:3]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py del l[2:4]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py del l[2:5]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py del l[2:6]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:" The following two ranges delete nothing as they match empty list:
++:py del l[-1:2]
++:$put =string(l)
++:py del l[-2:2]
++:$put =string(l)
++:py del l[-3:2]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py del l[-4:2]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py del l[-5:2]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py del l[-6:2]
++:$put =string(l)
++:"
++:" Slice assignment to a list
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py l[0:0]=['a']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py l[1:2]=['b']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py l[2:4]=['c']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py l[4:4]=['d']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py l[-1:2]=['e']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py l[-10:2]=['f']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:py l[2:-10]=['g']
++:$put =string(l)
++:let l = []
++:py l=vim.bindeval('l')
++:py l[0:0]=['h']
++:$put =string(l)
++:"
++:" Locked variables
++:let l = [0, 1, 2, 3]
++:py l=vim.bindeval('l')
++:lockvar! l
++:py l[2]='i'
++:$put =string(l)
++:unlockvar! l
++:"
++:" Function calls
++:function New(...)
++:return ['NewStart']+a:000+['NewEnd']
++:endfunction
++:function DictNew(...) dict
++:return ['DictNewStart']+a:000+['DictNewEnd', self]
++:endfunction
++:let l=[function('New'), function('DictNew')]
++:py l=vim.bindeval('l')
++:py l.extend(list(l[0](1, 2, 3)))
++:$put =string(l)
++:py l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
++:$put =string(l)
++:py l.extend([l[0].name])
++:$put =string(l)
++:try
++:   py l[1](1, 2, 3)
++:catch
++:   $put =v:exception[:16]
++:endtry
++:py f=l[0]
++:delfunction New
++:try
++:   py f(1, 2, 3)
++:catch
++:   $put =v:exception[:16]
++:endtry
++:if has('float')
++:   let l=[0.0]
++:   py l=vim.bindeval('l')
++:   py l.extend([0.0])
++:   $put =string(l)
++:else
++:   $put ='[0.0, 0.0]'
++:endif
++:let messages=[]
++py <<EOF
++d=vim.bindeval('{}')
++m=vim.bindeval('messages')
++def em(expr, g=globals(), l=locals()):
++    try:
++        exec(expr, g, l)
++    except:
++        m.extend([sys.exc_type.__name__])
++
++em('d["abc"]')
++em('d["abc"]="\\0"')
++em('d["abc"]=vim')
++em('d[""]=1')
++em('d["a\\0b"]=1')
++em('d[u"a\\0b"]=1')
++
++em('d.pop("abc")')
++em('d.popitem()')
++EOF
++:$put =messages
++:unlet messages
++:" locked and scope attributes
++:let d={} | let dl={} | lockvar dl
++:for s in split("d dl v: g:")
++:    let name=tr(s, ':', 's')
++:    execute 'py '.name.'=vim.bindeval("'.s.'")'
++:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".pyeval(name.".".v:val)'), ';')
++:    $put =toput
++:endfor
++:silent! let d.abc=1
++:silent! let dl.abc=1
++:py d.locked=True
++:py dl.locked=False
++:silent! let d.def=1
++:silent! let dl.def=1
++:put ='d:'.string(d)
++:put ='dl:'.string(dl)
++:unlet d dl
++:
++:let l=[] | let ll=[] | lockvar ll
++:for s in split("l ll")
++:    let name=tr(s, ':', 's')
++:    execute 'py '.name.'=vim.bindeval("'.s.'")'
++:    let toput=s.' : locked:'.pyeval(name.'.locked')
++:    $put =toput
++:endfor
++:silent! call extend(l, [0])
++:silent! call extend(ll, [0])
++:py l.locked=True
++:py ll.locked=False
++:silent! call extend(l, [1])
++:silent! call extend(ll, [1])
++:put ='l:'.string(l)
++:put ='ll:'.string(ll)
++:unlet l ll
++:"
++:" pyeval()
++:let l=pyeval('range(3)')
++:$put =string(l)
++:let d=pyeval('{"a": "b", "c": 1, "d": ["e"]}')
++:$put =sort(items(d))
++:if has('float')
++:   let f=pyeval('0.0')
++:   $put =string(f)
++:else
++:   $put ='0.0'
++:endif
++:" Invalid values:
++:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
++:   try
++:      let v=pyeval(e)
++:   catch
++:      let toput=e.":\t".v:exception[:13]
++:      $put =toput
++:   endtry
++:endfor
++:"
++:" threading
++:let l = [0]
++:py l=vim.bindeval('l')
++:py <<EOF
++import threading
++import time
++
++class T(threading.Thread):
++    def __init__(self):
++        threading.Thread.__init__(self)
++        self.t = 0
++        self.running = True
++
++    def run(self):
++        while self.running:
++            self.t += 1
++            time.sleep(0.1)
++
++t = T()
++t.start()
++EOF
++:sleep 1
++:py t.running = False
++:py t.join()
++:py l[0] = t.t > 8  # check if the background thread is working
++:$put =string(l)
++:"
++:" settrace
++:let l = []
++:py l=vim.bindeval('l')
++:py <<EOF
++import sys
++
++def traceit(frame, event, arg):
++    global l
++    if event == "line":
++        l.extend([frame.f_lineno])
++    return traceit
++
++def trace_main():
++    for i in range(5):
++        pass
++EOF
++:py sys.settrace(traceit)
++:py trace_main()
++:py sys.settrace(None)
++:$put =string(l)
++:"
++:" Slice
++:py ll = vim.bindeval('[0, 1, 2, 3, 4, 5]')
++:py l = ll[:4]
++:$put =string(pyeval('l'))
++:py l = ll[2:]
++:$put =string(pyeval('l'))
++:py l = ll[:-4]
++:$put =string(pyeval('l'))
++:py l = ll[-2:]
++:$put =string(pyeval('l'))
++:py l = ll[2:4]
++:$put =string(pyeval('l'))
++:py l = ll[4:2]
++:$put =string(pyeval('l'))
++:py l = ll[-4:-2]
++:$put =string(pyeval('l'))
++:py l = ll[-2:-4]
++:$put =string(pyeval('l'))
++:py l = ll[:]
++:$put =string(pyeval('l'))
++:py l = ll[0:6]
++:$put =string(pyeval('l'))
++:py l = ll[-10:10]
++:$put =string(pyeval('l'))
++:"
++:" Vars
++:let g:foo = 'bac'
++:let w:abc = 'def'
++:let b:baz = 'bar'
++:let t:bar = 'jkl'
++:try
++:  throw "Abc"
++:catch
++:  put =pyeval('vim.vvars[''exception'']')
++:endtry
++:put =pyeval('vim.vars[''foo'']')
++:put =pyeval('vim.current.window.vars[''abc'']')
++:put =pyeval('vim.current.buffer.vars[''baz'']')
++:put =pyeval('vim.current.tabpage.vars[''bar'']')
++:"
++:" Options
++:" paste:          boolean, global
++:" previewheight   number,  global
++:" operatorfunc:   string,  global
++:" number:         boolean, window-local
++:" numberwidth:    number,  window-local
++:" colorcolumn:    string,  window-local
++:" statusline:     string,  window-local/global
++:" autoindent:     boolean, buffer-local
++:" shiftwidth:     number,  buffer-local
++:" omnifunc:       string,  buffer-local
++:" preserveindent: boolean, buffer-local/global
++:" path:           string,  buffer-local/global
++:let g:bufs=[bufnr('%')]
++:new
++:let g:bufs+=[bufnr('%')]
++:vnew
++:let g:bufs+=[bufnr('%')]
++:wincmd j
++:vnew
++:let g:bufs+=[bufnr('%')]
++:wincmd l
++:fun RecVars(opt)
++:  let gval =string(eval('&g:'.a:opt))
++:  let wvals=join(map(range(1, 4),  'v:val.":".string(getwinvar(v:val, "&".a:opt))'))
++:  let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))'))
++:  put ='  G: '.gval
++:  put ='  W: '.wvals
++:  put ='  B: '.wvals
++:endfun
++py << EOF
++def e(s, g=globals(), l=locals()):
++    try:
++        exec(s, g, l)
++    except:
++        vim.command('return ' + repr(sys.exc_type.__name__))
++
++def ev(s, g=globals(), l=locals()):
++    try:
++        return eval(s, g, l)
++    except:
++        vim.command('let exc=' + repr(sys.exc_type.__name__))
++        return 0
++EOF
++:function E(s)
++:   python e(vim.eval('a:s'))
++:endfunction
++:function Ev(s)
++:   let r=pyeval('ev(vim.eval("a:s"))')
++:   if exists('exc')
++:       throw exc
++:   endif
++:   return r
++:endfunction
++:py gopts1=vim.options
++:py wopts1=vim.windows[2].options
++:py wopts2=vim.windows[0].options
++:py wopts3=vim.windows[1].options
++:py bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
++:py bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
++:py bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
++:set path=.,..,,
++:let lst=[]
++:let lst+=[['paste',          1,     0,     1,     2,      1,    1,      0    ]]
++:let lst+=[['previewheight',  5,     1,     6,     'a',    0,    1,      0    ]]
++:let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
++:let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
++:let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
++:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc',  0,    0,      1    ]]
++:let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
++:let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
++:let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
++:let lst+=[['omnifunc',       'A',   'B',   'C',   1,      0,    0,      2    ]]
++:let lst+=[['preserveindent', 0,     1,     1,     2,      1,    1,      2    ]]
++:let lst+=[['path',           '.,,', ',,',  '.',   0,      0,    1,      2    ]]
++:for       [oname,            oval1, oval2, oval3, invval, bool, global, local] in lst
++:   py oname=vim.eval('oname')
++:   py oval1=vim.bindeval('oval1')
++:   py oval2=vim.bindeval('oval2')
++:   py oval3=vim.bindeval('oval3')
++:   if invval is 0 || invval is 1
++:       py invval=bool(vim.bindeval('invval'))
++:   else
++:       py invval=vim.bindeval('invval')
++:   endif
++:   if bool
++:       py oval1=bool(oval1)
++:       py oval2=bool(oval2)
++:       py oval3=bool(oval3)
++:   endif
++:   put ='>>> '.oname
++:   for v in ['gopts1', 'wopts1', 'bopts1']
++:       try
++:           put ='  p/'.v.': '.Ev('repr('.v.'['''.oname.'''])')
++:       catch
++:           put ='  p/'.v.'! '.v:exception
++:       endtry
++:       let r=E(v.'['''.oname.''']=invval')
++:       if r isnot 0
++:           put ='  inv: '.string(invval).'! '.r
++:       endif
++:       for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3'])
++:           let val=substitute(vv, '^.opts', 'oval', '')
++:           let r=E(vv.'['''.oname.''']='.val)
++:           if r isnot 0
++:               put ='  '.vv.'! '.r
++:           endif
++:       endfor
++:   endfor
++:   call RecVars(oname)
++:   for v in ['wopts3', 'bopts3']
++:       let r=E('del '.v.'["'.oname.'"]')
++:       if r isnot 0
++:           put ='  del '.v.'! '.r
++:       endif
++:   endfor
++:   call RecVars(oname)
++:endfor
++:only
++:for buf in g:bufs[1:]
++:   execute 'bwipeout!' buf
++:endfor
++:"
++:" Test buffer object
++:vnew
++:put ='First line'
++:put ='Second line'
++:put ='Third line'
++:1 delete _
++:py b=vim.current.buffer
++:wincmd w
++:mark a
++:augroup BUFS
++:   autocmd BufFilePost * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
++:   autocmd BufFilePre * python cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
++:augroup END
++py << EOF
++cb = vim.current.buffer
++# Tests BufferAppend and BufferItem
++cb.append(b[0])
++# Tests BufferSlice and BufferAssSlice
++cb.append('abc') # Will be overwritten
++cb[-1:] = b[:-2]
++# Test BufferLength and BufferAssSlice
++cb.append('def') # Will not be overwritten
++cb[len(cb):] = b[:]
++# Test BufferAssItem and BufferMark
++cb.append('ghi') # Will be overwritten
++cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
++# Test BufferRepr
++cb.append(repr(cb) + repr(b))
++# Modify foreign buffer
++b.append('foo')
++b[0]='bar'
++b[0:0]=['baz']
++vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
++# Test assigning to name property
++import os
++old_name = cb.name
++cb.name = 'foo'
++cb.append(cb.name[-11:].replace(os.path.sep, '/'))
++b.name = 'bar'
++cb.append(b.name[-11:].replace(os.path.sep, '/'))
++cb.name = old_name
++cb.append(cb.name[-17:].replace(os.path.sep, '/'))
++# Test CheckBuffer
++for _b in vim.buffers:
++    if _b is not cb:
++        vim.command('bwipeout! ' + str(_b.number))
++del _b
++cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
++for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")', 'b.name = "!"'):
++    try:
++        exec(expr)
++    except vim.error:
++        pass
++    else:
++        # Usually a SEGV here
++        # Should not happen in any case
++        cb.append('No exception for ' + expr)
++vim.command('cd .')
++EOF
++:augroup BUFS
++:   autocmd!
++:augroup END
++:augroup! BUFS
++:"
++:" Test vim.buffers object
++:set hidden
++:edit a
++:buffer #
++:edit b
++:buffer #
++:edit c
++:buffer #
++py << EOF
++try:
++    from __builtin__ import next
++except ImportError:
++    next = lambda o: o.next()
++# Check GCing iterator that was not fully exhausted
++i = iter(vim.buffers)
++cb.append('i:' + str(next(i)))
++# and also check creating more then one iterator at a time
++i2 = iter(vim.buffers)
++cb.append('i2:' + str(next(i2)))
++cb.append('i:' + str(next(i)))
++# The following should trigger GC and not cause any problems
++del i
++del i2
++i3 = iter(vim.buffers)
++cb.append('i3:' + str(next(i3)))
++del i3
++
++prevnum = 0
++for b in vim.buffers:
++    # Check buffer order
++    if prevnum >= b.number:
++        cb.append('!!! Buffer numbers not in strictly ascending order')
++    # Check indexing: vim.buffers[number].number == number
++    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
++    prevnum = b.number
++
++cb.append(str(len(vim.buffers)))
++
++bnums = list(map(lambda b: b.number, vim.buffers))[1:]
++
++# Test wiping out buffer with existing iterator
++i4 = iter(vim.buffers)
++cb.append('i4:' + str(next(i4)))
++vim.command('bwipeout! ' + str(bnums.pop(0)))
++try:
++    next(i4)
++except vim.error:
++    pass
++else:
++    cb.append('!!!! No vim.error')
++i4 = iter(vim.buffers)
++vim.command('bwipeout! ' + str(bnums.pop(-1)))
++vim.command('bwipeout! ' + str(bnums.pop(-1)))
++cb.append('i4:' + str(next(i4)))
++try:
++    next(i4)
++except StopIteration:
++    cb.append('StopIteration')
++EOF
++:"
++:" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
++:tabnew 0
++:tabnew 1
++:vnew a.1
++:tabnew 2
++:vnew a.2
++:vnew b.2
++:vnew c.2
++py << EOF
++cb.append('Number of tabs: ' + str(len(vim.tabpages)))
++cb.append('Current tab pages:')
++def W(w):
++    if repr(w).find('(unknown)') != -1:
++        return '<window object (unknown)>'
++    else:
++        return repr(w)
++
++start = len(cb)
++
++def Cursor(w):
++    if w.buffer is cb:
++        return repr((start - w.cursor[0], w.cursor[1]))
++    else:
++        return repr(w.cursor)
++
++for t in vim.tabpages:
++    cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
++    cb.append('  Windows:')
++    for w in t.windows:
++        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
++        # Other values depend on the size of the terminal, so they are checked partly:
++        for attr in ('height', 'row', 'width', 'col'):
++            try:
++                aval = getattr(w, attr)
++                if type(aval) is not long:
++                    raise TypeError
++                if aval < 0:
++                    raise ValueError
++            except Exception:
++                cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + sys.exc_type.__name__)
++        w.cursor = (len(w.buffer), 0)
++cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
++if list(vim.windows) != list(vim.current.tabpage.windows):
++    cb.append('!!!!!! Windows differ')
++EOF
++:"
++:" Test vim.current
++py << EOF
++def H(o):
++    return repr(o)
++cb.append('Current tab page: ' + repr(vim.current.tabpage))
++cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
++cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer))
++# Assigning: fails
++try:
++    vim.current.window = vim.tabpages[0].window
++except ValueError:
++    cb.append('ValueError at assigning foreign tab window')
++
++for attr in ('window', 'tabpage', 'buffer'):
++    try:
++        setattr(vim.current, attr, None)
++    except TypeError:
++        cb.append('Type error at assigning None to vim.current.' + attr)
++
++# Assigning: success
++vim.current.tabpage = vim.tabpages[-2]
++vim.current.buffer = cb
++vim.current.window = vim.windows[0]
++vim.current.window.cursor = (len(vim.current.buffer), 0)
++cb.append('Current tab page: ' + repr(vim.current.tabpage))
++cb.append('Current window: ' + repr(vim.current.window))
++cb.append('Current buffer: ' + repr(vim.current.buffer))
++cb.append('Current line: ' + repr(vim.current.line))
++ws = list(vim.windows)
++ts = list(vim.tabpages)
++for b in vim.buffers:
++    if b is not cb:
++        vim.command('bwipeout! ' + str(b.number))
++cb.append('w.valid: ' + repr([w.valid for w in ws]))
++cb.append('t.valid: ' + repr([t.valid for t in ts]))
++EOF
++:tabonly!
++:only!
++:"
++:" Test types
++py << EOF
++for expr, attr in (
++    ('vim.vars',                         'Dictionary'),
++    ('vim.options',                      'Options'),
++    ('vim.bindeval("{}")',               'Dictionary'),
++    ('vim.bindeval("[]")',               'List'),
++    ('vim.bindeval("function(\'tr\')")', 'Function'),
++    ('vim.current.buffer',               'Buffer'),
++    ('vim.current.range',                'Range'),
++    ('vim.current.window',               'Window'),
++    ('vim.current.tabpage',              'TabPage'),
++):
++    cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
++EOF
++:"
++:" Test __dir__() method
++py << EOF
++for name, o in (
++        ('current',    vim.current),
++        ('buffer',     vim.current.buffer),
++        ('window',     vim.current.window),
++        ('tabpage',    vim.current.tabpage),
++        ('range',      vim.current.range),
++        ('dictionary', vim.bindeval('{}')),
++        ('list',       vim.bindeval('[]')),
++        ('function',   vim.bindeval('function("tr")')),
++        ('output',     sys.stdout),
++    ):
++    cb.append(name + ':' + ','.join(dir(o)))
++del name
++del o
++EOF
++:"
++:" Test vim.*.__new__
++:$put =string(pyeval('vim.Dictionary({})'))
++:$put =string(pyeval('vim.Dictionary(a=1)'))
++:$put =string(pyeval('vim.Dictionary(((''a'', 1),))'))
++:$put =string(pyeval('vim.List()'))
++:$put =string(pyeval('vim.List(iter(''abc''))'))
++:$put =string(pyeval('vim.Function(''tr'')'))
++:"
++:" Test stdout/stderr
++:redir => messages
++:py sys.stdout.write('abc') ; sys.stdout.write('def')
++:py sys.stderr.write('abc') ; sys.stderr.write('def')
++:py sys.stdout.writelines(iter('abc'))
++:py sys.stderr.writelines(iter('abc'))
++:redir END
++:$put =string(substitute(messages, '\d\+', '', 'g'))
++:" Test subclassing
++:fun Put(...)
++:   $put =string(a:000)
++:   return a:000
++:endfun
++py << EOF
++class DupDict(vim.Dictionary):
++    def __setitem__(self, key, value):
++        super(DupDict, self).__setitem__(key, value)
++        super(DupDict, self).__setitem__('dup_' + key, value)
++dd = DupDict()
++dd['a'] = 'b'
++
++class DupList(vim.List):
++    def __getitem__(self, idx):
++        return [super(DupList, self).__getitem__(idx)] * 2
++
++dl = DupList()
++dl2 = DupList(iter('abc'))
++dl.extend(dl2[0])
++
++class DupFun(vim.Function):
++    def __call__(self, arg):
++        return super(DupFun, self).__call__(arg, arg)
++
++df = DupFun('Put')
++EOF
++:$put =string(sort(keys(pyeval('dd'))))
++:$put =string(pyeval('dl'))
++:$put =string(pyeval('dl2'))
++:$put =string(pyeval('df(2)'))
++:"
++:" Test chdir
++py << EOF
++import os
++fnamemodify = vim.Function('fnamemodify')
++cb.append(fnamemodify('.', ':p:h:t'))
++cb.append(vim.eval('@%'))
++os.chdir('..')
++cb.append(fnamemodify('.', ':p:h:t'))
++cb.append(vim.eval('@%').replace(os.path.sep, '/'))
++os.chdir('testdir')
++cb.append(fnamemodify('.', ':p:h:t'))
++cb.append(vim.eval('@%'))
++EOF
++:"
++:" Test errors
++:fun F() dict
++:endfun
++:fun D()
++:endfun
++py << EOF
++def ee(expr, g=globals(), l=locals()):
++    try:
++        exec(expr, g, l)
++    except:
++        cb.append(expr + ':' + repr(sys.exc_info()[:2]))
++    else:
++        cb.append(expr + ':NOT FAILED')
++d = vim.Dictionary()
++ned = vim.Dictionary(foo='bar', baz='abc')
++dl = vim.Dictionary(a=1)
++dl.locked = True
++l = vim.List()
++ll = vim.List('abc')
++ll.locked = True
++f = vim.Function('string')
++fd = vim.Function('F')
++fdel = vim.Function('D')
++vim.command('delfunction D')
++
++def subexpr_test(expr, name, subexprs):
++    cb.append('>>> Testing %s using %s' % (name, expr))
++    for subexpr in subexprs:
++        ee(expr % subexpr)
++    cb.append('<<< Finished')
++
++def stringtochars_test(expr):
++    return subexpr_test(expr, 'StringToChars', (
++        '1',       # Fail type checks
++        'u"\\0"',  # Fail PyString_AsStringAndSize(bytes, , NULL) check
++        '"\\0"',   # Fail PyString_AsStringAndSize(object, , NULL) check
++    ))
++
++class Mapping(object):
++    def __init__(self, d):
++        self.d = d
++
++    def __getitem__(self, key):
++        return self.d[key]
++
++    def keys(self):
++        return self.d.keys()
++
++    def items(self):
++        return self.d.items()
++
++def convertfrompyobject_test(expr, recurse=True):
++    # pydict_to_tv
++    stringtochars_test(expr % '{%s : 1}')
++    if recurse:
++        convertfrompyobject_test(expr % '{"abc" : %s}', False)
++    # pymap_to_tv
++    stringtochars_test(expr % 'Mapping({%s : 1})')
++    if recurse:
++        convertfrompyobject_test(expr % 'Mapping({"abc" : %s})', False)
++    # pyseq_to_tv
++    iter_test(expr)
++    return subexpr_test(expr, 'ConvertFromPyObject', (
++        'None',                 # Not conversible
++        '{"": 1}',              # Empty key not allowed
++        '{u"": 1}',             # Same, but with unicode object
++        'FailingMapping()',     #
++        'FailingMappingKey()',  #
++    ))
++
++def convertfrompymapping_test(expr):
++    convertfrompyobject_test(expr)
++    return subexpr_test(expr, 'ConvertFromPyMapping', (
++        '[]',
++    ))
++
++def iter_test(expr):
++    return subexpr_test(expr, '*Iter*', (
++        'FailingIter()',
++        'FailingIterNext()',
++    ))
++
++class FailingTrue(object):
++    def __nonzero__(self):
++        raise NotImplementedError
++
++class FailingIter(object):
++    def __iter__(self):
++        raise NotImplementedError
++
++class FailingIterNext(object):
++    def __iter__(self):
++        return self
++
++    def next(self):
++        raise NotImplementedError
++
++class FailingMappingKey(object):
++    def __getitem__(self, item):
++        raise NotImplementedError
++
++    def keys(self):
++        return list("abc")
++
++class FailingMapping(object):
++    def __getitem__(self):
++        raise NotImplementedError
++
++    def keys(self):
++        raise NotImplementedError
++
++class FailingList(list):
++    def __getitem__(self, idx):
++        if i == 2:
++            raise NotImplementedError
++        else:
++            return super(FailingList, self).__getitem__(idx)
++
++cb.append("> Output")
++cb.append(">> OutputSetattr")
++ee('del sys.stdout.softspace')
++ee('sys.stdout.softspace = []')
++ee('sys.stdout.attr = None')
++cb.append(">> OutputWrite")
++ee('sys.stdout.write(None)')
++cb.append(">> OutputWriteLines")
++ee('sys.stdout.writelines(None)')
++ee('sys.stdout.writelines([1])')
++#iter_test('sys.stdout.writelines(%s)')
++cb.append("> VimCommand")
++ee('vim.command(1)')
++#! Not checked: vim->python exceptions translating: checked later
++cb.append("> VimToPython")
++#! Not checked: everything: needs errors in internal python functions
++cb.append("> VimEval")
++ee('vim.eval(1)')
++#! Not checked: everything: needs errors in internal python functions
++cb.append("> VimEvalPy")
++ee('vim.bindeval(1)')
++#! Not checked: vim->python exceptions translating: checked later
++cb.append("> VimStrwidth")
++ee('vim.strwidth(1)')
++cb.append("> Dictionary")
++cb.append(">> DictionaryConstructor")
++ee('vim.Dictionary("abc")')
++##! Not checked: py_dict_alloc failure
++cb.append(">> DictionarySetattr")
++ee('del d.locked')
++ee('d.locked = FailingTrue()')
++ee('vim.vvars.locked = False')
++ee('d.scope = True')
++ee('d.xxx = True')
++cb.append(">> _DictionaryItem")
++ee('d.get("a", 2, 3)')
++stringtochars_test('d.get(%s)')
++ee('d.pop("a")')
++ee('dl.pop("a")')
++cb.append(">> DictionaryIterNext")
++ee('for i in ned: ned["a"] = 1')
++cb.append(">> DictionaryAssItem")
++ee('dl["b"] = 1')
++stringtochars_test('d[%s] = 1')
++convertfrompyobject_test('d["a"] = %s')
++cb.append(">> DictionaryUpdate")
++cb.append(">>> kwargs")
++cb.append(">>> iter")
++ee('d.update(FailingMapping())')
++ee('d.update([FailingIterNext()])')
++#iter_test('d.update(%s)')
++convertfrompyobject_test('d.update(%s)')
++stringtochars_test('d.update(((%s, 0),))')
++convertfrompyobject_test('d.update((("a", %s),))')
++cb.append(">> DictionaryPopItem")
++ee('d.popitem(1, 2)')
++cb.append(">> DictionaryHasKey")
++ee('d.has_key()')
++cb.append("> List")
++cb.append(">> ListConstructor")
++ee('vim.List(1, 2)')
++ee('vim.List(a=1)')
++#iter_test('vim.List(%s)')
++convertfrompyobject_test('vim.List([%s])')
++cb.append(">> ListItem")
++ee('l[1000]')
++cb.append(">> ListAssItem")
++ee('ll[1] = 2')
++ee('l[1000] = 3')
++cb.append(">> ListAssSlice")
++ee('ll[1:100] = "abc"')
++#iter_test('l[:] = %s')
++convertfrompyobject_test('l[:] = [%s]')
++cb.append(">> ListConcatInPlace")
++#iter_test('l.extend(%s)')
++convertfrompyobject_test('l.extend([%s])')
++cb.append(">> ListSetattr")
++ee('del l.locked')
++ee('l.locked = FailingTrue()')
++ee('l.xxx = True')
++cb.append("> Function")
++cb.append(">> FunctionConstructor")
++ee('vim.Function("123")')
++ee('vim.Function("xxx_non_existent_function_xxx")')
++ee('vim.Function("xxx#non#existent#function#xxx")')
++cb.append(">> FunctionCall")
++convertfrompyobject_test('f(%s)')
++convertfrompymapping_test('fd(self=%s)')
++cb.append("> TabPage")
++cb.append(">> TabPageAttr")
++ee('vim.current.tabpage.xxx')
++cb.append("> TabList")
++cb.append(">> TabListItem")
++ee('vim.tabpages[1000]')
++cb.append("> Window")
++cb.append(">> WindowAttr")
++ee('vim.current.window.xxx')
++cb.append(">> WindowSetattr")
++ee('vim.current.window.buffer = 0')
++ee('vim.current.window.cursor = (100000000, 100000000)')
++ee('vim.current.window.cursor = True')
++ee('vim.current.window.height = "abc"')
++ee('vim.current.window.width  = "abc"')
++ee('vim.current.window.xxxxxx = True')
++cb.append("> WinList")
++cb.append(">> WinListItem")
++ee('vim.windows[1000]')
++cb.append("> Buffer")
++cb.append(">> StringToLine (indirect)")
++ee('vim.current.buffer[0] = "\\na"')
++cb.append(">> SetBufferLine (indirect)")
++ee('vim.current.buffer[0] = True')
++cb.append(">> SetBufferLines (indirect)")
++ee('vim.current.buffer[:] = True')
++ee('vim.current.buffer[:] = ["\\na", "bc"]')
++cb.append(">> InsertBufferLines (indirect)")
++ee('vim.current.buffer.append(None)')
++ee('vim.current.buffer.append(["\\na", "bc"])')
++ee('vim.current.buffer.append("\\nbc")')
++cb.append(">> RBItem")
++ee('vim.current.buffer[100000000]')
++cb.append(">> RBAsItem")
++ee('vim.current.buffer[100000000] = ""')
++cb.append(">> BufferAttr")
++ee('vim.current.buffer.xxx')
++cb.append(">> BufferSetattr")
++ee('vim.current.buffer.name = True')
++ee('vim.current.buffer.xxx = True')
++cb.append(">> BufferMark")
++ee('vim.current.buffer.mark(0)')
++ee('vim.current.buffer.mark("abc")')
++ee('vim.current.buffer.mark("!")')
++cb.append(">> BufferRange")
++ee('vim.current.buffer.range(1, 2, 3)')
++cb.append("> BufMap")
++cb.append(">> BufMapItem")
++ee('vim.buffers[None]')
++ee('vim.buffers[100000000]')
++cb.append("> Current")
++cb.append(">> CurrentGetattr")
++ee('vim.current.xxx')
++cb.append(">> CurrentSetattr")
++ee('vim.current.line = True')
++ee('vim.current.buffer = True')
++ee('vim.current.window = True')
++ee('vim.current.tabpage = True')
++ee('vim.current.xxx = True')
++EOF
++:"
++:" Test exceptions
++:fun Exe(e)
++:   execute a:e
++:endfun
++py << EOF
++Exe = vim.bindeval('function("Exe")')
++ee('vim.command("throw \'abc\'")')
++ee('Exe("throw \'def\'")')
++ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
++ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
++ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
++ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
++EOF
++:endfun
++:"
++:call Test()
++:"
++:delfunc Test
++:call garbagecollect(1)
++:"
++:/^start:/,$wq! test.out
++:call getchar()
++ENDTEST
++
++start:
+diff -Naur vim73.orig/src/testdir/test86.ok vim73/src/testdir/test86.ok
+--- vim73.orig/src/testdir/test86.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test86.ok	2013-06-07 17:07:38.225566184 +0000
+@@ -0,0 +1,1091 @@
++start:
++[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++[1, 2, function('strlen'), {'a': 1}]
++Vim(put):E684:
++[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
++1
++['-1', '0', '1', 'b', 'f']
++['asd', -1L, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >]
++[('-1', <vim.dictionary object at >), ('0', -1L), ('1', 'asd'), ('b', <vim.list object at >), ('f', <vim.Function '1'>)]
++'-1' : {'a': 1}
++'0' : -1
++'1' : 'asd'
++'b' : [1, 2, function('strlen')]
++'f' : function('1')
++[0, function('strlen')]
++[3]
++[1, 2, function('strlen')]
++[1, 2, function('strlen')]
++1
++'asd'
++2
++True
++False
++True
++False
++['0']
++{'0': -1}
++('0', -1L)
++None
++[]
++[0, 1, 2, 3]
++[0, 1, 2, 3]
++[0, 1, 3]
++[0, 1]
++[0, 1]
++[0, 1]
++[0, 1, 2, 3]
++[0, 1, 2, 3]
++[0, 2, 3]
++[2, 3]
++[2, 3]
++[2, 3]
++['a', 0, 1, 2, 3]
++[0, 'b', 2, 3]
++[0, 1, 'c']
++[0, 1, 2, 3, 'd']
++[0, 1, 2, 'e', 3]
++['f', 2, 3]
++[0, 1, 'g', 2, 3]
++['h']
++[0, 1, 2, 3]
++[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
++[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
++[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
++Vim(python):E725:
++Vim(python):E117:
++[0.0, 0.0]
++KeyError
++TypeError
++TypeError
++ValueError
++TypeError
++TypeError
++KeyError
++KeyError
++d : locked:0;scope:0
++dl : locked:1;scope:0
++v: : locked:2;scope:1
++g: : locked:0;scope:2
++d:{'abc': 1}
++dl:{'def': 1}
++l : locked:0
++ll : locked:1
++l:[0]
++ll:[1]
++[0, 1, 2]
++['a', 'b']
++['c', 1]
++['d', ['e']]
++0.0
++"\0":	Vim(let):E859:
++{"\0": 1}:	Vim(let):E859:
++undefined_name:	Vim(let):Trace
++vim:	Vim(let):E859:
++[1]
++[1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
++[0, 1, 2, 3]
++[2, 3, 4, 5]
++[0, 1]
++[4, 5]
++[2, 3]
++[]
++[2, 3]
++[]
++[0, 1, 2, 3, 4, 5]
++[0, 1, 2, 3, 4, 5]
++[0, 1, 2, 3, 4, 5]
++Abc
++bac
++def
++bar
++jkl
++>>> paste
++  p/gopts1: False
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1! KeyError
++  inv: 2! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 1
++  W: 1:1 2:1 3:1 4:1
++  B: 1:1 2:1 3:1 4:1
++  del wopts3! KeyError
++  del bopts3! KeyError
++  G: 1
++  W: 1:1 2:1 3:1 4:1
++  B: 1:1 2:1 3:1 4:1
++>>> previewheight
++  p/gopts1: 12
++  inv: 'a'! TypeError
++  p/wopts1! KeyError
++  inv: 'a'! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1! KeyError
++  inv: 'a'! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 5
++  W: 1:5 2:5 3:5 4:5
++  B: 1:5 2:5 3:5 4:5
++  del wopts3! KeyError
++  del bopts3! KeyError
++  G: 5
++  W: 1:5 2:5 3:5 4:5
++  B: 1:5 2:5 3:5 4:5
++>>> operatorfunc
++  p/gopts1: ''
++  inv: 2! TypeError
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1! KeyError
++  inv: 2! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 'A'
++  W: 1:'A' 2:'A' 3:'A' 4:'A'
++  B: 1:'A' 2:'A' 3:'A' 4:'A'
++  del wopts3! KeyError
++  del bopts3! KeyError
++  G: 'A'
++  W: 1:'A' 2:'A' 3:'A' 4:'A'
++  B: 1:'A' 2:'A' 3:'A' 4:'A'
++>>> number
++  p/gopts1! KeyError
++  inv: 0! KeyError
++  gopts1! KeyError
++  p/wopts1: False
++  p/bopts1! KeyError
++  inv: 0! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 0
++  W: 1:1 2:1 3:0 4:0
++  B: 1:1 2:1 3:0 4:0
++  del wopts3! ValueError
++  del bopts3! KeyError
++  G: 0
++  W: 1:1 2:1 3:0 4:0
++  B: 1:1 2:1 3:0 4:0
++>>> numberwidth
++  p/gopts1! KeyError
++  inv: -100! KeyError
++  gopts1! KeyError
++  p/wopts1: 8
++  inv: -100! error
++  p/bopts1! KeyError
++  inv: -100! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 8
++  W: 1:3 2:5 3:2 4:8
++  B: 1:3 2:5 3:2 4:8
++  del wopts3! ValueError
++  del bopts3! KeyError
++  G: 8
++  W: 1:3 2:5 3:2 4:8
++  B: 1:3 2:5 3:2 4:8
++>>> colorcolumn
++  p/gopts1! KeyError
++  inv: 'abc'! KeyError
++  gopts1! KeyError
++  p/wopts1: ''
++  inv: 'abc'! error
++  p/bopts1! KeyError
++  inv: 'abc'! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: ''
++  W: 1:'+2' 2:'+3' 3:'+1' 4:''
++  B: 1:'+2' 2:'+3' 3:'+1' 4:''
++  del wopts3! ValueError
++  del bopts3! KeyError
++  G: ''
++  W: 1:'+2' 2:'+3' 3:'+1' 4:''
++  B: 1:'+2' 2:'+3' 3:'+1' 4:''
++>>> statusline
++  p/gopts1: ''
++  inv: 0! TypeError
++  p/wopts1: None
++  inv: 0! TypeError
++  p/bopts1! KeyError
++  inv: 0! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: '1'
++  W: 1:'2' 2:'4' 3:'1' 4:'1'
++  B: 1:'2' 2:'4' 3:'1' 4:'1'
++  del bopts3! KeyError
++  G: '1'
++  W: 1:'2' 2:'1' 3:'1' 4:'1'
++  B: 1:'2' 2:'1' 3:'1' 4:'1'
++>>> autoindent
++  p/gopts1! KeyError
++  inv: 2! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: False
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++>>> shiftwidth
++  p/gopts1! KeyError
++  inv: 3! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 3! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: 8
++  G: 8
++  W: 1:0 2:2 3:8 4:1
++  B: 1:0 2:2 3:8 4:1
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: 8
++  W: 1:0 2:2 3:8 4:1
++  B: 1:0 2:2 3:8 4:1
++>>> omnifunc
++  p/gopts1! KeyError
++  inv: 1! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 1! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: ''
++  inv: 1! TypeError
++  G: ''
++  W: 1:'A' 2:'B' 3:'' 4:'C'
++  B: 1:'A' 2:'B' 3:'' 4:'C'
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: ''
++  W: 1:'A' 2:'B' 3:'' 4:'C'
++  B: 1:'A' 2:'B' 3:'' 4:'C'
++>>> preserveindent
++  p/gopts1! KeyError
++  inv: 2! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: False
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++>>> path
++  p/gopts1: '.,..,,'
++  inv: 0! TypeError
++  p/wopts1! KeyError
++  inv: 0! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: None
++  inv: 0! TypeError
++  G: '.,,'
++  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
++  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
++  del wopts3! KeyError
++  G: '.,,'
++  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
++  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
++First line
++First line
++def
++First line
++Second line
++Third line
++(7, 2)
++<buffer test86.in><buffer >
++baz
++bar
++Second line
++Third line
++foo
++1:BufFilePre:1
++1:BufFilePost:1
++testdir/foo
++5:BufFilePre:5
++5:BufFilePost:5
++testdir/bar
++1:BufFilePre:1
++1:BufFilePost:1
++testdir/test86.in
++valid: b:False, cb:True
++i:<buffer test86.in>
++i2:<buffer test86.in>
++i:<buffer a>
++i3:<buffer test86.in>
++1:<buffer test86.in>=<buffer test86.in>
++8:<buffer a>=<buffer a>
++9:<buffer b>=<buffer b>
++10:<buffer c>=<buffer c>
++4
++i4:<buffer test86.in>
++i4:<buffer test86.in>
++StopIteration
++Number of tabs: 4
++Current tab pages:
++  <tabpage 0>(1): 1 windows, current is <window object (unknown)>
++  Windows:
++    <window object (unknown)>(1): displays buffer <buffer test86.in>; cursor is at (37, 0)
++  <tabpage 1>(2): 1 windows, current is <window object (unknown)>
++  Windows:
++    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
++  <tabpage 2>(3): 2 windows, current is <window object (unknown)>
++  Windows:
++    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
++    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
++  <tabpage 3>(4): 4 windows, current is <window 0>
++  Windows:
++    <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
++    <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
++    <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
++    <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
++Number of windows in current tab page: 4
++Current tab page: <tabpage 3>
++Current window: <window 0>: <window 0> is <window 0>
++Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
++ValueError at assigning foreign tab window
++Type error at assigning None to vim.current.window
++Type error at assigning None to vim.current.tabpage
++Type error at assigning None to vim.current.buffer
++Current tab page: <tabpage 2>
++Current window: <window 0>
++Current buffer: <buffer test86.in>
++Current line: 'Type error at assigning None to vim.current.buffer'
++w.valid: [True, False]
++t.valid: [True, False, True, False]
++vim.vars:Dictionary:True
++vim.options:Options:True
++vim.bindeval("{}"):Dictionary:True
++vim.bindeval("[]"):List:True
++vim.bindeval("function('tr')"):Function:True
++vim.current.buffer:Buffer:True
++vim.current.range:Range:True
++vim.current.window:Window:True
++vim.current.tabpage:TabPage:True
++current:__dir__,__members__,buffer,line,range,tabpage,window
++buffer:__dir__,__members__,append,mark,name,number,options,range,valid,vars
++window:__dir__,__members__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
++tabpage:__dir__,__members__,number,valid,vars,window,windows
++range:__dir__,__members__,append,end,start
++dictionary:__dir__,__members__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
++list:__dir__,__members__,extend,locked
++function:__dir__,__members__,softspace
++output:__dir__,__members__,flush,softspace,write,writelines
++{}
++{'a': 1}
++{'a': 1}
++[]
++['a', 'b', 'c']
++function('tr')
++'
++abcdef
++line  :
++abcdef
++abc
++line  :
++abc'
++['a', 'dup_a']
++['a', 'a']
++['a', 'b', 'c']
++[2, 2]
++[2, 2]
++testdir
++test86.in
++src
++testdir/test86.in
++testdir
++test86.in
++> Output
++>> OutputSetattr
++del sys.stdout.softspace:(<type 'exceptions.AttributeError'>, AttributeError("can't delete OutputObject attributes",))
++sys.stdout.softspace = []:(<type 'exceptions.TypeError'>, TypeError('softspace must be an integer',))
++sys.stdout.attr = None:(<type 'exceptions.AttributeError'>, AttributeError('invalid attribute',))
++>> OutputWrite
++sys.stdout.write(None):(<type 'exceptions.TypeError'>, TypeError('coercing to Unicode: need string or buffer, NoneType found',))
++>> OutputWriteLines
++sys.stdout.writelines(None):(<type 'exceptions.TypeError'>, TypeError("'NoneType' object is not iterable",))
++sys.stdout.writelines([1]):(<type 'exceptions.TypeError'>, TypeError('writelines() requires list of strings',))
++> VimCommand
++vim.command(1):(<type 'exceptions.TypeError'>, TypeError('must be string, not int',))
++> VimToPython
++> VimEval
++vim.eval(1):(<type 'exceptions.TypeError'>, TypeError('must be string, not int',))
++> VimEvalPy
++vim.bindeval(1):(<type 'exceptions.TypeError'>, TypeError('must be string, not int',))
++> VimStrwidth
++vim.strwidth(1):(<type 'exceptions.TypeError'>, TypeError('must be string, not int',))
++> Dictionary
++>> DictionaryConstructor
++vim.Dictionary("abc"):(<type 'exceptions.ValueError'>, ValueError('expected sequence element of size 2',))
++>> DictionarySetattr
++del d.locked:(<type 'exceptions.AttributeError'>, AttributeError('cannot delete vim.Dictionary attributes',))
++d.locked = FailingTrue():(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++vim.vvars.locked = False:(<type 'exceptions.TypeError'>, TypeError('cannot modify fixed dictionary',))
++d.scope = True:(<type 'exceptions.AttributeError'>, AttributeError('cannot set this attribute',))
++d.xxx = True:(<type 'exceptions.AttributeError'>, AttributeError('cannot set this attribute',))
++>> _DictionaryItem
++d.get("a", 2, 3):(<type 'exceptions.TypeError'>, TypeError('function takes at most 2 arguments (3 given)',))
++>>> Testing StringToChars using d.get(%s)
++d.get(1):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.get(u"\0"):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.get("\0"):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++d.pop("a"):(<type 'exceptions.KeyError'>, KeyError('a',))
++dl.pop("a"):(<class 'vim.error'>, error('dict is locked',))
++>> DictionaryIterNext
++for i in ned: ned["a"] = 1:(<type 'exceptions.RuntimeError'>, RuntimeError('hashtab changed during iteration',))
++>> DictionaryAssItem
++dl["b"] = 1:(<class 'vim.error'>, error('dict is locked',))
++>>> Testing StringToChars using d[%s] = 1
++d[1] = 1:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d[u"\0"] = 1:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d["\0"] = 1:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = {%s : 1}
++d["a"] = {1 : 1}:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d["a"] = {u"\0" : 1}:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d["a"] = {"\0" : 1}:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = {"abc" : {%s : 1}}
++d["a"] = {"abc" : {1 : 1}}:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d["a"] = {"abc" : {u"\0" : 1}}:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d["a"] = {"abc" : {"\0" : 1}}:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = {"abc" : Mapping({%s : 1})}
++d["a"] = {"abc" : Mapping({1 : 1})}:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d["a"] = {"abc" : Mapping({u"\0" : 1})}:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d["a"] = {"abc" : Mapping({"\0" : 1})}:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using d["a"] = {"abc" : %s}
++d["a"] = {"abc" : FailingIter()}:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = {"abc" : FailingIterNext()}:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d["a"] = {"abc" : %s}
++d["a"] = {"abc" : None}:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = {"abc" : {"": 1}}:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = {"abc" : {u"": 1}}:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = {"abc" : FailingMapping()}:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d["a"] = {"abc" : FailingMappingKey()}:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d["a"] = Mapping({%s : 1})
++d["a"] = Mapping({1 : 1}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d["a"] = Mapping({u"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d["a"] = Mapping({"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = Mapping({"abc" : {%s : 1}})
++d["a"] = Mapping({"abc" : {1 : 1}}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d["a"] = Mapping({"abc" : {u"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d["a"] = Mapping({"abc" : {"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = Mapping({"abc" : Mapping({%s : 1})})
++d["a"] = Mapping({"abc" : Mapping({1 : 1})}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d["a"] = Mapping({"abc" : Mapping({u"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d["a"] = Mapping({"abc" : Mapping({"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using d["a"] = Mapping({"abc" : %s})
++d["a"] = Mapping({"abc" : FailingIter()}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = Mapping({"abc" : FailingIterNext()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abc" : %s})
++d["a"] = Mapping({"abc" : None}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = Mapping({"abc" : {"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = Mapping({"abc" : {u"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = Mapping({"abc" : FailingMapping()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d["a"] = Mapping({"abc" : FailingMappingKey()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using d["a"] = %s
++d["a"] = FailingIter():(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = FailingIterNext():(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d["a"] = %s
++d["a"] = None:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = {"": 1}:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = {u"": 1}:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = FailingMapping():(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d["a"] = FailingMappingKey():(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> DictionaryUpdate
++>>> kwargs
++>>> iter
++d.update(FailingMapping()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update([FailingIterNext()]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++>>> Testing StringToChars using d.update({%s : 1})
++d.update({1 : 1}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update({u"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update({"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update({"abc" : {%s : 1}})
++d.update({"abc" : {1 : 1}}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update({"abc" : {u"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update({"abc" : {"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update({"abc" : Mapping({%s : 1})})
++d.update({"abc" : Mapping({1 : 1})}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update({"abc" : Mapping({u"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update({"abc" : Mapping({"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using d.update({"abc" : %s})
++d.update({"abc" : FailingIter()}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update({"abc" : FailingIterNext()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update({"abc" : %s})
++d.update({"abc" : None}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update({"abc" : {"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update({"abc" : {u"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update({"abc" : FailingMapping()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update({"abc" : FailingMappingKey()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d.update(Mapping({%s : 1}))
++d.update(Mapping({1 : 1})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update(Mapping({u"\0" : 1})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update(Mapping({"\0" : 1})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update(Mapping({"abc" : {%s : 1}}))
++d.update(Mapping({"abc" : {1 : 1}})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update(Mapping({"abc" : {u"\0" : 1}})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update(Mapping({"abc" : {"\0" : 1}})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update(Mapping({"abc" : Mapping({%s : 1})}))
++d.update(Mapping({"abc" : Mapping({1 : 1})})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update(Mapping({"abc" : Mapping({u"\0" : 1})})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update(Mapping({"abc" : Mapping({"\0" : 1})})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using d.update(Mapping({"abc" : %s}))
++d.update(Mapping({"abc" : FailingIter()})):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update(Mapping({"abc" : FailingIterNext()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update(Mapping({"abc" : %s}))
++d.update(Mapping({"abc" : None})):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update(Mapping({"abc" : {"": 1}})):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update(Mapping({"abc" : {u"": 1}})):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update(Mapping({"abc" : FailingMapping()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update(Mapping({"abc" : FailingMappingKey()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using d.update(%s)
++d.update(FailingIter()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update(FailingIterNext()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update(%s)
++d.update(None):(<type 'exceptions.TypeError'>, TypeError("'NoneType' object is not iterable",))
++d.update({"": 1}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update({u"": 1}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update(FailingMapping()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update(FailingMappingKey()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d.update(((%s, 0),))
++d.update(((1, 0),)):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update(((u"\0", 0),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update((("\0", 0),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", {%s : 1}),))
++d.update((("a", {1 : 1}),)):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update((("a", {u"\0" : 1}),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update((("a", {"\0" : 1}),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", {"abc" : {%s : 1}}),))
++d.update((("a", {"abc" : {1 : 1}}),)):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update((("a", {"abc" : {u"\0" : 1}}),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update((("a", {"abc" : {"\0" : 1}}),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", {"abc" : Mapping({%s : 1})}),))
++d.update((("a", {"abc" : Mapping({1 : 1})}),)):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update((("a", {"abc" : Mapping({u"\0" : 1})}),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update((("a", {"abc" : Mapping({"\0" : 1})}),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using d.update((("a", {"abc" : %s}),))
++d.update((("a", {"abc" : FailingIter()}),)):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", {"abc" : FailingIterNext()}),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update((("a", {"abc" : %s}),))
++d.update((("a", {"abc" : None}),)):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", {"abc" : {"": 1}}),)):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", {"abc" : {u"": 1}}),)):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", {"abc" : FailingMapping()}),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update((("a", {"abc" : FailingMappingKey()}),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
++d.update((("a", Mapping({1 : 1})),)):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update((("a", Mapping({u"\0" : 1})),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update((("a", Mapping({"\0" : 1})),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", Mapping({"abc" : {%s : 1}})),))
++d.update((("a", Mapping({"abc" : {1 : 1}})),)):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update((("a", Mapping({"abc" : {u"\0" : 1}})),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update((("a", Mapping({"abc" : {"\0" : 1}})),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", Mapping({"abc" : Mapping({%s : 1})})),))
++d.update((("a", Mapping({"abc" : Mapping({1 : 1})})),)):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++d.update((("a", Mapping({"abc" : Mapping({u"\0" : 1})})),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++d.update((("a", Mapping({"abc" : Mapping({"\0" : 1})})),)):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using d.update((("a", Mapping({"abc" : %s})),))
++d.update((("a", Mapping({"abc" : FailingIter()})),)):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", Mapping({"abc" : FailingIterNext()})),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abc" : %s})),))
++d.update((("a", Mapping({"abc" : None})),)):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", Mapping({"abc" : {"": 1}})),)):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", Mapping({"abc" : {u"": 1}})),)):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", Mapping({"abc" : FailingMapping()})),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update((("a", Mapping({"abc" : FailingMappingKey()})),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using d.update((("a", %s),))
++d.update((("a", FailingIter()),)):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", FailingIterNext()),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update((("a", %s),))
++d.update((("a", None),)):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", {"": 1}),)):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", {u"": 1}),)):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", FailingMapping()),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++d.update((("a", FailingMappingKey()),)):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> DictionaryPopItem
++d.popitem(1, 2):(<type 'exceptions.TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
++>> DictionaryHasKey
++d.has_key():(<type 'exceptions.TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
++> List
++>> ListConstructor
++vim.List(1, 2):(<type 'exceptions.TypeError'>, TypeError('function takes at most 1 argument (2 given)',))
++vim.List(a=1):(<type 'exceptions.TypeError'>, TypeError('list constructor does not accept keyword arguments',))
++>>> Testing StringToChars using vim.List([{%s : 1}])
++vim.List([{1 : 1}]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++vim.List([{u"\0" : 1}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++vim.List([{"\0" : 1}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using vim.List([{"abc" : {%s : 1}}])
++vim.List([{"abc" : {1 : 1}}]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++vim.List([{"abc" : {u"\0" : 1}}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++vim.List([{"abc" : {"\0" : 1}}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using vim.List([{"abc" : Mapping({%s : 1})}])
++vim.List([{"abc" : Mapping({1 : 1})}]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++vim.List([{"abc" : Mapping({u"\0" : 1})}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++vim.List([{"abc" : Mapping({"\0" : 1})}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using vim.List([{"abc" : %s}])
++vim.List([{"abc" : FailingIter()}]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([{"abc" : FailingIterNext()}]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using vim.List([{"abc" : %s}])
++vim.List([{"abc" : None}]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([{"abc" : {"": 1}}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([{"abc" : {u"": 1}}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([{"abc" : FailingMapping()}]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++vim.List([{"abc" : FailingMappingKey()}]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using vim.List([Mapping({%s : 1})])
++vim.List([Mapping({1 : 1})]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++vim.List([Mapping({u"\0" : 1})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++vim.List([Mapping({"\0" : 1})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using vim.List([Mapping({"abc" : {%s : 1}})])
++vim.List([Mapping({"abc" : {1 : 1}})]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++vim.List([Mapping({"abc" : {u"\0" : 1}})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++vim.List([Mapping({"abc" : {"\0" : 1}})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using vim.List([Mapping({"abc" : Mapping({%s : 1})})])
++vim.List([Mapping({"abc" : Mapping({1 : 1})})]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++vim.List([Mapping({"abc" : Mapping({u"\0" : 1})})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++vim.List([Mapping({"abc" : Mapping({"\0" : 1})})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using vim.List([Mapping({"abc" : %s})])
++vim.List([Mapping({"abc" : FailingIter()})]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([Mapping({"abc" : FailingIterNext()})]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using vim.List([Mapping({"abc" : %s})])
++vim.List([Mapping({"abc" : None})]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([Mapping({"abc" : {"": 1}})]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([Mapping({"abc" : {u"": 1}})]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([Mapping({"abc" : FailingMapping()})]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++vim.List([Mapping({"abc" : FailingMappingKey()})]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using vim.List([%s])
++vim.List([FailingIter()]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([FailingIterNext()]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using vim.List([%s])
++vim.List([None]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([{"": 1}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([{u"": 1}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([FailingMapping()]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++vim.List([FailingMappingKey()]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> ListItem
++l[1000]:(<type 'exceptions.IndexError'>, IndexError('list index out of range',))
++>> ListAssItem
++ll[1] = 2:(<class 'vim.error'>, error('list is locked',))
++l[1000] = 3:(<type 'exceptions.IndexError'>, IndexError('list index out of range',))
++>> ListAssSlice
++ll[1:100] = "abc":(<class 'vim.error'>, error('list is locked',))
++>>> Testing StringToChars using l[:] = [{%s : 1}]
++l[:] = [{1 : 1}]:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l[:] = [{u"\0" : 1}]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l[:] = [{"\0" : 1}]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [{"abc" : {%s : 1}}]
++l[:] = [{"abc" : {1 : 1}}]:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l[:] = [{"abc" : {u"\0" : 1}}]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l[:] = [{"abc" : {"\0" : 1}}]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [{"abc" : Mapping({%s : 1})}]
++l[:] = [{"abc" : Mapping({1 : 1})}]:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l[:] = [{"abc" : Mapping({u"\0" : 1})}]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l[:] = [{"abc" : Mapping({"\0" : 1})}]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using l[:] = [{"abc" : %s}]
++l[:] = [{"abc" : FailingIter()}]:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [{"abc" : FailingIterNext()}]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l[:] = [{"abc" : %s}]
++l[:] = [{"abc" : None}]:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [{"abc" : {"": 1}}]:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [{"abc" : {u"": 1}}]:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [{"abc" : FailingMapping()}]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++l[:] = [{"abc" : FailingMappingKey()}]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
++l[:] = [Mapping({1 : 1})]:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l[:] = [Mapping({u"\0" : 1})]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l[:] = [Mapping({"\0" : 1})]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [Mapping({"abc" : {%s : 1}})]
++l[:] = [Mapping({"abc" : {1 : 1}})]:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l[:] = [Mapping({"abc" : {u"\0" : 1}})]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l[:] = [Mapping({"abc" : {"\0" : 1}})]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [Mapping({"abc" : Mapping({%s : 1})})]
++l[:] = [Mapping({"abc" : Mapping({1 : 1})})]:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l[:] = [Mapping({"abc" : Mapping({u"\0" : 1})})]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l[:] = [Mapping({"abc" : Mapping({"\0" : 1})})]:(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using l[:] = [Mapping({"abc" : %s})]
++l[:] = [Mapping({"abc" : FailingIter()})]:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [Mapping({"abc" : FailingIterNext()})]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abc" : %s})]
++l[:] = [Mapping({"abc" : None})]:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [Mapping({"abc" : {"": 1}})]:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [Mapping({"abc" : {u"": 1}})]:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [Mapping({"abc" : FailingMapping()})]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++l[:] = [Mapping({"abc" : FailingMappingKey()})]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using l[:] = [%s]
++l[:] = [FailingIter()]:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [FailingIterNext()]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l[:] = [%s]
++l[:] = [None]:(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [{"": 1}]:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [{u"": 1}]:(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [FailingMapping()]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++l[:] = [FailingMappingKey()]:(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> ListConcatInPlace
++>>> Testing StringToChars using l.extend([{%s : 1}])
++l.extend([{1 : 1}]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l.extend([{u"\0" : 1}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l.extend([{"\0" : 1}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l.extend([{"abc" : {%s : 1}}])
++l.extend([{"abc" : {1 : 1}}]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l.extend([{"abc" : {u"\0" : 1}}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l.extend([{"abc" : {"\0" : 1}}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l.extend([{"abc" : Mapping({%s : 1})}])
++l.extend([{"abc" : Mapping({1 : 1})}]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l.extend([{"abc" : Mapping({u"\0" : 1})}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l.extend([{"abc" : Mapping({"\0" : 1})}]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using l.extend([{"abc" : %s}])
++l.extend([{"abc" : FailingIter()}]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([{"abc" : FailingIterNext()}]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l.extend([{"abc" : %s}])
++l.extend([{"abc" : None}]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([{"abc" : {"": 1}}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([{"abc" : {u"": 1}}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([{"abc" : FailingMapping()}]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++l.extend([{"abc" : FailingMappingKey()}]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using l.extend([Mapping({%s : 1})])
++l.extend([Mapping({1 : 1})]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l.extend([Mapping({u"\0" : 1})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l.extend([Mapping({"\0" : 1})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l.extend([Mapping({"abc" : {%s : 1}})])
++l.extend([Mapping({"abc" : {1 : 1}})]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l.extend([Mapping({"abc" : {u"\0" : 1}})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l.extend([Mapping({"abc" : {"\0" : 1}})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using l.extend([Mapping({"abc" : Mapping({%s : 1})})])
++l.extend([Mapping({"abc" : Mapping({1 : 1})})]):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++l.extend([Mapping({"abc" : Mapping({u"\0" : 1})})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++l.extend([Mapping({"abc" : Mapping({"\0" : 1})})]):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using l.extend([Mapping({"abc" : %s})])
++l.extend([Mapping({"abc" : FailingIter()})]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([Mapping({"abc" : FailingIterNext()})]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l.extend([Mapping({"abc" : %s})])
++l.extend([Mapping({"abc" : None})]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([Mapping({"abc" : {"": 1}})]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([Mapping({"abc" : {u"": 1}})]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([Mapping({"abc" : FailingMapping()})]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++l.extend([Mapping({"abc" : FailingMappingKey()})]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using l.extend([%s])
++l.extend([FailingIter()]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([FailingIterNext()]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l.extend([%s])
++l.extend([None]):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([{"": 1}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([{u"": 1}]):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([FailingMapping()]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++l.extend([FailingMappingKey()]):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> ListSetattr
++del l.locked:(<type 'exceptions.AttributeError'>, AttributeError('cannot delete vim.List attributes',))
++l.locked = FailingTrue():(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++l.xxx = True:(<type 'exceptions.AttributeError'>, AttributeError('cannot set this attribute',))
++> Function
++>> FunctionConstructor
++vim.Function("123"):(<type 'exceptions.ValueError'>, ValueError('unnamed function does not exist',))
++vim.Function("xxx_non_existent_function_xxx"):(<type 'exceptions.ValueError'>, ValueError('function does not exist',))
++vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
++>> FunctionCall
++>>> Testing StringToChars using f({%s : 1})
++f({1 : 1}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++f({u"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++f({"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using f({"abc" : {%s : 1}})
++f({"abc" : {1 : 1}}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++f({"abc" : {u"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++f({"abc" : {"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using f({"abc" : Mapping({%s : 1})})
++f({"abc" : Mapping({1 : 1})}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++f({"abc" : Mapping({u"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++f({"abc" : Mapping({"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using f({"abc" : %s})
++f({"abc" : FailingIter()}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++f({"abc" : FailingIterNext()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using f({"abc" : %s})
++f({"abc" : None}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++f({"abc" : {"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++f({"abc" : {u"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++f({"abc" : FailingMapping()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++f({"abc" : FailingMappingKey()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using f(Mapping({%s : 1}))
++f(Mapping({1 : 1})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++f(Mapping({u"\0" : 1})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++f(Mapping({"\0" : 1})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using f(Mapping({"abc" : {%s : 1}}))
++f(Mapping({"abc" : {1 : 1}})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++f(Mapping({"abc" : {u"\0" : 1}})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++f(Mapping({"abc" : {"\0" : 1}})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using f(Mapping({"abc" : Mapping({%s : 1})}))
++f(Mapping({"abc" : Mapping({1 : 1})})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++f(Mapping({"abc" : Mapping({u"\0" : 1})})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++f(Mapping({"abc" : Mapping({"\0" : 1})})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using f(Mapping({"abc" : %s}))
++f(Mapping({"abc" : FailingIter()})):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++f(Mapping({"abc" : FailingIterNext()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using f(Mapping({"abc" : %s}))
++f(Mapping({"abc" : None})):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++f(Mapping({"abc" : {"": 1}})):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++f(Mapping({"abc" : {u"": 1}})):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++f(Mapping({"abc" : FailingMapping()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++f(Mapping({"abc" : FailingMappingKey()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using f(%s)
++f(FailingIter()):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++f(FailingIterNext()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using f(%s)
++f(None):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++f({"": 1}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++f({u"": 1}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++f(FailingMapping()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++f(FailingMappingKey()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using fd(self={%s : 1})
++fd(self={1 : 1}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++fd(self={u"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++fd(self={"\0" : 1}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using fd(self={"abc" : {%s : 1}})
++fd(self={"abc" : {1 : 1}}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++fd(self={"abc" : {u"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++fd(self={"abc" : {"\0" : 1}}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using fd(self={"abc" : Mapping({%s : 1})})
++fd(self={"abc" : Mapping({1 : 1})}):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++fd(self={"abc" : Mapping({u"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++fd(self={"abc" : Mapping({"\0" : 1})}):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using fd(self={"abc" : %s})
++fd(self={"abc" : FailingIter()}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self={"abc" : FailingIterNext()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using fd(self={"abc" : %s})
++fd(self={"abc" : None}):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self={"abc" : {"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++fd(self={"abc" : {u"": 1}}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++fd(self={"abc" : FailingMapping()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++fd(self={"abc" : FailingMappingKey()}):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using fd(self=Mapping({%s : 1}))
++fd(self=Mapping({1 : 1})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++fd(self=Mapping({u"\0" : 1})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++fd(self=Mapping({"\0" : 1})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using fd(self=Mapping({"abc" : {%s : 1}}))
++fd(self=Mapping({"abc" : {1 : 1}})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++fd(self=Mapping({"abc" : {u"\0" : 1}})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++fd(self=Mapping({"abc" : {"\0" : 1}})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing StringToChars using fd(self=Mapping({"abc" : Mapping({%s : 1})}))
++fd(self=Mapping({"abc" : Mapping({1 : 1})})):(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++fd(self=Mapping({"abc" : Mapping({u"\0" : 1})})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++fd(self=Mapping({"abc" : Mapping({"\0" : 1})})):(<type 'exceptions.TypeError'>, TypeError('expected string without null bytes',))
++<<< Finished
++>>> Testing *Iter* using fd(self=Mapping({"abc" : %s}))
++fd(self=Mapping({"abc" : FailingIter()})):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self=Mapping({"abc" : FailingIterNext()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using fd(self=Mapping({"abc" : %s}))
++fd(self=Mapping({"abc" : None})):(<type 'exceptions.TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self=Mapping({"abc" : {"": 1}})):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++fd(self=Mapping({"abc" : {u"": 1}})):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++fd(self=Mapping({"abc" : FailingMapping()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++fd(self=Mapping({"abc" : FailingMappingKey()})):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using fd(self=%s)
++fd(self=FailingIter()):(<type 'exceptions.TypeError'>, TypeError('unable to convert object to vim dictionary',))
++fd(self=FailingIterNext()):(<type 'exceptions.TypeError'>, TypeError('unable to convert object to vim dictionary',))
++<<< Finished
++>>> Testing ConvertFromPyObject using fd(self=%s)
++fd(self=None):(<type 'exceptions.TypeError'>, TypeError('unable to convert object to vim dictionary',))
++fd(self={"": 1}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++fd(self={u"": 1}):(<type 'exceptions.ValueError'>, ValueError('empty keys are not allowed',))
++fd(self=FailingMapping()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++fd(self=FailingMappingKey()):(<type 'exceptions.NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyMapping using fd(self=%s)
++fd(self=[]):(<type 'exceptions.TypeError'>, TypeError('unable to convert object to vim dictionary',))
++<<< Finished
++> TabPage
++>> TabPageAttr
++vim.current.tabpage.xxx:(<type 'exceptions.AttributeError'>, AttributeError('xxx',))
++> TabList
++>> TabListItem
++vim.tabpages[1000]:(<type 'exceptions.IndexError'>, IndexError('no such tab page',))
++> Window
++>> WindowAttr
++vim.current.window.xxx:(<type 'exceptions.AttributeError'>, AttributeError('xxx',))
++>> WindowSetattr
++vim.current.window.buffer = 0:(<type 'exceptions.TypeError'>, TypeError('readonly attribute',))
++vim.current.window.cursor = (100000000, 100000000):(<class 'vim.error'>, error('cursor position outside buffer',))
++vim.current.window.cursor = True:(<type 'exceptions.TypeError'>, TypeError('argument must be 2-item sequence, not bool',))
++vim.current.window.height = "abc":(<type 'exceptions.TypeError'>, TypeError('an integer is required',))
++vim.current.window.width  = "abc":(<type 'exceptions.TypeError'>, TypeError('an integer is required',))
++vim.current.window.xxxxxx = True:(<type 'exceptions.AttributeError'>, AttributeError('xxxxxx',))
++> WinList
++>> WinListItem
++vim.windows[1000]:(<type 'exceptions.IndexError'>, IndexError('no such window',))
++> Buffer
++>> StringToLine (indirect)
++vim.current.buffer[0] = "\na":(<class 'vim.error'>, error('string cannot contain newlines',))
++>> SetBufferLine (indirect)
++vim.current.buffer[0] = True:(<type 'exceptions.TypeError'>, TypeError('bad argument type for built-in operation',))
++>> SetBufferLines (indirect)
++vim.current.buffer[:] = True:(<type 'exceptions.TypeError'>, TypeError('bad argument type for built-in operation',))
++vim.current.buffer[:] = ["\na", "bc"]:(<class 'vim.error'>, error('string cannot contain newlines',))
++>> InsertBufferLines (indirect)
++vim.current.buffer.append(None):(<type 'exceptions.TypeError'>, TypeError('bad argument type for built-in operation',))
++vim.current.buffer.append(["\na", "bc"]):(<class 'vim.error'>, error('string cannot contain newlines',))
++vim.current.buffer.append("\nbc"):(<class 'vim.error'>, error('string cannot contain newlines',))
++>> RBItem
++vim.current.buffer[100000000]:(<type 'exceptions.IndexError'>, IndexError('line number out of range',))
++>> RBAsItem
++vim.current.buffer[100000000] = "":(<type 'exceptions.IndexError'>, IndexError('line number out of range',))
++>> BufferAttr
++vim.current.buffer.xxx:(<type 'exceptions.AttributeError'>, AttributeError('xxx',))
++>> BufferSetattr
++vim.current.buffer.name = True:(<type 'exceptions.TypeError'>, TypeError('object must be string',))
++vim.current.buffer.xxx = True:(<type 'exceptions.AttributeError'>, AttributeError('xxx',))
++>> BufferMark
++vim.current.buffer.mark(0):(<type 'exceptions.TypeError'>, TypeError('must be string, not int',))
++vim.current.buffer.mark("abc"):(<type 'exceptions.ValueError'>, ValueError('mark name must be a single character',))
++vim.current.buffer.mark("!"):(<class 'vim.error'>, error('invalid mark name',))
++>> BufferRange
++vim.current.buffer.range(1, 2, 3):(<type 'exceptions.TypeError'>, TypeError('function takes exactly 2 arguments (3 given)',))
++> BufMap
++>> BufMapItem
++vim.buffers[None]:(<type 'exceptions.TypeError'>, TypeError('key must be integer',))
++vim.buffers[100000000]:(<type 'exceptions.KeyError'>, KeyError(100000000,))
++> Current
++>> CurrentGetattr
++vim.current.xxx:(<type 'exceptions.AttributeError'>, AttributeError('xxx',))
++>> CurrentSetattr
++vim.current.line = True:(<type 'exceptions.TypeError'>, TypeError('bad argument type for built-in operation',))
++vim.current.buffer = True:(<type 'exceptions.TypeError'>, TypeError('expected vim.Buffer object',))
++vim.current.window = True:(<type 'exceptions.TypeError'>, TypeError('expected vim.Window object',))
++vim.current.tabpage = True:(<type 'exceptions.TypeError'>, TypeError('expected vim.TabPage object',))
++vim.current.xxx = True:(<type 'exceptions.AttributeError'>, AttributeError('xxx',))
++vim.command("throw 'abc'"):(<class 'vim.error'>, error('abc',))
++Exe("throw 'def'"):(<class 'vim.error'>, error('def',))
++vim.eval("Exe('throw ''ghi''')"):(<class 'vim.error'>, error('ghi',))
++vim.eval("Exe('echoerr ''jkl''')"):(<class 'vim.error'>, error('Vim(echoerr):jkl',))
++vim.eval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
++vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
+diff -Naur vim73.orig/src/testdir/test87.in vim73/src/testdir/test87.in
+--- vim73.orig/src/testdir/test87.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test87.in	2013-06-07 17:07:38.232232831 +0000
+@@ -0,0 +1,1063 @@
++Tests for various python features.     vim: set ft=vim :
++
++STARTTEST
++:so small.vim
++:if !has('python3') | e! test.ok | wq! test.out | endif
++:lang C
++:py3 import vim
++:fun Test()
++:let l = []
++:py3 l=vim.bindeval('l')
++:py3 f=vim.bindeval('function("strlen")')
++:" Extending List directly with different types
++:py3 l+=[1, "as'd", [1, 2, f, {'a': 1}]]
++:$put =string(l)
++:$put =string(l[-1])
++:try
++:  $put =string(l[-4])
++:catch
++:  $put =v:exception[:13]
++:endtry
++:" List assignment
++:py3 l[0]=0
++:$put =string(l)
++:py3 l[-2]=f
++:$put =string(l)
++:"
++:" Extending Dictionary directly with different types
++:let d = {}
++:fun d.f()
++:  return 1
++:endfun
++py3 << EOF
++d=vim.bindeval('d')
++d['1']='asd'
++d.update(b=[1, 2, f])
++d.update((('-1', {'a': 1}),))
++d.update({'0': -1})
++dk = d.keys()
++dv = d.values()
++di = d.items()
++dk.sort(key=repr)
++dv.sort(key=repr)
++di.sort(key=repr)
++EOF
++:$put =py3eval('d[''f''](self={})')
++:$put =py3eval('repr(dk)')
++:$put =substitute(py3eval('repr(dv)'),'0x\x\+','','g')
++:$put =substitute(py3eval('repr(di)'),'0x\x\+','','g')
++:for [key, Val] in sort(items(d))
++:  $put =string(key) . ' : ' . string(Val)
++:  unlet key Val
++:endfor
++:"
++:" removing items with del
++:py3 del l[2]
++:$put =string(l)
++:let l = range(8)
++:py3 l=vim.bindeval('l')
++:try
++:   py3 del l[:3]
++:   py3 del l[1:]
++:catch
++:   $put =v:exception
++:endtry
++:$put =string(l)
++:"
++:py3 del d['-1']
++:py3 del d['f']
++:$put =string(py3eval('d.get(''b'', 1)'))
++:$put =string(py3eval('d.pop(''b'')'))
++:$put =string(py3eval('d.get(''b'', 1)'))
++:$put =string(py3eval('d.pop(''1'', 2)'))
++:$put =string(py3eval('d.pop(''1'', 2)'))
++:$put =py3eval('repr(d.has_key(''0''))')
++:$put =py3eval('repr(d.has_key(''1''))')
++:$put =py3eval('repr(''0'' in d)')
++:$put =py3eval('repr(''1'' in d)')
++:$put =py3eval('repr(list(iter(d)))')
++:$put =string(d)
++:$put =py3eval('repr(d.popitem())')
++:$put =py3eval('repr(d.get(''0''))')
++:$put =py3eval('repr(list(iter(d)))')
++:"
++:" removing items out of range: silently skip items that don't exist
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:" The following two ranges delete nothing as they match empty list:
++:py3 del l[2:1]
++:$put =string(l)
++:py3 del l[2:2]
++:$put =string(l)
++:py3 del l[2:3]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 del l[2:4]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 del l[2:5]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 del l[2:6]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:" The following two ranges delete nothing as they match empty list:
++:py3 del l[-1:2]
++:$put =string(l)
++:py3 del l[-2:2]
++:$put =string(l)
++:py3 del l[-3:2]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 del l[-4:2]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 del l[-5:2]
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 del l[-6:2]
++:$put =string(l)
++:"
++:" Slice assignment to a list
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 l[0:0]=['a']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 l[1:2]=['b']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 l[2:4]=['c']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 l[4:4]=['d']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 l[-1:2]=['e']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 l[-10:2]=['f']
++:$put =string(l)
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:py3 l[2:-10]=['g']
++:$put =string(l)
++:let l = []
++:py3 l=vim.bindeval('l')
++:py3 l[0:0]=['h']
++:$put =string(l)
++:"
++:" Locked variables
++:let l = [0, 1, 2, 3]
++:py3 l=vim.bindeval('l')
++:lockvar! l
++:py3 l[2]='i'
++:$put =string(l)
++:unlockvar! l
++:"
++:" Function calls
++:function New(...)
++:return ['NewStart']+a:000+['NewEnd']
++:endfunction
++:function DictNew(...) dict
++:return ['DictNewStart']+a:000+['DictNewEnd', self]
++:endfunction
++:let l=[function('New'), function('DictNew')]
++:py3 l=vim.bindeval('l')
++:py3 l.extend(list(l[0](1, 2, 3)))
++:$put =string(l)
++:py3 l.extend(list(l[1](1, 2, 3, self={'a': 'b'})))
++:$put =string(l)
++:py3 l+=[l[0].name]
++:$put =string(l)
++:try
++:   py3 l[1](1, 2, 3)
++:catch
++:   $put =v:exception[:13]
++:endtry
++:py3 f=l[0]
++:delfunction New
++:try
++:   py3 f(1, 2, 3)
++:catch
++:   $put =v:exception[:13]
++:endtry
++:if has('float')
++:   let l=[0.0]
++:   py3 l=vim.bindeval('l')
++:   py3 l.extend([0.0])
++:   $put =string(l)
++:else
++:   $put ='[0.0, 0.0]'
++:endif
++:let messages=[]
++:py3 <<EOF
++d=vim.bindeval('{}')
++m=vim.bindeval('messages')
++def em(expr, g=globals(), l=locals()):
++    try:
++        exec(expr, g, l)
++    except Exception as e:
++        m.extend([e.__class__.__name__])
++
++em('d["abc"]')
++em('d["abc"]="\\0"')
++em('d["abc"]=vim')
++em('d[""]=1')
++em('d["a\\0b"]=1')
++em('d[b"a\\0b"]=1')
++
++em('d.pop("abc")')
++em('d.popitem()')
++EOF
++:$put =messages
++:unlet messages
++:" locked and scope attributes
++:let d={} | let dl={} | lockvar dl
++:for s in split("d dl v: g:")
++:    let name=tr(s, ':', 's')
++:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
++:    let toput=s.' : '.join(map(['locked', 'scope'], 'v:val.":".py3eval(name.".".v:val)'), ';')
++:    $put =toput
++:endfor
++:silent! let d.abc=1
++:silent! let dl.abc=1
++:py3 d.locked=True
++:py3 dl.locked=False
++:silent! let d.def=1
++:silent! let dl.def=1
++:put ='d:'.string(d)
++:put ='dl:'.string(dl)
++:unlet d dl
++:
++:let l=[] | let ll=[] | lockvar ll
++:for s in split("l ll")
++:    let name=tr(s, ':', 's')
++:    execute 'py3 '.name.'=vim.bindeval("'.s.'")'
++:    let toput=s.' : locked:'.py3eval(name.'.locked')
++:    $put =toput
++:endfor
++:silent! call extend(l, [0])
++:silent! call extend(ll, [0])
++:py3 l.locked=True
++:py3 ll.locked=False
++:silent! call extend(l, [1])
++:silent! call extend(ll, [1])
++:put ='l:'.string(l)
++:put ='ll:'.string(ll)
++:unlet l ll
++:"
++:" py3eval()
++:let l=py3eval('[0, 1, 2]')
++:$put =string(l)
++:let d=py3eval('{"a": "b", "c": 1, "d": ["e"]}')
++:$put =sort(items(d))
++:if has('float')
++:   let f=py3eval('0.0')
++:   $put =string(f)
++:else
++:   $put ='0.0'
++:endif
++:" Invalid values:
++:for e in ['"\0"', '{"\0": 1}', 'undefined_name', 'vim']
++:   try
++:      let v=py3eval(e)
++:   catch
++:      let toput=e.":\t".v:exception[:13]
++:      $put =toput
++:   endtry
++:endfor
++:"
++:" threading
++:let l = [0]
++:py3 l=vim.bindeval('l')
++:py3 <<EOF
++import threading
++import time
++
++class T(threading.Thread):
++    def __init__(self):
++        threading.Thread.__init__(self)
++        self.t = 0
++        self.running = True
++
++    def run(self):
++        while self.running:
++            self.t += 1
++            time.sleep(0.1)
++
++t = T()
++t.start()
++EOF
++:sleep 1
++:py3 t.running = False
++:py3 t.join()
++:py3 l[0] = t.t > 8  # check if the background thread is working
++:$put =string(l)
++:"
++:" settrace
++:let l = []
++:py3 l=vim.bindeval('l')
++:py3 <<EOF
++import sys
++
++def traceit(frame, event, arg):
++    global l
++    if event == "line":
++        l += [frame.f_lineno]
++    return traceit
++
++def trace_main():
++    for i in range(5):
++        pass
++EOF
++:py3 sys.settrace(traceit)
++:py3 trace_main()
++:py3 sys.settrace(None)
++:$put =string(l)
++:"
++:" Vars
++:let g:foo = 'bac'
++:let w:abc = 'def'
++:let b:baz = 'bar'
++:let t:bar = 'jkl'
++:try
++:  throw "Abc"
++:catch
++:  put =py3eval('vim.vvars[''exception'']')
++:endtry
++:put =py3eval('vim.vars[''foo'']')
++:put =py3eval('vim.current.window.vars[''abc'']')
++:put =py3eval('vim.current.buffer.vars[''baz'']')
++:put =py3eval('vim.current.tabpage.vars[''bar'']')
++:"
++:" Options
++:" paste:          boolean, global
++:" previewheight   number,  global
++:" operatorfunc:   string,  global
++:" number:         boolean, window-local
++:" numberwidth:    number,  window-local
++:" colorcolumn:    string,  window-local
++:" statusline:     string,  window-local/global
++:" autoindent:     boolean, buffer-local
++:" shiftwidth:     number,  buffer-local
++:" omnifunc:       string,  buffer-local
++:" preserveindent: boolean, buffer-local/global
++:" path:           string,  buffer-local/global
++:let g:bufs=[bufnr('%')]
++:new
++:let g:bufs+=[bufnr('%')]
++:vnew
++:let g:bufs+=[bufnr('%')]
++:wincmd j
++:vnew
++:let g:bufs+=[bufnr('%')]
++:wincmd l
++:fun RecVars(opt)
++:  let gval =string(eval('&g:'.a:opt))
++:  let wvals=join(map(range(1, 4),  'v:val.":".string(getwinvar(v:val, "&".a:opt))'))
++:  let bvals=join(map(copy(g:bufs), 'v:val.":".string(getbufvar(v:val, "&".a:opt))'))
++:  put ='  G: '.gval
++:  put ='  W: '.wvals
++:  put ='  B: '.wvals
++:endfun
++py3 << EOF
++def e(s, g=globals(), l=locals()):
++    try:
++        exec(s, g, l)
++    except Exception as e:
++        vim.command('return ' + repr(e.__class__.__name__))
++
++def ev(s, g=globals(), l=locals()):
++    try:
++        return eval(s, g, l)
++    except Exception as e:
++        vim.command('let exc=' + repr(e.__class__.__name__))
++        return 0
++EOF
++:function E(s)
++:   python3 e(vim.eval('a:s'))
++:endfunction
++:function Ev(s)
++:   let r=py3eval('ev(vim.eval("a:s"))')
++:   if exists('exc')
++:       throw exc
++:   endif
++:   return r
++:endfunction
++:py3 gopts1=vim.options
++:py3 wopts1=vim.windows[2].options
++:py3 wopts2=vim.windows[0].options
++:py3 wopts3=vim.windows[1].options
++:py3 bopts1=vim.buffers[vim.bindeval("g:bufs")[2]].options
++:py3 bopts2=vim.buffers[vim.bindeval("g:bufs")[1]].options
++:py3 bopts3=vim.buffers[vim.bindeval("g:bufs")[0]].options
++:set path=.,..,,
++:let lst=[]
++:let lst+=[['paste',          1,     0,     1,     2,      1,    1,      0    ]]
++:let lst+=[['previewheight',  5,     1,     6,     'a',    0,    1,      0    ]]
++:let lst+=[['operatorfunc',   'A',   'B',   'C',   2,      0,    1,      0    ]]
++:let lst+=[['number',         0,     1,     1,     0,      1,    0,      1    ]]
++:let lst+=[['numberwidth',    2,     3,     5,     -100,   0,    0,      1    ]]
++:let lst+=[['colorcolumn',    '+1',  '+2',  '+3',  'abc',  0,    0,      1    ]]
++:let lst+=[['statusline',     '1',   '2',   '4',   0,      0,    1,      1    ]]
++:let lst+=[['autoindent',     0,     1,     1,     2,      1,    0,      2    ]]
++:let lst+=[['shiftwidth',     0,     2,     1,     3,      0,    0,      2    ]]
++:let lst+=[['omnifunc',       'A',   'B',   'C',   1,      0,    0,      2    ]]
++:let lst+=[['preserveindent', 0,     1,     1,     2,      1,    1,      2    ]]
++:let lst+=[['path',           '.,,', ',,',  '.',   0,      0,    1,      2    ]]
++:for       [oname,            oval1, oval2, oval3, invval, bool, global, local] in lst
++:   py3 oname=vim.eval('oname')
++:   py3 oval1=vim.bindeval('oval1')
++:   py3 oval2=vim.bindeval('oval2')
++:   py3 oval3=vim.bindeval('oval3')
++:   if invval is 0 || invval is 1
++:       py3 invval=bool(vim.bindeval('invval'))
++:   else
++:       py3 invval=vim.bindeval('invval')
++:   endif
++:   if bool
++:       py3 oval1=bool(oval1)
++:       py3 oval2=bool(oval2)
++:       py3 oval3=bool(oval3)
++:   endif
++:   put ='>>> '.oname
++:   for v in ['gopts1', 'wopts1', 'bopts1']
++:       try
++:           put ='  p/'.v.': '.Ev('repr('.v.'['''.oname.'''])')
++:       catch
++:           put ='  p/'.v.'! '.v:exception
++:       endtry
++:       let r=E(v.'['''.oname.''']=invval')
++:       if r isnot 0
++:           put ='  inv: '.string(invval).'! '.r
++:       endif
++:       for vv in (v is# 'gopts1' ? [v] : [v, v[:-2].'2', v[:-2].'3'])
++:           let val=substitute(vv, '^.opts', 'oval', '')
++:           let r=E(vv.'['''.oname.''']='.val)
++:           if r isnot 0
++:               put ='  '.vv.'! '.r
++:           endif
++:       endfor
++:   endfor
++:   call RecVars(oname)
++:   for v in ['wopts3', 'bopts3']
++:       let r=E('del '.v.'["'.oname.'"]')
++:       if r isnot 0
++:           put ='  del '.v.'! '.r
++:       endif
++:   endfor
++:   call RecVars(oname)
++:endfor
++:only
++:for buf in g:bufs[1:]
++:   execute 'bwipeout!' buf
++:endfor
++:"
++:" Test buffer object
++:vnew
++:put ='First line'
++:put ='Second line'
++:put ='Third line'
++:1 delete _
++:py3 b=vim.current.buffer
++:wincmd w
++:mark a
++:augroup BUFS
++:   autocmd BufFilePost * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePost:' + vim.eval('bufnr("%")'))
++:   autocmd BufFilePre * python3 cb.append(vim.eval('expand("<abuf>")') + ':BufFilePre:' + vim.eval('bufnr("%")'))
++:augroup END
++py3 << EOF
++cb = vim.current.buffer
++# Tests BufferAppend and BufferItem
++cb.append(b[0])
++# Tests BufferSlice and BufferAssSlice
++cb.append('abc') # Will be overwritten
++cb[-1:] = b[:-2]
++# Test BufferLength and BufferAssSlice
++cb.append('def') # Will not be overwritten
++cb[len(cb):] = b[:]
++# Test BufferAssItem and BufferMark
++cb.append('ghi') # Will be overwritten
++cb[-1] = repr((len(cb) - cb.mark('a')[0], cb.mark('a')[1]))
++# Test BufferRepr
++cb.append(repr(cb) + repr(b))
++# Modify foreign buffer
++b.append('foo')
++b[0]='bar'
++b[0:0]=['baz']
++vim.command('call append("$", getbufline(%i, 1, "$"))' % b.number)
++# Test assigning to name property
++import os
++old_name = cb.name
++cb.name = 'foo'
++cb.append(cb.name[-11:].replace(os.path.sep, '/'))
++b.name = 'bar'
++cb.append(b.name[-11:].replace(os.path.sep, '/'))
++cb.name = old_name
++cb.append(cb.name[-17:].replace(os.path.sep, '/'))
++# Test CheckBuffer
++for _b in vim.buffers:
++    if _b is not cb:
++        vim.command('bwipeout! ' + str(_b.number))
++del _b
++cb.append('valid: b:%s, cb:%s' % (repr(b.valid), repr(cb.valid)))
++for expr in ('b[1]','b[:] = ["A", "B"]','b[:]','b.append("abc")'):
++    try:
++        exec(expr)
++    except vim.error:
++        pass
++    else:
++        # Usually a SEGV here
++        # Should not happen in any case
++        cb.append('No exception for ' + expr)
++vim.command('cd .')
++EOF
++:"
++:" Test vim.buffers object
++:set hidden
++:edit a
++:buffer #
++:edit b
++:buffer #
++:edit c
++:buffer #
++py3 << EOF
++# Check GCing iterator that was not fully exhausted
++i = iter(vim.buffers)
++cb.append('i:' + str(next(i)))
++# and also check creating more then one iterator at a time
++i2 = iter(vim.buffers)
++cb.append('i2:' + str(next(i2)))
++cb.append('i:' + str(next(i)))
++# The following should trigger GC and not cause any problems
++del i
++del i2
++i3 = iter(vim.buffers)
++cb.append('i3:' + str(next(i3)))
++del i3
++
++prevnum = 0
++for b in vim.buffers:
++    # Check buffer order
++    if prevnum >= b.number:
++        cb.append('!!! Buffer numbers not in strictly ascending order')
++    # Check indexing: vim.buffers[number].number == number
++    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
++    prevnum = b.number
++
++cb.append(str(len(vim.buffers)))
++
++bnums = list(map(lambda b: b.number, vim.buffers))[1:]
++
++# Test wiping out buffer with existing iterator
++i4 = iter(vim.buffers)
++cb.append('i4:' + str(next(i4)))
++vim.command('bwipeout! ' + str(bnums.pop(0)))
++try:
++    next(i4)
++except vim.error:
++    pass
++else:
++    cb.append('!!!! No vim.error')
++i4 = iter(vim.buffers)
++vim.command('bwipeout! ' + str(bnums.pop(-1)))
++vim.command('bwipeout! ' + str(bnums.pop(-1)))
++cb.append('i4:' + str(next(i4)))
++try:
++    next(i4)
++except StopIteration:
++    cb.append('StopIteration')
++EOF
++:"
++:" Test vim.{tabpage,window}list and vim.{tabpage,window} objects
++:tabnew 0
++:tabnew 1
++:vnew a.1
++:tabnew 2
++:vnew a.2
++:vnew b.2
++:vnew c.2
++py3 << EOF
++cb.append('Number of tabs: ' + str(len(vim.tabpages)))
++cb.append('Current tab pages:')
++
++def W(w):
++    if '(unknown)' in repr(w):
++        return '<window object (unknown)>'
++    else:
++        return repr(w)
++
++def Cursor(w, start=len(cb)):
++    if w.buffer is cb:
++        return repr((start - w.cursor[0], w.cursor[1]))
++    else:
++        return repr(w.cursor)
++
++for t in vim.tabpages:
++    cb.append('  ' + repr(t) + '(' + str(t.number) + ')' + ': ' + str(len(t.windows)) + ' windows, current is ' + W(t.window))
++    cb.append('  Windows:')
++    for w in t.windows:
++        cb.append('    ' + W(w) + '(' + str(w.number) + ')' + ': displays buffer ' + repr(w.buffer) + '; cursor is at ' + Cursor(w))
++        # Other values depend on the size of the terminal, so they are checked partly:
++        for attr in ('height', 'row', 'width', 'col'):
++            try:
++                aval = getattr(w, attr)
++                if type(aval) is not int:
++                    raise TypeError
++                if aval < 0:
++                    raise ValueError
++            except Exception as e:
++                cb.append('!!!!!! Error while getting attribute ' + attr + ': ' + e.__class__.__name__)
++        w.cursor = (len(w.buffer), 0)
++cb.append('Number of windows in current tab page: ' + str(len(vim.windows)))
++if list(vim.windows) != list(vim.current.tabpage.windows):
++    cb.append('!!!!!! Windows differ')
++EOF
++:"
++:" Test vim.current
++py3 << EOF
++def H(o):
++    return repr(o)
++cb.append('Current tab page: ' + repr(vim.current.tabpage))
++cb.append('Current window: ' + repr(vim.current.window) + ': ' + H(vim.current.window) + ' is ' + H(vim.current.tabpage.window))
++cb.append('Current buffer: ' + repr(vim.current.buffer) + ': ' + H(vim.current.buffer) + ' is ' + H(vim.current.window.buffer)+ ' is ' + H(vim.current.tabpage.window.buffer))
++# Assigning: fails
++try:
++    vim.current.window = vim.tabpages[0].window
++except ValueError:
++    cb.append('ValueError at assigning foreign tab window')
++
++for attr in ('window', 'tabpage', 'buffer'):
++    try:
++        setattr(vim.current, attr, None)
++    except TypeError:
++        cb.append('Type error at assigning None to vim.current.' + attr)
++
++# Assigning: success
++vim.current.tabpage = vim.tabpages[-2]
++vim.current.buffer = cb
++vim.current.window = vim.windows[0]
++vim.current.window.cursor = (len(vim.current.buffer), 0)
++cb.append('Current tab page: ' + repr(vim.current.tabpage))
++cb.append('Current window: ' + repr(vim.current.window))
++cb.append('Current buffer: ' + repr(vim.current.buffer))
++cb.append('Current line: ' + repr(vim.current.line))
++ws = list(vim.windows)
++ts = list(vim.tabpages)
++for b in vim.buffers:
++    if b is not cb:
++        vim.command('bwipeout! ' + str(b.number))
++cb.append('w.valid: ' + repr([w.valid for w in ws]))
++cb.append('t.valid: ' + repr([t.valid for t in ts]))
++EOF
++:tabonly!
++:only!
++:"
++:" Test types
++py3 << EOF
++for expr, attr in (
++    ('vim.vars',                         'Dictionary'),
++    ('vim.options',                      'Options'),
++    ('vim.bindeval("{}")',               'Dictionary'),
++    ('vim.bindeval("[]")',               'List'),
++    ('vim.bindeval("function(\'tr\')")', 'Function'),
++    ('vim.current.buffer',               'Buffer'),
++    ('vim.current.range',                'Range'),
++    ('vim.current.window',               'Window'),
++    ('vim.current.tabpage',              'TabPage'),
++):
++    cb.append(expr + ':' + attr + ':' + repr(type(eval(expr)) is getattr(vim, attr)))
++EOF
++:"
++:" Test __dir__() method
++py3 << EOF
++for name, o in (
++        ('current',    vim.current),
++        ('buffer',     vim.current.buffer),
++        ('window',     vim.current.window),
++        ('tabpage',    vim.current.tabpage),
++        ('range',      vim.current.range),
++        ('dictionary', vim.bindeval('{}')),
++        ('list',       vim.bindeval('[]')),
++        ('function',   vim.bindeval('function("tr")')),
++        ('output',     sys.stdout),
++    ):
++    cb.append(name + ':' + ','.join(dir(o)))
++del name
++del o
++EOF
++:"
++:" Test vim.*.__new__
++:$put =string(py3eval('vim.Dictionary({})'))
++:$put =string(py3eval('vim.Dictionary(a=1)'))
++:$put =string(py3eval('vim.Dictionary(((''a'', 1),))'))
++:$put =string(py3eval('vim.List()'))
++:$put =string(py3eval('vim.List(iter(''abc''))'))
++:$put =string(py3eval('vim.Function(''tr'')'))
++:"
++:" Test stdout/stderr
++:redir => messages
++:py3 sys.stdout.write('abc') ; sys.stdout.write('def')
++:py3 sys.stderr.write('abc') ; sys.stderr.write('def')
++:py3 sys.stdout.writelines(iter('abc'))
++:py3 sys.stderr.writelines(iter('abc'))
++:redir END
++:$put =string(substitute(messages, '\d\+', '', 'g'))
++:" Test subclassing
++:fun Put(...)
++:   $put =string(a:000)
++:   return a:000
++:endfun
++py3 << EOF
++class DupDict(vim.Dictionary):
++    def __setitem__(self, key, value):
++        super(DupDict, self).__setitem__(key, value)
++        super(DupDict, self).__setitem__('dup_' + key, value)
++dd = DupDict()
++dd['a'] = 'b'
++
++class DupList(vim.List):
++    def __getitem__(self, idx):
++        return [super(DupList, self).__getitem__(idx)] * 2
++
++dl = DupList()
++dl2 = DupList(iter('abc'))
++dl.extend(dl2[0])
++
++class DupFun(vim.Function):
++    def __call__(self, arg):
++        return super(DupFun, self).__call__(arg, arg)
++
++df = DupFun('Put')
++EOF
++:$put =string(sort(keys(py3eval('dd'))))
++:$put =string(py3eval('dl'))
++:$put =string(py3eval('dl2'))
++:$put =string(py3eval('df(2)'))
++:"
++:" Test chdir
++py3 << EOF
++import os
++fnamemodify = vim.Function('fnamemodify')
++cb.append(str(fnamemodify('.', ':p:h:t')))
++cb.append(vim.eval('@%'))
++os.chdir('..')
++cb.append(str(fnamemodify('.', ':p:h:t')))
++cb.append(vim.eval('@%').replace(os.path.sep, '/'))
++os.chdir('testdir')
++cb.append(str(fnamemodify('.', ':p:h:t')))
++cb.append(vim.eval('@%'))
++EOF
++:"
++:" Test errors
++:fun F() dict
++:endfun
++:fun D()
++:endfun
++py3 << EOF
++def ee(expr, g=globals(), l=locals()):
++    try:
++        try:
++            exec(expr, g, l)
++        except Exception as e:
++            if sys.version_info >= (3, 3) and e.__class__ is AttributeError and str(e).find('has no attribute')>=0 and not str(e).startswith("'vim."):
++                cb.append(expr + ':' + repr((e.__class__, AttributeError(str(e)[str(e).rfind(" '") + 2:-1]))))
++            else:
++                cb.append(expr + ':' + repr((e.__class__, e)))
++        else:
++            cb.append(expr + ':NOT FAILED')
++    except Exception as e:
++        cb.append(expr + '::' + repr((e.__class__, e)))
++
++d = vim.Dictionary()
++ned = vim.Dictionary(foo='bar', baz='abc')
++dl = vim.Dictionary(a=1)
++dl.locked = True
++l = vim.List()
++ll = vim.List('abc')
++ll.locked = True
++f = vim.Function('string')
++fd = vim.Function('F')
++fdel = vim.Function('D')
++vim.command('delfunction D')
++
++def subexpr_test(expr, name, subexprs):
++    cb.append('>>> Testing %s using %s' % (name, expr))
++    for subexpr in subexprs:
++        ee(expr % subexpr)
++    cb.append('<<< Finished')
++
++def stringtochars_test(expr):
++    return subexpr_test(expr, 'StringToChars', (
++        '1',       # Fail type checks
++        'b"\\0"',  # Fail PyString_AsStringAndSize(object, , NULL) check
++        '"\\0"',   # Fail PyString_AsStringAndSize(bytes, , NULL) check
++    ))
++
++class Mapping(object):
++    def __init__(self, d):
++        self.d = d
++
++    def __getitem__(self, key):
++        return self.d[key]
++
++    def keys(self):
++        return self.d.keys()
++
++    def items(self):
++        return self.d.items()
++
++def convertfrompyobject_test(expr, recurse=True):
++    # pydict_to_tv
++    stringtochars_test(expr % '{%s : 1}')
++    if recurse:
++        convertfrompyobject_test(expr % '{"abc" : %s}', False)
++    # pymap_to_tv
++    stringtochars_test(expr % 'Mapping({%s : 1})')
++    if recurse:
++        convertfrompyobject_test(expr % 'Mapping({"abc" : %s})', False)
++    # pyseq_to_tv
++    iter_test(expr)
++    return subexpr_test(expr, 'ConvertFromPyObject', (
++        'None',                 # Not conversible
++        '{b"": 1}',             # Empty key not allowed
++        '{"": 1}',              # Same, but with unicode object
++        'FailingMapping()',     #
++        'FailingMappingKey()',  #
++    ))
++
++def convertfrompymapping_test(expr):
++    convertfrompyobject_test(expr)
++    return subexpr_test(expr, 'ConvertFromPyMapping', (
++        '[]',
++    ))
++
++def iter_test(expr):
++    return subexpr_test(expr, '*Iter*', (
++        'FailingIter()',
++        'FailingIterNext()',
++    ))
++
++class FailingTrue(object):
++    def __bool__(self):
++        raise NotImplementedError
++
++class FailingIter(object):
++    def __iter__(self):
++        raise NotImplementedError
++
++class FailingIterNext(object):
++    def __iter__(self):
++        return self
++
++    def __next__(self):
++        raise NotImplementedError
++
++class FailingMappingKey(object):
++    def __getitem__(self, item):
++        raise NotImplementedError
++
++    def keys(self):
++        return list("abc")
++
++class FailingMapping(object):
++    def __getitem__(self):
++        raise NotImplementedError
++
++    def keys(self):
++        raise NotImplementedError
++
++class FailingList(list):
++    def __getitem__(self, idx):
++        if i == 2:
++            raise NotImplementedError
++        else:
++            return super(FailingList, self).__getitem__(idx)
++
++cb.append("> Output")
++cb.append(">> OutputSetattr")
++ee('del sys.stdout.softspace')
++ee('sys.stdout.softspace = []')
++ee('sys.stdout.attr = None')
++cb.append(">> OutputWrite")
++ee('sys.stdout.write(None)')
++cb.append(">> OutputWriteLines")
++ee('sys.stdout.writelines(None)')
++ee('sys.stdout.writelines([1])')
++iter_test('sys.stdout.writelines(%s)')
++cb.append("> VimCommand")
++ee('vim.command(1)')
++#! Not checked: vim->python exceptions translating: checked later
++cb.append("> VimToPython")
++#! Not checked: everything: needs errors in internal python functions
++cb.append("> VimEval")
++ee('vim.eval(1)')
++#! Not checked: everything: needs errors in internal python functions
++cb.append("> VimEvalPy")
++ee('vim.bindeval(1)')
++#! Not checked: vim->python exceptions translating: checked later
++cb.append("> VimStrwidth")
++ee('vim.strwidth(1)')
++cb.append("> Dictionary")
++cb.append(">> DictionaryConstructor")
++ee('vim.Dictionary("abc")')
++##! Not checked: py_dict_alloc failure
++cb.append(">> DictionarySetattr")
++ee('del d.locked')
++ee('d.locked = FailingTrue()')
++ee('vim.vvars.locked = False')
++ee('d.scope = True')
++ee('d.xxx = True')
++cb.append(">> _DictionaryItem")
++ee('d.get("a", 2, 3)')
++stringtochars_test('d.get(%s)')
++ee('d.pop("a")')
++ee('dl.pop("a")')
++cb.append(">> DictionaryIterNext")
++ee('for i in ned: ned["a"] = 1')
++cb.append(">> DictionaryAssItem")
++ee('dl["b"] = 1')
++stringtochars_test('d[%s] = 1')
++convertfrompyobject_test('d["a"] = %s')
++cb.append(">> DictionaryUpdate")
++cb.append(">>> kwargs")
++cb.append(">>> iter")
++ee('d.update(FailingMapping())')
++ee('d.update([FailingIterNext()])')
++iter_test('d.update(%s)')
++convertfrompyobject_test('d.update(%s)')
++stringtochars_test('d.update(((%s, 0),))')
++convertfrompyobject_test('d.update((("a", %s),))')
++cb.append(">> DictionaryPopItem")
++ee('d.popitem(1, 2)')
++cb.append(">> DictionaryHasKey")
++ee('d.has_key()')
++cb.append("> List")
++cb.append(">> ListConstructor")
++ee('vim.List(1, 2)')
++ee('vim.List(a=1)')
++iter_test('vim.List(%s)')
++convertfrompyobject_test('vim.List([%s])')
++cb.append(">> ListItem")
++ee('l[1000]')
++cb.append(">> ListAssItem")
++ee('ll[1] = 2')
++ee('l[1000] = 3')
++cb.append(">> ListAssSlice")
++ee('ll[1:100] = "abc"')
++iter_test('l[:] = %s')
++convertfrompyobject_test('l[:] = [%s]')
++cb.append(">> ListConcatInPlace")
++iter_test('l.extend(%s)')
++convertfrompyobject_test('l.extend([%s])')
++cb.append(">> ListSetattr")
++ee('del l.locked')
++ee('l.locked = FailingTrue()')
++ee('l.xxx = True')
++cb.append("> Function")
++cb.append(">> FunctionConstructor")
++ee('vim.Function("123")')
++ee('vim.Function("xxx_non_existent_function_xxx")')
++ee('vim.Function("xxx#non#existent#function#xxx")')
++cb.append(">> FunctionCall")
++convertfrompyobject_test('f(%s)')
++convertfrompymapping_test('fd(self=%s)')
++cb.append("> TabPage")
++cb.append(">> TabPageAttr")
++ee('vim.current.tabpage.xxx')
++cb.append("> TabList")
++cb.append(">> TabListItem")
++ee('vim.tabpages[1000]')
++cb.append("> Window")
++cb.append(">> WindowAttr")
++ee('vim.current.window.xxx')
++cb.append(">> WindowSetattr")
++ee('vim.current.window.buffer = 0')
++ee('vim.current.window.cursor = (100000000, 100000000)')
++ee('vim.current.window.cursor = True')
++ee('vim.current.window.height = "abc"')
++ee('vim.current.window.width  = "abc"')
++ee('vim.current.window.xxxxxx = True')
++cb.append("> WinList")
++cb.append(">> WinListItem")
++ee('vim.windows[1000]')
++cb.append("> Buffer")
++cb.append(">> StringToLine (indirect)")
++ee('vim.current.buffer[0] = "\\na"')
++cb.append(">> SetBufferLine (indirect)")
++ee('vim.current.buffer[0] = True')
++cb.append(">> SetBufferLines (indirect)")
++ee('vim.current.buffer[:] = True')
++ee('vim.current.buffer[:] = ["\\na", "bc"]')
++cb.append(">> InsertBufferLines (indirect)")
++ee('vim.current.buffer.append(None)')
++ee('vim.current.buffer.append(["\\na", "bc"])')
++ee('vim.current.buffer.append("\\nbc")')
++cb.append(">> RBItem")
++ee('vim.current.buffer[100000000]')
++cb.append(">> RBAsItem")
++ee('vim.current.buffer[100000000] = ""')
++cb.append(">> BufferAttr")
++ee('vim.current.buffer.xxx')
++cb.append(">> BufferSetattr")
++ee('vim.current.buffer.name = True')
++ee('vim.current.buffer.xxx = True')
++cb.append(">> BufferMark")
++ee('vim.current.buffer.mark(0)')
++ee('vim.current.buffer.mark("abc")')
++ee('vim.current.buffer.mark("!")')
++cb.append(">> BufferRange")
++ee('vim.current.buffer.range(1, 2, 3)')
++cb.append("> BufMap")
++cb.append(">> BufMapItem")
++ee('vim.buffers[None]')
++ee('vim.buffers[100000000]')
++cb.append("> Current")
++cb.append(">> CurrentGetattr")
++ee('vim.current.xxx')
++cb.append(">> CurrentSetattr")
++ee('vim.current.line = True')
++ee('vim.current.buffer = True')
++ee('vim.current.window = True')
++ee('vim.current.tabpage = True')
++ee('vim.current.xxx = True')
++EOF
++:"
++:" Test exceptions
++:fun Exe(e)
++:   execute a:e
++:endfun
++py3 << EOF
++Exe = vim.bindeval('function("Exe")')
++ee('vim.command("throw \'abc\'")')
++ee('Exe("throw \'def\'")')
++ee('vim.eval("Exe(\'throw \'\'ghi\'\'\')")')
++ee('vim.eval("Exe(\'echoerr \'\'jkl\'\'\')")')
++ee('vim.eval("Exe(\'xxx_non_existent_command_xxx\')")')
++ee('vim.bindeval("Exe(\'xxx_non_existent_command_xxx\')")')
++EOF
++:endfun
++:"
++:call Test()
++:"
++:delfunc Test
++:call garbagecollect(1)
++:"
++:/^start:/,$wq! test.out
++:call getchar()
++ENDTEST
++
++start:
+diff -Naur vim73.orig/src/testdir/test87.ok vim73/src/testdir/test87.ok
+--- vim73.orig/src/testdir/test87.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test87.ok	2013-06-07 17:07:38.235566155 +0000
+@@ -0,0 +1,1100 @@
++start:
++[1, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++[1, 2, function('strlen'), {'a': 1}]
++Vim(put):E684:
++[0, 'as''d', [1, 2, function('strlen'), {'a': 1}]]
++[0, function('strlen'), [1, 2, function('strlen'), {'a': 1}]]
++1
++[b'-1', b'0', b'1', b'b', b'f']
++[-1, <vim.Function '1'>, <vim.dictionary object at >, <vim.list object at >, b'asd']
++[(b'-1', <vim.dictionary object at >), (b'0', -1), (b'1', b'asd'), (b'b', <vim.list object at >), (b'f', <vim.Function '1'>)]
++'-1' : {'a': 1}
++'0' : -1
++'1' : 'asd'
++'b' : [1, 2, function('strlen')]
++'f' : function('1')
++[0, function('strlen')]
++[3]
++[1, 2, function('strlen')]
++[1, 2, function('strlen')]
++1
++'asd'
++2
++True
++False
++True
++False
++[b'0']
++{'0': -1}
++(b'0', -1)
++None
++[]
++[0, 1, 2, 3]
++[0, 1, 2, 3]
++[0, 1, 3]
++[0, 1]
++[0, 1]
++[0, 1]
++[0, 1, 2, 3]
++[0, 1, 2, 3]
++[0, 2, 3]
++[2, 3]
++[2, 3]
++[2, 3]
++['a', 0, 1, 2, 3]
++[0, 'b', 2, 3]
++[0, 1, 'c']
++[0, 1, 2, 3, 'd']
++[0, 1, 2, 'e', 3]
++['f', 2, 3]
++[0, 1, 'g', 2, 3]
++['h']
++[0, 1, 2, 3]
++[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd']
++[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}]
++[function('New'), function('DictNew'), 'NewStart', 1, 2, 3, 'NewEnd', 'DictNewStart', 1, 2, 3, 'DictNewEnd', {'a': 'b'}, 'New']
++Vim(py3):E725:
++Vim(py3):E117:
++[0.0, 0.0]
++KeyError
++TypeError
++TypeError
++ValueError
++TypeError
++TypeError
++KeyError
++KeyError
++d : locked:0;scope:0
++dl : locked:1;scope:0
++v: : locked:2;scope:1
++g: : locked:0;scope:2
++d:{'abc': 1}
++dl:{'def': 1}
++l : locked:0
++ll : locked:1
++l:[0]
++ll:[1]
++[0, 1, 2]
++['a', 'b']
++['c', 1]
++['d', ['e']]
++0.0
++"\0":	Vim(let):E859:
++{"\0": 1}:	Vim(let):E859:
++undefined_name:	Vim(let):Trace
++vim:	Vim(let):E859:
++[1]
++[1, 10, 11, 10, 11, 10, 11, 10, 11, 10, 11, 10, 1]
++Abc
++bac
++def
++bar
++jkl
++>>> paste
++  p/gopts1: False
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1! KeyError
++  inv: 2! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 1
++  W: 1:1 2:1 3:1 4:1
++  B: 1:1 2:1 3:1 4:1
++  del wopts3! KeyError
++  del bopts3! KeyError
++  G: 1
++  W: 1:1 2:1 3:1 4:1
++  B: 1:1 2:1 3:1 4:1
++>>> previewheight
++  p/gopts1: 12
++  inv: 'a'! TypeError
++  p/wopts1! KeyError
++  inv: 'a'! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1! KeyError
++  inv: 'a'! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 5
++  W: 1:5 2:5 3:5 4:5
++  B: 1:5 2:5 3:5 4:5
++  del wopts3! KeyError
++  del bopts3! KeyError
++  G: 5
++  W: 1:5 2:5 3:5 4:5
++  B: 1:5 2:5 3:5 4:5
++>>> operatorfunc
++  p/gopts1: b''
++  inv: 2! TypeError
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1! KeyError
++  inv: 2! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 'A'
++  W: 1:'A' 2:'A' 3:'A' 4:'A'
++  B: 1:'A' 2:'A' 3:'A' 4:'A'
++  del wopts3! KeyError
++  del bopts3! KeyError
++  G: 'A'
++  W: 1:'A' 2:'A' 3:'A' 4:'A'
++  B: 1:'A' 2:'A' 3:'A' 4:'A'
++>>> number
++  p/gopts1! KeyError
++  inv: 0! KeyError
++  gopts1! KeyError
++  p/wopts1: False
++  p/bopts1! KeyError
++  inv: 0! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 0
++  W: 1:1 2:1 3:0 4:0
++  B: 1:1 2:1 3:0 4:0
++  del wopts3! ValueError
++  del bopts3! KeyError
++  G: 0
++  W: 1:1 2:1 3:0 4:0
++  B: 1:1 2:1 3:0 4:0
++>>> numberwidth
++  p/gopts1! KeyError
++  inv: -100! KeyError
++  gopts1! KeyError
++  p/wopts1: 8
++  inv: -100! error
++  p/bopts1! KeyError
++  inv: -100! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: 8
++  W: 1:3 2:5 3:2 4:8
++  B: 1:3 2:5 3:2 4:8
++  del wopts3! ValueError
++  del bopts3! KeyError
++  G: 8
++  W: 1:3 2:5 3:2 4:8
++  B: 1:3 2:5 3:2 4:8
++>>> colorcolumn
++  p/gopts1! KeyError
++  inv: 'abc'! KeyError
++  gopts1! KeyError
++  p/wopts1: b''
++  inv: 'abc'! error
++  p/bopts1! KeyError
++  inv: 'abc'! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: ''
++  W: 1:'+2' 2:'+3' 3:'+1' 4:''
++  B: 1:'+2' 2:'+3' 3:'+1' 4:''
++  del wopts3! ValueError
++  del bopts3! KeyError
++  G: ''
++  W: 1:'+2' 2:'+3' 3:'+1' 4:''
++  B: 1:'+2' 2:'+3' 3:'+1' 4:''
++>>> statusline
++  p/gopts1: b''
++  inv: 0! TypeError
++  p/wopts1: None
++  inv: 0! TypeError
++  p/bopts1! KeyError
++  inv: 0! KeyError
++  bopts1! KeyError
++  bopts2! KeyError
++  bopts3! KeyError
++  G: '1'
++  W: 1:'2' 2:'4' 3:'1' 4:'1'
++  B: 1:'2' 2:'4' 3:'1' 4:'1'
++  del bopts3! KeyError
++  G: '1'
++  W: 1:'2' 2:'1' 3:'1' 4:'1'
++  B: 1:'2' 2:'1' 3:'1' 4:'1'
++>>> autoindent
++  p/gopts1! KeyError
++  inv: 2! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: False
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++>>> shiftwidth
++  p/gopts1! KeyError
++  inv: 3! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 3! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: 8
++  G: 8
++  W: 1:0 2:2 3:8 4:1
++  B: 1:0 2:2 3:8 4:1
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: 8
++  W: 1:0 2:2 3:8 4:1
++  B: 1:0 2:2 3:8 4:1
++>>> omnifunc
++  p/gopts1! KeyError
++  inv: 1! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 1! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: b''
++  inv: 1! TypeError
++  G: ''
++  W: 1:'A' 2:'B' 3:'' 4:'C'
++  B: 1:'A' 2:'B' 3:'' 4:'C'
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: ''
++  W: 1:'A' 2:'B' 3:'' 4:'C'
++  B: 1:'A' 2:'B' 3:'' 4:'C'
++>>> preserveindent
++  p/gopts1! KeyError
++  inv: 2! KeyError
++  gopts1! KeyError
++  p/wopts1! KeyError
++  inv: 2! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: False
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++  del wopts3! KeyError
++  del bopts3! ValueError
++  G: 0
++  W: 1:0 2:1 3:0 4:1
++  B: 1:0 2:1 3:0 4:1
++>>> path
++  p/gopts1: b'.,..,,'
++  inv: 0! TypeError
++  p/wopts1! KeyError
++  inv: 0! KeyError
++  wopts1! KeyError
++  wopts2! KeyError
++  wopts3! KeyError
++  p/bopts1: None
++  inv: 0! TypeError
++  G: '.,,'
++  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
++  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.'
++  del wopts3! KeyError
++  G: '.,,'
++  W: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
++  B: 1:'.,,' 2:',,' 3:'.,,' 4:'.,,'
++First line
++First line
++def
++First line
++Second line
++Third line
++(7, 2)
++<buffer test87.in><buffer >
++baz
++bar
++Second line
++Third line
++foo
++1:BufFilePre:1
++1:BufFilePost:1
++testdir/foo
++5:BufFilePre:5
++5:BufFilePost:5
++testdir/bar
++1:BufFilePre:1
++1:BufFilePost:1
++testdir/test87.in
++valid: b:False, cb:True
++i:<buffer test87.in>
++i2:<buffer test87.in>
++i:<buffer a>
++i3:<buffer test87.in>
++1:<buffer test87.in>=<buffer test87.in>
++8:<buffer a>=<buffer a>
++9:<buffer b>=<buffer b>
++10:<buffer c>=<buffer c>
++4
++i4:<buffer test87.in>
++i4:<buffer test87.in>
++StopIteration
++Number of tabs: 4
++Current tab pages:
++  <tabpage 0>(1): 1 windows, current is <window object (unknown)>
++  Windows:
++    <window object (unknown)>(1): displays buffer <buffer test87.in>; cursor is at (37, 0)
++  <tabpage 1>(2): 1 windows, current is <window object (unknown)>
++  Windows:
++    <window object (unknown)>(1): displays buffer <buffer 0>; cursor is at (1, 0)
++  <tabpage 2>(3): 2 windows, current is <window object (unknown)>
++  Windows:
++    <window object (unknown)>(1): displays buffer <buffer a.1>; cursor is at (1, 0)
++    <window object (unknown)>(2): displays buffer <buffer 1>; cursor is at (1, 0)
++  <tabpage 3>(4): 4 windows, current is <window 0>
++  Windows:
++    <window 0>(1): displays buffer <buffer c.2>; cursor is at (1, 0)
++    <window 1>(2): displays buffer <buffer b.2>; cursor is at (1, 0)
++    <window 2>(3): displays buffer <buffer a.2>; cursor is at (1, 0)
++    <window 3>(4): displays buffer <buffer 2>; cursor is at (1, 0)
++Number of windows in current tab page: 4
++Current tab page: <tabpage 3>
++Current window: <window 0>: <window 0> is <window 0>
++Current buffer: <buffer c.2>: <buffer c.2> is <buffer c.2> is <buffer c.2>
++ValueError at assigning foreign tab window
++Type error at assigning None to vim.current.window
++Type error at assigning None to vim.current.tabpage
++Type error at assigning None to vim.current.buffer
++Current tab page: <tabpage 2>
++Current window: <window 0>
++Current buffer: <buffer test87.in>
++Current line: 'Type error at assigning None to vim.current.buffer'
++w.valid: [True, False]
++t.valid: [True, False, True, False]
++vim.vars:Dictionary:True
++vim.options:Options:True
++vim.bindeval("{}"):Dictionary:True
++vim.bindeval("[]"):List:True
++vim.bindeval("function('tr')"):Function:True
++vim.current.buffer:Buffer:True
++vim.current.range:Range:True
++vim.current.window:Window:True
++vim.current.tabpage:TabPage:True
++current:__dir__,buffer,line,range,tabpage,window
++buffer:__dir__,append,mark,name,number,options,range,valid,vars
++window:__dir__,buffer,col,cursor,height,number,options,row,tabpage,valid,vars
++tabpage:__dir__,number,valid,vars,window,windows
++range:__dir__,append,end,start
++dictionary:__dir__,get,has_key,items,keys,locked,pop,popitem,scope,update,values
++list:__dir__,extend,locked
++function:__dir__,softspace
++output:__dir__,flush,softspace,write,writelines
++{}
++{'a': 1}
++{'a': 1}
++[]
++['a', 'b', 'c']
++function('tr')
++'
++abcdef
++line  :
++abcdef
++abc
++line  :
++abc'
++['a', 'dup_a']
++['a', 'a']
++['a', 'b', 'c']
++[2, 2]
++[2, 2]
++b'testdir'
++test87.in
++b'src'
++testdir/test87.in
++b'testdir'
++test87.in
++> Output
++>> OutputSetattr
++del sys.stdout.softspace:(<class 'AttributeError'>, AttributeError("can't delete OutputObject attributes",))
++sys.stdout.softspace = []:(<class 'TypeError'>, TypeError('softspace must be an integer',))
++sys.stdout.attr = None:(<class 'AttributeError'>, AttributeError('invalid attribute',))
++>> OutputWrite
++sys.stdout.write(None):(<class 'TypeError'>, TypeError("Can't convert 'NoneType' object to str implicitly",))
++>> OutputWriteLines
++sys.stdout.writelines(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
++sys.stdout.writelines([1]):(<class 'TypeError'>, TypeError('writelines() requires list of strings',))
++>>> Testing *Iter* using sys.stdout.writelines(%s)
++sys.stdout.writelines(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError())
++sys.stdout.writelines(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++> VimCommand
++vim.command(1):(<class 'TypeError'>, TypeError('must be str, not int',))
++> VimToPython
++> VimEval
++vim.eval(1):(<class 'TypeError'>, TypeError('must be str, not int',))
++> VimEvalPy
++vim.bindeval(1):(<class 'TypeError'>, TypeError('must be str, not int',))
++> VimStrwidth
++vim.strwidth(1):(<class 'TypeError'>, TypeError('must be str, not int',))
++> Dictionary
++>> DictionaryConstructor
++vim.Dictionary("abc"):(<class 'ValueError'>, ValueError('expected sequence element of size 2',))
++>> DictionarySetattr
++del d.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.Dictionary attributes',))
++d.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError())
++vim.vvars.locked = False:(<class 'TypeError'>, TypeError('cannot modify fixed dictionary',))
++d.scope = True:(<class 'AttributeError'>, AttributeError('cannot set this attribute',))
++d.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set this attribute',))
++>> _DictionaryItem
++d.get("a", 2, 3):(<class 'TypeError'>, TypeError('function takes at most 2 arguments (3 given)',))
++>>> Testing StringToChars using d.get(%s)
++d.get(1):(<class 'TypeError'>, TypeError('object must be string',))
++d.get(b"\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.get("\0"):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++d.pop("a"):(<class 'KeyError'>, KeyError('a',))
++dl.pop("a"):(<class 'vim.error'>, error('dict is locked',))
++>> DictionaryIterNext
++for i in ned: ned["a"] = 1:(<class 'RuntimeError'>, RuntimeError('hashtab changed during iteration',))
++>> DictionaryAssItem
++dl["b"] = 1:(<class 'vim.error'>, error('dict is locked',))
++>>> Testing StringToChars using d[%s] = 1
++d[1] = 1:(<class 'TypeError'>, TypeError('object must be string',))
++d[b"\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d["\0"] = 1:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = {%s : 1}
++d["a"] = {1 : 1}:(<class 'TypeError'>, TypeError('object must be string',))
++d["a"] = {b"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d["a"] = {"\0" : 1}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = {"abc" : {%s : 1}}
++d["a"] = {"abc" : {1 : 1}}:(<class 'TypeError'>, TypeError('object must be string',))
++d["a"] = {"abc" : {b"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d["a"] = {"abc" : {"\0" : 1}}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = {"abc" : Mapping({%s : 1})}
++d["a"] = {"abc" : Mapping({1 : 1})}:(<class 'TypeError'>, TypeError('object must be string',))
++d["a"] = {"abc" : Mapping({b"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d["a"] = {"abc" : Mapping({"\0" : 1})}:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using d["a"] = {"abc" : %s}
++d["a"] = {"abc" : FailingIter()}:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = {"abc" : FailingIterNext()}:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d["a"] = {"abc" : %s}
++d["a"] = {"abc" : None}:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = {"abc" : {b"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = {"abc" : {"": 1}}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = {"abc" : FailingMapping()}:(<class 'NotImplementedError'>, NotImplementedError())
++d["a"] = {"abc" : FailingMappingKey()}:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d["a"] = Mapping({%s : 1})
++d["a"] = Mapping({1 : 1}):(<class 'TypeError'>, TypeError('object must be string',))
++d["a"] = Mapping({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d["a"] = Mapping({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = Mapping({"abc" : {%s : 1}})
++d["a"] = Mapping({"abc" : {1 : 1}}):(<class 'TypeError'>, TypeError('object must be string',))
++d["a"] = Mapping({"abc" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d["a"] = Mapping({"abc" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d["a"] = Mapping({"abc" : Mapping({%s : 1})})
++d["a"] = Mapping({"abc" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('object must be string',))
++d["a"] = Mapping({"abc" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d["a"] = Mapping({"abc" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using d["a"] = Mapping({"abc" : %s})
++d["a"] = Mapping({"abc" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = Mapping({"abc" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d["a"] = Mapping({"abc" : %s})
++d["a"] = Mapping({"abc" : None}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = Mapping({"abc" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = Mapping({"abc" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = Mapping({"abc" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError())
++d["a"] = Mapping({"abc" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using d["a"] = %s
++d["a"] = FailingIter():(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = FailingIterNext():(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d["a"] = %s
++d["a"] = None:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d["a"] = {b"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = {"": 1}:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d["a"] = FailingMapping():(<class 'NotImplementedError'>, NotImplementedError())
++d["a"] = FailingMappingKey():(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> DictionaryUpdate
++>>> kwargs
++>>> iter
++d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError())
++d.update([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError())
++>>> Testing *Iter* using d.update(%s)
++d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError())
++d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d.update({%s : 1})
++d.update({1 : 1}):(<class 'TypeError'>, TypeError('object must be string',))
++d.update({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update({"abc" : {%s : 1}})
++d.update({"abc" : {1 : 1}}):(<class 'TypeError'>, TypeError('object must be string',))
++d.update({"abc" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update({"abc" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update({"abc" : Mapping({%s : 1})})
++d.update({"abc" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('object must be string',))
++d.update({"abc" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update({"abc" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using d.update({"abc" : %s})
++d.update({"abc" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update({"abc" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update({"abc" : %s})
++d.update({"abc" : None}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update({"abc" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update({"abc" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update({"abc" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError())
++d.update({"abc" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d.update(Mapping({%s : 1}))
++d.update(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('object must be string',))
++d.update(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update(Mapping({"abc" : {%s : 1}}))
++d.update(Mapping({"abc" : {1 : 1}})):(<class 'TypeError'>, TypeError('object must be string',))
++d.update(Mapping({"abc" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update(Mapping({"abc" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update(Mapping({"abc" : Mapping({%s : 1})}))
++d.update(Mapping({"abc" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('object must be string',))
++d.update(Mapping({"abc" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update(Mapping({"abc" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using d.update(Mapping({"abc" : %s}))
++d.update(Mapping({"abc" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update(Mapping({"abc" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update(Mapping({"abc" : %s}))
++d.update(Mapping({"abc" : None})):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update(Mapping({"abc" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update(Mapping({"abc" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update(Mapping({"abc" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError())
++d.update(Mapping({"abc" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using d.update(%s)
++d.update(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError())
++d.update(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update(%s)
++d.update(None):(<class 'TypeError'>, TypeError("'NoneType' object is not iterable",))
++d.update({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError())
++d.update(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d.update(((%s, 0),))
++d.update(((1, 0),)):(<class 'TypeError'>, TypeError('object must be string',))
++d.update(((b"\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update((("\0", 0),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", {%s : 1}),))
++d.update((("a", {1 : 1}),)):(<class 'TypeError'>, TypeError('object must be string',))
++d.update((("a", {b"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update((("a", {"\0" : 1}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", {"abc" : {%s : 1}}),))
++d.update((("a", {"abc" : {1 : 1}}),)):(<class 'TypeError'>, TypeError('object must be string',))
++d.update((("a", {"abc" : {b"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update((("a", {"abc" : {"\0" : 1}}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", {"abc" : Mapping({%s : 1})}),))
++d.update((("a", {"abc" : Mapping({1 : 1})}),)):(<class 'TypeError'>, TypeError('object must be string',))
++d.update((("a", {"abc" : Mapping({b"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update((("a", {"abc" : Mapping({"\0" : 1})}),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using d.update((("a", {"abc" : %s}),))
++d.update((("a", {"abc" : FailingIter()}),)):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", {"abc" : FailingIterNext()}),)):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update((("a", {"abc" : %s}),))
++d.update((("a", {"abc" : None}),)):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", {"abc" : {b"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", {"abc" : {"": 1}}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", {"abc" : FailingMapping()}),)):(<class 'NotImplementedError'>, NotImplementedError())
++d.update((("a", {"abc" : FailingMappingKey()}),)):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using d.update((("a", Mapping({%s : 1})),))
++d.update((("a", Mapping({1 : 1})),)):(<class 'TypeError'>, TypeError('object must be string',))
++d.update((("a", Mapping({b"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update((("a", Mapping({"\0" : 1})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", Mapping({"abc" : {%s : 1}})),))
++d.update((("a", Mapping({"abc" : {1 : 1}})),)):(<class 'TypeError'>, TypeError('object must be string',))
++d.update((("a", Mapping({"abc" : {b"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update((("a", Mapping({"abc" : {"\0" : 1}})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using d.update((("a", Mapping({"abc" : Mapping({%s : 1})})),))
++d.update((("a", Mapping({"abc" : Mapping({1 : 1})})),)):(<class 'TypeError'>, TypeError('object must be string',))
++d.update((("a", Mapping({"abc" : Mapping({b"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++d.update((("a", Mapping({"abc" : Mapping({"\0" : 1})})),)):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using d.update((("a", Mapping({"abc" : %s})),))
++d.update((("a", Mapping({"abc" : FailingIter()})),)):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", Mapping({"abc" : FailingIterNext()})),)):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update((("a", Mapping({"abc" : %s})),))
++d.update((("a", Mapping({"abc" : None})),)):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", Mapping({"abc" : {b"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", Mapping({"abc" : {"": 1}})),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", Mapping({"abc" : FailingMapping()})),)):(<class 'NotImplementedError'>, NotImplementedError())
++d.update((("a", Mapping({"abc" : FailingMappingKey()})),)):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using d.update((("a", %s),))
++d.update((("a", FailingIter()),)):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", FailingIterNext()),)):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using d.update((("a", %s),))
++d.update((("a", None),)):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++d.update((("a", {b"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", {"": 1}),)):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++d.update((("a", FailingMapping()),)):(<class 'NotImplementedError'>, NotImplementedError())
++d.update((("a", FailingMappingKey()),)):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> DictionaryPopItem
++d.popitem(1, 2):(<class 'TypeError'>, TypeError('popitem() takes no arguments (2 given)',))
++>> DictionaryHasKey
++d.has_key():(<class 'TypeError'>, TypeError('function takes exactly 1 argument (0 given)',))
++> List
++>> ListConstructor
++vim.List(1, 2):(<class 'TypeError'>, TypeError('function takes at most 1 argument (2 given)',))
++vim.List(a=1):(<class 'TypeError'>, TypeError('list constructor does not accept keyword arguments',))
++>>> Testing *Iter* using vim.List(%s)
++vim.List(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError())
++vim.List(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using vim.List([{%s : 1}])
++vim.List([{1 : 1}]):(<class 'TypeError'>, TypeError('object must be string',))
++vim.List([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++vim.List([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using vim.List([{"abc" : {%s : 1}}])
++vim.List([{"abc" : {1 : 1}}]):(<class 'TypeError'>, TypeError('object must be string',))
++vim.List([{"abc" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++vim.List([{"abc" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using vim.List([{"abc" : Mapping({%s : 1})}])
++vim.List([{"abc" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('object must be string',))
++vim.List([{"abc" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++vim.List([{"abc" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using vim.List([{"abc" : %s}])
++vim.List([{"abc" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([{"abc" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using vim.List([{"abc" : %s}])
++vim.List([{"abc" : None}]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([{"abc" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([{"abc" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([{"abc" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError())
++vim.List([{"abc" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using vim.List([Mapping({%s : 1})])
++vim.List([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('object must be string',))
++vim.List([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++vim.List([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using vim.List([Mapping({"abc" : {%s : 1}})])
++vim.List([Mapping({"abc" : {1 : 1}})]):(<class 'TypeError'>, TypeError('object must be string',))
++vim.List([Mapping({"abc" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++vim.List([Mapping({"abc" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using vim.List([Mapping({"abc" : Mapping({%s : 1})})])
++vim.List([Mapping({"abc" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('object must be string',))
++vim.List([Mapping({"abc" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++vim.List([Mapping({"abc" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using vim.List([Mapping({"abc" : %s})])
++vim.List([Mapping({"abc" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([Mapping({"abc" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using vim.List([Mapping({"abc" : %s})])
++vim.List([Mapping({"abc" : None})]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([Mapping({"abc" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([Mapping({"abc" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([Mapping({"abc" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError())
++vim.List([Mapping({"abc" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using vim.List([%s])
++vim.List([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using vim.List([%s])
++vim.List([None]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++vim.List([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++vim.List([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError())
++vim.List([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> ListItem
++l[1000]:(<class 'IndexError'>, IndexError('list index out of range',))
++>> ListAssItem
++ll[1] = 2:(<class 'vim.error'>, error('list is locked',))
++l[1000] = 3:(<class 'IndexError'>, IndexError('list index out of range',))
++>> ListAssSlice
++ll[1:100] = "abc":(<class 'vim.error'>, error('list is locked',))
++>>> Testing *Iter* using l[:] = %s
++l[:] = FailingIter():(<class 'NotImplementedError'>, NotImplementedError())
++l[:] = FailingIterNext()::(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using l[:] = [{%s : 1}]
++l[:] = [{1 : 1}]:(<class 'TypeError'>, TypeError('object must be string',))
++l[:] = [{b"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l[:] = [{"\0" : 1}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [{"abc" : {%s : 1}}]
++l[:] = [{"abc" : {1 : 1}}]:(<class 'TypeError'>, TypeError('object must be string',))
++l[:] = [{"abc" : {b"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l[:] = [{"abc" : {"\0" : 1}}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [{"abc" : Mapping({%s : 1})}]
++l[:] = [{"abc" : Mapping({1 : 1})}]:(<class 'TypeError'>, TypeError('object must be string',))
++l[:] = [{"abc" : Mapping({b"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l[:] = [{"abc" : Mapping({"\0" : 1})}]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using l[:] = [{"abc" : %s}]
++l[:] = [{"abc" : FailingIter()}]:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [{"abc" : FailingIterNext()}]:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l[:] = [{"abc" : %s}]
++l[:] = [{"abc" : None}]:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [{"abc" : {b"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [{"abc" : {"": 1}}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [{"abc" : FailingMapping()}]:(<class 'NotImplementedError'>, NotImplementedError())
++l[:] = [{"abc" : FailingMappingKey()}]:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using l[:] = [Mapping({%s : 1})]
++l[:] = [Mapping({1 : 1})]:(<class 'TypeError'>, TypeError('object must be string',))
++l[:] = [Mapping({b"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l[:] = [Mapping({"\0" : 1})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [Mapping({"abc" : {%s : 1}})]
++l[:] = [Mapping({"abc" : {1 : 1}})]:(<class 'TypeError'>, TypeError('object must be string',))
++l[:] = [Mapping({"abc" : {b"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l[:] = [Mapping({"abc" : {"\0" : 1}})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l[:] = [Mapping({"abc" : Mapping({%s : 1})})]
++l[:] = [Mapping({"abc" : Mapping({1 : 1})})]:(<class 'TypeError'>, TypeError('object must be string',))
++l[:] = [Mapping({"abc" : Mapping({b"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l[:] = [Mapping({"abc" : Mapping({"\0" : 1})})]:(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using l[:] = [Mapping({"abc" : %s})]
++l[:] = [Mapping({"abc" : FailingIter()})]:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [Mapping({"abc" : FailingIterNext()})]:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l[:] = [Mapping({"abc" : %s})]
++l[:] = [Mapping({"abc" : None})]:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [Mapping({"abc" : {b"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [Mapping({"abc" : {"": 1}})]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [Mapping({"abc" : FailingMapping()})]:(<class 'NotImplementedError'>, NotImplementedError())
++l[:] = [Mapping({"abc" : FailingMappingKey()})]:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using l[:] = [%s]
++l[:] = [FailingIter()]:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [FailingIterNext()]:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l[:] = [%s]
++l[:] = [None]:(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l[:] = [{b"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [{"": 1}]:(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l[:] = [FailingMapping()]:(<class 'NotImplementedError'>, NotImplementedError())
++l[:] = [FailingMappingKey()]:(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> ListConcatInPlace
++>>> Testing *Iter* using l.extend(%s)
++l.extend(FailingIter()):(<class 'NotImplementedError'>, NotImplementedError())
++l.extend(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using l.extend([{%s : 1}])
++l.extend([{1 : 1}]):(<class 'TypeError'>, TypeError('object must be string',))
++l.extend([{b"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l.extend([{"\0" : 1}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l.extend([{"abc" : {%s : 1}}])
++l.extend([{"abc" : {1 : 1}}]):(<class 'TypeError'>, TypeError('object must be string',))
++l.extend([{"abc" : {b"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l.extend([{"abc" : {"\0" : 1}}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l.extend([{"abc" : Mapping({%s : 1})}])
++l.extend([{"abc" : Mapping({1 : 1})}]):(<class 'TypeError'>, TypeError('object must be string',))
++l.extend([{"abc" : Mapping({b"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l.extend([{"abc" : Mapping({"\0" : 1})}]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using l.extend([{"abc" : %s}])
++l.extend([{"abc" : FailingIter()}]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([{"abc" : FailingIterNext()}]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l.extend([{"abc" : %s}])
++l.extend([{"abc" : None}]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([{"abc" : {b"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([{"abc" : {"": 1}}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([{"abc" : FailingMapping()}]):(<class 'NotImplementedError'>, NotImplementedError())
++l.extend([{"abc" : FailingMappingKey()}]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using l.extend([Mapping({%s : 1})])
++l.extend([Mapping({1 : 1})]):(<class 'TypeError'>, TypeError('object must be string',))
++l.extend([Mapping({b"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l.extend([Mapping({"\0" : 1})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l.extend([Mapping({"abc" : {%s : 1}})])
++l.extend([Mapping({"abc" : {1 : 1}})]):(<class 'TypeError'>, TypeError('object must be string',))
++l.extend([Mapping({"abc" : {b"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l.extend([Mapping({"abc" : {"\0" : 1}})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using l.extend([Mapping({"abc" : Mapping({%s : 1})})])
++l.extend([Mapping({"abc" : Mapping({1 : 1})})]):(<class 'TypeError'>, TypeError('object must be string',))
++l.extend([Mapping({"abc" : Mapping({b"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++l.extend([Mapping({"abc" : Mapping({"\0" : 1})})]):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using l.extend([Mapping({"abc" : %s})])
++l.extend([Mapping({"abc" : FailingIter()})]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([Mapping({"abc" : FailingIterNext()})]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l.extend([Mapping({"abc" : %s})])
++l.extend([Mapping({"abc" : None})]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([Mapping({"abc" : {b"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([Mapping({"abc" : {"": 1}})]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([Mapping({"abc" : FailingMapping()})]):(<class 'NotImplementedError'>, NotImplementedError())
++l.extend([Mapping({"abc" : FailingMappingKey()})]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using l.extend([%s])
++l.extend([FailingIter()]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([FailingIterNext()]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using l.extend([%s])
++l.extend([None]):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++l.extend([{b"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([{"": 1}]):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++l.extend([FailingMapping()]):(<class 'NotImplementedError'>, NotImplementedError())
++l.extend([FailingMappingKey()]):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>> ListSetattr
++del l.locked:(<class 'AttributeError'>, AttributeError('cannot delete vim.List attributes',))
++l.locked = FailingTrue():(<class 'NotImplementedError'>, NotImplementedError())
++l.xxx = True:(<class 'AttributeError'>, AttributeError('cannot set this attribute',))
++> Function
++>> FunctionConstructor
++vim.Function("123"):(<class 'ValueError'>, ValueError('unnamed function does not exist',))
++vim.Function("xxx_non_existent_function_xxx"):(<class 'ValueError'>, ValueError('function does not exist',))
++vim.Function("xxx#non#existent#function#xxx"):NOT FAILED
++>> FunctionCall
++>>> Testing StringToChars using f({%s : 1})
++f({1 : 1}):(<class 'TypeError'>, TypeError('object must be string',))
++f({b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++f({"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using f({"abc" : {%s : 1}})
++f({"abc" : {1 : 1}}):(<class 'TypeError'>, TypeError('object must be string',))
++f({"abc" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++f({"abc" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using f({"abc" : Mapping({%s : 1})})
++f({"abc" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('object must be string',))
++f({"abc" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++f({"abc" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using f({"abc" : %s})
++f({"abc" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++f({"abc" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using f({"abc" : %s})
++f({"abc" : None}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++f({"abc" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++f({"abc" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++f({"abc" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError())
++f({"abc" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using f(Mapping({%s : 1}))
++f(Mapping({1 : 1})):(<class 'TypeError'>, TypeError('object must be string',))
++f(Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++f(Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using f(Mapping({"abc" : {%s : 1}}))
++f(Mapping({"abc" : {1 : 1}})):(<class 'TypeError'>, TypeError('object must be string',))
++f(Mapping({"abc" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++f(Mapping({"abc" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using f(Mapping({"abc" : Mapping({%s : 1})}))
++f(Mapping({"abc" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('object must be string',))
++f(Mapping({"abc" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++f(Mapping({"abc" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using f(Mapping({"abc" : %s}))
++f(Mapping({"abc" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++f(Mapping({"abc" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using f(Mapping({"abc" : %s}))
++f(Mapping({"abc" : None})):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++f(Mapping({"abc" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++f(Mapping({"abc" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++f(Mapping({"abc" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError())
++f(Mapping({"abc" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using f(%s)
++f(FailingIter()):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++f(FailingIterNext()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using f(%s)
++f(None):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++f({b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++f({"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++f(FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError())
++f(FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using fd(self={%s : 1})
++fd(self={1 : 1}):(<class 'TypeError'>, TypeError('object must be string',))
++fd(self={b"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++fd(self={"\0" : 1}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using fd(self={"abc" : {%s : 1}})
++fd(self={"abc" : {1 : 1}}):(<class 'TypeError'>, TypeError('object must be string',))
++fd(self={"abc" : {b"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++fd(self={"abc" : {"\0" : 1}}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using fd(self={"abc" : Mapping({%s : 1})})
++fd(self={"abc" : Mapping({1 : 1})}):(<class 'TypeError'>, TypeError('object must be string',))
++fd(self={"abc" : Mapping({b"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++fd(self={"abc" : Mapping({"\0" : 1})}):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using fd(self={"abc" : %s})
++fd(self={"abc" : FailingIter()}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self={"abc" : FailingIterNext()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using fd(self={"abc" : %s})
++fd(self={"abc" : None}):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self={"abc" : {b"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++fd(self={"abc" : {"": 1}}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++fd(self={"abc" : FailingMapping()}):(<class 'NotImplementedError'>, NotImplementedError())
++fd(self={"abc" : FailingMappingKey()}):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing StringToChars using fd(self=Mapping({%s : 1}))
++fd(self=Mapping({1 : 1})):(<class 'TypeError'>, TypeError('object must be string',))
++fd(self=Mapping({b"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++fd(self=Mapping({"\0" : 1})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using fd(self=Mapping({"abc" : {%s : 1}}))
++fd(self=Mapping({"abc" : {1 : 1}})):(<class 'TypeError'>, TypeError('object must be string',))
++fd(self=Mapping({"abc" : {b"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++fd(self=Mapping({"abc" : {"\0" : 1}})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing StringToChars using fd(self=Mapping({"abc" : Mapping({%s : 1})}))
++fd(self=Mapping({"abc" : Mapping({1 : 1})})):(<class 'TypeError'>, TypeError('object must be string',))
++fd(self=Mapping({"abc" : Mapping({b"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++fd(self=Mapping({"abc" : Mapping({"\0" : 1})})):(<class 'TypeError'>, TypeError('expected bytes with no null',))
++<<< Finished
++>>> Testing *Iter* using fd(self=Mapping({"abc" : %s}))
++fd(self=Mapping({"abc" : FailingIter()})):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self=Mapping({"abc" : FailingIterNext()})):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyObject using fd(self=Mapping({"abc" : %s}))
++fd(self=Mapping({"abc" : None})):(<class 'TypeError'>, TypeError('unable to convert to vim structure',))
++fd(self=Mapping({"abc" : {b"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++fd(self=Mapping({"abc" : {"": 1}})):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++fd(self=Mapping({"abc" : FailingMapping()})):(<class 'NotImplementedError'>, NotImplementedError())
++fd(self=Mapping({"abc" : FailingMappingKey()})):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing *Iter* using fd(self=%s)
++fd(self=FailingIter()):(<class 'TypeError'>, TypeError('unable to convert object to vim dictionary',))
++fd(self=FailingIterNext()):(<class 'TypeError'>, TypeError('unable to convert object to vim dictionary',))
++<<< Finished
++>>> Testing ConvertFromPyObject using fd(self=%s)
++fd(self=None):(<class 'TypeError'>, TypeError('unable to convert object to vim dictionary',))
++fd(self={b"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++fd(self={"": 1}):(<class 'ValueError'>, ValueError('empty keys are not allowed',))
++fd(self=FailingMapping()):(<class 'NotImplementedError'>, NotImplementedError())
++fd(self=FailingMappingKey()):(<class 'NotImplementedError'>, NotImplementedError())
++<<< Finished
++>>> Testing ConvertFromPyMapping using fd(self=%s)
++fd(self=[]):(<class 'AttributeError'>, AttributeError('keys',))
++<<< Finished
++> TabPage
++>> TabPageAttr
++vim.current.tabpage.xxx:(<class 'AttributeError'>, AttributeError("'vim.tabpage' object has no attribute 'xxx'",))
++> TabList
++>> TabListItem
++vim.tabpages[1000]:(<class 'IndexError'>, IndexError('no such tab page',))
++> Window
++>> WindowAttr
++vim.current.window.xxx:(<class 'AttributeError'>, AttributeError("'vim.window' object has no attribute 'xxx'",))
++>> WindowSetattr
++vim.current.window.buffer = 0:(<class 'TypeError'>, TypeError('readonly attribute',))
++vim.current.window.cursor = (100000000, 100000000):(<class 'vim.error'>, error('cursor position outside buffer',))
++vim.current.window.cursor = True:(<class 'TypeError'>, TypeError('argument must be 2-item sequence, not bool',))
++vim.current.window.height = "abc":(<class 'TypeError'>, TypeError('an integer is required',))
++vim.current.window.width  = "abc":(<class 'TypeError'>, TypeError('an integer is required',))
++vim.current.window.xxxxxx = True:(<class 'AttributeError'>, AttributeError('xxxxxx',))
++> WinList
++>> WinListItem
++vim.windows[1000]:(<class 'IndexError'>, IndexError('no such window',))
++> Buffer
++>> StringToLine (indirect)
++vim.current.buffer[0] = "\na":(<class 'vim.error'>, error('string cannot contain newlines',))
++>> SetBufferLine (indirect)
++vim.current.buffer[0] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
++>> SetBufferLines (indirect)
++vim.current.buffer[:] = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
++vim.current.buffer[:] = ["\na", "bc"]:(<class 'vim.error'>, error('string cannot contain newlines',))
++>> InsertBufferLines (indirect)
++vim.current.buffer.append(None):(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
++vim.current.buffer.append(["\na", "bc"]):(<class 'vim.error'>, error('string cannot contain newlines',))
++vim.current.buffer.append("\nbc"):(<class 'vim.error'>, error('string cannot contain newlines',))
++>> RBItem
++vim.current.buffer[100000000]:(<class 'IndexError'>, IndexError('line number out of range',))
++>> RBAsItem
++vim.current.buffer[100000000] = "":(<class 'IndexError'>, IndexError('line number out of range',))
++>> BufferAttr
++vim.current.buffer.xxx:(<class 'AttributeError'>, AttributeError("'vim.buffer' object has no attribute 'xxx'",))
++>> BufferSetattr
++vim.current.buffer.name = True:(<class 'TypeError'>, TypeError('object must be string',))
++vim.current.buffer.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
++>> BufferMark
++vim.current.buffer.mark(0):(<class 'TypeError'>, TypeError('must be str, not int',))
++vim.current.buffer.mark("abc"):(<class 'ValueError'>, ValueError('mark name must be a single character',))
++vim.current.buffer.mark("!"):(<class 'vim.error'>, error('invalid mark name',))
++>> BufferRange
++vim.current.buffer.range(1, 2, 3):(<class 'TypeError'>, TypeError('function takes exactly 2 arguments (3 given)',))
++> BufMap
++>> BufMapItem
++vim.buffers[None]:(<class 'TypeError'>, TypeError('key must be integer',))
++vim.buffers[100000000]:(<class 'KeyError'>, KeyError(100000000,))
++> Current
++>> CurrentGetattr
++vim.current.xxx:(<class 'AttributeError'>, AttributeError("'vim.currentdata' object has no attribute 'xxx'",))
++>> CurrentSetattr
++vim.current.line = True:(<class 'TypeError'>, TypeError('bad argument type for built-in operation',))
++vim.current.buffer = True:(<class 'TypeError'>, TypeError('expected vim.Buffer object',))
++vim.current.window = True:(<class 'TypeError'>, TypeError('expected vim.Window object',))
++vim.current.tabpage = True:(<class 'TypeError'>, TypeError('expected vim.TabPage object',))
++vim.current.xxx = True:(<class 'AttributeError'>, AttributeError('xxx',))
++vim.command("throw 'abc'"):(<class 'vim.error'>, error('abc',))
++Exe("throw 'def'"):(<class 'vim.error'>, error('def',))
++vim.eval("Exe('throw ''ghi''')"):(<class 'vim.error'>, error('ghi',))
++vim.eval("Exe('echoerr ''jkl''')"):(<class 'vim.error'>, error('Vim(echoerr):jkl',))
++vim.eval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
++vim.bindeval("Exe('xxx_non_existent_command_xxx')"):(<class 'vim.error'>, error('Vim:E492: Not an editor command: xxx_non_existent_command_xxx',))
+diff -Naur vim73.orig/src/testdir/test88.in vim73/src/testdir/test88.in
+--- vim73.orig/src/testdir/test88.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test88.in	2013-06-07 17:07:38.258899422 +0000
+@@ -0,0 +1,85 @@
++vim: set ft=vim
++
++Tests for correct display (cursor column position) with +conceal and
++tabulators.
++
++STARTTEST
++:so small.vim
++:if !has('conceal')
++   e! test.ok
++   wq! test.out
++:endif
++:" Conceal settings.
++:set conceallevel=2
++:set concealcursor=nc
++:syntax match test /|/ conceal
++:" Save current cursor position. Only works in <expr> mode, can't be used
++:" with :normal because it moves the cursor to the command line. Thanks to ZyX
++:" <zyx.vim@gmail.com> for the idea to use an <expr> mapping.
++:let positions = []
++:nnoremap <expr> GG ":let positions += ['".screenrow().":".screencol()."']\n"
++:" Start test.
++/^start:
++:normal ztj
++GGk
++:" We should end up in the same column when running these commands on the two
++:" lines.
++:normal ft
++GGk
++:normal $
++GGk
++:normal 0j
++GGk
++:normal ft
++GGk
++:normal $
++GGk
++:normal 0j0j
++GGk
++:" Same for next test block.
++:normal ft
++GGk
++:normal $
++GGk
++:normal 0j
++GGk
++:normal ft
++GGk
++:normal $
++GGk
++:normal 0j0j
++GGk
++:" And check W with multiple tabs and conceals in a line.
++:normal W
++GGk
++:normal W
++GGk
++:normal W
++GGk
++:normal $
++GGk
++:normal 0j
++GGk
++:normal W
++GGk
++:normal W
++GGk
++:normal W
++GGk
++:normal $
++GGk
++:" Display result.
++:call append('$', 'end:')
++:call append('$', positions)
++:/^end/,$wq! test.out
++ENDTEST
++
++start:
++.concealed.     text
++|concealed|	text
++
++	.concealed.	text
++	|concealed|	text
++
++.a.	.b.	.c.	.d.
++|a|	|b|	|c|	|d|
+diff -Naur vim73.orig/src/testdir/test88.ok vim73/src/testdir/test88.ok
+--- vim73.orig/src/testdir/test88.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test88.ok	2013-06-07 17:07:38.272232717 +0000
+@@ -0,0 +1,23 @@
++end:
++2:1
++2:17
++2:20
++3:1
++3:17
++3:20
++5:8
++5:25
++5:28
++6:8
++6:25
++6:28
++8:1
++8:9
++8:17
++8:25
++8:27
++9:1
++9:9
++9:17
++9:25
++9:26
+diff -Naur vim73.orig/src/testdir/test89.in vim73/src/testdir/test89.in
+--- vim73.orig/src/testdir/test89.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test89.in	2013-06-07 17:07:38.275566041 +0000
+@@ -0,0 +1,55 @@
++Some tests for setting 'number' and 'relativenumber'
++This is not all that useful now that the options are no longer reset when
++setting the other.
++
++STARTTEST
++:so small.vim
++:set hidden nocp nu rnu viminfo+=nviminfo
++:redir @a | set nu? rnu? | redir END
++:e! xx
++:redir @b | set nu? rnu? | redir END
++:e! #
++:$put ='results:'
++:$put a
++:$put b
++:"
++:set nonu nornu
++:setglobal nu
++:setlocal rnu
++:redir @c | setglobal nu? | redir END
++:set nonu nornu
++:setglobal rnu
++:setlocal nu
++:redir @d | setglobal rnu? | redir END
++:$put =':setlocal must NOT reset the other global value'
++:$put c
++:$put d
++:"
++:set nonu nornu
++:setglobal nu
++:setglobal rnu
++:redir @e | setglobal nu? | redir END
++:set nonu nornu
++:setglobal rnu
++:setglobal nu
++:redir @f | setglobal rnu? | redir END
++:$put =':setglobal MUST reset the other global value'
++:$put e
++:$put f
++:"
++:set nonu nornu
++:set nu
++:set rnu
++:redir @g | setglobal nu? | redir END
++:set nonu nornu
++:set rnu
++:set nu
++:redir @h | setglobal rnu? | redir END
++:$put =':set MUST reset the other global value'
++:$put g
++:$put h
++:"
++:/^results/,$w! test.out
++:q!
++ENDTEST
++
+diff -Naur vim73.orig/src/testdir/test89.ok vim73/src/testdir/test89.ok
+--- vim73.orig/src/testdir/test89.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test89.ok	2013-06-07 17:07:38.275566041 +0000
+@@ -0,0 +1,22 @@
++results:
++
++  number
++  relativenumber
++
++  number
++  relativenumber
++:setlocal must NOT reset the other global value
++
++  number
++
++  relativenumber
++:setglobal MUST reset the other global value
++
++  number
++
++  relativenumber
++:set MUST reset the other global value
++
++  number
++
++  relativenumber
+diff -Naur vim73.orig/src/testdir/test90.in vim73/src/testdir/test90.in
+--- vim73.orig/src/testdir/test90.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test90.in	2013-06-07 17:07:38.308899279 +0000
+@@ -0,0 +1,53 @@
++Tests for sha256() function.    vim: set ft=vim et ts=2 sw=2 :
++
++STARTTEST
++:so small.vim
++:if !has('cryptv') || !exists('*sha256')
++   e! test.ok
++   wq! test.out
++:endif
++:"
++:let testcase='test for empty string: '
++:if sha256("") ==# 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
++: let res='ok'
++:else
++: let res='ng'
++:endif
++:$put =testcase.res
++:"
++:let testcase='test for 1 char: '
++:if sha256("a") ==# 'ca978112ca1bbdcafac231b39a23dc4da786eff8147c4e72b9807785afee48bb'
++: let res='ok'
++:else
++: let res='ng'
++:endif
++:$put =testcase.res
++:"
++:let testcase='test for 3 chars: '
++:if sha256("abc") ==# 'ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad'
++: let res='ok'
++:else
++: let res='ng'
++:endif
++:$put =testcase.res
++:"
++:let testcase='test for contains meta char: '
++:if sha256("foo\nbar") ==# '807eff6267f3f926a21d234f7b0cf867a86f47e07a532f15e8cc39ed110ca776'
++: let res='ok'
++:else
++: let res='ng'
++:endif
++:$put =testcase.res
++:"
++:let testcase='test for contains non-ascii char: '
++:if sha256("\xde\xad\xbe\xef") ==# '5f78c33274e43fa9de5659265c1d917e25c03722dcb0b8d27db8d5feaa813953'
++: let res='ok'
++:else
++: let res='ng'
++:endif
++:$put =testcase.res
++"
++:/^start:/,$wq! test.out
++ENDTEST
++
++start:
+diff -Naur vim73.orig/src/testdir/test90.ok vim73/src/testdir/test90.ok
+--- vim73.orig/src/testdir/test90.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test90.ok	2013-06-07 17:07:38.322232574 +0000
+@@ -0,0 +1,6 @@
++start:
++test for empty string: ok
++test for 1 char: ok
++test for 3 chars: ok
++test for contains meta char: ok
++test for contains non-ascii char: ok
+diff -Naur vim73.orig/src/testdir/test91.in vim73/src/testdir/test91.in
+--- vim73.orig/src/testdir/test91.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test91.in	2013-06-07 17:07:38.328899222 +0000
+@@ -0,0 +1,99 @@
++Tests for getbufvar(), getwinvar(), gettabvar() and gettabwinvar().
++vim: set ft=vim :
++
++STARTTEST
++:so small.vim
++:"
++:" Test for getbufvar()
++:" Use strings to test for memory leaks.
++:let b:var_num = '1234'
++:let def_num = '5678'
++:$put =string(getbufvar(1, 'var_num'))
++:$put =string(getbufvar(1, 'var_num', def_num))
++:$put =string(getbufvar(1, ''))
++:$put =string(getbufvar(1, '', def_num))
++:unlet b:var_num
++:$put =string(getbufvar(1, 'var_num', def_num))
++:$put =string(getbufvar(1, ''))
++:$put =string(getbufvar(1, '', def_num))
++:$put =string(getbufvar(9, ''))
++:$put =string(getbufvar(9, '', def_num))
++:unlet def_num
++:$put =string(getbufvar(1, '&autoindent'))
++:$put =string(getbufvar(1, '&autoindent', 1))
++:"
++:" test for getwinvar()
++:let w:var_str = "Dance"
++:let def_str = "Chance"
++:$put =string(getwinvar(1, 'var_str'))
++:$put =string(getwinvar(1, 'var_str', def_str))
++:$put =string(getwinvar(1, ''))
++:$put =string(getwinvar(1, '', def_str))
++:unlet w:var_str
++:$put =string(getwinvar(1, 'var_str', def_str))
++:$put =string(getwinvar(1, ''))
++:$put =string(getwinvar(1, '', def_str))
++:$put =string(getwinvar(9, ''))
++:$put =string(getwinvar(9, '', def_str))
++:$put =string(getwinvar(1, '&nu'))
++:$put =string(getwinvar(1, '&nu',  1))
++:unlet def_str
++:"
++:" test for gettabvar()
++:tabnew
++:tabnew
++:let t:var_list = [1, 2, 3]
++:let def_list = [4, 5, 6, 7]
++:tabrewind
++:$put =string(gettabvar(3, 'var_list'))
++:$put =string(gettabvar(3, 'var_list', def_list))
++:$put =string(gettabvar(3, ''))
++:$put =string(gettabvar(3, '', def_list))
++:tablast
++:unlet t:var_list
++:tabrewind
++:$put =string(gettabvar(3, 'var_list', def_list))
++:$put =string(gettabvar(9, ''))
++:$put =string(gettabvar(9, '', def_list))
++:$put =string(gettabvar(3, '&nu'))
++:$put =string(gettabvar(3, '&nu', def_list))
++:unlet def_list
++:tabonly
++:"
++:" test for gettabwinvar()
++:tabnew
++:tabnew
++:tabprev
++:split
++:split
++:wincmd w
++:vert split
++:wincmd w
++:let w:var_dict = {'dict': 'tabwin'}
++:let def_dict = {'dict2': 'newval'}
++:wincmd b
++:tabrewind
++:$put =string(gettabwinvar(2, 3, 'var_dict'))
++:$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
++:$put =string(gettabwinvar(2, 3, ''))
++:$put =string(gettabwinvar(2, 3, '', def_dict))
++:tabnext
++:3wincmd w
++:unlet w:var_dict
++:tabrewind
++:$put =string(gettabwinvar(2, 3, 'var_dict', def_dict))
++:$put =string(gettabwinvar(2, 3, ''))
++:$put =string(gettabwinvar(2, 3, '', def_dict))
++:$put =string(gettabwinvar(2, 9, ''))
++:$put =string(gettabwinvar(2, 9, '', def_dict))
++:$put =string(gettabwinvar(9, 3, ''))
++:$put =string(gettabwinvar(9, 3, '', def_dict))
++:unlet def_dict
++:$put =string(gettabwinvar(2, 3, '&nux'))
++:$put =string(gettabwinvar(2, 3, '&nux', 1))
++:tabonly
++:"
++:/^start/,$wq! test.out
++ENDTEST
++
++start:
+diff -Naur vim73.orig/src/testdir/test91.ok vim73/src/testdir/test91.ok
+--- vim73.orig/src/testdir/test91.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test91.ok	2013-06-07 17:07:38.338899193 +0000
+@@ -0,0 +1,45 @@
++start:
++'1234'
++'1234'
++{'var_num': '1234'}
++{'var_num': '1234'}
++'5678'
++{}
++{}
++''
++'5678'
++0
++0
++'Dance'
++'Dance'
++{'var_str': 'Dance'}
++{'var_str': 'Dance'}
++'Chance'
++{}
++{}
++''
++'Chance'
++0
++0
++[1, 2, 3]
++[1, 2, 3]
++''
++[4, 5, 6, 7]
++[4, 5, 6, 7]
++''
++[4, 5, 6, 7]
++''
++[4, 5, 6, 7]
++{'dict': 'tabwin'}
++{'dict': 'tabwin'}
++{'var_dict': {'dict': 'tabwin'}}
++{'var_dict': {'dict': 'tabwin'}}
++{'dict2': 'newval'}
++{}
++{}
++''
++{'dict2': 'newval'}
++''
++{'dict2': 'newval'}
++''
++1
+diff -Naur vim73.orig/src/testdir/test92.in vim73/src/testdir/test92.in
+--- vim73.orig/src/testdir/test92.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test92.in	2013-06-07 17:07:38.352232489 +0000
+@@ -0,0 +1,48 @@
++vim: set ft=vim fenc=utf-8:
++
++Tests if :mksession saves cursor columns correctly in presence of tab and 
++multibyte characters when fileencoding=utf-8.
++
++STARTTEST
++:so mbyte.vim
++:if !has('mksession')
++:  e! test.ok
++:  wq! test.out
++:endif
++:set sessionoptions=buffers splitbelow fileencoding=utf-8
++/^start:
++:vsplit
++j16|:split
++j16|:split
++j16|:split
++j8|:split
++j8|:split
++j16|:split
++j16|:split
++j16|:wincmd l
++/^start:
++:set nowrap
++j16|3zl:split
++j016|3zl:split
++j016|3zl:split
++j08|3zl:split
++j08|3zl:split
++j016|3zl:split
++j016|3zl:split
++j016|3zl:split
++:mksession! test.out
++:new test.out
++:v/\(^ *normal! 0\|^ *exe 'normal!\)/d
++:w
++:qa!
++ENDTEST
++
++start:
++no multibyte chAracter
++	one leaDing tab
++    four leadinG spaces
++two		consecutive tabs
++two	tabs	in one line
++one âŠ multibyteCharacter
++a âbâ two multiByte characters
++âcâ1â¬ three mulTibyte characters
+diff -Naur vim73.orig/src/testdir/test92.ok vim73/src/testdir/test92.ok
+--- vim73.orig/src/testdir/test92.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test92.ok	2013-06-07 17:07:38.368899108 +0000
+@@ -0,0 +1,26 @@
++normal! 016|
++normal! 016|
++normal! 016|
++normal! 08|
++normal! 08|
++normal! 016|
++normal! 016|
++normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 8 . '|'
++  normal! 08|
++  exe 'normal! ' . s:c . '|zs' . 8 . '|'
++  normal! 08|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
+diff -Naur vim73.orig/src/testdir/test93.in vim73/src/testdir/test93.in
+--- vim73.orig/src/testdir/test93.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test93.in	2013-06-07 17:07:38.375565755 +0000
+@@ -0,0 +1,48 @@
++vim: set ft=vim fenc=latin1:
++
++Tests if :mksession saves cursor columns correctly in presence of tab and 
++multibyte characters when fileencoding=latin1.
++
++STARTTEST
++:so mbyte.vim
++:if !has('mksession')
++:  e! test.ok
++:  wq! test.out
++:endif
++:set sessionoptions=buffers splitbelow fileencoding=latin1
++/^start:
++:vsplit
++j16|:split
++j16|:split
++j16|:split
++j8|:split
++j8|:split
++j16|:split
++j16|:split
++j16|:wincmd l
++/^start:
++:set nowrap
++j16|3zl:split
++j016|3zl:split
++j016|3zl:split
++j08|3zl:split
++j08|3zl:split
++j016|3zl:split
++j016|3zl:split
++j016|3zl:split
++:mksession! test.out
++:new test.out
++:v/\(^ *normal! 0\|^ *exe 'normal!\)/d
++:w
++:qa!
++ENDTEST
++
++start:
++no multibyte chAracter
++	one leaDing tab
++    four leadinG spaces
++two		consecutive tabs
++two	tabs	in one line
++one ä multibyteCharacter
++aä Ä  two multiByte characters
++Aäöü  three mulTibyte characters
+diff -Naur vim73.orig/src/testdir/test93.ok vim73/src/testdir/test93.ok
+--- vim73.orig/src/testdir/test93.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test93.ok	2013-06-07 17:07:38.388899051 +0000
+@@ -0,0 +1,26 @@
++normal! 016|
++normal! 016|
++normal! 016|
++normal! 08|
++normal! 08|
++normal! 016|
++normal! 016|
++normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 8 . '|'
++  normal! 08|
++  exe 'normal! ' . s:c . '|zs' . 8 . '|'
++  normal! 08|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
++  exe 'normal! ' . s:c . '|zs' . 16 . '|'
++  normal! 016|
+diff -Naur vim73.orig/src/testdir/test94.in vim73/src/testdir/test94.in
+--- vim73.orig/src/testdir/test94.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test94.in	2013-06-07 17:07:38.398899022 +0000
+@@ -0,0 +1,95 @@
++Test for Visual mode and operators
++
++Tests for the two kinds of operations: Those executed with Visual mode
++followed by an operator and those executed via Operator-pending mode. Also
++part of the test are mappings, counts, and repetition with the . command.
++
++Test cases:
++- Visual modes (v V CTRL-V) followed by an operator; count; repeating
++- Visual mode maps; count; repeating
++  - Simple
++  - With an Ex command (custom text object)
++- Operator-pending mode maps
++  - Simple
++  - With Ex command moving the cursor
++  - With Ex command and Visual selection (custom text object)
++- Patch 7.3.879: Properly abort Ex command in Operator-pending mode
++
++STARTTEST
++:so small.vim
++:set nocp viminfo+=nviminfo
++:
++:" User functions
++:function MoveToCap()
++:  call search('\u', 'W')
++:endfunction
++:function SelectInCaps()
++:  let [line1, col1] = searchpos('\u', 'bcnW')
++:  let [line2, col2] = searchpos('.\u', 'nW')
++:  call setpos("'<", [0, line1, col1, 0])
++:  call setpos("'>", [0, line2, col2, 0])
++:  normal! gv
++:endfunction
++:
++:" Visual modes followed by operator
++/^apple
++lvld.l3vd.:
++/^line 1
++Vcnewlinej.j2Vd.:
++/^xxxx
++jlc  l.l2c----l.:
++:
++:" Visual mode maps (movement and text object)
++:vnoremap W /\u/s-1<CR>
++:vnoremap iW :<C-U>call SelectInCaps()<CR>
++/^Kiwi
++vWcNol.fD2vd.:
++/^Jambu
++llviWc-l.l2vdl.:
++:
++:" Operator-pending mode maps (movement and text object)
++:onoremap W /\u/<CR>
++:onoremap <Leader>W :<C-U>call MoveToCap()<CR>
++:onoremap iW :<C-U>call SelectInCaps()<CR>
++/^Pineapple
++cW-l.l2.l.:
++/^Juniper
++g?\WfD.:
++/^Lemon
++yiWPlciWNewfr.:
++:
++:" Patch 7.3.879: Properly abort Operator-pending mode for "dv:<Esc>" etc.
++/^zzzz
++dV:
+dv:
+:set noma | let v:errmsg = ''
++d:
+:set ma | put = v:errmsg =~# '^E21' ? 'ok' : 'failed'
++dv:dV::set noma | let v:errmsg = ''
++d::set ma | put = v:errmsg =~# '^E21' ? 'failed' : 'ok'
++:/^start:/+2,$w! test.out
++:q!
++ENDTEST
++
++start:
++
++apple banana cherry
++
++line 1 line 1
++line 2 line 2
++line 3 line 3
++line 4 line 4
++line 5 line 5
++line 6 line 6
++
++xxxxxxxxxxxxx
++xxxxxxxxxxxxx
++xxxxxxxxxxxxx
++xxxxxxxxxxxxx
++
++KiwiRaspberryDateWatermelonPeach
++JambuRambutanBananaTangerineMango
++
++PineappleQuinceLoganberryOrangeGrapefruitKiwiZ
++JuniperDurianZ
++LemonNectarineZ
++
++zzzz
++zzzz
+diff -Naur vim73.orig/src/testdir/test94.ok vim73/src/testdir/test94.ok
+--- vim73.orig/src/testdir/test94.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test94.ok	2013-06-07 17:07:38.408898993 +0000
+@@ -0,0 +1,20 @@
++a y
++
++newline
++newline
++
++    --------x
++    --------x
++xxxx--------x
++xxxx--------x
++
++NoNoberryach
++--ago
++
++----Z
++WhavcreQhevnaZ
++LemonNewNewZ
++
++zzz
++ok
++ok
+diff -Naur vim73.orig/src/testdir/test95.in vim73/src/testdir/test95.in
+--- vim73.orig/src/testdir/test95.in	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test95.in	2013-06-07 17:07:38.425565612 +0000
+@@ -0,0 +1,124 @@
++Test for regexp patterns with multi-byte support, using utf-8.
++See test64 for the non-multi-byte tests.
++
++A pattern that gives the expected result produces OK, so that we know it was
++actually tried.
++
++STARTTEST
++:so small.vim
++:so mbyte.vim
++:set nocp encoding=utf-8 viminfo+=nviminfo nomore
++:" tl is a List of Lists with:
++:"    2: test auto/old/new  0: test auto/old  1: test auto/new
++:"    regexp pattern
++:"    text to test the pattern on
++:"    expected match (optional)
++:"    expected submatch 1 (optional)
++:"    expected submatch 2 (optional)
++:"    etc.
++:"  When there is no match use only the first two items.
++:let tl = []
++
++:"""" Multi-byte character tests. These will fail unless vim is compiled
++:"""" with Multibyte (FEAT_MBYTE) or BIG/HUGE features.
++:call add(tl, [2, '[[:alpha:][=a=]]\+', '879 aiaÃ£Ã¢aiuvna ', 'aiaÃ£Ã¢aiuvna'])
++:call add(tl, [2, '[[=a=]]\+', 'ddaÃ£Ã¢bcd', 'aÃ£Ã¢'])								" equivalence classes
++:call add(tl, [2, '[^àž¡ ]\+', 'àž¡àž¡ oijasoifjos ifjoisj f osij j àž¡àž¡àž¡àž¡àž¡ abcd', 'oijasoifjos'])
++:call add(tl, [2, ' [^ ]\+', 'start àž¡abcdàž¡ ', ' àž¡abcdàž¡'])
++:call add(tl, [2, '[àž¡[:alpha:][=a=]]\+', '879 aiaÃ£àž¡Ã¢àž¡aiuvna ', 'aiaÃ£àž¡Ã¢àž¡aiuvna'])
++
++:" this is not a normal "i" but 0xec
++:call add(tl, [2, '\p\+', 'Ã¬a', 'Ã¬a'])
++
++:"""" Test recognition of some character classes
++:call add(tl, [2, '\i\+', '&*Âšxx ', 'xx'])
++:call add(tl, [2, '\f\+', '&*Âfname ', 'fname'])
++
++:"""" Test composing character matching
++:call add(tl, [2, '.àž¡', 'xàž¡à¹x yàž¡y', 'yàž¡'])
++:call add(tl, [2, '.àž¡à¹', 'xàž¡à¹x yàž¡y', 'xàž¡à¹'])
++:call add(tl, [2, "\u05b9", " x\u05b9 ", "x\u05b9"])
++:call add(tl, [2, ".\u05b9", " x\u05b9 ", "x\u05b9"])
++:call add(tl, [2, "\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
++:call add(tl, [2, ".\u05b9\u05bb", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
++:call add(tl, [2, "\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
++:call add(tl, [2, ".\u05bb\u05b9", " x\u05b9\u05bb ", "x\u05b9\u05bb"])
++:call add(tl, [2, "\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"])
++:call add(tl, [2, ".\u05b9", " y\u05bb x\u05b9 ", "x\u05b9"])
++:call add(tl, [2, "\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
++:call add(tl, [2, ".\u05b9", " y\u05bb\u05b9 x\u05b9 ", "y\u05bb\u05b9"])
++:call add(tl, [1, "\u05b9\u05bb", " y\u05b9 x\u05b9\u05bb ", "x\u05b9\u05bb"])
++:call add(tl, [2, ".\u05b9\u05bb", " y\u05bb x\u05b9\u05bb ", "x\u05b9\u05bb"])
++
++
++:"""" Test \Z
++:call add(tl, [2, 'Ãº\Z', 'x'])
++:call add(tl, [2, '××××\Z', '××××', '××××'])
++:call add(tl, [2, '×Ö°××Öž×\Z', '××××', '××××'])
++:call add(tl, [2, '××××\Z', '×Ö°××Öž×', '×Ö°××Öž×'])
++:call add(tl, [2, '×Ö°××Öž×\Z', '×Ö°××Öž×', '×Ö°××Öž×'])
++:call add(tl, [2, '×Ö°\Z', '×Ö°×Ö·', '×Ö·'])
++:call add(tl, [2, "×§\u200d\u05b9x\\Z", "x×§\u200d\u05b9xy", "×§\u200d\u05b9x"])
++:call add(tl, [2, "×§\u200d\u05b9x\\Z", "x×§\u200dxy", "×§\u200dx"])
++:call add(tl, [2, "×§\u200dx\\Z", "x×§\u200d\u05b9xy", "×§\u200d\u05b9x"])
++:call add(tl, [2, "×§\u200dx\\Z", "x×§\u200dxy", "×§\u200dx"])
++:call add(tl, [2, "\u05b9\\Z", "xyz"])
++:call add(tl, [2, "\\Z\u05b9", "xyz"])
++:call add(tl, [2, "\u05b9\\Z", "xy\u05b9z", "y\u05b9"])
++:call add(tl, [2, "\\Z\u05b9", "xy\u05b9z", "y\u05b9"])
++:call add(tl, [1, "\u05b9\\+\\Z", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"])
++:call add(tl, [1, "\\Z\u05b9\\+", "xy\u05b9z\u05b9 ", "y\u05b9z\u05b9"])
++
++:"""" Combining different tests and features
++:call add(tl, [2, '[^[=a=]]\+', 'ddaÃ£Ã¢bcd', 'dd'])
++
++:"""" Run the tests
++
++:"
++:for t in tl
++:  let re = t[0]
++:  let pat = t[1]
++:  let text = t[2]
++:  let matchidx = 3
++:  for engine in [0, 1, 2]
++:    if engine == 2 && re == 0 || engine == 1 && re == 1
++:      continue
++:    endif
++:    let &regexpengine = engine
++:    try
++:      let l = matchlist(text, pat)
++:    catch
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", caused an exception: \"' . v:exception . '\"'
++:    endtry
++:" check the match itself
++:    if len(l) == 0 && len(t) > matchidx
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", did not match, expected: \"' . t[matchidx] . '\"'
++:    elseif len(l) > 0 && len(t) == matchidx
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected no match'
++:    elseif len(t) > matchidx && l[0] != t[matchidx]
++:      $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", match: \"' . l[0] . '\", expected: \"' . t[matchidx] . '\"'
++:    else
++:      $put ='OK ' . engine . ' - ' . pat
++:    endif
++:    if len(l) > 0
++:"   check all the nine submatches
++:      for i in range(1, 9)
++:        if len(t) <= matchidx + i
++:          let e = ''
++:        else
++:          let e = t[matchidx + i]
++:        endif
++:        if l[i] != e
++:          $put ='ERROR: pat: \"' . pat . '\", text: \"' . text . '\", submatch ' . i . ': \"' . l[i] . '\", expected: \"' . e . '\"'
++:        endif
++:      endfor
++:      unlet i
++:    endif
++:  endfor
++:endfor
++:unlet t tl e l
++
++:/\%#=1^Results/,$wq! test.out
++ENDTEST
++
++Results of test95:
+diff -Naur vim73.orig/src/testdir/test95.ok vim73/src/testdir/test95.ok
+--- vim73.orig/src/testdir/test95.ok	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/testdir/test95.ok	2013-06-07 17:07:38.438898908 +0000
+@@ -0,0 +1,115 @@
++Results of test95:
++OK 0 - [[:alpha:][=a=]]\+
++OK 1 - [[:alpha:][=a=]]\+
++OK 2 - [[:alpha:][=a=]]\+
++OK 0 - [[=a=]]\+
++OK 1 - [[=a=]]\+
++OK 2 - [[=a=]]\+
++OK 0 - [^àž¡ ]\+
++OK 1 - [^àž¡ ]\+
++OK 2 - [^àž¡ ]\+
++OK 0 -  [^ ]\+
++OK 1 -  [^ ]\+
++OK 2 -  [^ ]\+
++OK 0 - [àž¡[:alpha:][=a=]]\+
++OK 1 - [àž¡[:alpha:][=a=]]\+
++OK 2 - [àž¡[:alpha:][=a=]]\+
++OK 0 - \p\+
++OK 1 - \p\+
++OK 2 - \p\+
++OK 0 - \i\+
++OK 1 - \i\+
++OK 2 - \i\+
++OK 0 - \f\+
++OK 1 - \f\+
++OK 2 - \f\+
++OK 0 - .àž¡
++OK 1 - .àž¡
++OK 2 - .àž¡
++OK 0 - .àž¡à¹
++OK 1 - .àž¡à¹
++OK 2 - .àž¡à¹
++OK 0 - Ö¹
++OK 1 - Ö¹
++OK 2 - Ö¹
++OK 0 - .Ö¹
++OK 1 - .Ö¹
++OK 2 - .Ö¹
++OK 0 - Ö¹Ö»
++OK 1 - Ö¹Ö»
++OK 2 - Ö¹Ö»
++OK 0 - .Ö¹Ö»
++OK 1 - .Ö¹Ö»
++OK 2 - .Ö¹Ö»
++OK 0 - Ö»Ö¹
++OK 1 - Ö»Ö¹
++OK 2 - Ö»Ö¹
++OK 0 - .Ö»Ö¹
++OK 1 - .Ö»Ö¹
++OK 2 - .Ö»Ö¹
++OK 0 - Ö¹
++OK 1 - Ö¹
++OK 2 - Ö¹
++OK 0 - .Ö¹
++OK 1 - .Ö¹
++OK 2 - .Ö¹
++OK 0 - Ö¹
++OK 1 - Ö¹
++OK 2 - Ö¹
++OK 0 - .Ö¹
++OK 1 - .Ö¹
++OK 2 - .Ö¹
++OK 0 - Ö¹Ö»
++OK 2 - Ö¹Ö»
++OK 0 - .Ö¹Ö»
++OK 1 - .Ö¹Ö»
++OK 2 - .Ö¹Ö»
++OK 0 - Ãº\Z
++OK 1 - Ãº\Z
++OK 2 - Ãº\Z
++OK 0 - ××××\Z
++OK 1 - ××××\Z
++OK 2 - ××××\Z
++OK 0 - ×Ö°××Öž×\Z
++OK 1 - ×Ö°××Öž×\Z
++OK 2 - ×Ö°××Öž×\Z
++OK 0 - ××××\Z
++OK 1 - ××××\Z
++OK 2 - ××××\Z
++OK 0 - ×Ö°××Öž×\Z
++OK 1 - ×Ö°××Öž×\Z
++OK 2 - ×Ö°××Öž×\Z
++OK 0 - ×Ö°\Z
++OK 1 - ×Ö°\Z
++OK 2 - ×Ö°\Z
++OK 0 - ×§âÖ¹x\Z
++OK 1 - ×§âÖ¹x\Z
++OK 2 - ×§âÖ¹x\Z
++OK 0 - ×§âÖ¹x\Z
++OK 1 - ×§âÖ¹x\Z
++OK 2 - ×§âÖ¹x\Z
++OK 0 - ×§âx\Z
++OK 1 - ×§âx\Z
++OK 2 - ×§âx\Z
++OK 0 - ×§âx\Z
++OK 1 - ×§âx\Z
++OK 2 - ×§âx\Z
++OK 0 - Ö¹\Z
++OK 1 - Ö¹\Z
++OK 2 - Ö¹\Z
++OK 0 - \ZÖ¹
++OK 1 - \ZÖ¹
++OK 2 - \ZÖ¹
++OK 0 - Ö¹\Z
++OK 1 - Ö¹\Z
++OK 2 - Ö¹\Z
++OK 0 - \ZÖ¹
++OK 1 - \ZÖ¹
++OK 2 - \ZÖ¹
++OK 0 - Ö¹\+\Z
++OK 2 - Ö¹\+\Z
++OK 0 - \ZÖ¹\+
++OK 2 - \ZÖ¹\+
++OK 0 - [^[=a=]]\+
++OK 1 - [^[=a=]]\+
++OK 2 - [^[=a=]]\+
+diff -Naur vim73.orig/src/typemap vim73/src/typemap
+--- vim73.orig/src/typemap	2010-05-15 11:04:10.000000000 +0000
++++ vim73/src/typemap	2013-06-07 17:07:38.532231974 +0000
+@@ -6,7 +6,7 @@
+ T_VIOBJNOMUNGE
+ 	if (sv_isa($arg, \"${ntype}\")) {
+ 	    IV tmp = SvIV((SV*)SvRV($arg));
+-	    $var = ($type) tmp;
++	    $var = INT2PTR($type, tmp);
+ 	    if (!tmp)
+ 		croak(\"$ntype no longer exists\");
+ 	}
+diff -Naur vim73.orig/src/ui.c vim73/src/ui.c
+--- vim73.orig/src/ui.c	2010-08-08 13:17:30.000000000 +0000
++++ vim73/src/ui.c	2013-06-07 17:07:38.548898593 +0000
+@@ -58,7 +58,7 @@
+ #endif
+ }
+ 
+-#if defined(UNIX) || defined(VMS) || defined(PROTO)
++#if defined(UNIX) || defined(VMS) || defined(PROTO) || defined(WIN3264)
+ /*
+  * When executing an external program, there may be some typed characters that
+  * are not consumed by it.  Give them back to ui_inchar() and they are stored
+@@ -98,7 +98,7 @@
+ #endif
+ 
+ /*
+- * ui_inchar(): low level input funcion.
++ * ui_inchar(): low level input function.
+  * Get characters from the keyboard.
+  * Return the number of characters that are available.
+  * If "wtime" == 0 do not wait for characters.
+@@ -381,6 +381,8 @@
+ 
+ #if defined(FEAT_CLIPBOARD) || defined(PROTO)
+ 
++static void clip_copy_selection __ARGS((VimClipboard *clip));
++
+ /*
+  * Selection stuff using Visual mode, for cutting and pasting text to other
+  * windows.
+@@ -423,9 +425,10 @@
+  * this is called whenever VIsual mode is ended.
+  */
+     void
+-clip_update_selection()
++clip_update_selection(clip)
++    VimClipboard    *clip;
+ {
+-    pos_T    start, end;
++    pos_T	    start, end;
+ 
+     /* If visual mode is only due to a redo command ("."), then ignore it */
+     if (!redo_VIsual_busy && VIsual_active && (State & NORMAL))
+@@ -444,17 +447,17 @@
+ 	    start = curwin->w_cursor;
+ 	    end = VIsual;
+ 	}
+-	if (!equalpos(clip_star.start, start)
+-		|| !equalpos(clip_star.end, end)
+-		|| clip_star.vmode != VIsual_mode)
+-	{
+-	    clip_clear_selection();
+-	    clip_star.start = start;
+-	    clip_star.end = end;
+-	    clip_star.vmode = VIsual_mode;
+-	    clip_free_selection(&clip_star);
+-	    clip_own_selection(&clip_star);
+-	    clip_gen_set_selection(&clip_star);
++	if (!equalpos(clip->start, start)
++		|| !equalpos(clip->end, end)
++		|| clip->vmode != VIsual_mode)
++	{
++	    clip_clear_selection(clip);
++	    clip->start = start;
++	    clip->end = end;
++	    clip->vmode = VIsual_mode;
++	    clip_free_selection(clip);
++	    clip_own_selection(clip);
++	    clip_gen_set_selection(clip);
+ 	}
+     }
+ }
+@@ -469,13 +472,13 @@
+      */
+ #ifdef FEAT_X11
+     /* Always own the selection, we might have lost it without being
+-     * notified. */
++     * notified, e.g. during a ":sh" command. */
+     if (cbd->available)
+     {
+ 	int was_owned = cbd->owned;
+ 
+ 	cbd->owned = (clip_gen_own_selection(cbd) == OK);
+-	if (!was_owned && cbd == &clip_star)
++	if (!was_owned && (cbd == &clip_star || cbd == &clip_plus))
+ 	{
+ 	    /* May have to show a different kind of highlighting for the
+ 	     * selected area.  There is no specific redraw command for this,
+@@ -483,13 +486,14 @@
+ 	    if (cbd->owned
+ 		    && (get_real_state() == VISUAL
+ 					    || get_real_state() == SELECTMODE)
+-		    && clip_isautosel()
++		    && (cbd == &clip_star ? clip_isautosel_star()
++						      : clip_isautosel_plus())
+ 		    && hl_attr(HLF_V) != hl_attr(HLF_VNC))
+ 		redraw_curbuf_later(INVERTED_ALL);
+ 	}
+     }
+ #else
+-    /* Only own the clibpard when we didn't own it yet. */
++    /* Only own the clipboard when we didn't own it yet. */
+     if (!cbd->owned && cbd->available)
+ 	cbd->owned = (clip_gen_own_selection(cbd) == OK);
+ #endif
+@@ -502,12 +506,15 @@
+ #ifdef FEAT_X11
+     int	    was_owned = cbd->owned;
+ #endif
+-    int     visual_selection = (cbd == &clip_star);
++    int     visual_selection = FALSE;
++
++    if (cbd == &clip_star || cbd == &clip_plus)
++	visual_selection = TRUE;
+ 
+     clip_free_selection(cbd);
+     cbd->owned = FALSE;
+     if (visual_selection)
+-	clip_clear_selection();
++	clip_clear_selection(cbd);
+     clip_gen_lose_selection(cbd);
+ #ifdef FEAT_X11
+     if (visual_selection)
+@@ -518,7 +525,8 @@
+ 	if (was_owned
+ 		&& (get_real_state() == VISUAL
+ 					    || get_real_state() == SELECTMODE)
+-		&& clip_isautosel()
++		&& (cbd == &clip_star ?
++				clip_isautosel_star() : clip_isautosel_plus())
+ 		&& hl_attr(HLF_V) != hl_attr(HLF_VNC))
+ 	{
+ 	    update_curbuf(INVERTED_ALL);
+@@ -534,18 +542,18 @@
+ #endif
+ }
+ 
+-    void
+-clip_copy_selection()
++    static void
++clip_copy_selection(clip)
++    VimClipboard	*clip;
+ {
+-    if (VIsual_active && (State & NORMAL) && clip_star.available)
++    if (VIsual_active && (State & NORMAL) && clip->available)
+     {
+-	if (clip_isautosel())
+-	    clip_update_selection();
+-	clip_free_selection(&clip_star);
+-	clip_own_selection(&clip_star);
+-	if (clip_star.owned)
+-	    clip_get_selection(&clip_star);
+-	clip_gen_set_selection(&clip_star);
++	clip_update_selection(clip);
++	clip_free_selection(clip);
++	clip_own_selection(clip);
++	if (clip->owned)
++	    clip_get_selection(clip);
++	clip_gen_set_selection(clip);
+     }
+ }
+ 
+@@ -555,21 +563,38 @@
+     void
+ clip_auto_select()
+ {
+-    if (clip_isautosel())
+-	clip_copy_selection();
++    if (clip_isautosel_star())
++	clip_copy_selection(&clip_star);
++    if (clip_isautosel_plus())
++	clip_copy_selection(&clip_plus);
+ }
+ 
+ /*
+- * Return TRUE if automatic selection of Visual area is desired.
++ * Return TRUE if automatic selection of Visual area is desired for the *
++ * register.
+  */
+     int
+-clip_isautosel()
++clip_isautosel_star()
+ {
+     return (
+ #ifdef FEAT_GUI
+ 	    gui.in_use ? (vim_strchr(p_go, GO_ASEL) != NULL) :
+ #endif
+-	    clip_autoselect);
++	    clip_autoselect_star);
++}
++
++/*
++ * Return TRUE if automatic selection of Visual area is desired for the +
++ * register.
++ */
++    int
++clip_isautosel_plus()
++{
++    return (
++#ifdef FEAT_GUI
++	    gui.in_use ? (vim_strchr(p_go, GO_ASELPLUS) != NULL) :
++#endif
++	    clip_autoselect_plus);
+ }
+ 
+ 
+@@ -657,7 +682,7 @@
+     VimClipboard	*cb = &clip_star;
+ 
+     if (cb->state == SELECT_DONE)
+-	clip_clear_selection();
++	clip_clear_selection(cb);
+ 
+     row = check_row(row);
+     col = check_col(col);
+@@ -749,7 +774,7 @@
+ 	printf("Selection ended: (%u,%u) to (%u,%u)\n", cb->start.lnum,
+ 		cb->start.col, cb->end.lnum, cb->end.col);
+ #endif
+-	if (clip_isautosel()
++	if (clip_isautosel_star()
+ 		|| (
+ #ifdef FEAT_GUI
+ 		    gui.in_use ? (vim_strchr(p_go, GO_ASELML) != NULL) :
+@@ -932,16 +957,16 @@
+  * Called from outside to clear selected region from the display
+  */
+     void
+-clip_clear_selection()
++clip_clear_selection(cbd)
++    VimClipboard    *cbd;
+ {
+-    VimClipboard    *cb = &clip_star;
+ 
+-    if (cb->state == SELECT_CLEARED)
++    if (cbd->state == SELECT_CLEARED)
+ 	return;
+ 
+-    clip_invert_area((int)cb->start.lnum, cb->start.col, (int)cb->end.lnum,
+-						     cb->end.col, CLIP_CLEAR);
+-    cb->state = SELECT_CLEARED;
++    clip_invert_area((int)cbd->start.lnum, cbd->start.col, (int)cbd->end.lnum,
++						     cbd->end.col, CLIP_CLEAR);
++    cbd->state = SELECT_CLEARED;
+ }
+ 
+ /*
+@@ -954,7 +979,7 @@
+     if (clip_star.state == SELECT_DONE
+ 	    && row2 >= clip_star.start.lnum
+ 	    && row1 <= clip_star.end.lnum)
+-	clip_clear_selection();
++	clip_clear_selection(&clip_star);
+ }
+ 
+ /*
+@@ -1431,6 +1456,21 @@
+ #endif
+ }
+ 
++    int
++clip_gen_owner_exists(cbd)
++    VimClipboard	*cbd UNUSED;
++{
++#ifdef FEAT_XCLIPBOARD
++# ifdef FEAT_GUI_GTK
++    if (gui.in_use)
++	return clip_gtk_owner_exists(cbd);
++    else
++# endif
++	return clip_x11_owner_exists(cbd);
++#endif
++    return TRUE;
++}
++
+ #endif /* FEAT_CLIPBOARD */
+ 
+ /*****************************************************************************
+@@ -1609,7 +1649,7 @@
+ 
+ #if defined(FEAT_HANGULIN) || defined(PROTO)
+     void
+-push_raw_key (s, len)
++push_raw_key(s, len)
+     char_u  *s;
+     int	    len;
+ {
+@@ -1917,6 +1957,7 @@
+ static Atom	vim_atom;	/* Vim's own special selection format */
+ #ifdef FEAT_MBYTE
+ static Atom	vimenc_atom;	/* Vim's extended selection format */
++static Atom	utf8_atom;
+ #endif
+ static Atom	compound_text_atom;
+ static Atom	text_atom;
+@@ -1930,6 +1971,7 @@
+     vim_atom	       = XInternAtom(dpy, VIM_ATOM_NAME,   False);
+ #ifdef FEAT_MBYTE
+     vimenc_atom	       = XInternAtom(dpy, VIMENC_ATOM_NAME,False);
++    utf8_atom	       = XInternAtom(dpy, "UTF8_STRING",   False);
+ #endif
+     compound_text_atom = XInternAtom(dpy, "COMPOUND_TEXT", False);
+     text_atom	       = XInternAtom(dpy, "TEXT",	   False);
+@@ -1944,10 +1986,9 @@
+  */
+ 
+ static Boolean	clip_x11_convert_selection_cb __ARGS((Widget, Atom *, Atom *, Atom *, XtPointer *, long_u *, int *));
+-
+ static void  clip_x11_lose_ownership_cb __ARGS((Widget, Atom *));
+-
+ static void clip_x11_timestamp_cb __ARGS((Widget w, XtPointer n, XEvent *event, Boolean *cont));
++static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
+ 
+ /*
+  * Property callback to get a timestamp for XtOwnSelection.
+@@ -1985,8 +2026,17 @@
+ 	return;
+ 
+     /* Get the selection, using the event timestamp. */
+-    XtOwnSelection(w, xproperty->atom, xproperty->time,
+-	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb, NULL);
++    if (XtOwnSelection(w, xproperty->atom, xproperty->time,
++	    clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
++	    NULL) == OK)
++    {
++	/* Set the "owned" flag now, there may have been a call to
++	 * lose_ownership_cb in between. */
++	if (xproperty->atom == clip_plus.sel_atom)
++	    clip_plus.owned = TRUE;
++	else
++	    clip_star.owned = TRUE;
++    }
+ }
+ 
+     void
+@@ -1997,8 +2047,6 @@
+ 	    /*(XtEventHandler)*/clip_x11_timestamp_cb, (XtPointer)NULL);
+ }
+ 
+-static void  clip_x11_request_selection_cb __ARGS((Widget, XtPointer, Atom *, Atom *, XtPointer, long_u *, int *));
+-
+     static void
+ clip_x11_request_selection_cb(w, success, sel_atom, type, value, length,
+ 			      format)
+@@ -2010,7 +2058,7 @@
+     long_u	*length;
+     int		*format;
+ {
+-    int		motion_type;
++    int		motion_type = MAUTO;
+     long_u	len;
+     char_u	*p;
+     char	**text_list = NULL;
+@@ -2030,7 +2078,6 @@
+ 	*(int *)success = FALSE;
+ 	return;
+     }
+-    motion_type = MCHAR;
+     p = (char_u *)value;
+     len = *length;
+     if (*type == vim_atom)
+@@ -2069,7 +2116,11 @@
+     }
+ #endif
+ 
+-    else if (*type == compound_text_atom || (
++    else if (*type == compound_text_atom
++#ifdef FEAT_MBYTE
++	    || *type == utf8_atom
++#endif
++	    || (
+ #ifdef FEAT_MBYTE
+ 		enc_dbcs != 0 &&
+ #endif
+@@ -2083,7 +2134,13 @@
+ 	text_prop.encoding = *type;
+ 	text_prop.format = *format;
+ 	text_prop.nitems = len;
+-	status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
++#if defined(FEAT_MBYTE) && defined(X_HAVE_UTF8_STRING)
++	if (*type == utf8_atom)
++	    status = Xutf8TextPropertyToTextList(X_DISPLAY, &text_prop,
++							 &text_list, &n_text);
++	else
++#endif
++	    status = XmbTextPropertyToTextList(X_DISPLAY, &text_prop,
+ 							 &text_list, &n_text);
+ 	if (status != Success || n_text < 1)
+ 	{
+@@ -2123,7 +2180,7 @@
+ #else
+ 	    1
+ #endif
+-	    ; i < 5; i++)
++	    ; i < 6; i++)
+     {
+ 	switch (i)
+ 	{
+@@ -2131,10 +2188,23 @@
+ 	    case 0:  type = vimenc_atom;	break;
+ #endif
+ 	    case 1:  type = vim_atom;		break;
+-	    case 2:  type = compound_text_atom; break;
+-	    case 3:  type = text_atom;		break;
++#ifdef FEAT_MBYTE
++	    case 2:  type = utf8_atom;		break;
++#endif
++	    case 3:  type = compound_text_atom; break;
++	    case 4:  type = text_atom;		break;
+ 	    default: type = XA_STRING;
+ 	}
++#ifdef FEAT_MBYTE
++	if (type == utf8_atom
++# if defined(X_HAVE_UTF8_STRING)
++		&& !enc_utf8
++# endif
++		)
++	    /* Only request utf-8 when 'encoding' is utf8 and
++	     * Xutf8TextPropertyToTextList is available. */
++	    continue;
++#endif
+ 	success = MAYBE;
+ 	XtGetSelectionValue(myShell, cbd->sel_atom, type,
+ 	    clip_x11_request_selection_cb, (XtPointer)&success, CurrentTime);
+@@ -2225,18 +2295,23 @@
+     {
+ 	Atom *array;
+ 
+-	if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 6))) == NULL)
++	if ((array = (Atom *)XtMalloc((unsigned)(sizeof(Atom) * 7))) == NULL)
+ 	    return False;
+ 	*value = (XtPointer)array;
+ 	i = 0;
+-	array[i++] = XA_STRING;
+ 	array[i++] = targets_atom;
+ #ifdef FEAT_MBYTE
+ 	array[i++] = vimenc_atom;
+ #endif
+ 	array[i++] = vim_atom;
++#ifdef FEAT_MBYTE
++	if (enc_utf8)
++	    array[i++] = utf8_atom;
++#endif
++	array[i++] = XA_STRING;
+ 	array[i++] = text_atom;
+ 	array[i++] = compound_text_atom;
++
+ 	*type = XA_ATOM;
+ 	/* This used to be: *format = sizeof(Atom) * 8; but that caused
+ 	 * crashes on 64 bit machines. (Peter Derr) */
+@@ -2248,6 +2323,7 @@
+     if (       *target != XA_STRING
+ #ifdef FEAT_MBYTE
+ 	    && *target != vimenc_atom
++	    && *target != utf8_atom
+ #endif
+ 	    && *target != vim_atom
+ 	    && *target != text_atom
+@@ -2277,13 +2353,16 @@
+ 	return False;
+     }
+ 
+-    if (*target == XA_STRING)
++    if (*target == XA_STRING
++#ifdef FEAT_MBYTE
++	    || (*target == utf8_atom && enc_utf8)
++#endif
++	    )
+     {
+ 	mch_memmove(result, string, (size_t)(*length));
+-	*type = XA_STRING;
++	*type = *target;
+     }
+-    else if (*target == compound_text_atom
+-	    || *target == text_atom)
++    else if (*target == compound_text_atom || *target == text_atom)
+     {
+ 	XTextProperty	text_prop;
+ 	char		*string_nt = (char *)alloc((unsigned)*length + 1);
+@@ -2336,22 +2415,38 @@
+ 
+     void
+ clip_x11_lose_selection(myShell, cbd)
+-    Widget	myShell;
++    Widget		myShell;
+     VimClipboard	*cbd;
+ {
+-    XtDisownSelection(myShell, cbd->sel_atom, CurrentTime);
++    XtDisownSelection(myShell, cbd->sel_atom,
++				XtLastTimestampProcessed(XtDisplay(myShell)));
+ }
+ 
+     int
+ clip_x11_own_selection(myShell, cbd)
+-    Widget	myShell;
++    Widget		myShell;
+     VimClipboard	*cbd;
+ {
+-    /* Get the time by a zero-length append, clip_x11_timestamp_cb will be
+-     * called with the current timestamp.  */
+-    if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell), cbd->sel_atom,
+-	    timestamp_atom, 32, PropModeAppend, NULL, 0))
+-	return FAIL;
++    /* When using the GUI we have proper timestamps, use the one of the last
++     * event.  When in the console we don't get events (the terminal gets
++     * them), Get the time by a zero-length append, clip_x11_timestamp_cb will
++     * be called with the current timestamp.  */
++#ifdef FEAT_GUI
++    if (gui.in_use)
++    {
++	if (XtOwnSelection(myShell, cbd->sel_atom,
++	       XtLastTimestampProcessed(XtDisplay(myShell)),
++	       clip_x11_convert_selection_cb, clip_x11_lose_ownership_cb,
++	       NULL) == False)
++	    return FAIL;
++    }
++    else
++#endif
++    {
++	if (!XChangeProperty(XtDisplay(myShell), XtWindow(myShell),
++		  cbd->sel_atom, timestamp_atom, 32, PropModeAppend, NULL, 0))
++	    return FAIL;
++    }
+     /* Flush is required in a terminal as nothing else is doing it. */
+     XFlush(XtDisplay(myShell));
+     return OK;
+@@ -2366,6 +2461,13 @@
+     VimClipboard *cbd UNUSED;
+ {
+ }
++
++    int
++clip_x11_owner_exists(cbd)
++    VimClipboard	*cbd;
++{
++    return XGetSelectionOwner(X_DISPLAY, cbd->sel_atom) != None;
++}
+ #endif
+ 
+ #if defined(FEAT_XCLIPBOARD) || defined(FEAT_GUI_X11) \
+@@ -3064,7 +3166,7 @@
+     char_u	*start;
+ 
+     start = ptr = ml_get_buf(wp->w_buffer, lnum, FALSE);
+-    while (count <= vcol && *ptr != NUL)
++    while (count < vcol && *ptr != NUL)
+     {
+ 	count += win_lbr_chartabsize(wp, ptr, count, NULL);
+ 	mb_ptr_adv(ptr);
+diff -Naur vim73.orig/src/undo.c vim73/src/undo.c
+--- vim73.orig/src/undo.c	2010-08-07 10:48:15.000000000 +0000
++++ vim73/src/undo.c	2013-06-07 17:07:38.562231889 +0000
+@@ -81,10 +81,6 @@
+ #define UH_MAGIC 0x18dade	/* value for uh_magic when in use */
+ #define UE_MAGIC 0xabc123	/* value for ue_magic when in use */
+ 
+-#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64)
+-# include "vimio.h"	/* for vim_read(), must be before vim.h */
+-#endif
+-
+ #include "vim.h"
+ 
+ static void u_unch_branch __ARGS((u_header_T *uhp));
+@@ -220,6 +216,7 @@
+ 
+ /*
+  * Save the current line for both the "u" and "U" command.
++ * Careful: may trigger autocommands that reload the buffer.
+  * Returns OK or FAIL.
+  */
+     int
+@@ -242,8 +239,9 @@
+     if (undo_off)
+ 	return OK;
+ 
+-    if (top > curbuf->b_ml.ml_line_count ||
+-			    top >= bot || bot > curbuf->b_ml.ml_line_count + 1)
++    if (top > curbuf->b_ml.ml_line_count
++	    || top >= bot
++	    || bot > curbuf->b_ml.ml_line_count + 1)
+ 	return FALSE;	/* rely on caller to do error messages */
+ 
+     if (top + 2 == bot)
+@@ -723,7 +721,7 @@
+     char_u		*p;
+ 
+     sha256_start(&ctx);
+-    for (lnum = 1; lnum < curbuf->b_ml.ml_line_count; ++lnum)
++    for (lnum = 1; lnum <= curbuf->b_ml.ml_line_count; ++lnum)
+     {
+ 	p = ml_get(lnum);
+ 	sha256_update(&ctx, p, (UINT32_T)(STRLEN(p) + 1));
+@@ -1386,7 +1384,7 @@
+ 		char_u	mbuf[UF_START_MAGIC_LEN];
+ 		int	len;
+ 
+-		len = vim_read(fd, mbuf, UF_START_MAGIC_LEN);
++		len = read_eintr(fd, mbuf, UF_START_MAGIC_LEN);
+ 		close(fd);
+ 		if (len < UF_START_MAGIC_LEN
+ 		      || memcmp(mbuf, UF_START_MAGIC, UF_START_MAGIC_LEN) != 0)
+@@ -1539,6 +1537,7 @@
+ 	/* For systems that support ACL: get the ACL from the original file. */
+ 	acl = mch_get_acl(buf->b_ffname);
+ 	mch_set_acl(file_name, acl);
++	mch_free_acl(acl);
+     }
+ #endif
+ 
+@@ -1861,6 +1860,7 @@
+     curbuf->b_u_seq_cur = seq_cur;
+     curbuf->b_u_time_cur = seq_time;
+     curbuf->b_u_save_nr_last = last_save_nr;
++    curbuf->b_u_save_nr_cur = last_save_nr;
+ 
+     curbuf->b_u_synced = TRUE;
+     vim_free(uhp_table);
+@@ -2794,7 +2794,7 @@
+ 								uhp->uh_time);
+ 	    if (uhp->uh_save_nr > 0)
+ 	    {
+-		while (STRLEN(IObuff) < 32)
++		while (STRLEN(IObuff) < 33)
+ 		    STRCAT(IObuff, " ");
+ 		vim_snprintf_add((char *)IObuff, IOSIZE,
+ 						   "  %3ld", uhp->uh_save_nr);
+@@ -2849,7 +2849,7 @@
+ 	sort_strings((char_u **)ga.ga_data, ga.ga_len);
+ 
+ 	msg_start();
+-	msg_puts_attr((char_u *)_("number changes  time            saved"),
++	msg_puts_attr((char_u *)_("number changes  when               saved"),
+ 							      hl_attr(HLF_T));
+ 	for (i = 0; i < ga.ga_len && !got_int; ++i)
+ 	{
+@@ -2879,7 +2879,12 @@
+     if (time(NULL) - tt >= 100)
+     {
+ 	curtime = localtime(&tt);
+-	(void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
++	if (time(NULL) - tt < (60L * 60L * 12L))
++	    /* within 12 hours */
++	    (void)strftime((char *)buf, buflen, "%H:%M:%S", curtime);
++	else
++	    /* longer ago */
++	    (void)strftime((char *)buf, buflen, "%Y/%m/%d %H:%M:%S", curtime);
+     }
+     else
+ #endif
+@@ -3299,7 +3304,7 @@
+ #ifdef FEAT_QUICKFIX
+ 	    !bt_dontwrite(buf) &&
+ #endif
+-	    (buf->b_changed || file_ff_differs(buf));
++	    (buf->b_changed || file_ff_differs(buf, TRUE));
+ }
+ 
+     int
+@@ -3309,7 +3314,7 @@
+ #ifdef FEAT_QUICKFIX
+ 	!bt_dontwrite(curbuf) &&
+ #endif
+-	(curbuf->b_changed || file_ff_differs(curbuf));
++	(curbuf->b_changed || file_ff_differs(curbuf, TRUE));
+ }
+ 
+ #if defined(FEAT_EVAL) || defined(PROTO)
+diff -Naur vim73.orig/src/version.c vim73/src/version.c
+--- vim73.orig/src/version.c	2010-08-01 13:45:48.000000000 +0000
++++ vim73/src/version.c	2013-06-07 17:07:38.648898308 +0000
+@@ -34,6 +34,9 @@
+ # if (defined(VMS) && defined(VAXC)) || defined(PROTO)
+ char	longVersion[sizeof(VIM_VERSION_LONG_DATE) + sizeof(__DATE__)
+ 						      + sizeof(__TIME__) + 3];
++
++static void list_features __ARGS((void));
++
+     void
+ make_version()
+ {
+@@ -348,6 +351,7 @@
+ # else
+ 	"-mouse",
+ #endif
++
+ #if defined(UNIX) || defined(VMS)
+ # ifdef FEAT_MOUSE_DEC
+ 	"+mouse_dec",
+@@ -369,24 +373,39 @@
+ # else
+ 	"-mouse_netterm",
+ # endif
++#endif
++
++#ifdef __QNX__
++# ifdef FEAT_MOUSE_PTERM
++	"+mouse_pterm",
++# else
++	"-mouse_pterm",
++# endif
++#endif
++
++#if defined(UNIX) || defined(VMS)
++# ifdef FEAT_MOUSE_SGR
++	"+mouse_sgr",
++# else
++	"-mouse_sgr",
++# endif
+ # ifdef FEAT_SYSMOUSE
+ 	"+mouse_sysmouse",
+ # else
+ 	"-mouse_sysmouse",
+ # endif
++# ifdef FEAT_MOUSE_URXVT
++	"+mouse_urxvt",
++# else
++	"-mouse_urxvt",
++# endif
+ # ifdef FEAT_MOUSE_XTERM
+ 	"+mouse_xterm",
+ # else
+ 	"-mouse_xterm",
+ # endif
+ #endif
+-#ifdef __QNX__
+-# ifdef FEAT_MOUSE_PTERM
+-	"+mouse_pterm",
+-# else
+-	"-mouse_pterm",
+-# endif
+-#endif
++
+ #ifdef FEAT_MBYTE_IME
+ # ifdef DYNAMIC_IME
+ 	"+multi_byte_ime/dyn",
+@@ -426,11 +445,6 @@
+ 	"-ole",
+ # endif
+ #endif
+-#ifdef FEAT_OSFILETYPE
+-	"+osfiletype",
+-#else
+-	"-osfiletype",
+-#endif
+ #ifdef FEAT_PATH_EXTRA
+ 	"+path_extra",
+ #else
+@@ -715,237 +729,2584 @@
+ static int included_patches[] =
+ {   /* Add new patch number below this line */
+ /**/
+-    0
+-};
+-
+-/*
+- * Place to put a short description when adding a feature with a patch.
+- * Keep it short, e.g.,: "relative numbers", "persistent undo".
+- * Also add a comment marker to separate the lines.
+- * See the official Vim patches for the diff format: It must use a context of
+- * one line only.  Create it by hand or use "diff -C2" and edit the patch.
+- */
+-static char *(extra_patches[]) =
+-{   /* Add your patch description below this line */
++    1140,
+ /**/
+-    NULL
+-};
+-
+-    int
+-highest_patch()
+-{
+-    int		i;
+-    int		h = 0;
+-
+-    for (i = 0; included_patches[i] != 0; ++i)
+-	if (included_patches[i] > h)
+-	    h = included_patches[i];
+-    return h;
+-}
+-
+-#if defined(FEAT_EVAL) || defined(PROTO)
+-/*
+- * Return TRUE if patch "n" has been included.
+- */
+-    int
+-has_patch(n)
+-    int		n;
+-{
+-    int		i;
+-
+-    for (i = 0; included_patches[i] != 0; ++i)
+-	if (included_patches[i] == n)
+-	    return TRUE;
+-    return FALSE;
+-}
+-#endif
+-
+-    void
+-ex_version(eap)
+-    exarg_T	*eap;
+-{
+-    /*
+-     * Ignore a ":version 9.99" command.
+-     */
+-    if (*eap->arg == NUL)
+-    {
+-	msg_putchar('\n');
+-	list_version();
+-    }
+-}
+-
+-    void
+-list_version()
+-{
+-    int		i;
+-    int		first;
+-    char	*s = "";
+-
+-    /*
+-     * When adding features here, don't forget to update the list of
+-     * internal variables in eval.c!
+-     */
+-    MSG(longVersion);
+-#ifdef WIN3264
+-# ifdef FEAT_GUI_W32
+-#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
+-    /* Only MS VC 4.1 and earlier can do Win32s */
+-    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
+-#  else
+-#   ifdef _WIN64
+-    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
+-#   else
+-    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
+-#   endif
+-#  endif
+-    if (gui_is_win32s())
+-	MSG_PUTS(_(" in Win32s mode"));
+-# ifdef FEAT_OLE
+-    MSG_PUTS(_(" with OLE support"));
+-# endif
+-# else
+-#  ifdef _WIN64
+-    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
+-#  else
+-    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
+-#  endif
+-# endif
+-#endif
+-#ifdef WIN16
+-    MSG_PUTS(_("\nMS-Windows 16-bit version"));
+-#endif
+-#ifdef MSDOS
+-# ifdef DJGPP
+-    MSG_PUTS(_("\n32-bit MS-DOS version"));
+-# else
+-    MSG_PUTS(_("\n16-bit MS-DOS version"));
+-# endif
+-#endif
+-#ifdef MACOS
+-# ifdef MACOS_X
+-#  ifdef MACOS_X_UNIX
+-    MSG_PUTS(_("\nMacOS X (unix) version"));
+-#  else
+-    MSG_PUTS(_("\nMacOS X version"));
+-#  endif
+-#else
+-    MSG_PUTS(_("\nMacOS version"));
+-# endif
+-#endif
+-
+-#ifdef RISCOS
+-    MSG_PUTS(_("\nRISC OS version"));
+-#endif
+-#ifdef VMS
+-    MSG_PUTS(_("\nOpenVMS version"));
+-# ifdef HAVE_PATHDEF
+-    if (*compiled_arch != NUL)
+-    {
+-	MSG_PUTS(" - ");
+-	MSG_PUTS(compiled_arch);
+-    }
+-# endif
+-
+-#endif
+-
+-    /* Print the list of patch numbers if there is at least one. */
+-    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
+-    if (included_patches[0] != 0)
+-    {
+-	MSG_PUTS(_("\nIncluded patches: "));
+-	first = -1;
+-	/* find last one */
+-	for (i = 0; included_patches[i] != 0; ++i)
+-	    ;
+-	while (--i >= 0)
+-	{
+-	    if (first < 0)
+-		first = included_patches[i];
+-	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
+-	    {
+-		MSG_PUTS(s);
+-		s = ", ";
+-		msg_outnum((long)first);
+-		if (first != included_patches[i])
+-		{
+-		    MSG_PUTS("-");
+-		    msg_outnum((long)included_patches[i]);
+-		}
+-		first = -1;
+-	    }
+-	}
+-    }
+-
+-    /* Print the list of extra patch descriptions if there is at least one. */
+-    if (extra_patches[0] != NULL)
+-    {
+-	MSG_PUTS(_("\nExtra patches: "));
+-	s = "";
+-	for (i = 0; extra_patches[i] != NULL; ++i)
+-	{
+-	    MSG_PUTS(s);
+-	    s = ", ";
+-	    MSG_PUTS(extra_patches[i]);
+-	}
+-    }
+-
+-#ifdef MODIFIED_BY
+-    MSG_PUTS("\n");
+-    MSG_PUTS(_("Modified by "));
+-    MSG_PUTS(MODIFIED_BY);
+-#endif
+-
+-#ifdef HAVE_PATHDEF
+-    if (*compiled_user != NUL || *compiled_sys != NUL)
+-    {
+-	MSG_PUTS(_("\nCompiled "));
+-	if (*compiled_user != NUL)
+-	{
+-	    MSG_PUTS(_("by "));
+-	    MSG_PUTS(compiled_user);
+-	}
+-	if (*compiled_sys != NUL)
+-	{
+-	    MSG_PUTS("@");
+-	    MSG_PUTS(compiled_sys);
+-	}
+-    }
+-#endif
+-
+-#ifdef FEAT_HUGE
+-    MSG_PUTS(_("\nHuge version "));
+-#else
+-# ifdef FEAT_BIG
+-    MSG_PUTS(_("\nBig version "));
+-# else
+-#  ifdef FEAT_NORMAL
+-    MSG_PUTS(_("\nNormal version "));
+-#  else
+-#   ifdef FEAT_SMALL
+-    MSG_PUTS(_("\nSmall version "));
+-#   else
+-    MSG_PUTS(_("\nTiny version "));
+-#   endif
+-#  endif
+-# endif
+-#endif
+-#ifndef FEAT_GUI
+-    MSG_PUTS(_("without GUI."));
+-#else
+-# ifdef FEAT_GUI_GTK
+-#  ifdef FEAT_GUI_GNOME
+-    MSG_PUTS(_("with GTK2-GNOME GUI."));
+-#  else
+-    MSG_PUTS(_("with GTK2 GUI."));
+-#  endif
+-# else
+-#  ifdef FEAT_GUI_MOTIF
+-    MSG_PUTS(_("with X11-Motif GUI."));
+-#  else
+-#   ifdef FEAT_GUI_ATHENA
+-#    ifdef FEAT_GUI_NEXTAW
+-    MSG_PUTS(_("with X11-neXtaw GUI."));
+-#    else
++    1139,
++/**/
++    1138,
++/**/
++    1137,
++/**/
++    1136,
++/**/
++    1135,
++/**/
++    1134,
++/**/
++    1133,
++/**/
++    1132,
++/**/
++    1131,
++/**/
++    1130,
++/**/
++    1129,
++/**/
++    1128,
++/**/
++    1127,
++/**/
++    1126,
++/**/
++    1125,
++/**/
++    1124,
++/**/
++    1123,
++/**/
++    1122,
++/**/
++    1121,
++/**/
++    1120,
++/**/
++    1119,
++/**/
++    1118,
++/**/
++    1117,
++/**/
++    1116,
++/**/
++    1115,
++/**/
++    1114,
++/**/
++    1113,
++/**/
++    1112,
++/**/
++    1111,
++/**/
++    1110,
++/**/
++    1109,
++/**/
++    1108,
++/**/
++    1107,
++/**/
++    1106,
++/**/
++    1105,
++/**/
++    1104,
++/**/
++    1103,
++/**/
++    1102,
++/**/
++    1101,
++/**/
++    1100,
++/**/
++    1099,
++/**/
++    1098,
++/**/
++    1097,
++/**/
++    1096,
++/**/
++    1095,
++/**/
++    1094,
++/**/
++    1093,
++/**/
++    1092,
++/**/
++    1091,
++/**/
++    1090,
++/**/
++    1089,
++/**/
++    1088,
++/**/
++    1087,
++/**/
++    1086,
++/**/
++    1085,
++/**/
++    1084,
++/**/
++    1083,
++/**/
++    1082,
++/**/
++    1081,
++/**/
++    1080,
++/**/
++    1079,
++/**/
++    1078,
++/**/
++    1077,
++/**/
++    1076,
++/**/
++    1075,
++/**/
++    1074,
++/**/
++    1073,
++/**/
++    1072,
++/**/
++    1071,
++/**/
++    1070,
++/**/
++    1069,
++/**/
++    1068,
++/**/
++    1067,
++/**/
++    1066,
++/**/
++    1065,
++/**/
++    1064,
++/**/
++    1063,
++/**/
++    1062,
++/**/
++    1061,
++/**/
++    1060,
++/**/
++    1059,
++/**/
++    1058,
++/**/
++    1057,
++/**/
++    1056,
++/**/
++    1055,
++/**/
++    1054,
++/**/
++    1053,
++/**/
++    1052,
++/**/
++    1051,
++/**/
++    1050,
++/**/
++    1049,
++/**/
++    1048,
++/**/
++    1047,
++/**/
++    1046,
++/**/
++    1045,
++/**/
++    1044,
++/**/
++    1043,
++/**/
++    1042,
++/**/
++    1041,
++/**/
++    1040,
++/**/
++    1039,
++/**/
++    1038,
++/**/
++    1037,
++/**/
++    1036,
++/**/
++    1035,
++/**/
++    1034,
++/**/
++    1033,
++/**/
++    1032,
++/**/
++    1031,
++/**/
++    1030,
++/**/
++    1029,
++/**/
++    1028,
++/**/
++    1027,
++/**/
++    1026,
++/**/
++    1025,
++/**/
++    1024,
++/**/
++    1023,
++/**/
++    1022,
++/**/
++    1021,
++/**/
++    1020,
++/**/
++    1019,
++/**/
++    1018,
++/**/
++    1017,
++/**/
++    1016,
++/**/
++    1015,
++/**/
++    1014,
++/**/
++    1013,
++/**/
++    1012,
++/**/
++    1011,
++/**/
++    1010,
++/**/
++    1009,
++/**/
++    1008,
++/**/
++    1007,
++/**/
++    1006,
++/**/
++    1005,
++/**/
++    1004,
++/**/
++    1003,
++/**/
++    1002,
++/**/
++    1001,
++/**/
++    1000,
++/**/
++    999,
++/**/
++    998,
++/**/
++    997,
++/**/
++    996,
++/**/
++    995,
++/**/
++    994,
++/**/
++    993,
++/**/
++    992,
++/**/
++    991,
++/**/
++    990,
++/**/
++    989,
++/**/
++    988,
++/**/
++    987,
++/**/
++    986,
++/**/
++    985,
++/**/
++    984,
++/**/
++    983,
++/**/
++    982,
++/**/
++    981,
++/**/
++    980,
++/**/
++    979,
++/**/
++    978,
++/**/
++    977,
++/**/
++    976,
++/**/
++    975,
++/**/
++    974,
++/**/
++    973,
++/**/
++    972,
++/**/
++    971,
++/**/
++    970,
++/**/
++    969,
++/**/
++    968,
++/**/
++    967,
++/**/
++    966,
++/**/
++    965,
++/**/
++    964,
++/**/
++    963,
++/**/
++    962,
++/**/
++    961,
++/**/
++    960,
++/**/
++    959,
++/**/
++    958,
++/**/
++    957,
++/**/
++    956,
++/**/
++    955,
++/**/
++    954,
++/**/
++    953,
++/**/
++    952,
++/**/
++    951,
++/**/
++    950,
++/**/
++    949,
++/**/
++    948,
++/**/
++    947,
++/**/
++    946,
++/**/
++    945,
++/**/
++    944,
++/**/
++    943,
++/**/
++    942,
++/**/
++    941,
++/**/
++    940,
++/**/
++    939,
++/**/
++    938,
++/**/
++    937,
++/**/
++    936,
++/**/
++    935,
++/**/
++    934,
++/**/
++    933,
++/**/
++    932,
++/**/
++    931,
++/**/
++    930,
++/**/
++    929,
++/**/
++    928,
++/**/
++    927,
++/**/
++    926,
++/**/
++    925,
++/**/
++    924,
++/**/
++    923,
++/**/
++    922,
++/**/
++    921,
++/**/
++    920,
++/**/
++    919,
++/**/
++    918,
++/**/
++    917,
++/**/
++    916,
++/**/
++    915,
++/**/
++    914,
++/**/
++    913,
++/**/
++    912,
++/**/
++    911,
++/**/
++    910,
++/**/
++    909,
++/**/
++    908,
++/**/
++    907,
++/**/
++    906,
++/**/
++    905,
++/**/
++    904,
++/**/
++    903,
++/**/
++    902,
++/**/
++    901,
++/**/
++    900,
++/**/
++    899,
++/**/
++    898,
++/**/
++    897,
++/**/
++    896,
++/**/
++    895,
++/**/
++    894,
++/**/
++    893,
++/**/
++    892,
++/**/
++    891,
++/**/
++    890,
++/**/
++    889,
++/**/
++    888,
++/**/
++    887,
++/**/
++    886,
++/**/
++    885,
++/**/
++    884,
++/**/
++    883,
++/**/
++    882,
++/**/
++    881,
++/**/
++    880,
++/**/
++    879,
++/**/
++    878,
++/**/
++    877,
++/**/
++    876,
++/**/
++    875,
++/**/
++    874,
++/**/
++    873,
++/**/
++    872,
++/**/
++    871,
++/**/
++    870,
++/**/
++    869,
++/**/
++    868,
++/**/
++    867,
++/**/
++    866,
++/**/
++    865,
++/**/
++    864,
++/**/
++    863,
++/**/
++    862,
++/**/
++    861,
++/**/
++    860,
++/**/
++    859,
++/**/
++    858,
++/**/
++    857,
++/**/
++    856,
++/**/
++    855,
++/**/
++    854,
++/**/
++    853,
++/**/
++    852,
++/**/
++    851,
++/**/
++    850,
++/**/
++    849,
++/**/
++    848,
++/**/
++    847,
++/**/
++    846,
++/**/
++    845,
++/**/
++    844,
++/**/
++    843,
++/**/
++    842,
++/**/
++    841,
++/**/
++    840,
++/**/
++    839,
++/**/
++    838,
++/**/
++    837,
++/**/
++    836,
++/**/
++    835,
++/**/
++    834,
++/**/
++    833,
++/**/
++    832,
++/**/
++    831,
++/**/
++    830,
++/**/
++    829,
++/**/
++    828,
++/**/
++    827,
++/**/
++    826,
++/**/
++    825,
++/**/
++    824,
++/**/
++    823,
++/**/
++    822,
++/**/
++    821,
++/**/
++    820,
++/**/
++    819,
++/**/
++    818,
++/**/
++    817,
++/**/
++    816,
++/**/
++    815,
++/**/
++    814,
++/**/
++    813,
++/**/
++    812,
++/**/
++    811,
++/**/
++    810,
++/**/
++    809,
++/**/
++    808,
++/**/
++    807,
++/**/
++    806,
++/**/
++    805,
++/**/
++    804,
++/**/
++    803,
++/**/
++    802,
++/**/
++    801,
++/**/
++    800,
++/**/
++    799,
++/**/
++    798,
++/**/
++    797,
++/**/
++    796,
++/**/
++    795,
++/**/
++    794,
++/**/
++    793,
++/**/
++    792,
++/**/
++    791,
++/**/
++    790,
++/**/
++    789,
++/**/
++    788,
++/**/
++    787,
++/**/
++    786,
++/**/
++    785,
++/**/
++    784,
++/**/
++    783,
++/**/
++    782,
++/**/
++    781,
++/**/
++    780,
++/**/
++    779,
++/**/
++    778,
++/**/
++    777,
++/**/
++    776,
++/**/
++    775,
++/**/
++    774,
++/**/
++    773,
++/**/
++    772,
++/**/
++    771,
++/**/
++    770,
++/**/
++    769,
++/**/
++    768,
++/**/
++    767,
++/**/
++    766,
++/**/
++    765,
++/**/
++    764,
++/**/
++    763,
++/**/
++    762,
++/**/
++    761,
++/**/
++    760,
++/**/
++    759,
++/**/
++    758,
++/**/
++    757,
++/**/
++    756,
++/**/
++    755,
++/**/
++    754,
++/**/
++    753,
++/**/
++    752,
++/**/
++    751,
++/**/
++    750,
++/**/
++    749,
++/**/
++    748,
++/**/
++    747,
++/**/
++    746,
++/**/
++    745,
++/**/
++    744,
++/**/
++    743,
++/**/
++    742,
++/**/
++    741,
++/**/
++    740,
++/**/
++    739,
++/**/
++    738,
++/**/
++    737,
++/**/
++    736,
++/**/
++    735,
++/**/
++    734,
++/**/
++    733,
++/**/
++    732,
++/**/
++    731,
++/**/
++    730,
++/**/
++    729,
++/**/
++    728,
++/**/
++    727,
++/**/
++    726,
++/**/
++    725,
++/**/
++    724,
++/**/
++    723,
++/**/
++    722,
++/**/
++    721,
++/**/
++    720,
++/**/
++    719,
++/**/
++    718,
++/**/
++    717,
++/**/
++    716,
++/**/
++    715,
++/**/
++    714,
++/**/
++    713,
++/**/
++    712,
++/**/
++    711,
++/**/
++    710,
++/**/
++    709,
++/**/
++    708,
++/**/
++    707,
++/**/
++    706,
++/**/
++    705,
++/**/
++    704,
++/**/
++    703,
++/**/
++    702,
++/**/
++    701,
++/**/
++    700,
++/**/
++    699,
++/**/
++    698,
++/**/
++    697,
++/**/
++    696,
++/**/
++    695,
++/**/
++    694,
++/**/
++    693,
++/**/
++    692,
++/**/
++    691,
++/**/
++    690,
++/**/
++    689,
++/**/
++    688,
++/**/
++    687,
++/**/
++    686,
++/**/
++    685,
++/**/
++    684,
++/**/
++    683,
++/**/
++    682,
++/**/
++    681,
++/**/
++    680,
++/**/
++    679,
++/**/
++    678,
++/**/
++    677,
++/**/
++    676,
++/**/
++    675,
++/**/
++    674,
++/**/
++    673,
++/**/
++    672,
++/**/
++    671,
++/**/
++    670,
++/**/
++    669,
++/**/
++    668,
++/**/
++    667,
++/**/
++    666,
++/**/
++    665,
++/**/
++    664,
++/**/
++    663,
++/**/
++    662,
++/**/
++    661,
++/**/
++    660,
++/**/
++    659,
++/**/
++    658,
++/**/
++    657,
++/**/
++    656,
++/**/
++    655,
++/**/
++    654,
++/**/
++    653,
++/**/
++    652,
++/**/
++    651,
++/**/
++    650,
++/**/
++    649,
++/**/
++    648,
++/**/
++    647,
++/**/
++    646,
++/**/
++    645,
++/**/
++    644,
++/**/
++    643,
++/**/
++    642,
++/**/
++    641,
++/**/
++    640,
++/**/
++    639,
++/**/
++    638,
++/**/
++    637,
++/**/
++    636,
++/**/
++    635,
++/**/
++    634,
++/**/
++    633,
++/**/
++    632,
++/**/
++    631,
++/**/
++    630,
++/**/
++    629,
++/**/
++    628,
++/**/
++    627,
++/**/
++    626,
++/**/
++    625,
++/**/
++    624,
++/**/
++    623,
++/**/
++    622,
++/**/
++    621,
++/**/
++    620,
++/**/
++    619,
++/**/
++    618,
++/**/
++    617,
++/**/
++    616,
++/**/
++    615,
++/**/
++    614,
++/**/
++    613,
++/**/
++    612,
++/**/
++    611,
++/**/
++    610,
++/**/
++    609,
++/**/
++    608,
++/**/
++    607,
++/**/
++    606,
++/**/
++    605,
++/**/
++    604,
++/**/
++    603,
++/**/
++    602,
++/**/
++    601,
++/**/
++    600,
++/**/
++    599,
++/**/
++    598,
++/**/
++    597,
++/**/
++    596,
++/**/
++    595,
++/**/
++    594,
++/**/
++    593,
++/**/
++    592,
++/**/
++    591,
++/**/
++    590,
++/**/
++    589,
++/**/
++    588,
++/**/
++    587,
++/**/
++    586,
++/**/
++    585,
++/**/
++    584,
++/**/
++    583,
++/**/
++    582,
++/**/
++    581,
++/**/
++    580,
++/**/
++    579,
++/**/
++    578,
++/**/
++    577,
++/**/
++    576,
++/**/
++    575,
++/**/
++    574,
++/**/
++    573,
++/**/
++    572,
++/**/
++    571,
++/**/
++    570,
++/**/
++    569,
++/**/
++    568,
++/**/
++    567,
++/**/
++    566,
++/**/
++    565,
++/**/
++    564,
++/**/
++    563,
++/**/
++    562,
++/**/
++    561,
++/**/
++    560,
++/**/
++    559,
++/**/
++    558,
++/**/
++    557,
++/**/
++    556,
++/**/
++    555,
++/**/
++    554,
++/**/
++    553,
++/**/
++    552,
++/**/
++    551,
++/**/
++    550,
++/**/
++    549,
++/**/
++    548,
++/**/
++    547,
++/**/
++    546,
++/**/
++    545,
++/**/
++    544,
++/**/
++    543,
++/**/
++    542,
++/**/
++    541,
++/**/
++    540,
++/**/
++    539,
++/**/
++    538,
++/**/
++    537,
++/**/
++    536,
++/**/
++    535,
++/**/
++    534,
++/**/
++    533,
++/**/
++    532,
++/**/
++    531,
++/**/
++    530,
++/**/
++    529,
++/**/
++    528,
++/**/
++    527,
++/**/
++    526,
++/**/
++    525,
++/**/
++    524,
++/**/
++    523,
++/**/
++    522,
++/**/
++    521,
++/**/
++    520,
++/**/
++    519,
++/**/
++    518,
++/**/
++    517,
++/**/
++    516,
++/**/
++    515,
++/**/
++    514,
++/**/
++    513,
++/**/
++    512,
++/**/
++    511,
++/**/
++    510,
++/**/
++    509,
++/**/
++    508,
++/**/
++    507,
++/**/
++    506,
++/**/
++    505,
++/**/
++    504,
++/**/
++    503,
++/**/
++    502,
++/**/
++    501,
++/**/
++    500,
++/**/
++    499,
++/**/
++    498,
++/**/
++    497,
++/**/
++    496,
++/**/
++    495,
++/**/
++    494,
++/**/
++    493,
++/**/
++    492,
++/**/
++    491,
++/**/
++    490,
++/**/
++    489,
++/**/
++    488,
++/**/
++    487,
++/**/
++    486,
++/**/
++    485,
++/**/
++    484,
++/**/
++    483,
++/**/
++    482,
++/**/
++    481,
++/**/
++    480,
++/**/
++    479,
++/**/
++    478,
++/**/
++    477,
++/**/
++    476,
++/**/
++    475,
++/**/
++    474,
++/**/
++    473,
++/**/
++    472,
++/**/
++    471,
++/**/
++    470,
++/**/
++    469,
++/**/
++    468,
++/**/
++    467,
++/**/
++    466,
++/**/
++    465,
++/**/
++    464,
++/**/
++    463,
++/**/
++    462,
++/**/
++    461,
++/**/
++    460,
++/**/
++    459,
++/**/
++    458,
++/**/
++    457,
++/**/
++    456,
++/**/
++    455,
++/**/
++    454,
++/**/
++    453,
++/**/
++    452,
++/**/
++    451,
++/**/
++    450,
++/**/
++    449,
++/**/
++    448,
++/**/
++    447,
++/**/
++    446,
++/**/
++    445,
++/**/
++    444,
++/**/
++    443,
++/**/
++    442,
++/**/
++    441,
++/**/
++    440,
++/**/
++    439,
++/**/
++    438,
++/**/
++    437,
++/**/
++    436,
++/**/
++    435,
++/**/
++    434,
++/**/
++    433,
++/**/
++    432,
++/**/
++    431,
++/**/
++    430,
++/**/
++    429,
++/**/
++    428,
++/**/
++    427,
++/**/
++    426,
++/**/
++    425,
++/**/
++    424,
++/**/
++    423,
++/**/
++    422,
++/**/
++    421,
++/**/
++    420,
++/**/
++    419,
++/**/
++    418,
++/**/
++    417,
++/**/
++    416,
++/**/
++    415,
++/**/
++    414,
++/**/
++    413,
++/**/
++    412,
++/**/
++    411,
++/**/
++    410,
++/**/
++    409,
++/**/
++    408,
++/**/
++    407,
++/**/
++    406,
++/**/
++    405,
++/**/
++    404,
++/**/
++    403,
++/**/
++    402,
++/**/
++    401,
++/**/
++    400,
++/**/
++    399,
++/**/
++    398,
++/**/
++    397,
++/**/
++    396,
++/**/
++    395,
++/**/
++    394,
++/**/
++    393,
++/**/
++    392,
++/**/
++    391,
++/**/
++    390,
++/**/
++    389,
++/**/
++    388,
++/**/
++    387,
++/**/
++    386,
++/**/
++    385,
++/**/
++    384,
++/**/
++    383,
++/**/
++    382,
++/**/
++    381,
++/**/
++    380,
++/**/
++    379,
++/**/
++    378,
++/**/
++    377,
++/**/
++    376,
++/**/
++    375,
++/**/
++    374,
++/**/
++    373,
++/**/
++    372,
++/**/
++    371,
++/**/
++    370,
++/**/
++    369,
++/**/
++    368,
++/**/
++    367,
++/**/
++    366,
++/**/
++    365,
++/**/
++    364,
++/**/
++    363,
++/**/
++    362,
++/**/
++    361,
++/**/
++    360,
++/**/
++    359,
++/**/
++    358,
++/**/
++    357,
++/**/
++    356,
++/**/
++    355,
++/**/
++    354,
++/**/
++    353,
++/**/
++    352,
++/**/
++    351,
++/**/
++    350,
++/**/
++    349,
++/**/
++    348,
++/**/
++    347,
++/**/
++    346,
++/**/
++    345,
++/**/
++    344,
++/**/
++    343,
++/**/
++    342,
++/**/
++    341,
++/**/
++    340,
++/**/
++    339,
++/**/
++    338,
++/**/
++    337,
++/**/
++    336,
++/**/
++    335,
++/**/
++    334,
++/**/
++    333,
++/**/
++    332,
++/**/
++    331,
++/**/
++    330,
++/**/
++    329,
++/**/
++    328,
++/**/
++    327,
++/**/
++    326,
++/**/
++    325,
++/**/
++    324,
++/**/
++    323,
++/**/
++    322,
++/**/
++    321,
++/**/
++    320,
++/**/
++    319,
++/**/
++    318,
++/**/
++    317,
++/**/
++    316,
++/**/
++    315,
++/**/
++    314,
++/**/
++    313,
++/**/
++    312,
++/**/
++    311,
++/**/
++    310,
++/**/
++    309,
++/**/
++    308,
++/**/
++    307,
++/**/
++    306,
++/**/
++    305,
++/**/
++    304,
++/**/
++    303,
++/**/
++    302,
++/**/
++    301,
++/**/
++    300,
++/**/
++    299,
++/**/
++    298,
++/**/
++    297,
++/**/
++    296,
++/**/
++    295,
++/**/
++    294,
++/**/
++    293,
++/**/
++    292,
++/**/
++    291,
++/**/
++    290,
++/**/
++    289,
++/**/
++    288,
++/**/
++    287,
++/**/
++    286,
++/**/
++    285,
++/**/
++    284,
++/**/
++    283,
++/**/
++    282,
++/**/
++    281,
++/**/
++    280,
++/**/
++    279,
++/**/
++    278,
++/**/
++    277,
++/**/
++    276,
++/**/
++    275,
++/**/
++    274,
++/**/
++    273,
++/**/
++    272,
++/**/
++    271,
++/**/
++    270,
++/**/
++    269,
++/**/
++    268,
++/**/
++    267,
++/**/
++    266,
++/**/
++    265,
++/**/
++    264,
++/**/
++    263,
++/**/
++    262,
++/**/
++    261,
++/**/
++    260,
++/**/
++    259,
++/**/
++    258,
++/**/
++    257,
++/**/
++    256,
++/**/
++    255,
++/**/
++    254,
++/**/
++    253,
++/**/
++    252,
++/**/
++    251,
++/**/
++    250,
++/**/
++    249,
++/**/
++    248,
++/**/
++    247,
++/**/
++    246,
++/**/
++    245,
++/**/
++    244,
++/**/
++    243,
++/**/
++    242,
++/**/
++    241,
++/**/
++    240,
++/**/
++    239,
++/**/
++    238,
++/**/
++    237,
++/**/
++    236,
++/**/
++    235,
++/**/
++    234,
++/**/
++    233,
++/**/
++    232,
++/**/
++    231,
++/**/
++    230,
++/**/
++    229,
++/**/
++    228,
++/**/
++    227,
++/**/
++    226,
++/**/
++    225,
++/**/
++    224,
++/**/
++    223,
++/**/
++    222,
++/**/
++    221,
++/**/
++    220,
++/**/
++    219,
++/**/
++    218,
++/**/
++    217,
++/**/
++    216,
++/**/
++    215,
++/**/
++    214,
++/**/
++    213,
++/**/
++    212,
++/**/
++    211,
++/**/
++    210,
++/**/
++    209,
++/**/
++    208,
++/**/
++    207,
++/**/
++    206,
++/**/
++    205,
++/**/
++    204,
++/**/
++    203,
++/**/
++    202,
++/**/
++    201,
++/**/
++    200,
++/**/
++    199,
++/**/
++    198,
++/**/
++    197,
++/**/
++    196,
++/**/
++    195,
++/**/
++    194,
++/**/
++    193,
++/**/
++    192,
++/**/
++    191,
++/**/
++    190,
++/**/
++    189,
++/**/
++    188,
++/**/
++    187,
++/**/
++    186,
++/**/
++    185,
++/**/
++    184,
++/**/
++    183,
++/**/
++    182,
++/**/
++    181,
++/**/
++    180,
++/**/
++    179,
++/**/
++    178,
++/**/
++    177,
++/**/
++    176,
++/**/
++    175,
++/**/
++    174,
++/**/
++    173,
++/**/
++    172,
++/**/
++    171,
++/**/
++    170,
++/**/
++    169,
++/**/
++    168,
++/**/
++    167,
++/**/
++    166,
++/**/
++    165,
++/**/
++    164,
++/**/
++    163,
++/**/
++    162,
++/**/
++    161,
++/**/
++    160,
++/**/
++    159,
++/**/
++    158,
++/**/
++    157,
++/**/
++    156,
++/**/
++    155,
++/**/
++    154,
++/**/
++    153,
++/**/
++    152,
++/**/
++    151,
++/**/
++    150,
++/**/
++    149,
++/**/
++    148,
++/**/
++    147,
++/**/
++    146,
++/**/
++    145,
++/**/
++    144,
++/**/
++    143,
++/**/
++    142,
++/**/
++    141,
++/**/
++    140,
++/**/
++    139,
++/**/
++    138,
++/**/
++    137,
++/**/
++    136,
++/**/
++    135,
++/**/
++    134,
++/**/
++    133,
++/**/
++    132,
++/**/
++    131,
++/**/
++    130,
++/**/
++    129,
++/**/
++    128,
++/**/
++    127,
++/**/
++    126,
++/**/
++    125,
++/**/
++    124,
++/**/
++    123,
++/**/
++    122,
++/**/
++    121,
++/**/
++    120,
++/**/
++    119,
++/**/
++    118,
++/**/
++    117,
++/**/
++    116,
++/**/
++    115,
++/**/
++    114,
++/**/
++    113,
++/**/
++    112,
++/**/
++    111,
++/**/
++    110,
++/**/
++    109,
++/**/
++    108,
++/**/
++    107,
++/**/
++    106,
++/**/
++    105,
++/**/
++    104,
++/**/
++    103,
++/**/
++    102,
++/**/
++    101,
++/**/
++    100,
++/**/
++    99,
++/**/
++    98,
++/**/
++    97,
++/**/
++    96,
++/**/
++    95,
++/**/
++    94,
++/**/
++    93,
++/**/
++    92,
++/**/
++    91,
++/**/
++    90,
++/**/
++    89,
++/**/
++    88,
++/**/
++    87,
++/**/
++    86,
++/**/
++    85,
++/**/
++    84,
++/**/
++    83,
++/**/
++    82,
++/**/
++    81,
++/**/
++    80,
++/**/
++    79,
++/**/
++    78,
++/**/
++    77,
++/**/
++    76,
++/**/
++    75,
++/**/
++    74,
++/**/
++    73,
++/**/
++    72,
++/**/
++    71,
++/**/
++    70,
++/**/
++    69,
++/**/
++    68,
++/**/
++    67,
++/**/
++    66,
++/**/
++    65,
++/**/
++    64,
++/**/
++    63,
++/**/
++    62,
++/**/
++    61,
++/**/
++    60,
++/**/
++    59,
++/**/
++    58,
++/**/
++    57,
++/**/
++    56,
++/**/
++    55,
++/**/
++    54,
++/**/
++    53,
++/**/
++    52,
++/**/
++    51,
++/**/
++    50,
++/**/
++    49,
++/**/
++    48,
++/**/
++    47,
++/**/
++    46,
++/**/
++    45,
++/**/
++    44,
++/**/
++    43,
++/**/
++    42,
++/**/
++    41,
++/**/
++    40,
++/**/
++    39,
++/**/
++    38,
++/**/
++    37,
++/**/
++    36,
++/**/
++    35,
++/**/
++    34,
++/**/
++    33,
++/**/
++    32,
++/**/
++    31,
++/**/
++    30,
++/**/
++    29,
++/**/
++    28,
++/**/
++    27,
++/**/
++    26,
++/**/
++    25,
++/**/
++    24,
++/**/
++    23,
++/**/
++    22,
++/**/
++    21,
++/**/
++    20,
++/**/
++    19,
++/**/
++    18,
++/**/
++    17,
++/**/
++    16,
++/**/
++    15,
++/**/
++    14,
++/**/
++    13,
++/**/
++    12,
++/**/
++    11,
++/**/
++    10,
++/**/
++    9,
++/**/
++    8,
++/**/
++    7,
++/**/
++    6,
++/**/
++    5,
++/**/
++    4,
++/**/
++    3,
++/**/
++    2,
++/**/
++    1,
++/**/
++    0
++};
++
++/*
++ * Place to put a short description when adding a feature with a patch.
++ * Keep it short, e.g.,: "relative numbers", "persistent undo".
++ * Also add a comment marker to separate the lines.
++ * See the official Vim patches for the diff format: It must use a context of
++ * one line only.  Create it by hand or use "diff -C2" and edit the patch.
++ */
++static char *(extra_patches[]) =
++{   /* Add your patch description below this line */
++/**/
++    NULL
++};
++
++    int
++highest_patch()
++{
++    int		i;
++    int		h = 0;
++
++    for (i = 0; included_patches[i] != 0; ++i)
++	if (included_patches[i] > h)
++	    h = included_patches[i];
++    return h;
++}
++
++#if defined(FEAT_EVAL) || defined(PROTO)
++/*
++ * Return TRUE if patch "n" has been included.
++ */
++    int
++has_patch(n)
++    int		n;
++{
++    int		i;
++
++    for (i = 0; included_patches[i] != 0; ++i)
++	if (included_patches[i] == n)
++	    return TRUE;
++    return FALSE;
++}
++#endif
++
++    void
++ex_version(eap)
++    exarg_T	*eap;
++{
++    /*
++     * Ignore a ":version 9.99" command.
++     */
++    if (*eap->arg == NUL)
++    {
++	msg_putchar('\n');
++	list_version();
++    }
++}
++
++/*
++ * List all features aligned in columns, dictionary style.
++ */
++    static void
++list_features()
++{
++    int		i;
++    int		ncol;
++    int		nrow;
++    int		nfeat = 0;
++    int		width = 0;
++
++    /* Find the length of the longest feature name, use that + 1 as the column
++     * width */
++    for (i = 0; features[i] != NULL; ++i)
++    {
++	int l = (int)STRLEN(features[i]);
++
++	if (l > width)
++	    width = l;
++	++nfeat;
++    }
++    width += 1;
++
++    if (Columns < width)
++    {
++	/* Not enough screen columns - show one per line */
++	for (i = 0; features[i] != NULL; ++i)
++	{
++	    version_msg(features[i]);
++	    if (msg_col > 0)
++		msg_putchar('\n');
++	}
++	return;
++    }
++
++    /* The rightmost column doesn't need a separator.
++     * Sacrifice it to fit in one more column if possible. */
++    ncol = (int) (Columns + 1) / width;
++    nrow = nfeat / ncol + (nfeat % ncol ? 1 : 0);
++
++    /* i counts columns then rows.  idx counts rows then columns. */
++    for (i = 0; !got_int && i < nrow * ncol; ++i)
++    {
++	int idx = (i / ncol) + (i % ncol) * nrow;
++
++	if (idx < nfeat)
++	{
++	    int last_col = (i + 1) % ncol == 0;
++
++	    msg_puts((char_u *)features[idx]);
++	    if (last_col)
++	    {
++		if (msg_col > 0)
++		    msg_putchar('\n');
++	    }
++	    else
++	    {
++		while (msg_col % width)
++		    msg_putchar(' ');
++	    }
++	}
++	else
++	{
++	    if (msg_col > 0)
++		msg_putchar('\n');
++	}
++    }
++}
++
++    void
++list_version()
++{
++    int		i;
++    int		first;
++    char	*s = "";
++
++    /*
++     * When adding features here, don't forget to update the list of
++     * internal variables in eval.c!
++     */
++    MSG(longVersion);
++#ifdef WIN3264
++# ifdef FEAT_GUI_W32
++#  if defined(_MSC_VER) && (_MSC_VER <= 1010)
++    /* Only MS VC 4.1 and earlier can do Win32s */
++    MSG_PUTS(_("\nMS-Windows 16/32-bit GUI version"));
++#  else
++#   ifdef _WIN64
++    MSG_PUTS(_("\nMS-Windows 64-bit GUI version"));
++#   else
++    MSG_PUTS(_("\nMS-Windows 32-bit GUI version"));
++#   endif
++#  endif
++    if (gui_is_win32s())
++	MSG_PUTS(_(" in Win32s mode"));
++# ifdef FEAT_OLE
++    MSG_PUTS(_(" with OLE support"));
++# endif
++# else
++#  ifdef _WIN64
++    MSG_PUTS(_("\nMS-Windows 64-bit console version"));
++#  else
++    MSG_PUTS(_("\nMS-Windows 32-bit console version"));
++#  endif
++# endif
++#endif
++#ifdef WIN16
++    MSG_PUTS(_("\nMS-Windows 16-bit version"));
++#endif
++#ifdef MSDOS
++# ifdef DJGPP
++    MSG_PUTS(_("\n32-bit MS-DOS version"));
++# else
++    MSG_PUTS(_("\n16-bit MS-DOS version"));
++# endif
++#endif
++#ifdef MACOS
++# ifdef MACOS_X
++#  ifdef MACOS_X_UNIX
++    MSG_PUTS(_("\nMacOS X (unix) version"));
++#  else
++    MSG_PUTS(_("\nMacOS X version"));
++#  endif
++#else
++    MSG_PUTS(_("\nMacOS version"));
++# endif
++#endif
++
++#ifdef VMS
++    MSG_PUTS(_("\nOpenVMS version"));
++# ifdef HAVE_PATHDEF
++    if (*compiled_arch != NUL)
++    {
++	MSG_PUTS(" - ");
++	MSG_PUTS(compiled_arch);
++    }
++# endif
++
++#endif
++
++    /* Print the list of patch numbers if there is at least one. */
++    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
++    if (included_patches[0] != 0)
++    {
++	MSG_PUTS(_("\nIncluded patches: "));
++	first = -1;
++	/* find last one */
++	for (i = 0; included_patches[i] != 0; ++i)
++	    ;
++	while (--i >= 0)
++	{
++	    if (first < 0)
++		first = included_patches[i];
++	    if (i == 0 || included_patches[i - 1] != included_patches[i] + 1)
++	    {
++		MSG_PUTS(s);
++		s = ", ";
++		msg_outnum((long)first);
++		if (first != included_patches[i])
++		{
++		    MSG_PUTS("-");
++		    msg_outnum((long)included_patches[i]);
++		}
++		first = -1;
++	    }
++	}
++    }
++
++    /* Print the list of extra patch descriptions if there is at least one. */
++    if (extra_patches[0] != NULL)
++    {
++	MSG_PUTS(_("\nExtra patches: "));
++	s = "";
++	for (i = 0; extra_patches[i] != NULL; ++i)
++	{
++	    MSG_PUTS(s);
++	    s = ", ";
++	    MSG_PUTS(extra_patches[i]);
++	}
++    }
++
++#ifdef MODIFIED_BY
++    MSG_PUTS("\n");
++    MSG_PUTS(_("Modified by "));
++    MSG_PUTS(MODIFIED_BY);
++#endif
++
++#ifdef HAVE_PATHDEF
++    if (*compiled_user != NUL || *compiled_sys != NUL)
++    {
++	MSG_PUTS(_("\nCompiled "));
++	if (*compiled_user != NUL)
++	{
++	    MSG_PUTS(_("by "));
++	    MSG_PUTS(compiled_user);
++	}
++	if (*compiled_sys != NUL)
++	{
++	    MSG_PUTS("@");
++	    MSG_PUTS(compiled_sys);
++	}
++    }
++#endif
++
++#ifdef FEAT_HUGE
++    MSG_PUTS(_("\nHuge version "));
++#else
++# ifdef FEAT_BIG
++    MSG_PUTS(_("\nBig version "));
++# else
++#  ifdef FEAT_NORMAL
++    MSG_PUTS(_("\nNormal version "));
++#  else
++#   ifdef FEAT_SMALL
++    MSG_PUTS(_("\nSmall version "));
++#   else
++    MSG_PUTS(_("\nTiny version "));
++#   endif
++#  endif
++# endif
++#endif
++#ifndef FEAT_GUI
++    MSG_PUTS(_("without GUI."));
++#else
++# ifdef FEAT_GUI_GTK
++#  ifdef FEAT_GUI_GNOME
++    MSG_PUTS(_("with GTK2-GNOME GUI."));
++#  else
++    MSG_PUTS(_("with GTK2 GUI."));
++#  endif
++# else
++#  ifdef FEAT_GUI_MOTIF
++    MSG_PUTS(_("with X11-Motif GUI."));
++#  else
++#   ifdef FEAT_GUI_ATHENA
++#    ifdef FEAT_GUI_NEXTAW
++    MSG_PUTS(_("with X11-neXtaw GUI."));
++#    else
+     MSG_PUTS(_("with X11-Athena GUI."));
+ #    endif
+ #   else
+@@ -974,15 +3335,8 @@
+ #endif
+     version_msg(_("  Features included (+) or not (-):\n"));
+ 
+-    /* print all the features */
+-    for (i = 0; features[i] != NULL; ++i)
+-    {
+-	version_msg(features[i]);
+-	if (msg_col > 0)
+-	    version_msg(" ");
+-    }
++    list_features();
+ 
+-    version_msg("\n");
+ #ifdef SYS_VIMRC_FILE
+     version_msg(_("   system vimrc file: \""));
+     version_msg(SYS_VIMRC_FILE);
+@@ -1262,14 +3616,11 @@
+ 	if (highest_patch())
+ 	{
+ 	    /* Check for 9.9x or 9.9xx, alpha/beta version */
+-	    if (isalpha((int)mediumVersion[3]))
++	    if (isalpha((int)vers[3]))
+ 	    {
+-		if (isalpha((int)mediumVersion[4]))
+-		    sprintf((char *)vers + 5, ".%d%s", highest_patch(),
+-							   mediumVersion + 5);
+-		else
+-		    sprintf((char *)vers + 4, ".%d%s", highest_patch(),
+-							   mediumVersion + 4);
++		int len = (isalpha((int)vers[4])) ? 5 : 4;
++		sprintf((char *)vers + len, ".%d%s", highest_patch(),
++							 mediumVersion + len);
+ 	    }
+ 	    else
+ 		sprintf((char *)vers + 3, ".%d", highest_patch());
+diff -Naur vim73.orig/src/vim.h vim73/src/vim.h
+--- vim73.orig/src/vim.h	2010-07-29 18:46:39.000000000 +0000
++++ vim73/src/vim.h	2013-06-07 17:07:38.695564841 +0000
+@@ -27,6 +27,11 @@
+ # endif
+ #endif
+ 
++#if defined(MSDOS) || defined(WIN16) || defined(WIN32) || defined(_WIN64) \
++	|| defined(__EMX__)
++# include "vimio.h"
++#endif
++
+ /* ============ the header file puzzle (ca. 50-100 pieces) ========= */
+ 
+ #ifdef HAVE_CONFIG_H	/* GNU autoconf (or something else) was here */
+@@ -99,7 +104,7 @@
+ # endif
+ #endif
+ #if defined(MACOS_X) || defined(MACOS_CLASSIC)
+-#  define MACOS
++# define MACOS
+ #endif
+ #if defined(MACOS_X) && defined(MACOS_CLASSIC)
+     Error: To compile for both MACOS X and Classic use a Classic Carbon
+@@ -116,6 +121,7 @@
+     || defined(FEAT_GUI_W32) \
+     || defined(FEAT_GUI_W16) \
+     || defined(FEAT_GUI_PHOTON)
++# define FEAT_GUI_ENABLED  /* also defined with NO_X11_INCLUDES */
+ # if !defined(FEAT_GUI) && !defined(NO_X11_INCLUDES)
+ #  define FEAT_GUI
+ # endif
+@@ -179,9 +185,6 @@
+ #  define SIZEOF_INT 2
+ # endif
+ #endif
+-#ifdef RISCOS
+-# define SIZEOF_INT 4
+-#endif
+ 
+ 
+ #include "feature.h"	/* #defines for optionals and features */
+@@ -192,8 +195,8 @@
+ #endif
+ 
+ #ifdef NO_X11_INCLUDES
+-    /* In os_mac_conv.c NO_X11_INCLUDES is defined to avoid X11 headers.
+-     * Disable all X11 related things to avoid conflicts. */
++    /* In os_mac_conv.c and os_macosx.m NO_X11_INCLUDES is defined to avoid
++     * X11 headers.  Disable all X11 related things to avoid conflicts. */
+ # ifdef FEAT_X11
+ #  undef FEAT_X11
+ # endif
+@@ -335,10 +338,6 @@
+ # include "os_mac.h"
+ #endif
+ 
+-#ifdef RISCOS
+-# include "os_riscos.h"
+-#endif
+-
+ #ifdef __QNX__
+ # include "os_qnx.h"
+ #endif
+@@ -475,6 +474,11 @@
+ # include <sys/stat.h>
+ #endif
+ 
++#if defined(HAVE_ERRNO_H) || defined(DJGPP) || defined(WIN16) \
++	|| defined(WIN32) || defined(_WIN64) || defined(__EMX__)
++# include <errno.h>
++#endif
++
+ /*
+  * Allow other (non-unix) systems to configure themselves now
+  * These are also in os_unix.h, because osdef.sh needs them there.
+@@ -486,7 +490,7 @@
+ #  include <string.h>
+ # endif
+ # if defined(HAVE_STRINGS_H) && !defined(NO_STRINGS_WITH_STRING_H)
+-#   include <strings.h>
++#  include <strings.h>
+ # endif
+ # ifdef HAVE_STAT_H
+ #  include <stat.h>
+@@ -511,22 +515,22 @@
+ # include <stdarg.h>
+ #endif
+ 
+-# if defined(HAVE_SYS_SELECT_H) && \
++#if defined(HAVE_SYS_SELECT_H) && \
+ 	(!defined(HAVE_SYS_TIME_H) || defined(SYS_SELECT_WITH_SYS_TIME))
+-#  include <sys/select.h>
+-# endif
++# include <sys/select.h>
++#endif
+ 
+-# ifndef HAVE_SELECT
+-#  ifdef HAVE_SYS_POLL_H
+-#   include <sys/poll.h>
++#ifndef HAVE_SELECT
++# ifdef HAVE_SYS_POLL_H
++#  include <sys/poll.h>
++#  define HAVE_POLL
++# else
++#  ifdef HAVE_POLL_H
++#   include <poll.h>
+ #   define HAVE_POLL
+-#  else
+-#   ifdef HAVE_POLL_H
+-#    include <poll.h>
+-#    define HAVE_POLL
+-#   endif
+ #  endif
+ # endif
++#endif
+ 
+ /* ================ end of the header file puzzle =============== */
+ 
+@@ -776,6 +780,9 @@
+ #define EXPAND_FILETYPE		37
+ #define EXPAND_FILES_IN_PATH	38
+ #define EXPAND_OWNSYNTAX	39
++#define EXPAND_LOCALES		40
++#define EXPAND_HISTORY		41
++#define EXPAND_USER		42
+ 
+ /* Values for exmode_active (0 is no exmode) */
+ #define EXMODE_NORMAL		1
+@@ -789,6 +796,7 @@
+ #define WILD_PREV		5
+ #define WILD_ALL		6
+ #define WILD_LONGEST		7
++#define WILD_ALL_KEEP		8
+ 
+ #define WILD_LIST_NOTFOUND	1
+ #define WILD_HOME_REPLACE	2
+@@ -798,6 +806,7 @@
+ #define WILD_KEEP_ALL		32
+ #define WILD_SILENT		64
+ #define WILD_ESCAPE		128
++#define WILD_ICASE		256
+ 
+ /* Flags for expand_wildcards() */
+ #define EW_DIR		0x01	/* include directory names */
+@@ -808,6 +817,9 @@
+ #define EW_SILENT	0x20	/* don't print "1 returned" from shell */
+ #define EW_EXEC		0x40	/* executable files */
+ #define EW_PATH		0x80	/* search in 'path' too */
++#define EW_ICASE	0x100	/* ignore case */
++#define EW_NOERROR	0x200	/* no error for bad regexp */
++#define EW_NOTWILD	0x400	/* add match with literal name if exists */
+ /* Note: mostly EW_NOTFOUND and EW_SILENT are mutually exclusive: EW_NOTFOUND
+  * is used when executing commands and EW_SILENT for interactive expanding. */
+ 
+@@ -1061,12 +1073,14 @@
+ #define INSCHAR_DO_COM	2	/* format comments */
+ #define INSCHAR_CTRLV	4	/* char typed just after CTRL-V */
+ #define INSCHAR_NO_FEX	8	/* don't use 'formatexpr' */
++#define INSCHAR_COM_LIST 16	/* format comments with list/2nd line indent */
+ 
+ /* flags for open_line() */
+ #define OPENLINE_DELSPACES  1	/* delete spaces after cursor */
+ #define OPENLINE_DO_COM	    2	/* format comments */
+ #define OPENLINE_KEEPTRAIL  4	/* keep trailing spaces */
+ #define OPENLINE_MARKFIX    8	/* fix mark positions */
++#define OPENLINE_COM_LIST  16	/* format comments with list/2nd line indent */
+ 
+ /*
+  * There are four history tables:
+@@ -1228,6 +1242,7 @@
+     EVENT_CMDWINENTER,		/* after entering the cmdline window */
+     EVENT_CMDWINLEAVE,		/* before leaving the cmdline window */
+     EVENT_COLORSCHEME,		/* after loading a colorscheme */
++    EVENT_COMPLETEDONE,		/* after finishing insert complete */
+     EVENT_FILEAPPENDPOST,	/* after appending to a file */
+     EVENT_FILEAPPENDPRE,	/* before appending to a file */
+     EVENT_FILEAPPENDCMD,	/* append to a file using command */
+@@ -1253,8 +1268,9 @@
+     EVENT_INSERTENTER,		/* when entering Insert mode */
+     EVENT_INSERTLEAVE,		/* when leaving Insert mode */
+     EVENT_MENUPOPUP,		/* just before popup menu is displayed */
+-    EVENT_QUICKFIXCMDPOST,	/* after :make, :grep etc */
+-    EVENT_QUICKFIXCMDPRE,	/* before :make, :grep etc */
++    EVENT_QUICKFIXCMDPOST,	/* after :make, :grep etc. */
++    EVENT_QUICKFIXCMDPRE,	/* before :make, :grep etc. */
++    EVENT_QUITPRE,		/* before :quit */
+     EVENT_SESSIONLOADPOST,	/* after loading a session file */
+     EVENT_STDINREADPOST,	/* after reading from stdin */
+     EVENT_STDINREADPRE,		/* before reading from stdin */
+@@ -1269,6 +1285,7 @@
+     EVENT_WINENTER,		/* after entering a window */
+     EVENT_WINLEAVE,		/* before leaving a window */
+     EVENT_ENCODINGCHANGED,	/* after changing the 'encoding' option */
++    EVENT_INSERTCHARPRE,	/* before inserting a char */
+     EVENT_CURSORHOLD,		/* cursor in same position for a while */
+     EVENT_CURSORHOLDI,		/* idem, in Insert mode */
+     EVENT_FUNCUNDEFINED,	/* if calling a function which doesn't exist */
+@@ -1283,6 +1300,8 @@
+     EVENT_TABENTER,		/* after entering a tab page */
+     EVENT_SHELLCMDPOST,		/* after ":!cmd" */
+     EVENT_SHELLFILTERPOST,	/* after ":1,2!cmd", ":w !cmd", ":r !cmd". */
++    EVENT_TEXTCHANGED,		/* text was modified */
++    EVENT_TEXTCHANGEDI,		/* text was modified in Insert mode*/
+     NUM_EVENTS			/* MUST be the last one */
+ };
+ 
+@@ -1307,6 +1326,7 @@
+     , HLF_M	    /* "--More--" message */
+     , HLF_CM	    /* Mode (e.g., "-- INSERT --") */
+     , HLF_N	    /* line number for ":number" and ":#" commands */
++    , HLF_CLN	    /* current line number */
+     , HLF_R	    /* return to continue message and yes/no questions */
+     , HLF_S	    /* status lines */
+     , HLF_SNC	    /* status lines of not-current windows */
+@@ -1344,7 +1364,7 @@
+ /* The HL_FLAGS must be in the same order as the HLF_ enums!
+  * When changing this also adjust the default for 'highlight'. */
+ #define HL_FLAGS {'8', '@', 'd', 'e', 'h', 'i', 'l', 'm', 'M', \
+-		  'n', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
++		  'n', 'N', 'r', 's', 'S', 'c', 't', 'v', 'V', 'w', 'W', \
+ 		  'f', 'F', 'A', 'C', 'D', 'T', '-', '>', \
+ 		  'B', 'P', 'R', 'L', \
+ 		  '+', '=', 'x', 'X', '*', '#', '_', '!', '.', 'o'}
+@@ -1423,6 +1443,8 @@
+ 
+ #define IOSIZE	   (1024+1)	/* file i/o and sprintf buffer size */
+ 
++#define DIALOG_MSG_SIZE 1000	/* buffer size for dialog_msg() */
++
+ #ifdef FEAT_MBYTE
+ # define MSG_BUF_LEN 480	/* length of buffer for small messages */
+ # define MSG_BUF_CLEN  (MSG_BUF_LEN / 6)    /* cell length (worst case: utf-8
+@@ -1605,18 +1627,8 @@
+  * (this does not account for maximum name lengths and things like "../dir",
+  * thus it is not 100% accurate!)
+  */
+-#ifdef CASE_INSENSITIVE_FILENAME
+-# ifdef BACKSLASH_IN_FILENAME
+-#  define fnamecmp(x, y) vim_fnamecmp((x), (y))
+-#  define fnamencmp(x, y, n) vim_fnamencmp((x), (y), (size_t)(n))
+-# else
+-#  define fnamecmp(x, y) MB_STRICMP((x), (y))
+-#  define fnamencmp(x, y, n) MB_STRNICMP((x), (y), (n))
+-# endif
+-#else
+-# define fnamecmp(x, y) strcmp((char *)(x), (char *)(y))
+-# define fnamencmp(x, y, n) strncmp((char *)(x), (char *)(y), (size_t)(n))
+-#endif
++#define fnamecmp(x, y) vim_fnamecmp((char_u *)(x), (char_u *)(y))
++#define fnamencmp(x, y, n) vim_fnamencmp((char_u *)(x), (char_u *)(y), (size_t)(n))
+ 
+ #ifdef HAVE_MEMSET
+ # define vim_memset(ptr, c, size)   memset((ptr), (c), (size))
+@@ -1640,6 +1652,11 @@
+ # define USE_INPUT_BUF
+ #endif
+ 
++#ifndef EINTR
++# define read_eintr(fd, buf, count) vim_read((fd), (buf), (count))
++# define write_eintr(fd, buf, count) vim_write((fd), (buf), (count))
++#endif
++
+ #ifdef MSWIN
+ /* On MS-Windows the third argument isn't size_t.  This matters for Win64,
+  * where sizeof(size_t)==8, not 4 */
+@@ -1683,6 +1700,8 @@
+  * character of up to 6 bytes, or one 16-bit character of up to three bytes
+  * plus six following composing characters of three bytes each. */
+ # define MB_MAXBYTES	21
++#else
++# define MB_MAXBYTES	1
+ #endif
+ 
+ #if (defined(FEAT_PROFILE) || defined(FEAT_RELTIME)) && !defined(PROTO)
+@@ -1842,15 +1861,16 @@
+ #define VV_OP		52
+ #define VV_SEARCHFORWARD 53
+ #define VV_OLDFILES	54
+-#define VV_LEN		55	/* number of v: vars */
++#define VV_WINDOWID	55
++#define VV_LEN		56	/* number of v: vars */
+ 
+ #ifdef FEAT_CLIPBOARD
+ 
+ /* VIM_ATOM_NAME is the older Vim-specific selection type for X11.  Still
+  * supported for when a mix of Vim versions is used. VIMENC_ATOM_NAME includes
+  * the encoding to support Vims using different 'encoding' values. */
+-#define VIM_ATOM_NAME "_VIM_TEXT"
+-#define VIMENC_ATOM_NAME "_VIMENC_TEXT"
++# define VIM_ATOM_NAME "_VIM_TEXT"
++# define VIMENC_ATOM_NAME "_VIMENC_TEXT"
+ 
+ /* Selection states for modeless selection */
+ # define SELECT_CLEARED		0
+@@ -1899,7 +1919,7 @@
+     GdkAtom     gtk_sel_atom;	/* PRIMARY/CLIPBOARD selection ID */
+ # endif
+ 
+-# ifdef MSWIN
++# if defined(MSWIN) || defined(FEAT_CYGWIN_WIN32_CLIPBOARD)
+     int_u	format;		/* Vim's own special clipboard format */
+     int_u	format_raw;	/* Vim's raw text clipboard format */
+ # endif
+@@ -1996,6 +2016,7 @@
+  #pragma warning(disable : 4312)
+ #endif
+ 
++/* Note: a NULL argument for vim_realloc() is not portable, don't use it. */
+ #if defined(MEM_PROFILE)
+ # define vim_realloc(ptr, size)  mem_realloc((ptr), (size))
+ #else
+@@ -2098,6 +2119,12 @@
+ # endif
+ #endif
+ 
++#if defined(FEAT_BROWSE) && defined(GTK_CHECK_VERSION)
++# if GTK_CHECK_VERSION(2,4,0)
++#  define USE_FILE_CHOOSER
++# endif
++#endif
++
+ #ifndef FEAT_NETBEANS_INTG
+ # undef NBDEBUG
+ #endif
+@@ -2193,4 +2220,30 @@
+ #define MSCR_LEFT	-1
+ #define MSCR_RIGHT	-2
+ 
++#define KEYLEN_PART_KEY -1	/* keylen value for incomplete key-code */
++#define KEYLEN_PART_MAP -2	/* keylen value for incomplete mapping */
++#define KEYLEN_REMOVED  9999	/* keylen value for removed sequence */
++
++/* Return values from win32_fileinfo(). */
++#define FILEINFO_OK	     0
++#define FILEINFO_ENC_FAIL    1	/* enc_to_utf16() failed */
++#define FILEINFO_READ_FAIL   2	/* CreateFile() failed */
++#define FILEINFO_INFO_FAIL   3	/* GetFileInformationByHandle() failed */
++
++/* Return value from get_option_value_strict */
++#define SOPT_BOOL	0x01	/* Boolean option */
++#define SOPT_NUM	0x02	/* Number option */
++#define SOPT_STRING	0x04	/* String option */
++#define SOPT_GLOBAL	0x08	/* Option has global value */
++#define SOPT_WIN	0x10	/* Option has window-local value */
++#define SOPT_BUF	0x20	/* Option has buffer-local value */
++#define SOPT_UNSET	0x40	/* Option does not have local value set */
++
++#define SREQ_GLOBAL	0	/* Request global option */
++#define SREQ_WIN	1	/* Request window-local option */
++#define SREQ_BUF	2	/* Request buffer-local option */
++
++/* Character used as separated in autoload function/variable names. */
++#define AUTOLOAD_CHAR '#'
++
+ #endif /* VIM__H */
+diff -Naur vim73.orig/src/vimio.h vim73/src/vimio.h
+--- vim73.orig/src/vimio.h	2010-05-15 11:04:08.000000000 +0000
++++ vim73/src/vimio.h	2013-06-07 17:07:38.835564441 +0000
+@@ -13,4 +13,7 @@
+ # define _CRT_NONSTDC_NO_DEPRECATE
+ #endif
+ 
+-#include <io.h>
++/* cproto fails on missing include files */
++#ifndef PROTO
++# include <io.h>
++#endif
+diff -Naur vim73.orig/src/winclip.c vim73/src/winclip.c
+--- vim73.orig/src/winclip.c	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/winclip.c	2013-06-07 17:07:38.908897565 +0000
+@@ -0,0 +1,798 @@
++/* vi:set ts=8 sts=4 sw=4:
++ *
++ * VIM - Vi IMproved by Bram Moolenaar
++ *
++ * Do ":help uganda"  in Vim to read copying and usage conditions.
++ * Do ":help credits" in Vim to see a list of people who contributed.
++ * See README.txt for an overview of the Vim source code.
++ */
++
++/*
++ * winclip.c
++ *
++ * Routines common to both Win16 and Win32 for clipboard handling.
++ * Also used by Cygwin, using os_unix.c.
++ */
++
++#ifdef WIN16
++# ifdef __BORLANDC__
++#  pragma warn -par
++#  pragma warn -ucp
++#  pragma warn -use
++#  pragma warn -aus
++# endif
++#endif
++
++#include "vimio.h"
++#include "vim.h"
++
++/*
++ * Compile only the clipboard handling features when compiling for cygwin
++ * posix environment.
++ */
++#ifdef FEAT_CYGWIN_WIN32_CLIPBOARD
++# define WIN3264
++# define WIN32_LEAN_AND_MEAN
++# include <windows.h>
++# include "winclip.pro"
++#endif
++
++/*
++ * When generating prototypes for Win32 on Unix, these lines make the syntax
++ * errors disappear.  They do not need to be correct.
++ */
++#ifdef PROTO
++#define WINAPI
++#define WINBASEAPI
++typedef int DWORD;
++typedef int LPBOOL;
++typedef int LPCSTR;
++typedef int LPCWSTR;
++typedef int LPSTR;
++typedef int LPWSTR;
++typedef int UINT;
++#endif
++
++#if defined(FEAT_MBYTE) || defined(PROTO)
++/*
++ * Convert an UTF-8 string to UTF-16.
++ * "instr[inlen]" is the input.  "inlen" is in bytes.
++ * When "outstr" is NULL only return the number of UTF-16 words produced.
++ * Otherwise "outstr" must be a buffer of sufficient size.
++ * Returns the number of UTF-16 words produced.
++ */
++    int
++utf8_to_utf16(char_u *instr, int inlen, short_u *outstr, int *unconvlenp)
++{
++    int		outlen = 0;
++    char_u	*p = instr;
++    int		todo = inlen;
++    int		l;
++    int		ch;
++
++    while (todo > 0)
++    {
++	/* Only convert if we have a complete sequence. */
++	l = utf_ptr2len_len(p, todo);
++	if (l > todo)
++	{
++	    /* Return length of incomplete sequence. */
++	    if (unconvlenp != NULL)
++		*unconvlenp = todo;
++	    break;
++	}
++
++	ch = utf_ptr2char(p);
++	if (ch >= 0x10000)
++	{
++	    /* non-BMP character, encoding with surrogate pairs */
++	    ++outlen;
++	    if (outstr != NULL)
++	    {
++		*outstr++ = (0xD800 - (0x10000 >> 10)) + (ch >> 10);
++		*outstr++ = 0xDC00 | (ch & 0x3FF);
++	    }
++	}
++	else if (outstr != NULL)
++	    *outstr++ = ch;
++	++outlen;
++	p += l;
++	todo -= l;
++    }
++
++    return outlen;
++}
++
++/*
++ * Convert an UTF-16 string to UTF-8.
++ * The input is "instr[inlen]" with "inlen" in number of UTF-16 words.
++ * When "outstr" is NULL only return the required number of bytes.
++ * Otherwise "outstr" must be a buffer of sufficient size.
++ * Return the number of bytes produced.
++ */
++    int
++utf16_to_utf8(short_u *instr, int inlen, char_u *outstr)
++{
++    int		outlen = 0;
++    int		todo = inlen;
++    short_u	*p = instr;
++    int		l;
++    int		ch, ch2;
++
++    while (todo > 0)
++    {
++	ch = *p;
++	if (ch >= 0xD800 && ch <= 0xDBFF && todo > 1)
++	{
++	    /* surrogate pairs handling */
++	    ch2 = p[1];
++	    if (ch2 >= 0xDC00 && ch2 <= 0xDFFF)
++	    {
++		ch = ((ch - 0xD800) << 10) + (ch2 & 0x3FF) + 0x10000;
++		++p;
++		--todo;
++	    }
++	}
++	if (outstr != NULL)
++	{
++	    l = utf_char2bytes(ch, outstr);
++	    outstr += l;
++	}
++	else
++	    l = utf_char2len(ch);
++	++p;
++	outlen += l;
++	--todo;
++    }
++
++    return outlen;
++}
++
++/*
++ * Call MultiByteToWideChar() and allocate memory for the result.
++ * Returns the result in "*out[*outlen]" with an extra zero appended.
++ * "outlen" is in words.
++ */
++    void
++MultiByteToWideChar_alloc(UINT cp, DWORD flags,
++	LPCSTR in, int inlen,
++	LPWSTR *out, int *outlen)
++{
++    *outlen = MultiByteToWideChar(cp, flags, in, inlen, 0, 0);
++    /* Add one one word to avoid a zero-length alloc(). */
++    *out = (LPWSTR)alloc(sizeof(WCHAR) * (*outlen + 1));
++    if (*out != NULL)
++    {
++	MultiByteToWideChar(cp, flags, in, inlen, *out, *outlen);
++	(*out)[*outlen] = 0;
++    }
++}
++
++/*
++ * Call WideCharToMultiByte() and allocate memory for the result.
++ * Returns the result in "*out[*outlen]" with an extra NUL appended.
++ */
++    void
++WideCharToMultiByte_alloc(UINT cp, DWORD flags,
++	LPCWSTR in, int inlen,
++	LPSTR *out, int *outlen,
++	LPCSTR def, LPBOOL useddef)
++{
++    *outlen = WideCharToMultiByte(cp, flags, in, inlen, NULL, 0, def, useddef);
++    /* Add one one byte to avoid a zero-length alloc(). */
++    *out = alloc((unsigned)*outlen + 1);
++    if (*out != NULL)
++    {
++	WideCharToMultiByte(cp, flags, in, inlen, *out, *outlen, def, useddef);
++	(*out)[*outlen] = 0;
++    }
++}
++
++#endif /* FEAT_MBYTE */
++
++#ifdef FEAT_CLIPBOARD
++/*
++ * Clipboard stuff, for cutting and pasting text to other windows.
++ */
++
++    void
++win_clip_init(void)
++{
++    clip_init(TRUE);
++
++    /*
++     * Vim's own clipboard format recognises whether the text is char, line,
++     * or rectangular block.  Only useful for copying between two Vims.
++     * "VimClipboard" was used for previous versions, using the first
++     * character to specify MCHAR, MLINE or MBLOCK.
++     */
++    clip_star.format = RegisterClipboardFormat("VimClipboard2");
++    clip_star.format_raw = RegisterClipboardFormat("VimRawBytes");
++}
++
++/* Type used for the clipboard type of Vim's data. */
++typedef struct
++{
++    int type;		/* MCHAR, MBLOCK or MLINE */
++    int txtlen;		/* length of CF_TEXT in bytes */
++    int ucslen;		/* length of CF_UNICODETEXT in words */
++    int rawlen;		/* length of clip_star.format_raw, including encoding,
++			   excluding terminating NUL */
++} VimClipType_t;
++
++/*
++ * Make vim the owner of the current selection.  Return OK upon success.
++ */
++/*ARGSUSED*/
++    int
++clip_mch_own_selection(VimClipboard *cbd)
++{
++    /*
++     * Never actually own the clipboard.  If another application sets the
++     * clipboard, we don't want to think that we still own it.
++     */
++    return FAIL;
++}
++
++/*
++ * Make vim NOT the owner of the current selection.
++ */
++/*ARGSUSED*/
++    void
++clip_mch_lose_selection(VimClipboard *cbd)
++{
++    /* Nothing needs to be done here */
++}
++
++/*
++ * Copy "str[*size]" into allocated memory, changing CR-NL to NL.
++ * Return the allocated result and the size in "*size".
++ * Returns NULL when out of memory.
++ */
++    static char_u *
++crnl_to_nl(const char_u *str, int *size)
++{
++    int		pos = 0;
++    int		str_len = *size;
++    char_u	*ret;
++    char_u	*retp;
++
++    /* Avoid allocating zero bytes, it generates an error message. */
++    ret = lalloc((long_u)(str_len == 0 ? 1 : str_len), TRUE);
++    if (ret != NULL)
++    {
++	retp = ret;
++	for (pos = 0; pos < str_len; ++pos)
++	{
++	    if (str[pos] == '\r' && str[pos + 1] == '\n')
++	    {
++		++pos;
++		--(*size);
++	    }
++	    *retp++ = str[pos];
++	}
++    }
++
++    return ret;
++}
++
++/*
++ * Wait for another process to Close the Clipboard.
++ * Returns TRUE for success.
++ */
++    static int
++vim_open_clipboard(void)
++{
++    int delay = 10;
++
++    while (!OpenClipboard(NULL))
++    {
++	if (delay > 500)
++	    return FALSE;  /* waited too long, give up */
++	Sleep(delay);
++	delay *= 2;	/* wait for 10, 20, 40, 80, etc. msec */
++    }
++    return TRUE;
++}
++
++/*
++ * Get the current selection and put it in the clipboard register.
++ *
++ * NOTE: Must use GlobalLock/Unlock here to ensure Win32s compatibility.
++ * On NT/W95 the clipboard data is a fixed global memory object and
++ * so its handle = its pointer.
++ * On Win32s, however, co-operation with the Win16 system means that
++ * the clipboard data is moveable and its handle is not a pointer at all,
++ * so we can't just cast the return value of GetClipboardData to (char_u*).
++ * <VN>
++ */
++    void
++clip_mch_request_selection(VimClipboard *cbd)
++{
++    VimClipType_t	metadata = { -1, -1, -1, -1 };
++    HGLOBAL		hMem = NULL;
++    char_u		*str = NULL;
++#if defined(FEAT_MBYTE) && defined(WIN3264)
++    char_u		*to_free = NULL;
++#endif
++#ifdef FEAT_MBYTE
++    HGLOBAL		rawh = NULL;
++#endif
++    int			str_size = 0;
++    int			maxlen;
++    size_t		n;
++
++    /*
++     * Don't pass GetActiveWindow() as an argument to OpenClipboard() because
++     * then we can't paste back into the same window for some reason - webb.
++     */
++    if (!vim_open_clipboard())
++	return;
++
++    /* Check for vim's own clipboard format first.  This only gets the type of
++     * the data, still need to use CF_UNICODETEXT or CF_TEXT for the text. */
++    if (IsClipboardFormatAvailable(cbd->format))
++    {
++	VimClipType_t	*meta_p;
++	HGLOBAL		meta_h;
++
++	/* We have metadata on the clipboard; try to get it. */
++	if ((meta_h = GetClipboardData(cbd->format)) != NULL
++		&& (meta_p = (VimClipType_t *)GlobalLock(meta_h)) != NULL)
++	{
++	    /* The size of "VimClipType_t" changed, "rawlen" was added later.
++	     * Only copy what is available for backwards compatibility. */
++	    n = sizeof(VimClipType_t);
++	    if (GlobalSize(meta_h) < n)
++		n = GlobalSize(meta_h);
++	    memcpy(&metadata, meta_p, n);
++	    GlobalUnlock(meta_h);
++	}
++    }
++
++#ifdef FEAT_MBYTE
++    /* Check for Vim's raw clipboard format first.  This is used without
++     * conversion, but only if 'encoding' matches. */
++    if (IsClipboardFormatAvailable(cbd->format_raw)
++				      && metadata.rawlen > (int)STRLEN(p_enc))
++    {
++	/* We have raw data on the clipboard; try to get it. */
++	if ((rawh = GetClipboardData(cbd->format_raw)) != NULL)
++	{
++	    char_u	*rawp;
++
++	    rawp = (char_u *)GlobalLock(rawh);
++	    if (rawp != NULL && STRCMP(p_enc, rawp) == 0)
++	    {
++		n = STRLEN(p_enc) + 1;
++		str = rawp + n;
++		str_size = (int)(metadata.rawlen - n);
++	    }
++	    else
++	    {
++		GlobalUnlock(rawh);
++		rawh = NULL;
++	    }
++	}
++    }
++    if (str == NULL)
++    {
++#endif
++
++#if defined(FEAT_MBYTE) && defined(WIN3264)
++    /* Try to get the clipboard in Unicode if it's not an empty string. */
++    if (IsClipboardFormatAvailable(CF_UNICODETEXT) && metadata.ucslen != 0)
++    {
++	HGLOBAL hMemW;
++
++	if ((hMemW = GetClipboardData(CF_UNICODETEXT)) != NULL)
++	{
++	    WCHAR *hMemWstr = (WCHAR *)GlobalLock(hMemW);
++
++	    /* Use the length of our metadata if possible, but limit it to the
++	     * GlobalSize() for safety. */
++	    maxlen = (int)(GlobalSize(hMemW) / sizeof(WCHAR));
++	    if (metadata.ucslen >= 0)
++	    {
++		if (metadata.ucslen > maxlen)
++		    str_size = maxlen;
++		else
++		    str_size = metadata.ucslen;
++	    }
++	    else
++	    {
++		for (str_size = 0; str_size < maxlen; ++str_size)
++		    if (hMemWstr[str_size] == NUL)
++			break;
++	    }
++	    to_free = str = utf16_to_enc((short_u *)hMemWstr, &str_size);
++	    GlobalUnlock(hMemW);
++	}
++    }
++    else
++#endif
++    /* Get the clipboard in the Active codepage. */
++    if (IsClipboardFormatAvailable(CF_TEXT))
++    {
++	if ((hMem = GetClipboardData(CF_TEXT)) != NULL)
++	{
++	    str = (char_u *)GlobalLock(hMem);
++
++	    /* The length is either what our metadata says or the strlen().
++	     * But limit it to the GlobalSize() for safety. */
++	    maxlen = (int)GlobalSize(hMem);
++	    if (metadata.txtlen >= 0)
++	    {
++		if (metadata.txtlen > maxlen)
++		    str_size = maxlen;
++		else
++		    str_size = metadata.txtlen;
++	    }
++	    else
++	    {
++		for (str_size = 0; str_size < maxlen; ++str_size)
++		    if (str[str_size] == NUL)
++			break;
++	    }
++
++# if defined(FEAT_MBYTE) && defined(WIN3264)
++	    /* The text is in the active codepage.  Convert to 'encoding',
++	     * going through UTF-16. */
++	    acp_to_enc(str, str_size, &to_free, &maxlen);
++	    if (to_free != NULL)
++	    {
++		str_size = maxlen;
++		str = to_free;
++	    }
++# endif
++	}
++    }
++#ifdef FEAT_MBYTE
++    }
++#endif
++
++    if (str != NULL && *str != NUL)
++    {
++	char_u *temp_clipboard;
++
++	/* If the type is not known detect it. */
++	if (metadata.type == -1)
++	    metadata.type = MAUTO;
++
++	/* Translate <CR><NL> into <NL>. */
++	temp_clipboard = crnl_to_nl(str, &str_size);
++	if (temp_clipboard != NULL)
++	{
++	    clip_yank_selection(metadata.type, temp_clipboard, str_size, cbd);
++	    vim_free(temp_clipboard);
++	}
++    }
++
++    /* unlock the global object */
++    if (hMem != NULL)
++	GlobalUnlock(hMem);
++#ifdef FEAT_MBYTE
++    if (rawh != NULL)
++	GlobalUnlock(rawh);
++#endif
++    CloseClipboard();
++#if defined(FEAT_MBYTE) && defined(WIN3264)
++    vim_free(to_free);
++#endif
++}
++
++/*
++ * Send the current selection to the clipboard.
++ */
++    void
++clip_mch_set_selection(VimClipboard *cbd)
++{
++    char_u		*str = NULL;
++    VimClipType_t	metadata;
++    long_u		txtlen;
++    HGLOBAL		hMemRaw = NULL;
++    HGLOBAL		hMem = NULL;
++    HGLOBAL		hMemVim = NULL;
++# if defined(FEAT_MBYTE) && defined(WIN3264)
++    HGLOBAL		hMemW = NULL;
++# endif
++
++    /* If the '*' register isn't already filled in, fill it in now */
++    cbd->owned = TRUE;
++    clip_get_selection(cbd);
++    cbd->owned = FALSE;
++
++    /* Get the text to be put on the clipboard, with CR-LF. */
++    metadata.type = clip_convert_selection(&str, &txtlen, cbd);
++    if (metadata.type < 0)
++	return;
++    metadata.txtlen = (int)txtlen;
++    metadata.ucslen = 0;
++    metadata.rawlen = 0;
++
++#ifdef FEAT_MBYTE
++    /* Always set the raw bytes: 'encoding', NUL and the text.  This is used
++     * when copy/paste from/to Vim with the same 'encoding', so that illegal
++     * bytes can also be copied and no conversion is needed. */
++    {
++	LPSTR lpszMemRaw;
++
++	metadata.rawlen = (int)(txtlen + STRLEN(p_enc) + 1);
++	hMemRaw = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
++							 metadata.rawlen + 1);
++	lpszMemRaw = (LPSTR)GlobalLock(hMemRaw);
++	if (lpszMemRaw != NULL)
++	{
++	    STRCPY(lpszMemRaw, p_enc);
++	    memcpy(lpszMemRaw + STRLEN(p_enc) + 1, str, txtlen + 1);
++	    GlobalUnlock(hMemRaw);
++	}
++	else
++	    metadata.rawlen = 0;
++    }
++#endif
++
++# if defined(FEAT_MBYTE) && defined(WIN3264)
++    {
++	WCHAR		*out;
++	int		len = metadata.txtlen;
++
++	/* Convert the text to UTF-16. This is put on the clipboard as
++	 * CF_UNICODETEXT. */
++	out = (WCHAR *)enc_to_utf16(str, &len);
++	if (out != NULL)
++	{
++	    WCHAR *lpszMemW;
++
++	    /* Convert the text for CF_TEXT to Active codepage. Otherwise it's
++	     * p_enc, which has no relation to the Active codepage. */
++	    metadata.txtlen = WideCharToMultiByte(GetACP(), 0, out, len,
++							       NULL, 0, 0, 0);
++	    vim_free(str);
++	    str = (char_u *)alloc((unsigned)(metadata.txtlen == 0 ? 1
++							  : metadata.txtlen));
++	    if (str == NULL)
++	    {
++		vim_free(out);
++		return;		/* out of memory */
++	    }
++	    WideCharToMultiByte(GetACP(), 0, out, len,
++						  str, metadata.txtlen, 0, 0);
++
++	    /* Allocate memory for the UTF-16 text, add one NUL word to
++	     * terminate the string. */
++	    hMemW = (LPSTR)GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE,
++						   (len + 1) * sizeof(WCHAR));
++	    lpszMemW = (WCHAR *)GlobalLock(hMemW);
++	    if (lpszMemW != NULL)
++	    {
++		memcpy(lpszMemW, out, len * sizeof(WCHAR));
++		lpszMemW[len] = NUL;
++		GlobalUnlock(hMemW);
++	    }
++	    vim_free(out);
++	    metadata.ucslen = len;
++	}
++    }
++# endif
++
++    /* Allocate memory for the text, add one NUL byte to terminate the string.
++     */
++    hMem = GlobalAlloc(GMEM_MOVEABLE | GMEM_DDESHARE, metadata.txtlen + 1);
++    {
++	LPSTR lpszMem = (LPSTR)GlobalLock(hMem);
++
++	if (lpszMem)
++	{
++	    vim_strncpy(lpszMem, str, metadata.txtlen);
++	    GlobalUnlock(hMem);
++	}
++    }
++
++    /* Set up metadata: */
++    {
++	VimClipType_t *lpszMemVim = NULL;
++
++	hMemVim = GlobalAlloc(GMEM_MOVEABLE|GMEM_DDESHARE,
++						       sizeof(VimClipType_t));
++	lpszMemVim = (VimClipType_t *)GlobalLock(hMemVim);
++	memcpy(lpszMemVim, &metadata, sizeof(metadata));
++	GlobalUnlock(hMemVim);
++    }
++
++    /*
++     * Open the clipboard, clear it and put our text on it.
++     * Always set our Vim format.  Put Unicode and plain text on it.
++     *
++     * Don't pass GetActiveWindow() as an argument to OpenClipboard()
++     * because then we can't paste back into the same window for some
++     * reason - webb.
++     */
++    if (vim_open_clipboard())
++    {
++	if (EmptyClipboard())
++	{
++	    SetClipboardData(cbd->format, hMemVim);
++	    hMemVim = 0;
++# if defined(FEAT_MBYTE) && defined(WIN3264)
++	    if (hMemW != NULL)
++	    {
++		if (SetClipboardData(CF_UNICODETEXT, hMemW) != NULL)
++		    hMemW = NULL;
++	    }
++# endif
++	    /* Always use CF_TEXT.  On Win98 Notepad won't obtain the
++	     * CF_UNICODETEXT text, only CF_TEXT. */
++	    SetClipboardData(CF_TEXT, hMem);
++	    hMem = 0;
++	}
++	CloseClipboard();
++    }
++
++    vim_free(str);
++    /* Free any allocations we didn't give to the clipboard: */
++    if (hMemRaw)
++	GlobalFree(hMemRaw);
++    if (hMem)
++	GlobalFree(hMem);
++# if defined(FEAT_MBYTE) && defined(WIN3264)
++    if (hMemW)
++	GlobalFree(hMemW);
++# endif
++    if (hMemVim)
++	GlobalFree(hMemVim);
++}
++
++#endif /* FEAT_CLIPBOARD */
++
++#if defined(FEAT_MBYTE) || defined(PROTO)
++/*
++ * Note: the following two functions are only guaranteed to work when using
++ * valid MS-Windows codepages or when iconv() is available.
++ */
++
++/*
++ * Convert "str" from 'encoding' to UTF-16.
++ * Input in "str" with length "*lenp".  When "lenp" is NULL, use strlen().
++ * Output is returned as an allocated string.  "*lenp" is set to the length of
++ * the result.  A trailing NUL is always added.
++ * Returns NULL when out of memory.
++ */
++    short_u *
++enc_to_utf16(char_u *str, int *lenp)
++{
++    vimconv_T	conv;
++    WCHAR	*ret;
++    char_u	*allocbuf = NULL;
++    int		len_loc;
++    int		length;
++
++    if (lenp == NULL)
++    {
++	len_loc = (int)STRLEN(str) + 1;
++	lenp = &len_loc;
++    }
++
++    if (enc_codepage > 0)
++    {
++	/* We can do any CP### -> UTF-16 in one pass, and we can do it
++	 * without iconv() (convert_* may need iconv). */
++	MultiByteToWideChar_alloc(enc_codepage, 0, str, *lenp, &ret, &length);
++    }
++    else
++    {
++	/* Use "latin1" by default, we might be called before we have p_enc
++	 * set up.  Convert to utf-8 first, works better with iconv().  Does
++	 * nothing if 'encoding' is "utf-8". */
++	conv.vc_type = CONV_NONE;
++	if (convert_setup(&conv, p_enc ? p_enc : (char_u *)"latin1",
++						   (char_u *)"utf-8") == FAIL)
++	    return NULL;
++	if (conv.vc_type != CONV_NONE)
++	{
++	    str = allocbuf = string_convert(&conv, str, lenp);
++	    if (str == NULL)
++		return NULL;
++	}
++	convert_setup(&conv, NULL, NULL);
++
++	length = utf8_to_utf16(str, *lenp, NULL, NULL);
++	ret = (WCHAR *)alloc((unsigned)((length + 1) * sizeof(WCHAR)));
++	if (ret != NULL)
++	{
++	    utf8_to_utf16(str, *lenp, (short_u *)ret, NULL);
++	    ret[length] = 0;
++	}
++
++	vim_free(allocbuf);
++    }
++
++    *lenp = length;
++    return (short_u *)ret;
++}
++
++/*
++ * Convert an UTF-16 string to 'encoding'.
++ * Input in "str" with length (counted in wide characters) "*lenp".  When
++ * "lenp" is NULL, use wcslen().
++ * Output is returned as an allocated string.  If "*lenp" is not NULL it is
++ * set to the length of the result.
++ * Returns NULL when out of memory.
++ */
++    char_u *
++utf16_to_enc(short_u *str, int *lenp)
++{
++    vimconv_T	conv;
++    char_u	*utf8_str = NULL, *enc_str = NULL;
++    int		len_loc;
++
++    if (lenp == NULL)
++    {
++	len_loc = (int)wcslen(str) + 1;
++	lenp = &len_loc;
++    }
++
++    if (enc_codepage > 0)
++    {
++	/* We can do any UTF-16 -> CP### in one pass. */
++	int length;
++
++	WideCharToMultiByte_alloc(enc_codepage, 0, str, *lenp,
++					    (LPSTR *)&enc_str, &length, 0, 0);
++	*lenp = length;
++	return enc_str;
++    }
++
++    /* Avoid allocating zero bytes, it generates an error message. */
++    utf8_str = alloc(utf16_to_utf8(str, *lenp == 0 ? 1 : *lenp, NULL));
++    if (utf8_str != NULL)
++    {
++	*lenp = utf16_to_utf8(str, *lenp, utf8_str);
++
++	/* We might be called before we have p_enc set up. */
++	conv.vc_type = CONV_NONE;
++	convert_setup(&conv, (char_u *)"utf-8",
++					    p_enc? p_enc: (char_u *)"latin1");
++	if (conv.vc_type == CONV_NONE)
++	{
++	    /* p_enc is utf-8, so we're done. */
++	    enc_str = utf8_str;
++	}
++	else
++	{
++	    enc_str = string_convert(&conv, utf8_str, lenp);
++	    vim_free(utf8_str);
++	}
++
++	convert_setup(&conv, NULL, NULL);
++    }
++
++    return enc_str;
++}
++#endif /* FEAT_MBYTE */
++
++#if (defined(FEAT_MBYTE) && defined(WIN3264)) || defined(PROTO)
++/*
++ * Convert from the active codepage to 'encoding'.
++ * Input is "str[str_size]".
++ * The result is in allocated memory: "out[outlen]".  With terminating NUL.
++ */
++    void
++acp_to_enc(str, str_size, out, outlen)
++    char_u	*str;
++    int		str_size;
++    char_u	**out;
++    int		*outlen;
++
++{
++    LPWSTR	widestr;
++
++    MultiByteToWideChar_alloc(GetACP(), 0, str, str_size, &widestr, outlen);
++    if (widestr != NULL)
++    {
++	++*outlen;	/* Include the 0 after the string */
++	*out = utf16_to_enc((short_u *)widestr, outlen);
++	vim_free(widestr);
++    }
++}
++#endif
+diff -Naur vim73.orig/src/window.c vim73/src/window.c
+--- vim73.orig/src/window.c	2010-07-20 20:23:49.000000000 +0000
++++ vim73/src/window.c	2013-06-07 17:07:38.948897451 +0000
+@@ -23,7 +23,7 @@
+ static void win_totop __ARGS((int size, int flags));
+ static void win_equal_rec __ARGS((win_T *next_curwin, int current, frame_T *topfr, int dir, int col, int row, int width, int height));
+ static int last_window __ARGS((void));
+-static int one_window __ARGS((void));
++static int close_last_window_tabpage __ARGS((win_T *win, int free_buf, tabpage_T *prev_curtab));
+ static win_T *win_free_mem __ARGS((win_T *win, int *dirp, tabpage_T *tp));
+ static frame_T *win_altframe __ARGS((win_T *win, tabpage_T *tp));
+ static tabpage_T *alt_tabpage __ARGS((void));
+@@ -44,17 +44,16 @@
+ static void new_frame __ARGS((win_T *wp));
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+ static tabpage_T *alloc_tabpage __ARGS((void));
+-static int leave_tabpage __ARGS((buf_T *new_curbuf));
+-static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf));
++static int leave_tabpage __ARGS((buf_T *new_curbuf, int trigger_leave_autocmds));
++static void enter_tabpage __ARGS((tabpage_T *tp, buf_T *old_curbuf, int trigger_enter_autocmds, int trigger_leave_autocmds));
+ static void frame_fix_height __ARGS((win_T *wp));
+ static int frame_minheight __ARGS((frame_T *topfrp, win_T *next_curwin));
+-static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin));
++static void win_enter_ext __ARGS((win_T *wp, int undo_sync, int no_curwin, int trigger_enter_autocmds, int trigger_leave_autocmds));
+ static void win_free __ARGS((win_T *wp, tabpage_T *tp));
+ static void frame_append __ARGS((frame_T *after, frame_T *frp));
+ static void frame_insert __ARGS((frame_T *before, frame_T *frp));
+ static void frame_remove __ARGS((frame_T *frp));
+ #ifdef FEAT_VERTSPLIT
+-static void win_new_width __ARGS((win_T *wp, int width));
+ static void win_goto_ver __ARGS((int up, long count));
+ static void win_goto_hor __ARGS((int left, long count));
+ #endif
+@@ -70,7 +69,7 @@
+ #endif /* FEAT_WINDOWS */
+ 
+ static win_T *win_alloc __ARGS((win_T *after, int hidden));
+-static void win_new_height __ARGS((win_T *, int));
++static void set_fraction __ARGS((win_T *wp));
+ 
+ #define URL_SLASH	1		/* path_is_url() has found "://" */
+ #define URL_BACKSLASH	2		/* path_is_url() has found ":\\" */
+@@ -354,11 +353,11 @@
+ 						     && valid_tabpage(oldtab))
+ 		    {
+ 			newtab = curtab;
+-			goto_tabpage_tp(oldtab);
++			goto_tabpage_tp(oldtab, TRUE, TRUE);
+ 			if (curwin == wp)
+ 			    win_close(curwin, FALSE);
+ 			if (valid_tabpage(newtab))
+-			    goto_tabpage_tp(newtab);
++			    goto_tabpage_tp(newtab, TRUE, TRUE);
+ 		    }
+ 		}
+ 		break;
+@@ -525,9 +524,7 @@
+ 		    setpcmark();
+ 		    if (win_split(0, 0) == OK)
+ 		    {
+-# ifdef FEAT_SCROLLBIND
+-			curwin->w_p_scb = FALSE;
+-# endif
++			RESET_BINDING(curwin);
+ 			(void)do_ecmd(0, ptr, NULL, NULL, ECMD_LASTL,
+ 							   ECMD_HIDE, NULL);
+ 			if (nchar == 'F' && lnum >= 0)
+@@ -684,19 +681,19 @@
+ }
+ 
+ /*
+- * When "newwin" is NULL: split the current window in two.
+- * When "newwin" is not NULL: insert this window at the far
++ * When "new_wp" is NULL: split the current window in two.
++ * When "new_wp" is not NULL: insert this window at the far
+  * top/left/right/bottom.
+  * return FAIL for failure, OK otherwise
+  */
+     int
+-win_split_ins(size, flags, newwin, dir)
++win_split_ins(size, flags, new_wp, dir)
+     int		size;
+     int		flags;
+-    win_T	*newwin;
++    win_T	*new_wp;
+     int		dir;
+ {
+-    win_T	*wp = newwin;
++    win_T	*wp = new_wp;
+     win_T	*oldwin;
+     int		new_size = size;
+     int		i;
+@@ -719,7 +716,7 @@
+     /* add a status line when p_ls == 1 and splitting the first window */
+     if (lastwin == firstwin && p_ls == 1 && oldwin->w_status_height == 0)
+     {
+-	if (oldwin->w_height <= p_wmh && newwin == NULL)
++	if (oldwin->w_height <= p_wmh && new_wp == NULL)
+ 	{
+ 	    EMSG(_(e_noroom));
+ 	    return FAIL;
+@@ -752,7 +749,7 @@
+ 	}
+ 	else
+ 	    available = oldwin->w_width;
+-	if (available < needed && newwin == NULL)
++	if (available < needed && new_wp == NULL)
+ 	{
+ 	    EMSG(_(e_noroom));
+ 	    return FAIL;
+@@ -816,7 +813,7 @@
+ 	    available = oldwin->w_height;
+ 	    needed += p_wmh;
+ 	}
+-	if (available < needed && newwin == NULL)
++	if (available < needed && new_wp == NULL)
+ 	{
+ 	    EMSG(_(e_noroom));
+ 	    return FAIL;
+@@ -889,20 +886,20 @@
+ 			p_sb))))
+     {
+ 	/* new window below/right of current one */
+-	if (newwin == NULL)
++	if (new_wp == NULL)
+ 	    wp = win_alloc(oldwin, FALSE);
+ 	else
+ 	    win_append(oldwin, wp);
+     }
+     else
+     {
+-	if (newwin == NULL)
++	if (new_wp == NULL)
+ 	    wp = win_alloc(oldwin->w_prev, FALSE);
+ 	else
+ 	    win_append(oldwin->w_prev, wp);
+     }
+ 
+-    if (newwin == NULL)
++    if (new_wp == NULL)
+     {
+ 	if (wp == NULL)
+ 	    return FAIL;
+@@ -973,10 +970,10 @@
+ 		frp->fr_parent = curfrp;
+     }
+ 
+-    if (newwin == NULL)
++    if (new_wp == NULL)
+ 	frp = wp->w_frame;
+     else
+-	frp = newwin->w_frame;
++	frp = new_wp->w_frame;
+     frp->fr_parent = curfrp->fr_parent;
+ 
+     /* Insert the new frame at the right place in the frame list. */
+@@ -985,10 +982,17 @@
+     else
+ 	frame_append(curfrp, frp);
+ 
++    /* Set w_fraction now so that the cursor keeps the same relative
++     * vertical position. */
++    if (oldwin->w_height > 0)
++	set_fraction(oldwin);
++    wp->w_fraction = oldwin->w_fraction;
++
+ #ifdef FEAT_VERTSPLIT
+     if (flags & WSP_VERT)
+     {
+ 	wp->w_p_scr = curwin->w_p_scr;
++
+ 	if (need_status)
+ 	{
+ 	    win_new_height(oldwin, oldwin->w_height - 1);
+@@ -1220,15 +1224,15 @@
+     }
+     newp->w_tagstackidx = oldp->w_tagstackidx;
+     newp->w_tagstacklen = oldp->w_tagstacklen;
+-# ifdef FEAT_FOLDING
++#ifdef FEAT_FOLDING
+     copyFoldingState(oldp, newp);
+-# endif
++#endif
+ 
+     win_init_some(newp, oldp);
+ 
+-# ifdef FEAT_SYN_HL
++#ifdef FEAT_SYN_HL
+     check_colorcolumn(newp);
+-# endif
++#endif
+ }
+ 
+ /*
+@@ -2028,7 +2032,11 @@
+ 
+     for (wp = firstwin; wp != NULL && lastwin != firstwin; )
+     {
+-	if (wp->w_buffer == buf && (!keep_curwin || wp != curwin))
++	if (wp->w_buffer == buf && (!keep_curwin || wp != curwin)
++#ifdef FEAT_AUTOCMD
++		&& !(wp->w_closing || wp->w_buffer->b_closing)
++#endif
++		)
+ 	{
+ 	    win_close(wp, FALSE);
+ 
+@@ -2045,7 +2053,11 @@
+ 	nexttp = tp->tp_next;
+ 	if (tp != curtab)
+ 	    for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
+-		if (wp->w_buffer == buf)
++		if (wp->w_buffer == buf
++#ifdef FEAT_AUTOCMD
++		    && !(wp->w_closing || wp->w_buffer->b_closing)
++#endif
++		    )
+ 		{
+ 		    win_close_othertab(wp, FALSE, tp);
+ 
+@@ -2058,6 +2070,7 @@
+ 
+     --RedrawingDisabled;
+ 
++    redraw_tabline = TRUE;
+     if (h != tabline_height())
+ 	shell_new_rows();
+ }
+@@ -2077,7 +2090,7 @@
+  * Return TRUE if there is only one window other than "aucmd_win" in the
+  * current tab page.
+  */
+-    static int
++    int
+ one_window()
+ {
+ #ifdef FEAT_AUTOCMD
+@@ -2100,10 +2113,60 @@
+ }
+ 
+ /*
++ * Close the possibly last window in a tab page.
++ * Returns TRUE when the window was closed already.
++ */
++    static int
++close_last_window_tabpage(win, free_buf, prev_curtab)
++    win_T	*win;
++    int		free_buf;
++    tabpage_T   *prev_curtab;
++{
++    if (firstwin == lastwin)
++    {
++#ifdef FEAT_AUTOCMD
++	buf_T	*old_curbuf = curbuf;
++#endif
++
++	/*
++	 * Closing the last window in a tab page.  First go to another tab
++	 * page and then close the window and the tab page.  This avoids that
++	 * curwin and curtab are invalid while we are freeing memory, they may
++	 * be used in GUI events.
++	 * Don't trigger autocommands yet, they may use wrong values, so do
++	 * that below.
++	 */
++	goto_tabpage_tp(alt_tabpage(), FALSE, TRUE);
++	redraw_tabline = TRUE;
++
++	/* Safety check: Autocommands may have closed the window when jumping
++	 * to the other tab page. */
++	if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
++	{
++	    int	    h = tabline_height();
++
++	    win_close_othertab(win, free_buf, prev_curtab);
++	    if (h != tabline_height())
++		shell_new_rows();
++	}
++	/* Since goto_tabpage_tp above did not trigger *Enter autocommands, do
++	 * that now. */
++#ifdef FEAT_AUTOCMD
++	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
++	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
++	if (old_curbuf != curbuf)
++	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
++#endif
++	return TRUE;
++    }
++    return FALSE;
++}
++
++/*
+  * Close window "win".  Only works for the current tab page.
+  * If "free_buf" is TRUE related buffer may be unloaded.
+  *
+- * called by :quit, :close, :xit, :wq and findtag()
++ * Called by :quit, :close, :xit, :wq and findtag().
+  */
+     void
+ win_close(win, free_buf)
+@@ -2126,6 +2189,8 @@
+     }
+ 
+ #ifdef FEAT_AUTOCMD
++    if (win->w_closing || (win->w_buffer != NULL && win->w_buffer->b_closing))
++	return; /* window is already being closed */
+     if (win == aucmd_win)
+     {
+ 	EMSG(_("E813: Cannot close autocmd window"));
+@@ -2138,33 +2203,15 @@
+     }
+ #endif
+ 
+-    /*
+-     * When closing the last window in a tab page first go to another tab
+-     * page and then close the window and the tab page.  This avoids that
+-     * curwin and curtab are not invalid while we are freeing memory, they may
+-     * be used in GUI events.
+-     */
+-    if (firstwin == lastwin)
+-    {
+-	goto_tabpage_tp(alt_tabpage());
+-	redraw_tabline = TRUE;
+-
+-	/* Safety check: Autocommands may have closed the window when jumping
+-	 * to the other tab page. */
+-	if (valid_tabpage(prev_curtab) && prev_curtab->tp_firstwin == win)
+-	{
+-	    int	    h = tabline_height();
+-
+-	    win_close_othertab(win, free_buf, prev_curtab);
+-	    if (h != tabline_height())
+-		shell_new_rows();
+-	}
+-	return;
+-    }
++    /* When closing the last window in a tab page first go to another tab page
++     * and then close the window and the tab page to avoid that curwin and
++     * curtab are invalid while we are freeing memory. */
++    if (close_last_window_tabpage(win, free_buf, prev_curtab))
++      return;
+ 
+     /* When closing the help window, try restoring a snapshot after closing
+      * the window.  Otherwise clear the snapshot, it's now invalid. */
+-    if (win->w_buffer->b_help)
++    if (win->w_buffer != NULL && win->w_buffer->b_help)
+ 	help_window = TRUE;
+     else
+ 	clear_snapshot(curtab, SNAP_HELP_IDX);
+@@ -2179,17 +2226,26 @@
+ 	wp = frame2win(win_altframe(win, NULL));
+ 
+ 	/*
+-	 * Be careful: If autocommands delete the window, return now.
++	 * Be careful: If autocommands delete the window or cause this window
++	 * to be the last one left, return now.
+ 	 */
+ 	if (wp->w_buffer != curbuf)
+ 	{
+ 	    other_buffer = TRUE;
++	    win->w_closing = TRUE;
+ 	    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
+-	    if (!win_valid(win) || last_window())
++	    if (!win_valid(win))
++		return;
++	    win->w_closing = FALSE;
++	    if (last_window())
+ 		return;
+ 	}
++	win->w_closing = TRUE;
+ 	apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+-	if (!win_valid(win) || last_window())
++	if (!win_valid(win))
++	    return;
++	win->w_closing = FALSE;
++	if (last_window())
+ 	    return;
+ # ifdef FEAT_EVAL
+ 	/* autocmds may abort script processing */
+@@ -2206,17 +2262,41 @@
+ 	out_flush();
+ #endif
+ 
++#ifdef FEAT_SYN_HL
++    /* Free independent synblock before the buffer is freed. */
++    if (win->w_buffer != NULL)
++	reset_synblock(win);
++#endif
++
+     /*
+      * Close the link to the buffer.
+      */
+-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
++    if (win->w_buffer != NULL)
++    {
++#ifdef FEAT_AUTOCMD
++	win->w_closing = TRUE;
++#endif
++	close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, TRUE);
++#ifdef FEAT_AUTOCMD
++	if (win_valid(win))
++	    win->w_closing = FALSE;
++#endif
++    }
++
++    if (only_one_window() && win_valid(win) && win->w_buffer == NULL
++	    && (last_window() || curtab != prev_curtab
++		|| close_last_window_tabpage(win, free_buf, prev_curtab)))
++	/* Autocommands have close all windows, quit now. */
++	getout(0);
+ 
+     /* Autocommands may have closed the window already, or closed the only
+      * other window or moved to another tab page. */
+-    if (!win_valid(win) || last_window() || curtab != prev_curtab)
++    else if (!win_valid(win) || last_window() || curtab != prev_curtab
++	    || close_last_window_tabpage(win, free_buf, prev_curtab))
+ 	return;
+ 
+-    /* Free the memory used for the window. */
++    /* Free the memory used for the window and get the window that received
++     * the screen space. */
+     wp = win_free_mem(win, &dir, NULL);
+ 
+     /* Make sure curwin isn't invalid.  It can cause severe trouble when
+@@ -2267,7 +2347,7 @@
+ 	win_comp_pos();
+     if (close_curwin)
+     {
+-	win_enter_ext(wp, FALSE, TRUE);
++	win_enter_ext(wp, FALSE, TRUE, TRUE, TRUE);
+ #ifdef FEAT_AUTOCMD
+ 	if (other_buffer)
+ 	    /* careful: after this wp and win may be invalid! */
+@@ -2297,7 +2377,7 @@
+ 
+ /*
+  * Close window "win" in tab page "tp", which is not the current tab page.
+- * This may be the last window ih that tab page and result in closing the tab,
++ * This may be the last window in that tab page and result in closing the tab,
+  * thus "tp" may become invalid!
+  * Caller must check if buffer is hidden and whether the tabline needs to be
+  * updated.
+@@ -2313,8 +2393,13 @@
+     tabpage_T   *ptp = NULL;
+     int		free_tp = FALSE;
+ 
++#ifdef FEAT_AUTOCMD
++    if (win->w_closing || win->w_buffer->b_closing)
++	return; /* window is already being closed */
++#endif
++
+     /* Close the link to the buffer. */
+-    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0);
++    close_buffer(win, win->w_buffer, free_buf ? DOBUF_UNLOAD : 0, FALSE);
+ 
+     /* Careful: Autocommands may have closed the tab page or made it the
+      * current tab page.  */
+@@ -3241,6 +3326,9 @@
+     else
+ 	wp->w_farsi = W_CONV;
+ #endif
++#ifdef FEAT_SYN_HL
++    wp->w_s = &wp->w_buffer->b_s;
++#endif
+ }
+ 
+ /*
+@@ -3277,9 +3365,7 @@
+     if (aucmd_win != NULL)
+     {
+ 	win_init_some(aucmd_win, curwin);
+-# ifdef FEAT_SCROLLBIND
+-	aucmd_win->w_p_scb = FALSE;
+-# endif
++	RESET_BINDING(aucmd_win);
+ 	new_frame(aucmd_win);
+     }
+ }
+@@ -3320,10 +3406,8 @@
+ 	/* First window in new tab page, initialize it from "oldwin". */
+ 	win_init(curwin, oldwin, 0);
+ 
+-# ifdef FEAT_SCROLLBIND
+-	/* We don't want scroll-binding in the first window. */
+-	curwin->w_p_scb = FALSE;
+-# endif
++	/* We don't want cursor- and scroll-binding in the first window. */
++	RESET_BINDING(curwin);
+     }
+ #endif
+ 
+@@ -3380,25 +3464,35 @@
+ alloc_tabpage()
+ {
+     tabpage_T	*tp;
++# ifdef FEAT_GUI
++    int		i;
++# endif
++
+ 
+     tp = (tabpage_T *)alloc_clear((unsigned)sizeof(tabpage_T));
+-    if (tp != NULL)
++    if (tp == NULL)
++	return NULL;
++
++# ifdef FEAT_EVAL
++    /* init t: variables */
++    tp->tp_vars = dict_alloc();
++    if (tp->tp_vars == NULL)
+     {
+-# ifdef FEAT_GUI
+-	int	i;
++	vim_free(tp);
++	return NULL;
++    }
++    init_var_dict(tp->tp_vars, &tp->tp_winvar, VAR_SCOPE);
++# endif
+ 
+-	for (i = 0; i < 3; i++)
+-	    tp->tp_prev_which_scrollbars[i] = -1;
++# ifdef FEAT_GUI
++    for (i = 0; i < 3; i++)
++	tp->tp_prev_which_scrollbars[i] = -1;
+ # endif
+ # ifdef FEAT_DIFF
+-	tp->tp_diff_invalid = TRUE;
++    tp->tp_diff_invalid = TRUE;
+ # endif
+-#ifdef FEAT_EVAL
+-	/* init t: variables */
+-	init_var_dict(&tp->tp_vars, &tp->tp_winvar);
+-#endif
+-	tp->tp_ch_used = p_ch;
+-    }
++    tp->tp_ch_used = p_ch;
++
+     return tp;
+ }
+ 
+@@ -3414,8 +3508,19 @@
+     for (idx = 0; idx < SNAP_COUNT; ++idx)
+ 	clear_snapshot(tp, idx);
+ #ifdef FEAT_EVAL
+-    vars_clear(&tp->tp_vars.dv_hashtab);	/* free all t: variables */
++    vars_clear(&tp->tp_vars->dv_hashtab);	/* free all t: variables */
++    hash_init(&tp->tp_vars->dv_hashtab);
++    unref_var_dict(tp->tp_vars);
+ #endif
++
++#ifdef FEAT_PYTHON
++    python_tabpage_free(tp);
++#endif
++
++#ifdef FEAT_PYTHON3
++    python3_tabpage_free(tp);
++#endif
++
+     vim_free(tp);
+ }
+ 
+@@ -3439,7 +3544,7 @@
+ 	return FAIL;
+ 
+     /* Remember the current windows in this Tab page. */
+-    if (leave_tabpage(curbuf) == FAIL)
++    if (leave_tabpage(curbuf, TRUE) == FAIL)
+     {
+ 	vim_free(newtp);
+ 	return FAIL;
+@@ -3484,14 +3589,14 @@
+ 
+ 	redraw_all_later(CLEAR);
+ #ifdef FEAT_AUTOCMD
+-	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+ 	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
++	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+ #endif
+ 	return OK;
+     }
+ 
+     /* Failed, get back the previous Tab page */
+-    enter_tabpage(curtab, curbuf);
++    enter_tabpage(curtab, curbuf, TRUE, TRUE);
+     return FAIL;
+ }
+ 
+@@ -3597,14 +3702,15 @@
+ 
+ /*
+  * Prepare for leaving the current tab page.
+- * When autocomands change "curtab" we don't leave the tab page and return
++ * When autocommands change "curtab" we don't leave the tab page and return
+  * FAIL.
+  * Careful: When OK is returned need to get a new tab page very very soon!
+  */
+     static int
+-leave_tabpage(new_curbuf)
++leave_tabpage(new_curbuf, trigger_leave_autocmds)
+     buf_T	*new_curbuf UNUSED;    /* what is going to be the new curbuf,
+ 				       NULL if unknown */
++    int		trigger_leave_autocmds UNUSED;
+ {
+     tabpage_T	*tp = curtab;
+ 
+@@ -3612,18 +3718,21 @@
+     reset_VIsual_and_resel();	/* stop Visual mode */
+ #endif
+ #ifdef FEAT_AUTOCMD
+-    if (new_curbuf != curbuf)
++    if (trigger_leave_autocmds)
+     {
+-	apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
++	if (new_curbuf != curbuf)
++	{
++	    apply_autocmds(EVENT_BUFLEAVE, NULL, NULL, FALSE, curbuf);
++	    if (curtab != tp)
++		return FAIL;
++	}
++	apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
++	if (curtab != tp)
++	    return FAIL;
++	apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
+ 	if (curtab != tp)
+ 	    return FAIL;
+     }
+-    apply_autocmds(EVENT_WINLEAVE, NULL, NULL, FALSE, curbuf);
+-    if (curtab != tp)
+-	return FAIL;
+-    apply_autocmds(EVENT_TABLEAVE, NULL, NULL, FALSE, curbuf);
+-    if (curtab != tp)
+-	return FAIL;
+ #endif
+ #if defined(FEAT_GUI)
+     /* Remove the scrollbars.  They may be added back later. */
+@@ -3644,11 +3753,15 @@
+ /*
+  * Start using tab page "tp".
+  * Only to be used after leave_tabpage() or freeing the current tab page.
++ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
++ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
+  */
+     static void
+-enter_tabpage(tp, old_curbuf)
++enter_tabpage(tp, old_curbuf, trigger_enter_autocmds, trigger_leave_autocmds)
+     tabpage_T	*tp;
+     buf_T	*old_curbuf UNUSED;
++    int		trigger_enter_autocmds UNUSED;
++    int		trigger_leave_autocmds UNUSED;
+ {
+     int		old_off = tp->tp_firstwin->w_winrow;
+     win_T	*next_prevwin = tp->tp_prevwin;
+@@ -3661,16 +3774,9 @@
+     /* We would like doing the TabEnter event first, but we don't have a
+      * valid current window yet, which may break some commands.
+      * This triggers autocommands, thus may make "tp" invalid. */
+-    win_enter_ext(tp->tp_curwin, FALSE, TRUE);
++    win_enter_ext(tp->tp_curwin, FALSE, TRUE, trigger_enter_autocmds, trigger_leave_autocmds);
+     prevwin = next_prevwin;
+ 
+-#ifdef FEAT_AUTOCMD
+-    apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
+-
+-    if (old_curbuf != curbuf)
+-	apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
+-#endif
+-
+     last_status(FALSE);		/* status line may appear or disappear */
+     (void)win_comp_pos();	/* recompute w_winrow for all windows */
+     must_redraw = CLEAR;	/* need to redraw everything */
+@@ -3700,6 +3806,17 @@
+     gui_may_update_scrollbars();
+ #endif
+ 
++#ifdef FEAT_AUTOCMD
++    /* Apply autocommands after updating the display, when 'rows' and
++     * 'columns' have been set correctly. */
++    if (trigger_enter_autocmds)
++    {
++	apply_autocmds(EVENT_TABENTER, NULL, NULL, FALSE, curbuf);
++	if (old_curbuf != curbuf)
++	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
++    }
++#endif
++
+     redraw_all_later(CLEAR);
+ }
+ 
+@@ -3773,7 +3890,7 @@
+ 	}
+     }
+ 
+-    goto_tabpage_tp(tp);
++    goto_tabpage_tp(tp, TRUE, TRUE);
+ 
+ #ifdef FEAT_GUI_TABLINE
+     if (gui_use_tabline())
+@@ -3783,21 +3900,28 @@
+ 
+ /*
+  * Go to tabpage "tp".
++ * Only trigger *Enter autocommands when trigger_enter_autocmds is TRUE.
++ * Only trigger *Leave autocommands when trigger_leave_autocmds is TRUE.
+  * Note: doesn't update the GUI tab.
+  */
+     void
+-goto_tabpage_tp(tp)
++goto_tabpage_tp(tp, trigger_enter_autocmds, trigger_leave_autocmds)
+     tabpage_T	*tp;
++    int		trigger_enter_autocmds;
++    int		trigger_leave_autocmds;
+ {
+     /* Don't repeat a message in another tab page. */
+     set_keep_msg(NULL, 0);
+ 
+-    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer) == OK)
++    if (tp != curtab && leave_tabpage(tp->tp_curwin->w_buffer,
++					trigger_leave_autocmds) == OK)
+     {
+ 	if (valid_tabpage(tp))
+-	    enter_tabpage(tp, curbuf);
++	    enter_tabpage(tp, curbuf, trigger_enter_autocmds,
++		    trigger_leave_autocmds);
+ 	else
+-	    enter_tabpage(curtab, curbuf);
++	    enter_tabpage(curtab, curbuf, trigger_enter_autocmds,
++		    trigger_leave_autocmds);
+     }
+ }
+ 
+@@ -3810,7 +3934,7 @@
+     tabpage_T	*tp;
+     win_T	*wp;
+ {
+-    goto_tabpage_tp(tp);
++    goto_tabpage_tp(tp, TRUE, TRUE);
+     if (curtab == tp && win_valid(wp))
+     {
+ 	win_enter(wp, TRUE);
+@@ -3848,7 +3972,7 @@
+     }
+ 
+     /* Re-insert it at the specified position. */
+-    if (n == 0)
++    if (n <= 0)
+     {
+ 	curtab->tp_next = first_tabpage;
+ 	first_tabpage = curtab;
+@@ -3906,9 +4030,10 @@
+ 
+ #ifdef FEAT_CONCEAL
+     /* Conceal cursor line in previous window, unconceal in current window. */
+-    if (win_valid(owp))
++    if (win_valid(owp) && owp->w_p_cole > 0 && !msg_scrolled)
+ 	update_single_line(owp, owp->w_cursor.lnum);
+-    update_single_line(curwin, curwin->w_cursor.lnum);
++    if (curwin->w_p_cole > 0 && !msg_scrolled)
++	need_cursor_line_redraw = TRUE;
+ #endif
+ }
+ 
+@@ -3933,6 +4058,26 @@
+ }
+ #endif
+ 
++#if (defined(FEAT_WINDOWS) && (defined(FEAT_PYTHON) || defined(FEAT_PYTHON3))) \
++	|| defined(PROTO)
++/*
++ * Find the tabpage for window "win".
++ */
++    tabpage_T *
++win_find_tabpage(win)
++    win_T	*win;
++{
++    win_T	*wp;
++    tabpage_T	*tp;
++
++    for (tp = first_tabpage; tp != NULL; tp = tp->tp_next)
++	for (wp = tp->tp_firstwin; wp != NULL; wp = wp->w_next)
++	    if (wp == win)
++		return tp;
++    return NULL;
++}
++#endif
++
+ #ifdef FEAT_VERTSPLIT
+ /*
+  * Move to window above or below "count" times.
+@@ -4069,7 +4214,7 @@
+     win_T	*wp;
+     int		undo_sync;
+ {
+-    win_enter_ext(wp, undo_sync, FALSE);
++    win_enter_ext(wp, undo_sync, FALSE, TRUE, TRUE);
+ }
+ 
+ /*
+@@ -4078,10 +4223,12 @@
+  * been closed and isn't valid.
+  */
+     static void
+-win_enter_ext(wp, undo_sync, curwin_invalid)
++win_enter_ext(wp, undo_sync, curwin_invalid, trigger_enter_autocmds, trigger_leave_autocmds)
+     win_T	*wp;
+     int		undo_sync;
+     int		curwin_invalid;
++    int		trigger_enter_autocmds UNUSED;
++    int		trigger_leave_autocmds UNUSED;
+ {
+ #ifdef FEAT_AUTOCMD
+     int		other_buffer = FALSE;
+@@ -4091,7 +4238,7 @@
+ 	return;
+ 
+ #ifdef FEAT_AUTOCMD
+-    if (!curwin_invalid)
++    if (!curwin_invalid && trigger_leave_autocmds)
+     {
+ 	/*
+ 	 * Be careful: If autocommands delete the window, return now.
+@@ -4160,9 +4307,12 @@
+     }
+ 
+ #ifdef FEAT_AUTOCMD
+-    apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
+-    if (other_buffer)
+-	apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
++    if (trigger_enter_autocmds)
++    {
++	apply_autocmds(EVENT_WINENTER, NULL, NULL, FALSE, curbuf);
++	if (other_buffer)
++	    apply_autocmds(EVENT_BUFENTER, NULL, NULL, FALSE, curbuf);
++    }
+ #endif
+ 
+ #ifdef FEAT_TITLE
+@@ -4271,78 +4421,86 @@
+     win_T	*after UNUSED;
+     int		hidden UNUSED;
+ {
+-    win_T	*newwin;
++    win_T	*new_wp;
+ 
+     /*
+      * allocate window structure and linesizes arrays
+      */
+-    newwin = (win_T *)alloc_clear((unsigned)sizeof(win_T));
+-    if (newwin != NULL && win_alloc_lines(newwin) == FAIL)
++    new_wp = (win_T *)alloc_clear((unsigned)sizeof(win_T));
++    if (new_wp == NULL)
++	return NULL;
++
++    if (win_alloc_lines(new_wp) == FAIL)
+     {
+-	vim_free(newwin);
+-	newwin = NULL;
++	vim_free(new_wp);
++	return NULL;
+     }
+ 
+-    if (newwin != NULL)
++#ifdef FEAT_EVAL
++    /* init w: variables */
++    new_wp->w_vars = dict_alloc();
++    if (new_wp->w_vars == NULL)
+     {
++	win_free_lsize(new_wp);
++	vim_free(new_wp);
++	return NULL;
++    }
++    init_var_dict(new_wp->w_vars, &new_wp->w_winvar, VAR_SCOPE);
++#endif
++
+ #ifdef FEAT_AUTOCMD
+-	/* Don't execute autocommands while the window is not properly
+-	 * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
+-	 * event. */
+-	block_autocmds();
++    /* Don't execute autocommands while the window is not properly
++     * initialized yet.  gui_create_scrollbar() may trigger a FocusGained
++     * event. */
++    block_autocmds();
+ #endif
+-	/*
+-	 * link the window in the window list
+-	 */
++    /*
++     * link the window in the window list
++     */
+ #ifdef FEAT_WINDOWS
+-	if (!hidden)
+-	    win_append(after, newwin);
++    if (!hidden)
++	win_append(after, new_wp);
+ #endif
+ #ifdef FEAT_VERTSPLIT
+-	newwin->w_wincol = 0;
+-	newwin->w_width = Columns;
++    new_wp->w_wincol = 0;
++    new_wp->w_width = Columns;
+ #endif
+ 
+-	/* position the display and the cursor at the top of the file. */
+-	newwin->w_topline = 1;
++    /* position the display and the cursor at the top of the file. */
++    new_wp->w_topline = 1;
+ #ifdef FEAT_DIFF
+-	newwin->w_topfill = 0;
++    new_wp->w_topfill = 0;
+ #endif
+-	newwin->w_botline = 2;
+-	newwin->w_cursor.lnum = 1;
++    new_wp->w_botline = 2;
++    new_wp->w_cursor.lnum = 1;
+ #ifdef FEAT_SCROLLBIND
+-	newwin->w_scbind_pos = 1;
++    new_wp->w_scbind_pos = 1;
+ #endif
+ 
+-	/* We won't calculate w_fraction until resizing the window */
+-	newwin->w_fraction = 0;
+-	newwin->w_prev_fraction_row = -1;
++    /* We won't calculate w_fraction until resizing the window */
++    new_wp->w_fraction = 0;
++    new_wp->w_prev_fraction_row = -1;
+ 
+ #ifdef FEAT_GUI
+-	if (gui.in_use)
+-	{
+-	    gui_create_scrollbar(&newwin->w_scrollbars[SBAR_LEFT],
+-		    SBAR_LEFT, newwin);
+-	    gui_create_scrollbar(&newwin->w_scrollbars[SBAR_RIGHT],
+-		    SBAR_RIGHT, newwin);
+-	}
+-#endif
+-#ifdef FEAT_EVAL
+-	/* init w: variables */
+-	init_var_dict(&newwin->w_vars, &newwin->w_winvar);
++    if (gui.in_use)
++    {
++	gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_LEFT],
++		SBAR_LEFT, new_wp);
++	gui_create_scrollbar(&new_wp->w_scrollbars[SBAR_RIGHT],
++		SBAR_RIGHT, new_wp);
++    }
+ #endif
+ #ifdef FEAT_FOLDING
+-	foldInitWin(newwin);
++    foldInitWin(new_wp);
+ #endif
+ #ifdef FEAT_AUTOCMD
+-	unblock_autocmds();
++    unblock_autocmds();
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+-	newwin->w_match_head = NULL;
+-	newwin->w_next_match_id = 4;
++    new_wp->w_match_head = NULL;
++    new_wp->w_next_match_id = 4;
+ #endif
+-    }
+-    return newwin;
++    return new_wp;
+ }
+ 
+ #if defined(FEAT_WINDOWS) || defined(PROTO)
+@@ -4402,7 +4560,9 @@
+     clear_winopt(&wp->w_allbuf_opt);
+ 
+ #ifdef FEAT_EVAL
+-    vars_clear(&wp->w_vars.dv_hashtab);	    /* free all w: variables */
++    vars_clear(&wp->w_vars->dv_hashtab);	/* free all w: variables */
++    hash_init(&wp->w_vars->dv_hashtab);
++    unref_var_dict(wp->w_vars);
+ #endif
+ 
+     if (prevwin == wp)
+@@ -4435,7 +4595,6 @@
+ #endif /* FEAT_GUI */
+ 
+ #ifdef FEAT_SYN_HL
+-    reset_synblock(wp);  /* free independent synblock */
+     vim_free(wp->w_p_cc_cols);
+ #endif
+ 
+@@ -5459,19 +5618,31 @@
+ 
+ #endif /* FEAT_WINDOWS */
+ 
++#define FRACTION_MULT	16384L
++
++/*
++ * Set wp->w_fraction for the current w_wrow and w_height.
++ */
++    static void
++set_fraction(wp)
++    win_T	*wp;
++{
++    wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
++				    + FRACTION_MULT / 2) / (long)wp->w_height;
++}
++
+ /*
+  * Set the height of a window.
+  * This takes care of the things inside the window, not what happens to the
+  * window position, the frame or to other windows.
+  */
+-    static void
++    void
+ win_new_height(wp, height)
+     win_T	*wp;
+     int		height;
+ {
+     linenr_T	lnum;
+     int		sline, line_size;
+-#define FRACTION_MULT	16384L
+ 
+     /* Don't want a negative height.  Happens when splitting a tiny window.
+      * Will equalize heights soon to fix it. */
+@@ -5481,8 +5652,7 @@
+ 	return;	    /* nothing to do */
+ 
+     if (wp->w_wrow != wp->w_prev_fraction_row && wp->w_height > 0)
+-	wp->w_fraction = ((long)wp->w_wrow * FRACTION_MULT
+-				    + FRACTION_MULT / 2) / (long)wp->w_height;
++	set_fraction(wp);
+ 
+     wp->w_height = height;
+     wp->w_skipcol = 0;
+@@ -5606,7 +5776,7 @@
+ /*
+  * Set the width of a window.
+  */
+-    static void
++    void
+ win_new_width(wp, width)
+     win_T	*wp;
+     int		width;
+@@ -6193,7 +6363,8 @@
+ 	return FALSE;
+ 
+     for (wp = firstwin; wp != NULL; wp = wp->w_next)
+-	if ((!((wp->w_buffer->b_help && !curbuf->b_help)
++	if (wp->w_buffer != NULL
++		&& (!((wp->w_buffer->b_help && !curbuf->b_help)
+ # ifdef FEAT_QUICKFIX
+ 		    || wp->w_p_pvw
+ # endif
+@@ -6399,6 +6570,105 @@
+ 
+ #endif
+ 
++#if defined(FEAT_EVAL) || defined(PROTO)
++/*
++ * Set "win" to be the curwin and "tp" to be the current tab page.
++ * restore_win() MUST be called to undo.
++ * No autocommands will be executed.
++ * Returns FAIL if switching to "win" failed.
++ */
++    int
++switch_win(save_curwin, save_curtab, win, tp)
++    win_T	**save_curwin;
++    tabpage_T	**save_curtab;
++    win_T	*win;
++    tabpage_T	*tp;
++{
++# ifdef FEAT_AUTOCMD
++    block_autocmds();
++# endif
++# ifdef FEAT_WINDOWS
++    *save_curwin = curwin;
++    if (tp != NULL)
++    {
++	*save_curtab = curtab;
++	goto_tabpage_tp(tp, FALSE, FALSE);
++    }
++    if (!win_valid(win))
++    {
++# ifdef FEAT_AUTOCMD
++	unblock_autocmds();
++# endif
++	return FAIL;
++    }
++    curwin = win;
++    curbuf = curwin->w_buffer;
++# endif
++    return OK;
++}
++
++/*
++ * Restore current tabpage and window saved by switch_win(), if still valid.
++ */
++    void
++restore_win(save_curwin, save_curtab)
++    win_T	*save_curwin;
++    tabpage_T	*save_curtab;
++{
++# ifdef FEAT_WINDOWS
++    if (save_curtab != NULL && valid_tabpage(save_curtab))
++	goto_tabpage_tp(save_curtab, FALSE, FALSE);
++    if (win_valid(save_curwin))
++    {
++	curwin = save_curwin;
++	curbuf = curwin->w_buffer;
++    }
++# endif
++# ifdef FEAT_AUTOCMD
++    unblock_autocmds();
++# endif
++}
++
++/*
++ * Make "buf" the current buffer.  restore_buffer() MUST be called to undo.
++ * No autocommands will be executed.  Use aucmd_prepbuf() if there are any.
++ */
++    void
++switch_buffer(save_curbuf, buf)
++    buf_T *buf;
++    buf_T **save_curbuf;
++{
++# ifdef FEAT_AUTOCMD
++    block_autocmds();
++# endif
++    *save_curbuf = curbuf;
++    --curbuf->b_nwindows;
++    curbuf = buf;
++    curwin->w_buffer = buf;
++    ++curbuf->b_nwindows;
++}
++
++/*
++ * Restore the current buffer after using switch_buffer().
++ */
++    void
++restore_buffer(save_curbuf)
++    buf_T *save_curbuf;
++{
++# ifdef FEAT_AUTOCMD
++    unblock_autocmds();
++# endif
++    /* Check for valid buffer, just in case. */
++    if (buf_valid(save_curbuf))
++    {
++	--curbuf->b_nwindows;
++	curwin->w_buffer = save_curbuf;
++	curbuf = save_curbuf;
++	++curbuf->b_nwindows;
++    }
++}
++#endif
++
+ #if (defined(FEAT_GUI) && defined(FEAT_VERTSPLIT)) || defined(PROTO)
+ /*
+  * Return TRUE if there is any vertically split window.
+@@ -6591,3 +6861,35 @@
+     return cur;
+ }
+ #endif
++
++#if defined(FEAT_PYTHON) || defined(FEAT_PYTHON3) || defined(PROTO)
++    int
++get_win_number(win_T *wp, win_T *first_win)
++{
++    int		i = 1;
++    win_T	*w;
++
++    for (w = first_win; w != NULL && w != wp; w = W_NEXT(w))
++	++i;
++
++    if (w == NULL)
++	return 0;
++    else
++	return i;
++}
++
++    int
++get_tab_number(tabpage_T *tp)
++{
++    int		i = 1;
++    tabpage_T	*t;
++
++    for (t = first_tabpage; t != NULL && t != tp; t = t->tp_next)
++	++i;
++
++    if (t == NULL)
++	return 0;
++    else
++	return i;
++}
++#endif
+diff -Naur vim73.orig/src/workshop.c vim73/src/workshop.c
+--- vim73.orig/src/workshop.c	2010-08-08 13:18:24.000000000 +0000
++++ vim73/src/workshop.c	2013-06-07 17:07:38.968897394 +0000
+@@ -16,7 +16,6 @@
+ #include <sys/types.h>
+ #include <netdb.h>
+ #include <netinet/in.h>
+-#include <errno.h>
+ #include <sys/socket.h>
+ #ifdef HAVE_LIBGEN_H
+ # include <libgen.h>
+diff -Naur vim73.orig/src/xpm/COPYRIGHT vim73/src/xpm/COPYRIGHT
+--- vim73.orig/src/xpm/COPYRIGHT	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/COPYRIGHT	2013-06-07 17:07:39.042230518 +0000
+@@ -0,0 +1,31 @@
++/*
++ * Copyright (C) 1989-95 GROUPE BULL
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of GROUPE BULL shall not be
++ * used in advertising or otherwise to promote the sale, use or other dealings
++ * in this Software without prior written authorization from GROUPE BULL.
++ */
++
++Arnaud LE HORS      BULL Research FRANCE -- Koala Project 
++                    (XPM - X PixMap format version 2 & 3)
++    Internet:       lehors@sophia.inria.fr
++Surface Mail:       Arnaud LE HORS, INRIA - Sophia Antipolis, 
++                    2004, route des Lucioles, 06565 Valbonne Cedex -- FRANCE
++ Voice phone:       (33) 93.65.77.71, Fax: (33) 93 65 77 66, Telex: 97 00 50 F
+diff -Naur vim73.orig/src/xpm/README.txt vim73/src/xpm/README.txt
+--- vim73.orig/src/xpm/README.txt	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/README.txt	2013-06-07 17:07:39.052230489 +0000
+@@ -0,0 +1,26 @@
++This is XPM library compiled for Windows which is intended for use with Vim
++'signs' feature.
++
++Libraries in x86 directory were compiled with MSVC6 and MinGW. Proposed
++commands to compile Vim are:
++
++Any version of MSVC starting from version 6.0:
++nmake -f Make_mvc.mak GUI=yes CSCOPE=yes NETBEANS=yes XPM=e:\hg\xpm\x86
++
++MinGW:
++mingw32-make -f Make_ming.mak GUI=yes CSCOPE=yes XPM=e:/hg/xpm/x86
++
++MinGW 64 for x64:
++mingw32-make -f Make_ming.mak GUI=yes ARCH=x86-64 XPM=E:\HG\xpm\x64
++
++Microsoft Visual C++ on x64 (tested with versions 2008 and 2010):
++nmake -f Make_mvc.mak GUI=yes CSCOPE=yes XPM=E:\HG\xpm\x64
++
++To test, open some file in Vim and execute commands below:
++:exe 'sign define vimxpm icon='.$VIMRUNTIME.'\\vim32x32.xpm'
++:exe 'sign place 1 line=1 name=vimxpm file='.expand('%:p')
++
++
++See COPYRIGHT for XPM licence.
++
++If you have questions please email sergey.khorev@gmail.com.
+diff -Naur vim73.orig/src/xpm/include/simx.h vim73/src/xpm/include/simx.h
+--- vim73.orig/src/xpm/include/simx.h	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/include/simx.h	2013-06-07 17:07:39.072230432 +0000
+@@ -0,0 +1,139 @@
++/*
++ * Copyright (C) 1989-95 GROUPE BULL
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of GROUPE BULL shall not be
++ * used in advertising or otherwise to promote the sale, use or other dealings
++ * in this Software without prior written authorization from GROUPE BULL.
++ */
++
++/*****************************************************************************\
++* simx.h: 0.1a                                                                *
++*                                                                             *
++* This emulates some Xlib functionality for MSW. It's not a general solution, *
++* it is close related to XPM-lib. It is only intended to satisfy what is need *
++* there. Thus allowing to read XPM files under MS windows.                    *
++*                                                                             *
++* Developed by HeDu 3/94 (hedu@cul-ipn.uni-kiel.de)                           *
++\*****************************************************************************/
++
++
++#ifndef _SIMX_H
++#define _SIMX_H
++
++#ifdef FOR_MSW
++
++#include "windows.h"			/* MS windows GDI types */
++
++/*
++ * minimal portability layer between ansi and KR C
++ */
++/* this comes from xpm.h, and is here again, to avoid complicated
++    includes, since this is included from xpm.h */
++/* these defines get undefed at the end of this file */
++#if __STDC__ || defined(__cplusplus) || defined(c_plusplus)
++ /* ANSI || C++ */
++#define FUNC(f, t, p) extern t f p
++#define LFUNC(f, t, p) static t f p
++#else /* k&R */
++#define FUNC(f, t, p) extern t f()
++#define LFUNC(f, t, p) static t f()
++#endif
++
++
++FUNC(boundCheckingMalloc, void *, (long s));
++FUNC(boundCheckingCalloc, void *, (long num, long s));
++FUNC(boundCheckingRealloc, void *, (void *p, long s));
++
++/* define MSW types for X window types,
++   I don't know much about MSW, but the following defines do the job */
++
++typedef HDC Display;			/* this should be similar */
++typedef void *Screen;			/* not used */
++typedef void *Visual;			/* not used yet, is for GRAY, COLOR,
++					 * MONO */
++
++typedef void *Colormap;			/* should be COLORPALETTE, not done
++					 * yet */
++
++typedef COLORREF Pixel;
++
++#define PIXEL_ALREADY_TYPEDEFED		/* to let xpm.h know about it */
++
++typedef struct {
++    Pixel pixel;
++    BYTE red, green, blue;
++}      XColor;
++
++typedef struct {
++    HBITMAP bitmap;
++    unsigned int width;
++    unsigned int height;
++    unsigned int depth;
++}      XImage;
++
++#if defined(__cplusplus) || defined(c_plusplus)
++extern "C" {
++#endif
++/* some replacements for X... functions */
++
++/* XDefaultXXX */
++    FUNC(XDefaultVisual, Visual *, (Display *display, Screen *screen));
++    FUNC(XDefaultScreen, Screen *, (Display *d));
++    FUNC(XDefaultColormap, Colormap *, (Display *display, Screen *screen));
++    FUNC(XDefaultDepth, int, (Display *d, Screen *s));
++
++/* color related */
++    FUNC(XParseColor, int, (Display *, Colormap *, char *, XColor *));
++    FUNC(XAllocColor, int, (Display *, Colormap *, XColor *));
++    FUNC(XQueryColors, void, (Display *display, Colormap *colormap,
++			      XColor *xcolors, int ncolors));
++    FUNC(XFreeColors, int, (Display *d, Colormap cmap,
++			    unsigned long pixels[],
++			    int npixels, unsigned long planes));
++/* XImage */
++    FUNC(XCreateImage, XImage *, (Display *, Visual *, int depth, int format,
++				  int x, int y, int width, int height,
++				  int pad, int foo));
++
++/* free and destroy bitmap */
++    FUNC(XDestroyImage, void /* ? */ , (XImage *));
++/* free only, bitmap remains */
++    FUNC(XImageFree, void, (XImage *));
++#if defined(__cplusplus) || defined(c_plusplus)
++} /* end of extern "C" */
++#endif /* cplusplus */
++
++#define ZPixmap 1			/* not really used */
++#define XYBitmap 1			/* not really used */
++
++#ifndef True
++#define True 1
++#define False 0
++#endif
++#ifndef Bool
++typedef BOOL Bool;		/* take MSW bool */
++#endif
++/* make these local here, simx.c gets the same from xpm.h */
++#undef LFUNC
++#undef FUNC
++
++#endif /* def FOR_MSW */
++
++#endif /* _SIMX_H */
+diff -Naur vim73.orig/src/xpm/include/xpm.h vim73/src/xpm/include/xpm.h
+--- vim73.orig/src/xpm/include/xpm.h	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/include/xpm.h	2013-06-07 17:07:39.082230403 +0000
+@@ -0,0 +1,501 @@
++/*
++ * Copyright (C) 1989-95 GROUPE BULL
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a copy
++ * of this software and associated documentation files (the "Software"), to
++ * deal in the Software without restriction, including without limitation the
++ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++ * sell copies of the Software, and to permit persons to whom the Software is
++ * furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * GROUPE BULL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++ * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
++ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Except as contained in this notice, the name of GROUPE BULL shall not be
++ * used in advertising or otherwise to promote the sale, use or other dealings
++ * in this Software without prior written authorization from GROUPE BULL.
++ */
++
++/*****************************************************************************\
++* xpm.h:                                                                      *
++*                                                                             *
++*  XPM library                                                                *
++*  Include file                                                               *
++*                                                                             *
++*  Developed by Arnaud Le Hors                                                *
++\*****************************************************************************/
++
++/*
++ * The code related to FOR_MSW has been added by
++ * HeDu (hedu@cul-ipn.uni-kiel.de) 4/94
++ */
++
++/*
++ * The code related to AMIGA has been added by
++ * Lorens Younes (d93-hyo@nada.kth.se) 4/96
++ */
++
++#ifndef XPM_h
++#define XPM_h
++
++/*
++ * first some identification numbers:
++ * the version and revision numbers are determined with the following rule:
++ * SO Major number = LIB minor version number.
++ * SO Minor number = LIB sub-minor version number.
++ * e.g: Xpm version 3.2f
++ *      we forget the 3 which is the format number, 2 gives 2, and f gives 6.
++ *      thus we have XpmVersion = 2 and XpmRevision = 6
++ *      which gives  SOXPMLIBREV = 2.6
++ *
++ * Then the XpmIncludeVersion number is built from these numbers.
++ */
++#define XpmFormat 3
++#define XpmVersion 4
++#define XpmRevision 11
++#define XpmIncludeVersion ((XpmFormat * 100 + XpmVersion) * 100 + XpmRevision)
++
++#ifndef XPM_NUMBERS
++
++#ifdef FOR_MSW
++# define SYSV			/* uses memcpy string.h etc. */
++# include <malloc.h>
++# include "simx.h"		/* defines some X stuff using MSW types */
++#define NEED_STRCASECMP		/* at least for MSVC++ */
++#else /* FOR_MSW */
++# ifdef AMIGA
++#  include "amigax.h"
++# else /* not AMIGA */
++#  include <X11/Xlib.h>
++#  include <X11/Xutil.h>
++# endif /* not AMIGA */
++#endif /* FOR_MSW */
++
++/* let's define Pixel if it is not done yet */
++#if ! defined(_XtIntrinsic_h) && ! defined(PIXEL_ALREADY_TYPEDEFED)
++typedef unsigned long Pixel;	/* Index into colormap */
++# define PIXEL_ALREADY_TYPEDEFED
++#endif
++
++/* make sure we know whether function prototypes are needed or not */
++#ifndef NeedFunctionPrototypes
++# if defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
++#  define NeedFunctionPrototypes 1
++# else
++#  define NeedFunctionPrototypes 0
++# endif
++#endif
++
++
++/* Return ErrorStatus codes:
++ * null     if full success
++ * positive if partial success
++ * negative if failure
++ */
++
++#define XpmColorError    1
++#define XpmSuccess       0
++#define XpmOpenFailed   -1
++#define XpmFileInvalid  -2
++#define XpmNoMemory     -3
++#define XpmColorFailed  -4
++
++typedef struct {
++    char *name;			/* Symbolic color name */
++    char *value;		/* Color value */
++    Pixel pixel;		/* Color pixel */
++}      XpmColorSymbol;
++
++typedef struct {
++    char *name;			/* name of the extension */
++    unsigned int nlines;	/* number of lines in this extension */
++    char **lines;		/* pointer to the extension array of strings */
++}      XpmExtension;
++
++typedef struct {
++    char *string;		/* characters string */
++    char *symbolic;		/* symbolic name */
++    char *m_color;		/* monochrom default */
++    char *g4_color;		/* 4 level grayscale default */
++    char *g_color;		/* other level grayscale default */
++    char *c_color;		/* color default */
++}      XpmColor;
++
++typedef struct {
++    unsigned int width;		/* image width */
++    unsigned int height;	/* image height */
++    unsigned int cpp;		/* number of characters per pixel */
++    unsigned int ncolors;	/* number of colors */
++    XpmColor *colorTable;	/* list of related colors */
++    unsigned int *data;		/* image data */
++}      XpmImage;
++
++typedef struct {
++    unsigned long valuemask;	/* Specifies which attributes are defined */
++    char *hints_cmt;		/* Comment of the hints section */
++    char *colors_cmt;		/* Comment of the colors section */
++    char *pixels_cmt;		/* Comment of the pixels section */
++    unsigned int x_hotspot;	/* Returns the x hotspot's coordinate */
++    unsigned int y_hotspot;	/* Returns the y hotspot's coordinate */
++    unsigned int nextensions;	/* number of extensions */
++    XpmExtension *extensions;	/* pointer to array of extensions */
++}      XpmInfo;
++
++typedef int (*XpmAllocColorFunc)(
++#if NeedFunctionPrototypes
++    Display*			/* display */,
++    Colormap			/* colormap */,
++    char*			/* colorname */,
++    XColor*			/* xcolor */,
++    void*			/* closure */
++#endif
++);
++
++typedef int (*XpmFreeColorsFunc)(
++#if NeedFunctionPrototypes
++    Display*			/* display */,
++    Colormap			/* colormap */,
++    Pixel*			/* pixels */,
++    int				/* npixels */,
++    void*			/* closure */
++#endif
++);
++
++typedef struct {
++    unsigned long valuemask;		/* Specifies which attributes are
++					   defined */
++
++    Visual *visual;			/* Specifies the visual to use */
++    Colormap colormap;			/* Specifies the colormap to use */
++    unsigned int depth;			/* Specifies the depth */
++    unsigned int width;			/* Returns the width of the created
++					   pixmap */
++    unsigned int height;		/* Returns the height of the created
++					   pixmap */
++    unsigned int x_hotspot;		/* Returns the x hotspot's
++					   coordinate */
++    unsigned int y_hotspot;		/* Returns the y hotspot's
++					   coordinate */
++    unsigned int cpp;			/* Specifies the number of char per
++					   pixel */
++    Pixel *pixels;			/* List of used color pixels */
++    unsigned int npixels;		/* Number of used pixels */
++    XpmColorSymbol *colorsymbols;	/* List of color symbols to override */
++    unsigned int numsymbols;		/* Number of symbols */
++    char *rgb_fname;			/* RGB text file name */
++    unsigned int nextensions;		/* Number of extensions */
++    XpmExtension *extensions;		/* List of extensions */
++
++    unsigned int ncolors;               /* Number of colors */
++    XpmColor *colorTable;               /* List of colors */
++/* 3.2 backward compatibility code */
++    char *hints_cmt;                    /* Comment of the hints section */
++    char *colors_cmt;                   /* Comment of the colors section */
++    char *pixels_cmt;                   /* Comment of the pixels section */
++/* end 3.2 bc */
++    unsigned int mask_pixel;            /* Color table index of transparent
++                                           color */
++
++    /* Color Allocation Directives */
++    Bool exactColors;			/* Only use exact colors for visual */
++    unsigned int closeness;		/* Allowable RGB deviation */
++    unsigned int red_closeness;		/* Allowable red deviation */
++    unsigned int green_closeness;	/* Allowable green deviation */
++    unsigned int blue_closeness;	/* Allowable blue deviation */
++    int color_key;			/* Use colors from this color set */
++
++    Pixel *alloc_pixels;		/* Returns the list of alloc'ed color
++					   pixels */
++    int nalloc_pixels;			/* Returns the number of alloc'ed
++					   color pixels */
++
++    Bool alloc_close_colors;    	/* Specify whether close colors should
++					   be allocated using XAllocColor
++					   or not */
++    int bitmap_format;			/* Specify the format of 1bit depth
++					   images: ZPixmap or XYBitmap */
++
++    /* Color functions */
++    XpmAllocColorFunc alloc_color;	/* Application color allocator */
++    XpmFreeColorsFunc free_colors;	/* Application color de-allocator */
++    void *color_closure;		/* Application private data to pass to
++					   alloc_color and free_colors */
++
++}      XpmAttributes;
++
++/* XpmAttributes value masks bits */
++#define XpmVisual	   (1L<<0)
++#define XpmColormap	   (1L<<1)
++#define XpmDepth	   (1L<<2)
++#define XpmSize		   (1L<<3)	/* width & height */
++#define XpmHotspot	   (1L<<4)	/* x_hotspot & y_hotspot */
++#define XpmCharsPerPixel   (1L<<5)
++#define XpmColorSymbols	   (1L<<6)
++#define XpmRgbFilename	   (1L<<7)
++/* 3.2 backward compatibility code */
++#define XpmInfos	   (1L<<8)
++#define XpmReturnInfos	   XpmInfos
++/* end 3.2 bc */
++#define XpmReturnPixels	   (1L<<9)
++#define XpmExtensions      (1L<<10)
++#define XpmReturnExtensions XpmExtensions
++
++#define XpmExactColors     (1L<<11)
++#define XpmCloseness	   (1L<<12)
++#define XpmRGBCloseness	   (1L<<13)
++#define XpmColorKey	   (1L<<14)
++
++#define XpmColorTable      (1L<<15)
++#define XpmReturnColorTable XpmColorTable
++
++#define XpmReturnAllocPixels (1L<<16)
++#define XpmAllocCloseColors (1L<<17)
++#define XpmBitmapFormat    (1L<<18)
++
++#define XpmAllocColor      (1L<<19)
++#define XpmFreeColors      (1L<<20)
++#define XpmColorClosure    (1L<<21)
++
++
++/* XpmInfo value masks bits */
++#define XpmComments        XpmInfos
++#define XpmReturnComments  XpmComments
++
++/* XpmAttributes mask_pixel value when there is no mask */
++#ifndef FOR_MSW
++#define XpmUndefPixel 0x80000000
++#else
++/* int is only 16 bit for MSW */
++#define XpmUndefPixel 0x8000
++#endif
++
++/*
++ * color keys for visual type, they must fit along with the number key of
++ * each related element in xpmColorKeys[] defined in XpmI.h
++ */
++#define XPM_MONO	2
++#define XPM_GREY4	3
++#define XPM_GRAY4	3
++#define XPM_GREY 	4
++#define XPM_GRAY 	4
++#define XPM_COLOR	5
++
++
++/* macros for forward declarations of functions with prototypes */
++#if NeedFunctionPrototypes
++#define FUNC(f, t, p) extern t f p
++#define LFUNC(f, t, p) static t f p
++#else
++#define FUNC(f, t, p) extern t f()
++#define LFUNC(f, t, p) static t f()
++#endif
++
++
++/*
++ * functions declarations
++ */
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/* FOR_MSW, all ..Pixmap.. are excluded, only the ..XImage.. are used */
++/* Same for Amiga! */
++
++#if !defined(FOR_MSW) && !defined(AMIGA)
++    FUNC(XpmCreatePixmapFromData, int, (Display *display,
++					Drawable d,
++					char **data,
++					Pixmap *pixmap_return,
++					Pixmap *shapemask_return,
++					XpmAttributes *attributes));
++
++    FUNC(XpmCreateDataFromPixmap, int, (Display *display,
++					char ***data_return,
++					Pixmap pixmap,
++					Pixmap shapemask,
++					XpmAttributes *attributes));
++
++    FUNC(XpmReadFileToPixmap, int, (Display *display,
++				    Drawable d,
++				    char *filename,
++				    Pixmap *pixmap_return,
++				    Pixmap *shapemask_return,
++				    XpmAttributes *attributes));
++
++    FUNC(XpmWriteFileFromPixmap, int, (Display *display,
++				       char *filename,
++				       Pixmap pixmap,
++				       Pixmap shapemask,
++				       XpmAttributes *attributes));
++#endif
++
++    FUNC(XpmCreateImageFromData, int, (Display *display,
++				       char **data,
++				       XImage **image_return,
++				       XImage **shapemask_return,
++				       XpmAttributes *attributes));
++
++    FUNC(XpmCreateDataFromImage, int, (Display *display,
++				       char ***data_return,
++				       XImage *image,
++				       XImage *shapeimage,
++				       XpmAttributes *attributes));
++
++    FUNC(XpmReadFileToImage, int, (Display *display,
++				   char *filename,
++				   XImage **image_return,
++				   XImage **shapeimage_return,
++				   XpmAttributes *attributes));
++
++    FUNC(XpmWriteFileFromImage, int, (Display *display,
++				      char *filename,
++				      XImage *image,
++				      XImage *shapeimage,
++				      XpmAttributes *attributes));
++
++    FUNC(XpmCreateImageFromBuffer, int, (Display *display,
++					 char *buffer,
++					 XImage **image_return,
++					 XImage **shapemask_return,
++					 XpmAttributes *attributes));
++#if !defined(FOR_MSW) && !defined(AMIGA)
++    FUNC(XpmCreatePixmapFromBuffer, int, (Display *display,
++					  Drawable d,
++					  char *buffer,
++					  Pixmap *pixmap_return,
++					  Pixmap *shapemask_return,
++					  XpmAttributes *attributes));
++
++    FUNC(XpmCreateBufferFromImage, int, (Display *display,
++					 char **buffer_return,
++					 XImage *image,
++					 XImage *shapeimage,
++					 XpmAttributes *attributes));
++
++    FUNC(XpmCreateBufferFromPixmap, int, (Display *display,
++					  char **buffer_return,
++					  Pixmap pixmap,
++					  Pixmap shapemask,
++					  XpmAttributes *attributes));
++#endif
++    FUNC(XpmReadFileToBuffer, int, (char *filename, char **buffer_return));
++    FUNC(XpmWriteFileFromBuffer, int, (char *filename, char *buffer));
++
++    FUNC(XpmReadFileToData, int, (char *filename, char ***data_return));
++    FUNC(XpmWriteFileFromData, int, (char *filename, char **data));
++
++    FUNC(XpmAttributesSize, int, ());
++    FUNC(XpmFreeAttributes, void, (XpmAttributes *attributes));
++    FUNC(XpmFreeExtensions, void, (XpmExtension *extensions,
++				   int nextensions));
++
++    FUNC(XpmFreeXpmImage, void, (XpmImage *image));
++    FUNC(XpmFreeXpmInfo, void, (XpmInfo *info));
++    FUNC(XpmGetErrorString, char *, (int errcode));
++    FUNC(XpmLibraryVersion, int, ());
++
++    /* XpmImage functions */
++    FUNC(XpmReadFileToXpmImage, int, (char *filename,
++				      XpmImage *image,
++				      XpmInfo *info));
++
++    FUNC(XpmWriteFileFromXpmImage, int, (char *filename,
++					 XpmImage *image,
++					 XpmInfo *info));
++#if !defined(FOR_MSW) && !defined(AMIGA)
++    FUNC(XpmCreatePixmapFromXpmImage, int, (Display *display,
++					    Drawable d,
++					    XpmImage *image,
++					    Pixmap *pixmap_return,
++					    Pixmap *shapemask_return,
++					    XpmAttributes *attributes));
++#endif
++    FUNC(XpmCreateImageFromXpmImage, int, (Display *display,
++					   XpmImage *image,
++					   XImage **image_return,
++					   XImage **shapeimage_return,
++					   XpmAttributes *attributes));
++
++    FUNC(XpmCreateXpmImageFromImage, int, (Display *display,
++					   XImage *image,
++					   XImage *shapeimage,
++					   XpmImage *xpmimage,
++					   XpmAttributes *attributes));
++#if !defined(FOR_MSW) && !defined(AMIGA)
++    FUNC(XpmCreateXpmImageFromPixmap, int, (Display *display,
++					    Pixmap pixmap,
++					    Pixmap shapemask,
++					    XpmImage *xpmimage,
++					    XpmAttributes *attributes));
++#endif
++    FUNC(XpmCreateDataFromXpmImage, int, (char ***data_return,
++					  XpmImage *image,
++					  XpmInfo *info));
++
++    FUNC(XpmCreateXpmImageFromData, int, (char **data,
++					  XpmImage *image,
++					  XpmInfo *info));
++
++    FUNC(XpmCreateXpmImageFromBuffer, int, (char *buffer,
++					    XpmImage *image,
++					    XpmInfo *info));
++
++    FUNC(XpmCreateBufferFromXpmImage, int, (char **buffer_return,
++					    XpmImage *image,
++					    XpmInfo *info));
++
++    FUNC(XpmGetParseError, int, (char *filename,
++				 int *linenum_return,
++				 int *charnum_return));
++
++    FUNC(XpmFree, void, (void *ptr));
++
++#ifdef __cplusplus
++} /* for C++ V2.0 */
++#endif
++
++
++/* backward compatibility */
++
++/* for version 3.0c */
++#define XpmPixmapColorError  XpmColorError
++#define XpmPixmapSuccess     XpmSuccess
++#define XpmPixmapOpenFailed  XpmOpenFailed
++#define XpmPixmapFileInvalid XpmFileInvalid
++#define XpmPixmapNoMemory    XpmNoMemory
++#define XpmPixmapColorFailed XpmColorFailed
++
++#define XpmReadPixmapFile(dpy, d, file, pix, mask, att) \
++    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
++#define XpmWritePixmapFile(dpy, file, pix, mask, att) \
++    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
++
++/* for version 3.0b */
++#define PixmapColorError  XpmColorError
++#define PixmapSuccess     XpmSuccess
++#define PixmapOpenFailed  XpmOpenFailed
++#define PixmapFileInvalid XpmFileInvalid
++#define PixmapNoMemory    XpmNoMemory
++#define PixmapColorFailed XpmColorFailed
++
++#define ColorSymbol XpmColorSymbol
++
++#define XReadPixmapFile(dpy, d, file, pix, mask, att) \
++    XpmReadFileToPixmap(dpy, d, file, pix, mask, att)
++#define XWritePixmapFile(dpy, file, pix, mask, att) \
++    XpmWriteFileFromPixmap(dpy, file, pix, mask, att)
++#define XCreatePixmapFromData(dpy, d, data, pix, mask, att) \
++    XpmCreatePixmapFromData(dpy, d, data, pix, mask, att)
++#define XCreateDataFromPixmap(dpy, data, pix, mask, att) \
++    XpmCreateDataFromPixmap(dpy, data, pix, mask, att)
++
++#endif /* XPM_NUMBERS */
++#endif
+diff -Naur vim73.orig/src/xpm/x64/lib/libXpm.a vim73/src/xpm/x64/lib/libXpm.a
+--- vim73.orig/src/xpm/x64/lib/libXpm.a	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/x64/lib/libXpm.a	2013-06-07 17:07:39.105563670 +0000
+@@ -0,0 +1,238 @@
++!<arch>
++/               1346471174  0     0     0       1492      `
++F@@
+~
+~)ú)ú)úXX^^dædædædædædædæzšzšzšzš""vvvvvvvv
+
+¢¢¢¢ÈžÙúÙúÙúÙúÙúÙúÙúÙúÙúÙúÙúÙúÙúÙúåé,é,é,é,é,
+xpmFreeColorTableXpmFreeExtensionsXpmAttributesSizexpmInitAttributesxpmSetAttributesXpmFreeAttributesXpmCreateBufferFromXpmImageXpmCreateBufferFromImageXpmCreateDataFromXpmImageXpmCreateDataFromImagexpmstrcasecmpXpmCreateImageFromXpmImagexpmParseDataAndCreateXpmCreateImageFromBufferXpmCreateXpmImageFromBufferXpmCreateImageFromDataXpmCreateXpmImageFromDataxpmNextStringxpmNextWordxpmNextUIxpmGetStringxpmGetCmtxpmParseHeaderxpmDataTypesxpmHashSlotxpmHashInternxpmHashTableInitxpmHashTableFreexpmInitXpmImageXpmFreeXpmImagexpmInitXpmInfoXpmFreeXpmInfoxpmSetInfoMaskxpmSetInfoxpmatouiXpmGetErrorStringXpmLibraryVersionXpmFreeXpmReadFileToBufferXpmReadFileToDataXpmReadFileToImageXpmReadFileToXpmImagexpmReadRgbNamesxpmGetRgbNamexpmGetRGBfromNamexpmFreeRgbNamesXpmCreateXpmImageFromImageboundCheckingMallocboundCheckingCallocboundCheckingReallocXDefaultVisualXDefaultScreenXDefaultDepthXDefaultColormapXParseColorXAllocColorXQueryColorsXFreeColorsXCreateImageXImageFreeXDestroyImageXpmWriteFileFromBufferxpmParseValuesxpmParseColorsxpmParseExtensionsxpmParseDataxpmColorKeysXpmWriteFileFromDataXpmWriteFileFromXpmImageXpmWriteFileFromImageAttrib.o/       1346471167  0     0     100666  2539      `
++dî.text Ü P`.data@PÀ.bssPÀ.xdataLü@0@.pdataHH:@0@UWVSHì(H
+ÉHËtO
+Ò~;êHÎHRHÁàHl0fH~0HH
+ÉtèHÆH9þuêH9îuáHÙHÄ([^_]éHÄ([^_]ÃAUATUWVSHì(H
+ÉHË}
+ÒteêIÌHRLlÁDI
+$H
+ÉtèAl$I|$
+ít1öfH
+÷H
+ÉtèHÆ9õwêI|$H
+ÿtHùèIÄM9ìu¯HÙHÄ([^_]A\A]éHÄ([^_]A\A]Ãfffff.žàÃf.H
+Ét_HÇA0ÇA8HÇApÇAhHÇAxöÄHÇHÇu(©tHÇ°ÇžóÃf.HÇA`ÇAXëÇffffff.WVSHì0HËöÄtHJHKpJ
+KhÇB
+HÇBöÄtIH0HK`AH(KXIÇ@0AÇ@(AötAH ÈK$AH$K(È(JK,C
+BC HÄ0[^_ÃföÄtz
+HrHT$(LD$ 
+ýèH
+ÀHT$(LD$ 
+ÿ~*ïHN0IÁLIÁâIÊëHÁ0I1IÁL9ÑHÎuíHCpB
+ChI@HCxI@HI@HÇB
+HÇBIÇ@IÇ@IÇ@éåþÿÿ
+HÇCpÈäþåu.HK0HT$(LD$ èLD$ HT$(HÇC0ÇC8ÇChéþÿÿAUATUWVSHì(HËöÄt
+Q8
+Ò
+öÄ
+9öÄÙLkpM
+ítcCh
+À~<èLíMdÅfHuH~0HH
+ÉtèHÆH9þuêHÅL9åuÑIMèLéèHÇCpÇChHKxH
+Ét
+èHÇCxHH
+ÉtèHÇHH
+ÉtèHÇHK0H
+ÉtèHÇC0ÇC8öÄtSX
+Òuj©t
++ž
+ÀuÇHÄ([^_]A\A]Ã@H°èHÇ°ÇžëÆShHKpè1ûÿÿHÇCpÇChëHK`è
+ûÿÿHÇC`ÇCXéwÿÿÿHI0èHÇC0ÇC8éaþÿÿB0`pP
+
+B0`pPÀÐR0`p
+
+B0`pPÀÐhp &$0±(À`,` 8=ªÊän5Éäì	">Wš[		
+			
+	 $	(	,0	4	8<	@	D.fileþÿgAttrib.c p (  :0 LÀ ]` .text .data.bss.xdataL.pdataHfree o xpmFreeColorTableXpmFreeExtensionsXpmAttributesSizexpmInitAttributesxpmSetAttributesXpmFreeAttributesboundCheckingMalloc
++CrBufFrI.o/     1346471168  0     0     100666  3329      `
++dd
++
+.text@À$ P`.data@PÀ.bssPÀ.rdata@D@P@.xdata$@0@.pdataš(
++@0@AWAVAUATUWVSHìxM
+ÀH$ÀI×L$ÐHÇtvA1ÉöÄÁöÄL$PtjA@(
+ÀtbIX0è1öH@LcM,ÄH
+è{t
+Hk
+ÿt
+1Û@HLÝHÃè9ßtwêM9ìLãIÄë»ÇD$Pœ*ÇD$\D$P1Û
+ÀtMH$ÐHHH
+ÉtèXH$ÐHJH
+Ét	è\H$ÐHHH
+Ét	è\ÝIœimage_naHŸ/* XPM *H¿/
++staticIŒ char * IŸme[] = {éL¬$Ht$pH|$xL€$LŽ$fÇ$
++èH
+ÀIÅ	HT$pHÁŸ)è\$P
+Û
+ŒAGEOHHL$pD$(AG
+D$ EèHŒ$ÐAÄtH$Ðö
+D\$\E
+Û
+ÙDàAÄLéDåÇDp",
++êèH
+ÀHÃ
+ñHT$pAôHÁèDL$PE
+É
+LAG
+AWIÆ$p"
+ÀxèLŽ$pHT$8H@L|$`IÝITHÁàHD0HT$@HD$HIFIÇLD$8HLù1ÛèHt$@LLM
+ÉtHH
+HñLèHHÆHÃHû(uÍÇ",
++HÆLéD)öõêèH
+ÀHÃt5DáLòAôHÁHÇ0èH;|$H¢IÝémÿÿÿIÝf.LéèžýÿÿÿHÄx[^_]A\A]A^A_ÃH$ÐLBM
+À/þÿÿIM)Hèp)éþÿÿH$ÐLAM
+ÀþÿÿDáHHÙèAÄé
+þÿÿn7ÇD$\éðüÿÿL|$`AWAHÙ¯ÂÀA¯GTèH
+ÀHD$`5ÿÿÿDD$PE
+À
+AGAWMoIoE7D$hDàHD$`úT$8HD$PIÇ|$hAFÿºDd$lMüA×HÀHÁHÁàH¯ÏHD$HHL$@AÆ$"IÄE
+öt7Læ1ÛDHñIøHÃHþH@HÁàITèA9ÞwØLd$@Hl$HAÇ$",
++AÇIÄD;|$8u€MçDd$lAÆ"IÇE
+ötE|$hLþ1ÛDDHñIøHÃHþH@HÁàITèA9ÞwØAFÿHÀH¯ÇIÇD+d$PL$\AÆ"
+ÉG|<0H$ÐEþLt$`P(HX01ÀLö
+ÒíBÿLcH@M,ÄLH#Hñè{HHkHÆ
+ÿt+1ÛLDÝH1HñHÃèHHÆ9ßwßM9ìLãIÄë¡DàIº XPMEXTAÄLTpé
+üÿÿH$ÐÁHD$pHÁDJ$DB HèAÄéÐûÿÿH$ÐLAM
+ÀÛýÿÿDáHL$`HèAÄé¿ýÿÿðD)ðHº,
++"XPMENE|
+ÇFDEXTHfÇF
+"HD$`BÇ8};
++H$ÀH1Àéœüÿÿžýÿÿÿé³üÿÿfDVSHìšHŽ$àHÓLÂMÈH
+ÛtHÇL$Ht$ è
+Àu<H
+ötAHL$@HòèLD$@H$HÙèýøÿÿH$D$8èD$8HÄš[^ÃH$E1ÀHÙèËøÿÿëÌ/*%s*/
++"%d %d %d %d %d %d	%s %s,
++"XPMEXT %s",
++"%s"
++
+0
+`
++p	PÀÐàð		0` 7gÙò
+w°
+É0®ÄË
+×ÿ
+D}
+©
+±ì£z
+š
+Ž
+
+<
+AÔê
+
+
+.fileþÿgCrBufFrI.c    .text7$.data.bss.rdata8.xdata$.pdata9strlen F strcpy sprintf Z strncpy free o   ¥XpmCreateBufferFromXpmImageXpmCreateBufferFromImagexpmColorKeysboundCheckingMallocboundCheckingReallocXpmCreateXpmImageFromImagexpmSetInfoXpmFreeXpmImage
++CrDatFrI.o/     1346471168  0     0     100666  3136      `
++dš	
+.textÐ@
+ P`.data@PÀ.bssPÀ.rdata0Ô@P@.xdata$@0@.pdata(l	@0@AWAVAUATUWVSHìšM
+ÀH$ðI×L$HÇt
+AöÄ
+çÇD$hÇD$lÇD$XAG
+ºÀÆD$TÁæñèH
+ÀIÄšAGEOH$ HHÙD$(AG
+D$ EèLcðIÞHŒ$tH$ö
+DL$hE
+É
+ßI)Þ¿ýÿÿÿAÆDñèH
+ÀI$æHÚHÁAöèAW
+AGI
+ÒT$@¥L¬$ HD$8L|$`1íLèIÇLD$8HLéLþ1ÛèLLM
+ÉtHHHñLèHHÆHÃHû(uÍL)îÆñèH
+ÀLêHÁAöèHÇ0IDìHÅ9l$@wL|$`AGA¯L$lT$X¿ýÿÿÿÀ$AGÁ¯$
+ÊDñÁèH
+ÀHD$X×D$TAG1ÛD$lHT$XAw
+H×H
+ÂH
++IÜèI
+ÜèHHH
+ßHLßHÃ9ÞsÙL$THD$XT$lE/H$H
+ÈAGÂIÖHT$XøHHT$xAWMwIo$ÌèŒ$L€$HDÁLd$xLŒ$A¯ÕIÏHD$@AEÿÂHÀHT$8HÂHÁàH¯×HD$pHT$`DE
+ít<Læ1ÛfDDHñIøHÃHþH@HÁàIèA9ÝwÙLd$`Hl$pAÆ$Ld$8M'MgIÇL;|$@u£Ld$xLŒ$L€$E
+ítFŒ$Ht$x1ÛDHñIøHÃHþH@HÁàIèA9ÝwÙAEÿHÀH¯ÇHD$xHL$xÆL$h
+É
+!HD$XH$ð1ÿHD$T
+Àt
+t$T1ÛI
+ÜH
+ÉtèHÃ9ÞwêLáèøHÄš[^_]A\A]A^A_ÃA@(
+À
+üÿÿIX0è1öH@E1íLcM4Ä{H
+è
+ÿFl/tHkt1ÛfHLÝHÃè9ßtwêM9ôLãtIÄëŒÆ
++AÅÇD$ht$XDl$lé¥ûÿÿ¿ýÿÿÿé(ÿÿÿIž XPMEXTMIÆé
+üÿÿDI$DA H
+LñèHIÆéÜûÿÿH$H$B(Hr0AWHTÿHL$XH
+Ñ$H
+HKHÃ
+ÀÏè|$lE1öH@Ld$HHÆHD$@LHE~èD9ÿvHèHÀHHCDnHCLfHD$8E
+í1íAÆ@IìHLëèA.9øsI
+ìèHÀHDëHDëHÅA9íwÊHT$8Gt=AíJ\êH;t$@t
+HÆH
+éUÿÿÿLd$HH
+HºXPMENDEXfÇATHéµýÿÿEþH\$8ëÃ¿ýÿÿÿéßýÿÿVSHìšHŽ$àHÓLÂMÈH
+ÛtHÇL$Ht$ è
+Àu<H
+ötAHL$@HòèLD$@H$HÙèmùÿÿH$D$8èD$8HÄš[^ÃH$E1ÀHÙè;ùÿÿëÌ%d %d %d %d %d %d	%s %sXPMEXT %s
++
+0
+`
++p	PÀÐàð		0`00Çn
+šìQbi
+ušú5>.£û
+WzÜ
+äW
+`mª»dz 
+
+
+.fileþÿgCrDatFrI.c 
+0 .textÇ
+.data.bss.rdata$.xdata$.pdata5B sprintf V strcpy strncpy strlen free j 
+   XpmCreateDataFromXpmImageXpmCreateDataFromImagexpmColorKeysboundCheckingCallocboundCheckingMallocXpmCreateXpmImageFromImagexpmSetInfoXpmFreeXpmImagecreate.o/       1346471168  0     0     100666  11875     `
++dT(6.textp  "w P`.data@PÀ.bssPÀ.xdata t!@0@.pdatal"F'@0@.rdata "@P@WVSHì M
+ÀHËHÖLÏtè
+ÀºÿÿÿÿtHòIøHÙè1Ò
+ÀÂÐHÄ [^_Ãfffff.HìXž Aøw
+Aø	ÀàøÀD$@$ÇD$HÇD$(ÇD$ D$8$D$0èH$HøHÀàýHÄXÃDÇD$(éAWAVAUATUWVSHìHHHŒ$°1öEÏHÍEÅL€$žH	HD$0ÿÐE
+ÿHD$8tSAEÿL5H
+HD$(f1ÛE
+ít*fÚHÃAðHME
+AÿÖA9ÝwäH|$(ÆD9þuÇHT$8HMLD$0HÄH[^_]A\A]A^A_IÿàfDAWAVAUATUWVSHìH
++Œ$ž
++Ž$°
++HÍHÓD$ 
++D$š
++L¬$à
++ÿÿøÆ@v	þD$š
++MîÇD$4IíE
+ÀVHÙ1íè$ 
++
+À'fH$@E1ä
+ÿIÇu
+ë=HS¶HÂHSC'IÄD9çv!øtÝ
+ÀtÙHKèC'IÄD9çwß
+öØH$@Lt$8LŒ$À
++AþE1äHßHÃë@AÄIÇ0A9ô IHÚè
+ÀuàD9æHûD÷Lt$8}H$Ð
++IMHÿH$Ø
++DD$4IMF
+¢êÿM
+öt*IIMÿH$è
++DD$4êIMF
+ ÿÅ;¬$ 
++
+ÛþÿÿD$4$š
++9T$4
+ªþÿÿ1ÀéôHD$@¹HD$(H|$(1À
+öóH«çL€$À
++Æ¿ë¶RIÄ0f<PÇ9÷ŸI$LŸ2JDô@H
+Àu×º¹èH
+ÀJDô@I$ëŽE1öM
+íL=tH	ÿIUIÆHÁAÿ×HD$8H$Ð
++HMHAÿ×H$@HD$(¹@1À
+öH×óH«t/L€$À
++Æ°I$IÄ0¶fT@À9ðuæŽ$š
++
+öËL-E1äHÙèD$ 
++E
+Û1öéHSŸHÂHSPÿúþHcø·|@f
+À|H$Ø
++·ÀEàHMDLüòAÿÕM
+öt ·|@H$è
++EàLñDLüòAÿÕÆ;Ž$ 
++
+ørÿÿÿ
+ÀjÿÿÿHKèPÿúþpÿÿÿžþÿÿÿHÄH
++[^_]A\A]A^A_ÃD$š
++E
+ÒL=E1öIìHÙèD$ 
++E
+ÉÏ1öééHCŸ8HÀHCGÿ=þàø
+ÜHSŸHÂHSPÿúþÔHcÿHTü@H
+ÒÃHcèf<jµH$Ð
++I
+$HAÿ×HDü@H$Ø
++EðI
+$·hDLüòÿM
+ít0IUI
+$Aÿ×HDü@H$è
++EðI
+$·hDLüòÿÆ;Ž$ 
++ßøÿÿÿ
+À
+ÿÿÿHKèÇé
+ÿÿÿ
+À
+ÿÿÿHKèé
+ÿÿÿH\$@H³f.H
+H
+ÉtèHÃH9óuêéVþÿÿ$š
++1À
+ÉJþÿÿL=E1öIìHÙ1öè$ 
++
+Òç1íë(f.HS¶HÂHS,@HÅ9ïv#øtÛ
+Àt×HKè,@HÅ9ïwÝH$È
++H$@èH8HÅ®ýÿÿH$Ð
++I
+$HAÿ×HEH$Ø
++EðI
+$@D
+òÿM
+ít-IUI
+$Aÿ×HEH$è
++EðI
+$@D
+òÿÆ;Ž$ 
++
+ÿÿÿAÆD;Ž$š
++
+îþÿÿ1Àé$ýÿÿAÄD;€$š
++
+?üÿÿM
+ötLñHT$8Aÿ×LñÿHT$(HMAÿ×1ÀéæüÿÿAÆD;Ž$š
++
+ýÿÿH\$@H³fH
+H
+ÉtèHÃH9óuê1Àé©üÿÿH\$@H³H
+H
+ÉtèHÃH9óuêévüÿÿH\$@H³fH
+H
+ÉtèHÃH9óuêžýÿÿÿéFüÿÿATUWVSHì ¶HÖÀty¶HÏH-Ûu&ëIf¶GHVÀtI¶^HÇÛt(HÖŸÈÿÕAÄŸËÿÕA9ÄtÓA)ÄDàHÄ [^_]A\ÃfŸÀ1ÒŸÒ)ÐHÄ [^_]A\Ã¶V1Àëè¶1Àëáfff.AWAVAUATUWVSHìšHŒ$H¬$H
+ÒH$ðHÓLÆD$îE1íš@
+WšuH$ðèH$ðHÂèšeHKHL$PöÄ@ºÇD$ttDšDÂDD$têH
+õÿÿ©HL$@t
+LÈLD$@© HÇD$Ht
+HØH\$HúÇD$XwHD$XD€$ÇD$\E
+äÆHcD$XL$tE1äÁHÁàL$|HD$`D$XHT$`ÀD$xHTøHHÁàH$HT$8ëW@HLñèñýÿÿ
+À
+}H$ ÇÇEÿÿÿD"AÄHÆ0HÇHÅHD$80D;€$)E
+í
+|$tv \$tfØL4ÆM
+öu
+ëûwí\$|ûÀÀßØL4ÆM
+öÄHLñèMýÿÿ
+À\ÿÿÿHL$HL$MðHT$PHL$ H$ðÿT$@
+À~{L$0A$L$(ÑÂAH$0L$@AL$8ÇEÑÂAH$@ééþÿÿHR@DkHH$éýÿÿDÇD$\Ãû!ÿÿÿÇD$\üÿÿÿD$\HÄš[^_]A\A]A^A_ÃLD$HL$HT$PH$ðLD$ MðÿT$@
+À~H$0é#ÿÿÿëÇD$\ûþÿÿéþÿÿHVDd$pHl$hLŽ$HýH÷H
+ÒIÔÀE1ÿÆë@AÇIÆE9ï0I
+H
+Ût@ötLâHÙè
+ÀtSH
+ÛuÎINH
+ÉtÅLD$`D$XJ<uHT$8HêèHztòø}HHÇH
+Òtèiûÿÿ
+Àu
+DE9ïHþDd$pHïHl$h£ýÿÿI>BI^H
+ÛHHÙè!ûÿÿ
+À
+H$ ÇÇEÿÿÿD!é+ýÿÿ|$xH$H<
+HT$8D$xHÂÀøKÿÿÿHÂHzøtéø7ÿÿÿAÇIÆE9ï
+ÐþÿÿHþDd$pHïHl$héæüÿÿHT$HL$IØH$ðHT$ HT$PÿT$@
+ÀÎL$0$AL$(ÈAAL$@H$0AL$8ÇEÈAH$@Aé*üÿÿINAFH
+ÉtUHèàùÿÿ
+ÀuEH$ ÇED!L$@AL$8ÂÀA
+H$@éÌûÿÿAFÇEëÄÇD$\éÝûÿÿH$ðèH$ðHÂèH
+ÛHD$PtlévúÿÿD$xéÑýÿÿD$xøþÿÿé¿ýÿÿH$ðE1íèH$ðHÂèH$ðèH$ðHÂèHD$PH
+ÇïÿÿÇD$tHÇD$HÇD$XHL$@éaúÿÿ@AWAVAUATUWVSHìžH$ M
+ÀHÏHÖMÆL$HÇ$HÇ$Ç$€Ç$šÇ$¬tIÇHŒ$tH$HÇH
+Û<š
+ÒHùèHùHÂèH$šÁHSšH$ÛST$|©ÇD$xt
++ÀT$xHbïÿÿ©HT$pt
+HÐHD$pN
+ÁáèH
+ÀIÇSN
+ÁáèH
+ÀHÅÌN
+ÁáèH
+ÀIÄèN
+ÁáèH
+ÀIÅOH$¬DN
+LFHÚHùLl$HHD$PH$šLd$8Hl$(L|$ HD$@H$€HD$0è ÷ÿÿøD$l#|%H
+ÛöÄ
++
+ÀüH$H
+ÉtèH$H
+ÉtèLùèH
+ítHéèD$šE
+É
+åM
+ätLáèM
+ítLéèD$lHÄž[^_]A\A]A^A_ÃHSšH$
+?þÿÿHùèHùHÂèH
+ÛH$^š
+%þÿÿHùèHùHÂèD$|HíÿÿH
+ÛÇD$xHD$p0þÿÿéñýÿÿM
+öttV|$|A¹DDL$xH$DD$|T$(H$L$ HùHD$0è»ìÿÿ
+ÀD$l
+³þÿÿHFL|$(HùDNDHD$ H$HèíÿÿHŒ$D$|tŒ$€
+ÉLùèHéèH
+Ûœ÷
+Léè©¬$šL£°žM
+öt
+H$I|$|eþÿÿH$H$HéMþÿÿDE1íE1äÇD$lýÿÿÿéÑýÿÿHÇD$ MàH$HùÿT$péûýÿÿE1íÇD$lýÿÿÿé¡ýÿÿH$DL$xH$AžHùHD$0FD$(D$ èhëÿÿ
+ÀD$l
+`ýÿÿHFHl$(HùDNDHD$ H$HèŽëÿÿéÉþÿÿÇD$lýÿÿÿé&ýÿÿfHùèHùHÂèHùH$èHùHÂèH$HùèHùHÂèD$|H<ëÿÿÇD$xHD$péàûÿÿf.$¬Lk0C8$€éWþÿÿLéèLáèé[þÿÿÇD$lýÿÿÿéËüÿÿAWAVAUATUWVSHì8L¬$šH$°M
+ÀHÏIÖLÅMÌHÇ$ÐHÇ$ØÇ$Ç$Ç$
+Ç$(Ç$,HÇ$àHÇ$èHÇ$ðHÇ$øtIÇM
+ätIÇ$H
+Ûpš
+¶HùèHùHÂèH$š¥HSšHT$p¿ST$|©ÇD$xt
++ÀT$xHéÿÿ©HT$ht
+HÐHD$hE1ÿM
+ítAEE1ÿöÄAÇLñè
+ÀÆðHÄ8[^_]A\A]A^A_ÃHSšH$
+[ÿÿÿHùèHùHÂèH
+ÛHD$p®š
+AÿÿÿHùèHùHÂèD$|HãèÿÿH
+ÛÇD$xHD$hLÿÿÿé
+ÿÿÿfDH$,L$L$H$LñHD$@H$(HD$8H$$HD$0H$ HD$(H$
+HD$ è
+ÀÆ
+üþÿÿE
+ÿ
+ D$
+H$°$H$šAøv	úH$šL$àLñHD$ è
+ÀÆ7HÇ$ HÇ$HÇ$HÇ$Œ$
+vŒ$4H$àH
+Ét
+$èH$èH
+ÉtèH$ðH
+ÉtèH$øH
+ÉtèH$ÐH
+ÉtèH$ØH
+ÉtèHŒ$t
+H$èHŒ$t
+H$èD$E
+É
+ÎHŒ$t
+H$èHŒ$ {ýÿÿH$ èéiýÿÿfE
+ÿ
+'$ÁáèH
+ÀH$×$ÁáèH
+ÀH$$ÁáèH
+ÀH$w$ÁáèH
+ÀH$ ùH$
+H$ D$L$àHùHD$PH$HT$HH$HD$@H$HT$(HÚHD$8H$HD$0H$HD$ èÁîÿÿøÆt*íýÿÿH
+Ût
+öÄt
+À
+ÒýÿÿfH
+ítSH$Ð|$|A¹DDL$xDD$|HùHD$0$H$D$($D$ èÒäÿÿ
+ÀÆ
+qýÿÿM
+äD$|tUŒ$tHH$ØDL$xH$AžHùHD$0$D$($D$ èsäÿÿ
+ÀÆ
+ýÿÿH$ØH$HùD$D$HD$PH$HT$XH$šHD$HH$ÐHT$8LòHD$@H$àHD$0$
+D$($D$ è*åÿÿH$ÆèH$è
+öHÇ$HÇ$
+WüÿÿŒ$
+vŒ$`E
+ÿ
+úM
+íAEöÄt$,
+À
+HIÇE0AÇE(H$ $E
+ÿ$HÇBB$
+B$B
+H$àHBt$H$èIEH$ðIEH$øIE$(
+Àt$ AMAE $$AE$H
+Ûý÷H$ HC0$
+C8$©ÎH$$H°žH
+ít
+H$ÐHE|$|dùÿÿH$ØI$éSùÿÿH$èLñèéKúÿÿHùèHùHÂèHùH$èHùHÂèHD$pHùèHùHÂèD$|H?âÿÿÇD$xHD$hé¬øÿÿHÇD$ L$HùHT$pÿT$héûÿÿHÁè
+ÀÆ
+ øÿÿD$
+$éÇùÿÿDŸýÿÿÿHÇ$ éúÿÿf.ŸýÿÿÿHÇ$ HÇ$HÇ$éËùÿÿfH$ðLñèéÄúÿÿH$šèéºùÿÿfŸýÿÿÿHÇ$ HÇ$éwùÿÿŸýÿÿÿémùÿÿH$ èH$èé<þÿÿH$ èéþÿÿH$øLñèéñüÿÿH$ $$HÇBB$
+B$B
+H$àHBélýÿÿH$šèéüÿÿIU0ME(Lñè
+À°üÿÿÆHÇ$HÇ$éøÿÿ20`p¢	
+0
+`
++p	PÀÐàð
++I
+0
+`
++p	PÀÐàð
++
++20`pPÀ
++
+0
+`
++p	PÀÐàð
++
+0
+`
++p	PÀÐàð
++'
+0
+`
++p	PÀÐàðBP»
+ÀÍÐ 	0 	Ž	HÀ	\X`ípðc None
+- ã
+"p#È$õ$AÙ%ú"N#"X¹#Ñ#ù&/"~#¢'ãi
+©&Ù&		&=	
+
+
++(,
++)²
++#
+Ç
+e
+$ó
+7š(ž*ü(
+)()*(
+)}++«+Â+b,t,|&&§&Ž&è(ó*(!-î&ö&&4(?)O(Z*j(u-Ä&Ô&Î(Ù)Y.(£*Ã(Î-]/»0&18&J&\&n,,&°&Ù&õ&+4+T+t+q
+&~
+& 
+24
+(?
+)O
+(Z
+*g
+(r
+-¹
+3<2N4&¢&Ž&É2# 48 5É!
+
+
+
+
+
+
+
+ $
+(
+,0
+4
+8<
+@
+DH
+L
+PT
+X
+\`
+d
+h.fileþÿgcreate.c P 
+À 'Ð @ Y 	 gÀ	 t~` ð .textc w.data.bss.xdata .pdatal.rdata¯ÂÑêù   , 8 getc strcmp F free Z f u   © · Å Ô ã ò    0 CAllocColorCreateXImageFreeColorsMSWPutImagePixels.isra.1ParseAndPutPixels.isra.2xpmstrcasecmpCreateColorsCSWTCH.47XpmCreateImageFromXpmImagexpmParseDataAndCreate__imp_SelectObject__imp_SetPixel__imp_CreateCompatibleDC__imp_DeleteDC__imp_tolowerXParseColorXAllocColorXCreateImageXFreeColorsxpmNextStringboundCheckingCallocxpmHashSlotXDefaultScreenXDefaultVisualXDefaultColormapboundCheckingMallocXDestroyImageXDefaultDepthxpmParseHeaderxpmParseValuesxpmParseColorsxpmFreeColorTablexpmGetCmtxpmHashTableInitxpmHashTableFreexpmParseExtensions
++CrIFrBuf.o/     1346471169  0     0     100666  1452      `
++d0.text`Ü|
+ P`.data@PÀ.bssPÀ.xdata(<@0@.pdatadô@0@AVAUATUWVSHìàHŽ$@HŒ$ÀH$HÍIÔMÅMÎHùèHÙèH
+öÇD$@Ld$PÇD$\tqHñèHòHÙèHT$@HéMñMèHt$0H\$(H|$ è
+ÀÅxIØHúHñèHÙèHùèèHÄà[^_]A\A]A^Ã@HT$@HéMñMèHÇD$0HÇD$(H|$ èÅë²fWVSHì`LÇHËHÑHÖèHùèHL$ IøHòÇD$ H\$0ÇD$<èHÄ`[^_Ã	\
++0	`pPÀÐà
++
++L0`pþS9Acn€¬ŽöD
+
+
+.fileþÿgCrIFrBuf.c 
+ .textS
+.data.bss.xdata(.pdata9 I X j y    ¯ ¿ ÌXpmCreateImageFromBufferXpmCreateXpmImageFromBufferxpmInitXpmImagexpmInitXpmInfoxpmInitAttributesxpmSetInfoMaskxpmParseDataAndCreatexpmSetAttributesXpmFreeXpmInfoXpmFreeXpmImagexpmParseDataCrIFrDat.o/     1346471169  0     0     100666  1576      `
++d°.textàÜü
+ P`.data@PÀ.bssPÀ.xdata(Œ@0@.pdataät@0@AVAUATUWVSHìàHŽ$@HŒ$ÀH$HÍIÔMÅMÎHùèHÙèI$H
+öÇD$@Ld$HÇD$XÇD$\HÇ$hHD$PHÇ$`Æ$qÆ$pÇ$ttmHñèHòHÙèHT$@HéMñMèHt$0H\$(H|$ è
+ÀÅxIØHúHñèHÙèHùèèHÄà[^_]A\A]A^ÃHT$@HéMñMèHÇD$0HÇD$(H|$ èÅë¶fWVSHì`LÇHËHÑHÖèHùèHHL$ IøHòÇD$ H\$(ÇD$8ÇD$<HD$0HÇ$HHÇ$@Æ$QÆ$PÇ$TèHÄ`[^_Ã	\
++0	`pPÀÐà
++
++L0`p>@Ö9A§²Ôèðø6W_Ç
+
+
+.fileþÿgCrIFrDat.c @ .textÖ
+.data.bss.xdata(.pdata5 E T f u   « » ÈXpmCreateImageFromDataXpmCreateXpmImageFromDataxpmInitXpmImagexpmInitXpmInfoxpmInitAttributesxpmSetInfoMaskxpmParseDataAndCreatexpmSetAttributesXpmFreeXpmInfoXpmFreeXpmImagexpmParseDatadata.o/         1346471169  0     0     100666  5509      `
++d!.textð
+$. P`.dataô
+ð@`À.bssPÀ.xdata|ô
+@0@.pdataTpÂ@0@.rdata`Ä@P@AUATUWVSHì(9IÌmH© Li HYLï¶EA HÇHÙè¶UþD)îÁDŸÂA9À
+NHÅAøÿtÒuÌAÉÒ
+ÃEL$ Lí1öfDIŒ$(8tDAøÿuë<HêÆB8Hjt+øÿt&HÙèþÿuÚLêŸB8HjuØAt$
+HÙèþÿÆHêHÇHjB¶ÁDŸÂA9ÀuxøÿtÒuÄÒ
+gÿÿÿŸÉHÚè1ÀHÄ([^_]A\A]Ã
+öuëë¶OÿHïŸÉHÚèîuè1ÀHÄ([^_]A\A]ÃfLêŸérÿÿÿAÀëL LQ A¶A 1ÀIL$DH¶HÁIL$ATA¶L8Ñ
+èHÀÒuÐAT$ MÑ1ÀM$(A:tJÒuëDLÉÀÒLIQt0A8t+IL$¶HÁ=ÿIL$uÒLÑÒžLIQuÐAD$
+ë%ÀLÉIÀLIQA¶8Ñu'Òt3IL$¶HÁ=ÿIL$uËLÑžëÇÉ
+RÿÿÿIl$1ÀHÄ([^_]A\A]ÃAÁAÀéžýÿÿÉÿÿÿM)L$ébþÿÿfffff.VSHì(HË
+ÀÎøä¹1Hq
+»0uZH» u1ÀHÄ([^ÃHÙèØüÿÿHñèH Ÿ9ÐtâHòÁè1ÀHÄ([^ÃHÙè§üÿÿHñèŸ09ÐtøÿtH H
+ÒtÜŸ9ÂuÕëÄHñèŸ19ÐVÿÿÿøÿuäéLÿÿÿAHQÀAHÂHA1ÀHÄ([^Ã¶1ÉtHC¶HÀHCÒt8Ñuí»0uOH H
+ÒÿÿÿHC¶ëHÙèãûÿÿHCH ¶¶L@LC8ÑtÛHCéÍþÿÿHÙèµûÿÿHC¶HÀHCÒ­þÿÿ:0¡þÿÿH H
+ÉtÕ8uÑëÂffffff.AWAVAUATUWVSHì(HËHÕEÇø
+Àt{LiL5LéèøÿÆÁìAÿÖ
+Àt
+Ÿ19òuÙE1äë.þÿt/Ÿ19ðt$E9üsBt%LéIÄèÆÁAÿÖ
+ÀDçtÌLêñèé~HCL5ëŸ1HFD9âtHCD¶(HÆEŸåDáAÿÖ
+Àu×1ÿë
+Ÿ1D9ât0HsÇD¶.EŸåHÆDáHsDmHÅAÿÖ
+ÀuGD9ørÄHkøHÄ([^_]A\A]A^A_ÃAÿÖé
+ÿÿÿ@SHì AžHÓHT$ è¥þÿÿHL$ IØÂèHÄ [Ãffff.AWAVAUATUWVSHì8HÎIÖL$ø
+€HnH
+í×ŸE
+ÀçŸ19ÂØHëë
+9ÐtHÃH^Ÿ
+Àuí)ëDcDáèH
+ÀHÇ±EàHêHÁè
+Àu$H$I>D 1ÀHÄ8[^_]A\A]A^A_ÃÆëÖD
+ÀTÿÿÿHiHéèÃžþÿÿÿûÿtÁ¹èHÇŸ19ÃLd$0E1ÿE1ífA
+$HéAÅèøÿÃtZŸ19ØtOIÄAýuÑE¯HùDêèH
+ÀIÄ­J
+8HT$0AžLçEïLd$0èE1íëûÿ®EéEùu
+ÆAŒHêÙèéçþÿÿfDEaHùDL$(DâèH
+ÀHÆDL$(t9DùHT$0EèHÁDL$(H÷èDL$(BÆë£1ÿE1äéþÿÿHùèžýÿÿÿé
+þÿÿ¹AŒ1Ûé>þÿÿžýÿÿÿéiþÿÿHùèžþÿÿÿéWþÿÿfDVSHì(HÖHË
+ÒtI
+
+Éu1ÀHÇHÄ([^ÃÁèLcC
+HS HHÁèHcC
+HÆ1ÀÇC
+HÄ([^Ãf.ATUWVSHì DE1äHËE
+ÀuDàHÄ [^_]A\Ã@Hl$ AžÆ0Æ1
++HÇ(HÇ HêèIûÿÿøAž*HêHÙè/ûÿÿøÖø
+dH5¹HïAŒþÿÿÿóŠÂÀ8Â
+cÿÿÿHêHÙAžèçúÿÿH
+1Ò1öHcøL%@H
+É
+fÇ4H
+Òô
+öHcöH4HÁæHD0H HHÆ
+ÉHH(ëHÙE1äèøÿÿéÄþÿÿfIÄ@ÆIL$ÀH
+É{IøHêè
+ÀuÜHcÆHHÁàHéUÿÿÿDH5¹HïóŠ
+¿þÿÿHêHÙAŒþÿÿÿèèùÿÿ
+ÀKþÿÿHcðº_HéÆD4 èH
+ÀHÇ*þÿÿH)ÅžH
+.H5HùHOÈH9ÉóŠ
+þÿÿÇ4H@ŸéÈþÿÿ¶FÆ1HÙE1ä0è¢÷ÿÿ¶F	1éŸýÿÿH5¹HïAŒþÿÿÿóŠÂÀ8Â
+ýÿÿH@ŸéZþÿÿf.HHÙE1äH HH(è)÷ÿÿ¶0¶1é5ýÿÿf.1ÒéùýÿÿAŒþÿÿÿéýÿÿ
+
++
+ #""&)7?CH
+""
+JQV
+
+B0`pPÀÐB0`	B
+0
+`
++p	PÀÐàðD0
++G
+0
+`
++p	PÀÐàðB0`
+
+D0`pPÀÂÐÌ Ð8jDpÖ\àâ
+h#define_formatXPMXPM2!
++C/**/,
++static char *[] = {
++};
++Lisp;(setq  '(
++))
++9®Ù O,Dd¿Ç*:ö§
+ð<m
+
+Áà
+
+.
+\
+€·
+v	¬	
+º	
+ñ	
+
++
+\
++j
++
+
++Á
++ à
++
+
+C
+h
+
+
+
+
+
+ª
+
+·
+
+ (08@HP`hpx š°ž
++
++
+
++
++
++
+
++ $
++(
++,0
++4
++8<
++@
++DH
++L
++P.fileþÿgdata.c Ð  +Ð 5 Bp Là .textâ
+..data.bss.xdata|.pdataT.rdataZ[hgetc ungetc xpmatoui v strncpy  free strncmp strrchr ParseCommentxpmNextStringxpmNextWordxpmNextUIxpmGetStringxpmGetCmtxpmParseHeaderxpmDataTypes__imp_isspaceboundCheckingMallocboundCheckingRealloc
++hashtab.o/      1346471170  0     0     100666  1598      `
++d.textÜÄ P`.data@PÀ.bssPÀ.xdata8\@0@.pdata0
++
+@0@ATUWVSHì ¶2HyIÔ@öt|Að1ÀfAÁEŸÀHÂAÁáEÈA)ÀDÀD¶EÀuß	1Ò÷ñÓHÁãHcÉHûHlÏøëfDHëH9ßHGÝHH
+ÀtH@81uåLâè
+ÀuÙHØHÄ [^_]A\Ã	1Ûë²DAUATUWVSHì(E1íHËHÖLÇèCÿÿÿH8HÅtDèHÄ([^_]A\A]Ãf.¹èH
+À°H0HxHEC;C}
++ÀCëžf+ºVUUULcAœýÿÿÿt-éÁáð3÷êðÁø)ÂSèH
+ÀtHcöHCHðH9ÐsHêH9ÐHÇrð
+í~'1öfDI<ôH
+ÿtHHÙè|þÿÿH8HÆ9õáLáE1íèCé#ÿÿÿHÇEAœýÿÿÿéÿÿÿf.SHì ÇÇAUHËÇA¹èH
+Àt1HcHÐH9ÐsfHêH9ÐHÇrðHC1ÀHÄ [Ãžýÿÿÿëóffff.WVSHì HqHÏH
+öt2HcH
+ÆH9ÞsHëH
+H
+ÉtïèH9ÞrêHñèHÇGHÄ [^_Ã
++
++20`pPÀ
+
+B0`pPÀÐ2020`p ¶À#$0},æ;â\i
+
+
+
+ 
+$(,
+.fileþÿghashtab.c   
+À /0 .text}.data.bss.xdata8.pdata0
+strcmp @ free TxpmHashSlotxpmHashInternxpmHashTableInitxpmHashTableFreeboundCheckingMallocImage.o/        1346471170  0     0     100666  792       `
++d°.text`Ü` P`.data@PÀ.bssPÀ.xdata
+<@0@.pdataHt@0@ÇA
+HÇAHÇAÃSHì HËHIH
+ÉtS
+èHKH
+ÉtèHÇCHÄ [Ã20 U5C
+
+
+.fileþÿgImage.c   .textU.data.bss.xdata
+.pdata$ free 6xpmInitXpmImageXpmFreeXpmImagexpmFreeColorTableInfo.o/         1346471170  0     0     100666  1220      `
++d .text`Ü P`.data@PÀ.bssPÀ.xdata<@0@.pdata0Pš
+@0@H
+Ét'HÇAHÇAHÇAHÇA0ÇA(óÃfSHì H
+ÉHËtVöÄtDHIH
+Ét
+èHÇCHKH
+Ét
+èHÇCHKH
+Ét
+èHÇCöÄuÇHÄ [ÃS(
+ÒtæHK0èHÇC0ÇC(ëÌffffff.ÇöÄtÇöÄt	óÃÇöÄt$LBxÇLALLALLAöÄtLB`	LA0DBXDA(štB$	A B(A$óÃ20.0ÁÐð
+ðQNdz¬
+
+
+
+ 
+$(,
+.fileþÿgInfo.c 0 "Ð 1ð .textQ.data.bss.xdata.pdata0
+free < NxpmInitXpmInfoXpmFreeXpmInfoxpmSetInfoMaskxpmSetInfoXpmFreeExtensionsmisc.o/         1346471171  0     0     100666  1378      `
++dÒ.textÄ	 P`.data@PÀ.bssPÀ.xdata@0@.pdata0
+
+@0@.rdataD@P@1À
+ÒtMD¶	EQÐAú	w?E1ÒëD¶IHÁEYÐAû	w
+AÂEŸÉA9ÒADAÐuØAžÃ1ÀóÃff.HQÁùwHdHcHÐÿàHóÃHÃHBÃH6ÃH'ÃHÃžËvÃf.éU`Øàæðõ
+XpmColorErrorXpmSuccessXpmOpenFailedXpmFileInvalidXpmNoMemoryXpmColorFailedInvalid XpmError€žÌàšcr£³ÃÓñ
+
+
+
+ 
+$(,
+dhlptx.fileþÿgmisc.cxpmatoui ` à XpmFreeð .textõ	.data.bss.xdata.pdata0
+.rdata|free (XpmGetErrorStringXpmLibraryVersionRdFToBuf.o/     1346471171  0     0     100666  1341      `
++dD.textž
+ P`.data@PÀ.bssPÀ.rdata@P@.xdata@0@.pdata
+¬&@0@AVAUATUWVSHìAœÿÿÿÿHÇHÕ1Òè
+ÀÃìHT$ ÁÿD9èëT$ 
+ÀT$`·T$$fT$d·T$&fT$f·T$(fT$h·T$*fT$j·T$,fT$lT$0T$pHT$8×T$tHT$@HT$xHT$HH$HT$PH$
+HÙÿH
+ÀHÆOèH
+ÀHÃtLcçIñºMàHÁèHñIÆèD9÷uBBÆ#E1íH]DèHÄ[^_]A\A]A^ÃHT$`¹1ÀH×óH«ÙAœÿÿÿÿèëÊHÙè@ëŒÙèë³HñAœýÿÿÿèë£r	
++0	`pPÀÐà{$;Ä
++Ìàþ	NXeu
+.fileþÿgRdFToBuf.c .text{
+.data.bss.rdata.xdata.pdata
+'open 5 fread fclose close free IXpmReadFileToBuffer__imp__fstat64__imp__fdopenboundCheckingMalloc
++RdFToDat.o/     1346471171  0     0     100666  851       `
++dª.textpÜd P`.data@PÀ.bssPÀ.xdata
+L@0@.pdata
+X@0@SHìH
+ÒHÓÇD$0tHÇLD$0HT$pè
+Àu.LD$0HT$pHÙèHL$pD$(èHL$0èD$(HÄ[Ã0i*@NX
++.fileþÿgRdFToDat.c .texti.data.bss.xdata
+.pdata
+ , F V eXpmReadFileToDataXpmReadFileToXpmImageXpmCreateDataFromXpmImageXpmFreeXpmImageXpmFreeXpmInfo
++RdFToI.o/       1346471172  0     0     100666  2495      `
++d<#.text À P`.data@PÀ.bssPÀ.rdata0$@P@.xdata<T@0@.pdata0Ä
+@0@UWVSHì(H
+ÉHÍHÓÖèø<HHéèH
+ÀHCÇÇC
+1ÀHÄ([^_]ÃDHcÐH5¹H|þóŠt]øt§H|ýH5¹óŠuH
+ÇIèHL$ èHHL$ ÿH
+ÀHC
+{ÿÿÿžÿÿÿÿézÿÿÿÇIèHë»fÿÇHCéAÿÿÿff.SHì0ùt
+ùt1HÄ0[ÃHHT$(ÿHT$(H9ÃtâH
++HÄ0[éfDH
++HHÄ0[Hÿàfffff.ATUWVSHìàH$0HÎH$ÀH×LÅMÌèH$èHT$@HùèHþÿÿ
+ÀÇ
+H
+Û¥HÙèH$HÚèH$HT$@MáIèHñH\$0HD$(H$ÀHD$ è
+ÀÇxL$H$ÀHÙèH$èL$@HT$HèÂþÿÿH$ÀèøHÄà[^_]A\ÃDH$ÀHT$@MáIèHñHÇD$0HÇD$(HD$ èÇëf.WVSHìpLÆHÏHÑHÓèHñèHT$0Hùè ýÿÿ
+Àu&HL$0IðHÚèL$0HT$8D$(è
++þÿÿD$(HÄp[^_Ã.Zuncompress -c "%s"r.gzgunzip -qc "%s"
+
+E0`pPR0
+
+\0`pPÀ
++
++N0`pbpŠ°,'
+/f
+
+
+
+š¯
+ºá
+ò/V§Ï
+ß
+
+/< W!
+ÇÏð"F
+
+ $(,.fileþÿgRdFToI.c  %p 8° .text.data.bss.rdata,.xdata<.pdata0
+N[lstrlen fopen sprintf fclose z   « º Ð á ð  
+OpenReadFilexpmDataClose.isra.0XpmReadFileToImageXpmReadFileToXpmImage__imp__popen__imp___iob_func__imp__pclosexpmInitXpmImagexpmInitXpmInfoxpmInitAttributesxpmSetInfoMaskxpmParseDataAndCreatexpmSetAttributesXpmFreeXpmInfoXpmFreeXpmImagexpmParseData
++rgb.o/          1346471172  0     0     100666  9826      `
++d $.textÐ
+
+ P`.dataÀÔê@`À.bssPÀ.xdata(@0@.pdata0Œš#
+@0@.rdata ì@P@žêÃf.SHD\$01ÒëÂHÀúêt2D¶ÑE9Âuæ¶ÝD9ËuÞÁé¶ÉD9ÙuÓHcÒHHÁâH[Ã1À[Ãf.AWAVAUATUWVSHì(HÓLÆL$èº HÁIÅèH
+Àt(8tö¶PHÀÒuòº LéèH
+ÀuÛA¶MLïH-ÉtŸÉÿÕHÇ¶ÉuîHLéèH
+ÀtÆ@aAŒé1íL=ë
++foD9å3BD%LéÇÁïÇÑÿLc÷IÁæMþIèøtC}ÎDgÿD9å~ÍH$ÇÿLéÇÇèžHÄ([^_]A\A]A^A_ÃAFLé¶Ð¶ÔÁèH$¶ÀèëÂDÃðøÿúë×
+2¿Á'ðÿÿ-õõÜ3ÿäÄ:@ÿëÍOÿT+â_¥**eÞžo_yÿÒi
+ÿrV""£ÿøÜ¬ÿÿ±ž
+¿V-Éœ·kÓUV/âÿí øézŒ8Kf
+/OO,ŠŠ:ÓEÿN¿ÿZTTTb
+ÿm##wÿúðPiÜÜÜøøÿ€Úª©ïß³~~~žŸÄËÿÿÿÓ
+
+
+Úá!!!è$$$ï&&&ö)))ý+++...
+000333666&888-;;;4===;@@@BBBBIEEEPGGGWJJJ^dMMMkOOOrRRRyTTTWWWYYY\\\^^^aaa£cccª
++
++
++°fff·iiiŸkkkÅnnnÌpppÓsssÚuuuáxxxèzzzï}}}ö
+
+
+ü
++
+
+
+&-4;BHOV]¡¡¡d£££kŠŠŠršššy«««­­­°°°³³³µµµ¢žžž©ººº°œœœ·¿¿¿ŸÂÂÂÅÄÄÄÌÇÇÇÓÉÉÉÚàÌÌÌçÏÏÏîÑÑÑõÔÔÔüÖÖÖÙÙÙ
++ÛÛÛÞÞÞàààããã&,ååå3èèè:ëëëAíííHðððOòòòVõõõ]÷÷÷dúúúküüürÿx­ÿ/ðÿðÿiŽk99ÿÿð¥³³~«ææúŽÿðõÂ|üÌÿúÍÙ°âÿãðîàÿÿøîÝúúÒ
+ššš&ÿ¶Á0ÿ z< ²ªJÎúWpÿfwu|Óÿÿà¯úðæ ÿÿšR¯À22ÌË2KÝÑÁfíœRœúpÛ4wfjj&##8ÒÒHÕ yX//deõÿúoÿäáyÿäµÿÞ­##u##uýõæ€k#®ÿµÿE¿ïïÆîèªÔsÞxÞ¯îîìÛpúÿïÕÿÚ¹Í
+?ÿµÅÅH
+°àæ)  ð0ÿ4Œ>AiáHETéz[ô€`fRoÿõîxR-rÿ~«pÿúú A¬A¬Tpª¶ÞžºØ¿ØÂÿcGÉÕÌßß>Îæó>ðõÞ³öÿÿÿüõõõÿÿ2Ø80	B
+0
+`
++p	PÀÐàðfp»
+ÀÁ$greyAliceBlueAntiqueWhiteAquamarineAzureBeigeBisqueBlackBlanchedAlmondBlueBlueVioletBrownburlywoodCadetBluechartreusechocolateCoralCornflowerBluecornsilkCyanDarkGoldenrodDarkGreenDarkKhakiDarkOliveGreenDarkOrangeDarkOrchidDarkSalmonDarkSeaGreenDarkSlateBlueDarkSlateGrayDarkTurquoiseDarkVioletDeepPinkDeepSkyBlueDimGrayDodgerBlueFirebrickFloralWhiteForestGreengainsboroGhostWhiteGoldGoldenrodGrayGray0Gray1Gray10Gray100Gray11Gray12Gray13Gray14Gray15Gray16Gray17Gray18Gray19Gray2Gray20Gray21Gray22Gray23Gray24Gray25Gray26Gray27Gray28Gray29Gray3Gray30Gray31Gray32Gray33Gray34Gray35Gray36Gray37Gray38Gray39Gray4Gray40Gray41Gray42Gray43Gray44Gray45Gray46Gray47Gray48Gray49Gray5Gray50Gray51Gray52Gray53Gray54Gray55Gray56Gray57Gray58Gray59Gray6Gray60Gray61Gray62Gray63Gray64Gray65Gray66Gray67Gray68Gray69Gray7Gray70Gray71Gray72Gray73Gray74Gray75Gray76Gray77Gray78Gray79Gray8Gray80Gray81Gray82Gray83Gray84Gray85Gray86Gray87Gray88Gray89Gray9Gray90Gray91Gray92Gray93Gray94Gray95Gray96Gray97Gray98Gray99GreenGreenYellowhoneydewHotPinkIndianRedivoryKhakilavenderLavenderBlushLawnGreenLemonChiffonLightBlueLightCoralLightCyanLightGoldenrodLightGoldenrodYellowLightGrayLightPinkLightSalmonLightSeaGreenLightSkyBlueLightSlateBlueLightSlateGrayLightSteelBlueLightYellowLimeGreenlinenMagentaMaroonMediumAquamarineMediumBlueMediumForestGreenMediumGoldenrodMediumOrchidMediumPurpleMediumSeaGreenMediumSlateBlueMediumSpringGreenMediumTurquoiseMediumVioletRedMidnightBlueMintCreamMistyRosemoccasinNavajoWhiteNavyNavyBlueOldLaceOliveDrabOrangeOrangeRedOrchidPaleGoldenrodPaleGreenPaleTurquoisePaleVioletRedPapayaWhipPeachPuffperuPinkPlumPowderBluepurpleRedRosyBrownRoyalBlueSaddleBrownSalmonSandyBrownSeaGreenseashellSiennaSkyBlueSlateBlueSlateGraysnowSpringGreenSteelBlueTanThistletomatoTransparentTurquoiseVioletVioletRedWheatWhiteWhiteSmokeYellowYellowGreen
++T
++ÄÛø
++Gyµ 0@P`p °ÀÐàð 0@P`p °ÀÐàð 0@P`p °ÀÐàð 0@P`p °ÀÐàð 0@P`p °ÀÐàð 0@P`p °ÀÐàð 0@P`p °ÀÐàð 0@P`p °ÀÐàð 0@P`p °ÀÐàð		 	0	@	P	`	p			 	°	À	Ð	à	ð	
++
++ 
++0
++@
++P
++`
++p
++
++
++ 
++°
++À
++Ð
++à
++ð
++
+
+ 
+0
+@
+P
+`
+p
+
+
+ 
+°
+À
+Ð
+à
+ð
+
+
+ 
+0
+@
+P
+`
+p
+
+
+ 
+°
+À
+Ð
+à
+ð
+
+
+ 
+0
+@
+P
+`
+p
+
+
+ 
+°
+À
+Ð
+à
+ð
+ 0@P`p
+
+ $(,.fileþÿgrgb.c  "0p BÀ .textÁ
+.data°ê.bss.xdata(.pdata0
+.rdataRstrdup strchr strstr ` free nxpmReadRgbNamesxpmGetRgbNametheRGBRecordsxpmGetRGBfromNamexpmFreeRgbNames__imp_tolowerxpmstrcasecmpscan.o/         1346471172  0     0     100666  4358      `
++db
+#.text	
+  P`.data@PÀ.bssPÀ.rdatap
++@P@.xdata\ô
++@0@.pdata<P
+Ì
+@0@AWAVAUATUWVSHìxHŒ$ðŒ$àH$ÀH$ÈMÌD$ÐD¬$ètH$ðö
+ÖH$ÀèH$ÀHÂèHD$P
+ÿtH$È0¬$ÐIÄ$ÐÁáèH
+ÀHD$H$Ð
+À$ÐH$ÈE}þAULt$HHt$XMG\$dèHÍÖH@LD$@HÁàHD0HD$8ñèH
+ÀIÃHEÂøA¹ÉB²ùA÷áž\LI[Áê¯Ð)ÑAýÈÊA¶AvLL\$@IØf.ù)ÑÈA÷áÑÁéÈA÷áž\Áê¯Ð)ÑÈÊA¶AIÀM9ØuËJ\;ÆA$ÇHÅ0IÄAIÆH;l$8
+BÿÿÿHt$X\$dD$ÐLD$H1ÿHT$PH$ÀE1öè1Ò1ÉèHŒ$ðAÇt)H$ðöÄïHJpzhHr0HL$h$Ð
+À»$ÐH$ÈHl$HèIÔH@HÁàLl0
+ÿt;1É1Àë
+DÂDE)ÊD9®À9øt9ØuãÀ¹9øuðE
+ÿ
+×D¶MD¶EH]¶EHL$pD$ èHL$pèH
+ÀID$(×IÄ0HÅM9ì
+lÿÿÿHL$HèDú1Éè1ÀHÄx[^_]A\A]A^A_ÃHPHT$Pé>ýÿÿ9ÇhÿÿÿM
+ö¬IÆHD$81ÒLD$8ILH
+ÉtHT$0èHT$0IDHÂHú(uÓéfÿÿÿfD¶MD¶E1É¶EDúD$ èH
+ÀHÁÿÿÿèH
+ÀID$(
+)ÿÿÿHL$HèDú1Éèžýÿÿÿé2ÿÿÿHL$Hèžýÿÿÿé
+ÿÿÿH@HÁàHD$hHD$8éFÿÿÿöÄ
+þÿÿ$ÐL$ð
+ÀMppAxhIp0A
+þÿÿé¹þÿÿ@žýÿÿÿéÁþÿÿfD
+Éu,B
+ÀuHÇBÇÇB1ÀAÇÃ@1ÀAÇÃfDAWAVAUATUWVSHì(L¬$LŽ$E1äHËDÆD$H	Imÿ$L=
+Àt^1ÿ
+öuëHÇHÅ9÷t5EàúH
+Aÿ×IèLêÁAÿÖ
+ÀtÛžýÿÿÿHÄ([^_]A\A]A^A_ÃDAÄD;€$u¢1ÀëØfffff.UWVSHì8AËHÖ
+Àu=jzH
++9ýv
+øH;u
+ëHÀ;tÇ9ýwñ9ýt A81ÀHÄ8[^_]Ã1ÀAÇHÄ8[^_]ÃFê9Ås
+Â
+©VëÌLD$(VÅèHÁLD$(žH
+ÉtšHVëÄAWAVAUATUWVSHìxHŒ$àH
+ÒIÎHÓLÆMÏHÇD$PHÇD$XÇD$`ÇD$dÇD$h¹Db
+jDá¯ÍE1íH
+ÿt
+÷ 
+øºèH
+ÀHD$XðL$`ÁáèH
+ÀHD$PH
+öt-HýÿÿEáAèLñHD$(HD$PHD$ H1öèžýÿÿ
+Àu6H
+ÛHdþÿÿEáAèLñ1öHD$(HD$PHD$ Hèýÿÿ
+ÀtnHL$XH
+Ét
+D$HèD$HHL$PH
+Ét
+D$HèD$HH
+ötT$dHñD$HèD$HHÄx[^_]A\A]A^A_ÃfDDo,éÿþÿÿL$dº0èH
+ÀHÆŠDD$dºAø\vž\¹\Â¯ÁD9ÀrðD9êDCêT$h1À
+ÒÝAMèH
+ÀHVAýÆ HHv
+EEþJTHÈÆ HÀH9ÐuôJLH
+ÿÆttöÄtmút_öÄ"HRHÁâHWp1ÛHLH
+Ét
+HT$HèH
+ÀHD
+HT$HÑHÃHû(uÏë.Džýÿÿÿ1öéþÿÿ@H
+kèH
+ÀHF(D$hDD$dLL$PHòLñH|$0Dl$(D$ è ÷ÿÿ
+À
+:þÿÿT$dHL$PA/EgEoIwAW
+HT$XD$HIWèD$HéJþÿÿM
+Àt;E`
+AhDá¯Íé<ýÿÿžýÿÿÿ1öéÖýÿÿ@žýÿÿÿéÈýÿÿfD1ÉE1ä1íéýÿÿHGpHÐéÝþÿÿ .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|#%02x%02x%02xNone
++O
+0
+`
++p	PÀÐàð	B
+0
+`
++p	PÀÐàðb0`pP	â
+0
+`
++p	PÀÐàðZ` R
+`4y	Dbr<÷ÆØâ
+
+
+
+q
+š¹
+Ñ
+Û
+ï
+Úèê !š1
+H
+a"!êh
+£š
+	
+
+
+ $(,048.fileþÿgscan.c ` #  <` G .texty	 .data.bss.rdatap.xdata\.pdata<bu  € ž Å sprintf strdup free Õ å ó  
+ .ScanOtherColorsstoreMaskPixelMSWGetImagePixels.isra.1storePixelXpmCreateXpmImageFromImage__imp_SelectObject__imp_GetPixelXDefaultScreenXDefaultColormapboundCheckingMallocXQueryColorsxpmReadRgbNamesxpmFreeRgbNamesxpmGetRgbNameboundCheckingReallocboundCheckingCallocxpmFreeColorTablesimx.o/         1346471173  0     0     100666  2890      `
++d%.textpÜ\
++ P`.data@PÀ.bssPÀ.xdata\L@0@.pdataŽšÀ-@0@AÐø	vAøvQ¿1Àé7úFÁóÃA©Ãfff.HcÉéHcÒHcÉéDHcÒé1ÀÃffff.1ÀÃffff.WVSHì H
+º
+HÎH	ÿÓHÇºÿÓøHÄ [^_Ãffffff.1ÀÃffff.WVSHì01ÀM
+ÀLÃLÎtVA8#tXLL$,LD$(HT$$HÙè
+Àt]DD$(DL$$L$,A¶ÀA¶ÑDNÁàDFN	Ð¶ÑÁâ	ÐžHÄ0[^_ÃLÁèø}ø€ø
+t1ÀHÄ0[^_Ã@ŸKèþÿÿŸKÇÁçèyþÿÿŸKøD$$èjþÿÿŸKÇÁçè\þÿÿŸK	øD$(èMþÿÿŸK
++ÇÁçè?þÿÿøD$,é9ÿÿÿ@ŸKè'þÿÿŸKD$$èþÿÿŸKD$(è
+þÿÿD$,é	ÿÿÿ@ŸKè÷ýÿÿŸKÇÁçèéýÿÿŸKøD$$èÚýÿÿŸKÇÁçèÌýÿÿŸKøD$(èœýÿÿŸKÇÁçè¯ýÿÿøD$,é©þÿÿ@žÃf.E
+É~,AéKLÈfAÂA@ÁèfÁêA@APIÀI9ÈußóÃffff.1ÀÃffff.UWVSHì8¹¬$Œ$DÆèH
+ÀHÃt(HÇD$ AñAžúéÿkH{
+sHØHÄ8[^_]ÃH
+Ét
+éfDóÃfffff.SHì H
+ÉHËtH	ÿHÙHÄ [ëÀHÄ [Ã20`pR0`pb0`pP20$08@KPX
+`cps±ÀÃ$Ð\(`f4p£8°³<À@ 2P@fT
+ý"F#ß
+R
+4G T!&$
+
+ $(,048<@DHLPTX\`dhlptx| €š¬°.fileþÿgsimx.c 0 %@ 9P N` ]p l zÀ Ð ` £p °° ŒÀ É  Ô@ .textf
++.data.bss.xdata\.pdataŽ-âö	malloc calloc realloc 
+ strlen free .hexCharToIntboundCheckingMallocboundCheckingCallocboundCheckingReallocXDefaultVisualXDefaultScreenXDefaultDepthXDefaultColormapXParseColorXAllocColorXQueryColorsXFreeColorsXCreateImageXImageFreeXDestroyImage__imp_GetDeviceCaps__imp_CreateBitmap__imp_DeleteObjectxpmGetRGBfromNameWrFFrBuf.o/     1346471173  0     0     100666  879       `
++dì.textp P`.data@PÀ.bssPÀ.rdatat@P@.xdata
+@0@.pdata
+Î@0@VSHì(HÖHèH
+ÀHÃtCHñèHñHcÐIÙAžèHÙHÆè1ÀþÀèHÄ([^Ãf.žÿÿÿÿëèwB0`g
+
++!5@
+.fileþÿgWrFFrBuf.c .textg.data.bss.rdata.xdata
+.pdata
+fopen strlen fwrite fclose XpmWriteFileFromBuffer
++parse.o/        1346471173  0     0     100666  9240      `
++dz/.textð4s P`.data@ô²
+@`À.bssPÀ.xdatat4@0@.pdata<šä
+@0@.rdataPä@P@AWAVAUATUWVSHìX
++DŒ$À
++L¬$Ð
++ÖHËD$°
++
+µDÍA¯ÈèH
+ÀIÄjAÿÁAÿ@DøÆPv	ý¡$°
++FÿMæÇD$@HÁà
+ÉHD$HòLd$8t$DHÙèD$D
+ÀºHD$HMdf.1öE
+ÿL¬$Puë?HS¶HÂHSAD5HÆA9÷v"øtÜ
+ÀtØHKèAD5HÆA9÷wÞ
+íèHŒ$È
++1öL¬$Pë@ÆHÇ09îÁHLêè
+Àuâ9õªA6IÆM9æ
+ZÿÿÿD$@$°
++9D$@
+
+ÿÿÿLd$8H$Ø
++L 1ÀéZLl$P1À¹
+íLïóH«TLŽ$È
++Å¿ë¶RIÆ0f<PÇ9ï*ILŸ:JDüPH
+ÀuØº¹èH
+ÀJDüPjIë¶H$P1À¹@
+íH×óH«t&H$È
++Å°H
++HÂ0¶	fLPÀ9èuçD$°
++E
+É'ÿÿÿDnÿLçE1öIÁåHÙè
+öxJl/ë?HSŸHÂHSPÿúþwFH·DPf
+Àt7·ÀèHÇH9ï2øt»
+Àt·HKèPÿúþvœLáèžþÿÿÿHÄX
++[^_]A\A]A^A_ÃD$°
++E
+ÀD~ÿLçÇD$0IÁçHÙè
+öÛNt?ëo@HCŸ(HÀHCEÿ=þïøu_HSŸHÂHSPÿúþwTHcíHTìPH
+ÒtGH·Bf
+Àt<·ÀèHÇL9÷eøt
+ÀtHKèÅë
+ÀtHKèë¡IIMH
+ÉtèIÅI9Ýuééäþÿÿ@Ld$8éÖþÿÿ$°
++
+ÒhýÿÿFÿLçE1öH
+HD$0HÙèHl$0Hý
+öf1ÒëHK¶HÁHKPHÂA9×v.øtÚ
+ÀtÖHKHT$(èHT$(PHÂA9×wÒH$PLéèHH
+À#þÿÿH@HÇH9ï
+ÿÿÿAÆD;Ž$°
++
+MÿÿÿéüÿÿfAÆD;Ž$°
++
+fýÿÿézüÿÿfD$0$°
++9D$0
+ÿýÿÿIIMH
+ÉtèIÅI9Ýuéé5üÿÿIIMH
+ÉtèIÅI9ÝuééqýÿÿIf.IMH
+ÉtèIÅI9ÝuéLáèžýÿÿÿéDýÿÿžýÿÿÿé:ýÿÿffff.AWAVAUATUWVSHì8D4L€$šHËH$L$L$L¬$°E
+ÒHl$0ÇD$,E1öE1ÿE1äE1íAžHêHÙèøusH5Hï¹óŠu`AžHêHÙè
+ÀtKÆHéº_ÆD40èH
+Àt2HêH)ÂHòHúQ=HúHHº_èH
+ÀuÎŸþÿÿÿðHÄ8[^_]A\A]A^A_ÃDHúHúuœE
+öuËH5'HÇ¹óŠužH$ HÙè
+Àt€A¶HÙèl$,
+ÿÿÿE
+ätE
+ítE
+özÿÿÿE
+ÿqÿÿÿH$žH$À1öÇÇéSÿÿÿE
+ÿ
+EÿÿÿH5
+HÇ¹óŠ
+.ÿÿÿH$HÙè
+ÀÿÿÿA·émÿÿÿE
+í
+ÿÿÿH5¹HÇóŠ
+îþÿÿH$HÙè
+ÀÖþÿÿAµé-ÿÿÿE
+ä
+ÅþÿÿH5HÇ¹óŠ
+®þÿÿH$HÙè
+ÀþÿÿAŽéíþÿÿè
+ÀŸþÿÿÿþÿÿH$HÙè
+ÀiþÿÿH$HÙè
+ÀQþÿÿH$ HÙè
+À9þÿÿHl$0AžHÙ1öHêè
+ÀþÿÿøtoHŒ$ÀMàÂHéÇè
+À
+¥H$žAžHÙHêè1ÒøtHŒ$À1öéŸýÿÿH5¹HïóŠÂ¶ÒëÖH5¹HïóŠ
+zÿÿÿH$ÀLâHÙÇè1Ò
+ÀtLêHÙè1Ò
+ÀÂHŒ$ž1öéLýÿÿLêHÙè
+ÀÀ¶ÀéCÿÿÿffffff.AWAVAUATUWVSHìh$žHË$žº0D$ÀL$ÈèH
+ÀHD$@>D³4E
+ö
+¹D¬$žE
+í$ÀHT$@HÇD$8ÀHT$0D$L$žèH@HÁàHD0HD$X$ÀèHD$PHÙèL$LèHT$0H
+ÀHÇHD€$À1ö¬$ÀE
+äu&éHS¶HÂHS7HÆ9õvøtß
+ÀtÛHKè7HÆ9õwáŒ$ÀHD$PÆDaÆ$`E1ÿÇD$HHT$`AžHÙèAÄE
+ä]E
+ÿu+L-Då1öI|õAöHùèH9ÅtGHÆHþuá|$H
+ÿÉE
+ÿHŽ$`ÐHT$`HñBÆD$`E1ÿèéyÿÿÿDHT$`IèHùè
+Àu¥l$H
+íu @AÆÆ$`A¿Dt$Hé8ÿÿÿHŽ$`HñHÁÿþþþ÷Ò!Ð%téÂÁê©DÂHQHDÊÀHÙH)ñÁèH
+ÀHÁ}D$HHT$0H
+ÂHòèévÿÿÿfDHñHÁÿþþþ÷Ò!Ð%téÂÁê©DÂHQHEÑÀHÚfÇ éñþÿÿt$H
+öD$HHT$0HŽ$`H<ÂHò
++HÂÿþþþ÷Ñ!È%téÁÁé©DÁHJHDÑÀHÚH)òJèH
+ÀHÁH­HòèHD$00HD$8HD$XH9D$0
+EýÿÿH$ÈHT$@H1Àë$žHL$@èžþÿÿÿHÄh[^_]A\A]A^A_ÃŒ$žýÿÿHD$0LD$8H$ÐHè
+Àoýÿÿ$žHL$@D$(èD$(ë¡$žHL$@èžýÿÿÿëÆ0"Æ1HÙèD$žÆ1"E
+Û1ÿÿÿ$žD¬$ÀHŽ$`D€$ÀH|$@1íDŒ$žDŽ$ÀêAÅAìT$8DéèH
+ÀHYÿÿÿ1ÒE
+öËD|$HLd$0EïIüIíHßHÅHÓëHW¶HÂHWD
+HÃA9Þv!øtÝ
+ÀtÙHOèD
+HÃA9ÞwßHûLçLd$0IèAþLíEýD|$HCÆD v!AÿvHH$ÐIèè
+À
+þÿÿHÙèÆ$`ëHT$`ÀHñÆD`èHT$`AžHÙè
+ÀtPŒ$`tËHñDHÁAÿþþþA÷ÐD!ÂâtäAÐAÁè÷ÂADÐLAIDÈÒHÙfÇ ëHñHÁÿþþþ÷Ò!Ð%téÂÁê©DÂHQHDÊÀHÙH)ñÁèH
+ÀÔýÿÿHòHÁHD$(è9l$8LD$(LG(Æ$`w HÅHÇ0A9ï/þÿÿéýÿÿf.HÙèëÖÆéÑþÿÿÆéÇúÿÿžýÿÿÿé
++ýÿÿfff.AWAVAUATUWVSHìXH-L%8AœHËH$šL$°è¹AŸ	èLD$LHT$@HÙHD$0è
+ÀuRfHD$@HîLéHÇóŠt^LæHÇLñóŠÍHÁèHÙèLD$LHT$@HÙè
+Àt·HL$0D$(èD$(HÄX[^_]A\A]A^A_Ã@¹	LæHÇóŠAÇÂA(×EŸÿE
+ÿ\H|$0ÇD$<1öVHùT$8T$<èH
+ÀHD$0»HvHt$@H|$0HÆL,ÇH÷ëHÇŸÿ
+ÀuïL$L)÷é)ùèH
+ÀIE€DD$LúHÁHòAèA)øèHL$@èHÙèLD$LHT$@HÙè
+À
+J¹E1öèIEë
+f.AöHD$@Hî¹HÇóŠHÇLæ¹	óŠAÇÀA(ÇEŸÿE
+ÿAvIMõèH
+Àt~HT$@IEHÙJðèLD$LHT$@HÙè
+ÀyÿÿÿAuT$8HL$0D$(èD$(éEþÿÿE
+ÿ@ÆE
+ötJD$<@öEuøt$8H|$0éaþÿÿ1öë×HL$@èT$8HL$0EuèžýÿÿÿéïýÿÿIMèIÇEë£HL$@èòHùèžýÿÿÿéŸýÿÿIÇEAÇEéIÿÿÿHL$@èT$8HL$0IÇEAÇEèžýÿÿÿéwýÿÿHD$@HÁ1ÛèHL$0èÇD$8T$8H$°H$š1ÀHé/ýÿÿD$8
+Àt°E
+ÿH\$0uÎHL$@èëÂfDAUATUWVSHìž1ÿM
+ÀHÎHÕLÃÇ$šÇ$¬HÇD$hHÇD$pHÇD$xHÇ$HÇ$t
+A1ÿöÄ@ÇHñè
+ÀAÅt
+DèHÄž[^_]A\A]Ãf.H$¬L$L$H$HñHD$@H$šHD$8H$€HD$0H$ HD$(H$HD$ èÏðÿÿ
+ÀAÅ
+wÿÿÿ
+ÿ
+ìD$$Ld$PAøv	úÛLL$hHñLd$ èWôÿÿ
+ÀAÅ
+1
+ÿ
+XHD$pD$D$$HñLd$0HD$8HD$hHD$($D$ èaêÿÿŒ$AÅvŒ$«E
+í
+Ú
+ÿ
+uH
+ÛföÄt
+$¬
+À
+ÝHÇC0ÇC($
+ÿE$E$E$E
+HD$hHEHD$pHEt!HD$xHCH$HCH$HC$š
+Àþÿÿ$ 
+C $€C$éþýÿÿŒ$vŒ$žHL$hH
+Ét
+$èHL$pH
+ÉtèHL$xH
+ÉtèH$H
+ÉtèH$H
+Éýÿÿèé
+ýÿÿfHT$xHñèéþÿÿLáè
+ÀAÅ
+^ýÿÿD$$éþýÿÿH$HñèévþÿÿLáèé8ÿÿÿLáèéEþÿÿ$E$E$E$E
+HD$hHEHD$pHEéÏüÿÿH$HñèéýÿÿHS0LC(Hñègøÿÿ
+ÀþÿÿAÅéŽþÿÿBDFIK
++K
+0
+`
++p	PÀÐàð
++G
+0
+`
++p	PÀÐàð
++
+0
+`
++p	PÀÐàð	¢
+0
+`
++p	PÀÐàð0`pPÀÐÃÐ	 	40@úHé`XPMEXT#define_width_height_ncolors_chars_per_pixelXPMENDEXTsmg4gc?¬V|Þô9ËÜúCœ
+Jm«D
+Pm
+
+
+·
+ø#~ŸÞþ
+3Ph 
+È ë
+
++	#	L	]		Ú	]
++f
++Ê
++
+
++
+
++@
+!
+"
+#
+1
+$Ý
+ô
+$5
+%v
+&
+%ª
+%Ç
+4ç&÷"(
+ŒÕ$SZx'×ßñ'b(­Ó)Ýå÷'
+o('¹*ü*!5?*h*Š°ôx+¯%ŸÍßõ	,-L,Y.i.À, 
+
+ $(,048.fileþÿgparse.c Ð  	 .@ A .textés.data(.bss.xdatat.pdata<.rdataMN[i } getc strcmp  free  « strchr · xpmatoui strlen strcat strncmp strcpy Á Ó á î strncpy   $ . ? PParsePixelsxpmParseValuesxpmParseColorsxpmParseExtensionsxpmParseDataxpmColorKeys__imp_isspaceboundCheckingMallocxpmNextStringboundCheckingCallocxpmHashSlotxpmNextWordxpmNextUIxpmFreeColorTablexpmHashInternxpmGetStringboundCheckingReallocXpmFreeExtensionsxpmParseHeaderxpmGetCmtxpmHashTableInitxpmHashTableFreeWrFFrDat.o/     1346471174  0     0     100666  841       `
++d.text`ÜT P`.data@PÀ.bssPÀ.xdata
+<@0@.pdata
+H|@0@SHìHËLD$0HÑHT$pÇD$0è
+Àu.LD$0HT$pHÙèHL$pD$(èHL$0èD$(HÄ[Ã0`!7EO
++.fileþÿgWrFFrDat.c .text`.data.bss.xdata
+.pdata
+ 3 L \ kXpmWriteFileFromDataXpmCreateXpmImageFromDataXpmWriteFileFromXpmImageXpmFreeXpmImageXpmFreeXpmInfo
++WrFFrI.o/       1346471174  0     0     100666  3804      `
++d
+%.textÐÐ@ P`.data@PÀ.bssPÀ.rdataÀÔ@P@.xdata$@0@.pdatažP
+@0@AWAVAUATUWVSHìhH
+ÉIÌHÕL$ÀÇèøZH
+LáèH
+ÀHÃŒÇD$Tº/LáèHpH
+Àº.IDôHñèH
+ÀtCH|$`HòHùèHùº.èH
+Àt
+fÆ_HÁº.èH
+ÀuëHþº-HñèH
+Àt2H|$`H9þt
+HòHùèHùëÆ_HÁº-èH
+ÀuëHþHŒ$ÀH$ÀE1ööÄAÆöÄ
+ÝÇD$\H8IðHÙèE
+öt H$ÀL@M
+ÀtHZHÙèEDMHbHÙD$(E
+D$ DEèHŒ$ÀtH$Àö
+
+T$\
+Ò
+òH
+~IÙAžºèE
+öt H$ÀL@M
+ÀtHZHÙèE
+H}
+ÀèLg0L,@IÁåMåLHHÙ1öèLL7M
+ÉtHHHÙL0èHÆHþ(uÒH
+~IÙAžºLçèM9ì¡IÄ0ëHcÐH5
+¹I|þóŠ|øýÿÿI|ýH5 ¹óŠ
+hýÿÿH$MàH$`èH
+H$`ÿH
+ÀHÃÇD$TéFýÿÿJ(ÇD$\
+É
+þÿÿé
+þÿÿE
+öt H$ÀLBM
+ÀtHZHÙèEDmULuLeÁD$XA¯ÍT$PÁèH
+ÀHD$8Æ"HÀ|$PHD$0A¿l$XAEÿHßHÀHD$@H¯ÅHD$0HD$HfHD$01ÛE
+íHÆt6AHñIèHÃHîH@HÁàIèA9ÝwÙHT$@HD$HM$LD$8HÆ"Æ@HùAÇèD;|$PuHûE
+ítEl$XH|$01öfAŽHùIèHÆHïH@HÁàIèA9õwÙAEÿHÀH¯ÅHD$0HD$0HL$8HÚÆ"Æ@èHL$8èD$\
+ÀH$ÀB(Hr0
+ÀtoèLfH@M,ÄLHHÙè~Hn
+ÿt1öLDõH HÙHÆè9÷wäM9ìLætIÄë¶MàHé¡ýÿÿH
+§IÙAž
+ºèH
+µIÙAžº1öè|$Tt-ÿHÀ0H9ÃtHÙèðHÄh[^_]A\A]A^A_ÃHÙÿëßE1öéûÿÿH
+vIÙAžºèéïûÿÿDJ$DB HoHÙèéÇûÿÿÿH5HX0ÇD$TéýúÿÿŸÿÿÿÿétÿÿÿŸýÿÿÿéLÿÿÿffff.VSHìšH$àHÖLÂMÈL$H\$ è
+Àu<H
+ÛtKHL$@HÚèLD$@H$HñèyùÿÿH$D$8èD$8HÄš[^Ãf.H$E1ÀHñè=ùÿÿëÂimage_name.Zcompress > "%s"w.gzgzip -q > "%s"/* XPM */
++static char * %s[] = {
++/*%s*/
++"%d %d %d %d %d %d XPMEXT",
++"%s	%s %s%s,
++,
++"XPMEXT %s",
++"%s",
++"XPMENDEXT"};
++
++
+0
+`
++p	PÀÐàð		0`#0Å+;
+Cd|ŒÑëC
+N
+k
+s
+
+
+Ç
+Ú÷
+ÿ
+*
+4
+EL
+X
+i
+
+¿
+Ó
+ã
+ê
+øF
+N
+v
+þ
+
+0
+n§ æ
+î
+
+
+0
+<
+OV
+kx!š¹
+Ìà
+è
+óú
+X"n#$
+
+
+.fileþÿgWrFFrI.c 
+0 .textÅ@.data.bss.rdata¹.xdata$.pdata3@M^fwrite fputs strlen fopen strrchr strchr strcpy fprintf sprintf l strncpy free fclose   Š ¶XpmWriteFileFromXpmImageXpmWriteFileFromImagexpmColorKeys__imp__popen__imp___iob_func__imp__pcloseboundCheckingMallocXpmCreateXpmImageFromImagexpmSetInfoXpmFreeXpmImage
+\ No newline at end of file
+diff -Naur vim73.orig/src/xpm/x64/lib/libXpm.lib vim73/src/xpm/x64/lib/libXpm.lib
+--- vim73.orig/src/xpm/x64/lib/libXpm.lib	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/x64/lib/libXpm.lib	2013-06-07 17:07:39.128896937 +0000
+@@ -0,0 +1,469 @@
++!<arch>
++/               1345988052              0       12499     `
++u______________________èÕnÚ@Ú@Ú@Ú@Ú@Ú@Ú@Ú@Ú@Ú@Ú@Ú@Ú@Ú@üüüü
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+žØžØžØžØžØÍØÒlÝÆÝÆÝÆÝÆÝÆÝÆÝÆÝÆÝÆÝÆÝÆç2ç2ç2ç2ïØïØô<ô<ô<ô<BBBBBBBBBBBBBBBBBBBBBBBBBB;ö;öFpFpP`P`P`ÀÀÀÀŽ
++Ž
++Ž
++××××××??_C@_01NOFIACDB@w?$AA@??_C@_02DKCKIIND@?$CFs?$AA@??_C@_02HCDJPINJ@?4Z?$AA@??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_03OOBEOJGI@?$CC?$CFs?$AA@??_C@_04ICMOPAOK@?$CFs?0?6?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0L@NDIFBCJA@image_name?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@XpmWriteFileFromImageXpmWriteFileFromXpmImageXpmWriteFileFromData??_C@_01CLKCMJKC@?5?$AA@??_C@_01GOHFPIOK@m?$AA@??_C@_01JEJKBAGA@g?$AA@??_C@_01LKDEMHDF@s?$AA@??_C@_01PAPGNFGE@c?$AA@??_C@_02PGAMAILP@g4?$AA@??_C@_06HPJDNAON@_width?$AA@??_C@_06MOPGFMAJ@XPMEXT?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@??_C@_07MJPPKBHL@_height?$AA@??_C@_08FOGANHJK@_ncolors?$AA@??_C@_09OINMEHGD@XPMENDEXT?$AA@??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@xpmColorKeysxpmParseColorsxpmParseDataxpmParseExtensionsxpmParseValuesXpmWriteFileFromBufferXAllocColorXCreateImageXDefaultColormapXDefaultDepthXDefaultScreenXDefaultVisualXDestroyImageXFreeColorsXImageFreeXParseColorXQueryColorsboundCheckingCallocboundCheckingMallocboundCheckingRealloc??_C@_04OHJIHAFH@None?$AA@??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@XpmCreateXpmImageFromImage??_C@_03CILPFPCI@Tan?$AA@??_C@_03PADCEAKC@Red?$AA@??_C@_04CAKOHOCJ@Blue?$AA@??_C@_04GDBIAANM@grey?$AA@??_C@_04HPKDHBOB@snow?$AA@??_C@_04ICNCCCFD@Cyan?$AA@??_C@_04IDKACLOG@Pink?$AA@??_C@_04KFNAIHAE@Gray?$AA@??_C@_04MJMKNOJB@peru?$AA@??_C@_04PABHPHAJ@Gold?$AA@??_C@_04PCFHDAMD@Plum?$AA@??_C@_04PDAFKIPB@Navy?$AA@??_C@_05BAFHKIGF@Gray8?$AA@??_C@_05BPGNDIAE@Black?$AA@??_C@_05CKEFAMIJ@Azure?$AA@??_C@_05EGDKJJDN@Brown?$AA@??_C@_05EOEDPHMI@Beige?$AA@??_C@_05GGOIJPPE@Green?$AA@??_C@_05IONEIFOL@Gray6?$AA@??_C@_05JEMJJCE@Gray9?$AA@??_C@_05JHMPLEKK@Gray7?$AA@??_C@_05JNPICLKJ@Coral?$AA@??_C@_05KFPJNGCI@Gray5?$AA@??_C@_05LMOCOHGJ@Gray4?$AA@??_C@_05MBJFBDCM@Gray1?$AA@??_C@_05MLLCELJD@linen?$AA@??_C@_05NIIOCCGN@Gray0?$AA@??_C@_05NNJJIMHF@ivory?$AA@??_C@_05OKLIEAOP@Gray2?$AA@??_C@_05PBMHPMDG@Khaki?$AA@??_C@_05PDKDHBKO@Gray3?$AA@??_C@_05PIEKEAEL@Wheat?$AA@??_C@_05PLKILNHI@White?$AA@??_C@_06CAMJFDIO@Gray68?$AA@??_C@_06CBALDJLJ@Gray78?$AA@??_C@_06CCIPONNH@Gray58?$AA@??_C@_06CDENIHOA@Gray48?$AA@??_C@_06CFIGEFAL@Gray18?$AA@??_C@_06CGACJBGF@Gray38?$AA@??_C@_06CHMAPLFC@Gray28?$AA@??_C@_06CKFHHOIE@Gray88?$AA@??_C@_06CLJFBELD@Gray98?$AA@??_C@_06DCIOCFPC@Gray99?$AA@??_C@_06DDEMEPMF@Gray89?$AA@??_C@_06DIBAAIPI@Gray79?$AA@??_C@_06DJNCGCMP@Gray69?$AA@??_C@_06DKFGLGKB@Gray49?$AA@??_C@_06DLJENMJG@Gray59?$AA@??_C@_06DMJNHEEK@Gray19?$AA@??_C@_06DONLMKBD@Gray29?$AA@??_C@_06DPBJKACE@Gray39?$AA@??_C@_06GCLALPIA@Violet?$AA@??_C@_06GEHONCEN@purple?$AA@??_C@_06ICCAKDNH@Yellow?$AA@??_C@_06IGOCDBII@Gray84?$AA@??_C@_06IHCAFLLP@Gray94?$AA@??_C@_06IJDDAKAH@Gray14?$AA@??_C@_06IKLHNOGJ@Gray34?$AA@??_C@_06ILHFLEFO@Gray24?$AA@??_C@_06IMHMBMIC@Gray64?$AA@??_C@_06INLOHGLF@Gray74?$AA@??_C@_06IODKKCNL@Gray54?$AA@??_C@_06IPPIMIOM@Gray44?$AA@??_C@_06JACIDLEG@Gray15?$AA@??_C@_06JCGOIFBP@Gray25?$AA@??_C@_06JDKMOPCI@Gray35?$AA@??_C@_06JEKFEHPE@Gray75?$AA@??_C@_06JFGHCNMD@Gray65?$AA@??_C@_06JGODPJKN@Gray45?$AA@??_C@_06JHCBJDJK@Gray55?$AA@??_C@_06JODLGKPO@Gray95?$AA@??_C@_06JOHNHAPC@Salmon?$AA@??_C@_06JPPJAAMJ@Gray85?$AA@??_C@_06KAFIOHJN@Gray27?$AA@??_C@_06KBJKINKK@Gray37?$AA@??_C@_06KCBOFJME@Gray17?$AA@??_C@_06KENFJLCP@Gray47?$AA@??_C@_06KFBHPBBI@Gray57?$AA@??_C@_06KGJDCFHG@Gray77?$AA@??_C@_06KHFBEPEB@Gray67?$AA@??_C@_06KMANAIHM@Gray97?$AA@??_C@_06KNMPGCEL@Gray87?$AA@??_C@_06LENEFDAK@Gray86?$AA@??_C@_06LFBGDJDN@Gray96?$AA@??_C@_06LIIBLMOL@Gray36?$AA@??_C@_06LJEDNGNM@Gray26?$AA@??_C@_06LJLNHCPM@Bisque?$AA@??_C@_06LLAFGIIF@Gray16?$AA@??_C@_06LMAMMAFJ@Gray56?$AA@??_C@_06LMIDBFFB@Orange?$AA@??_C@_06LNMOKKGO@Gray46?$AA@??_C@_06LOEKHOAA@Gray66?$AA@??_C@_06LPIIBEDH@Gray76?$AA@??_C@_06MALJFOCL@Gray43?$AA@??_C@_06MBHLDEBM@Gray53?$AA@??_C@_06MCPPOAHC@Gray73?$AA@??_C@_06MDDNIKEF@Gray63?$AA@??_C@_06MEDECCJJ@Gray23?$AA@??_C@_06MFPGEIKO@Gray33?$AA@??_C@_06MGHCJMMA@Gray13?$AA@??_C@_06MIGBMNHI@Gray93?$AA@??_C@_06MJKDKHEP@Gray83?$AA@??_C@_06NALDPNEI@tomato?$AA@??_C@_06NALIJGAO@Gray82?$AA@??_C@_06NBHKPMDJ@Gray92?$AA@??_C@_06NIGAAFFN@Gray52?$AA@??_C@_06NJKCGPGK@Gray42?$AA@??_C@_06NKCGLLAE@Gray62?$AA@??_C@_06NLOENBDD@Gray72?$AA@??_C@_06NMEFHGAJ@Maroon?$AA@??_C@_06NMONHJOP@Gray32?$AA@??_C@_06NNCPBDNI@Gray22?$AA@??_C@_06NPGJKNIB@Gray12?$AA@??_C@_06OCIOPEIM@Gray80?$AA@??_C@_06ODEMJOLL@Gray90?$AA@??_C@_06OIBANJIG@Gray60?$AA@??_C@_06OJNCLDLB@Gray70?$AA@??_C@_06OKFGGHNP@Gray50?$AA@??_C@_06OLJEANOI@Gray40?$AA@??_C@_06OLNBEJPI@Sienna?$AA@??_C@_06ONFPMPAD@Gray10?$AA@??_C@_06OONLBLGN@Gray30?$AA@??_C@_06OPBJHBFK@Gray20?$AA@??_C@_06PAKNAFKG@Orchid?$AA@??_C@_06PAMJICPA@Gray71?$AA@??_C@_06PBALOIMH@Gray61?$AA@??_C@_06PCIPDMKJ@Gray41?$AA@??_C@_06PDENFGJO@Gray51?$AA@??_C@_06PEEEPOEC@Gray11?$AA@??_C@_06PGACEABL@Gray21?$AA@??_C@_06PHMACKCM@Gray31?$AA@??_C@_06PKFHKPPK@Gray91?$AA@??_C@_06PLJFMFMN@Gray81?$AA@??_C@_07BEDHGNF@DimGray?$AA@??_C@_07DHJFKJBB@HotPink?$AA@??_C@_07EGKCDIIG@Gray100?$AA@??_C@_07LFEAGNHO@Magenta?$AA@??_C@_07NPHLIBMI@Thistle?$AA@??_C@_07PJJBFELP@OldLace?$AA@??_C@_07PNJLOGGO@SkyBlue?$AA@??_C@_08BKNCNHLL@honeydew?$AA@??_C@_08DECOJLB@cornsilk?$AA@??_C@_08GKFCFKAC@DeepPink?$AA@??_C@_08KJABFMDC@NavyBlue?$AA@??_C@_08KJDCPJPL@lavender?$AA@??_C@_08MFJLKPPC@seashell?$AA@??_C@_08MPDGLOME@SeaGreen?$AA@??_C@_08OIIPPDDA@moccasin?$AA@??_C@_09BIACIJCM@DarkKhaki?$AA@??_C@_09BPADAHOC@chocolate?$AA@??_C@_09CAIKIAKL@LightPink?$AA@??_C@_09CBPIIJBO@LightCyan?$AA@??_C@_09CGAPEKNC@CadetBlue?$AA@??_C@_09DEFDJNGA@SlateGray?$AA@??_C@_09EHCEAFM@Firebrick?$AA@??_C@_09GHIAHKFI@VioletRed?$AA@??_C@_09GLNHDDDA@IndianRed?$AA@??_C@_09GPKCMEJ@LightGray?$AA@??_C@_09HBGGELGD@RosyBrown?$AA@??_C@_09IDIENFGE@LightBlue?$AA@??_C@_09IGCCILNJ@LawnGreen?$AA@??_C@_09IPCNOKOO@DarkGreen?$AA@??_C@_09JHLANABP@burlywood?$AA@??_C@_09JIGGJDDI@PaleGreen?$AA@??_C@_09KDCNEHNA@OliveDrab?$AA@??_C@_09LBCNGEEN@SlateBlue?$AA@??_C@_09MENJEMGM@SteelBlue?$AA@??_C@_09MFNHBCHG@MintCream?$AA@??_C@_09MIGKOGAO@gainsboro?$AA@??_C@_09NCIGFANI@LimeGreen?$AA@??_C@_09NKNFPLIJ@RoyalBlue?$AA@??_C@_09ODOKIMGN@AliceBlue?$AA@??_C@_09OGGDAFEL@Goldenrod?$AA@??_C@_09OKCCEKJG@PeachPuff?$AA@??_C@_09PDBAPE@OrangeRed?$AA@??_C@_09PKEKPHNP@Turquoise?$AA@??_C@_09POIPCADB@MistyRose?$AA@??_C@_0BA@FICOLOP@MediumVioletRed?$AA@??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@??_C@_0L@CHNAEACO@chartreuse?$AA@??_C@_0L@EBAICJFO@DarkOrange?$AA@??_C@_0L@GDAICLDE@MediumBlue?$AA@??_C@_0L@GDPGEMPN@DarkSalmon?$AA@??_C@_0L@IKFOHFNE@PowderBlue?$AA@??_C@_0L@IKHGMDBB@Aquamarine?$AA@??_C@_0L@IPLDLLMK@DodgerBlue?$AA@??_C@_0L@JFDGDMCP@LightCoral?$AA@??_C@_0L@JIMBJDOA@PapayaWhip?$AA@??_C@_0L@JPDLIDIP@DarkViolet?$AA@??_C@_0L@KFIMMJOB@GhostWhite?$AA@??_C@_0L@NCGDJKJ@DarkOrchid?$AA@??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@??_C@_0L@PDJLLNIH@BlueViolet?$AA@??_C@_0L@PKPGDMJG@SandyBrown?$AA@??_C@_0M@BKMBPOEB@FloralWhite?$AA@??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@??_C@_0M@DMHCPCEI@Transparent?$AA@??_C@_0M@GCHHLGNN@GreenYellow?$AA@??_C@_0M@GODNHLND@ForestGreen?$AA@??_C@_0M@HNCGGICD@YellowGreen?$AA@??_C@_0M@IGPDELNF@LightYellow?$AA@??_C@_0M@JADEIAIP@SpringGreen?$AA@??_C@_0M@JKKOJIPA@LightSalmon?$AA@??_C@_0M@NBNLJNOB@SaddleBrown?$AA@??_C@_0M@PFCNBHOF@NavajoWhite?$AA@??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@??_C@_0N@BEMAIPGH@MediumOrchid?$AA@??_C@_0N@EPKOGBBA@MediumPurple?$AA@??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@??_C@_0N@ILIFGKIL@MidnightBlue?$AA@??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@??_C@_0O@DAMODFNL@PaleTurquoise?$AA@??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@??_C@_0O@KNAELIFM@PaleVioletRed?$AA@??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@??_C@_0O@OIOECAME@LavenderBlush?$AA@??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@??_C@_0P@LOKKLDIA@LightSlateGray?$AA@??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@xpmFreeRgbNamesxpmGetRGBfromNamexpmGetRgbNamexpmReadRgbNames??_C@_01KDCPPGHE@r?$AA@??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@XpmReadFileToImageXpmReadFileToXpmImageXpmReadFileToDataXpmReadFileToBuffer??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@??_C@_0L@GGDGBBNE@XpmSuccess?$AA@??_C@_0M@KNHHACKL@XpmNoMemory?$AA@??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@??_C@_0O@NCABLEEJ@XpmColorError?$AA@??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@XpmFreeXpmGetErrorStringXpmLibraryVersionxpmatouiXpmFreeXpmInfoxpmInitXpmInfoxpmSetInfoxpmSetInfoMaskXpmFreeXpmImagexpmInitXpmImagexpmHashInternxpmHashSlotxpmHashTableFreexpmHashTableInit??_C@_00CNPNBAHC@?$AA@??_C@_01DCLJPIOD@?$CB?$AA@??_C@_01EEMJAFIK@?6?$AA@??_C@_01GFHCPBMG@C?$AA@??_C@_01ICJEACDI@?$DL?$AA@??_C@_02CHHINNLG@?$CK?1?$AA@??_C@_02FMMEOLBI@?1?$CK?$AA@??_C@_02MLAGHBOD@?0?6?$AA@??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@??_C@_03PJGJBIFG@XPM?$AA@??_C@_04GPIBMJKI@XPM2?$AA@??_C@_04JEIEPLD@?5?8?$CI?6?$AA@??_C@_04JLHIKKNM@Lisp?$AA@??_C@_06GGEPMBCG@?$CIsetq?5?$AA@??_C@_07EPAHIEDI@_format?$AA@??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@xpmDataTypesxpmGetCmtxpmGetStringxpmNextStringxpmNextUIxpmNextWordxpmParseHeaderXpmCreateImageFromDataXpmCreateXpmImageFromDataXpmCreateImageFromBufferXpmCreateXpmImageFromBufferXpmCreateImageFromXpmImagexpmParseDataAndCreatexpmstrcasecmp??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@XpmCreateDataFromImageXpmCreateDataFromXpmImage??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@XpmCreateBufferFromImageXpmCreateBufferFromXpmImageXpmAttributesSizeXpmFreeAttributesXpmFreeExtensionsxpmFreeColorTablexpmInitAttributesxpmSetAttributes
++/               1345988052              0       11841     `
++_ènÕ@Úü
+ØžØÍlÒÆÝ2çØï<ôBö;pF`PÀ
++Ž×u
+
+
+
+
+
+
+
+
+
+
+
+
++	
+
+
+
+
+??_C@_00CNPNBAHC@?$AA@??_C@_01CLKCMJKC@?5?$AA@??_C@_01DCLJPIOD@?$CB?$AA@??_C@_01EEMJAFIK@?6?$AA@??_C@_01GFHCPBMG@C?$AA@??_C@_01GOHFPIOK@m?$AA@??_C@_01ICJEACDI@?$DL?$AA@??_C@_01JEJKBAGA@g?$AA@??_C@_01KDCPPGHE@r?$AA@??_C@_01LKDEMHDF@s?$AA@??_C@_01NOFIACDB@w?$AA@??_C@_01PAPGNFGE@c?$AA@??_C@_02CHHINNLG@?$CK?1?$AA@??_C@_02DKCKIIND@?$CFs?$AA@??_C@_02FMMEOLBI@?1?$CK?$AA@??_C@_02HCDJPINJ@?4Z?$AA@??_C@_02MLAGHBOD@?0?6?$AA@??_C@_02PGAMAILP@g4?$AA@??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_03CILPFPCI@Tan?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@??_C@_03OOBEOJGI@?$CC?$CFs?$AA@??_C@_03PADCEAKC@Red?$AA@??_C@_03PJGJBIFG@XPM?$AA@??_C@_04CAKOHOCJ@Blue?$AA@??_C@_04GDBIAANM@grey?$AA@??_C@_04GPIBMJKI@XPM2?$AA@??_C@_04HPKDHBOB@snow?$AA@??_C@_04ICMOPAOK@?$CFs?0?6?$AA@??_C@_04ICNCCCFD@Cyan?$AA@??_C@_04IDKACLOG@Pink?$AA@??_C@_04JEIEPLD@?5?8?$CI?6?$AA@??_C@_04JLHIKKNM@Lisp?$AA@??_C@_04KFNAIHAE@Gray?$AA@??_C@_04MJMKNOJB@peru?$AA@??_C@_04OHJIHAFH@None?$AA@??_C@_04PABHPHAJ@Gold?$AA@??_C@_04PCFHDAMD@Plum?$AA@??_C@_04PDAFKIPB@Navy?$AA@??_C@_05BAFHKIGF@Gray8?$AA@??_C@_05BPGNDIAE@Black?$AA@??_C@_05CKEFAMIJ@Azure?$AA@??_C@_05EGDKJJDN@Brown?$AA@??_C@_05EOEDPHMI@Beige?$AA@??_C@_05GGOIJPPE@Green?$AA@??_C@_05IONEIFOL@Gray6?$AA@??_C@_05JEMJJCE@Gray9?$AA@??_C@_05JHMPLEKK@Gray7?$AA@??_C@_05JNPICLKJ@Coral?$AA@??_C@_05KFPJNGCI@Gray5?$AA@??_C@_05LMOCOHGJ@Gray4?$AA@??_C@_05MBJFBDCM@Gray1?$AA@??_C@_05MLLCELJD@linen?$AA@??_C@_05NIIOCCGN@Gray0?$AA@??_C@_05NNJJIMHF@ivory?$AA@??_C@_05OKLIEAOP@Gray2?$AA@??_C@_05PBMHPMDG@Khaki?$AA@??_C@_05PDKDHBKO@Gray3?$AA@??_C@_05PIEKEAEL@Wheat?$AA@??_C@_05PLKILNHI@White?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_06CAMJFDIO@Gray68?$AA@??_C@_06CBALDJLJ@Gray78?$AA@??_C@_06CCIPONNH@Gray58?$AA@??_C@_06CDENIHOA@Gray48?$AA@??_C@_06CFIGEFAL@Gray18?$AA@??_C@_06CGACJBGF@Gray38?$AA@??_C@_06CHMAPLFC@Gray28?$AA@??_C@_06CKFHHOIE@Gray88?$AA@??_C@_06CLJFBELD@Gray98?$AA@??_C@_06DCIOCFPC@Gray99?$AA@??_C@_06DDEMEPMF@Gray89?$AA@??_C@_06DIBAAIPI@Gray79?$AA@??_C@_06DJNCGCMP@Gray69?$AA@??_C@_06DKFGLGKB@Gray49?$AA@??_C@_06DLJENMJG@Gray59?$AA@??_C@_06DMJNHEEK@Gray19?$AA@??_C@_06DONLMKBD@Gray29?$AA@??_C@_06DPBJKACE@Gray39?$AA@??_C@_06GCLALPIA@Violet?$AA@??_C@_06GEHONCEN@purple?$AA@??_C@_06GGEPMBCG@?$CIsetq?5?$AA@??_C@_06HPJDNAON@_width?$AA@??_C@_06ICCAKDNH@Yellow?$AA@??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@??_C@_06IGOCDBII@Gray84?$AA@??_C@_06IHCAFLLP@Gray94?$AA@??_C@_06IJDDAKAH@Gray14?$AA@??_C@_06IKLHNOGJ@Gray34?$AA@??_C@_06ILHFLEFO@Gray24?$AA@??_C@_06IMHMBMIC@Gray64?$AA@??_C@_06INLOHGLF@Gray74?$AA@??_C@_06IODKKCNL@Gray54?$AA@??_C@_06IPPIMIOM@Gray44?$AA@??_C@_06JACIDLEG@Gray15?$AA@??_C@_06JCGOIFBP@Gray25?$AA@??_C@_06JDKMOPCI@Gray35?$AA@??_C@_06JEKFEHPE@Gray75?$AA@??_C@_06JFGHCNMD@Gray65?$AA@??_C@_06JGODPJKN@Gray45?$AA@??_C@_06JHCBJDJK@Gray55?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_06JODLGKPO@Gray95?$AA@??_C@_06JOHNHAPC@Salmon?$AA@??_C@_06JPPJAAMJ@Gray85?$AA@??_C@_06KAFIOHJN@Gray27?$AA@??_C@_06KBJKINKK@Gray37?$AA@??_C@_06KCBOFJME@Gray17?$AA@??_C@_06KENFJLCP@Gray47?$AA@??_C@_06KFBHPBBI@Gray57?$AA@??_C@_06KGJDCFHG@Gray77?$AA@??_C@_06KHFBEPEB@Gray67?$AA@??_C@_06KMANAIHM@Gray97?$AA@??_C@_06KNMPGCEL@Gray87?$AA@??_C@_06LENEFDAK@Gray86?$AA@??_C@_06LFBGDJDN@Gray96?$AA@??_C@_06LIIBLMOL@Gray36?$AA@??_C@_06LJEDNGNM@Gray26?$AA@??_C@_06LJLNHCPM@Bisque?$AA@??_C@_06LLAFGIIF@Gray16?$AA@??_C@_06LMAMMAFJ@Gray56?$AA@??_C@_06LMIDBFFB@Orange?$AA@??_C@_06LNMOKKGO@Gray46?$AA@??_C@_06LOEKHOAA@Gray66?$AA@??_C@_06LPIIBEDH@Gray76?$AA@??_C@_06MALJFOCL@Gray43?$AA@??_C@_06MBHLDEBM@Gray53?$AA@??_C@_06MCPPOAHC@Gray73?$AA@??_C@_06MDDNIKEF@Gray63?$AA@??_C@_06MEDECCJJ@Gray23?$AA@??_C@_06MFPGEIKO@Gray33?$AA@??_C@_06MGHCJMMA@Gray13?$AA@??_C@_06MIGBMNHI@Gray93?$AA@??_C@_06MJKDKHEP@Gray83?$AA@??_C@_06MOPGFMAJ@XPMEXT?$AA@??_C@_06NALDPNEI@tomato?$AA@??_C@_06NALIJGAO@Gray82?$AA@??_C@_06NBHKPMDJ@Gray92?$AA@??_C@_06NIGAAFFN@Gray52?$AA@??_C@_06NJKCGPGK@Gray42?$AA@??_C@_06NKCGLLAE@Gray62?$AA@??_C@_06NLOENBDD@Gray72?$AA@??_C@_06NMEFHGAJ@Maroon?$AA@??_C@_06NMONHJOP@Gray32?$AA@??_C@_06NNCPBDNI@Gray22?$AA@??_C@_06NPGJKNIB@Gray12?$AA@??_C@_06OCIOPEIM@Gray80?$AA@??_C@_06ODEMJOLL@Gray90?$AA@??_C@_06OIBANJIG@Gray60?$AA@??_C@_06OJNCLDLB@Gray70?$AA@??_C@_06OKFGGHNP@Gray50?$AA@??_C@_06OLJEANOI@Gray40?$AA@??_C@_06OLNBEJPI@Sienna?$AA@??_C@_06ONFPMPAD@Gray10?$AA@??_C@_06OONLBLGN@Gray30?$AA@??_C@_06OPBJHBFK@Gray20?$AA@??_C@_06PAKNAFKG@Orchid?$AA@??_C@_06PAMJICPA@Gray71?$AA@??_C@_06PBALOIMH@Gray61?$AA@??_C@_06PCIPDMKJ@Gray41?$AA@??_C@_06PDENFGJO@Gray51?$AA@??_C@_06PEEEPOEC@Gray11?$AA@??_C@_06PGACEABL@Gray21?$AA@??_C@_06PHMACKCM@Gray31?$AA@??_C@_06PKFHKPPK@Gray91?$AA@??_C@_06PLJFMFMN@Gray81?$AA@??_C@_07BEDHGNF@DimGray?$AA@??_C@_07DHJFKJBB@HotPink?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_07EGKCDIIG@Gray100?$AA@??_C@_07EPAHIEDI@_format?$AA@??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_07LFEAGNHO@Magenta?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@??_C@_07MJPPKBHL@_height?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_07NPHLIBMI@Thistle?$AA@??_C@_07PJJBFELP@OldLace?$AA@??_C@_07PNJLOGGO@SkyBlue?$AA@??_C@_08BKNCNHLL@honeydew?$AA@??_C@_08DECOJLB@cornsilk?$AA@??_C@_08FOGANHJK@_ncolors?$AA@??_C@_08GKFCFKAC@DeepPink?$AA@??_C@_08KJABFMDC@NavyBlue?$AA@??_C@_08KJDCPJPL@lavender?$AA@??_C@_08MFJLKPPC@seashell?$AA@??_C@_08MPDGLOME@SeaGreen?$AA@??_C@_08OIIPPDDA@moccasin?$AA@??_C@_09BIACIJCM@DarkKhaki?$AA@??_C@_09BPADAHOC@chocolate?$AA@??_C@_09CAIKIAKL@LightPink?$AA@??_C@_09CBPIIJBO@LightCyan?$AA@??_C@_09CGAPEKNC@CadetBlue?$AA@??_C@_09DEFDJNGA@SlateGray?$AA@??_C@_09EHCEAFM@Firebrick?$AA@??_C@_09GHIAHKFI@VioletRed?$AA@??_C@_09GLNHDDDA@IndianRed?$AA@??_C@_09GPKCMEJ@LightGray?$AA@??_C@_09HBGGELGD@RosyBrown?$AA@??_C@_09IDIENFGE@LightBlue?$AA@??_C@_09IGCCILNJ@LawnGreen?$AA@??_C@_09IPCNOKOO@DarkGreen?$AA@??_C@_09JHLANABP@burlywood?$AA@??_C@_09JIGGJDDI@PaleGreen?$AA@??_C@_09KDCNEHNA@OliveDrab?$AA@??_C@_09LBCNGEEN@SlateBlue?$AA@??_C@_09MENJEMGM@SteelBlue?$AA@??_C@_09MFNHBCHG@MintCream?$AA@??_C@_09MIGKOGAO@gainsboro?$AA@??_C@_09NCIGFANI@LimeGreen?$AA@??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@??_C@_09NKNFPLIJ@RoyalBlue?$AA@??_C@_09ODOKIMGN@AliceBlue?$AA@??_C@_09OGGDAFEL@Goldenrod?$AA@??_C@_09OINMEHGD@XPMENDEXT?$AA@??_C@_09OKCCEKJG@PeachPuff?$AA@??_C@_09PDBAPE@OrangeRed?$AA@??_C@_09PKEKPHNP@Turquoise?$AA@??_C@_09POIPCADB@MistyRose?$AA@??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BA@FICOLOP@MediumVioletRed?$AA@??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0L@CHNAEACO@chartreuse?$AA@??_C@_0L@EBAICJFO@DarkOrange?$AA@??_C@_0L@GDAICLDE@MediumBlue?$AA@??_C@_0L@GDPGEMPN@DarkSalmon?$AA@??_C@_0L@GGDGBBNE@XpmSuccess?$AA@??_C@_0L@IKFOHFNE@PowderBlue?$AA@??_C@_0L@IKHGMDBB@Aquamarine?$AA@??_C@_0L@IPLDLLMK@DodgerBlue?$AA@??_C@_0L@JFDGDMCP@LightCoral?$AA@??_C@_0L@JIMBJDOA@PapayaWhip?$AA@??_C@_0L@JPDLIDIP@DarkViolet?$AA@??_C@_0L@KFIMMJOB@GhostWhite?$AA@??_C@_0L@NCGDJKJ@DarkOrchid?$AA@??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@??_C@_0L@NDIFBCJA@image_name?$AA@??_C@_0L@PDJLLNIH@BlueViolet?$AA@??_C@_0L@PKPGDMJG@SandyBrown?$AA@??_C@_0M@BKMBPOEB@FloralWhite?$AA@??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@??_C@_0M@DMHCPCEI@Transparent?$AA@??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0M@GCHHLGNN@GreenYellow?$AA@??_C@_0M@GODNHLND@ForestGreen?$AA@??_C@_0M@HNCGGICD@YellowGreen?$AA@??_C@_0M@IGPDELNF@LightYellow?$AA@??_C@_0M@JADEIAIP@SpringGreen?$AA@??_C@_0M@JKKOJIPA@LightSalmon?$AA@??_C@_0M@KNHHACKL@XpmNoMemory?$AA@??_C@_0M@NBNLJNOB@SaddleBrown?$AA@??_C@_0M@PFCNBHOF@NavajoWhite?$AA@??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@??_C@_0N@BEMAIPGH@MediumOrchid?$AA@??_C@_0N@EPKOGBBA@MediumPurple?$AA@??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@??_C@_0N@ILIFGKIL@MidnightBlue?$AA@??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@??_C@_0O@DAMODFNL@PaleTurquoise?$AA@??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@??_C@_0O@KNAELIFM@PaleVioletRed?$AA@??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@??_C@_0O@NCABLEEJ@XpmColorError?$AA@??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@??_C@_0O@OIOECAME@LavenderBlush?$AA@??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@??_C@_0P@LOKKLDIA@LightSlateGray?$AA@??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@XAllocColorXCreateImageXDefaultColormapXDefaultDepthXDefaultScreenXDefaultVisualXDestroyImageXFreeColorsXImageFreeXParseColorXQueryColorsXpmAttributesSizeXpmCreateBufferFromImageXpmCreateBufferFromXpmImageXpmCreateDataFromImageXpmCreateDataFromXpmImageXpmCreateImageFromBufferXpmCreateImageFromDataXpmCreateImageFromXpmImageXpmCreateXpmImageFromBufferXpmCreateXpmImageFromDataXpmCreateXpmImageFromImageXpmFreeXpmFreeAttributesXpmFreeExtensionsXpmFreeXpmImageXpmFreeXpmInfoXpmGetErrorStringXpmLibraryVersionXpmReadFileToBufferXpmReadFileToDataXpmReadFileToImageXpmReadFileToXpmImageXpmWriteFileFromBufferXpmWriteFileFromDataXpmWriteFileFromImageXpmWriteFileFromXpmImageboundCheckingCallocboundCheckingMallocboundCheckingReallocxpmColorKeysxpmDataTypesxpmFreeColorTablexpmFreeRgbNamesxpmGetCmtxpmGetRGBfromNamexpmGetRgbNamexpmGetStringxpmHashInternxpmHashSlotxpmHashTableFreexpmHashTableInitxpmInitAttributesxpmInitXpmImagexpmInitXpmInfoxpmNextStringxpmNextUIxpmNextWordxpmParseColorsxpmParseDataxpmParseDataAndCreatexpmParseExtensionsxpmParseHeaderxpmParseValuesxpmReadRgbNamesxpmSetAttributesxpmSetInfoxpmSetInfoMaskxpmatouixpmstrcasecmp
++WrFFrI.obj/     1345988051              100666  12566     `
++d>Ó%:PQÎ.drectve]Ä	
++.debug$Sp!
++@B.textÃ
++T
+ P`.pdata
+
+Š
+@0@.xdataÄ
+Ô
+@0@.pdata
+ò
+þ
+@0@.xdata$
+
+@
+@0@.pdata
+^
+j
+@0@.xdata
+
+@0@.rdata
+@0@.rdata
+@0@.rdata
+@0@.textd£
+ P`.pdata
+Wc@0@.xdata
+@0@.rdata@0@.rdata @0@.text ¥E P`.pdata
+@0@.xdata«»@0@.pdata
+Ùå@0@.xdata
+@0@.pdata
+=I@0@.xdata
+g@0@.rdatas@@@.rdata@0@.rdata@@@.text>Ô P`.pdata
+jv@0@.xdata
+°@0@.rdataº@@@.rdataÉ@0@.rdataÍ@0@.rdataÏ@@@.rdataß@0@.textFâ( P`.pdata
+FR@0@.xdatap@0@.pdata
+ª@0@.xdataÈÜ@0@.pdata
+ú@0@.xdata$@0@.text,È P`.pdata
+Š@0@.xdataÄ@0@.rdataÜ@0@.rdataà@@@.rdataè@0@.rdata
+ï@@@.rdataü@@@.rdata"@@@.text©&Ï P`.pdata
+eq@0@.xdata@0@.pdata
+œÉ@0@.xdataçû@0@.pdata
+%@0@.xdataC[@0@.rdata
+e@@@.textpï P`.pdata
+#@0@.xdataA@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñb$d:\Develop\xpm\lib\WrFFrI.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerE
+ÀžUATHì(H\$@Ht$HH|$PLl$XLt$ LâL5HéEèM$HHÍèI\$IþŸL
+M
+ÉtLHHÍèHÇHÃHîuØHHÍèIÄ0IíuLt$ Ll$XH|$PHt$HH\$@HÄ(A\]óÃ/$G#O nv 
+ ÁÃ
+!
+Á!
++äÔ
+t
++
++d	4
+ B
+À
++P",
++	%s %s"%sDL$ HL$SUATAUAWHì@LáÊAéDêAXÿA¯ÉÁèLøH
+ÀuAGýHÄ@A_A]A\][ÃHt$xH|$8Lt$0LŽ$Æ"Hp
+ÛtxÃH$HD$ DHþE
+ít9MåDLÅHÏH@HÒIÖèHýHÃIìuÛ¬$Ld$pÆ"HMÇIÌÆGèHl$ uëH$E
+ít4ýIíffLÇHÎH@HÒIÖèH÷HÃHíuÛÆ"HMÇIÌÆFèIÏèLt$0H|$8Ht$x3ÀHÄ@A_A]A\][Ã-6€5Ç4Ö 5+1: B.d''-Y
+YäTtOdrðÐÀ
+P
+0%s%s,
++Hl$ VHì HòHéE
+ÀtrH\$0H|$8Ld$@EàfLHHÍèD^H^E
+ÛtIûLHHÍèHÃHïuäHÆIìužLd$@H|$8H\$0HHÍHl$HHÄ ^é6T> XQ` N  99?!99
+K99E!Ä
++t499K99K
++
++T	
++2`,
++"XPMENDEXT",
++"%s",
++"XPMEXT %s"H\$Ht$ WHì0HH3ÄH$ HÚLÁH
+ÉuèHÀ0HCéÐHÉÿ3ÀIøò®H÷ÑHÿÉùHÑ~IAþH5¹HcøIøóŠu0HHL$ èHHL$ èHCH
+ÀuSÈÿëvú~QBýH5¹HcøIøóŠu8HHL$ èHHL$ èHCH
+ÀuÈÿë(Çë
+HIÈèHCH
+ÀtÇ3ÀH$ H3ÌèL$0I[ Is(Iã_Ãr0q`pvmjif®eÄbÎjÕißfüi_%s>WW]$dK4JF
+p ^gzip -q > "%s".gzwcompress > "%s".ZHì(ètøu1HIHÄ(éH\$ HYèHÀ0H;ØtHËèH\$ HÄ(Ã'q8AFvv|!
+vv
+
+Avv!4
+v
+v
+vvBH\$Hl$Ht$H|$ ATHì0IÙLâHùŸM
+Ét
+Aº!sîë3íH
+ÛtAº!
++sAy(u3öHè
+ítLCM
+ÀtHHÏèAD$EL$E$D$(AD$
+HHÏD$ èH
+Ût
+ötDK$DC HHÏè
+ötHHÏèHHÏè
+ítLCM
+ÀtHHÏèED$
+IT$HÏè
+ítLCM
+ÀtHHÏèID$EL$ED$A$HD$(ID$HÏHD$ è
+Àu%
+ötDC(HS0HÏèHHÏè3ÀH\$@Hl$HHt$PH|$XHÄ0A\ÃR¥W k¢s  ¶Ÿ ÉÑ Ø
+à ô¢ü "¢* T'l9s{ 
++t
+d
++T	4RÀ};
++ XPMEXT %d %d"%d %d %d %d/*%s*/
++/* XPM */
++static char * %s[] = {
++@UVWHìpHH3ÄH$`HòHT$ IèHùè
+À
+VH$šH
+ÿîP/HÏèHØH
+ÀuHßëHÿÃº.HËèH
+ÀtOH$`H+Ë¶HÿÃDÿÀuòH$`º.H$`èH
+Àtfº.HÈÆ_èH
+Àuëº-HËèH
+ÀtgH$`H;Øt"H$`H+Ë¶HÿÃDÿÀuòH$`º-HËèH
+Àt&º-HÈÆ_èH
+ÀuëëH
+LÃH\$(LÍHËHÖèL$ éøtùu HËèëèHÀ0H;ØtHËèH$šÇH$`H3ÌèHÄp_^]Ãr,WP¿mŸ¥ŸŒŸÎŸŸ,Ÿ:œPhoqs©ÀÀ®!8ÀÀ
+º8ÀÀŽ!48À
+Àº8ÀÀº
+
+p`P`^image_nameH\$WHìH$ÀIÁMÐHúLL$0LÀIÒH\$ è
+Àu7H
+ÛtHL$PHÓèLD$PëE3ÀHT$0HÏèHL$0ØèÃH$ HÄ_Ã/ÌEË\šhÊÍÍÉ
+
+4
+p@comp.id	xÿÿ.drectve].debug$Sp.textÃ;OÙ .pdata
+«Ô(?.xdataÇÛìÅ%.pdata
+Uªº:.xdata$'ý)6O.pdata
++1»|d.xdata	
+šìw	.rdata
++»0Á
++.rdata
+IJ-æª
+fprintf .rdata
+É¯0Ï
+ï.text
+dn§ü
+ .pdata
+õ¥Öò
+.xdata
+:§
+free .rdata>®:/.rdataø»Kstrncpy k .text FœŸ .pdata
+ãaŸ.xdata£Õ
+š.pdata
+/EÍÁ.xdata
+ÙßQÚ.pdata
+O?[4ó.xdata
+q#B
++.rdata".]Î".rdataÏÃntO.rdataTU<w.text
+>Íúàš
+ .pdata
+
+ûJ06
+¶
+.xdata
+
+'ô×ê
+Ë
+á fopen .rdatajšÂLò.rdata Ô¥Ø( _popen .rdata!1ï~`B!sprintf .rdata"IÒ aZ".rdata#4Þr#ª µÇ .text$Fß
+{Âß$ .pdata%
+õ04D$ì%.xdata&Îé^$&.pdata'
+a.w$'.xdata(1?U$.(.pdata)
+ú$Ÿç$D).xdata*Ñ9Å$X*fclose _pclose .text+¥æióm+ .pdata,
+
++ªXÞ+z,.xdata-P¢q+-.rdata.ºK£..rdata/Þ
+UÄ/.rdata0ùKkã0.rdata1
+$l
+1.rdata2¿Ÿù€=2.rdata3"SÑÞg3.text4©a
+TŸ4 .pdata5
+-
+[4×5.xdata6$¢ï4ù6.pdata7
+ŠÜãò47.xdata8³lq4=8.pdata9
+ÈH(V4_9.xdata:«Å­§4:.rdata;
+\ýG ;strchr strrchr $LN324.text<Ù-ìãÂ< .pdata=
+<pu<Ø=.xdata>kjü<õ> # . $LN7<IWriteColors$pdata$5$WriteColors$chain$5$WriteColors$pdata$4$WriteColors$chain$4$WriteColors$pdata$WriteColors$unwind$WriteColors??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@??_C@_03OOBEOJGI@?$CC?$CFs?$AA@xpmColorKeysWritePixels$pdata$WritePixels$unwind$WritePixels??_C@_02DKCKIIND@?$CFs?$AA@??_C@_04ICMOPAOK@?$CFs?0?6?$AA@boundCheckingMallocWriteExtensions$pdata$3$WriteExtensions$chain$3$WriteExtensions$pdata$2$WriteExtensions$chain$2$WriteExtensions$pdata$WriteExtensions$unwind$WriteExtensions??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@OpenWriteFile$pdata$OpenWriteFile$unwind$OpenWriteFile__GSHandlerCheck??_C@_0P@GEOOFEHC@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_01NOFIACDB@w?$AA@??_C@_0BA@HCGEGGOD@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_02HCDJPINJ@?4Z?$AA@__iob_func__security_cookie__security_check_cookiexpmDataClose$pdata$1$xpmDataClose$chain$1$xpmDataClose$pdata$0$xpmDataClose$chain$0$xpmDataClose$pdata$xpmDataClose$unwind$xpmDataClosexpmWriteFile$pdata$xpmWriteFile$unwind$xpmWriteFile??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_0CC@GAFPMAFM@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@XpmWriteFileFromXpmImage$pdata$1$XpmWriteFileFromXpmImage$chain$1$XpmWriteFileFromXpmImage$pdata$0$XpmWriteFileFromXpmImage$chain$0$XpmWriteFileFromXpmImage$pdata$XpmWriteFileFromXpmImage$unwind$XpmWriteFileFromXpmImage??_C@_0L@NDIFBCJA@image_name?$AA@XpmWriteFileFromImage$pdata$XpmWriteFileFromImage$unwind$XpmWriteFileFromImageXpmFreeXpmImagexpmSetInfoXpmCreateXpmImageFromImageWrFFrDat.obj/   1345988051              100666  1117      `
++dÓ%:Pc.drectve]Ü
++.debug$Sp9@B.text`©	 P`.pdata
+1=@0@.xdata[@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\WrFFrDat.obj:<bÐ	x	xMicrosoft (R) Optimizing Compiler@SHìHÂHÙLD$@HT$ HÈÇD$@è
+Àu*LD$@HT$ HËèHL$ ØèHL$@èÃHÄ[Ã%;GQ`
+		ò0@comp.id	xÿÿ.drectve].debug$Sp.text`/ç .pdata
+» ëÐ.xdata\^]Ë5R a q  $LN4€XpmWriteFileFromData$pdata$XpmWriteFileFromData$unwind$XpmWriteFileFromDataXpmFreeXpmInfoXpmFreeXpmImageXpmWriteFileFromXpmImageXpmCreateXpmImageFromData
++parse.obj/      1345988051              100666  16304     `
++d7Ó%:P÷+Â.drectve]¬
++.debug$Sp		@B.rdatay	@0@.rdata{	@0@.rdata}	@0@.rdata	@0@.rdata	@0@.data(	¬	@@À.textžÞ	
+" P`.pdata
+êö@0@.xdata 4@0@.rdata>@0@.rdataE@@@.rdata	M@@@.rdataV@@@.rdatag@@@.rdatao@0@.text³v)
+ P`.pdata
+AM@0@.xdata
+k@0@.pdata
+¥±@0@.xdataÏß@0@.pdata
+ý	@0@.xdata
+'C@0@.pdata
+am@0@.xdata
+§@0@.rdata±@0@.text³B
+ P`.pdata
+(
+4
+@0@.xdataR
+j
+@0@.pdata
+
+
+@0@.xdata²
+Â
+@0@.pdata
+à
+ì
+@0@.xdata
++"@0@.pdata
+@L@0@.xdata
+j@0@.text-œ#. P`.pdata
+%%@0@.xdata³%Ë%@0@.pdata
+é%õ%@0@.xdata&#&@0@.pdata
+A&M&@0@.xdatak&&@0@.pdata
+&©&@0@.xdataÇ&Û&@0@.pdata
+ù&'@0@.xdata#'@0@.rdata
++7'@@@.text A'a* P`.pdata
++
++@0@.xdata++;+@0@.pdata
+Y+e+@0@.xdata++@0@.pdata
+¹+Å+@0@.xdataã+@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ña#d:\Develop\xpm\lib\parse.obj:<bÐ	x	xMicrosoft (R) Optimizing Compilercgg4ms
+
++ @SUVWATAUAVAWHìhHH3ÄH$P¹4LŒ$ÐLŽ$èL¬$ðHŽ$ØHŒ$àIØL|$(Lt$0Ll$@MáLL$HH\$8HT$ Hé
+*è
+ÀHÓHÍè
+ÀíIÔHÍè
+ÀÚI×HÍè
+ÀÇHT$PAžHÍèØ
+ÀŠAŒøu
+HT$PH
+DÀè
+ÀuAÄë3ÀAE
+Àt+HÖHÍè
+ÀtH×HÍè
+ÀuE3äE&3ÀéRHL$PLÆÓè
+ÀtH×HÍè
+ÀtAÄë3ÀHT$PAžHÍAèøuHT$PH
+DÀè
+ÀtE3äEe3ÀéèE3öE3í3ö3ÿE3ÿEfHT$PAžHÍèø
+³HT$PH
+DÀè
+À
+HT$PAžHÍè
+À|ØLL$PÆD
+Pº_IÉèLÈH
+ÀVHÃI+ÁHLPHéÐI+ÌI+ÌtKHùtIÿÁë¹
+ÿ
+ DGH
+IÑè
+À
+HT$(HÍè
+ÀðAüé§
+ö
+àDFH
+IÑè
+À
+ÅHT$HHÍè
+À°AôëjE
+í
+¢EEH
+IÑè
+À
+HT$8HÍè
+ÀtvEìë0E
+öulEFH
+IÑè
+ÀuUHT$ HÍè
+ÀtDEôHÍèAÿÇAÿ]þÿÿE
+öt'E
+ít"
+öt
+
+ÿtHD$0ÇHD$@Ç3ÀëžþÿÿÿH$PH3ÌèHÄhA_A^A]A\_^][Ã988©8Œ8×7ø63
+8-8M2\8}763Ï7ä1ì37).v-~38¶*Ÿ3Ó8ô'ü38*$23C8R! :ž;;&
++M
+ð
+à	ÐÀp`P0P _width_height_ncolors_chars_per_pixel#defineXPMEXT@SWAUAVAWHìHH3ÄH$PH$ÐDêEøT$(Lñº0AÍH\$@LL$HD|$<èHøHD$ H
+ÀuGýéAŸ4H¬$xHŽ$pL€$h
+Û3íHØHD$0õl$,E
+í¥A|$8IÎèÏèHøHH
+ÀÑE
+ÿt>AßA
+ÉtùtINèDØëIFHÿÀDŸXÿIFDHÿÇHëuÊH\$0ÆAÿv AývHHL$@DÆèø
+À
+TH$PAžIÎDýDåÆD$PèDè
+ÀëE
+äuVÝH5AífLHÉÿ3ÀIùò®H÷ÑHÿÉH;ÍuH$PLÅIÉè
+ÀÿÃHÆûrÁ3íE
+ÿE
+äu3ÀH|$PHÉÿò®·fGÿAÅHÉÿH|$PÆP3ÀH$Pò®3É¶
++HÿÁDþÀuñDåH$PAžIÎèDè
+À
+#ÿÿÿE
+ÿHÉÿ3ÀH|$Pò®H÷Ñ#ÉèH\$0AÏHËHÐH
+ÀŸHD$PHL$PH+Ð¶HÿÁD
++ÿÀuòt$,Dl$(HÃ0ÿÆH\$0t$,A;õ|$8D|$<éãýÿÿûs`E
+ÿtGHÉÿ3ÀH|$Pò®H÷Ñ#ÉèH
+ÀtFHT$0AÏHÊHL$PHT$PH+Á@¶
++HÿÂLÿÉuò3íD{ÆD$PDeéðþÿÿ3íéþÿÿT$(HL$ èžýÿÿÿéT$(HL$ èžþÿÿÿéíIÎAÆ0"AÆ1èE3äAÆ1"H÷E
+íŽAOèHøHH
+ÀçE
+ÿt>IßA
+ÀtøtINèDØëIFHÿÀDŸXÿIFDHÿÇHëuÊH\$@ÆAÿv
+AývHEÄHËèø
+À
+lIÎèH$P@2ÿAžIÎ@|$PèDØ
+À@ÿt3ÀH|$PHÉÿò®·fGÿAÃHÉÿH|$PÆP3ÀH$Pò®HÿÏ3Éfff¶
++HÿÁDÿÀuñH$PAžIÎèDØ
+Àt¶|$PëHÉÿ3ÀH|$Pò®H÷Ñ#ÉèHøH
+À©HL$PHT$PH+Áfffff¶
++HÿÂLÿÉuòAEÿH~(L$PD;àsIÎèAÿÄHÆ0E;åYþÿÿH|$ HD$HH83ÀHŽ$pH¬$xL€$hH$PH3ÌèHÄA_A^A]_[ÃHL$ AÕèÇë·HL$ AÕèžýÿÿÿë£9O^Ž!»]ç\,[W7pš3ßZ47_]ê]CW[W}!¥]Ñ\[&!D7hZÁ7æ]3!z:WšW³__D!ÄdTp__Vn__J!p__
+Vpn__P!ÄdTp__Vp__V"	ðàÐp0P  @SUVATAUAVHìX
++HH3ÄH$@
++H$È
++LŽ$ž
++L¬$À
++HéAÈAØEáòT$ ¯ÊÁá\$$HD$8èHD$(H
+Àu
++žýÿÿÿé)HŒ$š
++Œ$°
++LŒ$P
++LøÇè%øH|$0Æ<@ÿAüüE3öEæ
+Û®ÞHÍèAö
+ÛffH$@
+ÿtBH|$0E
+ÀtøtHMèDØëHEHÿÀDŸXÿHEDHÿÃHïuÊŒ$°
++H$@IÍèHH
+ÉQAÿÆIÇAGü;t$ r\$ AÿÄD;d$$TÿÿÿHD$(HL$8H3ÀHŒ$š
++LŒ$P
++H$@
++H3ÌèHÄX
++A^A]A\^][Ã3ÛDë9\$$vµfDHÍèDT$ óE
+ÒÂH$@
+ÿtGH|$0E
+ÀtøtHMèDØëHEHÿÀDŸXÿHEDHÿÃHïuÊŒ$°
++DT$ 3ÛDÃE
+ätBAÀL$@H
+@HÉIÎL+È¶B¶
++ÑuHÿÀ
+Éuí
+ÒtAÿÀE;ÄrÁE;ÄÿÆEIÇA;òFÿÿÿAÿÅD;l$$ÿÿÿéÂþÿÿHL$@3ÒAžèE3íAÝE
+ätUfDÃH4@HöIöHŸHùL9lÌ@uº¹èHDü@H
+ÀtlIöSÿÃ¶HHDü@fHA;Ür±Dt$$AõE
+öDd$ HÍèAýE
+ä×E
+ÀtFøtAHMèØëCJLì@H
+ÉtèIÿÅIý|åIÏèžýÿÿÿéáýÿÿHEHÿÀŸXÿHECÿ=þÆE
+ÀtøtHMèDØëHEHÿÀDŸXÿHEACÿ=þwaHcÃHLÄ@H
+ÉtTIcÃ·
+Af
+ÉtH·ÁÿÇIÇÿÈAGüA;ü0ÿÿÿÿÆA;ö
++ÿÿÿDJLì@H
+ÉtèIÿÅIý|åéýÿÿJLì@H
+ÉtèIÿÅIý|åHL$(èžþÿÿÿéÿüÿÿJLì@H
+ÉtèIÿÅIý|åHL$(èžþÿÿÿéÏüÿÿH$@3ÒAžè3ÛDÃE
+ät fIAPAÿÀ¶IÆ0fL@E;ÄrâDd$$ûE
+äqüÿÿfHÍè
+ötd@E
+ÀtøtHMèDØëHEHÿÀDŸXÿHEACÿ=þRÿÿÿIcÃ·D@f
+É>ÿÿÿ·ÁÿÃIÇÿÈAGü;Þr ÿÇA;üôûÿÿ3Ûë9]]×!\J|ª:Ô!\Ë}^I!q\{{Û\K{k{{{±{Ð}!1\¿bbh!ôJtUu
+bbz¿bbn!ubb
+zubbt!ôJtUu
+bbzubbz#K
++àÐÀ`P0@
++ LD$HT$SWATAUAVAWHìHE3äMèLñDd$ è¿Ï|$$èL$HT$(IÎLøèØ
+ÀtIÏèÃHÄHA_A^A]A\_[ÃHT$(H
+AžH¬$èØ
+ÀDHT$(H
+Až	èè
+ÀtYHL$(èIÎèL$HT$(IÎèØ
+Àu
+HT$(D@H
+èØ
+ÀuëIÏèÃé6
+ÛuHT$(H
+Až	èèHt$@
+Û
+Ó3öHt$0
+íÈ×IÏèHøH
+ÀHþHt$(LøŸNHÆHÞè
+ÀtŸKHÿÃè
+Àuð$+Þ+ËéèHH
+À	D$ÓHÈD+ÃHÖAÀúèHL$(èIÎèL$HT$(IÎèØ
+À
+HèDCH
+HGHT$(E3äèØ
+ÀŠE3íAt$ffHT$(H
+Až	èè
+ÀtrHOÖèH
+ÀHGHL$(AÿÄILIÎÆIÅèL$HT$(IÎèØ
+À
+³HT$(D@H
+èØ
+À
+qÿÿÿE
+äuHOèHÇGHt$0DgDd$ |$$AÿÄHÆÇDd$ Ht$0|$$
+Û0þÿÿE
+äë
+íu
++HL$(èL¬$H$EeL83ÀHt$@H¬$HÄHA_A^A]A\_[ÃT$ IÏDgÿÂèÃëÎHL$(èT$ IÏÿÂDgèžýÿÿÿë«AT$IÏHÇGÇGèÃëHL$(èAT$IÏHÇGÇGèžýÿÿÿé[ÿÿÿHL$(èAÔIÏèžýÿÿÿé<ÿÿÿL¬$HL$(èIÏèE3ÿé	ÿÿÿ'!7]OŠ]{z63š¥³3Ã{Ë!àŠö6û3
+{"¥-3U¢|¡¡£]Ë Õ{Ý!òŠ]6 3H¥S3d¢!¢ŠŒ6Á3Ù{*{q{ŽÂ{Þò{ý{!{c-§§!dT
+§§Lc§§!3§§
+3L§§!d3§
+§3§§!T§
+§§§ðàÐÀ
+p
+0XPMENDEXTHÄSUVWAUHì°3ÿIØLêHéxxHxžHxHxšHxHx M
+Àt
+Aº swë÷è
+À
+œHD$XL$ðLD$PHD$@HD$\HT$THD$8HD$hHÍHD$0H$HD$(H$øHD$ è
+À
+c
+ötH$HÍèD$øAøv'Œ$ðv
+H$è
+À
+"D$ø$ðH$L$HÍL€$àHD$ LŽ$èèLŽ$Dà
+Àt.Œ$øeŒ$ðWH$èéE
+öt
+HT$pHÍèD$ðDD$PT$THD$`HÍHD$8H$HD$0$øLt$(D$ èŒ$øDàvŒ$ðv
+H$èE
+ä
+Â
+öt
+HT$xHÍèH
+Ût4º#
++s.9|$Xt!LC(HS0HÍèDà
+ÀtH|$`éH{0{(D$TMuAED$PAE$øAE$ðAE
+HD$`IEH
+Ût<
+öt
+H$HCHD$pHCHD$xHC9|$\t$
+C D$hC$3ÀëYH|$`M
+öt$ðIÎèH
+ÿtHÏèH$H
+ÉtèHL$pH
+ÉtèHL$xH
+ÉtèAÄL€$àLŽ$èHÄ°A]_^][ÃIÀ£¿¿äŸ(>`œv¿¶bÚœô¿ŸWË{Ý{ì{û{ ÁÁ°!ÁÁ
+ŒÁÁ¶!ä
+Ä
+
+ÁÁŒÁÁŒ	Ðp`P0@comp.id	xÿÿ.drectve].debug$Sp.rdatad8ÐN.rdata`ýŒ*
+.rdataR.²ö4.rdataêSÐM.rdata5*e.data(}.text	ž"òŸt	 .pdata
++
+×û4	
++.xdata
+ Ìeð	¯
+Æ × .rdata
+lð
+å
+.rdata
+í"S
+.rdata	Ë<G .rdataQÉ?strchr .rdataÐŠZhxpmatoui strncmp .rdata|e¬Š ² ŒÎ $LN60	.text³
+ì&»Cæ .pdata
+_îàòõ.xdata
+Ã±ó
+.pdata
+«œ€%.xdata|{=.pdata
+Ú
+³U.xdata
+õ»DQm.pdata
+P¬
+.xdata
+a¡Öê² .rdata¢$ÄÝ getc ë ÿ $LN95.text
+6£^º
+ .pdata
+
+¡×
+
+.xdata
+;^å
+4
+.pdata
+}AÁí
+I.xdata uç]
+^ .pdata!
+[ 
+s!.xdata" Ò¿
+".pdata#
+ô°ä
+#.xdata$
+¯GÏ
+°$free Ä memset .text%-.ê®Ð% .pdata&
+mP%ã&.xdata'Á%ÿ'.pdata(
+µ!Ã%(.xdata)Yá£w%7).pdata*
+
+öãí%S*.xdata+aes
+%o+.pdata,
+µ
+ôÎ%,.xdata-ŽÛµ%§-.pdata.
+ q×%Ã..xdata/;ÂMØ%Ý/ø strncpy isspace 
++ .rdata0
++êÐ©ô0? $LN43%.text1 :X
+»L1 .pdata2
+©m_±1Y2.xdata3×Ÿ!1o3.pdata4
+hÛ.1
+4.xdata5X
+15.pdata6
+â=é1±6.xdata7ßû X1Å7Ú ë ü  $LN371??_C@_01PAPGNFGE@c?$AA@??_C@_01JEJKBAGA@g?$AA@??_C@_02PGAMAILP@g4?$AA@??_C@_01GOHFPIOK@m?$AA@??_C@_01LKDEMHDF@s?$AA@xpmColorKeysxpmParseValues$pdata$xpmParseValues$unwind$xpmParseValues__GSHandlerCheckxpmNextString??_C@_06HPJDNAON@_width?$AA@??_C@_07MJPPKBHL@_height?$AA@??_C@_08FOGANHJK@_ncolors?$AA@??_C@_0BB@DJNJFPFH@_chars_per_pixel?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@??_C@_06MOPGFMAJ@XPMEXT?$AA@xpmNextWordxpmNextUI__security_cookie__security_check_cookiexpmParseColors$pdata$4$xpmParseColors$chain$4$xpmParseColors$pdata$3$xpmParseColors$chain$3$xpmParseColors$pdata$2$xpmParseColors$chain$2$xpmParseColors$pdata$xpmParseColors$unwind$xpmParseColorsxpmFreeColorTable??_C@_01CLKCMJKC@?5?$AA@xpmHashInternboundCheckingMallocboundCheckingCallocParsePixels$pdata$3$ParsePixels$chain$3$ParsePixels$pdata$2$ParsePixels$chain$2$ParsePixels$pdata$1$ParsePixels$chain$1$ParsePixels$pdata$ParsePixels$unwind$ParsePixelsxpmHashSlotxpmParseExtensions$pdata$4$xpmParseExtensions$chain$4$xpmParseExtensions$pdata$2$xpmParseExtensions$chain$2$xpmParseExtensions$pdata$1$xpmParseExtensions$chain$1$xpmParseExtensions$pdata$0$xpmParseExtensions$chain$0$xpmParseExtensions$pdata$xpmParseExtensions$unwind$xpmParseExtensionsXpmFreeExtensionsboundCheckingRealloc??_C@_09OINMEHGD@XPMENDEXT?$AA@xpmGetStringxpmParseData$pdata$2$xpmParseData$chain$2$xpmParseData$pdata$1$xpmParseData$chain$1$xpmParseData$pdata$xpmParseData$unwind$xpmParseDataxpmHashTableFreexpmHashTableInitxpmGetCmtxpmParseHeaderWrFFrBuf.obj/   1345988050              100666  1173      `
++dÒ%:P«.drectve]
++.debug$Spa@B.textvÑG P`.pdata
+o{@0@.xdata@0@.rdata©@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\WrFFrBuf.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerH\$VHì HòHèHØH
+ÀuÈÿH\$8HÄ ^ÃHÉÿ3ÀH|$0HþD@LËò®H÷ÑHÿÉHcÑHÎèHËxÿèH\$8÷ßH|$0ÀHÄ ^ÃS^v
+::t
++4
++2`w@comp.id	xÿÿ.drectve].debug$Sp.textvÁa .pdata
+?j.xdataÆ3ªÃ9fclose fwrite fopen .rdata1ï~`X$LN5pXpmWriteFileFromBuffer$pdata$XpmWriteFileFromBuffer$unwind$XpmWriteFileFromBuffer??_C@_01NOFIACDB@w?$AA@
++simx.obj/       1345988050              100666  8727      `
++d2Ò%:Pì¢.drectve]ä
++.debug$SlA@B.text­µ P`.text
+¿Ê P`.textÔÜ P`.textæ P`.texté P`.text8ì$	 P`.pdata
+8	D	@0@.xdata
+b	@0@.textn	 P`.text'q	 P`.textÜ	t
+ P`.pdata
+°
+Œ
+@0@.xdataÚ
+ê
+@0@.pdata
+
+
+@0@.xdata2
+F
+@0@.pdata
+d
+p
+@0@.xdata
+¢
+@0@.pdata
+À
+Ì
+@0@.xdataê
+þ
+@0@.pdata
+
+(@0@.xdataFZ@0@.pdata
+x@0@.xdata¢¶@0@.pdata
+Ôà@0@.xdataþ@0@.pdata
+0<@0@.xdataZn@0@.pdata
+@0@.xdata¶@0@.text|Ÿ: P`.pdata
+NZ@0@.xdatax@0@.text P`.text6 P`.textŒ P`.textq¿0 P`.pdata
+DP@0@.xdatan~@0@.pdata
+š@0@.xdataÆÞ@0@.pdata
+ü@0@.xdata
+&@0@.text2E P`.pdata
+O[@0@.xdatay@0@.text%Š P`.pdata
+ºÆ@0@.xdataä@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñ`"d:\Develop\xpm\lib\simx.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerHcÉéHcÒHcÉé
+HcÒé3ÀÃ3ÀÃH\$WHì HùH	º
+ÿHºØÿÃH\$0HÄ _Ã ' 8!!
++
++4
++2p3ÀÃAÐø	wAÐÃAøwA©ÃA¿øwAÉÃ3ÀÃHì(LÚLÑH
+ÉÂ9#
+¹HÉÿH|$ 3ÀIúò®H÷ÑHÿÉù
+ÀAŸR3ÉBÐø	wÂÐë
+BøwÂ©ëB¿øwÂÉëÑAAŸRBÐø	wÂÐë
+BøwÂ©ëB¿øwÂÉëÑAAŸRBÐø	wH|$ JÐžA	HÄ(ÃBøwH|$ J©žA	HÄ(ÃB¿øwJÉH|$ A	žHÄ(Ãù
+cAŸR3ÉBÐø	wÂÐë
+BøwÂ©ëB¿øwÂÉëÑAŸzGÐø	wÇÐë
+GøwÇ©ëG¿øwÇÉëùÁâ×AAŸRBÐø	wÂÐë
+BøwÂ©ëB¿øwÂÉëÑAŸzGÐø	wÇÐë
+GøwÇ©ëG¿øwÇÉëùÁâ×AAŸRBÐø	wÂÐë
+BøwÂ©ëB¿øwÂÉëÑAŸzGÐø	wOÐH|$ ÁâÑžAHÄ(ÃGøwO©H|$ ÁâÑžAHÄ(ÃG¿øwOÉH|$ ÁâžÑAHÄ(Ãù
+u_AŸJèAŸJÐÁâèÐAAŸJèAŸJÐÁâèÐAAŸJ	èAŸJ
++ÐÁâèÐžAH|$ HÄ(Ã3ÀHÄ(Ãr''''®'œ'ÕÜ**0! **
+`gÕ**6!t *
+*`Eg**<!t *
+*`#E**B!t *
+*`û#**H!t *
+*`Þû**N!t *
+*`ÁÞ**T!t *
+*` Á**Z!t *
+*` **`B@SHì0IÙIÀM
+ÀtcA8#LL$ HT$$LD$PHÈuèëè
+Àt;DL$PDD$ L$$A¶ÑA¶ÀKÁàÁâDK
+Ð¶ÁDC
+ÐžHÄ0[Ã3ÀHÄ0[Ã**1j|kkiR0žÃE
+É~/AÉA¶IÀHéA@üA¶@ùA@ýA¶@úA@þuÜóÃ3ÀÃHl$VHì0¹AèèHðH
+ÀtGH\$@\$pH|$H|$xDÍAžË×HÇD$ ÿ^H\$@H~
+H|$HHÆnHl$PHÄ0^ÃIfq}!
+f!t	4
+
++
++T
++
++R`Hì(H
+ÉtèHÄ(Ã
++BH
+Ét
+SHì HÙH	ÿHËèHÄ [óÃ %¡¡
++
++20@comp.id	xÿÿ.drectve].debug$Sl.textòeS malloc .text
+K¯? calloc .textª:, realloc .textºïA .textºïP .text8öhû_ .pdata	
+ÈH(Vm	.xdata
++
+%ÍY%
++$LN3.text
+ºï¬
+ .text
+'g6œ
+ .text
+ÜæPíÊ
+ .pdata
+G^Z
+Õ.xdataº!@
+ê.pdata
+UÄÝ
+ÿ.xdataLRµ
+.pdata
+ªÁ
+œ
+).xdataLRµ
+>.pdata
+im!Á
+S.xdataLRµ
+g.pdata
+>yÕ
+{.xdataLRµ
+.pdata
+îî
+£.xdataLRµ
+·.pdata
+QðØ
+Ë.xdataLRµ
+ß.pdata
+
+Q=®
+ó
+.xdata
+àfR
+
+.pdata
+
+Vbvù
+
+.xdataÑ9Å
+-.text |b@  .pdata!
+ßÿû L!.xdata"cŒ _"s $LN8 .text#¢+É
+# .text$6k¯ÊÒ$ .text%ºï% .text&qû;ŠÀª& .pdata'
+æX§&·'.xdata(kÉÌ
+&Í(.pdata)
+±Ûh&ã).xdata*Jâ<&ù*.pdata+
+#¥&+.xdata,
+ÿM&#,8$LN13&.text-Ç
+K- .pdata.
+È64ò-V..xdata/Ñ9Å-h/free $LN4-.text0%"kzj{0 .pdata1
+2l±01.xdata2kžÃ
+02Ž$LN80ÇboundCheckingMallocboundCheckingCallocboundCheckingReallocXDefaultVisualXDefaultScreenXDefaultDepth$pdata$XDefaultDepth$unwind$XDefaultDepth__imp_GetDeviceCapsXDefaultColormaphexCharToIntrgbFromHex$pdata$13$rgbFromHex$chain$13$rgbFromHex$pdata$12$rgbFromHex$chain$12$rgbFromHex$pdata$10$rgbFromHex$chain$10$rgbFromHex$pdata$8$rgbFromHex$chain$8$rgbFromHex$pdata$6$rgbFromHex$chain$6$rgbFromHex$pdata$4$rgbFromHex$chain$4$rgbFromHex$pdata$2$rgbFromHex$chain$2$rgbFromHex$pdata$0$rgbFromHex$chain$0$rgbFromHex$pdata$rgbFromHex$unwind$rgbFromHexXParseColor$pdata$XParseColor$unwind$XParseColorxpmGetRGBfromNameXAllocColorXQueryColorsXFreeColorsXCreateImage$pdata$2$XCreateImage$chain$2$XCreateImage$pdata$1$XCreateImage$chain$1$XCreateImage$pdata$XCreateImage$unwind$XCreateImage__imp_CreateBitmapXImageFree$pdata$XImageFree$unwind$XImageFreeXDestroyImage$pdata$XDestroyImage$unwind$XDestroyImage__imp_DeleteObject
++scan.obj/       1345988050              100666  8135      `
++d
+Ò%:P)l.drectve]Ä
++.debug$Sl!@B.rdata]@P@.dataêò@@À.text²ü® P`.pdata
+žÄ@0@.xdataâ@0@.text0ú P`.textD*n P`.pdata
+ ¬@0@.xdataÊÞ@0@.pdata
+ü	@0@.xdata&	:	@0@.pdata
+X	d	@0@.xdata	@0@.rdata	@0@.text	
+ P`.pdata
+_k@0@.xdata@0@.pdata
+·Ã@0@.xdata
+áý@0@.pdata
+'@0@.xdata
+Ea@0@.rdatak@@@.text¥y
+ P`.pdata
+2>@0@.xdata
+\@0@.textÕxM P`.pdata
+ãï@0@.xdata
+
+@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñ`"d:\Develop\xpm\lib\scan.obj:<bÐ	x	xMicrosoft (R) Optimizing Compiler .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|Hl$Ht$ ATHì A8MàHòétAÇ3ÀHl$@Ht$HHÄ A\ÃH
++H\$0ZH|$8zH;ßs9(t
++ÿÃHÀ;ßrò;ßu,R;úr
+ÒVÁâèH
+ÀužëHH,žÿFA
+$3ÀH\$0H|$8Hl$@Ht$HHÄ A\Ãu²
+
+H
++Ht@4d	T2
+À
+Éu"9JuHÇBÇBAÇ3ÀÃAÇ3ÀÃH\$Hl$WHì HéJIØúèLØHEH
+ÀuACýH\$8Hl$@HÄ _ÃL
+IÿÃE3ÀA¶ACÿÿv<DWÿA÷ØžÉB²IÿÃA÷àDÂžÉB²AÁèA÷àÁêkÒ\D+ÂIêC¶
+AKÿuËHt$0AÆH
+Û
+Á%uºáspùtb
+ÀtH4IHÁæHspëHCpH4È¿H]H+õ@H
+
+H
+Ét
+èHH
+Àt7ÿÇHÃÿvß3ÀHt$0H\$8Hl$@HÄ _ÃH
+èHE(H
+ÀuÔžýÿÿÿëÏ1B
++ú0+/00(D !d
+,(&!d
+,,T42
+pNone@SVWAVAWHìHH3ÄH$pHŒ$ð3ÀE3öIñDD$0LúHT$8HÙHL$`HD$HH
+ÿtöt
+HGHD$@ëèHËHÐèDD$0HD$@$à
+ÛtIÇ0AÿÈHÆL|$8DD$0B
+ÅèHD$XH
+Àu
++žýÿÿÿé&H¬$ØL€$E3äL¬$IïLèD9d$0ÂDŒ$èAGÈèLØHEH
+ÀóLDÃžÉB²IÿÃ÷ãÁêkÒ\D+ÂC¶ACÿAÿv@EOÿfDËžÉB²IÿÃA+È÷ážÉB²DÂAÁèA÷àÁêkÒ\D+ÂIéC¶
+AKÿuÊE3AÿÄAEIÅÿÃHÅ0HÆAGD;d$0TÿÿÿL|$8HD$Xt$0HT$@HL$`DÎLÀè3Ò3ÉèØD$`H
+ÿtjºás3L_pLW0DwhD¯L\$8LT$@ë\HL$Xèžýÿÿÿéžºás)HGpLW0DwhD¯HD$HLT$@L\$HL\$8ëL\$HLT$HDl$`L\$8LT$@ÇD$P
+öHMg(L|$XIoE
+öE3É3ÒE3ÀE
+öt*@A;ÕuA¹ëEûIÈI+ÉA9t
++ÿÂIÿÀA;ÖrÚA;ÖtNHD$HH
+ÀtJ<Àë
+H<RHÁçIûI\$àI+üŸHL(H
+ÉtèHHÃHîuä\$`t$0ëj
+Ût.¶ED¶MD¶EÿÓ3ÉD$ èH
+ÀtHÈèI$ë1¶ED¶MD¶EÿHHL$pD$ èHL$pèI$I<$t&D$PLT$@L\$8ÿÀIÄ0HÅD$P;Æßþÿÿë
+IÏèÓ3ÉèžýÿÿÿëL|$XIÏèÓ3Éè3ÀL€$H¬$ØL¬$H$pH3ÌèHÄA_A^_^[ÃSaRlQ£1ö1
+
++ŸPÇONî0$M10LLZId0NŠHºNÃHíTá44:!»44
+F»á44@!ÔPÄQT[»44F»44F!Rðàp`0pG#%02x%02x%02xH\$Hl$Ht$WATAUAVAWHì Lt$pHLéH	I~EùAðÿ3íE
+ÿt>Ld$x3Û
+öt,@IMDÅÓÿLÇIÖÈAÿÔ
+Àu0ÿÃHÇ;ÞrØÿÅA;ïrÇ3ÀH\$PHl$XHt$`HÄ A_A^A]A\_ÃžýÿÿÿëÜ6_[^¥WW]
+
+
+d
+
+T
+
+4
++
+2ðàÐÀpLL$ SVATAUAVAWHìhE3äIØLòLùÇD$PAôEìLd$@Ld$HDd$TDd$XH
+Òt	rDj
+ë
+H
+ÛtApEh
+H$ÀH
+Étš uºàs
+A,$šëD€$šAÍºH¬$ H|$`¯ÎèHD$HH
+ÀuXýéL$PÁáèHD$@H
+ÀuXýéyH
+Ût[HIH|$HÿAìE
+ítBAÜ
+öt4DIDÅÓÿHT$@LÇÈè
+À
+ÿÃHÇ;ÞrÑÿÅA;írŸM
+ötWIIH|$HÿAìE
+ít>AÜ
+öt0DIDÅÓÿHT$@LÇÈè
+Àu9ÿÃHÇ;ÞrÕÿÅA;írÂL$Tº0èLàH
+Àu
+Xýé»ýÿÿÿé»ýÿÿÿéDD$Tž\¹D;ÀvkÀ\ÿÁD;ÀwöŒ$šD$X;ùBù
+Àt&H¬$À×IÌLÅèØ
+Àu6D$XDD$TëH¬$ÀLL$@Hl$0IÔIÏ|$(D$ èØ
+Àt9HD$HH
+ÀtHÈèHD$@H
+ÀtHÈèM
+ät
+T$TIÌèÃë1H$žD$TA
+HD$H1DiyLaHAHL$@è3ÀH|$`H¬$ HÄhA_A^A]A\^[Ã¢jÀ1è_
++^H_j^y
+jE4]NoNi³NÕkkh
+t
+TÂð
+à
+Ð	À`0@comp.id	xÿÿ.drectve].debug$Sl.rdata]ßèq%.data\.text²å&Øf .pdata
+ÚÑÓq.xdataèÏÜL .text0ôÈSÛ« .text	D/g
+ºº	 .pdata
++
+eµÔ	Ï
++.xdata
+mÑ¯-	í
+.pdata
+
+[x	
+
+.xdata
+Á|i	)
+.pdata
+º`g	G.xdataBrÿ	c.rdataµxEÞstrdup  .textv
+¯ .pdata
+
+Ÿ¿.xdata
+ Ë2Ø.pdata
+Âî{ñ.xdata
+
+p
++.pdata
+ñÊ#.xdata
+ôh:R c sprintf .rdataÃÀ2s€ free ² Â Ï à ï .text¥Øpš$ .pdata
+èé­â+.xdata
+mÛ
+D^m.text
+ÕiŒ\m
+ .pdata
+
+QibÙ
+
+.xdata
+
+Eöæ
+œ
+à ò $LN60
+??_C@_0FN@DGCADKFA@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@printablestorePixel$pdata$storePixel$unwind$storePixelboundCheckingReallocstoreMaskPixelScanTransparentColor$pdata$2$ScanTransparentColor$chain$2$ScanTransparentColor$pdata$0$ScanTransparentColor$chain$0$ScanTransparentColor$pdata$ScanTransparentColor$unwind$ScanTransparentColor??_C@_04OHJIHAFH@None?$AA@boundCheckingMallocScanOtherColors$pdata$3$ScanOtherColors$chain$3$ScanOtherColors$pdata$2$ScanOtherColors$chain$2$ScanOtherColors$pdata$ScanOtherColors$unwind$ScanOtherColors__GSHandlerCheckxpmFreeRgbNames??_C@_0O@BMIEBHPL@?$CD?$CF02x?$CF02x?$CF02x?$AA@xpmGetRgbNamexpmReadRgbNamesXQueryColorsXDefaultColormapXDefaultScreen__security_cookie__security_check_cookieMSWGetImagePixels$pdata$MSWGetImagePixels$unwind$MSWGetImagePixels__imp_GetPixel__imp_SelectObjectXpmCreateXpmImageFromImage$pdata$XpmCreateXpmImageFromImage$unwind$XpmCreateXpmImageFromImagexpmFreeColorTableboundCheckingCalloc
++rgb.obj/        1345988050              100666  39939     `
++döÒ%:P;Jê.drectve]&
++.debug$Slá&@B.rdata
+M'@@@.rdataY'@0@.rdata
+`'@@@.rdatak'@0@.rdataq'@0@.rdata
++w'@@@.rdata'@0@.rdata
++'@@@.rdata
+'@@@.rdata'@0@.rdata¥'@@@.rdata­'@0@.rdata
++±'@@@.rdata
+»'@@@.rdataÇ'@0@.rdata
++Ì'@@@.rdata
++Ö'@@@.rdataà'@@@.rdataè'@0@.rdata	ï'@@@.rdata	ø'@@@.rdata
+(@@@.rdata
+(@0@.rdata
+(@@@.rdata
++(@@@.rdata
++)(@@@.rdata3(@0@.rdata7(@0@.rdata
+>(@@@.rdataI(@0@.rdataN(@0@.rdataS(@0@.rdata
++X(@@@.rdata
+b(@@@.rdatam(@@@.rdata{(@@@.rdata
++(@@@.rdata(@@@.rdata¡(@0@.rdata
++š(@@@.rdata²(@0@.rdata
++¹(@@@.rdataÃ(@@@.rdata	Ë(@@@.rdataÔ(@0@.rdata
+Ù(@@@.rdata	å(@@@.rdata
++î(@@@.rdata
++ø(@@@.rdata
+)@@@.rdata)@@@.rdata)@@@.rdata/)@@@.rdataA)@@@.rdataQ)@@@.rdata
+`)@@@.rdata
+m)@@@.rdataz)@@@.rdata)@@@.rdata
+)@@@.rdata§)@@@.rdataž)@0@.rdata¿)@@@.rdataÇ)@0@.rdata
++Í)@@@.rdata
+×)@@@.rdataã)@@@.rdataò)@@@.rdata*@@@.rdata
+*@@@.rdata
+*@@@.rdata
++*@@@.rdata
++7*@@@.rdata
++A*@@@.rdataK*@@@.rdata`*@@@.rdata
++o*@@@.rdata
+y*@@@.rdata
++*@@@.rdata
+*@@@.rdata
++*@@@.rdata¥*@@@.rdata	³*@@@.rdataŒ*@0@.rdataÂ*@0@.rdata
++È*@@@.rdataÒ*@@@.rdata	Ú*@@@.rdata
+ã*@@@.rdataï*@0@.rdataõ*@0@.rdataü*@0@.rdata+@0@.rdata
+++@0@.rdata+@0@.rdata+@0@.rdata+@0@.rdata&+@0@.rdata-+@0@.rdata4+@0@.rdata;+@0@.rdataA+@0@.rdataH+@0@.rdataO+@0@.rdataV+@0@.rdata]+@0@.rdatad+@0@.rdatak+@0@.rdatar+@0@.rdatay+@0@.rdata+@0@.rdata+@0@.rdata+@0@.rdata+@0@.rdata+@0@.rdata¢+@0@.rdata©+@0@.rdata°+@0@.rdata·+@0@.rdataŸ+@0@.rdataÅ+@0@.rdataÌ+@0@.rdataÓ+@0@.rdataÙ+@0@.rdataà+@0@.rdataç+@0@.rdataî+@0@.rdataõ+@0@.rdataü+@0@.rdata,@0@.rdata
++,@0@.rdata,@0@.rdata,@0@.rdata,@0@.rdata%,@0@.rdata,,@0@.rdata3,@0@.rdata:,@0@.rdataA,@0@.rdataH,@0@.rdataO,@0@.rdataV,@0@.rdata],@0@.rdatad,@0@.rdatak,@0@.rdataq,@0@.rdatax,@0@.rdata,@0@.rdata,@0@.rdata,@0@.rdata,@0@.rdata,@0@.rdata¢,@0@.rdata©,@0@.rdata°,@0@.rdata·,@0@.rdataœ,@0@.rdataÄ,@0@.rdataË,@0@.rdataÒ,@0@.rdataÙ,@0@.rdataà,@0@.rdataç,@0@.rdataî,@0@.rdataõ,@0@.rdataü,@0@.rdata-@0@.rdata	-@0@.rdata-@0@.rdata-@0@.rdata
+-@0@.rdata%-@0@.rdata,-@0@.rdata3-@0@.rdata:-@0@.rdataA-@0@.rdataH-@0@.rdataO-@0@.rdataU-@0@.rdata\-@0@.rdatac-@0@.rdataj-@0@.rdataq-@0@.rdatax-@0@.rdata-@0@.rdata-@0@.rdata-@0@.rdata-@@@.rdata-@0@.rdata£-@0@.rdata©-@0@.rdata¯-@0@.rdata
++Ž-@@@.rdataŸ-@0@.rdata
+Ã-@@@.rdata
++Î-@@@.rdata
+Ø-@@@.rdata
+ä-@@@.rdata
++ð-@@@.rdata
+ú-@@@.rdata.@@@.rdata
+
+.@@@.rdata	.@@@.rdata
+".@@@.rdata-.@@@.rdata;.@@@.rdataI.@@@.rdata
+W.@@@.rdata
+d.@@@.rdata
+o.@@@.rdata
+z.@@@.rdata
+.@@@.rdata
++.@@@.rdata
++.@@@.rdataš.@@@.rdata¶.@0@.rdata	».@@@.rdataÄ.@@@.rdataÓ.@0@.rdata
++Ù.@@@.rdata
+ã.@@@.rdata
++î.@@@.rdata
++ø.@@@.rdata/@0@.rdata
+/@@@.rdata/@0@.rdata/@@@.rdata'/@0@.rdata-/@0@.rdata4/@0@.rdata:/@0@.rdata
+@/@@@.rdata
+K/@@@.rdata
++X/@@@.dataŽb/>ê@PÀ.text:GAG P`.textpKG»G P`.pdata
+ÙGåG@0@.xdataH@0@.textj
+HuI
+ P`.pdata
+íIùI@0@.xdata
+J@0@.rdata3J@0@.text8J P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñ_!d:\Develop\xpm\lib\rgb.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerYellowGreenYellowWhiteSmokeWhiteWheatVioletRedVioletTurquoiseTransparenttomatoThistleTanSteelBlueSpringGreensnowSlateGraySlateBlueSkyBlueSiennaseashellSeaGreenSandyBrownSalmonSaddleBrownRoyalBlueRosyBrownRedpurplePowderBluePlumPinkperuPeachPuffPapayaWhipPaleVioletRedPaleTurquoisePaleGreenPaleGoldenrodOrchidOrangeRedOrangeOliveDrabOldLaceNavyBlueNavyNavajoWhitemoccasinMistyRoseMintCreamMidnightBlueMediumVioletRedMediumTurquoiseMediumSpringGreenMediumSlateBlueMediumSeaGreenMediumPurpleMediumOrchidMediumGoldenrodMediumForestGreenMediumBlueMediumAquamarineMaroonMagentalinenLimeGreenLightYellowLightSteelBlueLightSlateGrayLightSlateBlueLightSkyBlueLightSeaGreenLightSalmonLightPinkLightGrayLightGoldenrodYellowLightGoldenrodLightCyanLightCoralLightBlueLemonChiffonLawnGreenLavenderBlushlavenderKhakiivoryIndianRedHotPinkhoneydewGreenYellowGreenGray99Gray98Gray97Gray96Gray95Gray94Gray93Gray92Gray91Gray90Gray9Gray89Gray88Gray87Gray86Gray85Gray84Gray83Gray82Gray81Gray80Gray8Gray79Gray78Gray77Gray76Gray75Gray74Gray73Gray72Gray71Gray70Gray7Gray69Gray68Gray67Gray66Gray65Gray64Gray63Gray62Gray61Gray60Gray6Gray59Gray58Gray57Gray56Gray55Gray54Gray53Gray52Gray51Gray50Gray5Gray49Gray48Gray47Gray46Gray45Gray44Gray43Gray42Gray41Gray40Gray4Gray39Gray38Gray37Gray36Gray35Gray34Gray33Gray32Gray31Gray30Gray3Gray29Gray28Gray27Gray26Gray25Gray24Gray23Gray22Gray21Gray20Gray2Gray19Gray18Gray17Gray16Gray15Gray14Gray13Gray12Gray11Gray100Gray10Gray1Gray0GrayGoldenrodGoldGhostWhitegainsboroForestGreenFloralWhiteFirebrickDodgerBlueDimGrayDeepSkyBlueDeepPinkDarkVioletDarkTurquoiseDarkSlateGrayDarkSlateBlueDarkSeaGreenDarkSalmonDarkOrchidDarkOrangeDarkOliveGreenDarkKhakiDarkGreenDarkGoldenrodCyancornsilkCornflowerBlueCoralchocolatechartreuseCadetBlueburlywoodBrownBlueVioletBlueBlanchedAlmondBlackBisqueBeigeAzureAquamarineAntiqueWhiteAliceBlueðøÿúë×2¿ÁðÿÿõõÜÿäÄÿëÍÿ+â¥**Þž_ÿÒi
+ÿrV""ÿøÜÿÿž
+V-œ·kUV/ÿ ézŒ8Kf/OOŠŠÓÿ¿ÿTTT
+ÿ##ÿúðPiÜÜÜøøÿÚªïß~~~ÿÿÿ
+
+
+!!!$$$&&&)))+++...000333666888;;;===@@@BBBEEEGGGJJJMMMOOORRRTTTWWWYYY\\\^^^aaaccc
++
++
++fffiiikkknnnpppsssuuuxxxzzz}}}
+
+
+
+
+
+¡¡¡£££ŠŠŠššš«««­­­°°°³³³µµµžžžºººœœœ¿¿¿ÂÂÂÄÄÄÇÇÇÉÉÉÌÌÌÏÏÏÑÑÑÔÔÔÖÖÖÙÙÙÛÛÛÞÞÞàààãããåååèèèëëëíííðððòòòõõõ÷÷÷úúúüüüÿ­ÿ/ðÿðÿiŽk99ÿÿð³³~ææúÿðõ|üÿúÍ°âÿðàÿÿîÝúúÒšššÿ¶Áÿ z ²ªÎúpÿw|Óÿÿà¯úðæÿÿR22Ì2KÑÁfœRœpÛ4wfjj##ÒÒÕ y//dõÿúÿäáÿäµÿÞ­##u##uýõæk#ÿÿEïïîèªsÞx¯îîÛpÿïÕÿÚ¹Í
+?ÿµÅÅH°àæ  ðÿŒAiáEézô€`RÿõîR-rÿ~«pÿúúA¬ATpªÞžØ¿ØÿcGÌß>Îó>õÞ³ÿÿÿõõõÿÿ2Ø8êÂ¿ Œ0¹@¶P³`°p­ª§ €°¡ÀÐàð 0@P`p}zw t°qÀnÐkàhðeb_ \0Y@VPS`PpMJG D°AÀ>Ð;à8ð52/ ,0)@&P#` p
+ °ÀÐ
+àðÿ ü0ù@öPó`ðpíêç ä°áÀÞÐÛàØðÕÒÏ Ì0É@ÆPÃ`Àpœº· Ž°±À®Ð«àšð¥¢ 0@P`p °À~Ð{àxðuro l0i@fPc``p]ZW T°QÀNÐKàHðEB? <09@6P3`0p-*' $°!À
+Ðàð		 	
+0		@	P	`	p	ý	ú	÷ 	ô°	ñÀ	îÐ	ëà	èð	å
++â
++ß 
++Ü0
++Ù@
++ÖP
++Ó`
++Ðp
++Í
++Ê
++Ç 
++Ä°
++ÁÀ
++ŸÐ
++»à
++žð
++µ
+²
+¯ 
+¬0
+©@
+ŠP
+£`
+ p
+
+
+ 
+°
+À
+Ð
+à
+ð
+
+
+
+ 
+|0
+y@
+vP
+s`
+pp
+m
+j
+g 
+d°
+aÀ
+^Ð
+[à
+Xð
+U
+R
+O 
+L0
+I@
+FP
+C`
+@p
+=
+:
+7 
+4°
+1À
+.Ð
++à
+(ð
+%" 
+0@P`p
+
++ÃÆH\$D
+3ÉAÙE
+Û~;DL$(LA¶ÂA;Àu·ÂfÁè¶À;Ãu
+Áê¶ÂA;ÁtÿÁIÂA;Ë|Ñ3ÀH\$ÃH\$HcÁH
+HÀHÁÃÆ
+ÅdÅpÓÓÒ4H\$Hl$Ht$H|$ ATAUAVHì MáMèLòèº HÈHèèH
+Àt08tff¶HHÿÀHÿùuñº HÍèH
+ÀuÐ}HÝtfDŸ
+èHÿÃCÿ;uíHHÍèH
+ÀtÆ@a=3ÛH
+ÿÏ@+ÂÑøHcðHÖHÒHÑHÍè
+Àt.y~ÿë^;ßH
+~ÊAÇÿAÇEAÇ$ë/HÆH
+HÀLÁ¶ÁA·ÁfÁèÁé¶ÀAE¶ÁA$HÍèH\$@Hl$HHt$PH|$XžHÄ A^A]A\Ã(å8ähäãâß­Æ¶ÅÙÞðÅÅBÝjææÜ
+
+
+t
+
+d
++
+T	
+4
+2àÐÀgreyÂ@comp.id	xÿÿ.drectve].debug$Sl.rdata
+³Q
+ù.rdataV³à'.rdata
+'ÒFD.rdata$ãµf.rdata
+w¶.rdata
++Ñíõ{.rdata	#Ÿ	.rdata
++
++V`?æÛ
++.rdata
+
+ØËXžû
+.rdata
+ÉÝ ²
+
+.rdata
+^¡ŠE;
+.rdataËöY.rdata
++åÛ¬Øs.rdata
+¹
+.rdatay~F¶.rdata
++é
++&(Ñ.rdata
++ÄóX­ñ.rdataøÆFg.rdatayiB/.rdata	£DmÜL.rdata	UÀÖk.rdata
+
+rn.rdatasPîü¬.rdata
+q€ñUÉ.rdata
++l Æì.rdata
+
++êÜm
+
+.rdata
+A`.,
+.rdata
+ÌòíF
+.rdata
+Ç;&
+c.rdata !8Ë
+ .rdata!#}º !.rdata"sÖð»".rdata#
++ÝWöÖ#.rdata$
+óÝ¹
+ö$.rdata%d>@%.rdata&ã³
+=&.rdata'
++±b'.rdata(wA£(.rdata)'%>§).rdata*
++}
+Ä*.rdata+Ð5Þâ+.rdata,
++YÐX¿ÿ,.rdata-)tLc-.rdata.	c·÷°=..rdata/ ØÊ\/.rdata0
+u.qw0.rdata1	ayñ1.rdata2
++ž·úâ¹2.rdata3
++ÿ
+¢ÙÙ3.rdata4
+öÓ{ù4.rdata5E_Æ
+5.rdata6ÂÒ
+D6.rdata7I\$l7.rdata8PAkÀ8.rdata9*8Ÿ9.rdata:
+mØ%¿ä:.rdata;
+6Kä;.rdata<V %,<.rdata=Î²UÚT=.rdata>
+'ep÷~>.rdata?íéé ?.rdata@VÖŸÉ@.rdataAèM/æA.rdataBÏ
+B.rdataC
++QÇóÎ C.rdataD
+ErÙ@D.rdataE
+fcE.rdataFOF.rdataGµ¶ø¯G.rdataH
+×íãÕH.rdataIç4}ùI.rdataJ
+`¡
+
+	J.rdataK
++"ÿ<A	K.rdataL
++À»a	L.rdataMu²	M.rdataN³×¶D­	N.rdataO
++
+=Ó	O.rdataP
+<rNó	P.rdataQ
++íBñ
++Q.rdataR
+€±85
++R.rdataS
++P
+WY
++S.rdataTüŠ Æy
++T.rdataU	ªÄ°
++U.rdataVj¢ú¿œ
++V.rdataW)Ò€Ù
++W.rdataX
++¹€¢wõ
++X.rdataYH­
+Y.rdataZ	ê<$3
+Z.rdata[
+M]æR
+[.rdata\šÁÕ(u
+\.rdata]s
+P
+].rdata^24I®
+^.rdata_ý(ÎË
+_.rdata`Œ
+×è
+`.rdataaJšü
+a.rdatab>{³å"
+b.rdatacùíòª?
+c.rdatadžÜé³\
+d.rdatae{Äy
+e.rdataf:Ÿß
+f.rdatagxÇqG³
+g.rdatahDoßQÎ
+h.rdatai^ÄHë
+i.rdatajÊB\Ï
+j.rdataksGÖ%
+k.rdatalH jýB
+l.rdatam	qä_
+m.rdatanÎ0«|
+n.rdatao¶+²
+o.rdatapLå¶
+p.rdataq
+Ô
+Ó
+q.rdatar9öj^ð
+r.rdatasy(Z
+s.rdatat8C)t.rdatau÷ÄFu.rdatav¶4Ýcv.rdatawug6öw.rdatax4V-ïx.rdatayóÀl ºy.rdataz²ñw¹×z.rdata{q¢Zô{.rdata|0A|.rdata}öêòÙ.}.rdata~NBA[J~.rdatasZBg.rdataÀoÂÅ.rdata^ÙÜ¡.rdataB
+ô÷Ÿ.rdata<ïîÛ.rdataÄª®¡ø.rdata
+
+µž
+.rdataFÈ2.rdataùO.rdata·ÛéÀl.rdataüY.rdataVÍ
+@¥.rdataÑÇÂ.rdataØàÞß.rdata³²õü.rdataZ©ì.rdataè£6.rdataÜ%óºS.rdatavÞp.rdata^GÅ.rdatatÄëª.rdata ÅXÆ.rdataa§ÞAã.rdata®»FÆ.rdataï]ß
+.rdata,Ùpô:.rdatamèkíW.rdataª~*¢t.rdataëO1».rdata(
+
+®.rdatai-Ë.rdata5¹ßòè.rdata¥].rdata ä±D! .rdata¡+­	Ã>¡.rdata¢jÚ[¢.rdata£©Ï?ñx£.rdata€èþ$è€.rdata¥/he§²¥.rdataŠnY~ŸÏŠ.rdata§­
++Sì§.rdatašì;H	š.rdata©ò/œ&©.rdataªêH\Bª.rdata«ÓÛSE_«.rdata¬
+ÇËÂ|¬.rdata­]öÐÛ­.rdata®¥ýð¶®.rdata¯ßæéÓ¯.rdata°§Šð°.rdata±Y3Œ¿
+±.rdata²`*².rdata³ÛQG³.rdataŽ³
+
+€dŽ.rdataµËT^µ.rdata¶eG¶.rdata·EyÀº·.rdatažHÙ×ž.rdata¹Ç»òô¹.rdataº* ëº.rdata»AŒá€.».rdataŒúœKŒ.rdataœÃÞ×hœ.rdataŸÜ
+Ÿ.rdata¿ïÌ£¿.rdataÀpMšÀÀ.rdataÁ1|³ÜÁ.rdataÂæ
+øÂ.rdataÃ
++ÂúÃ.rdataÄëÿÊÉ3Ä.rdataÅ
+òô1NÅ.rdataÆ
++qÔpÆ.rdataÇ
+CBêÇ.rdataÈ
+ÑÇë³È.rdataÉ
++Õ×ÖÉ.rdataÊ
+ÙõËõÊ.rdataËCVË.rdataÌ
+ì|Í²4Ì.rdataÍ	S±€sWÍ.rdataÎ
+ÍC
+vÎ.rdataÏpËÖÏ.rdataÐÏÒœÐ.rdataÑâ¬âÑ.rdataÒ
+zJÒ.rdataÓ
+î÷+Ó.rdataÔ
+ºw^MÔ.rdataÕ
+MgpÕnÕ.rdataÖ]uò7Ö.rdata×
++¥
+w¶×.rdataØ
++g}XÖØ.rdataÙäçâÊöÙ.rdataÚ±*»Ú.rdataÛ	àŽ6Û.rdataÜ8æÊTÜ.rdataÝõuÅÓzÝ.rdataÞ
++kvÞ.rdataß
+=š³¶ß.rdataà
++[Ýz:Øà.rdataá
++GÅøá.rdataâaÇâ.rdataã
+óãg4ã.rdataäËvsVä.rdataåþuCqå.rdataæXfPQæ.rdataç}R.Û³ç.rdataè©~Ðè.rdataéÕRxdìé.rdataê
+
+
+ê.rdataë
+÷1­*
+ë.rdataì
++äÿN
+ì.dataíŽêûLn
+í|
+°í.textî±Œ±Ø
+î .textïpi~n
+ï .pdatað
+P¬ï«
+ð.xdatañ
+ýÞïÀ
+ñ$LN10ï.textòj
+JDÎÖ
+ò .pdataó
+Ç·\çòè
+ó.xdataô
+[ÀNíò
+ôfree 
+ strstr .rdataõ>ÅZ)
+õtolower strchr strdup $LN26ò.textö.B+D
+ö T
+??_C@_0M@HNCGGICD@YellowGreen?$AA@??_C@_06ICCAKDNH@Yellow?$AA@??_C@_0L@NCGMJMDE@WhiteSmoke?$AA@??_C@_05PLKILNHI@White?$AA@??_C@_05PIEKEAEL@Wheat?$AA@??_C@_09GHIAHKFI@VioletRed?$AA@??_C@_06GCLALPIA@Violet?$AA@??_C@_09PKEKPHNP@Turquoise?$AA@??_C@_0M@DMHCPCEI@Transparent?$AA@??_C@_06NALDPNEI@tomato?$AA@??_C@_07NPHLIBMI@Thistle?$AA@??_C@_03CILPFPCI@Tan?$AA@??_C@_09MENJEMGM@SteelBlue?$AA@??_C@_0M@JADEIAIP@SpringGreen?$AA@??_C@_04HPKDHBOB@snow?$AA@??_C@_09DEFDJNGA@SlateGray?$AA@??_C@_09LBCNGEEN@SlateBlue?$AA@??_C@_07PNJLOGGO@SkyBlue?$AA@??_C@_06OLNBEJPI@Sienna?$AA@??_C@_08MFJLKPPC@seashell?$AA@??_C@_08MPDGLOME@SeaGreen?$AA@??_C@_0L@PKPGDMJG@SandyBrown?$AA@??_C@_06JOHNHAPC@Salmon?$AA@??_C@_0M@NBNLJNOB@SaddleBrown?$AA@??_C@_09NKNFPLIJ@RoyalBlue?$AA@??_C@_09HBGGELGD@RosyBrown?$AA@??_C@_03PADCEAKC@Red?$AA@??_C@_06GEHONCEN@purple?$AA@??_C@_0L@IKFOHFNE@PowderBlue?$AA@??_C@_04PCFHDAMD@Plum?$AA@??_C@_04IDKACLOG@Pink?$AA@??_C@_04MJMKNOJB@peru?$AA@??_C@_09OKCCEKJG@PeachPuff?$AA@??_C@_0L@JIMBJDOA@PapayaWhip?$AA@??_C@_0O@KNAELIFM@PaleVioletRed?$AA@??_C@_0O@DAMODFNL@PaleTurquoise?$AA@??_C@_09JIGGJDDI@PaleGreen?$AA@??_C@_0O@CMOHMHEP@PaleGoldenrod?$AA@??_C@_06PAKNAFKG@Orchid?$AA@??_C@_09PDBAPE@OrangeRed?$AA@??_C@_06LMIDBFFB@Orange?$AA@??_C@_09KDCNEHNA@OliveDrab?$AA@??_C@_07PJJBFELP@OldLace?$AA@??_C@_08KJABFMDC@NavyBlue?$AA@??_C@_04PDAFKIPB@Navy?$AA@??_C@_0M@PFCNBHOF@NavajoWhite?$AA@??_C@_08OIIPPDDA@moccasin?$AA@??_C@_09POIPCADB@MistyRose?$AA@??_C@_09MFNHBCHG@MintCream?$AA@??_C@_0N@ILIFGKIL@MidnightBlue?$AA@??_C@_0BA@FICOLOP@MediumVioletRed?$AA@??_C@_0BA@JIEIGGGI@MediumTurquoise?$AA@??_C@_0BC@LMLIHJCA@MediumSpringGreen?$AA@??_C@_0BA@NDCPPFPK@MediumSlateBlue?$AA@??_C@_0P@BALKNGJI@MediumSeaGreen?$AA@??_C@_0N@EPKOGBBA@MediumPurple?$AA@??_C@_0N@BEMAIPGH@MediumOrchid?$AA@??_C@_0BA@IEGBJEPM@MediumGoldenrod?$AA@??_C@_0BC@ECLBICHM@MediumForestGreen?$AA@??_C@_0L@GDAICLDE@MediumBlue?$AA@??_C@_0BB@NPBBOHKP@MediumAquamarine?$AA@??_C@_06NMEFHGAJ@Maroon?$AA@??_C@_07LFEAGNHO@Magenta?$AA@??_C@_05MLLCELJD@linen?$AA@??_C@_09NCIGFANI@LimeGreen?$AA@??_C@_0M@IGPDELNF@LightYellow?$AA@??_C@_0P@EOCAGCIM@LightSteelBlue?$AA@??_C@_0P@LOKKLDIA@LightSlateGray?$AA@??_C@_0P@DLNEEKKN@LightSlateBlue?$AA@??_C@_0N@BDJBFEKK@LightSkyBlue?$AA@??_C@_0O@FDNBLCNP@LightSeaGreen?$AA@??_C@_0M@JKKOJIPA@LightSalmon?$AA@??_C@_09CAIKIAKL@LightPink?$AA@??_C@_09GPKCMEJ@LightGray?$AA@??_C@_0BF@LGEJEPOK@LightGoldenrodYellow?$AA@??_C@_0P@GMJKCLKL@LightGoldenrod?$AA@??_C@_09CBPIIJBO@LightCyan?$AA@??_C@_0L@JFDGDMCP@LightCoral?$AA@??_C@_09IDIENFGE@LightBlue?$AA@??_C@_0N@MIDKCNNJ@LemonChiffon?$AA@??_C@_09IGCCILNJ@LawnGreen?$AA@??_C@_0O@OIOECAME@LavenderBlush?$AA@??_C@_08KJDCPJPL@lavender?$AA@??_C@_05PBMHPMDG@Khaki?$AA@??_C@_05NNJJIMHF@ivory?$AA@??_C@_09GLNHDDDA@IndianRed?$AA@??_C@_07DHJFKJBB@HotPink?$AA@??_C@_08BKNCNHLL@honeydew?$AA@??_C@_0M@GCHHLGNN@GreenYellow?$AA@??_C@_05GGOIJPPE@Green?$AA@??_C@_06DCIOCFPC@Gray99?$AA@??_C@_06CLJFBELD@Gray98?$AA@??_C@_06KMANAIHM@Gray97?$AA@??_C@_06LFBGDJDN@Gray96?$AA@??_C@_06JODLGKPO@Gray95?$AA@??_C@_06IHCAFLLP@Gray94?$AA@??_C@_06MIGBMNHI@Gray93?$AA@??_C@_06NBHKPMDJ@Gray92?$AA@??_C@_06PKFHKPPK@Gray91?$AA@??_C@_06ODEMJOLL@Gray90?$AA@??_C@_05JEMJJCE@Gray9?$AA@??_C@_06DDEMEPMF@Gray89?$AA@??_C@_06CKFHHOIE@Gray88?$AA@??_C@_06KNMPGCEL@Gray87?$AA@??_C@_06LENEFDAK@Gray86?$AA@??_C@_06JPPJAAMJ@Gray85?$AA@??_C@_06IGOCDBII@Gray84?$AA@??_C@_06MJKDKHEP@Gray83?$AA@??_C@_06NALIJGAO@Gray82?$AA@??_C@_06PLJFMFMN@Gray81?$AA@??_C@_06OCIOPEIM@Gray80?$AA@??_C@_05BAFHKIGF@Gray8?$AA@??_C@_06DIBAAIPI@Gray79?$AA@??_C@_06CBALDJLJ@Gray78?$AA@??_C@_06KGJDCFHG@Gray77?$AA@??_C@_06LPIIBEDH@Gray76?$AA@??_C@_06JEKFEHPE@Gray75?$AA@??_C@_06INLOHGLF@Gray74?$AA@??_C@_06MCPPOAHC@Gray73?$AA@??_C@_06NLOENBDD@Gray72?$AA@??_C@_06PAMJICPA@Gray71?$AA@??_C@_06OJNCLDLB@Gray70?$AA@??_C@_05JHMPLEKK@Gray7?$AA@??_C@_06DJNCGCMP@Gray69?$AA@??_C@_06CAMJFDIO@Gray68?$AA@??_C@_06KHFBEPEB@Gray67?$AA@??_C@_06LOEKHOAA@Gray66?$AA@??_C@_06JFGHCNMD@Gray65?$AA@??_C@_06IMHMBMIC@Gray64?$AA@??_C@_06MDDNIKEF@Gray63?$AA@??_C@_06NKCGLLAE@Gray62?$AA@??_C@_06PBALOIMH@Gray61?$AA@??_C@_06OIBANJIG@Gray60?$AA@??_C@_05IONEIFOL@Gray6?$AA@??_C@_06DLJENMJG@Gray59?$AA@??_C@_06CCIPONNH@Gray58?$AA@??_C@_06KFBHPBBI@Gray57?$AA@??_C@_06LMAMMAFJ@Gray56?$AA@??_C@_06JHCBJDJK@Gray55?$AA@??_C@_06IODKKCNL@Gray54?$AA@??_C@_06MBHLDEBM@Gray53?$AA@??_C@_06NIGAAFFN@Gray52?$AA@??_C@_06PDENFGJO@Gray51?$AA@??_C@_06OKFGGHNP@Gray50?$AA@??_C@_05KFPJNGCI@Gray5?$AA@??_C@_06DKFGLGKB@Gray49?$AA@??_C@_06CDENIHOA@Gray48?$AA@??_C@_06KENFJLCP@Gray47?$AA@??_C@_06LNMOKKGO@Gray46?$AA@??_C@_06JGODPJKN@Gray45?$AA@??_C@_06IPPIMIOM@Gray44?$AA@??_C@_06MALJFOCL@Gray43?$AA@??_C@_06NJKCGPGK@Gray42?$AA@??_C@_06PCIPDMKJ@Gray41?$AA@??_C@_06OLJEANOI@Gray40?$AA@??_C@_05LMOCOHGJ@Gray4?$AA@??_C@_06DPBJKACE@Gray39?$AA@??_C@_06CGACJBGF@Gray38?$AA@??_C@_06KBJKINKK@Gray37?$AA@??_C@_06LIIBLMOL@Gray36?$AA@??_C@_06JDKMOPCI@Gray35?$AA@??_C@_06IKLHNOGJ@Gray34?$AA@??_C@_06MFPGEIKO@Gray33?$AA@??_C@_06NMONHJOP@Gray32?$AA@??_C@_06PHMACKCM@Gray31?$AA@??_C@_06OONLBLGN@Gray30?$AA@??_C@_05PDKDHBKO@Gray3?$AA@??_C@_06DONLMKBD@Gray29?$AA@??_C@_06CHMAPLFC@Gray28?$AA@??_C@_06KAFIOHJN@Gray27?$AA@??_C@_06LJEDNGNM@Gray26?$AA@??_C@_06JCGOIFBP@Gray25?$AA@??_C@_06ILHFLEFO@Gray24?$AA@??_C@_06MEDECCJJ@Gray23?$AA@??_C@_06NNCPBDNI@Gray22?$AA@??_C@_06PGACEABL@Gray21?$AA@??_C@_06OPBJHBFK@Gray20?$AA@??_C@_05OKLIEAOP@Gray2?$AA@??_C@_06DMJNHEEK@Gray19?$AA@??_C@_06CFIGEFAL@Gray18?$AA@??_C@_06KCBOFJME@Gray17?$AA@??_C@_06LLAFGIIF@Gray16?$AA@??_C@_06JACIDLEG@Gray15?$AA@??_C@_06IJDDAKAH@Gray14?$AA@??_C@_06MGHCJMMA@Gray13?$AA@??_C@_06NPGJKNIB@Gray12?$AA@??_C@_06PEEEPOEC@Gray11?$AA@??_C@_07EGKCDIIG@Gray100?$AA@??_C@_06ONFPMPAD@Gray10?$AA@??_C@_05MBJFBDCM@Gray1?$AA@??_C@_05NIIOCCGN@Gray0?$AA@??_C@_04KFNAIHAE@Gray?$AA@??_C@_09OGGDAFEL@Goldenrod?$AA@??_C@_04PABHPHAJ@Gold?$AA@??_C@_0L@KFIMMJOB@GhostWhite?$AA@??_C@_09MIGKOGAO@gainsboro?$AA@??_C@_0M@GODNHLND@ForestGreen?$AA@??_C@_0M@BKMBPOEB@FloralWhite?$AA@??_C@_09EHCEAFM@Firebrick?$AA@??_C@_0L@IPLDLLMK@DodgerBlue?$AA@??_C@_07BEDHGNF@DimGray?$AA@??_C@_0M@DGOHEFHM@DeepSkyBlue?$AA@??_C@_08GKFCFKAC@DeepPink?$AA@??_C@_0L@JPDLIDIP@DarkViolet?$AA@??_C@_0O@PIIPJDEI@DarkTurquoise?$AA@??_C@_0O@DGJGPJPH@DarkSlateGray?$AA@??_C@_0O@LDOIAANK@DarkSlateBlue?$AA@??_C@_0N@GHMBCDAH@DarkSeaGreen?$AA@??_C@_0L@GDPGEMPN@DarkSalmon?$AA@??_C@_0L@NCGDJKJ@DarkOrchid?$AA@??_C@_0L@EBAICJFO@DarkOrange?$AA@??_C@_0P@BPNOIJEF@DarkOliveGreen?$AA@??_C@_09BIACIJCM@DarkKhaki?$AA@??_C@_09IPCNOKOO@DarkGreen?$AA@??_C@_0O@OEKGGBNM@DarkGoldenrod?$AA@??_C@_04ICNCCCFD@Cyan?$AA@??_C@_08DECOJLB@cornsilk?$AA@??_C@_0P@OCMKHHCA@CornflowerBlue?$AA@??_C@_05JNPICLKJ@Coral?$AA@??_C@_09BPADAHOC@chocolate?$AA@??_C@_0L@CHNAEACO@chartreuse?$AA@??_C@_09CGAPEKNC@CadetBlue?$AA@??_C@_09JHLANABP@burlywood?$AA@??_C@_05EGDKJJDN@Brown?$AA@??_C@_0L@PDJLLNIH@BlueViolet?$AA@??_C@_04CAKOHOCJ@Blue?$AA@??_C@_0P@GLFJOHOG@BlanchedAlmond?$AA@??_C@_05BPGNDIAE@Black?$AA@??_C@_06LJLNHCPM@Bisque?$AA@??_C@_05EOEDPHMI@Beige?$AA@??_C@_05CKEFAMIJ@Azure?$AA@??_C@_0L@IKHGMDBB@Aquamarine?$AA@??_C@_0N@FNIJIIIK@AntiqueWhite?$AA@??_C@_09ODOKIMGN@AliceBlue?$AA@theRGBRecordsnumTheRGBRecordsxpmReadRgbNamesxpmGetRgbName$pdata$xpmGetRgbName$unwind$xpmGetRgbNamexpmGetRGBfromName$pdata$xpmGetRGBfromName$unwind$xpmGetRGBfromNamexpmstrcasecmp??_C@_04GDBIAANM@grey?$AA@xpmFreeRgbNames
++RdFToI.obj/     1345988049              100666  5315      `
++dÑ%:P¢
+X.drectve]¬
++.debug$Sp	@B.textEyŸ P`.pdata
+T`@0@.xdata
+~@0@.rdata€@@@.rdataŽ@0@.rdataž@0@.rdataº@@@.rdataÍ@0@.textBÐ P`.pdata
+0<@0@.xdataZj@0@.pdata
+@0@.xdata²Æ@0@.pdata
+äð@0@.xdata@0@.text\r	 P`.pdata
+
++
++@0@.xdata
+2
++N
++@0@.text€X
++ü
++	 P`.pdata
+V
+b
+@0@.xdata
+
+@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñb$d:\Develop\xpm\lib\RdFToI.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerH\$Ht$ WHì0HH3ÄH$ HÚLÁH
+ÉuèHCéÔHÉÿ3ÀIøò®H÷ÑHÿÉùHÑ~OAþH5¹HcøIøóŠu6HHL$ ÇèHHL$ èHCH
+ÀuwÈÿë{ú~OBýH5¹HcøIøóŠu6HHL$ ÇèHHL$ èHCH
+Àu#Èÿë'HIÈèHCH
+ÀtÇÇC
+3ÀH$ H3ÌèL$0I[ Is(Iã_Ã"0!\ r
+°ÆÖÝçü,#E
+$dK4JF
+p gunzip -qc "%s".gzruncompress -c "%s".ZHì(ètøu-HIHÄ(éH\$ HYèH;ØtHËèH\$ HÄ(Ã:'!49=B&&,!
+&&
+8
+=&&2!4
+&
+&8
+&&8B@SUVWATHìðHH3ÄH$àHŒ$@HñHL$@MáIèHÚèHL$`èH$ HËè
+À
+ÞH
+ÿthHÏèHL$`H×èHD$`H|$0HD$(HD$@H$ MÌLÅHÎHD$ èØ
+ÀxLD$`HT$@HÏèHL$`èë.3ÀH$ MÌHD$0HD$(HD$@LÅHÎHD$ èØ$ ètøu&H$šèëèH$šH;ÈtèHL$@èÃH$àH3ÌèHÄðA\_^][Ã":KDJTiIvH¥GœFÇEõG:
+!.98DJ#\LLC ^Àp`P0à@SVWHìpHH3ÄH$`HÙHÊIðHúèHÎèHT$ HËè
+ÀuBHL$ LÆH×èL$ éØtùu HL$(èëèHL$(H;ÈtèÃH$`H3ÌèHÄp_^[Ã"*K2J?SVm:t!9#€WWU
+
+Np`0`@comp.id	xÿÿ.drectve].debug$Sp.textEîÑ¯ .pdata
+=Ç
++Ç.xdata
+'ô×ê%: fopen .rdataÂTAK.rdataÔ¥Ø_popen .rdatat	
+sprintf .rdata	]YVë±	.rdata
++4Þrè
++ 
+ .text
+B*êî7
+ .pdata
+
+zò>á
+D
+.xdata
+Îé^
+Z
+.pdata
+Ÿª
+p.xdata1?U
+.pdata
+ú$Ÿç
+.xdataÑ9Å
+°fclose _pclose .text\ð²aÅ .pdata
+=íþ€Ø.xdata
+ñ
+zfò
+ 
+ , = S b t  $LN15.text€	,¶dé .pdata
+vé.©.xdataÀ¹çÆä $LN11ñOpenReadFile$pdata$OpenReadFile$unwind$OpenReadFile__GSHandlerCheck??_C@_0BA@FCBAHGDL@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_03GBOLEDH@?4gz?$AA@??_C@_01KDCPPGHE@r?$AA@??_C@_0BD@MOKBGPMN@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_02HCDJPINJ@?4Z?$AA@__iob_func__security_cookie__security_check_cookiexpmDataClose$pdata$1$xpmDataClose$chain$1$xpmDataClose$pdata$0$xpmDataClose$chain$0$xpmDataClose$pdata$xpmDataClose$unwind$xpmDataCloseXpmReadFileToImage$pdata$XpmReadFileToImage$unwind$XpmReadFileToImageXpmFreeXpmImageXpmFreeXpmInfoxpmSetAttributesxpmParseDataAndCreatexpmSetInfoMaskxpmInitAttributesxpmInitXpmInfoxpmInitXpmImageXpmReadFileToXpmImage$pdata$XpmReadFileToXpmImage$unwind$XpmReadFileToXpmImagexpmParseData
++RdFToDat.obj/   1345988049              100666  1111      `
++dÑ%:Pi.drectve]Ü
++.debug$Sp9@B.textf© P`.pdata
+7C@0@.xdataa@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\RdFToDat.obj:<bÐ	x	xMicrosoft (R) Optimizing Compiler@SHìHÚÇD$@H
+ÒtHÇLD$@HT$ è
+Àu*LD$@HT$ HËèHL$ ØèHL$@èÃHÄ[Ã+AMWf
+		ò0@comp.id	xÿÿ.drectve].debug$Sp.textfx5È .pdata
+<©.xdata\^]Ë/I X h  $LN5XpmReadFileToData$pdata$XpmReadFileToData$unwind$XpmReadFileToDataXpmFreeXpmInfoXpmFreeXpmImageXpmCreateDataFromXpmImageXpmReadFileToXpmImage
++RdFToBuf.obj/   1345988049              100666  2845      `
++dÑ%:P*2.drectve]D
++.debug$Sp¡@B.textÿ
+ P`.pdata
+~@0@.xdatašž@0@.pdata
+Öâ@0@.xdata@0@.pdata
+2>@0@.xdata
+\x@0@.pdata
+¢@0@.xdataÀÔ@0@.pdata
+òþ@0@.xdata
+
+@0@.rdata(@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\RdFToBuf.obj:<bÐ	x	xMicrosoft (R) Optimizing Compiler@SUHìXHêHÇ3ÒèØ
+ÀxHT$ Èè
+ÀtËèÈÿHÄX][ÃHËHt$pèHðH
+ÀuËèHt$pÈÿHÄX][ÃH|$xL€$Lcd$4AL$èHøH
+Àu
+HÎèGýëELÎMÄºHÈLl$PèHÎHØèA;Üt
+HÏèÈÿë
+AÆ<3ÀH}Ll$PH|$xL€$Ht$pHÄX][Ã0&/1.B-N*].)(µ'À(Í&æÿ11
+!p¯11
+¯æ11!Ô
++p¯1
+1p¯11!
+
+ÄtdH11%Hp11!dH1
+1%H11%¢P0r@comp.id	xÿÿ.drectve].debug$Sp.textÿ
+iñ .pdata
+î ã.xdata8pî5.pdata
+ÝOR.xdataÇîño.pdata
+Ôt'W.xdata	
+=V²í©	.pdata
++
+P?Æ
++.xdata
+:ü=Çã
+.pdata
+
+XÙxú
+.xdata
+
+Ï¹œ³
+free fread fclose 7 _fdopen .rdatat	
+Kclose c open $LN13oXpmReadFileToBuffer$pdata$6$XpmReadFileToBuffer$chain$6$XpmReadFileToBuffer$pdata$5$XpmReadFileToBuffer$chain$5$XpmReadFileToBuffer$pdata$4$XpmReadFileToBuffer$chain$4$XpmReadFileToBuffer$pdata$0$XpmReadFileToBuffer$chain$0$XpmReadFileToBuffer$pdata$XpmReadFileToBuffer$unwind$XpmReadFileToBufferboundCheckingMalloc??_C@_01KDCPPGHE@r?$AA@_fstat64i32
++misc.obj/       1345988048              100666  2352      `
++d
+Ð%:P©/.drectve]
+
++.debug$Sly@B.textGå P`.textp, P`.rdata2@@@.rdataC@@@.rdata
+R@@@.rdata^@@@.rdatam@@@.rdata
+{@@@.rdata@@@.text P`.text P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñ`"d:\Develop\xpm\lib\misc.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerLÉ3ÉDÑ
+Òt8@A¶<0|<9
+ŸÀAÿÂIÿÁLHÐD;ÒrßE
+ÒtD;Òu	AžÃ3ÀÃÁùwFHHcÁHÊÿáHÃHÃHÃHÃHÃHÃHÃf
+'&!$) 1
+9AIQ
+X\`d
+h!l%Invalid XpmErrorXpmColorFailedXpmNoMemoryXpmFileInvalidXpmOpenFailedXpmSuccessXpmColorErroržËvÃé.@comp.id	xÿÿ.drectve].debug$Sl.textG€ Ixpmatoui .textpG
+ª .rdata¡-R.rdata|)@$LN2F.rdata
+;;])f$LN3>.rdataó]h$LN46.rdata	IŒ6¯	$LN5..rdata
++
+Ç_NòÔ
++$LN6&.rdata
+q2Eüö
+$LN7
+$LN12X.text
+$e$'
+ .text
+®¥Ä%XpmFree
+ free 9XpmGetErrorString??_C@_0BB@GEDNKPMF@Invalid?5XpmError?$AA@??_C@_0P@KGAFIAAD@XpmColorFailed?$AA@??_C@_0M@KNHHACKL@XpmNoMemory?$AA@??_C@_0P@EAHBAPJI@XpmFileInvalid?$AA@??_C@_0O@BIFPDKHB@XpmOpenFailed?$AA@??_C@_0L@GGDGBBNE@XpmSuccess?$AA@??_C@_0O@NCABLEEJ@XpmColorError?$AA@__ImageBaseXpmLibraryVersionInfo.obj/       1345988048              100666  2153      `
++d
+Ð%:Pâ&.drectve]ô
++.debug$SlQ@B.text
+œ P`.text{ÙT P`.pdata
+|@0@.xdataŠ¶@0@.pdata
+Ôà@0@.xdataþ@0@.pdata
+0<@0@.xdataZ@0@.text b P`.text` P`   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñ`"d:\Develop\xpm\lib\Info.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerH
+Ét3ÀHAHAHAHA0A(óÃH
+ÉttSHì H|$03ÿº!HÙs6HIH
+Ét	èH{HKH
+Ét	èH{HKH
+Ét	èH{º#
++sS(
+ÒtHK0èH{0{(;H|$0HÄ [óÃ$
+6
+H
+b
+y{!
++
+
+
++y!t
++
+
+
++
+
++
++20Çº"sÇº"
++s	óÃÇº"s$ÇHBxHAHHAHHAº"
++s	HB`HA0BXA(öt	B$A B(A$óÃ@comp.id	xÿÿ.drectve].debug$Sl.text
+Ûµ, .text{
+© .pdata
+£6ÙH".xdata$ö(:.pdata
+Úb(YR.xdataÓžŸÛj.pdata	
+È
+À	.xdata
++kžÃ
+
++¯ free $LN10.text
+ Â¥ÀÁ
+ .text
+`XzÐ
+ ÛxpmInitXpmInfoXpmFreeXpmInfo$pdata$1$XpmFreeXpmInfo$chain$1$XpmFreeXpmInfo$pdata$0$XpmFreeXpmInfo$chain$0$XpmFreeXpmInfo$pdata$XpmFreeXpmInfo$unwind$XpmFreeXpmInfoXpmFreeExtensionsxpmSetInfoMaskxpmSetInfo
++Image.obj/      1345988048              100666  1064      `
++dÐ%:P[.drectve]
++.debug$Spa@B.textÑ P`.text6ß P`.pdata
+)5@0@.xdataS@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ña#d:\Develop\xpm\lib\Image.obj:<bÐ	x	xMicrosoft (R) Optimizing Compiler3ÀA
+HAHAÃ@SHì HÙHIH
+ÉtS
+èHKH
+ÉtèHÇCHÄ [Ã$620@comp.id	xÿÿ.drectve].debug$Sp.text&ã¬û .text6Â
+ç .pdata
+úZ¢C$.xdata£šÙô;free S $LN6expmInitXpmImageXpmFreeXpmImage$pdata$XpmFreeXpmImage$unwind$XpmFreeXpmImagexpmFreeColorTablehashtab.obj/    1345988048              100666  5066      `
++d
+Ð%:P[
+Y.drectve]t
++.debug$SpÑ@B.text1Ar P`.pdata
+|@0@.xdata
+Š@0@.text«² P`.pdata
+]i@0@.xdata
+@0@.textÅX P`.pdata
+v@0@.xdata °@0@.pdata
+ÎÚ@0@.xdataø
+@0@.pdata
+*6@0@.xdataT@0@.text
+hí P`.pdata
+
+		@0@.xdata5	@0@.textmI	¶	 P`.pdata
+À	Ì	@0@.xdata
+ê	@0@.textgö	]
++ P`.pdata
+q
++}
++@0@.xdata
++«
++@0@.pdata
+É
++Õ
++@0@.xdataó
++
+@0@.pdata
+%
+1
+@0@.xdata
+O
+@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñc%d:\Develop\xpm\lib\hashtab.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerH\$WHì Hù¹HÚèH
+ÀtH8HXH\$0HÄ _Ã1
+
++
++4
++2pH\$H|$¶LY3ÀHúLÑLÂÛt$D¶ËffffIÿÀAŸÉkÀEÁEÉuìMc3ÒA÷òIÓMÓH
+ÀtDH8u LÏL+È¶B¶
++ÑuHÿÀ
+Éuí
+ÒtIèM;ÃsODÓøIH
+ÀuÃH\$H|$IÀÃ«
++
++t4H\$Hl$H|$ ATHì LažVUUU<Hé9÷ïÂÁèÐQ
+ýèLØH
+ÀuACýëaHEHcÇI
+ÃI;Ëv3ÀHéHI;ËwôIü
+Û~2Ht$0HóDHH
+ÛtHHÍèHHÇHîuàHt$0IÌè3ÀH\$8Hl$@H|$HHÄ A\Ã<©.¥Å!!s
+-s¥'!ds
+-s-t	T42ÀH\$Hl$Ht$WHì IèHòHÙèHøH8uC¹èH
+ÀtH0HhHH
+Àužýÿÿÿë C;C|HËè
+Àu
+ÿCëÿÀC3ÀH\$0Hl$8Ht$@HÄ _Ã
+1\
+887dT42pH\$WHì HÙÇÇAU3ÿy¹èLØH
+ÀuGýH\$0HÄ _ÃHcI
+ÃI;ËvDHéH9I;ËwôL[H\$03ÀHÄ _Ã%mBBA
++
++4
++2pHt$WHì HyHñH
+ÿtFHcH\$0H
+ÇH;ßv fHKøHëH
+ÉtèH;ßwéHÏèH\$0HÇFHt$8HÄ _Ã>.K.\gXXK!XX
+W\XXQ!4X
+XWXXW
++
++d
++2p@comp.id	xÿÿ.drectve].debug$Sp.text1	|a¥AtomMake .pdata
+ãSgI.xdata
+%ÍY%% .text«ÃÊ€z9 .pdata
+Úû'÷E.xdata
+Uqi¹X$LN18.text	Åf}ª>l	 .pdata
++
+[Ò	{
++.xdata
+|	
+.pdata
+
+ìºy±	«
+.xdata
+'­Ã,	Ã
+.pdata
+sß"	Û.xdata
+S	ñfree .text
+ãÔý .pdata
+ŸÛ.xdataCcô+$LN10.textmšrvOA .pdata
+jµîKR.xdata
+%ÍY%j$LN8.textgFGX .pdata
+/Ÿ_ã.xdataìÀ£Ú®.pdata
+ä18È.xdatafõqãâ.pdata
+*ôcü.xdata
+
+7÷ÐÍ
+$LN8-$pdata$AtomMake$unwind$AtomMakeboundCheckingMallocxpmHashSlot$pdata$xpmHashSlot$unwind$xpmHashSlotHashTableGrows$pdata$1$HashTableGrows$chain$1$HashTableGrows$pdata$0$HashTableGrows$chain$0$HashTableGrows$pdata$HashTableGrows$unwind$HashTableGrowsxpmHashIntern$pdata$xpmHashIntern$unwind$xpmHashInternxpmHashTableInit$pdata$xpmHashTableInit$unwind$xpmHashTableInitxpmHashTableFree$pdata$1$xpmHashTableFree$chain$1$xpmHashTableFree$pdata$0$xpmHashTableFree$chain$0$xpmHashTableFree$pdata$xpmHashTableFree$unwind$xpmHashTableFreedata.obj/       1345988047              100666  13175     `
++d=Ï%:P-Ë.drectve]	
++.debug$Slù	@B.rdatae
++@0@.rdatai
++@0@.rdatan
++@0@.rdatau
++@0@.rdataw
++@0@.rdata|
++@0@.rdata
++@@@.rdata
++@@@.rdata
++@0@.rdata
++@0@.rdata
++@0@.rdata
++@0@.rdata¡
++@0@.rdata£
++@0@.rdata¥
++@@.rdata6Š
++@@@.rdataÜ
++@@@.datað
++
+@PÀ.textEæ
++ P`.pdata
+]i@0@.xdata$«@0@.pdata
+ÉÕ@0@.xdataó@0@.textúûõ
++ P`.pdata
+Ye@0@.xdata@0@.pdata
+±œ@0@.xdataÛï@0@.pdata
+
+@0@.xdata7K@0@.pdata
+iu@0@.xdata@0@.text>Ù	 P`.pdata
+3?@0@.xdata]m@0@.pdata
+@0@.xdataµÉ@0@.pdata
+çó@0@.xdata@0@.textV%{ P`.pdata
+£¯@0@.xdataÍá@0@.textþëé P`.pdata
+@0@.xdata$©Í@0@.textj×A P`.pdata
+Ua@0@.xdata
+@0@.text
+ P`.pdata
+
+
+
+@0@.xdata:
+J
+@0@.pdata
+h
+t
+@0@.xdata
+Š
+@0@.pdata
+Ä
+Ð
+@0@.xdata
+î
+
++@0@.rdata@0@.rdata@0@.rdata
+@@@.rdata%@@@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñ`"d:\Develop\xpm\lib\data.obj:<bÐ	x	xMicrosoft (R) Optimizing Compiler))
++ '(
++(setq ;Lisp};
++[] = {
++static char *,
++*//*C
++!$Id: xpm.shar,v 3.71 1998/03/19 19:47:14 lehors Exp $$XpmVersion: 3.4k $
++""""741. +0181@1H1P(X%`"px
+ +°+ž
+À
++ÈAUHì09Lé
+ùH E3ÉLA ¶Q H IEIÿÀHÿÂ¶HÿÀAÿÁIEA¶:ÈuÀtÉu×:tAÁI)E3ÀHÄ0A]ÃAM ME 3ÒM(A¶A8t-Ét)IEHÿÀHÿIEúÿuME 3ÒIÿÀÿÂAA:	uÓAU
+IEHÿÀHÿIEúÿuME 3ÒIÿÀIÿÁÿÂAA¶:ÈuÀt
++ÉuÉA9uIÿM3ÀHÄ0A]ÃH H\$@Hl$HHt$PH|$(Ld$ LaHy ¶AM Iµ 3ÛIÌèHÿÇHÿÆDØŸÿÃD;Øu
++Àt4AûÿuÙ>t)
+Û¬fŸIÔèHÿÏÃÿuíéE] I} 3ÛIµ(¶8t*Aûÿt$IÌèDØûÿuI} 3ÛHÿÇÿÃ:uÖA]
+fIÌèDØûÿuI} 3ÛHÿÇHÿÆÿÃŸ;Áu	Ét
++øÿuÍ>uŸÈIÔèH|$(Ht$PHl$HH\$@Ld$ 3ÀHÄ0A]ÃGMLºMäMLE??E!
++Ätd
++
++T	4?
+? K??KRÐ@SHì HÙ
+ÀuÿAHAQHÐ3ÀHQHÄ [Ãø
+Í¶1ÒtHCHÿÀ¶HÿHCÉt:Êué»0tNHC¶Ét7DHÿC:0rH H
+Àt
+:uHËèHCÉuÎHÿC3ÀHÄ [ÃH H
+À4HK¶8u&HÿCHËèH L[¶A8
+táHCHC3ÀHÄ [Ã¹1H|$0HytHÏèŸ1;Átøÿuè»0thHÏèŸ0DØ;Á¡@AûÿH H
+ÀtŸD;ÙuHËèHÏèDØŸ0D;ØuÃH|$03ÀHÄ [ÃH» tIHÏèH ŸDØ;Âu%HËèHÏèDØH ŸD;ÙtÞH×AËèH|$03ÀHÄ [Ã?Ø?M6Mr?zMšMÄ?ÌMéLòúiiV!ii
+hòii\!ti
+ihiib!ti
+ihiih20H\$Ht$WATAUHì 3öEàLêHù
+Àø
+Hl$@HifDHÍèØøÿtÈè
+Àt
+Ÿ1;ØuÛËè
+Àu3Ÿ1;Øt(ûÿt#A;ôs
+A]HÍIÿÅÿÆèÈØè
+ÀtÍHÕËèHl$@ÆëtHAŸËè
+Àt)Ÿ1;ØtHÿGHGŸËè
+ÀußHGIÿÅÿÆŸHÿÀHGA]ÿËè
+ÀuŸ1;ØtA;ôrÎHÿOFÿH\$HHt$PHÄ A]A\_ÃDMRhM©LÀé
+¶>r!1
+~1¶x!T1
+~1~d
++4	2Ð
+À
+p@SHì0HH3ÄH$ HÚHT$ AžèHL$ LÃÐèH$ H3ÌèHÄ0[Ã
+*l9IV	F0 
+H\$ UVWATAUAVAWHì@HH3ÄH$03ö3ÿLD$ LúHÙ
+ÀøLqIÎèèøÿNE3äLl$0èŸ1Hø;ét`ýÿt`Aüu3HÏèH
+ÀtVÎHT$0EÄHÈHøèAôE3äLl$0AmIÎIÿÅAÿÄèèŸ1;èu ýÿu$HÏèžþÿÿÿéÜHÏèžýÿÿÿéÊA
+4
+Ût<SHÏèLèH
+ÀtÓÎHT$0EÄHÈHøèóIÖÍÆ;ÿÆèëzIÖÍÆŸèëfHiH
+ít]ŸE
+Àt!Ÿ1;ÁtHÿCHCŸ
+Àuís+õÿÆÎèHøH
+ÀRÿÿÿDÆHÕHÈè;tFÿÆ8HD$ I?03ÀH$0H3ÌèH$HÄ@A_A^A]A\_^]ÃSMn²ÏMéû5GL[L·ßþ)
+4SHðà
+Ð
++Àp`P0
+H\$WHì 9HÚHùtAI
+
+Ét:ÿÁèHW HLcG
+HÈèHLc_
+AÆÇG
+3ÀH\$0HÄ _ÃH\$0HÇ3ÀHÄ _Ã2jŠŠ¥
++
++4
++2pH\$VWATHì0HH3ÄH$ 3ÿHÙ996HT$ Až@¹0Æ1
++H¹(H¹ èL%ø
+HT$ H
+DÀè
+ÀuhHT$ AžHËè
+Àu
++žþÿÿÿéÃHcøHL$ º_ÆD< èH
+ÀtÚH+øH
+HÐLD< è
+Àu¿¿»4éÐHT$ AžHËèøu$HT$ H
+DÀè
+À
+{ÿÿÿxéø
+jÿÿÿHT$ H
+DÀè
+À
+NÿÿÿHT$ AžHËè3öH95tGH¬$XHcèIÄHHT$ LÅè
+ÀtHÿÆÿÇHÆHÁàIÄH8u×H¬$XÇ4Hc÷HÁæJ<&Íþÿÿ
+ÿuBHHËH HH(èD¶
+D0¶1ëR»4JD&H JD&H(u)B¶D&HËÆ10èB¶D&1ëHËè3ÀH$ H3ÌèH$`HÄ0A\_^ÃWl^<sÉ{Æl·ÅÆÄÓÆúl
+ÁÆ8Ÿ@Æ[ld<ÆÔ<å<ñPù<<KPaPs±ÊÊ¯!jÊÊ
+»j±ÊÊµ!TKjÊ
+Ê»jÊÊ»"4LF	Àp` XPM2XPM_format#define@comp.id	xÿÿ.drectve].debug$Sl.rdataQuI.rdataQG0%.rdata§áÜE.rdata8ï²<f.rdata>¢¥¢.rdataºK.rdata	ãÞ*œ	.rdata
++zÌê
++.rdata
+WžË
+.rdata
+[ûÆ'/
+.rdata
+õÍz\L
+.rdataÆ
+TÛi.rdataèïú.rdataã.rdataµ.rdata6gÊ=Ì.rdataÞc
+.dataNvy;RCS_IdG.textEÚ	û2T .pdata
+qO×a.xdata$Ðk©w.pdata
+â=é.xdataû
+¡ungetc getc .textú
++Ú¬e¶ .pdata
+}¬ä¡Ä.xdata
+ßèOÙÛ
+.pdata
+
+>­_\ò
+.xdata
+öµn	
+.pdata
+­Ù6 .xdata (Šf*7 .pdata!
+3`N!.xdata"£šÙôc"$LN42.text#>	,÷áty# .pdata$
+ÿ¶ã­#
+$.xdata%¹0ð#%.pdata&
+K¥#¯&.xdata'æG@#Ä'.pdata(
+ãSgI#Ù(.xdata)ÝÇm#ì)isspace $LN28#.text*V¬¡ÖJ* .pdata+
+AúI*
+++.xdata,7üUñ*,- xpmatoui >P $LN3*.text-þoÞ×h- .pdata.
+Ì
+L-u..xdata/$øªÇ-/free strncpy  ³ $LN30-.text0j^èÇ0 .pdata1
+sŒ+A0Ñ1.xdata2
+%ÍY%0â2$LN80.text3¹ô3 .pdata4
+îB
+·34.xdata5+]
+^35.pdata6
+$À¿336.xdata7xÅí3K7.pdata8
+Ç·\ç3c8.xdata9
+ÚáÏä3y9.rdata:JÁ\V:.rdata;µ8Ò'«;.rdata<®€ÚÕÅ<strrchr strncmp .rdata=ÐŠZã=$LN283??_C@_03MOPCFFLC@?$CJ?$CJ?6?$AA@??_C@_04JEIEPLD@?5?8?$CI?6?$AA@??_C@_06GGEPMBCG@?$CIsetq?5?$AA@??_C@_01ICJEACDI@?$DL?$AA@??_C@_04JLHIKKNM@Lisp?$AA@??_C@_03JFDPLKFJ@?$HN?$DL?6?$AA@??_C@_07IMPHPOHF@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_0O@OCNKJAEC@static?5char?5?$CK?$AA@??_C@_02MLAGHBOD@?0?6?$AA@??_C@_02CHHINNLG@?$CK?1?$AA@??_C@_02FMMEOLBI@?1?$CK?$AA@??_C@_01GFHCPBMG@C?$AA@??_C@_01EEMJAFIK@?6?$AA@??_C@_01DCLJPIOD@?$CB?$AA@??_C@_00CNPNBAHC@?$AA@??_C@_0DG@PHJGIAGF@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0BE@JDDDHCKM@$XpmVersion?3?53?44k?5$?$AA@RCS_VersionxpmDataTypesParseComment$pdata$4$ParseComment$chain$4$ParseComment$pdata$ParseComment$unwind$ParseCommentxpmNextString$pdata$3$xpmNextString$chain$3$xpmNextString$pdata$2$xpmNextString$chain$2$xpmNextString$pdata$0$xpmNextString$chain$0$xpmNextString$pdata$xpmNextString$unwind$xpmNextStringxpmNextWord$pdata$1$xpmNextWord$chain$1$xpmNextWord$pdata$0$xpmNextWord$chain$0$xpmNextWord$pdata$xpmNextWord$unwind$xpmNextWordxpmNextUI$pdata$xpmNextUI$unwind$xpmNextUI__GSHandlerCheck__security_cookie__security_check_cookiexpmGetString$pdata$xpmGetString$unwind$xpmGetStringboundCheckingReallocboundCheckingMallocxpmGetCmt$pdata$xpmGetCmt$unwind$xpmGetCmtxpmParseHeader$pdata$1$xpmParseHeader$chain$1$xpmParseHeader$pdata$0$xpmParseHeader$chain$0$xpmParseHeader$pdata$xpmParseHeader$unwind$xpmParseHeader??_C@_04GPIBMJKI@XPM2?$AA@??_C@_03PJGJBIFG@XPM?$AA@??_C@_07EPAHIEDI@_format?$AA@??_C@_07MAHLPAJA@?$CDdefine?$AA@
++CrIFrDat.obj/   1345988047              100666  2621      `
++d	Ï%:Pà(.drectve]|
++.debug$SpÙ@B.text=I P`.textaç
+ P`.pdata
+Ua@0@.xdata
+@0@.text¹¥^ P`.pdata
+@0@.xdata
+ºÖ@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\CrIFrDat.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerE3ÀHJDHDBDB
+L(L HBD1D0D4Ã@SUVWATHìðHH3ÄH$àHŒ$@HñHL$@MáIèHÚèHL$`èHE3ÛD$ H$šD$žH$°D$ŒL$ÈL$ÀD$ÑD$ÐD$ÔH
+ÿthHÏèHL$`H×èHD$`H|$0HD$(HD$@H$ MÌLÅHÎHD$ èØ
+ÀxLD$`HT$@HÏèHL$`èë,L\$0HD$@L\$(H$ MÌLÅHÎHD$ èØHL$@èÃH$àH3ÌèHÄðA\_^][Ã:D§Žãû1=Oa
+
+ ^Àp`P0àH\$Ht$ WHìpHH3ÄH$`HÙHÊIðHúèHÎèHE3ÛHL$ LÆH×HD$0D\$ H\$(D\$8D\$<L$HL$@D$QD$PD$TèH$`H3ÌèL$pI[Is(Iã_Ã19& ¹''%$dS4PN
+p`@comp.id	xÿÿ.drectve].debug$Sp.text=Xá .texta
+ÜŽB© .pdata
+«6º%.xdata
+ñ
+zfCb s   £ ¹ È Ú é ù
+ $LN9.text¹ÌéÉì# .pdata
+Í¹É=.xdata	
+úGn^	 $LN5OpenArrayXpmCreateImageFromData$pdata$XpmCreateImageFromData$unwind$XpmCreateImageFromData__GSHandlerCheckXpmFreeXpmImageXpmFreeXpmInfoxpmSetAttributesxpmParseDataAndCreatexpmSetInfoMaskxpmInitAttributesxpmInitXpmInfoxpmInitXpmImage__security_cookie__security_check_cookieXpmCreateXpmImageFromData$pdata$XpmCreateXpmImageFromData$unwind$XpmCreateXpmImageFromDataxpmParseData
++CrIFrBuf.obj/   1345988047              100666  2483      `
++d	Ï%:PI(.drectve]|
++.debug$SpÙ@B.textI P`.text'[
+ P`.pdata
+ðü@0@.xdata
+6@0@.text@Ç P`.pdata
+ù@0@.xdata
+#?@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\CrIFrBuf.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerÇHJÇB
+Ã@SUVWATHìðHH3ÄH$àHŒ$@HñHL$@MáIèHÚèHL$`è3ÀÇ$ $ŒH$°H
+ÿthHÏèHL$`H×èHD$`H|$0HD$(HD$@H$ MÌLÅHÎHD$ èØ
+ÀxLD$`HT$@HÏèHL$`èë,HD$0HD$(HD$@H$ MÌLÅHÎHD$ èØHL$@èÃH$àH3ÌèHÄðA\_^][Ã:Dmz©ÁË÷'
+
+ ^Àp`P0àH\$Ht$ WHìpHH3ÄH$`HÙHÊIðHúèHÎèHL$ LÆH×ÇD$ H\$0ÇD$<èH$`H3ÌèL$pI[Is(Iã_Ã19^&n''%$dS4PN
+p`@comp.id	xÿÿ.drectve].debug$Sp.text(Ü)Â .text'
+ŽJjë .pdata
+û`ÄU(.xdata
+ñ
+zfHi z   ª À Ï á ð  $LN9.text×Cj* .pdata
+ÃþYF.xdata	
+úGni	 $LN5OpenBufferXpmCreateImageFromBuffer$pdata$XpmCreateImageFromBuffer$unwind$XpmCreateImageFromBuffer__GSHandlerCheckXpmFreeXpmImageXpmFreeXpmInfoxpmSetAttributesxpmParseDataAndCreatexpmSetInfoMaskxpmInitAttributesxpmInitXpmInfoxpmInitXpmImage__security_cookie__security_check_cookieXpmCreateXpmImageFromBuffer$pdata$XpmCreateXpmImageFromBuffer$unwind$XpmCreateXpmImageFromBufferxpmParseData
++create.obj/     1345988047              100666  16420     `
++d,Ï%:P
+/Š.drectve]ô
++.debug$SpQ@B.texttÁ5 P`.pdata
+IU@0@.xdatas@0@.text P`.text`é P`.pdata
+ý		@0@.xdata'	@0@.text*7	a
++ P`.pdata
+
++
++@0@.xdata©
++@0@.rdataÁ
++@0@.textÍÆ
++
+ P`.pdata
+
+@0@.xdata5M@0@.pdata
+kw@0@.xdata@0@.text©¿ P`.pdata
+ÉÕ@0@.xdataó@0@.textpûk P`.pdata
+u@0@.xdata@0@.text¡§H P`.pdata
+fr@0@.xdata @0@.pdata
+ŸÊ@0@.xdataè@0@.pdata
+
+*@0@.xdataH@0@.textL\š
+' P`.pdata
+.
+:
+@0@.xdata$X
+|
+@0@.text
+$# P`.pdata
+
+$*$@0@.xdataH$\$@0@.pdata
+z$$@0@.xdata€$@0@.text+Œ$ç,' P`.pdata
+m.y.@0@.xdata.«.@0@.pdata
+É.Õ.@0@.xdataó.@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñb$d:\Develop\xpm\lib\create.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerH\$Ht$WHì ¶HÚHùÀt,@;t#ŸÈèŸ
+ðè;ðu%GHÿÇHÿÃÀuØŸŸ
++ÁH\$0Ht$8HÄ _ÃH\$0+ðÆHt$8HÄ _Ã)3t
+d42
+pžÃH\$Ht$WHì IÙHúHñM
+Àt
+è
+ÀuÈÿH\$0Ht$8HÄ _ÃLÃH×HÎèH\$0Ht$83É
+ÀÁÁHÄ _Ã
+
+C
+`d42
+pH\$Hl$Ht$WATAUHì0A9IéLâLéH
+Iùt&;t!ŸèŸ
+ðè;ðuHÿÇHÿÃ?uÚŸ7Ÿ+ð
+öH$ÐLL$hLÅIÔIÍHD$ ÿ$È
+Àyžë}t÷L$D$hH$AAÿHL$xHD$hL$šH$ÇAH$ Aÿë'HD$xH$ÇH$ÇÿÿÿD$p3ÀH\$PHl$XHt$`HÄ0A]A\_Ã():D*  &
++d
+T
+4
++RÐÀpNoneDL$ HL$SUVWATAVHìØE3öAùIèLâHÙH
+Òt
+ö@tHJ@BHH$È$ë3À$H$H$ÈH
+ÒtötHBH$ëHËèHËHÐèH$M
+ätAö$tID$H$ ëHËèHËHÐèH$ ¹M
+ätAº$$sE$šD$ë
++DÁ$M
+ätAº$$sI$ÈH$žëHH$žM
+ätAº$$sI$ØH$°ëLŽ$°AÀètèt
++øuHë
+¹ë¹3öHcÑIcØL¬$ Ž$H$šH$ÀLŒ$Ð
+ÿLŒ$8D$E3íE
+É²HuHŒ$È3ÛE
+Éè@HH
+Àt@H
+ö²LÆL+Àf¶B¶
++ÑuHÿÀ
+Éuí
+Ò¡H$šé{HOH
+ÉnHÂL9lÕu
+HÿÈL9lÅtöHø}&HBHøfDL9lÅu	HÿÀHø~ðHø|-HTÅH
+Òtè
+Àt+H$šD$ëH$šÿÃHÇA;Ù.ÿÿÿëD$D$A;Ù L9/ìLOM
+ÉßH$°Ž$L$H$ H$H$H$žHD$xH$`Dl$pLl$hLd$`HD$XH$XHD$PH$PHD$HH$HHD$@H$@HD$8H$0L|$0HD$(t$ è
+ÀuD$H$ÀDhéÐD$H$ÀAŸéµGL¬$0AEHH
+ÿt\¶H
+Àt(;t#ŸÈèŸ
+ðè;ðu/GHÿÇHÿÃÀuØŸ7Ÿ+ð
+öuH$@$A7ë
++ðëâAÇH$`L$XAE
++Ž$AÿD$é	Ž$IcØAøE
+í
+ðH\ÝÿÒL
+M
+É«H$°L$H$ H$H$H$žHD$x3ÀD$pHD$hH$`Ld$`HD$XH$XHD$PH$PHD$HH$HHD$@H$@HD$8H$0L|$0HD$(t$ è
+ÀtAŸÿÏHëé5ÿÿÿD$AœëD$AxE
+í
+ãH$ÀH\ÅÿÂL
+M
+É«H$°L$H$ H$H$H$žHD$x3ÀD$pHD$hH$`Ld$`HD$XH$XHD$PH$PHD$HH$HHD$@H$@HD$8H$0L|$0HD$(t$ è
+Àt$AŸÿÇHÃé5ÿÿÿD$E
+íuAEüë?D$Œ$(H$0H$šÿÆHÅ0IÇŽ$IcØ;÷ûÿÿAÆLŒ$ÐL¬$ HÄØA^A\_^][Ã;:µ;À9
+ à)ñûB B zÍ,,2!''ôÔ$z
+,,8z,,8àÀp
+`
+P
+0Hì8ÇD$ èHÄ8Ã
+E>>Db@SHìPAøvž ëžAºD;ÀAGÂ3Û\$HD$@$D$8$D$0\$(\$ èH$HH
+À¹ýÿÿÿDÙÃHÄP[ÃNOpHHN0H\$UVATAVAWHì HHl$pLáH	EñAðÿ3ÛLøE
+ötMH|$PLl$XLl$x3ÿ
+öt'fDEI
+$DÃEL
+×ÿÿÇHÅ;þrßÿÃA;ÞrÌLl$XH|$PI
+$I×H\$`HÄ A_A^A\^]Hÿ%'fcef¡RRX!5RR
+d5RR^!
++
++Ô
+t
++5
+RRd5RRd4
+2
+ð
+à	À`PH\$UVWATAUAVAWHìp
++HH3ÄH$`
++H$ð
++Ž$Ø
++LŒ$à
++L¬$è
++HD$0H$ø
++HD$@H$
+HéHD$8HL$(H$
+ÆDL$ EðèDD$$HúHL$Hø±¬$Ð
++Ht$PÆ4`þ7ý.E3öEæE
+ÉJLþAØDHÏèAî
+ÛîH$`
+öt?I÷
+ÀtøtHOèDØëHGHÿÀDŸXÿHGDHÿÃHîuËŽ$Ø
++H$`IÍèHØL90HD$0HL$(HH	ÿLHD$@AKEÄÕD
+HD$(HÿHD$HH
+Àt4HHD$(HÿLHL$8ACEÄÕD
+HD$(HÿÿÅ;l$$ÿÿÿ\$$AÿÄD;d$ ñþÿÿé+E3öEîE
+É
+HÏèEæD9t$$%H$`
+ötAHt$P
+ÀtøtHOèDØëHGHÿÀDŸXÿHGDHÿÃHîuËŽ$Ø
++AÞ
+ítIffffH
+[L$`HÉIÏL+Àff¶B¶
++ÑuHÿÀ
+Éuí
+ÒtÿÃ;ÝrÃ;Ý©HD$0HHD$(HÿHD$@EÅD
+HD$(AÔHÿHD$HH
+Àt.HHD$(HÿHD$8EÅD
+HD$(AÔHÿAÿÄD;d$$âþÿÿAÿÅD;l$ ·þÿÿéÎHL$`3ÒAžèD€$Ð
++E3íAÝE
+ätYffÃH4@HöI÷HŸHéL9lÌ`uº¹èHDì`H
+ÀtlI÷SÿÃ¶HHDì`fHA;Ür±EåD9l$ VHÏèAíE
+ö1L|$(
+Àt?øt:HOèØë<JLì`H
+ÉtèIÿÅIý|åžýÿÿÿéÜHGHÿÀŸXÿHGCÿ=þ
+
+ÀtøtHOèDØëHGHÿÀDŸXÿHGACÿ=þ¹HcÃH\Ä`H
+ÛšIcófD9,sHD$0IHÿD·
+sHD$@FLüIEÄÕÿHD$HH
+Àt)HIÿD·
+sHD$8FLüIEÄÕÿÿÅA;îÛþÿÿAÿÄD;d$ ­þÿÿJLì`H
+ÉtèIÿÅIý|åéÌJLì`H
+ÉtèIÿÅIý|åžþÿÿÿé©JLì`H
+ÉtèIÿÅIý|åžþÿÿÿé|3ÛH
+Ét#HMÿHT$HHHÈLàÿLèëLl$PLãHD$0HMHÿH$`3ÒAžLðèD$Ð
++DÛE
+Àt
+IASAÿÃ¶IÇ0fL`E;Ørâë9\$ ¹D|$$HÏèE
+ÿ
+ÀtøtHOèDØëHGHÿÀDŸXÿHGACÿ=þåþÿÿIcÃ·D`f
+ÉÑþÿÿHD$@·ñDÅDL°üHD$(ÓHÿM
+ätHD$8DÅÓDL°üIÌÿÿÃA;ßlÿÿÿÿÅ;l$ s3ÛéLÿÿÿM
+ätIÕIÌÿIÌÿHD$(IÖHÿ3ÀH$`
++H3ÌèH$À
++HÄp
++A_A^A]A\_^]ÃxäwvJulfeªfÍewAv×fôef,e_zŠtäwv+srvÆfãeùfe>s^ss²rÆfåfýzDwav¹eÖef
++qf-yLiio)
+4XNðà
+Ð
++Àp`P`
++
+pLL$ LD$SUVWATAUAWHì Lá3ÉIÁHòÇD$`H$H$LéLùé$èL$hM
+ÀtIH
+ÀtI	H$H
+Ûtöt
+HCHD$xëIÌèIÌHÐèHD$xH
+ÛtötHCH$ëIÌèIÌHÐèH$H
+Ûtöt	CD$dëIÌèIÌHÐèD$dH
+Ûtº#sÀ$ë
+Ç$LŽ$àH
+Ûtº#sL³ÐLŽ$ëHH$N
+ÁáèHøHD$pH
+ÀuGýéN
+ÁáèLðH
+ÀuxýéäN
+ÁáèLèH
+ÀuxýéÉN
+ÁáèLøH
+Àuxýé®DN
+LFHD$hHD$PL|$HH$èHD$@Ll$8HD$`HD$0HÓIÌLt$(H|$ èø
+Àt
+ÀQH
+Ûtº#
+s
+9«
+:H9¬$ðDD$dNAøvž ëžA¹D;ÀAGÁA¹E;ÁDD$3ÿ|$HD$@L$8T$0HT$xIÌ|$(|$ èHÈH$H
+ÀuxýéHD$pDNDHD$(HFHÑIÌHD$ èl$`ýHŒ$øôFD$HT$x3ÿ|$HÇD$@D$8L$0DGIÌ|$(|$ èHÈH$H
+À
+H$xýH
+Étè¬$èë¬$èHL$pèM
+ötIÎè
+ít!H$DÍMÅIÌHÇD$ ÿ$M
+ítIÍèM
+ÿÆIÏèé¹HFDNDHÑIÌLt$(HD$ èHL$pèIÎèH
+Ût!ºà	rºàsD$hL{0«C8ëIÏèH
+Ût
+º#s$èL«°žëIÍèH$ðH
+Àt
+H$HH$øH
+Àt
+H$HÇLŽ$àHÄ A_A]A\_^][Ã;:²;œ9à;ë?>Rrš,OÒR-OVps}s¯sÀsåRïs÷s%sNs!ä
+
+	ðÐÀp
+`
+P
+0HÄL@HPSVWATAUAVAWHìE3äMñHúLùÇ8ÿÿÿLd$`L€$šL€$ Ld$xMìL€$°Dd$tD @ÿÿÿD PÿÿÿD <ÿÿÿL HÿÿÿL pÿÿÿL xÿÿÿL`M
+ÀtM M
+ÉtM!H$H
+ÛtötHCH$ÐëèIÏHÐèH$ÐH
+ÛtötHCH$àëIÏèIÏHÐèH$àH¬$PH
+Ût
++ötkëIÏèIÏHÐèèH
+Ûtº#s
+ÀD$pëÇD$pH
+Ûtº#sHÐH$èëHH$èHŽ$xH
+öt
+º&sAŒHÏè
+À
+kH$L$LD$hHD$@H$HT$lHD$8H$ÜHÏHD$0H$ØHD$(H$hHD$ è
+À
+E
+ätH$žHÏèD$hAøv'Œ$v
+H$ðè
+À
+ÆD$h$H$ðL$HÏHD$ èø
+À
+sE
+ätH$XH$Àè$ÁáèHøH$ H
+Àu
+xýIíéG$ÁáèHD$xH
+Àu
+xýIíé#$ÁáèLèH
+Àu
+Hl$`xýéÿ$ÁáèH$°H
+Àu
+Hl$`xýéÖD$L$H$HL$PHD$HHD$tHD$@Ll$8H$HD$0HD$xHÓHD$(IÏH|$ èø
+Àt 
+ÀdH
+Ûtº#
+s
+»
+SHŒ$`tvývž ëž¹;èGÁ|$pH$ÐA¹A;éDÅDDÏ3ÉL$HD$@D$hD$8D$lD$0L$(L$ IÏèHèHD$`H
+Àu
+xýé×|$p¬$ýt\M
+ötWD$hH$Ð3ÉL$HÇD$@D$8D$lDADÏD$0L$(L$ IÏèH$šH
+Àu
+Hl$`xýéhHD$xDL$hDD$lH$XHD$XH$šHD$PH$ IÏHD$HHD$`HD$@H$ðHD$8H$HD$0$hD$($D$ èH$ øèHL$xHÇ$ èHÇD$x
+ÿ
+§Œ$hvŒ$v
+H$ðèE
+ätHŒ$XH$ÈHÏèëHŒ$XH
+öt9º&
++s3Œ$t LF(HV0HÏèø
+ÀtHl$`é=3ÀHF0F(H$pD$lD$hHÇAA$hA$A
+H$HAH
+ötJE
+ät$H$žHFH$ÀHFH$ÈHFŒ$t$ØF $ÜF$H
+Ût,ºà	rºàs
+H$°$«HK0C8ë
+H$°èH
+Ûtº#sD$tL«°žëIÍèH$`H
+ÀtHL$`HM
+öt
+H$šI3Àé
+IíëHl$`ë
+Hl$`ëHl$`Œ$hvŒ$v
+H$ðèH$H
+Ét
+$èH$žH
+ÉtèH$ÀH
+ÉtèH$ÈH
+ÉtèH
+ítHÍèH$šH
+ÀtHÈèH$ H
+ÀtHÈèHD$xH
+ÀtHÈèDL$tE
+Ét
+H$àMÅIÏHÇD$ ÿ$èM
+ítIÍèH$°H
+ÀtHÈèÇH¬$PHÄA_A^A]A\_^[ÃŒ;Ç:ï;ú9!;,p>€ü£¢>¡r ¢¥Ïó,O
+Oi&s<sn¢ºsÃs(ASsesws®sÀsõs
++s+¥¥!T*¥
+¥¥¥
+	
+"ðàÐÀp
+`
+0@comp.id	xÿÿ.drectve].debug$Sp.texttË-« .pdata
+j(.xdata§Oí'tolower $LN9.textb<= .text`žO¯K .pdata
+» ëÐV.xdata	§Oíh	{  .text
++*bESetColor
++ .pdata
+
+*uÁÎ
++
+.xdata
+[sOÔ
++£
+.rdata
+µxEÞŽ
+.textÍ
+o²þwÏ .pdata
+ÑÜ.xdatajyíò.pdata
+ìç.xdata5Sls
+1 B Q .text©FG1` .pdata
+¬8Ôºk.xdata17} .textpåð .pdata
+P¬©.xdataÃõ¡-œÒ .text¡}ÐÍß .pdata
+mêñ.xdataõ·zt
+.pdata
+
+³Ã'
+.xdata
+	¬ï B
+.pdata
+
+]-Í]
+.xdataUÉ¥nv.text L'Ö|`²  .pdata!
+,é» Ä!.xdata"$	1 Ý"÷ free 0 D getc P ^p memset .text#êú¯F# .pdata$
+Æß#£$.xdata%TÞVÃ#Ç%.pdata&
+*!)	#ë&.xdata'ýTÃ#
+'0 > R $LN57#.text(+'®d`( .pdata)
+GJ@¹(v).xdata*%£S{(*.pdata+
+3`(Ž+.xdata, A(Ñ,ï   % 4 E O ^ $LN93(mxpmstrcasecmp$pdata$xpmstrcasecmp$unwind$xpmstrcasecmpxpmVisualTypeAllocColor$pdata$AllocColor$unwind$AllocColorXAllocColorXParseColor$pdata$SetColor$unwind$SetColor??_C@_04OHJIHAFH@None?$AA@CreateColors$pdata$1$CreateColors$chain$1$CreateColors$pdata$CreateColors$unwind$CreateColorsXDefaultColormapXDefaultVisualXDefaultScreenFreeColors$pdata$FreeColors$unwind$FreeColorsXFreeColorsCreateXImage$pdata$CreateXImage$unwind$CreateXImageXCreateImageMSWPutImagePixels$pdata$2$MSWPutImagePixels$chain$2$MSWPutImagePixels$pdata$1$MSWPutImagePixels$chain$1$MSWPutImagePixels$pdata$MSWPutImagePixels$unwind$MSWPutImagePixels__imp_SetPixel__imp_SelectObjectParseAndPutPixels$pdata$ParseAndPutPixels$unwind$ParseAndPutPixels__GSHandlerCheck__imp_DeleteDC__imp_CreateCompatibleDCboundCheckingCallocxpmHashSlotxpmNextString__security_cookie__security_check_cookieXpmCreateImageFromXpmImage$pdata$0$XpmCreateImageFromXpmImage$chain$0$XpmCreateImageFromXpmImage$pdata$XpmCreateImageFromXpmImage$unwind$XpmCreateImageFromXpmImageXDestroyImageboundCheckingMallocXDefaultDepthxpmParseDataAndCreate$pdata$0$xpmParseDataAndCreate$chain$0$xpmParseDataAndCreate$pdata$xpmParseDataAndCreate$unwind$xpmParseDataAndCreatexpmFreeColorTablexpmParseExtensionsxpmHashTableFreexpmParseColorsxpmHashTableInitxpmGetCmtxpmParseValuesxpmParseHeaderCrDatFrI.obj/   1345988046              100666  8974      `
++d)Î%:Pû.drectve]|
++.debug$SpÙ@B.text7I P`.pdata
+ÆÒ@0@.xdata$ð	@0@.rdata
+	@0@.text%	*
++ P`.pdata
+>
++J
++@0@.xdatah
++x
++@0@.pdata
+
++¢
++@0@.xdataÀ
++Ð
++@0@.pdata
+î
++ú
++@0@.xdata
+,
+@0@.pdata
+J
+V
+@0@.xdatat
+
+@0@.pdata
+Š
+²
+@0@.xdataÐ
+@0@.text¢ä
+ P`.pdata
+
+
+@0@.xdata°
+À
+@0@.pdata
+Þ
+ê
+@0@.xdata
+
+
+@0@.pdata
+:
+F
+@0@.xdatad
+@0@.textt
+ P`.pdata
+³¿@0@.xdataÝí@0@.pdata
+
+@0@.xdata
+5Q@0@.pdata
+o{@0@.xdata
+@0@.rdata
++¥@@@.rdata
++¯@@@.text^¹ P`.pdata
+£¯@0@.xdata$Íñ@0@.rdataû@0@.rdata
+@@@.text P`.pdata
+ÁÍ@0@.xdataë@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\CrDatFrI.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerH\$ UVWATAUAVAWHì@HH3ÄH$0E3öEùMàHT$ LéE
+ÉÀ$ H|0I$HL$0LÀèHïH=I\$ŸL
+M
+ÉtLHHÍèHcÈHéHÇHÃHîuÒHD$0+èÿÅÍèH
+ÀtxHL$ LÀHT$0)HL$0L+Á¶
++HÿÂALÿÉuñIE$ AÿÆIÄ0IÅH|0E;÷Mÿÿÿ3ÀH$0H3ÌèH$HÄ@A_A^A]A\_^]ÃžýÿÿÿëÎ]g¯7
+)
+4SHðà
+Ð
++Àp`P0
+	%s %sDL$ SUVWAUAVHì(LŽ$ÂLd$hA¯ÁAÿÈDêLát}HŒ$ÿÀL|$ HD$`EøI
+$E
+ít;AñIífffLÆHËH@HÒIÖèHÞHÇHíuÛDL$xHL$`ÆIÄIL$øIïI
+$u¡L|$ ëHŒ$I
+$Ld$hE
+ít3AñIíLÆHËH@HÒIÖèHÞHÇHíuÛÆHÄ(A^A]_^][ÃtäÂ !
+8¬Â&!9
+29¬,!ô9
+292!Ä
+
+88B
+à
+Ð	p`P0H\$Hl$VE3ÒIñIèLÙAÚ
+ÒtlH|$DÊffECI;ISHÉÿ3ÀB\ò®H÷ÑET
++E
+Àt&fffH:HÉÿ3Àò®HÂH÷ÑDÑIèuåIÃIéu«H|$AB
++EHl$ CH\$^Ã¢;;A!
+;;
+M
+;;G!t
+;
+;M
+;;M
+
+T
+4
+`@SUVHì ÂHY3öHIèHE
+ÉÕH|$@Ld$HDd$`Ll$PEéLEH
+HèÿÆA;ôsH}HÉÿ3Àò®HH÷ÑHLHKELEHÃ
+ÀtVLÈfIHff¶HÿÂHÿÁBÿÀuðÿÆA;ôsI8HÉÿ3Àò®H÷ÑH
+HKHÃIÀIéu¶HÅIí
+XÿÿÿLl$PLd$HH|$@HH
+H·fAHÄ ^][ÃJhOúee÷PPV!"PP
+b"÷PP\!Ô
++
++Ä	t"PPb"PPb2`P0XPMENDEXTXPMEXT %sH\$ UVWATAUAVAWHì`HH3ÄH$PHÁHL$H3ÉMðLúHT$@éL$0HM
+ÀAº 
++
+A@(
+ÀyMP0ŸÙDÁLØt$8@EJI:IRHÉÿ3ÀB\
+ò®H÷ÑEDE
+Ét%fffH:HÉÿ3Àò®HÂH÷ÑDÁL+ÎuæIÂL+Þu­CAh
++D$0ëñL$8Eg
+ºAÿÄB
+åËèLèH
+Àu	AEýé!AGEOED$(AG
+HHL$PD$ èHcÈH|
+PM
+öt#Aöt
+EN$EF HHÏèHcÈHù
+ötHž XPMEXTHÇHGùHD$P+øÿÇÏèHÐIEH
+ÀupýécßHL$P\$4¶HÿÂHÿÁBÿÀuðAGEO
+MGIMHT$4D$ èð
+À
+HL$@E?D¯yAG	¯AL$4ÁL$0
+ÈÍèHðH
+ÀupýéæL\$@l$0MÍACL+ÎLÆAÄÅH
+ÆHES
+AÿÂfDK
+If¶HÿÂHÿÁBÿÀuðK<HÉÿ3Àò®IÀH÷ÑIHøIêIuÀAKD$4J<æHÍAÜHÊHÏHICEKECAHD$(ICHD$ è|$8t%HL$@EN(MF0AAWl$ HÃHLÆøèHD$HH03öE
+ät
+IýAÜHH
+ÉtèHÇHëuéIÍèÆH$PH3ÌèH$žHÄ`A_A^A]A\_^]Ãýy(x6Xu`Ú
+ÍùPr-r?^zzq)
+4WLðà
+Ð
++Àp`PP
+ %d %d%d %d %d %dH\$WHìIÁMÐHÚH
+ÒtHÇHŒ$ÀLL$0LÀIÒH|$ è
+Àu7H
+ÿtHL$PH×èLD$PëE3ÀHT$0HËèHL$0ØèÃH$ HÄ_Ã;Q
+hkt
+
+4
+p@comp.id	xÿÿ.drectve].debug$Sp.text7Y7Q< .pdata
+ÐQ).xdata$øªÇ%: K sprintf .rdataIJ-æ_strncpy £ .textÖ_k» .pdata
+_CRÈ.xdata	ÇÞ	.pdata
++
+Ó¹Eô
++.xdata
+Hë_^
++
+.pdata
+
+Vþbt 
+.xdata
+©6
+.pdata
+€çL.xdataáã·Šb.pdata
+}-Ñ!x.xdataDÖ}.text¢w,ñ@¡ .pdata
+pgb±.xdataõÉfÐÊ.pdata
+ð§Ò'ã.xdataã:ü.pdata
+#1i.xdataHP%\,.textŽšD .pdata
+
+4
+àU.xdataÇo.pdata
+
+4X€
+.xdata
+
+üÙûV£
+.pdata
+
++eS»œ
+.xdata
+µDÑ¬Õ.rdata 
++êÐ©ôî .rdata!
++¹èÒË!.text"^Æ7[2" .pdata#
+iûDq"L#.xdata$$b'"m$free .rdata%ùKk%.rdata&
+-ÚNØ³&å $LN42".text'¹Påù' .pdata(
+Q'(.xdata)kjü'.)M ] h $LN8'CreateColors$pdata$CreateColors$unwind$CreateColors__GSHandlerCheckboundCheckingMalloc??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@xpmColorKeys__security_cookie__security_check_cookieCreatePixels$pdata$3$CreatePixels$chain$3$CreatePixels$pdata$2$CreatePixels$chain$2$CreatePixels$pdata$1$CreatePixels$chain$1$CreatePixels$pdata$0$CreatePixels$chain$0$CreatePixels$pdata$CreatePixels$unwind$CreatePixelsCountExtensions$pdata$1$CountExtensions$chain$1$CountExtensions$pdata$0$CountExtensions$chain$0$CountExtensions$pdata$CountExtensions$unwind$CountExtensionsCreateExtensions$pdata$3$CreateExtensions$chain$3$CreateExtensions$pdata$2$CreateExtensions$chain$2$CreateExtensions$pdata$CreateExtensions$unwind$CreateExtensions??_C@_09OINMEHGD@XPMENDEXT?$AA@??_C@_09NHKHHPDA@XPMEXT?5?$CFs?$AA@XpmCreateDataFromXpmImage$pdata$XpmCreateDataFromXpmImage$unwind$XpmCreateDataFromXpmImage??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_0M@FMGEODLN@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@boundCheckingCallocXpmCreateDataFromImage$pdata$XpmCreateDataFromImage$unwind$XpmCreateDataFromImageXpmFreeXpmImagexpmSetInfoXpmCreateXpmImageFromImageCrBufFrI.obj/   1345988046              100666  9018      `
++d)Î%:PŽ.drectve]|
++.debug$SpÙ@B.textUI P`.pdata
+äð@0@.xdata 	.	@0@.rdata8	@0@.text÷?	6
++ P`.pdata
+J
++V
++@0@.xdatat
++@0@.text
++ P`.pdata
+
+
+
+@0@.xdata:
+J
+@0@.pdata
+h
+t
+@0@.xdata
+Š
+@0@.pdata
+Ä
+Ð
+@0@.xdataî
+@0@.textÒö
+È
+ P`.pdata
+
+
+@0@.xdata8
+H
+@0@.pdata
+f
+r
+@0@.xdata
+
+¬
+@0@.pdata
+Ê
+Ö
+@0@.xdataô
+@0@.rdata@@@.rdata@0@.rdata@@@.text`' P`.pdata
+@0@.xdata±@0@.text`¹ P`.pdata
+
+)@0@.xdata$Gk@0@.rdatau@0@.rdatay@@@.rdata@0@.rdata
+@@@.rdata@@@.rdata*@@@.textÇR P`.pdata
+z@0@.xdata€@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñd&d:\Develop\xpm\lib\CrBufFrI.obj:<bÐ	x	xMicrosoft (R) Optimizing Compiler@SUVWATAUAVAWHìHHH3ÄH$0E3íMáMðLúHL$ ÆD$0"D9¬$°Þ$žH|1ffI$HL$1LÀèHïH=I\$ŸL
+M
+ÉtLHHÍèHcÈHéHÇHÃHîuÒH\$ ÇE",
++HD$0H
++èAÅTèH
+ÀtqA/ALD$0HÐDA¶HÿÂIÿÀJÿÉuïA.H$žAÿÅIÄ0H|1D;¬$°8ÿÿÿ3ÀH$0H3ÌèHÄHA_A^A]A\_^][ÃžýÿÿÿëÕmwÔ6U
+&
++I
+ð
+à	ÐÀp`P00	%s %sH\$HT$HL$UVWATAUAVAWHì AÿÉLŽ$DŒ$HŒ$EàLêHÙtVEéfÆ"HÿÃE
+ät*IìfMÇHËH@HÒIÖèIßHÇHíuÛÇ",
++HÃIíu»Ll$hÆ"HÿÃE
+ät0IìMÇHËH@HÒIÖèIßHÇHíuÛÆ"+\$`ÿÃA]H\$pHÄ A_A^A]A\_^]ÃtÄ÷ 
+
++
+4
+2ðàÐÀp`PHìE3ÀLÑ
+ÒtmH<$DÚfffI:IR3ÀHÉÿò®ABH÷ÑED
++
+Àt.LÈffffffH:HÉÿ3Àò®HÂIéH÷ÑEDuãIÂIëu©H<$A@
+HÄÃ{##)!##
+5{##/!t#
+#5##5H\$ VAUAVHì IðLòLéHÙE
+Ét}Hl$@H|$HLd$PEáLHHËèHnHcÈFHÙ
+Àt/HøfLEHHËèHÅHcÈHÙHïuÝHÆIìu€Ld$PH|$HHl$@HHC·
+fC
+A+ÝÃ
+A
+H\$XHÄ A^A]^Ã7S?gPoMšM²MÒ88>!88
+J88D!Ä
++
++t	T88J88J4
+2
++àÐ`,
++"XPMENDEXT",
++"%s",
++"XPMEXT %s"H|$Hy3ÒLÁH
+ÿtHÉÿ3Àò®H÷ÑHQIxH
+ÿtHÉÿ3Àò®H÷ÑT
++IxH
+ÿt3ÀHÉÿò®H÷ÑD
++H|$ÃH|$ÂÃ`VV\tH\$ UVWATAUAVAWHìpHH3ÄH$`3öIØLêHL$PD~îH1M
+Àt
++Aº EçrDæH
+Ût
+Aº 
++sAP(
+Òt
+IH0èèëDþE
+ätGH{H
+ÿtHÉÿ3Àò®H÷ÑqH{H
+ÿtHÉÿ3Àò®H÷ÑtH{H
+ÿtHÉÿ3Àò®H÷ÑtHHL$`èø
+7Dt)AÎèHðH
+ÀuFýéAHD$`HÖHL$`H+Ðffff¶HÿÁD
++ÿÀuòE
+ätLCM
+ÀtH
+>HèøAEEMEED$(AE
+HHL$`D$ èèH
+Ût ötDK$DC HL,`HèèE
+ÿtHL,`HèèHL,`HèHÎèDõAÖDt$DèLØH
+ÀIHT$`HD$HÇH+ÂHL$`J¶HÿÁD
++ÿÀuòý|$@E
+ät LCM
+ÀtÏHIËèø|$@AEMMLD$@D$(AE
+HT$DHL$HD$ èHt$Hø
+À
+ÆAMD$DA¯MÁA¯MTHÎèHøH
+ÀE
+ät%LCM
+Àt
+t$@HH
+0èðt$@ët$@IEEMEEHD$0IEÎHD$(AEHT$@HÏD$ èE
+ÿtL$@DK(LC0HT$@HÏèD$@Ç8};
++HD$PH83Àë¿ýÿÿÿH
+ötHÎèÇH$`H3ÌèH$ÈHÄpA_A^A]A\_^]Ãj#ÄyÎàv3u8Urcol ®i³ÈuM}¢u«è8/fA`zze)
+4YNðà
+Ð
++Àp`P`
+",
++ XPMEXT %d %d"%d %d %d %d/*%s*/
++/* XPM */
++static char * image_name[] = {
++H\$WHìIÁMÐHÚH
+ÒtHÇHŒ$ÀLL$0LÀIÒH|$ è
+Àu7H
+ÿtHL$PH×èLD$PëE3ÀHT$0HËèHL$0ØèÃH$ HÄ_Ã;Q
+h_t
+
+4
+p@comp.id	xÿÿ.drectve].debug$Sp.textUŒ .pdata
+ö±».xdata B
++#7 H sprintf .rdataIJ-æ]strncpy ¡ .text÷C<}»¹ .pdata
+S
+®õÅ.xdata	Ø;xÛØ	.text
++Ë
+¥ì
++ .pdata
+
+Ú®©
++û
+.xdata
+ÞøÝ¬
++
+.pdata
+
+Ø^
+
+++
+.xdataVìŒÞ
++C.pdata
+2
++[.xdataŽ_
++q.textÒ~² .pdata
+üŸí-.xdatakÉÌ
+±.pdata
+3Ó£Ê.xdata
+{IŽã.pdata
+#¥ü.xdataÔKWÂ.rdata".]Î+.rdataÏÃntX.rdataTU<.text`rÔ
+± .pdata
+
+» ëÐŸ
+.xdata
+Íg®Ò
+.text
+`glöç
+ .pdata
+&ºá
+.xdata $òÎs
+& free .rdata!»0ÁJ!.rdata"Þ
+Ui".rdata#ùKk#.rdata$
+$l
+¬$.rdata%¿Ÿù€â%
+ .rdata&*É#·â &$LN33
+.text'¹Påf' .pdata(
+Q'(.xdata)kjü')À Ð Û $LN8'öWriteColors$pdata$WriteColors$unwind$WriteColors__GSHandlerCheckboundCheckingRealloc??_C@_06IELOGKMI@?7?$CFs?5?$CFs?$AA@xpmColorKeys__security_cookie__security_check_cookieWritePixels$pdata$WritePixels$unwind$WritePixelsExtensionsSize$pdata$1$ExtensionsSize$chain$1$ExtensionsSize$pdata$0$ExtensionsSize$chain$0$ExtensionsSize$pdata$ExtensionsSize$unwind$ExtensionsSizeWriteExtensions$pdata$3$WriteExtensions$chain$3$WriteExtensions$pdata$2$WriteExtensions$chain$2$WriteExtensions$pdata$WriteExtensions$unwind$WriteExtensions??_C@_0O@OABJKIBK@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06BGPNODEO@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@BCEENDGM@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@CommentsSize$pdata$CommentsSize$unwind$CommentsSizeXpmCreateBufferFromXpmImage$pdata$XpmCreateBufferFromXpmImage$unwind$XpmCreateBufferFromXpmImage??_C@_03BPDIBAFI@?$CC?0?6?$AA@??_C@_07MPMODOEI@?5XPMEXT?$AA@??_C@_06JNINJID@?5?$CFd?5?$CFd?$AA@??_C@_0N@PLOHJNOO@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07DOCEJOCJ@?1?$CK?$CFs?$CK?1?6?$AA@boundCheckingMalloc??_C@_0CK@PJCHPEMN@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@XpmCreateBufferFromImage$pdata$XpmCreateBufferFromImage$unwind$XpmCreateBufferFromImageXpmFreeXpmImagexpmSetInfoXpmCreateXpmImageFromImageAttrib.obj/     1345988045              100666  9282      `
++d2Í%:P.drectve]ä
++.debug$SpA@B.textv±'	 P`.pdata
+1	=	@0@.xdata[	@0@.textk	ñ	 P`.pdata
+
++
++@0@.xdata9
++I
++@0@.pdata
+g
++s
++@0@.xdata
++¡
++@0@.pdata
+¿
++Ë
++@0@.xdata
+é
++
+@0@.pdata
+#
+/
+@0@.xdataM
+a
+@0@.pdata
+
+
+@0@.xdata©
+@0@.text}±
+.
+ P`.pdata
+B
+N
+@0@.xdatal
+|
+@0@.pdata
+
+Š
+@0@.xdataÄ
+Ô
+@0@.pdata
+ò
+þ
+@0@.xdata
+
+
+8
+@0@.pdata
+V
+b
+@0@.xdata
+
+@0@.pdata
+²
+Ÿ
+@0@.xdataÜ
+@0@.text¢ä
+ P`.pdata
+®º@0@.xdataØè@0@.pdata
+@0@.xdata 0P@0@.pdata
+nz@0@.xdata@0@.text  P`.textKŠ P`.textOñ@ P`.pdata
+T`@0@.xdata~@0@.pdata
+¬ž@0@.xdataÖæ@0@.pdata
+@0@.xdata.F@0@.pdata
+dp@0@.xdata¢@0@.pdata
+ÀÌ@0@.xdata
+ê@0@.text
+ö	 P`.pdata
+]i@0@.xdata
+@0@   /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ñb$d:\Develop\xpm\lib\Attrib.obj:<bÐ	x	xMicrosoft (R) Optimizing CompilerH\$Ht$WHì òHÙIø
+õèLØH
+ÀuHACýH\$0Ht$8HÄ _Ã
+ö~HÎHHÀHÃ0HéuïH\$0Ht$8L3ÀHÄ _Ãv
+d42
+pH
+ÉtATHì Ht$@LáHñ
+Ò~NH\$0Hl$8H|$HêDH
+¿H
+H
+ÉtèHÃHïuéHÆHíu×H|$HHl$8H\$0I
+$èIÌèHt$@HÄ A\óÃA0m0u0!
+
+/h
+!
+
+)h#!t	
++T4
+)
+)!d
+
+/
+/
+
+2ÀH
+ÉtvATHì Ht$@LáHñ
+Ò~NH\$0Hl$8H|$HêDHÞ¿H
+H
+ÉtèHÃHïuéHÆ0Híu×H|$HHl$8H\$0IÌèHt$@HÄ A\óÃA0l0{}RR9!
+RR
+Qh{RR?!
+RR
+KhRRE!t	
++T4
+RRK
+RRK!d
+R
+RQ
+RRQ
+
+2ÀH
+ÉATHì Lá
+ÒxH\$0Hl$8Ht$@H|$HHqêHNðH
+ÉtèFøH
+
+ÀtHøH
+H
+ÉtèHÃHïuéHH
+ÉtèHÆHíu¶H|$HHt$@Hl$8H\$0IÌèHÄ A\óÃ>0Y0p00¢hh[!hh
+ghha!t	d
++T4hh
+ghhg2
+ÀžàÃH
+ÉtD3Òºà
++HQ0Q8HQpQhHQxHHsHQ`QXºàs
+H°žóÃ@SVWHì Ll$PE3íºàIøHòHÙsHBHApB
+AhDj
+Ljé»ºà±Hl$@HjLd$HDb
+B
+åèLØH
+Àu'Lkp#ÿþÿÿº#	rHK0èLk0Dk8DkhëYE
+ä~IÌ@H(HÀHÅ0HéuïL[pF
+ChHGHCxHGHHGHDn
+LnLoLoLoHl$@Ld$Hº#
++sHG0HC`G(CXLo0Do(öLl$Pt
+G C$G$C(
+ F
+C,É
+C
+FC HÄ _^[Ãa0
+Ow!
++
+÷
+}!
++F
+F÷!Ä	T
++F
+
++F!Ô
++
++
+
++2p`0H\$WHì 3ÿº!	HÙs9y8tHI0èH{0{8ºàsShHKpèH{p{hëuºàsoHKpH
+ÉtShèH{p{hHKxH
+Ét	èH{xHH
+Ét
+èH»HH
+Ét
+èH»HK0H
+Ét
+èH{0{8º#
++sSX
+ÒtHK`èH{`{Xº#s!9»žtH°èH»°»ž;H\$0HÄ _Ã0:3Zo000±0ÎUï0
+
++
++4
++2p@comp.id	xÿÿ.drectve].debug$Sp.textv×o| .pdata
+?j.xdata§Oí3O .textáPÃ1c .pdata
+ÂØöu.xdataºö=ä.pdata	
+Ö/ù«	.xdata
++cŸ%Æ
++.pdata
+
+Ÿ!åá
+.xdata
+
+ÃL
++ü
+.pdata
+
+íé
+.xdatarí2.pdata
+V
+j]M.xdataç®§ffree .text}4àÏ .pdata
+»¡b.xdataºö=ä­.pdata
+0dßÈ.xdatacŸ%ã.pdata
+Ÿ!åþ.xdata
+ÃL
++.pdata
+íé4.xdataríO.pdata
+V
+j]j.xdataç®§$LN16.text
+¢é#Í
+ .pdata
+
+rüh
+¯
+.xdata
+Ç,T
+Ê
+.pdata
+¶
+å.xdata  í;Ý
+ .pdata!
+ã-{í
+!.xdata"¯ë6p
+4"$LN18
+.text#ÍÅ ÜN# .text$KÏ§$E`$ .text%OÞ·
+or% .pdata&
+'èó%&.xdata'$ö(%'.pdata(
+Õ(Üq%·(.xdata)çÉŒ%Ñ).pdata*
+Cð*%ë*.xdata+k2Y%+.pdata,
+
+#Å%,.xdata-Ûç	7%9-.pdata.
+È
+À%S..xdata/
+§6Zè%k/$LN22%.text0
+	ÐUu 0 .pdata1
+e
+r=01.xdata2
+%ÍY%0¯2$LN160ÉCreateOldColorTable$pdata$CreateOldColorTable$unwind$CreateOldColorTableboundCheckingMallocFreeOldColorTable$pdata$5$FreeOldColorTable$chain$5$FreeOldColorTable$pdata$4$FreeOldColorTable$chain$4$FreeOldColorTable$pdata$3$FreeOldColorTable$chain$3$FreeOldColorTable$pdata$0$FreeOldColorTable$chain$0$FreeOldColorTable$pdata$FreeOldColorTable$unwind$FreeOldColorTablexpmFreeColorTable$pdata$5$xpmFreeColorTable$chain$5$xpmFreeColorTable$pdata$4$xpmFreeColorTable$chain$4$xpmFreeColorTable$pdata$3$xpmFreeColorTable$chain$3$xpmFreeColorTable$pdata$0$xpmFreeColorTable$chain$0$xpmFreeColorTable$pdata$xpmFreeColorTable$unwind$xpmFreeColorTableXpmFreeExtensions$pdata$4$XpmFreeExtensions$chain$4$XpmFreeExtensions$pdata$3$XpmFreeExtensions$chain$3$XpmFreeExtensions$pdata$XpmFreeExtensions$unwind$XpmFreeExtensionsXpmAttributesSizexpmInitAttributesxpmSetAttributes$pdata$4$xpmSetAttributes$chain$4$xpmSetAttributes$pdata$3$xpmSetAttributes$chain$3$xpmSetAttributes$pdata$2$xpmSetAttributes$chain$2$xpmSetAttributes$pdata$0$xpmSetAttributes$chain$0$xpmSetAttributes$pdata$xpmSetAttributes$unwind$xpmSetAttributesXpmFreeAttributes$pdata$XpmFreeAttributes$unwind$XpmFreeAttributes
+\ No newline at end of file
+diff -Naur vim73.orig/src/xpm/x86/lib/libXpm.a vim73/src/xpm/x86/lib/libXpm.a
+--- vim73.orig/src/xpm/x86/lib/libXpm.a	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/x86/lib/libXpm.a	2013-06-07 17:07:39.158896851 +0000
+@@ -0,0 +1,125 @@
++!<arch>
++/               1345987854  0     0     0       1562      `
++F^^^^^^
+
+
+º
+º)R)R)RS<S<XtXt]Ö]Ö]Ö]Ö]Ö]Ö]ÖsÊsÊsÊsÊxÂxÂ{B{B{B{B*øÞÞ°ªÁÁÁÁÁÁÁÁÁÁÁÁÁÁÉ8Ì
++Ì
++Ì
++Ì
++Ì
++ñTô0ô0_xpmFreeColorTable_XpmFreeExtensions_XpmAttributesSize_xpmInitAttributes_xpmSetAttributes_XpmFreeAttributes_XpmCreateBufferFromXpmImage_XpmCreateBufferFromImage_XpmCreateDataFromXpmImage_XpmCreateDataFromImage_xpmstrcasecmp_XpmCreateImageFromXpmImage_xpmParseDataAndCreate_XpmCreateImageFromBuffer_XpmCreateXpmImageFromBuffer_XpmCreateImageFromData_XpmCreateXpmImageFromData_xpmNextString_xpmNextWord_xpmNextUI_xpmGetString_xpmGetCmt_xpmParseHeader_xpmDataTypes_xpmHashSlot_xpmHashIntern_xpmHashTableInit_xpmHashTableFree_xpmInitXpmImage_XpmFreeXpmImage_xpmInitXpmInfo_XpmFreeXpmInfo_xpmSetInfoMask_xpmSetInfo_xpmatoui_XpmGetErrorString_XpmLibraryVersion_XpmFree_XpmReadFileToBuffer_XpmReadFileToData_XpmReadFileToXpmImage_XpmReadFileToImage_xpmReadRgbNames_xpmGetRgbName_xpmGetRGBfromName_xpmFreeRgbNames_XpmCreateXpmImageFromImage_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc_XDefaultVisual_XDefaultScreen_XDefaultDepth_XDefaultColormap_XParseColor_XAllocColor_XQueryColors_XFreeColors_XCreateImage_XImageFree_XDestroyImage_XpmWriteFileFromBuffer_xpmParseValues_xpmParseColors_xpmParseExtensions_xpmParseData_xpmColorKeys_XpmWriteFileFromData_XpmWriteFileFromXpmImage_XpmWriteFileFromImageAttrib.o/       1345987849  0     0     100666  2178      `
++LÆ.text
+ P`.data@0À.bss0ÀUåWVSì
+EEðUðE
+
+ÒEìtdÇEè}ð9Eè}Ct&ûŸë
+Ž&ÃNx
+Àtô$ÃèNyì¶ÿEèÇEì9Eè|ÂEðEÄ
+[^_]éÄ
+[^_]ÃŽ&UåWVSì
+EU
+
+ÀEðUìÇEèúEäv]t&Uä
+ÀubEä1öx@9þÃrë*t&FÃ9þs
+Àtò$FèÃ9þrêfUäB
+Àu+ÿEèEä
+Eè9Eìw§UðUÄ
+[^_]é$èë$èëËÄ
+[^_]ÃöŒ'Užå]Ã¶UåE
+ÀtNÇ@$Ç@(Ç@DöÆÇ@@Ç@HÇ@LÇ@Pu
+âtÇ@pÇ@t]Ã¶Ç@<Ç@8ëÒUåì]ô]uø}üöCt~M
+ACDA
+ÇAC@ÇA
+öÆt
+MA
+C<AÇA
+C8ÇAEötÁ@ÊCAC
+M
+Ê(AC CAC]ôuø}üì]ÃöÆtE
+SDUðx
+pœ$è
+Àt`1ÉÂë	2AÂÆ9ù|óU
+MðÇBMB
+C@AÇB
+CHACLA
+CPÇAÇAÇA
+éÿÿÿÇCDÂâÿþÿÿöÄt
+ÇC@éôþÿÿC$$èÇC$ÇC(ë×UåWVSì
+EöÆt
+X(
+Û
+XÐ%f
+À
+öÆu:öÆtMA8
+À
+âtUJt
+É
+=EÇÄ
+[^_]ÃE@D
+ÀEðÇEèUÇR@9UèUì}It&Œ'Ÿë
+Ž&ÃNx
+Àtô$ÃèNyì¶ÿEèÇMì9Mè|ÂUð$èMð
+$èEÇ@DÇ@@UBH
+À
+&UBL
+À
+UBP
+À
+ÜUB$
+À
+®EéêþÿÿUB@D$BD$èrûÿÿMÇADÇA@éœþÿÿ@$$èMÇA$ÇA(é
+þÿÿBp$èMEÇApÇAtÇÄ
+[^_]ÃD$A<$èûÿÿEÇ@<Ç@8éYþÿÿ$èMÇA$ÇA(é&þÿÿ$èMÇAPé
+ÿÿÿ$èMÇALéèþÿÿ$èMÇAHéÃþÿÿSó/9ó"­Ð!AXo|'.fileþÿgAttrib.c  *P =` PÐ b0 .text.data.bss_free u _xpmFreeColorTable_XpmFreeExtensions_XpmAttributesSize_xpmInitAttributes_xpmSetAttributes_XpmFreeAttributes_boundCheckingMallocCrBufFrI.o/     1345987849  0     0     100666  3425      `
++L
+.textpŽ	& P`.data@0À.bss0À.rdatad$	@0@U1ÀåWVSì
+Ðûÿÿ1À
+Ìûÿÿ1À
+äûÿÿEÇ1À
+ØûÿÿE
+Àt
+UöB
+u1ÿœÔûÿÿ
+öÆMöA¹A
+À®
+ÄûÿÿQ
+1ÉŒûÿÿ»ÔûÿÿÈûÿÿ1Ò9
+ŒûÿÿÀûÿÿsmÈûÿÿ1Û$èÈûÿÿŒûÿÿyqT
+Œûÿÿë
+CÆ$èŒûÿÿTŒûÿÿ9ûrÞÿ
+ÀûÿÿÄûÿÿ
+Èûÿÿ
+9Àûÿÿr
+ŒûÿÿÀ
+
+ÐûÿÿœØûÿÿ
+ÿtIU1ÛB
+Àt
+$èXMA
+Àt
+$è\UB
+
+Àt
+$è\ÌûÿÿüŸ¹
++·(œèýÿÿó¥Ÿ)fÐûÿÿµÜûÿÿÌûÿÿD*
+àûÿÿ$è
+äûÿÿ
+Àºýÿÿÿõ$èýÿÿL$èØûÿÿ
+ÛtUB
+À
+{M
+AD$A
+D$AD$
+D$ž*D$
+èýÿÿ$èÃE
+Àt
+Uö
+
+Ôûÿÿ
+Àtž XPM+èýÿÿžEXT+ìýÿÿÃ¿",
++ŸýÿÿÿŒ+èýÿÿ
+àûÿÿÃØ
+àûÿÿD$
+äûÿÿ$è
+À¡
+äûÿÿèýÿÿL$µÜûÿÿð$è
+ÜûÿÿØØûÿÿ
+Üûÿÿ
+ÛtMQ
+Ò
+žE
+U
+M
+@R
+I
+žûÿÿ1À
+¬ûÿÿ9¬ûÿÿŽûÿÿ°ûÿÿÆ
+èûÿÿ"ùŽ&
+°ûÿÿéûÿÿ¿D$žûÿÿ
+$ÖÆD$è
+°ûÿÿÃvŒ'
+Àt"D$
+œüÿÿÿ
+$D$ž7D$èÃGÆÿvÏÇ",
++èûÿÿ
+àûÿÿ)ËsðD$
+äûÿÿ$è
+ÀÃµàûÿÿ
+èûÿÿD$
+ÜûÿÿØ$èÿ
+¬ûÿÿŽûÿÿµÜûÿÿäûÿÿ
+žûÿÿ9¬ûÿÿÿÿÿ1À
+ÀÆ
+M
+ŸýÿÿÿœàûÿÿAQ¯ÃÀ¯Âø@
+àûÿÿD$
+äûÿÿ$è
+ÀÕ
+äûÿÿµØûÿÿ
+ö
+äûÿÿ
+ÜûÿÿM
+ÐU
+
+šûÿÿE
+	z@µšûÿÿ€ûÿÿJ
+ ûÿÿB1ÒûÿÿH9
+ûÿÿûÿÿ
+ûÿÿshvÆ"1ÛF;€ûÿÿs:f ûÿÿCT$Çûÿÿ@Á4$D$è
+ ûÿÿÆ;€ûÿÿrÈÇ",
++
+ûÿÿÆÿ
+ûÿÿ9
+ûÿÿrÆ"1ÛF;€ûÿÿs8 ûÿÿCT$Çûÿÿ@Á4$D$è
+ ûÿÿÆ;€ûÿÿrÈÆ"
+šûÿÿF)Æ
+ÔûÿÿµÜûÿÿ
+Àø
+Üûÿÿ1ÿäûÿÿœûÿÿMÐ
+ûÿÿEI
+µûÿÿ@9
+ûÿÿûÿÿ
+ûÿÿûÿÿ»>1ÿ\$4$D$èûÿÿÆ
+ûÿÿIX9Ïûÿÿs'f¹L4$GL$ÃD$èÆ;œûÿÿrÛÿ
+ûÿÿûÿÿ
+ûÿÿ
+9ûÿÿrÇ,
++"XÇFPMENÇFDEXTfÇF
+"ûÿÿ
+Üûÿÿ)ÖÆF
+
+Üûÿÿäûÿÿ
+ÜûÿÿÇ};
++
+äûÿÿ1ÒMÄÐ[^_]Ãž
+ØûÿÿéiùÿÿBD$
+BD$žSD$
+èýÿÿØ$èÃé4ûÿÿMQ
+
+ÒgýÿÿT$»Z\$ÜûÿÿÈ$è
+Üûÿÿé?ýÿÿ
+äûÿÿ
+ÀuòÄÐ[^_]Ã$èòëçžýÿÿÿé°üÿÿD$¹ZL$
+ÜûÿÿäûÿÿÐ$è
+ÜûÿÿéWúÿÿT$¹ZL$äûÿÿÐ$è
+Üûÿÿé ûÿÿŽ&Uåìx}ü}
+uøu
+ÿ]ôtÇt$EÈD$
+ED$ED$E$è
+ÀÃu3
+öt>t$]š
+$è\$<$EÈD$èÁ÷ÿÿÃEÈ$èØuø]ô}üì]Ã1ÒT$ëÍ/* XPM */
++static char * image_name[] = {
++"%d %d %d %d	%s %s,
++"XPMEXT %s",
++"%s" %d %d/*%s*/
++Žà<Qgw
+
+·Ü
+)¿Z}
+
+Èòcwø
+
+3
+Gï
+!
+5ax
+Š
+º(H.fileþÿgCrBufFrI.c !Ð .textc&.data.bss.rdatab;_strlen _strncpy _free I _strcpy _ _sprintf t 
+  ­_XpmCreateBufferFromXpmImage_XpmCreateBufferFromImage_xpmColorKeys_boundCheckingRealloc_boundCheckingMalloc_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage
++CrDatFrI.o/     1345987850  0     0     100666  3164      `
++L
++.textŽØ
+ P`.data@0À.bss0À.rdata$Ž@0@U1ÀåW1Ò1ÿV1öSì¬]
+ØûÿÿE
+ÛœäûÿÿµàûÿÿÇÌûÿÿt
+]öC
+ìE
+»P
+\$BÐÐûÿÿÁà
+Üûÿÿ$è
+ØûÿÿØûÿÿžýÿÿÿ
+É]
+œèýÿÿºCD$C
+D$CD$
+T$<$D$è
+E
+Àt
+Eö
+X
+Ìûÿÿ
+ÀtÇ XPMÇCEXTÃ)ûŸýÿÿÿC
+$èØûÿÿ
+ÀæÜûÿÿØûÿÿ|$Ã$è¬ûÿÿE
+U
+]
+@R
+[
+šûÿÿ1À
+ûÿÿ9ûÿÿ€ûÿÿ ûÿÿÙt&
+ ûÿÿèûÿÿ¿šûÿÿD$Ö
+$ÆD$è
+ ûÿÿÃvŒ'
+Àt"D$
+œüÿÿÿ
+$D$ž
+D$èÃGÆÿvÏ
+èûÿÿ)Ãs4$è
+ÀZµÜûÿÿèûÿÿT$$èÿ
+ûÿÿ¬ûÿÿ
+šûÿÿÃ
+€ûÿÿ¬ûÿÿ9
+ûÿÿ,ÿÿÿ1À
+ÀÆ
+ŠU
+µàûÿÿ:BÓR¯Çœäûÿÿ@
+ÈûÿÿÈûÿÿÐðŸýÿÿÿ¯ÑÜûÿÿÐø$è
+Ôûÿÿ
+ÀNs
+ÐûÿÿàûÿÿÔûÿÿð[
+ÈœØûÿÿÄûÿÿÖ1ÛŽ&CD$$èÇ$èÐ@FÆ;ÄûÿÿvÏE
+œÜûÿÿÔûÿÿHµàûÿÿúÈÔûÿÿðÐûÿÿIûÿÿU
+
+ûÿÿ]
+E
+[xûÿÿP
+ûÿÿûÿÿûÿÿ¯Ã1Ûûÿÿ@9ûÿÿ
+ûÿÿt&1ö
+ûÿÿ;µûÿÿsFŽ&Œ'ûÿÿFT$Çûÿÿ@Â
+$D$èûÿÿË;µûÿÿrÈÆûÿÿ
+ûÿÿÿ
+ûÿÿÐCÃ
+ûÿÿûÿÿ9
+ûÿÿqÿÿÿ1öûÿÿ;µûÿÿs8
+ûÿÿFûÿÿD$Ç@Â
+$D$è
+ûÿÿÃ;µûÿÿrÈÆÌûÿÿ
+É_]
+1ÿ
+ÐûÿÿœpûÿÿS]ÐÔûÿÿ[
+U|ûÿÿàûÿÿÆRtûÿÿxûÿÿPüÈûÿÿÈûÿÿ1À
+lûÿÿ
+xûÿÿ9
+pûÿÿÚ|ûÿÿ»\$D$$èÿ
+lûÿÿtûÿÿ9lûÿÿs|ûÿÿ$èÈÀF|ûÿÿ1ÿÆ
+|ûÿÿ[hûÿÿX;œhûÿÿsIt&D$$èÿ
+lûÿÿtûÿÿ9lûÿÿs$èÐ@FÆGÃ;œhûÿÿr»ÿ
+pûÿÿxûÿÿ
+|ûÿÿ
+9pûÿÿ&ÿÿÿÇXPMEÇ@NDEXfÇ@TÔûÿÿ1öE1Û;ÐûÿÿsØûÿÿ
+À
+C;ÐûÿÿræØûÿÿ
+$èðÄ¬[^_]ÃC
+À	úÿÿ
+ŒûÿÿS
+1ÿœ°ûÿÿ1ö¹ÌûÿÿÀûÿÿ1Ò9
+ØûÿÿŽûÿÿµžûÿÿfÀûÿÿ1ö
+°ûÿÿ{D
+°ûÿÿ$èŽûÿÿ[TŽûÿÿë$¶FÃ$èŽûÿÿTŽûÿÿ9þrÞÿ
+žûÿÿŒûÿÿ
+Àûÿÿ
+9žûÿÿr
+ŽûÿÿÀ
++
+äûÿÿ
+°ûÿÿ@
+àûÿÿé+ùÿÿf$CèéäþÿÿÂ@D$
+B
+$D$ž
+D$èÃéùÿÿžýÿÿÿéæúÿÿUåìx}ü}
+uøu
+ÿ]ôtÇt$EÈD$
+ED$ED$E$è
+ÀÃu3
+öt>t$]š
+$è\$<$EÈD$è1øÿÿÃEÈ$èØuø]ô}üì]Ã1ÀD$ëÍ%d %d %d %d	%s %sXPMEXT %s %d %dn
+Œü)œ
+É
+Òðíúäe
+9|$¡Ê%B
+KžØ.fileþÿgCrDatFrI.c ` .textó
+.data.bss.rdata$7_strncpy _free _strlen E _strcpy _sprintf Z o   š_XpmCreateDataFromXpmImage_XpmCreateDataFromImage_xpmColorKeys_boundCheckingMalloc_boundCheckingCalloc_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImagecreate.o/       1345987850  0     0     100666  10669     `
++L$2.textð
+Ž¬o P`.data@0À.bss0À.rdata€@0@UåWVSì
+u]
+¶Òt,¶Àt(ŸÂ$èÇŸ$è9Çu
+FC¶ÒuÔ¶ŸÒŸÀÄ
+)ÂÐ[^_]Ãúëðt&Uåì(]ôE]uø
+À}üu
+}t
+\$
+D$t$<$è
+Àºÿÿÿÿt\$t$<$è1Ò
+ÀÂ]ôÐuø}üì]ÃŽ&Œ'Uåì8uøu
+}üÇž]ôÓD$4$è	ÿÿÿ
+Àu+EUÇEÇÿÿÿE
+1Ò]ôÐuø}üì]Ãt$E@\$<$D$EèD$
+ÿU<º
+À|ÌtÊE$MèE 
+E$BEEÇE,E(
+E,BëUåWVSì|
+ÒEð}UìÇEÄt	ö@
+jÇEÜEì
+ÀçMìöÛAEèEì
+ÀšEìöPUäEì
+ÀUìöB@rJlMÌEì
+ÀUEìö@HUØEì
+À(MìöA EÔ}ÌÇEŒtï}ÌÇEŒtÇEŒÇEÐU
+9UÐë
+ÇEÈuÜ
+ö.ÇEžEÜO9EÈuàMÀst¶
+
+ÛÀ1Ò}ÀÂ
+ÂtUÀ
+$T$è
+ÀtG
+Ûu5^
+Ût.EŒëH
+
+Étøøë
+À
+Ä¶Œ'ÿEžÆ
+MÜ9MžrEÜ9Ež
+À`F
+ÀUUÔ1ö1ÛT$8MØt$0\$,L$4UìT$(M(L$$U$T$ M L$
+U
+T$ML$UT$ML$
+UÐD$T$Mè
+$UäEðèýÿÿ
+À
+ÇEÈt&MÈ]Ì
+ÉÀ1ÒûÂ
+Ât)öŒ'
+À
+&KMÈ
+ÉÀ1ÒûÂ
+Âuà]Ì¶Œ'MÈC
+ÉÀ1ÒûÂ
+Â§
+ÀtàUÔ1öT$8MØ1ÒT$0t$,L$4UìT$(M(L$$U$T$ M L$
+U
+T$ML$UT$ML$
+UÐD$T$Mè
+$UäEðè"üÿÿ
+Àt9ÇEÄCMÈ
+ÉÀ1ÒûÂ
+Â
+gÿÿÿŽ&Œ']È
+ÛßÿEÐÇM
+EE9MÐýÿÿEÄÄ|[^_]ÃB,R0EàUÜéüÿÿUÔ1öT$8MØ1ÒT$0t$,L$4UìT$(M(L$$U$T$ M L$
+U
+T$ML$UT$ML$
+UÐD$T$Mè
+$UäEðèAûÿÿ
+À'ÇEÄKéXþÿÿNFU
+ÉuhMÇU(MM$U(@éÿÿÿD$F$èúÿÿ
+À
+2ýÿÿé;ýÿÿEŒvŒ'@ø
+Òtóø
++ýÿÿéíüÿÿºT$F$èÑùÿÿ
+ÀuMUÐEÇésÿÿÿ}ÌÇEŒé
+üÿÿÇEÔéâûÿÿÇEØ`éµûÿÿÇEÌéûÿÿMð
+$èD$Eð$èEäéHûÿÿUð$èD$Mð
+$èé	ûÿÿÇEÈéFýÿÿÄ|žüÿÿÿ[^_]ÃÇEÄéíüÿÿ¶Œ'UåÇE]éUåSì4ÃMž ùw
+ù	ÀàøÀD$ ET$
+$D$
+EÇD$$L$D$1ÀD$1ÀD$E
+D$
+èUøÀÄ4[àý]Ãë
+UåW1ÿVSì
+uEðUðD$$èEìì;}
+sD1Û;]s6öŒ'ÆUUð|$\$CD$
+$èì;]rÓG;}
+rœEìUðD$$èìeô[^_]ÃŽ&Œ'UåWVSìlEÇEäu}
+ÇEà
+À]ÇEèÇEŒÇEžÇEìÇEðt	EÇM
+Ét	UÇ
+Ût	ö
+ä4$èD$4$èEÜ
+ÛqöhSUØ
+Û:ö1C
+EÔ
+ÛöC	S|UÐ
+ÛîöCäEÌG
+Áà$èEÄUÄžýÿÿÿ
+ÒCG
+Áà$èEÀ
+ÀÇEÈýÿÿÿ·G
+Áà$èEŒ
+ÀÇEÈýÿÿÿG
+Áà$èEž
+ÀÇEÈýÿÿÿt{EðUžD$ EìD$EŒT$
+UÀD$EèD$EÄT$
+ÚD$G
+D$G$ðèŽ÷ÿÿEÈ
+À©|'
+ÛöCCX
+ÀvŒ'Eä
+À
+5Eà
+À
+J}Ä
+ÿt
+EÄ$è]À
+Ût
+UÀ$èEì
+À
++UŒ
+Òt
+EŒ$èEž
+Àt
+Už$èEÈÄl[^_]ÃCé(þÿÿt&E
+Àte}ÔEäD$GD$
+D$EÐtžD$UÔð$UÜèCüÿÿEÈ
+À
+8ÿÿÿEÄUäD$
+GD$GD$$ðèüÿÿ}èÀ1Ò}Â
+Ât[EàUÐD$GD$
+T$UÜD$ðÇ$èÑûÿÿEÈ
+À
+ÆþÿÿEÀUàD$
+GD$GD$$ðè"üÿÿUÄ$èEÀ$è
+ÛöÄu	öÄEðUžC(EèS$CT
+ÛýöCóUŒEìSpCtE
+ÀtEäUE
+ÀþÿÿEàUéþÿÿÇEÌðéýÿÿÇEÐéñüÿÿt&4$èD$4$èé¹üÿÿŽ&4$èD$4$èEØéüÿÿt&$èEà
+ÀÃýÿÿ¶Œ'$èé©ýÿÿvD$
+UØ1ÉL$EŒ4$T$D$ÿUÌé²ýÿÿEž$èéûþÿÿEŒ$èé	ÿÿÿ¶Œ'U1ÀåW1É1ÒV1öSìì
+÷ÿÿ1À1Û
+÷ÿÿž} 
+ ÷ÿÿ1À
+÷ÿÿ1À
+|÷ÿÿ1À
+x÷ÿÿ1À
+Ô÷ÿÿ1À
+°÷ÿÿ1À
+Ž÷ÿÿ1À
+¬÷ÿÿ1À
+÷ÿÿEµt÷ÿÿ€÷ÿÿ
+Àš÷ÿÿÐ÷ÿÿt	EÇu
+öt	UÇ
+ÿt	ö
+ÁE$èD$U$è
+÷ÿÿ
+ÿ2ö)O÷ÿÿ
+ÿ÷öîw
+
+ÿÓöGÉW|÷ÿÿ
+ÿšöG÷ÿÿE
+1Òp÷ÿÿ
+ÀtE
+ö@t
+ž
+p÷ÿÿU
+$è
+Àteô[^_]ÃO÷ÿÿéQÿÿÿ
+Ô÷ÿÿD$ 
+Ð÷ÿÿD$
+
+Ì÷ÿÿD$
+È÷ÿÿD$
+Ä÷ÿÿD$
+À÷ÿÿD$
+
+Œ÷ÿÿD$
+ž÷ÿÿD$M
+
+$è
+Àu
+p÷ÿÿ
+À
+Ä÷ÿÿùMÀ÷ÿÿú%L$EØD$
+°÷ÿÿD$
+T$U
+$è
+ÀÃ
+A
+p÷ÿÿ
+À
+Þ
+À÷ÿÿ»ýÿÿÿÁà$è
+÷ÿÿ
+À
+À÷ÿÿÁà$è
+|÷ÿÿ
+Àð
+À÷ÿÿÁà$è
+x÷ÿÿ
+ÀÑ
+À÷ÿÿÁà$è
+t÷ÿÿ
+À²
+š÷ÿÿD$ 
+t÷ÿÿD$
+
+€÷ÿÿD$x÷ÿÿ
+ ÷ÿÿD$T$|÷ÿÿúL$
+
+÷ÿÿD$
+À÷ÿÿD$
+°÷ÿÿ$Eèñÿÿ
+ÀÃtC
+ÿtöGt
+GX
+À
+.E
+ÀtM
+÷ÿÿþD$
+Œ÷ÿÿD$
+
+ž÷ÿÿD$
+÷ÿÿtžD$4$÷ÿÿEè€öÿÿ
+ÀÃ
+Úœ ÷ÿÿÀ1Ò}Â
+Â
+¯ž÷ÿÿ
+Œ÷ÿÿÀ÷ÿÿl÷ÿÿÄ÷ÿÿ
+h÷ÿÿ
+°÷ÿÿ`÷ÿÿ÷ÿÿœ`÷ÿÿd÷ÿÿ÷ÿÿ
+\÷ÿÿT÷ÿÿX÷ÿÿfœ`÷ÿÿ
++`÷ÿÿ1Ûù)Ø÷ÿÿÀ1Òœd÷ÿÿÂ
+Âd1É
+h÷ÿÿL÷ÿÿ9
+L÷ÿÿAU
+$è1Òl÷ÿÿP÷ÿÿ9P÷ÿÿš1öØ÷ÿÿ;µ`÷ÿÿs;¶U
+
+ÀÂøÀ	ÐšM
+FQBA¶C;µ`÷ÿÿrËØ÷ÿÿMØT$
+$èÃ
+ÀSX÷ÿÿD$M$èì÷ÿÿ@D$
+L÷ÿÿL$
+P÷ÿÿD$U$è
+T÷ÿÿì
+ÀtRT÷ÿÿD$U$èì|÷ÿÿ@D$
+
+L÷ÿÿD$P÷ÿÿT$M$èìÿ
+P÷ÿÿ
+l÷ÿÿ9
+P÷ÿÿéÉþÿÿt&¹ðé^ûÿÿ¶»÷ÿÿé0ûÿÿM
+$èD$E$èÆéôúÿÿE$èD$U$è
+÷ÿÿé»úÿÿUØ$è
+À
+'ûÿÿÄ÷ÿÿÀ÷ÿÿé·ûÿÿÀD$E
+À
+D$U
+$è
+ÀÃÁœÄ÷ÿÿv
+œÀ÷ÿÿÀ°÷ÿÿ
+Ò
+A
+Ž÷ÿÿ
+À
+&
+¬÷ÿÿ
+À
+
+
+÷ÿÿ
+À
+ð
+÷ÿÿ
+À
+Õ
+÷ÿÿ
+À
+ºµ÷ÿÿ
+öt÷ÿÿ$è|÷ÿÿ
+Ét|÷ÿÿ
+$è
+€÷ÿÿ
+À
+Ô
+x÷ÿÿ
+Àt
+x÷ÿÿ$è
+t÷ÿÿ
+Àtt÷ÿÿ$èeôØ[^_]ÃE
+PBH
+ÀBÎ¶@ÈFCéSýÿÿ
+Ž÷ÿÿD$E
+$èéOúÿÿ$èé9ÿÿÿ$èé
+ÿÿÿ$èéÿÿÿ$èéèþÿÿ$èéÍþÿÿ
+À÷ÿÿ$D$èéšþÿÿD$
+1ÒT$
+x÷ÿÿD$÷ÿÿT$M
+$ÿ÷ÿÿéýþÿÿ
+¬÷ÿÿD$M
+
+$èéúÿÿ$èÁÈé+ÿÿÿEØ$èé0þÿÿH÷ÿÿ
+Ût,@÷ÿÿL$
+H÷ÿÿ$èH÷ÿÿì$èìD÷ÿÿL$U$èì1À÷ÿÿÃ1ö
+$è1À
+÷ÿÿ
+|÷ÿÿ$èµ|÷ÿÿ
+Û
+ýÿÿœÄ÷ÿÿv
+œÀ÷ÿÿnp÷ÿÿ
+Û
+M
+
+Ét(E
+ö@tÔ÷ÿÿ
+Ò
+*ýÿÿM
+ÇA
+ÇAU
+ž÷ÿÿÇB
+Œ÷ÿÿB
+Ä÷ÿÿB
+À÷ÿÿB
+
+°÷ÿÿBE
+
+ÀtJ
+p÷ÿÿ
+Àt
+
+Ž÷ÿÿM
+A
+¬÷ÿÿA
+÷ÿÿA
+
+Ð÷ÿÿ
+Àt
+È÷ÿÿU
+B
+Ì÷ÿÿ
++B
+ÿÄöÄu	öÄŽ
+š÷ÿÿt÷ÿÿG(
+ ÷ÿÿO$GT
+ÿtdöGt^x÷ÿÿ
+€÷ÿÿWpGtE
+Àt
+
+÷ÿÿU}
+ÿt
+
+÷ÿÿM1Àé.÷ÿÿÿ
+L÷ÿÿh÷ÿÿ9L÷ÿÿéúÿÿžþÿÿÿéUþÿÿx÷ÿÿ
+$èë€
+÷ÿÿD$
+Œ÷ÿÿD$
+
+ž÷ÿÿD$÷ÿÿÇ$T$÷ÿÿEèïÿÿ
+ÀÃ
++ùÿÿéÁûÿÿ1Àh÷ÿÿ
+L÷ÿÿ9L÷ÿÿÝýÿÿE
+$è1Àl÷ÿÿ
+P÷ÿÿ9P÷ÿÿv1öØ÷ÿÿ;µ`÷ÿÿs4fM
+
+ÀÂøÀ	ÐšQFBA¶C;µ`÷ÿÿrÎ1ö;µd÷ÿÿs/1ÛfØ÷ÿÿT$\÷ÿÿ
+$è
+Àt
+FÃ;µd÷ÿÿrÕ;µd÷ÿÿÒþÿÿX÷ÿÿD$M$è÷ÿÿì²D$
+L÷ÿÿL$
+P÷ÿÿD$U$è
+T÷ÿÿì
+ÀtMT÷ÿÿD$U$è|÷ÿÿì±D$
+
+L÷ÿÿD$P÷ÿÿT$M$èìÿ
+P÷ÿÿ
+l÷ÿÿ9
+P÷ÿÿé¶þÿÿE
+PBH
+ÀBx¶@ÈFCéÔþÿÿ$èÁÈëéÿ
+L÷ÿÿh÷ÿÿ9L÷ÿÿéHþÿÿT÷ÿÿ1öµH÷ÿÿ
+Ût9U$è
+H÷ÿÿT÷ÿÿìD$
+H÷ÿÿ$è
+@÷ÿÿìX÷ÿÿ1öD$M$è
+D÷ÿÿì1ÒT$
+Øýÿÿ¹L$$è;µd÷ÿÿs#\÷ÿÿÁ¶FÆ;
+d÷ÿÿfUØýÿÿrã1À
+L÷ÿÿ
+h÷ÿÿ9
+L÷ÿÿ
++ûÿÿU
+$è1Àl÷ÿÿ
+P÷ÿÿ9P÷ÿÿØU
+
+ÀÂøÀ	ÐšÕM
+AŸ@ACÿ=þ£üÿÿ·]Øýÿÿf
+Àüÿÿ÷ÿÿ·ÀDüD$
+L÷ÿÿL$
+P÷ÿÿD$U$èµH÷ÿÿì
+öt;·]Øýÿÿ|÷ÿÿDüD$
+
+L÷ÿÿD$P÷ÿÿT$H÷ÿÿ
+$èìÿ
+P÷ÿÿ
+l÷ÿÿ9
+P÷ÿÿ(ÿÿÿÿ
+L÷ÿÿh÷ÿÿ9L÷ÿÿéæþÿÿE
+PBH
+ÀBç¶@Ëéÿÿÿ
+t÷ÿÿ$èéTûÿÿ
+÷ÿÿD$M
+
+$èéQúÿÿ1Ò
+Øùÿÿ¹L$1öT$$è;µd÷ÿÿ\÷ÿÿëÃ¶PFÆ;
+d÷ÿÿfQstŸ
+Øùÿÿ
+<÷ÿÿ
+ÉuÐÇ$žD$èÁ
+<÷ÿÿ
+É
+Øùÿÿuš1Ûë
+CûÿØùÿÿ
+Àtè$èëÞUØ$èéùÿÿ1À
+L÷ÿÿh÷ÿÿ9L÷ÿÿáM
+
+$è1À
+P÷ÿÿ
+l÷ÿÿ9
+P÷ÿÿXU
+
+ÀÂøÀ	ÐšIM
+AŸ0@AFÿ=þÿU
+
+ÀÂøÀ	Ðš8M
+AŸ@ACÿ=þxµØùÿÿ
+Àif<X^X÷ÿÿD$M$èµØùÿÿì÷ÿÿ·XDüD$
+L÷ÿÿL$
+P÷ÿÿD$U$è
+T÷ÿÿì
+ÀtYT÷ÿÿD$U$èµØùÿÿì|÷ÿÿ·XDüD$
+
+L÷ÿÿD$P÷ÿÿT$M$èìÿ
+P÷ÿÿ
+l÷ÿÿ9
+P÷ÿÿšþÿÿÿ
+L÷ÿÿéfþÿÿE
+PBH
+ÀB¶@Îé þÿÿE
+PBH
+ÀB}¶@Ëé±þÿÿ$èÁËé+üÿÿ1Ûë
+Cûÿ(÷ÿÿØùÿÿ
+Àtè$èëÞ1Ûë
+Cûÿ¥øÿÿØùÿÿ
+Àtè$èëÞ$èÁÎéþÿÿ$èÁËé2þÿÿžýÿÿÿéÃöÿÿ1ÛëŽ&CûÿLøÿÿØùÿÿ
+Àtè$èëÞNone$010/š.âß*
+h
+,+Š,µ-Z$ #á"#, -	&3	&S	&s	&$
++)6
++)S
++)e
++)e
+)p
+)æ
+
+
+,
+'$
+,0
++D
+%d
+%
+)ª
+)~
+,
+-(! ñ
+&>&]&|&<¶Û#"7#m"
+·,Æ'Ø,ç+ý
+2Ÿ)Ö)ü))[h%u%)))³ü	1
+
+D#Uo#))-) '*\#"³#ä"*1f#­#Ó#µ"ú"^)xõ,
+)9
+
+c
+
+#W
+"}
+#º
+"0
+1]
+)
+)
+1
+1Ü
+)ü(.fileþÿgcreate.c ` Ð ) 7ð C Q d  À
+ .textâ
+o.data.bss.rdata € ¹ Å _memset Ô ê ý  # 3 E P ` p }   ª ¿ Î _free _strcmp Û í ý 
+  _tolower __filbuf '_xpmstrcasecmp_AllocColor_SetColor_CreateColors_FreeColors_CreateXImage_MSWPutImagePixels_XpmCreateImageFromXpmImage_xpmParseDataAndCreate_xpmHashSlot_boundCheckingCalloc_DeleteDC@4_xpmNextString_CreateCompatibleDC@4_xpmFreeColorTable_xpmParseExtensions_xpmHashTableFree_xpmParseColors_xpmHashTableInit_xpmGetCmt_xpmParseValues_xpmParseHeader_SetPixel@16_SelectObject@8_XCreateImage_XDestroyImage_boundCheckingMalloc_XDefaultDepth_XFreeColors_XDefaultColormap_XDefaultScreen_XDefaultVisual_XAllocColor_XParseColor
++CrIFrBuf.o/     1345987850  0     0     100666  1275      `
++L.text
+
+ P`.data@0À.bss0ÀUå]ÇBÇBÃt&Œ'UåEÈìš]ôxýÿÿuøuš}ü}$è4$èE
+Úè¥ÿÿÿ
+ÿ}<$è|$4$è|$EÈt$D$ED$
+E\$D$E$è
+ÀÃxt$EÈD$<$è4$èEÈ$èØuø]ô}üì]Ãf1À1ÒD$EÈT$D$ED$
+E\$D$E$èÃEÈ$èØuø]ô}üì]Ãt&UåìXuøu}ü}
+]ôžýÿÿ<$è4$èEÚèþÿÿt$|$
+$è]ôuø}üì]ÃEMgsžÀË
+
+
+RZt
+.fileþÿgCrIFrBuf.c   *0 .text
+
+.data.bssG U f v   ¯ Â Ò ã_OpenBuffer_XpmCreateImageFromBuffer_XpmCreateXpmImageFromBuffer_xpmParseData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage
++CrIFrDat.o/     1345987850  0     0     100666  1318      `
++LÎ.textÀL
+ P`.data@0À.bss0ÀU1ÉåB]ÇB1À1ÀÇB
+ÇBÆ
+Æ
+ ÃöŒ'UåEÈìš]ôxýÿÿuøuš}ü}$è4$èE
+Úèuÿÿÿ
+ÿ}<$è|$4$è|$EÈt$D$ED$
+E\$D$E$è
+ÀÃxt$EÈD$<$è4$èEÈ$èØuø]ô}üì]Ãf1ÀD$1ÀD$EÈD$ED$
+E\$D$E$èÃEÈ$èØuø]ô}üì]Ãt&UåìXuøu}ü}
+]ôžýÿÿ<$è4$èEÚèhþÿÿt$|$
+$è]ôuø}üì]Ãu}£Ïèðû
+<I
+€
+.fileþÿgCrIFrDat.c P '` .textµ
+.data.bssB P a q   ª œ Í Þ_OpenArray_XpmCreateImageFromData_XpmCreateXpmImageFromData_xpmParseData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImagedata.o/         1345987851  0     0     100666  5560      `
++Lž.text0ŽÀ7 P`.dataäæ@`À.bss0À.rdata\d@0@UåWVSì
+8EðªEðMðqÁÏMäMðÇEì¶AUèFH
+ÀFxY¶@GÓÿEèÿEìEè¶ŸÁ9ÐuÉÀ1ÒûÿÂ
+ÂuÄÉt0]ì
+Ûtt$ŸO$èKuíÄ
+1À[^_]Ã4$èÂë£UðZ}äÇEìMðMè¶8ë
+GUèÿEì:Â1ÀûÿÀ
+Ðt3FH
+ÀF)¶@}ìÿÓuÄÇEì}äëžt&EìMðAë+t&GÿEèÿEìEè¶ŸÁ9ÐuZÉÀBÂ¶Ò
+ÂtJFH
+ÀF±¶@}ìÿÓužÇEì}äGÿEèÿEìEè¶ŸÁ9Ðt®Ž&ÉFº
+Ò
+
+ÿÿÿÄ
+1À[^_]ÃÀMð1ÿEäÃEðÖ¶AvEðCFMðGPBA¶
++
+¶8ÈuÉuÞÀt.Eð)xÄ
+1À[^_]Ã4$èÂéHÿÿÿ4$èÂéÐþÿÿUð1ÿJ]äEð°¶8Â1ÀÉÀëŽ&CG
+:À1ÒÉÂ
+Ðt
+MðÿÿQBA¶
++uÕ]ä1ÿëÎEðxë¶CFG
+¶8Èu,Àt(MðÿÿQBA¶
++uÙ]äF1ÿGC
+¶8ÈtÔÀt+º
+Ò
+Vÿÿÿé¬ýÿÿt$Ÿ$èÄ
+1À[^_]ÃEðÿHéýÿÿŽ&Œ'UåVSìu
+ÀuV
+FBV
+
+NÄ1À[^]Ã¶øîŸ
+^t0t&Œ'CH
+ÀCL¶@Ÿ
+9ÂtBuÛŸ
+t^fCH
+ÀCxE¶@Ÿ
+9Âtúÿzÿÿÿ
+ÀtÏŸ9ÐuÈðè!üÿÿCH
+ÀCyÁ¶
+$èÂë·
+À7ÿÿÿë$t&¶@Ÿ9Â
+±ðèÐûÿÿCH
+ÀCyÕ
+$èÂëÑ¶
+ÒtNt&Œ'ÈAN¶Àt8Âuï¶
+ÒtoFHN¶À±þÿÿ8ÂëÈAN¶Àþÿÿ8
+þÿÿ
+ÒtÙ8uÕðè:ûÿÿNëÉ
+$èÂé­þÿÿ\$$èéVþÿÿ
+ÀHþÿÿVJN¶8t
+AÿFé-þÿÿðèåúÿÿFHN¶8tãëÖ¶Œ'UåWVSì
+UÇEð
+ÀÂøÀ	Ðšt_MQë1f¡·Xà
+ÀbMŸ
+9ØPEBPŸ¡8tÄ
+$¿|$èMQë¹Urë#v¡·xà
+Àt^MŸ
+9øtPFH
+ÀFb¶8@ÿÿût2¡8tž<$¹L$èë³4$èÂÓöŒ'¡8
+ã¡·Xà
+À
+æUŸ
+9ØÂ1ÀûÿÀ
+ÐÇM9Mð»E
+@E
+FÿEðH
+ÀFx
+¶@Óë¡·Xà
+ÀuYUMŸ
+9ØÂ1À9MðÀ
+Ðt;EPŸBE
+MQ@ÿEðE
+¡8tª
+$Ÿt$è
+Àt§ÿMðEÿHEðÄ
+[^_]Ã
+$ºT$è
+Àÿÿÿt$
+$èEðÄ
+[^_]Ã4$èÇéþÿÿUžåSìøýÿÿD$E\$$èšýÿÿD$U
+
+$T$èÄ[]Ã¶¿UåW1ÿV1öSì<UœàýÿÿµÜýÿÿ
+ÀÂøÀ	ÐšªEp
+öòŸ
+
+Ût*Ÿ
+9ÙtFt&ÂEPBŸXÿ
+Ût9Ùué)òBàýÿÿ$è
+ÜýÿÿÜýÿÿžýÿÿÿ
+ÛEt$àýÿÿ
+ÜýÿÿT$$èU
++
+É
+ÜýÿÿàýÿÿÆDÿéîEpFH
+ÀFü¶@úÿÓžþÿÿÿÙÇ$1Òœèýÿÿäýÿÿè
+ÜýÿÿUŸ
+9ØëPt&œäýÿÿ°FGÿ
+äýÿÿH
+ÀF(¶@ÓUŸ
+9ØÂ1ÀûÿÀ
+Ðu³ûÿ
+àýÿÿäýÿÿÔýÿÿ
+ñ
+ÜýÿÿÆž
+àýÿÿt$
+$èE
+ÜýÿÿEàýÿÿ1ÀÄ<[^_]Ã4$èÂéýþÿÿ
+àýÿÿÜýÿÿ
+ØýÿÿD$$è
+ÀÇÖ
+Üýÿÿ
+àýÿÿÇ<$žœèýÿÿD$
+èýÿÿD$èØýÿÿ1À
+äýÿÿàýÿÿFGÿ
+äýÿÿH
+ÀFàþÿÿŽ&4$èÂéÑþÿÿ
+ÜýÿÿBÐýÿÿT$$è
+ÀÇtE
+Üýÿÿ
+àýÿÿèýÿÿT$Ç
+äýÿÿ<$D$è
+ÔýÿÿÜýÿÿÆ
+Ðýÿÿé¹þÿÿÜýÿÿ$èžýÿÿÿéËþÿÿ
+Üýÿÿ$èžþÿÿÿé³þÿÿ¶Œ'Uåì]ø]uüu
+
+ÀtC
+ÀuÇ1À]øuüì]Ã@$èS$T$ST$èSÆ1ÀÇC]øuüì]ÃfU1Àåì8]ô]uø}ü;
+äýÿÿ
+ÿu1À]ôuø}üì]ÃÆ
+1É1öÆ
+
++º
+èýÿÿ³T$D$
+$èeùÿÿøtV
+$žµèýÿÿD$t$èEùÿÿøZøuüžA¹ÆœèýÿÿóŠs]ôžþÿÿÿuø}üì]ÃüžF¹ÆœèýÿÿóŠu
+$žD$
+èýÿÿD$èØøÿÿÇ
+ÿžþÿÿÿ
+ÿÿÿ1Àèýÿÿ/èýÿÿž_$D$è
+ÀÂtèýÿÿ)È)Çÿø~žüŸN9À×ÁóŠ
+]ÿÿÿž ž
+äýÿÿvœäýÿÿžþÿÿÿÁç
+Òþÿÿ
+äýÿÿ
+Àî 
+À
+»¶
+Æ
+
+
+$èÔõÿÿ¶
+
+é5þÿÿüŸVœèýÿÿ¹óŠÂÀ¿œäýÿÿ8Â
+þÿÿ1É éIÿÿÿ
+$
+èýÿÿŸt$D$è÷ÿÿÇë |$èýÿÿT$$è
+Àtºÿ
+äýÿÿ
+äýÿÿÁà
+ÀuÍë
+$è-õÿÿéýÿÿ¡¡
+$è
++õÿÿ¶
+
+¶
+é$ÿÿÿ
++
++""
+
+&*/""18=!
++C/**/,
++static char *[] = {
++};
++Lisp;(setq  '(
++))
++XPM2#define_formatXPM
+š
+
+)
+ù
+ô
+?
+Ï
+â
+q£¹
+Ñ%
+/
+AO³ÿ
+>
+R
+e
+§Dyã	
+µ	
+ß	
++T
++
+t
++€
++Í
++å
++6
+N
+
+
+8
+
+µ
+ð
+
+
+
+
+
+
+3
+
+O
+
+`
+È
+á
+
+ù
+
+
+
+&
+
+ $(048<@DHPTX\.fileþÿgdata.c   !@ .p 9À G
+ Rp
+ .text/7.data.bss.rdataZbp_strrchr _strncmp _free  _strncpy © Ÿ _ungetc È __filbuf Ò_ParseComment_xpmNextString_xpmNextWord_xpmNextUI_xpmGetString_xpmGetCmt_xpmParseHeader_xpmDataTypes__imp___pctype__imp____mb_cur_max_boundCheckingRealloc_boundCheckingMalloc_xpmatoui__isctypehashtab.o/      1345987851  0     0     100666  1211      `
++LB.textpü P`.data@0À.bss0ÀUåWVSì
+1Û}M
+w
+ëØŸÒÁà)ØA
+¶Òuë?Ø1Ò÷÷
+
+ÀtDU
+¶Uóëë9ós\Ÿü
+Àt(¶Uó8uå$U
+T$è
+ÀuÒt&Œ'Ä
+Ø[^_]Ã¶Uåì(uøu
+}ü}]ôt$<$èOÿÿÿÃ
+Àt1É]ôÈuø}üì]Ã¶Ç$è
+ÀÂt0EB
+Ò¹ýÿÿÿtÆG;G}@Gë¶ºVUUUEìMìG
+]ìÉEðÈÁã÷êÈÁø)ÂW
+$è
+À¹ýÿÿÿxÿÿÿG
+Ãë¶ëÇ9Ãwó1ö]ð;uì}öŒ'
+Àu
+FÃ;uì|ñEð$èÿGé'ÿÿÿ<$FD$è_þÿÿÃëÐ¶UåSì]ÇÇCUÇCÇ$èÂ
+Òžýÿÿÿt
+ë
+t&èÇ9ÐwóS
+1ÀZ[]ÃvŒ'UåWVSì
+}w
+
+öt<
+Ž&9óv
+ë
+Àtó$è9ówëŽ&4$èÇG
+Ä
+[^_]ÃmØ2
+ÖA
+T
+.fileþÿghashtab.c   ° 2 .textg.data.bss_free _strcmp D Y_xpmHashSlot_xpmHashIntern_xpmHashTableInit_xpmHashTableFree_boundCheckingMalloc
++Image.o/        1345987851  0     0     100666  579       `
++L 
+.text
+ P`.data@0À.bss0ÀUåEÇ@
+Ç@Ç@]ÃvUåSì]S
+ÒuC
+Àu(ÇCÄ[]ÃC
+$D$èC
+ÀtÝt&$èÇCÄ[]ÃP
+d
+.fileþÿgImage.c   .textu.data.bss_free & 9_xpmInitXpmImage_XpmFreeXpmImage_xpmFreeColorTable
++Info.o/         1345987851  0     0     100666  901       `
++L$.textpü P`.data@0À.bss0ÀUåE
+Àt#Ç@Ç@Ç@
+Ç@
+Ç@]ÃUåSì]
+ÛtöÄuöÄtC
+ÀudÇÄ[]ÃvC
+Àu=C
+Àu%C
+
+Àu
+ëÌŽ&$èÇC
+ë²$èÇCëÊ$èÇCë²D$C
+$èÇC
+ÇCézÿÿÿöŒ'UåUM
+ÇöÄtÇöÄt
++]Ãt&UåUM
+ÇöÄtÇAHBALBAPB
+öÄt
++A<B
+A8Bšt
++ABA
+B]ÃšÀ
+.fileþÿgInfo.c 0 $à 4 .textn.data.bss@ _free S_xpmInitXpmInfo_XpmFreeXpmInfo_xpmSetInfoMask_xpmSetInfo_XpmFreeExtensions
++misc.o/         1345987852  0     0     100666  1002      `
++L.textÐŽ	 P`.data@0À.bss0À.rdata|Z@0@UåW1ÿV1ö;}
+S]s*Ž&Œ'¶
+È,0<	w¿ŸÁFC|PÐ;u
+rä
+öÀ1Ò;u
+Â1É
+Ât
++E¹8[È^_]ÃUžåUÂúw
+ÿ$dž]Ã]ž Ã]ž.Ã]ž:Ã]žIÃ]žWÃt&Œ'UžËvå]Ã¶Uå]éInvalid XpmErrorXpmColorFailedXpmColorErrorXpmNoMemoryXpmFileInvalidXpmOpenFailedXpmSuccesszb
+v
+{
+
+
+
+
+ 
+Ådhlptx.fileþÿgmisc.c ` !° _XpmFreeÀ .textÉ	.data.bss.rdata|_free 4_xpmatoui_XpmGetErrorString_XpmLibraryVersionRdFToBuf.o/     1345987852  0     0     100666  914       `
++Lü.textàŽ
++ P`.data@0À.bss0À.rdata@0@U1ÉåWVSì\E
+ÇEL$$èÃ
+Ûžÿÿÿÿxw
+$EžD$è
+Àul
+$ºT$èEŽ
+ÀtT}ÌG$è
+ÀÆt^|$EŽ4$D$
+žD$èÃEŽ$è9ûu"Æ7E
+01ÀÄ\[^_]Ã
+$èžÿÿÿÿëé4$èžÿÿÿÿëÚEŽ$èžýÿÿÿëÈr9E
++Nc
+
+±À
+Ò.fileþÿgRdFToBuf.c .textÝ
++.data.bss.rdata_free _fread _fclose  __fdopen _close __fstat _open ._XpmReadFileToBuffer_boundCheckingMallocRdFToDat.o/     1345987852  0     0     100666  682       `
++LD.text
+ P`.data@0À.bss0ÀUåìh}ü}
+]ôuø
+ÿÇEštÇEšuÈD$t$E$è
+ÀÃtØuø]ô}üì]Ãt$Eš<$D$è4$ÃèEš$èØuø]ô}üì]Ã8
+`
+j
+u
++.fileþÿgRdFToDat.c .text.data.bss ' 8 S j_XpmReadFileToData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmCreateDataFromXpmImage_XpmReadFileToXpmImageRdFToI.o/       1345987852  0     0     100666  2179      `
++Lb.text`Ž@
+ P`.data@0À.bss0À.rdata,@0@UåìH]ô
+ÀÃuø}üÔýÿÿÿ$è
+Ðýÿÿø{œÐýÿÿ~+ü
+Ðýÿÿ¹Dý
+àýÿÿœàýÿÿžÆóŠË
+$žD$èÔýÿÿ
+ÀºÿÿÿÿAtÇµÔýÿÿ1ÒÇF]ôÐuø}üì]ÃüºDþ
+äýÿÿžœäýÿÿÖÁóŠ
+^ÿÿÿœÔýÿÿž	ŸÇ\$èýÿÿD$
+$èt$
+$èG
+Àºÿÿÿÿ
+sÿÿÿë¡ÇBé^ÿÿÿ
+Ôýÿÿ¹
+Ç\$èýÿÿL$
+$è
+$ºT$èÔýÿÿBëöŒ'Uåìútút
+ÉÃ@;tó$èÉÃŽ&@$èÉÃvUåìX}üE
+}]ôuøµžýÿÿ$è<$èEòèþÿÿ
+ÀÃtØuø]ô}üì]Ãv|$E
+4$D$èÃðèTÿÿÿØuø]ô}üì]Ãt&UåEÈìšuøuš$]ô}ü}è4$èE
+xýÿÿèýÿÿ
+ÀÃ
+
+
+ÿ<$è|$4$è|$EÈD$Et$D$
+ED$
+xýÿÿD$E$è
+ÀÃxt$EÈD$<$è4$è
+xýÿÿèþÿÿEÈ$èØuø]ô}üì]Ã1ÀD$1ÀD$EÈD$ED$
+ED$
+xýÿÿD$E$èÃë¡.gzr.Zuncompress -c "%s"gunzip -qc "%s"&[
+m
+v
+²
+Þ
+ã
+ÿ
+";
+W_
+h£·â
+ê
+_
+g
+ÍæîI.fileþÿgRdFToI.c   À 7@ .textQ
+.data.bss.rdata,K__pclose _fclose __popen _sprintf _strlen W e v   ¯ ¿ Ò â _fopen ó_OpenReadFile_xpmDataClose_XpmReadFileToXpmImage_XpmReadFileToImage__imp___iob_xpmParseData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage
++rgb.o/          1345987852  0     0     100666  7632      `
++Lº.textÐŽ P`.data`ê@`À.bss0À.rdata
+ä	@0@U¡Xå]Ã¶U1ÉåWVS
+Xu}9Ù}Ž&Í¶Â9ðtA9Ù|í[1À^_]Ã¶ÐÁè¶À9øuâÁê¶Â;Eu×[Í^_]Ã¶Œ'UåWVSì
+E$èEðöŒ'º T$Eð$è
+ÀÃt;vtÞ¶CCÀëó]ð¶ÀtŸÀ$èC¶ÀuëžD$Uð$è
+ÀtÆ@a5X1ÿNë{9÷07ÐÁè
+ÑûÝD$Mð
+$è
+Àt<}Ðsÿ9÷~ÐE
+UMÇÿEðÇÇ$èÄ
+ž[^_]ÃÝM
+¶ÐMÂÁê¶ÒÁèUMð¶À
+$èÄ
+ž[^_]Ãt&Uå]Ãðøÿ
++úë×2¿Á"ðÿÿ(õõÜ.ÿäÄ5;ÿëÍJÿO+âZ¥**`Þžj_tÿÒi
+ÿrV""ÿøÜ§ÿÿ¬ž
+ºV-Äœ·kÎUV/Ýÿè óézþŒ
+8Kf/OO'ŠŠ5Ó@ÿI¿ÿUTTT]
+ÿh##rÿúð~PiÜÜÜøøÿÚª€ïß®~~~³¹¿ÆÿÿÿÎ
+
+
+ÕÜ!!!ã$$$ê&&&ñ)))ø+++ÿ...000
+333666!888(;;;/===6@@@=BBBDEEEKGGGRJJJY_MMMfOOOmRRRtTTT{WWWYYY\\\^^^aaaccc¥
++
++
++«fff²iii¹kkkÀnnnÇpppÎsssÕuuuÜxxxãzzzê}}}ñ
+
+
+÷þ
+
+
+
+!(/6=CJQX¡¡¡_£££fŠŠŠmšššt«««{­­­°°°³³³µµµžžž€ººº«œœœ²¿¿¿¹ÂÂÂÀÄÄÄÇÇÇÇÎÉÉÉÕÛÌÌÌâÏÏÏéÑÑÑðÔÔÔ÷ÖÖÖþÙÙÙÛÛÛ
+ÞÞÞàààããã!'ååå.èèè5ëëë<íííCðððJòòòQõõõX÷÷÷_úúúfüüümÿs­ÿ/ðÿðÿiŽk99ÿÿð ³³~Šææú¯ÿðõœ|üÇÿúÍÔ°âÿÞðéàÿÿóîÝúúÒššš!ÿ¶Á+ÿ z7 ²ªEÎúRpÿawp|Óÿÿà¯úðæÿÿ£Rª»22ÌÆ2KØÑÁfèœRœõpÛ4wfjj!##3ÒÒCÕ yS//d`õÿújÿäátÿäµ}ÿÞ­##u##uýõæk#©ÿ°ÿEºïïÁîèªÏsÞxÙ¯îîçÛpõÿïÕÿÚ¹
++Í
+?ÿµÅÅH°àæ$  ð+ÿ/Œ9AiáCEOézVô€`aRjÿõîsR-zrÿ~«pÿúúA¬A§Tpª±ÞžµØ¿ØœÿcGÄÐÌßÚ>Îáó>ëõÞ³ñÿÿÿ÷õõõÿÿ	2Ø8êAliceBlueAntiqueWhiteAquamarineAzureBeigeBisqueBlackBlanchedAlmondBlueBlueVioletBrownburlywoodCadetBluechartreusechocolateCoralCornflowerBluecornsilkCyanDarkGoldenrodDarkGreenDarkKhakiDarkOliveGreenDarkOrangeDarkOrchidDarkSalmonDarkSeaGreenDarkSlateBlueDarkSlateGrayDarkTurquoiseDarkVioletDeepPinkDeepSkyBlueDimGrayDodgerBlueFirebrickFloralWhiteForestGreengainsboroGhostWhiteGoldGoldenrodGrayGray0Gray1Gray10Gray100Gray11Gray12Gray13Gray14Gray15Gray16Gray17Gray18Gray19Gray2Gray20Gray21Gray22Gray23Gray24Gray25Gray26Gray27Gray28Gray29Gray3Gray30Gray31Gray32Gray33Gray34Gray35Gray36Gray37Gray38Gray39Gray4Gray40Gray41Gray42Gray43Gray44Gray45Gray46Gray47Gray48Gray49Gray5Gray50Gray51Gray52Gray53Gray54Gray55Gray56Gray57Gray58Gray59Gray6Gray60Gray61Gray62Gray63Gray64Gray65Gray66Gray67Gray68Gray69Gray7Gray70Gray71Gray72Gray73Gray74Gray75Gray76Gray77Gray78Gray79Gray8Gray80Gray81Gray82Gray83Gray84Gray85Gray86Gray87Gray88Gray89Gray9Gray90Gray91Gray92Gray93Gray94Gray95Gray96Gray97Gray98Gray99GreenGreenYellowhoneydewHotPinkIndianRedivoryKhakilavenderLavenderBlushLawnGreenLemonChiffonLightBlueLightCoralLightCyanLightGoldenrodLightGoldenrodYellowLightGrayLightPinkLightSalmonLightSeaGreenLightSkyBlueLightSlateBlueLightSlateGrayLightSteelBlueLightYellowLimeGreenlinenMagentaMaroonMediumAquamarineMediumBlueMediumForestGreenMediumGoldenrodMediumOrchidMediumPurpleMediumSeaGreenMediumSlateBlueMediumSpringGreenMediumTurquoiseMediumVioletRedMidnightBlueMintCreamMistyRosemoccasinNavajoWhiteNavyNavyBlueOldLaceOliveDrabOrangeOrangeRedOrchidPaleGoldenrodPaleGreenPaleTurquoisePaleVioletRedPapayaWhipPeachPuffperuPinkPlumPowderBluepurpleRedRosyBrownRoyalBlueSaddleBrownSalmonSandyBrownSeaGreenseashellSiennaSkyBlueSlateBlueSlateGraysnowSpringGreenSteelBlueTanThistletomatoTransparentTurquoiseVioletVioletRedWheatWhiteWhiteSmokeYellowYellowGreengrey
+
+3
+k
+°Þíü
++
+*
+9l
+« (08@HPX`hpx š°žÀÈÐØàèðø (08@HPX`hpx š°žÀÈÐØàèðø (08@HPX`hpx š°žÀÈÐØàèðø (08@HPX`hpx š°žÀÈÐØàèðø (08@HPX`hpx š°žÀÈÐØàèðø (08@HPX`hpx š°žÀÈÐØàèðø (08@HPX`hpx š°žÀÈÐØàèðø (08@H.fileþÿgrgb.cX% 6 E XÀ .textÅ.data\ê.bss.rdata_free i _strstr _tolower _strchr _strdup x_theRGBRecords_numTheRGBRecords_xpmReadRgbNames_xpmGetRgbName_xpmGetRGBfromName_xpmFreeRgbNames_xpmstrcasecmpscan.o/         1345987853  0     0     100666  4125      `
++LÄ
+.text 
++ŽH
+% P`.dataÔ
++º
+@0À.bss0À.rdatapØ
++@0@UåìuøEu
+]ô}ü
+ÒtÇ1À]ôuø}üì]ÃFN
+>Ã9ËMðs¶¿E9tCÂ9Ërñ9ËtUë·V9ÚvEUðUAF
+ëFÕD$<$èÂ
+ÒžtÿÿÿN
+×ë¹Ž&UåEU
+M
+Àu'B
+
+ÀuÇB
+ÇBÇÇ1À]ÃÇ1À]Ãë
+UåW1ÿVSì
+EðEpD$Uð$èì;}
+sM1Û;]s?öŒ'|$\$Uð$èì
+t$U$T$ÿU
+ÀuCÆ;]rÊG;}
+rŽeô1À[^_]Ãeôžýÿÿÿ[^_]Ã¶Œ'U1ÀåWVSì¬]
+
+Àýÿÿ1À}
+Œýÿÿ1À
+Û
+žýÿÿÇEÈÇEÌÇEÐÇEÔÇEØyCS
+ŒýÿÿžýÿÿE
+ÀþUš èMI Äýÿÿ
+Œýÿÿ¹ŸýÿÿÿL$žýÿÿ¯Â$èEÌ
+ÀÅEÐÁà$èEÈ
+À¬
+ÿt7žÀŒýÿÿD$
+EÈD$
+žýÿÿ$úD$Eè[þÿÿ
+ÀÆ
+q
+Ût7žžýÿÿÚD$
+EÈD$
+ŒýÿÿL$$Eè þÿÿ
+ÀÆ
+6žŸýÿÿÿD$EÔ$è
+Àýÿÿ
+À]Ôºž\û\ëkÀ\B9Ãwø9ÄýÿÿsÄýÿÿuØ
+ö
+I°ýÿÿÀýÿÿ1ÿœýÿÿEÈŽýÿÿM
+¬ýÿÿ1À
+É
+ýÿÿÛUöÏJšýÿÿ
+öt
+
+¬ýÿÿKÀýÿÿ°ýÿÿÁŽýÿÿ
+°ýÿÿÁà$è
+ýÿÿýÿÿžýÿÿÿ
+Ò1ÿœ°ýÿÿŽýÿÿœ ýÿÿ
+ýÿÿ÷ýÿÿ
+ýÿÿàÄýÿÿB|ýÿÿvŒ'|ýÿÿ
+$èýÿÿ
+ÀÃ:øºÉB²ù÷â¡ŸÁêkÒ\)Ñ¶Cë6úžÉB²)Ê÷âžÉB²FÁêtýÿÿtýÿÿ÷â¡ÁêkÒ\)Ñ¶C;µÄýÿÿrÂÆG¬ýÿÿÿ
+ ýÿÿýÿÿ
+ýÿÿÂ ýÿÿÁ9°ýÿÿýÿÿ¬ýÿÿ7ÿÿÿ
+°ýÿÿ1öýÿÿšýÿÿ]D$
+T$L$
+$èt$Ç$è
+€ýÿÿ]
+ÛtDUöB
+MöÄt0UM]ERDI@[$@Týÿÿýÿÿýÿÿ
+ýÿÿ1Éœ°ýÿÿŽýÿÿ ýÿÿýÿÿýÿÿýÿÿŽ&Œ'ýÿÿ
+Òø1À1É1ö;
+ýÿÿë&t&ýÿÿò)Êýÿÿ9ÅF;µýÿÿž;µýÿÿuÐ¹ëäöÄ
+üÿÿ1öµÄýÿÿéüÿÿvEÌ
+Àu=EÈ
+Àu,
+Àýÿÿ
+ÀtEÔD$
+Àýÿÿ$èðÄ¬[^_]Ã$èëÊ$èë¹
+ÿûÿÿOGŒýÿÿ
+žýÿÿézûÿÿÄýÿÿB$èÀýÿÿ
+ÀÃºýÿÿÿÅ¡Ÿ1É¶C;µÄýÿÿs1¿ÉB²÷ÙFÈ÷çÑÁéÈ÷ç¡ÁêkÒ\)Ñ¶C;µÄýÿÿrÔÆE
+ÀŽUÁáf
+Éu	öÄ]STúf
+É§CDR<ÐŸ
+·
+Ût
+$èÀýÿÿ
+À³FþvÚ1Ò
+ÒÖ
+þÿÿ]ÔuØé·ûÿÿJDZ@B$ýÿÿRTýÿÿ
+ýÿÿýÿÿé¿ýÿÿ
+€ýÿÿ
+À
+?ýÿÿÈýÿÿ¶BD$¶BD$
+¶B
+$D$ž]D$è
+$èýÿÿA
+Àÿ
+ ýÿÿ
+ýÿÿ
+ýÿÿ ýÿÿ9°ýÿÿxýÿÿ
+ýÿÿ$èÇ$€ýÿÿT$è1À
+ÀÆ
+žýÿÿMŒýÿÿ
+žýÿÿÄýÿÿÀýÿÿAQEÔYA
+EÌAEÈ$è1Àé£ýÿÿt&;µýÿÿúþÿÿýÿÿv<Â
+ýÿÿ
+Àt	ýÿÿ<±Ÿ
+·
+Ût
+$èýÿÿ³Fþvâéÿÿÿýÿÿ€ýÿÿ¶BD$¶BD$
+¶BL$Ç$D$è
+À
+þÿÿ$èýÿÿCéµþÿÿE$èD$U$è
+šýÿÿéúÿÿýÿÿ
+$èžýÿÿÿéÌþÿÿýÿÿ
+$èÇ$
+€ýÿÿD$èžýÿÿÿéþÿÿÇ$kèÀýÿÿ
+ÀBºýÿÿÿýÿÿ1ÒéýÿÿMAD<éTýÿÿºýÿÿÿéwýÿÿ .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|#%02x%02x%02xNone
+3a\
+u
+Ä
+Í
+:
+\
++
++ 0Ynxš
+Ä
++ó
++kü
+Rh±ûC	S	l	{		¬	Â	Ó	Ø	.fileþÿgscan.c À + >° .text
++%.data.bss.rdatapZ g w _sprintf   š ¶ Æ _strdup Ø _free ë   +_printable_storePixel_storeMaskPixel_MSWGetImagePixels_XpmCreateXpmImageFromImage_GetPixel@12_SelectObject@8_xpmFreeRgbNames_xpmGetRgbName_xpmReadRgbNames_XQueryColors_XDefaultScreen_XDefaultColormap_xpmFreeColorTable_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc
++simx.o/         1345987853  0     0     100666  2040      `
++Lp!.text
+
++ P`.data@0À.bss0ÀUå]éŽ&Uå]éŽ&Uå]éŽ&U1Àå]ÃöŒ'U1Àå]ÃöŒ'Uº
+åì]ø]uüT$$èìÆžD$$èìð]øuüì]ÃŽ&U1Àå]ÃöŒ'UÁ@Ðø	åÂv!AøQ©vA¿1Òøw
+QÉöŒ']ÐÃ¶¿U1Òåì(]ô]}ü}
+ÛuøtX;#tb
+$EðD$
+EìD$EèD$è1Ò
+Àt0uè]ìMðð¶Ð¶Ã_Áà	ÂO¶ÁÁà	ÂðºG]ôÐuø}üì]Ã
+$èøÁøt
+1Òø
+tgÐëŸCèÿÿÿÆÁæŸCèÿÿÿEèŸCè÷þÿÿÆÁæŸCèéþÿÿEìŸCèÚþÿÿÆÁæŸCèÌþÿÿEðºÐé7ÿÿÿŸCè±þÿÿÆÁæŸCè£þÿÿEèŸCèþÿÿÆÁæŸCèþÿÿEìŸC	èwþÿÿÆÁæŸC
++ëŸCècþÿÿEèŸCèWþÿÿEìŸCèKþÿÿëöŒ'Užå]Ã¶UåMVuS1ÛëC¶ÔAÁèQAÁ9ó|ç[^]ÃvU1Àå]ÃöŒ'Uåì(Ç$]ôuøu }ü}$èýÿÿ
+ÀÃt3|$1À¹D$EL$4$D$
+èEìs{C
+Øuø]ô}üì]ÃŽ&UåE
+Àt]é]ÃŽ&Œ'UåSì]
+Ût$è]ì]üÉëŒ]üÉÃn
+
+)v
+d %
+<.fileþÿgsimx.c  .  D0 T@ dP s  
+° ð  p ­ »° ÈÀ Ö0 âP .texty
++.data.bssñ _free   _strlen % _realloc _calloc _malloc 6_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc_XDefaultVisual_XDefaultScreen_XDefaultDepth_XDefaultColormap_hexCharToInt_XParseColor_XAllocColor_XQueryColors_XFreeColors_XCreateImage_XImageFree_XDestroyImage_DeleteObject@4_CreateBitmap@20_xpmGetRGBfromName_GetDeviceCaps@8WrFFrBuf.o/     1345987853  0     0     100666  662       `
++LZ.textpŽ( P`.data@0À.bss0À.rdata$@0@U¹åVSìEL$]
+$èÆ
+öžÿÿÿÿt4
+$èD$ºT$
+$t$
+è4$Ãè1ÀûÀHÄ[^]Ãw
++.G
+Q
+.fileþÿgWrFFrBuf.c .texte.data.bss.rdata_fclose _fwrite _strlen _fopen 
+_XpmWriteFileFromBufferparse.o/        1345987853  0     0     100666  9485      `
++Lb -.text@ŽX| P`.dataô0 @0À.bss0À.rdataP@0@UåWVSì<E 
+ÒÈ1À1É1Ò
+Ðýÿÿ1À
+Ìýÿÿ1ÀØýÿÿÔýÿÿ
+ÜýÿÿžµèýÿÿD$t$E$èø
+JüŸ
+¹œèýÿÿóŠ
+1žèýÿÿD$T$M
+$è
+ÀÃ	1À1ö+èýÿÿ
+èýÿÿëù(
+öB
+$¿_|$è
+ÀÂÇèýÿÿ)ÈÙ)Áù vºù/ùuµ
+Ìýÿÿ
+À
+üŸ¹×óŠ
+UT$M
+$è
+Àti¿œÌýÿÿŽ&u4$èÿ
+ÜýÿÿœÜýÿÿÇþÿÿµØýÿÿÔýÿÿ
+öÀ
+ÛÂ	Ðšu
+ÐýÿÿÌýÿÿ
+ÉÀ
+ÒÂ	ÐštÄ<žþÿÿÿ[^_]ÃE$U(ÇÇ1ÀÄ<[^_]ÃU
+$T$è
+ÀtŸML$u4$è
+ÀtšE4$D$è
+ÀtU4$T$è
+ÀtžèýÿÿD$L$u4$è
+ÀÃt1Àû
+äýÿÿäýÿÿE(
+ÒM
+1ÛL$u4$è
+À
+U$1Àé6ÿÿÿ
+Ôýÿÿ
+À
+ÿÿÿüŸ$¹×óŠ
+ïþÿÿUT$M
+$è
+ÀÕþÿÿž
+ÔýÿÿéoþÿÿØýÿÿ
+É
+·þÿÿüŸ,¹×óŠ
+¢þÿÿu
+t$E$è
+Àþÿÿž
+Øýÿÿé"þÿÿ
+Ðýÿÿ
+À
+jþÿÿüŸ3¹×óŠ
+Uþÿÿut$E$è
+À;þÿÿž
+ÐýÿÿéÕýÿÿM
+µèýÿÿ\$1ÿ4$L$è
+À
+žM$µèýÿÿ9¿t$1ö|$E$èµàýÿÿøtcàýÿÿ1ÀU(
++éêýÿÿüž<¹ÆœèýÿÿóŠ
+^þÿÿž
+äýÿÿéNþÿÿE 4$D$è
+ÀfþÿÿU$»é\þÿÿüŸ<¹œèýÿÿóŠu»àýÿÿéxÿÿÿE D$U$è
+À.ÿÿÿ¿é$ÿÿÿ¶U¹åWVSì<L$E
+$è
+ÐûÿÿÐûÿÿžýÿÿÿ
+ÒTU 
+À
+ð1ÀÐûÿÿ
+àûÿÿE
+9
+àûÿÿÔûÿÿUBÌûÿÿM
+$è
+Ìûÿÿ$èÔûÿÿ
+Àú1öÃ;us6Ž&M
+ÀÂøÀ	ÐšÎQFBA¶C;urÑÆ}À1Ò}
+Â
+Â
+Æ
+èûÿÿ1À
+Üûÿÿ1À
+ØûÿÿžD$
+èýÿÿD$U$è
+ÀÆ>Ž&œØûÿÿ
+ÿu:1Û¿äûÿÿöŒ'
+$è9ðNÿ
+äûÿÿÇœäûÿÿvÜØûÿÿ
+ÉÀ1ÒœäûÿÿÂ
+Â]Üûÿÿ
+Òtoœèûÿÿùt&Œ'Áÿþþþ÷Ð!Ââté÷ÂuÁêÁÒÙ)ùA$è
+ÀÃtÜûÿÿ
+Ôûÿÿ
+|$
+$èÆ
+èûÿÿäûÿÿžBÜûÿÿéE1öÆ
+"Æ
+$èUÆ
+"E
+µàûÿÿÐûÿÿ9
+àûÿÿÔûÿÿÒEÐûÿÿ1ÀÄ<[^_]ÃEPBH
+ÀB¶@ÈFCéþÿÿt$èýÿÿT$
+$è
+À
+þÿÿØûÿÿ
+ÉÀ1ÒœäûÿÿÂ
+Â
+Šþÿÿv
+Üûÿÿ
+ÀB
+Øûÿÿœèûÿÿ
+Àu<$èfÇ8 1Àèýÿÿ.èýÿÿL$<$è1À
+ØûÿÿžD$
+èýÿÿD$U$è
+ÀÆ
+ÉýÿÿœÜûÿÿ
+ÿ'œèûÿÿùvÁÿþþþ÷Ð!Ââté÷ÂuÁêÁÒÙ)ùA$èÜûÿÿ
+ÀÔûÿÿ|$$èÿ
+àûÿÿM
+
+Ôûÿÿ9àûÿÿqüÿÿéuþÿÿàûÿÿT$ÔûÿÿD$E$è
+ÀÃÄüÿÿM
+L$
+Ðûÿÿ$èØé;þÿÿUœèûÿÿBÌûÿÿÌûÿÿ
+$èÔûÿÿ
+À1öÃ;us6Ž&M
+ÀÂøÀ	ÐšVQFBA¶C;urÑÆ}À1Ò}
+Â
+Ât+àûÿÿT$ÔûÿÿD$E$è
+ÀÃ
+5ÿÿÿU$èÆ
+èûÿÿë2œèûÿÿt<$èfÇ8 1Ûèýÿÿ.èýÿÿL$<$è¹
+èýÿÿL$D$U$è
+ÀÆuªùvÁÿþþþ÷Ð!Ââté÷ÂuÁêÁÒÙ)ùA$è
+ÀÃÄ|$$èE
+ÔûÿÿH;
+àûÿÿYÆ
+èûÿÿwYÿ
+àûÿÿU
+
+Ôûÿÿ9àûÿÿmþÿÿéüÿÿ¶EPBH
+ÀBx¶@ÈFCéþÿÿ$èÁÈëéE$èë$èÁÈégüÿÿE
+D$Ðûÿÿ$èÄ<žþÿÿÿ[^_]ÃU
+T$Ðûÿÿ
+$èÄ<žýÿÿÿ[^_]ÃE
+D$Ðûÿÿ$ëÙM
+L$
+Ðûÿÿ$ë¢fUåWVSì<EÇEà$èÇ$
+èEèUðMìT$L$E$è
+ÀÃ
+vüUì¹Ÿ<×UÔóŠÂÀÓ(ÃŸÛ
+Ûtx}Ô¹	ŸCóŠÂÀ(ÂŸÊ
+ÉMØtuMÔ
+$èE$èUðMìT$L$E$è
+ÀÃtEè$èØÄ<[^_]ÃUè$èëéü}ÔŸC¹	óŠÀÂ(ÂŸÂEØ
+ÛÀ1Ò}ØÂ
+ÂâÇEÈEÈÀ
+D$Uè$èEä
+ÀEèUÈuìÐÆóEäëf¡·Pà
+Àt#CŸ¡8tà$žD$è
+ÀuÝEð)ó)Øè$èMä
+ÀMEð)ØèD$
+D$$èEì$èE$èUðMìT$L$E$è
+ÀÃ
+áÇ$èÇEÜUäÇEÌB¶üUì¹Ÿ<×UÐóŠÂÀÓ(ÃŸÛ
+Ûá}Ð¹	ŸCóŠÂÀ(ÂŸÊ
+ÉMØŒMÌL$UäB$è
+ÀÂåEÌMäAMÜEìEAMÜ$èUðMìT$L$E$è
+ÀÃMÿÿÿUÜMäQEà@D$Eè$èéÓýÿÿEì$èMè
+$èÇEèEUàMèE
+Ä<1À[^_]Ã}Ü
+ÿtrÿEàEÜUäEÈ
+
+ÛBÀ1Ò}ØÂ
+Â
+Áýÿÿuà
+öt]Ø
+Ûu«Eì$èëEì$èEàUÜMä@QD$Eè$èžýÿÿÿé%ýÿÿUäB$èMäÇAéqÿÿÿEì$èUàT$Mè
+$ëºMäÇAÇAéëþÿÿEì$èEäÇ@Ç@Eà@D$Uè$éuÿÿÿU1ÀåW1É1ÒVSì¬}
+°÷ÿÿ1À
+š÷ÿÿ1À
+Ž÷ÿÿ1À
+¬÷ÿÿ1À
+€÷ÿÿ1À
+ÿÐ÷ÿÿÔ÷ÿÿ
+ ÷ÿÿt	Eö@uU$è
+Àt%Ä¬[^_]ÃUŸµ ÷ÿÿ$è
+ÀuÛ
+Ô÷ÿÿMD$ 
+Ð÷ÿÿD$
+
+Ì÷ÿÿD$
+È÷ÿÿD$
+Ä÷ÿÿD$
+À÷ÿÿD$
+
+Œ÷ÿÿD$
+ž÷ÿÿD$
+$èïÿÿ
+À
+xÿÿÿ ÷ÿÿ
+Û
+Ä÷ÿÿùÔÀ÷ÿÿú¬T$UEØD$
+°÷ÿÿD$
+L$$èÍóÿÿ
+ÀÃ
+ ÷ÿÿ
+É
+×ž÷ÿÿŸýÿÿÿ
+À÷ÿÿŒ÷ÿÿœÄ÷ÿÿ÷ÿÿ°÷ÿÿ
+÷ÿÿ
+÷ÿÿ÷ÿÿ÷ÿÿ¯ÁÁà$è
+÷ÿÿ
+À
+÷ÿÿÿûÿ1ÒÿÀ/Ø÷ÿÿ1Òœ÷ÿÿÂ
+Âü1À÷ÿÿ
+÷ÿÿ9÷ÿÿøM
+$è1À
+÷ÿÿ
+÷ÿÿ9
+÷ÿÿt&ž1öØ÷ÿÿ9þs?Ž&Œ'U
+ÀÂøÀ	ÐšMFQBA¶C9þrÏØ÷ÿÿMØT$
+$è
+À ÿ
+÷ÿÿ÷ÿÿ@÷ÿÿÂ9÷ÿÿ÷ÿÿéeÿÿÿUØ$è
+À
+ýÿÿÄ÷ÿÿÀ÷ÿÿé0þÿÿ1À
+÷ÿÿ
+÷ÿÿ9
+÷ÿÿüU$è1À÷ÿÿ
+÷ÿÿ9÷ÿÿŽ&¡1öØ÷ÿÿ9þs?Ž&Œ'U
+ÀÂøÀ	Ðš®MFQBA¶C9þrÏ1ö;µ÷ÿÿs01Ûv÷ÿÿØ÷ÿÿT$
+$è
+Àt
+FÃ;µ÷ÿÿrÕ;µ÷ÿÿíÿ
+÷ÿÿ
+÷ÿÿ÷ÿÿ0À9÷ÿÿ
+÷ÿÿéAÿÿÿEPBH
+ÀBL¶@ÈFCéeþÿÿEPBH
+ÀB¶@ÈFCé=ÿÿÿ÷ÿÿ$èŸþÿÿÿœÄ÷ÿÿóv
+œÀ÷ÿÿ9
+ö
+
+
+ ÷ÿÿ
+À
+	E
+Àt(Eö@tœÔ÷ÿÿ
+ÿ
+.MÇA
+ÇAU
+
+ž÷ÿÿu
+Œ÷ÿÿ
+öB
+Ä÷ÿÿB
+À÷ÿÿB
+
+°÷ÿÿB
+š÷ÿÿBtJ ÷ÿÿ
+Ût
+
+Ž÷ÿÿMA
+¬÷ÿÿA
+€÷ÿÿA
+Ð÷ÿÿ
+Ét
+È÷ÿÿUB
+Ì÷ÿÿ
++B1Àé+ûÿÿ$èÁÈéæþÿÿ$èÁÈé­þÿÿœÄ÷ÿÿvœÀ÷ÿÿv
+MØ
+$è°÷ÿÿ
+Ò
+æ
+š÷ÿÿ
+À
+Ë
+Ž÷ÿÿ
+À
+°
+¬÷ÿÿ
+À
+
+€÷ÿÿ
+ÀuØé£úÿÿ$èØéúÿÿÿ
+÷ÿÿ÷ÿÿ9÷ÿÿéýÿÿÿ
+÷ÿÿ
+÷ÿÿ9
+÷ÿÿéüÿÿ
+÷ÿÿ1ö
+š÷ÿÿé;þÿÿ
+Ž÷ÿÿD$E$èéÏúÿÿ
+¬÷ÿÿD$E$èéûÿÿ$èé^ÿÿÿ$èéCÿÿÿ$èé(ÿÿÿ$
+À÷ÿÿD$èéÿÿÿM
+€÷ÿÿD$
+$èéÝýÿÿUØ$èé·ýÿÿ÷ÿÿ
+$éýÿÿ
+Øýÿÿº1ÿT$1ö|$$è;÷ÿÿs#÷ÿÿÁ¶FÆ;
+÷ÿÿfUØýÿÿrã1ö÷ÿÿµ÷ÿÿ9÷ÿÿßþÿÿE1Û$è÷ÿÿ÷ÿÿ9÷ÿÿshM
+ÀÂøÀ	ÐštiAŸ@ABÿ=þËüÿÿ·UØýÿÿf
+Àºüÿÿÿ
+÷ÿÿ·À÷ÿÿHÁ
+÷ÿÿ÷ÿÿ9
+÷ÿÿrÿ
+÷ÿÿ÷ÿÿ9÷ÿÿéZÿÿÿEPBH
+ÀBG¶@Êë1Ò
+Øùÿÿ¹L$1öT$$è;÷ÿÿsz÷ÿÿëÃ¶PFÆ;
+÷ÿÿfQsXŸ8œØùÿÿ
+ÉuÖÇ$žD$èœØùÿÿ
+ÀÁuŽ1Ûë
+CûÿØùÿÿ
+Àtè$èëÞ1Û÷ÿÿ
+÷ÿÿ9
+÷ÿÿVU$è1É÷ÿÿ÷ÿÿ9÷ÿÿ³U
+ÀÂøÀ	Ðš€MAŸ@ACÿ=þU
+ÀÂøÀ	ÐšMAŸ@ABÿ=þØùÿÿ
+Àó·Pf
+Àæÿ
+÷ÿÿ·À÷ÿÿHÂ÷ÿÿ÷ÿÿ9÷ÿÿMÿÿÿÿ
+÷ÿÿé
+ÿÿÿEPBH
+ÀBÐ¶@ËéEÿÿÿEPBH
+ÀB¶@ÊéVÿÿÿÀUD$E$À
+D$èçñÿÿ
+ÀÃœúÿÿéûÿÿ1Ûët&CûÿøûÿÿØùÿÿ
+Àtè$èëÞ$èÁÊé4ýÿÿ1Ûë
+CûÿüùÿÿØùÿÿ
+Àtè$èëÞ$èÁÊé¹þÿÿ$èÁËésþÿÿ÷ÿÿŸýÿÿÿ
+$èéÀùÿÿ1Ûë
+CûÿüÿÿØùÿÿ
+Àtè$èëÞ	smg4gc#define_chars_per_pixel_height_width_ncolorsXPMEXTXPMENDEXT_)n
+)á&$
+E*g%ð***,*N)*Ž
+Õ*
+"*N
+o*¢'Ï)ò
+&*C
+t*¬$%
+#»)Ý	ö #šá%b(² Ó
+ù)S#vž!×"ü#	!	%²	 Ó	
+ñ	)3
++#I
++ž
++,É
++%Ó
++,ñ
++"
+"g
+%s
+#
+ª
+
+Ï
+
+î
+
+ù
+%
+#
+
+8
+
+C
+
+
+±
+Ç
+Ý
++ó
+#
+
+(
+
+3
+%L
+b
+#
+
+³
+
+à
+
+%%K[
+f
+Í
+Ú
+ö
+(
+X
+ã&#%R%'Ê
+Ä,Õ,ûL
+©ÃÐ
+Ý
+ê
+"+]
+¯%
+Ñ$
+)%
+Š,Ó
+Ý,î,
++
+3
+
+
+
+
+
+
+.fileþÿgparse.c  $P
+ 8 .text9|.data.bss.rdataMFTcw   Š _strncpy ¶ É ß _strcmp í _free _memset _strcat _strcpy _strlen ú 	 
+ 1 F _strchr U _strncmp _ l w __filbuf _xpmParseValues_xpmParseColors_xpmParseExtensions_xpmParseData_xpmColorKeys__imp___pctype__imp____mb_cur_max_xpmHashTableFree_xpmHashTableInit_xpmGetCmt_xpmParseHeader_XpmFreeExtensions_boundCheckingRealloc_xpmGetString_xpmHashSlot_xpmHashIntern_xpmFreeColorTable_boundCheckingMalloc_boundCheckingCalloc_xpmNextString_xpmatoui_xpmNextWord_xpmNextUI__isctype
++WrFFrDat.o/     1345987853  0     0     100666  672       `
++L4.text
+ P`.data@0À.bss0ÀUåìhuøuÈ}ü}š]ôÇEš|$t$E
+$è
+ÀÃtØuø]ô}üì]Ã|$t$E$è4$Ãè<$èØuø]ô}üì]Ã+
+S
+]
+e
++.fileþÿgWrFFrDat.c .textx.data.bss * ; U p_XpmWriteFileFromData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmWriteFileFromXpmImage_XpmCreateXpmImageFromDataWrFFrI.o/       1345987853  0     0     100666  3841      `
++L
+!.text0Ž	? P`.data@0À.bss0À.rdatažä@0@UåWVSì¬]
+ÛWE$èøÃÚû~
+üUž¹Æ|ýóŠ§UžD$$è
+Œýÿÿ
+Àºÿÿÿÿ
+t&Œ'
+ÒÐ
+rE»
+À®Mž/D$
+$è
+ÀÃ|C
+$¿.|$è
+Àt.\$žûÿÿ
+$èØëÆ_$Ÿ.t$è
+Àuè
+$¹-L$è
+Àt7µžûÿÿ9Þt\$ó4$èØëvÆ_$º-T$è
+Àuè1ÀµŒýÿÿ
+šùÿÿEµ¬ùÿÿ
+ÀtEö@t
+ž
+šùÿÿ}1À
+€ùÿÿ
+ÿtUöBtr
+öt
+¹€ùÿÿ\$¬ùÿÿºT$
+$è
+šùÿÿ
+ÀtuF
+À
+hU
+¬ùÿÿBD$B
+D$BD$
+
+$D$ž6D$èE
+Àt
+uö
+î
+€ùÿÿ
+À
+yÇ$C¬ùÿÿ»\$L$
+¹L$èšùÿÿ
+ÒtuF
+À
+U
+1À
+ùÿÿJ
+r9ùÿÿ ùÿÿ«v^¿D$žGD$
+¬ùÿÿ$èt&Œ'
+Àt&D$
+œüÿÿÿ¬ùÿÿD$žKD$$èGÃÿvËÇ$C¬ùÿÿžD$žÆL$
+D$èÿ
+ùÿÿ
+ ùÿÿ9
+ùÿÿXÿÿÿœšùÿÿ
+ÿtUB
+
+À
+
+E
+U
+u
+@J6
+ùÿÿBùÿÿùÿÿµùÿÿHr
+ùÿÿ
+ùÿÿ¯Ã»ýÿÿÿÀ$è
+ùÿÿ
+À5Æ"1Éùÿÿùÿÿ@9ùÿÿ
+ùÿÿë
+1ÿùÿÿ;œùÿÿs8ùÿÿGùÿÿL$Æ@Â
+$D$èùÿÿÓ;œùÿÿrÈÆ"žRÆCùÿÿD$
+¬ùÿÿL$$èÿ
+ùÿÿùÿÿ9ùÿÿxÿÿÿ1ÿùÿÿ;œùÿÿs@Ž&ùÿÿGùÿÿL$Æ@Â
+$D$è
+ùÿÿÃ;œùÿÿrÈÆ"ÆC¬ùÿÿµùÿÿL$4$è4$è
+€ùÿÿ
+ÀËEU@
+R
+|ùÿÿ1À
+tùÿÿ9tùÿÿxùÿÿs{|ùÿÿµ¬ùÿÿ4$1öD$žWD$è
+|ùÿÿxX9þs+¶FÃ¬ùÿÿD$žeD$$è9þrÛÿ
+tùÿÿxùÿÿ
+|ùÿÿ
+9tùÿÿr
+Ç$lµ¬ùÿÿ»
+\$¹L$t$
+èÇ$z
+¬ùÿÿºT$1ÛD$
+žD$è
+žýÿÿøßøØÄ¬[^_]ÃüU|þº~žÖÁóŠ
+úÿÿE¹L$D$žùÿÿ
+$è
+$žD$è
+Œýÿÿ
+Àºÿÿÿÿúÿÿžë¡À 
+Œýÿÿž
+žýÿÿ1Òéòùÿÿ
+Œýÿÿ$èØéYÿÿÿÇ$¬ùÿÿ¿|$Ÿt$T$
+èéZûÿÿ¡ŒýÿÿÀ 9Âÿÿÿ$èØéÿÿÿEºT$D$é+ÿÿÿFD$
+FD$žšD$
+¬ùÿÿ$èéèúÿÿ]é}ùÿÿD$ž¯D$
+¬ùÿÿ$èéxúÿÿD$¬ùÿÿŸ¯t$
+$èéÔûÿÿD$ž¯D$
+¬ùÿÿ$èéÎúÿÿt&UåìxuøEu}ü}ÈD$E]ôt$D$E|$
+$è
+ÀÃu0
+öt;t$]š
+$è\$|$E
+$èþ÷ÿÿ<$ÃèØuø]ô}üì]Ã1öt$ëÐ.gzwimage_name/* XPM */
++static char * %s[] = {
++"%d %d %d %d",
++"%s	%s %s%s,
++,
++"XPMEXT %s",
++"%s",
++"XPMENDEXT"};
++.Zcompress > "%s" XPMEXTgzip -q > "%s" %d %d/*%s*/
++
+7
+R
+^ 
+ª
+ÆÜô	%@¬
+žü
+-
+N
+±Í
+Ü
+èø
+
+,
+L€ÓÛ-
+6a
+m
+Ž»
+Þ
+)
+?G
+PoŠ
+ÇÑêù
+
++A
+Sg
+s
+Òë
+
+.fileþÿgWrFFrI.c 
+  .text#?.data.bss.rdata·5C_fputs _fwrite __pclose _fclose __popen _sprintf _strlen _free _strncpy O _fprintf _strcpy _strchr _strrchr d u  _fopen _XpmWriteFileFromXpmImage_XpmWriteFileFromImage_xpmColorKeys__imp___iob_boundCheckingMalloc_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage
+diff -Naur vim73.orig/src/xpm/x86/lib/libXpm.lib vim73/src/xpm/x86/lib/libXpm.lib
+--- vim73.orig/src/xpm/x86/lib/libXpm.lib	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xpm/x86/lib/libXpm.lib	2013-06-07 17:07:39.178896794 +0000
+@@ -0,0 +1,332 @@
++!<arch>
++/               1345987754              0       11348     `
++uVVVVVVVVVVVVVVVVVVVVVVtnwwwwwwwwwwwwwwwwww£ŠšŠšŠšŠšŠšŠšŠšŠšŠšŠšŠšŠšŠšŠšºxºxºxºxÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆÎÆ^^^^^k®nÞsTsTsTsTsTsTsTsTsTsTsT}}}}üüüü²²¹¹ÀbÀbÀbììììþ€þ€þ€??_C@_01LLF@w?$AA@??_C@_02BKNP@?4Z?$AA@??_C@_02DILL@?$CFs?$AA@??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_03NNMC@?$CC?0?6?$AA@??_C@_03NOED@?$CC?$CFs?$AA@??_C@_04DBEM@?$CFs?0?6?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0L@JJCH@image_name?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@_XpmWriteFileFromImage_XpmWriteFileFromXpmImage_XpmWriteFileFromData??_C@_01FCOA@?5?$AA@??_C@_01IJJ@c?$AA@??_C@_01KBOJ@s?$AA@??_C@_01KCMF@g?$AA@??_C@_01KDFD@m?$AA@??_C@_02EPGO@g4?$AA@??_C@_06BGFG@XPMEXT?$AA@??_C@_06IKHH@_width?$AA@??_C@_07BLIB@_height?$AA@??_C@_07GIIJ@?$CDdefine?$AA@??_C@_08OLGI@_ncolors?$AA@??_C@_09IGJF@XPMENDEXT?$AA@??_C@_0BB@OCOG@_chars_per_pixel?$AA@_xpmColorKeys_xpmParseColors_xpmParseData_xpmParseExtensions_xpmParseValues_XpmWriteFileFromBuffer_XAllocColor_XCreateImage_XDefaultColormap_XDefaultDepth_XDefaultScreen_XDefaultVisual_XDestroyImage_XFreeColors_XImageFree_XParseColor_XQueryColors_boundCheckingCalloc_boundCheckingMalloc_boundCheckingRealloc??_C@_04COF@None?$AA@??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@_XpmCreateXpmImageFromImage??_C@_03GOGG@Red?$AA@??_C@_03NJCN@Tan?$AA@??_C@_04BAEF@peru?$AA@??_C@_04CFCB@Gray?$AA@??_C@_04CKHC@Cyan?$AA@??_C@_04IKOF@Gold?$AA@??_C@_04KPAE@Blue?$AA@??_C@_04NFMJ@grey?$AA@??_C@_04NPOO@snow?$AA@??_C@_04OEDJ@Plum?$AA@??_C@_04OFAF@Pink?$AA@??_C@_04PGEO@Navy?$AA@??_C@_05CGP@White?$AA@??_C@_05DKMC@Green?$AA@??_C@_05EAN@Gray8?$AA@??_C@_05FAHO@Gray5?$AA@??_C@_05FALF@Gray0?$AA@??_C@_05FBBK@Azure?$AA@??_C@_05FBHM@Khaki?$AA@??_C@_05FFA@Gray7?$AA@??_C@_05FJL@Gray2?$AA@??_C@_05GJBG@Brown?$AA@??_C@_05IFEB@Black?$AA@??_C@_05KJCE@ivory?$AA@??_C@_05KJOE@linen?$AA@??_C@_05KOJK@Gray9?$AA@??_C@_05KPAM@Gray3?$AA@??_C@_05KPMH@Gray6?$AA@??_C@_05OFHD@Coral?$AA@??_C@_05OLFG@Beige?$AA@??_C@_05PKCC@Gray1?$AA@??_C@_05PKOJ@Gray4?$AA@??_C@_05PPMO@Wheat?$AA@??_C@_06BFFO@Gray75?$AA@??_C@_06BFJF@Gray70?$AA@??_C@_06BFLI@Violet?$AA@??_C@_06BKBB@Gray32?$AA@??_C@_06BKNK@Gray37?$AA@??_C@_06BLIH@Gray38?$AA@??_C@_06CFAH@Orchid?$AA@??_C@_06CIEM@Gray96?$AA@??_C@_06CIIH@Gray93?$AA@??_C@_06CJBB@Gray99?$AA@??_C@_06COGK@Gray40?$AA@??_C@_06COKB@Gray45?$AA@??_C@_06DBBO@Bisque?$AA@??_C@_06DDP@Gray60?$AA@??_C@_06DFJB@Sienna?$AA@??_C@_06DGNC@Gray18?$AA@??_C@_06DHEE@Gray12?$AA@??_C@_06DHIP@Gray17?$AA@??_C@_06DIAL@Gray55?$AA@??_C@_06DIMA@Gray50?$AA@??_C@_06DOCN@Gray83?$AA@??_C@_06DOOG@Gray86?$AA@??_C@_06DPE@Gray65?$AA@??_C@_06DPLL@Gray89?$AA@??_C@_06EAHA@Gray77?$AA@??_C@_06EALL@Gray72?$AA@??_C@_06EBCN@Gray78?$AA@??_C@_06EPDP@Gray30?$AA@??_C@_06EPPE@Gray35?$AA@??_C@_06FEAG@Maroon?$AA@??_C@_06FGBB@Gray62?$AA@??_C@_06FGNK@Gray67?$AA@??_C@_06FHIH@Gray68?$AA@??_C@_06FJFO@Gray25?$AA@??_C@_06FJJF@Gray20?$AA@??_C@_06GCGK@Gray10?$AA@??_C@_06GCKB@Gray15?$AA@??_C@_06GLAD@Gray81?$AA@??_C@_06GLMI@Gray84?$AA@??_C@_06GMHI@Gray58?$AA@??_C@_06GNCF@Gray57?$AA@??_C@_06GNOO@Gray52?$AA@??_C@_06HKNC@Gray48?$AA@??_C@_06HLEE@Gray42?$AA@??_C@_06HLIP@Gray47?$AA@??_C@_06HNGC@Gray94?$AA@??_C@_06HNKJ@Gray91?$AA@??_C@_06ICBA@Gray92?$AA@??_C@_06ICNL@Gray97?$AA@??_C@_06IDIG@Gray98?$AA@??_C@_06IEDG@Gray44?$AA@??_C@_06IEPN@Gray41?$AA@??_C@_06JCFH@Gray51?$AA@??_C@_06JCJM@Gray54?$AA@??_C@_06JEHB@Gray87?$AA@??_C@_06JELK@Gray82?$AA@??_C@_06JFCM@Gray88?$AA@??_C@_06JMEF@Gray19?$AA@??_C@_06JNBI@Gray16?$AA@??_C@_06JNND@Gray13?$AA@??_C@_06KGCM@Gray23?$AA@??_C@_06KGOH@Gray26?$AA@??_C@_06KHLK@Gray29?$AA@??_C@_06KJGD@Gray64?$AA@??_C@_06KJKI@Gray61?$AA@??_C@_06LAEN@Gray36?$AA@??_C@_06LAIG@Gray33?$AA@??_C@_06LBBA@Gray39?$AA@??_C@_06LPAC@Gray71?$AA@??_C@_06LPMJ@Gray74?$AA@??_C@_06MBFP@Gray85?$AA@??_C@_06MBJE@Gray80?$AA@??_C@_06MGOP@Gray59?$AA@??_C@_06MHA@Gray27?$AA@??_C@_06MHHJ@Gray53?$AA@??_C@_06MHLC@Gray56?$AA@??_C@_06MIDG@Gray14?$AA@??_C@_06MIPN@Gray11?$AA@??_C@_06MJKB@purple?$AA@??_C@_06MLL@Gray22?$AA@??_C@_06NAEF@Gray49?$AA@??_C@_06NBBI@Gray46?$AA@??_C@_06NBND@Gray43?$AA@??_C@_06NCN@Gray28?$AA@??_C@_06NHDO@Gray90?$AA@??_C@_06NHPF@Gray95?$AA@??_C@_06NJCI@Yellow?$AA@??_C@_06NKLF@Salmon?$AA@??_C@_06OFGD@Gray34?$AA@??_C@_06OFKI@Gray31?$AA@??_C@_06OKCM@Gray73?$AA@??_C@_06OKOH@Gray76?$AA@??_C@_06OLLK@Gray79?$AA@??_C@_06OLOI@Orange?$AA@??_C@_06PDAC@Gray21?$AA@??_C@_06PDMJ@Gray24?$AA@??_C@_06PEAM@tomato?$AA@??_C@_06PMEN@Gray66?$AA@??_C@_06PMIG@Gray63?$AA@??_C@_06PNBA@Gray69?$AA@??_C@_07CCJC@HotPink?$AA@??_C@_07CGCE@Thistle?$AA@??_C@_07HPBN@OldLace?$AA@??_C@_07IGIM@Magenta?$AA@??_C@_07LNPC@Gray100?$AA@??_C@_07PBMA@SkyBlue?$AA@??_C@_07PCNH@DimGray?$AA@??_C@_08CJCK@moccasin?$AA@??_C@_08DNID@DeepPink?$AA@??_C@_08FJBA@NavyBlue?$AA@??_C@_08FMGG@lavender?$AA@??_C@_08HADN@cornsilk?$AA@??_C@_08IBDC@seashell?$AA@??_C@_08LHFL@honeydew?$AA@??_C@_08MBEP@SeaGreen?$AA@??_C@_09BDMI@OliveDrab?$AA@??_C@_09BKLN@PeachPuff?$AA@??_C@_09BOEB@SlateGray?$AA@??_C@_09CLEE@LightPink?$AA@??_C@_09CLIF@RoyalBlue?$AA@??_C@_09DMBK@LimeGreen?$AA@??_C@_09FGMF@Turquoise?$AA@??_C@_09FMMG@IndianRed?$AA@??_C@_09GABH@CadetBlue?$AA@??_C@_09GBEF@LightBlue?$AA@??_C@_09GHMI@MintCream?$AA@??_C@_09GMBI@PaleGreen?$AA@??_C@_09HFBF@Firebrick?$AA@??_C@_09HKOG@chocolate?$AA@??_C@_09IAEP@DarkKhaki?$AA@??_C@_09IDAC@SteelBlue?$AA@??_C@_09IPPN@gainsboro?$AA@??_C@_09JEGE@SlateBlue?$AA@??_C@_09KEPN@MistyRose?$AA@??_C@_09KMIH@VioletRed?$AA@??_C@_09KOFD@LawnGreen?$AA@??_C@_09LPFD@RosyBrown?$AA@??_C@_09LPGI@burlywood?$AA@??_C@_09MLEL@OrangeRed?$AA@??_C@_09MLNE@Goldenrod?$AA@??_C@_09OEDD@LightCyan?$AA@??_C@_09OLGA@LightGray?$AA@??_C@_09OLPB@DarkGreen?$AA@??_C@_09PCLJ@AliceBlue?$AA@??_C@_0BA@DGOK@MediumTurquoise?$AA@??_C@_0BA@KLPL@MediumGoldenrod?$AA@??_C@_0BA@MMKI@MediumVioletRed?$AA@??_C@_0BA@PEEL@MediumSlateBlue?$AA@??_C@_0BB@LEGJ@MediumAquamarine?$AA@??_C@_0BC@DACG@MediumForestGreen?$AA@??_C@_0BC@HJAL@MediumSpringGreen?$AA@??_C@_0BF@JONP@LightGoldenrodYellow?$AA@??_C@_0L@BOIA@GhostWhite?$AA@??_C@_0L@CAIG@chartreuse?$AA@??_C@_0L@CGBN@DodgerBlue?$AA@??_C@_0L@DGFJ@WhiteSmoke?$AA@??_C@_0L@DNNE@BlueViolet?$AA@??_C@_0L@EOAJ@Aquamarine?$AA@??_C@_0L@FBDJ@DarkOrange?$AA@??_C@_0L@GAGA@SandyBrown?$AA@??_C@_0L@GAGE@DarkSalmon?$AA@??_C@_0L@HKLN@LightCoral?$AA@??_C@_0L@JPNG@DarkOrchid?$AA@??_C@_0L@KPGJ@DarkViolet?$AA@??_C@_0L@MMBE@PowderBlue?$AA@??_C@_0L@OLEL@MediumBlue?$AA@??_C@_0L@PNNL@PapayaWhip?$AA@??_C@_0M@BPCH@Transparent?$AA@??_C@_0M@BPNM@ForestGreen?$AA@??_C@_0M@DMAP@YellowGreen?$AA@??_C@_0M@FGPB@SpringGreen?$AA@??_C@_0M@HDMO@FloralWhite?$AA@??_C@_0M@IAHK@SaddleBrown?$AA@??_C@_0M@IBCK@LightSalmon?$AA@??_C@_0M@ICLH@LightYellow?$AA@??_C@_0M@JGIF@GreenYellow?$AA@??_C@_0M@NMOH@DeepSkyBlue?$AA@??_C@_0M@POIL@NavajoWhite?$AA@??_C@_0N@BHGF@MediumOrchid?$AA@??_C@_0N@BIEM@MidnightBlue?$AA@??_C@_0N@EPMH@MediumPurple?$AA@??_C@_0N@FJKA@LemonChiffon?$AA@??_C@_0N@HACN@DarkSeaGreen?$AA@??_C@_0N@NNFJ@AntiqueWhite?$AA@??_C@_0N@NNJL@LightSkyBlue?$AA@??_C@_0O@BGGF@DarkGoldenrod?$AA@??_C@_0O@EJNF@DarkSlateBlue?$AA@??_C@_0O@FCA@PaleTurquoise?$AA@??_C@_0O@HGGD@LightSeaGreen?$AA@??_C@_0O@ILHE@DarkTurquoise?$AA@??_C@_0O@JIDB@PaleGoldenrod?$AA@??_C@_0O@MDPA@DarkSlateGray?$AA@??_C@_0O@PPGC@PaleVioletRed?$AA@??_C@_0O@PPHN@LavenderBlush?$AA@??_C@_0P@BDLF@LightSteelBlue?$AA@??_C@_0P@END@LightSlateBlue?$AA@??_C@_0P@FDEE@DarkOliveGreen?$AA@??_C@_0P@FDIN@CornflowerBlue?$AA@??_C@_0P@FLGD@LightGoldenrod?$AA@??_C@_0P@HJDN@BlanchedAlmond?$AA@??_C@_0P@IOPG@LightSlateGray?$AA@??_C@_0P@OOCE@MediumSeaGreen?$AA@_xpmFreeRgbNames_xpmGetRGBfromName_xpmGetRgbName_xpmReadRgbNames??_C@_01LHO@r?$AA@??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@_XpmReadFileToImage_XpmReadFileToXpmImage_XpmReadFileToData_XpmReadFileToBuffer??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@??_C@_0L@POMH@XpmSuccess?$AA@??_C@_0M@KHPB@XpmNoMemory?$AA@??_C@_0O@FNPH@XpmOpenFailed?$AA@??_C@_0O@PNEN@XpmColorError?$AA@??_C@_0P@MINL@XpmColorFailed?$AA@??_C@_0P@PLPG@XpmFileInvalid?$AA@_XpmFree_XpmGetErrorString_XpmLibraryVersion_xpmatoui_XpmFreeXpmInfo_xpmInitXpmInfo_xpmSetInfo_xpmSetInfoMask_XpmFreeXpmImage_xpmInitXpmImage_xpmHashIntern_xpmHashSlot_xpmHashTableFree_xpmHashTableInit??_C@_00A@?$AA@??_C@_01BJG@?6?$AA@??_C@_01FAJB@?$DL?$AA@??_C@_01FKHJ@C?$AA@??_C@_01PIHH@?$CB?$AA@??_C@_02BOOO@?$CK?1?$AA@??_C@_02DLDK@?0?6?$AA@??_C@_02FCCF@?1?$CK?$AA@??_C@_03FMK@XPM?$AA@??_C@_03PHEM@?$CJ?$CJ?6?$AA@??_C@_04DHGG@?5?8?$CI?6?$AA@??_C@_04HCLL@XPM2?$AA@??_C@_04JOHA@Lisp?$AA@??_C@_06EHEH@?$CIsetq?5?$AA@??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_07NAB@_format?$AA@??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0O@JACJ@static?5char?5?$CK?$AA@_xpmDataTypes_xpmGetCmt_xpmGetString_xpmNextString_xpmNextUI_xpmNextWord_xpmParseHeader_XpmCreateImageFromData_XpmCreateXpmImageFromData_XpmCreateImageFromBuffer_XpmCreateXpmImageFromBuffer_XpmCreateImageFromXpmImage_xpmParseDataAndCreate_xpmstrcasecmp??_C@_09CHAC@XPMEXT?5?$CFs?$AA@??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@_XpmCreateDataFromImage_XpmCreateDataFromXpmImage??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@_XpmCreateBufferFromImage_XpmCreateBufferFromXpmImage_XpmAttributesSize_XpmFreeAttributes_XpmFreeExtensions_xpmFreeColorTable_xpmInitAttributes_xpmSetAttributes/               1345987754              0       10690     `
++Vntw£šŠxºÆÎ^®kÞnTs}ü²¹bÀì€þu
+
+
+
+
+
+
+
+
+
+
+
+
++	
+
+
+
+
+??_C@_00A@?$AA@??_C@_01BJG@?6?$AA@??_C@_01FAJB@?$DL?$AA@??_C@_01FCOA@?5?$AA@??_C@_01FKHJ@C?$AA@??_C@_01IJJ@c?$AA@??_C@_01KBOJ@s?$AA@??_C@_01KCMF@g?$AA@??_C@_01KDFD@m?$AA@??_C@_01LHO@r?$AA@??_C@_01LLF@w?$AA@??_C@_01PIHH@?$CB?$AA@??_C@_02BKNP@?4Z?$AA@??_C@_02BOOO@?$CK?1?$AA@??_C@_02DILL@?$CFs?$AA@??_C@_02DLDK@?0?6?$AA@??_C@_02EPGO@g4?$AA@??_C@_02FCCF@?1?$CK?$AA@??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_03FMK@XPM?$AA@??_C@_03GOGG@Red?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_03NJCN@Tan?$AA@??_C@_03NNMC@?$CC?0?6?$AA@??_C@_03NOED@?$CC?$CFs?$AA@??_C@_03PHEM@?$CJ?$CJ?6?$AA@??_C@_04BAEF@peru?$AA@??_C@_04CFCB@Gray?$AA@??_C@_04CKHC@Cyan?$AA@??_C@_04COF@None?$AA@??_C@_04DBEM@?$CFs?0?6?$AA@??_C@_04DHGG@?5?8?$CI?6?$AA@??_C@_04HCLL@XPM2?$AA@??_C@_04IKOF@Gold?$AA@??_C@_04JOHA@Lisp?$AA@??_C@_04KPAE@Blue?$AA@??_C@_04NFMJ@grey?$AA@??_C@_04NPOO@snow?$AA@??_C@_04OEDJ@Plum?$AA@??_C@_04OFAF@Pink?$AA@??_C@_04PGEO@Navy?$AA@??_C@_05CGP@White?$AA@??_C@_05DKMC@Green?$AA@??_C@_05EAN@Gray8?$AA@??_C@_05FAHO@Gray5?$AA@??_C@_05FALF@Gray0?$AA@??_C@_05FBBK@Azure?$AA@??_C@_05FBHM@Khaki?$AA@??_C@_05FFA@Gray7?$AA@??_C@_05FJL@Gray2?$AA@??_C@_05GJBG@Brown?$AA@??_C@_05IFEB@Black?$AA@??_C@_05KJCE@ivory?$AA@??_C@_05KJOE@linen?$AA@??_C@_05KOJK@Gray9?$AA@??_C@_05KPAM@Gray3?$AA@??_C@_05KPMH@Gray6?$AA@??_C@_05OFHD@Coral?$AA@??_C@_05OLFG@Beige?$AA@??_C@_05PKCC@Gray1?$AA@??_C@_05PKOJ@Gray4?$AA@??_C@_05PPMO@Wheat?$AA@??_C@_06BFFO@Gray75?$AA@??_C@_06BFJF@Gray70?$AA@??_C@_06BFLI@Violet?$AA@??_C@_06BGFG@XPMEXT?$AA@??_C@_06BKBB@Gray32?$AA@??_C@_06BKNK@Gray37?$AA@??_C@_06BLIH@Gray38?$AA@??_C@_06CFAH@Orchid?$AA@??_C@_06CIEM@Gray96?$AA@??_C@_06CIIH@Gray93?$AA@??_C@_06CJBB@Gray99?$AA@??_C@_06COGK@Gray40?$AA@??_C@_06COKB@Gray45?$AA@??_C@_06DBBO@Bisque?$AA@??_C@_06DDP@Gray60?$AA@??_C@_06DFJB@Sienna?$AA@??_C@_06DGNC@Gray18?$AA@??_C@_06DHEE@Gray12?$AA@??_C@_06DHIP@Gray17?$AA@??_C@_06DIAL@Gray55?$AA@??_C@_06DIMA@Gray50?$AA@??_C@_06DOCN@Gray83?$AA@??_C@_06DOOG@Gray86?$AA@??_C@_06DPE@Gray65?$AA@??_C@_06DPLL@Gray89?$AA@??_C@_06EAHA@Gray77?$AA@??_C@_06EALL@Gray72?$AA@??_C@_06EBCN@Gray78?$AA@??_C@_06EHEH@?$CIsetq?5?$AA@??_C@_06EPDP@Gray30?$AA@??_C@_06EPPE@Gray35?$AA@??_C@_06FEAG@Maroon?$AA@??_C@_06FGBB@Gray62?$AA@??_C@_06FGNK@Gray67?$AA@??_C@_06FHIH@Gray68?$AA@??_C@_06FJFO@Gray25?$AA@??_C@_06FJJF@Gray20?$AA@??_C@_06GCGK@Gray10?$AA@??_C@_06GCKB@Gray15?$AA@??_C@_06GLAD@Gray81?$AA@??_C@_06GLMI@Gray84?$AA@??_C@_06GMHI@Gray58?$AA@??_C@_06GNCF@Gray57?$AA@??_C@_06GNOO@Gray52?$AA@??_C@_06HKNC@Gray48?$AA@??_C@_06HLEE@Gray42?$AA@??_C@_06HLIP@Gray47?$AA@??_C@_06HNGC@Gray94?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_06HNKJ@Gray91?$AA@??_C@_06ICBA@Gray92?$AA@??_C@_06ICNL@Gray97?$AA@??_C@_06IDIG@Gray98?$AA@??_C@_06IEDG@Gray44?$AA@??_C@_06IEPN@Gray41?$AA@??_C@_06IKHH@_width?$AA@??_C@_06JCFH@Gray51?$AA@??_C@_06JCJM@Gray54?$AA@??_C@_06JEHB@Gray87?$AA@??_C@_06JELK@Gray82?$AA@??_C@_06JFCM@Gray88?$AA@??_C@_06JMEF@Gray19?$AA@??_C@_06JNBI@Gray16?$AA@??_C@_06JNND@Gray13?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@??_C@_06KGCM@Gray23?$AA@??_C@_06KGOH@Gray26?$AA@??_C@_06KHLK@Gray29?$AA@??_C@_06KJGD@Gray64?$AA@??_C@_06KJKI@Gray61?$AA@??_C@_06LAEN@Gray36?$AA@??_C@_06LAIG@Gray33?$AA@??_C@_06LBBA@Gray39?$AA@??_C@_06LPAC@Gray71?$AA@??_C@_06LPMJ@Gray74?$AA@??_C@_06MBFP@Gray85?$AA@??_C@_06MBJE@Gray80?$AA@??_C@_06MGOP@Gray59?$AA@??_C@_06MHA@Gray27?$AA@??_C@_06MHHJ@Gray53?$AA@??_C@_06MHLC@Gray56?$AA@??_C@_06MIDG@Gray14?$AA@??_C@_06MIPN@Gray11?$AA@??_C@_06MJKB@purple?$AA@??_C@_06MLL@Gray22?$AA@??_C@_06NAEF@Gray49?$AA@??_C@_06NBBI@Gray46?$AA@??_C@_06NBND@Gray43?$AA@??_C@_06NCN@Gray28?$AA@??_C@_06NHDO@Gray90?$AA@??_C@_06NHPF@Gray95?$AA@??_C@_06NJCI@Yellow?$AA@??_C@_06NKLF@Salmon?$AA@??_C@_06OFGD@Gray34?$AA@??_C@_06OFKI@Gray31?$AA@??_C@_06OKCM@Gray73?$AA@??_C@_06OKOH@Gray76?$AA@??_C@_06OLLK@Gray79?$AA@??_C@_06OLOI@Orange?$AA@??_C@_06PDAC@Gray21?$AA@??_C@_06PDMJ@Gray24?$AA@??_C@_06PEAM@tomato?$AA@??_C@_06PMEN@Gray66?$AA@??_C@_06PMIG@Gray63?$AA@??_C@_06PNBA@Gray69?$AA@??_C@_07BLIB@_height?$AA@??_C@_07CCJC@HotPink?$AA@??_C@_07CGCE@Thistle?$AA@??_C@_07GIIJ@?$CDdefine?$AA@??_C@_07HPBN@OldLace?$AA@??_C@_07IGIM@Magenta?$AA@??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_07LNPC@Gray100?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_07NAB@_format?$AA@??_C@_07PBMA@SkyBlue?$AA@??_C@_07PCNH@DimGray?$AA@??_C@_08CJCK@moccasin?$AA@??_C@_08DNID@DeepPink?$AA@??_C@_08FJBA@NavyBlue?$AA@??_C@_08FMGG@lavender?$AA@??_C@_08HADN@cornsilk?$AA@??_C@_08IBDC@seashell?$AA@??_C@_08LHFL@honeydew?$AA@??_C@_08MBEP@SeaGreen?$AA@??_C@_08OLGI@_ncolors?$AA@??_C@_09BDMI@OliveDrab?$AA@??_C@_09BKLN@PeachPuff?$AA@??_C@_09BOEB@SlateGray?$AA@??_C@_09CHAC@XPMEXT?5?$CFs?$AA@??_C@_09CLEE@LightPink?$AA@??_C@_09CLIF@RoyalBlue?$AA@??_C@_09DMBK@LimeGreen?$AA@??_C@_09FGMF@Turquoise?$AA@??_C@_09FMMG@IndianRed?$AA@??_C@_09GABH@CadetBlue?$AA@??_C@_09GBEF@LightBlue?$AA@??_C@_09GHMI@MintCream?$AA@??_C@_09GMBI@PaleGreen?$AA@??_C@_09HFBF@Firebrick?$AA@??_C@_09HKOG@chocolate?$AA@??_C@_09IAEP@DarkKhaki?$AA@??_C@_09IDAC@SteelBlue?$AA@??_C@_09IGJF@XPMENDEXT?$AA@??_C@_09IPPN@gainsboro?$AA@??_C@_09JEGE@SlateBlue?$AA@??_C@_09KEPN@MistyRose?$AA@??_C@_09KMIH@VioletRed?$AA@??_C@_09KOFD@LawnGreen?$AA@??_C@_09LPFD@RosyBrown?$AA@??_C@_09LPGI@burlywood?$AA@??_C@_09MLEL@OrangeRed?$AA@??_C@_09MLNE@Goldenrod?$AA@??_C@_09OEDD@LightCyan?$AA@??_C@_09OLGA@LightGray?$AA@??_C@_09OLPB@DarkGreen?$AA@??_C@_09PCLJ@AliceBlue?$AA@??_C@_0BA@DGOK@MediumTurquoise?$AA@??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_0BA@KLPL@MediumGoldenrod?$AA@??_C@_0BA@MMKI@MediumVioletRed?$AA@??_C@_0BA@PEEL@MediumSlateBlue?$AA@??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@??_C@_0BB@LEGJ@MediumAquamarine?$AA@??_C@_0BB@OCOG@_chars_per_pixel?$AA@??_C@_0BC@DACG@MediumForestGreen?$AA@??_C@_0BC@HJAL@MediumSpringGreen?$AA@??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@??_C@_0BF@JONP@LightGoldenrodYellow?$AA@??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@??_C@_0L@BOIA@GhostWhite?$AA@??_C@_0L@CAIG@chartreuse?$AA@??_C@_0L@CGBN@DodgerBlue?$AA@??_C@_0L@DGFJ@WhiteSmoke?$AA@??_C@_0L@DNNE@BlueViolet?$AA@??_C@_0L@EOAJ@Aquamarine?$AA@??_C@_0L@FBDJ@DarkOrange?$AA@??_C@_0L@GAGA@SandyBrown?$AA@??_C@_0L@GAGE@DarkSalmon?$AA@??_C@_0L@HKLN@LightCoral?$AA@??_C@_0L@JJCH@image_name?$AA@??_C@_0L@JPNG@DarkOrchid?$AA@??_C@_0L@KPGJ@DarkViolet?$AA@??_C@_0L@MMBE@PowderBlue?$AA@??_C@_0L@OLEL@MediumBlue?$AA@??_C@_0L@PNNL@PapayaWhip?$AA@??_C@_0L@POMH@XpmSuccess?$AA@??_C@_0M@BPCH@Transparent?$AA@??_C@_0M@BPNM@ForestGreen?$AA@??_C@_0M@DMAP@YellowGreen?$AA@??_C@_0M@FGPB@SpringGreen?$AA@??_C@_0M@HDMO@FloralWhite?$AA@??_C@_0M@IAHK@SaddleBrown?$AA@??_C@_0M@IBCK@LightSalmon?$AA@??_C@_0M@ICLH@LightYellow?$AA@??_C@_0M@JGIF@GreenYellow?$AA@??_C@_0M@KHPB@XpmNoMemory?$AA@??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0M@NMOH@DeepSkyBlue?$AA@??_C@_0M@POIL@NavajoWhite?$AA@??_C@_0N@BHGF@MediumOrchid?$AA@??_C@_0N@BIEM@MidnightBlue?$AA@??_C@_0N@EPMH@MediumPurple?$AA@??_C@_0N@FJKA@LemonChiffon?$AA@??_C@_0N@HACN@DarkSeaGreen?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_0N@NNFJ@AntiqueWhite?$AA@??_C@_0N@NNJL@LightSkyBlue?$AA@??_C@_0O@BGGF@DarkGoldenrod?$AA@??_C@_0O@EJNF@DarkSlateBlue?$AA@??_C@_0O@FCA@PaleTurquoise?$AA@??_C@_0O@FNPH@XpmOpenFailed?$AA@??_C@_0O@HGGD@LightSeaGreen?$AA@??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_0O@ILHE@DarkTurquoise?$AA@??_C@_0O@JACJ@static?5char?5?$CK?$AA@??_C@_0O@JIDB@PaleGoldenrod?$AA@??_C@_0O@MDPA@DarkSlateGray?$AA@??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@??_C@_0O@PNEN@XpmColorError?$AA@??_C@_0O@PPGC@PaleVioletRed?$AA@??_C@_0O@PPHN@LavenderBlush?$AA@??_C@_0P@BDLF@LightSteelBlue?$AA@??_C@_0P@END@LightSlateBlue?$AA@??_C@_0P@FDEE@DarkOliveGreen?$AA@??_C@_0P@FDIN@CornflowerBlue?$AA@??_C@_0P@FLGD@LightGoldenrod?$AA@??_C@_0P@HJDN@BlanchedAlmond?$AA@??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_0P@IOPG@LightSlateGray?$AA@??_C@_0P@MINL@XpmColorFailed?$AA@??_C@_0P@OOCE@MediumSeaGreen?$AA@??_C@_0P@PLPG@XpmFileInvalid?$AA@_XAllocColor_XCreateImage_XDefaultColormap_XDefaultDepth_XDefaultScreen_XDefaultVisual_XDestroyImage_XFreeColors_XImageFree_XParseColor_XQueryColors_XpmAttributesSize_XpmCreateBufferFromImage_XpmCreateBufferFromXpmImage_XpmCreateDataFromImage_XpmCreateDataFromXpmImage_XpmCreateImageFromBuffer_XpmCreateImageFromData_XpmCreateImageFromXpmImage_XpmCreateXpmImageFromBuffer_XpmCreateXpmImageFromData_XpmCreateXpmImageFromImage_XpmFree_XpmFreeAttributes_XpmFreeExtensions_XpmFreeXpmImage_XpmFreeXpmInfo_XpmGetErrorString_XpmLibraryVersion_XpmReadFileToBuffer_XpmReadFileToData_XpmReadFileToImage_XpmReadFileToXpmImage_XpmWriteFileFromBuffer_XpmWriteFileFromData_XpmWriteFileFromImage_XpmWriteFileFromXpmImage_boundCheckingCalloc_boundCheckingMalloc_boundCheckingRealloc_xpmColorKeys_xpmDataTypes_xpmFreeColorTable_xpmFreeRgbNames_xpmGetCmt_xpmGetRGBfromName_xpmGetRgbName_xpmGetString_xpmHashIntern_xpmHashSlot_xpmHashTableFree_xpmHashTableInit_xpmInitAttributes_xpmInitXpmImage_xpmInitXpmInfo_xpmNextString_xpmNextUI_xpmNextWord_xpmParseColors_xpmParseData_xpmParseDataAndCreate_xpmParseExtensions_xpmParseHeader_xpmParseValues_xpmReadRgbNames_xpmSetAttributes_xpmSetInfo_xpmSetInfoMask_xpmatoui_xpmstrcasecmpWrFFrI.obj/     1345987754              100666  7580      `
++L%ª$:Pgy.drectvePÜ
++.text,¬ P`.debug$FÞîHB.text@ø8
+ P`.data
+Š@0À.debug$F±ÁHB.textpË;
++ P`.data
+
+@0À.data
+@0À.data
+@0À.data
+
+@0À.data
+$
+@0À.data1
+@0À.data"9
+@0À.debug$F[
+k
+HB.textu
+õ
+ P`.dataE
+@0À.dataL
+@0À.debug$FP
+`
+HB.textj
+j
+ P`.dataº
+@0À.dataœ
+@0À.debug$FÂ
+Ò
+HB.textpÜ
+L P`.data@0À.data@0À.data@0À.debug$F«»HB.textÅE
+ P`.dataœ@0À.dataÌ@0À.dataÐ@0À.dataÒ@0À.dataâ@0À.debug$FåõHB.text0ÿ/ P`.debug$FM]HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES L$T$
+ì8D$Vt$PVPD$HQRPèÄ
+ÀuM
+öt$L$
+VQèL$LT$$D$
+RPQèÄëD$DT$jRPèÄ
+L$ðQèÄÆ^Ä8Ã
+
++4	H^m{ì$$VŽ$,PVèÄ
+À
+
+öWÎj/VèøÄ
+ÿuþëGj.WèÄ
+ÀtJÉÿ3Àò®÷Ñ+ùT$Á÷új.Áéó¥Èáó€L$
+|$
+QèÄ
+Àtj.PÆ_èÄ
+Àuîj-WèÄ
+ÀtUT$;út%Éÿ3Àò®÷Ñ+ùT$Á÷úÁéó¥Èáó€|$j-WèÄ
+Àtj-PÆ_èÄ
+Àuîë¿$8$4$
+QWRPè$ðQèÄÆ_^Ä$Ã\4J£ßñÿ
+,timage_name>	S\$UW
+ÛtöÄtœë3í
+ÛtöÄtCÇD$
+
+ÀuÇD$
+D$|$PhWèÄ
+
+ítC
+ÀtPhWèÄ
+Vt$NV
+FQRPQhWèÄ
+ÛtötSCRPhWèÄD$ 
+ÀthWèÄhWèÄ
+ítC
+ÀtPhWèÄ
+N
+VQRWèÄ
+
+ítC
+
+ÀtPhWèÄ
+FNVPFQRPQWèÄ
+À^u)D$
+
+ÀtSC
+RPWèÄ
+hWèÄ3À_][ÃG/M,a+g,(,¢%š,ž"Ÿ,ÆÌ,à+æ,÷4
++,-@KNS
+Y,};
++",
++ XPMEXT %d %d"%d %d %d %d/*%s*/
++/* XPM */
++static char * %s[] = {
++fD$
+
+ÀvpS\$Ul$VWD$
+E}PhSèÄ
+Ÿ
+ÀtPPhSèÄÆÇþ~ÚhSèD$$ÄÅHD$
+u€_^][Ã ;&,.8=7C,R8Y_,	%s %s"%sy4L$SUl$¯ÍD$ÁVQpÿèØÄ
+Û\$
+u	^]žýÿÿÿ[Ã
+öWÆ"v_|$$t$
+D$s
+Àv%ØU@D$,
+ÐQVèÄ
+õÇKuá\$ T$ShÆ"RÆFèD$(Ä
+HD$
+u«ë|$$D$s
+Àv+D$L$(U@ÁRVèD$$Ä
+õÇHD$uÙD$ShÆ"PÆFèSèÄ3À_^][ÃIaHzG,ŸHÛDè,îA%s%s,
++ü@D$
+S\$
+ÀvPUVW|$D$
+PhSèGwÄ
+
+ÀvèQhSèÄ
+ÆMuéD$
+Ç
+HD$
+uŸ_^]hSèÄ[Ã
+W",9T?,^Qd,,
++"XPMENDEXT",
++"%s",
++"XPMEXT %s"mNìSU¬$
+V
+íWu!$_^]Ç@ Ç3À[ÄÃýÉÿ3Àò®÷ÑIùÿt/þž
+Ñ:Ëu
+ÒtH^Ñ:ËuÀÆÒuÜ3ÀëÀØÿ
+ÀuQUT$hRèD$
+hPè$,Ä
+ÀAu_^]Èÿ[ÄÃ_^]Ç3À[ÄÃÿ~Yt/ýž
+Ê:Óu
+ÉtP^Ê:ÓuÀÆÉuÜ3ÀëÀØÿ
+ÀuUD$hPèL$
+hQékÿÿÿhUè$ Ä
+ÀAu_^]Èÿ[ÄÃ_^]Ç3À[ÄÃ"oRnkhg¢dâc
+`#h,g7g=]gzip -q > "%s".gzwcompress > "%s".Zs\L$HtHu
+APèÄÃA= tPèYÃv
+o%u+t.fileþÿgWrFFrI.c@comp.idè
++ÿÿ.drectveP-÷Q".textËµÆ  , 8 .debug$Fù4ª.text@
+<WøT .data
+\ýGn_strchr _strrchr .debug$F8nœ=.textp·ÆG .dataºK.data	»0Á·	.data
++Þ
+UÒ
++.data
+ùKkí
+.data
+
+$l
+
+.data
+¿Ÿù€@
+_fprintf .data"SÑÞf.debug$FlyZ.textK¹ .dataIJ-æÆç.dataÉ¯0õ.debug$F9.text8WY3 _free .data>®:
+.dataø»6_strncpy R .debug$F:y.textpó1Gg .data".]Îx.dataÏÃnt¡.dataTU<Å.debug$F
+E¢¡Š.text
+
+1þLÌò
+ _fopen .data
+jšÂL
+.dataÔ¥Ø3__popen .data 1ï~`J _sprintf .data!IÒ a]!.data"4Þr"__iob.debug$F#
+.text$0%¶:¥$ _fclose __pclose .debug$F%$³_XpmWriteFileFromImage_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage_XpmWriteFileFromXpmImage??_C@_0L@JJCH@image_name?$AA@_xpmWriteFile??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_03NNMC@?$CC?0?6?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@??_C@_0CC@GBLH@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5?$CFs?$FL?$FN?5?$DN?5?$HL@_WriteColors??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@_xpmColorKeys??_C@_03NOED@?$CC?$CFs?$AA@_WritePixels??_C@_02DILL@?$CFs?$AA@??_C@_04DBEM@?$CFs?0?6?$AA@_boundCheckingMalloc_WriteExtensions??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@_OpenWriteFile??_C@_0P@HMMJ@gzip?5?9q?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_01LLF@w?$AA@??_C@_0BA@JFBG@compress?5?$DO?5?$CC?$CFs?$CC?$AA@??_C@_02BKNP@?4Z?$AA@_xpmDataCloseWrFFrDat.obj/   1345987753              100666  746       `
++L©$:P~.drectveP
++.text`Ü< P`.debug$FdtHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ì8T$@D$L$PQRÇD$$èÄ
+
+Àu1T$<D$VL$PQRèðD$PèL$,QèÄÆ^Ä8Ã
+7
++C	M[.fileþÿgWrFFrDat.c@comp.idè
++ÿÿ.drectvePK.text`C«  * ; U .debug$Fp_XpmWriteFileFromData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmWriteFileFromXpmImage_XpmCreateXpmImageFromDataparse.obj/      1345987753              100666  11188     `
++L©$:P¿!g.drectvePü
++.dataL`@0À.data@0À.data@0À.data@0À.data@0À.data@0À.textð' P`.data
++@0À.data	$
++@0À.data-
++@0À.data5
++@0À.data<
++@0À.dataD
++@0À.debug$FK
++[
++HB.text0e
++
+ P`.data·@0À.debug$F¹ÉHB.textÀÓ. P`.data
++_@0À.debug$FiyHB.text # P`.debug$FÃÓHB.textÝÝ  P`.debug$F¥!µ!HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 
+
+
++cgg4msì
+SU¬$VW3ÿ9œ 
+$$PUèÄ
+À$(QUèÄ
+Àh$,RUèÄ
+ÀO$0PUèÄ
+À6L$
+hQUèðÄ
+
+ö
+þu
+T$
+PRhèÄ
+
+Àužë3ÀŒ$@
+À$4PtSUèÄ
+Àt0$8QUèÄ
+Àt$<ž_^]3À[Ä
+Ã$<_3À^][Ä
+ÃL$ VQèÄ
+
+Àt
+$8RUèÄ
+Àtžë3À$<T$
+hRUèÄ
+øu+PD$ PhèÄ
+
+Àuž_^]3À[Ä
+Ã3À_^][Ä
+Ã3Û|$|$|$L$
+hQUèÄ
+ø
+×T$
+PRhèÄ
+
+À
+ŒD$
+hPUèðÄ
+
+öÆD4
+D$
+j_PèÄ
+ÀÎ+ÈL
+ù
++w3Òÿ$@ëÎ
+ÿ
+\jPhèÄ
+
+À
+D$$PUèÄ
+À+¿éÇ
+Û
+jPhèÄ
+
+À
+$(QUèÄ
+Àè»éL$
+É
+ÒjPhèÄ
+
+À
+º$,RUèÄ
+À¡ÇD$ë=L$
+É
+jPhèÄ
+
+Àuw$0PUèÄ
+ÀtbÇD$UèD$
+Ä@øD$Lþÿÿ
+ÿt;
+Ût7D$
+Àt/D$
+Àt'$<$@ÇÇ_^]3À[Ä
+Ã_^]žþÿÿÿ[Ä
+ÃI)8B8[8t87¬6±3Ü8ñ842I8r7
+63Ò7é1î3	7'.G-N,a*f38€&©3Â8ë"ð3	82
+73L8aÌ+Ð'Ô#ØÜ_chars_per_pixel_ncolors_height_width#defineXPMEXTë	ìSUVŽ$(WjVèè3ÿÄ;ïl$u_^]žýÿÿÿ[ÄÃ$(9» 
+U;÷|$l$MŒ$0SèGPèL$
+Ä
+À
+ÿðvGï
+Àt/øt*CHIHKA
+À|
+3ÀBëQèÄë
++KŸAKFMu»ÿÆv0Œ$,v&D$T$R$<QRèðÄ
+
+ö
+-3ÀhD$$D$ D$($(PSèèÄ
+
+íFD$
+
+ÀuC3ÛŸÉÿú3Àò®÷ÑI;Íu$$UQRèÄ
+
+À(CÆûrË$(D$ 
+ÀÊD$
+
+Àu.¿Éÿ3ÀT$$ò®÷Ñ+ù÷úÑÉÿò®ÊOÁéó¥Êáó€Œ$$Éÿ3ÀÆ,$ò®÷Ñ+ùT$$÷éúÉÿò®ÍOÁéó¥ÍD$
+áó€$$hPSèèÄ
+
+í
+ÿÿÿt$ 
+öQ|$$Éÿò®÷ÑQèL$ÐÄ
+Ò±s|$$Éÿ3Àò®÷Ñ+ùÁ÷úT$Áéó¥ÈD$á@ó€$,Â;ÁD$T$ÈýÿÿéûØþÿÿt$ 
+ötH|$$Éÿ3Àò®÷ÑQèÐÄ
+ÒùD$|$$Éÿ°3Àò®÷Ñ+ùÁ÷úÁéó¥Èáó€CÆD$$\$ $(ÇD$
+éïþÿÿ$,T$QRèÄžýÿÿÿ_^][ÄÃ$,L$PQèÄÆ_^][ÄÃ$,T$QRèÄžþÿÿÿ_^][ÄÃ$,L$PQèÄžþÿÿÿ_^][ÄÃSÆ
+"Æ
+èÄ;÷Æ
+"|$l$ÚŒ$0GPèÄE
+ÀÖ
+ÿðvL
+Àt/øt*CHIHKA
+À|
+3ÀBëQèÄë
++KŸAKFOu»Œ$0ÿÆv-Œ$,v#L$U$8QRPèðÄ
+
+ö
+tSè$(hQSÆD$4èÐÄ
+ÒD$$Àt2¿Éÿ3Àl$$ò®÷Ñ+ù÷ýéÉÿò®ÍOÁéó¥Íl$áó€Œ$$Éÿ3ÀÆ$ò®÷Ñ+ùT$$÷úÑÉÿò®ÊOÁéó¥Ê$$áhPSó€èÐÄ
+
+Ò
+nÿÿÿ|$$Éÿ3Àò®÷ÑQèÐÄ
+Ò¹|$$Éÿ3Àò®÷Ñ+ùÁ÷úÁéó¥Èáó€Ž$,|$UÆD$$Nÿ;ùs	SèÄGÅ;þ|$l$&þÿÿ$4D$_^]3À[ÄÃ$,D$RPèÄžýÿÿÿ_^][ÄÃ$,T$QRèÄÆ_^][ÄÃ$,L$PQèÄžýÿÿÿ_^][ÄÃEdmD¶CöB$7@a3A
+77DžD
+>B>d>>°ÚD
+CbBu7§A7?DÐ>õ>> .=ìSUl$ VW3ÿU|$èj
+èØD$ L$0PQUèðÄ;÷tSèÄÆ_^][ÄÃT$(jRhèðÄ
+;÷teD$(j	PhèÄ
+;ÇtEL$(QèUèT$ D$0RPUèðÄ;÷uL$(jQhèðÄ
+;÷u¥ë;÷
+ÏT$(j	RhèÄ
+D$ |$
+ë|$
+D$ 
+ÀG
+PSèðÄ
+ö®L$(t$÷Yû=~ŸjRèÄëŸ
+Aà
+ÀtGëÑT$+û+×êRèÄ
+ÀwL$+ÏûéQWPèT$4RèUèD$,L$<PQUèøÄ 
+ÿ
+ijèFT$,jRhèØÄ
+ÛD$(j	PhèÄ
+D$ 
+ÀtdV
+œQRèÄ
+À4FL$(
+žUGèT$
+D$,RPUèØÄ
+Û
+3L$(jQhèØÄ
+
+Ûu
+ÿuVRèÄÇFT$L$
+BÁ
+
+Û\$~T$L$
+[þÿÿD$
+À
+óD$(PèSèÇD$
+Ä\$éäD$(PèL$QSèÄ
+žýÿÿÿ_^][ÄÃT$(RèL$3ÀFFD$@PQèÄ
+žýÿÿÿ_^][ÄÃT$D$BÇFRPÇFèÄÇ_^][ÄÃL$(QèT$D$B~RPèÄ
+žýÿÿÿ_^][ÄÃL$T$A~QRèÄÃ_^][ÄÃD$ 
+Àu
+L$(QèÄT$0D$L$,_^]3À[ÄÃD,U;TT6Y3nSs3TU¯6Ž3ÓSØ3ÿP!O/N=M[D{L
+TU¯DŸ6Ã3ÜSá3ýP)UB6G3]T TŠTÄTÏKéTK/KFTYK|KTXPMENDEXTŒJì@S\$PU3íV;ÝWl$4l$(l$l$l$
+l$ l$$tÇD$öÄul$|$TWèÄ;Å
+4D$(L$4PT$@QD$@RL$`PT$lQD$DRL$DPQWèÄ$;Å
+û9l$tT$
+RWèÄ|$Tv
+|$\vD$@PèÄ;Å
+ÄD$TL$@T$QL$`RPQWèðÄ;õt(|$TÄ|$\¹T$@RèÄé§9l$tD$ PWèÄD$L$T$@QL$XRT$dPD$<QL$<RPQWèðD$tÄ øv|$\v
+T$@RèÄ;õuD9l$tD$$PWèÄ;ÝöÄ9l$(t{KS
+QRWèðÄ
+;õtjD$;ÅtL$\QPèÄD$;Åt	PèÄD$
+;Åt	PèÄD$ ;Åt	PèÄD$$;Åt	PèÄÆ_^][Ä@Ãk
+kD$XT$,L$0;ÝT$THL$\PT$H
+L$PHt59l$tT$
+D$ L$$SCK
+9l$4tD$<T$8C
+S3À_^][Ä@ÃF^]¶\Û=[
+]Ich[]ªJÆ>×TèTùT
++TZì$SUVŽ$(W¯ÆÁàPè3ÉÄ;ÁD$u_^]žýÿÿÿ[ÄÃ$4D$ÃHH:ûÆD
+ þŒ$0ð;ñL$ZŽ$$Vè$,Ä3í
+À3ÿ
+ÛvH
+Àt/øt*FHIHNA
+À|
+3ÀBëQèÄë
++NŸAND< G;ûrž$<L$ QRèÄ
+Àt=HD$EÀD$$(;èwÿÿÿD$$,@;ÁD$EÿÿÿéT$RèÄžþÿÿÿ_^][ÄÃ;ñL$j$$Sè$,Ä
+ÀÇD$
+ÞŒ$43ö
+ÿvH
+Àt/øt*CHIHKA
+À|
+3ÀBëQèÄë
++KŸAKD4 F;÷rž$03ÿ
+ÀvJ¬$8Et$ Ê:u
+ÉtPÊ:VuÀÆÉuà3ÀëÀØÿ
+Àt$0GÅ;ørœ;Œ$0CD$L$
+A8ÀD$$(;ÈL$
+"ÿÿÿD$$,@;ÁD$êþÿÿéH¬$0¹3À|$ ó«3ÿ
+ívI$8
+Ÿt D 
+ÀujhèÄ
+À3ÉWGHÃ;ýfHrŸ$,ÇD$
+ÀFŽ$$\$Vè$,Ä3í
+À	
+ÀtnøtiFPJPFH
+É|H3ÒAúëRt$ ¿
+Àt	PèÄÆOuëL$QèÄžýÿÿÿ_^][ÄÃPèÄøë
++FŸ8@F
+ÿùÿí
+Àt/øt*FHIHNA
+À|
+3ÀBëQèÄë
++NŸAN
+À~o=}hLŒ 
+Ét`fAf
+ÀtW%ÿÿÃHECü$(;è÷þÿÿD$$,@;ÁD$Åþÿÿt$ ¿
+Àt	PèÄÆOuëéet$ ¿
+Àt	PèÄÆOuëD$PèÄžþÿÿÿ_^][ÄÃt$ ¿
+Àt	PèÄÆOuëL$QèÄžþÿÿÿ_^][ÄÃŽ$0¹3À|$ 
+öó«v
+$893ÛP@Á;ÆfT\ rê$,3í
+À©Ž$$\$Vè$,Ä3ÿ
+Àvx
+Àt/øt*FHIHNA
+À|
+3ÀBëQèÄë
++NŸAN
+Àúþÿÿ=ïþÿÿfDD f
+Àáþÿÿ%ÿÿÃHGCü$(;ør$,E;èbÿÿÿ$@T$_^]3À[ÄÃ D×CdQT}ÔCÐE
+rT
+TCóCgTTTÅTØTBCøc.fileþÿgparse.c@comp.idè
++ÿÿ.drectvePpE2.data.data¶ãõ!.data`ýŒ*%.dataR.²ö9.dataêSÐN.data5*b.textð'wÎv $L53108R .data	QÉ	$L53103".data
++	Ë<Gº
++$L53098Û.data
+í"SÕ
+$L53093.data
+lð
+ï
+$L53088U$L53469Ì$L53468à_strchr .data
+ÐŠZ
+% _strncmp .data|e¬/H U .debug$F©Ì.text0
+Ïe` p .data¢$ __filbuf § Œ .debug$F0KJ5.textÀ.§ItfÑ å _strncpy __pctypeø  .data
++êÐ©ô&_free B .debug$Fó¥r.text 9É2þP ^ p   .debug$FC0.textv\tõ ª .debug$F·_xpmColorKeys??_C@_01IJJ@c?$AA@??_C@_01KCMF@g?$AA@??_C@_02EPGO@g4?$AA@??_C@_01KDFD@m?$AA@??_C@_01KBOJ@s?$AA@_xpmParseValues_xpmNextString??_C@_0BB@OCOG@_chars_per_pixel?$AA@??_C@_08OLGI@_ncolors?$AA@??_C@_07BLIB@_height?$AA@??_C@_06IKHH@_width?$AA@??_C@_07GIIJ@?$CDdefine?$AA@_xpmatoui??_C@_06BGFG@XPMEXT?$AA@_xpmNextWord_xpmNextUI_xpmParseColors_xpmFreeColorTable??_C@_01FCOA@?5?$AA@_xpmHashIntern_boundCheckingMalloc_boundCheckingCalloc_xpmParseExtensions_XpmFreeExtensions__isctype___mb_cur_max_boundCheckingRealloc??_C@_09IGJF@XPMENDEXT?$AA@_xpmGetString_xpmParseData_xpmHashTableFree_xpmHashTableInit_xpmGetCmt_xpmParseHeader_ParsePixels_xpmHashSlotWrFFrBuf.obj/   1345987753              100666  743       `
++L©$:P.drectvePŽ
++.textPT P`.data|@0À.debug$F~HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$VhPèðÄ
+öuÈÿ^ÃT$
+WúÉÿ3ÀVò®÷ÑIjQRèVøèÇÄH÷Ø_^ÀÃ
+
+
++5	=wN.fileþÿgWrFFrBuf.c@comp.idè
++ÿÿ.drectvePCÝ.textP&:£ _fclose _fwrite _fopen .data1ï~`
+.debug$F/_XpmWriteFileFromBuffer??_C@_01LLF@w?$AA@
++simx.obj/       1345987753              100666  5012      `
++L!©$:P¶
+].drectveP<
++.text P`.debug$FŠ¶HB.text Àà P`.debug$FêúHB.text $ P`.debug$F.>HB.textH P`.debug$FXhHB.textr P`.debug$FHB.text0Ì P`.debug$FÖæHB.textð P`.debug$FHB.textª P`.debug$FŸÎHB.text@Ø	 P`.debug$F€	Ž	HB.text@Ÿ	 P`.debug$Fþ	
++HB.text
++ P`.debug$F(
++8
++HB.text0B
++ P`.debug$Fr
++
++HB.text
++ P`.debug$F
++¬
++HB.textP¶
++
+ P`.debug$F
+*
+HB.text4
+D
+ P`.debug$FN
+^
+HB.text h
+
+ P`.debug$F
+¬
+HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$PèÄÃD$L$PQèÄÃ
+
+D$L$PQèÄÃ
+3ÀÃ3ÀÃ
+SVt$
+W=j
+Pÿ×jQØÿ×_Ã^[Ã	$##3ÀÃ)D$
+ì
+Àtr8#uL$T$QL$RQPèëT$L$RT$QRPèÄ
+Àt:L$T$D$S3Û%ÿùÚÁã
+ØD$
+\$XPHž[ÄÃ3ÀÄÃ!48/.Vt$
+öW$>#
+þÉÿ3Àò®÷ÑIùu;ŸFPèL$ŸVRèL$
+ŸVRèL$$Ä
+_ž^ÃùuWŸVRèøŸFPÁçèL$ø9ŸVRèøŸFPÁçèL$$ø9ŸVRèøŸFÁçëZù
+unŸVRèøŸFPÁçèL$ø9ŸVRèøŸFPÁçèL$$ø9ŸV	RèøŸF
++ÁçPèL$0Äøž9_^Ã_3À^Ã.9>9N9n9}999°9Ê9Ù9ë9ú9
+9974D$ø0|	ø9ÀÐÃøa|	øfÀ©ÃøA|	øFÀÉÃ3ÀÃ19žÃ>L$D$
+
+É~P3ÒPPÁêPÀIuåÃ(C3ÀÃHVjèðÄ
+öt.S\$(Ul$(W|$
+jWjSUÿ~
+n_^]Æ[^ÃÆ^Ã)NC
++MD$
+ÀtPèYÃ
++TSVt$
+ötPÿVèÄ^ÃZS
+Y.fileþÿgsimx.c@comp.idè
++ÿÿ.drectveP.textÓ)ê _malloc .debug$F.text %cøë _calloc .debug$F.text %cøë. _realloc .debug$F.textÙÎ©
+D .debug$F	.text
++ÙÎ©
+T
++ .debug$F
+'k
++.text
+0å?d
+ s .debug$F
+
+.textÙÎ©
+ .debug$FÂ¢5.text
+JÅ © .debug$F.text@AÑ»Œ .debug$F.text@õðõ^È .debug$F.textßMÖ .debug$F.text0óÐ\ã .debug$F.textÙÎ©
+ñ .debug$FOœN.text
+PÎOÂþþ
+ 
+ .debug$F
+
+.text
+W£#
+ _free .debug$FÄsÄ
+.text  œ3/  > .debug$F! T_boundCheckingMalloc_boundCheckingCalloc_boundCheckingRealloc_XDefaultVisual_XDefaultScreen_XDefaultDepth__imp__GetDeviceCaps@8_XDefaultColormap_XParseColor_xpmGetRGBfromName_rgbFromHex_hexCharToInt_XAllocColor_XQueryColors_XFreeColors_XCreateImage__imp__CreateBitmap@20_XImageFree_XDestroyImage__imp__DeleteObject@4scan.obj/       1345987753              100666  5137      `
++L©$:PÀ
+>.drectvePŒ
++.data
+@0À.data]@0À.text w
+ P`.debug$F)HB.text3Ã P`.debug$FÍÝHB.text@ç P`.debug$F'7HB.textðA1 P`.datam@0À.debug$FrHB.text ,
+ P`.dataê
+@0À.debug$Fø
+
+HB.text
+
+ P`.debug$FŠ
+¶
+HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 
++ .XoO+@#$%&*=-;:>,<1234567890qwertyuipasdfghjklzxcvbnmMNBVCZASDFGHJKLPIUYTREWQ!~^/()_`'][{}|ìD$ SUVt$0W3í3ÿ3Û;Ål$l$l$ÇD$
+l$ l$$txXë
++;õt~^L$<;Ítš uöÄt	A D$4ël$4Ëj¯ÏQèÄ;ÅD$u
++ŸýÿÿÿéT$
+PèÄ;ÅD$u
++Ÿýÿÿÿéó;õl$,t L$hQSWVUèðÄ
+ö
+ÉD$0
+Àt T$hRSWPUèðÄ
+ö
+¡D$ jPèÄD$
+Àu
++ŸýÿÿÿéL$ ž\;Èºv4@Áæ+ðÁæÆB;Èwî9T$4sT$4D$$
+Àt!L$<T$4D$QRPèðÄ
+
+öu-L$ T$<D$4RT$(PD$
+RPQL$$QUèðÄ
+
+ötD3íD$;Åt	PèÄD$;Åt	PèÄD$;ÅtT$ RPèÄÆ_^][ÄÃD$8L$4T$ HL$P
+T$8XHPD$PèÄ3À_^][ÄÃpŒ
+Æ9äî9f!*¬œÓ 
+T$
+SUVW
+Àt
+_^]Ç3À[Ãt$l$^
+~;û¹s
+9(tGÀ;ûrô;ûu9F;Ør&ÀFÁàPQèÄ
+Àu
++_^]ž[ÃT$
+,F
+@F
+:_^]3À[ÃTD$
+Àu'D$¹P
+
+ÒuH
+ÇHD$
+3ÀÃL$
+3ÀÇÃ<
+SUVt$WFPèl$ÈÄ
+ÉEu
++_^]žýÿÿÿ[Ã¡3ÒAþAÿv'N÷ÚžÉB²¿\÷âÂ3ÒÁè÷÷¡ANAÿuÚD$
+Æ
+ÀtcÑâuöÅtRHTùtG
+Òt
+PD
+I
+Êë@D
+Ù¿u+Ý3
+ÀtPèÄ
+Àt$GÆÿvá_^]3À[ÃhèÄE
+Àuå_^]žýÿÿÿ[Ã
+,Vµ%Ó$Ø%Noneð!ì$S$DUVW3ÿ;ß|$$|$ t
++ötCëŽ$8VèPVèÄ
+Ž$HD$;÷t1$<$@$DÂIÀ$<$@$D$@ÍRèÄ;ÇD$
+u_^]žýÿÿÿ[Ä$Ã$<èL$$@
+ÉÅ$LCPèT$ÈÄ
+ÉøÆ3Ò»\÷ó¡$LAûAÿv<K\$ÞžÉB²+Ú÷ãÂ3ÒÁè»\÷ó¡AAÿD$HD$uÐ$L$DÆGFÀML$$D$@ÁÅ;øL$Mÿÿÿ$PD$
+$@T$QP$@RPèjjèÄè
+Ûl$tcöÄt;KDs@S$CTL$0t$ T$D$ëBT$
+RèÄžýÿÿÿ_^][Ä$ÃöÄt
+KDS@C$L$$KTT$ D$L$t$ $@ÇD$,
+À$<D$
+zX|$(
+ötx3É3À
+öv"T$;D$u¹ë
+è+é,ª;kût@;Ærâ;ÆtFL$$
+Étë
++T$0
+@Ê+Çwðœx7
+Àt
+PèÄÆMuèt$ |$(ëfl$
+ít+3À3ÉC
+3ÒPSÿQRUjèÄ
+Àt
+PèÄë-3À3ÉC
+3ÒPSÿQRD$@hPèL$HQèÄ
+ÀtHD$,$@l$@ÇÃ;ÁD$,|$(üþÿÿD$
+PèUjèÄ
+3À_^][Ä$ÃT$
+RèUjèÄ
+žýÿÿÿ_^][Ä$Ã2493×ú0§2°1ì³%é0ö%/,%%^f++#%02x%02x%02x*D$T$SUl$
+VW}QPÿD$ 3Û
+Àv<D$
+3ö
+Àv)L$SVRÿWUPÿT$4Ä
+
+Àu
+D$
+FÇ;ðr×D$ C;ØrÄ_^]3À[Ã_^]žýÿÿÿ[Ã;>:v9.fileþÿgscan.c@comp.idè
++ÿÿ.drectvePN
+žÙ.data.data]6kH.text 
+Z¹ùc  _free  § .debug$FeJ.textœpróŒ È .debug$F.text@ñšùÞ .debug$F	ÖÉ~y.text
++ð
++iãbî
++ .data
+µxEÞ
+_strdup .debug$F
+XY÷\
++.text
+   @
+ + _sprintf .dataÃÀ2<i x   © .debug$FP}]
+.textÄSž¹ Ì ß .debug$Fõ_printable??_C@_0FN@FMJF@?5?4XoO?$CL?$EA?$CD$?$CF?$CG?$CK?$DN?9?$DL?3?$DO?0?$DM1234567890qwe@_XpmCreateXpmImageFromImage_xpmFreeColorTable_boundCheckingMalloc_boundCheckingCalloc_storePixel_boundCheckingRealloc_storeMaskPixel_ScanTransparentColor??_C@_04COF@None?$AA@_ScanOtherColors_xpmFreeRgbNames??_C@_0O@MKPE@?$CD?$CF02x?$CF02x?$CF02x?$AA@_xpmGetRgbName_xpmReadRgbNames_XQueryColors_XDefaultColormap_XDefaultScreen_MSWGetImagePixels__imp__GetPixel@12__imp__SelectObject@8
++rgb.obj/        1345987753              100666  36745     `
++Lõ©$:P2Bä.drectveP\&
++.data\¬&.ê@@À.data
+,7@0À.data87@0À.data
+?7@0À.dataJ7@0À.dataP7@0À.data
++V7@0À.data`7@0À.data
++g7@0À.data
+q7@0À.data}7@0À.data7@0À.data7@0À.data
++7@0À.data
+7@0À.dataŠ7@0À.data
++«7@0À.data
++µ7@0À.data¿7@0À.dataÇ7@0À.data	Î7@0À.data	×7@0À.data
+à7@0À.dataë7@0À.data
+ò7@0À.data
++þ7@0À.data
++8@0À.data8@0À.data8@0À.data
+
+8@0À.data(8@0À.data-8@0À.data28@0À.data
++78@0À.data
+A8@0À.dataL8@0À.dataZ8@0À.data
++h8@0À.datar8@0À.data8@0À.data
++8@0À.data8@0À.data
++8@0À.data¢8@0À.data	ª8@0À.data³8@0À.data
+ž8@0À.data	Ä8@0À.data
++Í8@0À.data
++×8@0À.data
+á8@0À.dataî8@0À.dataþ8@0À.data9@0À.data 9@0À.data09@0À.data
+?9@0À.data
+L9@0À.dataY9@0À.datai9@0À.data
+{9@0À.data9@0À.data9@0À.data9@0À.dataŠ9@0À.data
++¬9@0À.data
+¶9@0À.dataÂ9@0À.dataÑ9@0À.dataà9@0À.data
+ï9@0À.dataü9@0À.data
+
++:@0À.data
++:@0À.data
++ :@0À.data*:@0À.data?:@0À.data
++N:@0À.data
+X:@0À.data
++c:@0À.data
+m:@0À.data
++z:@0À.data:@0À.data	:@0À.data:@0À.data¡:@0À.data
++§:@0À.data±:@0À.data	¹:@0À.data
+Â:@0À.dataÎ:@0À.dataÔ:@0À.dataÛ:@0À.dataâ:@0À.dataé:@0À.datað:@0À.data÷:@0À.dataþ:@0À.data;@0À.data
+;@0À.data;@0À.data;@0À.data ;@0À.data';@0À.data.;@0À.data5;@0À.data<;@0À.dataC;@0À.dataJ;@0À.dataQ;@0À.dataX;@0À.data_;@0À.dataf;@0À.datal;@0À.datas;@0À.dataz;@0À.data;@0À.data;@0À.data;@0À.data;@0À.data;@0À.data€;@0À.data«;@0À.data²;@0À.dataž;@0À.data¿;@0À.dataÆ;@0À.dataÍ;@0À.dataÔ;@0À.dataÛ;@0À.dataâ;@0À.dataé;@0À.datað;@0À.data÷;@0À.dataþ;@0À.data<@0À.data
+<@0À.data<@0À.data<@0À.data <@0À.data'<@0À.data.<@0À.data5<@0À.data<<@0À.dataC<@0À.dataJ<@0À.dataP<@0À.dataW<@0À.data^<@0À.datae<@0À.datal<@0À.datas<@0À.dataz<@0À.data<@0À.data<@0À.data<@0À.data<@0À.data<@0À.data£<@0À.dataª<@0À.data±<@0À.dataž<@0À.data¿<@0À.dataÆ<@0À.dataÍ<@0À.dataÔ<@0À.dataÛ<@0À.dataâ<@0À.dataè<@0À.dataï<@0À.dataö<@0À.dataý<@0À.data=@0À.data
+=@0À.data=@0À.data=@0À.data =@0À.data'=@0À.data.=@0À.data4=@0À.data;=@0À.dataB=@0À.dataI=@0À.dataP=@0À.dataW=@0À.data^=@0À.datae=@0À.datal=@0À.datas=@0À.data{=@0À.data=@0À.data=@0À.data=@0À.data
++=@0À.data=@0À.data
+¢=@0À.data
++­=@0À.data
+·=@0À.data
+Ã=@0À.data
++Ï=@0À.data
+Ù=@0À.dataä=@0À.data
+ì=@0À.data	ø=@0À.data
+>@0À.data
+>@0À.data>@0À.data(>@0À.data
+6>@0À.data
+C>@0À.data
+N>@0À.data
+Y>@0À.datad>@0À.data
++s>@0À.data
++}>@0À.data>@0À.data>@0À.data	>@0À.data£>@0À.data²>@0À.data
++ž>@0À.data
+Â>@0À.data
++Í>@0À.data
++×>@0À.dataá>@0À.data
+ç>@0À.dataò>@0À.data÷>@0À.data?@0À.data
+?@0À.data?@0À.data?@0À.data
+?@0À.data
+*?@0À.data
++7?@0À.textA?Q? P`.debug$F[?k?HB.textpu?å? P`.debug$F@@HB.text@
+@]A P`.dataéA@0À.debug$FîAþAHB.textB P`.debug$FB(BHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ðøÿúë×2¿ÁðÿÿõõÜÿäÄÿëÍÿ+â¥**Þž_ÿÒi
+ÿrV""ÿøÜÿÿž
+V-œ·kUV/ÿ ézŒ8Kf/OOŠŠÓÿ¿ÿTTT
+ÿ##ÿúðPiÜÜÜøøÿÚªïß~~~ÿÿÿ
+
+
+!!!$$$&&&)))+++...000333666888;;;===@@@BBBEEEGGGJJJMMMOOORRRTTTWWWYYY\\\^^^aaaccc
++
++
++fffiiikkknnnpppsssuuuxxxzzz}}}
+
+
+
+
+
+¡¡¡£££ŠŠŠššš«««­­­°°°³³³µµµžžžºººœœœ¿¿¿ÂÂÂÄÄÄÇÇÇÉÉÉÌÌÌÏÏÏÑÑÑÔÔÔÖÖÖÙÙÙÛÛÛÞÞÞàààãããåååèèèëëëíííðððòòòõõõ÷÷÷úúúüüüÿ­ÿ/ðÿðÿiŽk99ÿÿð³³~ææúÿðõ|üÿúÍ°âÿðàÿÿîÝúúÒšššÿ¶Áÿ z ²ªÎúpÿw|Óÿÿà¯úðæÿÿR22Ì2KÑÁfœRœpÛ4wfjj##ÒÒÕ y//dõÿúÿäáÿäµÿÞ­##u##uýõæk#ÿÿEïïîèªsÞx¯îîÛpÿïÕÿÚ¹Í
+?ÿµÅÅH°àæ  ðÿŒAiáEézô€`RÿõîR-rÿ~«pÿúúA¬ATpªÞžØ¿ØÿcGÌß>Îó>õÞ³ÿÿÿõõõÿÿ2Ø8êÆÃÀœ º(·0Ž8±@®H«PšX¥`¢hpx š°žÀ~È{ÐxØuàrèoðløifc`] Z(W0T8Q@NHKPHXE`Bh?p<x9630- *š'°$ž!À
+ÈÐØàèð
+ø	ý ú(÷0ô8ñ@îHëPèXå`âhßpÜxÙÖÓÐÍ ÊšÇ°ÄžÁÀŸÈ»ÐžØµà²è¯ð¬ø©Š£  (08@HPX
+`hp|xyvspm jšg°džaÀ^È[ÐXØUàRèOðLøIFC@= :(70481@.H+P(X%`"hp
+x
+ 
++š°žÀþÈûÐøØõàòèïðìøéæãàÝ Ú(×0Ô8Ñ@ÎHËPÈXÅ`Âh¿pŒx¹¶³°­ ªš§°€ž¡ÀÈÐØàèðø} z(w0t8q@nHkPhXe`bh_p\xYVSPM JšG°DžAÀ>È;Ð8Ø5à2è/ð,ø)&# 
+ (08@H
+YellowGreenYellowWhiteSmokeWhiteWheatVioletRedVioletTurquoiseTransparenttomatoThistleTanSteelBlueSpringGreensnowSlateGraySlateBlueSkyBlueSiennaseashellSeaGreenSandyBrownSalmonSaddleBrownRoyalBlueRosyBrownRedpurplePowderBluePlumPinkperuPeachPuffPapayaWhipPaleVioletRedPaleTurquoisePaleGreenPaleGoldenrodOrchidOrangeRedOrangeOliveDrabOldLaceNavyBlueNavyNavajoWhitemoccasinMistyRoseMintCreamMidnightBlueMediumVioletRedMediumTurquoiseMediumSpringGreenMediumSlateBlueMediumSeaGreenMediumPurpleMediumOrchidMediumGoldenrodMediumForestGreenMediumBlueMediumAquamarineMaroonMagentalinenLimeGreenLightYellowLightSteelBlueLightSlateGrayLightSlateBlueLightSkyBlueLightSeaGreenLightSalmonLightPinkLightGrayLightGoldenrodYellowLightGoldenrodLightCyanLightCoralLightBlueLemonChiffonLawnGreenLavenderBlushlavenderKhakiivoryIndianRedHotPinkhoneydewGreenYellowGreenGray99Gray98Gray97Gray96Gray95Gray94Gray93Gray92Gray91Gray90Gray9Gray89Gray88Gray87Gray86Gray85Gray84Gray83Gray82Gray81Gray80Gray8Gray79Gray78Gray77Gray76Gray75Gray74Gray73Gray72Gray71Gray70Gray7Gray69Gray68Gray67Gray66Gray65Gray64Gray63Gray62Gray61Gray60Gray6Gray59Gray58Gray57Gray56Gray55Gray54Gray53Gray52Gray51Gray50Gray5Gray49Gray48Gray47Gray46Gray45Gray44Gray43Gray42Gray41Gray40Gray4Gray39Gray38Gray37Gray36Gray35Gray34Gray33Gray32Gray31Gray30Gray3Gray29Gray28Gray27Gray26Gray25Gray24Gray23Gray22Gray21Gray20Gray2Gray19Gray18Gray17Gray16Gray15Gray14Gray13Gray12Gray11Gray100Gray10Gray1Gray0GrayGoldenrodGoldGhostWhitegainsboroForestGreenFloralWhiteFirebrickDodgerBlueDimGrayDeepSkyBlueDeepPinkDarkVioletDarkTurquoiseDarkSlateGrayDarkSlateBlueDarkSeaGreenDarkSalmonDarkOrchidDarkOrangeDarkOliveGreenDarkKhakiDarkGreenDarkGoldenrodCyancornsilkCornflowerBlueCoralchocolatechartreuseCadetBlueburlywoodBrownBlueVioletBlueBlanchedAlmondBlackBisqueBeigeAzureAquamarineAntiqueWhiteAliceBlue¡ÃÉSU-V3öW
+í~?T$$|$
+¹Øãÿ;ßu
+3ÛÜãÿ;\$ u
+Áè%ÿ;ÂtFÁ;õ|Î_^]3À[Ãõ_^][ÃYbÎD$SUVWPèøj WèÄ
+
+Àt!8t
+HH@Éuój WèÄ
+Àuß÷ÀtŸÐRèÄFFÀuêhWèÄ
+ÀtÆ@a¡3íXÿÃ+ÂðÑþ
+õQWèÄ
+Àt-}^ÿën;ëe++ÂðÑþõRWèÄ
+ÀuÓõT$ÈWáÿ
++T$ 3ÉÌáÿ
++L$$Áè%ÿèÄž_^][ÃT$D$
+L$ WÇÿÇÇèÄž_^][Ã
++ÜÛ5ÛMÚ_ÙeÖuÕ·ŸÕÌþÔ/Ôgrey@ÓÃá.fileþÿgrgb.c@comp.idè
++ÿÿ.drectvePõZ6.data\ê¶Õz_X.data
+³Q
+ù%.dataV³àD.data
+'ÒF].data$ãµ{.data
+w¶.data
++Ñíõ{ª.data	#Æ	.data
++
++V`?æß
++.data
+
+ØËXžû
+.data
+ÉÝ ²
+.data
+^¡ŠE3
+.dataËöM.data
++åÛ¬Øc.data
+¹
+.datay~F.data
++é
++&(µ.data
++ÄóX­Ñ.dataøÆFgí.datayiB.data	£DmÜ .data	UÀÖ;.data
+
+rnV.datasPîüt.data
+q€ñU.data
++l Æ¬.data
+
++êÜmÈ
+.data
+A`.ä
+.data
+Ìòíú
+.data
+Ç;&
+.data !8Ë1 .data!#}ºH!.data"sÖð_".data#
++ÝWöv#.data$
+óÝ¹
+$.data%d>@°%.data&ã³
+Ñ&.data'
++±ñ'.data(wA£
+(.data)'%>.).data*
++}
+G*.data+Ð5Þc+.data,
++YÐX¿|,.data-)tLc-.data.	c·÷°²..data/ ØÊÍ/.data0
+u.qä0.data1	ayñ1.data2
++ž·úâ
+2.data3
++ÿ
+¢Ù:3.data4
+öÓ{V4.data5E_Æv5.data6ÂÒ
+6.data7I\$Ÿ7.data8PAkÀä8.data9*89.data:
+mØ%¿*:.data;
+6KäJ;.data<V %j<.data=Î²UÚ=.data>
+'ep÷Ž>.data?íééÒ?.data@VÖŸ÷@.dataAèM/A.dataBÏ
+*B.dataC
++QÇóÎBC.dataD
+ErÙ^D.dataE
+f}E.dataFOF.dataGµ¶øÁG.dataH
+×íãâH.dataIç4}I.dataJ
+`¡
+#J.dataK
++"ÿ<BK.dataL
++À»^L.dataMu²zM.dataN³×¶D£N.dataO
++
+=ÅO.dataP
+<rNáP.dataQ
++íBñÿQ.dataR
+€±8	R.dataS
++P
+W;	S.dataTüŠ ÆW	T.dataU	ªÄ°x	U.dataVj¢ú¿	V.dataW)Ò€«	W.dataX
++¹€¢wÃ	X.dataYH­ß	Y.dataZ	ê<$ù	Z.data[
+M]æ
++[.data\šÁÕ(3
++\.data]s
+PK
++].data^24Id
++^.data_ý(Î}
++_.data`Œ
+×
++`.dataaJšü¯
++a.datab>{³åÈ
++b.datacùíòªá
++c.datadžÜé³ú
++d.datae{Ä
+e.dataf:Ÿß,
+f.datagxÇqGE
+g.datahDoßQ]
+h.datai^ÄHv
+i.datajÊB\Ï
+j.dataksGÖš
+k.datalH jýÁ
+l.datam	qäÚ
+m.datanÎ0«ó
+n.datao¶+²
+
+o.datapLå%
+p.dataq
+Ô
+>
+q.datar9öj^W
+r.datasy(Zn
+s.datat8C
+t.datau÷Ä 
+u.datav¶4Ý¹
+v.datawug6öÒ
+w.datax4V-ïë
+x.datayóÀl 
+y.dataz²ñw¹
+
+z.data{q¢Z6
+{.data|0AO
+|.data}öêòÙh
+}.data~NBA[
+~.datasZB
+.dataÀoÂÅ±
+.data^ÙÜÊ
+.dataB
+ô÷ã
+.data<ïîû
+.dataÄª®¡.data
+
+µž-
+.dataFÈF.dataù_.data·ÛéÀw.dataüY.dataVÍ
+@š.dataÑÇÁ.dataØàÞÚ.data³²õó.dataZ©ì
+.dataè£%.dataÜ%óº>.datavÞW.data^GÅp.datatÄë.data ÅX¡.dataa§ÞAº.data®»FÆÓ.dataï]ßì.data,Ùpô.datamèkí
+.dataª~*¢7.dataëO1»P.data(
+
+i.datai-.data5¹ßò.data¥]³.data ä±DÌ .data¡+­	Ãå¡.data¢jÚþ¢.data£©Ï?ñ£.data€èþ$è0€.data¥/he§I¥.dataŠnY~ŸbŠ.data§­
++S{§.datašì;Hš.data©ò/œ­©.dataªêH\Åª.data«ÓÛSEÞ«.data¬
+ÇËÂö¬.data­]öÐÛ­.data®¥ýð'®.data¯ßæé@¯.data°§ŠY°.data±Y3Œ¿r±.data²`².data³ÛQ£³.dataŽ³
+
+€ŒŽ.dataµËT^Óµ.data¶eGì¶.data·EyÀ·.datažHÙ
+ž.data¹Ç»ò7¹.dataº* ëPº.data»AŒá€i».dataŒúœŒ.dataœÃÞ×œ.dataŸÜŽŸ.data¿ïÌÎ¿.dataÀpMšçÀ.dataÁ1|³ÿÁ.dataÂæ
+Â.dataÃ
++Âú.Ã.dataÄëÿÊÉJÄ.dataÅ
+òô1aÅ.dataÆ
++qÔÆ.dataÇ
+CBêÇ.dataÈ
+ÑÇëºÈ.dataÉ
++Õ×ÙÉ.dataÊ
+ÙõËõÊ.dataËCVË.dataÌ
+ì|Í²-Ì.dataÍ	S±€sLÍ.dataÎ
+ÍC
+gÎ.dataÏpËÖ
+Ï.dataÐÏÒŠÐ.dataÑâ¬ÇÑ.dataÒ
+zJèÒ.dataÓ
+î÷Ó.dataÔ
+ºw^&Ô.dataÕ
+MgpÕDÕ.dataÖ]uò7bÖ.data×
++¥
+w×.dataØ
++g}X Ø.dataÙäçâÊŒÙ.dataÚ±*»ÝÚ.dataÛ	àŽôÛ.dataÜ8æÊÜ.dataÝõuÅÓ1Ý.dataÞ
++kvIÞ.dataß
+=š³eß.dataà
++[Ýz:à.dataá
++GÅá.dataâaÇ»â.dataã
+óãgÓã.dataäËvsñä.dataåþuCå.dataæXfPQ*æ.dataç}R.ÛBç.dataè©~[è.dataéÕRxdsé.dataê
+
+ê.dataë
+÷1­©ë.dataì
++äÿÉì.textí*4êåí .debug$Fîí.textïpÛQnmöï .debug$Fð[~$ï.textñ@À
+Çñ _free  _strstr .dataò>ÅZ'ò_tolower _strchr _strdup .debug$Fóñ.textô@ÁÓ>ô .debug$FõôO_numTheRGBRecords_theRGBRecords??_C@_0M@DMAP@YellowGreen?$AA@??_C@_06NJCI@Yellow?$AA@??_C@_0L@DGFJ@WhiteSmoke?$AA@??_C@_05CGP@White?$AA@??_C@_05PPMO@Wheat?$AA@??_C@_09KMIH@VioletRed?$AA@??_C@_06BFLI@Violet?$AA@??_C@_09FGMF@Turquoise?$AA@??_C@_0M@BPCH@Transparent?$AA@??_C@_06PEAM@tomato?$AA@??_C@_07CGCE@Thistle?$AA@??_C@_03NJCN@Tan?$AA@??_C@_09IDAC@SteelBlue?$AA@??_C@_0M@FGPB@SpringGreen?$AA@??_C@_04NPOO@snow?$AA@??_C@_09BOEB@SlateGray?$AA@??_C@_09JEGE@SlateBlue?$AA@??_C@_07PBMA@SkyBlue?$AA@??_C@_06DFJB@Sienna?$AA@??_C@_08IBDC@seashell?$AA@??_C@_08MBEP@SeaGreen?$AA@??_C@_0L@GAGA@SandyBrown?$AA@??_C@_06NKLF@Salmon?$AA@??_C@_0M@IAHK@SaddleBrown?$AA@??_C@_09CLIF@RoyalBlue?$AA@??_C@_09LPFD@RosyBrown?$AA@??_C@_03GOGG@Red?$AA@??_C@_06MJKB@purple?$AA@??_C@_0L@MMBE@PowderBlue?$AA@??_C@_04OEDJ@Plum?$AA@??_C@_04OFAF@Pink?$AA@??_C@_04BAEF@peru?$AA@??_C@_09BKLN@PeachPuff?$AA@??_C@_0L@PNNL@PapayaWhip?$AA@??_C@_0O@PPGC@PaleVioletRed?$AA@??_C@_0O@FCA@PaleTurquoise?$AA@??_C@_09GMBI@PaleGreen?$AA@??_C@_0O@JIDB@PaleGoldenrod?$AA@??_C@_06CFAH@Orchid?$AA@??_C@_09MLEL@OrangeRed?$AA@??_C@_06OLOI@Orange?$AA@??_C@_09BDMI@OliveDrab?$AA@??_C@_07HPBN@OldLace?$AA@??_C@_08FJBA@NavyBlue?$AA@??_C@_04PGEO@Navy?$AA@??_C@_0M@POIL@NavajoWhite?$AA@??_C@_08CJCK@moccasin?$AA@??_C@_09KEPN@MistyRose?$AA@??_C@_09GHMI@MintCream?$AA@??_C@_0N@BIEM@MidnightBlue?$AA@??_C@_0BA@MMKI@MediumVioletRed?$AA@??_C@_0BA@DGOK@MediumTurquoise?$AA@??_C@_0BC@HJAL@MediumSpringGreen?$AA@??_C@_0BA@PEEL@MediumSlateBlue?$AA@??_C@_0P@OOCE@MediumSeaGreen?$AA@??_C@_0N@EPMH@MediumPurple?$AA@??_C@_0N@BHGF@MediumOrchid?$AA@??_C@_0BA@KLPL@MediumGoldenrod?$AA@??_C@_0BC@DACG@MediumForestGreen?$AA@??_C@_0L@OLEL@MediumBlue?$AA@??_C@_0BB@LEGJ@MediumAquamarine?$AA@??_C@_06FEAG@Maroon?$AA@??_C@_07IGIM@Magenta?$AA@??_C@_05KJOE@linen?$AA@??_C@_09DMBK@LimeGreen?$AA@??_C@_0M@ICLH@LightYellow?$AA@??_C@_0P@BDLF@LightSteelBlue?$AA@??_C@_0P@IOPG@LightSlateGray?$AA@??_C@_0P@END@LightSlateBlue?$AA@??_C@_0N@NNJL@LightSkyBlue?$AA@??_C@_0O@HGGD@LightSeaGreen?$AA@??_C@_0M@IBCK@LightSalmon?$AA@??_C@_09CLEE@LightPink?$AA@??_C@_09OLGA@LightGray?$AA@??_C@_0BF@JONP@LightGoldenrodYellow?$AA@??_C@_0P@FLGD@LightGoldenrod?$AA@??_C@_09OEDD@LightCyan?$AA@??_C@_0L@HKLN@LightCoral?$AA@??_C@_09GBEF@LightBlue?$AA@??_C@_0N@FJKA@LemonChiffon?$AA@??_C@_09KOFD@LawnGreen?$AA@??_C@_0O@PPHN@LavenderBlush?$AA@??_C@_08FMGG@lavender?$AA@??_C@_05FBHM@Khaki?$AA@??_C@_05KJCE@ivory?$AA@??_C@_09FMMG@IndianRed?$AA@??_C@_07CCJC@HotPink?$AA@??_C@_08LHFL@honeydew?$AA@??_C@_0M@JGIF@GreenYellow?$AA@??_C@_05DKMC@Green?$AA@??_C@_06CJBB@Gray99?$AA@??_C@_06IDIG@Gray98?$AA@??_C@_06ICNL@Gray97?$AA@??_C@_06CIEM@Gray96?$AA@??_C@_06NHPF@Gray95?$AA@??_C@_06HNGC@Gray94?$AA@??_C@_06CIIH@Gray93?$AA@??_C@_06ICBA@Gray92?$AA@??_C@_06HNKJ@Gray91?$AA@??_C@_06NHDO@Gray90?$AA@??_C@_05KOJK@Gray9?$AA@??_C@_06DPLL@Gray89?$AA@??_C@_06JFCM@Gray88?$AA@??_C@_06JEHB@Gray87?$AA@??_C@_06DOOG@Gray86?$AA@??_C@_06MBFP@Gray85?$AA@??_C@_06GLMI@Gray84?$AA@??_C@_06DOCN@Gray83?$AA@??_C@_06JELK@Gray82?$AA@??_C@_06GLAD@Gray81?$AA@??_C@_06MBJE@Gray80?$AA@??_C@_05EAN@Gray8?$AA@??_C@_06OLLK@Gray79?$AA@??_C@_06EBCN@Gray78?$AA@??_C@_06EAHA@Gray77?$AA@??_C@_06OKOH@Gray76?$AA@??_C@_06BFFO@Gray75?$AA@??_C@_06LPMJ@Gray74?$AA@??_C@_06OKCM@Gray73?$AA@??_C@_06EALL@Gray72?$AA@??_C@_06LPAC@Gray71?$AA@??_C@_06BFJF@Gray70?$AA@??_C@_05FFA@Gray7?$AA@??_C@_06PNBA@Gray69?$AA@??_C@_06FHIH@Gray68?$AA@??_C@_06FGNK@Gray67?$AA@??_C@_06PMEN@Gray66?$AA@??_C@_06DPE@Gray65?$AA@??_C@_06KJGD@Gray64?$AA@??_C@_06PMIG@Gray63?$AA@??_C@_06FGBB@Gray62?$AA@??_C@_06KJKI@Gray61?$AA@??_C@_06DDP@Gray60?$AA@??_C@_05KPMH@Gray6?$AA@??_C@_06MGOP@Gray59?$AA@??_C@_06GMHI@Gray58?$AA@??_C@_06GNCF@Gray57?$AA@??_C@_06MHLC@Gray56?$AA@??_C@_06DIAL@Gray55?$AA@??_C@_06JCJM@Gray54?$AA@??_C@_06MHHJ@Gray53?$AA@??_C@_06GNOO@Gray52?$AA@??_C@_06JCFH@Gray51?$AA@??_C@_06DIMA@Gray50?$AA@??_C@_05FAHO@Gray5?$AA@??_C@_06NAEF@Gray49?$AA@??_C@_06HKNC@Gray48?$AA@??_C@_06HLIP@Gray47?$AA@??_C@_06NBBI@Gray46?$AA@??_C@_06COKB@Gray45?$AA@??_C@_06IEDG@Gray44?$AA@??_C@_06NBND@Gray43?$AA@??_C@_06HLEE@Gray42?$AA@??_C@_06IEPN@Gray41?$AA@??_C@_06COGK@Gray40?$AA@??_C@_05PKOJ@Gray4?$AA@??_C@_06LBBA@Gray39?$AA@??_C@_06BLIH@Gray38?$AA@??_C@_06BKNK@Gray37?$AA@??_C@_06LAEN@Gray36?$AA@??_C@_06EPPE@Gray35?$AA@??_C@_06OFGD@Gray34?$AA@??_C@_06LAIG@Gray33?$AA@??_C@_06BKBB@Gray32?$AA@??_C@_06OFKI@Gray31?$AA@??_C@_06EPDP@Gray30?$AA@??_C@_05KPAM@Gray3?$AA@??_C@_06KHLK@Gray29?$AA@??_C@_06NCN@Gray28?$AA@??_C@_06MHA@Gray27?$AA@??_C@_06KGOH@Gray26?$AA@??_C@_06FJFO@Gray25?$AA@??_C@_06PDMJ@Gray24?$AA@??_C@_06KGCM@Gray23?$AA@??_C@_06MLL@Gray22?$AA@??_C@_06PDAC@Gray21?$AA@??_C@_06FJJF@Gray20?$AA@??_C@_05FJL@Gray2?$AA@??_C@_06JMEF@Gray19?$AA@??_C@_06DGNC@Gray18?$AA@??_C@_06DHIP@Gray17?$AA@??_C@_06JNBI@Gray16?$AA@??_C@_06GCKB@Gray15?$AA@??_C@_06MIDG@Gray14?$AA@??_C@_06JNND@Gray13?$AA@??_C@_06DHEE@Gray12?$AA@??_C@_06MIPN@Gray11?$AA@??_C@_07LNPC@Gray100?$AA@??_C@_06GCGK@Gray10?$AA@??_C@_05PKCC@Gray1?$AA@??_C@_05FALF@Gray0?$AA@??_C@_04CFCB@Gray?$AA@??_C@_09MLNE@Goldenrod?$AA@??_C@_04IKOF@Gold?$AA@??_C@_0L@BOIA@GhostWhite?$AA@??_C@_09IPPN@gainsboro?$AA@??_C@_0M@BPNM@ForestGreen?$AA@??_C@_0M@HDMO@FloralWhite?$AA@??_C@_09HFBF@Firebrick?$AA@??_C@_0L@CGBN@DodgerBlue?$AA@??_C@_07PCNH@DimGray?$AA@??_C@_0M@NMOH@DeepSkyBlue?$AA@??_C@_08DNID@DeepPink?$AA@??_C@_0L@KPGJ@DarkViolet?$AA@??_C@_0O@ILHE@DarkTurquoise?$AA@??_C@_0O@MDPA@DarkSlateGray?$AA@??_C@_0O@EJNF@DarkSlateBlue?$AA@??_C@_0N@HACN@DarkSeaGreen?$AA@??_C@_0L@GAGE@DarkSalmon?$AA@??_C@_0L@JPNG@DarkOrchid?$AA@??_C@_0L@FBDJ@DarkOrange?$AA@??_C@_0P@FDEE@DarkOliveGreen?$AA@??_C@_09IAEP@DarkKhaki?$AA@??_C@_09OLPB@DarkGreen?$AA@??_C@_0O@BGGF@DarkGoldenrod?$AA@??_C@_04CKHC@Cyan?$AA@??_C@_08HADN@cornsilk?$AA@??_C@_0P@FDIN@CornflowerBlue?$AA@??_C@_05OFHD@Coral?$AA@??_C@_09HKOG@chocolate?$AA@??_C@_0L@CAIG@chartreuse?$AA@??_C@_09GABH@CadetBlue?$AA@??_C@_09LPGI@burlywood?$AA@??_C@_05GJBG@Brown?$AA@??_C@_0L@DNNE@BlueViolet?$AA@??_C@_04KPAE@Blue?$AA@??_C@_0P@HJDN@BlanchedAlmond?$AA@??_C@_05IFEB@Black?$AA@??_C@_06DBBO@Bisque?$AA@??_C@_05OLFG@Beige?$AA@??_C@_05FBBK@Azure?$AA@??_C@_0L@EOAJ@Aquamarine?$AA@??_C@_0N@NNFJ@AntiqueWhite?$AA@??_C@_09PCLJ@AliceBlue?$AA@_xpmReadRgbNames_xpmGetRgbName_xpmGetRGBfromName_xpmstrcasecmp??_C@_04NFMJ@grey?$AA@_xpmFreeRgbNames
++RdFToI.obj/     1345987752              100666  3302      `
++Lš$:P~7.drectvePD
++.text€
+ P`.debug$F"HB.textp, P`.debug$FÎÞHB.textpèX
+ P`.dataÐ@0À.dataà@0À.dataä@0À.dataæ@0À.dataù@0À.debug$Fü
+HB.text0F P`.debug$FdtHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ì\D$PèL$
+Qè$lT$@RPèÄ
+À
+VŽ$t
+öWVèL$$VQè$T$,VD$R$PQ$D$\RPQèøÄ(
+ÿ|L$ T$QRVèÄ
+D$ PèÄL$@QèT$
+RèÄÇ_^Ä\Ã$t$pjT$
+jRP$xT$PQRPèÄ
+øë¬
+(J
+U
+
+
++š	µ2¿ø
+ì$VŽ$0WVèŒ$<Wè$8D$PQèÄ
+Àu
+WT$
+VRèðD$PèÄÆ_^Ä$Ã
+0CO2aìSU¬$
+V
+íWu(Ž$ÇFÇÇF_^]3À[ÄÃýÉÿ3Àò®÷ÑIùÿ~ct/þž
+Ñ:Ëu
+ÒtH^Ñ:ËuÀÆÒuÜ3ÀëÀØÿ
+Àu)Ž$UT$hRÇèD$
+hPëjÿt/ýž
+Ê:Óu
+ÉtP^Ê:ÓuÀÆÉuÜ3ÀëÀØÿ
+ÀuHŽ$UD$hPÇèL$
+hQèÄF
+À
+ùþÿÿ_^]Èÿ[ÄÃhUèŽ$ Ä
+ÀF
+Åþÿÿ_^]Èÿ[ÄÃ-U,)£&¬%Á"&%
+
+?%Egunzip -qc "%s".gzruncompress -c "%s".ZlL$HtHu
+APèÄÃA=tPèYÃ4
+-%3+2.fileþÿgRdFToI.c@comp.idè
++ÿÿ.drectvePSîuj.text
+â@2Ì  ) 9 K b r 
+  .debug$FÑ¯U¶.textpç/ÞºŠ œ .debug$FÎêÃÌ.textp
+AÑpHË _fopen __popen .dataÂTAÙ.dataÔ¥Ø	.data	t	
+ 	_sprintf .data
++]YVë3
++.data
+4Þrf
+__iob.debug$F
+.text
+01À
+|
+ _fclose __pclose .debug$F
+_XpmReadFileToImage_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage_XpmReadFileToXpmImage_xpmParseData_OpenReadFile??_C@_0BA@KGGB@gunzip?5?9qc?5?$CC?$CFs?$CC?$AA@??_C@_03HPHD@?4gz?$AA@??_C@_01LHO@r?$AA@??_C@_0BD@HFNL@uncompress?5?9c?5?$CC?$CFs?$CC?$AA@??_C@_02BKNP@?4Z?$AA@_xpmDataCloseRdFToDat.obj/   1345987752              100666  756       `
++Lš$:P.drectveP
++.textpÜL P`.debug$FtHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ì8Vt$D
+öÇD$
+tÇT$@D$
+L$PQRèÄ
+
+Àu+D$
+L$PQVèT$ðRèD$,PèÄÆ^Ä8Ã*
+A
++M	We.fileþÿgRdFToDat.c@comp.idè
++ÿÿ.drectvePÍß¿æ.textp+)±  ' 8 S .debug$Fj_XpmReadFileToData_XpmFreeXpmInfo_XpmFreeXpmImage_XpmCreateDataFromXpmImage_XpmReadFileToXpmImageRdFToBuf.obj/   1345987752              100666  1081      `
++Lš$:P~.drectvePŽ
++.textðô
+ P`.datab@0À.debug$FdtHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$L$ì$ÇSVWjQèðÄ
+ö}
++_^Èÿ[Ä$ÃT$
+RVèÄ
+ÀtVèÄÈÿ_^[Ä$ÃhVèØÄ
+ÛuVèÄÈÿ_^[Ä$Ã|$ GPèðÄ
+öuSèÄžýÿÿÿ_^[Ä$ÃUSWjVèSèèÄ;ï]tVèÄÈÿ_^[Ä$ÃL$8Æ>_3À1^[Ä$Ã6CU[
+j
+
++­	µ
++Ãrç	.fileþÿgRdFToBuf.c@comp.idè
++ÿÿ.drectvePüûíC.textð
+Zù _free _fread _fclose  __fdopen .datat	
+._close __fstat _open .debug$FA_XpmReadFileToBuffer_boundCheckingMalloc??_C@_01LHO@r?$AA@
++misc.obj/       1345987752              100666  2557      `
++Lš$:P6.drectveP
++.textPä P`.debug$F4DHB.text`N® P`.data:@0À.dataK@0À.data
+Z@0À.dataf@0À.datau@0À.data
+@0À.data@0À.debug$F¬HB.text¶ P`.debug$FÆÖHB.textàð P`.debug$Fú
++HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES W|$
+3À3Ò
+ÿv7Vt$
+ù0|ù9ŸÉFB;×DAÐrä
+Ò^t;×u
+T$_žÃ3À_ÃHD$Àøw+ÿ$
+žÃžÃžÃžÃžÃžÃžÃI(&" 
+&,28@DHLP#T'Invalid XpmErrorXpmColorFailedXpmNoMemoryXpmFileInvalidXpmOpenFailedXpmSuccessXpmColorErrorX
+žËvÃ-D$PèYÃ3
+2.fileþÿgmisc.c@comp.idè
++ÿÿ.drectveP.textP
+h
++æ .debug$FNLÌ.text`PÒ¥E .data¡-R!.data|)G$L530701.data
+;;])i$L53068+.dataó]h$L53066%.data	IŒ6ª	$L53064.data
++
+Ç_NòË
++$L53062.data
+q2Eüé
+$L53060$L53096@.debug$F
+.text
+¡Ñh
++
+ .debug$F
+.textÒÖt·_XpmFree _free .debug$F
+_xpmatoui_XpmGetErrorString??_C@_0BB@CHCJ@Invalid?5XpmError?$AA@??_C@_0P@MINL@XpmColorFailed?$AA@??_C@_0M@KHPB@XpmNoMemory?$AA@??_C@_0P@PLPG@XpmFileInvalid?$AA@??_C@_0O@FNPH@XpmOpenFailed?$AA@??_C@_0L@POMH@XpmSuccess?$AA@??_C@_0O@PNEN@XpmColorError?$AA@_XpmLibraryVersion
++Info.obj/       1345987752              100666  1477      `
++L	š$:P.drectveP|
++.text Ì P`.debug$FìüHB.text P`.debug$F®ŸHB.text0È P`.debug$FøHB.text` P`.debug$FrHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$3É;ÁtHHH
+H
+HÃVt$W3ÿ;÷tcöÄt9F;Çt
+PèÄ~F;Çt
+PèÄ~F
+;Çt
+PèÄ~
+öÄtF;ÇtPF
+PèÄ~
+~>_^Ã
+/B`
+r
+D$L$ÇöÆtÇöÆtÍÃ*D$L$ÇöÆtÇQHPQLPQPP
+öÆtÎQ<P
+Q8PötÊQPI
+HÃ`.fileþÿgInfo.c@comp.idè
++ÿÿ.drectveP.text urÒÏ .debug$FaRþ.textŸFTP $ _free .debug$F.text00ùÄÎ7 .debug$F.text`,2/G .debug$F	S_xpmInitXpmInfo_XpmFreeXpmInfo_XpmFreeExtensions_xpmSetInfoMask_xpmSetInfo
++Image.obj/      1345987752              100666  815       `
++Lš$:PÄ.drectvePÜ
++.text, P`.debug$F<LHB.text@V P`.debug$FªºHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES D$3ÉH
+HHÃVt$F
+Àt
+N
+QPèÄF
+Àt	PèÄÇF^Ã"
+2
+.fileþÿgImage.c@comp.idè
++ÿÿ.drectveP.text¬ô .debug$F³wv.text@êÅà _free & .debug$F9_xpmInitXpmImage_XpmFreeXpmImage_xpmFreeColorTable
++hashtab.obj/    1345987751              100666  2249      `
++L
+§$:PŒ%.drectveP
+
++.text l P`.debug$F
+
+HB.text`& P`.debug$F€ŽHB.text ŸÞ P`.debug$FèøHB.text P`.debug$F°ÀHB.textPÊ P`.debug$F$4HB.textP> P`.debug$F¢²HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES T$SUVt$
++3ÀWn
+L$ÉtøÁç+øŸÁJÇBÉuì
+3Ò÷óL
+É|tL	T$8u1t$Ð:u
+ÒtAÐ:FuÁÆÒuà3ÉëÉÙÿ
+Étï;ýs|ü
+ÉuŽÇ_^][ÃS\$
+Vt$
+WSVèøÄ?u;D$PSèÄ
+Àu	_^žýÿÿÿ[ÃFN;Á|VèÄ
+Àu	F@F3À_^[Ã#E]
+jèÄ
+Àt
+L$T$PÃ
+SUVt$Wn
+Ø
+žVUUU÷éÂ<ÁèÐWVèÄ
+Àu
++_^]žýÿÿÿ[Ã
+F
+;Èv
+é;ÈÇwó
+Ûý~
+
+ÀtQVèÄÇKuäUèÄ3À_^][Ã.k~Vt$hÇÇFUÇFèÄ
+Àužýÿÿÿ^Ã
+;Èv
+é;ÈÇwóF
+3À^ÃN
+S\$W{
+
+ÿt2V4;÷vFüî
+Àt	PèÄ;÷wéWèÄÇC
+^_[Ã#0B".fileþÿghashtab.c@comp.idè
++ÿÿ.drectveP.text  kLP .debug$F.text`ëtï .debug$FSõm2.text ê±S±  * .debug$F.textŸÒµÓ? _free .debug$F	.text
++P1ŒùO
++ .debug$F
+
++.text
+Pq}Œa
+ .debug$F
+
+s_xpmHashSlot_xpmHashIntern_AtomMake_boundCheckingMalloc_HashTableGrows_xpmHashTableInit_xpmHashTableFree
++data.obj/       1345987751              100666  8777      `
++L%§$:Pœx.drectvePÜ
++.data,Ž@@À.data@0À.data@0À.data£@0À.dataª@0À.data¬@0À.data±@0À.dataµ@0À.dataœ@0À.dataË@0À.dataÎ@0À.dataÑ@0À.dataÔ@0À.dataÖ@0À.dataØ@0À.bss0À.data6Ú@0À.data@0À.textÐ$ô	 P`.debug$FD
++T
++HB.text^
++n
+ P`.debug$F 
+°
+HB.text º
+Z P`.debug$FðHB.text@
++J P`.debug$F^nHB.text`xØ
+ P`.debug$FZjHB.textptä P`.debug$FøHB.text`r
+ P`.data@0À.data@0À.data@0À.data@0À.debug$F£³HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES 
++""""<84
+1.4
+4 4$4(+,(0%8"<@
+DHLP.X.\`
+d
++))
++ '(
++(setq ;Lisp};
++[] = {
++static char *,
++*//*C
++!$Id: xpm.shar,v 3.71 1998/03/19 19:47:14 lehors Exp $$XpmVersion: 3.4k $Vt$W
+ÀuF
+N@_F
+3ÀV^Ãø
+œ
+ÒtF@ÉFt:Êt
++@ÉFuò
+ÀtFNAÀNS:
+G
+Ét
+:u	VèÄNAÀNuÐ_3À^Ã
+À~G:ÊFu Vè~ÄG:ÊFtàH_F3À^Ã
+~Àt-GHGx
+3ÀAë	WèÄŸ
+;ÁtøÿuÓ
+ÀtIGHGx
+3ÀAë	WèÄŸ
+;Âtjøÿte
+ÉtÉŸ	;ÁuÂVèÄë·
+Àt?GHGx
+3ÀAë	WèÄŸ
++;Áu
+VèÄëËWPèÄ_3À^ÃFÀF
++AAAkFAªF¶@Â?SUl$
+VW}
+º
+]Ó3ÿ
++µMABGFM:ÁuÉtÀuä>tE+Ç_E^]3À[Ãó3Éœ:t#ÀtUBùÿUuó3ÉFA:ÂuÝMUBùÿUuó3ÉFAG:ÂuÒtÀuØ?u¡E_H^E]3À[Ã
+]uÇD$œCHCx
+
+3ÀA
+ë	SèÄT$FBGT$ŸÑ;Âu	ÉtøÿuÄ?t$|$
+ÿÒŸSPèÄNOuï_^]3À[Ãu3ÿL$:t=øÿt8CHCx
+
+3ÀA
+ë	SèÄÿÿuu3ÿL$FG:ÂuÃ}CHCx
+
+3ÀA
+ë	SèÄÿÿuu3ÿL$FGAL$	ŸÑ;Âu	Étøÿu·L$9
+ZÿÿÿŸÐSRèÄ_^]3À[ÃA=@AŒA@FQSUVW|$3íl$
+ÀäøÛwFHFx
+3Û@ë
+VèÄØûÿt0=~
+jSèÄë
+¡Xà
+Àt
+Ÿ
+;Ùu¬l$
+=~
+jSèÄë
+Zà
+ÀuFŸ
+;Øt;ûÿt6L$D$ ;Ès*]FEAHL$Fx
+3Û@ë¡VèÄØëVSèD$Ä_^][YÃ=~WjŸ2VèÄëG
+Ÿ0qà
+ÀtŸ
+;òtÿGëŸt$
+GŸ@FG^ÿ¡Eø~
+jSèÄë
+¡Xà
+ÀuŸ
+;Ùt;l$ rºGMHG_Å^][YÃ;AKNVM`LNMLÞAì@ÿNM
+LRN`MjLKL$ìD$hPQè$RPD$PèÄÃK)T4Sì
+SU¬$VW3öE3ÿ
+À®ø¥ED$HIHx
+3ÛAë
+PèÄØûÿu_^]žþÿÿÿ[Ä
+ÃD$
+jÇD$D$èŸ
+Ä;Ùøûÿ|$uF®UWèÄ
+À²øT$
+hÆRPèõ¬$,Ä
+ÇD$D$
+ëD$T$@BD$D$T$HIHx
+3ÛAë
+PèÄØŸ
+
+;Ø
+aÿÿÿûÿuWèÄžþÿÿÿ_^][Ä
+ÃL$1
+ÀD$t[@PWèèÄ
+íuWèÄžýÿÿÿ_^][Ä
+ÃT$D$
+R
+.PQýèt$ T$$Ä
+Æ.FRSèÄë}T$ÆRSŸèÄëe]
+Ût^Ÿ
+ÀtŸ
+;ÁtuFÆuŸ
+Àuìu+óFVèøÄ
+ÿu_^]žýÿÿÿ[Ä
+ÃVSWèEÄ
+
+ÀtÆD7ÿ$$$(81_^]3À[Ä
+ÃFAw]«\Ê[A5Z_\nZ[­@Å@ÿ] [RYVt$>uD$
+^Ç3ÀÃF
+Àt4@WPè|$VNQRPèNÄÆÇF_3À^ÃT$
+3À^ÇÃ#]7[abìSUVŽ$3Û3íW;Ã-D$hPVÆ
+Æ
+
++èÄ
+ø
+L$PQhèÄ
+
+ÀujT$hRVèøÄ
+;ûu_^]žþÿÿÿ[ÄÃD$j_PÆD<èÄ;ÃtØ+øL<QPhèÄ
+
+Àu¿œ® é¶T$hRVèÄ
+øu+PD$PhèÄ
+
+ÀÜ_^]žþÿÿÿ[ÄÃø
+cÿÿÿL$PQhèÄ
+
+À
+HÿÿÿT$hRVèØ¡Ä
+
+Àt)žøL$SQRèÄ
+
+Àt
+O Ç EÇ
+ÉuÞ3Û ýÁç9èþÿÿ;ëuK¡V
+è
+Ä
+ 
+
+_^]3À[ÄÃœë ;Ãu5
+V
+Æ
+è
+Ä
+3À_^][ÄÃVèÄ_^]3À[ÄÃEK\uarxK¢q¶p»râKõmúr)j.rIKP\lr¢¯º?ÀÎî#?)E?XPM2XPM_format#defineYg.fileþÿgdata.c@comp.idè
++ÿÿ.drectveP&óPx.data.dataQuI.dataQG0/.data§áÜL.data8ï²<i.data>¢¥¢.dataºK.data	ãÞ*Ž	.data
++zÌÝ
++.data
+WžË
+.data
+[ûÆ'
+.data
+õÍz\3
+.dataÆ
+TÛL.dataèïú`.dataãt.bss_RCS_Id.data6gÊ=Ö.dataÞcã.textÐÖä¶§ _ungetc __filbuf .debug$F.textï3Ìš
+ .debug$F§Ê®ù.text ê«ò, __pctype9 C.debug$FMï.text@¢OýQ \ .debug$FNÇÉ.text
+`
+eØŠf
+ _free _strncpy t  .debug$F
+
+.text
+pznÔŠ
+ .debug$F|'
+.text `
+-x£ª  .data!JÁ\Vº!.data"µ8Ò'Ñ".data#®€ÚÕæ#_strrchr _strncmp .data$ÐŠZÿ$.debug$F% 
+_xpmDataTypes??_C@_03PHEM@?$CJ?$CJ?6?$AA@??_C@_04DHGG@?5?8?$CI?6?$AA@??_C@_06EHEH@?$CIsetq?5?$AA@??_C@_01FAJB@?$DL?$AA@??_C@_04JOHA@Lisp?$AA@??_C@_03FMCK@?$HN?$DL?6?$AA@??_C@_07KOPO@?$FL?$FN?5?$DN?5?$HL?6?$AA@??_C@_0O@JACJ@static?5char?5?$CK?$AA@??_C@_02DLDK@?0?6?$AA@??_C@_02BOOO@?$CK?1?$AA@??_C@_02FCCF@?1?$CK?$AA@??_C@_01FKHJ@C?$AA@??_C@_01BJG@?6?$AA@??_C@_01PIHH@?$CB?$AA@??_C@_00A@?$AA@??_C@_0DG@BPGN@$Id?3?5xpm?4shar?0v?53?471?51998?103?119?5@_RCS_Version??_C@_0BE@OAMJ@$XpmVersion?3?53?44k?5$?$AA@_xpmNextString_ParseComment_xpmNextWord__isctype___mb_cur_max_xpmNextUI_xpmatoui_xpmGetString_boundCheckingRealloc_boundCheckingMalloc_xpmGetCmt_xpmParseHeader??_C@_04HCLL@XPM2?$AA@??_C@_03FMK@XPM?$AA@??_C@_07NAB@_format?$AA@??_C@_07GIIJ@?$CDdefine?$AA@
++CrIFrDat.obj/   1345987751              100666  1726      `
++L§$:PÖ
+.drectveP,
++.textð|l
++ P`.debug$FÐàHB.textPê: P`.debug$FbrHB.text@| P`.debug$FŒÌHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ì\D$VWPèL$$Qè$tT$HRPèŽ$Ä
+ötVèL$$VQè$T$,VD$R$PQ$D$\RPQèøÄ(
+ÿ|L$ T$QRVèÄ
+D$ PèÄL$QèÄÇ_^Ä\Ã$t$pjT$
+jRP$xT$PQRPèÄ
+øë¶*>
+I
+v
+
++	©â
+íì$VŽ$0WVèŒ$<Wè$8D$PQèWT$
+VRèÄ
+_^Ä$Ã
+0<LD$T$3ÉPH
+PH
+
+ Ã9.fileþÿgCrIFrDat.c@comp.idè
++ÿÿ.drectvePSîuj.textð
++ÞÓ 
+ - = O f v   .debug$FÑ¯U¶.textP9jC(ª Å .debug$F.text@]
+
+Ó .debug$FÞ_XpmCreateImageFromData_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage_XpmCreateXpmImageFromData_xpmParseData_OpenArrayCrIFrBuf.obj/   1345987751              100666  1699      `
++L§$:P¶
+.drectveP,
++.textð|l
++ P`.debug$FÐàHB.textPê: P`.debug$FbrHB.text | P`.debug$F¬HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ì\D$VWPèL$$Qè$tT$HRPèŽ$Ä
+ötVèL$$VQè$T$,VD$R$PQ$D$\RPQèøÄ(
+ÿ|L$ T$QRVèÄ
+D$ PèÄL$QèÄÇ_^Ä\Ã$t$pjT$
+jRP$xT$PQRPèÄ
+øë¶*>
+I
+v
+
++	©â
+íì$VŽ$0WVèŒ$<Wè$8D$PQèWT$
+VRèÄ
+_^Ä$Ã
+0<LD$L$ÇHÇ@Ã.fileþÿgCrIFrBuf.c@comp.idè
++ÿÿ.drectvePSîuj.textð
++ÞÓ 
+ / ? Q h x   .debug$FÑ¯U¶.textP9jC(¬ É .debug$F.text E¶€Á× .debug$Fã_XpmCreateImageFromBuffer_XpmFreeXpmImage_XpmFreeXpmInfo_xpmSetAttributes_xpmParseDataAndCreate_xpmSetInfoMask_xpmInitAttributes_xpmInitXpmInfo_xpmInitXpmImage_XpmCreateXpmImageFromBuffer_xpmParseData_OpenBuffer
++create.obj/     1345987751              100666  11128     `
++L§$:P"[.drectvePÔ
++.textP$t P`.debug$FHB.text°¢R P`.debug$FV	f	HB.textPp	À
+
+ P`.data8@0À.debug$F=MHB.textW P`.debug$FgwHB.textPÑ P`.debug$FåõHB.textÀÿ¿ P`.debug$FÓãHB.text í
+ P`.debug$F'HB.text`1 P`.debug$F«HB.textµ5 P`.debug$FScHB.text`mÍ' P`.debug$FScHB.textÀm-!" P`.debug$F""HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES S\$Vt$WÀt+>t&ŸÀPèŸQøèÈÄ;ùuCCFÀuÕŸŸ_^+Â[ÃÇ_^+Á[Ã&Pì,D$8SUV3öW;Æt$t$
+ÇD$$t$t$t$(t$8t0D$L;Æt0|$Pl$@;þt
++ötGëUèPUèÄ
+;þD$ töt	OL$0ëUèPUèÄ
+D$0;þtöt	W
+T$,ëUèPUèÄ
+D$,;þt÷t	G|D$@ëÇD$@;þt÷t
+L$4ëÇD$4t$DV
+ÁâRèØÄ
+Û\$Du
+_^]žýÿÿÿ[Ä,ÃF
+ÁàPèÄD$P
+Àu
++»ýÿÿÿé0N
+ÁáQèÄD$
+Àu
++»ýÿÿÿéV
+ÁâRèÄD$
+Àu
++»ýÿÿÿéîL$8T$(QPD$RT$\L$0PF
+QNRSPQWUèØÄ,
+Ût
+µ
+ÿtöÄt
+GX
+À
+D$H
+ÀtRL$,D$@ùtžT$RVRRPD$0QPUèØÄ
+
+ÛucL$DVFQRT$ PQRUèÄ|$$äD$L
+ÀØND$
+PD$DQL$(RPjQUèØÄ
+
+ÛD$
+Àt	PèÄD$
+
+Àt	PèÄT$DRèD$TÄ
+Àt	PèÄD$(
+Àtt$jPD$8VPUÿT$HÄët$
+öt	VèÄD$
+ÀŒPèÄÃ_^][Ä,ÃL$PVFQRT$$PQRUèÄD$DPèL$TQèÄ
+ÿt
+öÄtT$D$8L$$W$G(OTë
+T$RèÄ
+ÿt÷tD$L$(GpOtë
+T$RèÄD$H
+ÀtL$D$L
+ÀtT$
+_^Ã][Ä,ÃU\{¡šì2ü"Cd£û8>Z8u€Ôé>
+(W­
+
+ì0SUVt$D3íW;õl$0tö@tF,N0D$8L$ël$;õtöt	VT$ë|$DWèPWèÄ
+D$;õt
++ötFë|$DWèPWèÄ
+;õD$,töÄ@t	NlL$
+ëT$RèÄD$
+;õt÷t
+D$(ëÇD$(;õt÷ t
+L$$ël$$D$
+èt$HtHt
++ÇD$ë
+ÇD$ëÇD$ëÇD$9l$P\$TT$3ÿ;×|$ wD$LL$8|$4L$T@D$<ÝëD$<9
+ÿtE
+Àt=ðÇÊ:u
+ÉtPÊ:VuÀÆÉuà3ÀëÀØÿt$HL$T
+À
+ÿujQ
+ÒtcD$L$L<
+
+ÿu
+yüéH
+ÿtõø}$D$@øL$L
+9u	@Áø~òø|L$L
+ÀtPRèÄ
+Àt"L$TD$4T$@Á
+;ÂD$4L$T+ÿÿÿëL$TT$D$4;Âtq9qA
+ÀfL$$T$(QL$pRT$pjjVQL$|RT$|QL$|RT$|QL$TRT$pSUPD$LPQRèÄD
+Àu
++ÇD$ ëÇD$0D$ |$
+
+ÀuwD$L4žÿvk
+ÀtWL$$T$(QL$LRT$tjjQL$|RT$|QL$|RT$|QL$|RT$<QL$pSUPD$dRPQèÄD
+ÀtÇD$0OîëÇD$ T$
+D$ 
+Àr
+ÃD$L<°þé
+ÀtWL$$T$(QL$LRT$tjjQL$|RT$|QL$|RT$|QL$|RT$<QL$pSUPD$dRPQèÄD
+Àt^ÇD$0FÇëQA
+Àt$hPèÄ
+ÀuD$XL$\Ç)ë
++T$XÇD$l|$hAët$H|$LL$XD$PEÇÃÁ;è|$LL$XôüÿÿD$0_^][Ä0Ã_^]žüÿÿÿ[Ä0ÃFMls!¿&ý-
+--Á
+ÇNoneG
+
+žÃ!D$
+S\$Vt$W|$
+ÀtVPWSèÄ
+Àu_^Èÿ[ÃVWSèÄ
+÷ØÀ_^[÷ØÃ
+(2'C&ìVt$
+hVèÄ
+ÀtyD$PT$L$PD$QVRPÿT$`Ä
+À}
++ž^ÄÃu
++ž^ÄÃD$4t$0T$L$BD$$T$(t$8D$<Ç
+A^3ÀÄÃD$$L$(T$,^ÇD$
+Çÿÿÿ3ÀÄÃ	
+ž-D$L$
+T$jPD$
+QRPèÄÃ32L$
+ùvž ëž;ÁÀàÀT$jPD$
+RT$
+PD$jjRQL$$PQèT$DÄ(÷ØÀàÀýÃA9Y8D$T$SW|$
+QPÿD$
+D$3Û
+Àv8Ul$V3ö
+ív!T$(ÇPD$SVQÿF;õrßD$ C;ØrÐ^]D$
+T$
+RQÿ_[Ã@L?n@u>ì|$S3ÛUV;ÃW\$8\$<ÇD$X\$\$\$ \$(\$\\$p\$l\$`\$$\$L\$P\$Tt$;ÃtŒ$šŽ$;ût
++ötGëVèPVèÄ
+;ûD$Htöt	OL$dëVèPVèÄ
+D$d;ûtöt	W
+T$@ëVèPVèÄ
+D$@;ût÷t	G|D$DëÇD$D;ût÷t
+L$hëÇD$h$€;ÃtöÅtŸë3ö¬$t$4UèÄ;Ã
+üT$`D$lRL$|PT$|QD$(RL$ PT$DQD$DRPUèÄ$;Ã
+Ã;ótL$LQUèÄ|$
+v
+|$vT$|RèÄ;Ã
+T$
+D$|L$$PD$QRPUèðÄ;ó
+9\$4tL$PQUèÄT$PèÄ;ÃD$u
++ŸýÿÿÿéEL$RèÄ;ÃD$u
++ŸýÿÿÿéD$
+
+QèÄ;ÃD$ u
++ŸýÿÿÿéùT$PèÄ;ÃD$(u
++ŸýÿÿÿéÓT$(L$pQL$$D$`RPD$$T$dQL$$RT$$PD$<Q$¬RPWQèðÄ,;ót;ûtöÄt	9_X
+u9$tEL$@ž;ÈuD$DL$0T$8RT$0QL$PR$PD$PPQRèðÄ
+;ó
+'|$Xt>9$t5L$0T$,D$<PD$HQL$PR$PjQRèðÄ
+;ó
+ßD$L$<T$PD$<QRT$0$PD$,QL$$RT$HPD$HQ$°RPUQèT$DðRèD$L\$HPèÄ8;ó\$uw|$
+v|$v
+L$|QèÄ9\$4tT$TRUèÄ$€;Ã8öÅ-D$`;Ã$€HÀ
+QPUèðÄ
+;óÿ|$
+v|$v
+T$|RèÄD$$;ÃtL$QPèÄD$L;Ãt	PèÄD$P;Ãt	PèÄD$T;Ãt	PèÄD$8;Ãt	PèÄD$<;Ãt	PèÄD$;Ãt	PèÄD$;Ãt	PèÄD$\;Ãt
+|$ T$dSP$WRPÿT$|Äë|$ ;ût	WèÄD$(;Ãt	PèÄÆ_^][Ä|ÃX
+X$ L$,T$0L$
+PT$HL$$P
+HX$€;Ãt69\$4tT$LL$PPT$THP
+9\$ltL$tT$xHÉP;ût
+öÄtD$(L$pT$XG$O(WTë
+D$(PèÄ;ût÷tL$ T$\OpWtë
+D$ PèÄ$;ÃtL$8$;ÃtT$<3À_^][Ä|Ã§®ÍÔ2DM}LK²J×IõK	/U{Ë/8w8ÇRÓáHKVG{HF¢³ÄÕæ÷>Oû$WEL$ì
+ÁSUVHWíHùÆD
+
+hŒ$0Z$,ÇD$
+ÀSŒ$$$ Wè$,Ä3í
+Àö$43ö
+ÀvO
+Àt/øt*GHIHOA
+À|
+3ÀBëQèÄë
++OŸAOD4
+$4F;ðr±$<D$
+PQèðÄ>ÿ$@
+PQÿ$DBD$
+RPUQÿ$H
+Àt-
+ÐPQÿ$LBD$
+RPUQÿ$(E;è
++ÿÿÿD$$,@;ÁD$Øþÿÿ_^]3À[Ä
+Ã$,ÇD$
+Àù$$Sè$,Ä
+ÀÇD$6Œ$43ö
+ÿvH
+Àt/øt*CHIHKA
+À|
+3ÀBëQèÄë
++KŸAKD4
+F;÷rž$03ÿ
+ÀvJ¬$8Et$
+Ê:u
+ÉtPÊ:VuÀÆÉuà3ÀëÀØÿ
+Àt$0GÅ;ørœ;Œ$0i$@Ž$ QRÿ$DT$l$
+žQRUPÿ$H
+Àt&QRÿ$LT$
+žQRUPÿ$(E;èl$ÊþÿÿD$$,@;ÁD$þÿÿ_^]3À[Ä
+Ã¬$0¹3À|$
+ó«3ÿ
+ívI$8
+Ÿt
+D
+
+ÀujhèÄ
+À3ÉWGHÃ;ýfHrŸ$,ÇD$
+ÀÖŽ$(¬$$$ UèÄÇD$
+öE
+Àteøt`EPJPEH
+É|=03ÉFL$0ëKt$
+¿
+Àt	PèÄÆOuë_^]žýÿÿÿ[Ä
+ÃPèÄD$ëEŸ@T$ED$
+À{=pE
+Àt3øt.EPJPEH
+É|
+83ÉGñ8ëPèÄðë
++EŸ0@E
+ööþêT$|
+
+ÿÚf<wÏ$@QRÿ$D3ÀfwTüD$L$RPQRÿ$H
+Àt1QRÿ$L3ÀfwTüD$L$RPQRÿD$Ž$(@;ÆD$pþÿÿD$$,@;ÁD$?þÿÿt$
+¿
+Àt	PèÄÆOuë_^]3À[Ä
+Ãt$
+¿
+Àt	PèÄÆOuë_^]žþÿÿÿ[Ä
+Ãt$
+¿
+Àt	PèÄÆOuë_^]žþÿÿÿ[Ä
+Ã¬$HŽ$ =
+ítPÿMØQSÿ×D$ë3Û$@PQÿ×Ž$0D$¹3À|$
+
+öó«v
+$893Òh@Á;ÆflT
+rê$,3í
+ÀéŽ$$Vè$,Ä3ÿ
+Àž
+Àt/øt*FHIHNA
+À|
+3ÀBëQèÄë
++NŸAN
+Àýþÿÿ=òþÿÿfDD
+f
+Àäþÿÿ%ÿÿ$ Áàð$DLüQUWPÿ
+Ût$LTüRUWSÿ$(Ž$$G;øHÿÿÿ$,E;è
+ÿÿÿ
+ÛtD$PSÿSÿ$ L$QPÿ_^]3À[Ä
+ÃaX²WãV@#?<@[?ŽX
+W¡@¿?Ö@ð?gUŸX4WWè@
+?$@I?¹ç@!TXÜW4?M?@S @±
+R.fileþÿgcreate.c@comp.idè
++ÿÿ.drectveP.textPÂ( { _tolower .debug$FŸA.text°~äÍ _free / > S b t  .debug$FÖÉ~y.textP
+ßFCû .dataµxEÞ¢.debug$F.text	áº1ž	 .debug$F
++îîjN	.text
+P3·÷ÖÇ
+ Ó à .debug$F
+
+.text
+ÀeÒ!,í
+ .debug$Fò¶
+.text  ±=÷  .debug$FÇÑ.text`ÌÉÍÓ 
+ .debug$FtŸäB.texty5gø, ? R .debug$F7Y,«.text`'Ò0^h   Š ž È Ú å õ .debug$FRT.textÀ"ÖÉ  * F [ __filbuf h .debug$Fw_xpmstrcasecmp_XpmCreateImageFromXpmImage_XDestroyImage_boundCheckingMalloc_XDefaultDepth_XDefaultColormap_XDefaultVisual_XDefaultScreen_CreateColors??_C@_04COF@None?$AA@_xpmVisualType_AllocColor_XAllocColor_XParseColor_SetColor_FreeColors_XFreeColors_CreateXImage_XCreateImage_MSWPutImagePixels__imp__SetPixel@16__imp__SelectObject@8_xpmParseDataAndCreate_xpmFreeColorTable_xpmParseExtensions_xpmHashTableFree_xpmParseColors_xpmHashTableInit_xpmGetCmt_xpmParseValues_xpmParseHeader_ParseAndPutPixels__imp__DeleteDC@4__imp__CreateCompatibleDC@4_boundCheckingCalloc_xpmHashSlot_xpmNextStringCrDatFrI.obj/   1345987750              100666  4690      `
++LŠ$:PH
+>.drectveP
+
++.text\ì P`.debug$F
+.HB.textð8( P`.dataŸ@0À.dataÆ@0À.data
+Í@0À.debug$FÙéHB.textó	 P`.data?	@0À.debug$FF	V	HB.textÀ`	 
++ P`.debug$F4
++D
++HB.textN
++ P`.debug$FÎ
++Þ
++HB.textè
++è
+ P`.data
++
+@0À.data
++$
+@0À.debug$F.
+>
+HB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ì8VW|$H
+ÿtÇt$TL$PT$LD$VPD$LQRPèÄ
+ÀuE
+öt L$ VQèT$(D$RPWèÄëL$jQWèÄ
+T$ðRèÄÆ_^Ä8Ã-
++C	Setì$$($0SUV3ö;ÎWt$,t$0tlöÄteA;Æt^T$ÇD$ RT$0RPA
+PèÄ$<j{
+G|$œPD$
+èèÄ;îl$
+u_^]žýÿÿÿ[Ä$Ãt$ ë»KS
+CQ
+RPQT$DhRètL$XÄ
+Àt
+ötHPQRhVèÄðD$ 
+Àt¡
+NÆT$4+òFVèÄE
+Àu
++ŸýÿÿÿéL$|$4Î3ÀL$Éÿò®÷Ñ+ùÁ÷}Áéó¥Èáó€KS
+CQRL$
+PUQRèðÄ
+ö
+<L$¯C@T$D$0À¯Ct$,ÈÆPèèÄ
+íu
++ŸýÿÿÿéúCL$|$ÁÇÕL
+ML$
+C
++Í@L$$D$(ëL$$<Éÿ3ÀÂò®÷Ñ+ùÁ÷züÁéó¥È3Àáó€L$$|üÉÿò®Bü÷ÑILD$(
++HD$(u²T$KT$ÊÅTL$ÑKSQKRSQ
+RQPèD$8Ä
+Àt/$@T$RHP
+D$4QKRT$
+PÊTüRèÄ$83ö(l$
+|$
+ÿvÝ
+Àt	PèÄÃOuëUèÄÆ_^][Ä$ÃN0s
+®ŽØÞðø
+e!e+5ÄÓ XPMEXT %d %d%d %d %d %dçì$SUV
+ÀWÇD$ÏŽ$(¬$ ëŽ$(EVPD$
+P]èÄ
+t4¿
+ÀtPQhVèÄðÇÃÿ~ØT$+òFVèÐÄ
+Òti$
+ÉÿÅ8þ8|$3Àò®÷Ñ+ùÁ÷úÁéó¥ÈD$á@ó€$D$Á$$$;ÁAÿÿÿ_^]3À[ÄÃ_^]žýÿÿÿ[ÄÃF&R%a$gx%	%s %s
+!D$
+T$SUVt$
+HÿÂ¯Æ@W
+ÉD$ va\$$l$L$
+}
+Òv3T$$T$(V
+@ÊPWèD$0Ä
+þÃHD$$uÙT$D$ ÆMÈML$
+ÅIL$
+u­ë\$$l$}
+Òv!êV@D$,
+ÐQWèÄ
+þÃMuáÆ_^][ÃH&£&º+L$3Ò3À
+Év[SUl$
+VWL$]}ÉÿuDD$3Àò®÷ÑI
+ÛT
++v>Éÿ3ÀÆò®÷ÑIKT
++uêD$Å
+HD$D$uµ_^][L$
+Â
++@T$Ãx0D$T$SUXÂ3íD$
+À¶VWD$t$
+QhRèD$0Ä
+E;ès>Éÿ3Àò®÷ÑILKFVÃ
+ÀvVD$:Éÿ3Àò®÷Ñ+ùÁ÷;Áéó¥ÈD$$áE;èó€s:Éÿ3Àò®÷ÑILKD$ÃÂHD$u²t$
+D$Æ
+Ht$
+D$
+Rÿÿÿ_^¡][
+Jf¡fBÃ1;7Ú8ä8í8XPMENDEXTXPMEXT %sö5.fileþÿgCrDatFrI.c@comp.idè
++ÿÿ.drectveP-÷Q".textÐ 
+ - 9 .debug$F¡$óW.textðŽ{#U _free p .dataÞ
+U
+.dataùKk _sprintf .data
+-ÚNØÁï .debug$FõIŸ.text	ÆÕçš	 .data
++IJ-æ
++3_strncpy .debug$F
+	.text
+À+Ñ*A
+ .debug$F
+
+.text</O .debug$Fµôyi.text24y` .data
++êÐ©ôr.data
++¹èÒË.debug$F®_XpmCreateDataFromImage_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage_XpmCreateDataFromXpmImage_boundCheckingMalloc??_C@_07MEOC@?5XPMEXT?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_0M@LCDJ@?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@_boundCheckingCalloc_CreateColors??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@_xpmColorKeys_CreatePixels_CountExtensions_CreateExtensions??_C@_09IGJF@XPMENDEXT?$AA@??_C@_09CHAC@XPMEXT?5?$CFs?$AA@CrBufFrI.obj/   1345987750              100666  5927      `
++LŠ$:PÄR.drectveP$
++.textt P`.debug$F6FHB.text@P P`.data	@0À.data	@0À.data	@0À.data€	@0À.data
+«	@0À.dataž	@0À.data*À	@0À.debug$Fê	ú	HB.textP
++T
+ P`.data
+@0À.debug$F¡
+±
+HB.text°»
+k
+ P`.debug$F
+
+HB.textp£
+ P`.debug$F
+#
+HB.text -
+Í
+ P`.data
+@0À.data+@0À.data2@0À.debug$F@PHB.textPZ P`.debug$FªºHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES ì8VW|$H
+ÿtÇt$TL$PT$LD$VPD$LQRPèÄ
+ÀuE
+öt L$ VQèT$(D$RPWèÄëL$jQWèÄ
+T$ðRèÄÆ_^Ä8Ã-
++C	Setì$S$$UVW3í3ö3ÿ;Ýl$(¹t
++L$
+ául$
+;ÝtröÄtkC;ÅtdL$ K
+PQèÄð9l$
+t
+SèÄøT$$hRèD$ÇD0PD$$èÐÄ
+;ÕT$u_^]žýÿÿÿ[ÄÃl$ ë©|$$Éÿ3Àò®÷Ñ+ùÁ÷úÁéó¥ÈD$
+á;Åó€t*[;Ýt#L$T$SÑhRèL$
+Ä
+ÈL$$,CK
+SPQRPL$4hQèè$HÄ
+Àt!öt
+P@RPL,,hQèÄèD$ 
+ÀtT,$hRèÄèD,$hPèL$
+èD$ ÅPQD$(èÄ
+ÀÂT$D$Ð|$$Éÿ3Àò®÷Ñ+ùÁ÷úÁéó¥Èáó€L$|$
+Í¬$0
+ÿL$t*E
+Àt#L$T$PÑhRèL$
+Ä
+ÈL$CK
+SPQD$RL$$PT$$QRèðÄ
+öu0CL$¯ÀT$¯CDPRD$ èÄ
+Àu#ŸýÿÿÿD$
+Àt	PèÄÆ_^][ÄÃ
+ÿD$t&M
+
+ÉtQL$ÁhPèL$
+Ä
+ÈL$SCKRSPQRT$ PD$(L$$ÐQRèD$<Ä
+
+Àt MU
+QL$RT$D$ÑPRèÄD$L$_$$D$^]3À[ÄÃW<hOv(|%$ó#ù%% +%Q
+W%ms%%#
++%7-d~©#¯%ä7
+A
+};
++",
++ XPMEXT %d %d"%d %d %d %d/*%s*/
++/* XPM */
++static char * image_name[] = {
++>
+ì$
+SUV
+ÀWÆD$"ÇD$Ž$0¬$$ëŽ$0$(VÃPD$!PèÄ
+t4¿
+ÀtPQhVèÄðÇÃÿ~ØD$+ð$
+ÆÞŽ$ ËQPèÐÄ
+Òty>Éÿû3À>u|$òò®÷Ñ+ùt$Á÷|$Áéó¥ÈD$áó€}$
+û@}$($,Â;ÁD$$(
++ÿÿÿ_^]3À[ÄÃ_^]žýÿÿÿ[ÄÃQ2]1l0r%1³	%s %sI-D$S\$HUVt$W
+ÀvO|$(D$ l$
+Æ"F
+ív#T$,S
+@ÊPVèÄ
+óÇMuál$
+
+D$ ÆHD$ u»ë|$(l$
+Æ"F
+ívS@D$0
+ÐQVèÄ
+óÇMuá|$D$Æ"+÷FÎ_^][Ã92N2¬7D$3Ò
+ÀvTS\$UVWD$;Éÿ3Àsò®C÷ÑI
+ÀT
++
+vè>Éÿ3ÀÆò®÷ÑIMT
++uêD$Ã
+HD$uÀ_^]B
+[ÃB
+Ãb<D$Vt$W
+ÀvRS\$UD$ PhVè{ðCÄ
+
+ÀvèQhVèÄ
+ðÇMuçD$ Ã
+HD$ uº][¡Ö|$
+
++÷_J¡Æ
+Bf
+
+D$
+fJ
+Î^Ã
+J"%;GA%aDoDzDD,
++"XPMENDEXT",
++"%s",
++"XPMEXT %s"AVt$W3Ò~
+ÿtÉÿ3Àò®÷ÑIÑÂ~
+ÿtÉÿ3Àò®÷ÑIT
++~
+
+ÿtÉÿ3Àò®÷ÑI_^D
++Ã_Â^ÃPO.fileþÿgCrBufFrI.c@comp.idè
++ÿÿ.drectveP-÷Q".textÐ 
+ / ; .debug$F)äîÙ.text@ò _OW .dataºKt_free  .data»0Á§.dataÞ
+UÂ.dataùKkÝ.data	
+$l
+þ	.data
++¿Ÿù€0
++V _sprintf .data
+*É#·âk
+.debug$F
+õIŸ.text
+PâF­
+ .dataIJ-æºÛ_strncpy .debug$F
+.text°×ené .debug$F.textpBÜ!ö .debug$F:y.text u,l .data".]Î.dataÏÃnt@.dataTU<d.debug$F.textP'ò
+ .debug$F_XpmCreateBufferFromImage_XpmFreeXpmImage_xpmSetInfo_XpmCreateXpmImageFromImage_XpmCreateBufferFromXpmImage??_C@_03FMCK@?$HN?$DL?6?$AA@_boundCheckingRealloc??_C@_03NNMC@?$CC?0?6?$AA@??_C@_07MEOC@?5XPMEXT?$AA@??_C@_06HNGK@?5?$CFd?5?$CFd?$AA@??_C@_0N@NELN@?$CC?$CFd?5?$CFd?5?$CFd?5?$CFd?$AA@??_C@_07MLDG@?1?$CK?$CFs?$CK?1?6?$AA@_boundCheckingMalloc??_C@_0CK@DNAC@?1?$CK?5XPM?5?$CK?1?6static?5char?5?$CK?5image_na@_WriteColors??_C@_06KCMF@?7?$CFs?5?$CFs?$AA@_xpmColorKeys_WritePixels_ExtensionsSize_WriteExtensions??_C@_0O@HIEL@?0?6?$CCXPMENDEXT?$CC?$AA@??_C@_06JPPF@?0?6?$CC?$CFs?$CC?$AA@??_C@_0O@MLOK@?0?6?$CCXPMEXT?5?$CFs?$CC?$AA@_CommentsSize
++Attrib.obj/     1345987750              100666  3166      `
++LŠ$:P^/.drectvePŒ
++.textP
+\ P`.debug$FpHB.textpú P`.debug$F"2HB.text< P`.debug$FL\HB.text@f P`.debug$FŠ¶HB.textðÀ° P`.debug$FÄÔHB.textPÞ. P`.debug$F8HHB.textRR	 P`.debug$F¬ŒHB.text`Æ& P`.debug$FDTHB-defaultlib:uuid.lib -defaultlib:uuid.lib -defaultlib:LIBC -defaultlib:OLDNAMES S\$
+Ût?D$
+
+À~.UVWèó¿
+Àt	PèÄÆOuëÃMuÞ\$_^]SèÄ[Ã%AJW|$
+ÿteD$
+
+ÀvTSUVÇèGø
+Àt	PèÄGü7
+ÀvØ
+Àt	PèÄÆKuë
+Àt	PèÄÇ
+Mu»|$^][WèÄ_Ã"<Qgp
+žÃD$3É;Át0H$öÆH(HDH@HHHLHPtH<H8÷ÂtHpHtÃ;SU\$Vt$3íW|$
+öÄtCFDK
+N@k
+këiöÄtdC
+KVDRPQèÄ
+
+Àt%åþÁöÄuV$RèÄn$n(n@ë'C
+F@ONHWVLG
+FPk
+kooo
+öÄtO
+N<WV8o
+oöt
+GFON
+_Ê ÂS
+V FKN^][Ã?!]é
+Vt$
+µPèÄ
+Àu
+L$^žýÿÿÿÃ
+öÈ~T$ÁÂNuõT$^3ÀÃ"E!Vt$W3ÿöÄt9~(tF$PèÄ~$~(öÄtN@VDQRèÄ~D~@ënöÄtiFD;ÇtN@QPèÄ~D~@FH;Çt
+PèÄ~HFL;Çt
+PèÄ~LFP;Çt
+PèÄ~PF$;ÇtPèÄ~$~(öÄtF8;ÇtV<PRèÄ~<~8÷t9~ttFpPèÄ~p~t>_^Ã6W,mŠÇ
+æø'S\$
+ÛtGD$
+
+À~.UVWè3¿
+Àt	PèÄÆOuëÃMuÞ\$_^]PèSèÄ[Ã%CIR,.fileþÿgAttrib.c@comp.idè
++ÿÿ.drectveP.textP
+ígG _free .debug$F.textp
+1 .debug$F.text5]Ä+* .debug$F.text@Ñ¶
+F= .debug$F	.text
++ð+à(?P
++ .debug$F
+Sõm2
++.text
+PQµ	b
+ w .debug$F
+
+.text	Ê:(ò .debug$F.text`dŽ .debug$F²_xpmFreeColorTable_XpmFreeExtensions_XpmAttributesSize_xpmInitAttributes_xpmSetAttributes_CreateOldColorTable_boundCheckingMalloc_XpmFreeAttributes_FreeOldColorTable
+\ No newline at end of file
+diff -Naur vim73.orig/src/xpm_w32.c vim73/src/xpm_w32.c
+--- vim73.orig/src/xpm_w32.c	2010-05-15 11:04:07.000000000 +0000
++++ vim73/src/xpm_w32.c	2013-06-07 17:07:39.198896737 +0000
+@@ -1,4 +1,5 @@
+-/*
++/* vi:set ts=8 sts=4 sw=4:
++ *
+  * Load XPM image.
+  *
+  * This function is placed in separate file because Xpm headers conflict with
+@@ -30,9 +31,10 @@
+ #include "xpm.h"
+ 
+ /*
+- * Tries to load Xpm image from file 'filename'.
+- * If fails return -1.
+- * success - 0 and image and mask BITMAPS
++ * Tries to load an Xpm image from the file "filename".
++ * Returns -1 on failure.
++ * Returns 0 on success and stores image and mask BITMAPS in "hImage" and
++ * "hShape".
+  */
+     int
+ LoadXpmImage(filename, hImage, hShape)
+@@ -40,7 +42,7 @@
+     HBITMAP *hImage;
+     HBITMAP *hShape;
+ {
+-    XImage	    *img;   /* loaded image */
++    XImage	    *img;  /* loaded image */
+     XImage	    *shp;  /* shapeimage */
+     XpmAttributes   attr;
+     int		    res;
+@@ -51,10 +53,13 @@
+     DeleteDC(hdc);
+     if (res < 0)
+ 	return -1;
+-    else
++    if (shp == NULL)
+     {
+-	*hImage = img->bitmap;
+-	*hShape = shp->bitmap;
+-	return 0;
++	if (img)
++	    XDestroyImage(img);
++	return -1;
+     }
++    *hImage = img->bitmap;
++    *hShape = shp->bitmap;
++    return 0;
+ }
+diff -Naur vim73.orig/src/xxd/Make_ming.mak vim73/src/xxd/Make_ming.mak
+--- vim73.orig/src/xxd/Make_ming.mak	1970-01-01 00:00:00.000000000 +0000
++++ vim73/src/xxd/Make_ming.mak	2013-06-07 17:07:39.268896537 +0000
+@@ -0,0 +1,28 @@
++# The most simplistic Makefile, for MinGW gcc on MS-DOS
++
++ifndef USEDLL
++USEDLL = no
++endif
++
++ifeq (yes, $(USEDLL))
++DEFINES =
++LIBS    = -lc
++else
++DEFINES =
++LIBS    =
++endif
++
++CC = gcc
++CFLAGS = -O2 -Wall -DWIN32 $(DEFINES)
++
++ifneq (sh.exe, $(SHELL))
++DEL = rm
++else
++DEL = del
++endif
++
++xxd.exe: xxd.c
++	$(CC) $(CFLAGS) -s -o xxd.exe xxd.c $(LIBS)
++
++clean:
++	-$(DEL) xxd.exe
+diff -Naur vim73.orig/src/xxd/xxd.c vim73/src/xxd/xxd.c
+--- vim73.orig/src/xxd/xxd.c	2010-05-15 11:04:06.000000000 +0000
++++ vim73/src/xxd/xxd.c	2013-06-07 17:07:39.342229661 +0000
+@@ -49,6 +49,8 @@
+  *	    option -b added: 01000101 binary output in normal format.
+  * 16.05.00 Added VAXC changes by Stephen P. Wall
+  * 16.05.00 Improved MMS file and merge for VMS by Zoltan Arpadffy
++ * 2011 March  Better error handling by Florian Zumbiehl.
++ * 2011 April  Formatting by Bram Moolenaar
+  *
+  * (c) 1990-1998 by Juergen Weigert (jnweiger@informatik.uni-erlangen.de)
+  *
+@@ -207,8 +209,9 @@
+ 
+ /* Let's collect some prototypes */
+ /* CodeWarrior is really picky about missing prototypes */
+-static void exit_with_usage __P((char *));
+-static int huntype __P((FILE *, FILE *, FILE *, char *, int, int, long));
++static void exit_with_usage __P((void));
++static void die __P((int));
++static int huntype __P((FILE *, FILE *, FILE *, int, int, long));
+ static void xxdline __P((FILE *, char *, int));
+ 
+ #define TRY_SEEK	/* attempt to use lseek, or skip forward by reading */
+@@ -223,9 +226,10 @@
+ #define HEX_CINCLUDE 2
+ #define HEX_BITS 3		/* not hex a dump, but bits: 01111001 */
+ 
+-static void
+-exit_with_usage(pname)
+-char *pname;
++static char *pname;
++
++  static void
++exit_with_usage()
+ {
+   fprintf(stderr, "Usage:\n       %s [options] [infile [outfile]]\n", pname);
+   fprintf(stderr, "    or\n       %s -r [-s [-]offset] [-c cols] [-ps] [infile [outfile]]\n", pname);
+@@ -252,6 +256,15 @@
+   exit(1);
+ }
+ 
++  static void
++die(ret)
++  int ret;
++{
++  fprintf(stderr, "%s: ", pname);
++  perror(NULL);
++  exit(ret);
++}
++
+ /*
+  * Max. cols binary characters are decoded from the input stream per line.
+  * Two adjacent garbage characters after evaluated data delimit valid data.
+@@ -259,12 +272,11 @@
+  *
+  * The name is historic and came from 'undo type opt h'.
+  */
+-static int
+-huntype(fpi, fpo, fperr, pname, cols, hextype, base_off)
+-FILE *fpi, *fpo, *fperr;
+-char *pname;
+-int cols, hextype;
+-long base_off;
++  static int
++huntype(fpi, fpo, fperr, cols, hextype, base_off)
++  FILE *fpi, *fpo, *fperr;
++  int cols, hextype;
++  long base_off;
+ {
+   int c, ign_garb = 1, n1 = -1, n2 = 0, n3, p = cols;
+   long have_off = 0, want_off = 0;
+@@ -318,7 +330,8 @@
+ 
+       if (base_off + want_off != have_off)
+ 	{
+-	  fflush(fpo);
++	  if (fflush(fpo) != 0)
++	    die(3);
+ #ifdef TRY_SEEK
+ 	  c = fseek(fpo, base_off + want_off - have_off, 1);
+ 	  if (c >= 0)
+@@ -330,12 +343,14 @@
+ 	      return 5;
+ 	    }
+ 	  for (; have_off < base_off + want_off; have_off++)
+-	    putc(0, fpo);
++	    if (putc(0, fpo) == EOF)
++	      die(3);
+ 	}
+ 
+       if (n2 >= 0 && n1 >= 0)
+ 	{
+-	  putc((n2 << 4) | n1, fpo);
++	  if (putc((n2 << 4) | n1, fpo) == EOF)
++	    die(3);
+ 	  have_off++;
+ 	  want_off++;
+ 	  n1 = -1;
+@@ -345,6 +360,8 @@
+ 	      want_off = 0;
+ 	      while ((c = getc(fpi)) != '\n' && c != EOF)
+ 		;
++	      if (c == EOF && ferror(fpi))
++		die(2);
+ 	      ign_garb = 1;
+ 	    }
+ 	}
+@@ -355,15 +372,20 @@
+ 	    want_off = 0;
+ 	  while ((c = getc(fpi)) != '\n' && c != EOF)
+ 	    ;
++	  if (c == EOF && ferror(fpi))
++	    die(2);
+ 	  ign_garb = 1;
+ 	}
+     }
+-  fflush(fpo);
++  if (fflush(fpo) != 0)
++    die(3);
+ #ifdef TRY_SEEK
+   fseek(fpo, 0L, 2);
+ #endif
+-  fclose(fpo);
+-  fclose(fpi);
++  if (fclose(fpo) != 0)
++    die(3);
++  if (fclose(fpi) != 0)
++    die(2);
+   return 0;
+ }
+ 
+@@ -379,11 +401,11 @@
+  *
+  * If nz is always positive, lines are never suppressed.
+  */
+-static void
++  static void
+ xxdline(fp, l, nz)
+-FILE *fp;
+-char *l;
+-int nz;
++  FILE *fp;
++  char *l;
++  int nz;
+ {
+   static char z[LLEN+1];
+   static int zero_seen = 0;
+@@ -398,12 +420,15 @@
+ 	  if (nz < 0)
+ 	    zero_seen--;
+ 	  if (zero_seen == 2)
+-	    fputs(z, fp);
++	    if (fputs(z, fp) == EOF)
++	      die(3);
+ 	  if (zero_seen > 2)
+-	    fputs("*\n", fp);
++	    if (fputs("*\n", fp) == EOF)
++	      die(3);
+ 	}
+       if (nz >= 0 || zero_seen > 0)
+-	fputs(l, fp);
++	if (fputs(l, fp) == EOF)
++	  die(3);
+       if (nz)
+ 	zero_seen = 0;
+     }
+@@ -439,10 +464,10 @@
+     0070,0071,0372,0373,0374,0375,0376,0377
+ };
+ 
+-int
++  int
+ main(argc, argv)
+-int argc;
+-char *argv[];
++  int argc;
++  char *argv[];
+ {
+   FILE *fp, *fpo;
+   int c, e, p = 0, relseek = 1, negseek = 0, revert = 0;
+@@ -451,8 +476,8 @@
+   int octspergrp = -1;	/* number of octets grouped in output */
+   int grplen;		/* total chars per octet group */
+   long length = -1, n = 0, seekoff = 0;
+-  char l[LLEN+1];
+-  char *pname, *pp;
++  static char l[LLEN+1];  /* static because it may be too big for stack */
++  char *pp;
+ 
+ #ifdef AMIGA
+   /* This program doesn't work when started from the Workbench */
+@@ -495,7 +520,7 @@
+ 	  else
+ 	    {
+ 	      if (!argv[2])
+-		exit_with_usage(pname);
++		exit_with_usage();
+ 	      cols = (int)strtol(argv[2], NULL, 0);
+ 	      argv++;
+ 	      argc--;
+@@ -508,7 +533,7 @@
+ 	  else
+ 	    {
+ 	      if (!argv[2])
+-		exit_with_usage(pname);
++		exit_with_usage();
+ 	      octspergrp = (int)strtol(argv[2], NULL, 0);
+ 	      argv++;
+ 	      argc--;
+@@ -531,7 +556,7 @@
+ 	  else
+ 	    {
+ 	      if (!argv[2])
+-		exit_with_usage(pname);
++		exit_with_usage();
+ #ifdef TRY_SEEK
+ 	      if (argv[2][0] == '+')
+ 		relseek++;
+@@ -550,7 +575,7 @@
+ 	  else
+ 	    {
+ 	      if (!argv[2])
+-		exit_with_usage(pname);
++		exit_with_usage();
+ 	      length = strtol(argv[2], (char **)NULL, 0);
+ 	      argv++;
+ 	      argc--;
+@@ -563,7 +588,7 @@
+ 	  break;
+ 	}
+       else if (pp[0] == '-' && pp[1])	/* unknown option */
+-	exit_with_usage(pname);
++	exit_with_usage();
+       else
+ 	break;				/* not an option */
+ 
+@@ -602,7 +627,7 @@
+     octspergrp = cols;
+ 
+   if (argc > 3)
+-    exit_with_usage(pname);
++    exit_with_usage();
+ 
+   if (argc == 1 || (argv[1][0] == '-' && !argv[1][1]))
+     BIN_ASSIGN(fp = stdin, !revert);
+@@ -640,7 +665,7 @@
+ 	  fprintf(stderr, "%s: sorry, cannot revert this type of hexdump\n", pname);
+ 	  return -1;
+ 	}
+-      return huntype(fp, fpo, stderr, pname, cols, hextype,
++      return huntype(fp, fpo, stderr, cols, hextype,
+ 		negseek ? -seekoff : seekoff);
+     }
+ 
+@@ -664,7 +689,18 @@
+ 	  long s = seekoff;
+ 
+ 	  while (s--)
+-	    (void)getc(fp);
++	    if (getc(fp) == EOF)
++	    {
++	      if (ferror(fp))
++		{
++		  die(2);
++		}
++	      else
++		{
++		  fprintf(stderr, "%s: sorry cannot seek.\n", pname);
++		  return 4;
++		}
++	    }
+ 	}
+     }
+ 
+@@ -672,54 +708,76 @@
+     {
+       if (fp != stdin)
+ 	{
+-	  fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "");
++	  if (fprintf(fpo, "unsigned char %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
++	    die(3);
+ 	  for (e = 0; (c = argv[1][e]) != 0; e++)
+-	    putc(isalnum(c) ? c : '_', fpo);
+-	  fputs("[] = {\n", fpo);
++	    if (putc(isalnum(c) ? c : '_', fpo) == EOF)
++	      die(3);
++	  if (fputs("[] = {\n", fpo) == EOF)
++	    die(3);
+ 	}
+ 
+       p = 0;
++      c = 0;
+       while ((length < 0 || p < length) && (c = getc(fp)) != EOF)
+ 	{
+-	  fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
+-	    (p % cols) ? ", " : ",\n  "+2*!p,  c);
++	  if (fprintf(fpo, (hexx == hexxa) ? "%s0x%02x" : "%s0X%02X",
++		(p % cols) ? ", " : ",\n  "+2*!p,  c) < 0)
++	    die(3);
+ 	  p++;
+ 	}
++      if (c == EOF && ferror(fp))
++	die(2);
+ 
+-      if (p)
+-	fputs("\n};\n"+3*(fp == stdin), fpo);
++      if (p && fputs("\n", fpo) == EOF)
++	die(3);
++      if (fputs("};\n" + 3 * (fp == stdin), fpo) == EOF)
++	die(3);
+ 
+       if (fp != stdin)
+ 	{
+-	  fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "");
++	  if (fprintf(fpo, "unsigned int %s", isdigit((int)argv[1][0]) ? "__" : "") < 0)
++	    die(3);
+ 	  for (e = 0; (c = argv[1][e]) != 0; e++)
+-	    putc(isalnum(c) ? c : '_', fpo);
+-	  fprintf(fpo, "_len = %d;\n", p);
++	    if (putc(isalnum(c) ? c : '_', fpo) == EOF)
++	      die(3);
++	  if (fprintf(fpo, "_len = %d;\n", p) < 0)
++	    die(3);
+ 	}
+ 
+-      fclose(fp);
+-      fclose(fpo);
++      if (fclose(fp))
++	die(2);
++      if (fclose(fpo))
++	die(3);
+       return 0;
+     }
+ 
+   if (hextype == HEX_POSTSCRIPT)
+     {
+       p = cols;
++      e = 0;
+       while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
+ 	{
+-	  putchar(hexx[(e >> 4) & 0xf]);
+-	  putchar(hexx[(e     ) & 0xf]);
++	  if (putc(hexx[(e >> 4) & 0xf], fpo) == EOF
++		  || putc(hexx[e & 0xf], fpo) == EOF)
++	    die(3);
+ 	  n++;
+ 	  if (!--p)
+ 	    {
+-	      putchar('\n');
++	      if (putc('\n', fpo) == EOF)
++		die(3);
+ 	      p = cols;
+ 	    }
+ 	}
++      if (e == EOF && ferror(fp))
++	die(2);
+       if (p < cols)
+-	putchar('\n');
+-      fclose(fp);
+-      fclose(fpo);
++	if (putc('\n', fpo) == EOF)
++	  die(3);
++      if (fclose(fp))
++	die(2);
++      if (fclose(fpo))
++	die(3);
+       return 0;
+     }
+ 
+@@ -730,6 +788,7 @@
+   else	/* hextype == HEX_BITS */
+     grplen = 8 * octspergrp + 1;
+ 
++  e = 0;
+   while ((length < 0 || n < length) && (e = getc(fp)) != EOF)
+     {
+       if (p == 0)
+@@ -771,6 +830,8 @@
+ 	  p = 0;
+ 	}
+     }
++  if (e == EOF && ferror(fp))
++    die(2);
+   if (p)
+     {
+       l[c = (11 + (grplen * cols - 1)/octspergrp + p)] = '\n'; l[++c] = '\0';
+@@ -779,7 +840,11 @@
+   else if (autoskip)
+     xxdline(fpo, l, -1);	/* last chance to flush out suppressed lines */
+ 
+-  fclose(fp);
+-  fclose(fpo);
++  if (fclose(fp))
++    die(2);
++  if (fclose(fpo))
++    die(3);
+   return 0;
+ }
++
++/* vi:set ts=8 sw=4 sts=2 cino+={2 cino+=n-2 : */
+diff -Naur vim73.orig/uninstal.txt vim73/uninstal.txt
+--- vim73.orig/uninstal.txt	2010-05-15 11:03:08.000000000 +0000
++++ vim73/uninstal.txt	2013-06-07 17:07:39.362229603 +0000
+@@ -55,8 +55,8 @@
+    skip the next step.
+ 
+ 5. Delete the distributed files.  If you followed the directions, these will
+-   be located in a directory like "C:\vim\vim72".  If the $VIM environment
+-   variable is set, the directory will be $VIM\vim72.  Delete the "vim72"
++   be located in a directory like "C:\vim\vim73".  If the $VIM environment
++   variable is set, the directory will be $VIM\vim73.  Delete the "vim73"
+    directory and all that is in it.  Warning: If you changed any of the
+    distributed files, or added some of your own files, you might want to save
+    these first.  But normally you would not have changed or added files here.
+diff -Naur vim73.orig/vimtutor.com vim73/vimtutor.com
+--- vim73.orig/vimtutor.com	2010-05-15 11:04:12.000000000 +0000
++++ vim73/vimtutor.com	2013-06-07 17:07:39.392229518 +0000
+@@ -30,7 +30,7 @@
+ $ !
+ $	if f$search ("vim:vim.exe") .eqs. ""
+ $	then
+-$	    write sys$error "Error - Can't run tutoral. VIM not found."
++$	    write sys$error "Error - Can't run tutorial. VIM not found."
+ $	    exit
+ $	endif
+ $ !
